Você está na página 1de 43

UNITAU Universidade de Taubat

Apostila de Algoritmos Linguagem VisuAlg


Disciplinas Tcnicas Computacionais em Engenharia I e Introduo Computao

Prof.. Ms. Jos de Oliveira Filho

Taubat - SP - 2006

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO

INTRODUO
O Objetivo principal do sistema AlgoMais e VisuAlg fornecer uma ferramenta de apoio programao baseado no Portugus Estruturado, sem reduzir o estudo terico. 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 Portugus Estruturado. "Portugol" derivado da aglutinao de Portugus + Algol. Algol o nome de uma linguagem de programao estruturada usada no final da dcada de 50. Embora o portugus estruturado seja uma linguagem bastante simplificada, possui todos os elementos bsicos e uma estrutura semelhante de uma linguagem tpica para programao de computadores. Alm disso, resolver problemas com portugus estruturado, pode ser uma tarefa to complexa quanto a de escrever um programa em uma linguagem de programao qualquer. Portanto, neste manual, estaremos na verdade procurando desenvolver as habilidades bsicas que sero necessrias para adquirir-se competncia na programao de computadores. 1. Algoritmo no Computacional Abaixo apresentado um Algoritmo no computacional cujo objetivo usar um telefone pblico.

Todo mundo que tem contato com computadores sabe que eles precisam ser programados para executar tarefas. Um programa um conjunto de milhares de instrues que indicam ao computador, passo a passo, o que ele tem que fazer. Estes programas so construdos com ferramentas chamadas "linguagens de programao". Estas linguagens contm os comandos que fazem o computador escrever algo na tela, realizar clculos aritmticos, receber uma entrada de dados visto teclado, e milhares de outras coisas, mas estes comandos precisam estar em uma ordem lgica e contribuir, cada um, para a tarefa em questo. Provavelmente voc j fez o exemplo acima. A este conjunto de instrues poderamos dar o nome de "algoritmo para a fazer uma ligao de um telefone publico". A palavra algoritmo significa: " uma seqncia de instrues ordenadas de forma lgica para a resoluo de uma determinada tarefa ELABORADO POR BRUNO TONET 2

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO ou problema. Algoritmo no a soluo do problema, pois, se assim fosse, cada problema teria um nico algoritmo. Algoritmo um caminho para a soluo de um problema, e, em geral, os caminhos que levam a uma soluo so muitos". Este termo est ligado a cincias da computao, mas na realidade pode ser aplicado a qualquer problema cuja soluo possa ser decomposta em um grupo de instrues. A nica diferena no caso que, em relao ao computador, os comandos tm 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 bsicos de um algoritmo (de agora em diante, esta palavra ser sempre utilizada no contexto da informtica): dados e cdigo. Dados so os valores (nmeros, nomes, etc.) de que precisamos para resolver o problema, e cdigo so os comandos que usaremos para manipular e "processar" os dados. Exerccios: 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-Trs homens querem atravessar um rio. O barco que possuem tem a capacidade mxima 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 trs cargas, que so: um lobo, um bode e um fardo de alfafa, mais o lobo no pode ficar sozinho com o bode e o bode com a alfafa. Desafio -Dois monges esto perdidos numa mata e esto passando fome. E s existe uma planta que podem comer. Mas para com-la dever esquent-la 30 segundos exato seno os matara. Mas para marcar o tempo eles s tm 2 ampulhetas um que marca 22 e outra de 14 como que eles conseguiro marcar o tempo? 1.1. Linearizao de Expresses Para a construo de Algoritmos todas as expresses aritmticas devem ser linearizadas, ou seja, colocadas em linhas. importante tambm ressalvar o uso dos operadores correspondentes da aritmtica tradicional para a computacional. Exemplo:

(2/3+(5-3))+1=
Tradicional Computacional

ELABORADO POR BRUNO TONET

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO

1.2. Operadores Aritmticos Operador Adio Subtrao Multiplicao Diviso Diviso Inteiro Potenciao Modulo (resto da diviso) Sintaxe VisuAlg + * / \ ^ % Sintaxe AlgoMais + * / -** --

1.3. Operadores Relacionais Operadores relacionais atuam sobre operandos numricos e resultam em valores lgicos (operadores de comparao entre dois operandos). Operador Maior Menor Maior ou igual Menor ou igual Igual Diferente Sintaxe AlgoMais e VisuAlg > < >= <= = <>

1.4. Operadores Lgicos Atuam sobre expresses retornando sempre os valores lgicos VERDADEIRO ou FALSOS. Sintaxe VisuAlg E OU NAO XOU Sintaxe AlgoMais E OU NAO Funo Retorna verdadeiras se ambas as partes forem verdadeiras. Basta que uma das partes seja verdadeira para retornar verdadeiro. Nega uma afirmao, invertendo o seu valor lgico. 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

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO Tabela verdade A V V F F B AEB V V F F V F F F A OU B V V V F NO (A) F F V V NO (B) F V F V A XOU B F V V F

Prioridade dos operadores Operador Operadores aritmticos Operadores relacionais Operadores lgicos E OU NO Prioridade 5 4 3 2 1

1.5. Modularizao de Expresses Modularizao a diviso da expresso em partes, proporcionando maior compreenso e definindo prioridades para a resoluo da mesma. Como pde ser observado no exemplo anterior, em expresses computacionais utilizamos somente parnteses "( )" para modularizao. Na informtica podemos ter parnteses dentro de parnteses, como seriam os colchetes e as chaves na matemtica. Operador Potenciao Multiplicao Diviso Adio Subtrao Exemplos: (2 + 2) / 2 = 2 2+2/2=3 diferente de 1.6. Expresses Lgicas As expresses compostas de relaes sempre retornam um valor lgico. Exemplos: 2+5>4 ? Verdadeiro 3<>3 ? Falso Prioridade 3 2 2 1 1

De acordo com a necessidade, as expresses podem ser unidas pelos operadores lgicos.

ELABORADO POR BRUNO TONET

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO

Exerccios: Escreva as expresses na forma de algoritmo.

A)

B)

C) ELABORADO POR BRUNO TONET 6

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO

D)

e)

f)

