Você está na página 1de 104

Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

UNIVERSIDADE REGIONAL DE BLUMENAU

CENTRO DE CIÊNCIAS EXATAS E NATURAIS

DEPARTAMENTO DE SISTEMAS E COMPUTAÇÃO

INTRODUÇÃO A PROGRAMAÇÃO

(material de apoio)

PROFESSOR: Maurício Capobianco Lopes

Blumenau, 2006

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

APRESENTAÇÃO DA DISCIPLINA

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 2


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

SUMÁRIO
1 INTRODUÇÃO.....................................................................................................................5
ESTRUTURA FUNCIONAL DO COMPUTADOR..................................................................................................6
HARDWARE ..........................................................................................................................................................6
SOFTWARE ...........................................................................................................................................................9
CONCEITOS BÁSICOS DE AMBIENTES DE PROGRAMAÇÃO........................................................................9
CLASSIFICAÇÃO DAS LINGUAGENS DE PROGRAMAÇÃO..........................................................................10
LINGUAGENS E GERAÇÕES.............................................................................................................................11
2 LÓGICA DE PROGRAMAÇÃO...............................................................................................12
ALGORITMO...................................................................................................................................................................13
Metodologia para Construção de Algoritmos......................................................................................................14
Enunciados.......................................................................................................................................................16
Exercícios Propostos.......................................................................................................................................17
Métodos de Representação de Algoritmos...........................................................................................................18
3 ESPECIFICAÇÃO DE ALGORITMOS.....................................................................................19
DADOS......................................................................................................................................................................19
Variáveis...............................................................................................................................................................19
Constantes.............................................................................................................................................................20
Tipos de Dados.....................................................................................................................................................20
EXPRESSÕES...........................................................................................................................................................21
Operadores Aritméticos........................................................................................................................................21
Operador de Caracteres.......................................................................................................................................22
Operadores Relacionais.......................................................................................................................................22
Operadores Lógicos..............................................................................................................................................22
COMANDOS.............................................................................................................................................................23
Comando de Atribuição........................................................................................................................................23
Comandos de Entrada e Saída.............................................................................................................................23
Comando de Entrada em Portugol..................................................................................................................24
Comando de Saída em Portugol......................................................................................................................24
PORTUGUÊS ESTRUTURADO OU PORTUGOL.........................................................................................................................25
EXERCÍCIOS RESOLVIDOS.................................................................................................................................................27
EXERCÍCIOS PROPOSTOS..................................................................................................................................................30
4 ESTRUTURAS DE CONTROLE EM NÍVEL DE INSTRUÇÃO – SELEÇÃO....................................35
SELEÇÃO SIMPLES..........................................................................................................................................................35
SELEÇÃO ENCADEADA.....................................................................................................................................................36
SELEÇÃO COMPOSTA.......................................................................................................................................................37
SELEÇÃO MÚLTIPLA.......................................................................................................................................................38
EXERCÍCIOS RESOLVIDOS.................................................................................................................................................39
EXERCÍCIOS PROPOSTOS..................................................................................................................................................43
5 ESTRUTURAS DE CONTROLE EM NÍVEL DE INSTRUÇÃO – REPETIÇÃO................................48
REPETIÇÃO COM CONTADOR (PARA-FAÇA).........................................................................................................................48
REPETIÇÃO CONDICIONAL................................................................................................................................................49
Enquanto-faça.......................................................................................................................................................50
Repita-até..............................................................................................................................................................51
EXERCÍCIOS RESOLVIDOS.................................................................................................................................................51
EXERCÍCIOS PROPOSTOS..................................................................................................................................................57
6 ESTRUTURA DE DADOS HOMOGÊNEAS - MATRIZES...........................................................64
MATRIZES UNIDIMENSIONAIS (VETORES)...........................................................................................................................65
Manipulação de Matrizes Unidimensionais.........................................................................................................68
Exercícios Resolvidos......................................................................................................................................69
Exercícios Propostos.......................................................................................................................................72
Algoritmos de Ordenação de Vetores...................................................................................................................76
Método da Bolha ou BubbleSort......................................................................................................................76

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 3


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

Método da Ordenação por Seleção SelectionSort...........................................................................................81


Método da Ordenação por Inserção InsertSort...............................................................................................82
Algoritmos de Busca em Vetores..........................................................................................................................84
Método da Pesquisa Seqüencial......................................................................................................................85
Método da Pesquisa Binária............................................................................................................................86
Exercícios Propostos.......................................................................................................................................87
7 MODULARIZAÇÃO.............................................................................................................89
ESCOPO DE VARIÁVEIS....................................................................................................................................................92
EXERCÍCIOS RESOLVIDOS.................................................................................................................................................92
8 ESTRUTURA DE DADOS HETEROGÊNEAS - REGISTROS.......................................................98
EXERCÍCIOS RESOLVIDOS...............................................................................................................................................100
EXERCÍCIOS PROPOSTOS................................................................................................................................................103

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 4


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

1 INTRODUÇÃO
• Os primeiros computadores utilizavam válvulas. O
surgimento do transistor, em 1948, trouxe a redução
do tamanho e da potência consumida em relação às
válvulas, além de serem mais robustos e confiáveis.
• O avanço da tecnologia permitiu a integração de vários
transistores em um dispositivo, constituindo os circuitos
em larga escala (CHIPs).
• O COMPUTADOR é uma máquina composta de
elementos físicos do tipo eletrônico, capaz de realizar
uma grande variedade de trabalhos com alta velocidade
e precisão, desde que receba as instruções adequadas
através de um programa de computador, também
denominado software.
• A utilização do computador traz vantagens mas
também alguns problemas:
- VANTAGENS: rapidez, correção, economia, qualidade do
resultado final e capacidade de armazenamento e
processamento de informações.

- PROBLEMAS: custo inicial e sua manutenção, a


depreciação e a necessidade de treinamento para
utilização do mesmo.

• O sistema computacional é formado por um conjunto de


elementos físicos (o hardware) e por um conjunto de
instruções programadas para o seu funcionamento (o
software).

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 5


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

ESTRUTURA FUNCIONAL DO COMPUTADOR

HARDWARE
• O computador é uma máquina capaz de executar ações
com objetivos específicos. Essas ações são basicamente
instruções para leitura e escrita de informações e para
a execução de operações aritméticas e lógicas.
• Embora existam computadores dos mais diferentes
tipos e tamanhos, todos consistem em cinco
componentes básicos interligados: unidade aritmética e
lógica (ULA), unidade de controle, unidade de entrada
de dados, unidade de saída de dados e memória.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 6


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

• A UNIDADE ARITMÉTICA E LÓGICA e a UNIDADE DE


CONTROLE constituem a UNIDADE CENTRAL DE
PROCESSAMENTO (CPU) ou PROCESSADOR:
- UNIDADE ARITMÉTICA E LÓGICA (ULA): executa as
instruções dos programas, como por exemplo, cálculos
que envolvem operações aritméticas ou operações
lógicas.

- UNIDADE DE CONTROLE: acompanha as instruções dos


programas acionando as unidades que devem executar
determinada instrução e controlando o fluxo de dados.

- REGISTRADORES: armazenam dados temporariamente


para serem processados pela ULA.

• Unidade de ENTRADA: são os dispositivos que


permitem a captura de dados do meio externo para o
computador.
- EXEMPLOS: teclado, mouse, scanner, caneta ótica, mesa
digitalizadora, leitora de códigos de barra, joystick,
webcam, etc.

• Unidade de SAÍDA: são os dispositivos que permitem


visualizar ou obter os dados do computador
- EXEMPLOS: vídeo, impressora, caixa de som, etc.
Alguns dispositivos servem tanto para entrada
como para saída.
EXEMPLOS: disco rígido (winchester), disco
magnético (disquete), disco ótico (CD/DVD).

• Os dispositivos de E/S também são chamados de


PERIFÉRICOS.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 7


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

• MEMÓRIA: armazena dados e programas durante o


processamento pela UCP:
- RAM (Random Acess Memory): memória principal do
computador;

- ROM (Read Only Memory): memória somente para


leitura que tem informações de configuração e
inicialização do computador.

- CACHE: memória de alta velocidade que acelera a


transferência de dados entre UCP e RAM.

- A memória é dividida em unidades pequenas e de


mesmo tamanho identificadas por um ENDEREÇO

 ENDEREÇO DE MEMÓRIA: um número representado


através da notação hexadecimal.

• O computador é chamado de DIGITAL pois é composto


de circuitos eletrônicos que só entendem o estado
ligado (1) ou desligado (0).
• Os sinais elétricos são chamados de BIT (Binary
Digital).
• A junção de diversos BITS é chamada de BYTE.
• Para representar um CARACTER (letra, símbolo ou
dígito) é necessário uma junção de BITS (múltiplos de
8).

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 8


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

SOFTWARE
• Um software é um programa de computador que faz
com que o hardware realize determinada tarefa.
• Os softwares são classificados como: BÁSICOS e
APLICATIVOS.
- SOFTWARE BÁSICO: são os softwares necessários para
o funcionamento e gerenciamento do computador (Ex.
Sistema Operacional, Linguagens de Programação, ...).

- SOFTWARES APLICATIVOS: são os softwares utilizados


pelos usuários para resolver problemas gerais e
específicos (Ex. Processador de Textos, Planilha,
Controle de Estoque, ...).

• As licenças para distribuição de softwares são:


- Comercial: softwares proprietários.

- Freeware: softwares de domínio público distribuídos


gratuitamente.

- Shareware: semelhantes aos freeware, mas são


fornecidos mediante acordo de pagamento de
quantidade simbólica pelos usuários que gostarem do
produto.

CONCEITOS BÁSICOS DE AMBIENTES DE


PROGRAMAÇÃO

• Uma linguagem de programação é uma notação formal


para descrição de algoritmos que serão executados por
um computador.
• Como todas as notações formais, uma linguagem de
programação apresenta dois componentes:
- SINTAXE: consiste em um conjunto de regras formais,
que especificam a composição de programas a partir de
letras, dígitos, e outros símbolos.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 9


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

- SEMÂNTICA: especificam o “significado” de qualquer


programa, sintaticamente válido, escrito na linguagem.

CLASSIFICAÇÃO DAS LINGUAGENS DE


PROGRAMAÇÃO
• As linguagens de programação são classificadas em três
níveis.
- BAIXO NÍVEL: são escritas utilizando as instruções do
processador do computador. São genericamente
chamadas de linguagens Assembly.

 Vantagens: programas são executados com maior


velocidade de processamento. Os programas ocupam
menos espaço em memória.

 Desvantagens: têm pouca portabilidade, isto é, um


código gerado para um tipo de processador não serve
para outro. Também não são estruturados, tornando a
programação mais difícil.

- NÍVEL MÉDIO: contém um conjunto de instruções mais


legível do que as linguagens de baixo nível. Exemplos de
linguagens de nível médio são Pascal e C.

 Vantagens: em geral são linguagens que incorporam


mais recursos, permitindo a criação de jogos e
programas com qualidade profissional.

 Desvantagens: alguns comandos apresentam uma certa


dificuldade de compreensão em sua sintaxe.

- ALTO NÍVEL: aproximam-se mais da linguagem natural.


Exemplos de linguagens de nível médio são SQL e Java.

 Vantagens: têm maior portabilidade podendo ser


executados em várias plataformas com pouquíssimas
modificações. Em geral, a programação torna-se mais
fácil em decorrência do maior ou menor grau de
estruturação de suas linguagens.

 Desvantagens: em geral, as rotinas geradas (em


linguagem de máquina) são mais genéricas, tornando-as

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 10


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

mais complexas, conseqüentemente tornam-se mais


lentas e ocupam mais memória.

LINGUAGENS E GERAÇÕES
• As linguagens de programação têm evoluído ao longo
dos tempos podendo ser divididas em:
- Primeira Geração: surgiu a partir dos anos 40 (século
XX), mais precisamente em 1945 com o surgimento dos
primeiros computadores eletrônicos, em que a
linguagem de programação utilizada era a linguagem de
máquina (nível baixo). Exemplo: a linguagem Assembly.

- Segunda Geração: surgiu no final dos anos 50 e início


dos anos 60 (século XX). Possuem como característica
primordial à aproximação da forma de escrita humana.
Exemplos: linguagens FORTRAN, COBOL, BASIC e
ALGOL.

- Terceira Geração: surgiu durante a década de 70 (século


XX), caracterizando-se por serem linguagens
estruturadas de programação (de alto nível). As
linguagens desta geração dividem-se em três grupos
básicos: linguagens de uso geral (podem ser destacadas
PL/1, PASCAL, C, Java, BASIC), linguagem orientadas a
objetos (SmallTalk, C++, Object PASCAL, ADA, Java) e
linguagens especialistas (LISP, PROLOG, FORTH). As
linguagens de terceira geração estão em pleno uso,
principalmente em ferramentas de desenvolvimento
integradas, como: Visual Basic, Delphi, Visual C, C++
Builder, JBuilder, entre outras;

- Quarta Geração: surgiram durante a metade da década


de 70 (século XX) como linguagens com um elevado
nível de abstração. A linguagem de quarta geração é o
mais próximo que conseguiu-se chegar da linguagem
humana. As linguagens de consulta utilizadas em bancos
de dados são de quarta geração, por acomodarem o
conceito desta com bastante propriedade. A mais
popular é a linguagem SQL.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 11


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

2 LÓGICA DE PROGRAMAÇÃO
• O computador segue as ordens (COMANDOS E
INSTRUÇÕES) descritas em um programa de
computador.
• Para que o computador possa cumprir corretamente as
tarefas desejadas é necessário que o programa esteja
organizado de forma lógica.
• "LÓGICA: coerência de raciocínio, de idéia; seqüência
coerente, regular e necessária de acontecimentos, de
coisas" (DICIONÁRIO AURÉLIO).
EXEMPLO: Calcular a área de uma sala
retangular.
Passos:
Medir o lado transversal
Medir o lado longitudinal
Multiplicar a medida do lado transversal pela
medida do lado longitudinal

• A obtenção do resultado desejado exige a seqüência em


ordem correta de todo o conjunto de instruções.
• "LÓGICA DE PROGRAMAÇÃO é a técnica de encadear
pensamentos, através de uma seqüência lógica de
passos ou instruções, visando atingir um determinado
objetivo computacional" (VALDAMERI, 2003).

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 12


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

• A implementação de um programa de computador


exige, portanto, alguns cuidados:
a) entender o problema proposto
(INTERPRETAÇÃO);
b) verificar os dados e recursos disponíveis para
resolvê-lo (ENTRADAS);
c) identificar os resultados que se deseja alcançar
(SAÍDAS);
d) definir e redigir os passos para a solução do
problema (PROCESSO).
• A solução de um problema computacional deve ser feita
em etapas:
1) Fase de descrição da resolução do problema
(ALGORITMO).
2) Fase da implementação do algoritmo em uma
linguagem de programação (PROGRAMA).

PROBLEMA ALGORITMO PROGRAMA


Resolução do Implementação
problema

Algoritmo

• Os algoritmos representam a descrição de como um


problema pode ser resolvido, através de uma seqüência
lógica de instruções.
• Um algoritmo é similar a uma receita para resolver
tarefas específicas. Estas tarefas não podem ser
redundantes nem subjetivas na sua definição, devendo
ser claras e precisas.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 13


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

• Para se resolver problemas através de algoritmos é


necessário ter:
e) uma metodologia para a construção do
algoritmo;
f) um método de representação da solução.
Metodologia para Construção de Algoritmos
• A metodologia aqui proposta para a construção de
algoritmos segue os princípios da programação
estruturada.
• A solução de um problema de forma estruturada é
denominada de top-down ou refinamento
sucessivo.
- Nesta técnica qualquer problema, por mais complexo
que possa parecer, pode ser dividido em vários
problemas menores que, resolvidos cada um em
separado, trarão a solução do problema inicial (ela será
abordada futuramente de forma mais detalhada).

• A metodologia proposta é composta dos seguintes


passos:
1) Ler o problema até compreendê-lo totalmente,
destacando os verbos e os substantivos
(INTERPRETAÇÃO):
 nesta etapa deve-se verificar atentamente se o problema
está bem definido, se não há ambigüidades ou
informações incompletas e irrelevantes;

2) Identificar as informações (substantivos) que


são fornecidas (DADOS DE ENTRADA):
 nesta etapa deve-se identificar os dados ou recursos
disponíveis para a solução do problema;

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 14


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

3) Identificar as informações (substantivos) que


devem ser geradas como resultado (DADOS DE
SAÍDA):
 nesta etapa deve-se identificar os resultados desejados
para o problema, procurando observar se todos as
entradas ou recursos necessários estão disponíveis;

4) Definir um conjunto de dados de entrada com


suas respectivas saídas desejadas (BASE DE
TESTES).
 nesta etapa deve-se estabelecer um conjunto de
informações de entrada com suas respectivas saídas,
visando montar uma base de testes para o problema.

5) Identificar as operações necessárias (verbos)


para transformar as entradas em saídas
(PROCESSAMENTO):
 nesta etapa deve-se buscar os verbos que indiquem as
operações que devem ser realizadas para a solução do
problema;

6) Descrever as operações necessárias para


transformar as entradas em saídas (DESCRIÇÃO
DO ALGORITMO):
 nesta etapa deve-se descrever a seqüência de instruções
necessárias para a solução do problema, de maneira
simples e objetiva, observando-se algumas técnicas:

o usar somente um verbo (no infinitivo) por frase;

o usar frases curtas e simples sem ambigüidade;

o ser objetivo.

 deve-se notar que nesta etapa podem surgir dados


intermediários (que não são nem de entrada e nem de
saída) necessários para a solução do problema.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 15


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

 as técnicas mais comuns para descrição de algoritmos


serão destacadas no item sobre métodos de
representação de algoritmos.

7) Testar a solução do problema (TESTE):


 nesta etapa deve-se executar fielmente as operações
descritas no passo 6, utilizando a base de testes descrita
no passo 4 para verificar se os resultados desejados
estão corretos. Em algumas situações é necessário
registrar informações intermediárias para acompanhar a
execução dos passos;

 se existirem passos com soluções incorretas, incompletas


ou muito genéricas identificadas no processo de teste,
pode ser necessário refinar a descrição da solução (top-
down ou refinamento sucessivo).

8) Revisar a solução do problema buscando uma


solução melhor (OTIMIZAÇÃO):
 nesta etapa deve-se rever a solução proposta, mesmo se
estiver correta para melhorar a maneira de descrever ou
o modo como está sendo feito.

 Caso encontre possibilidades de melhoria retorne ao


passo 6.

Enunciados

• Os problemas normalmente são descritos através de


enunciados os quais devem conter os elementos
fundamentais e necessários para a sua solução.
• Entretanto, os enunciados em geral podem trazer
informações irrelevantes, problemas de ambigüidade ou
serem incompletos.
• Considere o seguinte enunciado de um problema:
Faça uma limonada.

• Com este enunciado é possível resolver o problema?

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 16


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

- Sim, mas por onde começar a análise e descrição do


problema? Plantando o limoeiro, indo ao supermercado
comprar os limões, cortando o limão? Quais são os
recursos existentes para fazer a limonada? É com açúcar
e gelo? Tem espremedor ou deve-se espremer na mão?

- Portanto, este é um exemplo de enunciado ambíguo e


incompleto, pois dá margem a muitas interpretações.

• Veja agora o seguinte enunciado:


Uma pessoa dirijiu-se até uma casa de sucos e pediu uma limonada com
açúcar. Considerando que o atendente tem o limão, o açúcar, um copo
com água, faca e colher de sopa descreva um algoritmo para fazer a
limonada pedida.

- Este é um enunciado mais completo e com pouca


margem ã interpretação. Entretanto, ele traz
informações irrelevantes para a solução do problema
que na sua essência trata do processo de fazer uma
limonada, mas que por outro lado contextualizam o
problema. Você consegue identificar o que é irrelevante?

• Considere, agora o seguinte enunciado de um


problema:
Descreva um algoritmo para calcular a área de uma sala retangular.

• Com este enunciado é possível resolver o problema?


- Sim, mas onde está a descrição da fórmula de cálculo da
área? Neste caso não há problema, pois esta fórmula é
relativamente conhecida, única e fácil de ser encontrada
podendo, ou não ser inserida no enunciado do problema.

- Portanto, este é um exemplo de enunciado incompleto,


mas que permite a solução do problema.

Exercícios Propostos

• Resolva os problemas propostos a seguir, utilizando os


passos 1 a 7 da metodologia proposta anteriormente e
procurando identificar situações em que há
ambigüidade, falta de informação ou dados irrelevantes
para a solução do problema.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 17


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

1. Uma pessoa dirigiu-se até uma casa de sucos e pediu uma limonada com
açúcar. Considerando que o atendente tem o limão, o açúcar, um copo
com água, faca e colher de sopa descreva um algoritmo para fazer a
limonada pedida.
2. Uma criança precisa desenhar e recortar um quadrado em uma folha de
papel. Além da folha de papel ela tem régua, lápis e tesoura. Descreva um
algoritmo que a permita cumprir sua tarefa.
3. Descreva um algoritmo para calcular a área de uma sala retangular.
Considere que você tenha uma trena - para fazer a medida em metros -
de tamanho suficiente para medir a sala.
4. Um professor precisa calcular a média de um aluno. Descreva um
algoritmo para auxiliá-lo nesta tarefa, considerando que ele tem 3 notas
do aluno e que a média é calculado de forma aritmética.
5. Um aluno está na Biblioteca da FURB e precisa pegar um livro.
Considerando que ele sabe que o livro está disponível, mas não sabe a
estante onde o livro se encontra, e que a biblioteca conta com um sistema
computadorizado disponível em um computador da própria biblioteca para
a pesquisa do livro, descreva um algoritmo com os passos necessários
para o aluno emprestar o livro.
6. Uma pessoa apressada estava com sede e decidiu comprar uma garrafa
de água na cantina da FURB. Considerando que ela tinha dinheiro
suficiente para comprar a garrafa de água e que não havia fila no caixa
descreva um algoritmo que lhe permita comprar a garrafa de água.

