You are on page 1of 15

Conceitos bsicos de algoritmos e pseudocdigo ______________________________1

1.1 Algoritmo ______________________________________________________________ 1 1.2 O Pseudocdigo _________________________________________________________ 2 1.3 Variveis _______________________________________________________________ 2 1.4 Literais ________________________________________________________________ 3 1.5 Expresses Aritmticas ___________________________________________________ 3
1.5.1 Operadores Aritmticos ________________________________________________________ 3 1.5.2 Regras de hierarquia dos operadores aritmticos _____________________________________ 4

1.6 Expresses Lgicas ou booleanas ___________________________________________ 5 1.7 Instrues Algortmicas Bsicas____________________________________________ 6


1.7.1 Entrada _____________________________________________________________________ 6 1.7.2 Sada _______________________________________________________________________ 6 1.7.3 Corpo do algoritmo____________________________________________________________ 6 1.7.3.1 Atribuio __________________________________________________ 6 1.7.3.2 Deciso Simples______________________________________________ 7 1.7.3.3 Deciso com caso oposto _______________________________________ 7 1.7.3.4 Iterao para frente ___________________________________________ 7 1.7.3.5 Iterao para trs _____________________________________________ 7 1.7.3.6 Loops ______________________________________________________ 8 1.7.3.7 Verificao de Casos __________________________________________ 8

Rotinas e Passagem de parmetros_________________________________________9


Variveis ________________________________________________________________________ 9 Parmetros _______________________________________________________________________ 9 Parmetros por valor _______________________________________________ 11 Parmetros por referncia ___________________________________________ 11

Exemplos de Invocaes ____________________________________________________ 12


A Procedimentos _________________________________________________________________ 12 A Funes ______________________________________________________________________ 13

Concluses _______________________________________________________________ 14

CONCEITOS BSICOS DE ALGORITMOS E PSEUDOCDIGO 1.1 Algoritmo


Um algoritmo um conjunto ordenado e finito de instrues que conduzem soluo de um problema. Na vida cotidiana executamos constantemente algoritmos. Por exemplo, ao instalar uma aparelho de som executamos as instrues contidas no manual do equipamento, este conjunto de instrues constituem um algoritmo. Outro caso de algoritmo o algoritmo matemtico de Euclides para a obteno do mximo divisor comum de dois nmeros. Quando um algoritmo pode ser executado por um computador, diz-se que um algoritmo computacional, caso contrrio, diz-se que um algoritmo no computacional. Segundo isto, o algoritmo de Euclides um algoritmo computacional, mas o algoritmo para instalar o aparelho de som um algoritmo no computacional. Para um algoritmo poder ser executado por um computador, ele precisa ser expresso em instrues compreensveis pelo computador, para isto necessria uma determinada linguagem de programao. O algoritmo expresso em uma determinada linguagem de programao, denomina-se programa. Em outras palavras, podemos dizer que um programa a implementao de um algoritmo em uma determinada linguagem de programao seguindo as regras estabelecidas pela linguagem escolhida. Na Figura a seguir, apresenta-se a relao entre problema, algoritmo e programa

Figura Problema, algoritmo e programa Todo algoritmo deve ter as seguintes caractersticas: Deve ser preciso, ou seja, cada instruo deve indicar em forma inequvoca o que deve ser feito. Deve ser finito, ou seja, deve ter um nmero limitado de passos. Deve ser definido, ou seja, deve produzir os mesmos resultados para as mesmas condies de entrada. Todo algoritmo pode se decompor em trs partes: 1. Entrada de dados. 2. Processo. 3. Sada de resultados

Exemplo: Algoritmo para preparar um molho de chocolate no microondas. ENTRADAS: 2 colheres de cacau 1/3 xcara de manteiga 2 colheres de gua 1 xcara de acar colherinha de baunilha 1 pitada de sal SADAS: O molho de chocolate pronto para servir.. INCIO Aquecer 1 minuto no microondas a gua, com a manteiga e o cacau (tudo misturado). Acrescentar batendo os demais ingredientes. Colocar no microondas mais 30 segundos.

FIM

Evidentemente este um algoritmo no computacional, no poder ser executado por um computador, mas sim por uma pessoa.

