SlideShare uma empresa Scribd logo
1 de 19
algoritmos




       Profª. Mariangela Gomes Setti
       Prof. Richard Duarte Ribeiro

                     CEFET-PR
                       DAINF

                   Curitiba-2002

Revisado   pelo   prof.   Robson   Ribeiro   Linhares
1. Tipos Básicos e Comandos Básicos em Pseudocódigo

  1.1. Constantes
       Uma constante é um determinado valor fixo que não se modifica ao longo do tempo, durante
a execução de um programa. Constantes podem ser do tipo numérica, lógica ou literal.

      1.1.1. Constantes Numéricas
      Exemplos:
         a) 25;
         b) 3,14;
         c) 7,8 x 103;
         d) -15;
         e) 0,342;
         f) –10-9.

      1.1.2. Constantes Lógicas
      É um valor lógico, isto é, que só pode ser falso ou verdadeiro.

      1.1.3. Constante Literal
      Exemplos:
         a) “José da Silva”;
         b) “1234”;        (note que isto não é uma constante numérica)
         c) “X1Y2W3”;
         d) “*A!B?-/”.


 1.2. Variáveis
      No Pseudocódigo, temos quatro tipos básicos de dados que podem ser utilizados:

      Inteiro: qualquer número inteiro, negativo, nulo ou positivo.
             Ex.: -5; 0; 235
      Real: qualquer número real, negativo, nulo ou positivo.
             Ex.: -5; 30,5; 0; 40
      Caractere: qualquer conjunto de caracteres alfanuméricos.
             Ex.: “AB”; “xyz”
      Lógico: conjunto de valores falso ou verdadeiro em proposições lógicas.


       1.2.1. Declaração de variáveis
              Toda variável deve ser declarada conforme a sintaxe abaixo:
                                                          ,
                   inteiro                          identificador
                                                                            ;
                    real
                                                      Identificador é o nome da variável
                                                      que está sendo declarada.
                  caractere


                   lógico
                                           lógica aplicada - Prof. Richard p á g . ( 2/19)
                                          arq.: algoritmos-120823054517-phpapp02.doc
OBS.: Os nomes de variáveis devem começar com letra (maiúscula ou minúscula e podem ser
seguidos por números, letras , “-“ ou “_”.

   Exemplos de declaração de variáveis:
    inteiro x1;
    real A, B;
    caractere frase, NOME;
    lógico TEM;

   Exemplos de nomes de variáveis inválidos:
    Variável 1;
    3x;
    x + y.

REGRA: Dê nomes significativos para variáveis. Para identificar, por exemplo, uma variável que
  receberá a média aritmética de notas de provas utilize o nome media (sem acento) ao invés de
  z, x ou k.


  1.3. Comentários
       Para melhorar a clareza do algoritmo deve-se fazer uso dos comentários . Eles podem ser
inseridos dentro de chaves.
Ex.: {Isto é um comentário em pseudocódigo}

   Os mesmos podem ser colocados em qualquer ponto do algoritmo.


  1.4. Comando de Atribuição
    Para a atribuição de um valor a uma variável, usaremos o símbolo de atribuição “   “.
Sintaxe :

                identificador                      expressão            ;
                                                                         c
Exemplos:                                                                a
    k 1; (a variável k recebe o inteiro 1)                               r
    COR “verde”;                                                         a
    TESTE falso;                                                         c
                                                                         t
    A B;                                                                 e
    MÉDIA SOMA/N;                                                        r
                                                                         e

  1.5. Operadores Aritméticos
       Além os símbolos das quatro operações básicas (+, – (unário ou binário), *, /) usaremos
símbolos para raiz quadrada e exponenciação, por exemplo:

       a ou raiz(a)
     (a + b)n ou (a + b) ** n
       b2   4ac
                                            lógica aplicada - Prof. Richard p á g . ( 3/19)
                                           arq.: algoritmos-120823054517-phpapp02.doc
Além disso, usaremos os nomes das funções matemáticas comuns. Por exemplo:
      sen(x); cos(x); tg(x); exp(x)  ex, etc...
      abs(x) ou |x|; sinal (x)  fornece –1, +1 ou zero conforme x
      int(x)  inteiro de x

Usaremos também como nomes de operadores:
   mod, por exemplo: m mod i é: resto (módulo) da divisão de m por i
   resto (m,i): idem

   div ou “/”, por exemplo, n div m: quociente da divisão inteira de n por m
   quociente (n,m): idem


 1.6. Operadores Lógicos
      Dentro das relações lógicas, usaremos os conectivos usuais:
          “e” ou “ ” para a conjunção
          “ou” ou “ ” para a disjunção (não exclusiva)
          “não” ou “~” ou “ ” para a negação


 1.7. Operadores Relacionais
    Analogamente, usaremos os conectivos relacionais =,           ( ou !=, ou <>),          (ou >=), <,        (ou <=)
de significado óbvio.


 1.8. Hierarquia das Operações
      As prioridades para as operações mistas são dada pela tabela a seguir:

                                  1     Parênteses e funções
                                  2     Expressões aritméticas:
                                            1) +, – (unários)
                                            2) * *
                                            3) *, /
                                            4) +, – (binários)
                                  3     Comparações:
                                        <, , =, , >,
                                  4     não (~)
                                  5     e( )
                                  6     ou ( )


 1.9. Comandos de entrada e saída
      Entrada

                                                       ,
                                 leia                    c
                                                  identificador
                                                         a
                                                                                 ;
                                                       lógico
                                                         r
                                                                                    c
                                                         a
                                                         c                          a
                                              l ó g i c at a p l i c a d a - P r o r . R i c h a r d
                                                                                    f                     p á g . ( 4/19)
                                           a r q . : a l g o r i t m o s - 1 2 0 8 2a 0 5 4 5 1 7 - p h p a p p 0 2 . d o c
                                                                                     3
                                                         e
                                                                                    c
                                                         r
                                                                                    t
                                                         e
                                                                                    e
                                                                                    r
Ex.: leia NOTA,NUM;

            Saída

                                                             ,
                                escreva                        c
                                                         identificador
                                                               i
                                                               a
                                                                                  ;
                               ;                               d
                                                            lógico
                                                               r
                                                         expressão                 c
                                                               e
                                                               a
                                                               n
                                                               c                   a
                                                            lógico                 r
                                                               t
                                                         caractere
                                                               i
                                                               e
                                                             ógico
                                                                                  ,a
                                                            lógico
                                                               f                   c
                                                               r
                                                               i                   t
                                                               e
                                                               Onde:
                                                             ógico
                                                               c                   e
                                                                    Identificador = variável;
                                                                                   r
                                                               r
                                                               e
                                                             ógico
                                                                    Expressão = expressão matemática;
                                                                                   e
                                                               a    Caractere = conjunto de caracteres.
                                                               l
                                                            inteiro
       Ex.:
                                                                                  c
       escreva “NOME:”, N;                          i
                                                 inteiro                          a
                                                    n
       escreva A, X, 35;                                                           r
                                                    t
       escreva “Valor Lido:”, N, “Resultado =”, N**2+5;
                                                    e                             a
                                                             i                    c
                                                             r                     t
                                                                                  e
 Fluxograma                                                 o
                                                                                   r
    Fundamentalmente é uma ferramenta de codificação. Apresenta de                forma
                                                                          gráfica a seqüência na
                                                                                  e
qual os comandos ou blocos de processo são executados e a lógica de controle de execução.
Tradicionalmente têm servido para dois propósitos. Primeiro, têm sido usados como uma
ferramenta de projeto de programa para planejar a lógica detalhada e complicada do programa.
Segundo, têm sido usados como documentação do programa.
    Como os fluxogramas fornecem uma representação seqüencial de programa e não uma
representação hierárquica, não podem apresentar a estrutura do programa e as inter-relações entre
componentes procedurais.

