Anda di halaman 1dari 50

Lgica de Programao e ALGORITMOS

APOSTILA por Luclia Ribeiro

Qualquer tempo tempo. A hora mesma da morte hora de nascer. Nenhum tempo tempo bastante para a cincia de ver, rever. Tempo, contratempo anulam-se, mas o sonho resta, de viver. (Mario Quintana, Qualquer)
verso 1 jan/2009

ndice
NDICE ..................................................................................................................................................................... 2 VISO GERAL ........................................................................................................................................................... 4 1.1 DADOS E INFORMAES ........................................................................................................................... 4 1.2 CONVERSO DE DADOS EM INFORMAES ............................................................................................. 4 1.3 INFORMTICA ........................................................................................................................................... 4 1.4 TIPOS DE DADOS ........................................................................................................................................ 4 1.5 O QUE UM COMPUTADOR? .................................................................................................................... 5 1.5.1 UNIDADE CENTRAL DE PROCESSAMENTO ............................................................................................ 7 1.5.2 MEMRIA.............................................................................................................................................. 7 1.5.3 DISPOSITIVOS DE ENTRADA .................................................................................................................. 7 1.5.4 DISPOSITIVOS DE SADA ........................................................................................................................ 8 1.6 CICLO DE PROCESSAMENTO ...................................................................................................................... 8 1.6.1 ENTRADA / SADA DE DADOS ................................................................................................................ 8 1.6.2 PROGRAMA ........................................................................................................................................... 8 1.6.3 PROCESSAMENTO ................................................................................................................................. 8 1.7 REPRESENTAO DA INFORMAO.......................................................................................................... 8 1.8 BYTES ......................................................................................................................................................... 9 NOES DE LGICA .............................................................................................................................................. 10 2.1 LGICA .................................................................................................................................................... 10 2.2 LGICA DE PROGRAMAO .................................................................................................................... 10 2.3 ALGORITMO ............................................................................................................................................ 10 2.4 PROGRAMAO ...................................................................................................................................... 11 2.5 IMPORTNCIA DE UM ALGORITMO ........................................................................................................ 11 2.5.1 LINGUAGEM NATURAL .................................................................................................................. 11 2.5.2 LINGUAGEM ESTRUTURADA .......................................................................................................... 11 2.6 EXEMPLOS ............................................................................................................................................... 12 ITENS FUNDAMENTAIS ......................................................................................................................................... 15 3.1 INTRODUO .......................................................................................................................................... 15 3.2 TIPOS DE DADOS ...................................................................................................................................... 15 3.2.1 INTEIRO .......................................................................................................................................... 15 3.2.2 REAL ............................................................................................................................................... 15 3.2.3 CARACTER ...................................................................................................................................... 15 3.2.4 LGICO........................................................................................................................................... 15 3.3 FORMAO DE IDENTIFICADORES .......................................................................................................... 16 3.4 CONSTANTES ........................................................................................................................................... 16 3.5 VARIVEIS ............................................................................................................................................... 16 3.6 COMENTRIOS ........................................................................................................................................ 17 EXPRESSES E OPERADORES ................................................................................................................................ 18 4.1 4.2 4.3 INTRODUO .......................................................................................................................................... 18 EXPRESSES ARITMTICAS ...................................................................................................................... 18 EXPRESSES LGICAS.............................................................................................................................. 19

ESTRUTURA SEQUENCIAL ..................................................................................................................................... 21 5.1 COMANDO DE ATRIBUIO .................................................................................................................... 21 5.2 COMANDOS DE ENTRADA E SAIDA .......................................................................................................... 21 5.2.1 COMANDO DE ENTRADA ............................................................................................................... 21 5.2.2 COMANDO DE SADA ..................................................................................................................... 21 5.3 ESTRUTURA SEQUENCIAL ........................................................................................................................ 22 5.4 CONVENES E FORMATAO DE SADA ............................................................................................... 22 5.5 TESTE DE MESA ........................................................................................................................................ 23 5.6 ENDENTAO .......................................................................................................................................... 23
Lgica de Programao e Algoritmos Luclia Ribeiro
2

ESTRUTURAS CONDICIONAIS ............................................................................................................................... 24 6.1 ESTRUTURA CONDICIONAL SIMPLES ....................................................................................................... 24 6.2 ESTRUTURA CONDICIONAL COMPOSTA .................................................................................................. 24 6.3 ESTRUTURA CONDICIONAL ENCADEADA ................................................................................................ 26 6.3.1 SELEO ENCADEADA HETEROGNEA .......................................................................................... 26 6.3.2 SELEO ENCADEADA HOMOGNEA ............................................................................................ 26 SELEO DE MLTIPLA ESCOLHA ......................................................................................................................... 28 7.1 SELEO DE MLTIPLA ESCOLHA ............................................................................................................ 28

ESTRUTURAS DE REPETIO ................................................................................................................................ 31 8.1 8.2 8.3 8.4 ESTRUTURAS DE REPETIO ................................................................................................................... 31 ESTRUTURA DE REPETIO COM VARIVEL DE CONTROLE .................................................................... 31 ESTRUTURA DE REPETIO COM TESTE NO INCIO ................................................................................. 31 ESTRUTURA DE REPETIO COM TESTE NO FINAL .................................................................................. 32

VETORES E MATRIZES ........................................................................................................................................... 35 9.1 ESTRUTURA DE DADOS ............................................................................................................................ 35 9.2 VARIVEIS COMPOSTAS HOMOGNEAS ................................................................................................. 35 9.3 VETORES - VARIVEIS COMPOSTAS UNIDIMENSIONAIS ...................................................................................... 35 9.3.1 MANIPULAO DE VETORES ......................................................................................................... 35 9.4 MATRIZES - VARIVEIS COMPOSTAS MULTIDIMENSIONAIS ................................................................................ 37 9.4.1 DECLARAO DE MATRIZES........................................................................................................... 37 9.4.2 MANIPULAO DE MATRIZES ........................................................................................................ 38 9.4.3 PERCORRENDO UMA MATRIZ BIDIMENSIONAL ............................................................................ 38 MODULARIZAO ................................................................................................................................................. 40 10.1 DECOMPOSIO ................................................................................................................................. 40 10.2 MDULOS........................................................................................................................................... 40 10.3 PROCEDIMENTO ................................................................................................................................. 43 10.3.1 PASSAGEM DE PARMETROS POR VALOR ........................................................................................ 44 10.3.2 PASSAGEM DE PARMETROS POR REFERNCIA ............................................................................... 45 10.4 FUNO .............................................................................................................................................. 46 ANEXO - SILOGISMOS ........................................................................................................................................... 49 CRDITOS .............................................................................................................................................................. 50

Obrigada, Eurpedes...

Lgica de Programao e Algoritmos Luclia Ribeiro

01 Viso Geral

1
1.1

Viso Geral
O que uma parede falou pra outra? Vamos nos encontrar ali no cantinho?

DADOS E INFORMAES

Dados so conjuntos de fatos distintos e objetivos, relativos a eventos. Os dados, por si s, tem pouca relevncia ou propsito. Por exemplo, se for dito que a temperatura ambiente de 32C, provavelmente todos compreendero, mas se for dito que a temperatura de 82F, a compreenso depender do conhecimento do ouvinte sobre essa unidade de medida. O dado 32C rapidamente convertido em sensao trmica, portanto ele tem algum significado ou importncia. Nesse caso, pode-se dizer que ele uma informao. Informaes so dados com algum significado ou relevncia. Se o ouvinte no tem nenhum conhecimento sobre a unidade de medida F, ela no fornece a exata sensao de frio ou calor. A informao a compreenso dos dados, a matria-prima para o processamento mental. Sem dados e um mecanismo (processo) de compreenso desses dados existe o processamento mental e, se no houver esse processamento mental, os dados no se transformam em informaes, continuam sendo apenas dados.
DADO x INFORMAO DADO INFORMAO Data de Nascimento: 16/07/61 Idade: 41 anos Soma de Preo Unitrio x Quantidade Valor Total da Fatura: R$ 2500,00 Medio x Mtrica de Temperatura = 38 C Quente Medio x Mtrica de Distncia = 100 Km Longe

1.2

CONVERSO DE DADOS EM INFORMAES

Os sistemas de computao trabalham somente com dados. Eles permitem a coleta, processamento, armazenamento e distribuio de enormes quantidades de dados. A converso de dados em informaes uma tarefa do ser humano, mas os sistemas de computao podem auxiliar alguns processos que ajudam nessa converso:
Contextualizao Categorizao Clculo Condensao Relacionar os dados coletados com outros existentes Separar os dados em categorias Analisar matemtica ou estatisticamente os dados Resumir os dados para uma forma concisa

1.3

INFORMTICA

Informtica o estudo de tudo o que se relaciona tecnologia da informao. uma unio de trechos de duas outras palavras e foi criada pelos franceses. INFORMTICA = INFORmao + AutoMTICA Outra definio possvel para informtica : O estudo do tratamento da informao, utilizando-se, como ferramenta bsica, recursos dos sistemas de computao. Este conceito amplia bastante a idia inicial. Primeiro, porque a informtica tratada como um estudo, por isso, dotada de conceitos prprios e distintos. Como estudo, seu objetivo o tratamento da informao, usando como ferramenta os recursos de sistemas de computao, ou seja, o computador e outros recursos ligados a ele. 1.4 TIPOS DE DADOS Os sistemas de computao, atualmente, manipulam vrios tipos diferentes de dados:

Lgica de Programao e Algoritmos Lucilia Ribeiro

01 Viso Geral Nmeros Textos Imagens Sons Podem ser organizados, alterados, calculados e armazenados. Podem ser escritos, corrigidos, alterados na forma e cor, armazenados e impressos. Podem ser estticas (em duas ou trs dimenses) ou em movimento (animaes e vdeos). Podem ser criadas, alteradas, armazenadas e reproduzidas. Podem ser gerados eletronicamente (sintetizados) ou gravados diretamente da realidade. Podem ser alterados, armazenados e reproduzidos.

1.5

O QUE UM COMPUTADOR?

Para facilitar a compreenso do funcionamento e dos componentes de um computador, apresentada, a seguir, uma analogia entre o funcionamento de um computador e o local de trabalho de um operador, formado basicamente pelos utenslios comuns de um escritrio (obviamente, sem um computador). Layout e funcionamento desse local de trabalho:

Regras para realizar as tarefas: 1) No arquivo de ao (1), esto armazenadas as instrues para realizao de cada tarefa. Essas instrues apresentam uma seqncia de passos a serem seguidos. 2) Quando o operador (2) receber as instrues, ele deve copiar cada uma delas no quadro-negro (3), que possui 16 reas para isso (A1 -A16). Cada instruo deve ser escrita em uma das reas livres do quadro-negro, sempre iniciando pela rea A1. 3) Aps copiar as instrues, o operador deve comear a realizar cada uma delas, respeitando a seqncia. Caso alguma indique ao operador para escrever em uma rea j ocupada do quadro, ele deve apagar o contedo anterior e escrever o novo contedo. 4) Os dados que sero usados para realizar as tarefas encontram-se escritos em fichas empilhadas ao lado do operador, no escaninho (4). As fichas devero ser usadas na seqncia em que se encontram e, ao ser usada, a ficha deve ser descartada. 5) O operador possui uma calculadora (5) para realizar todos os clculos matemticos necessrios para a realizao da sua tarefa (dependendo das instrues). 6) Para apresentar os resultados da tarefa realizada, o operador possui uma mquina de escrever (6), utilizada para escrever os resultados. Suponha-se que o operador receba a seguinte seqncia de instrues que estavam armazenadas no arquivo de ao: 1) Pegue uma ficha e copie o seu valor no quadro - rea A16 2) Pegue uma ficha e copie o seu valor no quadro - rea A15 3) Some o contedo de A15 com o de A16 e coloque o resultado em A16 4) Se no houver mais fichas, avance para a rea A6; caso contrrio, avance para a rea A5 5) Volte para a rea A2 6) Datilografe o contedo de A16 7) Pare O operador copiava as instrues, uma a uma, nas primeiras reas do quadro-negro. O quadro ficava com a seguinte aparncia:

Lgica de Programao e Algoritmos Lucilia Ribeiro

01 Viso Geral

A1 Pegue uma ficha e copie o seu valor no quadro, rea A16 A5 Volte para a rea A2

A2 Pegue uma ficha e copie o seu valor no quadro, rea A15 A6 Datilografe o contedo de A16

A3 Some o contedo de A15 com o de A16 e coloque o resultado em A16 A7 Pare

A4 Se no houver mais fichas, avance para a rea A6; caso contrrio, avance para a rea A5 A8

A9

A10

A11

A12

Terminada a cpia das instrues, o operador comea a realizar cada uma delas, na seqncia em que foram apresentadas. Como exemplo, supe-se que existam, no escaninho, quatro fichas com os seguintes valores: 7, 1, 4 e 2. Veja o que acontece no quadro e nas reas afetadas:

Incio A15 A16

Pegue uma ficha e copie o seu valor na rea A16 A15 A16 7 Se no houver mais fichas, avance para a rea A6; caso contrrio, avance para a rea A5 A15 A16 1 8 Some o contedo de A15 com o de A16 e coloque o resultado em A16 A15 8 4 A16 12

Pegue uma ficha e copie seu valor na rea A15 A15 A16 1 7 Volte para a rea A2

Some o contedo de A15 com o de A16 e coloque o resultado em A16 A15 1 A16 8

A15 1

A16 8

Pegue uma ficha e copie seu valor na rea A15

A15 4

A16

Se no houver mais fichas, avance para a rea A6; caso contrrio, avance para a rea A5 A15 A16 4 12 Some o contedo de A15 com o de A16 e coloque o resultado em A16 A15 A16 2 14 Pare

Volte para a rea A2

Pegue uma ficha e copie seu valor na rea A15 A15 12 2 A16 12

A15 4

A16

Se no houver mais fichas, avance para a rea A6; caso contrrio, avance para a rea A5 A15 A16 2 14

Datilografe o contedo de A16

A15 2

A16 14

A15 2

A16 14

A palavra computador vem da palavra latina computare, que significa calcular. Pode at parecer estranho, mas essa idia no est de toda errada, mesmo assim, muito pouco para se ter uma idia do que seja um computador, ento, eis mais uma definio: Computador uma mquina que recebe e trabalha os dados de maneira a obter um resultado. Para realizar isso, ele programvel, ou seja, responde a um grupo de comandos especficos (instrues) de uma maneira bem definida e pode executar uma lista pr-gravada desses comandos. Essa lista chamada de programa. A partir dessa definio, podem ser retiradas algumas concluses importantes: O computador uma mquina. Realiza um trabalho com os dados para obter resultados. O trabalho realizado pelo computador chama-se Processamento.

Lgica de Programao e Algoritmos Lucilia Ribeiro

01 Viso Geral

O computador programvel. Pode realizar somente tarefas bem definidas, e cada uma delas corresponde a uma nica instruo, que sempre realizada da mesma maneira. Alm disso, ele pode responder a uma lista de instrues pr-gravadas, realizando uma instruo aps a outra. Essa lista de instrues pr-gravadas chamada de Programa. Existem computadores que apresentam programas fixos e invariveis o computador realiza sempre as mesmas tarefas - que j acompanham o computador. Tambm existem computadores cujos programas instalados so diferentes, portanto realizam tarefas diferentes de acordo com os programas. Outra definio para computador: " um sistema integrado, composto de hardware e de software." Concluindo: O computador um sistema formado por determinados componentes que, atuando em conjunto, permitem que ele realize as tarefas que foram determinadas. Esse sistema composto, basicamente, de dois elementos, Hardware e Software. Hardware a parte fsica do computador, ou seja, o prprio computador e todos os dispositivos ligados a ele (perifricos). O hardware composto por "dispositivos eletrnicos que fornecem capacidade de computao, dispositivos de interconectividade (por exemplo, switches de rede, dispositivos de telecomunicao) que permitem o fluxo dos dados e dispositivos eletromecnicos (por exemplo, sensores, motores, bombas) que fornecem funes do mundo exterior". Normalmente, o hardware de um sistema de computao apresenta a seguinte estrutura geral:

1.5.1 UNIDADE CENTRAL DE PROCESSAMENTO A Unidade Central de Processamento UCP (CPU .Central Processing Unit), o crebro do computador, o componente de hardware que realmente executa as instrues apresentadas pelo programa. A Unidade Central de Processamento possui dois componentes principais: - Unidade de Controle (UC): responsvel pelo controle do fluxo dos dados entre as partes do computador e por sua interpretao (se so dados ou instrues). Na simulao de computador, o operador. - Unidade Lgica e Aritmtica (ULA): responsvel pelos clculos e pela manipulao dos dados. Na simulao de computador, a calculadora. 1.5.2 MEMRIA Possibilita ao computador armazenar dados e instrues durante o processamento. Podem existir dois tipos de memria em um computador: - Memria de "Acesso Direto" ou Memria Principal, tambm conhecida por RAM (Memria de Acesso Randmico): o armazenamento dos dados e programas temporrio. Na simulao de computador, o quadro-negro. - Dispositivos de Armazenamento Secundrios: dispositivos que permitem ao computador armazenar permanentemente grandes quantidades de dados ou programas. Na simulao de computador, o arquivo de ao. 1.5.3 DISPOSITIVOS DE ENTRADA
Lgica de Programao e Algoritmos Lucilia Ribeiro
7

01 Viso Geral

Dispositivos atravs dos quais os dados e instrues entram no sistema de computao para o processamento. Traduz essas entradas para um cdigo que a Unidade Central de Processamento entende. Na simulao de computador, o escaninho com as fichas. 1.5.4 DISPOSITIVOS DE SADA Dispositivos que permitem a visualizao dos resultados do processamento dos dados. Na simulao de computador, a mquina de escrever. -Software o conjunto de instrues (programas de computador) que, quando executadas, produzem o desempenho desejado e dados que permitem que os programas manipulem adequadamente a informao. a parte lgica do computador, aquela com a qual no existe contato fsico. Na simulao de computador, so as instrues realizadas pelo operador e o contedo das fichas utilizadas por ele. Observando a simulao de computador, apresentada anteriormente, percebe-se que as operaes de um computador dependem da lgica das instrues que ele realiza. Essas instrues so criadas pelo homem e alimentadas no computador, que apenas as executa, de acordo com os seus componentes internos. 1.6 CICLO DE PROCESSAMENTO

O computador, de maneira simplificada, realiza uma determinada seqncia ("ciclo") para processar os dados. chamado de Ciclo de Processamento, e representado graficamente da seguinte maneira:
ENTRADA PROCESSAMENTO SADA

PROGRAMA

1.6.1 ENTRADA / SADA DE DADOS O computador l os dados a serem processados (a partir de perifricos de entrada) e os coloca na memria principal. Aps o processamento, o computador envia uma cpia dos resultados, a partir da memria principal, para os perifricos de sada. Essa sada pode ser composta por dados de entrada modificados ou por novos dados gerados pelo processamento. 1.6.2 PROGRAMA Lista de instrues que o computador deve seguir, ou seja, a seqncia das operaes necessrias para que os dados sejam processados. Normalmente esse programa est gravado num dispositivo de armazenamento secundrio e copiado para a memria principal do computador durante o processamento. 1.6.3 PROCESSAMENTO o trabalho realizado pela CPU do computador. O que ela faz depende do programa, mas quem processa os dados o hardware do computador. Para que o processamento acontea, os dados devem estar na memria principal. 1.7 REPRESENTAO DA INFORMAO

A informao e os dados necessitam de meios para que sejam exibidos. Normalmente so utilizados modelos que imitam a realidade. O sistema de computao funciona, basicamente, da mesma maneira, pois imita a informao real criando um modelo eletrnico para trabalhar. Esse modelo numrico e aritmtico. Alguns pontos em comum entre os equipamentos de computao e a matemtica permitem essa imitao da realidade. Esses pontos em comum so a Numerao e a Aritmtica Binria. Os sistemas de computao trabalham com o sistema de numerao binrio. Cada smbolo 0 ou 1 da numerao binria chamado de dgito binrio. Em ingls, Binary Digit, que resulta: Blnary digiT = BIT Como esse bit usado para modelar (representar a informao), pode-se definir que "Bit a menor unidade da informao". Os bits servem muito bem para a representao de nmeros, mas o sistema de computao no trabalha apenas com informaes numricas, ento, como representar letras e smbolos? Para entender como o sistema faz isso, imagine a existncia de duas lmpadas e a necessidade de criar uma maneira (um modelo) para indicar o estado do movimento de um carro em determinado momento.
8

Lgica de Programao e Algoritmos Lucilia Ribeiro

01 Viso Geral

As lmpadas apresentam dois "estados" possveis: acesa ou apagada. Com isso foi criada uma tabela que associa os estados das lmpadas aos estados do movimento do carro. Se em vez de lmpadas houvesse bits 0 (apagada) ou 1 (acesa), a tabela ficaria com os valores apresentados direita.

00 01 10 11

Carro andando em frente Carro virando direita Carro virando esquerda Carro parado

Com isso possvel criar tabelas de equivalncia entre as combinaes possveis dos bits e as informaes que devem ser representadas. Quando so usados dois bits, o nmero de combinaes possveis quatro, pois n na numerao binria existe a seguinte relao: Nmero de combinaes = 2 sendo n = nmero de bits. O sistema de computao utiliza uma tabela de equivalncia entre combinaes de bits e caracteres (nmeros, letras e smbolos). claro que, se o sistema utilizasse apenas dois bits, s conseguiria representar quatro caracteres, o que no o caso, pois ele pode utilizar qualquer quantidade de bits para representar os dados. Normalmente, utilizam-se grupos de oito bits. Usando a frmula anterior: nmero de combinaes = 2 = 256. Portanto, o sistema de computao utilizando oito bits consegue representar at 256 caracteres diferentes (256 combinaes diferentes). 1.8 BYTES
8

Cada um desses grupos de oito bits chamado de byte. Pode-se considerar cada byte representando um caractere, portanto o byte utilizado para medir o tamanho dos trabalhos realizados no sistema de computao, principalmente se for levado em considerao que sistemas antigos utilizavam somente textos em seus trabalhos. Por exemplo: um livro com 250 pginas tem, aproximadamente, 1.000.000 de caracteres (contandose espaos, que tambm so caracteres). Caso fosse usado um computador para editar esse mesmo texto, ele continuaria tendo o mesmo nmero de caracteres que o livro real, mas esses caracteres seriam modelados em bytes. Esse texto seria representado, ento, por 1.000.000 de bytes, ou melhor, o tamanho desse texto para o computador seria de 1.000.000 de bytes. Como em outras unidades de medida, no caso de bytes, so usados mltiplos para representar grandes quantidades (por exemplo, 1000 m = 1 km). Estes smbolos serviro para fazer um arredondamento de valores, o que facilitar a operao:
Quantidade de Bytes 210 = 1024 bytes 220 = 1.048.576 bytes 230 = 1.073.741.824 bytes 240 = 1.099.511.627.776 bytes Valor 1024 bytes 1024 Kb 1024 Mb 1024 Gb Nome 1 Kb Kilobyte 1 Mb Megabyte 1 Gb Gigabyte 1 Tb - Terabyte

Por que o pato tem inveja da centopia? Porque ela tem cem patas!
Lgica de Programao e Algoritmos Lucilia Ribeiro
9

02 Noes de Lgica

2
2.1 LGICA

Noes de Lgica
Por que o menino levou uma escada para o restaurante? Porque era dia de peixe na telha...

Coerncia e racionalidade. "Arte do bem pensar", "cincia das formas do pensamento". Visto que nossa razo pode funcionar desordenadamente, a lgica tem em vista a "correo do raciocnio", colocando ordem no pensamento. Exemplos: Todo mamfero um animal Todo cavalo um mamfero Portanto, todo cavalo um animal Kaiton pas do planeta Stix Todos os Xinpins so de Kaiton Logo, todos os Xinpins so Stixianos A lgica objetiva a criao de uma representao mais FORMAL. Utilizamos sempre a lgica para pensar, falar, escrever ou agir corretamente. Precisamos, para todas essas atividades, colocar ordem no pensamento. A gaveta est fechada A caneta est dentro da gaveta Precisamos primeiro abrir a gaveta para depois pegar a caneta Anacleto mais velho que Felisberto Felisberto mais velho que Marivaldo Portanto, Anacleto mais velho que Marivaldo (Veja anexo A) 2.2 LGICA DE PROGRAMAO

Significa o uso correto das leis do pensamento, da "ordem da razo" e de processos de raciocnio e simbolizao formais na programao de computadores, objetivando racionalidade no desenvolvimento de tcnicas que produzam solues logicamente vlidas e coerentes que resolvam os problemas que se deseja programar. Um mesmo raciocnio pode ser expresso em qualquer um dos inmeros idiomas existentes, mas continuar representando o mesmo raciocnio, usando apenas outra conveno. Acontece exatamente a mesma coisa na Lgica de Programao. Pode ser representada em qualquer uma das inmeras linguagens de programao existentes. S que, no raciocnio geral, uma grande diversidade de detalhes computacionais no tem nada a ver com o mesmo. Portanto, para escapar dessa "Torre de Babel" e, ao mesmo tempo, representar mais fielmente o raciocnio da Lgica de Programao, utilizamos os Algoritmos. O objetivo principal da Lgica de Programao a construo de algoritmos coerentes e vlidos. 2.3 ALGORITMO

Algoritmo um conjunto de procedimentos a ser seguido para que um determinado problema seja resolvido. Para trazermos os algoritmos para a memria do computador necessrio que o mesmo seja programado, ou seja, convertido em uma linguagem que possa ser entendida pela mquina.
Lgica de Programao e Algoritmos Lucilia Ribeiro
10