Exemplo: Algoritmo para expressar em centmetros e polegadas uma quantidade dada em metros. ENTRADAS: A quantidade M de metros SADAS: A quantidade C de centmetros e a quantidade P de polegadas INCIO Clculo de centmetros : C = M*100 Clculo de polegadas : P = C/2.54 FIM Este um algoritmo computacional escrito em linguagem natural. Pode se fazer a converso para um programa de computador (para o qual temos que escrev-lo em uma linguagem de programao), mas tambm pode ser executado manualmente por uma pessoa.

1.2 O Pseudocdigo
O pseudocdigo uma linguagem de pseudoprogramao utilizada para escrever algoritmos computacionais. Como linguagem de pseudoprogramao, o pseudocdigo uma imitao de uma ou mais linguagens de programao. Desta maneira podemos encontrar pseudocdigos orientados a linguagens de programao como Pascal, Java, C, C++, etc. No caso deste curso orientaremos os pseudocdigos linguagem Java. O objetivo do pseudocdigo permitir ao programador se focar nos aspectos lgicos da soluo, evitando as regras de sintaxe das linguagens de programao. tambm fcil modificar o pseudocdigo caso sejam encontrados erros ou anomalias na lgica do programa, alm disso, fcil sua traduo s linguagens de programao. No sendo o pseudocdigo uma linguagem formal, os pseudocdigos variam de um programador para outro, ou seja, no h um pseudocdigo padro.

1.3 Variveis
Uma varivel uma localizao ou casa na memria principal que armazena um valor que pode mudar no decurso da execuo do programa. Quando um programa precisa armazenar um dado, ele precisa de uma varivel. Toda varivel tem um nome, um tipo de dado e um valor. Antes de poder utilizar uma varivel necessrio declar-la especificando seu nome e seu tipo de dado. Para declarar variveis usaremos os seguintes formatos: Declarao de uma varivel: tipo nome Declarao de vrias variveis com o mesmo tipo de dado: tipo nome1, nome2, nome3, ..., nomen Na qual tipo o tipo de dado da varivel, que pode ser: INTEIRO (se a varivel ir armazenar um nmero inteiro), REAL (se a varivel ir armazenar um nmero decimal) , CARACTER (se a varivel ir armazenar um caractere), CADEIA (se a varivel ir armazenar um conjunto de caracteres) ou LOGICO (se a varivel ir armazenar o valor verdadeiro ou o valor falso). Nomes das variveis. O nome de uma varivel deve comear com uma letra, um smbolo de sublinhado ou um smbolo de dlar. Outros caracteres do nome podem ser letras, smbolos de sublinhado ou smbolo de dlar. Tambm deve se levar em conta que uma letra maiscula se considera diferente de uma letra minscula.

nome1, nome2 nomen...,

Exemplo: Declarao de variveis A seguinte instruo declara a varivel idade de tipo INTEIRO e a varivel desconto de tipo REAL. INTEIRO idade REAL desconto Isto cria as casas de memria idade e desconto. Depois da criao, as variveis esto indefinidas ( ? ). idade desconto ? ?

A seguinte instruo declara as variveis nota1, nota2 e nota3, todas do tipo INTEIRO. INTEIRO nota1, nota2, nota3 Isto cria as casas de memria nota1, nota2 e nota3. Depois da criao, as variveis esto indefinidas ( ? ). nota1 nota2 nota3 ? ? ?

1.4 Literais
Denominam-se literais todos aqueles valores que figuram no pseudocdigo e podem ser: Literais inteiros 12, 20300, 15, etc. Literais reais 3.1416, 2345.456, etc. Literais de caracteres 'a', 'B', ';', '<', '+', etc. Literales de cadeia "Oi", "Algoritmos Computacionais", etc. Literais lgicos verdadeiro, falso

1.5 Expresses Aritmticas


Uma expresso aritmtica uma combinao de variveis, literais e operadores aritmticos. .

1.5.1 Operadores Aritmticos


Na tabela a seguir apresentam-se os operadores aritmticos que iremos utilizar. Tabela Operadores aritmticos Operador + Significado Adio Subtrao Exemplo a+b a-b

* / %

Multiplicao Diviso Resduo

a*b a/b a%b

Os operadores aritmticos podem utilizar-se com tipos inteiros e reais. Se em uma operao com dois operandos, ambos os operandos so inteiros, o resultado um inteiro; se algum deles real, o resultado real. Assim, 15/4 3 e no 3.75; no entanto, 15.0/4 3.75.

