Você está na página 1de 29

UFU Universidade Federal de Uberlndia

Faculdade de Computao

Apostila de Introduo a Algoritmos

Prof. Luiz Gustavo Almeida Martins

UFU Universidade Federal de Uberlndia

Faculdade de Computao

Introduo a Algoritmos
1. Resoluo de Problemas pelo Computador

Processamento
(Transformao)

Dados de
Entrada

Dados de
Sada

COMPUTADOR

O computador uma ferramenta que permite a realizao do processamento de


dados.
Passos para resoluo de problemas:
Entendimento do Problema
Criao de uma seqncia de operaes para soluo do problema
Execuo desta seqncia
Verificao da adequao da soluo
O computador desempenha apenas uma parte deste processo (3 passo).

2. Fases de Desenvolvimento de Sistemas


O processo de desenvolvimento de sistemas de programao dividido em 4 fases:

Problema

Anlise de
Requisitos

Projeto e
Desenvolvimento

Manuteno

Produto

2.1.

Especificao

Testes e
Validao

Programas

Anlise e Especificao de Requisitos

Um sistema de programao deve satisfazer as necessidades de seus usurios, as


quais so expressas na forma de requisitos.
Prof. Luiz Gustavo A. Martins

Pg.:1/28

UFU Universidade Federal de Uberlndia

Faculdade de Computao

Requisito = ao que deve ser executada pelo sistema. (Ex: registrar as notas dos

alunos, calcular a mdia final, etc.)

O levantamento destes requisitos e o seu refinamento (detalhamento) devem ser


realizados junto com o usurio e registrado em um documento.
O sucesso do sistema depende de 3 fatores:
Quo bem o sistema captou os requisitos expressos;
Quo bem os requisitos captaram as necessidades;
Quo bem as necessidades refletem a realidade.

2.2.

Projeto e Desenvolvimento do Sistema

A partir do documento de anlise de requisitos, projeta-se o sistema de


programao:

1 Fase: Resoluo do Problema


PROBLEMA

Soluo
Algortmica
Programa de
Computador
2 Fase: Implementao (codificao)
Este processo dividido em 3 etapas:
Projeto Preliminar: definio da estrutura modular do software, as
interfaces e as estruturas de dados utilizadas;
Projeto Detalhado: descrio detalhada de cada mdulo definido no
projeto preliminar (algoritmo);
Codificao: migrao das instrues do algoritmo para uma linguagem de
programao previamente definida (programas).

2.3.

Teste e Validao

Tem por objetivo garantir que o sistema satisfaa os requisitos expressos.


Consiste da realizao de alguns tipos de testes com o intuito de encontrar erros. A
inexistncia de erros no representa a adequao operacional do sistema.
Teste de mdulo: feito para garantir que o mdulo atenda s
funcionalidades previstas e s especificaes de interface;

Prof. Luiz Gustavo A. Martins

Pg.:2/28

UFU Universidade Federal de Uberlndia

Faculdade de Computao

Teste de integrao: feito em uma agregao parcial de mdulos e visa


a deteco da inconsistncias nas interfaces entre mdulos;
Teste de sistema: efetuado durante a fase final de validao para
assegurar que o sistema funcione de acordo com os requisitos;
Teste de instalao: realizado durante a instalao do sistema em seu
ambiente real de operao, com o objetivo bsico de verificar o seu
funcionamento neste novo ambiente e corrigir possveis falhas de instalao;
Teste de validao: feito junto ao usurio, o qual deve validar o perfeito
funcionamento do sistema no seu ambiente real de operao, segundo os
requisitos especificados e documentados na 1 fase.

2.4.

Manuteno

Engloba qualquer alterao no sistema que se fizer necessria aps a entrega do


sistema.
Tipos de Manuteno:
Corretiva: visa a correo de erros/falhas;
Incremental: visa a incluso de novas funcionalidades e/ou a alterao dos
requisitos originais.
Um sistema de boa qualidade favorece as atividades de manuteno e,
consequentemente, minimiza os custos despendidos nesta etapa.

- Funciona corretamente
Sistema de Boa
Qualidade

- Possui uma boa documentao de todas as


etapas de desenvolvimento

3. Algoritmo
Algoritmo uma seqncia finita e bem definida de passos que, quando
executados, realizam uma tarefa especfica ou resolvem um problema.
Ex: Receitas de culinria, manual de instrues, coreografia, etc.
Propriedades do algoritmo:
Composto por aes simples e bem definidas (no pode haver ambigidade,
ou seja, cada instruo representa uma ao que deve ser entendida e
realizada).
Seqncia ordenada de aes
Conjunto finito de passos

Prof. Luiz Gustavo A. Martins

