Anda di halaman 1dari 45

Universidade de Caxias do Sul - UCS

Centro de Cincias Exatas e Tecnologia - CCET Departamento de Informtica - DEIN

Apostila de Algoritmos

1. Conceitos Bsicos 1.1 Processamento de Dados


Em um sistema de processamento de dados existem trs componentes principais que interagem em um ambiente a fim de realizar uma determinada tarefa: hardware, software e usurios. O hardware o conjunto de componentes mecnicos, eltricos e eletrnicos com os quais so construdos os computadores. O hardware a mquina. O software o conjunto de elementos que comandam o funcionamento do computador. formado por mtodos e procedimentos que provocam o funcionamento da parte fsica (o software). O software o conjunto de programas. Programas so conjuntos de instrues que comandam o computador. Os programas instruem o computador a realizar determinados processamentos a fim de obter determinados resultados. Processamento de dados uma seqncia de operaes que aplicada a um conjunto de dados de entrada gera um determinado resultado (dados de sada). Os programas manipulam informaes ou dados. Dados so atributos que descrevem sucintamente eventos, entidades ou caractersticas: o nome de uma pessoa, seu peso ou o nmero de pginas de um livro. Os computadores podem lidar com tipos diferentes de dados: dados numricos ou dados no numricos (texto, imagem, som). Os elementos do processamento eletrnico de dados so: Dados de Entrada: Informaes iniciais que precisam ser trabalhadas para gerar um determinado resultado. Processamento: Transformaes efetuadas sobre os dados de entrada para gerar o resultado desejado. Dados de Sada: O resultado das transformaes operadas sobre os dados de entrada. Dados de Entrada Processamento Eletrnico
FIGURA 1 : Processamento Eletrnico

Dados de Sada

1.2 Arquitetura do Computador Funcionamento


Existem computadores dos mais diferentes tipos e tamanhos, mas todos so formados por cinco componentes bsicos e interligados: unidade central de processamento (CPU), memria principal, memrias auxiliares, unidades de entrada de dados e unidades de sada: Unidade Central de Processamento(CPU) o verdadeiro crebro do computador. Sua tarefa consiste em coordenar e realizar todas as operaes do sistema. Est dividida em duas partes: Unidade aritmtica e lgica (ULA): executa clculos que envolvem operaes aritmticas como soma, subtrao, multiplicao e diviso, bem como operaes lgicas como comparaes de grandeza (maior, menor, igual). Unidade de controle (UC): acompanha cada instruo do programa sendo executado e aciona as unidades que executaro determinada instruo, controlando o fluxo de dados. Alguns

exemplos: aciona as unidades de entrada para leitura de dados; armazena e recupera dados da memria principal; transfere valores da memria para a ULA; aciona as unidades de sada para visualizao de resultados. Computador Memrias Auxiliares

Unidades de Entrada

Memria Principal

Unidades de Sada

CPU UC ULA

FIGURA 2: Arquitetura Bsica do Computador

Unidades de entrada - qualquer dispositivo que possa captar dados do meio externo e transferilos memria do computador. Exemplos de dispositivos: teclado, mouse, scanner, fax-modem, leitora de cartes magnticos, caneta tica, mesa digitalizadora, leitora de cdigos de barra, joystick, touch-screen, sensores especiais. Unidades de sada - qualquer dispositivo que transfere dados gravados na memria para um meio externo ao computador. Normalmente para cada tipo de unidade de entrada existe uma unidade de sada correspondente e algumas vezes o mesmo dispositivo faz as duas funes. Exemplos: fax-modem, touch-screen, vdeo, impressora, plotter, caixa de som.
Memria Principal - armazena dados e programas durante o processamento. A memria dividida em unidades pequenas e de mesmo tamanho identificadas por um nico endereo. Cada unidade de memria capaz de armazenar uma nica informao como, por exemplo, o resultado de uma operao aritmtica. A memria pode ser comparada com um armrio repleto de gavetas, onde se armazenam objetos que podem ser substitudos. Os objetos so as informaes ou dados e as gavetas so as unidades de memria. Como no armrio (memria) existem inmeras gavetas (unidades), necessrio diferenci-las, ou melhor, identific-las de forma nica com nomes. Cada gaveta (unidade) pode armazenar apenas um objeto (informao) de cada vez, sendo sempre do mesmo material (tipo). Em resumo, cada gaveta recebe um nome e pode armazenar objetos que pertenam ao mesmo tipo.

Memria Auxiliar Tambm chamada de memria secundria, externa ou de massa. Armazena as informaes (dados e programas) por um grande perodo de tempo. O custo da memria auxiliar menor que o da principal, por isso, so utilizadas para o armazenamento de grandes volumes de informaes. Alguns exemplos de memrias auxiliares: disco rgido, disco tico, disquete.

armrio Joo 33 Rua das Flores 222-5555

identificao nome idade endereo telefone

FIGURA 3: Memria Principal

1.3 Software x Problema Computacional


Um software um programa de computador (conjunto de instrues) que faz com que o hardware realize determinada tarefa. O software um termo coletivo que abrange vrias categorias que podem ser subdivididas de acordo com o tipo de trabalho realizado. As categorias so: Sistemas operacionais (software bsico) - controlam o funcionamento do computador e cuidam de atividades essenciais, porm muitas vezes invisveis, como a manuteno de arquivos em discos e o gerenciamento da tela. Um sistema operacional a base sobre a qual aplicaes so construdas (OS/2, UNIX, DOS). Linguagens de programao Servem para efetuar a comunicao entre os seres humanos e o computador. So formadas por um conjunto de instrues. Devido incapacidade dos computadores de realizarem qualquer atividade sem serem programados adequadamente, as linguagens so as ferramentas necessrias que fazem com que o computador trabalhe para o usurio da forma desejada. Softwares Aplicativos So programas orientados para usurios no especializados em informtica, possibilitando o uso do computador como ferramenta de trabalho de alta produtividade. Exemplos: editores de texto, planilhas eletrnicas, controle de contas a receber, controle de produo. Os programas so escritos para satisfazerem determinadas necessidades. Por exemplo: necessrio construir um programa que calcule a nota final dos alunos da universidade recebendo como entrada as notas parciais das provas e trabalhos. Para chegar a nota final utilizada uma mdia aritmtica das notas parciais. Essas necessidades so problemas computacionais. Problemas computacionais envolvem uma pergunta de carter geral que deve ser respondida. Um problema descrito especificando-se as informaes de entrada, as condies que o resultado deve obedecer e as restries da soluo.

1.4 Metodologia de Programao


Para elaborar programas complexos necessrio utilizar um mtodo sistemtico de programao que permita a obteno de programas confiveis. Algumas etapas relevantes da metodologia de programao: Anlise do problema - Nessa fase necessrio compreender completamente o problema, identificando as especificaes de entrada, o resultado que o problema deseja e as restries do problema.

Projeto do Programa Algoritmo Antes de programar na linguagem de programao, as instrues precisam ser esboadas para facilitar a resoluo do problema. Implementao A partir do algoritmo, o programa codificado em uma linguagem de programao para que o computador possa execut-lo. Verificao do Programa Verificar se o programa est realmente resolvendo o problema proposto. Anlise Projeto Algoritmo Implementao Verificao

FIGURA 4 : Metodologia de Programao

1.5 Algoritmo
1.5.1 Conceito O algoritmo geralmente representado atravs de modelos de fcil compreenso pelos humanos, mas incompreensveis para o computador. Para que o computador possa executar um algoritmo, necessrio que este algoritmo seja traduzido para uma linguagem que seja entendida pelo computador - a linguagem de programao. Ao traduzir-se um algoritmo para uma linguagem de programao obtm-se um Programa. O uso de algoritmos quase to antigo quanto matemtica. Seu uso ressurgiu com o advento das mquinas de calcular e o computador. Algoritmo no a soluo do problema, pois se assim fosse, cada problema teria um nico algoritmo. Algoritmo um caminho para a soluo de um problema e, em geral, os caminhos que levam a uma soluo so muitos. A soluo obtida por meio da execuo do algoritmo, seja mentalmente ou manualmente com uso de papel e lpis ou pelo computador. Um algoritmo uma lista de instrues cujo objetivo resolver um determinado problema. Quando essas instrues so seguidas de forma ordenada, ou seja, uma instruo aps a outra, na ordem em que aparecem no algoritmo, obtm-se como resultado o problema resolvido. Um algoritmo um conjunto ordenado de comandos que, quando executados, resultam em uma seqncia finita de aes que levaro soluo do problema. No dia-a-dia as pessoas executam algoritmos naturais. Um exemplo disto a seqncia de instrues que so seguidas por uma pessoa para entrar em casa. Algoritmo Abrir o porto Passar para o lado de dentro do terreno Fechar o porto Dirigir-se porta Pegar a chave da porta Abrir a porta da casa Passar para o lado de dentro da casa Fechar a porta da casa Fim Algoritmo Outro exemplo a troca de um pneu furado.