1.5.2 Regras de hierarquia dos operadores aritmticos


Quando uma expresso aritmtica tem mais de um operador aritmtico, a ordem de aplicao dos operadores segue uma ordem precisa determinada pelas regras de hierarquia dos operadores aritmticos apresentados na seguinte tabela. Tabela Regras de hierarquia dos operadores aritmticos Operador () *, /, % +, Ordem de avaliao Avaliam-se em primeiro lugar Avaliam-se em segundo lugar Avaliam-se em terceiro lugar

Se existirem parnteses aninhados, avalia-se primeiro a expresso no par mais interno. Se vrios operadores ou parnteses tm a mesma hierarquia, a avaliao ser de esquerda para a direita. Exemplo: Qual o equivalente em pseudocdigo da seguinte expresso algbrica?

Soluo e = a/b/c Como todos os operadores tm a mesma hierarquia, a avaliao ser de esquerda para a direita: Primeiro, ser dividido a entre b. Segundo, o resultado j obtido de a/b ser dividido entre c. Observe que a ordem desta execuo de acordo com a expresso algbrica, por isso no necessrio nenhum par de parntese.

a e= b c

Exemplo: Qual o equivalente em pseudocdigo da seguinte expresso algbrica?

Soluo e = a*b*c/d/e Como todos os operadores tm a mesma hierarquia, a avaliao ser de esquerda para a direita: Primeiro, ser multiplicado a por b. Segundo, o resultado j obtido de a*b ser multiplicado por c. Terceiro, o resultado j obtido de a*b*c ser dividido entre d. Quarto, o resultado j obtido de a*b*c/d ser dividido entre e. Observe que a ordem desta execuo est de acordo com a expresso algbrica, por isso no necessrio nenhum par de parnteses.

abc e= d e

1.6 Expresses Lgicas ou booleanas


Uma expresso lgica combina variveis, literais, operadores aritmticos, operadores relacionais e operadores lgicos. Os operadores relacionais e os operadores lgicos so exibidos nas tabelas que apresentamos a seguir. Ambos geram um resultado booleano. Tabela Operadores relacionais Operador > >= < <= == != Significado maior que maior ou igual a menor que menor ou igual a igual a diferente de Exemplo a>b a >= b a<b a <= b a == b a != b

Tabela Operadores lgicos ou booleanos Operador ! && || Significado No E Ou Exemplo !a a && b a || b

Tabelas de verdade: a Verdadeiro Falso a Falso Falso Verdadeiro verdadeiro b Falso Verdadeiro Falso Verdadeiro !a Falso Verdadeiro a && b Falso Falso Falso Verdadeiro a || b Falso Verdadeiro Verdadeiro Verdadeiro

1.7 Instrues Algortmicas Bsicas


Existem trs instrues algortmicas bsicas que so as seguintes.

1.7.1 Entrada
Consiste em obter um dado de um dispositivo de entrada, como o teclado, e armazen-lo em uma varivel. Em geral, a ao de ingressar um dado a uma varivel expressada no pseudocdigo mediante a palavra LER, da seguinte forma: LER varivel Por exemplo, a instruo: LER estatura solicita o ingresso de um valor de algum dispositivo de entrada (como o teclado), para guardar o valor digitado na varivel estatura.

1.7.2 Sada
Consiste em mostrar o valor de uma varivel em um dispositivo de sada, como a tela. Em geral, a ao de mostrar o valor de uma varivel expressada no pseudocdigo mediante a palavra IMPRIMIR da seguinte forma: IMPRIMIR (varivel) Por exemplo, a instruo: IMPRIMIR (ImportnciaCompra) mostra, em algum dispositivo de sada (como a tela), o valor da varivel ImportnciaCompra.

1.7.3 Corpo do algoritmo


No corpo (ou body, em ingls) onde escrevemos o que conforma o algoritmo como tal. Ou seja, onde escrevemos, em forma ordenada, os passos a seguir (as instrues) para resolver o problema que resolve o algoritmo. As instrues podem ser quaisquer das que se mencionam a seguir.

