Buscar

Linguagem e Técnicas de Programação - Livro-Texto Unidade V

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 89 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 89 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 89 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

237
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO
Unidade V
Até aqui, vimos os comandos que permitem desenvolver a lógica da programação. Essa lógica só 
é desenvolvida pela experiência de resolver desafios cada vez mais complexos. As ferramentas foram 
apresentadas. A partir desta unidade, passaremos a estudar o uso dessa lógica de forma que otimize a 
programação e manipule os dados. Será praticamente um processo de estudo de casos. Gradualmente, 
deixaremos de utilizar o pseudocódigo para nos aprofundarmos na linguagem C, pois será necessário o 
entendimento técnico das situações que serão apresentadas.
5 ESTRUTURA DE DADOS
Como as informações estão organizadas dentro do computador, dentro das pastas, dentro dos 
arquivos? Os dados, de alguma forma, deverão estar dispostos para que seja possível realizar a escrita e 
a sua posterior recuperação de forma íntegra. Assim, as estruturas de dados são formas otimizadas de 
armazenamento e tratamento das informações eletronicamente.
5.1 Dados homogêneos
Uma estrutura de dados que utiliza somente um tipo de dado é conhecida como de dados homogêneos. 
Variáveis compostas homogêneas são aquelas em que as posições de memória são identificadas por um 
mesmo nome e individualizadas por índices, e todos os conteúdos são compostos pelo mesmo tipo. Assim 
como vimos anteriormente os vetores (também conhecidos como estruturas de dados unidimensionais) 
e as matrizes (estruturas de dados bidimensionais), segue a estrutura dos dados homogêneos.
5.1.1 Vetores, strings e matrizes
A forma mais simples de estruturar um conjunto de dados é por meio de vetores. Utilizamos os vetores 
quando temos muitas variáveis do mesmo tipo em um programa. Podemos imaginar o vetor como uma 
“fila” de variáveis do mesmo tipo e do mesmo nome que são identificadas por um número sequencial. Assim, 
podemos definir um vetor como um conjunto de variáveis exatamente do mesmo tipo que armazena, cada 
um associado a um número, que se refere à posição de armazenamento e é conhecido como índice.
Cada posição do vetor pode ser acessada individualmente de forma direta, podendo ser lida ou 
escrita diretamente, como uma variável, conforme vimos aprendendo, e sem obedecer a nenhuma regra 
ou ordem preestabelecida. Assim, os vetores podem ter acesso aleatório.
Segundo Laureano (2008):
O vetor é uma estrutura de dados linear que necessita de somente um índice 
para que seus elementos sejam endereçados. É utilizado para armazenar uma 
238
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
Unidade V
lista de valores do mesmo tipo, ou seja, o tipo vetor permite armazenar mais de 
um valor em uma mesma variável. Um dado vetor é definido como tendo um 
número fixo de células idênticas (seu conteúdo é dividido em posições). Cada 
célula armazena um e somente um dos valores de dados do vetor. Cada uma 
das células de um vetor possui seu próprio endereço, ou índice, através do qual 
pode ser referenciada. Nessa estrutura todos os elementos são do mesmo tipo, e 
cada um pode receber um valor diferente. Algumas características do tipo vetor:
• alocação estática (devem-se conhecer as dimensões da estrutura no 
momento da declaração)
— estrutura homogênea;
• alocação sequencial (bytes contíguos)
— inserção/exclusão;
— realocação dos elementos;
— posição de memória não liberada (LAUREANO, 2008, p. 2).
5,5 6,0 7,0 2,5 10,0 9,5 8,0
1 2 3 4 5 6 7
elementos
índices
Vetor: notas
Figura 236 – Vetor contendo notas
Nessa figura, temos um vetor de sete posições preenchido com notas. Assim, por exemplo, no 
elemento de índice 4, temos como conteúdo a nota 2,5; num outro caso, o elemento de índice 6, temos 
a nota 9,5. Assim, no pseudocódigo, declaramos o vetor conforme segue.
Sintaxe:
<nome>:vetor[inicio..fim] de tipo
A declaração do vetor ilustrado anteriormente fica:
algoritmo “classe”
var
 notas:vetor[1..7] de real
inicio
.
.
fimalgoritmo
239
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO
Para fazermos uma atribuição de um elemento do vetor a uma variável, utilizamos a seguinte sintaxe:
<variável> <- <nome>[índice]
Assim, se fizermos a atribuição NotaPedro<-notas[3], a variável NotaPedro passará a armazenar 
o valor 7,0.
Para fazermos a atribuição de um valor a um elemento do vetor, utilizamos a seguinte sintaxe:
<nome>[índice]<-valor
Se fizermos a atribuição notas[4]<-8,0, o vetor será:
5,5 6,0 7,0 8,0 10,0 9,5 8,0
1 2 3 4 5 6 7
elementos
índices
Vetor: notas
Figura 237 – Nova situação do vetor
Exemplo de aplicação
Faça um programa que leia três temperaturas. Em seguida, calcule a temperatura média e a diferença 
de temperatura de cada uma delas em relação à média.
Resolução:
Caso fosse pedido um programa para calcular somente a temperatura média, teríamos apenas de 
fazer uma soma simples e dividir por 3.
soma<-0
para i de 1 até 3 faça
 leia(t)
 soma<-soma+t 
fimpara
media<-soma/3
O problema, contudo, pede para mostrar a diferença de cada temperatura em relação 
à média. Não temos como fazer a diferença em apenas um laço, pois a média somente será 
calculada após a digitação da última temperatura. Assim, já na primeira entrada, é impossível 
saber a temperatura média, e, se calcularmos a diferença após a última entrada, a informação da 
primeira temperatura já terá sido apagada. Para solucionarmos esse problema, precisamos usar 
o vetor, pois dessa forma temos como armazenar e recuperar cada uma das temperaturas dadas 
como entrada.
240
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
Unidade V
var
 t: vetor[1..3] de real
inicio
soma<-0
para i de 1 até 3 faça
 leia(t[i])
 soma<-soma+t[i] 
fimpara
media<-soma/3
.
.
.
Uma vez calculada a média, poderemos calcular a diferença de cada temperatura com relação à média.
para i de 1 até 3 faça
 escreva(“diferença “,i,” e “,media-t[i])
fimpara
O pseudocódigo inteiro será:
algoritmo “Temperatura”
var
 t:vetor[1..3] de real
 i:inteiro
 soma,media:real
inicio
 soma<-0
 para i de 1 ate 3 faca
 escreva(“digite a temperatura “,i)
 leia(t[i])
 soma<-soma+t[i]
 fimpara
 media<-soma/3
 escreva(“Media das temperaturas”, media)
 para i de 1 ate 3 faca
 escreva(“diferença “,i,” eh “,media-t[i])
 fimpara
fimalgoritmo
241
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO
Fazendo o teste de mesa para as temperaturas 9° C, 18° C e 21° C:
algoritmo “Temperatura”
var
 t:vetor[1..3] de real
 i:inteiro
 soma,media:real
inicio
 soma<-0
 para i de 1 ate 3 faca
 escreva(“digite a temperatura “,i)
 leia(t[i])
 soma<-soma+t[i]
 fimpara
 media<-soma/3
 escreva(“Media das temperaturas”, media)
 para i de 1 ate 3 faca
 escreva(“diferença “,i,” eh “,media-t[i])
 fimpara
fimalgoritmo
Memoria:Temperatura
Figura 238 – A memória do programa Temperatura é 
inicializada
algoritmo “Temperatura”
var
 t:vetor[1..3] de real
 i:inteiro
 soma,media:real
inicio
 soma<-0
 para i de 1 ate 3 faca
 escreva(“digite a temperatura “,i)
 leia(t[i])
 soma<-soma+t[i]
 fimpara
 media<-soma/3
 escreva(“Media das temperaturas”, media)
 para i de 1 ate 3 faca
242
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
Unidade V
 escreva(“diferença “,i,” eh “,media-t[i])
 fimpara
fimalgoritmo
Memoria:Temperatura
t
i soma media tela
1 2 3
Figura 239 – Colocação das variáveis na memória
As variáveis são colocadas na memória. A variável t tem três posições, pois é um vetor.
algoritmo “Temperatura”
var
 t:vetor[1..3] de real
 i:inteirosoma,media:real
inicio
 soma<-0
 para i de 1 ate 3 faca
 escreva(“digite a temperatura “,i)
 leia(t[i])
 soma<-soma+t[i]
 fimpara
 media<-soma/3
 escreva(“Media das temperaturas”, media)
 para i de 1 ate 3 faca
 escreva(“diferença “,i,” eh “,media-t[i])
 fimpara
fimalgoritmo
Memoria:Temperatura
t
i soma media tela
1 2 3
0
Figura 240 – Iniciando a variável soma
Ao iniciar o programa, a variável soma é inicializada com zero, pois ele irá totalizar as 
temperaturas digitadas.
243
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO
algoritmo “Temperatura”
var
 t:vetor[1..3] de real
 i:inteiro
 soma,media:real
inicio
 soma<-0
 para i de 1 ate 3 faca
 escreva(“digite a temperatura “,i)
 leia(t[i])
 soma<-soma+t[i]
 fimpara
 media<-soma/3
 escreva(“Media das temperaturas”, media)
 para i de 1 ate 3 faca
 escreva(“diferença “,i,” eh “,media-t[i])
 fimpara
fimalgoritmo
Memoria:Temperatura
t
i soma media tela
1 2 3
1 0
Figura 241 – Início do laço
O laço se inicia atribuindo o valor inicial à variável de controle i.
algoritmo “Temperatura”
var
 t:vetor[1..3] de real
 i:inteiro
 soma,media:real
inicio
 soma<-0
 para i de 1 ate 3 faca
 escreva(“digite a temperatura “,i)
 leia(t[i])
 soma<-soma+t[i]
 fimpara
 media<-soma/3
 escreva(“Media das temperaturas”, media)
 para i de 1 ate 3 faca
 escreva(“diferença “,i,” eh “,media-t[i])
 fimpara
fimalgoritmo
V
244
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
Unidade V
Memoria:Temperatura
t
i soma media tela
1 2 3
1 0
Figura 242 – Execução do laço
Como i<=3, o laço é executado.
algoritmo “Temperatura”
var
 t:vetor[1..3] de real
 i:inteiro
 soma,media:real
inicio
 soma<-0
 para i de 1 ate 3 faca
 escreva(“digite a temperatura “,i)
 leia(t[i])
 soma<-soma+t[i]
 fimpara
 media<-soma/3
 escreva(“Media das temperaturas”, media)
 para i de 1 ate 3 faca
 escreva(“diferença “,i,” eh “,media-t[i])
 fimpara
