You are on page 1of 38

Algoritmos

Lgica para Desenvolvimento de Programao

Introduo

Este trabalho fruto de minha experincia em desenvolvimento de softwares e cursos lecionados na rea de programao. O material aqui apresentado foi recolhido de algumas literaturas de Estrutura de Dados e Tutoriais da encontrados no sites da Internet. A programao para mim uma diverso, apesar de complexo, mas vejo como a

capacidade de um ser humano dominar e solucionar com recursos computacionais problemas do dia-a-dia de uma Empresa, Corporao, etc... O raciocnio da lgica para a programao traz ao indivduo um novo mundo cheio de outros mundos. Dominando a lgica voc ser capaz de aprender sem grandes dificuldades qualquer outra linguagem de programao seja ela estruturada, orientada a objeto, orientada a eventos.

Alessandro Coelho Porto

Sobre o Autor
Atualmente trabalha como Webdesign / Webmaster na Embrapa Cerrados, sua principal tarefa est no planejamaneto e desenvolvimento de Sites. Utiliza as linguagens HTML, JavaScript e VbScript e Sistemas de Banco de Dados (ASP) para a Internet. Em sua experincia profissional tambm encontramos servios autnomos na rea de desenvolvimento na rea comercial, as ferramentas por ele utilizadas foram Clipper, Visual Basic e Delphi.

Abordagem Contextual Muitas pessoas gostam de falar ou julgar que possuem e sabem usar o raciocnio lgico, porm, quando questionadas direta ou indiretamente, perdem esta linha de raciocnio, pois este depende de inmeros fatores para complet-lo, tais como: calma, conhecimento, vivncia, versatibilidade, experincia, criatividade, ponderao, responsabilidade, entre outros. Bem sem mais delongas podemos dizer que lgica a cincia que estudas as leis e critios de validade que regem o pensamento e a demonstrao, ou seja, cincia dos princpios formais do raciocnio. Usar a lgica um fator a ser considerado por todos, principalmente pelos profissionais de informtica (programadores, analistas de sistemas e suporte), pois seu dia-a-dia dentro das organizaes solucionar problemas e atingir os objetivos apresentados por seus usurios com eficincia e eficcia, utilizando recursos computacionais e/ou automatizados macatronicamente. Saber lidar com problemas de ordem administrativa, de controle, de planejamento e de estratgica requer ateno e boa performance de conhecimento de nosso interesse mostrar como desenvolver e aperfeioar melhor esta tcnica, lembrando que para isto, voc dever ser persistente e pratic-la constantemente, chegando exausto sempre que julgar necessrio. Princpios de Resolues de Problemas Primeiramente, devemos entender e compreender a palavra problema. Podemos dizer que problema um proposta duvidosa, que pode Ter inmeras solues, ou questo no solvida e que o objeto de discusso, segundo a definio encontrada no Dicionrio Aurlio. Preferimos dizer que problema uma questo que foge a uma determinada regra, ou melhor, o desvio de um percurso, o qual impede de atingir com sucesso um determinado objetivo com eficincia e eficcia. Uma das solues utilizadas para a resoluo de problemas tem sido a utilizao dos diagramas, no decorrer do curso ser bastante enfatizado em sala de aula o uso de tais ferramentas com o intuito de auxiliar os aprendizados tanto na resoluo de problemas como no conhecimento das tcnicas de programao.
ALGORITMO

Um Algoritmo uma seqncia de instrues ordenadas de forma lgica para a resoluo de uma determinada tarefa ou problema.
PROGRAMAO ESTRUTURADA

Basicamente, a Programao Estruturada consiste numa metodologia de projeto de programas visando: O facilitar a escrita dos programas; facilitar a leitura (o entendimento) dos programas; permitir a verificao a priori dos programas; facilitar a manuteno e modificao dos programas. maior problema em grandes sistemas de software reside na enorme complexidade desses sistemas, cuja a apreenso vai geralmente muito alm da capacidade intelectual de um ser humano. Entenda-se aqui por complexidade de um sistema uma medida do nmero de seus componentes e do grau de interao entre eles.

Para Dijkstra, o indiscutvel iniciador da programao estruturada, a arte de programar consiste na arte de organizar e dominar a complexidade. A idia da Programao Estruturada, que vai ao encontro da mencionada tarefa do programador, reduzir a complexidade, em trs nveis: 1. desenvolvimento do programa em diferentes fases por refinamento sucessivo (desenvolvimento Top-Down); 2. decomposio do programa total em mdulos funcionais, organizados de preferncia num sistema hierrquico; 3. usando dentro de cada mdulo s um nmero muito limitado de estruturas bsicas de fluxo de controle. O curso tem por objetivo apresentar aos alunos os conceitos e desenvolvimento da programao estruturada, utilizando duas ferramentas muito utilizadas em cursos acadmicos, o Portuguol e o Pascal. PROGRAMA Um programa um Algoritmo escrito em uma linguagem computacional. Mais o que um Algoritmo? Algoritmo um processo de clculo matemtico ou de resoluo de um grupo de problemas semelhantes, em que se estipulam, com generalidade e sem restries. Podemos dizer tambm, que so regras formais para obteno de um resultado ou da soluo de um problema, engoblando frmulas de expresses aritmticas. LINGUAGENS DE PROGRAMAO So Softwares que permitem o desenvolvimento de programas. Possuem um poder de criao ilimitado, desde jogos, editores de texto, sistemas empresariais at sistemas operacionais. Existem vrias linguagens de programao, cada uma com suas caractersticas prprias. Exemplos: Pascal Clipper C Visual Basic Delphi e etc.

TCNICAS ATUAIS DE PROGRAMAO Programao Seqencial Programao Estruturada Programao Orientada a Eventos e Objetos Programao Orientada a Objetos

ALGORITMOS EM PORTUGOL Durante nosso curso iremos aprender a desenvolver nossos Algoritmos em uma pseudo-linguagem conhecida como Portugol ou Portugus Estruturado. Portugol derivado da aglutinao de Portugus + Algol. Algol o nome de uma linguagem de programao estruturada usada no final da dcada de 50. OPERADORES ARITMTICOS + * / Adio Subtrao Multiplicao Diviso

OPERADORES RELACIONAIS > < >= <= = <> Maior que Menor que Maior ou Igual Menor ou Igual Igual Diferente

LINEARIZAO DE EXPRESSES Para a construo de Algoritmos todas as expresses aritmticas devem ser linearizadas, ou seja, colocadas em linhas. MODULARIZAO DE EXPRESSES A modularizao a diviso da expresso em partes, proporcionando maior compreenso e definindo prioridades para resoluo da mesma. Como pode ser observado no exemplo anterior, em expresses computacionais usamos somente parnteses ( ) para modularizao. Na informtica podemos ter parnteses dentro de parnteses. Exemplos de prioridades: (2+2)/2=2 2+2/2=3 OPERADORES ESPECIAIS (MOD e DIV) MOD Retorna o resto da diviso entre 2 nmeros inteiros. DIV Retorna o valor inteiro que resulta da diviso entre 2 nmeros inteiros.

