Vous êtes sur la page 1sur 43

Apostila de Algoritmos e Estrutura de Dados

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

1.3.1 1.3.2 1.3.3

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

2.3.1 2.3.2 2.3.3 2.3.4 2.3.5 2.3.6 2.3.7

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

3.2.1 3.2.2 3.2.3 3.3

ESTRUTURAS DE REPETIO .................................................................................................... 25 ESTRUTURA DE REPETIO PARA ................................................................................... 25 ESTRUTURA DE REPETIO ENQUANTO ....................................................................... 26 ESTRUTURA DE REPETIO REPITA ................................................................................ 27

3.3.1 3.3.2 3.3.3

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

Apostila de Algoritmos e Estrutura de Dados


4.3 REGISTROS ..................................................................................................................................... 34

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

Apostila de Algoritmos e Estrutura de Dados


PREFCIO Esta apostila foi desenvolvida especialmente para o Curso Tcnico em Informtica do PRONATEC da Escola Estadual Geraldo Gomes Ribeiro. PERFIL DO PROFISSIONAL TCNICO EM INFORMTICA Desenvolve programas de computador, seguindo as especificaes e paradigmas da lgica de programao e das linguagens de programao. Utiliza ambientes de desenvolvimento de sistemas, sistemas operacionais e banco de dados. Realiza testes de programas de computador, mantendo registros que possibilitem anlises e refinamento dos resultados. Executa manuteno de programas de computadores implantados. POSSIBILIDADE DE ATUAO Instituies pblicas, privadas e do terceiro setor que demandem sistemas computacionais, especialmente envolvendo programao de computadores. A disciplina algoritmos e estrutura de dados a base para iniciarmos com a programao de computadores. O seu aprendizado possibilita desenvolver algoritmos para resolver qualquer problema solicitado independente da linguagem de programao no qual ser implantado futuramente. Os captulos 1 e 2 tratam dos conceitos bsicos que temos que compreender para iniciarmos a construir algoritmos. O captulo 3 apresenta as estruturas de controle disponveis para utilizarmos na resoluo de diversos problemas com algoritmos. O captulo 4 apresenta estruturas de dados mais avanadas como vetores, matrizes e registros. O captulo 5 traz o conceito de modularizao e a importncia de separar os programas para facilitar na leitura e futura manuteno. A partir do captulo 3 iremos exercitar tcnicas de rastreio e testes em sala de aula para confirmar a eficincia do algoritmo desenvolvido.

Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391

Apostila de Algoritmos e Estrutura de Dados


CAPTULO 1 FUNDAMENTOS 1.1 CONCEITO DE ALGORITMO Atualmente, tem-se associado algoritmo computao, mas esse no um termo restrito a computao ou que tenha nascido exclusivamente dela. O algoritmo pode ser descrito como o alicerce de uma casa, uma receita culinria, um plano de ao para resolver um problema administrativo, uma bula de medicamento etc. Ou seja, uma sequncia de passos finitos que devem ser seguidos para alcanar um objetivo final. A origem da palavra algoritmo vem do nome al-Khowarizmi. Abu JaFar Mohammed Ibn Musa alKhowarizmi (780850), astrnomo e matemtico rabe. Era membro da Casa da Sabedoria, uma academia de cientistas em Bagd. O nome al-Khowarizmi significa da cidade de Khowarizmi, que agora chamada Khiva e parte do Uzbequisto. al-Khowarizmi escreveu livros de matemtica, astronomia e geografia. A lgebra foi introduzida na Europa ocidental atravs de seus trabalhos. A palavra lgebra vem do rabe al-jabr, parte do ttulo de seu livro Kitab al-jabr wal muquabala. Esse livro foi traduzido para o latim e foi usado

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

Apostila de Algoritmos e Estrutura de Dados