02 Noes de Lgica

uma seqncia de passos que visam atingir um objetivo bem definido. Cada passo deve ser simples e sem ambigidade. Apesar do nome pouco usual, algoritmos so comuns em nosso cotidiano, como, por exemplo, uma receita de bolo. Na receita existe uma srie de ingredientes necessrios e uma seqncia de diversos passos (aes) que devem ser fielmente executados para que se consiga o alimento desejado, conforme se esperava antes do incio da atividade (objetivo bem definido). Portanto, ao elaborar um algoritmo devemos: Especificar aes claras e precisas -> Partindo de um estado inicial -> Aps um perodo de tempo finito -> Produzem um estado final previsvel e bem definido. O final previsvel no deve conter ambigidade. Por exemplo: O pregador foi grampeado durante o conserto. Essa frase, se fosse apenas ouvida, daria oito compreenses diferentes. Um algoritmo deve garantir que sempre que seja executado, sob as mesmas condies, produza o mesmo resultado. Obs.: Observe a seqncia: 1, 6, 11, 16, 21, 26,... Qual o stimo elemento? Qual o padro de comportamento? 2.4 PROGRAMAO

Programar consiste em elaborar um conjunto finito de instrues reconhecidas pela mquina, de forma que o computador as execute. a implementao de um algoritmo em determinada linguagem de programao.

Problema

Fase da resoluo do problema

Soluo em forma de algoritmo Soluo como programa Fase da implementao

2.5

IMPORTNCIA DE UM ALGORITMO

Representar mais fielmente o raciocnio envolvido na Lgica de Programao bem como codificar para qualquer linguagem de programao. Existem vrias formas de representar um algoritmo: Linguagem Natural, Fluxograma e Linguagem Estruturada (Algoritmo - Portugol) que a mais utilizada. Para exemplificar utilizaremos o seguinte programa: Dividir dois nmeros. 2.5.1 LINGUAGEM NATURAL Escolher o numerador Escolher o denominador Se o denominador for igual a zero, ento Escreva que no existe diviso por zero Seno, divida o numerador pelo denominador 2.5.2 LINGUAGEM ESTRUTURADA

algoritmo PRIMEIRO_EXEMPLO var numerador, denominador, resultado : numrico escreva(Digite o numerador: ) leia (numerador)
Lgica de Programao e Algoritmos Lucilia Ribeiro
11

02 Noes de Lgica

escreva(Digite o denominador: ) leia (denominador) se (denominador = 0) ento escreva ("Diviso por Zero") seno resultado numerador / denominador fimse fimalgoritmo 2.6 EXEMPLOS

Muitas vezes realizamos tarefas aparentemente bvias demais como, por exemplo, trocar uma lmpada, sem percebermos seus pequenos detalhes. Vejamos esse primeiro algoritmo: 1. 2. 3. 4. 5. 6. pegar uma escada; posicionar a escada embaixo da lmpada; buscar uma lmpada nova; subir na escada; retirar a lmpada velha; colocar a lmpada nova;

Neste primeiro algoritmo, seguimos uma determinada seqncia de aes que fazem com que ele seja seguido naturalmente por qualquer pessoa, estabelecendo um padro de comportamento, pois qualquer pessoa agiria da mesma maneira. MAS, e se a lmpada no estivesse queimada? A execuo das aes conduziria a uma troca, independentemente de a lmpada estar ou no queimada, pois essa possibilidade no foi prevista. Uma soluo seria: 1. 2. 3. 4. 5. pegar uma escada; posicionar a escada embaixo da lmpada; buscar uma lmpada nova; acionar o interruptor; se a lmpada no acender, ento 5.1. subir na escada; 5.2. retirar a lmpada velha; 5.3. colocar a lmpada nova;

Este algoritmo funciona, mas pode ser melhorado visto que buscamos uma lmpada e a escada sem saber se sero necessrias. Mudemos o teste condicional para o incio da seqncia de aes: 1. 2. acionar o interruptor; se a lmpada no acender, ento 2.1. pegar uma escada; 2.2. posicionar a escada embaixo da lmpada; 2.3. buscar uma lmpada nova; 2.4. subir na escada; 2.5. retirar a lmpada velha; 2.6. colocar a lmpada nova;

H muitas formas de resolver um problema, afinal cada pessoa pensa e age de maneira diferente. Isto significa que, para este mesmo problema de trocar lmpadas, poderamos ter diversas solues diferentes e corretas (se atingissem o resultado desejado de efetuar a troca), portanto, o bom senso e a prtica de lgica de programao que indicaro a soluo mais adequada, que com menos esforo e menor objetividade produz o resultado almejado. O algoritmo acima no prev ainda o fato de a lmpada nova no funcionar e, portanto, no atingir o objetivo nesta situao especfica. Melhorando o algoritmo: 1. 2. acionar o interruptor; se a lmpada no acender, ento 2.1. pegar uma escada; 2.2. posicionar a escada embaixo da lmpada;
12

Lgica de Programao e Algoritmos Lucilia Ribeiro

02 Noes de Lgica

2.3. 2.4. 2.5. 2.6. 2.7.

buscar uma lmpada nova; subir na escada; retirar a lmpada velha; colocar a lmpada nova; se a lmpada nova no acender, ento 2.7.1. buscar uma lmpada nova; 2.7.2. subir na escada; 2.7.3. retirar a lmpada queimada; 2.7.4. colocar outra lmpada nova; 2.7.5. se a lmpada nova no acender, ento 2.7.5.1. buscar uma lmpada nova; 2.7.5.2. subir na escada; 2.7.5.3. retirar a lmpada queimada; 2.7.5.4. colocar outra lmpada nova; (repito os quatro ltimos passos at quando?)

Percebemos que as aes cessaro quando conseguirmos colocar uma lmpada que acenda; caso contrrio, ficaremos testando indefinidamente (note que o interruptor continua acionado!). Temos que expressar a repetio da ao sem repetir o texto que representa a ao, assim como determinar um limite para tal repetio, para garantir uma condio de parada. Observemos que o nmero de repeties indefinido, mas finito. 1. 2. acionar o interruptor; se a lmpada no acender, ento 2.1. pegar uma escada; 2.2. posicionar a escada embaixo da lmpada; 2.3. buscar uma lmpada nova; 2.4. subir na escada; 2.5. retirar a lmpada velha; 2.6. colocar a lmpada nova; 2.7. enquanto a lmpada nova no acender, faa 2.7.1. buscar uma lmpada nova; 2.7.2. subir na escada; 2.7.3. retirar a lmpada queimada; 2.7.4. colocar outra lmpada nova;

At agora estamos efetuando a troca de uma nica lmpada. Na verdade, estamos testando um soquete (acionado por um interruptor), trocando tantas lmpadas quantas forem necessrias para assegurar que o conjunto funcione. O que faramos se tivssemos mais soquetes a testar, por exemplo, 10 soquetes? A soluo aparentemente mais bvia seria repetir o algoritmo de uma nica lmpada para os 10 soquetes existentes. Entretanto, isso no uma maneira eficiente de se resolver esse problema. O conjunto de aes desenvolvidas exatamente igual para os 10 soquetes. Ento, podemos fazer com que o algoritmo volte a executar o conjunto de aes relativas a um nico soquete tantas vezes quantas forem desejadas (no nosso caso, 10 vezes). O algoritmo ficaria assim: 1. 2. ir at o interruptor do primeiro soquete; enquanto a quantidade de soquetes testados for menor do que dez, faa 2.1. acionar o interruptor; 2.2. se a lmpada no acender, ento 2.2.1. pegar uma escada; 2.2.2. posicionar a escada embaixo da lmpada; 2.2.3. buscar uma lmpada nova; 2.2.4. subir na escada; 2.2.5. retirar a lmpada velha; 2.2.6. colocar a lmpada nova; 2.3. enquanto a lmpada nova no acender, faa 2.3.1. buscar uma lmpada nova; 2.3.2. subir na escada; 2.3.3. retirar a lmpada queimada; 2.3.4. colocar outra lmpada nova; 2.4. ir at o interruptor do prximo soquete;
13

Lgica de Programao e Algoritmos Lucilia Ribeiro

02 Noes de Lgica

Quando a condio quantidade de soquetes testados for menor do que dez for verdadeira, as aes responsveis pela troca ou no de um nico soquete sero executadas. Caso a condio de parada seja falsa, ou seja, todos os dez soquetes j tiverem sido testados, nada mais ser executado.

O que um morango? Uma cereja arrepiada. O que o grilo disse para a namorada? Voc me deixa grilado. Por que o namorado da barata engraado? Porque ele um barato. O que o micrbio filho disse pra micrbio me? Me crobe...

Lgica de Programao e Algoritmos Lucilia Ribeiro

14

03 Itens Fundamentais

3
3.1

Itens Fundamentais
Como se faz para transformar um giz numa cobra? s colocar na gua que o giz bia

INTRODUO

Todo o trabalho realizado por um computador baseado na manipulao de dados contidos em sua memria. A memria do computador pode ser comparada a um conjunto de caixas numeradas. Em cada caixa podemos guardar uma informao. O nmero da caixa serve para localiz-la e possui o nome de endereo.
1 5 2 6 3 Joo 7 4 25 8 Guarde o valor Joo na posio de memria 3 Guarde o valor 25 na posio de memria 4

Para armazenar uma informao na memria, no precisamos referenciar o endereo da posio. Isso pode ser feito pela associao de um nome a cada posio. A associao feita por um mecanismo interno das linguagens de programao que associa nomes que criamos s posies de memria. Este mecanismo utiliza uma tabela de smbolos.
NOME Idade Cpf Tabela de Smbolos POSIO DA MEMRIA 1 2

3.2

TIPOS DE DADOS

Inicialmente vamos diferenciar dado de informao. Se falarmos: A escada possui 8 degraus. O valor 8 um dado, e informao a associao de 8 com o nmero de degraus da escada. Iremos trabalhar com quatro tipos primitivos. Usaremos estes tipos bsicos na construo de algoritmos: 3.2.1 INTEIRO

Podem ser positivos, negativos ou nulos e no possuem parte decimal. Eu tenho 2 filhos. A escada possui 9 degraus. Meu vizinho ganhou 1 carro novo. 3.2.2 REAL

Podem ser positivos, negativos ou nulos e possuem parte decimal. Ele tem 1,65 m de altura. Meu saldo no banco de R$ 500,30. No momento Geraldo est pesando 73,5 kg. 3.2.3 CARACTER