fimalgoritmo
Memoria:Temperatura
t
i soma media tela
1 2 3
1 0 digite a 
temperatura 1
Figura 243 – Nova execução do laço
Como i <=3, o laço é executado novamente.
algoritmo “Temperatura”
var
 t:vetor[1..3] de real
 i:inteiro
 soma,media:real
245
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO
inicio
 soma<-0
 para i de 1 ate 3 faca
 escreva(“digite a temperatura “,i)
 leia(t[i])
 soma<-soma+t[i]
 fimpara
 media<-soma/3
 escreva(“Media das temperaturas”, media)
 para i de 1 ate 3 faca
 escreva(“diferença “,i,” eh “,media-t[i])
 fimpara
fimalgoritmo
Memoria:Temperatura
t
i soma media tela
1 2 3
9 1 0 digite a 
temperatura 1
9
Figura 244 – Realização da primeira leitura
A primeira leitura é feita. O valor digitado será atribuído à variável t[i]. Como o conteúdo de i é 1, 
será armazenado na posição t[1].
algoritmo “Temperatura”
var
 t:vetor[1..3] de real
 i:inteiro
 soma,media:real
inicio
 soma<-0
 para i de 1 ate 3 faca
 escreva(“digite a temperatura “,i)
 leia(t[i])
 soma<-soma+t[i]
 fimpara
 media<-soma/3
 escreva(“Media das temperaturas”, media)
 para i de 1 ate 3 faca
 escreva(“diferença “,i,” eh “,media-t[i])
 fimpara
fimalgoritmo
246
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
Unidade V
Memoria:Temperatura
t
i soma media tela
1 2 3
9 1 9 digite a 
temperatura 1
9
Figura 245 – Exibição do valor da soma
A soma acumula o valor de t[i].
algoritmo “Temperatura”
var
 t:vetor[1..3] de real
 i:inteiro
 soma,media:real
inicio
 soma<-0
 para i de 1 ate 3 faca
 escreva(“digite a temperatura “,i)
 leia(t[i])
 soma<-soma+t[i]
 fimpara
 media<-soma/3
 escreva(“Media das temperaturas”, media)
 para i de 1 ate 3 faca
 escreva(“diferença “,i,” eh “,media-t[i])
 fimpara
fimalgoritmo
Memoria:Temperatura
t
i soma media tela
1 2 3
9 1
2
9 digite a 
temperatura 1
9
Figura 246 – Atualização da variável de controle 
Ao encontrar o fimpara, o programa atualiza a variável de controle, e o fluxo retorna para o controle 
do laço.
247
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO
algoritmo “Temperatura”
var
 t:vetor[1..3] de real
 i:inteiro
 soma,media:real
inicio
 soma<-0
 para i de 1 ate 3 faca
 escreva(“digite a temperatura “,i)
 leia(t[i])
 soma<-soma+t[i]
 fimpara
 media<-soma/3
 escreva(“Media das temperaturas”, media)
 para i de 1 ate 3 faca
 escreva(“diferença “,i,” eh “,media-t[i])
 fimpara
fimalgoritmo
V
Memoria:Temperatura
t
i soma media tela
1 2 3
9 1
2
9 digite a 
temperatura 1
9
Figura 247 – Continuação do fluxo no laço
Como i vale 2, então o fluxo prossegue dentro do laço.
algoritmo “Temperatura”
var
 t:vetor[1..3] de real
 i:inteiro
 soma,media:real
inicio
 soma<-0
 para i de 1 ate 3 faca
 escreva(“digite a temperatura “,i)
 leia(t[i])
 soma<-soma+t[i]
 fimpara
 media<-soma/3
 escreva(“Media das temperaturas”, media)
 para i de 1 ate 3 faca
 escreva(“diferença “,i,” eh “,media-t[i])
 fimpara
fimalgoritmo
248
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
Unidade V
Memoria:Temperatura
t
i soma media tela
1 2 3
9 18 1
2
0 digite a 
temperatura 9
digite a 
temperatura 2
18
Figura 248 – Leitura da segunda temperatura
A leitura da segunda temperatura é feita e armazenada na posição t[2], pois a variável i vale 2.
algoritmo “Temperatura”
var
 t:vetor[1..3] de real
 i:inteiro
 soma,media:real
inicio
 soma<-0
 para i de 1 ate 3 faca
 escreva(“digite a temperatura “,i)
 leia(t[i])
 soma<-soma+t[i]
 fimpara
 media<-soma/3
 escreva(“Media das temperaturas”, media)
 para i de 1 ate 3 faca
 escreva(“diferença “,i,” eh “,media-t[i])
 fimpara
fimalgoritmo
Memoria:Temperatura
t
i soma media tela
1 2 3
9 18 1
2
9
27
digite a 
temperatura 1
9
digite a 
temperatura 2
18
Figura 249 – A variável soma acumula o segundo dado
249
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO
algoritmo “Temperatura”
var
 t:vetor[1..3] de real
 i:inteiro
 soma,media:real
inicio
 soma<-0
 para i de 1 ate 3 faca
 escreva(“digite a temperatura “,i)
 leia(t[i])
 soma<-soma+t[i]
 fimpara
 media<-soma/3
 escreva(“Media das temperaturas”, media)
 para i de 1 ate 3 faca
 escreva(“diferença “,i,” eh “,media-t[i])
 fimpara
fimalgoritmo
Memoria:Temperatura
t
i soma media tela
1 2 3
9 18 1
2
3
9
27
digite a 
temperatura 1
9
digite a 
temperatura 2
18
Figura 250 – Atualização da variável de controle
Ao encontrar o fimpara, o programa atualiza a variável de controle, e o fluxo retorna para o controle 
do laço.
algoritmo “Temperatura”
var
 t:vetor[1..3] de real
 i:inteiro
 soma,media:real
inicio
 soma<-0
 para i de 1 ate 3 faca
 escreva(“digite a temperatura “,i)
 leia(t[i])
 soma<-soma+t[i]
 fimpara
 media<-soma/3
 escreva(“Media das temperaturas”, media)
 para i de 1 ate 3 faca
 escreva(“diferença “,i,” eh “,media-t[i])
 fimpara
fimalgoritmo
V
250
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
Unidade V
Memoria:Temperatura
t
i soma media tela
1 2 3
9 181
2
3
9
27
digite a 
temperatura 1
9
digite a 
temperatura 2
18
Figura 251 – Mais uma iteração é realizada
Como 3<=3, é feita mais uma iteração.
algoritmo “Temperatura”
var
 t:vetor[1..3] de real
 i:inteiro
 soma,media:real
inicio
 soma<-0
 para i de 1 ate 3 faca
 escreva(“digite a temperatura “,i)
 leia(t[i])
 soma<-soma+t[i]
 fimpara
 media<-soma/3
 escreva(“Media das temperaturas”, media)
 para i de 1 ate 3 faca
 escreva(“diferença “,i,” eh “,media-t[i])
 fimpara
fimalgoritmo
Memoria:Temperatura
t
i soma media tela
1 2 3
9 18 21 1
2
3
9
27
digite a 
temperatura 1
9
digite a 
temperatura 2
18
digite a 
temperatura 3
21
Figura 252 – Armazenamento do valor digitado
O valor digitado é armazenado na posição t [3].
algoritmo “Temperatura”
var
 t:vetor[1..3] de real
 i:inteiro
251
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO
 soma,media:real
inicio
 soma<-0
 para i de 1 ate 3 faca
 escreva(“digite a temperatura “,i)
 leia(t[i])
 soma<-soma+t[i]
 fimpara
 media<-soma/3
 escreva(“Media das temperaturas”, media)
 para i de 1 ate 3 faca
 escreva(“diferença “,i,” eh “,media-t[i])
 fimpara
fimalgoritmo
Memoria:Temperatura
t
i soma media tela
1 2 3
9 18 21 1
2
3
9
27
48
digite a 
temperatura 1
9
digite a 
temperatura 2
18
digite a 
temperatura 3
21
Figura 253 – Acumulação do valor digitado
O valor digitado é acumulado na variável soma.
algoritmo “Temperatura”
var
 t:vetor[1..3] de real
 i:inteiro
 soma,media:real
inicio
 soma<-0
 para i de 1 ate 3 faca
 escreva(“digite a temperatura “,i)
 leia(t[i])
 soma<-soma+t[i]
 fimpara
 media<-soma/3
 escreva(“Media das temperaturas”, media)
 para i de 1 ate 3 faca
 escreva(“diferença “,i,” eh “,media-t[i])
 fimpara
fimalgoritmo
252
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
Unidade V
Memoria:Temperatura
t
i soma media tela
1 2 3
9 18 21 1
2
3
4
9
27
48
digite a 
temperatura 1
9
digite a 
temperatura 2
18
digite a 
temperatura 3
21
Figura 254 – Atualização da variável de controle
Ao encontrar o fimpara, o programa atualiza a variável de controle, e o fluxo retorna para o controle 
do laço.
algoritmo “Temperatura”
var
 t:vetor[1..3] de real
 i:inteiro
 soma,media:real
inicio
 soma<-0
 para i de 1 ate 3 faca
 escreva(“digite a temperatura “,i)
 leia(t[i])
 soma<-soma+t[i]
 fimpara
 media<-soma/3
 escreva(“Media das temperaturas”, media)
 para i de 1 ate 3 faca
 escreva(“diferença “,i,” eh “,media-t[i])
 fimpara
fimalgoritmo
F
Memoria:Temperatura
t
i soma media tela
1 2 3
9 18 21 1
2
3
4
9
27
48
digite a 
temperatura 1
9
digite a 
temperatura 2
18
digite a 
temperatura 3
21
Figura 255 – O fluxo sai do laço.
253
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO
Como 4>3, o fluxo do programa sairá do laço.
algoritmo “Temperatura”
var
 t:vetor[1..3] de real
 i:inteiro
 soma,media:real
inicio
 soma<-0
 para i de 1 ate 3 faca
 escreva(“digite a temperatura “,i)
 leia(t[i])
 soma<-soma+t[i]
 fimpara
 media<-soma/3
 escreva(“Media das temperaturas”, media)
 para i de 1 ate 3 faca
 escreva(“diferença “,i,” eh “,media-t[i])
 fimpara
fimalgoritmo
Memoria:Temperatura
t
i soma media tela
1 2 3
9 18 21 1
2
3
4
9
27
48
16 digite a 
temperatura 1
9
digite a 
temperatura 2
18
digite a 
temperatura 3
21
Figura 256 – O programa executa o próximo comando
Ao sair do laço, o programa prossegue executando o comando seguinte, no caso, o cálculo da média 
(48/3).
algoritmo “Temperatura”
var
 t:vetor[1..3] de real
 i:inteiro
 soma,media:real
inicio
 soma<-0
 para i de 1 ate 3 faca
 escreva(“digite a temperatura “,i)
 leia(t[i])
 soma<-soma+t[i]
 fimpara
 media<-soma/3
