Você está na página 1de 130

Lógica de

Programação I
Universidade do Estado do Amazonas

Tecnologia em Análise e Desenvolvimento de Sistemas


(Sistema Presencial Mediado)

Danielle Pompeu Noronha Pontes


Danielle Gordiano Valente
Marcos Fabiano P. Santiago

Lógica de
Programação I

E d i ç õ e s
2 0 0 7
Ficha Técnica

Governo do Estado do Amazonas


Carlos Eduardo de Souza Braga
Governador do Estado

Omar José Abdel Aziz


Vice-Governador do Estado

Universidade do Estado do Amazonas


Marilene Corrêa da Silva Freitas
Reitora

Carlos Eduardo de Souza Gonçalves


Vice-Reitor

Fares Franc Abinader Rodrigues


Pró-Reitor de Administração

Osail Medeiros de Souza


Pró-Reitor de Planejamento

Edinea Mascarenhas Dias


Pró-Reitora de Ensino de Graduação

José Luiz de Souza Pio


Pró-Reitor de Pós-Graduação e Pesquisa

Rogelio Casado Marinho Filho


Pró-Reitor de Extensão e Assuntos Comunitários

Escola Superior de Tecnologia


Vicente de Paulo Queiroz Nogueira
Diretor

Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas


(Sistema Presencial Mediado por Tecnologia)

Odwald Schreder
Coordenador Geral

Ângela Timótia Pereira Lima


Coordenadora Pedagógica

Ednaldo Coelho Pereira


Coordenador Técnico Administrativo

Projeto gráfico
Aurelino da Silva Bentes

Revisão
Ângela Timótia Pereira Lima

Pontes, Danielle Pompeu Noronha.

P814log Lógica de programação I / Danielle Pompeu Noronha Pontes –


Manaus/AM: UEA Edições, 2007. – (Tecnologia em Análise e
Desenvolvimento de Sistemas. 2. Período)
130 p.: il. ; 23 cm.

Inclui bibliografia e anexo.


ISBN

1. Programação - Informática. I. Valente, Danielle Gordiano. II.


Santiago, Marcos Fabiano P. III. Série. IV. Título.
CDU (1997): 004.421
Perfil dos Autores

Danielle Pompeu Noronha Pontes


Professora da Escola Superior de Tecnologia (EST/UEA)
Especialista em Informática
pela Universidade Federal do Ceará - UFC

Danielle Gordiano Valente


Professora da Escola Superior de Tecnologia (EST/UEA)
Mestre em Ciência da Computação
pela Universidade de Minas Gerais - UFMG

Marcus Fabiano Praciano Santiago


Professor da Escola Superior de Tecnologia (EST/UEA)
Mestre em Ciência da Computação
pela Universidade de Brasília - UnB
Palavra da Reitora

Nós últimos anos, o avanço da tecnologia da informática mudou os


conceitos de ensino e de trabalho. A preocupação com o que se denominou de
“inclusão digital” passou a ser um problema urgente a ser enfrentado pelos
dirigentes do País, já que todos os processos de novas tecnologias deságuam
no conhecimento de informática. No Amazonas, a dificuldade de locomoção
na região, por falta de rodovias, por sua grande extensão territorial, pela
baixa densidade demográfica e pelo subdesenvolvimento secular imposto à
população ribeirinha, torna-se árduo o esforço do Governo para tornar
realidade à inclusão digital.

A UEA, que já nasceu moderna, incorporando tecnologias educacionais


de ponta, utilizando-se particularmente da informática pela massificação do
uso de microcomputadores combinados com uma rede complexa de acesso à
Internet, não poderia ficar alheia a essa necessidade premente. Por isso,
propôs e realizou o primeiro vestibular para levar a 12 municípios um curso
que formasse a mão-de-obra inicial que tornasse a inclusão digital uma
realidade em nosso Estado.

A proposta do curso de Tecnologia em Análise e Desenvolvimento de


Sistemas oferecido pela UEA vislumbra criar mão-de-obra qualificada em um
número significativo de localidades do Estado, cabendo às pessoas
beneficiadas com essa iniciativa a tarefa de irradiar o uso de tecnologias de
informática, abrindo caminhos novos e suscitando novos empregos para a
população local, consolidando, assim, o exercício da cidadania.

Professora Doutora Marilene Corrêa da Silva Freitas


Reitora da Universidade do Estado do Amazonas
Sumário

1. Introdução ao Estudo da Resolução de Problemas utilizando o


Computador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.1. Introdução à Resolução de Problemas . . . . . . . . . . . . 11
1.2. Descrevendo Soluções . . . . . . . . . . . . . . . . . . . . . . 13
1.3. Algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.4. Lógica e Algoritmos . . . . . . . . . . . . . . . . . . . . . . . 20
1.5. Algoritmos e Processamento de Dados . . . . . . . . . . . . 24
1.6. Lógica de Programação . . . . . . . . . . . . . . . . . . . . . 28

2. Descrevendo Algoritmos . . . . ......... . . . . . . . . . . . 31


2.1. Introdução . . . . . . . . . ......... . . . . . . . . . . . 31
2. 2. Fluxogramas . . . . . . . ......... . . . . . . . . . . . 33
2.3. Português Estruturado ou Pseudocódigo . . . . . . . . . . . 36

3. O VisuAlg. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.1. Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.2. A Tela Principal do VisuAlg 2.0 . . . . . . . . . . . . . . . . . 40
3.2.1 A barra de Tarefas do VisuAlg . . . . . . . . . . . . . . 41
3.2.2 Barra de Status . . . . . . . . . . . . . . . . . . . . . . 43
3.2.3 Quadro de Variáveis . . . . . . . . . . . . . . . . . . . 44

3.3. A Linguagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

4. Tipos de Dados e Variáveis . . . . . . . . . . . . . . . . . . . . . . 46

4.1. Introdução: funcionamento do acesso à memória em um


computador . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.2 Constantes e Variáveis . . . . . . . . . . . . . . . . . . . . . . 49
4.2.1 Conceitos Iniciais . . . . . . . . . . . . . . . . . . . . . 49
4.2.2 Constantes . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.2.3. Variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.2.4. Identificadores . . . . . . . . . . . . . . . . . . . . . . 52

4.3. Conceito de tipos de dados . . . . . . . . . . . . . . . . . . . 55

4.3.1 Tipos Primitivos . . . . . . . . . . . . . . . . . . . . . . 55


09
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

4.4. Declaração de Variáveis e Constantes . . . . . . . . . . . . . 61


4.5 Uso de Variáveis na Entrada e Saída de Dados . . . . . . . . 62
4.6 Palavras Reservadas . . . . . . . . . . . . . . . . . . . . . . . . 67
4.7 Revisão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

5. Expressões e Operadores . . . . . . . . . . . . . . . . . . . . . . . 69
5.1.Operador de Atribuição. . . . . . . . . . . . . . . . . . . . . . 69
5.2 Expressões Aritméticas: . . . . . . . . . . . . . . . . . . . . . 72
5.2.1. Operadores aritméticos . . . . . . . . . . . . . . . . . 72

5.3 Expressões Lógicas . . . . . . . . . . . . . . . . . . . . . . . . 74


5.3.1. Operadores relacionais . . . . . . . . . . . . . . . . . . 75
5.3.2. Operadores lógicos . . . . . . . . . . . . . . . . . . . . 76

6. Estrutura de um algoritmo . . . . . . . . . . . . . . . . . . . . . . 81

6.1 Estruturas de controle . . . . . . . . . . . . . . . . . . . . . . 82


6.1.1 Estrutura Seqüencial. . . . . . . . . . . . . . . . . . . . 82
6.1.2 Estrutura de Seleção. . . . . . . . . . . . . . . . . . . . 87
6.1.3 Estrutura de repetição . . . . . . . . . . . . . . . . . . 102

6.2 Combinando as estruturas de controle . . . . . . . . . . . . 109

Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118

Anexo - Exercícios . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

10
Tecnologia em Análise e Desenvolvimento de Sistemas
Lógica de Programação I

Capítulo 1

Introdução ao Estudo
da Resolução
de Problemas
Utilizando o computador

1.1. Introdução à Resolução de Problemas

No dia-a-dia rotineiramente encontramos e resolvemos


problemas. Muitos deles nós mesmos criamos, outros somos
obrigados a enfrentar. Para solucioná-los, temos que verificar de
que recursos dispomos para então poder elaborar uma solução.

Quando utilizamos a palavra problema, queremos


significar as dificuldades que impedem que um objetivo seja
atingido [MOURSUND07]. Alguns podem ser bastante simples. Por
exemplo, ao calçar os sapatos você tem de atar os cadarços.
Observe que da forma como definimos um “problema”, resolvê-
lo tem o mesmo significado de cumprir uma tarefa.

Pense em algumas das tarefas que concluiu hoje – alguns


dos problemas que resolveu. Tomou café da manhã? Se o fez, 11
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

resolveu o problema de se alimentar. Pagou contas? Se o fez,


resolveu um problema de pagamento. Discutiu com alguém? Se o
fez, resolveu um problema interpessoal.

Vamos levar este exercício um pouco além. Para cada


problema, vamos pensar nos recursos necessários para resolvê-
los. Talvez, você tenha resolvido os problemas apenas com o uso
de sua mente e seu corpo. Para outros problemas talvez seja
necessária a ajuda de amigos. Ou ainda, para outros, seja
necessário o uso de ferramentas tais como um telefone, uma
calculadora ou um carro.

A tabela 1.1 (a seguir) apresenta um resumo de informações


sobre problemas do dia-a-dia. Ela é útil para compreender dois
fatos:
? Rotineiramente encontramos e resolvemos uma grande
variedade de problemas;

Na medida em que resolvemos problemas, utilizamos


?
recursos tais como o raciocínio, nosso corpo, ferramentas
ou dinheiro para adquirir outros recursos.
Tabela 1.1 : Problemas e recursos

Problema Recurso
Fome de manhã (café da manhã) Frutas na geladeira

Transporte para o trabalho Carro

Dor de cabeça Aspirina, descanso

Pagamento de Contas Dinheiro

Computadores são recursos que ajudam na resolução de


certos tipos de problemas. Ele pode ser visto como uma ferra-
menta muito poderosa e versátil. Há várias formas para um
12 computador ser utilizado para minimizar o tempo e o esforço
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

necessários para encontrar uma solução. Assim, vale a pena se


esforçar para aprender a utilizar esta importante ferramenta.

ATIVIDADES

1.1 Pense em 6 problemas que você resolveu e descreva os


recursos que utilizou na solução, preenchendo a tabela
abaixo.

Descrição do Problema Recurso

1.2. Descrevendo Soluções

O que é necessário para se elaborar uma solução para um


problema? Parece uma pergunta simples, mas envolve estabele-
cermos algumas definições formais.

Para descobrir quais são, vamos fazer um pequeno exercí-


cio. Imagine que alguém lhe pede para descobrir um defeito
mecânico em um carro utilizando apenas instruções fornecidas
pelo telefone a uma pessoa inexperiente. Você poderia resolver
este problema?

A resposta seria dificilmente. Mesmo um mecânico hábil


13
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

não teria como obter todas as informações sobre o defeito do


carro sem testá-lo ou visualizá-lo (o problema).

Vamos fazer outro exercício. Imagine que alguém lhe


informe que um quadro está “feio” e simplesmente lhe pede
para torná-lo “bonito”, sem lhe fornecer maiores informações.
Neste caso mesmo que você seja um às da pintura não poderá
resolver o problema, pois não sabe o que tornaria o quadro
“bonito” para seu cliente (a solução).

Com estes dois exemplos descobrimos algumas condições


necessárias para se resolver um problema. A primeira é que a
situação inicial em que o problema se desenvolve esteja bem
definida (no exemplo do defeito no carro, não se sabia qual este
era). A segunda é que o objetivo a ser alcançado com a solução
também esteja (no exemplo do quadro, não se sabia o que era
“bonito”).

Uma terceira condição é ter a posse de recursos para


resolver o problema. Os recursos podem ser, por exemplo,
ferramentas ou mão-de-obra. Esta condição é bem fácil de ser
visualizada. Por exemplo, se você estiver com dor de cabeça em
um ambiente barulhento e sem remédio, não poderá resolver seu
problema: não há os recursos (remédio ou local para descanso).
Outro exemplo seria resolver o problema do pagamento de
contas vencidas sem ter dinheiro: não há como resolver este
problema por falta de recursos!

Como já comentamos, o computador, objeto de nosso


estudo, é uma ferramenta a ser utilizada como recurso na solu-
ção de problemas.

14 Por último é necessário o comprometimento de alguém


Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

para implementar a solução utilizando os recursos. Pode ser uma


pessoa, uma empresa, o governo, em suma tem de haver uma
parte interessada em resolver o problema.

Colocando o que discutimos de uma maneira mais formal,


resolver um problema significa mudar uma situação inicial para
uma situação desejada (objetivo) [MOURSUND07].

Figura 1.1: Processo de solução de problemas

Situação
Situação Desejada
Inicial (Objetivo)
Como ir de A para B?
A B

Resumindo, você pode solucionar um problema se as


seguintes condições são satisfeitas:
1. Você tem uma situação inicial claramente definida.
2. Você tem uma situação desejada (objetivo) claramente
definida.
3. Você tem a posse dos recursos necessários para alterar a
situação inicial para a final.
4. Há comprometimento – existe alguém com o compromis-
so de solucionar o problema com seus atributos tais
como energia, esforço físico ou conhecimento.

ATIVIDADES

1.2. O dono de um restaurante considera que sua comida é boa.


No entanto, um cliente lhe informa que sua comida é ruim,
sem maiores detalhes. Ele pode resolver o problema de
agradar ao cliente? Por que? 15
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

1.3.Seu chefe lhe diz simplesmente que seu relatório está muito
ruim, sem fornecer motivos para tal, e que você precisa
melhorá-lo. Você será capaz de resolver o problema (fazer
com que seu relatório agrade ao chefe)? Por quê?
1.4.Uma pessoa lhe diz que suas roupas não são boas e que
precisa melhorar seu vestuário, sem lhe fornecer maiores
detalhes. Mesmo que você possua dinheiro e vá a uma loja
de vestuário você poderia resolver o problema de “vestir-se
melhor”? Por quê?
1.5. Escolha 3 dos problemas de seu dia-a-dia que citou anterior-
mente e descreva a situação inicial, a desejada (objetivo) e
os recursos de que dispõe.

1.3. Algoritmos

Computadores são extraordinárias ferramentas a serem


utilizadas em soluções de problemas. No entanto, nem todas as
soluções são passíveis de resolução utilizando o computador.
Quais seriam as condições para a utilização de um computador
como ferramenta?

Há duas condições necessárias. Elas decorrem do próprio


funcionamento de um computador e foram descritas pelo mate-
mático inglês Alan Turing (responsável pela criação do primeiro
computador eletrônico e pelo que é chamada a “Teoria da
Computação”).

A primeira é que a descrição da solução deve ser clara e


precisa (em termos mais formais não deve ser ambígua). Em
outras palavras, deve ser possível descrever cada parte (passo)
16
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

da solução com tantos detalhes que qualquer um (mesmo uma


máquina) possa executá-la. Isto requer não apenas saber exata-
mente como executar cada passo, mas muitas vezes também a
ordem exata de sua execução.

A segunda é a de que ao final da execução da descrição da


solução, o problema deve ser resolvido. Em outras palavras,
quem está encarregado da resolução do problema deve poder
atingir seu objetivo em um tempo e um número de passos finito.
Lembre-se que ter um objetivo definido/situação desejada é
uma das condições para elaborar uma solução, como vimos na
seção anterior.

Uma descrição passo-a-passo de uma solução atendendo às


condições que acabamos de citar é comumente chamada de
algoritmo. Deve-se ressaltar que há grandes divergências sobre
a definição de algoritmo e os tipos de soluções que podem ser
adequadas ao termo. A definição que utilizaremos é adequada
para os problemas computacionais, atendendo às duas condições
que descrevemos: “uma seqüência finita e ordenada de passos
sem ambigüidade que leva à resolução de um problema”
[BALDWIN04].

Apesar de o computador ser relativamente recente (os


primeiros foram criados na década de 40), a utilização de
algoritmos para resolver problemas é bem antiga. O algoritmo de
Euclides, por exemplo, foi criado por volta de 300 anos antes de
Cristo, sendo utilizado para descobrir o Máximo Divisor Comum
(MDC) entre dois números inteiros conhecidos.

A palavra algoritmo tem origem no sobrenome,


Al-Khwarizmi, do matemático persa do século IX, Mohamed ben
Musa, cujas obras foram traduzidas no ocidente cristão no século 17
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

XII, tendo uma delas recebido o nome "Algorithmi de numero


indorum", sobre os algoritmos usando o sistema de numeração
decimal (indiano). Outros autores, contudo, defendem a origem
da palavra em Al-goreten.

Os algoritmos são muito comuns para resolver problemas do


nosso cotidiano. Para exemplificar descrevemos uma atividade
bem conhecida: trocar uma lâmpada. Apesar de parecer óbvio
demais, muitas vezes fazemos este tipo de atividade inconscien-
temente, sem percebermos os pequenos detalhes. Vejamos
como seria descrevê-la passo a passo:

1. pegar uma escada;


2. posicionar a escada embaixo da lâmpada;
3. buscar uma lâmpada nova;
4. subir na escada;
5. retirar a lâmpada velha;
6. colocar a lâmpada nova.

Observe que a descrição que apresentamos é uma seqüên-


cia de passos que descrevem claramente (sem ambigüidades) o
que deve ser feito e que leva à solução do problema (trocar a
lâmpada). Portanto, é um algoritmo.

A forma como estamos descrendo os algoritmos é chamada