Um algoritmo pode ser definido como uma sequencia de passos que visam a atingir um objetivo bem definido. (FORBELLONE; EBERSPACHER, 2005, p.3) J na computao, os computadores precisam receber ordens para funcionar, da necessidade de algoritmos. Para aprendermos a criar algoritmos, no basta estudar ou copiar algoritmos. Devemos escrever e criar algoritmos, ou seja, praticar bastante. 1.2 ESTRUTURA DE DADOS Estrutura de dados um meio para armazenar e organizar os dados com o objetivo de facilitar o acesso e as modificaes. Nenhuma estrutura de dados nica funciona bem para todos os propsitos, e assim importante conhecer os pontos fortes e as limitaes de vrias delas. Podemos fazer uma analogia com a agenda de um celular. Uma agenda de celular pode ser vista como uma estrutura de dados, pois mantm os dados organizados seguindo alguma lgica e disponibiliza operaes para o usurio manipular os dados. Quando pensamos em estruturar dados, devemos levar em considerao o desempenho. Se uma agenda de celular armazena os dados de forma desorganizada, ento ser muito difcil por parte do usurio localizar um contato de forma rpida e eficiente. A escolha de como guardar as informaes deve levar em considerao as operaes que sero disponibilizadas pelo programa. Por exemplo, em uma agenda, seria interessante manter os contatos em ordem alfabtica para facilitar a busca. Mas a forma de como esto organizados os dados no deve estar exposto ao usurio, ele s tem que utilizar funes como inserir, recuperar, atualizar, remover contato, saber quantos contatos est na agenda, etc. funo de algum algoritmo manipular esses dados de forma que facilite o uso das funes da agenda pelo usurio.

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

Apostila de Algoritmos e Estrutura de Dados


1.3 ALGORITMO E PROGRAMAS DE COMPUTADOR Informalmente, um algoritmo, um procedimento computacional bem definido que toma como entrada um valor (ou conjunto de valores) e produz como sada um valor (ou conjunto de valores) para a soluo de um problema computacional, ou seja, uma sequencia de passos computacionais que transforma entrada em sada.

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

Apostila de Algoritmos e Estrutura de Dados


particularidade que suas operaes so especficas para o computador e restrita a quantidade de instrues que o processador possa executar. 1.3.1 CLASSIFICAO DAS LINGUAGENS DE PROGRAMAO Esse conjunto de instrues que o processador ir executar, podemos dizer que esto em linguagem de mquina. A linguagem de programao que o computador consegue entender a linguagem composta apenas de nmeros, portanto desenvolver programas nesse nvel de linguagem torna-se algo muito complexo para ns seres humanos. Por isso, que antigamente somente um nmero restrito de pessoas possua esse conhecimento e os programas eram restritos a realizarem tarefas mais simples como operaes aritmticas. Na computao, a classificao das linguagens de programao definida de acordo com a proximidade com a linguagem de mquina. Ou seja, quanto maior for semelhana como o computador conversa, mais baixo o nvel da linguagem de programao. Foi necessrio ento criar um cdigo que relacionasse a linguagem de mquina a uma linguagem mais fcil de ser compreendida, da surgiu s linguagens de alto nvel. Exemplos de linguagem de baixo e alto nvel Baixo Nvel Assembly Alto Nvel C++, Java, Visual Basic, Pascal, PHP, etc...

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

Apostila de Algoritmos e Estrutura de Dados


Para serem processados por um computador, os comandos da linguagem de alto nvel precisam ser traduzidos para a linguagem de mquina. Essa traduo feita por meio de um compilador ou interpretador, dependendo do caso, como veremos abaixo. 1.3.2 COMPILADORES E INTERPRETADORES O compilador atravs do cdigo-fonte (algoritmo em linguagem de alto nvel) gera um arquivo com cdigo em linguagem de mquina, conhecido como cdigo-objeto. Esse arquivo fica armazenado no HD e carregado na memria assim que o programa executado. Em seguida necessrio o uso de outro programa (Link-Editor) que responsvel pela juno de diversos cdigos-objeto em um nico programa executvel. O cdigo executvel gerado pelo compilador dependente do sistema operacional e da linguagem de mquina para o qual o cdigo fonte foi traduzido

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

Apostila de Algoritmos e Estrutura de Dados


O interpretador tem a mesma funo do compilador que traduzir o cdigo-fonte para linguagem de mquina, s que o mesmo no gera o cdigo-objeto. As instrues so traduzidas em tempo de execuo. Exemplos: HTML, Excel, Word Basic, Access, SmallTalk, etc. Veja no quadro abaixo as vantagens e desvantagens de cada um dos tradutores. COMPILADOR Vantagens: O cdigo compilado mais rpido de ser acessado; Impossibilita ou pelo menos dificulta ser quebrado e visualizado o cdigo-fonte original; Permite otimizao do cdigo por parte do compilador; Compila o cdigo somente se estiver sem algum erro. COMPILADOR Desvantagens: Para ser utilizado o cdigo precisa passar por muitos nveis de compilao; Assim como vantagem a possibilidade de no poder visualizar o cdigo-fonte, pode ser uma desvantagem; Processo de correo ou alterao do cdigo requer que ele seja novamente recompilado. INTERPRETADOR Desvantagens: Execuo mais lenta do programa; Necessita sempre ser lido o cdigo original para ser executado. Vantagens: Correes e alteraes so mais rpidas de serem realizadas; Cdigo no precisa ser compilado para ser executado; Consomem menos memria. INTERPRETADOR

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