FUNES Uma funo um instrumento (Subalgoritmo) que tem como objetivo retornar um valor ou uma informao. A chamada de uma funo feita atravs da citao do seu nome seguido opcionalmente de seu argumento inicial entre parnteses. As funes podem ser predefinidas pela linguagem ou criadas pelo programador de acordo com o seu interesse. BIBLIOTECAS DE FUNES Armazenam um conjunto de funes que podem ser usadas pelos programas. FUNES PR-DEFINIDAS ABS( ) SQRT( ) SQR( ) TRUNC( ) ROUND( ) LOG( ) SIN( ) COS( ) TAN( ) VALOR ABSOLUTO RAIZ QUADRADA ELEVA AO QUADRADO VALOR TRUNCADO VALOR ARREDONDADO LOGARITMO SENO COSENO TANGENTE

As funes acima so as mais comuns e importantes para nosso desenvolvimento lgico, entretanto, cada linguagem possui suas funes prpias. As funes podem ser aritmticas, temporais, de texto e etc. VARIVEIS Variveis so endereos de memria destinados a armazenar informaes temporariamente. * Todo Algoritmo ou programa deve possuir varivel! VARIVEIS DE ENTRADA E SADA Variveis de Entrada armazenam informaes fornecidas por um meio externo, normalmente usurios ou discos. Variveis de Sada armazenam dados processados como resultados. Exemplo:

C=A+B

De acordo com a figura acima A e B so Variveis de Entrada e C uma Varivel de Sada.

CONSTANTES Constantes so endereos de memria destinados a armazenar informaes fixas, inalterveis durante a execuo do programa. Exemplo: PI = 3.1416 IDENTIFICADORES So os nomes dados a variveis, constantes, Tipo de Dados, Registros e programas. Regras Para construo de Identificadores: No podem ter nomes de palavras reservadas (comandos da linguagem); Devem possuir como 1 caractere uma letra ou Underscore ( _ ); Ter como demais caracteres letras, nmeros ou Underscore; Ter no mximo 127 caracteres; No possuir espaos em branco; A escolha de letras maisculas ou minsculas indiferente. Exemplos: NOME NOTA1 TELEFONE SALARIO IDADE_FILHO PI

UMNOMEMUITOCOMPRIDOEDIFICILDELER UM_NOME_MUITO_COMPRIDO_E_FACIL_DE_LER TIPOS DE DADOS Todas as Variveis devem assumir um determinado tipo de informao. O tipo de dado pode ser: Primitivo Pr-definido pela linguagem; Sub-Faixa uma parte de um tipo j existente; Escalar Definidos pelo programador. TIPOS PRIMITIVOS DE DADOS ADMITE SOMENTE NMEROS INTEIROS. GERALMENTE UTILIZADO PARA REPRESENTAR UMA CONTAGEM (QUANTIDADE). ADMITE NMEROS REAIS (COM OU SEM CASAS DECIMAIS). GERALMENTE UTILIZADO PARA REPRESENTAR UMA MEDIO. ADMITE CARACTERES ALFANUMRICOS. OS NMEROS QUANDO DECLARADOS COMO CARACTERES TORNAM SE REPRESENTATIVOS E PERDEM A ATRIBUIO DE VALOR.

INTEIRO

REAL

CARACTERE

LGICO

ADMITE SOMENTE VALORES LGICOS(VERDADEIRO/FALSO).

COMANDOS DE I/O (INPUT/OUTPUT) LEIA Comando de entrada que permite a leitura de Variveis de Entrada. ESCREVERA Comando de sada que exibe uma informao na tela do monitor. IMPRIMA Comando de sada que envia uma informao para a impressora. SINAL DE ATRIBUIO Uma Varivel nunca eternamente igual a um valor, seu contedo pode ser alterado a qualquer momento. Portanto para atribuir valores a variveis devemos usar o sinal de :=. Exemplos: A := 2; B := 3; C := A + B; SINAL DE IGUALDADE As constantes so eternamente iguais a determinados valores, portanto usamos o sinal de =. Exemplos: PI = 3.1416; Empresa = Colgio de Informtica L.T.D.A. V = Verdadeiro CORPO GERAL DE UM PROGRAMA PROGRAMA <<identificador>>; CONST <<identificador>> = <<dado>> VAR <<identificador>> : <<tipo>>; NICIO { COMANDOS DE ENTRADA,PROCESSAMENTO E SADA <<comando1>>; <<comandoN>> } FIM.

ESTRUTURAS SEQNCIAIS Como pode ser analisado no tpico anterior, todo programa possui uma estrutura seqencial determinada por um NICIO e FIM. TCNICAS BSICAS DE PROGRAMAO A partir deste ponto de estudo, voc ter um contato direto com a parte mais prtica deste trabalho. Anteriormente nos preocupamos em proporcionar a voc, leitor, um conhecimento terico bsico, de algns pontos que so por vezes causadores de dvidas at a alguns profissionais de informtica considerados experientes. Sendo assim, daqui para frente voc ter um contato maior com a aplicao prtica dos Algoritmos. ENTRADA, PROCESSAMENTO E SADA Para se criar um programa que seja executvel dentro de um computador, voc dever term em mente trs pontos de trabalho: a entrada de dados, o seu processamamento e a sada dos mesmos. Sendo assim, todo programa estar trabalhando com estes trs conceitos. Se os dados forem entrados de forma errada, sero consequentemente e resultaro em respostas erradas. Desta forma, dizer a algum que foi erro do computador ser um pouco medocre. O processo de execuo de um programa ocorre segundo o exposto, aps a entrada de dados com a instruo leia e sada dos mesmos com a instruo escreva, o processamento ser uma conseqncia da manipulao das variveis de ao. Uma entrada e uma sada podero ocorrer dentro de um computador de diversas formas. Por exemplo, uma entrada poder ser feita via teclado, moddem, leitores ticos, disco, entre outras. Uma sada poder ser feita em vde, impressora, disco, entre outras formas. Devido a esta grande variedade, nossos programas escrito em portugus estruturado faro meno s instrues leia e escreva.

10

Exemplo 01 Segue um Algoritmo que l o nome e as 4 notas bimestrais de um aluno. Em seguida o Algoritmo calcula e escreve a mdia obtida. PROGRAMA MEDIA_FINAL VAR NOTA1, NOTA2, NOTA3, NOTA4, MEDIA: INTEIRO NOME : CARACTERE INICIO LEIA (NOME) LEIA (NOTA1, NOTA2, NOTA3, NOTA4) MEDIA <= (NOTA1 + NOTA2 + NOTA3 + NOTA4) / 4 ESCREVER (NOME, MEDIA) FIM. Exemplo 02 Segue um Algoritmo que l o raio de uma circunferncia e calcula sua rea. PROGRAMA AREA_CIRCUNFERENCIA CONST PI = 3.1416 VAR RAIO, AREA : REAL INICIO LER (RAIO) {PROCESSAMENTO} AREA <= PI * SQR(RAIO) {ENTRADA} ESCREVER (AREA =, AREA) {SADA} FIM. {LINHAS DE COMENTRIO} Podemos inserir em um Algoritmo comentrios para aumentar a compreenso do mesmo, para isso basta que o texto fique entre Chaves {}. Exemplo: LER (RAIO); {ENTRADA}