G) Escreva as Expresses da forma convencional. A. B. C. 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 expresses lgicas. A. B. C. D. E. 2>3= (6<8)ou(3>7)= no (2<3)= (5>=6 ou 6<7 ou no(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 expresses lgicas. F. G. H. I. J. 2>3= (6<8)ou(3>7)= no (2<3)= (5>=6 ou 6<7 ou no(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

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO

2. PRIMEIROS ELEMENTOS DA LINGUAGEM


No curso de algoritmos vamos escrever solues para problemas utilizando o portugus estruturado. Nessa seo vamos conhecer os primeiros elementos que compem a linguagem e escrever alguns algoritmos. Estrutura Geral Algoritmo Algoritmo < declarao de variveis> Incio < lista de Comandos> Fim algoritmo VisuAlg Algoritmo "tipo algort." < declarao de variveis> Incio < lista de Comandos> Fimalgoritmo AlgoMais Algoritmo < declarao de variveis> < lista de Comandos> Fim algoritmo

Os algoritmos que vamos escrever tm a seguinte forma geral: onde: A palavra Algoritmo e a expresso Fim algoritmo fazem parte da sintaxe da linguagem e sempre delimitam o incio e fim de um algoritmo. < declarao de Variveis> descrevemos os tipos de dados que sero usados na lista de comandos. Por exemplo, poderamos definir que fruta um tipo de dado que pode assumir apenas os valores maa, pra, banana, abacaxi e outras frutas, sobre os quais podemos efetuar as operaes de comparar, comprar, comer e servir. Incio indica o fim das declaraes e o incio dos comandos. OBS: No algoMais no precisa declarar a palavra "Incio". < listas-de-comando> apenas uma indicao de que entre a palavra Incio e a expresso Fim algoritmo podemos escrever uma lista com uma ou mais instrues ou comandos. importante salientar que, quando um algoritmo executado as instrues ou comandos de um algoritmo so sempre executados na ordem em que aparecem no mesmo. As palavras que fazem parte da sintaxe da linguagem so palavras reservadas, ou seja, no podem ser usadas para outro propsito em um algoritmo que no seja aquele previsto nas regras de sintaxe. A palavra Algoritmo, por exemplo, uma palavra reservada. As palavras reservadas sempre aparecero em negrito e itlico, neste manual.

ELABORADO POR BRUNO TONET

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO

3. IDENTIFICADORES
Tudo que usamos tem um nome, este nome ou rtulo utilizado para que possamos reconhecer uma determinada varivel ou constante, por exemplo, se levarmos em conta que todas as mulheres em sua estrutura fsica so todos iguais, pois temos as mesmas caractersticas, ficaria muito complicado em estabelecer uma relao de conhecimento entre eles, para que haja uma facilidade no reconhecimento das pessoas d-se nomes diferentes para elas com o objetivo de buscarmos em nossa memria o retrato de uma pessoa na qual estamos comentando, este pode ser um exemplo muito bom se no levarmos em conta a possibilidade de existir nomes iguais para pessoas diferentes, mas sabemos que isto quase que impossvel e que a partir de um nome igual vrios transtornos so possveis. Isto, fortalece a necessidade de identificarmos o espao que iremos armazenar, determinado contedo, esta identificao deve ser clara, precisa e deve identificar o contedo guardado para o usurio. Regras para a nomeao de identificadores No podem ter nomes de palavras reservadas; Devem possuir como primeiro caractere uma letra ou sublinhado '_'; Outros caracteres podem ser letras, nmeros e sublinhado; Ter no mximo 127 caracteres; No possuir espaos em branco; O VisuAlg e AlgoMais no diferem letras maisculas de minsculas ('NOME' o mesmo que 'noMe'). Exemplos: Identificadores vlidos: NOME, TELEFONE, IDADE_FILHO, NOTA1, Est_Civil Identificadores INVLIDOS: 3Endereco, Estado Civil, PARA, fim, numero/complemento

4. VARIVEIS
O computador possui uma rea de armazenamento conhecida como memria. Todas as informaes existentes no computador esto ou na memria primria ( memria RAM ), ou na memria secundria ( discos, fitas, CD-ROM etc ). Ns iremos trabalhar, neste curso, somente com a memria primria, especificamente com as informaes armazenadas na RAM ( memria de acesso aleatrio ). A memria do computador pode ser entendida como uma seqncia finita de caixas, que num dado momento, guardam algum tipo de informao, como nmero, uma letra, uma palavra, uma frase etc, no importa, basta saber que l sempre existe alguma informao. O computador, para poder trabalhar como alguma destas informaes, precisa saber onde, na memria, o dado est localizado. Fisicamente, cada caixa, ou cada posio de memria, possui um endereo, ou seja, um nmero, que indica onde cada informao est localizada. este nmero representado atravs da notao hexadecimal, tendo o tamanho de quatro, ou mais bytes. Abaixo segue alguns exemplos: ELABORADO POR BRUNO TONET 9

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO Endereo Fsico Informao 3000: B712 "Joo" 2000: 12EC 12345 3000: 0004 "H" Como pode ser observado, o endereamento das posies de memria atravs de nmeros hexadecimais perfeitamente compreendido pela mquina, mas para ns humanos torna-se uma tarefa complicada. Pensando nisto, as linguagens de computador facilitaram o manuseio, por parte dos usurios, das posies de memria da mquina, permitindo que, ao invs de trabalhar diretamente com o nmero hexadecimal, fosse possvel dar nomes diferentes a cada posio da memria. Tais nomes seriam de livre escolha do usurio. Com este recurso, os usurios ficaram livres dos endereos fsicos ( nmeros hexadecimais ) e passaram a trabalhar com endereos lgicos ( nomes dados pelos prprios usurios ). Desta forma, o Exemplo acima, poderia ser alterado para ter o seguinte aspecto:

Endereo Fsico Informao Nome : "Joo" nmero : 12345 letra : "H" Como tnhamos falado, os endereos lgicos so como caixas, que num dado instante guardam algum tipo de informao. Mas importante saber que o contedo desta caixa no algo fixo, permanente, na verdade, uma caixa pode conter diversas informaes, ou seja, como no Exemplo acima, a caixa ( Endereo Lgico ) rotulada de "Nome" num dado momento contm a informao "Joo", mas em um outro momento, poder conter uma outra informao, por Exemplo "Pedro". Com isto queremos dizer que o contedo de uma destas caixas ( endereo lgico ) podem variar, isto podem sofrer alteraes em seu contedo. Tendo este conceito em mente, a partir de agora iremos chamar de forma genrica, as caixas ou endereos lgicos, de variveis. Desta forma podemos dizer que uma varivel uma posio de memria, representada por um Nome simblico ( atribudo pelo usurio ), a qual contm, num dado instante, uma informao. Veja abaixo Simbolicamente:

ELABORADO POR BRUNO TONET

10

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO Uma varivel 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. Enquanto o nome sempre permanece o mesmo, o contedo da caixa, isto , a constante nela armazenada pode ser alterada a qualquer momento. 4.1. Declarao de Variveis Variveis so palavras que tem um significado bem especfico em um algoritmo. Para que o computador possa executar comandos que envolvem variveis da maneira correta, ele deve conhecer os detalhes das variveis que pretendemos usar. Esses detalhes so: o identificador desta varivel e o tipo de valores que essa varivel ir conter. Precisamos assim, de uma maneira de especificar esses detalhes e comunic-los ao computador. Para isso utilizamos o comando de declarao de variveis que faz parte da nossa linguagem que tem a seguinte forma: Declare <identificador> [,<lista_identificadores>] <tipo_das_variveis> onde: <identificador> - uma lita de palavras que pretendemos empregar como variveis em nosso algoritmo; <tipo_das_variveis> - determina que tipo de valor as variveis podero receber. Exemplos: Algoritmo AlgoMais VisuAlg declare caixa : <Tipo da Varivel>; declare caixa : <Tipo da Varivel>; declare caixa : <Tipo da Varivel> 4.2 Tipos de Variveis Todas as Variveis devem assumir um determinado tipo de informao O tipo de dado pode ser: Primitivo ? Pr-definido pela linguagem; Estticos ? uma parte de um tipo j existente; Dinmicos ? Definidos pelo programador.

Exemplos: A : Numerico (PRIMITIVO) TIPO NOTA=[1..10] : Numerico (Esttico) TIPO SEMANA = (Segunda-feira, Tera-feira, Quarta-feira, Quinta-feira, Sexta-feira, Sbado, Domingo) (Dinmico).
Tipos Primitivos de Dados Esses tipos de dados so os mais freqentes nas linguagens de programao, pois oferecem alguns tipos bsicos predefinidos, para criao de outros tipos. Cada um desses tipos primitivos tem um conjunto de valores restrito, veja abaixo: VisuAlg AlgoMais Descrio Numerico Numerico Representa valores inteiros e reais (com ponto ELABORADO POR BRUNO TONET 11

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO separador da parte decimal). Exemplos: 10, 15.5 Um nmero, uma letra ou qualquer smbolo especial Caracter entre aspas simples. Exemplos: 'a', '=', '#' Admite somente valores lgicos (Verdadeiro / Falso). Logico Exemplo: a <- Verdadeiro b <- Falso Seqncia de caracteres entre aspas duplas. Cadeia Exemplo: "Esta uma cadeia de caracteres"

Caracter

Logico

Literal

5. SINAL DE ATRIBUIO
Quando declaramos uma varivel, criamos uma rea de armazenamento para os dados, mas ela ainda est sem valor. Para que a varivel seja til, deve ter valores colocados por ns. A isto se chama "atribuir valores". A atribuio de valores feita pelo operador de atribuio "<-" (uma seta apontando para a esquerda). Por exemplo: Peso <- 78; Este comando atribui varivel Peso o valor 78. Nome <- "Joo da Silva" ; Este comando atribui varivel Nome o valor "Joo da Silva". Peso <- 78; Nome <- "Joo da Silva" ; Peso <- 78 Nome <- "Joo da Silva"

Algoritmo

AlgoMais VisuAlg

importante lembrar que s se pode atribuir a uns variveis valores do mesmo tipo da varivel. Nos exemplos acima, o varivel Salrio e do tipo numrico; ento, o seguinte comando seria invlido: Salrio <- "Insuficiente" Uma varivel, como o prprio nome est dizendo, pode ter seu contedo (seu valor) mudado quantas vezes for necessrio durante um programa.

ELABORADO POR BRUNO TONET

12

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO

6. COMANDOS DE E/S (ENTRADA/SADA)


Um programa que faa o seu processamento e no tenha como mostrar seus resultados intil. Portanto, em algum ponto deve haver a exibio de valores, e todas as linguagens de programao tm comandos para este fim. Nos algoritmos usamos o comando Escreva para isto. Escreva Comando de sada que exibe uma informao no monitor.

Sintaxe: Escreva <expresso | varivel>[,<lista_de_variveis>] Exemplo: Escreva "Este o valor de X:", X, "e este de Y:", Y Nem todos os dados que um programa manipula so gerados por ele. Um programa de caixa automtico, por exemplo, tem que obter do usurio o nmero da conta, a senha, a opo de servio desejada, etc. Assim, deve haver um meio para que sejam digitados (ou fornecidos de outra maneira) dados para uso do programa. Mais uma vez, todas as linguagens de programao permitem isto, e nos algoritmos usamos o comando Leia. A sintaxe deste comando : Leia Comando de entrada que permite a leitura de variveis de entrada utilizando o teclado.

Sintaxe: Leia <variavel>[,<lista_de_variveis>] Exemplos: Leia num Sada Algoritmo Escreva varivel AlgoMais Escreva varivel VisuAlg Escreva varivel Entrada Leia varivel Leia varivel Leia varivel

7. LINHAS DE COMENTRIO
Os comentrios so declaraes no compiladas que podem conter qualquer informao textual que voc queira adicionar ao cdigo-fonte para referncia e documentao de seu programa. Uma Linha So representados por duas barras normais ( // ). Todo o texto que voc digitar aps as duas barras ser comentrio. Ex.: // Este mtodo calcula o fatorial de n. . . x <- y; // Inicializa a varivel x com o valor de y ELABORADO POR BRUNO TONET 13

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO Mltiplas Linhas Para tal, basta colocar o comentrio entre chaves { } Ex: ALGORITMO { este algoritmo pega o nome de um aluno, seu cdigo e as suas notas, e verifica se ele passou de ano } DECLARE codigo, i, j, nota1, nota2, nota3 NUMERICO { declarao das variveis numricas } DECLARE nome CADEIA // declarao das variveis de cadeia . FIM ALGORITMO Uma Linha // TEXTO { TEXTO } // TEXTO Mltiplas Linhas { TEXTO } { TEXTO } { TEXTO }

Algoritmo AlgoMais VisuAlg

8. ESTRUTURAS SEQNCIAIS Construindo os Primeiros Algoritmos


Basicamente a construo de um algoritmo se resume s seguintes etapas Entendimento do problema; Definio dos dados que sero necessrios para resolv-lo (as entradas); a j deveremos ter idia dos tipos de dados que usaremos; Obteno destes dados; alguns vm do "exterior" do programa, e outros so calculados no prprio programa; Processamento em si; Exibio dos resultados. A primeira fase a mais difcil de se "pegar", pois depende um pouco da experincia do programador. Entretanto, mesmo nesta fase h tcnicas que podem ser aprendidas, e modelos que podem ser aplicados. Programao arte, cincia e tcnica, tudo ao mesmo tempo... Problema 1 - Clculo de Mdia Aritmtica Enunciado: Faa um programa que leia dois valores numricos, e calcule e exiba a sua mdia aritmtica. Etapa 1 Simples, hein? Dos tempos de escola lembramos que a mdia aritmtica de dois valores calculada como (a+b)/2, e sendo assim a primeira etapa j est pronta. Etapa 2

ELABORADO POR BRUNO TONET

14

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO Os dados necessrios sero os dois valores, que colocaremos em duas variveis A e B, do tipo numrico, e uma terceira varivel, que chamaremos Mdia, que armazenar a mdia aritmtica calculada. Etapa 3 A obteno dos dados neste programa simples e direta. Basta pedir ao usurio que digite os valores. Etapa 4 O processamento aqui o clculo da mdia, usando o mtodo citado acima, na etapa 1. O resultado do clculo ser armazenado na varivel Mdia. Etapa 5 Basta exibir o contedo da varivel Mdia. Soluo: Algoritmo Declare A,B,Mdia : Numrico Inicio Escreva "Programa que calcula a mdia aritmtica de dois valores." Escreva "Digite um valor : " Leia A Escreva "Digite outro valor : " Leia B Media <- (A+B)/2 Escreva "A mdia dos dois valores : ", Media Fim Algoritmo Comentrios Voc deve ter notado que colocamos na tela instrues para o usurio usando o comando Escreva. Esta uma boa tcnica de programao, mesmo hoje em dia, com o ambiente do Windows, etc. Da mesma forma, ao imprimir o resultado, no mostramos simplesmente a mdia, mas explicamos ao usurio o que aquele valor significa. Como pode ser analisado no tpico anterior todo programa possui uma estrutura seqencial determinada por um INCIO e FIM. Em um algoritmo, estes limites so definidos com as palavras Algoritmo e Fim Algoritmo. Veja outro Exemplo:

ELABORADO POR BRUNO TONET

15

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO ALGORITMO DECLARE prod :LITERAL DECLARE valor_prod, qtd, tot :NUMERICO INICIO ESCREVA "Digite o produto:" LEIA prod ESCREVA "Digite o valor unitrio do produto:" LEIA valor_prod ESCREVA "Digite a quantidade:" LEIA qtd tot<-valor_prod*qtd ESCREVA "Total:",qtd,"un. de",prod,"=", tot FIM ALGORITMO Lembrete Os comandos devem ser inseridos linha por linha. No so diferenciadas as letras maisculas de minsculas. As palavras no devem ser acentuadas. E no deve ser utilizada a letra ''.

Se executssemos esse algoritmo, teramos o seguinte resultado:


1 Passo: "Digite o produto:" Uma janela ir aparecer, pedindo para inserir o dado desejado. Vamos supor que voc digite "Abacaxi" 2 Passo: "Digite o valor unitrio do produto:" Voc digita "5.50" 3 Passo: "Digite a quantidade:" Voc digita "10" 4 Passo: O computador ir executar a operao da antepenltima linha do algoritmo: atribuir o resultado da multiplicao entre valor_prod e qtd varivel tot. 5 Passo: "Total: 10 un. de Abacaxi = 55.0" Exerccios: A. Classifique os contedo das variveis abaixo de acordo com seu tipo, assinalando com "N" os dados Numericos, com R os lgicos, com L os literais e com C os caracteres. ( ( ( ( ( )0 ( )5,7 ( ) -49 ( ) "Lucas" ( ) Verdadeiro ( ) "abc" ) 1012 ) +342 ) "V" ) -545 ( ( ( ( ( )"Joo" ) Falso ) 569 ) 0,00001 ) " 444 "

B. Assinale com um X os nomes de variveis vlidos. ( ( ( ( ( ) abc ) 123a ) -_ad ) A123 ) AB CDE ( ( ( ( ( ) 3abc ) a ) A&a ) Aa ) etc... ( ( ( ( ( )a ) acd1 )1 ) guarda-chuva ) b316

ELABORADO POR BRUNO TONET

16

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO C. Para as variveis declaradas a seguir so dados os seguintes valores. Determine o resultado da avaliao das expresses abaixo: X, Y e Z - so variveis numricas, sendo que: X = 2, Y = 3 e Z = 5 a) X * Y Z e) (X + Y) * Z b) X * (Y - Z) f) X ** Y 1 c) X + Y * Z g) (X ** Y) 1 d) X + (Y * Z) h) X ** (Y - 1) D. Assinalar os comandos de atribuio considerados invlidos, corrigindo-os quando possvel: Declare Nome, cor, Teste, Dia: Literal Soma, Num: Numerico X: Lgico a) b) c) d) e) f) g) h) i) j) ( ( ( ( ( ( ( ( ( ( ) ) ) ) ) ) ) ) ) ) NOME <- 5 SOMA <- NUM + 2 * X TESTE <- SOMA NUM <- SOMA COR <- "PRETO" X <- X + 1 NUM <- "*ABC*" DIA <- "SEGUNDA" SOMA + 2 <- X X <- (NOME = COR)