Algoritmo Abrir o porta malas Pegar as ferramentas no porta malas Retirar o estepe Levantar o carro parcialmente Afrouxar os parafusos do pneu furado Levantar completamente o carro Retirar o pneu furado Instalar o novo pneu Abaixar o carro Apertar bem as porcas Guardar o pneu furado e as ferramentas Fechar o porta malas A seqncia descrita acima pode ser completada com vrias observaes. Por exemplo: - o que fazer se o macaco no estiver no porta malas? - o que fazer se o estepe tambm estiver vazio? - deve-se sempre puxar o freio de mo antes de executar estas operaes? Por outro lado, algumas aes devem ser levadas a cabo aps a executar a troca do pneu. Por exemplo: - limpar as mos; - consertar o pneu furado. Se o responsvel pela construo do algoritmo tiver que se preocupar com todas as possibilidades do ambiente antes da execuo do mesmo, e, alm disso, com todas as necessidades de tratamento aps a execuo, nenhum algoritmo ser completo. Sempre alguma condio poder ser esquecida. Antes de se construir um algoritmo, deve-se especificar as condies de incio (dados de entrada) e as de trmino (dados de sada). Utilizando o exemplo acima: - condio de entrada: um carro com todos os equipamentos de segurana em condies, parado e freado, com um pneu furado; condio de sada: um carro parado, freado, com todos os equipamentos de segurana em condio, exceto pelo pneu estepe vazio, com todos os pneus em bom estado.

Alm disso, algum pode argumentar que as aes no esto suficientemente detalhadas para compreenso. Para uma pessoa acostumada a trocar pneus furados as explicaes so suficientes, mas ser que um selvagem do deserto Kalahari, que nunca viu um carro antes, saber utilizar corretamente um macaco para elev-lo? Assim, a funo "levantar o carro" seria melhor descrita como: - Empunhe o cabo da manivela do macaco; comece a girar a manivela no sentido horrio, mantendo at que o pneu furado do carro esteja suspenso a pelo menos 10 cm do cho; solte a manivela. Boa parte dos problemas tratados no computador so resolvidos por sequncia de instrues (algoritmos) compostos por agrupamentos de atividades por si s complexas. Da mesma forma que foi necessrio detalhar o uso do macaco para o selvagem, tambm estas atividades complexas devem ser detalhadas at um nvel em que o computador seja capaz de reconhec-las e execut-las. Um exemplo tpico de algoritmo uma receita culinria para fritar um ovo:

Algoritmo Colocar um ovo na frigideira Esperar o ovo ficar frito Remover o ovo da frigideira Fim algoritmo O algoritmo acima, no entanto poderia ser mais detalhado e completo. Uma verso mais aceitvel seria: Algoritmo Retirar um ovo da geladeira Colocar a frigideira no fogo Colocar leo Esperar at o leo ficar quente Quebrar o ovo separando a casca Colocar o contedo do ovo na frigideira Esperar um minuto Retirar o ovo da frigideira Apagar o fogo Fim algoritmo Essa segunda verso mais completa e detalhada que a anterior, nela vrias aes que estavam subentendidas foram explicitadas. No entanto, para que o algoritmo possa ser til, necessrio ainda que quem faz uso dele conhea os termos utilizados nas instrues. O algoritmo do exemplo s ser til para algum que seja fluente na lngua portuguesa e conhea o significado dos verbos Retirar, Colocar, Esperar assim como dos substantivos utilizados no contexto de uma receita culinria. Em outras palavras, preciso que a linguagem utilizada no algoritmo seja conhecida tanto por quem o escreveu quanto por quem vai execut-lo. 1.5.2 Algoritmos com Qualidade No basta apenas escrever o algoritmo, preciso que outras pessoas o compreendam. Para isso, so observados alguns critrios de qualidade: Facilitar a leitura para outros programadores Escrever comentrios no momento em que escreve o algoritmo Escrever comentrios significativos Usar comentrio no incio para identificar o programa Breve descrio, como utilizar, principais variveis, autor Melhorar a legibilidade com espaos em branco Usar Nomes representativos para as variveis Usar um comando por linha Utilizar identao para representar estrutura lgica. 1. 2. 3. 4. 5. 6. 7. 8. A correo do algoritmo deve ser garantida por uma seqncia de passos sistemticos: Ler cuidadosamente a especificao do problema at o final Ler quantas vezes mais forem necessrias Levantar e analisar todas as sadas exigidas na especificao do problema Levantar e analisar todas as entradas citadas na especificao do problema Verificar a necessidade de variveis internas e valores iniciais Analisar as transformaes necessrias: entrada->sada Testar cada passo do algoritmo Reavaliao geral.

1.5.3 Representao de Algoritmos Existem muitas formas de representao de algoritmos, algumas utilizando linguagens semelhantes s linguagens de programao, ou as prprias linguagens de programao e outras utilizando formas grficas de representao de algoritmos. Dentre estas formas, deu-se acentuada preferncia por formas estruturadas, cuja principal vantagem a de facilitar a legibilidade e compreenso de algoritmos. As formas mais comuns de representao de algoritmos so as seguintes: - Linguagem Natural Os algoritmos so expressos diretamente em linguagem natural, como nos exemplos anteriores. - Fluxograma Convencional Esta uma representao grfica que emprega formas geomtricas padronizadas para indicar as diversas aes e decises que devem ser executadas para resolver o problema. - Pseudolinguagem Emprega uma linguagem intermediria entre a linguagem natural e uma linguagem de programao para descrever os algoritmos. No existe consenso entre os especialistas sobre qual seria a melhor maneira de representar um algoritmo. Atualmente a maneira mais comum de representar-se algoritmos atravs de uma pseudolinguagem ou pseudocdigo. Esta forma de representao tem a vantagem de fazer com que o algoritmo seja escrito de uma forma que est prxima de uma linguagem de programao de computadores. Para que o algoritmo possa ser executado por uma mquina importante que as instrues sejam corretas e sem ambigidades. Portanto a forma especial de linguagem utilizada bem mais restrita que o Portugus e com significados bem definidos para todos os termos utilizados nas instrues. Essa linguagem conhecida como Portugus Estruturado (s vezes tambm chamada de Portugol). O portugus estruturado na verdade uma simplificao extrema do Portugus, limitada a umas poucas palavras e estruturas que tm um significado muito bem definido. Ao conjunto de palavras e regras que definem o formato das sentenas vlidas chamamos sintaxe da linguagem. Embora o portugus estruturado seja uma linguagem bastante simplificada, possui todos os elementos bsicos e uma estrutura semelhante de uma linguagem tpica para programao de computadores. Alm disso, resolver problemas com portugus estruturado, pode ser uma tarefa to complexa quanto a de escrever um programa em uma linguagem de programao qualquer. Um algoritmo na verdade uma expresso de uma soluo que j conhecemos para o problema. Quando escrevemos um algoritmo computacional no diferente, antes de escrever o programa, o prprio programador deve conhecer (pelo menos parcialmente) a soluo para o problema em questo. Qual o algoritmo que soluciona o seguinte problema: Um homem est com seu barco na margem esquerda do rio. Precisa transportar para a margem direita do rio: um lobo, um bode e um fardo de alfafa. Seu barco possui capacidade para carregar apenas ele mesmo e mais uma de suas trs cargas. O homem no pode deixar o lobo e o bode sozinhos em uma margem, seno o lobo devora o bode. Tambm no pode deixar o bode e a alfafa sozinhos, seno o bode come a alfafa.

1.5.4 Primeiros Elementos da Linguagem Nesse material, os algoritmos sero representados na forma de portugus estruturado. Essa pseudolinguagem possui uma sintaxe prpria que ser introduzida no decorrer do texto. Os algoritmos tm a seguinte estrutura geral: Algoritmo nomealgoritmo var <declarao de variaveis> inicio < lista de comandos> fimalgoritmo Onde: a palavra Algoritmo delimita o incio do algoritmo e indicam seu nome. a palavra var indica que a seguir sero declaradas as variveis a serem utilizadas no algoritmo. - a palavra inicio identifica o incio da sesso de comandos . - a expresso Fimalgoritmo faz parte da sintaxe da linguagem e sempre delimita o fim de um algoritmo. - <lista-de-comandos> apenas uma indicao de que entre a palavra inicio e a expresso Fim algoritmo podemos escrever uma lista com uma ou mais instrues ou comandos. importante salientar que, quando um algoritmo executado as instrues ou comandos de um algoritmo so sempre executados na ordem em que aparecem no mesmo. As palavras que fazem parte da sintaxe da linguagem so palavras reservadas, ou seja, no podem ser usadas para outro propsito em um algoritmo que no seja aquele previsto nas regras de sintaxe. A palavra Algoritmo, por exemplo, uma palavra reservada. -

2. Estrutura de Controle Seqencial


O portugus estruturado possui uma srie de instrues que so executadas de forma seqencial.

2.1 Comando de Escrita


Normalmente os algoritmos recebem dados (teclado), processam os dados e exibem o resultado do processamento. O resultado desse processamento pode ser mostrado, por exemplo, na tela do computador. Um algoritmo cujo objetivo fosse calcular a mdia de dois nmeros poderia ser dividido em trs partes: 1.Ler o primeiro valor do teclado 2.Ler o segundo valor do teclado 3.Calcular a mdia (processamento) 4.Escrever a mdia (escrita do resultado) A sintaxe do comando de escrita : Escreva (< lista de expresses >) Onde < lista de expresses > uma lista de uma ou mais expresses. Uma expresso pode ser uma constante, uma varivel ou uma expresso mais complexa. No caso de uma expresso complexa, ela ser avaliada e seu resultado ser escrito na tela. Um exemplo de algoritmo com comandos de escrita: Algoritmo Escreva var inicio Escreva (Joao ,Maria) Escreva (7) Escreva (5 + 20) Fimalgoritmo Ao executar este algoritmo, o resultado obtido o seguinte: Joao Maria 7 25