11

Exerccios de Aprendizagem

1) Construir um programa que efetue o clculo de um salrio lquido de um professor. Para fazer este programa voc dever possuir alguns dados, tais como: valor da hora aula, nmero de aulas dadas no ms e percentual de desconto do INSS. Em primeiro lugar, deve-se estabelecer qual ser o seu salrio bruto para efetuar o desconto e Ter o valor do salrio lquido. 2) Efetuar o clculo da quantidade de litros de combustvel gastos em uma viagem, utilizando-se um automvel que faz 12 Km por litro. Para obeter o clculo, o usurio dever fornecer o tempo gasto na viagem e a velocidade mdia durante a mesma. Desta forma, ser possvel obter a distncia percorrida com a frmula DISTNCIA <= TEMPO * VELOCIDADE. Tendo o valor da distncia, basta calcular a quantidade de litros de combustvel utilizada na viagem com a frmula: LITROS_USADOS <= DISTNCIA / 12. O programa dever apresentar os valores da velocidade mdia, tempo gasto na viagem, a distncia percorrida e a quantidade de litros usados na viagem. 3) Ler dois nmeros inteiros e efetuar as operaes de adio, subtrao, multiplicao e diviso de A por B apresentando ao final os quadro resultados obtidos. Estrutura de Controloe A tomada de Decises Executa uma seqncia de comandos de acordo com o resultado de um teste. A estrutura de deciso pode ser Simples ou Composta, baseada em um resultado lgico. Simples: SE <<CONDIO>> ENTO <<COMANDO1>> Composta 1: SE <<CONDIO>> ENTO <<COMANDO1>> SENO <<COMANDO1>>

Composta 2: SE <<CONDIO>> ENTO INICIO <<COMANDO1>>; <<COMANDON>> FIM; SENO INICIO <<COMANDO1>>; <<COMANDON>> FIM;

12

OPERADORES LGICOS Atuam sobre expresses retornando sempre valores lgicos como Falso ou Verdadeiro. RETORNA VERDADEIRO SE AMBAS AS PARTES FOREM VERDADEIRAS. BASTA QUE UMA PARTE SEJA VERDADEIRA PARA RETORNAR VERDADEIRO. NO INVERTE O ESTADO, DE VERDADEIRO PASSA PARA FALSO E VICEVERSA. TABELA VERDADE A V V F F EXPRESSES LGICAS As expresses compostas de relaes sempre retornam um valor lgico. Exemplos: 2+5>4 Verdadeiro 3<>3 Falso B V F V F AEB V F F F A OU B V V V F NO (A) F F V V E OU

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

Smbolo = <> > < >= <=

Significado Igual a Diferente de Maior que Menor que Maior ou igual a Menor ou igual a

Exemplo 01 Segue um Algoritmo que l 2 nmeros e escreve o maior. PROGRAMA ACHA_MAIOR; VAR A, B : INTEIRO; INICIO LER (A, B); SE A>B ENTO ESCREVER (A) SENO ESCREVER (B) FIM.

13

Exemplo 02 Segue um Algoritmo que l o nome e as 4 notas bimestrais de um aluno. Em seguida o Algoritmo calcula e escreve a mdia obtida pelo aluno escrevendo tambm se o aluno foi aprovado ou reprovado. Mdia para aprovao = 6 PROGRAMA MEDIA_FINAL; VAR NOTA1, NOTA2, NOTA3, NOTA4, MEDIA: REAL; NOME : CARACTERE [35] INICIO LER (NOME); LER (NOTA1, NOTA2, NOTA3, NOTA4); MEDIA := (NOTA1 + NOTA2 + NOTA3 + NOTA4) / 4; SE MEDIA>=6 ENTO ESCREVER (APROVADO) SENO ESCREVER (REPROVADO) ESCREVER (NOME, MEDIA) FIM. NINHOS DE SE Usados para tomadas de decises para mais de 2 opes. Forma Geral: SE <<CONDIO>> ENTO <<COMANDO1>> SENO SE <<CONDIO>> ENTO <<COMANDO1>> SENO <<COMANDO1>>

14

Exemplo 01 Segue um Algoritmo que l 3 nmeros e escreve o maior. PROGRAMA ACHA_MAIOR; VAR A, B, C : INTEIRO; INICIO LER (A, B, C); SE (A>B) E (A>C) ENTO ESCREVER (A) SENO SE (B>A) E (B>C) ENTO ESCREVER (B) SENO ESCREVER (C) FIM. ESTRUTURAS DE CONDIO A estrutura de condio eqivale a um ninho de SES. Forma Geral: FACA CASO CASO <<CONDIO1>> <<COMANDO1>>; CASO <<CONDION>> <<COMANDO1>>; OUTROS CASOS <<COMANDO1>>; FIM DE CASO Exemplo 01 Segue um Algoritmo que l 3 nmeros e escreve o maior. PROGRAMA ACHA_MAIOR; VAR A, B, C : INTEIRO; INICIO LER (A, B, C); FACA CASO CASO (A>B) E (A>C) ESCREVER (A); CASO (B>A) E (B>C) ESCREVER (B); OUTROS CASOS ESCREVER (C); FIM DE CASO FIM. Exerccios de Aprendizagem 1) Ler trs valores para os lados de um tringulo, considerando lados como: A, B e C. Verificar se os lados fornecidos formam realmente um tringulo, e ser for esta condio verdadeira, dever ser indicado qual tipo de tringulo for formado: issceles, escaleno ou equiltero. 2) Fazer a leitura de 3 valores para extrair uma equao do 2 grau. Dever ser verificado se existem razes reais, uma ou duas razes conforme necessrio.

15

3) Ler quatro valores referentes a quatro notas escolares e um aluno e imprimr uma mensagem dizendo que o alunos foi aprovado, se o valor da mdia escolar for maior ou igual a 5. Se o aluno no foi aprovado, indicar uma mensagem informando esta condio. Apresentar junto das mensagem o valor da mdia do aluno para qualquer condio. 4) Ler quatro valores referentes a quatro notas escolares de um aluno e imprimir uma mensagem dizendo que o aluno foi aprovado, se o valor da mdia escolar for maior ou igual a 7. Se o valor da mdia for menor que 7, solicitar a nota de exame, somar com o valor da mdia e obter nova mdia. Se a nova mdia for maior a 5, apresentar uma mensagem dizendo que o aluno foi aprovado em exame, se o aluno no foi aprovado, indicar uma mensagem informando esta condio. Apresentar com as mensagens o valor da mdia do aluno, para qualquer condio.