Pg.:3/28

UFU Universidade Federal de Uberlndia

Faculdade de Computao

Pergunta: Como saber se j temos detalhes suficientes


entendido e realizado?

para

algoritmo

ser

R:
Depende da relao de instrues reconhecidas pelo AGENTE EXECUTOR do
algoritmo.
Ex:

receita de bolo

Ser Humano

algoritmo computacional

Computador

Construindo um Algoritmo (Problema das Torres de Hani):


Regra: Mover os discos de uma haste para outra sem que o disco maior fique
sobre o disco menor.

1
2
3
A

Soluo:
1.

Move o disco 1 para a haste C

2.

Move o disco 2 para a haste B

3.

Move o disco 1 para a haste B

4.

Move o disco 3 para a haste C

5.

Move o disco 1 para a haste A

6.

Move o disco 2 para a haste C

7.

Move o disco 1 para a haste C

Prof. Luiz Gustavo A. Martins

Pg.:4/28

UFU Universidade Federal de Uberlndia

Faculdade de Computao

3
A

3
A

1
B

2
B

1
3
B

2
A

3
B

3
A

3
A

Exerccios de Lgica:
1. Temos 3 recipientes de tamanhos distintos (8, 5 e 3 litros), sendo que o recipiente
de 8 litros est totalmente cheio. Considerando que os recipientes no sejam
graduados, deseja-se colocar 4 litros em dois recipientes.
2. Numa noite, acontece uma queda de energia. Sabendo-se que tem uma vela na
gaveta da cozinha, um lampio embaixo da cama, fusveis de reserva no armrio da
sala e fsforos na estante da cozinha; descreva a seqncia de aes realizados
para diagnosticar e resolver o problema. Neste exerccio devemos considerar as
seguintes possibilidades:
Fusvel queimado; e

Prof. Luiz Gustavo A. Martins

Pg.:5/28

UFU Universidade Federal de Uberlndia

Faculdade de Computao

Problema na companhia eltrica.


3. Um comerciante est transportando um lobo, um coelho e 500 kg de cenouras.
Durante a viagem, ele se depara com um rio e um pequeno barco, no qual s
possvel transportar um elemento por vez. Descreva quais sero as aes tomadas
pelo comerciante para atravessar o rio, de modo que ele nunca deixe o lobo e o
coelho ou o coelho e as cenouras sozinhos em uma das margens.

4. Algoritmos Computacionais
Diferem dos algoritmos gerais por serem executados pelo computador.
Diferem dos programas por serem desenvolvidos em linguagens NO reconhecidas
pelo computador.
Auxiliam o usurio na concepo da soluo de um problema,
independentemente da linguagem de programao que ser utilizada.
Limitaes:
Os algoritmos computacionais devem ser expressos nos termos do conjunto
de instrues entendidas pelo computador.
Conceitos bsicos utilizados na construo e interpretao de algoritmos:
Estrutura de Dados: para manipulao das informaes utilizadas no
algoritmo.
Estrutura de Controle: para manipulao das aes.

4.1.

Diretrizes para a Elaborao de Algoritmos

Identificao do Problema: determinar o que se quer resolver ou qual objetivo


a ser atingido;
Identificao das entradas do sistema:
disponveis (sero fornecidas);

quais

informaes

estaro

Identificao das sadas do sistema: quais informaes devero ser


geradas/calculadas como resultado;
Definir os passos a serem realizados: determinar a seqncias de aes que
leve soluo do problema (transforme as entradas nas sadas):
Identificar as regras e limitaes do problema;
Identificar as limitaes do computador;
Determinar as aes possveis de serem realizadas pelo computador.
Concepo do algoritmo: registrar a seqncia de comandos, utilizando uma das
formas de representao de algoritmos.

Prof. Luiz Gustavo A. Martins

Pg.:6/28

UFU Universidade Federal de Uberlndia

Faculdade de Computao

Teste da soluo: execuo manual de cada passo do algoritmo, seguindo o fluxo


estabelecido, para detectar possveis erros.

Exemplo: Calcular a mdia final dos alunos, sendo que


foram realizadas 4 provas de mesmo peso no perodo.
- Quais os dados de entrada? P1, P2, P3 e P4
- Quais os dados de sada? Mdia
- Quais os passos a serem realizados? Obter notas,
calcular mdia (somar notas e dividir o resultado por 4)
e apresentar mdia.

4.2.

Formas de Representao de Algoritmos

A descrio de um algoritmo de forma clara e fcil de ser seguida ajuda no seu


desenvolvimento, depurao (localizao e correo de erros) e futura migrao
para uma linguagem de programao.
Para facilitar este trabalho, so utilizadas ferramentas especficas de representao
da lgica de programao (seqncia de aes a serem realizadas).