254
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
Unidade V
 escreva(“Media das temperaturas”, media)
 para i de 1 ate 3 faca
 escreva(“diferença “,i,” eh “,media-t[i])
 fimpara
fimalgoritmo
Memoria:Temperatura
t
i soma media tela
1 2 3
9 18 21 1
2
3
4
9
27
48
16 digite a 
temperatura 1
9
digite a 
temperatura 2
18
digite a 
temperatura 3
21
Media das 
temperaturas 16
Figura 257 – Atualização da variável de controle
Ao encontrar o fimpara, o programa atualiza a variável de controle, e o fluxo retorna para o controle 
do laço.
algoritmo “Temperatura”
var
 t:vetor[1..3] de real
 i:inteiro
 soma,media:real
inicio
 soma<-0
 para i de 1 ate 3 faca
 escreva(“digite a temperatura “,i)
 leia(t[i])
 soma<-soma+t[i]
 fimpara
 media<-soma/3
 escreva(“Media das temperaturas”, media)
 para i de 1 ate 3 faca
 escreva(“diferença “,i,” eh “,media-t[i])
 fimpara
fimalgoritmo
255
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO
Memoria:Temperatura
t
i soma media tela
1 2 3
9 18 21 1
2
3
4
1
9
27
48
16 digite a 
temperatura 1
9
digite a 
temperatura 2
18
digite a 
temperatura 3
21
Media das 
temperaturas 16
Figura 258 – Abertura de um novo laço
Uma vez calculada a média, temos condição de calcular as diferenças de temperatura uma a uma. 
Para isso, novo laço é aberto, utilizando a mesma variável de controle (i).
algoritmo “Temperatura”
var
 t:vetor[1..3] de real
 i:inteiro
 soma,media:real
inicio
 soma<-0
 para i de 1 ate 3 faca
 escreva(“digite a temperatura “,i)
 leia(t[i])
 soma<-soma+t[i]
 fimpara
 media<-soma/3
 escreva(“Media das temperaturas”, media)
 para i de 1 ate 3 faca
 escreva(“diferença “,i,” eh “,media-t[i])
 fimpara
Fimalgoritmo
V
 
Memoria:Temperatura
t
i soma media tela
1 2 3
9 18 21 1
2
3
4
1
9
27
48
16 digite a 
temperatura 1
9
digite a 
temperatura 2
18
digite a 
temperatura 3
21
Media das 
temperaturas 16
Figura 259 – Como i é menor ou igual a 3, o laço é executado
256
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
Unidade V
algoritmo “Temperatura”
var
 t:vetor[1..3] de real
 i:inteiro
 soma,media:real
inicio
 soma<-0
 para i de 1 ate 3 faca
 escreva(“digite a temperatura “,i)
 leia(t[i])
 soma<-soma+t[i]
 fimpara
 media<-soma/3
 escreva(“Media das temperaturas”, media)
 para i de 1 ate 3 faca
 escreva(“diferença “,i,” eh “,media-t[i])
 fimpara
fimalgoritmo
Memoria:Temperatura
t
i soma media tela
1 2 3
9 18 21 1
2
3
4
1
9
27
48
16 digite a 
temperatura 1
9
digite a 
temperatura 2
18
digite a 
temperatura 3
21
Media das 
temperaturas 16
Diferença 1 eh 7
Figura 260 – A primeira diferença é mostrada
algoritmo “Temperatura”
var
 t:vetor[1..3] de real
 i:inteiro
 soma,media:real
inicio
 soma<-0
 para i de 1 ate 3 faca
 escreva(“digite a temperatura “,i)
 leia(t[i])
 soma<-soma+t[i]
 fimpara
 media<-soma/3
 escreva(“Media das temperaturas”, media)
 para i de 1 ate 3 faca
 escreva(“diferença “,i,” eh “,media-t[i])
 fimpara
fimalgoritmo
257
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO
Memoria:Temperatura
t
i soma media tela
1 2 3
9 18 21 1
2
3
4
1
2
9
27
48
16 digite a 
temperatura 1
9
digite a 
temperatura 2
18
digite a 
temperatura 3
21
Media das 
temperaturas 16
Diferença 1 eh 7
Figura 261 – Atualização da variável de controle
Ao encontrar o fimpara, o programa atualiza a variável de controle, e o fluxoretorna para o controle 
do laço.
algoritmo “Temperatura”
var
 t:vetor[1..3] de real
 i:inteiro
 soma,media:real
inicio
 soma<-0
 para i de 1 ate 3 faca
 escreva(“digite a temperatura “,i)
 leia(t[i])
 soma<-soma+t[i]
 fimpara
 media<-soma/3
 escreva(“Media das temperaturas”, media)
 para i de 1 ate 3 faca
 escreva(“diferença “,i,” eh “,media-t[i])
 fimpara
Fimalgoritmo
V
Memoria:Temperatura
t
i soma media tela
1 2 3
9 18 21 1
2
3
4
1
2
9
27
48
16 digite a 
temperatura 1
9
digite a 
temperatura 2
18
digite a 
temperatura 3
21
Media das 
temperaturas 16
Diferença 1 eh 7
Figura 262 – Nova execução do laço
258
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
Unidade V
Como 2<3, o laço é novamente executado.
algoritmo “Temperatura”
var
 t:vetor[1..3] de real
 i:inteiro
 soma,media:real
inicio
 soma<-0
 para i de 1 ate 3 faca
 escreva(“digite a temperatura “,i)
 leia(t[i])
 soma<-soma+t[i]
 fimpara
 media<-soma/3
 escreva(“Media das temperaturas”, media)
 para i de 1 ate 3 faca
 escreva(“diferença “,i,” eh “,media-t[i])
 fimpara
fimalgoritmo
Memoria:Temperatura
t
i soma media tela
1 2 3
9 18 21 1
2
3
4
1
2
9
27
48
16 digite a 
temperatura 1
9
digite a 
temperatura 2
18
digite a 
temperatura 3
21
Media das 
temperaturas 16
Diferença 1 eh 7
Diferença 2 eh -2
Figura 263 – Apresentação do resultado
O programa apresenta o resultado de media – t[2], ou seja, 16 - 18.
259
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO
algoritmo “Temperatura”
var
 t:vetor[1..3] de real
 i:inteiro
 soma,media:real
inicio
 soma<-0
 para i de 1 ate 3 faca
 escreva(“digite a temperatura “,i)
 leia(t[i])
 soma<-soma+t[i]
 fimpara
 media<-soma/3
 escreva(“Media das temperaturas”, media)
 para i de 1 ate 3 faca
 escreva(“diferença “,i,” eh “,media-t[i])
 fimpara
fimalgoritmo
Memoria:Temperatura
t
i soma media tela
1 2 3
9 18 21 1
2
3
4
1
2
3
9
27
48
16 digite a 
temperatura 1
9
digite a 
temperatura 2
18
digite a 
temperatura 3
21
Media das 
temperaturas 16
Diferença 1 eh 7
Diferença 2 eh -2
Figura 264 – Atualização da variável de controle
Ao encontrar o fimpara, o programa atualiza a variável de controle, e o fluxo retorna para o controle 
do laço.
algoritmo “Temperatura”
var
 t:vetor[1..3] de real
 i:inteiro
 soma,media:real
inicio
 soma<-0
 para i de 1 ate 3 faca
 escreva(“digite a temperatura “,i)
 leia(t[i])
 soma<-soma+t[i]
 fimpara
 media<-soma/3
260
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
Unidade V
 escreva(“Media das temperaturas”, media)
 para i de 1 ate 3 faca
 escreva(“diferença “,i,” eh “,media-t[i])
 fimpara
fimalgoritmo
V
Memoria:Temperatura
t
i soma media tela
1 2 3
9 18 21 1
2
3
4
1
2
3
9
27
48
16 digite a 
temperatura 1
9
digite a 
temperatura 2
18
digite a 
temperatura 3
21
Media das 
temperaturas 16
Diferença 1 eh 7
Diferença 2 eh -2
Figura 265 – Como a condição é Verdadeira, o laço será executado novamente
algoritmo “Temperatura”
var
 t:vetor[1..3] de real
 i:inteiro
 soma,media:real
inicio
 soma<-0
 para i de 1 ate 3 faca
 escreva(“digite a temperatura “,i)
 leia(t[i])
 soma<-soma+t[i]
 fimpara
 media<-soma/3
 escreva(“Media das temperaturas”, media)
 para i de 1 ate 3 faca
 escreva(“diferença “,i,” eh “,media-t[i])
 fimpara
fimalgoritmo
261
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO
Memoria:Temperatura
t
i soma media tela
1 2 3
9 18 21 1
2
3
4
1
2
3
9
27
48
16 digite a 
temperatura 1
9
digite a 
temperatura 2
18
digite a 
temperatura 3
21
Media das 
temperaturas 16
Diferença 1 eh 7
Diferença 2 eh -2
Diferença 3 eh -5
Figura 266 – A terceira diferença de temperatura é exibida
algoritmo “Temperatura”
var
 t:vetor[1..3] de real
 i:inteiro
 soma,media:real
inicio
 soma<-0
 para i de 1 ate 3 faca
 escreva(“digite a temperatura “,i)
 leia(t[i])
 soma<-soma+t[i]
 fimpara
 media<-soma/3
 escreva(“Media das temperaturas”, media)
 para i de 1 ate 3 faca
 escreva(“diferença “,i,” eh “,media-t[i])
 fimpara
fimalgoritmo
Memoria:Temperatura
t
i soma media tela
1 2 3
9 18 21 1
2
3
4
1
2
3
4
9
27
48
16 digite a 
temperatura 1
9
digite a 
temperatura 2
18
digite a 
temperatura 3
21
Media das 
temperaturas 16
Diferença 1 eh 7
Diferença 2 eh -2
Diferença 3 eh -5
Figura 267 – Atualização da variável de controle
262
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
Unidade V
Ao encontrar o fimpara, o programa atualiza a variável de controle, e o fluxo retorna para o controle 
do laço.
algoritmo “Temperatura”
var
 t:vetor[1..3] de real
 i:inteiro
 soma,media:real
inicio
 soma<-0
 para i de 1 ate 3 faca
 escreva(“digite a temperatura “,i)
 leia(t[i])
 soma<-soma+t[i]
 fimpara
 media<-soma/3
 escreva(“Media das temperaturas”, media)
 para i de 1 ate 3 faca
 escreva(“diferença “,i,” eh “,media-t[i])
 fimpara
