Buscar

algoritmos_e_logica_de_programacao

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

Algoritmos e Lógica de Programação
CARLOS ALEXANDRE GONÇALVES DE ARAÚJO
1ª Edição
Brasília/DF - 2018
Autores
Carlos Alexandre Gonçalves de Araújo
Produção
Equipe Técnica de Avaliação, Revisão Linguística e 
Editoração
Sumário
Organização do Livro Didático....................................................................................................................................... 4
Introdução ............................................................................................................................................................................. 6
Capítulo 1
Algoritmo ......................................................................................................................................................................... 9
Capítulo 2
Estruturas de Decisão ...............................................................................................................................................23
Capítulo 3
Estruturas de Repetição ...........................................................................................................................................34
Capítulo 4 
Estruturas de Dados ...................................................................................................................................................48
Capítulo 5
Procedimentos e Funções ........................................................................................................................................57
Capítulo 6
Exercícios de Fixação ................................................................................................................................................63
Referências ........................................................................................................................................................................71
4
Organização do Livro Didático
Para facilitar seu estudo, os conteúdos são organizados capítulos, de forma didática, objetiva e 
coerente. Eles serão abordados por meio de textos básicos, com questões para reflexão, entre outros 
recursos editoriais que visam tornar sua leitura mais agradável. Ao final, serão indicadas, também, 
fontes de consulta para aprofundar seus estudos com leituras e pesquisas complementares.
A seguir, apresentamos uma breve descrição dos ícones utilizados na organização do Livro Didático.
Atenção
Chamadas para alertar detalhes/tópicos importantes que contribuam para a 
síntese/conclusão do assunto abordado.
Cuidado
Importante para diferenciar ideias e/ou conceitos, assim como ressaltar para o 
aluno noções que usualmente são objeto de dúvida ou entendimento equivocado.
Importante
Indicado para ressaltar trechos importantes do texto.
Observe a Lei
Conjunto de normas que dispõem sobre determinada matéria, ou seja, ela é origem, 
a fonte primária sobre um determinado assunto.
Para refletir
Questões inseridas no decorrer do estudo a fim de que o aluno faça uma pausa 
e reflita sobre o conteúdo estudado ou temas que o ajudem em seu raciocínio. 
É importante que ele verifique seus conhecimentos, suas experiências e seus 
sentimentos. As reflexões são o ponto de partida para a construção de suas 
conclusões.
5
ORgAnIzAçãO DO LIvRO DIDátICO
Provocação
Textos que buscam instigar o aluno a refletir sobre determinado assunto antes 
mesmo de iniciar sua leitura ou após algum trecho pertinente para o autor 
conteudista.
Saiba mais
Informações complementares para elucidar a construção das sínteses/conclusões 
sobre o assunto abordado.
Sintetizando
Trecho que busca resumir informações relevantes do conteúdo, facilitando o 
entendimento pelo aluno sobre trechos mais complexos.
Sugestão de estudo complementar
Sugestões de leituras adicionais, filmes e sites para aprofundamento do estudo, 
discussões em fóruns ou encontros presenciais quando for o caso.
Posicionamento do autor
Importante para diferenciar ideias e/ou conceitos, assim como ressaltar para o 
aluno noções que usualmente são objeto de dúvida ou entendimento equivocado.
6
Introdução
Neste livro, apresentaremos a Lógica de Programação e o funcionamento do processo de 
desenvolvimento de programas (softwares), considerando obter bom embasamento para, no 
futuro, aplicar na programação de computadores.
Provocação
Mas, para começar, reflita sobre o significado da palavra “Lógica”. O que é “Lógica”?
A lógica de programação é muito importante para pessoas que desejam trabalhar com 
desenvolvimento de programas para computadores. Pode, portanto, ser definida como um 
conjunto de técnicas para organizar pensamentos para atingir determinado objetivo.
Ao desenvolver um sistema, a responsabilidade do programador é maior na criação dos algoritmos 
do que em sua implementação, pois, quando esses são bem projetados, o tempo para conclusão do 
projeto é reduzido, possibilitando a entrega no prazo previsto.
Sem que se perceba, os algoritmos estão presentes no nosso dia a dia: numa receita de bolo, num 
manual de instruções de um equipamento ou no passo a passo para explicar a solução de um 
problema matemático, por exemplo. 
Serão estudados os conceitos básicos e as técnicas para a criação e o desenvolvimento de 
algoritmos por meio de três métodos para sua representação, que são alguns dos mais conhecidos, 
tendo como objetivo obter a capacidade de transformar qualquer problema do cotidiano em 
um algoritmo de boa qualidade, ou seja, obtendo-se uma base teórica de boa qualidade, para o 
aprendizado futuro de uma Linguagem de Programação. 
Objetivos do Livro Didático 
 » Entender o conceito de algoritmo.
 » Ser capaz de desenvolver um algoritmo sobre um exemplo do dia a dia.
 » Ser capaz de criar e ler um algoritmo representado em forma de fluxograma.
 » Ser capaz de desenvolver um algoritmo sobre um exemplo sequencial numérico.
 » Ser capaz de criar e ler um algoritmo sequencial numérico representado em forma de 
fluxograma.
 » Desenvolver a capacidade de análise de problemas com soluções dependentes de testes.
7
IntRODuçãO
 » Conhecer os operadores relacionais e lógicos.
 » Conhecer os comandos de tomada de decisão simples, composta (se e se ... senão) e de 
múltipla escolha (caso).
 » Desenvolver a capacidade de análise de problemas com tomada de decisão.
 » Capacitar o aluno a identificar as ações que devem ser executadas de forma repetitiva 
na solução de problemas.
 » Capacitar o aluno a determinar as condições de controle da repetição.
 » Apresentar os recursos de programação “enquanto” e “para”.
 » Desenvolver a capacidade de criar algoritmos utilizando estruturas de repetição de 
forma aninhada.
9
Introdução ao Capítulo 
Para resolver um problema no computador, é prioritário que seja encontrada uma maneira de 
descrever esse problema de forma bastante clara e precisa. É preciso encontrar uma sequência 
de passos que possibilitem que o problema seja resolvido de maneira automática e até mesmo 
repetitiva. Essa sequência é conhecida como “algoritmo”.
A noção de algoritmo é primordial na computação. A criação de algoritmos com o objetivo 
de resolver problemas é uma das maiores dificuldades para quem inicia em programação de 
computadores.
Objetivos do Capítulo 
 » Entender o conceito de algoritmo.
 » Ser capaz de desenvolver um algoritmo sobre um exemplo do dia a dia.
 » Ser capaz de criar e ler um algoritmo representado em forma de fluxograma.
 » Ser capaz de desenvolver um algoritmo sobre um exemplo sequencial numérico.
1CAPÍTULOALgORItMO
10
CAPÍTULO 1 • ALgORItMO
Conceito de Algoritmo
Um algoritmo pode ser definido como um conjunto de regras (instruções), bem definidas, para 
solução de um determinado problema. Segundo o dicionário Michaelis, o conceito de algoritmo é 
“utilização de regras para definir ou executar uma tarefa específica ou para resolver um problema 
específico”. 
A partir desses conceitos de algoritmos, pode-se perceber que a palavra algoritmo não é um 
termo computacional, ou seja, não serefere apenas à área de informática, é uma definição 
ampla, que pode, inclusive, ser utilizada normalmente no cotidiano. 
Um programa tem como premissa a solução de um 
problema apresentado; nesse caso, para a construção 
de seu respectivo algoritmo, alguns itens devem ser 
observados: a) encontrar os diversos passos componentes 
do problema de forma simples e objetiva, não 
apresentando interpretações diversas; b) ordenar esses 
passos do forma organizada; e c) manter esses passos 
dentro de uma sequência finita.
Abaixo tem-se um exemplo simples de algoritmo com uma estrutura sequencial descrevendo 
os passos para troca de um pneu.
Algoritmo para troca de um pneu de automóvel:
1. manter o carro desligado e o freio de estacionamento acionado;
2. pegar as ferramentas necessárias (chave de roda e macaco);
3. pegar o estepe;
4. afrouxar os parafusos de fixação do pneu furado;
5. suspender o carro utilizando o macaco;
6. retirar os parafusos de fixação do pneu;
7. retirar o pneu furado;
8. colocar o estepe;
9. recolocar os parafusos de fixação do pneu, apertando-os;
10. com o macaco, baixar o carro;
11. fazer um último aperto de ajuste nos parafusos de fixação do pneu;
12. guardar as ferramentas no local adequado.
Para refletir
Na informática, o algoritmo é o “projeto 
do programa”, ou seja, antes de se fazer 
um programa (software) na Linguagem de 
Programação desejada (Pascal, C, Delphi etc.), 
deve-se fazer o algoritmo do programa. 
11
ALgORItMO • CAPÍTULO 1
Observe o nível de detalhamento do texto do algoritmo acima. Como mencionado 
anteriormente, os passos devem ser claros e capazes de realizar todas as operações necessárias 
à solução da situação proposta. Em alguns casos, pode ser necessário obter orientações 
especializadas para a correta estruturação do algoritmo.
Partes de um Algoritmo
Um algoritmo, mesmo o mais básico deles, é um sistema. Sendo assim, possui três partes em 
sua estrutura básica, representada na figura 1. São elas:
1. Entrada de dados – Nela, o usuário apresenta, quando solicitado, os dados para que o 
algoritmo possa ser executado corretamente.
2. Processamento de dados – Nessa parte, são realizados todos os procedimentos 
necessários à solução do problema proposto, tais como: resolução de equações, 
avaliação de resultados parciais, definição de “caminhos” a seguir etc.
3. Saída de dados – Parte do algoritmo responsável pela apresentação dos resultados 
desejados. Dependendo da estrutura criada pelo programador, pode estar distribuída 
no corpo do algoritmo.
Figura 1 – Estrutura básica de um algoritmo.
Fonte: Cechinel e Ferrari (2018)
Por exemplo, considere a sequência abaixo que descreve a troca de uma lâmpada danificada:
1. pegue uma escada; (entrada)
2. pegue uma lâmpada nova; (entrada)
3. posicione a escada embaixo da lâmpada; (processamento)
4. suba na escada; (processamento)
5. retire a lâmpada velha; (processamento)
6. coloque a lâmpada nova; (processamento)
7. acenda a lâmpada. (saída)
Ou, ainda, o exemplo abaixo para calcular a área de um retângulo:
1. leia L1; (entrada)
2. leia L2; (entrada)
12
CAPÍTULO 1 • ALgORItMO
3. A ← L1*L2; (processamento)
4. escreva A. (saída)
Para calcular a área, é necessário saber os valores de L1 e L2. Nesse caso, a entrada para o 
processamento desse algoritmo consistirá desses valores (que devem ser informados pelo 
usuário pelo teclado, por exemplo). O processamento do algoritmo será a realização do cálculo 
L1*L2 e a atribuição do resultado dessa expressão para a variável A. A parte da saída consistirá 
na escrita do valor de A no monitor.
Fluxogramas
Fluxogramas são representações gráficas de um algoritmo (ou programa). Cada passo, ou linha 
de comando, descrito é representado por uma forma geométrica definida por regras básicas 
para cada tipo.
A figura abaixo representa um algoritmo na forma de um fluxograma. O início 
e o fim do algoritmo são marcados com uma figura elíptica; as ações a serem 
executadas estão em retângulos; sendo que as estruturas de controle condicionais 
estão em losangos e indicam duas possibilidades de proseguimento do algoritmo, 
uma para o caso da expressão avaliada (condição) ser verdadeira e outra para o 
caso de ser falsa. (CECHINEL; FERRARI, 2018)
Observando o fluxograma abaixo, as ações a serem executadas estão representadas por 
retângulos; o procedimento de avaliação de uma determinada situação (no caso, a situação do 
forno) é representado dentro de um losango, com duas possíveis respostas, uma verdadeira e 
outra falsa, qualquer delas direcionando para o passo seguinte.
Figura 2 – Representação de um algoritmo na forma de um fluxograma.
Fonte: Cechinel e Ferrari (2018).
13
ALgORItMO • CAPÍTULO 1
Pseudocódigos
Uma segunda forma de representar os algoritmos é a utilização de pseudocódigos. Costuma-
se dizer que é uma maneira intermediária entre a linguagem natural e uma linguagem de 
programação.
Utiliza-se um conjunto restrito de códigos (palavras-chave) que correspondem às instruções nas 
linguagens de programação, embora sem a rigidez das estruturas de nenhuma das linguagens 
conhecidas.
Figura 3 – Exemplo de um pseudocódigo.
Fonte: Cechinel e Ferrari (2018).
A figura acima apresenta um exemplo estruturado como pseudocódigo que se propõe a 
escrever o maior valor entre x ou y, digitados pelo usuário. As expressões em negrito correspondem 
às palavras-chave que representam os comandos, ou estruturas, utilizadas em todas as linguagens 
de programação. Observe que, nas diversas linguagens de programação, os comandos (ou 
estruturas) variam, mas sua representação no pseudocódigo é a mesma.
Conceitos Importantes
Representação de Dados
tipos Primitivos
Atenção
Os dados em um computador são classificados e armazenados de acordo com o tipo de informação e a finalidade para a qual 
se deseja utilizá-los. 
A correta representação de um dado torna mais eficiente a utilização dos recursos 
computacionais e do programa propriamente dito.
14
CAPÍTULO 1 • ALgORItMO
As linguagens de programação possuem suas próprias estruturas para definir os tipos de dados 
a serem armazenados e utilizados, mas todas têm como base os tipos apresentados a seguir.
 » Tipo inteiro: declararemos variáveis do tipo numérico inteiro quando precisarmos 