ESTRUTRA DE CONTROLE LAOS OU MALHAS DE REPETIO Existem ocasies onde se necessrio efetuar a repetio de um trecho de programa um determinado nmero de vezes. Neste caso, poder ser criado um looping que efetue o processamento de um determinado trecho, tantas vezes quantas forem necessrias. Os loopings tambm so chamados de: laos de repetio ou malhas de repetio. Na programao estrutura ocorre a existnciade comandos apropriados para efetuar a repetio de determinados trechos de programas o nmero de vezes que for necessrio. A principal vantagem deste recurso que o programa passa a Ter um tamanho menor, podendo sua amplitude de processamento ser aumentada em se alterar o tamanho do cdigo de programao. Desta forma, pode-se determinar repetioes com nmeros variados de vezes.

16

Repetio do Tipo: Teste lgico no Incio do Looping usada para repetir N vezes uma ou mais instrues. Tendo como vantagem o fato de no ser necessrio o conhecimento prvio do nmero de repeties. Forma Geral 1: ENQUANTO <<CONDIO>> FACA <<COMANDO1>>; Forma Geral 2: ENQUANTO <<CONDIO>> FACA NICIO <<COMANDO1>>; <<COMANDON>> FIM;
VALIDAO INICIAL

Exemplo Segue um algoritmo que calcule a soma dos salrios dos funcionrios de uma empresa. O programa termina quando o usurio digitar um salrio menor que 0. PROGRAMA SOMA_SALARIOS; VAR SOMA, SALARIO : REAL; INICIO SOMA:=O; SALARIO:=1; ENQUANTO SALARIO>=0 INICIO LER (SALARIO); SOMA:=SOMA+SALARIO FIM; ESCREVER (SOMA) FIM. A estrutura enquanto...faa...fim_enquanto tem o seu funcionamento controlado por deciso. Sendo assim poder executar um determinado conjunto de instrues enquanto a condio verificada for Verdadeira. No momento em que esta condio se torna falsa, o processamento da rotina desviado para fora do looping. Se a condio for Falsa logo de incio, as instrues contidas no looping so ignoradas.

Repetio do Tipo: Teste lgico no fim do Looping

TODAS AS VARIVEIS QUE ACUMULAM VALORES DEVEM RECEBER UM VALOR INICIAL.

Assim como a estrutura ENQUANTO usada para repetir N vezes uma ou mais instrues. Sua validao final fazendo com que a repetio seja executada pelo menos uma vez.

17

Forma Geral; REPITA <<COMANDO1>>; <<COMANDON>> ATE <<CONDIO>> Exemplo 01 Segue um algoritmo que calcule a soma dos salrios dos funcionrios de uma empresa. O programa termina quando o usurio digitar um salrio menor que 0. PROGRAMA SOMA_SALARIOS; VAR SOMA, SALARIO : REAL; INICIO SOMA:=O; REPITA LER (SALARIO); SOMA:=SOMA+SALARIO ATE SALARIO<0; ESCREVER (SOMA) FIM. Exemplo 02 Segue um algoritmo que escreve os 100 primeiros nmeros pares. PROGRAMA PARES_2; VAR I, PAR, CONTADOR : INTEIRO; INICIO CONTADOR := 0; PAR := 0; REPITA ESCREVER (PAR); PAR := PAR+2; CONTADOR := CONTADOR+1; ATE CONTADOR=100 FIM. A estrutura repita..at_que tem o seu funcionamento controlado por deciso. Porm, ir efetuar a execuo de um conjunto de instrues pelo menos uma vez antes de verificar a validade da condio estabelecida. Diferente da estrutura enquanto que executa somente um conjunto de instrues, enquanto a condio verdadeira. Desta forma repita tem seu funcionamento em sentido contrrio a enquanto, pois sempre ir processar um conjunto de instrues, no mnimo uma vez at que a condio se torne Verdadeira. Pra a estrutura repita um conjunto de instrues executado enquanto a condio se mantm Falsa e at que ela seja Verdadeira.

18

19

REPETIO DO TIPO: VARIVEL DE CONTROLE Anteriormente, formas vistas duas formas de se elaborar looping. Uma usando o conceito enquanto e a outra usando o conceito repita. Foi visto tambm como se estabelecer rotinas que efetuarem a execuo de um looping um determinado nmero de vezes atravs da utilizao de um contador (atravs de uma varivel de controle). Porm, existe uma possibilidade de faciliar o uso de contadores finitos, sem fazer uso das estruturas anteriores, deixando-as para a utilizao de loopings onde no se conhece de antemo o nmero de vezes que uma determinada sequncia de instrues dever ser executada. Os looping que possuem um nmero finito de execues podero ser processados atravs de estrutura de laos contados para, sendo conseguida com a utilizao do conjunto de instrues para..de..at..passo.faa..fim_para. A estrutura para..de..at..passo.faa..fim_para tem seu funcionamento controlado por uma varivel denominada contador. Sendo assim, poder executar um determinado conjunto de instrues um determinado nmero de vezes. Sua sintaxe a seguinte:
Para <varivel> de <inicio> at <fim> passp<incremento> faa <instrues> fim_para

Exemplo Pedir a leitura de um valor para a varivel X, multiplicar este valor por 3 implicando-o varivel de resposta R e apresentar o valor obtido, repetindo esta segncia por cinco vezes. Programa Looping_Para Var X, R ,CONT: Inteiro Inicio Para CONT de 1 at 5 passo 1 faa Leia (x) R <= X * R Escreva(R) Fim_para Fim. Ser executado o conjunto de instrues entre a instruo para e a instruo fim_para, sendo a varivel CONT (varivel de controlo) inicializada com valor 1 e incrementada de mais 1 atravs da instruo passo at o valor 5. Este tipo de estrutura de repetio poder ser utilizado todas as vezes que se tiver a necessidade de repetir trechos finitos, onde se conhece o valor inicial e o valor final.

20