Apostila de Algoritmos e Estrutura de Dados


Clareza: refere-se facilidade de leitura do programa. Se um programa for escrito com clareza, com indentao, dever ser possvel a outro programador seguir a lgica do programa sem muito esforo, assim como o prprio autor do programa entend-los aps ter estado um longo perodo afastado dele. Simplicidade: a clareza e preciso de um programa so normalmente melhoradas tornando seu entendimento o mais simples possvel, consiste com os objetivos do programa. Muitas vezes torna-se necessrio sacrificar alguma eficincia de processamento, de forma a manter a estrutura do programa mais simples possvel. Eficincia: refere-se velocidade de processamento e a correta utilizao da memria. Um programa deve ter desempenho SUFICIENTE para atender as necessidades do problema e do usurio, bem como deve utilizar os recursos de memria de forma moderada, dentro das limitaes do problema; Modularidade: consiste no particionamento do programa em mdulos menores bem identificveis e com funes especficas, de forma que o conjunto desses mdulos e a interao entre eles permite a resoluo do problema de forma mais simples e clara; E por ltimo, Generalidade: interessante que um programa seja to genrico quanto possvel de forma a permitir a reutilizao de seus componentes em outros projetos.

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

Apostila de Algoritmos e Estrutura de Dados


Abaixo segue um algoritmo na sua representao grfica que resolve o seguinte problema: Faa um algoritmo que obtenha trs notas de provas, realize a mdia aritmtica e depois informe para o usurio se ele foi aprovado ou reprovado, seguindo a seguinte regra: Se a mdia for maior que sete, o aluno foi aprovado. Se for menor que sete, ele foi reprovado.

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

Apostila de Algoritmos e Estrutura de Dados


Algoritmo Media var N1, N2, N3, MEDIA: real; Inicio Escreva (Digite trs nmeros); Leia (N1, N2, N3); MEDIA (N1+N2+N3)/3; Se (MEDIA >= 7) ento Escreva ("Aprovado"); Seno Escreva ("Reprovado"); Fim End. Else Write ('Reprovado'); Begin Write ('Digite trs nmeros'); Readln(N1, N2, N3); MEDIA:=(N1+N2+N3)/3; If (MEDIA >=7) then Write ('Aprovado') Program Media; var N1, N2, N3, MEDIA: real;

2.3

FUNDAMENTOS PARA PROGRAMAO

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

Apostila de Algoritmos e Estrutura de Dados


2.3.2 CONSTANTES Uma constante uma posio de memria no qual o sistema armazena um valor fixo, valor este que no pode ser alterado durante a execuo. Uma constante associada a um identificador e um valor. As constantes so declaradas com a seguinte sintaxe: const identificador valor; Exemplo: const advogado 6252365; As variveis como as constantes so declaradas antes do incio do algoritmo/programa.
Algoritmo Maior var A: inteiro; const PI 3,14; Incio . .

2.3.3

TIPO DE DADOS PRIMITIVOS

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

Apostila de Algoritmos e Estrutura de Dados


2.3.3.3 Caractere(Char/String) Conjunto dos caracteres alfanumricos (nmeros, letras, smbolos, etc.). Representado por apenas um byte. Ele pode armazenar apenas 1 caractere. Declarao: var opcao: caractere; No exemplo acima foi declarada uma varivel do tipo CARACTERE que atende pelo nome de opcao. Temos tambm dados agrupados do tipo caractere, em pascal chamados esses dados de string, eles podem armazenar mais de um caractere definidos na declarao da varivel. Declarao: var endereco: caractere[30]; No exemplo acima foi declarada uma varivel do tipo CARACTERE[30] que atende pelo nome de endereco e pode receber at 30 caracteres alfanumricos (nmeros, letras, smbolos, etc.). 2.3.3.4 Lgico Quando assume apenas dois estados: Verdadeiro ou Falso. Declarao: var flag: logico; No exemplo acima foi declarada uma varivel do tipo LGICO que atende pelo nome de flag. 2.3.4 NOMENCLATURA DAS VARIVEIS

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

Apostila de Algoritmos e Estrutura de Dados


