Sei sulla pagina 1di 39

UNIVERSIDADE DO VALE DO ITAJA

UNIVALI Centro de Educao Superior VII - So Jos Curso de Cincia da Computao

ALGORITMOS
(1 perodo)
Profa. Joyce Martins
o

So Jos / SC, janeiro de 1998.

ALGORITMOS I

SUMRIO
1 CONCEITOS PRELIMINARES.........................................................................................................................1 1.1 NOES DE LGICA.......................................................................................................................................... 1 1.2 CONCEITO DE ALGORITMO................................................................................................................................ 2 1.3 NOES DE SISTEMAS DE COMPUTAO ............................................................................................................ 3 1.3.1 Hardware: componentes bsicos.............................................................................................................. 3 1.3.2 Software .................................................................................................................................................. 5 1.4 CONCEITO DE PROGRAMA................................................................................................................................. 5 2 REPRESENTAO DE DADOS .......................................................................................................................8 2.1 CONSTANTES................................................................................................................................................... 8 2.2 VARIVEIS ...................................................................................................................................................... 8 2.3 OPERADORES ARITMTICOS, LGICOS E RELACIONAIS........................................................................................ 9 2.3.1 Operadores aritmticos ........................................................................................................................... 9 2.3.2 Operadores relacionais ......................................................................................................................... 10 2.3.3 Operadores lgicos ............................................................................................................................... 10 2.3.4 Hierarquia dos operadores.................................................................................................................... 11 3 ALGORITMO: REPRESENTAO E ESTRUTURAS DE ELABORAO .............................................. 12 3.1 ETAPAS NA CONSTRUO DE UM ALGORITMO .................................................................................................. 12 3.2 FORMA GERAL DE UM ALGORITMO .................................................................................................................. 12 3.3 COMANDOS SIMPLES ...................................................................................................................................... 13 3.3.1 Comando de atribuio ......................................................................................................................... 13 3.3.2 Comandos de entrada e sada de dados ................................................................................................. 14 3.4 COMANDOS ESTRUTURADOS ........................................................................................................................... 15 3.4.1 Comandos de seleo ............................................................................................................................. 15 3.4.1.1 Comando de seleo: SE-ENTO-SENO...................................................................................... 16 3.4.1.2 Comando de seleo: ESCOLHA..................................................................................................... 17 3.4.2 Comandos de repetio ......................................................................................................................... 18 3.4.2.1 Comando de repetio: ENQUANTO-FAA................................................................................... 19 3.4.2.2 Comando de repetio: REPITA-AT ............................................................................................. 20 3.4.2.3 Comando de repetio: PARA-FAA.............................................................................................. 21 3.4.2.4 Comparao entre os comandos de repetio.................................................................................... 22 4 MODULARIZAO DE ALGORITMOS....................................................................................................... 23 4.1 4.2 4.3 4.4 FUNES ....................................................................................................................................................... 23 PROCEDIMENTOS ........................................................................................................................................... 24 VARIVEIS GLOBAIS E LOCAIS ......................................................................................................................... 25 PARMETROS ................................................................................................................................................ 25

5 VARIVEIS INDEXADAS .............................................................................................................................. 27 5.1 VARIVEL INDEXADA: VETOR ................................................................................................................ 27 5.1.1 OPERAES: atribuio, leitura e escrita ........................................................................................... 28 5.1.2 APLICAES: pesquisa e classificao de elementos........................................................................... 30 5.1.3 APLICAES: manipulao um STRING como um VETOR de caracteres ............................................ 31 5.2 VARIVEL INDEXADA: MATRIZ ............................................................................................................... 33 5.2.1 OPERAES: atribuio, leitura e escrita ........................................................................................... 34 BIBLIOGRAFIA ...................................................................................................................................................................37

ii

ALGORITMOS I

1
1.1

CONCEITOS PRELIMINARES
NOES DE LGICA
"LGICA: coerncia de raciocnio, de idia; seqncia coerente, regular e necessria de acontecimentos, de coisas" (AURLIO). "LGICA: trata da correo do pensamento; ensina a colocar ordem no pensamento" (FORBELLONE, 1993).

Segundo FORBELLONE (1993), o pensamento e suas representaes (palavra escrita, palavra falada) sempre vem acompanhado da lgica ou da ilgica. Assim, a lgica no somente importante na teoria como tambm o na prtica, visto que quando algum deseja expressar seus pensamentos e se fazer entender atravs da escrita ou atravs da fala, necessariamente precisa colocar ordem no pensamento, ou seja, usar a lgica. Podemos tambm citar, como exemplo, concursos pblicos que incluem, entre as provas de conhecimentos gerais, a disciplina de raciocnio lgico matemtico. No edital do concurso pblico para auditor fiscal do tesouro nacional (1998) encontramos: RACIONCNIO LGICO MATEMTICO: esta prova objetiva medir a habilidade do candidato em entender a estrutura lgica de relaes arbitrrias entre pessoas, lugares, coisas, ou eventos fictcios; deduzir novas informaes das relaes fornecidas, e avaliar as condies usadas para estabelecer a estrutura daquelas relaes. EXEMPLO 1: a gaveta est fechada. a bala est na gaveta. preciso primeiro abrir a gaveta, para depois pegar a bala. EXEMPLO 2: Joo mais velho que Pedro. Pedro mais velho que Jos. Logo, Joo mais velho que Jos. EXEMPLO 3: seleo de 4 litros de gua: tem-se 3 potes A, B e C com capacidades de 8 litros, 5 litros e 3 litros, respectivamente. O pote A est cheio de gua e os outros dois esto vazios. Como selecionar 4 litros de gua? Os potes no possuem graduao. A B C

8 litros cheio

5 litros vazio

3 litros vazio

SOLUO 1: BA CB joga B fora BC BA CB AC A 8 3 3 3 3 1 1 4 B 0 5 2 0 3 5 2 2 C 0 0 3 3 0 0 3 0

SOLUO 2: CA BC CA BC joga C fora CB AB A 8 5 5 2 2 2 2 4 B 0 0 3 3 5 5 2 0 C 0 3 0 3 1 0 3 3 1

ALGORITMOS I

"A LGICA envolve as declaraes, pressupostos e operaes que definem o que um determinado programa far. A definio da lgica dos programas , quase sempre, o primeiro passo na resoluo de um problema" (XIMENES, 1993) .

1.2

CONCEITO DE ALGORITMO

A construo de programas de computadores, em alguns casos, pode ser uma tarefa difcil, no porque o programador seja incompetente, mas devido complexidade dos problemas. Portanto, importante separar a tarefa de construo de programas em duas fases (FIGURA 1): a fase de resoluo do problema e a fase de implementao.

PROBLEMA anlise

ALGORITMO implementao

PROGRAMA

passo difcil FIGURA 1: fases da tarefa de construo de um programa No sentido mais geral, um algoritmo qualquer conjunto finito de instrues que possa ser seguido para a realizao de uma tarefa especfica ou resoluo de um determinado problema (XIMENES, 1993). EXEMPLO 4: uma receita de culinria: massa folheada amassar bem todos os ingredientes deixar repousar por 30 min. REPETIR (3 vezes) abrir a massa passar margarina dobrar 3 vezes deixar repousar por 15 min. abrir a massa rechear levar ao forno quente numa forma untada ENQUANTO (no estiver assado) manter no forno quente EXEMPLO 5: a atividade de um assistente administrativo fornecer formulrio verificar o preenchimento do formulrio SE (preenchimento estiver correto) ENTO arquivar formulrio fornecer protocolo SENO fornecer novo formulrio instruir quanto forma de preenchimento

Na informtica, um algoritmo definido como uma seqncia ordenada e finita de passos, independente da linguagem de programao a ser utilizada para codific-lo, que leva soluo de um dado problema (XIMENES, 1993). 2

ALGORITMOS I EXEMPLO 6: o clculo da rea de um retngulo saber o valor da base saber o valor da altura multiplicar a base pela altura o valor obtido o resultado esperado Os algoritmos so utilizados na programao da mesma forma que as receitas de culinria podem ser usadas no preparo das refeies, tanto como soluo especfica quanto como ponto de partida para experincias. A construo de um algoritmo consiste em entender claramente o enunciado do problema para que seja possvel definir a soluo e o que deve ser feito (processamento).

1.3

NOES DE SISTEMAS DE COMPUTAO

Um sistema computacional formado por um conjunto de componentes fsicos (o hardware) e por um conjunto de mtodos e procedimentos necessrios ao funcionamento da parte fsica (o software).

1.3.1 Hardware: componentes bsicos


Podemos considerar o computador como uma mquina capaz de executar aes com objetivos especficos. Essas aes so basicamente instrues para leitura e escrita de informaes e para a execuo de operaes aritmticas e lgicas. Assim, embora existam computadores dos mais diferentes tipos e tamanhos, todos consistem em cinco componentes bsicos interligados: unidade aritmtica e lgica (ULA), unidade de controle, unidade de entrada de dados, unidade de sada de dados e memria. Esquematicamente, temos (FIGURA 2):

unidade de CONTROLE

ULA

ENTRADA

MEMRIA

SADA

FIGURA 2: componentes bsicos de um computador Unidade aritmtica e lgica (ULA): executa clculos que envolvem operaes aritmticas como soma, subtrao, multiplicao e diviso e/ou operaes lgicas como comparaes de grandeza (maior, menor, igual). Unidade de CONTROLE: acompanha cada instruo do programa sendo executado e aciona as unidades que executaro determinada instruo, controlando o fluxo de dados. Em outras palavras, aciona a unidade de ENTRADA para leitura de dados, armazena e recupera dados da MEMRIA, transfere valores da memria para a ULA e aciona a unidade de SADA para 3