Exerccios de Aprendizagem (Desenvolver Cada Exerccio utilizando as trs estruturas de repetio apresentadas) 1) Apresentar os quadrados do nmeros inteiros de 15 a 200. 2) Apresentar os resultados de uma tabuada de um nmero qualquer. Esta dever ser impressa no seguinte formato: Considerando como exemplo o fornecimento do nmero 2 2 2 2 2 2 X1=2 X2=4 X3=6 X4=8 X 5 = 10 (...) 2 X 10 = 20 3) Apresentar o total da soma do cem primeiros nmeros inteiros ( 1 + 2+ 3 + 4...+ 99 + 100 ). 4) Elaborar um programa que apresente no final o somatrio dos valores pares existentes na faixa de 1 at 500. 5) Apresentar todos os valores numricos inteiros mpares situados nafaixa de 0 a 20. Para verificar se o nmero mpar, efetuar dentro da malha a verificao lgica desta condio com a instruo se, perguntando se o nmero mpar, sendo mostre-o, no sendo, passe para o prximo passo. 6) Apresentar todos os nmeros divisveis por 4 que sejam menores que 200. Para verificar se o nmero divisvel por 4, efetuar dentro da malha de verificao lgica desta condio com a instruo se, perguntando se o nmero divisvel, sendo, mostre-o, no sendo passe para o prximo passo. A varivel que controlar o contador dever ser iniciada com valor 1. 7) Apresentar as potncias de 3 variando de 0 a 15. Deve ser considerado que qualquer nmero elevado a zero 1, e elevado a 1 ele prprio. 8) Elaborar um programa que apresente o valor de uma potncia de uma base qualquer elevada a um expoente qualquer, ou seja, de N M . 9) Escreva um programa que apresente a srie de Fibobnacci ato dcimo quinto termo. A srie de Fibonacci formada pela seqncia: 1,1,2,3,5,8,13,21,34,... etc. Esta srie se caracteriza pela soma de um termo posterior com o seu anterior subseqente. ESTRUTURA BSICA DE DADOS TABELAS EM MEMRIAS Estrutura de Dados Homogneas Durante os pontos estudados anteriormente, percebemos que o poder de programao se tornou maior. Porm, tendo domnio das tcnicas anteriores, ainda correr-se o risco de no conseguir resolver alguns tipos de problemas, pois foram trabalhadas at aqui apenas variveis simples, variveis que somente armazenam um valor por vez. Neste captulo, ser apresentado uma tcnica de programao que permitir trabalhar com o agrupamento de vrias informaes dentro de uma mesma varivel. Vale salientar que este agrupamento ocorrer obedecendo sempre ao mesmo tipo de dado, e por esta razo chamado de estruturas de dados homogneas. Agrupamentos

21

de tipo de dados diferentes seto estudados mais adiante quando forme abordadas as estruturas de dados heterogneas. A utilizao deste tipo de estrutura de dados recebe diversos nomes, com: variveis indexadas, variveis compostas, variveis subscritas, arranjos, vetores, matrizes, tabelas em memria ou arrays (do ingls). So vrios os nomes encontrados na literatura voltada para o estudo de tcnicas de programao que envolvem a utilizao das estruturas homogneas de dados. Por ns, sero definidas como matrizes. As matrizes (tabelas em memria) so tipo de dados que podem ser constitudos medida que se fazem necessrios , pois no sempre que os tipos bsicos (real, inteiro, caractere ou lgico) e /ou variveis simples so suficiente para representar a estrutura de dados utilizado em um programa. Matrizes de uma Dimenso ou Vetores Este tipo de estrutura em particular tambm denominado por alguns profissionais como matrizes unidimensionais. Sua utilizao mais comum est vinculada criao de tabelas. Caracteriza-se por ser definida uma nica varivel dimensionada com um determinado tamanho. A dimenso de uma matriz constituida por constantes inteiras e positivas. Os nomes dados s matrizes seguem as mesmas regras de nomes utilizados para indicar as variveis simples. Operaes Bsiccas com Matrizes do Tipo Vetor Uma matriz de uma dimenso ou vetor ser, neste trabalho, representada por seu nome e seu tamanho (dimenso) entre colchetes, desta forma seria uma matriz MD [1..n], onde MD o seu nome e possuindo uum tamanho de 1 a n. Isto significa que podero ser armazenados em MD at um valor definido pelo programador. Perceba que na utilizao de variveis simples existe uma regra: uma varivel pode conter apenas um valor por vez. No caso das matrizes, esta podero armazenar mais um valor por vez. No caso das matrizes, esta podero armazenar mais de um valor por vez, pos so dimensionadas, exatamente para este fim. Desta forma poder-se manipular uma quantidade maior de informao com pouco trabalho de processamento. Deve-se apenas considerar que com relao manipulao dos elementos de uma matriz, eles ocorrero de forma individualizada, pois no possvel efetuar a manipulao de todos os elementos do conjunto ao mesmo tempo. Atribuio de uma Matriz Anteriormente, foram utilizadas vrias instrues em portugus estruturado para poder se definir e montar um programa. No caso da utilizao de matrizes, ser definida a instruo conjunto que indicar em portugus estruturado a utilizao de uma matriz, tendo como sintaxe: Varivel : conjunto [<dimenso>] de <tipo de dado>. Onde <dimenso> ser a indicao dos valores inicial e final do tamanho do vetor e <tipo de dado> se o vetor em questo ir utilizar valores reais, inteiros, lgicos ou caracteres. Leitura dos Dados de uma Matriz A leitura de uma matriz processada passo a passo, um elemento por vez. A instruo de leitura leia seuida da varivel mais o ndice. Abaixo, apresentado a codificao em portuguol da leitura de 8 notas de 8 alunos, clculo da mdia e a apresentao da mesma.

22

Programa Media_Turma Var Md : conjunto [1..8] de real Soma, media : real I : inteiro Inicio Soma <= 0 Para I de 1 ate 8 faa Leia (Md[I]) Soma <= Soma + MD[I] Fim_Para Mdia <= Soma / 8 Escreva (Media) Fim. Escrita dos Dados de uma Matriz O processo de escrita de uma matriz bastante parecido com o processo de leitura de seus elementos. Para esta ocorrncia dever ser utilizada a instruo escreva seguida da indicao da varivel e seu ndice. Supondo que aps a leitura das 8 notas, houvesse a necessidade de apresent-las antes da apresentao do valor da mdia. Abaixo exibido a codificao da escritados 8 alunos antes de ser apresentado o clculo da mdia. Programa Media_Turma Var Md : conjunto [1..8] de real Soma, media : real I : inteiro Inicio Soma <= 0 Para I de 1 ate 8 faa Leia (Md[I]) Soma <= Soma + MD[I] Fim_Para Para I de 1 ate 8 faa Escreva (Md[I]) Fim_Para Mdia <= Soma / 8 Escreva (Media) Fim.

Exerccios de Aprendizagem 1) Desenvolver um programa que efetue a leitura de 10 elementos de uma matriz A do tipo vetor. Construir uma matriz B de mesmo tipo, observando a seguinte lei de formao: Se o valor do ndice for par, o valor dever ser multiplicado por 5, sendo mpar dever ser somado por 5. Ao final mostrar os contedos das duas matrizes. 2) Desenvolver um programa que efetue a leitura de 5 elementos de uma matriz A do tipo vetor. No final, apresente o total da soma de todos os elementos que sejam mpares.

23

3) Ler duas matrizes A e B do tipo vetor com 20 elementos. Construir uma matriz C, onde cada elemento de C a subtrao do elemento correspondente de A com B. 4) Ler 15 elementos de uma matriz A do tipo vetor. Construir uma matriz B de mesmo tipo. Observando a seguinte lei de formao: Todo elemento de B dever ser o quadrado do elemento de A correspondente. 5) Ler uma matriz A do tipo vetor com 15 elementos. Construir uma matriz B de mesmo tipo, sendo que cada elemento da matriz B seja o fatorial do elemento correspondente da matriz 6) Ler duas matrizes A e B do tipo vetor com 15 elementos cada. Construir uma matriz C, sendo esta a juno das duas outras matrizes. Desta forma, C dever Ter a capacidade de armazenar 50 elementos. 7) Ler 20 elementos de uma matriz A tipo vetor e construir uma matriz B de mesma dimenso com os mesmos elementos de A, sendo que estes devero estar invertidos. Ou seja, o primeiro elemento de A passa a ser o ltimo elemento de B. O segundo elemento de A passa a ser o penltimo de B e assim por diante.