I. Descrio Narrativa
Especificao verbal dos passos em linguagem natural.
Desvantagens:
A linguagem natural imprecisa (possibilita ambigidades).
Proporciona maior trabalho na codificao.
Sugere-se sua utilizao apenas para comentar algoritmos e/ou programas,
esclarecendo ou realando pontos especficos.

II. Fluxograma
Uso de ilustraes grficas para representar as instrues.
Apresenta a lgica de um algoritmo, enfatizando passos individuais (objetos
grficos) e o fluxo de execuo (setas)
Desvantagens:
Fluxogramas detalhados podem obscurecer a estrutura do programa.
Permite transferncias arbitrrias de controle

Prof. Luiz Gustavo A. Martins

Pg.:7/28

UFU Universidade Federal de Uberlndia

Faculdade de Computao

INICIO

INICIO

1
N

Leitura
P1, P2,
P3 e P4

condio
S
Ao 2

Ao 1
MEDIA =
(P1+P2+P3+P4)/4

Ao 3
MEDIA

condio
S
N
FIM

FIM

III. Diagramas de Chapin ou Nassi_Shneiderman


(Cartas N-S)
So ferramentas grficas que representam a funo principal de cada passo do
algoritmo dentro de uma caixa.
Exemplos:

Leia P1, P2, P3 e P4


Mdia = (P1+P2+P3+P4) / 4

condio

Escreva Mdia

IV. Pseudolinguagem
Linguagem especial para desenvolvimento de algoritmos, que utiliza expresses
pr-definidas para representar aes e fluxos de controle.
Funciona como uma linguagem simplificada de programao, logo, facilita a
codificao futura.

Prof. Luiz Gustavo A. Martins

Pg.:8/28

UFU Universidade Federal de Uberlndia

Faculdade de Computao

uma descrio textual, estruturada e regida por regras; que descrevem os passos
executados no algoritmo.
Possui caractersticas similares s linguagens de programao:
Utiliza palavras-chaves (ex: escreva, se-ento, etc.);
Identao (alinhamento dos blocos de comandos);
Possui um comando por linha;
Utiliza ; como finalizador de comando;
Etc.

Obs: ser a forma de representao utilizada durante este curso.


Exemplo:
algoritmo_Media_Final
declare
inteiro: P1, P2, P3, P4;
real: media;
inicio
leia(P1, P2, P3, P4);
media (P1+P2+P3+P4)/4;
escreva(media);
fim
fim_algoritmo

5. Estrutura de Dados
O computador s conhece os valores que esto armazenados na sua
memria.
Portanto, a maioria das instrues est, de certa forma, associada ao processo de
armazenamento ou transformao destes valores.
Na concepo de algoritmo, pode-se considerar:
Memria = conjunto de posies;
Cada posio recebe uma identificao (nome) e armazena um valor.

Prof. Luiz Gustavo A. Martins

Pg.:9/28

UFU Universidade Federal de Uberlndia

Faculdade de Computao

Abstrao do Conceito de Memria


IDENTIFICADOR

IDADE

NOME

X1

VALOR

18

Joo

2.5

As posies de memria sempre armazenam um valor e seguem as seguintes


premissas:
Se armazenamos um novo valor em uma posio, o seu valor antigo ser
perdido;
Se nenhum valor for atribudo a uma determinada posio, esta possui um
lixo (as posies nunca esto vazias)
Identificador:
Nome de uma posio da memria;
definido pelo programador;
Recomenda-se o uso de nomes significativos.
Exemplo: IDADE, NOME, VLR_SALARIO
Contra-exemplo: X1, KCP, VAR_1, VAR_2
Regras para definio de identificadores:

Deve comear com uma letra;

Pode conter letras, nmeros e o caracter especial _.


Exemplo: NOME, VLR_SALARIO, NOTA_1
Contra-exemplo: 1 NOTA, C&A, X-1

Constantes: representam valores que no mudam no decorrer do algoritmo


Exemplo: O nome :, 24, PI, etc.
Variveis: representam dados cujos valores so modificados ao longo da execuo
do algoritmo

5.1.

Tipos Primitivos de Dados

Numricos:
Inteiro (ex: 1, -5, 100);
Real (ex: 1.3, -3.5, 0.55).
Prof. Luiz Gustavo A. Martins

Pg.:10/28

UFU Universidade Federal de Uberlndia

Faculdade de Computao

No-Numricos:
Booleano (lgico ex: True ou False);
Caracter (alfanumrico ex: A, @, 1).

Neste tipo, utilizamos como delimitadores de contedo.

