Buscar

exercicio-de-algoritmos-0b-04-algoritmos

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 29 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 29 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 29 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

EDGAR TITO - INFORMÁTICA 2015 – Prof. Ranildo Lopes 1 
U.E PROF EDGAR TITO - NOITE 
PROF. RANILDO LOPES 
DISCIPLINA: Lógica de Programação 
 
APOSTILA 0APOSTILA 0APOSTILA 0APOSTILA 04444 
LÓGICA DE PROGRAMAÇÃOLÓGICA DE PROGRAMAÇÃOLÓGICA DE PROGRAMAÇÃOLÓGICA DE PROGRAMAÇÃO 
EXERCÍEXERCÍEXERCÍEXERCÍCIOSCIOSCIOSCIOS P P P PRÁRÁRÁRÁTICOSTICOSTICOSTICOS 
 
Visite nosso sítioVisite nosso sítioVisite nosso sítioVisite nosso sítio 
http://ueedgartito.wordpress.comhttp://ueedgartito.wordpress.comhttp://ueedgartito.wordpress.comhttp://ueedgartito.wordpress.com 
“ Nele estão os resumos e 
trabalho de sala de aula” 
 
Obrigado pela preferência de nossa ESCOLA! 
 
EDGAR TITO - INFORMÁTICA 2015 – Prof. Ranildo Lopes 2 
Variáveis x Dados 
Damos o nome de variável ao local de memória onde serão armazenados os dados. 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 apelidos (identificadores). 
É aconselhável que o nome da variável seja expressivo, isto é, um nome que expresse o que vai ser armazenado dentro dela. 
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 (veremos mais adiante). 
Para exemplificarmos melhor, imagine que em um Algoritmo você precise armazenar certa idade em algum lugar, para posteriormente 
decidir se esta idade permite que alguém possa requerer a sua carteira de motorista. Para tanto, tudo o que temos a fazer é declarar, em 
nosso Algoritmo, esta variável (veremos mais adiante). Quando declaramos uma variável, temos que associar a ela algumas características: 
• NOME ou IDENTIFICADOR 
• TIPO 
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. Algumas linguagens não exigem sequer a declaração do TAMANHO da variável (BASIC, CLIPPER 
entre outras). 
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 Algoritmos, 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; 
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 _ como caractere 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 bom 
identificador. 
Outras vezes, a linguagem traz consigo algumas variáveis reservadas. Trata-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. 
Escolha 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 identificação ou nomeação de variáveis segue algumas regras: 
- Nomes de variáveis não podem ser iguais a palavras reservadas; 
- Nomes de variáveis devem possuir como primeiro caractere uma letra ou sublinhado '_' (os outros caracteres 
podem ser letras, números e sublinhado); 
- Nomes de variáveis devem ter no máximo 127 caracteres; 
- Nomes de variáveis não podem conter espaços em branco; 
- Na sintaxe do Português Estruturado, não há diferença entre letras maiúsculas de minúsculas (NOME é o mesmo 
que noMe). 
Exemplo 
Identificadores válidos: NOME, TELEFONE, IDADE_FILHO, IdadeFilho, NOTA1, Est_Civil 
Identificadores inválidos: 3Endereco, Estado Civil, PARA, algoritmo, numero/complemento 
EDGAR TITO - INFORMÁTICA 2015 – Prof. Ranildo Lopes 3 
 
Variáveis Numéricas 
São variáveis que aceitam apenas dados numéricos, sejam eles inteiros ou reais (sem ou com casas decimais respectivamente), o que 
será definido junto com a sua declaração no início do algoritmo. 
Ex.: 1200; 10,9; -12,5; 0; etc 
Variáveis alfanuméricas ou Caractere 
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 
serem utilizados para operações aritméticas. 
Os conteúdos de variáveis do tipo caractere são delimitados por aspas. 
Ex.: "MARIA JOSE"; "CASA AMARELA"; "123"; "NOMES" 
Variáveis Lógicas 
Este tipo de variável não permite o registro de números nem de palavras. Uma variável lógica só armazena um entre dois valores: 
VERDADEIRO ou FALSO. 
Não importa 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 V ou F. 
Em Português Estruturado, só existem três tipos de dados, conforme a tabela abaixo 
 
 
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: NUMÉRICO, CARACTERE e LÓGICO. 
Operador de Atribuição 
Para “colocar” um valor em uma variável dentro de um algoritmo, utilizamos o operador de atribuição. O operador de atribuição é 
representado por uma seta (<-) apontando para a esquerda. 
Exemplo 
Peso <- 78.7 // Este comando atribui à variável Peso o valor 78.7. 
Nome <- "João da Silva" // Este comando atribui à variável Nome o valor "João da Silva". 
Achei <- FALSO // Este comando atribui à variável Achei o valor FALSO. 
É importante lembrar que só se pode atribuir às variáveis valores do mesmo tipo da variável. Assim, o seguinte comando seria inválido: 
Exemplo 
VAR 
salario: REAL 
INICIO 
salario <- "Insuficiente" 
Deve estar claro, também, que sempre à esquerda do comando de atribuição deve haver um (e somente um) identificador de variável. 
Assim, são incorretos os seguintes comandos: 
Exemplo “são incorretos” 
2060 <- NumeroConta 
NumeroAgencia+digitoControle <- 2345 + 0 
NomeCliente+sobrenome <- “João” + “Silva”Linhas de Comentário 
 