armazenar valores inteiros, positivos ou negativos (1, 5, 7, -10, -5, ...). Por exemplo, se 
precisarmos de uma variável para armazenar o número de filhos de um funcionário, o 
tipo ideal para essa variável seria inteiro.
 » Tipo real: declararemos variáveis do tipo numérico real para armazenar valores reais; 
em outras palavras, valores com ponto decimal (5.7, 3.2, -8.5). Esse seria o tipo ideal 
para armazenar, por exemplo, o salário de funcionários.
 » Tipo caractere: declararemos variáveis do tipo caractere para armazenar um único 
caractere, que pode ser uma letra ou um símbolo. Por exemplo, para identificar o sexo 
do indivíduo, armazenaremos apenas o caractere ‘F’ ou ‘M’.
 » Tipo cadeia: declararemos variáveis do tipo cadeia para armazenar uma sequência de 
caracteres, ou seja, uma palavra, uma mensagem, um nome. Assim, se precisarmos de 
uma variável para armazenar o nome de uma pessoa, esse seria o tipo ideal.
 » Tipo lógica: declararemos variáveis do tipo lógico para armazenar valores lógicos, ou 
seja, o valor armazenado em variáveis desse tipo será sempre VERDADEIRO ou FALSO 
(resultado de uma estrutura condicional dentro do programa).
Constantes
Constantes são as informações (dados) que permanecem com o mesmo valor durante todo 
o processamento do algoritmo (programa). As constantes seguem as mesmas classificações 
apresentadas acima.
variáveis
O conceito de variável deve ser muito bem assimilado para a 
criação de um algoritmo ou programa.
Como o próprio nome já diz, as variáveis armazenam 
valores que podem ser alterados diversas vezes durante 
o processamento do algoritmo (programa) conforme as 
instruções são executadas. Deve-se ter me mente que, ao 
alterar o conteúdo de umavariável, o valor anteriormente armazenado se perde.
As variáveis, em um algoritmo (ou programa), devem ser definidas com a utilização de um 
nome, também conhecido como identificador, criado pela pessoa que está desenvolvendo o 
algoritmo. Por exemplo, caso seja utilizada uma variável para armazenar o nome de um aluno, 
Atenção
Uma variável é, em última análise, 
um espaço reservado na memória 
do computador onde os dados, ou 
informações, deverão ser guardados.
15
ALgORItMO • CAPÍTULO 1
pode-se identificá-la como “nomedoaluno”, “nome_do_aluno”; a média desse aluno pode ser 
“mediadoaluno”, “media_do_aluno” ou simplesmente “media”.
Uma variável pode ser vista, por analogia, como uma gaveta com uma etiqueta colada a sua 
frente, cujo conteúdo não é fixo, permanente. Na verdade, essa gaveta pode ter seu conteúdo 
alterado, em quantidade, diversas vezes, mantendo sempre o mesmo tipo de conteúdo. Como 
exemplo, uma variável denominada NOTA contém o valor 8; porém, em outro instante posterior, 
poderá conter qualquer outro valor numérico. Observe que, a cada instante, ela conterá um, e 
somente um, valor.
Identificação das Variáveis
Trataremos agora da identificação das variáveis de modo mais específico. Para se utilizar os 
valores armazenados nas variáveis, é preciso que eles estejam vinculados corretamente a 
uma das variáveis do algoritmo. O nome da variável é que será utilizado para ter acesso ao 
seu conteúdo.
Uma analogia útil para entender o conceito e a necessidade de utilização do 
identificador seria pensar no mesmo como uma placa de sinalização que indica 
(delimita) uma determinada região ou espaço na memória do computador 
onde o dado (informação) desejado está localizado. Sendo assim, toda vez que 
se deseja acessar uma determinada informação utilizamos o nome dessa placa 
de sinalização e recuperamos o conteúdo que está localizado dentro do espaço 
delimitado pela mesma. (CECHINEL; FERRARI, 2018)
Observe a lei
A nomeação dos identificadores deve obedecer a algumas regras.
Tais regras estão apresentadas abaixo:
1. O nome a ser utilizado para identificar a variável deve sempre começar com um caractere 
alfabético.
2. Pode ter tantos caracteres alfanuméricos que desejar, desde que não ultrapasse 30 
(trinta) caracteres nem desobedeça à regra anterior.
3. Os caracteres alfabéticos podem ser minúsculos ou maiúsculos.
4. Não deve conter sinais de pontuação, acentuação, operadores aritméticos ou espaço 
em branco. A única exceção, nesse caso, é o caractere sublinhado ( _ ) que pode ser 
utilizado para substituir o espaço em branco no nome da variável (observe os exemplos 
apresentados anteriormente).
5. Evite palavras em inglês que possuam a mesma grafia da língua portuguesa (hotel, por 
exemplo). Algumas dessas palavras são chamadas de “palavras reservadas” e possuem 
funções específicas dentro da linguagem de programação.
16
CAPÍTULO 1 • ALgORItMO
Importante
Ao nomear os identificadores, é conveniente utilizar palavras mnemônicas, ou seja, palavras que lembrem o caráter do 
conteúdo armazenado. Isso facilita a leitura do código programado e possibilita que eles seja melhor documentado.
Suponha a seguinte situação: um problema que controla compras de mercadorias em uma loja 
tem que armazenar o nome da mercadoria, o preço e a quantidade. Para isso, pode-se utilizar as 
seguintes variáveis: “nomemercadoria” ou “nome_mercadoria”, “quantidade” ou “quantidade_
mercadoria” ou “quant_mercadoria”, “preco” ou “precomercadoria” ou “preco_mercadoria”. 
Assim, é mais fácil lembrar a finalidade (tipo e conteúdo) de cada um.
Observe que o identificador “preco” não tem cedilha, obedecendo ao que foi mencionado na 
regra número 4 acima.
No desenvolvimento de algoritmos, frequentemente se torna necessário armazenar dados 
referentes ao problema, mas, para armazenar esses dados, é preciso solicitar ao computador 
que ele reserve uma área da memória para utilização. O modo de solicitar ao computador que 
reserve memória é chamado de declaração de variáveis.
A sintaxe para a declaração de variáveis em pseudocódigo é apresentada abaixo:
Sintaxe: var tipo_da_variavel nome_da_variavel
var
A palavra var é utilizada em pseudocódigo para indicar a declaração de uma variável.
tipo_da_variavel
É necessário informar o tipo dos dados que serão armazenados na variável para que o 
computador saiba o tamanho do espaço de memória que reservará. Esses tipos coincidem 
com os já apresentados acima, quando se tratou dos Tipos Primitivos.
nome_da_variavel
Deve seguir o conjunto de regras apresentadas acima para identificação das variáveis.
Posicionamento do autor
Essa sintaxe apresentada acima pode variar apenas na ordem em que são escritas. Alguns autores representam primeiro o 
nome da variável (ou lista de nomes) e, depois, o tipo delas.
17
ALgORItMO • CAPÍTULO 1
Comandos de Entrada e Saída
Entrada
Na maioria das vezes, um algoritmo (ou programa) necessita de dados, que devem ser introduzidos 
pelo usuário, para serem processados. Nesses casos, utiliza-se um periférico de entrada padrão: 
em geral, o teclado.
Observe o exemplo abaixo que representa um possível sistema de locadora de filmes, em 
que são necessários alguns dados, por exemplo, o código do cliente e o nome do filme. Essas 
informações são fornecidas pelo sistema a partir de comandos de entrada de dados.
Figura 4 – Declaração de variáveis e comando de entrada de dados.
Fonte: Cechinel (2018).
Para realizarmos a entrada de dados utilizaremos o comando leia. Ao utilizar 
o comando leia o programador deve saber de antemão qual a variável que irá 
armazenar o valor que será fornecido pelo usuário. No caso do exemplo anterior, 
os valores fornecidos pelo usuário são referentes ao código do cliente e ao nome 
da fita que o mesmo está locando. Sendo assim, é necessário declarar variáveis 
que possam armazenar valores que sejam compatíveis com as informações 
solicitadas ao usuário. Por exemplo, a informação do código do cliente pode ser 
um valor do tipo inteiro, então é necessário que declaremos no algoritmo uma 
variável desse tipo, seguindo esse mesmo raciocínio, a informação do nome 
da fita pode ser uma informação do tipo caractere, sendo também necessário 
que declaremos no algoritmo uma outra variável para receber essa informação. 
(CECHINEL; FERRARI, 2018)
Observe no exemplo acima que, tendo sido declaradas corretamente as variáveis, a 
instrução “leia”, seguida do nome da respectiva variável entre parênteses, irá receber o valor 
correspondente digitado pelo usuário.
Observando o exemplo a seguir, quando for executada a instrução na linha 3, o usuário deverá 
informar um valor que corresponda ao que se pede, ou seja, um valor numérico inteiro, 
pressionando, a seguir, a tecla “ENTER” para que a linha 4 seja executada, armazenando o valor 
digitado na variável indicada entre parênteses. O mesmo ocorrerá nas linhas 5 e 6, sendo que o 
usuário deverá agora digitar um nome, declarado do tipo caractere, conforme a declaração na 
linha 2.
18
CAPÍTULO 1 • ALgORItMO
Figura 5 – Exemplo de comando de entrada e saída.
Fonte: Cechinel e Ferrari (2018).
Observe no exemplo acima as linhas 3 e 5. Nelas está sendo utilizado o comando de saída de 
dados “escreva”, que apresenta na saída padrão (o monitor) a frase que se encontra dentro dos 
parênteses e entre aspas, informando ao usuário o que ele deve digitar para dar sequência ao 
processamento do algoritmo.
Saída
Quando se deseja apresentar algum tipo de informação no monitor (saída padrão), utiliza-se o 
comando escreva, denominado “comando de saída de dados”, seguido da informação desejada. 
Sendo assim, caso deseje escrever a frase “Boa tarde!” na tela, a instrução ficará da seguinte forma:
escreva (“Boa tarde!”)
As aspas não irão aparecer no monitor; servem para delimitar a frase (ou expressão) que se 
deseja que o usuário visualize. Já quando se deseja apresentar o conteúdo de uma variável 
na tela, a estrutura do comando tem uma leve modificação. Suponhaque o algoritmo em 
execução deva apresentar a média de um determinado aluno, e este valor, que será 6.5 (seis 
e meio), esteja armazenado na variável “MEDIA” (observe o nome do identificador em letras 
maiúsculas como indicado na regra número 3 apresentada anteriormente). Para isso, o 
comando, ou instrução, será o seguinte:
escreva (MEDIA)
Irá, portanto, ser apresentado no monitor o conteúdo armazenado na variável indicada, ou 
seja, irá aparecer para o usuário o número 6.5 (atente para o detalhe que está sendo utilizado 
como separador decimal o ponto, que é o padrão das linguagens de programação). Observe 
que, nesse caso, o que está entre os parênteses não está com aspas, pois a palavra MEDIA 
corresponde ao identifcador da variável cujo valor se deseja que seja apresentado.
19
ALgORItMO • CAPÍTULO 1
Observe agora a instrução abaixo.
escreva (“Media do aluno: “, MEDIA)
Essa instrução fará com que seja apresentada no monitor a frase Media do aluno:, seguida do 
valor da média armazenado na variável MEDIA. A frase, ou sequência de caracteres desejada, 
entre aspas fica separada do identificador que representa a variável por uma vírgula.
Atenção
Note que, quando se deseja escrever alguma mensagem na tela (letra, frase, número etc.) literalmente, deve-se utilizar aspas 
para identificar o que será escrito, pois o que estiver entre aspas no algoritmo será exatamente o que aparecerá na tela do 
computador. Por outro lado, quando se quer escrever o conteúdo de uma variável, não se utilizam aspas.
Operadores Aritméticos
Em geral, no desenvolvimento de algoritmos, são utilizadas expressões matemáticas para 
a resolução de cálculos. A tabela abaixo apresenta os operadores aritméticos básicos e as 
representações necessárias para escrever as expressões.
Figura 6 – Operadores aritméticos utilizados.
Fonte: Cechinel e Ferrari (2018).
Nos algoritmos, assim como nas linguagens de programação, as expressões matemáticas sempre 
obedecem às regras matemáticas comuns, ou seja:
 » Quando existem parênteses nas expressões, as operações dentro dos parênteses têm 