Símbolos de Fluxograma




         Processo     Conector            Terminação                Decisão           Entrada/Saída


                                          ,                         ,                 ,
                                          lógic                     lógic             lógic
         Documento    Memória                 Exibição
                      ,
                      de Disco




                       identificló
         ,                gico                ,
                      ,                        inteiro                  inteiro               inteiro
                       caractere
                                                   lógica aplicada - Prof. Richard p á g . ( 5/19)
                                                  arq.: algoritmos-120823054517-phpapp02.doc
                                              identificló
                       identificló               gico
                          gico                                      ;                 ;
                                              caractere                  real                  real
1.10. Blocos
     Podem ser definidos como um conjunto de comandos com uma função bem definida. Eles
servem também para definir os limites onde as variáveis declaradas em seu interior são conhecidas.
São delimitados pelas palavras início e fim.


       início
          <declaração de                                           início
              variáveis>
          <inicialização de
              variáveis>



          <comandos>                                                fim
       fim

              Pseudocódigo                                      Fluxograma


  1.11. Estrutura Seqüencial
       É um conjunto de comandos, separados por ponto e vírgula (;) que serão executados em uma
seqüência linear de cima para baixo.


             C1 ;
             C2 ;                      Onde Ci são                   C1;
             C3 ;                      comandos
             .
             .
             .                                                       C2;
             .                                                       .
             .                                                       .
             Cn ;                                                    .


                                                                     Cn;



              Pseudocódigo                                      Fluxograma


  1.12. Estrutura Condicional
       A estrutura condicional permite a escolha do grupo de ações e estruturas a ser executado
quando determinadas condições, representadas por expressões lógicas, são ou não satisfeitas. Estas
estrutura é delimitada pelo comando se e pela expressão fim se.




                                            lógica aplicada - Prof. Richard p á g . ( 6/19)
                                           arq.: algoritmos-120823054517-phpapp02.doc
1.12.1.        Estrutura Condicional Simples
       Neste caso, a seqüência só é executada se a condição for verdadeira.


         se <condição>                                                             F
            então                         Onde Ci são
                                                                         V
               C1 ;                       comandos
               C2 ;                                                          C1;
               C3 ;
               .
               .
               .                                                             C2;
               Cn ;                                                           .
                                                                              .
         fim se                                                               .


                                                                             Cn;




                Pseudocódigo                                         Fluxograma


       1.12.2.        Estrutura Condicional Composta
       Neste caso, a seqüência a ser executada (dentre duas seqüências) dependerá do resultado da
condição.

         se <condição>                                               V             F
            então                         Onde Ci e Di
               C1 ;                       são
               C2 ;                       comandos             C1;                     D1;
               C3 ;
               .
               .
               .                                               C2;                     D2;
               Cn ;                                             .                       .
                                                                .                       .
                                                                .                       .
            senão
               D1;                                             Cn;                     Dn;
               D2;
               D3;
               .
               .
               .
               Dn;
         fim se


                Pseudocódigo                                         Fluxograma




                                            lógica aplicada - Prof. Richard p á g . ( 7/19)
                                           arq.: algoritmos-120823054517-phpapp02.doc
1.13. Estrutura de Repetição

       1.13.1.        Enquanto-faça
       Usado quando um conjunto de ações é executado repetidamente enquanto uma determinada
condição permanece válida. (Expressão cujo resultado é o valor lógico verdadeiro)
       Enquanto o valor da <condição> for verdadeiro, as ações dos comandos são executadas.
Quando for falso, o comando é abandonado. Se já da primeira vez o resultado é falso, os comandos
não são executados nenhuma vez.


            enquanto <condição> faça                                               F
                  C1 ;                      Onde Ci são                condição

                  C2 ;                      comandos                           V
                  C3 ;
                  .                                                      C1;
                  .
                  .
                  Cn ;
            fim enquanto                                                 C2;
                                                                          .
                                                                          .
                                                                          .


                                                                         Cn;




                  Pseudocódigo                                      Fluxograma

        1.13.2.       Interrupção
    Caso seja necessária uma interrupção durante a execução da repetição, pode-se fazê-la através
do comando interrompa. O mesmo fará a execução da repetição ser interrompida, sendo executada
a seqüência de comandos que vier logo após a expressão fim enquanto.
     Tal caso é mostrado no segmento abaixo:


           enquanto <condição> faça
                 seqüência A de comandos;
                 se <condição>
                   então interrompa;
                 fim se
                 seqüência B de comandos;
           fim enquanto
           seqüência C de comandos;


    Neste trecho, durante a repetição, as seqüências A, e B de comandos serão executadas até que a
condição para interrupção seja alcançada. Quando isso ocorrer (depois da execução da seqüência
A), o controle passará para a seqüência C. Note que depois da interrupção a seqüência B de
comandos não será executada.


                                            lógica aplicada - Prof. Richard p á g . ( 8/19)
                                           arq.: algoritmos-120823054517-phpapp02.doc
1.13.3.      Repita-enquanto
        A semântica do comando é a seguinte: os comandos C1, C2, ..., Cn são executados pelo
menos uma vez. Quando a condição é encontrada, ela é testada. Se for verdadeira os comandos C1,
C2, ..., Cn voltam a ser executados, se for falsa o comando seguinte será executado. Em outras
palavras, os comandos C1, C2, ..., Cn são reexecutados enquanto a condição for verdadeira.

              repita
                   C1 ;                      Onde Ci são
                   C2 ;                      comandos
                   C3 ;
                   .                                                         C1;
                   .                                                          V
                   .
                   Cn ;
              enquanto <condição> ;                                          C2;
                                                                              .
                                                                              .
                                                                              .


                  OBS: atente para o uso
                  do “;” ao final do                                   Fcondição
                  comando de repetição.                            V
                                                                         F




      1.13.4.       Para-faça
      A semântica do comando é a seguinte: v, i, l e p são variáveis quaisquer e que, de acordo
com as regras da programação estruturada, não devem ser modificadas nos comandos C1, C2, ...,
Cn.


          para v de i até  passo p faça
                                                                          v         i
             C1 ;
             C2 ;                                                                       F
             C3 ;                                                        condição
             .
             .                                                                      V
             .
             Cn ;                                                             C1;
          fim para

                                                                              C2;
                                                                               .
                                                               v v+p           .
                                                                               .


                                                                              Cn;




                   Pseudocódigo                                     Fluxograma

                                            lógica aplicada - Prof. Richard p á g . ( 9/19)
                                           arq.: algoritmos-120823054517-phpapp02.doc
Os dois últimos comandos (repita-enquanto e faça-para) possuem equivalência com o
comando enquanto-faça, como pode ser verificado pelos exemplos abaixo:

      Exs.:
      a) Comando repita-enquanto:
       I 1;                                     I 1;
       Repita                                   enquanto I <= 18 faça
          A B + C;                                 A B + C;
          Escreva A;                               escreva A;
          I I + 1;                                 I I + 1;
       enquanto I<=18;                          fim enquanto


      b) Comando faça-para:
                                                I 1;
       para I de 1 até 18 passo 2 faça          enquanto I <= 18 faça
           A B + A;                                A B + A;
           escreva A;                              escreva A;
       fim para                                    I I + 2;
                                                fim enquanto


 1.14. Alternativa de Múltipla Escolha
      A sintaxe de comando será:


    escolha (<expressão>)
       caso v11:                 Onde Ci e Di                            expressão
       [caso v12:]               são
       ...                       comandos
       [caso v1n:]                                                                    senão
           C11; ...; C1n;
           interrompa;                                    C1;      C2;          Cn;    Cm+1
       caso v22:                                                                        ;
       ...
       [caso v2n:]
           C21; ...; C2n;
           interrompa;
       ...
       caso vn1:
       ...
       [caso vnn:]
           C1; ...; Cn;
           interrompa;
       senão:
           C1; ...; Cn;
           interrompa;
    fim escolha
                                                                   Fluxograma
          Pseudocódigo
       senão
          D1;                             lógica aplicada - Prof. Richard p á g . ( 10/19)
                                          arq.: algoritmos-120823054517-phpapp02.doc

    fim se