24

25

MATRIZES COM MAIS DE UMA DIMENSO Anteriormente, voc teve contato com o uso de uma nica varivel indexada com apenas uma dimenso (uma coluna e vrias linhas), quanto foi utilizado o exemplo para efetuar o clculo da mdia geral das mdias dos oito alunos. A partir deste ponto, sero apresentadas as tabelas com mais colunas, sendo assim teremos variveis no sentido horizontal e vertical. Com o conhecimento adquirido at este ponto, voc teria condies suficientes para elaborar um programa que efetuasse a leitura das notas dos alunos, o clculo da mdia de cada aluno e no final apresentar a mdia do grupo, utilizando-se de matrizes unidemensionais. Porm, h de se condiderar que o trabalho seria grande, uma vez que se necessitaria manter um controle de cada ndice em cada matriz para um mesmo aluno. Para facilitar o trabalho com estruturas deste porte que sero utilizadas matrizes com mais dimenses. A mais comum a matriz de duas dimenses por se relacionar diretamente com a utilizao de tabelas. Matrizes com mais de duas dimenses so utilizadas com menos freqncia, mas podero ocorrer com momentos em que se necessite trabalhar com um nmero maior de dimenses, estas sero fceis de serem utilizadas se voc dominar bem a utilizao de uma matrz com duas dimenses. Um importante aspecto a ser considerado que na manipulao de uma matriz utilizada uma nica instruo de looping(enquanto, para ou repita). No caso de matrizes com mais dimenses, dever ser utilizado o nmero de loopings relativos ao tamanho de sua dimenso. Desta forma, uma matriz de duas dimenses dever ser controlada com dois loopings, sendo que de trs dimenses dever ser controlada por trs loopings e assim por diante. Em matrizes de mais uma dimenso os seus elementos sero tambm manipulados de forma individualizada, sendo a referncia feita sempre atravs de dois ndices: o primeiro para indicar a linha e o segundo para indicar a coluna. Desta forma, TABELA[2,3], indica que est sendo feita uma referncia ao elemento armazenadona linha 3 coluna 3. Pode-se considerar que uma matriz com mais de uma dimenso tambm um vetor, sendo vlido para este tipo de matriz tudo o que j foi utilizado anteriormente para as matrizes de uma dimenso. Operaes Bsicas com Matrizes de Duas Dimenses Uma matriz de das dimenses est sempre fazendo meno a linhas e colunas e ser representada por seu nome e seu tamanho (dimenso) entre colchetes, desta forma seria uma matriz de duas dimensesTABELA[1..8, 1..5], onde TABELA o seu nome, possuindo um tamanho de 8 linhas (de 1 a 8) e 5 colunas (de 1 a 5), ou seja, uma matriz de 8 por 5 (8X5). Isto significa que podero ser armazenados em TABELA at 40 elementos. A figura 8.1 apresenta a matriz TABELA com a indicao dos endereos (posies) que podero ser utilizadas para armazenamento de seus elementos. Atribuio de uma Matriz Uma matriz de duas dimenses ser atribuda pelas instruo conjunto j utilizada para definir o uso de uma matriz de uma dimenso, sendo bastante parecidos em sua referncia. A sintaze ser: VARIAVEL : conjunto [<dimenso1: dimenso2>] de <tipo de dado>, onde <dimenso1> e <dimenso2> sero indica do tamanho da tabela e <tipo de dado> o tipo da matriz, que poder ser formada por valores reais, inteiros, lgicos ou caracteres.

26

Leitura dos Dados de uma Matriz A leitura de uma matriz de duas dimenses assim como as matrizes de uma dimenso processada passo a passo, um elemento por vez, sendo utilizada a instruo leia seguida da vairvel mais os seus ndices. A seguir apresentado a codificao em portugus estruturado da leitura das 4 notas bimestrais de 8 alunos, sem considerar o clculo da mdia. Programa Ler_Elementos Var Notas : conjunto [1..8, 1..4] de real I, J : inteiro Inicio Para I de 1 at 8 faa Para J de 1 at 4 faa Leia(notas[I,J]) Fim_Para Fim_Para Fim. Escrita dos Dados de uma Matriz O precesso de escrita ser bastante parecido com o processo de leitura de seus elementos. Supondo que aps a leitura das notas dos 8 alunos, houvesse a necessidade de efetuar a apresentao das notas. Abaixo apresentado a codificao em portugus estruturado da escrita das 4 notas dos 8 alunos.

Programa Ler_Elementos Var Notas : conjunto [1..8, 1..4] de real I, J : inteiro Inicio Para I de 1 at 8 faa Para J de 1 at 4 faa Escreva(notas[I,J]) Fim_Para Fim_Para Fim. Exerccios de Aprendizagem 1) Ler duas matrizes A e B, cada uma de duas dimenses com 5 linhas e 3 colunas. Construir uma matriz C de mesma dimenso, onde C formada pela soma dos elementos da matriz A com os elementos da matriz B.

27

ESTRUTURA DE DADOS HETEROGNEAS No tpicos anteriores, voc teve um contato com tcnicas de programao que envolveram o uso de estruturas de dados homogneas, atravs da utilizao de matrizes de uma e duas dimenses. Observou que somente foi possvel trabalhar com um tipo de dado por matriz. No momento em que se precisou trabalhar com dois tipos de dados diferentes, foi necessria a utilizao tambm de duas matrizes, uma de cada tipo. Estrutura de um Registro Agora voc ter contato com a utilizao da principal estrutura de dados, o registro, a qual consiste em trabalhar vrios dados de tipos diferentes (os campos) em uma mesma estrutura. Por esta razo, este tipo de dado considerado heterogneo. Atribuio de Registros Os tipos registro devem ser declarados ou atribudos antes da variveis, pois poder ocorrer a necessidade de se declarar uma varivel com o tipo registro anteriormente atribudo. Para se declarar um tipo registro em portugus estruturado dever ser utilizada a instruo tipo em conjunto com a instruo registro...fim_registro, conforme a sintaxe indicada abaixo. Tipo <identificador> = registro <lista dos campos e seus tipos> fim_registro var <varivel> : <identificador> Onde indentificador o nome do tipo registro em caracteres maisculos, em itlico como as variveis, e lista dos campos e seus tipos a relao de variveis que sero usadas como campos, bem como o seu tipo de estrutura de dados, podendo ser: real, inteiro, lgico ou caractere. Aps a instruo var, dever ser indicada a varivel tipo registro e a declarao do seu tipo de acordo com um identificador definido anteriormente. Perceba que a instruo tipo dever ser utilizada antes da instruo var, pois ao definir um tipo de varivel, pode-se fazer uso deste tipo definido. Tomando como exemplo a proposta de se criar um registro denominado ALUNO, cujos campos so NOME, NOTA1, NOTA2, NOTA3 e NOTA4, este seria assim declarado:

28

tipo CAD_ALUNO = registro NOME : caractere NOTA1 : real NOTA2 : real NOTA3 : real NOTA4 : real fim_registro var ALUNO : CAD_ALUNO Observe que especificado um registro denominado CAD_ALUNO, o qual um conjunto de dados heterogneos (um campo tipo caractere e quatro do tipo real). Desta forma possvel guardar em uma mesma estrutura vrios tipos diferentes de dados. A ttulo de comparao, pode-se dizer que um tipo registro tambm um vetor (matriz de uma dimenso). Pois tem-se a varivel ALUNO do tipo cad_aluno como um vetor com os ndices NOME, NOTA1, NOTA2, NOTA3 e NOTA4. Leitura de Registros A leitura de um registro efetuada com a instruo leia seguida do nome da varivel registro e seu campo correspondente separado por um caractere . ponto. Programa Leitura tipo CAD_ALUNO = registro NOME : caractere NOTA1 : real NOTA2 : real NOTA3 : real NOTA4 : real fim_registro var ALUNO : CAD_ALUNO Incio Leia Leia Leia Leia Leia Fim (Aluno.Nome) (Aluno.Nota1) (Aluno.Nota2) (Aluno.Nota3) (Aluno.Nota4)

29

Escrita de Registros O processo de escrita de um registro feito com a instruo escreva de forma semelhante ao processo de leitura. Programa Escrita tipo CAD_ALUNO = registro NOME : caractere NOTA1 : real NOTA2 : real NOTA3 : real NOTA4 : real fim_registro var ALUNO : CAD_ALUNO Incio Escreva Escreva Escreva Escreva Escreva Fim (Aluno.Nome) (Aluno.Nota1) (Aluno.Nota2) (Aluno.Nota3) (Aluno.Nota4)

Estrutura de um Registro de Conjuntos No tpico anterior, foi apresentado o conceito de se trabalhar com um registro. No ponto de aprendizado em que estamos, podemos at jurar que voc esteja perguntando: Ser que no possvel definir um vetor ou mesmo uma matriz dentro de um registro, para no ser necessrio utilizar somente os tipos primitivos de dados? Isto realmente possvel. Considere ainda o exemplo do registro ALUNO, onde temos o campo NOME tipo caractere e mais quatro campos tipo real para o armazenamento de duas notas sendo, NOTA1, NOTA2, NOTA3 e NOTA4. Veja que se pode definir um vetor chamado NOTA com quatro Indices, uma para cada nota. Atribuio de Registros de Conjuntos Tomando como exemplo a proposta de se criar um registro denominado ALUNO, cujas notas sero informadas em um vetor, este seria bastante declarado: tipo BIMESTRE = conjuno [1..4] de real CAD_ALUNO = registro NOME : caractere NOTA : BIMESTRE fim_registro Observe que ao ser especificado o registro CAD_ALUNO, existe nele um campo chamado NOTA do tipo bimestre, onde bimestre a especificao de um tipo de

30

conjunto matricial de um nica dimenso com capacidade para quatro elementos. Veja que o tipo de bimestre foi anteriormente definido, pois se caracteriza por um tipo criado, assim como o tipo cad_aluno atribudo varivel de registro ALUNO. Leitura de Registro de Conjuntos A leitura de um registro de conjunto efetuada com a instruo leia geralmente dentro de um lao de repitao. Assim sendo, observe o cdigo abaixo: Programa Leitura tipo BIMESTRE = conjunto [1..4] de real CAD_ALUNO = registro NOME : caractere NOTA : bimestre fim_registro var ALUNO : CAD_ALUNO I : inteiro Inicio Leia (ALUNO.NOME) Para de I ate 4 faa Leia (ALUNO.NOTA[I]) Fim_para Fim. Estrutura de um conjunto de Registros Com as tcnicas de programao anteriormente apresentadas, passou-se a Ter uma mobilidade bastante grande , podendo-se trabalhar de uma forma mais adequada com diversos problemas, principalmente os que envolvem a utilizao de dados heterogneos, facilitando a construo de programas mais eficientes. Porm, os programas apresentados at aqui com a utilizao de registros, s fizeram meno leitura e escrita de um nico registro. Neste momento, voc ter contato com o conjunto de registros que permite a construo de programas, onde possvel se fazer a entrada, processamento e sada de diversos registros. Atribuio de Conjunto de Registros Para se declarar un conjunto de registros necessrio em primeiro lugar, possuir a definio de um registro, ou seja necessrio Ter um formato de um nico registro para ento definir o nmero de registros que ser utilizado pelo programa. Para exemplificar o que est sendo exposto, considere que voc dever fazer um programa que leia o nome e as quatro notas escolares de 8 alunos. Isto j e familiar. Veja a seguir a codificao do conjunto de registros para os oito alunos:

31

Tipo BIMESTRE = conjunto [1..4] de real CAD_ALUNO = registro NOME : caractere NOTA: BIMESTRE Fim_registro Var ALUNO: conjunto [1..8] de CAD_ALUNO

Observe que aps a instruo var, indicada a varivel de registros ALUNO, sendo esta um conjunto de 8 registros do tipo Cad_Aluno, que por sua vez Bimestre um conjunto de quatro valores reais. Leitura de Conjunto de Registros A leitura de forma semelhante s anteriores. No entanto,m sero utilizadas dois laos, pois alm de controlar a entrada das quatro notas de cada aluno, tem-se que controlar a entrada de 8 alunos. Esta estrutura bastante similar a uma matriz de duas dimenses. Assim sendo, observe o cdigo em portugus estruturado: Programa LEITURA Tipo BIMESTRE = conjunto [1..4] de real CAD_ALUNO = registro NOME : caractere NOTA: BIMESTRE Fim_registro Var ALUNO: I, J : incio Para J de 1 at 8 faa Leia (ALUNO[J].NOME) Para I de 1 at 4 faa Leia (ALUNO[J].NOME[I]) Fim_para Fim_para Fim Veja que o looping da varivel J controla o nmero de alunos da turma, no caso 8, e o looping da varivel I controla o nmero de notas, at 4 por aluno. Para cada movimentao de mais uma varivel J existem quatro movimentaes na varivel I.

conjunto [1..8] de CAD_ALUNO inteiro

32

Escrita de Conjunto de Registros O processo de escrita de um conjunto de registros similar aos modos anteriores, j estudados. Assim sendo, veja o cdigo: Programa LEITURA Tipo BIMESTRE = conjunto [1..4] de real CAD_ALUNO = registro NOME : caractere NOTA: BIMESTRE Fim_registro Var ALUNO: conjunto [1..8] de CAD_ALUNO I, J : inteiro incio Para J de 1 at 8 faa Escreva (ALUNO[J].NOME) Para I de 1 at 4 faa Escreva (ALUNO[J].NOME[I]) Fim_para Fim_para Fim

