Universidade Federal Fluminense Centro Tecnológico Instituto de Computação Departamento de Ciência da Computação Construção de Algoritmos Versão 2005 Prof. Leonardo Cruz da Costa 1 Capítulo I - INTRODUÇÃO É comum seguirmos roteiros para solucionar problemas no dia a dia. Esses roteiros descrevem ações que devem ser seguidas uma a após a outra com o objetivo de produzir o resultado desejado. Os roteiros podem ser textuais ou gráficos. Exemplo 1: Como fazer um pato no tucupi? Tempere o pato com o alho, a cebola, sal e pimenta-do-reino. Aqueça o forno em temperatura média. Coloque o pato numa assadeira com um pouco de óleo e leve ao forno até dourar. Numa panela, coloque o tucupi e os pedaços de pato assado. Leve ao fogo alto até ferver. Abaixe o fogo e cozinhe até ficar macio. Acrescente mais tucupi, se necessário. Junte as folhas de jambu e cozinhe até que os talos fiquem macios. Sirva com farinha de mandioca. Exemplo 2: Como chegar no sítio do amigo para churrasco de final de semana? Siga pela rodovia RJ 104 No quilometro 98 virar a esquerda na primeira entrada de terra Siga até a primeira ponte. Atravesse a ponte e dobre à esquerda. Procure a placa sítio Animação. Exemplo 3: Como deve ser a instalação do sistema de aquecimento de água solar para piscinas. 1. Moto Bomba 2. Filtro 3. Registro de Esfera ou Gaveta 4. Válvula de Retenção 5. Saída de água fria para as placas 6. Retorno de água quente das placas 7. Tubulação de retorno para piscina. 2 Exemplo 4: Roteiro para trocar uma lâmpada queimada. a) Primeira versão 1. Remover a lâmpada queimada; 2. Colocar a nova lâmpada; Mas isto está muito abstrato. O que é remover uma lâmpada? b) Segunda versão (um pouco mais detalhada) 1. 2. 3. 4. 5. 6. 7. Buscar uma lâmpada nova; Pegar uma escada Posicionar a escada debaixo da lâmpada; Subir na escada até que a lâmpada possa ser alcançada; Girar a lâmpada queimada no sentido anti-horário até que se solte; Colocar a lâmpada nova girando-a no sentido horário; Descer da escada; E se a lâmpada não estiver queimada? c) Terceira versão (um pouco mais detalhada) 1. Buscar uma lâmpada nova; 2. Pegar uma escada 3. Posicionar a escada debaixo da lâmpada; 4. Acionar o interruptor; 5. Se a lâmpada não acender, então 6. Subir na escada até que a lâmpada possa ser alcançada; 7. Girar a lâmpada queimada no sentido anti-horário até que se solte; 8. Colocar a lâmpada nova girando-a no sentido horário; 9. Descer da escada; 3 Nessa versão algumas ações estão vinculadas à condição lâmpada não acender, ou seja, somente efetua-se a troca da lâmpada caso a condição lâmpada queimada (lâmpada não acender) for verdadeira. Se a condição lâmpada não acender for falsa, nada mais será realizado. Apesar do algoritmo estar correto, ele pode ser melhorado uma vez que somente seria necessário pegar a escada, caso a condição lâmpada não acender seja verdadeira: d) Quarta versão (um pouco mais detalhada) 1. Acionar o interruptor; 2. Se a lâmpada não acender, então 2.1 Buscar uma lâmpada nova; 2.2 Pegar uma escada 2.3 Posicionar a escada debaixo da lâmpada; 2.4 Subir na escada até que a lâmpada possa ser alcançada; 2.5 Girar a lâmpada queimada no sentido anti-horário até que se solte; 2.6 Colocar a lâmpada nova girando-a no sentido horário; 2.7 Descer da escada; Exercícios 1. Elaborar um algoritmo que mostre os passos necessários para trocar um pneu furado. 2. Um homem precisa atravessar um rio com um barco que possui capacidade apenas para carregar ele mesmo e mais uma de suas três cargas, que são: um lobo, um bode e um maço de alfafa. O que o homem deve fazer para conseguir atravessar o rio sem permite que fiquem em uma margem, o lobo e a cabra, a cabra e a alfafa? Escreva um algoritmo mostrando a resposta, ou seja, indicando todas as ações necessárias para efetuar a travessia segura. I.1 – ALGORITMOS Computadores muitas vezes chamados erroneamente de cérebro eletrônico, não têm, pelo menos até agora, a capacidade de resolver por conta própria problemas. Assim, como outras máquinas, eles precisam ser instruídos, para que através de um conjunto de ações possam solucionar o problema. Para resolvermos problemas, através de computador, é necessário que uma seqüência de operações seja criada, semelhante aos roteiros apresentados anteriormente. A solução é obtida através de duas etapas: • • A criação de uma seqüência de operações que, quando executada, produz o resultado do problema (a esta seqüência se dá o nome de algoritmo). A execução, propriamente dita, da seqüência de operações. “Um algoritmo é a descrição de um padrão de comportamento, expressado em termos de um repertório bem definido e finito de ações primitivas, as quais damos por certo que podem ser executadas” (Guimarães e Lages). 4 Um algoritmo pode ser definido também como: “uma seqüência ordenada, sem ambigüidade, de passos que levam à solução de um dado problema” (Tremblay e Bunt [5]). As definições acima mostram que um algoritmo precisa: • • • Ter inicio e fim; Ser descritas em termos de ações não ambíguas e bem definida; Que as ações sigam uma seqüência ordenada. Essas três características são entendidas de maneira fáceis, pois: 1. Ter inicio e fim: um computador não pode ficar infinitamente buscando uma solução para o problema; 2. Ações não ambíguas e bem definidas: não poder haver dúvidas da ação a ser tomada. Observe o passo no exemplo 1 - Coloque o pato numa assadeira com um pouco de óleo e leve ao forno até dourar. O que significa um pouco de óleo: 1 ml., 2 ml, 10 litros, etc. 3. Seqüência ordenada: as ações devem seguir sempre a mesma ordem de execução, pois se A ordem fosse aleatória não se pode garantir a solução adequada para o problema. I.2 REPRESENTAÇÃO DE ALGORITMOS O processo de resolução de um problema através de computador começa no entendimento de forma clara do problema, para qual é projetado um algoritmo, que futuramente será codificado em uma linguagem de programação, transformando-se dessa forma em um programa. Fase de resolução do Problema Fase de Implementação (utilização de uma linguagem de Programação) Assim, um algoritmo é representado de duas maneiras diferentes (mas equivalentes): A primeira representação deve ser fácil para as pessoas, construir, modificar e testar as ações (usada na construção em si). A segunda deve ser entendida por computadores – é usada na fase de execução, quando da transformação (codificação) em programa (tradução de um algoritmo em linguagem de programação). Situações semelhantes ocorrem em outras áreas do conhecimento. Na Arquitetura e na Engenharia, os profissionais elaboram várias plantas (baixa, corte, situação, etc.) da mesma 5 edificação para diferentes fins. A edificação é a solução projetada e cada planta, embora diferente, é a representação da mesma edificação. 1) A primeira representação: usadas pelas pessoas A linguagem natural (português, inglês): utilizada nas receitas, instruções, etc.. Para solução de problemas em computação apresenta um inconveniente: a ambigüidade de alguns termos. Assim, restrições são impostas à linguagem natural, objetivando a redução de ambigüidade, criando uma pseudolinguagem (ou, ainda, pseudocódigo, Portugol). Representações gráficas: são bastante recomendáveis já que um desenho muitas vezes substitui, com vantagem, mil palavras. a) fluxograma b) diagramas de Nassi-Shneidermam c) método de Jackson d) diagramas de Warnier-Or 2) A segunda representação: usada pelo computador Utiliza-se uma linguagem de programação (Pascal, Cobol, C, Java, C# etc.), para representar algoritmos, transformando-os em programas. 6 Capítulo II - CONSTRUÇÃO DE ALGORITMOS Como vimos anteriormente quando queremos resolver um problema utilizando um computador, devemos construir uma seqüência de passos (algoritmo) que conduz à solução do problema. Uma das vantagens de utilizar algoritmos é que a partir dele o programador pode codificá-lo em qualquer linguagem de programação. OS PASSOS DE UM ALGORITMO Um algoritmo é uma seqüência de passos, onde cada passo é de uma das três naturezas seguintes: a) uma operação elementar; b) uma operação de controle especificando uma seleção entre seqüências de passos; c) uma operação de controle especificando a repetição de uma seqüência de passos; A) OPERAÇÕES ELEMENTARES A principal motivação para o desenvolvimento e uso dos computadores foi a necessidade de manipular com eficiência grandes quantidade de dados. Os dados podem ser de diversos tipos: primitivos, agregados homogêneos, agregados heterogêneos, registros, arquivos de registros, etc.. O conjunto dos tipos primitivos que compõe uma linguagem de programação pode mudar dependendo da linguagem de programação. A seguir apresentamos os tipos primitivos que normalmente são usados na construção de algoritmos. Inteiro: denota todo o conjunto de valores numéricos que pertencem ao conjunto dos números inteiros (negativos, positivos ou nulos) Ex: Quantidade de alunos: 50 Quantidade de professores de um curso: 35 Real: denota todo o conjunto de valores numéricos que pertença ao conjunto dos números reais (negativos, positivos ou nulos) Ex: Média de um aluno: 8.5 Salário de uma pessoa: R$ 300.00 Caractere: denota todo o conjunto de valores que pertença ao conjunto dos caracteres (Alfabéticos: A-Z, a-z; numéricos: 0-9; e especiais: ?, @," ~, etc.) Ex: Nome do aluno: "João Antônio" Orientação: "usar somente caneta preta no preenchimento" 7 Lógico: denota duas situações (biestável: verdadeiro - falso, 0-1) Ex: Questão: Certa Situação: Reprovado 1. Determinar qual o tipo de dado presente nas sentenças abaixo: a) Há na porta do banheiro uma placa ‘HOMENS’. b) O salário de Maria é de R$ 1030,98. c) Uma maneira econômica de representar o sexo de uma pessoa é através de ‘F’ ou ‘M’. d) A sala de aula fica no segundo andar. e) O planeta Terra tem a forma quadrada. Entende-se por operações elementares todos os cálculos com um resultado produzido, entrada e saída de dados; movimentação de dados. A.1) ATRIBUIÇÃO A memória permite o armazenamento de dados (valores), que podem ser obtidos pelos dispositivos de entrada e saída, ou calculados em operações no programa e posteriormente colocados à disposição do usuário. Para que a memória possa armazenar os dados, uma área é reservada na memória e associada a identificadores (nomes) usados no programa. A esta área se dá o nome de Tabela de Símbolos (TS). Exemplo: Suponha que desejamos utilizar os valores numéricos 1 e 15. Para que esses possam permanecer na memória e posteriormente serem utilizados para algum tipo de processamento, são criados dois nomes SOMA e RESULTADO. Cada linha na Tabela de Símbolo (TS), representa uma área na memória que guardará os valores e será manipulada (referenciada, identificada) pelo nome dado (SOMA e RESULTADO), como representado a seguir: Tabela de Símbolos NOME TIPO SOMA Inteiro RESULTADO Inteiro VALOR 1 15 Quando necessitarmos de manipular o valor 15 devemos utilizar o nome Resultado e para o valor 1, Soma. A esses nomes criados pelo programador, são chamados de identificadores. Pois, identificam o local (área de memória) onde o valor está armazenado. 8 A criação de nomes é livre? Não, o programador deve seguir uma regra para construir os identificador, ou em outras palavras os nomes utilizados no algoritmo. Regra para Construção de Identificadores Onde: LETRA = A ... Z DÌGITO = 0 ... 9 Observações: a) O primeiro caractere do nome sempre será uma letra; b) Não existe uma restrição a quantidade de letras ou dígitos que formam o nome; d) O nome não pode possuir espaço em branco ou símbolos especiais, tais como: ( ) # $ % &*‘“=+[^ ´`; e) Não poderão ser usados outros caracteres a não ser letras e números; f) As letras sempre serão maiúsculas; g) Não há acentuação dos nomes; h) Não poderá ser um nome uma palavra reservada a uma instrução. Isto é, os nomes devem ser diferentes de: inteiro, real, caractere, lógico, enquanto, faça, fimenquanto, declare, repetir, leia, escreva, etc.. 1. Assinale os identificadores válidos: a) (X), f)KM/L b) x g)UYT c) ah! h) AB*C d) "aluno" i) CEP e) #55 h) dia/mes/ano Como especificamos cada linha da tabela de símbolos? A associação do identificador ao local que receberá o dado na tabela de símbolo (definição de cada linha da tabela) é chamada de declaração (é a compilação da declaração que produz uma TS correspondente a um programa). 9 Em pseudocódigo as declarações podem ser representadas como: DECLARE <identificador1, identificador2, ...> COMO <tipo> Onde tipo define as características dos dados a serem manipulados, pode ser: inteiro, real, caracter, lógico, entre outros. Assim, para definirmos que SOMA e RESULTADO, são os nomes utilizados no algoritmo e que ambos representarão números inteiros, é necessário utilizarmos a declaração: DECLARE SOMA, RESULTADO COMO INTEIRO Essa declaração produzirá a seguinte tabela: NOME SOMA RESULTADO TIPO Inteiro Inteiro VALOR Outros exemplos: DECLARE X, Y, Z, TOTAL COMO REAL NOME X Y Z TIPO Real Real Real VALOR DECLARE T COMO LOGICO NOME T TIPO LÓGICO VALOR DECLARE A, B, TOTALH, TOTALM COMO INTEIRO DECLARE X, K COMO REAL DECLARE S COMO CARATER NOME A B TOTALH TOTALM X K S TIPO INTEIRO INTEIRO INTEIRO INTEIRO REAL REAL CARATER VALOR Observe que a declaração irá produzir uma tabela com os nomes definidos, porém os valores não aparecem, não estão especificados. 10 Como os valores serão colocados na tabela? A associação de um valor a um nome (declarado) se dá através da atribuição. ATRIBUIÇÃO: associa um identificador a uma expressão (valor). forma geral: Identificador ← <Expressão> O símbolo ← deve ser lido como “recebe o valor de” Exemplo: A ← 14 VALOR ← 10.5 SOMA ← 5 RESULTADO ← SOMA Simulação do Funcionamento das Atribuições NOME ATRIBUTOS Inteiro, variável Real, variável Inteiro, variável Inteiro, variável A Valor Soma Resultado VALOR 14 10.5 5 5 Analisando a forma geral da atribuição: Identificador ← <Expressão> percebe-se que é possível construir expressões e atribuir a um nome. Por exemplo: A ← 14 + 10 Como essa instrução é executada? A ← 14 + 10 Avalia-se, em primeiro lugar, a “expressão” à direita do sinal de atribuição (←) 14 10 + A← 24 e em segundo lugar, o valor computado da expressão é atribuído ao identificador na TS. Como o valor associado ao nome pode mudar durante a “execução” do algoritmo (ou programa), usamos o termo variável. 11 Expressão pode ser: aritméticas, relacionais e lógicas. A.1.1) EXPRESSÕES ARITMÉTICAS São aquelas, que quando avaliadas, produzem resultados numéricos. Constituem na aplicação de operadores aritméticos a operandos que têm valores numéricos. Operadores Aritméticos: + * / (soma) (subtração) (multiplicação) (divisão com resultado decimal) Os operadores * / têm maior prioridade e os parênteses podem ser usados para alterar a prioridade. As Expressões Aritméticas podem ser definidas como: 1. Os números são expressões aritméticas; 2. Variáveis numéricas com valor atribuído são expressões aritméticas; 3. Se X e Y são expressões aritméticas, e se não há conflito de tipos, então: (X) X*Y X/Y X+Y X - Y são também expressões aritméticas. 4. Funções aritméticas são expressões aritméticas. Exercícios 1. Para o algoritmo abaixo, crie a tabela de símbolos e mostre os valores para cada variável. DECLARE S, R, T COMO INTEIRO S ← 10 R ←1 T←R+S S←T R←S 2. Para o algoritmo abaixo, crie a tabela de símbolos e mostre os valores para cada variável. DECLARE S, R, T COMO INTEIRO S ← 10 R ←1 R←R+1 12 R←R+1 R←R+1 R←R+1 R←R+1 R←R+1 R←S S ← R 3. Escreva algoritmos que resolvam as expressões matemáticas a seguir usando apenas operações de adição e subtração. a) 10 X 3 b) 25 X 7 c) 10 / 2 d) 15 / 5 A.1.2) EXPRESSÕES RELACIONAIS Expressões Relacionais são na verdade comparações; quando avaliadas produzem resultado Verdadeiro ou Falso. Como o resultado de uma expressão relacional é um valor lógico, logo ela é uma expressão lógica (como definida anteriormente). Operadores Relacionais: > >= < <= = <> ( maior que ) ( maior ou igual) ( menor que) ( menor ou igual) ( igual a ) ( não igual ) Expressões Relacionais podem ser definidas como: 1. Sendo A e B expressões aritméticas, então: A>B A >= B A<B A <= B A=B A <> B (A maior que B) (A maior ou igual a B) (A menor que B) (A menor ou igual a B) (A igual a B) (A não igual a B), são expressões relacionais. Atenção: Pela definição apresentada acima, onde os operandos de uma expressão relacional, são sempre expressões aritméticas, a expressão 5 > X > 1, não é válida ! A.1.3) EXPRESSÕES LÓGICAS (CONDIÇÕES) Expressões lógicas (ou condições) são composições de operandos e operadores lógicos. Operadores Lógicos: and ( e), or (ou), not (não) 13 Expressões Lógicas podem ser definidas como: 1. Variáveis lógicas com valor atribuído e constante lógica (verdade ou falso) são expressões lógicas; 2. Expressões Relacionais são expressões lógicas; 3. Sendo A e B expressões lógicas, então: (A) A and B A or B not A, são expressões lógicas. Resultado das operações Lógicas verdade Verdade verdade Falso falso AND falso falso falso verdade verdade verdade falso verdade OR falso verdade falso NOT verdade falso falso verdade A.1.3.1) NOÇÕES DE LÓGICA MATEMÁTICA CONCEITO DE PROPOSIÇÃO Proposição: sentenças declarativas afirmativas (expressão de uma linguagem) da qual tenha sentido afirmar que seja verdadeira ou que seja falsa. ¾ A lua é quadrada. ¾ A neve é branca ¾ Matemática é uma ciência. Não são objetos de estudo as sentenças interrogativas ou exclamativas. OS SÍMBOLOS DA LING. DO CÁLCULO PROPOSICIONAL Variáveis Proposicionais letras latinas minúsculas p, q, r, s, .... para indicar as proposições (fórmulas atômicas) . Exemplos: A lua é quadrada : p A neve é branca : q Matemática é uma ciência: r Conectivos Lógicos: As fórmulas atômicas podem ser combinadas entre si e, para representar tais combinações usaremos os conectivos lógicos: e , ou , não 14 Exemplos: A lua é quadrada e a neve é branca. : p e q A lua é quadrada ou a neve é branca. : p ou q A lua não é quadrada. : não p Obtendo o valor lógico 7+5>7 OU 2=1 Î Verdadeiro V F OU V 7+5>7 E V 2=1 Î Falso F NÃO( 2 = 1)Î Verdadeiro F E NÃO F V 15 A.1.4 ) PRIORIDADE ENTRE OS OPERADORES PRIORIDADE 0 1 2 3 4 5 6 7 8 OPERADORES Parênteses e Funções + e – (operadores unários) Potenciação *e/ + e – (soma e subtração) Operadores relacionais Não And Or A.1.5 ) EXERCÍCIOS RESOLVIDOS 1. Sendo p = verdade, q = falso, r = verdade, avalie as expressões abaixo: a) b) c) d) e) f) g) h) i) peq p ou r p ou q r ou (p e q) ou p (r ou r) e (p ou p) (p e r) ou (q e r) não (p e q) (não (p e r) ou (q e r)) (não p e não r) ou q 2. Suponha que A, B e C, I, J, K sejam variáveis. Dados A = 4.0, B = 6.0 e I = 3, qual seria o valor final dos comandos seguintes? a) C ← A * B – I b) K ← I / 4 * 2 c) C ← B / A + 1 C= _______ K = _______ C = _______ d) K ← ( B / A + 2) e) J ← ( A / ( 5 / I )) K = _______ J = _______ 3. Escreva o comando de atribuição para as expressões abaixo: a) a +1 b b c c) e d− f b) a+b c−d a+ d) a + b c−d 16 4. Encontre os erros dos seguintes comandos de atribuição. DECLARE A COMO LÓGICO DECLARE B, C COMO REAL DECLARE D COMO INTEIRO A←B=C D←B C+1←B+C C e B ← 3,5 5. Para o algoritmo abaixo monte a TS e indique que valores a variáveis assumirão: DECLARE A, B, C COMO INTEIRO A←0 B ← A + 10 C←B–1 A←1 B ← A + 10 C←B–1 6. Em quais dos seguintes pares é importante à ordem dos comandos? Em outras palavras, quando se muda a ordem dos comandos, os resultados finais se alteram? ( Supor X # Y # Z) a) X ← Y Y←Z Fazendo X ← Y e depois Y ← Z é o mesmo que Y ← Z e depois X ← Y ? Resolvendo: 1º caso: X ← Y e depois Y ← Z suponha X=1 Y =2 Z= 3 NOME X Y Z TIPO Inteiro Inteiro Inteiro VALOR 1 2 3 17 Fazendo X ← Y NOME X Y Z TIPO Inteiro Inteiro Inteiro VALOR 2 2 3 TIPO Inteiro Inteiro Inteiro VALOR 2 3 3 Fazendo Y ← Z NOME X Y Z Supondo X=1 Y =2 Z= 3 e fazendo X ← Y e depois Y ← Z, temos X=2, Y=3 e Z=3 2º caso : Y ← Z e depois X ← Y Supondo X=1 Y =2 Z= 3, porém invertendo os comandos (fazendo Y ← Z e depois X ← Y ) Resolvendo: suponha X=1 Y =2 Z= 3 NOME X Y Z TIPO Inteiro Inteiro Inteiro VALOR 1 2 3 TIPO Inteiro Inteiro Inteiro VALOR 1 3 3 TIPO Inteiro Inteiro Inteiro VALOR 3 3 3 Fazendo Y ← Z NOME X Y Z Fazendo X ← Y NOME X Y Z Supondo X=1 Y =2 Z= 3 e fazendo Y ← Z e depois X ← Y, temos X= Y= Z=3 Concluindo: mudar a ordem desses comandos produzirá resultado diferente. Faça os itens b, c, d 18 b) X ← Z X←Y c) X ← Y Z←X d) X ← Y Z←Y 7. Uma conta telefônica é composta dos seguintes custos: assinatura: R$ 32,00 impulsos: R$ 0,09 por impulso que exceder a 90 chamadas p/ celular: R$0,35 por impulso Monte a fórmula para calcular o valor da conta para 254 impulsos e 23 chamadas para celular. Elabore um algoritmo que calcula o valor total. 8. Um eletricista precisa comprar fio que irá passar, pelo telhado, por toda a diagonal de uma casa de formato retangular. Como ele não tem condições de medir a diagonal com precisão, a solução alternativa que ele encontrou foi medir os lados da casa, sabendo que a diagonal pode ser calculada com base nos lados pelo Teorema de Pitágoras (a2 = b2 + c2). Considerando que a casa mede 11,5 x 6,3 metros, faça um algoritmo que calcule a quantidade mínima necessária de fio a ser comprada. 9. Um professor atribui pesos de 1 a 4 para as notas de quatro avaliações. A nota é calculada por meio da média ponderada (N1 + N2*2 + N3*3 + N4*4)/10, onde N1 é a nota da primeira avaliação, N2 a da segunda, etc..Um aluno tirou as seguintes notas: 8 - 7,5 - 10 - 9. Faça um algoritmo que calcula a média deste aluno. 19 A.2) OPERAÇÕES DE ENTRADA E SAÍDA DE DADOS As unidades de entrada e saída de dados são dispositivos que possibilitam a comunicação entre o usuário e o computador. Através delas, o usuário consegue fornecer dados (entrada de dados) para que a máquina possa processar, assim como, obtém resultados (saída de dados) do processamento. As operações de entrada e saída permitem escrever algoritmos mais genéricos. A utilização dessas unidades é representada nos algoritmos pelos passos de leitura e escrita. A.2.1) LEITURA Forma Geral: LEIA <lista de variáveis> Exemplo 1: LEIA A Simulação do Funcionamento da Leitura Obtém do meio externo, a informação disponível para a leitura. A forma como é feita a leitura depende de como os dados estão organizados. ENTRADA DE DADOS: 32 LEIA A e armazena na(s) variável(eis) definida. NOME A TIPO INTEIRO VALOR 32 A leitura é uma atribuição cujos valores estão externos ao algoritmo. Exemplo 2: 20 ENTRADA DE DADOS: 32 45 60 LEIA A, B, C Resultado da leitura: Valores lidos (32, 45, e 60) armazenados nas variáveis A, B, C (na TS) respectivamente. NOME ATRIBUTOS Inteiro Inteiro Inteiro A B C VALOR 32 45 60 Exemplo 3 : ENTRADA DE DADOS: 32 60 45 LEIA A, LEIA C B Resultado da leitura: Valores lidos (32, 45, e 60) armazenados nas variáveis A, B, C (na TS) respectivamente. Exemplo 4 : ENTRADA DE DADOS: 32 45 60 LEIA A LEIA B LEIA C Valores lidos (32, 45, e 60) armazenados nas variáveis A, B, C (na TS) respectivamente. 21 Exemplo 5 : ENTRADA DE DADOS: 32 60 45 LEIA A LEIA B LEIA C Resultado da leitura: Valores lidos (32, 60, e 45) armazenados nas variáveis A, B, C (na TS) respectivamente Exemplo 6 : ENTRADA DE DADOS: 32 60 LEIA A LEIA B LEIA C (não há definição de dado p/ C) Resultado da leitura: Valores lidos (32, 60) armazenados nas variáveis A, B respectivamente, porém como não há especificação de dado para C, um erro de leitura de dados ocorre. 22 A.2.2) ESCRITA Forma Geral: ESCREVA <lista de variáveis> Imprime no dispositivo de saída (vídeo, impressora, etc.) o conteúdo da(s) variável(eis) especificadas. Textos explicativos podem também ser impressos e intercalados com as variáveis. Exemplo: ESCREVA A,B,C NOME A B C ATRIBUTOS Inteiro Inteiro Inteiro Lista de variáveis VALOR 32 45 60 32 45 60 Resultado da Escrita: Os valores contidos em A, B, C (na TS) são exibidos (vídeo, impressora, etc.) na mesma linha. ESCREVA A ESCREVA B ESCREVA C NOME A B C ATRIBUTOS Inteiro Inteiro Inteiro VALOR 32 45 60 32 45 60 Resultado da Escrita: Os valores contidos em A, B, C (na TS) são exibidos (vídeo, impressora, etc.), porém cada instrução ESCREVA produz uma linha na saída. 23 É possível utilizar mensagens no comando ESCREVA. ESCREVA ‘VALOR =’, A NOME A B C ATRIBUTOS Inteiro Inteiro Inteiro VALOR 32 45 60 VALOR = 32 Resultado da Escrita: O valor contido em A (na TS) é exibido (vídeo, impressora, etc.), juntamente com a mensagem “VALOR =” . ESCREVA ‘A =’, A NOME A B C ATRIBUTOS Inteiro Inteiro Inteiro VALOR 32 45 60 A = 32 Resultado da Escrita: O valor contido em A (na TS) é exibido (vídeo, impressora, etc.), juntamente com a mensagem “A =” . ESCREVA ‘A =’, A, ‘B =’,B NOME A B C ATRIBUTOS Inteiro Inteiro Inteiro VALOR 32 45 60 A = 32 B= 45 Resultado da Escrita: O valor contido em A e B (na TS) são exibidos (vídeo, impressora, etc.), juntamente com a mensagem “A =” e ‘B=’ respectivamente, na mesma linha. ESCREVA ‘A =’, A, ‘B =’, B ESCREVA ‘C =’, C 24 NOME A B C ATRIBUTOS Inteiro Inteiro Inteiro VALOR 32 45 60 A = 32 B= 45 C = 60 Resultado da Escrita: O valor contido em A e B (na TS) são exibidos (vídeo, impressora, etc.), juntamente com a mensagem “A =” e ‘B=’ respectivamente, na mesma linha e o valor de C é apresentado em uma nova linha juntamente com sua mensagem. ESCREVA ‘A =’, A ESCREVA ‘B =’, B ESCREVA ‘C =’, C NOME A B C ATRIBUTOS Inteiro Inteiro Inteiro VALOR 32 45 60 A = 32 B = 45 C = 60 Resultado da Escrita: O valor contido em A, B e C (na TS) são exibidos (vídeo, impressora, etc.), juntamente com as suas respectivas mensagens cada um em sua linha. A instrução escreva pode ser usada para escrever mensagens, sem a utilização de variáveis. ESCREVA ‘DADOS INVALIDOS’ DADOS INVALIDOS’ 25 A.3) EXEMPLOS DE ALGORITMOS 1) Leia um valor inteiro e escreva um algoritmo para escrevê-lo. Cria a área que armazenará o valor a ser lido DECLARE A COMO INTEIRO LEIA A ESCREVA ‘O VALOR LIDO = ‘, A Escreve o valor lido, acompanhado de uma mensagem Lê da entrada de dados o valor Simulação do algoritmo DECLARE A COMO INTEIRO NOME A TIPO INTEIRO VALOR LEIA A Lê um valor da entrada de dados. Para testar o algoritmo é válido utilizar valores numéricos aleatórios, porém, o algoritmo deve funcionar para qualquer valor. entrada de dados: 80 LEIA A e armazena na variável definida. NOME TIPO INTEIRO A VALOR 80 ESCREVA ‘O VALOR LIDO = ‘, A NOME A ATRIBUTOS Inteiro VALOR 80 O VALOR LIDO = 80 26 2) Leia dois valores e escreva um algoritmo para escrevê-los. Cria as variáveis que armazenarão os valores lidos DECLARE A, B COMO INTEIRO LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA B ESCREVA ‘O VALOR LIDO = ‘, B Lê da entrada de dados o primeiro valor Escreve o primeiro valor lido, acompanhado de uma mensagem Lê da entrada de dados o segundo valor Escreve o segundo valor lido, acompanhado de uma mensagem Simulação do algoritmo DECLARE A, B COMO INTEIRO NOME A B TIPO INTEIRO INTEIRO VALOR LEIA A Lê um valor da entrada de dados. Para testar o algoritmo é válido utilizar valores numéricos aleatórios, porém, o algoritmo deve funcionar para qualquer valor inteiro lido. Observe que dois valores são colocados na entrada de dados ( 78 e 65 ), um em cada linha. entrada de dados: 78 65 LEIA A e armazena na variável definida. NOME A B TIPO INTEIRO INTEIRO VALOR 78 27 ESCREVA ‘O VALOR LIDO = ‘, A NOME A B TIPO INTEIRO INTEIRO VALOR 78 O VALOR LIDO = 78 LEIA B Lê um valor da entrada de dados. Observe que o segundo valor será lido, o primeiro já foi utilizado pela primeira leitura. entrada de dados: 65 LEIA B e armazena na variável definida. NOME A B TIPO INTEIRO INTEIRO VALOR 78 65 ESCREVA ‘O VALOR LIDO = ‘, B NOME A B TIPO INTEIRO INTEIRO VALOR 78 65 O VALOR LIDO = 78 O VALOR LIDO = 65 28 3) Leia dois valores e escreva um algoritmo para escrevê-los (variação da solução do exercício anterior). A modificação aqui apresentada está na utilização de apenas uma variável que armazenará os valores lidos. Anteriormente os dois valores eram lidos através de duas variáveis ( A e B ). Isso pode ser feito pelo seguinte motivo: após a escrita do valor contido em A, não há necessidade de conservar esse valor em A, podendo ser substituído por outro. Cria a variável que armazenará os valores lidos DECLARE A COMO INTEIRO LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A Lê da entrada de dados o primeiro valor Escreve o primeiro valor lido, acompanhado de uma mensagem Lê da entrada de dados o segundo valor Escreve o segundo valor lido, acompanhado de uma mensagem Simulação do algoritmo DECLARE A COMO INTEIRO NOME A TIPO INTEIRO VALOR LEIA A Lê um valor da entrada de dados. Observe que dois valores são colocados na entrada de dados ( 78 e 65 ) entrada de dados: 78 65 LEIA A e armazena na variável definida. NOME A TIPO INTEIRO VALOR 78 29 ESCREVA ‘O VALOR LIDO = ‘, A NOME A TIPO INTEIRO VALOR 78 O VALOR LIDO = 78 LEIA A Lê um valor da entrada de dados. Observe que o segundo valor será lido, o primeiro já foi utilizado pela primeira leitura. entrada de dados: 65 LEIA A e armazena na variável definida. Observe que o valor armazenado em A ( 78 ) é “perdido”, substituído pelo novo valor obtido através da leitura. NOME A TIPO INTEIRO VALOR 65 ESCREVA ‘O VALOR LIDO = ‘, A NOME A TIPO INTEIRO VALOR 65 O VALOR LIDO = 78 O VALOR LIDO = 65 30 4) Leia dois valores inteiros e calcule a soma. Cria as áreas (V1, V2) que armazenarão os valores a serem lidos. E a área que armazenará a soma (RESULTADO) Lê da entrada de dados os valores que serão somados DECLARE V1, V2, RESULTADO COMO INTEIRO LEIA V1, V2 RESULTADO ← V1 + V2 ESCREVA ‘ VALORES LIDOS =’, V1, V2 ESCREVA ‘A SOMA DOS VALORES = ‘, RESULTADO Cria a atribuição, onde a expressão é justamente a soma entre os dois valores lidos, representados por V1 e V2 e quando avaliada a expressão o valor resultante será armazenado em RESULTADO Escreve os valores lidos, acompanhados de uma mensagem Escreve a soma (RESULTADO) calculada Simulação do algoritmo DECLARE V1, V2, RESULTADO COMO INTEIRO NOME V1 V2 RESULTADO TIPO INTEIRO INTEIRO INTEIRO VALOR LEIA V1, V2 Lê dois valores da entrada de dados. Para testar o algoritmo utilizamos dois valores numéricos aleatórios, porém, o algoritmo deve funcionar para qualquer valor. entrada de dados: 3 5 LEIA V1, V2 e armazena na variável definida. 31 NOME V1 V2 RESULTADO TIPO INTEIRO INTEIRO INTEIRO VALOR 3 5 RESULTADO ← V1 + V2 Avalia-se, em primeiro lugar, a “expressão” à direita do sinal de atribuição (←); V1 V2 3 5 + RESULTADO ← 8 e em segundo lugar, o valor computado da expressão é atribuído ao identificador. NOME V1 V2 RESULTADO TIPO INTEIRO INTEIRO INTEIRO VALOR 3 5 8 ESCREVA ‘ VALORES LIDOS =’, V1, V2 NOME V1 V2 RESULTADO TIPO INTEIRO INTEIRO INTEIRO VALOR 3 5 8 VALORES LIDOS = 3 5 32 ESCREVA ‘A SOMA DOS VALORES = ‘, RESULTADO NOME V1 V2 RESULTADO TIPO INTEIRO INTEIRO INTEIRO VALOR 3 5 8 VALORES LIDOS = 3 5 A SOMA DOS VALORES = 8 5) Leia dois valores inteiros e calcule a soma (variação da solução do exercício anterior). DECLARE V1, V2, RESULTADO COMO INTEIRO LEIA V1 LEIA V2 RESULTADO ← V1 + V2 ESCREVA ‘ VALORES LIDOS =’, V1, V2 ESCREVA ‘A SOMA DOS VALORES = ‘, RESULTADO A modificação aqui apresentada está na maneira como os valores são agora lidos. Anteriormente os dois valores eram lidos através de uma única leitura ( LEIA V1, V2 ). Nessa versão cada valor é lido através de uma leitura, isso provoca alteração na maneira de organizar os dados na entrada de dados. ANTES: os dados eram colocados na mesma linha ( uma leitura ) Entrada de dados: 3 5 LEIA V1, V2 AGORA: cada dado é colocado em uma linha ( duas leituras → duas linhas ) Entrada de dados: 3 5 33 Entrada de dados: 3 LEIA V1 5 LEIA V2 6) Leia dois valores inteiros e calcule a soma (variação da solução do exercício anterior). DECLARE V1, V2, RESULTADO COMO INTEIRO LEIA V1 LEIA V2 RESULTADO ← V1 + V2 ESCREVA ‘ PRIMEIRO VALOR LIDO =’, V1 ESCREVA ‘ SEGUNDO VALOR LIDO =’, V2 ESCREVA ‘A SOMA DOS VALORES = ‘, RESULTADO A modificação aqui apresentada está na maneira como os valores são agora escritos. Anteriormente os dois valores eram escritos através de uma única escrita (ESCREVA ‘ VALORES LIDOS =’, V1, V2). Nessa versão cada valor é apresentado através de uma escrita, isso provoca alteração na maneira de apresentar os dados na saída. ANTES ESCREVA ‘ VALORES LIDOS =’, V1, V2 NOME V1 V2 RESULTADO TIPO INTEIRO INTEIRO INTEIRO VALOR 3 5 8 VALORES LIDOS = 3 5 34 AGORA ESCREVA ‘ PRIMEIRO VALOR LIDO =’, V1 NOME V1 V2 RESULTADO TIPO INTEIRO INTEIRO INTEIRO VALOR 3 5 8 PRIMEIRO VALOR LIDO = 3 ESCREVA ‘ SEGUNDO VALOR LIDO =’, V2 NOME V1 V2 RESULTADO TIPO INTEIRO INTEIRO INTEIRO VALOR 3 5 8 PRIMEIRO VALOR LIDO = 3 SEGUNDO VALOR LIDO = 8 7) Escreva um algoritmo para calcular a área de um círculo, onde o valor do raio é lido. Etapas para construção do algoritmo: 1- criar as variáveis; 2- calcular a área utilizando a fórmula: área = π * raio2, onde π = 3.1415 3- apresentar a área calculada. Solução: DECLARE RAIO, AREA COMO REAIS LEIA RAIO AREA ← 3.1415 * RAIO * RAIO ESCREVA AREA Variação da Solução A solução acima pode ser alterada criando um nome ( PI ) que conterá o valor de π. DECLARE RAIO, AREA, PI COMO REAIS 35 LEIA RAIO PI ← 3.1415 AREA ← PI * RAIO * RAIO ESCREVA AREA A.4) EXERCÍCIOS PROPOSTOS 1. Como deveria estar organizados os dados, na entrada de dados, se no algoritmo as leituras fossem: a) LEIA K, MM, T LEIA Y, I b) LEIA J LEIA T, O c) LEIA NOME, SEXO, SALARIO d) LEIA A LEIA A e) LEIA A, B LEIA C LEIA A,B 2. Como seriam impressos os dados, na saída de dados, se no algoritmo as impressões fossem: a) ESCREVA A ESCREVA B b) ESCREVA ‘NAO SEI’ c) ESCREVA A, B, C 3. Com base nos dados abaixo, qual o valor final de cada variável: a) LEIA K, MM, T LEIA Y, I ENTRADA DE DADOS: 1 2 3 4 56 b) LEIA J LEIA T, O, R ENTRADA DE DADOS: 1 2 3 4 567 c) LEIA NOME, SEXO, SALARIO ENTRADA DE DADOS: 1 2 3 4 5 d) LEIA A LEIA A ENTRADA DE DADOS: 1 2 3 4 f) LEIA A ENTRADA DE DADOS: 1 36 LEIA A LEIA A, B 2 3 4 g) LEIA A, B LEIA A LEIA A, B LEIA A,B ENTRADA DE DADOS: 1 5 2 3 4 1 5 4. Simular a execução do seguinte algoritmo, como os valores de entrada apresentados abaixo: DECLARE A, B, C COMO INTEIROS DECLARE MEDIA COMO REAL LEIA A, B, C ESCREVA A, B, C MEDIA ← ( A + B + C ) /3 ESCREVA MEDIA LEIA A, B, C ESCREVA A, B, C MEDIA ← ( A + B + C ) /3 ESCREVA MEDIA ENTRADA 4 2 6 10 6 0 7 8 7 5. Escreva um algoritmo que leia uma temperatura em graus Celsius e converta para graus Fahrenheit, cuja fórmula de conversão é: ( 9 * graus Celsius + 160 ) /5. 6. Escreva um algoritmo que leia uma temperatura em graus Fahrenheit e converta para graus Celsius, cuja fórmula de conversão é: ( graus Fahrenheit – 32) * (5/9). 7. Escreva um algoritmo que leia três valores, representando o comprimento, largura e altura de uma caixa retangular e calcule o seu volume, cuja fórmula é: VOLUME = COMPRIMENTO * LARGURA * ALTURA 8. Escreva um algoritmo que leia dois valores A e B, e efetue a troca dos valores de forma que A passe a possuir o valor de B e B passa a possuir o valor de A. Apresente os valores antes e depois da troca. 9. Escreva um algoritmo que leia dois valores PRESTAÇÂO e TAXA, representando o valor de uma prestação e a taxa de juros cobrada pelo atraso. Calcule a prestação atrasada pela fórmula: ATRASO = PRESTAÇÂO + ( PRESTAÇÂO * TAXA /100). 10. Escreva um algoritmo que leia dois valores, representando o raio e altura de uma lata e calcule o seu volume, cuja fórmula é: VOLUME = 3.1415 * RAIO2 * ALTURA 11. Escreva um algoritmo para ler, calcular e escrever a média aritmética entre quatro números. 12. Escrever um algoritmo que lê 3 valores a, b, c que são lados de um triângulo e calcule a área deste triângulo. s( s − a )( s − b )( s − c ) , onde S = (A+B+C)/2 37 13. O custo ao consumidor de um carro novo é a soma do custo de fábrica com a percentagem do distribuidor e dos impostos ( aplicados ao custo de fábrica). Supondo que a percentagem do distribuidor seja de 12% e os impostos de 45%, escrever um algoritmo para ler o custo de fábrica do carro e escrever o custo ao consumidor. 14. Num curso, a nota final de um estudante é calculada a partir de seu desempenho em três aspectos. Existe um exame que vale 30% da nota final, nota de trabalho que vale 20% da nota final e o exame final que vale 50% da nota final. Escreva um algoritmo que leia as três notas de um aluno e calcule sua nota final. 15. Escreva um algoritmo que calcule o valor da conversão em dólar de um valor lido em real. O algoritmo deverá ler o valor da cotação do dólar e a quantidade de reais. 16. Escreva um algoritmo que dados os litros gastos, os quilômetros percorridos por um automóvel e o valor do litro de combustível, calcule os gastos de combustível em Reais/km. 17. Escreva um algoritmo para ler o número de eleitores de um município, o número de votos brancos, nulos e válidos. Calcular e escrever o percentual que cada um representa em relação ao total de eleitores. 18. Escreva um algoritmo para ler o salário mensal de um funcionário e o percentual de reajuste. Calcular e escrever o valor do novo salário. 19. Uma revendedora de carros usados, paga a seus funcionários vendedores, um salário fixo por mês, mais uma comissão também fixa para cada carro vendido e mais 5% do valor das vendas por ele efetuadas. Escrever um algoritmo que leia o número de carros por ele vendidos, o valor total de suas vendas, o salário fixo e a comissão que recebe por carro vendido. Escreva um algoritmo que calcule e escreva o salário mensal do vendedor. 20. Escreva um algoritmo que leia dois lados de um triângulo retângulo e calcula a hipotenusa. 21. Uma criança quer saber qual é a soma de todas as idades que ela já teve. Elaborar algoritmo que lê uma idade qualquer e responde rapidamente a essa pergunta [fórmula para calcular a soma dos N primeiros números inteiros: N (N+1)/2]. 22. Uma conta telefônica é composta dos seguintes custos: assinatura: R$ 21,40 impulsos: R$ 0,03 por impulso que exceder a 90 interurbanos chamadas p/ celular: R$0,40 por impulso elabore um algoritmo que lê os impulsos excedentes, valor de interurbanos e quantidade de chamadas para celular e calcula o valor da conta. B) SELEÇÃO Também chamada de estrutura de decisão, a seleção é utilizada quando a execução de uma seqüência de passos depende do valor de uma condição (trechos alternativos que são ou não processados de acordo com o resultado da condição). A seleção pode ser de um ramo ou de dois ramos. 38 B.1) SELEÇÃO DE UM RAMO É utilizada quando uma seqüência de passos depender de uma condição verdadeira, e não há seqüência a executar ser executada quando a condição for falsa. Forma geral: SE <condição> ENTÃO <seqüência de passos> FIM-SE Esquema de Funcionamento da Seleção de um Ramo Exemplo: 1) Escreva um algoritmo que leia um valor e escreva-o caso seja maior que 10. DECLARE A COMO INTEIRO LEIA A SE A > 10 ENTÃO ESCREVA A FIM-SE A > 10 ? SIM ESCREVA A NÃO Simulação do algoritmo DECLARE A COMO INTEIRO NOME A TIPO INTEIRO VALOR 39 LEIA A Lê um valor da entrada de dados. entrada de dados: 78 LEIA A e armazena na variável definida. NOME A TIPO INTEIRO VALOR 78 SE A > 10 ENTÃO verifica se o valor contido em A é maior que 10, caso seja verdadeiro executa os comandos contidos na seleção, neste caso: ESCREVA A. Caso contrário ignora os comandos contidos na seleção. B.2) SELEÇÃO DE DOIS RAMOS Utiliza-se quando se deseja executar uma seqüência de passos se uma condição é verdadeira, e se executa uma outra seqüência se a condição é falsa. Forma geral: SE <condição> ENTÃO <seqüência de passos1> SENÃO <seqüência de passos2> FIM-SE Esquema de Funcionamento da Seleção de dois Ramos 40 Exemplo: 1) Escreva um algoritmo que leia um valor e escreva-o indicando se ele é maior ou igual a 10 e menor que 10. DECLARE A COMO INTEIRO LEIA A SE A >= 10 ENTÃO ESCREVA 'VALOR MAIOR OU IGUAL A 10' , A SENÃO ESCREVA 'VALOR MENOR QUE 10' , A FIM-SE NÃO A >= 10 ? ESCREVA 'VALOR MENOR QUE 10' , A SIM ESCREVA 'VALOR MAIOR OU IGUAL A 10', A 41 B.3) EXEMPLOS DE ALGORITMOS 1) Faça um algoritmo que leia um numero inteiro e o imprima se ele for menor que 5. DECLARE NUMERO COMO INTEIRO LEIA NUMERO SE (NUMERO < 5 ) ENTÃO ESCREVA NUMERO FIM-SE 2) Elaborar um algoritmo que lê uma nota e indique a situação do aluno. Se a nota obtida for de 6 a 10, aprovado; caso contrário, reprovado. DECLARE NOTA COMO INTEIRO LEIA NOTA SE (NOTA < 6 ) ENTÃO ESCREVA ‘ALUNO REPROVADO’ SENÂO ESCREVA ‘ALUNO APROVADO’ FIM-SE 3) Elaborar um algoritmo que lê uma nota e indique a situação do aluno. Se a nota obtida for de 6 a 10, aprovado; se 4 ou 5.9 vs e menor que 4 reprovado. DECLARE NOTA COMO INTEIRO LEIA NOTA SE (NOTA > 6 ) ENTÃO ESCREVA ‘ALUNO APROVADO’ SENÂO SE ( ( NOTA < 6 ) E ( NOTA >= 4) ENTÃO ESCREVA ‘ALUNO EM VS’ SENÂO ESCREVA ‘ALUNO REPROVADO’ FIM_SE FIM-SE 4) Faça um algoritmo que leia dois números inteiros e descubra o maior. DECLARE VALOR1, VALOR2 COMO INTEIRO LEIA VALOR1, VALOR2 SE VALOR1> VALOR2 ENTÃO ESCREVA VALOR1 SENÃO ESCREVA VALOR2 FIM-SE 42 Variação da solução DECLARE VALOR1, VALOR2, MAIOR COMO INTEIRO LEIA VALOR1, VALOR2 SE VALOR1> VALOR2 ENTÃO MAIOR← VALOR1 SENÃO MAIOR← VALOR2 FIM-SE ESCREVA MAIOR 5) Faça um algoritmo que obtenha três números reais e informe o maior deles. DECLARE NUMA, NUMB, NUMC, MAIOR COMO REAL LEIA (NUMA, NUMB, NUMC SE NUMA > NUMB ENTÃO MAIOR ← NUMA SENÃO MAIOR ← NUMB FIM-SE SE NUNC > MAIOR ENTÃO MAIOR ←NUMC FIM-SE ESCREVA MAIOR Variação da solução DECLARE NUMA, NUMB, NUMC, MAIOR COMO REAL LEIA NUMA, NUMB, NUMC SE ((NUMA > NUMB) and (NUMA > NUMC)) ENTÃO MAIOR ← NUMA SENÃO SE ((NUMB > NUMA) and (NUMB > NUMC)) ENTÃO MAIOR ← NUMB SENÃO MAIOR ← NUMC FIM-SE FIM-SE ESCREVA MAIOR 43 Aninhamentos Um aninhamento é o fato de se ter qualquer uma seleção dentro de outra seleção. Para que o aninhamento esteja correto é necessário que a construção interna esteja completamente embutida na construção externa. Exemplo: Aninhamento correto SE < condição 1 > ENTÃO SE < condição 2 > ENTÃO SE < condição 3 > ENTÃO <seqüência de passos 3 > SENÃO <seqüência de passos 4 > FIM-SE SENÃO SE < condição 4 > ENTÃO <seqüência de passos 5 > SENÃO SE < condição 5 > ENTÃO <seqüência de passos 6 > SENÃO <seqüência de passos 7 > FIM-SE FIM-SE FIM-SE SENÃO SE < condição 6 > ENTÃO <seqüência de passos 8 > SENÃO SE < condição 7 > ENTÃO <seqüência de passos 9 > SENÃO SE < condição 8 > ENTÃO <seqüência de passos 10 > SENÃO <seqüência de passos 11 > FIM-SE FIM-SE FIM-SE FIM-SE 44 Aninhamento incorreto SE < condição 1 > ENTÃO SE < condição 2 > ENTÃO SE < condição 3 > ENTÃO < seqüência de passos 3 > SENÃO <seqüência de passos 4 > SENÃO SE < condição 4 > ENTÃO <seqüência de passos 5 > SENÃO SE < condição 5 > ENTÃO Aninhamento <seqüência de passos 6 > errado. SENÃO Observe as <seqüência de passos 7 > linhas se FIM-SE cruzando FIM-SE FIM-SE FIM-SE FIM-SE O FIM-SE que deveria estar nessa posição e foi colocado erradamente em outra posição 1) Fazer um algoritmo que leia três valores inteiros, distintos entre si, determine e imprima o menor deles: DECLARE A,B,C, MENOR COMO INTEIRO LEIA A, B,C determine o menor número ESCREVA MENOR SE A<B e A<C ENTÃO MENOR ←A SENÃO determine o menor dentre B e C FIM-SE SE B < C ENTÃO MENOR ← B SENÃO MENOR ←C FIM-SE 45 2) Dados três valores inteiros X,Y,Z, verificar se eles podem ser os comprimentos dos lados de um triângulo e, se forem , verificar se é um triângulo eqüilátero, isósceles ou escalenos. Se eles não formarem um triângulo, escrever uma mensagem. Sabe-se que o comprimento de cada lado de um triângulo é menor do que a soma dos comprimentos dos outros dois lados. DECLARE X,Y,Z COMO INTEIRO LEIA X,Y,Z SE ((X<Y+Z) e (Y <X+Z) e (Z<X+Y)) ENTÃO verifique o tipo do triângulo SENÃO Escreva ‘Não Existe Triângulo’ FIM-SE SE X=Y E X = Z ENTÃO ESCREVA ‘TRIANG. QUILATERO’ SENÃO Verifique se ele é escaleno ou isóscele FIM-SE SE X=Y OU X = Z OU Y = Z ENTÃO ESCREVA ‘TRIANG. ISOSCELES’ SENÃO ESCREVA ‘TRIANG. ISCALENO’ FIM-SE 3) Dados três valores distintos, coloca-los em ordem crescente: DECLARE L, M, N, AUXILIAR COMO INTEIRO LEIA L, M, N Armazene em L o menor valor Armazene em M o valor intermediário e em N o maior valor ESCREVA L,M,N SE M > N ENTÃO AUXILIAR – M M←N N ← AUXILIAR FIM-SE AUXILIAR ← L L←M M ←AUXILIAR AUXILIAR ← L L←N N ← AUXILIAR SE L > M ou L > N ENTÃO SE M < N ENTÃO troque L com M SENÃO troque L com N FIM-SE FIM-SE 46 B.4) EXERCÍCIOS PROPOSTOS 1. Escreva um algoritmo que leia um valor verifique se ele se encontra no intervalo entre (5 ,20]. 2. Elaborar um algoritmo que leia uma letra que pode ser ‘F’ ou ‘J’ e mostra a mensagem “pessoa física”, “pessoa jurídica” ou "tipo de pessoa inválido", conforme o caso. 3. Elaborar um algoritmo que lê 2 valores a e b e os escreve com a mensagem: ‘São múltiplos’ ou ‘Não são múltiplos’. 4. Tendo como dados de entrada a altura e o sexo de uma pessoa (‘M’ masculino e ‘F’ feminino), construa um algoritmo que calcule seu peso ideal, utilizando as seguintes fórmulas: - para homens: (72.7*h)-58 - para mulheres: (62.1*h)-44.7 5. Um banco concederá um crédito especial aos seus clientes, variável com o saldo médio no último ano. Faça um algoritmo que leia o saldo médio de um cliente e calcule o valor do crédito de acordo com a tabela abaixo. Mostre uma mensagem informando o saldo médio e o valor do crédito. Saldo médio Percentual de 0 a 500 nenhum crédito de 501 a 1000 20% do valor do saldo médio de 1001 a 1600 30% do valor do saldo médio acima de 1601 40% do valor do saldo médio 6. Elabore um algoritmo que lê um número que representa uma senha, verifica se a senha está correta ou não, comparando-a com a senha 34567, e informa "Acesso autorizado" ou "Acesso negado", conforme o caso. 7. O departamento que controla o índice de poluição do meio ambiente mantém 3 grupos de indústrias que são altamente poluentes do meio ambiente. O índice de poluição aceitável varia de 0,05 até 0,25. Se o índice sobe para 0,3 as indústrias do 1o grupo são intimadas a suspenderem suas atividades, se o índice cresce para 0,4 as do 1o e 2o grupo são intimadas a suspenderem suas atividades e se o índice atingir 0,5 todos os 3 grupos devem ser notificados a paralisarem suas atividades. Escrever um algoritmo que lê o índice de poluição medido e emite a notificação adequada aos diferentes grupos de empresas. 8. Um sistema de equações lineares da forma : Ax + By = C Dx + Ey = F pode ser resolvido utilizando-se as seguintes fórmulas. EC - BF X = -----------------AE - BD e AF - CD Y = --------------------------AE - BD 47 Escreva um algoritmo para ler o conjunto de coeficientes (A, B, C, D, E, F) e imprimir a solução, ou seja, X e Y. Verifique as situações onde X e Y não podem ser determinados. 9. Elaborar um algoritmo que lê uma altura e mostra uma mensagem conforme a faixa de altura: menos que 1,60 de 1,60 a 1,85 mais que 1,85 “baixa estatura” “estatura normal” “alta estatura” 10.Uma faculdade atribui menções aos alunos conforme a faixa de notas que tenha atingido: 9,0 a 10: SS (superior) 7,0 a 8,9: MS (médio superior) 5, 0 a 6,9: MM (médio) 3,0 a 4,9: MI (médio inferior) 0,1 a 2,9: II (inferior) 0: SR (sem rendimento). Faça um algoritmo que lê a nota e informa a menção. 11.Um imposto é calculado com base na seguinte tabela: Até 1.200,00 de 1.201,00 a 2.500,00 de 2.501,00 a 5.000,00 acima de 5.000,00 isento 10% 15% 20%. Escreva um algoritmo que leia o valor base e calcule o imposto a pagar. 12.Faça um algoritmo que leia as 3 notas de um aluno e calcule a média final deste aluno. Considerar que a média é ponderada e que o peso das notas é: 2,3 e 5, respectivamente. Se a nota obtida for de 6 a 10, aprovado; se 4 ou 5.9, vs e menor que 4 reprovado. 13.Um ano é bissexto se for divisível por 4 exceto os séculos, que são bissextos se forem múltiplos de 400. Escreva um algoritmo que determina se um ano é bissexto. 14.Escrever um algoritmo que lê três valores representado o dia, mês e ano de uma data e verifica se ela está correta. Supor que o mês de fevereiro tem 29 dias. 15.Escrever um algoritmo que lê um valor em reais e calcula qual o menor número possível de notas de 100, 50, 10, 5 e 1 em que o valor lido pode ser decomposto. Escrever o valor lido e a relação de notas necessárias. 16.Dadas 8 bolas tendo uma deles peso diferente das demais. Dizer qual é essa bola e se ela é mais pesada ou mais leve que as outras e qual o seu peso. Imprimir também o peso de todas as bolas. 48 C) OPERAÇÕES DE REPETIÇÃO 1) Leia 5 valores e escreva um algoritmo para escrevê-los. O algoritmo é construído criando apenas uma variável cujos valores são lidos, escritos e descartados pela leitura do próximo valor. DECLARE A COMO INTEIRO LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A ENTRADA DE DADOS 17 34 1 23 78 O problema com a solução anterior, é que se a quantidade de valores a serem lidos crescer, o número de passos do algoritmo também crescerá. Por exemplo: Leia 10 valores e escreva um algoritmo para escrevê-los. DECLARE A COMO INTEIRO ENTRADA DE DADOS LEIA A 17 ESCREVA ‘O VALOR LIDO = ‘, A 34 LEIA A 1 ESCREVA ‘O VALOR LIDO = ‘, A 23 LEIA A 78 ESCREVA ‘O VALOR LIDO = ‘, A 90 LEIA A 2 ESCREVA ‘O VALOR LIDO = ‘, A 5 LEIA A 8 ESCREVA ‘O VALOR LIDO = ‘, A 15 LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A Observe no algoritmo anterior que um conjunto de passos se repete várias vezes: 49 DECLARE A COMO INTEIRO LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A Quando isso acontecer, isso é, uma seqüência de passos repetida, podemos utilizar as estruturas de repetição, que podem ser de 2 tipos: Número conhecido de repetição e número não conhecido de repetição. C.2) NÚMERO CONHECIDO DE REPETIÇÕES Essa estrutura de repetição é utilizada quando se conhece exatamente o número de vezes que a seqüência será repetida. Forma geral: REPETIR <especificação de vezes> <seqüência de passos a ser repetida > FIM-REPETIR No exemplo anterior, colocamos a seqüência de passos a ser repetida dentro da repetição: DECLARE A COMO INTEIRO REPETIR <especificação de vezes> LEIA A ESCREVA ‘O VALOR LIDO = ‘, A CORPO DA REPETIÇÃO FIM-REPETIR e especificamos o número de vezes que a seqüência deverá ser repetida: <especificação de vezes> <incremento> <variável> = < valor inicial >, <valor final>, 50 < variável > é um identificador ( nome ) que deve ser criado pelo programador. Essa variável também é chamada de controle de repetição. < valor inicial > é um valor inteiro. É o primeiro valor que a variável de controle de repetição assumirá. < valor final > é um valor inteiro. É o valor limite que a variável de controle de repetição assumirá. <incremento> é um valor inteiro. É valor que será adicionado ao valor variável de controle de repetição. Exemplos: a) I = 1, 10, 1 valores de I = 1 2 3 4 5 6 7 8 9 10 Quantidade de valores de I ( 10 valores ), logo uma repetição seria executada 10 vezes. b) I = 10, 20, 1 valores de I = 10 11 12 13 14 15 16 17 18 19 20 Quantidade de valores de I ( 11 valores ), logo uma repetição seria executada 11 vezes. c) I = 11, 20, 1 valores de I = 11 12 13 14 15 16 17 18 19 20 Quantidade de valores de I ( 10 valores ), logo uma repetição seria executada 10 vezes. d) K = 1, 10, 2 valores de K = 1 3 5 7 9 Quantidade de valores de K ( 5 valores ), logo uma repetição seria executada 5 vezes. e) JL = 1, 3, 1 valores de JL = 1 2 3 Quantidade de valores de JL ( 3 valores ), logo uma repetição seria executada 3 vezes. f) JL = 1011, 1013, 1 valores de JL = 1011 1012 1013 Quantidade de valores de JL ( 3 valores ), logo uma repetição seria executada 3 vezes. g) JL = 100, 102, 1 valores de JL = 100 101 102 Quantidade de valores de JL ( 3 valores ), logo uma repetição seria executada 3 vezes. h) P = N, J, K A especificação dos valores de P e consequentemente o número de repetições dependerá de: 1. É necessário que todas as variáveis (N, J, K) estejam declaradas como inteiras; 2. Que tenham valores inteiros na TS. Obs.: O número de repetição está em função do número de valores que a variável de controle assumir. 51 No exemplo do algoritmo anterior: DECLARE A COMO INTEIRO LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A EQUIVALE AO ALGORITMO DECLARE A, I COMO INTEIRO REPETIR I = 1, 10, 1 LEIA A ESCREVA ‘O VALOR LIDO = ‘, A FIM-REPETIR Esquema de Funcionamento da Repetição Repetir 52 A partir do esquema de funcionamento anterior podemos simular o algoritmo abaixo: DECLARE A, I COMO INTEIRO REPETIR I = 1 ,10, 1 LEIA A ESCREVA ‘O VALOR LIDO = ‘, A FIM-REPETIR REPETIR I = 1 , 10, 1 Inicializa a variável de controle I←1 Executa a seqüência de passos LEIA A ESCREVA ‘O VALOR LIDO = ‘, A REPETIR I = 1 , 10, 1 Incrementa a variável de controle I←I+ 1 Verifica se o novo valor da variável de controle ultrapassou o valor do limite Sim Sair da Repetição Simulação do algoritmo DECLARE A, I COMO INTEIRO NOME A I TIPO INTEIRO INTEIRO VALOR 53 REPETIR I = 1 ,10, 1 Inicializa variável de controle ( passo vindo do esquema de func. da repetição), com valor inicial I = 1, 10, 1 NOME A I TIPO INTEIRO INTEIRO I←1 VALOR 1 LEIA A Lê um valor da entrada de dados. Observe que os dez valores são colocados na entrada de dados ( 17 34 1 23 78 90 2 5 8 15 ) entrada de dados: NOME A I 17 34 1 23 78 90 2 5 8 15 TIPO INTEIRO INTEIRO LEIA A VALOR 17 1 ESCREVA ‘O VALOR LIDO = ‘, A NOME A TIPO INTEIRO VALOR 78 O VALOR LIDO = 17 54 FIM-REPETIR retorna ao passo REPETIR I = 1 ,10, 1 REPETIR I = 1 ,10, 1 incrementa a variável de controle ( passo vindo do esquema de func. da repetição), com valor de incremento. I←I+1 NOME A I TIPO INTEIRO INTEIRO I←1+1 2 VALOR 17 2 Verifica se o novo valor de I ( 2 ) ultrapassa o valor do limite ( 10 ), caso ultrapasse para a repetição, caso negativo continue executando a repetição, no primeiro passo dentro da repetição. LEIA A entrada de dados: NOME A I 34 1 23 78 90 2 5 8 15 TIPO INTEIRO INTEIRO LEIA A VALOR 34 2 ESCREVA ‘O VALOR LIDO = ‘, A NOME A I TIPO INTEIRO INTEIRO VALOR 34 2 O VALOR LIDO = 17 O VALOR LIDO = 34 FIM-REPETIR retorna ao passo REPETIR I = 1 ,10, 1 55 REPETIR I = 1 ,10, 1 incrementa a variável de controle ( passo vindo do esquema de func. da repetição), com valor de incremento. I←I+1 NOME A I I←2+1 TIPO INTEIRO INTEIRO 3 VALOR 17 3 Verifica se o novo valor de I ( 3 ) ultrapassa o valor do limite ( 10 ), caso ultrapasse, parar a repetição, caso negativo continue executando a repetição, no primeiro passo dentro da repetição (LEIA A). Assim, a repetição será executada ... Pularemos os passos intermediários e apresentamos a finalização da repetição ( I está com o valor 9, penúltima repetição e já foram lidos os 9 valores da entrada). REPETIR I = 1 ,10, 1 incrementa a variável de controle ( passo vindo do esquema de func. da repetição), com valor de incremento. I←I+1 NOME A I TIPO INTEIRO INTEIRO I←9+1 10 VALOR 8 10 Verifica se o novo valor de I ( 10 ) ultrapassa o valor do limite ( 10 ), caso ultrapasse, parar a repetição, caso negativo continue executando a repetição, no primeiro passo dentro da repetição. LEIA A (último valor a ser lido, observe que todos os valores da entrada de dados foram utilizados, lidos através das leituras ) entrada de dados: NOME A I 15 TIPO INTEIRO INTEIRO LEIA A VALOR 15 10 ESCREVA ‘O VALOR LIDO = ‘, A NOME A TIPO INTEIRO VALOR 15 56 I INTEIRO 10 O VALOR LIDO = 17 O VALOR LIDO = 34 O VALOR LIDO = 1 O VALOR LIDO = 23 O VALOR LIDO = 78 O VALOR LIDO = 90 O VALOR LIDO = 2 O VALOR LIDO = 5 O VALOR LIDO = 8 O VALOR LIDO = 15 FIM-REPETIR retorna ao passo REPETIR I = 1 ,10, 1 REPETIR I = 1 ,10, 1 incrementa a variável de controle ( passo vindo do esquema de func. da repetição), com valor de incremento. NOME A I I←I+1 TIPO INTEIRO INTEIRO I ← 10 + 1 VALOR 11 17 11 Verifica se o novo valor de I ( 11 ) ultrapassa o valor do limite ( 10 ), caso ultrapasse para a repetição, caso negativo continue executando a repetição. Como ultrapassa encerra a repetição e continua executando o algoritmo no próximo passo. Como este não existe passo após a repetição, o algoritmo é encerrado. C.2.1) LEITURA DE DADOS X REPETIÇÂO 57 DECLARE A COMO INTEIRO LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A ENTRADA DE DADOS 17 ( 1ª leitura ) 34 ( 2ª leitura ) 1 ( 3ª leitura ) 23 ( 4ª leitura) 78 ( 5ª leitura ) 90 ( 6ª leitura) 2 ( 7ª leitura ) 5 ( 8ª leitura ) 8 ( 9ª leitura ) 15 ( 10ª leitura ) DECLARE A, I COMO INTEIRO REPETIR I = 1 ,10, 1 LEIA A REPETIÇÃO VALOR DO I 1ª 2ª 3ª 4ª 5ª 6ª 7ª 8ª 9ª 10ª 1 2 3 4 5 6 7 8 9 10 ESCREVA ‘O VALOR LIDO = ‘, A FIM-REPETIR 58 DECLARE A COMO INTEIRO LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A ENTRADA DE DADOS 17 ( 1ª leitura ) 34 ( 2ª leitura ) 1 ( 3ª leitura ) 23 ( 4ª leitura) 78 ( 5ª leitura ) 90 ( 6ª leitura) 2 ( 7ª leitura ) 5 ( 8ª leitura ) 8 ( 9ª leitura ) 15 ( 10ª leitura ) DECLARE A, I COMO INTEIRO REPETIR I = 11 ,20, 1 LEIA A REPETIÇÃO VALOR DO I 1ª 2ª 3ª 4ª 5ª 6ª 7ª 8ª 9ª 10ª 11 12 13 14 15 16 17 18 19 20 ESCREVA ‘O VALOR LIDO = ‘, A FIM-REPETIR Observe que o valor do I não influência no valor que será lido. O primeiro valor lido será obtido pela primeira leitura (no primeiro algoritmo ) que é também obtido através da leitura quando a repetição executa pela primeira vez (segundo algoritmo) . 59 C.2.2) Exercícios Resolvidos 1. Faça um algoritmo que obtenha 15 números inteiros e calcule o somatório. DECLARE VALOR, SOMA COMO INTEIRO SOMA ← 0 REPETIR J = 1, 15 , 1 LEIA VALOR SOMA ← SOMA + VALOR FIM-REPETIR ESCREVA SOMA 2. Faça um algoritmo que leia 25 números inteiros e calcule o somatório dos números pares. DECLARE VALOR, SOMA COMO INTEIRO SOMA ← 0 REPETIR J = 1, 25 , 1 LEIA VALOR SE ( MOD( VALOR , 2) = 0 ENTÃO SOMA ← SOMA + VALOR FIM-SE FIM-REPETIR ESCREVA SOMA 3. Faça um algoritmo que obtenha 5 números inteiros e informe o maior deles. DECLARE VALOR, MAIOR COMO INTEIRO LEIA VALOR MAIOR ← VALOR REPETIR J = 1,4, 1 LEIA VALOR SE VALOR > MAIOR ENTÃO MAIOR ← VALOR FIM-SE FIM-REPETIR ESCREVA MAIOR 60 C.2.3) EXERCÍCIOS PROPOSTOS 1. Dizer quantas repetições são especificadas e que valores as variáveis de controle de repetição assumirão, pelos seguintes comandos: a) b) c) d) e) REPETIR I = 8, 10, 2 REPETIR J = 1, 2, 100 REPETIR K = 2, 2, 2 REPETIR A = 15, 11, 1 REPETIR O = 1, 12, 3 2. Para os algoritmos a seguir : DECLARE I, V1, V2, V3 COMO INTEIROS LEIA V1 LEIA V2, V3 REPETIR I = 1, 5, 2 LEIA V1, V2 , V3 ESCREVA V1, V2, V3 FIM-REPETIR DECLARE I, V1, V2 COMO INTEIROS REPETIR I = 1, 5, 1 LEIA V1, V2 ESCREVA V1, V2 FIM-REPETIR DECLARE I, V1, V2 COMO INTEIROS LEIA V1 REPETIR I = 2, 1, 1 LEIA V1, V2 ESCREVA V1, V2 FIM-REPETIR DECLARE I, V1, V2 COMO INTEIROS LEIA V1 REPETIR I = 2, 4, 1 LEIA V1, V2 FIM-REPETIR ESCREVA V1, V2 DECLARE I, V1, V2 COMO INTEIROS LEIA V1, V2 ESCREVA V1, V2 REPETIR I = 1, 4, 1 LEIA V1, V2 ESCREVA V1, V2 FIM-REPETIR ESCREVA V1, V2 61 Responda a) b) c) d) e) Quantos valores são lidos para V1 ? Qual o total de valores lidos ? Quantas linhas são impressas ? Que valores I possuirá ? Qual deve ser a organização dos dados de entrada ? 3. Considerando os algoritmos do exercício anterior e com a seguinte organização de entrada: ENTRADA DE DADOS 1 2 2 4 5 6 7 8 8 10 Responda: a) Quais os valores são lidos para V1, V2, V3 ? b) Quais os valores impressos ? c) Verificar a validade das situações seguintes c.1) TS V1 INTEIRO 3 V2 INTEIRO 4 I INTEIRO 2 1 3 2 4 c.2) TS V1 V2 I INTEIRO INTEIRO INTEIRO 9 10 6 1 2 3 4 5 6 7 8 62 4. Para o algoritmo abaixo e a entrada de a complete as informações: DECLARE I, V1, V2 COMO INTEIROS REPETIR I = 1, 5, 1 LEIA V1, V2 ESCREVA V1, V2 FIM-REPETIR ENTRADA DE DADOS 1 2 3 4 5 6 7 8 9 10 TS V1 V2 I INTEIRO INTEIRO INTEIRO 1 3 5 ? ? 2 4 5. Escreva um algoritmo que leia cinco temperaturas em graus Celsius e converta cada uma para grau Fahrenheit, cuja fórmula de conversão é: ( 9 * graus Celsius + 160 ) /5. 6. Escreva um algoritmo que leia três temperaturas em grau Fahrenheit e converta cada uma para graus Celsius, cuja fórmula de conversão é: ( graus Fahrenheit – 32) * (5/9). 7. Escreva um algoritmo que leia seis conjuntos de três valores, representando o comprimento, largura e altura de caixas retangulares e calcule o volume de cada uma, cuja fórmula é: VOLUME = COMPRIMENTO * LARGURA * ALTURA 8. Escreva um algoritmo que leia oito conjuntos de dois valores A e B, e efetue a troca dos valores de forma que A passe a possuir o valor de B e B passa a possuir o valor de A. Apresente os valores antes e depois da troca, para cada conjunto. 9. Escreva um algoritmo que leia quinze conjuntos de dois valores PRESTAÇÂO e TAXA, representando o valor de uma prestação e a taxa de juros cobrada pelo atraso. Calcule cada prestação atrasada pela fórmula: ATRASO = PRESTAÇÂO + ( PRESTAÇÂO* TAXA /100) 10. Escreva um algoritmo que leia cem conjuntos de dois valores, representando o raio e altura de cem latas e calcule cada volume, cuja fórmula é: VOLUME = 3.1415 * RAIO2 * ALTURA 63 11. Escreva um algoritmo que leia 32 conjuntos de três valores, representando as duas bases e a altura de 32 trapézios e calcule cada área, cuja fórmula é: ÁREA = (BASE1 + BASE2) /2 * ALTURA 12. Escreva um algoritmo para ler 40 valores lidos dois a dois, calcular e escrever a média aritmética entre cada par de números. 13. Escrever um algoritmo que lê 3 valores a, b, c que são lados de um triângulo e calcule a área deste triângulo. O total de triângulos é igual 55. s( s − a )( s − b )( s − c ) onde s = semiperímetro 14. Para A e B inteiros e maiores que zero, fazer um algoritmo para o cálculo de A elevado à potência de B usando multiplicações sucessivas. C.3) OUTRA UTILIZAÇÃO DA INSTRUÇÂO REPETIR Além de utilizar a instrução REPETIR para produzir repetições de conjuntos de passos é possível utilizá-la para outros fins, graças a uma característica bastante interessante; ao definir uma repetição o programador deve especificar o número de repetições (por exemplo: I = 1,3,1). A partir dessa especificação a instrução produz os valores automaticamente. Essa característica pode ser utilizada para resolver certos tipos de problema. Exemplo 1: Escrever um algoritmo que gere e imprima os números de 1 até 10. DECLARE I COMO INTEIRO REPETIR I = 1 ,10, 1 ESCREVA ‘O VALOR I = ‘, I FIM-REPETIR O VALOR I = O VALOR I = O VALOR I = O VALOR I = O VALOR I = O VALOR I = O VALOR I = O VALOR I = O VALOR I = O VALOR I = 1 2 3 4 5 6 7 8 9 10 Observe que não há leitura de dados Exemplo 2: Escrever um algoritmo que gere e imprima os números pares de 1 até 10. 64 DECLARE I COMO INTEIRO REPETIR I = 2 ,10, 2 ESCREVA ‘O VALOR I = ‘, I FIM-REPETIR Valores de I que serão impressos 2 4 6 8 10 Exemplo 3: Escrever um algoritmo que gere e imprima os números impares de 1 até 10. DECLARE I COMO INTEIRO REPETIR I = 1 ,10, 2 ESCREVA ‘O VALOR I = ‘, I FIM-REPETIR Valores de I que serão impressos 1 3 5 7 9 Exemplo 4: Escrever um algoritmo que gere e imprima o somatório de 1 até 10. DECLARE I , S COMO INTEIRO S ←0 REPETIR I = 1 ,10, 1 S←S+I FIM-REPETIR ESCREVA S REPETIÇÃO I S 0 1ª 1 1 2ª 2 3 3ª 3 6 Valor de S que será impresso 4ª 4 10 5ª 5 15 6ª 6 21 7ª 7 28 8ª 8 36 9ª 9 45 10ª 10 55 55 Exemplo 5: Escrever um algoritmo que gere e imprima o fatorial de 5. DECLARE I , S COMO INTEIRO S ←1 REPETIR I = 1 , 5 , 1 S←S*I FIM-REPETIR ESCREVA S REPETIÇÃO I S 1 1ª 1 1 Valor de S que será impresso 2ª 2 2 3ª 3 6 4ª 4 24 5ª 5 120 120 Exemplo 6: Escrever um algoritmo que gere e imprima o fatorial de N (considere N > 1). 65 DECLARE I , S, N COMO INTEIRO LEIA N S ←1 ENTRADA DE DADOS REPETIR I = 1 , N , 1 5 S←S*I FIM-REPETIR Observe: que o valor de N está sendo lido e usado como limite ESCREVA S da repetição REPETIÇÃO I S N 1 5 1ª 1 1 Valor de S que será impresso 2ª 2 2 3ª 3 6 4ª 4 24 5ª 5 120 120 C.3.1) EXERCÍCIOS PROPOSTOS 1. Para o algoritmo e a entrada de dados a seguir : DECLARE I, SI, SV, V COMO INTEIROS SI ←0 SV ← 0 REPETIR I = 1,10,1 LEIA V SI ← SI + I SV ← SV + V FIM-REPETIR ESCREVA SI ESCREVA SV ENTRADA DE DADOS 10 9 8 7 6 5 4 3 2 1 Responda: a) Quantos valores são lidos para V ? b) Em que momentos é verdadeira a igualdade SI = SV c) Para que valores de I é verdade que SV é múltiplo SI ? 2. Escrever um algoritmo que escreve os números pares entre 100 e 200. 3. Escrever um algoritmo que escreve a soma dos números pares entre 0 e 100. 4. Escrever um algoritmo que escreve a soma dos números que não são múltiplos de 13 entre 100 e 200. 66 5. Escrever um algoritmo que escreve a soma dos números múltiplos de 7 entre 100 e 200. 6. Escrever um algoritmo que gera os números de 1000 a 1999 e escreve aqueles que divididos por 11 dão um resto igual a 5. 7. Escrever um algoritmo que lê 10 valores para n, um de cada vez, todos inteiros e positivos, e para cada n lido, escreva a tabuada de 1 até n de n. 1 x n = n 2 x n = 2n ... n x n = n2 8. Escrever um algoritmo que lê 5 valores para a, um de cada vez, e conta quantos destes valores são negativos, escrevendo esta informação. 9. Escrever um algoritmo que lê 150 valores, um de cada vez, e conta quantos deles estão em cada um dos intervalos [0, 25], (25, [50] , (50, 75], (75, 100]. 10. Escrever um algoritmo semelhante ao anterior que calcula as médias aritméticas de cada intervalo e as escreve, juntamente com o número de valores de cada intervalo. 11. Escrever um algoritmo que lê um número não determinado de valores, todos inteiros e positivos, um de cada vez, e calcule e escreva a média aritmética dos valores lidos, a quantidade de valores pares, a quantidade de valores impares, a percentagem de valores pares e a percentagem de valores ímpares. 12. Escrever um algoritmo que lê 5 conjuntos de 3 valores a, b, c, um conjunto por vez e os escreve assim como foram lidos. Em seguida, ordene-os em ordem decrescente e escreva-os novamente. 13. Escreva um algoritmo para calcular o valor de S, onde os valores de N e P são lidos e S é calculada pela formula : S N! ----------------------P! ( N - P) ! = 14. Escreva um algoritmo para calcular o valor de X, onde X é calculado da seguinte forma : X = N! + (N-1)! / 2 + (N-2)!/ 3 + (N-3)!/4 + ... + 1 / N 15. Calcular e imprimir a série S = 37 X 38 1 + 36 X 37 2 + 35 X 36 3 +. . . + 1X 2 37 16. Escrever um algoritmo que lê um valor N e calcula e escreve os 20 primeiros termos da série: 67 1 + 1/x2 + 1/x3 + 1/x4 + ... 17. Dada a série: 2 3 4 9 16 29 54 99 …. Escreva um algoritmo para calcular o n-ésimo termo da série 18. Dada a série: -2 0 6 8 14 16 22 24 30 32 …. Escreva um algoritmo para calcular o n-ésimo termo da série. 19. Escreva um algoritmo para calcular o valor de Sen x, obtido pela série de Mac-Laurin. Sen x = x - x3 / 6 + x5 / 120 - x7/5040 + … + xn / n! 20. Fazer um algoritmo que leia um número real X e calcule o seguinte somatório : S= X ------- + 1! X - X --------2! - X --------- + ... 3! , usando os 20 primeiros termos da série. 21. Calcular a série : S = 1 1 − 4 2 + 9 3 − 16 4 +. . . − 100 10 22. Calcular e imprimir a série : P = 1! 1 − 2! 3 + 3! 7 − 4! 15 + 5! 31 −. . . , usando os 20 primeiros termos da série. 23. Escrever um algoritmo para calcular, para N lido, o valor de S, dado por: S= 1 2 3 N− 1 N + + + ...+ + + N N− 1 N− 2 2 1 68 24. Um número perfeito é aquele que é igual a soma dos seus divisores. (Ex.: 6 = l + 2 + 3; 28 = 1 + 2 + 4 + 7 + 14 etc..). Escreva um algoritmo para ler um valor e verificar se ele é um número perfeito. B.3) NÚMERO NÃO CONHECIDO DE REPETIÇÕES Suponha que se deseja escrever um algoritmo para ler valores e escrevê-los. Quantos valores serão lidos ? Existe algum valor para processar ? DECLARE A COMO INTEIRO LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A LEIA A ESCREVA ‘O VALOR LIDO = ‘, A . . . ENTRADA DE DADOS 17 34 1 23 78 . . finito . Isso não pode ser feito (um algoritmo deve possuir um número finito de passos) É necessária uma estrutura de repetição quando não conhece precisamente o número de vezes que a seqüência de passos deve ser repetida. Forma geral: ENQUANTO <condição> FAÇA <seqüência de passos> FIM-ENQUANTO A estrutura de repetição enquanto-faça é utilizada quando um conjunto de passos deve ser executado repetidamente, enquanto uma determinada condição (expressão lógica) permanecer verdadeira. Dependendo do resultado do teste da condição, o conjunto de comandos poderá não ser executado nem uma vez ( se for falsa no primeiro teste), ou será executado varias vezes (enquanto for verdadeira). Chama-se a isso um laço (“loop”). Ao criar estruturas de repetição enquanto: • • inicializar a(s) variável(eis) que controla(m) o loop antes de iniciá-lo; modificar a(s) variável(eis) que controla(m) o loop dentro dele (seja por leitura ou por atribuição), pois se isto não for feito cairemos no que chamamos um loop infinito. 69 Essa estrutura resolve o problema de ter um número finito de passos no algoritmo. Como resolver o problema de garantir que o conjunto de dados é finito (conjunto de dado infinito = leitura infinita = algoritmo infinito), sem contá-los ? Como o número de dados depositados na entrada de dados é ignorado, utilizamos um expediente para contornar essa situação. Adicionamos um dado especial ( flag ) que indicará o final dos dados. Embora a quantidade de dados seja ignorada, podemos agora afirmar que o último é o flag. O flag é um dado que não será processado, ele só indica que os dados terminaram. O flag normalmente é constituído de valores inconsistentes ou valores assumidos por decisão do programador. Por exemplo: 1. Se o dado a ser lido: idade - escolheria um valor negativo para ser o flag, pois não há idade negativa; 2. Se o dado a ser lido: sexo - escolheria um caracter diferente ‘M’ ou ‘F’ (‘M’ ou ‘F’ são os caracteres que normalmente representam os sexos masculino e feminino respectivamente); 3. Se o dado a ser lido: salário - escolheria um valor negativo para ser o flag, pois normalmente salário é positivo ou zero; 4. Se o dado a ser lido: nome - escolheria uma seqüência de caracteres que não representasse o nome de uma pessoa, por exemplo ‘ZZZZZZZZ’ ou ‘AAAAAAAA’; 5. Se o dado a ser lido: números inteiros - escolheria um valor (por exemplo zero) para ser o flag; 6. Se o dado a ser lido: coeficientes da equação do 2º grau – escolheria os valores 0 0 0 ( pois não existe equação do 2º grau com coeficientes 0 0 0 ); 7. Se o dado a ser lido: nome, sexo, salário, idade – escolheria os valores ‘ZZZ’ ‘Z’ –1 –1 ENTRADA DE DADOS 17 34 1 23 78 . . . 0 FLAG Observe que se o programador erradamente colocar entre os valores que devem ser processados o valor zero ( 0 ), nem todos os valores colocados na entrada de dados serão processados. ENTRADA DE DADOS 17 34 1 0 23 78 . . . Apenas os valores 17, 34 e 1 serão processados Valor colocado erradamente FLAG 70 0 Vimos anteriormente que para criar estruturas de repetição enquanto, o programador deve ter sua atenção voltada para os seguintes aspectos: • • inicializar a(s) variável(eis) que controla(m) o loop antes de iniciá-lo; modificar a(s) variável(eis) que controla(m) o loop dentro dele (seja por leitura ou por atribuição), pois se isto não for feito cairemos no que chamamos um loop infinito. Isso é devido a forma como a repetição funciona. Retornando ao problema: escrever um algoritmo para ler valores e escrevê-los. Etapas para construção do algoritmo: 1. criar a variável; 2. inicializar a(s) variável(eis) que controla(m) o loop antes de iniciá-lo 3. escrever a condição de repetição de acordo com o flag definido 4. escrever o valor lido 5. modificar a(s) variável(eis) que controla(m) o loop dentro dele DECLARE A COMO INTEIRO LEIA A ENQUANTO A # 0 FAÇA ESCREVA ‘O VALOR LIDO = ‘, A LEIA A inicializar a variável que controla o loop antes de iniciá-lo. Isso será realizado por leitura 71 FIM-ENQUANTO Modificar o valor da variável que controla a repetição dentro dele. Isso será feito através da leitura do próximo valor que poderá ser o valor flag ou não. A condição A # 0, pois o flag escolhido é zero, então a repetição deve ser feita enquanto o valor lido seja diferente de zero Simulação do algoritmo DECLARE A COMO INTEIRO NOME A TIPO INTEIRO VALOR LEIA A Lê um (primeiro) valor da entrada de dados. Essa leitura tem por objetivo inicializar a variável de controle da repetição ( A ) entrada de dados: NOME A 17 34 1 23 78 . . . 42 0 TIPO INTEIRO LEIA A VALOR 17 ENQUANTO A # 0 FAÇA Verifica a condição de repetição A # 0 ( A possui o valor 17 que é diferente de 0) logo a condição é verdadeira Observe que se o valor lido anteriormente fosse zero ( 0), a condição seria falsa, logo não entraria na repetição (nenhuma repetição seria realizada). ESCREVA ‘O VALOR LIDO = ‘, A NOME TIPO VALOR 72 A INTEIRO 78 O VALOR LIDO = 17 LEIA A Lê um novo valor da entrada de dados. ( Modificar a(s) variável(eis) que controla(m) o loop dentro dele, se isso não fosse feito A estaria com o valor 17 e a próxima repetição processaria novamente o valor 17 ) entrada de dados: NOME A 34 1 23 78 . . . 42 0 TIPO INTEIRO LEIA A VALOR 34 FIM-ENQUANTO retorna ao passo ENQUANTO A # 0 FAÇA Verifica a condição de repetição A # 0 ( A possui o valor 34 que é diferente de 0) logo a condição é verdadeira. O valor 34 foi lido, ainda não processado, isso acontecerá quando a execução começar no início do corpo da repetição. Observe, se o valor lido anteriormente fosse zero ( 0), a condição seria falsa, logo não entraria na repetição (repetição seria finalizada). ESCREVA ‘O VALOR LIDO = ‘, A (processamento do valor lido, que sabemos ser diferente de zero) NOME A TIPO INTEIRO VALOR 34 73 O VALOR LIDO = 17 O VALOR LIDO = 34 Assim, a repetição será executada ... Pularemos os passos intermediários e apresentamos a finalização da repetição ( A está com o valor 42, penúltimo valor lido). FIM-ENQUANTO retorna ao passo ENQUANTO A # 0 FAÇA Verifica a condição de repetição A # 0 ( A possui o valor 42 que é diferente de 0) logo a condição é verdadeira. O valor 42 foi lido, ainda não processado, isso acontecerá, quando a execução começar no início do corpo da repetição. Observe, se o valor lido anteriormente fosse zero ( 0), a condição seria falsa, logo não entraria na repetição (repetição seria finalizada). ESCREVA ‘O VALOR LIDO = ‘, A (processamento do valor lido, que sabemos ser diferente de zero) NOME A TIPO INTEIRO VALOR 42 O VALOR LIDO = O VALOR LIDO = O VALOR LIDO = O VALOR LIDO = 17 34 1 23 . O VALOR LIDO = 42 LEIA A Lê um novo valor da entrada de dados. ( Modificar a(s) variável(eis) que controla(m) o loop dentro dele) 74 entrada de dados: 0 LEIA A FIM-ENQUANTO retorna ao passo ENQUANTO A # 0 FAÇA Verifica a condição de repetição A # 0 ( A possui o valor 0 que é igual a 0) logo a condição é falsa. A repetição é finalizada. B.3.1) Exercícios Propostos 1) Para o algoritmo e a entrada de dados abaixo, responda as questões: DECLARE S, A COMO INTEIROS S←0 LEIA A ENQUANTO ( A # -1 ) FAÇA S← S+A LEIA A FIM-ENQUANTO ESCREVA S a) b) c) d) ENTRADA DE DADOS 1 3 0 4 2 -1 Quais os valores lidos ? Que valor seria impresso ? Quantas repetições seriam realizadas ? O que aconteceria se a condição de controle fosse A # 0 ? 2) Refazer os exercícios de 5 até 15 da seção B.2.2, considerando a existência de vários valores na entrada de dados. 3) Um vendedor necessita de um algoritmo que calcule o preço total devido por um cliente. O algoritmo deve ler o código de um produto, a quantidade comprada, valor unitário e calcular o preço total de cada produto e o débito total. Considere o último produto com o código igual a zero. 75 B.4) REPETIR X ENQUANTO Como vimos, a estrutura de repetição enquanto-faça é usada quando não conhece precisamente o número de vezes que a seqüência de passos deve ser repetida. Podemos então afirmar que a estrutura enquanto-faça é mais genérica que a estrutura repetir. É possível dessa forma simular a estrutura repetir usando a estrutura enquanto-faça. Verifique o exemplo abaixo: Escrever um algoritmo que gere e imprima o somatório dos números impares 1 até 10. DECLARE I , S COMO INTEIRO S ←0 REPETIR I = 1 ,10, 2 S←S+I FIM-REPETIR ESCREVA S Analisando a repetição do algoritmo anterior : Pelo esquema de funcionamento do REPETIR apresentado na seção B.2, a variável de controle ( I ) é iniciada com o valor inicial ( 1 ), em seguida o corpo da repetição é executado ( seqüência de passos definida dentro da repetição ), ao terminar de executar os passos do corpo da repetição, o valor da variável de controle é adicionado do valor do incremento ( 2 ) e logo em seguida é testado se o novo valor da variável de controle ainda é menor ou igual que o limite (10), caso afirmativo continua a executar o corpo da repetição, caso negativo para a repetição. Assim a repetição REPETIR I = 1 ,10, 2 pode ser interpretada como: começando em 1 e enquanto o valor a variável de controle for menor ou igual que 10 execute o corpo da repetição e em seguida incremente de 2 a variável de controle. DECLARE I , S COMO INTEIRO S ←0 REPETIR I = 1 ,10, 2 algoritmo S←S+I FIM-REPETIR equivalente ESCREVA S DECLARE I , S COMO INTEIRO S ←0 I ←1 ENQUANTO ( I < 10 OR I = 10 ) FAÇA S←S+I I ←I+2 FIM-ENQUANTO ESCREVA S OBS.: o algoritmo anterior, utilizando enquanto, não faz uso de flag, pois não há leitura de dados. Porém, a regra apresentada anteriormente: • • inicializar a(s) variável(eis) que controla(m) o loop antes de iniciá-lo; modificar a(s) variável(eis) que controla(m) o loop dentro dele (seja por leitura ou por atribuição), pois se isto não for feito cairemos no que chamamos um loop infinito. 76 é respeitada. DECLARE I, S COMO INTEIRO S ←0 I ←1 ENQUANTO ( I < 10 OR I = 10 ) FAÇA S←S+I I ←I+2 FIM-ENQUANTO ESCREVA S Modificar o valor da variável que controla a repetição dentro dele. Isso será feito através do incremento da variável I de duas unidades inicializar a variável que controla o loop antes de iniciá-lo. Isso será realizado pela atribuição do valor 1 (valor inicial da repetição REPETIR I = 1 ,10, 2 ) a variável I (variável de controle da repetição) A condição ( I < 10 OR I = 10 ), pois o limite estabelecido é o valor 10, na repetição REPETIR I = 1 ,10, 2 B.4) EXERCÍCIOS PROPOSTOS 1. Para A e B inteiros e maiores que zero, fazer um algoritmo para o cálculo A dividido por B usando subtrações sucessivas. 2. Considerando a igualdade Soma = 13 + 23 + 33 + ...+ N3 Fazer um algoritmo para ler um valor X inteiro, positivo e maior que zero e obter o menor valor de N que satisfaça a relação SOMA > X. 3. Chico tem 1,50 metro e cresce 2 centímetros por ano, enquanto Zé tem 1,10 metro e cresce 3 centímetros por ano. Construa um algoritmo que calcule e imprima quantos anos serão necessários para que Zé seja maior que Chico. 77 Capítulo III - ARQUIVOS Quando se deseja manter e/ou obter informações sobre objetos de raciocínio pode-se chamar estes objetos de classes de entidade, como por exemplo: Alunos, Professores, equipes de futebol, peças de um estoque, empregados de uma fábrica, etc.. A seleção de um elemento de uma classe de entidade constitui uma entidade. As características que interessam no contexto constitui os atributos da classe de entidade. Exemplo: Aluno Nome Filiação Endereço Matrícula As características de uma classe de entidade podem assumir valores que denominamos de valor de atributo. Exemplo: Aluno Nome - Maria Filiação - Pedro e Ana Endereço - Rua Pres. Vargas, 15 Matrícula - 1509 Considerando a classe de entidade empregados de uma empresa pode-se visualizar o seguinte: Empregados = { João, Carlos, Maria, Pedro, Ana, ... } Empregado = { Carlos } Atributos = { Nome, Departamento, Idade, Cargo, Tempo de Serviço } Valores de Atributo = { Carlos, Computação, 30, Programador, 5 } A perfeita individualização de uma entidade é feita pela justaposição de um conjunto de pares < atributos - valores de atributo > que recebe o nome de registro. Registro = {{nome, Carlos}, {Departamento, {Cargo,Programação}, {Tempo de Serviço, 5}} Computação}, {Idade, 30}, Certamente um registro pode ser constituído tornando-se implícita a existência dos atributos e trabalhando apenas com os valores de atributo: { Carlos, Computação, 30, Programador, 5 }. Em termos computacionais (jargão técnico) os atributos são também chamados de campos do registro. Um conjunto de registros que caracterizam uma classe de entidade é chamado de arquivo. 78 III.1) EXERCÍCIOS RESOLVIDOS 1. Escreva um algoritmo que leia o nome, sexo, idade de uma pessoa e escreva os dados lidos. DECLARE NOME, SEXO CARACTER DECLARE IDADE COMO INTEIRO LEIA NOME, SEXO, IDADE ESCREVA NOME, SEXO, IDADE 2. Escreva um algoritmo que leia um arquivo contendo o nome, sexo, idade de várias pessoas e escreva os dados lidos. O total de registro é igual a 100. DECLARE NOME, SEXO CARACTER DECLARE IDADE COMO INTEIRO REPETIR I = 1 , 100, 1 LEIA NOME, SEXO, IDADE ESCREVA NOME, SEXO, IDADE FIM-REPETIR 3. Escreva um algoritmo que leia um arquivo contendo o nome, sexo, idade de várias pessoas e escreva os dados lidos. DECLARE NOME, SEXO CARACTER DECLARE IDADE COMO INTEIRO LEIA NOME, SEXO, IDADE ENQUANTO IDADE # -1 FAÇA ESCREVA NOME, SEXO, IDADE LEIA NOME, SEXO, IDADE FIM-ENQUANTO 4. Escreva um algoritmo que leia um arquivo contendo o nome, sexo, idade de várias pessoas e escreva os dados lidos das pessoas de sexo feminino. DECLARE NOME, SEXO CARACTER DECLARE IDADE COMO INTEIRO LEIA NOME, SEXO, IDADE ENQUANTO IDADE # -1 FAÇA SE SEXO = 'F' ENTÃO ESCREVA NOME, SEXO, IDADE FIM-SE LEIA NOME, SEXO, IDADE FIM-ENQUANTO 79 5. Escreva um algoritmo que leia um arquivo contendo o nome, sexo, idade de várias pessoas e escreva o total de mulheres. DECLARE NOME, SEXO CARACTER DECLARE IDADE, TOTALMULHER COMO INTEIRO LEIA NOME, SEXO, IDADE TOTALMULHER ← 0 ENQUANTO NOME # 'ZZZ' FAÇA SE SEXO = 'F' ENTÃO TOTALMULHER ← TOTALMULHER + 1 FIM-SE LEIA NOME, SEXO, IDADE FIM-ENQUANTO ESCREVA 'TOTAL DE MULHERES =', TOTALMULHER 6. Escrever um algoritmo que leia um arquivo contendo o nome, sexo, idade e o total de horas trabalhadas de várias pessoas. Considerando que a hora de trabalho custa R$ 3,45 calcule e escreva o salário bruto de cada pessoa. DECLARE NOME, SEXO CARACTER DECLARE IDADE, TOTALMULHER COMO INTEIRO DECLARE TOTALH, SALBRUTO COMO REAL LEIA NOME, SEXO, IDADE ENQUANTO IDADE # -1 FAÇA SALBRUTO ←TOTH * 3.45 ESCREVA SALBRUTO LEIA NOME, SEXO, IDADE FIM-ENQUANTO 7. Fazer um algoritmo que leia o sexo e a idade de várias pessoas. Escreva o total de homens menor de idade e o total de mulheres maior de idade. DECLARE SEXO CARACTER DECLARE IDADE, HMENOR, MMAIOR INTEIRO HMENOR ← -1 MMAIOR ← -1 LEIA SEXO, IDADE ENQUANTO IDADE # -1 FAÇA SE SEXO = 'M' E IDADE < 18 ENTÃO HMENOR ← HMENOR + 1 FIM-SE SE SEXO = 'F' E IDADE ³ 18 ENTÃO MMAIOR ← MMAIOR + 1 FIM-SE LEIA SEXO, IDADE FIM-ENQUANTO ESCREVA HMENOR ESCREVA MMAIOR 80 8) Escrever um algoritmo que leia o sexo e o peso de pessoas, calcule e escreva a média dos pesos dos homens e o total de mulheres com mais de 50 kg. DECLARE SEXO CARACTER DECLARE PESO, MÉDIA, SOMA, TOTALHOM, TOTALMULH INTEIRO TOTAL_HOM ← 0 SOMA ← 0 TOTALMULH ← 0 LEIA SEXO, PESO ENQUANTO SEXO # 'Z' FAÇA SE SEXO = 'M' ENTÃO TOTALHOM ← TOTALHOM + 1 SOMA ← SOMA + PESO FIM-SE SE SEXO = 'F' E PESO > 50 ENTÃO TOTALMULH ← TOTALMULH + 1 FIM-SE LEIA SEXO, PESO FIM-ENQUANTO MÉDIA ← SOMA / TOTALHOM ESCREVA MÉDIA ESCREVA TOTALMULH III.2 – EXERCÍCIOS PROPOSTOS 1. Escreva um algoritmo que leia uma seqüência de valores inteiros positivos e : a) imprima todos os números; b) imprima o maior e o menor valor; c) imprima os valores primos, pares e impares; 2. Escreva um algoritmo que leia uma seqüência de dados (nome, sexo, idade,salário) a) imprima todos os nomes dos funcionários; b) imprima o total de homens; c) imprima o total de mulheres com salário maior que R$ 500,00; d) imprima a média salarial. 3. Dado uma seqüência de dados (nome, salário, idade, sexo) dos funcionários de uma firma, escreva um algoritmo para: a) imprimir os nomes das pessoas; b) imprimir o total de homens e o total de mulheres; c) imprimir o maior salário; d) imprimir a menor idade; e) para os salários menores que R$ 5.000,00 imprima esses salários acrescidos de 20%. 81 4. Escrever um algoritmo que lê o número de um vendedor, o seu salário-fixo, o tota1 de vendas por ele efetuadas e o percentual que ganha sobre o total de vendas. Calcular o salário tota1 do vendedor. Escrever número do vendedor e o salário total. 5. Escrever um algoritmo que lê um número não determinado de conjuntos de valores, cada um formado pelo número de um aluno e suas 3 notas. Calcular, para cada aluno, a média ponderada com pesos respectivos de 4 para a maior nota e 3 paras as outras duas. Escrever o número do aluno, suas 3 notas, a média calculada e uma mensagem "aprovado" se nota >= 5 ou "reprovado" para nota < 5. 6. Escrever um algoritmo que lê o número de um funcionário, seu número de horas trabalhadas, o valor que recebe por hora, e o número de filhos com idade menor do que 14 anos, o valor do salário família por filho e calcula o salário deste funcionário. 7. Uma revendedora de carros usados, paga a seus funcionários vendedores, um salário fixo por mês, mais uma comissão também fixa para cada carro vendido e mais 5% do valor das vendas por ele efetuadas. Escrever um algoritmo que lê o número do vendedor, o número de carros por ele vendidos, o valor tota1 de suas vendas, o salário fixo e o valor que recebe por carro vendido e calcula o salário mensal do vendedor, escrevendo-o juntamente com o seu número de identificação. 8. Escrever um algoritmo que lê o número de um vendedor de uma empresa, seu salário fixo e o total de vendas por ele efetuadas. Cada vendedor recebe um salário fixo, mais uma comissão proporcional às vendas por ele efetuadas. A comissão é de 3% sobre o total de vendas até $ 1.000,00 e 5% sobre o que ultrapassa este valor. Escrever o número do vendedor, o total de suas vendas, seu salário fixo e seu salário total. 9. Escrever um algoritmo que lê 5 conjuntos de 2 valores, o primeiro representando o número de um aluno e o segundo representando a sua altura em centímetros. Encontrar o aluno mais alto e o mais baixo e escrever seus números, suas alturas e uma mensagem dizendo se é o mais alto ou o mais baixo. 10. Fazer um programa que leia um conjunto de dados contendo a matrícula, as três notas e a freqüência de do aluno e calcule e imprima: a nota final de cada aluno; a maior e a menor nota final da turma (supor não haver empate); a nota média da turma; o total dos alunos reprovados; a porcentagem dos alunos reprovados por freqüência. para cada aluno: a matrícula, a freqüência, as três notas, a nota final e o aproveitamento (A/R); Imprimir a matrícula quando for pertinente. 11. Uma universidade deseja fazer um levantamento a respeito de seu concurso vestibular. Para cada curso, é fornecido o seguinte conjunto de valores : 82 - código do curso; - número de vagas; - número de candidatos do sexo masculino; - número de candidatos do sexo feminino. 12. Considere o código do curso sendo zero para indicar o flag de entrada. Fazer um programa que: - calcule e imprima, para cada curso, o número de candidatos por vaga e a porcentagem de candidatos do sexo feminino e o código do curso; - determine e imprima o maior número de candidatos por vaga juntamente com o código do curso (supor que não haverá empate); - calcule e imprima o total de candidatos. 13. Numa fábrica trabalham homens e mulheres divididos em três classes : A - os que fazem até trinta peças por mês; B - os que fazem de 31 a 35 peças por mês; C - os que fazem mais de 35 peças por mês. A classe A recebe salário mínimo. A classe B recebe salário mínimo e mais 3% do salário mínimo por peça, acima das 30 iniciais. A classe C recebe salário mínimo e mais 5% do salário mínimo por peça acima das 30 iniciais. Fazer um programa que : Leia um conjunto de dados com : o número de operários; o número de peças fabricadas por mês; o sexo do operário; Considere o número de operários sendo zero como flag de entrada. Calcular e imprimir : o número e o salário de cada operário; o total da folha de pagamento mensal; o número total de peças fabricadas por mês; a média de peças fabricadas pelos homens em cada classe; a média de peças fabricadas pelas mulheres em cada classe; o número do operário(a) de maior salário (supor não haver empate). 14. Existem 3 candidatos a uma vaga no Senado. Feita a eleição os votos são colocados em um arquivo, formando uma seqüência de valores. O voto de cada eleitor foi codificado da seguinte forma : 1 - voto para o candidato 1 2 - voto para o candidato 2 3 - voto para o candidato 3 4 - voto em branco 5 - voto nulo. Deseja-se saber : a) o candidato vencedor; b) o número de votos em branco; 83 c) e o número de eleitores 15. Leia 3 valores DD , MM, AA representando respectivamente (dia, mês e ano). Escreva um algoritmo para verificar a validade da data. Considere ano bissexto (um ano é bissexto (fevereiro com 29 dias) quando o ano é múltiplo de 4 ) e que as datas (DD MM AA) estão no intervalo de 01 01 93 até 31 12 95. 16. Escrever um algoritmo que lê 3 comprimentos de lados a, b, c e os ordena em ordem decrescente, de modo que o a represente o maior dos 3 lados lidos. Determine, a seguir, o tipo de triângulo que estes 3 lados formam, com base nos seguintes casos escrevendo sempre os valores lidos e uma mensagem adequada: Se a > b + c não formam triângulo algum. Se a2 = b2 + c2 formam um triângulo retângulo. Se a2 > b2 + c2 formam um triângulo obtusângulo. Se a2 < b2 + c2 formam um triângulo acutângulo. Se forem todos iguais formam um triângulo eqüilátero. Se a = b ou b = c ou a = c então formam um triângulo isóscele 17. Escrever um algoritmo que lê a hora de início de um jogo e a hora do final do jogo (considerando apenas horas inteiras) e calcula a duração do jogo em horas, sabendo-se que o tempo máximo de duração do jogo é de 24 horas e que o jogo pode iniciar em um dia e terminar no dia seguinte. 18. Escrever um algoritmo que lê o número de um funcionário, o número de horas por ele trabalhadas, o valor que recebe por hora, o número de filhos com idade inferior a 14 anos, a idade, o tempo de serviço do funcionário e o valor do salário família por filho. Calcular o salário bruto, o desconto do INSS (8,5% do salário bruto) e o salário família. Calcular o IR (Imposto de Renda) como segue: Se Salário Bruto > 1.500,00 então IR = 15% do SB Se Salário Bruto > 500,00 e SB <= 1.500,00 então IR = 8% do SB Se salário Bruto <= 500,00 então IR = 0 Calcular o adicional conforme especificado: Se idade superior a 40 anos ADIC = 2% do SB Se tempo de serviço superior a 15 anos ADIC = 3.5% do SB Se tempo de serviço < 15 anos, mas superior a 5 anos e idade maior do que 30 anos então ADIC = 1,5% do SB. Calcular o salário líquido. Escrever o número do funcionário, salário bruta, total dos descontos, adicional e salário líquido. 19. Escrever um algoritmo que lê o número de identificação e as 3 notas obtidas por um aluno nas 3 verificações e a média dos exercícios que fazem parte da avaliação. Para cada aluno, calcular a média de aproveitamento, usando a fórmula: 84 MA = Nl + N2 x 2 + N3 x 3 + ME 7 A atribuição de conceitos obedece à tabela abaixo: Média de Aproveitamento >= 9.0 >= 7.5 e < 9.0 >= 6.0 e < 7.5 >= 4.0 e < 6.0 < 4.0 Conceito A B C D E O algoritmo deve escrever o número do aluno, suas notas, a média dos exercícios, a média de aproveitamento, o conceito correspondente e a mensagem: "APROVADO" se o conceito for A, B, ou C e "REPROVADO" se conceito for D ou E. 20. Uma empresa decidiu conceder um aumento de salários a seus funcionários de acordo com a tabela abaixo: Salário Atual 0 - 400,00 400,01 - 700,00 700,01 - 1.000,00 1.000,01 - 1.800,00 1.800,01 - 2.500,00 acima de 2.500,00 Índice De Aumento 15% 12% 10% 7% 4% sem aumento Escrever um algoritmo que lê, para cada funcionário, o seu número e o seu salário atual e escreve o numero do funcionário, seu salário atua1, o percentual de seu aumento e o valor do salário corrigido. 21. Escrever um algoritmo que lê, para cada vendedor de uma empresa, o seu número de identificação, seu salário fixo e o total de vendas em reais por ele efetuadas. Cada vendedor recebe um salário fixo e uma comissão proporcional às vendas por ele efetuadas. A comissão é de 3% sobre o total de vendas até $ 1.000,00 e 5% sobre o que ultrapassa este valor. Escrever, para cada vendedor, o seu número de identificação, o tota1 de suas vendas, seu salário fixo e seu salário total. 85 Capítulo IV - VETOR Os algoritmos desenvolvidos até agora apresentam, em relação aos dados de entrada, uma característica comum que é o fato de que o dado lido independe dos outros. Além disso, cada variável apresentada até agoras têm a capacidade de armazenar apenas um valor a cada vez. O vetor ou agregado homogêneo é uma estrutura de dados, capaz de armazenar vários valores ao mesmo tempo e de mesmo tipo. Os vetores podem ser unidimensionais ou multidimensionais (matrizes, tabelas.). IV.1) DECLARAÇÃO DE VETORES Em pseudocódigo as declarações podem ser representadas como: DECLARE <nome>(<tamanho>) COMO <tipo> Onde tipo pode ser: inteiro, real, caráter, lógico. <nome> = nome do identificador <tamanho> = define quantos valores serão armazenados. Exemplo: DECLARE A(10) COMO INTEIRO NOME A TIPO VETOR INTEIRO VALOR 10 IV.2) COLOCANDO VALORES NOS VETORES Para a colocação de valores nos vetores é necessário indicar que posição o valor será alocado. Para isso, é necessário utilizar um índice. Um índice é um valor inteiro deve ser maior ou igual a 1 e menor ou igual que a quantidade declarada, colocada entre os parênteses. O comando de atribuição, já estudado, pode ser utilizado para a atribuição de valores no vetor. Por exemplo: Vetor Índice Valor A(3) ← 12 ( o valor três indica a posição no vetor e o valor 12, o valor a ser alocado) 86 NOME A TIPO VETOR INTEIRO VALOR 10 12 A(10) ← 55 ( o valor dez indica a posição no vetor e o valor 55, o valor a ser alocado) NOME A TIPO VETOR INTEIRO VALOR 10 12 55 OBS. CADA A(I) DEVE SER TRATADO COMO UMA VARIÁVEL INTEIRA "COMUM", ISTO É, PODESE REALIZAR OPERAÇÕES ARITMÉTICAS, RELACIONAIS, ETC.. OBSERVE QUE AO COLOCAR O VALOR NO COMPONENTE, ELE PODE SER MANIPULADO DIRETAMENTE, ISTO É, PARA APANHAR O VALOR QUE ESTÁ NO VETOR NÃO É NECESSÁRIO LER O VALOR, BASTA ACESSÁ-LO DIRETAMENTE. Exemplo: A(10) ← A(10) + 1 ( o valor de A(10) passou para 56) A(1) ← A(10) - A(3) ( o valor de A(1) que estava indefinido passou a ter o valor 44) Caso seja escrito uma operação com componentes indefinida, será considerada uma operação errada, por exemplo: A(4) ← A(5) - 32 incorreta) ( o componente A(5) não possui valor logo a operação está A(6) ← A(15) - 32 ( o componente A(15) não existe logo a operação está incorreta) IV.2.1) Colocando valores no vetor através de leitura Além da atribuição é possível colocar os valores no vetor através da operação de leitura. ENTRADA DE DADOS: NOME TIPO 32 LEIA A(15) VALOR 87 A VETOR INTEIRO 10 32 IV.2.2) Colocando todos os valores no vetor através de leitura A) Um valor por linha DECLARE A(5), I COMO INTEIRO LEIA A(1) LEIA A(2) LEIA A(3) LEIA A(4) LEIA A(5) ENTRADA DE DADOS 12 20 15 1 4 OU DECLARE A(5), I COMO INTEIRO REPETIR I = 1,10,1 LEIA A(I) FIM-REPETIR NOME A TIPO VETOR INTEIRO VALOR 5 12 20 15 1 4 B) Todos os valores na mesma linha DECLARE A(5), I COMO INTEIRO LEIA A(1), A(2), A(3), A(4), A(5) ENTRADA DE DADOS 12 20 15 1 4 OU DECLARE A(5), I COMO INTEIRO LEIA A(I), I = 1,10,1 NOME A TIPO VETOR INTEIRO VALOR 5 12 20 15 1 4 IV.3) IMPRIMINDO O VETOR 88 A) Um valor por linha ESCREVA ESCREVA ESCREVA ESCREVA ESCREVA NOME A A(1) A(2) A(3) A(4) A(5) REPETIR I = 1,10,1 ESCREVA A(I) FIM-REPETIR OU TIPO VETOR INTEIRO VALOR 5 12 20 15 1 4 12 20 15 1 4 B) Todos os valores na mesma linha ESCREVA A(1), A(2), A(3), A(4), A(5) OU ESCREVA A(I), I = 1,10,1 NOME A TIPO VETOR INTEIRO 12 20 15 1 VALOR 5 12 20 15 1 4 4 89 IV.4) Exercícios Resolvidos 1. Escreva um algoritmo para ler 50 valores inteiros e imprimi-los acompanhados de sua média aritmética. DECLARE A(50), I, SOMA COMO INTEIRO DECLARE MEDIA COMO REAL LEIA A(I), I = 1,50,1 SOMA ← 0 REPETIR I = 1,50,1 SOMA ← SOMA + A(I) FIM-REPETIR MEDIA ← SOMA / 50 REPETIR I = 1,50,1 ESCREVA A(I), MEDIA FIM-REPETIR 2. Escreva um algoritmo que leia um vetor de 100 posições de números inteiros e mostre somente os de valores positivos e sua posição do vetor. DECLARE VET(100), I COMO INTEIRO LEIA VET(I), I = 1,100,1 REPETIR I = 1,100,1 SE ( VET(I) > 0 ) THEN ESCREVA ‘VALOR = ’, VET(I), ‘NA POSICAO =’, I FIM-SE FIM-REPETIR 3. Escreva um algoritmo que leia um vetor de 80 elementos inteiros. Encontre e mostre o menor elemento e sua posição no vetor. DECLARE VET(80), I COMO INTEIRO LEIA VET(I), I = 1,80,1 MENOR ← VET(1) POSICAOMENOR ← 1 REPETIR I = 1,79,1 SE ( VET(I) < MENOR ) THEN MENOR ← VET(I) POSICAOMENOR ← I FIM-SE FIM-REPETIR ESCREVA ‘MENOR = ’, MENOR, ‘NA POSICAO =’, POSICAOMENOR 90 4.Escreva um algoritmo que leia um vetor inteiro de 30 posições e crie um segundo vetor, substituindo os valores 0 por 1. Mostre os 2 vetores. DECLARE A(30), B(30), I COMO INTEIRO LEIA A(I), I = 1,30,1 ESCREVA A(I), I = 1,30,1 REPETIR I = 1,30,1 SE ( A(I) = 0 ) THEN B(I) ← 1 SENÃO B(I) ← A(I) FIM-SE FIM-REPETIR ESCREVA B(I), I = 1,30,1 5.Escreva um algoritmo que leia um vetor inteiro de 30 posições e crie um segundo vetor, com apenas os valores diferentes de 0. Mostre os 2 vetores. DECLARE A(30), B(30), I, K COMO INTEIRO LEIA A(I), I = 1,30,1 ESCREVA A(I), I = 1,30,1 K←0 REPETIR I = 1,30,1 SE ( A(I) # 0 ) THEN K←K+1 B(K) ← A(I) FIM-SE FIM-REPETIR ESCREVA B(I), I = 1,K,1 IV.5) EXERCÍCIOS 1. Sendo o vetor V com 10 componentes de números inteiros. 2 6 8 3 10 9 1 21 33 14 e as variáveis X = 2 e Y = 4, escreva o valor correspondente a solicitação: a) V[ X + 1] e) V[ X * 1] i) V[ X - Y] b) V[X + 2] f) V[ X * 2] c) V[ X + 3] g) V[ X * 3] d) V[ X * 4] h) V[ X + Y] ] 2. Escreva um algoritmo que leia um arquivo de números inteiros e apresente o somatório dos valores 3. Escreva um algoritmo que depois de ler um arquivo de inteiros, apresente os seguintes resultados: máximo, mínimo, somatório, a média e a quantidade de números superiores a média. 91 4. Escreva um algoritmo que leia um arquivo com 10 números, e os mostre em ordem inversa. 5. Elaborar um algoritmo que lê um conjunto de 30 valores e os coloca em 2 vetores conforme forem pares ou ímpares. O tamanho do vetor é de 5 posições. Se algum vetor estiver cheio, escrevê-lo. Terminada a leitura escrever o conteúdo dos dois vetores. Cada vetor pode ser preenchido tantas vezes quantos forem necessários. 6. Escreva um algoritmo que leia dois vetores de 10 posições e faça a multiplicação dos elementos de mesmo índice, colocando o resultado em um terceiro vetor. Mostre o vetor resultante. 7. Escreva um algoritmo que leia e mostre um vetor de 20 elementos inteiros. a seguir, conte quantos valores pares existem no vetor. 8. Escreva um algoritmo que leia um vetor de 20 posições e mostre-o. Em seguida, troque o primeiro elemento com o último, o segundo com o penúltimo, o terceiro com o antepenúltimo, e assim sucessivamente. Mostre o novo vetor depois da troca. 9. Escrever um algoritmo que gera os 10 primeiros números primos acima de 100 e os armazena em um vetor de X(10) escrevendo, no final, o vetor X. 10. Escrever um algoritmo que lê 2 vetores X(10) e Y(10) e os escreve. Crie, a seguir, um vetor Z que seja a união de X com Y. 11. Escrever um algoritmo que lê 2 vetores X(10) e Y(10) e os escreve. Crie, a seguir, um vetor Z que seja a soma entre X e Y. 12. Escrever um algoritmo que lê 2 vetores X(10) e Y(10) e os escreve. Crie, a seguir, um vetor Z que seja o produto entre X e Y. 13. Faça um algoritmo que leia um vetor (A) de 100 posições. Em seguida, compacte o vetor, retirando os valores nulos e negativos. Coloque o resultado no vetor B. 14. Faça um algoritmo que leia um vetor de 500 posições de números reais e divida todos os seus elementos pelo maior valor do vetor. Mostre o vetor após os cálculos. 15. Uma locadora de vídeos tem guardado, em um vetor de 500 posições, a quantidade de filmes retirados por seus clientes durante o ano. Agora, esta locadora está fazendo uma promoção e, para cada 10 filmes retirados, o cliente tem direito a uma locação grátis. Faça um algoritmo que crie um outro vetor contendo a quantidade de locações gratuitas a que cada cliente tem direito. 92 Capítulo V - MATRIZES Matrizes, conjuntos, tabelas ou vetores multidimensionais são estruturas de dados similares ao vetor, com a diferença que podem ter várias dimensões. Cada célula (componente) de uma matriz será identificada por seu nome e pelos índices que representarão suas dimensões. Trabalharemos com matrizes de duas ou três dimensões. V.1) DECLARAÇÃO DE MATRIZES Em pseudocódigo as declarações podem ser representadas como: DECLARE <nome>(<tamanho da primeira dimensão, tamanho da segunda dimensão, ... >) COMO <tipo> Onde tipo pode ser: inteiro, real, caractere, lógico. <nome> = nome do identificador < tamanho da primeira dimensão > = define tamanho da primeira dimensão. < tamanho da segunda dimensão > = define tamanho da segunda dimensão, etc. Exemplo: DECLARE A(3,10) COMO INTEIRO NOME A TIPO VETOR INTEIRO VALOR 10 Posição 2,5 Posição 1,1 Posição 2,1 Posição 1,2 Posição 1,10 Posição 3,10 93 V.2) COLOCANDO VALORES NAS MATRIZES Para a colocação de valores nos matrizes é necessário indicar que posição o valor será alocado. Para isso, é necessário utilizar índices (o numero de índices corresponderá a número de dimensões da matriz, uma matriz de duas dimensões necessitará de dois índices, uma matriz de três dimensões necessitará de três índices). Um índice é um valor inteiro deve ser maior ou igual a 1 e menor ou igual que a quantidade declarada, colocada entre os parênteses. O comando de atribuição, já estudado, pode ser utilizado para a atribuição de valores no vetor. Por exemplo: DECLARE A(3,10) COMO INTEIRO Matriz Índice referente a linha da matriz Valor A(1,3) ← 12 ( o valor 1 indica a posição linha na matriz e valor 3 posição coluna e o valor 12, o valor a ser alocado) Índice referente a coluna da matriz NOME A TIPO VETOR INTEIRO VALOR 10 12 Obs. Cada A(I,J) deve ser tratado como uma variável inteira "comum", isto é, pode-se realizar operações aritméticas, relacionais, etc. . Observe que ao colocar o valor no componente, ele pode ser manipulado diretamente, isto é, para apanhar o valor que está na matriz não é necessário ler o valor, basta acessá-lo diretamente. 94 Exemplo: A(3,10) ← A(3,10) + 1 A(1,1) ← A(3,10) - A(2,1) Caso seja escrito uma operação com componentes indefinida, será considerada uma operação errada, por exemplo: A(6,1) incorreta) ← A(1,5) - 32 ( o componente A(6,1) não existe logo a operação está V.2.1) Colocando valores no vetor através de leitura Além da atribuição é possível colocar os valores na matriz através da operação de leitura. DECLARE A(3,3) COMO INTEIRO ENTRADA DE DADOS: NOME A 32 TIPO VETOR INTEIRO LEIA A(2,2) VALOR 10 32 95 V.2.2) Colocando todos os valores no vetor através de leitura A) Um valor por linha (os dados na entrada não tem a forma de uma matriz) DECLARE A(3,3) COMO INTEIRO LEIA A(1,1) LEIA A(1,2) LEIA A(1,3) LEIA A(2,1) LEIA A(2,2) LEIA A(2,3) LEIA A(3,1) LEIA A(3,2) LEIA A(3,3) ENTRADA DE DADOS 12 20 15 1 4 3 5 8 2 OU NOME DECLARE A(3,3) COMO INTEIRO REPETIR I = 1,3,1 REPETIR J = 1,3,1 LEIA A(I,J) FIM-REPETIR FIM-REPETIR A TIPO VALOR VETOR 12 20 15 10 INTEIRO 1 4 3 5 8 2 B) Os valores organizados por linha (Forma Matricial: Forma Recomendada) DECLARE A(3,3) COMO INTEIRO LEIA A(1,1), A(1,2), A(1,3) LEIA A(2,1), A(2,2), A(2,3) LEIA A(3,1), A(3,2), A(3,3) ENTRADA DE DADOS 12 20 15 1 4 3 5 8 2 OU DECLARE A(3,3) COMO INTEIRO REPETIR I = 1,3,1 LEIA A(I,1), A(1,2), A(I,3) FIM-REPETIR OU DECLARE A(3,3) COMO INTEIRO REPETIR I = 1,3,1 LEIA A(I,J), J=1,3,1 FIM-REPETIR NOME A TIPO VALOR VETOR 12 20 15 10 INTEIRO 1 4 3 5 8 2 96 V.3) IMPRIMINDO A MATRIZ A) Um valor por linha ESCREVA ESCREVA ESCREVA ESCREVA ESCREVA ESCREVA ESCREVA ESCREVA ESCREVA A(1,1) A(1,2) A(1,3) A(2,1) A(2,2) A(2,3) A(3,1) A(3,2) A(3,3) REPETIR I = 1,3,1 REPETIR J = 1,3,1 ESCREVA A(I,J) FIM-REPETIR FIM-REPETIR 12 20 15 1 4 3 5 8 2 B) Os valores organizados por linha (Forma Matricial: Forma Recomendada) ESCREVA ESCREVA ESCREVA A(1,1), A(1,2), A(1,3) A(2,1), A(2,2), A(2,3) A(3,1), A(3,2), A(3,3) OU DECLARE A(3,3) COMO INTEIRO REPETIR I = 1,3,1 ESCREVA A(I,1), A(1,2), A(I,3) FIM-REPETIR NOME A TIPO VALOR VETOR 12 20 15 10 INTEIRO OU DECLARE A(3,3) COMO INTEIRO REPETIR I = 1,3,1 ESCREVA A(I,J), J=1,3,1 FIM-REPETIR 1 4 3 5 8 2 12 20 15 1 4 3 5 8 2 97 V.4) Exercícios Resolvidos 1. Escreva um algoritmo para ler uma matriz (5,5) de números inteiros e imprimi-los acompanhados de sua média aritmética. DECLARE A(5,5), I, SOMA, J COMO INTEIRO DECLARE MEDIA COMO REAL REPETIR I = 1,5,1 LEIA A(I,J), J = 1,5,1 ESCREVA A(I,J), J = 1,5,1 FIM-REPETIR SOMA ← 0 REPETIR I = 1,5,1 REPETIR J = 1,5,1 SOMA ← SOMA + A(I,J) FIM-REPETIR FIM-REPETIR MEDIA ← SOMA / 25 ESCREVA A(I), MEDIA 2. Escreva um algoritmo para ler uma matriz (3,3) de números inteiros e imprimi-los e imprimir os valores pares indicando a linha, coluna da matriz. DECLARE A(3,3), I, J COMO INTEIRO REPETIR I = 1,3,1 LEIA A(I,J), J = 1,3,1 ESCREVA A(I,J), J = 1,3,1 FIM-REPETIR REPETIR I = 1,3,1 REPETIR J = 1,3,1 SE ( MOD( A(I,J), 2) = 0 ) THEN ESCREVA A(I,J), ‘ E PAR E ESTA NA POSICAO LINHA= ’,I, ‘E COLUNA =’, J FIM-SE FIM-REPETIR FIM-REPETIR 98 3. Escreva um algoritmo para ler uma matriz (3,3) de números inteiros e imprimi-los e crie um vetor com os valores impares e imprima o vetor. DECLARE A(3,3), I, J, B(9), K COMO INTEIRO REPETIR I = 1,3,1 LEIA A(I,J), J = 1,3,1 ESCREVA A(I,J), J = 1,3,1 FIM-REPETIR K←0 REPETIR I = 1,3,1 REPETIR J = 1,3,1 SE ( MOD( A(I,J), 2) # 0 ) THEN K← K+1 B(K) ← A(I,J) FIM-SE FIM-REPETIR FIM-REPETIR REPETIR I = 1,K,1 ESCREVA B(K) FIM-REPETIR 4. Escreva um algoritmo que leia duas matrizes M(3,4) e N(4,2) e cria uma matriz que seja o produto matricial de M por N;. Nota: A(3,4) X B(4,2) = C(3,2), em geral A(M,N) X B(N,K) = C(M,K), onde cada elemento de C é definido como: n c(r , s ) = ∑ arixbis i =1 O elemento de C na posição r,s é obtido considerando-se a linha r da primeira matriz e a coluna s da segunda matriz e somando-se os produtos de elementos correspondentes da linha r e coluna s. DECLARE A(3,4), B(4,2) , C(3,2) R,S, SOMA, I COMO INTEIRO REPETIR I = 1,3,1 LEIA A(I,J), J = 1,4,1 ESCREVA A(I,J), J = 1,3,1 FIM-REPETIR 99 REPETIR I = 1,4,1 LEIA B(I,J), J = 1,2,1 ESCREVA B(I,J), J = 1,3,1 FIM-REPETIR REPETIR R = 1,3,1 (fixa a linha da primeira matriz) REPETIR S = 1,2,1 (fixa a coluna da segunda matriz) SOMA ← 0 REPETIR I = 1,4,1 (varia os elementos para multiplicação) SOMA ← SOMA + A(R,I) * B(I,S) FIM- REPETIR C(R,S) ← SOMA FIM-REPETIR FIM-REPETIR REPETIR I = 1,3,1 ESCREVA C(I,S), S = 1,2,1 FIM-REPETIR V.5) EXERCÍCIOS PROPOSTOS 1. Faça um algoritmo que leia uma matriz 15 X 15 de reais e calcule a soma dos elementos da diagonal secundária. 2. Escreva um algoritmo que leia um número inteiro A e uma matriz V 30x30 de inteiros. Conte quantos valores iguais a A estão na matriz.. 3. Escreva um algoritmo que lê uma matriz M(5,5) e calcula as somas: a) da linha 4 de M b) da coluna 2 de M c) da diagonal principal d) da diagonal secundária e) de todos os elementos da matriz M Escrever essas somas e a matriz. 4. Elaborar um algoritmo que lê duas matrizes M(4,6) e N(6,4) e cria uma matriz que seja: b) a soma de M com N; c) a diferença de M com N; Escrever as matrizes lidas e as calculadas. 100 4. Elaborar um algoritmo que lê uma matriz M(6,6) e um valor A e multiplica a matriz M pelo valor A e coloca os valores da matriz multiplicados por A em um vetor de V(36) e escreve no final o vetor V. 6. Escrever um algoritmo que lê uma matriz M(10,10) e a escreve. Troque, a seguir: a) a linha 2 com a linha 8 b) a coluna 4 com a coluna 10 c) a diagonal principal com a diagonal secundária d) a linha 5 com a coluna 10. Escreva a matriz assim modificada. 7. Faça um algoritmo que leia uma matriz 20x15 de inteiros. Calcule e mostre a soma das linhas pares da matriz. 8. Faça um algoritmo que leia uma matriz 20x20 de reais e some cada uma das linhas, armazenando o resultado da soma em um vetor. A seguir, multiplique cada elemento pela soma da sua linha. Mostre a matriz resultante. 9. Faça um algoritmo que leia uma matriz 50x50 de números reais e encontre o maior valor da matriz. 10. Faça um algoritmo que leia uma matriz 50x50 de números reais e encontre o maior valor da matriz. A seguir, multiplique cada elemento da diagonal principal pelo maior valor. Mostre a matriz após as multiplicações 101