de “Linguagem narrativa”, e é bastante próxima do linguajar que
utilizamos em nosso cotidiano. Consiste apenas em especificar
cada passo do algoritmo com um verbo e um complemento,
representando a ação a ser realizada. Observe que numeramos
cada passo para representar a seqüência da execução (a ordem).
Infelizmente, esta forma de representar algoritmos é prolixa,
18 imprecisa e freqüentemente pouco confiável como um veículo
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

de transferir informação. Como veremos, há maneiras melhores


de descrever algoritmos.

Há vários outros problemas de nosso dia-a-dia que podería-


mos descrever desta forma:

Consumir um chiclete:
1. pegar o chiclete;
2. retirar o papel;
3. mascar o chiclete;
4. jogar o papel no lixo;
5. jogar o chiclete no lixo.

Escovar os dentes:
1. Pegar a escova;
2. Colocar a pasta de dentes na escova;
3. Molhar a escova;
4. Escovar os dentes;
5. Enxaguar a boca;
6. Enxaguar a escova.

OBJETIVO

Figura 1.2: Visualização de formas para atingir um objetivo

Deve-se frisar que assim como pode haver várias soluções


para um mesmo problema, também pode haver vários algorit-
mos, mas sempre chegando ao resultado (objetivo) desejado de
forma correta. Sendo assim, podem existir vários algoritmos que 19
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

solucionem um problema, alguns mais rápidos, outros mais


seguros, mas todos conseguem resolver o problema corretamen-
te, apesar das diferenças existentes no percurso de toda a lógica
proposta como solução.

ATIVIDADES

1.6 Crie um algoritmo para “tomar banho”.


1.7 Faça um algoritmo para somar dois números e multiplicar o
resultado pelo primeiro número.
1.8 Descreva com detalhes o algoritmo para trocar um pneu de
um carro.
1.9 Selecione dois dentre os problemas de seu dia-a-dia que você
descreveu nos exercícios das seções anteriores e elabore
algoritmos para solucioná-los.

1.4. Lógica e Algoritmos

Como vimos, para solucionar um problema utilizando um


computador como ferramenta é necessário que a solução seja
descrita por um algoritmo. No entanto, como devemos criá-lo?

Para elaborar um algoritmo é necessário encontrar uma


solução e descrevê-la em uma seqüência finita de passos que
levam ao objetivo desejado. Freqüentemente esta não é uma
tarefa fácil, sendo necessário elaborar um raciocínio por vezes
complexo para implementá-la.

A lógica é o estudo do raciocínio correto, sendo uma ativi-


20 dade mental [Shapiro 06]. Ela é uma ferramenta importante para
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

a elaboração de algoritmos. Sempre que se quer pensar, falar ou


escrever corretamente, deve-se colocar os pensamentos em
ordem. A seguir é mostrado um exemplo de inferência utilizando
a lógica:

- Todo mamífero é animal


- Todo cavalo é mamífero
- Portanto, todo cavalo é animal

A utilização da lógica deve ser considerada por todos, mas


para alguns profissionais, como os da área de tecnologia de
informação, ela requer sempre muita atenção e desempenho
rápido do raciocínio sobre o conhecimento disponível. Outros
exemplos abaixo:

a) A gaveta está fechada.


A bala está na gaveta.
Preciso primeiro abrir a gaveta, para depois pegar a bala.

b) Moramos em três pessoas.


Nenhum de nós dois quebrou o vaso de porcelana.
Quem quebrou o vaso?

Criar um raciocínio lógico coerente exige uma organização


sobre os pensamentos a serem realizados por um indivíduo ou
mesmo por cada indivíduo da equipe que busca a solução. A
realização deste tipo de atividade demanda de tempo, compre-
ensão e cooperação dos envolvidos que precisam entender todas
as informações envolvidas em tal processo. Sendo assim, é
fundamental a organização clara e simples de todos os raciocíni-
os possíveis a serem elaborados e testados na busca da solução
para um problema computacional.
21
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

A seguir é apresentada uma solução para um problema de


lógica bastante conhecido, chamado de “Torres de Hanói”.

Considere o seguinte problema:

Temos três hastes. Uma das hastes serve de suporte para


três discos de tamanhos diferentes. Os discos menores são
sempre colocados sobre os discos maiores. A figura abaixo mostra
uma possível situação inicial das hastes e discos.

Figura 1.3: Situação Inicial dos Discos no Problema das Torres de Hanói

Desejamos mover todos os discos para outra haste, porém


só podemos movimentar um disco de cada vez e um disco maior
nunca pode ser colocado sobre um disco de menor tamanho.

Pense em uma solução. Você consegue resolver este proble-


ma? Basta apenas utilizar o raciocínio lógico.

A solução (em linguagem narrativa) é apresentada a seguir.

Nomeamos as hastes como 1 2 e 3 e os discos como p, m e g.


Considera-se que inicialmente os discos estão na haste 1. Os
passos são:
1. mover o disco p para a haste 2.
2. mover o disco m para a haste 3.
3. mover o disco p para a haste 3.
4. mover o disco g para a haste 2.
5. mover o disco p para a haste 1.
22 6. mover o disco m para a haste 2.
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

7. mover o disco p para a haste 2.

Podemos também representar a solução em forma gráfica,


desenhando as hastes e a posição dos discos a cada momento (ou
passo).

Figura 1.4: Solução do Problema das Torres de Hanói

23
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

ATIVIDADES

Crie algoritmos em linguagem narrativa utilizando o raciocínio


lógico para resolver os seguintes problemas.
1.10. Temos três recipientes de tamanhos distintos: o primeiro
com capacidade para 8 litros, outro para 5 litros e o tercei-
ro com capacidade para 3 litros. O recipiente de 8 litros
está totalmente cheio. Deseja-se colocar 4 litros em dois
recipientes. Considere que os recipientes não sejam
graduados.
1.11. Numa determinada noite, acontece uma queda de energia.
Você sabia que poderia encontrar uma vela na gaveta da
cozinha, um lampião embaixo da cama, fusíveis de reserva
no armário da sala e fósforos na estante da cozinha.
Descreva a seqüência de passos que poderia ser utilizada
para diagnosticar e resolver o problema, o que pode ser
previsto em duas possibilidades:
a) o fusível queimou;
b) a queda é na estação da companhia elétrica.
1.12. Um homem quer atravessar um rio com um barco que pode
carregar ele mesmo e apenas mais uma de suas três cargas:
um lobo, um carneiro e um maço de alfafas. O que o
homem deve fazer para atravessar o rio sem perder nenhu-
ma de suas cargas, sabendo-se que o carneiro não pode
ficar sozinho com a alfafa e o lobo não pode ficar sozinho
com o carneiro.

1.5. Algoritmos e Processamento de Dados

Até agora utilizamos exemplos de problemas do cotidiano


24 para a criação de algoritmos. Os computadores, em geral, não
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

são utilizados para tratar destes problemas. Os problemas que


suportam tratamento computacional envolvem grandes quanti-
dades de dados ou são problemas de natureza complexa, exigin-
do a execução de um grande número de passos para alcançar a
solução. Isto porque o computador, como ferramenta, é utilizado
para transformar dados/informações em outros em uma ativida-
de conhecida como processamento de dados.

Pode-se definir processamento de dados qualquer ativida-


de que, utilizando informações (ou dados), efetua transforma-
ções para obter novas informações (ou dados) como resultado.
De forma geral, podemos compreender um sistema de processa-
mento de dados como um conjunto de três etapas fundamentais.
Entrada de dados, Processamento e Saída de dados.

Processamento

Entrada Saída
Figura 1.5: Representação do Processamento de Dados

Entrada de dados: é o ato de fornecer dados ao computa-


?
dor que os manipulará de acordo com o que foi elaborado
no algoritmo.

Processamento: consiste na manipulação dos dados


?
armazenados de forma a gerar os resultados desejados. É
neste ponto que os algoritmos são executados. O proces-
samento é relacionado diretamente com os dispositivos
de armazenamento de dados (memórias), pois estão neles
armazenados os dados que serão acessados e manipulados
para efetivação do processamento desejado, que possi-
velmente também armazenará os resultados obtidos
neste mesmo recurso.
25
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

Saída de dados: é a ação, ou processamento, que o com-


?
putador realiza para disponibilizar ao usuário os resulta-
dos obtidos no processamento.

Normalmente, os dados brutos informados e processados


geram os dados informativos desejados pelo usuário que possui
algumas necessidades. Estes dados processados e contextualiza-
dos para um fim ou momento específico são chamados de infor-
mação.

Para que o computador realize alguma tarefa é necessário


que nos comuniquemos com ele. O que nos permite este tipo de
comunicação são os dispositivos de entrada e os dispositivos de
saída acoplados ao computador (periféricos).

O termo dispositivo de entrada representa o grupo de


componentes que podem ser ligados (ou conectados) ao compu-
tador para permitir que o mundo externo (mundo real) envie
dados a ele. Por exemplo, o teclado, que permite ao usuário se
comunicar com o computador, fornecendo dados a serem usados
no processamento de alguma informação, o mouse.

O termo dispositivo de saída representa o grupo de compo-


nentes que podem ser ligados (ou conectados) ao computador,
permitindo o envie de dados dele ao mundo externo (mundo
real). Por exemplo, o monitor, que permite ao computador
comunicar o resultado de uma operação ao usuário que precisa
de tal informação. Outro exemplo de dispositivo de saída seria a
impressora.

Alguns dispositivos podem ser tanto entrada como saída de


dados.
26
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

Exemplos são o pen drive, o disquete, o CD.

pen drive disquete CD

Como o processamento só ocorre com dados que estejam


armazenados em memória, então os processos relacionados ao
armazenamento e recuperação de dados são de fundamental
importância ao funcionamento do computador.

Como exemplo de um algoritmo computacional, imagine o


seguinte problema. Calcular a média final dos alunos da 6ª Série.
Os alunos realizarão quatro provas: P1, P2, P3 e P4. A Média
Final é calculada por:

(P1 + P2 + P3 + P4) / 4.

Para montar o algoritmo proposto, faremos três perguntas:

a) Quais são os dados de entrada?


R: Os dados de entrada são P1, P2, P3 e P4

b) Qual será o processamento a ser utilizado?


R: O procedimento será somar todos os dados de entrada e
dividi-los por 4 (quatro) (P1 + P2 + P3 + P4)/4

c) Quais serão os dados de saída?


R: O dado de saída será a média final.
27
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

O algoritmo computacional proposto poderia ser descrito


da seguinte forma:
1. Receber as Notas P1, P2, P3, P4 (Entrada de Dados)
2. Calcular a média final (P1 + P2 + P3 + P4)/4
3. Retornar a média final ao usuário (saída de dados).

ATIVIDADES

Identifique as entradas, o processamento e as saídas de dados e


descreva em linguagem narrativa os seguintes algoritmos com-
putacionais.
1.13 Algoritmo que a partir de dois números N1 e N2 retorna o
produto entre esses números.
1.14 Algoritmo que a partir de um valor fornecido em real e da
cotação do real para o dólar informe ao usuário o valor
equivalente em dólar americano.
1.15 Algoritmo que a partir de um número inteiro N que repre-
senta a quantidade de metros, retorna a quantos quilôme-
tros e centímetros ele corresponde.

1.6.Lógica de Programação

A implementação das lógicas, elaboradas e representadas


em um algoritmo, é realizada sobre o computador, por meio da
transcrição, representada no algoritmo, para uma linguagem de
programação, que também possibilitará a compreensão e execu-
ção das instruções pelo computador. Essa transcrição também
pode ser chamada de tradução, pois somente efetuará mudança
na forma de descrever o raciocínio a ser implementado no com-
28 putador. O resultado da transcrição é o programa. De acordo com
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

Niklaus Wirth [WIRTH 86], "Programas são formulações comple-


tas de algoritmos abstratos, baseados em representações espe-
cíficas de dados.”.

?
??
??
Linguagem de
Programação

Algoritmo

Programa
Tradução
?

Figura 1.6: Representação do processo de “transcrição”

Antes da transcrição de um programa é necessário que os


algoritmos que serão utilizados na solução do problema estejam
definidos e elaborados. Poderíamos então, de maneira simplifi-
cada, dividir a tarefa de programação em duas etapas:

Modelização (ou Resolução) do Problema: determinação


?
do modelo de solução para o problema proposto na forma
de um algoritmo computacional. Assim, a elaboração de
um algoritmo é o primeiro passo para a preparação de um
programa de computador. Este algoritmo deve ser inde-
pendente da linguagem de programação que será utiliza-
da.

Implementação: é a transformação (ou codificação) do


?
algoritmo em alguma Linguagem de Programação adequa-
da ao modelo elaborado.

29
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

??
Fase de
Resolução
? ?? 1
do Problema
?

Problema

Solução
na forma de
Algoritmo