5.2.

Tipos Estruturados de Dados

Estrutura de Dados Homognea:


Vetores: estrutura que suporta N posies de um mesmo tipo de dado,
cada uma com seu respectivo valor.
Ex: char[1..100]: string;
Matrizes: estrutura que suporta NxM posies de um mesmo tipo de
dado, cada uma com seu respectivo valor.
Ex: int[1..10,1..10]: matriz_identidade;
Estrutura de Dados Heterognea :
Registros: estrutura que suporta K variveis, cada qual com um tipo de
dado prprio.
EX:

registro {
char[1..100]: nome;
int: idade;
real: salario
booleano: ativo} : cadastro;

Obs: os tipos estruturados podem ser combinados de modo a formar


estruturas complexas de dados.

Prof. Luiz Gustavo A. Martins

Pg.:11/28

UFU Universidade Federal de Uberlndia

Faculdade de Computao

6. Estrutura Geral de um Algoritmo


algoritmo_NomeAlgoritmo
Declarao de variveis
e constantes globais
inicio
Blocos de Comandos
fim
fim_algoritmo

Declarao de variveis e
constantes locais

Comentrios

Comandos de E/S

Comandos de Atribuio

Estruturas de seleo

Estruturas de repetio

Chamada de Funes ou
Procedimentos

7. Comandos Bsicos
7.1.

Declarao de Variveis:

Define os locais na memria que sero rotulados com o identificador da varivel


que ser utilizada para a manipulao de um determinado tipo de dado.
Nenhuma varivel pode ser usada sem antes ter sido declarada.
Sintaxe: declare
<tipo_do_dado>: Lista_Variaveis;

Tipo_do_dado = tipos primitivos (inteiro, real, caracter e lgico) ou tipos


estruturados (vetores, matrizes e registros).
Lista_Variaveis = conjunto de identificadores.

7.2.

Comentrios:

Na verdade, comentrios no so comandos, mas so muito importantes para a


documentao e entendimento dos algoritmos e programas de computador.
So compostos por textos explicativos em linguagem natural delimitados entre /* e
*/
Exemplo: /* Este algoritmo calcula a mdia aritmtica das notas do semestre */

OBS: Algumas literaturas utilizam { }, mas no empregaremos estes smbolos para no


confundir com os delimitadores do C.

Prof. Luiz Gustavo A. Martins

Pg.:12/28

UFU Universidade Federal de Uberlndia

7.3.

Faculdade de Computao

Comandos de Entrada e Sada:

So utilizados para obter (entrada) ou fornecer (sada) informaes ao usurio


durante a execuo do algoritmo.
Sintaxe: leia(identificador, identificador, ...);
escreva(termo, termo, ...);

para sada no monitor

imprima(termo, termo, ...);

para sada na impressora

Indicador = nome da varivel que receber a informao


Termo = uma varivel, uma constante ou uma expresso
Exemplo: leia(P1, P2, P3, P4);
escreva(A mdia final :, media);
imprima(A mdia final :, (P1+P2+P3+P4)/4);

7.4.

Comando de Atribuio:

Similar ao sinal de igual das expresses matemticas convencionais, este comando


atribui varivel da esquerda o valor da expresso da direita.
Sintaxe: varivel expresso;

Varivel = identificador da varivel que receber o valor.


Expresso = pode ser uma varivel, uma constante, uma expresso/funo
matemtica ou um expresso lgica.
Exemplo: nome fulano;
condicao not(A) and B;
cad.sal_liq cad.sal_bruto cad.descontos;
valor_absoluto abs(matriz_identidade[2,4]);
Tipos de Operadores:
Relacionais: = (igual), <> (diferente), > (maior que), < (menor que),
>= (maior ou igual) e <= (menor ou igual)
Lgicos: and, or, not
Aritmticos: + (soma), - (subtrao), * (multiplicao), / (diviso) e
^ (exponenciao).

Obs: o uso de operadores lgicos e relacionais resultam em valores


lgicos/booleanos (true ou false).
Prof. Luiz Gustavo A. Martins

Pg.:13/28

UFU Universidade Federal de Uberlndia

Faculdade de Computao

Tipos de Funes:
abs(X): obtm o valor absoluto de X;
sqrt(X): calcula a raiz quadrada de X;
log(X): calcula o logaritmo de X;
mod(X,Y): obtm o resto da diviso de X por Y;
trunca(X): obtm a parte inteira de X;
round(X): arredonda o valor de X;
sen(X): calcula o valor do seno de X;
cos(X): calcula o valor do cosseno de X;
tan(X): calcula o valor da tangente de X.

Precedncia de Operadores e Funes


Operadores

Associatividade