ALGORITMOS I visualizao de resultados. Por exemplo, em uma operao de soma deve acionar a MEMRIA para transferir ULA as parcelas a somar e deve transferir o resultado calculado MEMRIA. A unidade aritmtica e lgica e a unidade de controle constituem a unidade central de processamento (CPU). Unidade de ENTRADA: refere-se a qualquer dispositivo que possa captar dados do meio externo e transferi-los memria do computador. EXEMPLOS: teclado, mouse, scanner, faxmodem, leitora de cartes magnticos, caneta tica, mesa digitalizadora, leitora de cdigos de barra, joystick, touch-screen, sensores especiais, etc. Unidade de SADA: refere-se a qualquer dispositivo que transfere dados gravados na memria para um meio externo ao computador. Normalmente para cada tipo de unidade de entrada existe uma unidade de sada correspondente e algumas vezes o mesmo dispositivo faz as duas funes. EXEMPLOS: fax-modem, touch-screen, vdeo, impressora, plotter, caixa de som, etc. MEMRIA: armazena dados e programas durante o processamento. A memria dividida em unidades pequenas e de mesmo tamanho identificadas por nico endereo - um nmero representado atravs da notao hexadecimal. Cada unidade de memria capaz de armazenar uma nica informao como, por exemplo, o resultado de uma operao aritmtica. A memria pode ser pensada como um armrio (FIGURA 3) repleto de gavetas, onde armazena-se os objetos, os quais podem ser substitudos. Os objetos so as informaes ou dados e as gavetas so as unidades de memria. Como no armrio (memria) existem inmeras gavetas (unidades), necessrio diferenci-las, ou melhor, identific-las de forma nica - sero usados nomes ao invs de nmeros como identificadores. Alm disso, cada gaveta (unidade) pode armazenar apenas um objeto (informao) de cada vez, sendo sempre do mesmo material (tipo). Ou seja, define-se nomes para determinadas gavetas especificando qual o material dos objetos que l podem ser armazenados.

armrio ? ? ? ?

identificao nome idade endereo telefone

FIGURA 3: modelo de memria como um armrio de gavetas A referncia a uma determinada unidade de memria feita atravs de seu identificador. Assim, uma instruo para armazenar um valor em uma unidade de memria pode ser expressa da seguinte forma: armazene o valor 13 na unidade de memria IDADE obtendo como resultado (FIGURA 4):

ALGORITMOS I

armrio ? 13 ? ?

identificao nome idade endereo telefone

FIGURA 4: estado da memria aps execuo de instruo importante notar que nas demais unidades de memria foram colocados um ponto de interrogao, indicando que o valor desconhecido. Portanto, antes de usar o contedo de uma unidade de memria interessante que o valor seja definido atravs de uma instruo de armazenamento, por exemplo, caso contrrio, o resultado obtido pode no ser o desejado. A memria pode ser subdividida em dois tipos diferentes: memria ROM (Read Only Memory) ou memria permanente: armazena informaes e programas bsicos para o funcionamento do computador. memria RAM (Random Access Memory) ou memria temporria: armazena dados e programas. voltil.

1.3.2 Software
Um software um programa de computador, conjunto de instrues, que faz com que o hardware realize determinada tarefa. O software um termo coletivo que abrange vrias categorias que podem ser subdivididas de acordo com o tipo de trabalho feito ou a forma de distribuio. Quanto ao tipo do trabalho feito, temos: os sistemas operacionais (software bsico), que controlam o funcionamento do computador, cuidam de atividades essenciais porm muitas vezes invisveis como a manuteno de arquivos em discos e o gerenciamento da tela; so a base sobre a qual aplicaes so construdas (OS/2, UNIX, DOS, etc.); os softwares de uso geral, como planilhas eletrnicas, editores de texto, etc.; os softwares de rede, que permitem a comunicao de computadores entre si; as linguagens de programao, que fornecem aos programadores as ferramentas de que necessitam para escrever programas. Quanto forma de distribuio, temos: packaged software, ou seja, softwares comercializveis (MS Office); freeware, tambm conhecidos como softwares de domnio pblico (Linux) e shareware, semelhantes aos freeware, mas que costumam ser fornecidos mediante acordo de pagamento de quantidade simblica pelos usurios que gostarem do produto (4dos).

1.4

CONCEITO DE PROGRAMA

Como foi dito anteriormente, a construo de programas de computadores, em alguns casos, pode ser uma tarefa difcil e, portanto, a elaborao de algoritmos faz-se necessria. Elaborado o algoritmo, temos todos os passos bem definidos e, ento, podemos transformar com facilidade o algoritmo em um programa, ou seja, podemos traduzir as instrues do algoritmo para instrues em uma linguagem de programao, preocupando-nos apenas com detalhes da linguagem e no com a seqncia de passos a serem realizados. Assim, podemos dizer que um programa a implementao de um algoritmo em uma determinada linguagem de programao. 5

ALGORITMOS I EXEMPLO 7: o clculo da rea de um tringulo. Seguindo as fases da construo de um programa apresentadas na FIGURA 1, temos: 1 PASSO: anlise - elaborao do algoritmo detalhado ALGORITMO exemplo INCIO leia o valor da base armazene o valor lido na unidade memria BASE leia o valor da altura armazene o valor lido na unidade de memria ALTURA multiplique o valor armazenado em BASE pelo valor armazenado em ALTURA armazene o resultado na unidade de memria VALOR_INTERMEDIRIO divida o valor armazenado em VALOR_INTERMEDIRIO por 2 armazene o resultado na unidade de memria REA escreva o valor armazenado em REA FIM 2O PASSO: implementao - traduo do algoritmo em uma linguagem de programao na linguagem de programao PASCAL: PROGRAM area; { OBJETIVO: esse programa tem por objetivo calcular a rea de um tringulo qualquer, sendo os valores da base e da altura fornecidos pelo usurio. programador: Fulano de Tal 26/05/95 linguagem de programao: PASCAL } VAR base, altura, valor_intermediario, area: REAL; BEGIN WRITELN (Clculo da rea de um tringulo); WRITELN ( informe o valor da base ); READLN (base); WRITELN ( informe o valor da altura ); READLN (altura); valor_intermediario:= base * altura; area:= valor_intermediario / 2; WRITELN (o valor da rea do tringulo : ); WRITELN (area); END. na linguagem de programao C++ // OBJETIVO: esse programa tem por objetivo calcular a rea de um tringulo qualquer, // sendo os valores da base e da altura fornecidos pelo usurio. // // programador: Fulano de Tal data: 26/05/95 // linguagem de programao: C++ # include <iostream.h> main () { float data:
O

base, altura, valor_intermediario, area;

cout << "Clculo da rea de um tringulo \n"; cout << informe o valor da base \n; 6

ALGORITMOS I cin >> base; cout << informe o valor da altura \n; cin >> altura; valor_intermediario = base * altura; area = valor_intermediario / 2; cout << o valor da rea do tringulo : \n; cout << area; }

ALGORITMOS I

REPRESENTAO DE DADOS

O homem um processador de dados notvel, mas por princpio adota a lei do menor esforo e por isto vem se instrumentando no seu trabalho de processamento de dados desde a pr-histria, com ferramentas cada vez mais sofisticadas. No incio utilizou o que tinha literalmente mo: os prprios dedos e depois de pedrinhas; deste costume, ainda vivo em certas aplicaes, nos ficaram as palavras dgito (do latim digitus, dedo) e clculo (do latim calculus, pedra). Alguns povos usaram ns em uma corda formando um rosrio (os quipos dos Incas) e os orientais usaram o baco para auxlio do processamento de dados. Com o advento da era industrial, comeou-se a fabricar mquinas baseadas em componentes mecnicos como engrenagens, eixos, manivelas, etc. que auxiliavam sobretudo o processamento aritmtico dos dados. A maioria dos programas computacionais manipulam informaes ou dados. Entende-se como DADO um atributo que descreve sucintamente eventos, entidades ou caractersticas: o nome de uma pessoa, seu peso ou o nmero de pginas de um livro so dados. Os computadores podem lidar com tipos diferentes de dados: dados numricos ou dados no numricos (texto, imagem, som, ...). Os dados podem ser classificados como: INTEIROS: toda e qualquer informao numrica que representa os nmeros inteiros relativos (negativo, nulo ou positivo) da aritmtica. EXEMPLO 1: 12 anos; -15 graus; ano de 1996. REAIS: valores numricos que representam os nmeros reais da aritmtica. So escritos com o ponto decimal (no lugar da vrgula). EXEMPLO 2: 12.41 reais; 2.5 quilmetros de distncia; 1.25 metros de altura; 2.6e04 = 4 -2 2.6*10 ; 0.371e-2 = 0.371*10 . LGICOS: toda e qualquer informao que pode assumir apenas apenas dois valores. EXEMPLO 3: aberto ou fechado, ligado ou desligado, verdadeiro (TRUE) ou falso (FALSE). CARACTERES: valores no-numricos que so escritos com apenas um caracter conhecido do computador (tabela ASCII). EXEMPLO 4: A, a, ., 2, +, STRINGS: valores no-numricos que so constitudos por um ou mais caracteres. Esto delimitados por apstrofos. EXEMPLO 5: rua; Lgica; ; rua Tenente Silveira; 1996 O PROCESSAMENTO DE DADOS envolve as operaes de armazenamento, transmisso, combinao e comparao de dados.

2.1

CONSTANTES

Os exemplos apresentados anteriormente representam valores constantes. Uma informao constante quando no sofre nenhuma variao no decorrer do tempo.

2.2

VARIVEIS

Quando uma informao tem a possibilidade de ser alterada em algum instante no decorrer do tempo classificada como varivel. EXEMPLO 6: suponha que, ao fazer um contrato de locao de um imvel, no seja permitido 8

ALGORITMOS I utilizar um valor fixo em moeda corrente como base para o reajuste, pois com o passar do tempo esse valor estar defasado. Para resolver esse problema podemos utilizar um parmetro que fornea valores atualizados em moeda corrente para cada perodo. Identificamos esse parmetro de IRT, ndice de reajustes totais. No ambiente computacional, as informaes variveis so armazenadas nas unidades de memria. Variveis so, portanto, entidades (unidades de memria) que armazenam um valor de um tipo determinado e so identificadas por um nome (ou seja, um local na memria do computador destinado ao armazenamento de dados). EXEMPLO 7: salrio 100.00 nome Pedro