Métodos de Representação de Algoritmos


• Existem diversos métodos de representação de
algoritmos entre os quais se destacam:
- Linguagem Natural: representa as instruções em
linguagem corrente;

- Portugol ou Português Estruturado: representa as


instruções através de um subconjunto de palavras da
língua portuguesa. Também é conhecida por
pseudolinguagem ou pseudocódigo. Tem uma estrutura
semântica e sintática própria e que pode variar nas
diferentes bibliografias ou formas de representação.

- Fluxograma (Diagrama de Blocos): representa as


instruções através de símbolos gráficos;

- Diagrama de Chapin: assim como o fluxograma também


representa as instruções através de símbolos gráficos,
mas com um notação um pouco diferente.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 18


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

3 ESPECIFICAÇÃO DE ALGORITMOS
• Os algoritmos em geral trabalham com alguns conceitos
fundamentais DADOS, EXPRESSÕES e COMANDOS.

DADOS

• DADOS são as informações que devem ser


armazenadas para a solução do problema.
• Os DADOS são representados através de variáveis ou
constantes e tem tipos.
• Todas as informações armazenadas na memória do
computador tem o que chamamos de endereço de
memória.
• O endereço de memória é representado por um
número hexadecimal.
• Para facilitar a localização destas informações na
memória, ao invés de utilizarmos o endereço de
memória em hexadecimal, utilizamos nomes de
variáveis e constantes.
Variáveis
• Variável é um endereço de memória representado por
um nome cujo conteúdo pode ser alterado ao longo de
um programa.
• As variáveis tem tipos que definem que informação
pode ser armazenada nela.
• Os DADOS DE ENTRADA E SAÍDA de um algoritmo e
os DADOS INTERMEDIÁRIOS via de regra DEVEM
SER armazenados em VARIÁVEIS.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 19


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

EXEMPLO:
No exercício 4 do capítulo 2 podemos destacar
cinco variáveis: a variável para armazenar a
primeira nota do aluno (Nota1), a variável para
armazenar a segunda nota do aluno (Nota2), a
variável para armazenar a terceira nota do
aluno (Nota3), a variável para armazenar a soma
das notas dos alunos (Soma) e a variável para
armazenar a média do aluno (Media).

Constantes
• Constante é um endereço de memória representado
por um nome cujo conteúdo não pode ser alterado ao
longo de um programa.
EXEMPLO:
No exercício 4 do capítulo anterior o número de
avaliações poderia ser definido como uma
constante pois ele é fixo (3).

Tipos de Dados
• Toda variável tem um tipo de dado associado. O tipo de
dado determina:
- que valores a variável pode assumir;

- as operações às quais ela pode ser submetida;

- o espaço a ser ocupado pela variável na memória.

• Os tipos de dados básicos ou primitivos são:


- inteiro: define variáveis numéricas do tipo inteiro, ou
seja, sem casas decimais.

- real: define variáveis numéricas do tipo real (ponto


flutuante), ou seja, com casas decimais.

- caractere: define variáveis alfanuméricas. Deve ser


delimitado em um número máximo de carateres.

- lógico: define variáveis do tipo VERDADEIRO ou FALSO.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 20


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

EXEMPLOS:
Considerando o nome, a idade e o salário de um
funcionário podemos ter como tipos de dados:
Nome : caractere[30]
Idade : inteiro
Salario : real
Obs: O Nome está limitado a 30 caracteres.

EXPRESSÕES

• EXPRESSÕES denotam as operações que devem ser


feitas para o processamento dos dados.
• As EXPRESSÕES em geral necessitam de operadores.
EXEMPLO:
No exercício 4 do capítulo anterior uma
expressão é dada pela soma das notas e a outra
o cálculo da média. Para isto precisamos de
operadores de som e divisão.

Operadores Aritméticos
• Os operadores aritméticos realizam operações
matemáticas sobre os dados (variáveis ou constantes).
Operadores unários: são aplicados a um único operando. São os
+,-
operadores aritméticos de maior precedência. Exemplos: -3, +x.
Operadores aritméticos: são aplicados para adição, subtração,
+
multiplicação e divisão respectivamente. Por convenção, * e / têm
-
precedência sobre + e -. Para modificar a ordem de avaliação das
*
operações, é necessário usar parênteses como em qualquer expressão
/
aritmética.
Operador de divisão de inteiros*: é aplicado na divisão de números
\
inteiros substituindo operador \.
Operador de resto*: é aplicado para o resto da divisão de números
% inteiros. Por exemplo, 8 % 3 = 2. Tem a mesma precedência do operador
de divisão tradicional.
Operador de potenciação*: é aplicado para elevar um valor a uma
^
potência. Exemplo: 5 ^ 2 = 25.

*
Estes operadores podem variar de acordo com a notação utilizada pela pseudolinguagem.
*

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 21


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

Operador de Caracteres
• O operador de caracteres realiza a concatenação
entre cadeias de caracteres.
Operador de concatenação de cadeias de caracteres, quando usado com dois
+ valores (variáveis ou constantes) do tipo "caractere". Por exemplo: "Rio " + " de
Janeiro" = "Rio de Janeiro".

Operadores Relacionais
• Os operadores relacionais realizam operações de
comparações entre os dados (variáveis ou constantes).
• O resultado de um operador relacional é sempre um
valor lógico (VERDADEIRO ou FALSO).
= Igual
> Maior
< Menor
>= Maior ou Igual
<= Menor ou Igual
<> Diferente

Operadores Lógicos
• Os operadores lógicos permitem realizar combinações
de operações relacionais, juntando diversas decisões
em uma única expressão.
Operador unário de negação. nao VERDADEIRO = FALSO, e nao FALSO =
Não
VERDADEIRO. Tem a maior precedência entre os operadores lógicos.
Operador que resulta VERDADEIRO quando um dos seus operandos lógicos for
Ou
verdadeiro.
Operador que resulta VERDADEIRO somente se seus dois operandos lógicos
E
forem verdadeiros.

• O resultado dos operadores lógicos são dados pela


seguinte tabela, também chamada de tabela verdade:
E OU NEGAÇÃO
V e V =V V ou V = V NÃO V = F
V e F =F V ou F = V NÃO F = V
F e V =F F ou V = V
F e F =F F ou F = F

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 22


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

COMANDOS

• Os comandos definem operações que devem ser


executadas ou processadas pelo computador.
• Os comandos mais comuns usados em algoritmos são
de atribuição e de entrada e saída.
Comando de Atribuição
• Um comando de atribuição permite que o resultado de
uma expressão, ou o valor de uma variável ou
constante seja armazenado em uma variável.
• O comando de atribuição indica que a variável deve
receber um conteúdo.
• O símbolo que representa uma atribuição é uma seta
apontada para a esquerda (<-), que indica que o valor
da expressão à direita deve ser armazenado na variável
à esquerda.
EXEMPLO 1: atribuir o valor 5 à variável A
A <- 5

EXEMPLO 2: atribuir o valor de A somado de 2


unidades à variável B
B <- A + 2

Comandos de Entrada e Saída


• Os comandos de entrada e saída são usada para
inserir dados em um programa (ler) ou apresentar os
resultados de um programa (escrever).
• Os dados de entrada devem ser inseridos em um
programa através do comando de leitura.
• Os dados de saída devem ser mostrados através dos
comandos de escrita.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 23


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

Comando de Entrada em Portugol

• O comando de entrada utilizado em algoritmos é o


comando leia.
• Com este comando o algoritmo aguarda que o usuário
insira um valor que será armazenado na memória do
computador.
• Este comando exige que seja colocado o nome da
variável onde a informação digitada será armazenada.
SINTAXE:
leia (variável)

EXEMPLO 1: aguarda que seja digitado um valor a


ser armazenado na variável A
leia (A)

EXEMPLO 2: aguarda que seja digitado um valor a


ser armazenado na variável nome
leia (nome)

Comando de Saída em Portugol

• O comando de saída utilizado em algoritmos é o


comando escreva.
• Com este comando o algoritmo mostra o resultado de
uma expressão definida pelo usuário.
• A expressão a ser escrita pode ser o nome de uma
variável, um texto ou uma expressão matemática,
ou até mesmo uma combinação entre estas separadas
por vírgulas.
SINTAXE:
escreva (expressão)

EXEMPLO 1: escreve o valor da variável X


escreva (X)

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 24


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

EXEMPLO 2: escreve um texto


escreva (“Boa noite!”)

EXEMPLO 3: escreve uma expressão (o resultado


da soma de 2 variáveis)
escreva (A + B)

EXEMPLO 4: escreve um texto e o conteúdo de uma


variável)
escreva (“Idade do aluno = “, idade);

Português Estruturado ou Portugol

• Português Estruturado ou Portugol é uma das


formas de representação de algoritmos.
• Por não ser uma linguagem padronizada podem existir
diversas construções sintáticas para o Portugol,
dependendo da bibliografia ou da ferramenta utilizada.
• Neste material está sendo adotado o modelo proposto
pela Apoio Informática (www.apoioinformatica.net)
utilizado na ferramenta VisuAlg (versão 2.0) que é uma
forma de representação de uma pseudolinguagem
Portugol.
• A estrutura sintática básica do método de
representação proposto está representada abaixo.
algoritmo identificador
<cabeçalho>
<declarações>
inicio
<corpo do algoritmo>
fimalgoritmo

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 25


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

• Nesta definição observam-se alguns conceitos


importantes:
- palavras reservadas: são palavras exclusivas da
linguagem que tem algum significado semântico e que
devem ser usadas pelo programados apenas dentro de
um determinado contexto previamente estabelecido. Na
estrutura apresentada anteriormente são exemplos de
palavras reservadas: algoritmo, inicio, fimalgoritmo;

 no VisuAlg a lista de palavras reservadas pode ser


verificada na Ajuda da linguagem;

- identificador: são nomes criados pelo programador. Na


estrutura sintática apresentada a palavra identificador
indica que o programador pode dar um nome ao seu
algoritmo. Outros exemplos de identificadores são
nomes de variáveis, constantes e funções;

 no VisuAlg os nomes das variáveis devem começar por


uma letra e depois conter letras, números ou underline,
até um limite de 30 caracteres. Além disso, os nomes dos
identificadores devem ser explicativos em relação ao seu
conteúdo;

- cabeçalho: corresponde a comentários que devem ser


inseridos para permitir a identificação do algoritmo
como, por exemplo, o que ele faz, quem fez e quando
fez;

 no VisuAlg as linhas de comentários devem ser iniciadas


pelos caracteres //;

- declarações: corresponde a uma área específica para a


declaração de identificadores;

- corpo do algoritmo: corresponde a área onde devem


ser inseridos os comandos e instruções a serem
executados pelo algoritmo.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 26


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

Exercícios Resolvidos

1. Dada a largura e o comprimento em metros de uma sala retangular,


descreva um algoritmo para calcular sua área.
1. PROBLEMA Verifique atentamente se o problema está bem definido, se não há
(INTERPRETAÇÃO) ambigüidades ou informações incompletas e irrelevantes.
Dada a largura e o comprimento em metros de uma sala retangular,
descreva um algoritmo para calcular sua área.
Destaque aqui as ambigüidades ou informações incompletas
Não há.
2. DADOS DE Identifique e descreva os dados ou recursos (substantivos) disponíveis
ENTRADA para a solução do problema.
Largura
Comprimento
3. DADOS DE SAÍDA Identifique e descreva os resultados desejados para o problema,
procurando observar se todas as entradas ou recursos necessários
estão disponíveis.
Área
4. BASE DE TESTES Defina um conjunto de informações de entrada com suas respectivas
saídas, visando montar uma base de testes para o problema.
Largura: 10 Comprimento: 10 Área: 100
Largura: 5 Comprimento: 7 Área: 35
Largura: 3 Comprimento: 90 Área: 270
5. PROCESSAMENTO Identifique os verbos que indiquem as operações que devem ser
realizadas para a solução do problema.
Calcular área da sala
6. DESCRIÇÃO DO Descreva a seqüência de instruções necessárias para a solução do
ALGORITMO problema.
Descreva os passos gerais para a solução do problema.
Ler largura e comprimento
Calcular a área (largura * comprimento)
Escrever a área

Descreva o algoritmo em Portugol para a solução do problema.


algoritmo "area"
// Função : Este algoritmo calcula a área de uma sala retangular
// Autor : Mauricio Capobianco Lopes
// Data : 12/3/2006
var
largura, comprimento, area : inteiro
inicio
//ler largura e comprimento
escreva ("Digite largura da sala: ")
leia (largura)
escreva ("Digite o comprimento da sala: ")
leia (comprimento)
//calcular a área
area <- largura * comprimento
//escrever a área
escreva ("Area da sala = ", area)
fimalgoritmo
7. TESTES Execute as operações descritas no passo 6, utilizando a base de testes

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 27


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

descrita no passo 4 para verificar se os resultados desejados estão


corretos. Em algumas situações é necessário registrar informações
intermediárias para acompanhar a execução dos passos.
Largura: 10 Comprimento: 10 Área: 100
Largura: 5 Comprimento: 7 Área: 35
Largura: 3 Comprimento: 90 Área: 270
8. OTIMIZAÇÃO Reveja a solução proposta, mesmo se estiver correta, para eliminar
eventuais possibilidades de erro e melhorar a maneira de descrever ou
o modo como está sendo feito. Uma solução eficiente deve usar menos
memória possível e ser a mais rápida possível. Caso encontre
possibilidades de melhoria retorne ao passo 6.

2. Um professor precisa calcular a média de um aluno. Descreva um


algoritmo para auxiliá-lo nesta tarefa, considerando que ele tem 3 notas
do aluno e que a média é calculado de forma aritmética.
1. PROBLEMA Verifique atentamente se o problema está bem definido, se não há
(INTERPRETAÇÃO) ambigüidades ou informações incompletas e irrelevantes.
Um professor precisa calcular a média de um aluno. Descreva um
algoritmo para auxiliá-lo nesta tarefa, considerando que ele tem 3
notas do aluno e que a média é calculado de forma aritmética.
Destaque aqui as ambigüidades ou informações incompletas
Não há.
2. DADOS DE Identifique e descreva os dados ou recursos (substantivos) disponíveis
ENTRADA para a solução do problema.
Nota 1
Nota 2
Nota 3
3. DADOS DE SAÍDA Identifique e descreva os resultados desejados para o problema,
procurando observar se todas as entradas ou recursos necessários
estão disponíveis.
Média
4. BASE DE TESTES Defina um conjunto de informações de entrada com suas respectivas
saídas, visando montar uma base de testes para o problema.
(E) Nota 1: 5.0 – Nota 2: 6.0 – Nota 3: 7.0 (S) Média: 6.0
(E) Nota 1: 9.0 – Nota 2: 8.0 – Nota 3: 10.0 (S) Média: 9.0
(E) Nota 1: 6.5 – Nota 2: 5.5 – Nota 3: 9.0 (S) Média: 7.0
(E) Nota 1: 1.5 – Nota 2: 6.5 – Nota 3: 10.0 (S) Média: 6.0
(E) Nota 1: 4.0 – Nota 2: 8.0 – Nota 3: 3.0 (S) Média: 5.0
5. PROCESSAMENTO Identifique os verbos que indiquem as operações que devem ser
realizadas para a solução do problema.
Calcular a média do aluno

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 28


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

6. DESCRIÇÃO DO Descreva a seqüência de instruções necessárias para a solução do


ALGORITMO problema.
Descreva os passos gerais para a solução do problema.
Ler notas do aluno
Somar as notas do aluno (nota1 + nota2 + nota3)
Calcular a média do aluno (soma das notas / 3)
Escrever a média

Descreva o algoritmo em Portugol para a solução do problema.


algoritmo "media"
// Função : Este algoritmo calcula a média de um aluno
considerando // 3 notas
// Autor : Mauricio Capobianco Lopes
// Data : 12/3/2006
var
nota1, nota2, nota3, soma, media : real
inicio
//ler notas do aluno
escreva ("Digite a primeira nota do aluno: ")
leia (nota1)
escreva ("Digite a segunda nota do aluno: ")
leia (nota2)
escreva ("Digite a terceira nota do aluno: ")
leia (nota3)
//somar as notas
soma <- nota1 + nota2 + nota3
//calcular a média
media <- soma / 3
//escrever a média
escreva ("Média = ", media)
fimalgoritmo
7. TESTES Execute as operações descritas no passo 6, utilizando a base de testes
descrita no passo 4 para verificar se os resultados desejados estão
corretos. Em algumas situações é necessário registrar informações
intermediárias para acompanhar a execução dos passos.
(E)Nota 1: 5.0 Nota 2: 6.0 Nota 3: 7.0 (P)Soma: 18.0 (S)Média: 6.0
(E)Nota 1: 9.0 Nota 2: 8.0 Nota 3: 10.0 (P)Soma: 27.0 (S)Média: 9.0
(E)Nota 1: 6.5 Nota 2: 5.5 Nota 3: 9.0 (P)Soma: 21.0 (S)Média: 7.0
(E)Nota 1: 1.5 Nota 2: 6.5 Nota 3: 10.0 (P)Soma: 18.0 (S)Média: 6.0
(E)Nota 1: 4.0 Nota 2: 8.0 Nota 3: 3.0 (P)Soma: 15.0 (S)Média: 5.0
8. OTIMIZAÇÃO Reveja a solução proposta, mesmo se estiver correta, para eliminar
eventuais possibilidades de erro e melhorar a maneira de descrever ou
o modo como está sendo feito. Uma solução eficiente deve usar menos
memória possível e ser a mais rápida possível. Caso encontre
possibilidades de melhoria retorne ao passo 6.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 29


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

Exercícios Propostos

1. Determine qual é o tipo primitivo da informação sublinhada presente nas


sentenças abaixo:
a) A placa 'Pare' tinha 2 furos de bala.
Pare : caracter 2 : inteiro
b) José subiu 5 degraus para pegar 1 maçã boa.

c) Albertina levou 3 ½ horas para chegar ao hospital onde concebeu 1


criança de sexo 'F'.

d) Astrogilda pintou em sua camiseta: 'Preserve o meio ambiente', e


ficou devendo R$ 100.50 ao vendedor de tintas.

e) João recebeu sua 18o medalha por ter alcançado a marca de 57.3
segundos nos 100 metros rasos.

2. Assinale os identificadores (nomes de variáveis) válidos e indique quais e


o porquê dos identificadores (nomes de variáveis) inválidos:
a) valor (X)Válido ( )Inválido: _______________________
b) nome empresa ( )Válido (X)Inválido: tem espaços em branco
c) x2 ( )Válido ( )Inválido: _______________________
d) 3x4 ( )Válido ( )Inválido: _______________________
e) M{a} ( )Válido ( )Inválido: _______________________
f) Xyz ( )Válido ( )Inválido: _______________________
g) 'nota' ( )Válido ( )Inválido: _______________________
h) Salário ( )Válido ( )Inválido: _______________________
i) nota*do*aluno( )Válido ( )Inválido: _______________________
j) maria ( )Válido ( )Inválido: _______________________
k) ah! ( )Válido ( )Inválido: _______________________
l) b248 ( )Válido ( )Inválido: _______________________
m) a1b2c3 ( )Válido ( )Inválido: _______________________
n) km/h ( )Válido ( )Inválido: _______________________
o) sala215 ( )Válido ( )Inválido: _______________________
3. Supondo que as variáveis NOTA, NOME, MATRÍCULA, SEXO sejam
utilizadas para armazenar a nota, o nome, o número de matrícula e o
sexo de um aluno, declare-as.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 30


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

4. Indique o tipo de cada uma das variáveis em cada seqüência de comandos


e mostre os conteúdos das variáveis durante sua execução:
a)
Comandos x y z
inteiro inteiro real
x <- 1 1 - -
y <- 2 1 2 -
z <- 4 + y / 3 1 2 4.67
y <- 4 + x \ 3 1 4 4.67
x <- x + y 5 4 4.67
b)
Comandos i j k m
i <- 2.5
j <- i
k <- (j + i)^2
m <- k % 3
c)
Comandos r s t v
r <- 3
s <- r ^ r
t <- s \ 9
t <- (t + 1) + s - r
v <- r / s
d)
Comandos a b c
a <- 10.0
b <- 25.0
c <- b / a + (b - a) / 2
a <- c ^ (b / a - 0.5)
e)
Comandos x y z
x <- 1600
y <- 10
z <- x / y ^ 2
z <- z / 2
f)
Comandos x y z w
x <- 34
y <- (x * 5 - 10) / 40 + 1
z <- (x + y) / 13
y <- y - 10
w <- x - y + z
x <- x / 2
y <- y * 6
x <- w \ z
w <- w % z
g)
Comandos a b c d
a <- -7
b <- 25
c <- b + 10

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 31


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