PROGRAMAO MODULAR Ser estudado a partir deste ponto, a aplicao de subrotinas em algoritmos, tambm conhecidas pela denominao mdulos ou subalgoritmos. Na realidade, no importa como so chamadas, o que importa a forma como funcionam e como devem ser aplicadas em um programa, e isto que voc aprender. Neste captulo, ser introduzido o conceito da criao estruturada de programas, pois para escrever um programa de computador necessita-se de estudo (levamtamento de todas as necessidades e detalhes do que dever ser feito) e metodologia (regras bsicas que devero ser seguidas). Sem a aplicao de mtodos no ser possvel resolver grandes problemas, quanto muito, pequenos problemas. As Sub-Rotinas No geral, problemas complexos exigem algoritmos complexos. Mas sempre possvel dividir um problema grande em problemas menores. Desta forma, cada parte menor tem um algoritmo mais simples, e estre trecho menor que chamado de subrotina. Uma sub-rotina na verdade, um programa, e sendo um programa poder efetuar diversas operaes computacionais (entrada, processamento e sada) e dever ser tratada como foram os programas projetados at este momento. As subrotinas so utilizadas na diviso de algoritmos complexos, permitindo assim possuir a modularizao de um determinado problema, considerado grande e de difcil soluo. Ao se trabalhar com esta tcnica, pode-se deparar com a necessidade de se dividir uma sub-rotina em outras tantas quantas forem necessrias, buscando uma soluo

33

mais simples de uma parte do problema maior. O processo de dividir sub-rotinas em outras denominado Mtodo de Refinamento Sucessivo. Procedimentos Um procedimento um bloco de programa, contendo incio e fim e ser identificado por um nome, atravs do qual ser referenciado em qualquer parte do programa principal ou do programa chamador da rotina. Quando uma sub-rotina chamada por um programa, ela executada e ao seu trmino o controle de processamento retorna automaticamente para a primeira linha de instruo aps a linha que efetuou a chamada da sub-rotina. Procedimento <nome do procedimento> var <variveis> incio <instrues> fim A melhor maneira de se entender como trabalhar com sub-rotinas fazer a sua aplicao em um programa mais complexo. Para tanto, imagne o seguinte problema: Exerccio de Aprendizagem Cria um programa calculadora que apresente um menu de selees no programa principal. Este menu dever dar ao usurio a possibilidade de escolher uma entre quadra operaes aritmticas. Escolhida a opo desejada, dever ser solicitada a entrada de dois nmeros, e processada a operao dever ser exibido o resultado. Note que este programa dever ser um conjunto de 5 rotinas, uma principal e 4 secundrias. A rotina principal efetuar o controle sobre as 4 rotinas secundrias, que por sua vez pediro a leitura de dois valores, faro a operao e apresentaro o resultado obtido. Observe agora a codificao:

34

Programa calculadora Var Opcao : caractere {sub-rotinas de clculos} procedimento ROTSOMA var r, a, b : real incio Escreva (Rotina de Soma) Escreva (Entre um valor para A: ) Leia(A) Escreva (Entre um valor para B:) Leia(B) R <= A + B Escreva (A soma de A com B = , R) Fim procedimento ROTSSUBTRACAO var r, a, b : real incio Escreva (Rotina de Subtrao) Escreva (Entre um valor para A: ) Leia(A) Escreva (Entre um valor para B:) Leia(B) R <= A - B Escreva (A subtrao de A com B = , R) Fim procedimento ROTMULTIPLICACAO var r, a, b : real incio Escreva (Rotina de Multiplicao) Escreva (Entre um valor para A: ) Leia(A) Escreva (Entre um valor para B:) Leia(B) R <= A * B Escreva (A multiplicao de A com B = , R) Fim procedimento ROTDIVISAO var r, a, b : real incio Escreva (Rotina de Diviso) Escreva (Entre um valor para A: ) Leia(A) Escreva (Entre um valor para B:) Leia(B) R <= A / B

35

Escreva (A Diviso de A com B = , R) Fim {Programa Principal} inicio opcao <= 0 enquanto (opcao <>5 ) faa escreva (1 Adio) escreva (2 Subtrao) escreva (3 Multiplicao) escreva (4 Diviso) escreva (5 Fim do Programa) escreva (Escolha uma opo) leia (opcao) se opcao = 1 ento rotsoma fim_se se opcao = 2 ento rotsubtracao fim_se se opcao = 3 ento rotmultiplicacao fim_se se opcao = 4 ento rotdivisao fim_se fim_enquanto fim. Obs: Observe que em cada sub-rotina possuia suas prprias variveis, estas porm s podem ser acessadas dentro de cada procedimento, neste caso so chamadas de variveis locais. No caso da varivel opcao uma varivel global, pode ser acessada em qualquer local do programa, tanto nos procedimentos como no programa principal. Funes Uma funo tambm um bloco de programa como so os procedimentos, contendo incio e fim e sendo identificado por um nome, atravs do qual tambm ser referenciada em qualquer parte do programa principal. Uma sub-rotina de funo na verdade muito parecida com uma sub-rotina de procedimento. A sintaxe em portugus estruturado ser tambm idntica ao estudo anterior. Observe a seguir, o cdigo em portugus estruturado de uma funo. Portugus Estruturado Funo <nome da funo> (parmetros) : <tipo da funo> Var <variveis> incio <instrues> fim.

36

A sua principal diferena est no fato de uma funo retornar um determinado valor, que retornado no prprio nome da funo. Quando se diz valor, devem ser levados em considerao os valores numricos, lgicos ou literais (caracteres). Voc deve ter observado a presena de um item na sintaxe da funo, que so os parmetros, que tanto podem ser referenciados nos procedimentos, mas vejamos sua utilidade. s parmetros tm por finalidade servir como um ponto de comunicao bidirecional entre uma sub-rotina e o programa principal ou com uma outra sub-rotina hierarquicamente de nvel mais alto. Desta forma, possvel passar valores de uma sub-rotina ou rotina chamadora outra sub-rotina e vice-versa, 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 sub-rotina, os quais sero tratados exatamente da mesma forma que so tratadas as variveis globais ou locais. Sero considerados parmetros Reais quando estes substiturem os parmetros formais, quando a utilizao da sub-rotina por um programa principal ou por uma rotina chamadora.

37

Utilizao de Funes Criaremos uma funo que calcule a raiz cbica de um determinado nmero inserido pelo usurio. Observe o Programa: Programa Raiz_Cubica Var I : Inteiro Funo Cubo(N) : Real Inicio Cubo <= N * N * N Fim Inicio Leia (I) Escreva(Cubo(I)) Fim. Observe que neste caso o parmetro formal foi a varivel N , enquanto o parmetro real foi a varivel I .

38

You might also like