fimalgoritmo
F
Memoria:Temperatura
t
i soma media tela
1 2 3
9 18 21 1
2
3
4
1
2
3
4
9
27
48
16 digite a 
temperatura 1
9
digite a 
temperatura 2
18
digite a 
temperatura 3
21
Media das 
temperaturas 16
Diferença 1 eh 7
Diferença 2 eh -2
Diferença 3 eh -5
Figura 268 – Encerramento do laço e passagem para a próxima instrução
Como o conteúdo da variável de controle é maior que o limite, o laço é encerrado, e o fluxo do 
programa executa a instrução seguinte, no caso, a informação do final de programa.
5.1.2 Vetores em C
Definimos um vetor em C da seguinte forma:
int v[10];
263
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO
 Observação
Devemos tomar cuidado, pois o índice do vetor na linguagem C sempre 
se inicia em zero.
Assim, na declaração anterior, os elementos vão de v[0] até v[9].
Outra característica é que os vetores também podem ser inicializados na declaração:
 int v[8] = { 15, 1,0,3, 5, 7, 8, 59 };
Ou simplesmente:
int v[] = { 15, 1,0, 3, 5, 7,8, 59 };
Assim, o programa aloca, automaticamente, cinco espaços de inteiros na memória.
Traduzindo o programa que lê três temperaturas e mostra a diferença de cada uma delas em relação 
à média:
algoritmo “Temperatura”
var
 t:vetor[1..3] de real
 i:inteiro
 soma,media:real
inicio
 soma<-0
 para i de 1 ate 3 faca
 escreva(“digite a temperatura 
“,i)
 leia(t[i])
 soma<-soma+t[i]
 fimpara
 media<-soma/3
 escreva(“Media das temperaturas”, 
media)
 para i de 1 ate 3 faca
 escreva(“diferença “,i,” eh 
“,media-t[i])
 fimpara
fimalgoritmo
#include<stdio.h>
void main(){
 float t[3];
 int i;
 float soma, media;
 soma=0;
 for(i=0;i<=2;i++){
 printf(“digite a temperatura %d 
“,i);
 scanf(“%f”,&t[i]);
 soma=soma+t[i];
 }
 media=soma/3;
 printf(“\nMedia das temperaturas 
%10.2f \n”, media);
 for(i=0;i<=2;i++)
 printf(“diferença %d eh %10.2f 
\n”, i, media-t[i],i);
}
264
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
Unidade V
Executando o programa, temos:
Figura 269 – Saída do programa de cálculo da diferença de temperatura com relação à média
5.1.3 Matrizes
Matrizes são vetores multidimensionais; os mais comuns são os bidimensionais. Assim, a matriz 
bidimensional é uma estrutura de dados que necessita de um índice para referenciar a linha e o outro 
para referenciar a coluna e localizar o elemento da informação.
Sintaxe:
 <nome>:matriz[inicio..fim][inicio..fim] de tipo
1 2 3 4
1 8,5 7,0 8,5 10
2 3,0 4,0 6,0 5,5
3 7,0 7,5 6,0 5,0
índices
elementos
Figura 270 – Representação de uma matriz bidimensional
A declaração da matriz ilustrada é:
algoritmo “classe”
var
 classe:matriz[1..3] [1..4] de real
inicio
.
.
.
265
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO
Para fazermos uma atribuição de um elemento da matriz a uma variável, utilizamos a seguinte sintaxe:
<variável> <- <nome>[indice] [indice]
Assim, se fizermos a atribuição Aluno1<-notas[1][2], a variável Aluno1 passará a armazenar o 
valor 7,0.
Para fazermos a atribuição de um valor a um elemento da matriz, utilizamos a seguinte sintaxe:
<nome>[indice] [indice]<-valor
Se fizermos a atribuição notas[3] [4]<-8,0:
1 2 3 4
1 8,5 7,0 8,5 10
2 3,0 4,0 6,0 5,5
3 7,0 7,5 6,0 8,0
índices
elementos
Figura 271 – Matriz com o elemento alterado
5.1.4 Matrizes em C
Na linguagem C, podem ser criadas matrizes bidimensionais. Assim, para declararmos uma matriz de 
valores reais com três linhas e quatro colunas, fazemos:
float classe[3][4];
Ao declararmos a matriz, o C reserva um espaço de memória para armazenar os 12 elementos da 
matriz, de maneira contínua, organizados linha a linha. Podemos então preencher a matriz na declaração:
float classe[3][4] = {{ 8.5, 7.0,8.5,10.0},{ 3.0, 4.0, 6.0, 5.5},{ 7.0, 
7.5, 6.0, 5.0}};
Como a linguagem C ignora os caracteres de quebra de linha, para ficar mais fácil de visualizar 
durante a programação, podemos escrever da seguinte forma:
float classe[3][4] = {{ 8.5, 7.0, 8.5,10.0}
,{ 3.0, 4.0, 6.0, 5.5}
,{ 7.0, 7.5, 6.0, 5.0}};
266
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
Unidade V
Outra maneira que a linguagem C permite é declararmos sequencialmente:
float classe[3][4] = { 8.5, 7.0, 8.5, 10.0, 3.0, 4.0, 6.0, 5.5, 7.0, 7.5, 
6.0, 5.0};
Em razão da particularidade da administração da memória, também podemos escrever da 
seguinte forma:
float classe[][4] = { 8.5, 7.0, 8.5, 10.0, 3.0, 4.0, 6.0, 5.5, 7.0, 7.5, 
6.0, 5.0};
 Lembrete
Como as matrizes são um caso particular de vetores, os índices também 
se iniciam em zero.
 Saiba mais
O uso típico de matrizes é o jogo da Batalha Naval. No site C Progressivo, 
é apresentado um exemplo simples do jogo numa matriz 5 x 5.
Acesse:
JOGO: Batalha Naval em C. C Progressivo, 2012. Disponível em: <http://
www.cprogressivo.net/2012/09/batalha-naval-em-c.html>. Acesso em: 28 
maio 2014.
5.1.5 Cadeias de caracteres em C
As cadeias de caracteres em C (strings) são representadas por vetores do tipo char terminadas, 
obrigatoriamente, pelo caractere nulo (‘\0’). Sempre que ocorrer o armazenamento de uma cadeia, 
será necessário reservar um elemento adicional para o caractere de fim da cadeia. Todas as 
funções que manipulam strings (dos quais veremos alguns) recebem como parâmetro um vetor 
de char e processam caractere por caractere, até encontrarem o caractere nulo, que sinaliza o 
final da cadeia.
Para imprimirmos uma cadeia pela função printf, é necessário o especificador de formato %s. 
A função, na verdade, recebe um vetor de char e imprime elemento por elemento, até encontrar o 
caractere nulo (‘\0’).
267
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO
O exemplo a seguir ilustra a representação de uma string. Como queremos representar a palavra 
Unip, composta por quatro caracteres, declaramos um vetor com dimensão 5 (um elemento adicional 
para armazenarmos o caractere nulo no final da cadeia). O código preenche os elementos do vetor, 
incluindo o caractere ‘\0’, e imprime a palavra na tela.
#include<stdio.h>
void main ()
{
 char faculdade[5];
 faculdade [0] = ‘U’;
 faculdade [1] = ‘n’;
 faculdade [2] = ‘i’;
 faculdade [3] = ‘p’;
 faculdade [4] = ‘\0’;
 printf(“%s \n”, faculdade);
}
Ao executarmos, obtemos o seguinte resultado:
Figura 272 – Saída do programa com uma string montada em um vetor
Se o ‘\0’ não fosse colocado, a função printf não encontraria o fim da cadeia, e o programa mostraria 
os caracteres que eventualmente restam na memória até encontrar um ‘\0’.
Figura 273 – A função de impressão não reconhece o fim de caractere
5.1.6 Caracteres em C
A linguagem C não oferece especialmente um tipo caractere. Os caracteres são representados 
por números inteiros que são convertidos em caracteres no momento da exibição. O tipo char 
armazena valores inteiros do tamanho de 1 byte, 8 bits, podendo então representar valores que 
variam de -128 a 127.
268
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
Unidade V
 Lembrete