O algoritmo do exemplo anterior composto de trs comandos que escrevem na tela respectivamente: 1) duas palavras (delimitadas por aspas duplas); 2) um nmero; 3) o resultado de uma expresso aritmtica. Quando um comando de escrita tiver mais de um elemento para ser escrito, como no primeiro comando do algoritmo anterior, eles devem ser separados por vrgula. Outro detalhe importante do algoritmo acima a maneira como os comandos foram

dispostos no texto. Os comandos de escrita foram colocados um abaixo do outro (na mesma distncia da margem) e um pouco deslocados para a direita. Esse recurso de organizao do algoritmo conhecido como identao. Dessa maneira, fica claro no texto que esses comandos esto dentro da estrutura Algoritmo ... Fim algoritmo. O uso de identao fundamental para tornar os algoritmos legveis e organizados. Quando forem utilizadas diversas estruturas diferentes em um algoritmo complexo a falta de identao pode tornar impossvel compreend-lo. O recurso de identao uma das tcnicas mais bsicas que um bom profissional de informtica sempre ir utilizar para desenvolver seus programas.

2.2. Constantes e Variveis


Considerando a frmula matemtica para clculo do volume de uma esfera: V = 4/3R3 Onde se encontra valores que podem ser classificados como: Valores constantes, invariantes no decorrer do tempo, so sempre os mesmos: 4, 3 e ; Valores a serem substitudos na frmula em cada aplicao que dela fazemos. A representao destes valores usualmente feita atravs de letras ou combinaes de letras e dgitos numricos, que recebem o nome de variveis e tornam a frmula genrica, isto , possvel de ser usada para resolver uma certa classe de problemas e no apenas um problema especfico. No exemplo, V e R so variveis. Operaes a serem executadas sobre determinados operandos (valores) para a obteno da soluo do problema. A frmula apresenta operaes de diviso, multiplicao e potenciao efetuadas sobre os operandos 4, 3, e R numa seqncia pr-determinada, mas nem sempre rigorosa. Uma frmula matemtica simplesmente uma descrio de um conjunto de aes (operaes) que devem ser executadas sobre um conjunto de objetos (constantes e/ou variveis). Certas operaes s podem ser executadas sobre determinados objetos, se estes objetos satisfizerem certas condies como pode ser ilustrado nos exemplos abaixo: a - A radiciao s pode ser executada sobre objetos que pertenam ao conjunto dos reais positivos R+. n! - O clculo do fatorial s faz sentidos para inteiros positivos I+. Verificar a ocorrncia da letra a em um dado texto - A operao de comparao de cada um dos caracteres do texto com a letra a tem como resultado um valor lgico verdadeiro ou falso, conforme o caracter a for ou no encontrado no texto. Nestes exemplos notam-se dois tipos de limitaes. Limitaes de classes de valores que podem ser: Inteiros quando pertencem ao conjunto I ou Z. Reais quando pertencem ao conjunto R. Lgicos quando pertencem ao conjunto {verdadeiro, falso}. Caracteres quando pertencem ao conjunto dos caracteres. Limitaes de intervalo, pois algumas operaes no atuam sobre todo o conjunto, mas somente sobre parte dele. Resolvendo passo a passo a expresso V = 4/3R3 para uma esfera de raio 3: Substituir R por 3 (V = 4/333)

Substituir por 3,1416 (V = 4/3* 3,1416* 33) Calcular a potenciao (V = 4/3* 3,1416* 27) Calcular a diviso 4 por 3 (V = 1,333* 3,1416* 27) Calcular a primeira multiplicao (V = 4,1885* 27) Calcular a multiplicao restante(V = 113,0895)

2.3 Constantes
Uma constante apenas um valor expresso literalmente no texto de um algoritmo. Por exemplo, um nmero escrito explicitamente no algoritmo uma constante, pois no ir modificarse durante sua execuo. Os nmeros, no entanto, no so as nicas constantes disponveis, h outros tipos de valores que podem aparecer literalmente em um algoritmo. No portugus estruturado pode-se ter ainda constantes que so valores lgicos, caracteres ou cadeias de caracteres. No algoritmo do Exemplo 1 so constantes: Joao, Maria, 7, 5, 20. Constantes em um algoritmo podem ser: Numricas: quaisquer valores numricos, reais ou inteiros, positivos ou negativos. Exemplos: 25 , 3.14 , -2.57 , -0.0003 , -10 Lgicas: os valores lgicos que podem aparecer como constantes so: verdadeiro e falso (verdadeiro e falso so palavras reservadas do portugus estruturado). Caracteres: caracteres alfabticos, numricos ou especiais delimitados por aspas simples. Exemplos: a, 3, x, ! Cadeias de caracteres: uma seqncia de caracteres delimitada por aspas duplas. Os caracteres que compem uma cadeia podem ser letras, nmeros ou caracteres especiais. Exemplos: Joao da Silva, Maria, sala 302

2.4 Variveis
Durante sua execuo um algoritmo deve manter em algum lugar todos os dados que sero utilizados no processamento. No exemplo do clculo da mdia, cada um dos dois valores lidos do teclado deve ser mantido de alguma forma pelo algoritmo para estar disponvel para o clculo da mdia. A forma de um algoritmo armazenar um valor a varivel. O conceito de uma varivel em um algoritmo semelhante ao de uma varivel na matemtica, ou seja, a varivel apenas um nome que denota um valor. Em um algoritmo computacional, cada varivel tambm designa um espao na memria do computador onde um determinado valor armazenado. A varivel denota o valor que est armazenado nesse espao e podemos substituir o valor sempre que quisermos. As variveis podem ser visualizadas como receptculos de valores. Cada receptculo identificado atravs de um nome ou identificador, e pode receber um valor de um determinado tipo. Cada vez que a frmula do volume for utilizada, ocorrer o seguinte: a varivel R dever receber um valor antes da execuo dos clculos; a varivel V receber um valor aps a execuo dos clculos; valor da varivel R ser utilizado no clculo do valor de V; a cada nova utilizao da frmula, o valor de R poder ser alterado, alterando tambm o valor de V. Um identificador pode ser qualquer seqncia de letras e nmeros (podemos tambm utilizar

o caracter especial sublinhado ou underscore _), as nicas restries so de que o identificador deve sempre comear com uma letra e no pode conter espaos em branco. Exemplos de possveis identificadores: salario nomeDoFuncionario nota1 nota2 identificadores compostos como nomeDoFuncionario pode-se usar letras maisculas para determinar o incio de uma nova palavra. Esse um padro bastante usado hoje para especificar identificadores. Para identificadores de variveis o padro tambm come-los com letra minscula. O valor que uma varivel denota pode ser um nmero, um caracter, uma cadeia de caracteres ou um valor lgico; esses so os tipos de valores aceitveis para variveis. Uma restrio, no entanto, de que cada varivel, quando definida para conter um determinado tipo de valores, no poder denotar outros tipos. Ao dizer, por exemplo, que a varivel cujo identificador salario ir denotar valores numricos, ento seria um erro tentar fazer com que ela denotasse valores de um outro tipo qualquer (caracteres, cadeias de caracteres ou valores lgicos). Algumas regras quanto ao nome das variveis: o no podem comear por nmero o no podem ter espao em branco o no pode ter o mesmo nome de palavras reservadas em C o pode ter "_ " sublinha o letra maiscula diferente de letra minscula: Peso, peso, PESO, peSO . Declarao de Variveis Variveis so palavras que tem um significado bem especfico em um algoritmo. Para que o computador possa executar os comandos que envolvem variveis da maneira correta, ele deve conhecer os detalhes das variveis que pretendemos usar. Esses detalhes so: o identificador da varivel e o tipo de valores que essa varivel ir conter. var < lista de identificadores >: < tipo das variveis > Onde: <lista de identificadores > uma lista de palavras que pretendemos empregar como variveis no algoritmo, e <tipo das variveis > determina que tipo de valores as variveis podero denotar. As variveis podem ser de um dos quatro tipos bsicos: numrico, lgico, caracter e cadeia de caracteres. As palavras inteiro, real, lgico e caracter so palavras reservadas do portugus estruturado e servem para indicar tipos. Alguns exemplos de possveis declaraes de variveis: var salario, abono: real
Em

Nesse exemplo, as palavras salario e abono sero utilizadas como variveis no algoritmo e s podem conter valores do tipo numrico e real. var nomeDoFuncionrio: caracter Aqui, a palavra nomeDoFuncionario ser uma varivel que pode denotar cadeias de caracteres. Um algoritmo pode conter tantos comandos de declarao quantos forem necessrios. A declarao de variveis tambm auxilia o computador a identificar erros de digitao no algoritmo. Suponha que o programador queira escrever o comando escreva (a,b) mas ao invs disso, escreva escreva (a,d) Ao encontrar referncia a uma varivel no declarada (no caso, a varivel d), o computador avisar ao programador que ela no foi declarada. Declaraes de variveis tm ainda que obedecer uma outra regra: todos os comandos de declarao de variveis tm necessariamente que aparecer no incio do algoritmo, antes de qualquer outro comando. Ou seja, comandos Var devem ser colocados imediatamente aps a palavra Algoritmo.