1.7.3.1 ATRIBUIO
Consiste em atribuir a uma varivel o valor de uma expresso. A expresso pode ser uma simples varivel, um simples literal ou uma combinao de variveis, literais e operadores. A atribuio expressada no pseudocdigo da seguinte forma: varivel = expresso No qual varivel e o valor de expresso devem ter o mesmo tipo de dado. Quando se atribui um valor INTEIRO a uma varivel REAL, ento o valor INTEIRO ser convertido em REAL antes de armazenar-se. Assim, ao atribuir o valor INTEIRO 25 a uma varivel REAL, ser armazenado 25.0. Exemplo: Algoritmo para expressar em centmetros e polegadas uma quantidade dada em metros. Sobre este mesmo exemplo j vimos antes seu algoritmo computacional escrito em linguagem natural. Vejamos agora uma soluo em pseudocdigo, utilizando conceitos computacionais de varivel, entrada de dados e sada de resultados. A soluo considera que 1 metro = 100 centmetros e que 1 polegada = 2.54 centmetros. INCIO // Declara as variveis M, C e P REAL M, C, P // Solicita o ingresso da quantidade em metros, guardando o mencionado valor na varivel M

LER M // Calcula a quantidade em centmetros e o atribui varivel C C = M*100 // Calcula a quantidade em polegadas e o atribui varivel P P = C/2.54 // Mostra os valores das variveis C e P IMPRIMIR (C, P) FIM

1.7.3.2 DECISO SIMPLES


SE condio ......... FIM SE (IF cond ENDIF)

1.7.3.3 DECISO COM CASO OPOSTO


SE condio .......... SE NO ......... FIM SE (IF cond ELSE ENDIF)

1.7.3.4 ITERAO PARA FRENTE


PARA valor inicial AT valor final ................ FIM PARA (FOR TO [STEP] ENDFOR)

1.7.3.5 ITERAO PARA TRS


PARA valor inicial AT valor final PASSO -1 ................ FIM PARA

1.7.3.6 LOOPS

1.

Com verificao de condio ao incio ENQUANTO condio FAZER .............. FIM ENQUANTO (DO WHILE cond)

2.

Com verificao de condio ao final REPETIR .............. AT condio

1.7.3.7 VERIFICAO DE CASOS


EM CASO QUE varivel SEJA CASO 1: ................. CASO 2: ................. CASO 3: ................. EM OUTRO CASO ................. FIM EM CASO (DO CASE CASE cond 1: ................. CASE cond 2: ................. OTHERWISE: ................. ENDCASE)

ROTINAS E PASSAGEM DE PARMETROS

Uma rotina um conjunto de sentenas que tm um identificador associado (nome da rotina) e so executadas como grupo quando invocada. Com as rotinas (tambm chamadas subprogramas) dispe-se de uma estrutura muito apropriada para praticar o mtodo de desenvolvimento em etapas sucessivas, que consiste em abordar o desenho dos programas decompondo o Problema em partes mais simples e repetindo este processo em forma sucessiva at que a soluo de cada uma das partes seja trivial. Ento resulta fcil desenvolver cada um dos elementos do programa, depur-los e prov-los independentemente at ele funcionarem corretamente. Com esse enfoque, o programa fica organizado em mdulos, que se expressam em forma de rotinas. O desenho modular est voltado a conseguir programas confiveis e legveis: - O esforo da programao concentra-se finalmente em subproblemas pequenos e simples. - fcil escrever mdulos pequenos livres de erro e verific-los independentemente com dados simulados. - As listas pequenas som mais legveis. - Resulta natural a adaptao ao trabalho em equipe. As tarefas de desenvolver os mdulos podem se dividir entre vrias pessoas. Geralmente, usam-se dois tipos de rotinas: os PROCEDIMENTOS e as FUNES. Os procedimentos so usados para realizar um conjunto de aes. Invocam-se com uma sentena executvel denominada "chamada a procedimento". As funes so usadas para obter e devolver um valor. Invocam-se quando um identificador de funo aparece dentro de uma expresso.

Variveis
Nas rotinas possvel utilizar e modificar variveis do escopo de um programa em determinadas condies. As variveis GLOBAIS so conhecidas ao longo de todo o programa e existem durante toda a execuo. As variveis que s tm significado em uma parte do programa chamam-se LOCAIS. So as que se declaram em um procedimento ou funo e so conhecidas s no mesmo e em qualquer outro que estiver aninhado dentro. Tm a existncia garantida s enquanto durar a execuo do procedimento ou funo na qual foram declaradas, depois, libera-se o espao que ocupavam em memria ficando disponvel para ser utilizado por outras. Em terceiro lugar, fala-se de variveis DO SISTEMA, fazendo referncia s que esto definidas na linguagem (compilador). Obviamente, estas so conhecidas em qualquer parte do programa.