A correspondência entre os caracteres e seus códigos numéricos é feita 
por uma tabela de códigos, a tabela ASCII, vista anteriormente (Tabela 6).
A diferença entre caracteres e inteiros, em C, acontece apenas no tratamentos destes. Assim, 
podemos imprimir um mesmo valor de duas formas diferentes, desde que os formatos sejam diferentes. 
Por exemplo:
#include<stdio.h>
void main ()
{
 char c = 97; 
 printf(“%d %c\n”,c,c);
}
Resulta em:
Figura 274 – Diferença entre %c e %d na saída
Como o número 97 corresponde ao caractere a, o printf, ao mostrar na tela a variável c no formato 
%d, exibe o conteúdo numérico, pois o formato é de número inteiro, e, para a letra a, quando encontra 
o formato %c, exibe o caractere correspondente ao número 97.
5.1.7 Manipulação de strings
A linguagem C, para manipular strings e caracteres, fornece algumas bibliotecas. Essas bibliotecas 
dão algumas funções extras, além do scanf e do printf, para entrada e saída de caracteres e cadeias.
• Função putchar(): a função putchar() (put character) da biblioteca stdio.h imprime um caractere 
na saída-padrão (em geral, o monitor de vídeo).
• Função getchar(): a função getchar() (get character) da biblioteca stdio.h lê um caractere do 
teclado, ou arquivo. Se ocorrer um erro ou uma condição de “fim de arquivo” durante a leitura, 
a função retornará o valor da constante simbólica end of file (EOF) definida na biblioteca stdio.h, 
permitindo facilmente a detecção de finais de arquivos. Essa função não retorna valores até que o 
caractere de controle enter (\n) seja lido. Exemplo: o programa a seguir mostra o uso das funções 
269
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO
getchar() e putchar() em um programa que lê caracteres do teclado e os reimprime convertidos 
para maiúsculos.
#include <stdio.h>
void main(){
 char c; 
 printf(“\nDigite uma frase:\n”);
 do{ 
 c = getchar(); // leitura do ‘buffer’
 if(c >= 97 && c <= 122){ // se c e’ minusculo...
 c -= 32; // ...transforma em maiusculo
 }
 putchar(c); // impressao dos caracteres maiusculos
 }while (c != ‘\n’);
}
Figura 275 – Uso do getchar e do putchar
• Funções getch() e getche(): A função getch() (get character) da biblioteca stdio.h lê os códigos 
de teclado. Isso envolve não só os caracteres ASCII, mas também as teclas de comandos ([enter], 
[delete], [Page Up], [F1] etc.) ou combinações de teclas ([Alt] + [A], [Shift] + [F1], [Ctrl] + [Page 
Down] etc.). A função getch() aguarda que uma tecla, ou combinação de teclas, seja pressionada, 
recebe do teclado o código correspondente e retorna esse valor. A função getche() (get character 
and echoes), além de receber o código, ecoa, no dispositivo de saída, o caractere correspondente. 
Quando nos códigos especiais são pressionadas certas teclas, ou combinações destas, que não 
são caracteres ASCII, o teclado envia ao buffer de entrada do computador dois códigos, sendo o 
primeiro sempre 0, seguido do código correspondente. Por exemplo, sea tecla F1 for pressionada, 
os valores 0 e 59 serão armazenados, e a função deverá ser chamada duas vezes para ler os 
dois códigos. Exemplo: um programa para a leitura de teclado que usa a função getch() para 
reconhecer teclas e combinações de teclas.
#include <conio.h>
#include <stdio.h>
void main(){
 int c,d; 
 printf(“\n Pressione uma tecla ou combinacao de teclas:”);
 printf(“\n Pressione [esc] para terminar! \n”);
270
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
Unidade V
 do{ // faz...
 c = getch(); // leitura do primeiro codigo.
 if(c == 0){ // se for codigo extendido...
 d = getch(); // le segundo codigo.
 printf(“%3d %3d codigo extendido\n”,c,d);
 }
 else{ 
 printf(“%3d codigo normal\n”,c);
 };
 }while (c != 27); // ...enquanto nao for [esc]
}
Ao digitarmos Ctrl-Alt-x e depois o caractere u e a tecla Esc, teremos o seguinte resultado:
Figura 276 – Uso do getch
• Função puts (): a função puts () (put string) da biblioteca stdio.h mostra uma string na tela 
acrescentando um enter (\n) ao final.
• Função gets(): a função gets()(get string) da biblioteca stdio.h lê uma string do teclado até o 
operador digitar o enter. Exemplo:
#include <stdio.h>
void main()
{
 char cadeia[256];
 printf (“Escreva o seu nome: “);
 gets(cadeia);
 puts(cadeia);
}.
Testando com o exemplo Joaquim Santos, temos:
271
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO
Figura 277 – Saída usando gets e puts
• Função strlen(): a função strlen() (string length), da biblioteca string.h, retorna o tamanho de uma 
cadeia. Conta a quantidade de caracteres até encontrar um nulo (\0) e não o conta. Exemplo: o 
programa retorna o tamanho da cadeia digitada.
#include <stdio.h>
#include <string.h>
void main(){
 int tam;
 char str[100];
 printf(“Digite string:”);
 gets(str);
 tam=strlen(str);
 printf(“Tamanho da string eh: %d\n”, tam);
}
A biblioteca usada é a string.h. O resultado é:
Figura 278 – Contando a quantidade de caracteres
• Função strcat(): a função strcat() (string concatenate), da biblioteca string.h, tem duas cadeias 
concatenadas (unidas uma após a outra). A função recebe duas strings como argumento e copia 
a segunda string no final da primeira. Exemplo: fazer um programa que junte duas cadeias.
#include <string.h>
#include <stdio.h>
void main(){
 char cadeia1[100], cadeia2[50];
 puts (“Digite String1: “);
 gets(cadeia1);
 puts(“Digite String2”);
272
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
Unidade V
 gets(cadeia2);
 strcat(cadeia1, cadeia2);
 puts(cadeia1);
}
Figura 279 – Fazendo a concatenação de caracteres
• Função strcpy(): O strcpy (string copy) é uma função da biblioteca string.h que copia uma string 
em uma variável. Ao contrário da função strcat, que faz a concatenação, essa função sobrescreve 
a cadeia caso esta já tenha um valor armazenado. Exemplo:
#include <string.h>
#include <stdio.h>
void main(){
 char str1[100], str2[100], str3[100];
 puts (“Digite string: “);
 gets(str1);
 strcpy(str2, str1);
 strcpy(str3, “Você digitou string:”);
 printf(“%s %s\n”, str3, str2);
}
Nesse programa, a saída é dada por duas variáveis, e nenhuma delas foi a variável em que foi dada 
a entrada. O resultado do programa é:
Figura 280 – Saída da função strcpy
• Função strcmp(): na função strcmp() (string compare), da biblioteca string.h, duas cadeias são 
comparadas. A comparação é feita caractere a caractere, até encontrar a primeira diferença entre 
eles; conforme a diferença, a função devolve um valor diferente, usando o seguinte critério:
273
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO
— < 0, se cadeia1 < cadeia2;
— = 0, se cadeia1 = cadeia2;
— >0, se cadeia1 > cadeia2.
Exemplo de aplicação
Executar o programa a seguir:
#include <stdio.h>
#include <string.h>
void main(){
 printf(“%d \n”, strcmp (“A”, “A”));
 printf(“%d \n”, strcmp (“A”, “B”));
 printf(“%d \n”, strcmp (“B”, “A”));
 printf(“%d \n”, strcmp (“C”, “A”));
}
Resultado:
Figura 281 – Comparações entre caracteres
5.2 Dados heterogêneos
Uma estrutura de dados é chamada de heterogênea quando envolve a utilização de mais de um tipo 
básico de dado, que é chamado de registro, em certos casos.
Segundo Laureano (2008),
um registro é uma estrutura de dados que agrupa dados de tipos distintos. 
Um registro de dados é composto por certo número de campos de dados, 
que são itens de dados individuais. Registros são conjuntos de dados 
logicamente relacionados, mas de tipos diferentes (numéricos, lógicos, 
caractere etc.) [, 1, 4] (LAUREANO, 2008, p. 16).
274
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
Unidade V
Assim como existem tipos predefinidos, como inteiro, real, cadeia e lógico, podemos dizer que, ao 
usarmos registros, estamos criando um novo tipo de dado. Assim, antes da declaração das variáveis, 
temos de definir os novos tipos que estão sendo criados para depois serem declarados como variáveis.
Sintaxe:
Tipo IDENTIFICADOR = registro
 campo1 : tipo;
 campo2 : tipo;
 campoN : tipo;
fimregistro;
var
 variável : IDENTIFICADOR;
Onde:
• IDENTIFICADOR: representa o nome associado ao tipo registro construído;
• campo1, campo2, campoN: são os nomes associados a cada campo do registro.
Da mesma forma que na declaração de vetores e matrizes, primeiro, devemos criar um tipo, para 
então declararmos as variáveis desse tipo.
Para atribuirmos ou recebermos valores, referimo-nos às variáveis na forma:
 variável.campo
Por exemplo:
Algoritmo ”classe”
Tipo ficha = registro
 Nome : cadeia;
 sexo : Caracter;
 Idade : inteiro;
fimregistro;
var
 Aluno, Professor : Ficha;
inicio
 Aluno.nome<-”Elomar”;
 Professor.Nome<-”Olavo”;
 escreva(professor.nome,aluno.nome);
fimalgoritmo.
275
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO
5.2.1 Estrutura em C
Em C, o tipo registro é conhecido como estrutura. Uma estrutura em C serve basicamente para agrupar 
diversas variáveis em um único contexto. A sintaxe para a definição de uma estrutura é mostrada a seguir:
struct <nome> {
 tipo <nome1>;
 tipo <nome2>;
 tipo <nome3>;
 tipo <nome4>;
};
Exemplo de aplicação
Definir um tipo que represente um ponto no plano cartesiano:
struct ponto {
 float x;
 float y;
};
A estrutura, uma vez criada, passa a ser utilizável dentro do programa, atuando como variáveis.
 typedef struct <nome da estrutura> <var1>, <var2> ... ;
Utilizando a estrutura do ponto, fazer um triângulo com os pontos p1 = (0,0), p2 = (1,1) e p3 = (1,0) 
no plano cartesiano.
#include <stdio.h>
struct ponto {
 float x;
 float y;
};
void main(){
 typedef struct ponto p1,p2,p3;
 p1.x=0;
 p1.y=0;
 p2.x=1;
 p2.y=1;
 p3.x=1;
 p3.y=0;
}
276
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
Unidade V
 Observação
Em razão da forma pela qual a linguagem C processa o programa, a 
criação e a declaração de um registro e de suas variáveis podem ser feitas 
da seguinte maneira:
typedef truct ponto {
 float x;
 float y;
}p1, p2, p3;
5.2.2 Tipo união
As uniões são usadas quando armazenamos valores de tipos diferentes compartilhando um mesmo 
espaço de memória.
union exemplo {
 int i; 
 char c;
}
Assim como na declaração da estrutura, a declaração da união não declara nenhuma variável, apenas 
define o tipo união. Assim, uma vez definida a união, é necessário declaramos variáveis do tipo união:
 union exemplo v;
Na variável v, os campos i e c usam o mesmo espaço de memória.O operador ponto (.) é usado para acessar diretamente a variável, e o operador seta (->), para acessá-
los por meio de um ponteiro (que veremos mais adiante).
 v.i = 10;
ou
 v.c = ‘x’;
5.3 Modularização
Quando temos um programa muito grande, muitas vezes, torna-se difícil acompanharmos a lógica 
ali empregada. Com o uso das funções, podemos dividir grandes tarefas de computação em tarefas 
menores. A criação de funções evita a repetição de código. Quando um procedimento é repetido 
277
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO
diversas vezes, deve ser transformado numa função, que será chamada diversas vezes. Um programa 
bem-estruturado deve ser pensado no que se refere a funções fora do corpo principal do programa. Tal 
processo se chama modularização.
5.3.1 Teoria
Imaginemos um programa que repete várias vezes uma sequência que limpa a tela, desenha um 
logotipo nessa tela e apresenta o nome do usuário em um canto da mesma tela durante a execução de 
um programa.
Programa principal
.
.
Limpa a tela
Desenha imagens
Mostra o nome do Usuario
.
.
Limpa a tela
Desenha imagens
Mostra o nome do Usuario
.
.
Limpa a tela
Desenha imagens
Mostra o nome do Usuario.
.
.
Como existe constante repetição, podemos fazer o processo de modularização, criando um pequeno 
programa com a sequência de limpar a tela, desenhar as imagens e mostrar o nome do usuário, e 
chamá-lo do programa principal.
278
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
Unidade V
Procedimento MontaTela
 Limpa a tela
 Desenha as margens
 Mostra o nome do usuario
Programa principal
 .
 .
 .
 Montatela
 .
 .
 .
 Montatela
 .
 .
 .
 Montatela
Dessa forma, o programa principal fica mais limpo, pois as instruções repetitivas e desnecessárias 
estão no procedimento.
5.3.2 Funções e procedimentos
A diferença entre uma função e um procedimento é o fato de a função retornar um valor, e o 
procedimento, não.
No pseudocódigo o procedimento é declarado antes do início do programa principal.
Algoritmo “<nome do algoritmo>”
Var 
 <declaração de variáveis do algoritmo>
procedimento <nome> (<lista de parâmetros>:<tipos dos parâmetros>)
inicio 
 comandos
fimprocedimento
Inicio 
 comandos
