+ All Categories
Home > Documents > Algoritmos de Prog Volume II 2010

Algoritmos de Prog Volume II 2010

Date post: 07-Jul-2018
Category:
Upload: geovane-ferreira
View: 217 times
Download: 0 times
Share this document with a friend

of 43

Transcript
  • 8/18/2019 Algoritmos de Prog Volume II 2010

    1/43

    1

    ..

    A , .

    Bibliografia Básica

    MANZANO, José Augusto. Algoritmos - Lógica ara Desenvolvimento de Programação. Rio deJaneiro: Érica, 1996.

    WIRTH, Niklaus. Algoritmos e estruturas de dados. ETH Zurich: LTC Editora, 1999.

    SALVETTI, Dirceu Douglas. Algoritmos. São Paulo: Pearson/Makron Books, 2004.

    KERNIGHAN, Brian W. A linguagem de programação

    . Porto Alegre: Editora Campus Ltda, 1987.

    Bibliografia Complementar

    CELES, Waldemar, . Estruturas de Dados. Rio de Janeiro: PUC-RIO, 2002.

    BROOKSHEAR, J. Glenn. Ciência da Computação ¿ Uma visão abrangente. Porto Alegre: Bookman, 2005.

    PUGA, Sandra. Lógica de programação e Estrutura de Dados. : Pearson - Prentice Hall, .

    SEBESTA, Robert W. Concepts of Programming Languages. : Addison-Wesley, 1996.

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    2/43

    2

    SUMRIO

    TÓPICO CONTEÚDO Página

    Retomada dos conteúdos. 03

    24 Estrutura de seleção encadeada. 0525 Estruturas de repetição com teste de início. 6

    26 Estruturas de repetição com teste de fim. 6

    27 Estruturas de repetição com variáveis de controle. 9

    28 Estruturas indexadas: Vetores. 10

    29 Operações com vetores. 10

    30 Estruturas indexadas: Matrizes. 12

    31 Operações com matrizes. 14

    32 Ordenação 18

    33 Método da Bolha. 2334 Busca 27

    35 Busca linear 28

    36 Busca binária 30

    37 Variáveis compostas heterogêneas 35

    38 Procedimentos 40

    39 Funções: Conceitos sobre parâmetros 40

    40 Parâmetro por valor. 41

    41 Parâmetro por referência. 42

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    3/43

    3

    RETOMADA DOS CONTEDOS

     Estruturas de seleção.

    - Revisão de comandos (instruções) em portugol – (apostila “programação

    estruturada ou programação modular pag. 2”)

    - Revisão de operadores lógicos – (anexo 01 – material do 1° semestre).

    - Precedência de uso dos operadores lógicos.

    Tabela de precedência dos operadores lógicos.Operador Operação Precedência Obs. a precedência pode

    variar conforme a anotaçãoque se utiliza de parênteses demaneira análoga a álgebramatemática.

    .não. Negação 1

    .e. Conjunção 2

    .ou. Disjunção inclusiva 3.xou. Disjunção exclusiva 3

    EXEMPLOS

    01) Dada as expressões:

    a) b)

    (B = 2) .xou. (B > 4) .e. (B < 7) ((B = 2) .xou. (B > 4)) .e. (B < 7)

    02) Efetue a leitura de três valores inteiros desconhecidos representados pelas variáveisA, B e C. Somar os valores fornecidos e apresentar o resultado somente se maior que

    cinco e não for maior ou igual a 100 e maior que cinco.

    Seqüência lógica (entendimento)

    1.  Obter os valores A, B e C. (variáveis A, B, e C)2.  Somar as variáveis A, B e C. (variável D)3.  Verificar se a variável D não é maior ou igual a 100 e se D é maior que 5, se sim

    apresentar o valor, se não encerrar.

    Pela precedência, avalia-se o valor lógico daconjunção .e.

    Avalia-se o valor lógico da disjunçãoexclusiva .xou. 

    Devido a anotação dos parênteses (emdestaque) avalia-se primeiro o valor lógico da

    disjunção exclusiva .xou.

    Avalia-se o valor lógico da conjunção .e. 

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    4/43

    4

    Diagrama de Blocos (fluxograma)

    Codificação

    programa VERIFICAÇÃO_INT_5_100var

    A, B, C, D: real início

    leia A, B, CD ← A + B + Cse .não. (D >= 100) .e. (D > 5) então 

    escreva “D”fim_se 

    fim

    I

    A, B, C

    D ← A + B + C

    F

    .não. D >= 100.e. D > 5

    S N

    “D”

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    5/43

    5

    Tópico 24

     Estrutura de seleção encadeada.

    A tomada de decisão é classificada por encadeada quando uma seleção simplesou compostas ocorre de maneira dependente, ou seja, quando uma decisão depende deoutra para ocorrer.

    Exemplos

    a)  Estrutura de tomada de decisão encadeada com decisão simples.

     b)  Estrutura de tomada de decisão encadeada com decisão composta.

    CODIFICAÇÃO EM LPP

    se () então 

    se () então

    [ação para condição 1 e condição 2 verdadeiras]

    fim_se

    fim_se 

    CODIFICAÇÃO EM LPP

    se () então 

    se () então

    [ação para condição 1 e condição 2 verdadeiras]

    senão

    [ação para condição 1 verdadeira e 2 falsa]

    fim_se

    senão

    [ação para condição 1 falsa]

    fim_se 

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    6/43

    6

     Estrutura de decisão por seleção

    Estrutura utilizada em situações em que há um grande número de verificaçõeslógicas a serem realizadas, tanto em forma seqüencial quanto na forma encadeada.

    Utilizando-se dos comandos (instruções) caso/seja...faça/senão/fim_caso.

    Observando a estrutura sintática a seguir:

    caso seja  faça 

    [ação para condição 1 verdadeira]seja  faça 

    [ação para condição 2 verdadeira]

    seja  faça [ação para condição 3 verdadeira]

    senão[ação para nenhuma condição satisfeita]

    fim_caso

    Obs.: - As instruções caso/seja...faça/senão/fim_caso  são utilizadas na tomada dedecisão seqüenciais ou encadeadas utilizando as ações previstas com o operadorrelacional “igual a”.

    - Na codificação o comando senão pode ser omitido na estrutura de tomada dedecisão por seleção.

    TÓPTICOS 25 E 26

     Estrutura de repetição

    Também conhecida por laço, malha de repetição ou “looping ” a estrutura derepetição que basicamente consiste em repetir um trecho de código, sem que sejanecessário repetir a escrita n vezes.

    As estruturas de repetição podem ser divididas em duas categorias:

    a)  Interativa – Necessita da ação do usuário para repetir o processo. b)  Iterativa – As ações de repetição são automáticas.

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    7/43

    7

     Normalmente as estruturas de repetição exigem uma variável de controle(principalmente os laços iterativos), assim se faz necessário criar uma variável que portradição corresponde a letra I.

     Estrutura de repetição condicional pré-teste;

    Corresponde a estrutura em que o condicional verdadeiro ou condicional falsoocorre antes das instruções de execução do programa.

    Condicional Verdadeiro

    Condicional Falso

     Estrutura de repetição condicional pós-teste.

    Corresponde a estrutura em que o condicional verdadeiro ou condicional falsoocorre após as instruções de execução do programa.

    C

    I (V)

    N

    S

    CODIFICAO

    enquanto () faça 

    [instruções executadas durante condicional (V)]

    fim_enquanto

    Estrutura de repetição com condicional verdadeira

    Estrutura de repetição com condicional falso

    C

    I (F)

    S

    N

    CODIFICAO

    até_seja () efetue 

    [instruções executadas durante condicional (F)]

    fim_até_seja

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    8/43

    8

    Condicional Verdadeiro

    Condicional Falso

     Estrutura de repetição condicional seletivo.

    Estrutura também conhecida como laço de repetição seletivo, laço infinito oulaço localizado, corresponde à estrutura que permite ao programador construiralgoritmos em que se seleciona o local onde a decisão de saída do laço seráincrementada.

    C

    I

    (V)

    N

    S

    CODIFICAO

    continua 

    [instruções executadas no período em que a condição permanecer (V)]

    enquanto_for () 

    C

    I

    (F)

    S

    N

    CODIFICAO

    repita 

    [instruções executadas no período em que a condição permanecer (F)]

    fim_até_seja () 

    Estrutura de repetição com condicional verdadeira

    Estrutura de repetição com condicional falso

    C

    I 1

    S

    N

    I 2

    CODIFICAO

    laço 

    [instruções para ação 1]

    saia_caso ()

    [instruções para ação 2]

    fim_laço () 

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    9/43

    9

    TÓPICO 27

     Estrutura de repetição incondicional (laço incremental)

    Estrutura de repetição utilizada apenas laços interativos, o laço de repetiçãoincondicional utiliza-se no diagrama de blocos o símbolo de preparação “preparation”,com as variáveis de controle, atribuição dos valores de início, fim e incremento,separados por vírgula.

    Obs.: Entende-se por incremento o valor numérico que será acrescido ou acrescentado afunção “contador”.

    I

    .

    ←, fi,

    CODIFICAO

    Para () de () até () passo () faça 

    [instruções executadas no período do ciclo de contagem da variável de controle]

    fim_para 

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    10/43

    10

    TÓPICOS 28 E 29

     Estruturas indexadas: Vetores 

    Tal estrutura corresponde a sua representação matemática de uma matriz linha,exemplo −  , Pode ser representando pela matriz  = −  

    Também referenciado como arrays unidimensionais a estrutura de dados do tipovetor permite o armazenamento do conjunto de elementos de um mesmo tipo, com otratamento de matriz de uma dimensão, ou seja, uma coluna e várias linhas de dados. Odimensionamento do vetor “matriz linha” deve ser formado por constantes inteiras e

     positivas.

    O comando que representa a estrutura de vetor é conjunto seguido do intervalocompreendido entre colchetes.

    VARIÁVEL: conjunto [] de

    Exemplo 1.1

    Pretende-se construir um algoritmo que calcule a média aritmética dosrendimentos de determinado investimento representados na tabela abaixo.

    PERÍODO RENDIMENTO EM R$ PERÍODO RENDIMENTO EM R$1 1250,00 7 1300,002 1475,00 8 1900,003 1350,00 9 1250,004 1250,00 10 1500,005 1400,00 11 1540,006 1375,00 12 1775,00

     No exemplo nota-se que podemos nomear as variáveis de forma indexadadenominando-a simplesmente M contendo o elemento a ele relacionado como segue.

    var

    ( variáveis utilizadas no programa): (tipo da variável)

    PER : conjunto [1..12] de real 

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    11/43

    11

    M[1] ← 1250,00

     Note que o nome da variável indexada M é o mesmo paratodos os valores, o que realmente se altera são os endereços ouíndice da matriz (posição) dos elementos (conteúdo)

    armazenados.

    Exemplo M[1] ←1250,00, 1 corresponde ao índice ouendereço cujo 1250,00 está relacionado.

    M[2] ← 1475,00M[3] ← 1350,00M[4] ← 1250,00M[5] ← 1400,00

    M[6] ← 1375,00M[7] ← 1300,00M[8] ← 1900,00M[9] ← 1250,00M[10]← 1500,00M[11]← 1540,00M[12]← 1775,00

    Obs.: a representação de um vetor também pode estar associado a um determinadoconjunto de elementos tal como o conjunto A = { 0, 2, 4, 6, 8, 10, 12, 14}, cujo suarepresentação vetorial (matriz linha) pode ser:

    Variável indexada [endereço] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8]Elemento 0 2 4 6 8 10 12 14

     Leitura e escrita de dados de um vetor

    Tanto a leitura quanto a escrita de dados de um vetor é processada elemento aelemento, utilizando-se de um laço de repetição incremental (estrutura de repetiçãoincondicional).

    Exemplo de diagrama de blocos e codificação.

    PROBLEMA PROPOSTO NO EXEMPLO 1.1

    SOMA← 0

    M[I]

    SOMA← SOMA + M[I]

    MDIA← SOMA/12

    MDIA

    I ← 1, 12, 1

    programa  MEDIA_DE_RENDIMENTOS_INVEST01var

    I : inteiro M : conjunto [1..12] de real SOMA, MÉDIA : real 

    inícioSOMA←0para I de 1 até 8 passo 1 faça 

    leia M[ I ]SOMA←SOMA + M[I]

    fim_paraMÉDIA←SOMA/12escreva “MÉDIA”

    fim

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    12/43

    12

    TÓPICO 30

     Estruturas indexadas: Matrizes 

    Semelhantemente ao estudo de vetores as matrizes facilitam o trabalho comestruturas de dados, entretanto enquanto vetores podem ser descritos como tabelas emlinha (sentido vertical) ou coluna (sentido horizontal), a matriz trabalha duas dimensões(tabela) com várias linhas e colunas. Daí percebe-se que a quantidade de elementos emuma matriz é exponencialmente maior em relação a um vetor, a fim de facilitar o

     processo de solução lógica utilizando-se de variáveis indexadas.

    Em uma matriz os elementos são manipulados de forma individual e direta,assim quando se deseja utilizar um elemento referencia-se por meio dos índices (linha,coluna) como segue:

    TAB[2,5]

    Outro aspecto importante a ser considerado é que as matrizes do tipo vetorutilizam-se de uma única estrutura de repetição (pré-teste verdadeiro “enquanto”, pós-teste falso “repita” ou incondicional “para”), e a matriz com mais de uma dimensãoutiliza-se de um numero de laços relativo ao seu tamanho.

    Os comando utilizando em uma matriz bidimensional são semelhantes ao jáestudados em vetores apenas com o incremento da dimensão, assim TAB[1..12,1..8],corresponde a uma matriz com 12 linhas (de 1 a 12) e 8 colunas (de 1 a 8), podendo serarmazenados 96 elementos na matriz TAB.

    Obedecendo a sintaxe.

    VARIÁVEL : conjunto [ : ] de Onde:VARIÁVEL: corresponde a variável indexada.dimensão1: corresponde ao numero de linhas da matriz.dimensão2: corresponde ao número de colunas da matriz.tipo de dado: tipo de dados armazenados em uma matriz, que pode ser real,

    inteiro, lógico ou caractere.

    N

    E

    2 5

    1 2 3 4 5 6 7 8

    1

    2

    3

    45

    6

    7

    8

    9

    10

    11

    12

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    13/43

    13

     Leitura e escrita de dados de uma matriz

    A leitura de dados de uma matriz bidimensional, assim como na matriz vetor e

    realizada individualmente por meio do comando leia  seguido do nome da variávelindexada e dos seus índices.leia TAB [I, J]

    Portanto analisando os processos de leitura e escrita das variáveis I e J nosdiagramas a seguir, percebe-se que quando o contador de coluna (laço de repetição davariável J) atingir 8 ele é encerrado e ocorre o incremento de mais um no contador delinha (laço de repetição da variável I) reinicializando o contador coluna até que sejautilizado o ultimo elemento matriz.

    TAB[I, J]

    J ← 1, 8, 1

    I ← 1, 12, 1  LEITURAMATRIZ

    TAB : 1..12, 1..8  I, J:  

     I  1  12  1  

     J  1  8  1   TAB[I, J]

     ESCRITAMATRIZ

    TAB : 1..12, 1..8  I, J:  

     I  1  12  1  

     J  1  8  1   TAB[I, J]

    TAB[I, J]

    J ← 1, 8, 1

    I ← 1, 12, 1

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    14/43

    14

    TÓPICO 31

    Operações com matrizes 

    Manipulação dos índices de uma matriz.

    A manipulação dos índices de uma matriz consiste em uma das maneiras devariar uma matriz (seja vetor ou “n” dimensional) utilizando-se como ferramenta a leide formação da matriz.

    Lembrando que na matriz do tipo vetor temos uma dimensão descrita pelavariável I e no caso do exemplo da matriz bidimensional temos endereço indexadoreferenciado por dois índices I e J.

    Exemplos

    a) Matriz do tipo vetor

    Registro RENDIMENTO1° R$ 1560,002° R$ 1480,003° R$ 2300,004° R$ 2450,005° R$ 1700,00

    6° R$ 1340,007° R$ 2300,008° R$ 2450,00

    Representada pela instrução:

    REND[I]

    Onde a variável I  corresponde aoendereço do dado indexado no vetorREND.

     b) Matriz do tipo bidimensional

     Nome Endereço bairro Telefone

       L   i  n   h  a  s   d  e  r  e  g   i  s   t  r  o

    1°2°3°4°5°

    6°7°8°

    Representada pela instrução:

    CAD[I,J]

    Onde as variáveis I  e J  correspondem aoendereço I linha e J coluna do dado indexado namatriz CAD.

    Obs: A matriz do tipo vetor exemplo (a) pode ser descrito em uma tabela do tipo coluna ou linha diferentemente damatriz do tipo bidimensional, exemplo (b), que somente por ser descrita como uma tabela de dupla entrada.

    Exemplo 1

    Dada uma matriz A do tipo vetor com 20 elementos numéricos reais, deseja-se construiruma nova matriz do mesmo tipo, obedecendo-se a seguinte lei de formação; Se o valor

    do índice da matriz for impar deve-se multiplicar o dado armazenado por cinco, se o

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    15/43

    15

    índice da matriz for par deve-se dividir o dado armazenado por 2. Ao final do processodeve-se apresentar o conteúdo da nova matriz.

    Entendimento.

    1.  Iniciar o contador do índice da matriz de origem (matriz A)2.  Ler os valores associados aos índices da matriz A.3.  Iniciar o contador para construção da matriz final (matriz B)4.  Verificar se os índices são pares se sim executar ação 5 se não executar ação 6.5.  Multiplicar o dado armazenado na variável indexada por cinco6.  Dividir o dado armazenado na variável indexada por dois7.  Iniciar o contador para construção da matriz final (matriz B)8.  Escrever a matriz B e finalizar o programa.

    DIAGRAMA DE BLOCOS

       S              

                                            

             

                 

    CODIFICAÇÃO

    programa CONSTRUÇÃO_DE_MATRIZ_B

    var

    I, R : inteiro 

    A,B: conjunto [1..20] de real 

    início

    para I de 1 até 20 passo 1 faça leia A[I]

    fim_para 

    para I de 1 até 20 passo 1 faça 

    R←I – 2*(I div 2)

    se (R 0) então 

    B[I]←A[I]*5

    senão 

    B[I]←A[I]/2

    fim_se 

    fim_para

    para I de 1 até 20 passo 1 faça 

    escreva B[I]

    fim_parafim 

    B[I]

    A[I]

    I ← 1, 20, 1

    I ← 1, 20, 1

    R←I 2 (I 2)

    R0

    B[I]←A[I] 5B[I]←A[I] /2

    SN

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    16/43

    16

    Obs: Os mesmos procedimentos são realizados em uma matriz bidimensional, apenasduplicando os procedimentos de leitura e escrita em virtude da dimensão da matriz.Manipulação de elementos de uma matriz.

    Outra forma de manipular as matrizes e operando os elementos que compõe umamatriz, seja utilizando-se de operações fundamentais como da combinação de elementos

    entre matrizes sejam ora por elementos correspondentes ora por elementos que atendamalgum requisito de sua lei de formação.

    Exemplo 2

    Escrever um programa que leia os elementos de duas matrizes A e B do mesmos tipo edimensões (3 linhas e 24 colunas) e construa uma terceira matriz (C) somando oselementos correspondentes das matrizes A e B.

    Entendimento.

    1.  Iniciar os contadores dos índices I e J da matriz de origem (matriz A)2.  Ler os valores associados aos índices da matriz A.3.  Iniciar os contadores dos índices I e J da matriz de origem (matriz B)4.  Ler os valores associados aos índices da matriz B.5.  Iniciar o contador para construção da matriz final (matriz C)6.  Proceder a adição dos elementos que compõe as matrizes A e B.7.  Proceder com a construção da matriz final (C).8.  Apresentar a matriz final (C).

    DIAGRAMA DE BLOCOS

       S              

                                            

                          

    I ← 1, 3, 1

    J ← 1, 24, 1

    A[I,J]

    I ← 1, 3, 1

    J ← 1, 24, 1

    B[I,J]

    A

    C[I,J]

    I ← 1, 3, 1

    J ← 1, 24, 1

    C[I,J]←A[I,J]+B[I,J]

    A

    I ← 1, 3, 1

    J ← 1, 24, 1

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    17/43

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    18/43

    18

    TÓPICO 32

    Ordenação

    Em geral o processo de ordenação consiste em um rearranjo dos elementos que

    compõe um determinado conjunto de elementos de acordo com critérios estabelecidos pela necessidade de resolver um problema organizacional. Exemplos de casos em queos objetos do problema são ordenados podem ser encontrados em cadastros de clienteslistas de telefone ou mesmo controles financeiros cujo a ordenação facilita a consulta,manipulação e manutenção dos dados armazenados, assim sendo todo conjunto dedados armazenado sujeito a procura e alteração necessita de conceitos de ordenação.

    Ordenar os elementos de uma matriz corresponde à ação de organizá-los demaneira conveniente as necessidades dos problemas computacionais.

    Tal organização podendo ser numérica, alfabética ou alfanumérica respeitando-se a ordem estabelecida na tabela ASCII. Podendo ser crescente ou decrescente(numérica), ascendente ou descente (alfabéticos, alfanuméricos e demais caracteres)

    sendo que os caracteres alfabéticos são classificados primeiramente os maiúsculosdepois os minúsculos como segue a ordem na tabela.

    Imagem fonte: Manzano J.A., 23 edição - pag 22

    Para classificar (ordenar) uma matriz seja unidimensional ou “n” dimensional jáexistem um conjunto de técnicas que facilitam o trabalho do idealizador da soluçãoalgorítmica. Dentre as quais se destacam:

    •  Ordenação por inserção (método da inserção direta, método da inserção diretacom busca binária, método dos incrementos decrescentes – shellsort )Método em que os elementos são conceitualmente divididos em duas seqüências

    uma chamada de destino (a1...ai-1) e outra chamada fonte (ai  ... an). Em cada passo,

    iniciando-se com I = 2 e incrementando-se I de uma em uma unidade, o i-ésino

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    19/43

    19

    elemento da seqüência vai sendo retirado e transferido para a seqüência destino, einserido na posição apropriada.

    Exemplo:Chaves iniciais 44 55 12 42 94 18 06 67

    i = 2 44 55 12 42 94 18 06 67i = 3 12 44 55 42 94 18 06 67i = 4 12 42 44 55 94 18 06 67i = 5 12 42 44 55 94 18 06 67i = 6 12 18 42 44 55 94 06 67i = 7 06 12 18 42 44 55 94 67i = 8 06 12 18 42 44 55 67 94

    O método dos incrementos decrescentes –  shellsort consiste dividir o conjuntoem duas partes ordenando-as separadamente, e repetindo o processo até que a distânciaentre os elementos corresponda a unidade, neste momento é realizada por ordenaçãosimples.

    CONJUNTO NÃO ORDENADO (Chaves iniciais)44 55 12 42 94 18 06 67

    A ordenação de distância 4 produz:44 18 06 42 94 55 12 67

    A ordenação de distância 2 produz:

    06 18 12 42 44 55 94 67

    A ordenação de distância 1 produz:06 12 18 42 44 55 67 94

    •  Ordenação por seleção direta (método de seleção direta, método de seleção emárvore – heapsort , método de seleção em árvore marrada – theadedheapsort ).

    Método oposto a inserção direta que considera em cada passo somente um único

    elemento sucessor da seqüência fonte e todos os elementos do vetor destino paraencontrar o ponto correto de inserção, enquanto a seleção direta considera todos oselementos do vetor fonte para localizar aquele que apresenta a menor chave a serutilizado como sendo o próximo elemento da seqüência destino.

    Tais procedimentos baseados nos seguintes princípios:

    a)  Selecionar o elemento que apresenta a chave de menor valor;

     b)  Trocá-lo com o primeiro elemento da seqüência ai.

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    20/43

    20

    c)  c) Repetir estas operações, envolvendo apenas n-1 elementos restantes, depoisos n-2 elementos e etc., até restar um só elemento, o maior deles.

    Exemplo

    Chaves iniciais 44 55 12 42 94 18 06 6706 55 12 42 94 18 44 6706 12 55 42 94 18 44 6706 12 18 42 94 55 44 6706 12 18 42 94 55 44 6706 12 18 42 44 55 94 6706 12 18 42 44 55 94 6706 12 18 42 44 55 67 94

    •  Ordenação por troca ( método da bolha – bubblesort , método da agitação shakesort , método do pente – combsort , método de partição e troca quicksort ).

    Método em que a permutação direta entre dois elementos (pares de elementosadjacentes) pertencentes a um conjunto, sendo repetido “n” vezes até que todos oselementos pertencentes ao conjunto sejam ordenados. (MÉTODO DESCRITO COMMAIOR PROFUNDIDADE NO TÓPICO SEGUINTE)

    •  Ordenação por intercalação (método de intercalação simples – mergsort , métodode intercalação de seqüências naturais).

    Método mais adequado para a busca em dispositivos periféricos de memóriaseqüencial, tal como uma fita magnética. O processo consiste em combinar duas oumais seqüências de ordenação para formar uma única seqüência ordenada através daaplicação de repetidas seleções entre os componentes acessíveis em cada ocasião. Dadaa característica de acesso vetorial do meio de armazenamento. (merge – fusão).

    Obedecendo os seguintes procedimentos:

    1) Dividir a seqüência a em duas metades, chamadas b e c.

    2) Fundir b  e c por meio da combinação de elementos isolados para formarem paresordenados.

    3) Denominar a a seqüência assim obtida,e repetir os passos 1 e 2, desta vez efetuando afusão de pares ordenados em quádruplas ordenadas.

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    21/43

    21

    4) Iterar os passos anteriores, executando a fusão das quádruplas em óctuplas, e assim prosseguindo duplicando a cada vez o comprimento das subseqüências envolvidas no processo de fusão, até que toda a seqüência esteja ordenada.

    Exemplo

    SEQÜÊNCIA44 55 12 42 94 18 06 67

    Particionando o conjunto temos as seqüências.a 44 55 12 42b 94 18 06 67

    A fusão de componentes isolados (que são seqüências ordenadas de comprimento 1) em

     pares ordenados resulta na seguinte seqüência.

    44 94’ 18 55’ 06 12’ 42 67

    Dividindo-se esta seqüência novamente ao meio e efetuando-se a fusão dos paresordenados resulta.

    06 12 44 94’ 18 42 55 67

    Uma terceira divisão e subseqüente operação de fusão produzem finalmente o resultado

    desejado.

    06 12 18 42 44 55 67 94

    Tais categorias divididas em duas classes “interna” e “externa” distinguindo-se por:

    Interna: as matrizes são armazenadas na memória interna da máquina, que se caracteriza por ter acesso aleatório e rápido, permitindo uma velocidade de acesso e manipulação

    muito alta

    Externa: arquivos armazenados em memórias externas (discos e fitas), de acesso lento ede grande capacidade de armazenamento.

    Exemplo: ordenação de fichas numeradas.

    Estruturar as fichas para formarem um vetor significa colocá-las em frente a um“ordenador”, de tal forma que cada ficha seja visível, permitindo um acesso individualdireto.

    Entretanto, estruturar as fichas na forma de um arquivo implica que somente aficha do topo de cada pilha é visível. Evidentemente, tal restrição ocasiona sérias

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    22/43

    22

    conseqüências no método a ser utilizado na ordenação. Isso, porém, é um fato inevitávelse o número de fichas a serem ordenadas for grande o suficiente par ao ocupar uma áreasuperior à disponível na mesa utilizada.

    A escolha do algoritmo adequado a solução de um problema específico tem

    impacto direto em seu rendimento, ou seja, conhecer diferentes algoritmos e suasaplicações proporciona ao idealizador da solução um produto final mais eficiente emtermos de rendimento quanto ao tempo de processamento dos dados.

    De eficácia incontestável e de entendimento extremamente simples o método da bolha se destaca por sua simplicidade, entretanto sua eficiência de velocidade écontestada, pois é um método de ordenação lento, mostrando-se útil na ordenação de

     pequenos conjuntos de dados.

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    23/43

    23

    TÓPICO 33

     Método da bolha (bubblesort)

    Método em que a permutação direta entre dois elementos (pares de elementosadjacentes) pertencentes a um conjunto, sendo repetido “n” vezes até que todos oselementos pertencentes ao conjunto sejam ordenados. Tal método de fácil entendimentodemonstra-se útil na ordenação de conjuntos pequenos por se tratar de um método lentocomparativamente aos outros métodos existentes.

    Baseado na propriedade distributiva realiza a permutação dos elementos de umamatriz até que sejam todos ordenados conforme sua a seqüência estabelecida pelosendereços de cada uma das variáveis.

    Exemplo:

    Dado um conjunto (tabela)IDADE DOS ELEITORES

    Endereço (I) Idade1 652 503 484 335 18

    Os dados estão armazenados na ordem (65, 50, 48, 38, 18) relacionadosrespectivamente aos índices (1, 2, 3, 4, 5).

    A[1]←65 A[2]←50 A[3]←48 A[4]←33 A[5]←18

    Para o processo de troca aplica-se a propriedade distributiva, que consiste emcomparar o elemento armazenado no endereço A[1] com os elementos armazenados naordem subseqüente até o ultimo elemento, processo que se repetira com o elementoA[2] até A[n], se a na comparação o elemento for maior que o seu subseqüente efetua-se

    a troca dos elementos.

    Exemplo.

    1ª. comparação  A[1]←65 A[2]←50  A[3]←48 A[4]←33 A[5]←18

    Compara-se os elementos A[1]←65 , A[2]←50 como A[2] é menor que A[1]efetua-se a troca dos elementos em relação a sua posição de índice obtendo a novaseqüência.

    A[1]←50 A[2]←65 A[3]←48 A[4]←33 A[5]←18

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    24/43

    24

    Repete-se então o processo agora comparando os elementos [1]←50, A[3]←48.

    2ª. comparação  A[1]←50  A[2]←65 A[3]←48  A[4]←33 A[5]←18

    E assim sucessivamente até que o elementos A[1] tenha sido comparados a todos

    os elementos subseqüentes na seqüência.

    3ª. comparação  A[1]←48  A[2]←65 A[3]←50 A[4]←33  A[5]←184ª. comparação  A[1]←33  A[2]←65 A[3]←50 A[4]←48 A[5]←18 

    A[1]←18 A[2]←65 A[3]←50 A[4]←48 A[5]←33

    Conjunto com o menor elemento ocupando o primeiro endereço (I).

    Assim o elemento 18 armazenado no endereço A[1] não necessita ser comparado

    mais a nenhum elemento, a partir deste momento repete-se todo o processo comparandoo elemento armazenado no endereço A[2] com todos os seus subseqüente até que oconjunto final esteja todo ordenado.

    Conjunto ordenado A[1]←18 A[2]←33 A[3]←48 A[4]←50 A[5]←65

    O mesmo processo ocorre para dados do tipo caractere ou cadeia, visto que elesobedecem a ordem estabelecida na tabela ASCII. Assim quando comprando umconjunto composto por estes tipos sabe-se a dimensão ou valor correspondente a suaordenação.

    Exemplo.

    Dado o conjunto (matriz unidimensional) A = { g, M, f, 21} sua ordenaçãoserá:

    1ª. comparação  A[1]←g A[2]←M  A[3]←f A[4]←21

    Sendo “g” maior que “M” segundo a tabela ASCII, que correspondem a (g=103,M=77), é realizada a troca obtendo a nova seqüência.

    2ª. comparação  A[1]←M  A[2]←g A[3]←f   A[4]←21

    Como “M” é menor que “f” é realizada a comparação mas não se realizada nenhumatroca.

    3ª. comparação  A[1]←M  A[2]←g A[3]←f A[4]←21 

     Note que a matriz utilizada é tipo cadeia, assim o elemento armazenado noendereço A[4] é tratado como um caractere e sua ordem é estabelecida pela tabelaASCII que corresponderá a: (21 = (2 =50, 1 = 49)), daí percebe-se que “M” é maior que“21”, e efetua-se a troca entre eles obtendo o conjunto.

    A[1]←21 A[2]←g A[3]←f A[4]←M

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    25/43

    25

     Neste momento repete-se o procedimento á partir do endereço 2 “A[2],comparando-o com os elementos subseqüentes.

    Exemplo de codificação:

    Elaborar um programa que leia os dados de 40 registros, processando a ordenação demaneiras ascendente e apresentando os ordenados em um relatório.

    DIAGRAMA DE BLOCOS.

    SN

    DADO[I]

    I ← 1, 40, 1

    I ← 1, 39, 1

    DADO[I] > DADO[J]

    X←DADO[I]DADO[I]←DADO[J]

    DADO[J]←X

    I ← 1, 40, 1

    DADO[I]

    J ← I, 40, 1

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    26/43

    26

     Nota: os trecho entre chaves {} corresponde a comentários

    CÓDIGO

    programa DADOS_ORDENADOSvar 

    I, J: inteiro DADO: conjunto [1..40] de cadeia X: cadeia 

    início 

    {trecho de entrada de dados}

    para I de 1 até 40 passo 1 faça leia DADO[I]

    fim _ para 

    {Trecho de processamento de ordenação}

    para I de 1 até 39 passo 1 faça para I de I até 40 passo 1 faça 

    se (DADO[I] > DADO[J]) então X←DADO[I]DADO[I]←DADO[J]DADO[J]←X

    fim _ se fim _ para 

    fim _ para 

    {Trecho de saída com dados ordenados}

    para I de 1 até 40 passo 1 faça escreva DADO[I]

    fim _ para fim 

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    27/43

    27

    TPICO 34

     Pesquisa

    Os processos de busca (pesquisa) correspondem a um dos processos mais

    utilizados nas soluções computacionais, semelhantemente aos processos de ordenaçãoexistem diversos algoritmos já estruturados já planejados, que atendem uma grandediversidade de problemas, proporcionando ao idealizador da solução sua utilização sema necessidade da criação de algum algoritmo em especial.

    A hipótese básica da busca consiste em localizar um determinado dadoarmazenado em um endereço de memória fixo em uma coleção de dados.

     Principais métodos de pesquisa

    •  Busca linear

    Aplica-se principalmente aos casos em que não existem informações sobre osdados armazenados na matriz a ser pesquisada, ou seja, não se sabe se ele está ordenadoou não, exigindo que seja feita uma busca por todo o “vetor” em que o dado pode estararmazenado. Sua eficiência corresponde a expressão N/2 (para N = numero deelementos armazenados no vetor).

    •  Busca binário

    Aplicas aos casos em que estão disponíveis mais informações a cerca do dado aser localizado e que o vetor apresenta-se previamente ordenado. Possibilitando umasignificativa melhorar da eficiência quanto ao método de busca linear, correspondendo alog N (logaritmo de N) arredondado para cima até o número inteiro mais próximo.

    •  Busca em tabelas

    A busca em tabela também denominada busca em vetor, corresponde a buscarealizada à partir de uma chave estruturada, tal como cadeias de caracteres (“ strings”)ou palavras, sua principal condição corresponde a verificação se todos os elementos dacadeia correspondam ao operador estruturado.

    •  Busca direta em cadeias

    A busca direta em cadeia de caracteres caracteriza-se por ser realizada em umavetor s de N elementos e um vetor p de M elementos, onde 0 < M =< N, seu algoritmoconsiste em localizar a primeira ocorrência de p em s. Como, em geral os itens sãocaracteres, s poderá ser visto como um texto, e p como um padrão (de caracteres) ou

     palavra.

    Atualmente os dois métodos mais eficientes de busca em cadeias correspondemaos métodos de Hnuth-Norris-Pratt (KMP), e o método Boyer-Moore.

    Que consistem na comparação de um novo padrão aproveitando informaçõesvaliosas que podem ser descartadas em cada uma das passagens de verificação, assim,

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    28/43

    28

    após a identificação do início (método KMP) ou fim (método BM) do padrão com oscaracteres a próxima comparação terá um número substancialmente menor decomparações a realizar.

    Estudaremos com maior profundidade os algoritmos de Busca Linear (pesquisa

    linear) e o método de busca binária (pesquisa binária).

    TÓPICO 35

     Pesquisa linear

    Consiste em um dos métodos mais simples de busca, tal processo de buscacompara elemento por elemento até que seja encontrada a variável buscada ou até que

    seja extinta a possibilidade do dado buscado pertencer ao vetor pesquisado. (obs.: porconvenção adota-se a variável buscada por PESQ.

    Este método considerado lento, entretanto eficiente quando se tratando deconjuntos desordenados.

    Exemplo 01 - procedimentos

    Dada a matriz bidimensional abaixo, quando pretendido localizar “cos, o processo de busca realizará os seguintes procedimentos.

    32 90° Φ  cos  13/2 Senφ 0 64° senθ

    Tangφ 0 1 senθ 1- 1 Tangθ 0 0 cos  € 1   1 91 Θ   cosφ tang 

    1° - Verifica-se se o elemento armazenado no primeiro endereço A[1,1] (A[1, 1]←32)

    corresponde a variável pesquisada (PESQ), se a variável corresponder ao elementoencerra-se a estrutura de pesquisa, como “32” não corresponde a “cos  o contador éincrementado permitindo que o próximo endereço seja verificado.

    2° - O processo de verificação e incremento é repetido até que seja encontrada avariável pesquisada.(A[4,5]←cos) cos, cos cos, .Exemplo 02 – diagrama de blocos e codificação.

    Elaborar um programa que leia 20 nomes armazenados em uma matriz e que coincidamcom o nome de entrada da pesquisa, apresentado o resultado em vídeo, caso o nome

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    29/43

    29

     pesquisado não seja encontrado, deve-se informar por meio de uma mensagem em vídeoque o nome pesquisa não foi localizado e encerrar o programa.

    DIAGRAMA DE BLOCOS

    NOMES[I]

    I ← 1, 20, 1

    I ← 1F ← .F.

    E

    PESQ

    N

    ACHA = V

    PESQLOCALIZADO

    I

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    30/43

    30

    TÓPICO 36

     Pesquisa binária

    Método mais eficiente que a pesquisa binária que se exige do vetor que esteja previamente ordenado, condição que permitira os seguintes procedimentos:

    1° Verifica-se se o elemento pesquisado (variável PESQ) corresponde ao elementocentral do vetor, se sim são realizadas as instruções condicionadas à localização davariável pesquisada, se não o método divide o vetor em duas partes e verifica a

     possibilidade da variável pesquisada estar posicionada na primeira ou segunda parte do

    vetor.

    CÓDIGO 

    P PESQUISANOME

    I: NOMES: [1..20] ACHA: PESQ:

    I 1 20 1

    NOMES [I] E PESQI ←1F ←.F.

    (I

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    31/43

    31

    2° Neste ponto o algoritmo exclui da pesquisa a parte do vetor que não tem ainformação, repetindo o processo anterior na região do vetor onde há possibilidade queesteja o dado pesquisado. Caso seja a informação seja encontrada o algoritmo seencerra-se caso contrario o procedimento se repetira até que hajam apenas doiselementos a serem comparados com a variável pesquisada.

    Exemplo 01 procedimento

    Seja dado o vetor ao lado, os procedimentos de busca binária para localizar o nome FERNANDO “variável pesquisadaPESQ”. Correspondem a:

     NOTA: É fundamental lembrar que a pesquisa binária somente

     pode ser realizada quando o vetor já está ordenado, e que suaordenação obedece ao padrão estabelecido na tabela ASCII, ouseja, no exemplo em questão se verifica que corresponde a umvetor do tipo cadeia e obedece a ordem alfabética.

    1° Verifica-se qual é o elemento central do vetor, usando o seguinte procedimento.

    (MEIO←( COMEÇO + FIM ) div 2) ).

    À partir daí temos que o elemento central corresponderá ao elementoV[5]←MARCOS.

    Se o elemento pesquisa corresponde a BERNARDO “B” na tabela ASCIIcorresponde a posição 66 enquanto “M” corresponde a 77, assim a segunda parte dovetor pesquisado será descartada e o procedimento se repetirá.

    2° Repete-se o processo descartando a segunda parte.

    INDICE NOMES

    1 ALICE

    2 BERNARDO

    3 FERDINANDO

    4 LUIZ

    5 MARCOS6 PEDRO

    7 RENATO

    8 TADEU

    9 WILSON

    1. PARTE ELEMENTO CENTRAL 2. PARTEINDICE NOME INDICE NOME INDICE NOME

    1 ALICE 5 MARCOS 6 PEDRO

    2 BERNARDO 7 RENATO

    3 FERDINANDO 8 TADEU

    4 LUIZ 9 WILSON

    1. PARTE ELEMENTO CENTRAL 2. PARTE

    INDICE NOME INDICE NOME INDICE NOME1 ALICE 3 FERDINANDO 4 LUIZ

    2 BERNARDO 5 MARCOS

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    32/43

    32

    “B” corresponde a 66 e “F” 70, descartando a 2ª. parte e repetindo o processo. temos

    3° Repete-se o processo descartando a segunda parte.

    Momento em que o dado pesquisado é localizado e ocorrem as instruçõescondicionadas ao valor verdade verdadeiro.

    Exemplo 02 – digrama de blocos e codificação

    Elaborar um programa que leia 20 nomes armazenados em uma matrizverificando pelo processo de busca binário (entende-se que a matriz está previamenteordenada) e que coincidam com o nome de entrada da pesquisa, apresentando em vídeoo resultado, caso o nome pesquisado não seja encontrado, deve-se informar por meio deuma mensagem em vídeo que o nome pesquisa não foi localizado e encerrar o

     programa.

    1. PARTE ELEMENTO CENTRAL 2. PARTE

    INDICE NOME INDICE NOME INDICE NOME

    1 ALICE 2 BERNARDO 3 FERDINANDO

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    33/43

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    34/43

    34

    CÓDIGO

    Programa PESQUISA_BINÁRIAvar

     NOME: conjunto [1..20] de cadeia

    I, COMEÇO, FINAL, MEIO: inteiroPESQ: cadeiaACHA: lógico

    Início para I de 1 até 20 passo 1 faça

    leia NOME[I]fim_paraescreva “Entre com nome a ser pesquisado”

    leia PESQCOMEO←1FIM←20

    ACHA←.F.enquanto (COMEÇO =< FINAL) .e. (ACHA = .Falso.) faça

    MEIO ← ( COMEÇO + FINAL ) div 2se (PESQ = NOME [MEIO] ) então

    ACHA ← . Verdadeiro.senão

    se ( PESQ < NOME [MEIO] ) entãoFINAL ← MEIO – 1senãoCOMEÇO ← MEIO + 1

    fim_se

    fim_sefim_enquanto

    se (ACHA = .Verdadeiro.) entãoescreva PESQ, “LOCALIZADO”senão

    escreva PESQ, “NÃO LOCALIZADO”fim_se

    fim

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    35/43

    35

    TÓPICO 37

    Variáveis compostas heterogêneas

    Os dados combinados em um determinado registro levam o nome de variáveis

    heterogêneas (dados derivados) por se tratar de uma coleção de dados de diferentes tipos primitivos (real, inteiro, caractere, cadeia e lógico), reunidos em uma mesma estrutura.

    Exemplo 01:

    Pretende-se combinar os elementos (dados) encontrados em um cadastro de clientes,que correspondem a:

     NOME: deve conter dados do tipo cadeiaENDEREÇO: deve conter dados do tipo cadeiaCÓDIGO POSTAL: deve conter dados do tipo cadeiaCLIENTE PESSOA FISICA OU JURÍDICA: deve conter dados do tipo caractere

    COMPRAS DO 1° MÊS: deve conter dados do tipo realCOMPRAS DO 2° MÊS: deve conter dados do tipo realCOMPRAS DO 3° MÊS: deve conter dados do tipo real

     Note que existem três grandes tipos de dados relacionados a um mesmo cliente: (cadeia,caractere, e real), a combinação dos diferentes tipos de dados em um único registro correspondea um conjunto de dados heterogêneo.

     Atribuição de registro (variável heterogênea)

    Sua atribuição deve ser feita antes da atribuição das variáveis a serem manipuladas pelosistema, usando a sintaxe:

    Exemplo 02:tipo = registro 

     NOME: cadeiaENDEREÇO: cadeia CÓDIGO POSTAL: cadeia FISICO/JURÍCIO: caractere COMP01: real COMP02: real COMP03: real fim _ regitro 

    var  CREDITO: cad_clientes

    tipo

    = registro 

    fim_registro

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    36/43

    36

     Leitura e escrita de um registro

    Tanto a leitura quanto a escrita de um registro podem ser realizadas de duas maneiras a1ª. campo a campo, sendo indicado o nome da variável do tipo de registro e seu camposeparados por um caractere “.” ponto. A 2ª indicando apenas o nome do registro antecedido

     pelos comandos “leia”  ou “escreva”, neste caso todos os campos serão manipulados pelocomando.

    Exemplo 03

    programa CREDITO_DE_ CLIENTEStipo = registro 

     NOME: cadeia

    ENDEREÇO: cadeia CÓDIGO POSTAL: cadeia FISICO/JURÍCIO: caractere COMP01: real COMP02: real COMP03: real fim _ registro 

    var CREDITO: cad_clientes

    início leia CREDITO. NOMEleia CREDITO.ENDEREÇO

    leia CREDITO.CÓDIGO_POSTALleia CREDITO.FISICO/JURÍCIOleia CREDITO.COMP01leia CREDITO. COMP02 leia CREDITO. COMP03escreva CREDITO. NOMEescreva CREDITO.ENDEREÇOescreva CREDITO.CÓDIGO_POSTALescreva CREDITO.FISICO/JURÍCIOescreva CREDITO.COMP01escreva CREDITO.COMP02 escreva CREDITO.COMP03

    fim 

    Exemplo 04

    início leia CREDITO

    escreva CREDITOfim 

    O

    ,

    .

    T .

    A .

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    37/43

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    38/43

    38

    fim

    Exemplo:

    Desenvolver um programa que leia uma tabela de cargos e salários. Em seguida, o programadeve solicitar que seja fornecido o código de um determinado cargo. Esse código deve estarentre 1 e 17. O operador do programa pode fazer quantas consultas desejar. Sendo o códigoválido, o programa deve apresentar o cargo e o salário associado ao cargo selecionado. Casoseja inválido, deve avisar o operador dessa ocorrência. Para inserir dados no sistema doscódigos de cargo/salários, observe a tabela seguinte:

    TABELA DE CARGOS E SALÁRIOSCód. Cargo Salário h.01 Anal. de cargos e salários 9,0002 Auxiliar contábil 6,2503 Chefe de cobrança 8,0404 Chefe de expedição 8,58

    05 Contador 15,6006 Gerente regional 22,9007 Escriturário 5,0008 Faxineiro 3,2009 Gerente administrativo 10,3010 Gerente comercial 10,4011 Gerente de pessoal 10,2912 Gerente de treinamento 10,6813 Gerente financeiro 10,5414 Contínuo 2,4615 Operador de computador 6,05

    16 Programador 9,1017 Secretária 7,31

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    39/43

    39

    (fonte: Manzano, Algoritmos, pag 205 – 23 ed.) 

     programa TABELA_DE_SALÁRIOStipoREG_DADOS = registro

    CÓDIGO : inteiroCARGO : cadeiaSALÁRIO : real

    fim_registrovar

    TABELA: conjunto [1..17] de reg_dadosI, CODPESQ : inteiroRESP: caractereACHA: lógico

    início para I de 1 até 17 passo 1 faça

    TABELA [I].CÓDIGO ← Iescreva “Código .....:”, TABELA[I].CÓDIGOescreva “Cargo .......:”, leia TABELA[I].CARGOescreva “Salário......:”, leia TABELA[I].SALÁRIO

    fim_paraRESP← “SIM”enquanto (RESP = “SIM”) faça

    escreva “Qual código – 1 a 17”leia CODPESQI ← 1ACHA ←.Falso.

    enquanto (I =< 17) .e. (ACHA = .Falso.) façase (CODPESQ = TABELA[I].CÓDIGO) então

    ACHA ← .Verdadeiro.senão

    I ← I + 1fim_se

    fim_enquantose (ACHA = .Verdadeiro.) então

    escreva “Código:........”, TABELA[I].CÓDIGOescreva “Cargo: .........”, TABELA[I].CARGOescreva “Salário: .......”, TABELA[I].SALÁRIO

    senãoescreva “Cargo Inexistente”

    fim_seescreva “Deseja continuar pesquisa? – Responda [S]im ou [N]ão:”leia RESP

    fim_enquantofim

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    40/43

    40

    TÓPICO 38

     Procedimentos

    Um módulo de procedimentos ou sub-rotina corresponde a um bloco de programa que sereferencia por um rótulo permitindo que um programa principal chame suas funções nos

     processos a serem realizados, permitindo ao idealizador de solução tecnológica modulada emrotinas e sub-rotinas. Sua diagramação em português estruturado e seu diagrama de blocosobedecem às seguintes sintaxes.

    Obs: O código da sub-rotina deve ser escrito antes de sua chamada no trecho de chamada dasub-rotina, assim, a chamada da sub-rotina deve ser representada em português estruturado deforma sublinhada, estando esta forma associado à ação indicada do símbolo processo

     predefinido.

    TÓPICO 39

    Funções

    Uma função corresponde a um bloco de programa semelhante o procedimento (sub-rotina), contendo inicio, fim e identificada por um rótulo que permite o programa principalchamar suas execuções. A diferença entre procedimento e função é que a função corresponde auma estrutura de abstração que sua principal característica operacional na capacidade de sempreretornar um conteúdo de resposta, ou seja, a função retorna um “valor” que retorna no própriorótulo da função podendo ocorrer em operações de processamento (lógico ou matemático) e desaída, enquanto os procedimentos não retornam conteúdos, a não ser com o uso de

     procedimentos de passagem de parâmetro por valor ou por referência.

    CODIFICAÇÃO

    programa procedimento var 

    início 

    fim início 

    fim 

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    41/43

    41

    CÓDIGO programa CALC_FAT_V3

    função FATORIAL (N : inteiro) : inteirovar

    I, FAT : inteiroinício

    FAT ← 1 para I de 1 até N passo 1 faça

    FAT ← FAT * Ifim_paraFATORIAL ← FAT

    fimvar

    LIMITE : inteiroinícioescreva “Qual fatorial:”leia LIMITEescreva FATORIAL(LIMITE)

    fim

    Obs.: Por se tratar de uma estrutura que retorna um valor é fundamental que seja indicado o tipode dado da função.

    TÓPICO 40

     Passagens de parâmetros

    O processo de passagem de parâmetros permite estabelecer uma linha de comunicaçãoentre os conteúdos dos trechos de sub-rotinas (parâmetros/funções), e dos trechos de programaque chamam essas sub-rotinas. Tal comunicação que ocorre entre o trecho de programachamador e o trecho de programa chamado, podendo o parâmetro ser considerado real (quandodeclarado no trecho do programa que chama a sub-rotina) ou formal (quando é declarado notrecho da sub-rotina). Tais processos de passagem de parâmetros chamam-se:

    •  Passagem de parâmetro real ← quando o trecho de programa chama uma sub-rotina, ao

    fazer a operação de passagem, realiza uma abstração.

    •  Passagem de parâmetro formal ← quando a sub-rotina chamada recebe a passagem de parâmetro, este formaliza a operação de abstração a ela transferida.

     Passagem de parâmetro por valor

    Dizemos que ocorreu uma passagem de parâmetro por valor quando o parâmetro formalda sub-rotina recebe o parâmetro real do trecho de programa chamador um determinadoconteúdo, assumindo o papel de variável local da sub-rotina. Assim qualquer modificação no

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    42/43

    42

    conteúdo do parâmetro formal não altera o valor do conteúdo do parâmetro real, ou seja, o processamento é realizado e armazenado na própria sub-rotina.

    TÓPICO 41

     Passagem de parâmetro por referência

    Dizemos que ocorreu uma passagem de parâmetro por referência quando o parâmetroreal do programa chamador recebe o conteúdo do parâmetro formal da sub-rotina, portanto dadocerto processamento dentro da sub-rotina, o parâmetro formal reflete a alteração de seuconteúdo no parâmetro real. Assim qualquer modificação no conteúdo do parâmetro formalimplicará em alteração imediata do conteúdo do parâmetro real correspondente.

    CODIFICAÇÃO

     programa CALC_FAT_V1 procedimento FATORIAL (N : inteiro)var

    I, FAT: inteiroinício

    FAT ← 1 para I de 1 até N passo 1 faça

    FAT ← FAT * Ifim_para

    escreva FATfim

    varLIMITE : inteiro

    inícioescreva “Qual fatorial:” leia LIMITEFATORIAL (LIMITE)

    fim

  • 8/18/2019 Algoritmos de Prog Volume II 2010

    43/43


Recommended