onde: o valor 100.00 armazenado na varivel salrio e o valor Pedro armazenado na varivel nome. Uma varivel pode receber muitos valores diferentes, mas em um dado instante uma varivel s pode apresentar um valor e o ltimo valor armazenado o que ser considerado nos usos subseqentes. Devemos usar, preferencialmente nomes significativos para as variveis relacionados s informaes que sero armazenadas, como, por exemplo, lado1, lado2, hipotenusa. Os nomes das variveis ou identificadores devem comear sempre com uma letra, podendo ser seguida de letras, nmeros e/ou o under-score ( _ ). So nomes vlidos de variveis: aluno, cdigo_disciplina, nome_disciplina, u, u2, ub_40. So identificadores invlidos: o&m, 3m. Como as constantes apresentadas na seo anterior, as variveis tambm so de determinados tipos: variveis INTEIRAS: so aquelas posies que armazenam um valor do tipo INTEIRO variveis REAIS: so aquelas posies que armazenam um valor do tipo REAL variveis LGICA: so aquelas posies que armazenam um valor do tipo LGICO variveis CARACTER: so aquelas posies que armazenam um valor do tipo CARACTER variveis STRING: so aquelas posies que armazenam um valor do tipo STRING Como se utiliza as variveis? Podemos atribuir um valor constante uma varivel ou fornec-lo atravs de uma operao de leitura (entrada de dados).

2.3

OPERADORES ARITMTICOS, LGICOS E RELACIONAIS

O processamento de dados envolve a manipulao desses dados atravs de operaes. Da aritmtica vem as 4 operaes bsicas: soma, subtrao, multiplicao e diviso. Existem tambm as operaes para manipulao de dados do tipo lgico. Para os outros dados nonumricos o estudo ser feito posteriormente. importante observar que: o resultado de qualquer operao tem o mesmo tipo de seus operandos.

2.3.1 Operadores aritmticos


Expresses aritmticas so aquelas cujo resultado da avaliao um valor de tipo numrico (inteiro ou real): se todas as variveis e/ou constantes so do tipo inteiro, ento o resultado da expresso tambm um valor do tipo inteiro; se todas as variveis e/ou constantes so do tipo real, ento o resultado da expresso tambm um valor do tipo real; se ao menos 9

ALGORITMOS I uma das variveis ou constantes for do tipo real ou for usado o operador aritmtico / (diviso real), ento o resultado da expresso um valor do tipo real. Somente o uso de operadores aritmticos e variveis numricas permitido em expresses desse tipo. Os operadores aritmticos so os seguintes: + adio subtrao * multiplicao / diviso real ** potenciao // radiciao DIV diviso inteira (s pode ser aplicada a operandos inteiros) MOD resto da diviso inteira (s pode ser aplicada a operandos inteiros) Na resoluo das expresses aritmticas, os operadores tm uma hierarquia de prioridades: () + ** // o que aparecer primeiro da esquerda para direita * / DIV MOD o que aparecer primeiro da esquerda para direita + o que aparecer primeiro da esquerda para direita EXEMPLO 8: a expresso aritmtica: y 2 + 4 + 4 x 5 - 2 3 - 1 deve ser escrita da seguinte forma, obedecendo a prioridade dos operadores: y (2 + 4) / (3 - 1) + 4 * 5 - 2 ** 2
2

2.3.2 Operadores relacionais


Uma relao uma comparao realizada entre dois valores do mesmo tipo bsico. Os operadores relacionais, que indicam a comparao a ser realizada entre os termos da relao so: = igual a <> diferente de > maior que < menor que >= maior ou igual a <= menor ou igual a O resultado obtido de uma relao sempre um valor lgico.

2.3.3 Operadores lgicos


A combinao de valores lgicos com os operadores lgicos tem como resultado outro valor lgico. Os operadores lgicos so: NO negao E conjuno OU disjuno

P1 V F

NO P1 F V

P1 V V F F

P2 V F V F

P1 E P2 V F F F

P1 V V F F

P2 V F V F

P1 OU P2 V V V F

Na resoluo das expresses lgicas, os operadores tm uma hierarquia de prioridades: NO 10

ALGORITMOS I E OU

2.3.4 Hierarquia dos operadores


Na resoluo de expresses em geral, os operadores tm a seguinte hierarquia de prioridades: () + operaes aritmticas operaes relacionais operaes lgicas

11

ALGORITMOS I

ALGORITMO: REPRESENTAO E ESTRUTURAS DE ELABORAO

A grosso modo, podemos dizer que o homem faz todas as aes de seu dia a dia seguindo algoritmos. bvio que estes algoritmos quase nunca esto escritos explicitamente, mas com certeza esto muito bem gravados no subconsciente de quem os executa mecnica e inconscientemente. So exemplos de algoritmos as receitas de culinria, os manuais de montagem ou de operao de mquinas, etc. No contexto computacional, algoritmo um procedimento constitudo de um conjunto de instrues bem definidas, passveis de serem executadas por uma mquina, com o objetivo de resolver um problema. Um algoritmo deve possuir as seguintes caractersticas: ser finito, ou seja, o algoritmo possui um trmino aps um nmero limitado de passos; ser eficiente, ou seja, a execuo de um algoritmo necessita de um tempo razovel; ser bem definido, ou seja, o resultado da execuo de uma ao no deve ser ambguo, isto , aps a execuo da ao deve estar bem definida qual a prxima ao a ser realizada.

3.1

ETAPAS NA CONSTRUO DE UM ALGORITMO

Na construo de algoritmos podemos seguir as seguintes etapas: ETAPA 1 - ESQUEMATIZAR A SADA E A ENTRADA: a tarefa de construo de algoritmos deve ser iniciada pela anlise do problema e conseqentemente dos resultados desejados, que sero chamados de SADA. Em seguida analisamos os dados necessrios para conseguir a SADA, isto , determinamos a ENTRADA do algoritmo. ETAPA 2 - CONSTRUIR O ALGORITMO: escrevemos o algoritmo em pseudocdigo (portugus estruturado), explicitando as instrues, passveis de serem executadas por uma mquina. ETAPA 3 - RASTREAR O ALGORITMO: verificamos se os resultados obtidos condizem com o esperado.

3.2

FORMA GERAL DE UM ALGORIT MO


Os algoritmos escritos em portugus estruturado tero a seguinte forma geral (FIGURA

ALGORITMO nome_do_algoritmo { descrio suscinta do seu objetivo } VARIVEIS { declarao das variveis } INTEIRO: REAL: LGICO: CARACTER: STRING: INCIO <comandos> FIM 5):

cabealho

rea de declaraes

corpo do algoritmo

FIGURA 5: forma geral de um algoritmo O "corpo do algoritmo" constitudo de comandos de ENTRADA, SADA e ATRIBUIO, entre outros. 12

ALGORITMOS I EXEMPLO 1: faa um algoritmo para calcular a rea de um tringulo de base B e a altura H. ETAPA 1 - ESQUEMATIZAR A SADA E A ENTRADA: SADA: a rea do tringulo ENTRADA: a base e a altura do tringulo, sendo dado primeiramente a base e em seguida, a altura.

ETAPA 2 - CONSTRUIR O ALGORITMO: o algoritmo apresentado no EXEMPLO 7 do Captulo 1 pode ser reescrito em uma forma mais simples e compacta como abaixo: ALGORITMO exemplo { OBJETIVO: ler a base e a altura de um tringulo, calcular a sua rea usando a frmula rea = base x altura 2 } VARIVEIS REAL: base, altura, valor_intermedirio , rea INCIO LEIA (base) LEIA (altura) valor_intermedirio base * altura rea valor_intermedirio / 2 ESCREVA ( rea do tringulo: , rea, cm); FIM importante notar que: o comando LEIA indica que um valor ser lido e armazenado varivel; o comando de atribuio () indica que a expresso do lado direito ser avaliada e o resultado armazenado na varivel do lado esquerdo; o comando ESCREVA indica que o valor armazenado na varivel ser mostrado em uma unidade de SADA (no vdeo, por exemplo). ETAPA 3 - RASTREAR O ALGORITMO (ou fazer o teste de mesa): supondo que o valor da base do tringulo seja 3 e o valor da altura do tringulo seja 4, executamos o algoritmo instruo por instruo, observando o valor armazenado na memria em cada varivel e o resultado obtido. instruo base ? o n 1 3 o n 2 3 o n 3 3 o n 4 3 o n 5 3 altura ? ? 4 4 4 4 valor_intermedirio ? ? ? 12 12 12 rea ? ? ? ? 6 6

3.3

COMANDOS SIMPLES

3.3.1 Comando de atribuio


Permite que se fornea um valor a uma certa varivel, onde o tipo desse valor deve ser compatvel com o tipo da varivel.

13

ALGORITMOS I

FORMA GERAL comando de atribuio: identificador valor onde valor pode ser: um valor fixo (constante); uma outra varivel; uma expresso aritmtica ou lgica: combinao de variveis, constantes e operadores.

Primeiro se avalia o que est do lado direito do operador de atribuio (valor). Isso resultar um valor que ento atribudo a varivel que est do lado esquerdo do operador (identificador). O valor previamente armazenado ser substitudo. As variveis que estiverem do lado direito do operador de atribuio devem ter seus valores previamente definidos, os quais no sero alterados aps a execuo do comando. EXEMPLO 2: qual o valor armazenado em cada uma das variveis aps a execuo dos comandos de atribuio abaixo? instruo soma_parcial soma_total nome a. ? ? ? soma_parcial 5 + 10 o n 1 15 ? ? soma_total soma_parcial o n 2 15 15 ? nome Jos o n 3 15 15 Jos o soma_parcial 30 n 4 30 15 Jos b. soma_parcial 5 6 soma_total soma_parcial + 3 soma_total
instruo soma_parcial ? o n 1 5 o n 2 5 o n 3 5 Instruo soma_total ? o n 1 5 o n 2 8 soma_total ? ? 6 8

c. soma_total soma_total 5 soma_total + 3

O aparecimento da varivel do lado direito indica: use o valor armazenado; do lado esquerdo indica: armazene um novo valor.

3.3.2 Comandos de entrada e sada de dados


Para que alguns clculos sejam realizados, torna-se necessrio que sejam fornecidos dados (ENTRADA). Tambm importante ver os resultados desses clculos (SADA). Fazendo uma analogia com a culinria domstica, para fazer um bolo, so necessrios os ingredientes (a entrada), que sero processados segundo uma receita (o algoritmo), e obtm-se como resultado o bolo (a sada). Devemos construir algoritmos que permitam que o usurio fornea qualquer tipo de informao a algumas variveis, mesmo sem saber ao certo que informao ser fornecida. Como calcular a mdia de altura dos alunos do 1o. perodo, do 2o. perodo, etc.? Assim como existe um comando para atribuir um valor a uma varivel, existe um comando que permite que o usurio fornea esse valor, isto , realize a entrada de dados.