2.5 Comando de Atribuio


O ato de armazenar ou escrever um valor em uma varivel chamado de atribuio de valor, sendo representado atravs de smbolos. A atribuio compreende uma ao de substituio do contedo de uma varivel cujo efeito : aps a atribuio, a varivel passa a representar um novo valor, sendo perdido o valor anterior. O comando de atribuio a estrutura sinttica que permite modificar o valor de uma varivel. A forma geral do comando a seguinte: < identificador de varivel > < expresso > Onde: <identificador de varivel > indica que, nesse ponto, do lado esquerdo da seta, deve-se colocar o identificador de uma varivel j declarada no incio do algoritmo. <expresso> indica que nesse ponto, do lado direito da seta, deve-se escrever uma expresso (aritmtica, lgica, ou mesmo uma constante) cujo valor resultante ser atribudo varivel.

Exemplos:
1.a 5

Quando esse comando executado a varivel a passa a denotar o valor 5. Qualquer que seja o valor que a denotava anteriormente, ele no existe mais!

a 32 + 25 Nesse exemplo o resultado da expresso 32+25 (a soma de duas constantes) atribudo varivel a. Ou seja, a passa a denotar o valor 57. abono 500.00 salario 2000.00 + abono O primeiro comando atribui o valor 500.00 varivel abono. O segundo comando atribui o resultado da expresso 2000.00 + abono varivel salario. No segundo comando de atribuio, um identificador de varivel aparece em uma expresso aritmtica. Nesse caso o valor somado a 2000.00 ser o valor denotado pela varivel abono. O valor atribudo varivel salario ser, portanto 2500.00

2.6 Comando de Leitura


Diante do seguinte problema: escrever um algoritmo que realiza a tarefa bastante simples de calcular a mdia aritmtica de dois nmeros. Deve-se lembrar claro que o algoritmo inicia com a palavra Algoritmo e termina com Fim Algoritmo. Por outro lado sabe-se tambm como calcular a mdia aritmtica, uma expresso bastante simples resolve o problema: (primeiroNumero + segundoNumero) / 2. So necessrias variveis que denotem os nmeros dos quais preciso descobrir a mdia. Para isso pode-se empregar as palavras usadas acima: primeiroNumero e segundoNumero como identificadores de variveis. Pode-se fazer uso tambm de uma terceira varivel para denotar a mdia entre os nmeros, cujo identificador pode ser, claro, media. Como essas variveis iro denotar nmeros, o tipo de todas elas deve ser numerico. Algoritmo var primeiroNumero, segundoNumero, media: numerico inicio Media (primeiroNumero + segundoNumero) / 2 Escreva (media) Fim algoritmo Inicialmente as variveis foram declaradas, em seguida atribuiu-se varivel media o valor resultante da expresso que calcula a mdia aritmtica de dois nmeros e, por fim, escreveu-se esse resultado na tela do computador para que o usurio saiba afinal qual era a mdia. Mas h ainda um problema srio com esse algoritmo: afinal como informar ao computador quais so os valores dos quais se quer saber a mdia? Em outras palavras, de onde viro os valores das variveis primeiroNumero e segundoNumero? possvel executar esse algoritmo diversas vezes para sabermos a mdia de diversos pares de nmeros. A cada vez que o algoritmo executado quem o executa deve fornecer esses valores, portanto preciso uma maneira de informar o computador quais so esses valores! Para isso existe o comando de leitura, cuja forma geral a seguinte:
Leia (< lista-variaveis >)

Onde, < lista-variveis > pode ser um conjunto de variveis separadas por vrgula.

Quando o comando Leia encontrado o computador faz uma pausa na execuo do algoritmo e pede que o usurio fornea valores que sero automaticamente atribudos s variveis que fazem parte da lista (um valor para cada varivel: o primeiro valor para a primeira varivel, o segundo para a segunda varivel e assim por diante). Pode-se finalmente completar o algoritmo. Algoritmo var primeiroNumero, segundoNumero, media: numerico inicio Leia (primeiroNumero) Leia (segundoNumero) media (primeiroNumero + segundoNumero) / 2 Escreva (media) Fim algoritmo Quando executa o comando Leia o computador ir solicitar dois valores numricos. O primeiro valor fornecido ser atribudo primeira varivel da lista (primeiroNumero) e o segundo segunda varivel da lista (segundoNumero). Se forem fornecidos, por exemplo, os valores 45 e 52, o resultado na tela ser o seguinte: 48.5

Existem situaes em que ser necessrio obter valores que: 1.no esto disponveis no momento em que estamos escrevendo o algoritmo, e 2.no podem ser calculados com os elementos j fornecidos. Esses valores externos ao algoritmo devero ser fornecidos por quem o executa (o usurio) e, portanto ser necessrio usar comandos de leitura para solicit-los.

2.7 Nomes para Variveis


Uma questo extremamente importante como escolher nomes para variveis. Os algoritmos (ou programas de computador) so objeto de constantes alteraes, ajustes e melhorias por quem escreveu o algoritmo como tambm por outras pessoas que fazem parte de uma equipe de desenvolvimento. Para quem est procurando entender o funcionamento de um algoritmo imprescindvel que ele esteja bem estruturado e legvel. Por isso importante que identificadores significativos sejam escolhidos para as variveis, os quais deixem claro o propsito de cada uma delas. Por exemplo, os dois algoritmos a seguir fazem exatamente a mesma coisa.

Algoritmo 1: Algoritmo Um var a, b, c, d, e: numerico var f :caracter inicio Leia (a, f) b a * 0.15 c a * 0.09 d b + c e a - d Escreva (f, e) Fim algoritmo Algoritmo 2: Algoritmo var salarioBruto, imposto INPS, descontos: numerico var salarioLiquido: numerico var nomeDoFuncionrio: caracter inicio Leia (salarioBruto, nomeDoFuncionario ) imposto salarioBruto * 0.15 INPS salarioBruto * 0.09 descontos INPS + imposto salarioLiquido salarioBruto - descontos Escreva (nomeDoFuncionario, salarioLiquido) Fim algoritmo Do ponto de vista do computador que executa o algoritmo, no importa quais identificadores forem escolhidos, por isso os dois algoritmos acima so equivalentes. Mas, como fica claro no exemplo, para um programador, esses algoritmos so completamente opostos em termos de legibilidade!

2.8 Expresses e Funes Pr-definidas


A linguagem algortmica utilizada possibilita utilizar expresses de acordo com determinadas regras, bem como utilizar funes pr-definidas.

Expresses Aritmticas
Expresses aritmticas so aquelas cujo resultado da avaliao um valor de tipo numrico (inteiro ou real): se todas as variveis e/ou constantes so do tipo inteiro, ento o resultado da expresso tambm um valor do tipo inteiro; se todas as variveis e/ou constantes so do tipo real, ento o resultado da expresso tambm um valor do tipo real; se ao menos uma das variveis ou constantes for do tipo real ou for usado o operador aritmtico / (diviso real), ento o resultado da expresso um valor do tipo real.

Para que uma expresso possa ser avaliada em um algoritmo ela deve seguir uma sintaxe bem definida. As operaes utilizadas nas expresses aritmticas so as seguintes: Operao Potenciao Multiplicao Diviso Adio Subtrao Smbolo ^ * / + -

Com essas operaes bsicas pode-se construir expresses aritmticas. Mas h ainda um problema. Considerando a seguinte expresso: 3+4*2 O resultado da avaliao dessa expresso pode ser diferente dependendo de qual operao efetuada primeiro. O resultado ser 14 se for resolvida a soma em primeiro lugar e 11 se for resolvida a multiplicao primeiro. Como no pode haver ambigidades, existe na linguagem um mecanismo de prioridades que sempre determina a seqncia em que as operaes devem ser efetuadas. A relao de prioridade para os operadores utilizados em expresses aritmticas a seguinte: Prioridade 1 2 3 Operao Potenciao Multiplicao e Diviso Adio e Subtrao

Portanto, quando da avaliao de uma expresso aritmtica, em primeiro lugar so efetuadas as potenciaes, logo aps so efetuadas as multiplicaes e divises e, por fim, as adies e subtraes. Quando houverem duas operaes com a mesma prioridade na expresso, elas so resolvidas na ordem em que aparecem da esquerda para a direita. Levando em considerao essas relaes de prioridade, o resultado da expresso 3 + 4 * 2 seria 11. possvel ainda alterar a ordem de execuo das operaes em uma expresso com o uso de parnteses. Em uma expresso aritmtica as sub-expresses entre parnteses so efetuadas sempre em primeiro lugar. Se a inteno fosse efetuar primeiro a soma na expresso do exemplo acima, a expresso seria escrita da seguinte forma: (3 + 4) * 2 O resultado dessa expresso com parnteses seria ento 14. Exemplo: expresso aritmtica para o clculo das razes de uma equao de segundo grau segundo a frmula de Bscara (-b b 2 4*a*c)
2*a

raiz1 (-b + (b ** 2 - 4 * a * c) ** (1/2) ) / (2 * a)