2.3.5 OPERADORES ARITMTICOS Os operadores aritmticos so utilizados para efetuar operaes aritmticas com nmeros inteiros e reais. A tabela abaixo apresenta os operadores existentes em Pascal e que tambm utilizaremos nos nossos algoritmos em portugus:

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

Apostila de Algoritmos e Estrutura de Dados


Var A Var D {Errado, a varivel A no tem o tamanho suficiente para armazenar o valor contido na varivel D}. Memria
Var D Var A Var B Vazio Vazio Vazio Vazio Vazio

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:

Segue abaixo um exemplo de algoritmo utilizando operadores relacionais:


Algoritmo OPREL var Nota1, Nota2 : real; Aluno1, Aluno2 : caractere[30]; A, B, C : inteiro; Inicio A 2; B 3; C 1; Se B = A + C Ento Escreva(B); Nota1 5.0; Nota2 10.0; Se Nota1 < Nota2 Ento Escreva(Nota1); Aluno1 Maria Jose; Aluno2 MariaJose; Se Aluno1 < Aluno2 Ento Escreva(Aluno1); Fim Program OPREL; var Nota1, Nota2 : real; Aluno1, Aluno2 : string[30]; A, B, C : integer; begin A := 2; B := 3; C := 1; if B = A + C then writeln(B); Nota1 := 5.0; Nota2 := 10.0; if Nota1 < Nota2 then writeln(Nota1); Aluno1 := Maria Jose; Aluno2 := MariaJose; if Aluno1 < Aluno2 then writeln(Aluno1); end.

2.3.7

OPERADORES LGICOS

Os operadores lgicos so utilizados para analisar duas expresses inter-relacionadas.

Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391

16

Apostila de Algoritmos e Estrutura de Dados


OPERADOR NO PASCAL

E OU NO

AND OR NOT

Veja abaixo, exemplo de algoritmo utilizando operadores lgicos:


Algoritmo OPELOGICOS var Nota1, Nota2 : real; Aluno1, Aluno2 : caractere[30]; A, B, C : inteiro; Inicio A 2; B 3; C 1; Aluno1 Maria Jose; Aluno2 MariaJose; se ( B = A + C ) E ( NomeAluno1 <> NomeAluno2 ) ento Escreva( Aluno1, B ); se ( A = C ) OU ( Aluno1 = Aluno2 ) ento Escreva( Aluno1 ); se NO( A = C ) ento Escreva( Aluno1 ); Fim Program OPELOGICOS; var Nota1, Nota2 : real; Aluno1, Aluno2 : string[30]; A, B, C : integer; begin A := 2; B := 3; C := 1; Aluno1 := Maria Jose; Aluno2 := MariaJose; if ( B = A + C ) and ( Aluno1 <> Aluno2 ) then writeln( Aluno1, B ); if ( A = C ) or ( Aluno1 = Aluno2 ) then writeln( Aluno1 ); if not( A = C ) then writeln( Aluno1 ); end.

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

Apostila de Algoritmos e Estrutura de Dados


Operador NO (NOT) Condio 1 Verdadeiro Falso Resultado Falso Verdadeiro

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

Apostila de Algoritmos e Estrutura de Dados


e) Valores verdadeiro ou falso. 5. Seguindo a regra de prioridades, qual ser o resultado da expresso (2+2)*5/2-5+6*2+(7*2), faa passoa-passo. 6. Quais operadores sero utilizados para comparar as seguintes condies: a) A maior que B; b) C menor que A; c) D diferente de A; d) A maior ou igual a B; e) C menor ou igual a J. 7. Analise as expresses abaixo e informe qual ser a sada (V ou F): a) NO (V OU F); b) V E NO (V E F); c) V E F.

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

Apostila de Algoritmos e Estrutura de Dados


Veja abaixo, mais alguns exemplos de problemas que podem ser resolvidos com algoritmos sequenciais: 1) Faa um algoritmo que receba o salrio de um funcionrio, calcule e mostre o novo salrio, sabendo que este sofreu um aumento de 25%.
Algoritmo NOVO_SALARIO var Sal, NSal : real; Inicio Escreva(Digite o seu salrio); Leia(Sal); NSal (Sal*0.25)+Sal; Escreva(O seu novo salrio , Sal); Fim Program NOVO_SALARIO; var Sal, NSal : real; begin Write(Digite o seu salrio); Readln(Sal); NSal := (Sal*0.25)+Sal; Write(O seu novo salrio , NSal); end.

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

Apostila de Algoritmos e Estrutura de Dados