d <- a + b + c
b <- b + a
a <- (b - c) * 2
b <- d - b
d <- c - b
5. Dada a seguinte declaração de variáveis:
a, b : inteiro
nome, profissao : caracter[30]
Complete o quadro a seguir, preenchendo os espaços em branco com os
valores lógicos (verdadeiro ou falso) obtidos como resultados das
relações, tendo em vista os valores atribuídos a estas variáveis:
Variáveis Relações
a B nome profissao a^2+1 >= b nome ≠ profissão
'Ana' = 'medico'
3 16 'Miriam' 'advogado' falso verdadeiro falso
5 14 'Pedro' 'medico'
2.5 9 'ANA' 'professor'
12 100 'Ana' 'medico'
10 150 'Carlos' 'professor'
6. Dada a declaração de variáveis:
a, b, c : inteiro
x, y, z : real
nome, rua : caracter[20]
l1, l2 : logico
Classifique as expressões seguintes de acordo com o tipo de dado do
resultado de sua avaliação: I (inteiro), R (real), C (caracter), L (lógico) ou
N (quando não for possível defini-lo):
a) (I) a + b + c
b) (N) l1 ^ l2
c) ( ) a + b + z
d) ( ) nome + rua
e) ( ) a > b
f) ( ) a > y
g) ( ) nome > rua
h) ( ) l1 ou l2
i) ( ) (rua ≠ nome) e não (a = b)
j) ( ) a + b / c
k) ( ) a + z / a
l) ( ) a > b = l1
m) ( ) x + y / z
n) ( ) x + z / a
7. Determine os resultados obtidos na avaliação das expressões abaixo,
sabendo que A, B, C, D, E contêm respectivamente 2, 7, 3.5, “noite” e
“frio” e que existe uma variável lógica L cujo valor é falso:
a) B = A * C e L ou verdadeiro ( )F (X)V
b) ‘dia’ = D ou E <> ‘clima’ ( )F ( )V

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 32


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

c) L e B \ A >= C ou não A<= C ( )F ( )V


d) B**2 // 3 = 14 / A ou (B - 3 <= C + 0.5) ( )F ( )V
e) não L ou verdadeiro e C >= A \ A ( )F ( )V
f) B + (-2) = (2 * C) ^ 2 / 10 ( )F ( )V
8. Uma pessoa foi até uma casa de câmbio trocar dólares por reais. Para isto
ela entregou um valor em dólares para o atendente. Considerando que o
atendente tem a cotação do dólar, descreva um algoritmo para calcular
quantos reais o atendente deve devolver para a pessoa.
9. Descreva um algoritmo que calcule o volume de uma lata de óleo.
FÓRMULA: volume = π * raio2 * altura
10. Descreva um algoritmo que leia o comprimento dos catetos de um
triângulo retângulo e calcule o comprimento da hipotenusa.
FÓRMULA: hipotenusa2 = cateto12 + cateto22
11. Descreva um algoritmo que leia os nomes de 4 pessoas e escreva-os em
ordem inversa à ordem de leitura.
12. Descreva um algoritmo que calcule o salário bruto de um funcionário
sabendo o seu número de horas trabalhadas mensais, o valor recebido por
hora e o número de dependentes. O salário bruto é calculado
multiplicando-se o número de horas trabalhadas pelo valor recebido por
hora, acrescido de 10% por dependente.
13. Uma empresa tem para um funcionário os seguintes dados: o nome, o
número de horas trabalhadas mensais e o número de dependentes. A
empresa paga R$ 10,00 por hora (valor para cálculo do salário trabalho) e
R$ 60,00 por dependente (valor para cálculo do salário família) e são
feitos descontos de 8,5% sobre o salário trabalho para o INSS e de 5%
sobre o salário trabalho para o imposto de renda. Descreva um algoritmo
que informe o nome, o salário bruto e o salário líquido do funcionário.
14. Descreva um algoritmo que dado uma temperatura em °F informe o seu
valor em °C:
FÓRMULA: °F = (9/5)°C + 32

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 33


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

15. Um sistema de equações lineares da forma:


ax + by = c
dx + ey = f
pode ser resolvido utilizando-se as seguintes fórmulas:
x = (ce - bf) / (ae – bd)
y = (af - cd) / (ae – bd)
Descreva um algoritmo que tendo os valores a, b, c, d, e e f, calcule e
informe os valores de x e y.
16. Descreva um algoritmo que a partir das medidas dos 4 lados de um
terreno, o preço de um mourão e o preço de um metro de arame farpado
informe:
a) o número de mourões necessários para cercar o terreno, colocando
um mourão a cada 3 metros.
b) o gasto total, o gasto em mourões e o gasto em arame, supondo que
a cerca seja feita com 4 fios de arame.
17. Descreva um algoritmo que a partir da distância percorrida e o do tempo
gasto por um motorista durante uma viagem de final de semana, calcule a
velocidade média e a quantidade de combustível gasto na viagem,
sabendo que o automóvel faz 12 km por litro.
18. Suponha que um caixa disponha apenas de notas de 100, 10 e 1 reais.
Considerando que alguém está pagando uma compra, faça um algoritmo
que determine e escreva o número mínimo de notas que o caixa deve
fornecer como troco. Escreva também o número de cada tipo de nota a
ser fornecido como troco. Suponha que o sistema monetário não utilize
centavos.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 34


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

4 Estruturas de Controle em Nível de Instrução


– Seleção
• As estruturas de controle em nível de instrução podem
ser classificadas em: SELEÇÃO ou REPETIÇÃO;
• As estruturas de seleção permitem a escolha de um
grupo de comandos (instruções) a ser executado
quando determinadas condições são ou não satisfeitas.
• As estruturas de seleção avaliam expressões lógicas
tendo como resultado verdadeiro ou falso.
• As estruturas de seleção podem ser: seleção simples,
seleção encadeada, seleção composta e seleção de
múltipla escolha.

Seleção Simples

• As estruturas de seleção simples apresentam apenas


uma condição.
Exemplos:
Se está chovendo então
abra o guarda-chuva

Se a biblioteca está aberta então


empreste o livre

Se tem açúcar então


adoce a limonada

Se não está frio então


tire o casaco

• Sintaxe em Portugol (VisuAlg).


se <expressão-lógica> entao
<seqüência-de-comandos>
fimse

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 35


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

• Exemplo simplificado para verificar se um aluno está


aprovado em uma disciplina:
leia (nota)
se nota >= 6.0 entao
escreva (“Aluno aprovado”)
fimse

Seleção Encadeada

• As estruturas de seleção encadeadas apresentam


alternativas de ação diferentes de acordo com a
situação avaliada.
Exemplos:
Se está chovendo então
vou de carro
senão
vou de ônibus

Se gosto de limonada com açúcar então


coloco açúcar na limonada
senão
se gosto da limonada com adoçante então
coloco adoçante na limonada

• Sintaxe em Portugol (VisuAlg).


se <expressão-lógica> entao
<seqüência-de-comandos-expressão-verdadeira>
senao
<seqüência-de-comandos-expressão-falsa>
fimse

• Exemplo simplificado para informar se um aluno está


aprovado ou reprovado em uma disciplina:
leia (nota)
se nota >= 6.0 entao
escreva (“Aluno aprovado”)
senao
escreva (“Aluno reprovado”)
DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 36
Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

fimse

Seleção Composta

• As estruturas de seleção compostas apresentam mais


de uma condição.
• As estruturas de seleção compostas podem ser simples
ou encadeadas.
• Devem ser utilizadas com os operadores lógicos E ou
OU.
Exemplos:
Se está com sede e tem dinheiro então
compre uma garrafa de água

Se o computador está ligado e tem browser então


acesse a internet

Se está calor ou a água está quente então


mergulhe na piscina

Se está chovendo e está fazendo frio e você


está em casa então
coma uma pipoca
tome um chá quente

Se é final de semana e o tempo está bom então


vou à praia
Senão
fico em casa

• A sintaxe em Portugol (VisuAlg) não muda. Apenas


devem ser acrescidas mais expressões lógicas,
utilizando os operadores lógicos.
• As expressões lógicas devem ser delimitadas por
parênteses.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 37


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

• Exemplo simplificado de um algoritmo para verificar se


uma pessoa pode nadar em uma pisicina:
leia (temperatura)
leia (situacao_agua)
se (temperatura > 25) e (situacao_agua =
“limpa”) então
escreva (“Pode nadar”)
fimse

Seleção Múltipla

• As estruturas de seleção múltipla permitem avaliar uma


entre diversas alternativas.
Escolha o tempo
sol : vou à praia
chuva : fico em casa

Escolha a cor
verde : tenho esperança
vermelho : estou apaixonado
azul : está tudo tranquilo

• Sintaxe em Portugol (VisuAlg).


escolha <expressão-de-seleção>
caso <exp11>, <exp12>, ..., <exp1n>
<seqüência-de-comandos-1>
caso <exp21>, <exp22>, ..., <exp2n>
<seqüência-de-comandos-2>
.
.
outrocaso
<seqüência-de-comandos-extra>
fimescolha

• A opção outrocaso é opcional e indica que nenhuma das


opções anteriores foi validada.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 38


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

• Exemplo simplificado de um algoritmo para escrever


por extenso o sexo de uma pessoa dada a digitação de
F ou M:
leia (sexo)
escolha sexo
caso "f","F"
escreva ("Feminino")
caso "m","M"
escreva ("Masculino")
outrocaso
escreva ("Sexo indefinido")
fimescolha

Exercícios Resolvidos

1. Dado um valor inteiro maior do que 0 informe se o valor é par ou ímpar.


1. PROBLEMA Verifique atentamente se o problema está bem definido, se não há
ambigüidades ou informações incompletas e irrelevantes.
(INTERPRETAÇÃO)
Dado um valor inteiro maior do que 0 informe se o valor é par ou
ímpar.
Destaque aqui as ambigüidades ou informações incompletas
Não há.
2. DADOS DE Identifique e descreva os dados ou recursos (substantivos) disponíveis para a
solução do problema.
ENTRADA
Valor inteiro
3. DADOS DE SAÍDA Identifique e descreva os resultados desejados para o problema, procurando
observar se todas as entradas ou recursos necessários estão disponíveis.
Mensagem se o valor é par ou ímpar.
4. BASE DE TESTES Defina um conjunto de informações de entrada com suas respectivas saídas,
visando montar uma base de testes para o problema.
(E) Valor: 5 (S) “Ímpar”
(E) Valor: 10 (S) “Par”
(E) Valor:5786 (S) “Par”
5. PROCESSAMENTO Identifique os verbos que indiquem as operações que devem ser realizadas
para a solução do problema.
Identifique se há a necessidade de uso de estruturas de seleção e que tipo de
avaliação deve ser feita.
5.1 Operações a serem realizadas
Informar se um determinado valor é par ou ímpar
5.2 Uso de estruturas de seleção
Verificar se o número é par ou ímpar
6. DESCRIÇÃO DO Descreva a seqüência de instruções necessárias para a solução do problema.
ALGORITMO
6.1 Descreva os passos gerais para a solução do problema.
Ler o valor
Se o número é par então
Informar que o número é par
Senão
Informar que o número é ímpar

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 39


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

6.2 Descreva o algoritmo em Portugol para a solução do problema.


algoritmo "ParImpar"
// Função : Este algopritmop informa se um número é par ou ímpar
// Autor : Maurício Capobianco Lopes
// Data : 15/3/2006
var
numero : inteiro
inicio
//ler o número
escreva ("Digite um número: ")
leia (numero)
//verificar se o número é par ou ímpar
se numero % 2 = 0 entao
escreva ("Número Par")
senao
escreva ("Numero Impar")
fimse
fimalgoritmo
7. TESTES Execute as operações descritas no passo 6, utilizando a base de testes
descrita no passo 4 para verificar se os resultados desejados estão corretos.
Em algumas situações é necessário registrar informações intermediárias para
acompanhar a execução dos passos.
(E) numero: 5 (S) “Ímpar”
(E) numero: 10 (S) “Par”
(E) numero: 5786 (S) “Par”
8. OTIMIZAÇÃO Reveja a solução proposta, mesmo se estiver correta, para eliminar eventuais
possibilidades de erro e melhorar a maneira de descrever ou o modo como
está sendo feito. Uma solução eficiente deve usar menos memória possível e
ser a mais rápida possível. Caso encontre possibilidades de melhoria retorne
ao passo 6.

2. Dados dois números inteiros descreva um algoritmo para informar o maior


valor entre eles.
1. PROBLEMA Verifique atentamente se o problema está bem definido, se não há
ambigüidades ou informações incompletas e irrelevantes.
(INTERPRETAÇÃO)
Dados dois números inteiros descreva um algoritmo para informar o
maior valor entre eles
Destaque aqui as ambigüidades ou informações incompletas
Não há previsão para a situação dos dois serem iguais. Neste caso
será apresentada uma mensagem informando sobre a igualdade.
2. DADOS DE Identifique e descreva os dados ou recursos (substantivos) disponíveis para a
solução do problema.
ENTRADA
Valor1
Valor2
3. DADOS DE SAÍDA Identifique e descreva os resultados desejados para o problema, procurando
observar se todas as entradas ou recursos necessários estão disponíveis.
Maior Valor ou mensagem se são iguais.
4. BASE DE TESTES Defina um conjunto de informações de entrada com suas respectivas saídas,
visando montar uma base de testes para o problema.
(E) Valor 1: 5 – Valor 2: 6 (S) Maior = 6
(E) Valor 1: 9 – Valor 2: -8 (S) Maior = 9
(E) Valor 1: 6 – Valor 2: 6 (S) “Valores iguais”
5. PROCESSAMENTO Identifique os verbos que indiquem as operações que devem ser realizadas
para a solução do problema.
Identifique se há a necessidade de uso de estruturas de seleção e que tipo de
avaliação deve ser feita.
5.1 Operações a serem realizadas
Informar o maior valor

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 40


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

5.2 Uso de estruturas de seleção


Comparar os valores
6. DESCRIÇÃO DO Descreva a seqüência de instruções necessárias para a solução do problema.
ALGORITMO
6.1 Descreva os passos gerais para a solução do problema.
Ler os valores (valor1 e valor2)
Se o valor1 é maior do que o valor2 então
Informar valor1
Senão
Se valor2 é maior do que o valor1 então
Informar o valor2
Senão
Informar que os valores são iguais.
6.2 Descreva o algoritmo em Portugol para a solução do problema.
algoritmo "maior"
// Função : Algoritmo para informar o maior entre 2 valores
// Autor : Mauricio Capobianco Lopes
// Data : 15/3/2006
var
valor1, valor2 : inteiro
inicio
//ler os valores
escreva ("Informe o primeiro valor: ")
leia (valor1)
escreva ("Informe o segundo valor: ")
leia (valor2)
//comparar os valores
se (valor1 > valor2) entao
escreva ("Maior = ", valor1)
senao
se (valor2 > valor1) entao
escreva ("Maior = ", valor2)
senao
escreva ("Os valores são iguais")
fimse
fimse
fimalgoritmo
7. TESTES Execute as operações descritas no passo 6, utilizando a base de testes
descrita no passo 4 para verificar se os resultados desejados estão corretos.
Em algumas situações é necessário registrar informações intermediárias para
acompanhar a execução dos passos.
(E) Valor 1: 5 – Valor 2: 6 (S) Maior = 6
(E) Valor 1: 9 – Valor 2: -8 (S) Maior = 9
(E) Valor 1: 6 – Valor 2: 6 (S) “Valores iguais”
8. OTIMIZAÇÃO Reveja a solução proposta, mesmo se estiver correta, para eliminar eventuais
possibilidades de erro e melhorar a maneira de descrever ou o modo como
está sendo feito. Uma solução eficiente deve usar menos memória possível e
ser a mais rápida possível. Caso encontre possibilidades de melhoria retorne
ao passo 6.

3. Um aluno está em dúvida sobre o título que vai receber após concluir seu
curso de graduação. Considerando que o sistema apresenta 3 cursos
disponíveis (1 – Ciência da Computação, 2 – Licenciatura da Computação
e 3 – Sistemas de Informação) descreva um algoritmo para ler a opção do
aluno e escrever uma mensagem informando o título que o aluno vai
receber caso opte por aquele curso. As titulações são respectivamente:

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 41


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

“Bacharel em Ciência da Computação”, “Licenciado em Computação” e


“Bacharel em Sistemas de Informação”.
1. PROBLEMA Verifique atentamente se o problema está bem definido, se não há
ambigüidades ou informações incompletas e irrelevantes.
(INTERPRETAÇÃO)
Um aluno está em dúvida sobre o título que vai receber após
concluir seu curso de graduação. Considerando que o sistema
apresenta 3 cursos disponíveis (1 – Ciência da Computação, 2 –
Licenciatura da Computação e 3 – Sistemas de Informação) descreva
um algoritmo para ler a opção do aluno e escrever uma mensagem
informando o título que o aluno vai receber caso opte por aquele
curso. As titulações são respectivamente: “Bacharel em Ciência da
Computação”, “Licenciado em Computação” e “Bacharel em Sistemas de
Informação”.
Destaque aqui as ambigüidades ou informações incompletas
Não está claro se os nomes e as titulações dos cursos são fixos ou
devem ser digitados. Trataremos as informações como sendo fixas.
2. DADOS DE Identifique e descreva os dados ou recursos (substantivos) disponíveis para a
solução do problema.
ENTRADA
Opção de curso
3. DADOS DE SAÍDA Identifique e descreva os resultados desejados para o problema, procurando
observar se todas as entradas ou recursos necessários estão disponíveis.
Titulação
4. BASE DE TESTES Defina um conjunto de informações de entrada com suas respectivas saídas,
visando montar uma base de testes para o problema.
(E) 1 (S) “Bacharel em Ciência da Computação”
(E) 2 (S) “Licenciado em Computação”
(E) 3 (S) “Bacharel em Sistemas de Informação”
5. PROCESSAMENTO Identifique os verbos que indiquem as operações que devem ser realizadas
para a solução do problema.
Identifique se há a necessidade de uso de estruturas de seleção e que tipo de
avaliação deve ser feita.
5.1 Operações a serem realizadas
Informar o título do aluno de acordo com o curso desejado
5.2 Uso de estruturas de seleção
Testar qual é o curso desejado
6. DESCRIÇÃO DO Descreva a seqüência de instruções necessárias para a solução do problema.
ALGORITMO
6.1 Descreva os passos gerais para a solução do problema.
Escrever os nomes dos cursos
Ler a opção
Se o curso é Ciência da Computação então
Informar o título de Bacharel em Ciência da Computação
Senao
Se o curso é Licenciatura em Computação então
Informar o título de Licenciado em Computação
Senao
Informar o título de bacharel em Sistemas de Informação
6.2 Descreva o algoritmo em Portugol para a solução do problema.
algoritmo "Titulo"
// Função : Este algopritmo informa o título de um aluno de acordo
com o curso
// escolhido.
// Autor : Maurício Capobianco Lopes
// Data : 15/3/2006
var

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 42


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

opcao : inteiro
inicio
//escrever as opções de curso
escreval ("1 - Ciência da Computação")
escreval ("2 - Licenciatura em Computação")
escreval ("3 - Sistemas de Informação")
//ler a opção do curso
escreva ("Digite o número do curso desejado: ")
leia (opcao)
//verificar a opcao desejada e escrever a titulação
escolha opcao
caso 1
escreva ("Bacharel em Ciência da Computação")
caso 2
escreva ("Licenciado em Computação")
caso 3
escreva ("Bacharel em Sistemas de Informação")
outrocaso
escreva ("Opção indisponível")
fimescolha
fimalgoritmo
7. TESTES Execute as operações descritas no passo 6, utilizando a base de testes
descrita no passo 4 para verificar se os resultados desejados estão corretos.
Em algumas situações é necessário registrar informações intermediárias para
acompanhar a execução dos passos.
(E) opcao = 1 (S) “Bacharel em Ciência da Computação”
(E) opcao = 2 (S) “Licenciado em Computação”
(E) opcao = 3 (S) “Bacharel em Sistemas de Informação”
8. OTIMIZAÇÃO Reveja a solução proposta, mesmo se estiver correta, para eliminar eventuais
possibilidades de erro e melhorar a maneira de descrever ou o modo como
está sendo feito. Uma solução eficiente deve usar menos memória possível e
ser a mais rápida possível. Caso encontre possibilidades de melhoria retorne
ao passo 6.

Exercícios Propostos

1. Determine o resultado da execução dos algoritmos abaixo, sendo os


valores das variáveis a, b e c iguais a 1, 3 e 15, respectivamente. Quantas
e quais expressões lógicas são avaliadas?
algoritmo "exercicio_2a" algoritmo "exercicio_2b"
var var
a, b, c, max : inteiro a, b, c, max : inteiro
inicio inicio
escreval ("Digite três escreval ("Digite três
valores:") valores:")
leia (a, b, c) leia (a, b, c)
se a > b entao se (a > b) e (a > c) entao
se a > c entao max <- a
max <- a fimse
senao se (b > a) e (b > c) entao
max <- c max <- b
fimse fimse
senao se (c > a) e (c > b) entao
se b > c entao max <- c

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 43


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

max <- b fimse