E. Quais os valores armazenados em SOMA, NOME e TUDO, supondo-se que NUM, X, COR, DIA, TESTE e COD valem, respectivamente, 5; 2; "AZUL"; "TERA"; .F. e .V.?

a) NOME <- DIA b) SOMA <- (NUM**2/X) + (X + 1) c) TUDO <- NO ((TESTE OU COD) E (SOMA < X)) F. Observa o seguinte Algoritmo e descreva o que ele faz. Primeiro Algoritmo Algoritmo Declare: NOTA1, NOTA2, NOTA3, NOTA4, MEDIA: NUMERICO; NOME : LITERAL INICIO Leia NOME; Leia NOTA1, NOTA2, NOTA3, NOTA4; MEDIA <- (NOTA1 + NOTA2 + NOTA3 + NOTA4) / 4; ESCREVER (NOME, MEDIA) FIM Algoritmo.

ELABORADO POR BRUNO TONET

17

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO G. 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 Faa um programa que leia trs valores numricos, e calcule e exiba a sua mdia aritmtica. Complicou? Problema 2 Realizarei uma viagem de vrios dias em meu automvel, e gostaria de saber a quilometragem mdia por litro de gasolina. Para isto, anotarei a quilometragem no velocmetro ao sair de viagem, e depois ao chegar; tambm vou somar toda a gasolina que comprar para o carro. Voc poderia fazer um programa que me desse, com estes dados, quantos km fiz, em mdia, por litro de gasolina? Problema 3 Faa um programa que leia o nome de um piloto, uma distncia percorrida em km e o tempo que o piloto levou para percorr-la (em horas). O programa deve calcular a velocidade mdia em km/h, e exibir a seguinte frase: A velocidade mdia de XX foi YY km/h. Onde XX o nome do piloto, e YY sua velocidade mdia. Problema 4 Em uma pizzaria, cada tulipa de chopp custa R$0,80 e uma pizza mista grande custa R$10,00 mais R$1,50 por tipo de cobertura pedida (queijo, presunto, banana, etc.). Uma turma vai pizzaria e pede uma determinada quantidade de "chopps" e uma pizza grande com uma determinada quantidade de coberturas. Faca um programa que calcula e conta e, sabendo quantas pessoas esto mesa, quanto que cada um deve pagar (no esquea os 10% do garom)... Maria idade letra Maria : : : : Literal Numerico Caracter Numerico

ELABORADO POR BRUNO TONET

18

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO

9. ESTRUTURA CONDICIONAL
Na vida real tomamos decises a todo o momento baseado em uma situao existente. Em programao chamamos esta situao de condio, e as alternativas possveis de aes. Por exemplo: "Se tiver R$ 10,00 sobrando irei ao cinema hoje noite, mas se no tiver ficarei vendo TV em casa". Qual a condio nesta frase? Fcil, "tiver R$ 10,00 sobrando". Ela uma expresso lgica, pois a pergunta "Tenho R$ 10,00 sobrando?" pode (tem que) ser respondida com "Sim" ou "No". Lembre-se, ento: em um algoritmo, toda condio tem que ser uma expresso lgica. Quais so as aes possveis? Fcil, mais uma vez; "irei ao cinema" e "ficarei vendo TV em casa". A primeira s ser realizada se a resposta pergunta "Tenho dinheiro suficiente?" for "Sim", enquanto que a segunda ser realizada caso a resposta seja "No". Ento, em um algoritmo, as aes so um ou mais comandos que sero realizados, alguns caso a avaliao da condio resulte em Verdadeiro, outros caso ela resulta em Falso. Vamos colocar agora a frase do pargrafo anterior em outra forma, mais parecida com o que um programa de computador: Se "tiver R$ 10,00 sobrando" ento "irei ao cinema" seno "ficarei vendo TV em casa". Veja que grifamos trs palavras: Se, ento, seno. Elas so muito importantes na estrutura dos comandos de deciso. Como prximo passo, vamos generalizar a estrutura que criamos acima: Se <condio> ento <aes (uma ou mais) a serem realizadas se a condio seno <aes (uma ou mais) a serem realizadas se a condio for falsa> for verdadeira>

Para terminar a nossa comparao, devemos lembrar que os comandos do algoritmo so sempre imperativos, e que o computador s lida com quantidades definidas (ou seja, ele no sabe o que "ter R$ 10,00 sobrando"). Para aproximar mais nossa frase de um algoritmo, poderemos ter a seguinte forma: Se Dinheiro >= 10 ento Ir ao Cinema seno Ver TV em Casa Entendeu a transformao? "Dinheiro" faz o papel de uma varivel que contm o que eu tenho sobrando no momento, e se valor maior ou igual a 10, ento "tenho R$ 10,00 sobrando". Por falar nisso, fique sabendo que a tcnica (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. No se preocupe, no entanto: algo fcil e que pode ser aprendido e desenvolvido.Bom, agora j podemos fazer um programa que ajude nosso amigo... O que fao esta noite? ELABORADO POR BRUNO TONET 19

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO Faa um programa que pea ao usurio a quantia em dinheiro que tem sobrando e sugira, caso ele tenha 10 ou mais reais, que v ao cinema, e se no tiver, fique em casa vendo TV. Algoritmos Declare Dinheiro: Numrico Incio Escreva "Servio Informatizado de Sugestes" Escreva "Quanto dinheiro voc tem sobrando?" Leia Dinheiro Se Dinheiro >= 10 ento Escreva "V ao cinema hoje noite." seno Escreva "Fique em casa vendo TV." Fim Se Escreva "Obrigado e volte sempre." Em relao ao que vimos at agora, apenas uma novidade: a expresso fim se ao final do comando de deciso. Ela delimita o comando, isto , mostra onde as aes da parte seno do comando terminam. Imagine o comando sem ela; ficaria assim:// Exemplo de um trecho de programa INCORRETO Se Dinheiro >= 10 ento Escreva "V ao cinema hoje noite." seno Escreva "Fique em casa vendo TV." Escreva "Obrigado e volte sempre. "Neste caso, o computador no saberia se o comando Escreva "Obrigado e volte sempre." faria ou no parte do comando de deciso (a endentao, ou seja, o fato de algumas linhas estarem mais distantes da margem esquerda que as outras, no quer dizer nada para o computador; fazemos isto apenas - e esta uma dica importante para voc - para que o algoritmo fique mais fcil de ler). Assim o fim se fundamental, e todas as linguagens de programao tm algo que cumpra esta funo. A estrutura condicional permite a mudana de caminho em um determinado fluxo devido veracidade de um determinado teste feito no decorrer do desenvolvimento do algoritmo. A estrutura "Se" deve ser aplicada nos momentos em que, de acordo com uma determinada condio, um processamento deva ser feito. Os comandos internos a essa estrutura s sero executados aps o teste da condio ter sido feito e seu resultado for verdadeiro. Aps serem executados os comandos internos a essa estrutura, o primeiro comando aps o" fim Se" ser executado e o algoritmo seguir a seqncia lgica normalmente. Estrutura Condicional Algoritmo

VisuAlg

AlgoMais

ELABORADO POR BRUNO TONET

20

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO Se <expresso lgica relacional> Entao <lista de comandos 1> [Senao <lista de comandos2>] Fim Se ou Se <expresso lgica ou <Se <expresso lgica 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. TESTANDO O ALGORITMO


Um algoritmo depois de ser elaborado pode e deve ser testado. Utilizamos um mtodo conhecido como teste de mesa. O teste de mesa como uma simulao de todos os passos, ou seja, entradas, comandos e instrues do algoritmo, a fim de saber se ele chega ao resultado a que se prope e se a lgica est correta. Preenchendo uma tabela com valores para as variveis e seguindo-se o fluxo de execuo do algoritmo. A cada comando o valor das variveis deve ser atualizado, concludo o teste de mesa podemos analisar os resultados, obtivemos a resposta correta? Se no, onde esto os erros? Sempre que realizado um teste de mesa, utiliza-se de tabelas para armazenar os valores e estados das variveis do algoritmo. Monitorando as variveis fcil determinar a eficincia do algoritmo. Uma vez entendido o funcionamento de um teste de mesa, e sabendo aplic-lo nos algoritmos elaborados o aprendizado da lgica computacional se torna muito mais fcil, visto que o teste de mesa faz uma simulao do raciocnio estruturado, utilizando a entrada de variveis e seguindo passo a passo a lgica. Caso em algum ponto a lgica esteja falha, o erro facilmente encontrado e facilmente resolvido. Exemplo: Para cada varivel voc deve fazer uma coluna e uma coluna para sada de dados. Algoritmo Algoritmo Declare a,b,c: numerico incio a <- 5 b <- 15 c <- a+b escreva c a <- 10 b <- 25 c <- a+b escreva c a <- a-b escreva a a <- 0 b <- 0 c <- 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 Sada

20

35 -15

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO Exerccios: Problema 1 Em uma escola, o aluno faz duas provas por perodo, com as notas variando de 0 a 10. Caso a mdia aritmtica das duas notas seja 7 ou mais, ele passa de ano; seno, ele reprovado. Faa um programa que receba as duas notas de um aluno e escreva se ele passou ou no de ano. Problema 2 Faa um programa que receba o valor do salrio de uma pessoa e o valor de um financiamento pretendido. Caso o financiamento seja menor ou igual a 5 vezes o salrio da pessoa, o programa dever escrever "Financiamento Concedido"; seno, escrever "Financiamento Negado". Independente de conceder ou no o financiamento, o programa escrever depois a frase "Obrigado por nos consultar." Problema 3 Dois carros percorreram diferentes distncias em diferentes tempos. Sabendo que a velocidade mdia a razo entre a distncia percorrida e o tempo levado para percorr-la, faa um programa que leias as distncias que cada carro percorreu e o tempo que cada um levou, e indique o carro que teve maior velocidade mdia. Problema 4 Faa um programa que leia o nome e idade de duas pessoas e imprima o nome da pessoa mais nova, e seu ano de nascimento (o programa deve funcionar corretamente para qualquer que seja o ano atual).

ELABORADO POR BRUNO TONET

22

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO

11. Estrutura de Repetio


Nos exemplos e exerccios que vimos at agora sempre foi possvel resolver os problemas com uma seqncia de instrues onde todas eram necessariamente executadas uma nica vez. Os algoritmos que escrevemos eram, portanto, apenas uma seqncia linear de operaes. Nesta seo veremos um conjunto de estruturas sintticas que nos do mais flexibilidade para determinar a seqncia de execuo dos comandos da linguagem. Quando queremos que um trecho de um algoritmo seja repetido num determinado nmero de vezes, utilizamos os comandos de repetio. A nossa linguagem possui trs estruturas de repetio: Repita..At, Para..Faa e Enquanto..Faa. 11.1. Repita..At Nessa estrutura todos os comandos da lista so executados e a expresso avaliada. Isto se repete at que a avaliao da condio resulte em verdadeiro, quanto ento o prximo comando a ser executado o comando imediatamente aps o at. Cada repetio da lista de comandos tambm chamada de iterao. Essa estrutura tambm chamada de lao de repetio. Eis a sua forma geral: Repita <lista de comandos> At <expresso lgica ou relacional> Ex.: Escrever os nmeros de 1 a 10. ALGORITMO DECLARE I: NUMERICO I<- 1 REPITA ESCREVA i I<- I + 1 ATE I> 10 FIM ALGORITMO Obs.: A varivel "i" controla o nmero de repeties do lao. Normalmente a varivel de controle do lao recebe um valor inicial, incrementada de um valor constante no lao e tem seu valor testado em algum ponto do lao. Ao chegar a um determinado valor o lao interrompido. A inicializao da varivel contadora deve acontecer fora do lao, antes do seu incio. Existem diversas maneiras de implementar o mesmo lao, mas todo lao com varivel de controle deve conter: a) inicializao b) incremento(i=i+1) ou decremento(i=i-1) c) teste de valor final ELABORADO POR BRUNO TONET 23

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO Veja um outro exemplo: Escreva os nmeros de 10 a 1. ALGORITMO DECLARE i :NUMERICO i <- 10 REPITA ESCREVA i i <- i - 1 ATE i = 0 FIM ALGORITMO 11.2 Enquanto..Faca Na estrutura Enquanto..faca, a expresso lgica avaliada e, se ela for verdadeira, a lista de comandos executada. Isso se repete at que a condio seja falsa. Veja a sua forma geral: Enquanto <expresso lgica ou relacional> Faca <lista de comandos> Fim Enquanto A estrutura enquanto...faca tambm uma estrutura de repetio, semelhante a repita. A diferena bsica entre as duas estruturas a posio onde testada a expresso. No repita, a condio avaliada aps a execuo dos comandos, o que garante que os comandos sero executados pelo menos uma vez. No enquanto, a expresso avaliada no incio e se o resultado for falso no primeiro teste a lista de comandos no executada nenhuma vez. Essa diferena faz com que em determinadas situaes o uso de uma estrutura seja mais vantajoso que o uso da outra. O exemplo a seguir, onde so mostradas solues para um problema, utilizando as duas estruturas, ilustram essa diferena: Problema: Faa um algoritmo que leia diversos nmeros positivos e escreva, para cada um, o nmero recebido. 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, se o primeiro valor for negativo, o algoritmo no deve escrever nada. Para que isso ocorra um teste do valor deve ser feito antes da escrita. Como no Repita o teste feito ao final, um outro teste deve ser colocado no incio do lao, o que faz com que, a cada iterao, dois testes sejam feitos. Isto no ocorre no Enquanto, onde o teste feito no incio, no sendo, portanto, necessrio um teste adicional.