Parnteses e Funes

Direita Esquerda

Exponenciao e Radiciao

Esquerda Direita

Multiplicao e Diviso

Esquerda Direita

Soma e Subtrao

Esquerda Direita

Operadores Relacionais

Esquerda Direita

Operadores Lgicos

Esquerda Direita

Exerccios de Fixao
1. Faa 2 exemplos para cada um dos conceitos a seguir: entrada de dados; sada de
dados; declarao de variveis (tipos primitivos); declarao de variveis (tipos
compostos); e comandos de atribuio de expresses aritmticas e funes.
2. Utilizando tipos primitivos, crie declaraes de variveis que armazenem as
seguintes informaes: o nome de um objeto geomtrico, a quantidade de lados, a
rea, o permetro e se o objeto regular ou no.
3. Refaa o exerccio anterior utilizando dados estruturados, com o objetivo de
armazenar os dados de at 10 objetos.

Prof. Luiz Gustavo A. Martins

Pg.:14/28

UFU Universidade Federal de Uberlndia

Faculdade de Computao

4. Escreva um algoritmo que leia 2 nmeros inteiros e retorne no monitor os


resultados da soma, subtrao, multiplicao, diviso, diviso inteira e resto da
diviso destes nmeros.

8. Estruturas de Controle
8.1.

Estrutura Seqencial:

Conjunto de comandos que so executados numa seqncia linear, de cima para


baixo, na mesma ordem que aparecem.
Sintaxe: comando1;
comando2;
comandoN;

8.2.

Estrutura de Seleo:

Permite a escolha de um grupo de aes para serem executadas de acordo com


a aceitao ou no de certas condies.
As condies que so testadas so do tipo lgico (s podem assumir 2
valores - Verdadeiro ou Falso).
Comando SE:
Executa um bloco de comandos especfico se a condio testada for
verdadeira e um outro bloco de comandos quando a condio for falsa.
Sintaxe: se <condio> ento
bloco de comandos (condio Verdadeira);
seno
bloco de comandos (condio Falsa);
fim-se

OBS: a clusula SENO opcional.


Exemplos:
Se numero < 0 ento
numero abs(numero);

Comando SE SEM
a clusula SENO

fim-se

Prof. Luiz Gustavo A. Martins

Pg.:15/28

UFU Universidade Federal de Uberlndia

Faculdade de Computao

se cadastro[1].sexo = F ento
escreva(Sra. , cadastro[1].nome);
seno

Comando SE COM
a clusula SENO

escreva(Sr. , cadastro[1].nome);
fim-se
Ninhos de SE:
Dentro de um comando de seleo podemos colocar qualquer tipo de
comando, inclusive outros comandos de seleo.
Exemplo:
se <condio1> ento
se <condio2> ento
bloco de comandos (condio2 Verdadeira);
fim-se
seno
se <condio3> ento
bloco de comandos (condio3 verdadeira);
seno
bloco de comandos (condio3 falsa);
fim-se
fim-se
Comando CASO:
Testa vrias condies para uma mesma varivel e executa o bloco de
comandos relacionado condio verdadeira.
Substitui os ninhos de comando SE, quando estes so feitos com base em
uma mesma expresso e testarem somente igualdades.
Sintaxe: caso <identificador_varivel>

Prof. Luiz Gustavo A. Martins

<op1>:

bloco de comandos;

<op1>:

bloco de comandos;

<op1>:

bloco de comandos;
Pg.:16/28

UFU Universidade Federal de Uberlndia

Faculdade de Computao

<op1>:

bloco de comandos;

outro:

bloco de comandos;

fim-caso

OBS: A clusula OUTRO do comando opcional.


Exemplo:
caso estado_civil
S:

escreva(Solteiro);

C:

escreva(Casado);

D:

escreva(Divorciado);

V:

escreva(Vivo);

outro: escreva(Desconhecido);
fim-caso
Exerccios de Fixao:
1. Faa um algoritmo para montar um menu na tela com 5 opes (1 - Cadastro,
2 - Edio, 3 - Consulta, 4 - Excluso e 5 - Sair), leia a opo escolhida e
chame a funo correspondente.

Obs: neste exerccio, a chamada de uma funo equivale a digitar o seu


nome.
1. Elabore um algoritmo que dado um nmero inteiro qualquer, responda se ele
positivo, negativo ou nulo (igual a zero).
2. Modifique o algoritmo anterior, de modo que ele responda se o nmero par
ou mpar.
3. Escreva um algoritmo que leia o nome e a inicial do estado civil (C, S, V, D ou
O) de N pessoas, at que seja digitado FIM no nome. No final, este
algoritmo deve retornar a lista das pessoas cadastradas e seus respectivos
estados civis (Casado, Solteiro, Vivo, Divorciado ou Outro).