fimalgoritmo
Veja o algoritmo a seguir, que utiliza um procedimento que calcula a área de um triângulo:
279
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO
algoritmo “Procedimentos”
var
procedimento areatri (h,b : real) //declaração do procedimento
var
 area:real
inicio
 area <- (b*h)/2
 escreva(area)
fimprocedimento
inicio
 areatri(2,6) //chamada ao procedimento
 areatri(4,6) //chamada ao procedimento
fimalgoritmo
Assim, para fazermos o teste de mesa:
procedimento areatri (h,b : real) //declaração do procedimento
var
 area:real
inicio
 area <- (b*h)/2
 escreva(area)
fimprocedimento
algoritmo “Procedimentos”
var
inicio
 areatri(2,6) //chamada ao procedimento
 areatri(4,6) //chamada ao procedimento
fimalgoritmo
Pilha Tela
Memoria Procedimentos Pilha
Figura 282 – Início do fluxo do programa
280
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
Unidade V
O fluxo do programa se inicia no algoritmo principal. Existe uma nova coluna chamada pilha. 
Nesse programa, ela não terá tanta importância, mas será muito importante em programas futuros, 
mais complexos.
procedimento areatri (h,b : real) //declaração do procedimento
var
 area:real
inicio
 area <- (b*h)/2
 escreva(area)
fimprocedimento
algoritmo “Procedimentos”
var
inicio
 areatri(2,6) //chamada ao procedimento
 areatri(4,6) //chamada ao procedimento
fimalgoritmo
Pilha Tela
Memoria Procedimentos Pilha
Figura 283 – Execução da primeira instrução
procedimento areatri (h,b : real) //declaração do procedimento
var
 area:real
inicio
 area <- (b*h)/2
 escreva(area)
fimprocedimento
algoritmo “Procedimentos”
var
inicio
 areatri(2,6) //chamada ao procedimento
 areatri(4,6) //chamada ao procedimento
fimalgoritmo
281
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO
Pilha Tela
Memoria Procedimentos Pilha
areatri (2,6)
Figura 284 – Estabelecimento dos parâmetros
O programa chama o procedimento, passando 2 como primeiro parâmetro e 6 como segundo 
parâmetro.
procedimento areatri (h,b : real) //declaração do procedimento
var
 area:real
inicio
 area <- (b*h)/2
 escreva(area)
fimprocedimento
algoritmo “Procedimentos”
var
inicio
 areatri(2,6) //chamada ao procedimento
 areatri(4,6) //chamada ao procedimento
fimalgoritmo
Memoria areatri
h b
2 6
Pilha Tela
Memoria Procedimentos Pilha
areatri (2,6)
Figura 285 – Abertura da área de memória
282
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
Unidade V
O programa abre uma área de memória criando as variáveis que recebe como parâmetros do 
programa que o chama e passa a executar o procedimento.
procedimento areatri (h,b : real) //declaração do procedimento
var
 area:real
inicio
 area <- (b*h)/2
 escreva(area)
fimprocedimento
algoritmo “Procedimentos”
var
inicio
 areatri(2,6) //chamada ao procedimento
 areatri(4,6) //chamada ao procedimento
fimalgoritmo
Memoria areatri
h b area
2 6
Pilha Tela
Memoria Procedimentos Pilha
areatri (2,6)
Figura 286 – Criação das variáveis na memória
Como em qualquer programa, as variáveis declaradas no procedimento são criadas na memória.
procedimento areatri (h,b : real) //declaração do procedimento
var
 area:real
inicio
 area <- (b*h)/2
 escreva(area)
fimprocedimento
algoritmo “Procedimentos”
var
inicio
 areatri(2,6) //chamada ao procedimento
 areatri(4,6) //chamada ao procedimento
fimalgoritmo
283
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO
Memoria areatri
h b area
2 6 6
Pilha Tela
Memoria Procedimentos Pilha
areatri (2,6)
Figura 287 – O procedimento executa o primeiro comando
procedimento areatri (h,b : real) //declaração do procedimento
var
 area:real
inicio
 area <- (b*h)/2
 escreva(area)
fimprocedimento
algoritmo “Procedimentos”
var
inicio
 areatri(2,6) //chamada ao procedimento
 areatri(4,6) //chamada ao procedimento
fimalgoritmo
Memoria areatri
h b area
2 6 6
Pilha Tela
6
Memoria Procedimentos Pilha
areatri (2,6)
Figura 288 – Escrita do resultado
O fluxo segue para o segundo comando, escrevendo o resultado na tela.
284
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
Unidade V
procedimento areatri (h,b : real) //declaração do procedimento
var
 area:real
inicio
 area <- (b*h)/2
 escreva(area)
fimprocedimento
algoritmo “Procedimentos”
var
inicio
 areatri(2,6) //chamada ao procedimento
 areatri(4,6) //chamada ao procedimento
fimalgoritmo
Memoria areatri Pilha Tela
6
Memoria Procedimentos Pilha
areatri (2,6)
Figura 289 – Liberação da memória e eliminação da 
chamada do programa principal
Com o fim do procedimento, a memória é liberada, e a chamada do programa principal é eliminada 
da pilha.
procedimento areatri (h,b : real) //declaração do procedimento
var
 area:real
inicio
 area <- (b*h)/2
 escreva(area)
fimprocedimento
algoritmo “Procedimentos”
var
inicio
 areatri(2,6) //chamada ao procedimento
 areatri(4,6) //chamada ao procedimento
fimalgoritmo
285
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃOMemoria areatri Pilha Tela
6
Memoria Procedimentos Pilha
areatri (2,6)
areatri (4,6)
Figura 290 – Chamada do procedimento e mudança dos parâmetros
No comando seguinte do programa principal, novamente, o procedimento areatri é chamado, 
passando como parâmetros 4 e 6.
procedimento areatri (h,b : real) //declaração do procedimento
var
 area:real
inicio
 area <- (b*h)/2
 escreva(area)
fimprocedimento
algoritmo “Procedimentos”
var
inicio
 areatri(2,6) //chamada ao procedimento
 areatri(4,6) //chamada ao procedimento
fimalgoritmo
Memoria areatri
h b
4 6
Pilha Tela
6
Memoria Procedimentos Pilha
areatri (2,6)
areatri (4,6)
Figura 291 – Criação da memória e estabelecimento de parâmetros
286
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
Unidade V
O programa cria a memória areatri e as suas variáveis, que vieram como parâmetros.
procedimento areatri (h,b : real) //declaração do procedimento
var
 area:real
inicio
 area <- (b*h)/2
 escreva(area)
fimprocedimento
algoritmo “Procedimentos”
var
inicio
 areatri(2,6) //chamada ao procedimento
 areatri(4,6) //chamada ao procedimento
fimalgoritmo
Memoria areatri
h b area
4 6
Pilha Tela
6
Memoria Procedimentos Pilha
areatri (2,6)
areatri (4,6)
Figura 292 – A variável área é criada no procedimento areatri
procedimento areatri (h,b : real) //declaração do procedimento
var
 area:real
inicio
 area <- (b*h)/2
 escreva(area)
fimprocedimento
algoritmo “Procedimentos”
var
inicio
 areatri(2,6) //chamada ao procedimento
 areatri(4,6) //chamada ao procedimento
fimalgoritmo
287
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO
Memoria areatri
h b area
4 6 12
Pilha Tela
6
Memoria Procedimentos Pilha
areatri (2,6)
areatri (4,6)
Figura 293 – O cálculo é executado
procedimento areatri (h,b : real) //declaração do procedimento
var
 area:real
inicio
 area <- (b*h)/2
 escreva(area)
fimprocedimento
algoritmo “Procedimentos”
var
inicio
 areatri(2,6) //chamada ao procedimento
 areatri(4,6) //chamada ao procedimento
fimalgoritmo
Memoria areatri
h b area
4 6 12
Pilha Tela
6
12
Memoria Procedimentos Pilha
areatri (2,6)
areatri (4,6)
Figura 294 – O resultado é exibido na tela
288
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
Unidade V
procedimento areatri (h,b : real) //declaração do procedimento
var
 area:real
inicio
 area <- (b*h)/2
 escreva(area)
fimprocedimento
algoritmo “Procedimentos”
var
inicio
 areatri(2,6) //chamada ao procedimento
 areatri(4,6) //chamada ao procedimento
fimalgoritmo
Pilha Tela
6
12
Memoria Procedimentos Pilha
areatri (2,6)
areatri (4,6)
Figura 295 – O programa é encerrado
 Observação
Muitas vezes, já tínhamos usado funções e procedimentos sem nomeá-
los. Assim, comandos como leia() e escreva() são, na verdade, procedimentos 
em que a programação já vem feita na biblioteca básica de uma linguagem.
 Lembrete
A diferença entre função e procedimento é o fato de a função retornar 
um valor.
É importante a declaração do tipo de valor que uma função retorna. Uma função não pode ora 
retorna um número, ora retornar uma cadeia. Em virtude desse fato, é obrigatório declarar no cabeçalho 
da função qual o tipo que esta retorna.
289
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO
Sintaxe:
Algoritmo “<nome do algoritmo>”
Var
 <declaração de variáveis do algoritmo>
Função <nome> (<parâm1>:<tipo>,<parâm2>:<tipo>): <tipo de retorno>
Var
 <declaração das variáveis locais da função>
Inicio
 <comandos>
 retorne <valor de retorno>
fimfuncao
Inicio
 <corpo do algoritmo>
fimalgoritmo
No fim do cabeçalho da função, é feita a declaração do tipo de retorno. Esse tipo de retorno deve 
corresponder ao tipo do valor de retorno.
O uso da função a partir desse ponto passará a ser crucial no curso, pois esta passará a fazer parte 
da estrutura de quase todos os programas.
Exemplo de aplicação
Fazer um programa para calcular a quantidade de combinações simples.
A fórmula matemática da combinação é:
Ca,b = a! 
 b!(a – b)!
Assim, tomando a combinação de três elementos dois a dois, temos:
C3,2 = 3! = 3
 2!(3 – 2)!
Se considerarmos o conjunto de combinações de três letras (a, b, c) tomando-as duas a duas, 
independentemente da ordem, teremos (a, b), (a, c) e (b, c), ou seja, três.
290
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
Unidade V
Para montarmos o programa, como já vimos em laços, podemos montar os três fatoriais (a!, b! e 
(a-b)!) e fazer as operações entre eles.
O programa montado da forma tradicional ficará:
algoritmo “Combinacao”
var
 a,b,fat,fata,fatb,fatab,i:inteiro
 combinacao:real
