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

Dados de Sada

! 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 C

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

P1, P2, P3 e P4

Leitura

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

Ao 2

Ao 3 MEDIA S condio N FIM FIM 1

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


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

! 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.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 " 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
" Explcita: quando a troca feita atravs de argumentos. Existem 2 modos de passar argumentos para um subalgoritmo:

! Existem duas formas de interagir com subalgoritmos:

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
" Entrada: pode ser explcita ou implcita; " Sada: somente implcita.

! Interface com outros mdulos:

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
" Entrada: pode ser explcita ou implcita; " Sada: sempre explcita (associado ao nome da funo),

! Interface com outros mdulos:

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