Leia(SalB); Salliq ((SalB*0.05)+SalB)(SalB*0.07); Escreva(O salrio a receber ,Salliq); Fim end. Readln(SalB); Salliq := ((SalB*0.05)+SalB)(SalB*0.07); Write(O salrio a receber ,Salliq);

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

Apostila de Algoritmos e Estrutura de Dados


8. Faa um algoritmo que calcule o salrio a receber de um funcionrio, sabendo-se que o usurio deve entrar com o nmero de horas trabalhadas, o valor do salrio mnimo e a quantidade de horas extras e o valor da hora trabalhada igual ao salrio mnimo/8 e o valor da hora extra igual ao salrio mnimo/4. 9. Faa um algoritmo que receba o peso de uma pessoa, calcule e mostre o peso dessa pessoa, se a mesma engordar 15% e 20%. 3.2 ESTRUTURA CONDICIONAL A estrutura condicional utilizada quando necessrio fazer uma opo entre dois ou mais caminhos, sendo que o fluxo do algoritmo desviado segundo uma condio lgico relacional, ou seja, se a condio for verdadeira o algoritmo ir realizar uma sequncia, seno ir executar outra sequncia. Na figura abaixo mostra na forma grfica.

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

Apostila de Algoritmos e Estrutura de Dados


Existem dois tipos de estrutura condicional a simples e a composta: 3.2.1 ESTRUTURA CONDICIONAL SIMPLES A estrutura de seleo simples permite que o programa tome uma determinada deciso de acordo com o resultado da expresso lgica a ser avaliada, ou seja, se a expresso for verdadeira, ele deve executar o(s) comando(s) interno(s) pertencente estrutura de seleo. 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.
Se <condio> ento Comando 1; Se <condio> ento Inicio Comando 1; Comando 2; Fim

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

Apostila de Algoritmos e Estrutura de Dados


3.2.3 ESTRUTURA CONDICIONAL MLTIPLA ESCOLHA A estrutura de mltipla escolha utilizada quando existem vrias possibilidades de resposta para uma determinada varivel. Entretanto, apenas uma delas deve ser a verdadeira e indicar os comandos a serem executados. 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 para cada caso;
caso (expresso_de_controle) valor_1: comando1 ; valor_2: comando2 ; valor_3: comando3 ; seno comando4; fim; caso (expresso_de_controle) valor_1: Inicio comando1 ; comando2 ; Fim; valor_2: comando2 ; valor_3: comando3 ; seno comando4; fim;

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

Apostila de Algoritmos e Estrutura de Dados


6. Faa um algoritmo que receba o salrio mdio do usurio, calcule e mostre na tela o resultado do crdito disponvel, de acordo com as informaes abaixo: Faixa salarial Menor ou igual a R$ 500,00 Maior que R$ 500,00 e menor que R$ 600,00 Maior ou igual a R$ 600,00 3.3 ESTRUTURAS DE REPETIO Existem situaes onde necessrio repetir um determinado trecho de um programa, certo nmero de vezes. Imagine que voc tenha que executar um determinado bloco de instrues 5 vezes. Com os conhecimentos que voc tem at agora, seria necessrio repetir as instrues CINCO vezes, tornando seu trabalho muito cansativo. Assim, existem as estruturas de repetio, que permitem que voc execute essas tarefas de forma mais simplificada. Podemos chamar as estruturas de repetio de laos ou loops, sendo que podem existir trs tipos de laos de repetio, vamos ver com mais detalhes cada um deles. 3.3.1 ESTRUTURA DE REPETIO PARA O comando PARA executa repetitivamente um comando enquanto atribuda uma srie de valores a uma varivel de controle (contador do PARA). Ele automaticamente incrementa a varivel de controle. Vejamos abaixo como utilizaremos essa estrutura em nossos algoritmos.
Para X Expresso1 at Expresso2 faa Inicio Comando 1; Comando 2; Fim; For x:= Expresso1 to Expresso2 do Begin Comando 1; Comando 2; End;

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

Apostila de Algoritmos e Estrutura de Dados


Escreva(Entre um valor para B: ); Leia(B); R A + B; Escreva(O resultado corresponde a: ,R); Fim; Fim End. end; write(Entre um valor para B: ); readln(B); R := A + B; writeln(O resultado corresponde a: ,R);

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;

Vamos ver um algoritmo utilizando a estrutura de repetio ENQUANTO.