2 Fase de Implementação
(Codificação do Algoritmo
Solução como um em alguma Ling. de Programação
programa de computador

Figura 1.7: Representação simplificada da Programação

30
Tecnologia em Análise e
Tecnologia em Análise e Desenvolvimento deIntrodução
Sistemas à Informática Desenvolvimento de Sistemas
Lógica de Programação I

Capítulo 2

Descrevendo Algoritmos
2.1. Introdução

Até agora representamos algoritmos utilizando a linguagem


narrativa com a especificação verbal do algoritmo em linguagem
natural. Como citamos, esta é uma forma prolixa e imprecisa,
porém de fácil aprendizagem.
Para entender os motivos que tornam a linguagem narrativa
ineficaz para a representação de algoritmos, vamos descrever,
na tabela 2.1, duas maneiras diferentes de fazer um algoritmo
de uma tarefa corriqueira: escovar os dentes:

Tabela 2.1: Algoritmo para escovar os dentes

Ordem Algoritmo 1 Algoritmo 2


1 Pegar a escova Colocar a pasta na escova
2 Pegar o creme dental Molhar a escova
3 Colocar o creme Escovar
dental da escova
4 Molhar a escova Enxaguar a boca
5 Escovar Enxaguar a escova
6 Enxaguar a boca
7 Limpar a escova
31
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

Observe que as duas descrições são algoritmos similares


para a mesma tarefa. No entanto, por estarem em linguagem
narrativa, possuem diferenças de representação: o algoritmo 1
divide o passo “colocar a pasta na escova” do algoritmo 2 em três
outros diferentes e o último passo “limpar a escova” em um é
descrito como “enxaguar a escova” em outro. No entanto, ambos
estão corretos por representar soluções para o problema de
“escovar os dentes”.

Duas pessoas que executem os algoritmos podem compre-


endê-los de maneiras diferentes. “Pasta” e “creme dental” são a
mesma coisa? “Limpar” e “enxaguar” também? Pode-se passar a
pasta na escova sem pegá-la primeiro? Há uma imprecisão nos
algoritmos que pode levar a diversas interpretações. Observe
que, mesmo neste caso simples, os resultados podem ser dife-
rentes: a escova pode não ficar limpa ao final dependendo da
interpretação de “enxaguar”.

Este problema acontece devido ao fato de que na lingua-


gem narrativa, pode-se utilizar diversos termos para representar
uma mesma ação. No exemplo, utilizou-se “limpar” e “enxa-
guar”. Ao mesmo tempo, não há uma definição sobre o que pode
e o que não pode ser considerado um “passo” do algoritmo:
enquanto em um uma ação é representada por um único passo
(“colocar a pasta na escova”) no outro é dividido em três.

Há diversas técnicas para a descrição de algoritmos que


resolvem os problemas da linguagem narrativa. A seguir, serão
mostradas duas muito utilizadas para a representação de algorit-
mos computacionais: fluxogramas e pseudocódigo.

32
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

ATIVIDADES

2.1 Crie algoritmos para solucionar os seguintes problemas em


linguagem narrativa.
Trocar um pneu.
?
Tomar banho.
?

A seguir compare seu algoritmo com o de colegas e verifique as


diferenças.

2.2. Fluxogramas

O fluxograma utiliza figuras geométricas predefinidas para


descrever as ações (ou instruções) a serem realizadas na resolu-
ção de um problema. Um fluxograma mostra, de forma gráfica, a
lógica de um algoritmo, enfatizando passos individuais e o fluxo
de execução.
As principais figuras usadas em fluxogramas são relaciona-
das na tabela 2.2, apresentadas a seguir:

Tabela 2.2: Figuras utilizadas em Fluxograma

FIGURA SIGNIFICADO

Figura para definir início e fim do algoritmo.

Figura usada no processamento de cálculo,


atribuições e processamento de dados em geral.

Figura utilizada na representação de entrada de


dados.

Figura utilizada para representação da saída de


dados.

Figura que indica o processamento seletivo ou


condicional, possibilitando o desvio no caminho
do processamento. 33
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

Símbolo geométrico usado como conector.

Símbolo que identifica o sentido do fluxo de


dados, permitindo a conexão entre as outras
figuras existentes.

Para a representação de um algoritmo em fluxograma


temos algumas regras básicas:

o início e o fim de um algoritmo devem ser representados


?

em separado com a figura ;

cada “passo” da execução do algoritmo deve ser repre-


?
sentado em separado e descrito dentro de uma figura. Por
enquanto, a principal figura que utilizaremos é o retângu-
lo, que representa na maior parte das vezes a execução
de um “passo”. As outras serão apresentadas no decorrer
do curso à medida que novos conceitos forem sendo
apresentados;
Início
as figuras devem ser conectadas
?
por setas que indicam a seqüên- Colocar a pasta na escova
cia de execução do algoritmo.
Molhar a escova

Utilizando como exemplo o algo-


ritmo de “escovar os dentes” apresen- Escovar

tado no item anterior, teríamos que sua


Enxaguar a boca
descrição seria descrita pelo fluxogra-
ma abaixo.
Enxaguar a escova

Observe, na Figura 2.1, que a Fim

seqüência é criada utilizando-se setas Figura 2.1: Fluxograma do


34 ligando as figuras. Observe também que Algoritmo de “Escovar os Dentes”
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

o início e o fim do algoritmo são marca- Início


dos por figuras específicas e que cada
“passo” é descrito em uma figura em Pegar uma escada

separado.
Posicionar a escada
embaixo da lâmpada
Outro exemplo é o algoritmo de
“trocar uma lâmpada” descrito anteri- Buscar uma lâmpada nova

ormente e representado pelo fluxogra-


Subir na escada
ma mostrado a seguir.

Retirar a lâmpada velha


Como último exemplo, vamos
utilizar um algoritmo computacional Colocar a lâmpada nova
que calcula a média de dois números.
Observe que iremos utilizar figuras Fim
para representar as operações compu- Figura 2.2: Algoritmo para
tacionais de entrada e saída de dados “trocar uma lâmpada”

(verifique as figuras na tabela 2.2).

Início
A principal vantagem do uso do
fluxograma é que muitas vezes o
N1
entendimento de sua representação
gráfica é mais fácil e simples que
utilizando apenas a escrita. Como N2

veremos também diversas das estrutu-


ras utilizadas em algoritmos computa- Média = (N1 + N2)/2
cionais são representadas em fluxogra-
mas por meio de figuras específicas,
evitando a imprecisão característica da Média
linguagem narrativa.

Fim

Figura 2.3: Algoritmo para


calcular a soma de
dois números 35
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

ATIVIDADES

2.2 Crie fluxogramas para executar os seguintes algoritmos.


trocar um pneu;
?
tomar banho;
?
fazer o produto de dois números: N1 e N2 (utilize a figura
?
para entrada de dados de cada um dos números);

2.3. Português Estruturado ou Pseudocódigo

Essa forma de representação, também chamada de “portu-


gol” ou pseudocódigo, consiste na descrição estruturada, por
meio de regras predefinidas, de passos (ou instruções) a serem
realizados para a resolução do problema. O português estrutu-
rado utiliza a linguagem natural para representar o raciocínio.
No caso brasileiro, a linguagem natural é o Português, que será
utilizado na representação. Para a Espanha ou França, por
exemplo, seriam utilizados o Espanhol e o Francês respectiva-
mente.

Suponha o exemplo de calcular a soma de dois números e


observe as características descritivas existentes no português
estruturado a seguir:

36
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

algoritmo "Soma de dois números"


var
N1,N2,Soma: inteiro

inicio
escreva ("Entre com o primeiro número (N1)")
leia (N1)
escreva ("Entre com o segundo número (N2)")
leia (N2)
Soma <- (N1+N2)
escreva ("A soma dos números é")
escreva (Soma)
fimalgoritmo

Algoritmo 2.1 – Soma de dois número

Observe as seguintes características:

há regras sobre como o algoritmo deve ser descrito.


?
Observe que N1, N2 e Soma são “declarados” no início do
algoritmo;
o início e o fim do algoritmo são claramente representa-
?
dos
os “passos” que podem ser realizados são descritos em
?
uma linguagem única e padronizada.

Enquanto a linguagem narrativa ou de comunicação é


prolixa e imprecisa, o português estruturado agrega regras e
normas que permitem a representação organizada e eficiente da
solução algorítmica. No entanto, faz-se necessário aprender as
regras utilizadas na representação dos algoritmos.

Assim não se preocupe se você não entendeu completa-


mente o exemplo mostrado. A partir de agora nos dedicaremos a
estudar esta forma de representar algoritmos!

Entre as duas formas de representação apresentadas


37
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

(fluxograma e português estruturado), o português estruturado


será o mais relevante no desenvolvimento deste estudo, porque
através dele se conseguirá:

facilitar o desenvolvimento dos algoritmos;


?
facilitar o seu entendimento pelo ser humano;
?
antecipar à depuração (localização de erros) em sua
?
lógica;
facilitar a sua manutenção e modificação;
?
?facilitar e agilizar a sua codificação (escrita do progra-
ma);
permitir o desenvolvimento simultâneo de vários profissi-
?
onais (trabalho em equipe).

Por meio dessa última representação de raciocínio (portu-


guês estruturado), alia-se a facilidade de uso da linguagem
natural do indivíduo, com a técnica de desenvolvimento estrutu-
rado. Apesar disso, essa junção, por si só, ainda não atinge
automaticamente os objetivos visados, ela apenas preconiza
uma ajuda sistemática para o alcance deste objetivo. Sua
aplicação ainda conta com o esforço e a disciplina incessante na
busca da simplicidade e da clareza, que fornecerão facilidades
inestimáveis à manutenção e modificação evolutiva do algorit-
mo.
É importante ter a consciência de que:

O algoritmo é a parte mais importante no desenvolvi-


mento de um programa, pois é nele que está a lógica do
programa.

38
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

ATIVIDADES

2.3 Crie algoritmos em portugol para executar os seguintes


algoritmos.
trocar um pneu;
?
tomar banho;
?

39
Tecnologia em Análise e
Tecnologia em
Desenvolvimento AnáliseIntrodução
de Sistemas e Desenvolvimento
à Informática de Sistemas
Lógica de Programação I

Capítulo 3

O VisuAlg
3.1. Introdução

O Visualg(VisuAlg) é um programa que edita, interpreta e


executa algoritmos como um programa normal de computador
em pseudocódigo ou “Português Estruturado”. É um ótimo
recurso para quem está iniciando no aprendizado de algoritmos,
não só para praticar a sua criação, mas também para melhor
entender a sua execução através de seus múltiplos recursos.

O Visualg atualmente se encontra na versão 2.0 e possui


recursos como simulação da "tela" do computador, visualização
de variáveis, "breakpoints", ajuda on-line, impressão dos fontes
e outras características que auxiliam o aprendizado das técnicas
de programação.

Esta ferramenta será utilizada no restante deste curso para


o ensino de algoritmos estruturados.

3.2. A Tela Principal do VisuAlg 2.0

A tela do VisuAlg compõe-se da barra de tarefas, do editor


40 de textos (que toma toda a sua metade superior), do quadro de
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

variáveis (no lado esquerdo da metade inferior), do simulador de


saída (no correspondente lado direito) e da barra de status.
Quando o programa é carregado, já apresenta no editor um
"esqueleto" de pseudocódigo, com a intenção de poupar trabalho
ao usuário e de mostrar o formato básico que deve ser seguido.
Explicaremos a seguir cada componente da interface do VisuAlg,
mostrado na figura 3.1.

Figura 3.1: Tela Inicial do VisualG

3.2.1 A barra de Tarefas do VisuAlg

A barra de tarefas, visto na figura 3.2, contém os comandos


mais utilizados no VisuAlg (estes comandos também podem ser
acessados pelo menu ou por atalhos no teclado).
41
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

Figura 3.2: Barra de Tarefas do VisuAlg

A seguir é apresentada uma descrição sucinta dos comandos


relacionados com a edição de arquivos. Os outros serão apresen-
tados mais tarde, à medida que aprendermos a escrever algorit-
mos.

Abrir (Ctrl-A): Abre um arquivo anteriormente gravado,


?
substituindo o texto presente no editor. Se este tiver sido
modificado, o VisuAlg pedirá sua confirmação para salvá-
lo antes que seja sobreposto.
Novo (Ctrl-N): Cria um novo "esqueleto" de pseudocódigo,
?
substituindo o texto presente no editor. Se este tiver sido
modificado, o VisuAlg pedirá sua confirmação para salvá-
lo antes que seja sobreposto.
Salvar (Ctrl-S): Grava imediatamente o texto presente no
?
editor. Na primeira vez que um novo texto é gravado, o
VisuAlg pede seu nome e localização.
Imprimir: Imprime imediatamente na impressora padrão
?
o texto presente no editor. Para configurar a impressão,
use o comando Imprimir do menu Arquivo (acessível
também pelo atalho Ctrl-P).
Cortar (Ctrl-X): Apaga texto selecionado, armazenando-o
?
em uma área de transferência.
Copiar (Ctrl-C): Copia o texto selecionado para a área de
?
42 transferência.
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

Colar (Ctrl-V): Copia texto da área de transferência para


?
o local em que está o cursor.
Gravar bloco de texto: Permite a gravação em arquivo de
?
um texto selecionado no editor. A extensão sugerida para
o nome do arquivo é .inc.
Inserir bloco de texto: Permite a inserção do conteúdo de
?
um arquivo. A extensão sugerida para o nome do arquivo é
.inc.
Desfazer (Ctrl-Z): Desfaz último comando efetuado.
?

Refazer (Shift-Ctrl-Z): Refaz último comando desfeito.


?

Localizar (Ctrl-L): Localiza no texto presente no editor


?
determinada palavra especificada.
Substituir (Ctrl-U): Localiza no texto presente no editor
?
determinada palavra especificada, substituindo-a por
outra.
Corrigir Indentação (Ctrl-G): Corrige automaticamente a
?
indentação (ou tabulação) do pseudocódigo, tabulando
cada comando interno com espaços à esquerda.
Numerar linhas: Ativa ou desativa a exibição dos números
?
das linhas na área à esquerda do editor. A linha e a coluna
do editor em que o cursor está em um determinado
momento também são mostradas na barra de status
(parte inferior da tela). Por motivos técnicos, esta opção
é automaticamente desativada durante a execução do
pseudocódigo, mas volta a ser ativada logo em seguida.

3.2.2 Barra de Status

Situada na parte inferior da tela, esta barra contém dois


painéis: o primeiro mostra a linha e a coluna onde o cursor está, e 43
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

o segundo mostra a palavra “modificado” no caso em que o


pseudocódigo tenha sido alterado desde que foi carregado ou
salvo pela última vez. A barra de status pode ser vista na figura
3.3.

Figura 3.3: Barra de Status do VisuAlg

3.2.3. Quadro de Variáveis

O quadro de variáveis (figura 3.4), é formado por uma grade


na qual são mostrados o escopo de cada variável, seus nomes e o
seu valor corrente. Será mostrado em maiores detalhes quando
for apresentado o conceito de variáveis.

Figura 3.4: Quadro de Variáveis

3.3.A Linguagem

A linguagem que o VisuAlg interpreta é bem simples: é uma


versão de um pseudocódigo em Português largamente utilizado
e, como nós vimos, também conhecido como "Portugol".

Para facilitar a digitação e evitar confusões, todas as


palavras-chave do VisuAlg foram implementadas sem acentos e
caracteres especiais como o cedilha. Portanto, para a palavra
lógico ser escrita em um algoritmo, deve ser escrita como logico.
Do mesmo modo as palavras se..então..senão devem ser escri-
44
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

tas como se..entao..senao, e assim por diante. O VisuAlg tam-


bém não distingue maiúsculas e minúsculas no reconhecimento
de palavras (case insensitive).

Formato Básico do Pseudocódigo e Inclusão de


Comentários

O formato básico do nosso pseudocódigo é o seguinte:

algoritmo "semnome"
// Função :
// Autor :
// Data :
inicio
// Seção de Comandos
fimalgoritmo

A primeira linha é composta pela palavra-chave algoritmo


seguida do seu nome delimitado por aspas duplas. Este nome
será usado como título nas janelas de leitura de dados. A seção
que se segue é a de declaração de variáveis, que termina com a
linha que contém a palavra-chave inicio. Deste ponto em diante
está a seção de comandos, que continua até a linha em que se
encontre a palavra-chave fimalgoritmo. Esta última linha marca
o final do pseudocódigo: todo texto existente a partir dela é
ignorado pelo interpretador.
O VisuAlg permite a inclusão de comentários: qualquer
texto precedido de "//" é ignorado, até se atingir o final da sua
linha.

45
Tecnologia em Análise e
Tecnologia em
Desenvolvimento AnáliseIntrodução
de Sistemas e Desenvolvimento
à Informática de Sistemas
Lógica de Programação I

Capítulo 4

Tipos de Dados
e Variáveis
4.1. Introdução: funcionamento do acesso
à memória em um computador

A tecnologia atual de computadores envolve vários disposi-


tivos eletrônicos, que são interligados coerentemente (figura
4.1). Estes circuitos eletrônicos fazem a distinção entre dois
tipos de sinais elétricos, caracterizados pela passagem de cor-
rente elétrica em um ou dois sentido. Desta forma, os computa-
dores representam dados e operações por meio de dois símbolos,
constituindo a linguagem binária, usualmente descrita com 0 e 1
(zero e um).

Processador
UCP
Dispositivo Dispositivo
de Entrada de Saída
(Teclado mouse, Leitura Escrita (Impressora
etc.) vídeo, disco, etc.)

Memória
Entrada (Endereço e conteúdo) Saída

Dados
Controle

46 Figura 4.1: Elementos do computador


Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

A Unidade Central de Processamento (Figura 4.1) de um


computador utiliza uma memória de alta velocidade para arma-
zenar, temporariamente, dados e programas que estão sendo
processados, uma vez que um programa para ser executado tem
que estar na memória. Esta memória e denominada “memória
principal”, “memória de trabalho” ou “memória temporária”.

EXEMPLO DA VIDA REAL

Para entender melhor o que significa a memória no


aspecto computacional, imagine a seguinte situação do
mundo real:

Imagine um armário repleto de gavetas, onde seriam


armazenados fisicamente os objetos. Esses objetos podem ser
substituídos. Os objetos seriam os dados e as gavetas as
variáveis

A memória é semelhante, pois na memória (armário)


existem inúmeras variáveis (gavetas). Cada variável (gave-
ta) pode guardar apenas um dado (objeto) de cada vez, sendo
de um mesmo tipo (tipo primitivo).

A B C

Figura 4.2: Armários e gavetas 47


Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

MEMÓRIA RAM (Random Access Memory): Ela também é


chamada “memória principal”,” memória de trabalho” ou
“memória temporária” (Random Access Memory - RAM), consis-
tindo de uma seqüência finita de unidades de armazenamento de
dados identificadas por um endereço único, descrito por um
número inteiro não negativo;

Vamos entender alguns conceitos importantes:

BIT:
?É o menor item da informação binária.
? A palavra bit é uma contração de Binary digit (dígito
binário). Significa que um dígito pode assumir um dos dois
valores ou estados diferentes 0 ou 1.
?Os bits quando são agrupados podem representar dados e
programas.

BYTE:
?É um conjunto de bits. (figura 4.3).
?Um byte é formado por 8 bits.

PALAVRA:
?É um conjunto de bytes.
?Uma palavra e formada por bytes, a quantidade de bytes
que formará uma palavra depende da máquina considera-
da.
byte

10110101010000
bit

Figura 4.3: Bit e Byte

A memória de um computador é constituída por um conjun-


to de bits, sendo que o byte, ou palavra, recebe um endereço a
48 fim de que os programas possam fazer referência aos seus dados.
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

A capacidade de um computador é medida pelo tamanho de


sua memória e a unidade utilizada para fazer essa medida é o
byte.

Cada 1024 Bytes representam 1 Kbyte (quilobyte).


Cada 1024 Kbytes representam 1 Mbyte (megabyte)

4.2 Constantes e Variáveis

Para entendermos melhor o uso da memória dentro dos


programas vamos introduzir o conceito de variável, constante e
identificadores.

4.2.1 Conceitos Iniciais

Variáveis e constantes são locais na memória principal,


com endereços que armazenam conteúdos. Em linguagens de
programação de alto nível, nos é permitido dar nomes a esses
endereços da memória para facilitar a programação, é o que
chamamos de Identificadores das constantes ou das variáveis do
programa.

4.2.2 Constantes

Uma constante é um determinado valor fixo que não se


modifica ao longo do tempo [FARRER89]. A constante é um dado
que pode ser criado pelo programador para armazenar um único
valor de um tipo definido. Este dado não sofre variações no seu
valor armazenado, ou seja:
49
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

O valor guardado em uma constante não sofre altera-


ção, se mantendo sempre o mesmo após a sua criação.

Este valor é constante do início até o fim da execução do


algoritmo, assim como é constante para as diferentes execuções
no tempo.

O nome dado a uma constante é um identificador. Quando


esta constante, descrita no algoritmo é traduzida para um
programa no computador, ela ocupará uma área da memória que
poderá ser acessada por meio de seu nome (identificador), mas o
valor armazenado nela nunca poderá ser alterado enquanto o
programa estiver em execução.

Não é possível modificar o conteúdo da


LEMBRE-SE:
constante.

USANDO O VISUALG

O VisuAlg tem três tipos de constantes:


?Numéricos: Podem ser inteiros ou reais. O separador de
decimais é o ponto e não a vírgula. O VisuAlg também não
suporta separadores de milhares.
Caracteres: qualquer cadeia de caracteres delimitada
?
por aspas duplas (").
Lógicos: admite os valores VERDADEIRO ou FALSO.
?

4.2.3. Variáveis

Uma variável fornece o nome a uma área de memória que


50 pode armazenar um ou vários valores de um mesmo tipo de dado.
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

Uma variável é identificada e acionada por um nome (iden-


tificador). Cada variável corresponde a uma posição de memó-
ria, cujo conteúdo pode ser alterado ao longo do tempo durante
a execução de um programa. Embora uma variável possa assumir
diferentes valores, ela só pode armazenar um valor a cada
instante.

No intuito de consolidar o conceito e a utilização das variá-


veis, considere o exemplo a seguir:

EXEMPLO DA VIDA REAL

Você acabou de comprar um par de sapatos e é óbvio que


eles lhe foram entregues dentro de uma caixa. Esta caixa era
resistente e bela e você resolveu reutilizá-la para guardar
alguns documentos profissionais seus. Assim, sempre que
você desejava encontrar um documento deste tipo, sabia
exatamente onde eles estavam guardados. Com o passar do
tempo você trocou o conteúdo armazenado na caixa, passan-
do a guardar as suas caixas de CD. Com o desgaste da caixa
você, finalmente, resolveu jogá-la fora.

EXEMPLO 4.1 - Exemplos de variáveis


Conteúdo
Variável da variável

Variáveis Nome = “José”

Total = Produto x Quantidade Idade = 50

Figura 4.4: Variáveis 51


Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

Na situação anterior pode-se observar a variação do conte-


údo armazenado pela mesma caixa de sapatos. Esta variação
aconteceu de acordo com a sua necessidade no armazenamento
de coisas ao longo do tempo.

Uma variável funciona de forma similar a caixa de sapatos,


sendo que, como já vimos, ela é um espaço de memória que o
computador reserva para utilização de um programa. Quando o
programa termina, a variável é destruída, assim como a caixa de
sapatos foi jogada fora.

4.2.4. Identificadores

Vamos conhecer melhor este conceito.


Identificador é o nome fornecido a um recurso computacio-
nal que o identifica. Um exemplo são os nomes próprios de
pessoas. Para identificar alguém você a chama pelo nome, pois
este a identifica como uma pessoa única. Quando alguém precisa
falar com você, simplesmente chama o seu nome.

EXEMPLO DA VIDA REAL

Continuando o exemplo do armário com várias gavetas


apresentado anteriormente. Observe que se no armário
(memória) existem inúmeras gavetas (variáveis), se faz
necessário diferenciá-las, o que é feito por meio de etiquetas
ou rótulos (Identificadores).

Da mesma forma que as gavetas do exemplo, em um algo-


ritmo todos os recursos de armazenamento e manipulação de
dados devem possuir nomes únicos que os identifiquem. Desta
52
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

forma, quando um recurso for ser usado, ele será acionado pelo
seu nome para participar do processamento desejado dentro do
algoritmo.

Os identificadores são conjuntos de caracteres, que repre-


sentam constantes, variáveis, tipos, procedimentos, unidades,
programas e campos de um registro. A formação deste conjunto
de caracteres segue regras pré-determinadas, que são:

Podem ter qualquer tamanho, mas no VisuAlg são conside-


?
rados apenas os 30 primeiros caracteres.

EXEMPLO 4.2:
Alpha J , XJ, XYZ J, FGTS J
?Devem começar por um caractere alfabético, ou seja, por
uma letra;

EXEMPLO 4.3:
Notas J Salário J 98_notas L 5x L
?Não devem ser usados caracteres especiais (!@#$%&*/-
+<>?), ou seja no identificador só pode ter, após o primei-
ro caractere, letras, números e sublinhada ( _ );

EXEMPLO 4.4:
A:B ou a:b L x-y ou X-Y L nota 2 J
a98_notas J a_5x L
? Podem ser seguidos por mais caracteres alfabéticos ou
numéricos;

EXEMPLO 4.5:
A23 J abc123 J
?Não podem conter espaços em branco;
53
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

EXEMPLO 4.6:
Nome próprio L abc 123 L
?Devem ser únicos;
?Não podem ter o mesmo nome de uma palavra reservada.

USANDO O VISUALG [HELPVISUALG]

Nomes de Variáveis e sua Declaração

Os nomes das variáveis devem começar por uma letra e


depois conter letras, números ou underline, até um limite de
30 caracteres. As variáveis podem ser simples ou estruturadas
(na versão atual, os vetores podem ser de uma ou duas dimen-
sões). Não pode haver duas variáveis com o mesmo nome,
com a natural exceção dos elementos de um mesmo vetor.

ATIVIDADES

4.1 – Marque (C) para correto e (I) para incorreto dentre os


identificadores abaixo; justificar os Incorretos.
a. W2YZ;
b. B10PQ;
c. AB,3Y;
d. 432mudar;
e. Lápis.cor;
f. Dia noite;
g. And;

4.2 – Assinale os identificadores válidos.

54 a) (w)
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

b) AwA
c) UHHi?
d) “maria”
e) *10
f) cm/G
g) P{0}
h) ASDRUBAL
i) DIAMÊS/ANO
j) TELEFONE

