livro logica e linguagem de programacao pdf

Upload: rimla-oten

Post on 13-Apr-2018

239 views

Category:

Documents


1 download

TRANSCRIPT

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    1/144

    Lgica e Linguagem de ProgramaoIntroduo ao Desenvolvimento de Software

    Humberto Martins Beneduzzi

    professor do Instituto Federal do Paran IFPR. Graduadoem Sistemas de Informao pelo CEFET-PR e especialista emMetodologia do Ensino Superior pelo IBPEX. desenvolvedor desoftwaredesde 1995. J participou de projetos de desenvolvimento

    de softwareem empresas de pequeno, mdio e grande portes,utilizando diversas tecnologias e linguagens de programao.

    Joo Ariberto Metz

    Tcnico em Programao de Computadores pela SPEI egraduado em Anlise de Sistemas, pela ESEEI. Trabalhou pormais de 20 anos na funo de Programador de Computadorno antigo CEFET-PR, hoje Universidade Tecnolgica Federal doParan.

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    2/144

    2010

    Todos os direitos reservados pela Editora do Livro TcnicoEdifcio Comercial Sobral Pinto

    Avenida Cndido de Abreu 469, 2 andar, conjs. ns 203-205Centro Cvico CEP: 80530-000

    Tel.: 41 3027-5952 / Fax: 41 3076-8783

    www.editoralt.com.brCuritiba PR

    Direo Geral

    Direo Editorial

    Edio

    Gerncia de Produo e Arte

    Reviso

    Reviso Comparativa

    Projeto Grfco

    Editorao eletrnica

    Jean Franco Sagrillo

    Jeanine Grivot

    Leonel Francisco Martins Filho

    Marcia Tomeleri

    Jeferson Turbay BragaSimone Venske

    Renee Cleyton Faletti

    Adriana de Oliveira

    Fbio Roberto Hancke

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    3/144

    Em conformidade com o Catlogo Nacional de CursosTcnicos, este livro indicado, entre outros, para os seguintescursos:

    Eixo Tecnolgico: Informao e Comunicao

    Tcnico em Informtica

    Tcnico em Informtica para a Internet

    Tcnico em Manuteno e Suporte em Informtica

    Tcnico em Programao de Jogos DigitaisTcnico em Redes de Computadores

    Eixo Tecnolgico: Ambiente, Sade e Segurana

    Tcnico em Meteorologia

    Eixo Tecnolgico: Infraestrutura

    Tcnico em Geoprocessamento

    Eixo Tecnolgico: Controle e Processos Industriais

    Tcnico em Automao Industrial

    Tcnico em Mecatrnica

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    4/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    5/144

    Apresentao

    Este livro foi didaticamente pensado para o aluno de nvel tcnico.Nele, foram privilegiadas as abordagens mais prticas, baseadas emsituaes do dia a dia, em detrimento das abordagens excessivamentetericas e distantes da realidade dos alunos. Entendemos que aabordagem to importante para o aprendizado quanto a denioapropriada do contedo a ser ensinado.

    A tentativa de realizar uma abordagem mais leve do assunto, nonos fez esquecer do nvel de profundidade com que os contedos

    devem ser abordados. O objetivo fornecer uma obra didtica, de fcilacesso, mas, ao mesmo tempo, completa em termos de diversidade eprofundidade do contedo.

    Por meio deste livro, procuramos contribuir para a formao dosfuturos prossionais da rea de desenvolvimento de software.

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    6/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    7/144

    Sumrio

    Introduo Lgica de ProgramaoCAPTULO 1 9Algoritmos .............................................................................................................. 10

    Representao de Algoritmos ............................................................................... 11

    Atividades .............................................................................................................. 15

    Variveis, Tipos de Dados e ConstantesCAPTULO 2 16Variveis ................................................................................................................. 16

    Tipos de Dados ...................................................................................................... 18

    Declarao de Variveis ........................................................................................ 19

    Atribuio e Inicializao de Variveis ................................................................. 20

    Constantes ............................................................................................................. 22

    Atividades ............................................................................................................... 23

    Operadores e ExpressesCAPTULO 3 24Operadores Aritmticos......................................................................................... 24

    Operadores Relacionais ........................................................................................ 27

    Operadores Lgicos ............................................................................................... 28

    Operador Literal ..................................................................................................... 32

    Teste de Mesa ........................................................................................................ 34

    Atividades ............................................................................................................... 36

    Estruturas de ControleCAPTULO 4 37Seleo ................................................................................................................... 37

    Repetio ............................................................................................................... 44

    Atividades ............................................................................................................... 57

    Estruturas de Dados HomogneasCAPTULO 5

    59Vetores.................................................................................................................... 59Matrizes .................................................................................................................. 64

    Atividades ............................................................................................................... 69

    Estruturas de Dados Homogneas: Ordenao e PesquisaCAPTULO 6 70Ordenao de Vetores ........................................................................................... 70

    Pesquisa Sequencial ............................................................................................. 76

    Pesquisa Binria .................................................................................................... 79

    Atividades ............................................................................................................... 83

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    8/144

    Estruturas de Dados HeterogneasCAPTULO 7 84Registros ................................................................................................................ 84

    Atividades ............................................................................................................... 91

    Sub-rotinasCAPTULO 8 92Procedimentos ....................................................................................................... 93

    Funes .................................................................................................................. 98

    Escopo de Variveis ............................................................................................... 101

    Consideraes sobre o Uso de Sub-rotinas ......................................................... 105

    O Uso de Parmetros ............................................................................................ 106

    Atividades ............................................................................................................... 112

    Introduo ProgramaoCAPTULO 9 115Linguagem de Mquina ........................................................................................ 115

    Linguagem de Programao ................................................................................. 116

    Atividades ............................................................................................................... 117

    Linguagem PascalCAPTULO 10 118Fundamentos ......................................................................................................... 118

    Estruturas de Dados .............................................................................................. 127

    Sub-rotinas ............................................................................................................. 130

    Atividades ............................................................................................................... 133

    Apndice 1 134Apndice 2 135

    Referncias Bibliogrcas 144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    9/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    10/144

    g

    g

    10

    AlgoritmosUm algoritmo um conjunto de instrues, dispostas em uma sequncia lgica, que

    levam resoluo de um problema. Em outras palavras, um algoritmo uma espcie de passoa passo para se chegar soluo de um problema.

    Por exemplo, este simples algoritmo descreve a sequncia de passos necessria para subs-tituir as pilhas do controle remoto:

    1. Pegar as pilhas novas.

    2.Abrir o controle remoto.

    3. Retirar as pilhas usadas.

    4. Colocar as pilhas novas.

    5. Fechar o controle remoto.

    6. Testar o controle remoto.

    7. Colocar as pilhas usadas no lixo apropriado.

    importante entender que um algoritmo descreve uma possvel soluo para um pro-blema. Isto significa que um algoritmo pode no resolver o problema de forma satisfatria,mas tambm significa que mesmo que o algoritmo gere o resultado esperado, ele no a nicaforma de se resolver o problema.

    extremamente comum, e at esperado, que duas pessoas escrevam algoritmos diferentespara resolver um mesmo problema. Logo, o nvel de eficincia e eficcia de cada um dos algorit-mos ser influenciado por vrios fatores, porm talvez os dois principais sejam o domnio que apessoa tem sobre o problema e o seu nvel de conhecimento sobre lgica de programao.

    Por isso, se dois algoritmos diferentes resolvem o mesmo problema, no h como dizerque um est correto e o outro incorreto. O que possvel que um algoritmo seja mais efi-ciente do que o outro.

    Existem algumas caractersticas que definem os algoritmos, e que devem ser consideradasquando da sua criao:

    Finitude: um algoritmo deve ter um nmero finito de passos.

    Exatido ou definio: todas as etapas que compem um algoritmo devem ser cla-ramente definidas e ordenadas, sem margem para interpretaes ambguas.

    Entradas e sadas determinadas: todos os dados de entrada e sada do algoritmo devemestar explicitados. Um algoritmo pode ter zero ou mais entradas mas deve ter ao menos umasada.

    Efetividade: o algoritmo deve solucionar o problema a que se prope.

    Eficincia: o algoritmo deve ser o mais eficiente possvel, buscando sempre a melhorcombinao de trs fatores: tempo, esforo e recursos necessrios.

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    11/144

    11

    IntroduoLgicadeProgr

    amao

    Algoritmo XSoftwareDe uma maneira bastante simples, podemos dizer que umsoftware composto por um

    conjunto de instrues, escritas em uma sequncia lgica, que permitem ao computador resol-ver um determinado problema. Ou seja, ossoftwaresso baseados em algoritmos.

    Mas, para que o computador consiga interpretar as instrues, estas devem ser descritas

    em linguagens especficas, chamadas de linguagens de programao. Um algoritmo, quandoescrito em linguagem de programao, chamado de cdigo fonte.

    No entanto, quando estamos pensando na melhor forma de resolver um problemacomputacional, melhor utilizarmos uma linguagem mais prxima natural, principalmente pelafacilidade de compreenso. E para isso, existem diversas formas de representao de algoritmos.

    Representao de AlgoritmosUm algoritmo pode ser representado de vrias formas, dependendo dos objetivos e das

    preferncias de seu desenvolvedor. As principais formas de representao de algoritmos so:

    Descrio Narrativa;

    Pseudocdigo;

    Fluxograma;

    Diagrama de Chapin.

    Descrio Narrativa a descrio dos passos a serem executados pelo algoritmo, feita diretamente em lin-

    guagem natural. Os passos so listados um aps o outro, na sequncia em que devem serexecutados, cada um em uma nova linha de texto.

    Exemplo de algoritmo para trocar uma lmpada:

    1. Pegar a escada.

    2. Posicionar a escada sob a lmpada.

    3. Pegar a lmpada nova.

    4. Subir na escada.

    5. Remover a lmpada antiga.

    6. Colocar a lmpada nova.

    7. Descer da escada.

    8. Colocar a lmpada antiga no lixo.

    9. Guardar a escada.

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    12/144

    g

    g

    12

    A descrio narrativa, embora de fcil compreenso, totalmente informal e no padroni-zada. E por ser desprovida de regras, tende a tornar a descrio do algoritmo bastante imprecisa.O resultado acaba sendo a criao de algoritmos que no atendem as caractersticas esperadas.

    Pseudocdigo

    O pseudocdigo, que tambm conhecido como portugus estruturado ou portu-gol, uma tcnica mais formal e estruturada uma vez que possui algumas regras definidas.Normalmente, estas regras so prximas s adotadas pelas linguagens de programao, o que bastante positivo para o estudante, pois quando ele tiver contato com as linguagens de pro-gramao seu aprendizado ser mais fcil. Por isso, o pseudocdigo ser bastante utilizado aolongo deste livro.

    Talvez um dos maiores benefcios do pseudocdigo esteja no fato de ele nos oferecer aestruturao bsica utilizada nas linguagens de programao, aliada facilidade de compreensoda nossa linguagem natural, o que possibilita uma maior concentrao no entendimento doproblema e dos passos necessrios para sua resoluo. Este o principal motivo pelo qual o tra-balho com pseudocdigo facilita o entendimento e a aprendizagem da lgica de programao.

    As linguagens de programao so praticamente todas compostas por comandos represen-tados por palavras da lngua inglesa. O pseudocdigo permite que descrevamos os comandos quecompe o algoritmo em uma linguagem mais amigvel para ns, programadores, analistas, etc.

    Mais adiante, veremos que os comandos que utilizamos no pseudocdigo equivalem aoscomandos de linguagem de programao. Ou seja, o portugus estruturado nada mais do queuma forma de utilizar o portugus para representar comandos que sero passados ao compu-tador. Posteriormente, iremos traduzir alguns dos nossos programas feitos em pseudocdigopara uma linguagem real de programao e, a sim, os programas podero ser executados nocomputador.

    Como a lgica j estar pronta, teremos apenas que substituir os comandos do portugusestruturado pelos comandos reais da linguagem de programao a ser utilizada, que, no nossocaso, ser a linguagem Pascal.

    Veja o mesmo algoritmo do exemplo anterior, representado em pseudocdigo:

    {Algoritmo que descreve os passos para trocar uma lmpada}

    Algoritmo TrocaLampada

    Incio

    Pegar a escada; Posicionar a escada sob a lmpada;

    Pegar a lmpada nova;

    Subir na escada;

    Remover a lmpada antiga;

    Colocar a lmpada nova;

    Descer da escada; {este outro comentrio}

    Colocar a lmpada antiga no lixo;

    Guardar a escada;

    Fim

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    13/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    14/144

    g

    g

    14

    FluxogramaOs fluxogramas, que tambm so chama-

    dos de diagramas de blocos, nos permitem dar umarepresentao visual para o algoritmo, facilitando suacompreenso.

    Para criar um fluxograma utilizam-se figurasgeomtricas, cada uma com um significado diferente,e dentro das quais so colocadas as instrues refe-rentes a cada passo do algoritmo.

    A indicao do fluxo de execuo feita pormeio de setas, estando sempre o incio do algoritmona parte de cima da figura e seu trmino na parte debaixo.

    direita, temos o algoritmo referente trocada lmpada, representado em um fluxograma.

    Por se tratar de um algoritmo bastante simples,foram necessrios apenas dois tipos de figuras:

    Terminal

    Serve para demarcar o incio ou trmino de um algoritmo.

    Processamento

    Representa operaes de processamento.

    Uma desvantagem dos fluxogramas que elesconsomem bastante espao, o que limita sua utiliza-o a algoritmos de pequeno e mdio porte.

    Existem vrias outras figuras utilizadas na cons-

    truo de fluxogramas, as quais iremos conhecendoconforme avanarmos no contedo deste livro. Umalistagem completa de todas as figuras utilizadas nosfluxogramas ao longo do livro est disponvel noApndice 1, na pgina 134.

    O fluxograma e o pseudocdigo so as duas for-mas mais utilizadas na representao de algoritmos.

    Incio

    F im

    Pegar a escada

    Posicionar a escada

    sob a lmpada

    Pegar a lmpada nova

    Subir na escada

    Remover a lmpada ant iga

    Colocar a lmp ada nova

    Descer da escada

    Colocar a lmpada

    antiga no lixo

    Guardar a escada

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    15/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    16/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    17/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    18/144

    ,

    p

    18

    Tipos de DadosQuando declaramos uma varivel, precisamos indicar o tipo de informa-

    o que desejamos armazenar nela. Existem diversos tipos de dados e muitosdeles so comuns na grande maioria das linguagens de programao. Nonosso estudo de lgica de programao, porm, utilizaremos apenas alguns

    dos principais.Os tipos de dados bsicos com os quais iremos trabalhar so:

    Inteiro: permite armazenar nmeros inteiros, positivos ounegativos.

    Exemplos de informaes vlidas em uma varivel do tipo Inteiro5

    0

    -2

    1430

    Real: permite armazenar nmeros inteiros ou fracionrios, positivosou negativos.

    Exemplos de informaes vlidas em uma varivel do tipo Real5

    0

    -2

    1,5

    -3,72

    Caractere: permite armazenar caracteres alfanumricos (ou seja:letras, nmeros, espaos, sinais de pontuao e outros smbolos).Este tipo tambm chamado de tipo Literal ou tipo String. Valoresdo tipo caractere so sempre representados entre aspas ().

    Exemplos de informaes vlidas em uma varivel do tipoCaractere

    Av. Brasil, 1500

    5

    %

    O tipo Caractere aceita tudo! @#$%.

    Lgico: permite armazenar valores lgicos, do tipo Verdadeiro ouFalso, os quais representaremos respectivamente porVe F.

    Exemplos de informaes vlidas em uma varivel do tipo LgicoV

    F

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    19/144

    19

    Variveis,TiposdeDadoseConstantes

    Declarao de VariveisPara que uma varivel passe a existir e possa ser utilizada no contexto de um algoritmo,

    necessrio que ela seja declarada. A declarao nada mais do que a definio de uma varivel,aonde informamos o seu nome e o tipo de informao que ela dever ser capaz de armazenar.

    Para declarar variveis no pseudocdigo, adotaremos o seguinte padro:

    : ;

    A declarao dever ser feita no comeo do algoritmo, em um bloco nomeadoVariveis,antes do demarcador Incio.

    Veja um exemplo:

    {Exemplo de declarao de variveis I}

    Algoritmo ExemploVariaveis

    Variveis nome : Caractere;

    endereco : Caractere;

    altura : Real;

    peso : Real;

    telefone : Caractere; {Declaramos como caractere para permitir queo telefone seja digitado com formatao. Ex: (00)1234-1234,e tambm que seja possvel informar ramal}

    Incio

    ...

    Fim

    Veja que, no exemplo acima, cada varivel foi declarada em uma nova linha. Tambm possvel agrupar variveis do mesmo tipo em uma mesma linha, declarando-as todas juntas.

    Veja o exemplo a seguir:

    {Exemplo de declarao de variveis II}

    Algoritmo ExemploVariaveisAgrupadas

    Variveis

    nome, endereco, telefone : Caractere;

    altura, peso : Real;

    Incio

    ...

    Fim

    Lembre-se de que uma vez que uma varivel tenha sido declarada, no possvel alterarseu nome nem seu tipo, mas apenas o valor que ela guarda.

    Nos fluxogramas e diagramas de Chapin, a declarao de variveis no costuma serrepresentada.

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    20/144

    ,

    p

    20

    Atribuio e Inicializao deVariveis

    Atribuio o ato de definir o valor de uma varivel. Tecnicamente, isto significa escre-ver uma nova informao no espao de memria identificado pelo nome que demos varivel

    no momento de sua declarao.Para atribuir um novo valor a uma varivel, adotaremos o seguinte padro:

    := ;

    Veja os exemplos:

    Algoritmo ExemploAtribuicao

    Variveis

    ano : Inteiro;

    nomeAluno : Caractere;

    altura : Real;

    Incio

    ano := 2010; {atribui o valor inteiro 2010 varivel ano}

    nomeAluno := Pedro da Silva; {atribui a sequncia decaracteres Pedro da Silva varivel nomeAluno}

    altura := 172,5; {atribui o valor real 172,5 varivel altura}

    Fim

    Tambm fique atento ao fato de que a operao de atribuio apaga qualquer informaoexistente na varivel, sobrepondo-a com o novo valor.

    Por exemplo:

    Algoritmo ExemploAtribuicao2

    Variveis

    x : Inteiro;

    Incio

    x := 1; {neste momento x vale 1}

    x := 5; {neste momento x passou a valer 5}

    Fim

    Inicializaruma varivel significa atribuir-lhe um valor inicial, o que deve ser feito nocomeo do algoritmo, logo aps o demarcador Incio.

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    21/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    22/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    23/144

    23

    Variveis,TiposdeDadoseConstantes

    Com relao nomenclatura, valem as mesmas regras listadas anteriormente para a decla-rao de variveis, porm com uma recomendao:

    Procurar sempre declarar as constantes, utilizando letras maisculas, como forma dediferenci-las das variveis de maneira mais fcil ao longo do algoritmo. Neste caso, aseparao de palavras dos nomes compostos feita por meio do caractere underscore. Esta no uma regra e, sim, uma conveno utilizada por grande parte dos programadores.

    Exemplos de nomes recomendados Exemplos de nomes no recomendadosFORCA_ACELERACAO

    PI

    OPERACAO_PADRAO

    forca_aceleracao

    pi

    operacaoPadrao

    Exemplo de pseudocdigo, contendo declarao de constantes:

    Algoritmo ExemploConstantes

    Constantes PI := 3,14; {constante do tipo Real}

    MAX_GRAUS := 90; {constante do tipo Inteiro}

    INSTITUICAO := Escola X; {constante do tipo Caractere}

    RELATORIO_ATIVADO := F; {constante do tipo Lgico}

    Variveis

    ...

    Incio

    ...

    Fim

    Do mesmo modo que as variveis, a declarao de constantes tambm no costuma serrepresentada nos fluxogramas nem nos diagramas de Chapin.

    Atividades1) Crie um algoritmo para calcular a mdia de consumo de com-

    bustvel de um veculo qualquer. O usurio dever informar:quilometragem inicial, quilometragem nal e a quantidade delitros abastecida. Represente seu algoritmo utilizando pseudo-cdigo e uxograma.

    2) Crie um algoritmo para calcular a velocidade mdia atingidapor um veculo durante uma viagem. Reita sobre os dadosque sero necessrios solicitar ao usurio. Represente seu

    algoritmo utilizando pseudocdigo e uxograma.

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    24/144

    p

    p

    24

    103

    Operadores e ExpressesOperador um elemento que indica a realizao de uma operao sobre componentes

    de uma expresso, gerando consequentemente um resultado.

    Os operadores esto presentes em qualquer tipo de expresso e so utilizados para realizarclculos, comparaes ou definir critrios. Qualquer expresso, por menor que seja, semprepossuir ao menos um operador.

    Conforme formos avanando nos exemplos, veremos que possvel utilizar mais de umtipo de operador em uma mesma expresso, e que isso bastante comum em expresses umpouco mais complexas.

    Existem quatro tipos de operadores, que sero detalhados a seguir.

    Operadores AritmticosOs operadores aritmticosso aqueles utilizados nos clculos matemticos. Desde osanos iniciais na escola, ns j aprendemos a utilizar estes operadores.

    Na lgica de programao, estes operadores so utilizados apenas com variveis numri-cas (dos tipos Inteiro e Real), gerando tambm uma sada numrica.

    A tabela abaixo lista os operadores aritmticos por ordem de precedncia.

    Precedncia Operador Descrio

    1 ^ Potenciao

    2 * Multiplicao

    2 / Diviso

    3 + Adio

    3 - Subtrao

    A ordem de precedncia nada mais do que uma preferncia de execuo. Por exemplo,na expresso existente na figura abaixo, a multiplicao realizada antes da subtrao, devido ordem de precedncia dos operadores:

    7 2 * 31-

    2-

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    25/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    26/144

    p

    p

    26

    Os clculos realizados na expresso anterior poderiam ser decompostos em vrias linhas,como no algoritmo abaixo:

    {Calcula a quantidade de carne necessria para um churrasco}

    Algoritmo CalculaCarneChurrasco

    Constantes

    MARGEM_SEGURANCA := 1,2; {para garantir que no faltar carne!}

    Variveis

    consumoMedioM, consumoMedioH : Real;

    qtdeM, qtdeH : Inteiro;

    consumoTotalM, consumoTotalH, total : Real;

    Incio

    Escreva(CLCULO DE CARNE PARA CHURRASCO);

    Escreva(Digite o consumo mdio feminino:);

    Leia(consumoMedioM);

    Escreva(Digite a quantidade de mulheres:);

    Leia(qtdeM);

    Escreva(Digite o consumo mdio masculino:);

    Leia(consumoMedioH)

    Escreva(Digite a quantidade de homens:);

    Leia(qtdeH);

    consumoTotalM := consumoMedioM * qtdeM;

    consumoTotalH := consumoMedioH * qtdeH;

    total := (consumoTotalM + consumoTotalH) * MARGEM_SEGURANCA;

    Escreva(A quantidade total de carne para o churrasco :); Escreva(total);

    Fim

    Em muitos casos, porm, iremos preferir realizar todos os clculos em uma nica expresso,para deixar o algoritmo mais compacto. Veja:

    {Calcula a quantidade de carne necessria para um churrasco}

    Algoritmo CalculaCarneChurrasco

    Constantes

    MARGEM_SEGURANCA := 1,2; {para garantir que no faltar carne!}

    Variveis

    consumoMedioM, consumoMedioH, qtdeCarne : Real;

    qtdeM, qtdeH : Inteiro;

    Incio

    Escreva(CLCULO DE CARNE PARA CHURRASCO);

    Escreva(Digite o consumo mdio feminino:);

    Leia(consumoMedioM);

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    27/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    28/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    29/144

    29

    OperadoreseExpresses

    NegaoNegao uma operao lgica que gera como sada um valor inverso ao valor lgico de

    entrada. O operador NOtambm usualmente representado por !ou NOT.

    Exemplos:

    .NO. varA

    .NO. (5 > 3)

    O operador NOsempre deve ser inserido esquerda da varivel ou expresso cujo valordeve modificar.

    Exemplo em algoritmo:

    Algoritmo ExemploNao

    Variveis

    X, Y : Inteiro;

    L, M : Lgico;

    Incio

    X := 1;

    Y := 2;

    L := (X > Y); {A varivel L receber o valor F (falso)}

    M := .NO.(X > Y); {A varivel M receber o valor V(verdadeiro)}

    Fim

    Existe uma tcnica chamada de tabela verdadeou tabela de verificao, que servepara ilustrar o resultado de associaes lgicas. A tabela verdade, do operador NO, bastantesimples:

    A .NO. A

    V FF V

    ConjunoA conjuno uma operao lgica que relaciona dois valores lgicos por meio do ope-

    rador E. Este operador tambm representado por &&eAND.

    A operao de conjuno relaciona dois valores lgicos, gerando um valor lgico de sada,que ser verdadeiro somente se os dois valores de entrada forem verdadeiros.

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    30/144

    p

    p

    30

    Por exemplo:

    varA .E. varB

    (altura Y); {A varivel M receber o valor V (verdadeiro)}

    N := V; {A varivel N receber o valor V (verdadeiro)}

    O := L .E. M {A varivel O receber o valor F (falso)

    porque L falso}

    P := M .E. N {A varivel O receber o valor V (verdadeiro)

    porque M e N so verdadeiros}Fim

    Para aprofundar o entendimento destas associaes, analise a tabela verdade do operador E:

    A B A .E. B

    F F F

    V F F

    F V F

    V V V

    DisjunoA disjuno uma operao lgica que relaciona dois valores lgicos por meio do ope-

    rador OU, tambm representado por ||e OR.

    Esta operao relaciona dois valores lgicos, gerando um valor lgico de sada que serverdadeiro se pelo menos um dos valores de entrada for verdadeiro.

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    31/144

    31

    OperadoreseExpresses

    Exemplos:

    varA .OU. varB

    (altura > alturaMax) .OU. (largura > larguraMax)

    Vejamos o uso em um algoritmo:

    Algoritmo ExemploOU

    Variveis

    X, Y, Z : Inteiro;

    L, M, N, O, P : Lgico;

    Incio

    X := 1;

    Y := 2;

    Z := 3;

    L := (X > Y); {A varivel L receber o valor F (falso)}

    M := (Z > Y); {A varivel M receber o valor V (verdadeiro)}

    N := F; {A varivel N receber o valor F (falso)}

    O := L .OU. M {A varivel O receber o valor V (verdadeiro)

    porque M verdadeiro}

    P := L .OU. N {A varivel O receber o valor F (falso)

    porque L e N so falsos}

    Fim

    Confira a tabela verdade do operador OU:

    A B A .OU. B

    F F F

    V F V

    F V V

    V V V

    Disjuno ExclusivaExiste um outro operador lgico, representado por XOU ou XOR, que d origem a

    uma operao chamada disjuno exclusiva. Este operador menos importante para nossosestudos sobre lgica de programao e no ser abordado neste momento.

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    32/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    33/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    34/144

    p

    p

    34

    Veja as duas novas figuras:

    Impressora

    Representa a sada de dados emuma impressora

    Comentrio

    Permite a insero de comentrios

    Confira um exemplo de uso no fluxograma abaixo:

    Incio

    Fim

    idadeAluno := 18

    A idade do aluno

    a

    idade do aluno.

    Isto est incorreto.

    Geraria um erro seestivesse sendo

    executado por um

    computador.

    Teste de MesaO teste de mesa, tambm conhecido como teste do chins ou chinesinho, um pro-

    cesso de teste manual que permite verificar a eficincia dos algoritmos.

    Os testes so realizados por meio de simulaes. Nelas, so atribudos valores de entradafictcios, sendo possvel acompanhar o valor das variveis do sistema ao longo da execuo do

    algoritmo, o que permite encontrar erros e identificar suas causas.

    FuncionamentoVeja um passo a passo de como este processo funciona:

    1. Numere cada uma das linhas do algoritmo que deseja testar (somente entre os demar-cadores Incioe Fim);

    2. Crie uma tabela contendo:

    a. Uma linha para cada passo do algoritmo;

    b. Uma coluna para cada varivel declarada;

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    35/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    36/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    37/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    38/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    39/144

    39

    EstruturasdeControle

    Nos fluxogramas, a representao de estruturas de seleo feita por meio das seguintesfiguras:

    Deciso

    Representa uma tomada dedeciso

    Conector

    Simboliza a unio de uxos deexecuo

    O losango utilizado para representar decises. Possui um ou mais fluxos de entrada esempre dois fluxos de sada (uma vez que a expresso analisada resultar sempre em verdadeiroou falso).

    O conector, j visto anteriormente com a funo de representar a continuao do algo-ritmo em outro ponto da pgina, tambm utilizado nas estruturas de seleo para unir as setasindicativas de fluxo aps a passagem pelo bloco condicional.

    Veja ambas as figuras em uso, no exemplo abaixo:

    Incio

    Digite a idade

    do aluno:

    idadeAluno

    idadeAluno < 18

    O a luno

    menor de idade.

    S

    N

    Fim

    A id ad e do

    aluno :

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    40/144

    40

    O diagrama de Chapin tambm possui uma representao especficapara a estrutura de seleo. Veja:

    Incio

    Escreva Digite a idade do aluno:

    Leia idadeAluno

    idadeAluno < 18

    N S

    - Escreva O aluno menor deidade.

    Escreva A idade do aluno : idadeAluno

    Fim

    Observe que o bloco referente ao teste condicional est dividido emtrs partes: uma contm o teste a ser realizado e as outras duas representamos possveis fluxos.

    Logo aps o teste, h uma diviso em duas colunas, cada uma repre-sentando um fluxo de execuo. Quando o trecho do algoritmo relacionado estrutura de seleo acaba, o fluxo volta a ser representado em apenas umacoluna.

    Estrutura de Seleo CompostaA estrutura de seleo compostapermite definir dois blocos de ins-

    trues, sendo que um deles ser executado e o outro no, de acordo com oatendimento ou no dos critrios definidos. Esta estrutura tambm conhe-cida como desvio condicional composto.

    No pseudocdigo, a estrutura de seleo composta representadapelo comando Se...Seno, que utiliza a seguinte estrutura:

    Se() Ento

    ...

    Seno

    ...

    Fim_Se

    Todos os comandos existentes entre Entoe Senos sero executa-dos se a condio for atendida. E todos os comandos existentes entre SenoeFim_Ses sero executados se a condio no for atendida.

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    41/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    42/144

    42

    No diagrama de Chapin, a estrutura tambm a mesma que j conhecemos, porm comas colunas dos dois fluxos contendo comandos. Veja:

    Incio

    Escreva Digite a primeira nota:

    Leia nota1

    Escreva Digite a segunda nota:

    Leia nota2media := (nota1 + nota2) / 2

    media >= 7

    N S

    resultado := reprovado resultado := aprovado

    Escreva Situao do aluno: resultado

    Fim

    Estruturas de Seleo AninhadasMuitas vezes, dentro de um fluxo condicional, ser necessrio tomar uma nova deciso.

    Ou pode ser que tenhamos mais de duas opes de fluxo de execuo. Em ambos os casos,podemos utilizar estruturas de seleo aninhadas,que nada mais so do que uma estruturade seleo dentro de outra. Veja um exemplo:

    01020304050607

    08091011121314151617

    {Exemplo de uso de Se aninhado}Algoritmo ExemploSeAninhadoVariveis nota1, nota2, media : Real;

    nome, resultado : Caractere;Incio Escreva(Digite o nome do aluno:);

    Leia(nome); Escreva(Digite a primeira nota:);

    Leia(nota1); Escreva(Digite a segunda nota:);

    Leia(nota2); media := (nota1 + nota2) / 2;

    Se(media >= 7) Ento resultado := aprovado ; Seno Se(media >= 4)Ento resultado := em exame; Seno resultado := reprovado; Fim_Se Fim_Se Escreva(O aluno + nome + est + resultado);Fim

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    43/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    44/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    45/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    46/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    47/144

    47

    EstruturasdeControle

    No exemplo anterior, o algoritmo pergunta um nome e o escreve 10 vezes na tela, porm,nas ltimas 5 vezes, o nome escrito entre colchetes.

    O fluxograma deste algoritmo ficaria da seguinte forma:

    Incio

    contador < 10

    S

    N

    Fim

    contador := 1

    contador := contador + 1

    nome

    Digite seunome:

    contador > 5

    [ ]

    SN

    Repetio com Ps-TesteA repetio com Ps-Teste similar repetio com Pr-Teste, porm com duas dife-

    renas cruciais:

    1. Na repetio com Ps-Teste, o teste que define a execuo ou no do bloco de coman-dos realizado ao final do bloco. A consequncia disso que o bloco de instrues executado ao menos uma vez.

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    48/144

    48

    2.Ao contrrio da repetio com Pr-Teste, que executa o bloco de comandos enquantoo resultado do teste for verdadeiro, a repetio com Ps-Teste executa o bloco decomandos enquanto o resultado do teste for falso. Ou seja, a repetio com Ps-Testeexecuta at que o resultado do teste se torne verdadeiro.

    No pseudocdigo, a repetio com Ps-Teste representada pelo comando

    Repita...At_Que, utilizando a seguinte estrutura:Repita

    ...

    At_Que()

    Todos os comandos existentes entre RepitaeAt_Quesero executados repetidamente,at que a condio seja atendida. Por exemplo:

    01

    02

    03

    04

    05

    {Exemplo de Repetio com Ps-Teste}

    Algoritmo ExemploRepita

    Variveis

    contador : Inteiro;

    Incio

    contador := 1;

    Repita

    Escreva(Ol. Neste momento o contador vale + contador);

    contador := contador + 1;

    At_Que(contador > 5)

    Fim

    O algoritmo acima possui a mesma funcionalidade do exemplo apresentado para a repe-tio com Pr-Teste. Aqui, ele foi reescrito para passar a utilizar a repetio do tipo Ps-Teste.Observe que as nicas mudanas aconteceram na estrutura de repetio. Para conseguirmos omesmo resultado, foi necessrio modificar o teste que determina a sada do fluxo. O teste eracontador 5.

    Na repetio com Ps-Teste, em muitos casos, tambm no possvel saber quantas vezeso loopser executado, mas sabemos que ser ao menos uma vez. O nmero de iteraes pode serde uma ou de inmeras, porque, assim como na repetio com Pr-Teste, a expresso que deter-mina a sada do looppode depender de fatores definidos somente durante o processamento.

    Para representar uma repetio do tipo Ps-Teste em um fluxograma, utilizam-se as mes-mas figuras usadas no Pr-Teste, porm com o teste que define a sada do loopsendo realizadoao final do bloco de instrues.

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    49/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    50/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    51/144

    51

    EstruturasdeControle

    Repetio com Varivel de ControleA repetio com varivel de controle baseada em uma varivel numrica, cujo valor

    controlado dentro da prpria estrutura de repetio, com base nos critrios definidos na suacriao.

    Este tipo de repetio ideal quando sabemos com antecedncia quantas vezes o bloco de

    instrues dever ser executado.No pseudocdigo, a repetio com varivel de controle representada pelo comandoPara, utilizando a seguinte estrutura:

    Para De At Passo

    Faa

    ...

    Fim_Para

    Todos os comandos existentes entre Parae Fim_Parasero executados repetidamente,at que a varivel de controle atinja seu valor final. Por exemplo:

    01

    02

    03

    {Exemplo de Repetio com Varivel de Controle}

    Algoritmo ExemploPara

    Variveis

    contador : Inteiro;

    Incio

    Para contador De 1 At 5 Passo 1 Faa

    Escreva(Ol. Neste momento o contador vale + contador);

    Fim_Para

    Fim

    No algoritmo acima, o comando da linha 2 ser executado 5 vezes, uma vez que foi defi-nido na linha 1 que a varivel contadorter seu valor incrementado com 1 unidade de cada vez(passo), iniciando em 1 e indo at 5.

    Como se pode perceber, o gerenciamento deste tipo de repetio torna-se mais simples emenos propenso a erros, uma vez que o controle do loop realizado em uma nica linha.

    Para representar nos fluxogramas as repeties do tipo varivel de controle, utiliza-se aseguinte figura:

    Preparao

    Representa a preparao de instrues para processamento emestruturas de repetio do tipo Varivel de Controle.

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    52/144

    52

    Veja o algoritmo de exemplo, representado em fluxograma:

    Incio

    Fim

    Ol. Neste

    momento o

    contador vale

    contador,1, 5, 1

    Vejamos um exemplo de repetio com varivel de controle e estrutura de seleo nomesmo algoritmo:

    01

    02

    03

    04

    05

    06

    07

    08

    09

    1011

    12

    13

    14

    15

    16

    {Exemplo de Repetio com Varivel de Controle e Seleo}

    Algoritmo ExemploPara2

    Variveis

    contador : Inteiro;

    tempMes, tempAnual : Real;

    Incio Escreva(Clculo de temperatura mdia anual.);

    tempAnual := 0;

    Para contador De 1 At 12 Passo 1 Faa

    Escreva(Digite a temperatura mdia do ms + contador);

    Leia(tempMes);

    Se(tempMes > 35) Ento

    Escreva(Que calor!);

    Seno

    Se(tempMes < 5)Ento

    Escreva(Que frio!); Fim_Se

    Fim_Se

    tempAnual := tempAnual + tempMes;

    Fim_Para

    tempAnual := tempAnual / 12;

    Escreva(A temperatura mdia anual foi + tempAnual);

    Fim

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    53/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    54/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    55/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    56/144

    56

    Representado em fluxograma, o algoritmo anterior ficaria da seguinte forma:

    contador,1, 10, 1

    Incio

    numLido > 0

    S

    N

    Fim

    x =

    resultado := contador * numLido

    Digite um nmeropara ver sua tabuada

    ou 0 para sair:

    numLido

    Digite um nmeropara ver sua tabuada

    ou 0 para sair:

    numLido

    Na resoluo de problemas mais complexos, comum termos oaninhamento (ou encadeamento) de estruturas de repetio e estrutu-ras de seleo em um mesmo algoritmo.

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    57/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    58/144

    58

    5) Desenvolva um algoritmo (pseudocdigo e uxograma) capazde apresentar na tela o fatorial de um nmero inteiro informadopelo usurio.

    O algoritmo deve ser criado utilizando a estrutura de repetiocom Pr-Teste.

    6) Crie um algoritmo (pseudocdigo e uxograma) que soliciteao usurio um nome e um nmero inteiro, que representar aquantidade de vezes que o nome informado dever ser escritona tela.

    O algoritmo deve ser criado utilizando a estrutura de repetiocom Ps-Teste.

    7) Construa um algoritmo (pseudocdigo e uxograma) que sejacapaz de calcular o valor total de uma compra, somando o

    preo de cada um dos produtos. O algoritmo dever solicitar o preo de cada produto e ir

    somando ao montante total, e deve entender que os produ-tos acabaram quando o preo informado for 0 (zero), entomostrar o nmero de itens comprados e o total da compra,encerrando a execuo.

    Caso seja informado algum valor menor do que zero, o pro-grama deve desconsider-lo e exibir uma mensagem de errosolicitando que o valor correto do produto seja digitado.

    O algoritmo deve ser criado utilizando a estrutura de repetiocom Ps-Teste.

    8) Crie um algoritmo (pseudocdigo e uxograma) que realize as

    seguintes atividades:

    a. Pergunte a quantidade de alunos da turma.

    b. Solicite ao usurio o nome de cada um dos X alunos.

    c. Envie cada nome lido para a impressora.

    O algoritmo deve ser criado utilizando a estrutura de repetiovarivel de controle.

    9) Desenvolva um algoritmo (pseudocdigo e uxograma) que

    solicite ao usurio a entrada de 5 valores inteiros e, a cada

    valor lido, aplique a seguinte regra: se o nmero lido for maior

    que 10, subtrai 5 e escreve o resultado na tela, se no soma 2

    e manda o resultado para a impressora.

    O algoritmo deve ser criado utilizando-se a estrutura de repeti-

    o varivel de controle.

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    59/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    60/144

    60

    g

    Outra vantagem dos vetores que os algoritmos criados para atribuir e ler dados de veto-res geralmente so mais compactos do que os que trabalham com variveis. Alm disso, tarefascomo ordenao e pesquisa de valores so atividades realizadas de forma mais eficiente pormeio de vetores.

    Mas ateno! O vetor til quando precisamos manipular uma

    lista de dados de mesmo signicado. Vetores no devem ser usadospara armazenar informaes de signicados diferentes, ainda queestas informaes sejam do mesmo tipo de dado. Ex.: nota, idade endo aluno na turma, mesmo sendo todos do tipo Inteiro, no devemser armazenados juntos em um vetor, pois so informaes de signi-cados totalmente diferentes. Esta uma prtica que ajuda a manter aorganizao e a consistncia dos dados manipulados pelo algoritmo.

    DeclaraoConforme j foi citado, todos os elementos de um vetor pertencem necessariamente ao

    mesmo tipo de dado. Esta a essncia das estruturas de dados homogneas.

    A declarao de vetores em pseudocdigo realizada utilizando-se a seguinte sintaxe:

    : Vetor[1..] De

    Exemplo:

    {Declarao de vetor}

    Variveis

    valores : Vetor[1..10] De Inteiro;

    locais : Vetor[1..5] de Caractere;

    Tenha em mente que uma vez que um vetor seja declarado no possvel modificar seutamanho. Contudo, em termos de aproveitamento de memria no uma boa prtica criar um

    vetor com posies que voc no pretende utilizar, pois quando declaramos um vetor, o com-putador aloca (reserva) a quantidade de memria necessria para armazenar todos os elementosdo vetor.

    O ideal s declarar um vetor quando souber a quantidade de itens que se deseja arma-zenar nele, porm, em alguns casos, inevitvel declararmos um vetor com um tamanho queno ser totalmente utilizado. Por exemplo, a quantidade de alunos em uma turma pode variarbastante, ento a soluo declarar o vetor com o tamanho mximo que uma turma pode ter,mesmo sabendo que para a maioria das turmas haver desperdcio de espao.

    A nomenclatura utilizada para os vetores segue os mesmos padres utilizados paraas variveis.

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    61/144

    61

    EstruturasdeDadosHomog

    neas

    Atribuio e LeituraPara acessar (atribuir ou ler) um determinado elemento dentro do vetor, necessrio

    informar sua posio, tambm chamada de ndice, por meio da seguinte sintaxe:

    {para atribuir}

    [] := ;

    {para ler}

    := [];

    As operaes de atribuio e leitura podem ser realizadas diretamente em cada posio dovetor, mas isto se torna desnecessariamente trabalhoso. Veja:

    {Exemplo de vetor}Algoritmo ExemploVetor

    Variveis

    valores : Vetor[1..10] De Inteiro;

    Incio

    Escreva(Digite um valor para a posio 1:);

    Leia(valores[1]);

    Escreva(Digite um valor para a posio 2:);

    Leia(valores[2]);

    {...at o ltimo elemento}

    Escreva(O elemento da posio 1 vale + valores[1]);

    Escreva(O elemento da posio 2 vale + valores[2]);

    {...at o ltimo elemento}

    Fim

    Se formos acessar todos os itens de um vetor da forma como est no exemplo acima, no

    h vantagem alguma em relao ao uso de variveis. O acesso direto uma alternativa apenaspara quando desejamos acessar poucos elementos do vetor.

    Para percorrer um vetor, o melhor utilizarmos uma estrutura de repetio, e a opomais interessante a estrutura de repetio com varivel de controle (o Para), pois, neste caso,a quantidade de iteraes conhecida com antecedncia.

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    62/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    63/144

    63

    EstruturasdeDadosHomog

    neas

    Vejamos um exemplo um pouco mais detalhado, somente em pseudocdigo:

    01

    02

    03

    04

    05

    06

    0708

    09

    10

    11

    12

    13

    14

    15

    {Exemplo de vetor 2}

    Algoritmo ExemploVetor2

    Variveis

    vetA, vetB : Vetor[1..5] De Inteiro;

    vetC : Vetor[1..10] De Inteiro;

    contador, complemento : Inteiro;

    Incio

    Escreva(Populando o primeiro vetor);

    Para contador De 1 At 5 Passo 1 Faa

    Escreva(Digite um valor para a posio + contador + :);

    Leia(vetA[contador]);

    Fim_Para

    Escreva(Populando o segundo vetor automaticamente);

    Para contador De 1 At 5 Passo 1 Faa vetB[contador] := vetA[contador] * 2;

    Fim_Para

    complemento := 0;

    Para contador De 1 At 5 Passo 1 Faa

    vetC[contador + complemento] := vetA[contador];

    complemento := complemento + 1;

    vetC[contador + complemento] := vetB[contador];

    Fim_Para

    Fim

    O exemplo acima popula (preenche) um vetor com dados informados pelo usurio (linhas01 a 05), popula um segundo vetor com base nos dados do primeiro (linhas 06 a 09) e, por fim,popula um terceiro vetor com base nos dois anteriores, pegando os valores alternadamente(linhas 10 a 15).

    Perceba que a varivel contadorfoi utilizada para as trs estruturas de repetio, ao invsde declararmos uma varivel para cada repetio. Isto s foi possvel porque as estruturas noesto aninhadas, caso contrrio, uma estrutura interferiria no contador que est sendo utilizadopela outra.

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    64/144

    64

    g

    Exemplo:

    01

    02

    03

    04

    05

    06

    07

    {O compartilhamento de contador incorreto}

    Algoritmo ExemploCompartilharContador

    Variveis

    vetA, vetB : Vetor[1..5] De Inteiro;

    contador : Inteiro;

    Incio

    Para contador De 1 At 10 Passo 1 Faa

    Escreva(Digite um valor para a posio + contador + :);

    Leia(vetA[contador]);

    Para contador De 1 At 3 Passo 1 Faa

    Escreva(Compartilhar contador no d certo.);

    Fim_Para

    Fim_Para

    Fim

    No exemplo anterior, sempre que a estrutura de repetio mais interna encerrar seu loop, ocontador estar valendo 3; o que far com que a estrutura externa entre em loopinfinito, pois o con-tador nunca chegar ao valor 10, que o critrio de sada desta estrutura. Dependendo dos critriosestabelecidos em cada estrutura, o compartilhamento de variveis de controle tambm pode causaroutros tipos de problemas.

    Para evitar o problema do exemplo, deveriam ter sido declaradas duas variveis decontrole, uma para cada estrutura de repetio. Esta regra vale independentemente do tipo derepetio que estivermos utilizando: pode ser uma repetio com Ps-Teste, dentro de uma

    com varivel de controle; uma com Pr-Teste, dentro de uma com Ps-Teste, etc. Lembre-se denunca compartilhar variveis de controle entre estruturas de repetio aninhadas.

    MatrizesMatrizesso estruturas de dados que seguem o mesmo princpio dos vetores, porm as matri-

    zes possuem duas ou mais dimenses, ao contrrio dos vetores que possuem apenas uma dimenso.

    Matrizes Bi e Tridimensionais

    Matrizes Bidimensionais

    As matrizes bidimensionais possuem duas ou mais linhas e duas ou mais colunas, e costumamser representadas por meio de tabelas:

    11 23 36

    7 31 54

    13 66 91

    44 80 32

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    65/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    66/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    67/144

    67

    EstruturasdeDadosHomog

    neas

    08

    09

    10

    11

    12

    Para i De 1 At 10 Passo 1 Faa

    Para j De 1 At 5 Passo 1 Faa

    Escreva(O elemento da linha + i + coluna + j +

    vale + gradeValores[i, j])

    Fim_Para

    Fim_Para

    Fim

    Os comandos entre as linhas 1 e 7 tm a funo de popular a matriz. Repare que, para isso,foi necessrio utilizar duas estruturas de repetio, uma para percorrer as linhas e outra parapercorrer as colunas da matriz. Assim, quando o loopexterno estiver na linha 1, o loopinternofar referncia s colunas de 1 a 5, da linha 1; quando o loopexterno estiver na linha 2, o loopinterno far referncia s colunas de 1 a 5, da linha 2; e assim sucessivamente, at que toda amatriz seja preenchida.

    Entre as linhas 8 e 12, a matriz percorrida a fim de escrever na tela o valor armazenadoem cada uma de suas posies.

    Veja o algoritmo representado em um fluxograma:

    Incio

    Fim

    i, 1, 10, 1

    Populando a linha

    gradeValores[i, j]

    j, 1, 5, 1

    Digite um valor

    para a coluna

    A

    i, 1, 10, 1

    j, 1, 5, 1

    O elemento da linha coluna vale

    [, ]

    A

    Percorrendo

    cada colunada linha atual

    Percorrendocada linha da

    matriz

    O exemplo acima bastante simples. Ele apenas popula uma matriz com informaessolicitadas ao usurio e, em seguida, escreve na tela os valores armazenados na matriz.

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    68/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    69/144

    69

    EstruturasdeDadosHomog

    neas

    Atividades

    1) Crie um algoritmo em pseudocdigo que solicite ao usurio10 valores inteiros, armazenando os dados em um vetor. Em

    seguida, o algoritmo dever percorrer o vetor escrevendona tela os valores armazenados nas posies mpares emandando para a impressora os valores armazenados nasposies pares. Aplique o teste de mesa.

    2) Escreva um algoritmo em pseudocdigo que solicite ao usurio5 valores inteiros e em seguida escreva na tela os valores lidosem ordem inversa (o ltimo valor lido o primeiro a ser escrito natela, e assim por diante). Utilize vetor na sua implementao.

    Voc dever criar 3 verses do algoritmo, cada uma delas uti-lizando uma das estruturas de repetio estudadas. Aplique oteste de mesa.

    3) Crie um algoritmo (pseudocdigo) que solicite ao usuriovalores reais a m de popular uma matriz de 3 linhas e 7 colu-nas. Em seguida os valores lidos devem ser enviados para aimpressora, juntamente com a indicao da posio em queocupavam na matriz.

    4) Considerando uma turma com 30 alunos, crie um algoritmoem pseudocdigo para calcular a mdia de todos os alunos,sabendo que cada aluno possui duas notas. Ao nal, enviepara a impressora os nomes dos alunos com suas respectivasmdias.

    5) Desenvolva um algoritmo capaz de realizar as seguintesatividades:

    a. Armazenar o nome de 100 produtos informados pelo usurioem um vetor;

    b. Considerando que existem 3 lojas, solicitar ao usurio o estoqueatual de cada produto em cada uma das lojas, armazenandoestes dados em uma matriz;

    c. Gerar o estoque consolidado de cada produto na rede de lojas,armazenando em outra coluna da matriz;

    d. Considerando que o estoque mnimo de cada produto na redede lojas deve ser de 30 unidades, enviar para a impressora umrelatrio com o nome dos produtos que necessitam ser com-prados e o estoque atual destes produtos.

    Pense na forma mais eciente de resolver o problema.

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    70/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    71/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    72/144

    g

    q

    72

    Agora, ao realizarmos uma nova comparao, percebemos que os elementos devem sertrocados de lugar, pois na ordem alfabtica,Argentinavem antes de Brasil:

    ndice 1 2 3 4 5

    Elemento Argentina Paraguai Brasil Uruguai Chile

    IR

    IA

    Avanamos novamente o IA(posio 4) e realizamos nova comparao entre eles:

    ndice 1 2 3 4 5

    Elemento Argentina Paraguai Brasil Uruguai Chile

    IR

    IA

    Como o resultado da comparao acima indicou que no deve haver troca na posio doselementos, apenas avanamos o IAnovamente (posio 5):

    ndice 1 2 3 4 5

    Elemento Argentina Paraguai Brasil Uruguai Chile

    IR

    IA

    Comparando IA e IRverificamos que no necessria a troca. IAchegou ao final dovetor, indicando que o elemento que agora se encontra no IRj est ordenado, por isso o IRdeve avanar para a prxima posio (2). Alm disso, como est iniciando uma nova iterao, oIA inicializado com o valor IR + 1(posio 3):

    ndice 1 2 3 4 5

    Elemento Argentina Paraguai Brasil Uruguai Chile

    IR

    IA

    Seguindo o mesmo processo, percebemos que necessrio trocar Paraguaie Brasildelugar:

    ndice 1 2 3 4 5

    Elemento Argentina Brasil Paraguai Uruguai Chile

    IR

    IA

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    73/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    74/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    75/144

    EstruturasdeDadosHomog

    neas:OrdenaoePesquisa

    75

    O teste de mesa para o algoritmo acima ficaria assim:

    Linha ir ia aux paises[1] paises[2] paises[3] paises[4] paises[5]

    1 Brasil

    2 Brasil Paraguai

    3 Brasil Paraguai Argentina

    4 Brasil Paraguai Argentina Uruguai

    5 Brasil Paraguai Argentina Uruguai Chile

    6 1 Brasil Paraguai Argentina Uruguai Chile

    7 1 2 Brasil Paraguai Argentina Uruguai Chile

    8 1 2 Brasil Paraguai Argentina Uruguai Chile

    7 1 3 Brasil Paraguai Argentina Uruguai Chile

    8 1 3 Brasil Paraguai Argentina Uruguai Chile

    9 1 3 Brasil Brasil Paraguai Argentina Uruguai Chile

    10 1 3 Brasil Argentina Paraguai Argentina Uruguai Chile

    11 1 3 Brasil Argentina Paraguai Brasil Uruguai Chile

    7 1 4 Brasil Argentina Paraguai Brasil Uruguai Chile

    8 1 4 Brasil Argentina Paraguai Brasil Uruguai Chile

    7 1 5 Brasil Argentina Paraguai Brasil Uruguai Chile8 1 5 Brasil Argentina Paraguai Brasil Uruguai Chile

    6 2 5 Brasil Argentina Paraguai Brasil Uruguai Chile

    7 2 3 Brasil Argentina Paraguai Brasil Uruguai Chile

    8 2 3 Brasil Argentina Paraguai Brasil Uruguai Chile

    9 2 3 Paraguai Argentina Paraguai Brasil Uruguai Chile

    10 2 3 Paraguai Argentina Brasil Brasil Uruguai Chile

    11 2 3 Paraguai Argentina Brasil Paraguai Uruguai Chile

    7 2 4 Paraguai Argentina Brasil Paraguai Uruguai Chile

    8 2 4 Paraguai Argentina Brasil Paraguai Uruguai Chile

    7 2 5 Paraguai Argentina Brasil Paraguai Uruguai Chile

    8 2 5 Paraguai Argentina Brasil Paraguai Uruguai Chile6 3 5 Paraguai Argentina Brasil Paraguai Uruguai Chile

    7 3 4 Paraguai Argentina Brasil Paraguai Uruguai Chile

    8 3 4 Paraguai Argentina Brasil Paraguai Uruguai Chile

    7 3 5 Paraguai Argentina Brasil Paraguai Uruguai Chile

    8 3 5 Paraguai Argentina Brasil Paraguai Uruguai Chile

    9 3 5 Paraguai Argentina Brasil Paraguai Uruguai Chile

    10 3 5 Paraguai Argentina Brasil Chile Uruguai Chile

    11 3 5 Paraguai Argentina Brasil Chile Uruguai Paraguai

    6 4 5 Paraguai Argentina Brasil Chile Uruguai Paraguai

    7 4 5 Paraguai Argentina Brasil Chile Uruguai Paraguai

    8 4 5 Paraguai Argentina Brasil Chile Uruguai Paraguai

    9 4 5 Uruguai Argentina Brasil Chile Uruguai Paraguai

    10 4 5 Uruguai Argentina Brasil Chile Paraguai Paraguai

    11 4 5 Uruguai Argentina Brasil Chile Paraguai Uruguai

    Obs.: Para facilitar a leitura do teste de mesa, em cada passo foi colocado em azul o valorda varivel que sofreu alterao.

    Apesar de atingir satisfatoriamente seu objetivo na ordenao de vetores, o mtodoBubbleSortno aconselhado para grandes volumes de dados, pois o fato de percorrer o vetor diversas

    vezes para realizar a ordenao compromete suaperformance.

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    76/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    77/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    78/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    79/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    80/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    81/144

    EstruturasdeDadosHomog

    neas:OrdenaoePesquisa

    81

    ocupe no vetor. Aperformancedo mtodo sequencial, por outro lado, cai drasticamente quandoo elemento pesquisado ocupa uma posio mais avanada no vetor. Alm disso, a diferena deperformanceentre os mtodos binrio e sequencial aumenta conforme utilizam-se vetores cadavez maiores.

    Veja o algoritmo de pesquisa binria representado em pseudocdigo:

    010203

    04

    0506

    070809101112

    131415

    161718192021222324

    2526

    27282930

    {Pesquisa binria}Algoritmo ExemploPesqBinariaVariveis valores : Vetor[1..8] de Inteiro; ir, ia, aux : Inteiro; {usados na ordenao} ii, if, it, itemPesq : Inteiro; {usados na pesquisa} achou : Lgico;Incio Para posAtual De 1 At 8 Passo 1 Faa Escreva(Digite um valor inteiro para a posio + posAtual); Leia(valores[posAtual]);

    Fim_Para

    Escreva(Digite o valor que deseja pesquisar:); Leia(itemPesq);

    Para ir De 1 At 7 Passo 1 Faa Para ia De ir+1 At 8 Passo 1 Faa Se(valores[ir] > valores[ia]) Ento aux := valores[ir]; valores[ir] := valores[ia]; valores[ia] := aux;

    Fim_Se Fim_Para Fim_Para

    achou := F; ii := 1; {ndice inicial} if := 8; {ndice nal}

    Enquanto((ii itemPesq) Ento {descarta da pesquisa os elementos da direita, at it} if := it 1; Seno {descarta da pesquisa os elementos da esquerda, at it} ii := it + 1; Fim_Se Fim_Se Fim_Enquanto

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    82/144

    g

    q

    82

    3132

    3334

    35

    Se(achou = V) Ento Escreva(O valor + itemPesquisa +

    foi encontrado na posio + it); Seno Escreva(O valor + itemPesquisa +

    no foi encontrado no vetor); Fim_Se

    Fim

    O algoritmo acima realiza a leitura de 8 valores inteiros, armazenando-os em um vetor(linhas 1 a 4) e solicita a entrada de um valor a ser pesquisado (linhas 5 e 6). Entre as linhas 7 e15, realizada a ordenao do vetor. A pesquisa binria realizada entre as linhas 16 e 30, e entreas linhas 31 e 35 apresentado o resultado da pesquisa ao usurio.

    Veja um teste de mesa realizado com os dados do exemplo anterior:

    11 18 31 50 72 89 91 99

    O valor a ser pesquisado 89.

    Vamos executar o teste de mesa apenas no trecho onde ocorre a pesquisa binria e apre-sentao do resultado (linhas 16 a 35). Como os elementos do vetor no sofrem alterao devalor ao longo da execuo do algoritmo, podemos represent-los em uma tabela parte:

    Valores

    valores[1]

    valores[2]

    valores[3]

    valores[4]

    valores[5]

    valores[6]

    valores[7]

    valores[8]

    11 18 31 50 72 89 91 99

    A execuo do teste de mesa do algoritmo com estes valores ficaria da seguinte forma:

    Linha ii if it itemPesquisa Achou

    16 89 F

    17 1 89 F

    18 1 8 89 F

    19 1 8 89 F

    20 1 8 4 89 F

    21 1 8 4 89 F

    23 1 8 4 89 F

    24 1 8 4 89 F

    26 1 8 4 89 F

    27 5 8 4 89 F

    19 5 8 4 89 F

    20 5 8 6 89 F

    21 5 8 6 89 F

    22 5 8 6 89 V

    19 5 8 6 89 V

    31 5 8 6 89 V

    32 Sada em tela: O valor 89 foi encontrado na posio 6

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    83/144

    EstruturasdeDadosHomog

    neas:OrdenaoePesquisa

    83

    Atividades Os algoritmos criados nos exerccios a seguir devem ser todos

    representados em pseudocdigo.

    1) Crie um algoritmo que solicite ao usurio 10 valores inteiros,armazenando-os em um vetor. Em seguida, o vetor deve serordenado e os valores exibidos na tela em ordem crescente.

    2) Construa um algoritmo que leia o nome de 20 pessoas e depoisos imprima em ordem decrescente.

    3) Crie um algoritmo que leia 15 valores reais, guardando-os emum vetor e, em seguida, realize uma pesquisa exaustiva no

    vetor com um novo valor informado pelo usurio.

    4) Crie um algoritmo que solicite o nome de 10 alunos, armaze-nando-os em um vetor. Em seguida deve ser realizada umapesquisa sequencial com um nome informado pelo usurio.

    5) Crie um algoritmo que solicite o nome de 20 produtos. Emseguida, o algoritmo deve solicitar o nome do produto a serpesquisado e escrever na tela a posio em que ele se encon-tra no vetor. A pesquisa deve ser feita utilizando o mtodo

    binrio.

    6) Considerando a necessidade de comparar o consumo decombustvel de 10 veculos, crie um algoritmo que realize asseguintes atividades:

    a. Solicite o modelo do veculo e a quantidade de quilmetrosque ele capaz de rodar com um litro de gasolina;

    b. Gere uma mdia de consumo entre todos os carros e exibana tela;

    c. Contabilize quantos veculos consomem menos do que amdia geral e exiba esta informao na tela;

    d. Gere um rankingde consumo, comeando pelo veculo maiseconmico at o que mais consome combustvel;

    e. Envie para a impressora o rankinggerado;

    f. Permita que o usurio informe o nome de um veculo para saberque posio ele ocupa noranking, e qual sua diferena de con-sumo para o carro mais econmico. Em seguida pergunte se ousurio deseja consultar outro veculo (considerar 0 para sair e

    1 para nova consulta).

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    84/144

    g

    84

    107

    Estruturas de DadosHeterogneas

    Ao contrrio das estruturas homogneas, que permitem armazenar apenas elementos deum mesmo tipo de dado, as estruturas de dados heterogneasso capazes de guardar dife-

    rentes tipos de dados em uma mesma estrutura.Imagine que tenhamos de ler e manipular os seguintes dados:

    Nome Produto

    (tipo Caractere)

    Preo Custo

    (tipo Real)

    Preo Venda

    (tipo Real)

    Estoque

    (tipo Inteiro)Mouse ptico 27,00 36,25 8

    Teclado ABNT 22,79 29,00 14

    Modem ADSL 53,50 71,00 6

    Speaker 14,90 19,90 4

    Estabilizador 37,20 52,50 15

    Com os recursos que vimos at agora, a melhor opo seria armazenar estas informa-es em quatro vetores ou dois vetores e uma matriz, porque tanto vetores quanto matrizes spodem armazenar elementos que sejam do mesmo tipo de dado.

    Para atender a este tipo de demanda, foram criadas as estruturas de dados heterogneas,que so representadas por um tipo de estrutura chamada Registro.

    RegistrosOs registrospermitem agrupar as informaes referentes a uma mesma entidade (umaluno, um produto, etc.) em uma mesma estrutura. Com os registros, ao invs de termos asinformaes referentes a um determinado elemento espalhadas em vrios vetores/matrizes,podemos ter todas elas agrupadas em um s lugar. Seria como se cada produto acima fosserepresentado assim:

    Nome Mouse ptico

    Preo Custo 27,00

    Preo Venda 36,25

    Estoque 8

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    85/144

    85

    EstruturasdeDadosHeterogneas

    Podemos entender um registro como sendo um conjunto de variveis que armazenaminformaes relacionadas. importante voc lembrar que um registro deve ser utilizado pararepresentar uma entidade ou parte dela. Embora seja possvel a criao de registros para arma-zenar dados no relacionados, isso totalmente desaconselhvel, pois vai contra o seu propsitoe, ao invs de melhorar, ir piorar a organizao dos dados.

    As variveis que compem os registros so chamadas de campos. Deste modo, correto

    afirmar que o registro representado acima possui quatro campos.

    Em termos conceituais, os registros so tipos de dados compostos definidos pelo progra-mador. Isto significa que, antes que possamos utilizar um registro, este precisa ser definido.

    Pense no registro como um novo tipo de dado que voc est criando. A primeira coisa afazer definir o tipo, para que, posteriormente, seja possvel declarar elementos deste novo tipo.

    DenioA definio de um registro a etapa em que iremos montar sua estrutura, indicando quaisinformaes o registro dever ser capaz de armazenar. Pense na definio do registro como ummolde para criar registros daquele tipo. Esta definio realizada em um bloco prprio, cha-mado Tipos, que deve estar antes do bloco de declarao de variveis.

    No pseudocdigo, a definio de registros segue a seguinte sintaxe:

    : Registro

    Fim_Registro

    Exemplo:

    {Denio de registro}

    Tipos

    RegAluno : Registro

    nome : Caractere;

    nota1 : Real; nota2 : Real;

    Fim_Registro

    Para facilitar a identificao dos registros, iremos adotar como padro definir todos osregistros com o prefixo Reg.

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    86/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    87/144

    87

    EstruturasdeDadosHeterogneas

    01

    02

    03

    04

    05

    06

    07

    08

    09

    10

    11

    12

    13

    14

    15

    16

    17

    18

    Variveis

    aluno1 : RegAluno;

    aluno2 : RegAluno;

    mediaTemp : Real;

    Incio

    Escreva(Informe o nome do aluno 1);

    Leia(aluno1.nome);

    Escreva(Informe a nota 1 do aluno 1);

    Leia(aluno1.nota1);

    Escreva(Informe a nota 2 do aluno 1);

    Leia(aluno1.nota2);

    Escreva(Informe o nome do aluno 2);

    Leia(aluno2.nome);

    Escreva(Informe a nota 1 do aluno 2);

    Leia(aluno2.nota1);

    Escreva(Informe a nota 2 do aluno 2);

    Leia(aluno2.nota2);

    Imprima(O nome do aluno 1 + aluno1.nome);

    mediaTemp := (aluno1.nota1 + aluno1.nota2) /2;

    Imprima(A mdia do aluno 1 + mediaTemp);

    Imprima(O nome do aluno 2 + aluno2.nome);

    mediaTemp := (aluno2.nota1 + aluno2.nota2) /2;

    Imprima(A mdia do aluno 2 + mediaTemp);

    Fim

    O algoritmo acima define um registro capaz de armazenar os dados de um aluno (blocoTipos). Em seguida, no bloco Variveis, declara dois registros do tipo definido. No corpodo algoritmo, solicitado ao usurio a entrada dos dados de cada aluno (linhas 1 a 12), e asinformaes so armazenadas nos registros. Por fim, os dados dos alunos so enviados para aimpressora (linhas 13 a 18).

    Este um exemplo bastante simples, que serve para ilustrar apenas um uso bsico dosregistros. Em aplicaes do mundo real, os registros muitas vezes so utilizados para trabalhar

    com volumes maiores de dados.

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    88/144

    g

    88

    Mas, por exemplo, se a turma tiver 40 alunos, teramos que declarar 40 registros? No.E voc j conhece a resposta para atender a esta demanda. Anteriormente, ns estudamos umaestrutura de dados capaz de armazenar um conjunto de elementos de mesmo tipo, lembra?Estamos falando dos vetores. Como um registro um tipo de dado, ele pode ser armazenadoem vetores. Ento, para atender demanda dos 40 alunos, bastaria criarmos um vetor contendo40 registros do tipo RegAluno. Veja:

    01

    02

    03

    04

    05

    06

    07

    08

    09

    10

    1112

    13

    {Exemplo com vetor de registros}

    Algoritmo ExemploRegistros2

    Tipos

    RegAluno : Registro

    nome : Caractere;

    nota1 : Real;

    nota2 : Real;

    Fim_Registro

    Variveis alunos : Vetor[1..40] De RegAluno;

    mediaTemp : Real;

    cont : Inteiro;

    Incio

    Para cont De 1 At 40 Passo 1 Faa

    Escreva(Informe o nome do aluno + cont);

    Leia(alunos[cont].nome);

    Escreva(Informe a nota 1 do aluno + cont);

    Leia(alunos[cont].nota1);

    Escreva(Informe a nota 2 do aluno + cont);

    Leia(alunos[cont].nota2);

    Fim_Para

    Para cont De 1 At 40 Passo 1 Faa

    Imprima(O nome do aluno + cont + +

    alunos[cont].nome);

    mediaTemp := (alunos[cont].nota1 + alunos[cont].nota2) /2; Imprima(A mdia do aluno + cont + + mediaTemp);

    Fim_Para

    Fim

    O algoritmo acima declara um vetor com 40 registros e, entre as linhas 1 e 8, popula ovetor com dados solicitados ao usurio. Depois, entre as linhas 9 e 13, imprimem-se os nomese as mdias de todos os alunos. A utilizao de vetores de registros permite a criao de algorit-

    mos mais enxutos, simples e funcionais.

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    89/144

    89

    EstruturasdeDadosHeterogneas

    Veja este algoritmo representado em fluxograma:

    Incio

    Fim

    Informe o nomedo aluno

    cont, 1,

    40, 1

    alunos[cont].nome

    Informe a nota 1do aluno

    alunos[cont].nota1

    Informe a nota 2do aluno

    alunos[cont].nota2

    A

    O nome do aluno [].

    cont, 1,40, 1

    A

    mediaTemp :=(alunos[cont].nota1 +alunos[cont].nota2) /2

    A mdia do aluno

    A definio de registros no representada nos fluxogramas. E assim como acontece emrelao s variveis e estruturas homogneas, a declarao de registros tambm no deve serrepresentada.

    Com relao estrutura dos registros, existe outra possibilidade que ainda no explora-mos: a criao de registros contendo vetores. Esta uma opo interessante para determinadostipos de implementao, pois mantm a estrutura dos dados bem organizada, ao mesmo tempoem que facilita a atribuio/leitura de valores por meio de loops.

    Imagine que tenhamos de armazenar os nmeros sorteados em cada um dos ltimos dezconcursos da Mega-Sena. Teremos, ento, um vetor de registros em que cada registro ter onmero do concurso, a data do sorteio e um vetor com os seis nmeros sorteados.

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    90/144

    g

    90

    Veja como ficaria um algoritmo para atender a esta demanda:

    01

    02

    03

    04

    05

    06

    07

    08

    09

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    {Exemplo com vetor de registros, em que cada registro tem um vetor}

    Algoritmo ExemploRegistros1

    Tipos

    RegConcurso : Registro

    numero : Inteiro; data : Caractere;

    numeros : Vetor[1..6] De Inteiro;

    Fim_Registro

    Variveis

    concursos : Vetor[1..10] De RegConcurso;

    cont, conNum : Inteiro;

    Incio

    Escreva(Informe os dados dos ltimos 10 concursos

    da megasena);

    Para cont De 1 At 10 Passo 1 Faa

    Escreva(Informe o numero do concurso + cont);

    Leia(concursos[cont].numero);

    Escreva(Informe a data do concurso + cont);

    Leia(concursos[cont].data);

    Para contNum de 1 at 6 Passo 1 Faa

    Escreva(Informe o nmero + contNum);

    Leia(concursos[cont].numeros[contNum]);

    Fim_Para

    Fim_Para

    Imprima(Relao dos nmeros sorteados nos ltimos

    10 concursos da megasena);

    Para cont De 1 At 10 Passo 1 Faa

    Imprima(Numero do concurso: + concursos[cont].numero);

    Imprima(Data do concurso + concursos[cont].data);

    Imprima(Nmeros sorteados: );

    Para contNum de 1 at 6 Passo 1 Faa

    Escreva([ + concursos[cont].numeros[contNum] + ]);

    Fim_Para

    Fim_Para

    Fim

    Assim, criamos um algoritmo que manipula um vetor de registros, onde cada registropossui outro vetor dentro de si. Preste ateno nas linhas 9 e 18, cujos dados dos vetores inter-nos de cada registro so atribudos e lidos, respectivamente.

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    91/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    92/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    93/144

    93

    Sub-rotinas

    Um dos princpios do paradigma cientfico cartesiano diz que um problemagrande pode ser resolvido de forma mais fcil se for subdividido em vrios pro-blemas pequenos. Esta a ideia por trs das sub-rotinas. Ao invs de termos umalgoritmo enorme, cheio de estruturas de seleo e repetio, podemos quebr-loem vrios pedaos, gerando sub-rotinas responsveis por determinadas tarefasque fazem parte da resoluo do problema. Assim, podemos pensar na lgica

    necessria para resolver cada um dos pequenos problemas, esquecendo-nos tem-porariamente do todo, enquanto nos focamos na tarefa que uma determinadasub-rotina dever executar.

    O uso de sub-rotinas permite modularizar os algoritmos, de modo que osconjuntos de instrues responsveis por determinadas tarefas estejam estruturadosde forma mais organizada, facilitando seu entendimento e manuteno. Alm disso,aumentamos a possibilidade de reutilizao das solues implementadas.

    Existem dois tipos de sub-rotinas: os Procedimentose as Funes.

    ProcedimentosO procedimento, tambm chamado de Proc, um tipo de sub-rotina

    comumente utilizada para agrupar instrues relacionadas a uma determinada ati-vidade. Um dos usos frequentes dos procedimentos consiste em realizar a interaocom o usurio os comandos Leia, Imprima e Escrevapodem ser implemen-tados dentro de procedimentos. Isso torna a leitura do algoritmo mais agradvel

    e, ao mesmo tempo, encapsula cada uma das atividades em blocos de instruesespecializadas em resolver uma parte do problema. Isto facilita o reaproveitamentode solues entre os algoritmos, pois uma vez que j existe uma sub-rotina capazde resolver uma determinada parte de um problema, basta copi-la para outro algo-ritmo e utiliz-la.

    Um procedimento declarado em um bloco prprio, com incio e fimdemarcados. Dentro deste bloco insere-se o conjunto de comandos relacionados atividade para a qual o procedimento foi criado. A declarao de procedimentosdeve ser realizada aps o bloco de variveis e antes do demarcador de incio do

    corpo principal do algoritmo. O corpo principal do algoritmo o ltimo segmentoa ser declarado e por onde se inicia a execuo do algoritmo.

    O padro de declarao de procedimentos em pseudocdigo segue aseguinte sintaxe:

    Procedimento ()

    Incio

    Fim_Procedimento

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    94/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    95/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    96/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    97/144

    97

    Sub-rotinas

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    61

    62

    63

    64

    65

    66

    67

    68

    69

    70

    71

    Procedimento GerarRelatorioHonorarios()

    Incio

    OrdenarFuncionariosPorCargo(); {solicita a ordenao do vetor}

    Para cont De 1 At 50 Passo 1 Faa

    Imprima(- - - - - - - - - - - - - - - - - - - - - -);

    Imprima(Funcionrio: + funcionario[cont].nome);

    Imprima(Cargo: + funcionario[cont].cargo);

    Imprima(Salrio: + funcionario[cont].salario);

    Imprima(Bonicao: + funcionario[cont].bonicacao);

    totalTemp := funcionario[cont].salario +

    funcionario[cont].bonicacao;

    Imprima(Total a Receber: + totalTemp);

    Fim_Para

    Imprima(- - - - - - - - - - - - - - - - - - - - - -);

    Escreva(O Relatrio de Honorrios foi enviado

    para a impressora);

    Fim_Procedimento

    Incio

    LerFuncionarios();

    GerarBonicacao();

    GerarRelatorioHonorarios();

    Escreva(Fim de execuo);

    Fim

    Neste exemplo, utilizamos vrios dos recursos que estudamos at o momento:

    Para armazenar os dados dos funcionrios, foi utilizado um vetor de registros, decla-rado na linha 10, utilizando a definio de registro realizada entre as linhas 3 e 8.

    Entre as linhas 14 e 26, foi declarado o procedimento responsvel por realizar a leiturados dados dos funcionrios.

    A ordenao do vetor foi implementada em um procedimento declarado entre as linhas

    27 e 38, o qual posteriormente chamado a partir de outro procedimento.

    Foi criado um procedimento para realizar o clculo da bonificao dos funcionrios(linhas 39 a 50), considerando algumas regras comentadas no prprio algoritmo. Vejaque a insero de comentrios nos algoritmos ajuda a esclarecer as chamadas regrasde negcio, ou seja, aquelas regras que so consideradas na implementao do algo-ritmo para atender s necessidades dos usurios do sistema. Muitas vezes, estas regrasno sero claras para quem estiver lendo um algoritmo escrito por outra pessoa, porisso os comentrios so importantes nestes casos. Lembre, uma regra que bvia paravoc pode no ser para outra pessoa.

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    98/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    99/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    100/144

    100

    A representao de chamada a uma funo no realizada por meio de uma figura espec-fica, sendo que a representao depende da forma como o retorno da funo utilizado.Quando o retorno atribudo a uma varivel, utiliza-se a figura Processamento; jquando o resultado enviado para a tela, utiliza-se a figuraVdeo; e assim por diante,sempre com a chamada funo aparecendo dentro da figura. Exemplo:

    maiorNota := PesquisarMaiorNota()

    ...

    ...

    ...

    ...

    A mdia geral da turma :

    Vejamos outro exemplo de algoritmo utilizando funes:

    01

    02

    03

    04

    05

    06

    07

    08

    09

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    {Exemplo funes 2}

    Algoritmo ExemploFuncoes2

    Tipos

    RegAluno : Registro

    nome : Caractere;

    nota1, nota2, media : Real;

    Fim_Registro

    Variveis

    alunos : Vetor[1..40] De RegAluno;

    notasTemp : Real;

    cont, qtdeAprovados : Inteiro;

    Procedimento LerAlunos()

    Incio

    Escreva(Informe os dados dos alunos);

    Para cont De 1 At 40 Passo 1 Faa

    Escreva(Informe o nome do aluno + cont);

    Leia(alunos[cont].nome);

    Escreva(Informe a nota 1:);

    Leia(alunos[cont].nota1);

    Escreva(Informe a nota 2:);

    Leia(alunos[cont].nota2);

    alunos[cont].media :=

    (alunos[cont].nota1 + alunos[cont].nota2) / 2;

    Fim_Para

    Fim_Procedimento

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    101/144

    101

    Sub-rotinas

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    4041

    42

    43

    44

    45

    46

    Funo CalcularMediaGeral() : Real

    Incio

    notasTemp := 0;

    Para cont De 1 At 40 Passo 1 Faa

    notasTemp := notasTemp + alunos[cont].media

    Fim_Para

    CalcularMediaGeral := notasTemp / 40;

    Fim_Funo

    Funo ContarAprovados() : Real

    Incio

    qtdeAprovados := 0;

    Para cont De 1 At 40 Passo 1 Faa

    Se(alunos[cont].media >= 7) Ento

    qtdeAprovados := qtdeAprovados + 1

    Fim_Se

    Fim_Para

    ContarAprovados := qtdeAprovados;Fim_Funo

    Incio

    LerAlunos();

    Escreva(A mdia geral da turma : CalcularMediaGeral());

    Escreva(A quantidade de alunos aprovados na turma :

    + ContarAprovados());

    Fim

    O exemplo acima utiliza um vetor de registros para armazenar os dados dos alunos deuma turma. Os dados so lidos por um procedimento (declarado entre as linhas 11 e 23), poisno h necessidade de um valor de retorno. Entre as linhas 24 e 31, foi declarada uma funoresponsvel por calcular a mdia geral da turma, sendo esta funo chamada na linha 44, demodo a enviar o valor de retorno diretamente para a tela. Entre as linhas 32 e 41, foi declaradauma funo capaz de contar a quantidade de alunos aprovados. Esta funo, por sua vez, cha-mada na linha 45, onde o valor de retorno tambm enviado para a tela.

    Escopo de VariveisO escopode uma varivel diz respeito rea do programa cuja varivel ir existir. a

    definio de sua criao e visibilidade dentro do programa.

    Quanto ao escopo, as variveis se dividem em: Variveis Globais e Variveis Locais.

    Variveis GlobaisAs variveis utilizadas nos exemplos anteriores foram declaradas no nvel do algoritmo

    (ou no nvel do programa) e, por isso, so chamadas de variveis globais. Elas esto acessveisem qualquer ponto do algoritmo, e dentro de todas as sub-rotinas. Alm disso, so criadas noincio da execuo do algoritmo e s sero destrudas quando o algoritmo for finalizado.

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    102/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    103/144

    103

    Sub-rotinas

    Veja que, no bloco de declarao de variveis globais, so decla-radas as variveis valorA e valorB, enquanto que, dentro da funoEscreverVarLocal, so declaradas as variveisvalorBevalorC. Ento:

    valorAest disponvel em qualquer lugar do algoritmo;

    valorB global estar disponvel em qualquer lugar do algoritmo,

    exceto na funo EscreverVarLocal, pois nesta existe uma varivellocal com o mesmo nome;

    valorB local estar disponvel apenas dentro da funoEscreverVarLocal;

    valorC estar disponvel apenas dentro da funoEscreverVarLocal;

    Quando no corpo principal do algoritmo, escrevemos na tela o valorda varivel valorB, acessamos a varivel valorB global (linhas 15 e 17).

    Entretanto, quando dentro da funo EscreveVarLocal, atribumos e escreve-mos a varivelvalorB, estamos acessando a varivelvalorBlocal (linhas 8 e 9).Alm disso, o comando da linha 18 gerar um erro, pois a varivelvalorCsexiste dentro do escopo da funo EscreveVarLocal.

    A utilizao de variveis locais pode trazer vrios benefcios, entre eleso de reduzir o nmero de variveis globais, tornando o programa mais limpo.Alm disso, em termos de manuteno bastante desagradvel ter que ficarpesquisando onde uma varivel global utilizada antes de ter certeza de quese pode alter-la sem comprometer o funcionamento do programa. Quando

    as variveis que so utilizadas de forma temporria para a execuo de umasub-rotina so declaradas dentro de sua estrutura, tudo fica mais fcil deentender e de fazer manuteno.

    uma boa prtica evitar a declarao de variveisglobais que so utilizadas apenas por uma sub-rotina.O ideal denir como globais apenas as variveis quesejam teis ao longo da execuo do algoritmo.

    Outra vantagem relacionada ao uso de variveis locais a melhoriado gerenciamento de memria, pois as variveis locais so criadas apenasquando a execuo da sub-rotina iniciada, e so destrudas ao trmino desua execuo.

    Vejamos uma nova verso do algoritmo apresentado anteriormentecomo exemplo, agora fazendo uso de variveis locais dentro das sub-rotinas:

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    104/144

  • 7/26/2019 Livro Logica e Linguagem de Programacao PDF

    105/144

    105

    Sub-rotinas

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    Funo ContarAprovados() : Real

    Variveis

    cont, qtdeAprovados : Inteiro;

    Incio

    qtdeAprovados := 0;

    Para cont De 1 At 40 Passo 1 Faa

    Se(alunos[cont].media >= 7) Ento

    qtdeAprovados := qtdeAprovados + 1