Ex.:    leia tipo, peso;
        escolha (peso*2+3)
             caso 15:
                VALOR 15,00;
                interrompa;
             caso 17:
             caso 18:
             caso 19:
                VALOR 19,00;
                interrompa;
             caso 20:
             caso 21:
                se TIPO=5
                         então
                               VALOR 25,00;
                         senão
                               VALOR 30,00;
                fim se
                interrompa;
             senão:
                escreva “Peso acima do limite”;
                VALOR 0;
                interrompa;
        fim escolha

Obs.:
        O comando interrompa vale para todos os três tipos de estruturas de repetição, a para a
alternativa de múltipla escolha, fazendo com que caso ocorra uma chamada ao interrompa o
controle de execução passe para a linha seguinte à estrutura.

 Regras para confecção de Algoritmos
  1. Em primeiro lugar declare as variáveis;
  2. Em seguida essas variáveis devem ser inicializadas;
  3. Escolha nomes significativos para as variáveis;
  4. Procure alinhar os comandos de acordo com o nível a que pertençam, isto é, destaque a
     estrutura na qual estão contidos.




                                           lógica aplicada - Prof. Richard p á g . ( 11/19)
                                           arq.: algoritmos-120823054517-phpapp02.doc
2. Estrutura de Dados

  2.1. Variáveis Compostas Homogêneas
Variáveis compostas homogêneas correspondem a posições de memória, identificadas por um
mesmo nome, individualizadas por índices e cujo conteúdo é de mesmo tipo.
       O conjunto de 10 notas dos alunos de uma disciplina pode constituir uma variável
composta. A este conjunto associa-se o identificador NOTA que passará a identificar não uma única
posição de memória, mas 10.
       A referência ao conteúdo do n-ésimo elemento do conjunto será indicada por NOTA[n],
onde n é um número inteiro ou uma variável numérica contendo um valor inteiro.


       Ex.:
                   NOTA
              60      70       54   85     63       76     98     46   67   96
              1       2        3    4      5        6       7     8    9    10

NOTA[3] se referencia ao terceiro elemento do conjunto, cujo conteúdo é 54.


       2.1.1. Variáveis Compostas Unidimensionais
       São os conjuntos de dados referenciados por um mesmo nome e que necessitam de somente
um índice para que seus elementos sejam endereçados. São conhecidos como vetores.
       Exs.:
          NOTA
          OTA
           60 70               54   85     63       76     98     46   67   96
          TA
           0   0               4    5      3        6      8      6    7    6
          A1   2               3    4      5        6       7     8    9    10
                                                                            0
              PESO
              78,5         91,1     68,6        71,4       62,7
                  1        2        3           4          5


Sintaxe:
       <tipo> <identificador 1> [n 1], <identificador 2> [n 2], ... , <identificador x> [n x];
       onde,
              <tipo> é um dos tipos básicos já definidos (inteiro, real, caractere, lógico);
              <identificador x> é o nome associado a variável que se deseja declarar;
              n x é um número inteiro;

       Exemplos de declarações:
            inteiro VETOR[20]; {representa um vetor de 20 posições}
            real NOTAS[30];
            lógico TEM[3], NAOTEM[6];
            inteiro TESTE[4], FLAG[14], ok[4];

                                                         lógica aplicada - Prof. Richard p á g . ( 12/19)
                                                         arq.: algoritmos-120823054517-phpapp02.doc
2.1.2. Variáveis Compostas Multidimensionais
        Conjunto de dados referenciados por um mesmo nome e que necessita de mais de um índice
para ter seus elementos individualizados.

Exs.:
              ESCANINHO
                1        2     3
        1       60      65     25
        2       56      68     36
        3       86      32     34
                        1

                LIVRO
                             1 2 2     3
                          98   3 65   31     1
                          9
                          75    64    2
                                      87     2
        1       60      65     25
        2       56      6824    65
                               36     32     3
                6       8      64
        3       86      32     34
                6       1
                 1       2      3

Sintaxe:
       <tipo> <identificador 1> [m 1][n 1]...[z 1], <identificador 2> [m 2][n 2]...[z 2],
<identificador x> [m x][n x]...[z x];

            onde,
                     <tipo> é um dos tipos básicos já definidos (inteiro, real, caractere, lógico);
                     <identificador x> é o nome associado a variável que se deseja declarar;
                     m x, n x e z x são números inteiros;

            Exemplos de declarações:
                 inteiro CELULAS[20][30], TIPOS[2][4];
                 real MATRIX[10][23][5];
                 lógico RESULTADOS[3][6][23];
                 inteiro TESTE[6][8][2];




                                                   lógica aplicada - Prof. Richard p á g . ( 13/19)
                                                   arq.: algoritmos-120823054517-phpapp02.doc
    Inicialização de Variáveis Compostas

–    Para inicializar um vetor com o mesmo valor

          Ex.: Em um vetor NOTA[5],
                 NOTA 0
                 equivale a:
                 NOTA[1]     0; NOTA[2]       0; NOTA[3]      0; NOTA[4]     0; NOTA[5]      0;


–    Para inicializar um vetor com valores diferentes

          Ex.: Em um vetor NOTA[5],
                 NOTA (5.7, 9.5, 10.0, 3.7, 9.8)
                 equivale a:
          NOTA[1] 5.7; NOTA[2] 9.5; NOTA[3]                10.0; NOTA[4]     3.7; NOTA[5]      9.8;


    2.2. Variáveis Compostas Heterogêneas

          2.2.1. Registros
          São conjunto de dados logicamente relacionados, mas de tipos diferentes (numérico, literal,
lógico)
          Ex.:
                                              FUNC
                                NOME
                                                                            caractere
                                SALARIO
                                                                            real
                                IDADE                   CASADO
             inteiro                                                        lógico


Sintaxe:
       registro [nome] (<componentes>) <lista-de-identificadores> ;
       onde,
               registro é uma palavra chave;
               [nome] é o nome da estrutura (opcional).
               <componentes> são declarações e/ou identificadores de variáveis compostas,
                       separados por ponto-e-vírgula;
               <lista-de-identificadores> são os nomes que estão sendo associados aos registros que
                       se deseja declarar;

Exemplo de declarações:
     registro REGCAD (
         caractere NOME;
         real SALARIO;
         inteiro IDADE;
         lógico CASADO;
         ) FUNC;
                                              lógica aplicada - Prof. Richard p á g . ( 14/19)
                                              arq.: algoritmos-120823054517-phpapp02.doc
Onde REGCAD é o nome da estrutura de registro e FUNC é uma variável da forma
  REGCAD.

           registro (
              inteiro CPF, IDENTIDADE;
              lógico FGTS;
              ) PAG;

             Acima é declarada uma variável chamada PAG definida pela estrutura que a procede.

       A atribuição de valores às variáveis que compõem o registro pode ser qualificado da
seguinte maneira:
       FUNC.NOME “Fulano de Tal”;
       FUNC.SALARIO 3000,00;
       FUNC.IDADE 32;
       REGPAG.FGTS V;
       REGPAG.CPF 123663430;


        2.2.2. Conjunto de Registros
        Podem-se ter conjuntos de registros referenciáveis por um mesmo nome e individualizáveis
por índices.
        Ex.:
        Usando o registro REGCAD definido anteriormente, podemos definir um conjunto de
registros da forma:

           registro REGCAD CADASTRO [100];                                     REGCAD

                     NOME                         SALARIO         IDADE       CASADO
     1
     2



                                                                                                 CADASTRO
     3
     4



     100

           A atribuição de dados ao funcionário número 3 seria:

           CADASTRO[3].NOME “Fulano de Tal”;
           CADASTRO[3].SALARIO     12700; {UAH!!}
           CADASTRO[3].IDADE   32;
           CADASTRO[3].CASADO V;
Ou
           CADASTRO[3]        (“Fulano de Tal”,
                                12700,
                                32,
                                V);


                                               lógica aplicada - Prof. Richard p á g . ( 15/19)
                                               arq.: algoritmos-120823054517-phpapp02.doc
