Escolar Documentos
Profissional Documentos
Cultura Documentos
Sebenta v02 PDF
Sebenta v02 PDF
Jorge Santos
Fevereiro de 2006
ndice
1 Algoritmia e Programao 1
1.1 Conceitos bsicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.2 Programao estruturada . . . . . . . . . . . . . . . . . . . . . . 3
1.1.3 Notao utilizada . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.1.4 Operadores utilizados nos algoritmos . . . . . . . . . . . . . . . 6
1.2 Instrues sequenciais . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2.1 Sada de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2.2 Entrada de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2.3 Atribuio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2.4 Exerccios Resolvidos . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2.4.1 Cambiar moedas . . . . . . . . . . . . . . . . . . . . . . 9
1.2.4.2 Distncia euclidiana entre dois pontos . . . . . . . . . 10
1.2.4.3 Determinar permetro e rea de circunferncia . . . . . 11
1.2.5 Exerccios Propostos . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.2.5.1 Calcular ndice de massa corprea (IMC) . . . . . . . . 11
1.2.5.2 Converter horas, minutos e segundos . . . . . . . . . . 11
1.2.5.3 Teorema de Pitgoras . . . . . . . . . . . . . . . . . . . 12
1.2.5.4 Converter temperaturas . . . . . . . . . . . . . . . . . . 12
1.3 Instrues de Deciso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.3.1 Deciso binria . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.3.2 Deciso mltipla . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.3.3 Exerccios Resolvidos . . . . . . . . . . . . . . . . . . . . . . . . 16
1.3.3.1 Distncia entre dois pontos . . . . . . . . . . . . . . . . 16
1.3.3.2 Classificar em funo da mdia . . . . . . . . . . . . . 17
1.3.3.3 Determinar o mximo de 3 valores . . . . . . . . . . . 18
1.3.3.4 Determinar tringulo vlido . . . . . . . . . . . . . . . 20
1.3.4 Exerccios Propostos . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.3.4.1 Classificar tringulo . . . . . . . . . . . . . . . . . . . . 20
1.3.4.2 Diviso . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.3.4.3 Resolver equao da forma ax2 + bx + c = 0 . . . . . . 21
1.3.4.4 Converter entre escalas de temperaturas . . . . . . . . 21
1.3.4.5 Calcular ndice de massa corprea (IMC) . . . . . . . . 21
iii
1.3.4.6 Determinar ano bissexto . . . . . . . . . . . . . . . . . 22
1.3.4.7 Parque de estacionamento . . . . . . . . . . . . . . . . 22
1.4 Instrues de Repetio (Ciclos) . . . . . . . . . . . . . . . . . . . . . . . 22
1.4.1 Ciclo condicional: repetir-at . . . . . . . . . . . . . . . . . . . . 23
1.4.2 Ciclo condicional: enquanto-fazer . . . . . . . . . . . . . . . . . 23
1.4.3 Ciclo determinstico: para-fazer . . . . . . . . . . . . . . . . . . . 24
1.4.4 Exerccios Resolvidos . . . . . . . . . . . . . . . . . . . . . . . . 25
1.4.4.1 Calcular somatrio entre dois limites . . . . . . . . . . 26
1.4.4.2 Calcular factorial de um nmero . . . . . . . . . . . . 26
1.4.4.3 Determinar se um nmero primo . . . . . . . . . . . 27
1.4.4.4 Determinar nome e idade da pessoa mais nova de um
grupo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
1.4.4.5 Determinar o aluno melhor classificado e a mdia das
notas de uma turma . . . . . . . . . . . . . . . . . . . . 29
1.4.5 Exerccios Propostos . . . . . . . . . . . . . . . . . . . . . . . . . 30
1.4.5.1 Diviso atravs de subtraces sucessivas . . . . . . . 30
1.4.5.2 Determinar o mximo e mnimo de uma srie . . . . . 31
1.4.5.3 Determinar quantidade de nmeros primos . . . . . . 31
1.4.5.4 Determinar se um nmero perfeito . . . . . . . . . . 31
1.4.5.5 Calcular potncia por multiplicaes sucessivas . . . . 31
1.4.5.6 Maior nmero mpar de uma sequncia de valores . . 31
1.4.5.7 Algarismos de um nmero . . . . . . . . . . . . . . . . 31
1.4.5.8 Apresentao grfica de temperaturas . . . . . . . . . 32
1.4.5.9 Soma dos algarismo de um nmero . . . . . . . . . . . 32
1.4.5.10 Jogo de adivinhar o nmero . . . . . . . . . . . . . . . 32
1.4.5.11 Capicua de um nmero . . . . . . . . . . . . . . . . . . 32
1.4.5.12 Converso de base numrica . . . . . . . . . . . . . . . 32
1.5 Traagens e Teste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
1.6 Programao modular . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
1.6.1 Sub-rotinas, parmetros e variveis locais . . . . . . . . . . . . . 35
1.6.1.1 Funes . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
1.6.1.2 Procedimentos . . . . . . . . . . . . . . . . . . . . . . . 37
1.6.2 Exerccios resolvidos . . . . . . . . . . . . . . . . . . . . . . . . . 37
1.6.2.1 Funo que devolve o maior algarismo de um nmero 37
1.6.2.2 Funo que indica se um nmero perfeito . . . . . . 38
1.6.3 Exerccios propostos . . . . . . . . . . . . . . . . . . . . . . . . . 38
1.6.3.1 Funo mdia de dois nmeros . . . . . . . . . . . . . 39
1.6.3.2 Funo lei de Ohm . . . . . . . . . . . . . . . . . . . . . 39
1.6.3.3 Funo somatrio . . . . . . . . . . . . . . . . . . . . . 39
1.6.3.4 Funes para codificar e descodificar nmeros . . . . 39
1.6.3.5 Nmeros primos . . . . . . . . . . . . . . . . . . . . . . 40
1.7 Vectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
1.7.1 Exerccios resolvidos . . . . . . . . . . . . . . . . . . . . . . . . . 43
1.7.1.1 Funes manipulando vectores . . . . . . . . . . . . . 43
iv
1.7.2 Exerccios propostos . . . . . . . . . . . . . . . . . . . . . . . . . 45
1.7.2.1 Determinar desvio padro de uma srie . . . . . . . . 45
1.7.2.2 Prova de atletismo . . . . . . . . . . . . . . . . . . . . . 45
1.8 Ordenao e pesquisa de vectores . . . . . . . . . . . . . . . . . . . . . . 45
1.8.1 Ordenao por seleco . . . . . . . . . . . . . . . . . . . . . . . 46
1.8.2 Pesquisa Sequencial . . . . . . . . . . . . . . . . . . . . . . . . . 47
1.8.3 Exercicios resolvidos . . . . . . . . . . . . . . . . . . . . . . . . . 48
1.8.3.1 Inverter um vector . . . . . . . . . . . . . . . . . . . . . 48
1.8.4 Exerccios propostos . . . . . . . . . . . . . . . . . . . . . . . . . 49
1.8.4.1 Juno ordenada de vectores . . . . . . . . . . . . . . . 49
1.8.4.2 Mtodo de ordenao por troca directa . . . . . . . . . 49
1.8.4.3 Filtro grfico . . . . . . . . . . . . . . . . . . . . . . . . 49
v
vi
Lista de Figuras
vii
viii
Lista de Tabelas
Lista de Algoritmos
1.1 Cambiar euro para dlar . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.2 Calcular distncia euclidiana entre pontos . . . . . . . . . . . . . . . . . 10
1.3 Determinar permetro e rea de circunferncia . . . . . . . . . . . . . . . 11
1.4 Mquina de furao - deciso mltipla . . . . . . . . . . . . . . . . . . . 15
1.5 Mquina de furao - deciso binria . . . . . . . . . . . . . . . . . . . . 16
1.6 Calcular distncia euclidiana entre pontos . . . . . . . . . . . . . . . . . 17
1.7 Classificar em funo da mdia . . . . . . . . . . . . . . . . . . . . . . . . 17
1.8 Calcular mximo de 3 nmeros . . . . . . . . . . . . . . . . . . . . . . . . 19
1.9 Calcular mximo de 3 nmeros . . . . . . . . . . . . . . . . . . . . . . . . 19
1.10 Validar tringulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.11 Calcular somatrio entre dois limites . . . . . . . . . . . . . . . . . . . . 26
1.12 Calcular factorial de um nmero . . . . . . . . . . . . . . . . . . . . . . . 27
1.13 Determinar se um nmero primo . . . . . . . . . . . . . . . . . . . . . . 27
1.14 Determinar se um nmero primo . . . . . . . . . . . . . . . . . . . . . . 28
1.15 Determinar nome/idade da pessoa mais nova . . . . . . . . . . . . . . . 29
1.16 Determinar o aluno melhor classificado e a mdia das notas de uma turma 30
1.17 Diviso inteira atravs de subtraces sucessivas (numerado) . . . . . . 33
1.18 Funo maior(n) que devolve o maior algarismo de um nmero . . . . 38
1.19 Funo perfeito(N) que indica se um nmero perfeito . . . . . . . . . . 38
1.20 Manipulao de Vectores (leitura, diferena entre mximo e mnimo e
nmero de pares e mpares) . . . . . . . . . . . . . . . . . . . . . . . . . . 45
1.21 Utilizar a pesquisa sequencial) . . . . . . . . . . . . . . . . . . . . . . . . 47
ix
x
Resumo
Estes apontamentos tm como objectivo principal apoiar os leitores que pretendam
aprender programao de computadores
Os contedos propostos tm como objectivo fornecer bases slidas de metodo-
logias de programao que auxiliem a compreenso de programas computacionais
simples, a sua adaptao e desenvolvimento de novas aplicaes, e estimular a capa-
cidade dos leitores para: analisar e resolver problemas de programao.
A estrutura destes apontamentos foi definida de acordo com a abordagem de
aprender-por-exemplo, pelo que, os conceitos so apenas introduzidos de acordo com a
necessidade de explicar a resoluo de um determinado algoritmo.
Neste manual introduzem-se as bases da algoritmia de acordo com o paradigma
da programao estruturada. Em cada seco apresentada um pequena introdu-
o terica sobre o tpico em destaque, apresentados problemas e propostas solues
para os mesmos, adicionalmente so propostos exerccios para resoluo. Na codifi-
cao/apresentao das solues geralmente Pseudo-Cdigo e/ou Fluxogramas.
Este documento compila exerccios de vrios anos de ensino de muitos docentes
do departamento nos quais me incluo. Ao longo do manual podero ser encontrados
exemplos e exerccios propostos pelos docentes nas disciplinas de Algoritmia e Progra-
mao, Linguagens de Programao I do curso de Engenharia Informtica do Departa-
mento de Engenharia Informtica (DEI), bem como de Programao I e Programao II
do curso Engenharia Electrotcnica do Departamento de Engenharia Electrotcnica
(DEE), ambos do ISEP.
xi
xii
Agradecimentos
Gostaria de agradecer aos colegas que permitiram a utilizao do seu material peda-
ggico, em particular, Alberto Sampaio, Ana Almeida Figueiredo, Ana Madureira,
Carlos Vaz de Carvalho, Conceio Neves, Isabel Sampaio e Jos Avelino.
Estou igualmente grato a todos aqueles que reviram o manual e deram inmeras
sugestes para o seu melhoramento, nomeadamente Berta Baptista, Paulo Ferreira e
Nuno Silva.
Pese embora a inmeras sugestes/correes propostas pelos referidos colegas,
quaisquer erros e gralhas que subsistam no documento so, naturalmente, da minha
inteira responsabilidade.
xiii
ISEP/DEI - Jorge Santos
xiv
Captulo 1
Algoritmia e Programao
Objectivos
Familiarizar os alunos com os conceitos e a terminologia associados Inform-
tica
1.1.1 Introduo
Informtica a cincia que estuda a informao, em particular, preocupa-se com a
estrutura, criao, gesto, armazenamento, pesquisa, disseminao e transferncia
de informao. Para alm disso, a informtica estuda a aplicao da informao
nas organizaes. A palavra informtica resultado da contraco das palavras: in-
formao automtica.
A matria prima da informtica a informao, na sua forma mais simples, dados
e a ferramenta bsica o computador.
O computador est para a informtica assim como o telescpio para astronomia.
Um computador um conjunto de circuitos elctricos e electrnicos capaz de re-
alizar de modo autnomo uma determinada tarefa, por obedincia a um programa
armazenado internamente. Assim, um computador pode ser visto como um sistema
de computao que compreende hardware e software (ver figura 1.1).
1
ISEP/DEI - Jorge Santos
COMPUTADOR
Software
Aplicaes
Ferramentas de
desenvolvimento
Sistema Operativo
Hardware
Estas componentes fsicas tm que receber ordens do que fazer e como se arti-
cular. Esta a funo do software.
2
Algoritmia e Programao
3
ISEP/DEI - Jorge Santos
Modo de Preparao:
Ponha o queijo fresco numa tigela e esmague-o com uma colher de pau, at formar
um pur espesso e cremoso. Bata os ovos e misture-os com o queijo, adicionando
um pouco de gua fria. Tempere a gosto. Derreta um pouco de gordura numa
frigideira de base larga e adicione a mistura de ovos e queijo. Cozinhe em lume
brando at que a omeleta fique pronta mas no demasiado cozida.
4
Algoritmia e Programao
Execuo de
Incio/Fim Processamento
sub-rotina
Entrada Incio de
Deciso
de dados sub-rotina
Sada de
Fim iterao
dados
(Ciclo)
varivel;
5
ISEP/DEI - Jorge Santos
palavra chave;
# comentrio;
instruo1 inicio
...
instruo2 <instruo1>;
<instruo2>;
instruo3
<instruo3>;
...
fim
6
Algoritmia e Programao
inicio
...
escrever escrever <lista-de-variaveis/textos>;
...
fim
inicio
...
ler <lista-de-variaveis>;
ler
...
fim
No caso de se pretender ler mais do que uma varivel, os nomes das variveis separam-
se por vrgulas. Considerem-se os seguintes exemplos:
7
ISEP/DEI - Jorge Santos
incio
# ler a varivel x;
ler x;
# ler as variveis nome e idade;
ler nome,idade;
fim
1.2.3 Atribuio
A instruo designada por atribuio permite atribuir o valor de uma expresso a
uma varivel. A varivel que aparece no lado esquerdo da instruo vai assim rece-
ber o valor da expresso que aparece no lado direito da mesma instruo. Do lado
direito da atribuio podemos ter: um nmero, um texto, o resultado de um clculo
ou o contedo de uma outra qualquer varivel. Na figura 1.6 apresentada a sintaxe
proposta para a atribuio.
inicio
...
var expr <varivel> <expresso>;
...
fim
8
Algoritmia e Programao
incio
# Inicializao da varivel contador;
contador 1;
# Incremento da varivel contador;
contador contador+1;
# O resultado desta instruo 2;
escrever contador;
# Incremento da varivel contador;
contador contador+1;
# O resultado desta instruo 3;
escrever contador;
fim
9
ISEP/DEI - Jorge Santos
Sugesto: Escreva uma variao deste algoritmo que permita cmbios entre quais-
quer moedas.
O algoritmo 1.2 permite realizar o clculo da distncia euclidiana entre dois pontos,
sendo que cada ponto definido pelas coordenadas (x,y). A distncia pode ser calcu-
lada de acordo com a frmula 1.2.1.
q
distncia = ( x2 x1 )2 + ( y2 y1 )2 (1.2.1)
10
Algoritmia e Programao
peso 55kg
I MC = 2
= = 20, 14
altura 1, 67m 1, 67m
Escreva um programa que solicite ao utilizador o fornecimento do seu peso em kg
e de sua altura em m e a partir deles calcule o ndice de massa corprea do utilizador.
11
ISEP/DEI - Jorge Santos
9 tempC
tempF = 32 + (1.2.2)
5
inicio
se
...
ento se <condio>
ento <bloco-instrues>
bloco de
instrues
fim-se
...
fim
12
Algoritmia e Programao
Entrada: nota
incio
escrever "Introduza nota:";
ler nota;
se nota 9,5 ento
escrever "O aluno foi aprovado";
fim-se
fim
inicio
se ...
ento seno se <condio>
ento <bloco-instrues1>
bloco de bloco de seno <bloco-instrues2>
instrues 1 instrues 2
fim-se
...
fim
13
ISEP/DEI - Jorge Santos
Neste exemplo so lidas as medidas dos lados de uma figura rectangular, sendo
que no caso particular de os dois lados serem iguais estamos na presena de um
quadrado. Em qualquer um dos casos apresentada a mensagem correspondente.
14
Algoritmia e Programao
inicio
...
seleccionar seleccionar <varivel>
caso <valor1> <bloco-instrues1>
caso <valor2> <bloco-instrues2>
caso 1 caso 2 caso 3 caso n caso <valor3> <bloco-instrues3>
bloco de bloco de bloco de bloco de
...
...
instrues 1 instrues 2 instrues 3 instrues n
seno <bloco-instruesN>
fim-seleccionar
...
fim
Considere uma mquina que permite apenas trs operaes, ligar, desligar e furar.
O algoritmo 1.4 permite modelar o funcionamento da respectiva mquina. Sendo que
aquando da digitao das letras: L, D e F, so apresentadas, respectivamente, as
mensagens: Ligar, Desligar e Furar. No caso da letra digitada ser outra apresentada
uma mensagem de erro.
Entrada: letra
incio
# Ler letra;
escrever "Introduza letra (L/D/F):";
ler letra;
# Testar casos e escrever mensagem respectiva;
seleccionar letra
caso L escrever "Ligar";
caso D escrever "Desligar";
caso F escrever "Furar";
seno
escrever "Operao invlida";
fim-seleccionar
fim-seleccionar
fim
Algoritmo 1.4: Mquina de furao - deciso mltipla
Note-se que tal como acontece no caso da instruo se-ento a componente seno
opcional.
15
ISEP/DEI - Jorge Santos
O algoritmo 1.6 permite realizar o clculo da distncia euclidiana entre dois pontos,
sendo que cada ponto definido pelas coordenadas (x,y). no clculo da distncia
pode ser utilizada a frmula 1.3.1.
q
distncia = ( x2 x1 )2 + ( y2 y1 )2 (1.3.1)
16
Algoritmia e Programao
17
ISEP/DEI - Jorge Santos
Incio
Introduza
trs nmeros
ler
A,B,C
A>C B>C
ento seno
ento
escrever
Maior
Fim
18
Algoritmia e Programao
Entrada: A, B, C
Sada: maximo
incio
# Ler nmeros;
escrever "Introduza nmero1, nmero2 e nmero3:";
ler A, B, C;
se A B ento
se A C ento
maximo A;
fim-se
seno
se B C ento
maximo B;
seno
maximo C;
fim-se
fim-se
escrever "O nmero maior :", maximo;
fim
Algoritmo 1.8: Calcular mximo de 3 nmeros
19
ISEP/DEI - Jorge Santos
O algoritmo 1.10 permite ler trs pontos geomtricos e determinar se estes formam
um tringulo. Pode ser utilizada a frmula da distncia entre dois pontos para cal-
cular as medidas dos lados do tringulo. Note-se que um tringulo s vlido se a
medida de cada um dos seus lados menor que a soma dos lados restantes.
Entrada: x1, y1, x2, y2, x2, y2
incio
# Ler coordenadas do ponto 1;
escrever "Coordenadas ponto1 (x/y):";
ler x1, y1;
# Ler coordenadas do ponto 2;
escrever "Coordenadas ponto2 (x/y):";
ler x2, y2;
# Ler coordenadas do ponto 3;
escrever "Coordenadas ponto3 (x/y):";
ler x3, y3;
p a medida dos lados;
# Calcular
a p(x2 x1)2 + (y2 y1)2 ;
b p (x3 x2)2 + (y3 y2)2 ;
c (x1 x3)2 + (y1 y3)2 ;
# Validar tringulo de acordo com a frmula;
se (a < b+c) e (b < a+c) e (c < a+b) ento
# Tringulo vlido;
escrever "Os trs pontos formam um tringulo";
seno
# Pelo menos 2 pontos so coincidentes ou os 3 so colineares;
escrever "Os pontos no formam um tringulo";
fim-se
fim
Algoritmo 1.10: Validar tringulo
Classificar um tringulo quanto aos lados, sendo que um tringulo com todos lados
iguais designado Equiltero, com todos os lados diferentes entre si designado Es-
caleno e caso tenha apenas dois lados iguais entre si, designa-se Issceles.
20
Algoritmia e Programao
1.3.4.2 Diviso
Descreva um algoritmo que dados dois valores, divide o primeiro pelo segundo. Note
que no possvel fazer a diviso por zero, neste caso deve ser apresentada a mensa-
gem adequada.
9 tempC
tempF = 32 + (1.3.4)
5
tempC = tempK + 273 (1.3.5)
peso 55kg
I MC = = = 20, 14
altura2 1, 67m 1, 67m
Considerando a tabela 1.2, escreva um programa que leia o peso em kg e a altura
em m de uma determinada pessoa de forma a calcular o ndice de massa corprea do
mesmo e de seguida, estabelea as comparaes necessrias entre o IMC calculado e
os valores da tabela 1.2 e escreva uma das frases, conforme for o caso:
21
ISEP/DEI - Jorge Santos
IMC Interpretao
At 18,5 (inclusive) Abaixo do peso normal
De 18,5 a 25 (inclusive) Peso normal
De 25 a 30 (inclusive) Acima do peso normal
Acima de 30 Obesidade
1a hora: 2 e
2a hora: 1,5 e
a partir da 2a hora: 1 e/hora
22
Algoritmia e Programao
repita
inicio
...
bloco de
falso
repetir
instrues
<bloco-instrues>
at <condio>;
at ...
condio
fim
verdade
23
ISEP/DEI - Jorge Santos
enquanto
condio
inicio
...
verdade
enquanto <condio> fazer
bloco de <bloco-instrues>
instrues fim-enquanto
falso ...
fim fim
enquanto
Entrada: numero
incio
# Ler o nmero para o qual ser apresentada a tabuada;
escrever "Introduza nmero:";
ler numero;
i 1;
enquanto i 10 fazer
resultado numero*i;
escrever numero, "*", i, "=", resultado;
# Incrementar a varivel i;
i i+1;
fim-enquanto
fim
24
Algoritmia e Programao
condio
inicio
...
faa
para <bloco-incio>;<condio>;<bloco-iter> fazer
itera n bloco de <bloco-instrues>
vezes instrues fim-para
...
fim fim
para-faa
Por outro lado, a instruo i i+1 faz com que a varivel i tome todos os valores
inteiros de 1 a 100.
25
ISEP/DEI - Jorge Santos
O algoritmo 1.11 permite calcular a somatrio dos nmeros existentes num intervalo
definido por limites inferior e superior. Note que o utilizador pode introduzir os li-
mites na ordem que entender, desta forma os intervalos [5-10] e [10-5] so igualmente
vlidos.
Entrada: limite1, limite2
Sada: soma
incio
# Ler intervalo;
escrever "Introduza nmero1:";
ler limite1;
escrever "Introduza nmero2:";
ler limite2;
# Determinar o limite inferior e superior;
se limite1>limite2 ento
maximo limite1;
minimo limite2;
seno
maximo limite2;
minimo limite1;
fim-se
# Calcular soma propriamente dita;
soma 0;
para i minimo; imaximo; i i+1 fazer
soma soma + i;
fim-para
# Mostrar resultado;
escrever soma;
fim
Algoritmo 1.11: Calcular somatrio entre dois limites
n=0 1
factorial(n) =
n 1 n factorial(n 1)
Exemplo: factorial(5)=5*4*3*2*1=120
26
Algoritmia e Programao
Entrada: numero
Sada: factorial
incio
# Ler o nmero para o qual se pretende calcular o factorial;
escrever "Introduza nmero:";
ler numero;
# Efectuar o clculo;
factorial 1;
para i 1; inumero; i i+1 fazer
factorial factorial * i;
fim-para
# Apresentar resultado;
escrever factorial;
fim
Algoritmo 1.12: Calcular factorial de um nmero
27
ISEP/DEI - Jorge Santos
O algoritmo 1.15 permite ler o nome e a idade de uma srie de pessoas. Este programa
deve terminar quando for introduzido o nome da pessoa = "STOP". No final deve ser
mostrado o nome e idade da pessoa mais nova.
Neste programa utilizada uma varivel com a funo de servir de sentinela, a
varivel primeiro pode assumir os valores verdadeiro ou falso em funo das neces-
sidades.
Uma sentinela regra geral uma varivel do tipo booleano (i.e., pode apresentar
os valores verdadeiro ou falso) e utilizada com o fito de controlar a execuo de
uma determinada seco do programa, este conceito muito til em programao.
28
Algoritmia e Programao
1.4.4.5 Determinar o aluno melhor classificado e a mdia das notas de uma turma
O algoritmo 1.16 permite ler as notas de portugus obtidas pelos elementos de uma
turma. Este programa termina quando for introduzido o nome do aluno "STOP". No
final deve ser mostrado o nome do aluno melhor classificado e a mdia de notas de
turma. Neste programa so utilizados ciclos encadeados.
Note-se que este algoritmo l pelo menos um nome, nem que o primeiro nome
seja "STOP"graas utilizao do ciclo repetir-at. No caso de o nome introduzo
ser vlido (i.e., diferente de "STOP") ento so lidas notas do aluno.
29
ISEP/DEI - Jorge Santos
O resultado da diviso inteira de um nmero inteiro por outro nmero inteiro pode
sempre ser obtido utilizando-se apenas o operador de subtraco. Assim, se quiser-
mos calcular 7/2, basta subtrair o dividendo (2) ao divisor (7), sucessivamente, at
que o resultado seja menor do que o dividendo.
O nmero de subtraces realizadas corresponde ao quociente inteiro, conforme
o exemplo seguinte:
30
Algoritmia e Programao
72 = 5
52 = 3
32 = 1
Escrever um programa que permita calcular uma potncia do tipo baseexpoente atra-
vs de multiplicaes sucessivas. Por exemplo: 24 = 2 2 2 2. Considere as dife-
rentes situaes relacionadas com os valores da base e/ou expoente iguais a zero.
31
ISEP/DEI - Jorge Santos
Porto 11 *****
Lisboa 16 ********
Faro 20 **********
Chaves 8 ****
10110011(2) =
= 1 27 + 0 26 + 1 25 + 1 24 + 0 23 + 0 22 + 1 21 + 1 20
= 128 + 0 + 32 + 0 + 16 + 0 + 0 + 2 + 1
= 179(10)
Note que os expoentes das potncias na frmula de converso correspondem, res-
pectivamente, posio ocupada por cada algarismo no nmero em binrio. Sendo
que o algarismo mais direita corresponde posio zero.
32
Algoritmia e Programao
Dividendo Divisor 33 7
Resto Quociente 5 4
33 26 19 12
- 7 - 7 - 7 - 7
26 19 12 5
33
ISEP/DEI - Jorge Santos
34
Algoritmia e Programao
1.6.1.1 Funes
35
ISEP/DEI - Jorge Santos
Funo nomeFuncao(listaParametros)
inicio
Execuo
...
funo nome <expresso>
...
fim-funo
Introduza base=3
Introduza expoente=2
3^2=8
1 Por uma questo de simplicidade so considerados apenas expoentes inteiros e positivos no cl-
culo da potncia.
36
Algoritmia e Programao
1.6.1.2 Procedimentos
Procedimento nomeProcedimento(listaParametros)
...
Execuo blocos-de-instrues
procedimento
...
Fim-procedimento
Escrever uma funo que recebe um nmero inteiro e devolve o maior algarismo
contido nesse nmero.
37
ISEP/DEI - Jorge Santos
Funo maior(N)
incio
# max vai conter o maior algarismo;
# alg vai conter os algarismos do nmero, partindo das;
# unidades para as dezenas, centenas, etc;
max N%10;
enquanto N6=0 fazer
alg N%10;
N (N - alg)/10;
se alg>max ento
max alg;
fim-se
fim-enquanto
maior max;
fim-funo
Funo maior(n) que devolve o maior algarismo de um nmero
Escrever uma funo que receba um nmero inteiro e devolva os valores booleanos
verdadeiro ou falso se o nmero ou no perfeito, respectivamente.
Funo perfeito(N)
incio
soma 0;
para x 1; x(N/2); x x+1 fazer
se (N%x)=0 ento
soma soma+x;
fim-se
fim-para
se soma=N ento
perfeito verdadeiro;
seno
perfeito falso;
fim-se
fim-funo
Funo perfeito(N) que indica se um nmero perfeito
38
Algoritmia e Programao
Lei de Ohm:
V R
I = V/R
b) Escreva uma funo que receba um inteiro cifrado e o decifre para o valor ori-
ginal.
39
ISEP/DEI - Jorge Santos
c) Escreva uma funo que apresente um menu com 2 opes, cifrar e decifrar
nmero, pea ao utilizador para escolher uma das opes, e retorne a opo
escolhida.
d) Faa um programa que permita testar as funes anteriores.
1.7 Vectores
No contexto da programao de computadores, um vector, uma das estruturas de
dados mais simples. Um vector conjunto de dados consecutivos, usualmente do
mesmo tamanho e tipo. Cada um dos elementos do vector acedido atravs do ndice
(nmero inteiro) que define a posio na qual o elemento est guardado.
Considere que se pretende desenvolver um programa que dadas as notas de 4000
alunos, calcule o desvio de cada uma relativamente mdia das notas. Para o clculo
dos desvios necessrio o clculo prvio da mdia, o que implica manter as notas
aps o clculo da mdia, ou seja, guardar as notas em variveis. O problema pode ser
decomposto em sub-problemas, como se segue:
Calcular a mdia;
Guardar as notas (para clculos posteriores);
Calcular o desvio de cada nota.
Uma soluo para guardar cada uma das notas (desaconselhvel!!), seria definir
4000 variveis, por exemplo: nota1, nota2, nota3, nota4, nota5, nota6, . . . , nota4000
Assim, as instrues para a leitura das notas seriam repetir 4000 vezes algo de
semelhante a:
incio
enquanto numero>0 fazer
escrever "Introduza a mdia do aluno nmero 1:";
ler nota1;
escrever "Introduza a mdia do aluno nmero 2:";
ler nota2;
...
escrever "Introduza a mdia do aluno nmero 4000:";
ler nota4000;
fim-enquanto
fim
40
Algoritmia e Programao
Um vector pode ento ser definido como um conjunto de tamanho fixo de ele-
mentos do mesmo tipo ocupando posies contguas.
Antes de se utilizar um vector necessrio proceder sua declarao, cuja sintaxe
proposta :
DIM nomeVector (incio ATE fim)
No qual:
nomeVector - o nome do vector (escolhido pelo programador);
inicio - o valor incio do ndice;
fim o valor mximo do ndice;
O nmero de posies do vector obedece formula 1.7.1, no sendo obrigatrio
preencher todas as posies com valores.
ndice 1 2 3 4 5 ... 20
Valor 12 8 9 17 15 ... 11
41
ISEP/DEI - Jorge Santos
nome-do-vector[ndice]
Como por exemplo:
incio
# Declarao do vector;
DIM notas(1 at 20);
# Atribuir o valor 5 posio 3 do vector;
notas[3] 5;
# Escrever no cran o valor da posio 1 do vector ;
escrever notas[1];
fim
1 2 3 ... 800
1 4 56 11 ... 6
2 12 8 1 ... 5
640 5 83 9 ... 4
2 Um vector tambm designado matriz quando apresenta mais do que uma dimenso.
42
Algoritmia e Programao
a) Uma funo que faa a leitura de 10 valores (inteiros), guardando-os num vec-
tor;
b) Uma funo que retorne a diferena entre o maior e o menor valor do vector;
43
ISEP/DEI - Jorge Santos
Funo contarPares(vector,dim)
incio
soma 0;
para i 1; i dim; i i+1 fazer
se vector[i] % 2 ento
soma soma+1;
fim-se
fim-para
# Retornar resultado;
contarPares soma;
fim-funo
Funo maiorDiferenca(vector,dim)
incio
# Os valores mximo e mnimo so iniciados com o primeiro elemento do vector;
mximo vector[1];
mnimo vector[1];
para i 1; i dim; i i+1 fazer
se vector[i] > mximo ento
mximo vector[i];
seno
se vector[i] < mnimo ento
mnimo vector[i];
fim-se
fim-se
fim-para
# Retornar resultado;
maiorDiferenca mximo-mnimo;
fim-funo
44
Algoritmia e Programao
incio
DIM vector (1 at 10);
# Evocar o procedimento de leitura do vector;
lerVector(vector,10); # Calcular a diferena entre mximo e mnimo e apresentar
resultado;
escrever "Diferena mxima=", maiorDiferenca(vector,10);
# Contar os nmeros pares e mpares;
nPares maiorDiferenca(vector,10) escrever "Nmeros pares=", nPares;
escrever "Nmeros mpares=", 10-nPares;
fim
Algoritmo 1.20: Manipulao de Vectores (leitura, diferena entre mximo e m-
nimo e nmero de pares e mpares)
45
ISEP/DEI - Jorge Santos
tores e para pesquisar valores em vectores. Sero apresentados nesta seco apenas
um exemplo de cada um. Tambm por uma questo de simplificao sero apenas
utilizados vectores de nmeros. No entanto estes mtodos poder-se-iam adaptar fa-
cilmente a vectores de outro tipo de dados.
46
Algoritmia e Programao
incio
A 10;
B 5;
# Fazer a troca dos contedos - ERRADO!!!;
A B;
B A;
fim
47
ISEP/DEI - Jorge Santos
Funo pequisarValor(vector,dim,valor)
incio
encontrou falso;
i 0;
# Percorrer o vector at encontrar o elemento ou chegar ao fim do vector;
enquanto encontrou=falso e idim fazer
se valor = vector[i] ento
encontrou verdade;
seno
i i+1;
fim-se
fim-enquanto
se encontrou = verdade ento
# Caso encontre o valor retorna a posio;
pequisarValor i;
seno
# Caso no encontre o valor retorna -1;
pequisarValor -1;
fim-se
fim-funo
Procedimento invertervector(vector,dim)
incio
para i 1; i dim/2; i i+1 fazer
# Fazer a troca dos dois elementos;
temp vector[i];
vector[i] vector[dim-i+1];
vector[dim-i+1] temp;
fim-para
fim-procedimento
48
Algoritmia e Programao
Suponha que as notas dos alunos de duas turmas so lidas para dois vectores, um
para cada turma. Considere que as notas foram inseridas em ambos os vectores or-
denadamente, da menor para a maior.
Escreva um programa que faa a juno ordenada dos dois vectores de notas num
terceiro vector.
Neste mtodo compara-se cada posio do vector com todas as outras sucessiva-
mente e troca sempre que encontrar um valor menor numa posio frente. Escreva
um algoritmo que implemente este mtodo.
A B C D E F
1 29 28 70 47 65 ...
49
ISEP/DEI - Jorge Santos
clula B2 = A1 + A2 + A3 + B1 + B3 + C1 + C2 + C3 = 108
clula C2 = B1 + B2 + B3 + C1 + C3 + D1 + D2 + D3 = 114
A B C D E F
1 29 28 70 47 65 ...
50
Bibliografia
[CCT, 2001] CCT. C Programming -Foundation Level, Training Manual & Exercises. Chel-
tenham Computer Training, Gloucester/UK, 2001.
[Kernighan e Ritchie, 1988] Brian W. Kernighan e Dennis M. Ritchie. The C Program-
ming Language, Second Edition. Prentice Hall, Inc., 1988.
[Mosich, 1988] D. Mosich. Advanced Turbo C Programmers Guide. John Wiley & Sons,
1988.
[Sampaio e Sampaio, 1998] Isabel Sampaio e Alberto Sampaio. Fundamental da Pro-
gramao em C. FCA- Editora Informtica, 1998.
51