8.3.

Estrutura de Repetio:

Permite a repetio de um grupo de aes. Existem 2 tipos de estrutura de


repetio:
Condicional: a repetio ocorre enquanto a condio lgica testada for
verdadeira (comandos ENQUANTO e REPITA);
Prof. Luiz Gustavo A. Martins

Pg.:17/28

UFU Universidade Federal de Uberlndia

Faculdade de Computao

Incondicional: tem um nmero pr-determinado de repeties (comando


PARA).
Comando ENQUANTO:
A condio testada no incio da repetio.
Enquanto a condio for Verdadeira, o bloco de comandos executado.
O bloco de comandos pode ser executado 0 ou + vezes.
Pra a execuo quando a condio se tornar Falsa.
Sintaxe: enquanto <condio> faa
bloco de comandos;
fim-enquanto
Exemplo:
numero 1;
enquanto numero <> 0 faa
leia(numero);
escreva(o quadrado de , numero, : );
escreva(numero^2);
fim-enquanto
escreva(FIM DO PROGRAMA);
Comando REPITA:
A condio testada no final da repetio.
Enquanto a condio for Falsa, o bloco de comandos executado.
O bloco de comandos executado pelo menos 1 vezes.
Pra a execuo quando a condio se tornar Verdadeira (condio de
parada).
Sintaxe:

repita
bloco de comandos;
ate <condio>

Prof. Luiz Gustavo A. Martins

Pg.:18/28

UFU Universidade Federal de Uberlndia

Faculdade de Computao

Exemplo:
repita
leia(numero);
escreva(o quadrado de , numero, : );
escreva(numero^2);
ate numero = 0
escreva(FIM DO PROGRAMA);
Comando PARA:
Repete o bloco de comandos enquanto a varivel de controle for menor ou
igual ao valor final (vlr_fim).
A varivel de controle recebe um valor inicial (vlr_ini) e incrementada
automaticamente pelo parmetro de incremento padro (acrscimo de 1),
quando a clusula PASSO omitada, ou pelo valor definido pelo usurio
atravs desta clusula.
A varivel de controle NO pode ser modificada no bloco de comandos.
Sintaxe: para <var_controle> = vlr_ini ate vlr_fim passo <inc> faa
bloco de comandos;
fim-para
Exemplo:
para cont = 1 ate 9 passo 2 faa
vetor[cont] cont;
vetor[cont+1] cont;
fim-para
/* escreve o vetor na ordem inversa */
para cont = 10 ate 1 passo -1 faa
escreva(vetor[cont], , );
fim-para

Prof. Luiz Gustavo A. Martins

Pg.:19/28

UFU Universidade Federal de Uberlndia

Faculdade de Computao

Exerccios de Fixao:
1. Elabore um algoritmo para determinar o menor nmero inteiro fornecido pelo
usurio. Considere que o nmero zero indica o fim da entrada de dados.
2. Construa um algoritmo que calcule e imprima a somatria de N nmeros (sendo
N > 0). Considere como dados de entrada a quantidade de nmeros a serem
lidos e os valores dos respectivos nmeros.
3. Faa um algoritmo que, sem utilizar o operador de exponenciao, realize a
operao XY, para qualquer X e Y fornecido pelo usurio.
4. Reescreva o algoritmo acima, utilizando as demais estruturas de repetio.

9. Outras Informaes
9.1.

Importncia das Variveis

As variveis representam as informaes manipuladas pelo algoritmo:


TIPO

EXEMPLO

Dados fornecidos pelo usurio

leia(nome, idade);

Resultados de expresses

area base * altura;

Acumuladores/Contadores
Finalizadores de repeties
Sinalizadores/Flags

9.2.

cont cont + 1; /* Conta */


soma soma + num; /*Acumula*/
ate resp = N
atualizado N; /* No Lgico */
atualizado False; /* Lgico */

Dicas na Confeco de Algoritmos

Para construir um algoritmo mais claro e legvel, deve-se utilizar:


Comentrios de cabealho (descreve sucintamente o algoritmo) e de
linha (descreve a ao realizada por uma determinada linha de comando);
Identificadores representativos;
Identao das estruturas lgicas do algoritmo;
Linhas em branco entre estruturas lgicas complexas (ex: declarao de
variveis, ninhos de SE, estruturas de controle, etc.)

Prof. Luiz Gustavo A. Martins

Pg.:20/28

UFU Universidade Federal de Uberlndia

9.3.

Faculdade de Computao

Teste de Mesa

Consiste do acompanhamento manual (linha a linha) da execuo do algoritmo,