Os comentários são declarações não compiladas que podem conter qualquer informação textual que você queira adicionar ao código-
fonte para referência e documentação de seu Algoritmo. 
Uma Linha 
São representados por duas barras normais ( // ). Todo o texto que você digitar após as duas barras será comentário. 
Exemplo 
// Este método calcula o fatorial de n...x <- y; 
// Inicializa a variável x com o valor de y 
EDGAR TITO - INFORMÁTICA 2015 – Prof. Ranildo Lopes 4 
Declaração de Variáveis 
Variáveis são palavras que tem um significado bem específico em um algoritmo. Para que o computador possa executar comandos que 
envolvem variáveis da maneira correta, ele deve conhecer os detalhes das variáveis que pretendemos usar. Esses detalhes são: o identificador 
desta variável e o tipo de valores que essa variável irá conter. Precisamos assim, de uma maneira de especificar esses detalhes e comunicá-los 
ao computador. Para isso devemos declarar nossas variáveis logo abaixo da expressão “VAR” que tem a seguinte forma: 
 
 
Exemplos: 
 var x: real 
 y: inteiro 
 a: caractere 
 l: logico 
Operadores 
Como dissemos anteriormente, podemos atribuir a uma variável o resultado de uma expressão numérica. 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, podemos 
escrever expressões dos tipos caractere e lógica. 
Operadores Numéricos 
São elementos (símbolos) utilizados para representar uma operação de cunho aritmético. 
+,- Operadores unários, isto é, são aplicados a um único operando. São os operadores aritméticos de maior precedência. Exemplos: -3, +x. Enquanto o operador unário - inverte o sinal do seu operando, o 
operador + não altera o valor em nada o seu valor. 
\ Operador de divisão inteira. Por exemplo, 5 \ 2 = 2. Tem a mesma precedência do operador de 
divisão tradicional. 
+,-
,*,/ Operadores aritméticos tradicionais de adição, subtração, multiplicação e divisão. Por convenção, * e / têm precedência sobre + e -. Para modificar a ordem de avaliação das operações, é necessário usar parênteses como em qualquer expressão aritmética. 
MOD 
ou % Operador de módulo (isto é, resto da divisão inteira). Por exemplo, 8 MOD 3 = 2. Tem a mesma precedência do operador de divisão tradicional. 
^ Operador de potenciação. Por exemplo, 5 ^ 2 = 25. Tem a maior precedência entre os operadores 
aritméticos binários (aqueles que têm dois operandos). 
 
 
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 
 4 
Concatenação de variáveis. 
+ 
Operador de concatenação de strings (isto é, cadeias de caracteres), quando usado com dois 
valores (variáveis ou constantes) do tipo "caractere". Por exemplo: "Rio " + " de Janeiro" = "Rio de 
Janeiro". 
 
Para concatenarmos uma variável, precisamos ter certeza que elas são do tipo caracter, pois se elas forem numéricas, irão provocar 
uma operação de adição e não de concatenação. 
Ex.: B <- 1 + 1 (retornará o valor 2) 
 C <- “1” + “1“ (retornará o valor “11”) 
 Logo, B <> C 
Operadores Relacionais 
Os operadores relacionais realizam a comparação entre dois operandos ou duas expressões e resultam em valores lógicos 
(VERDADEIRO ou FALSO). 
=, 
<, >, 
<=, >=, 
<> Respectivamente: igual, menor que, maior que, menor ou igual a, maior ou igual a, diferente de. São utilizados em expressões lógicas para se testar a relação entre dois valores do mesmo tipo. Exemplos: 3 = 3 ( 3 é igual a 3?) resulta em VERDADEIRO ; "A" > "B" ("A" está depois de "B" na ordem alfabética?) resulta em FALSO. 
> maior que >= maior ou igual a 
< menor que <= menor ou igual a 
<> diferente de = igual a 
Exemplos: 
Dados A = 3, B = 2, C = ‘José’ e D = ‘José’ 
A > B Retorna VERDADEIRO 
C = D Retorna VERDADEIRO 
NOME = "JOSE" Retorna VERDADEIRO se NOME for exatamente igual a "JOSE" 
2+5>4 Retorna VERDADEIRO 
EDGAR TITO - INFORMÁTICA 2015 – Prof. Ranildo Lopes 5 
3<>3 Retorna FALSO 
Importante: No VisuAlg, as comparações entre strings não diferenciam as letras maiúsculas das minúsculas. Assim, "ABC" é igual a 
"abc". Valores lógicos obedecem à seguinte ordem: FALSO < VERDADEIRO. 
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 VERDADEIRO 
"MARIA"<"MARIO" Retorna VERDADEIRO 
Não há porque comparar variáveis lógicas, a não ser através de igualdade, pois qual é a necessidade de sabermos se VERDADEIRO é 
maior que FALSO? 
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 de 
erecida, necessário que sejas do sexo feminino e sua idade esteja na faixa etária solicitada. Para o Algoritmo, o raciocínio é exatamente igual. 
Você terá expressões lógicas e só será tomada alguma decisão se for obtido como resposta final o valor VERDADEIRO (VERDADEIRO). 
Para que gerenciarmos esta etapa da lógica, utilizaremos os operadores a seguir: 
nao 
Quando queremos inverter o resultado de uma condição ou expressão lógica (negar) 
Operador unário de negação. nao VERDADEIRO = FALSO, e nao FALSO = VERDADEIRO. 
Tem a maior precedência entre os operadores lógicos. 
ou 
A sentença que contiver este operador será verdadeira se pelo menos uma das expressões 
nela contida retornar valor verdadeiro. 
Operador que resulta VERDADEIRO quando um dos seus operandos lógicos for verdadeiro. 
e 
A sentença que contiver este operador será verdadeira se as expressões nela contida 
resultarem valores verdadeiros. 
Operador que resulta VERDADEIRO somente se seus dois operandos lógicos forem 
verdadeiros. 
xou Operador que resulta VERDADEIRO se seus dois operandos lógicos forem diferentes, e 
FALSO se forem iguais. 
 
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
ERDAD
EIRO 
V
ERDAD
EIRO 
V
ERDAD
EIRO 
V
ERDAD
EIRO 
V
ERDAD
EIRO 
V
ERDAD
EIRO 
F
ALSO 
V
ERDAD
EIRO 
F
ALSO 
F
ALSO 
V
ERDAD
EIRO 
V
ERDAD
EIRO 
V
ERDAD
EIRO 
F
ALSO 
F
ALSO 
V
ERDAD
EIRO 
F
ALSO 
V
ERDAD
EIRO 
F
ALSO 
F
ALSO 
F
ALSO 
F
ALSO 
F
ALSO 
F
ALSO 
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") 
 
Entendendo Representações de Sintaxes 
Agora que você já aprendeu o primeiro comando denossa linguagem algorítmica, é importante aprender a forma sintética de se 
representar um comando. Note que, ao enunciarmos o comando VAR, 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, 
 
VAR <Nome da variável>: <tipo> 
 
< > Delimita o espaço reservado para inserirmos um parâmetro do comando. A maioria dos comandos de todas as linguagens 
apresentam parâmetros. Os parâmetros direcionam o objetivo de um comando específico. 
Linearização de Expressões 
Para a construção de algoritmos que realizam cálculos matemáticos, todas as expressões aritméticas devem ser linearizadas, ou seja, 
colocadas em linhas, devendo também ser feito o mapeamento dos operadores da aritmética tradicional para os do Português Estruturado. 
EDGAR TITO - INFORMÁTICA 2015 – Prof. Ranildo Lopes 6 
 
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 <- . 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 CARACTERE têm que vir entre aspas 
IDADE <- 25 Dados NUMERICO não precisam de aspas 
ALTURA <- 1,67 Vírgula decimal (linguagens comerciais adotam o ponto) 
DEPENDE <- FALSO 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. O formato 
básico do pseudocódigo na ferramenta VisualG é o seguinte: 
algoritmo "semnome" 
// Função : 
// Autor : 
// Data : 
// Seção de Declarações 
 Var {Local para declaração das variáveis} 
inicio 
// Seção de Comandos 
fimalgoritmo 
Entrada e Saída de Dados 
Até aqui nós vimos como atribuir um valor a uma variável dentro de um Algoritmo. Mas este valor foi atribuído pelo próprio Algoritmo, 
não é? 
Mas como fazer com que um Algoritmo, 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 de vídeo? 
É para isto que existem, em todas as linguagens de programação, os 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 
 
 
 
<variável1...n> - Lista de variáveis a receberem os dados digitados pelo usuário. 
leia (NomeCliente+Sobrenome) 
Algoritmo "semnome" 
 Var wnome : CARACTERE 
 Widade: INTEIRO 
inicio 
 LEIA (wnome, widade) 
 //sequencia de comandos 
Fimalgoritmo 
 
A execução do comando LEIA provoca uma pausa na execução do Algoritmo, aonde o computador fica em estado de espera, 
aguardando a digitação de algo que deva ser atribuído às variáveis especificadas na sintaxe do comando. 
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) 
 
 
EDGAR TITO - INFORMÁTICA 2015 – Prof. Ranildo Lopes 7 
 
OBS.: Pelo menos um dos parâmetros deve ser informado quando da utilização deste comando. 
Exemplo 
Escreva ("Digite seu nome: ") 
Leia (nome) 
Escreva ("Digite sua agencia: ") 
Leia (NumeroAgencia) 
Escreva ("Digite sua conta: ") 
Leia (NumeroConta) 
Deve estar claro que sempre à direita do comando leia haverá um identificador de variável. Assim, são incorretos os seguintes 
comandos: 
Exemplo “são incorretos” 
leia (NumeroConta+60) 
leia (12345) 
 
Exemplo: 
Algoritmo "semnome" 
 Var wnome: CARACTERE 
inicio 
 ESCREVA (" NOME ..:") 
 LEIA (wnome) 
 ESCREVA ("Seu nome é "+ wnome) 
Fimalgoritmo 
 
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 
 
 
Construindo os Primeiros Algoritmos: 
Estruturas seqüenciais 
De forma genérica, a construção de um algoritmo se resume às seguintes etapas: 
a) entendimento do problema; 
b) elaboração da solução algorítmica; e 
c) codificação da solução no Português Estruturado; 
Geralmente a etapa 2 é a mais complexa, pois depende da engenhosidade e experiência do “construtor”. 
Enunciado: Faça um Algoritmo que leia dois valores numéricos, e calcule e exiba a 
sua média aritmética. 
Etapa 1 
Simples, hein? Dos tempos de escola lembramos que a média aritmética de dois valores é calculada como (a+b)/2, e sendo assim a 
primeira etapa já está pronta. 
Etapa 2 
Os dados necessários serão os dois valores, que colocaremos em duas variáveis A e B, do tipo numérico, e uma terceira variável, que 
chamaremos Média, que armazenará a média aritmética calculada. 
Etapa 3 
A obtenção dos dados neste Algoritmo é simples e direta. Basta pedir ao usuário que digite os valores. 
Etapa 4 
O processamento aqui é o cálculo da média, usando o método citado acima, na etapa 1. O resultado do cálculo será armazenado na 
variável Média. 
Etapa 5 
Basta exibir o conteúdo da variável Média. 
Solução: 
1. Algoritmo "Cálculo de Média Aritmética" 
2. VAR 
3. A,B,Media : REAL 
4. Inicio 
5. Escreva ("Algoritmo que calcula a média aritmética de dois valores.") 
6. Escreva ("Digite um valor : ") 
7. Leia (A) 
8. Escreva ("Digite outro valor : ") 
9. Leia (B) 
10. Media <- (A+B)/2 
11. Escreva ("A média dos dois valores é : ", Media) 
12. FimAlgoritmo 
Exercícios 
1. Algoritmo que lê o nome de um aluno, as notas de suas três provas e calcule e exibe a média harmônica das provas. A 
média harmônica de três provas a, b e c é dada pela fórmula 
EDGAR TITO - INFORMÁTICA 2015 – Prof. Ranildo Lopes 8 
 
Os dados necessários serão o nome do aluno e os valores das provas. O algoritmo limita-se basicamente à própria 
fórmula. 
1. Algoritmo "MediaHarmonica" 
2. VAR 
3. a, b, c, MH: REAL 
4. NOME: CARACTER 
5. inicio 
1. escreva ("Entre com o nome do aluno: ") 
2. leia (nome) 
3. escreval ("Entre com as notas das três provas") 
4. escreva ("Digite a primeira nota: ") 
5. leia (a) 
6. escreva ("Digite a segunda nota: ") 
7. leia (b) 
8. escreva ("Digite a terceira nota: ") 
9. leia (c) 
10. MH <- 3/(1/a + 1/b +1/c) 
11. escreval ("A média harmônica do aluno: ", NOME, " é ", MH) 
12. FimAlgoritmo 
 
Exemplo 
Enunciado: Um algoritmo que lê o valor do raio e calcule a área do círculo correspondente. 
Etapa 1: o cálculo da área do círculo é Pi*R2. 
Etapa 2: o dado necessário é o valor do raio, que será lido (colocado) na variável Raio. 
1. algoritmo "Calcula Área Circulo" 
2. var 
3. Area, Raio: REAL 
4. inicio 
5. Escreval ("Entre com o raio: ") 
6. Leia (Raio) 
7. Area <- Pi*Raio^2 
8. Escreva ("A área do circulo com o raio ", Raio, " é ", Area) 
9. fimalgoritmo 
Você não precisa declarar o pi, pois já é uma função definida pelo Algoritmo Visualg. 
 