4.3. Conceito de tipos de dados

Enquanto apresentávamos os conceitos de constantes e


variáveis diversas vezes citamos os tipos de dados. Vamos agora
apresentar este conceito.

Um tipo de dado é a identificação de como um dado poderá


se apresentar, qual a sua simbologia e quais operações podem ser
realizadas sobre o mesmo. Os tipos de dados escalares ou primi-
tivos são: inteiro, real, caractere e lógico.

Veja a seguir uma especificação mais detalhada dos tipos


de dados primitivos que um computador pode processar.

4.3.1 Tipos Primitivos

Antes de falar de tipos primitivos, vamos entender um


conceito muito importante: a informação. A informação é a
matéria-prima que faz com que seja necessária a existência dos
computadores, pois eles são capazes de manipular e armazenar
um grande volume de dados com alta performance, liberando o
homem para outras tarefas nas quais seu conhecimento é indis-
pensável [FORBELONE]. 55
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

Pode não parecer, mas existe uma diferença entre dado e


informação. Por exemplo, ao citarmos uma data, como “24 de
outubro”, estamos apresentando um dado; ao dizermos que esta
data é o dia do aniversário da cidade de Manaus, estamos agre-
gando valor ao dado, apresentando uma informação.

Como vimos anteriormente o computador gera informação


através da manipulação dos dados que são armazenados nas
variáveis do programa. Este dado armazenado na variável do
programa pode ser de vários tipos primitivos: inteiro, real,
caractere, lógico entre outros [Lopes 02]. Quando ensinamos
algoritmos, trabalhamos com os quatro tipos citados.

Podemos agrupar estes tipos em: Numéricas, String,


Lógicas

4.3.1.1 Numéricas

São as variáveis e constantes que armazenam dados numé-


ricos representados por valores inteiros ou reais.

INTEIRO:
- Toda e qualquer informação numérica que pertença ao
conjunto dos números inteiros relativos (negativa, nula
ou positiva) [FORBELONE].
- Os números inteiros são aqueles que não possuem
componentes decimais ou fracionários, podendo ser
positivos ou negativos. [LOPES 02]

EXEMPLO 4.7
Vejamos algumas proposições declarativas comuns em que
56 é usado o tipo inteiro:
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

a) Ele tem 15 irmãos.


- Observe que 15 é um dado do tipo inteiro e a informação
surge quando associamos que 15 é o numero de irmãos

b) A escada possui 8 degraus.


- Observe que 8 é um dado do tipo inteiro e a informação
surge quando associamos que 8 é o numero de degraus

c) Meu vizinho comprou 2 carros novos.


- Observe que 2 é um dado do tipo inteiro e a informação
surge quando associamos que 2 é o número de carros
novos

REAL:
Toda e qualquer informação numérica que pertença ao
conjunto dos números reais (negativa, nula ou positiva),
corresponde ao conjunto matemático dos valores numé-
ricos reais.

EXEMPLO 4.8
Vejamos algumas proposições declarativas comuns em que
é usado o tipo real:
a) Ela tem 1,73 metros de altura.
b) Meu saldo bancário e de 1000,00 reais.
c) No momento a bebê pesa 10 kilos.

4.3.1.2 String

Também conhecida como caractere, alfanumérica ou


literal. Formadas por um caractere ou uma seqüência de carac-
teres aceitos na simbologia da linguagem (símbolos especiais,
letras e números). Elas são representadas pelos caracteres
correspondentes colocados entre aspas (" "). 57
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

CARACTER:
Toda e qualquer informação composta de um conjunto
de caracteres alfanuméricos: numéricos(0..9),
alfabéticos (A..Z,a..z) e especiais (por exemplo *, &, ^,
%, #, $), estando sempre descritos entre aspas (“”). O
conjunto de caracteres também é chamado de cadeia de
caracteres ou string.

EXEMPLO 4.9
Vejamos algumas proposições declarativas comuns em que
é usado o tipo caractere:
a) Constava no aviso “Não entre.”.
b) O parque municipal estava repleto de placas: “Não pise
na grama”.
c) O nome do santo é “São Jorge”.

4.3.1.3 Lógicas

Também conhecido como Booleano. É representada no


algoritmo pelos dois únicos valores lógicos possíveis:
VERDADEIRO/ FALSO ou SIM/NÃO ou TRUE/FALSE ou 1/0.

LÓGICO:
Toda e qualquer informação que pode assumir apenas
duas situações (biestáveis). Conjunto de valores possíve-
is na lógica convencional (booleana) - FALSO ou
VERDADEIRO. Esse tipo só apresenta um desses dois
valores, sendo eles mutuamente exclusivos.

58
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

EXEMPLO 4.10
Vejamos algumas proposições declarativas comuns em que
é usado o tipo lógico:
a) A porta está aberta ou fechada.
b) A lâmpada pode estar acesa ou apagada.

Uma vez definidos o nome (identificador) e


o tipo de uma variável ou constante, não é
IMPORTANTE:
possível alterá-los no decorrer de um algo-
ritmo.

ATIVIDADES

4.3 – Escreva o tipo de dado ideal par se representar as seguintes


informações.
a. O número de telefone;
b. Número de alunos de uma classe
c. Se uma pessoa gosta de bolo ou não.
d. O valor de um carro.
e. A cor de uma casa.
f. Resultado de uma divisão.
g. Total de jogadores de um time.

4.4 – Identificar os tipos dos seguintes dados.


a) “Mariana”
b) 0.10;
c) “11.9E10”;
d) False;
e) “!”;
f) “ ”;
g) 30
59
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

4.5 – Declare corretamente as variáveis e os respectivos tipos


primitivos para:
a) NOME DO ALUNO:
b) NOTA DO ALUNO:
c) NÚMERO DA MATRÍCULA:
d) SEXO:

4.6 – Identifique os erros nas declarações de variáveis apresenta-


das a seguir:
a) Inteiro: NOTA, RUA
b) Caracter: PESO,NOME,ENDERECO
c) Real: MENSALIDADE, PESO
d) Lógico: NOTA, APROVADO

4.7 – Determine qual o tipo primitivo de informação presente nas


sentenças a seguir:
a) Na placa esta escrito “Não pise na grama”.
b) O preço das 5 maçãs era 4,50 reais.
c) A altura do prédio era de 20 metros.
d) Nos jogos do Pan Xuxa ganhou 3 medalhas e alcançou o record
de 40,2 segundos

4.8 – Determine qual o tipo primitivos dos seguintes dados:


a) 10
b) 10.0
c) -10
d) “10”
e) -30.025x 10 13
f) “fim de questão”

60
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

4.4. Declaração de Variáveis e Constantes

Como citamos anteriormente, as variáveis e as constantes


podem ser basicamente de quatro tipos: numéricas, caracteres,
alfanuméricas ou lógicas.

A especificação do tipo de dados correto é fundamental


para o computador, pois ele reconhecerá quais dados podem ou
não sofrer determinadas manipulações e quais as necessidades
de espaços para a efetivação do armazenamento de cada dado
ou informação a ser processada.

No caso das variáveis, elas só podem armazenar valores de


um mesmo tipo. Veja a seguir uma especificação mais detalhada
dos tipos de dados primitivos que um computador pode proces-
sar.

Mas agora surge uma pergunta: Qual o tamanho do espaço


de memória que o computador reserva para meu programa? Isso
é você, programador, quem decide.

EXEMPLO DA VIDA REAL

Na caixa de sapatos, vista anteriormente, provavel-


mente não caberiam todos os seus livros da estante, e seria
no mínimo impróprio se tentar guardar água dentro dela. É
por isso que uma variável deve ter o seu tipo de dado defini-
do, identificando por meio dele, exatamente, quais as
informações que poderão ser armazenadas nesta variável.

Como pôde ser observado, a declaração de variáveis é bem


parecida com a de constantes, devendo ser informado qual o tipo 61
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

de seu conteúdo e qual o seu nome. A principal diferença entre


estes recursos ou objetos consiste na possibilidade de modifica-
ção do conteúdo armazenado na variável, sendo ele alterado
quantas vezes forem necessárias para o correto funcionamento
do algoritmo e conseqüentemente do programa.

USANDO O VISUALG [HELPVISUALG]

A seção de declaração de variáveis começa com a palavra-


chave var, e continua com as seguintes sintaxes:

<lista-de-variáveis> : <tipo-de-dado>
<lista-de-variáveis> : vetor "["<lista-de-
intervalos>"]" de <tipo-de-dado>

Na <lista-de-variáveis>, os nomes das variáveis estão separa-


dos por vírgulas.

4.5 Uso de Variáveis na Entrada e Saída de Dados

Para fazer uma comida precisamos seguir uma receita. Na


receita encontramos a declaração dos ingredientes necessários
para sua execução e temos uma saída que e o produto resultante
deste processo que será a comida.

Entrada Processamento Saída

? ??
Percepção das
impressões
sensoriais
?
?
Saída do resultado
Processo de Pensamento dos processos
Com o auxílio da nossa memória,
de pensamento
executamos diversos processos,
como controlar, comparar
combinar, deduzir, etc.
62 Figura 4.5 - Representação do Processamento
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

No processo de execução da receita inserimos os diversos


ingredientes declarados, realizando assim uma entrada de
substâncias, executamos os passos descritos para então termos
como saída deste processo a comida pronta.

Analogamente podemos dizer que:

Papa de carne, cenoura e mandioca


Ingredientes:

110g de mandioca
100g de cenoura pequena
Declaração das 1 colher (sopa) de cebola ralada
variáveis de entrada 2 colheres (chá) de azeite de oliva
100g de carne moída
5 colheres (sopa) de macarrão conchinha

Preparo:
Numa panela, aqueça o azeite de oliva e refogue a
cebola até murchar. Acrescente a carne e refogue
por mais 3 minutos. Junte a mandioca e a cenoura
picada e 1 xícara (chá) de água.
Algoritmo
Cozinhe, mexendo de vez em quando, por 25
minutos ou até os legumes ficarem macios. Então,
adicione o macarrão e uma pitada de sal e cozinhe
até ficar macio e com um pouco de caldo. Coloque
a preparação em um prato e amasse.

Saída

Fonte: www.cybercook.com.br
Figura 4.6 - Receita 63
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

Os ingredientes declarados na receita correspondem à


declaração das variáveis de entrada
A receita corresponde ao algoritmo
A comida pronta corresponde à saída.
O Comando de Entrada de Dados que utilizaremos nos
algoritmos apresentados será:

leia (<lista-de-variáveis>)

Através deste comando é possível receber os valores digita-


dos pelos usuários e atribui-los às variáveis cujos nomes estão em
<lista-de-variáveis> (é respeitada a ordem especificada nesta
lista).

USANDO O VISUALG [HELPVISUALG]

Veja no exemplo abaixo o resultado:


algoritmo "exemplo 1”
var x: inteiro;
inicio
leia (x)
escreva (x)
fimalgoritmo

O comando de leitura acima irá exibir uma janela com a


mensagem padrão:
"Entre com o valor de <nome-de-variável>”

O Comando de Saída que utilizaremos nos algoritmos


apresentados será:

escreva (<lista-de-expressões>)

Este comando escreve no dispositivo de saída padrão o


64 conteúdo de cada uma das expressões que compõem <lista-de-
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

expressões>. De acordo com a sintaxe do VisuAlg, as expressões


dentro desta lista devem estar separadas por vírgulas; depois de
serem avaliadas, seus resultados são impressos na ordem indica-
da.

USANDO O VISUALG [HELPVISUALG]

Exemplos:

algoritmo "exemplo”
var x: real
y: inteiro
a: caractere
l: logico
inicio
x <- 2.5
y <- 6
a <- "teste”
l <- VERDADEIRO
escreval ("x", x:4:1, y+3:4) // Escreve: x 2.5 9
escreval (a, "ok") // Escreve: teste ok (e depois pula
linha)
escreval (a, " ok") // Escreve: teste ok (e depois
pula linha)
escreval (a + " ok") // Escreve: teste ok (e depois
pula linha)
escreva (l) // Escreve: VERDADEIRO
fimalgoritmo

65
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

EXEMPLO 4.11
PROBLEMA:
Imprimir a mensagem: “O ALUNO DEVE EXERCITAR PARA
APRENDER”

RESOLUÇÃO:
O Algoritmo 4.1 mostra uma solução que utiliza apenas
uma seqüência simples.

algoritmo "imprimindo frase"

var
num : inteiro

inicio

escreval "O ALUNO DEVE EXERCITAR PARA APRENDER”)

fimalgoritmo

Algoritmo 4.1: Imprime frase.

ATIVIDADES

4.9 Imprimir seu nome


4.10 Ler um número inteiro e imprima-o
4.11 Criar um algoritmo que imprima a media aritmética entre os
números 10, 15 e 20.
4.12 Ler um número inteiro e imprimir seu sucessor e seu ante-
cessor
4.13 Ler dois números inteiros. Antes do resultado deve aparecer
a palavra “Resultado:”

66 4.14 Ler o Nome, Endereço e Telefone e imprimí-los.


Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

4.6 Palavras Reservadas

Os identificadores devem ser únicos dentro do programa,


ou seja, não pode haver duas variáveis ou constantes com o
mesmo nome. Nesta regra inclui-se as palavras reservadas.
Palavras reservadas são identificadores que já foram usados pela
linguagem de programação, ou seja, se caso o programador
utilizar uma palavra reservada para declarar uma variável ou
constante no programa, estará infringindo a regra de que não se
pode repetir o nome dos identificadores em um mesmo algorit-
mo.

Segue abaixo uma tabela de palavras que geralmente são


reservadas, ou seja, que já foram destinadas pelas linguagens de
programação (seja portugol, ou linguagens de programação
comerciais ou acadêmicas) para identificar outros elementos
dentro dos algoritmos.