Podem ser as letras maisculas (A...Z), as letras minsculas (a...z), os nmeros (0...9) e os caracteres especiais (ex.: &, #, @, ?, +). So sempre representados entre aspas no algoritmo. Constava na prova: Use somente caneta preta!. O parque municipal estava cheio de placas: No pise na grama!. O nome do vendedor Felisberto Laranjeira. 3.2.4 LGICO

Possuem apenas duas possibilidades de representao, ou seja, podem assumir apenas duas situaes (Verdadeiro ou Falso, V ou F). A porta pode est aberta? Verdadeiro ou Falso. A lmpada est acesa? V ou F.
Lgica de Programao e Algoritmos Lucilia Ribeiro
15

03 Itens Fundamentais

3.3

FORMAO DE IDENTIFICADORES

Os identificadores so os nomes das variveis, das constantes, das rotinas etc. Existem regras bsicas para a formao de identificadores: 1. 2. 3. 4. 5. Os caracteres que voc pode utilizar na formao dos identificadores so: nmeros, letras maisculas e minsculas e o caracter sublinhado ( _ ); Devem comear por um caracter alfabtico ou pelo caracter sublinhado; Podem ser seguidos por mais caracteres alfabticos ou numricos; No so permitidos espaos em branco e caracteres especiais (@, $, #,+,!,%...); No permitido usar palavras reservadas nos identificadores, ou seja, palavras que pertenam linguagem de programao.

Alguns exemplos vlidos: Lambda, Y, CK32, K9, Nota, CBC, SALARIO, CONTADOR. Alguns exemplos invlidos: 5Y, F(15), B:C, Nota1/2; WXZ*, B&CC,@143, a-b, Q:c. importante observar que no desenvolvimento de algoritmos, o nome de identificador deve ser o mais significativo possvel, pois desta maneira, o entendimento do mesmo se torna mais fcil. Vamos normatizar os nomes dos nossos identificadores para que inclusive facilite em estudos futuros. A partir de agora, iremos adotar o padro Camel Casing que consiste em colocar em minscula a primeira letra, num formato idntico ao seguinte: listaUtilizadores, idadePai, capacidadeMemoria, etc. 3.4 CONSTANTES

Um dado constante o que no sofre nenhuma variao no decorrer do tempo. Seu valor constante do incio ao fim da execuo do algoritmo, assim como constante para execues diferentes no tempo. As definies das constantes so feitas antes da utilizao das mesmas. No formato apresentado logo a seguir, identificador o nome da constante que est sendo criada. Formato: identificador valor

Exemplos: frase O Andr lindo! nome Bruna taxa 1.24 resposta VERDADEIRO Observao: importante observar que dados entre aspas caracterizam caracteres, mesmo que possuam valores numricos. Veja os exemplos a seguir: sorte 13 tmp E%R#Y* lixo Abc34F19 numChar 9.16 3.5 VARIVEIS

Um dado classificado como varivel quando pode ter seu valor alterado em algum instante durante a execuo do algoritmo. Exemplos: cotao do dlar, peso de uma pessoa, ndice da inflao. Embora uma varivel possa assumir diferentes valores, ela s pode armazenar um valor a cada instante. Toda varivel identificada por um nome ou identificador. Exemplo para ilustrar a diferena entre valores constantes e variveis: Construo de um algoritmo para 2 calcular o valor da rea de uma circunferncia. A frmula que expressa a rea da circunferncia R , onde tem valor constante de 3,1416... independente de qual seja a circunferncia (vale para todas as ocasies em que calculamos a rea). J o valor de R (raio) dependente da circunferncia que estamos calculando. Portanto, varivel a cada execuo do algoritmo. Formato: var lista_de_identificadores : Tipo de Dado Exemplos: var num, valorInicial : inteiro x, y, salarioMinimo : real nomePai, endereo : caracter resposta : logico
Lgica de Programao e Algoritmos Lucilia Ribeiro
16

03 Itens Fundamentais

Observaes: Como visto anteriormente, os tipos primitivos que iremos trabalhar so: inteiro, real, caracter e lgico. No exemplo anterior, a varivel RESPOSTA o nome de um local de memria que s pode conter valores do tipo lgico, ou seja, verdadeiro (V) ou falso (F), assim como o identificador NUM o nome de um local de memria que s pode conter valores do tipo inteiro e assim por diante. No permitido que mais de uma varivel possua o mesmo identificador, visto que se isso acontecer no ser possvel saber que varivel usar. S podemos guardar dados em variveis do mesmo material, ou seja, uma varivel do tipo primitivo inteiro s poder armazenar nmeros inteiros; uma varivel do tipo primitivo lgico, somente verdade (V) ou falsidade (F) e assim por diante. 3.6 COMENTRIOS

Todo algoritmo deve conter comentrios, a fim de que as pessoas possam entend-lo mais facilmente. Os comentrios so representados por um texto, ou simplesmente uma frase, que aparece sempre aps o smbolo //. Os comentrios podem ser colocados em qualquer ponto do algoritmo onde se faam necessrios. Formato: // Comentrio ... Exemplos: salrio : real numPecas : inteiro //salrio do funcionrio //nmero de peas a ser fabricada

O que preto e vermelho, preto e vermelho, preto e vermelho...? "Uma zebra que tomou muito sol." O que acontece se a Fanta quebra? A Coca cola... Por que os dois cachorros estavam se olhando? Porque estavam se coparando Como os sapos modernos se comunicam? _ Web, web.. Qual a casa da ovelha? A lan house O que foi que um ratinho disse quando viu um morcego pela primeira vez? "_ Mame, olha! Um anjo!" Por que o elefante pega leve com o passarinho? Porque ele tem pena.

Lgica de Programao e Algoritmos Lucilia Ribeiro

17

04 Expresses e Operadores

4
4.1

Expresses e Operadores
Por que a galinha senta para botar ovos? "Porque se botasse em p, os ovos quebrariam."

INTRODUO

Assim como na matemtica, realizamos diversas operaes dependendo do tipo de dado utilizado nos algoritmos. 4.2 EXPRESSES ARITMTICAS

As expresses aritmticas so escritas linearmente usando a notao matemtica, tendo como resposta sempre um valor numrico. Seus operandos so constantes ou variveis do tipo numrico (inteiro ou real) e seus operadores so operadores aritmticos, ou seja, smbolos que representam as operaes bsicas da matemtica. O conjunto de operaes bsicas adotadas nos algoritmos so: Adio, Subtrao, Multiplicao e Diviso.
Operador + * / Funo Adio Subtrao Multiplicao Diviso Exemplos 5 + 1, A + B 5 2, X Z 4 * 2, Y * W 27/3, B1/B2

As operaes de radiciao e potenciao sero realizadas atravs do uso das palavras-chave rad e pot, conforme tabela abaixo.
Operador pot(X,Y) rad(X) Funo Potenciao Radiciao Significado X elevado a Y Raiz quadrada de X Exemplos pot(2,3) rad(9)

Algumas outras operaes matemticas no-convencionais, mas teis na construo de algoritmos so: o resto da diviso e o quociente da diviso inteira, mostrados na tabela a seguir.
Operador mod div Funo Resto da diviso Quociente da diviso Exemplos 9 mod 4 resulta em 1 9 div 4 resulta em 2

Prioridades: Na resoluo das expresses aritmticas, as operaes guardam uma hierarquia entre si. Operadores 1 2 3 4 Prioridade parnteses mais internos rad, pot /, *, div, mod +, -

Para operaes de mesma prioridade, devemos resolver a expresso na seqncia existente, ou seja, da esquerda para a direita. Para alterar a prioridade da tabela, utilizamos parnteses mais internos.

Exemplos: a)

5 + 9 + 7 + 8/4 5+9+7+2 23

Lgica de Programao e Algoritmos Lucilia Ribeiro

18

04 Expresses e Operadores

b)

1 4 * 3/6 pot(3,2) 1 4 * 3/6 9 1 12/6 9 129 10 pot(5,2) 4/2 + rad(1 + 3 * 5)/2 pot(5,2) 4/2 + rad(1 + 15)/2 pot(5,2) 4/2 + rad(16)/2 25 4/2 + 4/2 25 2 + 2 25

c)

4.3

EXPRESSES LGICAS

As expresses lgicas so expresses que trabalham com operadores relacionais ou lgicos, tendo como resposta um valor lgico (verdadeiro ou falso). Uma relao uma comparao entre valores do mesmo tipo primitivo. Esses valores podem ser representados por constantes, variveis ou expresses aritmticas. Os operadores relacionais utilizados esto listados na tabela a seguir. O resultado obtido de uma relao SEMPRE um valor lgico.
Operador = <> <= >= < > Descrio Igual a Diferente de Menor ou Igual a Maior ou Igual a Menor que Maior que

Exemplos: a) A+B=C (Essa relao retornar verdadeiro se o valor de A + B for igual ao de C, e retornar falso caso contrrio). b) 2 * 4 = 24 / 3 8=8 V 15 mod 4 < 19 mod 6 3<1 F

c)

Os operadores lgicos utilizados com expresses lgicas bem como as prioridades esto na seguinte tabela:
Operador E OU NO Descrio Conjuno Disjuno Negao Prioridade 2 3 1

Tabela-verdade o conjunto de todas as possibilidades combinatrias entre os valores de diversas variveis lgicas e um conjunto de operadores lgicos.

Lgica de Programao e Algoritmos Lucilia Ribeiro

19

04 Expresses e Operadores OPERAO DE NEGAO A V F NO A F V

OPERAO DE CONJUNO A V V F F B V F V F AEB V F F F

OPERAO DE DISJUNO A V V F F B V F V F A OU B V V V F

Exemplos: a) 2 < 5 E 15 / 3 = 5 2<5E5=5 VEV V 2 < 5 OU 15 / 3 = 5 2 < 5 OU 5 = 5 V OU V V c) F OU 20 div (18/3) <> (21/3) div 2 F OU 20 div 6 <> 7 div 2 F OU 3 <> 3 F OU F F NO V OU pot(3,2)/3 < 15 35 mod 7 NO V OU 9/3 < 15 0 NO V OU 3 < 15 NO V OU V F OU V V

b)

d)

_ Me, por que o papai careca? "Porque ele inteligente." _ E por que voc tem tanto cabelo?
Lgica de Programao e Algoritmos Lucilia Ribeiro
20

05 Estrutura Sequencial

5
5.1

Estrutura Sequencial
Por que o elefante no usa o computador? "Porque ele tem medo do mouse."

COMANDO DE ATRIBUIO

Um comando de atribuio usado para atribuir valores a variveis. O tipo do dado deve ser compatvel com o tipo da varivel, ou seja, s se pode atribuir um valor lgico a uma varivel capaz de comport-lo, isto , a uma varivel declarada como sendo do tipo lgico. Na linguagem algortmica, o comando de atribuio tem o formato apresentado a seguir, onde identificador o nome da varivel qual est sendo atribudo o valor, o smbolo de atribuio e expresso pode ser uma constante, varivel, valor ou expresso cujo tipo seja compatvel com o da varivel qual o valor est sendo atribudo. Formato: identificador Exemplos: var cor : caracter media, n1, n2 : real teste : logico: x, y, z : inteiro cor Verde media (N1+N2)/2 teste FALSO x y z 0 importante ressaltar que do lado esquerdo do smbolo de atribuio deve existir apenas um identificador. 5.2 COMANDOS DE ENTRADA E SAIDA expresso

Os comandos de entrada e sada tm como finalidade a interrupo do programa a fim de que o usurio possa entrar com dados (entrada), atravs de unidades de entrada (normalmente o teclado), ou o programa possa fornecer informaes a respeito dos dados (sada), atravs de unidades de sada (normalmente monitor ou impressora). 5.2.1 COMANDO DE ENTRADA

O comando denominado leia o comando de entrada de dados. Seu objetivo atribuir o dado a ser fornecido varivel identificada. O formato est listado a seguir. leia a palavra-chave do comando de entrada, lista de identificadores o nome das variveis, separados por vrgula, nas quais sero armazenados os valores provenientes do meio de entrada. Formato: leia (lista de identificadores) Exemplos: leia (COD); leia (NOTA1, NOTA2); leia (nome); leia (endereco); 5.2.2 COMANDO DE SADA

O comando denominado escreva o comando de sada de dados, que tem como objetivo mostrar o contedo de uma varivel, constante ou expresso. O formato apresentado a seguir, onde escreva a palavrachave do comando de sada; lista de identificadores e/ou expresses so os nomes das variveis, os nomes das constantes ou as expresses, que se deseja fornecer como resultados.
Lgica de Programao e Algoritmos Lucilia Ribeiro
21

05 Estrutura Sequencial

Formato: escreva (lista de identificadores e/ou expresses) Exemplos: escreva (x) escreva (Bom dia, nome) escreva (Voc pesa , p, quilos) 5.3 ESTRUTURA SEQUENCIAL

A estrutura seqencial de um algoritmo corresponde ao fato de que o conjunto de aes primitivas ser executado em uma seqncia linear de cima para baixo e da esquerda para a direita, ou seja, na mesma ordem em que foram escritas. As aes sero seguidas por ponto-e-vrgula (;). O ponto-e-vrgula objetiva separar uma ao da outra e auxiliar na organizao seqencial das aes, visto que, aps encontrar um (;) o prximo comando da seqncia deve ser executado. Exemplo 1: Algoritmo NOME // identificao do incio do algoritmo // comentrios sobre funes, autoria, datas // declarao de variveis var // corpo do algoritmo inicio ao 1 ao 2 ao 3 . . . ao n FimAlgoritmo // fim do algoritmo Exemplo 2: Escreva um algoritmo que calcule a mdia aritmtica entre quatro notas quaisquer fornecidas por um aluno. Algoritmo 01_Notas // funo: exemplo de estrutura // autor: Luclia Ribeiro // data: 10/01/09 var N1, N2, N3, N4,M : real //variveis que armazenaro as notas e a mdias das notas. inicio escreva(Digite a primeira nota: ) leia (N1) escreva(Digite a segunda nota: ) leia (N2) escreva(Digite a terceira nota: ) leia (N3) escreva(Digite a quarta nota: ) leia (N4) // processamento, ou seja, clculo da mdia aritmtica das notas M (N1 + N2 + N3 + N4) / 4 // sada de dados escreva(A mdia aritmtica das notas informadas : , M) FimAlgoritmo. 5.4 CONVENES E FORMATAO DE SADA Nos nossos algoritmos, para sinalizar algumas formataes de sada de dados, vamos utilizar o seguinte: Para limpar a tela: limpatela

Lgica de Programao e Algoritmos Lucilia Ribeiro

22

05 Estrutura Sequencial

Para especificar o nmero de espaos no qual se deseja escrever determinado nmero: Por exemplo, o comando escreva(x:5) escreve o valor da varivel x em 5 espaos, alinhado-o direita. Para variveis reais, pode-se tambm especificar o nmero de casas fracionrias que sero exibidas. Por exemplo, considerando y como uma varivel real, o comando escreva(y:6:2)escreve seu valor em 6 espaos colocando 2 casas decimais. Para pular uma linha: escreval(expresso) 5.5 TESTE DE MESA