ELABORADO POR BRUNO TONET

24

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO 11.3 Para..Faca Forma geral: Para <varivel de controle> De <valor inicial> Ate<valor final> [Passo<incremento>] Faca <lista de comandos> Fim Para Na estrutura Para, a varivel de controle inicializada com <valor inicial> e no incio de cada iterao o valor da varivel de controle comparado com <valor final>. Se o valor da varivel for menor ou igual a <valor final>, a lista de comandos executada e aps ser executado o ltimo comando da lista, a varivel de controle incrementada. Isto repete-se at que o valor da varivel de controle seja maior que <valor final>, quando ento executado o comando imediatamente aps a palavra Fim. A condio Passo no obrigatria, mas se precisar incrementar a varivel de controle voc deve utilizar, por exemplo, voc quer que a varivel 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 repetio mais completa que as anteriores, pois ela incorpora a inicializao, incremento e teste de valor final da varivel de controle. preferencialmente utilizada em situaes em que sabe-se previamente o nmero de repeties a serem feitas. Este nmero de repeties pode ser uma constante ou estar em uma varivel. A seguir sero apresentados alguns problemas utilizando estruturas de repetio e desenvolvidas algumas solues para os mesmos. Problema 1: Faa um algoritmo que leia 5 nmeros e escreva todos os que forem positivos. Soluo: Neste problema, a mesma ao repetida 5 vezes. Em cada uma delas um nmero lido e, se for positivo, escrito. Como o nmero de repeties definido (5), pode-se utilizar a estrutura para. Uma possvel soluo para o algoritmo a seguinte: ALGORITMO DECLARE i,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. ESCREVA numero FIM SE FIM PARA FIM ALGORITMO Neste algoritmo so utilizadas duas variveis, cada uma com uma funo bem definida. A varivel i usada para controlar o nmero de repeties e a varivel nmero utilizada para armazenar cada um dos valores lidos. Ao escrever um algoritmo importante ter bem clara a funo de cada varivel. Como sero lidos 5 nmeros diferentes, a leitura do nmero deve ser feita dentro do lao. ELABORADO POR BRUNO TONET 25

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO Problema 2: Faa um algoritmo que leia um nmero N e escreva todos os nmeros de 1 a N. Soluo: Neste problema, lido um nmero N, e so escritos todos os nmeros de 1 a N. Para isso deve ser utilizado uma estrutura de repetio. Como o nmero de repeties conhecido (est na varivel N) pode-se utilizar a estrutura Para. Uma possvel soluo para o problema a seguinte:

ALGORITMO DECLARE i,numero :NUMERICO LEIA numero PARA i DE 1 ATE numero FACA ESCREVA i FIM PARA FIM ALGORITMO Vale observar que, como nesse algoritmo lido apenas um nmero, a leitura do mesmo deve ser feita fora da estrutura de repetio.

Estrutura de Repetio
VisuAlg Repita < lista de comandos> Ate <expresso lgica ou relacional> AlgoMais Repita < lista de comandos> Ate <expresso lgica ou relacional>

Enquanto <expresso lgica ou relacional> Enquanto <expresso lgica ou relacional> Faca Faca <lista de comandos> FimEnquanto <lista de comandos> Fim

Para <varivel de controle> De <valor inicial> Para <varivel 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

Exerccios Algoritmos com Repetio 1. Implementar um algoritmo capaz de encontrar o maior dentre 5 nmeros inteiros quaisquer. Suponha todos serem distintos. ELABORADO POR BRUNO TONET 26

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO 2. Escrever um algoritmo que calcule a mdia obtida por uma turma de "n" alunos na primeira prova do semestre. 3. Escrever um algoritmo que, dada uma seqncia de valores inteiros e positivos, determine qual e o menor valor desta seqncia e a mdia aritmtica dos valores pares. O valor 0 (zero) indica o trmino dos dados de entrada (finalizador). 4. Escrever um algoritmo que leia o nome, sexo, altura e peso de um grupo de 50 pessoas e informe: mdia das alturas dos homens e dos pesos das mulheres; - nome do homem mais alto e da mulher mais gorda; 5. Escrever um algoritmo que l 5 valores para a, um de cada vez, e conta quantos destes valores so negativos, escrevendo esta informao. 6. Escrever um algoritmo que l um nmero desconhecido de valores, um de cada vez, e conta quantos deles esto em cada um dos intervalos [0,25], (25,50], (50,75], (75,100]. 7. A srie de Fibonacci tem como dados os dois primeiros termos da srie que so respectivamente 0 e 1. A partir deles os demais termos so construdos pela seguinte regra:

Escrever um algoritmo que gera os 10 primeiros termos da srie de Fibonacci e calcula e escreve a soma destes termos. 8. Escrever um algoritmo que l 2 conjuntos de 4 valores a, b, c, d, um conjunto por vez e os escreve assim como foram lidos. Em seguida, ordene-os em ordem decrescente e crescente e os escreva novamente. 9. Escrever um algoritmo que l 10 valores para n, um de cada vez, todos inteiros e positivos, e para cada n lido, escreva a tabuada de 1 at n de n. 1xn=n 2 x n = 2n ... . n x n = n2 . .

10. Escrever um algoritmo que l um nmero no determinado de pares de valores m,n , todos inteiros e positivos, um par de cada vez, e calcula e escreve a soma dos n inteiros consecutivos a partir de m inclusive. Aplicao em problemas reais 1. Num frigorfico existem 90 bois. Cada boi traz preso no seu pescoo um carto contendo um nmero de identificao e seu peso. Implementar um algoritmo que escreva o nmero e o peso do boi mais gordo e do boi mais magro (no necessrio armazenar os dados de todos os bois). ELABORADO POR BRUNO TONET 27

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO 2. Foi feita uma pesquisa de audincia de TV em vrias casas de uma certa cidade, num determinado dia. Para cada casa visitada, o entrevistador (munido de um "notebook") escolhia num menu qual o canal que estava sendo assistido (Cultura, SBT, Globo, Record, MTV, TVA, Manchete, Bandeirantes) e o nmero de pessoas que estavam assistindo TV. Se o TV estivesse desligado, nada era anotado, ou seja, esta casa no entrava na pesquisa. Implementar uma verso do algoritmo que o entrevistador est usando no seu "notebook", e que: a) leia um nmero indeterminado de dados, terminando quando o entrevistador escolher a opo Fim b) calcule e escreva a percentagem de audincia para cada emissora. c) identifique a maior e a menor audincia da pesquisa. 3. Deseja-se fazer um levantamento a respeito da ausncia de alunos segunda prova de I.C.C. para cada uma das 14 turmas existentes. Para cada turma fornecido um conjunto de valores, sendo que os dois primeiros valores do conjunto correspondem identificao da turma (A, B, C, ...) e ao nmero de alunos matriculados, e os demais valores deste conjunto correspondem ao nmero de matrcula do aluno e letra A ou P, para o caso de o aluno estar ausente ou presente, respectivamente. Implementar um algoritmo que: a. para cada turma, calcule a porcentagem de ausncia e escreva a identificao da turma e a porcentagem calculada; b. determine e escreva quantas turmas tiveram porcentagem de ausncia superior a 5%. 4. Foi feita uma pesquisa para determinar o ndice de mortalidade infantil em um certo perodo. Implementar um algoritmo que: a) leia inicialmente o nmero de crianas nascidas no perodo; b) leia, em seguida, um nmero indeterminado de linhas contendo, cada uma, o sexo de uma criana morta (masc, fem) e o nmero de meses de vida da criana. A ltima linha (que identificar o final da entrada de dados) conter a palavra 'VAZIO' no lugar do sexo. c) determine e imprima: c1) a porcentagem de crianas mortas no perodo; c2) a porcentagem de crianas do sexo masc. mortas no perodo; c3) a porcentagem de crianas que viveram 24 meses ou menos no perodo. 5. Implementar um algoritmo para calcular o nmero de dias decorridos entre duas datas (considerar tambm a ocorrncia de anos bissextos), sabendo que: * cada par de datas lida numa linha, a ltima linha contm o nmero do dia negativo (indicando que terminou o clculo); * a primeira data lida sempre a mais antiga. * O ano ser digitado com 4 dgitos.