Exercícios 
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) 
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 leva imaginar a fórmula a seguir: 
<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: 
EDGAR TITO - INFORMÁTICA 2015 – Prof. Ranildo Lopes 9 
<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 
 
Estruturas Condicionais 
Estrutura Condicional SE (Símples) 
Se <condição> então 
 <sequência de comandos> 
Fimse 
<condição> - Expressão lógica qualquer. 
<sequência de comandos> São comandos quaisquer 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. 
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 “semnome” 
 VAR Idade: inteiro 
 Nome: Caractere 
 Sexo: Caractere 
Inicio 
 LEIA (Nome, Sexo, Idade) 
 SE Sexo = “M” ENTAO 
 ESCREVA ("A idade de " + Nome + “ é “ + Idade) 
 FIMSE 
 ESCREVA ("Fim da transação") 
Fimalgoritmo 
Estrutura Condicional SE (Composta) 
 
Se <condição> então 
 <sequência de comandos 1> 
senão 
 <sequência de comandos 2> 
FIMSE 
 
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. 
<sequência de comandos 2> São comandos quaisquer que serão executados caso o resultado da expressão lógica seja falsa. 
 
 
Para fixar esta idéia, tente depurar o seguinte algoritmo: 
Algoritmo “semnome” 
 VAR Idade: inteiro 
 Nome: Caractere 
 Sexo: Caractere 
Inicio 
 LEIA (Nome, Sexo, Idade) 
 SE Sexo = “M” ENTAO 
 ESCREVAL ("A idade de ", Nome, “ é “, Idade, “ Sexo Masculino”) 
 senao 
 SE Sexo = “F” ENTAO 
 ESCREVAL ("A idade de ", Nome, “ é “, Idade, “ Sexo Feminino”) 
 FIMSE 
 FIMSE 
 ESCREVA ("Fim da transacao") 
Fimalgoritmo 
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. Abaixo segue um modêlo hipotético de uma estrutura SE (Encadeada). 
Se <condição 1> então 
 <sequência de comandos 1> 
 Se <condição 2> então 
 <sequência de comandos 2> 
 FIMSE 
senão 
 Se <condição 3> então 
 <sequência de comandos 3> 
 senão 
 <sequência de comandos 4> 
 FIMSE 
 <sequência de comandos 5> 
FIMSE 
 
Para exemplificarmos melhor, vejamos o exemplo: 
1) Receber dois números (Num1 e Num2). 
2) Realize a soma dos dois valores. 
EDGAR TITO - INFORMÁTICA 2015 – Prof. Ranildo Lopes 10 
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 “semnome” 
 VAR X: inteiro 
 Y: inteiro 
 SOMA: inteiro 
Inicio 
 LEIA (X, Y) 
 SOMA<- X + Y 
 SE SOMA > 0 ENTAO 
 ESCREVA (SOMA, “ Valor Positivo”) 
 SENAO 
 ESCREVAL (X, Y) 
 SE SOMA = 0 ENTAO 
 ESCREVA ("Valor Igual a Zero") 
 SENAO 
 ESCREVA ("Valor Negativo") 
 FIMSE 
 FIMSE 
Fimalgoritmo 
Sobre esta solução, é importante salientar o seguinte: 
• Note que a estética, apesar de não influir no resultado da execução do Algoritmo, é 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 
IDENTAÇÃO. 
• Veja que o comando ESCREVA X, Y é executado independente da condição do segundo SE. É por isto que eles foram escritos 
após o SENÃO do primeiro SE. 
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 “SEMNOME” 
 VAR X: inteiro 
 Y: inteiro 
 Inicio 
 LEIA (X, Y) 
 SE X > Y ENTAO 
 ESCREVA (X) 
 SENAO 
 ESCREVA (Y) 
 FIMSE 
FimAlgoritmo 
 
2) Dados 3 números digitados via teclado, faça um algoritmo capaz de exibir no vídeo o maior deles. 
Algoritmo “SEMNOME” 
 VAR X: inteiro 
 Y: inteiro 
 Z: inteiro 
 Inicio 
 LEIA (X, Y, Z) 
 SE (X > Y) E (X > Z) ENTAO 
 ESCREVA (X) 
 SENAO 
 SE (Y > Z) E (Y > X) ENTAO 
 ESCREVA (Y) 
 SENAO 
 ESCREVA (Z) 
 FIMSE 
 FIMSE 
FimAlgoritmo 
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. Na hora de testar este Algoritmo, não esqueça de jogar com as situações de exceção, como por exemplo: 2 dos números sendo 
iguais, números negativos ou nulos, etc. 
3) Dados 2 números digitados via teclado, faça um algoritmo capaz de exibi-los em ordem crescente. 
Algoritmo “SEMNOME” 
 
 VAR A: inteiro 
 B: inteiro 
 Inicio 
 LEIA (A, B) 
 SE A > B ENTAO 
 ESCREVA (B, A) 
 SENAO 
 ESCREVA (A, B) 
 FIMSE 
FimAlgoritmo 
Como você solucionaria este problema se tivéssemos de utilizar apenas um comando ESCREVA ? 
EDGAR TITO - INFORMÁTICA 2015 – Prof. Ranildo Lopes 11 
A primeira imagem que nos vem a 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 dita variável. Mas em informática podemos utilizar todos os recursos disponíveis para 
solucionarmos um problema, evitando entretanto, soluções muito extensas e complicadas. 
O recurso que vamos dispor nesse momento é a utilização de uma variável auxiliar. Variável auxiliar é aquela que nós utilizamos para 
servir de apoio. Veja que para realizar a troca de dados exposta a seguir, só com esse recurso. 
 
Algoritmo “SEMNOME” 
 
 VAR A: inteiro 
 B: inteiro 
 X: inteiro 
 Inicio 
 LEIA (A, B) 
 SE A > B ENTAO 
 X <- A 
 A <- B 
 B <- X 
 FIMSE 
 ESCREVA (A) 
 ESCREVA (B) 
FimAlgoritmo 
Comentário: Para economizarmos comandos ESCREVA, observe que invertemos os valores de A e B toda vez que 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 
0 5 
 
Se fizermos simplesmente A <- B, apagaremos o valor original de A e colocaremos o de B em seu lugar. Assim, ambas 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. 
 
 
A B 
0 5 
 X 
0 
 
4) Dados 3 números digitados via teclado, faça um algoritmo capaz de exibi-los em ordem crescente. 
Algoritmo “semnome”VAR A: inteiro 
 B: inteiro 
 C: inteiro 
Inicio 
 LEIA (A, B, C) 
 SE A > B ENTAO 
 SE B > C ENTAO 
 ESCREVA (C, B, A) 
 SENAO 
 SE A > C ENTAO 
 ESCREVA (B, C, A) 
 SENAO 
 ESCREVA (B, A, C) 
 FIMSE 
 FIMSE 
 SENAO 
 SE A > C ENTAO 
 ESCREVA (C, A, B) 
 SENAO 
 SE B > C ENTAO 
 ESCREVA (A, C, B) 
 SENAO 
 ESCREVA (A, B, C) 
 FIMSE 
 FIMSE 
 FIMSE 
FimAlgoritmo 
 
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. 
1º passo 
2º passo 
3º passo 
X<- A 
 
A<- B 
 
B<- X 
EDGAR TITO - INFORMÁTICA 2015 – Prof. Ranildo Lopes 12 
Existem algumas formas de definir as estruturas de repetições. Algumas lembram até esta ou aquela linguagem. Em nosso curso 
iremos no ater a três estruturas, as quais podemos representar tranqüilamente em qualquer ambiente de Programação. 
As estruturas são: Repita, 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 três formas, mas existem momentos que não é possível. Por isso o segredo encontra-se 
no exercitar. 
Bem, vamos dismistificar estas estruturas. 
Comando REPITA 
Aqui você entra na estrutura e pode testar para ver se uma determinada condição foi satisfeita antes ou após a execução de comandos. 
Quando a condição de encerramento for verdadeira, será encerrado o processamento do comando Repita e será dado prosseguimento 
exatamente no primeiro comando imediatamente após o FimRepita. 
Repita 
 
 < comandos > 
 
Ate < condição > 
Comando ENQUANTO 
O comando ENQUANTO prende um trecho do Algoritmo a um laço (looping), ou seja, podemos determinar que um certo conjunto de 
comandos seja executado repetidamente enquanto uma condição seja verdadeira. 
Enquanto <condição> Faca 
 < comandos > 
FimEnquanto 
Comando PARA 
O comando PARA prende um trecho do Algoritmo a um laço (looping), sendo que sua gerência é em cima de uma contagem. Enquanto 
ela não for satisfeita, ou seja, o valor final não for ultrapassado, será executado os comandos subordinados a esta estrutura. 
Para <variável de controle> de <valor inicial> ate <Valor_final> [passo 
<incremento>] Faca 
 < comandos > 
FimPara 
 