prioridade em relação às operações fora dos parênteses. Ocorrendo vários níveis de 
parênteses, ou seja, um parêntese dentro de outro, a prioridade na solução se inicia nas 
operações do parêntese mais interno para o mais externo.
 » Em uma equação, se ocorrerem operações com a mesma prioridade, a solução é realizada 
da esquerda para a direita.
20
CAPÍTULO 1 • ALgORItMO
Observe a tabela abaixo, na qual são apresentadas as prioridades e a ordem de execução dos 
operadores numa expressão aritmética, conhecida como precedência de operadores.
Figura 7 – Prioridade de operações aritméticas.
Fonte: Cechinel eFerrari (2018).
Dessa forma, veja os seguintes exemplos e os respectivos resultados:
Exemplo 01: 4 + (6 * (3 + 5)) = 52
Exemplo 02: 4 + 6 * (3 + 5) = 52
Atenção
Ao se desenvolver um algoritmo, é bastante comum deixar parênteses não pareados nas expressões aritméticas, o que é 
um erro difícil de se localizar posteriormente. Um teste prático para evitar esse tipo de contratempo consiste em contar na 
expressão quantos parênteses esquerdos e direitos existem, conferindo se eles estão em mesmo número.
Horizontalização
As expressões aritméticas dentro de um algoritmo devem ser escritas totalmente na horizontal, 
posicionando os operadores corretamente. A figura 8 apresenta um exemplo de como transformar 
uma expressão aritmética tradicional em seu correspondente linear. Para manter a ordem 
correta de resolução, observe a inclusão de parênteses.
Figura 8 – Horizontalização de fórmulas
Fonte: Carvalho (2007).
21
ALgORItMO • CAPÍTULO 1
Exemplos
Elabore um algoritmo que armazene os valore 20 e 5 nas variáveis X e Y, respectivamente. Feito 
isso, o algoritmo deve armazenar a soma dos valores armazenados anteriormente na variável 
Z e, a seguir, apresentar no monitor o valor armazenado em cada uma das variáveis. A solução 
está apresentada abaixo.
Figura 9 – Exemplo de algoritmo com horizontalização.
Fonte: Carvalho (2007).
Elabore um algoritmo que armazene os valores 4 e 3 nas variáveis A e B, respectivamente. A seguir, 
armazene o produto de A com B na variável C e a divisão de A por B na variável D. Ao final, o 
algoritmo deve escrever os valores de A, B, C e D e a mensagem ‘Fim do Algoritmo’. Abaixo está 
uma das possíveis soluções.
Exemplo resolvido:
A ← 4
B ← 3
C ← A * B
D ← A / B
Escrever A, B, C, D
Escrever “Fim do Algoritmo”
Observe, no exemplo acima, a representação da seta para a esquerda como comando de 
atribuição e as estruturas dos comandos de saída utilizados.
O exemplo abaixo representa uma solução para a seguinte proposição: suponha um algoritmo 
que leia dois valores, armazenando-os em variáveis distintas; em seguida, o algoritmo deve 
realizar o produto do primeiro valor pela soma de ambos e esse resultado deverá ser dividido 
pelo segundo valor inserido, escrevendo o resultado final no monitor.
22
CAPÍTULO 1 • ALgORItMO
Solução de algoritmo:
Início
 Ler A, B
 C ← A * (A + B) / B
 Escrever C
Fim
Sintetizando
Vimos até agora:
 » a definição básica de um algoritmo;
 » os componentes básicos de um algoritmo;
 » os comandos básicos de um algoritmo;
 » exemplos de algoritmos para solução de problemas simples.
23
Introdução ao Capítulo 
É comum nos algoritmos surgirem situações em que a execução de uma ação ou sequência de 
subações esteja sujeita a uma certa condição. Essa condição é representada no texto do algoritmo 
por uma expressão lógica.
Denomina-se expressão lógica a expressão cujos operadores são lógicos e cujos operandos são 
relações, constantes e/ou variáveis do tipo lógico.
Objetivos do Capítulo 
 » Desenvolver a capacidade de análise de problemas com soluções dependentes de testes.
 » Conhecer os operadores relacionais e lógigos.
 » Conhecer os comandos de tomada de decisão simples, composta e de múltipla escolha.
2CAPÍTULOEStRutuRAS DE DECISãO
24
CAPÍTULO 2 • EStRutuRAS DE DECISãO
Estruturas de Condição
Até o presente caso, nos itens apresentados anteriormente, os algoritmos foram formados de 
modo sequencial, numa estrutura conhecida como “Top Down”. Nessa situação, a execução 
é realizada sequencialmente, linha após linha, até chegar no final. Porém, essa estrutura é 
limitada, pois pode ser necessário, como geralmente acontece, um “desvio” na sequência de 
execução dependendo de situações (condições) do problema ou situação apresentada. Nesse 
caso, faz-se uso de uma estrututa conhecida como estruturas de condição, comum à maioria 
das linguagens de programação conhecidas hoje em dia.
Considere, por exemplo, uma situação comum aos estudantes: verificar se determinado aluno 
está aprovado ou não ao final de um período letivo. Para isso, necessita-se saber a média 
considerada para aprovação e a média do aluno. Será necessário avaliar se a média desse aluno 
é maior, igual ou menor ao valor considerado base para aprovação. Sendo assim, caso ocorra a 
primeira situação, o programa executará um conjunto de instruções; caso contrário, o programa 
executará outro conjunto de instruções. São situações semelhantes à descrita que necessitam 
das estruturas de condição.
Operadores Relacionais
Operações relacionais são os símbolos que são utilizados para realizar as comparações 
permitidas entres valores, tais como a descrita acima. A figura abaixo apresenta os tipos de 
operadores relacionais comuns à maioria das linguagens de programação.
Figura 10 – Operadores relacionais permitidos.
Fonte: Carvalho (2007).
A figura 11 apresenta alguns exemplos de comparações válidas nas diversas linguagens de 
programação.
25
EStRutuRAS DE DECISãO • CAPÍTULO 2
Figura 11 – Operações relacionais.
Fonte: Carvalho (2007).
Estrutura de Condição Simples: se-então
A estrutura condicional mais simples que se pode utilizar é a “se-entao”, que possui a estrutura 
básica apresentada abaixo:
se <expressão-lógica> então:
 <bloco de comandos>