14

ALGORITMOS I

FORMA GERAL comando de entrada de dados: LEIA (lista de variveis) onde lista de variveis so os nomes das variveis, separados por vrgula, nas quais sero armazenados os valores digitados pelo usurio

Num programa, quando um comando de entrada de dados processado, a execuo interrompida at que uma informao compatvel com o tipo da varivel declarada seja digitada seguida da tecla ENTER.

EXEMPLO 3: LEIA (nota) LEIA (nome) LEIA (nota, nome)

Da mesma forma, um algoritmo deve mostrar os resultados obtidos durante o seu processamento. Isso feito atravs de comando de sada de dados.

FORMA GERAL comando de sada de dados: ESCREVA (lista de variveis e/ou constantes) onde lista de variveis e/ou constantes so os nomes das variveis, separados por vrgula, cujos contedos sero mostrados ao usurio. Alm dos contedos das variveis, o valor de uma constante (nmero ou texto) pode ser escrito diretamente

Num algoritmo ou programa, quando um comando de sada de dados processado, as informaes entre parnteses so escritas no vdeo. EXEMPLO 4: ESCREVA (nota) ESCREVA (nome) ESCREVA (nota, nome) ESCREVA (Voc pesa , peso, quilos.)

3.4

COMANDOS ESTRUTURADOS

At agora vimos como desenvolver algoritmos para resolver uma classe de problemas. Esses algoritmos seguiam mais ou menos um modelo padro: entrada de valores, clculos e sada de resultados, numa estrutura seqencial, ou seja, todos os comandos eram executados uns aps os outros, linha a linha. A seguir, sero vistas as formas de selecionar e de repetir instrues.

3.4.1 Comandos de seleo


Uma seleo permite a escolha de um grupo de comandos (instrues) a ser executado quando determinadas condies so ou no satisfeitas.

15

ALGORITMOS I PROBLEMA 1: faa um algoritmo que leia dois valores inteiros e armazene-os em variveis, A e B. Escreva o maior dos dois valores. SOLUES: 1. uso da frmula: MAIOR entre A e B = A + B + ABS (A - B) 2 2. uso de comando de seleo

3.4.1.1 Comando de seleo: SE-ENTO-SENO


FORMA GERAL comando de seleo simples: SE expresso ENTO comando1 ... comandon FIMSE No comando de seleo simples SE-ENTO, SE o resultado da avaliao da expresso for verdadeiro, os comandos sob a clusula ENTO sero executados at encontrar o FIMSE, encerrando o comando de seleo. No entanto, SE o resultado da avaliao da expresso for falso, nenhum comando sob a clusula ENTO ser executado, ou seja, o comando de seleo ser encerrado. Encerrado o comando de seleo, o primeiro comando aps o FIMSE ser executado. EXEMPLO 5: verificar como est o tempo SE est chovendo ENTO levar guarda-chuva FIMSE sair de casa EXEMPLO 6: faa um algoritmo que leia dois valores inteiros e escreva o maior deles. ALGORITMO exemplo VARIVEIS INTEIRO: a, b INCIO LEIA (a, b) SE (a > b) ENTO ESCREVA (o valor : , a) FIMSE SE (b > a) ENTO ESCREVA (o valor : , b) FIMSE FIM onde (a > b) uma expresso lgica cujo valor verdadeiro ou falso, e que define qual ao ser tomada. Por exemplo, se o valor armazenado em a for 5 e o valor armazenado em b for 8, a expresso (a > b) falsa, o valor de b deve ser escrito atravs da execuo do comando ESCREVA (o valor : , b).

16

ALGORITMOS I

FORMA GERAL comando de seleo composto: SE expresso ENTO comando1 ... comandon SENO comando1 ... comandom FIMSE

No comando de seleo composto SE-ENTO-SENO, SE o resultado da avaliao da expresso for verdadeiro, os comandos sob a clusula ENTO sero executados at encontrar a clusula SENO, encerrando o comando de seleo. J SE o resultado da avaliao da expresso for falso, os comandos sob a clusula SENO sero executados at encontrar o FIMSE encerrando o comando de seleo. Encerrado o comando de seleo, o primeiro comando aps o FIMSE ser executado. EXEMPLO 7: verificar o fluxo de carros SE vem carro ENTO atravessar correndo a rua descansar SENO atravessar a rua FIMSE EXEMPLO 8: faa um algoritmo que leia os nomes de duas pessoas e verifique se so ou no iguais. ALGORITMO exemplo VARIVEIS STRING: nome1, nome2 INCIO LEIA (nome1, nome2) SE (nome1 = nome2) ENTO ESCREVA (nomes iguais) SENO ESCREVA (nomes diferentes) FIMSE FIM importante salientar que qualquer comando simples ou estruturado pode aparecer dentro de qualquer outro comando estruturado. Assim, dentro de um comando SE-ENTOSENO podem estar diversos comandos de entrada de dados, comandos de sada de dados, comandos de atribuio e inclusive outros comandos de seleo. Observa-se ainda que os algoritmos apresentados at aqui foram escritos usando o recurso de identao, ou seja, os algoritmos foram escritos com margens que facilitam a visualizao do escopo de cada comando.

3.4.1.2 Comando de seleo: ESCOLHA

17

ALGORITMOS I

FORMA GERAL comando de seleo: ESCOLHA expresso opo1: comando1 ... comandon opon: comando1 ... comandom SENO comando1 ... comandoo FIMESCOLHA onde: expresso deve ser do tipo INTEIRO, CARACTER ou LGICO opo deve ser uma ou mais constantes e/ou uma ou mais faixas de valores se parados por vrgula

No comando de seleo ESCOLHA, se o valor da expresso for igual ao valor da opo1 , ento os comandos associados opo sero executados; caso contrrio, se o valor da expresso for igual ao valor da opon, ento os comandos associados opo sero executados; caso contrrio, os comandos sob a clusula SENO sero executados. Encerrada a execuo dos comandos associados a uma das opes ou os comandos sob a clusula SENO, o primeiro comando aps o FIMESCOLHA ser executado. No comando ESCOLHA, a clusula SENO opcional e apenas uma opo considerada verdadeira. EXEMPLO 9: faa um algoritmo que leia um caracter e determine se uma letra, um dgito ou um operador (+, -, *, /), caso contrrio, identifique-o como um caracter especial. ALGORITMO exemplo VARIVEIS CARACTER: caracter_lido INCIO LEIA (caracter_lido) ESCOLHA caracter_lido A..Z, a..z : ESCREVA ( 0..9 : ESCREVA ( +, -, *, / : ESCREVA ( SENO ESCREVA ( FIMESCOLHA FIM

letra) dgito) operador) caracter especial)

3.4.2 Comandos de repetio


Esses comandos produzem a repetio da execuo de um conjunto de comandos vrias vezes. PROBLEMA 2: uma pessoa comprou 2 artigos em uma loja. Para cada artigo tem-se: nome, preo, percentual de desconto. Faa um algoritmo que escreva nome, preo e preo com desconto de cada artigo, e escreva tambm o total a pagar. Podemos escrever um conjunto de instrues para executar os clculos solicitados. Quantas vezes esse conjunto de instrues ser executado? 1 vez para 2 produtos. E se forem 4, 8, 20, 40 produtos? Poderamos escrever o conjunto de instrues 2, 4, 10, 20 vezes. Soluo simples, porm invivel. Outra soluo seria uma repetio da mesma seqncia de comandos 18

ALGORITMOS I usando um comando de repetio. O nmero de repeties pode ser indeterminado, porm deve finito. Podemos, por exemplo: calcular o preo com desconto enquanto a quantidade de produtos for menor que 2, calcular o preo com desconto at que a quantidade de produtos seja igual a 2.

3.4.2.1 Comando de repetio: ENQUANTO-FAA


No comando ENQUANTO-FAA, o conjunto de comandos executado repetidamente enquanto uma expresso permanece verdadeira.

FORMA GERAL comando de repetio: ENQUANTO expresso FAA comando1 ... comandon FIMENQUANTO

No comando ENQUANTO-FAA, a expresso avaliada antes do conjunto de comandos que compe o comando de repetio ser executado. Se o resultado da avaliao da expresso for verdadeiro, todos os comandos sero executados, quando a expresso novamente avaliada. Se o resultado da avaliao da expresso for falso, o comando de repetio encerrado. Encerrado o comando de repetio, o primeiro comando aps o FIMENQUANTO ser executado. EXEMPLO 10: uma pessoa comprou 4 artigos em uma loja. Para cada artigo tem-se: nome, preo, percentual de desconto. Faa um algoritmo que escreva nome, preo e preo com desconto de cada artigo, e escreva tambm o total a pagar. ALGORITMO exemplo VARIVEIS INTEIRO: desconto, nmero_produtos REAL: preo, pcd, total STRING: nome INCIO nmero_produtos 0 total 0 ENQUANTO nmero_produtos < 4 FAA LEIA (nome, preo, desconto) pcd preo - preo * desconto ESCREVA (nome, preo, pcd) nmero_produtos nmero_produtos + 1 total total + pcd FIMENQUANTO ESCREVA (total) FIM EXEMPLO 11: uma pessoa comprou n artigos em uma loja. Para cada artigo tem-se: nome, preo, percentual de desconto. Faa um algoritmo que escreva nome, preo e preo com desconto de cada artigo, e escreva tambm o total a pagar. ALGORITMO exemplo VARIVEIS INTEIRO: desconto, nmero_produtos, n REAL: preo, pcd, total STRING: nome 19