Nestas condies, fica claro que em uma rotina (procedimento ou funo) possvel manejar qualquer objeto global e todos os que tiverem sido declarados localmente. Embora seja possvel, no convm atuar sobre variveis globais do interior dos subprogramas para no correr o risco de modificar inadvertidamente valores externos ao procedimento ou funo. prefervel trabalhar com variveis de mbito local e dispor de alguma via para relacion-las com as definidas a nvel global e com as que so locais de outras rotinas.

Parmetros
Em todos estes casos precisa-se dispor de algum mecanismo para intercambiar valores entre as rotinas e o resto do programa. Isso se obtm mediante as listas dos PARMETROS, chamados tambm ARGUMENTOS. Denominam-se parmetros ou argumentos de uma rotina (procedimento ou funo) aqueles dados (variveis ou expresses) que so necessrios para a execuo da rotina. A rotina ou subprograma podem ser vistos como uma caixa preta que realiza uma funo determinada,

para a qual precisa de certos dados de entrada para produzir certos dados de sada. Dados de entrada Dados de sada

SUBPROGRAMA

Quando -

se desenha uma rotina, especifica-se: O QUE deve fazer a rotina Quais DADOS DE ENTRADA precisa Quais DADOS DE SADA produz

Distingue-se ento entre: Parmetros de entrada: dados de entrada necessrios para executar a rotina Parmetros de sada: dados de sada que produz a rotina depois de sua execuo Parmetros de entrada/sada: dados que so usados como entrada e nos quais tambm guardado um resultado de sada Na especificao da rotina descrevem-se os parmetros formais. A esse respeito deve se dizer que: Os parmetros especificam-se entre parnteses Os parmetros separam-se com vrgula (',') A especificao dos parmetros formais inclui: o Uma das palavras ENTRADA, SADA, ENTRADA/SADA, conforme for um dado de entrada, de sada ou de entrada/sada respectivamente o Ao igual que numa declarao de variveis, inclui-se o tipo e o nome do parmetro

Exemplo: desenhar um procedimento Adicionar que tome como entrada dois nmeros inteiros e devolva como sada o resultado de sua adio. A seguir, especifica-se: O QUE deve fazer a rotina: adicionar dois nmeros inteiros e devolver o resultado da soma. Quais DADOS DE ENTRADA precisa: adicionando1 e adicionando2 do tipo inteiro. Quais DADOS DE SADA produz: resultado do tipo inteiro. ENTRADA inteiro somando1 inteiro somando2 SADA inteiro resultado

Soma

A especificao do procedimento Adicionar a seguinte: SUBPROGRAMA Somar (ENTRADA inteiro somando1, ENTRADA inteiro somando2, SADA inteiro resultado) incio fim resultado = somando1 + somando2

Os parmetros indicados na declarao das rotinas chamam-se PARMETROS FORMAIS. So identificadores de variveis locais com as quais possvel introduzir e tirar valores nas rotinas. Nas funes, os parmetros formais s permitem a entrada, visto que a sada produz um valor nico que vai associado ao identificador da prpria funo. Os parmetros indicados na chamada s rotinas so os PARMETROS REAIS. A correspondncia entre os parmetros formais e os reais se estabelece pela posio que ocupam nas listas, e a substituio se realiza aplicando alguns dos mecanismos seguintes: por VALOR, por

REFERNCIA. Segundo o mecanismo que atua, fala-se de vrias classes de parmetros:

PARMETROS POR VALOR


Na substituio POR VALOR, avalia-se o parmetro real, e o valor resultante dessa avaliao atribui-se ao parmetro formal correspondente. O parmetro real pode se expressar como uma constante, uma varivel ou uma expresso. O uso de um parmetro passado por valor consiste na mera transferncia de um valor rotina invocada (chamada). Estes so parmetros de entrada. podem-se modificar dentro da rotina, mas isso no afeta o parmetro real correspondente. No permitem tirar informao da rotina.

PARMETROS POR REFERNCIA