fim-se
A <expressão-lógica>será substituída por uma estrutura em que se compara o que se deseja e 
apresenta como resultado um valor “verdadeiro” (V) ou “falso” (F); sendo o resultado verdadeiro, 
<bloco de comandos>, ou seja, as instruções compreendidas entre o “se e o “fim-se” serão 
executadas; caso contrário, a execução do programa continua a partir da linha após a estrutura 
de condição, ou seja, a partir da instrução abaixo do “fim-se”. Observe, portanto, que a estrutura 
condicional simples começa na instrução “se” e termina na instrução “fim-se”.
O <bloco de comandos> consiste em um conjunto de instruções executadas apenas quando o 
resultado da expressão lógica for verdadeiro.
Voltando ao exemplo da média do aluno, considere a condição “média >= 6”. Sendo a média igual 
a 5, o bloco de comandos não será executado; se a média for igual a 8.5, o bloco de comandos 
será executado. A estrutura desse exemplo é apresentada abaixo.
Exemplo de condição simples.
var media: real
escreva (“Informe a media do aluno: “)
leia (media)
se media >= 6 então
 escreva (“Aluno aprovado.”)
fim-se
26
CAPÍTULO 2 • EStRutuRAS DE DECISãO
Estrutura de Condição Composta: se-então-senão
Observe novamente o exemplo de média anterior. O trecho do algoritmo apresentado só 
apresenta alguma resposta se a condição apresentada for verdadeira; mas, caso seja falsa, nada 
é apresentado. Para resolver esse problema, pode-se complementar a estrutura anterior criando 
uma “estrutra de condição composta”, acrescentando o comando senão. Observe a estrutura 
abaixo, representando a condição composta.
se <expressão-lógica> então:
 <bloco de comandos verdade>
senão:
 <bloco de comandos falso>
fim-se
Na estrutura “se-então-senão”, o <bloco de comandos verdade>, como anteriormente, será 
executado se a <expressão lógica> for verdadeira, e, a seguir, a execução do algoritmo continua 
a partir da linha abaixo do “fim-se”; se a <expressão lógica> for falsa, será executado o <bloco 
de comandos falso>, apresentado abaixo do “senão”, dando continuidade à execução das linhas 
de comando existentes após o “fim-se”.
Existe a possibilidade de a estrutura de condição não possuir a opção de comandos caso a 
resposta da condição seja falsa. Nesse caso, ela volta a ser executada como uma estrutura de 
condição simples.
O algoritmo abaixo mostra como escrever que a pessoa é maior de idade quando tem 18 anos 
ou mais, ou que a pessoa é menor de idade quando essa condição não é atendida.
Exemplo de condição composta.
var media: real
escreva (“Informe a media do aluno: “)
leia (media)
se media >= 6 então
 escreva (“Aluno aprovado.”)
senão
 escreva (“Aluno reprovado.”)
fim-se
No exemplo acima, sendo a resposta da condição verdadeira, será apresentada a mensagem 
“Aluno aprovado” no monitor e, a seguir, o processamento “pula” para a primeira linha de 
comando após o “fim-se”. Se a resposta for falsa, a primeira sequência de comandos (bloco de 
comandos verdade) não será executada, pulando para as linhas após o “senão”, continuando 
a execução do algoritmo após o “fim-se”.
27
EStRutuRAS DE DECISãO • CAPÍTULO 2
Observe o exemplo seguinte: escreva um algoritmo para ler um valor. Se o valor lido for igual a 
6, escrever a mensagem ‘Valor lido igual a 6’; caso contrário, escrever a mensagem ‘Valor lido 
diferente de 6’.
Exemplo resolvido
início
ler valor
se valor = 6, então
 escrever (“Valor lido igual a 6.”)
senão
 escrever (“Valor lido diferente de 6.”)
fim-se
fim
Mais um exemplo: desenvolver a lógica para um programa que leia dois valores numéricos 
e efetue a adição desses valores. Caso o valor somado seja maior ou igual a 10, deverá ser 
apresentado somando a ele mais 5; caso o valor somado não seja maior ou igual a 10, este deverá 
ser apresentado subtraindo 7.
1. Ler um valor para a variável A e outro valor para a variável B.
2. Efetuar a soma dos valores incógnitos A e B, atribuindo o valor da soma na variável X.
3. Verificar se X é maior ou igual a 10; caso seja verdadeiro, calcule R ←x + 5. Caso não 
seja, calcule R ←X – 7.
início
 var inteiro A, B, X, R;
 escreva “Digite um número:”;
 leia A;
 escreva “Digite outro número:”;
 leia B;
 X ← A + B;
 se (X >= 10) então
 R ← X + 5;
 senão
 R ← X – 7;
	 fim	se
 escreva “O resultado é:”, R;
fim
Observe que, após a definição dos tipos de variáveis, é solicitada a leitura dos valores para as 
variáveis A e B. Depois, esses valores são atribuídos na variável X, a qual possui o resultado da 
adição dos dois valores. Nesse ponto, é questionada no programa uma condição que permitirá 
28
CAPÍTULO 2 • EStRutuRAS DE DECISãO
escrever o resultado da soma adicionado de 5, caso esta seja maior ou igual a 10; não sendo, o 
programa apresentará o resultado subtraindo 7.
Estruturas de Condição Concatenadas
Ao utilizar uma estrutura de condição composta, é possível agrupar outras estruturas do 
mesmo tipo umas dentro das outras. Neste caso, tem-se a estrutura de condição concatenada, 
ou aninhada.
Nas estruturas de decisão concatenadas, os blocos de comando verdade ou falso podem conter 
outras estruturas concatenadas e, neste caso, a estrutura de condição mais interna será analisada 
se as anteriores o forem e uma das condições for satisfeita.
Por exemplo, suponha que se deseja verificar o problema referente às médias dos 
alunos de uma dada disciplina. Sabe-se que um aluno é aprovado caso apresente 
média maior ou igual a 7.0 e frequencia maior ou igual a 75%. Além disso, se o aluno 
obtiver a frequência minima exigida e uma média entre 3 e 7, poderá realizar uma 
última avaliação de recuperação. Para resolver o problema em questão utilizando 
apenas estruturas de condição se-então-senão pode-se iniciar verifcando a 
frequencia do aluno, e se a mesma for menor que 75% o aluno será considerado 
reprovado, mesmo com média aceitável, porém caso a frequencia respeite o 
mínimo exigido, é necessário a avaliar a média para saber se está aprovado, em 
recuperação ou reprovado. No momento em que é verificado que a frequencia 
é menor que 0.75 (75%) o aluno já está imediatamente reprovado, mas caso a 
frequencia seja maior ou igual a esse valor, pode-se continuar com o algoritmo para 
avaliar em que situação que o aluno se encontra. Nesta sequência, é necessário 
avaliar a média do mesmo, verificando se está acima de 7.0 (aprovado), entre 3 e 
7.0 (recuperação), ou abaixo de 3.0 (reprovado). Observe o algoritmo abaixo que 
apresenta uma solução para o exemplo descrito. (CECHINEL; FERRARI, 2018)
Condição concatenada
var frequencia, media: real
escreva (“Digite a media e a frequencia: “)
leia (media, frequencia)
se frequencia >= 0.75 então
 se media >= 7 então
 escreva (“Voce esta APROVADO”)
 senão
 se media >= 3 então
 escreva (“Voce esta em RECUPERACAO”)
 senão
 escreva (“Voce esta REPROVADO POR MEDIA”)
	 fim-se
fim-se
29
EStRutuRAS DE DECISãO • CAPÍTULO 2
senão
 escreva (“Voce esta REPROVADO POR FALTAS”)
fim-se
Fonte: CECHINEL, Cristian; FERRARI, Fabrício, 2018
Desenvolver a lógica para um programa que efetue o cálculo do reajuste de salário de um 
funcionário. Considere que o funcionário deverá receber um reajuste de 15% caso seu salário 
seja menor ou igual a 500. Se o salário for maior que 500, mas menor ou igual a 1.000, seu reajuste 
será de 10%; caso seja ainda maior que 1.000, o reajuste deverá ser de 5%.
Perceba que o problema em questão estabelece três condições para calcular o reajuste do salário 
do funcionário, sendo:
 » Salário <= 500, reajuste de 15%.
 » Salário > 500, mas <= 1.000, reajuste será de 10%.
 » Salário > 1.000, reajuste será de 5%.
Essas condições deverão ser encadeadas, pois todas as possibilidades de reajuste deverão ser 
cercadas. Sendo assim, observe o algoritmo abaixo:
1. definir uma variável para o salário reajustado: novo_salario;
2. ler um valor para a variável salário;
3. verificar se o valor de salário <= 500; se sim, reajustar em 15%;
4. verificar se o valor de salário <= 1.000; se sim, reajustar em 10%;
5. verificar se o valor de salário > 1.000;se sim, reajustar em 5%;
6. apresentar o valor reajustado, atribuindo a novo_salário.
início
 real: salário, novo_salario;
 escreva “Digite o valor do salário:”;
 leia salario;
 se ( salario <= 500 ) então
 novo_salário ← salário * ( 15 / 100 );
 senão
 se ( salario <= 1000 ) então
 novo_salário ← salário * ( 10 / 100 );
 senao
 novo_salário ← salário * ( 5 / 100 );
	 	 fim	se
fim	se
 escreva “O valor do novo salário é:” ,novo_salario;
