Você está na página 1de 96
emery PAL oe yng OXOETTOT TTS 4 | Lagica Estruturada para Programacéo de Computadores Seja Nosso Parceiro no Combate & Cépia legal ‘A cépia ilegal € crime. Ao efetué-la, 0 infrator estar cometendo um grave erro, que é inibir a producdo de obras literdrias, prejudicando profissionais que serdo atingidos pelo crime praticado. Junte-se a nés nesta corrente contra a pirataria, Diga nao & cépia ilegal. Seu Cadastro é muito importante para Nés ‘Ao preencher e remeter a ficha de cadastro constante no final desta publicagdo, cuja postagem sera paga pela Editora Erica, bastando deposité-la em qualquer caixa de correio, vocé passaré a receber, automaticamente, informacées sobre nossos langamentos em sua area de preferéncia. Conhecendo melhor nossos leitores e suas preferéncias, vamos produzir fitulos que atendam suas necessidades. Obrigado pela sua escolha, Fale Conosco! Eventuais problemas referentes ao contetido deste livro serdio encaminhados cols) respectivols} autorfes} para esclarecimento, excetuondo-se os duvidas que dizem respeito a pacotes de softwares, as quais sugerimos que sejam encami- nhadas aos distribuidores e revendedores desses produtos, que estéo habilitados a prestar todos os esclarecimentos. Os problemas s6 podem ser enviados por: 1. E-mail; producao@erica.com.br 2. Fax: 11) 217.4060 3. Carla: Rua Sdo Gil, 159 - Tatuapé - CEP: 03401-030 - Sao Paulo - SP Invista em voc Visite uma fivraria. Logica Estruturada para Programagio de Computadores | Pr José Augusto N. G. Manzano Ano: 2004 2003 2002 Edigdo: 7654321 Editora Erica Lda, Conselho Editorial: Diretor Editorial Antonio Marco Vicari Cel Diretor Comercial Paulo Roberto Aves Diretor de Publicidad Waldir Jodo Sandhini Editoracdo: Graziela M. L. Goncalves Copa ‘Mauricio de Franca Desenhos: Flévo Eugenio de Lima Revisdo Interna: Reviséo Gramal Coordenagdoe Pedro Paulo V. Herruzo Erica Regina A. Pagano cat Marlene Teresa Santin Alves Revisio: Rosana Arruda da Silva 4 | Logica Esiruturada para Programacéo de Computadores 31> Copyright © 2002 da Editora Erica Ltda, Dados Internacionais de Catalogacao na Publicacéo (CIP) (Camara Brasileira do Livro, SP, Brasil) DEDICATORIA Dedico este trabalho aos amigos, leitores, alunos e as pessoas que dele ) possam vir a fazer um bom aproveitamento. Dedico em especial, com muito ‘Manzano, José Augusto Navarro Garcia, 1965- carinho e amor, & Sandra, minha esposa, e também 4 minha filha Audrey. Légica estruturada para programacdo de computadores / José Augusto N. G. ‘Manzano. - - Sao Paulo: rica, 2001. Bibliografia ISBN: 85-7194-859-3 1. Dados - Estruturas (Ciéncia da computagéo) 2. Logica |. Titulo. 975; c00-005.1 Indices para Catélogo Sistemético: 1. Légica estruturada ; Computadores : Processamento de dados 0085.1 ‘Todos os direitos reservados. Proibida a reproduc foal ou parcial, por qualquer meio ou processo, especialmente por sistemas gréficos, microflmicos,folografics, reprograticos, fonogréticos, video- {rdticos, nlernet, e-books. Vedada a memorizagdo e/ou recuperacéo total ou parcial em qualquer Sistema de processamento de dados e a inclusdo de qualquer parte da obra em qualquer programa luscbernético, Essos proibigées aplicam-se também as caraclerisicas graficas da obra e a sua fedioragdo. A violacdo dos direitos autorais 6 punivel como crime (art. 184 e pardgratos, do Cédigo enol, cf. Lei n® 6.895, de 17.12.80) com pena de prisdo e muita, conjuntamente com busca & ‘opreenstio e indenizacdes diversas farigos 102, 103 paragrato Gnico, 104, 105, 106 e 107 itens 1,2 3 da Len? 9,810, de 19/06/98, Lei dos Direltos Auloris) © Autor e a Editora acrediiam que todas as infornagdes aqui apresentadas esto corretas e podem ser utilzadas para qualquer in lagal.Entretano, ndo existe qualquer garantio, expicita ov implica, de que 0 uso de lis inlormacées conduziré sempre ao resultado desejado. Os nomes de siles © tempresas, porventura mencionades, foram ulllzados apenas pora ilustrar os exemplos, néo tendo vinculo elgum com o lira, née garantindo o sua existéncia nem divulgagdo “Fonte da sabedoria é a polavra de Deus no mais alto dos céus, seus caminhos sdo 05 mandamentos elernos. fc Citi) Editora Erica Ltda. Rua Séo Gil, 159 - Tatuapé CEP: 03401-030 - SGo Paulo - SP Fone: (Il) 295-3066 - Fax: (11) 217-4060 Site: www.erica.com.br Eclesiéstico 15 Logica Estruturada para Programagéo de Computadores | “4 | L6gica Estruturada para Programaco de Computadores 51> AGRADECIMENTOS SOBRE O AUTOR Agradeco ao amigo Antonio Marco Vicari Cipelli, meu editor, pelo apoio que José Augusto N. G. Manzano me da a cada publicacdo que é efetivada. Brasileiro, nascido no Estado de Sdo Paulo, Capital, em 26/04/1965, & professor e mestre. Alva na Grea de Tecnologia da Informacdo (Desenvolvimento e Treinamento] hé mais de dezessete anos. Atualmente exerce a alividade profissional de consultor e professor universitério, ministrando as disciplinas de Estrutura de Dados, Técnicas de Programagao (Lagica - Algoritmos|,Introducao & Microinformé- fico, Linguagem de Programacéo, Engenharia de Software e Tépicos Avancados em Processamento de Dados. Pela Editora Erica possui mais de vinte obras publicadas, Logica Estruturada para Programacao de Computadores | D> “4 | Logica Estruturada para Programacao de Computadores 71> PREFACIO Este trabalho apresenta ao leitor, estudante de programacao de computa- dor, uma das técnicas mais importantes de documentacdo de fluxo de légica Documentar a légica ullizada em um programa de computador é téo importante quanto a planta que é idealizada para a construgao de um edificio Inicialmente (capitulo 1) a obra conceitua alguns pontos considerados impor- fantes e que devem ser estudados com muita atencéo. Na sequiéncia do estudo (capitulo 2) a obra apresenta o conceito de programagéo sequencial com abordagens sobre o processo de entrada, a acdo de processamento e a elapa saida. Neste sentido, opresenta a definigGo de fipos de dados, varidveis, constantes, operadores ariiméticos, operacdes aritméticas e alguns exemplos de oplicacao da teoria estudada. Depois de realizados 0 estudo e a pratica do segundo capitulo, o leitor passa ater contato com estruturas mais complexas da aplicagdo do conceito de logica de programacéo (capitulo 3), Nesta etapa so apresentados os conceitos de tomada de decisdo (simples, composta e encadeado, utlizacdo de operadores relacionais e operadores lagicos. Também séo estudados exemplos de aplicacéo da teoria explanada, No copitulo 4 0 leitor passa a ter contato com a técnica de lacos. Neste sentido apresentam-se as trés formas existentes de executar repeticdes de trechos de cédigo em um programa lenquanio, repita e para). Com a conclusdo do estudo deste capitulo o leitor passa a ter o conhecimento basico necessario para o aprendizado e aplicagao dos capitulos seguintes. 0s capitulos 5 e 6 ensinam a técnica de tratamento de valores armazenados em meméria na forma de matrizes de uma e duas dimensées. Sao vistos varios exemplos de entrada, processamento, saida, ordenacdo, pesquisa sequencial e pesquisa bindria © capitulo 7 complementa 0 conhecimento adquirido nos dois capitulos anteriores com a técnica que possibilita a juncao de dados de tipos diferentes em uma mesma estrutura de fabela. Este capitulo mostra alguns exemplos de manipu- lagdo do contexto apresentado. No capitulo 8 © leitor tem contato com a técnica de modularizagdo de programa, em que é possivel escrever um grande programa em pequenas partes Sao apresentados diversos exemplos com sub-rotinas do tipo procedimento e do tipo funcéo. De forma ampla, a obra disponibiliza no final de cada capitulo uma bateria de exercicios de fixagGo para que os conceitos estudados sejam fixados. Os exercicios devem ser acompanhados pelo seu professor, pois uma caracteristica 4 | Logica Estruturada para Programagéo de Computadores 91> basica desta obra é 0 fato de ter sido concebida para utilizagGo em sala de aula com 0 acompanhamento de um professor especializado no assunto. Espero sinceramente que o leitor (estudante), devidamente orientado pelo seu professor, tenha nesta obra a oporiunidade de ampliar e forfficar 0 conhec mento de légica de programacéo que necesita para ingressar no mercado de trabalho. Vale salientar que nao é pretensdo do autor esgotar o assunto em si com este trabalho, pois é ele de cunho basico. A pretensio é tao somente acender a luz no final do tUnel, para que o caminho possa ser cruzado com maior comodidade. Oautor 3.3.1- Primeiro Exemplo 3.3.2 - Segundo Exemplo 3.3.3 - Terceiro Exemplo 3.3.4 - Quarto Exemplo 3.3.5 - Quinto Exemplo 3.4 - Exercicios de Fixagéo. Capitulo 4 - Lacos de Repeticao. 4.1- Utlizagdo de Lagos de Repeticdo 4.2 - Os Lagos de Repeticao 4.2. Lago Enquanto 4.2.2 -Laco Repita 42.3-Lago Para 4.3 - Exercicios de Aprendizagem (Lacos Predeterminados) 4.3.1- Primeiro Exemplo. 4.3.2 - Segundo Exemplo 4.3.3 - Terceiro Exemplo 4.4 - Exercicios de Aprendizagem (Lagos Indeterminados} 4.4.1 -Primeiro Exemplo 4.4.2 - Segundo Exemplo 4.5 - Exercicios de Fixacdi. Copitulo 5 - Matrizes Unidimensionais 5.1 Tabelas em Meméria 5.2 - Operagées Basicas com Matrizes 5.3 - Exercicios de Aprendizager 5.3.1 - Primeiro Exemplo 5.3.2 - Segundo Exemplo 5.4 - Classificagéio de Elementos Logica Estruturada para Programagao de Computadores | 43 44 45 47 49 51 55 55 56 56 7 58 58 59 él 62 63 63 64 66 69 69 7 73 73 75 76 5.5- Métodos de Pesquisa 5.5.1- Pesquisa Seqiiencial 5.5.2 - Pesquisa Binéria 5.6 - Exercicios de Fixagdio Capitulo 6 - Matrizes Bidimensionais, 6.1- Matrizes com Duas Dimensées. 6.2 - Operacdes com Matrizes de Duas Dimensdes 6.3 - Exercicios de Aprendizagem 6.3.1 - Primeiro Exemplo 6.3.2 - Segundo Exemplo 6.4-- Exercicios de Fixagao Capitulo 7 - Registros. 7.1 - Estrutura de um Registro 7.2 Estrutura de um Registro de Conjuntos 7.3 - Estrutura de um Conjunto de Registros: 7.4 - Exercicios de Aprendizagem 7.4.1 - Primeiro Exemplo 7.4.2 - Segundo Exemplo 7.5 - Exercicios de Fixacao. Copitulo 8 - Sub-Rotinas. 8.1 - Modularidade 8.2 - Método Top-Down 83 - Tipos de Sub-Rotina 8.4 - Sub-Rotinas do Tipo Procedimento. 8.4.1- Exercicios de Aprendizagem 8.4.2 - Estrutura de Controle com Miltipla Escolha, 8.5 - Variaveis Globais e Locais. “4 | Lagica Estruturada para Programacdo de Computadores 84 84 87 93 99 99; 100 102 102 107 no 13 ng née ng qa a] 123 126 129 129 129 131 131 133 138 140 8.5.1 - Escopo de Variaveis. 8.5.2 - Refinamento Sucessivo 143 8.6 - Uso de Parémetros 146 8.6.1 - Pardmetros Formais e Reais, 146 8.6.2 - Passagem de Parémetto por Valor e por Referéncia 147 8.7 - Exercicios de Aprendizagem a7 8.7.1- Primeiro Exemplo 7 8.7.2 - Segundo Exemplo 149 8.8 - Sub-Rotina do Tipo Funcao. 150 8.8.1 - Exercicio de Aprendizagem 153, 8.8.2 - Programa Calculadora 155 8.9 - Exercicios de Fixacéo 158 Apéndice - Exemplos de Codificagéo 163 Indice Remissivo, 73 Logica Estrturada para Programagéo de Computadores | P CAPITULO Introducdo Neste capitulo serd feita uma introducdo basica aos conceitos de resolugéo de problemas baseados nas técnicas de diagrama de quadros e portugués estruturado. Assim sendo, serdo fornecidas algumas informacées sobre a criagéo dos diagramas de quadros baseados no método de Nass/-Shneiderman/Chapin e da definicéo de programas escritos em Program Design Language \nguagem de Projeto de Programacao). 1.1 - Resoluctio de Problemas Computacionais © trabalho de desenvolvimento de programas para computador esta sempre baseado na tarefa de “ensinar” (programar} um computador para que ele possa realizar uma tarefa existente no mundo real, e assim atender és necessida- des dos usuarios de sistemas computacionais. Toda tarefa do mundo real a ser introduzida em um computador, seja um microcomputador, um minicomputador, um maimftame, deve primeiramente ser muito bem entendida por parle do desenvolvedor, esteja ele no papel de um nalista de sistemas (gerente de sistemas de informacéo) ou de um programador. ‘Assim sendo, é de fundamental importancia que haja sempre o melhor enten: dimento possivel da necessidade de um ususrio; caso contrario, 0 profissional de desenvolvimento estaré fadado ao insucesso de seu trabalho. Para 0 auxilio na tarefa de entendimento de problemas computacionais existem varios métodos de trabalho. Um dos mais conhecidos é a pratica de representar graficamente a légica de execucdo do fluxo de um programa por meio de um diagrama (algoritmo grafico}, que pode ser o modelo tradicional, conhecido 4 | Iintrodugdo 15> pelo nome de diagrama de blocos', ou 0 modelo baseado em quadros, conhecido pelos nomes de diagrama de Nassi-Shneiderman (é-se_naci_chinairdemam, ‘diagrama de NS(8-se ene esse\, diagrama de Chapin lé-se chapé). Pelo fato de serem varias as formas de referéncia utlizadas para identificar este tipo de diagrama, seré usada nesta obra a nomenclatura dlagrama de quadros. Apés 0 entendimento do problema e sua devida representacdo gréfica com 0 uso do diagrama de quadros, 0 programa seré codificado em portugués estruturadé (algoritmo descritvol, baseado na técnica de linguagem de projeto de programacéo (ADL - Program Design Languagal. A técnica de projeto de progra- magdo baseada em ADL também @ denominada de pseudocddlgo, metalingua- ‘gem ou portugole caracteriza-se por poder ser escrita em qualquer idioma exis- iente na face da Terra. Esta obra utliza a referéncia portugués estruturado para os poises que uilizam o idioma portugués. De acordo com o exposto, nota-se que a utilzago de algoritmos baseados no alagrama de quadros e no cédigo em portugués esiruturado é uma técnica que faciita a documentagdo gréfica e descritiva da solucdo {raciocinio logico do programador) utlizada para a resolugde adequada do problema computacional apresentado. ‘Segundo VERZELLO (1984), assim como um arquitelo desenha e escreve es- pecificagées para descrever como uma tarefa deve ser efetuada, e um engenheiro desenvolve um esquema detalhado das atividades de construcdo, um especialista ‘em informacao desenvolve um plano que sera comunicado a outros, explicando como o problema de processamento de dados deve ser, ou foi resolvido. Assim sendo, os técnicas de algoritmizacao (grdfica e descritival, alam de servirem de instrumento de documentacdo, servem também de instrumento de ‘apoio a ser utlizado em uma eventual necessidade de consulta futura sobre a estratégia légica uilizada para solucionar um problema computacional, principal- mente em siluagdes em que ocorra a necessidade de fazer manutengao em rofinas de programa escritas hé algum tempo. _Muitos profissionois fazem referéncia a este ipo de dlograma, denominando-o de fluxagrama, Esfe termo 6 empregado um pouce fora de foco, pois fluxograma é uma ferramenta grafica de Uso exclusivo da fase de andlise de sistemas. No que lange @ programacao de computadores do pponto de vista de programaco, 0 lermo mais apropriado & referenciar a forma gratica como Glagrama de bloces ou diagrama de fuxo de programa, Este tipo de confusdo decore da traduedo do fermo er inglés ffowr diagram - diagrama de fiuxo, que acabau sendo referenciado ‘como flxyagrama) propasta por Béhm e Jacopini em 1966, no arlgo “Flow Diagrams, Turing ‘Machines and Languages with Only Two Formation Rules”, publicado na revista “Comunications of the AC. Como @ ferme fluxograma tornou-se de ceria forma insttucionalizado, fica afc muttas vezes evtél, (© programa escrilo em portugués estruturado normalmente nao é compilével em um computador, mas pode ser facimente codificado em uma linguagem de alto nivel como: Pascal, ‘Object Pascal, C, C++, Javascript, Java, ee 4116 Légica Estruturada para Programagdo de Computadores | ‘As formas de representar 0 raciocinio lagico utlizado na resolugéo de um problema no formato grafico (diagrama de quadros) ov formato descriivo (portugués estruturado) podem ser varias, desde que se respeitem sempre as mesmas *regras do jogo’. Isto ocorre porque os programadores pensam e atuam de forma diferenciada, tendo como influéncia em suas solucSes a sua criatividade experiéncias acumuladas durante o tempo que programam, 1.2 - Diagrama de Quadros © diagrama de quadros® (e também 0 diagrama de blocos") é uma ferramenta de representagdo grafica de um determinado algoritmo computacional, utlizada com a finalidade de apresentar uma "“radiografia” (um mapa) do raciocinio légico de um programador. Esse instrumento serve para que 0 programador saiba exatamente 0 que fez depois de um certo tempo do desenvolvimento de umn programa. Serve também para que terceiros saibam exalamente como foi a linha de raciocinio de um determinado programader. Vole citar um fato um fanto hilério. Muitos supostos "profissionais" da érea de Tecnologia da Informacao afirmam que essas formas de representacdo logica no sdo usadas, que ao usar esses mecanismos perde-se tempo. Imagine se um engenheiro, médico, advogado pensasse assim, com cereza a humanidade estaria perdida na mao desses profissionais, De um modo geral, todos os profissionais em suas respectivas areas necessitam, de certa forma, fazer um planejamento de suas alividades, por mais que as conhecam. Qual seria entéo 0 motivo que levou Nassi e Shneiderman a elaborar o conceito da técnica do diagrama de quadros para facilitar 0 trabalho de programacéo? Qual seria o motivo que levou Chapin a intensificar o trabalho de Nassi e Shneiderman? Seré que eles nao tinham nada melhor para fazer em suas vidas? Fica aqui uma questo a ser pensada. © diagrama de quadros foi originalmente desenvolvido por Nassi_ Shneiderman e oficialmente apresentado em agosto de 1973, na publicaco ACM SIGPLAN Notices com o artigo “Flowchart Techniques for Structured Programming Em dezembro de 1974, Ned Chapin, na publicacéio SOFTWARE - PRACTIVE & EXPERIENCE, apresenta 0 seu arligo "New Format for FlowCharts', ampliando os conceitos originariamente apresentados. Por esta razéo se faz referéncia ao dia- grama de quadros com os nomes: 8 O ferme dlagrama de quadros esté de acordo com a forma apresentada por Rager Fressman cobra inttulada Engenharia de Sofware, péginas 456-459, da edicao brasileira publicada pola Editoca Makron Books em 1995, © conceilo de diagrama de blocos 6 explorado na obra Algoniimos - Légica para 0 Desenvolvimento de Programagdo de Computadores, dos autores José Augusto N.C: Manzanoe lay Fquairado de Olvera Eaitora fica 4 | Introdugao wip Diagrama de Nassi-Shneiderman; Diagrama de NS; ‘¢ Diagrama de Chapin ‘A proposta do diagrama de quadros baseia-se na concepcao de progra- magao estruturada, em que se forna inadmissivel 0 uso do conceito da instrugco GOTO {ir para} normalmente existente nas linguagens de segunda geracdo (2GL - Second Generation Languages, mas néo encontradas normalmente em lingua- gens de ferceira geracdo® (36L - Third Generation Languages) Segundo NASSI-SHNEIDERMAN (1974), o métado baseado em quadros permi- te a uilizagdo da ordenacdo de estruturas légicas numa forma mais simples, em que cada esirutura (quadro} representa a idéia de um pensamento completo. Como vantagem do método baseado em diagrama de quadros, hé a obri- gatoriedade de escrever rolinas de programas na forma esiruturada e com 0 menor tamanho possivel. Como desvantagem, esta técnica somente pode ser usada para documentar 0 raciocinio légico utiizado com linguagens de terceira geractio, ou seja, linguagens estruturadas. Originalmente, © método foi desenvolvido para facilitar a diagramacao de légica de programagdo que pudesse ser utlizada com as linguagens PU e ALGOL, como afirmam em seu artigo Nassi e Shneiderman. Este método pode ser utllizado com grande faciidade, integrando-se a linguagens de programacéo, como C, C++, Java, Pascal, Object Pascal, JavaScript e Structure BASIC, porque elas pertencem & categoria de terceira geragéio de linguagens de programacao de computador. 1.3 - Portugués Estruturado © portugués estruturado é uma ferramenta de representacdo textual de um determinado algoritmo computacional. Este método é utiizado com a finalidade de apresentar uma codificacdo simples que seja de facil traducéio para outras linguagens de programacao de computador, que muitas vezes sGo complexas. ‘Alem desta caractetistica, esta técnica pode também ser usada como forma de documentagdo de cédigo de programa A técnica aqui denominada portugués estruturado & baseada na técnica de projeto de programacéo estruturada (PDL - Program Design Languagal, a qual foi Apesar de encontrar 0 concelto€ a instrucéo GOTO em linguagens de terceira geragdo, como Pascal, C e Basic (Visual Basil eles nunca devem ser utlizados. O uso da insirucdo GOTO em programas eseriios em linguagens de tercelca geragdo denota um programador com baixa Experigncia e fraco conhecimento de aplicacdo de logica de programagdo. Portanto, € aconse- Thavel esquecer que este tipo de insirucdo existe. 4/18 Lagica Estruturada para Programagio de Computadores | Pe desenvolvida por Caine e Gordon e apresentada pela primeira vez oficialmente em 1975, na conferéncia nacional de procedimentos computacionais no estado da Califérnia (Estados Unidos da América} com a publicacdo do artigo “PDL - A Tool for Software Design’ junto a AFIPS American Federation of Information Processing Societies} Segundo CAINE & GORDON (1975), a técnica denominada PDL é um conceito de pseudocédigo que uiiiza o vocabulério de um idioma (como inglés) em conjunto com a sintaxe global de_ uma linguagem estruturada utlizada nas linguagens de programacdo de alto nivel. Desia forma, pode-se referenciar a PDL como sendo um cédigo em inglés estruturado. A findlidade da técnica é facilitar a descri¢do textual do cédigo de um programa em uma linguagem mais natural e mais proxima ao entendimento humano, de preferéncia no idioma natal do desenvolvedor. Ao longo destes anos, { técnica apresentada por Caine e Gordon passou a ser aceita por varios profissionais da area de Tecnologia da Informagéo em todo o mundo, “4 |Introducao 91> <| Anotagdes CAPITULO Seqiéncia Este capitulo apresenta os detalhes para a criacdo de programas sequen- ——————_—_——— a a ciais, Serdo estudados os conceitos de tipos de dados, varidveis, constantes, operadores aritméticos, expresses ariiméticas, entrada, processamento, soida, diagrama de quadros com seqUéncia e cédigo em porlugués estruturado para aad representacao de sequiéncia. Tipos de Dados Primitivos Os dados primitivos a serem manipulados em um computador sdo repre- — sentados pelos elementos basicos 0 serem tratados [processados} que sdo representados por trés tipos de dados \tipos primitivos): dados numeéricos finteiros reais], dados caracteres e dados logicos: ¢ Dados primitives numéricos inteiros - caracterizam-se por serem repre- 2 a sentados por valores numéricos inteiros positives ov negativos, ex- cluindo-se qualquer valor numérico real racionério). Exemplos deste tipo a de dado: -7, 2 0, 14, 1000; Seas + Dados primitives numéticos reais - sdo representados por valores - numéricos reais positives, negatives e valores fraciondrios. Exemplos deste tipo de dado: -1, 13, 2, 1000, 500.98; * Dados primitives légicos - sdo representados por valores do tipo ——————— aa verdadeiro e falso, sim e ndo. Este tipo de dado também é conhecido pela identificacdo fjpo booleano. Exemplos: .Falso, .F, Verdadeiro,, V, ‘Sim, 5,-Nao,, .N; ¢ Dados primitives caracteres - caracterizam-se por serem representados por valores delimitados entre parénteses e que contenham letras, numeros e simbolos especiais. Este tipo de dado também 6 conhecido pela identificacéo fio iferal ou tipo string. So exemplos: “I ‘casa’, —_— "5088-8888" "#788" Lagica Estruturada para Programacao de Computadores | Pe 4 | sequéncia 21> 2.2 - Varidveis e Constantes Conceitua-se como varidvel aquilo que é sujeito a variagées, que é incerto, instavel ou inconstante, Os dados manipulados em um computador, sejam eles valores inteiros, valores reais, valores caracteres ou valores légicos, sao na sua maioria também variaveis. Do ponto de vista de programacao de computadores, pode-se considerar que varidvel é a regio de meméria que sera utlizada pelo programa para ‘armazenar um certo tipo de dado por um determinado espaco de tempo. Assim sendo, qualquer valor a ser processado em um computador necessita ser previamente armazenado em uma regido de meméria, denominada variével AAs variéveis definidas na meméria de um computador funcionam como as govetas de um grande arquivo, tendo como caracteristica a peculiaridade que cada gaveta (variével) pode armazenar apenas um valor por vez, seja esse valor um ndmero infeiro, um nimero real, uma seqUéncia de caracteres ou um contetdo logico. Assim como as gavelas de um arquivo sdo identificadas por efiquetas, tom- bém é necessario identificar as variaveis a serem utlizadas em um computador. Desta forma o valor armazenado pode ser ullizado a qualquer momento, pois pode facilmente ser identificado. A figura 2.1 mostra um exemplo de como pode ser considerada a meméria de um computador, segundo a explicacéio explanada onteriormente. Varitvel S = S S Meméria Figura 2.1 - Representagdo gréfica da meméria de um computador. © nome de uma varidvel é utiizado para sua idenfificagéo e posterior uso dentro de um programa. Desta forma, € necessério estabelecer algumas regras para a devida utilizagdo de variaveis dentro de um programa ‘+ Nomes de variaveis podem ser atribuidos com um ou mais caracteres; ¢ 0 primeiro caractere do nome de uma varidvel néo pode ser, em hipdtese alguma, um némero; sempre deve ser uma letra; 4 Onome de uma variavel ndo pode possuir espacos em branco. Caso ne- cessile separar segmentos, ulllze o simbolo"_" (underscore ou underline: Logica Estruturada para Programacdo de Computadores | D> + Nao pode ser nome de uma variével uma palavra reservada a uma instrugdo da linguagem de codificagdio de um programa, # NGo podem ser uiiizados na formacéo de nomes de variveis outros caracteres a néo ser letras, némeros e 0 simbolo underline (ou undescora Uma variével pode exercer dois papéis dentro de um programa. Um papel de acdo, quando é modificada ao longo do processamento de um programa para apresentar um determinado resultado, ov o papel de controle, quando essa varidvel pode estar sendo “vigiada” e controlada durante a execugdo do fluxo de um programa ‘As constantes serdo valores fixos, normalmente encontrados como valores de peso em formulas mateméticas para dar equilibrio ao célculo. Assim sendo, constante é tudo aquilo que é fixo ou estavel. E existirdo varios momentos em que este conceito deverd estar em uso. Por exemplo, o valor 1.23 da formula seguinte € uma constante: RESULTADO = ENTRADA * 1.23. 2.3 - Operadores Aritméticos Com certeza uma das exigéncias de um computador é a execugéo de célculos matematicos. Neste sentido os computadores sdo excelentes. Assim sendo, tanto varidveis como constantes podem ser ullizadas na execugdo de cGlculos matematicos. Os cAlculos mateméticos séo operagdes comandadas por operadores arit- méticos que podem ser clasificados em duas categorias, sendo bindrios ou tunérios. Séo bindrios quando atuam em operacdes de exponenciagiio, multpli- cacdo, diviséo, adicao e subtracdo. Séo unatios quando atuam na inversGo de um valor, atribuindo a ele o sinal positive ou negativo. Veja em seguida a tabela de prioridade matematica existente quando da utlizagéo destes operadores es ee mae T Exponenciagao [inario [2 Inteiro ou real a Divisd [Binario 3 Real + Adigao Binario 4 Inteiro ou real 4 | Seqiiéncia 23|> 2.4 - Expresses Matematicas E muito comum a necessidade de trabalhar com expresses mateméticas, uma vez que a maior parte do trabalho de processamento computacional esté relacionada e envolve a utllzagdo de célculos mateméticos. Tanto que, toda operacéo matemética é sempre considerada um processamento computacional do ponto de vista de programacao. Porém, nem todo 0 processamento computa- cional executado por um computador é uma operacdo matematica As expresses matematicas so definidas pelo relacionamento existente entre varidveis e constantes numéricas com a uflizagéo dos operadores aritméticos. Considere a formula: AREA = r . RAIO® para o célculo da érea de uma circunferéncia, em que esto presentes as varidveis AREA e RAIO, a constante x (pi 3.14159) e os operadores aritméticos de multiplicacdio e também a operactio de poténcia, elevando o valor da variével R4/0 ao quadrado. Assim sendo, a férmula ‘em questao deveria ser definida como: AREA < 3.14159 * RAIO T 2. AAs expressées aritméticas em computagdo sao escritas de uma forma um pouco diferente da matematica, por exemplo, a expressiio X= {43 . [55 : (80+ 2) J} serd escrita na forma computacional como X (43 * (55 / (30+ 2))) Perceba que as chaves e colchetes sdo abolidos, utilizando-se em seu lugar ‘openas os parénteses. E também foi subsfituido nos dois exemplos o sinal (=) igual «@ pelo sinal de (1, 0 qual é referenciado pela nomenclatura implicado ou atribuido. O sinal implicado ou atribuido (+) é uilizado para indicar que o valor de uma expressdo matematica esta sendo armazenado em uma variavel Observe ainda a formula uilizada para calcular a Grea de um triéngulo, em que € necessario efetuar a multiplicacéo da base pela altura e em seguida dividir pela constante 2. Como ficaria? Observe a formula padrdo: BASE. ALTURA AREA = 2 Ela deveria ser escrita como: AREA <— (BASE * ALTURA) / 2. 2.5 Instrug6es Basicas As instruges bésicas sdo representadas pelo conjunto de palavras-chave (vocabulério) de uma determinada linguagem de programagao, que tem por finalidade comandar em um computador 0 seu funcionamento e a forma como os dados armazenados devem ser tratados. 4/24 Logica Esiruturada para Programacao de Computadores | Pe Para a confeccdo deste livro foi adotado 0 conceito portugués esiruturado. Assim sendo, sera utilizado daqui para frente um conjunto de palavras reser- vadas, que néo pode ser usado para alribuir nomes de programas e de varid- veis. As insirucbes basicas em portugués estruturado ulizadas nesta obra sdo: inicio, fim, var, programa, enquanto fim_enquanto, se, enttio, sendo, fim_se, pora, fim_para, escreva, lela, faca, repita, até_que, conjunto, inteiro, real, caractere, I6gico, tipo, registro, fim_registro, procedimento, funciio, caso e fim_caso, 2.6 - Consideragdes Operacionais Para que seja possivel efetuar o trabalho de programacao e a continuidade do estudo desta obra, é necessérro levar em consideragdo alguns detalhes opera- cionais, tois como: + Todo problema computacional a ser resolvido deve ser previomente entendido, passado para a notagdo grdfica na forma de diagrama de quadros para entio ser escrito em cédigo portugues estruturado; 4 Nesta obra toda referéncia feita a uma instrugdo sera escrita em letra mindscula em formato negrito; + Asreferéncias feitas a uma voriével serdo escritas em letra maidscula em formato itélico; 4 Qualquer valor alribuido a uma varidvel sera feito com o simbolo < [seta para esquerdal, tanto no diagrama de quadros quanto em cédigo portugues estruturado, Para que seja criado um programa de computador, devem-se levar em consideracéo trés pontos basicos de trabalho: ¢ entrada de dados; ¢ processamento de dados; + scida de informagées. Todo programa de computador executa de alguma forma estes trés conceitos. Se os dados forem entrados de forma errada, seréio proces-sados de forma errada e resultardo em saidas de informagdes erradas. Uma entrada e uma soida podem ocorrer dentro de um computador de diversas formas. Por exemplo, uma entrada pode ser feita via teclado, modem, leitores licos, disco, entre outros. Uma soida pode ser feita em video, impressora, disco, entre outras formas. Devido a esta grande variedade, os programas deste capitulo foram escritos com as instrucdes lela e escreva para determinarem, 4 |Sequincia 251> respectivamente, as operacées de entrada e scida, Quanto ao processamento, esta sendo referenciado com o simbolo de atribuigdo («-] em varias operacdes de cunho simples. 2.7 - Exercicios de Aprendizagem Com 0 objetivo de colocar em pratica 0 que foi exposto até este momento demonstrar 0 uso do diagrama de quadros e do portugués estruturado, considere ‘como exemplo os problemas computacionais apresentados em seguide: 2.7.1 - Primeiro Exemplo Eloborar um programa de computador que efetve a leitura de dois valores numéricos inteiros, execute a soma dos valores e apresente o resultado obtido, E necessario levar em consideracao que 0 programador sempre estara diante de um problema a ser resolvido. Este problema deve primeiro ser entendido pelo programador para que depois ele consiga colocé-lo dentro de um compu- fador. Desta forma, o segredo de uma boa légica esté na compreensdo adequada do problema a ser solucionado. Com relagéo ao problema proposto, 6 necessario separé-lo dentro dos conceitos de entrada, processamento e sada. Para tanto, observe a estrutura do algoritmo com relacéo ao problema da leitura dos dois valores (que néo séo conhecidos e deve ser representados por varidveis) e sua respeciiva soma (consequéncia dos valores informados, a qual também uma incégnita) Algoritmo 1. Entrada - ler dois valores inteiros, no caso representados pelas varidveis AeB; Processamento - efetuar a soma das varidveis A e B, implicando 0 seu resultado na varidvel R; 3. Saida - apresentar o valor da varidvel R apés a operagdo de soma dos dois valores fornecidos Perceba que 0 algoritmo é a transcrigdo (interpretacéio} passo a passo de um determinado problema, Um algoriimo pode ser feito de varias formas diferentes. Pode ser escrito, pode ser diagramado, pode ser codificado. Légica Estruturada para Programacdo de Computadores | D> Diagrama de Quadros Completada a fase de interpretagéo do problema, passa-se para a fase de diagramacao do algoritmo, que pode ser feita de duas formas: trabalhando com 0 estilo de diagrama de blocos tradicional ou com o diagrama de quadros, que é 0 tema desta obra Programa Soma_Nimeres Leia AB RAB Escreva R Fim Figura 2.2 - Diagrama de quadros com entrada, processamento e soida. Observe que a seqUéncia de comandos é definida em quadros em que sdo indicadas as acdes de cada insirucdo. Observe que as operacdes de entrada e saida sdo indicadas com as insrucées leia e escreva Portugués Estruturado pds definir 0 diagrama de quadros, sera efetuade a fase de codificacéio do programa em porugués estruturado. Esta fase obedece rigidamente (sem nenhuma alleragdo) do que esté definido no diagrama de quadros, pois é ele a representacao grafica da légica do programa a ser codificado. 0 diagrama facilita também a visualizacéo de todas as variéveis que esto em uso. Isto € necessério, pois a maior parte das linguagens estruturadas exige que se reserve espaco de meméria para todas as variaveis existentes dentro do programa. Observe que o exemplo faz uso de trés variaveis (A, Be R), as quais devem ser primeiro relacionadas antes do inicio do programa, para depois ullizé -las no corpo do programa, R, A, B+ inteiro ‘Apés relacionar as voriaveis que serdo utiizadas no programa com a instrugdo var, passa-se para a fase de montagem do que esié estabelecido no diagrama de quadros entre os quadros inicio e fim: 4 |seqiéncia 27|> Observe que 0 bloco de instrugdes de programa, indicado entre as instrugées inicio e fim, 6 apresentado em portugués estruturado deslocado um pouco para a direita. Este estilo de escrita deve ser obedecido, para facilitar a leitura de um bloco de programa, recebendo o nome de indentacdo, infeio lela a leia 2 oncreva R fim, Apés a leitura dos valores para as variveis A e B, eles sero somados e implicados (—) 6 varidvel R, a qual seré apresentada com o valor da soma processada. A seguir, 6 apresentado o programa completo: programa SOUA ingeie deia A leia 2 im Daqui para frente o processo de montagem de um programa fica mais facil basta que o leilor siga as insirucdes anteriores. 2.7.2 - Segundo Exemplo Elaborar um programa de computador que efetue a leitura de dois valores numéricos reais e apresente o resultado da soma dos quadrados dos valores lidos. © perfeito entendimento do problema proposto garante © sucesso na operagéo de programacio. Observe que o problema sugere apresentar o resulta do da soma dos quadrados dos valores lidos. Isto implica que, ao ler cada um dos valores, eles devem ser elevados ao quadrado separadamente para em seguida serem somados e proporcionarem o resultado esperado Algoritmo Entrada - ler dois valores reais, no caso representados pelas variéveis A eB; Légica Esiruturada para Programagdo de Computadores 2. Processamento - efetuar a soma dos quadrados das varidveis A e B, implicando 0 seu resultado na variavel R 3. Saida - apresentar o valor da varidvel R. Diagrama de Quadros Completada a fase de interpretagao do problema, posso-se para a fase de diagramacao do algorimo como apresentada anteriormente, utiizando diagrama de quadros. Programa Soma_Quadrados Inicio lea B ReAT2+B12 EscrevaR Fim Figura 2.3 - Diagrama de quadtos para a soma dos quadrados. Portugués Estruturado programa SOmA_QUADRADOS R, A, Bs reat inicio leia A dete 5 Reataest 2.7.3 - Terceiro Exemplo Elaborar um programa de computador que efetue e apresente o célculo da Grea de um trapézio. Observe que para apresentar o valor da rea de um trapézio, torna-se necessérrio conhecer sua formula de calculo. Neste sentido, a Grea de um trapézio 6 calculada pela soma da base maior com a base menor, multiplicada pela altura, tudo isto dividido por dois I sequéncia 1. Entrada - ler trés valores que representem a base maior varidvel BS_MAIOR], a base menor (variGvel BS_MENOR) e a altura (variavel HI; 2. Processamento - efetuar a soma das varidveis A e B e multiplicé-las pela varidvel H. Na seqUéncia, dividir o célculo anterior por dois e implicar 0 seu resultado na varidvel R 3. Saida - apresentar o valor da varidvel R Diagrama de Quadros Programa Area_Trapézio Lela BS_Maior Lela BS_Menor Leia R « (BS_Malor+BS_Menon@Hy2 Escreva R Fim Figura 2.4 - Diagrama de quadres para o céiculo da érea de um trapézio. Portugués Estruturado programa AREA_TRA R, Bi Leia BS_MATOR Leia BS_MENOR leia # R © ((BS_MAIOR + BS_MENOR) * H) / 2 fim ATOR, BSS A seguir, faca os exercicios da primeira, segunda, terceiro, quarta e quinta baterias (exercicios de fixagdo 1, 2, 3, 4 e 5) para treinar a aplicacdo dos conceitos de fipos de dados e variaveis. Em seguida, faca os exercicios da sexta bateria, (exercicio de fixacdo 6) para treinar 0 uso dos conceitos de entrada, processamento e said 2.8 - Exercicios de Fixacdo 4 | seqiéncia 31> Indique com um X quais dos dados apresentados so do tipo Inteiro, ( }000 ( }0 ( ) 900" (| Verdadeiro, ( ) -456 (34 ( ) "Casa 8” { 10 { ) Falso. (1-156 Indique com um X quais dos dados so do tipo Real. { ) -678 { ) "0.87" { ) 9.12" () Nerdadeiro. (1-456 ( ) -99.8 (| "Cinco* ( ) 45.8976 () False. ( ) 156 Indique com um X quais dos dados seguintes sao do fipo Literal. ) 678 ) 0.87" (e912 (1 *Verdadeiro” (1-456 ( ( ( )-998 6. Desenvolva os algoritmos, diagramas de quadros e codificagdo em por- tuguas estruturado dos seguintes programas: ()"Cineo* core @) Ler uma femperatura em graus Celsius apresenta-la convertida em graus Fahrenheit, A formula de conversdo & F< 9 * C + 160)/5 ( ) also. sendo F a temperatura em Fahrenheit e C a temperatura em Celsius. (1156 b) Ler uma temperatura em graus Fahrenheit e apresenté-la convertida Ps 9 P - a em graus Celsius. A formula de converséio é C < IF - 32) * (5/9) 4, Indique com um X quais dos dados so do tipo Légico. sendo F a temperatura em Fahrenheit e C a temperatura em Celsius. (678 ) Calcular e apresentar 0 valor do volume de uma lata de dleo, ( ) 087" utlizando a formula VOLUME < 3.14159 * RT 2 * ALTURA, ( y*912 4) Efetuar 0 célculo da quantidade de litros de combustivel gasta em uma viagem, utllzando um automével que faz 12 Km por litro, Para (] Verdadeiro. obter 0 célculo, 0 usuario deve fornecer o tempo gasto e a (1-456 velocidade média durante a viagem. Desta forma, sera possivel v obter a distancia percorrida com a formula DISTANCIA — TEMPO * () VELOCIDADE. Tendo o valor da distancia, basta calcular a (1 "Cinco" quantidade de litros de combustivel utiizada na viagem com a aa formula UTROS_USADOS < DISTANCIA / 12. O programa deve ‘opresentar os volores da velocidade média, tempo gaslo na (1F viagem, a distancia percorrida e a quantidade de litros utiizada na (1-156 aoa _ @))) Efetuor o célculo e a apresentacdo do valor de uma prestagdo em 5. Assinale com um X os nomes validos para uma varidvel atraso, utilizando a formula PRESTAGAO «< VALOR + (VALOR * (TAXA () ENDEREGO 00} * TEMPO) { ) 21BRASIL ) Ler dois valores para as variaveis A e B, e efetuar a troca dos valores de forma que a variavel A passe a possvir 0 valor da varidvel Be a {} FONESCOM voridvel B passe a possuir o valor da varidvel A. Apresentar os (-) NOMEUSUARIO valores trocados. (-) NOME_USUARIO 9) ler quatro némeros e apresentar o resultado da adicdo — muliplicagdo, baseando-se na ufllizagio da _ propriedade (|) NOME*USUARIO distributiva, Ou seja, se forem lidas as varidveis A, B, C e D, devem ( )END‘AG ser somadas e mutipicadas A com B, A com C e A com D. Depois B |) cIDADES com C, B com D e por fim C com D. |) scasec fh) Elaborar um programa que calcule e apresente o volume de uma caixa retangular por meio da formula, VOLUME < COMPRIMENTO * LARGURA * ALTURA. j) | Efetuar a leitura de um nimero inteiro e apresentar o resultade do quadrado desse numero. Logica Estruturada para Programagao de Computadores | 4 | sequencia 33> m) n) Ler dois inteiros variaveis Ae B} e imprimir 0 resultado do quadrado da diferenca do primeiro valor pelo segundo. Elaborar um programa que efetue a apresentactio do valor da conversao em real (RS) de um valor lido em dolar (USS). O programa deve solicitar 0 valor da cotagao do délar e também a quantida de délares disponivel com 0 usuario Elaborar um programa que efetue a apresentacde do valor da conversdo em délar (USS) de um valor lido em real (RS). O programa deve solcitar 0 valor da cotagéo do délar e também a quantidade de reais disponivel com 0 usuario. Elaborar um programa que efetue a leitura de trés valores (A, B © C) @ apresente como resultado final a soma dos quadrados dos trés valores lidos. Elaborar um programa que efetue a leitura de trés valores (A, B e C) e apresente como resultado final o quadrado da soma dos trés valores lidos. Logica Estruturada para Programacdo de Computadores | Pe CAPITULO Decisdes Neste capitulo so estudados os conceitos de tomada de deciséo por um programa, SGo apresentados os conceitos de decisto simples, decisdo composta, deciso encadeada, operadores relacionais, operadores légicos, diagrama de quadros com decisdo e cédigo em portugués estruturado. 3.1- Tomada de Decistio © conceito de tomada de decisdo em um computador é um dos procedi- mentos mais importantes. Este conceito esti baseado na caracieristica que um computador possui de tomar decisées em um nivel controlado por condigao, Para que seja necessérrio tomar uma deciséo em um computador, é preciso ter uma condicao. Esta condi¢éo pode retornar uma de duas respostas: sim ou no, verdadeira ou falsa. © fato de uma condicéo ser verdadeira ou falsa permite ao programa executor acées distintos existentes na mesma estrutura légica. Imagine, por exem- plo, um programa que seja usado para calcular a cobranca de um fitulo. ‘Ao verificar a data de vencimento, esse programa pode ou nado efetuar a co- branga de juros sobre o valor do titulo, caso esteja sendo pago apés 0 vencimento (decisGo simples), ov mesmo pode também proporcionar a aplicacéo de um desconto, caso o titulo esteja sendo pago antes do vencimento (decisao compostal ‘A seguir, apresenta-se 0 formato de aplicacdo dos conceitos de decisao sim ples e composta, além de apresentar também o conceito da ullizacao de deciséio encadeada, quando for este o caso. 3.1.1 - Decisdo Simples A deciso do fipo simples caracteriza-se por prever uma acd lagica quando a condigdo é verdadeira. Se a condicio for falsa, néo sera executado absoluta- mente nada. Este tipo de ago é representado na figura 3.1 com seu respectivo 4 | Decisées 35 |p diagrama de quadros e também com a introdugdo dos instrugdes em portugues estruturado se...ento e fim_se. Diagrama de Quadros Observe no diagrama {figura 3.1) a existéncia das letras $ (sim) e N (nao). Pode também ser utilizada a referéncia V (verdadeira) ou F {falsa) em substituig¢do 4s indicagées S$ eN. © cédigo de letra $ esté posicionado para indicar que um determinado quadro de operagées sera ‘executado quando a condicdo atribuida for verda- deira. A tomada de decisdo ocorreré sempre com base em uma determinada condi¢do. Condligto s N Instrugdes executadas para concigso Verddeira Instrugdes a serem executadas para condigaofalsa ou ap6s 2 condigao ser verdadelra Figura 3.1 - Diagrama de quadros para deciséo simples. Portugués Estruturado se () entiio sinstrugSes para condic&o falsa o 3:1.2 - Decistio Composta [A deciséo do tipo composta caracteriza-se por prever uma aco légica quando a condicéo é verdadeira ou uma outra ado lagica quando a condigao & falsa, Este tipo de acdo é representado na figura 3.2 com seu respectivo diagrama de quadros e também com a introdugdo da instrucao em portugués estruturado sendo. 4136 Légica Estuturada pra Programacéo de Computadores | > Diagrama de Quadros Observe no diagrama {figura 3.2) a existéncia das letras $ {sim} e N (ndol. 0 cédigo de letra $ esta posicionado para indicar que um determinado quadro de ‘operacées serd executado quando a condicao for verdadeira, e 0 cédigo de letra Nesta posicionado para indicar que um determinado quadro de operacdes seré executado quando a condicdo for falsa. Observe que neste caso sera executada ‘apenas uma das duas possibilidades. A tomada de decisdo ocorre sempre com base em uma determinada condi¢ao, s Instugtes Instrugbes executadas para condieso rdadelra, para conciggo faisa Instrugdes a serem executadas apés a condigdo ser falsa ou Verdadeira Figura 3.2 - Diagrama de quadros para decisio composto. Portugués Estruturado ge () entio trugSes para \digdo verdadeira> senko instrugSes para condicdo falsa> fimse — ara condicso ou verdadeira> 3.1.3 - Decistio Encadeada A deciséo do tipo encadeada caracteriza-se por prever uma acéo légica quando ocorre a necessidade de estabelecer uma verificacdo légica em uma seqéncia de condicdes sucessivas. Desta forma, uma determinada aco pode ser executada se um conjunto anterior de instrucdes ou condigées for satisfeito. Este tipo de’estrutura pode possuir alguns niveis de condicdo {aconselha-se no maximo quinze niveis), sendo chamadas de aninhamentos ou encadeamentos. A figura 3.3, presenta um exemplo deste tipo de estrutura | Decis6es 37|> Diagrama de Quadros Observe no diagrama {figura 3.3} a existéncia de duas condigées. Se a primeira condicao for verdadeira, serdo executadas as instrugdes para o quadro Considerado verdadeiro, representado pelo cédigo da letra $ da condig&iol. Em seguida serdo execuiadas as instrugées comuns. Caso a condigdol seja falso, sera entdo ovaliada a condigéie2, que pode ser verdadeira ou falsa. Apés avaliar a segunda condico, o programa executa a por¢do légica perfinente @ agdo condi- ional e executa também as instrucdes comuns. Condigtot 8 N Condigto2 Instrogdes a serem fdas aps conaigaot ser s N ‘ersadeva tnstrugtes | instugoes a Executadas para ea conaese2 | nico? Nerwadere, | eoncle pete condigdo Pereiaor | sanaedot false Instrugdes a serem executadas apés a Vertcagae das condicbes anteriores Figura 3.3 - Diagrama de quadros para decisdo encadeada, Portugués Estruturado ondigo2>) entéio einstrucdes para condigdo? verdadeiza, por instrugées para condigdol e condi¢ie2 fale: fim se comuni condigées: apée Lagica Estruturada para Programagao de Computadores | Pr (© exemplo apresentado faz referéncia a um encadeamento a partir da condigiol como falsa. Este é um mero exemplo, ¢ assim sendo, po- deria também ser considerado 0 encadeamento para a condicdo ve dadeira, (OBSERVAGAO 3.2 - Uso de Condigdes Como apresentado anteriormente, 0 conceito de tomada de decisdo esta moldado no fato de existir pelo menos uma condicdo que necessita ser avaliada. A condi¢do sob avaliacéo pode gerar uma de duas respostas (sim ou nao, verdadei- +0 0V falso}. Para definir uma condigdo, & necesséria a avaliagéo de no minimo dois elementos que podem ser representados por variaveis e/ou valores®. Desta forma, podem ser criadas as seguintes relagdes l6gicas: varidivel com varidvele variével com volor. Dificimente existirao relacées légicas do tipo valor com variével, e néo serdo utilizadas relagdes do tipo valor com valor. Uma condigéo minima € formada por dois elementos em conjunlo com ‘lgum operador relacional, ou mesmo com o uso de operadores légicos, 3.2.1 - Operadores Relacionais Para que seja definida uma condigao, é necessério utlizar os operadores relacionais, além dos elementos descritos anteriormente, para que assim seja pos- sivel verificar 0 estado logico de uma determinada condicao quanto & possibilidade de ser verdadeira ou falsa. Os operadores relacionais validos em relagées logicas sdo os seguintes: Simbolo [significado Igual a S Diferente de [>_____|Maior que < ‘Menor que 3 Moior ov igual a Menor ou igual @ © Considera-se valor © contatdo que uma varlével pode ter. Assim sendo, um valor pode ser um romero infeto, um numero real, uma sequéncia de caracteres ou mesmo um valor légico do tipo: vverdadeiro ov fas. 4 | Decisées 391 3.2.2 - Operadores Légicos Foi comentado anteriormente que para ocorrer a tomada de decisdo é necessério uso de no minimo uma condicéo. Mas haverd situagdes em que se forna necessdrio 0 uso de mais de uma condigGo para que uma Unica deciséo ‘seja tomada sem o uso do conceito de decisdes encadeadas. Para estes casos é preciso trabalhar com os operadores légicos, sendo os mais comuns: .€. loperador de conjuncdol, .ov. (operador de disiuncdo) e .ndo. operador de negacGol. Em alguns casos, 0 uso de operadores légicos evita a uillzagGo de decisées encadeadas. © operador légico do tipo .e. € utlizado quando duas ou mais condicées necessitam ser verdadeiras. Desta forma, cria-se 0 conceito de conjuncdo entre as condigdes, ou seja, apesar de existir mais de uma condicdo, o resultado légico somente sera verdadeiro quando todas as condicdes também o forem, Imagine como exemplo a possibilidade de um aluno poder sair da sala de aula somente apés concluir 0 exercicio dois e 0 exercicio trés. Observe que ambos 08 exercicios precisam ser realizados para que ele possa soir. A seguir, veia a tabela de deciséo para o operador légico .e., bem como um exemplo da forma de Uso no diagrama de quadros {figura 3.4) e em portugués estruturado ‘Condigéor Conaigao2 Resultado Falso Falsa Falso Verdadeira __| Falsa Falso Falsa_ Verdadeira Falso ‘Verdadeira Verdadeira Verdadeiro Diograma de Quadros Condigéot .E. Consigao2 s NI Instrugdes a Instugdes 2 setemexecutadas | seremexocutedas teacondigaote | se pelomenos 3 condi¢ao2 forem | uma condicao verdadeiras forfalsa figura 3.4 - Diagrama de quadres com utizacdo do operadorl6gico.e. Logica Estruturada para Programacéio de Computadores | D> Portugués Estruturado fe () .e. (< 12 executadas se condicdol e condicdo2 forem verdadeiras: ndigdoa>) entéo fimse © operador do tipo .ou. é ultlizado quando pelo menos uma das condicdes necesita ser verdadeira, Desta forma, cria-se 0 conceito de disjuncdo entre as condigées, ou seja, apesar de existir mais de uma condicdo, 0 resultado légico somente sera verdadeiro quando pelo menos uma das condigées for verdadeira Imagine como exemplo a possibilidade de um aluno poder soir da sala de aula somente apés concluir 0 exercicio dois ov 0 exercicio frés. Observe que bosta ao aluno resolver um dos exercicios para que ele possa sair. A seguir, observe a tabela de decisdo para o operador légico .ou., bem como um exemplo da forma de uso no diagrama de quadros figura 3.5] e em portugués estruturado. Condigao Condigdo 2 Resultado Falsa Falsa Falso Verdadera | alsa Verdadeiro Falsa Verdadeira Verdadeiro Verdadeira __| Verdadeira Verdadeiro Diagrama de Quadros Condigat .OU. Concigso2 s N Instrugses Instrugdes 2 serem executadas serem executadas 0.8 condigaot ou se todas as. 2 condigdo? forem concigges verdadeiras forem falsas Figura 3.5 - Diagrama de quadros com uiiizagao do operador légico .ov. 4 | Decisdes ap Portugués Estruturado gaol>) -ou. ( 1g executadas se instruc! fim se 1 ou condigdo2 foren © operador do tipo .ndio. 6 ullizado para efetuar a inversdo do resultado legico de uma determinada condigéo, uma vez que este operador nega a condi¢do escrita & sua frente. Se a condi¢do for verdadeira, seré tratada como folsa. Se a condi¢do for falsa, ser tratada como verdadeira. A seguir, opresenta-se a tabela de decisto para 0 operador légico .no., ben como um exemplo da forma de uso no diagrama de quadros (figura 3.6) e em portugues estruturado. Condigéo Resultado ‘Verdadeira Falso Falso Verdadeira Diagrama de Quadros Nae. Condigso s N Instrugéesaserem | Instugées a serem cexecuiadas se a execuladas se a Condigdo nda fer | condieSo nao Verdadeira,ovseja | forfalsa, ov sia forfatsa for verdaderra Figura 3.6 - Diagrama de quadros com utiizagée do operadorl6gico nd. Portugués Estruturado Lagica Estruturada para Programagao de Computadores | Pe pr [0.1 do operador loco no. & um pouco mais ro que os demais Feasewincho\ | operadores lagicos. Uma de suas aplicagdes ocorre quando ha neces- — sidade de priorizar a agéo de uma condicao que seja fos. 3.3 - Exercicios de Aprendizagem Com 0 objetivo de mostrar um exemplo pratico na utlizacdo dos conceitos de tomada de decisdes, apresentam-se em seguida alguns exemplos de apren- dizagem, os quais estardo tratando os conceitos de decisGo simples, decisao com- posta, decisao encadeada, operadores relacionais e légicos, Observe atentaente cada exercicio e avalie seu funcionamento légico antes de efetuar os exercicios de fixacao, 3.3.1 - Primeiro Exemplo Ler dois valores numéricos, efetuar a adigdo e apresentar 0 seu resultado caso 0 valor somado seja maior que 10. Algoritmo 1. Conhecer dois valores incdgnitos (estabelecer varidveis A e 2, Efetuar a soma dos valores incégnitos A e B, implicando o valor da soma na varidvel X; 3. Apresentar o valor da soma contido na variavel X, caso o valor de X seja maior que 10. Diagrama de Quadros Programa Soma_Nimeros Escreva X Fim Figura 3.7 - Diagrama de quadios para o primeiro exemplo. 4 | Decisées programa SOMA NOMEROS inteire leia a leia KOAtB ‘se (x > 10) entdo fimse fim Note que apés a definicéio do tipo inteiro para as varidveis do programa, & solicitada a leitura dos valores para as varidveis Ae B, depois esses valores sGo implicados na variavel X, a qual possvi 0 resultado da adigdo dos dois valores. Neste ponto, a condicdo do programa é avaliada. Se a condi¢do for verdadeira, ov seja, 0 resullado da variavel X for maior que 10, ele sera entao apresentado; caso contrério, nada ocorrerd 3.3.2 - Segundo Exemplo Ler dois valores numéricos e efetuar a adi¢do. Caso o resultado seja maior ou igual a 10, deve ser acrescido de mais 5; caso contrario, este resul- tado deve ser diminuido em 7. Ao final apresente o resultado apés a avaliacéo da condigéo. Algoritmo 1. Conhecer dois valores (variveis A e Bl; Efetuar a soma dos valores Ae B e implicar 0 valor da soma em X; 3. Veriicar se X € maior ou igual 10; caso sim, calcule R — X+5, senéo calcule R — X-7 e apresente ao final o valor de R. Lagica Estruturada para Programacdo de Computadores | Pr Diagrama de Quadros Programa Soma_Nimeros Leia AB XcA+B =O, ROX+S REX-7 Escreva R Fim Figura 3.8 - Diagrama de quadros para o segundo exemplo. Portugués Estruturado Programa SOMA NOMEROS x, A, B+ intedro inicio lela a, 8 xeAtB (x = 10) ent& REX+S Rex-7 fim se im Note que apés a definicao do tipo inteiro para as variaveis do programa, é efetuada a leitura dos valores para as variaveis A e B, depois esses valores sGo implicados na variavel X. Perceba que, neste ponto, 0 programa questiona a con- digo que permitira imprimir o resultado com a adicao de 5 ou a subtracdo de 7. 3.3.3 - Terceiro Exemplo Elaboror um programa que efetue o célculo do reaijuste de saldrio de um funciondrio. Considere que o funcionério deve receber um reaijuste de 15% caso seu salério seja menor que 500, Se 0 salério for maior ou igual a 500, mas menor ou igual a 1000, seu regjuste sera de 10%; caso seja ainda maior que 1000, 0 reajuste deve ser de 5%. Ao final o programa deve apresentar 0 valor do novo salario 4 | Decisies 45 1> Algoritmo Observe que, para resolver 0 problema apresentado, é necessario utilizar uma de trés condigdes para calcular o reaiuste do solério do funcionério, sendo: 4. Saldrio < 500, reajuste serd de 15% ¢ Solério >= 500, mas <= 1000, reajuste serd de 10% 4 Salério > 1000, reajuste serd de 5% AAs condigdes em questo devem ser encadeadas, pois todas as possibil dades de regjuste devem ser cercadas. Assim sendo, observe os passos do algoritmo em seguida: 1. Definir uma variavel para o salario reajustado: NOVO_SALARIO; 2. Ler um valor para a variavel SALARIO; 3. Verificar se o valor de SALARIO < 500, se sim reajustar em 15%; 4, Verificar se 0 valor de SALARIO <=1000, se sim reajustar em 10%; 5. Verificar se o valor de SALARIO > 1000, se sim reajustar em 5%; 6. Apresentor o volor reajustado, implicado em NOVO_SALARIO. [A releréncia utiizada na linha 5 do algoritmo néo seré uilizada no PH dicarama de quacos © em portugues estruturado. Isto ocorre, uma vez oaseevacho} |que o conceit de avaliagdo da condigéo deixa a quinta referéncia : ’ | subentendida. Desta forma, qualquer valor que nao seja menor que 500 ‘ou que nao esteja situado na faixa de 500 0 1000, esta acima de 1000. Diagrama de Quadros Programa Resist Salar Salto Novo _Saiie _ Novo Salo Eocreva Nove. Salar Figura 3.9 - Diagrama de quadros para o terceiro exemplo. Logica Estruturada para Programagao de Computadores | Pe Portugués Estruturado programa REATUSTA_SALAR ARIO + real RIO + real Angelo leia SAL se (SALARIO < 500) ent&o {OVO_SALARIO © SALARIO * 1.15 ‘se (SALARIO <= 1000) entéo NOVO_SALARTO ¢ SALARIO * 1.10 endo Novo_SALARTO © sazARTO * 1.05 fimse fimse eaoreva NOVO_SALARIO fim 3.3.4 - Quarto Exemplo Elaborar um programa que efetve a leitura de tr8s valores para os lados de um triéngulo, considerando lados como: A, B e C. O programa deve verifcar se os lados fornecidos formam um tridngulo, e se for esta condicdo verdadeira, deve ser indicado qual tipo de triéngulo foi formado: isésceles, escaleno ou equiltero. Algoritmo Para que este programa seja desenvolvido, 6 necesséirio saber em primeira esténcia 0 que € um tridngulo: triangulo é uma forma geométrica (poligono) composta por frs lados, e cada lado é menor que a soma dos outros dois lados, Observe que a definictio de um tridngulo impée algumas regras (condicées) as quais precisam ser consideradas para a criagdo do programa. € um triéngulo quando AB e B< >C; e & equilatero quando possui todos os lados iguais, sendo A=Be BC. 4 | Decisées 47\> ‘ou. (6 = 5) entlo saceles! ze (A= 8) ou. escreva “Driangulo Ta 2. Verificar se cada lado menor que a soma dos outros dois lados. Se sento sim, saber se A=B e se B=C, sendo verdade 0 triéngulo é equildtero. Se escreva “triangulo ndo, verificar A=B ou se A=C ou se B=C, sendo verdade o tridngulo é finse Ler trés valores para os lados de um triéngulo: A, Be C; saleno isdsceles; caso contrério, o triangulo é escaleno; tines 3, Caso os lados fornecidos néo caracterizem um tridngulo, avisar @ ocor- escreva “As medidas nfo réncia. fine fin Diograma de Quadros 3.3.5 - Quinto Exemplo Eloborar um programa que efetue a leitura de um valor numérico inteiro ‘opresente-o caso esse valor nGo seja divsivel por 4. Programa Tangulo Lee ABC ACBIC EBACE. CMB Algoritmo s N Se for lido um valor divisivel por quatro (como: 4, 8, 12, 16, etc.) 0 programa deve apresentar a mensagem “valor invélido”. Qualquer outro valor que ndo seja divisivel por quatro deve ser apresentado, 8 N Pora resolver 0 problema, € necessario, além do uso do operador légico @rB OU. AC 00, OB, .ndio., verificar se a condigdo do valor lido é ou néo divisivel por 4. Para verificar se Esra Aa aa um valor numérico (dividendo) € divisivel por outro valor numérico (divisor, & 8 N trangule necessétio levar em consideragéio que o resto da divisdo deve ser zero. & Ean necessério também considerar que os valores de dividendo, divisor, quociente & Equator — Esco resto so inteiros. Faanglo Trangele tebecles" scalone Para detectar se um valor numérico inteiro é divisivel por outro valor numé: rico inteiro, deve ser utlizado 0 operador aritmético de diviséo “div’, que propor- ciona @ obtencao do resultado da diviséo (quociente] como um valor numérico inteiro. Fim igura 3.10 -Diagrama de quadra co exemplo, _. aa a aa us Desta forma, se for efetuada a operacéo 5 div 2, fer-se-6 como quociente da divisdo 0 valor 2. Sendo 0 quociente 2, isto indica que o resto da divisGo esté como Portugués Estruturado 0 valor 1. Desta forma, pode-se concluir que o valor numérico 5 (dividendo) néo divisivel pelo valor numérico 2 (divisor), pois 0 resto da divisdo ndo é zero. programa TRIANGULO Para efetuar 0 célculo do resto de uma diviséo de valores inteiros, basta considerar o formula: Resto = Dividendo - Divisor . Quociente. Assim sendo, a pode-se substtuir a formula pelos seus respectivos valores, sendo: Resto = 5 - 2 2. Em seguida, basta efetuar o célculo da multiplicagdo de 2 . 2, para entéo entto subtrair 0 valor 4 do valor 5, ¢ assim obler 0 valor de resto igual a 1 ae (A= 3) v8 A forma exposta no pardgrafo anterior & a ullizada em um programa de ee “ computador para determinar se um valor numérico é divisivel por outro valor 4 | Decisées 49> Logica Estruturada para Programacio de Computadores | D> Em seguida, faca os exercicios da primeira bateria (exercicio de fixacdo 1) numérico. Supondo que um programa deva verificar se um valor, no caso 0 valor ¢° a d para treinar a aplicacéo dos conceitos de utlizaccio dos operadores lagicos. Apos numérico 5, é divisivel pelo valor numérico 2, deveria efetuar 0 cdlculo do resto da p 2 Givcdo do sequinte forma: RESTO <5 -2 * (5 div2) a devida correcao, faca os exercicios da segunda bateria fexercicios de fixagao 2). _ Compare o nivel de acertos entre 0 primeiro e 0 segundo exercicios de fixacéo. ‘Apés considerar a explicagdo anterior, observe os passos do algoritmo Logo apés, faca os exercicios da terceira bateria (exercicio de fixagéo 3) para roposto treinar a aplicagdo do conceito de decisées em varios situacées propostas. t Goes prope 1. Ler um nomero inteiro qualquer, no caso 0 nomero N: 2. Calcular o resto da diviso de N por 4, usar c variavel R; 3.4 - Exercicios de FixagGo 3. Verificar se a varidvel R possui valor zero, se sim apresentar a mensagem “valor invalido”, se nao apresentar 0 valor da variavel N. 1. Determine o resultado ldgico das expresses mencionadas, assinalando se sdo verdadeiras ou falsas. Considere para as respostas os seguintes valores: X = 1,A=3,B=5,C=8eD=7. Diagrama de Quadros a) .nGo. (X> 3} Programa Dvisve Verdadeiro ( } Falso( ne b) (X<11.¢, no. (8> 0) aE Verdadeiro( | Falso( ) ©) sno. (<0}.e. (C> 5) Nio.R=0 : 4 Verdadeiro |) Falso( } a) sno, (X>3}.00.(C<7) escvaN ‘or Verdadeiro( ) Falso( we e) A> 8).0v. (C>8) = Verdadeiro( } Falso( | Fgura 3.I1-Diagrama de quadtos para quino exemple. 0 oe . Verdadeiro |) Falso| } ae 9) WX<1).¢.(8>=D) programa DIVISiVEL TT Verdadeiro( ) Falso( ) eee hy (D<0).0u.(C> 5) Verdadeiro( } Falso( } N-4* Wwaiv 4) j) .no. (D> 3) ou. .ndo. (<7) =o) onto Verdadeiro( } Falso( | wie D A>8).0u, .n&io. (C> 8) ea hterers “Wahor Savdascor Verdadeiro( | Falso( } tim — ee | ecisées 51> Lagica Estruturada para Programagéio de Computadores | Pe Indique a scida dos trechos de programa em portugués estruturado, f) Resposta: mostrados em seguido. Para as saidas considere os seguintes valores: Az2, B=3, C=5 e D=9, Nao é necessario calcular os valores de X. men ‘Marque na resposta apenas a férmula que sera executada de acordo eonas com a condigdo. eater Tel fimse 0) Resposta; escreva x xe (A+B) D 9) Resposta: Lee os keen 2 ceozer senko escreva x since b) Resposta;_ —— excreva x se (A> 2) ve. (B< 7) onto xe (A+ 2 * (B-2) fh) Resposta senko fe (A >= 2) wou. (C= xe (A+B) /D* (C+D) Ke AS D2 sims eecreva x fine ) Resposta — ercreva x era) 3. Desenvolva os diagramas de quadros e codificactio em portugués estru- senko “ turado dos seguintes problemas: retas a (pt (ced ©) Ler dois valores numéricos e apresentar a diferenga do maior pelo menor. fimse escreva x b)_Efetvar a leitura de um valor inteiro posiivo ou negative e apresentar d)_ Resposta — © nidmero lido como sendo um valor positivo, ou seja, 0 programa se (A> 2) cou. sno. (5 < 7) entéo deve apresentar o médulo de um nimero fornecido. Lemibre-se de ee verificar se o ndmero fornecido & menor que zero; sendo, muttipli- eG que-o por -1 XeA-B €) Ler quatro valores referentes a quatro notas escolares de um aluno fine e imprimir uma mensagem dizendo que o aluno foi aprovado, se o valor da média escolar for maior ou igual a 5. Se 0 aluno nao foi pesposta aprovado, indicar uma mensagem informando esta condicdo. ezcreva x e Apresentar junto das mensagens o valor da m&dia do aluno para 0 .nflo. (A> 2) .ou. .nfo. (B<7 qualquer condigao eee 4) Ler dois valores referentes a duas notas escolares de um aluno e eT imprimir uma mensagem dizendo que 0 aluno foi aprovado, se 0 times valor da média escolar for maior ou igual a 7. Se o valor da média Lagica Estruturada para Programagéo de Computadores | P 4 | Decisées 53 [> a 9) hy) m) for menor que 7, solicitar a nota de exame, somar com o valor da média e obter nova média. Se a nova média for maior ou igual 5, apresentar uma mensagem dizendo que 0 aluno foi aprovado em exame. Se 0 aluno néo foi aprovado, indicar uma mensagem informando esta condicGo. Apresentar_com as mensagens o valor da média do aluno para qualquer condicao. Efetvar a leitura de trés valores tvaridveis A, B e C) e efetuar o calculo da equacdo completa de segundo grav, apresentando as duas raizes, se para os valores informados for possivel efetuar o referido cdlculo. Llembre-se de que a varivel A deve ser diferente de zero, Efetuar a leitura de trés valores (varidveis A, B e C} e apresenté-los dispostos em ordem crescente. Para solucionar o problema, uilizar os conceitos de propriedade distributiva e troca de valores entre varidveis, Efetvar a leitura de quatro nimeros inteiros e apresentor os nmeros que sdo divisiveis por 2 e 3. Efetuar a leitura de quatro némeros inteiros e opresentar os nUmeros que sGo divisiveis por 2 ou 3. Efetuar a leitura de cinco ndmeros inteiros e identificar o maior € 0 menor valores. Ndo execute a ordenagGo dos valores, Elaborar um programa que efetue a leitura de um némero inteiro € apresentar uma mensagem informando se 0 numero @ par ou impor. Elaborar um programa que efetve a leitura de um valor que esteja entre a faixa de Te 9, Apés a leitura do valor fornecido pelo usuario, ‘© programa deve indicar uma de duas mensagem: “O valor esté na faixa permitida’, caso 0 usuario fornega 0 valor nesta foixa, ou a mensagem “O valor esta fora da faixa permitida’, caso 0 usuario forneca valores menores que I ou maiores que 9. Elaborar um programa que efetve a leitura de um determinado valor, e apresenté-lo caso ndo seja maior que irés. Elaborar um programa que efetve a leitura do nome e do sexo de uma pessoa, apresentondo como soida uma das seguintes mensagens: ilmo Sr.”, para 0 sexo informado como masculino, ov a mensagem “ima Sra.", para 0 sexo informade como feminino. Apresente também abaixo da mensagem impressa 0 nome da pessoa, Logica Estruturada para Programagio de Computadores | Pe CAPITULO Lacos de Repeticao Este capitulo mostra os conceitos de ulilizagGo de lagos de repeticéo, também denominados malhas de repetico ou /oopings. Sdo apresentadas trés formas de lacos de repeticdo: enquanto, repita e para 4.1 - Utilizagdio de Lagos de Repetigdo Os lacos de repeticao sdo muito dteis e muito utlizados, pois possibilitam a facilidade de repetir um certo trecho de programa por um determinado nimero de vezes. O numero de vezes que um laco pode repefir um trecho de programa pode ser previamente conhecido ou nao, vai depender da caracteristica de execucao do loco. Um laco de repeticéo em que se conhece 0 nimero de vezes que ele sera executado € predeterminado, pols sabe-se quando comeca e quando termina. Porém, ha cinda a possibiidade de desenvolver um laco de repeticGo indetermi- nado, ou seja, sabe-se quando ele comeca, mas néo se sabe quando ele termina, pois apenas o usuario do programa é que determina o fina Para os lacos predeterminados, de forma geral podem ser usados 0s tipos de lacos de repeticdo: enquante, repita e para. Para os lacos indeterminados, podem ser usados apenas os lacos de repeticdo dos tipos enquanto e repita, (0s lacos de repeti¢do dos tipos enquanto e repita so controlados pelo uso de condigdo, logo sao lacos de repeticao condicionais. J6 0 laco de repeligéio do tipo para é incondicional, pois ndo faz uso do conceito de condicée: De forma geral, quando hd a necessidade de trabalhar com um laco de repeticao predeterminado, uiliza-se 0 conceito para, deixando os conceitos de lacos de repeticdo enquanto e repita para situagdes de lagos indeterminados. ‘Apesar desta caracteristica operacional, nesta obra serdo utilizados todos os tipos de laco para demonstrar suas aplicades nas mais variadas situacées. ”Apesar deste conceto, existem algumas linguagens de programagdo que utlizam condi;ae para controlar um lago do tipo para, como é o caso das linguagens C, C++, Java e Javascript “4 | Lacos de Repeticao 551> 4. Os Lagos de Repeticao ‘Como exposto anteriormente, os lacos de repeti¢do séo trés, cada qual para uma finalidade especifica. Mas, apesar desta caracteristica especifica, um lago de repelicdo pode, em algumas ocasides, substitir outro lago de repeticéo, além de executor sua aco especifica, desde que um consiga atender @ necessidade do ‘outro, Caso contrario, 0 laco de repeticéo ndo pode ser usado em subsiituigao a outro laco, Dos trés lacos existentes 0 laco repita é 0 mois versaiil, pois executa sua aco especifica e consegue, com alguns cuidados, executar também as acdes dos lacos de repeticao enquanto e para. J4 0 laco enquanto consegue, além de sua agdo especifico, executar com alguns cuidados a ago do laco de repeticdo para. Por sua vez, 0 laco de repeticdo para executa apenas sua acdo especifica. A tabela seguinte demonstra o nivel de acdo de cada estrutura de repeticao, Lage de repetigtio Repite Enquanto Para! Repita Executa Bxecula Execute Enquanto Bxecuta Execula Para [ Brecuta | Outro detalhe a ser considerado é 0 fato de ocorrer a necessidade de encadear entre si as estruturas de repeticao, segundo alguma necessidade especi fica, 4.2.1 - Lago Enquanto © laco de repeticéo do tipo enquanto caracleriza-se por efetuar um teste condicional no inicio do fago. Desta forma, & possivel verificar se € permitido executor 0 trecho de instrugées subordinado @ condigéo. Para este tipo de estrutura sera ufllzado 0 cédigo em portugués estruturado enquanto...faga e fim_enquanto. A seguir, é mostrado um exemplo da representacao grafica no diagrama de quadros e sua forma sintatica em portugués estruturado. Diograma de Quadros Observe Mo diagrama figura 4.1) a colocacéo da condicao sobre os instrugdes que serdo executadas enquanto a condicao permanecer verdadeira, No momento em que a condigéo se tornar falso, 0 la¢o de repetigGo @ encerrado. 4156 Logica Estruturada para Programacdo de Computadores | Pr Concipto Instrugses que serdo texeculadas enquanto 2 ‘ongiea0 permanecer verdageia Figura 4.1 - Diagrama de quadros para laco de repeticéo do tipo enquanto, Portugués Estruturado fenquanto () faga for verdadeira instrucSes executadas enguanto condi fim_enquanto 4.2.2 - Lago Repita © laco de repeticao do tipo repita caracteriza-se por efetuar um teste condicional no final do Jaco, Desta forma, as instrucdes subordinadas ao /aro serdo execuladas no minimo uma vez. Para este tipo de estrutura seré utlizado 0 cédigo em portugués estruturado repita e até_que. A seguir, observe um exemplo da representacéo gratica no diagrama de quadros e sua forma sintatica em portugués estruturado, Diagrama de Quadros Observe no diagrama (figura 4.2) a colocagée da condi¢éo apés a definico das instrucdes que serdo executadas até que a condicao torne-se verdadeira. No momento em que a condi¢do se tornar verdadeira, o lago de repelicéo € encer- rado, Inatrugbes que sordo execuiadas até que a Conaiggo se tome verdadeira Condigto Figura 4.2 - Diagrama de quadros para laco de repeticdo do tipo repita: Portugués Estruturado ‘repite instrugdes executadas até que condigo torne-se verdade: 4 | Locos de Repeticao 57> 4.2.3 - Lago Para © laco de repetigtio do tipo para caracteriza-se por efetuar um /aco por um determinado némero de vezes previamente definido. Para este tipo de estrutura seré uilizado 0 cédigo em portugués estruturado para...de...até...passo...faga € fim_para. A seguir, veja um exemplo da representacdo gréfica no diagrama de quadros e sua forma sintatica em portugués estruturado. Diagrama de Quadros Observe no diagrama (figura 4.3} a colocago da definigéio do contador de vezes sobre os instrucées que serdo executadas enquanto a contagem de vezes for valida. No momento em que o contador chega ao seu final, o laco de repeticéo 6 encerrado, “Variével> — Inicio, Fim, inewemento Instrugdes que serdo executadas até que o Valor de Inicto stnia valor de Fim, segundo © Incremento de contagem Figura 4.3 - Diagrama de quadros para laco de repeticdo do tipo para. Portugués Estruturado para variavel femento faga seu final fim para 4.3 - Exercicios de Aprendizagem (Lacos Predeterminados) Com 0 objetivo de mostrar um exemplo pratico de uso do conceito de lacos de repetigéo predeterminados, sdo apresentados alguns exemplos de aprendiza- gem, criados com os conceitos de lacos de repeticao do tipo enquanto, repita e para, Para os exemplos em questéo considere de forma genética o seguinte problema computaciona!: Logica Estruturada para Programacéo de Computadores | D> Elaborar um programa de computador que efetue e apresente o resultado do célculo da fatorial do némero 5. Neste sentido, vale lembrar que fatorial 6 0 produto sucessivo dos némeros naturais iniciados em 1 até 0 inteiro n, no caso apresentado §. Desta formo, 0 cdlculo de uma fatorial & conseguido pela multiplicacdo sucessiva do némero de fermos. No caso do calculo de uma fatorial de némero 5 (51), seria entdio necessario efetuar a multipicagéo sucessiva de: 5.4.3.2.1001.2.3.4.5, que resultaria no valor 120. 0 programa deve executar os multiplicacdes sucessivamente e acumulé-las a fim de possuir 0 valor 120 apés cinco passos. 43.1 - Primeiro Exemplo Onimero de passos deve ser controlado por um contador por intermédio do laco de repetico enquanto. Algoritmo 1. _Inicializar as variéveis FATORIAL e CONTADOR com 1; 2. Mutiiplicar sucessivamente @ variavel FATORIAL pela variavel CONTA- DOR; 3. Incrementor 1 variével CONTADOR, efetuando 0 controle até 5; 4, Apresentar ao final o valor obtido. Pelo fato de ter que efetuar 0 célculo de uma fatorial de 5 (5!) isto implica que 0 contador deve variar de 1a 5, e por este motivo deve ser a variavel CONTADOR inicializada com valor 1. Pelo fato de a variavel FATORIAL possuir ao final o resultado do célculo da fatorial pretendida, ela deve ser inicializada com valor 1. Se ela for inicializada com zero, nao existiré resultado final, pois qualquer valor mulfiplicado por zero resulta zero. Muliipicar sucessivamente implica em efetuar a multiplicacéo da varidvel CONTADOR pelo valor atual da variavel FATORIAL a cada passo controlado pelo Jaco. No caso, por cinco vezes. Veja em seguida a resolugao do problema do célculo de fatorial, uilizando a estrutura de repeticéo do tipo enquanto. Sao apresentados também 0 diagrama de quadros e 0 cédigo em portugués estruturado, 4 | Lacos de Repeticao Diagrama de Quadros Programa Fatoral Fatoral 1 Contador = 1 Contador = 5 Fatorial « Fataial © Contador Contador « Contador + 1 Escreva Fatoral de § Fatoral Fim Figura 4.4 - Diagrama de quadres para céiculo de fatorial com lago enquanto. Note dentro do lago de repeticdo a indicacéo de dois contadores. O primeiro funciona como um acumulador, pois ele tera no final o valor do resultado da fatorial, e o segundo é utlizado para controlar a execucdo do laco de repeticao e ser a base para o calculo do acumulador. Logo no inicio do diagrama de quadros, as variaveis CONTADOR e FATORIAL sdo igualadas em 1. Na primeira passagem dentro do laco, a varidvel FATORIAL & implicada pelo seu valor atual, no caso 1, multiplicado pelo valor da varidvel CONTADOR também com valor 1 que resulta 1. Em seguida a variavel CONTADOR é incrementada por mais 1, tendo agora o valor 2. Como 2 @ menor ou igual a 5, ocorre um novo célculo. Desta vez a voridvel FATORIAL que possui o valor 1 é multiplicada pela variavel CONTADOR que possvi o valor 2, resultando 2 para FATORIAL. Dai a varidvel CONTADOR é incrementada de mais 1, tendo agora o valor 3. Desta forma, serdo executados os outros célculos até que a condicdo se torne falsa e seja ento apresentado o valor 120. Veja em seguida a tabela com os valores das variaveis antes e durante a execugdo do laco: Contodor | Fatoral | Fatorial < Fatorial "Contador | Comentérios 1 1 1 Volor inicial das varidveis e da fatorial 2 7 2 Céleulo da fatorial com 0 contador ern 2 3. [2 [6 Cilculo da fatorial com 0 contador em 3 a | [2a Célculo da fatorial com 0 contador em 4 5 24 [120 Célculo da fatorial com 0 contador em 5 Lsajca Esruturada para Progromactio de Computodores | P Perceba que quando a varidvel CONTADOR esté com volor 5, 0 variével FATORIAL esta com o valor 120. Neste ponto, 0 laco é encerrado e é apresentado o valor da varidvel FATORIAL Portugués Estruturado programa FATORIALL Anteizo FATORIAL © 1 conaDoR < 1 enquanto (CONTADOR <= 5) faga FATORIAL ¢~ FATORIAL * CONTADOR +1 INTADOR — CONTADC #im_enquanto ezcreva “Fatorial de 5 fin | FATORIAL No cédigo anterior, esido sendo apresentadas pela instrugéo escreva duas informagées, sendo uma mensagem e uma varidvel. Note que isto é feito utlizando uma virgula para separar as duas informacées. 4.3.2 - Segundo Exemplo Com base no mesmo problema do calculo da fatorial de 5, é apresentada ‘em sequida a solucao ullizando o laco de repeticio do tipo repita Diagrama de Quadros Programa Fatoral Fatoral = 1 Contador Fatorial — Far Cconntader © Co Contador> 5 falda = Fatoral Erceva Fat Fim Figura 4.5 - Diagrama de quadros para célculo de fatorial com lago repita 4 | Locos de Repeticao Portugués Estruturado inicio repite NTADOR € CONTADOR + 1 até_que nADOR > 5) oscreva ial de 5 & =", FATORIAL fin 43.3 - Terceiro Exemplo Com base no mesmo problema do célculo da fatorial de 5, é apresentada em seguida a solucdo utlizando 0 laco de repeticdo do tipo para, Diagrama de Quadros Programa FatoralS Fatoral = 7 Contador 1.5.1 Fatoral « Fatorial@ Contador Escreva Fatoral de 5 = Fatoral Fim Figura 4.6 - Diagrama de quadres para célculo de faterial om lago para. Portugués Estruturado programa FATORIALS inteiro Légica Estruturada para Programagio de Computadores | D> om de 1 até 5 paseo 1 faa fimpara eacreva *Patorial de 5 6 fim 4.4 - Exercicios de Aprendizagem (Lacos Indeterminados) Com 0 objetivo de mostrar um exemplo pratico de uso do conceito de lacos de repeti¢ao indeterminados, veja em seguida dois exemplos de aprendizagem, criados com os conceitos de lacos de repetigdo do tipo enquanto e repita, Nesta situacéo em especiico nao é possivel a solugdo com a utiizaco do laco de repeticdo do tipo para No tépico anterior, foi opresentado um exemplo para a resolucéo do proble- ma do calculo da fatorial de 5. Neste sentido, seria melhor possvir a solugdo ‘aberta para que um programa calcule a fatorial de um némero qualquer. Seria também interessante capacitar 0 programa a calcular outras fatoriais até que o usuério ndo mais deseje ullizar o programa. Sendo assim, o programa deve pedir 0 usuario a sua confinuidade ou néo. 4.4.1 - Primeiro Exemplo 0 primeiro exemplo apresenta um programa que efetua o calculo da fatorial de um numero qualquer. © programa em questio solicita ao usuario autorizacéo de continuidade de execucao e controla esta opcdo com 0 laco de repeticéio do tipo enquanto, Algoritmo 1. _Inicializar as varidveis FATORIAL e CONTADOR com 1; 2. Definir as varidveis RESP (resposta} para confirmagdo e N para receber 0 limite de valor para o célculo da fatorial; 3. Enquanto RESP do usuérro for sim, executar os passos 3, 4, 5, 6&7; 4. Repelir a execugéo dos passos 4 e 5 por N vezes; FATORIAL <— FATORIAL * CONTADOR; 5. 6. Incrementar 1 6 variavel CONTADOR; 7. Solicitar autorizagéio de continuidade do programa; 8. Apresentar ao final o valor obtido. <4 | Lacos de Repetico 63> Diagrama de Quadros Programa Fatoral Resp < “SIN Reap ="Sih Fatoral = 1 Lean Contador 1.N 1 Fatorial« Fatorial © Contador Escreva Fatoral Lela Resp Fm Figura 4.7 - Diagrama de quadros com laco indeferminado do tipo enquanto. Portugués Estruturado programs FATORIALS CONTADOR, FATORTAL, inicio RESP © “SIM! enquanto (RESP = "SIM") faga 1 fatorial de que nlinero WTADOR de 1 até N passo 1 faga fim_para eecreva “Des Leia RESP #im_enquanto fim 4.4.2 - Segundo Exemplo O segundo exemplo apresenta um programa que efetua o célculo da fatorial de um némero qualquer. © programa em questo solicila ao usudrio autorizagéo de confinuidade de execugdo e controla esta op¢iio com 0 laco de repeticao do tipo repita. 4164 Légica Esiruturada para Programacdo de Computadores | D> para CONTADOR de 1 Algoritmo Inicializar as varidveis FATORIAL e CONTADOR com 1; Definir as variveis RESP fresposta) para confirmacdo; Solictar 0 valor de N para receber o limite de valor para o célculo da fatorial; Repetir a execucdo dos passos 4 e 5 por N vezes; FATORIAL <— FATORIAL * CONTADOR; Incrementar 1 6 varidvel CONTADOR; Solicitar autorizacéo de continuidade do programa; Apresentar a0 final o valor obtido. PNONPED Diagrama de Quadros Programa Fatorals Inicio Resp = Sim Fatoral 7 Lean Contador 1,Nt Fatorial Fatorial @ Contador Excreva Fatoral Tela Resp Resp > "Siar Fim Figura 4.8 - Diagrama de quadros com lago indeterminado do tipo repita Portugués Estruturado programa 7 conrapor, Nt dnteiro RESP : caractere R Fal 1 escreva "Fatorial de que . de: 6 N paso 1 faga 4 | Lacos de Repeticgo 651> “ABORT fim_para escreva “Fatorial Leia RESP fim {A seguir, faca primeiro os exercicios da primeira bateria fexercicio de fixacéo 1) para freinar aplicagéo dos conceitos de lago do fipo enguanto. Depois faco a Segunda bateria pora treinar a aplicacéo dos conceitos le laco do tipo repita e por Uilimo faca a terceira bateria para ireinar a aplicacGo do conceito de laco do tipo para. 4.5 - Exercicios de Fixagdo Desenvolva os algoritmos, diagrama de quadros e codificacdes dos pro: blemas indicados em seguida. Usar na resolugdo dos problemas a esirutura de repetigdo do tipo enquanto. a) ») ¢ qd) ea Apresentar os quadrados dos nimeros inteiros de 15 a 200. Apresentar os resultados de uma fabuada de um nimero qualquer, ‘a qual deve ser impressa no seguinte formato: Considerando como exemplo o fornecimento do ntimero 2 2X1=2 2X2=4 2X3=6 2X 4=8 2X 5=10 (0) 2X10=20 Apresentar 0 total da soma obtida dos cem primeiros némeros inteiros (1+243+4+5+6+7+..97+98+99+100). Eloborar um programa que apresente no final o somatorio dos valores pares existentes na faixa de 10 500. ‘Apresentor todos 0s valores numéricos infeiros impares sitvados na foixa de 0 a 20. Para verificar se 0 némero é impar, efetuar dentro da malho a veriicado légica desta condi¢do com a insirucao se, perguntando se 0 numero é impar; sendo, mostre-o; nao sendo, siga para o passo seguinte. Logica Estruturada para Programacao de Computadores | Pr 9) hy Apresentar todos os némeros divisiveis por 4 que sejam menores ue 200. Para verificar se 0 némero é divisivel por 4, efeluar dentro da malha a veriicagdo légica desta condigéo com a instrugdo se, perguntando se o nomero é divisivel; sendo, mostre-o; nao sendo, VG para o préximo passo. A varidvel que controlard o contador deve ser iniciada com valor 1 Apresentar as poténcias de 3, variando de 0 a 15. Deve ser consi- derado que qualquer numero elevado a zero € I, ¢ elevado a 16 ele proprio. Deve ser apresentado, observando a seguinte definicdo: 14348907 Elaborar um programa que apresente como resultado o valor de uma poténcia de uma base qualquer elevada a um expoer qualquer, ou seja, de BE, em que B é o valor da base e E 0 valor do expoente Escreva um programa que apresente a série de Fibonacci até o décimo quinto termo. A série de Fibonacci é formada pela sequéncia: 1, 1, 2, 3, 5, 8, 13, 21, 34, ... etc. Esta série se caracteriza pela soma de um termo posterior com o seu anterior subseqUente. Elaborar um programa que apresente os valores de conversdo de graus Celsius em Fahrenheit, de 10 em 10 graus, iniciando a Contagem em 10 gruas Celsius e finalizando em 100 graus Celsius. O programa deve opresentar os valores das duas temperaturas. Elaborar um programa que efetve o céiculo e no final apresente 0 somatério do numero de grdos de trigo que se pode obler num tabuleiro de xadrez, obedecendo 4 seguinte regra: colocar um gro de trigo no primeiro quadro e nos quadros seguintes 0 dobro do quadro anterior. Ou seja, no primeiro quadro coloca-se 1 grao, no segundo quadro colocam-se 2 grdos (neste momento tém-se 3 grdos}, no terceiro quadro colocam-se 4 grdos {tendo neste momento 7 grdos}, no quarto quadro colocam-se 8 grdos (tendo-se entdo 15 grdos} até atingir o sexagésimo quarto quadro (Este exercicio foi baseado numa sitvagdo exposta no capitulo 16 do livro “0. Homem que Calculava" de Malba Tahan; da Editora Record). Elaborar um programa que efelue a leitura de 15 valores numéricos inlelros e no final apresente o somatério da fatorial de cada valor lido, | Lacos de Repeticio 67|> m) Elaborar um programa que efetue a leitura de 10 valores numéricos € presente no final o somatério e a média dos valores lidos. 1) Elaborar um programa que efetue a leitura sucessiva de valores numéricos e apresente no final o somatério, a média e o total de valores lidos. O programa deve fozer as leituras dos valores enquanto o usuario estiver fornecendo valores positives. Ou seja, 0 programa deve parar quando o usuario fornecer um valor negativo (menor que zero}. ©) Elaborar um programa que apresente como resultado 0 valor da fatorial dos valores impares situados na faixa numérica de 1.10 ) Elaborar um programa que apresente os resultados da soma e da média aritmética dos valores pares sitvados na faixa numérica de 50070. @)Elaborar um programa que possibilite calcular a Grea'total de uma residéncia (sala, cozinho, banheiro, quartos, drea de servico, quintal garagem, etc. © programa deve solicitar a entrada do nome, a largura e 0 comprimento de um determinado comodo. Em seguida, deve apresentar a érea do comodo lido e também uma mensagem solicitando do usuario a confirmagdo de continua calculando novos cSmodos. Caso 0 usuario responda “NAO”, o programa deve ‘opresentar 0 valor total acumulado da drea residencial F) Elaborar um programa que efetve a leitura de valores positives infeiros até que um valor negativo seja informado. Ao final devern ser apresentados 0 maior € 0 menor valores informados pelo usuario. )Elaborar um programa que apresente o resultado inteiro da diviséo de dois némeros quaisquer. Para a elaboracéo do programa, nao utilizar em hipétese alguma o conceito do operador aritmélico DIV. A solugdo deve ser alcancada com a utlizagdo de laco. Ou seja, 0 programa deve apresentar como resultado (quociente) quantas vyezes 0 divisor cabe dentro do dividendo, Desenvolva os algoritmos, diagrama de quadros e codificacdes dos exercicios elencados de a até s (exercicio 1), usando a estrutura de repe- tigGo do tipo repita Desenvolva os algoritmos, diagrama de quadros © codificacées dos ‘exercicios elencados de a até s lexercicio 1), usando a estrutura de repe- tigGo do tipo para. Pode ocorrer o fato de algum exercicio néo poder ser solucionado com este tipo de estrutura de repeticao. Logica Esiruturada para Programactio de Computadores | Pe CAPITULO Matrizes Unidimensionais Este capitulo mostra uma técnica de programacdo que possibilta ao progra- mador frabalhar com 0 agrupamento de varios dados dentro de uma mesma varidvel. Vale salientar que esse agrupamento obedece sempre ao mesmo tipo de dado, e por esta razdo pode ser chamado de estrutura de dados homogéneos ‘Agrupamentos de tipos de dados diferentes serdo estudados mais adiante quando forem abordadas as técnicas de registros. A ullizacéo de matrizes em programa ‘G0 recebe também outros nomes, fais como: varidveis indexadas, varidveis com- postas, variaveis subscritas, vetores, tabelas em meméria ou arranjos. 5.1- Tabelas em Meméria As matrizes {labelas em meméria] de uma dimensdo ou matrizes unidimen- sionais séo utlizadas na criagdo de tabelos que sdo armazenadas em meméria primério. Este fipo de estrutura caracterizo-se por ser formado por uma énica varia vel que seré dimensionada com um determinado tamanho. A dimensdo de uma matriz é consfituida de constantes inteiras e positivas Os nomes:dados as matrizes seguern as mesmas regras de nomes uilizados para indicor as variaveis simples. ___ Para se ter uma idéia de como utilizar matrizes em uma determinada situa- Go, serdo apresentados dois programas, um com o uso de varidveis simples e 0 outro com 0 uso de uma matriz. Considere para tanto o seguinte problema: Elaborar um programa que efetue a leitura e apré é resente as médias turma de 8 alunos. " eeume A lista seguinte apresenta 0 némero de alunos e suas respectivas médias ‘anuais, Com 0 conhecimento adquirido até este momento, possivelmente seria ela- borado um programa conforme indicado na figura 5.1. “4 | Matrizes Unidimensionais 61h Algoritmo 1. Lercito valores para a média de cada aluno; 2. Apresentar o valor da média de cade aluno. Diagrama de Quadros Programa Média Inigo {Leia MOT, M2, MDB, MDS, MDS, MDG, MO7, MDB Escreva MDI, MO2, MD3, MDS, MDS, MDS, MD7, MOS Fim Figura 5.1 - Diagrama de quadros para leitura e escrita de oito médias. Portugués Estruturado programa i inicio eda MDL, MD2 acreva MEDIA Mp5, MD6, MD7, MDB + real MDS, NDS, MDS, MD7, MOS fim Perceba que para receber a média foram utiizadas no exemplo anterior oito varidveis. Com a técnica proposta neste capitulo é possivel ulllzar apenas uma variavel com a capacidade de armazenar os oito valores. Légica Estruturada para Programacao de Computadores | Pe 5.2 - Operagées Basicas com Matrizes Uma matriz de uma dimensdo deve ser representada por um nome e por uma dimensdo. Desta forma seria conveniente definir para o problema proposto ro topico anterior a matriz MD (para armazenar os valores das médias} com uma dimenséo para oilo elementos. Assim sendo, ela deveria ser representada computacionalmente como: MB]..8]. Isto significa que podem ser armazenados ‘em MD até oito elementos (de 1.4 8) Anteriormente foi definido 0 conceito de variével como sendo a regidio de meméria que seré utlizada pelo programa para armazenar um certo tipo de dado por um determinado espaco de tempo. No caso das mattizes (varidveis indexa- das}, pode ser ormazenado mais de um valor por vez, desde que os valores nao esiejam nas mesmas posicdes de meméria, pois cada posi¢do armazena apenas um valor por vez. Observe que a matriz MD[|..8] serd formada por oilo posigdes: ‘MOI, MDI2], MOIS), MDI4], MDISI, MDI6), MOI7] e MDIB) Desta forma poder-se-6 manipular uma quantidade maior de dados ov informagdes com pouco trabalho de processamento. Deve-se apenas considerar que com relacéo & manipulagdo dos elementos de uma matriz, ocorrera de forma: individualizada, pois néo é possivel efetuar a manipulagao de todos os elementos do conjunto ao mesmo tempo. Na uilizacGo de matrizes deve ser usada em portugués estrufurado a insiru- ¢ao eonjunto que indica a uilizagéo de ua matriz, tendo como sintaxe: VARIAVEL conjunto[] de , em que sera a indicacao dos valores inicial e final do tamanho da matriz e se o vetor em questo vai utlizar valores reais, inteiros ou caracteres. A Ieitura dos dados de uma matriz é processada passo a passo, um elemento por vez. A insirucGo de leitura é lela seguida da varidvel indexada mais 0 indice de controle. © processo de escrita é semelhante ao processo de leitura de seus elementos. Para esta ocorréncia deve ser utlizada a instrugdo escreva seguida da indicagdo da varidvel indexada e seu indice de controle. A seguir, so apresentados o diagrama de quadros figura 5.2} e a codifi- cago em portugués estruturado da leitura e escrita das médias dos oito alunos. Algoritmo 1. Ler ito valores para a média de cada aluno em uma variavel indexada, 2, Apresentor os valores das médias de cada aluno armazenados na varidvel indexada. 4 | Matrizes Unidimensionais Diagrama de Quadros Programa Média Inicio Tenet Lela wom Tohet Escreva MOI!) Fim Figura 5.2 - Diagrama de quadhos para a leitura e escrita de elementos de uma matriz Portugués Estruturado prograna MEDIA MD + conjunto[1..8] de real Tt dntelzo infeie para I de 1 até @ passo 1 faga deta MD[T) #im_pare para 1 do 1 até 8 passo 1 faga esereva HD) fim para fim Observe que apesar de o programa ficar maior em nomero de linhas, ficou mais compacto, além de possibiltiar uma mobilidade maior, pois se houver a necessidade de efetuar o calculo para um némero maior de alunos, basta dimen- sionar a matriz e mudar o valor final da instru¢do para. Observe que fanto a leitura quanto a escrita s6o processadas uma linha por vez. Desta forma, a matriz é conirolada pelo nimero do indice que foz com que cada entrada aconteca em uma posi¢do diferente da outra. Assim sendo, a matriz passa a ter todas as médias. A tabela seguinte mostra como ficardo os valores ‘armazenados na matriz Légica Estruturade pora Programacdo de Computadores | Pe Tenha cuidado para nao confundir 0 indice com o elemento, indice @ o ende- reco de alocagéo de uma unidade de matriz, enquanto elemento é o contetdo armazenado em um determinado endereco. 5.3 - Exercicios de Aprendizagem Para demonstrar a utiizacéo mais intensa do conceito de matrizes, conside- re como problemas os exemplos apresentados em seguida, 5.3,1 - Primeiro Exemplo Desenvolver um programa que efetve a leitura de dez elementos de uma matriz denominada A de uma dimensao. Construir uma matriz denominada B de mesmo fipo que a mattiz A, observando a seguinte lei de forrnagao: se 0 valor do indice da matriz A for par, o valor (elemento) deve ser multiplicado pelo valor 5; sendo o indice impar, deverd ser somado ao valor existente o valor 5. Ao final mostrar 0 conteddo da matriz B. Algoritmo Este exemplo de resolugéio mostra como fazer 0 tratamento da condi¢ao do indice. 1. Iniciar o contador de indice, variavel | como 1 em um contador até 10; 2. Leros 10 valores, um a um; 3. Verificar se 0 indice & par; se sim, multiplica por 5, se néo soma 5. Criar a matriz B; 4, Apresentar os conteddos das duas matrizes “4 | Matrizes Unidimensionais 73> Diagrama de Quadros Pregrama Vovica_inlee Deve ser verificado se 0 valor do indice | em um determinado momento & par (ele serd par quando dividido por 2 obiiver resto igual a zero). Sendo a Leia A condicéo verdadeira, seré implicada na matriz Bil] a multipicagéo do elemento da matriz Alll por 5. Caso o valor do indice | seja impar, sera implicada na matriz Bil] a soma do elemento da matriz All| por 5, ae Tent 70,4 Re2e"oNa N Bay ANS Ten 104 Escreva Bl) Fin Figura 5.3 - Diagrama de quadios para ‘oprimeiro exemplo, Portugués Estruturado programa VERIFICA_{ND: conjunto[1..10] de real ingete para I de 1 até 10 passo 1 faga lela al fim_para para I de 1 até 10 passo 1 faca ReT-2* (r div 2) ge (R= 0) entéo ne atm * eal +s fim_se fim para para I de 1 até 10 passo 1 faga escreva 5(T] fim para fim Logica Estruturade para Programagdo de Computadores | Pe 5.3.2 - Segundo Exemplo Desenvolver um programa que efetve a leitura de cinco elementos de uma matriz A de uma dimensdo. No final, apresente o total da soma de todos os elementos que sejam impares existentes dentro da matriz A Algoritmo Perceba que em relacao ao primeiro exemplo, este apresenta uma diferen- a: 0 primeiro pedia para verificar se o indice era par ou impar. Neste exemplo, esta sendo solicitado que se analise a condigéo do elemento ser impar e ndo do indice. Foi observado anteriormente para tomar cuidado e ndo confundir elemento com indice 1. Iniciar 0 contador de indice, varidvel | como 1 em um contador até 5; 2. Ler os 5 valores, um a um; 3. Veriicar se 0 elemento é impar; se sim efetuar a soma dos elementos; 4. Apresentar o total de todos os elemento impares da matiz. Diagrama de Quadros Observe que quando se faz mengéo ao indice, indica-se a varidvel que controla 0 contador de indice, e no caso do exemplo anterior, a variével |. Quando se faz mengGo ao el ‘ento, indica-se: Alll, pois desta forma esta se pegando o valor armazenado e néo a sua posi¢do de endereco, Programa Checa Elemento lens Lela Al Ten at Re reo moa s ep N [Soma «Soma + A Excrova Soma Fin Figura 5.4 - Diagrama de quadhos para o segundo exempla. “4 | matizes Unicimensionais 751> Portugués Estruturado programa CHECA ELEMENTO ‘A conjunto[1..5] de 2 inteize para Z de 1 até 5 passo 1 faca deia Atri fim para para I de 1 até 5 passo 1 faca Re A[T] - 2* (A(T div 2) ge (R <> 0) entéo + alr] fim_para eacreva SOMA im Se desejar, em seguida pode executar a primeira bateria (exercicio de fixa- Go 1) opresentada no final do capitulo para treinar a aplicacée do conceito de Matrizes unidimensionais, Depois continue deste ponto para poder fazer a segun- da bateria de exercicios, 5.4 - Classificagdo de Elementos © conceito de uiliizagdo de matrizes em programacdo é bastante amplo. Pode ser utilizado para resolver problemas de diversas situagées. Uma das situc- Bes mois peculiares é a necessidade de efetuar a ordenacGo de elementos em Uma matriz. Quando os elementos forem do tipo numérico, a ordenacdo pode ser crescente ou decrescente. Quando os elementos forem do tipo caraclere, a ‘ordenacdo pode ser ascendente ou descendente. Existem varios métodos para obter a ordenacdo de elementos de uma ma- ‘riz, Nesta obra, sera opresentado um método bastante simples de ordenacéo, que consiste na comparacéo de cada elemento com todos os elementos subse- qUentes. Sendo o elemento comparado menor para ordenacdo decrescente, ou maior para ordenagao crescente que o atual, ele seré trocado de posi¢ao com o ‘auiro elemento. Este método caracteriza-se por usar o conceito de permuta entre 08 valores (irocal Para demostrar este fipo de ago, imagine o seguinte programa: Elaborar um programa que efetve a leitura de cinco valores numéricos intei- ros em uma matriz A de uma dimensdo. Apresentar os valores da matriz em ‘ordem crescent Logica Estruturada para Programagao de Computadores | Pe 4176 Algoritmo Considere para a solucéo do problema proposto a explicagéio dos valores ‘apresentados na tabela seguinte: 2 3 4 5 5 [3 Observe que os valores esto armazenados na ordem: 9, 8, 7, 5e3¢ deverao ser apresentados na ordem 3, 5, 7, 8 @ 9. Para efetuar o processo de ordenagGo, é adequado fazer o uso do método de propriedade distributiva para gue todos os valores sejam combinados entre si, de forma que nébo falte nenhuma combinacdo, tampouco ocorra repetigdio de uma combinacGo [é estabelecida, Desta forma, 0 elemento que estiver em All] deve ser comparado com os elementos que estiverem em A\2I, Al3], Ald] e AISI. Depois, o elemento que estiver em Al2] no necessita ser comparado com o elemento que estiver em Al), pois id foi anteriormente comparado, passando a ser comparado somente com os elementos que estiverem em AIS], Ald] e AIS]. Na seqUéncia, o elemento que estiver em AIS] 6 comparado com os elementos que estiverem em Ald] e AISI, e por fim 0 elemento que estiver em Al4] é comparado com o elemento que estiver em AIS]. Seguindo este raciocinio, basta comparar o valor do elemento armazenado em All (valor 9} com o valor do elemento armazenado Al2] (valor 8). Se o primeiro for ‘Maior que 0 segundo, entio trocam-se os seus valores. Como a condigéio de troca & verdadeira, o elemento 9 de All] é maior que o elemento 8 de Al2]. Passa-se para All] o elemento 8 e para Al2] passa-se 0 elemento 9, desta forma os valores dentro da matriz passam a ter a seguinte formacéo: Mate: A indice Elemento. 1 8 [2 9 3 7 [4 5 5 3 4 | Matrizes Unidimensionais 77> Em seguida, usando a mesma regra, o valor atual da posi¢ao All! (no caso, valor 8) deve ser comparado com o préximo valor apés a sua titina comparacéo, ou seja, deve ser comparado com o elemento AI3). Assim sendo, verifica-se que o tual valor do elemento de All {valor 8) 6 maior que o valor do elemento de AI3] (valor 7), Efetua-se entdo a sua troca, ficando All] com 0 valor 7 e AI3] com o valor 8. Desta forma, os valores da matriz passam a fer a seguinte formagao Matiz: A indice ‘Elemento. 7 2 9 3 8 4 5 5 3 Agora devem ser comparados os valores dos elementos armazenados nos posi¢gdes All] (valor 7} e Al4) valor 5). O valor do elemento 7 de All] € maior que o valor do elemento 5 de Ald), Eles sGo trocados, passando All] a possuir 0 valor 5 e Ald] a possuir o valor 7. A matriz passa a ter a sequinte formacao: Elemento Observe que até aqui os elementos comparados foram sendo trocados de posicao, estando agora em All] o elemento de valor 5 € que seré mudado mais uma vez por ser maior que o valor do elemento 3 armazenado em Al5). Desta forma, a matriz passa a ter a seguinte formagao: (Mattia: A indice I Logica Estruturada para Programagdo de Computadores | A pariir deste ponto o elemento de valor 3 armazenado em Aff] néo necesita mais ser comparado. Assim sendo, deve ser pego o atual valor do elemento da posicdo Al2] e comparado sucessivamente com todos os outros elementos resiantes. Desta forma, 0 valor do elemento armazenado em Al2] deve ser comparado com os elementos armazenados em A\3], Ald] e AS], segundo a regra do oplicagao de propriedade distributiva Comparando o valor do elemento 9 da posi¢ao AI2] com o elemento 8 da posigéo Al3] e efetuando a troca de forma que 8 esteja em Al2] e 9 esteja em AI3), ‘ matriz passa a ter a seguinte formacao: ‘Mattia: A indice Elemento. 1 3 2 8 3 io 4 - 7 5 5 Em seguida, o atual valor do elemento de Al2] (valor 8) deve ser comparado com 0 valor do elemento de Ald] (valor 7). 8 € maior que 7 € sdo trocados, ficando Al2] com 7 e Ald] com 8. Desta forma, a matriz passa a ter a seguinte formacao: Elemento 1 3 7 9 iD 5 EntGo continua 0 processo de comparacdo e troca. O atual valor do elemento na posicdo Al2] é 7 e sera comparado com o valor do elemento A[5] que é 5. SG0 estes valores trocados, passando A\2I ficar com o elemento 5 e AIS] ficar com o elemento 7, conforme indicado em seguida: Matiz: A indice Elemento 1 3 2 5 3 9 4 8 5 7 4 | Mattizes Unidimensionais Note que até este ponto a posigdo AI2] foi comparada com todas as suas posigdes subseqlenies, néo tendo mais nenhuma comporacéo para ela. Agora Serd efeluada a comparacdo da préxima posicdo com 0 restante, No caso, de Al3) com Ala] e Al5}, Sendo assim, o valor do elemento da posicdo AI3] (valor 9) sera comparado com o valor da posicdo AIA] (valor 8), Serdo estes trocados, ficando Al3) com 8 e Ala] com 9, conforme em seguida: Matiz: indice Elemento 1 3 [2 5 3 8 4 9 _ 5 7 A seguir, sera comparado 0 valor do elemento da posi¢éo Al3} valor 8) com © valor do elemento da posicdo AIS] (valor 7). Sendo © primeiro maior que © segundo, ocorre a troca. Desta forma A(3) passa a possuir o elemento 7 e AIS] passa a possuir 0 elemento 8, como indicado em seguida Matiz: A indice Elemento, 1 3 2 _[s_ 3 _ {7 4 9 5 8 Apés efetuar todas as comparagées necessdrias de Al3] com Ald) e AS], fica somente a dltima comparagéo que € Ald] com A\5], cujos valores sdo trocados, passando Ald] possuir o elemento de valor 8 e AIS] possvir 0 elemento de valor 9, ‘como mostrado em seguida: ‘Matra: A Indice Elemento, 1 3 2 5 3 7 a 8 5 9 Légica Estruturade para Programacao de Computadores | P Desta forma, pode-se notar que a referida ordenagao foi executada, apre- sentando os elementos da matriz em ordem crescente. Para dados do tipo caractere 0 processo 6 o mesmo, uma vez que cada letra possui um valor diferente da outa. A letra “A, por exemplo, tem ‘valor menor que a letra “B", e assim por diante. Se a letra “A” moidscula for comparada com a letra“a" mindscula, terdo valores diferentes. Cada FFsscarnche | Caractere € guardado na meméria de um computador segundo 0 valor {OBSERVACAO} Tum eécgo que recebe © nome de ASC Vamerican Standard Code for Information Interchange - Cédigo Americano Padrdo para Troca de Informacdes) E & com base nessa tabela que o proceso de ordenacéi trabalho, pois cada caraciere fer um peso, um valor previamente deier- minado, segundo este padrao. Diagrama de Quadros A seguir, é apresentado o diagrama de quadros da entrada, processamento de ordenagao e apresentacao dos valores ordenados {figura 5.5}. Mente para dois pontos: 1. primeiro ponto a ser observado 6 a utlizagéo de uma segunda varidvel para controlar o indice subseqiente no processo de ordenacGo, no caso varidvel J, Observe que a varidvel /é iniciada pela instrugao para como: I de 1, e depois pela insirucéo para que esté sendo encadeada 4 primeira e iniciando a variével J, como: J de I + 1. Isto implica na -_guinte sequéncia: —————— Quando I for Jseré 1 2,3,4,5 Observe que somente quando a varidvel /atinge 0 valor 5 & que este laco de repeticéo se encerra, retornando ao laco de repeticao da varidvel J acrescentando mais um em /até que | atinja o seu limite € ‘ambos 08 lagos sejam encerrados. Quando @ varidvel / for 1, a varidvel /serd 2 e contara até 5. Ao final deste ciclo, a varidvel /@ acrescentada de mais 1, tornando-se 2; assim sendo, a varidvel J passa a ser 3. Quando a varidvel /voltar a ser 5 novamente, a varidvel /passa a ser 3 e a varidvel /passa a ser 4. Este Ciclo vai ser executado até que por fim a varidvel /seja 4 e a varidvel J <4 | Matrizes Unidimensionais all> seja 5, © sera comparado o penittino elemento com o seu elemento subseqiente, no caso, o dlimo, (0 segundo ponto a ser observado é a utlizacéio do algoritmo de troca, Utiizado junto da instrugdo de decisdo se All > ALJ entiio. Apés a verificacéo desta condigdo, sendo o primeiro valor maior que o segundo, efetua-se entao a sua troca com 0 algoritmo: Xe All All AU) AUER X Considere 0 elemento Alll com o valor 9 [posi¢ao 1) e o elemento AU com o valor 8 (posigGo 2. Apés a troca, o elemento All deve estar com o valor 8 e 0 elemento AU) com o valor 9. Para conseguir este efeito, 6 necessaria a ullizaco de uma varidvel de apoio, a qual esta sendo denominada x. Para que 0 elemento All] fique livre para receber o valor do elemento ‘All, X deve ser implicado pelo valor do elemento All. Assim sendo, X passa a ter o valor 8. Neste momento pode-se implicar o valor de AU! fem Alll. Desta forma o elemento All passa a possuir o valor 9. Em seguida, 0 elemento ALI é implicado pelo valor que esta em X. Ao final deste processo, ter-se-6 All] com o valor 8 AU] com valor 9. Programa Ordenagio Inicio Tenet Teall Tenad Jeri st All> AL x Portugués Estruturado Observe em seguida a codificagéio em portugués estruturado da rotina de ordenagéo. Atente para o detalhe das instrugées para encadeadas no nivel de processamento. Lembre-se de que no caso de encadeamento, seré executada primeiro a rotina mais interna, no caso a rotina de contagem da varidvel J, pasando o processamento para a rofina mais externa, quando a rotina mais, interna fechar o seu ciclo programa 0: SNAGKO At conjunto[1..5] de inteizo inicio (Rotina de entrada de dados) para I de 1 até 5 passo 1 faga deta alr fim_pare Processanento de ordenacéo} para Ide 1 at 4 paseo 1 faga para J de I+ 1 até 5 paseo 1 faca ge (A[T] > A[JI} entéo xe alr AUT] © Alay At] © x fimse fim_para para Ido 1 até 5 passo 1 faca escreva A(z) fim_para fim Um detalhe a ser observado neste exemplo é a ullizagéo dos comen- trios colocados entre as chaves. Comentarios deste tipo servem para OBSERVAC 7 documentar 0 programa, faciitando a interpretagdo de um determinado trecho. 4 | Mattizes Unidimensionais 83> 5.5 - Métodos de Pesquisa 0 trabalho com matrizes envolve muitas vezes 0 uso de grandes tabelas, dificultando localizar um determinado elemento de forma rapida. Imagine uma matriz possuindo 4000 elementos. Seré que vocé conseguiria encontrar rapida- mente um elemento desejado de forma manual, mesmo estando a lista de elementos devidamente ordenada? Cerlamente que nd. Para solucionar este tipo de problema, vocé pode fazer pesquisas em matrizes com 0 uso de progra- magdo. Serdo apresentados dois métodos para efetuar pesquisa em uma matriz, sendo 0 primeiro o sequencial e o segundo o método de pesquisa bindria, 5.5.1 - Pesquisa Seqiencial primeiro método consiste em efetuar a busca da informacao desejada «partir do primeiro elemento sequencialmente até o dltimo. Localizando a infor- magéo no caminho, ela é apresentada. Este método de pesquisa é lento, po- rém eficiente nos casos em que uma matriz possua seus elementos desorde- nados. Considerando a necessidade de trabalhar com uma matriz com 10 nomes, Veja em seguida o algoritmo, diagrama de quadros e codificacdo em portugués estruturado para efetuar uma pesquisa sequencial na referida matriz. Algoritmo © algoritmo indicado em seguida estabelece a entrada de 10 nomes e a ‘apresentacdo de nomes que venham a ser solicitados durante a fase de pesqui- so. 1. Iniciar um contador e pedir a leitura de 10 nomes; 2. Criar um lago que efetue a pesquisa enquanto o usuério assim o dese- jar. Durante a fase de pesquisa, deve ser solicitada a informacao a ser pesquisada. Essa informacéo deve ser comparada com o primeiro elemento; sendo igual mostra; caso contrario, avanca para o préximo Se no achar em toda lista, informar que ndo existe o elemento pesqui- ‘sado; se existir, deve mostré-lo 3. Encerrar a pesquisa quando desejado. Logica Estruturada pora Programagio de Computadores | D> Diagrama de Quadros Programa Pesquisa_Sequencial Inicio Tet i07 Leia Nomelt) Resp «Sint Resp «Sir Tela Pea Tet ‘Acha Fake, T= 10 E.Acha= Fa, esq = Norell) N s ‘Achae tent Vredadeiro, Beha = Verdadere, N s Escreva Escreva Pesq esa, "Nao Foi | ‘FoiLocalzado Lecalizado" na Posigéo' 1 Lela Resp Fim Figura 5.6 - Diagrama de quadros para o pesquisa seqdencial Portugués Estruturado programa PESQUISA_SEQUENCIAI NOME + conjunte[1..10] de caractere z ¢ dntedro E59 : caractere caractere légico para r del até 10 passo 1 faga leia NOMEIT) fim para RESP = “SIM" fenquanto (RESP = "SIu") faga (Inicio da rotina de pesquisa) | Matrizes Unidimensionais 851> “Teia PES rel ACHA © .Palzo ‘enguanto se (PESO 10) NOME (AHA = .Falso.) faga 1}) entée ACHA © .Verdadeizo fimse ‘#4m_enquanto ge (ACHA = izado* (Pim da rotina de pesquisa} escreva "Deseja continuar leia RESP fim _enquanto fim Anteriormente foi montada a rofina de pesquisa sequencial empregada em um contexto pratico. Observe o trecho seguinte que executa a pesquisa com seus comentarios: |. tela PESO 1 2 re1 3. ACHA © Fal: 4 enquanto (I ACHA = .Falso.) faga 5. se (PESO TI) entao 6 ACHA © .V 7. senso @ rere. 9. fimo 10. #im_enquanto Tl, ge (ACHA = .Verdadeizo,) entéo 12, escreva “foi localizado na posicdo", 1 13, sengo 1A esczeva PESQ, “no foi localiza 15. £4 Na linha 1, é solicitado que se informe o nome a ser pesquisado na variével PESQ, em seguida, na linha 2, é setado o valor do contador de indice como 1 e na linha 3, a varidvel ACHA é setada como tendo um valor falso. A linha 4 apresenta a instrugdo enquanto, indicando que enquanto o valor da variével | for menor ou igual a 10 e simultaneamente o valor da varivel ACHA for falso, deve ser processado o conjunto de instrugées situadas nas linhas 5, 6, 7, 8 9 4186 Logica Estruturada para Programacdo de Computadores | D> Neste ponio, a instrugdo se da linha 5 verifica se o valor da varidvel PESG é igual ao valor da variavel indexada NOMEMI, e se for igual, é sinal que o nome foi encontrado. Neste caso, a varidvel ACHA passa a ser verdadeira, forgando a execusdo da linha TI, uma vez que uma das condigées do lago enquanto da linha 4 se tornou falsa. Na linha 11, 6 confirmado se a variével ACHA esta mesmo com o valor verdadeiro. Sendo esta condicdo verdadeira, é apresentada a mensagem da linha 12 Caso na linha 5 seja verificado que o valor de PESQ néo é igual a NOMEMI, ser entéo incrementado 1 4 varidvel |. Seré executada a préxima verificagtio de PESQ com NOMEI2I, e assim por diante. Caso o processamento chegue até o final @ no seja encontrado nada, a variével ACHA permanece com valor falso. Quando nalisada pela linha 11, sera entao falsa e apresentard a mensagem da linha 14 Observe que a variével ACHA exerce um papel importante dentro da rotina de pesquisa, pois serve co..10 um piv6, estabelecendo um valor verdadeiro quando uma determinada informacao é localizada. Este fipo de tratamento de variavel 6 conhecido pelo nome de FLAG [Bandeira}. A varidvel ACHA é o flag, podendo dizer que, co comecar a rating, « bandeira estava “abaixada’ - falsa; quando a informa: Go & encontrada, a bandeira é “levantada’- verdadeira, indicando a localizagco da informagao desejada. 5.5.2 - Pesquisa Bindria segundo método de pesquisa é em média mais rapido que o primeiro, porém exige que a matriz esteja previamente classificada, pois esse método “divide” a lista em duas partes e “procura” saber se a informacdo a ser pesquisada esi6 acima ou abaixo da linha de divisto. Se estiver acima, por exemplo, toda a metade abaixo é desprezada. Em seguida, se a informacao nao foi encontrada, & novamente dividida em duas partes, e pergunta se aquela informagdo esta acima ‘ou abaixo, e assim vai sendo executada até encontrar ou nao a informacao pes- quisada. Pelo fato de ir dividindo sempre em duas partes 0 volume de dados é que ‘0 método recebe a denominacéo de pesquisa binaria. Para exemplificar a utiiza- ‘GGo deste tipo de pesquisa, imagine a seguinte tabela, indice Elemento. 1 10 2 W 3 2 4 5 5 7 6 7 18 20 4 | Matrizes Unidimensionais 87|> ‘A tobela esta representando uma matriz de uma dimenséo com 7 elemen- tos. Deseja-se neste momento efetuar uma pesquisa de um dos seus elementos, No caso, serd escolhido o elemento 20, sendo este 0 iltimo registro da tabela proceso bindrio consiste em pegar o némero de registros mais um e dividir por dois. Sendo assim, (7 + 1) div 2 = 4; 0 que interessa de fato é somente 0 valor do ‘quociente inteiro. Endo a tabela fica dividida em duas partes, como em seguida: Primeira parte apés primeira diviséo indice Elementos 1 10 2 fi [3 fz fas Segunda parte opés primeira divistio indice Elementos. 5 v7 6 18 - 7 [20 ‘Apés dividir a tabela em duas partes, deve ser verificado se a informacao 20 esté na primeira ou na segunda parle. Detecta-se que 20 esta na segunda parte. Desta forma despreza-se a primeira e divide-se em duas pares novamente a segunda parte da tabela. Como sao 4 elementos divididos por 2, resultam duos tabelas, cada uma com dois elementos, conforme em seguida: Primeira parte apés segunda divistio indice Elementos: 4 15 5 7 Segunda parte opés segunda divisdio Trica [Bementes é Tis 7 20, Logica Estruturada para Programacdo de Computadores | D> Apés esta segunda divisdo, verifica-se em qual das partes 20 esta situado. Veja que esta na segunda parte; despreza-se a primeira e divide-se a segunda parte novamente por dois, sobrando um elemento em cada parte: Primeira parte apés terceira diviséo indice Elementos 6 18 Segunda parte apés terceira divistio indice Elementos 7 20 Apés a terceira diviso, 20 é encontrado na segunda parte da tabela. Se estiver sendo pesquisado o elemento 14, ele ndo serd apresentado por nao existir. Considerando a necessidade de trabalhar com uma matriz com 7 elementos numéricos, veia em seguida 0 algoriimo, diagrama de quadros e codificagéo em portugués esiruturado para efetuar uma pesquisa bindria na referida matriz. Algoritmo © algoritmo indicado em seguida estabelece a entrada de 7 valores numéricos e respectiva ordenacdo crescent. Em seguida efelua a apresentacao somente dos valores que venham a ser solicitados durante a fase de pesquisa Iniciar um contador, pedir a leltura dos sete valores numéricos e colocé- -los em ordem crescente; 2. Criar um laco que efetue a pesquisa enquanto 0 usuario assim 0 desejar. Durante o fase de pesquisa, deve ser solicitada a informacao a ser pesquisada. Essa informacéo deve ser comparada, uilizando método de pesquisa binéria. Sendo igual mostra; coso conirario, avanga para 0 préximo, Se nao achar em toda lista, informar que néo existe o elemento pesquisado; se exist, deve mostra-lo; 3. Encerrar a pesquisa quando desejado, Diagrama de Quadros © diagrama seguinte concentra-se somente no trecho de pesquisa binério, uma vez que os demais algoritmos jé séo conhecidos. 4 | Matrizes Unidimensionais 89> programa PE: para I de 4/90 Resp "Sin Resp «Sint Leia Pes 1 ‘Ache «Fao, CComego <= Final €,Acha = Faso Meio «= (Comaga + Final O1V2 Pesq= A (Meo] N pesa 4 Matrizes Unidimensioncis Tete AtzT fim para (ordenagao} para I de 1 até 6 passo 1 faca para J de I +1 até 7 passo 1 face ise (A[I] > ALJ]) enti xe AU AUT © All A] © x fim_se fim_para fim para (Trecho de pesquisa) enquanto (RESP 1M") faga fescreva “Entre o elemento a ser pesquisado: leis PESO ‘oMECO + 1 ACHA © .Faleo. fenquanto (CoM F = .Falso.) faga A[MBIO}) entao 0}) ento #im_enguanto se (ACHA = .Verdadeizo.) entéo escreva PESO, * foi localizade na posicéo fescreva PESQ, * ndo fimse oi Localizado* escreva “Deseja continuar leia 2 (Pim do trecho de pesquisa) #im_enquanto fim ‘Anteriormente foi montada a rotina de pesquisa empregada dentro de um contexto. Observe em seguida o trecho que executa a pesquisa com seus comen- tatios: Tela PES coMEco @ 1 A = .Falso.) faga MEIO € (COMEC se (PESQ = A[METO}) entdo 1 2 3. 4, 5. 6 7. 8. ACHA © .Verdade: 9. senko 10. se (PESO < A(MEIO]) ontéo M. FINAL © MEIO - 1 12, senéo 13. COMBO © MEIO + 1 14, fimse 15. fim_co 16. fim enquanto A= .Verdadeizo.) entdo falizado na posicko", MEIO V7. 8e (ac! 18. esezeva PESO, 19. senko 20. escrava PESO, “ndo foi localizado 21, fim_se No linha 1, é solicitado que seja informado o dado a ser pesquisado. As linhas 2 e 3 inicializam as varidveis de controle COMECO com 1 e FINAL com 7. A linha 4 iniciaiza 0 flag ACHA. A linha 5 apresenta a insirucdo que mantera a pesquisa em execucdo enquanto 0 COMEGO for menor ou igual ao FINAL & simultaneamente o flag ACHA seja falso. Assim sendo, 0 processamento divide a fabela ao mefo, conforme insirucGo na linha 6, em que | que o comeco da tabela & somado com 7 que é 0 fim da tabela, resultando no total 8 que dividido por 2 resulta 4 que é o meio da tabela, Neste ponto, a tabela esté dividida em duas partes. A instrucco da linha 7 verifica se o valor fornecido para PESQ é igual ao valor armozenado na posi¢ao [Nl Se for, 0 flag é setado como verdadeiro sendo em seguida apresentada a mensagem da linha 18. Se condicéo de busca néo for igual, pode ocorrer uma de duos situacées. A primeira situacéio em que a informacdo pesquisada esté numa posigdio ‘acima da atual no caso Ald], ou seja, o valor da variével PESQ é menor que o valor de Ald] finha 10). Neste caso, a varidvel FINAL deve ser implicada pelo valor da variavel MEIO subtraido de 1 (linha Ii, ficando a variével FINAL com valor 3. Se for 4192 Logica Estruturada para Programacdo de Computadores | Pe esta a situacdo ocorrida, serd processada a linha 5 que efetuaré novamente o laco pelo foto de o valor 1 da variével COMECO ser menor que um, igual ao valor 3 da varidvel FINAL. A insirucéo da linha 6 divide a primeira parte da tabela em mais duas partes, desta forma, o COMECO \walor 1) da tabela é somado com 3, resultan- do 4, e dividido por 2 resulta 2 (sendo considerada a parte inteira do resultado do divis6o}, que é 0 meio da primeira parte da tabela. [A segunda situacéo pode ocorrer caso a informacdo pesquisada esteja absixo do meio da tabela, ou seja, o valor da variavel PESQ @ maior que o valor de ‘Al4] linha 10}. Neste caso, a varidvel COMECO deve ser implicada pelo valor da variével MEIO somado com 1 {linha 13}, ficando a variavel COMEGO com valor 5. Se for esta a situacdo ocorrido, sera processada a linha 5 que efetuara novamente 0 aco pelo fato de o valor 5 da variavel COMECO ser menor que um, igual ao valor 7 da varidvel FINAL. A instrugdo da linha 6 divide a segunda parte da tabela em mais duas partes, desta forma, 5 & somado com 7, resultando 12 que dividide por 2 resultard 6, que é o meio da segunda parte da tabela. Seja qual for a situacéo execulada, a rofina efelua 0 processo de divisdo até encontrar uma das extremidades de tobela. Desta forma, se nada for encontrado ‘até este momento, a rotina avisa que 0 referido elemento ndo foi localizado, ‘A seguir, faca os exercicios da segunda bateria lexercicio de fixagdo 2) para treinar a aplicacéo dos conceitos de pesquisa e ordenacdo. .6 - Exercicios de Fixagdo 1. Desenvolva os diagramas de quadros e codificacdo em portugués estru- turado dos seguintes problemas: a) Ler 10 elementos de uma matriz tipo vetor e apresenté-los. b) Ler 8 elementos em uma matriz A tipo vetor. Construir uma matriz B de mesma dimensdo com os elementos da matriz A mulliplicados por 3. O elemento Bill deve ser implicado pelo elemento All] * 3, 0 elemento BI2) implicado pelo elemento Al2] * 3 @ assim por diante, até 8. Apresentar a matriz B. ) Ler duas matrizes A e B do tipo vetor com 20 elementos. Construir uma matriz C, em que cada elemento de C deve ser a subtracéo do elemento correspondente de A com B. Apresentar a matriz C ) Ler 15 elementos de uma matriz A do tipo vetor. Construir uma matriz B de mesmo tipo, observando a seguinte lei de formacéio: Todo elemento de B deve ser o quadrado do elemento de A correspondente”, Apresentar as matrizes A e B. 4 | Maitizes Unidimensionais 93> @) Ler uma matriz A do tipo vetor com 15 elementos. Construir uma matriz B de mesmo tipo, de modo que cada elemento da matriz B seja 0 fatorial do elemento correspondente da matriz A. Apresentar ‘as matrizes Ae B. Ler duas matrizes A e B do tipo vetor com 15 elementos cada. Construir uma matriz C, sendo esta a juncéo das duas outras ‘matrizes. Desta forma, C deve ter 0 dobro de elementos, ou seja, 30. Apresentar a matriz C. 9) Ler duas matrizes do tipo vetor, sendo A com 20 elementos e B com 30 elementos. Construir uma matriz C, sendo esta a juncéo das duas outras matrizes. Desta forma, C deve ter a capacidade de ‘armazenar 50 elementos. Apresentar a matriz C A) Ler 20 elementos de uma mattiz A tipo vetor e construir uma matriz 8 de mesma dimensdo com os mesmos elementos da mattiz A, os quais devem estar invertidos. Ou seja, 0 primeiro elemento de A Passa a ser 0 Ultimo de B, o segundo elemento de A passa a ser 0 Pentltimo de B e assim por diante. Apresentar as matrizes A e B i) Ler trés matrizes (A, B eC) de uma dimensdo com 5 elementos cada. Construir uma matriz D, sendo esta a jungdo das trés outras matrizes. Desta forma D deve ter o triplo de elementos, ou seja, 15. Apresentar os elementos da matriz D. ‘ i) Ler uma matriz A do tipo vetor com 20 elementos. Construir uma matriz B do mesmo tipo da matriz A, e cada elemento de 8 deve ser © somatério do elemento correspondente da matriz A. Se o valor do elemento, de A fl for 5, B Ml] deve ser 15 e assim por diante. Apresentar a matriz B. k) Ler uma matriz A do tipo vetor com 10 elementos positivos. Construir uma matriz B de mesmo tipo e dimensGo, e cada elemento da matriz B deve ser o valor negative do elemento correspondente da matriz A. Desta forma, se em All] estiver armazenado o elemento 8, deve estar em Bil] 0 valor -8, e assim por diante. Apresentar os ‘elementos da matriz B. Ler uma matriz A tipo vetor com 10 elementos. Consiruir uma matriz B de mesmo tipo, e cada elemento de B deve ser a metade de cada elemento de A. Apresentar os elementos das matrizes A e B. ‘m) Elaborar um programa que efetue o célculo de uma tabuada de um ndmero qualquer e armazene os resultados em uma matriz A de uma dimenséo para 10 elementos. Apresentar os valores armaze- nados na matriz. Logica Estruturada para Programacéo de Computadores | D> n) °) P) a 3) 4 Matrizes Unidimensionais Ler 20 elementos {valores reais) para temperaturas em graus Celsius em uma mattiz A de uma dimensGo do tipo vetor. O programa deve apresentar a menor, a maior e a média das temperaturas lidas. Ler 25 elementos valores reais) para temperaturas em graus Celsius em uma matriz A de uma dimensdo do tipo vetor, Construir uma matriz B de mesmo tipo e dimensdo, e cada elemento da matriz B deve ser a converséo da temperatura em graus Fahrenheit do elemento correspondente da matriz A. Apresentar as matrizes Ae B, Ler 12 elementos inteiros para uma matriz A de uma dimensdo do {ipo vetor. Construir uma matriz B de mesmo tipo e dimensao, ‘observando a seguinte lei de formagéo: "Todo elemento da matriz A que for impar deve ser multiplicado por 2; caso contrario, 0 elemento da matriz A deve permanecer constante”. Apresentar a matriz B. Ler 15 elementos reais para uma matriz A de uma dimenséo do tipo velor. Consiruir uma matriz B de mesmo tipo e dimensdo, observando a seguinte lei de formaco: “Todo elemento da matriz A que possuir indice par deve ter seu elemento dividido por 2; caso contrario, o elemento da matriz A deve ser multiplicado por 1.5". Apresentar o matriz B. Ler 6 elementos (valores infeiros) para as matrizes A e B de uma dimensGo do tipo vetor. Consiruir as matrizes C e D de mesmo fipo € dimensGo. A matriz C deve ser formada pelos elementos de indice impar dos matrizes Ae B, e a matriz D deve ser formada pelos elementos de indice par das matrizes A e B. Apresentar as matrizes ced Ler duas matrizes A e B de uma dimensdo com 6 elementos. A matriz A deve aceitar apenas a entrada de valores pares, enquanto a matriz B deve aceitar apenas a entrada de valores impares. A entrada das matrizes deve ser validada pelo programa e néo pelo usuério. Consiruir uma matriz C de forma ela seja a jungéo das matrizes A e B, de modo que a matriz C contenha 12 elementos. Apresentar a matriz C Ler duas matrizes Ae B de uma dimensdo com 10 elementos. A matriz A deve aceitar apenas a entrada de valores que sejam divisiveis por 2 e 3, enquanto a matriz B deve aceitar openas a enirada de valores que sejam miltiplos de 5. A entrada dos matrizes deve ser validada pelo programa e néo pelo usuario. Construir uma matriz C de forma que seja a jun¢éo das matrizes Ae B, de modo que a matriz C contenha 20 elementos. Apresentar a matriz C. ¥ a) b) a a 9) Ler duas matrizes Ae B de uma dimensao com 12 elementos. A matriz A deve aceitar apenas a entrada de valores que sejam divisiveis por 2 ou 3, enquanto a matriz B deve aceitar apenas entrada de valores que no selam miltiplos de 5. A entrada dos matrizes deve ser validada pelo programa e nao pelo usuério, Construir uma mattiz C de forma que seja a juncdo das matrizes Ae B, de modo que a matriz C contenha 24 elementos. Apresentar a matriz C 2. Desenvolva os diagramas de quadros e codificago em porlugués esiruturado dos seguintes problemas: Ler 12 elementos de uma mairiz tipo vetor, colocé-los em ordem. decrescenie e apresentar os elementos ordenados. Ler 8 elementos er uma mattiz A tipo vetor. Construir uma matriz B de mesma dimensdo com os elementos da matriz A muliplicados por 5. Montar uma rotina de pesquisa bindria, para pesquisar os elementos armazenados na mattiz B. Ler uma matriz A do tipo vetor com 15 elementos. Construir uma matriz B de mesmo tipo. Cada elemento da matriz B deve ser o fatorial do elemento correspondente da matriz A. Apresentar os elementos da mattiz B ordenados de forma crescente. Ler uma matriz A com 12 elementos. Apés sua leitura, colocar os seus elementos em ordem crescente. Depois de ler uma matriz B também com 12 elementos, colocar os elementos de B em ordem crescente. Construir uma matriz C, em que cada elemento de C é a soma do elemento correspondenie de A com B. Colocar em ordem decrescente a matriz C e apresentar os seus valores. Ler duas matrizes do tipo vetor A com 20 elementos e B com 30 elementos. Consiruir uma matriz C, sendo esta a juncdo das duas outras matrizes, Desta forma, C deve ter a capacidade de armaze- nar 50 elementos. Apresentar os elementos da matriz C em ordem decrescente. Ler 30 elementos de uma matriz A do tipo vetor. Construir uma matriz B de mesmo tipo, observando a seguinte lei de formacao: Todo elemento de B deve ser 0 cubo do elemento de A correspon- dente”. Montar uma rotina de pesquisa seqUencial, para pesquisor ‘os elementos armazenados na matriz B. Ler 20 elementos de uma matriz A tipo vetor e construir uma matriz B de mesma dimensto com os mesmos elementos de A acrescen- tados de 2. Colocar os elementos da matriz B em ordem crescente Lagiea Estruturada para Programagdo de Computadores | > hy ‘Montar uma rofina de pesquisa bindrio, para pesquisar os elemen- tos armazenados na matriz B. Ler uma matriz A do tipo vetor com 20 elementos negatives, Construir uma matriz B de mesmo fipo e dimensdo. Cada elemento da matiz B deve ser o valor positive do elemento correspondente da matriz A. Desta forma, se em All estiver armazenado o elemento -3, deve estar em Bill 0 valor 3, e assim por diante. Apresentar os elementos da matriz B em ordem decrescente. Ler uma matriz A tipo vetor com 15 elementos. Construir uma matriz B de mesmo tipo. Cada elemento de B deve ser a metade de cada elemento de A. Apresentar os elementos das matrizes A em ordem decrescente e os elementos da matriz B em ordem crescent. Ler duas matrizes A e B do tipo vetor com 15 elementos cada, Construir duas outras matrizes C e D de mesmo tipo. Cada elemento da matriz C deve ser 0 somatorio do elemento correspondente da matriz A, e cada elemento da matriz D deve ser 0 fatorial do elemento correspondente da matriz 8. Em seguida construir uma matriz E, que deve conter a diferenga dos elementos das matrizes C e D com a soma dos elementos das matrizes A e B. Apresentar os elementos da matriz E em ordem crescent. 4 | Matizes Unidimensionais, 71> Logica Esiruturada para Programagao de Computadores | D> CAPITULO Matrizes Bidimensionais Este capitulo apresenta a utiizagao de tabelas em memérias com mais de uma dimensdo. Neste sentido ser dado énfase ao conceito de utilizagao das ma- trizes bidimensionois. 6.1 - Matrizes com Duas Dimensdes Anteriormente, foi explicado o uso de variéveis indexadas com apenas uma dimenséo (uma coluna e varias linhas}. A partir deste ponto, serdo apresentadas tabelas com mais colunas. Sendo assim, teremos posigdes indexadas nos sentidos horizontal e verfical. Desta forma, essas tabelas sio denominadas matrizes bial- mensional. ‘A mattiz de duas dimensées, por se relacionar diretamente com a ullizagdo de fobelas, é a estrutura mais comumente ufilzada. Matrizes com mais de duas dimensées sao também utlizadas, porém com menos frequéncia, Sabendo mani- pular adequadamente uma matriz de duas dimensées, seré muito facil utilizar matrizes que tenham trés, quatro ou mais dimensées. Um importante aspecto a ser considerado & que na manipulacéo de uma matriz de uma dimensdo utliza-se apenas um lago. No caso de matrizes com mais dimensées, deve ser uillzado 0 nimero de lagos relative ao tarnanho da dimenséio atribuida a uma matriz, Desta forma, uma matriz de duas dimensées deve ser con- frolada com dois lagos, uma matriz de trés dimensdes deve ser controlada com {1s lagos e assim por diante. Em matrizes de mais de uma dimensdo 0s seus elementos sao também manipulados de forma individualizada, sendo a referéncia feita sempre por meio de dois indices: 0 primeiro para indicar a linha e o segundo para indicar a coluna, Desta forma, TABELAI2,31 indica que esta sendo feita uma referéncia ao elemento ‘armazenado na linha 2 coluna 3. 4 | Maries Bidimensioncis 6.2 - Operagdes com Matrizes de Duas Dimensdes Uma matriz de duas dimensées esta sempre fozendo mengéo a linhas e colunas e é representada por seu nome e seu famanho (dimensdo} entre colchetes Besta forma, € uma matriz de duas dimensdes a esirutura TABELAIT. 8,..5], Cujo nome 6 TABELA, possuindo um tamanho de 8 linhas (de 1 0 8) e 5 colunas (de 1a 5), ou sei0, € uma matriz de 8 por 5 (8 x 5). Isto significa que podem ser armazenados ho mattiz TABELA até 40 elementos. A figura 6.1 apresenta a matriz TABELA com a indicacdo dos enderecos (posicées| que podem ser utlizados pora armazenar seus elementos. Matric: TABELA colina Liha ——> Figura 6.1 - Exemplo da matriz TABELA com suas posicées. Uma mattiz de duas dimensées 6 attibuida pela instrugdo conjunto ja utllzada para definiro uso de uma matriz de uma dimensdo, sendo bastante parecidas er sua Feferéncia. A sintaxe é: VARIAVEL : conjuntof] de e sdo a indicagao do tamanho da fabela e o tipo da matriz, que pode ser formada por valores reais, inteiros, lagicos ou caracleres. ‘As operacées de leitura e escrita de uma matriz de duas dimensées, assim como das matrizes de uma dimensdo, s6o processadas passo a passo, um elemento por vez. A seguir, séo apresentados o diagrama de quadros e codifica- Gao em portugués estruturado da leitura das 4 notas bimestrais de 8 alunos, Légica Estruturada para Programactio de Computadores | P Diagrama de Quadros Observe que est sendo considerada a leitura das 4 notes de 8 alunos figura 62). Assim sendo, a tabela em questo armazena 32 elementos, Um detalhe a ser considerado € a ullizacdo de duos varidveis para controlar os dois indices de posicionamento de dados na tabela. Anteriormente, foi utiizada a variavel | para controlar as posicdes dos elementos dentro da matriz, ou seja, posigdo em nivel de linha, Neste exemplo, a variavel | continua tendo o mesmo efello e a segunda variavel, a J, esta controlando a posicée da coluna Programa Mali Bidimensional Inicio tenet yenat Leia Notas tJ} Tenet Jenat Escreva Notas J) Fim Figura 6.2 - Diagrama de quadros para a leitura e escrita de uma matriz bidlmensionat. {Ao analisar o diagrama de quadros, percebe-se a inicializacéo das varidveis Je J como I, ov seja, a leitura serd efetuada na primeira linha da primeira coluna, Em seguida é iniciado em primeiro lugar o lago da varidvel | para controlar a posigdo em relacao és linhas e depois é iniciado o lago da varivel J para controlar a posicdo em relacdo &s colunas. Veja que, ao serem iniciados os valores para 0 preenchimento da tabelo, eles sdo colocados na posicéo NOTASD, I], lembrando que o primeiro valor dentro dos colchetes representa a linha e 0 segundo representa a coluna. Assim sendo, sseré entdo digitada para o primeiro aluno a sua primeira nota, Depois & incr mentado mais 1 em relacéo coluna, sendo colocada pora a entrada a posicio NOTASII,2I, linha 1 e coluna 2. Desta forma, sera digitada para o primeiro aluno a sua segunda nota. ‘Quando 0 contador de colune, 0 laco da varidvel J, afingir 0 valor 4, ele sera encerrado. Em seguida 0 contador da varigvel | sera incrementado com mais 1, fornando-se 2. Sera entéo iniciaizado novamente 0 contador J em 1, permitindo {que seja digitado um novo dado na posigéo NOTASI2, 1} “4 | Matrizes Bidimensionais 101 |> (O mecanismo de preenchimento estender-se-a até que o contador de linhas atinja o seu Ultimo valor, no caso 8. Esse laco é 0 principal, tendo a funcao de controlar o posicionamento na tobela por aluno. O segundo lago, mais interno, controla 0 posicionamento das notas, Portugués Estruturado Nome Endereo 2 [CEPS Baio 4 Telefone 5 programa MATRIZ_BIDIMENSTONAL NOTAS + conjuntol 4) de reat T, J: inteiro ingeto para Ide 1 até 8 passo 1 faga para J de 1 até 4 paseo 1 faga leia NOTASIZ, J] fim_para fim para para I de 1 até 8 passo 1 faca para J de 1 até 4 passo 1 faga rast fim_para fim para fim 6.3 - Exercicios de Aprendizagem Para demonstrar a utlizacdo de matrizes de duos dimensdes, considere os exemplos apresentados em sequida: 6.3.1 - Primeiro Exemplo Desenvolver um programa de agenda que cadastre o nome, endereso, cep, bairro e telefone de 10 pessoas. Ao final, 0 programa deve apresentar os seus elementos dispostos em ordem alfabética, independentemente da forma em que foram digitados. Algoritmo Pora resolver este problema, vocé precisa de uma tabela com 10 linhas (pessoas) e 5 colunas (dados pessoais}. Assim sendo, imagine essa tabela como sendo: Légica Estruturada para Programacdo de Computadores | 22S) = Em cada coluna é indicado 0 seu némero, sendo 5 colunas, uma para cada informacéo pessoal e 0 némero de linha fotalizando um conjunto de 10 informa- Goes. Nesta tabela, sdo utlizados dois elementos numéricos, 0 CEP e o Telefone, mas como nao sao executados célculos com esses nimeros, eles séio armazena- dos como caracteres. Depois de cadastrar todos os elementos, é iniciado o processo de classifica- G0 alfabética pelo nome de cada pessoa. Este método jd foi anteriormente estudado, bastando aplicé-lo neste contexto. Porém, apés a comparacdo do primeiro nome com 0 segundo, sendo o primeiro maior que o segundo, devem ser frocados, mas os elementos relacionados ao nome também devem ser trocados no mesmo nivel de verificagdo, ficando para o final o trecho de apresentacao de todos os elementos Diograma de Quadros Neste exemplo, ndo esto sendo utlizados para a entrada de dados dois lacos para controlar 0 posicionamento dos elementos na matriz. Note que as referéncias feitas a0 endereco das colunas sdo citadas como constantes, durante a variagdo do valor da varidvel | Com relacao 4 ordenacdo de elementos de uma matriz de duas dimensées, © processo é o mesmo utllizado para ordenar matrizes de uma dimensdo. Se vocé sabe fazer a ordenagéo de um estilo de matriz, sabe fazer a ordenacéo de qualquer estilo, seja ela da dimensdo que for. Observe no trecho de ordenacdo {figura 6.3), a troca de posi¢do de todos os elementos, assim que os nomes sao comparados e veriicado que estdo fora de ordem, Perceba que assim que o nome 6 trocado de posi¢do, os demais elementos relacionados a ele na mesma linha também o sao. 4 | Matrizes Bidimensionais 103 |> ‘Aual —1.9, 1 Prdxino + Atual + 1, 10,4 Dado (tua, 11> Dado [Proximo, 1] X Dado [Atual, 1} Dade (Atual, 1] « Dado [Préximo, 1] Dado [Préximo, 1} X X< Dado fatal, 2) Dado fatal, 2} — Dado [Préxino, 2] Dade [Préximo, 2] —X X «Dado (Atul, 3} Dado (Atual, 3] « Dado [Préximo, 3 Dado [Préximo, 3] © troca de todos os element Roe: para ATUAL de 1 até 9 passo 1 faga ‘para PROXIHO de ATUAL + 1 até 10 passo 1 faga ge (DADO[ATUAL, 1] > DADO(PROXINO,1]) entio (roca Nome) DADO[ATUAL, 1] < DADO{ PROXT¥O, 1) nex UAL, 21 1,2] © DADO[PROXT ex X € DADO{ATUAL,3] DADOTATUAL, 3] DADOL PROX: PADO[PROXINO,3] — X (troca Bairro) X © DADOLATUAL, 4 DADO[ATUAL, 4] «= DADO[PREXINO, 41 DADOL PROXIMO, 4] — x nroca Telefone: x & panolar 31 [ATUAL,5] < DADO[PRAXIMO, DADO[ PREXINO,5] = x fim_se fim para fim_para para Ide 1 até 10 passo 1 faga para J de 1 até 5 passo 1 face eecreva DADO[T, fim_para fim_ para fim 0 trecho de ordenagdo do programa AGENDA pode ser simplifcado com a insergéio de um laco para administrar a troca apés a verificagtio da condigéo: se (DADOIATUAL,|] > DADOIPROXIMO, I} entio. “| Matrizes Bidimensionais 105 > Diagrama de Quadros Neste segundo exemplo esta sendo levado em consideracéo apenas para o diagrama de quadros 0 trecho correspondente 6 ordenacéo. ‘Atwal—1,9,4 Proxima «-Atval+ 1, 10,1 ‘Dado (Atul, 1} > Dado [Préximo, 1] Kens X «Dato [Atval,K) Dado (Atual, K} «= Dado [Proximo, K] Dado [Préximo, K] x Figura 6.4 - Diagrama de quadros para o trecho de ordenagéo simplifcado da agenda, Portugués Estruturado programa AGENDA DADO : conjunto[1..10,1..5] de caracteres ina de entrada} para I de 1 até 10 passo 1 faga eacreva Reda DApo[z,1] Leda Daro[z, 2] ieia DApo{z, 3] eecreva leia eecreva “Telefone .: * leia fim_para (Rotina de ordenagao © troca de todos os elementos (com Lago pas a de element administrar a © para ATUAL de 1 até 9 passo 1 faga para de ATUAL + 1 até 10 passo 1 faca se (DADO[ATUAL, 1] > DADO[PROXINO,1]) ent&o para K de 1 até 5 passo 1 faga 4/106 ‘omputadores | > Légica Estruturada para Programagio de % © DADOLATUAL, DADOLAPUAL, K) € DADO[PRO} PROXTNO, KX fim para fim se fim_para fim para (Rotina de safda’ para I de 1 até 10 pa 10 1 aga para J de I até 5 passo 1 faca fim_para fim para sim 6.3.2 - Segundo Exemplo Desenvolver um programa que efetue a leitura dos nomes de 8 alunos e também de suas 4 notas bimestrais. Ao final, o programa deve apresentar 0 nome de cada aluno classificado em ordem alfabética, bem como suas médias e a média geral dos 8 alunos. Algoritmo Neste exemplo, é apresentado um problema cuja solucdo sera utilizar duas matrizes para a entrada de dados. 44 é sabido que uma matriz trabalha somente com dados de mesmo tipo (homogéneos). E neste caso, em particular, seré necessario ter uma matriz tipo vetor para armazenar os nomes e a outra tipo fabela para armazenar as notas, uma vez que os tipos de dados a serem manipulados séo diferentes. Considere para tanto as duas tabelas seguinies: Nome Notes? [Notes 2 [Notas 8 [Notas 4 i 7 2 [2] 3 3 | 4 a 5 5 | 6 é | 7 7 3 3 <4 | matrizes Bidimensionais 107 |> © programa deve pedir o nome do aluno e em seguida as quatro notas, calcular a média e armazené-la numa terceira matriz de uma dimensdo, para entdo apresentar 0 nome de cada aluno e sua respectiva média, bem como, a média do grupo. Logo no inicio, a variével SOMA_MD é inicializada com valor zero. Esta variével sera uilizada para armazenar a soma das médias de cada alyno durante entrada de dados. Depois a instrucdo para /de 1 até 8 passo 1 faca inicializa 0 primeiro laco que tem por finalidade controlar o posicionamento dos elementos no sentido linear, Neste ponto, a variavel SOMA_NT ¢ inicializada com 0 valor zero para 0 primeiro aluno. Esta variével guarda a soma das quatro notas de cada aluno durante a execugdo do segundo lago. Neste momento, é solicitado antes do segundo laco o nome do aluno. Toda vez que 0 segundo laco é encerrado, a matriz MEDIA é alimentada com © valor da varidvel SOMA_NT dividido por 4. Deste modo, tem-se 0 resultado da média do aluno cadastrado, Em seguida é efetuado o calculo da soma das médias de cada aluno na variavel SOMA_MD, que posteriormente servird para determinar © cAleulo da média do grupo. E neste ponto que 0 primeiro laco repete 0 seu processo para o préximo aluno, e assim ird transcorrer até o tlimo aluno. ‘Apés a disposigéo dos alunos em ordem alfabética de nome, é iniciada a apresentagéo dos nomes de cada aluno e suas respectivas médias. Ao final, a variavel MEDIA_GP determina o célculo da média do grupo Imédia das médias}, por meio do valor armazenado na varidvel SOMA _MD dividido por 8 (total de alunos. Diograma de Quadros TAtual = 1,74 Proximo + Atual+ 1,8, 1 Nome [Atul] > Nome [Proxima] X Nome [Atul] Nome (Atuall - Nome [Préximo] Nome [Préximo] — x Y «Média tAtual ‘Mela (Atual} Média [Proxima] Mésla [Proxima] «= ¥ Figura 6.5 - Diagrama de quadros para o trecho de ordena¢do do programa de notas. <<} 108 Logica Estruturada para Programagtio de Computadores | Pe Portugués Estruturado programa CAL/ Xi caractere T, J, ATUAL, PROXTMO : inteiro ¥, SOMALNT, SOMA_MD, MEDIA_GP + real NOTA : conjunto[i..8,1..4] de real XTA : conjuntol1..8] de real IES : conjunto[i..8] de caractere soma & 0 para I de 1 até 8 passo 1 faga Leda NONES(T para J de i até 4 passo 1 faca ALT, J SOMA_NT € SOMA_NT + NOTALT, fim_para MEDIA(T] © SOMALNT / 4 MALMD « SOMAMD + fim para wre 0 i (Rotina de ordenagdo © troca 4 elementos para ATUAL de 1 até 7 passo 1 faga para PROKINO © ATUAL 4 1 até & passo 1 faga se (NOMES(ATUAL] > ¥ Xx NOMES(ATUAL] NOMESLAT MB { PREXTHO} PROXIHO] — x ¥ & MEDIA(ATUAL) DIAATUAE] © 3 ‘MEDIA PROXIMO] ¥ SOMALMD / 8 para I de 1 até 8 passo 1 faca ‘esoreva “Aluno escreva “Media |: * fim para escreva “Media Geral fim A seguir, faca os exercicios de fixagao (exercicio de fixacéo 1) para treinar a aplicagdo dos conceitos de ullizagéo de matrizes de duas dimensdes 4 | Matrizes Bidimensionais 109 |> q) b) a d) a 9) h 6.4 - Exercicios de Fixacdo 1. Desenvolva os diagramas de quadros e codificacao em portugués estru: turado dos seguintes problemas: Ler duas matrizes A e B, cada uma de duas dimensdes com 5 linhas e 3 colunas. Construir uma matriz C de mesma dimensdo, que € formada pela soma dos elementos da matriz A com os elementos da mattiz B. Apresentar a matrizC. Ler duas matrizes A e B, cada uma com uma dimensdo para 7 elemen- fos. Construir uma matriz C de duas dimensées. A primeira coluna deve ser formada pelos elementos da matriz A e a segunda coluna deve ser formada pelos elementos da matriz 8. Apresentar a matrizC. Ler 20 elementos para uma matriz qualquer, considerando que ela tenha o tamanho de 4 linhas por 5 colunas, em seguida apresentar a matriz Ler uma matriz A de uma dimenséo com 10 elementos. Construir uma matriz C de duas dimensdes com trés colunas. A primeira coluna da matriz C é formada pelos elementos da matriz A somado mais 5, a segunda coluna é formada pelo valor do calcul da fatorial de cada elemento correspondente da matriz A e a terceira e Ultima coluna deve ser formada pelos quadrados dos elementos correspondentes da matriz A. Apresentar a matriz C. Ler duas matrizes A e B, cada uma com uma dimenséo para 12 elementos. Construir uma matriz C de duas dimensées. A primeira coluna da matriz C deve ser formada pelos elementos da matriz A muliplicados por 2 e a segunda coluna deve ser formada pelos elementos da matriz B subtraidos de 5. Apresentar a matriz C. Ler uma matriz A de duas dimensdes com § linhas e 4 colunas. Construir uma matriz B de mesma dimensdo. Cada elemento da matriz B deve ser o fatorial de cada elemento correspondente da matriz A. Apresentar ao final as matrizes Ae B. Ler uma matriz A de duas dimensdes com 4 linhas e 5 colunas, ‘armazenando nessa matriz os valores das temperaturas em graus Celsius. Construir uma matriz B de mesma dimensdo. Cada elemen- fo da matriz B deve ser o valor da temperatura em graus Fahrenheit de cada elemento correspondente da matriz A. Apresentar ao final as matriz Ae B. Ler uma matriz A de duas dimensdes com 5 linhas e 5 colunas, Construir uma matriz B de mesma dimenséo, sendo que cada ele- mento da matriz B deve ser o dobro de cada elemento correspon- dente da matriz A, com excecdo para os valores situados na diagonol principal (posigdes Bi1,1, BI2,21, 613,31, B14,4) e BI5,5)) os Légica Estruturada para Programacao de Computadores | D> m) ") °) ) @ <4 | Matrizes Bidimensionais quais devem ser 0 triplo de cada elemento correspondente da matri2 A. Apresentar oo final a matrizB. Ler uma matriz A de duas dimensdes com 7 linhas e 7 colunas. Construir uma matriz B de mesma dimensdo. Cada elemento da matriz B deve ser 0 somatorio de cada elemento correspondente da matriz A, com excecdo para os valores situados nos indices impares da diagonal principal (81,11, B13,31, B{5,5) e BI7,7I, os quais devem ser 0 fatorial de cada ‘elemento corespondente da matriz A Apresentar ao final a matriz B. ler uma matriz A de duas dimensdes com 6 linhas e 5 colunas Construir uma matriz B de mesma dimensdio. que deve ser formada do seguinte modo: « cada elemento par da matriz A deve ser soma- do 5 e de cada elemento impar da matriz A deve ser subiraido 4. Apresentar ao final as matrizes A e B. Ler uma matriz A de duas dimensées com 4 linhas e 4 colunas. Apresentar 0 somatério dos elementos situados na diagonal principal (posicdes A111, Al2,21, Al3,3], Al4,4)) da referida matriz Ler uma matriz A de duos dimensées com 15 linhas 15 colunas. Apresentar o somatério dos elementos pares situados na diagonal principal da referida mati Ler uma matriz A de duas dimensdes com 5 linhas e 5 colunas. Apresentar 0 somatorio dos elemenitos situados nas posicées de linha e coluna impares da diagonal principal (AI, 13,3], Al5,5]} da referida mati Ler uma mattiz A de duas dimensdes com 7 linhas e 7 colunas. Ao f= nal apresentar o total de elementos pares existentes dentro da matriz Ler uma matriz A de duas dimensdes com 8 linhas e 6 colunas Construir uma matriz B de uma dimensdo que seja formada pela soma de cada linha da matriz A. Ao final apresentar © somatorio dos elementos da matriz B. Ler uma matriz A de duas dimensdes com 10 linhas e 7 colunas. Ao final apresentar 0 total de elementos pares e o total de elementos impores existentes dentro da matriz. Apresentar também o percentual de elementos pares e impares em relacGo ao total de elementos da matriz. Sypondo a existéncia de 20 elementos pares ¢ 50 elementos impares, ler-se-ia 28,6% de elementos pares ¢ 71,4% de elementos impares. Elaborar um programa que efetue a leitura de 20 valores inteiros em uma matriz A de duas dimensées com 4 linhas e 5 colunas. Construir uma matriz B de uma dimensdo para 4 elementos, que seja formada pelo somatorio dos elementos correspondentes de cada linha da matriz A. Constuir também uma matriz C de uma mp 3) uv) dimensio para 5 elementos, que seja formada pelo somatério dos elementos correspondentes de cada coluna da matriz A. Ao final programa deve apresentar 0 total do somatério dos elementos da matriz B com 0 somatério dos elementos da matrizC. Ler quatro matrizes A, B, Ce D de uma dimenséo com 4 elementos. Construir uma matriz E de duas dimensies do tipo 4 x 4, sendo que 4 primeira linha da matriz E deve ser formada pelo dobro dos valores dos elementos da matriz A, a segunda linha da matriz € deve ser formada pelo triplo dos valores dos elementos da matriz B, « lerceira linha da matriz E deve ser formada pelo quadruplo dos Valores dos elementos da matriz C e a quarta linha do matriz E deve ser formada pela fatorial dos valores dos elementos da matriz O. Apresentar a matriz E. Ler duas matrizes A e B de duas dimensées com 5 linhas e 6 colunas. A matriz A deve ser formada apenas por valores pares, enquanto a matriz B deve ser formada apenas por valores impares. ‘As entradas dos valores nas matrizes deve ser validados pelo programa e nao pelo usuario. Consiruir e apresentar uma matriz C de mesma dimensdo e nimero de elementos que contenha a soma dos matrizes Ae B. Ler duas matrizes A e B de duas dimensées com 4 linhas ¢ § colunas. A matriz A deve ser formada por valores que sejam divisiveis por 3 e 4, enquanto a matriz B deve ser formada por valores que sejam divisiveis por 5 ou 6. As entradas dos valores nas matrizes dever ser validadas pelo programa e nGo pelo usuario, Construir e apresentar uma matriz C de mesma dimensGo e nero de elementos que contenha a subtract dos elementos da matriz A em relacdo aos elementos da matriz B. ler duas matrizes A e B de duas dimensées com 4 linhas e 5 colunas. A mattiz A deve ser formada por valores que sejam divisiveis por 3 ou 4, enquanto a matriz B deve ser formada por valores que sejam divisiveis por 5 e 6. As entradas dos valores nas matrizes devem ser validadas pelo programa e nao pelo usvério. Construir e apresentar uma matriz C de mesma dimensdo e nmero de elementos que contenha 0 valor da muliiplicagéo dos elementos da matriz A com os elementos correspondentes da matriz B. Ler duas matrizes Ae B de duas dimensées com 5 linhas e 5 colunas. ‘A matriz A deve ser formada por valores que nao sejam divisiveis por 3, enquanto a matriz B deve ser formada por valores que nao sejam divisiveis por 6. As entradas dos valores nos matrizes devem ser validadas pelo programa e néo pelo usuario. Consiruir e apresentar uma matriz C de mesma dimensdo e nomero de elementos que contenha a soma dos elementos das matrizes A e B. Logica Estruturada para Programagao de Computadores | CAPITULO Registros Neste capitulo, o leitor tera contato com a utlizacéo da principal estrutura de dados, o registro, a qual consiste em trabalhar varios dados de tipos diferentes (os ‘campos) em uma mesma estrutura. Por esta razao, este tipo de dado é considera- do heterogéneo. 7.1 - Estrutura de um Registro Anteriormente foi opresentado um exemplo no qual foi solicitada a entrada de nomes de oifo alunos e suas notas bimestrais, 0 que obrigou a uilizacéo de duas matrizes, sendo uma para conter os nomes, por seus valores serem do fipo caractere, e a outra para conter as notas, por seus valores serem do tipo real Imagine como seria mais fécil agrupar os dois tipos de dados em uma mesma estrutura. £ exatamente isto que se consegue fazer com a uilizacao de registros. A figura 7.1 mostra um exemplo do layout de um registro com as suas informacées, ‘as quais recebem 0 nome de campos. Layout do formata de um registro com seus campos cai ro de Notas Escolares Nome Primeira Nota ‘Segunda Nota “ercoira Nota ‘Quarta Nota il Figura 7.1 - Exemplo do layout de um registro com seus campos, 4 | Registros Sendo assim, 0 registro esta formado pelos campos: Nome, Primeira Nota, Segunda Nota, Terceira Nota e Quarta Nota e pode ser chamado de Aluno. 0 tipo de dado registro (criado a parfir dos tipos primitivos) deve ser declarado antes da definicGo das variévels que sero utiizadas em um programa, pois pode ocorrer a necessidade de declarar uma variavel com o tipo registro anteriormente definido, ‘A declaracéo de um registro é citada no algoritrno e em portugués estru- turado, mas ndo no diagrama de quadros, que s6 faré mengio 4 uilizagéio de um determinado campo da estrutura heterogénea definida. Para que seja declarado um tipo registro em portugués estruturado, deve ser utiizada a instrucéo fipe em conjunto com a instrucdo registro...fim_registro, conforme sintaxe indicada em seguida. Portugués Estruturado tipo sidentificador> = registro Em que identificador & 0 nome do tipo registro em caracteres maidisculos, em italico, como as varidvels, e lista dos campos e seus tipos é a relacdo de variaveis que serdo usadas como campos, bem como 0 seu tipo de estrutura de dados, podendo ser real, inteiro, légico ou caractere, pds a instrugdo var, deve ser indicada @ varidvel tipo registro ea declaragdo do seu tipo de acordo com um identificador definido anteriormente. Perceba que a instrucdo tipo deve ser utlizada antes da instrugdo var, pois ao definir um tipo de varidvel, pode-se fazer uso deste lipo definido. Note que para a sintoxe anterior nao esta sendo apresentada sua forma gréfica no diagrama de blocos, Isto ocorre, uma vez que este tipo de citacdo néo & indicado dentro do diagrama. Observe que todas os varidveis citadas com a instrugGo var também ndo sdo indicados, ou seja, tudo 0 que é indicado antes da instrugéo inicio em portugués estruturado no é mencionado de forma direta dentro do diagrama de blocos. Considere como exemplo a proposta de criar um registro denominado ‘ALUNO, cujos campos so NOME, NOTA, NOTA2, NOTA3 e NOTA. Entéo, o regis fro em questo deve ser assim declarado: Logica Estruturada para Programacdo de Computadores | Pe CAD_ALUNO = registro NOTAL : real NOTA2 ; real NOTA3 : real NOTAd : real fim registro ALUN : cad_aluno Observe que é especificado um registro denominado CAD_ALUNO, o qual & um conjunto de dados heterogéneos (um campo tipo caractere e quatro do tipo real. Desta forma € possivel guardar em uma mesma estrutura varios fipos diferentes de dados. A fitulo de comparacdo, pode-se dizer que um tipo registro é também um vetor (matriz de uma dimensdo), pois tem-se a varidvel ALUNO do tipo cad_aluno como um vetor com os indices NOME, NOTAI, NOTA2, NOTAS e NOTA. ‘A leitura e a escrita de um registro sdo efetuadas com a instrucdo lela e escreva seguida do nome da varidvel registro e sev campo correspondente separado por um coractere *” ponto. Assim sendo, observe em seguida o diagrama de quadros ffigura 7.2] e 0 cédigo em portugués estruturado: Diagrama de Quadros Programa Regine [Leia Aluno Nome Lela lune Nota Tela Aluno Nota Tela luna Nota Tela Aluno Noted Escreva Aluno.Nome Escreva Aluno Notat Escreva Aluno Nola Escreva Aluno Notas Escreva Aluno.Nolad Fim Figura 7.2 Exemplo de letura e escrita de um registro, 4 | Registros Portugués Estruturado programa REGISTRO tipo CAD_ALUNO = registro NOME + caractere NOTAL + real NOTA2 + real NOTAI + real NOTAd + real fim registro cad_aluno inicio Nora1 (0. NOTA2 (0. NOTA io. NOTA eacreva ALUNO. eacreva ALUNO im Tanto a leitura como a escrita de registros também podem ser feitas como: lela ALUNO e escreva ALUNO. Neste caso, serdo feitas, respectivamente, uma leitura e a escrita do tipo genérica, em que todos os campos sero referenciados implicitamente. A forma explicita apresentada anteriormente é mais legivel, uma vez que se faz referéncia a um campo em especifico. 7.2 - Estrutura de um Registro de Conjuntos No t6pico anterior, foi apresentado 0 conceito de trabalho com uso de registro. No ponto de aprendizado em que o leitor se encontra, é provavel que esteja se perguntado: Sera que ndo é possivel definir um vetor ou mesmo uma matriz dentro de um registro, para ndo ser necessério utlizar somente os fipos primitivos de dados? Isto 6 realmente possivel. Considere ainda o exemplo do registro ALUNO, em que temos 0 campo NOME tipo caractere e mais quatro campos fipo real para o ormazenamento de suas notas, sendo NOTAI, NOTA2 NOTA3 e NOTAA. Veja que 6 possivel definir um vetor chamado NOTA com quatro indices, um para cada nota. A figura 7.3 mostra um layout desta nova proposta Logica Estruturada para Programacéio de Computadores | D> Layout do formato de um registro com seus campos Escolares, Figura 7.3 - Exemplo do layout de um registro de conjunto com seus campos. Com base na proposta de criar um registro denominado ALUNO, cujos notas serdo informadas em um vetor, ele deve ser assim declarado tipo BINBSTRE = conjunto[1..4] de real = registro Nora fim registro caractere binestre Observe que, ao ser especificado o registro CAD_ALUNO, existe nele um ‘campo chamado NOTA do tipo bimestre, sendo bimestre a especificagéo de um tipo de conjunto matricial de uma Gnica dimenséo com capacidade para quatro elementos. Veja que 0 tipo bimestre foi anteriormente definido, pois se caracteriza por um tipo criado, assim como 0 fipo cad_aluno alribuido & varidvel de registro ‘ALUNO. A leitura e a escrita de um registro de conjunto sdo efetuadas, respectiva- mente, com as instrucées lela e escreva geralmente dentro de um laco de repeticéo, Assim sendo, observe o diagrama de quadros {figura 7.4) e 0 cddigo em portugués estruturado em seguida, que representam a leitura do nome e das quatro notas bimestrais do aluno. 4 | Registros: vW7|> Diograma de Quadros Programa Regisro_De_Gonlunto Lela Aluno Nome Leia Aluno Nota) Escreva Aluno. Nome Tetat Esereva Aluno.Nota (I) Fie Figura 7.4 Exemplo de letura de um registro de conjunto. Portugués Estruturado ‘programa REGISTRO_DE_coNsUNTO tipo BIMe: conjunto[l..4] de real CAD_ALUNO = registro bimestre INO. NOME 0 1 faga para eda ALUNO..NOr fim para eecreva i para I de 1 at fim para fim Logica Estruturada para Programacdo de Computadores | P 7.3 - Estrutura de um Conjunto de Registros Com as técnicas de programacdo anteriormente apresentadas, passou-se a ter uma mobilidade bastante grande, com a possibiidade de trabalhar de uma forma mais adequada com diversos problemas, principaimente os que envolvem a utiizagéo de dados heterogéneos, facilitando a construcéo de programas mais eficientes. Porém, 0s programas apresentados até aqui com a utiizacdo de registros $6 fizeram mencGo @ leitura e escrita de um dnico registro. Neste momento, o leitor fer6 contato com o conjunto de registros que permite @ construcdo de programas, em que é possivel fazer a entrada, processamento scida de diversos registros. Para declarar um conjunto de registros, é necessério, em primeiro lugar, possuir a definicdo de um registro, ov seja, é necessério ler o formato de um Unico registro para entao definir o némero de registros que serd utlizado pelo programa Para exemplificar 0 que esta sendo exposto, considere que vocé deve fazer um programa que leia 0 nome e as quatro notas escolares de 8 alunos. Isto jd familiar. Veja em seguida, a definicdo do tipo registro e também a definicéo do conjunto de registros para os oito alunos: tipo ‘STRE = conjunto[1..4] de real UNO = registro ra fim registro caractere binestre \LUNO + conjuntoti..2] de cad_aluno Observe que apés a instrucdo var, @ indicada a variavel de registro ALUNO, sendo esta um conjunto de 8 registros do tipo cad_aluno que, por sua vez, 6 formado de dois fipos de dados: 0 nome como caractere e a nota como bimestre. Bimestre 6 um conjunto de quatro valores reais. Aleitura e a escrita serdo feitas de forma semelhante as formas anteriores. No entanto, serdo utilizados dois lacos, pois além de controlar a entrada das quatro notas de cada aluno, é necessario controlar a entrada de oito alunos. Esta estrutura € bastante similar a uma matriz de duas dimensées. Assim sendo, observe em seguida o diagrama de quadros e 0 cédigo em portugués estru- turado 4 | Registros Diagrama de Quadros Programa Conjunto. De_Regito inicio Tenet aia Ano Nome Tenet Lela Aun [1 Nota) Tenet Eacreva Ano TI NOTe Tetat sere Aluno (Nota) Fin Figura 7.5 - Exemplo de leitura de um conjunto de registros. Portugués Estruturado programa CONJUNTO_DE_REGTSTRO = conjunto[1..4] de real CAD_ALUNO = registro NOME + caractere NOTA + bimestre fim registro conjunto[1..8] de cad_aluno 1 inteiro Angelo para I de 1 até 8 passo 1 faca Leda ALUNO[T) .NOB para J de 1 até 4 passo 1 faga Leia ALUNO[T) .NOTALZ] fim para fim para para I de 1 até 8 passo 1 faca escreva ALUNO[T] .10Ms para J de 1 até 4 passo 1 faga ‘egereva ALUVO[z) .NOTA(T] fim_para fim para fim Veja que o laco da varivel | controla o némero de alunos da turma, no caso 8, © co laco da variavel J controla 0 némero de notas, até 4 por aluno. Para cada movimen- fagdo de mais um na varivel | existem quatro movimentaces na varidvel J <|120 Légica Estruturada para Programacéo de Computadores | Pe 7.4 - Exercic ios de Aprendizagem Para demonstrar a utilzagdo de programas com fabelas de dados helerogé- rneos, considere os seguintes problemas: 7.4.1 - Primeiro Exemplo Efetuar a leitura das 4 notas bimestrais de 8 alunos, apresentando no final os dados dos alunos classificados por nome em ordem ascendente. Algoritmo © algoritmo de ordenacdo é o mesmo e sera aplicado da mesma forma mas se faz necessério estabelecer alguns critérios, Por se tratar de uma ordenagéio, é necessério estabelecer mais duas Varidveis, as quais podem ser ATUAL e PROXIMO. Também deve ser estabelecida uma varidvel de auxilio & troca, a qual pode ser a variavel X, porém deve ser do {ipo registro. A ordenagdo sera efetuada com base no nome de cada aluno e quando estiver fora da ordem, os dados devem ser trocados de posicéo, Diagrama de Quadros No diagrama seguinte, é apresentada a comparacGo efetuada, sendo ALUNOJATUALJ.NOME > ALUNO[PROXIMO].NOME. Observe que esta sendo questic nado se 0 nome do aluno atuall é maior que o nome do prdximo aluno. A condi¢do sendo verdadeira 6 efetuada a troca nao s6 do nome, mas de todos os elementos que esto armazenados na tabela. Isto é possivel, uma vez que a varidvel X 6 do mesmo fipo que a tabela ALUNO. Tale 7.4 Proxima + Alval + 1,8, 1 ‘Aune tual Nome > AlunolProximo] Nome X eAluno fAtual ‘Aluno [ual «= Aluno(Préximo} ‘Aluno [Préxire] =X Figura 7.6 - Exemplo da rotina de ordenacdo com dados heterogéneos. 4 | Registros 1211> Portugués Estruturado 7.4.2 - Segundo Exemplo ern aS - Elaborar um programa que efetue a leifura de uma tabela de cargos & yrograma LEITURA_ORDENAGKO_BSCRITA d os salérios. Em seguida, o programa deve solicitar que seja fornecido o cédigo de um BIMESTRE = conjunto(1..4] 4e real determinado cargo. Esse cédigo deve estar entre Ie 17 ie eee © usuario do programa pode fazer quantas consultas desejar. Sendo o Nout garactere cédigo valido, o programa deve apresentar 0 cargo e o respectivo salario, Coso seja 0 cédigo invalido, o programa deve avisar 0 operador da ocorréncia. Para dar entrada ao cédigo de cargos/salérios, observe a tabela seguinte: NOTA : bimestre fim registro + conjunto[1..8] de cad_aluno rg UAL, PROXIMO : inteiro Cédigo Cargo Salério x + cad_aluno 1 Analista de Salarios 9.00 pera J de 1 até 8 pass 2 face 2 |Auriar de Contabiidade (625 Teta ALUNO{OT -NoNE 3 Chele de Cobranga ——«( 0a ee a Chefe de Expedico 858 tim pare 5 Contador 15.60 einpera 6 Gerente de Dist 72.90 (Rotina de ordenagao de dados heterogéneos} iu Sania) eae) 8 Fexneo 320 Pipura PRGnaDO de ATUAL' + 1 até € paseo 1 fuga [2 Gerente Adminsratvo moa ce (annotate entto 10 Gerente Comercial 7040 Xe AUOWOLATUAL] Gerenie de Pessoal 1029 AvUNO{ARUAL] — aLONOTPROED 2 Gerenie deTreinamenio [1068 ag hhINOePROEEHON & x 13 GerenieFinanceir 1654 tinpare 14 Continuo 26 fim_pare 1s Operador de Micro 6.05 ora do 1 ate 16 Programador 90 cecreve A 7 Secreta 7a Prsrorare AB) ARID gortine fim_para Observe os breves passos que o programa deve executar. No tocante 4 fin pesquisa, sera usado 0 método de pesquisa sequencial: 1. Atabela em questo é formada por trés tipos de dados: 0 cédigo como inteiro, © cargo como caractere e o nimero de salaries como real. Criar um registro com tal formato; Cadastrar os elementos da tabela. Para faciltar, 0 cédigo sera fornecido utomaticamente no momento do cadastramento; Logica Estruturada para Programacao de Computadores | 4 | Registros 3. Criar um laco para executor as consultas enquanto o operador dese- jor, 4, Pedi o c6digo do cargo; se valido, apresentar 0 cargo e o saléro; 5. Se 0 c6digo for inexistente, apresentar mensagem ao operador, 6. Saber do usuério se ele deseja continuar com as consults; se sim, repe- tir os passos 3, 4 e 5; se ndo, encerrar o programa Diagrama de Quadros Observe que o diagrama de quadros {figura 7.7) concentra-se na ldgica no que tange & pesquisa, pois os dados da tabela anterior devem ser fornecidos pelo ‘operador. Resp < “Sint Resp «"Sim" Leia Céaigo ‘Acha — Falso 1 17 E, Acha= also Cadigo = Tabela 1, 0_Céaiga tenet cha. Verdadeir, Acha = Verdadeiro. Escreva “Néo Existe* “abeta fl O_Caroo, Tabela }.D-Sat Tela Resp Figura 7.7 - Exemplo da rotina de pesquisa sequencial em uma fabela. Légica Estruturada para Programacéo de Computadores | P Portugués Estruturado programa TABELA_DE_SALL tipo DADOS = registro Anteire az real fim registro conjunto[..17] de dados iD1GO : intedro ACHA ; Légico ingeio para I de 1 até 17 passo 1 faga escreva "Cédigo 7a escreva "Carso rete TAB eacreva "Salério leie TABELA fim para (Trecho de pesquisa seqilencial} RESP & "SIM enguanto (RES! faca eecreva “Qual cédiga - 1a 17" leia coD1G0 ACHA & .Falso. enguanto (I <= 17) .e. (ACHA = .Falso.) faga je (CODIGO = TABELA[T].D_CODIGO) entko ACHA © .Verdadeizo rere. sims: fim _enguanto senko fim_se eacreva "Deseja continuar pesquisa?” leia RESP fim enguanto fin 4 | Registros b) Apresentar os registros (nome e altura) das pessoas menores ou iguais a 1.5m. 4) Apresentar os registros (nome e altura) das pessoas que sejam maiores que 1.5m. A seguir, faca os exercicios de fixagdo para treinar a aplicagéo dos conceitos de utlizagdo de registros em algumas situacées trviats. 7.5 - Exercicios de Fixagao 4) Apresentar os registros {nome e altura) das pessoas que sejam 1. Considerando a necessidade de desenvolver uma agenda que conte: matores que 1m menores que 2.0m nha nomes, enderecos e telefones de 10 pessoas, defina a estrutura de registro apropriada, 0 diagrama de quadros e a codificagdo de um programa que, por meio de um menu de op¢ées, execute as seguintes f) Soir do programa de cadasto. etopas: 6) Cadastrar 0s 10 registros. 4 @) Apresentar todos os registros com a média exiraida de todas os clturas armazenadas. Considerando os registros de 20 funcionarios, contendo os campos: aE pane ee ; matricula, nome e salario, desenvolver um programa que, por meio de ) Pesquisar um dos 10 registros de cada vez pelo campo nome (usar aon, execute os seguinies etapa: o método sequencial). ©) Cadastrar os 20 empregados. ) Classificar por ordem de nome os regisiros cadastrados. . | b)_Classificar os registros por némero de matrcula. 4) Apresentar todos os registros. ‘ | ) Pesquisar um determinado empregado pelo ndmero de matricula @) Soir do programa de cadasto. {método binério) | d) Apresentar de forma ordenada os registros dos empregados que 2. Considerando a necessidade de um programa que armazene o nome e recebem salérios acima de $1,000. as notas bimestrais de 20 alunos do curso de Técnicas de Programacao, defina a estrutura de registro apropriado, o diagrama de quadros e a @) Apresentar de forma ordenada os registros dos empregados que codificagéo de um programa que, por meio do uso de um menu de recebem salérios abaixo de $1.000. opsées, execute as seguintes etapos: f)_ Apresentar de forma ordenada os registros dos empregados que 4) Cadastrar os 20 registros (apés 0 cadastro efetuar a classificacdo metspem salerios iguots 0 $1,000, por nomel. | 9). Sair do programa de cadastro. b)Pesquisar os 20 registros, um de cada vez, pelo campo nome (usar (© método bindrio; nesta pesquisa 0 programa deve também apresentar a média do aluno e as mensagens: “Aprovado" caso sua média seja maior ou igual a 5, ou “Reprovado" para média abaixo de 5) )Apresentar todos os regisiros, médias e a mensagem de aprovagtio ou reprovacéo. 4) Sair do programa de cadostro. 3, Elaborar um programa que armazene o nome e a altura de 15 pessoas, com a utllzacdo de regisiros. O programa deve ser manipulado por um menu que execute os seguintes etapas a) Cadastrar os 15 registros. 4126 Logica Estruturada para Programacéo de Computadores | Pr <4 | Registros 27 |> | Anotagdes Légica Estruturada para Programagao de Computadores | D> CAPITULO Sub-rotinas Neste capitulo, o leitor tera contato com a ullizacdo da técnica de programa- Go modular denominada sub-rotina, Esta técnica possibilita consiruir um grande programa em pequenas partes que se fornam mois faceis de administrar do que o fodo de um sistema moior. Sub-rotinas também sdo denominadas: médulos, sub programas ou subalgoritmos, Neste sentido, o leitor sera apresentado aos conceitos de sub-rotina do tipo procedimenio e funda, passagem de parametros por valor e por referéncia, pardmetros formais e reais. 8.1 - Modularidade Normalmente problemas complexos exigem algoritmos complexos na busca de suas solucées. Todo grande problema computacional pode vir a ser dividido em problemas menores. Desta forma, cada parte menor tem um algoritmo mais simples e de mais facil compreensao e administragdo, e esse trecho menor 6 chamado de sub-rotina fou mesmo de médulo, subprograma, subalgoritmo). Uma sub-rofina é um programa ftrecho de um programa maiorl, e desta forma pode efetuar diversas operagdes computacionais (como: entradas, proces- samentos e saidas) e deve ser tratada com o mesmo cuidado, como foram iratados os programas projetados até este momento. ‘Ao trabalhar com a técnica de sub-rotinas, ds vezes se depara com a neces- sidade de dividir uma sub-rotina em outras tantas quantas forem necessarias, buscando uma solugao mais simples de uma parte do problema maior. O proceso de dividir sub-rotinas em outras & denominado /Méfodo de Refinamento Sucessiva 8.2 - Método Top-Down © processo de programar um computador torna-se bastante simples quando aplicado 0 método de utilizacdo de sub-rotinas (médulos de programas) Porém, a utiizacdo dessas sub-rofinas deve ser feita com aplicagéo do método top-down, 4 | sub-rotinas 129|> Um método adequado & programacio de um computador é a utlizacéo do conceito de programagéo estruturada, pois as linguagens de programacéo de terceira gera¢do ullizadas atualmente [como: C, C++, Javo, ObjeciPascal, Pascal) sdo baseadas nesta estrutura, 0 que facilita a aplicacdo deste proceso de trabalho. O método mais utiizado para a programacdo esiruturada de computa- dores é 0 fap-down |de cima para baixo) o qual se caracteriza basicamente por: + Antes de iniciar a construgdo do programa, o programador deve ter em mente os tarefas principais que este deverd executar. Nao é necessario saber como funcionardo, somente saber quantas sao; + Conhecidas todas as torefas a serem executadas, tem-se em mente como deve ser o programa principal, 0 qual vai controlar todas as outras tarefas distribuidas em suas sub-rotinas; ¢ Tendo definido 0 programa principal, é iniciado o processo de detalha- mento para cada sub-rotina. Desta forma sdo definidos varios algorit mos, um para cada rotina em separado, para que se fenha uma visdo do que deve ser executado em cada médulo de programa, Existem programadores que estabelecem 0 némero maximo de linhas de programa que uma rotina devera possvir. Se o nomero de linhas ultra- passa 0 limite preestabelecido, a rotina em desenvolvimento é dividida ‘em outra sub-rofina (6 neste ponto que se aplica o método de refinamen- to sucessivol, © método top-down conceitualmente da a idéia de que um programa tem uma estrutura semelhante 6 de um organograma. A figura 8.1 apresenta um exemplo desta estrutura Rotina tina tina tina 1 2 3 4 cs 1 Rotina | [ Rotna Retina Retina Rotina 4 12 32 32 Ratna 322 Rotna | [ Rotna sata | | 3242 Figura 8.1 - Organizacdo hierdrquica de programa com o método top-down, 4/130 Logica Estruturada para Programacéo de Computadores | Pr A.utilzacéio do método “de cima para baixo" permite que seja efetuado cada médulo de programa em separado. Assim sendo, cada parte do programa pode ser testada separadamente, garantindo que o programa completo esteja sem erro 40 seu término. Outro detalhe a ser considerado é que muitas vezes existem em um progra- ma trechos de cédigo que podem estar repetidos varias vezes: Esses trechos podem ser utlizados como sub-rofinas, proporcionando um programa menor & mais facil de ser alterado num futuro préximo, quando howver a necessidade de efetuar sua manutencGo. 8.3 - Tipos de Sub-Rotina ‘A técnica de modularizagéo de cédigo de programa baseado no conceito de sub-rofinas disponibiliza para o trabalho de um programador dois modos de trata- mento do problema. Um modo denomina-se procedimento e o outro denomina-se funcéo. Uma sub-rotina (seja ela um procedimento ou uma funcad & considerada um bloco de programa que possui obrigatoriamente inicio e fim. Uma sub-rotina é identiicada por um nome, por meio do qual serdo feitas as devidas referéncias em qualquer parte do programa principal ou do programa chamador da rotina Quando uma sub-rotina é chamada por um programa, ela é executada, e ao seu término 0 controle de processamento retorna aulomaticamente para a primeira linha de instrucdo apés a linha que efetuou a chamada da sub-rotina. A diferenca bésica existente entre os dois tipos de sub-rotina sao: 4 As sub-rotinas do tipo procedimento so mecanismos que poder ou 1nGo retornar algum tipo de valor ao fim se seu processamento; 4 As sub-rotinas do tipo fungdio so mecanismos que sempre retornam ‘algum tipo de valor ao fim de seu processamento. As sub-rotinas ttanto do tipo procedimento, quanto do tipo funcdd para seu trabalho podem fazer uso de parametros (denominados também de arguments) que serdo passados por intermédio do programa principal ov do programa chamador daquela sub-rotina, Este conceito em particular sera visto mais adiante com detalhes. 8.4 - Sub-Rotinas do Tipo Procedimento A seguir, seré apresentada a sub-totina do tipo procedimento em sua forma de concepgao mais simples existente. Observe em seguida o diagrama de qua- dros ffigura 8.2} e 0 cédigo em portugués estruturado, definidos de forma bésica para este tipo de estrutura. 4 |Sub-rotinas 11> Diagrama de Quadros Programa Principal Procedimento Ratna [-paramevos>l nico Trico do MedulO Instrugbes a serem executadas pela Sub-Ratina, 6s sua chamada Rota (pardmeto=> oe ‘pelo programa principal Fim Fatoma [parameter] Figura 8.2 - Esirutera de um procedimento. Em sua obra “Engenharia de Software’, pagina 459, Roger Pressman sugere que © quadro seja desenhado com um circulo no meio para indicar (possivel forma) uma referéncia a uma sub-rotina, Por ser tratar de um diagama baseado em quadros e néo havendo uma grande (OBSERVACAO} | conformidade em definir uma estrutura de sub-rotina por varios autores, ° ~ Tesia obra aborda 0 conceilo de desenhar um quadro dentro de outro ‘quadro para defiir uma esirutura de sub-rolina do tipo procedimento, como mostra a figura 8.2. Portugués Estruturado programa 7551 ( sub-Rotina ) procedimento ROTINA ( [var] [evaria inicio ( Programa Pr programa PRINCIPAL Note que primeiramente é definido no programa em portugués estruturado 0 cédigo da sub-rotina para que depois seja definido o cédigo do programa princi- pal Esta caracteristica deve ser mantdo, pos existem algumas linguagens de pro- Gramacdo que trabalham desta forma, Observe que a chamada efetuada da sub- 4132 Logica Esiruturada para Programagdo de Computadores | Pe -rotina definida é feita no programa principal com seu cédigo sublinhado. Este detalhe é utlizado para diferenciar 0 nome da rotina das palavras-chave das linguagens e também das varidveis que venham a ser utilizadas. A indicacéo () entre os colchetes & opcional e serd utilizada dependendo apenas da estratégia lagica a ser implementada pelo programador. Quando uiilizada a relagdio de pardmetros, deve obrigatoriamente estar definida entre os simbolos de parénteses. Esta caracteristica seré apresentada mais adiante. 8.4.1 - Exercicios de Aprendizagem Elaborar um programa do tipo calculadora simples para operar apenas dois valores numéricos, que opresente um menu de selegSes no programa principal Esse menu deve dar a0 usudrio a possibiidade de escolher uma entre quatro operacées aritméticas. Escolhida a opgao desejada, deve ser solicitada a entrada de dois nimeros, e processada a operacao, deve ser exibido o resultado. Algoritmo Note que esse programa deve ser um conjunto de cinco rotinas, sendo uma principal e quatro sub-rofinas. A rofina principal efetuard 0 controle das quatro sub- ~rotinas que, por sua vez, pedirdo a leitura de dois valores numéricos, fardo a operacdo e apresentarao o resultado obtido. A figura 8.3 apresenta um organo- grama com a idéia de hierarquizacdo das rotinas do programa. A quinta opcao Go se caracteriza por ser um rotina, apenas a op¢ao que vai encerrar 0 lago de controle do menu. ‘aigbo ‘Subtragao Muttpleseao Dwisio Fim de programa Ratna t Rotina 2 Ratna 3 Rotina 4 Aaligio Subtrago Mutipicacto Divisdo Figura 8.3 - bierarquia das rotinas do programa calculadora. A parrir da idéia da estrutura geral do programa, sera escrito em separado cada algoritmo com os seus detalhes de operacdo. Primeiro 0 programa principal e depois as outras rotinas, de preferéncia na mesma ordem em que esido mencionadas no organograma. <4 | Sub-roinas Programa Principal 1. Apresentar um menu de seledio com cinco opcées: 1 - Adigéo 2- Subtragéo 3- Multiplicagdo 4- Divisio 5 Fim de Programa 2. Ao ser selecionado um valor, a rofina correspondente deve ser execu: tada; 3. Ao.escolher o valor 5, 0 programa deve ser encerrado. Rotina 1 - Adic&o 1. Ler dois valores, no caso varidveis A e B; 2. Efetuar a soma das varidvels A e B, implicando o seu resultado na varidvel R; 3. Apresentar o valor da varidvel R. Rofina 2 - Subtragtio 1. Ler dois valores, no caso variaveis A e B; 2. Efetuar a subtracdo das varidveis A e B, implicando o seu resultado na variavel R; 3. Apresentar 0 valor da varidvel R. Rotina 3 - Mutiplicagéo 1. Ler dois valores, no caso varidveis A e B; 2. Efetuar o multiplicagéo das varidveis A e B, implicando o seu resultado na variével R; Apresentar 0 valor da varidvel R. Rofina 4 - Divistio 1. Ler dois valores, no caso variaveis A e B; 2. Efetuar @ divisdo das varidveis A e B, implicando 0 seu resultado na variavel R; Apresentar o valor da varidvel R. Lagica Estrturada para Programacao de Computadores | Observe que em cada rotina _ Ob serdo ulllizadas as mesmas variaveis, mas elas Go serdo executadas a0 mesmo tempo para todas as operacées. Serdo uillizadas em separado e somente para a rotina escolhida. Diagrama de Quadros Observe que a diagramagto de cada rotina é definida em separado como mostram as figuras 8.4 e 8.5. um programa independente, como Programa G iadors fopeae — 0 Opgie > 5 Escreva “1 Adiga Escreva 2 Subiasi Escreva 73 Mulipicagaor Escreva 4 Divi Eecreva 5 Finalzagaa’ Escreva Escolha uma Opglo =" N. Leia Opga0 Opeao= 1 Opsto=2 s RotSubtragao Opgio= 3, | Rowutinicagao Oneao= 4 s| Rotbivsto Fim Figura 8.4 - Diagrama de quadios para a parte principal do programa calculadora: 4 | Sub-rotinas, Frocedrrnto Raison Frscecirato RaRSubRrageS inicio iio do Mao inicio do Melo ercreva *Rotina de subtracko aa ey cecreva "Entre un valor para A: * Leia B [Leia B lela A at ae escreva "Entre un valor para 3: * [Escreva R [Escreva R cere Retome Retoma BEOSU escreva °A sub ® tin FaceimanaRamnnpieario) © [Procetimenta RoDwato procedinento ROTHULT! Tio do Maso Tico do Maso wee Les eA RA, Ba reat tea 8 tea inicio ReACB a7 fsecreva “Rotina de Multiplicas care - — jereva "Entre un valor para A: screva A dela A Retome “impossivel escreva "Entre 1 ivi sscreva Fe um val es L R leia Retome Reate Figura 8.5 - Diagramas de quadros para as sub-rotinas ‘do programa calculadora. eee "OR , procedinento ROIIVISKS Portugués Estruturado var . . . - Roa, Bs reat No definigdo do cédigo em portugués estruturado, serdo definidas em inicio primeiro lugar os sub-rofinas e por olimo, © programa principal. Quando fo escreva “Rotina de Divisae programa principal ou rofina chamadora for teferenciada a chamada de uma sub- ezcreva “Entre um valor para A: fotina, ela sera grafada na forma sublinhada para faciitor sua visualizagao e leia a identificacdo, eecreva “Entre um yalor para B deta 2 — Se ll ge (2 = 0) entiio wograma CALCULADG prow escreva “Impossivel dividir’ (sub-rotinas de cétculos) ko procedimento ROTSOMA measfa Georeva “A divisto de A con Bé= 7, 2 R, A, Bs real fimse ingeio fim (Programa fescreva *Rotina de Sona" Gscreva “Entre un valor para A: " leia A var escreva “Entre un valor para 5. op¢ao : inteixo deta = escreva “A soma de A com B é R enquanto (OPCHO <> 5) faga fim eacreva "I Adicio" procedimento ROTSUBIRA escere a tae ctor escreva "3 - Multiplicacdo’ R, A, Bt real _ Logica Estruturada pare Programacio de Computadores | Pr 4 | sub-rotinas 137|> ‘eecreva “5 - Finaliaacao™ escreva “Escola uma op. Leia oPcio se (oPCKO Tosco = 4) entéo fimse #im_enquanto fim 8.4.2 - Estrutura de Controle com Miltipla Escolha 0 programe calculadora demonstra a aplicacdo da técnica de programagao estruturada tanto no diagrama de quadros como no cédigo em porlugués estruturadol, possibilitando a construcao de programas mais elaborados. Porém, no focante ao selecionamento dos sub-rotinas, foi utlizada a instrugdo se. Observe que se 0 programa possuir um menu com 15 opcées, devem ser definidas 15 instrugées do tipo se para verificar a escolha do operador. ‘Quando houver a necessidade de construir um programa no qual seja necessério ullizar uma seqiéncia grande de instrugdes do tipo se, sejam estas uma apés a oulra ou mesmo encadeadas, pode ser simplificada com a utllza¢do da instrucdo caso...fim_caso, que possui a seguinte sintaxe Portugués Estruturado sega faga sega faga Em que seré a variavel a ser controlada, valor seré o contebdo de uma varivel sendo veriicado e operacéo pode ser a chamada de uma sub-rotina ‘a execucdo de qualquer operacéo matemdtica ov de qualquer outra instrucdo. A figura 86 demonstra a estrutura do diagrama de quadros para a instrucao caso...fim_caso, 4/138 Logica Estruturada para Programagio de Computadores | D> Diagrama de Quadros oe Ke ie Pardo Operacio 1 . perat80 1 | Operacéo 2 Operacto Operacton| Operact Figura 8.6 - Diagramas de quadros para instru¢Go caso...fim_caso. Desta forma, a rotina principal do programa calculadora pode ser escrita fazendo uso da instrucdo caso...fim_caso no selecionamento de uma opgao escolhida pelo operador, como em seguida, conforme demonstra a figura 8.7 € ‘seu respectivo cédigo em portugués estruturado. Diagrama de Blocos Programa Caleuaaors ‘Ongao 0 Opglo> 5 sereva 1 -Aaigio Eecrova 2 Suber Eecreva 3 Mutinicagdo Escreva 4 Divi Escreva 5 Finalizayao™ Eecreva Escala wna Opgao Tela Oppo. Opto = 5 s fF E——_ as [Rotutinicassol|FRoroivisdo] invalid tente Rotsoma Fim Figura 8.7- Diagrama para o programa principal usando a Instrusco easo...fim_case 4 |Sub-rotinas 139 |> Portugués Estruturado enquanto (OP¢KO <> 5) faga escreva “1 - Adicdo” eacreva “2 - subtragio* egcreva “3 - Multiplicacao” escreva “4 - Divisio: ecreva “5 - Finalizacio eecreva “Escolha uma opcko Leia oPcko ‘se (OPCKO <> 5) entéo caso oPcho seja I faga rotsoma 2 faga 3 faga 4 faga escreva valida - Tente novamente* fim_caso tim se ‘#4m_enquanto fin Antes do uso da instrucdo caso...fim_caso, esti sendo verificado se o valor da opcio informado é realmente diferente de 5. Sendo, seré verificado se é 1, 2, 3 ou 4; ndo sendo nenhum dos valores validos, a instrucdo sendo informa que a tentativa foi invalida. © uso desta nova instrucdo agiliza 0 processamento das instrugées, ou seja, é muito mais rdpido ullizar a instru¢do caso...fim_caso do que ninhar diversas instrucdes do tipo se. 8.5 - Varidveis Globais e Locais No programa anterior foram utlizadas varidveis dentro das sub-rotinas, no caso as varidvels A, B e R, e fora das sub-rotinas, no caso a varidvel OPGAO, sem que houvesse a preocupacdo de agrupar as varidveis de uma forma coerente segundo 0 seu tipo. Sao dois os tipos de varidveis utlizados em um programa: as variaveis Globaise as Locais. Uma variével 6 considerada Global quando é declarada no inicio do lgoritmo principal de um programa, podendo ser uilizada por qualquer sub- -rolina subordinada ao algoritmo principal. Assim sendo, este tipo de varidvel passa a ser visivel a todas as sub-rotinas hierarquicamente subordinadas 4 rotina principal, que pode ser o proprio programa principal ou uma outra sub-rofina. No programa anterior, a variével OPGAO & global, apesor de nao estar sendo utlizada nas demais sub-rofinas. 1140 Logica Estruturada para Programactio de Computadores | Pe Uma variavel & considerada Loca/ quando é declarada dentro de uma sub- -rofina e é somente vélida dentro da rotina & qual esté declarada. Desta forma, as demais sub-rotinas e programa principal néo podem fazer uso daquelas variaveis como Global, pois néo visualizam a existéncia delas. No programa anterior, as variaveis A, B e R sdo locals. Por este motivo estdio sendo declaradas repetidas vezes dentro de cada sub-rotina Dependendo da forma como se trabalha com as variéveis, é possivel economizar espaco em meméria, tornando o programa mais eficiente. Considere dois exemplos apresentados em seguida em portugués estruturado, sendo o primeiro sem uso de sub-rotina e o segundo com sub-rofina, fazendo uso de varidvel global e local: programa TROCA_VALORES_EXEMPLO_1 At inteizo Bt dnteiro Angele leia a, 5 fin programa TROCA_VALORES_EXEMPLO_2 A+ inteiro Bi intetro procadimento TROCA Angele a fim lela a, 3 screva A, fim Observe que apesar de o segundo exemplo ser um pouco maior que o primeiro, ele possibilia uma economia de espago em meméria bastante interessante, pois 0 espaco a ser utiizado pela varidvel X é somente solicitado 4 | sub-rotinas 1411 > rotina TROCA é executada. Terminada a execucao, a varidvel X 6 quando a sub-r ficando em uso somente 0s espacos reservados para as variaveis desconsiderado, globois Ae B 8.5.1 - Escopo de Varidveis © escopo de uma varidvel ov sua abrangéncia esté vinculada a sua Visiblidade (Globo! ou Local/em relacéo as sub-rotinas de um programa, visto que see uisiblidade esta relacionada a suo hierarquia. Mas existe um detalhe importante @ ser levado em conto, pois uma varidvel pode ser considerada global para todas os sub-rolinas inferores @ uma rofina principal, e dentro de ume Beceas sub-rotinas a mesma variavel pode estar sendo utiizada como local Observe o grafico apresentado na figura 6.8. Rotina Principal AB Rotina t AX Rotina 11 Ww Rotina 12 Retina 2 i Rofina 24 x Figura 8.8 - Representagdo do escopo de variavels. 10 8.8, as variaveis A e B da rotina principal is sub-rotinas 1 e 2. Porém, dentro da sub- ‘assumindo assim um contexto local iilizando uma nova variavel, no caso Com relagdo ao grafico da figur so, num primeiro momento, globais &: srofina 1, a varidvel A é definida novamente, para essa sub-rofina {@ como se estivesse ul ES mos sera global para as sub-rofinas 1.1 e 1.2 com relado a varidvel A’ ave fernbem tera como global a varidvel X. As variaveis W e ¥ que, respeciivaments, pertencem as sub-rolinas 1.1 e 1.2 sdo loceis. A variavel B & global para os sub- -rofinas 1, 1.1 e1.2. Para a sub-rolina 2 as varigveis A e B da rotina principal séo globais e serdo também visualizadas como globais para a rotina 2.1, A rofina 2 possui uno 41142 Lagica Esruturada para Programagdo de Computadores | voriével local M que & considerada global para a rotina 2.1 que faz referéncio 8 variavel X local a essa sub-rotina, ndo tendo nenhuma referéncia com a varidvel X da sub-rotina 1 Um cuidado importante a ser considerado com relacao ao escopo de uma varidvel é 0 fato de uma varidvel ser declarada antes ou depois de uma seqiéncia de sub-folinas. Se declarada antes, ela sera global a todas as sub-rotinas existentes apés 0 sua declaracdo. Porém, se for declarada apés uma seqléncia de sub-rotinas, ela seré global do ponto em que esté para baixo e local com relacdo és sub-rotinas definidas acima dela, Por exemplo, 0 programa de troca ‘apresentado anteriormente tem os variaveis A e B globois para todo 0 programa. ‘Mas se as variaveis A e B fossem declaradas apds a sub-rotina, seriam locals, conforme 6 demonstrado em seguida: programa TROCA_VALORES Rotina com erro de declaragio de varidveis) procedimento TROCA X 2 inteiro inicio Kea ACB Bex fim A: inteiro inicio leia a, 8 roca fim ___ Isto caractriza um erro, pois as variéves AB para a sub-rofina TROCA néio so validas por ndo estarem definidas. Desta forma, estas variéveis precisam ser declaradas dentro da sub-rotina. 8.5.2 - Refinamento Sucessivo © refinamento sucessivo 6 uma técnica de programacéo que possibilita dividir uma sub-rofina em outras sub-rotinas. Deve ser aplicado com muito critério pora que o programa a ser consiruido ndo se forne desesiruturado e dificil de ser compreendido por voc ou por outras pessoas. 4 sub-rotinas 143 [> programa calculadora apresentado anteriormente permite que seja apli- cada esta técnica, pois nas quatro sub-rofinas de cdlculo existem instrucdes que efetuam as mesmas tarefas. Por exemplo: a entrada e a saida sdo efetuadas com as mesmas varidveis. Observe que as varidveis 4, B e R so definidas quatro vezes, uma em cada sub-rotina, ‘A solugéo € definir as variéveis A, B e R como globais e construir mais duas sub-rotinas, uma para entrada e a outra para saida. As quatro sub-rolinas atuais serdo diminuidas em némero de linhas, pois tudo que se repete nas sub-rotinas sera retirado. Observe a declaracéo das variéveis A, B e R como globais e a definicao e chamada das duas novas sub-rotinas, enlrada e soida. Perceba que nas sub- -rotinas de célculos ndo esta sendo deciarada nenhuma varidvel, uma vez que agora estdo fazendo uso do conceito de varidveis globais. programa CALCULADORA opcho + Anteiro R, A, B+ real (Sub-rotinas de entrada e safda’ procedimento ENTRADA fescreva “Entre um valor para A leia A eacreva “Entre ae om valor leia B fim procedimento SAIDA Angelo fim (sub-rotinas de cdlcules) procedimento ROPSOMA inicio entrada procedimento ROTSUBTRAGKO infeio eecreva “Rotina de subtracéo* Logica Estruturada para Programacéio de Computadores | P ReA-B fim procedimento ROTHULTIPLICAGKO inicio eecreva “Rotina de multiplicagso" entrada ReA*S sim procedimento ROTDIVis! escreva "Rotina de Divisa entrada se (2 = 0) entéo eacreva “Impose: REA/B saida tims fim (Programa Principal) inicio opcko + 0 enguanto (OPC%! “S) faga ‘escreva “1 ~ escreva “2 - subtracao eoreva “3 - Multiplicacao egoreva °S - Finalizagio* escreva “Escolha una opcio: * lela o7cio soja 1 faca x soja 2 faga r senfo escreva "Opcao invalica ~ fim_caso fim se ‘#im_enquanto fim 4 | sub-rotinos 145 [> 1A seguit, faca os exercicios da primeira bateria lexercicio de fixagdo 1) para treinar a aplicagdo dos conceitos de utilizagdo de sub-rotinas e aplicagdo de varia- veis globais e locais. 8.6 - Uso de Pardimetros conceito de passagem de pardmetros tem por finalidade servir como um ponto de comunicacdo bidirecional entre uma sub-rotina e 0 programa principal ou uma outra sub-rotina hierarquicamente de nivel mais allo. Desia forma, € possivel passar valores de uma sub-rotina ou rotina chamadora a outra sub-roting e vice-versa, ullizando a passagem de parametros que podem ser formais ou reais. 8.6.1 - Pardimetros Formais e Reais Sdo parémetros formais os varidveis declaradas juntamente com a identificagéo do nome da sub-rotina, Desta forma, um pardmetro é tratado da mesma forma que sdo tratados as varidveis globais ou locais, Considere como exemplo de parametros formals 0 cédigo em portugues esiruturado da sub-rofina, apresentado em seguida ‘procedimento CALCSOMA(A, B + inteiro) 2 + inteizo Zeares sin Observe que a varidvel Z é local e est sendo usada para armazenar a soma das varidveis A e B que representam os pardmetros formais da sub-rotina CALCSOMA. So considerados pardmetros reais aqueles que fazem a substituicdo dos porémetros formais, quando da utiizagéo da sub-rofina por um programa principal ov por uma rotina chamadora. Considere como exemplo de parametros reais 0 c6digo em portugués estruturado do programa que faz uso da sub-rotina CALCSOMA, apresentado em seguida: inicio lesa x leisy calcsoma(x, ¥) Leia 41146 Logica Estruturada para Programagao de Computadores | Pe Neste trecho, toda vez que a sub-rotina CALCSOMA é chamada, faz-se uso de pardmetros reais. Desta forma, sdo pardmetros reais as variaveis X, Y, We T, pois seus valores sdo fornecidos pela instrucdo lela, e também os valores 8 e 2. 8.6.2 - Passagem de Parametro por Valor e por Referéncia ‘A passagem de pardmetro 6 um fendmeno que ocorre quando ha a necessidade de efetuar a substituigo dos parametros formais pelos reais no momento da execucdo da sub-rotina. Essas passagens de parametros ocorrem de duas formas: por valore por referéncia. A passagem de pardmetro por valor caracteriza-se pela nao alterago do valor do parémetro real quando 0 parametro formal é manipulado dentro da sub- -otina. Assim sendo, o valor passado pelo pardmetro real € copiado para o parémetro formal, que no caso assume 0 papel de variavel local da sub-rotina Desta forma, qualquer modificacdo que ocorra na variavel local da sub-rotina nao afetard 0 valor do parémetro real correspondent, ou seja, 0 processamento é executado somente dentro da sub-rotina, ficando o resullado obtido “preso” na sub-rotina, A passagem de parémetro por referéncia caracteriza-se pela ocorréncia de alteragdo do valor do pardmetro real quando o pardmetro formal é manipulado dentro da sub-rofina, Desta forma, qualquer modificacao feita no parametro formal implica em alteracao no parémetro real correspondente. A alteracao efetuada & devolvida para a rotina chamadora Exercicios de Aprendizagem ‘A seguir, sGo apresentados dois exemplos de programa que uillizam o conceito de sub-rotina com passagem de pardmetro por valor e por referencia. 8.7.1 - Primeiro Exemplo Este exemplo faz uso do conceito de passagem de parametro por valor Desta forma, considere o seguinte problema computacional: Elaborar um programa que efetue o célculo e apresente 0 resultado de uma fatorial de um numero qualquer. 4 |Sub-rotinas 147 |> Diagrama de Quadros Quando se utiizam parémetros por valor em uma sub-rotina, eles devem ser mencionados no diagrama de quadros, conforme indicado no exemplo da figura 89. Programa Cale Fatoral Inicio nie do Médula Lela N Fat 1 Tet Procedimento Fatoral wa Fatoral (N) ea Fim Escreva Fat Retoma Figura 8.9 - Diagramas de quadros para passagem de pardmetro por valor. Portugués Estruturado programa CALC procedimento FATORIAL (1 : inteiro! Z, FAP + inteizo Anfeio FAT © 1 para I de 1 até N passo 1 faca FAT © FAP * I fim para fin ( Programa Principal ) inicio escreva ‘Qual fatorial lela Lure Neste exemplo, é indicado 0 uso da passagem de parametro por valor. No caso, a varivel N é 0 parémetro formal, que receberd o valor fornecido & variavel LUMITE por meio da sub-rotina FATORIAL. Esse valor estabelece o nimero de vezes que 0 laco de repeticao deve ser executado. Dentro do procedimento é encontrada 41148 Logica Estruturada para Programactio de Computadores | Pe @ Voriavel FAT que realiza um efeito de acumulador, tendo ao final do laco o resul- tado da fatorial do valor informado para o parémetro N. Ao término do laco, a instrugdo escreva FAT imprime o valor da variavel FAT, que somente é valida dentro da sub-rotina e por esta razao ficard “preso” dentro delo. A passagem de pordi metro por valor é utlizada somente para a entrada de um determinado valor. 8.7.2 - Segundo Exemplo Este exemplo faz uso do conceito de passagem de parametro por referéncia Desta forma, considere 0 seguinte problema computacional: Elaborar um programa que efetue o célculo e apresente o resultado de uma fatorial de um némero qualquer. Diagrama de Quadros vando se utiizam parémetros por referéncia em uma sub-rotina, eles dever ser mencionados no diagrama de quadros, conforme indicado no exemplo da figura 8.10. Programa Fatoral Procedmento Fatoral 0 Fal) Inicio Inicio do Moule Leia Line Fatt Tet Fatal (Limite, J Fate rato! EecrevaR Retarna (Fat Fin Figura 8.10 Diagramas de quads para passagem de pardmetro por reteréncia. Portugués Estruturado programa FATORTAL procedimento FATORIAL(W : intelyo, var FAT : inteize) T + inteire de 1 até W passo 1 faga fim para fim “4 | Sub-rotinas UPrograna Princip: gual faterial Neste exemplo, é indicado 0 uso da passagem de pardmetro por referéncia (varivel FAT por meio da instrugéio var na declaragao do nome da sub-rotinal. A varidvel N neste exemplo continua sendo do tipo passagem de pardmetro por valor, pois ela receberd o valor fornecido varivel LIMITE por meio da sub-rotina FATORIAL Esse valor estabelece o nimero de vezes que 0 laco deve ser executado. Dentro do procedimento é encontrado a variavel FAT que é do fipo passagem de parametro por referéncia e possui no final o valor acumulado do célculo da fatorial Ao término do laco, 0 valor da variével FAT é transferido para fora da rotino, ov seja, é transferido para a varidvel R do programa principal. EntGo, a instrugGo escreva Rimprime o valor recebido de dentro da sub-rotina por meio da variével FAT. A passagem de parametro por referéncia é ullizada para que se fenha a saida de um determinado valor de dentro de uma sub-rotina. A seguir, faca os exercicios da segunda bateria (exercicio de fixagdo 2) para treinar a aplicacao dos conceitos de uiilizagao de sub-rotinas com passagem de pardmetro por valor por referéncia 8.8 - Sub-Rotina do Tipo Funcao Uma fungdo & um bloco de programa, como também 6 um bloco de programa do tipo procedimento. Essa esirutura contém inicio e fim e é identiicada por um nome. Uma sub-rotina do tipo fungao é muito parecida com uma sub- -rolina do tipo procedimento. O desenho do diagrama de quadros e a sintaxe em Portugués estruturado também sao idénticos ao modelo usado para definir um procedimento. Observe a figura 8.11 com um exemplo basico do diagrama de qua- dros e a sintaxe do cédigo em portugués estruturado de uma funcdo. Logica Esiruturada para Programacdo de Computadores Diagrama de Quadros Programa Prncpal Fangao Retina [paramotoa™ Inicio nico do Modula Rotina [isparaenetoe>y) Insrugdes a serem executadas Fin quando ocorer a chamada da ungo do programa principal Rater Ratna Figura 8.11 - Estrutura de uma fuga. Portugués Estruturado programa TESI ( Sub-Rotina ) fungo ROTINA( (parametros}] + [var] [evaridveis>) Diagramas de Quadros Funeio Compara AS) nico do MBdulo Inicio [Compara A= 6. Tela nara, au Retorna Compara Programa Gomparaelo Compara (num, nam) Escreva Escreva valores "valores gua Diferentes Fim Figura 8.12 -Diagramas da fungéo comparacdo e do programa principal. Portugués Estruturado Jtura dos valores reais para as varidveis (© programa principal efetua a leitura s Numi NUM2, ranlerindo os seus valores para os parémetos formats 9 Bdo a vos valores, tornando-se para r tipo real, que assumem seus respectivos valores, ros Fe Tre ceguide 8 processada a comparagdo dos dois valores e implicado @ funcdo © retome da condicGo, desta forma o retorno desta fungdo deve ser logico. ‘programa COMPARA OMPARA(A, B + real) + 1égico fungéo Now, wou? + real deia NUM forme 0 lo. valo: me 0 20. valor: * lela Nou se (compara (NUML, NUM2)) entéo 41154 Lagica Esruturada para ProgramacBo de Computadores | P 8.8.2 - Programa Calculadora Em um exemplo anterior, foi demonstrado © uso de sub-rotinas do tipo procedimento no programa colculadora. Naquele momento, as sub-rotinas de cAlculo foram simplificadas (por meio do conceito de refinamento sucessivo) com 0 uso das sub-rotinas de entrada e saida que sdo operaces genéricas de todas as rotinas de célculo, A proposta seguinte é criar uma sub-rotina de funcdo que efetue o célculo, segundo 0 pardmetro de operacdo fornecido. Assim, essa sub-rotina deve receber tr€s pardmetros, sendo os dois numeros mais o operador para célculo. 1. Seo operador for “+, faz-se a soma dos dois valores; 2, Seo operador for “-", faz-se a subtragdo dos dois valores; 3, Seo operador for“, faz-se a mulliplicagdo dos dois valores, 4, Seo operador for “/*,faz-se a divisdo dos dois valores Observe no exemplo do diagrama de quadros (figura 8.13) e do trecho de programa em portugués estruturado em seguida da rofina CALCULO quando da uillzagdo da estrutura de controle com méltipla escolha, a omissdo da instrugco sendo. Isto & possivel e pode ser utiizado quando nao se deseja estabelecer uma ‘operagéo ou execucdo para alguma opcdo invélida, Perceba que isto, neste exemplo, ndo é necessério, uma vez que 0 ferceiro parémetro sera indicado dentro de cada sub-rotina de calculo. Diagramas de Quadros Fungi Catcuo (8, Oneredor) Inicio do Medio Operador —— ‘Agao Paro camo | oy 7 nae are Retora Catala Figura 8.13 - Diogramas para a fungdo CALCULO. 4 | Sub-rotinas 155 [> Portugués Estruturado procedimento ROTSOMA inicio = egcreva “Rotina de soma’ funglo CALCULO(A, B + real, OPERADOR + caractere) ae os entrada caso OPERADOR i ota, Be) +" faga CALCUL © A + oo faga CALCULO © A - B st face AtB procedimento ROTSUBTRAGKO faga aA/B Angelo escreva “Rotina de sul entrada Re cdleulo(a, 5, *- A seguir, é apresentado somente o algoritmo em portugués estruturado do. programa calculadora, aplicando o uso da nova funcao. ——————— Ee procedimente ROTMULTIPL programa CALCULADORA inicio fim var egoreva “Rotina de multiplicacéo" R, A, B+ real entrada Re of awe (Sub-rotinas de entrada e saida) said em procedimento ENTRADA inicio procedimento ROTDIVISKO egcreva “Entre um valor para A: infeio deta A escreva “Rotina de Divisio’ escreva “Entre um valor para 8 leia 2 0) entéo c escreva “Inpossivel dividir” (Pungo para 0 célculo das operagées) R & cdloulo(a a) ‘ eaida funghe CALCULO (A, eal, OPERADOR : caractere) + real eetas| ingeio oy geja "+" faga cALCULO A+ B ( Programa Principal ) soja °-" face LO aA ~ B soja “** faga CALCULO GA * B var seja */* faga cALcULOC A / 8 cee fim caso ines fim orcs + 0 enguanto (OPCHO <> “S*) tage procedimento sAfDA eacreva “1 ~ Soma* inicio eacreva “2 - Subtracio" escreva *O resultado de A com B é = * escreva "3 - Multiplica: fim escreva “4 - Divisao! esoreva "5 - Pinalizaca: (sub-ro! egoreva “Escolha uma opcdo: * deia OPCs Lagica Estrturada para Programacao de Computadores | D> 4 | sub-rotinos -Opeio invdlida - Tente novemente fim caso fimse #4m_enquanto fim A seguir, faca os exercicios de fixagdo para treinar a aplicagéo dos conceitos de utiizagGo de sub-rofinos do tipo funcéo. 8.9 - Exercicios de Fixagdo Com base nas técnicas de programacéo apresentadas neste capitulo, desenvolva a solucao para os seguintes exercicios: @) b) Considerando a necessidade de desenvolver uma agenda que contenha nomes, enderecos e telefones de 10 pessoas, defina a estrutura de registro apropriada, 0 diagrama de quadros e a codificagéo de um programa que, por meio do uso do conceito de sub-rotinas, apresente um menu e suas respeciivas rotinas para a execucdo das seguintes elapas: ¢ Cadastrar 0s 10 registros. ¢ Pesquisar 0s 10 registros, um de cada vez, pelo campo nome (usar 0 método sequencial ¢ Classificar por ordem de nome os registros cadastrados, 4 Apresentar todos os registros. 4 Sair do programa de cadastro, Considerando a necessidade de um programa que armazene o nome e as notas bimesirais de 20 alunos do curso de Técnicas de Programacéo, defina a estrutura de registro opropriada, o diagrama de quadros e’a codificagéio de um programa que, por meio do uso do conceito de sub-rotinas, apresente um menu e suas respectivas rotinas para a execugdo das seguintes etapas: + Cadastrar os 20 registros {apés 0 cadastro efetuar a classif- cago por nome} Logica Estruturada para Programagao de Computadores | D> Q 4 |sub-rotinas 4 Pesquisar os 20 registros, um de cada vez, pelo campo nome {usar 0 método bindrio; nesta pesquisa 0 programa deve tam bém apresentar a média do aluno e os mensagens: “Apro- vado" caso sua média seja maior ou igual a 5, ou “Reprovado para média abaixo de 5} ‘¢ Apreseniar todos os registros, médias e a mensagem de apro vacdo ou reprovacao. '¢Apresentar apenas os regisiros e médias dos alunos aprova- dos, 4 Apresentar apenas os registros e médias dos alunos reprova- dos. Soir do programa de cadastro. Elaborar um programa que armazene o nome e a altura de 15 pessoas com 0 uso de registros. O programa deve ser manipulado por meio do uso de sub-rotinas tanto na apresentacéo do menu como também de suas rotinas, para a execucéo dos seguintes etapas: 4 Cadastrar 0s 15 registros. 4 Apresentar os registros (nome e altura) das pessoas menores ou iguais a 1.5m. 4 Apresentar os registros nome e altura) das pessoas que sejam maiores que 1.5m, ¢Apresentar os registros [nome e altura) das pessoas que sejam maiores que 1.5m e menores que 2.0m. ¢ Apresentar todos os registros com a média exiraida de todas «as alturas armazenadas. 4 Sair do programa de cadastro, Considerando os registros de 20 funcionérrios, contendo os campos matricula, nome e salério, desenvolver um programa que ulilizando conceito de sub-rojinas apresente um menu © suas respectivas rolinas para a execucao das seguintes etopas: 4 Cadastrar os 20 empregados. ¢ Classificar os registros por nimero de matricula. ¢ Pesquisar um determinado empregado pelo nimero de matricula (método binério} 4 Apresentor de forma ordenada os registros dos empregados que recebem salarios acima de $1.000. 4 Apresentar de forma ordenada os registros dos empregados que recebem salarios abaixo de $1,000. 159 [> 41160 ‘+ Apresentar de forma ordenada os registros dos empregados que recebem salarios iguais a $1,000. ¢ Sai do programa de cadastro Desenvolva os algoritmos dos problemas apresentados em seguida e suas sub-rotinas do tipo procedimento, Cada problema deve ser resolvi- do usando passagem de pardmetro por valor e por referencia. Criar um algoritmo que efetve o célculo de uma prestacao em atraso, Para tanto, ullize a formula PREST = VALOR + (VALOR * (TAXA/100}* TEMPO). Apresentar o valor da prestacéo. b)Elaborar um programa que possua uma sub-rotina que efelve & permite apresentar o somatério dos N primeiros némeros intros, efinidos por um operador. (1+2+3+4+5+6+7+..4NI ) Escreva um programa que uiiize uma sub-rotina para colcular © ‘serie de Fibonacci de N termos. A série de Fibonacci é formada pela sequéncia: 1, 1,2, 3,5, 8, 13, 21, 34, .. etc. Esta série coracteriza-se pela soma de um fermo posterior com 0 seu anterior subsequente Apresentar 0 resultado. 4) Desenvolva um algoritmo de programa que crie uma sub-roling para calcular e opresentar 0 valor de uma poténcia’ de um numero Qualquer. Ou sea, ao informar para a sub-rofina o nimero @ suo poténcla, deve ser apresentado o seu resultado, Por exemplo, se for Frencionado no programa principal a sub-rofina POTENCIA2,3) deve ser apresentado 0 valor 8. {@)_Elaborar um programa que efetue a letra de um némerg inteiro © presente uma mensagem informando se © némero @ par ov impar a) fetue a leitura de trés valores (A, B e Cl Elaborar um programa que ef ‘ 5 final a soma dos quadrados dos tres e apresente como resultado valores lidos. 4) Eloborar um programa que efetve a leitura de trés valores (A. Be C) © apresente como resultado final o quadrado da soma dos és valores lidos. hh) Elaborar um programa que uilizando uma sub-rotina apresente o valor de uma temperatura em graus Fahrenheit. O programa deve ler a temperatura em graus Celsivs. 1} Elaborar um programa que por_meio de sub-rofina efeive 9 aapresentacao do valor da converséo em real (RS) de um valor ido ehh dolar (USS). Deve ser solicilado por meio do programa principal 0 Valor da cotacao do délar e a quanlidade de délar disponivel Lagica Estruturada para Programacéo de Computadores | Pr }) Elaborar um programa que por meio de sub-rotina efetue a apresentagéio da mensagem: “Este valor & divisivel por 2 e 3°. Deve ser solicitado pelo programa principal o valor a ser veriicado. Caso © valor nao atenda @ condicdo desejado, a sub-rotina deve opresentar a mensagem: “Valor invalido” k) Eloborar um programa que por meio de sub-rotina efetue a ‘apresentagdo da mensagem: “Este valor é divisivel por 2 ou 3°. Deve ser solicitado pelo programa principal o valor a ser verificado. Caso © valor nao ctenda & condigéo desejada, 0 sub-rotina deve apresentar a mensagem: “Valor invalido” 1) Elaborar um programa que por meio de sub-rofina efetue a opresentagdo da mensagem: “Este valor nao é divisivel por 2 e 3 Deve ser solicitado pelo programa principal o valor a ser verificado Caso 0 valor néo atenda condi¢ao desejada, a sub-rotina deve apresentar a mensagem: “Valor invélido”. m) Elaborar um programa que por meio de uma sub-rotina apresente como resultado um némero positive, mesmo que a entrada tenha sido feita com um valor negativo, 1A) Elaborar um programa que efetve a leitura do nome e sexo de um individuo. Por meio de uma sub-rotina o programa deve apresentar a mensagem “Ilmo. Sr.”, caso 0 sexo seja masculino, e “lima. Sra”, caso 0 sexo seja feminino. Apresentar também junto de cada mensagem o nome do individu. 0) Elaborar um programa que por meio de sub-rotina apresente 0 resultado do valor de uma fatorial de um némero qualquer. p)_ Um determinado estobelecimento fara uma venda com descontos nos produlos A e B. Se fore comprados apenas os produtos A ou apenas os produtos B, 0 desconto sera de 10%. Caso sejam comprados os produtos A e B, 0 desconto sera de 15%, O custo da unidade de cada produto ¢ dado, respectivamente, para os produtos A e B como sendo de $10 e $20, Elaborar um programa ‘que por meio de sub-rotina calcule e apresente o valor da despesa do freguas na compra dos produtos. Lembre-se que o fregués pode levar mais de uma unidade de um determinado produto. Desenvolva 0s algoritmos dos seguintes problemas, usando 0 conceito de sub-rotina de funcées. {) Elaborar um programa que possua uma sub-rotina que apresente 0 somatorio dos N primeiros ndmeros inteiros, definidos por um operador (1+2+344+5+647+..AN) 4 |Sub-rotinas 61> Escreva um programa que utlize uma sub-rotina pora calcular a série de Fibonacci de N termos. A série de Fibonacci é formada pela sequéncio: 1,1, 2, 3, 5, 8, 13, 21, 34, .. ele. Esta série caracteriza-se pela soma de um fermo posterior com o seu anterior subseqiente, Apresentar o resultado. Criar um algoritmo que efetue o calculo e apresente o valor de uma prestagéo em atraso. Para tanto, ullize a formula PREST = VALOR + (VALOR * [TAXA/100] * TEMPO). Desenvolva um algoritmo de programa que crie uma sub-rotina para calcular e apresentar o valor de uma poténcia de um nmero qualquer. Ou seja, ao informar para a sub-rofina o nimero e sua poténcia, deve ser apresentado o seu resultado. Por exemplo, se for mencionado no programa principal a sub-rotina POTENCIAI2,3}, deve ser apresentado 0 valor 8. Elaborar um programa que efetve a leitura de trés valores (A, B e C) @ opresente como resultado final a soma dos quadrados dos trés valores lidos. Elaborar um programa que efetve a leitura de tr&s valores (A, Be C) e presente como resultado final o quadrado da soma dos trés valores lidos. Elaborar um programa que efetue a opresentagdo do valor da converstio em real R$) de um valor lido em dolar (USS). O programa deve solicitar 0 valor da cotagao do délar e também a quantidade de délares disponivel com 0 usuario, Elaborar um programa que efelue a apresentacdo do valor da converséo em délar (US$) de um valor lido em real (R$). O programa deve solicitar o valor da cotagdo do délar e também a quantidade de reais disponivel com o usuGrio. Elaborar um programa que com o uso de uma sub-rofina do tipo funcdo opresente o valor de uma temperatura em graus Celsius. 0 programa deve ler a temperatura em graus Fahrenheit. Lagica Estruturada para Programacio de Computadores | P APENDICE Exemplos de Codificac¢do Este apéndice apresenta @ codificagéio do programa calculadora feito nas linguagens de programagdo Pascal, Qbasic e C. Observe atentamente cada detalhe, fazendo uma comparagdo entre as sintaxes. Algoritmo em Portugués Estruturado programa CALCULADORA pcho + caractere X, A, Bt real procedimento ENTRADA fescreva “Entre um valor para A leia A fescreva “Entre um valor para 8 leia 5 fim funglo CALCULO(X, ¥ + real, OPSRADGR : caractere) inicio aeja “+" faga CALCULO sega *-* faga CALCULO geja “** faga CALCULO geja */* faga CALCULO #im_caso fim procedimento SAfDA inicio escreva “0 resultado de fim | compos de Codificagéo ‘procedimento KORG inicio fescreva “Rotina de Soma eulo(a, 8, escreva “Rotina de Subtracto" xe lola, 8, “") fin procedimento ROTMULPIPLICAG! eacreva "Rotina de multiplicagao’ entrada opcio + enguanto escreva "3 - Multiplicacdo” escreva Fim de Programa escreva “Escolha uma opedo: * leia 0: se (0PCA plicagto Logica Estruturada para Programacéo de Computadores | D> soja "4" faga rotaivis jenio eecreva “OpsSo invél ida ~ Tente novamente #im_caso fim se #im_enquanto fim Codificagéo do Programa Caleuladora na Linguagem Pascal Em seguida é apresentado um exemplo de um programa escrito na sintaxe da linguagem Turbo Pascal da Borland. O conceit Turbo se da pelo fato de a Borland ter acrescentado rotinas na linguagem que faciltam sua operacéo, tornando-a mais amigével em relacdo 4 sua notacdo padrao. Um exemplo dislo a instrugdo elrser, que tem por finalidade limpar a tela. Esta instrucao nGo existe no Pascal padréo; $6 no Turbo Pascal. Se vocé estiver usando 0 Pascal padréo e quiser limpar a tela, tera de criar uma rotina para escrever espacos em branco na tela, program calculadora; (subrotinas) begin write( ‘Entre um valor para write(*Eatre um valor para B: ‘); readin(b ‘yi readin (al function ealeulo(x,y:real; operador: char) :real; begin case operador 0 ‘er; ealeulo calculo calculo ealculo procedure saida begin writeln; writeln writeln(*O resultado entre key’ 4 | bxempios de Codticacso Procedure ROTSOMA; begin eleser; weiteln(*Rotina de soma’); writeln( ‘); weiveln; weiteln riscaleulo(a,b,/#"); ena; procedure ROTSUBTRACAO: begin eleser: teln(*Rotina de Subtracao’); weitela (+= . ); weiteln; weiteln riscalculo(a,b,'~'); end; procedure ROTMULTIPLICACH begin elrser; writeln (‘Ro Multiplicacao’ writeln(*———________}; writen; writeln. riscalculo(a,b,'*/); procedure ROTDIVISAO; begin clrser? weiteln(‘Rotina de Divisao') writeln(‘—————); writen; writeln; entrada; riscalculo(a,b, ‘/ saida Programa Prin be while begin clreer, nu Principal’) weiteln(*————~"); writeln; writ weiteln (‘1 = Soma’); 41166 Logica Estruturada para Programagdo de Computadores | D> sberacao’V7 tiplicacal weiteln('4 ~ Divieao’) z weiteln('3 ~ a 5 - Fim de Programa’): weiteln| weitelns ‘Eecolha uma opeao zeadln (opcao <> '5* the: 3°: xotmultiplicacao; tdivisao, ‘ise write(‘Opcao invalida - Tente novanente’ ) readkey; end 2d. Codificagéo do Programa Calculadora na Linguagem QBasic Em seguida é apresentado um exemplo de um programa escrito na sintaxe da linguagem QBasic da Microsoft. Observe que alguma coisa da sintaxe do Basic 6 como a do Pascal. Em QBasic a instrucdo que efetua a limpeza de tela é dis. Em programas escritos na linguagem Pascal, as sub-rotinas sdo denominadas: Procedures e Functions. sa em QBasic sdo, respectivamente, Subs {procedures} Function. Observe que em GBasic 0 programa principal é escrito na frente das sub- -rofinas. FUNCTION calculo(x AS DECLARE SUB entrada ( DECLARE SUB saida () DECLARE SUB rotsoma () DECLARE SUB rotsub' DECLARE SUB rotmule: DECLARE SUB DIM SHARED ‘ograma opcaos DO WHILE opcao <> “5 cus PRINT “Menu Principal” PRINT *————"» PRINT: PRINT 4 | Exemplos de Codificagéo PR Multiplicacao" PRINT INPUT “Becolha una o opcao <> “S* THEN "7 CASE opcac$ PRINT "Opcao invalida - Tente novamente 1o0P Subrotinas FUNCTION calculo(x, y AS SINGLE, operador AS STRING) SELECT CASE operador CASE “+": calculo = x + y cASE salculo = x - CASE salculo = x * calculo = x / INPUP “Entre un valor PRIN? *Rotina de Divisao” terada calculo(a, ida, rotmiltiplicacao PRINT “Rotina de ul PRINT PRINT : PRINT : PRINT entrada declare : 5 uses - [include 4172 Lagica Estruturada pora Programacéo de Computadores Indice Remissivo ‘lgoritmo computccional ‘algoritmo grafico. cAleulos materaticos. 0s0..fim_caso Chopin losstficacao de elementos. codiicagdo do programa ‘comunicagéo bidirecional conjuncao conjunto, conjunto de registros. conjunto matricial, constantes interas. constantes. construgo de programas dades caractores. dados lagicos. dodos numéricos. decisdo composta 43 decisdo encadeada 35,43, dlecisdo simples. 35,43 diagrama de biocos. 16,17.27 Diagrama de Chopin. 6 Diagrama de Nassi-Shneiderman 18 lograma de ns. 16,18 dlograma de quadro 21,26 diograma de quadr0s ..n.15, 16, 7, 27, 95, 36, 40, 7) 100, 101, 17,188, disiuncdo. a dv. 49 duas dimensbes. 99,100 elementos, 175 clerentos bésicos 2 cencadeamento 83 cenguanto, 55,56, 59 entrada 21,144 Escopo de varivels. 142 escreve 25,27.71, 15 estado logico 39 cesirutura de dados. 69,113 cesirutura do algoriimo 26 execuctio de célculos matemiéticos. 23 expressées oriimétics. 224 expresses mateméticas 24 falsa 35,36, 37 fatorial 59, 61,62, 63 fim, 27,28 fim_caso. 40 fimse 36 Logica Estrturada para Programacao de Computadores | hierarquia identiicador indice. instrugdes basicas inversdo do resultado lagico lago de repetigoo lela linguagem de programagao. linguagem estruturada linguagens de programacéo I6glca de programacéo loopings malhas de repetigao. mati matizes ‘matizes bidimensionais ‘matizes unidimensionais. rmétodo de pesquisa moduloridade médulos médulos de programas. Nossi Nossi-Shneiderman, “4 |Indice Remissivo ma 72,74, 04 27,28 24 42 57, 58, 55, 56,63 25, 27,71, 115,147 24 19 18 18 55 programasdio estruturada 18,198 ° programas seqUenciais 21 operado matemética 24 operadoraritmético. 49 R coperadorrelaconal 39 ‘operadores ariméticos 21,28, 24 aa ual? operadores igicos 35, 39,40 ae i) operadores relacionas. 35 regio de memoria eal coxdenacéo de elementos % registro ud — %% registros 69,19 f ralacéo de parémetros, 133 p relogdes lgicas 39 repet 55 polowras-chave. 24 repita 55, 56,57,61 para 55, 56,58, 62,72, 83, representacéo grtica 0 ppardmetro por referéncia 7 representocio textual 18 ppardmetro por vor. 7 resto. 49 parémetros 133, resto do uma dist 49 parémetros formals. 146 parémetos reais 146 s ppassagem de parémeto 129,146, 147,148 Poe ‘eB sida, 2,144 pesquisa binéra 87 a pesquisa seqUencial a4 seventdo 86 portuguas estuturodo 16, 17, 18,21, 25,26, 27, se aa 36,40, 71,83, 100,17, 198 Shneidermen v posicBes de meméria n sm 88 preenchimento da tabela 101 ne 26 a 7 subalgortimos. 129 problema computational 25 nce "9 problemas compuiacionais 26 sueoting ea procedimentos 11 processamento 2 T processamento computaconal 24 febelos ” Program Design Language. 15,16 tabelas em meméria, 69,99 Programa de computador 25, 28,29 t8cnicas de modulaizacto. 131 Lsajca Estutucada para Programacto de Computedores | 4 Indice Remissivo W71> teste condicional. tipo fipos de dados, tipos primitives tomada de decisdo. fomada de decisbes, trabalho de processamento, uU uma dimenséo nica dimenséo. utlizagdo de matrizes valores caracteres. 22 valores inteiras 2 valores agicos. 22 valores reais, 2 vor ama varidvels, 21,24, 69,22, 23 variaveis compostas. oo varigveisindexadas. 69,71,99 voaridveis subscrtas, 6 voriével n verdade'ra, 35, 36,37, velores. oo Légica Estrturada para Programacdo de Computadores | Referéncias Bibliograficas BOHM, C; JACOPINI, G. Flow Diagrams, Turing Machines and Languages with ‘Only Two Formation Rules. Communications of the ACM, Vol. 9. No. 5, mai 1966, pp. 366 - 371. CAINE, S. H.; GORDON, E. K. PDL: A Tool for Software Design. In Proceedings of the National Computer Conference. Vol. 44.1975, pp. 271-276. CHAPIN, N. A New Format for Flowcharts, Software: Practice and Experience. Vol. 4, No. 4, abr 1974, pp. 341-357. DUKSTRA, E. W.; BUXTON, J. N.; RANDELL, B. Structured Programming, Software Engineering Techniques. Brussels, Belgium, NATO Science Committee, 1969, MANZANO, J. AN. G. FIGUEIREDO, J. Algoritmos: Légica para Desenvolvimento de Programacéo. 12. ed. Séo Paulo: Erica, 2001 NASSI, |; SHNEIDERMAN, B. Flowchart Techniques for Structured Programming, ‘ACM SIGPLAN Notices. Vol. 8, No. 8, ago. 1973, pp. 12-26. PRESSMAN, R. Engenharia de Software. Séo Paulo: Makron Books do Brasil, 1995, 4 [indice Remissivo Marcas Registradas Qbasic é marca registrada da Microsoft Corporation. Turbo Pascal e Turbo C sdo marcas registradas da Borland Sofware Corpo- ration Todos os demais nomes registrados, marcas registradas e direitos de uso citados neste livro pertencem aos seus respectivos fabricantes, Légica Estruturada para Programacdo de Computadores | Pe lpi - Programas Oreniaé Obst Autor al uate Caos Coe: sapighas 17 x24em Apes hunter com Deh neat 6- Una sooo ren ee Socal a Slates Wiha CSepo 2-25 pp 17240 : forse brcs eas sos namrion aeguagen SOL snes Bourse arp rn ety inedenecrcagua bum cltinncomereresprosorapesodnpinpas Scop ots Epes mtn onto Eoin esrtlkahnses srt dos gts apraypescernntemaocDeyvGehisBace aed oar nh Tie Arande ‘oe Marco ae a cin 2310 pgs Fema 7 Diphis-Conas Pagar e Rcaber - Fuoco leo Bes Mac Cgo: 785-595 plgnss+ 1722400 vec gga teams test et eters retest Scouse anata ofeuges ods, pojndeumssennessacegapen De {Shpeonalsnaytcs cone peyanai oats OLEDS~unanovafomade acess ‘Scssaramconparcns 00 pasando qalaml pate ds erxsrres DANS soe $e ana ose in tard a wt des, ne ree anpmeno indo naconugo wo unssimacorealdecriasapaie acter xpos ress, Dp 6 com SOL Serer 210 - Programas para Banco de Dados ClenteSerger fur Menton ina beta bgo 208-26 pugras Formate 17224cm ee pabanin de cadosusndb as coplitzon $0. Sener 2tn dunt eerie care cistcnewt Nope pen athens bspu SCD sons ML,OCL edisiets ‘opti 6-Desenoiende Aone ‘te rae Cantar Vonks: E25/ 258 pgs Olvoss cho emccopates Emcxssumao letra unas rege omen anc frsecapoeapestontnirp ants dobre ctatocecerstas parca d Sal eabap naa Sonconbon eee wpuneace pices comcast ocgiyata ste ome, ajo desemesetvs deca Estudio de Kya Fu dt auto Marzano és: 62 cea stat ests qu einisancnn pended tlm ryan Obet Fsaartinsaspeyenikyirasosiaracpandoluna aacesrccre sles gncl osaurani neds peyamaie és aapdnescne eapoan orn. Bhnuisgeumcanassarasqerdeaen tentoasion prepaostosencl oss uc apd sete nse antares aes ena ‘exlontada a objets crag de components. “ Xtc DaphipraLoue ‘or aes os Santos Fer Cig 721 20pm: 17x24em Kyfxéoprtodomaiosoderelinetde oar Apt pessssconunspadon ase theseeperacnanin rea oni pon aid Delph para Gunbiopareo lane aaa desenahodor sas cb rans, sia Wndows punaveelnapenti: Ota em ince ecedLnntts raise Seiden oan vate fapano vi. ssosbrste use CADASTRO PARA MALA DIRETA Preenchendo este formulério e enviando para Edi tora Erica, vocé receberd informacées periddicas sobre os nossos lancamentos. poco 4 | omen pares sess rane ; Voie Fanaa Proto de Conpulares | V [outer tion 6 Maar isaN05- 71948608 | | Nome: 1 | TT 1 LI! | Enderego para corespondin | T 1! | | CEP: ! H | | } ] | | | I 0] Xx -| I | Fox o[x|x S ! | emai: [ | | I | DEINE-NOS SABER SUA OPINIAO SOBRE ESTE NOSSO PRODUTO f | que mi aga vosk oo? | ( 0 conto | ( ) as stages ‘fora came fe esto ! ( | | (Ni gos | VC pov coma ace classe ete toe 1 (cases (yim | 1) aninco (Rept | (ea (em | | = (ne | set! -a---------4 sey099s epee e “vai volua WHOLIGA sod oBed ies ojas 0 UVTSS OlHYSS3OSN 3 OVN visodsay OVLYVS corny oys/ua! vee vnoy ov dn yEILOLY-WAS/LHe AW Sy ey PARA PROGRAMACAO DE COMPUTADORES Este trabalho esté direcionado 0 piblico estudante de ee eo aes precisomente aos esludantes de [ogica de programacéo, Neste sentido, o lvro abrange uma estruture bésica de Cee eee eee eee Coen eater ee Aa oe ee Te a ee ce CO eae ee ee creer i i ieee ee ee © copitulo 2 opresenta 0 conceito de programacéo Pee ree ae ae Cr ee ae ee ed Fe a Re ee a Ce ce eae ed eee Ca eee ee a Raed a ee operadores relacionais e operadores logicos. Ocopitulo 4 mosta astrés formas de executor repetigoes Ce cee ocean ean Coos Cee Read eae een vvoloras armazenados em meméria na farma de matrizes Ce ger aa ea Pika tc oe eed indi. Ae Re ele Te ee CT Cree ee ee ee eee tabela, denominada registro, re ene ee CeO ee a ae ea) Pen ee etn es ur Ce a Cre Pr ee ee EE Wisite uma lvraria, wormricacombr Publicacoes Erica, Clareza e Objetividade.

Você também pode gostar