Estas palavras apresentadas na tabela 4.1 fazem parte da


lista de palavras reservadas do VisuAlg.
Tabela 4.1 - Lista de palavras reservadas

aleatorio fimalgoritmo nao


algoritmo fimenquanto ou
arquivo fimescolha outrocaso
ate fimfuncao para
caractere fimpara passo
caso fimprocedimento pausa
cronometro fimrepita real
debug fimse procedimento
e funcao repita
eco inicio retorne
enquanto int se
entao inteiro senao
escolha interrompa timer
escreva leia var
escreval limpatela vetor
faca logico verdadeiro
falso mod xou
67
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

4.7 Revisão

Variáveis e constantes são os elementos básicos que um


programa manipula, é um espaço reservado na memória do
computador para armazenar um tipo de dado determinado.
Variáveis e constantes devem receber nomes para poderem ser
referenciadas e no caso das variáveis, para poderem ser
modificadas quando necessário. Um programa deve conter
declarações que especificam de que tipo são as variáveis e as
constantes que ele utilizará e um valor inicial, não obrigatório no
caso das variáveis. Esses tipos podem ser derivados dos tipos
primitivos como, por exemplo: inteiros, reais, caracteres, etc.
As expressões combinam variáveis e constantes para calcular
novos valores.

A seguir estão detalhados esses conceitos.

68
Tecnologia em Análise e
Tecnologia em Análise e Desenvolvimento deIntrodução
Sistemas à Informática Desenvolvimento de Sistemas
Lógica de Programação I

Capítulo 5

Expressões e operadores
Os operadores têm grande utilidade no desenvolvimento de
algoritmos, com eles é possível comparar e efetuar cálculos
entre constantes e variáveis. Comandos utilizando operadores
serão muito utilizados em nossos algoritmos.

A identificação das operações que podem ser executadas


sobre determinados tipos de dados são descritas por símbolos, ou
caracteres específicos, onde as operações aritméticas, relacio-
nais e lógicas são empregadas sobre os dados.

5.1. Operador de Atribuição

A operação de atribuição é uma forma muito natural para


especificar que uma variável irá receber um valor.
O comando de atribuição permite que seja fornecido um
valor a certa variável, porém, a natureza deste valor tem que ser
compatível com o tipo da variável na qual está sendo armazena-
do.

A operação de atribuição consiste na possibilidade de um


recurso ou objeto poder receber (ou armazenar) um dado
(ou valor).
69
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

OPERAÇÃO SÍMBOLO
ATRIBUIÇÃO

A representação geral do comando de atribuição é:

IDENTIFICADOR EXPRESSÃO

Onde:

IDENTIFICADOR é o nome da variável a qual esta sendo atribuído o


valor;

ßÉ o símbolo de atribuição

pode ser uma expressão aritmética, expressão lógica


EXPRESSÃO ou expressão literal de cuja avaliação é obtido o valor
a ser atribuído a variável.

Sua sintaxe sempre atribui ao recurso identificado à


esquerda do símbolo de atribuição o valor ou resultado da opera-
ção existente a direita do mesmo símbolo.

EXEMPLO 5.1

X
? 10
Indica que a variável x irá receber o valor 10. Portanto a
?
variável X á do tipo NUMÉRICO INTEIRO

Y
? 5.2 + 3.0
Indica que a variável Y ira receber o RESULTADO da
?
EXPRESSÃO 5.2+3.0 que é 8.2, logo a variável Y é do tipo
NUMÉRICO REAL

Após a execução do comando a variável conterá o valor


70 atribuído e uma vez que uma palavra na memória pode conter
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

somente um valor por vez, o valor atual substitui qualquer valor


armazenado anteriormente na palavra. Assim pode-se dizer que
esta é uma operação destrutiva, pois qualquer valor que a variá-
vel possuía antes do processamento da operação de atribuição se
perdeu, sendo substituído pelo novo valor.

Observe esta seqüência de operações de atribuições:

X ß
500
X ß
1000
X ß
200

Ao final da seqüência o valor da variável X será 200. Os


valores 500 e 1000 forma destruídos (substituídos).

USANDO O VISUALG [HELPVISUALG]

A atribuição de valores as variáveis é feita com o operador


<-. Do seu lado esquerdo fica a variável à qual está sendo
atribuído o valor, e à sua direita pode-se colocar qualquer
expressão (constantes, variáveis, expressões numéricas),
desde que seu resultado tenha tipo igual ao da variável.
Alguns exemplos de atribuições, usando as variáveis
declaradas acima:

a <- 3
Valor1 <- 1.5
Valor2 <- Valor1 + a
vet[1] <- vet[1] + (a * 3)
matriz[3,9] <- a/4 – 5
nome_do_aluno <- "José da Silva"
sinalizador <- FALSO

71
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

5.2 Expressões Aritméticas:


EXPRESSÕES ARITMÉTICAS: Expressões cujos operadores
são aritméticos e cujos operandos são constantes ou variáveis do
tipo numérico (inteiro ou real)

As expressões aritméticas são realizadas através dos opera-


dores aritméticos.

5.2.1. Operadores aritméticos

Os operadores aritméticos são os utilizados para obter


resultados numéricos. São conjuntos de símbolos que represen-
tam as operações básicas da matemática como: adição, subtra-
ção, multiplicação, divisão, e exponenciação.

As operações aritméticas mais comuns são representadas


pelos símbolos descritos na tabela 5.1.
Tabela 5.1 - Operações Aritméticas
FUNCÃO OPERADOR OPERANDOS RESULTADOS EXEMPLOS
Adição + Inteiro, Real Inteiro, Real 4+4, a+b
Subtração - Inteiro, Real Inteiro, Real 4-5, a-b
Multiplicação * Inteiro, Real Inteiro, Real 4*5, A*B
Divisão / Inteiro, Real Real 4/5, a/b
Divisão inteira DIV Inteiro Inteiro
Resto da divisão MOD Inteiro Inteiro

Na resolução das expressões aritméticas, as operações


guardam uma hierarquia entre si, como mostra a tabela 5.2.
Tabela 5.2 - Hierarquia das Operações Aritméticas
PRIORIDADE OPERADORES
1º ( ) Parênteses
2º Exponenciação
3º Multiplicação, divisão (o que aparecer primeiro)
4º + ou – (o que aparecer primeiro)
72
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

EXEMPLO 5.2

TOTAL = PREÇO * QUANTIDADE

3 * (1—2) + 4 * 2 = 5

EXEMPLO 5.3 [SALVETTI98]

PROBLEMA :
Calcular a soma de dois números inteiros.

RESOLUÇÃO:
O primeiro passo é obter os dados do problema que são dois
números, em seguida somar esses dois valores e, finalmente,
fornecer o valor de saída, que é o resultado da operação efetua-
da. Vamos ver a seqüência das operações:

- leitura dos dados.


- soma dos valores e
- saída do resultado.

A obtenção dos dados consiste no armazenamento dos


mesmos em localizações da memória do computador, identifica-
das por um endereço. Um endereço pode ser representado por
meio de um nome qualquer, que chamamos de identificador que
compõem as variáveis.

Neste problema a entrada consiste de dois números inteiros


nomeados de A e B. A saída será identificada pela variável SOMA.
A adição é representada por A+B.

73
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

O fornecimento de valores às variáveis A e B é indicado pela


instrução:
leia (A,B)
A atribuição de um valor a uma variável é indicado pelo
símbolo <-:
soma <-(A+B)
Finalmente, para representar a saída de informações,
utilizamos a instrução de saída:
escreva(soma)
O Algoritmo 4.2 mostra uma solução em pseudocódigo.

algoritmo "soma de 2 números"

var
A : inteiro
B : inteiro
soma : inteiro

inicio

leia(A,B)
soma <- (A+B)
escreva(soma)

fimalgoritmo

Algoritmo 5.1: Soma de 2 números.

5.3 Expressões Lógicas

É comum nos algoritmos surgirem situações em que a


execução de uma ação ou seqüência de sub-ações, está sujeita a
certa condição. Esta condição é representada no texto do algo-
ritmo por meio de uma expressão lógica.

EXPRESSÕES LÓGICAS: Expressões cujos operadores são


lógicos ou relacionais e cujos operandos são relações, constantes
74 ou variáveis do tipo lógico.
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

As expressões lógicas sempre retornaram True (Verdadeiro)


e False (Falso). Para se montar expressões lógicas são utilizados
operadores relacionais e operadores lógicos. A seguir você
entenderá o que são e como funciona cada um destes operado-
res. Observe que a utilização das expressões lógicas somente
será aplicada em termos com o mesmo tipo de dados.

5.3.1. Operadores relacionais

Os operadores relacionais são utilizados para comparar


duas expressões ou variáveis e retornar se a comparação é
verdadeira ou falsa (valor lógico). Os valores comparados são
representados por constantes, variáveis ou expressões aritméti-
cas.
Os operadores relacionais são:
Tabela 5.3 - Operadores relacionais
OPERADOR OPERAÇÃO EXEMPLO RESULTADO
= Igual 1=2 FALSE
> Maior 5>2 TRUE
< Menor 11 < 4 FALSE
>= Maior ou Igual 3 >= 3 TRUE
<= Menor ou igual TRUE <= FALSE FALSE
<> Diferente 2 + 3 <> 5 FALSE

Variável com Constante


Variável com variável
Numérica
Os símbolos utili-
zados para comparação
Sim Sim
entre expressões são: Código = Codant Código = 1000

Não Não
Variável com Constante
Alfanumérica

Sim
Nome: “JOSÉ”

Não
Figura 5.1 - Variáveis 75
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

EXEMPLO 5.4
Tendo duas variáveis A = 5 e B = 3, os resultados das expres-
sões seriam:
Expressão Resultado
A=B Falso
A <> B Verdadeiro
A>B Verdadeiro
A<B Falso
A>=B Verdadeiro
A<=B Falso

5.3.2. Operadores lógicos

É possível identificar as operações lógicas por meio dos


símbolos apresentados na tabela 5.4 a seguir. As características
existentes nestas operações são empregadas na elaboração dos
algoritmos e conseqüentemente nos programas que deles resul-
tarão. Os operadores lógicos servem para combinar resultados
de expressões, retornando se o resultado final é verdadeiro ou
falso. Os operadores lógicos são:

Tabela 5.4: Operações lógicas


OPERAÇÃO SÍMBOLO DESCRICÃO
CONJUNÇÃO E – AND Uma expressão AND (E) é verdadeira se todas as
condições forem verdadeiras
DISJUNÇÃO OU – OR Uma expressão OR (OU) é verdadeira se pelo menos
uma condição for verdadeira
NEGAÇÃO NÃO – NOT Uma expressão NOT (NÃO) inverte o valor da expressão
ou condição, se verdadeira inverte para falsa e vice-
versa.

A tabela 5.5 mostra todos os valores possíveis criados pelos


três operadores lógicos (AND, OR e NOT):

76
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

Tabela 5.5 - Valores dos Operadores Lógicos


1O Valor
O
Operador 2 Valor Resultado
T AND T T
T AND F F
F AND T F
F AND F F
T OR T T
T OR F T
F OR T T
F OR F F
T NOT F
F NOT T

A ordem de prioridade em que uma expressão lógica obede-


ce, esta apresentada na tabela 5.6
Tabela 5.6 - Prioridades

Prioridade Operadores
1ª Not
2ª And
3ª Or
4ª = > < >= <= <>

EXEMPLO 5.5

Considere três variáveis A = 15, B =18 e C =11. Os resultados


das expressões seriam:

Expressões Resultado
A=B AND B>C Falso
A <> B OR B<C Verdadeiro
A>B NOT Verdadeiro
A<B AND B>C Verdadeiro
A >= B OR B=C Falso
A <= B NOT Falso

USANDO O VISUALG [HELPVISUALG]

Operadores Aritméticos

+,- Operadores unários, isto é, são aplicados a um único


operando. São os operadores aritméticos de maior 77
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

precedência. Exemplos: -3, +x. Enquanto o operador


unário -inverte o sinal do seu operando, o operador + não
altera o valor em nada o seu valor.

\ Operador de divisão inteira. Por exemplo, 5 \ 2 = 2. Tem a


mesma precedência do operador de divisão tradicional.
Operadores aritméticos tradicionais de adição, subtração,
multiplicação e divisão. Por convenção, * e / têm
+,-,*,/ precedência sobre + e - . Para modificar a ordem de
avaliação das operações, é necessário usar parênteses
como em qualquer expressão aritmética.

Operador de módulo (isto é, resto da divisão inteira). Por


MOD exemplo, 8 MOD 3 = 2. Tem a mesma precedência do
ou % operador de divisão tradicional.

Operador de potenciação. Por exemplo, 5 ^ 2 = 25. Tem a


^ maior precedência entre os operadores aritméticos binários
(aqueles que têm dois operandos).

Operadores de Caracteres

Operador de concatenação de strings (isto é, cadeias de


+ caracteres), quando usado com dois valores (variáveis ou
constantes) do tipo "caractere". Por exemplo: "Rio " + "
de Janeiro" = "Rio de Janeiro".

Operadores Relacionais

Respectivamente: igual, menor que, maior que, menor ou igual


=, <, >, a, maior ou igual a, diferente de. São utilizados em expressões
<=, >=, lógicas para se testar a relação entre dois valores do mesmo tipo.
Exemplos: 3 = 3 ( 3 é igual a 3?) resulta em VERDADEIRO;
<>
"A" > "B" ("A" está depois de "B" na ordem alfabética?) resulta
em FALSO.

Importante: No VisuAlg, as comparações entre strings não


diferenciam as letras maiúsculas das minúsculas. Assim, "ABC" é
igual a "abc". Valores lógicos obedecem à seguinte ordem: FALSO
< VERDADEIRO.
78
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

Operadores Lógicos

Operador unário de negação. não VERDADEIRO =


nao FALSO, e não FALSO = VERDADEIRO. Tem a maior
precedência entre os operadores lógicos. Equivale ao
NOT do Pascal.
Operador que resulta VERDADEIRO quando um dos seus
ou operandos lógicos for verdadeiro. Equivale ao OR do
Pascal.

Operador que resulta VERDADEIRO somente se seus


E dois operandos lógicos forem verdadeiros. Equivale ao
AND do Pascal.
Operador que resulta VERDADEIRO se seus dois
xou operandos lógicos forem diferentes, e FALSO se forem
iguais. Equivale ao XOR do Pascal.

ATIVIDADES

5.1- Considerando que X = 1, Y = 2 e Z = 5, desenvolva.


a. Z mod Y div Y
b. X + Y + Z / 3
c. FRAC (X / Z) + ROUND (Z / Y) * TRUNC (Z / Y)
d. SQRT (Z div Y + X * Y)
e. Z – ABS (X – SQR(Y))
5.2- Dadas as comparações abaixo, escreva os resultados.
a. 3 = 3.0
b. a' <= “A”
c. “=”
d. CASA <> “casa”
e. FALSE = FALSE
f. JOAQUIM' < “JOSE”
g. 22' > “200”
79
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

5.3- Sendo A = TRUE e B = FALSE. Qual o resultado das expressões


abaixo?
a. not A and B or A and not B
b. not (not (A or B) and (A or B))
c. A or B and not A or not B
d. (A or B) and (not A or not B)
5.4 - Tendo as variáveis SALARIO, IR e SALLIQ, e considerando os
valores abaixo. Informe se as expressões são verdadeiras ou
falsas.

SALÁRIO IR SALLIQ EXPRESSÃO V ou F


100,00 0,00 100 (SALLIQ > = 100,00)
200,00 10,00 190,00 (SALLIQ < = 190,00)
300,00 15,00 285,00 SALLIQ = SALÁRIO - IR

5.5 - Sabendo que A=3, B=7 e C=4, informe se as expressões


abaixo são verdadeiras ou falsas.
a. (A+C) > B ( )
b. B >= (A + 2) ( )
c. C = (B –A) ( )
d. (B + A) <= C ( )
e. (C+A) > B ( )

5.6 - Sabendo que A=5, B=4 e C=3 e D=6, informe se as expressões


abaixo são verdadeiras ou falsas.
a. (A > C) AND (C <= D) ( )
b. (A+B) > 10 OR (A+B) = (C+D) ( )
c. (A>=C) AND (D >= C) ( )

80
Tecnologia em Análise e
Tecnologia em Análise e Desenvolvimento de Introdução
Sistemas à Informática Desenvolvimento de Sistemas
Lógica de Programação I

Capítulo 6

Estrutura de um
algoritmo
A partir deste capítulo, os algoritmos serão construídos em
uma estrutura em “pseudocódigo” ou “português estruturado”
como mostrado no Algoritmo 6.1.

algoritmo "<nome do algoritmo>"


Declaração do
var algoritmo

<lista de variáveis> : <tipo>


Seção de declaração
inicio de variáveis
<comando 1>
<comando 2>
<comando 3>
. Bloco de
. comandos
.
<comando n>

fimalgoritmo // isto é um comentário Comentário

Algoritmo 6.1. Estrutura de um algoritmo.

No Algoritmo 6.1, encontramos inicialmente a declaração


do nome do algoritmo, em seguida, vem a seção de declaração
de variáveis e finalmente o corpo do algoritmo, delimitado por
uma estrutura seqüencial como será visto na seção a seguir.
81
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

Comentários feitos dentro dos algoritmos são bem vindos, e são


precedidos de //.

6.1 Estruturas de controle

O fluxo de execução de um algoritmo deve ser tal que


execute as ações necessárias para realizar a tarefa a que se
propõe. Para que isto aconteça, é necessário o uso das estruturas
básicas de controle do fluxo de execução:

Seqüenciação
?
Seleção (Decisão)
?
Repetição (Iteração, Loop)
?

Estas estruturas devem ser combinadas, como um mosaico,


a fim de refletir a solução que se deseja, de acordo com o proble-
ma enunciado.

Nas próximas seções serão descritas as estruturas de con-


trole básicas que serão utilizadas no decorrer deste curso e que
também podem ser encontradas na maioria das linguagens de
programação.

6.1.1 Estrutura Seqüencial

Também conhecida como bloco de comandos, esta é a


estrutura básica mais simples. Trata-se apenas da reunião de
diversos comandos que serão executados de cima para baixo, em
seqüência [FORBELLONE05].

Normalmente cada linha corresponde a um comando para


facilitar a leitura e a compreensão do algoritmo.

82 Estruturas seqüenciais são definidas quando se deseja


Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

agrupar diversos comandos relacionados. A estrutura seqüencial


mais comum é aquela que define o início e o fim do algoritmo
como vemos no Algoritmo 6.1.

DICAS:
Nas linguagens de programação, os comandos são geral-
mente separados por ponto-e-vírgula. Isto possibilita que
mais de um comando seja escrito por linha.
Neste curso de lógica, você deve colocar apenas um
comando por linha, o ponto-e-vírgula não é necessário. Com
esta estratégia, os algoritmos ficam mais legíveis
Outra estratégia muito usada é a de indentar os blocos de
comandos. Indentar significa afastar (use a tecla tab ou 4
espaços) todos os comandos do bloco, de modo que facilite a
leitura do algoritmo.

inicio //identificação do início do bloco de comandos do


algoritmo

<comando 1>
<comando 2>
<comando 3>
.
.
.
<comando n>

fimalgoritmo // término do bloco de comandos.

Algoritmo 6.2. Modelo geral da estrutura seqüencial de um algoritmo.

A seguir serão mostrados exemplos de algoritmos que


utilizam apenas comandos agrupados em uma estrutura seqüen-
cial.

EXEMPLO 6.1
PROBLEMA:
Ler 4 notas de um aluno, calcular e escrever a sua média. 83
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

RESOLUÇÃO (Algoritmo 6.3):


?Ler as 4 notas, n1, n2, n3, n4 (variáveis do tipo real)
?Calcular a média e armazenar ou atribuir a uma variável
media (note que um valor calculado não é lido)
?Escrever o resultado do cálculo contido em media.

algoritmo "Media de 4 notas"

var

n1, n2, n3, n4, media : real

inicio

leia (n1, n2, n3, n4)


media <- (n1 + n2 + n3 + n4) / 4
escreva ("A media é:", media)

fimalgoritmo

Algoritmo 6.3. Cálculo da média de 4 notas de um aluno.

EXEMPLO 6.2

PROBLEMA:
Ler 3 notas de um aluno, calcular e escrever a sua média
ponderada segundo o critério de pesos de 2, 3 e 5, respectiva-
mente.

RESOLUÇÃO (Algoritmo 6.4):


?Ler as 3 notas, n1, n2, n3 (variáveis do tipo real)
?Calcular a média e armazenar ou atribuir a uma variável
mediaFinal (note que um valor calculado não é lido)
?Escrever o resultado do cálculo contido em media.

84
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

algoritmo "Média Ponderada"

var
n1, n2, n3, mediaFinal : real

inicio

leia (n1, n2, n3)

mediaFinal <- ((2 * n1) + (3 * n2) + (5 * n3)) / 10

escreva (mediaFinal)

Algoritmo 6.4. Cálculo da média ponderada de 3 notas de um aluno.

EXEMPLO 6.3
PROBLEMA:
Ler uma temperatura em graus Fahrenheit e transformá-la
em Celsius segundo a fórmula: C = 5/9(F-32).

RESOLUÇÃO (Algoritmo 6.5):


?Ler a temperatura em graus para uma variável fahrenheit
(variável do tipo real)
Converter a temperatura e armazenar em uma variável
?
celsius. (Note que a temperatura em Celsius não é lida,
pois será calculada).
Escrever o resultado da conversão.
?

algoritmo "Conversão de graus Fahrenheit para Celsius"

var
celsius, fahrenheit : real

inicio

leia(fahrenheit)
celsius <- (9/5) * (fahrenheit - 32)
escreva (celsius)

fimalgoritmo

Algoritmo 6.5. Conversão de graus Celsius para Fahrenheit. 85


Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

EXEMPLO 6.4
PROBLEMA:
Ler as coordenadas de dois pontos:
?Ponto 1 (P) em x1, y1 e
?Ponto 2 (Q) em x2, y2.

Calcular a distância (d) entre os dois pontos segundo a


fórmula:

d(P,Q) = (x1 — x2)² + (y1 — y2)²

RESOLUÇÃO (Algoritmo 6.6):


?Ler as coordenadas dos dois pontos: x1, y1, x2, y2 (variá-
veis do tipo real)
?Calcular a distância segundo a fórmula descrita acima
(verificar a sintaxe no algoritmo). Note que a raiz quadra-
da de um número é equivalente a elevar este número a ½.
?Escrever o resultado do cálculo.

algoritmo "Distância entre dois pontos"

var
x1, y1, x2, y2, distancia : real

inicio

leia (x1, y1)


leia (x2, y2)

distancia <- (((x2 - x1) ^ 2) + ((y2 - y1) ^ 2)) ^ 0.5

escreva (distancia)

fimalgoritmo

Algoritmo 6.6. Calcula a distância entre 2 pontos lidos.

86
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

6.1.2 Estrutura de Seleção

Às vezes é necessário decidir por um ou por outro fluxo de


execução dentro de um algoritmo. Acontece que, dependendo
das circunstâncias (valores lidos, cálculos efetuados, condições
de erro), é preciso realizar ações diferentes dentro de um algo-
ritmo. A seguir, vemos alguns exemplos:

Verificar se um divisor é diferente de zero a fim de realizar


?
uma operação de divisão;
O usuário digitou um valor inválido? Dê uma mensagem de
?
erro.
Caso o resultado seja negativo, transformar em positivo.
?

A estrutura de seleção, também conhecida por decisão, é


responsável por testar uma condição e desviar o fluxo de execu-
ção de acordo com a avaliação realizada [FORBELLONE05].

Uma condição é representada por expressões lógicas ou


relacionais e, ao serem avaliadas, podem ser satisfeitas, ou não.
Dizemos que o resultado é verdadeiro se a condição é satisfeita.
Quando a condição não é satisfeita, o resultado é falso.

Existem dois tipos de seleção: a seleção simples e a seleção


composta. Na seleção simples, se uma condição for verdadeira,
um bloco de comandos (BLOCO VERDADE) é executado como é
mostrado no Algoritmo 6.7. A seleção composta é responsável
por executar um bloco de comandos caso a condição seja verda-
deira (BLOCO VERDADE) e outro bloco de comandos caso a condi-
ção seja falsa (BLOCO FALSO). A seleção composta é mostrada no
Algoritmo 6.8.

Um bloco verdade é o conjunto de comandos entre as


cláusulas entao e fimse no caso de seleção simples. Em uma 87
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

seleção composta, o bloco verdade fica entre as cláusulas entao


e senao.

Um bloco falso existe apenas se a seleção é composta e está


definido entre as cláusulas senao e fimse.

se <condição> entao

<comando 1>
<comando 2>
<comando 3> Bloco
. verdade
.
.
<comando n>
fimse

Algoritmo 6.7. Estrutura de uma seleção simples

se <condição> entao

<comando 1>
<comando 2> Bloco
. verdade
.
.
<comando n>
senao

<comando 1>
<comando 2> Bloco
. falso
.
.
<comando n>
fimse

Algoritmo 6.8. Estrutura de uma seleção composta.

A seguir serão mostrados exemplos de algoritmos que


fazem uso da estrutura de seleção para solucionar os problemas
88 propostos.
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

EXEMPLO 6.5
PROBLEMA:
Lê quatro notas de um aluno e calcula a sua média, infor-
mando se o aluno está aprovado (média >= 6,0) ou reprovado
(média < 6,0).

RESOLUÇÃO (Algoritmo 6.9):


?Ler as 4 notas, n1, n2, n3, n4 (variáveis do tipo real)
?Calcular a média e armazenar ou atribuir a uma variável
media (note que um valor calculado não é lido)
?Escrever o resultado do cálculo contido em media.
?Escrever se o aluno está aprovado ou reprovado de acordo
com a média calculada. Se a média é maior ou igual a 6,0,
o aluno estará aprovado; caso contrário, estará reprova-
do.

algoritmo "Situação Aluno"

var

n1, n2, n3, n4, media : real

inicio

leia (n1, n2, n3, n4)


media <- (n1 + n2 + n3 + n4) / 4
escreva ("A media é:", media)

se media >= 6 entao


escreva ("O aluno está aprovado")
senao
escreva ("O aluno está reprovado")
fimse
fimalgoritmo

Algoritmo 6.9. Algoritmo Situação do Aluno.

EXEMPLO 6.6
PROBLEMA:
Ler 2 valores inteiros e escrever o resultado da divisão do
primeiro pelo segundo. 89
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

RESOLUÇÃO (Algoritmo 6.10):


?Ler dois valores inteiros v1, v2 (variáveis do tipo inteiro)
?Verificar se o segundo número é diferente de zero (não
existe divisão por zero).
?Realizar a divisão caso a condição acima seja satisfeita e
armazenar em uma variável divisao (variável do tipo real)
?Escrever o resultado deste cálculo.

algoritmo "Divisão de dois números lidos"

var

v1, v2 : inteiro
divisao : real

inicio

leia (v1, v2)


se v2 <> 0 entao
divisao <- v1 / v2
escreva (divisao)
fimse

fimalgoritmo

Algoritmo 6.10. Algoritmo divisão de dois números lidos.

EXEMPLO 6.7
PROBLEMA:
Ler 2 valores inteiros e escrever o resultado da divisão do
primeiro pelo segundo.

RESOLUÇÃO (Algoritmo 6.11):


?Ler dois valores inteiros v1, v2 (variáveis do tipo inteiro)
?Verificar se o segundo número é diferente de zero (não
existe divisão por zero).
?Realizar a divisão caso a condição acima seja satisfeita e
90 armazenar em uma variável divisao (variável do tipo real)
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

Escrever o resultado deste cálculo.


?
Exibir uma mensagem de erro no caso da condição não ser
?
satisfeita.

algoritmo "Divisão de dois números lidos com mensagem de


erro"

var

v1, v2 : inteiro
divisao : real

inicio

leia (v1, v2)


se v2 <> 0 entao
divisao <- v1 / v2
escreva (divisao)
senao
escreva ("Não é possível dividir por zero!")
fimse

fimalgoritmo

Algoritmo 6.11. Divisão de dois números inteiros com mensagem de erro.

EXEMPLO 6.8
PROBLEMA:
Ler 2 valores inteiros e informar se o segundo é divisor do
primeiro. Considere que o segundo valor nunca é zero.

RESOLUÇÃO (Algoritmo 6.12):


?Ler dois valores inteiros n1, n2 (variáveis do tipo inteiro)
?Verificar se o segundo número é divisor do primeiro (para
isto, basta testar se o resto da divisão inteira do primeiro
pelo segundo é igual a zero). O operador de resto é o %.
?Escrever o resultado do teste.

91
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

algoritmo "Divisores"

var
n1, n2 : inteiro

inicio

leia (n1, n2)

se (n1 % n2) = 0 entao


escreval (n2, " é divisor de", n1)
senao
escreval (n2, " não é divisor de", n1)
fimse

fimalgoritmo

Algoritmo 6.12. Algoritmo divisor de um número.

EXEMPLO 6.9
PROBLEMA:
Ler um número inteiro e escrever se este é par ou ímpar.

RESOLUÇÃO (Algoritmo 6.13):


· Ler um número num (variável do tipo inteiro)
· Verificar se o valor lido é par ou ímpar (para isto, basta
testar se o resto da divisão inteira do número por dois é
igual a zero). O operador de resto é o %.
· Escrever o resultado do teste.

algoritmo "Par ou ímpar"

var
num : inteiro
inicio

leia (num)
se (num % 2) = 0 entao
escreval ("Número Par")
senao
escreval ("Número Ímpar")
fimse

fimalgoritmo

92 Algoritmo 6.13. Algoritmo Par ou Ímpar.


Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

EXEMPLO 6.10
PROBLEMA:
Ler 2 valores inteiros e escrevê-los em ordem crescente.

RESOLUÇÃO (Algoritmo 6.14):


?Ler dois valores inteiros n1, n2 (variáveis do tipo inteiro)
?Escrever em ordem crescente, ou seja, o menor deve ser
escrito primeiro.

algoritmo "Ordem crescente"

var
n1, n2 : inteiro

inicio

leia (n1, n2)

se n1 > n2 entao
escreval(n2, n1)
senao
escreval(n1, n2)
fimse

fimalgoritmo

Algoritmo 6.14. Algoritmo dois número em ordem crescente.

EXEMPLO 6.11
PROBLEMA:
Ler um raio não negativo para uma esfera e calcular seu
volume.

RESOLUÇÃO (Algoritmo 6.15):


?Ler o raio da esfera (variável do tipo real)
?Calcular o seu volume apenas se o raio é válido, ou seja,
não negativo. A fórmula do volume da esfera é dada por
?Volume = (4/3) ð R³
?Escrever o resultado do cálculo. 93
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

algoritmo "Volume da Esfera"

var
raio, volume : real
inicio

escreva("Raio da Esfera: ")


leia(raio)

se raio < 0 entao


escreval("O raio não pode ser negativo!")
senao
volume <- (4/3) * 3.14 * (raio ^ 3)
escreval("O volume da esfera é: ", volume)
fimse

fimalgoritmo

Algoritmo 6.15. Algoritmo Volume da Esfera.

6.1.2.1Seleção encadeada

Devido à complexidade do problema a ser resolvido por um


algoritmo, é comum serem utilizadas várias estruturas de sele-
ção [FORBELLONE05]. Quando existe uma ou mais seleções
dentro de outra seleção, chamamos esta estrutura de seleção
encadeada ou seleção aninhada. O Algoritmo 6.8 mostra uma
seleção encadeada.

EXEMPLO 6.12
PROBLEMA:
Lê uma idade e informa se a pessoa já alcançou a maiorida-
de ou não. Não se deve aceitar valores de idade inválidos.

RESOLUÇÃO (Algoritmo 6.16):


?Ler um valor inteiro idade (variável do tipo inteiro)
?Verificar se a idade está entre 0 e 17 anos. Neste caso, a
pessoa é menor de idade.
?Verificar se a idade está entre 18 e 130 anos. Neste caso, a
pessoa é maior de idade.
94
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

Deve-se exibir uma mensagem de erro para idades inváli-


?
das, tais como valores negativos e maiores de 130.

algoritmo "Maioridade"

var
idade : inteiro

inicio

leia (idade)
se (idade >=0) e (idade < 18) entao
escreva ("Indivíduo Menor de Idade")
senao
se (idade >= 18) e (idade <= 130) entao
escreva ("Individuo Maior de Idade")
senao
escreva ("Erro: Idade inválida!")
fimse
fimse

fimalgoritmo

Algoritmo 6.16. Maioridade.

EXEMPLO 6.13
PROBLEMA:
Ler um valor inteiro, determinar e escrever se o valor lido é
positivo, negativo ou zero.

RESOLUÇÃO (Algoritmo 6.17):


?Ler um valor inteiro num (variável do tipo inteiro)
?Verificar se o valor lido é maior que zero. Neste caso,
escrever “positivo”.
?Verificar se o valor lido é menor que zero. Neste caso,
escrever “negativo”.
? Se não for negativo, nem positivo, só resta escrever
“zero”.

95
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

algoritmo "Positivo, Negativo ou Zero"

var
num : inteiro

inicio

leia(num)
se num > 0 entao
escreval("Número positivo!")
senao
se num < 0 entao
escreval("Número Negativo!")
senao
escreval("Zero!")
fimse
fimse

fimalgoritmo

Algoritmo 6.17. Algoritmo Positivo, Negativo ou Zero.

EXEMPLO 6.14
PROBLEMA:
Ler uma nota quantitativa e escrever a nota qualitativa
segundo os critérios abaixo:
[0..2] Sem rendimento [7..8] Bom
[3..4] Insuficiente [9..10] Excelente
[5..6] Regular

RESOLUÇÃO (Algoritmo 6.18):


?Ler uma nota (variável do tipo real)
?Verificar a classificação de qualidade da nota de acordo
com as regras dadas e escrever o conceito apropriado.

96
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

algoritmo "Nota Qualitativa"

var
nota : real

inicio

leia (nota)
se (nota >= 0) e (nota <=2) entao
escreva ("Sem Rendimento")
senao
se (nota = 3) ou (nota = 4) entao
escreva ("Rendimento Insuficiente")
senao
se (nota = 5) ou (nota = 6) entao
escreva ("Rendimento Regular")
senao
se (nota = 7) ou (nota = 8) entao
escreva ("Rendimento Bom")
senao
se (nota = 9) ou (nota = 10) entao
escreva ("Rendimento Excelente")
fimse
fimse
fimse
fimse
fimse

fimalgoritmo

Algoritmo 6.18. Algoritmo nota qualitativa.

EXEMPLO 6.15
PROBLEMA:
Lê uma idade e informa se a pessoa é um eleitor obrigatório
(entre 18 e 69 anos), facultativo (entre 16 e 17 anos e acima de
70) ou não é eleitor (menos de 16 anos).

RESOLUÇÃO (Algoritmo 6.19):


?Ler uma idade (variável do tipo inteiro)
?Verificar se a idade está entre 0 e 17 anos. Neste caso, a
pessoa não é um eleitor.
?Verificar se a idade está entre 18 e 69 anos. Neste caso, a
pessoa é um eleitor obrigatório. 97
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