Algoritmo EXEMPLO_ENQUANTO var A, B, R, I : inteiro; Inicio I1; Enquanto(I<=5) faa Inicio Escreva(Entre um valor para A: ); Leia(A); Escreva(Entre um valor para B: ); Leia(B); program EXEMPLO_ENQUANTO; var A, B, R, I : integer; begin I:=1; while (I <= 5) do begin write(Entre um valor para A: ); readln(A); write(Entre um valor para B: ); readln(B); R := A + B;

Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391

26

Apostila de Algoritmos e Estrutura de Dados


R A + B; Escreva(O resultado corresponde a: ,R); I I+1; Fim; Fim end. writeln(O resultado corresponde a: ,R); I := I + 1; end;

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>;

Vamos ver um algoritmo utilizando a estrutura de repetio REPITA.

Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391

27

Apostila de Algoritmos e Estrutura de Dados


Algoritmo EXEMPLO_REPITA var A, B, R, I : inteiro; Inicio I1; Repita Escreva(Entre um valor para A: ); Leia(A); Escreva(Entre um valor para B: ); Leia(B); R A + B; Escreva(O resultado corresponde a: ,R); I I+1; At (I <= 5); Fim program EXEMPLO_REPITA; var A, B, R, I : integer; begin I:=1; Repeat write(Entre um valor para A: ); readln(A); write(Entre um valor para B: ); readln(B); R := A + B; writeln(O resultado corresponde a: ,R); I := I + 1; Until (I <= 5); end.

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

Apostila de Algoritmos e Estrutura de Dados


var nota1, nota2, nota3, nota4, nota5, nota6, nota7, nota8, nota9, nota10: integer

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

Apostila de Algoritmos e Estrutura de Dados


Leia(X[cont]); Se (X[cont] mod 2)= 0 ento Inicio qtp qtp+1; Fim; Fim; Escreva(A quantidade de nmeros pares , qtp); Fim end. write(Digite um nmero); readln(X[cont]); if (X[cont] mod 2)= 0 then begin qtp:=qtp+1; End; End; Write(A quantidade de nmeros pares , qtp);

Vamos analisar o cdigo acima passo a passo:


Algoritmo PARES var X[20], cont, qtp : inteiro;

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

Apostila de Algoritmos e Estrutura de Dados


No final fora do lao de repetio Para, depois de ser executado 20 vezes, mostramos para o usurio a quantidade de nmeros pares dos valores informados por ele. 4.2 MATRIZES Outra estrutura de dados muito utilizada so as matrizes. Vamos imaginar que queremos reescrever o algoritmo das notas do aluno, agora mantendo o controle para seis alunos ao invs de apenas um. Com os conhecimentos adquiridos at agora seria necessrio criar seis vetores (matrizes unidimensionais) de vinte posies cada um, um para cada aluno. Esta uma soluo, e funciona, porm, torna nosso trabalho mais cansativo. Para facilitar o trabalho com estruturas deste porte, existem as chamadas matrizes (ou matrizes multidimensionais, se voc pensar que vetores so matrizes unidimensionais). A mais comum a matriz de duas dimenses. Uma matriz de duas dimenses estar sempre fazendo meno a linhas e colunas e ser representada por seu nome e seu tamanho. Nosso algoritmo
var notas[6,10]: inteiro;

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

Apostila de Algoritmos e Estrutura de Dados


Faa um algoritmo que receba 5 notas de 15 alunos, faa mdia e mostre para cada aluno se foi aprovado ou reprovado e ao final apresente a mdia das notas da turma e informe para o usurio o desempenho. Veja as condies de aprovao de cada aluno e desempenho da turma. Critrio para aluno Mdia notas >=7 >=5 e <7 <5 Resultado Aprovado Recuperao Reprovado Critrio para turma Mdia notas >=9 >=7 e <=8 <7 Resultado Excelente Bom Ruim

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

Apostila de Algoritmos e Estrutura de Dados


Vamos analisar o cdigo acima passo a passo:
Algoritmo NOTAS var X[15,5],L,C,ST,SA: inteiro; MT, MA : real;

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

Apostila de Algoritmos e Estrutura de Dados


errada. Na varivel ST somamos as notas para que no final tenhamos condies de saber qual a mdia da turma.
MT ST/75; Se (MT >=9.0) Escreva Seno Se ((MT>=7.0) Escreva Seno Escreva ento (Excelente a mdia da turma foi , MT); E (MT <=8.0)) ento (Bom, a mdia da turma foi ,MT); (Ruim, a mdia da turma foi , MT);

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