A simulao ou teste de mesa tem por objetivo detectar, caso existam, erros de lgica na descrio do algoritmo. Partindo de dados escolhidos (com resposta conhecida) simulamos a execuo do algoritmo e comparamos a resposta obtida com a resposta esperada. Se no houver coincidncia est detectado um erro, embora a recproca no seja verdadeira. A escolha dos dados para os testes de muita importncia na simulao. As amostras de dados devem ser escolhidas de modo que provoquem a execuo de todas as instrues presentes no algoritmo, testando todas as possibilidades diferentes de sada. Na simulao so listadas todas as variveis utilizadas no algoritmo e registrados todos os valores assumidos pelas variveis, na ordem em que ocorrem. conveniente identificar com um nmero cada uma das instrues contidas no algoritmo. Dessa forma ser possvel localizar facilmente a varivel que foi definida ou alterada naquele momento. 5.6 ENDENTAO

O verbo endentar, e dele se derivam endentado e endentao antigo, tradicionalmente usado em tipografia para indicar a linha em que houve recuo. Dentro da computao, endentao um termo aplicado ao cdigo fonte de um programa para indicar que os elementos hierarquicamente dispostos tm o mesmo avano relativamente posio (x,0). Na maioria das linguagens a endentao tem um papel meramente esttico, tornando a leitura do cdigo fonte muito mais fcil (read-friendly), porm obrigatria em outras. Python, por exemplo, utilizam-se desse recurso tornando desnecessrio o uso de certos identificadores de blocos ("begin" e/ou "end"). A verdadeira valia deste processo visvel em arquivos de cdigo fonte extensos. Para qualquer programador, deve ser um critrio a ter em conta, principalmente, por aqueles que pretendam partilhar o seu cdigo com outros. A endentao facilita tambm a modificao, seja para correo ou aprimoramento, do cdigo fonte. Existem centenas de estilos de endentao, mas, basicamente, ela se consiste na adio tabulaes no incio de cada linha na quantidade equivalente ao nmero de blocos em que cada linha est contida. Nos algoritmos, sugiro que alm da endentao, utilizem tambm uma linha vertical unindo os blocos, conforme o exemplo 02 mostrado anteriormente.

O que o nmero 0 disse pra o nmero 8? "Nossa! Onde voc comprou seu cinto?" O que o nmero 3 disse pra o nmero 30? "Me passa a bola..."
Lgica de Programao e Algoritmos Lucilia Ribeiro
23

06 Estruturas Condicionais

6
6.1

Estruturas Condicionais
O que a mesa disse para o calendrio? "Seus dias esto contados!"

ESTRUTURA CONDICIONAL SIMPLES

Uma estrutura de seleo permite escolher um grupo de aes a ser executado quando determinadas condies so ou no satisfeitas. As condies podem ser representadas por expresses lgicas ou relacionais. Formato: se (condio) entao comando // ao primitiva fimse Onde (condio) uma expresso que, quando avaliada, vai gerar um resultado lgico (verdadeiro ou falso). Na seleo simples, se (condio) for verdadeira, a ao primitiva (COMANDO) sob a clusula ento executada. Caso contrrio, nenhum comando executado. Quando existirem diversas aes a serem executadas, necessrio usar um bloco, delimitado por inicio e fim, conforme mostrado a seguir. se (condio) entao comando1 // sequncia de comandos comando2 . . . comandoN fimse Se (condio) for verdadeira, os comandos comando1, comando2, ..., comandoN (bloco verdade) so executados. Caso contrrio ((condio) falsa), nenhum comando executado, encerrando-se a seleo (fimse). Exemplo 1: Escreva um algoritmo para calcular a mdia das duas notas de um aluno e caso a mesma seja igual ou superior a 7, seu algoritmo deve imprimir uma mensagem sobre a aprovao do aluno. Algoritmo 02_AlunoAprovado // funo: estrutura condicional // autor: Luclia Ribeiro // data: 10/01/09 var N1, N2,M : real //variveis que armazenaro as notas e a mdias das notas. inicio escreva(Digite a primeira nota: ) leia (N1) escreva(Digite a segunda nota: ) leia (N2) M (N1 + N2) / 2 escreval(A mdia do aluno : , M) se (M >= 7) entao escreva(Aluno aprovado) fimse fimAlgoritmo 6.2 ESTRUTURA CONDICIONAL COMPOSTA

Quando houver duas alternativas que dependem de uma mesma condio, uma da condio ser verdadeira e a outra da condio ser falsa, usamos a estrutura de seleo composta.
Lgica de Programao e Algoritmos Lucilia Ribeiro
24

06 Estruturas Condicionais

Formato: se (condio) ento a1 // seqncia de comandos a2 . . . aN seno b1 // seqncia de comandos b2 . . . bN fimse Exemplo 2: Escreva um algoritmo que verifique a igualdade de dois nmeros inteiros fornecidos pelo usurio. Algoritmo 03_NumerosIguais // funo: estrutura condicional composta // autor: Luclia Ribeiro // data: 10/01/09 var num1, num2 : inteiro inicio escreva(Digite um nmero: ) leia (num1) escreva(Digite outro nmero: ) leia (num2) se (num1 = num2) entao escreva(Os nmeros so iguais) senao escreva(Os nmeros so diferentes) fimse fimAlgoritmo Exemplo 3: Escreva um algoritmo que receba como entrada trs nmeros inteiros, realize sua soma e informe se essa soma maior ou igual a 100. Em caso contrrio, informe uma mensagem que a soma menor do que 100. Algoritmo 04_SomaMaiorCem // funo: estrutura condicional composta var num1, num2, num3, soma: inteiro inicio escreva(Digite um nmero: ) leia (num1) escreva(Digite outro nmero: ) leia (num2) escreva(Mais um nmero: ) leia (num3) soma num1 + num2 + num3 se (soma >= 100) entao escreva(A soma dos nmeros maior ou igual a 100) senao escreva(A soma dos nmeros menor do que 100) fimse fimAlgoritmo
Lgica de Programao e Algoritmos Lucilia Ribeiro
25

06 Estruturas Condicionais

6.3

ESTRUTURA CONDICIONAL ENCADEADA Quando agrupamos vrias selees, estamos formando uma seleo encadeada.

6.3.1

SELEO ENCADEADA HETEROGNEA

Quando no conseguimos identificar um padro lgico de construo em uma estrutura de seleo encadeada, temos uma estrutura de seleo encadeada heterognea. Formato: se (condio1) ento se (condio2) ento C1 C2 C3 fimse seno se (condio3) ento C4 C5 C6 seno se (condio4) ento se (condio5) ento C7 fimse seno C8 fimse fimse fimse Para resumir as variaes possveis da seleo encadeada mostrada anteriormente, temos a seguinte tabela de deciso:
Condio 1 V F F F Condio 2 V Condio 3 V F F Condio 4 V F Condio 5 V Ao executada C1, C2, C3 C4, C5, C6 C7 C8

6.3.2

SELEO ENCADEADA HOMOGNEA

Quando temos diversas estruturas de seleo encadeadas que seguem um determinado padro lgico, temos uma estrutura de seleo encadeada homognea. Neste exemplo, aps cada ento existe outro se e no existem senes. Temos, ento, uma estrutura de seleo encadeada homognea. Formato: se (condio1) ento se (condio2) ento se (condio3) ento se (condio4) ento comando1 fimse fimse fimse fimse O exemplo anterior equivalente a: se ((condio1) e (condio2) e (condio3) e (condio4)) ento comando1 fimse
Lgica de Programao e Algoritmos Lucilia Ribeiro
26

06 Estruturas Condicionais

Exemplo 4: Supondo que uma varivel X possa assumir apenas quatro valores, V1, V2, V3 e V4 e que exista um comando diferente a ser executado para cada valor armazenado em X. Nesse exemplo, somente um, e apenas um comando, pode ser executado nos testes, ou seja, se X igual a V3, ele no igual a V1, nem a V2 e nem a V4. se (X=V1) ento C1 fimse se (X=V2) ento C2 fimse se (X=V3) ento C3 fimse se (X=V4) ento C4 fimse

X = V1 V F F F

X = V2 F V F F

X = V3 F F V F

X = V4 F F F V

Ao C1 C2 C3 C4

No temos aqui uma estrutura de seleo encadeada, pois as selees no esto interligadas. Dessa maneira, todas as condies (X = Vn) esto sendo avaliadas e acontecero testes desnecessrios. Com o objetivo de melhorar a performance do exemplo apresentado anteriormente, podemos usar um conjunto de selees encadeadas, como mostrado a seguir. se (X = V1) ento C1 seno se (X=V2) ento C2 seno se (X=V3) ento C3 seno se (X=V4) ento C4 fimse fimse fimse fimse

X = V1 V F F F

X = V2 V F F

X = V3 V F

X = V4 V

Ao C1 C2 C3 C4

Nesse caso, o nmero mdio de testes a serem executados foi reduzido. Se o contedo de X for igual a V2, por exemplo, sero executados apenas dois testes (X=V1) e (X=V2) e um comando (C2). Na estrutura anterior, para esse exemplo de V2, so inspecionadas quatro condies, embora um nico comando (C2) seja executado.

Porque a ema gosta tanto do MSN? "Porque tem EMOticons."


Lgica de Programao e Algoritmos Lucilia Ribeiro
27

07 Seleo de Mltipla Escolha

7
7.1

Seleo de Mltipla Escolha


O que um macaco com uma pasta de executivo em cima da rvore? "Um mico-empresrio."

SELEO DE MLTIPLA ESCOLHA

Conforme visto no captulo anterior, uma estrutura de seleo de mltipla escolha usada quando ocorrem situaes onde: se um comando for executado, os demais no sero, ou seja, quando um conjunto de valores discretos precisa ser testado e aes diferentes so associadas a esses valores. Observe o exemplo a seguir. Esse exemplo pode ser escrito usando uma seleo de mltipla escolha. O uso da estrutura escolha pode ser para variveis dos tipos inteiro, caracter e lgico. se (X = V1) ento C1 seno se (X=V2) ento C2 seno se (X=V3) ento C3 seno se (X=V4) ento C4 fimse fimse fimse fimse escolha X caso V1 C1 caso V2 C2 caso V3 C3 caso V4 C4 fimescolha