fim
30
CAPÍTULO 2 • EStRutuRAS DE DECISãO
Operadores Lógicos
Em muitos casos, pode-se realizar testes múltiplos na mesma expressão lógica. Voltando ao 
exemplo de média de um aluno, suponha que exista uma condição em que o aluno terá que 
fazer uma prova de recuperação caso a média fique no intervalo maior ou igual a 5 e menor 
que 7. Nesse caso, utilizando os operadores lógicos, a expressão lógica ficaria: se (media >= 5) e 
(media < 7). Observe a figura abaixo, na qual são apresentados os operadores lógicos utilizados 
na maioria das linguagens de programação.
Figura 12 – Operadores lógicos utilizados.
Fonte: Carvalho (2007).
Note que a tabela acima apresenta os operadores lógicos já ordenados de acordo com suas 
prioridades, ou seja, se na mesma expressão ocorrer o operador ou e o operador não, por exemplo, 
primeiro será executado o não e depois o ou.
Observe que as respostas obtidas com os operadores lógicos têm grande semelhança com o 
conhecido Mapa de Karnaugh, basta verificá-lo e comparar com a Tabela Verdade apresentada 
abaixo.
Figura 13 – tabela verdade.
Fonte: Carvalho (2007).
Abaixo, alguns exemplos de utilização de operadores lógicos:
31
EStRutuRAS DE DECISãO • CAPÍTULO 2
Figura 14 – uso de operadores lógicos.
Fonte: Carvalho (2007).
Os exemplos A, B e C abaixo são apresentados em Português Estruturado:
Fonte: Carvalho (2007).
a. 
Se (salario > 180) e (salário < 800) então
 Escrever ‘Salário	válido	para	financiamento’
Senão
 Escrever ‘Salário	fora	da	faixa	permitida	para	financiamento’
FimSe
b. 
Se (idade < 18) ou (idade > 95) então
 Escrever ‘Você não pode fazer carteira de motorista’
Senão
 Escrever ‘Você pode possuir carteira de motorista’
FimSe
c. 
Se (idade > = 18) e (idade < = 95) e (aprovado_exame = ‘sim’) então
 Escrever ‘Sua carteira de motorista estará pronta em uma semana’
Senão
 Escrever ‘Você não possui idade permitida ou não passou nos testes’
FimSe
Exemplos de utilização de operadores lógicos resolvidos
Desenvolver a lógica para um programa que leia um ângulo (entre 0º e 360º) e que escreva o 
quadrante ao qual pertence. Ignorar os eixos:
32
CAPÍTULO 2 • EStRutuRAS DE DECISãO
1. ler um valor para a variável ângulo;
2. verificar se o ângulo digitado é > 0 e < 90, se for verdade: “ângulo está no primeiro 
quadrante”;
3. verificar se o ângulo digitado é > 90 e < 180, se for verdade: “ângulo está no segundo 
quadrante”;
4. verificar se o ângulo digitado é > 180 e < 270, se for verdade: “ângulo está no terceiro 
quadrante”;
5. verificar se o ângulo digitado é > 270 e < 360, se for verdade: “ângulo está no quarto 
quadrante”.
início
 inteiro: ângulo;
 escreva “Digite um ângulo: “;
 leia angulo;
 se ( angulo > 0 ) .e. ( angulo < 90 ) então
 escreva “Ângulo está no primeiro quadrante”;
 senão
 se ( angulo > 90 ) .e. ( angulo < 180 ) então
 escreva “Ângulo está no segundo quadrante”;
 senão
 se ( angulo > 180 ) .e. ( angulo < 270 ) então
 escreva “Ângulo está no terceiro quadrante”;
 senão
 se ( angulo > 270 ) .e. ( angulo < 360 ) então
 escreva “Ângulo está no quarto quadrante”;
	 	 	 	 fim	se
	 	 	 fim	se
	 	 fim	se
	 fim	se
fim
O programa acima não se preocupa se o usuário digitar um valor indevido, ou seja, se não 
estiver na faixa ou estiver em um dos eixos. Esse exemplo foi feito dessa forma para que se possa 
concentrar apenas no operador lógico “e”.
Desenvolver a lógica para um programa que leia o código relativo ao sexo (masculino=1 ou 
feminino=2). Se for digitado um código correto, informar que o código é válido, caso contrário 
informar que o código é inválido:
1. ler um código numérico para a variável código;
2. se o código digitado for igual a 1 ou igual a 2, apresentar uma mensagem informando 
que o código é válido; caso contrário, informar que o código é inválido.
33
EStRutuRAS DE DECISãO • CAPÍTULO 2
início
 inteiro: código;
 escreva “ Digite um código:”;
 leia código;
 se ( codigo = 1 ) .ou. ( código = 2 ) então
 escreva “O código do sexo é válido”;
 senão
 escreva “O código do sexo é inválido”;
	 fim	se
fim
O exemplo mostra, por meio da utilização do operador .ou., que somente será apresentada a 
mensagem “O código do sexo é válido” caso o valor fornecido para a variável código seja 1 ou 2. 
Qualquer outro valor fornecido apresentará a mensagem: “O código do sexo é inválido”.
Sintetizando
Vimos até agora:
 » que os algoritmos podem ser utilizados em problemas que necessitem de testes para serem solucionados;
 » os operadores relacionais e lógicos utilizados;
 » os comandos que compõem as estruturas simples e compostas de decisão.
34
Introdução ao Capítulo 
Existem ocasiões em que é necessário efetuar determinado número de vezes a repetição de um 
trecho de programa. Nesse caso, poderá ser criado um looping para que efetue o processamento 
de determinado trecho tantas vezes quantas forem necessárias. Os loopings também são 
chamados de laços de repetição.
Supondo que um programa deve executar um determinado trecho de instruções por cinco 
vezes, com o conhecimento adquirido até este momento, você iria escrever o mesmo trecho, 
repetindo-o o número de vezes necessárias. 
Para esses casos, existem comandos apropriados para efetuar a repetição de determinados trechos 
de programas. A principal vantagem desse recurso é que o programa passa a ter um tamanho 
menor, podendo sua amplitude de processamento ser aumentada sem alterar o tamanho do código 
de programação. Dessa forma, pode-se determinar repetições com números variados de vezes.
Objetivos do Capítulo 
 » Capacitar o aluno a identificar as ações que devem ser executadas de forma repetitiva 
na solução de problemas.
 » Capacitar o aluno a determinar as condições de controle da repetição.
 » Apresentar os recursos de programação “enquanto” e “para”.
3CAPÍTULOEStRutuRAS DE REPEtIçãO
35
EStRutuRAS DE REPEtIçãO • CAPÍTULO 3
tópico 
Uma das principais características que consolidaram o sucesso na utilização dos 
computadores para a resolução de problemas foi a sua capacidade de repetir 
o processamento de um conjunto de operações para grandes quantidades de 
dados. Exemplos de conjuntos de tarefas que repetimos diversas vezes dentro 
de uma situação específica podem ser observados largamente no nosso dia a 
dia. (CECHINEL; FERRARI, 2018)
Em uma estrutura de repetição, uma sequência de instruções é executada diversas vezes, 
interrompendo essa repetição quando uma condição é satisfeita, ou seja, esse conjunto de 
instruções é repetido sem a necessidade de reescrevê-las várias vezes. Algumas publicações 
tratam as estruturas de repetição como “laços ou loops”.
É possível definir quando é necessário o uso de uma estrutura de repetição analisando o problema 
e verificando se uma instrução ou uma sequência de instruções deve ser executada várias vezes. 
Sendo isso confirmado, deve-se, então, providenciar a criação de uma estrutura de repetição. 
As estruturas de repetição envolvem a avaliação de uma condição para ser interrompida; logo, 
ela possui instruções semelhantes às estruturas de decisão para sua correta execução.
Cuidado
Cuidado para não confundir essa nova estrutura com a estrutura de decisão usada anteriormente. Nesse caso, o 
processamento retorna à condição após a execução do conjunto de instruções enquanto a condição não for satisfeita.
Figura 15 – Fluxograma da instrução enquanto...faça...fim_enquanto.
Fonte: Escola Alcides Maya (2018).
36
CAPÍTULO 3 • EStRutuRAS DE REPEtIçãO
As estruturas de repetição podem ser apresentadas de três maneiras diferentes:enquanto-faça, 
faça-enquanto e para-faça. A principal diferença entre elas é: “enquanto-faça” executa primeiro o 
teste da condição para depois realizar o bloco de comando; ao contrário, “faça-enquanto” executa 
o bloco uma vez antes de testar a condição; já a estrutura “para-faça” possui um conjunto de 
instruções que simulam as duas anteriores para definir quando toda a estrutura deve ser finalizada. 
Cada uma tem suas próprias características, mas podem ser utilizadas para resolver um mesmo 
problema. Dessa forma, o programador deverá avaliar qual a melhor opção a ser utilizada.
teste no Início: enquanto-faça
Abaixo tem-se uma representação do formato geral da estrutura de repetição “enquanto-faça”. 
Observe que, antes de entrar na estrutura de repetição, uma expressão lógica é analisada e, sendo 
o resultado verdadeiro, as instruções dentro da estrutura serão executadas. A seguir, a mesma 
expressão lógica é avaliada; assim que o resultado da expressão se torna falso, o processamento 
sai da estrutura de repetição e continua a partir da linha abaixo dessa estrutura.
Estrutura de repetição enquanto-faça.
enquanto <expressão lógica> faça
 <sequência de comandos>
fim-enquanto
A alteração do resultado da expressão lógica depende, geralmente, de uma instrução dentro do 
bloco de comandos ou de uma variável externa fornecida pelo usuário, ou sistema, durante a 
execução.
A escolha dessa estrutura recai, na maioria das vezes, quando não se sabe com antecedência a 
quantidade de repetições a serem realizadas. 
Por exemplo, suponha que, em um algoritmo, é oferecido ao usuário 3 opções 
de menu sendo que uma dessas opções é a de sair do programa. Caso se deseje 
que o usuário possa executar várias vezes as opções dispostas no menu, não se 
tem como determinar quando o usuário irá optar por sair do algoritmo; sendo 
assim, não se pode limitar a repetição a um determinado número de vezes. 
Considere um problema mais específico onde é necessário realizar a leitura de 
vários nomes de pessoas e a cada nome que lido deve-se escrever na tela a frase 
“O nome digitado foi nome”, onde nome é a variável. A princípio isso deve ser feito 
diversas vezes e quando o usuário digitar um nome igual a “fim” o algoritmo deve 
parar. Da mesma maneira que no exemplo anterior não se pode definir quando 
o usuário irá digitar “fim”, não se tem como definir a quantidade de vezes que o 
algoritmo deverá repetir esse conjunto de ações (CECHINEL; FERRARI, 2018).
37
EStRutuRAS DE REPEtIçãO • CAPÍTULO 3
Atenção
1. A repetição (o laço) se encerra quando a condição (teste) é falsa.
2. As instruções a serem repetidas podem nunca ser executadas, porque o teste é no início da repetição.
Elabore um algoritmo que leia um determinado valor do teclado e armazene-o na variável 
A; o algoritmo deverá multiplicar esse valor por 10, armazenando o resultado na variável B, 
apresentando, a seguir, o resultado; isso deverá ser repetido quatro vezes.
Sequência do algoritmo:
1. criar as variáveis necessárias: uma para controlar as repetições (contador, inicializado 
com o valor 1) e as demais – enquanto o valor desse contador for menor ou igual a 4, os 
passos identificados de 2 a 5 serão executados;
2. ler o valor digitado pelo usuário, armazenando-o em A;
3. realizar a multiplicação desejada e armazenar o resultado em B;
4. apresentar, no monitor, o valor do cálculo obtido e armazenado na variável B;
5. somar 1 na variável definida como contador;
6. quando o valor do contador for maior que 4, encerrar o processamento.
Início
 inteiro: A, B, CONTADOR;
	 CONTADOR	←	1;
 enquanto ( CONTADOR <= 4 ) faça
 leia A;
	 	 B	←	A	*	10;
 escreva B;
	 	 CONTADOR	←	CONTADOR	+	1;
	 fim	enquanto