ALGORITMOS I INCIO LEIA (n) nmero_produtos 0 total 0 ENQUANTO nmero_produtos < n FAA LEIA (nome, preo, desconto) pcd preo - preo * desconto ESCREVA (nome, preo, pcd) nmero_produtos nmero_produtos + 1 total total + pcd FIMENQUANTO ESCREVA (total) FIM EXEMPLO 12: uma pessoa comprou artigos em uma loja. Para cada artigo tem-se: nome, preo, percentual de desconto. Faa um algoritmo que escreva nome, preo e preo com desconto de cada artigo, e escreva tambm o total a pagar. Um nome de produto igual a FIM indica o fim da entrada de dados. ALGORITMO exemplo VARIVEIS INTEIRO: desconto REAL: preo, pcd, total STRING: nome INCIO total 0 LEIA (nome) ENQUANTO nome FIM FAA LEIA (preo, desconto) pcd preo - preo * desconto ESCREVA (nome, preo, pcd) total total + pcd LEIA (nome) FIMENQUANTO ESCREVA (total) FIM

3.4.2.2 Comando de repetio: REPITA-AT


No comando REPITA-AT, o conjunto de comandos executado repetidamente at que uma expresso torne-se verdadeira. FORMA GERAL comando de repetio: REPITA comando1 ... comandon AT expresso

Os comandos que compem o comando de repetio so executados e ento a expresso avaliada. Se o resultado da avaliao da expresso for falso, todos os comandos sero novamente executados, quando a expresso mais uma vez avaliada. Se o resultado da avaliao da expresso for verdadeiro, encerra o comando de repetio. Encerrado o comando de repetio, o primeiro comando aps o AT ser executado. 20

ALGORITMOS I EXEMPLO 13: uma pessoa comprou 4 artigos em uma loja. Para cada artigo tem-se: nome, preo, percentual de desconto. Faa um algoritmo que escreva nome, preo e preo com desconto de cada artigo, e escreva tambm o total a pagar. ALGORITMO exemplo VARIVEIS INTEIRO: desconto, nmero_produtos REAL: preo, pcd, total STRING: nome INCIO nmero_produtos 0 total 0 REPITA LEIA (nome, preo, desconto) pcd preo - preo * desconto ESCREVA (nome, preo, pcd) nmero_produtos nmero_produtos + 1 total total + pcd AT nmero_produtos = 4 ESCREVA (total) FIM

3.4.2.3 Comando de repetio: PARA-FAA


No comando PARA-FAA, o conjunto de comandos executado repetidamente enquanto uma varivel de controle vai sendo incrementada ou decrementada, at que ela assuma um determinado valor.

FORMA GERAL comando de repetio: PARA varivel DE valor-inicial AT valor-final (passo) FAA comando1 ... comandom FIMPARA

Os comandos que compem o comando de repetio so executados um nmero determinado de vezes. A varivel de controle assume o valor-inicial sendo incrementada automaticamente aps a execuo dos comandos de acordo com o valor dado em passo at o valor-final. A cada execuo do comando de repetio avaliado se a varivel de controle assumiu um valor igual ao valor-final. Nesse caso, o comando de repetio executado mais uma vez e ento encerrado. Encerrado o comando de repetio, o primeiro comando aps o FIMPARA ser executado. EXEMPLO 14: uma pessoa comprou 4 artigos em uma loja. Para cada artigo tem-se: nome, preo, percentual de desconto. Faa um algoritmo que escreva nome, preo e preo com desconto de cada artigo, e escreva tambm o total a pagar. ALGORITMO exemplo VARIVEIS INTEIRO: desconto, nmero_produtos REAL: preo, pcd, total STRING: nome 21

ALGORITMOS I INCIO total 0 PARA nmero_produtos DE 1 AT 4 (passo 1) FAA LEIA (nome, preo, desconto) pcd preo - preo * desconto ESCREVA (nome, preo, pcd) total total + pcd FIMPARA ESCREVA (total) FIM No comando PARA-FAA, quando o valor do passo for 1 (um) pode ser omitindo. Assim, poderamos ter escrito o algoritmo acima da seguinte forma: ALGORITMO exemplo VARIVEIS INTEIRO: desconto, nmero_produtos REAL: preo, pcd, total STRING: nome INCIO total 0 PARA nmero_produtos DE 1 AT 4 FAA LEIA (nome, preo, desconto) pcd preo - preo * desconto ESCREVA (nome, preo, pcd) total total + pcd FIMPARA ESCREVA (total) FIM

3.4.2.4 Comparao entre os comandos de repetio


comando ENQUANTO-FAA REPITA-AT PARA-FAA expresso incio fim no tem nmero de execues ? No mnimo 1 ABS (valor-final - valor-inicial passo) condio de parada expresso falsa expresso verdadeira + varivel = valor-final

Observa-se que todo comando ENQUANTO-FAA pode ser convertido para REPITAAT e vice-versa. E todo comando PARA-FAA pode ser convertido para ENQUANTO-FAA, mas nem todo comando ENQUANTO-FAA pode ser convertido para PARA-FAA.

22

ALGORITMOS I

MODULARIZAO DE ALGORITMOS

Para resolver um problema, desenvolvemos uma seqncia de passos que representam as aes que levam resoluo do problema. Essas aes constituem-se de estruturas de controle (seqncia, repetio, seleo), comandos de entrada/sada e comandos de atribuio. medida que os problemas a serem solucionados se tornam mais complexos, temos uma srie de pequenos problemas, cujas respectivas solues integram a soluo global. Quando esse conjunto de aes construdo, podemos nos deparar literalmente com um amontoado de aes que afetam a legibilidade do algoritmo, porque no ficam claras as pequenas partes lgicas que solucionam cada pequeno problema, dificultando a assimilao da soluo por outra pessoa. Utilizamos, ento, a tcnica de modularizao que permite a construo de pequenas solues (mdulos) para problemas complexos. Buscamos assim, aumentar a funcionalidade das partes do conjunto de aes que compe a soluo final. Muitas vezes, os mdulos podem conter um conjunto de aes (seqncia de comandos) que repetida vrias vezes num algoritmo, ou seja, os mdulos proporcionam uma diminuio do tamanho de algoritmos maiores. Alm disso, a estruturao de algoritmos facilita a deteco de erros, a documentao e manuteno de sistemas e a reutilizao de mdulos j implementados. Um algoritmo pode ser dividido em algoritmo PRINCIPAL e em diversos mdulos, tantos quantos forem necessrios para a soluo do problema. O algoritmo PRINCIPAL sempre por onde inicia e termina a execuo do algoritmo, devendo ativar os demais mdulos. Os mdulos podem ser ativados por outros mdulos e podem ativar outros mdulos. A ativao de um mdulo ocorre quando um determinado ponto do algoritmo contm o identificador do mdulo. Existem basicamente dois tipos de mdulos: funes: retornam somente um valor; procedimentos: retornam zero ou mais valores.

4.1

FUNES

A maioria das linguagens de programao disponibiliza vrias funes e procedimentos. As funes trigonomtricas seno (SIN), cosseno (COS) e tangente (TAN) so comumente encontras em linguagens cientficas, como tambm funes para clculo do valor absoluto (ABS), da raiz quadrada de um nmero (SQRT), do quadrado de um nmero (SQR). Funes podem ser utilizadas diretamente nas expresses. EXEMPLO 1: faa um algoritmo que leia para 10 tringulos o valor dos catetos e calcule a 2 2 2 hipotenusa (h = a + b ). Use as funes SQRT e SQR, pr-definidas em PASCAL. ALGORITMO exemplo VARIVEIS REAL: a, b, hipotenusa INTEIRO: contador INCIO PARA contador DE 1 AT 10 FAA LEIA (a, b) hipotenusa SQRT (SQR (a) + SQR (b)) ESCREVA (hipotenusa) FIMPARA FIM O comando hipotenusa SQRT (SQR (a) + SQR (b)) calcula o comprimento da hipotenusa de um tringulo retngulo como sendo a raiz quadrada da soma dos quadrados dos catetos. 23

ALGORITMOS I As funes so utilizadas em expresses e tm um nico valor. Devemos fornecer o argumento (ou argumentos) necessrios para o clculo de um valor especfico. Esse argumento pode ser uma expresso qualquer, cujo o resultado o valor que a funo opera. Em matemtica, uma funo escrita numa forma geral, como por exemplo: 2 f (x) = x - 3 x + 2 2 2 g (x, y) = x - y A funo f foi definida em termos de um parmetro x. Assim, quando x = 3, devemos substituir o valor de x na funo f obtendo f (3) = 12. A funo g foi definida em termos de dois parmetros. Assim, um nmero correspondente de argumentos requerido para cada avaliao da funo. Por exemplo, g (3, 2) = 5 g (2, 3) = -5. Portanto, na definio de uma funo importante a enumerao dos parmetros em termos dos quais a funo definida. E, na avaliao de uma funo estabelecida uma correspondncia entre os parmetros da definio e os argumentos fornecidos. Os comandos que compem uma funo so escritos separadamente dos comandos que compem (a parte principal d)o algoritmo. Os clculos sero executados sob controle do algoritmo principal quando solicitado, uma ou mais vezes quando necessrio. parmetros FORMA GERAL de uma funo: FUNO nome_da_funo ( p1: TIPO, p2, p3: TIPO, ... pn: TIPO ) : TIPO VARIVEIS { declarao das variveis locais } INCIO tipo do resultado da <comandos> funo nome_da_funo valor FIM

cabealho

corpo da funo

Os parmetros so opcionais, ou seja, podem ou no existir. Uma funo calcula e retorna um valor do tipo especificado (aps os dois pontos : ). Entre os comandos que compem o corpo da funo deve existir no mnimo um que uma atribuio de um valor ao nome da funo. O resultado da funo o ltimo valor atribudo. Os tipos de resultados vlidos para uma funo so: INTEIRO, REAL, CARACTER, STRING (TYPE palavra = STRING [20]) ou LGICO. A utilizao de funes altera o fluxo de execuo do algoritmo. Quando uma funo chamada (ativada), a execuo passa para os comandos da funo. Aps a execuo da funo com os argumentos fornecidos, a execuo retorna ao ponto de chamada no algoritmo principal com os valores calculados na funo. Dentro do algoritmo, a chamada de uma funo pode aparecer numa expresso de mesmo tipo do valor retornado pela funo, num comando de atribuio ou num comando de sada de dados.

4.2

PROCEDIMENTOS

