Você está na página 1de 32

SUMRIO

1. ntroduo
1.1 Programas de computadores
1.1.1 O que um computador
2. Executando um programa
2.1 Estruturao de algoritmos
2.1.1Linguagem natural
2.1.2 Fluxograma
2.1.3 Pseudocdigo
3. Manipulao de Dados
3.1 Tipos inteiros
3.2 Tipos Reais
3.3 Tipos Caracteres
3.4 Tipos Lgicos
4. O uso de variveis
4.1 Trabalhando com as variveis
4.1.1 Atribuio
4.2 Operadores
5. Comandos de Entrada e Sada de Dados
6. Comando de Controle Estrutura de Seleo
6.1 Comando IF
6.1.1Comandos aninhados e operadores lgicos
6.2 Comandos escolha...caso
7. Estruturas de Repetio
7.1 O comando enquanto..faca
7.2 O comando para..faca
7.3 O comando repita..ate
8.Estrutura de dados unidimensionais
8.1Vetor
8.2Matriz
9. Trabalhando com procedimentos e funes
9.1 Passagem de Parmetros por Referncia
Introduo
Muitas definies podem ser dadas
palavra algoritmo. Atualmente, tem-se
associado algoritmo computao, mas este
no um termo restrito computao ou que
tenha nascido com ela. O termo algoritmo
tambm utilizado em outras reas, como
engenharia, administrao entre outras.
Vejamos algumas definies de algoritmo:
Um procedimento passo a passo
para a soluo de um problema
Uma seqncia detalhada de
aes a serem executadas para
realizar alguma tarefa.
Um exemplo clssico de algoritmo a
receita culinria. A receita tem todas as
caractersticas de um algoritmo. Ela tem uma
seqncia detalhada de passos, descrita no
modo de preparo. Apresenta a tarefa a ser
realizada. Alm disso, podemos identificar na
receita entradas (no caso os ingredientes) e
uma sada, que pode ser, por exemplo, um
bolo.
1.1. Programas de Computador
1.1.1. O que um programa
Os computadores das mais variadas
arquiteturas tm funcionamento similar. A
Figura 1 apresenta a arquitetura simplificada
de um computador.
Figura 1 rquitetura simp!i"i#ada de um #omputador
A parte fsica do computador
chamada de hardware, que formado
basicamente por uma Unidade Central de
Processamento (CPU), pela memria e pelos
dispositivos de entrada e sada. O
barramento faz a ligao desses
componentes. A CPU (ou processador)
contm um conjunto relativamente pequeno
de instrues que capaz de executar. Cada
processador contm um conjunto diferente
de instrues, apesar de similares entre si.
As instrues que o processador executa so
buscadas da memria. Essas instrues
podem ser desde operaes matemticas a
interaes com os dispositivos de entrada e
sada. Chamamos de programa de
computador um conjunto de instrues que
ser executado pelo processador em uma
determinada seqncia. Esse programa leva
o computador a executar alguma tarefa.
Como podemos perceber, um
programa nada mais que um tipo de
algoritmo. Sua particularidade que suas
operaes so especficas para o
computador e restritas ao conjunto de
instrues que o processador pode executar.
Podemos considerar esse conjunto de
instrues como a primeira linguagem de
programao do computador, tambm
chamada de linguagem de mquina.
Classificamos as linguagens de programao
segundo a sua proximidade com a linguagem
de mquina - quanto maior a semelhana
com a linguagem de mquina, mais baixo o
nvel da linguagem.
As linguagens de programao mais
semelhantes linguagem de mquina so
conhecidas como linguagens de baixo nvel.
Analogamente, linguagens de programao
"distantes da linguagem de mquina
so conhecidas como linguagens de
programao de alto nvel. Linguagens de
programao de alto nvel so mais prximas
da linguagem natural e guardam pouca
similaridade com a linguagem da mquina
em que sero executadas.
A linguagem de programao que um
computador capaz de compreender
composta apenas de nmeros. Assim, fazer
algoritmos na linguagem de programao do
computador ou em sua linguagem de
mquina um processo extremamente
complicado para ns, seres humanos,
acostumados com a nossa prpria
linguagem. Por isso, para facilitar a
programao de computadores, foi
necessria a criao de um cdigo que
relacionasse a linguagem de mquina a uma
linguagem mais fcil de ser compreendida. A
linguagem de montagem (ou assembly) um
cdigo que tem uma instruo alfanumrica
(ou mnemnica) para cada instruo
numrica em linguagem de mquina. Para
que um programa escrito em linguagem de
montagem possa ser executado pelo
computador, necessrio que seu cdigo
seja traduzido para o cdigo de mquina. sto
feito por meio de um programa chamado
assembler. A Figura 2 apresenta o esquema
de traduo feita por um assembler.
Figura $ % &raduo para a !inguagem de m'quina.
A linguagem de montagem muito
prxima da linguagem de mquina e, por
isso, uma linguagem de programao de
baixo nvel. Para cada processador, h uma
linguagem de montagem j que h uma
relao direta entre as instrues em
linguagem de montagem e em linguagem de
mquina. sto faz com que o cdigo tenha
que ser refeito se quisermos executar um
programa em um processador no
compatvel com o qual ele foi escrito
inicialmente. Neste caso, dizemos que o
cdigo no portvel.
A implementao de programas
nesse tipo de linguagem ainda muito
complexa e dependente do conhecimento
das instrues do processador. Para
aumentar a produtividade dos
programadores e a portabilidade dos
programas, foram criadas as linguagens de
programao de alto nvel. Essas linguagens
so independentes do processador em que
sero executadas. Suas caractersticas
principais so que seu cdigo mais
elaborado, contemplando operaes mais
complexas e mais prximas da "lgica
humana. Para que possam ser processadas
por um computador, os comandos da
linguagem precisaro ser traduzidos para a
linguagem de mquina. Essa traduo feita
por meio de um compilador ou de um
interpretador, dependendo do caso, como
veremos a seguir.
$. ()e#utando um programa
O compilador, a partir do cdigo em
linguagem de alto nvel, chamado de cdigo-
fonte, gera um arquivo com o cdigo em
linguagem de mquina, conhecido como
cdigo objeto. Esse cdigo-objeto fica em
disco e s carregado em memria no
momento da execuo. O interpretador faz o
mesmo trabalho, porm no gera o arquivo
em cdigo-objeto. As instrues so
traduzidas para linguagem de mquina em
tempo de execuo, instruo a instruo. A
Figura 3 mostra os passos para a execuo
de um cdigo em linguagem de alto nvel por
meio da compilao. A Figura 4 apresenta o
esquema similar para a interpretao.
Figura * Compi!ao de um programa
Figura + % Interpretao de um programa
Podemos notar que programar um
computador tornou-se muito mais fcil do
que anteriormente. A introduo de
linguagens de alto nvel como Pascal, C,
Cobol, Java, entre outras, aumentou a
produtividade dos programadores, permitindo
que programas mais elaborados fossem
feitos, atendendo a demandas mais
complexas. Alm disso, os cdigos so
portveis, ou seja, independentes da
plataforma mediante nova compilao do
cdigo-fonte.
$.1. (struturao de a!goritmos
$.1.1. ,inguagem natura!
Vimos a evoluo na portabilidade
dos programas de alto nvel e o quanto tais
linguagens de programao se afastaram da
linguagem de mquina e se aproximaram da
"lgica humana. Porm, para um iniciante,
mesmo a linguagem de programao de alto
nvel pode ser um tanto complexa. Claro que
muito mais simples do que programar em
linguagem de mquina ou em linguagem de
baixo nvel, mas o verdadeiro problema
que as pessoas, em geral, no esto
acostumadas a fazer algoritmos.
Diferentemente da linguagem natural,
a linguagem de programao dirigida a
orientar uma mquina e no pessoas.
Mquinas no podem tomar decises com
base em premissas. Mquinas no podem
escolher alternativas, mesmo que estas nos
paream bvias. Mquinas no podem
corrigir comandos mal redigidos. Mquinas
no podem descobrir a inteno do
programador, mesmo que ela seja (ou pelo
menos parea) clara no contexto. Pessoas
fazem tudo isso (pelo menos na maior parte
das vezes) sem sequer notar. Por isso, a
linguagem de programao precisa ter
algumas caractersticas que a linguagem
natural no tem. Veja-as a seguir:
Rigide- sint'ti#a: O compilador
um tradutor relativamente limitado,
que s consegue fazer as
tradues sobre um idioma
bastante limitado, com
construes muito bem definidas.
Apesar de encontrarmos palavras
pertencentes linguagem natural,
elas no sero usadas com a
mesma liberdade.
Rigide- sem.nti#a: O
computador definitivamente no
pode lidar com ambigidades. Por
isso, no adianta o programador
ter uma inteno se no conseguir
exprimi-la de forma exata.
Podemos dizer que o computador
um timo cumpridor de ordens,
porm no tem idia de quais
ordens est cumprindo, nem o
contexto em que essas aes
esto inseridas. Diferentemente
da linguagem de programao, a
linguagem natural apresenta
ambigidades. Veja o exemplo:
A velhinha ouviu o barulho da
janela.
Essa frase curta pode ser interpretada
de pelo menos trs maneiras:
1. A velhinha ouviu o barulho
produzido pela janela.
$. A velhinha estava junto
janela e ouviu o barulho.
*. A velhinha ouviu o barulho
que veio atravs da janela.
Qualquer mquina seria incapaz de
interpretar o que realmente est
acontecendo, mesmo que o contexto
pudesse ajudar. Por isso, a rigidez semntica
to crucial e conseqentemente a
linguagem natural no pode ser utilizada
como ferramenta para a construo de
algoritmos para computador.
A necessidade desses quesitos faz
com que a linguagem natural no seja a
escolha adequada para a escrita de
algoritmos para computador. A segunda
alternativa seria escrever o algoritmo
diretamente na linguagem de programao.
Porm, a rigidez sinttica e a semntica
tornam a escrita de algoritmos diretamente
em uma linguagem de programao real,
mesmo de alto nvel, uma tarefa bastante
difcil, pois as pessoas no esto
acostumadas a essas exigncias para
expressar ordens. Muitas vezes, mesmo em
linguagem natural, esta no uma tarefa
trivial.
Realmente chegamos a um dilema: a
linguagem natural no adequada porque
no tem rigidez sinttica e semntica e a
linguagem de programao no adequada
justamente por ter essas caractersticas.
Parece claro que teremos de encontrar uma
terceira alternativa para expressarmos
algoritmos para computador. Na realidade, j
existem algumas alternativas.
Apresentaremos duas delas: fluxograma e
pseudocdigo.
$.1.$. F!u)ograma
Os fluxogramas apresentam os
algoritmos de forma grfica. So formados
de caixas que contm as instrues a serem
executadas. Tais caixas so ligadas por
setas que indicam o fluxo das aes.
Algumas caixas especiais indicam a
possibilidade de o fluxo seguir caminhos
distintos, dependendo de certas situaes
que podem ocorrer durante a execuo do
algoritmo. Tambm h representaes para
o incio do algoritmo e para o seu final, para
que o fluxo do algoritmo possa ser
determinado do seu princpio at o seu
trmino. A Figura 5 apresenta o exemplo de
um algoritmo na forma de fluxograma para a
escolha e apresentao do maior valor entre
dois nmeros distintos introduzidos pelo
usurio.
De fato, a representao de
algoritmos por meio de fluxogramas tem uma
srie de vantagens. A primeira a facilidade
proporcionada para a compreenso do
funcionamento do algoritmo, mesmo para os
leigos. Algumas pessoas tambm se
adaptam bem ao desenvolvimento de
algoritmos sob essa representao.
Entretanto, a representao grfica
no prtica. A correo de uma linha de
pensamento pode implicar a reconstruo de
muitas instrues. Alm disso, a construo
de algoritmos mais complexos e longos pode
se tornar extremamente trabalhosa,
ocupando vrias pginas. Essas
caractersticas acabam tornando a utilizao
do fluxograma desaconselhvel como
ferramenta principal para o desenvolvimento
de algoritmos. Todavia, a utilizao de
fluxogramas continua sendo til para
apresentao de algoritmos em um nvel de
abstrao alto, sem entrar nos detalhes de
sua implementao.
Figura / % F!u)ograma para a es#o!0a do maior de
dois n1meros distintos
$.1.*. Pseudo#2digo
Algoritmos podem ser representados
em cdigo diretamente em linguagem de
programao. Como j vimos no item 1.3.1, a
implementao de algoritmos diretamente
em uma linguagem de programao
apresenta algumas desvantagens. Porm,
fato que temos algumas vantagens como o
cdigo pronto para a execuo (mesmo que
seja aps a compilao) e, o mais
importante, a rigidez sinttica e a semntica,
que so imprescindveis para que o algoritmo
possa ser lido e executado pelo computador.
O pseudocdigo visa a trazer o
mximo possvel desses benefcios, tentando
diminuir o nus da utilizao da linguagem
de programao. Abre-se mo do cdigo
compilvel para se ter um cdigo menos
rgido, menos dependente das peculiaridades
que todo compilador tem. Ao contrrio da
linguagem de programao, o pseudocdigo
tem um grau de rigidez sinttica intermediria
entre as linguagens natural e de
programao. Alm disso, podemos utilizar o
idioma nativo. Em geral, linguagens de
programao so construdas utilizando
palavras reservadas em ingls, uma espcie
de padro de mercado.
Porm, o pseudocdigo deve manter,
tanto quanto possvel, a rigidez semntica. A
idia que o pseudocdigo seja um passo
intermedirio entre a linguagem natural, a
que os iniciantes esto acostumados, e a
linguagem de programao de alto nvel.
Aps a construo do algoritmo em
pseudocdigo, necessrio que mais um
passo seja executado para que o algoritmo
possa ser compilado e posteriormente
executado. a transformao do
pseudocdigo em cdigo de alguma
linguagem de programao real. O
pseudocdigo independente do compilador
e pode ser traduzido de uma forma quase
direta para uma gama de linguagens de
programao.
Um pseudocdigo bastante conhecido
no Brasil o Portugol, que apresenta uma
aceitao grande e tem suas razes para
isso. bastante simples e atende s
caractersticas necessrias no que concerne
rigidez semntica e sinttica. Entretanto,
o Portugol opta por algumas construes em
detrimento de outras que consideramos
interessantes para o passo posterior, que a
transformao do pseudocdigo em
programa. Tais construes esto presentes
na maior parte das linguagens de
programao de alto nvel e so importantes
para que o programador iniciante fique
acostumado com esse tipo de estruturao.
Veja na Figura 6 um exemplo de
pseudocdigo, referente ao fluxograma
mostrado na Figura 5.
,3ORI&MO aior
4R
num1! num2! maior" Inteiro
In5#io
,eia num1
,eia num2
Se num1#num2 (nto
maior