visando:
Avaliar se os resultados obtidos corresponde queles esperados/desejados.
Detectar, se existentes, os erros de comandos e/ou fluxo de execuo.
Durante os testes, deve-se definir o valores de entrada, visando avaliar as
seguintes situaes:
Casos extremos (valores limtrofes da validade);
Excees do problema (valores invlidos).
Exemplo:
algoritmo_Obtem_Conceito_Aluno
declare
int: P1, P2, P3, P4;
real: media;
inicio
leia(P1,P2,P3,P4);
media (P1+P2+P3+P4) / 4;
escreva(media);
se media < 6 entao
escreva(REPROVADO);
senao
escreva(APROVADO);
fim-se
fim
fim-algoritmo

Prof. Luiz Gustavo A. Martins

Pg.:21/28

UFU Universidade Federal de Uberlndia

Faculdade de Computao

Valores das Entradas: P1 = 5, P2 = 6, P3 =8 e P4 = 4


Teste1

P1

P2

P3

P4

media

media < 6

Declare

int: P1,P2,P3,P4;

real: media;

Inicio

leia(P1,P2,P3,P4);

media (P1+P2+P3+P4) / 4;

5,75

escreva(media);

5,75

se media < 6 entao

5,75

true

Demais comandos

5,75

true

* Representa um valor no conhecido (lixo)


Valores das Entradas: P1 = -5, P2 = 11, P3 =12 e P4 = 15
Teste2

P1

P2

P3

P4

media

media < 6

Declare

int: P1,P2,P3,P4;

real: media;

Inicio

leia(P1,P2,P3,P4);

-5

11

12

15

media (P1+P2+P3+P4) / 4;

-5

11

12

15

8,25

escreva(media);

-5

11

12

15

8,25

se media < 6 entao

-5

11

12

15

8,25

False

Demais comandos

-5

11

12

15

8,25

false

Este teste identifica duas falhas no algoritmo: aceitar valor negativo e valores

maiores que 10.

Prof. Luiz Gustavo A. Martins

Pg.:22/28

UFU Universidade Federal de Uberlndia

Faculdade de Computao

Exerccios de Fixao:
1. Faa o teste de mesa no algoritmo do exerccio 4 do slide 50 e verifique se
necessria a incluso de alguma consistncia de dados.
2. Teste os algoritmos abaixo:
algoritmo_Exec2.a
declare
real: A, B;
int: C, X;
inicio
A 6.0;
B A/2;
C 11;
X trunca(C / 4);
C mod(C, 2);
B 5.4;
C C+1;
A B+2;
fim
fim-algoritmo

algoritmo_Exec2.c
declare
int: C, X, R;
inicio
leia(C, X);
se C > X entao
escreva(0);
senao
repita
R R + C;
C C+1;
ate C > X
escreva(R);
fim-se
fim
fim-algoritmo

algoritmo_Exec2.b
declare
int: c, num, exp, res;
inicio
leia(num, exp);
res 1;
para c=1 ate exp faa
res res * num;
fim-para
escreva(res);
fim
fim-algoritmo

Prof. Luiz Gustavo A. Martins

Pg.:23/28

UFU Universidade Federal de Uberlndia

Faculdade de Computao

10. Programao Estruturada (Modularizao)


A caracterstica fundamental da programao estruturada modular a resoluo
do problema atravs da sua diviso em subproblemas menores e mais
simples.
Neste processo, cada subproblema pode ser analisado de forma
individual e independente dos demais.
Tal modularizao tem por objetivo:
Facilitar o trabalho com problemas complexos;
Permitir a reutilizao de mdulos
Refinamentos Sucessivos (top-down): Essa tcnica consiste da diviso do
problema inicial em subproblemas, e estes em partes ainda menores,
sucessivamente, at que cada parte seja descrita atravs de um algoritmo
claro e bem-definido.
Um algoritmo que resolve um determinado subproblema denominado
subalgoritmo.

10.1.

Subalgoritmos (Mdulos)

Por conveno, um subalgoritmo deve ser declarado acima dos mdulos que o
chamam.
Todo subalgoritmo tem por objetivo a resoluo de um determinado subproblema.
Portanto, mantm as mesmas caractersticas de um algoritmo comum, ou
seja, pode ter dados de entrada; dados de Sada; e conter qualquer tipo de
comando aceito por um algoritmo.
Por serem tratados de forma independente dos demais mdulos, cada subalgoritmo
s pode manipular variveis/constantes:
Globais: declaradas no incio do algoritmo principal (passagem de valor
por referncia); ou
Locais: declaradas no prprio subalgoritmo (passagem de valor por
argumento).
Subalgoritmos podem ser do tipo Procedimento (no retorna valor de forma
explcita) ou Funo (retorna valor de forma explcita).