Na estrutura para..faca, a variável de controle é inicializada com <valor inicial> e no início de cada iteração, seu valor é comparado com 
<valor final>. Se o valor da variável for menor ou igual a <valor final>, a lista de comandos é executada e após ser executado o último comando 
da lista, a variável de controle é incrementada. Isto repete-se até que o valor da variável de controle seja maior que <valor final>, quando então 
é executado o comando imediatamente após a palavra fimpara. A instrução passo é necessária se o incremento for diferente 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 do numero 1 ate 10. Usaremos os comandos aprendidos até agora. 
♦ Com a estrutura REPITA 
 Algoritmo "DemonstraRepeticao" 
 VAR 
 i: INTEIRO 
 inicio 
 i<- 1 
 repita 
 escreva (i) 
 i<- i + 1 
 ate i > 10 
fimalgoritmo 
 
♦ Com a estrutura ENQUANTO 
Algoritmo "DemonstraRepeticao" 
 Var 
 i: INTEIRO 
 inicio 
 i<- 1 
 enquanto i<=10 faca 
 escreva (i) 
 i<- i + 1 
 fimenquanto 
fimalgoritmo 
 
♦ Com a estrutura PARA 
Algoritmo "DemonstraRepeticao" 
 Var 
 i: INTEIRO 
 inicio 
 i<- 1 
 para i de 1 ate 10 faca 
 escreva (i) 
 fimpara 
fimalgoritmo 
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. 
EDGAR TITO - INFORMÁTICA 2015 – Prof. Ranildo Lopes 13 
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 “semnome” 
 Var MAIOR_ID: inteiro 
 Idade: inteiro 
 Cont: inteiro 
Inicio 
 MAIOR_ID <- 0 
 Para cont de 1 ate 10 Faca 
 LEIA(Idade) 
 Se Idade > MAIOR_ID entao 
 MAIOR_ID <- Idade 
 FIMSE 
 Fimpara 
 Escreva ("A maior idade é " , MAIOR_ID) 
Fimalgoritmo 
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 “semnome” 
 Var 
 MENOR_ID: inteiro 
 Idade: inteiro 
 Cont: inteiro 
Inicio 
 MENOR_ID <- 999 
 Para cont de 1 ate 10 Faca 
 LEIA(Idade) 
 Se Idade < MENOR_ID entao 
 MENOR_ID <- Idade 
 FIMSE 
 Fimpara 
 Escreva ("A menor idade é ", MENOR_ID) 
Fimalgoritmo 
Exercícios de Aprendizagem 
1) Elabore um algoritmo capaz de exibir todos os números inteiros, desde o 1 até o 10. 
Algoritmo "inteiros" 
 VAR NUMERO: NUMERICO 
INICIO 
 NUMERO <- 1 
 ENQUANTO NUMERO <= 10 FACA 
 ESCREVA (NUMERO) 
 NUMERO <- NUMERO + 1 
 FIMENQUANTO 
FimAlgoritmo 
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 "LIMITES" 
 VAR NUMERO: NUMERICO 
 LIMITE: NUMERICO 
INICIO 
 LEIA (LIMITE) 
 NUMERO<-1 
 ENQUANTO NUMERO <= LIMITE FACA 
 ESCREVA (NUMERO) 
 NUMERO <- NUMERO + 1 
 FIMENQUANTO 
FimAlgoritmo 
Comentário: Este Algoritmo é similar ao anterior. A única sde isticaçã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 sde isticação, foi necessário o uso da variável 
LIMITE que de fato limitou o laço do REPITA ao seu conteúdo, conteúdo este que fora recebido logo no início da execução do Algoritmo, com o comando 
LEIA LIMITE. 
3) Sofisticando ainda mais o Algoritmo 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 "LIMITES" 
 VAR NUMERO: NUMERICO 
 LIMITE: NUMERICO 
 SOMA: NUMERICO 
INICIO 
 LEIA (LIMITE) 
 NUMERO <- 1 
 SOMA <- 0 
 ENQUANTO NUMERO <= LIMITE FACA 
 ESCREVA (NUMERO) 
 SOMA <- SOMA + NUMERO 
 NUMERO <- NUMERO + 1 
 FIMENQUANTO 
 ESCREVA (SOMA) 
EDGAR TITO - INFORMÁTICA 2015 – Prof. Ranildo Lopes 14 
FimAlgoritmo 
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). 
 Observe também que declaramos SOMA com mais bytes que NUMERO ou LIMITE. É 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 ao quantitativo de casas definidas 
em NUMERO. 
4) Receba uma seqüência de nomes via teclado até que seja digitado um nome em branco (“ ”). Após a digitação desta 
lista, escrever no vídeo quantos nomes começaram pela letra “A”. 
Algoritmo "EXEMPLO" 
 VAR NOME: CARACTER 
 CONT: NUMERICO 
INICIO 
 LEIA (NOME) 
 CONT<-0 
 ENQUANTO NOME <> " " FACA 
 SE POS("A", NOME) = 1 ENTAO 
 CONT <- CONT + 1 
 FIMSE 
 LEIA (NOME) 
 FIMENQUANTO 
 ESCREVA (CONT) 
FimAlgoritmo 
Comentário: Novamente recorremos a um contador, desta vez, contabilizando os nomes com inicial “A”. Observe que tivemos que utilizar duas 
vezes o comando LEIA NOME. Isto para que o primeiro NOME digitado não fosse igual a branco, forçando a saída do ENQUANTO logo de início. 
Técnicas de Algoritmização 
Como dissemos anteriormente, não há qualquer receita de bolo para resolvermos um determinado problema através da programação. 
Cada caso é um caso bastante específico. 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 Algoritmo. 
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 programaçã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 resolvê-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. 
Todos os Algoritmos 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á recebido a MATRICULA, NOME E SALÁRIO; 
 LEIA Matricula, Nome, 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 + Salario 
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 "EXEMPLOLOGICA" 
 Var AcumSal: numerico 
Cont: numerico 
Salario: numerico 
EDGAR TITO - INFORMÁTICA 2015 – Prof. Ranildo Lopes 15 
Media: numerico 
Nome: Caracter 
INICIO 
 AcumSal <- 0 
 Para cont <- 1 ate 50 faca 
LEIA (Nome, Salario) 
AcumSal <- AcumSal + Salario 
 FimPara 
 Media <- AcumSal / 50 
 Escreva (“A média Salarial é “, Media) 
FimAlgoritmo 
 
 
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 "DESAFIO1" 
 Var Ma_idade: numerico 
 Qt_maid: numerico 
 Cont: numerico 
 Widade: numerico 
INICIO 
 Ma_idade <- 0 
 Qt_maid <- 0 
 Para cont <- 1 ate 50 faca 
 LEIA (widade) 
 Se widade > Ma_idade entao 
 Ma_idade <- widade 
 Qt_maid <- 1 
 Senao 
 Se widade = Ma_idade entao 
 Qt_maid <- Qt_maid + 1 
 FIMSE 
 FIMSE 
 FimPara 
 Escreval (“A maior idade é ..........................: “, Ma_idade) 
 Escreval (“Quantidade de pessoas com a maior idade...: “, Qt_maid) 
FimAlgoritmo 
 
� 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? Isto fazemos em todos os momentos em que devemos 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 aspossuem.” 
 
Algoritmo "DESAFIO2" 
 Var Ma_idade1: numerico 
 Ma_idade2: numerico 
 Qt_maid1: numerico 
 Qt_maid2: numerico 
 Cont: numerico 
 Widade: numerico 
inicio 
 Ma_idade1 <- 0 
 Ma_idade2 <- 0 
 Qt_maid1 <- 0 
 Qt_maid2 <- 0 
 Para cont <- 1 ate 50 faca 
 LEIA (widade) 
 Se widade > Ma_idade1 entao 
 Ma_idade2 <- Ma_idade1 
EDGAR TITO - INFORMÁTICA 2015 – Prof. Ranildo Lopes 16 
 Qt_maid2 <- Qt_maid1 
 Ma_idade1 <- widade 
 Qt_maid1 <- 1 
 Senao 
 Se widade = Ma_idade1 entao 
 Qt_maid1 <- Qt_maid1 + 1 
 Senao 
 Se widade > Ma_idade2 entao 
 Ma_idade2 <- widade 
 Qt_maid2 <- 1 
 Senao 
 Se widade = Ma_idade2 entao 
 Qt_maid2 <- Qt_maid2 + 1 
 FIMSE 
 FIMSE 
 FIMSE 
 FIMSE 
 FimPara 
 Escreval (“A maior idade é ..........................: “, Ma_idade1) 
 Escreval (“Quant. de pessoas com a maior idade.......: “, Qt_maid1) 
 Escreval (“A segunda maior idade é ..................: “, Ma_idade2) 
 Escreval (“Quant. de pessoas com Seg. maior idade....: “, Qt_maid2) 
FimAlgoritmo 
Escolha...Caso 
Em algumas situações é necessário termos várias soluções ligadas a respostas diferentes, neste caso o comando de 
alternativa simples ou composta não é uma solução prática, isto porque obrigará o Programador a escrever muitas linhas de Algoritmo, 
além de ter que criar vários comandos de alternativas compostas e verificar a validade de suas condições para que o comando execute o 
caminho correto para uma determinada condição. Temos então o comando de alternativa de múltipla escolha. 
O funcionamento deste comando obedece a seguinte regra: 
Escolha < expressão-de-seleção > 
Caso < exp 1 > , < exp 2 >, ... , < exp n > 
 < lista-de-comandos-1 > 