Um procedimento um mdulo composto por um conjunto de comandos, contendo incio e fim, identificado por um nome, atravs do qual ser referenciado em qualquer parte do algoritmo principal. A diferena bsica entre procedimento e funo que uma funo sempre retorna um valor aps o seu processamento, enquanto um procedimento pode ou no retornar valores aps seu processamento. O retorno de qualquer valor por um procedimento feito atravs da lista de parmetros. Qualquer quantidade de valores pode retornar.

24

ALGORITMOS I parmetros FORMA GERAL de um procedimento: PROCEDIMENTO nome_do_procedimento ( p1: TIPO, ... pn: TIPO ) VARIVEIS { declarao das variveis locais } INCIO <comandos> FIM

cabealho

corpo do procedimento

Dentro do algoritmo, a chamada de um procedimento nunca aparece numa expresso ou num comando de atribuio ou num comando de sada de dados, como no caso das funes. Pelo contrrio, a chamada de um procedimento feita atravs de comandos isolados, ou seja, atravs do nome do procedimento e dos respectivos parmetros.

4.3

VARIVEIS GLOBAIS E LOCAIS

So dois os tipos das variveis utilizadas em um algoritmo: variveis globais e variveis locais. Uma varivel considerada varivel global quando declarada no algoritmo tornando-se passvel de aplicao por qualquer mdulo integrante e em qualquer parte. Em alguns casos, uma varivel utilizada por apenas um mdulo especfico, o que no justifica uma definio global. Nessa situao, a varivel declarada internamente ao mdulo e denominada local. Dessa forma, os demais mdulos (funes e procedimentos) e o algoritmo principal no podero fazer uso daquela varivel. O escopo de uma varivel denota a sua visibilidade perante os diversos mdulos integrantes do algoritmo.

4.4

PARMETROS

Segundo SALIBA (1992), "parmetros so canais pelos quais estabelecida uma comunicao bidirecional entre um mdulo e o algoritmo PRINCIPAL ou outros mdulos". Na utilizao de mdulos parametrizados, devemos enviar as informaes (argumentos) quando da chamada do mdulo atravs de variveis e/ou constantes, na respectiva ordem e tipo de declarao dos parmetros do mdulo. Em cada chamada de um mdulo, uma correspondncia estabelecida entre os argumentos (ou parmetros reais) da chamada e os parmetros (formais) do mdulo. Assim, podemos dizer que parmetros so os nomes definidos no cabealho do mdulo e argumentos so as variveis ou valores que so enviados para o mdulo quando da ativao do mesmo. O nome do parmetro pode ser qualquer um, inclusive o mesmo nome do argumento. O mtodo mais direto de associao de argumentos com parmetros o da passagem por valor. No processamento da chamada, cada argumento avaliado e os valores individuais so atribudos aos respectivos parmetros. No faz diferena se o argumento um varivel, uma constante ou uma expresso, o que importa que tenha um valor. Na passagem de parmetros por valor, mudanas nos parmetros dentro do mdulo no resultam em mudanas correspondentes nos argumentos pois feita uma cpia do valor do argumento no parmetro. Um outro mtodo de passagem de parmetro o da passagem por varivel (ou passagem por referncia). Neste caso, passada a prpria varivel e modificaes efetuadas dentro do mdulo refletem no algoritmo. A passagem de parmetros por varivel pode gerar os chamados efeitos colaterais. Utilizamos passagem por varivel quando necessrio retornar informaes do procedimento. A definio da passagem por varivel feita atravs do uso da palavra VAR antecedendo o parmetro na declarao do cabealho do mdulo. 25

ALGORITMOS I "Um mesmo mdulo pode utilizar diferentes mtodos de passagem de parmetros, para parmetros distintos" (SALIBA, 1992).

26

ALGORITMOS I

VARIVEIS INDEXADAS

Nem sempre os tipos primitivos de dados (inteiro, real, caracter, string e lgico) so suficientes para representar toda e qualquer informao na resoluo de problemas. Problemas complexos exigem o uso de tipos de dados complexos para o armazenamento das informaes a serem manipuladas. Neste caso, preciso definir outros tipos de dados a partir dos tipos de dados primitivos. PROBLEMA 1: faa um algoritmo que leia 5 nmeros inteiros e determine quantos nmeros so maiores que a mdia aritmtica dos nmeros lidos. SOLUES: 1. ler duas vezes os 5 nmeros inteiros, a primeira para calcular a mdia dos nmeros e a segunda para comparar cada nmeros com a mdia obtida. 2. armazenar todos os nmeros na memria. COMO? At aqui foi visto que uma varivel permitia o acesso a uma nica posio de memria e podia comportar apenas uma informao. A segunda soluo sugere a necessidade de referenciar um conjunto de variveis do mesmo tipo pelo mesmo nome simblico. Para tanto, faremos uso das variveis indexadas. Uma varivel indexada uma varivel que pode comportar um conjunto de informaes, todas do mesmo tipo, referenciadas pelo mesmo nome simblico e diferenciadas entre si atravs da posio ocupada dentro desse conjunto (SALIBA, 1992). Uma varivel indexada definida em termos do nmero de ndices usados. Neste caso, temos varivel indexada unidimensional (uma dimenso) tambm chamada de vetor quando um 1 nico ndice usado, e varivel indexada bidimensional (duas dimenses ) tambm chamada de matriz quando dois ou mais ndices so usados.

5.1

VARIVEL INDEXADA: VETOR

Um vetor uma varivel que permite o armazenamento de mais de um elemento. composto por um nmero fixo de elementos os quais tm todos o mesmo tipo. Por este motivo, dito que um vetor varivel indexada homognea. A declarao de uma varivel indexada unidimensional (vetor) feita especificando-se um nome para a varivel, uma dimenso entre colchetes e o tipo dos elementos da seguinte forma: FORMA GERAL declarao de uma varivel indexada (vetor): VARIVEIS ARRAY [limite_inferior .. limite_superior] DE TIPO: nome_da_varivel dimenso onde: dimenso deve ser do tipo INTEIRO, CARACTER ou LGICO, limite_inferior < limite_superior, sendo que o nmero de elementos do vetor dado por (limite_superior - limite_inferior + 1). deve ser um dos tipos primitivos vistos (INTEIRO, REAL, CARACTER, STRING, LGICO)

TIPO

Abaixo encontramos alguns exemplos de declarao de vetores:


1

Pode existir mais de duas dimenses, mas na prtica o uso dessas variveis no freqente.

27

ALGORITMOS I VARIVEIS ARRAY [1..5] DE INTEIRO: idades ARRAY [1..35] DE REAL: pesos, alturas onde a varivel idades uma varivel capaz de armazenar simultaneamente 5 nmeros inteiros e as variveis pesos e alturas so variveis capazes de armazenar simultaneamente 35 nmeros reais cada uma. possvel tambm definir um novo tipo de dado a partir da estrutura ARRAY e dos tipos primitivos. A definio de um tipo de dado vetor feita especificando-se um nome para o novo tipo, uma dimenso entre colchetes e o tipo dos elementos da seguinte forma:

FORMA GERAL declarao de um tipo de dado (vetor): TIPO nome_do_tipo = ARRAY [limite_inferior .. limite_superior] DE TIPO dimenso onde: dimenso deve ser do tipo INTEIRO, CARACTER ou LGICO, limite_inferior < limite_superior, sendo que o nmero de elementos do vetor dado por (limite_superior - limite_inferior + 1). deve ser um dos tipos primitivos vistos (INTEIRO, REAL, CARACTER, STRING, LGICO) ou outro tipo definido pelo programador

TIPO

Abaixo encontramos alguns exemplos da definio de tipo de dados vetor: EXEMPLO 1: TIPO vetorREAL = ARRAY [1..35] DE REAL VARIVEIS vetorREAL: pesos, alturas onde as variveis pesos e alturas so variveis do tipo vetorREAL. Uma varivel do tipo vetorREAL uma varivel indexada capaz de armazenar simultaneamente 35 nmeros reais. EXEMPLO 2: CONSTANTE nmero_mximo = 80 TIPO LINHA = ARRAY [1..nmero_mximo] DE CARACTER MAISCULAS = ARRAY [A..Z] DE INTEIRO VARIVEIS LINHA: linha1, linha2 MAISCULAS: letras onde as variveis linha1 e linha2 so variveis do tipo LINHA e a varivel letras uma varivel do tipo MAISCULAS. Uma varivel do tipo LINHA um vetor capaz de armazenar simultaneamente 80 caracteres. Uma varivel do tipo MAISCULAS um vetor cujos ndices so caracteres e capaz de armazenar simultaneamente 26 nmeros inteiros.

5.1.1 OPERAES: atribuio, leitura e escrita


28

ALGORITMOS I Como manipular os elementos de um vetor? Vamos considerar o exemplo abaixo: EXEMPLO 3: ALGORITMO exemplo TIPO VETOR = ARRAY [1..5] DE INTEIRO VARIVEIS VETOR: v INTEIRO: idade INCIO LEIA (idade) v [1] idade v [1] v [1] + 1 LEIA (v [2]) ESCREVA (v [1], v [2]) FIM Neste exemplo, o tipo VETOR um tipo criado pelo programador que pode armazenar no mximo 5 nmeros inteiros. Assim, como j existem os tipos INTEIRO, REAL, CARACTER, STRING e LGICO, no algoritmo acima, existe tambm o tipo VETOR. possvel declarar qualquer varivel como sendo desse tipo: v uma varivel do tipo VETOR. Qualquer elemento da varivel v pode ser referenciado atravs de uma expresso composta pelo nome da varivel seguido de um ndice entre colchetes indicando a posio do vetor que desejamos manipular. O nome um s, o que muda a informao indicada dentro dos colchetes. No exemplo anterior, para referenciar o elemento que est na primeira posio do o vetor especificamos v [1]. J v [5] indica o 5 elemento do vetor. A atribuio de um valor a um vetor obedece a mesma sintaxe usada para a atribuio de valores a variveis dos tipos primitivos, diferindo apenas que o nome da varivel do tipo vetor deve ser acompanhado por ndice indicando em qual posio o valor deve ser armazenado. Assim, considerando a varivel v como declarada no EXEMPLO 3, v [1] idade, um exemplo a de atribuio de um nmero inteiro a 1 posio de v. J o comando v [1] v [1] + 1 indica que ao valor armazenado em v [1] ser somado 1. A leitura e a escrita de elementos armazenados em um vetor so feitas passo a passo, um elemento por vez. Mais uma vez, alm de indicar o nome da varivel que armazenar o valor lido ou a varivel cujo o contedo desejamos escrever, necessrio indicar a posio desejada atravs de um ndice entre colchetes. Assim, ainda considerando o vetor v declarado no exemplo anterior, LEIA (v [2]) um exemplo de um comando de entrada de dados onde o valor lido ser a armazenado na 2 posio do vetor, enquanto ESCREVA (v [1], v [2]) um exemplo de um comando de sada de dados onde os valores armazenados nas posies 1 e 2 do vetor v sero escritos. importante salientar que os elementos de um vetor no podem ser manipulados todos ao mesmo tempo, mas de um em um, um elemento por vez. Aps isolar um nico elemento do vetor, podemos utiliz-lo em comandos de atribuio, de entrada e sada de dados, de seleo, de repetio. EXEMPLO 4: faa um algoritmo que leia 5 nmeros inteiros e determine quantos nmeros so maiores que a mdia aritmtica dos nmeros.
ALGORITMO exemplo TIPO VETOR = ARRAY [1..5] DE INTEIRO