10.1.1.

Troca de Informao

Existem duas formas de interagir com subalgoritmos:


Explcita: quando a troca feita atravs de argumentos.
Existem 2 modos de passar argumentos para um subalgoritmo:
Prof. Luiz Gustavo A. Martins

Pg.:24/28

UFU Universidade Federal de Uberlndia

Faculdade de Computao

Por valor: o argumento formal ser uma varivel independente,


ou seja, ocupar um espao na memria durante a execuo do
mdulo. Qualquer alterao no argumento formal, no afeta o
argumento atual.
Por referncia: o argumento formal no ocupar espao de
memria, pois utilizar o espao j alocado pelo argumento
atual. Qualquer alterao realizada no subalgoritmo afetar o
argumento atual.
Implcita: quando a troca feita pela utilizao de variveis
globais.
Esta forma funciona de modo similar passagem de argumentos
por referncia, pois no necessita de nova alocao de
memria e qualquer alterao realizada durante a execuo do
modulo afeta o contedo da varivel para os demais
mdulos.

10.1.2.

Argumentos

Na escrita de um subalgoritmo, os dados necessrios para a resoluo


do subproblema podem ser informados na declarao do mdulo. Esses
argumentos so chamados de argumentos formais.
Ex: funcao expoente(BASE:real, FATOR:int)
Os argumentos usados na chamada do mdulo so denominados
argumentos atuais.
Ex: resultado expoente(NRO, EXP);
Tanto a quantidade, quanto o tipo de dado dos argumentos atuais
devem ser os mesmos dos respectivos argumentos formais.

10.1.3.

Subalgoritmo Procedimento

Interface com outros mdulos:


Entrada: pode ser explcita ou implcita;
Sada: somente implcita.

Prof. Luiz Gustavo A. Martins

Pg.:25/28

UFU Universidade Federal de Uberlndia

Faculdade de Computao

Sintaxe:
procedimento <nome_proc>(arg1:tipo, arg2:tipo, ... , argN:tipo)
<declarao de variveis/constantes locais>
inicio
<bloco de comandos>
fim
fim-procedimento
inicio
<nome_proc>(var1, var2, ... , varN);
fim

10.1.4.

Subalgoritmo Funo

Interface com outros mdulos:


Entrada: pode ser explcita ou implcita;
Sada: sempre explcita (associado ao nome da funo),

podendo tambm ter sadas implcitas (no usual).

Sintaxe:
funcao <nome_func>(arg1:tipo, arg2:tipo, ... , argN:tipo): tipo_funcao
<declarao de variveis/constantes locais>
inicio
<bloco de comandos>
fim
fim-funcao
inicio
var <nome_func>(var1, var2, ... , varN);
fim

Prof. Luiz Gustavo A. Martins

Pg.:26/28

UFU Universidade Federal de Uberlndia

10.1.5.

Faculdade de Computao

Consideraes Finais

Exemplo de Utilizao de Subalgoritmos


algoritmo_exemplo
Declare
int: num1, num2;
procedimento ler_dados() /* L a base e o fator da exponenciao */
inicio
repita
leia(num1, num2);
ate (num1 > 0) and (num2 >= 0)
fim
fim-procedimento
funcao exp(base:int, fator:int): int /* Faz base ^ fator */
declare
int: cont, resultado;
inicio
resultado 1;
para cont=1 ate fator faca
resultado resultado * base;
fim-para
exp resultado;
fim
fim-funcao
inicio
ler_dados() /* chamada do procedimento */;
escreva(exp(num1, num2)); /* chamada da funo */
fim
fim-algoritmo

Exerccios de Fixao:
1. Utilizando os conceitos de procedimentos e funes, construa um algoritmo que
determine, para uma srie de valores inteiros, quantos so maiores que a mdia
do conjunto.
2. Utilizando os conceitos de procedimentos e funes, desenvolva um algoritmo
que calcule, a partir de 2 nmeros inteiros P e M, a combinao de M
elementos tomados P a P, conforme a expresso:

CMP =

Prof. Luiz Gustavo A. Martins

M!
P!( M P )!

Pg.:27/28

UFU Universidade Federal de Uberlndia

Faculdade de Computao

11. Referncias Bibliogrficas


Boratti, I. C. Introduo Programao Algoritmos, 2 edio, editora Visual
Books;
Farrer, C. G. B., Faria, E. C. Algoritmos Estruturados, 3 edio, editora LTC;
Internet.

Prof. Luiz Gustavo A. Martins

Pg.:28/28

Você também pode gostar