senao escreva ("maior valor entre ",
max <- c a, b, c, " = ", max)
fimse fimalgoritmo
fimse
escreva ("maior valor entre ",
a, b, c, " = ", max)
fimalgoritmo
2. Dado uma letra descreva um algoritmo que informe se ela é ou não uma
vogal.
3. Dados dois valores inteiros descreva um algoritmo que informe se eles são
múltiplos ou não.
4. Dados 3 valores descreva um algoritmo que informe o seu conteúdo a
partir de um menu de opções da seguinte maneira: se a opção digitada for
1 escreva o primeiro número, se a opção for 2 escreva o segundo número,
se a opção for 3 escreva o terceiro e se a opção for outro valor qualquer
escreva “opção inválida”.
5. Dados 3 valores, descreva um algoritmo que informe-os em uma
determinada ordem a partir de um menu de opções:
c) se opção = 1, escreva os 3 valores em ordem crescente
d) se opção = 2, escreva os 3 valores a, b, c em ordem decrescente
e) se opção = 3, escreva os 3 valores de forma que o maior valor entre
a, b, c fique entre os outros 2.
6. Dado um caracter indicando uma opção, descreva um algoritmo para:
a) se opção = ‘T’: calcular a área de um triângulo de base b e altura h;
b) se opção = ‘Q’: calcular a área de um quadrado de lado l;
c) se opção = ‘R’: calcular a área de um retângulo de base b e altura h;
d) se opção = ‘C’: calcular a área de um círculo de raio r;
7. Dados 3 valores x, y, z, descreva um algoritmo que verifique se os
mesmos podem ser os comprimentos dos lados de um triângulo. Em caso
afirmativo, verifique e informe se é ‘triângulo eqüilátero’, ‘triângulo
isósceles’ ou ‘triângulo escaleno’. Em caso negativo, informe que os
mesmos não formam um triângulo. Considere que:
a) o comprimento de cada lado de um triângulo é menor que a soma
dos comprimentos dos outros lados
b) um triângulo eqüilátero tem três lados iguais
c) um triângulo isósceles tem dois lados iguais e um diferente
d) um triângulo escaleno tem três lados diferentes
8. Dados 3 valores x, y, z, descreva um algoritmo que verifique se os
mesmos podem ser os comprimentos dos lados de um triângulo. Em caso
afirmativo, verifique e informe se é ou não é ‘triângulo retângulo’ (h2= a2
+ b2). Em caso negativo, informe que os mesmos não formam um
triângulo.
9. Uma empresa decidiu conceder um aumento de salário a seus funcionários
de acordo com a seguinte tabela:

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 44


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

Salário em R$ Índice de Aumento


salário ≤ 400.00 15%
400.00 < salário ≤ 700.00 12%
700.00 < salário ≤ 1000.00 10%
1000.00 < salário ≤ 1500.00 7%
1500.00 < salário ≤ 2000.00 4%
salário > 2000.00 sem aumento
Descreva um algoritmo que dado o salário atual informe o índice de
aumento e o valor do novo salário.
10. Dada a hora e os minutos de início e a hora e os minutos do final do jogo
(considerando apenas horas inteiras), descreva um algoritmo para
calcular sua duração em horas e minutos, sabendo que o tempo máximo
de duração do jogo é de 24 horas e que o jogo pode iniciar em um dia e
terminar no dia seguinte.
11. Dadas 3 notas obtidas por um aluno em 3 provas e a média dos
exercícios, descreva um algoritmos que calcule a média de
aproveitamento e o conceito do aluno, usando a fórmula:
média de aproveitamento = (notaProva1 + notaProva2 * 2 + notaProva3
* 3 + notaExercicios) / 7
A atribuição dos conceitos obedece à tabela abaixo:
média de aproveitamento conceito
>= 9.0 A
>= 7.5 e < 9.0 B
>= 6.0 e < 7.5 C
>= 4.0 e < 6.0 D
< 4.0 E
O algoritmo deve escrever a média de aproveitamento, o conceito
correspondente e a mensagem ‘aprovado’ caso o conceito seja A, B ou C,
e ‘reprovado’ caso o conceito seja D ou E.
12. O departamento do meio ambiente mantém 3 listas (lista A, lista B e lista
C) de indústrias conhecidas por serem altamente poluentes da atmosfera.
Os resultados de várias medidas são combinados para formar o que é
chamado de “índice de poluição”. Isso é controlado regularmente.
Normalmente os valores caem entre 0.05 e 0.25. Se o valor atingir 0.30,
as indústrias da lista A serão chamadas a suspender as operações até que
os valores retornem ao intervalo normal. Se o índice atingir 0.40, as
indústrias da lista B serão notificadas também. Se o índice exceder 0.50,
indústrias de todas as 3 listas serão avisadas para suspenderem as
atividades. Faça um algoritmo para ler o índice de poluição e indicar as
notificações apropriadas.
13. Dado o sexo e altura de uma pessoa descreva um algoritmo para calcular
seu peso ideal, considerando que para homens o peso ideal é igual a (72,7
* altura) - 58 e para mulheres o peso ideal é igual a (62.1 * altura) -
44.7.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 45


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

14. Dada a idade de um nadador descreva um algoritmo que o classifique em


das seguintes categorias:
pré-mirim 5 - 7 anos
mirim 8 - 10 anos
infantil 11 - 13 anos
infanto-juvenil 14 - 17 anos
juvenil 18 - 20 anos
adulto maiores de 21 anos
15. Descreva um algoritmo que leia um número inteiro representando um
determinado mês do ano e escreva o mês por extenso. Para valores
menores do que 1 ou maiores do que 12 informe que o valor não é válido.
16. Descreva o objetivo do algoritmo abaixo. Estabeleça valores para as
variáveis a, b e operador e informe qual o valor armazenado na variável
resultado. Reescreva o algoritmo abaixo usando o comando de seleção
ESCOLHA.
algoritmo "exercício"
var
operador : caracter
a , b, resultado : real
inicio
leia (operador, a, b)
se operador = "+" entao
resultado:= a + b
senao
se operador = "-" entao
resultado:= a - b
senao
se operador = "*" entao
resultado:= a * b
senao
se operador = "/" entao
resultado:= a / b
fimse
fimse
fimse
fimse
escreva (resultado)
fimalgoritmo
17. Dado o algoritmo abaixo:
algoritmo "exercicio"
var
nro : inteiro
inicio
leia (nro)
se (nro % 2 = 0) e (nro > 0) entao
nro <- nro \ 2
senao
se (nro % 2 <> 0) entao
nro <- nro -1

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 46


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

escolha nro
caso 1 ate 5
nro <- nro * 2
caso 10 ate 50
nro <- nro % 2
outrocaso
se (nro > 50) entao
nro <- nro \ 10
senao
nro <- nro * (-1)
fimse
fimescolha
fimse
fimse
escreva ("nro.: ", nro)
fimalgoritmo
Quais valores serão escritos considerando que o valor armazenado na
variável nro pode ser 10, 101 e –10?.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 47


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

5 Estruturas de Controle em Nível de Instrução


– Repetição
• As estruturas de repetição permitem que um grupo
de comandos (instruções) seja executado um
determinado número de vezes.
• As estruturas de repetição também são chamadas de
laços.
• As estruturas de repetição podem ser: condicionais
(enquanto-faça ou repita-até) ou com contador (para-
faça).

Repetição com Contador (Para-faça)

• As estruturas de repetição com contador permitem a


execução de um grupo de comandos num determinado
número conhecido de vezes.
Exemplos:
Para 10 carros faça
lave o carro

Para 5 bombons faça


coma o bombom

Para 40 alunos faça


calcule a média do aluno

• Sintaxe em Portugol (VisuAlg)


para <variável-de-controle> de <valor-inicial>
ate <valor-final> [passo <incremento>] faca
<seqüência-de-comandos>
fimpara

- variável-de-controle: é a variável que controla o número


de repetições do laço;

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 48


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

- valor-inicial: é uma expressão que especifica o valor de


inicialização da variável de controle;

- valor-final: é uma expressão que especifica o valor


máximo que a variável de controle pode alcançar.

- incremento: é uma expressão que especifica o


incremento que será acrescentado à variável de controle
em cada repetição do laço. Seu valor padrão é 1. É
opcional.

• No VisuAlg a variável de controle, bem como, a


expressão para o valor inicial, para o valor final e para
o incremento devem ser do tipo inteiro.
• Exemplo simplificado para ler e escrever o nome de 10
alunos:
para contador de 1 ate 10 faca
leia (nome)
escreva (nome)
fimpara

Repetição Condicional

• As estruturas de repetição condicionais avaliam uma


determinada condição lógica para fazer a execução do
laço de repetição.
• A condição sempre será avaliada como verdadeira ou
falsa.
• As estruturas condicionais mais comuns são: enquanto-
faça e repita-até.
Exemplos:
Enquanto tem carros para lavar faça
lave o carro

Enquanto tem bombons para comer faça


coma o bombom

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 49


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

Enquanto não encontrei o livro na biblioteca


faça
procure em outra estante

Repita
calcule a média do aluno
Até não ter mais alunos

Enquanto-faça
• A estrutura enquanto-faça executa um conjunto de
instruções enquanto a expressão lógica for avaliada
como verdadeira.
• Sintaxe em Portugol (VisuAlg)
enquanto <expressão-lógica> faca
<seqüência-de-comandos>
fimenquanto

- expressão-lógica: é a expressão avaliada antes de cada


repetição do laço. Quando seu resultado for
VERDADEIRO, <seqüência-de-comandos> é executada.
Na expressão lógica podem ser usados os operadores
lógicos NAO, E ou OU.

• Exemplo simplificado para ler e escrever o nome de


alunos:
leia(nome)
enquanto nome <> “fim” faca
escreva (nome)
leia (nome)
fimenquanto

• No exemplo apresentado pode ser observado o uso de


um flag (“fim”). O flag indica o fim de um determinado
conjunto de dados.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 50


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

Repita-até
• A estrutura repita-até executa um conjunto de
instruções até que a expressão lógica seja avaliada
como verdadeira.
• Sintaxe em Portugol (VisuAlg)
repita
<seqüência-de-comandos>
ate <expressão-lógica>

- expressão-lógica: é a expressão avaliada após cada


repetição do laço. Quando seu resultado for FALSO
<seqüência-de-comandos> é executada. Na expressão
lógica podem ser usados os operadores lógicos NAO, E
ou OU.

• Como a expressão lógica está após a seqüência de


comandos, isto garante que os comandos sejam
executados pelo menos uma vez.
• Exemplo simplificado para ler e escrever o nome de
alunos:
repita
leia(nome)
escreva (nome)
ate nome = “fim”

• No exemplo apresentado deve ser observado que


também o nome “fim” será apresentado.

Exercícios Resolvidos

1. Descreva um algoritmo para escrever a tabuada de um determinado


número fornecido pelo usuário.
1. PROBLEMA Verifique atentamente se o problema está bem definido, se não há
ambigüidades ou informações incompletas e irrelevantes.
(INTERPRETAÇÃO)
Descreva um algoritmo para escrever a tabuada de um determinado
número fornecido pelo usuário.
Destaque aqui as ambigüidades ou informações incompletas
Não há.
2. DADOS DE Identifique e descreva os dados ou recursos (substantivos) disponíveis para a
solução do problema.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 51


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

ENTRADA
Número
3. DADOS DE SAÍDA Identifique e descreva os resultados desejados para o problema, procurando
observar se todas as entradas ou recursos necessários estão disponíveis.
Tabuada do número
4. BASE DE TESTES Defina um conjunto de informações (no mínimo 3) de entrada com suas
respectivas saídas, visando montar uma base de testes para o problema.
(E) 5
(S) 5x1=5 5x2=10 5x3=15 5x4=20 5x5=25 5x6=30 5x7=35 5x8=40 5x9=45
5x10=50
5. PROCESSAMENTO Identifique os verbos que indiquem as operações que devem ser realizadas
para a solução do problema.
Identifique se há a necessidade de uso de estruturas de seleção e que tipo de
avaliação deve ser feita.
Identifique se há a necessidade de uso de estruturas de repetição e o número
ou as condições de ocorrência das repetições.
5.1 Operações a serem realizadas
Calcular a tabuada do número
5.2 Uso de estruturas de seleção
Não é necessário
5.3 Uso de estruturas de repetição
Repetição de 1 a 10 para multiplicação do número
6. DESCRIÇÃO DO Descreva a seqüência de instruções necessárias para a solução do problema.
ALGORITMO
6.1 Descreva os passos gerais para a solução do problema.
Ler numero
Para contador de 1 a 10 faça
Escrever a multiplicação do contador pelo número
6.2 Descreva o algoritmo em Portugol para a solução do problema.
algoritmo "tabuada"
// Este algoritmo escreve a tabuada de um número
// Autor : Mauricio capobianco Lopes
// Data : 28/3/2006

var
numero, contador : inteiro
inicio
//ler número
escreva ("Informe o número para calcular sua tabuada ")
leia (numero)
//para valores de 1 a 10
para contador de 1 ate 10 faca
//calcular e escrever a tabuada do número
escreval (numero:2, " X ", contador:2, " = ", numero *
contador:3)
fimpara
fimalgoritmo
7. TESTES Execute as operações descritas no passo 6, utilizando a base de testes
descrita no passo 4 para verificar se os resultados desejados estão corretos.
Em algumas situações é necessário registrar informações intermediárias para
acompanhar a execução dos passos.
Numero = 5
Contador Mensagem
1 5 X 1 = 5
2 5 X 2 = 10
3 5 X 3 = 15
4 5 X 4 = 20

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 52


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

5 5 X 5 = 25
6 5 X 6 = 30
7 5 X 7 = 35
8 5 X 8 = 40
9 5 X 9 = 45
10 5 X 10 = 50
8. OTIMIZAÇÃO Reveja a solução proposta, mesmo se estiver correta, para eliminar eventuais
possibilidades de erro e melhorar a maneira de descrever ou o modo como
está sendo feito. Uma solução eficiente deve usar menos memória possível e
ser a mais rápida possível. Caso encontre possibilidades de melhoria retorne
ao passo 6.

2. Dada uma turma de alunos, contendo seu nome e nota de duas provas
descreva um algoritmo para informar a média de cada aluno. Considere
que a leitura dos dados deve ser finalizada quando o nome do aluno for
“fim”.
1. PROBLEMA Verifique atentamente se o problema está bem definido, se não há
ambigüidades ou informações incompletas e irrelevantes.
(INTERPRETAÇÃO)
Dada uma turma de alunos, contendo seu nome e nota de duas provas
descreva um algoritmo para informar a média de cada aluno.
Considere que a leitura dos dados deve ser finalizada quando o nome
do aluno for “fim”.
Destaque aqui as ambigüidades ou informações incompletas
Não há a fórmula do cálculo da média. Será usada media aritmética.
2. DADOS DE Identifique e descreva os dados ou recursos (substantivos) disponíveis para a
solução do problema.
ENTRADA
Nome e duas notas de alunos
3. DADOS DE SAÍDA Identifique e descreva os resultados desejados para o problema, procurando
observar se todas as entradas ou recursos necessários estão disponíveis.
Média de cada aluno
4. BASE DE TESTES Defina um conjunto de informações (no mínimo 3) de entrada com suas
respectivas saídas, visando montar uma base de testes para o problema.
(E) João 5.0 6.0 (S) 5.5
(E) Pedro 10.0 7.0 (S) 8.5
(E) Maria 7.0 5.0 (S) 6.0
(E) José 8.0 6.0 (S) 7.0
(E) Ana 9.0 10.0 (S) 9.5
(E) fim
5. PROCESSAMENTO Identifique os verbos que indiquem as operações que devem ser realizadas
para a solução do problema.
Identifique se há a necessidade de uso de estruturas de seleção e que tipo de
avaliação deve ser feita.
Identifique se há a necessidade de uso de estruturas de repetição e o número
ou as condições de ocorrência das repetições.
5.1 Operações a serem realizadas
Calcular a média de uma turma de alunos
5.2 Uso de estruturas de seleção
Não é necessário
5.3 Uso de estruturas de repetição
Repetição da leitura dos dados dos alunos até encontrar o nome
“fim”
6. DESCRIÇÃO DO Descreva a seqüência de instruções necessárias para a solução do problema.
ALGORITMO
6.1 Descreva os passos gerais para a solução do problema.
Ler nome
Enquanto nome <> “fim” faça
Ler notas
Calcular a média

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 53


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

Informar a média
Ler outro nome
6.2 Descreva o algoritmo em Portugol para a solução do problema.
algoritmo "media"
// Este algoritmo informa a média de uma turma de alunos dadas 2 //
notas
// Autor : Mauricio Capobianco Lopes
// Data : 28/3/2006
var
nome : caracter
nota1, nota2, media : real
inicio
//ler nome do aluno
escreva ("Digite o nome do aluno: ")
leia (nome)
//enquanto não for digitado nome "fim" faça
enquanto nome <> "fim" faca
//ler notas dos alunos
escreva ("Digite a primeira nota do aluno: ")
leia (nota1)
escreva ("Digite a segunda nota do aluno: ")
leia (nota2)
//calcular a media
media <- (nota1 + nota2) / 2
//calcular e escrever a média do aluno
escreval ("Média = ", media:4:1)
//ler nome de outro aluno
escreva ("Digite o nome do aluno: ")
leia (nome)
fimenquanto
fimalgoritmo
7. TESTES Execute as operações descritas no passo 6, utilizando a base de testes
descrita no passo 4 para verificar se os resultados desejados estão corretos.
Em algumas situações é necessário registrar informações intermediárias para
acompanhar a execução dos passos.
Nome nota1 nota2 media
João 5.0 6.0 5.5
Pedro 10.0 7.0 8.5
Maria 7.0 5.0 6.0
José 8.0 6.0 7.0
Ana 9.0 10.0 9.5
Fim
8. OTIMIZAÇÃO Reveja a solução proposta, mesmo se estiver correta, para eliminar eventuais
possibilidades de erro e melhorar a maneira de descrever ou o modo como
está sendo feito. Uma solução eficiente deve usar menos memória possível e
ser a mais rápida possível. Caso encontre possibilidades de melhoria retorne
ao passo 6.

3. Dados 3 valores, descreva um algoritmo que a partir de um menu de


opções faça:
a) se opção = 1, escreva o maior valor
b) se opção = 2, escreva o menor valor
c) se opção = 3, escreva se existem valores iguais
d) se opção = 4, saia do programa
1. PROBLEMA Verifique atentamente se o problema está bem definido, se não há
ambigüidades ou informações incompletas e irrelevantes.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 54


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

(INTERPRETAÇÃO)
Dados 3 valores, descreva um algoritmo que a partir de um menu de
opções faça:
a) se opção = 1, escreva o maior valor
b) se opção = 2, escreva o menor valor
c) se opção = 3, escreva se existem valores iguais
d) se opção = 4, saia do programa
Destaque aqui as ambigüidades ou informações incompletas
Não há.
2. DADOS DE Identifique e descreva os dados ou recursos (substantivos) disponíveis para a
solução do problema.
ENTRADA
Três valores e a opção
3. DADOS DE SAÍDA Identifique e descreva os resultados desejados para o problema, procurando
observar se todas as entradas ou recursos necessários estão disponíveis.
O maior, o menor ou se existem valores iguais, dependendo da opção
selecionada
4. BASE DE TESTES Defina um conjunto de informações (no mínimo 3) de entrada com suas
respectivas saídas, visando montar uma base de testes para o problema.
(E) Valor1 = 7.0 Valor2 = 4.0 Valor3 = 8.0
(E) Opção = 1 (S) 8.0
(E) Opção = 2 (S) 4.0
(E) Opção = 3 (S) “não existem valores iguais”
(E) Valor1 = 9.0 Valor2 = 9.0 Valor3 = 6.0
(E) Opção = 1 (S) 9.0
(E) Opção = 2 (S) 6.0
(E) Opção = 3 (S) “existem valores iguais”
5. PROCESSAMENTO Identifique os verbos que indiquem as operações que devem ser realizadas
para a solução do problema.
Identifique se há a necessidade de uso de estruturas de seleção e que tipo de
avaliação deve ser feita.
Identifique se há a necessidade de uso de estruturas de repetição e o número
ou as condições de ocorrência das repetições.
5.1 Operações a serem realizadas
Informar ou maior, o menor ou se existem valores iguais
5.2 Uso de estruturas de seleção
Verificar o maior
Verificar o menor
Verificar se existem valores iguais
5.3 Uso de estruturas de repetição
Repetição para a leitura da opção informada pelo usuário
6. DESCRIÇÃO DO Descreva a seqüência de instruções necessárias para a solução do problema.
ALGORITMO
6.1 Descreva os passos gerais para a solução do problema.
Ler 3 números
Repita
Escrever o menu de opções
Ler opção
Escolher opção
1 : Verificar o maior valor
(REFINAMENTO:
Se o primeiro valor é maior que o segundo e o
terceiro valores então
Escrever o primeiro valor
Senão
Se o segundo é maior que o terceiro então
Escrever o segundo valor

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 55


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

Senão
Escrever o terceiro valor
)
2 : Verificar o menor valor
(REFINAMENTO: idem ao maior comparando com o menor )
3 : Verificar se existem valores iguais
(REFINAMENTO:
Se o primeiro valor é igual ao segundo ou o segundo é
igual ao terceiro ou o primeiro é igual ao terceiro então
“Existem valores iguais”
Senão
“Não existem valores iguais”
)
Até opção = 4
6.2 Descreva o algoritmo em Portugol para a solução do problema.
algoritmo "opcoes"
// Dados 3 valores, descreva um algoritmo que a partir de um menu
de opções faça:
// a) se opção = 1, escreva o maior valor
// b) se opção = 2, escreva o menor valor
// c) se opção = 3, escreva se existem valores iguais
// d) se opção = 4, saia do programa
// Autor : Mauricio Capobianco Lopes
// Data : 28/3/2006

var
valor1, valor2, valor3, opcao : inteiro
inicio
//ler os valores
escreva ("Digite o primeiro valor: ")
leia (valor1)
escreva ("Digite o segundo valor: ")
leia (valor2)
escreva ("Digite o terceiro valor: ")
leia (valor3)
//repetir para leitura das opções
repita
//montar o menu
escreval ("1 - Maior valor")
escreval ("2 - Menor valor")
escreval ("3 - Valores iguais")
escreval ("4 - Sair do programa")
//ler a opção
leia (opcao)
//escolher opcao
escolha opcao
caso 1
//procurar o maior valor
se (valor1 > valor2) e (valor1 > valor3) entao
escreval ("Maior = ", valor1)
senao
se (valor2 > valor3) entao
escreval ("Maior = ", valor2)

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 56


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