inicio
 leia(a)
 leia(b)
 fat<-1
 para i de 1 ate a faca
 fat<-fat*i
 fimpara
 fata<-fat
 fat<-1
 para i de 1 ate b faca
 fat<-fat*i
 fimpara
 fatb<-fat
 fat<-1
 para i de 1 ate a-b faca
 fat<-fat*i
 fimpara
 fatab<-fat
 combinacao<-fata/(fatb*fatab)
 escreva(“combinação e “,a, “ e “,b, “ eh “, combinacao)
fimalgoritmo
Em caso de dúvida, a proposta é fazer um teste de mesa. Supondo que o programa esteja certo, 
podemos observar que o seguinte trecho se repete durante esse programa:
 fat<-1
 para i de 1 ate ? faca
 fat<-fat*i
 fimpara
 fata<-fat
É interessante, portanto, transformá-lo em uma função.
Como o retorna será fat, um número inteiro, e onde está a interrogação, um número que será o 
fatorial a ser calculado, podemos montar a seguinte função:
291
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO
funcao fatorial(n:inteiro):inteiro
var
 i,fat:inteiro
inicio
 fat<-1
 para i de 1 ate n faca
 fat<-fat*i
 fimpara
 retorne fat
fimfuncao
Tipo de saida
Parâmetro de entrada
De agora em diante, sempre que necessitarmos calcular o fatorial, poderemos utilizar a função criada.
x<-fatorial(6)
x receberá o valor 720.
ou:
Escreva(fatorial(5))
O número 120 será exibido na tela. Dessa forma, podemos utilizar a função para resolver de uma 
maneira elegante o programa proposto.
algoritmo “Combinacao”
funcao fatorial(n:inteiro):inteiro
var
 i,fat:inteiro
inicio
 fat<-1
 para i de 1 ate n faca
 fat<-fat*i
 fimpara
 retorne fat
fimfuncao
var
 a,b:inteiro
 combinacao:real
inicio
 leia(a)
 leia(b)
 combinacao<-fatorial(a)/(fatorial(b)*fatorial(a-b))
 escreva(“combinação e “,a, “ e “,b, “ eh “, combinacao)
fimalgoritmo
292
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
Unidade V
O programa principal é apenas:
inicio
 leia(a)
 leia(b)
 combinacao<-fatorial(a)/(fatorial(b)*fatorial(a-b))
 escreva(“combinação e “,a, “ e “,b, “ eh “, combinacao)
fimalgoritmo
Isso deixa claro que o cálculo é fatorial(a)/(fatorial(b)*fatorial(a-b)), ou seja, a 
linearização de:
 a! 
 b!(a – b)!
Fazendo o teste de mesa para 3 e 2, temos:
funcao fatorial(n:inteiro):inteiro
var
 i,fat:inteiro
inicio
 fat<-1
 para i de 1 ate n faca
 fat<-fat*i
 fimpara
 retorne fat
fimfuncao
algoritmo “Combinacao”
var
 a,b:inteiro
 combinacao:real
inicio
 leia(a)
 leia(b)
 combinacao<-fatorial(a)/(fatorial(b)*fatorial(a-b))
 escreva(“combinação e “,a, “ e “,b, “ eh “, combinacao)
fimalgoritmo
293
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 Már
ci
o 
- 
02
/0
6/
20
14
LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO
Pilha Tela
Memoria: Combinação Pilha
Figura 296 – O programa principal se inicia separando a memória para ele
funcao fatorial(n:inteiro):inteiro
var
 i,fat:inteiro
inicio
 fat<-1
 para i de 1 ate n faca
 fat<-fat*i
 fimpara
 retorne fat
fimfuncao
algoritmo “Combinacao”
var
 a,b:inteiro
 combinacao:real
inicio
 leia(a)
 leia(b)
 combinacao<-fatorial(a)/(fatorial(b)*fatorial(a-b))
 escreva(“combinação e “,a, “ e “,b, “ eh “, combinacao)
fimalgoritmo
Pilha Tela
Memoria: Combinação
a b combinação
Pilha
Figura 297 – As variáveis do programa principal são criadas
294
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
Unidade V
funcao fatorial(n:inteiro):inteiro
var
 i,fat:inteiro
inicio
 fat<-1
 para i de 1 ate n faca
 fat<-fat*i
 fimpara
 retorne fat
fimfuncao
algoritmo “Combinacao”
var
 a,b:inteiro
 combinacao:real
inicio
 leia(a)
 leia(b)
 combinacao<-fatorial(a)/(fatorial(b)*fatorial(a-b))
 escreva(“combinação e “,a, “ e “,b, “ eh “, combinacao)
fimalgoritmo
Pilha Tela
3
2
Memoria: Combinação
a b combinação
3 2
Pilha
Figura 298 – Os valores de entrada são lidos do dispositivo de entrada
funcao fatorial(n:inteiro):inteiro
var
 i,fat:inteiro
inicio
 fat<-1
 para i de 1 ate n faca
 fat<-fat*i
 fimpara
 retorne fat
fimfuncao
algoritmo “Combinacao”
var
295
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO
 a,b:inteiro
 combinacao:real
inicio
 leia(a)
 leia(b)
 combinacao<-fatorial(a)/(fatorial(b)*fatorial(a-b))
 escreva(“combinação e “,a, “ e “,b, “ eh “, combinacao)
fimalgoritmo
Pilha Tela
3
2
Memoria: Combinação
a b combinação
3 2
Pilha
fatorial(a)
Figura 299 – A função fatorial é chamada com o parâmetro 3
funcao fatorial(n:inteiro):inteiro
var
 i,fat:inteiro
inicio
 fat<-1
 para i de 1 ate n faca
 fat<-fat*i
 fimpara
 retorne fat
fimfuncao
algoritmo “Combinacao”
var
 a,b:inteiro
 combinacao:real
inicio
 leia(a)
 leia(b)
 combinacao<-fatorial(a)/(fatorial(b)*fatorial(a-b))
 escreva(“combinação e “,a, “ e “,b, “ eh “, combinacao)
fimalgoritmo
296
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
Unidade V
Memoria fatorial
n
3
Pilha Tela
3
2
Memoria: Combinação
a b combinação
3 2
Pilha
fatorial(a)
Figura 300 – A função fatorial reserva o seu espaço na memória e recebe o 
parâmetro de entrada
funcao fatorial(n:inteiro):inteiro
var
 i,fat:inteiro
inicio
 fat<-1
 para i de 1 ate n faca
 fat<-fat*i
 fimpara
 retorne fat
fimfuncao
algoritmo “Combinacao”
var
 a,b:inteiro
 combinacao:real
inicio
 leia(a)
 leia(b)
 combinacao<-fatorial(a)/(fatorial(b)*fatorial(a-b))
 escreva(“combinação e “,a, “ e “,b, “ eh “, combinacao)
fimalgoritmo
Memoria fatorial
n i fat
3
Pilha Tela
3
2
Memoria: Combinação
a b combinação
3 2
Pilha
fatorial(a)
Figura 301 – A função fatorial cria as suas variáveis internas
297
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO
funcao fatorial(n:inteiro):inteiro
var
 i,fat:inteiro
inicio
 fat<-1
 para i de 1 ate n faca
 fat<-fat*i
 fimpara
 retorne fat
fimfuncao
algoritmo “Combinacao”
var
 a,b:inteiro
 combinacao:real
inicio
 leia(a)
 leia(b)
 combinacao<-fatorial(a)/(fatorial(b)*fatorial(a-b))
 escreva(“combinação e “,a, “ e “,b, “ eh “, combinacao)
fimalgoritmo
Memoria: fatorial
n i fat
3 1
Pilha Tela
3
2
Memoria: Combinação
a b combinação
3 2
Pilha
fatorial(a)
Figura 302 – Na função fatorial, a variável fat é inicializada
funcao fatorial(n:inteiro):inteiro
var
 i,fat:inteiro
inicio
 fat<-1
 para i de 1 ate n faca
 fat<-fat*i
 fimpara
 retorne fat
fimfuncao
algoritmo “Combinacao”
var
298
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
Unidade V
 a,b:inteiro
 combinacao:real
inicio
 leia(a)
 leia(b)
 combinacao<-fatorial(a)/(fatorial(b)*fatorial(a-b))
 escreva(“combinação e “,a, “ e “,b, “ eh “, combinacao)
fimalgoritmo
Memoria: fatorial
n i fat
3 1 1
Pilha Tela
3
2
Memoria: Combinação
a b combinação
3 2
Pilha
fatorial(a)
Figura 303 – A variável de controle é inicializada e, como é menor que n, o 
laço será executado
funcao fatorial(n:inteiro):inteiro
var
 i,fat:inteiro
inicio
 fat<-1
 para i de 1 ate n faca
 fat<-fat*i
 fimpara
 retorne fat
fimfuncao
algoritmo “Combinacao”
var
 a,b:inteiro
 combinacao:real
inicio
 leia(a)
 leia(b)
 combinacao<-fatorial(a)/(fatorial(b)*fatorial(a-b))
 escreva(“combinação e “,a, “ e “,b, “ eh “, combinacao)
fimalgoritmo
299
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO
Memoria: fatorial
n i fat
3 1 1
1
Pilha Tela
3
2
Memoria: Combinação
a b combinação
3 2
Pilha
fatorial(a)
Figura 304 – Fat recebe o seu próprio conteúdo multiplicado por 1
funcao fatorial(n:inteiro):inteiro
var
 i,fat:inteiro
inicio
 fat<-1
 para i de 1 ate n faca
 fat<-fat*i
 fimpara
 retorne fat
fimfuncao
algoritmo “Combinacao”
var
 a,b:inteiro
 combinacao:real
inicio
 leia(a)
 leia(b)
 combinacao<-fatorial(a)/(fatorial(b)*fatorial(a-b))
 escreva(“combinação e “,a, “ e “,b, “ eh “, combinacao)
fimalgoritmo
Memoria: fatorial
n i fat
3 1
2
1
1
Pilha Tela
3
2
Memoria: Combinação
a b combinação
3 2
Pilha
fatorial(a)
Figura 305 – A variável de controle é incrementada
300
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
Unidade V
funcao fatorial(n:inteiro):inteiro
var
 i,fat:inteiro
inicio
 fat<-1
 para i de 1 ate n faca
 fat<-fat*i
 fimpara
 retorne fat
fimfuncao
algoritmo “Combinacao”
var
 a,b:inteiro
 combinacao:real
inicio
 leia(a)
 leia(b)
 combinacao<-fatorial(a)/(fatorial(b)*fatorial(a-b))
 escreva(“combinação e “,a, “ e “,b, “ eh “, combinacao)
fimalgoritmo
Memoria: fatorial
n i fat
3 1
2
1
1
Pilha Tela
3
2
Memoria: Combinação
a b combinação
3 2
Pilha
fatorial(a)
Figura 306 – Como i<=n, o laço é executado
funcao fatorial(n:inteiro):inteiro
var
 i,fat:inteiro