3. Modularização
       A forma natural de solucionarmos problemas complexos é dividi-los em problemas mais
simples, aos quais chamamos de módulos.
       A modularização é uma ferramenta da programação estruturada, que tem como objetivo
aumentar a confiabilidade, legibilidade, manutenibilidade e flexibilidade. Um módulo é, então, um
grupo de comandos, constituindo um trecho de algoritmo, com uma função bem definida e o mais
independente possível em relação ao resto do algoritmo.

Ex.:
        “Ler o valor unitário de um quilo de feijão e a quantidade de quilos vendida para um
    determinado freguês. Calcular o valor total a ser cobrado, sabendo que sobre o valor total
    vendido temos que aplicar 45% de impostos, mais 10% de lucro. Depois de ter calculado o valor
    total, exibir o código do produto vendido, o valor unitário do produto, a quantidade vendida e o
    total que o freguês terá que pagar.”
        Apesar deste problema não ser muito complexo, podemos dividi-lo em 3 partes distintas, ou
    seja, 3 módulos:
        1. leitura dos dados (vlr_unitário, qtde_vendida);
        2. cálculo do valor total a pagar;
        3. exibição dos dados.
        Devemos utilizar módulos de tamanho limitado, isso não quer dizer que um módulo deva ter
no máximo 100 linhas, mas que, módulos muito extensos acabam perdendo sua funcionalidade.
Cada módulo pode definir as próprias estruturas de dados necessárias para sua execução. Todo
módulo é constituído por uma seqüência de comandos que operam sobre um conjunto de variáveis
que podem ser globais ou locais.
        A comunicação entre módulos deverá ser feita através de variáveis globais ou por
transferência de parâmetros.

Vantagens da modularização:

   a independência do módulo permite uma manutenção mais simples e evita efeitos colaterais em
    outros pontos do algoritmo;
   pode-se elaborar um módulo independente do restante do algoritmo;
   testes e correções dos módulos podem ser feitos em separado;
   reutilização dos módulos por outros algoritmos.

       Podemos utilizar dois tipos de ferramentas para fazer a modularização: procedimentos e
funções. Ambos são módulos hierarquicamente subordinados a um algoritmo chamado de módulo
principal, da mesma forma um procedimento ou função pode conter procedimentos e funções
aninhadas, como mostra a figura abaixo:
                                                MP

                         P1             P2             F1             F2


                  P3             F3             F4            P4
Onde:
        P – Procedimento F – Função

        A declaração de um procedimento ou função é composta por um cabeçalho e um corpo.
                                             lógica aplicada - Prof. Richard p á g . ( 16/19)
                                             arq.: algoritmos-120823054517-phpapp02.doc
O cabeçalho identifica o procedimento, contém seu nome e a lista de parâmetros formais, o
corpo contém declarações locais e os comandos do procedimento. Para ativarmos um módulo,
fazemos referência a seu nome e a indicação dos parâmetros atuais.


 3.1. Procedimentos

       3.1.1. Sintaxe
       procedimento <nome do procedimento> (<lista-de-parâmetros>)
              <especificação dos parâmetros>
              início
                     <declaração de variáveis locais>
                     Comandos;
              fim. {nome do procedimento}

       Ex.:
       procedimento Leia_dados (Valor, Qtde)
                 real Valor; inteiro Qtde;
              início
                     leia Valor, Qtde;
                     escreva Valor, Qtde;
              fim;

       Para chamar o procedimento no programa principal, basta o nome do procedimento e a lista
de parâmetros:
                Leia_dados (vlr_unitário, qtde_vendida);

       Os parâmetros Valor e Qtde, são chamados de parâmetros formais e serão substituídos
pelos parâmetros efetivos (vlr_unitário, qtde_vendida), no momento da chamada ao procedimento.

       Depois que os comandos de um procedimento são executados, o fluxo de controle retorna
ao comando seguinte àquele que fez a chamada.


  3.2. Função
       Parecida com os procedimentos, têm a característica especial de retornar um valor ao
algoritmo que a chamou.

       3.2.1. Sintaxe
        função <nome da função> (< lista-de-parâmetros>)
              <especificação dos parâmetros>
              início
                     <declaração de variáveis locais>
                     Comandos;
                     <nome da função>  <expressão>; {parâmetro de retorno}
              fim. {nome da função}
Ex.:
        função ABS(x)
                real x;
                início
                   se X >= 0 então ABS  x;
                                         lógica aplicada - Prof. Richard p á g . ( 17/19)
                                         arq.: algoritmos-120823054517-phpapp02.doc
senão ABS  -x;
                    fim se
                 fim {ABS}

        A chamada da função, no programa principal é feita com uma referência a seu nome e a
indicação dos parâmetros efetivos em uma expressão:

                 resultado  ABS(num);

      Neste caso o parâmetro formal é x e num é o parâmetro efetivo. Após esta linha de
comando a variável resultado conterá o valor absoluto de num, calculado pela função ABS.


  3.3. Passagem de parâmetros
       Existem várias formas de passarmos parâmetros entre o programa principal e os módulos, a
escolha de uma delas dependerá do nosso objetivo.

          por valor: as alterações feitas nos parâmetros formais, dentro do módulo, não se
           refletem nos parâmetros efetivos. O valor do parâmetro efetivo é copiado no parâmetro
           formal, no momento da chamada, neste caso ele é chamado de parâmetro de entrada. Ou
           seja, os parâmetros de entrada têm seus valores estabelecidos fora do módulo e não
           podem ser modificados dentro do módulo;

          por resultado: as alterações feitas nos parâmetros formais, dentro do módulo, se
           refletem nos parâmetros efetivos. O valor do parâmetro formal é copiado no parâmetro
           efetivo, ao retornar do módulo, neste caso ele é chamado de parâmetro de saída. Ou seja,
           os parâmetros de saída têm seus valores estabelecidos dentro do módulo;

          por referência: toda alteração feita num parâmetro formal corresponde a mesma
           alteração feita no seu parâmetro efetivo associado. Neste caso ele é chamado de
           parâmetro de entrada e saída. Ou seja, eles têm seus valores estabelecidos fora do
           módulo, mas podem ter seus valores alterados dentro dele.

OBS: Vale lembrar que cada linguagem de programação tem suas regras específicas para realizar a
passagem de parâmetros, sendo as vezes necessário realizar adaptações ao algoritmo.

  3.4. Independência Funcional
        Quando projetamos um algoritmo devemos construir módulos com apenas um propósito
(alta coesão), e diminuir ao máximo a interação entre eles (baixo nível de acoplamento). Ou seja, o
ideal é projetar software de forma que cada módulo encaminhe uma subfunção específica de
requisitos e tenha uma interface simples quando visto de outras partes da estrutura do programa.
        A independência funcional é fundamental para um bom projeto.

       3.4.1. Coesão
       É a medida da força funcional relativa de um módulo. Podemos classificar um software em
relação a coesão, da seguinte maneira:
           coincidental: quando o módulo realiza várias tarefas, que não tem nenhuma relação uma
           com a outra;
           lógica: quando o módulo executa tarefas logicamente relacionadas, p.ex.: um módulo
           que realiza todas as entradas de dados de um software;

                                           lógica aplicada - Prof. Richard p á g . ( 18/19)
                                           arq.: algoritmos-120823054517-phpapp02.doc
temporal: quando o módulo contém tarefas que são relacionadas pelo fato de todas
          terem que ser executadas num mesmo intervalo de tempo.


       3.4.2. Acoplamento
       Depende da complexidade da interface entre os módulos. Podemos classificar um software,
em relação ao acoplamento, da seguinte maneira:
          baixo acoplamento: quando a interface entre módulos se faz através da passagem de
          dados;
          acoplamento moderado: quando a interface entre os módulos é feita por controle, p.ex.,
          quando o módulo1 passa o controle para o módulo 2;
          acoplamento elevado: quando o módulo está ligado a um ambiente externo ao software,
          p.ex., a E/S acopla um módulo a dispositivos, formatos e protocolos de comunicação. Ou
          ainda, módulos que utilizam variáveis globais.