senao
escreval ("Maior = ", valor3)
fimse
fimse
caso 2
//procurar o menor valor
se (valor1 < valor2) e (valor1 < valor3) entao
escreval ("Menor = ", valor1)
senao
se (valor2 > valor3) entao
escreval ("Menor = ", valor2)
senao
escreval ("Menor = ", valor3)
fimse
fimse
caso 3
//verificar se existem iguais
se (valor1 = valor2) ou (valor1 = valor3) ou (valor2 =
valor3) entao
escreval ("Existem valores iguais")
senao
escreval ("Não existem valores iguais")
fimse
fimescolha
//terminar quando for digitada a opcao 4
ate opcao = 4
fimalgoritmo
7. TESTES Execute as operações descritas no passo 6, utilizando a base de testes
descrita no passo 4 para verificar se os resultados desejados estão corretos.
Em algumas situações é necessário registrar informações intermediárias para
acompanhar a execução dos passos.
Valor1 = 7.0 Valor2 = 4.0 Valor3 = 8.0
Opção = 1 - Maior = 8.0
Opção = 2 – Menor = 4.0
Opção = 3 - “Não existem valores iguais”
Valor1 = 9.0 Valor2 = 9.0 Valor3 = 6.0
Opção = 1 – Maior = 9.0
Opção = 2 – Menor = 6.0
Opção = 3 - “Existem valores iguais”
8. OTIMIZAÇÃO Reveja a solução proposta, mesmo se estiver correta, para eliminar eventuais
possibilidades de erro e melhorar a maneira de descrever ou o modo como
está sendo feito. Uma solução eficiente deve usar menos memória possível e
ser a mais rápida possível. Caso encontre possibilidades de melhoria retorne
ao passo 6.

Exercícios Propostos

1. Em cada um dos seguintes segmentos de algoritmo, indicar se a repetição


termina ou não. Em caso negativo, indicar porque. Mostre também os
valores armazenados em cada uma das variáveis. Assuma que todas as
variáveis são do tipo INTEIRO.
a)
contador ←1

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 57


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

total ← 0
repita
total ← total + 1
escreva (total)
ate contador < 0
b)
contador ← 0
total ← 0
repita
total ← total + 2
contador ← contador + 1
ate contador > 10
escreva (total)
c)
repita
escreva (“a repetição pára?”)
ate 3 < 2
d)
numero ← 45
repita
escreva (número)
ate número = 100
e)
número ← 45
repita
escreva (número)
ate número <= 100
2. Quais valores serão escritos durante a execução dos algoritmos abaixo:
a)
algoritmo “exercício”
var
a, q, termo : inteiro
inicio
a <- 1
q <- 4
termo <- a
repita
escreva (termo)
termo <- termo * q
ate termo >= 200
fimalgoritmo
b)
algoritmo "exercício_1a"
var
numero, soma, qdo : real
inicio
numero <- 0
soma <- 0
enquanto numero < 10 faca

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 58


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

numero <- numero + 1


qdo <- numero^2
escreva (numero, qdo)
soma <- soma + qdo
fimenquanto
escreva (soma)
fimalgoritmo
c)
algoritmo "exercício_1b"
var
x, y : inteiro
inicio
x <- 1
y <- 0
enquanto y < 6 faca
x <- x * (- 1)
y <- y + 1
se x > 0 entao
escreva (y)
senao
escreva (-y)
fimse
fimenquanto
fimalgoritmo
3. Descreva um algoritmo que calcule e escreva a soma da seguinte série de
100 termos:
1 + 2 + 3 + 4 + 5 ... + 100
4. Descreva um algoritmo que calcule e escreva a soma da seguinte série de
100 termos:
1 + 1 + 1 + 1 + . . . + 1 .
1 2 3 4 100
5. A série de Fibonacci é formada pela seqüência:
1, 1, 2, 3, 5, 8, 13, ...
Descreva um algoritmo que escreva a série até o n-ésimo termo. O valor
n deve ser lido e deve ser maior do que 2.
6. Descreva um algoritmo para calcular o valor de S dado por:
S = 3 + 5 + 7 + 9 + 11 + ...
2 6 12 20 30
Considere os 20 primeiros termos da série.
7. Descreva um algoritmo que escreva os n primeiros termos da seguinte
seqüência de números
8, 10, 16, 18, 32, 34, 64 ....
O valor n deve ser lido e deve ser maior do que 2.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 59


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

8. Descreva um algoritmo que leia 20 números inteiros e escreva, para cada


número lido, se o mesmo é par ou ímpar.
9. Descreva um algoritmo que calcule e escreva a soma dos números pares e
a soma dos números ímpares entre 1 e 100.
10. Descreva um algoritmo que leia a altura de 20 pessoas e calcule a média
de altura das mesmas.
11. Dados 20 números inteiros, descreva um algoritmo que:
a) escreva o menor valor negativo;
b) escreva a média dos números positivos.
12. Faça um algoritmo que leia n números inteiros e escreva, para cada
número lido, os divisores e quantidade de divisores.
EXEMPLO: número lido = 12
divisores = 1, 2, 3, 4, 6, 12
quantidade divisores = 6
A leitura deve ser finalizada quando for digitado o valor 0.
13. Uma turma tem 50 alunos. Dado o nome e idade de cada aluno descreva
um algoritmo que:
a) escreva os nomes dos alunos que tem 18 anos;
b) escreva a quantidade de alunos que tem idade acima de 20 anos.
14. Dado um determinado grupo de pessoas, descreva um algoritmo que a
partir da altura e do sexo (sexo = 'M' ou sexo = 'm' para masculino e sexo
= 'F' e sexo = 'f' para feminino) de cada pessoa informe a média da altura
das mulheres e a média de altura do grupo.
A leitura deve ser finalizada com o flag 0 para a altura.
15. Descreva um algoritmo que leia n pares de valores, sendo o primeiro valor
o número de inscrição de um atleta em uma competição e o segundo a
altura (em cm) do atleta e informe:
a) o número de inscrição e a altura do atleta mais alto;
b) o número de inscrição e a altura do atleta mais baixo;
c) a altura média do grupo de atletas.
A leitura deve ser finalizada com o flag 0 para o número de inscrição.
16. Foi feita uma pesquisa de audiência de canal de TV em n casas de um
determinado bairro de uma cidade, em um certo dia do mês. Na pesquisa
foi utilizado um coletor de dados portátil. Para cada casa visitada, foi
fornecido o número do canal (4, 5, 9, 12) e o número de pessoas que
estavam assistindo a TV naquele horário, considerando que em cada casa
só existia uma televisão. Em casas onde a televisão estava desligada, foi
registrado zero para o número do canal e para o número de pessoas.
Baseado nisto descreva um algoritmo que calcule e escreva, para cada
emissora, o percentual de audiência. O número de casas (n) deve ser
informado.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 60


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

17. Uma máquina de biscoito está com problemas. Quando ligada, após 1
hora ela quebra 1 biscoito, na segunda hora ela quebra 3 biscoitos, na
hora seguinte ela quebra 3 vezes a quantidade de biscoitos quebrados na
hora anterior, e assim por diante. Faça um algoritmo que calcule quantos
biscoitos são quebrados no final de cada dia (a máquina opera 16 horas
por dia).
18. Uma grande loja de departamentos paga aos vendedores um salário com
base nas vendas efetuadas durante o mês, que é igual a 30% de comissão
sobre o preço de cada produto vendido. Cada vendedor, em um
determinado mês, vende n produtos, onde, para cada produto tem-se o
preço unitário e a quantidade vendida. O departamento de pessoal deseja
obter um relatório com: nome, total de vendas (em R$) e salário de cada
vendedor. Descreva um algoritmo que gere o relatório desejado. Para
prosseguir com a entrada de dados o algoritmo deve apresentar a
seguinte mensagem: “deseja digitar os dados de mais um vendedor: s
(SIM) / n (NÃO)?”. O número de produtos (n) de cada vendedor deve ser
informado.
19. Uma loja de departamentos oferece para seus clientes um determinado
desconto de acordo com o valor da compra efetuada. O desconto é de
20% caso o valor da compra seja maior que R$ 500,00 e de 15% caso
seja menor ou igual. Descreva um algoritmo que leia o valor da compra e
escreva o total a pagar a cada compra. Informe também o valor total
recebido pela loja ao final do dia.
A leitura deve ser finalizada com o flag 0 para o valor da compra.
20. Um hotel cobra R$ 50,00 de diária por hóspede e mais uma taxa de
serviços. A taxa de serviços é de:
R$ 7,50 por diária, caso o número de diárias seja menor que 15;
R$ 6,50 por diária, caso o número de diárias seja igual a 15;
R$ 5,00 por diária, caso o número de diárias seja maior que 15.
Descreva um algoritmo que apresente as seguintes opções ao
recepcionista:
1. encerrar a conta de um hóspede
2. verificar número de contas encerradas
3. sair
Caso a opção escolhida seja a primeira, leia o nome e o número de diárias
do hóspede e escreva o nome e total a ser pago. Caso a opção escolhida
seja a segunda, informe o número de hóspedes que deixaram o hotel
(número de contas encerradas). Caso a opção escolhida seja a terceira
finalize a execução do algoritmo.
21. Um determinado material radioativo perde metade de sua massa a cada
50 segundos. Dada a sua massa inicial em Kg, descreva um algoritmo que
determine o tempo necessário para que essa massa se torne menor que
0,5 gramas. Escreva a massa inicial, a massa final e o tempo.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 61


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

22. Um motorista acaba de voltar de um feriado prolongado. Antes de sair de


viagem e imediatamente após retornar, o motorista encheu o tanque do
veículo e registrou as medidas do odômetro. Em cada parada feita durante
a viagem, foi registrado o valor do odômetro e a quantidade de
combustível comprado para reabastecer o veículo (suponha que o tanque
foi enchido a cada parada). Descreva um algoritmo que leia o número
total de reabastecimentos feitos e os dados registrados relativos à compra
de combustível. Calcule e escreva:
a) a quilometragem obtida por litro de combustível em cada parada;
b) a quilometragem média obtida por litro de combustível em toda a
viagem.
23. Em uma disputa de pingue-pongue os pontos são anotados como D, ponto
para o jogador do lado direito, e E, ponto para o jogador do lado esquerdo
da mesa. Descreva um algoritmo que leia o código do ponto de cada
jogada e determine o vencedor. A partida encerra quando:
a) um dos jogadores chegar a 21 pontos e a diferença de pontos entre
os jogadores for maior ou igual a dois;
b) o jogador com mais de 21 pontos conseguir uma diferença de dois
pontos sobre o adversário, caso a primeira condição não seja
atendida.
24. Os regulamentos de uma competição de pesca impõem um limite no peso
total de pesca de um dia. Descreva um algoritmo que leia o limite diário
(em quilogramas) e então leia o peso (em gramas) de cada peixe e
escreva o peso total da pesca obtido até aquele ponto. Quando o limite
diário for excedido escreva uma mensagem e encerre a execução do
algoritmo. Para prosseguir com a entrada de dados de pesos de cada
peixe o algoritmo deve apresentar a seguinte mensagem: “deseja
informar o peso de mais um peixe: s (SIM) / n (NÃO)?”.
25. Um comerciante deseja fazer um levantamento do lucro das 20
mercadorias que comercializa. Para cada mercadoria ele tem o nome, o
preço de compra (PC) e o preço de venda (PV). Descreva um algoritmo
que:
a) escreva quantas mercadorias proporcionam: (lucro < 10%), (10% ≤
lucro ≤ 20%) e (lucro > 20%), onde o percentual de lucro é calculado
da seguinte forma: % = (PV - PC) / PC * 100
b) determine e escreva o valor total de compra e de venda de todas as
mercadorias, assim como o lucro total.
26. O salário bruto mensal dos vendedores de uma revendedora de carros
usados é composto por um salário fixo, mais uma comissão também fixa
para cada carro vendido e mais 5% do valor das vendas por ele
efetuadas. Descreva um algoritmo que leia o valor do salário fixo e o valor
da comissão e, para n vendedores, o número de carros vendidos e o valor
total de suas vendas, e escreva o salário mensal de cada vendedor.
Escreva também quanto a revendedora gasta em folha de pagamento.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 62


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

27. Uma agência de publicidade quer prestar serviços grandes empresas.


Sabendo que para cada empresa tem-se o nome, o número de
funcionários e a categoria, descreva um algoritmo que:
a) informe os dados da empresa com maior número de funcionários
b) informe os dados da empresa com menor número de funcionários;
c) informe o número de médio de funcionários das empresas;
d) informe o percentual de funcionários em cada categoria em relação
ao total de funcionários.
28. Supondo que a população de um país A seja da ordem de 90 milhões de
habitantes com uma taxa anual de crescimento de 3,1% e que a
população de um país B seja de 200 milhões de habitantes com uma taxa
anual de crescimento de 1,5%. Descreva um algoritmo que informe
quantos anos serão necessários para que a população do país A ultrapasse
a do país B, mantidas as taxas atuais de crescimento.
29. Uma emissora de rádio decidiu promover uma eleição para determinar o
melhor conjunto do ano segundo a opinião dos ouvintes. Entraram na
disputa apenas os quatro conjuntos mais solicitados durante o ano. Os
votos são informados através de códigos:
código conjunto
1 Nenhum de Nós
2 CPM22
3 Skank
4 Jota Quest
Descreva um algoritmo que:
a) informe o total de votos para cada grupo;
b) informe o percentual dos votos para cada grupo;
c) informe o grupo vencedor.
O algoritmo deve apresentar ao usuário a seguinte mensagem: mais um
voto: s (SIM) / n (NÃO)? antes de prosseguir com a entrada de dados.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 63


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

6 Estrutura de Dados Homogêneas - Matrizes


• Os problemas computacionais muitas vezes exigem o
armazenamento de grande quantidade de dados em
memória para posterior processamento.
- Exemplo 1: dado o nome de 50 pessoas, escreva estes
dados em ordem alfabética.

 Problema: neste caso criaríamos uma variável para cada


nome? E se fossem 1000 nomes?

- Exemplo 2: uma loja registrou em um dia a quantidade


vendida de cada um de seus 200 produtos. Informe o
código dos produtos que tiveram vendas acima da
média.

 Problema: neste caso criaríamos 200 variáveis, uma para


cada produto?

- Exemplo 3: a loja do exemplo 2 quer fazer um controle


mensal de suas vendas. Para isto ela mantém os dados
de cada um de seus produtos vendidos em cada dia do
mês.

 Problema: quantas variáveis teríamos que criar neste


caso?

- Exemplo 4: um professor tem o código, o nome e as 5


notas de seus 30 alunos em uma disciplina. Informe, em
ordem decrescente de média, todos os dados de cada
aluno.

 Problema: neste caso estamos falando de 30 códigos, 30


nomes e 150 notas, além das 30 médias. Quantas
variáveis teriam que ser criadas para resolver este
problema?

- Exemplo 5: uma pessoa quer ir de uma cidade A até


uma cidade F. Considerando que há vários caminhos
possíveis e que são registradas as distâncias
intermediárias entre as cidades (ex. de A a B, de B a C,
de B a D, etc.) informe o caminho que tem a menor
distância entre A e F.
DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 64
Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

 Problema: neste caso quantos caminhos vamos


armazenar? Como vamos totalizar parcialmente as
distâncias de cada caminho?

• Para a solução destes exemplos é necessário o uso de


estruturas de dados.
• As estruturas de dados ampliam o conceito de
variáveis, pois permitem armazenar diversas
informações a partir da definição de uma única variável.
• As estruturas de dados podem ser homogêneas
(armazenam dados de um mesmo tipo) ou
heterogêneas (armazenam dados de diversos tipos)
• Existem diversos tipos de estruturas de dados, tais
como, vetores, matrizes, listas, filas, pilhas, árvores,
arquivos, entre outras.
• Neste capítulo estudaremos as estruturas de dados
homogêneas também chamadas de vetores ou
matrizes.

Matrizes Unidimensionais (Vetores)

• As estruturas de dados homogêneas do tipo Matriz


permitem armazenar diversos dados de um mesmo tipo
(homogênea) em uma única variável.
• Cada informação armazenada é identificada por um
índice, ou seja, a posição em que se encontra dentro
da estrutura.
• O índice define a ordem do elemento dentro da
estrutura.
• Exemplo: Uma pessoa está diante de um corredor com
5 portas. Cada porta está identificada por seu número:
C-101, C-103, C105, C107, C109. Outra pessoa, que
não percebe que as portas estão numeradas chega e

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 65


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

lhe pergunta. Onde é a sala C-105? Sua resposta


poderá ser: é a terceira porta à direita. Neste caso,
você está usando o “índice” da porta no corredor para
identificá-la.
• A representação mais comum para uma Matriz é uma
tabela indexada, conforme o exemplo a seguir:
1 2 3 4 5 6 7 8 9 10

• No exemplo foi definida uma tabela de 10 valores, ou


seja, nesta estrutura podem ser armazenados até 10
valores de um determinado tipo de dado.
• A estrutura onde cada informação é identificado por um
único índice recebe o nome de Matriz
Unidimensional, também conhecido como Vetor.
• Exemplos de Vetores em Computador:
- Vetor de números reais (tamanho: 15)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
5.77 18.59 32.5 0.87 56.7 33.3 8.5 7.0 10.5 6.2 17.8 1.5 5.32 99.7 0.01

- Vetor de nomes (tamanho: 10)


1 2 3 4 5 6 7 8 9 10
João Pedro Maria José Darci Chico Elvira Eulália Manoel Betânia

- Vetor de números inteiros (tamanho: 18)


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
20 89 132 45 666 58 3 47 99 125 255 23 139 47 2 13 931 409

- Vetor de caracteres (tamanho: 12)