raiz2 (-b - (b ** 2 - 4 * a * c) ** (1/2) ) / (2 * a) Como no existe um operador de radiciao eleva-se o termo potncia , operao equivalente raiz quadrada.

Expresses Relacionais e Lgicas


Expresses relacionais e lgicas so expresses que, quando avaliadas, resultam em um valor lgico (verdadeiro ou falso). Por exemplo, a expresso relacional: 5 > 10, resulta no valor falso. Assim como as expresses aritmticas, as expresses relacionais e lgicas tambm dispem de um conjunto de operadores, smbolos e prioridades. Os operadores so divididos em operadores relacionais e operadores lgicos. Operadores relacionais atuam sobre operandos numricos e resultam em valores lgicos (operadores de comparao entre dois operandos). So eles: Igual a Diferente de Maior que Menor que Maior ou igual a Menor ou igual a = <> > < >= <=

Operadores lgicos por outro lado atuam sobre valores lgicos e resultam em valores lgicos. So eles: Inverte o valor lgico do operando. Resulta verdadeiro se e somente se os dois operandos so verdadeiros Resulta verdadeiro se pelo menos um dos dois operandos verdadeiro. Nao E Ou

As tabelas abaixo mostram os possveis resultados de operaes lgicas sobre os valores lgicos verdadeiro e falso.

Resultado com Operador E Verdadeiro Falso Falso Falso Resultado com Operador Ou Verdadeiro Verdadeiro Verdadeiro Falso

Operando 1 Verdadeiro Verdadeiro Falso Falso verdadeiro Verdadeiro Verdadeiro Falso Falso

Operando 2 Verdadeiro Falso Verdadeiro Falso falso Verdadeiro Falso Verdadeiro Falso

Resultado com Operador Nao verdadeiro falso Exemplos de expresses relacionais e lgicas: O algoritmo Algoritmo var a, b, c: numerico var resultado: logico inicio a5 b 10 c 20 resultado a + b > c Escreva (resultado) resultado 2 * b = c Escreva (resultado) resultado (a + b > c) ou (2 * b = c) Escreva (resultado) Fim algoritmo

Operando 1 falso verdadeiro

Teria como resultado falso verdadeiro verdadeiro

Na resoluo das expresses lgicas, os operadores tm uma hierarquia de prioridades: 1.OU 2.E 2.No

Na resoluo de expresses em geral, os operadores tm a seguinte hierarquia de prioridades: 1.( ) 2.Operaes aritmticas 3.Operaes relacionais 4.Operaes Lgicas

Funes Pr-definidas
O portugus estruturado oferece tambm o seguinte conjunto de funes pr-definidas: Funes sobre valores numricos Operao Quociente inteiro da diviso de x por y Resto da diviso inteira de x por y

Funo \ % Exemplo:

O algoritmo Algoritmo inicio Escreva (23 \ 5) Escreva (23 %5) Fim algoritmo

Teria como resultado 4 3

3. Estrutura Condicional
No dia-a-dia as pessoas so chamadas a tomar vrias decises. Por exemplo, a atividade de um assistente administrativo obriga a uma tomada de deciso: algoritmo fornecer formulrio verificar o preenchimento do formulrio SE (preenchimento estiver correto) ENTO arquivar formulrio fornecer protocolo SENO fornecer novo formulrio instruir quanto forma de preenchimento fim algoritmo A possibilidade de tomada de decises a caracterstica mais importante de qualquer linguagem de programao. Sem esta caracterstica o computador seria pouco mais do que uma veloz mquina de calcular. Utilizando instrues para escolha de aes alternativas, aumenta a flexibilidade para determinar a seqncia de execuo dos comandos da linguagem. Considerando o seguinte exemplo: tem-se dois nmeros numero1 e numero2. Se o primeiro nmero for maior escreva O maior e o primeiro numero. Se o segundo nmero for maior escreva O maior e o segundo numero. O fato de escrever mensagens diferentes dependendo de qual for o maior nmero, identifica dois caminhos diferentes a serem percorridos. Para escrever esse algoritmo, necessria uma estrutura sinttica que permita escolher o caminho a ser seguido. Essa estrutura que chamada estrutura condicional e tem a seguinte a seguinte forma geral:

Se < expresso lgica ou relacional > Entao < lista de comandos 1 > Senao < lista de comandos 2 > Fim se

Quando, durante a execuo do algoritmo, a estrutura Se for encontrada somente uma das listas de comandos (1 ou 2) ser executada. O resultado da avaliao da expresso lgica ou relacional que acompanha a palavra Se que determina o caminho a ser escolhido e executado. Quando o resultado da avaliao da expresso for verdadeiro, a lista de comandos 1 ser executada e a lista 2 ignorada. Quando o resultado da avaliao da expresso for falso, a lista de comandos 2 ser executada e a lista 1 ignorada. A execuo do algoritmo continua normalmente depois da expresso Fim se quando encerrada a execuo de uma das listas de comandos.

Utiliza-se estrutura condicional sempre que um trecho de algoritmo (uma das listas de comandos) s deva ser executado em determinadas condies definidas pela expresso lgica ou condicional. No exemplo adotado, o algoritmo ficaria assim:

Algoritmo var numero1, numero2: inteiro inicio Leia (numero1) Leia (numero2) Se (numero1 > numero2) entao escreva ("O maior e o primeiro numero") senao escreva ("O maior o segundo numero") FimSe Fim algoritmo Tomando outro exemplo de resoluo de equaes do segundo grau. Nos exemplos utilizados at ento, desconsiderava-se a possibilidade de razes imaginrias (delta negativo). A equao 2x2 - 2x + 5 = 0 um caso que possui razes imaginrias.Para tratar essa possibilidade preciso ter caminhos diferentes no algoritmo, ou seja, somente calcular as razes se o delta for positivo. O algoritmo fica assim: Algoritmo var a, b, c, delta, raiz1, raiz2: inteiro Leia (a,b,c) delta<-(b^2) - (4 * a * c) Se (delta >= 0) entao raiz1<- (-b + delta ^ (1/2) ) / (2 * a) raiz2<- (-b - delta ^(1/2) ) / (2 * a) escreva ("a primeira raiz : ", raiz1) escreva ("a segunda raiz : ", raiz2) seno escreva ("no h razes reais) Fimse Fim algoritmo Na estrutura Se, no caso de no existir uma lista de comandos associados ao Seno, o mesmo no colocado. Nesse caso, a forma do comando a seguinte: Se (< expresso lgica ou relacional >) entao <lista-de-comandos> fim se A estrutura condicional permite a ocorrncia de aninhamento. Isso significa que uma

condio pode ser encadeada a um senao. Tomando o exemplo: fornecido o gabarito de uma prova composta por 3 questes. Cada questo pode ter como resposta alternativa A, B ou C. O algoritmo recebe as respostas das questes de um determinado aluno e precisa apresentar o resultado. Caso o estudante tenha errado todas as questes o algoritmo deve escrever eliminado. Caso o estudante tenha acertado pelo menos uma questo deve imprimir o nmero das questes que esto corretas. Algoritmo var gabarito1, gabarito 2, gabarito3, resposta1, resposta2, resposta3: inteiro Leia (gabarito1) Leia (gabarito2) Leia (gabarito3) Leia (resposta1) Leia (resposta2) Leia (resposta3) Se ((resposta1<> gabarito1) e (resposta2 <> gabarito2) e (resposta3 <> gabarito3)) entao Escreva (eliminado) senao Se( resposta1 = gabarito1) entao escreva (questao 1) Fim se Se (resposta2 = gabarito2) entao escreva( questao 2) Fim se Se (resposta3 = gabarito3) Entao escreva (questao 3) Fim se Fimse Fim algoritmo

4. Estrutura de Repetio
Muitas vezes, se faz necessrio repetir uma determinada seqncia de instrues at que determinada condio seja satisfeita. Pode-se usar como exemplo uma situao cotidiana como fazer massa folheada: Algoritmo amassar bem todos os ingredientes deixar repousar por 30 min. REPETIR (3 vezes) abrir a massa passar margarina dobrar 3 vezes deixar repousar por 15 min. abrir a massa rechear levar ao forno quente numa forma untada ENQUANTO (no estiver assado) manter no forno quente fim algoritmo A estrutura de repetio utilizada quando um trecho de um algoritmo deve ser repetido um determinado nmero de vezes. O portugus estruturado possui trs estruturas de repetio: Repita...at Para...faa Enquanto...faa. A estrutura Repita...ate tem a forma a seguir: Repita <lista-de-comandos> ate <expresso condicional> Nessa estrutura todos os comandos da lista so executados e a expresso avaliada no final. Isto se repete at que a avaliao da condio resulte em verdadeiro, quanto ento o prximo comando a ser executado o comando imediatamente aps o ate. Cada repetio da lista de comandos tambm chamada de iterao. Esta estrutura tambm chamada de lao de repetio. Exemplo: Escrever os nmeros de 1 a 10. Algoritmo var i: numrico inicio i <- 1 repita escreva ( I)

i <- i + 1 ate i>10 fimalgoritmo Obs: A varivel "i" controla o nmero de repeties do lao. Normalmente a varivel de controle do lao recebe um valor inicial, incrementada de um valor constante no lao e tem seu valor testado em algum ponto do lao. Ao chegar a um determinado valor o lao interrompido. A inicializao da varivel contadora deve acontecer fora do lao, antes do seu incio. Existem diversas maneiras de implementar o mesmo lao, mas deve-se observar sempre: a) inicializao da varivel b) incremento (ou decremento) da varivel c) teste de valor final Abaixo mostrada outra maneira de implementar o algoritmo anterior: Algoritmo var i: numrico inicio i <- 0 Repita i<-i+1 Escreva (i) Ate i=10 fim algoritmo A estrutura Enquanto...faa tem a seguinte forma Forma geral: Enquanto <expresso faa <lista de comandos> Fim condicional>

