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

Dados de Entrada

Processamento (Transformao)

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
Manuteno

Anlise de Requisitos

Especificao
Projeto e Desenvolvimento

Produto

Testes e Validao

Programas

2.1.

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

alunos, calcular a mdia final, etc.)

Requisito = ao que deve ser executada pelo sistema. (Ex: registrar as notas dos 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 Computador

algoritmo computacional

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. 2. 3. 4. 5. 6. 7. Move o disco 1 para a haste C Move o disco 2 para a haste B Move o disco 1 para a haste B Move o disco 3 para a haste C Move o disco 1 para a haste A Move o disco 2 para a haste C Move o disco 1 para a haste C

Prof. Luiz Gustavo A. Martins

Pg.:4/28

UFU Universidade Federal de Uberlndia

Faculdade de Computao

1 2 3 A 3 B

1 C

3 A 4 1

2 B

1 C

3 A 5

1 B C 6 A

3 B C

1 A 7

2 B

3 C

1 A B

2 3 C

2 3 A B

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 condio S

Leitura P1, P2, P3 e P4

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

Ao 2

Ao 3 MEDIA S N FIM FIM 1 condio

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 Escreva Mdia S


condio

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 VALOR IDADE 18 NOME Joo X1 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


Inteiro (ex: 1, -5, 100); Real (ex: 1.3, -3.5, 0.55).

Numricos:

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


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 Homognea:

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

Faculdade de Computao

7.3.

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, ...); imprima(termo, termo, ...);

para sada no monitor 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


^ (exponenciao).

Aritmticos: + (soma), - (subtrao), * (multiplicao), / (diviso) e

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
Parnteses e Funes Exponenciao e Radiciao Multiplicao e Diviso Soma e Subtrao Operadores Relacionais Operadores Lgicos

Associatividade
Direita Esquerda Esquerda Direita Esquerda Direita Esquerda Direita Esquerda Direita 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); fim-se Comando SE SEM a clusula SENO

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 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> <op1>: <op1>: <op1>:
Prof. Luiz Gustavo A. Martins

Comando SE COM a clusula SENO

bloco de comandos; bloco de comandos; bloco de comandos;


Pg.:16/28

UFU Universidade Federal de Uberlndia

Faculdade de Computao

<op1>: outro: fim-caso

bloco de comandos; bloco de comandos;

OBS: A clusula OUTRO do comando opcional.


Exemplo: caso estado_civil S: C: D: V: escreva(Solteiro); escreva(Casado); escreva(Divorciado); 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 Dados fornecidos pelo usurio Resultados de expresses Acumuladores/Contadores Finalizadores de repeties Sinalizadores/Flags EXEMPLO leia(nome, idade); area base * altura; cont cont + 1; /* Conta */ soma soma + num; /*Acumula*/ ate resp = N atualizado N; /* No Lgico */ atualizado False; /* Lgico */

9.2.

Dicas na Confeco de Algoritmos


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.)

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

Prof. Luiz Gustavo A. Martins

Pg.:20/28

UFU Universidade Federal de Uberlndia

Faculdade de Computao

9.3.

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 * * * 5 5 5 5 5 P2 * * * 6 6 6 6 6 P3 * * * 8 8 8 8 8 P4 * * * 4 4 4 4 4 media * * * 5,75 5,75 5,75 5,75 media < 6 true true

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 Demais comandos

* Representa um valor no conhecido (lixo) Valores das Entradas: P1 = -5, P2 = 11, P3 =12 e P4 = 15 Teste2 P1 * * * -5 -5 -5 -5 -5 P2 * * * 11 11 11 11 11 P3 * * * 12 12 12 12 12 P4 * * * 15 15 15 15 15 media * * * 8,25 8,25 8,25 8,25 media < 6 False false

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 Demais comandos

maiores que 10.

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

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.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 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

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

argumento).

Locais: declaradas no prprio subalgoritmo (passagem de valor por

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

Faculdade de Computao

10.1.5.

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:
P CM =

M! P!( M P )!

Prof. Luiz Gustavo A. Martins

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