Professional Documents
Culture Documents
APOSTILA DIDTICA
LGICA DE PROGRAMAO
Curitiba / 2010
SUMRIO
1.6 A LINGUAGEM ALGORTMICA PSEUDOCDIGO.......................................................9 1.7 REGRAS PARA CONSTRUO DE ALGORITMOS ........................................................10 1.8 FASES DOS ALGORITMOS ENTRADA, PROCESSAMENTO E SADA ....................10 1.9 EXEMPLO DE ALGORITMO ................................................................................................10 1.10TESTE DE MESA.....................................................................................................................11 1.11 AS ETAPAS DA ENGENHARIA DE SOFTWARE UMA VISO GENRICA...........11
2.5
3.5.1 Operadores Aritmticos ....................................................................................................................... 19 2.5.2 Tipos de Expresses ............................................................................................................................ 20 2.5.2.1 Expresses Aritmticas ................................................................................................................ 20 2.5.2.2 Expresses Lgicas ...................................................................................................................... 21 2.5.2.3 Expresses Vlidas vs. Expresses Invlidas............................................................................... 22 2.5.2.4 Expresses Literais....................................................................................................................... 22
REFERNCIAS ......................................................................................................................58
1.1 INTRODUO
Este captulo tem por objetivo despertar no aluno a capacidade de reconhecer os requisitos para a construo de um algoritmo. Sero construdos alguns algoritmos que no obedecem a regra de construo exigida na matria, pois somente servem para ilustrar o pensamento correto para construo dos algoritmos.
1.2 LGICA
Lgica a cincia do raciocnio e da demonstrao, ou seja, o conjunto de leis, princpios ou mtodos que determinam um raciocnio coerente, induzindo uma soluo prtica e eficaz do problema (Villano, 2000). Como filosofia, ela procura saber por que pensamos assim e no de outro jeito. Como arte ou tcnica, ela nos ensina a usar corretamente as leis do pensamento. por isso que a lgica estuda ou tem em vista a correo do raciocnio. A lgica tem em vista a ordem da razo. A lgica ensina a colocar ordem no pensamento (Villano, 2000). Por exemplo: - Todo inseto invertebrado; - A barata um inseto; - Logo, a barata um invertebrado. - Os invertebrados no possuem ossos; - A baleia possui ossos; - Logo, a baleia no um invertebrado. Lgica: - Para trocar a lmpada - Para ligar o computador - Para fazer um churrasco A lgica condicional permite avaliar uma determinada condio, permitindo a execuo de duas aes diferentes dependendo do resultado verdadeiro ou falso, da condio. A lgica repetitiva permite a execuo de uma condio enquanto uma condio for verdadeira. Lgica a organizao do pensamento para resolver um determinado problema atravs da programao. De acordo com (Manzano, 1997) para entendermos o que Lgica, precisamos entender o que um problema. Pode-se dizer que problema uma proposta duvidosa que pode ter inmeras solues ou uma questo no resolvida que objeto de discusso, segundo definio do Dicionrio Aurlio. Para ns, problema uma questo que foge a uma determinada regra, a qual nos impede de atingirmos com sucesso determinado objetivo. Por isso, temos que descobrir as regras, a ordem das mesmas e resolver o problema usando um procedimento de desenvolvimento. Existem cinco passos bsicos para solucionarmos um problema. So eles (Villano, 2000): 1.Compreender o problema Qual o problema? Quais so as informaes utilizadas? (dados) Quais as condies exigidas? possvel satisfazer as condies exigidas? As condies entram em contradio com o problema? Apostila didtica Lgica de Programao Profa Jusane Farina Lara 4
2.Adoo do mtodo para a resoluo do problema Este problema j foi visto antes? Sob forma pouco diferente? Achando um problema j resolvido, podemos utiliz-lo? Ser necessrio dividir o problema em mdulos para simplificao? possvel reformular o problema? 3.Esquematizar a resoluo do problema (plano) 4.Testar o plano elaborado (teste de mesa) Verificar cada passo dado Avaliar a exatido de cada passo 5.Retrospectiva do que foi feito Os resultados foram satisfatrios Os objetivos foram plenamente atingidos? possvel chegar ao resultado por outro caminho? A lgica de programao necessria para pessoas que desejam trabalhar com desenvolvimento de sistemas e programas. Ela nos permite definir a seqncia lgica para o desenvolvimento. Lgica de programao a tcnica de encadear pensamentos para atingir determinado objetivo.
1.4 INSTRUES
Numa linguagem comum pode-se dizer que instrues so um conjunto de regras ou normas definidas para a realizao ou emprego de algo. Pode-se dizer tambm que so ordens, que quando identificadas, so realizadas. Como exemplo: Feche os olhos uma ordem. O ato de fechar os olhos a execuo desta ordem. Um conjunto de instrues determinado para a execuo de uma tarefa. Somente este conjunto de instrues em uma ordem seqencial lgica capaz de realizar o processo desejado. Por exemplo: se quisermos fazer um churrasco, precisamos colocar em prtica uma srie de instrues em uma determinada ordem e execut-las para alcanar o objetivo. Quais seriam essas instrues? Tente descrev-las abaixo: 1. 2. 3. 4. 5.
Consideraes: Obviamente que voc descreveu as tarefas em uma ordem adequada, ou seja, temperou a carne antes de ass-la. Pode ser que voc tenha descrito 3, ou talvez 4 instrues para realizar o nosso objetivo e algum outro colega seu fez mais ou at menos instrues para tal fim. No se assuste, isso normal. Cada pessoa poder ter uma idia diferente da outra para a Apostila didtica Lgica de Programao Profa Jusane Farina Lara 5
realizao de uma tarefa. O importante alcanar o objetivo. Porm, o tempo para a realizao do processo tambm conta. Se voc resolveu cozinhar as batatas na gua e depois sec-las antes de frit-las, demoraramos mais para com-las, porm elas ficariam mais chocantes, tudo bem se isso for na sua casa, mas se voc pensar em uma lanchonete e voc est na mesa esperando, qual seria a sua reao se demorasse muito para um processo to simples? Voc deve ter em mente que dependendo do processo a primeira tentativa de solucion-lo pode no ser a melhor nem a mais rpida. Para alcanar seu objetivo voc deve tambm procurar uma maneira de otimizar o processo, diminuindo o nmero de instrues, procurar outra forma de resolver o problema, mais eficaz, mais rpida, porm esta mudana jamais poder influenciar no resultado final. Colocar uma instruo fora de uma seqncia lgica ou uma instruo tomada em separado, no tem muito sentido. Para obtermos o resultado, devemos colocar em prtica todo o conjunto de instrues, na ordem correta. Instrues so um conjunto de regras ou normas definidas para a realizao ou emprego de algo. Em informtica, o que indica a um computador uma ao elementar a executar.
1.5 O ALGORITMO
De acordo com (Venncio, 1997), Algoritmo um conjunto de regras que permite a resoluo de um problema ou a execuo de um trabalho, atravs de um nmero finito de operaes. Uma outra definio de algoritmos pode ser entendida como uma seqncia de etapas que visam chegar a um objetivo bem definido em um espao de tempo finito, ou seja, uma seqncia de passos finitos com o objetivo de solucionar um problema. Um algoritmo est dividido em duas partes: a da resoluo do problema e a da implementao. A parte de resoluo consiste na elaborao do algoritmo, e somente depois de todos os problemas estarem resolvidos que o algoritmo poder ser implementado, ou seja, transcrito para uma linguagem de programao de alto nvel. Os passos de um algoritmo devem ser simples, sem ambigidades, finitos e devem estar numa ordem bem definida. As regras que definem um algoritmo podem ser entendidas como instrues que executadas produzem um resultado. Vamos agora entender como devemos pensar para comearmos a construo de algoritmos. Como exemplo, descreve-se abaixo algumas frases que podem ser consideradas como instrues: Iniciar a faixa 5 de um compact disc (CD); Escovar os dentes; Chamar por algum atravs de um nome; Informar a sua idade; Atribuir o valor 5,67 a uma varivel. Esse exemplo no demonstra um conjunto de instrues, nem mesmo possui uma seqncia lgica de funcionamento. Para entender uma seqncia de instrues devemos observar os eventos a elas atribudos. At mesmo coisas simples podem ser descritas por seqncias lgicas, por exemplo: Pense no seu objetivo: Chupar uma bala. Como chegar ao objetivo : as instrues: Pegar a bala; Retirar o papel; Chupar a bala; Apostila didtica Lgica de Programao Profa Jusane Farina Lara 6
Jogar papel no lixo; Agora, outro objetivo : Somar dois nmeros: Escreva o primeiro nmero no retngulo A; Escreva o segundo nmero no retngulo B; Some o nmero do retngulo A como o nmero do retngulo B e coloque o resultado no retngulo C; Retngulo A + Retngulo B = Retngulo C
Passos para ler um disquete: - pegar um disquete - colocar o disquete no drive - acessar o disquete Sempre que pensamos em um conjunto de instrues devemos pensar que estas tem um objetivo em comum e seqncia definida para transformar um problema em soluo. A seguir, tem-se alguns exemplos de algoritmos no computacionais. Algoritmo 1: fritar um ovo 1. pegar frigideira, ovo, leo e sal 2. colocar leo na frigideira 3. acender o fogo 4. colocar a frigideira no fogo 5. esperar o leo esquentar 6. colocar o ovo 7. retirar quando pronto Cada linha do algoritmo podemos chamar de uma instruo, logo, podemos dizer que um algoritmo um conjunto de instrues. Instruo indica a um computador uma ao elementar a ser executada. Algoritmo 2: marcar um chiclete 1. pegar o chiclete 2. retirar o papel mastigar 3. jogar o papel no lixo Algoritmo 3: trocar lmpadas 1. se (lmpada estiver fora de alcance) pegar a escada; 2. pegar a lmpada; 3. se (lmpada estiver quente) pegar pano; 4. tirar lmpada queimada; 5. colocar lmpada boa; Algoritmo 4: fim de semana 1. vejo a previso do tempo; 2. se (fizer sol) vou praia; Apostila didtica Lgica de Programao Profa Jusane Farina Lara 7
seno vou estudar; 3. almoar; 4. ver televiso; 5. dormir; Algoritmo 5: fazer um bolo simples 1. pegar os ingredientes; 2. se (roupa branca) colocar avental; 3. se (tiver batedeira) bater os ingredientes na batedeira; seno bater os ingredientes mo; 4. acender o fogo no forno do fogo; 5. colocar a massa na forma; 6. colocar a forma no forno; 7. aguardar o tempo necessrio; 8. desligar o forno; 9. retirar o bolo; Algoritmo 6: descascar batatas 1. pegar faca, bacia e batatas; 2. colocar gua na bacia; 3. enquanto (houver batatas) descascar batatas; Algoritmo 7: fazer uma prova 1. ler a prova; 2. pegar a caneta; 3. enquanto ((houver questo em branco) e (tempo no terminou)) faa se (souber a questo) resolv-la; seno pular para outra; 4. entregar a prova; Algoritmo 8: jogar o jogo da forca 1. escolher a palavra; 2. montar o diagrama do jogo; 3. enquanto ((houver lacunas vazias) e (corpo incompleto)) faa se (acertar uma letra) escrever na lacuna correspondente; seno desenhar uma parte do corpo na forca; Algoritmo 9: jogar o jogo da velha 1. enquanto ((existir um quadrado livre) e (ningum perdeu (ganhou) o jogo)) faa espere a jogada do adversrio, continue depois; se ( existir um quadrado livre) se (centro livre) jogue no centro; seno se (adversrio tem 2 quadrados em linha com o terceiro desocupado) jogue neste quadrado desocupado; seno se (h algum canto livre) jogue neste canto; Apostila didtica Lgica de Programao Profa Jusane Farina Lara 8
1.5.1 Padro e desvio de Comportamento Vamos agora a um exemplo mais significativo. Imagine como o seu despertar. Observe as aes a seguir e tente imaginar a execuo das mesmas seqencialmente: Ao toque do despertador, levantar-se; Tirar o pijama; Vestir-se adequadamente; Tomar caf da manh; Escovar os dentes; Se todos os dias voc executa esta mesma ao pela manh, considerando que possa mudar de roupa a cada dia e possa comer algo diferente no caf ou mesmo trocar de creme dental para escovar os dentes, porm se a seqncia das aes no mudar, temos o que chamamos de padro de comportamento. Um exemplo mais claro de padro de comportamento seria o conjunto dos nmeros pares de 2 a 20, [2,4,6,8,10,12,14,16,18,20], de um nmero a outro a diferena dois. O padro de comportamento o incremento de duas unidades de um nmero para outro. Como observador voc deve descobrir o padro de comportamento para a resoluo de um problema, independente dos fatores externos ou internos que possam existir. Se em um determinado dia voc observar que ao invs de vestir-se antes de tomar o caf da manh, esta ao foi executada depois de escovar os dentes, temos ento um desvio do comportamento. Um desvio de comportamento claramente observado no conjunto dos nmeros primos de 1 a 15: [1, 2, 3, 5, 7, 11, 13], existe um desvio de comportamento toda vez que encontrado um nmero que seja divisvel por mais algum nmero alm do nmero 1 e do prprio nmero (regra dos nmeros primos). Como bom observador voc deve ter a capacidade de prever certas aes que desviam o comportamento normal de um procedimento e implementar estas caractersticas para concluir o objetivo.
Onde temos: Entrada: So os dados de entrada do algoritmo, os valores iniciais que podem ser descritos ou solicitados; Processamento: So os procedimentos (instrues) utilizados para se alcanar o resultado final (objetivo do algoritmo); Sada: So os dados processados que podem ser exibidos, retornados ou impressos.
Algoritmo: Receba a nota da Prova 1; Receba a nota da Prova 2; Receba a nota da Prova 3; Receba a nota da Prova 4; Some as notas recebidas e divida por 4; Mostre o resultado da diviso; Apostila didtica Lgica de Programao Profa Jusane Farina Lara 10
1.11 AS ETAPAS DA ENGENHARIA DE SOFTWARE UMA VISO GENRICA O Processo de Desenvolvimento de Software contm trs (3) fases genricas, independentes do modelo (paradigma) de engenharia de software escolhido, que so: Definio, Desenvolvimento e Manuteno.
Definio
Anlise de Sistema Planejamento Projeto Anlise de Requisitos
Desenvolvimento
Projeto do Software Codificao Teste
Atividades de Apoio
Produto de Software
Operao
Manuteno
Entender Modificar Revalidar
A fase de definio tem como objetivo definir o que, ou seja, quais informaes sero processadas, quais funes e desempenho so desejados, quais interfaces devem ser estabelecidas, quais restries do projeto e critrios de validao sero necessrios. Nessa fase, trs etapas especficas so realizadas: a anlise do sistema, o planejamento do projeto e a anlise dos requisitos (Rocha, 2001). Anlise do Sistema: define o papel de cada elemento num sistema baseado em computador, atribuindo em ltima anlise, o papel que o software desempenhar. Apostila didtica Lgica de Programao Profa Jusane Farina Lara 11
Planejamento do Projeto de Software: assim que o escopo do software estabelecido, os riscos so analisados, os recursos so alocados, os custos so estimados e, tarefas e programao de trabalho definidas. Anlise de Requisitos: o escopo definido para o software proporciona uma direo, mas uma definio detalhada do domnio da informao e da funo do software necessria antes que o trabalho inicie.
A fase de desenvolvimento tem como objetivo o como, ou seja, como devem ser projetadas as estruturas de dados e a arquitetura do software, como os procedimentos devem ser implementados, como o projeto deve ser traduzido para uma linguagem de programao, como o teste deve ser executado, etc. Nessa fase tambm so sempre realizadas trs etapas especficas: o projeto, a codificao e o teste do software (Rocha, 2001). Projeto de Software: traduz os requisitos do software num conjunto de representaes (algumas grficas, outras tabulares ou baseadas em linguagem) que descrevem a estrutura de dados, a arquitetura do software, os procedimentos algoritmicos e as caractersticas de interface. Codificao: as representaes do projeto devem ser convertidas numa linguagem artificial (a linguagem pode ser uma linguagem de programao convencional ou uma linguagem no procedimental) que resulte em instrues que possam ser executadas pelo computador. Realizao de Testes do Software: logo que o software implementado numa forma executvel por mquina, ele deve ser testado para que se possa descobrir defeitos de funo, lgica e implementao. A fase de manuteno tem como objetivo as mudanas, sejam elas correes decorrentes de erros (manuteno corretiva), adaptaes necessrias decorrentes de alteraes no meio ambiente (manuteno adaptativa) e melhoramentos relacionados s novas necessidades do usurio (manuteno perfectiva) [Rocha, 2001]. Correo: mesmo com as melhores atividades de garantia de qualidade de software, provvel que o cliente descubra defeitos no software. A manuteno corretiva muda o software para corrigir defeitos. Adaptao: com o passar do tempo, o ambiente original (por exemplo a CPU, o sistema operacional e perifricos) para o qual o software foi desenvolvido provavelmente mudar. A manuteno adaptativa muda o software para acomodar mudanas em seu ambiente. Melhoramento Funcional: a medida que o software usado, o cliente/usurio reconhecer funes adicionais que oferecero benefcios. A manuteno perfectiva estende o software para alm de suas exigncias funcionais originais. ATIVIDADES DE APOIO: as fases e etapas correlatas descritas so complementadas por uma srie de atividades de proteo. Revises: efetuadas para garantir que a qualidade seja mantida medida que cada etapa concluda. Documentao: desenvolvida e controlada para garantir que informaes completas sobre o software estejam disponveis para uso posterior. Controle das Mudanas: institudo de forma que as mudanas possam ser aprovadas e acompanhadas. Dentro deste contexto, quando se desenvolve programas de um modo geral, tambm faz-se necessrio ter um entendimento do que deve ser desenvolvido, realizando uma anlise para definio do problema. Posteriormente, elabora-se o projeto do programa, o qual ser implementado numa linguagem de programao. Finalmente, realizam-se testes Apostila didtica Lgica de Programao Profa Jusane Farina Lara 12
nos programas. Para todas estas atividades deve-se fazer documentao. A figura a seguir, representa isso. Etapas da Construo de Programas
Definio
Desenvolvimento
Projeto do Programa
Projeto das telas e relatrios Projeto dos algoritmos Projeto dos dados Projeto modular
Atividades de Apoio
Programa
Revises Documentao Controle de Mudanas
Operao
Manuteno
Entender Modificar Revalidar
Um algoritmo correto deve possuir 3 qualidades: 1. Cada passo do algoritmo deve ser uma instruo que possa ser realizada 2. A ordem dos passos deve ser precisamente determinada 3. O algoritmo deve ter fim
13
2.1 INTRODUO
Este captulo objetiva expor conceitos fundamentais que sero utilizados durante os outros Captulos, tais como tipos de dados, constantes e variveis, operadores e operaes com variveis.
Literal de comprimento 6 Literal de comprimento 1 Literal de comprimento 8 Literal de comprimento 9 Literal de comprimento 6 Literal de comprimento 1
2.3.4 Dados Lgicos A existncia deste tipo de dado , de certo modo, um reflexo da maneira como os computadores funcionam. Muitas vezes, estes tipos de dados so chamados de booleanos, devido significativa contribuio de BOOLE rea da lgica matemtica. O tipo de dado lgico usado para representar dois nicos valores lgicos possveis: verdadeiro e falso. comum encontrar-se em outras referncias outros tipos de pares de valores lgicos como sim/no, 1/0, true/false. Exemplos: .V. valor lgico verdadeiro .F. valor lgico falso A porta pode estar aberta ou fechada A lmpada pode estar acesa ou apagada
2.3 CONSTANTES
Tem-se uma definio de constante tudo aquilo que fixo ou estvel. Entende-se que um dado constante quando no sofre nenhuma variao no decorrer do tempo. Por exemplo, o valor 1,23 da frmula a seguir uma constante: RESULTADO = ENTRADA * 1,23.
2.4 VARIVEIS
A todo momento durante a execuo de qualquer tipo de programa os computadores esto manipulando informaes representadas pelos diferentes tipos de dados descritos acima. Para que no se esquea das informaes, o computador precisa guard-las em sua memria. Varivel: uma entidade destinada a guardar uma informao. Uma varivel corresponde a uma posio de memria que contm valores que podem variar durante a execuo de um programa. Embora uma varivel possa assumir diferentes valores, ela s pode armazenar um valor a cada instante.
O tipo de informao que ser armazenada em uma varivel tem que ser definida previamente pelo programador. Para recuperar uma determinada informao na memria seria necessrio saber o tipo de dado desta informao (ou seja, o nmero de bytes que ela ocupa na memria) e a posio inicial deste conjunto de bytes na memria. Ao criar uma varivel definido um Apostila didtica Lgica de Programao Profa Jusane Farina Lara 15
nome mesma, esse nome faz referncia ao endereo de memria onde essa varivel se encontra, ento para manipular dados em uma varivel basta usar seu nome.
Basicamente, uma varivel possui trs atributos: um nome, um tipo de dado associado mesma e a informao por ela guardada. Nome
Tipo de Dado
Informao
Atributos de uma varivel
Toda varivel possui um nome que tem a funo de diferenci-la das demais. Cada linguagem de programao estabelece suas prprias regras de formao de nomes de variveis. Adotaremos neste contexto as seguintes regras: - um nome de varivel deve necessariamente comear com uma letra; - um nome de varivel no deve conter nenhum smbolo especial, exceto a sublinha (_). Exemplos: SALRIO Correto 1ANO Errado (no comeou com uma letra) ANO1 Correto A CASA Errado (contm o caractere branco) SAL/HORA Errado (contm o caractere /) SAL_HORA Correto _DESCONTO Errado (no comeou com uma letra) Abaixo tem-se exemplos de variveis: Varivel Nome Idade Tipo Caracter Inteiro Contedo da varivel Marcos 20
Quando uma varivel criada qual o seu valor inicial? Apostila didtica Lgica de Programao Profa Jusane Farina Lara 16
No se pode saber o valor inicial de uma varivel, pois na memria existem vrias informaes armazenadas, muitas delas esto sendo utilizadas pelo computador, mas podem existir espaos em que foram armazenadas informaes anteriormente e que no esto mais em uso. Esses espaos, mesmo contendo informaes, esto disponveis para novas variveis. Uma varivel pode ser criada em um desses espaos, e seu valor ser um "lixo" qualquer da memria. Mas uma varivel pode ser criada em um espao vazio da memria, nesse caso seu valor ser nulo. Para resolver esse problema do valor inicial da varivel, algumas linguagens inicializam suas variveis com 0 (zero) ou nulo.
2.4.1 Declarao De Variveis No ambiente computacional, as informaes variveis so guardadas em dispositivos eletrnicos analogamente chamados de memria. Podemos imaginar essa memria como sendo um armrio repleto de gavetas, no qual as gavetas seriam os locais fsicos responsveis por armazenar objetos; os objetos (que podem ser substitudos) seriam as informaes e as gavetas, as variveis (Figura 1). Visto que na memria (armrio) existem inmeras variveis (gavetas), precisamos diferenci-las, o que feito por meio de identificadores (etiquetas). Cada varivel (gaveta), no entanto, pode guardar apenas uma informao (objeto) de cada vez, sendo sempre de mesmo tipo (material). Gaveta1 Gaveta6 Gaveta2 Gaveta7 Gaveta3 Gaveta8 Gaveta4 Gaveta9 Gaveta5 Gaveta10
Gaveta11 Gaveta12 Gaveta13 Gaveta14 Gaveta15 Gaveta16 Gaveta17 Gaveta18 Gaveta19 Gaveta20 Gaveta21 Gaveta22 Gaveta23 Gaveta24 Gaveta25
Figura 1 Representao grfica da memria de um computador em nvel de variveis (Manzano & Olivereira, 2000)
Todas as variveis utilizadas em algoritmos devem ser definidas antes de serem utilizadas. Isto se faz necessrio para permitir que o compilador reserve um espao na memria para as mesmas.
17
Portanto, precisamos definir nomes para determinadas gavetas especificando qual o material dos objetos que l podem ser armazenados; em outras palavras declarar as variveis conforme as seguintes regras sintticas: Declarao de variveis Tipo Lista de variveis
Tipo
numa mesma linha podero ser definidas uma ou mais variveis do mesmo tipo; Para tal, deve-se separar os nomes das mesmas por vrgulas; variveis de tipos diferentes devem ser declaradas em linhas diferentes.
Exemplos de definio de variveis: inteiro IDADE, X; real SALRIO, PESO, DOLAR; caractere NOME[10], ENDERECO[20]; lgico TEM_FILHOS, RESPOSTA; RESPOSTA o nome de um local de memria que s pode conter valores do tipo lgico, ou seja, por conveno, verdadeiro ou falso. X nome de um local de memria que s pode conter valores do tipo inteiro, qualquer um deles. No devemos permitir que mais de uma varivel (gaveta) possua o mesmo identificador (etiqueta), visto que ficaramos sem saber que varivel utilizar (que gaveta abrir). S podemos guardar informaes (objetos) em variveis (gavetas) do mesmo material (tipo de dado). 2.4.2 Exerccios de Fixao 1. Assinale os identificadores vlidos: a) (X) b) U2 c) AH! e) #55 f) KM/L g) UYT i) AB*C j) O&O l) P{O}
2. Supondo que as variveis NB, NA, NMAT, SX sejam utilizadas para armazenar a nota do aluno, o nome do aluno, o nmero da matrcula e o sexo, declare-as corretamente. 3. Encontre os erros da seguinte declarao de variveis: Inteiro ENDERECO, NFILHOS; Caractere IDADE, X; Real CRUZEIROS, XPTO, C, PESO, OUT; Lgico LMPADA, C;
18
2.4.3 Notao Hngara No existe uma regra definida que deva ser seguida para a identificao de variveis, o que se pode ter um hbito de criar varivel de acordo com uma notao para fcil identificao em um programa. Segundo (Holzner, 1994) o windows tem uma conveno chamada notao hngara (por causa da nacionalidade de seu inventor Charles Simonyi, programador da Microsoft). Como programas windows podem ser muito longos, fcil esquecer o que todas as variveis significam. Para ajudar, a notao fornece letras que podemos usar como prefixos, como mostra a tabela abaixo. Maiores detalhes da notao hngara podem ser encontrados em (Holzner, 1994).
Prefixo a b c r i v Significado Matriz de dados Booleano ou lgico Caracter Real Inteiro Vetor
A seguir exemplos de identificadores de variveis seguindo a notao hngara: iCodigo, cNome, rTotal, rDesconto, vNotas, bTemSaldo. Nota: Ao declarar uma varivel como o Nome iValor, por exemplo, no significa que esta poder apenas receber valores inteiros, quem define isso o seu tipo e no o nome da varivel, mesmo que esta esteja adequada a uma notao.
B Por exemplo, a frmula de clculo da rea do tringulo da figura acima dada por: AREA = 0.5 * B * H O conceito de expresso aplicado computao assume uma conotao mais ampla: uma expresso uma combinao de variveis, constantes e operadores, e que, uma vez avaliada, resulta num valor. 3.5.1 Operadores Aritmticos Operadores: so elementos funcionais que atuam sobre operandos e produzem um determinado resultado. Existem dois tipos de operadores: binrios, quando atuam sobre dois operandos. Ex.: os operadores das operaes aritmticas bsicas (soma, subtrao, multiplicao e diviso); unrios, quando atuam sobre um nico operando. Ex.: o sinal de (-) na frente de um nmero, cuja funo inverter seu sinal. Apostila didtica Lgica de Programao Profa Jusane Farina Lara 19
Operador + ** * / + -
Operao Manut. de sinal Inverso de sinal Exponenciao Multiplicao Diviso Adio Subtrao
Prioridade 1 1 2 3 3 4 4
2.5.2 Tipos de Expresses As expresses so classificadas de acordo com o tipo do valor resultante de sua avaliao. 2.5.2.1 Expresses Aritmticas So aquelas cujo resultado da avaliao do tipo numrico, seja ele inteiro ou real. A prioridade entre operadores define a ordem em que os mesmos devem ser avaliados dentro de uma expresso. Observao: a prioridade das operaes pode ser quebrada utilizando-se nveis de parnteses. Parnteses mais internos Funes matemticas ** (exponenciao) // (radiciao) * (multplicao) / (diviso) mod div + (adio) - (subtrao)
Para operaes de mesma prioridade, seguimos a ordem especificada, isto , primeiro resolvemos os operadores mais esquerda e depois os mais direita da tabela e, para alterar a prioridade da tabela, utilizamos parnteses mais internos. Exemplos: a) 5 + 9 + 7 + 8 / 4 5 + 9 + 7 + 2 = 23 b) 1 4 * 3 / 6 2 ** 3 14*3/68 1 12 / 6 8 1 2 8 = -9 c) 3 ** 2 4 / 2 + abs(5 3 * 5) / 2 3 ** 2 4 / 2 + abs(5 15) / 2 3 ** 2 4 / 2 + abs(-10) / 2 3 ** 2 4 / 2 + 10 / 2 9 4 / 2 + 10 / 2 9 2 + 5 = 12 d) media_ponderada = (nota1 * peso1 + nota2 * peso2) / (peso1 + peso2) e) salario_reajustado = salario_atual * 50/100 + salario_atual f) salario_reajustado = salario_atual * 1,50 g) Funo DIV, MOD: 5 DIV 2 guarda o quociente da diviso por 2 5 MOD 2 quarda o resto da diviso por 2 5 / 2 = 2,5 Exerccio de Fixao Apostila didtica Lgica de Programao Profa Jusane Farina Lara 20
Supondo A, B, C e variveis de tipo inteiro, com valores iguais a 5, 10 e 8, e uma varivel real D, com valor de 1,5, quais os resultados das expresses abaixo? a) 2 * A / 3 C; b) 2 // (2 * abs ( C ) / 4; c) (A / B) + C ** 3; d) (A + B) / A * C + D (D * 2); 2.5.2.2 Expresses Lgicas So aquelas cujo resultado da avaliao um valor lgico. (.V. ou .F.). Os operadores lgicos e suas relaes de precedncia so mostrados na tabela abaixo: Operador .NO. .E. .OU. Tipo Unrio Binrio Binrio Operao Negao Conjuno Disjuno Prioridade 1 2 3
Tabela Verdade: o conjunto de todas as possibilidades combinatrias entre os valores de diversas variveis lgicas, as quais se encontram em apenas duas situaes, e um conjunto de operadores lgicos. Para exemplificar o uso de operadores lgicos a tabela abaixo apresenta as variveis A e B: A .F. .F. .V. .V. B .F. .V. .F. .V. .NO. A .V. .V. .F. .F. .NO. B .V. .F. .V. .F. A .OU. B .F. .V. .V. .V. A .E. B .F. .F. .F. .V.
H, ainda, outro tipo de operador que pode aparecer em operaes lgicas: os operadores relacionais, mostrados na tabela abaixo: Operador = <> < <= > >= Comparao Igual a Diferente de Menor que Menor ou igual a Maior que Maior ou igual a
Parnteses mais internos Funes matemticas Operadores aritmticos Operadores relacionais Operadores lgicos
8 = 8 verdadeiro b) 2 + 8 mod 7 >= 3 * 6 15 2 + 1 >= 18 15 3 >= 3 verdadeiro c) 3 * 5 div 4 <= 3 ** 2 / 0,5 15 div 4 <= 9 / 0,5 3 <= 18 verdadeiro 2.5.2.3 Expresses Vlidas vs. Expresses Invlidas Expresses vlidas A e B ou C (X < Y) e (Z = 0) A e no B ou no C (K < 0) e (Z > 5) ou (T > 3) (A = E) e no (C < 0) Expresses invlidas A e ou B (X < Y) no (Z=0) A no e B A no ou C (X < Z) ou e L
2.5.2.4 Expresses Literais So aquelas cujo resultado da avaliao um valor literal. Por exemplo: a concatenao das strings REFRIGERA e DOR representado por REFRIGERA + DOR e o resultado de sua avaliao REFRIGERADOR. Exemplo: caracter nome, sobrenome, nomecompleto; nome Paulo Jose; sobrenome Das Coves; nomecompleto nome + sobrenome;
22
3.1 INTRODUO
Neste Captulo so apresentados os comandos de atribuio, de leitura, de escrita e blocos. Tambm so apresentadas as consideraes iniciais relacionadas s estruturas de controle e estrutura seqencial.
, Exemplo: leia (X); leia (A, IDADE, NOTA); Apostila didtica Lgica de Programao Profa Jusane Farina Lara 23
3.5 BLOCOS
Um bloco pode ser definido como um conjunto de aes com uma funo definida; neste caso, um algoritmo pode ser visto como um bloco. Ele serve tambm para definir os limites nos quais as variveis declaradas em seu interior so conhecidas. Para delimitar um bloco, utilizamos os delimitadores: incio e fim. incio ao fim ;
, Exemplo: Incio {incio do bloco (algoritmo) } { declarao de variveis } { seqncia de aes } Fim. { bloco (algoritmo) }
{ Este algoritmo calcula a soma de dois valores quaisquer } INICIO INTEIRO Valor1, Valor2, Soma; ESCREVA (Informe 1o. e 2o. Valor: ); LEIA (Valor1, Valor2); Soma Valor1+ Valor2; { efetuando clculo da soma } ESCREVA (Resultado da Soma = , Soma); FIM.
3.9.3 ESTRUTURA SEQENCIAL o conjunto de aes primitivas que sero executadas numa seqncia linear de cima para baixo e da esquerda para a direita, isto , na mesma ordem que foram escritas. Incio { comeo do algoritmo } { declarao de variveis } comando a; comando b; comando c; comando d; comando e; . . comando n; Fim. { algoritmo } Exemplo: a) Construa um algoritmo que calcule a mdia aritmtica entre quatro notas quaisquer fornecidas pelo usurio. Resoluo: 1. Dados de Entrada: quatro notas bimestrais (N1, N2, N3, N4); 2. Dados de Sada: mdia aritmtica anual (MA); 3. O que devemos fazer para transformar quatro notas bimestrais numa mdia anual? Resposta: utilizar mdia aritmtica (soma dos elementos divididos pela quantidade deles). (N1 + N2 + N3 + N4)/4. 4. Construo do algoritmo: Incio { comeo do algoritmo } Real N1, N2, N3, N4, MA; { declarao de variveis } Leia (N1, N2, N3, N4); { entrada de dados } MA (N1 + N2 + N3 + N4) / 4; { processamento } Escreva (MA); { sada de dados } Fim. { trmino do algoritmo } EXERCCIO DE FIXAO b) Construa um algoritmo que calcule a quantidade de latas de tintas necessrias e o custo para pintar tanques cilndricos de combustvel, onde so fornecidos a altura e o raio desse cilindro. Sabendo que: A lata de tinta custa R$ 50,00; Apostila didtica Lgica de Programao Profa Jusane Farina Lara 26
Cada lata contm 5 litros; Cada litro de tinta pinta 3 metros quadrados. Resoluo: 1. Dados de entrada: altura (H) e raio (R); 2. Dados de sada: custo (C) e quantidade (QTDE); 3. Utilizando Planejamento Reverso, sabemos que: Custo dado por quantidade de latas * R$ 50,00; Quantidade de latas dada por quantidade total de litros / 5; Quantidade total de litros dada por rea do cilindro / 3; rea do cilindro dada por rea da base + rea lateral; rea da base (PI * R **2); rea lateral altura * comprimento: (2 * PI * R * H); Sendo que R (raio) e H (altura) so dados de entrada e PI uma constante de valor conhecido: 3,14. 4. Faa a Construo do algoritmo?
27
4.1 INTRODUO
At o momento os algoritmos estudados utilizavam apenas instrues primitivas de atribuio, e de entrada e sada de dados. Qualquer conjunto de dados fornecido a um algoritmo destes ser submetido ao mesmo conjunto de instrues, executadas sempre na mesma seqncia. Dependendo do conjunto de dados de entrada do algoritmo, deve-se executar um conjunto diferente de instrues. Alm disso, pode ser necessrio executar um mesmo conjunto de instrues um nmero repetido de vezes. Em resumo, necessrio controlar o fluxo de execuo das instrues (a seqncia em que as instrues so executadas num algoritmo) em funo dos dados fornecidos como entrada ao mesmo. As estruturas bsicas de controle do fluxo de instrues so classificadas em: - estruturas seqenciais (foi estudado no Captulo 4) - estruturas de seleo - estruturas de repetio (ser estudado no Captulo 6) Neste Captulo so apresentados os comandos de seleo: SE, ENTO e SENO; CASO SELECIONE; Blocos de Instrues e Aninhamentos de Comandos.
<condio> uma expresso lgica, que, quando inspecionada, pode gerar um resultado falso ou verdadeiro. Se <condio> for verdadeira, a ao primitiva sob a clusula ento ( C ) ser executada; caso contrrio (<condio> for falsa), encerra o comando (fim_se), neste caso, sem executar nenhum comando.
28
Entrada Se <condio> ento Incio { bloco verdade } C1; C2; { seqncia de comandos } . . Cn; Fim { bloco } Fim_se;
condio
V
Alternativa Verdadeira
Sada para a prxima ao 4.2.2 SELEO COMPOSTA Se a condio verdadeira um curso de ao tomado; se falsa, outro curso de ao tomado. Se <condio> ento Incio { bloco verdade } C1; C2; { seqncia de comandos} . . Cn; Fim; Seno C; { ao primitiva } Fim_se Entrada No caso de existir um conjunto de aes que deveriam ocorrer quando o resultado da condio fosse falso, criaramos um bloco falso.
Condio
Alternativa Verdadeira
Alternativa Falsa
29
Exemplos: a) Incio Inteiro IDADE; Leia (IDADE); Se IDADE >= 18 Ento Escreva (Maior de idade); Seno Escreva (Menor de idade); Fim_se; Fim. b) Incio { declarao de variveis } real N1, N2, N3, N4; { notas bimestrais } real MA; { mdia anual } Leia (N1, N2, N3, N4); MA (N1 + N2 + N3 + N4) / 4; Escreva (Mdia Anual = , MA); Se MA >= 6 Ento Incio { bloco verdade } Escreva (Aluno Aprovado!); Escreva (Parabns!); Fim; { bloco verdade } Seno Incio { bloco falso } Escreva (Aluno Reprovado!); Escreva (Estude Mais!); Fim; { bloco falso } Fim_Se; Fim. c) Construa um algoritmo que verifique a validade de uma senha fornecida pelo usurio. A senha um conjunto de cinco caracteres que so: ASDFG. Incio { declarao de variveis } caractere S; { senha fornecida pelo usurio } Leia (S); Se S = ASDFG Ento Escreva (Acesso Permitido!); Seno Escreva (Acesso Negado!); Fim_se; Fim. As condies
Uma condio deve sempre seguir a regra de um teste, onde o valor retornado deste teste deve ser verdadeiro, para executar o bloco depois do ento, ou falso, para seguir o algoritmo ou executar o bloco seno, caso este exista. Abaixo temos exemplos de condio, vlidos e invlidos:
30
Condio SE (A>B>C)... SE (NOME)... SE (NOME[1] = M)... SE (A = 1..10)... SE (CASADO)... SE (CASADO = V)... SE ((A+B)=5)... SE (LEIA(A) = 5...
Vlida No Sim, se nome for uma var lgica Sim, se nome for caracter e possui ao menos um caracter No Sim, sendo casado uma var lgica Sim, mas poderia ser simplesmente: Sim No
Soluo SE (A>B) E (A>C)... SE (NOME = MARCOS) SE (A>=1) E (A<=10)... SE (CASADO)... LEIA (A); SE (A = 5) ...
4.2.3 SELEO ENCADEADA Quando, devido necessidade de processamento, agruparmos vrias selees, formaremos uma seleo encadeada. Normalmente tal formao ocorre quando uma determinada ao ou bloco deve ser executado se um grande conjunto de possibilidades ou combinaes de situaes for satisfeito. 4.2.3.1 SELEO ENCADEADA HETEROGNEA Podemos construir uma estrutura de seleo (se) de diversas formas, sendo que, ao encadearmos vrias selees, as possibilidades de construo diferentes tendem a um nmero elevado. Quando no conseguimos identificar um padro lgico de construo em uma estrutura de seleo encadeada, dizemos que esta uma estrutura de seleo encadeada heterognea. Se <condio 1> ento Se <condio 2> ento Incio { bloco verdade 1} C1; Cn; Fim; { bloco verdade 1 } Fim_se; seno Se < condio 3> ento Incio { bloco verdade 2 } C1; Cn; Fim; { bloco verdade 2 } seno Se <condio 4> ento Se <condio 5> ento CV; { comando verdade } Fim_se; seno CF; { comando falso } Fim_se; Fim_se; Fim_se; Podemos resumir todas as variaes possveis em uma Tabela de Deciso: Apostila didtica Lgica de Programao Profa Jusane Farina Lara 31
Condio 1 Condio 2
V F F F V -
Condio 3
V F F
Condio 4
V F
Condio 5
V -
Ao Executada
Bloco Verdade 1 Bloco Verdade 2 Comando Verdadeiro Comando Falso
Exerccio de Fixao: Dados trs valores A, B, C, verificar se eles podem ser os comprimentos dos lados de um tringulo e, se forem, verificar se compem um tringulo eqiltero, issceles ou escaleno. Informar se no compuserem nenhum tringulo. Resoluo: Dados de Entrada: A, B, C Dados de sada: mensagens: no compem tringulo, tringulo eqiltero, tringulo issceles, tringulo escaleno. Tringulo eqiltero: possui trs lados iguais. Tringulo issceles: possui dois lados iguais. Tringulo escaleno: todos os lados so diferentes. Montando a Tabela de Deciso, temos: tringulo? eqiltero? issceles? escaleno? V V F F V F V V F F V F Traduzindo as condies para expresses lgicas: Aes Tr. Eqiltero Tr. Issceles Tr. Escaleno No Tr.
tringulo: (A < B + C) e (B < A + C) e ( C < A + B); equiltero: (A = B) e (B = C); issceles: (A = B) ou (A = C) ou (B = C); escaleno: (A <> B) e (B <> C); Construindo o algoritmo: Incio { algoritmo } Inteiro A, B, C; Leia (A, B, C); Se (A < B + C) e (B < A + C) e (C < A + B) Ento Se (A = B) e (B = C) Ento Escreva (Tringulo Equiltero); Seno Se (A = B) ou (B = C) Ento Escreva (Tringulo Issceles); Seno Escreva (Tringulo Escaleno); Fim_se; Fim_se; Seno Escreva (Estes valores no formam um tringulo); Fim_se; Fim. 4.2.3.2 SELEO ENCADEADA HOMOGNEA Chamamos de Seleo Encadeada Homognea quando a construo de diversas estruturas de seleo encadeadas segue um determinado padro lgico. SE ENTO SE Vamos supor que, num dado algoritmo, um comando genrico W deva ser executado apenas quando forem satisfeitas as condies Cond1, Cond2, Cond3 e Cond4. Teramos: Apostila didtica Lgica de Programao Profa Jusane Farina Lara 32
Cond1 Ento Se Cond2 Ento Se Cond3 Ento Se Cond4 Ento Fim_se; Fim_se; Fim_se; Fim_se; Se Seria equivalente a escrever, simplificadamente: Se Cond1 e Cond2 e Cond3 e Cond4 ento W; Fim_se;
W;
SE SENO SE Vamos supor que em determinado algoritmo uma varivel X possa assumir quatro valores, sendo eles V1, V2, V3 V4, e que exista um comando (ou mais) diferente que ser executado para cada valor armazenado em X. Teremos: Se X = V1 Ento C1; Fim_se; Se X = V2 Ento C2; Fim_se; Se X = V3 Ento C3; Fim_se; Se X = V4 Ento C4; Fim_se;
Somente um e apenas um comando pode ser executado, isto , trata-se de uma situao excludente (se X igual a V3, no igual a V1, nem a V2, nem a V4). No se trata de uma estrutura encadeada, pois todos os ses no esto interligados. Por isso todas as condies (X = Vn) sero efetuadas e ocorrero testes desnecessrios. Para melhorar a performance dessa estrutura, podemos transform-la em um conjunto de selees encadeadas: Se X = V1 Ento C1; Seno Se X = V2 Ento C2; Seno Se X = V3 Ento C3; Seno Se X = V4 Ento C4; Fim_se; Fim_se; Fim_se; Fim_se; Por constituir-se um encadeamento homogneo, pode ser simplificado, e para tal utilizaremos uma nova estrutura, a seleo de mltipla escolha.
33
4.2.3.3 SELEO DE MLTIPLA ESCOLHA Este tipo de estrutura uma generalizao da estrutura Se, onde somente uma condio era avaliada e dois caminhos podiam ser seguidos. Na estrutura de deciso do tipo Escolha pode haver uma ou mais condies a serem testadas e um comando composto diferente associado a cada uma destas. A sintaxe da construo de Escolha mostrada abaixo:
V
<Condio1>
Seqncia A de comandos
F V
<Condio2>
Seqncia A de comandos
Caso <condio2> Seqncia A de comandos ... Caso <condion> Seqncia n de comandos Caso contrrio Seqncia s de comandos Fim_escolha
F V
<Condion>
Seqncia n de comandos
Exemplos: a) Um exemplo de aplicao desta construo mostrado abaixo, baseando num algoritmo de reajuste salarial varivel em funo da profisso. Incio Real SALARIO, SAL_REAJ; Caractere PROF; Leia (SALARIO, PROF); Escolha PROF Caso T: SAL_REAJ 1,5 * SALARIO; Caso E: SAL_REAJ 1,3 * SALARIO; Caso contrrio SAL_REAJ 1,1 * SALARIO; Fim_escolha; Escreva (Salario Reajustado = , SAL_REAJ); Fim.
34
b)
Se X = V1 ento C1; seno Se X = V2 ento C2; seno Se X = V3 ento C2; seno Se X = V4 ento C3; seno Se X = V5 ento C4; seno C5; Fim_se; Fim_se; Fim_se; Fim_se; Fim_se; Leia (X, V1, V2, V3, V4, V5); Escolha X Caso V1: C1; Caso V2, V3: C2; Caso V4: C3; Caso V5: C4; Caso Contrrio: C5; Fim_escolha;
c) Construa um algoritmo que, tendo como dados de entrada o preo de um produto e um cdigo, emita o preo junto de sua procedncia. Caso o cdigo no seja nenhum dos especificados, o produto deve ser encarado como importado. Cdigo de origem: 1 Sul 5 ou 6 Nordeste 2 Norte 7, 8 ou 9 Sudeste 3 Leste 10 at 20 Centro-Oeste 4 Oeste 25 at 50 Nordeste Incio Real PRECO; Inteiro ORIGEM; Leia (PRECO, ORIGEM); Escolha ORIGEM Caso 1: Escreva (PRECO, Produto do Sul); Caso 2: Escreva (PRECO, Produto do Norte); Caso 3: Escreva (PRECO, Produto do Leste); Caso 4: Escreva (PRECO, Produto do Oeste); Caso 7,8,9: Escreva (PRECO, Produto do Sudeste); Caso 10..20: Escreva (PRECO, Produto do Centro-Oeste); Caso 5,6,25..50: Escreva (PRECO, Produto do Nordeste); Caso contrrio: Escreva (PRECO, Produto Importado); Fim_escolha; Fim. Apostila didtica Lgica de Programao Profa Jusane Farina Lara 35
Para instrues CASO, apenas testes de um valor ou faixa de valores admissvel, como exemplo: ESCOLHA varivel Caso Possvel 1 7,8,9 10.. 20 A .. Z , a .. z 0..10 , 20..30 Fim_Escolha;
vlido o comando escolha apenas para variveis do tipo inteiro ou com um nico caracter.
36
5.1 INTRODUO
Existem ocasies que necessrio efetuar a repetio de um trecho de programa um determinado nmero de vezes. Nesse caso, poder ser criado um looping que efetue o processamento de um determinado trecho, tantas vezes quantas forem necessrias. Os loopings tambm so chamados de: laos de repetio ou malhas de repetio. Neste captulo sero estudados os laos de repetio ou malhas de repetio. Sero abordados os comandos enquanto faa, repita at e para faa. Para demonstrar o uso dos trs comandos de repetio, consideraremos o exemplo a seguir: Exemplo 1: Dado um conjunto de nmeros inteiros positivos, determinar os seus quadrados: Entradas: 3, 8, 4, 10 Sada: 9, 64, 16, 100 - O problema saber quantas vezes executar a repetio. - Desejamos repetir o bloco (leitura, clculo, sada) enquanto existir um nmero na lista de entrada. - A estratgia de verificao de fim de dados utilizar um sinal de fim de dados: denomina-se sentinela. - Neste problema a condio expressa por nmero > 0. - Podemos usar como sentinela qualquer nmero que no seja positivo. Por exemplo, o nmero zero ou 1.
<condio>
S <bloco de instruo>
37
Quando o resultado de <condio> for falso, o comando abandonado. Se j da primeira vez o resultado for falso, os comandos no so executados nenhuma vez. Dentro do loop deve existir uma instruo que altera o valor da <condio>, caso contrrio, o loop pode se tornar de execuo infinita (no parar). Resoluo do exemplo1: Inicio Inteiro numero, quadrado; Escreva (Informe numero); Leia (numero); Enquanto (numero > 0) faa inicio Quadrado numero * numero; Escreva (O quadrado do numero , numero, , quadrado); Escreva (Informe prximo numero ); Leia (numero); fim Fimenquanto; Fim.
Para inserir o clculo da mdia dos alunos em um lao de repetio utilizando a estrutura enquanto que <condio> utilizaramos? A condio seria que a quantidade de mdias calculadas fosse menor ou igual a 50; porm, o que indica quantas vezes a mdia foi calculada? A estrutura (enquanto) no oferece este recurso; portanto, devemos estabelecer um modo de contagem, o que pode ser feito atravs de um contador representado por uma varivel com um dado inicial, o qual incrementado a cada repetio. Exemplo 2 (contador): Inteiro CONTADOR; CONTADOR 17; { inicializar o contador } CONTADOR CONTADOR + 1; { incrementar o contador de 1 } Aplicando estes conceitos, temos: Incio { declarao de variveis } real N1, N2, N3, N4; { notas bimestrais } real MA; { mdia anual } inteiro CONTADOR; { CONTADOR } CONTADOR 0; ENQUANTO CONTADOR < 50 FAA { teste da condio } Inicio Leia (N1, N2, N3, N4); MA (N1 + N2 + N3 + N4) / 4; Apostila didtica Lgica de Programao Profa Jusane Farina Lara 38
Escreva (Media Anual = , MA); SE MA >= 6 Ento Incio { bloco verdade } Escreva (Aluno Aprovado!); Escreva (Parabns!); Fim; { bloco verdade } Seno Incio { bloco falso } Escreva (Aluno Reprovado!); Escreva (Estude Mais!); Fim; { bloco falso } Fim_se; CONTADOR CONTADOR + 1; fim FIMENQUANTO; Fim. A seguir tem-se um exemplo que se refere a digitao da idade para 50 pessoas. Ao mesmo tempo acumulada a idade para posterior clculo da mdia geral (aritmtica) da idade. Exemplo 3 (somatrio): Inteiro CONT, { contador } SOMA; { somatrio } ACUM 17; { inicializar o acumulador } Leia (CONT); SOMA SOMA + CONT; { somar na soma o contador } Execute mais algumas vezes estas duas ltimas aes, observando o que acontece com a varivel SOMA. incio { declarao de variveis } real media inteiro contador, soma, idade; contador acum 0; ENQUANTO contador < 50 faa { teste de condio } inicio Leia (idade); soma soma + idade; contador contador + 1; fim FIMENQUANTO; media soma / 50; escreva (media de idade de 50 pessoas = , media); fim. O algoritmo anterior utilizava um pr-conhecimento da quantidade de pessoas da qual se desejava a mdia geral. Se no soubssemos quantas eram as pessoas, o que faramos para controlar o lao de repetio? Teremos de encontrar outro critrio de parada, o que pode ser feito utilizando um valor predefinido como finalizador de uma seqncia de valores. Para aplicar tal conceito ao algoritmo da mdia geral da idade usaremos como finalizador o valor 1, que quando encontrado encerra o lao sem ter seu valor computador ao acumulador. incio real media; inteiro contador, soma, idade; Apostila didtica Lgica de Programao Profa Jusane Farina Lara 39
soma 0; escreva (Para finalizar o algoritmo deve-se informar 1 para a idade); leia (idade); ENQUANTO idade <> -1 faa inicio soma soma + idade; leia (idade); contador contador + 1; fim FIMENQUANTO; media soma / contador; Escreva (media da idade = , media); fim. 5.3 CONTADORES E ACUMULADORES Juntamente com as instrues de repetio aparece o conceito de acumuladores e contadores. Acumuladores e contadores so variveis com um propsito especfico: Acumuladores(somatrios) : acumulam um valor a cada passo de repetio do lao, normalmente utilizado para clculos; Contadores: contam a quantidade de repeties de execuo de um determinado lao. So sempre incrementadas de uma unidade de valor. Um exemplo de contador pode ser descrito no algoritmo abaixo: deseja-se saber ao final do algoritmo quantos nomes foram lidos: { ALGORITMO EXEMPLOENQUANTO } INICIO CARACTER NOME ; INTEIRO CONT:; CONT 0; {INICIALIZA O CONTADOR COM ZERO} LEIA (NOME); CONT CONT + 1; ENQUANTO (NOME <> FIM) FAA inicio ESCREVA (NOME); LEIA (NOME); CONT CONT + 1; fim FIM ENQUANTO; ESCREVA (FORAM LIDOS, CONT, NOMES); FIM. O princpio bsico do contador e do acumulador inicializar o valor dos mesmos e atribuir a varivel, o valor j contido nela somado de um incremento. Todo contador ou acumulador deve receber um valor inicial Exemplo: CONTADOR CONTADOR SOMA SOMA
0; CONTADOR + 1;
0; SOMA + 10;
Um exemplo onde acumuladores e contadores so largamente utilizados juntos o algoritmo para calcular os sucessivos valores de E usando a srie abaixo e considerando N um nmero inteiro e maior que 1. Apostila didtica Lgica de Programao Profa Jusane Farina Lara 40
E=
1+
1+
_________
1+
_________
...
1
________
1!
2!
N!
A lgica iniciar um acumulador chamado E com o valor 1 e ir somando os resultados obtidos de 1 / N! at que o contador N chegue ao nmero limite desejado. Resoluo: { ALGORITMO SERIE_E } INICIO INTEIRO CONT, N, FAT, AUX; REAL E; LEIA (N); { O INICIO DA SRIE } E 1; CONT 1; ENQUANTO (CONT <= N) FAA INICIO {CALCULO DO FATORIAL} FAT <- 1; AUX <- CONT; ENQUANTO (AUX > 1) FACA INICIO FAT FAT * AUX; AUX AUX 1; FIM FIM ENQUANTO; E E + 1/FAT; CONT CONT + 1; FIM FIM ENQUANTO; ESCREVA (E) FIM.
EXERCCIO DE APRENDIZAGEM Considere o seguinte problema: Elaborar o algoritmo atravs da linguagem natural, diagrama de blocos e codificao em pseudocdigo (portugus estruturado) de um programa que efetue o clculo do fatorial do nmero 5, 5!. Dessa forma, temos que 5! = 5 * 4 * 3 * 2 * 1 ou 5! = 1 * 2 * 3 * 4 * 5, equivalente a 120. Fatorial o produto dos nmeros naturais desde 1 at o inteiro n. Sendo assim, o clculo de uma fatorial conseguido pela multiplicao sucessiva do nmero de termos. No caso de uma fatorial de nmero 5, este o nmero de termos a ser utilizado. Desta forma, o programa dever executar as multiplicaes sucessivamente e acumul-las a fim de possuir o valor 120 aps 5 passos. O nmero de passos dever ser controlado por um contador. Veja a seguir: Algoritmo 1. Inicializar as variveis FATORIAL e CONTADOR com 1; 2. Multiplicar sucessivamente a varivel FATORIAL pela varivel CONTADOR; 3. Incrementar 1 varivel CONTADOR efetuando o controle at 5; 4. Apresentar ao final o valor obtido. Pelo fato de se ter que efetuar o clculo de uma fatorial de 5 (5!), isto implica que o contador dever variar de 1 a 5, por este motivo a varivel CONTADOR dever ser inicializada com valor 1. Apostila didtica Lgica de Programao Profa Jusane Farina Lara 41
Pelo fato de a varivel FATORIAL possuir ao final o resultado do clculo do fatorial pretendido, esta dever ser inicializada com valor 1. Se ela for inicializada com zero, no existir resultado final, pois qualquer valor multiplicado por zero resulta zero. Multiplicar sucessivamente implica em se efetuar a multiplicao de varivel CONTADOR com o valor atual da varivel FATORIAL a cada passo controlado pelo looping. No caso por 5 vezes. Abaixo indicado esta ocorrncia na linha 2 do algoritmo. 1. Inicializar as variveis FATORIAL e CONTADOR com 1; 2. Repetir a execuo dos passos 3 e 4 por 5 vezes; 3. FATORIAL FATORIAL * CONTADOR; 4. Incrementar 1 varivel CONTADOR; 5. Apresentar ao final o valor obtido. Diagrama de Blocos Incio
Fatorial Contador
1 1
N Contador <= 5 S
Fatorial Fatorial * Contador
Contador Contador + 1
Fatorial
Fim Observe dentro do looping a indicao de dois contadores, sendo que o primeiro funciona como um acumulador, pois este que ter no final o valor do resultado da fatorial, e o segundo sendo utilizado para controlar a execuo do looping e ser a base para o clculo do acumulador.
CONTADOR 1 2 3 4 5 FATORIAL 1 1 2 6 24 FATORIAL FATORIAL * CONTADOR 1 2 6 24 120 COMENTRIOS Valor inicial das variveis e da fatorial Clculo da fatorial com o contador em 2 Clculo da fatorial com o contador em 3 Clculo da fatorial com o contador em 4 Clculo da fatorial com o contador em 5
42
Perceba que quando a varivel CONTADOR est com valor 5, a varivel FATORIAL est com o valor 120. Neste ponto, o looping encerrado e apresentado o valor da varivel FATORIAL. Pseudocdigo (Portugus Estruturado) Incio inteiro CONTADOR, FATORIAL; FATORIAL 1; CONTADOR 1; Enquanto (CONTADOR <= 5) Faa inicio FATORIAL FATORIAL * CONTADOR; CONTADOR CONTADOR + 1; fim Fimenquanto; Escreva (Fatorial de 5 = , FATORIAL); Fim. Vamos reescrever o algoritmo do fatorial, mas agora possibilitando fornecer qualquer nmero, para que o mesmo seja calculado. Incio inteiro CONTADOR, FATORIAL, NUMERO; FATORIAL 1; CONTADOR 1; Leia (NUMERO); Enquanto (CONTADOR <= NUMERO) Faa inicio FATORIAL FATORIAL * CONTADOR; CONTADOR CONTADOR + 1; fim Fimenquanto; Escreva (Fatorial de , NUMERO, = , FATORIAL); Fim. 5.4 REPETIO COM TESTE NO FINAL ( Repita .. at) Para realizar a repetio com teste no final, utilizamos a estrutura repita, que permite que um bloco ou ao primitiva seja repetido at que uma determinada condio seja verdadeira.
43
N
<condio>
S Lao com no mnimo um ciclo Pela sintaxe da estrutura, percebemos que o bloco (Comando 1 ... Comando n) executado pelo menos uma vez, independente da validade da condio. Isto ocorre porque a inspeo da condio feita aps a execuo do bloco.
Exemplos: a) Resoluo do exemplo1: Inicio Inteiro numero, quadrado; Escreva (Informe numero); Leia (numero); Repita quadrado numero * numero; Escreva (O quadrado do numero , numero, , quadrado); Escreva (Informe prximo numero ); Leia (numero); At (numero <= 0) Fim. b) Resoluo do exemplo3: incio { declarao de variveis } real media; inteiro contador, soma, idade; contador 0; soma 0; repita leia (idade); soma soma + idade; Apostila didtica Lgica de Programao Profa Jusane Farina Lara 44
contador contador+ 1; contador >= 50; { teste da condio } at media soma / 50; escreva (media da idade = , media); fim. A utilizao de uma estrutura repita no lugar de uma estrutura enquanto corresponde a utilizar como <condio> para o repita a negao da <condio>do enquanto. c) Construa um algoritmo que permita fazer um levantamento do estoque de vinhos de uma adega, tendo como dados de entrada tipos de vinho (branco, tinto e rose). Especifique a porcentagem de cada tipo sobre o total geral de vinhos; a quantidade de vinhos desconhecida (usar como finalizador a constante fim). Incio caractere tipo_vinho; inteiro cont_vinhos, cont_tinto, cont_branco, cont_rose; real perc_tinto, perc_branco, perc_rose; cont_vinhos cont_tinto cont_branco cont_rose 0; repita leia (tipo_vinho); se tipo_vinho = tinto ento cont_tinto cont_tinto + 1; seno se tipo_vinho = branco ento cont_branco cont_branco + 1; seno se tipo_vinho = rose ento cont_rose cont_rose+ 1; fimse; fimse; fimse; cont_vinhos cont_vinhos + 1; at tipo_vinho = fim; cont_vinhos cont_vinhos 1; se cont_vinhos > 0 ento incio perc_tinto cont_tinto * 100 / cont_vinhos; perc_branco cont_branco * 100 / cont_vinhos; perc_rose cont_rose * 100 / cont_vinhos; escreva (porcentagem de tintos = , perc_tinto); escreva (porcentagem de brancos = , perc_branco); escreva (porcentagem de roses = , perc_rose); fim; seno escreva (nenhum tipo de vinho foi fornecido!); fimse; fim. d) Voltemos ao clculo do fatorial do nmero 5. Incio inteiro CONTADOR, FATORIAL; FATORIAL 1; CONTADOR 1; repita FATORIAL FATORIAL * CONTADOR; CONTADOR CONTADOR + 1; Apostila didtica Lgica de Programao Profa Jusane Farina Lara 45
46
Para var de vi at vf passo p faa inicio Var Incio, Fim, Incremento S N Comando 1; Comando 2; . . Comando n; Instrues fim Fimpara;
Onde: var a varivel de controle; vi o valor inicial da varivel var; vf o valor final da varivel var, ou seja, o valor at o qual ela pode chegar; p o valor do incremento dado varivel var. Possumos ento um contador de forma compacta, em que sempre temos uma inicializao (vi) da varivel de controle (var), um teste para verificar se a varivel atingiu o limite (vf) e um acrscimo (incremento de p) na varivel de controle aps cada execuo do bloco de repetio.
Exemplos: a) voltemos ao clculo da mdia aritmtica da idade de 50 pessoas. Incio real media; inteiro contador, soma, idade; soma 0; faa para contador de 1 at 50 passo 1 inicio leia (idade); soma soma + idade; fim fimpara; media soma /50; escreva (media da idade = , media); fim. 47
b)
Elabore um algoritmo que efetue a soma de todos os nmeros mpares que so mltiplos de trs e que se encontram no conjunto dos nmeros de 1 at 500. Incio Inteiro soma_impares, {soma dos nmeros mpares mltiplos de trs } contador; soma_impares 0; para contador de 1 at 500 passo 1 faa inicio se (contador mod 2) <> 0 {o nmero impar?} ento se (contador mod 3) = 0 {mltiplo de trs?} ento soma_impares soma_impares+ 1; fimse; fimse; fim fimpara; escreva (soma = , soma_impares); fim. Voltemos ao clculo do fatorial do nmero 5. Incio inteiro CONTADOR, FATORIAL; FATORIAL 1; para CONTADOR de 1 at 5 passo 1 faa FATORIAL FATORIAL * CONTADOR; fimpara; Escreva (Fatorial de 5 = , FATORIAL); Fim.
c)
5.8 COMPARAO ENTRE ESTRUTURAS DE REPETIO Podemos estabelecer dois postulados que relacionam as estruturas de repetio: Toda estrutura Enquanto pode ser convertida para Repita e vice_versa; Toda estrutura Para pode ser convertida em Enquanto, mas nem toda estrutura Enquanto pode ser convertida em Para. Temos tambm a seguinte tabela comparativa que relaciona as caractersticas de cada estrutura de repetio: Estrutura Enquanto Repita Para Condio Incio Final No tem Quantidade de Execues ? Mnimo 1 (vf vi + p) div p Condio de Existncia Condio verdadeira Condio falsa var < vf
Exemplos: a) elabore um algoritmo que, utilizando as trs estruturas de repetio, imprima a tabuada do nmero 5. Utilizando Enquanto: Inicio inteiro contador; contador 1; enquanto contador <= 10 faa inicio Apostila didtica Lgica de Programao Profa Jusane Farina Lara 48
escreva (contador, x 5 = , contador * 5); contador contador + 1; fim fimenquanto; fim. Utilizando Repita: Inicio Inteiro contador; contador 1; repita Escreva (contador, x 5 = , contador * 5); contador contador + 1; at contador > 10; Fim. Utilizando Para: Inicio Inteiro contador; para contador de 1 at 10 passo 1 faa Escreva (contador, x 5 = , contador * 5); fimpara; Fim. b) Modifique o algoritmo para que este imprima a tabuada de quaisquer nmeros, sendo que estes nmeros so fornecidos pelo usurio, at encontrar como finalizador 1. Sabendo que primeiro nmero-base fornecido no 1: Utilizando Enquanto: Inicio Inteiro numero, contador; Leia (numero); Enquanto numero <> -1 faa inicio Contador 1; Enquanto contador <= 10 faa Inicio Escreva (contador, x , numero, = , contador * numero); Contador contador + 1; fim Fimenquanto; Leia (numero); fim Fimenquanto; Fim.
Utilizando Repita: Inicio Inteiro numero, contador; Leia (numero); Repita Contador 1; Repita Escreva (contador, x , numero, = , contador * numero); Contador contador + 1; At contador > 10; Leia (numero); Apostila didtica Lgica de Programao Profa Jusane Farina Lara
49
At Fim.
numero = -1;
Utilizando Para: Inicio Inteiro numero, contador, var_controle; Leia (numero); Para var_controle de 1 at ????? passo 1 faa inicio Para contador de 1 at 10 passo 1 faa Escreva (contador, x , numero, = , contador * numero); fimpara; ????? Leia (numero); ????? fim fimpara; Fim. Verificamos neste exemplo o segundo postulado, ou seja, a impossibilidade de construir este algoritmo utilizando a estrutura Para. Do Enquanto ao PARA-FAA Podemos verificar a diferena do enquanto e o para-faa, no somente no sentido de lao infinito e finito. Abaixo temos uma instruo para-faa e logo aps uma instruo enquanto que realizam a mesma funo ler 10 valores e exibir a soma dos mesmos. Com o para-faca, muitas coisas no precisam ser controladas como acontece no enquanto deste exemplo. No enquanto utiliza-se um contador para limitar o lao, todo o controle deste contador deve ser realizado pelo desenvolvedor do algoritmo. No para-faa, o controle de contagem feito pela prpria instruo.
{ ALGORITMO COM_ENQUANTO } INICIO INTEIRO SOMA, CONTADOR, NUMERO; LEIA (NUMERO); CONTADOR 1; SOMA NUMERO; ENQUANTO (CONTADOR < 10) FACA inicio LEIA (NUMERO); SOMA SOMA + NUMERO; CONTADOR CONTADOR + 1; fim FIM ENQUANTO; ESCREVE (SOMA); FIM. { ALGORITMO COM_PARA_FACA } INICIO INTEIRO SOMA, CONTADOR, NUMERO; PARA (CONTADOR de 1 ATE 10 PASSO 1) FACA inicio LEIA (NUMERO); SOMA SOMA + NUMERO; fim FIM PARA; ESCREVE (SOMA); FIM.
50
6.1 INTRODUO
Como estudado anteriormente, uma varivel simples uma entidade criada para permitir o acesso a uma posio de memria onde se armazena uma informao de um determinado tipo de dado pela simples referncia a um nome simblico. Porm, so muito comuns as situaes prticas em que se necessita referenciar um grupo de variveis do mesmo tipo pelo mesmo nome simblico. Para satisfazer a esta necessidade foi criado o conceito de variveis indexadas, que um conjunto de variveis do mesmo tipo, referenciveis pelo mesmo nome e individualizadas entre si de sua posio dentro desse conjunto. O termo indexada provm da maneira como esta individualizao feita: por meio de ndices. Uma varivel indexada pode ser definida como tendo ou mais ndices. No caso em que um nico ndice usado a varivel indexada chamada de vetor. Quando uma varivel indexada possui dois ndices, ela chamada de matriz. Estes termos (vetor e matriz) so adotados em analogia aos conceitos usados na Matemtica e na Fsica. Teoricamente no h qualquer restrio quanto existncia de variveis indexadas com trs ou mais ndices, mas na prtica sua ocorrncia muito pouco freqente. Ao nmero de ndices necessrios localizao de um componente (elemento) dentro da varivel indexada d-se o nome de dimenso ou tamanho. 6.2 VETORES Quando possumos uma ordem e um ndice de acesso aos elementos de um conjunto, ento, temos caracterizado um vetor. Para declarar um vetor a sintaxe segue abaixo: Tipo_de_dado Onde: Tipo_de_dado o tipo de dado correspondente aos elementos da varivel indexada. Nome_da_varivel o nome simblico pelo qual o conjunto (varivel indexada) identificado. Tamanho o valor mximo do ndice da varivel para a dimenso. nome_da_varivel[tamanho]; { vetor }
ndice Do Vetor
Nome do Vetor
51
Para utilizar um vetor, colocamos o nome da varivel mais o ndice entre colchetes. Exemplo: { Algoritmo PrimeiroVetor } INICIO Inteiro V[3]; Inteiro I; LEIA (V[1]); LEIA (V[2]); LEIA (V[3]); FIM. O mesmo algoritmo poderia ser incrementado da seguinte maneira: ALGORITMO PRIMEIROVETOR; INICIO Inteiro V[3], I; PARA (I de 1 ATE 10 PASSO 1) FACA LEIA (V[I]); FIM PARA; FIM.
Um vetor deve ser entendido como uma varivel que possui mltiplos valores. Para acessar estes valores necessrio informar a posio desejada. Esta posio varia de 1 at o tamanho mximo definido na declarao de tipo do vetor. A figura abaixo demonstra o vetor. Dado um vetor de n posies, composto de nmeros inteiros, tm-se a seguinte representao: Valor 4 5 7 8 9 0 0 9 9 7 ndice 1 Logo: 2 3 4 5 6 7 8 9 ... n
O valor na posio 1 4; O valor 9 se encontra nas posies: 5, 8 e 9. O maior valor do vetor o 9 e se encontra nas posies 5, 8 e 9. O menor elemento do vetor o 0 e se encontra nas posies 6 e 7.
6.2.1 Leitura de Vetores Para se efetuar a leitura de um vetor necessrio a utilizao de um instruo PARA FACA variando de 0 at o (tamanho mximo - 1) definido na declarao de tipo do vetor. necessria a declarao de uma varivel do tipo inteiro que servir de ndice para termos acesso ao valor de determinada posio. Exemplo: PARA (i de 0 ATE 4 PASSO 1) FACA LEIA (Valor [i]); FIM PARA; Apostila didtica Lgica de Programao Profa Jusane Farina Lara 52
6.2.2 Escrita de Vetores A escrita de vetores segue a regra da leitura de vetores. Para escrever o valor contido na posio desejada basta escrever a seguinte instruo: ESCREVA (Vetor [posio]);
6.2.3 Operaes com Vetores Vetores podem ser manipulados de diversas maneiras. possvel alm da leitura ou escrita em vetores, efetuar atribuio de valores nas posies de um vetor. Como exemplo, vamos gerar um vetor que contem os nmeros pares entre 1 e 10. Para tal, precisaremos de um vetor de 5 posies, pois temos os nmeros 2,4,6,8 e 10 como resultado do mesmo.
{ ALGORTIMO VETORDEPARES: GERA OS NMEROS PARES } INICIO INTEIRO PARES[5]; INTEIRO I, CONT; CONT 2; PARA (I de 0 ATE 4 PASSO 1) FACA PARES[I] CONT; CONT CONT + 2; FIM PARA; FIM.
O mapa de memria do computador, de acordo com o algoritmo acima, poderia ser imaginado conforme a figura a seguir.
I 0 1 Pares cont 2 3 4
A seguir, apresentado um exemplo onde faz-se a leitura de 10 nmeros do tipo inteiro, armazenando-os num vetor X. Para cada valor lido verifica-se se o nmero par, se sim, este armazenado num vetor J. No final mostrado o vetor J com os elementos pares. inicio inteiro X[10], J[10], i, ind=0; escreva (Entrada de dados do vetor X); para (i de 0 at 9 passo 1) faa inicio escreva(digite um numero); leia (X[i]); se (X[i] mod 2 = 0) { testa se o numero par} ento inicio J[ind] = X[i]; { ind controla o ndice do vetor J} ind = ind + 1; fim; fimse; fim; fimpara; Apostila didtica Lgica de Programao Profa Jusane Farina Lara 53
escreva (sada de dados do vetor J nmeros pares) para (i de 0 at ind-1 passo 1) faa { ind : indica a parada do lao } escreva (J[i]); fimpara; fim. Abaixo descrevemos algumas operaes, comparaes e troca de valores entre posio de vetores: Dado o Vetor V de 5 posies, temos: Item Ler valor para o ndice 1 Escrever o valor no ndice 2 Atribuir 9 como valor do ndice 3 Atribuir o valor do ndice 2 no valor do ndice 3 Comparar valores dos ndices dos vetores Exemplo LEIA (V[1]); ESCREVA (V[2]); V[3] 9;
V[3] V[2]; SE (V[1] = 4)... SE (V[1] > V[2]) ... V[2]; Trocar os valores de ndices 2 e 3 do vetor, AUX precisa-se de uma varivel aux do mesmo V[2] V[3]; tipo do contedo do vetor. V[3] AUX;
6.3 MATRIZES
Matrizes so um conjunto de valores que possuem mais de um ndice para serem acessados. Um vetor possui apenas uma dimenso, quando temos mais de uma dimenso ento utilizamos as matrizes.
Para declarar uma matriz a sintaxe segue abaixo: Tipo_de_dado nome_da_variavel[tam1][tam2]; { matriz }
Inteiro matriz[3][3]; { matriz 3 x 3 do tipo inteiro } Real m[4][4]; { matriz 4 x 4 do tipo real }
54
1 2 3 4 5 6 7 8
Notas 4,5
Notas 8,9
Notas 8,0
3,6
I = linha
J = coluna
6.3.1 Leitura e Escrita de Matrizes Para efetuarmos a leitura ou escrita de dados de uma matriz utilizamos um processo semelhante ao da leitura de um vetor. Como uma matriz, ao contrrio do vetor, possui mais de uma dimenso, o nmero de laos necessrio para efetuar-se a leitura da mesma exatamente proporcional a esta dimenso. O exemplo abaixo demonstra como deve ser feito o algoritmo de leitura e de escrita de uma matriz bidimensional. Inteiro m[5][5], i, j; Escreva (Entrada de dados da Matriz); Para (i de 0 at 4 passo 1) faa { i controle das linhas } Para (j de 0 at 4 passo 1) faa { j controle das colunas} leia (m[i][j]); Fimpara; Fimpara; Escreva (Sada de dados da Matriz); Para (i de 0 ATE 4 PASSO 1) FACA { i controle das linhas } Para (j de 0 ATE 4 PASSO 1) FACA { j controle das colunas} escreva (m[i][j]); Fimpara; Fimpara;
A seguir, tem-se o exemplo para encontrar o maior elemento apenas da diagonal principal da matriz. Inteiro maior; maior = m[0][0]; { a varivel maior recebe o 1 elemento da matriz }
55
Para (i de 1 at 4 passo 1) faa Se (m[i][i] > maior) { diagonal principal: linha = coluna} maior = m[i][i]; Fimse; Fimpara; Escreva (maior elemento da diagonal principal = , maior);
Note que necessrio o aninhamento de laos para ler as posies de uma matriz. Tanto quanto for 5, 8 e 9 ser tambm o tamanho do aninhamento de laos necessrios para a leitura de uma matriz. O lao mais interno quem realiza a leitura, escrita ou atribuio do valor a posio da matriz. 6.3.2 Operaes com Matrizes As matrizes so definidas por um nmero de colunas e um nmero de linhas (duas dimenses), opcionalmente pode ser adicionado um nmero de folha ou pgina (trs dimenses). As figuras abaixo descrevem uma matriz bi e tridimensional. Colunas
Linhas
4 Pginas 5
Para recuperar um valor na primeira matriz, devemos indicar o valor da coluna, linha onde est o valor. J na segunda matriz, devemos indicar tambm o valor correspondente a pgina onde se encontra o valor.
56
6.3 MATRIZES QUADRADAS So matrizes que possuem a quantidade de linhas igual a quantidade de colunas, formando um quadrado. Exemplo 1: Diagonal principal
57
REFERNCIAS
GUIMARES, A. M.; LAGES, N. A C. Algoritmos e Estrutura de Dados. Rio de Janeiro, ed. LCT, 18a tiragem, 1994. HOLZNER, ??? MANZANO, J.A.N.G. Lgica Estruturada para Programao de Computadores. So Paulo, ed. rica, 2001. MANZANO & OLIVIERA. Algoritmos Lgica para Desenvolvimento de Programao de Computadores. So Paulo, ed. rica, 2000. MANZANO & OLIVIERA. Estudo Dirigido de Algoritmos. So Paulo, ed. rica, 1997. ROCHA, Ana Regina da; MALDONADO, J.C.; WEBER, K.C. Qualidade de Software: teoria e prtica. So Paulo, Prentice Hall, 2001. VENNCIO, C. F. Desenvolvimento de Algoritmos Uma Nova Abordagem. So Paulo, ed. rica, 1997. VILLANO, I. C. Algoritmos e Pascal Manual de Apoio. Rio de Janeiro: Ed. Cincia Moderna Ltda, 2000.
58