Você está na página 1de 28

FLP (Fundamentos de

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.

Uso das Variáveis no Algoritmo


O nome a ser associado à variável (ex.: X, Y, KTI34), não é importante para o
computador, pois este servirá apenas como uma mera referência. Entretanto para outros
programadores que possam vir a analisar os seus programas, ou até para você mesmo
após algum tempo, é necessário que esses nomes sejam expressivos, simples e
objetivos.
Vejamos agora alguns exemplos de identificadores:
SALARIO Um bom nome para variável que irá armazenar um valor salarial;
CONT Um bom nome para variável que irá registrar uma contagem;
TOTAL Um bom nome para variáveis acumuladoras de somas;

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.

Escolhendo o TIPO do Identificador da Variável


O segundo argumento presente na declaração de uma variável é o seu tipo. O tipo de
uma variável define que tipos de dados poderão ser armazenados nela. A declaração
(definição das variáveis) será feita no início do algoritmo.

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:

Tamanho das Variáveis


Quando declaramos uma variável não precisamos delimitar o byte inicial e final que
esta irá ocupar na memória do computador, entretanto é imprescindível entendermos
que elas ocupam um espaço na memória e que os tipos de dados trazem definições sobre
as variáveis, inclusive o que pode armazenar e os seus limites.
Outros tipos de variáveis também são tratados por novas linguagens, tais como: HORA,
MEMORANDO, OBJETO. Entretanto aqui só trataremos os tipos mencionados
anteriormente, ou seja: Literal, Inteiro, Real e Lógico..

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>;

<Nome da variável> Nome ou identificador da variável


<Tipo> Tipo da variável definida: Literal, Inteiro, Real e Lógico.
Exemplos: DECLARE NOME : Literal;
DECLARE IDADE : Inteiro;
DECLARE ALTURA: Real;
DECLARE DEPENDENTE: LOGICO;
Podemos declarar diversas variáveis utilizando apenas um comando DECLARE.
Exemplos: DECLARE NOME : Literal;

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

Relembrando um pouco a matemática elementar, a ordem de execução de uma


expressão aritmética segundo as prioridades de operações é:
Parêntesis: ( )
Multiplicação e Divisão: *, /
Soma e Subtração: + , -
Obs.: Caso existam numa mesma sentença operadores de mesma ordem de prioridade, a
execução será feita da esquerda para direita.

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.

> maior que < menor que = igual a


>= maior ou igual a <= menor ou igual a <> diferente

= 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.

E A sentença que contiver este operador será verdadeira se as 2º


(Simultaneidade) expressões nela contida resultarem valores verdadeiros.

NÃO Quando queremos inverter (negar) o resultado de uma condição ou 1º


(Negação) expressão lógica.

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,

DECLARE <Nome da variável>[,<Nome da variável>]: <tipo>;

< > Delimita o espaço reservado para inserirmos um parâmetro do comando. A


maioria dos comandos das linguagens possui parâmetros.
[ ] Delimita o espaço reservado para inserirmos um parâmetro opcional do
comando, ou seja, tudo o que vier entre colchetes nem sempre precisará
ser especificado no comando.
Ex: DECLARE SOMA : Inteiro;
DECLARE SOMA, QUANTIDADE_ALUNOS:inteiro;
Observe ainda que os colchetes [ ] e os delimitadores maior/menor < > podem
acumular-se entre si, ou seja, dentro de um grupo de parâmetros opcionais [ ],
poderemos ter outros [ [..] ], dependendo apenas da característica do comando.

Atribuição de Valores a Variáveis


Até agora, vimos conceitos e exemplos de variáveis. Agora vamos aprender a utilizá-las
em algoritmos.
Representaremos o comando de atribuição pela combinação de dois símbolos do
teclado, que são dois pontos e o sinal de igual, sem espaços entre eles(:=). Este símbolo
representará a atribuição de um dado a uma variável.

<variável> := <dado a ser armazenado>

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

Entrada e Saída de Dados


Até aqui nós vimos como atribuir um valor a uma variável dentro de um programa.
Mas este valor foi atribuído pelo próprio programa, não é?
Mas como fazer com que um programa, em um dado momento, receba um valor
digitado pelo usuário?
Como receber este dado através do teclado?
Como exibir o resultado de uma operação qualquer no monitor?
Existem nas linguagens de programação, comandos de entrada e saída de dados. No
caso do algoritmo, estes comandos são os seguintes: Leia (entrada), Escreva (saída -
tela).

Comando LEIA
Leia <variável>;
Ou
Leia (<variável>);

<variável> - Variável que receberá os dados digitados pelo usuário.

Algoritmo
Declare wnome:literal;
Widade:Inteiro;
Inicio
Leia wnome;
Leia widade;
<seqüência de comandos>;
Fim

A execução do comando LEIA provoca uma pausa na execução do programa. O


programa fica em estado de espera, aguardando a digitação de algo que deva ser
atribuído às variáveis especificadas na sintaxe do comando. É bom deixar claro que o
LEIA, permite um preenchimento por vez. Se você desejar digitar várias
informações referente a mesma variável, terá que utilizar uma estrutura de
repetição (veremos mais adiante) e fazer com que o fluxo do programa passe pelo
mesmo local onde o LEIA está posicionado
No exemplo acima, veja que o computador aguarda que o usuário digite dois valores
distintos através do teclado. Estes dois valores irão ocupar, respectivamente, as
variáveis NOME e IDADE.

Comando ESCREVA (lista informações no vídeo)


Escreva <string>[, <variável>][, <operação>];
Ou
Escreva (<string>[, <variável>][, <operação>] );

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

Qual a solução mais eficiente das duas?


Somente o fato de economizar uma variável torna qualquer uma dessas soluções bem
mais eficiente que a primeira. O mesmo caso, sem precisar utilizar as variáveis para
guardar o resultado, agiliza ainda mais o processamento. Mas este caso deve ser
utilizado só quando você não precisar do valor resultante da operação.

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).