Obs: Qto. maior o nível de coesão e menor o nível de acoplamento, melhor é o software.




                                          lógica aplicada - Prof. Richard p á g . ( 19/19)
                                          arq.: algoritmos-120823054517-phpapp02.doc

Mais conteúdo relacionado

Mais procurados (20)

Mat logaritmos
Mat logaritmosMat logaritmos
Mat logaritmos
 
000 sintese funcoes
000 sintese funcoes000 sintese funcoes
000 sintese funcoes
 
Aula01
Aula01Aula01
Aula01
 
Introdução à Linguagem C
Introdução à Linguagem CIntrodução à Linguagem C
Introdução à Linguagem C
 
Apresentação Linguagem C
Apresentação Linguagem CApresentação Linguagem C
Apresentação Linguagem C
 
Curso de Linguagem C
Curso de Linguagem CCurso de Linguagem C
Curso de Linguagem C
 
Compressão Huffman
Compressão HuffmanCompressão Huffman
Compressão Huffman
 
Compiladores 1
Compiladores 1Compiladores 1
Compiladores 1
 
Paradigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
Paradigmas de Linguagens de Programação - Expressões e Instruções de AtribuiçãoParadigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
Paradigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
 
A3 se
A3 seA3 se
A3 se
 
Comandos e expressões
Comandos e expressõesComandos e expressões
Comandos e expressões
 
Introduçãso a linguagem c
Introduçãso a linguagem cIntroduçãso a linguagem c
Introduçãso a linguagem c
 
Aula calculo relacional
Aula calculo relacionalAula calculo relacional
Aula calculo relacional
 
Compiladores 2
Compiladores 2Compiladores 2
Compiladores 2
 
Linguagem c
Linguagem cLinguagem c
Linguagem c
 
Questesdetecnologia ano2003
Questesdetecnologia ano2003Questesdetecnologia ano2003
Questesdetecnologia ano2003
 
M4 46 vb
M4 46 vbM4 46 vb
M4 46 vb
 
Algoritmos - capítulo 2
Algoritmos - capítulo 2Algoritmos - capítulo 2
Algoritmos - capítulo 2
 
Canais Síncronos
Canais SíncronosCanais Síncronos
Canais Síncronos
 
Apostilam01 tabela verdade
Apostilam01 tabela verdadeApostilam01 tabela verdade
Apostilam01 tabela verdade
 

Semelhante a Algoritmos básicos em pseudocódigo

Semelhante a Algoritmos básicos em pseudocódigo (20)

Henriquecristovao manual c-cpp
Henriquecristovao manual c-cppHenriquecristovao manual c-cpp
Henriquecristovao manual c-cpp
 
Conhecendo ou relembrando C
Conhecendo ou relembrando CConhecendo ou relembrando C
Conhecendo ou relembrando C
 
Apostila da linguagem c
Apostila da linguagem cApostila da linguagem c
Apostila da linguagem c
 
Apostila da linguagem c
Apostila da linguagem cApostila da linguagem c
Apostila da linguagem c
 
Apostila da linguagem c
Apostila da linguagem cApostila da linguagem c
Apostila da linguagem c
 
Alg aula 02 - algoritmos 1 tp1
Alg   aula 02 - algoritmos 1 tp1Alg   aula 02 - algoritmos 1 tp1
Alg aula 02 - algoritmos 1 tp1
 
Apostila c++
Apostila c++Apostila c++
Apostila c++
 
Algoritmo e lógica de programação - aula 2
Algoritmo e lógica de programação - aula 2Algoritmo e lógica de programação - aula 2
Algoritmo e lógica de programação - aula 2
 
Material de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de ProgramaçãoMaterial de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de Programação
 
Algoritmo - tipos de dados
Algoritmo - tipos de dadosAlgoritmo - tipos de dados
Algoritmo - tipos de dados
 
Apostila da linguagem c
Apostila da linguagem cApostila da linguagem c
Apostila da linguagem c
 
Ling c
Ling cLing c
Ling c
 
Python introdução a linguagem de programação
Python introdução a linguagem de programaçãoPython introdução a linguagem de programação
Python introdução a linguagem de programação
 
Aula de C e C++
Aula de C e C++Aula de C e C++
Aula de C e C++
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
 
Aula 2 aed - pseudocódigo
Aula 2   aed - pseudocódigoAula 2   aed - pseudocódigo
Aula 2 aed - pseudocódigo
 
Cap 2
Cap 2Cap 2
Cap 2
 
Cap 2
Cap 2Cap 2
Cap 2
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 

