Documente Academic
Documente Profesional
Documente Cultură
INDCE
PREFCIO ........................................................................................................................................................ 3 CAPTULO 1 FUNDAMENTOS................................................................................................................... 4 1.1 1.2 1.3 CONCEITO DE ALGORITMO ......................................................................................................... 4 ESTRUTURA DE DADOS ................................................................................................................ 5 ALGORITMO E PROGRAMAS DE COMPUTADOR .................................................................... 6 CLASSIFICAO DAS LINGUAGENS DE PROGRAMAO ............................................ 7 COMPILADORES E INTERPRETADORES ............................................................................ 8 CRITRIOS DE QUALIDADE DE UM PROGRAMA DE COMPUTADOR ......................... 9
CAPTULO 2 ESTRUTURAO DE ALGORITMOS ............................................................................. 10 2.1 2.2 2.3 FLUXOGRAMA............................................................................................................................... 10 PSEUDOCDIGOS ......................................................................................................................... 11 FUNDAMENTOS PARA PROGRAMAO ................................................................................. 12 VARIVEIS .............................................................................................................................. 12 CONSTANTES.......................................................................................................................... 13 TIPO DE DADOS PRIMITIVOS .............................................................................................. 13 NOMENCLATURA DAS VARIVEIS .................................................................................. 14 OPERADORES ARITMTICOS ............................................................................................. 15 OPERADORES RELACIONAIS .............................................................................................. 16 OPERADORES LGICOS ....................................................................................................... 16
CAPTULO 3 ESTRUTURAS DE CONTROLE ........................................................................................ 19 3.1 3.2 ESTRUTURA SEQUENCIAL ......................................................................................................... 19 ESTRUTURA CONDICIONAL....................................................................................................... 22 ESTRUTURA CONDICIONAL SIMPLES .............................................................................. 23 ESTRUTURA CONDICIONAL COMPOSTA ........................................................................ 23 ESTRUTURA CONDICIONAL MLTIPLA ESCOLHA ....................................................... 24
ESTRUTURAS DE REPETIO .................................................................................................... 25 ESTRUTURA DE REPETIO PARA ................................................................................... 25 ESTRUTURA DE REPETIO ENQUANTO ....................................................................... 26 ESTRUTURA DE REPETIO REPITA ................................................................................ 27
CAPTULO 4 VETORES, MATRIZES E REGISTROS............................................................................. 28 4.1 4.2 VETORES ......................................................................................................................................... 29 MATRIZES ....................................................................................................................................... 31
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
CAPTULO 5 MODULARIZAO ........................................................................................................... 36 5.1 5.1.1 5.1.2 5.1.3 PASSAGEM DE PARMETRO ..................................................................................................... 39 PASSAGEM DE PARMETRO POR VALOR .......................................................................... 40 PASSAGEM DE PARMETRO POR REFERNCIA ............................................................... 40 RECURSIVIDADE ....................................................................................................................... 40
REFERNCIAS BIBLIOGRFICAS............................................................................................................. 43
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
extensivamente. Seu livro sobre o uso dos numerais hindus descreve procedimentos para operaes aritmticas usando esses numerais. Autores europeus usaram uma adaptao latina de seu nome, at finalmente chegar palavra algoritmo para descrever a rea da aritmtica com numerais hindus. Na literatura existem vrias definies para a palavra algoritmo, abaixo, segue algumas dessas definies: Um algoritmo a descrio de um padro de comportamento, expressado em termos de um repertrio bem definido e finito de aes primitivas, das quais damos por certo que elas podem ser executadas. (GUIMARES; LAGES, 1994, p.4) Algoritmo a descrio de um conjunto de comandos que, obedecidos, resultam numa sucesso finita de aes. (FARRER et al., 1999 p.14)
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
O importante, quando for programar um algoritmo, no misturar dado e estrutura de dados em uma coisa s. Um dado uma informao armazenada e estrutura de dados quem administra os dados. Desta forma a estrutura de dados fica o mais genrica possvel, fazendo com que ela possa ser utilizada para diversos tipos de dados. Por exemplo, melhor ter uma agenda genrica do que uma agenda de telefones. Uma agenda genrica pode ser utilizada para guardar telefones, ou e-mails, ou at mesmo guardar outra estrutura dentro dela: contatos, que seriam compostos por nome, telefone e email. Nessa apostila iremos ver algumas das estruturas de dados bsicas e avanadas que sero utilizadas por nossos algoritmos.
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
Portanto nos computadores temos a parte fsica, que chamada de hardware, essa formada basicamente por uma UCP (Unidade Central de Processamento), pela memria e pelos dispositivos de entrada e sada e todos esto ligados atravs do barramento.
Um microprocessador executa um conjunto diferente de instrues que so buscados da memria RAM. Essas instrues podem ser desde operaes matemticas at interaes com os dispositivos de sada (monitor ou impressora, etc.), exemplo: quando clicamos em um boto na tela para imprimir um documento. Esse conjunto de instrues que sero executados pelo processador, podemos chamar de programa de computador. Como podemos perceber, um programa de computador nada mais que um algoritmo. Sua
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
Veja abaixo exemplo de dois cdigos, os dois para somar dois nmeros e exibir o resultado na tela. CDIGO EM ASSEMBLY
.model small .stack .data valor db ? .code .startup mov ah, 01h ; int 21h ; sub al, 30h ; mov value, al ; mov ah, 01h ; int 21h ; sub al, 30h ; add al, value ; mov dl, al ; add dl, 30h ; mov ah, 02h ; int 21h .exit end uses Crt; var A,B,C:integer; begin ClrScr; Writeln('Digite um nmero '); Readln(A); Writeln('Digite outro nmero '); Readln(B); C:=A+B; Writeln('A soma ',C); end.
CDIGO EM PASCAL
Program Soma;
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
As fases de um compilador consistem basicamente conforme a figura abaixo, vamos dar destaque aos analisadores Lxico, Sinttico e Semntico: Anlise lxica: A sua funo bsica o reconhecimento e a classificao das estruturas elementares ou classes sintticas das linguagens. Anlise sinttica: Verifica se a estrutura geral do texto ou programa fonte est correcta. Anlise semntica: Verifica se o programa fonte tem erros semnticos e rene a informao dos tipos para a fase de gerador de cdigo subsequente. Uma componente importante da anlise semntica a verificao do tipo.
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
1.3.3 CRITRIOS DE QUALIDADE DE UM PROGRAMA DE COMPUTADOR Abaixo sero apresentados alguns critrios bsicos que devemos levar em considerao para termos programas de computador com qualidade: Integridade: refere-se preciso das informaes manipuladas pelo programa, ou seja, os resultados gerados pelo processamento do programa devem estar corretos, caso contrrio o programa no tem sentido algum.
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
CAPTULO 2 ESTRUTURAO DE ALGORITMOS 2.1 FLUXOGRAMA Os fluxogramas representam os algoritmos em uma forma grfica. So formados por caixas que contm as instrues a serem executadas. Tais caixas so ligadas por setas que indicam o fluxo das aes. Algumas caixas especiais indicam a possibilidade de o fluxo seguir caminhos distintos, dependendo de certas situaes que podem ocorrer durante a execuo do algoritmo. Tambm h representaes para o incio do algoritmo e para o seu final, para que o fluxo do algoritmo possa ser determinado do seu princpio at o seu trmino. A figura abaixo apresenta as caixas e o seus significados:
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
10
Embora seja mais fcil entender o algoritmo atravs de sua representao grfica, seu uso no aconselhvel em problemas mais complexos onde uma simples mudana na linha de pensamento pode trazer vrias alteraes no seu fluxo, tornando a atividade trabalhosa e cansativa. 2.2 PSEUDOCDIGOS Algoritmos podem ser representados em cdigos diretos na linguagem de programao, porm devido rigidez sinttica e semntica, s vezes isso torna o trabalho um pouco custoso. Portanto definir um pseudocdigo traz benefcios, por ser menos rgido e dependente das peculiaridades que todo compilador exige. Portanto, vejamos abaixo um pseudocdigo para solucionar o problema citado no item 2.1 deste captulo. Na disciplina Algoritmos e Estrutura de Dados iremos adotar o Pascal como linguagem de alto nvel para comearmos a implantar nosso algoritmo e ver os resultados, portanto todo algoritmo resolvido nesta apostila ter ao lado o cdigo em Pascal para que possa ser implementado em qualquer compilador Pascal. Recomendo utilizar o PascalZIM.
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
11
2.3
Para iniciarmos a criar nossos algoritmos algumas informaes bsicas so essenciais: 2.3.1 VARIVEIS Para que a memria possa armazenar dados, ela dividida em partes, chamadas posies de memria. O sistema operacional que gerencia o sistema de computao pode acessar cada uma destas posies para armazenar tais dados. Para que isto seja possvel, a cada posio de memria est associada uma sequncia de bits, chamada endereo da posio de memria. Como uma sequncia de bits corresponde a um nmero inteiro escrito no sistema binrio, cada endereo pode ser visto como um inteiro escrito no sistema decimal. Assim temos posies de memria de endereo 1209 ou 2114, por exemplo. Em programao, uma varivel uma posio de memria cujo contedo pode ser modificado durante a execuo de um programa, devendo ser-lhe associados um identificador e um tipo de dado. Exemplo: FATOR: inteiro, onde FATOR o identificador (nome da varivel) e inteiro o tipo de dado.
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
12
2.3.3
So os tipos de dados mais comuns, e que podem dar origem a outros tipos de dados mais complexos. 2.3.3.1 Inteiro Nmeros inteiros maiores ou menores que 0 representados por 2 bytes, em uma faixa que vai de -32768 at 32767. Declarao: var num: inteiro; No exemplo acima foi declarada uma varivel do tipo INTEIRO que atende pelo nome de NUM. 2.3.3.2 Real Conjunto de nmeros racionais, representados por 4 bytes em uma faixa de [3,4x1038, 3,4x10-38][3,4x1038
, 3,4x1038].
Declarao: var salario: real; No exemplo acima foi declarada uma varivel do tipo REAL que atende pelo nome de SALARIO.
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
13
Vamos adotar as seguintes regras para os nomes das variveis: Os nomes das variveis devem representar o que ser guardado dentro dela; O primeiro caractere de um nome dever ser sempre alfabtico; O nome da varivel no pode conter caracteres especiais (!@#$%&*/-+<>?); No podem ser colocados espaos em branco no nome de variveis, usar o UNDERSCORE ( _ ); No pode haver nenhum nome de varivel repetido; As variveis no podem ter o mesmo nome de palavras reservadas, exemplo: se, seno, inicio, fim, real, inteiro, caractere, etc.; A declarao de uma varivel feita no algoritmo, informando o seu nome, seguido pelo seu tipo, separados por :.
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
14
Abaixo segue exemplo da utilizao dos operadores aritmticos para realizao de clculos:
Algoritmo CALC var A, B : inteiro; C, D : real; Inicio A 1; B 3; C 5; D 10; A 1 + B; A B + D; { errado, D real } B 10 div 3; A 10 mod 3; C D / C; D 10 div C; { errado, o operado div s para inteiros } A -1; B 5 + A; B -A; C D * A; B C * B; { errado, C real } Fim Program CALC; var A, B : integer; C, D : real; begin A := 1; B := 3; C := 5; D := 10; A := 1 + B; A := B + D; { errado, D real } B := 10 div 3; A := 10 mod 3; C := D / C; D := 10 div C; { errado, o operado div s para inteiros } A := -1; B := 5 + A; B := -A; C := D * A; B := C * B; { errado, C real } End.
Percebemos no algoritmo acima que um tipo de dado no pode receber valores maiores que sua capacidade de armazenamento. Veja trechos retirados do cdigo acima e sua explicao.
A B + D; { errado, D real }
A varivel A do tipo inteiro, s pode receber valores inteiros, j o contrrio aceito, pois varivel do tipo inteiro no supera a capacidade de armazenamento de uma varivel do tipo real. Para entendermos melhor, vejamos os exemplos abaixo:
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
15
Var D Var A {Correto, pois a varivel D tem a capacidade para armazenar o valor contido na varivel A}. Memria
Var D Var A Var B Vazio Vazio Vazio Vazio Vazio
2.3.6
OPERADORES RELACIONAIS
Os operadores relacionais so utilizados para comparao de dados do mesmo tipo. Segue abaixo esses operadores:
2.3.7
OPERADORES LGICOS
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
16
E OU NO
AND OR NOT
Sabemos que os resultados de duas operaes inter-relacionadas dependem do seu operador, vejamos abaixo trs tabelas verdade uma para cada operador lgico: Operador E (AND) Condio 1 Verdadeiro Verdadeiro Falso Falso Condio 2 Verdadeiro Falso Verdadeiro Falso Operador OU (OR) Condio 1 Verdadeiro Verdadeiro Falso Falso Condio 2 Verdadeiro Falso Verdadeiro Falso Resultado Verdadeiro Verdadeiro Verdadeiro Falso Resultado Verdadeiro Falso Falso Falso
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
17
Neste captulo foram apresentados todos os fundamentos necessrios para iniciarmos a construo de algoritmos, mas antes de passarmos para o prximo captulo temos que nos atentar sobre as prioridades de todos os operadores mostradas neste captulo, veja na tabela abaixo.
De acordo com a tabela toda expresso que est entre parnteses ser executada primeiro e assim por diante. Com relao s expresses aritmticas, os operadores de multiplicao (*) e diviso (/) tem prioridade sobre adio (+) e subtrao (-). Vejamos um exemplo, seguindo as regras de prioridade:
C (25+25)/2+5-2*2; 1. 50/2+5-2*2; 2. 50/2+5-4; 3. 25+5-4; 4. 30-4; 5. 26; O resultado de C 26.
Exerccios: 1. Defina o que um algoritmo. 2. Diferencie um algoritmo de um programa. 3. Defina o que uma linguagem de programao de alto nvel e uma linguagem de programao de baixo nvel. 4. Declare variveis que sejam capazes de armazenar as seguintes informaes: a) Sua idade; b) A mdia entre dois nmeros; c) O seu salrio; d) Seu nome;
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
18
CAPTULO 3 ESTRUTURAS DE CONTROLE Estrutura de controle nada mais que a forma como ser executado o algoritmo. Veremos abaixo em detalhes cada uma dessas estruturas. 3.1 ESTRUTURA SEQUENCIAL A estrutura sequencial a forma mais simples e fcil de entender das estruturas de controle. Para comear a escrever os algoritmos nessa estrutura vamos adotar a seguinte regra. Primeiro damos o nome do algoritmo, seguindo a mesma regra da nomenclatura das variveis, vista no item 2.3.4, em seguida declaramos as variveis necessrias e entre Inicio e Fim colocamos os comandos que sero executados em sequncia.
Algoritmo PASSO var A, B, C : inteiro; Inicio A 2; B 3; C A+B; Escreva(C); C B/A; Escreva(C); C A-B; Escreva(C); C A*B; Escreva(C); Fim
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
19
2) Faa um algoritmo que calcule a rea de um tringulo, sabendo-se que: rea = Base * Altura / 2.
Algoritmo AREA var A,B,H : real; Inicio Escreva(Digite o valor da base); Leia(B); Escreva(Digite o valor da altura); Leia(A); H (B*A)/2; Escreva(A rea do tringulo ,H); Fim Program AREA; var A,B,H : real; begin Write(Digite o valor da base); Readln(B); Write(Digite o valor da altura); Readln(A); H := (B*A)/2; Write(A rea do tringulo ,H); end.
3) Faa um algoritmo que receba o salrio de um funcionrio e o percentual de aumento, calcule e mostre o valor do aumento e o novo salrio.
Algoritmo NOVO_SALARIO var Sal, Perc, NSal, VAument : real; Inicio Escreva(Digite o seu salrio); Leia(Sal); Escreva(Digite o percentual de aumento); Leia(Perc); Vaument (Sal*(Perc/100)); NSal Vaument + Sal ; Escreva(O aumento de, Vaument); Escreva(O novo salrio ,NSal); Fim Program NOVO_SALARIO; var Sal, Perc, NSal, VAument : real; begin Write(Digite o seu salrio); Readln(Sal); Write(Digite o percentual de aumento); Readln(Perc); Vaument := (Sal*(Perc/100)); NSal := Vaument + Sal ; Write(O aumento de, Vaument); Write(O novo salrio ,NSal); end.
4) Faa um algoritmo que receba o salrio base de um funcionrio, calcule e mostre o salrio a receber, sabendo-se que esse funcionrio tem gratificao de 5% sobre o salrio base e paga imposto de 7% sobre o salrio base.
Algoritmo NOVO_SALARIO var SalB, Salliq: real; Inicio Escreva(Digite o seu salrio); Program NOVO_SALARIO; var SalB, Salliq: real; begin Write(Digite o seu salrio);
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
20
Exerccios propostos: 1. Sabe-se que: 1 p = 12 polegadas 1 jarda = 3 ps 1 milha = 1760 jardas Faa um algoritmo que receba uma medida em ps, faa as converses e mostre o resultado em polegadas, jardas e milha. 2. Faa um algoritmo que receba o ano de nascimento de uma pessoa e o ano atual, calcule e mostre a idade dessa pessoa e quantos ela ter em 2015. 3. Pedro comprou um saco de rao com peso em quilos, Pedro possui dois gatos, os quais fornece a quantidade de rao em gramas. Faa um algoritmo que receba o peso do saco de rao e a quantidade de rao fornecida para cada gato. Calcule e mostre quanto restar de rao no saco aps cinco dias. 4. Sabe-se que o quilowatt de energia custa um quinto do salrio mnimo. Faa um algoritmo que receba o valor do salrio mnimo e a quantidade de quilowatts consumida por uma resistncia. Calcule e mostre: a. O valor em reais que cada quilowatt vale; b. O valor em reais a ser pago por essa resistncia; c. O valor em reais a ser pago com desconto de 15%. 5. Faa um algoritmo que converta o valor em dinheiro em reais (R$) informado pelo usurio para trs moedas, dlares, marco alemo e libras esterlinas. Segue abaixo tabela de converso: Moeda Dlares Marco Alemo Libras Esterlinas Cada R$ 1,00 equivale a R$ 1,80 R$ 2,00 R$ 1,57
6. Faa um algoritmo em que o usurio informa a hora e depois os minutos. Calcule e converta a hora em minutos, total de minutos e total de segundos. 7. Faa um algoritmo que calcule a potncia necessria para um cmodo de uma casa, sabendo que a frmula para calcular a potncia : Potncia = rea do cmodo (m2) * 18; rea do cmodo = Base (m) * Altura (m).
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
21
As estruturas condicionais ou de seleo so controladas por expresses Lgicas, conforme item 2.3.7 desta apostila. Expresses lgicas so aquelas cujo resultado ser verdadeiro ou falso. Utilizamos tambm nesta estrutura de controle os operadores relacionais, conforme item 2.3.6 desta apostila. Vejamos abaixo um exemplo de um problema que seria necessrio utilizar a estrutura condicional para resolv-lo: Faa um algoritmo que receba trs notas dos alunos, se a mdia das notas for menor que 70 mostre a mensagem na tela Reprovado, caso contrrio mostre Parabns voc foi aprovado. Vejamos abaixo como ficaria o algoritmo:
Algoritmo MEDIA_APROV var Med, Nota1, Nota2, Nota3 : real; Inicio Escreva (Digite trs notas); Leia (Nota1, Nota2, Nota3); Med (Nota1+Nota2+Nota3)/3; Se Med < 70 Ento Escreva(Reprovado); Seno Escreva(Parabns voc foi aprovado); Fim Program MEDIA_APROV; var Med, Nota1, Nota2, Nota3 : real; Begin Write (Digite trs notas); Readln (Nota1, Nota2, Nota3); Med := (Nota1+Nota2+Nota3)/3; if Med < 70 then Write(Reprovado) Else Write(Parabns voc foi aprovado); End.
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
22
3.2.2
ESTRUTURA CONDICIONAL COMPOSTA J a estrutura de seleo composta permite que o programa execute um ou mais comandos para o
caso de o resultado da expresso lgica ser verdadeiro. E permite que o programa execute outro comando ou bloco de comandos caso o resultado da expresso lgica seja falso.
Se <condio> ento Comando 1; Seno Comando 2; Se <condio> Inicio Comando Comando Fim Seno Inicio Comando Comando Fim ento 1; 2;
1; 2;
Se for executado apenas um comando no necessrio colocar o Inicio e Fim, caso seja executado mais de um comando obrigatrio colocar Inicio e Fim. No Pascal na estrutura condicional composta, no comando anterior ao seno (else) no deve colocar ponto e vrgula ( ; ).
If <condio> then Comando 1 else Comando 2; If <condio> begin Comando Comando end else begin Comando Comando End; then 1; 2;
1; 2;
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
23
Exerccios propostos: 1. Faa um algoritmo que receba 5 notas, calcule a mdia e mostre a mensagem Reprovado para o usurio, caso a mdia seja inferior a 7. 2. Faa um algoritmo que receba 2 notas de 0 a 10, calcule a mdia e mostre a mensagem Reprovado, caso a mdia seja inferior a 4, Em recuperao, caso a mdia seja maior ou igual a 4 e menor que 7 e Aprovado quando a mdia foi maior ou igual a 7 e caso o valor da mdia s eja superior a 10 mostre a mensagem Notas digitadas invlidas. 3. Faa um algoritmo que receba 3 nmeros, calcule e mostre na tela do usurio qual o maior. 4. Faa um algoritmo que apresente na tela do usurio o menu de opes abaixo, utilize o comando Escreva Menu de Opes 1- Somar; 2- Subtrair; 3- Multiplicar; Solicite que o usurio entre com dois nmeros e depois entre com a opo desejada de acordo com o menu de opes e faa os clculos e mostre na tela o resultado da operao. Caso o usurio digite uma opo inexistente no menu mostre a mensagem Opo invlida e saia do programa. 5. Faa um algoritmo que receba o salrio do usurio, calcule e mostre na tela o resultado de acordo com as condies abaixo: Faixa salarial Menor ou igual a R$ 1.500,00 Maior ou igual a R$ 1.500,00 Percentual de ajuste 5% 2%
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
24
Valor do crdito 30% do salrio mdio 40% do salrio mdio 50% do salrio mdio
Veja acima que X a varivel de controle, do tipo ordenado (inteiro, lgico ou caractere). Expresso1 e Expresso2 so expresses cujos valores so do tipo de dado da varivel de controle, na maioria das vezes, Expresso1 e Expresso2 so valores constantes, quando so chamados Valor Inicial e Valor Final. Os comandos dentro do bloco Inicio e Fim so executados at o valor de Expresso2 ser maior que o valor de Expresso1. Vamos ver um algoritmo utilizando a estrutura de repetio PARA.
Algoritmo EXEMPLO_FOR var A, B, R, I : inteiro; Inicio Para I 1 at 5 faa Inicio Escreva(Entre um valor para A: ); Leia(A); Program EXEMPLO_FOR; var A, B, R, I : integer; Begin for I := 1 to 5 do begin write(Entre um valor para A: ); readln(A);
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
25
Exerccios propostos utilize a estrutura PARA: 1. Faa um algoritmo para receber 10 nmeros e informar se so nmeros pares ou impares. Utilize a funo mod (essa funo retorna o resto da diviso). 2. Faa um algoritmo para mostrar na tela do usurio os nmeros de 1 a 50, Ex.: 1 2 3 4 ... 3. Faa um algoritmo para receber as notas de 40 alunos e no final calcular a mdia da turma e mostrar para o usurio. 4. Faa um algoritmo para receber um nmero positivo e inteiro esse nmero ser o valor final do contador da estrutura PARA e informe para o usurio a soma, seguindo a regra abaixo: Soma = Soma + 1 / valor_informado_pelo_usuario. 3.3.2 ESTRUTURA DE REPETIO ENQUANTO Prescreve que os comandos a ele subordinado devero ser repetidos enquanto uma condio lgicorelacional for verdadeira. O teste feito no incio do comando, e caso o resultado for verdadeiro os comandos sero executados, logo em seguida outro teste ser feito. Caso o teste seja falso, o algoritmo continua a sua execuo sequencial depois da estrutura de repetio ENQUANTO.
Enquanto <condio> faa Inicio Comando 1; Comando 2; Fim; While <condio> faa Begin Comando 1; Comando 2; End;
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
26
Observe no algoritmo acima que o valor da varivel I tem que ser incrementado no final da instruo ENQUANTO, porque a varivel no incrementada automaticamente como no comando PARA. Se no for incrementado o programa fica em loop infinito, pois o valor da varivel I ser sempre menor que 5. Observe tambm que a varivel I recebeu o valor de 1 antes da instruo ENQUANTO, isso necessrio para darmos inicio ao contador. Exerccios propostos utilize a estrutura ENQUANTO: 1. Faa um algoritmo capaz de calcular a media aritmtica simples de uma srie de nmeros, sendo que a. O usurio deve informa a quantidade de nmeros da srie; b. Se a quantidade for zero ou negativa o algoritmo tem que inform-lo que esses valores no so aceitos; c. O usurio deve informar um por um todos os nmeros da srie; d. O algoritmo deve mostrar como resultado a mdia aritmtica simples. 2. Faa um algoritmo que receba do usurio um valor inteiro, esse algoritmo deve somar os nmeros digitados pelo usurio at ele digitar a palavra S como resposta para seguinte pergunta. Voc deseja terminar a execuo do programa? No final mostre a soma dos nmeros. 3. Faa um algoritmo que seja capaz de somar todos os nmeros inteiros de 1 a 10 e mostre o resultado da soma. 3.3.3 ESTRUTURA DE REPETIO REPITA Esta estrutura caracteriza-se por efetuar um teste lgico no final de um loop, sendo parecida com a estrutura ENQUANTO. Seu funcionamento controlado tambm por uma condio lgico-relacional. Esta instruo ir efetuar a execuo de um conjunto de instrues pelo menos uma vez antes de verificar a validade da condio estabelecida.
REPITA Comando 1; Comando 2; AT <condio>; Repeat Comando 1; Comando 2; Until <condio>;
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
27
Exerccios propostos utilize a estrutura REPITA: 1. Faa um algoritmo que solicite 10 valores para o usurio e no final mostre: a. A soma; b. A mdia aritmtica; c. Quantidade de nmeros pares, use a funo mod; d. Quantidade de nmeros mpares, use a funo mod; e. Maior nmero; f. Menor nmero. 2. Faa um algoritmo que calcule o ndice de Massa Corporal de 5 pessoas e no final mostre o resultado baseado na tabela abaixo:
IMC abaixo de 18,5 entre 18,6 e 24,9 entre 25,0 e 29,9 entre 30,0 e 34,9 entre 35,0 e 39,9 acima de 40 Classificao Subnutrido ou abaixo do peso Peso ideal (parabns) Levemente acima do peso Primeiro grau de obesidade Segundo grau de obesidade Obesidade mrbida
Frmula IMC = peso (Kg) / (altura (m) * altura (m)). CAPTULO 4 VETORES, MATRIZES E REGISTROS. Ao utilizarmos variveis, podemos armazenar somente um valor por vez, h situaes em que necessrio armazenar uma quantidade maior de valores, por exemplo, 10 notas do mesmo aluno. Utilizando variveis seriam necessrias 10 para tal.
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
28
Ufa! So muitas variveis, imagina se fossem 20 notas do mesmo aluno, ficaria ruim escrever algoritmos com tantas variveis, em todos os aspectos, manuteno, leitura, etc. Existem outras estruturas de dados que facilitariam a forma de armazenar esses dados, essas so chamadas de vetores, matrizes e registros. Vamos ver abaixo a explicao de cada uma e exemplos de sua utilizao. 4.1 VETORES Esse tipo de estrutura chamado de matriz unidimensional. Um vetor representado por seu nome, tamanho e seu tipo. Em nosso algoritmo vamos declar-los da seguinte forma: Nosso algoritmo
var notas[10] : inteiro;
No Pascal
var notas:array[1..10] of integer;
A forma como vou ler ou exibir os valores so feitos indicando individualmente qual elemento se deseja ler ou exibir. Vamos ver abaixo como inserir as 10 notas de um aluno:
Notas[1] Notas[2] Notas[3] Notas[4] Notas[5] Notas[6] Notas[7] Notas[8] Notas[9] Notas[10] 8; 5; 9; 7; 2; 3; 6; 9; 10; 6;
Verifique que o nome um s o que muda a informao indicada dentro dos colchetes. A esta informao d-se o nome de ndice, sendo este o endereo onde o valor est armazenado, ou seja, a nota do aluno. Podemos imaginar o vetor como uma tabela com dez colunas: NOTAS 8 5 9 7 2 3 6 9 10 6 Vamos ver um exemplo da utilizao de vetores para resolver o problema abaixo: Faa um algoritmo para receber do usurio 20 nmeros. Salve esses dados em um vetor e calcule a quantidade de nmeros pares.
Algoritmo PARES var X[20], cont, qtp : inteiro; Inicio qtp 0; Para cont 1 at 20 faa Inicio Escreva(Digite um nmero); program PARES; var X : array[1..20] of integer; cont, qtp : integer; begin qtp:=0; For cont := 1 to 20 do begin
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
29
Percebemos que foi declarado um vetor de 20 posies, com o nome de X e duas variveis cont e qtp, a varivel cont ser utilizada como varivel de controle do lao de repetio Para e qtp para acumular a quantidade de nmeros pares.
Inicio qtp 0; Para cont 1 at 20 faa Inicio
No trecho acima ns zeramos o valor da varivel qtp, isso necessrio, pois iremos utiliz-la para contar a quantidade de nmeros pares e ela pode conter algum lixo de memria. Em seguida vamos utilizar o lao de repetio Para de 1 at 20, ou seja, tudo que est dentro do Inicio e Fim do lao ser executado 20 vezes.
Escreva(Digite um nmero); Leia(X[cont]); Se (X[cont] mod 2)= 0 ento Inicio qtp qtp+1; Fim; Fim;
Ciente de que tudo que est dentro do lao de repetio ser executado 20 vezes, controlados pela varivel de controle cont que ser incrementada de 1 at 20, solicitamos o usurio a digitar um nmero, esse valor lido e armazenado no vetor X na posio cont que vai variar de 1 a 20. Em seguida utilizamos a estrutura condicional para checar se o valor lido do vetor dividido por 2 resta 0, se sim ele soma o valor de qtp mais um, perceba que quem recebe esse valor a prpria varivel, ou seja, pegamos o ltimo valor da varivel e incrementamos mais 1.
Escreva(A quantidade de nmeros pares , qtp); Fim
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
30
No Pascal
var notas:array[1..6, 1..10] of integer;
Percebemos que agora informamos o nmero de linhas e o nmero de colunas da matriz multidimensional, diferente da matriz unidimensional (vetores) que informamos o nmero de colunas. Vejamos abaixo como ficaria nossa estrutura utilizando matriz, conforme foi declarado acima: 10 notas 5 10 6 alunos 8 6 9 9 10 5 8 8 9 8 7 6 8 7 9 9 8 9 9 8 5 5 6 8 5 9 8
10 10 10 9 9
10 10 9 10 8 5 7 9
10 10 10 5 10
10 10 10 8 10 9 7
10 10 10 8 9 10
Matriz [6x10] Olhando a estrutura acima, como queremos armazenar 10 notas de 6 alunos, cada linha ser utilizada por um aluno e cada coluna para uma nota do aluno. Vamos resolver o algoritmo abaixo utilizando matrizes.
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
31
Algoritmo NOTAS var X[15,5],L,C,ST,SA: inteiro; MT, MA : real; Inicio ST 0; SA 0; Para L 1 at 15 faa Inicio Para C 1 at 5 faa Inicio Escreva(Digite a ,C, nota ); Leia(X[L,C]); SA SA + X[L,C]; Fim; MA SA/5; ST ST + SA; Se MA >= 7.0 ento Escreva (Aprovado, sua mdia foi , MA); Seno Se ((MA >=5.0) E (MA <7.0)) ento Escreva (Recuperao, sua mdia foi , MA); Seno Escreva (Reprovado, sua mdia foi , MA); SA 0; Fim; MT ST/75; Se (MT >=9.0) ento Escreva (Excelente a mdia da turma foi , MT); Seno Se ((MT>=7.0) E (MT <=8.0)) ento Escreva (Bom, a mdia da turma foi ,MT); Seno Escreva (Ruim, a mdia da turma foi , MT); Fim
program NOTAS; var X : array[1..15,1..5] of integer; L,C,ST,SA: integer; MT, MA : real; begin ST := 0; SA := 0; For L := 1 to 15 do Begin For C := 1 to 5 do Begin write(Digite a , C, nota ); readln(X[L,C]); SA := SA + X[L,C]; End; MA := SA/5; ST := ST + SA; if (MA >= 7.0)then Writeln (Aprovado, sua media foi , MA) Else If ((MA>=5.0) AND (MA<7.0)) then Writeln (Recuperao, sua media foi , MA) Else Writeln(Reprovado, sua mdia foi, MA); SA:=0; End; MT := ST/75; If (MT>=9.0) Then Writeln(Excelente a mdia da turma foi , MT) Else If ((MT >=7.0) AND (MT <=8.0)) Then Writeln (Bom, a media da turma foi ,MT) Else Writeln (Ruim, a mdia da turma foi, MT); End.
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
32
Primeiramente, declaramos a matriz com nome de X[15,5] isso significa que ser uma matriz com 15 linhas e 5 colunas, em seguida declaramos as variveis L e C como variveis de controle para o lao de repetio Para, um para linha (L) e outro para coluna (C) as variveis ST para soma das notas da turma e a varivel SA para soma das notas do aluno, essas sero utilizadas para fazer o clculo da mdia que a soma dividido pela quantidade. A varivel MT ser utilizada para guardar a mdia da turma e MA para guardar a mdia do aluno.
Inicio ST 0; SA 0; Para L 1 at 15 faa Inicio Para C 1 at 5 faa Inicio Escreva(Digite a ,C, nota ); Leia(X[L,C]); SA SA + X[L,C]; Fim; MA SA/5; ST ST + SA; Se MA >= 7.0 ento Escreva (Aprovado, sua mdia foi , MA); Seno Se ((MA >=5.0) E (MA <7.0)) ento Escreva (Recuperao, sua mdia foi , MA); Seno Escreva (Reprovado, sua mdia foi , MA); SA 0; Fim;
As variveis ST e SA so zeradas, pois sero utilizadas para fazer a soma das notas e podem conter algum lixo de memria. Iniciamos o primeiro lao de repetio de 1 at 15 para navegar nas linhas e o segundo lao de repetio de 1 at 5 para navegar nas colunas. Como necessitamos trabalhar com os dados que esto nas colunas, o cdigo fica nessa estrutura e quando precisamos realizar algum clculo depois que navegamos em todas as colunas da linha o cdigo fica dentro da estrutura do primeiro Para, logo abaixo do Fim do segundo lao de repetio. Para resolver nosso algoritmo percorremos as 5 colunas de cada linha e vamos somando as notas e depois de navegar nas colunas antes de passar para prxima linha fazemos os clculos da mdia e informamos para o usurio se o mesmo foi aprovado ou est em recuperao ou foi reprovado. Depois zeramos a varivel SA para somar agora as notas do prximo aluno (linha), se eu no fizer isso ele vai somar as prximas 5 notas com as anteriores informando o resultado da mdia de forma
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
33
Depois que percorremos toda a matriz e somamos todas as notas dos alunos na varivel ST, temos agora fora do lao de repetio saber qual a mdia da turma e depois informar para o usurio o desempenho da turma. 4.3 REGISTROS Quando trabalhamos com matrizes percebemos que somente foi possvel agrupar informaes com o mesmo tipo de dados. Caso fosse necessrio trabalhar com mais de um tipo de dado, precisaramos criar matrizes diferentes. Para solucionar esta deficincia podemos utilizar uma estrutura de dados chamada de Registro. Em um registro poderemos utilizar uma estrutura que agrupe vrias informaes, que podem ser de tipos de dados diferentes. Por esta razo, este tipo de dado considerado heterogneo. A vantagem que esse tipo de estrutura de dados reduz o nmero de variveis e mais fcil para dar manuteno. Nosso algoritmo
var DADOS registro(cod, idade: inteiro, nome: caractere[40], nota : real);
No Pascal
type DADOS = record cod : integer; idade : integer; nome : string[40]; nota : real; end; var alunos: DADOS;
Vamos resolver o algoritmo abaixo utilizando matrizes. Faa um algoritmo que leia os dados de 5 pessoas de uma cidade. Esses dados so salrio, idade, nmero de filhos. Calcule e mostre: a) A mdia de salrios; b) O maior salrio; c) Quantas pessoas possuem salrio maior que a mdia.
Algoritmo CAD_PESSOA var pessoa registro(sal: real, filhos, idade: inteiro); maior, soma, media: real; program CAD_PESSOA; type dados = record sal : real; filhos : integer;
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
34
Exerccios propostos do captulo 4: 1. Faa um algoritmo que solicite 10 valores para o usurio e no final mostre, utilizando vetores: a. A soma; b. A mdia aritmtica; c. Quantidade de nmeros pares, para isso use a funo mod. 2. Faa um algoritmo que receba do usurio 5 valores grave em um vetor e faa a ordenao e imprima na tela. 3. Faa um algoritmo que carregue uma matriz 2x2 com nmeros inteiros, calcule e mostre em uma matriz resultado que ser a matriz informada pelo usurio multiplicada pelo maior elemento da matriz. 4. Faa um algoritmo que preencha uma matriz 5x5 ( 5 linhas e 5 colunas ), sabendo-se que: Os valores da segunda linha so sempre o dobro da primeira, os valores da terceira linha so sempre o dobro da segunda e assim por diante at a 5 linha.
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
35
36
No Pascal
procedure Nome(parmetros) var <variveis> begin <instrues> end; function Nome [(parmetros)] : <tipo>; var <variveis> ; begin <instrues>; end;
Obs.: Nos algoritmos iremos utilizar o mesmo nome Sub-Rotina. Porm as funes tero retorno de valor e na declarao da sub-rotina devemos definir o tipo de dado de retorno, diferente de procedimento que no retorna valor, o qual no ser necessrio informar o tipo de retorno. Os parmetros no so obrigatrios, somente se houver necessidade. Vejamos abaixo alguns exemplos do uso de funes e procedimentos com e sem o uso de parmetros: Sem o uso de parmetros:
Sub-Rotina ADICAO var X, A, B: real; Inicio Escreva(Informe um valor para A:); Leia (A); Escreva(Informe um valor para B:); Leia(B); X A+B; Escreva(O resultado : , X); Fim; procedure ADICAO; var X, A, B: real; begin write(Informe um valor para A: ); readln(A); write(Informe um valor para B: ); readln(B); X := A + B; write(O resultado e: , X); end;
No exemplo acima temos um procedimento que solicita dois nmeros e exibe o resultado.
Sub-Rotina ADICAO: real var A, B: real; Inicio Escreva(Informe um valor para A:); Leia (A); Escreva(Informe um valor para B:); Leia(B); ADICAO A+B; Fim; function ADICAO : real; var A, B: real; begin write(Informe um valor para A: ); readln(A); write(Informe um valor para B: ); readln(B); ADICAO := A + B; end;
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
37
No exemplo acima foi passado para o procedimento, por parmetro, os valores que sero armazenados nas variveis A e B e depois o valor da soma dos dois valores so armazenados em X e em seguida o valor exibido ao usurio.
Sub-Rotina ADICAO (var A, B: real): real Inicio ADICAO A+B; Fim; function ADICAO (var A, B: real) : real; begin ADICAO := A + B; end;
J no exemplo acima foi passado para a funo, por parmetro, os valores que sero armazenados nas variveis A e B e depois o valor e retornado para o programa principal. Vejamos de forma ilustrativa como fica um algoritmo que faz a chamada em um procedimento ou funo.
Veja que ao chamar funo dentro do algoritmo a execuo desviada para a funo que s retorna para o programa principal depois de executar todas as suas instrues.
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
38
No trecho acima, toda vez que a rotina CALC_ADICAO chamada, faz-se uso de parmetros reais. Desta forma, so parmetros reais as variveis X, Y, pois so fornecidos seus valores para as rotinas. Vejamos abaixo um programa completo com uso de sub-rotina (procedimento) para calcular o fatorial de um nmero inteiro.
Algoritmo FATORIAL Sub-Rotina FATOR (var N: integer); var I, FAT: integer; Inicio FAT 1; Para I 1 at N faa FAT FAT * I; Escreva(A fatorial de , N, equivale a: , FAT); Fim; var LIMITE : integer; Inicio Leia(Informe um valor inteiro: ); Leia(LIMITE); FATOR (LIMITE); Fim. program FATORIAL; procedure FATOR(var N : integer); var I, FAT : integer; begin FAT := 1; for I:=1 to N do FAT := FAT * I; writeln(A fatorial de , N, equivale a: , FAT); end; var LIMITE : integer; begin write(Informe um valor inteiro: ); readln(LIMITE); FATOR (LIMITE); end.
A passagem de parmetro ocorre quando feita uma substituio dos parmetros formais pelos reais no momento da execuo da rotina. Estes parmetros sero passados de duas formas: por valor e por referncia.
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
39
5.1.2
PASSAGEM DE PARMETRO POR REFERNCIA A passagem de parmetro por referncia caracteriza-se pela ocorrncia da alterao do valor do
parmetro real quando o parmetro formal manipulado dentro da sub-rotina chamada. Desta forma, qualquer modificao feita no parmetro forma, implica em alterao no parmetro real correspondente. A alterao efetuada devolvida para a sub-rotina chamadora. Veja abaixo o algoritmo FATORIAL, agora usando passagem de parmetro por referncia.
Algoritmo FATORIAL Sub-Rotina FATOR (var N: integer; var FAT: integer); Var I: integer; Inicio FAT 1; Para I 1 at N faa FAT FAT * I; Fim; var LIMITE, RETORNO : integer; Inicio Leia(Informe um valor inteiro: ); Leia(LIMITE); FATOR (LIMITE, RETORNO); Escreva(A fatorial de , LIMITE, equivale a: , RETORNO); Fim. program FATORIAL; procedure FATOR(var N : integer; var FAT: integer); var I: integer; begin FAT := 1; for I:=1 to N do FAT := FAT * I; end; var LIMITE, RETORNO : integer; begin write(Informe um valor inteiro: ); readln(LIMITE); FATOR (LIMITE, RETORNO); writeln(A fatorial de , LIMITE, equivale a: , RETORNO); end.
5.1.3
RECURSIVIDADE Algumas funes matemticas clssicas podem ser estabelecidas de tal forma que as suas definies
utilizem, de modo recorrente, a prpria funo que se est definindo. Um exemplo trivial seria a funo fatorial vista no exemplo anterior. Sabemos que fatorial de um nmero inteiro no negativo o produto de todos os nmeros naturais de 1 at o referido nmero. Quando queremos representar o fatorial de um nmero, ns colocamos o nmero e o smbolo exclamao: 12!, l-se fatorial de 12. Exemplos:
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
40
Veja no exemplo acima que a sub-rotina FATOR foi chamada da prpria funo, vejamos o rastreio do algoritmo acima. Vamos imaginar que o usurio informou o valor 4.
CHAMADA FATOR(4) FATOR FATOR = 4*FATOR(4-1) FATOR = 3*FATOR(3-1) FATOR = 2*FATOR(2-1) FATOR = 1 RESULTADO DA FUNO 4*6 = 24 3*2 = 6 2*1 = 2 1 N 4 3 2 1 LIMITE 4 RETORNO 24
Embora a utilizao da recursividade apresente a vantagem de programas mais simples, ela traz o inconveniente de sacrificar a eficincia do programa. Isto ocorre devido necessidade de chamadas
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
41
Exerccios propostos do captulo 5: 1. Faa uma funo que receba um nmero inteiro e positivo N como parmetro e retorne a soma dos N nmeros inteiros existentes entre o nmero 1 e esse nmero: 2. Faa uma funo que receba trs nmeros inteiros como parmetros, representando horas, minutos e segundos e os converta em segundos. Exemplo: 2 h, 40 min. e 10 seg. correspondem h 9610 segundos. 3. Faa uma funo que receba , por parmetro, a altura e o sexo de uma pessoa e retorne o seu peso ideal. Para homens calcular o peso ideal usando a frmula a seguir: peso ideal = 72.7 * alt 58 para homens e 62.1 * alt 44.7 para mulheres. 4. Faa uma funo que receba, por parmetro, um valor inteiro e positivo N e retorne o valor de S, onde a 1. Parcela da soma tem N=1, a 2. Parcela tem N=2, ..., at N ser igual ao valor digitado. Ex.: S = 1+ 1/2 + 1/3 + 1/4 +1/N. 5. Escreva uma funo recursiva que retorne o mximo divisor comum de dois inteiros dados. 6. Escreva uma funo recursiva que retorne o mnimo mltiplo comum de dois inteiros dados. 7. Faa uma funo que receba um nmero n e fornea o nmero formado pelos algarismos de n escritos na ordem inversa. Por exemplo, se o nmero dado for 3876, a funo deve fornecer 6783.
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
42
MEDINA, M.,FERTING, C. Algoritmos e programao: teoria e prtica. NOVATEC, 2.ed., 2006. 384 p. CORMEN, THOMAS H. et.al. Algoritmos: teoria e prtica. Traduo da segunda edio [americana] Vandenberg D. de Souza Rio de Janeiro: Elsevier, 2002, 4. Reimpresso. 898 p. PRONATEC, disponvel em < http://pronatec.mec.gov.br/cnct/et_informacao_comunicacao/t_informatica.php>, Acesso em 25/06/2013.
Algoritmos e Estruturas de Dados, Guimares, A. M., Lages, N. A. C., Livros Tcnicos e Cientficos Editora S.A, 1985. Lgica de programao: a construo de algoritmos e estruturas de dados, Andr Luiz Villar Forbellone, Henri Frederico Eberspacher 3. Ed. So Paulo: Pearson Prentice Hall, 2005. Algoritmos Estruturados, Harry Farrer 3. Ed. So Paulo: LTC, 2011 Apostila Pascal, disponvel em http://www.cos.ufrj.br/~sergio/ApostilaPascal.pdf, Acesso em 15/06/2013. Algoritmos e Estrutura de dados, disponvel em < http://www.caelum.com.br/apostila-java-estruturadados/>, Acesso em 15/07/2013. Programando com Pascal. A linguagem do Turbo Pascal e do Delphi, Evaristo Jaime. Editora Book Express. 2002 Estrutura de Dados, disponvel em < http://www4.fct.unesp.br/ronaldo/uploads/Estrutura%20de%20Dados%20I%20-%20aula%201.pdf>, Acesso em 25/07/2013.
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391
43