Verificar se a idade é 16 ou 17 anos ou acima de 70 anos.


?
Neste caso a pessoa é um eleitor facultativo.

algoritmo "Eleitores"

var
idade: inteiro

inicio

leia (idade)
se (idade = 16) ou (idade = 17) ou ((idade >= 70) e (idade
<= 130)) entao
escreva ("Eleitor Facultativo")
senao
se (idade >= 18) e (idade < 70) entao
escreva ("Eleitor Obrigatório")
senao
se (idade >= 0) e (idade < 16) entao
escreva("Não é Eleitor")
senao
escreva ("Erro: Idade inválida!")
fimse
fimse
fimse

fimalgoritmo

Algoritmo 6.19. Eleitores.

EXEMPLO 6.16
PROBLEMA:
Calcula as raízes de uma equação o segundo grau (se houve-
rem) dados os coeficientes (a, b, c) da equação.

RESOLUÇÃO (Algoritmo 6.20):


?Ler os coeficientes da equação do segundo grau a , b, c.
?Calcular o delta e armazenar em uma variável.
?Se o delta for negativo, informar que não existem raízes
reais.
?Se o delta for zero, calcular e informar a única raiz real.
?Se o delta for positivo, calcular e informar as duas raízes
98 reais.
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

algoritmo "Raízes da equação do 2o. Grau"

var
a, b, c, delta, x1, x2 : real

inicio

leia (a, b, c)

delta <- (b * b) - (4 * a * c)

se delta < 0 entao


escreval ("Não existem raízes reais")
senao
se delta = 0 entao
x1 <- (-b) / (2 * a)
escreval ("Apenas uma raiz real: ", x1)
senao
x1 <- ((-b) + (delta ^ 0.5)) / (2 * a)
x2 <- ((-b) - (delta ^ 0.5)) / (2 * a)
escreval ("Raiz 1: ", x1)
escreval ("Raiz 2: ", x2)
fimse
fimse

fimalgoritmo

Algoritmo 6.20. Raízes de uma equação do 2º grau.

6.1.2.2 Seleção de múltipla escolha

Este tipo de seleção é utilizado quando se necessita testar


um conjunto de valores discretos para uma mesma variá-
vel[FORBELLONE05]. Esta seleção também é conhecida como
seleção múltipla. A sua sintaxe é diferente da sintaxe dos outros
tipos de seleção.
Além dos valores discretos a serem testados, é possível
definir uma situação de exceção, quando nenhuma das alternati-
vas é válida. Para tanto, deve ser utilizada a cláusula outrocaso
como no exemplo do algotimo 6.22.
O algoritmo 6.21 mostra o modelo geral para uma estrutu-
ra de seleção de múltipla escolha.
99
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

escolha <variável>
caso <expressão constante 1>
<comando 1>
caso <expressão constante 2>
<comando 2>
...
caso <expressão constante n>
<comando n>
outrocaso
<este comando será executado se o valor testado
não corresponder a nenhuma opcao>
fimescolha
Algoritmo 6.21. Modelo geral da seleção de múltipla escolha.

EXEMPLO 6.17
PROBLEMA:
Ler um código que representa uma escolha de um cardápio.
Escrever o nome do prato correspondente. De acordo com os
valores abaixo:
1: Peixe frito
2: Frango à milanesa
3: Churrasco
4: Pizza
5: Hamburguer com fritas
6: Feijoada

RESOLUÇÃO (Algoritmo 6.22):


?Ler um código numérico:
?De acordo com o valor lido para o código, escrever o nome
do prato correspondente.

100
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

algoritmo "Pratos de um cardápio"


var
codPrato : inteiro

inicio

escreva ("Entre com o código do prato: ")


leia (codPrato)

escolha codPrato
caso 1
escreval ("Peixe frito")
caso 2
escreval ("Frango à milanesa")
caso 3
escreval ("Churrasco")
caso 4
escreval ("Pizza")
caso 5
escreval ("Hamburguer com fritas")
caso 6
escreval ("Feijoada")
outrocaso
escreval ("Código inválido")
fimescolha

fimalgoritmo
Algoritmo 6.22. Opções do cardápio de um restaurante.

EXEMPLO 6.18
PROBLEMA:
Ler o nome de um time de futebol e informar se é um dos
times cariocas, paulistas ou de outro estado.

RESOLUÇÃO (Algoritmo 6.23):


?Ler um nome de time (variável do tipo caractere)
?De acordo com nome, escrever a naturalidade do time.

101
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

algoritmo "Naturalidade de um time lido"

var
time: caractere

inicio

escreva ("Entre com o nome de um time de futebol: ")


leia (time)

escolha time
caso "Flamengo", "Fluminense", "Vasco", "Botafogo"
escreval ("É um time carioca.")
caso "São Paulo", "Palmeiras", "Santos", "Corinthians"
escreval ("É um time paulista.")
outrocaso
escreval ("É de outro estado.")
fimescolha

fimalgoritmo

Algoritmo 6.23. Naturalidade dos times.

6.1.3 Estrutura de repetição

Normalmente as tarefas realizadas por um algoritmo


devem ser refeitas para muitos valores de entrada ou para
diversos usuários.
Por exemplo, um algoritmo que realiza vendas em um
supermercado deve poder receber o código e o preço de vários
produtos em uma única venda. Mas como saber quantos itens
serão comprados por cada cliente? Ao efetuar a entrada de
dados, não é possível colocar um comando de leitura para cada
item de venda. Imagine um algoritmo que leia 100 itens de uma
venda.
Para resolver problemas com repetição de atividades,
existem as estruturas de repetição (laço de repetição, loop)
[FORBELLONE05]. Com estas estruturas de controle especiais, é
102 possível realizar facilmente a mesma tarefa quantas vezes forem
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

necessárias. Veja alguns exemplos de problemas que devem


fazer uso de estruturas de repetição.
? Calcule a média anual de 40 alunos de uma turma;
? Calcule o total a pagar de n itens vendidos para um clien-
te;
? Verifique todos os brasileiros que não declararam o impos-
to de renda;
? Exiba os emails da caixa de entrada de um usuário.

Um detalhe essencial sobre estrutura de repetição é que o


número de iterações (repetições) deve ser, necessariamente,
finito. Caso isto não ocorra, o algoritmo não terá fim, ocasionan-
do erro.

É possível utilizar o comando “interrompa” para terminar


um laço (repetição) dentro do bloco de comandos. Isto será visto
no exemplo do algoritmo 6.33.

Existem várias estruturas conhecidas para realizar repeti-


ção. Neste curso de lógica de programação, serão vistas as
estruturas de repetição:
?Com teste no início;
?Com variável de controle.

6.1.3.1 Estrutura de repetição com teste

Neste tipo de repetição, um conjunto ou bloco de coman-


dos é repetido enquanto uma condição é verdadeira. Esta verifi-
cação é feita no início da estrutura de repetição. A implicação
disto é que o bloco de comandos pode não ser executado nenhu-
ma vez caso a condição seja falsa já de início [FORBELLONE05].
103
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

A estrutura utilizada é o enquanto. A estrutura geral do


enquanto é vista no Algoritmo 6.24.

enquanto <condição> faça // executa os comandos se condição é


verdadeira

<comando 1>
<comando 2>
<comando 3>
.
.
.
<comando n>

fimenquanto // término do bloco de comandos do enquanto.

Algoritmo 6.24. Modelo geral do enquanto.

Quando o resultado da avaliação da <condição> é falso, a


estrutura de repetição enquanto é abandonada.

O exemplo do Algoritmo 6.25 mostra um enquanto cuja


<condição> utiliza um contador para realizar um determinado
número de repetições.

EXEMPLO 6.19
PROBLEMA:
Ler 4 notas de 40 alunos, calcular e escrever cada média.

RESOLUÇÃO (Algoritmo 6.25):


?Realizar 40 vezes os comandos a seguir:
?Ler as 4 notas, n1, n2, n3, n4 (variáveis do tipo real)
?Calcular a média e armazenar ou atribuir a uma variável
media (note que um valor calulado não é lido)
?Escrever o resultado do cálculo contido em media.

Neste exemplo, o algoritmo de cálculo da média das 4 notas


de um aluno é modificado para realizar este cálculo para 40
104 alunos. Note que o bloco de comandos do enquanto é repetido
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

até que a condição se torne falsa, ou seja, o bloco será executa-


do enquanto cont for menor ou igual a 40 (condição verdadeira).

Um contador é uma variável cujo conteúdo é incre-


DICA:
mentado de uma constante. Exemplo: cont <- cont + 1

Os passos necessários para utilizar um contador para


controle de uma repetição são:
? Inicializar o contador: cont <- 1
? Isto é necessário pois a variável precisa ter um valor
inicial para a primeira comparação e para o incremento
? Testar o contador: cont <= 40 ?
? Quando o valor da variável cont for maior que n, o
enquanto termina.
? Incrementar o contador (dentro do bloco de comandos)
cont <- cont + 1
? Isto permite que o valor de cont mude; inicialmente
possui o valor zero, depois é incrementado de um em um
(1, 2, 3, ..., 40).
? O último valor que cont recebe antes que o enquanto
seja abandonado é 41, pois, visto 41 ser maior que 40, a
<condição> torna-se falsa.

algoritmo "Media de 4 notas para 40 alunos"

var
n1, n2, n3, n4, media : real
cont : inteiro

inicio

cont <- 1

enquanto cont <= 40 faca

leia (n1, n2, n3, n4)


media <- (n1 + n2 + n3 + n4) / 4
escreva ("A media é:", media)

cont <- cont + 1

fimenquanto

fimalgoritmo

Algoritmo 6.25. Média de 4 notas para 40 alunos. 105


Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

O exemplo do algoritmo 6.13 mostra uma repetição onde


não se sabe, a priori, o número de vezes que o bloco de comandos
será executado.

EXEMPLO 6.20
PROBLEMA: Ler 4 notas de n alunos, calcular e escrever
cada média.

RESOLUÇÃO (Algoritmo 6.26):


?Ler o número de alunos em uma variável n
?Realizar n vezes os comandos a seguir:
?Ler as 4 notas, n1, n2, n3, n4 (variáveis do tipo real)
?Calcular a média e armazenar ou atribuir a uma variável
media (note que um valor calulado não é lido)
?Escrever o resultado do cálculo contido em media.

Neste exemplo, o valor de controle do fim da repetição é


trocado para uma variável. A condição agora testa o valor de cont
em relação ao conteúdo da variável n.

algoritmo "Media de 4 notas para n alunos"

var
n1, n2, n3, n4, media : real
cont, n : inteiro

inicio

cont <- 1

leia (n)
enquanto cont <= n faca

leia (n1, n2, n3, n4)


media <- (n1 + n2 + n3 + n4) / 4
escreva ("A media é:", media)

cont <- cont + 1

fimenquanto
106 Algoritmo 6.26. Média de 4 notas para n alunos.
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

6.1.3.2 Estrutura de Repetição


com variável de controle

Uma maneira mais fácil de realizar uma repetição quando


se sabe os valores inicial e final da variável de controle (conta-
dor) é utilizar a estrutura para. Nesta estrutura de repetição, a
variável de controle é inicializada, testada e incrementada em
apenas uma linha, na declaração do para [FORBELLONE05].
A primeira parte do para é a inicialização da variável de
controle:
? para <variável_controle> de <valor_inicial>

A segunda parte é o teste de fim da repetição, ou seja o


último valor válido:
?até <valor_final>

A última parte é o incremento da variável de controle:


?passo <incremento>

Se o incremento é de 1, pode ficar implícito como valor


padrão. No Algoritmo 6.27 é mostrada a estrutura geral desta
estrutura de repetição.

para <variável_controle> de <valor_inicial> até <valor_final>


[passo <incremento>] faça

<comando 1>
<comando 2>
<comando 3>
.
.
.
<comando n>

fimpara // término do bloco de comandos do para.


Algoritmo 6.27. Modelo geral da estrutura de repetição para.

No exemplo do Algoritmo 6.26, o problema das médias para 107


Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

n alunos está escrito utilizando a estrutura de repetição para.


Note os passos equivalentes ao enquanto:
? variável de controle cont é inicializada com 1 (para cont
de 1)
?teste da variável de controle (até n)
?incremento implícito

algoritmo "Media de 4 notas para n alunos"

var
n1, n2, n3, n4, media : real
cont, n : inteiro

inicio

leia (n)
para cont de 1 ate n faca

leia (n1, n2, n3, n4)


media <- (n1 + n2 + n3 + n4) / 4
escreva ("A media é:", media)

fimpara

fimalgoritmo

Algoritmo 6.28. Média de 4 notas para n alunos utilizando PARA.

EXEMPLO 6.21
PROBLEMA:
Mostrar a tabuada de multiplicação de um número lido.

RESOLUÇÃO (Algoritmo 6.29):


· Ler o número num.
· Escrever a tabuada de num como segue:
?num x 1 = ?
?num x 2 = ?
?num x 3 = ?
?num x 4 = ?
108 ?num x 5 = ?
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

num x 6 = ?
?
num x 7 = ?
?
num x 8 = ?
?
num x 9 = ?
?
num x 10 = ?
?

A estrutura para é adequada porque se sabe a priori o


número de repetições que serão feitas (10).

algoritmo "Tabuada de Multiplicação"

var
num, i : inteiro

inicio

escreva("Entre com um numero inteiro: ")


leia (num)

escreval("Tabuada de Multiplicação do ", num)

para i de 1 ate 10 faca


escreval(i, " * ", num, " = ", i * num)
fimpara

fimalgoritmo

Algoritmo 6.29. Tabuada de Multiplicação de um número.

6.2 Combinando as estruturas de controle

Como já foi dito, as estruturas devem ser combinadas a fim


de resolver quaisquer problemas de lógica de programação.
Nesta seção serão mostrados exemplos de algoritmos que combi-
nam as estruturas vistas neste curso: seleção (se-então-[senão],
escolha) e repetição (enquanto, para). Estas, juntamente com os
comandos de entrada (leia) e saída (escreva) e com as expres-
sões lógicas e relacionais, são as ferramentas básicas para a
construção de algoritmos que atendam às necessidades dos
problemas a serem solucionados. 109
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

Nos exemplos a seguir, temos os algoritmos do “Maior” e do


“Menor” nas suas variações mais comuns.
Nos último exemplo vemos condições elaboradas de manei-
ra mais complexa para resolver problema envolvendo triângulos.

EXEMPLO 6.22
PROBLEMA:
Ler 10 número 3 e verificar qual é o maior dentre eles.
RESOLUÇÃO (Algoritmo 6.30):
?Ler um número 10 vezes.
?Armazenar a primeira leitura em uma variável maior.
?A cada nova leitura, testar se o valor é maior que o valor da
variável maior. Neste caso, este é o maior valor até então,
portanto, maior recebe o valor lido.

Escrever o conteúdo de maior.

algoritmo "Maior de 10 números"

var
num, maior, i : inteiro

inicio

escreva("Numero 1: ")
leia(num)
maior <- num
para i de 2 ate 10 faca
escreva("Numero ", i, ": ")
leia(num)

se num > maior entao


maior <- num
fimse
fimpara
escreva("O maior numero lido foi: ", maior)

fimalgoritmo

110 Algoritmo 6.30. Maior de 10 números.


Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

EXEMPLO 6.23
PROBLEMA:
Ler N números e verificar qual é o menor dentre eles.

RESOLUÇÃO (Algoritmo 6.31):


?Ler N (total de repetições).
?Ler um número N vezes (apenas se N é positivo).
?Armazenar a primeira leitura em uma variável menor.
?A cada nova leitura, testar se o valor é menor que o valor
da variável menor. Neste caso, este é o menor valor até
então, portanto, menor recebe o valor lido.
?Escrever o conteúdo de menor.

algoritmo "Menor de N numeros"

var
N, num, menor, i : inteiro

inicio

leia (N)
se (n > 0) entao
escreva("Numero 1: ")
leia(num)
menor <- num
para i de 2 ate N faca
escreva("Numero ", i, ": ")
leia(num)

se num < menor entao


menor <- num
fimse
fimpara
escreva("O menor numero lido foi: ", menor)
fimse

fimalgoritmo

Algoritmo 6.31. Menor de N valores lidos.

111
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

EXEMPLO 6.24

PROBLEMA:
Ler uma seqüência de números que termina com um sinali-
zador (flag) igual a –999 que deve ser desprezado.

RESOLUÇÃO (Algoritmo 6.32):


· Ler um número até que seja lido o flag = -999
?Armazenar a primeira leitura em menor e em maior.
?A cada nova leitura, testar se o valor é menor que o valor
da variável menor (novo menor, trocar) ou maior que a
variável maior (novo maior, trocar).

· Escrever o conteúdo de menor e de maior.

algoritmo "Menor e Maior de uma seqüência de números"

var
N, num, maior, menor, i : inteiro

inicio
a
i <- 1
escreva("Numero 1: ")
leia(num)
menor <- num
maior <- num

enquanto num <> -999 faca


se num < menor entao
menor <- num
senao
se num > maior entao
maior <- num
fimse
fimse
i <- i + 1
escreva("Numero ", i, ": ")
leia(num)
fimenquanto
se (maior <> -999) entao
escreval("O menor numero lido foi: ", menor)
escreval("O maior numero lido foi: ", maior)
fimse

fimalgoritmo
112 Algoritmo 6.32. Maior e Menor de uma seqüência de valores lidos.
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

algoritmo "Menor e Maior de uma seqüência de números (com


interrompa)"

var
num, maior, menor, i : inteiro

inicio

maior <- -9999;