Para se executar um comando que possui mais de um valor em que se verifica sua necessidade, todos esses valores so agrupados em um nico caso (os valores so separados por vrgula. Para se executar um comando que se verifica com todos os outros valores, exceto os discriminados caso a caso, se inclui outra situao: outrocaso. se (X=V1) entao C1 senao se (X=V2) entao C2 senao se (X=V3) entao C2 senao se (X=V4) entao C3 senao se (X=V5) entao C4 senao C5 fimse fimse fimse fimse fim se
Lgica de Programao e Algoritmos Lucilia Ribeiro

escolha X caso V1 C1 caso V2, V3 C2 caso V4 C3 caso V5 C4 outrocaso C5 fimescolha

28

07 Seleo de Mltipla Escolha

Exemplo 1: Escreva um algoritmo que diga se um caracter digitado : uma vogal maiscula, um nmero inteiro de 0 a 9 ou um operador aritmtico. Se o usurio informar algo diferente do que foi mencionado anteriormente, imprimir uma mensagem avisando-o desse fato. Algoritmo 05_Letras // funo: verificar o que foi digitado // autor: Luclia Ribeiro // data: 10/01/09 var opcao : caracter inicio escreval(Anlise de Caracter Digitado) escreva(Digite algo: ) leia(opcao) escolha opcao caso A, E, I, O, U escreva( uma vogal maiscula) caso 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 escreva( um nmero inteiro de 0 a 9) caso +, -, *, / escreva( um operador matemtico) outrocaso escreva(Outro caracter) fimescolha FimAlgoritmo Exemplo 2: Construa um algoritmo que, tendo como dados de entrada o preo de um produto e seu cdigo de origem, mostre o preo junto de sua procedncia. Se o cdigo no for nenhum dos especificados, o produto deve ser encarado como importado. Considere a tabela de cdigos apresentada abaixo:
Cdigo de origem 1 2 3 4 5 ou 6 7, 8 ou 9 10 at 20 25 at 30 Procedncia Sul Norte Leste Oeste Nordeste Sudeste Centro-oeste Nordeste

Algoritmo 06_Regiao // funo: verificar a regio do produto de acordo com o cdigo // autor: Luclia Ribeiro // data: 10/01/09 var preco : real codigo : inteiro regiao: caracter inicio escreva(Informe o preo do produto: ) leia(preco) escreva(Digite seu cdigo de origem: ) leia(codigo) escolha codigo caso 1 regiao Sul caso 2 regiao Norte caso 3 regiao Leste
Lgica de Programao e Algoritmos Lucilia Ribeiro
29

07 Seleo de Mltipla Escolha

caso 4 regiao Oeste caso 5, 6, 25, 26, 27, 28, 29, 30 regiao Nordeste caso 7, 8, 9 regiao Sudeste caso 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 regiao Centro-Oeste outrocaso regiao Produto Importado fimescolha escreva(Preo: , preco, , regiao) FimAlgoritmo

Onde o Batman conheceu o Robin? "Num BATpapo." Onde o Batman foi no domingo de manh? Num BATzado Porque o Batman colocou seu BATcarro no seguro? Pois ele tem medo que o Robin Como o Batman abre a BATcaverna? Ele BATpalma O que o morcego disse quando encontrou o Batman? Papai!

Lgica de Programao e Algoritmos Lucilia Ribeiro

30

08 Estruturas de Repetio

8
8.1

Estruturas de Repetio
Qual a diferena entre a Coca e o gato? "O gato mia e a Coca light."

ESTRUTURAS DE REPETIO

As estruturas de repetio so usadas quando queremos executar uma mesma sequncia de comandos vrias vezes, provocando sempre um retrocesso para o incio dessa sequncia. Isso ocasiona a repetio de certo trecho do algoritmo um nmero de vezes (que pode ser indeterminado, porm finito). Aos trechos do algoritmo que so repetidos damos o nome de laos de repetio, loops ou looping. 8.2 ESTRUTURA DE REPETIO COM VARIVEL DE CONTROLE

A estrutura de repetio com varivel de controle, conhecida como para, repete a execuo de um bloco de comandos um nmero predeterminado de vezes, pois possui limites fixos. Sintaxe: para i de vi ate vf passo p faca C1 C2 C3 . . . Cn fimpara Onde: i a varivel de controle, vi o valor inicial da varivel i, vf o valor final da varivel i (valor at o qual ela vai chegar) e p o valor do incremento dado varivel i. Exemplo 1: Escreva um algoritmo que imprima todos os nmeros inteiros de 1 at o limite escolhido pelo usurio, depois imprima-os em ordem decrescente. Algoritmo 07_LacoPara // funo: escrever nmeros de 1 at um limite em ordem crescente e decrescente // autor: Luclia Ribeiro // data: 10/01/09 var i, limite : inteiro inicio escreva(Digite o valor final: ) leia(limite) escreval(Imprimindo os nmeros inteiros de 1 a , limite,: ) para i de 1 ate limite passo 1 faca escreva(i, ) fimpara escreval(Imprimindo os nmeros inteiros de , limite, a 1: ) para i de limite ate 1 passo -1 faca escreva(i, ) fimpara FimAlgoritmo 8.3 ESTRUTURA DE REPETIO COM TESTE NO INCIO

uma estrutura de controle do fluxo de execuo que permite repetir diversas vezes um mesmo trecho do algoritmo, sempre verificando antes de cada execuo se permitido executar o mesmo trecho.
Lgica de Programao e Algoritmos Lucilia Ribeiro
31

08 Estruturas de Repetio

A estrutura de repetio com teste no incio denomina-se enquanto e permite que um bloco de comandos ou uma ao primitiva seja repetida enquanto uma determinada condio for verdadeira. Quando o resultado da condio for falso, o comando de repetio abandonado. Caso o resultado da condio seja falso j da primeira vez, os comandos que se encontram dentro do enquanto no so executados nenhuma vez. Sintaxe: enquanto (condicao) faca C1 C2 ... Cn fimenquanto Exemplo 3: Clculo da mdia das 2 notas por aluno, considerando 50 alunos. Escrever mensagem de aprovado, caso a mdia seja maior ou igual a 7 e de reprovado, caso a mesma seja menor do que 7. Cuidado com dados invlidos. Algoritmo 08_LacoEnquanto // funo: escrever situao de 50 alunos // autor: Luclia Ribeiro // data: 10/01/09 var n1,n2,media : real cont: inteiro inicio para cont de 1 ate 50 passo 1 faca escreval("-------------------------") escreval("DADOS DO ALUNO ",cont,": ") escreva(Digite a primeira nota: ) leia(n1) enquanto ((n1<0) ou (n1>10)) faca escreva(Nota invlida. Informe novamente: ) leia(n1) fimenquanto escreva(Digite a segunda nota: ) leia(n2) enquanto ((n2<0) ou (n2>10)) faca escreva(Nota invlida. Informe novamente: ) leia(n2) fimenquanto media (n1+n2)/2 escreva (Mdia = , media) se (media >= 7) entao escreval( - APROVADO) senao escreval( - REPROVADO) fimse fimpara FimAlgoritmo 8.4 ESTRUTURA DE REPETIO COM TESTE NO FINAL

A estrutura de repetio com teste no final (repita ... at) consiste em uma estrutura de controle do fluxo de execuo que permite repetir diversas vezes um mesmo trecho do algoritmo. Porm, diferentemente do enquanto, a condio testada sempre no final. Assim, o repita ... ate usado para realizar a repetio com teste no final, permitindo que um bloco ou ao primitiva seja repetido at que uma determinada condio se torne verdadeira.

Lgica de Programao e Algoritmos Lucilia Ribeiro

32

08 Estruturas de Repetio

Dessa forma, possvel observar que um bloco (ou ao primitiva) executado pelo menos uma vez, independente da validade da condio. Isto ocorre porque a inspeo da condio feita aps a execuo do bloco, o que representa a caracterstica principal dessa estrutura de repetio. Sintaxe: repita C1 C2 ... Cn ate (condicao) Exemplo4: Escreva um algoritmo que receba 2 notas de vrios alunos e calcule sua mdia. Depois de calculado a mdia, se for maior ou igual a 7, diga que o aluno foi aprovado ou no. Ao final, pergunte se existem mais alunos. Se a resposta for sim, repita todo o procedimento. Alm disso, mostre quantos alunos tiveram na turma e quantos foram aprovados. No se esquea de validar as notas (entre 0 e 10). Algoritmo 09_LacoRepita // funo: escrever situao de vrios alunos var n1,n2,media : real qtdeAlunos, aprovados : inteiro resposta : caracter inicio qtdeAlunos 0 aprovados 0 repita qtdeAlunos qtdeAlunos + 1 escreval("-------------------------") escreval("DADOS DO ALUNO ",qtdeAlunos,": ") escreva(Digite a primeira nota: ) leia(n1) enquanto ((n1<0) ou (n1>10)) faca escreva(Nota invlida. Informe novamente: ) leia(n1) fimenquanto escreva(Digite a segunda nota: ) leia(n2) enquanto ((n2<0) ou (n2>10)) faca escreva(Nota invlida. Informe novamente: ) leia(n2) fimenquanto media (n1+n2)/2 escreva (Mdia = , media) se (media >= 7) entao escreval( - APROVADO) aprovados aprovados + 1 senao escreval( - REPROVADO) fimse escreval(-------------------------------------------) escreva(Existem mais alunos? (S ou N): ) leia(resposta) enquanto ((resposta <> S) e (resposta <> N)) faca escreva(ATENO!!! Digite S ou N: ) leia(resposta) fimenquanto ate(resposta = N) escreval(Tiveram ,qtdeAlunos, na sala e ,aprovados, foram aprovados....) FimAlgoritmo
Lgica de Programao e Algoritmos Lucilia Ribeiro
33

08 Estruturas de Repetio

O que so dois pontinhos azuis no cu? Uma blue-blue-leta. O que um pontinho preto dentro de um pontinho azul? "Uma pulga usando cala jeans." O que um pontinho vermelho pulando dentro da floresta? "Um caqui-perer." O que um pontinho preto, branco e vermelho na neve? Um pingim Noel. O que so trs pontinhos em cima da geladeira: um rosa, um verde e um azul? Trs formigas brincando de Meninas Superpoderosas. O que um pontinho marrom no pulmo? Uma brown-quite. O que um pontinho preto no microscpio? Uma black-tria. O que um pontinho vermelho no congelador? O papai-noel matando saudade do polo norte. Oo que so quatro pontinhos pretos na grama? Uma four-miga. O que um pontinho amarelo no cantinho da sala? Um skiny de castigo. O que um pontinho amarelo numa limusine? Um milhonrio. O que um pontinho vermelho na porta? Um olho mgico com conjuntivite. O que um pontinho amarelo surfando no mar? Ruffles, a batata da onda. O que um pontinho vermelho no rio? Um jacaRED.

Lgica de Programao e Algoritmos Lucilia Ribeiro

34

09 Vetores e Matrizes

9
9.1

Vetores e Matrizes
O que a Fanta tem em comum com a Coca? "Se a Fanta quebra, a Coca cola..."

ESTRUTURA DE DADOS Estruturas de dados so tipos construdos, compostos de tipos primitivos. um conjunto de elementos.

9.2

VARIVEIS COMPOSTAS HOMOGNEAS

Varivel Composta Homognea composta de variveis com o mesmo tipo primitivo, formando, assim, um conjunto homogneo de dados. Podem ser unidimensionais, tambm chamadas de Vetores ou bidimensionais, chamadas de matrizes. 9.3 VETORES - Variveis Compostas Unidimensionais

Os vetores so variveis compostas homogneas unidimensionais. Eles representam uma seqncia de variveis, todas do mesmo tipo, com o mesmo identificador (mesmo nome). Como as variveis tm o mesmo nome, o que as distingue um ndice que referencia sua localizao dentro da estrutura. Para declarar a varivel, utilizamos a seguinte sintaxe descrita abaixo, onde i a quantidade de elementos do vetor e tipo primitivo qualquer um dos tipos bsicos. Sintaxe: Identificador: vetor [valorInicial..valorFinal] de tipo primitivo de dado Exemplo: vClasse: vetor[1..40] de inteiro A figura a seguir mostra como o vetor vClasse pode ser representado. Nesse exemplo, a primeira posio do vetor 1 e a ltima 40.
vClasse 8,2 1 6,8 2 9,2 3 3,1 4 ... 5,2 39 9,6 40

9.3.1

MANIPULAO DE VETORES

O nome do vetor determinado atravs do identificador que foi usado na definio de variveis. A posio determinada por meio de uma constante, de uma expresso aritmtica ou de uma varivel que estiver dentro dos colchetes e tambm denominada ndice. vClasse[4]

39

40

Aps isolar um nico elemento do vetor, podemos manipul-lo atravs de qualquer operao de atribuio, entrada ou sada. Atrituio: vClasse[4] A[3] 6 8.6

Leitura de dados e atribuio dos mesmos a um vetor: para i de 1 ate 15 passo 1 faca leia(A[i]) fim para

Lgica de Programao e Algoritmos Lucilia Ribeiro

35

09 Vetores e Matrizes

Escrita (ou impresso) dos elementos de um vetor: para i de 1 ate 8 passo 1 faca escreva(B[i]) fim para; Exemplo 1: Escreva um algoritmo que calcule a mdia aritmtica geral de uma classe com 10 alunos e imprima a mdia e a quantidade de notas acima da mdia calculada. Algoritmo 10_MediaSemVetor // funo: escrever situao de vrios alunos Var A, B, C, D, W, F, G, H, I, J, MediaNota: real NotaAcima: inteiro inicio NotaAcima 0 repita escreva(Informe 10 notas: ) leia(A,B,C,D,W,F,G,H,I,J) ate (((A>=0)e(A<=10))e((B>=0)e(B<=10))e((C>=0)e(C<=10))e((D>=0)e(D<=10))e((W>=0)e(W<=10)) e((F>=0)e(F<=10))e((G>=0)e(G<=10))e((H>=0)e(H<=10))e((I>=0)e(I<=10))e((J>=0)e(J<=10))) MediaNota (A+B+C+D+E+F+G+H+I+J) / 10 se (A > MediaNota) entao NotaAcima NotaAcima + 1 fimse se (B > MediaNota) entao NotaAcima NotaAcima + 1 fimse se (C > MediaNota) entao NotaAcima NotaAcima + 1 fimse se (D > MediaNota)entao NotaAcima NotaAcima + 1 fimse se (W > MediaNota) entao NotaAcima NotaAcima + 1 fimse se (F > MediaNota)entao NotaAcima NotaAcima + 1 fimse se (G > MediaNota) entao NotaAcima NotaAcima + 1 fimse se (H > MediaNota)entao NotaAcima NotaAcima + 1 fimse se (I > MediaNota) entao NotaAcima NotaAcima + 1 fimse se (J > MediaNota)entao NotaAcima NotaAcima + 1 fimse escreval(A mdia de: , MediaNota) escreval(Existem ,NotaAcima, notas acima da media!) FimAlgoritmo

O algoritmo desenvolvido no exemplo anterior torna impraticvel para uma grande quantidade de notas. Imagine que existissem 100 alunos na sala. Teramos que declarar 100 variveis diferentes, uma para cada nota.
Lgica de Programao e Algoritmos Lucilia Ribeiro
36

09 Vetores e Matrizes

Assim, muito mais coerente usar uma nica varivel que comporte vrios dados, ou seja, um vetor armazenando cada nota em uma posio diferente do mesmo. Para acessar cada posio do vetor usaremos uma varivel como ndice. Assim, reescrevendo o exerccio anterior usando um vetor, teremos: Algoritmo 11_MediaComVetor // funo: escrever situao de vrios alunos Var A : vetor[1..10] de real soma, medianota: real notaacima, i: inteiro inicio notaacima 0 soma 0 para i de 1 ate 10 passo 1 faca repita escreva(Informe a nota do aluno: , i, : ) leia(A[i]) ate ((A[i] >= 0) e (A[i]<= 10)) soma soma + A[i] fimpara medianota soma/10 para i de 1 ate 10 passo 1 faca se (A[i] > medianota) entao notaacima notaacima + 1 fimse fimpara escreval(A mdia de: , medianota) escreval(Existem , notaacima, notas acima da media!) FimAlgoritmo 9.4 MATRIZES - Variveis Compostas Multidimensionais

Os vetores tm como caracterstica principal a necessidade de apenas um ndice para endereamento. So estruturas UNIDIMENSIONAIS. Uma estrutura que precisa de mais de um ndice denominada de Estrutura Composta Multidimensional (ou Matriz). No caso da estrutura ter duas dimenses temos uma Estrutura Composta Bidimensional. 9.4.1 DECLARAO DE MATRIZES

Sintaxe: Identificador: vetor [inicioLinha..finalLinha, inicioColuna..finalColuna] de tipo primitivo de dado Exemplo: A: vetor[1..5,1..5] de inteiro onde finalLinha a quantidade de linhas que a matriz ter e finalColuna a quantidade de colunas. Veja o exemplo de uma matriz A 5 x 5:

Lgica de Programao e Algoritmos Lucilia Ribeiro

37

09 Vetores e Matrizes

9.4.2

MANIPULAO DE MATRIZES

9.4.3

PERCORRENDO UMA MATRIZ BIDIMENSIONAL

Exemplo 2: Seja a matriz abaixo. Descobrir qual a linha da matriz A que possui a maior quantidade de 0s.

Algoritmo 12_MatrizLinhaZerada // funo: descobrir qual linha da matriz tem mais zeros Var Mat : vetor[1..6,1..5] de inteiro i,j,maiorqtde,numlinha,qtdelinha: inteiro inicio maiorqtde 0 numlinha 0 para i de 1 ate 6 passo 1 faca para j de 1 ate 5 passo 1 faca escreva(Informe o elemento (, i, x , j, ): ) leia(Mat[i,j]) fimpara fimpara para i de 1 ate 6 passo 1 faca escreval( ) para j de 1 ate 5 passo 1 faca escreva(Mat[i,j], ) fimpara fimpara para i de 1 ate 6 passo 1 faca qtdelinha 0 para j de 1 ate 5 passo 1 faca se (Mat[i,j] = 0) entao qtdelinha qtdelinha + 1 fimse fimpara se (qtdelinha > maiorqtde) entao numlinha i maiorqtde qtdelinha fimse fimpara escreval(" ")
Lgica de Programao e Algoritmos Lucilia Ribeiro

para j de 1 ate 5 passo 1 faca qtdecol 0 para i de 1 ate 6 passo 1 faca se (Mat[i,j] = 0) entao qtdecol qtdecol + 1 fimse fimpara se (qtdecol > maiorqtde) entao numcol j maiorqtde qtdecol fimse fimpara

38

09 Vetores e Matrizes

escreval("-------------------") se (numlinha <> 0) entao escreval(Linha com maior qtde de zeros : , numlinha) escreval(Essa linha possui , maiorqtde, zeros. ) senao escreval(Nenhuma linha da matriz possui zeros) fimse FimAlgoritmo Exemplo 3: Seja a matriz do exemplo anterior. Descobrir qual a coluna da matriz A que possui a maior quantidade de 0s. Para resolver esse problema, o algoritmo o mesmo, somente temos que mudar o que for linha para coluna, conforme o fragmento destacado acima.

_ Mame, mame... eu j tenho 13 anos, me compra um suti?? _ No. _ Vamos, Mame... compra um suti pra mim... _ Eu j te disse NO !!! _ Mas mame, eu j tenho 13 anos... _ No me amole , Artur...

Lgica de Programao e Algoritmos Lucilia Ribeiro

39

10 Modularizao

10
10.1

Modularizao
O que o galo disse pra galinha? "Nosso filho tem cada piada..."

DECOMPOSIO

Um problema complexo pode ser simplificado quando dividido em vrios subproblemas. Para acompanhar essa abordagem, sero apresentados conceitos e tcnicas que permitem a diviso de um algoritmo em mdulos. A decomposio de um problema fator determinante para a reduo da complexidade. Lembremos que Complexidade sinnimo de Variedade, ou seja, a quantidade de situaes diferentes que um problema pode apresentar. Assim, quando decompomos um problema em subproblemas, estamos invariavelmente dividindo tambm a complexidade e, por conseqncia, simplificando a resoluo. Outra grande vantagem da decomposio que permite focalizar a ateno em um problema pequeno de cada vez, o que ao final produzir uma melhor compreenso do todo. Passos para orientar o processo de decomposio: 1. 2. 3. 4. Dividir o problema em suas partes principais. Analisar a diviso obtida para garantir coerncia. Se alguma parte ainda permanecer complexa, decomp-la tambm. Analisar o resultado para garantir entendimento e coerncia.

Esse processo de decomposio tambm conhecido como Refinamentos Sucessivos, porque se parte de um problema complexo e abrangente, que sucessivamente dividido at resultar em problemas mais simples e especficos. tcnica de Refinamentos Sucessivos tambm se d o nome de Top-Down, uma vez que se parte de conceitos mais abrangentes (abstratos) at atingir o nvel de detalhamento desejado. Tambm existe, apesar de menos difundida, uma tcnica exatamente inversa, conhecida por Bottom-Up. Consiste em partir dos conceitos mais detalhados e ir agrupando-os sucessivamente em nveis mais abrangentes, at atingir o nvel de abstrao desejado. O processo de compreenso frequentemente mais natural quando se usa a tcnica Top-Down. Por exemplo, mais fcil compreender um automvel partindo-se do todo at o ltimo parafuso do que do parafuso at o todo. Certamente existem excees. Por exemplo, mais fcil entender operaes aritmticas mais abstratas, como potenciao e radiciao, se antes soubermos somar e subtrair. 10.2 MDULOS

Depois de decompor um problema complexo em subproblemas, podemos construir um subalgoritmo ou mdulo para cada subproblema. Um mdulo um grupo de comandos, constituindo um trecho de algoritmo, com uma funo bem definida e o mais independente possvel em relao ao resto do algoritmo. Assim sendo, ao se elaborar um algoritmo para calcular o salrio lquido de um empregado, tem-se as seguintes etapas: Algoritmo Leia os dados do funcionrio; Determine o salrio; Escreva o salrio; Fim Algoritmo O comando Determine o salrio pode ser refinado assim:
Lgica de Programao e Algoritmos Lucilia Ribeiro
40

10 Modularizao

Ref. Determine o salrio Calcule as vantagens; Calcule as dedues; SalarioLiquido Vantagens Dedues; Fim Ref. Na elaborao do refinamento acima, no houve preocupao de como o processo de clculo das vantagens e das dedues seria efetuado. Essas aes constituem funes bem definidas no algoritmo e que sero executadas por mdulos especficos. Nesta fase do projeto do algoritmo, pode-se, ento, optar pela elaborao de mdulos para o clculo das vantagens e clculo das dedues. O mesmo refinamento ficaria ento: Ref. Determine o salrio Ative o mdulo Clculo das vantagens; Ative o mdulo Clculo das dedues; SalarioLiquido Vantagens Dedues; Fim Ref. A verso final modularizada do algoritmo ficaria ento constituda do algoritmo seguinte, mais os mdulos: Algoritmo Leia os dados do funcionrio; Ative o mdulo Clculo das vantagens; Ative o mdulo Clculo das dedues; SalarioLiquido Vantagens Deducoes; Escreva SalarioLiquido; Fim Algoritmo Mdulo {Clculo das vantagens} SalarioBruto NumHoras * SalarioHora; SalarioFamilia NumFilhos * ValorFilho; Vantagens SalarioBruto + SalarioFamilia; Fim mdulo Mdulo {Clculo das dedues} Inss SalarioBruto * 0,08; Irpf SalarioBruto * Taxa; Deducoes Inss + Irpf; Fim mdulo A experincia recomenda que os mdulos de um programa tenham tamanho limitado. Mdulos muito grandes so difceis de ser compreendidos e, em geral, so multifuncionais. Um outro aspecto importante a possibilidade de cada mdulo poder definir as prprias estruturas de dados, suficientes e necessrias apenas para atingir o objetivo final do mdulo. Todo mdulo constitudo por uma seqncia de comandos que operam sobre um conjunto de objetos, que podem ser globais ou locais. Objetos globais so entidades que podem ser usadas em mdulos internos a outros mdulos do algoritmo onde foram declaradas. Objetos locais so entidades que s podem ser usadas no mdulo do algoritmo onde foram declaradas. Estes objetos no possuem qualquer significado fora deste mdulo. So exemplos de objetos globais ou locais: variveis, arquivos, outros mdulos, etc. A deciso pela modularizao traz benefcios tais como: a) a independncia do mdulo permite uma manuteno mais simples e evita efeitos colaterais em outros pontos do algoritmo; b) a elaborao do mdulo pode ser feita independentemente e em poca diferente do restante do algoritmo; c) testes e correes dos mdulos podem ser feitos em separado; d) um mdulo independente pode ser utilizado em outros algoritmos que requeiram o mesmo processamento por ele executado. Dentre as ferramentas para modularizao podemos destacar os procedimentos e as funes. Essas ferramentas so mdulos de programao que servem basicamente a trs objetivos:

Lgica de Programao e Algoritmos Lucilia Ribeiro

41

10 Modularizao

Evitar que uma certa seqncia de comandos necessria em vrios locais de um algoritmo tenha que ser escrita repetidamente nestes locais; Dividir e estruturar um algoritmo em partes fechadas e logicamente coerentes Aumentar a legibilidade de um algoritmo. Procedimentos e funes so mdulos hierarquicamente subordinados a um algoritmo, comumente chamado de mdulo principal. Da mesma forma, um procedimento ou uma funo pode conter outros procedimentos e funes aninhadas, como pode ser visto no diagrama hierrquico a seguir: MP

P1

P2

F1

F2

P3

F3

P4

F4

Essa figura ilustra um algoritmo constitudo de um mdulo principal MP, os procedimentos P1, P2, P3 e P4 e as funes F1, F2, F3 e F4. A notao algoritmica fica da seguinte forma: Algoritmo Procedimento P1 Procedimento P3 C1 C2 FimProcedimento Funo F3 C3 FimFuno FimProcedimento Procedimento P2 C4 C5 FimProcedimento Funo F1 C6 FimFuno Funo F2 Procedimento P4 C7 C8 FimProcedimento Funo F4 C9 FimFuno Fim Funo FimAlgoritmo. Tendo em vista os conceitos de objeto local e global, a funo F3, declarada dentro do procedimento P1 conhecido apenas em P1. Entretanto, o procedimento P2, declarado dentro do mdulo principal, conhecido em todo o algoritmo e pode ser ativada dentro de P1. A declarao de um procedimento ou funo constituda de um cabealho e de um corpo. O cabealho, que identifica a procedimento ou funo, contm o seu nome e a lista de parmetros formais. O corpo contm declaraes locais e os comandos do procedimento ou funo. A ativao feita atravs da referncia a seu nome e a indicao dos parmetros atuais.

Lgica de Programao e Algoritmos Lucilia Ribeiro

42

10 Modularizao

10.3

PROCEDIMENTO

Um procedimento declarado conforme a seguir, onde Procedimento uma palavra chave, NOME o nome dado ao procedimento e lista de parmetros formais a lista de objetos que sero substitudos por outros objetos, fornecidos quando da chamada da Procedimento. Procedimento NOME(lista-de-parmetros-formais) Var (declarao das variveis locais) Inicio (comandos) FimProcedimento A chamada de um procedimento feita com uma referncia a seu nome e a indicao dos parmetros reais no local do algoritmo onde o procedimento deve ser ativado, ou seja, onde a sua execuo deve ser iniciada. A forma geral para o comando de ativao de um procedimento mostrada a seguir, onde NOME o nome dado ao procedimento, e lista de parmetros reais a lista de objetos que substituiro os parmetros formais durante a execuo da Procedimento. Os parmetros reais devem concordar em nmero, ordem e tipo com os parmetros formais. NOME(lista-de-parmetros-reais) Ao terminar a execuo dos comandos de um procedimento, o fluxo de controle retorna ao comando seguinte quele que provocou a chamada. Desta maneira, a execuo de um procedimento se constitui de uma transferncia temporria da execuo do mdulo chamador para o procedimento, retornando depois ao algoritmo que a chamou. Exemplo 1: Dados trs valores distintos, coloc-los em ordem crescente. Algoritmo 13_OrdemCrescente // funo: colocar os nmeros em ordem crescente Var aux,n1,n2,n3: inteiro inicio escreva(Digite 3 nmeros inteiros: ) leia (n1,n2,n3) se ((n1 > n2) ou (n1 > n3)) entao se (n2 < n3) entao aux n1 n1 n2 n2 aux senao aux n1 n1 n3 n3 aux fimse fimse se (n2 > n3) entao aux n2 n2 n3 n3 aux fimse escreva (n1, n2, n3) FimAlgoritmo