Na estrutura Enquanto..faa, a expresso lgica avaliada e, se ela for verdadeira, a lista de comandos executada. Caso seja falsa na primeira iterao, a seqncia de comandos nunca executada. Isso se repete at que a condio seja falsa, quando, ento, o comando imediatamente aps a palavra Fim executado. Exemplo: Algoritmo var i: numrico inicio i<-1 Enquanto (i<=10) faa Escreva (i) i<-i+1 Fimenquanto

fimalgoritmo A estrutura enquanto...faa tambm uma estrutura de repetio, semelhante repita. A diferena bsica entre as duas estruturas a posio onde testada a expresso. No repita, a condio avaliada aps a execuo dos comandos, o que garante que os comandos sero executados pelo menos uma vez. No enquanto, a expresso avaliada no incio e se o resultado for falso no primeiro teste a lista de comandos no executada nenhuma vez. Essa diferena faz com que em determinadas situaes o uso de uma estrutura seja mais vantajoso que o uso da outra. O exemplo a seguir, onde so mostradas solues para um problema, utilizando as duas estruturas, ilustra essa diferena: Problema: Faa um algoritmo que leia diversos nmeros positivos e escreva, para cada um, o nmero, seu quadrado e seu cubo. Algoritmo var i: numrico inicio Leia i Enquanto (i>=0) faa Escreva (i, ,i*i, ,i^ 3) Leia (i) Fimenquanto fimalgoritmo fimalgoritmo Algoritmo var i: numrico inicio Repita Leia (i) Se ( i>=0) entao escreva (i, ,i*i, ,i^3) FimSe Ate i<0

Neste algoritmo, se o primeiro valor for negativo, o algoritmo no deve escrever nada. Para que isso ocorra um teste do valor deve ser feito antes da escrita. Como no Repita o teste feito ao final, um outro teste deve ser colocado no incio do lao, o que faz com que, a cada iterao, dois testes sejam feitos. Isto no ocorre no Enquanto, onde o teste feito no incio, no sendo, portanto, necessrio um teste adicional. A forma para a Estrutura Para..faa a seguinte: Para <varivel_de_controle> de <valor inicial> ate <valor final> faca <lista de comandos> Fim Na estrutura Para, a varivel de controle inicializada com <valor inicial> e no incio de cada iterao o valor da varivel de controle comparado com <valor final>. Se o valor da varivel for menor ou igual a <valor final>, a lista de comandos executada e aps ser executado o ltimo comando da lista, a varivel de controle incrementada. Isto se repetee at que o valor da varivel de controle seja maior que <valor final>, quando ento executado o comando imediatamente aps a palavra Fim. A estrutura Para uma estrutura de repetio mais completa que as anteriores, pois ela incorpora a inicializao, incremento e teste de valor final da varivel de controle. preferencialmente utilizada em situaes em que se sabe previamente o nmero de repeties a serem feitas. Este nmero de repeties pode ser uma constante ou estar em uma varivel. A seguir sero apresentados alguns problemas utilizando estruturas de repetio e

desenvolvidas algumas solues para os mesmos. Problema 1: Faa um algoritmo que leia 100 nmeros e escreva todos os que forem positivos. Soluo: Neste problema, a mesma ao repetida 100 vezes. Em cada uma delas um nmero lido e, se for positivo, escrito. Como o nmero de repeties definido (100), pode-se utilizar a estrutura para. Uma possvel soluo para o algoritmo a seguinte: Algoritmo var i, numero: numerico inicio Para i de 1 ate 100 faca Leia (numero) Se (numero>0) entao escreva (numero) Fimse fimpara fimalgoritmo Neste algoritmo so utilizadas duas variveis, cada uma com uma funo bem definida. A varivel i usada para controlar o nmero de repeties e a varivel numero utilizada para armazenar cada um dos valores lidos. Ao escrever um algoritmo importante ter bem clara a funo de cada varivel. Como sero lidos 100 nmeros diferentes, a leitura do nmero deve ser feita dentro do lao. Problema 2 : Faa um algoritmo que leia um nmero N e escreva todos os nmeros de 1 a N. Soluo: Neste problema, lido um nmero N, e so escritos todos os nmeros de 1 a N. Para isso deve ser utilizado uma estrutura de repetio. Como o nmero de repeties conhecido (est na varivel N) pode-se utilizar a estrutura para. Uma possvel soluo para o problema a seguinte: Algoritmo var i, numero: numrico inicio Leia (numero) Para i de 1 ate numero faca escreva( i) fimpara fimalgoritmo Vale observar que, como nesse algoritmo lido apenas um nmero, a leitura do mesmo deve ser feita fora da estrutura de repetio. Todos os trs tipos de loop permitem que se use o comando interrompa para deix-los imediatamente. Embora esta tcnica esteja de certa forma em desacordo com os princpios da programao estruturada, o interrompa foi includo por ser encontrado na literatura de introduo programao, e mesmo em linguagens como o Object Pascal (Delphi), Clipper, VB, etc. Seu uso exemplificado a seguir: algoritmo "interrompa" var x : numerico

inicio x <- 0 repita x <- x + 1 escreva (x) se (x = 10) entao interrompa fimse ate falso fimalgoritmo A simulao do algoritmo em papel permite identificar rapidamente diversos tipos de erro e uma forma excelente de compreender o funcionamento do mesmo. Vamos exemplificar o uso de testes de mesa atravs de um algoritmo simples que contm alguns erros. Para facilitar a demonstrao, as linhas do algoritmo sero numeradas. Problema : Faa um algoritmo que leia um nmero N e escreva os nmeros de 1 a N. Algoritmo var i: numrico inicio leia (numero) i<-1 repita escreva( i) ate i>numero fimalgoritmo Este tipo de estrutura exige testes de mesa mais rigorosos. O primeiro passo montar uma tabela com todas as variveis declaradas no algoritmo, e a cada instruo do algoritmo registrar na tabela os valores assumidos pelas variveis. Quando o algoritmo necessitar efetuar alguma totalizao com estruturas de repetio usa-se uma varivel chamada acumulador. A varivel acumuladora tambm deve ser inicializada (normalmente com zero) e pode ser incrementada ou no de um valor varivel no lao. Escrever um algoritmo que leia um nmero N e escreva o nmero de divisores de N. Algoritmo var N, acum, i: numrico inicio acum<-0 i<-1 Leia (N ) Repita Se (N % i=0) entao acum<-acum+1 fim se i<-i+1 ate i>N escreva (acum) fimalgoritmo

Algumas dicas podem ser elencadas para facilitar a identificao da necessidade de estruturas de repetio, bem como, a forma correta de utiliz-las: 1) O algoritmo deve fazer algo uma nica vez ou vrias vezes? Se for uma nica vez v para a questo 5, seno, coloque uma estrutura de repetio. 2) O nmero de repeties conhecido? Ou lido? Se for, utilize a estrutura repita. Declare uma varivel de controle, inicialize-a antes de iniciar o lao, incremente-a a cada iterao do lao e teste a condio de fim. Em caso de dvida faa um teste de mesa da estrutura para verificar se o lao repetido o nmero correto de vezes. 3)Se o lao no tem um nmero conhecido de repeties qual a condio de trmino? 4)Coloque no lao, em portugus, no necessariamente algortmico, o que o lao deve fazer a cada repetio. No desenvolva neste ponto nenhum repita interno. Se os houver deixe indicado o que o repita interno deve fazer e desenvolva-o depois em outro algoritmo. 5)O problema deve ler algo? Se no, v para 7. Apenas um conjunto de valores ou vrios valores ou conjuntos de valores? Se forem lidos vrios grupos de valores, a leitura dentro do lao. Se for lido apenas um grupo de valores a leitura fora do lao. 6)O que o problema deve fazer com os valores lidos? Que resultados deve gerar? Como so calculados estes valores? 7)O problema deve escrever algo? Apenas no final do algoritmo ( o comando de escrita vai depois do lao) ou para cada grupo de valores processados? Neste ltimo caso o comando de escrita vai dentro do lao, aps o processamento de cada grupo de valores. 8)Se ficou algum passo por detalhar, repita todo o procedimento (passos 1 a 7) para o passo ser detalhado. importante que os passos 1 a 8 sejam executados para gerar um algoritmo com apenas uma estrutura de repetio. Se no ncleo da estrutura de repetio surgir a necessidade de uma outra estrutura de repetio aninhada, esta dever ser desenvolvida mais tarde, em algoritmo separado. As vantagens desta abordagem so: - Um problema maior decomposto em um duas ou mais partes menores, cada uma bem mais simples que o problema original, podendo ser resolvidos de forma independente. - As partes que compem o algoritmo podem ser testadas de forma independente - As partes que compem o algoritmo podem ser reutilizadas em outros algoritmos. Ao final do estudo da estrutura de repetio, algumas observaes podem ser feitas para que o algoritmo seja validado e tenha a mnima possibilidade de funcionar: 1)Todos os comandos esto dentro do formato definido? 2) Todo repita tem um fim? 3) Todo SE tem um ENTAO e um FIM SE ( o senao opcional)? 4) Entre o SE e o ENTAO h somente a expresso lgica? 5) A expresso lgica foi avaliada operador a operador, seguindo a prioridade dos operadores e resultou em um valor lgico? 6) E as expresses aritmticas?

