Apostila de Algoritmos Visualg

March 29, 2018 | Author: Raphael Casemiro Fornitano | Category: Algorithms, Computer Data Storage, Array Data Structure, Data Type, Kernel (Operating System)


Comments



Description

UNITAU Universidade de TaubatéApostila de Algoritmos Linguagem VisuAlg Disciplinas Técnicas Computacionais em Engenharia I e Introdução à Computação Prof.. Ms. José de Oliveira Filho Taubaté - SP - 2006 .: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO INTRODUÇÃO O Objetivo principal do sistema AlgoMais e VisuAlg é fornecer uma ferramenta de apoio programação baseado no Português Estruturado, sem reduzir o estudo teórico. Com estas ferramentas pretende-se proporcionar uma forma de estimular os alunos a praticar e exercitar o desenvolvimento de algoritmos em uma pseudolinguagem conhecida como "Portugol" ou Português Estruturado. "Portugol" é derivado da aglutinação de Português + Algol. Algol é o nome de uma linguagem de programação estruturada usada no final da década de 50. Embora o português estruturado seja uma linguagem bastante simplificada, possui todos os elementos básicos e uma estrutura semelhante à de uma linguagem típica para programação de computadores. Além disso, resolver problemas com português estruturado, pode ser uma tarefa tão complexa quanto a de escrever um programa em uma linguagem de programação qualquer. Portanto, neste manual, estaremos na verdade procurando desenvolver as habilidades básicas que serão necessárias para adquirir-se competência na programação de computadores. 1. Algoritmo não Computacional Abaixo é apresentado um Algoritmo não computacional cujo objetivo é usar um telefone público. Todo mundo que tem contato com computadores sabe que eles precisam ser programados para executar tarefas. Um programa é um conjunto de milhares de instruções que indicam ao computador, passo a passo, o que ele tem que fazer. Estes programas são construídos com ferramentas chamadas "linguagens de programação". Estas linguagens contêm os comandos que fazem o computador escrever algo na tela, realizar cálculos aritméticos, receber uma entrada de dados visto teclado, e milhares de outras coisas, mas estes comandos precisam estar em uma ordem lógica e contribuir, cada um, para a tarefa em questão. Provavelmente você já fez o exemplo acima. A este conjunto de instruções poderíamos dar o nome de "algoritmo para a fazer uma ligação de um telefone publico". A palavra algoritmo significa: " é uma seqüência de instruções ordenadas de forma lógica para a resolução de uma determinada tarefa ELABORADO POR BRUNO TONET 2 .: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO ou problema. Algoritmo não é a solução do problema, pois, se assim fosse, cada problema teria um único algoritmo. Algoritmo é um caminho para a solução de um problema, e, em geral, os caminhos que levam a uma solução são muitos". Este termo está ligado a ciências da computação, mas na realidade pode ser aplicado a qualquer problema cuja solução possa ser decomposta em um grupo de instruções. A única diferença no caso é que, em relação ao computador, os comandos têm que ser precisos, e cada um deve conter uma tarefa, apenas. O termo "processamento de dados" é muitas vezes utilizado em conjunto com computadores, pois isto é o que eles fazem: processar dados. Daí podemos extrair os dois componentes básicos de um algoritmo (de agora em diante, esta palavra será sempre utilizada no contexto da informática): dados e código. Dados são os valores (números, nomes, etc.) de que precisamos para resolver o problema, e código são os comandos que usaremos para manipular e "processar" os dados. Exercícios: Escreva um algoritmo para resolver os seguintes problemas: A-Escreva um algoritmo para descrever como você faz para ir da sua casa até a faculdade. B-Três homens querem atravessar um rio. O barco que possuem tem a capacidade máxima de 150 quilos. Eles pesam 50, 75 e 120 quilos. Como podem atravessar sem afundar o barco? C-Um homem precisa atravessar um rio com um barco que possui capacidade para carregar apenas ele mesmo, e mais uma de suas três cargas, que são: um lobo, um bode e um fardo de alfafa, mais o lobo não pode ficar sozinho com o bode e o bode com a alfafa. Desafio -Dois monges estão perdidos numa mata e estão passando fome. E só existe uma planta que podem comer. Mas para comê-la deverá esquentá-la 30 segundos exato senão os matara. Mas para marcar o tempo eles só têm 2 ampulhetas um que marca 22 e outra de 14 como que eles conseguirão marcar o tempo? 1.1. Linearização de Expressões Para a construção de Algoritmos todas as expressões aritméticas devem ser linearizadas, ou seja, colocadas em linhas. É importante também ressalvar o uso dos operadores correspondentes da aritmética tradicional para a computacional. Exemplo: (2/3+(5-3))+1= Tradicional Computacional ELABORADO POR BRUNO TONET 3 .: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 1.2. Operadores Aritméticos Operador Adição Subtração Multiplicação Divisão Divisão Inteiro Potenciação Modulo (resto da divisão) Sintaxe VisuAlg + * / \ ^ % Sintaxe AlgoMais + * / -** -- 1.3. Operadores Relacionais Operadores relacionais atuam sobre operandos numéricos e resultam em valores lógicos (operadores de comparação entre dois operandos). Operador Maior Menor Maior ou igual Menor ou igual Igual Diferente Sintaxe AlgoMais e VisuAlg > < >= <= = <> 1.4. Operadores Lógicos Atuam sobre expressões retornando sempre os valores lógicos VERDADEIRO ou FALSOS. Sintaxe VisuAlg E OU NAO XOU Sintaxe AlgoMais E OU NAO Função Retorna verdadeiras se ambas as partes forem verdadeiras. Basta que uma das partes seja verdadeira para retornar verdadeiro. Nega uma afirmação, invertendo o seu valor lógico. Se for verdadeiro vira falso, se for falso vira verdadeiro. Operador que resulta em VERDADEIRO se os operandos forem diferentes, e em FALSO se forem iguais. ELABORADO POR BRUNO TONET 4 . NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO Tabela verdade A V V F F B AEB V V F F V F F F A OU B V V V F NÃO (A) F F V V NÃO (B) F V F V A XOU B F V V F Prioridade dos operadores Operador Operadores aritméticos Operadores relacionais Operadores lógicos E OU NÃO Prioridade 5 4 3 2 1 1. proporcionando maior compreensão e definindo prioridades para a resolução da mesma. em expressões computacionais utilizamos somente parênteses "( )" para modularização. ELABORADO POR BRUNO TONET 5 .6. Operador Potenciação Multiplicação Divisão Adição Subtração Exemplos: (2 + 2) / 2 = 2 2+2/2=3 é diferente de 1. Como pôde ser observado no exemplo anterior.: NAPRO :. as expressões podem ser unidas pelos operadores lógicos.5. Modularização de Expressões Modularização é a divisão da expressão em partes. como seriam os colchetes e as chaves na matemática. Expressões Lógicas As expressões compostas de relações sempre retornam um valor lógico. Exemplos: 2+5>4 ? Verdadeiro 3<>3 ? Falso Prioridade 3 2 2 1 1 De acordo com a necessidade. Na informática podemos ter parênteses dentro de parênteses. : NAPRO :. A) B) C) ELABORADO POR BRUNO TONET 6 . NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO Exercícios: Escreva as expressões na forma de algoritmo.. B.: NAPRO :. C. A. B. A. G. D. 2>3= (6<8)ou(3>7)= não (2<3)= (5>=6 ou 6<7 ou não(a+5-6=8)= {onde A=5} (34>9 e 5+u = 34) ou (5=15/3 e 8>12)= {onde u=29} ELABORADO POR BRUNO TONET 7 .. J. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO D) e) f) G) Escreva as Expressões da forma convencional. F. C. 2>3= (6<8)ou(3>7)= não (2<3)= (5>=6 ou 6<7 ou não(a+5-6=8)= {onde A=5} (34>9 e 5+u = 34) ou (5=15/3 e 8>12)= {onde u=29} e 8>12)= {onde u=29} Resolva as expressões lógicas. H. E. D. a+b+(34+e*9)/u-89**(1/2)= 12+1/((4*a)/45)**(1/2)= ((a+x)**(2+w)-3a)/2= (12*x)/(36-9**y)= Resolva as expressões lógicas. I. poderíamos definir que fruta é um tipo de dado que pode assumir apenas os valores maça. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 2. neste manual. “Início” indica o fim das declarações e o início dos comandos. comer e servir. < listas-de-comando> é apenas uma indicação de que entre a palavra “Início” e a expressão “Fim algoritmo” podemos escrever uma lista com uma ou mais instruções ou comandos. < declaração de Variáveis> descrevemos os tipos de dados que serão usados na lista de comandos. não podem ser usadas para outro propósito em um algoritmo que não seja aquele previsto nas regras de sintaxe. PRIMEIROS ELEMENTOS DA LINGUAGEM No curso de algoritmos vamos escrever soluções para problemas utilizando o português estruturado. abacaxi e outras frutas. por exemplo. sobre os quais podemos efetuar as operações de comparar. quando um algoritmo é “executado” as instruções ou comandos de um algoritmo são sempre executados na ordem em que aparecem no mesmo. A palavra “Algoritmo”. banana. Estrutura Geral Algoritmo Algoritmo < declaração de variáveis> Início < lista de Comandos> Fim algoritmo VisuAlg Algoritmo "tipo algort." < declaração de variáveis> Início < lista de Comandos> Fimalgoritmo AlgoMais Algoritmo < declaração de variáveis> < lista de Comandos> Fim algoritmo Os algoritmos que vamos escrever têm a seguinte forma geral: onde: A palavra “Algoritmo” e a expressão “Fim algoritmo” fazem parte da sintaxe da linguagem e sempre delimitam o início e fim de um algoritmo. OBS: No algoMais não precisa declarar a palavra "Início". Nessa seção vamos conhecer os primeiros elementos que compõem a linguagem e escrever alguns algoritmos. As palavras que fazem parte da sintaxe da linguagem são palavras reservadas. ou seja.. É importante salientar que. comprar. pêra. As palavras reservadas sempre aparecerão em negrito e itálico.: NAPRO :. ELABORADO POR BRUNO TONET 8 . Por exemplo. é uma “palavra reservada”. IDENTIFICADORES Tudo que usamos tem um nome. ou na memória secundária ( discos. por exemplo. números e sublinhado. uma letra. especificamente com as informações armazenadas na RAM ( memória de acesso aleatório ).. ficaria muito complicado em estabelecer uma relação de conhecimento entre eles. que indica onde cada informação está localizada. Exemplos: Identificadores válidos: NOME. fortalece a necessidade de identificarmos o espaço que iremos armazenar. determinado conteúdo. para que haja uma facilidade no reconhecimento das pessoas dá-se nomes “diferentes” para elas com o objetivo de buscarmos em nossa memória o retrato de uma pessoa na qual estamos comentando. que num dado momento. esta identificação deve ser clara. Estado Civil. O computador. fitas. este nome ou rótulo é utilizado para que possamos reconhecer uma determinada variável ou constante. possui um endereço. ou mais bytes. Est_Civil Identificadores INVÁLIDOS: 3Endereco. CD-ROM etc ). guardam algum tipo de informação. Regras para a nomeação de identificadores Não podem ter nomes de palavras reservadas. para poder trabalhar como alguma destas informações. na memória. somente com a memória primária. Abaixo segue alguns exemplos: ELABORADO POR BRUNO TONET 9 . Devem possuir como primeiro caractere uma letra ou sublinhado '_'. Ter no máximo 127 caracteres. mas sabemos que isto é quase que impossível e que a partir de um nome igual vários transtornos são possíveis. ou cada posição de memória. numero/complemento 4. Todas as informações existentes no computador estão ou na memória primária ( memória RAM ). este pode ser um exemplo muito bom se não levarmos em conta a possibilidade de existir nomes iguais para pessoas diferentes. precisa saber onde. TELEFONE. um número. fim. tendo o tamanho de quatro. este número é representado através da notação hexadecimal. uma palavra. Outros caracteres podem ser letras. neste curso. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 3. não importa. pois temos as mesmas características. O VisuAlg e AlgoMais não diferem letras maiúsculas de minúsculas ('NOME' é o mesmo que 'noMe'). NOTA1. A memória do computador pode ser entendida como uma seqüência finita de caixas. basta saber que lá sempre existe alguma informação. IDADE_FILHO. precisa e deve identificar o conteúdo guardado para o usuário. PARA.: NAPRO :. cada caixa. o dado está localizado. VARIÁVEIS O computador possui uma área de armazenamento conhecida como memória. se levarmos em conta que todas as mulheres em sua estrutura física são todos iguais. como número. Nós iremos trabalhar. uma frase etc. Fisicamente. Não possuir espaços em branco. Isto. ou seja. o Exemplo acima. na verdade. poderia ser alterado para ter o seguinte aspecto: Endereço Físico Informação Nome : "João" número : 12345 letra : "H" Como tínhamos falado. num dado instante. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO Endereço Físico Informação 3000: B712 "João" 2000: 12EC 12345 3000: 0004 "H" Como pode ser observado. representada por um Nome simbólico ( atribuído pelo usuário ). Com isto queremos dizer que o conteúdo de uma destas caixas ( endereço lógico ) podem variar. a qual contém. Desta forma podemos dizer que uma variável é uma posição de memória. a partir de agora iremos chamar de forma genérica. as caixas ou endereços lógicos. Desta forma. por parte dos usuários. Pensando nisto. fosse possível dar nomes diferentes a cada posição da memória. a caixa ( Endereço Lógico ) rotulada de "Nome" num dado momento contém a informação "João". uma informação. de variáveis. mas em um outro momento. por Exemplo "Pedro". Veja abaixo Simbolicamente: ELABORADO POR BRUNO TONET 10 . mas para nós humanos torna-se uma tarefa complicada. permanente.. uma caixa pode conter diversas informações. os endereços lógicos são como caixas. ou seja.: NAPRO :. Tais nomes seriam de livre escolha do usuário. permitindo que. as linguagens de computador facilitaram o manuseio. Tendo este conceito em mente. que num dado instante guardam algum tipo de informação. o endereçamento das posições de memória através de números hexadecimais é perfeitamente compreendido pela máquina. como no Exemplo acima. isto é podem sofrer alterações em seu conteúdo. Mas é importante saber que o conteúdo desta caixa não é algo fixo. ao invés de trabalhar diretamente com o número hexadecimal. das posições de memória da máquina. Com este recurso. poderá conter uma outra informação. os usuários ficaram livres dos endereços físicos ( números hexadecimais ) e passaram a trabalhar com endereços lógicos ( nomes dados pelos próprios usuários ). Exemplos: Algoritmo AlgoMais VisuAlg declare caixa : <Tipo da Variável>. pois oferecem alguns tipos básicos predefinidos.. ele deve conhecer os detalhes das variáveis que pretendemos usar. Declaração de Variáveis Variáveis são palavras que tem um significado bem específico em um algoritmo.2 Tipos de Variáveis Todas as Variáveis devem assumir um determinado tipo de informação O tipo de dado pode ser: Primitivo ? Pré-definido pela linguagem. declare caixa : <Tipo da Variável> 4. Sexta-feira. Dinâmicos ? Definidos pelo programador..<lista_identificadores>] <tipo_das_variáveis> onde: <identificador> . de uma maneira de especificar esses detalhes e comunicá-los ao computador. Sábado. veja abaixo: VisuAlg AlgoMais Descrição Numerico Numerico Representa valores inteiros e reais (com ponto ELABORADO POR BRUNO TONET 11 . Cada um desses tipos primitivos tem um conjunto de valores restrito. Estáticos ? É uma parte de um tipo já existente.10] : Numerico (Estático) TIPO SEMANA = (Segunda-feira. para criação de outros tipos.1. Para isso utilizamos o comando de declaração de variáveis que faz parte da nossa linguagem que tem a seguinte forma: Declare <identificador> [.é uma lita de palavras que pretendemos empregar como variáveis em nosso algoritmo. Terça-feira. Quarta-feira. Precisamos assim. 4. o conteúdo da caixa. Tipos Primitivos de Dados Esses tipos de dados são os mais freqüentes nas linguagens de programação. Esses detalhes são: o identificador desta variável e o tipo de valores que essa variável irá conter. Para que o computador possa executar comandos que envolvem variáveis da maneira correta. <tipo_das_variáveis> . declare caixa : <Tipo da Variável>.: NAPRO :. isto é.determina que tipo de valor as variáveis poderão receber. Exemplos: A : Numerico (PRIMITIVO) TIPO NOTA=[1. Enquanto o nome sempre permanece o mesmo. Quinta-feira. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO Uma variável pode ser vista como uma caixa identificada por um nome colocado na tampa desta e por um valor de uma constante que poderá estar colocado no interior desta caixa. a constante nela armazenada pode ser alterada a qualquer momento. Domingo) (Dinâmico). Nos exemplos acima. então. Este comando atribui à variável Peso o valor 78.: NAPRO :."João da Silva" . Por exemplo: Peso <. criamos uma área de armazenamento para os dados. pode ter seu conteúdo (seu valor) mudado quantas vezes for necessário durante um programa. SINAL DE ATRIBUIÇÃO Quando declaramos uma variável. Peso <. uma letra ou qualquer símbolo especial Caracter entre aspas simples. Para que a variável seja útil. o variável Salário e do tipo numérico.5 Um número. Logico Exemplo: a <."João da Silva" . 15. '#' Admite somente valores lógicos (Verdadeiro / Falso). Este comando atribui à variável Nome o valor "João da Silva". mas ela ainda está sem valor.78.78. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO separador da parte decimal).Falso Seqüência de caracteres entre aspas duplas.Verdadeiro b <."João da Silva" Algoritmo AlgoMais VisuAlg É importante lembrar que só se pode atribuir a uns variáveis valores do mesmo tipo da variável. '='. Nome <. deve ter valores colocados por nós. como o próprio nome está dizendo. o seguinte comando seria inválido: Salário <.."Insuficiente" Uma variável. A atribuição de valores é feita pelo operador de atribuição "<-" (uma seta apontando para a esquerda). Exemplos: 'a'. Peso <. Cadeia Exemplo: "Esta é uma cadeia de caracteres" Caracter Logico Literal 5. ELABORADO POR BRUNO TONET 12 .78 Nome <. A isto se chama "atribuir valores". Nome <. Exemplos: 10. todas as linguagens de programação permitem isto. // Inicializa a variável x com o valor de y ELABORADO POR BRUNO TONET 13 .: NAPRO :. Escreva Comando de saída que exibe uma informação no monitor. Uma Linha São representados por duas barras normais ( // ). etc.<lista_de_variáveis>] Exemplos: Leia num Saída Algoritmo Escreva variável AlgoMais Escreva variável VisuAlg Escreva variável Entrada Leia variável Leia variável Leia variável 7. Sintaxe: Leia <variavel>[.. X. "e este de Y:". Ex. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 6. tem que obter do usuário o número da conta. a senha.<lista_de_variáveis>] Exemplo: Escreva "Este é o valor de X:". x <.y. Um programa de caixa automático. deve haver um meio para que sejam digitados (ou fornecidos de outra maneira) dados para uso do programa. Nos algoritmos usamos o comando Escreva para isto.: // Este método calcula o fatorial de n. por exemplo. Sintaxe: Escreva <expressão | variável>[. Mais uma vez. e todas as linguagens de programação têm comandos para este fim. . em algum ponto deve haver a exibição de valores. Portanto. e nos algoritmos usamos o comando Leia. A sintaxe deste comando é: Leia Comando de entrada que permite a leitura de variáveis de entrada utilizando o teclado. COMANDOS DE E/S (ENTRADA/SAÍDA) Um programa que faça o seu processamento e não tenha como mostrar seus resultados é inútil. Todo o texto que você digitar após as duas barras será comentário. . Y Nem todos os dados que um programa manipula são gerados por ele. LINHAS DE COMENTÁRIO Os comentários são declarações não compiladas que podem conter qualquer informação textual que você queira adicionar ao código-fonte para referência e documentação de seu programa. Assim. a opção de serviço desejada. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO Múltiplas Linhas Para tal. nota2. i. mesmo nesta fase há técnicas que podem ser aprendidas. e verifica se ele passou de ano } DECLARE codigo.. A primeira fase é a mais difícil de se "pegar". Exibição dos resultados.Cálculo de Média Aritmética Enunciado: Faça um programa que leia dois valores numéricos. e calcule e exiba a sua média aritmética. alguns vêm do "exterior" do programa. Obtenção destes dados.: NAPRO :. aí já deveremos ter idéia dos tipos de dados que usaremos.. j. nota1. e outros são calculados no próprio programa. e modelos que podem ser aplicados. e sendo assim a primeira etapa já está pronta. nota3 NUMERICO { declaração das variáveis numéricas } DECLARE nome CADEIA // declaração das variáveis de cadeia .. pois depende um pouco da experiência do programador. Entretanto. seu código e as suas notas. Processamento em si. Programação é arte. Definição dos dados que serão necessários para resolvê-lo (as entradas). tudo ao mesmo tempo. Problema 1 . hein? Dos tempos de escola lembramos que a média aritmética de dois valores é calculada como (a+b)/2. basta colocar o comentário entre chaves { } Ex: ALGORITMO { este algoritmo pega o nome de um aluno. ciência e técnica. ESTRUTURAS SEQÜÊNCIAIS Construindo os Primeiros Algoritmos Basicamente a construção de um algoritmo se resume às seguintes etapas Entendimento do problema. Etapa 1 Simples. FIM ALGORITMO Uma Linha // TEXTO { TEXTO } // TEXTO Múltiplas Linhas { TEXTO } { TEXTO } { TEXTO } Algoritmo AlgoMais VisuAlg 8. Etapa 2 ELABORADO POR BRUNO TONET 14 . Media Fim Algoritmo Comentários Você deve ter notado que colocamos na tela instruções para o usuário usando o comando Escreva. O resultado do cálculo será armazenado na variável Média.. mas explicamos ao usuário o que aquele valor significa. Basta pedir ao usuário que digite os valores. Etapa 4 O processamento aqui é o cálculo da média." Escreva "Digite um valor : " Leia A Escreva "Digite outro valor : " Leia B Media <. Solução: Algoritmo Declare A. ao imprimir o resultado. não mostramos simplesmente a média. Em um algoritmo. com o ambiente do Windows. usando o método citado acima.(A+B)/2 Escreva "A média dos dois valores é : ". Da mesma forma. Veja outro Exemplo: ELABORADO POR BRUNO TONET 15 .: NAPRO :. etc. Esta é uma boa técnica de programação.Média : Numérico Inicio Escreva "Programa que calcula a média aritmética de dois valores. Etapa 5 Basta exibir o conteúdo da variável Média. que armazenará a média aritmética calculada. e uma terceira variável. que colocaremos em duas variáveis A e B. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO Os dados necessários serão os dois valores.B. Etapa 3 A obtenção dos dados neste programa é simples e direta. Como pode ser analisado no tópico anterior todo programa possui uma estrutura seqüencial determinada por um INÍCIO e FIM. mesmo hoje em dia. do tipo numérico. na etapa 1. estes limites são definidos com as palavras Algoritmo e Fim Algoritmo. que chamaremos Média. 5º Passo: "Total: 10 un. qtd.prod. Não são diferenciadas as letras maiúsculas de minúsculas. com L os literais e com C os caracteres.. de Abacaxi = 55. ( ( ( ( ( )a ) acd1 )1 ) guarda-chuva ) b316 ELABORADO POR BRUNO TONET 16 .0" Exercícios: A. E não deve ser utilizada a letra 'ç'.50" 3º Passo: "Digite a quantidade:" Você digita "10" 4º Passo: O computador irá executar a operação da antepenúltima linha do algoritmo: atribuir o resultado da multiplicação entre valor_prod e qtd à variável tot. Classifique os conteúdo das variáveis abaixo de acordo com seu tipo. tot FIM ALGORITMO Lembrete Os comandos devem ser inseridos linha por linha. com R os lógicos. Se executássemos esse algoritmo. assinalando com "N" os dados Numericos.00001 ) " 444 " B.qtd. pedindo para inserir o dado desejado. As palavras não devem ser acentuadas.: NAPRO :. ( ( ( ( ( ) abc ) 123a ) -_ad ) A123 ) AB CDE ( ( ( ( ( ) 3abc ) –a ) A&a ) Aa ) etc. Assinale com um X os nomes de variáveis válidos."=".. teríamos o seguinte resultado: 1º Passo: "Digite o produto:" Uma janela irá aparecer. Vamos supor que você digite "Abacaxi" 2º Passo: "Digite o valor unitário do produto:" Você digita "5.7 ( ) -49 ( ) "Lucas" ( ) Verdadeiro ( ) "abc" ) 1012 ) +342 ) "V" ) -545 ( ( ( ( ( )"João" ) Falso ) 569 ) 0.. de". NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO ALGORITMO DECLARE prod :LITERAL DECLARE valor_prod. tot :NUMERICO INICIO ESCREVA "Digite o produto:" LEIA prod ESCREVA "Digite o valor unitário do produto:" LEIA valor_prod ESCREVA "Digite a quantidade:" LEIA qtd tot<-valor_prod*qtd ESCREVA "Total:". ( ( ( ( ( )0 ( )5."un. MEDIA: NUMERICO.SOMA NUM <. . COR. Teste. 2. corrigindo-os quando possível: Declare Nome. 5. X. NOTA4.DIA b) SOMA <. Y e Z . Dia: Literal Soma. Quais os valores armazenados em SOMA. respectivamente.(NOME = COR) E.X X <.X + 1 NUM <.5 SOMA <.1) D. NOTA2. MEDIA <. NOTA2. ESCREVER (NOME."*ABC*" DIA <.(NOTA1 + NOTA2 + NOTA3 + NOTA4) / 4. NOTA3.SOMA COR <. Num: Numerico X: Lógico a) b) c) d) e) f) g) h) i) j) ( ( ( ( ( ( ( ( ( ( ) ) ) ) ) ) ) ) ) ) NOME <. Primeiro Algoritmo Algoritmo Declare: NOTA1."SEGUNDA" SOMA + 2 <. "TERÇA". e . Assinalar os comandos de atribuição considerados inválidos. NOTA3. Y = 3 e Z = 5 a) X * Y – Z e) (X + Y) * Z b) X * (Y . cor.F.(NUM**2/X) + (X + 1) c) TUDO <.V.: NAPRO :."PRETO" X <.são variáveis numéricas. TESTE e COD valem. Para as variáveis declaradas a seguir são dados os seguintes valores. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO C.NUM + 2 * X TESTE <. "AZUL". supondo-se que NUM. Determine o resultado da avaliação das expressões abaixo: X. MEDIA) FIM Algoritmo.Z) f) X ** Y – 1 c) X + Y * Z g) (X ** Y) – 1 d) X + (Y * Z) h) X ** (Y .. sendo que: X = 2. NOME e TUDO. NOTA4.NÃO ((TESTE OU COD) E (SOMA < X)) F. DIA.? a) NOME <. Observa o seguinte Algoritmo e descreva o que ele faz. ELABORADO POR BRUNO TONET 17 . Leia NOTA1. NOME : LITERAL INICIO Leia NOME. e calcule e exiba a sua média aritmética.. O programa deve calcular a velocidade média em km/h. Maria idade letra Maria : : : : Literal Numerico Caracter Numerico ELABORADO POR BRUNO TONET 18 .. sabendo quantas pessoas estão à mesa. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO G. Para isto. em média. quantos km fiz. e gostaria de saber a quilometragem média por litro de gasolina..50 por tipo de cobertura pedida (queijo. Complicou? Problema 2 Realizarei uma viagem de vários dias em meu automóvel. etc. Você poderia fazer um programa que me desse. também vou somar toda a gasolina que comprar para o carro. Problema 4 Em uma pizzaria. banana. e YY é sua velocidade média. com estes dados. Faca um programa que calcula e conta e. por litro de gasolina? Problema 3 Faça um programa que leia o nome de um piloto. anotarei a quilometragem no velocímetro ao sair de viagem. uma distância percorrida em km e o tempo que o piloto levou para percorrê-la (em horas).80 e uma pizza mista grande custa R$10.00 mais R$1. Uma turma vai à pizzaria e pede uma determinada quantidade de "chopps" e uma pizza grande com uma determinada quantidade de coberturas. Onde XX é o nome do piloto. quanto que cada um deve pagar (não esqueça os 10% do garçom). e exibir a seguinte frase: A velocidade média de XX foi YY km/h. e depois ao chegar.: NAPRO :.). No seguinte PROGRAMA existe alguns erros? Onde? ALGORITMO Teste Declare Declare Declare Declare INICIO Leia idade Escreva idade dade=678 Leia "letra" Leia ABC Escreva letra letra<-A FIM ALGORITMO Problema 1 Faça um programa que leia três valores numéricos. presunto. cada tulipa de chopp custa R$0. "irei ao cinema" e "ficarei vendo TV em casa".Bom. enquanto que a segunda será realizada caso a resposta seja "Não". mais uma vez. agora já podemos fazer um programa que ajude nosso amigo. devemos lembrar que os comandos do algoritmo são sempre imperativos. Quais são as ações possíveis? Fácil. ele não sabe o que é "ter R$ 10. poderemos ter a seguinte forma: Se Dinheiro >= 10 então Ir ao Cinema senão Ver TV em Casa Entendeu a transformação? "Dinheiro" faz o papel de uma variável que contém o que eu tenho sobrando no momento. outros caso ela resulta em Falso. e se valor é maior ou igual a 10. senão. vamos generalizar a estrutura que criamos acima: Se <condição> então <ações (uma ou mais) a serem realizadas se a condição senão <ações (uma ou mais) a serem realizadas se a condição for falsa> for verdadeira> Para terminar a nossa comparação.. Em programação chamamos esta situação de condição. "tiver R$ 10.00 sobrando".. O que faço esta noite? ELABORADO POR BRUNO TONET 19 . então "tenho R$ 10. e que o computador só lida com quantidades definidas (ou seja. Como próximo passo. as ações são um ou mais comandos que serão realizados. ESTRUTURA CONDICIONAL Na vida real tomamos decisões a todo o momento baseado em uma situação existente. Vamos colocar agora a frase do parágrafo anterior em outra forma. Veja que grifamos três palavras: Se. A primeira só será realizada se a resposta à pergunta "Tenho dinheiro suficiente?" for "Sim".00 sobrando" então "irei ao cinema" senão "ficarei vendo TV em casa".00 sobrando?" pode (tem que) ser respondida com "Sim" ou "Não". em um algoritmo. mas se não tiver ficarei vendo TV em casa". mais parecida com o que é um programa de computador: Se "tiver R$ 10. pois a pergunta "Tenho R$ 10. Qual é a condição nesta frase? Fácil. Elas são muito importantes na estrutura dos comandos de decisão. e as alternativas possíveis de ações. no entanto: é algo fácil e que pode ser aprendido e desenvolvido. Não se preocupe. toda condição tem que ser uma expressão lógica. Por exemplo: "Se tiver R$ 10. Ela é uma expressão lógica.00 sobrando".: NAPRO :. Lembre-se. fique sabendo que a técnica (ou arte) de se transformar perguntas do dia-a-dia em quantidades definidas que possam ser colocadas em um programa é a chave de se fazer algoritmos. então. Para aproximar mais nossa frase de um algoritmo. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 9.00 sobrando irei ao cinema hoje à noite.. alguns caso a avaliação da condição resulte em Verdadeiro. então: em um algoritmo. Por falar nisso. Então.00 sobrando"). que vá ao cinema." Em relação ao que vimos até agora." Fim Se Escreva "Obrigado e volte sempre. o fato de algumas linhas estarem mais distantes da margem esquerda que as outras. Algoritmos Declare Dinheiro: Numérico Início Escreva "Serviço Informatizado de Sugestões" Escreva "Quanto dinheiro você tem sobrando?" Leia Dinheiro Se Dinheiro >= 10 então Escreva "Vá ao cinema hoje à noite." faria ou não parte do comando de decisão (a endentação. apenas uma novidade: a expressão fim se ao final do comando de decisão. Imagine o comando sem ela." Escreva "Obrigado e volte sempre. um processamento deva ser feito. Após serem executados os comandos internos a essa estrutura. fique em casa vendo TV. Os comandos internos a essa estrutura só serão executados após o teste da condição ter sido feito e seu resultado for verdadeiro. mostra onde as ações da parte senão do comando terminam. o primeiro comando após o" fim Se" será executado e o algoritmo seguirá a seqüência lógica normalmente. Estrutura Condicional Algoritmo VisuAlg AlgoMais ELABORADO POR BRUNO TONET 20 .. ficaria assim:// Exemplo de um trecho de programa INCORRETO Se Dinheiro >= 10 então Escreva "Vá ao cinema hoje à noite. de acordo com uma determinada condição. e se não tiver. não quer dizer nada para o computador. fazemos isto apenas .para que o algoritmo fique mais fácil de ler). Ela delimita o comando. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO Faça um programa que peça ao usuário a quantia em dinheiro que tem sobrando e sugira. A estrutura condicional permite a mudança de caminho em um determinado fluxo devido à veracidade de um determinado teste feito no decorrer do desenvolvimento do algoritmo. o computador não saberia se o comando Escreva "Obrigado e volte sempre.e esta é uma dica importante para você .: NAPRO :. Assim o fim se é fundamental." senão Escreva "Fique em casa vendo TV. caso ele tenha 10 ou mais reais. A estrutura "Se" deve ser aplicada nos momentos em que. ou seja. isto é. "Neste caso. e todas as linguagens de programação têm algo que cumpra esta função." senão Escreva "Fique em casa vendo TV. Uma vez entendido o funcionamento de um teste de mesa.0 Fim Algoritmo ELABORADO POR BRUNO TONET 21 Teste de Mesa A ? 5 5 5 5 10 10 10 10 -15 -15 0 0 0 B ? ? 15 15 15 15 25 25 25 25 25 25 0 0 C ? ? ? 20 20 20 20 35 35 35 35 35 35 0 Saída 20 35 -15 . visto que o teste de mesa faz uma simulação do raciocínio estruturado.10 b <..: NAPRO :. utiliza-se de tabelas para armazenar os valores e estados das variáveis do algoritmo. ou seja. utilizando a entrada de variáveis e seguindo passo a passo a lógica.a-b escreva a a <. Algoritmo Algoritmo Declare a.c: numerico início a <. entradas. obtivemos a resposta correta? Se não. a fim de saber se ele chega ao resultado a que se propõe e se a lógica está correta. Exemplo: Para cada variável você deve fazer uma coluna e uma coluna para saída de dados.15 c <.a+b escreva c a <.25 c <. e sabendo aplicá-lo nos algoritmos elaborados o aprendizado da lógica computacional se torna muito mais fácil. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO Se <expressão lógica relacional> Entao <lista de comandos 1> [Senao <lista de comandos2>] Fim Se ou Se <expressão lógica ou <Se <expressão lógica relacional> Entao relacional>Entao <lista de comandos 1> <lista de comandos 1> [Senao [Senao <lista de comandos2>] <lista de comandos2>] FimSe Fim Se ou 10. Utilizamos um método conhecido como teste de mesa. onde estão os erros? Sempre que é realizado um teste de mesa.a+b escreva c a <. concluído o teste de mesa podemos analisar os resultados.b.0 b <. Caso em algum ponto a lógica esteja falha. o erro é facilmente encontrado e facilmente resolvido. Preenchendo uma tabela com valores para as variáveis e seguindo-se o fluxo de execução do algoritmo. Monitorando as variáveis é fácil determinar a eficiência do algoritmo. comandos e instruções do algoritmo. O teste de mesa é como uma simulação de todos os passos.5 b <. TESTANDO O ALGORITMO Um algoritmo depois de ser elaborado pode e deve ser testado. A cada comando o valor das variáveis deve ser atualizado.0 c <. e indique o carro que teve maior velocidade média. Sabendo que a velocidade média é a razão entre a distância percorrida e o tempo levado para percorrê-la. Problema 4 Faça um programa que leia o nome e idade de duas pessoas e imprima o nome da pessoa mais nova. ELABORADO POR BRUNO TONET 22 . Independente de conceder ou não o financiamento. faça um programa que leias as distâncias que cada carro percorreu e o tempo que cada um levou. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO Exercícios: Problema 1 Em uma escola. e seu ano de nascimento (o programa deve funcionar corretamente para qualquer que seja o ano atual). o programa deverá escrever "Financiamento Concedido". com as notas variando de 0 a 10. o programa escreverá depois a frase "Obrigado por nos consultar. Problema 2 Faça um programa que receba o valor do salário de uma pessoa e o valor de um financiamento pretendido.. ele passa de ano." Problema 3 Dois carros percorreram diferentes distâncias em diferentes tempos. senão. Caso a média aritmética das duas notas seja 7 ou mais. ele é reprovado. Faça um programa que receba as duas notas de um aluno e escreva se ele passou ou não de ano. senão.: NAPRO :. escreverá "Financiamento Negado". Caso o financiamento seja menor ou igual a 5 vezes o salário da pessoa. o aluno faz duas provas por período. mas todo laço com variável de controle deve conter: a) inicialização b) incremento(i=i+1) ou decremento(i=i-1) c) teste de valor final ELABORADO POR BRUNO TONET 23 .Até.I + 1 ATE I> 10 FIM ALGORITMO Obs. Os algoritmos que escrevemos eram. apenas uma seqüência linear de operações. Eis a sua forma geral: Repita <lista de comandos> Até <expressão lógica ou relacional> Ex.1. A nossa linguagem possui três estruturas de repetição: Repita. Repita.Faça e Enquanto. Cada repetição da lista de comandos também é chamada de iteração.: A variável "i" controla o número de repetições do laço. ALGORITMO DECLARE I: NUMERICO I<. Normalmente a variável de controle do laço recebe um valor inicial. quanto então o próximo comando a ser executado é o comando imediatamente após o até. A inicialização da variável contadora deve acontecer fora do laço. Nesta seção veremos um conjunto de estruturas sintáticas que nos dão mais flexibilidade para determinar a seqüência de execução dos comandos da linguagem. 11... Para. Essa estrutura também é chamada de laço de repetição.1 REPITA ESCREVA i I<..Até Nessa estrutura todos os comandos da lista são executados e a expressão é avaliada. antes do seu início. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 11. utilizamos os comandos de repetição. Ao chegar a um determinado valor o laço é interrompido.. é incrementada de um valor constante no laço e tem seu valor testado em algum ponto do laço..: NAPRO :. portanto.Faça. Existem diversas maneiras de implementar o mesmo laço. Estrutura de Repetição Nos exemplos e exercícios que vimos até agora sempre foi possível resolver os problemas com uma seqüência de instruções onde todas eram necessariamente executadas uma única vez. Quando queremos que um trecho de um algoritmo seja repetido num determinado número de vezes. Isto se repete até que a avaliação da condição resulte em verdadeiro.: Escrever os números de 1 a 10. a lista de comandos é executada. Para que isso ocorra um teste do valor deve ser feito antes da escrita. o que faz com que. A diferença básica entre as duas estruturas é a posição onde é testada a expressão. onde o teste é feito no início.. o que garante que os comandos serão executados pelo menos uma vez. Como no Repita o teste é feito ao final. Isso se repete até que a condição seja falsa. Essa diferença faz com que em determinadas situações o uso de uma estrutura seja mais vantajoso que o uso da outra.faca. No enquanto. ALGORITMO DECLARE i :NUMERICO LEIA i ENQUANTO i >=0 FACA ESCREVA i LEIA i FIM ENQUANTO FIM ALGORITMO ALGORITMO DECLARE i :NUMERICO REPITA LEIA i SE i >=0 ENTAO ESCREVA i FIM SE ATE i<0 FIM ALGORITMO Neste algoritmo. o algoritmo não deve escrever nada. No repita.. para cada um. O exemplo a seguir.: NAPRO :. ELABORADO POR BRUNO TONET 24 . utilizando as duas estruturas. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO Veja um outro exemplo: Escreva os números de 10 a 1.. um outro teste deve ser colocado no início do laço.. a expressão é avaliada no início e se o resultado for falso no primeiro teste a lista de comandos não é executada nenhuma vez. dois testes sejam feitos. ALGORITMO DECLARE i :NUMERICO i <. o número recebido. Isto não ocorre no Enquanto. se ela for verdadeira.faca também é uma estrutura de repetição..i . semelhante a repita. ilustram essa diferença: Problema: Faça um algoritmo que leia diversos números positivos e escreva. a cada iteração.1 ATE i = 0 FIM ALGORITMO 11. a expressão lógica é avaliada e. se o primeiro valor for negativo. Veja a sua forma geral: Enquanto <expressão lógica ou relacional> Faca <lista de comandos> Fim Enquanto A estrutura enquanto. portanto.Faca Na estrutura Enquanto. não sendo.10 REPITA ESCREVA i i <. necessário um teste adicional. a condição é avaliada após a execução dos comandos. onde são mostradas soluções para um problema.2 Enquanto. Solução: Neste problema. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 11. ELABORADO POR BRUNO TONET 25 .numero :NUMERICO Lembrete PARA i DE 1 ATE 5 PASSO 1 FACA LEIA numero No AlgoMais a estrutura Para SE numero>0 ENTAO apenas incrementa. A seguir serão apresentados alguns problemas utilizando estruturas de repetição e desenvolvidas algumas soluções para os mesmos. Ao escrever um algoritmo é importante ter bem clara a função de cada variável.Faca Forma geral: Para <variável de controle> De <valor inicial> Ate<valor final> [Passo<incremento>] Faca <lista de comandos> Fim Para Na estrutura Para. pode-se utilizar a estrutura para. a lista de comandos é executada e após ser executado o último comando da lista. a leitura do número deve ser feita dentro do laço. por exemplo. A condição Passo não é obrigatória. Em cada uma delas um número é lido e. você quer que a variável de controle pule em Dois em Dois a sintaxe ficaria assim: PARA i DE 1 ATE 1000 PASSO 2 FACA <lista de comandos> FIM PARA A estrutura Para é uma estrutura de repetição mais completa que as anteriores. quando então é executado o comando imediatamente após a palavra Fim. é escrito. Uma possível solução para o algoritmo é a seguinte: ALGORITMO DECLARE i.: NAPRO :. se for positivo. Se o valor da variável for menor ou igual a <valor final>. A variável i é usada para controlar o número de repetições e a variável número é utilizada para armazenar cada um dos valores lidos.. Como serão lidos 5 números diferentes.. Problema 1: Faça um algoritmo que leia 5 números e escreva todos os que forem positivos. ESCREVA numero FIM SE FIM PARA FIM ALGORITMO Neste algoritmo são utilizadas duas variáveis. Este número de repetições pode ser uma constante ou estar em uma variável. mas se precisar incrementar a variável de controle você deve utilizar. É preferencialmente utilizada em situações em que sabe-se previamente o número de repetições a serem feitas.3 Para. incremento e teste de valor final da variável de controle. pois ela incorpora a inicialização. a variável de controle é incrementada. a mesma ação é repetida 5 vezes. Como o número de repetições é definido (5). cada uma com uma função bem definida. Isto repete-se até que o valor da variável de controle seja maior que <valor final>. a variável de controle é inicializada com <valor inicial> e no início de cada iteração o valor da variável de controle é comparado com <valor final>. Para isso deve ser utilizado uma estrutura de repetição. Solução: Neste problema. é lido um número N.: NAPRO :. a leitura do mesmo deve ser feita fora da estrutura de repetição. Estrutura de Repetição VisuAlg Repita < lista de comandos> Ate <expressão lógica ou relacional> AlgoMais Repita < lista de comandos> Ate <expressão lógica ou relacional> Enquanto <expressão lógica ou relacional> Enquanto <expressão lógica ou relacional> Faca Faca <lista de comandos> FimEnquanto <lista de comandos> Fim Para <variável de controle> De <valor inicial> Para <variável de controle> De <valor inicial> Ate <valor final> [Passo<incremento>] Faca Ate <valor final>[Passo<incremento>] Faca <lista de comandos> FimPara < lista de comandos> Fim Exercícios Algoritmos com Repetição 1. ELABORADO POR BRUNO TONET 26 . como nesse algoritmo é lido apenas um número. Suponha todos serem distintos.numero :NUMERICO LEIA numero PARA i DE 1 ATE numero FACA ESCREVA i FIM PARA FIM ALGORITMO Vale observar que. e são escritos todos os números de 1 a N.. Como o número de repetições é conhecido (está na variável N) pode-se utilizar a estrutura Para. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO Problema 2: Faça um algoritmo que leia um número N e escreva todos os números de 1 a N. Implementar um algoritmo capaz de encontrar o maior dentre 5 números inteiros quaisquer. Uma possível solução para o problema é a seguinte: ALGORITMO DECLARE i. sexo. 7. Escrever um algoritmo que lê 5 valores para a.n . e para cada n lido. e conta quantos deles estão em cada um dos intervalos [0. um de cada vez. 5. um conjunto por vez e os escreve assim como foram lidos. dada uma seqüência de valores inteiros e positivos. altura e peso de um grupo de 50 pessoas e informe: média das alturas dos homens e dos pesos das mulheres. (75. Escrever um algoritmo que lê um número não determinado de pares de valores m. Cada boi traz preso no seu pescoço um cartão contendo um número de identificação e seu peso. todos inteiros e positivos. escrevendo esta informação. determine qual e o menor valor desta seqüência e a média aritmética dos valores pares. A série de Fibonacci tem como dados os dois primeiros termos da série que são respectivamente 0 e 1. ELABORADO POR BRUNO TONET 27 . 1xn=n 2 x n = 2n . Num frigorífico existem 90 bois. ordene-os em ordem decrescente e crescente e os escreva novamente. Escrever um algoritmo que calcule a média obtida por uma turma de "n" alunos na primeira prova do semestre.100]... 10.50]. c. 3. um par de cada vez. . 4. Implementar um algoritmo que escreva o número e o peso do boi mais gordo e do boi mais magro (não é necessário armazenar os dados de todos os bois). todos inteiros e positivos. um de cada vez.: NAPRO :. Escrever um algoritmo que lê 10 valores para n.75]. escreva a tabuada de 1 até n de n. . Aplicação em problemas reais 1. Escrever um algoritmo que lê um número desconhecido de valores. 9. e calcula e escreve a soma dos n inteiros consecutivos a partir de m inclusive. A partir deles os demais termos são construídos pela seguinte regra: Escrever um algoritmo que gera os 10 primeiros termos da série de Fibonacci e calcula e escreve a soma destes termos.. b. O valor 0 (zero) indica o término dos dados de entrada (finalizador). (25.25]. Em seguida. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 2. e conta quantos destes valores são negativos. um de cada vez. . (50. Escrever um algoritmo que leia o nome. Escrever um algoritmo que lê 2 conjuntos de 4 valores a. n x n = n2 . 8.nome do homem mais alto e da mulher mais gorda. 6. Escrever um algoritmo que. d. ELABORADO POR BRUNO TONET 28 . sabendo que: * cada par de datas é lida numa linha. terminando quando o entrevistador escolher a opção Fim b) calcule e escreva a percentagem de audiência para cada emissora. nada era anotado. para cada turma. Manchete. cada uma. MTV. 4. b) leia. um número indeterminado de linhas contendo.C. Para cada casa visitada.. Record. c3) a porcentagem de crianças que viveram 24 meses ou menos no período. c2) a porcentagem de crianças do sexo masc. c) identifique a maior e a menor audiência da pesquisa. determine e escreva quantas turmas tiveram porcentagem de ausência superior a 5%. e que: a) leia um número indeterminado de dados. calcule a porcentagem de ausência e escreva a identificação da turma e a porcentagem calculada. SBT. Implementar um algoritmo que: a) leia inicialmente o número de crianças nascidas no período. TVA. esta casa não entrava na pesquisa. para o caso de o aluno estar ausente ou presente. Bandeirantes) e o número de pessoas que estavam assistindo TV.: NAPRO :. Para cada turma é fornecido um conjunto de valores. e os demais valores deste conjunto correspondem ao número de matrícula do aluno e à letra A ou P. respectivamente. Foi feita uma pesquisa para determinar o índice de mortalidade infantil em um certo período. para cada uma das 14 turmas existentes. Implementar um algoritmo que: a. ou seja. b. num determinado dia.) e ao número de alunos matriculados. o sexo de uma criança morta (masc. Implementar um algoritmo para calcular o número de dias decorridos entre duas datas (considerar também a ocorrência de anos bissextos). Foi feita uma pesquisa de audiência de TV em várias casas de uma certa cidade. C. em seguida. Se o TV estivesse desligado. 5. Globo. Implementar uma versão do algoritmo que o entrevistador está usando no seu "notebook". .C.. Deseja-se fazer um levantamento a respeito da ausência de alunos à segunda prova de I. fem) e o número de meses de vida da criança. A última linha (que identificará o final da entrada de dados) conterá a palavra 'VAZIO' no lugar do sexo.. mortas no período. 3. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 2. * O ano será digitado com 4 dígitos. B. c) determine e imprima: c1) a porcentagem de crianças mortas no período. a última linha contém o número do dia negativo (indicando que terminou o cálculo). * a primeira data lida é sempre a mais antiga. o entrevistador (munido de um "notebook") escolhia num menu qual o canal que estava sendo assistido (Cultura. sendo que os dois primeiros valores do conjunto correspondem à identificação da turma (A. ou a um valor caractere ( exceto CADEIA ). como o próprio Nome já indica. nome2. haja visto não ser possível determinar quantos nomes seriam lidos. A construção deste algoritmo começaria a ficar inviável na pratica..000 pessoas. como é mostrado abaixo: ALGORITMO "loucura" DECLARE nome1. sendo que a esta será associado um valor qualquer. nome7 . FIM ALGORITMO Considere o tamanho do algoritmo. possui apenas uma dimensão. não é suficiente para resolver certos problemas computacionais. foi criado um novo conceito para alocação de memória sendo. mas ordenados alfabeticamente? Não seria uma tarefa simples.. esta forma de definição. Isto só com 1. nome4.. Imagine por Exemplo.: DECLARE idades VETOR [5] : NUMERICO ELABORADO POR BRUNO TONET 29 . Cada uma das posições de memória de uma variável indexada pode receber valores no decorrer do algoritmo como se fosse uma variável comum.000 variáveis do tipo STRING.. teríamos que definir 1.000..000 de pessoas. Uma variável unidimensional.. nome5. sendo possível definir variáveis com quaisquer tipo de dados. VARIÁVEIS COMPOSTAS HOMOGÊNEAS Vimos. muitas vezes. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 12. O índice corresponde a um valor numérico ( exceto NUMERICO ). também criado uma nova maneira de definirem variáveis. a qual daremos único Nome. Uma variável indexada corresponde a uma seqüência de posições de memória. 12.nome2..1 Variáveis Indexadas Unidimensionais (Vetores) Também conhecida por "Vetor". e outros. de alocação de memória. mesmo que soubéssemos o número de pessoas. sendo que cada uma destas pode ser acessada através do que conhecemos por índice.nome1000 . Declaração de Vetores Sintaxe: DECLARE <identificador> VETOR [<tamanho>] <tipo (numerico. nome3. Pois bem.: NAPRO :.000 Nomes. como faríamos para construir um algoritmo. ser possível dar um Nome para uma posição de memória. nome6.. para ler o Nome de N Pessoas e que imprimisse um relatório destes mesmos nomes. desta forma.. imagine agora 1. ou melhor dizendo. nome999. no início deste curso. logico. caracter ou cadeia)> Ex. . a qual foi denominada de variável indexada. . e o trabalho braçal necessário para construí-lo. a única diferença reside na Sintaxe de utilização desta variável.. nome1000: Literal LEIA nome1. Para resolver problemas como este. acontece que. digamos 1. A= Matriz A 3x2 ELABORADO POR BRUNO TONET 30 a(1.1) a(1.i**2 Problema 1: Escrever um algoritmo que lê um vetor V(6) e o escreve.2) . NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO Atribuindo Valores a Elementos do Vetor Para se atribuir um valor a um elemento do vetor devemos utilizar o seguinte padrão: Sintaxe: < identificador>[<posição>] ← <valor> Ex. Para isso deve ser utilizada uma estrutura de repetição para receber os valores lidos e uma condição para contar quantos numero são negativos.2 Variáveis Indexadas Bidimensionais (Matrizes) Também conhecida por "Matriz". Uma possível solução para o algoritmo é a seguinte: ALGORITMO DECLARE vet VETOR [6] :NUMERICO DECLARE i. Uma variável Bidimensional. Solução: Neste problema. a seguir. a mesma ação é repetida 6 vezes e mostra os valores lidos.2) a(3. logo seguir pede para dizer quantos desses números são negativos. sendo ser possível definir variáveis com quaisquer tipo de dados válidos no AlgoMais.: idades[3] <.x idades[1] <. conta_neg FIM ALGORITMO 12. quantos valores de V são negativos e escreva esta informação.conta_neg + 1 FIM SE FIM PARA PARA i DE 1 ATE 6 FACA ESCREVA vet[i] FIM PARA ESCREVA "Total de números negativos: ". conta_neg :NUMERICO conta_neg <.. Conte.2) a(2.: NAPRO :.0 PARA i DE 1 ATE 6 FACA LEIA vet[i] SE vet[i]<0 >ENTAO conta_neg <.2 idades[i] <.1) a(3. como o próprio Nome já indica. possui duas dimensões.1) a(2. 14 Problema 1: Escreva um algoritmo que lê uma matriz M(3. d) da diagonal secundária.x A[1][1] <. somaColuna2. Solução: Neste problema. b) da coluna 2 de M. Uma possível solução para o algoritmo é a seguinte: ALGORITMO DECLARE matriz VETOR[3][3] : NUMERICO. somaLinha3. soma da diagonal secundária onde o índice da coluna vai ser a ordem da matriz quadrada mais um e menos o índice da linha e a soma de todos os elementos da matriz. temos uma matriz quadrada de ordem três por três sendo 3x3 = 9 ações que são repetida.<valor> Ex.: NAPRO :. somaDiagPrinc.. soma da coluna dois M[quantidade de linhas] [2]. somaTudo : NUMERICO ELABORADO POR BRUNO TONET 31 . diagonal principal onde os índices da coluna e linha sempre são iguais. DECLARE i. j. Para isso deve ser utilizada uma estrutura de repetição para receber os valores lidos e algumas condições para verificar as questões pedidas.0 A[i][j] <.: A[3][1] <. logo seguir pede para dizer a soma da linha três M[3][quantidade de colunas].: DECLARE A VETOR [3][2] NUMERICO Atribuindo Valores a Elementos da Matriz < identificador>[<posição 1>][<posição 2>] <.3) e calcula as somas: a) da linha 3 de M. c) da diagonal principal. e) de todos os elementos da matriz. somaDiagSecu. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO Declaração de Matrizes DECLARE <identificador> VETOR [<dimensão 1>][<dimensão 2>] <tipo> Ex. 5] : <Tipo da Variável> Exercicios 1. somaColuna2 ESCREVA "Soma dos elementos da diagonal principal é ".0 somaColuna2 <.0 PARA i DE 1 ATE 3 FACA PARA j DE 1 ATE 3 FACA LEIA matriz[i][j] somaTudo <. ELABORADO POR BRUNO TONET 32 AlgoMais variável Vetor [5] <Tipo da Variável>.matriz[i][j]+ somaLinha3 FIM SE SE j=2 ENTAO somaColuna2 <.0 somaTudo <.matriz[i][j] + somaTudo SE i=3 ENTAO somaLinha3 <. variável Vetor [5][5] <Tipo da Variável>. somaTudo ESCREVA "Soma dos elementos da linha 3 é ". * calcule quantas notas estão acima e abaixo da média (não considerar notas iguais à média).: NAPRO :. Implementar um algoritmo que leia 150 notas de provas e os respectivos nomes dos indivíduos (até 30 caracteres) e: * calcule a média das notas. . NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO Inicio somaLinha3 <.0 somaDiagPrinc <.. somaDiagSecu FIM ALGORITMO Variáveis Compostas Homogêneas VisuAlg variável [10] : <Tipo da Variável> variável [5.matriz[i][j]+ somaDiagSecu FIM SE FIM PARA FIM PARA PARA i DE 1 ATE 3 FACA PARA j DE 1 ATE 3 FACA ESCREVA matriz[i][j] FIM PARA FIM PARA ESCREVA "Soma de todos os elementos é ". somaDiagPrinc ESCREVA "Soma dos elementos da diagonal secundária é ".0 somaDiagSecu <.matriz[i][j]+ somaColuna2 FIM SE SE i=j ENTAO somaDiagPrinc <.matriz[i][j]+ somaSomaDiagPrinc FIM SE SE j=4-i ENTAO somaDiagSecu <. somaLinha3 ESCREVA "Soma dos elementos da coluna 2 é ". e quais são elas (isto é. feminino) . c) a nota que teve a maior freqüência absoluta. referentes a cada habitante. 4. sendo que o usuário entrará com o tamanho e os valores de cada uma das matrizes a serem multiplicadas.: NAPRO :. O primeiro conjunto de dados a ser lido será o gabarito para a correção da prova. b) a porcentagem de aprovação. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO * quantas pessoas possuem a maior e a menor das notas. para serem analisados: . verdes. O programa deve calcular e imprimir: a) para cada aluno.cor dos cabelos (louros. Dicas: use o esquema de estruturas abaixo: 3. foi perfurado um cartão com esses dados.cor dos olhos (azuis. e que tenham olhos verdes e cabelos louros (Tá bom assim?). ou seja.sexo (masculino. Os outros dados serão os números dos alunos e suas respectivas respostas. Para cada habitante. sabendo-se que a nota mínima de aprovação é 6. seus nomes). Suponha um tamanho máximo igual a uma matriz 5x5. Uma pesquisa sobre algumas características físicas da população de uma determinada região coletou os seguintes dados. Implementar um algoritmo que determine e escreva: a) a maior idade dos habitantes. 2. inclusive. Implementar um algoritmo para multiplicar duas matrizes de números inteiros. do aluno fictício. que não corresponde a ninguém. castanhos) . Cada prova tem 10 questões e cada questão vale 1 ponto. castanhos. a nota que apareceu mais vezes (supondo a inexistência de empates). e o último número. 9999. A multiplicação só é possível se o número de colunas da matriz A for igual ao número de linhas da matriz B.. pretos) . Implementar um algoritmo para corrigir provas de múltipla escolha.idade em anos. indicando que não há mais alunos. e o último cartão. conterá o valor da idade igual a -1. ELABORADO POR BRUNO TONET 33 . b) porcentagem de indivíduos do sexo feminino cuja idade esteja entre 18 e 35 anos. seu número e sua nota. As funções podem ser predefinidas pela linguagem ou criadas pelo programador de acordo com o seu interesse. com os demais objetos. Este tipo de subalgoritmo sempre retornam um e apenas um valor ao algoritmo que lhe chamou. . ELABORADO POR BRUNO TONET 34 .'.1 Funções Uma função é um instrumento (Estático) que tem como objetivo retornar um valor ou uma informação. Declaração de variáveis locais: idêntica a declaração de variáveis globais. resolvem o problema proposto. Ao invés de escrever-se um trecho diversas vezes. A chamada de uma função é feita através da citação do seu nome seguido opcionalmente de seu argumento inicial entre parênteses. É conveniente utilizá-los quando uma determinada tarefa é efetuada em diversos lugares no mesmo algoritmo.Facilitam a compreensão e visualização do algoritmo. Da mesma maneira com que os parâmetros são fixos para todas as chamada o retorno também é fixo.São declarados no início do algoritmo e podem ser chamados em qualquer ponto após sua declaração.Eles reduzem o tamanho do algoritmo. no início do programa. . Ao invés de escrever-se um algoritmo grande.: NAPRO :.. Veja como tem que ficar seu algoritmo principal: ALGORITMO <Declaração das variáveis globais> <Definição da função> <Lista de comandos> FIM ALGORITMO Sintaxe da Função Funcao <identificador> (<parâmetros>) <tipo de retorno> <Declaração de variáveis locais> <Lista de comandos> Fim Parâmetros: Entre um mesmo tipo de dados são separados por vírgula. mas em conjunto.1 Criando Funções A criação de uma Função em AlgoMais deve ser declarada. Cada função tem associada ao seu valor de retorno um tipo explícito. 13. os quais. 13. escreve-se um sub-algoritmo e chama-se-o diversas vezes. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO 13 SUBALGORITMOS São trechos de algoritmos que efetuam um ou mais cálculos determinados. Tipo de retorno da função: numerico. não isoladamente.Eles podem ser Funções que retorna algum valor ou Subrotina que não retorna Nada. escrevem-se vários algoritmos menores. .1. As variáveis declaradas localmente tem validade dentro do escopo da função. Entre tipos de dados a separação é feita com ponto-e-vírgulas '. logico ou cadeia. . : NAPRO :.y NUMERICO) NUMERICO DECLARE rx. ALGORITMO DECLARE v VETOR [5] NUMERICO DECLARE i. soma FIM ALGORITMO Cuidados e Bugs Sempre declare as variáveis globais antes da função.a NUMERICO RMaior<-vet[1] a<-2 SE RMaior<=vet[a] ENTAO RMaior<-vet[a] FIM SE a<-a+1 SE RMaior<=vet[a] ENTAO RMaior<-vet[a] FIM SE a<-a+1 SE RMaior<=vet[a] ENTAO RMaior<-vet[a] FIM SE a<-a+1 SE RMaior<=vet[a] ENTAO RMaior<-vet[a] FIM SE FMaior<-RMaior FIM PARA i DE 1 ATE 5 FACA LEIA v[i] ELABORADO POR BRUNO TONET 35 . Procure não Declarar variáveis globais com o mesmo nome das variáveis da função. total NUMERICO rx<-x ry<-y total<-rx+ry FSoma<-total FIM LEIA a LEIA b soma<-FSoma(a. Aqui tem um exemplo de um Algoritmo com o Subalgoritmo Função sem os Comandos de repetição. Veja como faz falta os comandos de repetição. pois eles não funcionam no AlgoMais.b) ESCREVA "Soma das vaiáveis é ". A função sempre fica dentro do escopo Algoritmo e Fim Algoritmo. ry. Comandos de Repetição Não Funciona dentro da função. Esse Algoritmo recebe Cinco valores e mostra qual é o valor maior.b NUMERICO FUNCAO FSoma(x.maior NUMERICO FUNCAO FMaior (vet VETOR [5] NUMERICO) NUMERICO DECLARE RMaior. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO Exemplo: ALGORITMO DECLARE a.. Obs: São problemas do Software AlgoMais e VisuAlg não suporta Fuções. O ALGORITMO ALGORITMO ESCREVA Quociente(23.0 .. Copia uma variável que contenha um texto. MODULO(X) Valor absoluto de x. " da Silva") ESCREVA nome ESCREVA Subcadeia("curso de algoritmos".5) ESCREVA Trunca(7.2 Sub-rotinas Sintaxe: Sub-rotina <identificador do nome da sub-rotina> ( [REF] <Parâmetros> ) <Declaração de variáveis locais> <Lista de comandos> Fim ELABORADO POR BRUNO TONET 36 TERIA COMO RESULTADO.Y) Retorna o resto da divisão inteira de x por y. RESTO(X. Funções para trabalhar com (somente) variáveis do tipo CADEIA: TAMANHO(cadeia) Retorna o número de caracteres de uma cadeia.. o início da cadeia de caracteres que vai FIM) copiar e o fim da cadeia de caracteres.0 5.2 Funções Pré-Definidas FUNÇÃO OPERAÇÃO QUOCIENTE(X.: NAPRO :. maior FIM ALGORITMO 13. basta colocar a SUBCADEIA(cadeia.. Exemplos com o uso de funções pré-definidas.0 3.0 7.0 30.) Faz a concatenação da cadeia1 com a cadeia2..0 João da Silva algoritmos 19..1. 4.Y) Retorna o quociente da divisão inteira de x por y.5) ESCREVA Resto(23.cadeia2.10. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO ESCREVA v[i] FIM maior<-FMaior(v) ESCREVA "Maior elemento é ". CONCATENA(cadeia1. TRUNCA(X) Elimina as casas decimais..19) ESCREVA Tamanho("curso de algoritmos") FIM ALGORITMO 13.48) ESCREVA Modulo(-30) ESCREVA Raiz(25) FIM ALGORITMO ALGORITMO DECLARE nome CADEIA nome<-Concatena("João". cadeia que deseja copiar. RAIZ(X) Raiz quadrada de x. INICIO. B." ".C) FIM SE SE C>A ENTAO TROCA(C.CONT NUMERICO SUBROTINA TROCA(ref x.Aux FIM CONT <.C. Exemplo: Sub-rotina Troca (Ref I.B) FIM SE SE D>C ENTAO TROCA(D.C. J numerico) Digita cinco valores e coloca em ordem decrescente Algoritmo SEM sub-rotina ALGORITMO DECLARE A.AUX NUMERICO CONT <.C. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO Parâmetros: de um mesmo tipo de dado são separados por vírgula. " ".D REPITA SE D>A ENTAO TROCA(D.C. Os identificadores são separados por vírgula.D.y y <. As variáveis declaradas localmente tem validade dentro do escopo da sub-rotina.CONT.C.0 LEIA A. Passagem de parâmetros por referência: utiliza-se a construção Ref antes dos identificadores para indicar a passagem por referência.C.A) FIM SE SE C>B ENTAO TROCA(C.0 LEIA A. Declaração de variáveis locais: idêntica a declaração de variáveis globais.A) FIM SE CONT<-CONT+1 ATE cont=5 ESCREVA A. entre os tipos de dado são separados por ponto e vírgula ( . y numerico) DECLARE Aux NUMERICO Aux <. ).B.D FIM ALGORITMO 37 .B." ".B.A) FIM SE SE D>B ENTAO TROCA(D.x x<.B) FIM SE SE B>A ENTAO TROCA(B..D.B.B.D REPITA SE D>A ENTAO AUX<-D D<-A A<-AUX FIM SE SE D>B ENTAO AUX<-D D<-B B<-AUX FIM SE SE D>C ENTAO AUX<-D D<-C C<-AUX FIM SE SE C>A ENTAO AUX<-C C<-A A<-AUX FIM SE SE C>B ENTAO AUX<-B B<-C C<-AUX FIM SE SE B>A ENTAO AUX<-B B<-A A<-AUX FIM SE CONT<-CONT+1 ATE CONT=5 ELABORADO POR BRUNO TONET Algoritmo COM sub-rotina ESCREVA A.: NAPRO :.D FIM ALGORITMO ALGORITMO DECLARE A. Escrever um subalgoritmo (com algoritmo principal) para elevar um número qualquer a uma potência.5 para o maior valor. São fornecidos o número e a potência. c. e assim por diante. utiliza um subalgoritmo do tipo função para obter o número de divisores de m. Utilize um subalgoritmo do tipo procedimento para inverter os valores da linha 2 de M. b. Escreva um algoritmo que lê um número não determinado de conjuntos de 3 valores a. e. se m<10 utiliza um subalgoritmo do tipo função que calcula o fatorial de m. Fazer 2 soluções: uma com função e outra com procedimento. Escrever um algoritmo para determinar se um determinado número inteiro é par ou ímpar. 11. Escrever cada m lido e seu fatorial ou seu número de divisores com uma mensagem adequada".6) e a escreve. 4. Escreva a matriz modificada. 7. quer dizer. Utilizar um subalgoritmo de função que receba o valor lido e retorna a soma dos ímpares. 6. Escreva a matriz modificada. 5.5 para o valor intermediário e 4. trocar o 1o com o último. Inverter.. Utilizar um subalgoritmo de função que receba dois valores e retorne o maior. Utilize uma função para obter o maior elemento de V. 8 ) e a escreve. um conjunto de cada vez. Escrever o menor elemento e sua posição na diagonal. para cada conjunto lido. Escrever um algoritmo para determinar o maior de dois valores inteiros. o 2o com o penúltimo. aqui. não negativos. um valor de cada vez. Escrever um algoritmo que leia um número inteiro e calcula a soma de todos os números ímpares compreendidos entre 1 e o valor lido. Utilize uma função para obter a posição do menor elemento da diagonal principal de M. Escrever um algoritmo que lê uma matriz M( 6. 10. todos inteiros e positivos. calcula as médias aritmética. Escrever um subalgoritmo (com algoritmo principal) para calcular a soma e o produto de dois valores inteiros. Neste caso. 8. Escreva um algoritmo que lê um número não determinado de valores m. Dentro deste subalgoritmo deve ser utilizado o subalgoritmo da questão anterior. harmônica e ponderada com peso 2 para o menor valor. Faça procedimentos para ordenação e cálculo das médias (por exemplo. 2. Utilize também procedimentos para a leitura e para a escrita da matriz. Procedimento Ordena e ELABORADO POR BRUNO TONET 38 . Escreva o maior elemento encontrado com a mensagem: "E o MAIOR do VETOR". Utilizar um subalgoritmo de função que receba dois valores e retorne sua soma. Para cada conjunto lido escrever os valores lidos e as médias calculadas. geométrica. 3. temos um programa principal e dois subalgoritmos. Escreva o valor do maior elemento da linha 4 de M. Escrever um algoritmo que lê um vetor V(10) e o escreve. Utilizar um subalgoritmo de função que retorna um valor lógico para indicar se o valor recebido é par ou não. e caso contrário. e. Utilize um subalgoritmo do tipo procedimento para trocar a linha 1 com a linha 5 de M. Utilize um subalgoritmo do tipo função para obter o maior elemento da linha 4 de M. até o 4o com o 5o. 9. 3.: NAPRO :. Escrever um algoritmo que lê uma matriz M(6. Escrever um algoritmo para calcular a soma de dois valores inteiros. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO Exercícios: 1. uma rotina recursiva R pode ser expressa como uma composição formada por um conjunto de comandos C (que não contém chamadas a R) e uma chamada (recursiva) à rotina R: Entretanto. A subrotina deve receber por parâmetro a posição (índice) do elemento a ser eliminado.: NAPRO :. Em geral. Faca uma subrotina chamada remove para eliminar um elemento de um vetor. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO Procedimento Medias). cujas soluções requerem a aplicação dele mesmo. FUNÇÕES DEFINIDAS RECURSIVAMENTE Um algoritmo que para resolver um problema divide-o em subprogramas mais simples.. Faca uma subrotina chamada insere para inserir um elemento (número) em um vetor. ELABORADO POR BRUNO TONET 39 . um função recursiva deve possuir as seguintes propriedades: (1) Deve haver certos argumentos. na qual as rotinas são conectadas através de uma cadeia de chamadas recursivas que acaba retornando a primeira que foi chamada: Para que esteja bem definida. pode-se ter também uma forma indireta de recursão. 13. seja de forma direta ou indireta. a posição (índice) a ser inserido. 12. é chamado recursivo. o tamanho do vetor e o nome do vetor. o tamanho do vetor e o nome do vetor. A subrotina deve receber por parâmetro o número a ser inserido. 14. chamando valores básicos. para os quais a função não se refere a ela mesma. pois encontrou F(0) = 1 F(1) = 1.F(2-1) F(1) = 1. Qual é a lógica neste problema? 4x3x2x1=24 ELABORADO POR BRUNO TONET 40 .2 F(4) = 4.1 F(2) = 2. A definição de fatorial é: F(n) = 1 se n = 0 ou n = 1.F(4-1) F(3) = 3. onde n é um numero inteiro positivo..1 F(3) = 3. Ora. Vejamos um exemplo clássico para esclarecermos o conceito: calculo do fatorial de um número. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO (2) Sempre que a função se refere a ela mesma o argumento deve estar relacionado a um valor básico e/ou a um valor anterior. se n>1.F(1-1) F(0) = 1 imagina a função subindo. F(n) = n.F(n-1). (n-1)! Esta propriedade é chamada de propriedade recursiva: o fatorial de um numero pode ser calculado através do fatorial de seu antecessor. Uma propriedade (facilmente verificável) dos fatoriais é que: n! = n . Veja: F(4) = 4. podemos utilizar esta propriedade para escrevermos uma rotina recursiva para o calculo de fatorial.6 resposta é 24.: NAPRO :.F(3-1) F(2) = 2. senão o algoritmo não terminará jamais.F(1-1) F(0) = 1 -----------. " é ". NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO Se fosse nº 6 qual seria a resposta? 6x5x4x3x2x1=720 Vamos passar isso para o Computador Os algoritmos recursivos têm em geral a forma seguinte: • • • caso de base (base de recursão).F(2-1) F(1) = 1..F(3-1) F(2) = 2. onde o problema é resolvido diretamente (sem chamada recursiva) caso geral.F(4-1) F(3) = 3.1 F(3) = 3.: NAPRO :.Fat (A) Escreva "Fatorial ".2 F(4) = 4. os algoritmos recursivos têm a seguinte forma: se "condicao para o caso de base" entao resolucao direta para o caso de base senao uma ou mais chamadas recursivas fim se Um algoritmo recursivo pode ter um ou mais casos de base e um ou mais casos gerais. E para que o algoritmo termine. Fatorial Fim Algoritmo Vantagens da Recursão ELABORADO POR BRUNO TONET 41 .1 F(2) = 2. as chamadas recursivas devem convergir em direção ao caso de base. onde o problema é resolvido com uma chamada recursiva caso geral onde o tamanho do problema é menor a cada chamada Esquematicamente.6 Algoritmo // AlgoMais Declare A. Fatorial numérico Funcao Fat (x numerico) numérico se x=0 entao fat<-1 senao Fat <.Caso Base F(1) = 1.x * Fat (x-1) fim se Fim Leia A Fatorial <. A. F(4) = 4. Convergir significa ter uma parte menor do problema para ser resolvido. ELABORADO POR BRUNO TONET 42 . utilizando um subalgoritmo recursivo. 4. 6. Isto é. Escrever um algoritmo. 3.: NAPRO :. Escrever um algoritmo. 2. que calcule a soma dos valores contidos em um vetor de 25 posições com valores inteiros. Erros de implementação podem levar a estouro de pilha. Escrever um algoritmo. Faça uma função recursiva que receba um vetor de 100 posições e retorne o somatório dos elementos pares (ou ímpares) do vetor. Caso ele esteja. Escrever um algoritmo. Faça uma função recursiva que receba dois números a e b . Escrever um subalgoritmo recursivo para encontrar o menor valor contido em um vetor de 100 posições contendo valores inteiros. para calcular a soma dos 'n' primeiros inteiros positivos. e retorne a soma dos divisores de c entre a e b. é necessário manter o controle das variáveis manualmente (book keeping). um código com recursão é mais conciso. pois muitas chamadas consecutivas a funções são feitas. para calcular o N-esimo termo da série de Fibonacci. para calcular o fatorial de um valor inteiro qualquer. entre outros. Exercicíos 1. 8. b e c. Escrever um algoritmo. Faça uma função recursiva que receba 3 números a. ou se esta condição nunca for satisfeita. Geralmente. 5. sendo a < b.. Escrever um algoritmo. caso não seja indicada uma condição de parada. utilizando um subalgoritmo recursivo. a < b. 10. Caso não seja usada. também deve ser informada a sua posição. sendo 'n' um valor fornecido pelo usuário. Devem ser fornecidos o número e a potência. utilizando um subalgoritmo recursivo. utilizando um subalgoritmo recursivo. 9. Desvantagens da Recursão Funções recursivas são mais lentas que funções iterativas. No algoritmo principal deve ser informado se o valor lido está ou não contido no vetor. utilizando um subalgoritmo recursivo. que eleve um número inteiro qualquer a uma potência. em alguns problemas. 7. utilizando um subalgoritmo recursivo. que leia um valor inteiro qualquer e realize uma pesquisa em um vetor de 100 posições. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO Simplifica a solução de alguns problemas. e retorne a soma dos números ímpares entre a e b. pucrs.ufrn.br/Disciplinas/sis218-algoritmos/2003-2/sis218d/cronog_algo.html apostila de lógica de programação “criação de algoritmos e programas” professor renato da costa ELABORADO POR BRUNO TONET 43 .html http://www.apoioinformatica.inf.inf.angelfire.ufpr.com/bc/fontini/algoritm.consiste.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO Referências http://www.dimap.br/info/ http://www.ucs.br/%7Eegidio/algo1/ http://dein.br/~david/ http://www.br/ http://www.inf..
Copyright © 2024 DOKUMEN.SITE Inc.