fim
Observe que foi necessário criar uma terceira variável (CONTADOR) para controlar o número de 
repetições do processo que deverá ser executado. Essa variável foi iniciada com o valor 1, sendo 
gradativamente incrementada durante o processamento. Observe que a instrução “enquanto”, 
seguida da condição, controla a repetição e, quando a variável CONTADOR atingir o valor de 
interrupção (valor = 5), a estrutura será finalizada.
Depois de efetuar a primeira leitura, a instrução “CONTADOR ← CONTADOR + 1” incrementa 
a variável de controle, reinicializando o conteúdo.
38
CAPÍTULO 3 • EStRutuRAS DE REPEtIçãO
Quando a variável CONTADOR passa a ser 5, resultando, para a instrução “enquanto”, uma 
condição “falsa”, o processamento será redirecionado para a primeira instrução após a instrução 
“fim_enquanto”, ou seja, para a instrução “fim”, encerrando o programa.
Imagine de outra forma: o exemplo deverá ser executado enquanto o usuário desejar, ou seja, o 
contador de vezes não existe e, em seu lugar, uma instrução solicitando ao usuário que informe 
se deseja continuar ou não.
Sequência do algoritmo:
1. criar uma variável para ser utilizada como resposta se deseja ou não continuar – enquanto 
a reposta for sim, serão executados os passos de 2 a 4;
2. ler um valor para a variável A;
3. efetuar a multiplicação do valor de A por 10, armazenando o resultado na variável B;
4. apresentar o valor calculado armazenado em B;
5. quando a resposta for diferente de “sim”, interrompe-se o processamento da repetição.
início
 inteiro: A, B;
 caractere: resp;
 resp ← ‘S’;
 enquanto ( resp = ‘S’ ) faça
 leia A;
 B ← A * 10;
 escreva B;
 escreva “Deseja continuar ?”;
 leia resp;
	 fim	enquanto
fim
Veja que o contador foi substituído pela variável resp, que, enquanto for igual a ‘S’, executará a 
rotina existente entre as instruções enquanto e fim_enquanto.
Observe que o número de vezes que o processo se repetirá é agora controlado pelo usuário, 
encerrando-se quando alguma informação diferente de ‘S’ for fornecida para a variável “resp”.
teste no Fim: faça-enquanto
Essa instrução tem como característica principal o teste que controla as repetições no final da 
estrutura.
39
EStRutuRAS DE REPEtIçãO • CAPÍTULO 3
Essa estrutura também é conhecida por “repita”, e, para o processamento, sua estrutura básica 
utiliza as seguintes instruções: “repita...até_que”.
A estrutura “repita...até_que” sempre irá processar um conjunto de instruções pelo menos uma 
vez até que a condição se torne verdadeira. Para a estrutura “repita”, o conjunto de instruções é 
executado enquanto a condição de controle se mantiver “Falsa” e até que ela se torne “Verdadeira”.
Veja, a seguir, como se apresenta a estrutura básica dessa instrução.
Estrutura de repetição faça-enquanto.
faça
 <sequência de comandos>
enquanto <expressão lógica>
Atenção
1. A repetição (o laço) se encerra quando a condição (teste) for verdadeira.
2. As instruções a serem repetidas são executadas pelo menos uma vez, porque o teste é no final da repetição.
Retornando ao exemplo inicial de estruturas de repetição, elabore um algoritmo que faça a leitura 
de um valor que será armazenado na variável A, multiplicando esse valor por 10, armazenando 
a resposta na variável B, devendo, a seguir, apresentar o resultado; essa sequência deve ser 
repetida por quatro vezes. É o mesmo exemplo utilizado na estrutura “enquanto”, para que se 
possa fazer uma comparação entre elas.
Sequência do algoritmo:
1. criar as variáveis necessárias, incluindo um controlador da repetição com valor inicial 1;
2. ler um valor digitado pelo usuário, armazenando-o na variável A;
3. realizar a multiplicação do valor de A por 10, armazenando o resultado em B;
4. apresentar o valor calculado contido na variável B;
5. realizar o incremento da variável controladora;
6. repetir os passos 2 a 5 até que a variável controladora seja maior que 4.
início
 inteiro: A, B;
 inteiro: CONTADOR;
 CONTADOR ← 1;
 repita
 leia A;
 B ← A * 10;
40
CAPÍTULO 3 • EStRutuRAS DE REPEtIçãO
 escreva B;
 CONTADOR ← CONTADOR + 1;
até que ( CONTADOR > 4 )
fim
Logo no início do processo, ao CONTADOR é atribuído o valor 1. A seguir, a instrução “repita” 
faz com que a sequência de instruções seguintes, até a instrução “até_que”, seja repetidaaté 
satisfazer a a condição CONTADOR > 4.
Logo a seguir, é apresentado o mesmo exemplo sem o uso da variável de controle. Observe que, 
neste caso, o responsável pelo encerramento do processo será o usuário.
início
 inteiro: A, B;
 caractere: resp;
 repita
 leia A;
 B ← A * 10;
 escreva B;
 escreva “Deseja continuar ?”;
 leia resp;
 até que ( resp < > ‘S’ )
fim
Observe que a variável “resp” não precisou ser inicializada com qualquer valor, pois não influencia 
diretamente na estrutura repita, considerando que será executada pelo menos uma vez, verificando 
apenas no final se a condição resp <> ‘S’ é aceita.
Repetição com Controle: faça-para
Anteriormente, foram vistas duas formas de elaborar looping: uma usando o conceito “enquanto” 
e outra usando o conceito “repita”. Foi visto também como elaborar rotinas que efetuam a 
execução de um looping determinado número de vezes, com a utilização de um contador (por 
meio de uma variável de controle).
Porém, existe uma possibilidade que facilita o uso de contadores finitos sem utilizar as duas 
estruturas anteriores, deixando-as para quando não se conhece antecipadamente o número 
de vezes que determinada sequência de instruções deverá ser executada. Os loopings que 
possuem um número finito de execuções poderão ser processados por meio de uma estrutura 
conhecida como para, tendo como formato básico um conjunto de instruções “para...de...até...
passo...faça...fim_para”.
41
EStRutuRAS DE REPEtIçãO • CAPÍTULO 3
A estrutura “para...de...até...passo...faça...fim_para” tem a sua lógica controlada por uma variável 
conhecida como contador, por isso a necessidade de se conhecer o número de repetições, ou o 
limite a ser atingido, da situação em estudo.
Abaixo é apresentada a estrutura básica da lógica da função “para”.
Estrutura de repetição para-faça.
para <nome da variável> de <valor inicial> até <valor final> passo <incremento> faça
 <sequência de comandos>
fim-para
Considere a seguinte situação: escreva um algoritmo para escrever cinco vezes a palavra BOA 
TARDE na tela.
Resposta Estrutura de repetição FAÇA.
início
 para x de 1 até 5 faça
 escrever (“BOA TARDE”)
	 fim-para
fim
Na resposta acima, o X é a variável de controle (que, nesse caso, funciona como o contador), ou 
seja, uma variável qualquer (com qualquer nome) que vai determinar o número de repetições do 
processo. O valor 1 é o valor inicial que será atribuído à variável X, e o valor 5 é o valor final, ou 
limite, atribuído à variável X; com isso, tem-se cinco repetições da instrução (ou das instruções) 
que estiver dentro do laço.
Cada vez que a variável é incrementada (aumenta uma unidade), as instruções de dentro da 
repetição são executadas; então, a variável, X no exemplo, inicia com o valor 1 e a cada execução 
(repetição) aumenta +1 (é incrementada), até chegar ao valor final, que também é determinado 
(no caso é o 5).
Para refletir
Você saberia dizer qual é a grande diferença entre a estrutura de repetição Para e as estruturas Repita e Enquanto?
Ainda utilizando o exemplo das outras estruturas de repetição, pode-se observar o funcionamento 
dessa nova função. Acompanhe a resolução abaixo.
Sequência do algoritmo:
1. definir um contador, cujos limites inicial e final são, respectivamente, 1 e 5 (cinco 
repetições);
42
CAPÍTULO 3 • EStRutuRAS DE REPEtIçãO
2. ler um valor digitado pelo usuário que será armazenado em A;
3. efetuar os cálculos definidos, armazenando o resultado em B;
4. apresentar o valor obtido, que está armazenado em B;
5. repetir a sequência de 2 a 4 enquanto o controlador se mantiver no intervalo definido.
início
 inteiro: A, B;
 inteiro: CONTADOR;
 para CONTADOR de 1 até 5 passo 1 faça
 leia A; 
 B ← A * 10;
 escreva A;
	 fim	para
fim
Repare agora uma estrutura que apresenta os valores de 1 até 10. Essa estrutura serve para 
verificar as alterações no conteúdo de uma variável utilizada como controle da repetição, pois 
ela apresenta exatamente o conteúdo dessa variável.
Sequência do algoritmo:
1. definir um contador, variando de 1 a 10;
2. apresentar o valor armazenado na variável de controle;
3. repetir o passo 2 até que o contador atinja o limite estipulado.
início
 inteiro: cont;
 para cont de 1 até 10 passo 1 faça
 escreva cont;
	 fim	para
fim
Agora, invertendo o raciocínio do exemplo acima, elabore um algoritmo que escreva na tela os 
números de 10 até 1.
Vamos utilizar a estrutura para...de...até...passo...faça...fim_para, mas com o passo decrementando 
o valor da variável contadora.
Sequência do algoritmo:
1. definir um contador, variando de 10 a 1;
2. apresentar o valor armazenado na variável de controle;
43
EStRutuRAS DE REPEtIçãO • CAPÍTULO 3
3. repetir o passo 2 até que o contador atinja o limite esperado.
início
 inteiro: cont;
 para cont de 10 até 1 passo -1 faça
 escreva cont;
	 fim	para