Estrutura Condicional SE (Símples)


Se <condição> então
inicio
<sequência de comandos>;
Fim

<condição> - Expressão lógica qualquer.


<sequência de comandos> São comandos que serão executados caso o resultado da
expressão lógica seja verdadeira. Esses comandos devem ser escritos
entre as delimitações da gerência do comando, ou seja, entre as palavras
Início e fim.
Em tempo de execução, se a expressão lógica retornar verdadeiro então a seqüência de
comandos será executada.
Para fixar esta idéia, tente depurar o seguinte algoritmo:
Algoritmo exemploSE1;

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

Estrutura Condicional SE (Composta)


Se <condição> então
Inicio
<sequência de comandos 1>;
Fim
senão
inicio
<sequência de comandos 2>;
Fim

Onde:

<condição> - Expressão lógica qualquer.


<sequência de comandos 1> São comandos quaisquer que serão executados caso o
resultado da expressão lógica seja verdadeira (V).
<sequência de comandos 2> São comandos quaisquer que serão executados caso o
resultado da expressão lógica seja falsa (F)
Senão - Variação do comando, para atender o tratamento de informação que não foi
contemplada na <condição>, por ser falso o resultado. Só deve ser
utilizado para otimizar ou se precisar tratar a negativa da <condição>.
Para fixar esta idéia, tente depurar o seguinte algoritmo:
Algoritmo exemploSE2;
DECLARE Idade: Inteiro;
Nome : Literal;
Sexo : Literal;
Inicio
Leia Nome;
Leia Sexo;
Leia Idade;
Se Sexo = “M” então
Inicio
ESCREVA "A idade de ", Nome, “ é “, Idade, “Sexo Masculino”;
Fim
senão
Inicio
SE Sexo = “F” ENTAO
Inicio
ESCREVA "A idade de ", Nome, “ é “, Idade, “Sexo Feminino”;
Fim
Fim
Escreva "Fim da transacao";
Fim

Estrutura Condicional SE (Encadeada)


Aqui vale comentar que esta estrutura não é algo preestabelecido, mas sim, uma
estrutura formada de várias condições, separando informações e dando os tratamentos
de acordo com a necessidade da questão. Abaixo segue um modelo hipotético de uma
estrutura SE (Encadeada).

Se <condição 1> então

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

Para exemplificarmos melhor, vejamos o exemplo:


1) Receber dois números (Num1 e Num2).
2) Realize a soma dos dois valores.
2.1) Caso a soma seja maior que zero, mostrar na tela o valor da soma e a mensagem:
“valor positivo”;
2.2) Caso contrário, verifique:
2.2.1) se o valor calculado é igual a zero. Se for, informar "valor igual a zero", senão;
2.2.2) informar, "valor negativo". (De qualquer maneira, em 2.2, exibir os dois números
envolvidos na soma).
Algoritmo PositivoNegativo;
Declare Num1:Inteiro;
Num2:Inteiro;
SOMA:Inteiro;
Inicio
Leia Num1, Num2;
SOMA:= Num1 + Num2;
Se SOMA > 0 ENTAO
Inicio
Escreva SOMA, “Valor Positivo”;
Fim
Senão
Inicio
Escreva num1, num2;
SE SOMA = 0 então
Inicio
Escreva "Valor Igual a Zero";
Fim
Senão
Inicio
Escreva "Valor Negativo";
Fim
Fim
Fim
Sobre esta solução, é importante salientar o seguinte:
• Note que a estética, apesar de não influenciar no resultado da execução do programa, é
de extrema importância para o bom entendimento do mesmo. Perceba que todos os comandos
subordinados ao primeiro SE ficam descolados na mesma margem. Apenas a cláusula
SENAO fica na mesma margem do SE. O mesmo ocorre com o segundo SE e com todos os
que vierem. A isto damos o nome de EDENTAÇÃO.
• Veja que o comando Escreva num1, num2 é executado independente da condição do
segundo SE. É por isto que eles foram escritos após o SENÃO do primeiro SE.

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