Apostila de Algoritmos e Estrutura de Dados


qt, x: inteiro; Inicio soma 0; maior 0; qt 0; Para x 1 at 5 faa Inicio Escreva(Digite o seu salrio ); Leia (pessoa[x].sal); Escreva (Digite a sua idade ); Leia (pessoa[x].idade); Escreva(Digite o nmero de filhos , pessoa[x].filhos); soma soma+ pessoa[x].sal; Se pessoa[x].sal > maior ento maior pessoa[x].sal; Fim; Media soma/5; Para x 1 at 5 faa Inicio Se pessoa[x].sal > media ento qt qt+1; Fim; Escreva(A mdia , media); Escreva(A qt. de pessoas , qt); Escreva(O maior salrio , maior); Fim idade: integer; end; var pessoa: array [1..5] of dados; maior, soma, media: real; qt, x: integer; Begin soma:=0; maior:=0; qt:=0; For x:= 1 to 5 do Begin Write(Digite o seu salrio); Readln(pessoa[x].sal); Write(Digite a sua idade); Readln(pessoa[x].idade); Write(Digite o nmero de filhos); Readln(pessoa[x].filhos); soma:=soma+pessoa[x].sal; if pessoa[x].sal > maior then maior:=pessoa[x].sal; End; Media:=soma/5; For x:=1 to 5 do Begin If pessoa[x].sal > media then qt:=qt+1; End; Writeln(A media , media); Writeln(A qt. De pessoas , qt); Writeln(O maior salrio , maior); End.

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

Apostila de Algoritmos e Estrutura de Dados


5. Faa um algoritmo que receba os dados de cadastro de alunos do curso tcnico do Pronatec. Esses dados so Nome, Idade, Bairro, Nome da Me e Nmero do arquivo onde esto os documentos. Sabe-se que so 40 alunos. Mostre a listagem dos cadastrados. 6. Faa um algoritmo que carregue uma matriz 10x10 com nmeros inteiros, execute as trocas especificadas a seguir e mostre a matriz resultante. a. A linha 2 com a linha 8; b. A coluna 4 com a coluna 10; c. A diagonal principal com a diagonal secundria; d. A linha 5 com a coluna 10. 7. Faa um algoritmo que receba os dados sobre acidentes de 5 estados brasileiros ( Nome do estado, nmero de veculos que circulam no estado, nmero de acidentes de trnsito). Deseja-se saber: a. Qual o maior e o menor ndice de acidentes de trnsito e o nome do estado em que eles ocorreram; b. Qual o percentual de veculos em cada estado; c. Qual a mdia de acidentes em cada um dos estados. 8. Faa um programa que converta decimais inteiros em binrio. 9. Escreva um programa capaz de calcular a sequncia fibonacci, sendo que: a. O primeiro nmero sempre zero; b. O segundo nmero sempre 1; c. Os prximos nmeros so o resultado da soma dos dois predecessores. Encontre at a sequncia 12. O resultado deve ser 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89. CAPTULO 5 MODULARIZAO Modularizao a tcnica de dividir o cdigo em partes menores, tambm chamadas de sub-rotinas. So blocos de instrues que realizam tarefas especficas. O cdigo de uma sub-rotina carregado uma vez e pode ser executado quantas vezes for necessrio. Dessa maneira, os programas tendem a ficar menores e mais organizados, uma vez que o problema pode ser subdivido em tarefas menores. Os programas seguem uma estrutura sequencial e quando utilizamos as sub-rotinas essa sequncia pode ser desviada quando uma sub-rotina e chamada pelo programa principal. Existem dois tipos de sub-rotinas Funo: uma sub-rotina que executa seus procedimentos e no final retorna um valor; Procedimento: uma sub-rotina que executa seus procedimentos e no final no retorna nenhum valor.
Escola Estadual Geraldo Gomes Ribeiro Rua: Jos Gomes Ribeiro, n 60, Limoeiro Ipatinga MG CEP: 35.162-451 - Fone: 3824 8391

36

Apostila de Algoritmos e Estrutura de Dados


Vamos ver a sintaxe que utilizaremos nos nossos algoritmos. Nosso algoritmo
Sub-Rotina Nome (parmetros) var <declarao de variveis> Inicio <Instrues>; Fim; Sub-Rotina Nome (parmetros): <tipo> var <declarao de variveis> Inicio <Instrues>; Fim;

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

Apostila de Algoritmos e Estrutura de Dados