Caso < exp 1 > , < exp 2 >, ... , < exp n > 
 < lista-de-comandos-2 > 
outrocaso 
 < lista-de-comandos-3 > 
fimescolha 
 
Exemplo 
IDADE CATEGORIA 
De 05 a 10 Infantil 
De 11 a 15 Juvenil 
De 16 a 20 Junior 
De 21 a 25 Prde issional 
Construa um Algoritmo que solicite o nome e a idade de um atleta e imprima a sua categoria. 
 Algoritmo "CLASSIFICAÇÃO DE ATLETAS 
 var 
 nome, categoria : caractere 
 idade : inteiro 
 inicio 
 Escreva("Nome do Atleta = ") 
 Leia (nome) 
 Escreva("Idade do Atleta = ") 
 Leia (idade) 
 Escolha idade 
 caso 5,6,7,8,9,10 
 categoria <- "Infantil" 
 caso 11,12,13,14,15 
 categoria <- "Juvenil" 
 caso 16,17,18,19,20 
 categoria <- "Junior" 
 caso 21,22,23,24,25 
 categoria <- "Prde issional" 
 outrocaso 
 categoria <- "INVALIDO" 
 Fimescolha 
 Escreva ("Categoria = ",categoria) 
 Fimalgoritmo 
Variáveis Compostas Homogêneas 
Vetores - Variáveis Indexadas Unidimensionais 
Até então trabalhamos com variáveis simples, que só recebem um dado por vez. Neste capítulo trataremos sobre variáveis compostas, 
que são capazes de armazenar mais de um dado ao mesmo tempo. 
Chamamos de Vetor a toda variável (estrutura) capaz de armazenar em si, vários elementos, e que possua apenas uma dimensão 
(Unidimensional). Para acessar os elementos deste vetor é necessário um índice que serve como indicador de posição. 
Como declarar um vetor? 
Através do comando VAR. Vejamos a sintaxe abaixo: 
Algoritmo “X” 
 var <nome_vetor> : vetor[1..<qtd.ocor.>] de <tipo> 
EDGAR TITO - INFORMÁTICA 2015 – Prof. Ranildo Lopes 17 
inicio 
 ... 
FimAlgoritmo 
Imagine um vetor definido para receber 10 nomes, onde cada elemento possui 40 dígitos do tipo caracter, e um segundo vetor para 
receber 10 salários, onde cada elemento possui 8 dígitos, sendo 2 casas decimais . 
Algoritmo “X” 
 var vnome : vetor[1..10] de caractere 
 Vsal : vetor[1..10] de real 
inicio 
 ... 
FimAlgoritmo 
Observe: 
1. O tamanho do vetor é definido pelo intervalo entre colchetes após a palavra reservada vetor. Ex.: O intervalo [1..10] 
indica que o vetor pode conter 10 valores. 
2. O tipo de dado do vetor é definido pelo tipo de dado declarado após a palavra reservada de . Todos os valores de 
um vetor têm o mesmo tipo de dado. 
Para acessar um dado num vetor o que é necessário fazer? 
Muito simples. Informe o valor do índice cujo posicionamento incide na ocorrência que você quer verificar. Caso esta ocorrência exista, 
será mostrado o conteúdo da célula indicada pelo índice. 
Vnome 
1 2 (. . .) 9 10 
Paul
o 
Ana Karla Ivo 
 
Escreva ( Vnome[1] ); { será impresso ‘Paulo’ } 
Escreva ( Vnome[9] ); { será impresso ‘Karla’ } 
Como fazer para atribuir um valor a uma ocorrência do vetor? 
A forma mais clássica e que funciona em qualquer linguagem é receber a informação na tela (via teclado) e colocar o valor recebido na 
ocorrência que queremos do vetor. 
 (...) 
 Leia (wnum1, wnum2, wnum3) 
 Vnum[1] <- wnum1 
 Vnum[2] <- wnum2 
 Vnum[3] <- wnum3 
 (...) 
 ou 
 (...) 
 Para ind de 1 ate 3 faca 
 Leia ( wnum) 
 Vnum[ind] <- wnum 
 Fimpara 
 (...) 
Como fazer para atribuir um valor a uma ocorrência do vetor? 
 (...) 
 Leia (wnum1, wnum2, wnum3) 
 Vnum[1] <- wnum1 
 Vnum[2] <- wnum2 
 Vnum[3] <- wnum3 
 (...) 
 ou 
 (...) 
Var 
 Vnum : vetor [1..3] de caractere 
 Ind : inteiro 
Inicio 
 Para ind de 1 ate 3 faca 
 Leia (wnum[ind]) 
 (...) 
Como fazer para somar os elementos de um vetor numérico? 
 (...) 
 soma <- 0 
 Para ind de 1 ate 3 faca 
 Soma <- soma + Vnum[ind] 
 
 Escreva(Soma) 
 (...) 
Para entendermos melhor o que de fato vem a ser um vetor e sua importância, analisemos um problema básico conforme o enunciado 
a seguir. 
‘Elaborar um algoritmo que receba 5 números e informe: 
a) O maior entre eles; 
b) Quantas vezes o maior número ocorreu; 
c) Informe em que momento (quando) o número igual ao maior foi informado (1ª, 2ª,...,5ª vez).’ 
Resolvendo com variáveis simples: 
� Para sabermos qual o maior elemento digitado já sabemos (vide TDL - parte 1); 
� Para sabermos quantas vezes o maior elemento ocorreu, já sabemos (vide TDL - parte 1); 
� Para sabermos em que momento foi digitado o maior número é fácil detectarmos, mas verificarmos em quais 
momentos se repetiu a digitação do número igual ao maior é mais complexo, necessitando de um algoritmo com um controle bem feito e 
criação de algumas variáveis auxiliares para controlar este processo. 
EDGAR TITO - INFORMÁTICA 2015 – Prof. Ranildo Lopes 18 
Resolvendo com Variável Composta Unidimensional (VETOR) 
� Com vetor, a lógica se torna muito simples, pois os dados são digitados e carregados em cada ocorrência do vetor 
ficando disponível enquanto não for encerrado o processamento. Nesse momento podemos aproveitar para encontrar o maior e quantas vezes 
ele ocorre. 
(...) 
Para ind de 1 ate 5 faca 
 Leia (wnum) 
 Vnum[ind] <- wnum 
 Se wnum > Ma_num entao 
 Ma_num <- wnum 
 Ma_qtd <- 1 
 Senao 
 Se wnum = Ma_num entao 
 Ma_qtd <- Ma_qtd + 1 
 fimse 
 fimse 
fimPara 
(...) 
 
� Uma segunda etapa é a de encontrar qual(ais) elemento(s) foi(ram) igual(ais) aquele identificado como sendo o 
maior. Quando isso ocorrer, é só informar em que posição (índice atual do vetor) este elemento foi encontrado; 
(...) 
Para ind de 1 ate 5 faca 
 Leia ( wnum[ind]) 
 Se wnum[ind] > Ma_num entao 
 Ma_num <- wnum[ind] 
 Ma_qtd <- 1 
 Senao 
 Se wnum[ind] = Ma_num entao 
 Ma_qtd <- Ma_qtd + 1 
 Fimse 
 finse 
fimPara 
Para ind de 1 ate 5 faca 
 Se Vnum[ind] = Ma_num entao 
 Escreva (ind) 
 fimse 
FimPara 
(...) 
Mas para que servem os Vetores ? 
Existem situações nas quais precisamos armazenar uma seqüência de dados semelhantes entre si. Por exemplo: imagine que 
tenhamos de armazenar 5 números telefônicos para cada cliente de umadeterminada empresa. Considerando o que vimos na primeira etapa 
do curso, teríamos que declarar 5 variáveis literais, cada uma com um identificador próprio. 
 var 
 FONE1: caractere 
 FONE2: caractere 
 FONE3: caractere 
 FONE4: caractere 
 FONE5: caractere 
Como sabemos que cada um dos números telefônicos terá o mesmo tipo e tamanho, poderemos descartar as 5 variáveis acima, e 
utilizarmos apenas uma variável vetor, com 5 elementos: 
 
 VAR FONES : vetor [1..5] de caractere 
 
Já que sabemos a quantidade de elementos que o vetor irá receber, podemos desenvolver um algoritmo de armazenamento dos dados 
no vetor. Usaremos, para isto, os comandos que aprendemos até agora. 
Algoritmo “ex” 
 Var WFONE: caractere 
 FONES: vetor [1..5] de caractere 
 IND: inteiro 
Inicio 
 IND <- 1 
 Enquanto IND <= 5 faca 
 Leia (WFONE) 
 FONES[IND] <- WFONE 
 IND <- IND + 1 
 FimEnquanto 
 IND <- 1 
 Enquanto INDICE <= 5 faca 
 Escreva (FONES[IND]) 
 IND <- IND + 1 
 FimEnquanto 
FimAlgoritmo 
ou 
Algoritmo “ex” 
 Var WFONE: caractere 
 FONES: vetor [1..5] de caractere 
 IND: inteiro 
Inicio 
 Para IND de 1 ate 5 faca 
 Leia (WFONE) 
EDGAR TITO - INFORMÁTICA 2015 – Prof. Ranildo Lopes 19 
 FONES[IND] <- WFONE 
 FimPara 
 Para IND de 1 ate 5 faca 
 Escreval (FONES[IND]) 
 FimPara 