Lgica de Programao e Algoritmos Lucilia Ribeiro

43

10 Modularizao

Observe que h repetio de um grupo de comandos que diferem entre si devido s variveis utilizadas: aux n1 n2 n1 n2 aux aux n1 n3 n1 n3 aux aux n2 n3 n2 n3 aux

Todas estas repeties tm por objetivo a troca de valores de 2 variveis, podendo ser substitudas por um nico procedimento: Algoritmo 14_ProcedimentoOrdemCrescente // funo: colocar os nmeros em ordem crescente, efetuando a troca com procedimento Var n1,n2,n3: inteiro Procedimento troca(var a, b : inteiro) var aux : inteiro inicio aux a a b b aux FimProcedimento inicio escreva(Digite 3 nmeros inteiros: ) leia (n1,n2,n3) se ((n1 > n2) ou (n1 > n3)) entao se (n2 < n3) entao troca(n1,n2) senao troca(n1,n3) fimse fimse se (n2 > n3) entao troca(n2,n3) fimse escreva (n1, n2, n3) FimAlgoritmo Cada vez que o procedimento troca for ativado, os comandos dentro dele so executados tendo em vista os valores contidos nos parmetros atuais e, em seguida, a seqncia do algoritmo retorna ao comando imediatamente seguinte ao da ativao. A vinculao entre mdulos pode ser feita atravs da transferncia ou passagem de parmetros, que associam parmetros reais com os parmetros formais. Dentre os modos de transferncia de parmetros, pode-se destacar a passagem por valor e por referncia. 10.3.1 PASSAGEM DE PARMETROS POR VALOR A passagem de parmetro por valor caracteriza-se pela no alterao do valor do parmetro real quando o parmetro formal manipulado dentro do procedimento. Assim sendo, o valor passado pelo parmetro real copiado para o parmetro formal, que no caso assume o papel de varivel local do procedimento. Desta forma, qualquer modificao que ocorra na varivel local do procedimento no afetar o valor do parmetro real correspondente, ou seja, o processamento executado somente dentro do procedimento, ficando o resultado obtido preso no procedimento. Considere o exemplo a seguir: Exemplo 2: Clculo do fatorial de um nmero Algoritmo 15_FatorialPorValor // funo: calcular o fatorial de um nmero Var
Lgica de Programao e Algoritmos Lucilia Ribeiro
44

10 Modularizao

limite: inteiro Procedimento fatorial(var n : inteiro) var i, fat : inteiro inicio fat 1 para i de 1 ate n passo 1 faca fat fat * i fimpara escreva (fat) FimProcedimento inicio escreva(Qual fatorial: ) leia (limite) fatorial (limite) FimAlgoritmo Neste exemplo, indicado o uso da passagem de parmetro por valor. No caso, a varivel n o parmetro formal, que receber o valor fornecido varivel limite por meio do procedimento fatorial. Esse valor estabelece o nmero de vezes que o looping deve ser executado. Dentro do procedimento encontrado a varivel fat que ir realizar um efeito de acumulador, tendo ao final do looping o valor da fatorial do valor informado para o parmetro n. Ao trmino do looping, a instruo escreva(fat) imprime o valor da varivel fat, que somente vlida dentro do procedimento e por esta razo ficar preso dentro da mesma. A passagem de parmetro por valor utilizada somente para a entrada de um determinado valor. 10.3.2 PASSAGEM DE PARMETROS POR REFERNCIA Ao utilizar a passagem de parmetros por referncia, eles devero ser indicados no s no incio do procedimento, mas tambm junto do programa principal, uma vez que este tipo de parmetro devolve para o mdulo principal do programa um resultado. Exemplo 3: Clculo do fatorial de um nmero Algoritmo 16_FatorialPorReferencia // funo: calcular o fatorial de um nmero Var saida , limite: inteiro Procedimento fatorial(var n : inteiro, *fat) var i, : inteiro inicio fat 1 para i de 1 ate n passo 1 faca fat fat * i fimpara FimProcedimento inicio escreva(Qual fatorial: ) leia (limite) fatorial (limite,saida) escreva(saida) FimAlgoritmo Neste exemplo, indicado o uso da passagem de parmetro por referncia (varivel fat por meio do smbolo *). A varivel n neste exemplo continua sendo do tipo passagem de parmetro por valor, pois ela receber o valor fornecido varivel limite, por meio do procedimento fatorial. Esse valor estabelece o nmero de vezes que o looping deve ser executado. Dentro do procedimento encontrada a varivel fat que do tipo passagem
Lgica de Programao e Algoritmos Lucilia Ribeiro
45

10 Modularizao

de parmetro por referncia e possui no final o valor acumulado do clculo da fatorial. Ao trmino do looping, o valor da varivel fat transferido para fora da rotina, ou seja, transferido para a varivel saida do programa principal. Ento, a instruo escreva(saida) imprime o valor recebido de dentro do procedimento por meio da varivel fat. A passagem de parmetro por referncia utilizada para que se tenha a sada de um determinado valor de dentro de um procedimento. 10.4 FUNO

As funes, embora bastante semelhantes aos procedimentos, tm a caracterstica especial de retornar ao algoritmo que as chamou um valor associado ao nome da funo. Esta caracterstica permite uma analogia com o conceito de funo matemtica. A declarao de uma funo idntica de um procedimento, com exceo de que necessrio o seu tipo, ou seja, o tipo do valor que ser retornado. Alm de numricas, as funes podem ser lgicas ou literais. No formato abaixo, funo uma palavra chave, tipo o tipo do valor que ser retornado, nome o nome dado funo e lista de parmetros formais a lista dos objetos que sero substitudos por outros objetos, fornecidos quando da chamada da funo. Retorne o comando para retornar o valor da funo. Funcao nome(lista-de-parmetros-formais) : tipo da funo inicio Declaraes dos objetos locais funo Comandos da funo Retorne resultado da funo FimFuncao A chamada de uma funo feita com uma referncia a seu nome e a indicao dos parmetros reais em uma expresso. A seguir, apresenta-se a forma geral para a ativao da funo, onde nome o nome dado funo, e lista de parmetros reais a lista de objetos que substituiro os parmetros formais durante a execuo da funo. Os parmetros reais devem concordar em nmero, ordem e tipo com os parmetros formais. nome (lista-de-parmetros-reais) O fluxo de controle desviado para a funo, no momento em que ela ativada. Ao terminar a execuo dos comandos da funo, o fluxo de controle retorna ao comando seguinte quele onde ela foi ativada. So vlidas aqui as consideraes j feitas sobre passagem de parmetros. Exemplo 4: Escrever um algoritmo que retorne o valor da soma dos nmeros a e b. Algoritmo 17_SomaComFuncao // funo: efetua a soma de dois nmeros Var n1, n2 : real Funcao soma(a,b : real) : real inicio retorne a + b FimFuncao inicio escreva(Informe o primeiro nmero: ) leia (n1) escreva(Informe o segundo nmero: ) leia (n2) escreva (A soma dos nmeros : , soma(n1,n2)) Fim Algoritmo. Exemplo 5: Escrever um algoritmo que apresente uma mensagem informando se dois nmeros so iguais ou diferentes Algoritmo 18_CompararComFuncao Var n1, n2 : inteiro
Lgica de Programao e Algoritmos Lucilia Ribeiro
46

10 Modularizao

Funcao compara (a,b : inteiro) : logico retorne a = b FimFuncao inicio escreva(Informe o primeiro nmero: ) leia (n1) escreva(Informe o segundo nmero: ) leia (n2) se (compara(n1,n2)) entao escreva (Nmeros Iguais) senao escreva (Nmeros Diferentes) fimse FimAlgoritmo Exemplo 6: Criar uma funo que efetue o clculo, segundo o parmetro de operao fornecido. Assim, essa funo dever receber trs parmetros, sendo os dois nmeros mais o operador para clculo. Se for +, soma os nmeros, se for -, subtrai, se for *, multiplica e se o operador for /, divide os valores. Algoritmo "19_Calculadora" Var r, a, b : real opcao : inteiro Procedimento ENTRADA inicio escreva("Informe o primeiro nmero: ") leia (a) escreva("Informe o segundo nmero: ") leia (b) FimProcedimento Funcao CALCULO(x,y : real ; op : caracter) : real inicio escolha op caso "+" retorne x + y caso "-" retorne x - y caso "*" retorne x * y caso "/" retorne x / y fimescolha FimFuncao Procedimento SAIDA inicio escreval("O resultado : ",r) FimProcedimento Procedimento SOMA inicio escreval("Soma") r CALCULO(a, b, "+") FimProcedimento
Lgica de Programao e Algoritmos Lucilia Ribeiro
47

10 Modularizao

Procedimento SUBTRAI inicio escreval("Subtrai") r CALCULO(a, b, "-") FimProcedimento Procedimento MULTIPLICA inicio escreval("Multiplica") r CALCULO(a, b, "*") FimProcedimento Procedimento DIVIDE inicio escreval("Divide") r CALCULO(a, b, "/") FimProcedimento inicio opcao <- 0 enquanto (opcao <> 5) faca escreval("1 - Soma") escreval("2 - Subtrai") escreval("3 - Multiplica") escreval("4 - Divide") escreval("5 - Sai do Programa") leia(opcao) se (opcao <> 5) entao se ((opcao < 1) ou (opcao > 5)) entao escreval ("Opo Invlida") senao ENTRADA escolha opcao caso 1 SOMA caso 2 SUBTRAI caso 3 MULTIPLICA caso 4 DIVIDE fimescolha SAIDA fimse fimse fimenquanto FimAlgoritmo

Um eletricista vai at a UTI de um hospital, olha para os pacientes ligados a diversos tipos de aparelhos e diz-lhes: _ Respirem fundo: vou mudar o fusvel.
Lgica de Programao e Algoritmos Lucilia Ribeiro
48

Anexo - Silogismos
Silogismo 1 Deus ajuda quem cedo madruga Quem cedo madruga, dorme tarde... Quem dorme tarde, no dorme noite... Quem no dorme noite, sai pra "night"! Concluso: Deus ajuda quem sai pra "night" ! Silogismo 2 Deus amor. O amor cego. Steve Wonder cego. Logo, Steve Wonder Deus. Silogismo 3 Disseram-me que eu sou ningum. Ningum perfeito. Logo, eu sou perfeito. Mas s Deus perfeito. Portanto, eu sou Deus. Se Steve Wonder Deus, eu sou Steve Wonder! Meu Deus, eu sou cego! Silogismo 4 Imagine um pedao de queijo suo, daqueles bem cheios de buracos. Quanto mais queijo, mais buracos. Cada buraco ocupa o lugar em que haveria queijo. Assim, quanto mais buracos, menos queijo. Quanto mais queijos mais buracos, e quanto mais buracos, menos queijo. Logo, quanto mais queijo, menos queijo. Silogismo 5 Toda regra tem exceo. Isto uma regra. Logo, deveria ter exceo. Portanto, nem toda regra tem exceo. Silogismo 6 Existem biscoitos feitos de gua e sal. O mar feito de gua e sal. Logo, o mar um biscoito. Silogismo 7 Quando bebemos, ficamos bbados. Quando estamos bbados, dormimos. Quando dormimos, no cometemos pecados. Quando no cometemos pecados, vamos para o Cu. Ento, vamos beber para ir pro Cu? Silogismo 8 Hoje em dia, os trabalhadores no tm tempo pra nada. J os vagabundos.. tm todo o tempo do mundo. Tempo dinheiro. Logo, os vagabundos tem mais dinheiro do que os trabalhadores.

Lgica de Programao e Algoritmos Lucilia Ribeiro

49

Crditos
_ Doutor, como eu fao para emagrecer? _ Basta a senhora mover a cabea da esquerda para direita e da direita para esquerda. _ Quantas vezes, doutor? _ Todas as vezes que lhe oferecerem comida.

Esta apostila foi totalmente baseada nos livros: FORBELLONE, A. L. V. e EBERSPACHER, H. F. Lgica de Programao A Construo de Algoritmos e Estrutura de Dados. 2 Edio. Makron Books. 2000 FARRER, Harry e outros. Algoritmos Estruturados. 3 Edio. LTC. 1999.

As imagens da Mafalda pertencem a QUINO, Joaqun Salvador Lavado

AGRADECIMENTO: Obrigada, Willians pelas piadinhas. Foi muito inspirador...

Duas velhinhas bem velhinhas esto jogando sua canastra semanal Uma delas olha para a outra e diz: _ Por favor, no me leve a mal. Ns somos amigas h tanto tempo e agora eu no consigo me lembrar do seu nome, veja s a minha cabea. Qual o seu nome, querida? A outra olha fixamente para amiga, por uns dois minutos, coa a testa e diz: _ Voc precisa dessa informao para quando?
Lgica de Programao e Algoritmos Lucilia Ribeiro
50