fim
Escreva um algoritmo para ler dois valores. Após a leitura, deve-se calcular a soma dos valores 
lidos e armazená-la em uma variável. Após o cálculo da soma, escrever o resultado e escrever 
também a pergunta “Deseja realizar novo cálculo (S/N)?”. Deve-se ler a resposta e, se a resposta 
for ‘S’ (sim), os comandos serão repetidos (instruções), mas, se a resposta for ‘N’ (não), o 
algoritmo deve ser finalizado escrevendo a mensagem ‘Fim dos Cálculos’.
Resposta Estrutura repita até. 
início
 repita
 ler A, B
 soma ← A + B
 escrever soma
 escrever “Deseja realizar novo cálculo (S/N)?”
 ler resp
 ate resp = “N”
 escrever “Fim dos Calculos”
fim
Determinação do Maior e Menor valor
Em diversas ocasiões, surgem problemas em que é necessário determinar qual o maior ou o 
menor valor em um conjunto de valores.
Escreva um algoritmo para ler a nota de 10 alunos e escrever o valor da nota mais alta e a mais 
baixa.
Exemplo resolvido.
44
CAPÍTULO 3 • EStRutuRAS DE REPEtIçãO
início
 maior ← 0
 menor ← 10
 para i de 1 até 10 faça
 ler nota
 se nota > maior então
 maior ← nota
	 	 fim	se
 se menor < nota então
 menor ← nota
	 	 fim	se
	 fim	para
 escrever maior
 escrever menor
fim
Atenção
Quando se tem conhecimento dos limites dos valores possíveis, por exemplo, os valores das notas serão sempre de 0 a 10, 
então se sabe quais são os valores limites (o valor mínimo e o valor máximo), ou seja, não ocorrerá nenhuma nota menor que 
0 ou maior que 10. Nesses casos, é mais fácil descobrir o maior ou o menor valor, pois é possível inicializar a variável Maior, 
por exemplo, com o valor 0 e a variável Menor com o valor 10 que funcionará perfeitamente. Porém, se os valores dos limites 
não são conhecidos, a situação se complica um pouco, pois não se saberá com que valor deve-se inicializar as variáveis para 
comparação. Nesse caso, aconselha-se inicializar tanto a variável Maior quanto a Menor com o “primeiro valor lido” e depois 
comparar os próximos valores lidos com o primeiro (os nomes “Maior” e “Menor” são apenas exemplos, pode-se denominar 
as variáveis que serão usadas para os testes como quiser) (CARVALHO, 2007). 
Contadores e Acumuladores
Em algoritmos com estruturas de repetição (Repita, Enquanto ou Para), é comum surgir a 
necessidade de se realizar contagens de ocorrências, somas ou produtos consecutivos de 
valores em um conjunto de dados. Nessa situação, faz-se uso de variáveis específicas para o 
armazenamento dos resultados. As variáveis utilizadas para a contagem de ocorrências são 
conhecidas como contadores, e as variáveis utilizadas para armazenar os resultados de somas 
ou produtos sequenciais são conhecidas como acumuladores.
Contadores
Um contador é utilizado para contar o número de vezes que um evento (uma instrução) ocorre, 
ou seja, contar a quantidade de vezes que uma instrução, ou conjunto de instruções, é executada.
45
EStRutuRAS DE REPEtIçãO • CAPÍTULO 3
Forma Geral: VARIÁVEL ← VARIÁVEL + CONSTANTE
Exemplo: X ← X + 1
Explicação: um contador é uma variável (qualquer) que recebe ela mesma mais um valor (uma 
constante). No caso do exemplo acima, a variável X está recebendoo valor dela mesma mais 1. 
Normalmente a constante que será somada no contador é o valor 1, para contar de 1 em 1, mas 
pode ser qualquer valor, como, por exemplo, 2, se quisermos contar de 2 em 2.
Observações dos Contadores:
1. A variável (do contador) deve possuir um valor inicial conhecido, isto é, ela deve ser 
inicializada. Normalmente inicializa-se a variável do contador com zero, ou seja, zera-
se a variável antes de utilizá-la. Para zerar uma variável, basta atribuir a ela o valor zero: 
VARIÁVEL ← 0.
2. A constante (que é geralmente o valor 1) determina o valor do incremento da variável 
(do contador), ou seja, o que será somado (acrescido) a ela.
Exemplo: escreva um algoritmo para ler a nota de 10 alunos e contar quantos foram aprovados, 
sendo que, para ser aprovado, a nota deve ser maior ou igual a 6,0. Escrever o número de 
aprovados.
Exemplo resolvido.
início
 contador ← 0
 para i de 1 até 10 faça
 ler nota
 se nota >= 6 então
 contador ← contador + 1
	 	 fim	se
	 fim	para
 escrever contador
fim
Para refletir
Se, no exemplo acima, fosse solicitado para contar também o número de reprovados, o que deveria ser feito?
Acumuladores ou Somadores
Os acumuladores são semelhantes aos contadores em sua filosofia: a um valor já existente na 
variável (o acumulador), acrescentar ou multiplicar outro valor armazenado em outra variável. 
46
CAPÍTULO 3 • EStRutuRAS DE REPEtIçãO
Para acrescentar valores ao acumulador, ele dever ser inicializado com o valor 0 e incrementado 
no valor de outro termo qualquer, dependendo do problema em questão.
Forma Geral: VARIÁVEL1 ← VARIÁVEL1 + VARIÁVEL2
Exemplo: X ← X + Y
Explicação: um acumulador (somador) é uma variável (qualquer) que recebe outra variável. No 
caso do exemplo acima, a variável X está recebendo o valor dela mesma mais o valor da variável 
Y. A variável Y representa o valor a ser somado, acumulado (incrementado) na variável X.
Observações dos Acumuladores:
1. A variável1 (do acumulador) deve possuir um valor inicial conhecido, isto é, ela deve 
ser inicializada. Normalmente, inicializa-se a variável do acumulador com zero, ou seja, 
zera-se a variável antes de utilizá-la. Para zerar uma variável, basta atribuir a ela o valor 
zero: VARIÁVEL1 ← 0
2. A variável2 indica o valor a ser acumulado, somado e armazenado na variável1.
3. Ao serem utilizados os acumuladores para armazenar produtos sucessivos, deve-se 
utilizar um valor neutro da multiplicação (o número 1) para inicializar a variável que 
servirá como acumulador.
Exemplo: veja a solução abaixo, em que o exemplo acima foi alterado para calcular também a 
média geral da turma e, ao final, apresentar o total de aprovados e a média.
Exemplo de acumuladores.
início
 contador ← 0
 soma ← 0
 para i de 1 até 10 faça
 ler nota
 se nota >= 6 então
 contador ← contador + 1
	 	 fim	se
 soma ← soma + nota
	 fim	para
 media ← soma/10
 escrever contador, media
fim
47
EStRutuRAS DE REPEtIçãO • CAPÍTULO 3
Atenção
Normalmente, inicializam-se as variáveis que serão utilizadas como contador ou como acumulador com o valor zero, mas 
elas podem ser inicializadas com o valor que se desejar, de acordo com a necessidade. 
Sintetizando
Vimos até agora:
 » como identificar as ações a serem executadas de modo repetitivo;
 » como determinar as condições de uso dos controles de repetição;
 » como utilizar as diversas formas de estruturas de repetição.
48
Introdução ao Capítulo 
Do mesmo modo que é possível se ter uma Seleção dentro de outra, também se pode ter 
uma Repetição dentro de outra, dependendo do problema a ser resolvido. Além disso, pode 
ser necessária uma estrutura de, por exemplo, Repita dentro de um Enquanto ou vice-versa, 
ou um Repita dentro de outro Repita, enfim, as combinações são inúmeras. A seguir, serão 
apresentados exemplos de estruturas de repetição “Para dentro de outro Para”, que é bastante 
utilizada para leitura e escrita de Vetores e Matrizes, por exemplo.
Objetivos do Capítulo 
 » Desenvolver a capacidade de criar algoritmos com estruturas de dados aninhadas.
4CAPÍTULOEStRutuRAS DE DADOS
49
EStRutuRAS DE DADOS • CAPÍTULO 4
Estruturas de Dados Homogêneas
Ao serem apresentadas as estruturas dos desvios condicionais e as estruturas de repetição, 
observou-se que as possibilidades de programação são mais extensas do que se imaginava. 
Entretanto, mesmo com o uso das novas técnicas, ainda não é possível resolver alguns tipos de 
problemas, pois as variáveis apresentadas são simples e armazenam apenas um único valor por 
vez.
Neste tópico, serão apresentadas técnicas de programação que permitirão trabalhar com um 
conjunto de informações dentro de uma mesma, e única, variável.
Essas estruturas de dados também são conhecidas como: variáveis indexadas, variáveis 
compostas, arranjos, vetores, matrizes – podem, porém, ser chamadas apenas de matrizes.
Matrizes de uma dimensão ou vetores
Vetores são varíaveis compostas que podem armazenar um conjunto de valores. 
Todos estes valores são referenciados através do nome do vetor (o mesmo para 
todo o conjunto de valores) e de um índice (distinto para cada valor) e constituído 
por uma constante inteira positiva. As variáveis vetoriais são semelhantes aos 
vetores usados na matemática e na física, em que um vetor, por exemplo é 
constituído por três valores x1, x2 e x3; neste caso o nome do vetor é x e os índices 
são 1, 2 e 3. Ao contrário de um escalar que possui só um valor, x, neste exemplo, 
é uma variável composta por 3 valores. As variáveis vetoriais, nos problemas reais, 
são constituídas por um grande número de valores (CECHINEL; FERRARI, 2018).
Como, em um vetor, os valores armazenados devem ser todos do mesmo tipo, os vetores são, 
então, chamados de variáveis compostas homogêneas.
Exemplificando o uso de matrizes, observe a seguinte situação: “Em uma determinada instituição 
de ensino, um professor realiza seis avaliações durante o período letivo. Deseja-se fazer um 
programa que leia as seis notas dos alunos e, ao final, calcule e apresente a média do aluno”.
Dessa forma, será necessário somar as seis notas de cada aluno e calcular a média. A tabela 
abaixo apresenta os dados (notas) de um aluno e a coluna (célula) da média do aluno que 
deverá ser calculada (ESCOLA ALCIDES MAYA, 2018).
Figura 16 – Quadro de valores para exemplo.
Fonte: Escola Alcides Maya (2018).
50
CAPÍTULO 4 • EStRutuRAS DE DADOS
Observe que, utilizando as estruturas anteriormente apresentadas, seria necessário ler cada 
uma das notas, de cada um dos alunos, para somá-las, conforme a sequência descrita a seguir. 
Isso acarretaria uma quantidade imensa de variáveis para armazenar os dados necessários.
Sendo assim, é necessário:
1. ler as notas do aluno para as variáveis nota1, nota2, nota3, nota4, nota5, nota6;
2. efetuar a soma das notas e a divisão delas por 6, atribuindo o seu resultado para a 
variável media;
3. apresentar o valor da variável média após a operação de soma e divisão dos valores 
fornecidos.
Utilizando-se matrizes unidimensionais (vetores), é possível criar uma única variável para 
armazenar todos os seis valores necessários.
Uma matriz de uma dimensão ou vetor será representada por seu nome e seu tamanho 
(dimensão) entre colchetes. Dessa forma, seria um vetor “nota[6]”, sendo seu nome nota, 
possuindo um tamanho de 6 (ESCOLA ALCIDES MAYA, 2018).
Isso significa que poderão ser armazenados na mesma variável “nota” (agora classificada como 
um vetor) até seis elementos.
No caso das matrizes, é possível armazenar mais de um 
valor por vez, pois são dimensionadas exatamente para 
esse fim. Dessa forma, será possível manipular uma 
quantidade maior de informação com pouco trabalho 
de processamento. Deve-se apenas considerar que, 
com relação à manipulação dos elementos de uma 
matriz, eles ocorrerão de forma individualizada, pois não é possível efetuar a manipulação de 
todos os elementos do conjunto ao mesmo tempo (ESCOLA ALCIDES MAYA, 2018).
No caso do exemplo do cálculoda média do aluno, ter-se-ia então uma única variável indexada 
(a matriz) contendo todos os valores das notas. Isso seria representado da seguinte forma:
 » nota[0] = 4.0
 » nota[1] = 5.0
 » nota[2] = 5.0
 » nota[3] = 3.0
 » nota[4] = 7.5
 » nota[5] = 4.0