FimAlgoritmo 
Veja que, pelo exemplo acima, podemos utilizar como índice de um vetor uma outra variável, desde que esta seja do tipo numérica, 
inteira (sem casas decimais) e positiva (maior que zero). Não fosse este artifício, teríamos que criar 5 variáveis para receber os telefones e 
depois escrever uma a uma na ordem de entrada 
Algoritmo “ex2” 
 Var WFONE1, WFONE2, WFONE3, WFONE4, WFONE5: caractere 
Inicio 
 Leia (WFONE1, WFONE2, WFONE3, WFONE4, WFONE5) 
 Escreva (WFONE1, WFONE2, WFONE3, WFONE4, WFONE5) 
FimAlgoritmo 
Que trabalheira, não ? 
Trabalhando dois Vetores utilizando o mesmo índice 
5) Uma das grandes dificuldades que os iniciantes do aprendizado da lógica encontra é com o raciocínio espacial. Temos que 
nos desprender das limitações que nossa mente nos traz e abraçar todos os desafios analisando-os ‘friamente’. Por exemplo, o mais comum é 
beber água em um copo de vidro ou de plástico, mas, será que podemos praticar a mesma ação (tomar água) em um copo de papel? Claro que 
sim, apesar de não ser o mais comum. Então a regra é simples: aceite a nova informação e coloque em prática exercitando seu raciocínio 
diante das novas informações. 
6) Uma das muitas facetas da informática é a de reaproveitamento de variáveis para tarefas separadas. Um caso típico desses 
é o de utilização de um mesmo índice em estruturas de vetores diferentes. A medida que percorremos um vetor A qualquer com um índice, 
outro vetor B poderá está se utilizar deste mesmo índice. Vejamos o caso a seguir. 
7) Elabore um algoritmo que alimente dois vetores, cada um de 10 elementos (informados pelo teclado). Guarde num terceiro 
vetor, o produto dos elementos do primeiro pelo segundo e o escreva no vídeo o resultado armazenado no terceiro vetor. 
Algoritmo “ex1” 
 Var A: vetor [1..10] de inteiro 
 B: vetor [1..10] de inteiro 
 P: vetor [1..10] de inteiro 
 WA, WB: inteiro 
 SOMA: inteiro 
 IND: inteiro 
 Inicio 
 Para IND de 1 ate 10 faca 
 Leia (WA, WB) 
 A[ind] <- WA 
 B[ind] <- WB 
 P[ind]<-A[ind] * B[ind] 
 FimPara 
 Para IND de 1 ate 10 faca 
 Escreva (P[ind]) 
 FimPara 
FimAlgoritmo 
 
Exercícios 
1. Sendo o Vetor V igual a: 
0 
0 6 1 3 4 
e as variáveis X = 2 e Y = 4, escreva o valor correspondente à solicitação: 
a) V[X+1] b) V[X+2] c) V[X+3] d) V[X+4] 
e) V[X*1] f) V[X*2] g) V[X*3] h) V[X*4] 
i) V[X+Y] j) V[Y*X] k) V[V[4]] l) V[V[V[7]]] 
m) V[2+V[8-V[2]]] n) V[V[1]*V[4]] 
Solução comentada de alguns itens 
A. Se X = 2, então V[X+1] é o mesmo que V[2+1], ou seja, V[3], cujo conteúdo é 8. 
B. Se X = 2 e Y = 4, então V[X+Y] é o mesmo que V[2+4], ou seja V[6], que vale 16. 
C. V[V[4]] parece complicado em princípio, porém podemos simplificar bastante as coisas se solucionarmos primeiramente as 
expressões mais internas aos colchetes, passando para as mais externas. Assim, V[V[4]] é o mesmo que V[3], porque V[4] é igual a 3. 
Portanto, V[3] é 8. 
D. V[2+V[8-V[2]]] ===> V[2+V[8-6]] ===> V[2+V[2]] ===> V[2+6] ===> V[8] ===> 21. 
Faça analogia e solucione os demais itens. 
2. Elabore um algoritmo que guarde num vetor A, 10 elementos inteiros informados pelo teclado, e que calcule o somatório de 
todos os elementos, escrevendo, no vídeo, o resultado final. 
Algoritmo “ex2” 
 Var A[10]: Numérico 
 Wvalor: Numérico 
 SOMA: Numérico 
 IND: Numérico 
 Inicio 
 Para IND de 1 ate 10 faca 
 Leia (Wvalor) 
 A[IND] <- Wvalor 
 SOMA <- SOMA + A[IND] 
 FimPara 
 Escreval (SOMA) 
EDGAR TITO - INFORMÁTICA 2015 – Prof. Ranildo Lopes 20 
FimAlgoritmo 
 
3. Elabore um algoritmo que preencha um vetor alfanumérica de 10 elementos, que deverá conter 10 nomes de pessoas. Após 
o preenchimento do vetor, ele deverá solicitar um nome a ser pesquisado dentro do vetor. Após receber este nome, pesquisá-lo dentro do vetor 
recém digitado e, caso encontre-o, escrever ‘NOME CADASTRADO’ no vídeo. 
Algoritmo “ex3” 
 Var NOMES : vetor [1..10] de caractere 
 WNome: caractere 
 IND: inteiro 
 Inicio 
 Para IND de 1 ate 10 faca 
 Leia (Wnome) 
 NOMES[IND] <- Wnome 
 FimPara 
 Leia (Wnome) 
 Para IND de 1 ate 10 faca 
 Se Wnome = NOMES[ind] entao 
 Escreval (“NOME CADASTRADO”) 
 fimse 
 FimPara 
FimAlgoritmo 
Comentário: Este algoritmo apresenta duas fases bem distintas: preenchimento e busca. A fase de preenchimento já não tem mais mistério. Na fase 
de busca, o usuário digita um nome qualquer dentro de WNOME. Em seguida o algoritmo inicia um processo de busca pelo nome digitado dentro do vetor 
carregado. Quando o elemento digitado for encontrado, será emitido a mensagem confirmando o fato. Vai agora uma pergunta: se a pesquisa não for bem 
sucedida, com o fazer para o usuário ter ciência do ocorrido? Vamos dar uma das saídas possíveis reorganizando o algoritmo. 
Algoritmo “ex3” 
 Var NOMES : vetor [1..10] de caractere 
 WNome: caractere 
 IND: inteiro 
 Achou: logico 
 Inicio 
 Para IND de 1 ate 10 faca 
 Leia (Wnome) 
 NOMES[IND] <- Wnome 
 FimPara 
 Leia (Wnome) 
 Achou <- Falso 
 Para IND de 1 ate 10 faca 
 Se Wnome = NOMES[ind] entao 
 Escreval (“NOME CADASTRADO”) 
 Achou <- Verdadeiro 
 fimse 
 FimPara 
 Se Achou = Falso entao 
 Escreval (“Nome não Cadastrado”) 
 fimse 
FimAlgoritmo 
Comentário: Veja que utilizamos um artifício muito comum entre os Programadores, que é uma variável auxiliar contendo um valor inicial qualquer 
(no nosso caso, iniciamos com .F.) e, caso tenha ocorrido alguma ação dentro do que esperávamos, mudamos o conteúdo para outro valor (mudamos o valor 
para .V.) 
4. Elabore um algoritmo capaz de receber uma data no formato (‘DD/MM/AA’) e imprimi-la no formato (DD de <mês por 
extenso> de 20AA). 
Algoritmo "ex3" 
 Var MESES : vetor [1..12] de caractere 
 DATA: caractere 
 MES:INTEIRO 
 Inicio 
 MESES[1]<- "Janeiro" 
 MESES[2]<-"Fevereiro" 
 MESES[3]<-"Março" 
 MESES[4]<-"Abril" 
 MESES[5]<-"Maio" 
 MESES[6]<-"Junho" 
 MESES[7]<-"Julho" 
 MESES[8]<-"Agosto" 
 MESES[9]<-"Setembro" 
 MESES[10]<-"Outubro" 
 MESES[11]<-"Novembro" 
 MESES[12]<-"Dezembro" 
 escreva("Informe uma data no formato dd/mm/aa") 
 Leia (DATA) 
 MES <- CARACPNUM( COPIA (DATA,4,2)) 
 
 Escreval (COPIA(DATA,1,2) + " de " + MESES[ MES ] + " de 20" + COPIA(DATA,7,2)) 