Algoritmos básicos em pseudocódigo

  • 1. algoritmos Profª. Mariangela Gomes Setti Prof. Richard Duarte Ribeiro CEFET-PR DAINF Curitiba-2002 Revisado pelo prof. Robson Ribeiro Linhares
  • 2. 1. Tipos Básicos e Comandos Básicos em Pseudocódigo 1.1. Constantes Uma constante é um determinado valor fixo que não se modifica ao longo do tempo, durante a execução de um programa. Constantes podem ser do tipo numérica, lógica ou literal. 1.1.1. Constantes Numéricas Exemplos: a) 25; b) 3,14; c) 7,8 x 103; d) -15; e) 0,342; f) –10-9. 1.1.2. Constantes Lógicas É um valor lógico, isto é, que só pode ser falso ou verdadeiro. 1.1.3. Constante Literal Exemplos: a) “José da Silva”; b) “1234”; (note que isto não é uma constante numérica) c) “X1Y2W3”; d) “*A!B?-/”. 1.2. Variáveis No Pseudocódigo, temos quatro tipos básicos de dados que podem ser utilizados: Inteiro: qualquer número inteiro, negativo, nulo ou positivo. Ex.: -5; 0; 235 Real: qualquer número real, negativo, nulo ou positivo. Ex.: -5; 30,5; 0; 40 Caractere: qualquer conjunto de caracteres alfanuméricos. Ex.: “AB”; “xyz” Lógico: conjunto de valores falso ou verdadeiro em proposições lógicas. 1.2.1. Declaração de variáveis Toda variável deve ser declarada conforme a sintaxe abaixo: , inteiro identificador ; real Identificador é o nome da variável que está sendo declarada. caractere lógico lógica aplicada - Prof. Richard p á g . ( 2/19) arq.: algoritmos-120823054517-phpapp02.doc
  • 3. OBS.: Os nomes de variáveis devem começar com letra (maiúscula ou minúscula e podem ser seguidos por números, letras , “-“ ou “_”. Exemplos de declaração de variáveis: inteiro x1; real A, B; caractere frase, NOME; lógico TEM; Exemplos de nomes de variáveis inválidos: Variável 1; 3x; x + y. REGRA: Dê nomes significativos para variáveis. Para identificar, por exemplo, uma variável que receberá a média aritmética de notas de provas utilize o nome media (sem acento) ao invés de z, x ou k. 1.3. Comentários Para melhorar a clareza do algoritmo deve-se fazer uso dos comentários . Eles podem ser inseridos dentro de chaves. Ex.: {Isto é um comentário em pseudocódigo} Os mesmos podem ser colocados em qualquer ponto do algoritmo. 1.4. Comando de Atribuição Para a atribuição de um valor a uma variável, usaremos o símbolo de atribuição “ “. Sintaxe : identificador expressão ; c Exemplos: a k 1; (a variável k recebe o inteiro 1) r COR “verde”; a TESTE falso; c t A B; e MÉDIA SOMA/N; r e 1.5. Operadores Aritméticos Além os símbolos das quatro operações básicas (+, – (unário ou binário), *, /) usaremos símbolos para raiz quadrada e exponenciação, por exemplo: a ou raiz(a) (a + b)n ou (a + b) ** n b2 4ac lógica aplicada - Prof. Richard p á g . ( 3/19) arq.: algoritmos-120823054517-phpapp02.doc
  • 4. Além disso, usaremos os nomes das funções matemáticas comuns. Por exemplo: sen(x); cos(x); tg(x); exp(x)  ex, etc... abs(x) ou |x|; sinal (x)  fornece –1, +1 ou zero conforme x int(x)  inteiro de x Usaremos também como nomes de operadores: mod, por exemplo: m mod i é: resto (módulo) da divisão de m por i resto (m,i): idem div ou “/”, por exemplo, n div m: quociente da divisão inteira de n por m quociente (n,m): idem 1.6. Operadores Lógicos Dentro das relações lógicas, usaremos os conectivos usuais: “e” ou “ ” para a conjunção “ou” ou “ ” para a disjunção (não exclusiva) “não” ou “~” ou “ ” para a negação 1.7. Operadores Relacionais Analogamente, usaremos os conectivos relacionais =, ( ou !=, ou <>), (ou >=), <, (ou <=) de significado óbvio. 1.8. Hierarquia das Operações As prioridades para as operações mistas são dada pela tabela a seguir: 1 Parênteses e funções 2 Expressões aritméticas: 1) +, – (unários) 2) * * 3) *, / 4) +, – (binários) 3 Comparações: <, , =, , >, 4 não (~) 5 e( ) 6 ou ( ) 1.9. Comandos de entrada e saída  Entrada , leia c identificador a ; lógico r c a c a l ó g i c at a p l i c a d a - P r o r . R i c h a r d f p á g . ( 4/19) a r q . : a l g o r i t m o s - 1 2 0 8 2a 0 5 4 5 1 7 - p h p a p p 0 2 . d o c 3 e c r t e e r
  • 5. Ex.: leia NOTA,NUM;  Saída , escreva c identificador i a ; ; d lógico r expressão c e a n c a lógico r t caractere i e ógico ,a lógico f c r i t e Onde: ógico c e Identificador = variável; r r e ógico Expressão = expressão matemática; e a Caractere = conjunto de caracteres. l inteiro Ex.: c escreva “NOME:”, N; i inteiro a n escreva A, X, 35; r t escreva “Valor Lido:”, N, “Resultado =”, N**2+5; e a i c r t e  Fluxograma o r Fundamentalmente é uma ferramenta de codificação. Apresenta de forma gráfica a seqüência na e qual os comandos ou blocos de processo são executados e a lógica de controle de execução. Tradicionalmente têm servido para dois propósitos. Primeiro, têm sido usados como uma ferramenta de projeto de programa para planejar a lógica detalhada e complicada do programa. Segundo, têm sido usados como documentação do programa. Como os fluxogramas fornecem uma representação seqüencial de programa e não uma representação hierárquica, não podem apresentar a estrutura do programa e as inter-relações entre componentes procedurais. Símbolos de Fluxograma Processo Conector Terminação Decisão Entrada/Saída , , , lógic lógic lógic Documento Memória Exibição , de Disco identificló , gico , , inteiro inteiro inteiro caractere lógica aplicada - Prof. Richard p á g . ( 5/19) arq.: algoritmos-120823054517-phpapp02.doc identificló identificló gico gico ; ; caractere real real
  • 6. 1.10. Blocos Podem ser definidos como um conjunto de comandos com uma função bem definida. Eles servem também para definir os limites onde as variáveis declaradas em seu interior são conhecidas. São delimitados pelas palavras início e fim. início <declaração de início variáveis> <inicialização de variáveis> <comandos> fim fim Pseudocódigo Fluxograma 1.11. Estrutura Seqüencial É um conjunto de comandos, separados por ponto e vírgula (;) que serão executados em uma seqüência linear de cima para baixo. C1 ; C2 ; Onde Ci são C1; C3 ; comandos . . . C2; . . . . Cn ; . Cn; Pseudocódigo Fluxograma 1.12. Estrutura Condicional A estrutura condicional permite a escolha do grupo de ações e estruturas a ser executado quando determinadas condições, representadas por expressões lógicas, são ou não satisfeitas. Estas estrutura é delimitada pelo comando se e pela expressão fim se. lógica aplicada - Prof. Richard p á g . ( 6/19) arq.: algoritmos-120823054517-phpapp02.doc
  • 7. 1.12.1. Estrutura Condicional Simples Neste caso, a seqüência só é executada se a condição for verdadeira. se <condição> F então Onde Ci são V C1 ; comandos C2 ; C1; C3 ; . . . C2; Cn ; . . fim se . Cn; Pseudocódigo Fluxograma 1.12.2. Estrutura Condicional Composta Neste caso, a seqüência a ser executada (dentre duas seqüências) dependerá do resultado da condição. se <condição> V F então Onde Ci e Di C1 ; são C2 ; comandos C1; D1; C3 ; . . . C2; D2; Cn ; . . . . . . senão D1; Cn; Dn; D2; D3; . . . Dn; fim se Pseudocódigo Fluxograma lógica aplicada - Prof. Richard p á g . ( 7/19) arq.: algoritmos-120823054517-phpapp02.doc
  • 8. 1.13. Estrutura de Repetição 1.13.1. Enquanto-faça Usado quando um conjunto de ações é executado repetidamente enquanto uma determinada condição permanece válida. (Expressão cujo resultado é o valor lógico verdadeiro) Enquanto o valor da <condição> for verdadeiro, as ações dos comandos são executadas. Quando for falso, o comando é abandonado. Se já da primeira vez o resultado é falso, os comandos não são executados nenhuma vez. enquanto <condição> faça F C1 ; Onde Ci são condição C2 ; comandos V C3 ; . C1; . . Cn ; fim enquanto C2; . . . Cn; Pseudocódigo Fluxograma 1.13.2. Interrupção Caso seja necessária uma interrupção durante a execução da repetição, pode-se fazê-la através do comando interrompa. O mesmo fará a execução da repetição ser interrompida, sendo executada a seqüência de comandos que vier logo após a expressão fim enquanto. Tal caso é mostrado no segmento abaixo: enquanto <condição> faça seqüência A de comandos; se <condição> então interrompa; fim se seqüência B de comandos; fim enquanto seqüência C de comandos; Neste trecho, durante a repetição, as seqüências A, e B de comandos serão executadas até que a condição para interrupção seja alcançada. Quando isso ocorrer (depois da execução da seqüência A), o controle passará para a seqüência C. Note que depois da interrupção a seqüência B de comandos não será executada. lógica aplicada - Prof. Richard p á g . ( 8/19) arq.: algoritmos-120823054517-phpapp02.doc
  • 9. 1.13.3. Repita-enquanto A semântica do comando é a seguinte: os comandos C1, C2, ..., Cn são executados pelo menos uma vez. Quando a condição é encontrada, ela é testada. Se for verdadeira os comandos C1, C2, ..., Cn voltam a ser executados, se for falsa o comando seguinte será executado. Em outras palavras, os comandos C1, C2, ..., Cn são reexecutados enquanto a condição for verdadeira. repita C1 ; Onde Ci são C2 ; comandos C3 ; . C1; . V . Cn ; enquanto <condição> ; C2; . . . OBS: atente para o uso do “;” ao final do Fcondição comando de repetição. V F 1.13.4. Para-faça A semântica do comando é a seguinte: v, i, l e p são variáveis quaisquer e que, de acordo com as regras da programação estruturada, não devem ser modificadas nos comandos C1, C2, ..., Cn. para v de i até  passo p faça v i C1 ; C2 ; F C3 ; condição . . V . Cn ; C1; fim para C2; . v v+p . . Cn; Pseudocódigo Fluxograma lógica aplicada - Prof. Richard p á g . ( 9/19) arq.: algoritmos-120823054517-phpapp02.doc
  • 10. Os dois últimos comandos (repita-enquanto e faça-para) possuem equivalência com o comando enquanto-faça, como pode ser verificado pelos exemplos abaixo: Exs.: a) Comando repita-enquanto: I 1; I 1; Repita enquanto I <= 18 faça A B + C; A B + C; Escreva A; escreva A; I I + 1; I I + 1; enquanto I<=18; fim enquanto b) Comando faça-para: I 1; para I de 1 até 18 passo 2 faça enquanto I <= 18 faça A B + A; A B + A; escreva A; escreva A; fim para I I + 2; fim enquanto 1.14. Alternativa de Múltipla Escolha A sintaxe de comando será: escolha (<expressão>) caso v11: Onde Ci e Di expressão [caso v12:] são ... comandos [caso v1n:] senão C11; ...; C1n; interrompa; C1; C2; Cn; Cm+1 caso v22: ; ... [caso v2n:] C21; ...; C2n; interrompa; ... caso vn1: ... [caso vnn:] C1; ...; Cn; interrompa; senão: C1; ...; Cn; interrompa; fim escolha Fluxograma Pseudocódigo senão D1; lógica aplicada - Prof. Richard p á g . ( 10/19) arq.: algoritmos-120823054517-phpapp02.doc fim se
  • 11. Ex.: leia tipo, peso; escolha (peso*2+3) caso 15: VALOR 15,00; interrompa; caso 17: caso 18: caso 19: VALOR 19,00; interrompa; caso 20: caso 21: se TIPO=5 então VALOR 25,00; senão VALOR 30,00; fim se interrompa; senão: escreva “Peso acima do limite”; VALOR 0; interrompa; fim escolha Obs.: O comando interrompa vale para todos os três tipos de estruturas de repetição, a para a alternativa de múltipla escolha, fazendo com que caso ocorra uma chamada ao interrompa o controle de execução passe para a linha seguinte à estrutura.  Regras para confecção de Algoritmos 1. Em primeiro lugar declare as variáveis; 2. Em seguida essas variáveis devem ser inicializadas; 3. Escolha nomes significativos para as variáveis; 4. Procure alinhar os comandos de acordo com o nível a que pertençam, isto é, destaque a estrutura na qual estão contidos. lógica aplicada - Prof. Richard p á g . ( 11/19) arq.: algoritmos-120823054517-phpapp02.doc
  • 12. 2. Estrutura de Dados 2.1. Variáveis Compostas Homogêneas Variáveis compostas homogêneas correspondem a posições de memória, identificadas por um mesmo nome, individualizadas por índices e cujo conteúdo é de mesmo tipo. O conjunto de 10 notas dos alunos de uma disciplina pode constituir uma variável composta. A este conjunto associa-se o identificador NOTA que passará a identificar não uma única posição de memória, mas 10. A referência ao conteúdo do n-ésimo elemento do conjunto será indicada por NOTA[n], onde n é um número inteiro ou uma variável numérica contendo um valor inteiro. Ex.: NOTA 60 70 54 85 63 76 98 46 67 96 1 2 3 4 5 6 7 8 9 10 NOTA[3] se referencia ao terceiro elemento do conjunto, cujo conteúdo é 54. 2.1.1. Variáveis Compostas Unidimensionais São os conjuntos de dados referenciados por um mesmo nome e que necessitam de somente um índice para que seus elementos sejam endereçados. São conhecidos como vetores. Exs.: NOTA OTA 60 70 54 85 63 76 98 46 67 96 TA 0 0 4 5 3 6 8 6 7 6 A1 2 3 4 5 6 7 8 9 10 0 PESO 78,5 91,1 68,6 71,4 62,7 1 2 3 4 5 Sintaxe: <tipo> <identificador 1> [n 1], <identificador 2> [n 2], ... , <identificador x> [n x]; onde, <tipo> é um dos tipos básicos já definidos (inteiro, real, caractere, lógico); <identificador x> é o nome associado a variável que se deseja declarar; n x é um número inteiro; Exemplos de declarações: inteiro VETOR[20]; {representa um vetor de 20 posições} real NOTAS[30]; lógico TEM[3], NAOTEM[6]; inteiro TESTE[4], FLAG[14], ok[4]; lógica aplicada - Prof. Richard p á g . ( 12/19) arq.: algoritmos-120823054517-phpapp02.doc
  • 13. 2.1.2. Variáveis Compostas Multidimensionais Conjunto de dados referenciados por um mesmo nome e que necessita de mais de um índice para ter seus elementos individualizados. Exs.: ESCANINHO 1 2 3 1 60 65 25 2 56 68 36 3 86 32 34 1 LIVRO 1 2 2 3 98 3 65 31 1 9 75 64 2 87 2 1 60 65 25 2 56 6824 65 36 32 3 6 8 64 3 86 32 34 6 1 1 2 3 Sintaxe: <tipo> <identificador 1> [m 1][n 1]...[z 1], <identificador 2> [m 2][n 2]...[z 2], <identificador x> [m x][n x]...[z x]; onde, <tipo> é um dos tipos básicos já definidos (inteiro, real, caractere, lógico); <identificador x> é o nome associado a variável que se deseja declarar; m x, n x e z x são números inteiros; Exemplos de declarações: inteiro CELULAS[20][30], TIPOS[2][4]; real MATRIX[10][23][5]; lógico RESULTADOS[3][6][23]; inteiro TESTE[6][8][2]; lógica aplicada - Prof. Richard p á g . ( 13/19) arq.: algoritmos-120823054517-phpapp02.doc
  • 14. Inicialização de Variáveis Compostas – Para inicializar um vetor com o mesmo valor Ex.: Em um vetor NOTA[5], NOTA 0 equivale a: NOTA[1] 0; NOTA[2] 0; NOTA[3] 0; NOTA[4] 0; NOTA[5] 0; – Para inicializar um vetor com valores diferentes Ex.: Em um vetor NOTA[5], NOTA (5.7, 9.5, 10.0, 3.7, 9.8) equivale a: NOTA[1] 5.7; NOTA[2] 9.5; NOTA[3] 10.0; NOTA[4] 3.7; NOTA[5] 9.8; 2.2. Variáveis Compostas Heterogêneas 2.2.1. Registros São conjunto de dados logicamente relacionados, mas de tipos diferentes (numérico, literal, lógico) Ex.: FUNC NOME caractere SALARIO real IDADE CASADO inteiro lógico Sintaxe: registro [nome] (<componentes>) <lista-de-identificadores> ; onde, registro é uma palavra chave; [nome] é o nome da estrutura (opcional). <componentes> são declarações e/ou identificadores de variáveis compostas, separados por ponto-e-vírgula; <lista-de-identificadores> são os nomes que estão sendo associados aos registros que se deseja declarar; Exemplo de declarações: registro REGCAD ( caractere NOME; real SALARIO; inteiro IDADE; lógico CASADO; ) FUNC; lógica aplicada - Prof. Richard p á g . ( 14/19) arq.: algoritmos-120823054517-phpapp02.doc
  • 15. Onde REGCAD é o nome da estrutura de registro e FUNC é uma variável da forma REGCAD. registro ( inteiro CPF, IDENTIDADE; lógico FGTS; ) PAG; Acima é declarada uma variável chamada PAG definida pela estrutura que a procede. A atribuição de valores às variáveis que compõem o registro pode ser qualificado da seguinte maneira: FUNC.NOME “Fulano de Tal”; FUNC.SALARIO 3000,00; FUNC.IDADE 32; REGPAG.FGTS V; REGPAG.CPF 123663430; 2.2.2. Conjunto de Registros Podem-se ter conjuntos de registros referenciáveis por um mesmo nome e individualizáveis por índices. Ex.: Usando o registro REGCAD definido anteriormente, podemos definir um conjunto de registros da forma: registro REGCAD CADASTRO [100]; REGCAD NOME SALARIO IDADE CASADO 1 2 CADASTRO 3 4 100 A atribuição de dados ao funcionário número 3 seria: CADASTRO[3].NOME “Fulano de Tal”; CADASTRO[3].SALARIO 12700; {UAH!!} CADASTRO[3].IDADE 32; CADASTRO[3].CASADO V; Ou CADASTRO[3] (“Fulano de Tal”, 12700, 32, V); lógica aplicada - Prof. Richard p á g . ( 15/19) arq.: algoritmos-120823054517-phpapp02.doc
  • 16. 3. Modularização A forma natural de solucionarmos problemas complexos é dividi-los em problemas mais simples, aos quais chamamos de módulos. A modularização é uma ferramenta da programação estruturada, que tem como objetivo aumentar a confiabilidade, legibilidade, manutenibilidade e flexibilidade. Um módulo é, então, um grupo de comandos, constituindo um trecho de algoritmo, com uma função bem definida e o mais independente possível em relação ao resto do algoritmo. Ex.: “Ler o valor unitário de um quilo de feijão e a quantidade de quilos vendida para um determinado freguês. Calcular o valor total a ser cobrado, sabendo que sobre o valor total vendido temos que aplicar 45% de impostos, mais 10% de lucro. Depois de ter calculado o valor total, exibir o código do produto vendido, o valor unitário do produto, a quantidade vendida e o total que o freguês terá que pagar.” Apesar deste problema não ser muito complexo, podemos dividi-lo em 3 partes distintas, ou seja, 3 módulos: 1. leitura dos dados (vlr_unitário, qtde_vendida); 2. cálculo do valor total a pagar; 3. exibição dos dados. Devemos utilizar módulos de tamanho limitado, isso não quer dizer que um módulo deva ter no máximo 100 linhas, mas que, módulos muito extensos acabam perdendo sua funcionalidade. Cada módulo pode definir as próprias estruturas de dados necessárias para sua execução. Todo módulo é constituído por uma seqüência de comandos que operam sobre um conjunto de variáveis que podem ser globais ou locais. A comunicação entre módulos deverá ser feita através de variáveis globais ou por transferência de parâmetros. Vantagens da modularização:  a independência do módulo permite uma manutenção mais simples e evita efeitos colaterais em outros pontos do algoritmo;  pode-se elaborar um módulo independente do restante do algoritmo;  testes e correções dos módulos podem ser feitos em separado;  reutilização dos módulos por outros algoritmos. Podemos utilizar dois tipos de ferramentas para fazer a modularização: procedimentos e funções. Ambos são módulos hierarquicamente subordinados a um algoritmo chamado de módulo principal, da mesma forma um procedimento ou função pode conter procedimentos e funções aninhadas, como mostra a figura abaixo: MP P1 P2 F1 F2 P3 F3 F4 P4 Onde: P – Procedimento F – Função A declaração de um procedimento ou função é composta por um cabeçalho e um corpo. lógica aplicada - Prof. Richard p á g . ( 16/19) arq.: algoritmos-120823054517-phpapp02.doc
  • 17. O cabeçalho identifica o procedimento, contém seu nome e a lista de parâmetros formais, o corpo contém declarações locais e os comandos do procedimento. Para ativarmos um módulo, fazemos referência a seu nome e a indicação dos parâmetros atuais. 3.1. Procedimentos 3.1.1. Sintaxe procedimento <nome do procedimento> (<lista-de-parâmetros>) <especificação dos parâmetros> início <declaração de variáveis locais> Comandos; fim. {nome do procedimento} Ex.: procedimento Leia_dados (Valor, Qtde) real Valor; inteiro Qtde; início leia Valor, Qtde; escreva Valor, Qtde; fim; Para chamar o procedimento no programa principal, basta o nome do procedimento e a lista de parâmetros: Leia_dados (vlr_unitário, qtde_vendida); Os parâmetros Valor e Qtde, são chamados de parâmetros formais e serão substituídos pelos parâmetros efetivos (vlr_unitário, qtde_vendida), no momento da chamada ao procedimento. Depois que os comandos de um procedimento são executados, o fluxo de controle retorna ao comando seguinte àquele que fez a chamada. 3.2. Função Parecida com os procedimentos, têm a característica especial de retornar um valor ao algoritmo que a chamou. 3.2.1. Sintaxe função <nome da função> (< lista-de-parâmetros>) <especificação dos parâmetros> início <declaração de variáveis locais> Comandos; <nome da função>  <expressão>; {parâmetro de retorno} fim. {nome da função} Ex.: função ABS(x) real x; início se X >= 0 então ABS  x; lógica aplicada - Prof. Richard p á g . ( 17/19) arq.: algoritmos-120823054517-phpapp02.doc
  • 18. senão ABS  -x; fim se fim {ABS} A chamada da função, no programa principal é feita com uma referência a seu nome e a indicação dos parâmetros efetivos em uma expressão: resultado  ABS(num); Neste caso o parâmetro formal é x e num é o parâmetro efetivo. Após esta linha de comando a variável resultado conterá o valor absoluto de num, calculado pela função ABS. 3.3. Passagem de parâmetros Existem várias formas de passarmos parâmetros entre o programa principal e os módulos, a escolha de uma delas dependerá do nosso objetivo.  por valor: as alterações feitas nos parâmetros formais, dentro do módulo, não se refletem nos parâmetros efetivos. O valor do parâmetro efetivo é copiado no parâmetro formal, no momento da chamada, neste caso ele é chamado de parâmetro de entrada. Ou seja, os parâmetros de entrada têm seus valores estabelecidos fora do módulo e não podem ser modificados dentro do módulo;  por resultado: as alterações feitas nos parâmetros formais, dentro do módulo, se refletem nos parâmetros efetivos. O valor do parâmetro formal é copiado no parâmetro efetivo, ao retornar do módulo, neste caso ele é chamado de parâmetro de saída. Ou seja, os parâmetros de saída têm seus valores estabelecidos dentro do módulo;  por referência: toda alteração feita num parâmetro formal corresponde a mesma alteração feita no seu parâmetro efetivo associado. Neste caso ele é chamado de parâmetro de entrada e saída. Ou seja, eles têm seus valores estabelecidos fora do módulo, mas podem ter seus valores alterados dentro dele. OBS: Vale lembrar que cada linguagem de programação tem suas regras específicas para realizar a passagem de parâmetros, sendo as vezes necessário realizar adaptações ao algoritmo. 3.4. Independência Funcional Quando projetamos um algoritmo devemos construir módulos com apenas um propósito (alta coesão), e diminuir ao máximo a interação entre eles (baixo nível de acoplamento). Ou seja, o ideal é projetar software de forma que cada módulo encaminhe uma subfunção específica de requisitos e tenha uma interface simples quando visto de outras partes da estrutura do programa. A independência funcional é fundamental para um bom projeto. 3.4.1. Coesão É a medida da força funcional relativa de um módulo. Podemos classificar um software em relação a coesão, da seguinte maneira: coincidental: quando o módulo realiza várias tarefas, que não tem nenhuma relação uma com a outra; lógica: quando o módulo executa tarefas logicamente relacionadas, p.ex.: um módulo que realiza todas as entradas de dados de um software; lógica aplicada - Prof. Richard p á g . ( 18/19) arq.: algoritmos-120823054517-phpapp02.doc
  • 19. temporal: quando o módulo contém tarefas que são relacionadas pelo fato de todas terem que ser executadas num mesmo intervalo de tempo. 3.4.2. Acoplamento Depende da complexidade da interface entre os módulos. Podemos classificar um software, em relação ao acoplamento, da seguinte maneira: baixo acoplamento: quando a interface entre módulos se faz através da passagem de dados; acoplamento moderado: quando a interface entre os módulos é feita por controle, p.ex., quando o módulo1 passa o controle para o módulo 2; acoplamento elevado: quando o módulo está ligado a um ambiente externo ao software, p.ex., a E/S acopla um módulo a dispositivos, formatos e protocolos de comunicação. Ou ainda, módulos que utilizam variáveis globais. Obs: Qto. maior o nível de coesão e menor o nível de acoplamento, melhor é o software. lógica aplicada - Prof. Richard p á g . ( 19/19) arq.: algoritmos-120823054517-phpapp02.doc