Atenção
Perceba que, na utilização de variáveis simples, 
existe uma regra: uma variável somente pode 
conter um valor por vez. 
51
EStRutuRAS DE DADOS • CAPÍTULO 4
Atenção
Fique atento para o nome da variável, que é o mesmo. O que altera é a informação indicada dentro dos colchetes, o índice, 
que corresponde ao endereço em que o elemento (ou dado) está armazenado.
É necessário que fique bem claro que o elemento é o conteúdo da matriz, ou seja, os valores 
das notas. Tendo como exemplo a nota[0] = 4.0, o número 0 entre os colchetes é o índice, o 
endereço no qual o elemento (valor da nota) 4.0 está armazenado.
Nas estruturas anteriores (sequencial ou de repetição), são necessárias várias instruções para 
poder definir e montar o programa. Com a utilização de matrizes (vetores), será definida uma 
única instrução em português estruturado, que tem a seguinte estrutura geral: <tipo de dado> 
conjunto[<dimensão>], em que <dimensão> corresponde à indicação do tamanho do vetor e 
<tipo de dado> informa o tipo de valor armazenado.
A leitura de uma matriz é processada passo a passo, um elemento por vez. A instrução de leitura 
é a mesma já utilizada, seguida da variável mais o índice.
Abaixo é apresentado um algoritmo em português estruturado (pseudocódigo) correspondente 
à situação já descrita anteriormente.
início
 real: nota[6];
 real: soma, media;
 inteiro: índice;
 soma ← 0;
 para índice de 0 até 5 passo 1 faça
 leia nota[índice];
 soma ← soma + nota[índice];
	 fim	para
 media ← soma / 6;
 escreva media;
fim
Se observar bem, o programa ficou reduzido e, se for necessário alterar o número de alunos da 
turma em questão, basta redimensionar a matriz, alterando o índice, o valor final da instrução 
“para” e o divisor no cálculo da média.
Atenção
Observe que a leitura é processada uma por vez. Dessa forma, a matriz é controlada pelo valor do índice, que faz com que 
cada entrada aconteça em uma posição diferente da outra. Assim sendo, a matriz passa a ter todas as notas. 
52
CAPÍTULO 4 • EStRutuRAS DE DADOS
Implementando o exemplo acima, de modo a apresentar todas as notas antes da apresentação 
do valor da média, tem-se a estrutura abaixo:
início
 real: nota[6];
 real: soma, media;
 inteiro: índice;
 soma ← 0;
 para índice de 0 até 5 passo 1 faça
 leia nota[índice];
 soma ← soma + nota[índice];
	 fim	para
 media ← soma / 6;
 para índice de 0 até 5 passo 1 faça
 escreva nota[índice];
	 fim_para
 escreva media;
fim
Elabore um programa que realize a leitura de dez 
elementos de uma matriz A do tipo vetor, apresentando, 
ao final, o total da soma de todos os elementos que 
sejam ímpares.
1. Iniciar o contador de índice – variável índice 
como 0 em um contador até 9.
2. Ler os 10 valores, um a um.
3. Verificar se o elemento é ímpar (função “mod”); se sim efetuar a soma dos elementos.
4. Apresentar o total somado de todos os elementos ímpares da matriz.
início
 inteiro: matriz[10];
 inteiro: indice, resp, soma;
 soma ← 0;
 para indice de 0 até 9 passo 1 faça
 leia matrizA[índice];
	 fim_para
 para indice de 0 até 9 passo 1 faça
 resp ← matrizA[indice] mod 2;
 se ( resp = 1 ) então
 soma ← soma + matrizA[indice] ;
	 	 fim_se
	 fim_para
 escreva soma;
fim
Atenção
É importante notar que uma variável de N 
posições possui índices de 0 a N-1. Na variável 
de 6 posições, usam-se os índices 0 a 5; 
qualquer índice fora dessa faixa resulta em erro. 
53
EStRutuRAS DE DADOS • CAPÍTULO 4
Atenção
Observe que, ao se mencionar o índice, indica-se a variável que controla o contador de índice, que, no caso do exemplo 
acima, é a variável índice. Quando se faz menção ao elemento, indica-se matrizA[índice], pois, dessa forma, está se obtendo 
o valor armazenado, e não a sua posição de endereço.
Matrizes com mais de uma dimensão
Matrizes são estruturas indexadas utilizadas para representar certa quantidade de valores de 
um mesmo tipo.
Observa-se que, basicamente, é o mesmo conceito de vetor.
Na verdade, vetor é um tipo especial de matriz. Um vetor é uma matriz unidimensional. 
Portanto, enquanto o vetor tem apenas uma dimensão, a matriz pode ter tantas dimensões 
quantas forem necessárias.
Atenção
A única diferença entre a declaração de matrizes de duas dimensões e a declaração de vetores é que, ao declarar vetores, 
informamos apenas uma dimensão (o seu tamanho), enquanto em matrizes bidimensionais informamos duas dimensões. 
Atenção
Vale ressaltar que a linguagem C permite a criação de matrizes de quantas dimensões o programador quiser, bastando 
acrescentar as dimensões entre colchetes [ ].
Agora, já é possível elaborar um programa que leia as notas dos alunos, calcule a média de cada 
aluno e, ao final, apresente a média de toda a turma, com o uso de matrizes bidimensionais.
Mas, deve-se ter muito cuidado, pois é necessário manter um controle preciso de cada índice, 
em cada matriz, para um mesmo aluno.
Saiba mais
Matrizes com mais de duas dimensões são utilizadas com menos frequência, mas poderão ocorrer em momentos em que 
se necessite trabalhar com um número maior de dimensões – estas são fáceis de utilizar se estivermos dominando bem a 
utilização de uma matriz com duas dimensões.
aipulação de uma matriz unidimensional é utilizada uma única instrução de looping. No caso de matrizes com mais dimensões, deverão ser utilizadas o número de loopings relativo ao tamanho de sua dimensão. Desta forma, uma matriz de duas dimensões deverá ser controlada com dois loopings de três dimensões deverá ser controlada por três loopings e assim por diante. (ESCOLA ALCIDES MAYA, 2018)
54
CAPÍTULO 4 • EStRutuRAS DE DADOS
Quando se trata de matrizes com mais de uma dimensão, observe que seus elementos devem 
ser tratados também de forma individualizada, fazendo sempre referência por meio dos dois 
índices: o primeiro indicando a linha, e o segundo referindo-se à coluna.
Já foi mencionada a possibilidade de existir uma seleção dentro de outra. Do mesmo modo, 
também é possível trabalhar com uma repetição dentro de outra, dependendo do problema 
apresentado. É possível, ainda, trabalhar com uma estrutura de repetição “para” dentro de outro 
“para”. Por isso, é sempre mais prático trabalhar com matrizes.
Funcionamento de “um PARA dentro de outro PARA”
1. A execução inicia pelo Para de fora (mais externo), depois desvia para o Para de dentro e 
só volta para o Para de fora quando terminar toda execução do Para de dentro (quando 
a variável de controle chegar no valor final).
2. Um Para fica “parado” enquanto o outro Para é executado, ou seja, enquanto sua variável 
de controle varia até chegar no valor final determinado para ela (CARVALHO, 2007).
Implementando o exemplo anterior, agora há um número maior de alunos; cada aluno realiza 
quatro avaliações durante o período letivo; e na turma há oito alunos.
Figura 17 – Quadro de valores para exemplo.
Fonte: Escola Alcides Maya (2018).
Uma matriz de duas dimensões é sempre referenciada por suas linhas e colunas e tem sua 
representação realizada com seu nome seguido de seu tamanho entre colchetes.
A matriz acima apresentada possui 8 (oito) linhas e 4 (quatro) colunas referentes, respectivamente, 
aos alunos e suas notas em cada uma das provas do exemplo. Logo, ela será representada por 
“nota[8][4]”, em que o 8 corresponde ao número de linhas, e o 4, ao número de colunas da 
matriz em questão (conforme o parágrafo acima).
55
EStRutuRAS DE DADOS • CAPÍTULO 4
As notas do primeiro aluno são representadas em suas posições do seguinte modo:
nota[0] [0] = 4.0
nota[0] [1] = 6.0
nota[0] [2] = 5.0
nota[0] [3] = 3.0
A primeira linha de uma matriz de duas dimensões terá sempre o índice 0 (zero), e as demais 
seguem a sequência de contagem, ou seja, para uma matriz

Outros materiais

Outros materiais