ELABORADO POR BRUNO TONET

28

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO

12. VARIVEIS COMPOSTAS HOMOGNEAS


Vimos, no incio deste curso, ser possvel dar um Nome para uma posio de memria, sendo que a esta ser associado um valor qualquer. Pois bem, acontece que, muitas vezes, esta forma de definio, ou melhor dizendo, de alocao de memria, no suficiente para resolver certos problemas computacionais. Imagine por Exemplo, como faramos para construir um algoritmo, para ler o Nome de N Pessoas e que imprimisse um relatrio destes mesmos nomes, mas ordenados alfabeticamente? No seria uma tarefa simples, haja visto no ser possvel determinar quantos nomes seriam lidos, mesmo que soubssemos o nmero de pessoas, digamos 1.000 pessoas, teramos que definir 1.000 variveis do tipo STRING, como mostrado abaixo: ALGORITMO "loucura" DECLARE nome1, nome2, nome3, nome4, nome5, nome6, nome7 ,...., nome999, nome1000: Literal LEIA nome1,nome2,...,nome1000 . . . FIM ALGORITMO Considere o tamanho do algoritmo, e o trabalho braal necessrio para constru-lo. Isto s com 1.000 Nomes, imagine agora 1.000.000 de pessoas. A construo deste algoritmo comearia a ficar invivel na pratica. Para resolver problemas como este, e outros, foi criado um novo conceito para alocao de memria sendo, desta forma, tambm criado uma nova maneira de definirem variveis, a qual foi denominada de varivel indexada. Uma varivel indexada corresponde a uma seqncia de posies de memria, a qual daremos nico Nome, sendo que cada uma destas pode ser acessada atravs do que conhecemos por ndice. O ndice corresponde a um valor numrico ( exceto NUMERICO ), ou a um valor caractere ( exceto CADEIA ). Cada uma das posies de memria de uma varivel indexada pode receber valores no decorrer do algoritmo como se fosse uma varivel comum, a nica diferena reside na Sintaxe de utilizao desta varivel. 12.1 Variveis Indexadas Unidimensionais (Vetores) Tambm conhecida por "Vetor". Uma varivel unidimensional, como o prprio Nome j indica, possui apenas uma dimenso, sendo possvel definir variveis com quaisquer tipo de dados.

Declarao de Vetores Sintaxe: DECLARE <identificador> VETOR [<tamanho>] <tipo (numerico, logico, caracter ou cadeia)> Ex.: DECLARE idades VETOR [5] : NUMERICO ELABORADO POR BRUNO TONET 29

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO Atribuindo Valores a Elementos do Vetor Para se atribuir um valor a um elemento do vetor devemos utilizar o seguinte padro: Sintaxe: < identificador>[<posio>] <valor> Ex.: idades[3] <- x idades[1] <- 2 idades[i] <- i**2 Problema 1: Escrever um algoritmo que l um vetor V(6) e o escreve. Conte, a seguir, quantos valores de V so negativos e escreva esta informao. Soluo: Neste problema, a mesma ao repetida 6 vezes e mostra os valores lidos, logo seguir pede para dizer quantos desses nmeros so negativos. Para isso deve ser utilizada uma estrutura de repetio para receber os valores lidos e uma condio para contar quantos numero so negativos. Uma possvel soluo para o algoritmo a seguinte: ALGORITMO DECLARE vet VETOR [6] :NUMERICO DECLARE i, conta_neg :NUMERICO conta_neg <- 0 PARA i DE 1 ATE 6 FACA LEIA vet[i] SE vet[i]<0 >ENTAO conta_neg <- conta_neg + 1 FIM SE FIM PARA PARA i DE 1 ATE 6 FACA ESCREVA vet[i] FIM PARA ESCREVA "Total de nmeros negativos: ", conta_neg FIM ALGORITMO 12.2 Variveis Indexadas Bidimensionais (Matrizes) Tambm conhecida por "Matriz". Uma varivel Bidimensional, como o prprio Nome j indica, possui duas dimenses, sendo ser possvel definir variveis com quaisquer tipo de dados vlidos no AlgoMais. A= Matriz A 3x2 ELABORADO POR BRUNO TONET 30 a(1,1) a(2,1) a(3,1) a(1,2) a(2,2) a(3,2)

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO Declarao de Matrizes DECLARE <identificador> VETOR [<dimenso 1>][<dimenso 2>] <tipo> Ex.: DECLARE A VETOR [3][2] NUMERICO Atribuindo Valores a Elementos da Matriz < identificador>[<posio 1>][<posio 2>] <- <valor> Ex.: A[3][1] <- x A[1][1] <- 0 A[i][j] <- 14 Problema 1: Escreva um algoritmo que l uma matriz M(3,3) e calcula as somas: a) da linha 3 de M. b) da coluna 2 de M. c) da diagonal principal. d) da diagonal secundria. e) de todos os elementos da matriz. Soluo: Neste problema, temos uma matriz quadrada de ordem trs por trs sendo 3x3 = 9 aes que so repetida, logo seguir pede para dizer a soma da linha trs M[3][quantidade de colunas], soma da coluna dois M[quantidade de linhas] [2], diagonal principal onde os ndices da coluna e linha sempre so iguais, soma da diagonal secundria 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. Para isso deve ser utilizada uma estrutura de repetio para receber os valores lidos e algumas condies para verificar as questes pedidas. Uma possvel soluo para o algoritmo a seguinte:

ALGORITMO DECLARE matriz VETOR[3][3] : NUMERICO; DECLARE i, j, somaLinha3, somaColuna2, somaDiagPrinc, somaDiagSecu, somaTudo : NUMERICO

ELABORADO POR BRUNO TONET

31

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO Inicio somaLinha3 <- 0 somaColuna2 <- 0 somaDiagPrinc <- 0 somaDiagSecu <- 0 somaTudo <- 0 PARA i DE 1 ATE 3 FACA PARA j DE 1 ATE 3 FACA LEIA matriz[i][j] somaTudo <- matriz[i][j] + somaTudo SE i=3 ENTAO somaLinha3 <- matriz[i][j]+ somaLinha3 FIM SE SE j=2 ENTAO somaColuna2 <- matriz[i][j]+ somaColuna2 FIM SE SE i=j ENTAO somaDiagPrinc <- matriz[i][j]+ somaSomaDiagPrinc FIM SE SE j=4-i ENTAO somaDiagSecu <- 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 ", somaTudo ESCREVA "Soma dos elementos da linha 3 ", somaLinha3 ESCREVA "Soma dos elementos da coluna 2 ", somaColuna2 ESCREVA "Soma dos elementos da diagonal principal ", somaDiagPrinc ESCREVA "Soma dos elementos da diagonal secundria ", somaDiagSecu FIM ALGORITMO

Variveis Compostas Homogneas


VisuAlg varivel [10] : <Tipo da Varivel> varivel [5,5] : <Tipo da Varivel> Exercicios 1. Implementar um algoritmo que leia 150 notas de provas e os respectivos nomes dos indivduos (at 30 caracteres) e: * calcule a mdia das notas; * calcule quantas notas esto acima e abaixo da mdia (no considerar notas iguais mdia); ELABORADO POR BRUNO TONET 32 AlgoMais varivel Vetor [5] <Tipo da Varivel>; varivel Vetor [5][5] <Tipo da Varivel>;

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO * quantas pessoas possuem a maior e a menor das notas, e quais so elas (isto , seus nomes). 2. Implementar um algoritmo para corrigir provas de mltipla escolha. Cada prova tem 10 questes e cada questo vale 1 ponto. O primeiro conjunto de dados a ser lido ser o gabarito para a correo da prova. Os outros dados sero os nmeros dos alunos e suas respectivas respostas, e o ltimo nmero, do aluno fictcio, 9999, indicando que no h mais alunos. O programa deve calcular e imprimir: a) para cada aluno, seu nmero e sua nota; b) a porcentagem de aprovao, sabendo-se que a nota mnima de aprovao 6; c) a nota que teve a maior freqncia absoluta, ou seja, a nota que apareceu mais vezes (supondo a inexistncia de empates). Dicas: use o esquema de estruturas abaixo:

3. Uma pesquisa sobre algumas caractersticas fsicas da populao de uma determinada regio coletou os seguintes dados, referentes a cada habitante, para serem analisados: - sexo (masculino, feminino) - cor dos olhos (azuis, verdes, castanhos) - cor dos cabelos (louros, castanhos, pretos) - idade em anos. Para cada habitante, foi perfurado um carto com esses dados, e o ltimo carto, que no corresponde a ningum, conter o valor da idade igual a -1. Implementar um algoritmo que determine e escreva: a) a maior idade dos habitantes; b) porcentagem de indivduos do sexo feminino cuja idade esteja entre 18 e 35 anos, inclusive, e que tenham olhos verdes e cabelos louros (T bom assim?). 4. Implementar um algoritmo para multiplicar duas matrizes de nmeros inteiros. A multiplicao s possvel se o nmero de colunas da matriz A for igual ao nmero de linhas da matriz B. Suponha um tamanho mximo igual a uma matriz 5x5, sendo que o usurio entrar com o tamanho e os valores de cada uma das matrizes a serem multiplicadas. ELABORADO POR BRUNO TONET 33

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO

13 SUBALGORITMOS
So trechos de algoritmos que efetuam um ou mais clculos determinados. Ao invs de escrever-se um algoritmo grande, escrevem-se vrios algoritmos menores, os quais, no isoladamente, mas em conjunto, resolvem o problema proposto. conveniente utiliz-los quando uma determinada tarefa efetuada em diversos lugares no mesmo algoritmo. Ao invs de escrever-se um trecho diversas vezes, escreve-se um sub-algoritmo e chama-se-o diversas vezes. - Eles reduzem o tamanho do algoritmo. - Facilitam a compreenso e visualizao do algoritmo. - So declarados no incio do algoritmo e podem ser chamados em qualquer ponto aps sua declarao. - Eles podem ser Funes que retorna algum valor ou Subrotina que no retorna Nada. 13.1 Funes Uma funo um instrumento (Esttico) que tem como objetivo retornar um valor ou uma informao. A chamada de uma funo feita atravs da citao do seu nome seguido opcionalmente de seu argumento inicial entre parnteses. As funes podem ser predefinidas pela linguagem ou criadas pelo programador de acordo com o seu interesse. 13.1.1 Criando Funes A criao de uma Funo em AlgoMais deve ser declarada, com os demais objetos, no incio do programa. Este tipo de subalgoritmo sempre retornam um e apenas um valor ao algoritmo que lhe chamou. Cada funo tem associada ao seu valor de retorno um tipo explcito. Da mesma maneira com que os parmetros so fixos para todas as chamada o retorno tambm fixo. Veja como tem que ficar seu algoritmo principal: ALGORITMO <Declarao das variveis globais> <Definio da funo> <Lista de comandos> FIM ALGORITMO Sintaxe da Funo Funcao <identificador> (<parmetros>) <tipo de retorno> <Declarao de variveis locais> <Lista de comandos> Fim Parmetros: Entre um mesmo tipo de dados so separados por vrgula. Entre tipos de dados a separao feita com ponto-e-vrgulas ';'. Tipo de retorno da funo: numerico, logico ou cadeia. Declarao de variveis locais: idntica a declarao de variveis globais. As variveis declaradas localmente tem validade dentro do escopo da funo.

ELABORADO POR BRUNO TONET

34

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO Exemplo: ALGORITMO DECLARE a,b NUMERICO FUNCAO FSoma(x,y NUMERICO) NUMERICO DECLARE rx, ry, total NUMERICO rx<-x ry<-y total<-rx+ry FSoma<-total FIM LEIA a LEIA b soma<-FSoma(a,b) ESCREVA "Soma das vaiveis ", soma FIM ALGORITMO Cuidados e Bugs Sempre declare as variveis globais antes da funo. A funo sempre fica dentro do escopo Algoritmo e Fim Algoritmo. Procure no Declarar variveis globais com o mesmo nome das variveis da funo. Comandos de Repetio No Funciona dentro da funo. Obs: So problemas do Software AlgoMais e VisuAlg no suporta Fues.

Veja como faz falta os comandos de repetio. Aqui tem um exemplo de um Algoritmo com o Subalgoritmo Funo sem os Comandos de repetio, pois eles no funcionam no AlgoMais. Esse Algoritmo recebe Cinco valores e mostra qual o valor maior. ALGORITMO DECLARE v VETOR [5] NUMERICO DECLARE i,maior NUMERICO FUNCAO FMaior (vet VETOR [5] NUMERICO) NUMERICO DECLARE RMaior,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

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO ESCREVA v[i] FIM maior<-FMaior(v) ESCREVA "Maior elemento ", maior FIM ALGORITMO 13.1.2 Funes Pr-Definidas FUNO OPERAO QUOCIENTE(X,Y) Retorna o quociente da diviso inteira de x por y. RESTO(X,Y) Retorna o resto da diviso inteira de x por y. TRUNCA(X) Elimina as casas decimais. MODULO(X) Valor absoluto de x. RAIZ(X) Raiz quadrada de x. Funes para trabalhar com (somente) variveis do tipo CADEIA: TAMANHO(cadeia) Retorna o nmero de caracteres de uma cadeia. CONCATENA(cadeia1,cadeia2,...) Faz a concatenao da cadeia1 com a cadeia2. Copia uma varivel que contenha um texto, basta colocar a SUBCADEIA(cadeia, INICIO, cadeia que deseja copiar, o incio da cadeia de caracteres que vai FIM) copiar e o fim da cadeia de caracteres. Exemplos com o uso de funes pr-definidas. O ALGORITMO ALGORITMO ESCREVA Quociente(23,5) ESCREVA Resto(23,5) ESCREVA Trunca(7.48) ESCREVA Modulo(-30) ESCREVA Raiz(25) FIM ALGORITMO ALGORITMO DECLARE nome CADEIA nome<-Concatena("Joo", " da Silva") ESCREVA nome ESCREVA Subcadeia("curso de algoritmos",10,19) ESCREVA Tamanho("curso de algoritmos") FIM ALGORITMO 13.2 Sub-rotinas Sintaxe: Sub-rotina <identificador do nome da sub-rotina> ( [REF] <Parmetros> ) <Declarao de variveis locais> <Lista de comandos> Fim ELABORADO POR BRUNO TONET 36 TERIA COMO RESULTADO... 4.0 3.0 7.0 30.0 5.0

Joo da Silva algoritmos 19.0

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO Parmetros: de um mesmo tipo de dado so separados por vrgula, entre os tipos de dado so separados por ponto e vrgula ( ; ). Passagem de parmetros por referncia: utiliza-se a construo Ref antes dos identificadores para indicar a passagem por referncia. Os identificadores so separados por vrgula. Declarao de variveis locais: idntica a declarao de variveis globais. As variveis declaradas localmente tem validade dentro do escopo da sub-rotina. Exemplo: Sub-rotina Troca (Ref I, J numerico) Digita cinco valores e coloca em ordem decrescente Algoritmo SEM sub-rotina ALGORITMO DECLARE A,B,C,D,CONT,AUX NUMERICO CONT <- 0 LEIA A,B,C,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,B,C,D FIM ALGORITMO ALGORITMO DECLARE A,B,C,D,CONT NUMERICO SUBROTINA TROCA(ref x, y numerico) DECLARE Aux NUMERICO Aux <- x x<- y y <- Aux FIM CONT <- 0 LEIA A,B,C,D REPITA SE D>A ENTAO TROCA(D,A) FIM SE SE D>B ENTAO TROCA(D,B) FIM SE SE D>C ENTAO TROCA(D,C) FIM SE SE C>A ENTAO TROCA(C,A) FIM SE SE C>B ENTAO TROCA(C,B) FIM SE SE B>A ENTAO TROCA(B,A) FIM SE CONT<-CONT+1 ATE cont=5 ESCREVA A, " ",B," ",C," ",D FIM ALGORITMO

