Baixe o app para aproveitar ainda mais
Prévia do material em texto
Algoritmos e Estruturas de Dados I ALGORITMOS E ESTRUTURAS DE DADOS I Tecnologias de Informação e Comunicação na Educação Professor Antonio Maria Pereira de Resende Tutora Profa Ana Rubélia Mendes de Lima Resende Lavras/MG 2011 � ALGORITMO E ESTRUTURAS DE DADOS I 71 INTRODUÇÃO AO CURSO � 71.1 Algoritmo � 101.2 Estrutura de Dados � 121.3 Algoritmo e Estrutura de Dados � 131.4 Orientações para um Melhor Aprendizado de AED � 142 CONSTRUÇÃO DE ALGORITMOS � 142.1 Notações para Construção de Algoritmos � 142.1.1 Notação em Descrição Narrativa � 142.1.2 Notação Gráfica � 162.1.3 Notação em Pseudocódigo � 172.1.4 EXERCÍCIOS PROPOSTOS � 182.2 Teste de Mesa � 192.3 Fases de desenvolvimento de um Algoritmo � 213 ALGORITMOS EM PSEUDOCÓDIGO � 213.1 Estrutura Básica de um Algoritmo � 224 DECLARAÇÃO DE VARIÁVEIS E CONSTANTES � 224.1 Variáveis � 244.1.1 Tipos de Dados � 254.1.2 EXERCÍCIO PROPOSTO � 254.2 Constantes � 264.3 Regras para nomear Variáveis, Constantes e Algoritmos � 274.3.1 EXERCÍCIOS PROPOSTOS � 285 COMANDOS SEQUENCIAIS � 285.1 Comando de Entrada � 285.2 Comando de Saída � 295.3 Comando de Atribuição � 305.4 Boas Práticas para os Comandos Sequenciais � 315.5 Operadores e Funções pré-definidas � 315.5.1 Operadores Aritméticos � 325.5.2 Funções pré-definidas � 355.5.3 EXERCÍCIOS PROPOSTOS � 376 COMANDOS CONDICIONAIS � 376.1 Operadores Relacionais e Lógicos � 386.1.1 Operadores Relacionais � 406.1.2 Operadores Lógicos � 426.1.3 EXERCÍCIO PROPOSTO � 426.2 Comando Condicional Simples SE ... ENTÃO � 436.3 Comando Condicional Composto SE ... ENTÃO ... SENÃO � 466.4 Indentação � 486.5 Aninhamento de Comandos SE...ENTÃO...SENÃO � 526.6 Comando Condicional ESCOLHA ... CASO � 576.6.1 EXERCÍCIOS PROPOSTOS � 597 COMANDOS DE REPETIÇÃO � 618 Comando de Repetição: Número Definido de Repetições e Teste de Condição no Início � 618.1 Comando de Repetição PARA ... FAÇA � 719 Comando de Repetição: Número Indefinido de Repetições e Teste de Condição no Início � 719.1 Comando de Repetição ENQUANTO ... FAÇA � 729.1.1 Peculiaridades Importantes do ENQUANTO..FAÇA � 749.1.2 Loop Infinito � 8110 Comando de Repetição: Número Indefinido de Repetições e Teste de Condição no Final � 8110.1 Comando de repetição REPITA ... ATÉ � 8210.1.1 Peculiaridades Importantes do REPITA ... ATÉ � 8410.1.2 Loop Infinito � 9210.1.3 EXERCÍCIOS PROPOSTOS � 9311 VARIÁVEIS COMPOSTAS HOMOGÊNEAS: VETORES E MATRIZES � 9512 VETORES � 9612.1 Representação Gráfica de um Vetor � 9612.2 Declaração de Vetor � 9712.3 Manipulação de Dados de um Vetor � 9712.4 Operações de Entrada e Saída de dados em um Vetor � 9912.5 Processamento dos Dados de um Vetor � 10012.5.1 EXERCÍCIOS PROPOSTOS � 10113 MATRIZES � 10113.1 Representação Gráfica de uma Matriz � 10213.2 Declaração de Matriz � 10413.3 Manipulação de Dados de uma Matriz � 10413.4 Operações de Entrada e Saída de dados em uma Matriz � 10713.5 Processamento dos Dados de uma Matriz � 11113.5.1 EXERCÍCIOS PROPOSTOS � 11214 VARIÁVEIS COMPOSTAS HETEROGÊNEAS: REGISTROS E VETOR DE REGISTROS � 11214.1 Declaração de Registro � 11314.2 Representação Gráfica de um Registro � 11314.3 Manipulação de Dados de Variável de Registro � 11414.4 Operações de Entrada e Saída Utilizando Registros � 11514.5 VETOR DE REGISTROS � 11614.6 Representação Gráfica de Vetor de Registro � 11714.7 Manipulação de Dados do Vetor de Registro � 11714.8 Operações de Entrada e Saída Utilizando Vetor de Registros � 12014.8.1 EXERCÍCIOS PROPOSTOS � 12115 MODULARIZAÇÃO: PROCEDIMENTOS E FUNÇÕES � 12215.1 PROCEDIMENTOS � 12315.1.1 Declaração de Procedimentos � 12515.1.2 Procedimentos sem Passagem de Parâmetros � 12615.1.3 Procedimentos com Passagem de Parâmetros � 12715.2 FUNÇÕES � 12815.2.1 Declaração de Funções � 12915.2.2 Funções sem Passagem de Parâmetros � 13015.2.3 Funções com Passagem de Parâmetros � 13515.3 Escopo de Variáveis – Variáveis Locais e Globais � 13615.4 PASSAGEM DE PARÂMETROS POR VALOR E POR REFERÊNCIA � 13615.4.1 Passagem de Parâmetros por Valor � 13815.4.2 Passagem de Parâmetros por Referência � 14116 RECURSIVIDADE � 14516.1.1 EXERCÍCIOS PROPOSTOS � 14617 ÍNDICE DE FIGURAS � 15218 ÍNDICE DE TABELAS � 15319 RELAÇÃO DE ÍCONES � � � INTRODUÇÃO AO CURSO O conteúdo de Algoritmo e Estrutura de Dados – AED é ensinado em cursos técnicos e universitários como Ciência da Computação, Sistemas de Informação, Engenharias (de Software, Elétrica, Civil, Mecânica, Mecatrônica,...), Programação, Analista de Sistemas, Informática, dentre outros. A profundidade e abrangência do conteúdo dependem do foco de cada curso. Geralmente, o conteúdo de AED divide-se em disciplinas denominadas AED I, AED II e AED III nos cursos relacionados à computação. O aprendizado é acumulativo, sendo impossível aprender AED II ou AED III sem aprender AED I, ou aprender AED III sem aprender AED I e AED II. O ensino das disciplinas de AED desenvolve o raciocínio lógico dos alunos, capacitando-os para programação de computadores. A seguir, o termo Algoritmo e o termo Estrutura de Dados são explicados separadamente, facilitando a compreensão de seus significados. Algoritmo A primeira palavra relacionada a Algoritmo, algorism, foi criada no século 9 pelo matemático persa islão Abu Abdullah Muhammad ibn Musa Al-Khwarizmi. Inicialmente, o termo foi criado para nomear regras que ensinavam como realizar cálculos usando números hindu-arábicos. No século 18, o termo foi traduzido para o Latin Europeu como Algorithm, e seu significado passou a abranger todo procedimento definido (claro, preciso) para resolver problemas e executar tarefas. Um exemplo clássico de algoritmo pertence ao matemático Euclides, pai da geometria Euclidiana, que desenvolveu um algoritmo para calcular o Máximo Divisor Comum – MDC, replicado a seguir: Divida o número a por b, o resto é r; Troque a pelo valor de b; Troque b pelo valor de r; Continue os passos acima até não mais conseguir dividir. Neste caso, a é o MDC. Figura 1 - Algoritmo de Euclides para calcular o MDC � Executando o algoritmo de Euclides... Tabela 1 - Execução do algoritmo de Euclides para calcular o MDC dos números 48 e 30 a b Resto r Passos do Algoritmo 48 30 18 Passo 1- Divide-se 48 por 30 e o resto coloca-se na coluna do resto; 30 18 12 Passo 2 - Valor de b colocado em a; Passo 3 - Valor de r colocado em b;. Passo 1- Divide-se novamente a por b colocando o resto em r; 18 12 6 Passo 2 - Valor de b colocado em a; Passo 3 - Valor de r colocado em b;. Passo 1- Divide-se novamente a por b colocando o resto em r; 12 6 0 Passo 2 - Valor de b colocado em a; Passo 3 - Valor de r colocado em b;. Passo 1- Divide-se novamente a por b colocando o resto em r; 6 0 -X- Passo 2 - Valor de b colocado em a; Passo 3 - Valor de r colocado em b;. Passo 1- Divide-se novamente a por b colocando o resto em r. Como não é mais possível dividir, então a (=6) é o MDC de 48 e 30. Existem outros algoritmos conhecidos na matemática como: de Arquimedes para calcular uma aproximação do número Pi; e de Erastótenes para encontrar números primos (Crivo de Erastótenes). Veja a seguir algoritmo de Erastótenes para encontrar números primos de 2 até N e sua execução. Definir o valor limite N; Encontrar a raiz quadrada de N, guardar a parte inteira denominando-a de raiz; Criar uma lista (vetor) com os números de 2 até N; Para i de 2 até a raiz faça Se i não estiver riscado na lista, riscar todos os seus múltiplos de i² até N; Pronto, após finalizar o passo 4, os números não riscados formam a lista de números primos de 2 a N. Figura 2 - Algoritmo Erastótenes para encontrar números primos de 2 até N. � Executando o algoritmo de Erastótenes... Tabela 2 - Execução do algoritmo de Erastótenes para encontrar os números primos de 2 a 30 Passo 1)N = 30; Passo 2) Raiz (30) = 5,477. Para guardar parte inteira então raiz = 5; Passo 3) Lista de números de 2 até 30 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 Passo 4) Para i de 2 até a raiz faça Passo 4.1) para i=2, riscar todos os seus múltiplos de i²(=4) até N se não estiver riscado 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 Passo 4.1) i=3, riscar todos os seus múltiplos de i² (=9)até N se não estiver riscado 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 Passo 4.1) i=4, riscar todos os seus múltiplos de i²(=16) até N se não estiver riscado 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 Passo 4.1) i=5, riscar todos os seus múltiplos de i² (=25) até N se não estiver riscado 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 Passo 5) Pronto, os números não riscados formam a lista de números primos de 2 a N. 02 03 05 07 11 13 17 19 23 29 Os números primos de 2 a 30 são: 02, 03, 05, 07, 11, 13, 17, 19, 23 e 29. Portanto, pode-se afirmar que algoritmo é um conjunto de passos (instruções) bem definidos e executados em uma sequencia lógica para se produzir um resultado esperado. Assim, se alguém deseja calcular o MDC de dois números, basta aplicar o algoritmo de Euclides. Se alguém deseja encontrar os números primos em um intervalo de 2 até N, deve aplicar o algoritmo de Erastótenes. Outro exemplo prático de algoritmo é uma receita de bolo. Uma receita de bolo define os passos a seguir para se fazer um bolo. Há receitas com passos bem definidos e quando seguidos obtêm-se o bolo. Estas receitas podem ser chamadas de algoritmo. Entretanto, há também receitas escritas de maneira inadequada, ou faltando quantidade de um ingrediente, ou faltando o tempo que determinada massa fica no fogo. Tais receitas não podem ser chamadas de algoritmo, por não possuírem passos (instruções) bem definidos para se atingir o fim esperado. Em computação dizemos que instrução é uma informação que indica uma ação a ser executada, por exemplo, por um computador. Deve-se considerar que uma instrução executada em separado, pode não ter sentido. Para obtermos o resultado desejado precisamos executar um conjunto de instruções na ordem correta. Exemplificando... Para fazer um bolo é preciso executar uma sequencia de instruções, como: separar os utensílios e ingredientes a serem utilizados, pré-aquecer o forno e medir os ingredientes, untar a forma, bater os ovos etc. Entretanto estas instruções devem ser executadas em uma ordem adequada – não se deve colocar o fermento após o bolo assado. Estrutura de Dados A melhor maneira de explicar uma estrutura de dados é compreender um formulário em papel contendo seus campos, tamanho de cada campo e o tipo de dado a ser armazenado. Exemplificando... Na Figura 3, observa-se um formulário que deve ser preenchido para renovação ou assinatura nova de uma revista. Nele, observa-se a necessidade de preencher campos como: - Informar se é assinatura nova ou renovação; - Informar o código do assinante, se assinante; - Informar qual revista e o prazo da assinatura; - Informar o valor a ser pago; dentre outros. O usuário sabe que não pode colocar o valor em uma data, nem uma data em um campo de nome, por exemplo. E que as informações devem ser preenchidas de acordo com o tamanho do campo. Isto é uma estrutura de dados, onde se tem um conjunto de dados com tamanho e tipo de dado para cada campo bem definidos. Figura 3 – Formulário de Assinatura de Revista Um exemplo de uma estrutura de dados para Cliente é: Cliente { nome [30]: literal; // salario: real; idade: inteiro; } Figura 4 – Estrutura de dados Cliente � Entretanto, dependendo da empresa, a estrutura de dados para Cliente poderia ser: Cliente { nome [50]: literal; telefone: literal; sexo: caractere; credito: real; } Figura 5 – Variação de uma Estrutura de dados Cliente De acordo com o problema e necessidade da empresa, as estruturas de dados são planejadas e definidas. Considerando que o computador é utilizado para informatizar as empresas e seus processos, então existe a necessidade de capturar as informações existentes e automatizá-las. Para isto, utilizam-se os conceitos de Estrutura de Dados para representar, armazenar, processar e recuperar estas informações nos computadores. Em AED, ensinam-se várias Estruturas de Dados e o aluno deverá aprender aplicá-las corretamente dependendo da finalidade desejada. Algoritmo e Estrutura de Dados Sabendo que: - Algoritmo é um conjunto de passos bem definidos para se atingir um resultado; e - Estrutura de dados define um conjunto de dados, seu tamanho e tipo de dado para cada campo; Pode-se afirmar então que Algoritmo e Estrutura de Dados é o conjunto de conhecimento que permite representar a informação no computador associado a um conjunto de passos bem definidos que propiciam realizar operações com estas informações. No mercado de trabalho, diariamente, profissionais da área de computação e sistemas de informação deparam-se com problemas. Para cada um dos problemas, ele deve definir: - a(s) melhor(es) estrutura de dados aplicável na solução do problema (Estrutura de Dados); - construir um conjunto de passos para realizar operações com os dados (Algoritmo). Após construir o(s) algoritmo(s) e definir a(s) estrutura(s) de dados, o profissional está apto para programar o sistema que será entregue ao cliente. Portanto, não é possível programar sem saber algoritmos e estrutura de dados. O profissional deve ter o raciocínio lógico que o capacita a pensar como o computador. Após muita prática, os profissionais conseguem programar o computador sem ter de formalmente definir o algoritmo, pois seu raciocínio já está treinado para observar o problema, desenvolver o algoritmo mentalmente e programá-lo no computador. Ressalta-se que se o profissional não souber resolver o problema manualmente, ele não conseguirá desenvolver o algoritmo, pois não será capaz de definir os passos que descrevem a solução. Quando o profissional se encontrar nesta situação, caso comum, ele deve estudar e aprender a desenvolver a solução manualmente para depois descreva o algoritmo. Quando estiver desenvolvendo um sistema para uma empresa, ele deve procurar as pessoas que realizam aquela atividade manualmente, a fim de aprender e passar o conhecimento daquelas pessoas para a forma de algoritmo e programá-lo. Algoritmo e Estrutura de Dados caracterizam-se por não possuir solução única. Se 30 pessoas forem convidadas para desenvolver algoritmos para determinado, espera-se 30 soluções distintas. Orientações para um Melhor Aprendizado de AED Treine - Quanto mais exercícios o aluno resolver, maior será sua capacidade na resolução de novos problemas. Deve-se exercitar algoritmos diariamente, resolvendo, pelo menos, 2 ou 3 problemas, pois somente a prática propiciará o aprendizado; Teste - Sempre realize o teste de mesa para verificar se o algoritmo está correto; Relembre - Não vá para a aula sem leia/revisar o conteúdo de aulas anteriores. O conhecimento é acumulativo, é imprescindível saber os conceitos anteriores para aprender a aplicar os novos; Seja responsável - Faça você mesmo os exercícios e busque exercícios complementares em livros na biblioteca. Lembre-se que cada um possui a sua própria lógica,produzindo algoritmos distintos. Só aprende quem faz por si mesmo, não há outra forma de aprendizado. Evite resolver uma grande lista de exercícios em apenas um dia; e Aprenda - Enquanto você não souber resolver um problema manualmente, você será incapaz de descrever o algoritmo. Se pedir para um aluno, que cozinha, construir um algoritmo para fritar um bife, ele o fará. Porém, se pedir a ele para calcular a derivada dupla de uma equação ordinária de 3ª ordem e ele não souber resolver, então o aluno deverá estudar para aprender como se faz o cálculo para depois desenvolver um algoritmo. � CONSTRUÇÃO DE ALGORITMOS Para começar a construir algoritmos, deve-se primeiro aprender as notações mais utilizadas para descrevê-los e conhecer as fases para seu desenvolvimento. Notações para Construção de Algoritmos Os três tipos de notações utilizadas para construir algoritmos são: descrição narrativa, gráfica e pseudocódigo. O profissional deve escolher uma das três formas, sendo o pseudocódigo o mais utilizado na computação. Notação em Descrição Narrativa Consiste em descrever os passos de uma solução utilizando linguagem natural. Exemplificando... Algoritmo para fritar um ovo: Passo 1 – Pegar a frigideira e colocar óleo; Passo 2 – Levar a frigideira ao fogo; Passo 3 – Pegar o ovo, quebrá-lo e colocar seu conteúdo na frigideira; Passo 4 – Esperar a clara ficar branca e virar o ovo; e Passo 5 – Se preferir, você pode estourar a gema para deixá-la firme. Figura 6 - Exemplo de algoritmo usando Descrição Narrativa Notação Gráfica Consiste em descrever os passos de uma solução utilizando a forma gráfica. Existem diferentes formas de representar um algoritmo graficamente, sendo o fluxograma, também conhecido como diagrama de blocos, a mais difundida. O conjunto de símbolos descritos a seguir é utilizado para representar uma seqüência lógica (algoritmo) denominada Fluxograma. Tabela 3 – Simbologia utilizada em Fluxogramas Indica o início e o fim de um algoritmo. � Indica a direção do processamento. Utiliza-se para conectar os símbolos. Representa um processo a ser executado, cálculos e atribuição de valores. Indica entrada de dados. No interior devem constar informações de variáveis a serem lidas. Símbolo utilizado para representar saída de dados. Indica decisão segundo uma condição e possibilidade de desvio. Deve haver uma entrada, uma pergunta e duas saídas, conhecidas por VERDADEIRO ou FALSO. Indica uma conexão entre pontos distantes de um algoritmo. Indica uma rotina a ser chamada. No final da rotina (subprograma) a execução continua do ponto onde foi realizada a chamada. Exemplificando... � Figura 7 - Fluxograma Fritar um ovo � Figura 8 - Fluxograma Média Notação em Pseudocódigo Consiste em descrever os passos de uma solução utilizando um conjunto de instruções pré-definidas. O pseudocódigo utilizado no Brasil denomina-se portugol e possui um conjunto de instruções utilizáveis para a descrição da solução do problema. A seguir, utiliza-se o portugol para leia duas notas de um aluno, calcular a média e responder se ele está aprovado ou reprovado, considerando média mínima de 60% para aprovação. � Exemplificando... Algoritmo media; Declare N1,N2 : inteiro; media : real; Inicio Leia (N1); Leia (N2); media ( (N1+N2) / 2; SE (media >= 60) ENTÃO Escreva (“Aluno aprovado com média: ”, media); SENÃO Escreva (“Aluno reprovado com média: ”, media); FIMSE; Fim. Figura 9 - Algoritmo Média em Pseudocódigo EXERCÍCIOS PROPOSTOS Elabore um algoritmo, usando descrição narrativa: para alguém sair da faculdade e chegar até sua casa. para trocar uma lâmpada. � Teste de Mesa Após desenvolver um algoritmo ele deverá sempre ser testado. Este teste é chamado de Teste de Mesa e implica em seguir as instruções do algoritmo de forma precisa para verificar se o procedimento utilizado está correto ou não. Exemplificando... # Algoritmo x y z Saída algoritmo soma; Declare x, y, z : inteiro; Inicio Leia(x); 8 Leia(y); 7 z ( x + y; 15 Escreva(z); 15 Fim. Figura 10 – Execução de Teste de Mesa do Algoritmo Soma Cria-se uma tabela sendo que: na primeira coluna insere-se o programa, na segunda coluna até a penúltima inserem-se os dados de entrada (x e y) e processamento (z), e na última coluna os dados de saída. Após montar a tabela, basta leia cada uma das linhas do programa e fazer o que se pede. A primeira linha apenas determina o nome do programa (soma). A segunda linha determina os dados de entrada e processamento. A terceira linha informa onde o corpo principal do algoritmo começa. Na quarta linha, o comando leia(x) implica em se determinar o valor de x que, neste caso, foi atribuído o valor 8. Na quinta linha, o comando leia(y) implica em se determinar o valor de y que, neste caso, foi atribuído o valor 7. Na sexta linha, o comando z( x + y implica em somar os dois números e guardar o resultado em z. O valor guardado foi 15. Na sétima linha, o comando ESCREVA determina que o valor z deve ser escrito na tela do computador. E a última linha encerra o algoritmo. � Fases de desenvolvimento de um Algoritmo Um algoritmo é uma seqüência lógica de instruções que podem ser executadas, portanto, qualquer tarefa que siga determinado padrão pode ser descrita por um algoritmo. Por exemplo: - Como fazer Arroz Doce ou então - Calcular o Saldo de um Estoque. Para evitar erros no desenvolvimento de um algoritmo, deve-se conhecer algumas fases fundamentais para sua construção. Compreensão do problema: Compreenda o problema a ser resolvido, destacando os pontos principais; Definição das Entradas: Identificar os dados que devem ser solicitados e lidos pelo computador para a resolução do problema; Definição do Processamento: Definir quais operações devem ser realizadas nos dados de entrada, gerando os dados de saída; Definição das Saídas: Identificar quais dados o usuário espera receber do computador após ter fornecido os dados de entrada; Construção do algoritmo: Escolher a notação descritiva, gráfica ou pseudocódigo e construir o algoritmo; e Teste do algoritmo: Executar o algoritmo passo a passo, aplicando, por exemplo, o teste de mesa. � Exemplificando... Problema: Calcule e mostre a média aritmética simples das notas de um aluno, sabendo que foram realizadas 4 provas P1, P2, P3 e P4. 1ª Fase – Compreensão do Problema: Devo obter as 4 notas do aluno, somá-las e dividir a soma por 4. O resultado é a média. Logo, eu conheço a solução do problema e se é possível resolve-lo manualmente, então deve-se buscar um algoritmo para ele. 2ª Fase – Definição das Entradas: Os dados de entrada são P1, P2, P3 e P4. 3ª Fase – Definição do Processamento: O procedimento será somar os 4 dados de entrada (P1, P2, P3, P4) e dividir seu resultado por 4. 4ª Fase – Definição das Saídas: O dado de saída será a média final. 5ª Fase – Construção do Algoritmo: Será utilizada a notação em Pseudocódigo e o algoritmo é: Algoritmo em Pseudocódigo Algoritmo media; Declare P1, P2, P3, P4, media: real; Inicio Leia(P1); Leia(P2); Leia(P3); Leia(P4); Media ( (P1+ P2+P3+ P4) / 4; Escreva(“Média: ”, media); Fim. 6ª Fase – Teste do Algoritmo: Realizando o teste de mesa do algoritmo construído: # Algoritmo P1 P2 P3 P4 Media Saída 1 Algoritmo media; 2 Declare P1, P2, P3, P4, media: real; 3 Inicio 4 Leia(P1); 8 5 Leia(P2); 7 6 Leia(P3); 5 7 Leia(P4); 10 8 Media ( (P1+ P2+P3+ P4) / 4; 7,5 9 Escreva(“Média:”, media); Média: 7,5 10 Fim. ALGORITMOS EM PSEUDOCÓDIGO Estrutura Básica de um Algoritmo Um algoritmo possui a estrutura básica representada a seguir. As representações indicadas pela notação < > implicam que devem ser substituídas e o programador deve determinar o valor. As representações indicadas pela notação [ ] implicam em estrutura facultativa, podendo-se fazer um algoritmo sem utilizá-la. Utiliza-se duas barras “//” para comentar uma linha. Para comentar um bloco que possua mais de uma linha, utiliza-se barra e asterisco “/*” para abrir o comentário de bloco e asterisco e barra “*/” para fechar o comentário de bloco. Algoritmo <nome do algoritmo>; [Const <declare uma constante>;] [Declare <declare uma variável>;] Início <comandos>; Fim. /*Este algoritmo calcula a área de um círculo qualquer e imprime o resultado */ Algoritmo AreaCirculo; // π*r2 Declare area, R: real; Início R ( 2; // raio recebe o valor 2 area ( 3,1415 * (R * R); Escreva (area); // mostra na tela a área Fim. Figura 11 - Estrutura básica de um algoritmo Figura 12 - Exemplo de um algoritmo O detalhamento para se construir o algoritmo e quais comandos podem ser usados consiste no objetivo do restante deste livro. � DECLARAÇÃO DE VARIÁVEIS E CONSTANTES Declaração de variáveis e constantes é utilizada para informar ao computador quais dados serão utilizados e necessários para resolver-se um problema. Para um computador calcular o salário de um funcionário, ele precisa de dados como salário base do funcionário, número de horas extras, total de adiantamentos, dentre outros créditos e descontos que compõem uma folha de pagamento. Cada um desses valores representa um dado a ser armazenado e processado no computador, o qual os transforma em salário bruto e líquido. Algoritmos podem possuir dados declarados como variáveis ou constantes, explicados a seguir. Variáveis Declara-se uma variável para determinar seu nome (salário, data, idade, nome, ...) e o tipo de dado (número inteiro, número real, um caractere, texto, ...) a ser fornecido pelo usuário ou calculado pelo algoritmo. Se o algoritmo precisa armazenar a idade de uma pessoa, então é preciso declarar no algoritmo uma variável chamada idade do tipo inteiro. Se é preciso armazenar o salário de um funcionário, então deve-se declarar no algoritmo a variável salário do tipo real. A declaração das variáveis idade e salário é exemplificada a seguir. � Algoritmo teste; Declare idade : inteiro; salario : real; INICIO <comandos>; FIM. Figura 13 - Exemplo de declarações de variáveis � Uma variável está associada a uma posição de memória, e seu conteúdo pode ser alterado durante a execução de um programa. Embora uma variável possa assumir diferentes valores, ela só pode armazenar um valor por vez. Algoritmo teste2; Declare salario, comissao: real; Início salario ( 1200,00; Escreva (“Entre com valor da comissão: “); Leia (comissao); salario ( salario + comissao; Escreva (“O salário atual é:”, salario); Fim; Figura 14 - Exemplo Alteração de valor de variável Representação de criação de variáveis na memória do computador e armazenamento das informações. 1 2 3 4 5 6 7 1 700,00 2 3 1200,00 4 Após a execução da instrução: salario ( salario + comissao; 1 2 3 4 5 6 7 1 700,00 2 3 1900,00 4 Figura 15 – Representação de criação de variáveis na memória do computador � Tipos de Dados O computador processa dados de vários tipos, podendo realizar as mais diferentes operações com dados, inteiros, reais, irracionais, racionais, etc. O programador deve saber quais os dados e tipos de dados ele precisa para resolver um problema. Para conseguir estas informações, pode-se consultar o cliente que solicitou o programa e leia os formulários utilizados na empresa. Por meio destes formulários é possível determinar os campos importantes e seus tipos de dados. Em um formulário, não se deve escreva uma data em um campo que se pede um valor monetário. Não se deve escreva um número no campo que pede o nome da pessoa. Não se deve escreva um valor monetário onde pede-se uma idade. Isto gera erro no preenchimento de formulários porque o tipo de dado esperado possui um formato e o usuário escreve outro. No computador não é diferente. Deve-se definir o tipo de dado para cada um dos campos. O computador acusará erro, por exemplo, se você tentar escreva 12/03/2017 em uma idade. Idade não aceita barras e é composto por apenas um número inteiro, ao contrário da data que possui 2 números inteiros. O contrário também gera erro, pois um número inteiro não satisfaz a necessidade de 3 números inteiros. Algoritmos e programas de computadores exigem que o programador estabeleça (defina) cada um dos dados e o Tipo de Dado que ele utiliza para resolver um problema. Os Tipos de Dados utilizados para construção de algoritmos são inteiro, real, literal, caractere e lógico. Cada um deles explicado a seguir. Tabela 4 – Tipo de Dados Tipo Descrição Exemplo Inteiro Armazena um número inteiro 1; 345; -237; 91; 125874; Real Armazena um número real 2,0; 21,987; - 237,2; 0,9854; Caractere Armazena um único (1) caractere podendo ser letras maiúsculas, minúsculas, números (não utilizados para cálculos) e caracteres especiais como (&, #, $, @, [, {, dentre outros). O caractere sempre é representado entre aspas simples. ‘1’; ‘L’; ‘a’; ‘!’; ‘%’; ‘~’ Literal Armazena um conjunto de caracteres como um nome de pessoa, data, cor, descrição de um produto, etc. Uma literal sempre é representado entre aspas simples ou dupla. “PEDRO”; “Rua das Flores”; “São Paulo”; “Amarelo”; “Pacote de Macarrão 500gr”; “21/12/2011” Lógico Armazena o valor verdadeiro ou falso V; F; Verdadeiro; Falso Podem-se fazer operações com os tipos de dados. Os números podem ser somados, subtraídos dentre outras operações aritméticas. Literais podem ter parte de seus caracteres retirados, outros inseridos etc. � EXERCÍCIO PROPOSTO Relacione o Tipo de Dado e o valor armazenável nele. Utiliza-se a vírgula para separar as casas decimais e o ponto a casa de milhares: 1-Inteiro 2-Real 3-Caractere 4-Literal 5-Lógico ( ) ‘K’ ( ) V ( ) ‘V’ ( ) 2,1345 ( ) ‘mecanismo de destruição’ ( ) 325.472 ( ) ‘21/02/2548’ ( ) ‘02/02/22’ ( ) ‘*’ ( ) -352,254 ( ) ‘Roxo’ ( ) falso ( ) -95 ( ) ‘-95’ ( ) ‘6’ ( ) ‘234’ ( ) ‘a’ ( ) ‘aaaa’ ( ) ‘$’ ( ) ‘UFLA’ ( ) ‘325.654.387,35987412569874521’ ( ) 325.654.387,35987412569874521 Constantes Denomina-se como constante dados que não se modificam no decorrer do algoritmo, por isto o nome de constante. Exemplos clássicos de constantes são número Pi, número de Euler (e), aceleração da gravidade, dentre outros. Qualquer dado que possua um valor que não varie deve ser declarado como uma constante. A declaração das constantes Pi e ‘e’ (número de Euler) é exemplificado no algoritmo a seguir. Algoritmo teste; Const pi = 3,1415; e = 2,71828; Declare idade : inteiro; salario : real; Início <comandos>; Fim. Figura 16 - Exemplo de declarações de constantes A representação de constantes e variáveis na memória do computador é idêntica e segue a forma mostrada na Figura 15. Regras para nomear Variáveis, Constantes e Algoritmos As regras para nomear variáveis, constantes e algoritmos são apresentadas a seguir: O nome deve estar relacionado ao conteúdo armazenado (idade, nome, sexo); Devemcomeçar com uma letra ou sublinhado “_“; O restante pode ser letra ou número ou sublinhado; Não usar espaços em brancos; Não usar caracteres especiais do tipo @, +, -, %, !, #, $, &, *, (, ^ , }, dentre outros; Não usar palavras reservadas da linguagem de programação; e O uso de letras maiúsculas ou minúsculas é indiferente no algoritmo. Entretanto, dependendo da linguagem de programação utilizada, maiúsculo ou minúsculo determinam variáveis e constantes distintas. Tabela 5 - Exemplo de nomes válidos e inválidos Nomes Válidos Nomes Inválidos TOTAL 3ARQUIVO - começa com dígito UMNOMEMUITOCOMPRIDOEDIFICILDELER X+Y - não permitido lado2 For - palavra reservada para comando UM_NOME_MUITO_COMPRIDO_MAS_FACIL_DE_LEIA Until - palavra reservada para comando L123 Media(76) - não é permitido parênteses duas_palavras Data de nascimento - não é permitido espaço � EXERCÍCIOS PROPOSTOS Diferencie constantes de variáveis. Exemplifique a declaração de uma constante e de uma variável: Deseja-se armazenar nota, nome, número da matrícula, sexo, data de nascimento, valor da mensalidade de um aluno e se ele é bolsista. Declare as variáveis em portugol. Assinale com C os nomes CORRETOS para algoritmos, variáveis e constantes e com I os INCORRETOS. Explique o que está errado nos incorretos. � ( ) 34 - 23 ( ) nome aluno ( ) _d20 ( ) Minimo ( ) aula_03 ( ) SALARIO ( ) nota*final ( ) km/h ( ) “nota” ( ) cia3a3 ( ) xyz ( ) Data_Nascimento ( ) achou! ( ) A + B ( ) 3notas ( ) nota_bimestral ( ) e-mail ( ) estado_civil( ) ( ) comissao% ( ) nota_bimestral ( ) 360hs � � COMANDOS SEQUENCIAIS Os comandos sequenciais são as estruturas mais simples utilizadas na construção de algoritmos e subdividem-se em comandos de entrada, saída e atribuição. Ela é formada por um conjunto de instruções (ou comandos) que executadas em uma seqüência linear de cima para baixo e da esquerda para a direita, ou seja, da mesma forma como foram escritas. Comando de Entrada Em diversas soluções de problemas necessita-se de dados informados pelo usuário para serem processados pelo algoritmo, sendo o teclado a entrada padrão do computador. O Comando de Entrada permite obter estes dados externos ao algoritmo e armazená-los em variáveis. Em pseudocódigo o comando de entrada é representado pela palavra Ler ou Leia. Exemplificando... ... leia (raio); // O valor digitado pelo usuário será armazenado na variável raio. ... leia (nome); // Os caracteres digitados pelo usuário serão armazenados na variável nome. ... Comando de Saída O Comando de Saída é utilizado para apresentar dados e mensagens ao usuário. Em pseudocódigo o comando de saída é representado pela palavra Escrever ou Escreva. Exemplificando... Escreva (“Digite um valor:”); // Mostra uma mensagem ao usuário. Escreva (x); // Mostra o valor armazenado na variável x. Escreva (“O aluno “, nome, “está aprovado”); /*Mostra a mensagem “O aluno “, logo depois o valor armazenado na variável nome e em seguida o restante da mensagem “está aprovado” */ Comando de Atribuição O Comando de Atribuição é utilizado para atribuir valor ou operações a uma variável, sendo representado pelo símbolo “(”. Exemplificando... x ( “José”; y ( 2.5; y ( y + 1; teste ( falso; media ( (N1 + N2 + N3 + N4) / 4; raio ( 2; area ( PI * (raio * raio); perimetro ( 3* PI * raio; Utilizamos as palavras INÍCIO e FIM para delimitar o bloco de sequência, conforme sintaxe a seguir. Exemplificando... Algoritmo Comandos_Sequenciais; Declare X, Y : inteiro; A, B : real; nome : literal; INÍCIO Escreva (“Entre com o valor de X: ”) ; Leia (X); Escreva (“Entre com o valor de A: ”); Leia (A); Escreva (“Entre com o seu nome: ”); Leia (nome); Y ( X * 3; B ( (A * 2,4) / 3; Escreva (nome “, os valores de X e A agora valem: “,Y, B); FIM. Figura 17 – Exemplo de Comandos Sequenciais Observe que todos os comandos entre INÍCIO e FIM estão com a margem mais a direita, para facilitar a visualização. Isto se chama indentação e será explicada em mais detalhes em outra seção. O mesmo pode ser observado com 3 linhas de declaração de variáveis, cuja margem foi empurrada para a direita, sendo um subnível de Declare. Boas Práticas para os Comandos Sequenciais SEMPRE Escreva uma mensagem ao usuário antes de qualquer comando de entrada, informando o dado a ser fornecido e a unidade de medida. Caso contrário, o usuário verá o cursor piscando na tela e não saberá o que fazer. ERRADO CERTO // Cursor fica piscando e usuário não sabe o que fazer // pois não foi enviada mensagem a ele Leia(nome); // Envia mensagem e lê o nome Escreva(“Nome: ”); Leia(nome); // Usuário não sabe se temperatura é C, F ou K. Escreva(“Digite a temperatura: ”); Leia(temp); // Envia mensagem e lê o salário Escreva(“Digite a temperatura em Celsius: ”); Leia(temp); Ao imprimir o resultado de um processamento na tela do computador, SEMPRE mande uma mensagem informando a unidade de medida e o que o dado representa. Caso contrário, o usuário verá um dado na tela e não saberá do que se trata. ERRADO CERTO // Usuário sabe que o dado é sobre altura, mas não // sabe se é em metros, centímetros etc. Escreva(“Altura: ”, altura); // Informar a unidade de medida e o que o dado // representa Escreva(“Altura: “, altura, “ (metros)”); // Usuário vê um número na tela e não sabe do que se trata. Escreva(temperatura); // Informar a temperatura explicitando ser em Celsius. Escreva(“A temperatura atual é: ”, temp, “C”); O computador trabalha com dados numéricos sem conhecer a unidade de medida ou o dado representado. Assim, quando você digita 30 no teclado, o computador não sabe se 30 é a idade (anos), a temperatura (C,F, K), a dimensão (mm, cm, m, km,...), pressão etc. Se você pedir para ele subtrair a idade da pressão, ele o fará, pois para ele tudo é número. Cabe ao programador gerenciar e fazer corretamente as contas, ficando atento as unidades de medida. � Operadores e Funções pré-definidas Os operadores são meios pelo qual incrementamos, decrementamos, comparamos e avaliamos dados dentro do computador. Temos três tipos de operadores: Aritméticos, Relacionais e Lógicos. Os Operadores Relacionais e Lógicos serão apresentados na seção 6.1.1 e 6.1.2 respectivamente. Vejamos agora os operadores Aritméticos. Operadores Aritméticos Os Operadores Aritméticos são utilizados para obter resultados numéricos. Além da adição, subtração, multiplicação e divisão, podem utilizar também o operador de multiplicação para exponenciação. Os símbolos para os Operadores Aritméticos são: Tabela 6 – Operadores Aritméticos + Adição - Subtração * Multiplicação / Divisão * * ou ^ Exponenciação Hierarquia das Operações Aritméticas Na resolução das operações aritméticas os operadores possuem uma hierarquia de prioridade ou regra de precedência. Tabela 7 – Hierarquia das Operações Aritméticas 1º ( ) parênteses 2º Exponenciação 3º Multiplicação ou divisão (o que vier primeiro) 4º Adição ou subtração (o que vier primeiro) � Exemplificando... area_triangulo ( (Base * Altura) / 2; X ( 5*(7-9)+3*7; Z ( 1 + 7 * 2 ** 3 –1; media ( (P1+ P2) / 2; Funções pré-definidas Uma função tem por objetivo retornar um valor ou informação. As funções pré-definidas ou bibliotecas de funções armazenam um conjunto de funções que podem ser usadas pelos programas. A Tabela 8 apresenta alguns tipos de funções pré-definidas para a utilização na construção de algoritmos. Entretanto, cada linguagem possui suas próprias funções pré-definidas e como veremos adiante no tópico 15.2 o programador pode criar funções conforme necessidade.Tabela 8 – Funções pré-definidas ABS(x) Retorna o valor absoluto de x TRUNC(x) ou INT(x) Retorna a parte inteira de x FRAC(x) Retorna a parte fracionária de x SQRT(x) Retorna a raiz quadrada de x ROUND(x) Retorna o valor arredondado de x SQR(x) Eleva o valor de x ao quadrado x MOD y Retorna o resto da divisão entre x e y x DIV y Retorna o valor inteiro do resultado da divisão de x por y CONCAT(x) Concatena (junta) uma sequencia de caracteres SIN(x) Retorna o Seno de x COS(x) Retorna o Coseno de x TAN(x) Retorna a Tangente de x � Exemplificando... A ( ABS (-4); // A ( 4 A ( TRUNC (2,78); // A ( 2 A ( INT (4,15); // A ( 4 A ( INT (-4,15); // A ( - 4 A ( FRAC (3.65); ;// A ( 0.65 A ( FRAC (-3.65); // A ( - 0.65 A ( SQRT(9); // A ( 3; A ( ROUND (2.78); // A ( 3 A ( ROUND (-1,4); // A ( -1 A ( SQR(2); // A ( 4; A ( 7 MOD 2 ; // A ( 1; A ( 6 MOD 2 ; // A ( 0; A ( 7 DIV 2; // A (3,5; A ( 18 DIV 3; // A (6; A ( CONCAT(“abc”, “def”) ; // A ( abcdef; A ( CONCAT(“ana”, “rubelia”) ; // A ( anarubelia; � Exercícios Resolvidos: Elabore um algoritmo para calcular o perímetro de um círculo dado o seu raio, considerando que Perímetro = 2 * π * Raio. Algoritmo perimetro_circulo; Const pi = 3,1415; Declare peri, raio : real; INÍCIO Escreva (“Programa para calcular o perímetro de um círculo dado seu raio”); Escreva (“Entre com o valor do raio: ”); Leia (raio); peri ( 2 * pi * raio; Escreva (“O perímetro do círculo segundo o raio “, raio, “informado é: ”, peri); FIM. Figura 18 – Algoritmo para calcular o perímetro de um círculo Elabore um algoritmo para calcular consumo médio de um veículo, conhecidos a distância total e a quantidade de combustível consumido para percorrer tal distância. Algoritmo calc_consumo; Declare consumo, distancia, qde_comb: real; INÍCIO Escreva (“Programa para calcular o consumo médio de combustível”); Escreva (“Informe a distancia em Km percorrida pelo veiculo: ”); Leia (distancia); Escreva (“Informe a quantidade em litros de combustível gasto: ”); Leia (qde_comb); consumo ( qde_comb/ distancia; Escreva (“O consumo médio de combustível para a distância de”, distancia, “km foi de:” , consumo, “litros/km.”); Escreva (“O carro fez ”, distancia/qde_comb, “ km por litro!”); FIM. Figura 19 – Algoritmo para calcular o consumo de combustível Elabore um algoritmo para leia uma quantidade de chuva dada em polegadas e apresente o equivalente em milímetros, considerando que 1 polegada = 25,4 milímetros (mm). Algoritmo chuva_em_mm; Declare pol, mm: real; INÍCIO Escreva (“Programa para converter um volume de chuva de polegadas para milímetros.”); Escreva (“Informe a quantidade de chuva em polegadas: ”); Leia (pol); mm(pol * 25,4; Escreva (“volume de chuva em milímetros é: “, mm, “mm”); FIM. Figura 20 – Algoritmo para calcular o consumo de combustível � EXERCÍCIOS PROPOSTOS Para as variáveis a seguir e seus respectivos valores, B ( 2; X ( 3 determine o resultado das expressões aritméticas a seguir: a) X * B b) - (X ** B) c) (-X) ** B d) (2*B)/X^X Escreva em linguagem algorítmica as expressões aritméticas: Dada a declaração de variáveis: Declare A, B, C : inteiro; X, Y, Z : real; NOME, RUA : literal; L1, L2 : lógico; Classifique as expressões a seguir segundo o tipo de dado resultante da(s) operação(ões), em I (inteiro), R (real), L (literal), B (lógico) ou ND (quando não for possível definir): � ( ) A + B + C ( ) A + B + Z ( ) NOME + RUA ( ) A B ( ) A Y ( ) NOME RUA ( ) A + B / C ( ) A + X / Z ( ) A + Z / A ( ) A B = L1 ( ) (A = B) ( ) X + Y / Z ( ) X = Z / A ( ) L1 ** L2 ( ) A + B / L2 ( ) X < L1 / RUA � Elabore um algoritmo para calcular o estoque médio de uma peça, considerando que EstoqueMedio = (QuantidadeMínima + QuantidadeMáxima) /2. Faça um Teste de Mesa com dados definidos por você. Elabore um algoritmo para leia uma temperatura em graus Fahrenheit, calcule e exiba a temperatura convertida em graus Centígrados, considerando que C = (F - 32) * ( 5 / 9 ). Elabore um algoritmo que leia o salário base de um funcionário, o número de horas extras feitas, o valor de cada hora extra e o auxilio refeição. Imprima na tela o valor do salário bruto (sem descontos). Na sequencia calcule o desconto do INSS de 10% sobre o salário bruto e mostre o total a receber. Elabore um algoritmo que leia três números e apresente o resultado da soma das combinações destes números. Elabore um algoritmo para leia uma temperatura em graus Celsius, calcule e exiba a temperatura convertida em graus Kelvin, considerando que K = C + 273. Elabore um algoritmo que dada a cotação do dólar e um valor em dólares, converta este valor em Real e mostre o resultado. Elabore um algoritmo que leia valores para X e Y respectivamente e calcule: O resto da divisão de X / 3 X3 – 4 (X * Y) 2 XY + 2 Raiz quadrada de Y � COMANDOS CONDICIONAIS Os comandos condicionais (decisão ou desvio) permitem a escolha de uma instrução ou grupo de instruções a ser executado quando determinada condição é ou não satisfeita como exemplificado na figura a seguir. Figura 21 – Fluxograma de Comando Condicional SE ENTÃO SENÃO ... se (tiver dinheiro suficiente) então almoçarei em um bom restaurante; senão comerei um lanche; fim-se; ... Figura 22 – Exemplo de Comando Condicional SE ENTÃO SENÃO Neste capítulo, apresentam-se Operadores Relacionais, Operadores Lógicos e Comandos Condicionais “SE ... ENTÃO”, “SE ... ENTÃO ... SENÃO” e “ESCOLHA ... CASO”. Operadores Relacionais e Lógicos Os Operadores Relacionais e Lógicos são utilizados para comparar e avaliar dados utilizados nos comandos condicionais. Desta forma, será possível criar algoritmos que representem regras do mundo real como: - Se salário for maior que 2400 reais então desconte 15% do imposto de renda na fonte; - Se salário menor que 3 salários mínimos então salário família por dependente será 30 reais, senão 10 reais. - Se comprador é de Minas Gerais então aplique 18% ICMS, senão aplique 12% de ICMS. � Operadores Relacionais Os Operadores Relacionais são utilizados para comparar caracteres e números. Estes operadores sempre retornam valores lógicos (Verdadeiro ou Falso / True ou False). Os símbolos para os Operadores Relacionais são: Tabela 9 – Operadores Relacionais = Igual a <> ou # Diferente de > Maior que < Menor que > = Maior ou igual a < = Menor ou igual a Exemplificando... Tabela 10 – Operadores Relacionais aplicados ao tipo INTEIRO Dados os valores das variáveis do tipo INTEIRO X = 3 e Y = 7, vide os resultados das expressões a seguir: Expressão Resultado X = Y FALSO X <> Y VERDADEIRO X > Y FALSO X < Y VERDADEIRO X > = Y FALSO X < = Y VERDADEIRO . Analogamente, o raciocínio é aplicado para variáveis do tipo reais, caractere e lógico. Tabela 11 – Operadores Relacionais aplicados ao tipo REAL Dados os valores das variáveis do tipo REAL X = 4.52 e Y = 4.60, vide os resultados das expressões a seguir: Expressão Resultado X = Y FALSO X <> Y VERDADEIRO X > Y FALSO X < Y VERDADEIRO X > = Y FALSO X < = Y VERDADEIRO . Tabela 12 – Operadores Relacionais aplicados ao tipo CARACTERE Dados os valores das variáveis do tipo CARACTERE X = ‘a’ e Y = ‘d’, vide os resultados das expressões a seguir: Expressão Resultado X = Y FALSO X <> Y VERDADEIRO X > Y FALSO X < Y VERDADEIRO X > = Y FALSO X < = Y VERDADEIRO . Para saber se um caractere é maior que outro, consideram-se oscaracteres em ordem alfabética e que os caracteres minúsculos são maiores que os maiúsculos. Além disto, ‘a’ é diferente de ‘A’, implicando que caracteres maiúsculos são diferentes de caracteres minúsculos, ainda que represente a mesma letra no alfabeto. Veja exemplo a seguir: Tabela 13 – Operadores Relacionais aplicados a CARACTERES maiúsculo e minúsculo Dados os valores das variáveis do tipo CARACTER X = ‘A’ e Y = ‘a’, vide os resultados das expressões a seguir: Expressão Resultado X = Y FALSO X <> Y VERDADEIRO X > Y FALSO X < Y VERDADEIRO X > = Y FALSO X < = Y VERDADEIRO . Tabela 14 – Operadores Relacionais aplicados ao tipo LITERAL Dados as variáveis do tipo LITERAL X = ‘Ana’ e Y = ‘antonio’, vide os resultados das expressões a seguir: Expressão Resultado X = Y FALSO X <> Y VERDADEIRO X > Y FALSO X < Y VERDADEIRO X > = Y FALSO X < = Y VERDADEIRO . Para comparar literais, usa-se as mesmas regras de caracteres, seguindo um processo análogo a procura de palavra em um dicionário. Assim compara-se a primeira letra de X, ‘A’, com a primeira letra de Y, ‘a’, assume-se que X é menor que Y, pois letras maiúsculas são menores que as minúsculas. Outro exemplo para melhor compreensão seria comparar X=’Ana’ e Y=’Antonio’. Compara-se a primeira letra das duas palavras. Observa-se que elas são idênticas e representam a letra ‘A’ maiúscula. Portanto, deve-se comparar a segunda letra das duas palavras. Observa-se que também são idênticas e representam a letra ‘n’ minúscula. Na sequência, deve-se comparar a terceira letra das duas palavras. Observa-se que a terceira letra de X é ‘a’ e a terceira letra de Y é ‘t’, como as duas são minúsculas e ‘a’ aparece primeiro que ‘t’ no alfabeto, então pode-se afirmar que X é menor que Y. Operadores Lógicos Quando se escreve expressões lógicas, elas podem ser simples ou compostas. Seu programa pode utilizar expressões simples como “Se salário >2400 então...”. Porém, existem problemas que exigem expressões lógicas mais complexas como: “Se salário < 2400 E dependentes > 3 então...”. Outro exemplo seria “Se (matrícula=’12345’ OU matricula=’23156’ então...”. Observe que existem casos que várias condições com operadores relacionais precisam ser inseridas na mesma condição. Para fazer isto, necessita-se dos operadores lógicos E, OU e NÃO. Os Operadores Lógicos são utilizados para combinar resultados de expressões, retornando se o resultado final é verdadeiro ou falso. � Tabela 15 – Operadores Lógicos E Uma expressão E é verdadeira se todas as condições forem verdadeiras OU Uma expressão OU é verdadeira se pelo menos uma condição for verdadeira NÃO Uma expressão NÃO inverte o valor da expressão ou condição, se verdadeira inverte para falsa e vice-versa Tabela verdade genérica... Dados os valores de x e y, observe os resultados: Operador E - a resposta da operação é verdade se x e y forem verdadeiras. x y x E y V V V V F F F V F F F F Operador OU - a resposta da operação é verdade se pelo menos um dos elementos for verdadeiro. x y x OU y V V V V F V F V V F F F Operador NÃO - Se ela for verdade, torna-se falsa, e vice-versa. x NÃO x V F F V . � EXERCÍCIO PROPOSTO Dados X(2, A(5, B(4 e C(3 e D(6, determine os resultados lógicos das expressões, indicando se são VERDADEIRAS ou FALSAS: (X >= 2) (X < 1) E (B >=D) (A + B) > 10 OU (A + B) = (C + D) (A >= C) E (D >= C) NÃO (X > 3) (X < 1) E NÃO (B > D) NÃO (D < 0) E (C > 5) NÃO (X > 3) OU (C < 7) (A > B) OU (C > B) Comando Condicional Simples SE ... ENTÃO No SE ... ENTÃO determinada que se uma condição for satisfeita então o bloco de comando(s) é executado. ... SE (condição) ENTÃO comando 1; comando 2; comando 3; FIMSE; ... Figura 23 – Sintaxe do Comando Condicional Simples Exemplificando... Faça um algoritmo que leia a média de um aluno e escreva na tela “Aluno Aprovado” caso a média dele seja igual ou superior a 6. ... SE (media>=6) ENTÃO escreva (“Aluno Aprovado”); FIMSE; ... Figura 24 – Exemplo de Algoritmo usando Comando Condicional Simples O trecho do algoritmo mostrado na Figura 1 apresenta a utilização do comando SE...ENTÃO... para o enunciado apresentado. Se a média for maior ou igual a 6 então o comando escreva é executado. Caso a média seja menor que 6, o comando escreva não é executado. Comando Condicional Composto SE ... ENTÃO ... SENÃO No SE/ENTÃO/SENÃO se a condição for verdadeira o bloco referente aos comandos 1 e 2 será executado. Caso contrário serão executados os comandos 3 e 4. ... SE (condição) ENTÃO comando 1; comando 2; SENÃO comando 3; comando 4; FIMSE; ... Figura 25 – Sintaxe do Comando Condicional Composto Exemplificando... Faça um algoritmo que leia a média de um aluno e escreva na tela se ele foi aprovado ou reprovado. ... SE (media>=6) ENTÃO escreva (“Aluno Aprovado”); SENÃO escreva (“Aluno Reprovado”); FIMSE; ... Figura 26 – Exemplo de Algoritmo usando Comando Condicional Composto Na condição exemplificada, se for verdadeira, executa o comando APROVADO, caso contrário executa o comando REPROVADO. � Veja na sequencia, exemplos utilizando os Operadores Lógicos E, NÃO e OU. ... SE (media >= 6) E ( frequencia > 75% ) ENTÃO escreva (“Aluno Aprovado”) SENÃO escreva (“Aluno Reprovado”); FIMSE; ... Figura 27 – Exemplo de Algoritmo usando Comando Condicional Simples ... SE (NÃO tiver dinheiro) ENTÃO almoçarei em casa; SENÃO irei a um restaurante; FIMSE; ... Figura 28 – Exemplo de Comando Condicional SE ENTÃO SENÃO, usando operador NÃO ... SE (tiver dinheiro suficiente) OU (terminado o trabalho) ENTÃO irei ao cinema; SENÃO ficarei em casa; FIMSE; ... Figura 29 – Exemplo de Comando Condicional SE ENTÃO SENÃO, usando operador OU � Exercícios Resolvidos: Elabore um algoritmo para calcular as raízes de uma equação de segundo grau, dados os fatores a, b e c, Considerando , se d menor que zero as raízes não podem ser calculadas (não existem raízes reais). Senão, é possível calcular as duas raízes. ... leia (a); leia (b); leia (c); d ( b * b – 4 * a * c; SE (d < 0) ENTÃO Escreva (“Não existem raízes reais”); SENÃO raiz1 ( ( -b + SQRT(d) ) / (2 * a ); raiz2 ( ( -b – SQRT(d) ) / (2 * a ); Escreva ( raiz1 ); Escreva ( raiz2 ); FIMSE; ... Faça um algoritmo que receba um número inteiro e verifique se esse número é par ou ímpar. algoritmo par_impar; declare num, r : inteiro; INICIO escreva (“Este algoritmo verifica se um número é par ou ímpar.”); escreva (“Digite um número inteiro: ”); leia (num); r ( num MOD 2; SE (r = 0) ENTÃO escreva(“Este número é par”); SENÃO escreva(“Este número é ímpar”); FIMSE; FIM. � Indentação Indentação (palavra adaptada do inglês, indentation) é uma técnica de recuo que aplicada ao código de um programa facilita a visualização da organização dos comandos e sua estrutura. Seu uso iniciou-se antes da programação com o nome de “tabulação de texto”, sendo utilizada rotineiramente na escrita de livros, panfletos, cartazes etc. Exemplificando... INSTITUTO PARA PROMOÇÃO DA FAMÍLIA As inscrições no curso de Maturidade Familiar devem ser feitos na secretaria do Instituto Para Promoção da Família de 3 a 11 de março. Os documentos necessários são: PAI Cópia do RG Cópia do título de reservista Cópia do último holerite MÃE Cópia do Certificado do Curso “A Arte De Ser Mãe” Cópia do RG Comprovantes Médicos com menos de 1ano: Papa Nicolau Mamografia FILHOS Certidão de nascimento Figura 30 – Exemplo de Indentação em Texto Comum Na Figura 30, nota-se que a margem do primeiro parágrafo não é seguida em todo texto. Há dois níveis de indentação, além do alinhamento natural da margem esquerda do primeiro parágrafo. O primeiro nível refere-se às palavras PAI, MÃE E FILHOS, o qual foi empurrado para a direita, não seguindo o alinhamento original da margem esquerda. O segundo nível, empurrado mais para a direita do primeiro nível, refere-se aos comprovantes médicos a serem entregues pela MÃE. Observa-se que as palavras “Papa Nicolau” e “Mamografia” estão em um alinhamento mais interno da folha. A indentação auxiliando no entendimento de quais documentos devem ser entregues por cada um dos participantes segundo seu papel na família (pai, mãe ou filho). Um texto pode ter vários níveis de indentação e deve-se garantir uniformidade da margem para os textos de mesmo nível. Portanto, os textos selecionados para compor o segundo nível de indentação devem seguir o mesmo alinhamento de margem, sendo proibida variação de margem para o mesmo nível. Quando se deseja criar um novo nível de indentação, basta empurrar um pouco mais a margem para a direita. Na prática, a técnica de indentação permite associar visualmente informações específicas as informações genéricas. Os conceitos de indentação aprendidos no comando SE...ENTÃO...SENÃO serão utilizados em outros comandos e estruturas. Exemplificando... Faça um algoritmo que leia um número e responda se ele é maior que 10. � Algoritmo Maior10; declare x: inteiro; INÍCIO Escreva (“Digite um número: ”); Leia (x); SE (x>10) ENTÃO escreva (x, “ é maior que 10”); escreva (“Os comandos da indentação do ENTÃO foram executados”); escreva(“A indentação facilita visualizar quais comandos estão dentro do ENTÃO”); SENÃO escreva (x, “ é menor que 10”); escreva (“Os comandos da indentação do SENÃO foram executados”); escreva(“A indentação facilita visualizar quais comandos estão dentro do SENÃO”); FIMSE; FIM. Figura 31 – Exemplo de Indentação Adote o hábito de utilizar a técnica de indentação mesmo que ela pareça difícil no início. Após dominar seu uso, o programador observará que sua utilização facilita o trabalho, aumenta a produtividade, facilita o entendimento do código, além de ser exigido nas empresas. � Aninhamento de Comandos SE...ENTÃO...SENÃO A técnica de aninhamento de comando refere-se ao ato de utilizar um comando dentro de outro comando. Portanto, diz-se que há aninhamento de comandos SE...ENTÃO...SENÃO, quando utiliza-se um comando SE...ENTÃO...SENÃO dentro de outro comando SE...ENTÃO...SENÃO. Não há limite de aninhamentos, podendo-se ter vários comandos SE...ENTÃO...SENÃO um dentro do outro quantas vezes forem necessárias para se implementar o algoritmo solicitado. Até o momento, explicou-se aninhamento para o comando SE...ENTÃO...SENÃO, porém este conceito também é válido para outros diversos outros comandos que ainda serão ensinados. Exemplificando... Faça um algoritmo que leia dois números inteiros e responda qual deles é o maior ou se eles são iguais. Algoritmo Maior; declare x, y: inteiro; INÍCIO escreva (“Este algoritmo apresenta qual de 2 números inteiros, lidos do teclado, é o maior.”); escreva (“Digite o primeiro número: ”); leia (x); escreva (“Digite o segundo número: ”); leia (y); SE (x>y) ENTÃO escreva (x,“ é maior que “, y); SENÃO SE (x<y) então escreva (y,“ é maior que “, x); SENÃO escreva (x,“ é igual a “, y); FIMSE; FIMSE; FIM. Figura 32 – Exemplo de Aninhamento de Comandos SE...ENTÃO...SENÃO, Algoritmo Maior A Figura 32 apresenta um algoritmo contendo 1 aninhamento. Nela observa-se que há um comando SE...ENTÃO...SENÃO dentro do bloco de um SENÃO. Assim, se há um comando SE...ENTÃO...SENÃO dentro de outro comando SE...ENTÃO...SENÃO, diz-se ter aninhamento. O aninhamento pode ocorrer apenas com SE...ENTÃO e dentro dele outro SE...ENTÃO. Outra forma seria ter um comando SE...ENTÃO dentro de um bloco SENÃO, bem como outras variações. Havendo um comando dentro do outros, afirma-se ter aninhamento. � Exercícios Resolvidos: Faça um algoritmo que leia a média final e frequencia de um aluno e imprima na tela se o aluno está REPROVADO POR FREQUENCIA, APROVADO, RECUPERAÇÃO ou REPROVADO POR NOTA, sabendo que: Aluno precisa ter 75% ou mais de frequencia nas aulas, caso contrário ele está reprovado por falta, independente da nota. Aluno está aprovado se a Média for maior ou igual a 60 pontos. Aluno está de recuperação se a média for maior ou igual a 30 e menor que 60. Aluno está reprovado por nota se a média for menor que 30 pontos. Algoritmo Aprovacao_Aluno; Declare media, frequencia: real; INÍCIO leia(frequencia); leia (media); SE ( frequencia >= 0.75 ) ENTÃO SE (media >= 60) ENTÃO escreva("Aluno APROVADO!") SENÃO SE ( media >= 30 ) ENTÃO escreva( "Aluno deve fazer RECUPERAÇÃO!"); SENÃO escreva( "Aluno REPROVADO POR NOTA INSUFICIENTE!" ); FIMSE; FIMSE; SENÃO escreva("Aluno REPROVADO POR FALTAS!"); FIMSE; FIM. Figura 33 – Exemplo de Aninhamento de Comandos SE...ENTÃO...SENÃO, Algoritmo Aprovacao_Aluno � Faça um algoritmo para leia três números inteiros X, Y e Z e verificar se eles formam um triângulo, imprimindo na tela "X, Y e Z não formam um triângulo" ou "X, Y e Z formam um triângulo". Se as medidas formarem um triângulo, imprimir na tela se o triângulo é equilátero, isósceles ou escaleno. Algoritmo triangulo; Declare x, y, z: inteiro; INICIO leia ( x, y, z ); SE ( x+y>z ) E ( x+z>y ) E ( y+z>x ) ENTÃO escreva (“X, Y e X formam um triângulo“ ); SE( x=y ) E ( y=z ) E (x=z) ENTÃO escreva (“Triângulo Equilátero“); SENÃO SE ( x=y ) OU ( x=z ) ou ( y=z ) ENTÃO escreva (“Triângulo Isósceles“); SENÃO SE ( x<>y ) E ( y<>z ) E ( x<>z ) ENTÃO escreva (“Triângulo Escaleno“); FIMSE; FIMSE; FIMSE; SENÃO escreva (“X, Y e X não formam um Triângulo”); FIMSE; FIM. Figura 34 – Exemplo de Aninhamento de Comandos SE...ENTÃO...SENÃO, Algoritmo triangulo � Comando Condicional ESCOLHA ... CASO O comando condicional ESCOLHA ... CASO possibilita comparar o valor de uma variável/expressão em várias opções. A Figura 35 representa que <variável> assumirá um valor e caso o valor seja igual ao valor em opção1, então os comandos1 serão executados. Caso contrário, <variável> será comparada com o valor em opção2 e, no caso de ser igual, executará comandos2, senão comparará com as demais opções existentes. Se uma opção for satisfeita, então os comandos referente aquela opção é executada e todas as demais opções são ignoradas. SHAPE \* MERGEFORMAT ��� Figura 35 – Fluxograma de Comando Condicional ESCOLHA CASO � ESCOLHA <variável> CASO 1: < comandos >; CASO 2: < comandos >; CASO 3: < comandos >; ... CASO n: < comandos >; CASO CONTRÁRIO: < comandos >; FIMESCOLHA; Figura 36 – Sintaxe do Comando Condicional ESCOLHA CASO O comando ESCOLHA...CASO, em algumas situações, pode ser usado para simplificar a utilização do SE ... ENTÃO ... SENÃO, facilitando a leitura do algoritmo. Na Figura 37, apresenta-se um trecho de algoritmo aplicando o comando SE...ENTÃO...SENÃO e, em seguida, na Figura 38, apresenta-se a mesma lógica escrita com o comando ESCOLHA...CASO. ... leia (cargo); SE (cargo=1) ENTÃO escreva("Presidente") SENÃO SE (cargo=5) ENTÃO escreva("Chefe de Seção") SENÃO SE (cargo=8) ENTÃO escreva("Auxiliar de Serviços Gerais") SENÃO escreva("Esta operação não permite cargos diferentes de 1, 5 e 8"); FIMSE; FIMSE;FIMSE; ... Figura 37 – Algoritmo Aplicando o Comando SE...ENTÃO...SENÃO Observa-se na Figura 37 um trecho de algoritmo que solicita leia um valor para cargo. Se o usuário digitar o valor 1, então aparecerá na tela "Presidente". Se o usuário digitar o valor 5, então aparecerá na tela "Chefe de Seção". Se o usuário digitar o valor 8, então aparecerá na tela "Auxiliar de Serviços Gerais". Se o usuário digitar um valor diferente de 1, 5 ou 8, então aparecerá na tela "Esta operação não permite cargos diferentes de 1, 5 e 8". O algoritmo descrito na Figura 38 apresenta o mesmo algoritmo escrito com o comando ESCOLHA...CASO. Se o usuário digitar o valor 1, então o “CASO 1” será escolhido e aparecerá na tela "Presidente". Se o usuário digitar o valor 5, então o “CASO 5” será escolhido e aparecerá na tela "Chefe de Seção". Se o usuário digitar o valor 8, então o “CASO 8” será escolhido e aparecerá na tela "Auxiliar de Serviços Gerais". Se o usuário digitar um valor diferente de 1, 5 ou 8, então o “CASOCONTRARIO” será escolhido e aparecerá na tela "Esta operação não permite cargos diferentes de 1, 5 e 8". Ambos algoritmos tem a mesma funcionalidade, porém o algoritmo da Figura 38 possui uma estética que torna mais fácil a leitura e compreensão do código. ... leia (cargo); ESCOLHA (cargo) CASO 1: escreva("Presidente"); CASO 5: escreva("Chefe de Seção"); CASO 8: escreva("Auxiliar de Serviços Gerais"); CASOCONTRARIO escreva("Esta operação não permite cargos diferentes de 1, 5 e 8"); FIMESCOLHA; ... Figura 38 – Algoritmo Aplicando o Comando ESCOLHA...CASO O comando ESCOLHA... CASO possui variações na notação da cláusula CASO, descritas a seguir: Tabela 16 – Variação de Sintaxe para o Comando ESCOLHA...CASO Notação Descrição Caso 1: Verifica se o valor é 1 Caso 3..6: Verifica se o valor é um número entre 3 e 6. Logo, o valor pode ser 3,4,5 ou 6. Caso 2, 7, 21: Verifica se o valor é um dos valores contidos na lista 2, 7, 9, 21. Portanto, o valor pode ser 2 ou 7 ou 21. Ressalta-se que a sintaxe do comando ESCOLHA...CASO não aceita operadores relacionais como >,< , <=, etc. Portanto, se você quiser verificar se um valor de x>=10 e x=< 20, use a sintaxe “CASO 10..20” que denota um intervalo. ... Leia (opcao); ESCOLHA (opção) CASO 1: < comandos >; CASO 2, 4: < comandos >; CASO 3: < comandos >; CASO 5 ..10: < comandos >; CASO CONTRÁRIO: < comandos >; FIMESCOLHA; ... Figura 39 – Sintaxe do Comando Condicional ESCOLHA CASO – Outra sintaxe 2 Deve-se ressaltar também que o comando ESCOLHA...CASO analisa APENAS uma variável por vez, sendo permitido colocar ESCOLHA (SEXO) ou ESCOLHA(IDADE), mas nunca escreva ESCOLHA(SEXO, IDADE). Este último não é aceito pelo comando. Observa-se no Figura 39 diferença na sintaxe em “CASO 2, 4: ” e “CASO 5..10”. Quando se utiliza números separados por vírgula, isto implica que qualquer um dos números descritos serve. Portanto a linha “CASO 2,4: ” indica que se a opção digitada for 2 ou 4, os comandos dentro desta estrutura serão executados! A linha “CASO 5..10: ” indica que se a opção digitada for um valor variando de 5 até 10, inclusive extremidades, a comparação é verdadeira e, portanto, os comandos referentes ao CASO 5..10 serão executados. Exemplificando... No algoritmo a seguir o valor da variável mês é lido e testado. Caso o valor esteja entre os valores entre 1 a 12 é executado o comando correspondente a opção. Caso contrário é executado o comando que escreve mês inválido. � algoritmo descubra_mes; declare mes : inteiro; INICIO escreva (“Digite o número do mês: “); leia (mes); ESCOLHA (mes) CASO 1: escreva (“Janeiro“); CASO 2: escreva (“Fevereiro“); CASO 3: escreva (“Março“); ... CASO 12: escreva (“Dezembro“); CASO CONTRÁRIO: escreva (“Mês inválido!“); FIMESCOLHA; FIM. Figura 40 – Exemplo de Algoritmo usando Escolha Caso � Exemplificando... No algoritmo da Figura 41 o valor da variável idade é lido e testado. A mensagem enviada na tela corresponderá a idade digitada. � algoritmo faixa_etária; declare idade : inteiro; INICIO escreva (“Digite a idade em anos: “); leia (idade); ESCOLHA (idade) CASO 0..2: escreva (“Bebê“); CASO 3..9: escreva (“Criança“); CASO 10..19: escreva (“Adolescente”); CASO 20..30: escreva (“Jovem“); CASO 31..60: escreva (“Adulto“); CASO CONTRÁRIO: escreva (“Idoso“); FIMESCOLHA; FIM. Figura 41 – Exemplo de Algoritmo usando Escolha Caso � EXERCÍCIOS PROPOSTOS Dê os resultados das expressões contidas na tabela a seguir, utilizando os seguintes valores para as variáveis: Valor das variáveis Expressão Resultado X( 8; Y(10; Z(3; (X = Y) E (Y > Z) X(13; Y( 2; Z(5; (X <> Y) OU (Y < Z) X( 4; Y( 7; Z(9; NÃO (X > Y) X( 6; Y( 4; Z(4; (X < Y) E (Y > Z) X( ‘a’; Y( ‘k’; Z(’D’; (X >= Y) OU (Y = Z) X( “Rosana”; Y( “Roseane”; Z(”Rosária”; NÃO (X <= Y) Para as variáveis a seguir e seus respectivos valores: � a ( 1 b ( 2 c ( 3 x ( 3.0 y ( 2.0 z ( -1.0 L1 ( V nome ( “PEDRO” rua ( “PEDRINHO” L2 ( F � Determine o resultado das expressões a seguir: � a + c / b a + b + c c / b / a -x ** b - (x ** b) (-x) ** b nome + rua nome = rua L1 OU L2 (L1 E(NÃO L2)) (L2 E (NÃO L1)) (L1 E (NÃO L2)) OU (L2 E (NÃO L1)) (x -y) E (c - b) (c - 3 * a) (x + 2 * z) rua <> nome� � Elabore um algoritmo para receber 3 números e mostre o maior. Elabore um algoritmo para receber 2 números e execute as operações a seguir, segundo a escolha do usuário. Escolha do usuário Operação 1 Média entre os números digitados 2 Diferença do maior pelo menor 3 Produto entre os números digitados 4 Divisão do primeiro pelo segundo Elabore um algoritmo para receber 3 números e mostre-os em ordem crescente. Elabore um algoritmo que leia um número inteiro e mostre uma mensagem indicando se este número é par ou ímpar, e se é positivo ou negativo. Um banco concederá um crédito especial a seus clientes dependendo de seu saldo médio. 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 a seguir. Mostre uma mensagem informando o saldo médio e o valor do crédito. (use o comando ESCOLHA...CASO) Saldo Médio Percentual de 0 a R$ 200,00 nenhum crédito de R$ 201,00 a R$ 400 20% do valor do saldo médio de R$ 401,00 a R$ 600,00 30% do valor do saldo médio acima de R$ 601,00 40% do valor do saldo médio � COMANDOS DE REPETIÇÃO Para compreender a necessidade de comandos de repetição, é necessário examinar algumas solicitações que um cliente pode fazer. Imagine a solicitação de um algoritmo que imprima na tela a tabuada de 0 a 9 de um número fornecido pelo usuário. Assim, se o usuário digitar o número 3, então deverá sair na tela uma tabuada do número 3. A Figura 42 apresenta um algoritmo de tabuada sem utilizar comando de repetição. Algoritmo Tabuada_Sem_Comando_Repeticao; declare i, tab, num: inteiro; INICIO Escreva (“Fazer tabuada do número: ”) Leia (tab); Escreva ( “0 x ”, tab, “ = ”, 0 * tab ); Escreva ( “1 x ”, tab, “ = ”, 1 * tab ); Escreva ( “2 x ”, tab, “ = ”, 2 * tab ); Escreva ( “3 x ”, tab, “ = ”, 3 * tab ); Escreva ( “4 x ”, tab, “ = ”, 4 * tab ); Escreva ( “5 x ”, tab, “ = ”, 5 * tab ); Escreva ( “6 x ”, tab, “ = ”, 6 * tab ); Escreva ( “7 x ”, tab, “ = ”, 7 * tab ); Escreva ( “8 x ”, tab, “ = ”, 8 * tab ); Escreva ( “9 x ”, tab, “ = ”, 9 * tab ); FIM. Figura 42 – Exemplo de Algoritmo de Tabuada Sem Comando de Repetição Nota-se que para fazer o algoritmo o comando escreva deve ser repetido várias vezes tendo pequena alteração. Como a tabuada solicitada compreendia os valores entreos números 0 a 9 então o trabalho foi repetitivo, mas não tão grande. Ao executar o algoritmo, se o usuário digitasse o número 5, então o programa imprimiria na tela: 0 x 5 = 0 1 x 5 = 5 2 x 5 = 10 3 x 5 = 15 4 x 5 = 20 5 x 5 = 25 6 x 5 = 30 7 x 5 = 35 8 x 5 = 40 9 x 5 = 45 Figura 43 – Saída na tela do Algoritmo da Figura 42 O algoritmo torna-se maior e mais repetitivo se um engenheiro solicitar a você fazer um programa que construa a tabela de seno de 0 até 90 graus, variando de 0.0001 em 0.0001 graus. Quantas linhas você precisaria? Outro pedido poderia ser a solicitação do somatório de 1 até 1milhão. Pense em como seria a solução para o somatório de 1 até 10, depois imagine ter que fazer o somatório até 10 milhões. Invista um tempo para compreender a solução e o trabalho repetitivo imposto por esta solicitação. Nestes dois últimos exemplos, do seno e do somatório, muitas linhas de código seriam escritas, em um trabalho puramente repetitivo, mas você chegaria a uma solução. Entretanto, os clientes não gostam de soluções fixas como somatório e 1 a 1milhão, ele preferiria digitar o primeiro e último números, esperando a resposta do somatório. Ou então, digitar os valores iniciais e finais para o cálculo do seno. Para soluções que exigem trabalho repetitivo, devem-se usar comandos de repetição. Os Comandos de Repetição, também conhecidos como Laços ou Loops, permitem que um conjunto de instruções seja executado repetidamente até que uma determinada condição de interrupção seja satisfeita. Existem três Comandos de Repetição denominados PARA...FAÇA, ENQUANTO...FAÇA e REPITA...ATÉ, categorizados da seguinte forma: Comando de Repetição com Número de Repetições DEFINIDAS: Teste de Condição no INÍCIO: o comando pertencente a esta categoria é o PARA... FAÇA Comando de Repetição com Número de Repetições INDEFINIDAS: Teste de Condição no INÍCIO: o comando pertencente a esta categoria é o ENQUANTO...FAÇA Teste de Condição no FINAL: o comando pertencente a esta categoria é o REPITA...ATÉ � Figura 44 – Categorização dos Comandos de Repetição Cada um dos comandos descritos na Figura 44, PARA...ATÉ, ENQUANTO....FAÇA e REPITA...ATÉ são detalhados nas próximas seções. Comando de Repetição: Número Definido de Repetições e Teste de Condição no Início Comando de Repetição PARA ... FAÇA O comando PARA...FAÇA representa o comando desta categoria. Utiliza-se este comando quando se sabe o número de vezes que um conjunto de instruções deve ser repetido. No caso da tabuada de 1 até 9, por exemplo, sabe-se que deve-se começar no número 1 e terminar no 9, caracterizando de maneira clara o valor de início e fim das repetições. O teste de condição do comando PARA fica no início de sua estrutura. Assim, o bloco de comandos é repetido até atingir o número de repetições explicitadas. Quando a condição não for mais satisfeita, a execução saltará os comandos que deveriam ser repetidos, deixando de executá-los, e continuando a execução normal do algoritmo. Se a condição não for satisfeita logo na primeira comparação, nenhuma instrução dentro da estrutura PARA será executada. Figura 45 – Fluxograma de Comando de Repetição PARA Na Figura 45, a variável i recebe um valor inicial, um valor final e um valor para incrementar a variável i a cada repetição realizada. Se o incremento for 1, então a cada repetição a variável i será acrescida automaticamente de 1. Se o incremento for 3, então a cada repetição a variável i é incrementada de 3 automaticamente. A Figura 46 apresenta o pseudocódigo geral do comando PARA...FAÇA, referente ao fluxograma apresentado na Figura 45. A variável utilizada no comando PARA...FAÇA para contar o número de repetições é denominada de contador. O contador deve ser sempre do tipo inteiro e o nome dado ao contador fica a critério do programador. ... Declare contador: inteiro; ... PARA contador DE <valor inicial> ATÉ <valor final> FAÇA <instruções>; FIM -PARA; ... Figura 46 – Pseudocódigo do Comando de Repetição PARA No exemplo apresentado na Figura 47, foi declarada uma variável denominada CONT para ser o contador utilizado no comando PARA...FAÇA. Observa-se que no comando PARA...FAÇA que CONT inicia seu valor em 1, devendo ir até o valor 10. O incremento padrão para CONT é 1, isto é, CONT começará seu valor em 1, e variará de 1 em 1, até atingir 10. � ... declare cont: inteiro; ... PARA cont DE 1 ATÉ 10 FAÇA escreva ( “o valor do contador é: ”, cont ); FIMPARA; Escreva (“ Saiu das repetições do PARA...FAÇA”); ... Figura 47 – Exemplo Do PARA...FAÇA Sem A Cláusula PASSO Executando o algoritmo da Figura 47, cont inicia-se com o valor 1, em seguida o algoritmo imprime a mensagem “o valor do contador é: 1” na tela. Ao atingir o FIMPARA, o algoritmo retorna para a primeira linha do comando PARA...FAÇA. cont passa a valer 2, e como ainda não chegou até 10, a linha escreva é executada novamente, imprimindo na tela “o valor do contador é: 2”. E assim sucessivamente, até que o valor de cont atinja o valor 10. Neste caso, ele imprime a mensagem na tela “o valor do contador é: 10”, o último valor descrito no comando, e passa a executar a próxima linha após o FIMPARA. As mensagens impressas na tela serão: o valor do contador é: 1 o valor do contador é: 2 o valor do contador é: 3 o valor do contador é: 4 o valor do contador é: 5 o valor do contador é: 6 o valor do contador é: 7 o valor do contador é: 8 o valor do contador é: 9 o valor do contador é: 10 Saiu das repetições do PARA...FAÇA Figura 48 – Mensagens Impressas Na Tela Após Execução do Algoritmo da Figura 47 A Figura 49 apresenta o pseudocódigo geral do comando PARA...FAÇA com uma cláusula extra denominada PASSO. Esta cláusula deve ser usada quando o programador desejar que o contador varie com um valor diferente de 1 a cada repetição. Assim, se for descrito “PASSO 3” no comando, o contador irá varia de 3 em 3 a cada repetição. O contador e o valor do PASSO devem ser do tipo inteiro e o nome dado ao contador fica a critério do programador. � ... Declare i : inteiro; ... PARA i de <valor inicial> ATÉ <valor final> PASSO <valor de incremento> FAÇA <instruções>; FIMPARA ; ... Figura 49 – Pseudocódigo do Comando de Repetição PARA Exemplificando... ... Declare cont: inteiro; ... PARA cont DE 1 ATÉ 10 PASSO 3 FAÇA escreva ( “o valor do contador é: ”, cont ); FIMPARA; Escreva (“ Saiu das repetições do PARA...FAÇA”); ... Figura 50 – Exemplo Do PARA...FAÇA com A Cláusula PASSO Executando o algoritmo da Figura 50, cont inicia-se com o valor 1, em seguida imprime a mensagem “o valor do contador é: 1” na tela. Ao atingir o FIMPARA, o algoritmo retorna para a primeira linha do comando PARA...FAÇA. Como foi determinado o valor 3 para PASSO, então cont passa a valer 4 (1 de CONT + 3 do PASSO). Como cont ainda não chegou até 10, a linha escreva é executada novamente, imprimindo a mensagem “o valor do contador é: 4” na tela. Ao atingir o FIMPARA, o algoritmo retorna para a primeira linha do comando PARA...FAÇA. Como foi determinado o valor 3 para PASSO, então cont passa a valer 7 (4 de CONT + 3 do PASSO). E assim sucessivamente, até cont valer mais que 10. As mensagens impressas na tela serão: o valor do contador é: 1 o valor do contador é: 4 o valor do contador é: 7 o valor do contador é: 10 Saiu das repetições do PARA...FAÇA Figura 51 – Mensagens Impressas Na Tela Após Execução do Algoritmo da Figura 50 � Exemplificando... Faça um algoritmo que imprima na tela os números de 50 a 20. Algoritmo Inverso_50_20; Declare cont: inteiro; ... PARA cont DE 50 ATÉ 20 PASSO -1 FAÇA escreva ( “o valor do contador é: ”, cont ); FIM-PARA; Escreva (“Saiu das repetições do PARA...FAÇA”); ... Figura 52 – Exemplo Do PARA...FAÇA Sem A Cláusula
Compartilhar