Se fizermos simplesmente A := B, apagaremos o valor original de A colocando o


conteúdo de B em seu lugar. Assim, as variáveis ficariam com o valor 15. Para
viabilizar o processo da troca, temos que recorrer a uma variável auxiliar que conterá
provisoriamente o valor de uma das variáveis a fim de devolvê-lo para a outra.

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

Esta estrutura possui duas formas de aplicação dentro de uma lógica:

a) Testando sempre uma condição de saída no próprio comando, ou;


b) Deixando este controle de saída da estrutura por conta de uma condição executada
internamente.

 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”.

Enquanto <condição> Faça


início
Se < condição 2 > Então
Início
sair
Fim
< comandos > ;
Fim;

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;

Para <var> := <valor_inicial> até <Valor_final> incr[+/- <valor>]


Faça
Inicio
< comandos > ;
Fim

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

♦ Com a estrutura PARA


Algoritmo
Declare widade:Inteiro;
Wcont:Inteiro;
Wsomaid:Inteiro;
Inicio
Wsomaid := 0;
Para wcont := 1 até 5 Faça
Inicio
Leia widade;
Wsomaid := wsomaid + widade;

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.

Dicas sobre Resolução de Algoritmos


Nunca dê um algoritmo por encerrado antes de testar todas as possibilidades
condicionais. Só o teste garante a eficácia do programa. Teste sempre as situações
extremas. Em algoritmos utilize diversas condições; teste ao menos uma situação que
se enquadre em cada condição prevista pelo algoritmo.
Não tente decorar algoritmos. Cada caso é um caso, por mais que se assemelhem.
Há sempre uma forma melhor de fazer a mesma coisa. Após o ZERO ERRO, examine
se o seu algoritmo é eficiente, isto é, se ele não usa variáveis demais, se ele é facilmente
compreendido por uma terceira pessoa, se os nomes de variáveis são auto-expressivos,
se o usuário não terá dificuldade em utilizá-lo, e se o computador não passará muito
tempo para processá-lo (performance).
Não tente arquitetar, ainda que mentalmente, a solução de um problema sem antes
entender perfeitamente o que pede no enunciado.
Não inicie a algoritmização sem ter claramente a solução arquitetada na sua cabeça.
Não deixe a curiosidade afetar a sua criatividade. Durante o desenvolvimento do seu
algoritmo, não pesas orientação sobre o como fazer, sem antes ter chegado a algum
resultado, ainda que errado.
Nunca desista de uma solução. Concluí-a. Chegue até o fim. Teste-a, e somente quando
os testes sinalizarem a sua ineficácia, tente modificá-la ou refazê-la.

Técnica para extrair os dados de um enunciado


Quando nos deparamos com um enunciado pequeno, nos sentimos a vontade para
resolve-lo pois os dados existentes neste são poucos. Porém, quando nos deparamos
com um enunciado mais complexo, existe a tendência natural de pensarmos que é algo
muito difícil de resolver. Mas, por incrível que pareça, o maior problema encontra-se
em nosso lidar com o desafio e o encarar “friamente”. Justamente para melhor lhe
capacitar a interpretar um texto é que estamos te dando esta dica.

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

 Como fazer para descobrir a quantidade de elementos


iguais aos dois maiores elementos do conjunto?
 Agora ficou mais fácil. Precisamos atentar para um
pequeno detalhe: quando encontrarmos um elemento que é
superior ao primeiro, este último passa a ser o segundo maior.
Para não perdermos o conteúdo original do maior, passaremos
seus conteúdos para as respectivas variáveis e depois
procederemos naturalmente colocando o elemento maior no
seu referido lugar. Vejamos parte do código a seguir.
Ma_idade2 := Ma_idade1;
Qt_maid2 := Qt_maid1;
Ma_idade1 := widade;
Qt_maid1 := 1;

 Percebeu como é simples? Isso fazemos em todos os


momentos em que queremos verificar o maior e o segundo
maior. No demais é tomar cuidado com o segundo maior, pois
apesar do valor as vezes, ser inferior ao primeiro, nada garante
que ele o seja em relação ao segundo. Desta forma, precisamos
fazer a comparação para termos certeza.
 Vamos ao Exemplo?
“Elaborar um algoritmo que receba idade de 50 pessoas e
informe ao final, as duas maiores idades e quantas pessoas as
possuem.”

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