menor <- 9999;
i<- 1;
enquanto num <> -999 faca
escreva("Numero ", i, ": ")
leia(num)
se num = -999 entao
interrompa
fimse
se num < menor entao
menor <- num
senao
se num > maior entao
maior <- num
fimse
fimse
i <- i + 1

fimenquanto
se (maior <> -9999) entao
escreval("O menor numero lido foi: ", menor)
escreval("O maior numero lido foi: ", maior)
fimse

fimalgoritmo
Algoritmo 6.33. Menor e Maior de uma seqüência de números (com interrompa)

EXEMPLO 6.25

PROBLEMA:
Ler 3 valores e verificar se podem ser lados de um triângulo.
Em caso afirmativo, informar o tipo de triângulo: eqüilátero,
isósceles ou escaleno.

RESOLUÇÃO (Algoritmo 6.34):


?Ler os 3 lados.
?Verificar se podem formar um triângulo (a soma de dois
lados quaisquer não pode ser menor que o lado restante).
113
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

Verificar e escrever o tipo de triângulo.


?
Eqüilátero se todos os lados forem iguais.
?
Isósceles se apenas dois lados forem iguais.
?
Escaleno caso contrário (todos os lados são diferentes).
?

algoritmo "Triângulos"

var
l1, l2, l3 : real

inicio

leia (l1, l2, l3)


se ((l1 + l2) < l3) ou ((l1 + l3) < l2) ou ((l2 + l3) <
l1) entao
escreval ("Estes valores não podem ser lados de um
triângulo")
senao
se (l1 = l2) e (l2 = l3) entao
escreval ("Triângulo Equilátero")
senao
se (l1 = l2) ou (l2 = l3) ou (l1 = l3) entao
escreval ("Triângulo Isósceles")
senao
escreval ("Triângulo Escaleno")
fimse
fimse
fimse

fimalgoritmo

Algoritmo 6.34. Triângulos.

EXEMPLO 6.26
PROBLEMA:
Ler 3 valores e verificar se podem ser lados de um triângulo.
Em caso afirmativo, informar se é triângulo retângulo.

RESOLUÇÃO (Algoritmo 6.35):


?Ler os 3 lados e verificar se podem formar um triângulo (a
soma de dois lados quaisquer não pode ser menor que o
lado restante)
?Verificar e escrever se é triângulo retângulo (hip² = cat1² +
cat²)
114
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

algoritmo "Triangulo Retangulo"

var
l1, l2, l3: inteiro

inicio

escreval("Lados do Triangulo")
leia(l1)
leia(l2)
leia(l3)

se (l1 > l2) e (l1 > l3)


se (l1^2) = ((l2^2) + (l3^2)) entao
escreval("É Triangulo Retangulo!")
senao
escreval("Não é Triangulo Retangulo!")
fimse
senao
se (l2 > l1) e (l2 > l3)
se (l2^2) = ((l1^2) + (l3^2)) entao
escreval("É Triangulo Retangulo!")
senao
escreval("Não é Triangulo Retangulo!")
fimse
senao
se (l3^2) = ((l1^2) + (l2^2)) entao
escreval("É Triangulo Retangulo!")
senao
escreval("Não é Triangulo Retangulo!")
fimse
fimse
fimse

fimalgoritmo

Algoritmo 6.35. Triângulos

115
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

ATIVIDADES

6.1. Faça um algoritmo que leia a idade de uma pessoa expressa


em anos, meses e dias e mostre-a expressa apenas em dias.
6.2. Faça um algoritmo que leia a idade de uma pessoa expressa
em dias e mostre-a expressa em anos, meses e dias.
6.3. Um sistema de equações lineares do tipo:
ax +
by =
c
dx + f , pode ser resolvido assim:
ey =

ce -
bf e af -
cd
x= y=
ae -
bd ae -
bd

Escreva um algoritmo que lê os coeficientes a, b, c, d, e, f,


e calcula e mostra os valores de x e y.

6.4. Elaborar um algoritmo que lê 2 valores a e b e os escreve com


a mensagem: “São múltiplos” ou “Não são múltiplos”.

6.5. Faça um algoritmo que leia um nº inteiro e mostre uma


mensagem indicando se este número é par ou ímpar, e se é
positivo ou negativo.

6.6. Fazer um programa para imprimir o conceito de um aluno,


dada a sua nota. Supor notas inteiras somente. O critério
para conceitos é o seguinte:
notas inferiores a 3 - conceito E
nota de 3 a 5 - conceito D
notas 6 e 7 - conceito C
notas 8 e 9 - conceito B
nota 10 - conceito A
116
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

6.7. Elabore um algoritmo que dada a idade de um nadador,


classifique-o em uma das seguintes categorias:
· infantil A = 5-7 anos;
· infantil B = 8-10 anos;
· juvenil A = 11-13 anos;
· juvenil B = 14-17 anos;
· sênior = mais de 18 anos.

6.8. Para cada uma das mercadorias diferentes vendidas em um


armazém, dispõe-se dos seguintes dados:
a. Código da mercadoria
b. Preço de compra
c. Preço de venda
d. Quantidade vendida no mês.

6.9. Fazer um algoritmo que leia os dados disponíveis e calcule e


dê saída no total faturado no mês e no lucro total.

10. Num frigorífico existem 100 bois. Cada um traz no pescoço


um placa com o seu número e seu peso. Pede-se um algorit-
mo que leia o número e o peso de cada boi e escreva o
número e o peso do boi mais gordo e do mais magro.No
algoritmo que você desenvolveu, se houver mais de um boi
com o mesmo peso e que seja esse o mais gordo ou o mais
magro, qual o número será escrito?

117
Tecnologia em Análise e
Tecnologia em
Desenvolvimento AnáliseIntrodução
de Sistemas e Desenvolvimento
à Informática de Sistemas
Lógica de Programação I

Bibliografia
[MOURSUND07] MOURSUND, David. Increasing your expertise as
a problem solver: Some roles of computers. Disponível em: <
h t t p : / / w w w. u o r e g o n . e d u / ~ m o u r s u n d / B o o k s / P S -
Expertise/index.htm>. Acesso em 05/06/2007

[BALDWIN04] BALDWIN,Douglas, SCRAGG,Greg. Algorithms and


Data Structures: The Science of Computing. 1st edition,Charles
River Media. 2004

[Shapiro 06] Shapiro, Stewart, "Classical Logic". The Stanford


Encyclopedia of Philosophy (Winter 2006 Edition).Disponível em:
<http://plato.stanford.edu/archives/win2006 /entries/logic-
classical/>. Acesso em 10/06/2007

[WIRTH 86] WIRTH, Niklaus, Algoritmos e Estruturas de Dados.


Editora PHB. 1986.

[TREMBLAY39] Tremblay, Jean-Paul, 1939 – Ciência dos computa-


dores: uma abordagem algorítmica/ Jean-Paul Tremblay,
Richard B. Bunt; Traducai Moacir de Souza Prado; revisão técnica
João Pedro Perotti. – São Paulo: McGraw-Hill do Brasil 1983

[FARRER89] FARRER, HARRY; Cristiano Gloncalves Becker;


118
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

Eduardo Faria, Helton Matos, Marcos Santos, Miriam Maia –


Algoritmos Estruturados – LTC 2ª Edição - Rio de Janeiro, 1989.

[SALVETTI98] SALVETTI, Direceu Douglas , 1933 – Algoritmos


/Dirceu Douglas Salvetti, Lisbete Madsen Barbosa. – São Paulo :
Makron Books, 1998

[FORBELLONE05] Forbellone, André e Eberspacher, Henri. Lógica


de Programação. 3a. Edição. Makron Books. 2005.

[HELPVISUALG] Help Visualg

[LOPES 02] LOPES, Anita. Introdução à Programação/ Anita


Lopes, Guto Garcia – Rio De Janeiro: Elsevier, 2002 – 7ª
Reimpressão.

119
Tecnologia em Análise e
Tecnologia em
Desenvolvimento AnáliseLógica
de Sistemas e Desenvolvimento
de Programação I de Sistemas
Lógica de Programação I

Anexo
Exercícios
Estruturas Seqüenciais

1. Ler 6 notas de um aluno e calcular sua média.

2. Ler um valor da cotação do dólar de um determinado dia


e calcular o valor em dólares para um valor lido em reais.

Ex: Cotação: R$ 2,15


Valor em reais para cálculo: R$10,00
Total em Dólares: R$ 21,50

3. Leia 2 valores, no caso variáveis A e B.


Efetue a soma das variáveis A e B atribuindo o seu resulta-
?
do na variável X.
Apresente o valor da variável X após a soma dos dois
?
valores indicados.

4. A fórmula para calcular a área de uma circunferência é:


A = pi * (Raio)^2. Sendo que o valor de pi = 3.14159 crie o seguinte
algoritmo:
120 Leia um valor para o raio, no caso a variável R.
?
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

Efetue o cálculo da área, elevando o valor de R ao quadra-


?
do e multiplicando por pi.
Apresente o valor da área (variável A).
?

5. Escreva um algoritmo para calcular e exibir o compri-


mento de uma circunferência, sendo dado o valor de seu raio.
C = 2 * Pi * raio.

6. Escrever um algoritmo que leia a idade de uma pessoa


em dias e informe-a em anos, meses e dias.

7. Faça um algoritmo que leia a idade de uma pessoa


expressa em anos, meses e dias e mostre-a expressa apenas em
dias (considere que os meses possuem 30 dias).

8. Escreva um algoritmo que leia duas variáveis inteiras e


troque o conteúdo entre elas.

Estruturas de Seleção

9. Ler um número e escrever o seu valor negativo.

10. Ler dois números reais e informar se o segundo é o


quadrado do primeiro.

11. Escreva um algoritmo que leia dois números e exiba-os


em ordem crescente.

12. Escreva um algoritmo que leia as notas da 1a. e da 2a.


avaliações de um aluno. A seguir, calcule a média aritmética
simples e escreva uma mensagem que diga se o aluno foi ou não
121
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

aprovado (considerar que nota igual ou maior que 6 o aluno é


aprovado). Escrever também a média calculada.

13. Escreva um algoritmo que leia o nome de 2 times e o


número de gols marcados em uma partida. Escrever o nome do
vencedor. Caso não haja vencedor deverá ser impressa a palavra
EMPATE.

14. Em um supermercado as maçãs custam R$ 1,30 cada se


forem compradas menos de uma dúzia, e R$ 1,00 se forem
compradas pelo menos 12. Escreva um algoritmo que leia o
número de maçãs compradas, calcule e escreva o custo total da
compra.

15. Escreva um algoritmo que determine o grau de obesida-


de de uma pessoa, sendo fornecido seu peso e sua altura. O grau
de obesidade é determinado pelo índice da massa corpórea
(Massa = Peso (em kg) / Altura (em cm)) através da tabela abaixo:

Índice de Massa Grau de


Corpórea Obesidade
< 0,52 Normal
Entre 0,52 e 0,68 Obeso
Maior que 0,68 Obeso Mórbido

16. Faça um algoritmo para calcular a conta final de um


hóspede de um hotel, considerando que:

a) serão lidos: o nome do hóspede, o tipo do apartamento


utilizado (A, B, C ou D), o número de diárias utilizadas
pelo hóspede e o valor do consumo interno do hóspede;
b) o valor da diária é determinado pela seguinte tabela:
122
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

Tipo de Valor da Diária


Apartamento (R$)
A 150,00
B 100,00
C 75,00
D 50,00

c) o valor total das diárias é calculado pela multiplicação do


número de diárias utilizadas pelo valor da diária do
apartamento;
d) o subtotal é calculado pela soma do valor total das
diárias e o valor do consumo interno;
e) o valor da taxa de serviço equivale a 10% do subtotal;
f) o total geral resulta da soma do subtotal com a taxa de
serviço.
g) escreva a conta final contendo: o nome do hóspede, o
tipo do apartamento, o número de diárias utilizadas, o
valor unitário da diária, o valor total das diárias, o valor
do consumo interno, o subtotal, o valor da taxa de
serviço e o total geral.

17. Construa um algoritmo que receba o código de um


produto e o classifique de acordo com a tabela abaixo:
Código Classificação
1 Alimento Não-Perecível
2a4 Alimento Perecível
5e6 Vestuário
7 Higiene Pessoal
8 a 15 Limpeza e Utilidades Domésticas
Outros Códigos Inválido

18. Calcular a média final para um aluno dadas as notas de


3 provas e produzir uma saída com a média e a situação do aluno
de acordo com o seguinte critério:
média >= 7, aprovado; 5 < média < 7, recuperação;
média < 5, reprovado. 123
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

19. Crie um algoritmo que leia a velocidade máxima permi-


tida em uma avenida e a velocidade com que o motorista estava
dirigindo nela e calcule a multa que uma pessoa vai receber,
sabendo que são pagos:

a) 50 reais se o motorista ultrapassar em até 10km/h a


velocidade permitida.
(ex.: velocidade máxima: 50km/h; motorista a 60km/h
ou a 56km/h);
b) 100 reais, se o motorista ultrapassar de 11 a 30 km/h a
velocidade permitida.
c) 200 reais, se estiver acima de 31km/h da velocidade
permitida.

20. O cardápio de uma lanchonete é o seguinte:

Especificação Código Preço


Cachorro quente 100 1,20
Bauru simples 101 1,30
Bauru com ovo 102 1,50
Hambúrger 103 1,20
Cheeseburguer 104 1,30
Refrigerante 105 1,00

21. Escreva um algoritmo que leia o código do item pedido,


a quantidade e calcule o valor a ser pago por aquele lanche.
Considere que a cada execução somente será calculado um item.

22. Ler uma hora do dia (0-23) e escrever a saudação corre-


ta: bom dia(0-12); boa tarde (13-18) ou boa noite(19-23)

23. lê 2 valores a e b e os escreva com a mensagem:


“São múltiplos” ou “Não são múltiplos”.;
124
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

24. leia um nº inteiro e mostre uma mensagem indicando se


este número é par ou ímpar, e se é positivo ou negativo.

25. Conceito de um aluno A-B-C-D-E.

26. Crie um algoritmo que informe se um dado ano é ou não


bissexto. Obs: um ano é bissexto se ele for divisível por 400 ou se
ele for divisível por 4 e não por 100.

27. Dada uma abreviação (SEG-TER-QUA-QUI-SEX-SAB-


DOM), escrever por extenso ; ler n letras e informar o total de
ocorrências de cada uma das letras do alfabeto (a..z).

28. Escolha: ler um código de letra para o estado civil de


uma pessoa (S/C/D/V) e escrever o seu equivalente por extenso.

29. Escrever o número de dias de um determinado mês


(lido); ler um valor numérico e um código (H:horas/M: minutos/
S:segundos). Escrever o valor lido em segundos.

30. Um vendedor necessita de um algoritmo que calcule o


preço total devido por um cliente. O algoritmo deve receber o
código de um produto e a quantidade comprada e calcular o
preço total, usando a tabela abaixo:

Código do Produto Preço unitário


1001 5,32
1324 6,45
6548 2,37
0987 5,32
7623 6,45

125
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

Estruturas de Repetição

31. Faça um algoritmo que mostre todos os números intei-


ros pares de 2 a 100.

32. Faça um algoritmo para gerar e exibir os números


inteiros de 20 até 10, decrescendo de 1 em 1.

33. ler 3 valores e escrever em ordem crescente.

34. Faça um algoritmo que leia uma lista de números intei-


ros positivos terminada pelo número 0 (zero). Ao final, o algorit-
mo deve mostrar a média aritmética de todos os números lidos
(excluindo o zero).

35. Escrever n (lido) asteriscos na tela.

36. Ler 20 números e escrever quantos dos valores lidos são


múltiplos de 3.

37. Ler x e y e calcular x * y utilizando somas sucessivas.

38. Ler x e y e calcular x^y utilizando multiplicações


sucessivas.

39. Função do 2o grau. Ler a, b, c e calcular x1, x2 verificar


se o delta é válido.

126 40. Ler a carga horária de uma disciplina e a freqüência de


Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

40 alunos. Informar para cada um se está aprovado ou não (+ de


75% de presença).

41. Calcular a média salarial de 1000 funcionários de uma


empresa.

42. Ler n vezes o total de quilos de peixe vendidos a um


frigorífico e o seu preço por quilo. Calcular o total a receber.

43. Média de vários (flag = 0) números usar interrompa; ler


1000 salários dos funcionários de uma empresa e informar quan-
tos são maiores que R$5.000,00.

44. Ler o mês de aniversário dos alunos de uma turma e


informar o total de alunos que fazem aniversário no mês de
Agosto.

45. Calcular a média das temperaturas de uma região nos


últimos 10 dias.

46. No exemplo anterior, não aceitar valores de temperatu-


ras abaixo de -100 ou acima de 60. Calcular também quantos dias
a temperatura ficou acima da média.

47. Para N embarcações, ler a lotação de passageiros e o


total de passageiros embarcados, informando se a embarcação
pode seguir viagem (total de passageiros dentro dos limites de
lotação).

127
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

48. Contar e escrever o total de ocorrências de números


negativos entre 10 números lidos.

49. Faça um algoritmo que leia um valor para M. Se este


valor for positivo, calcule e mostre o seu fatorial, sabendo-se
que:
N ! = 1 x 2 x 3 x ... x N-1 x N
0!=1

49. Num frigorífico existem 90 bois. Cada boi traz preso em


seu pescoço um cartão contendo seu número de identificação e
seu peso. Faça um algoritmo que escreva o número e o peso do
boi mais gordo e do boi mais magro (supondo que não haja empa-
tes).

128
Tecnologia em Análise e
Lógica de Programação I Desenvolvimento de Sistemas

129
Tecnologia em Análise e
Desenvolvimento de Sistemas Lógica de Programação I

130

Você também pode gostar