1 2 3 4 5 6 7 8 9 10 11 12
Q @ Y O [ 7 D > J M R =

• As informações em um vetor são identificadas por um


índice que normalmente é dado entre colchetes [].
- no vetor de números reais a posição [7] armazena 8.5;

- no vetor de nomes o elemento [3] é “Maria”;

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 66


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

- no vetor de números inteiros o elemento [15] é 2;

- no vetor de caracteres a posição [11] armazena “R”;

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 67


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

• As aplicações mais comuns destes tipos de estruturas


para posterior processamento são:
- armazenamento parcial de dados;

- pesquisa/busca de informações;

- ordenação.

• Exemplo de uso de vetores em uma urna eletrônica


pode-se:
- totalizar os votos para cada candidato à medida que o
eleitor for votando;

- ordenar os votos em ordem decrescente para ter as


maiores votações;

- pesquisar se um determinado candidato teve votação


naquela urna.

Manipulação de Matrizes Unidimensionais


• Sintaxe em Portugol (VisuAlg)
Na declaração
var
identificador : vetor [faixa] de tipo

No corpo do programa
identificador[indice]

- FAIXA: define o número de elementos do vetor, com seu


índice inicial e índice final, separado por .. do seguinte
modo: [índice_inicial..índice_final]1.

- ÍNDICE: define a posição do elemento no vetor. Pode ser


definido através de valores constantes, variáveis ou
expressões.

1
Em linguagens importantes como C e Java não se define o índice inicial e final, mas
apenas o número de elementos do vetor. O índice inicial está sempre na posição 0
(zero).
DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 68
Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

• Limitações do VisuAlg:
- o valor de faixa e índice deve ser do tipo INTEIRO. Em
outras linguagens existem variações no uso destes
indexadores;

- o vetor é limitado a no máximo 499 elementos.


Exemplo:
var
valores : vetor [1..5] de inteiro

inicio
leia (valores[1])
leia (valores[2])
valores[3] <- valores[2]
i <- 4
valores[4] <- 70
valores[i+1] <- valores[4] * 2
escreva (valores[5])
fimalgoritmo

• As operações de atribuição, leitura e escrita de


elementos armazenados em um vetor devem ser feitas
em um elemento por vez, devendo ser indicado o nome
da variável que armazenará o valor lido e o índice da
posição entre colchetes.
• O tamanho de um vetor é dado pelo número de
elementos entre o índice inicial e índice final. Para saber
o número de bytes ocupados em memória deve-se
multiplicar o número de elementos pelo número de
bytes ocupados pelo tipo do dado armazenado no vetor.
Exercícios Resolvidos
1. Descreva um algoritmo para ler 20 números inteiros e escreva-os na
ordem inversa à lida.
1. PROBLEMA Verifique atentamente se o problema está bem definido, se não há
ambigüidades ou informações incompletas e irrelevantes.
(INTERPRETAÇÃO)
Destaque aqui as ambigüidades ou informações incompletas
Não há.
2. DADOS DE ENTRADA Identifique e descreva os dados ou recursos (substantivos) disponíveis

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 69


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

para a solução do problema.


20 números inteiros
3. DADOS DE SAÍDA Identifique e descreva os resultados desejados para o problema, procurando
observar se todas as entradas ou recursos necessários estão disponíveis.
Números lidos na ordem inversa do que foi escrito
4. BASE DE TESTES Defina um conjunto de informações (no mínimo 3) de entrada com suas
respectivas saídas, visando montar uma base de testes para o problema.
(E) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
(S) 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
5. PROCESSAMENTO Identifique os elementos fundamentais de processamento para a solução do
problema
5.1 Identifique os verbos que indiquem as operações que devem ser realizadas para
a solução do problema:
Escrever os números na ordem inversa
5.2 Identifique se há a necessidade de uso de estruturas de seleção e que tipo de
avaliação deve ser feita:
Não é necessário
5.3 Identifique se há a necessidade de uso de estruturas de repetição e o número ou
as condições de ocorrência das repetições:
Repetição de 1 a 20 para ler os números
Repetição de 1 a 20 para escrever os números
5.4 Identifique se há a necessidade de uso de matrizes e defina qual o seu tamanho
limite:
Será usado um vetor de 20 elementos para armazenar os valores
6. DESCRIÇÃO DO Descreva a seqüência de instruções necessárias para a solução do problema.
ALGORITMO
6.1 Descreva os passos gerais para a solução do problema.
Para contador de 1 até 20 faça
Ler o número[contador]
Fim para
Para contador de 20 até 1 faça
Escrever o número[contador]
Fim para
6.2 Descreva o algoritmo em Portugol para a solução do problema.
algoritmo "vetor"
// Este algoritmo lê 20 elementos e os escreve na ordem inversa à
// lida
// Autor : Mauricio Capobianco Lopes - Data : 25/04/2006
var
vet : vetor [1..20] de inteiro
cont : inteiro
inicio
//para 20 elementos faça
para cont de 1 ate 20 faca
//ler o elemento da posição cont
escreva ("Digite o valor ", cont, ": ")
leia(vet[cont])
fimpara
//para 20 elementos faça
para cont de 20 ate 1 passo -1 faca
//escrever o elemento da posição cont
escreva(vet[cont]:4)
fimpara
fimalgoritmo
7. TESTES Execute as operações descritas no passo 6, utilizando a base de testes
descrita no passo 4 para verificar se os resultados desejados estão corretos.
Em algumas situações é necessário registrar informações intermediárias para

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 70


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

acompanhar a execução dos passos.


De acordo com as entradas.
8. OTIMIZAÇÃO Reveja a solução proposta, mesmo se estiver correta, para eliminar eventuais
possibilidades de erro e melhorar a maneira de descrever ou o modo como
está sendo feito. Uma solução eficiente deve usar menos memória possível e
ser a mais rápida possível. Caso encontre possibilidades de melhoria retorne
ao passo 6.

2. Descreva um algoritmo para ler 50 números inteiros e informar a média e


quantos são maiores que a média.
1. PROBLEMA Verifique atentamente se o problema está bem definido, se não há
ambigüidades ou informações incompletas e irrelevantes.
(INTERPRETAÇÃO)
Destaque aqui as ambigüidades ou informações incompletas
Não há.
2. DADOS DE ENTRADA Identifique e descreva os dados ou recursos (substantivos) disponíveis
para a solução do problema.
50 números inteiros
3. DADOS DE SAÍDA Identifique e descreva os resultados desejados para o problema, procurando
observar se todas as entradas ou recursos necessários estão disponíveis.
Média
Quantidade de números maiores que a média
4. BASE DE TESTES Defina um conjunto de informações (no mínimo 3) de entrada com suas
respectivas saídas, visando montar uma base de testes para o problema.
(E) 475 171 891 683 979 195 398 612 841 778 723 440 743 890 196
976 316 319 728 394 209 995 121 177 23 577 676 637 78 221
735 42 247 708 1 659 353 348 753 253 853 336 305 839 791
480 333 741 271 470
(S) Média = 499
Quantidade de números acima da média = 23
5. PROCESSAMENTO Identifique os elementos fundamentais de processamento para a solução do
problema.
5.1 Identifique os verbos que indiquem as operações que devem ser realizadas para
a solução do problema:
Calcular a média
Contar a quantidade de números maiores que a média
5.2 Identifique se há a necessidade de uso de estruturas de seleção e que tipo de
avaliação deve ser feita:
Verificar se cada número é maior que a média dos números
5.3 Identifique se há a necessidade de uso de estruturas de repetição e o número ou
as condições de ocorrência das repetições:
Repetição de 1 a 50 para armazenar os números e ler a média
Repetição de 1 a 50 para verificar os números maiores que a média
5.4 Identifique se há a necessidade de uso de matrizes e defina qual o seu tamanho
limite:
Será usado um vetor de 50 elementos para armazenar os valores
6. DESCRIÇÃO DO Descreva a seqüência de instruções necessárias para a solução do problema.
ALGORITMO
6.1 Descreva os passos gerais para a solução do problema.
Inicializar soma
Para contador de 1 até 50 faça
Ler o número[contador]
Somar o número[contador]
Fim para
Calcular a média
Inicializar contador de números maiores que a média
Para contador de 1 até 50 faça
Se o número[contador] é maior que a média
Contar o número

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 71


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

Fim se
Fim para
Escrever a média
Escrever o número de elementos maiores que a média
6.2 Descreva o algoritmo em Portugol para a solução do problema.
algoritmo "maiores"
// Este algoritmo conta a quantidade de números maiores que a
// média de 50 números
// Autor : Mauricio Capobianco Lopes Data : 25/4/2006
var
soma, media, cont, contMaiores, tamanho : inteiro
valores : vetor [1..50] de inteiro
inicio
aleatorio 1, 1000
tamanho <- 50
//Inicializar soma
soma <- 0
//Para contador de 1 até 50 faça
para cont de 1 ate tamanho faca
//Ler o número[contador]
escreva ("Digite o número ", cont, ": ")
leia (valores[cont])
//Somar o número[contador]
soma <- soma + valores[cont]
fimpara
//Calcular a média
media <- soma \ tamanho
//Inicializar contador de números maiores que a média
contMaiores <- 0
//Para contador de 1 até 50 faça
para cont de 1 ate tamanho faca
// Se o número[contador] é maior que a média
se (valores[cont] > media) entao
// Contar o número
contMaiores <- contMaiores + 1
fimse
fimpara
//escrever o resultado
escreval ("Media = ", media)
escreval ("Numero de elementos maiores que a média = ",
contMaiores)
fimalgoritmo
7. TESTES Execute as operações descritas no passo 6, utilizando a base de testes
descrita no passo 4 para verificar se os resultados desejados estão corretos.
Em algumas situações é necessário registrar informações intermediárias para
acompanhar a execução dos passos.
De acordo com as entradas.
8. OTIMIZAÇÃO Reveja a solução proposta, mesmo se estiver correta, para eliminar eventuais
possibilidades de erro e melhorar a maneira de descrever ou o modo como
está sendo feito. Uma solução eficiente deve usar menos memória possível e
ser a mais rápida possível. Caso encontre possibilidades de melhoria retorne
ao passo 6.

Exercícios Propostos
1. Seja o seguinte vetor v:

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 72


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

1 2 3 4 5 6 7 8 9 10
v 2 6 8 3 10 16 1 21 33 -14

e as variáveis x = 2 e y = 4. Quais os valores correspondentes à:


v[1] v[x+1] V[x*1] v[x+y] v[y*2+v[1]]
v[2] v[x+2] V[x*2] v[v[x+y]] v[v[1]*v[4]]
v[3] v[x+3] V[x*3] v[v[4]] v[v[3]\v[1]]
v[4] v[x+4] V[x*4] v[v[v[7]]] V[v[6]-x*y]
2. Indique os valores armazenados na variável vet após a execução dos
trechos de algoritmos abaixo:
a)
algoritmo "itema"
var
vet: vetor [1..10] de inteiro
i : inteiro
inicio
para i de 1 ate 10 faca
vet [i] <- i
fimpara
para i de 1 ate 10 faca
vet [i] <- vet [11 -i]
fimpara
...
fimalgoritmo

b)
algoritmo "item_b"
var
vet: vetor [1..10] de inteiro
i : inteiro
inicio
para i de 1 ate 10 faca
vet[i] <- 10 * i
fimpara
para i de 1 ate 10 faca
vet[i] <- vet[i] \ vet[1]
fimpara
...
fimalgoritmo
3. Altere o algoritmo resolvido número 1 para ler 100 números inteiros e
escrevê-los na ordem inversa à lida.
4. Considere 1000 elementos inteiros armazenados em um vetor. Descreva
um algoritmo que:
a) informe a soma total dos valores do vetor;
b) informe a média dos valores do vetor;
c) informe o maior valor do vetor;
d) informe o menor valor do vetor;
e) informe a quantidade de números pares nas posições pares do vetor;

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 73


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

f) informe a quantidade de números ímpares nas posições ímpares do


vetor;
g) informe se há valores repetidos no vetor;
5. Em uma pesquisa populacional, registrou-se a idade de todos os membros
da população recenseada (idade em anos). Descreva um algoritmo que
leia as idades de cada membro da população (para encerrar será
informado 999 para a Idade) e conte a distribuição etária em grupos, com
intervalos de 10 anos da seguinte forma:
Grupo Faixa etária
1 0 a 9 anos
2 10 a 19 anos
3 20 a 29 anos
4 30 a 39 anos
5 40 a 49 anos
6 50 a 59 anos
7 60 a 69 anos
8 70 a 79 anos
9 80 a 89 anos
10 90 a 99 anos
11 Acima de 99 anos
Ao final, escreva os percentuais de cada grupo com relação ao total da
população.
6. O Centro Técnico Aeroespacial de São José dos Campos mantém registros
pluviométricos anuais de n cidades do Nordeste. Descreva um algoritmo
que leia a quantidade de chuva (em cm) de cada uma das cidades e
informe para cada grupo especificado na tabela abaixo o número de
cidades cuja quantidade de chuva esteja nos intervalos do grupo.
grupo quantidade de chuva (em cm)
1 0-9
2 10-19
3 20-29
4 30-39
5 40-49
6 50-59
7 60-69
8 70-79
9 80-89
10 90-99

7. Descreva um algoritmo que leia o nome e a nota de uma turma de n


estudantes (n ≤ 50) e escreva o nome dos estudantes cuja nota é maior
do que a nota média da turma. Informe também quantos estudantes
obtiveram nota maior do que a nota média da turma.
8. Uma empresa de turismo fez uma pesquisa, na temporada de verão,
questionando sobre a praia de preferência e a renda mensal de um grupo
composto por n turistas. As praias foram identificadas por códigos. Faça

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 74


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

um algoritmo que escreva, por praia, o número de turistas que a preferem


e a renda média destes turistas.
código da praia número de turistas renda média (r$)
01 200 1.700,00
...
42 10 1.000,00
9. Uma loja de departamentos tem 25 vendedores. As vendas são
registradas diariamente e um determinado vendedor pode efetuar várias
vendas por dia. Ao final de cada dia, é emitido um relatório contendo
número, nome e total de vendas de cada um dos 25 vendedores. Faça um
algoritmo que:
a) leia número e nome de cada um dos 25 vendedores;
b) leia informações sobre as vendas diárias, quais sejam, número do
vendedor e valor de venda;
c) escreva, para cada vendedor, número, nome e valor total de vendas
diárias efetuadas.
As informações sobre as vendas diárias não estão em seqüência. O
algoritmo deve apresentar a seguinte mensagem: mais um vendedor: s
(SIM) / n (NÃO)? antes de prosseguir com a entrada de dados.
número do vendedor nome do vendedor total de vendas
01 Andréa 5.700,00
...
25 Ronaldo 1.000,00
10. Descreva um algoritmo que leia dois vetores V e W com n (n ≤ 30)
números reais. Determine os vetores resultantes: da soma de V e W, da
subtração de V e W, da multiplicação de V e W, da divisão de V e W,
elemento a elemento. Determine também o produto escalar de V e W,
definido como: Σ (vi * wi) = v1 * w1 + v2 * w2 + ...+ vn * wn. Caso o
produto escalar seja igual a zero, os vetores são classificados como
ORTOGONAIS.
11. Uma empresa codificou seus produtos de 1 a n. Sabendo que ela tem o
estoque inicial dos produtos, descreva um algoritmo que:
a) leia os lançamentos de entrada e saída de produtos ao longo do dia e
atualize o estoque. Estes lançamentos são dados da seguinte forma:
código do produto, letra indicando a operação (E para Entrada ou S
para Saída) e a quantidade de produtos que entraram ou saíram.
b) escreva os estoques atualizados de todos os produtos ao final do dia.
As informações sobre os lançamentos diários não estão em seqüência.
Assim, o algoritmo deve apresentar a seguinte mensagem: mais um
lançamento: s (SIM) / n (NÃO)? antes de prosseguir com a entrada de
dados.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 75


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

Algoritmos de Ordenação de Vetores


• Uma das operações mais comuns sobre vetores é a
ordenação dos elementos.
• Os algoritmos para esta tarefa são inúmeros e são
muito conhecidos.
• Vamos apresentar aqui três métodos comuns de
ordenação:
- Método da Bolha ou BubbleSort

- Método da Ordenação por Seleção ou SelectionSort.

- Método da Ordenação por Inserção ou InsertSort.

• Será considerada a ordenação em ordem crescente.


Método da Bolha ou BubbleSort

• O método da Bolha tem como característica comparar


elementos vizinhos e trocá-los caso o atual seja maior
que seu sucessor (ordenação em ordem crescente).
• Esta lógica garante que na primeira passada o maior
elemento irá para a última posição do vetor.
• Com isto, na passada seguinte, não é mais necessário
comparar o último, indo apenas até a posição do
penúltimo e assim por diante.
• São apresentadas duas implementações do método da
bolha: uma versão mais simplificada, mas de pouca
eficiência e uma versão melhorada um pouco mais
eficiente.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 76


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

algoritmo "Bubble Sort"


var
vet : vetor[1..10] de real
i, cont, fim : inteiro
temp : real
inicio
//ler o vetor
para cont de 1 ate 10 faca
leia(vet[cont])
fimpara
// iniciar o final da comparação
fim <- 10
para i de 1 ate 10 faca
//percorre os elementos não ordenados
para cont de 1 ate fim - 1 faca
//compara o elemento na posição atual com seu próximo
se (vet[cont] > vet[cont+1]) entao
//troca os elementos de posição
temp <- vet[cont]
vet[cont] <- vet[cont+1]
vet[cont+1] <- temp
fimse
fimpara
fim <- fim - 1
fimpara
// Escrever o vetor ordenado
para cont de 1 ate 10 faca
escreval(cont:3," - ", vet[cont] : 10 : 3)
fimpara
fimalgoritmo

• Na execução do método da bolha mostrada a seguir os


valores assinalados indicam troca de posição entre os
elementos. As colunas mais escuras indicam que o
elemento já está em sua posição correta e não é mais
visitado.
1 2 3 4 5 6 7 8 9 10
I=1 81,1 95,8 83,7 40,8 28,5 69,6 6,8 25,7 82,9 78,6
81,1 83,7 95,8 40,8 28,5 69,6 6,8 25,7 82,9 78,6
81,1 83,7 40,8 95,8 28,5 69,6 6,8 25,7 82,9 78,6
81,1 83,7 40,8 28,5 95,8 69,6 6,8 25,7 82,9 78,6
81,1 83,7 40,8 28,5 69,6 95,8 6,8 25,7 82,9 78,6
81,1 83,7 40,8 28,5 69,6 6,8 95,8 25,7 82,9 78,6
81,1 83,7 40,8 28,5 69,6 6,8 25,7 95,8 82,9 78,6
81,1 83,7 40,8 28,5 69,6 6,8 25,7 82,9 95,8 78,6
81,1 83,7 40,8 28,5 69,6 6,8 25,7 82,9 78,6 95,8
I=2 81,1 83,7 40,8 28,5 69,6 6,8 25,7 82,9 78,6 95,8
81,1 40,8 83,7 28,5 69,6 6,8 25,7 82,9 78,6 95,8
81,1 40,8 28,5 83,7 69,6 6,8 25,7 82,9 78,6 95,8
81,1 40,8 28,5 69,6 83,7 6,8 25,7 82,9 78,6 95,8
81,1 40,8 28,5 69,6 6,8 83,7 25,7 82,9 78,6 95,8

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 77


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

81,1 40,8 28,5 69,6 6,8 25,7 83,7 82,9 78,6 95,8
81,1 40,8 28,5 69,6 6,8 25,7 82,9 83,7 78,6 95,8
81,1 40,8 28,5 69,6 6,8 25,7 82,9 78,6 83,7 95,8
i=3 40,8 81,1 28,5 69,6 6,8 25,7 82,9 78,6 83,7 95,8
40,8 28,5 81,1 69,6 6,8 25,7 82,9 78,6 83,7 95,8
40,8 28,5 69,6 81,1 6,8 25,7 82,9 78,6 83,7 95,8
40,8 28,5 69,6 6,8 81,1 25,7 82,9 78,6 83,7 95,8
40,8 28,5 69,6 6,8 25,7 81,1 82,9 78,6 83,7 95,8
40,8 28,5 69,6 6,8 25,7 81,1 82,9 78,6 83,7 95,8
40,8 28,5 69,6 6,8 25,7 81,1 78,6 82,9 83,7 95,8
i=4 28,5 40,8 69,6 6,8 25,7 81,1 78,6 82,9 83,7 95,8
28,5 40,8 69,6 6,8 25,7 81,1 78,6 82,9 83,7 95,8
28,5 40,8 6,8 69,6 25,7 81,1 78,6 82,9 83,7 95,8
28,5 40,8 6,8 25,7 69,6 81,1 78,6 82,9 83,7 95,8
28,5 40,8 6,8 25,7 69,6 81,1 78,6 82,9 83,7 95,8
28,5 40,8 6,8 25,7 69,6 78,6 81,1 82,9 83,7 95,8
i=5 28,5 40,8 6,8 25,7 69,6 78,6 81,1 82,9 83,7 95,8
28,5 6,8 40,8 25,7 69,6 78,6 81,1 82,9 83,7 95,8
28,5 6,8 25,7 40,8 69,6 78,6 81,1 82,9 83,7 95,8
28,5 6,8 25,7 40,8 69,6 78,6 81,1 82,9 83,7 95,8
28,5 6,8 25,7 40,8 69,6 78,6 81,1 82,9 83,7 95,8
i=6 6,8 28,5 25,7 40,8 69,6 78,6 81,1 82,9 83,7 95,8
6,8 25,7 28,5 40,8 69,6 78,6 81,1 82,9 83,7 95,8
6,8 25,7 28,5 40,8 69,6 78,6 81,1 82,9 83,7 95,8
6,8 25,7 28,5 40,8 69,6 78,6 81,1 82,9 83,7 95,8
i=7 6,8 25,7 28,5 40,8 69,6 78,6 81,1 82,9 83,7 95,8
6,8 25,7 28,5 40,8 69,6 78,6 81,1 82,9 83,7 95,8
6,8 25,7 28,5 40,8 69,6 78,6 81,1 82,9 83,7 95,8
i=8 6,8 25,7 28,5 40,8 69,6 78,6 81,1 82,9 83,7 95,8
6,8 25,7 28,5 40,8 69,6 78,6 81,1 82,9 83,7 95,8
i=9 6,8 25,7 28,5 40,8 69,6 78,6 81,1 82,9 83,7 95,8

• Nesta execução destacam-se duas questões:


- quando o i chegou em 5 só os quatro primeiro elementos
não estavam mais ordenados sendo desnecessário o
teste das posições 5, 6 e 7.

- quando o i chegou em 6 não havia mais necessidade de


prosseguir o algoritmo pois o vetor estava ordenado.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 78


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

• Para minimizar estes problemas há a proposta de uma


versão mais otimizada do método.
algoritmo "Bubble Sort 2"
var
vet : vetor[1..10] de real
postroca, cont, fim : inteiro
temp : real
troca : logico
inicio
//ler o vetor
para cont de 1 ate 10 faca
leia(vet[cont])
fimpara
// iniciar o final da comparação
fim <- 10
//repetir até não ter maisl elementos para trocar
repita
//define que não haverá troca
troca <- falso
//percorre os elementos não ordenados
para cont de 1 ate fim - 1 faca
//compara o elemento na posição atual com seu próximo
se (vet[cont] > vet[cont+1]) entao
//troca os elementos de posição
temp <- vet[cont]
vet[cont] <- vet[cont+1]
vet[cont+1] <- temp
//define que houve troca e portanto a repetição terá
que ser feita mais uma vez
troca <- verdadeiro
//armazena a posição da troca
postroca <- cont
fimse
fimpara
//define até que posição os dados serão comparados na
próxima execução
fim <- postroca
ate (nao troca)
// Escrever o vetor ordenado
para cont de 1 ate 10 faca
escreval(cont:3," - ", vet[cont] : 10 : 3)
fimpara
fimalgoritmo

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 79


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

• Nesta execução são necessárias menos comparações do