num1
Seno
aior

num2
fimse
(s#re6a maior$
Fim!goritmo
*. Manipu!ao de 7ados
Uma das principais funcionalidades de
um computador a manipulao de
informaes. Por isso, necessrio que
haja formas de se trabalhar com
diferentes tipos de dados em um
programa. Apesar de internamente o
computador manipular unicamente
nmeros, as linguagens de programao
permitem que utilizemos outros tipos de
informaes nos programas de forma
transparente.
Podemos definir um tipo de dados como
um conjunto de objetos que tem em comum
o mesmo comportamento diante de um
conjunto definido de operaes.
Conheceremos quatro tipos de dados: dados
numricos inteiros, dados numricos reais,
dados caracteres e dados lgicos.
*.1. &ipos inteiros
So tipos inteiros, os dados
numricos positivos ou negativos,
excluindo-se destes qualquer
nmero fracionrio.
Exemplo: 35, 0, -35 ...
*.$. &ipos Reais
So tipos reais, os dados numricos
positivos, negativos e nmeros
fracionrios.
Exemplo: 35, 0, -53, 1.32, -32.456 ...
*.*. &ipos Cara#teres
So tipos caracteres as sequncias
contendo letras, nmeros e smbolos
especiais. Uma sequncia de
caracteres deve ser indicada entre
aspas (").
Exemplo: "Programao, "3333-
3333, "3, "Curso Tcnico, ...
*.+. &ipos ,2gi#os
So tipos lgicos ou booleanos, os
dados com valores verdadeiro e
falso, sendo que este tipo de dado
poder representar apenas um dos
dois valores.
+. O uso de 6ari'6eis
Tm-se como definio de varivel tudo
aquilo que sujeito a variaes, que
incerto, instvel ou inconstante. E quando se
fala de computadores, temos que ter em
mente que o volume de informaes a serem
tratadas grande e diversificado.
Em um computador, manipulamos
informaes que, durante a execuo de um
programa, ficam armazenadas
temporariamente em memria. Todo dado a
ser armazenado na memria de um
computador deve ser previamente
identificado, ou seja, primeiro necessrio
saber qual o seu tipo para depois fazer o seu
armazenamento adequado.
magine que a memria de um
computador um grande arquivo com vrias
gavetas, onde possvel guardar em cada
gaveta apenas um nico valor por vez, e que
estas gavetas devero, como em um arquivo,
estarem identificadas com uma "etiqueta
contendo um nome.
O nome de uma varivel utilizado para
sua identificao e posterior uso dentro de
um programa. Quando criamos uma varivel
em um programa, dizemos que estamos
declarando a varivel. sto , estamos
informando sua existncia. Assim, uma
varivel s pode ser usada durante a
execuo de um programa ou algoritmo,
caso ela j tenha sido declarada inicialmente.
Os nomes das variveis devem comear
por uma letra e depois conter letras, nmeros
ou underline, at um limite de 30 caracteres.
A seo de declarao de variveis
comea com a palavra-chave var, e continua
com as seguintes sintaxes:
%lista&de&vari'veis# : %tipo&de&dado#
Na %lista&de&vari'veis#, os nomes das
variveis esto separados por vrgulas.
Exemplos:
var
a: inteiro
Valor1, Valor2: real
nome_do_aluno: caractere
sinalizador: logico
Note que no h a necessidade de ponto e vrgula aps cada declarao: basta pular linha.
O nmero total de variveis suportado pelo VisuAlg 500.
Para fazer a declarao de varveis, voc deve ter um algoritmo mnimo, que contm a
seguinte estrutura:
a!goritmo 8nome8
6ar
ini#io
"ima!goritmo
+.1. &ra9a!0ando #om as 6ari'6eis
+.1.1. tri9uio
J sabemos onde os dados ficam
armazenados, porm para que possamos
manipul-los necessrio primeiramente
colocar um valor dentro da varivel.
O ato de colocar ou atribuir um valor a
uma varivel chamado de atribuio e
representado pelo smbolo

.
Exemplo:
algoritmo "Exemplo"
var
numero: inteiro
nome, endereco: caractere
resposta: logico
inicio
numero <- 1
nome <- "Maria Lucia"
endereco <- "Praa 5 de
novembro"
resposta <- verdadeiro
fimalgoritmo
+.$. Operadores
Tanto as variveis quanto valores
constantes podem ser utilizados na
elaborao de clculos matemticos.
Exemplo:
algoritmo "Exemplo"
var
Numero1, Numero2, Numero3: inteiro
inicio
Numero1 <- 1010
Numero2 <- 1020
Numero3 <- Numero1 + Numero2
Fimalgoritmo
algoritmo "Exemplo"
var
area: real
base, altura: real
inicio
base <- 2.5
altura <- 3.0
area <- (base*altura)/2
fimalgoritmo
Operadores ritmti#os
+,-
Operadores unrios, isto , so aplicados a um nico operando. So os operadores
aritmticos de maior precedncia. Exemplos: -3, +x. Enquanto o operador unrio - inverte
o sinal do seu operando, o operador + no altera o valor em nada o seu valor.
\
Operador de diviso inteira. Por exemplo, 5 \ 2 = 2. Tem a mesma precedncia do
operador de diviso tradicional.
+,-,*,/
Operadores aritmticos tradicionais de adio, subtrao, multiplicao e diviso. Por
conveno, * e / tm precedncia sobre + e -. Para modificar a ordem de avaliao das
operaes, necessrio usar parnteses como em qualquer expresso aritmtica.
MOD
ou %
Operador de mdulo (isto , resto da diviso inteira). Por exemplo, 8 MOD 3 = 2. Tem a
mesma precedncia do operador de diviso tradicional.
^
Operador de potenciao. Por exemplo, 5 ^ 2 = 25. Tem a maior precedncia entre os
operadores aritmticos binrios (aqueles que tm dois operandos).
raizQ Retorna a raiz quadrada. Por exemplo, raizQ(16)=4
Operadores de Cara#teres
+
Operador de concatenao de strin(s (isto , cadeias de caracteres), quando usado com
dois valores (variveis ou constantes) do tipo "caractere". Por exemplo: "Rio " + " de
Janeiro" = "Rio de Janeiro".
Operadores Re!a#ionais
=, <, >,
<=, >=,
<>
Respectivamente: igual, menor que, maior que, menor ou igual a, maior ou igual a,
diferente de. So utilizados em expresses lgicas para se testar a relao entre dois
valores do mesmo tipo. Exemplos: 3 = 3 ( 3 igual a 3?) resulta em VERDADERO ; "A" >
"B" ("A" est depois de "B" na ordem alfabtica?) resulta em FALSO.
Importante: No VisuAlg, as comparaes entre strin(s no di"eren#iam as letras maisculas das
minsculas. Assim, "ABC" igual a "abc". Valores lgicos obedecem seguinte ordem: FALSO <
VERDADERO.
Operadores ,2gi#os
nao
Operador unrio de negao. nao VERDADERO = FALSO, e nao FALSO =
VERDADERO. Tem a maior precedncia entre os operadores lgicos. Equivale ao NOT
do Pascal.
ou
Operador que resulta VERDADERO quando um dos seus operandos lgicos for
verdadeiro. Equivale ao OR do Pascal.
e
Operador que resulta VERDADERO somente se seus dois operandos lgicos forem
verdadeiros. Equivale ao AND do Pascal.
Xou
Operador que resulta VERDADERO se seus dois operandos lgicos forem diferentes, e
FALSO se forem iguais. Equivale ao XOR do Pascal.
/. Comandos de (ntrada e Sa5da de 7ados
s vezes necessrio que alguns resultados sejam mostrados na tela para o usurio. O
pseudocdigo que estamos estudando utiliza, para isso, o comando escreva ou o comando
escreval.
O formato desses comandos podem ser visto a baixo:
es#re6a (<lista&de&e)press*es#)
ou
es#re6a! (<lista&de&e)press*es#)
Estes comandos escrevem no dispositivo de sada padro (tela do computador) o contedo
de cada uma das expresses que compem %lista&de&e)press*es#. As expresses dentro desta
lista devem estar separadas por vrgulas; depois de serem avaliadas, seus resultados so
impressos na ordem indicada. A diferena entre eles est no modo como eles escrevem o
contedo.
O comando escreva escreve o contedo na tela, e continua na mesma linha.
O comando escreval escreve o
contedo na tela, e pula uma linha
logo em seguida ao que foi escrito.
Algumas vezes necessrio que o usurio escolha os valores das variveis. Para poder
fazer isso ele deve digitar o valor desejado no teclado. O comando que l o valor digitado pelo
usurio o comando leia, cujo o prottipo est descrito abaixo:
leia (%lista&de&vari'veis#)
O comando leia recebe valores digitados pelos usurio, atribuindo-os s variveis cujos
nomes esto em %lista&de&vari'veis# ( respeitada a ordem especificada nesta lista).
Veja no exemplo abaixo o resultado:
algoritmo "Exemplo"
var
numero: inteiro
nome, endereco: caractere
resposta: logico
inicio
numero <- 1
nome <- "Maria Lucia"
endereco <- "Praa 5 de novembro"
resposta <- verdadeiro
escreva("Numero: ,numero)
escreval ("O nome da pessoa e ,nome,
"e ela mora no endereo ",endereco)
fimalgoritmo
;. Comando de Contro!e (strutura de Se!eo
6.1. Comando if
Frequentemente, na construo de programas vamos nos defrontar com problemas onde
necessrio selecionar uma entre duas ou mais situaes possveis. Por exemplo, vamos ao
mercado, escolhemos o que compraremos com base em alguns fatores, como tempo, dinheiro,
meio de transporte, entre outros. Caso tenhamos mais dinheiro, podemos comprar produtos mais
caros. Caso contrrio, escolhemos marcas mais baratas ou deixamos de comprar alguns
produtos. Nesse caso, o dinheiro determina a ao e a forma da compra, que ser dependente
dependendo dessa condio.
Na construo de algoritmos tambm teremos as mesmas necessidades de determinar
aes diferentes dependendo da avaliao de certas condies.
Suponha, por exemplo, um programa em que se necessite mostrar o contedo de uma
varivel do tipo inteiro somente se seu contedo for maior que 10. Veja:
Algoritmo "Exemplo estrutura
condicional"
var
a: inteiro
inicio
escreva ("Digite um nmero: ")
leia (a)
se (a>10) entao
escreva("Posso mostrar - ",a)
"imse
fimalgoritm
Nesse caso, utilizamos o comando
se..senao. O comando se..senao possui a
seguinte estrutura principal:
se (condio) entao
Bloco_de_comando1;
senao
Bloco_de_comand
o2;
"imse
()emp!o:
algoritmo "Exemplo estrutura
condicional"
var
nota: real
inicio
escreva ("Digite a nota do aluno:
")
leia (nota)
se (nota>=10) entao
escreval("Nota maior ou igual
a 10")
senao
escreval("Nota menor que 10")
"imse
fimalgoritmo
Observe que nesse exemplo
utilizamos o operador relacional >. Para
lembrar quais outros operadores relacionais
que podemos utilizar v at a seo 4.2.
;.1.1. Comandos anin0ados e
operadores !2gi#os
Dentro de uma estrutura de seleo
podemos colocar qualquer tipo de comando,
inclusive outros comandos de seleo.
Nesse caso, dizemos que os comandos
esto aninhados.
()emp!o:
Algoritmo "Exemplo de comandos aninhados"
var
a,b: real
inicio
escreva("Digite dois nmeros ")
leia(a,b)
se (a>b) entao
escreva(a," maior que ",b)
senao
se (a<b) entao
escreva(a," menor que ",b)
senao
escreva(a, " igual a ",b)
"imse
"imse
fimalgoritmo
Algumas vezes precisamos utilizar operadores lgicos (relembre quais operadores lgicos
iremos trabalhar lendo a seo 4.2) para facilitar a implementao dos nossos algoritmos. Veja a
seguir um exemplo de utilizao de operadores lgicos.
()emp!o: O algoritmo a seguir imprime a faixa etria a que uma pessoa pertence. A faixa etria
determinada pela seguinte tabela.
Idade Fai)a (t'ria
[0 .. 12] Criana
[13 .. 17] Adolescente
[ 18 .. [ Adulto
Algoritmo "Exemplo faixa etria"
var
idade: real
inicio
escreva("Digite a idade da pessoa:")
leia(idade)

se (idade<0) entao
escreval("dade nvlida")
senao
se (idade>=0) ( (idade<=12) entao
escreval("Faixa Etria: Criana")
senao
se (idade>=13) ( (idade<=17) entao
escreval("Faixa Etria: Adolescente")
senao
se (idade>=18) entao
escreval(" Faixa Etria: Adulto")
fimse
fimse
fimse
fimse
fimalgoritmo
Veja que foi utilizado o operador ( para verificar se as duas condies so verdadeiras.
Ento a condio s ser executada, se a condio, por exemplo, idade>! for verdadeira e se a
condio idade"1# tambm for verdadeira.
Como vimos, existem ainda os operadores $%& e &U. A Tabela Verdade a seguir,
descreve o resultado dos usos desses principais operadores.
&<(, 4(R77(
p q p ( q p OU q =>O p
0 0 0 0 1
0 1 0 1 1
1 0 0 1 0
1 1 1 1 0
A seguir, veja algumas condies se..senao utilizando operadores lgicos.
a<- falso

se (NAO(a)) entao
escreval("1 - Nao
a")
senao
escreval("2 -
Nao a")
fimse
a<-2
resto <- a%2
se (a>0) E (a%2=0) entao
escreval("Numero positivo
e par")
fimse
a<-2
resto <- a%2
se (a>0) OU (a%2=0) entao
escreval("Numero positivo
ou par")
fimse
6.#. Comandos escolha...caso
At o momento o comando de condio que estudamos foi o comando se..senao. Mas
existe outro comando de condio muito estudado: o comando escolha..caso. A sintaxe a
seguinte:
es#o!0a %e)press+o&de&sele,+o#
#aso %e)p11#! %e)p12#! ...! %e)p1n#
%seq-.ncia&de&comandos&1#
#aso %e)p21#! %e)p22#! ...! %e)p2n#
%seq-.ncia&de&comandos&2#
...
outro#aso
%seq-.ncia&de&comandos&e)tra#
"imes#o!0a
A seguir veja dois algoritmos que resolvem o mesmo problema em duas verses: A 1
verso usa o comando se..senao e a outra verso usa o comando escolha..caso. O problema a
ser resolvido pelos algoritmos : /ado dois n0meros! o pro(rama ir' informar o resultado da
opera,+o 1soma! subtra,+o! multiplica,+o e divis+o2 pedida pelo usu'rio.
()emp!o: Uti!i-ando o #omando se..senao.
algoritmo "Operao"
var
a,b:inteiro
op: caractere
inicio
escreva("Digite dois nmeros inteiros: ")
leia(a,b)
escreva("Digite a operao a ser efetuada (+, -, *, /): ")
leia(op)
se (op = "+") entao
escreval(a," + ",b," = ",a+b)
senao
se (op = "-") entao
escreval(a," - ",b," = ",a-b)
senao
se (op = "*") entao
escreval(a," * ",b," = ",a*b)
senao
se (op = "/") entao
escreval(a," / ",b," = ",a/b)
senao
escreval("Operao nvlida")
fimse
fimse
fimse
fimse
fimalgoritmo
Nesse programa, vrios testes so feitos sobre o contedo da varivel op. Neste caso, o
programa se tornou mais trabalhoso do que o necessrio.
Ao invs de escrevermos os vrios testes utilizando se..senao aninhados, e considerando
que todos os testes so realizados sobre uma mesma expresso, podemos utilizar um comando
alternativo. O comando escolha..caso pode ser usado sempre que for necessria a realizao de
vrias selees, tendo-se por base a mesma expresso.
O comando caso..escolha facilita a escrita de programas em que a seleo deve ser feita
entre vrias alternativas.
()emp!o: Uti!i-ando o #omando #aso..es#o!0a.
algoritmo "Operao"
var
a,b:inteiro
op: caractere
inicio
escreva("Digite dois nmeros inteiros: ")
leia(a,b)
escreva("Digite a operao a ser efetuada (+, -, *, /): ")
leia(op)
es#o!0a op
#aso "+"
escreval(a," + ",b," = ",a+b)
#aso "-"
escreval(a," - ",b," = ",a-b)
#aso "*"
escreval(a," * ",b," = ",a*b)
#aso "/"
escreval(a," / ",b," = ",a/b)
outro#aso
escreval("Operao nvlida")
"imes#o!0a
fimalgoritmo
O comando caso..escolha testa as
opes na ordem em que aparecem, e ser
realizada a instruo relativa primeira
operao que satisfazer o valor da
expresso. A sequncia de comandos
associada quele caso ser executada at
que outro caso seja encontrado. Caso
nenhuma das opes satisfaa o valor da
expresso, ento ser executada a
sequncia de comandos colocadas em
outrocaso.
O comando escolha..caso difere do
comando se..senao porque caso..escolha
s2 pode testar igua!dade? enquanto
se..senao pode a6a!iar uma e)presso
!2gi#a ou re!a#iona!.
Duas constantes caso no mesmo
escolha no podem ter o mesmo valor.
@. (struturas de Repetio
Existem situaes em que, para se
obter a soluo de um problema
computacional, necessrio que
determinados trechos de programa sejam
repetidos certa quantidade de vezes. Essa
quantidade de vezes vai ser controlada pelo
prprio programa, dependendo de
determinadas condies a serem satisfeitas.
remos estudar trs comandos (laos)
de repetio: o comando enquanto..fa'a, o
comando para..fa'a e o comando
repita..at.
@.1. O #omando enquanto..faca
Considere o problema: "Leia 4
nmeros inteiros, calcule e escreva a mdia
aritmtica deles. Primeiramente, veja a
soluo desse programa sem usar laos de
repetio:
algoritmo "Operao"
var
num1, num2, num3, num4, soma:inteiro
media: real
inicio
escreva("Digite quatro nmeros inteiros: ")
leia(num1, num2, num3, num4)
soma <- num1+num2+num3+num4
media <- soma/4
escreval("A mdia dos quatro nmeros ",media)
fimalgoritmo
Observe que os atos de ler um nmero e som-lo so comandos que devero ser
repetidos.
Agora, faa o mesmo algoritmo, mas ao invs de ler quatro nmeros, voc ler 100
nmeros. Complicou no ? Neste caso, cabe o uso de comandos de repetio.
O comando enquanto..fa,a tem a seguinte forma geral:
enquanto %e)press+o&l3(ica# "a#a
%seq-.ncia&de&comandos#
"imenquanto
Quando o programa em execuo encontra o comando enquanto..faca, ele primeiro avalia
se a expresso lgica verdadeira. Se sim, o trecho do cdigo que est dentro do bloco de
comandos ser executado. Aps a execuo dos comandos do bloco de comandos, o programa
volta para a linha do enquanto..faca e testa novamente se a expresso lgica verdadeira. Assim,
enquanto a expresso for verdadeira, o bloco de comandos ser executado.
()emp!o:
algoritmo "Operao"
var
i: inteiro
inicio
i <- 1
enquanto i<=10 "a#a
escreva(i," ")
i<-i+1
"imenquanto
fimalgoritmo
Quando o programa em execuo encontra o comando enquanto..faca verifica se o
contedo de i menor ou igual a 10. Se sim, o trecho do cdigo que est dentro do bloco de
comandos ser executado o contedo de i ser escrito na tela, e o valor de i ser incrementado.
Aps a execuo dos comandos do bloco de comandos, o programa volta para a linha do
enquanto..faca e testa novamente se a condio verdadeira. Assim, enquanto a condio for
verdadeira i for menor ou igual a 10, o bloco de comandos ser executado.
@.$. O #omando para..faca
O comando para..faca o outra estrutura de repetio que conheceremos. Ele usado para
repetir um comando ou bloco de comandos diversas vezes.
A estrutura do comando para..faca a seguinte:
para %vari'vel# de %valor&inicial# ate %valor&limite# [passo %incremento#] "a#a
%seq-.ncia&de&comandos#
"impara
onde,
<vari'vel >
a varivel contadora que controla o nmero de repeties do lao. Essa
varivel dever ser necessariamente uma varivel do tipo inteiro.
%valor&inicial#
uma expresso que especifica o valor de inicializao da varivel
contadora antes da primeira repetio do lao.
%valor&limite #
uma expresso que especifica o valor mximo que a varivel contadora
pode alcanar.
%incremento #
opcional. Quando presente, precedida pela palavra passo, uma
expresso que especifica o incremento que ser acrescentado varivel
contadora em cada repetio do lao. Quando esta opo no utilizada, o
valor padro de %incremento# 1. Vale a pena ter em conta que tambm
possvel especificar valores negativos para %incremento#. Por outro lado, se
a avaliao da expresso <incremento > resultar em valor nulo, a execuo
do algoritmo ser interrompida, com a impresso de uma mensagem de
erro.
fimpara
ndica o fim da seqncia de comandos a serem repetidos. Cada vez que o
programa chega neste ponto, acrescentado varivel contadora o valor
de <incremento >, e comparado a %valor&limite #. Se for menor ou igual (ou
maior ou igual, quando %incremento # for negativo), a seqncia de
comandos ser executada mais uma vez; caso contrrio, a execuo
prosseguir a partir do primeiro comando que esteja aps o fimpara.
Aten,+o" %valor&inicial #! %valor&limite # e %incremento # so avaliados uma 1ni#a 6e- antes da
execuo da primeira repetio, e no se a!teram durante a e)e#uo do !ao, mesmo que
variveis eventualmente presentes nessas expresses tenham seus valores alterados.
Quando o programa em execuo encontra o comando para..faca, ele primeiro executa a
inicializao e testa se a varivel de controle j chegou ao limite. Se a condio verdadeira, ele
executa o bloco de comandos, faz o incremento, e volta a testar a condio. As operaes do
bloco de comandos so repetidas at que a condio de parada seja falsa.
()emp!o: Comparao entre o #omando enquanto.."a#a e o #omando para.."a#a.
Nmero
da linha
Exemplo utilizando
enquanto..faca
Exemplo utilizando
para..faca
Nmero
da linha
1
2
3
4
5
6
7
8
9
10
Algoritmo "Operao"
var
i: inteiro
inicio
i <- 1
enquanto i<=10
"a#a
escreva(i," ")
i<-i+1
"imenquanto
fimalgoritmo
Algoritmo "Operao"
var
i: inteiro
inicio
para i de 1 ate 10
"a#a
escreva(i," ")
"impara
fimalgoritmo
1
2
3
4
5
6
7
8
9
10
Observe que o nmero de linhas no exemplo utilizando o comando para..faca menor que
no exemplo utilizando enquanto..faca. sso acontece porque a inicializao, a condio de parada
e o incremento encontram-se em uma mesma linha (na linha 5) quando utilizamos o comando
para..faca. J no exemplo utilizando o comando enquanto..faca a inicializao feita na linha 5, a
condio de parada feita na linha 6 e o incremento feito na linha 7. Mas pense bem: o nmero
de linhas menor, mas eles trabalham da mesma forma, repetindo a execuo de algumas linhas
de cdigo.
Importante: Se, logo no incio da primeira repetio, %valor&inicial # for maior que %valor&
limite # (ou menor, quando %incremento# for negativo), o lao no ser executado nenhuma vez.
Veja o exemplo a seguir.
algoritmo "Numeros de 10 a 1 (no funciona)"
var j: inteiro
inicio
para j de 10 ate 1 faca
escreva (j)
fimpara
fimalgoritmo
Nesse exemplo nada ser impresso, pois o
valor de j inicia com 10 e o valor de parada
1, isto , o valor inicial maior que o valor
limite. Para que seja possvel escrever em
ordem descrescente, teremos que usar da
diretiva passo. Veja um exemplo.
algoritmo "Numeros de 10 a 1 (este funciona)"
var j: inteiro
inicio
para j de 10 ate 1 passo -1 faca
escreva (j)
fimpara
fimalgoritmo
Esse exemplo ir funcionar devido diretiva
passo (1. sto , j ir iniciar em 1, e ir
decrementar de 1 em 1 at chegar ao 1.
@.*. O #omando repita..ate
O comando repita..ate o outra estrutura de repetio que conheceremos. Ele usado para
repetir um comando ou bloco de comandos diversas vezes.
Quando o programa em execuo encontra o comando repita, ele executa o bloco de
comandos, faz o incremento da varivel de controle, e ento testa a lgica. As operaes do bloco
de comandos so repetidas at que a expresso lgica da condio de parada seja verdadeira.
A estrutura do comando repita..at a seguinte:
repita
%seq-.ncia&de&comandos#
ate %e)press+o&l3(ica#
onde,
repita ndica o incio do lao.
ate <e)press+o&l3(ica>
ndica o fim da %seq-.ncia&de&comandos# a serem repetidos. Cada vez
que o programa chega neste ponto, %e)press+o&l3(ica# avaliada: se
seu resultado for FALSO, os comandos presentes entre esta linha e a
linha repita so executados; caso contrrio, a execuo prosseguir a
partir do primeiro comando aps esta linha.
A. (strutura de dados unidimensionais
A.1. 4etor
At aqui, os algoritmos que escrevemos manipularam tipos real, inteiro, caractere e l3(ico.
Uma varivel declarada como real, por exemplo, constitui-se em uma posio de memria que
permite o armazenamento de exatamente um valor, e do tipo real. Como as variveis desse tipo,
armazenam apenas um valor, so denominadas de variveis simples.
()emp!o:
algoritmo "Operao"
var
x: inteiro
y: real
inicio
escreva("Digite um nmero inteiro: ")
leia(x)
escreva("Digite um nmero real: ")
leia(y)
escreva("Digite outro nmero inteiro: ")
leia(x)
escreva("Digite outro nmero real: ")
leia(y)
fimalgoritmo
}
Veja que dessa forma que o algoritmo foi construdo, se o usurio quiser saber qual foi o
primeiro nmero digitado pelo usurio ao final da execuo, no ser possvel, pois o 1 valor foi
sobrescrito.
Para tentar resolver o problema de sobrescrever os valores, existem os tipos denominados
estruturados, que so de dois tipos: unidimensionais )vetor* e multidimensionais )matri+*.
Vamos considerar o caso em que temos que manipular as notas de um aluno. Considere
que temos que fazer um programa que leia as 4 notas de um aluno, e ao final, escreva na tela,
todas as notas e a mdia que o aluno tirou. Utilizando um tipo simples, como real, por exemplo,
teramos que criar quatro variveis, cada uma tendo um nome diferente, para armazenar cada
uma das notas. Vamos ver como o programa ficaria.
algoritmo "Operao"
var
nota1, nota2, nota3, nota4, media: real
inicio
escreva("Digite a primeira nota: ")
leia(nota1)
escreva("Digite a segunda nota: ")
leia(nota2)
escreva("Digite a terceira nota: ")
leia(nota3)
escreva("Digite a quarta nota: ")
leia(nota4)
escreval("Notas dos alunos")
escreval("1 nota = ",nota1)
escreval("2 nota = ",nota2)
escreval("3 nota = ",nota3)
escreval("4 nota = ",nota4)
media <- (nota1+nota2+nota3+nota4)/4
escreva("Media final = ",media)
fimalgoritmo
Utilizando o tipo estruturado unidimensional, o programa ficar como a seguir:
algoritmo "Operao"
var
notas: vetor[1..4] de real
media: real
inicio
escreva("Digite a primeira nota: ")
leia(notas[1])
escreva("Digite a segunda nota: ")
leia(notas[2])
escreva("Digite a terceira nota: ")
leia(notas[3])
escreva("Digite a quarta nota: ")
leia(notas[4])
escreval("Notas dos alunos")
escreval("1 nota = ",notas[1])
escreval("2 nota = ",notas[2])
escreval("3 nota = ",notas[3])
escreval("4 nota = ",notas[4])
media <- (notas[1]+notas[2]+notas[3]+notas[4])/4
escreva("Media final = ",media)
fimalgoritmo
Veja que, utilizando vetor, podemos armazenar as notas do aluno em uma nica varivel.
Uma varivel estruturada unidimensional (vetor) constitui-se em um conjunto de posies de
memria e cada posio de memria permite o armazenamento de um valor.
A forma geral para declarar um vetor :
<Nome_varivel>: 6etor [<posio_inicial .. posio_final>] de <tipo#
()emp!os:
O acesso a uma posio do vetor feito atravs de um ndice.
()emp!o:
Para facilitar o acesso s posies do vetor utiliza-se laos de repetio para indicar as posies
que sero acessadas. Veja:
algoritmo "Operao"
var
notas: vetor[1..4] de real
media: real
i: inteiro
inicio
para i de 1 ate 4 faca
escreva("Digite a",i," nota: ")
leia(notas[i])
fimpara
para i de 1 ate 4 faca
escreval(i," nota = ", notas[i])
fimpara
para i de 1 ate 4 faca
media <- media + notas[i]
fimpara
media <- media/4
escreva("Media final = ",media)
fimalgoritmo
A.$. Matri-
Nas ltimas aulas trabalhamos com
vetores. Um vetor uma nica varivel com
capacidade de guardar vrios contedos. Um
vetor pode ser visto como uma tabela com
uma nica linha e vrias colunas.
Trabalharemos agora com variveis
multidimensionais - as matrizes. Mais
especificamente trabalharemos com matrizes
bidimensionais. Uma matriz bidimensional
pode ser vista como uma tabela com vrias
linhas e vrias colunas.
A forma geral para declarar uma
matriz de duas dimenses :
<Nome_varivel>: 6etor [<posio_inicial_linha .. posio_final_linha , posio_inicial_coluna ..
posio_final_coluna >] de <tipo#
()emp!os:
Cada um dos "quadrinhos uma clula - da matriz acessado atravs de ndices. Ns
devemos indicar a qual linha e a qual coluna pertence a clula que estamos querendo acessar.
Veja:
B. &ra9a!0ando #om pro#edimentos e
"unCes
A principal caracterstica da
programao estruturada modelar a
resoluo do problema atravs da sua
diviso em subproblemas menores de forma
a facilitar o trabalho de modelagem da
resoluo correta, pois cada problema (ou
subproblema) poder ser analisado
individualmente e independentemente dos
demais. Construindo dessa forma, a soluo
do problema ser feita em vrias partes, que
so chamadas de mdulos, fun',es ou
procedimentos.
Ns j conhecemos algumas funes
e procedimentos, mesmo sem saber que
esse era o nome dado a elas. Por exemplo,
trabalhamos com a funo rai45, ou os
procedimentos leia e escreva.
magine que voc precise fazer um
programa que calcule a seguinte expresso
matemtica:
! 3
! 2
! 1
num
num
num
A = .
Com os conhecimentos adquiridos at
agora em nossa disciplina, uma soluo
possvel poderia ser a seguinte:
algoritmo "Exemplo com funo"
var
num1, num2, num3: inteiro
fatorial_num1,fatorial_num2,fatorial_num3,i:inteiro
A: real
inicio
escreva("Digite 3 nmeros inteiros: ")
leia(num1, num2, num3)
"atoria!Dnum1 E% 1
para iE%num1 ate 1 passo %1 "a#a
"atoria!Dnum1 E% "atoria!Dnum1Fi
"impara
"atoria!Dnum$ E% 1
para iE%num$ ate 1 passo %1 "a#a
"atoria!Dnum$ E% "atoria!Dnum$Fi
"impara
"atoria!Dnum* E% 1
para iE%num* ate 1 passo %1 "a#a
"atoria!Dnum* E% "atoria!Dnum*Fi
"impara
A <- (fatorial_num1/fatorial_num2)*fatorial_num3
escreval("Valor final da equao => ",A)
fimalgoritmo
Observe que para construir essa
soluo, tivemos que inserir as linhas para
calcular o fatorial de um nmero trs vezes
(observe os trechos destacados).
Desta forma, alguns problemas
acabam possuindo solues muito maiores
que o necessrio, podendo mais difceis de
entender ou at mesmo corrigir.
As funes podem ser utilizadas
justamente para resolver esses problemas.
Uma funo um trecho de cdigo que
podem ser executados vrias vezes,
bastando para isso cham-las em alguma
parte do cdigo.
A seguir, veja outra soluo para
resolver a equao ! 3
! 2
! 1
num
num
num
A = ,
mas agora utilizando funo.
algoritmo "Exemplo com funo"
var
num1, num2, num3: inteiro
fatorial_num1,fatorial_num2,fatorial_num3:inteiro
A: real

funcao Fatorial(N: inteiro): inteiro
var
fat,i: inteiro
inicio
fat <- 1
para i<-N ate 1 passo -1 faca
fat <- fat*i
fimpara
retorne fat
fimfuncao
inicio
escreva("Digite 3 nmeros inteiros: ")
leia(num1, num2, num3)
"atoria!Dnum1 E% Fatoria!Gnum1H
"atoria!Dnum$ E% Fatoria!Gnum$H
"atoria!Dnum* E% Fatoria!Gnum*H
A <- (fatorial_num1/fatorial_num2)*fatorial_num3
escreval("Valor final da equao => ",A)
fimalgoritmo
Observe agora que o nmero de linhas do algoritmo diminuiu.
Um procedimento um subprograma que no retorna nenhum valor. Sua declarao, que
deve estar entre o final da declarao de variveis e a linha "inicio do programa principal, segue a
sintaxe abaixo:
pro#edimento %nome&de&procedimento# [G%seq-.ncia&de&declara,*es&de&par6metros#H]
// Seo de Declaraes nternas
inicio
// Seo de Comandos
"impro#edimento
A declarao de uma funo deve estar entre o final da declarao de variveis e a linha
inicio do programa principal.
A sintaxe para declarao de variveis est seguir:
"un#ao %nome&de&fun,+o# [G%seq-.ncia&de&declara,*es&de&par6metros#H]: %tipo&de&dado#
// Seo de Declaraes nternas
inicio
// Seo de Comandos
"im"un#ao
O %nome&de&fun,+o# ou %nome&de&
procedimento# obedecem s mesmas regras
de nomenclatura das variveis.
A %seq-.ncia&de&declara,*es&de&
par6metros# uma seqncia com a
seguinte estrutura:
[var] %seq-.ncia&de&par6metros#: %tipo&de&
dado#
separadas por ponto e vrgula.
A presena (opcional) da palavra-
chave var indica passagem de parmetros
por referncia; caso contrrio, a passagem
ser por valor. (Veremos a seguir mais
detalhes)
Por sua vez, %seq-.ncia&de&
par6metros# uma seqncia de nomes de
parmetros (tambm obedecem a mesma
regra de nomenclatura de variveis)
separados por vrgulas.
O valor retornado pela funo ser do
tipo especificado na sua declarao (logo
aps os dois pontos). Em alguma parte da
funo (de modo geral, no seu final), este
valor deve ser retornado atravs do comando
retorne.
De modo anlogo ao programa
principal, a seo de declarao interna
comea com a palavra-chave var, e continua
com a seguinte sintaxe: %lista&de&vari'veis# :
%tipo&de&dado#.
Veja a seguir exemplos de um
procedimento e de uma funo que calcula a
mdia aritmtica de 4 nmeros.
procedimento somaproc (x,y,z,w: inteiro)
var res:inteiro
inicio
res <- x + y + z + w
escreval("soma com procedimento = ",res)
fimprocedimento
funcao somafuncao (x,y,z,w: inteiro):inteiro
inicio
retorne(x+y+z+w)
fimfuncao
Observe que a principal diferena
entre um procedimento e uma funo o tipo
de retorno utilizando o retorne no final da
funo. O que no acontece com o
procedimento.
B.1. Passagem de Par.metros por
Re"erIn#ia
H ainda outra forma de passagem de
parmetros para subprogramas: a
passagem por refer-ncia. Neste caso, o
subprograma no recebe apenas um valor,
mas sim o endereo de uma varivel global.
Portanto, qualquer modificao que for
realizada no contedo deste parmetro
afetar tambm a varivel global que est
associada a ele. Durante a execuo do
subprograma, os parmetros passados por
referncia so anlogos s variveis globais.
Essa passagem feita atravs da palavra
var na declarao do parmetro.
Veja o exemplo a seguir. O
procedimento adiciona 1 a todas as variveis
passadas para o procedimento. Mas como
somente as variveis ) e 7 foram passadas
por referncia, somente elas retornaro ao
algoritmo principal com os valores
modificados.
algoritmo "semnome"
var
a,b,c,d,s:inteiro
procedimento somafuncao (6ar x,y: inteiro; z,w: inteiro):inteiro
inicio
x <- x + 1
y <- y + 1
z <- z + 1
w <- w + 1
fimprocedimento
inicio
escreva("Digite quatro nmeros: ")
leia(a,b,c,d)
somafuncao(a,b,c,d)
escreval(" a = ",a)
escreval(" b = ",b)
escreval(" c = ",c)
escreval(" d = ",d)
escreval("Soma com funcao = ",s)
fimalgoritmo

REFERNCA BBLOGRFCA
Bibliografia Bsica:
BORATTI, I. C.; OLIVEIRA, A. B. De. Introduo progr!o " #gor$t!o%. 2 Ed. &#or$n'po#$%( V$%u#
Boo)%, 2**+.
SILVA, Camila C. da. Lgica de programao: Aprendendo a programar. Santa
Cruz do Rio Pardo: Editora Viena, !!".
Bibliografia Complementar:
A,CE-CIO, A. &. .. L'g$/ de progr!o /o! p%/#. 1 Ed. ,o 0u#o( 1)ron, 2**2.