7)Execute um teste de mesa no algoritmo. 1.Inicialmente liste todas as variveis utilizadas no algoritmo e os nmeros que sero usados como dados de teste. Deixe uma coluna para mostrar tudo que o algoritmo vai escrever. 2.Execute o algoritmo passo a passo, atualizando em cada passo todas as variveis que so afetadas pelo passo. Utilize, nos comandos de leitura, dados que garantam que todos os caminhos do algoritmo sero testados (p.ex: Nos comandos Se... testar o ento e o seno). Alguns erros do algoritmo que so expostos no teste de mesa: 1) Uma varivel sem inicializao 2) Uma estrutura de repetio sem condio de trmino 3) Uma varivel de controle sem incremento 4) Quantidade de repeties erradas (por exemplo: so lidos mais dados ( ou menos ) que o necessrio).

5. Refinamentos Sucessivos
uma tcnica para desenvolver um algoritmo em diversos passos aumentando o nvel de detalhamento a cada passo. A partir do problema gerar uma possvel soluo e detalh-la at um nvel aceitvel. Uma boa poltica ento dividir atividades complexas em processamentos-componentes. Aps individualizados os processamentos-componentes e suas entradas/sadas, pode-se preocupar com as ferramentas necessrias para sua execuo. Entretanto, mesmo estes processos menores podem ser ainda to complexos que exijam novas divises. Repete-se, ento, a diviso, desta vez no interior dos processamentos-componentes, gerando novos processamentos mais simplificados. Esta tcnica conhecida como dividir-para-conquistar, ou Tcnica de Refinamentos Sucessivos. A seguir, um algoritmo que descreve as atividades matinais de uma pessoa: Algoritmo "Manh de Segunda Feira" levantar da cama; cuidar da higiene pessoal; tomar caf; recolher material necessrio; sair de casa.

Processamento-Componente "levantar da cama" - abrir os olhos; - se espreguiar; - ficar de p. Processamento-Componente "tomar caf" - sentar mesa; - pr caf na xcara; - pr margarina no po; - comero po e tomar caf; - comer uma fruta. Processamento-Componente "comer o po e tomar caf" - apanhe o po com a margarina e a xcara com caf - enquanto o po com a margarina e o caf no acabarem, coma mais um pedao de po e beba mais um pouco de caf da xcara. Processamento Componente "coma uma fruta" - se houver algum tipo de fruta disponvel na mesa, escolha um tipo; - pegue uma fruta do tipo escolhido; - coma a fruta.

Escrever um algoritmo que leia um nmero e escreva a mensagem " primo" ou "No primo". Primeira Verso: Algoritmo CalculaPrimo var numero: inteiro inicio Leia (numero) {Verifica se nmero primo} Se {nmero primo} ento escreva ("nmero primo") seno escreva ("nmero no primo") fim se fimalgoritmo Detalhamentos { Verifica se nmero primo } Um nmero primo se divisvel somente por si e pela unidade ( 1 ). Uma maneira de descobrir isto contando o nmero de divisores do nmero. Se possuir apenas dois divisores ( 1 e o prprio nmero ) ele primo. { Verifica se nmero primo } ==> { Conta nmero de divisores } { Conta nmero de divisores } acum <- 0 i<-1 Repita Se (Numero % i = 0) acum<-acum+1 fim se i<-i+1 ate i>nmero { Nmero primo } Se (acum=2) ento... Segunda Verso: Algoritmo CalculaPrimo var numero, i, acum :inteiro inicio Leia (numero)

ento

acum<-0 i<-1 Repita Se (nmero % i= 0) ento acum<-acum+1 fim se i<-i+1 ate i>nmero se (acum=2) entao escreva ("nmero primo") senao escreva ("nmero no primo") fim se fimalgoritmo

6. Algoritmos de Manipulao de Matrizes e Vetores


Existe uma tcnica de programao que permite trabalhar com o agrupamento de vrias informaes dentro da mesma varivel. Essas estruturas de dados so ditas homogneas, pois permitem agrupar somente dados que sejam do mesmo tipo. Vetores: uma estrutura que podemos usar para manter conjuntos de dados na memria e process-los de alguma maneira. A primeira estrutura de dados a ser estudada a de vetores ou matrizes de uma dimenso. Uma matriz um conjunto de variveis homogneas, cada uma podendo representar o valor de uma constante, como se fossem variveis simples mas todas compartilhando um nome comum. ndices so associados a este nome comum permitindo assim individualizar os elementos do conjunto. Exemplo: Conjunto dos 5 primeiros nmeros pares com o nome numeros_Pares. numeros_Pares [2 4 6 8 10] As matrizes podem ter mais de uma dimenso. Uma matriz de duas dimenses composta por linhas e colunas.Para declarar uma matriz deve-se definir: quantas dimenses tem a matriz o tamanho de cada dimenso (quantas linhas e colunas) qual o tipo de cada elemento da matriz. Por exemplo: A matriz deve armazenar na primeira linha os nmeros pares em ordem crescente e na Segunda linha os nmeros pares em ordem decrescente. numeros_Pares [ 2 4 6 8 10] [ 10 8 6 4 2 ] Neste exemplo a matriz possui 2 linhas, sendo que cada linha possui 5 colunas. A matriz possui ao todo 10 informaes de variveis. Para acessar um dado especfico e individual da matriz so utilizados ndices. Utilizando o exemplo anterior onde a matriz de uma dimenso armazena os nmeros pares, deseja-se solicitar a segunda informao da matriz. Essa segunda informao da matriz ocupa a posio 2 que seu ndice. Ao solicitar a informao da matriz com ndice 2, o algoritmo retorna o valor que ocupa essa posio na matriz, ou seja, o valor 4. Pode-se ler, atribuir e escrever uma varivel do tipo matriz. Para que isso ocorra sempre deve ser referenciado o ndice. Alguns exemplos: 1. Leitura de todos os dados de uma matriz com uma dimenso Algoritmo var V: vetor[1..10] de inteiro i : inteiro inicio i <- 1 REPITA leia (V[ i]) { **** ndice da matriz ****) i <- i + 1 ate i > 10 Fimalgoritmo 2. Leitura de todos os dados de uma matriz com duas dimenses (so 2 linhas com 5 colunas

cada uma) Algoritmo var mat: vetor[1..2,1..5] de inteiro lin, col : inteiro inicio lin <- 1 REPITA Col<- 1 REPITA leia (mat[lin,col]) col<-col+1 Ate col > 5 lin <- lin + 1 Ate lin > 2 Fimalgoritmo 3. O algoritmo deve ler as 4 notas individuais de um determinado aluno e calcular sua mdia aritmtica. No final, alm de escrever a mdia deve escrever cada uma das notas. Algoritmo var notas : vetor[1..4] de inteiro indice, soma: inteiro inicio indice <- 1 soma <- 0 REPITA leia (notas[ndice]) soma <- soma + notas[ndice] indice<-indice + 1 Ate indice > 4 Escreva (Media Final, soma % 4) Escreva (Notas) Indice <- 1 Repita Escreva (notas[ndice]) Indice <- indice + 1 Ate indice > 4 As estruturas de repetio so muito teis no tratamento de matrizes, pois permitem tratar cada informao da matriz utilizando a mesma seqncia de instrues.

7. Subalgoritmos
So trechos de algoritmos que efetuam uma ou mais instrues determinadas e com objetivos especficos. Ao invs de escrever um algoritmo grande que repete vrias vezes o mesmo bloco de instrues, escrito um subalgoritmo menor que pode ser referenciado pelo algoritmo principal uma ou vrias vezes. Os subalgoritmos de forma isolada realizam uma ao especfica, mas em conjunto, resolvem o problema proposto.Os subalgoritmos tambm so utilizados para modularizar os algoritmos, tornando-os mais fceis de compreender, utilizando o raciocnio de refinamentos sucessivos. As principais vantagens so: Reduo do tamanho do algoritmo. Facilidade na compreenso e visualizao do algoritmo. Possibilidade de serem invocados vrias vezes no mesmo algoritmo. Implementao do raciocnio de refinamentos sucessivos. Modularizao do algoritmo, dividindo um algoritmo complexo em partes menores e mais simples. Um subalgortimo um bloco de programa, contendo incio e fim e identificado por um nome. Em qualquer parte do algoritmo o nome do subalgoritmo pode ser referenciado. Ao invocar um subalgoritmo, ocorre a execuo das instrues que fazem parte dele. Ao seu trmino, o controle de processamento retorna diretamente para a primeira linha de isntruo aps a linha que efetuou a sua chamada. Os subalgoritmos podem ser divididos em dois grupos: subrotinas e funes.