Permitem aplicar o mecanismo de substituio POR REFERNCIA, pelo que se produz uma associao entre parmetro real e parmetro formal que consiste em uma espcie de substituio. Na realidade atribuem-se ao identificador de parmetro formal os mesmos endereos de memria que correspondem ao parmetro real, de forma tal que qualquer modificao que se produzir dentro da rotina afeta os parmetros reais que so entidades externas ao mesmo. Para descrever graficamente a situao, pode se imaginar uma flecha para cada parmetro formal, que una seu nome com o endereo de memria no qual est armazenado seu parmetro real correspondente. Toda operao que afetar o parmetro formal na realidade realizada sobre o parmetro real. Com este mecanismo de substituio por referncia, pode-se conseguir a transferncia de informao com as rotinas nos dois sentidos: entrada e sada.

Exemplos de Invocaes
Conforme o que foi visto at agora, veremos exemplos de invocaes (chamadas) a procedimentos e funes.

A Procedimentos
O subprograma invocador, pode invocar o procedimento Somar, com diferentes valores de parmetros conforme seja necessrio. SUBPROGRAMA invocador inteiro V1, V2, V3; caractere c; incio /*no necessrio inicializar V1 pois passado como parmetro de sada (parmetro de retorno) */ invocar Somar (1, 2, V1); /* V1 tem o valor 3 depois da execuo de Somar */ invocar Somar (V1,1+2, V2); /* V2 tem o valor 6 depois da execuo de Somar e V1 no muda seu valor por ser parmetro de entrada */ /* inicializa-se V3 pois passado como parmetro de entrada, deve ento ir com algum valor */ V3 := 10; /* isto se l assim: a V3 atribudo o valor 10 */ invocar Somar (V2,V3, V2); /* uma mesma varivel passada como primeiro parmetro e terceiro parmetro; V2 vai com valor 6, e tem o valor 16 depois da execuo de Somar. V3 no muda seu valor por ser parmetro de entrada */ /* neste ponto cumpre-se que V1=3, V2=16 e V3=10*/ invocar Somar (1,3,5); invocar Somar (1,3,c); fim invocador; /* ERRO, no possvel passar um valor como parmetro de sada */ /* ERRO, no h compatibilidade de tipos no terceiro parmetro */

A invocao de um subprograma realizada com parmetros reais. A esse respeito, necessrio dizer que:

Associa-se conforme a ordem de apario, cada parmetro formal com cada parmetro real. Por exemplo, em invocar Somar(V1, 3, V2) associa-se: - o parmetro real V1 com o parmetro formal somando1; - o parmetro real 3 com o parmetro formal somando2; - o parmetro real V2 com o parmetro formal resultado; Cada invocao independente das demais, ou seja, com cada invocao existe uma nova associao entre parmetros reais e formais, e portanto no lembrado nada de possveis invocaes anteriores. Deve haver coincidncia ou compatibilidade de tipos entre os parmetros formais e os parmetros reais. Por exemplo, invocar Somar(1, 3, c) d ERRO devido a que o parmetro real c de tipo caractere e o parmetro formal resultado de tipo inteiro. O parmetro real que se associa com um parmetro formal de ENTRADA pode ser tanto uma varivel como uma expresso. Por exemplo, em invocar Somar (V1,1+2, V2); - o parmetro real V1 uma varivel, cujo valor se associa com o parmetro formal somando1 - o parmetro real 1+2 uma expresso, cujo valor se associa com o parmetro formal somando2 O parmetro real que se associa com um parmetro formal de SADA deve ser uma varivel, na qual se guarda o resultado devolvido pela rotina que se invocou. Por exemplo, em

invocar Somar(V2, V3, V2); - o parmetro real V2 uma varivel que se associa (no terceiro parmetro) com o parmetro formal de nome resultado; mas em invocar Somar(1,3,5) - um ERRO tentar associar um valor a um parmetro formal de sada.

A Funes
Existe um caso especial de procedimento, que retorna apenas um dado de sada. Neste caso, em lugar de definir um subprograma da seguinte forma SUBPROGRAMA nome_subprograma (ENTRADA., SADA tipo_sada nome_sada) sendo que possui um nico parmetro de sada, pode-se definir como uma funo que devolve um valor do tipo tipo_sada tipo_sada FUNO nome_funo (ENTRADA ...)

Por exemplo, em lugar de definir um procedimento Somar que receba dois parmetros de entrada (somando1 e somando2), e devolva o resultado no parmetro de sada (resultado) SUBPROGRAMA Somar (ENTRADA inteiro somando1, ENTRADA inteiro somando2, SADA inteiro resultado) pode-se definir a funo Somar, que receba os mesmos parmetros de entrada que o procedimento, mas

