Claudia Gama claudiag@ufba.br UFBa - Introduo Lgica de Programao MAT 146
Caro Aluno:
Esta apostila foi elaborada a partir das minhas notas de aula e dos livros da bibliografia recomendada. Ela visa auxiliar na compreenso dos conceitos abordados ao longo do curso, bem como promover a prtica de algoritmos com exerccios de fixao e exerccios propostos. Nela voc vai encontrar: Resumo dos principais tpicos Referncias bibliogrficas Exerccios de fixao Exerccios propostos (alguns incluem soluo)
Mas ateno: esta apostila deve ser usada somente como material complementar e nunca como nica fonte de estudo.
Prof. Claudia Gama
Legenda
Na apostila so usados alguns smbolos para chamar a ateno de partes relevantes e ajudar na organizao do contedo da apostila. Veja os smbolos e seus significados abaixo.
Sugesto de leitura de captulo ou sees de um livro. A leitura sugerida para obter-se um entendimento completo do tpico apresentado na apostila.
Sugestes de pesquisas na Internet de assuntos complementares ou curiosidades.
Exerccios de Fixao: so exerccios simples para verificao do entendimento de conceitos.
> Sugesto de Exerccios Complementares em livros da bibliografia.
h Exerccios Propostos: exerccios para solidificar o entendimento. Altamente recomendveis!
Texto Complementar e Exerccios 2 UFBa - Introduo Lgica de Programao MAT 146 NDICE
Parte I - Introduo Lgica de Programao
1. Algoritmos ---------------------------------------------------------------------- 6 1.1. Exemplo: Construindo um Algoritmo ------------------------------- 6 h Exerccios Propostos----------------------------------------------------- 8 2. Resoluo de Problemas atravs de Computadores ----------------------- 9 2.1. Programao ------------------------------------------------------------ 9 3. Algoritmos Computacionais -------------------------------------------------11 3.1. Diretrizes para Elaborao de Algoritmos -------------------------11 3.2. Descrio de Algoritmos ---------------------------------------------12 3.3. Estruturas de Dados --------------------------------------------------13 3.4. Operaes Bsicas ----------------------------------------------------15 Exerccios de Fixao----------------------------------------------------17 3.5. Estruturas de Controle ------------------------------------------------18 Exerccios de Fixao----------------------------------------------------21 3.6. Consideraes sobre o Uso de Variveis em Algoritmos --------22 3.7. Tcnicas de Elaborao e Verificao de Algoritmos ------------24 Exerccios de Fixao----------------------------------------------------25 h Exerccios Propostos----------------------------------------------------25
Apndices Parte I
1. SOLUES DE EXERCCIOS
2. NOTAO PARA FLUXOGRAMAS
Texto Complementar e Exerccios 3 UFBa - Introduo Lgica de Programao MAT 146 Parte II - Lgica de Programao com Pascal
4. Linguagens de Programao de Alto Nvel--------------------------------27 4.1. Tipos de Linguagens de Programao ------------------------------28 4.2. Compilao e Execuo de Programas -----------------------------28 Exerccios de Fixao---------------------------------------------------29 5. A Linguagem de Programao Pascal --------------------------------------30 5.1. Estrutura Geral ---------------------------------------------------------30 5.2. Estruturas de Dados em Pascal --------------------------------------30 5.2.1. Tipos simples de dados----------------------------------------30 5.2.2. Tipos simples definidos pelo usuario------------------------31 5.3. Estruturas de Controle ------------------------------------------------32 h Exerccios Propostos----------------------------------------------------35 5.4. Estruturas de Dados : Tipos de Dados Estruturados --------------36 5.4.1. Vetores ----------------------------------------------------------36 Exerccios de Fixao---------------------------------------------------39 5.4.2. Matrizes ---------------------------------------------------------40 Exerccios de Fixao---------------------------------------------------41 5.5. Algoritmos de Classificao e Busca -------------------------------42 5.6. Procedimentos e Funes---------------------------------------------44 Exerccios de Fixao---------------------------------------------------46 5.7. Registros e Tabelas----------------------------------------------------49 5.8. Arquivos Diretos e Seqenciais -------------------------------------51 Exerccios de Fixao---------------------------------------------------53 5.9. Variveis Dinmicas: Ponteiros -------------------------------------55
Apndices Parte II
3. SOLUES DE EXERCCIOS - PROGRAMAS PASCAL Texto Complementar e Exerccios 4 UFBa - Introduo Lgica de Programao MAT 146
Referncias Bibliogrficas
Forbellone, Andr L. V. Eberspcher, Henri F. Lgica de Programao - A Construo de Algoritmos e Estruturas de Dados; Makron Books. 1993.
Gottfried, Byron B. Programao em Pascal; Schaum / McGraw Hill, 1988.
Tremblay, Jean-Paul; Bunt, Richard B. Cincia dos Computadores - Uma Abordagem Algoritmica; McGraw Hill. 1983.
Guimares; Lages Algoritmos e Estruturas de Dados; Livros Tcnicos e Cientficos Editora. 1985
Wirth, Niklaus Algoritmos e Estruturas de Dados; Editora PHB, 1986.
Ziviani, Nivio Projeto de Algoritmos; Livraria Pioneira Editora
Saliba, Walter L. C. Tcnicas de Programao - Uma Abordagem Estruturada; Makron Books
Carvalho, Srgio E. R. Introduo Programao com Pascal; Editora Campus
Farrer, Harry et al. Pascal Estruturado; Editora Guanabara Dois. 1985.
Shmitz, Eber; Teles, Antnio Pascal e Tcnicas de Programao; Livros Tcnicos e Cientficos Editora. 1986. Texto Complementar e Exerccios 5 UFBa - Introduo Lgica de Programao MAT 146 PARTE I. INTRODUO LGICA DE PROGRAMAO
1. ALGORITMOS
Leitura: Lgica de Programao - Forbellone Cap. 01
Definimos Algoritmo como a seqncia de passos que visam atingir um objetivo bem definido. Os algoritmos so utilizados no dia-a-dia para a soluo dos mais diversos problemas.
E Alguns exemplos genricos de algoritmos usados no nosso cotidiano so: uma coreografia, um manual de instrues, uma receita de bolo, a soluo de uma equao do 2 grau, uma pesquisa na lista telefnica, etc. O que todas essas coisas tem em comum? Elas podem ser vistas como uma serie finita e bem definida de passos ou regras que, quando realizadas, atingem um objetivo previamente definido. Assim, outra definio para algoritmos poderia ser:
Algoritmo a descrio de um conjunto de aes que, obedecidas, resultam numa sucesso finita de passos, atingindo um objetivo esperado.
Dessa forma, vemos que, o que importa no algoritmo o efeito das aes para a obteno do resultado esperado. So propriedades de algoritmos: aes simples e bem definidas (no ambguas); seqncia ordenada de aes; seqncia finita de passos.
1.1 Exemplo: Construindo um Algoritmo
Considere o seguinte problema: Temos trs hastes. Uma das hastes serve de suporte para trs discos de tamanhos diferentes. Os discos menores so sempre colocados sobre os discos maiores. A figura abaixo mostra uma possvel situao inicial das hastes e discos.
Texto Complementar e Exerccios 6 UFBa - Introduo Lgica de Programao MAT 146 Desejamos mover todos discos para outra haste, porm s podemos movimentar um disco de cada vez e um disco maior nunca pode ser colocado sobre um disco de menor tamanho. Soluo: Em forma narrativa Nomeamos as hastes como 1, 2 e 3 e os discos como p, m e g. Considera-se que inicialmente os discos esto na haste 1. Os passos so: 1. move o disco p para a haste 2. 2. move o disco m para a haste 3. 3. move o disco p para a haste 3. 4. move o disco g para a haste 2. 5. move o disco p para a haste 1. 6. move o disco m para a haste 2. 7. move o disco p para a haste 2.
Podemos tambm representar a soluo em forma grfica, desenhando as hastes e a posio dos discos a cada momento (ou passo).
Como podemos ver, com 3 discos precisamos de, no mnimo, 7 passos para solucionar o problema. Quantos passos seriam necessrios para se mover 4 discos? E para n discos?
Curiosidade: Este problema foi criado m 1883 pelo matemtico francs Edouard Lucas (1842-1891), que tambm criou uma lenda curiosa para enunciar o problema. Deixo para vocs procurarem na Internet a lenda das Torres de Hani.
Texto Complementar e Exerccios 7 UFBa - Introduo Lgica de Programao MAT 146 hExerccios Propostos
P1. Temos trs recipientes de tamanhos distintos: o primeiro com capacidade para 8 litros, outro para 5 litros e o terceiro com capacidade para 3 litros. O recipiente de 8 litros est totalmente cheio. Deseja-se colocar 4 litros em dois recipientes. Considere que os recipientes no sejam graduados.
P2. Numa determinada noite, acontece uma queda de energia. Voc sabia que poderia encontrar 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 passos que poderia ser utilizada para diagnosticar e resolver o problema, o que pode ser previsto em duas possibilidades: a) o fusvel queimou; b) a queda na estao da companhia eltrica.
> Exerccios Complementares
Faa pelo menos 02 Exerccios Propostos do Livro do Forbellone Cap. 1
Visite o site da disciplina e tente resolver os problemas de logica sugeridos: http://www.im.ufba.br /mat146/ProblemaLogica
Texto Complementar e Exerccios 8 UFBa - Introduo Lgica de Programao MAT 146 2. RESOLUO DE PROBLEMAS ATRAVS DE COMPUTADORES
Os computadores podem ser usados de forma eficiente na soluo de certos tipos de problemas. Os problemas que suportam tratamento por computador, em geral, envolvem grandes quantidades de dados ou so problemas de natureza complexa, exigindo a execuo de um grande nmero de passos para alcanar a soluo. Basicamente so problemas na rea de processamento de dados e na rea cientfica. O Computador uma ferramenta que permite a realizao do processamento automtico (ou eletrnico) de dados. Define-se por Processamento de Dados qualquer atividade que, utilizando informaes (ou dados), efetua transformaes para obter novas informaes (ou dados) como resultado.
Dados de Entrada Dados de Sada Processamento (transformao)
Porm , a tarefa desempenhada pelos computadores apenas parte do processo de soluo de problemas. As etapas na soluo de problemas so: i) Entendimento do problema; ii) Criao de uma seqncia de operaes (ou aes) que, quando executadas, produzem a soluo para o problema; iii) Execuo desta seqncia de operaes. iv) Verificao da adequao da soluo.
As etapas de entendimento do problema, criao de seqncia de aes e verificao da adequao da soluo so tarefas desempenhadas por pessoas. J a execuo das operaes pode ser desempenhada por computadores. Os computadores tem a capacidade de executar processos complicados e com grande quantidade de informaes com rapidez e confiabilidade.
2.1 Programao
Programao a seqncia de planejamento, projeto, escrita e testes de instrues desempenhadas pelo computador. uma arte e uma cincia. Arte porque existem muitas maneiras de se realizar o trabalho de programao. Existe espao para uma considervel dose de criatividade. tambm uma cincia, porque existem algumas regras que devem ser seguidas, porque necessrio o uso de lgica e porque existem alguns mtodos rigorosos de programao que asseguram a eficincia, economia e a utilidade dos programas gerados. O trabalho de programao pode se tornar mais fcil se o dividirmos sistematicamente em partes menos complexas (esta tcnica denomina-se dividir para conquistar). Texto Complementar e Exerccios 9 UFBa - Introduo Lgica de Programao MAT 146 Um programa considerado confivel quando conseguir fazer com que o computador cumpra com o objetivo proposto. Os programas construdos devem ser eficazes, realizando a tarefa definida e eficientes, utilizando os melhores meios para realiz-la.
O maior problema na construo de programas a complexidade; esta complexidade representa a quantidade de situaes diferentes que um problema pode apresentar e que devem ser previstas na soluo do mesmo. Portanto, ao se construir um programa, o objetivo principal vencer a complexidade do problema a ser solucionado.
A fim de lidar com esta complexidade, podemos dividir a programao em duas fases distintas:
Problema Soluo na forma de Algoritmo Soluo como um programa de computador 1 2 Fase de Resoluo do Problema Fase de Implementao (ou Codificao) do Algoritmo em alguma Ling. de Programao
C Modelizao (ou Resoluo) do Problema : determinao do modelo de soluo para o problema proposto na forma de um algoritmo computacional. Assim, a elaborao de um algoritmo o primeiro passo para a preparao de um programa de computador. Este algoritmo deve ser independente da linguagem de programao que ser utilizada. C Implementao: a transformao (ou codificao) do algoritmo em alguma Linguagem de Programao adequada ao modelo elaborado.
Leitura complementar: definio de Programao no livro Algoritmos e Estruturas de Dados (Wirth)
Definies Importantes: "Programas so formulaes completas de algoritmos abstratos, baseados em representaes especficas de dados." [Wirth] "Programao Estruturada a arte ou tcnica de construir e formular algoritmos de forma sistemtica." [Wirth] Texto Complementar e Exerccios 10 UFBa - Introduo Lgica de Programao MAT 146
Quem foi Nicklaus Wirth? Em 1984 ele recebeu o mais prestigioso prmio tcnico da ACM (Association for Computing Machinery) o A.M. Turing Award por sua valiosa contribuio para a computao. O resto deixo para vocs pesquisarem. Aproveite e procure saber tambm sobre a ACM. Qual a relevncia dessa associao? O que ela faz?
3. ALGORITMOS COMPUTACIONAIS
O algoritmo uma seqncia de instrues, onde cada instruo representa uma AO que deve ser entendida e realizada. Surge ento uma Questo:
Como saber se j temos detalhes suficientes em um algoritmo para que a AO possa ser entendida e realizada ?
Vai depender do agente que ir executar o Algoritmo. No caso de algoritmos computacionais, sabemos que o computador possui um conjunto limitado de instrues e o algoritmo deve ser expresso nos termos destas instrues. O computador utiliza dois conceitos bsicos para construir e interpretar algoritmos: - Estruturas de Dados = para manipulao das informaes - Estruturas de Controle = para manipulao das aes
3.1 Diretrizes para a Elaborao de Algoritmos
As diretrizes apresentadas abaixo so genricas e podem ser usadas ou adaptadas na organizao dos passos que comporo a soluo de um determinado problema (ou seja, na criao de um algoritmo para atingir um objetivo determinado). 1. Identificao do problema: determinar o que se quer resolver ou qual objetivo a ser atingido. 2. Identificao das entradas de dados: informaes fornecidas, a partir das quais se desenvolvero os clculos. 3. Identificao das sadas de dados: as informaes a serem geradas como resultado. 4. Identificao das regras e limitaes do problema ou das limitaes do agente executante (ex: se o agente fosse uma calculadora no-cientfica, iriam existir limitaes no clculo de funes, por exemplo). 5. Determinao do que deve ser feito para transformar as entradas em sadas. Neste ponto deve ser determinada a seqncia de aes que leve soluo do problema. Para isto preciso: 5.1. observar as regras e limitaes j identificadas; 5.2. determinar aes possveis de serem realizadas pelo agente. Texto Complementar e Exerccios 11 UFBa - Introduo Lgica de Programao MAT 146 6. Construo do Algoritmo, utilizando uma das formas de representao de algoritmos (ver Tpico 3.2) 7. Teste da soluo - execuo de todas as aes do algoritmo, seguindo o fluxo estabelecido para verificar se ele est realmente gerando os resultados esperados ou detectar possveis erros em sua descrio (veja detalhes sobre Teste de Algoritmos no Tpico 3.7)
Exemplo: Imagine o seguinte problema: Calcular a mdia final dos alunos da 6 Srie. Os alunos realizaro quatro provas: P1, P2, P3 e P4. A Mdia Final calculada por: (P1 + P2 + P3 + P4) / 4. Para montar o algoritmo proposto, faremos trs perguntas: a) Quais so os dados de entrada? R: Os dados de entrada so P1, P2, P3 e P4 b) Qual ser o processamento a ser utilizado? R: O procedimento ser somar todos os dados de entrada e dividi-los por 4 (quatro) (P1 + P2 + P3 + P4)/4 c) Quais sero os dados de sada? R: O dado de sada ser a mdia final
3.2 Descrio de Algoritmos
A descrio de um algoritmo de forma clara e fcil de ser seguida ajuda no seu desenvolvimento, depurao (correo de erros) e a subsequente transformao do mesmo num programa.
O Descrio Narrativa Especificao verbal dos passos em linguagem natural. Desvantagens: a linguagem natural prolixa e imprecisa e freqentemente pouco confivel como um veculo de transferir informao. Sua utilizao pode ser adotada, entretanto, para a apresentao de comentrios sobre o algoritmo (ou parte dele), esclarecendo ou realando pontos especficos.
O Fluxograma Uso de ilustraes grficas para transmitir informaes (Ex. Gerais: mapas, diagramas explicativo para montagem de aparelhos, etc.). Um fluxograma mostra, de forma grfica, a lgica de um algoritmo, enfatizando passos individuais e o fluxo de execuo. Texto Complementar e Exerccios 12 UFBa - Introduo Lgica de Programao MAT 146 Desvantagens: utilizao questionvel de fluxogramas detalhados, pois obscurecem a estrutura do programa. Para algoritmos computacionais usaremos os Diagramas de Nassi-Schneidermman (Veja Apndice II no final ).
O Linguagem Algortmica ou Pseudolinguagem Linguagem especial para expresso de algoritmos; funciona como uma "linguagem simplificada de programao", utilizando expresses concisas e pr-definidas para representar as aes e o fluxo de execuo. uma descrio textual, estruturada e regida por regras que descrevem os passos executados no algoritmo. Utiliza-se palavras-chaves, indentao, apenas um passo por linha, normalmente usa-se um smbolo para indicar o final de um passo (como por exemplo o ponto-e-virgula ;), etc.
Usaremos o Portugol, pois ela possui uma estrutura similar ao Pascal.
E Exemplo: Duas representaes para o algoritmo do problema das medias dos alunos da 6 Srie.
1. Receba a nota da prova1 2. Receba a nota da prova2 3. Receba a nota da prova3 4. Receba a nota da prova4 5. Some todas as notas e divida o resultado por 4 6. Mostre o resultado da diviso
3.3 Estruturas de Dados
Leitura: Lgica de Programao - Forbellone Cap. 02
Um aspecto fundamental na construo de algoritmos computacionais so as estruturas de dados, que representam as informaes do problema a ser resolvido. Tais estruturas esto organizadas em tipos distintos de informaes. Dentro do escopo das estruturas de dados, definimos os termos CONSTANTE, VARIVEL e IDENTIFICADOR.
O Tipos Primitivos de Dados
Texto Complementar e Exerccios 13 UFBa - Introduo Lgica de Programao MAT 146 So os grupos de informaes que o computador manipula. Podem ser: 1. Numricos a) inteiros Ex: 1 -4 100 0 -905 ... b) reais Ex: 1,3 816,97 3,0 -0,0055 ...
1. No-numricos a) alfanumricos Ex: CASA livro 18 R$ 55,36 .... b) lgicos ou booleanos Ex: Falso, Verdadeiro (ou False, True)
E Obs: O delimitador usado para alfanumricos pode ser : ou
O Constantes
Representam valores constantes, ou seja, que no variam no decorrer do algoritmo. Ex: 148, Opo:, -8.69, Tecle algo para continuar, Falso ...
O Variveis
Representam informaes cujos valores so modificados ao longo do tempo (Ex. Genrico: a idade de um indivduo). Podemos definir variveis tambm como um local onde um determinado valor (de um dos tipos definidos) armazenado. Assim, a varivel composta de dois elementos bsicos: - contedo - valor atual da varivel - identificador - nome dado varivel para possibilitar sua manipulao
O conceito de varivel, na verdade, corresponde a posies de memria RAM, onde sero armazenados os dados manipulados pelo programa quando este for implementado.
Endereo = Posio na memria Contedo = Informao armazenada Memria RAM ... Varivel Identificador = Nome da varivel Contedo da varivel X
O Identificador
Nome de um local onde se pode colocar qualquer valor do conjunto de valores possveis de um tipo bsico associado. Usado para manipular todos os dados variveis do algoritmo. Pode tambm ser usado para rotular valores constantes (ex: uso do identificador PI para representar o valor constante 3,14).
Regras para Definio de Identificadores em Pseudolinguagem (Portugol): - devem comear por um caracter alfabtico (uma letra); - pode ser seguido de letras e/ou dgitos; - permitido o uso do caracter especial _ situado entre letras e/ou dgitos.
Ex. de identificadores vlidos: Operador, Nome, X, y, ENDEREO, Aluno_01
Texto Complementar e Exerccios 14 UFBa - Introduo Lgica de Programao MAT 146 E O identificador deve representar de forma significativa o contedo desejado, ou seja, deve ser um MNEMNICO.
Procure a definio de mnemnico num dicionrio. Depois descubra como este termo e empregado em programao. O que so variveis mnemnicas?
O Declarao de Variveis
a criao (ou definio) de locais na memria rotulados com o identificador da varivel (ou constante) que ser utilizada no algoritmo para a manipulao de um determinado tipo de informao. Sintaxe Geral em Portugol:
Lista de Variveis : Tipo ;
O Tipo pode ser inteiro, real, caracter (alfanumrico) ou booleano.
Ex: NUM, X : inteiro; parcela : real; resposta : booleano; PI : real; { definio de uma constante real } NOME, ENDEREO : caracter;
E Neste momento, as variveis ainda no contm nenhum valor associado a elas.
E A declarao de variveis deve ser feita antes da definio das aes do algoritmo.
E Os comentrios representam qualquer texto que explique uma ao ou um dado usado no algoritmo. Eles podem ser colocados em qualquer ponto do algoritmo, utilizando { } ou * * como delimitadores.
3.4 Operaes Bsicas
O Comando de Atribuio
Serve para atribuir (ou associar) um valor a uma varivel ou constante. Sintaxe Geral em Pseudolinguagem:
identificador expresso ;
onde expresso pode ser um(a): Constante, Varivel, Expresso matemtica, Funo matemtica, Expresso booleana, etc.
Ex: NOME Fulano de Tal PI 3.14 Erro Verdadeiro (ou, simplesmente, Erro T) Media (P1 + P2)/2 Texto Complementar e Exerccios 15 UFBa - Introduo Lgica de Programao MAT 146
O Funes Matemticas
nome da funo (argumento)
E O argumento a informao que dada funo para que ela possa ser efetuada adequadamente. Pode ser uma constante ou uma varivel.
Exemplos de Funes Matemticas que utilizaremos:
Sin (X) - Funo que calcula o seno da varivel X SQRT (y) - Funo que calcula a raiz quadrada de y int (z) - Funo que retorna a parte inteira da varivel z (que deve ser do tipo real)
O Operadores Aritmticos + - (unrios) ** exponenciao * multiplicao / diviso + - soma e subtrao (binrios) div diviso truncada (ou inteira) (ex: x div y) mod resto da diviso inteira
** Podemos usar parnteses para alterar ordem de prioridade das operaes.
Ver resumo dos operadores e a ordem de prioridade das operaes em Lgica de Programao Forbellone Cap. 02
O Comandos de Entrada e Sada de Dados
Representam as aes bsicas de algoritmos para recebimento e apresentao de dados, respectivamente. Entrada de Dados: informaes que so fornecidas ao programa pelo usurio durante a resoluo do problema. Representao em Portugol:
leia (identificador, identificador, ...) ;
Ex: leia (altura, idade, sexo);
Sada de Dados: informaes que so mostradas ao usurio como resposta ao problema. Representao em Pseudolinguagem:
Escreva (expresso, expresso, ...) ; Texto Complementar e Exerccios 16 UFBa - Introduo Lgica de Programao MAT 146
Ex: escreva ( Seu peso ideal eh : , peso_ideal) ; escreva ( Media final = , (P1 + P2)/2) ;
O Esquema Genrico de Algoritmos em PseudoLinguagem
Declarao de Variveis / Constantes INICIO inicializao de variveis / constantes {comentrios} bloco de comandos de entrada de dados {comentrios} bloco de comandos de clculo {comentrios} bloco de comandos de sada de dados FIM
Exemplo: Algoritmo em pseudolingugem para o problema do clculo da mdia final dos alunos da 6 Srie.
* declarao de variveis Real: P1, P2, P3, P4, Media; Inicio * comandos de entrada de dados Leia (p1); Leia (p2); Leia (p3); Leia (p4); * processamento- Calculo da media Media (P1 + P2 + P3 + P4)/4; * sada de dados Escreva ( Media final = , Media); Fim
Exerccios de Fixao
F1. Faa 02 exemplos para cada um dos conceitos abaixo: a) entrada de dados b) sada de dados c) declarao de variveis d) inicializao de variveis e) atribuio do resultado de uma expresso aritmtica a uma varivel
F2. Utilizando tipos primitivos de dados, crie declaraes de variveis, que armazenem as seguintes informaes: o nome de uma figura geomtrica, a quantidade de lados, a rea, o permetro e se a figura regular ou no.
Permite a escolha de um grupo de aes para serem executadas de acordo com a aceitao ou no de certas condies.
So testados parmetros e, a depender de seus valores, tomamos um caminho ou outro. As condies que so testadas num Algoritmo so do tipo lgica (booleana), portanto podem ter somente dois resultados: Verdadeiro ou Falso. Assim, a seleo de aes pode seguir, no mximo, duas alternativas: uma se a condio for verdadeira e outra se a condio testada for falsa. Existem selees mais simples e selees compostas outras selees.
Selees Simples
Opo 1: Sintaxe Geral
Se condio Ento bloco de comandos 1 Fim se
Opo 2 Se condio Ento bloco de comandos 1 seno bloco de comandos 2 Fim se Texto Complementar e Exerccios 18 UFBa - Introduo Lgica de Programao MAT 146
Selees Compostas: Aninhamento de condies
Se condio1 Ento bloco de comandos 1 seno Se condio2 Ento bloco de comandos 2 Fim se Fim se
E Observao: as palavras sublinhadas na Sintaxe Geral so chamadas de palavras reservadas e sempre aparecem na estrutura. As palavras em itlico so indicaes do tipo de expresso ou comando que devem ser usados.
O Estrutura de Repetio
Podemos ter repeties condicionais ( a repetio ocorre condicionada a uma condio lgica) e incondicionais (que tem um nmero pr-definido de repeties).
a) Repetio Condicional: existem dois tipos distintos de Repetio Condicional.
Tipo 1 - Condio testada no incio da repetio
Sintaxe Geral: Enquanto condio faa bloco de comandos Fim enquanto
Caractersticas: Testa a condio antes da execuo do bloco. Enquanto a condio for verdadeira, o bloco de comandos executado. Assim, o bloco de comandos pode ser executado 0 ou mais vezes. Pra a execuo do bloco quando a condio se tornar falsa.
E Exemplo:
Elabore um algoritmo para determinar o menor nmero fornecido de um conjunto de valores inteiros positivos dados. Considere que o nmero zero indica o encerramento do conjunto de dados de entrada.
valor, menor : inteiro Incio leia (valor) menor valor * inicializao da varivel que vai guardar o menor valor * Enquanto ( valor < > 0 ) faa Se valor < menor ento menor valor Texto Complementar e Exerccios 19 UFBa - Introduo Lgica de Programao MAT 146 fim se leia (valor) * entrada do prximo elemento do conjunto * fim enquanto escreva ( O menor valor do conjunto , menor) Fim
Tipo 2 - Condio testada no final da repetio
Repita bloco de comandos at condio
Caractersticas: Testa a condio aps da execuo do bloco. Enquanto a condio for verdadeira, o bloco de comandos executado. Assim, o bloco de comandos executado pelo menos uma vez. Pra a execuo do bloco quando a condio se tornar verdadeira (denominada de Condio de Parada).
b) Repetio Incondicional - N. pr-definido de repeties
Sintaxe Geral: Para varivel de controle = valor inicial at valor final Faa bloco de comandos Fim para
Repete o bloco de comandos (valor final - valor-inicial + 1) vezes Incrementa automaticamente a varivel de controle cada vez que o bloco executado (incremento default de 1 at alcanar o valor final) Se o valor final definido for menor que o valor inicial, o lao de repetio no executado nenhuma vez. A varivel de controle deve ser do tipo primitivo inteiro. A varivel usada como controle da estrutura no pode ser modificada dentro do bloco! Texto Complementar e Exerccios 20 UFBa - Introduo Lgica de Programao MAT 146 E Exemplo:
Elabore um algoritmo para calcular o fatorial de N, onde N um nmero inteiro (maior ou igual a zero). Considere que: Se N > 0 ento N! = 1x 2 x 3 x .... x N N= 0 ento N! = 1
Algoritmo em Pseudolinguagem
n, fat, acum : inteiro
{ acum e a varivel de controle }
Incio leia (n) * inicializao de fat fat 1 Para acum = 2 at n faa fat fat * acum fim para escreva ( o fatorial de , n , , fat ) Fim ... e em Fluxograma:
Teste da Soluo: Testando o algoritmo acima para os seguintes valores de n: 0, 1 e 3
N Fat acum Escreva ... 0 1 X fatorial = 1 1 1 X fatorial = 1 3 1 2 1*2 3 1*2*3 4 fatorial = 6
Exerccios de Fixao
F1. Faa 02 exemplos para cada um dos conceitos abaixo: a) condio lgica composta b) estrutura de seleo simples c) estrutura de seleo encadeada d) estrutura de seleo de mltipla escolha
Texto Complementar e Exerccios 21 UFBa - Introduo Lgica de Programao MAT 146 F2. Observe o algoritmo e responda:
X, N : inteiro Inicio leia (N , X) Y 1 Enquanto ( X > 0 ) faa inicio Y Y * N X X - 1 fim Fim enquanto escreva ( Y ) Fim
a) Qual o objetivo do algoritmo acima (i.e.: qual o problema que ele est solucionando)? b) O algoritmo est correto? Como voc fez para test-lo? c) Altere o algoritmo, utilizando a Estrutura Repita ... At d) Altere o algoritmo, utilizando a Estrutura Para ... Faa e) Qual das trs opes de algoritmo a melhor na sua opinio? Por que?
3.6 Consideraes sobre o Uso de Variveis em Algoritmos Computacionais
As variveis representam a informao manipulada pelo algoritmo, e portanto, pode aparecer em diversas situaes:
1.Armazenar dados que so fornecidos pelo usurio Ex: leia (DIA, MES, ANO)
2. Armazenar resultados de expresses Ex: RESULT (A + B * C) / (D - E)
3. Acumuladores: Acumular valores Ex: ACUMULA 1 Enquanto ACUMULA < 100 faa leia (NUM) ACUMULA ACUMULA + NUM Fim enquanto
4. Contadores: Contar valores Ex: CONTA 0 Repita CONTA CONTA + 1 escreva (Repeti o lao , CONTA, vezes ) at CONTA > 20
5. Finalizadores: Finalizar repeties Texto Complementar e Exerccios 22 UFBa - Introduo Lgica de Programao MAT 146 Ex 1 : leia (NUM) Enquanto NUM < > 0 faa {condio para parada NUM = 0 } Seno SIN (NUM) escreva (Seno) leia (NUM) Fim enquanto Ex 2 : Repita leia (oper1, oper2) divis oper1/oper2 escreva ( Continuar (sim/nao) : ) leia (resp) ate resp = nao {condio de parada}
6. Sinalizadores ou Flags: Sinalizar erros, condies de falha de teste, etc. Varivel que informa que uma determinada situao foi alcanada. Ex: INVALIDA 0 Se (dia<1 or dia>31) or (mes<1 or mes>12) ento INVALIDA 1 seno ..... fim se Se INVALIDA = 0 ento escreva ( Data vlida ) seno escreva ( Data invlida ) fim se
E Muitas vezes so usadas variveis do tipo booleano como sinalizadores. Ex: INVALIDA: booleano ... Leia (dia, mes, ano) * inicializa a variavel booleana com um valor False ou True INVALIDA False Se (dia<1 or dia>31) ento * Muda o valor do flag para sinalizar um erro ou mudana de estado INVALIDA True seno Se (mes<1 or mes>12) ento INVALIDA True fim se * Note que a condio no usa operadores lgicos do tipo (Invalida = True) Se INVALIDA ento escreva ( Erro na Data - dia invalido ou mes invalido ) fim se Texto Complementar e Exerccios 23 UFBa - Introduo Lgica de Programao MAT 146 3.7 Tcnicas de Elaborao e Verificao de Algoritmos
Leitura: Cincia dos Computadores - Uma abordagem algortmica - Tremblay Cap. 07
O Refinamentos Sucessivos top-down
Esta uma tcnica de elaborao de algoritmos que divide o desenvolvimento do mesmo em diferentes fases. O problema inicial subdividido em subproblemas menores, e estes em partes ainda menores, e assim sucessivamente. A cada diviso so levados em conta mais detalhes sobre a especificao do problema. Esta uma maneira de lidar com a complexidade do problema. Mais adiante, quando falarmos de Procedimentos e Funes veremos na prtica o uso de Refinamentos Sucessivos Top-Down.
O Regras para tornar seu algoritmo mais claro e legvel
a) Utilize comentrios. Escreva os comentrios no momento que estiver escrevendo o algoritmo. Um programa mal documentado um dos piores erros que um programador pode cometer. O melhor momento para se escrever os comentrios aquele em que o programador tem maior intimidade com o algoritmo, ou seja, durante a sua confeco. Existem 02 tipos de comentrios que devem ser usados. Prlogo ou Cabealho: so comentrios que contm uma identificao geral do algoritmo. O que faz o algoritmo (programa ou mdulo); Como cham-lo ou utiliz-lo; Significado dos parmetros, variveis de entrada, de sada e variveis mais importantes; Arquivos utilizados; Outros mdulos utilizados; Mtodos especiais utilizados, com referncias nas quais possa se encontrar mais informaes; Autor, data de escrita e ltima atualizao; Comentrios de linha: so comentrios de passos que podem ser mais obscuros para o leitor, como o uso de variveis como acumuladores, contadores, flags, etc.
b) Utilize identificadores mnemnicos: escolha nomes representativos para variveis, funes, constantes, tipos, etc. Evite usar letras quando a varivel representa algo concreto (ex: X Y + Z muito menos claro que Preco Custo + Lucro). Tambm evite identificadores longos (ex: use nome ou nAluno ao invs de nome_do_aluno para representar nome de aluno).
c) Utilize indentao para mostrar a estrutura lgica do programa. Crie suas regras bsicas de indentao e procure segu-las ao escrever um algoritmo. Uma boa regra indentar blocos de comandos internos a uma estrutura de controle.
d) Utilize espaos em branco para melhorar a legibilidade. Os espaos em branco so valiosos para melhorar a aparncia de um programa. Voc pode por exemplo: Texto Complementar e Exerccios 24 UFBa - Introduo Lgica de Programao MAT 146 Deixar uma linha em branco entre as declaraes e o corpo do programa; Separar grupos de comandos que executam funes lgicas distintas por uma ou mais linhas em branco. Um comando por linha suficiente. A utilizao de vrios comandos por linha prejudicial por vrios motivos, dentre eles destacam-se o fato do programa tornar-se mais ilegvel e ficar mais difcil de ser depurado.
O Testes
Um tipo de teste (denominado Teste de Mesa ou Teste Exaustivo) de um algoritmo pode ser feito atravs de uma simulao do mesmo, aonde so dados valores para os dados de entrada e vai-se preenchendo uma tabela aonde so colocadas todas as variveis e constantes do algoritmo. Segue-se o fluxo de execuo (como se estivesse executando o algoritmo em um computador imaginrio). A cada comando de atribuio ou clculo de expresso o valor das variveis deve ser atualizado. Ao final do teste podemos ter as seguintes situaes: - o resultado esperado foi alcanado; ou - foram detectados erros nos comandos; ou - foram detectados erros no fluxo de execuo - erro nas estruturas de controle.
Procure fazer testes relevantes como, por exemplo, aqueles que verificam casos extremos e casos de excees. Com o teste possvel identificar se e em que ponto o algoritmo est falhando e fazer a correo. Algoritmos errados podem gerar resultados errados ao serem executados por um computador ou mesmo no gerar nada, se o computador detectar erros graves na seqncia de operaes.
Exerccios de Fixao
Teste o algoritmo abaixo. Faa um Teste de Mesa, usando a tabela ao lado do algoritmo. - lembre-se de testar os casos crticos (casos extremos e casos de excees)!
X, N : inteiro Inicio leia (N , X) Y 1 Enquanto ( X > 0 ) faa inicio Y Y * N X X - 1 fim Fim enquanto escreva ( Y ) Fim
N X Y ( X > 0 )
h Exerccios Propostos
P1. Elabore um algoritmo que verifique se um nmero positivo primo ou no. Faa um teste exaustivo da soluo encontrada.
Texto Complementar e Exerccios 25 UFBa - Introduo Lgica de Programao MAT 146 P2. Elabore um algoritmo que calcule os 20 primeiros termos da Srie de Fibonacci. A srie de Fibonacci formada pela seguinte seqncia: 1, 1 ,2, 3, 5, 8, 13, ... etc. Inclua um teste de mesa do algoritmo.
P3. Determine o maior e o menor valor de um conjunto de nmeros inteiros positivos. Considere que o conjunto de dados de entrada termina quando fornecido o nmero -5.
P4. Escreva um algoritmo que leia n nmeros inteiros e determine se cada um deles um nmero da seqncia de Fibonacci ou no.
P5. O algoritmo abaixo tem como objetivo determinar o valor do somatrio S, dado pela srie S = X - X 2
/ 3! + X 4
/ 5! - X 6
/ 7! + ..... usando os 20 primeiros termos da srie, porm o algoritmo no est correto. Corrija os erros encontrados (se preciso, rescreva o algoritmo) e acrescente comentrios para aumentar a legibilidade do algoritmo. Faa um Teste de Mesa. inteiro : X , F , S Inicio leia ( X ) S 1 Fat 1 Para I = 1 at 20 faa Para F = 1 at ( 2 * I ) faa Fat = Fat * F Fim Para S ( S + (X ** (2 * I) ) ) / Fat Fim Para Escreva ( " O somatrio e' " , S ) Fim
P6. Elabore um algoritmo que leia uma massa de dados contendo SEXO , DATA DE NASCIMENTO e ESTADO CIVIL (Casado/ Solteiro/ Divorciado/ Outros) de um grupo de 100 pessoas e determine, ao final: a) Mdia de Idade das mulheres b) Estado Civil mais prevalente entre os entrevistados e o de menor ocorrncia
P7. Foi feita uma pesquisa de audincia de canal de TV em vrias casas numa certa cidade, num certo dia. Para cada casa visitada fornecido o nmero do canal (4, 5, 7 ,11) e o nmero de pessoas que estavam assistindo TV. Elabore um algoritmo que leia um nmero indeterminado de dados (terminando quando for lido um canal igual a zero) e calcule a percentagem de audincia para cada emissora, mostrando ao final, o nmero de cada canal e sua respectiva audincia.
No Apndice I encontra-se a soluo de alguns dos exerccios propostos
> Exerccios Complementares
Livro do Forbellone - Cap. 03 Exerccios de Fixao e Exerccios Propostos Texto Complementar e Exerccios 26