inicio
 fat<-1
 para i de 1 ate n faca
 fat<-fat*i
 fimpara
 retorne fat
fimfuncao
algoritmo “Combinacao”
var
 a,b:inteiro
301
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO
 combinacao:real
inicio
 leia(a)
 leia(b)
 combinacao<-fatorial(a)/(fatorial(b)*fatorial(a-b))
 escreva(“combinação e “,a, “ e “,b, “ eh “, combinacao)
fimalgoritmo
Memoria: fatorial
n i fat
3 1
2
1
1
2
Pilha Tela
3
2
Memoria: Combinação
a b combinação
3 2
Pilha
fatorial(a)
Figura 307 – Fat recebe o seu próprio conteúdo multiplicado por i
funcao fatorial(n:inteiro):inteiro
var
 i,fat:inteiro
inicio
 fat<-1
 para i de 1 ate n faca
 fat<-fat*i
 fimpara
 retorne fat
fimfuncao
algoritmo “Combinacao”
var
 a,b:inteiro
 combinacao:real
inicio
 leia(a)
 leia(b)
 combinacao<-fatorial(a)/(fatorial(b)*fatorial(a-b))
 escreva(“combinação e “,a, “ e “,b, “ eh “, combinacao)
fimalgoritmo
302
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
Unidade V
Memoria:fatorial
n i fat
3 1
2
3
1
1
2
Pilha Tela
3
2
Memoria: Combinação
a b combinação
3 2
Pilha
fatorial(a)
Figura 308 – A variável de controle é incrementada
funcao fatorial(n:inteiro):inteiro
var
 i,fat:inteiro
inicio
 fat<-1
 para i de 1 ate n faca
 fat<-fat*i
 fimpara
 retorne fat
fimfuncao
algoritmo “Combinacao”
var
 a,b:inteiro
 combinacao:real
inicio
 leia(a)
 leia(b)
 combinacao<-fatorial(a)/(fatorial(b)*fatorial(a-b))
 escreva(“combinação e “,a, “ e “,b, “ eh “, combinacao)
fimalgoritmo
Memoria: fatorial
n i fat
3 1
2
3
1
1
2
Pilha Tela
3
2
Memoria: Combinação
a b combinação
3 2
Pilha
fatorial(a)
Figura 309 – Como i<=n, ou seja, 3<=3, o laço é executado
303
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO
funcao fatorial(n:inteiro):inteiro
var
 i,fat:inteiro
inicio
 fat<-1
 para i de 1 ate n faca
 fat<-fat*i
 fimpara
 retorne fat
fimfuncao
algoritmo “Combinacao”
var
 a,b:inteiro
 combinacao:real
inicio
 leia(a)
 leia(b)
 combinacao<-fatorial(a)/(fatorial(b)*fatorial(a-b))
 escreva(“combinação e “,a, “ e “,b, “ eh “, combinacao)
fimalgoritmo
Memoria: fatorial
n i fat
3 1
2
3
1
1
2
6
Pilha Tela
3
2
Memoria: Combinação
a b combinação
3 2
Pilha
fatorial(a)
Figura 310 – Novo cálculo de fat é efetuado
funcao fatorial(n:inteiro):inteiro
var
 i,fat:inteiro
inicio
 fat<-1
 para i de 1 ate n faca
 fat<-fat*i
 fimpara
 retorne fat
fimfuncao
algoritmo “Combinacao”
var
 a,b:inteiro
304
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
Unidade V
 combinacao:real
inicio
 leia(a)
 leia(b)
 combinacao<-fatorial(a)/(fatorial(b)*fatorial(a-b))
 escreva(“combinação e “,a, “ e “,b, “ eh “, combinacao)
fimalgoritmo
Memoria: fatorial
n i fat
3 1
2
3
4
1
1
2
6
Pilha Tela
3
2
Memoria: Combinação
a b combinação
3 2
Pilha
fatorial(a)
Figura 311 – Incremento da variável de controle
A variável de controle é incrementada, e, como i<=n é Falso, o programa prossegue após o laço.
funcao fatorial(n:inteiro):inteiro
var
 i,fat:inteiro
inicio
 fat<-1
 para i de 1 ate n faca
 fat<-fat*i
 fimpara
 retorne fat
fimfuncao
algoritmo “Combinacao”
var
 a,b:inteiro
 combinacao:real
inicio
 leia(a)
 leia(b)
 combinacao<-fatorial(a)/(fatorial(b)*fatorial(a-b))
 escreva(“combinação e “,a, “ e “,b, “ eh “, combinacao)
fimalgoritmo
305
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO
Memoria: fatorial
n i fat
3 1
2
3
4
1
1
2
6
Pilha Tela
3
2
Memoria: Combinação
a b combinação
3 2
Pilha
fatorial(a)6
Figura 312 – A função retorna o conteúdo da variável fat 
para o programa principal
funcao fatorial(n:inteiro):inteiro
var
 i,fat:inteiro
inicio
 fat<-1
 para i de 1 ate n faca
 fat<-fat*i
 fimpara
 retorne fat
fimfuncao
algoritmo “Combinacao”
var
 a,b:inteiro
 combinacao:real
inicio
 leia(a)
 leia(b)
 combinacao<-fatorial(a)/(fatorial(b)*fatorial(a-b))
 escreva(“combinação e “,a, “ e “,b, “ eh “, combinacao)
fimalgoritmo
Pilha Tela
3
2
Memoria: Combinação
a b combinação
3 2
Pilha
fatorial(a)6
fatorial(b)
Figura 313 – O programa principal chama a função fatorial, passando o valor 2
306
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
Unidade V
funcao fatorial(n:inteiro):inteiro
var
 i,fat:inteiro
inicio
 fat<-1
 para i de 1 ate n faca
 fat<-fat*i
 fimpara
 retorne fat
fimfuncao
algoritmo “Combinacao”
var
 a,b:inteiro
 combinacao:real
inicio
 leia(a)
 leia(b)
 combinacao<-fatorial(a)/(fatorial(b)*fatorial(a-b))
 escreva(“combinação e “,a, “ e “,b, “ eh “, combinacao)
fimalgoritmo
Memoria: fatorial
n
2
Pilha Tela
3
2
Memoria: Combinação
a b combinação
3 2
Pilha
fatorial(a)6
fatorial(b)
Figura 314 – Reserva de espaço na memória e recebimento do 
parâmetro de entrada
A função fatorial reserva o seu espaço na memória e recebe o parâmetro de entrada 2.
funcao fatorial(n:inteiro):inteiro
var
 i,fat:inteiro
inicio
 fat<-1
 para i de 1 ate n faca
 fat<-fat*i
 fimpara
 retorne fat
fimfuncao
307
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO
algoritmo “Combinacao”
var
 a,b:inteiro
 combinacao:real
inicio
 leia(a)
 leia(b)
 combinacao<-fatorial(a)/(fatorial(b)*fatorial(a-b))
 escreva(“combinação e “,a, “ e “,b, “ eh “, combinacao)
fimalgoritmo
Memoria: fatorial
n i fat
2
Pilha Tela
3
2
Memoria: Combinação
a b combinação
3 2
Pilha
fatorial(a)6
fatorial(b)
Figura 315 – A função fatorial cria as suas variáveis internas
funcao fatorial(n:inteiro):inteiro
var
 i,fat:inteiro
inicio
 fat<-1
 para i de 1 ate n faca
 fat<-fat*i
 fimpara
 retorne fat
fimfuncao
algoritmo “Combinacao”
var
 a,b:inteiro
 combinacao:real
inicio
 leia(a)
 leia(b)
 combinacao<-fatorial(a)/(fatorial(b)*fatorial(a-b))
 escreva(“combinação e “,a, “ e “,b, “ eh “, combinacao)
fimalgoritmo
308
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
Unidade V
Memoria: fatorial
n i fat
2 1
Pilha Tela
3
2
Memoria: Combinação
a b combinação
3 2
Pilha
fatorial(a)6
fatorial(b)
Figura 316 – A variável fat é inicializada
funcao fatorial(n:inteiro):inteiro
var
 i,fat:inteiro
inicio
 fat<-1
 para i de 1 ate n faca
 fat<-fat*i
 fimpara
 retorne fat
fimfuncao
algoritmo “Combinacao”
var
 a,b:inteiro
 combinacao:real
inicio
 leia(a)
 leia(b)
 combinacao<-fatorial(a)/(fatorial(b)*fatorial(a-b))
 escreva(“combinação e “,a, “ e “,b, “ eh “, combinacao)
fimalgoritmo
Memoria: fatorial
n i fat
2 1 1
Pilha Tela
3
2
Memoria: Combinação
a b combinação
3 2
Pilha
fatorial(a)6
fatorial(b)
Figura 317 – A variável i de controle é inicializada e, 
como é menor que n, entra no laço 
309
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO
funcao fatorial(n:inteiro):inteiro
var
 i,fat:inteiro
inicio
 fat<-1
 para i de 1 ate n faca
 fat<-fat*i
 fimpara
 retorne fat
fimfuncao
algoritmo “Combinacao”
var
 a,b:inteiro
 combinacao:real
inicio
 leia(a)
 leia(b)
 combinacao<-fatorial(a)/(fatorial(b)*fatorial(a-b))
 escreva(“combinação e “,a, “ e “,b, “ eh “, combinacao)
fimalgoritmo
Memoria: fatorial
n i fat
2 1 1
1
Pilha Tela
3
2
Memoria: Combinação
a b combinação
3 2
Pilha
fatorial(a)6
fatorial(b)
Figura 318 – A variável fat é atualizada
funcao fatorial(n:inteiro):inteiro
var
 i,fat:inteiro
inicio
 fat<-1
 para i de 1 ate n faca
 fat<-fat*i
 fimpara
 retorne fat
fimfuncao
algoritmo “Combinacao”
var
 a,b:inteiro
310
Re
vi
sã
o:
 Ju
lia
na
 -
 D
ia
gr
am
aç
ão
: J
ef
er
so
s /
 M
ár
ci
o 
- 
02
/0
6/
20
14
Unidade V
 combinacao:real
inicio
 leia(a)
 leia(b)
 combinacao<-fatorial(a)/(fatorial(b)*fatorial(a-b))
 escreva(“combinação e “,a, “ e “,b, “ eh “, combinacao)
fimalgoritmo
Memoria: fatorial
n i fat
2 1
2
1
1
Pilha Tela
3
2
Memoria: Combinação
a b combinação
3 2
Pilha
fatorial(a)6
fatorial(b)
Figura 319 – A variável de controle é incrementada
funcao fatorial(n:inteiro):inteiro
var
 i,fat:inteiro
inicio
 fat<-1
 para i de 1 ate n faca
 fat<-fat*i
 fimpara
 retorne fat
fimfuncao
algoritmo

Outros materiais