37

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO Exerccios: 1. Escrever um algoritmo que l uma matriz M( 6, 8 ) e a escreve. Utilize um subalgoritmo do tipo funo para obter o maior elemento da linha 4 de M. Escreva o valor do maior elemento da linha 4 de M. Utilize um subalgoritmo do tipo procedimento para inverter os valores da linha 2 de M. Inverter, aqui, quer dizer, trocar o 1o com o ltimo, o 2o com o penltimo, e assim por diante, at o 4o com o 5o. Escreva a matriz modificada. Utilize um subalgoritmo do tipo procedimento para trocar a linha 1 com a linha 5 de M. Escreva a matriz modificada. Utilize tambm procedimentos para a leitura e para a escrita da matriz. 2. Escrever um algoritmo para calcular a soma de dois valores inteiros. Utilizar um subalgoritmo de funo que receba dois valores e retorne sua soma. 3. Escrever um algoritmo para determinar o maior de dois valores inteiros. Utilizar um subalgoritmo de funo que receba dois valores e retorne o maior. 4. Escrever um algoritmo para determinar se um determinado nmero inteiro par ou mpar. Utilizar um subalgoritmo de funo que retorna um valor lgico para indicar se o valor recebido par ou no. 5. Escrever um algoritmo que leia um nmero inteiro e calcula a soma de todos os nmeros mpares compreendidos entre 1 e o valor lido. Utilizar um subalgoritmo de funo que receba o valor lido e retorna a soma dos mpares. Dentro deste subalgoritmo deve ser utilizado o subalgoritmo da questo anterior. 6. Escrever um subalgoritmo (com algoritmo principal) para elevar um nmero qualquer a uma potncia. So fornecidos o nmero e a potncia. 7. Escrever um subalgoritmo (com algoritmo principal) para calcular a soma e o produto de dois valores inteiros. Fazer 2 solues: uma com funo e outra com procedimento. 8. Escreva um algoritmo que l um nmero no determinado de valores m, todos inteiros e positivos, um valor de cada vez, e, se m<10 utiliza um subalgoritmo do tipo funo que calcula o fatorial de m, e caso contrrio, utiliza um subalgoritmo do tipo funo para obter o nmero de divisores de m. Escrever cada m lido e seu fatorial ou seu nmero de divisores com uma mensagem adequada". Neste caso, temos um programa principal e dois subalgoritmos. 9. Escrever um algoritmo que l um vetor V(10) e o escreve. Utilize uma funo para obter o maior elemento de V. Escreva o maior elemento encontrado com a mensagem: "E o MAIOR do VETOR". 10. Escrever um algoritmo que l uma matriz M(6,6) e a escreve. Utilize uma funo para obter a posio do menor elemento da diagonal principal de M. Escrever o menor elemento e sua posio na diagonal. 11. Escreva um algoritmo que l um nmero no determinado de conjuntos de 3 valores a, b, c, no negativos, um conjunto de cada vez, e, para cada conjunto lido, calcula as mdias aritmtica, geomtrica, harmnica e ponderada com peso 2 para o menor valor, 3.5 para o valor intermedirio e 4.5 para o maior valor. Para cada conjunto lido escrever os valores lidos e as mdias calculadas. Faa procedimentos para ordenao e clculo das mdias (por exemplo, Procedimento Ordena e ELABORADO POR BRUNO TONET 38

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO Procedimento Medias). 12. Faca uma subrotina chamada remove para eliminar um elemento de um vetor. A subrotina deve receber por parmetro a posio (ndice) do elemento a ser eliminado, o tamanho do vetor e o nome do vetor. 13. Faca uma subrotina chamada insere para inserir um elemento (nmero) em um vetor. A subrotina deve receber por parmetro o nmero a ser inserido, a posio (ndice) a ser inserido, o tamanho do vetor e o nome do vetor.

14. FUNES DEFINIDAS RECURSIVAMENTE


Um algoritmo que para resolver um problema divide-o em subprogramas mais simples, cujas solues requerem a aplicao dele mesmo, chamado recursivo, seja de forma direta ou indireta. Em geral, uma rotina recursiva R pode ser expressa como uma composio formada por um conjunto de comandos C (que no contm chamadas a R) e uma chamada (recursiva) rotina R:

Entretanto, pode-se ter tambm uma forma indireta de recurso, na qual as rotinas so conectadas atravs de uma cadeia de chamadas recursivas que acaba retornando a primeira que foi chamada:

Para que esteja bem definida, um funo recursiva deve possuir as seguintes propriedades: (1) Deve haver certos argumentos, chamando valores bsicos, para os quais a funo no se refere a ela mesma. ELABORADO POR BRUNO TONET 39

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO (2) Sempre que a funo se refere a ela mesma o argumento deve estar relacionado a um valor bsico e/ou a um valor anterior. Vejamos um exemplo clssico para esclarecermos o conceito: calculo do fatorial de um nmero. A definio de fatorial : F(n) = 1 se n = 0 ou n = 1; F(n) = n.F(n-1), se n>1. onde n um numero inteiro positivo. Uma propriedade (facilmente verificvel) dos fatoriais que: n! = n . (n-1)! Esta propriedade chamada de propriedade recursiva: o fatorial de um numero pode ser calculado atravs do fatorial de seu antecessor. Ora, podemos utilizar esta propriedade para escrevermos uma rotina recursiva para o calculo de fatorial. Veja: F(4) = 4.F(4-1) F(3) = 3.F(3-1) F(2) = 2.F(2-1) F(1) = 1.F(1-1) F(0) = 1 imagina a funo subindo, pois encontrou F(0) = 1 F(1) = 1.1 F(2) = 2.1 F(3) = 3.2 F(4) = 4.6 resposta 24. Qual a lgica neste problema? 4x3x2x1=24 ELABORADO POR BRUNO TONET 40

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO Se fosse n 6 qual seria a resposta? 6x5x4x3x2x1=720 Vamos passar isso para o Computador Os algoritmos recursivos tm em geral a forma seguinte:

caso de base (base de recurso), onde o problema resolvido diretamente (sem chamada recursiva) caso geral, onde o problema resolvido com uma chamada recursiva caso geral onde o tamanho do problema menor a cada chamada

Esquematicamente, os algoritmos recursivos tm 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, as chamadas recursivas devem convergir em direo ao caso de base, seno o algoritmo no terminar jamais. Convergir significa ter uma parte menor do problema para ser resolvido. F(4) = 4.F(4-1) F(3) = 3.F(3-1) F(2) = 2.F(2-1) F(1) = 1.F(1-1) F(0) = 1 ------------ Caso Base F(1) = 1.1 F(2) = 2.1 F(3) = 3.2 F(4) = 4.6 Algoritmo // AlgoMais Declare A, Fatorial numrico Funcao Fat (x numerico) numrico se x=0 entao fat<-1 senao Fat <- x * Fat (x-1) fim se Fim Leia A Fatorial <- Fat (A) Escreva "Fatorial ", A, " ", Fatorial Fim Algoritmo Vantagens da Recurso ELABORADO POR BRUNO TONET 41

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO Simplifica a soluo de alguns problemas; Geralmente, um cdigo com recurso mais conciso; Caso no seja usada, em alguns problemas, necessrio manter o controle das variveis manualmente (book keeping). Desvantagens da Recurso Funes recursivas so mais lentas que funes iterativas, pois muitas chamadas consecutivas a funes so feitas; Erros de implementao podem levar a estouro de pilha. Isto , caso no seja indicada uma condio de parada, ou se esta condio nunca for satisfeita, entre outros. Exercicos 1. Escrever um algoritmo, utilizando um subalgoritmo recursivo, para calcular a soma dos 'n' primeiros inteiros positivos, sendo 'n' um valor fornecido pelo usurio. 2. Escrever um algoritmo, utilizando um subalgoritmo recursivo, para calcular o fatorial de um valor inteiro qualquer. 3. Escrever um algoritmo, utilizando um subalgoritmo recursivo, que eleve um nmero inteiro qualquer a uma potncia. Devem ser fornecidos o nmero e a potncia. 4. Escrever um algoritmo, utilizando um subalgoritmo recursivo, que calcule a soma dos valores contidos em um vetor de 25 posies com valores inteiros. 5. Faa uma funo recursiva que receba um vetor de 100 posies e retorne o somatrio dos elementos pares (ou mpares) do vetor. 6. Escrever um algoritmo, utilizando um subalgoritmo recursivo, para calcular o N-esimo termo da srie de Fibonacci. 7. Escrever um algoritmo, utilizando um subalgoritmo recursivo, que leia um valor inteiro qualquer e realize uma pesquisa em um vetor de 100 posies. No algoritmo principal deve ser informado se o valor lido est ou no contido no vetor. Caso ele esteja, tambm deve ser informada a sua posio. 8. Escrever um subalgoritmo recursivo para encontrar o menor valor contido em um vetor de 100 posies contendo valores inteiros. 9. Faa uma funo recursiva que receba dois nmeros a e b , a < b, e retorne a soma dos nmeros mpares entre a e b. 10. Faa uma funo recursiva que receba 3 nmeros a, b e c, sendo a < b, e retorne a soma dos divisores de c entre a e b.

ELABORADO POR BRUNO TONET

42

.: NAPRO :. NCLEO DE APOIO APRENDIZAGEM DE PROGRAMAO

Referncias
http://www.apoioinformatica.inf.br/ http://www.consiste.dimap.ufrn.br/~david/ http://www.inf.pucrs.br/%7Eegidio/algo1/ http://dein.ucs.br/Disciplinas/sis218-algoritmos/2003-2/sis218d/cronog_algo.html http://www.inf.ufpr.br/info/ http://www.angelfire.com/bc/fontini/algoritm.html apostila de lgica de programao criao de algoritmos e programas professor renato da costa

ELABORADO POR BRUNO TONET

43