J no exemplo acima temos um funo que retorna valor do tipo real. Essa funo solicita dois nmeros e retorna o resultado da soma desses nmeros. Perceba que o retorno dado fazendo o nome da sub-rotina receber a soma. Com o uso de parmetros:
Sub-Rotina ADICAO (var A, B: real) var X: real; Inicio X A+B; Escreva(O resultado : , X); Fim; procedure ADICAO(var A, B: real); var X: real; begin X := A + B; write(O resultado e: , X); end;

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

Apostila de Algoritmos e Estrutura de Dados


5.1 PASSAGEM DE PARMETRO Os parmetros tm por finalidade servir como um ponto de comunicao entre uma sub-rotina e o programa principal, ou com outra sub-rotina de nvel mais alto. Desta forma, possvel passar valores de uma rotina a outra rotina, atravs do uso de parmetros que podero ser formais ou reais. Sero considerados parmetros formais quando forem declarados atravs de variveis juntamente com a identificao do nome da rotina, os quais sero tratados exatamente da mesma forma que so tratadas as variveis globais ou locais, conforme exemplo acima na declarao de sub-rotina com uso de parmetros. Sero considerados parmetros reais quando estes substiturem os parmetros formais, quando da utilizao da rotina por um programa principal ou por uma rotina chamadora. Vejamos um exemplo abaixo de um trecho de cdigo que chama um procedimento:
Inicio Escreva (Escreva um valor); Leia(X); Escreva (Escreva outro valor); Leia(Y); ADICAO (X,Y); Fim. Begin Write (Escreva um valor); Readln(X); Write (Escreva outro valor); Readln(Y); ADICAO (X,Y); End.

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

Apostila de Algoritmos e Estrutura de Dados


5.1.1 PASSAGEM DE PARMETRO POR VALOR A passagem de parmetro por valor caracteriza-se pela no alterao do valor do parmetro real, quando este manipulado dentro da sub-rotina. Assim sendo, o valor passado pelo parmetro real copiado para o parmetro formal, que no caso assume o papel de varivel local da rotina. Desta forma, qualquer alterao que ocorra na varivel local da rotina no afetar o valor do parmetro real correspondente. O algoritmo FATORIAL acima um exemplo de passagem de parmetro por valor.

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

Apostila de Algoritmos e Estrutura de Dados


15! = 15.14.13.12.11.10.9.8.7.6.5.4.3.2.1 = 2004310016 5! = 5.4.3.2.1 = 120 Vejamos o fatorial de 4: (4!) Portanto, podemos dizer que o fatorial de quatro ele vezes o fatorial de 3. O fatorial de 3 ele vezes o fatorial de 2. O fatorial de 2 ele vezes o fatorial de 1 e finalmente o fatorial de 1 ele. Veja abaixo como ficaria a expresso: 4! = 4.3! = 4.(3.2!) = (4.3).(2.1!) = 4. 3. 2. 1 = 24 Ento o fatorial de 4 igual a 24. Percebemos que existe uma recursividade, onde o fatorial de um nmero definido a partir dos fatoriais dos nmeros menores. Isto significa que, para o clculo do fatorial, h necessidade de que se recorra aos fatoriais dos naturais anteriores. Recursividade aplicada somente as funes, pois necessita que retornem valor a funo chamadora. Vejamos abaixo como ficaria o algoritmo FATORIAL implementado na forma de funo recursiva.
Algoritmo FATORIAL Sub-Rotina FATOR (var N: integer):real Inicio Se (N<=1) ento FATOR 1; seno FATOR FAT * FATOR(N-1); Fim; var LIMITE: integer; RETORNO : real; Inicio Leia(Informe um valor inteiro: ); Leia(LIMITE); RETORNO FATOR (LIMITE); Escreva(A fatorial de , LIMITE, equivale a: , RETORNO); Fim. program FATORIAL; Function FATOR(var N : integer) : real ; begin if(N<=1) then FATOR:=1; else FATOR := N * FATOR(N-1); end; var LIMITE: integer; RETORNO : real; begin write('Informe um valor inteiro: '); readln(LIMITE); RETORNO:=FATOR (LIMITE); writeln('A fatorial de ', LIMITE, ' equivale a: ', RETORNO); end.

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

Apostila de Algoritmos e Estrutura de Dados


sucessivas da funo e das operaes de empilhamento e desempilhamento, o que demanda um tempo maior de computao e uma maior necessidade de uso de memria .

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

Apostila de Algoritmos e Estrutura de Dados


REFERNCIAS BIBLIOGRFICAS

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