FimAlgoritmo 
Comentário: Note que, caso a data seja digitada incorretamente, VALOR(PARTE(DATA,4,2)) poderá ser um número fora do intervalode 1 a 12. 
Neste caso um erro poderá ocorrer em tempo de execução do Algoritmo. Por isto é interessante criticar a data antes que ela seja processada pelo algoritmo. 
5. Faça um algoritmo que preencha um vetor de inteiros com 40 ocorrências recebendo do teclado. 
6. Faça um algoritmo que receba 30 nomes digitados pelo usuário. O nome não pode ser preenchido com brancos 
7. Faça um algoritmo que receba 30 valores reais pelo teclado. Os valores devem ser maiores que zero. 
EDGAR TITO - INFORMÁTICA 2015 – Prof. Ranildo Lopes 21 
8. Faça um algoritmo que preencha um vetor de inteiros com 20 ocorrências, onde Vetor[I] <-2I , ou seja, o conteúdo de cada 
ocorrência é o dobro do seu índice. 
9. Faça um algoritmo que preencha um vetor A com 10 ocorrências onde A[I] <- 2I + 1, preencha um vetor B com 10 
ocorrências onde B[I] <- 2I + 4 e um vetor C com 10 ocorrências onde cada ocorrência é a soma das ocorrências de mesmo índice dos vetores 
A e B. 
10. Escreva os comandos necessários para imprimir o vetor do exercício 1 na ordem inversa do índice ( de trás para frente) 
11. Escreva os comandos necessários para preencher todas as ocorrências do vetor do exercício 3 com o valor ZERO. 
12. Escreva os comandos necessários para somar todas as ocorrências do vetor do exercício 4. 
13. Escreva os comandos necessários para mover todos os valores do vetor C do exemplo 5 para o vetor B do mesmo exemplo 
14. Escreva os comandos necessários para encontrar o maior elemento do vetor do exercício 1. 
Ordenação Vetores 
Primeiramente, quero pensar com você o que seria uma ordenação. Podemos afirmar que ordenar é um processo no qual elementos 
ficarão em uma ordem sequêncial crescente ou decrescente. 
 Imagine os números: 
� 3, 1, 2 (estes dados estão desordenados); 
� 1, 2, 3 (estes dados estão ordenados crescentemente); 
� 3, 2, 1 (estes dados estão ordenados decrescentemente). 
Vamos aprender a ordenar os dados de forma crescente. Existem algumas formas, porém estudaremos duas delas. 
Se você tiver um vetor numérico contendo dois elementos (num[02], numérico, 1) e quiser que eles fiquem ordenados 
crescentemente, o que fazer? 
� 1º Passo: Verificar qual dos dois elementos é o maior. 
Se num[1] > num[2] então (...) 
� 2º Passo: Se o primeiro elemento for maior que o segundo, precisamos inverter os elementos de posição (isto 
aprendemos na primeira etapa de TDL). Caso contrário, os elementos já estão ordenados e não precisaremos inverter os dados. 
Se num[1] > num[2] entao 
 Aux <- num[1] 
 Num[1] <- num[2] 
 Num[2] <- Aux 
fimse 
Escreval ( num[1] , num[2]) 
Vejamos um segundo caso. Se você tiver três elementos numéricos expostos na seqüência abaixo e quiser ordená-los o que faríamos? 
1 2 3 
3 1 2 
 
1. Não poderíamos colocar os índices fixos. Como assim? Os valores que ficam valendo como índices de acesso 
deveriam ser variáveis (mutáveis). 
2. No caso em estudo iremos fazer as comparações entre num[1] e num[2], verificando se os elementos já estão em 
ordem, depois realizaremos a comparação entre os elementos num{2] e num[3], fazendo a mesma comparação, invertendo os elementos caso 
estes estejam fora da ordem desejada. Com isso temos as seguintes conclusões: 
� Estaremos comparando dois elementos ao mesmo tempo, logo, as posições são diferentes [ I ] e [I + 1] ; 
� O índice irá até a penúltima posição [n-1]; 
� Precisamos de uma estrutura de repetição para ‘varrer’ todos os elementos. 
Vamos ao algoritmo. 
Algoritmo “ordena” 
 Var num : vetor [1..3] de inteiro 
 Aux : inteiro 
 Ind : inteiro 
Inicio 
 Para ind de 1 ate 2 faca 
 Se num[ind] > num[ind + 1] entao 
 Aux <- num[ind] 
 num[ind] <- num[ind + 1] 
 num[ind + 1] <- Aux 
 fimse 
 FimPara 
 Para ind de 1 ate 3 faca 
 Escreval (num[ind], “ “) 
 FimPara 
FimAlgoritmo 
Pronto! Para os elementos dispostos na forma como citados anteriormente, este algoritmo funcionará. Porém, este Algoritmo 
testou apenas uma seqüência de números, conseguindo colocar em ordem. Se você alterar a seqüência das informações para: 
1 2 3 
3 2 1 
e utilizar-se do mesmo algoritmo, irá perceber que houve uma falha, pois os números após a execução do processo ficaram 
organizados assim: 
1 2 3 
2 1 3 
Como garantir que os dados ficarão ordenados? Simplesmente, mandando executar esta rotina de comparação de elementos tantas 
quantas vezes sejam necessárias até nenhum elemento ser trocado de posição, caracterizando assim, a ordenação do vetor. Vamos nos utilizar 
outra vez de uma chave de controle batizando-a como mudou. Ela definirá se houve ou não uma troca de elementos. Chegamos agora a uma 
das estruturas de ordenação. 
Algoritmo “ordena” 
 Var num : vetor [1..3] de inteiro 
 Aux : inteiro 
 Ind : inteiro 
 Mudou : caracter 
Inicio 
EDGAR TITO - INFORMÁTICA 2015 – Prof. Ranildo Lopes 22 
 Repita 
 mudou <- “N” 
 Para ind de 1 ate 2 faca 
 Se num[ind] > num[ind + 1] entao 
 Aux <- num[ind] 
 num[ind] <- num[ind + 1] 
 num[ind + 1] <- Aux 
 mudou <- “S” 
 fimse 
 FimPara 
 ate mudou = “N” 
 Para ind de 1 ate 3 faca 
 Escreval (num[ind]) 
 FimPara 
FimAlgoritmo 
Pronto! Após a execução deste algoritmo, teremos nossos dados organizados de forma crescente. 
Outro algoritmo que utilizamos para ordenar os vetores é o exposto a seguir. Ele é bem menor em quantidade de código e é um dos 
mais utilizados entre os desenvolvedores de sde twares. 
Observar que n-1 é igual ao valor do índice da penúltima posição, e n é o valor do índice da última posição. 
Algoritmo “ordena” 
 Var num : vetor [1..3] de inteiro 
 K,j,Aux : inteiro 
 Ind,n : inteiro 
 Mudou : caractere 
Inicio 
 Para k de 1 ate n-1 faca 
 Para j de k + 1 ate n faca 
 Se num[k] > num[j] entao 
 Aux <- num[k] 
 num[k] <- num[j] 
 num[j] <- Aux 
 fimse 
 FimPara 
 FimPara 
 
 Para ind de 1 ate 3 faca 
 Escreval (num[ind]) 
 FimPara 
FimAlgoritmo 
Exercícios 
1. Faça um algoritmo que preencha um vetor de inteiros com 20 ocorrências recebendo do teclado. Ordene os números 
informados e exiba os valores do vetor de forma. 
2. Faça um algoritmo que preencha um vetor de nomes com 10 ocorrências recebendo do teclado, onde cada ocorrência é 
capaz de armazenar 30 dígitos. Ordene os nomes informados e exiba os valores do vetor. 
3. Faça um algoritmo capaz de preencher um vetor de 10 posições com inteiros positivos. Ordene o vetor, imprima na tela e 
mostre a media dos valores informados. 
4. Faça um algoritmo capaz de preencher um vetor de 10 posições com nomes. Ordene o vetor e imprima na tela apenas os 
nomes que começam com a letra ‘A’. 
Matrizes 
O vetor é uma variável composta unidimensional, por quanto solicita 1 índice para endereçar seus elementos. Estudaremos as 
bidimensionais 
As variáveis compostas bidimensionais, aqui intituladas MATRIZES, exigem dois índices para endereçar um de seus elementos. 
Assim como no vetor, as matrizes aceitam dados de um mesmo tipo (homogêneas) ou de tipos diferentes (heterogêneas). Neste último 
caso, os dados deverão ser comuns nas linhas ou nas colunas. 
Quando formos declarar uma estrutura do tipo Matriz, poderemos definir o tipo como único, caso essa seja a realidade da matriz 
(homogênea). Porém se você for trabalhar com uma matriz com mais de um tipo de dado (heterogênea), declare apenas a matriz com sua 
respectiva quantidade de linhas e colunas. 
A quantidade de elementos de uma matriz não precisa ser definida, pois ao definirmos quantas linhas e colunas ela terá, 
automaticamente teremos o número de elementos da mesma (qt_lin x qt_col). 
Exemplo: Uma matriz M com 4 linhas por 3 colunas (4X3) terá 12 elementos. 
Neste exemplo, a matriz M é do tipo NUMERICO, mas poderíamos ter uma matriz de outrostipos: 
ALFANUMÉRICA ou LOGICO. O conteúdo do elemento M[2,3] é -16, pois o primeiro índice indica a linha, e 
o segundo, a coluna onde se encontra o elemento procurado. 
Este índice poderá ser, como no caso dos vetores, variáveis numéricas inteiras positivas, o que 
facilita mais uma vez o nosso trabalho na montagem, pesquisa e processamento dos elementos de uma 
matriz. 
Como Declarar uma Matrizes? 
Para declarar uma matriz no nosso algoritmo, usaremos mais uma vez o comando DECLARE. 
VAR <Nome_matriz>: VETOR [1.. <qtd_linha> , 1..<qtd_coluna>] de <tipo> 
<Nome_matriz> - Nome da matriz 
<qtd_linha> - Quantidade de linhas da matriz 
<qtd_coluna> - Quantidade de colunas da matriz 
<Tipo> - Tipo da matriz definida (caractere, inteiro, real, logico , etc) 
Exemplos: 
VAR Fones : vetor [1..10,1..5] de caractere 
A matriz terá 50 elementos distribuídos em 10 linhas e 5 colunas, sendo todos do tipo CARACTERE. 
VAR Salários: Vetor [1..50,1..900] de inteiro 
Esta matriz comportará 45.000 elementos, cada um do tipo inteiro. 
-
1 5,6 
3
02 4 16 
2
1 ,5 
1
,45 400 00 
EDGAR TITO - INFORMÁTICA 2015 – Prof. Ranildo Lopes 23 
Para acessar um dado numa matriz o que é necessário fazer? 
Necessitamos informar o nome da matriz e as coordenadas que nos deixarão ‘setados’ na ocorrência desejada. Por exemplo: se 
tivermos uma matriz ‘Mnomes’ de 3 linhas e 4 colunas, carregada com elementos e quisermos pegar aquele que se encontra na linha 3 e 
coluna 2, o que deveríamos informar? Simplesmente, informaríamos: Matriz[lin,col] ou seja, Mnomes[3,2]. 
1 2 3 4 
Nome
11 
Nom
e12 
Nom
e13 
Nom
e14 
Nome
21 
Nom
e22 
Nom
e23 
Nom
e24 
Nome
31 
Nom
e32 
Nom
e33 
Nom
e34 
Como fazer para somar os elementos de uma matriz numérica? 
Vamos trabalhar algumas situações que envolvam a soma de elementos. 
Preencher os elementos da matriz 
Algoritmo “Prog 17” 
var 
 LINHA, COLUNA : inteiro 
 MAT : vetor[1..3, 1..4] de inteiro 