29

ALGORITMOS I
VARIVEIS VETOR: v REAL: mdia INCIO entrada (v) m mdia (v) sada (v, m) FIM PROCEDIMENTO sada (v: VETOR; m: REAL) VARIVEIS INTEIRO: i INCIO PARA i DE 1 AT 5 FAA SE v [i] > m ENTO ESCREVA (v [i]) FIMSE FIMPARA FIM INTEIRO: i, soma INCIO soma 0 PARA i DE 1 AT 5 FAA soma soma + v [i] FIMPARA mdia soma / 5 FIM

PROCEDIMENTO entrada (VAR v: VETOR) VARIVEIS INTEIRO: i INCIO PARA i DE 1 AT 5 FAA LEIA (v [i]) FIMPARA FIM FUNO mdia (v: VETOR): REAL VARIVEIS

E para n valores, com n 100, quais as alteraes que devem ser feitas no algoritmo?

5.1.2 APLICAES: pesquisa e classificao de elementos


So muitas as aplicaes de vetores. Pesquisa e classificao so duas operaes importantes e, embora no sejam usadas somente com vetores, freqentemente so definidas tambm para os mesmo. A pesquisa consiste basicamente na explorao de um vetor a fim de localizar um determinado elemento. Existem muitas formas de pesquisar um elemento em um vetor. Alguns desses mtodos so mais eficientes do que outros e exigem uma organizao/classificao dos elementos do vetor. Classificar um vetor consiste em arranjar seus elementos numa forma seqencial (crescente ou decrescente) utilizando algum critrio de ordenao. Sero descritos dois mtodos para efetuar pesquisa em um vetor. O primeiro mtodo, pesquisa seqencial, consiste em efetuar a busca do elemento desejado a partir da primeira posio do vetor seqencialmente at que o elemento seja encontrado ou at a ltima posio do vetor. O segundo de mtodo de pesquisa, pesquisa binria, exige que o vetor esteja previamente classificado. Assumindo que os elementos do vetor esto armazenados em ordem crescente, o meio aproximado do vetor calculado e seu valor examinado. Caso o valor da posio do meio seja maior que o elemento procurado, ento o meio aproximado da primeira metade do vetor calculado. Caso o valor da posio do meio seja menor que o elemento procurado, ento o meio aproximado da segunda metade do vetor calculado. O procedimento repete at que o elemento desejado seja encontrado ou at que o intervalo de pesquisa torne-se vazio. Existem vrios mtodos de classificao que variam em termos de desempenho e aplicabilidade: classificao por seleo (verso 1): iniciando com o valor que estiver na primeira posio do vetor, uma pesquisa seqencial executada para localizar o menor valor do vetor. O menor valor do vetor copiado para a primeira posio e o valor que estiver na primeira posio copiado para a posio do menor valor do vetor. O processo se repete para o segundo menor valor, para o terceiro menor valor e assim sucessivamente at que todos os valores estejam classificados em ordem crescente no vetor original. 30

ALGORITMOS I classificao por seleo (verso 2): o valor que estiver na primeira posio do vetor deve ser comparado com os valores que estiverem nas outras posies do vetor. Caso o primeiro valor seja maior que algum dos valores seguintes, deve ser feita a troca dos valores. O novo valor ento utilizado nas comparaes subseqentes. Ao final desse processo, na primeira posio do vetor estar armazenado o menor valor. O valor que estiver na segunda posio do vetor deve ser comparado com os valores que estiverem nas outras posies do vetor. Caso o segundo valor seja maior que algum dos valores seguintes, deve ser feita a troca dos valores. O novo valor ento utilizado nas comparaes subseqentes. Ao final desse processo, na segunda posio do vetor estar armazenado o segundo menor valor. O processo se repete sucessivamente at que todos os valores tenham sido colocados em ordem crescente. classificao por bolha (bubble sort): iniciando com a primeira posio do vetor, dois valores adjacentes so trocados imediatamente caso no estejam na ordem certa. Procedemos assim at o final do vetor. Numa primeira anlise, o valor da primeira posio e o valor da segunda posio so comparados e, estando fora de ordem, so trocados; ento valores da segunda e terceira posies so comparados e, estando fora de ordem, so trocados; e assim por diante. O maior valor fica posicionado na ltima posio do vetor, ou seja, aps a primeira anlise o maior valor ocupar a posio n. O processo repetido para os n - 1 valores restantes at que o vetor esteja completamente ordenado. Nas anlises sucessivas, os valores sero colocados nas posies n -1, n - 2, etc. Aps cada anlise, podemos fazer uma verificao para determinar se foi ou no foi feita qualquer troca. Em caso negativo, o vetor est classificado. classificao por insero (insertion sort): parte de um vetor contendo um nico valor e constri um vetor ordenado, inserindo um a um os valores em posies de forma que o vetor continue ordenado. Nesse caso, necessrio movimentar os valores j inseridos para a insero de um novo valor. classificao rpida (quicksort): a estratgia usada dividir para conquistar e tem como idia bsica dividir o vetor em duas partes: na primeira, colocamos todos os valores menores que um determinado valor piv, na segunda, colocamos todos os valores maiores que o valor piv. Esse processo constitui um passo. Aps cada passo reaplicamos o mtodo a cada uma das partes do vetor. A ordenao estar completa quando todas as partes resultantes se reduzirem a um s registro. O algoritmo de classificao dado na forma de um procedimento recursivo. classificao por intercalao (merge sort): parte de dois vetores A e B previamente ordenados de tamanhos n e m, respectivamente, e constri um vetor ordenado C de tamanho n + m. Comparamos o primeiro valor de A com o primeiro valor de B. O menor valor copiado para a primeira posio do vetor resultante C. Em seguida, comparamos o segundo valor daquele vetor cujo primeiro valor foi copiado para o vetor C com o primeiro valor do outro vetor, copiando o menor valor para a segunda posio do vetor resultante C, e assim por diante at que todos os valores dos vetores A e B tenham sido analisados. Desses mtodos, alguns so mais elementares, outros mais avanados. Os mais elementares so mais fceis de entender mas apresentam um menor desempenho. A eficincia de um mtodo de classificao medida pelo nmero de comparaes necessrias para classificar os elementos do vetor.

5.1.3 APLICAES: manipulao um STRING como um VETOR de caracteres


Um STRING uma seqncia de caracteres ASCII de comprimento varivel e tamanho mximo 255. Um STRING pode ser visto como um vetor de caracteres indexado de 1 at o seu tamanho mximo definido quando de sua declarao. A maior diferena entre um STRING e um vetor de caracteres que um STRING pode ser lido, escrito e comparado como uma varivel 31