que no exemplo anterior, conforme pode ser verificado
na tabela a seguir.
1 2 3 4 5 6 7 8 9 10
1 81,1 95,8 83,7 40,8 28,5 69,6 6,8 25,7 82,9 78,6
81,1 83,7 95,8 40,8 28,5 69,6 6,8 25,7 82,9 78,6
81,1 83,7 40,8 95,8 28,5 69,6 6,8 25,7 82,9 78,6
81,1 83,7 40,8 28,5 95,8 69,6 6,8 25,7 82,9 78,6
81,1 83,7 40,8 28,5 69,6 95,8 6,8 25,7 82,9 78,6
81,1 83,7 40,8 28,5 69,6 6,8 95,8 25,7 82,9 78,6
81,1 83,7 40,8 28,5 69,6 6,8 25,7 95,8 82,9 78,6
81,1 83,7 40,8 28,5 69,6 6,8 25,7 82,9 95,8 78,6
81,1 83,7 40,8 28,5 69,6 6,8 25,7 82,9 78,6 95,8
2 81,1 83,7 40,8 28,5 69,6 6,8 25,7 82,9 78,6 95,8
81,1 40,8 83,7 28,5 69,6 6,8 25,7 82,9 78,6 95,8
81,1 40,8 28,5 83,7 69,6 6,8 25,7 82,9 78,6 95,8
81,1 40,8 28,5 69,6 83,7 6,8 25,7 82,9 78,6 95,8
81,1 40,8 28,5 69,6 6,8 83,7 25,7 82,9 78,6 95,8
81,1 40,8 28,5 69,6 6,8 25,7 83,7 82,9 78,6 95,8
81,1 40,8 28,5 69,6 6,8 25,7 82,9 83,7 78,6 95,8
81,1 40,8 28,5 69,6 6,8 25,7 82,9 78,6 83,7 95,8
3 40,8 81,1 28,5 69,6 6,8 25,7 82,9 78,6 83,7 95,8
40,8 28,5 81,1 69,6 6,8 25,7 82,9 78,6 83,7 95,8
40,8 28,5 69,6 81,1 6,8 25,7 82,9 78,6 83,7 95,8
40,8 28,5 69,6 6,8 81,1 25,7 82,9 78,6 83,7 95,8
40,8 28,5 69,6 6,8 25,7 81,1 82,9 78,6 83,7 95,8
40,8 28,5 69,6 6,8 25,7 81,1 82,9 78,6 83,7 95,8
40,8 28,5 69,6 6,8 25,7 81,1 78,6 82,9 83,7 95,8
4 28,5 40,8 69,6 6,8 25,7 81,1 78,6 82,9 83,7 95,8
28,5 40,8 69,6 6,8 25,7 81,1 78,6 82,9 83,7 95,8
28,5 40,8 6,8 69,6 25,7 81,1 78,6 82,9 83,7 95,8
28,5 40,8 6,8 25,7 69,6 81,1 78,6 82,9 83,7 95,8
28,5 40,8 6,8 25,7 69,6 81,1 78,6 82,9 83,7 95,8
28,5 40,8 6,8 25,7 69,6 78,6 81,1 82,9 83,7 95,8
5 28,5 40,8 6,8 25,7 69,6 78,6 81,1 82,9 83,7 95,8
28,5 6,8 40,8 25,7 69,6 78,6 81,1 82,9 83,7 95,8
28,5 6,8 25,7 40,8 69,6 78,6 81,1 82,9 83,7 95,8
28,5 6,8 25,7 40,8 69,6 78,6 81,1 82,9 83,7 95,8
28,5 6,8 25,7 40,8 69,6 78,6 81,1 82,9 83,7 95,8
6 6,8 28,5 25,7 40,8 69,6 78,6 81,1 82,9 83,7 95,8
6,8 25,7 28,5 40,8 69,6 78,6 81,1 82,9 83,7 95,8
7 6,8 25,7 28,5 40,8 69,6 78,6 81,1 82,9 83,7 95,8

• O método da bolha é o mais ineficiente método de


ordenação que existe. Sendo assim, outros métodos
devem ser estudados e implementados.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 80


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

Método da Ordenação por Seleção SelectionSort

• O método da ordenação por seleção tem como


característica encontrar o menor elemento do vetor e
colocar na primeira posição (ordenação em ordem
crescente).
• Após esta primeira passada a partir da segunda posição
encontra-se novamente o menor e o coloca na segunda
posição e assim por diante.
• Com isto, na segunda passada não se deve mais
comparar o primeiro valor, devendo iniciar do segundo.
• A implementação do método é apresentada a seguir.
algoritmo "Selection Sort"
var
vet : vetor[1..10] de real
i, cont, posMenor : inteiro
temp : real
inicio
//ler o vetor
para cont de 1 ate 10 faca
leia(vet[cont])
fimpara
//percorrer o vetor
para cont de 1 ate 9 faca
//define a posição do menor como sendo a posição atual
posMenor <- cont
//percorre o restante do vetor procurando o menor valor
para i de cont+1 ate 10 faca
//compara o elemento atual com o da posição do menor
se (vet[i] < vet[posMenor]) entao
posMenor <- i //guarda a posição do elemento
fimse
fimpara
//se encontrou elemento menor troca a posição
se (cont <> posMenor) entao
temp <- vet[cont]
vet[cont] <- vet[posMenor]
vet[posMenor] <- temp
fimse
fimpara
// Escrever o vetor ordenado
para cont de 1 ate 10 faca
escreval(cont:3," - ", vet[cont] : 10 : 3)
fimpara
fimalgoritmo

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 81


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

• A execução deste algoritmo está apresentada na tabela


a seguir. Os valores assinalados demonstram as trocas
realizadas.
1 2 3 4 5 6 7 8 9 10
81,1 95,8 83,7 40,8 28,5 69,6 6,8 25,7 82,9 78,6
1 6,8 95,8 83,7 40,8 28,5 69,6 81,1 25,7 82,9 78,6
2 6,8 25,7 83,7 40,8 28,5 69,6 81,1 95,8 82,9 78,6
3 6,8 25,7 28,5 40,8 83,7 69,6 81,1 95,8 82,9 78,6
4 6,8 25,7 28,5 40,8 83,7 69,6 81,1 95,8 82,9 78,6
5 6,8 25,7 28,5 40,8 69,6 83,7 81,1 95,8 82,9 78,6
6 6,8 25,7 28,5 40,8 69,6 78,6 81,1 95,8 82,9 83,7
7 6,8 25,7 28,5 40,8 69,6 78,6 81,1 95,8 82,9 83,7
8 6,8 25,7 28,5 40,8 69,6 78,6 81,1 82,9 95,8 83,7
9 6,8 25,7 28,5 40,8 69,6 78,6 81,1 82,9 83,7 95,8

• Como pode-se perceber, o número de elementos


trocados de posição é muito menor que o método da
bolha otimizado.
• Destaca-se, entretanto, que o número de comparações
feitas para se achar o menor valor tornam o método
com complexidade semelhante ao método da bolha.
Método da Ordenação por Inserção InsertSort

• O método da ordenação por inserção tem como


característica ordenar o vetor por partes a partir de su
início.
• Após a primeira passada ordenam-se os dois primeiros
elementos do vetor. Na passada seguinte os três
primeiros e assim por diante.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 82


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

• A implementação do método é apresentada a seguir.


algoritmo "Insert Sort"
var
vet : vetor[1..10] de real
i, j, cont, fim : inteiro
temp : real
posicao : logico
inicio
//ler o vetor
para cont de 1 ate 10 faca
leia(vet[cont])
fimpara
para i de 2 ate 10 faca
//define a última posição de teste
j <- i
//guarda o próximo elemento a ser testado
temp <- vet[j]
//procura a posição do novo elemento
posicao <- falso
repita
//testa se o elemento é menor que o elemento atual
se (temp < vet[j-1]) entao
//desloca o elemento para a posição posterior
vet[j] <- vet[j-1]
//decrementa o j para comparar com o elemento
anterior
j <- j - 1
//se está no início do vetor
se (j = 1) entao
posicao <- verdadeiro
fimse
//se o elemento é maior foi encontrada sua posição
senao
posicao <- verdadeiro
fimse
ate posicao
//coloca o elemento na sua nova posição
vet[j] <- temp
fimpara
// Escrever o vetor ordenado
para cont de 1 ate 10 faca
escreval(cont:3," - ", vet[cont] : 10 : 3)
fimpara
fimalgoritmo

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 83


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

• A execução deste algoritmo está apresentada na tabela


a seguir. Os valores assinalados demonstram as trocas
realizadas.
1 2 3 4 5 6 7 8 9 10
2 81,1 95,8 83,7 40,8 28,5 69,6 6,8 25,7 82,9 78,6
3 81,1 95,8 95,8 40,8 28,5 69,6 6,8 25,7 82,9 78,6
81,1 83,7 95,8 40,8 28,5 69,6 6,8 25,7 82,9 78,6
4 81,1 83,7 95,8 95,8 28,5 69,6 6,8 25,7 82,9 78,6
81,1 83,7 83,7 95,8 28,5 69,6 6,8 25,7 82,9 78,6
81,1 81,1 83,7 95,8 28,5 69,6 6,8 25,7 82,9 78,6
40,8 81,1 83,7 95,8 95,8 69,6 6,8 25,7 82,9 78,6
5 40,8 81,1 83,7 83,7 95,8 69,6 6,8 25,7 82,9 78,6
40,8 81,1 81,1 83,7 95,8 69,6 6,8 25,7 82,9 78,6
40,8 40,8 81,1 83,7 95,8 69,6 6,8 25,7 82,9 78,6
28,5 40,8 81,1 83,7 95,8 95,8 6,8 25,7 82,9 78,6
6 28,5 40,8 81,1 83,7 83,7 95,8 6,8 25,7 82,9 78,6
28,5 40,8 81,1 81,1 83,7 95,8 6,8 25,7 82,9 78,6
28,5 40,8 69,6 81,1 83,7 95,8 6,8 25,7 82,9 78,6
7 28,5 40,8 69,6 81,1 83,7 95,8 95,8 25,7 82,9 78,6
28,5 40,8 69,6 81,1 83,7 83,7 95,8 25,7 82,9 78,6
28,5 40,8 69,6 81,1 81,1 83,7 95,8 25,7 82,9 78,6
28,5 40,8 69,6 69,6 81,1 83,7 95,8 25,7 82,9 78,6
28,5 40,8 40,8 69,6 81,1 83,7 95,8 25,7 82,9 78,6
28,5 28,5 40,8 69,6 81,1 83,7 95,8 25,7 82,9 78,6
6,8 28,5 40,8 69,6 81,1 83,7 95,8 25,7 82,9 78,6
8 6,8 28,5 40,8 69,6 81,1 83,7 95,8 95,8 82,9 78,6
6,8 28,5 40,8 69,6 81,1 83,7 83,7 95,8 82,9 78,6
6,8 28,5 40,8 69,6 81,1 81,1 83,7 95,8 82,9 78,6
6,8 28,5 40,8 69,6 69,6 81,1 83,7 95,8 82,9 78,6
6,8 28,5 40,8 40,8 69,6 81,1 83,7 95,8 82,9 78,6
6,8 28,5 28,5 40,8 69,6 81,1 83,7 95,8 82,9 78,6
6,8 25,7 28,5 40,8 69,6 81,1 83,7 95,8 82,9 78,6
9 6,8 25,7 28,5 40,8 69,6 81,1 83,7 95,8 95,8 78,6
6,8 25,7 28,5 40,8 69,6 81,1 83,7 83,7 95,8 78,6
6,8 25,7 28,5 40,8 69,6 81,1 82,9 83,7 95,8 78,6
10 6,8 25,7 28,5 40,8 69,6 81,1 82,9 83,7 95,8 95,8
6,8 25,7 28,5 40,8 69,6 81,1 82,9 83,7 83,7 95,8
6,8 25,7 28,5 40,8 69,6 81,1 82,9 82,9 83,7 95,8
6,8 25,7 28,5 40,8 69,6 81,1 81,1 82,9 83,7 95,8

Algoritmos de Busca em Vetores


• Nos vetores um elemento está posicionado logo após o
outro, não existindo posições não preenchidas.
• Esta característica os define como estruturas de dados
seqüenciais e indexadas.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 84


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

• Deste modo, os dois algoritmos clássicos de busca em


vetores são:
- pesquisa seqüencial;

- pesquisa binária.

Método da Pesquisa Seqüencial

• O método da pesquisa seqüencial é muito simples e


consiste em percorrer o vetor a partir de sua posição
inicial até encontrar o elemento desejado.
• A implementação deste método é demonstrada a
seguir.
algoritmo "Sequencial"
var
cont, valor : inteiro
vet : vetor[1..10] de inteiro
achou : logico
inicio
//ler o vetor
para cont de 1 ate 10 faca
leia(vet[cont])
fimpara
//ler o valo a ser pesquisado
escreva("Entre com o valor a ser pesquisado :")
leia(valor)
//inicializar a variável que indica se o elemento foi ou
não encontrado
achou <- falso
// inicializar o contador
cont <- 1
repita
//verifica se o valor do vetor é igual ao pesquisado
se vet[cont] = valor entao
achou <- verdadeiro
senao
cont <- cont + 1
fimse
ate (achou=verdadeiro) ou (cont>10)
se achou entao
escreval("Valor encontrado na posição ", cont)
senao
escreval("Valor não encontrado.")
fimse
fimalgoritmo

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 85


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

Método da Pesquisa Binária

• O método da pesquisa binária consiste em fazer a


pesquisa quebrando o vetor em partes.
• Inicialmente encontra-se a posição do meio do vetor.
Se o elemento procurado for maior que o elemento do
meio, pesquisa-se os dados à direita do meio. Caso
contrário pesquisa-se à esquerda.
• A pesquisa binária só pode ser aplicada a vetores
ordenados.
• A seguir está a implementação deste método
algoritmo "Binaria"
var
cont, valor, ini, fim, meio : inteiro
vet : vetor[1..10] de inteiro
achou : logico
inicio
//ler o vetor
para cont de 1 ate 10 faca
leia(vet[cont])
fimpara
//ler o valo a ser pesquisado
escreva("Entre com o valor a ser pesquisado :")
leia(valor)
//inicializar a variável que indica se o elemento foi ou
não encontrado
achou <- falso
// definir o inicio e fim da pesquisa
ini <- 1
fim <- 10
repita
//calcular o elemento do meio
meio <- (ini + fim) \ 2
//testar se é o elemento pesquisado
se valor = vet[meio] entao
achou <- verdadeiro
senao
//testar se é maior que o meio
se valor > vet[meio] entao
//redefine a posição de inicio
ini <- meio + 1
senao
//valor menor que o meio
//redefine a posição de fim
fim <- meio - 1
fimse

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 86


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

fimse
ate (achou=verdadeiro) ou (ini>fim)
se achou entao
escreval("Valor encontrado na posição ", meio)
senao
escreval("Valor não encontrado.")
fimse
fimalgoritmo

Exercícios Propostos
1. Descreva um algoritmo que leia n (n ≤ 20) números inteiros e escreva-os
em ordem decrescente.
2. Um professor tem n (n ≤ 20) nomes de alunos de uma turma. Baseado
nisto descreva um algoritmo que:
a) ordene os dados dos alunos em ordem alfabética;
b) permita pesquisar se existem determinados nomes de alunos na lista:
3. Uma determinada biblioteca possui o nome de obras de ciências exatas e
ciências humanas, totalizando 100 volumes, sendo 50 volumes de cada
área. Baseado nisto descreva um algoritmo que monte um menu com as
seguintes opções:
a) Cadastrar Obra: insere uma obra no acervo;
b) Pesquisar Obra: informa se uma determinada obra pertence ao
acervo;
c) Excluir Obra: exclui uma obra do acervo;
d) Alterar Obra: altera os dados de uma obra do acervo;
e) Listar Obras: lista o nome e a área de todas as obras do acervo em
ordem alfabética, independente da área;
f) Sair do Programa: sai do programa;
4. Um professor deseja corrigir provas de múltipla escolha. Considerando
que a prova tem n questões (n <= 10) descreva um algoritmo que:
a) leia o gabarito da prova e armazene em um vetor;
b) leia o nome e as respostas dos alunos para cada questão e informe o
nome e a média do aluno. O nome e a média devem ser
armazenados em um vetor;
c) dado o nome de uma aluno, informe sua média;
d) informe o percentual de alunos aprovados, considerando que a nota
mínima de aprovação é 6;
e) informe a média da turma;
f) informe o nome e a média do aluno que teve nota mais alta;
g) informe o nome e a média do aluno que teve nota mais baixa;
Para finalizar o algoritmo deve ser apresentada a seguinte mensagem:
mais um aluno: s (SIM) / n (NÃO)?
5. Uma loja tem o código e estoque de suas 100 mercadorias. Baseado nisto
descreva um algoritmo que leia os pedidos dos clientes, constituídos do
código da mercadoria e quantidade desejada e verifique, para cada
pedido, se ele pode ser integralmente atendido. Caso seja possível,

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 87


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

atualize o estoque da mercadoria. Em caso negativo, escreva a mensagem


"Não temos a mercadoria em estoque". No final, escreva o código e
estoque das 20 mercadorias com maior quantidade em estoque e das 20
mercadorias com menor quantidade em estoque.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 88


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

7 Modularização
• No trabalho cotidiano de programação o programador
tem que lidar com tarefas extensas e, em muitos casos,
repetitivas.
• Tarefas repetitivas causam:
- códigos muito extensos;

- ineficiência na solução dos problemas.

• Algoritmos muito extensos causam:


- dificuldade de compreensão do problema;

- dificuldade de manutenção (corretiva ou preventiva) do


código.

• Para contornar este problema a programação


estruturada define a modularização de programas.
• A modularização de programas é uma técnica de
solução de problemas que visa quebrar o problema em
partes visando facilitar a construção de sua solução.
• Exemplo: imagine que você é um confeiteiro e lhe foi
passada uma tarefa de fazer um bolo com recheio e
cobertura. Como poderia ser um algoritmo para a
solução deste problema?
Fazer a primeira camada de massa
Fazer o recheio
Colocar o recheio sobre a primeira camada de
massa
Fazer a segunda camada de massa
Colocar a segunda camada de massa sobre o
recheio que está sobre a primeira camada de
massa
Fazer a cobertura
Cobrir as camadas de massa com a cobertura

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 89


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

• Na solução apresentada chama-se a atenção para


algumas questões:
- esta solução precisa ser refinada pois há questões
ainda não resolvidas, tais como: como se faz a massa?
Como se faz o recheio? Como se faz a cobertura?

- a partir da solução refinada imagine a descrição da


solução deste problema em um único texto por extenso;

- existe uma tarefa feita duas vezes neste problema: a


confecção da massa. Uma vez que já foi feita a descrição
da confecção da primeira massa, seria necessário
apresentar a descrição da confecção da segunda massa?
Se as massas forem iguais a resposta é não! Mas e se o
modo de fazer a massa fosse o mesmo mas com outros
ingredientes? A resposta também é não! Basta mudar os
ingredientes.

• A modularização de programas tem, portanto, o


objetivo de:
- deixar o código dos programas mais conciso
(LEGIBILIDADE);

- reaproveitar código já programado (PRODUTIVIDADE);

- facilitar a manutenção corretiva e preventiva


(MANUTENIBILIDADE).

• Esta técnica também é chamada de refinamentos


sucessivos ou top-down.
• A construção de programas baseada nesta técnica
permite primeiro determinar o que fazer, para depois
decidir como fazer. Isto permite uma visão geral do
problema, sendo que os detalhes vão aparecendo à
medida que refinamos sua solução.
• A solução de problemas baseada em modularização
deixa os algoritmos mais próximos do que expressamos
em linguagem natural.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 90


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

• A modularização de programas é feita através da


construção de Subprogramas.
• Subprogramas são:
- rotinas (pequenos programas) que realizam uma
determinada função específica.

- estruturas de controle em nível de unidade.

• Uma vez feito um subprograma ele pode ser utilizado


em qualquer ponto do programa ou até em outro
subprograma.
• Os tipos de subprogramas existentes são:
- funções: retornam um valor como resultado. Derivam
do conceito de função da matemática;

- procedimentos: retornam nenhum ou mais valores.

• Todas as linguagens têm bibliotecas de funções e


procedimentos disponibilizadas ao programador.
• As bibliotecas mais comuns são de funções
matemáticas, subprogramas para manipulação de
caracteres e subprogramas para entrada e saída de
dados.
• Normalmente os subprogramas contém parâmetros que
permitem a entrada e saída de dados do seu corpo.
• Nesta disciplina usaremos apenas procedimentos sem
parâmetros.
• Sintaxe em VisuAlg.
procedimento <nome-de-procedimento> [(<seqüência-de-
declarações-de-parâmetros>)]
// Seção de Declarações Internas
inicio
// Seção de Comandos
fimprocedimento

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 91


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

Escopo de Variáveis

• O escopo de uma variável define a sua visibilidade


perante os diversos módulos integrantes do algoritmo.
• As variáveis podem ser de dois tipos:
- locais: existem e podem ser chamadas apenas no
procedimento em que estão declaradas.

- globais: existem e podem ser usadas em todo o


programa.

• As variáveis locais ajudam na economia de memória,


uma vez que elas ocupam espaço apenas enquanto o
procedimento está em execução.
• As variáveis globais ocupam espaço na memória
durante toda a execução do programa.

Exercícios Resolvidos

1. Descreva um algoritmo para ler dois valores reais e trocá-los de variável


através de um módulo. Ao final escreva os dois valores.
1. PROBLEMA Verifique atentamente se o problema está bem definido, se não há
ambigüidades ou informações incompletas e irrelevantes.
(INTERPRETAÇÃO)
Destaque aqui as ambigüidades ou informações incompletas
Não há.
2. DADOS DE ENTRADA Identifique e descreva os dados ou recursos (substantivos) disponíveis
para a solução do problema.
Dois valores reais
3. DADOS DE SAÍDA Identifique e descreva os resultados desejados para o problema, procurando
observar se todas as entradas ou recursos necessários estão disponíveis.
Dois valores reais em variáveis trocadas em relação à entrada
4. BASE DE TESTES Defina um conjunto de informações (no mínimo 3) de entrada com suas
respectivas saídas, visando montar uma base de testes para o problema.
(E) valor1: 5 valor2: 6 (S) valor1: 6 valor2: 5
(E) valor1: 1 valor2: 7 (S) valor1: 7 valor2: 1
(E) valor1: 2 valor2: 9 (S) valor1: 9 valor2: 2
5. PROCESSAMENTO Identifique os elementos fundamentais de processamento para a solução do
problema
5.1 Identifique os verbos que indiquem as operações que devem ser realizadas para
a solução do problema:
Trocar os valores lidos de variável
5.2 Identifique se há a necessidade de uso de estruturas de seleção e que tipo de
avaliação deve ser feita:
Não há
5.3 Identifique se há a necessidade de uso de estruturas de repetição e o número ou
as condições de ocorrência das repetições:

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 92


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

Não há