Inicio 
 Para LINHA de 1 ate 3 faca 
 Para COLUNA de 1 ate 4 faca 
 Escreva('DIGITE ELEMENTO ',LINHA,'X',COLUNA,': ') 
 Leia (MAT[LINHA,COLUNA]) 
 FimPara 
 FimPara 
FimAlgoritmo 
Somar todos os elementos da matriz 
Algoritmo “matriz” 
 Var Mnum : vetor [1..3,1..4] de inteiro 
 LINHA, COLUNA : inteiro 
 Soma : inteiro 
Inicio 
 Soma <- 0 
 Para LINHA de 1 ate 3 faca 
 Para COLUNA de 1 ate 4 faca 
 Soma <- Soma + Mnum[LINHA, COLUNA] 
 FimPara 
 FimPara 
 Escreval (Soma) 
FimAlgoritmo 
Somar todos os elementos linha a linha (subtotal por linha) 
Para cada linha acessada, serão somados todos os elementos das colunas da referida linha. 
Algoritmo “subtotalL” 
 Var Mnum : vetor [1..3,1..4] de inteiro 
 LINHA, COLUNA : inteiro 
 Soma : inteiro 
Inicio 
 Para LINHA de 1 ate 3 faca 
 Soma <- 0 
 Para COLUNA de 1 ate 4 faca 
 Soma <- Soma + Mnum[LINHA, COLUNA] 
 Escreval (“soma dos elementos da linha “, LINHA, “ = “ , Soma) 
 FimPara 
FimAlgoritmo 
Somar todos os elementos coluna a coluna (subtotal por coluna) 
Para cada coluna acessada, serão somados todos os elementos das linha da referida coluna. 
Algoritmo “subtotalC” 
 Var Mnum : vetor [1..3,1..4] de inteiro 
 LINHA, COLUNA : inteiro 
 Soma : inteiro 
Inicio 
 Para COLUNA de 1 ate 4 faca 
 Soma <- 0 
 Para LINHA de 1 ate 3 faca 
 Soma <- Soma + Mnum[LINHA, COLUNA] 
 FimPara 
 Escreval (“soma dos elementos da coluna “, COLUNA, “ = “ , Soma) 
 FimPara 
FimAlgoritmo 
Para transferir todos os elementos de uma matriz MAT para outra matriz chamada COPIA 
Algoritmo “CopiaMat” 
 Var Mnum, Copia : vetor [1..3,1..4] de inteiro 
 LINHA, COLUNA: inteiro 
Inicio 
 . 
 . 
 Para LINHA de 1 ate 3 faca 
 Para COLUNA de 1 ate 4 faca 
EDGAR TITO - INFORMÁTICA 2015 – Prof. Ranildo Lopes 24 
 COPIA[LINHA, COLUNA] <- Mnum[LINHA, COLUNA] 
 FimPara 
 FimPara 
 . 
 . 
 {Ou simplesmente} 
 . 
 . 
 COPIA<- Mnum; 
 . 
 FimAlgoritmo 
Trabalhando um vetor e uma matriz ao mesmo tempo 
Existirão momentos em que você poderá resolver um caso que envolva uma matriz e um vetor. O primeiro passo é não ficar 
preocupado e simplesmente, prestar atenção aos detalhes tais como: aproveitar ou não um índice; os elementos do vetor estão associados a 
linha ou a coluna da matriz? Vamos a um caso que lhe dará condições de trabalhar este novo momento. 
Dado um vetor VNOMES[50] contendo nome de alunos, e uma MNOTAS[50,4] contendo as 4 notas tiradas por cada aluno nos módulos 
de TDL. Elaborar um algoritmo que liste na tela, o nome de cada aluno e suas respectivas médias (será do tipo aritmética). Admitamos que os 
dados das estruturas vetor e matriz já estejam carregadas e esta parte do Algoritmo expresse apenas uma parte do processamento. 
Atente para o caso em que o primeiro aluno cujo nome é citado em VNOMES terá suas notas gravadas na primeira linha de MNOTAS. 
Com isso teremos o algoritmo abaixo. 
Algoritmo “vet_mat” 
 Var VNOMES : vetor [1..50] de caractere 
 MNOTAS : vetor [1..50,1..4] de real 
 K, j : inteiro 
 Soma, Media :real 
Inicio 
 Para k de 1 ate 50 faca 
 Soma <- 0 
 Para j de 1 ate 4 faca 
 Soma <- Soma + MNOTAS[k,j] 
 Media <- Soma / 4 
 Escreval (VNOMES[k], “ – “ , Media) 
 FimPara 
FimAlgoritmo 
Utilizando-se de um vetor auxiliar para resolver um caso 
Muitas vezes nos deparamos com situações nas quais necessitamos de outras variáveis para nos auxiliar no desenvolvimento do 
algoritmo (lembra da variável auxiliar que utilizamos para trocar os dados entre dois elementos do vetor / matriz?). Vamos aproveitar as 
estruturas anteriores e alterarmos o enunciado para solicitarmos os nomes dos alunos que possuam a média igual a maior média do grupo. 
Algoritmo "notas" 
 Var VNOMES : vetor [1..50] de caractere 
 MNOTAS : vetor [1..50,1..4] de real 
 K, j: inteiro 
 VMEDIA : vetor [1..50] de real 
 Soma, Maior :real 
Inicio 
 //Preenchendo o vetor e a matriz de notas 
 Para k de 1 ate 50 faca 
 escreva("Informe o nome do aluno:") 
 leia ( VNOMES[k] ) 
 escreva("Informe as 4 notas do aluno:") 
 Para j de 1 ate 4 faca 
 leia ( MNOTAS[k,j] ) 
 FimPara 
 FimPara 
 
 //Calculando a media das notas de cada aluno 
 Para k de 1 ate 50 faca 
 Soma <- 0 
 Para j de 1 ate 4 faca 
 Soma <- Soma + MNOTAS[k,j] 
 FimPara 
 VMEDIA[k] <- Soma / 4 
 //Encontra a maior nota 
 Se VMEDIA[k] > Maior entao 
 Maior <- VMEDIA[k] 
 fimse 
 FimPara 
 // Exibe os nomes dos alunos com a maior nota 
 Escreval ("Aluno(s) com a maior nota") 
 Para k de 1 ate 50 faca 
 Se VMEDIA[k] = Maior entao 
 Escreval (VNOMES[k]) 
 Fimse 
 FimPara 
FimAlgoritmo 
 
 
 
 
 
EDGAR TITO - INFORMÁTICA 2015 – Prof. Ranildo Lopes 25 
 
U.E PROF EDGAR TITO - NOITE 
PROF. RANILDO LOPES 
DISCIPLINA: Lógica de Programação 
 
 
1ª Lista de Exercícios – Proposição Composta e Conectivos Lógicos (Gabarito) 
01. Sejam as proposições p: Jorge é rico e q: Carlos é feliz. Traduzir para linguagem corrente as 
seguintes proposições: 
 a) p ν ~q b) ~p → q c) q ↔ ~p; 
02. Sejam as proposições p: O livro é interessante e q: O livro é de lógica. Traduzir para linguagem 
corrente as seguintes proposições: 
 a) ~p b) p ν q c) p ∧ ~q d) ~(p ν q) e) q ↔ ~p; 
 
 03. Traduzir para a linguagem simbólica, considerando p = Josefa é rica, q = Josefa é feliz, r = Josefa 
é estudante. 
a) Josefa é rica ou infeliz. 
b) Se Josefa é estudante e rica então é estudante e feliz. 
c) Josefa é pobre, mas feliz. 
d) Josefa é pobre e infeliz. 
e) Josefa é pobre ou rica, mas é infeliz. 
f) Se Josefa é pobre então é feliz. 
g) Josefa é rica se e somente se não for pobre. 
h) Se Josefa é estudante então é rica se e somente se é feliz. 
i) Josefa é pobre,

Outros materiais