na especificao de uma funo deve-se indicar o tipo de dado de sada que devolve a funo: inteiro FUNO Somar (ENTRADA inteiro somando1, ENTRADA inteiro somando2)

A implementao da funo Somar levemente diferente ao procedimento, dado que

inteiro incio

todas as funes devem devolver um valor do tipo que especificam em sua definio. FUNO Somar (ENTRADA inteiro somando1, ENTRADA inteiro somando2)

devolver (somando1 + somando2); fim Somar; A diferena do procedimento Somar, na funo no existe o parmetro de sada resultado. Vejamos ento como fica agora o invocador funo Somar: SUBPROGRAMA invocador inteiro V1, V2, V3; carter c; incio /* atribui a V1 o resultado da funo Somar */ V1 := invocar Somar (1, 2); /* V1 tem o valor 3 logo depois da execuo de Somar */ /* atribui A V2 o resultado da funo Somar */ V2 := invocar Somar (V1,1+2); /* V2 tem o valor 6 depois da execuo de Somar e V1 no muda seu valor por ser parmetro de entrada */ /* inicializa-se V3 pois passado como parmetro de entrada */ V3 := 10; /* atribui a V2 o resultado da funo Somar */ V2 := invocar Somar (V2,V3); /* uma mesma varivel passada como primeiro parmetro e usada para guardar o valor devolvido pela funo; V2 tem o valor 16 depois da execuo de Somar e V3 no muda seu valor

por ser parmetro de entrada */ /* neste ponto cumpre-se que V1=3, V2=16 e V3=10 */ 5 := invocar Somar (1,3); c := invocar Somar (1,3); varivel c */ fim invocador; /* ERRO, no possvel atribuir nada a um valor */ /*ERRO, no h compatibilidade de tipos entre a funo Somar e a

A invocao a uma funo tambm levemente diferente da invocao de um procedimento. A esse respeito necessrio dizer que:

Visto que as funes podem se considerar em si prpras como o valor de sada que devolvem, podem fazer parte de uma expresso. Ou seja, a invocao pode se usar em uma expresso da parte direita de uma atribuio, ou em uma expresso que faz parte de uma condio. Por exemplo, V1 := invocar Somar (1, 2); V2 := invocar Somar (V1,1+2); atribui-se s variveis V1 e V2 o resultado de diferentes invocaes da funo Somar. Neste exemplo, pode-se encontrar uma nica instruo equivalente a ambas as instrues: V2 := invocar Somar (invocar Somar (1, 2), 1+2); Em primeiro lugar, avalia-se a invocao mais interna Somar (1,2). O resultado 3 e toma-se como primeiro parmetro real da invocao mais externa. Avalia-se a expresso do segundo parmetro real 1+2, e a seguir realiza-se a invocao mais externa Somar (3, 3). Por ltimo, o resultado 6 atribuido varivel V2.

Da mesma forma em que na associao de parmetros reais e formais deve haver compatibilidade de tipos, tambm deve hav-la entre o tipo que devolve a funo e a expresso em que usada. Por exemplo, c := invocar Somar (1,3); d ERRO devido a que no h compatibilidade de tipos entre a funo Somar e a varivel C.

Concluses
O uso de rotinas em um programa permite dividir um problema em vrios problemas menores e portanto mais fceis de solucionar. A modularizao que se obtm, permite uma manuteno mais simples e oferece a possibilidade de reutilizar o cdigo de um mdulo (rotina) em outros programas. Para a passagem de informao entre rotinas, utilizam-se parmetros, tambm chamados argumentos. Os parmetros podem ser: de entrada, de sada ou de entrada/sada. Isto determina se os parmetros sero passados: por valor (parmetros de entrada), o que implica que a rotina chamada no muda o valor que esse parmetro tinha na rotina chamadora; ou se se sero passados por referncia (parmetros de entrada/sada), mediante o qual a rotina chamada pode mudar o valor original e a rotina chamadora recebe o novo valor. A passagem de parmetros fundamental para garantir um correto fluxo de informao entre os distintos mdulos de um programa, evitando atuar sobre variveis globais do interior das rotinas para no correr o risco de modificar sem perceber valores externos a elas.