ALGORITMOS I simples, enquanto que os componentes de um vetor de caracteres devem ser tratados um a um. A declarao de um STRING feita especificando-se um nome para a varivel e, opcionalmente, o nmero mximo de caracteres a serem armazenados. Abaixo encontramos alguns exemplos de declarao de STRING: VARIVEIS STRING: s1 STRING [10]: s2 onde a varivel s1 um STRING que pode armazenar no mximo 255 caracteres e s2 um STRING que pode armazenar no mximo 10 caracteres. Em PASCAL existe um conjunto de funes (indicadas com a letra F) e procedimentos (indicados com a letra P) que podem ser utilizados para a manipulao de STRING, quais sejam:
DESCRIO / USO operadores relacionais uso: READLN (nome); WRITELN (nome = 'joo' ); resultado: valor lgico TRUE ou FALSE + concatenao de STRING uso: s1 := 'descrio'; s2 := 'uso'; WRITELN (s1 + '/' + s2); resultado: 'descrio/uso' CONCAT ( s1, [s2, ... , sn]) concatena uma seqncia de STRINGs (s1, s2, ... sn) uso: s := CONCAT ('descrio', '/', 'uso'); WRITELN (s); resultado: 'descrio/uso' COPY (s, posio, tamanho) copia um substring de um STRING (s) a partir da posio especificada, com um determinado tamanho. uso: s := COPY (realocar, 3, 3); WRITELN (s); resultado: 'alo' DELETE (s, posio, tamanho) apaga um substring de um STRING (s) a partir da posio especificada, com um determinado tamanho. uso: s := realocar; DELETE (s, 1, 6); WRITELN (s); resultado: 'ar' INSERT (s1, s2, posio) insere um substring (s1) em um STRING (s2) a partir da posio especificada. uso: s := alocar; INSERT (RE, s, 1); WRITELN (s); resultado: 'REalocar' retorna o nmero de caracteres de um STRING (s). LENGTH (s) uso: tamanho := LENGTH (realocar); WRITELN (tamanho); resultado: 8 POS (s1, s2) retorna a posio de um substring (s1) dentro de um STRING (s2). uso: s2 := 'realocar'; posicao := POS ('alo', s2); WRITELN (posicao); resultado: 3 o STR (nmero [:tamanho [:n casas decimais], converte um valor numrico (nmero) em um STRING (s). Os s) parmetros entre colchetes so opcionais e indicam o tamanho do STRING e o no de casas decimais a serem usadas na converso. uso: numero := 41.705; STR (numero:7:1, s); WRITELN (s); resultado: ' 41.7' = <> < <= > >=

32

ALGORITMOS I
P VAL(s, nmero, cdigo) converte um STRING (s) para sua representao numrica (nmero). Aps a execuo do procedimento, a varivel cdigo conter um valor que ser igual a zero, se a converso for bem sucedida, ou igual posio do erro encontrado, em caso contrrio. uso: VAL ('171', n, v); WRITELN (n, c); 171 0 resultado:

5.2

VARIVEL INDEXADA: MATRIZ

Uma matriz, como um vetor, uma varivel indexada que permite o armazenamento de mais de um elemento. composta por um nmero fixo de elementos os quais tm todos o mesmo tipo. A declarao de uma varivel indexada bidimensional (matriz) feita especificandose um nome para a varivel, duas dimenses separadas por vrgula entre colchetes e o tipo dos elementos, da seguinte forma:

FORMA GERAL declarao de uma varivel indexada (matriz): VARIVEIS


ARRAY [limite_inferior1..limite_superior1, limite_inferior2..limite_superior2] DE TIPO: nome_da_varivel

dimenses onde: dimenses devem ser do tipo INTEIRO, CARACTER ou LGICO, limite_inferior1 < limite_superior1 e limite_inferior2 < limite_superior2. TIPO deve ser um dos tipos primitivos vistos (INTEIRO, REAL, CARACTER, STRING, LGICO)

A primeira dimenso da matriz representa a linha e a segunda dimenso representa a coluna. As matrizes podem ter mais dimenses, mas utilizamos comumente matrizes de duas dimenses, as quais podem ser visualizadas como tabelas. Abaixo encontramos alguns exemplos de declarao de matrizes: VARIVEIS ARRAY [1..5, 1..5] DE INTEIRO: tabela ARRAY [1990..1999, 'A'..'Z'] DE STRING: nomes onde a varivel tabela uma varivel capaz de armazenar simultaneamente 25 nmeros inteiros e a varivel nomes varivel capaz de armazenar simultaneamente 260 STRINGs. Assim como para vetores, tambm para matrizes possvel definir um novo tipo de dado a partir da estrutura ARRAY e dos tipos primitivos. A definio de um tipo de dado matriz feita especificando-se um nome para o novo tipo, duas dimenses separadas por vrgula entre colchetes e o tipo dos elementos, da seguinte forma:

33

ALGORITMOS I

FORMA GERAL declarao de um tipo de dado (matriz): TIPO


nome_do_tipo = ARRAY [limite_inferior1..limite_superior1, limite_inferior2..limite_superior2] DE TIPO

dimenses onde: dimenses devem ser do tipo INTEIRO, CARACTER ou LGICO, limite_inferior1 < limite_superior1 e limite_inferior2 < limite_superior2. TIPO deve ser um dos tipos primitivos vistos (INTEIRO, REAL, CARACTER, STRING, LGICO) ou outro tipo definido pelo programador

Abaixo encontramos alguns exemplos da definio de tipo de dados matriz: EXEMPLO 5: TIPO MATRIZ = ARRAY [1..5, 1..5] DE INTEIRO VARIVEIS MATRIZ: tabela onde a varivel tabela uma varivel do tipo MATRIZ. Uma varivel do tipo MATRIZ uma varivel indexada capaz de armazenar simultaneamente 25 nmeros inteiros. EXEMPLO 6: CONSTANTE mximo = 5 TIPO ms = (jan, fev, mar, abr, mai, jun, jul, ago, set, out, nov, dez) PRODUO = ARRAY [1..mximo, jan..mar] DE REAL VARIVEIS PRODUO: tabela onde a varivel tabela uma varivel do tipo PRODUO. Uma varivel do tipo PRODUO uma matriz capaz de armazenar simultaneamente 15 nmeros reais, onde o ndice da linha um valor inteiro entre 1 e mximo, e o ndice da coluna um valor (do tipo enumerado ms) entre jan e mar.

5.2.1 OPERAES: atribuio, leitura e escrita


Como fazer referncia ou selecionar um elemento da matriz? Vamos considerar o exemplo abaixo: EXEMPLO 7: ALGORITMO exemplo CONSTANTE mximo = 5 TIPO ms = (jan, fev, mar, abr, mai, jun, jul, ago, set, out, nov, dez) PRODUO = ARRAY [1..mximo, jan..mar] DE REAL

34

ALGORITMOS I VARIVEIS PRODUO: tabela REAL: preo INTEIRO: cdigo_produto INCIO LEIA (cdigo_produto, preo) tabela [cdigo_produto, jan] preo tabela [cdigo_produto, fev] tabela [cdigo_produto, jan] * 1.05 LEIA (tabela [cdigo_produto, mar]) ESCREVA (tabela [1, fev]) FIM Neste exemplo, o tipo PRODUO um tipo criado pelo programador que pode armazenar no mximo 15 nmeros reais. Assim, como j existem os tipos INTEIRO, REAL, CARACTER, STRING e LGICO, no algoritmo acima, existe tambm o tipo PRODUO. possvel declarar qualquer varivel como sendo desse tipo: tabela uma varivel do tipo PRODUO. Qualquer elemento da varivel tabela pode ser referenciado atravs de uma expresso composta pelo nome da varivel seguido por dois ndices entre colchetes indicando a posio (linha e coluna) da matriz que desejamos manipular. O nome um s, o que muda a informao indicada dentro dos colchetes. No exemplo anterior, para referenciar o elemento que est na primeira linha e na coluna fev da matriz especificamos tabela [1, fev]. A atribuio de um valor a uma matriz obedece a mesma sintaxe usada para a atribuio de valores a vetores, diferindo apenas que o nome da varivel do tipo matriz deve ser acompanhado por dois ndices indicando em qual posio o valor deve ser armazenado. Assim, considerando a varivel tabela como declarada no EXEMPLO 7, tabela [cdigo_produto, jan] preo, um exemplo de atribuio de um nmero real a posio (cdigo_produto, jan) da tabela. J o comando tabela [cdigo_produto, fev] tabela [cdigo_produto, jan] * 1.05 indica que o preo do produto cujo cdigo cdigo_produto no ms de fev(ereiro) ser o preo do produto no ms de jan(eiro) acrescido de 5%. A leitura e a escrita de elementos armazenados em uma matriz devem ser feitas passo a passo, um elemento por vez. Mais uma vez, alm de indicar o nome da varivel que armazenar o valor lido ou a varivel cujo o contedo desejamos escrever, necessrio indicar a posio desejada atravs de dois ndices entre colchetes. Assim, ainda considerando a matriz tabela declarada no exemplo anterior, LEIA (tabela [cdigo_produto, mar]) um exemplo de um comando de entrada de dados, enquanto ESCREVA (tabela [1, fev]) um exemplo de um comando de sada de dados. importante salientar que, como os elementos de um vetor, tambm os elementos de uma matriz no podem ser manipulados todos ao mesmo tempo, mas de um em um, um elemento por vez. Aps isolar um nico elemento, podemos utiliz-lo em comandos de atribuio, de entrada e sada de dados, de seleo, de repetio. EXEMPLO 8: faa um algoritmo que leia e some 2 matrizes de ordem m x n (m 20, n 10).
ALGORITMO elementos TIPO MATRIZ: ARRAY [1..20,1..10] DE INTEIRO VARIVEIS MATRIZ: m1, m2, r INTEIRO: m, n INCIO LEIA (m, n) entrada (m1, m, n) entrada (m2, m, n) soma (m1, m2, r, m, n) sada (r, m, n) FIM

35

ALGORITMOS I
PROCEDIMENTO entrada (VAR r: MATRIZ, m, n: INTEIRO) VARIVEIS INTEIRO: linha, coluna INCIO PARA linha DE 1 AT m FAA PARA coluna DE 1 AT n FAA LEIA (r [linha, coluna]) FIMPARA FIMPARA FIM PROCEDIMENTO sada (r: MATRIZ, m, n: INTEIRO) VARIVEIS INTEIRO: linha, coluna INCIO PARA linha DE 1 AT m FAA PARA coluna DE 1 AT n FAA ESCREVA (r [linha, coluna]) FIMPARA FIMPARA FIM

PROCEDIMENTO soma (m1, m2: MATRIZ, VAR r: MATRIZ, m, n: INTEIRO) VARIVEIS INTEIRO: i, j INCIO PARA i DE 1 AT m FAA PARA j DE 1 AT n FAA r [i, j] m1 [i, j] + m2 [i, j] FIMPARA FIMPARA FIM

Podemos observar que para percorrer um vetor usamos um nico comando de repetio, fazendo variar o ndice. Como uma matriz possui mais de uma dimenso (ndice), faz-se necessria a utilizao de comandos de repetio em mesmo nmero de dimenses da matriz. Quando forem usadas matrizes bidimensionais, para percorrer a matriz usamos dois comandos de repetio.

36

ALGORITMOS I

BIBLIOGRAFIA
FARRER, H. et al. Programao estruturada e computadores: algoritmos estruturados. Rio de Janeiro: LTC, 1989. 259 p. FORBELLONE, A.L.V.; EBERSPCHER, H.F. Lgica de Programao: a construo de ALGORITMOS e ESTRUTURA DE DADOS. So Paulo: Makron Books do Brasil, 1993. 178 p. MANZANO, J.A.N.G.; YAMATUMI, W.Y. Programando em Turbo PASCAL 7.0: guia prtico de orientao e desenvolvimento. So Paulo: rica, 1996. 362 p. SALIBA, W.L.C. Tcnicas de programao: uma abordagem estruturada. So Paulo: Makron Books do Brasil, 1992. 141 p. THIRY, M. Lgica: notas de aula. Curso de Cincia da Computao: UNIVALI. Biguau/SC. 1994. TREMBLAY, J.P.; BUNT, R.B. Cincias dos computadores: uma abordagem algortmica. So Paulo: McGraw-Hill, 1989. 402 p. XIMENES, F. Microsoft Press Dicionrio de Informtica Ingls-Portugus Portugus-Ingls. Rio de Janeiro: Campus, 1993, 500 p.

37

Potrebbero piacerti anche