5.4 Identifique se há a necessidade de uso de matrizes e defina qual o seu tamanho


limite:
Não há
6. DESCRIÇÃO DO ALGORITMO Descreva a seqüência de instruções necessárias para a solução
do problema.
6.1 Descreva os passos gerais para a solução do problema. Destaque os passos onde
é necessário o refinamento da solução do problema e os descreva separadamente na
forma de um módulo.
Ler os valores
Trocar os valores de variável
Escrever os valores

MÓDULO: Trocar os valores de variável


Guardar o valor da primeira variável em um auxiliar
Guardar o valor da segunda variável na primeira variável
Guardar o valor do auxiliar na segunda variável
6.2 Descreva o algoritmo em Portugol para a solução do problema.
algoritmo "troca"
var
valor1, valor2 : real

procedimento trocarvalores
//troca os valores de variável
var
aux : real
inicio
//usa uma variável auxiliar para trocar os valores
aux <- valor1
valor1 <- valor2
valor2 <- aux
fimprocedimento

inicio
//ler os valores
escreva ("Digite o valor 1: ")
leia (valor1)
escreva ("Digite o valor 2: ")
leia (valor2)
//trocar os valores de variável
trocarvalores
//escrever os valores
escreval ("Valor 1 = ", valor1)
escreval ("Valor 2 = ", valor2)
fimalgoritmo
7. TESTES Execute as operações descritas no passo 6, utilizando a base de testes descrita no passo 4
para verificar se os resultados desejados estão corretos. Em algumas situações é
necessário registrar informações intermediárias para acompanhar a execução dos passos.
(E) Valor1: 5 Valor2: 6 (S)Valor 1 = 6 Valor 2 = 5
(E) Valor1: 1 Valor2: 7 (S)Valor 1 = 7 Valor 2 = 1
(E) Valor1: 2 Valor2: 9 (S)Valor 1 = 9 Valor 2 = 2

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 93


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

2. Para evitar erros de digitação de seqüências de números como código de


barras, CPF, número de conta corrente, etc., geralmente se adiciona ao
número um dígito de controle, denominado também de dígito verificador.
Considerando que o dígito verificador de uma conta bancária é dado pelo
resto da soma de cada um dos seus caracteres por 9, descreva um
algoritmo que leia o número de uma conta e o digito verificador e informe
se o dígito está correto. O cálculo do dígito verificador correto deve ser
feito em um módulo. Considere que as contas vão de 10000 a 99999.
Ex1. Conta 23456 Dígito: 7 2+3+4+5+6=20 resto 9 = 2. INCORRETO
Ex1. Conta 99999 Dígito: 0 9+9+9+9+9=45 resto 9 = 0. CORRETO
1. PROBLEMA Verifique atentamente se o problema está bem definido, se não há
ambigüidades ou informações incompletas e irrelevantes.
(INTERPRETAÇÃO)
Destaque aqui as ambigüidades ou informações incompletas
Não há
2. DADOS DE ENTRADA Identifique e descreva os dados ou recursos (substantivos) disponíveis
para a solução do problema.
Número da Conta
Dígito Verificador
3. DADOS DE SAÍDA Identifique e descreva os resultados desejados para o problema, procurando
observar se todas as entradas ou recursos necessários estão disponíveis.
Mensagem se o dígito verificador digito está correto ou não
4. BASE DE TESTES Defina um conjunto de informações (no mínimo 3) de entrada com suas
respectivas saídas, visando montar uma base de testes para o problema.
(E) Conta: 23456 Digito: 7 (S) “INCORRETO”
(E) Conta: 99999 Digito: 0 (S) “CORRETO”
(E) Conta: 10000 Digito: 5 (S) “INCORRETO”
5. PROCESSAMENTO Identifique os elementos fundamentais de processamento para a solução do
problema
5.1 Identifique os verbos que indiquem as operações que devem ser realizadas para
a solução do problema:
Verificar se o dígito verificador está correto
5.2 Identifique se há a necessidade de uso de estruturas de seleção e que tipo de
avaliação deve ser feita:
Comparar o dígito verificador calculado com o digitado
5.3 Identifique se há a necessidade de uso de estruturas de repetição e o número ou
as condições de ocorrência das repetições:
Separar os dígitos do número da conta
5.4 Identifique se há a necessidade de uso de matrizes e defina qual o seu tamanho
limite:
Não há
6. DESCRIÇÃO DO Descreva a seqüência de instruções necessárias para a solução do problema.
ALGORITMO
6.1 Descreva os passos gerais para a solução do problema. Destaque os passos onde
é necessário o refinamento da solução do problema e os descreva separadamente na
forma de um módulo.
Ler o número da conta
Ler o dígito verificador
Calcular o dígito correto
Se o dígito calculado é diferente do digitado então
Msg: INCORRETO
Senão
Msg: CORRETO

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 94


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

MÓDULO: Calcular o dígito correto


Inicializar soma
Para cada dígito da conta
Somar dígito
Dividir o resultado da soma por 9 e pegar o resto
6.2 Descreva o algoritmo em Portugol para a solução do problema.
algoritmo "digito"
var
conta, digito, digitoCorreto : inteiro

procedimento calcularDigito
//calcular o digito verificado correto
var
soma, auxConta : inteiro
inicio
//inicializar a soma dos dígitos
soma <- 0
//usar uma variável auxiliar para a conta
auxConta <- conta
//enquanto o auxiliar é maior do que 0
enquanto auxConta > 0 faca
//soma o dígito pegando o resto da divisão da conta por 10
soma <- soma + auxConta % 10
//recalcular o auxiliar da conta tirando o último dígito
auxConta <- auxConta \ 10
fimenquanto
//calcula o dígito verificador correto da conta
digitoCorreto <- soma % 9
fimprocedimento

inicio
//ler a conta
escreva ("Digite o número da conta: ")
leia (conta)
//ler o digito
escreva ("Digite o dígito verificador: ")
leia (digito)
//calcular digito correto
calcularDigito
//comparar digitos e escrever o resultado
se digito = digitoCorreto entao
escreva ("Digito CORRETO")
senao
escreva ("Digito INCORRETO. Correto = ", digitoCorreto)
fimse
fimalgoritmo
7. TESTES Execute as operações descritas no passo 6, utilizando a base de testes
descrita no passo 4 para verificar se os resultados desejados estão corretos.
Em algumas situações é necessário registrar informações intermediárias para
acompanhar a execução dos passos.
(E) Conta: 23456 Digito: 7 (S) “Digito INCORRETO. Correto = 2”
(E) Conta: 99999 Digito: 0 (S) “Digito CORRETO”
(E) Conta: 10000 Digito: 5 (S) “Digito INCORRETO. Correto = 1”
3. Exemplo do algoritmo SelectionSort com procedimentos.
DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 95
Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

algoritmo "Selection Sort"


var
vet : vetor[1..10] de real

procedimento lerVetor
//ler os dados e armazenar em um vetor
var
cont : inteiro
inicio
para cont de 1 ate 10 faca
leia(vet[cont])
fimpara
fimprocedimento

procedimento ordenarVetor
//ordena o vetor utilizando o SelectionSort
var
i, cont, posMenor : inteiro
temp : real
inicio
//percorrer o vetor
para cont de 1 ate 9 faca
//define a posição do menor como sendo a posição atual
posMenor <- cont
//percorre o restante do vetor procurando o menor valor
para i de cont+1 ate 10 faca
//compara o elemento atual com o da posição do menor
se (vet[i] < vet[posMenor]) entao
//guarda a posição do elemento
posMenor <- i
fimse
fimpara
//se encontrou elemento menor troca a posição
se (cont <> posMenor) entao
//troca os elementos de posição
temp <- vet[cont]
vet[cont] <- vet[posMenor]
vet[posMenor] <- temp
fimse
fimpara
fimprocedimento
procedimento escreverVetor
//escreve o conteúdo do vetor
var
cont : inteiro
inicio
para cont de 1 ate 10 faca
escreval(cont:3," - ", vet[cont] : 10 : 3)
fimpara
fimprocedimento

//programa principal
inicio

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 96


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

lerVetor
ordenarVetor
escreverVetor
fimalgoritmo

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 97


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

8 Estrutura de Dados Heterogêneas - Registros


• Os problemas computacionais muitas vezes exigem a
manipulação de diversas informações sobre uma
mesma entidade.
• Exemplos:
- uma pessoa pode ser definida por seu nome, sexo,
endereço, telefone, rg, data de nascimento, entre outras
informações.

- um aluno pode ser definido como uma pessoa e mais o


seu código de matrícula, curso, disciplinas em que está
matriculado, etc.

- uma disciplina pode ser definida por seu código, nome,


professor, horário, etc.

- um produto pode ser definido por seu código, preço,


quantidade em estoque, fornecedor, etc.

 Questão: nestes casos criaríamos uma variável para cada


item? E se quiséssemos criar matrizes de pessoas, de
alunos, de disciplinas ou de produtos?

• Para facilitar a manipulação destes tipos de dados


usamos os registros.
• Os registros são estruturas de dados heterogêneas
pois podem conter dados de diversos tipos.
• Os registros são constituídos por tuplas também
chamadas de campos.
- Exemplo 1: nome, sexo, endereço, telefone, rg e data de
nascimento são campos do registro pessoa.

- Exemplo 2: o código, nome, professor e horário são


campos so registro disciplina.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 98


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

• O campo do registro pode ser definido com base em um


tipo primitivo ou derivado de um tipo definido pelo
próprio programador.
- Exemplo: no registro de aluno o número de matrícula
pode ser definido como sendo do tipo inteiro, o curso
onde ele está matriculado pode ser definido como string
e as disciplinas onde ele está matriculado podem ser
definidas como sendo um vetor.

• A manipulação de um registro pode ser feita tanto na


sua totalidade, ou seja, todos os campos ao mesmo
tempo, quanto na especificidade de cada campo.
• Normalmente a definição de um registro é feita através
da criação de um tipo abstrato de dados.
• Um tipo abstrato de dados é um tipo criado e definido
pelo programador o qual pode ser usado na declaração
de variáveis de um programa.
• Sintaxe de Definição2:
tipo //área de declaração de tipos
nome_do_registro = registro
campo1 : tipo
campo2 : tipo
.
campon : tipo
fimregistro
var //área de declaração de variáveis
identificador_registro : nome_do_registro

• Sintaxe de Uso: para fazer referência a um campo de


um registro deve-se utilizar o nome da variável do tipo
registro seguido do nome do campo que se deseja
utilizar, separado por um . (ponto).
identificador_registro.campo1
identificador_registro.campo2

2
O VisuAlg não permite a definição de registros.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 99


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

• Exemplo:
tipo //área de declaração de tipos
RegPessoa = registro
nome : caracter
sexo : caracter
rg: inteiro
fimregistro
var //área de declaração de variáveis
pessoa, pessoa1 : RegPessoa
inicio
leia (pessoa.nome)
leia (pessoa.sexo)
leia (pessoa.rg)
pessoa1 <- pessoa
escreva (pessoa1.nome)
escreva (pessoa1.sexo)
escreva (pessoa1.rg)
fimalgoritmo

• As operações de leitura e escrita tem que ser feitas


referenciando-se diretamente o campo do registro que
será manipulado.
• A atribuição de um registro completo pode ser feita
referenciando-se o próprio registro. Entretanto, ela só
pode ser feita entre variáveis do mesmo tipo.

Exercícios Resolvidos

4. Uma empresa tem o código, nome, cargo e salário de seus funcionários.


Baseado nisto, descreva um algoritmo que leia os dados dos funcionários
e escreva todas as informações do funcionário que tem o maior salário e
do que tem o menor salário.
1. PROBLEMA Verifique atentamente se o problema está bem definido, se não há
ambigüidades ou informações incompletas e irrelevantes.
(INTERPRETAÇÃO)
Destaque aqui as ambigüidades ou informações incompletas
Não há referência a como encerrar a leitura. Será utilizado código
= 0.
2. DADOS DE ENTRADA Identifique e descreva os dados ou recursos (substantivos) disponíveis
para a solução do problema.
código, nome, cargo e salário de funcionários
3. DADOS DE SAÍDA Identifique e descreva os resultados desejados para o problema, procurando
observar se todas as entradas ou recursos necessários estão disponíveis.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 100


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

código, nome, cargo e salário do funcionário com maior salário


código, nome, cargo e salário do funcionário com menor salário
4. BASE DE TESTES Defina um conjunto de informações (no mínimo 3) de entrada com suas
respectivas saídas, visando montar uma base de testes para o problema.
(E) 1 JJ Pedreiro 4500,00 (S) Funcionário com maior salário
2 Mia Secretária 5000,00 3 Cacá Diretor 30000,00
3 Cacá Diretor 30000,00 Funcionário com menor salário
4 Beá Faxineira 400,00 4 Beá Faxineira 400,00
5. PROCESSAMENTO Identifique os elementos fundamentais de processamento para a solução do
problema
5.1 Identifique os verbos que indiquem as operações que devem ser realizadas para
a solução do problema:
Achar o maior e o menor salário
5.2 Identifique se há a necessidade de uso de estruturas de seleção e que tipo de
avaliação deve ser feita:
Comparar o salário para encontrar o maior e o menor salário
5.3 Identifique se há a necessidade de uso de estruturas de repetição e o número ou
as condições de ocorrência das repetições:
Repetir até que seja digitado o código 0 para o funcionário
5.4 Identifique se há a necessidade de uso de matrizes e defina qual o seu tamanho
limite ou se há a necessidade do uso de registros e defina seus campos:
Não é necessário matrizes.
Será utilizado um registro para os funcionários contendo código,
nome, cargo e salário.
6. DESCRIÇÃO DO Descreva a seqüência de instruções necessárias para a solução do problema.
ALGORITMO
6.1 Descreva os passos gerais para a solução do problema. Destaque os passos onde
é necessário o refinamento da solução do problema e os descreva separadamente na
forma de um módulo.
Inicializar maior e menor salário
Ler código do funcionário
Enquanto código diferente de 0
Ler nome, cargo e salário
Se é o maior salário
Armazenar dados do funcionário
Se é o menor salário
Armazenar dados do funcionário
Ler código do funcionário
Fimenquanto
Escrever dados do funcionário com maior salário
Escrever dados do funcionário com menor salário
6.2 Descreva o algoritmo em Portugol para a solução do problema.
algoritmo “salario”
tipo
RegFuncionario = registro
codigo : inteiro
nome : caracter
cargo : caracter
salario : real
fimregistro
var
funcionario, funcMaior, funcMenor : RegFuncionario
maior, menor : inteiro
inicio
//Inicializar maior e menor salário

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 101


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

maior = 0
menor = 999999
//Ler código do funcionário
escreva (“Digite o codigo do funcionario (0 para sair)”)
leia (funcionario.codigo)
//Enquanto código diferente de 0
enquanto (funcionario.codigo) <> 0 faca
//Ler nome, cargo e salário
escreva (“Digite o nome do funcionario”)
leia (funcionario.nome)
escreva (“Digite o cargo do funcionario”)
leia (funcionario.cargo)
escreva (“Digite o salario do funcionario”)
leia (funcionario.salario)
//Se é o maior salário
se (funcionario.salario > maior) entao
//Armazenar dados do funcionário
maior <- funcionario.salario
funcMaior <- funcionario
fimse
//Se é o menor salário
se (funcionario.salario < menor) entao
//Armazenar dados do funcionário
menor <- funcionario.salario
funcMenor <- funcionario
fimse
//Ler código do funcionário
escreva (“Digite o codigo do funcionario (0 para sair)”)
leia (funcionario.codigo)
fimenquanto
//Escrever dados do funcionário com maior salário
escreval (“Funcionário com maior salário”)
escreval (funcMaior.codigo, “ “, funcMaior.nome, “ “,
funcMaior.cargo, “ “, funcMaior.salario)
//Escrever dados do funcionário com menor salário
escreval (“Funcionário com menor salário”)
escreval (funcMenor.codigo, “ “, funcMenor.nome, “ “,
funcMenor.cargo, “ “, funcMenor.salario)
fimalgoritmo
7. TESTES Execute as operações descritas no passo 6, utilizando a base de testes
descrita no passo 4 para verificar se os resultados desejados estão corretos.
Em algumas situações é necessário registrar informações intermediárias para
acompanhar a execução dos passos.
(E) 1 JJ Pedreiro 4500,00 (S) Funcionário com maior salário
2 Mia Secretária 5000,00 3 Cacá Diretor 30000,00
3 Cacá Diretor 30000,00 Funcionário com menor salário
4 Beá Faxineira 400,00 4 Beá Faxineira 400,00
8. OTIMIZAÇÃO Reveja a solução proposta, mesmo se estiver correta, para eliminar eventuais
possibilidades de erro e melhorar a maneira de descrever ou o modo como
está sendo feito. Uma solução eficiente deve usar menos memória possível e
ser a mais rápida possível. Caso encontre possibilidades de melhoria retorne
ao passo 6.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 102


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

Exercícios Propostos

1. O IBOPE fez uma pesquisa de intenção de votos para os candidatos à


presidência, registrando o número do candidato. Considerando que o IBGE
tem a lista com o número e o nome do candidato, descreva um algoritmo
que leia os dados sobre os candidatos e os armazene em um vetor e, em
seguida, leia cada intenção de voto, totalizando para o respectivo
candidato. Ao final, imprima o número do candidato, o nome do candidato
e o seu respectivo total de intenções de voto. A leitura dos dados sobre os
candidatos e a leitura dos dados de intenção de votos deve ser finalizada
quando for digitado 0 no número do candidato.
2. Um professor tem o código, nome e três notas dos 40 alunos de sua
disciplina. Baseado nisto, imprima primeiramente uma lista dos alunos
aprovados e em seguida uma lista dos alunos reprovados. Considere que
a média para aprovação é 6.0 sendo calculada de forma aritmética.
3. Uma revendedora de automóveis tem o código, nome, marca, ano,
modelo e preço de venda de seus automóveis. A empresa deseja imprimir
uma lista ordenada da seguinte forma: a primeira chave de ordenação é a
marca do veículo em ordem crescente. A segunda chave de ordenação é o
nome do veículo também em ordem crescente e a terceira chave é o ano
do veículo. Baseado nisto, descreva um algoritmo que leia os dados dos
automóveis e escreva todas as informações considerando as chaves de
ordenação apresentadas.
4. Uma empresa de passagens aéreas quer fazer um controle de reservas de
passagens em seus vôos. Para isto ela mantém o número dos vôos, a
origem, o destino, e a quantidade de lugares disponíveis (1 <= número de
vôos <= 70). Baseado nisto descreva um algoritmo que:
a) leia pedidos de reserva dos passageiros, constituídos do número da
identidade, nome do passageiro e número do vôo desejado e
verifique se há disponibilidade no vôo. Em caso afirmativo, registre a
reserva para o passageiro e atualize o número de lugares disponíveis
no vôo. Caso contrário, escreva uma mensagem informando a
inexistência de lugares, e acumule a quantidade de reservas não
efetuadas.
b) emita um relatório de cada vôo com suas respectivas listas de
passageiros e os dados de todos os vôos onde houve falta de lugares.
Use um menu de opções para o cadastro de vôos, de reservas e para
emissão de relatórios.
5. Considere uma prova de múltipla escolha (opções “a”, “b”, “c”, “d” e “e”)
com 10 questões, cada questão valendo um ponto. Baseado nisto
descreva um algoritmo que:
a) leia o gabarito da prova;
b) leia o código do aluno, seu nome e as respostas de cada aluno para
cada questão;

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 103


Universidade Regional de Blumenau / Centro de Ciências Exatas e Naturais / Departamento de Sistemas e Computação

c) informe o código, o nome e a nota dos alunos aprovados e dos alunos


reprovados (considere aprovado o aluno com nota maior ou igual a
6.0);
d) informe a porcentagem de alunos aprovados e reprovados;
e) informe o(s) número(s) da(s) questão(ões) que mais foi(ram)
acertada(s) pelos alunos
f) informe o(s) número(s) da(s) questão(ões) que menos foi(ram)
acertada(s) pelos alunos
g) informe a nota que teve maior freqüência absoluta, ou seja, a nota
que apareceu o maior número de vezes (supondo que não existem
empates).
Considere que o número de alunos pode variar de 1 a 200.
6. O coordenador do curso tem o código do aluno, seu nome e a relação de 5
disciplinas em que ele está matriculado. Baseado nisto, descreva um
algoritmo que:
a) informe os dados dos alunos que estão cursando duas disciplinas A e
B simultaneamente;
b) dado o nome de uma determinada disciplina, informe a lista dos
alunos matriculados.
Considere que o número de alunos pode variar de 1 a 200.
7. Uma empresa decidiu fazer um levantamento em relação aos candidatos
que se apresentarem para preenchimento de vagas no seu quadro de
funcionários (1 <= número de candidatos <= 100). Baseado nisto
descreva um algoritmo que:
a) leia um conjunto de informações para cada candidato, contendo:
código de inscrição do candidato, idade (em anos), sexo (m/f) e
experiência no serviço (s/n).
b) informe os dados do(s) homem(ns) mais velho(s) e mais novo(s);
c) informe os dados da(s) mulher (es) mais velha(s) e mais nova(s);
d) informe a quantidade de candidatos de cada sexo;
e) informe a média de idade dos homens com experiência no serviço,
f) informe a quantidade de mulheres com idade inferior a 35 anos e
com experiência no serviço,
g) informe a menor idade entre as mulheres que já tem experiência no
serviço;
Obs: para encerrar será informado código de inscrição do candidato igual
a zero.

DISCIPLINA: Introdução a Programação PROFESSOR: Maurício Capobianco Lopes pág.: 104