Académique Documents
Professionnel Documents
Culture Documents
Introdução a Informática)
Técnicas de
Desenvolvimento da Lógica
2
Sumário
Sumário.................................................................................................................................................................3
Introdução.............................................................................................................................................................4
As dificuldades de programar...............................................................................................................4
A metodologia de aprendizagem..........................................................................................................5
Variáveis x Dados.................................................................................................................................................6
Uso das Variáveis no Algoritmo............................................................................................................6
Escolhendo o TIPO do Identificador da Variável..................................................................................7
Tipo inteiro............................................................................................................................7
Tipo real................................................................................................................................7
Tipo Literal............................................................................................................................7
Tipo Lógico............................................................................................................................8
Tamanho das Variáveis........................................................................................................................8
Declaração de Variáveis.......................................................................................................................8
Comando DECLARE............................................................................................................8
Operadores...........................................................................................................................................9
Operadores Numéricos.........................................................................................................9
Operadores Relacionais ......................................................................................................9
Operadores Lógicos............................................................................................................10
Entendendo Representações de Sintaxes.........................................................................................................11
Atribuição de Valores a Variáveis.......................................................................................................11
Estruturação do Algoritmo...................................................................................................................................11
Entrada e Saída de Dados..................................................................................................................12
Comando LEIA....................................................................................................................12
Comando ESCREVA (lista informações no vídeo).............................................................12
Manipulaçao de valores......................................................................................................................................13
Conceitos Fundamentais....................................................................................................................................14
Contador x Acumulador......................................................................................................................14
Percentuais.........................................................................................................................................14
Maior Valor..........................................................................................................................................15
Menor Valor.........................................................................................................................................16
Estruturas Condicionais......................................................................................................................................16
Estrutura Condicional SE (Símples)...................................................................................................16
Estrutura Condicional SE (Composta)................................................................................................17
Estrutura Condicional SE (Encadeada)..............................................................................................17
Exercícios de Aprendizagem..............................................................................................................19
Estruturas de Repetição......................................................................................................................................21
Comando ENQUANTO.......................................................................................................................21
Comando PARA..................................................................................................................................22
Exercícios de Aprendizagem..............................................................................................23
Técnicas de Algoritmização................................................................................................................................24
Dicas sobre Resolução de Algoritmos................................................................................................24
Técnica para extrair os dados de um enunciado................................................................................24
Desafios Resolvidos............................................................................................................................................26
3
Introdução
P
rogramar um computador não é uma tarefa tão difícil. Difícil é programar as
nossas cabeças.
O computador, na realidade, é uma réplica bastante simplificada de nossa
mente, com apenas uma diferença essencial: a AUTO-PROGRAMAÇÃO.
Ao longo de nossas vidas, aprendemos coisas a partir de alguns elementos fundamentais
como cores, símbolos, sons, cheiros, e sentimentos. Esses elementos vão se
combinando através de um processo conhecido como aprendizado.
O processo de aprendizado nada mais é do que uma auto-programação de nossas
mentes. “Alguém” diz para nosso cérebro o que ele tem que fazer ao se deparar com
uma situação específica, tal como: dobrar uma esquina, parar ao perceber o sinal
vermelho, escovar os dentes ao acordar, em fim - tudo o que fazemos é regido por
programas que, um dia, nós mesmos desenvolvemos.
Ora, se somos capazes de desenvolver programas para um aparelho tão complexo e
genial como o nosso cérebro, por que não um simples computador?
Este é o nosso desafio. Desenvolver as técnicas necessárias para conseguirmos codificar
programas em um computador digital.
As dificuldades de programar
Programar um computador, assim como a nossa mente, requer duas exigências básicas:
• Conhecer a linguagem na qual se vai programar;
• Estruturar o raciocínio de forma a saber combinar os comandos desta linguagem, dentro
de uma seqüência lógica, ou seja, de modo a atingirmos o objetivo perseguido.
A linguagem de programação utilizada pelas nossas mentes é composta de comandos
(olhe, escute, memorize, decida, sinta, ame, odeie...), elementos (cores, tipos de cheiros,
notas musicais, símbolos sonoros, símbolos visuais...) e é capaz de reconhecer e utilizar
os recursos disponíveis no organismo (olho, ouvido, cérebro, nariz, boca...), sem os
quais torna-se impossível a execução de um programa.
A linguagem de programação utilizada pelos computadores é composta também por
comandos (receba, escreva, some, multiplique...) e elementos (números, palavras e
símbolos), e também é capaz de reconhecer e utilizar os recursos disponíveis no
computador e periféricos (impressora, monitor de vídeo, mouse, teclado, memória...).
Ao aprendermos uma receita de bolo, colocamos uma porção de comandos em nossa
mente. Estes comandos são gravados de uma forma analógica e, logo em seguida,
consolidamos o processo de aprendizagem através da execução daquele programa.
Claro, da primeira vez que fazemos algo podemos cometer erros, que são
automaticamente ajustados pela nossa mente para que, da próxima vez, não voltem a
acontecer.
4
Da mesma maneira, sempre que um programador desenvolve a primeira versão de seu
programa, há uma fase de testes, quando os erros aparecem e são ajustados à
necessidade do usuário. A esta fase damos o nome de DEPURAÇÃO.
A metodologia de aprendizagem
Como vemos, a programação de computadores é bastante semelhante a programação de
nossas mentes, o que torna suas dificuldades e características também
similares.Aplicaremos as técnicas e recursos existentes aos elementos inerentes a
computadores, interagindo com variáveis de memória, comandos de entrada e saída de
dados, além de comandos que controlarão a repetição de blocos de comandos.
Estruturas como vetores, matrizes, listas, filas, pilhas, árvores, entre outras, serão
ministrados em outras disciplinas.
Para representar as ações (comandos), utilizaremos uma linguagem não comercial - o
pseudocódigo, conhecido como Algoritmo. Uma linguagem que lhe poupe de comandos
em inglês, e que não apresente grandes sofisticações. A linguagem de programação
experimental que utilizaremos para exercitar a lógica de programação será na nossa
própria linguagem: a língua portuguesa.
Para facilitar o processo de aprendizagem, os temas que abordaremos poderão ser
convertidos para a linguagem Pascal, que tem em suas origens, o objetivo de ensinar os
alunos a interagirem com o computador de forma prática.
5
Variáveis x Dados
Variável é o local de memória onde serão armazenados os dados de forma
temporária. Em nossos algoritmos não nos preocuparemos com o endereço real dessas
variáveis, pois a maioria das linguagens de programação tornam estes endereços
transparentes ao programador.
Para exemplificarmos a diferença entre dados
(constantes) e variáveis, bem como entender
melhor o endereçamento de variáveis, podemos
citar o exemplo de uma estante de prateleiras,
onde estão guardados livros ou quaisquer outros
objetos (veja figura).
Os livros e objetos podem ser chamados de
dados, conteúdo das variáveis. Para nos referenciarmos à variável é necessário darmos
um nome à mesma, pois não trabalharemos com endereço de memória propriamente
dito, e sim com identificadores.
É aconselhável que o nome da variável expresse o que vai ser armazenado dentro dela,
p.e. nomeAluno, quantidade_alunos.
As variáveis podem ainda ser simples ou compostas. As variáveis simples são aquelas
que recebem um único dado por vez, enquanto que as compostas podem armazenar
vários dados de uma só vez, porém, esta última não é objeto de nossa apostila.
Quando declaramos uma variável, temos que associar a ela algumas características:
• NOME ou IDENTIFICADOR
• TIPO do dado
Como dissemos anteriormente, o endereço físico da variável não precisa ser declarado, a
menos que estejamos programando em alguma linguagem de baixo nível, como o
ASSEMBLER. As linguagens de alto nível procuram espaços livres na memória do
computador para associarem bytes à variável declarada.
6
DATANASC Um bom nome para variáveis usadas para armazenar uma data de
nascimento.
Devemos evitar nomes do tipo: X, K, C1, ABC, etc... a menos que eles expressem
algo real.
Nomes de variável, na maioria das linguagens, NÃO devem:
Iniciar por números: 1C2, 9ANOS, 100, 4CANTOS, etc...
Ser descontínuos: DATA NASC, FONE COMERC, etc...
Outros requisitos podem aparecer dependendo de cada linguagem. O COBOL por
exemplo permite nomes longos para variáveis, já o CLIPPER, com apenas 10 bytes. O
COBOL permite separadores como hífens, barras, entre outros. Linguagens derivadas
do DBASE permitem apenas o UnderLine (Nome_Aluno) como caracter separador. A
maioria das linguagens apresenta certas restrições à livre escolha dos nomes das
variáveis. A mais evidente é a impossibilidade da utilização de palavras reservadas da
própria linguagem. Por exemplo, a palavra MOVE representa um comando para o
COBOL. Não é possível utilizarmos este nome como identificador de qualquer variável
nesta linguagem. Já para o CLIPPER, o MOVE pode ser um identificador.
Outras vezes, a linguagem traz consigo algumas variáveis reservadas. Tratam-se de
algumas variáveis que são automaticamente declaradas pela linguagem. Normalmente
elas registram a data e a hora do sistema operacional, ou algumas informações internas
como códigos de periféricos, endereços de memória para buffers, etc.
Tipo inteiro
Sinaliza que o conteúdo será de números e que não terá a parte decimal em sua
composição.
Ex.: 1200; -12; 0; etc
Tipo real
Sinaliza que o conteúdo será de números e que é permitida a digitação da parte decimal.
Ex.: 1200,00; -12,88; 0; etc
Tipo Literal
Sinaliza que o conteúdo aqui armazenado será toda a rede de caracteres alfanuméricos e os
ditos caracteres especiais. Os conteúdos destas variáveis SEMPRE serão demonstrados entre
aspas (simples ou dupla, dependendo da linguagem);
“São variáveis que aceitam conteúdos de qualquer natureza, portanto: números, letras e
símbolos em geral, não podendo estes números ser utilizados para operações
aritméticas”.
Ex.: "MARIA JOSE"; "Recife"; "123"; "NOMES"
7
Observações:
a) Não confundir os valores numéricos com os literais ou entre os literais. Vejamos
os casos a seguir.
Caso 1.
42 (inteiro) é diferente de “42” (literal) – Os tipos são diferentes, logo, seus
valores em memórias são diferentes;
Caso 2.
“01”(literal) é diferente de “1” (literal) – Os tipos são iguais, mas a
representação em memória é diferente.
Tipo Lógico
Este tipo de variável não permite o registro de dados numéricos ou literais. Uma
variável lógica só armazena um entre dois valores: VERDADEIRO ou FALSO.
Em nossa disciplina, não nos ateremos ao como exatamente, o computador registra esta
informação na memória. Pode ser por bytes zerados e não zerados, pelas letras V ou F,
ou por um outro mecanismo qualquer. O que nos interessa de fato é que este tipo de
variável não registra outro tipo de informação exceto Verdadeiro ou Falso.
Para efeito de representação, diremos que o conteúdo de uma variável lógica será
representado pelas letras V e F, representando respectivamente, Verdadeiro e Falso:
Declaração de Variáveis
TODAS as variáveis que o programa vier a utilizar têm que existir antes de serem
referenciadas. Por esse motivo, necessitamos declarar estas. Como fazer isso? Através
do comando DECLARE.
Comando DECLARE
DECLARE <Nome da variável>[,<Nome da variável>]: <tipo>;
8
IDADE : Inteiro;
ALTURA: Real;
DEPENDENTE, LOGICO;
Ou ainda, em uma mesma linha, desde que sejam do mesmo tipo de dados.
Exemplo:
DECLARE IDADE, CONTADOR:inteiro; (obs.: tipo e tamanho iguais}
Observação: As vezes substituímos o comando Declare por Var ou Defina, dependendo da
linguagem que estamos querendo nos aproximar. Outros comandos
poderão sofrer variações. Cabendo ao professor da disciplina fazer os
ajustes baseados no direcionamento que queira dar à disciplina.
Operadores
Podemos atribuir a uma variável o resultado de uma expressão numérica. Atribui é uma
ação que as linguagens possuem e que representa o ato de preencher o espaço da
variável com um conteúdo, conforme o tipo de dado (veremos mais detalhadamente em
tópico específico). Entendemos por expressão numérica um conjunto de operações
aritméticas combinadas entre operandos e operadores. Mas além das expressões
numéricas, existem expressões que exigem tratamentos particulares, como veremos a
seguir.
Operadores Numéricos
São elementos (símbolos) utilizados para representar uma operação de cunho aritmético.
+ indica SOMA
- indica SUBTRAÇÃO
* indica MULTIPLICAÇÃO
/ indica DIVISÃO
A := 2 * 6 / 3
12
Operadores Relacionais 4
São elementos (símbolos) utilizados para realizarmos operações de comparações,
recebendo como resposta o valor verdadeiro ou falso.
= igual a
Exemplos:
Dados A = 3, B = 2, C = ‘Jose’ , D = ‘Jose’, NOME = ‘JOSE’
A>B Retorna V
C=D Retorna V
9
NOME = "JOSE" Retorna V (Está sendo comparado o conteúdo da variável NOME com a
string “JOSE”.
NOME = D Retorna F (estão sendo comparados os conteúdos das variáveis NOME e
D).
Os operadores relacionais incidem sobre dados e variáveis numéricas e caracteres.
Assim sendo, podemos comparar não apenas números, mas também palavras. Neste
sentido, a comparação respeitará a ordem alfabética das iniciais de cada uma.
Exemplos:
"MARIA" > "ANA" Retorna V
"MARIA" < "MARIO" Retorna V
observação: as comparações só podem ser feitas com elementos dos mesmos tipos.
Operadores Lógicos
Estes elementos são necessários quando você deseja realizar comparações entre resultados
lógicos obtendo como resposta outro valor lógico. Estranho, não? Mas é exatamente isso que
ocorre. Por exemplo: se você ler um anuncio sobre emprego que tenham as seguintes
solicitações:
Precisa-se de pessoas do sexo feminino e com idade máxima 40 anos. O que você
consegue extrair deste anuncio? A resposta seria: duas exigências, a saber, o SEXO da
pessoa deve ser igual a feminino (“F”) e a IDADE deve ser menor ou igual a 40 anos. Logo,
estamos diante de duas sentenças, que, dependendo do que seja colocado como dados na
comparação, poderemos ter a possibilidade do resultado ser falso ou verdadeiro. Se o SEXO
for igual a “M” (masculino), a primeira sentença será falsa. Para você poder ocupar a vaga
oferecida, necessário que sejas do sexo feminino e sua idade esteja na faixa etária solicitada.
Para o programa, o raciocínio é exatamente igual.
Para que gerenciarmos esta etapa da lógica, utilizaremos os operadores a seguir:
Operador Detalhamento Prioridade
de execução
OU A sentença que contiver este operador será verdadeira se pelo 3º
(Opcionalidade) menos uma das expressões nela contida retornar valor verdadeiro.
Observação: caso sejam colocados os parênteses na sentença, a prioridade de execução será alterada
iniciando-se pelos elementos contidos dentro destes. Caso exista mais de uma sentença
nesta condição, observar-se-á, além do exposto acima, a execução dos comandos da
esquerda para a direita da expressão.
Vejamos a “TABELA VERDADE” a seguir para entendermos melhor.
E OU
V V V V V V
F V F F V V
V F F V F V
F F F F F F
Exemplos:
X = 90 E Z = 100
A >= 67 OU A <= 200
NOME <> "ANA" E NAO (NOME = "MARIA")
(NOME <> "ANA") E (NAO (NOME="MARIA") OU (NOME="PEDRO"))
10
Entendendo Representações de Sintaxes
Agora que você já aprendeu o primeiro comando de nossa linguagem algorítmica, é
importante aprender a forma sintética de se representar um comando. Note que, ao
enunciarmos o comando DECLARE, nós utilizamos algumas nomenclaturas e
simbologias que você, certamente, encontrará em qualquer livro sobre quaisquer
linguagens.
Assim, vamos elucidar algumas delas:
Repetindo o comando,
Exemplos:
NOME := "JOÃO"; Dados Literal têm que vir entre aspas
IDADE := 25; Dados Inteiros não precisam de aspas
ALTURA := 1,67; Dados tipo Real, possuem uma vírgula como delimitador entre a parte
decimal e a parte inteira (linguagens comerciais adotam o ponto).
DEPENDE := F; Dados LOGICO devem vir entre pontos
Também podemos atribuir, a uma variável, o valor de outra:
Exemplo: ALTURA := IDADE; a variável ALTURA recebe o valor de IDADE
Também podemos atribuir o resultado de uma expressão numérica, ou de outro tipo, a
uma variável:
SOMA := QUOEF * (VALOR + 10) / DIVISOR;
Estruturação do Algoritmo
Existem alguns formatos para organizar um algoritmo, porém adotaremos o mais global,
facilitando assim o aprendizado. Vejamos a seguir:
11
Algoritmo <nome do programa>;
Declare {Local para declaração das variáveis}
Início
{Local para inicialização das variáveis / mensagens montando a
tela}
{Local para receber dados, processar dados e dar saída nos dados
/ mensagens}
Fim
Comando LEIA
Leia <variável>;
Ou
Leia (<variável>);
Algoritmo
Declare wnome:literal;
Widade:Inteiro;
Inicio
Leia wnome;
Leia widade;
<seqüência de comandos>;
Fim
Importante! Pelo menos um dos parâmetros deve ser informado quando da utilização deste
comando.
<string> - Texto que está sendo encaminhado para tela.
12
<variável> - Qualquer variável utilizada no programa.
<operação> - Algum cálculo executado durante a exibição. Neste caso o processador
realiza a operação de cálculo e depois libera o resultado para a exibição na
tela.
Por dentro dos termos: string = conjunto de caracteres dentro de uma mesma variável.
Exemplo:
Algoritmo exemplo;
Declare wnome:Literal;
INICIO
ESCREVA “ NOME ..:”;
LEIA wnome;
ESCREVA "Seu nome é ", NOME;
FIM;
Quando estudamos lógica algorítmica não nos preocupamos em que coordenada ou
posição a informação será exibida, mas sim com o fato de que deve ser dado o comando
de saída dos dados.
No exemplo acima, teremos o conteúdo da variável NOME exibido no vídeo logo após
a mensagem “Seu nome é ”, como mostra a ilustração abaixo.
NOME ..: Karla Silva
Seu nome é Karla Silva
Manipulaçao de valores
1) Dados 2 números digitados via teclado, faça um algoritmo capaz de exibir a soma deles no vídeo.
Algoritmo soma;
Declare X:Inteiro;
Y:Inteiro;
SOMA:Inteiro;
Inicio
Leia X;
Leia y;
SOMA := X + Y;
Escreva SOMA;
Fim
Comentário Na solução acima, declaramos 3 variáveis de memória. X e Y foram criadas para
armazenar os dois números que seriam digitados pelo usuário, e SOMA serviu para
armazenar o resultado final da operação com essas duas variáveis.
Mas quase sempre existe mais de uma maneira de solucionarmos um problema, não é?
Com algoritmos não é diferente. Tente repensar o algoritmo acima utilizando apenas 2
variáveis, em vez de 3 ! Como você pode observar, existem no mínimo duas soluções
para este problema:
Algoritmo soma;
Declare X:Inteiro;
Y:Inteiro;
SOMA:Inteiro;
Inicio
Leia X;
Leia y;
X := X + Y;
Escreva X;
Fim
Ou ainda:
Algoritmo soma;
Declare X:Inteiro;
Y:Inteiro;
SOMA:Inteiro;
Inicio
Leia X;
Leia y;
Y := X + Y;
Escreva Y;
13
Fim
Algoritmo soma;
Declare X:Inteiro;
Y:Inteiro;
SOMA:Inteiro;
Inicio
Leia X;
Leia y;
Escreva (X+Y);
Fim
Conceitos Fundamentais
Contador x Acumulador
Estes nomes são dados a expressões que realizam adição de dados, porém, no primeiro
caso, CONTADOR, é a expressão de adição que contabiliza valores fixos e
predeterminados. No segundo caso, ACUMULADOR, é a expressão de adição que
contabiliza valores variáveis.
Exemplo de Contador:
QtdFem := QtdFem + 1 (note que o valor adicionado a quantidade de femininos será
sempre 1)
Exemplo de Acumulador:
SomaIdade := SomaIdade + Idade (note que o valor adicionado a soma das idades
será variável)
Observação: na maioria das vezes, estes elementos são iniciados com o 0 (zero).
Percentuais
Encontramos algumas dificuldades quando tratamos estes temas. Aqui daremos algumas
regras básica para que você se sinta a vontade no momento do cálculo.
Encontrando um valor percentual:
Veja esta continha simples
50 bolas 100 % (50 = Todo)
25 bolas x % (25 = Parte do Todo)
Chegaremos a conclusão:
X % = 25 x 100 / 50
Estas informações nos levam a fórmula:
14
<perc> := < Parte do Todo> * 100 / < Todo>
Encontrando um valor final após aplicação do percentual:
<Novo valor> := <valor anterior> * 1,<valor do percentual>;
Ex.: adicionar 5 % sobre o salário e informar o valor do novo salário.
Nsal := Salario * 1,05;
Encontrando um valor adicionado percentualmente a uma variável:
<Novo valor> := <valor anterior> * 0,<valor do percentual>;
Ex.: adicionar 5 % sobre o salário e informar o valor acrescido ao salário.
Reajuste := Salario * 0,05;
Observação: quando você não sabe o valor a ser aplicado pois vem dentro de uma
variável, não podemos fazer a aplicação literal do que explicamos neste tópico, mas
precisamos traduzir em termos de programa este processo. Vamos fazer os
mesmos exemplos anteriores, mas imaginando que o percentual virá em variáveis.
a) Nsal := Salario * (1 + perc / 100);
b) Nsal := Salario * (perc / 100);
Maior Valor
Existirão momentos em que você sentirá necessidade de identificar o maior elemento
dentro de um conjunto de dados processados. Só existe uma forma de sabermos qual o
maior valor: comparando as grandezas do conjunto. Para descobrirmos qual será o
maior elemento, inicializaremos uma variável, que armazenará o maior valor do
conjunto, com um valor bem pequeno para a situação, e, cada dado existente no
conjunto iremos comparar com esta dita variável. Caso o valor encontrado seja superior,
este será colocado como conteúdo da variável maior, já que este novo dado representa a
maior grandeza neste momento do processamento.
Encontrando o maior valor dentro de um conjunto:
Obs.: para entender melhor esse exemplo, é bom estar familiarizado com a estrutura de
repetição comentada mais adiante.
Algoritmo maior;
Declare MAIOR_ID:Inteiro;
Idade:Inteiro;
Cont:Inteiro;
Inicio
MAIOR_ID := 0;
Para cont := 1 até 10 Faça
Inicio
Leia Idade;
Se Idade > MAIOR_ID então
Inicio
MAIOR_ID := Idade;
Fim
Fim
Escreva “A maior idade é “, MAIOR_ID;
Fim
15
Menor Valor
De igual forma iremos trabalhar para encontrar o elemento que possui o menor valor.
Para tanto, iremos inicializar uma variável, que armazenará o menor valor do conjunto,
com um valor bem alto adequado para a situação, e, cada dado existente no conjunto
iremos comparar com esta dita variável. Caso o valor encontrado seja inferior, este será
colocado como conteúdo da variável menor, já que este novo dado representa a menor
grandeza neste momento do processamento.
Encontrando o menor valor dentro de um conjunto:
Algoritmo Menor;
Declare menor_ID:Inteiro;
Idade:Inteiro;
Cont:Inteiro;
Inicio
menor_ID := 999;
Para cont := 1 até 10 Faça
Inicio
Leia Idade;
Se Idade < Menor_ID então
Inicio
menor_ID := Idade;
Fim
Fim
Escreva “A menor idade é “, Menor_ID;
Fim
Estruturas Condicionais
Sabemos que as linhas de um programa estruturado são executadas de cima para baixo
de forma seqüencial (na orientação ao objeto, apenas os métodos seguem este conceito).
Mas freqüentemente precisamos mudar este curso natural de acordo com decisões a
serem tomadas.
Por exemplo, imagine se dentro de um conjunto de alunos você desejasse verificar a
quantidade de homens. Só existiria uma forma para sabermos o resultado: fazendo uma
pergunta sobre se os dados processados continham na variável SEXO o conteúdo igual a
“M”.
O comando que realiza esta “pergunta” é o SE, que possui três situações bem definidas
dentro da programação: Estrutura Condicional Simples, Composta ou
Encadeadas(Ninhos de SE’s).
16
DECLARE Idade, Numérico, 3
Nome, Caracter , 35
Sexo, Caracter , 1
Inicio
Leia Nome;
Leia Sexo;
Leia Idade;
Se Sexo = “M” então
Inicio
Escreva "A idade de ", Nome, “ é “, Idade;
Fim
Escreva "Fim da transacao";
Fim
Onde:
17
Inicio
<sequência de comandos 1>;
Se <condição 2> então
Inicio
<sequência de comandos 2> ;
Fim
Fim
Senão
Inicio
Se <condição 3> então
Inicio
<sequência de comandos 3> ;
Fim
Senão
Inicio
<sequência de comandos 4> ;
Fim
<sequência de comandos 5>;
Fim
Fim
18
Exercícios de Aprendizagem
1) Dados 2 números digitados via teclado, faça um algoritmo capaz de exibir no vídeo o maior deles.
Algoritmo maior;
Declare X:Inteiro;
Y:Inteiro;
Inicio
Leia X;
Leia Y;
Se X > Y Então
Inicio
Escreva X;
Fim
Senão
Inicio
Escreva Y;
Fim
Fim
2) Dados 3 números distintos, digitados via teclado, faça um algoritmo capaz de exibir no vídeo o maior
deles.
Algoritmo maior;
Declare X:Inteiro;
Y:Inteiro;
Z:Inteiro;
Inicio
Leia X;
Leia Y;
Leia Z;
Se (X > Y) E (X > Z) Então
Inicio
Escreva X;
Fim
Senão
Inicio
Se (Y > Z) E (Y > X) Então
Inicio
Escreva Y;
Fim
Senão
Inicio
Escreva Z;
Fim
Fim
Fim
Comentário: Note que, para descobrirmos qual o maior entre três números, precisamos codificar 2
comandos SE encadeados. Se fossem 4 variáveis, seriam 3 SE´s.
3) Dados 2 números distintos digitados via teclado, faça um algoritmo capaz de exibi-los em ordem
crescente.
Algoritmo Ordenacao;
Declare A:Inteiro;
B:Inteiro;
Inicio
Leia A;
Leia B;
SE A > B Então
Inicio
Escreva B, A;
Fim
Senão
Inicio
Escreva A, B;
Fim
Fim
Como você solucionaria este problema se tivéssemos de utilizar apenas um comando
ESCREVA ?
19
A primeira imagem que nos vem à mente é que seria impossível, tendo em vista que
uma informação ao ser colocada em uma variável simples irá “ocupar” o lugar da
informação já existente na outra variável. Mas em informática podemos utilizar todas as
técnicas disponíveis para solucionarmos um problema, evitando soluções extensas ou
complicadas.
O recurso que vamos dispor nesse momento é a utilização de uma variável auxiliar.
Variável auxiliar é aquela que nós utilizamos como apoio. Veja que para realizar a troca
de dados exposta a seguir, só com esse recurso.
Algoritmo troca;
Declare A:Inteiro;
B:Inteiro;
X:Inteiro;
Inicio
Leia A;
Leia B;
Se A > B Então
Inicio
X := A;
A := B;
B := X;
Fim
Escreva A , B;
Fim
Comentário: Para economizarmos comandos ESCREVA, observe que invertemos os valores de A e B
toda vez que a variável A fosse maior que B. Assim, independente dos valores de A e
B, sempre exibiremos A e B nesta ordem. Para propiciar esta inversão utilizamos uma
variável auxiliar X.
Se você não entendeu muito bem o porque da variável X ter sido utilizada no algoritmo
acima, preste bastante atenção agora:
Deseja-se trocar os valores de duas variáveis: A e B, por exemplo.
A B
10 15
2º passo
X:=A
10 15 3ºA:=B
passo
X B:=X
10
1º passo
20
Estruturas de Repetição
Algumas vezes, sentimos necessidade de escrevermos repetidamente o mesmo
comando. Em alguns casos, a quantidade de vezes que temos de escrever é
indeterminada ou depende de uma condição.
Existem algumas formas de definir as estruturas de repetições. Algumas lembram até
esta ou aquela linguagem. Em nosso curso iremos no ater a duas estruturas, as quais
podemos representar tranqüilamente em qualquer ambiente de programação.
As estruturas são: Enquanto e Para. Cada uma delas possui uma característica que lhe é
peculiar. É normal ouvir a pergunta: “quando iremos utilizar esta ou aquela estrutura?”.
A resposta é simples, pois depende da habilidade de cada um. Existem momentos que
podemos resolver a mesma questão com todas as duas formas, mas existem momentos
que não é possível. Por isso o segredo encontra-se no exercitar.
Bem, vamos desmistificar estas estruturas.
Comando ENQUANTO
O comando ENQUANTO prende um trecho do programa a um laço (looping), ou seja,
podemos determinar que um certo bloco de comandos seja executado repetidamente
enquanto uma condição for verdadeira.
.
Enquanto <condição> Faça { se<condição> for verdadeira}
Inicio { serão executados os comando deste bloco}
< comandos >;
Fim
1o. Caso
Só entra no laço de repetição, se e somente se, a condição for verdadeira. Para sair da
repetição, a condição tem que ser satisfeita.
Enquanto <condição> Faça
início
< comandos > ;
Fim
2o. Caso
Entra no laço independente da condição, mas para sair, a condição 2 tem que ser verdadeira.
Caso a condição não seja satisfeita, dizemos que o programa “entrou em loop”.
21
Comando PARA
O comando PARA executa um bloco de comandos, gerenciando esta execução em cima
de uma contagem. Enquanto ela não for satisfeita, ou seja, o valor final não for
ultrapassado, os comandos do bloco serão repetidos a cada nova verificação da
condição e obtenção de resultado falso;
Se você utilizar este comando, irá poupar a inicialização da variável, pois esta
assumirá como valor inicial o declarado como <valor_inicial>; não precisará contar a
quantidade de vezes que o laço foi executado, pois esta estrutura tem como uma de
suas características, o adicionar um determinado valor a variável <var> baseado no
valor utilizado como incremento (+) ou decremento (-) utilizado no parâmetro incr[...]
estabelecendo uma contagem até que o valor declarado como <valor_final> seja
alcançado e realizando a última execução dos comandos existentes entre o Inicio e o
Fim. Se o parâmetro Incr [ +/- valor] for omitido, o programa assumirá por Default
sempre o incremento de + 1.
Vamos utilizar um exemplo para esclarecer cada uma dessas instruções dentro de suas
respectivas estruturas de repetições. Digamos que temos de fazer o computador escrever
o somatório de 5 idades informadas na tela. Usaremos os comandos aprendidos até
agora.
♦ Com a estrutura ENQUANTO
Algoritmo
Declare widade:Inteiro;
Wcont:Inteiro;
Wsomaid:Inteiro;
Inicio
Wcont := 0;
Wsomaid := 0;
Leia widade;
Enquanto wcont < 5 Faça
Inicio
Wcont := wcont + 1;
Wsomaid := wsomaid + widade;
Leia widade;
Fim
Escreva “O total das idades é “, wsomaid;
Fim
22
Fim
Escreva “O total das idades é “, wsomaid;
Fim
Exercícios de Aprendizagem
1) Elabore um algoritmo capaz de exibir todos os números inteiros, desde o 1 até o 10.
Algoritmo exemplo1;
Declare NUMERO:Inteiro;
Inicio
NUMERO := 1;
Enquanto NUMERO <= 10 Faça
Inicio
Escreva NUMERO;
NUMERO := NUMERO + 1;
Fim
Fim
Comentário: Note que, utilizamos uma variável numérica chamada NUMERO que recebeu,
inicialmente, o valor 1, e daí em diante foi ciclicamente incrementada de 1
(NUMERO:=NUMERO+1) até que a condição imposta pelo ENQUANTO tornasse
falsa.
2) Elabore um algoritmo capaz de receber um número e, em seguida, listar todos os números de 1 até
ele.
Algoritmo exemplo2;
Declare NUMERO:Inteiro;
LIMITE:Inteiro;
Inicio
Leia LIMITE;
NUMERO:=1
ENQUANTO NUMERO <= LIMITE FAÇA
Inicio
Escreva NUMERO;
NUMERO := NUMERO + 1;
Fim
Fim
Comentário: Este programa é similar ao anterior. A única sofisticação implementada foi a
flexibilização do limite. Isto tornou o algoritmo mais genérico, servindo para listar a
seqüência de qualquer número, e não apenas a do 10. Para alcançar esta sofisticação,
foi necessário o uso da variável LIMITE que de fato limitou o laço do Enquanto ao seu
conteúdo, conteúdo este que fora recebido logo no início da execução do programa,
com o comando Leia LIMITE.
3) Sofisticando ainda mais o programa da 3ª questão, vamos fazer com que, além de listar todos os
números de 1 até um determinado número digitado via teclado, ele mostre a soma de todos esses
números no final da listagem.
Algoritmo exemplo2;
Declare NUMERO :Inteiro;
LIMITE :Inteiro;
SOMA :Inteiro;
Inicio
Leia LIMITE;
NUMERO := 1;
SOMA := 0;
Enquanto NUMERO <= LIMITE Faça
Inicio
Escreva NUMERO;
SOMA := SOMA + NUMERO;
NUMERO := NUMERO + 1;
Fim
Escreva SOMA;
Fim
Comentário: Perceba que, para acumular os valores parciais assumidos pela variável NUMERO,
precisamos lançar mão de uma outra variável, a qual chamamos de SOMA. Assim, a
cada ciclo do Enquanto acrescentamos ao valor de SOMA o novo valor de NUMERO
(SOMA :=SOMA+NUMERO).
23
Observe também que ao declaramos SOMA, na prática das linguagens, temos que tomar
o cuidado dela ter capacidade de absorver o resultado da expressão. É fácil entender por
que! Como SOMA será um “Acumulador” dos valores de NUMERO, ela sempre terá
valores maiores que NUMERO, podendo seu montante, exceder a capacidade definida
em NUMERO.
Técnicas de Algoritmização
Como dissemos anteriormente, não há qualquer receita de bolo para resolvermos um
determinado problema através da algoritmização. Cada caso é um caso bem particular.
Entretanto, alguns procedimentos sistemáticos podem auxiliar a elucidação de alguns
problemas.
24
Todos os programas possuem 3 fases bem definidas e nestas, os seus dados necessários.
Quando você tiver domínio sobre estas três fases, o algoritmo fluirá naturalmente.
Procure identificar a 1ª fase que é a da identificação dos dados de entrada; a 2ª fase e a
que verifica os dados relativos ao processamento (condições de encerramento, cálculos,
mensagens, etc; a 3ª fase é aquela aonde você descobre quais os dados de saída, ou seja,
após o processamento, aonde irão ser colocado estes dados?
Vamos exemplificar.
Elaborar um algoritmo que receba a matrícula, o nome e o salário de 50
funcionários, imprimindo ao final, o somatório dos salários e a média salarial.
Vamos por em prática nosso aprendizado.
1ª fase (Dados de Entrada)
Será lido na tela a MATRICULA, NOME E SALÁRIO;
Leia Matricula;
Leia Nome;
Leia Salário;
2ª fase (Processamentos)
Serão processados dados de 50 funcionários. (isto implica dizer que
precisaremos de uma variável para contabilizar e gerenciar este
processo); O melhor comando para gerenciar um valor predefinido é
o PARA.
Cada elemento que for processado, será acumulado o valor do salário
(somatório dos salários).
AcumSal := AcumSal + Salário;
Observe que para cálculo da média salarial é necessário sabermos o
somatório dos salários e dividir o mesmo pela quantidade de pessoas
que os possuem. Como sabemos que existirão 50 pessoas, para
encontrar a média é super simples.
Calcular a média dos salários.
Media := AcumSal / 50;
ª
3 fase (Dados de Saída)
Dar saída no valor da média calculada.
Escreva “A média salarial é “, Media;
Montando o Algoritmo
Algoritmo exemplo;
Declare AcumSal:Real;
Cont :Inteiro;
Salário: Real;
Media :Real;
Nome :Literal;
Inicio
AcumSal := 0
25
Para cont := 1 até 50 faça
Inicio
Leia Matricula;
Leia Nome;
Leia Salário;
AcumSal := AcumSal + Salário;
Fim
Media := AcumSal / 50;
Escreva “A média Salarial é “, Media;
Fim
Facílimo, não!
Com estas competências adquiridas nesse módulo, você deve exercitar e chegar num
estágio de habilidade que lhe permitirá obter sucesso nas demais competências que
serão ministradas a você em sala de aula.
Lembre-se: Os exercícios que estão na apostila dedicada só para este fim, devem ser
praticados e esgotados, pois isto o fará crescer em situações as mais adversas dentro do
mundo da programação.
Sucesso a todos!
Desafios Resolvidos
Como fazer para descobrir a quantidade de elementos
iguais ao maior do conjunto?
Simples. Primeiro, você deverá encontrar o maior;
Em segundo lugar, verificar quais os elementos são iguais
a este maior encontrado.
Aqui damos uma dica. Ao encontrar um elemento cujo
valor seja superior àquele que representa o maior, temos duas
tarefas a fazer. Uma é atribuir o valor do elemento para ser o
maior e em seguida inicializar a quantidade com o numeral 1
(um). Mas porque 1 (um)? Pelo fato de que acabamos de
encontrar um número maior e com certeza, nesse momento ele
é único. Como fazer para contabilizar todos os iguais? A
própria pergunta já é a resposta: cada vez que você encontrar
algum valor igual ao maior, contabilizaremos mais um.
Vamos ao Exemplo?
“Elaborar um algoritmo que receba idade de 50 pessoas e
informe ao final, a maior delas e quantas pessoas a possuem.”
Algoritmo resolvidos1;
Declare Ma_idade:Inteiro;
Qt_maid :Inteiro;
Cont :Inteiro;
Widade :Inteiro;
Inicio
Ma_idade := 0;
26
Qt_maid := 0;
Para cont := 1 até 50 faça
Inicio
Leia widade;
Se widade > Ma_idade então
Inicio
Ma_idade := widade;
Qt_maid := 1;
Fim
Senão
Inicio
Se widade = Ma_idade então
Inicio
Qt_maid := Qt_maid + 1;
Fim
Fim
Fim
Escreva “A maior idade é ..........................: “, Ma_idade;
Escreva “Quantidade de pessoas com a maior idade...: “, Qt_maid;
Fim
Algoritmo
Declare Ma_idade1:Inteiro;
Ma_idade2:Inteiro;
Qt_maid1 :Inteiro;
Qt_maid2 :Inteiro;
Cont :Inteiro;
Widade :Inteiro;
Inicio
Ma_idade1 := 0;
Ma_idade2 := 0;
Qt_maid1 := 0;
Qt_maid2 := 0;
Para cont := 1 até 50 faça
Inicio
Leia widade;
Se widade > Ma_idade1 então
27
Inicio
Ma_idade2 := Ma_idade1;
Qt_maid2 := Qt_maid1;
Ma_idade := widade;
Qt_maid := 1;
Fim
Senão
Inicio
Se widade = Ma_idade1 então
Inicio
Qt_maid1 := Qt_maid1 + 1;
Fim
Senão
Inicio
Se widade > Ma_idade2 então
Inicio
Ma_idade2 := widade;
Qt_maid2 := 1;
Fim
Senão
Inicio
Se widade = Ma_idade2 então
Inicio
Qt_maid2 := Qt_maid2 + 1;
Fim
Fim
Fim
Fim
Fim
Escreva “A maior idade é ..........................: “, Ma_idade1;
Escreva “Quant. de pessoas com a maior idade.......: “, Qt_maid1;
Escreva “A segunda maior idade é ..................: “, Ma_idade2;
Escreva “Quant. de pessoas com Seg. maior idade....: “, Qt_maid2;
Fim
28
29