7.1 Subrotinas
A declarao de subrotinas deve ser feita sempre no incio do algortimo, ou seja, de seu bloco principal. As subrotinas somente so executas quando so invocadas (chamadas). Para executar uma subrotina feita uma chamada pelo nome dela. Um algoritmo pode possuir vrias subrotinas e uma subrotina pode possuir outras subrotinas dentro dela. A subrotina pode ter declarada em seu corpo variveis locais. So chamadas de variveis locais porque somente o corpo da subrotina em questo pode utiliz-la. A extenso de uso de uma determinada varivel chamada de escopo. Dessa forma, o escopo de uma varivel declarada em uma subrotina local ao corpo desta subrotina. J as variveis declaradas no corpo do algoritmo principal so variveis globais, pois podem ser utilizadas por todo o algoritmo. As subrotinas utilizam argumentos ou parmetros, que so utilizados para passar informao do bloco chamador para a subrotina e vice-versa. Esses parmetros so valores que servem para a subrotina realizar seu processamento e, para devolver informao j processada para o bloco que a invocou. Os parmetros formais so os argumentos declarados na subrotina. Os parmetros atuais so argumentos passados na chamada da subrotina. O formato geral geral de uma subrotina :

PROCEDIMENTO <nome> (<lista_de_parmetros_formais>) VAR <declarao_de_vriveis_locais> INICIO <lista_de_instruo_subrotina> FIMPROCEDIMENTO O formato geral de um algoritmo com subrotinas: Algoritmo VAR <declarao_de_variveis-globais> PROCEDIMENTO <nome> (<lista_de_ parmetros_formais>) VAR <declarao_de_vriveis_locais> INICIO <lista_de_instruo_subrotina> FIMPROCEDIMENTO PROCEDIMENTO <nome> (<lista_de_ parmetros_formais>) VAR <declarao_de_vriveis_locais> PROCEDIMENTO <nome> (<lista_de_ parmetros_formais >) VAR <declarao_de_vriveis_locais> INICIO <lista_de_instruo_subrotina> FIMPROCEDIMENTO INICIO <lista_de_instruo_subrotina> <nome_subrotina>(<lista_parmetros>) FIM PROCEDIMENTO INICIO <lista_de_instruo_corpo_principal} <nome_subrotina>(<lista_parmetros_atuais>) FIMPROCEDIMENTO Exemplo: a) Um bloco nico Algoritmo CLASSIFICA VAR A,B,C,D,cont, aux: INTEIRO INICIO cont <- 0 Repita Leia (A,B,C,D) Escreva (A,B,C,D) Se( D>A) entao

aux<-D D<-A A<-aux Fim se Se (D>B) entao aux<-D D<- B B<-aux Fim se Se (D>C) entao aux<-D D<- C C<- aux Fim se Se (C>A) entao aux<-C C<-A A<-aux Fim se Se (C>B) entao aux<-B B<-C C<-aux Fim se Se (B>A) entao aux<-B B<-A A<-aux Fim se Escreva (A,B,C,D) cont<-cont + 1 Ate cont = 5 Fim Algoritmo b) Utilizando o conceito de modularizao ou rotinas. criada uma rotina para fazer a troca das variveis, passando o valor a ser trocado como parmetro. Algoritmo CLASSIFICA VAR A,B,C,D,cont: numrico {Rotina de troca } PROCEDIMENTO TROCA(X,Y) VAR aux, X, Y: numerico INICIO aux <- X X<- Y Y <- aux FIMPROCEDIMENTO { parmetros }

{algoritmo principal} INICIO Cont <- 0 Repita Leia (A,B,C,D) Escreva (A,B,C,D) Se (D>A) entao TROCA(D,A) Fim se Se (D>B) entao TROCA(D,B) Fim se Se (D>C) entao TROCA(D,C) Fim se Se (C>A) entao TROCA(C,A) Fim se Se (C>B) entao TROCA(C,B) Fim se Se (B>A) entao TROCA(A,B) Fim se Escreva (A,B,C,D) Cont <- cont+1 Ate cont = 5 FimAlgoritmo c) Segunda verso com subrotina. Incluindo tambm a comparao das variveis na subrotina. Algoritmo CLASSIFICA VAR A,B,C,D,cont : INTEIRO {subrotina compara os valores e troca de varivel } PROCEDIMENTO COMPARA_TROCA(X,Y) VAR X, Y, aux :INTEIRO INICIO Se (X>Y) ento Aux <- X X <- Y Y <- aux fimse FIMPROCEDIMETO {corpo principal} INICIO cont <- 0 Repita

Leia (A,B,C,D) Escreva (A,B,C,D) COMPARA_TROCA(D,A) COMPARA_TROCA(D,B) COMPARA_TROCA(D,C) COMPARA_TROCA(C,A) COMPARA_TROCA(C,B) COMPARA_TROCA(A,B) Escreva (A,B,C,D) Cont <- cont + 1 Ate cont = 5 FimAlgoritmo

7.2 Funes
A prpria linguagem de programao ou algortmica possui funes. Muitas delas j so conhecidas como: % - resto da diviso inteira, \ - quociente da diviso inteira. Essas funes quando invocadas no algoritmo retornam valores que so o resultado da aplicao da funo. Por exemplo, ao invocar a funo 5 % 2, ser retornado o valor 1, ou seja, o resultado da aplicao da funo resto. Essas funes podem ser ampliadas, ou seja, os programadores podem criar suas prprias funes. As funes tambm so subalgoritmos, ou seja, blocos menores de um algortimo. As funes so semelhantes a subrotinas. O que diferencia uma funo de uma subrotina que a funo devolve o resultado no seu prprio nome e na subrotina os resultados so devolvidos via parmetros. Dessa forma, as funes utilizam parmetros apenas como entrada para seu processamento. Outra diferena entre subrotinas e funes a forma de serem chamadas. Enquanto a subrotina chamada como uma linha de comando - TROCA(A,B), a funo invocada atribuindose o resultado dela a uma varivel A<-3 % 2 Funes tm o seguinte formato:
FUNO <nome> ( <lista_de_parmetros_formais: var<declarao_de_variveis_locais> tipovariavel>): tipo_retorno

inicio <lista_de_instruo_funo> retorne <expresso, contante, varivel> FIMFUNO Exemplo: a) Escrever um algoritmo que receba um nmero do usurio e calcule seu cubo. Algoritmo CalculaCubo var numero: inteiro Funo cubo (N:inteiro ): inteiro var num: inteiro inicio num <- N * N * N retorne num

Fim Funo inicio Leia (numero) Escreva (cubo(numero)) Fim algortimo

7.3 Passagem de Parmetros


A passagem de parmetros para subrotinas e funes pode ser de dois tipos: Por valor: A subrotina ou funo recebe o parmetro de entrada. O processamento pode produzir alteraes na varivel utilizada como parmetro , mas no se reflete nessa varivel quando utilizada fora da subrotina. Por referncia: As alteraes no parmetro dentro da rotina se refletem na varivel fora da rotina. Cada linguagem tem seu modo de passagem de parmetros, podendo haver mais de um modo com regras especficas para indicar qual modo se aplica a cada parmetro. Na nossa linguagem consideraremos que as funes utilizam passagem por valor e as subrotinas usam passagem por referncia.

8. Recursividade
Um objeto dito recursivo se ele consistir parcialmente ou for definido em termos de si prprio. Por exemplo: uma figura que contenha a si mesma. O poder de recurso deve-se a possibilidade de se definir um conjunto infinito de objetos atravs de uma formulao finita. Em algoritmos, a capacidade de uma funo ou subrotina chamar a si mesma. Uma vez que um conjunto de comandos agrupado em uma subrotina ou funo sob um determinado nome, pode-se invocar n vezes este conjunto de instrues. A recursividade empregada quando possvel particionar problemas em problemas menores. A soluo do problema menor semelhante ao original, porm de complexidade menor. Da mesma forma que nas instrues de repetio, os subalgoritmos recursivos introduzem a possibilidade de ocorrncia da no terminao do algoritmo. As chamadas recursivas devem estar sujeitas a uma determinada condio que em algum instante se torne falsa e encerre o processo de chamada recursiva. Exemplos: 1) Calcular o fatorial: Algoritmo CalculoFatorial var numero: inteiro Funo fatorial(n:inteiro): inteiro var v_fat: inteiro Se (n = 0) Ento retorne 1 seno retorne n* fatorial (n 1) Fim se fimfuno inicio Leia (numero) Escreva (fatorial(numero)) Fim algoritmo 2) Funo recursiva para somar os nmeros de 1 n. Algoritmo CalculaSoma var n: inteiro Funo soma(n:inteiro) : inteiro inicio Se (n > 0) Ento retorne n + soma (n 1) Fimse Fimfuno inicio Leia (n) Escreva (soma(n))

Fim algoritmo 3) Funo recursiva para somar os nmeros mpares de 1 a n. Algoritmo CalculaSomaImpar var num: inteiro Funo somaimpar(n:inteiro): inteiro inicio Se (n = 1) Ento retorne 1 Seno se (n % 2) = 0 Entao retorne somaimpar(n-1) Seno retorne n+ somaimpar (n 1) Fim se Fim se Fim funo inicio Leia (num) Escreva (somaimpar(num)) Fim algoritmo

Anda mungkin juga menyukai