Algoritmos

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 46

Introdução

O computador é um conjunto formado pela combinação adequada de hardware e


software.

Hardware é o equipamento, a máquina, com suas peças mecânicas e eletrônicas.

Software é o conjunto de procedimentos (programas) que fazem com que o


computador seja útil, isto é, execute tarefas que solucionem determinado problema.
Exemplo: Windows, Word, Excel.

DADOS DE ENTRADA COMPUTADOR DADOS DE SAÍDA

(PROCESSAMENTO)
RESULTADOS

Em uma abordagem bastante simplificada, podemos imaginar o computador como


uma grande “caixa preta”, para a qual fornecemos informações (dados) e que, após
a realização de uma série de operações baseadas nestes dados de entrada, nos
fornece resultados. Ou seja, o computador é um processador de dados, com
capacidade de aceitar informações (dados de entrada), efetuar com elas operações
programadas (processamento) e, fornecer resultados para a resolução de problemas
(dados de saída).

Os computadores podem ser usados eficientemente no processo de solução de


vários tipos de problemas, nas mais diversas áreas do conhecimento humano, como
por exemplo:

9 Sistemas automáticos para transações bancárias;


9 Prospecção de minérios;
9 Produção de aços e metais;
9 Indústria química;
9 Instrumentação de laboratórios (física, química, dentre outros).

Organização do Computador
Unidades de Entrada: São os componentes que permitem a entrada de
informações exteriores para serem processadas pelo computador. Ex: Teclado,
mouse, câmera de vídeo.

Unidades de Saída: São os componentes que permitem a apresentação de


informações processadas para o meio externo. Ex: monitor, impressora.

Unidade Central de Processamento (CPU): É responsável pela execução dos


programas e pelo comportamento das outras unidades no sistema. É capaz de fazer
contas matemáticas e tomar decisões simples.

Unidade Lógica e Aritmética: Parte da CPU que realiza operações aritméticas e


lógicas.

Memória RAM: Usada para manter instruções e dados. É uma memória volátil, isto
é, quando o computador é desligado, todos os dados armazenados se perdem.

Memória ROM: Contém dados e códigos de execução que não podem ser
alterados.

Unidade de Controle: Parte da CPU que busca na memória a próxima instrução e a


decodifica para ser executada.

Memórias Secundárias: Memória para armazenamento em longo prazo. Os dados


nesta memória não são perdidos quando se desliga o computador. Ex: discos
rígidos, disquetes, cd’s.

Alguns termos técnicos

Sistema Operacional: Coleção de programas que gerencia e aloca recursos de


hardware e software. Exemplos de tarefas de um sistema operacional: leitura de
dados, impressão de dados, gerenciamento da CPU, gerenciamento de memória,
dentre outras tarefas. Exemplos de sistemas operacionais: Windows, Linux, Unix,
MS-DOS.

Linguagem de Máquina: Conjunto de instruções que podem ser interpretados e


executados diretamente pela CPU de um computador. É específica de cada
computador.

Linguagem de Alto Nível ou Linguagem de programação: Linguagem que


independe do conjunto de instruções da linguagem de máquina do computador.
Exemplo: Pascal, C, C++, Delphi, dentre outras.

Compilador: Tradutor de programas escritos em uma linguagem de programação


para programas em linguagem de máquina.

Programa Fonte Compilador Programa Executável ou


Objeto

S.O / CPU
No processo de compilação, todo o programa fonte é traduzido para linguagem de
máquina antes de iniciar a execução.

Interpretador: É um programa que executa outros programas escritos em alguma


linguagem de programação. Um interpretador traduz uma instrução do programa
fonte de cada vez e executa essa instrução. Não gera programa executável.

Programa Fonte Compilador

S.O / CPU

Algoritmos

Para nos comunicarmos com o computador e fazer com que ele execute as tarefas
que desejamos, é preciso descrever como estas tarefas devem ser executadas. A
esta descrição, chamamos de algoritmo.

Um algoritmo é uma seqüência finita de ações que devem ser executadas para que
se possa resolver um determinado problema. Quando a forma de se expressar
essas ações obedece às regras de alguma linguagem de programação, passamos a
chamá-lo de programa.

Ação – Uma ação é um evento que ocorre num período de tempo finito,
estabelecendo um efeito intencionado e bem definido. Exemplos:

“Caminhar até a porta.”


“Colocar um livro em cima da mesa.”
“Andar”

Exemplo de um algoritmo que descreve o procedimento para se lavar o cabelo:

1 – Molhe o cabelo.
2 – Repita duas vezes.
Coloque a quantidade correspondente a uma tampa de xampu no cabelo.
Massageie até fazer espuma.
Enxágüe.

Desenvolver um bom algoritmo é a principal chave para a programação de


computadores.
PROBLEMA

ANÁLISE PRELIMINAR

SOLUÇÃO

TESTE DE QUALIDADE ALTERAÇÃO

PRODUTO FINAL

Análise Preliminar: Entenda o problema com a maior precisão possível. Identifique


os dados; identifique os resultados desejados.

Solução: Desenvolva um algoritmo para resolver o problema.

Teste de Qualidade: Execute o algoritmo desenvolvidos com dados para os quais o


resultado seja conhecido.

Alteração: Se o resultado do teste de qualidade não for satisfatório, altere o


algoritmo e submeta-o a um novo teste de qualidade.

Produto Final: Algoritmo concluído e testado, pronto para ser aplicado.

Para padronizar a descrição de algoritmos, utilizaremos uma pseudoliguagem de


programação: o Portugol.

Com o Portugol, será possível obter uma notação que deve ser utilizada na
definição, criação e desenvolvimento de algoritmos.

Como os computadores só podem executar os algoritmos expressos em alguma


linguagem de programação, para implementar os algoritmos desenvolvidos em sala
de aula e executá-los nas aulas de laboratório, faremos a tradução desses
algoritmos (escritos em Portugol) para a linguagem de programação Pascal.

Estrutura básica de um algoritmo


Um algoritmo tem o seguinte formato:

Início
Declarações; (2)
Comandos; (3)
Fim. (4)
(1) Início: palavra que indica o início do algoritmo.

(2) Declarações: declaração dos objetos que serão utilizados no algoritmo, como
por exemplo, constantes, variáveis, tipos, funções, procedimentos. Cada declaração
deve ser separada por um ponto e vírgula.

(3) Comandos: descrição da seqüência de comandos (ações) a serem executados


pelo computador, para solucionar o problema em questão. Os comandos são
separados por ponto e vírgula.

(4) Fim: palavra que indica o final do algoritmo. Deve ser seguida pelo ponto final.

Comando de Saída ou de Escrita

É usado para se transmitir informações (mensagens, resultado de processamento)


do computador para o meio externo.

A forma geral de utilização desse comando é:

Imprima (Lista de itens a imprimir);


Exemplo1:

Início
imprima (“Aula de Introdução à Ciência da Computação”);
Fim.

Ao ser executado o algoritmo acima, será impresso na tela do computador a


seguinte frase:

Aula de Introdução à Ciência da Computação

Exemplo2:

início
imprima (“Ouro Preto”);
imprima (“Universidade Federal de Ouro Preto”);
imprima (“Aula de Introdução à Ciência da Computação”);
fim.

A finalidade deste algoritmo é escrever, na tela do computador a seguinte


mensagem:

Ouro Preto
Universidade Federal de Ouro Preto
Aula de Introdução à Ciência da Computação
Nos exemplos acima, cada comando possui apenas um item a imprimir. Se houver
mais de um, eles devem ser separados por vírgulas. Por enquanto, esses itens
foram apenas mensagens, escritas entre aspas. Logo adiante serão apresentadas
outras possibilidades.
Exercício: Faça um algoritmo que imprima o seguinte:

Instituição:
Universidade Federal de Ouro Preto.
Disciplina:
Introdução à Ciência da Computação.
Aula sobre comando de escrita.

Identificadores, Constante e Variáveis

Identificadores: são nomes simbólicos para objetos referenciados nos algoritmos.


Os identificadores podem fazer referência a constantes, variáveis e outros
elementos constitutivos do algoritmo, que serão apresentados mais adiante. O
próprio nome do algoritmo é um identificador. Identificadores são compostos por
letras e dígitos numéricos, sendo que o primeiro caracter deve ser uma letra. Alguns
compiladores também aceitam o traço de sublinhamento, '_', como parte de um
identificador.

Exemplos:

Identificadores válidos: k, X, y, tamanho, tam, tam12, fim_de_dados


Identificadores não válidos: 2k, fim de dados, x.data

As palavras que já fazem parte da linguagem Pascal são reservadas, não podendo
ser usadas como identificadores.

Constantes: uma constante é um determinado valor fixo, que não se modifica ao


longo do tempo, dentro de um algoritmo. A definição de constantes deve ser feita na
área declarações, da seguinte maneira :

Constante Nome_da_Constante = Valor_da_Constante;

Para exemplificar o uso de constantes, seja o seguinte algoritmo:

Algoritmo que calcula e imprime o comprimento de uma circunferência de raio igual


a 30 cm.
O comprimento da circunferência é dado pela fórmula: 2 x π x r

Inicio
Constante Pi= 3,14;
Imprima (“O comprimento desta circunferência é:”, 2 * Pi * 30);
Fim.

Observação

No exemplo acima, o comando imprima apresenta dois itens a serem impressos,


sendo que um deles é uma mensagem de texto e o outro o resultado de uma
expressão aritmética. Nesses casos, os itens devem ser separados por vírgulas e,
somente as mensagens de texto devem vir entre aspas.
Exercício: Elabore um algoritmo que calcule e imprima a área da circunferência do
exemplo anterior. Área= π x r2

O uso de constante foi conveniente no exemplo acima porque o valor de π não se


altera dentro do algoritmo. Se essa alteração estiver prevista no algoritmo, terão que
ser usadas variáveis.

Variáveis

São objetos que podem assumir diferentes valores dentro do mesmo algoritmo.
Embora uma variável possa assumir diferentes valores, ela só pode armazenar um
valor a cada instante. A cada variável está associado um nome e um tipo que define
a natureza da informação que ela pode armazenar.

Podemos ver uma variável como uma caixa com um rótulo (nome ou identificador).
Podemos construir caixas com diferentes tamanhos e formatos e associar cada um
desses modelos a um “tipo” diferente de dado. Em uma caixa de um certo tipo só
pode haver, num determinado instante, um único objeto (valor), que deve ter o
mesmo formato (tipo) da caixa.

Tipos de Dados

Cada constante ou cada variável tem, em um determinado algoritmo, um tipo


associado, que caracteriza o tipo de dado que ela representa. Os tipos básicos de
dados são: inteiro, real, caracter, lógico

inteiro: representa qualquer número inteiro; negativo, nulo ou positivo. Ex: -5, 0, 235

real: representa representa qualquer número real; negativo, nulo ou positivo. Ex: -5,
30.5, 40.

caracter: representa qualquer conjunto de caracteres. Ex: “AB”, “Ouro Preto”, “123”.

lógico: representa os valores Falso e Verdadeiro.

Declarando Variáveis

A definição de variáves é feita na área de declarações e deve obedecer ao seguinte


formato:
Tipo da variável: Nome da variável;

Exemplo:

inteiro: x1; (1)


real: A, B; (2)
caracter: Nome, Sobrenome; (3)
lógico: resposta; (4)
(1)

x
A variável x só podem armazenar valores do tipo inteiro, como por exemplo: 2, 50, 0,
-10.

(2)

A B

As variáveis A e B podem armazenar somente valores reais, como por exemplo:


25.5, 10.9, -16.4.

(3)

Nome Sobrenome

As variáveis Nome e sobrenome podem armazenar somente cadeias de caracteres,


como por exemplo: “João”, “da Silva”, “Ana”, “Magalhães”.

(4)

resposta

A variável resposta só pode armazenar os valores Verdadeiro ou Falso.

Comando de Atribuição

O comando de atribuição (←) atribui um valor (pode ser uma expressão) que está a
direita de ← para uma variável que está na parte esquerda do comando,
representada pelo seu identificador.

A forma de utilização deste comando é mostrada abaixo:

V ← E;

Onde: V – representa o nome de uma variável (identificador).


E – representa uma expressão que produz um resultado do mesmo tipo
de V.
Exemplos:

Exemplo1)

Início
caracter: nome, sexo; (1)
inteiro: idade; (2)
nome ← “João”; (3)
idade ← 25; (4)
sexo ← “M”; (5)
imprima (“O funcionário”, nome, “tem”, idade, “anos”); (6)
Fim

(1) Cria duas variável do tipo caracter, associadas aos identificadores “nome” e
“sexo”, respectivamente, e que pode armazenar um ou mais caracteres caracteres.

Variáveis do tipo caracter

nome Sexo

(2) Cria uma variável do tipo inteiro, associada ao identificador “idade” e que pode
armazenar números inteiros.

Variável do tipo inteiro

Idade

(3) Atribui à variável nome a cadeia de caracteres “João”.

João
(4) Atribui à variável idade o valor 25.

25

(5) Atribui à variável sexo o caracter “M”.

(6) Imprime, no vídeo, a seguinte frase:

O funcionário João tem 25 anos.

Exemplo2)

Início
inteiro: x,y;
real: w;
caracter: letra, texto;
x ← 2;
y ← 10;
w ← 30.2;
texto ← “Aula sobre comando de atribuição”;
letra ← “a”;
y ← 12;
w ← 16.0;
letra ← “z”
imprima(x);
imprima(y);
imprima(w);
imprima(texto);
imprima(letra);
Fim.

Analisando o algoritmo acima, temos:

x y W Texto letra
2 10 30.2 Aula sobre comando de atribuição A
12 16.0 z

Ao final do algoritmo, serão impressos os seguintes valores:

2 12 16.0 Aula sobre comando de atribuição z.

Exemplo3) Algoritmo que calcula e imprime o comprimento de uma circunferência de


raio igual a 30 cm. O comprimento da circunferência é dado pela fórmula: 2 x π x r

Inicio
Constante Pi= 3,14;
real: c;
c ← 2 * Pi * 30;
imprima (“O comprimento desta circunferência é:”, c);
Fim.

Exercícios

1) Considere a declaração das variáveis nome, x, y, z e t dada a seguir:

caracter: nome, z, t;
inteiro: x;
real: y;

Com base nesta declaração, analise as atribuições feitas a estas variáveis indicando
quais estão corretas e quais estão incorretas. Para as atribuições incorretas, mostre
onde está o erro.
a) x ← 10 b) x ← 3.14 c) y ← x+1.5 d) x ← y
e) z ← “a” f) z ← “computador” g) z ← t
i) nome ← “carlos” j) nome ← 100

2) Considere o seguinte algoritmo:

Início
inteiro: a, b, c, d;
a ← 1;
b←2;
c←3;
d←c;
c←b;
b←a;
a←d;
imprima (“Os valores de a, b, e c são, respectivamente:”, a, b, c);
Fim.

Quais os valores das variáveis a, b, c serão impressos pelo algoritmo acima?

3) Elabore um algoritmo que calcule e imprima a área da circunferência do exemplo


anterior. Área= π x r2

Comando de Entrada ou Leitura

É usado para transmitir informações (dados) do usuário para o computador. Estas


informações serão armazenadas em variáveis, declaradas no algoritmo. Este
comando é uma outra forma de se atribuir valores a variáveis.

A forma geral de utilização desse comando é:

leia (lista de identificadores);

Exemplos:

Início
inteiro: idade; (1)
caracter: nome (2)
imprima (“Informe a sua idade:”); (3)
leia (idade); (4)
imprima (“Informe o seu nome:”); (5)
leia (nome); (6)
imprima (nome, “tem”, idade, “anos”); (7)
Fim.

(1) Cria a variável “idade”, do tipo inteiro.


(2) Cria a variável “nome” do tipo caracter.

(3) Envia uma mensagem para o usuário, pedindo que este informe a sua idade.
(4) Lê a idade digitada pelo usuário e a armazena na variável “idade”.

(5) Envia uma mensagem para o usuário, pedindo que este informe o seu nome.

(6) Lê o nome digitado pelo usuário e o armazena na variável (nome).

(7) Imprime na tela o nome do usuário, seguido da sua idade.

Caso o usuário entre com os dados 29 e Flávia, o algoritmo deve imprimir:

Informe a sua idade: 29


Informe o seu nome: Flávia
Flávia tem 29 anos.

Início
caracter: inst,disc;
imprima (“Informe o nome da instituição onde estuda:”);
leia (inst);
imprima (“Informe o nome da disciplina que está cursando:”);
leia (disc);
imprima (“Instituição:”, inst);
imprima (“Disciplina:”,disc);
Fim.

Supondo que o usuário digite os valores UFOP e ICC, o algoritmo acima deverá
imprimir as seguintes linhas:

Informe o nome da instituição onde estuda: UFOP


Informe o nome da disciplina que está cursando: ICC
Instituição: UFOP
Disciplina: ICC

Exercício: Faça um algoritmo que leia as seguintes informações do usuário: nome,


idade, cidade onde mora, profissão, estado civil. Em seguida, o algoritmo deverá
imprimir esses dados.

Expressões

Existem basicamente três tipos de expressões: Expressões Aritméticas, Expressões


Relacionais e Expressões Lógicas.

Expressões Aritméticas

Operações realizadas entre valores de tipo numérico e, que têm como resultado um
valor numérico. Essas expressões envolvem os seguintes operadores aritméticos:

+, -, *, / ^ (adição, subtração, multiplicação, divisão, potenciação);


mod (operador de inteiros: resto da divisão de números inteiros);
div (operador de inteiros: parte inteira da divisão).

Além desses operadores, serão usadas também algumas funções matemáticas


comuns, como por exemplo:

Raiz (x): calcula a raiz quadrada do número entre parênteses.


Quadrado (x): calcula o quadrado do número entre parênteses.
Sen (x): calcula o seno do número entre parênteses.
Cos (x): calcula o cosseno do número entre parênteses.

Exemplos

1) Algoritmo que lê dois números inteiros, calcula e imprime a média aritmética


desses números.

Início
inteiro: x, y;
real: med;
imprima (“Entre com um valor:”);
leia (x);
imprima (“Entre com outro valor:”);
leia (y);
med ← (x+y)/2;
imprima (“A média entre os números”, x, “e”, y, “é:”, med);
Fim.

2) Algoritmo que lê dois números inteiros x e y, calcula e imprime o valor de xy.

Início
inteiro x, y, resultado;
imprima (“Entre com o valor de x:”);
leia (x);
imprima (“Entre com o valor de y:”);
leia (y);
resultado ← x ^ y;
imprima (“O valor de”, x, “elevado a”, y “é:”, resultado);
Fim.

3) Algoritmo que lê um determinado número inteiro e calcula e imprime o quadrado


desse número e a sua raiz quadrada.

Início
inteiro: x, quad;
real: r;
imprima (“Entre com um valor:”);
leia (x);
quad ← Quadrado (x);
r ← Raiz (x);
imprima (“O quadrado de”, x, “é:”, quad);
imprima (“A raiz quadrada de”, x, “é:”, r);
Fim.

Expressões Relacionais

São operações de comparação entre dois valores de mesmo tipo. O resultado de


uma operação relacional é sempre um valor lógico, retornando ou verdadeiro ou
falso.

Os operadores relacionais usados serão:

=, ≠, <, >, <=, >= (igual, diferente, menor, maior, menor ou igual, maior ou igual)

Expressões Lógicas

Operações entre valores lógicos, e que têm como resultado um valor lógico. Os
operadores lógicos são: não, e, ou.

não: inverte o valor lógico.

Valor Operação Resultado


verdadeiro não (verdadeiro) falso
falso não (falso) verdadeiro

e: retorna verdadeiro se ambos os operandos são verdadeiros.

Operando 1 Operando 2 Operação Resultado


Verdadeiro verdadeiro verdadeiro e verdadeiro verdadeiro
Verdadeiro falso verdadeiro e falso falso
Falso verdadeiro falso e verdadeiro falso
Falso falso falso e falso falso

ou: retorna verdadeiro se um dos operandos for verdadeiro.

Operando 1 Operando 2 Operação Resultado


Verdadeiro verdadeiro verdadeiro ou verdadeiro verdadeiro
Verdadeiro falso verdadeiro ou falso verdadeiro
Falso verdadeiro falso ou verdadeiro verdadeiro
Falso falso falso ou falso falso

Precedência ou prioridade dos operadores

Ao se avaliar uma expressão podemos encontrar operadores aritméticos relacionais


e lógicos. Esses operadores seguem uma ordem de prioridade. A tabela abaixo
apresenta a ordem de prioridade dos operadores (primeiro os de maior
precedência).
Expressões dentro de parênteses
Operador unário (positivo ou negativo)
não
*, /, div, mod, e
+, -, ou
=, ≠, <, >, <=, >=
Sempre que quisermos quebrar a ordem natural das operações, podemos usar
parênteses para especificar a nova ordem.

Lista de Exercícios 01

1) Descreva a estrutura básica de um computador.e explique o funcionamento do


mesmo, utilizando a estrutura descrita anteriormente.

2) O que é um compilador, para que serve ?

3) O que é um algoritmo? E um programa?

4) Supondo que as variáveis NB, NA, NMAT e SX sejam utilizadas para armazenar a
nota do aluno, o nome do aluno, o número da matrícula e o sexo, declare-as
corretamente, associando o tipo adequado ao dado que será armazenado.

5) Faça um algoritmo que lê dois pontos P1 = (x1, y1) e P2 = (x2, y2) e, calcule e
imprima a distância entre esses dois pontos, cujo valor é dado pela seguinte fórmula:
dist = ( x 2 − x1)2 + ( y 2 − y1)2

6) Dadas as seguintes informações de um funcionário: nome, idade, cargo e o seu


salário bruto, considere:

a) O salário bruto teve um reajuste de 38%.


b) O funcionário receberá uma gratificação de 20% do salário bruto.
c) O Salário total é descontado em 15%.

Faça um algoritmo para: Imprimir Nome, idade e cargo.


Calcular e imprimir o salário bruto.
Calcular e imprimir o salário líquido.

7) Uma companhia de carros paga a seu vendedor um salário de R$500,00 por mês
mais uma comissão de R$ 50,00 para cada carro vendido e mais 5% do valor da
venda. Todo mês a companhia prepara os seguintes dados para um determinado
vendedor: nome, número de carros vendidos e o valor total das vendas. Elabore um
algoritmo para calcular e imprimir o salário do vendedor num dado mês.

8) Numa concessionária de veículos, o vendedor recebe mensalmente, um salário


fixo mais comissão, que é baseada na quantidade e modelo vendido, conforme a
tabela abaixo:
Tipo Comissão (R$ por veículo vendido)
luxo 200,00
standard 100,00

Sabendo-se ainda que o vendedor tem um desconto de 8% sobre seu salário bruto
para o INSS, faça um algoritmo que leia o salário fixo e o número de carros de cada
modelo que esse funcionário vendeu e, calcule e imprima o salário bruto, o desconto
para o INSS e o salário líquido desse vendedor.
9) Elabore um algoritmo que dados dois lados de um triângulo retângulo, calcule a
respectiva hipotenusa.

10) A conversão de graus Farenheit para centígrados é obtida através da fórmula C=


5/9 (F-32). Elabore um algoritmo que receba uma temperatura em Farenheit e a
transforme para graus centígrados.

11) Construa um algoritmo que leia as dimensões dos lados de um retângulo,


calcule e imprima a área e perímetro deste retângulo.

12) Elabore um algoritmo que leia um número r, calcule e imprima o comprimento da


circunferência, a área do círculo e o volume da esfera de raio r.

13) Construa um algoritmo que leia os valores das bases e altura de um trapézio,
calcule e imprima o valor da sua área.

14) Considere a massa da terra igual a 5,9 x 1024 kg e um satélite de massa m em


órbita circular de raio R em torno da terra. Faça um algoritmo que leia o valor do raio
e, determine e imprima a velocidade escalar V do movimento orbital do satélite e o
período T do movimento orbital.

G. M R3
V= T =2π
R G. M

G = 6,7*10-11 Nm2/kg2
M → massa do planeta (kg)
R → raio da óbita (metros)
T → Período (segundos)
V → Velocidade escalar (m/s)

15) Água e óleo, são colocados em um sistema de vasos comunicantes como


mostra a figura. Elabore um algoritmo que leia a altura h1 (cm ) da coluna de óleo e
calcule e imprima a altura h2 da coluna de água medida acima do nível de separação
entre os líquidos.
h1 = d2 . h2 / d1
h1 → altura do óleo (cm)
h2 → altura da água (cm)
d1 → densidade do óleo (0,8 g/cm3)
d2 → densidade da água (1,0 g/cm3)
16) Elabore um algoritmo que leia o primeiro termo de uma Progressão Aritmética
(PA), sua razão, um número N e, a seguir, calcule e imprima o N-ésimo termo da PA.
Dado: Fórmula do termo geral de uma P.A : a n = a1 + (n − 1) × r

17) Desenvolva um algoritmo que leia um número N, o primeiro termo A1 e a razão q


de uma Progressão Geométrica (PG), calcule e imprima o N-ésimo termo desta PG.
n −1
Dado: Fórmula do termo geral de uma P.G : a n = a1 × q

Um pequeno formulário

h= c +c → hipotenusa de um triângulo retângulo.


2 2
1 2

SR = b x h → Área do retângulo.

PR = 2b + 2h → Perímetro do retângulo.

CC = 2πr → Comprimento da circunferência.

SC = πr2 → Área do Círculo.

4
π r → Volume da esfera.
3
VE =
3

( B + b) xh
ST = → Área do Trapézio.
2

Estrutura Condicional

A estrutura condicional permite a execução de comandos quando uma condição,


representada por uma expressão lógica, é satisfeita.

Estrutura Condicional Simples

A estrutura condicional simples é representada da seguinte forma:

se (condição) então
Comando1;
Comando2;
................
ComandoN;
fim se;

Exemplo: Algoritmo que lê um número e verifica se este é par.

início
real: n;
imprima (“Digite um número:”);
leia(n);
se (n mod 2 = 0) então
imprima (n, “ é um número par”);
fim se;
fim.

Estrutura Condicional Composta

A estrutura condicional composta é representada como mostrado abaixo:

se (condição)
então
Comando1;
Comando2;
................
ComandoN;
senão
Comando1;
Comando2;
.................
ComandoN;
fim se;

Exemplo: Algoritmo que lê um número e verifica se este é par ou ímpar.

início
real: n;
imprima(“Digite um número:”);
leia(n);
se (n mod 2 = 0)
então imprima (n, “é um número par”);
senão imprima (n, “é um número ímpar”);
fim se;
fim.
Outros exemplos:

1) Algoritmo que dados 2 números inteiros positivos A e B, calcula e imprime o valor


absoluto de A - B.

início
inteiro: A,B,C;
imprima(“Digite 2 números:”)
leia(A,B);
se (A > B)
então C Å A – B;
senão C Å B - A;
fim se;
imprima(C);
fim.
2) Algoritmo que lê 2 números e imprime o maior deles.

inicio
inteiro: x,y;
imprima(“Digite 2 números:”)
leia (x,y);
se (x > y)
então
imprima (“O maior número é:”, x);
senão
imprima (“O maior número é:”, y);
fim se;
fim.

3) Ler 3 números e imprimir o maior deles.

inicio
inteiro: x,y,z;
imprima(“Digite 3 números:”)
leia (x,y,z);
se (x > y) e (x > z)

então
imprima (“O maior número é:” ,x);
senão
se (y > x) e (y > z)
então imprima (“O maior número é:”, y);
senão imprima (“O maior número é:”, z);
fim se;
fim se;
fim.

4) Algoritmo que lê os coeficientes (a,b,c) de uma equação de segundo grau


(ax2+bx+ c=0) e, calcule e imprima as raízes desta equação (se existirem).
Dados:

Δ= b2 – 4ac
Se Δ ≥ 0, a equação possui duas raízes reais, calculadas através da fórmula:
Se Δ <0, a equação não possui raízes reais.

inicio
real: A, B, C, X1, X2, Delta;
imprima(“Forneça os coeficientes da equação:”);
leia (A, B, C);
Delta Å B*B - 4*A*C;
se Delta ≥ 0 então
X1 Å (-B + raiz(Delta)/(2*A);
X2 Å (-B - raiz(Delta)/(2*A);
imprima (“As raízes da equação dada são:”, X1, X2);
senão
imprima (“A equação dada não apresenta raízes reais”);
fim se;
fim.

Como se pode observar nos exemplos já apresentados, um fator que contribui


decisivamente para a legibilidade de um programa é a INDENTAÇÃO, ou seja, o
alinhamento dos comandos de acordo com o nível a que pertençam. Assim, um
bloco de comandos que deva ser escrito dentro de um comando C, estará deslocado
para a direita em relação a C.

Lista de Exercícios 02

1) início
lógico: b1,b2,b3;
se (b1) então Comando1;
senão se (b2) então
se (b3) então Comando2;
senão Comando3;
Comando4;
fim se;
fim se;
fim se;
Comando5;
fim.

Dado o algoritmo acima, responda:

a) Se b1= verdadeiro, b2= verdadeiro e b3= falso, quais comandos serão


executados ?
b) Se b1= falso, b2= verdadeiro e b3= falso, quais comandos serão executados?
c) Quais os valores de b1, b2 e b3 para que somente o Comando5 seja
executado ?
d) Se b1=falso, b2= verdadeiro e b3= verdadeiro, quais comandos serão
executados ?

2) Qual será o valor da variável L, após a execução do trecho de algoritmo abaixo ?

inicio
lógico: a,b,c;
real: x,y;
inteiro: v, L;
A←falso; b←verdadeiro; c←falso;
x←1.5; y←3.2;
x←x+1;
se (c ou ((x+y>5) ou (não a e b)) então L ←0;
senão L ←1;
fim se;
fim.

3) Elabore um algoritmo que leia 2 valores e verifique se um é divisível pelo outro.


4) Uma loja deseja mandar uma correspondência a um dos seus clientes
anunciando um bônus especial. Escreva um algoritmo que leia o nome desse cliente
e o valor das suas compras no ano passado e, calcule um bônus de 10% se o valor
das compras for menor que R$ 500.000,00 e de 15 %, caso contrário. O algoritmo
deve imprimir o nome do cliente e o bônus cedido ao mesmo cliente.

5) Faça um algoritmo que leia o nome, o cargo e o salário de um funcionário e


calcule seu novo salário reajustado. Se o cargo for operador, o funcionário deverá
receber um reajuste de 20%, se o cargo for programador, o funcionário deverá
receber um reajuste de 18%. O algoritmo deve escrever o nome e o novo salário do
funcionário, já reajustado.

6) Elabore um algoritmo que leia o salário atual de um funcionário de uma firma e


calcule e imprima o novo salário com percentual de reajuste dependendo do salário
atual conforme a seguinte tabela:

Salário atual <500 15%


Salário atual >=500 e <=1000 10%
Salário atual >1000 5%

7) Faça um algoritmo que, dados dois números e um caracter (+, -, *, /), calcule e
imprima:

- A soma desses números, caso seja digitado o caracter +.


- A subtração desses números, caso seja digitado o caracter -.
- A multiplicação desses números, caso seja digitado o caracter*.
- A divisão desses números, caso seja digitado o caracter /.

8) Faça um algoritmo que leia o nome e as três notas de uma disciplina de um


determinado aluno e, ao final escreva o nome deste aluno, sua média e se ele foi
aprovado (média maior ou igual a 6).
9) Faça um algoritmo que, dado Nome e salário de dois funcionários, imprima o
Nome e o salário do funcionário que tem o maior salário.
10) Um hotel cobra R$ 300,00 por diária e mais uma taxa adicional de serviços. Se a
diária for menor que 15 a taxa é de R$ 20,00. Se o número de diárias for igual a 15 a
taxa é de R$ 14,00 e se o número for maior que 15 a taxa é de R$ 12,00. Elabore
um algoritmo que receba o nome e o número de dias que um determinado hóspede
ficou no hotel e, calcule e imprima o nome e o total a pagar desse hóspede.

11) Fazer um programa que verifique se um dado ano é ou não bissexto.


Observação: um ano é bissexto quando é divisível ao mesmo tempo por 4, 100 e
400.

12) O Departamento do Meio Ambiente mantém três listas 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". Isto é 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 três
listas serão avisadas para suspenderem as atividades. Prepare um algoritmo para
ler o índice de poluição e escrever as notificações apropriadas.

13) O IMC, índice de massa corporal, é muito utilizado para analisar se uma pessoa
está acima ou abaixo do peso. A análise é feita da seguinte maneira:

• IMC < 20 - pessoa abaixo do peso ideal;


• 20 ≤ IMC ≤ 25 - pessoa com peso ideal;
• 25 < IMC ≤ 30 - pessoa acima do peso ideal;
• IMC > 30 - pessoa obesa.

Dado: IMC = massa da pessoa em kg


(altura em m)2

a) Faça um algoritmo para ler o peso (massa) e altura de uma pessoa, calcular e
imprimir o seu IMC, junto com uma mensagem indicando a categoria em que ela se
enquadra.

b) Considera-se que o IMC ideal para os homens é 22,0 e para as mulheres é 20,8.
Escreva um algoritmo para ler o peso, a altura de uma pessoa e uma letra indicando
qual é o seu sexo. O programa deve calcular o seu IMC e imprimí-lo junto com uma
mensagem indicando se a pessoa tem o valor ideal desse índice.

Estruturas de Repetição

A estrutura de repetição permite que um comando ou um bloco de comandos seja


executado repetidamente até que uma determinada condição de interrupção seja
satisfeita. Existem basicamente três estruturas de repetição: o comando enquanto,
o comando repita e o comando para.

Para analisarmos as estruturas de repetição citadas acima, vamos considerar o


seguinte exemplo:

Elaborar um algoritmo que leia o primeiro termo (a1) de uma Progressão Aritmética
(P.A), e sua razão (r) e, a seguir, calcule e imprima os 10 primeiros termos dessa
P.A e a soma desses termos. Dado: an = a1 + (n-1) . r (fórmula do termo geral de
uma P.A).

O Comando Enquanto
O comando enquanto é uma estrutura de repetição onde a condição de interrupção
é testada antes que os comandos a serem repetidos sejam executados.

Forma de utilização:

enquanto (condição) faça


Comando1;
Comando2;
.......
ComandoN;
fim enquanto;
Resolução do problema utilizando o comando enquanto:

início
inteiro: a1, r, an, n, soma;
imprima (“Informe o primeiro termo da P.A:”);
leia (a1);
imprima (“Informe a razão da P.A:”);
leia (r);
soma ← 0;
n ← 1;
enquanto (n ≤ 10) faça
an ← (a1) +(n-1) * r;
imprima (an);
soma ← soma + an;
n ← n+1;
fim enquanto;
imprima (“A soma dos 10 primeiros termos dessa P.A é:”, soma);
fim.

O Comando Repita
O comando repita é uma estrutura de repetição onde a condição de interrupção é
testada no fim do bloco de repetição.

Forma de utilização:

repita
Comando1;
Comando2;
.......
ComandoN;
até (condição);

Resolução do problema utilizando o comando repita:

início
inteiro: a1, r, an, n, soma;
imprima (“Informe o primeiro termo da P.A:”);
leia (a1);
imprima (“Informe a razão da P.A:”);
leia (r);
soma ← 0;
n ← 1;
repita
an ← (a1) +(n-1) * r;
imprima (an);
soma ← soma + an;
n ← n+1;
até (n > 10);
imprima (“A soma dos 10 primeiros termos dessa P.A é:”, soma);
fim.
O Comando Para

O comando para permite que um ou mais comandos sejam executados um número


específico de vezes. Neste comando, uma variável de controle é incrementada de
um valor inicial até um valor final.

Forma de utilização:

para v de i até l passo p faça


Comando1;
Comando2;
.........
ComandoN;
fim para;

Onde: v → variável de controle


i → limite inferior
l → limite superior
p → incremento da variável de controle.

OBS: Quando o passo (incremento) for igual a 1, ele pode ser omitido.

Resolução do problema utilizando o comando para:

início
inteiro: a1, r, an, n, soma;
imprima (“Informe o primeiro termo da P.A:”);
leia (a1);
imprima (“Informe a razão da P.A:”);
leia (r);
soma ← 0;
para n de 1 até 10 faça
an ← (a1) +(n-1) * r,
imprima (an);
soma ← soma + an;
fim para;
imprima (“A soma dos 10 primeiros termos dessa P.A é:”, soma);
fim.

Exemplos:

1) Modificar o algoritmo de forma a imprimir os N primeiros termos da P.A e a soma


desses N termos. O valor de N deve ser lido através do teclado:

início
inteiro: a1, r, an, N, i,soma;
imprima (“Informe o primeiro termo da P.A:”);
leia (a1);
imprima (“Informe a razão da P.A:”);
leia (r);
imprima (“Informe o número de termos da P.A que deseja conhecer:”);
leia (N);
soma ← 0;
i ← 1;
enquanto (i ≤ N) faça
an ← (a1) +(i-1) * r;
imprima (an);
soma ← soma + an;
i ← i+1;
fim enquanto;
imprima (“A soma dos”, n, “primeiros termos dessa P.A é:”, soma);
fim.

2) Construir um algoritmo que leia um número e, calcule e imprima o fatorial desse


número.

início
inteiro: n, i, fat;
imprima (“Digite um número:”);
leia (n);
fat ← 1;
para i de 1 até n faça
fat ← fat * i;
fim para;
imprima (“O fatorial de”, n, “é:”, fat);
fim.

3) Faça um algoritmo para ler o peso (massa) e altura de um número indeterminado


de pessoas e, calcular e imprimir o seu IMC, junto com uma mensagem indicando a
categoria em que ela se enquadra. O algoritmo deve parar de ler dados quando for
digitado o valor 0 para o peso. Utilize a tabela abaixo como referência para
interpretar o resultado do cálculo do IMC.

• IMC < 20 - pessoa abaixo do peso ideal;


• 20 ≤ IMC ≤ 25 - pessoa com peso ideal;
• 25 < IMC ≤ 30 - pessoa acima do peso ideal;
• IMC > 30 - pessoa obesa.

Dado: IMC = massa da pessoa em kg


(altura em m)2

inicio
real: peso, alt, IMC;
imprima (“Informe seu peso:”);
leia (peso);
imprima (“Informe sua altura:”);
leia (alt);
enquanto (peso ≠ 0) faça
IMC ← peso / Quadrado (alt);
imprima (“Índice de massa corporal:”, IMC);
se (IMC < 20) então imprima (“Abaixo do peso ideal.”);
senão se (IMC≥ 20 e IMC <25) então imprima (“Peso ideal.”);
senão se (IMC>25 e IMC ≤30)
então imprima (“Acima do Peso.”);
senão imprima (“Obesidade”);
fim se;
fim se;
fim se;
imprima (“Informe seu peso:”);
leia (peso);
imprima (“Informe sua altura:”);
leia (alt);
fim enquanto;
fim.

Lista de Exercícios 03

1) Quais os resultados produzidos pelos algoritmos que se seguem?

a)

inicio
lógico:x;
inteiro: y;
y←0;
enquanto (y≠6) faça
x← não(x);
y←y+1;
se x então imprima (y)
senão imprima (‘-’, y);
fim se;
fim enquanto;
Fim.

b)

início
real: n, quad;
n←10;
repita
quad←Quadrado(n);
imprima(quad);
n←n-1
até (n=1)
fim.

c) Qual a finalidade do algoritmo abaixo ?

inicio
inteiro: A, Q, TERMO;
A←1;
Q←3;
TERMO←A;
enquanto TERMO <2000 faça
imprima (TERMO);
TERMO←TERMO*Q;
Fim enquanto;
Fim.

2) Construa um algoritmo que some todos os números pares < 1000 e ao final
imprima o resultado dessa soma.

3) Elabore um algoritmo que calcule e imprima os múltiplos de 3, compreendidos no


intervalo entre 6 e um dado limite superior.

5) Elabore um algoritmo que leia um número indeterminado de valores


representando cada um a idade de um indivíduo. O último valor, que não deve entrar
nos cálculos, é zero. O algoritmo deve calcular e imprimir a idade média deste grupo
de indivíduos.

6) Faça um algoritmo que leia o nome, o cargo e o salário de um funcionário e


calcule seu novo salário reajustado. Se o cargo for operador, o funcionário deverá
receber um reajuste de 20%, se o cargo for programador, o funcionário deverá
receber um reajuste de 18%. O algoritmo deve escrever o nome e o novo salário do
funcionário, já reajustado.

7) Tem-se um conjunto de dados contendo a altura e o sexo (masculino, feminino)


de 50 pessoas. Fazer um algoritmo que calcule e imprima:

a) A maior e a menor altura do grupo;


b) A média de altura das mulheres;
c) o número de homens.

8) Suponha que para cada aluno de sua sala exista uma ficha contendo o nome e a
idade do aluno. Supondo que exista 50 alunos, faça uma algoritmo que determine
quantos alunos tem idade maior que 25.

9) Elabore um algoritmo que leia o salário atual de cada um dos 30 funcionários de


uma firma e calcule e imprima o novo salário com percentual de reajuste
dependendo do salário atual conforme a seguinte tabela:

Salário atual <500 15%


Salário atual >=500 e <=1000 10%
Salário atual >1000 5%

10) A conversão de graus Farenheit para centígrados é obtida por C= 5/9 (F-32).
Faça um algoritmo que calcule e imprima uma tabela de centígrados em função de
graus Fahrenheit, que variam de 50 a 150 de 1 em 1.

11) Uma certa firma fez uma pesquisa de mercado para saber se as pessoas
gostaram ou não de um novo produto lançado no mercado. Para isso, forneceu o
sexo do entrevistado e sua resposta (sim ou não). Sabendo-se que foram
entrevistadas 2.000 pessoas, elabore um algoritmo que calcule e imprima:

a) O número de pessoas que responderam sim;


b) O número de pessoas que responderam não;
c) A porcentagem de pessoas do sexo feminino que responderam sim;
d) A porcentagem de pessoas do sexo masculino que responderam não.

12) A prefeitura de uma cidade fez uma pesquisa entre seus habitantes, coletando
dados sobre o salário e número de filhos. A prefeitura deseja saber:

a) A média do salário da população;

b) A média do número de filhos;

c) O maior salário;

d) O percentual de pessoas com salário até R$180,00.

O final da leitura de dados deve acontecer quando for digitado um salário negativo.

13) Numa certa loja de eletrodomésticos, o comerciário encarregado da seção de


televisores recebe, mensalmente, um salário fixo mais comissão. Essa comissão é
calculada em relação ao tipo e ao número de televisores vendidos por mês,
obedecendo à tabela abaixo:

TIPO Número de Televisores Vendidos Comissões

a cores maior ou igual a 10 R$ 20,00 por TV vendida


menor do que 10 R$ 10,00 por TV vendida
preto e branco maior ou igual a 20 R$ 10,00 por TV vendida
menor do que 20 R$ 5,00 por TV vendida
Sabe-se ainda que ele tem um desconto de 8% sobre seu salário fixo para o INSS.
Se o seu salário (fixo+comissões - INSS) for maior ou igual a R$ 500,00, ele ainda
terá um desconto de 5%, sobre esse salário total, relativo ao imposto de renda retido
na fonte. Sabendo-se que existem 35 empregados nesta seção, faça um algoritmo
que leia o valor do salário fixo e para cada comerciário, o número de sua inscrição, o
número de televisores a cores e o número de televisores preto e branco vendidos;
calcule e escreva o salário bruto e o salário líquido de cada empregado.

Estruturas de Dados Compostas Homogêneas

Até agora, foi visto que uma variável está associada a uma posição de memória e
qualquer referência a ela significa um acesso ao conteúdo de um pedaço de
memória.

Agora, através das estruturas de dados compostas homogêneas (vetores e


matrizes), será visto como associar um identificador a um conjunto de elementos de
mesmo tipo.
Vetores

Um vetor é um grupo de informações de mesmo tipo.

Considere o seguinte exemplo:

Algoritmo que lê as notas de 10 alunos, calcula a média dessas notas e imprime as


notas acima da média.

Uma solução para o problema acima seria dada pelo algoritmo:

inicio
real: nota1, nota2, nota3, nota4, nota5, nota6, nota7, nota8, nota9, nota10, media;
imprima (“Informe a nota do primeiro aluno:“);
leia (nota1);
imprima (“Informe a nota do segundo aluno:“);
leia (nota2);
imprima (“Informe a nota do terceiro aluno:“);
leia (nota3);
...
imprima (“Informe a nota do décimo aluno:“);
leia (nota10);
media←(nota1+nota2+nota3+nota4+nota5+nota6+nota7+nota8+nota9+nota10)/10;
imprima (“A média das notas é:”, media);
se (nota1>media) então imprima (nota1);
se (nota2>media) então imprima (nota2);
se (nota3>media) então imprima (nota3);
...
se (nota10>media) então imprima (nota10);
Fim.

Note que o algoritmo está cheio de repetições e cálculos idênticos para cada nota.
Se o número de alunos aumentasse de 10 para 100, a situação seria ainda pior.

Para resolver esse tipo de problema, são utilizadas as estruturas de dados


compostas homogêneas.

Estruturas de dados compostas homogêneas correspondem à posições de


memórias, identificadas por um mesmo nome, individualizadas por índices e, cujo
conteúdo é do mesmo tipo.
Assim, o conjunto de 10 notas pode ser associado a apenas um identificador, por
exemplo nota, que passará a identificar não apenas uma única posição de memória,
mas 10.

A referência ao conteúdo do n-ésimo elemento do conjunto será indicada pela


notação nota [i], onde i é um valor inteiro (ou expressão cujo resultado é inteiro).
Exemplo:

Variáveis Simples

9 7 5 8
...
Nota1 nota2 nota3 nota10

Vetor

nota 9 7 5 9 ... ... ... ... ... 8

1 2 3 4 5 6 7 8 9 10 (índices)

Acesso os elementos do vetor

nota[1]=9 nota[3]:=10
nota [2]=7 imprima (nota[2])
...
nota[10]=8 nota[4]:=2

Declaração de Vetores

A declaração de um vetor é feita na área de declarações e obedece à seguinte


forma:

Identificador: vetor [li..ls] de tipo_dos_valores;

Onde: li = limite inferior (primeiro índice)


ls = limite superior (último índice)

Exemplo:

V: vetor [1..100] de inteiro; (vetor de 100 posições, que armazena números inteiros)
Vetreais: vetor[1..10] de real; (vetor de 10 posições, que armazena números reais)
Vetletras: vetor[1..50] de caracter; (vetor de 50 posições, que armazena caracteres)

Visto isso, vamos reescrever o algoritmo anterior utilizando agora o conceito de


vetor:

inicio
nota: vetor[1..10] de real;
real: soma, media;
inteiro: i;
soma←0;
para i de 1 até 10 faça
imprima(“Entre com a nota”,i,”:”);
leia(nota[i]);
soma←soma+nota[i];
fim para;
media←soma/10;
imprima (“A média das notas é:”, media);
para i de 1 até 10 faça
se (nota[i]>media) então imprima (nota[i]);
fim se;
fim para;
Fim.

Exercícios

1) Algoritmo que inicializa um vetor de 5 posições com valores inteiros lidos através
do teclado e, em seguida, imprime esses valores.

inicio
vet: vetor[1..5] de inteiro;
inteiro: i;
para i de 1 até 5 faça
imprima(“Entre com o valor”,i,”:”);
leia(vet[i]);
fim para;
para i de 1 até 5 faça
imprima(vet[i]);
fim para;
Fim.

2) Algoritmo que lê um vetor de 20 caracteres e, imprime esse vetor na ordem


inversa.

Inicio
v: vetor[1..20] de caracter;
inteiro: i;
para i de 1 até 20 faça
imprima (“Entre com um caracter:”);
leia (v[i]);
fim para;
para i de 20 até 1 faça
imprima (v[i]);
fim para;
Fim.

3) Algoritmo que lê um número positivo n e n valores inteiros em um vetor. O


algoritmo deve imprimir os elementos do vetor que são maiores que 10 e, informar
quantos são estes elementos.

inicio
vet: vetor[1..100] de inteiro;
inteiro: n, i, cont;
cont←0;
imprima(“Informe a quantidade de elementos a serem lidos (≤100):”);
leia(n);
para i de 1 até n faça
imprima(“Entre com um valor:”);
leia(vet[i]);
fim para;
para i de 1 até n faça
se (vet[i]>10) então
imprima(vet[i]);
cont←cont+1;
fim se;
fim para;
imprima(cont, “elementos desse vetor são maiores que 10”);
Fim.

4) Um supermercado trabalha com N mercadorias (N≤100), numeradas de 1 a N.


Elaborar um algoritmo que leia a quantidade de cada mercadoria disponível no
estoque e o preço unitário de cada mercadoria. O algoritmo deve calcular e imprimir
o valor total disponível em estoque.

inicio
inteiro: i,n;
real: estoque;
q: vetor[1..100] de inteiro;
p: vetor[1..100] de real;
estoque←0;
imprima(“Informe o número de mercadorias em estoque:”);
leia(n);
para i de 1 até n faça
imprima(“Informe a quantidade disponível da mercadoria”, i,”:”);
leia (q[i]);
imprima(“Informe o preço unitário da mercadoria”, i,”:”);
leia(p[i]);
fim para;
para i de 1 até n faça
estoque←estoque+q[i]*p[i];
fim para;
imprima(“O valor total em estoque é:”, estoque);
Fim.

Lista de Exercícios 04

1) Dado o vetor vet, definido por:

vet: vetor [1..100] de inteiro;

Escrever um algoritmo para:

a) Inicializá-lo com o valor inteiro 30.


b) Inicializá-lo como os números inteiros 1, 2, 3, 4, 5, ... , 100.
2) Construa um algoritmo que leia um vetor de n posições de inteiros e determine
qual o maior e o menor valor existente neste vetor.

3) Elabore um algoritmo que inicialize um vetor de 50 posições de inteiros (os


valores devem ser lidos através do teclado) e, em seguida, calcule e imprima a soma
desses elementos.

4) Construa um algoritmo que leia dois vetores A e B e, gere um terceiro vetor C,


formado pela soma dos dois outros (A e B).

5) Elabore um algoritmo que construa um vetor de 50 elementos, tal que o valor de


cada elemento seja o dobro do índice de sua posição no vetor.

6) Faça um algoritmo que leia os preços de uma mercadoria, obtidos por uma
pesquisa em 30 casas comerciais. O algoritmo deve determinar quantas dessas
casas estão com o preço abaixo da média.

7) As temperaturas no campus da UFOP foram anotadas diariamente durante um


determinado ano. Elabore um algoritmo que leia as 365 temperaturas e determine
qual a temperatura média registrada. O algoritmo deverá também imprimir o valor
das temperaturas abaixo da média. Utilizar vetor na implementação do algoritmo.

Estruturas de Dados Compostas Homogêneas

Matrizes

Como um vetor, uma matriz é uma estrutura que consiste de um agregado de


elementos do mesmo tipo, referenciados por um mesmo nome. Neste caso porém,
esses elementos estão dispostos em um arranjo bidimensional, necessitando de 2
índices para referenciá-los.

Declaração de Matrizes

Identificador : vetor [I1..F1, I2..F2] de tipo_do_elemento;

Onde: I1, F1 representam o número de linhas da matriz;


I2, F2 representam o número de colunas da matriz.

Exemplos

Mat: vetor [1..3, 1..2] de inteiro;

1
Mat 2
3
1 2

M: vetor [1..4, 1..3] de caracter;


1
M 2
3
4
1 2 3

R: vetor [1..2, 1..2] de real; {matriz quadrada}

1
R 2
1 2

Acesso aos elementos de uma Matriz

Considere a seguinte matriz:

1
Mat 2
3
1 2 3

mat[2,1]←3; mat[3,3]←1; imprima(mat[3,3]);


mat[1,2]←10 imprima(mat[2,1]);

Inicialização de Matrizes

Tome como exemplo os seguintes algoritmos:

1) Algoritmo que cria uma matriz 3x2 de inteiros e a inicializa com o valor 5.

Inicio
inteiro: i, j;
m: vetor[1..3,1..2] de inteiro;
para i de 1 até 3 faça {variando as linhas}
para j de 1 até 2 faça {variando as colunas}
m[i, j] ← 5;
fim para;
fim para;
fim.

2) Algoritmo que cria uma matriz 4x3 de reais e a inicializa com valores lidos através
do teclado.

Inicio
inteiro: i, j;
mat: vetor [1..4, 1..3] de real;
para i de 1 até 4 faça
para j de 1 até 3 faça
imprima (“Entre com um valor:”);
leia(mat[i,j]);
fim para;
fim para;
fim.

Exemplos

1) Elabore um algoritmo que leia e imprima uma matriz 4x4 de inteiros.

Inicio
inteiro: i, j;
m: vetor[1..4, 1..4] de inteiro;
para i de 1 até 4 faça
para j de 1 até 4 faça
imprima(“Digite um número:”);
leia(m[i, j]);
fim para;
fim para;
para i de 1 até 4 faça
para j de 1 até 4 faça
imprima (m[i, j]);
fim para;
fim para;
fim.

2) Construa um algoritmo que leia duas matrizes de inteiros, de mesma dimensão, e


gere uma terceira matriz, formada pela soma das outras duas. O algoritmo deverá
imprimir as três matrizes.

Inicio
inteiro: m, n, i, j;
m1,m2,m3: vetor[1..100,1..100] de inteiro;
imprima (“Informe o número de linhas da matriz:”);
leia (m);
imprima (“Informe o número de colunas da matriz:”);
leia (n);
para i de 1 até m faça
para j de 1 até n faça
imprima (“Digite um número:”);
leia(m1[i, j]);
fim para;
fim para;
para i de 1 ate m faça
para j de 1 até n faça
imprima(“Digite um número:”);
leia(m2[i, j]);
fim para;
fim para;
para i de 1 até m faça
para j de 1 até n faça
m3[i, j]←m1[i,j]+m2[i,j];
fim para;
fim para;
para i de 1 até m faça
para j de 1 até n faça
imprima(m1[i, j]);
fim para;
fim para;
para i de 1 até m faça
para j de 1 até n faça
imprima(m2[i, j]);
fim para;
fim para;
para i de 1 até m faça
para j de 1 até n faça
imprima(m3[i, j]);
fim para;
fim para;
Fim.

3) Elabore um algoritmo que construa uma matriz 20x20 de inteiros, tal que cada
elemento da matriz seja igual à soma de seus índices.

inicio
inteiro: i, j;
m: vetor[1..20, 1..20] de inteiro;
para i de 1 até 20 faça
para j de 1 até 20 faça
m[i, j] ← i + j;
fim para;
fim para;
para i de até 20 faça
para j de 1 até 20 faça
imprima(m[i, j]);
fim para;
fim para;
Fim.

Lista de Exercícios 05

1) Dado uma matriz de ordem 3x3 de inteiros, faça um algoritmo que:

a) Calcule a soma dos elementos da primeira coluna;


b) Calcule o produto dos elementos da primeira linha;
c) Calcule a soma de todos os elementos da matriz;

2) Construa um algoritmo que calcule e imprima o produto de todos os elementos


diferentes de zero que compõem a diagonal principal de uma matriz quadrada
(MxM).
3) Construa um algoritmo que leia uma matriz 10x20 de números inteiros, substitua
seus elementos negativos por zero e imprima a matriz original e a modificada.

4) Elabore um algoritmo que leia um número N (N<=30) e uma matriz NxN. Em


seguida, o algoritmo deve calcular e imprimir a soma dos elementos abaixo da
diagonal principal desta matriz.

Variáveis Compostas Heterogêneas – Registros

Vetores e matrizes são estruturas de dados homogêneas, pois, como já vimos, todos
os seus elementos são do mesmo tipo. Já no registro, cada componente pode ser de
um tipo diferente.

Um registro possui as seguintes características:

- Contém um número finito de componentes, chamados campos;


- Os campos devem ser de tipos diferentes;
- Cada campo tem um nome.

Declaração de um registro

A declaração de um registro é feita na área de declarações e segue a seguinte


regra:

Tipo Identificador = registro


Tipo1: Campo1;
Tipo2: Campo2;
....
TipoN: CampoN;
fim registro;

Exemplos:
Tipo dados = registro
caracter: nome, sexo;
real: salario;
inteiro: idade;
fim registro;

Com a declaração acima, criamos um novo tipo de dados, que armazena valores de
diferentes tipos. Agora, podemos criar uma variável que armazena valores do novo
tipo criado, como mostrado abaixo:

dados: funcionarios;

Quando declaramos a variável funcionarios, como sendo do tipo dados, estamos


criando a estrutura de dados mostrada abaixo:

nome sexo
funcionarios salario
idade
Tipo informacoes = registro
caracter: nome, rua, cidade, estado;
inteiro: numero, cep;
real: salário;
fim registro;

informacoes: cliente

A estrutura criada com a declaração acima é mostrada a seguir:

nome
rua numero cep
cliente
cidade estado
salario

Acesso aos campos de um registro

Para referenciar cada campo, usa-se o nome do registro, seguido de ponto (.),
seguido do nome do campo que se deseja acessar.

Exemplo:

Tomemos como exemplo, a variável funcionarios, declarada anteriormente:

imprima (“Informe o nome do funcionário: “);


leia (funcionarios.nome);
imprima (“Informe o sexo (M/F):”);
leia (funcionarios.sexo);
imprima (“Informe o salário do funcionário”);
leia (funcionarios.salario);
imprima (“Informe a idade do funcionário:”);
leia (funcionarios.idade);

Exercício: Declarar a seguinte estrutura de dados e atribuir valores para cada um


dos seus campos:

Cliente

Nome
Rua Numero CPF
Saldo

Definindo Vetores de Registros

Suponha que queiramos cadastrar os dados de vários funcionários de uma empresa,


utilizando para isto a estrutura de dados funcionarios, criada anteriormente. No
exemplo anterior, cadastramos os dados de apenas um funcionário. Para
ampliarmos este cadastro para todos os funcionários da empresa, basta definirmos
um vetor de registros como é mostrado a seguir:

Tipo dados = registro


caracter: nome, sexo;
real: salario;
inteiro: idade;
fim registro;

Supondo que existam 100 funcionários nesta empresa, temos:

funcionarios: vetor [1..100] de dados;

Com esta declaração, é criada a seguinte estrutura de dados:

Funcionários
nome sexo salario idade nome sexo salario idade
1 2 ..100

Inicializando esse vetor


para i de 1 até 100 faça
imprima (“Informe o nome do funcionário”, i, “:”);
leia(funcionarios[i].nome);
imprima(“Informe o sexo (M/F) do funcionário“, i, “:“);
leia(funcionarios[i].sexo);
imprima(“Informe o salário do funcionário”, i, “:”);
leia(funcionarios[i].salario);
imprima(“Informe a idade do funcionário”, i, “:”);
leia(funcionarios[i].idade);
fim para;
Exercício: Utilizando a estrutura de dados acima, construa um algoritmo que leia os
dados de 30 funcionários e, imprime o nome e o salário daqueles que apresentam o
salário maior que R$1000,00.

inicio
Tipo dados = registro
caracter: nome, sexo;
real: salario;
inteiro: idade;
fim registro;
funcionarios: vetor [1..30] de dados;
inteiro: i;
para i de 1 até 30 faça
imprima (“Informe o nome do funcionário”, i, “:”);
leia(funcionarios[i].nome);
imprima(“Informe o sexo (M/F) do funcionário“, i, “:“);
leia(funcionarios[i].sexo);
imprima(“Informe o salário do funcionário”, i, “:”);
leia(funcionarios[i].salario);
imprima(“Informe a idade do funcionário”, i, “:”);
leia(funcionarios[i].idade);
fim para;
para i de 1 até 30 faça
se(funcionarios[i].salario>1000) então
imprima(“O funcionário”, funcionarios[i].nome, “recebe”, funcionarios[i].salario,
“reais”);
fim se;
fim para;
Fim.

Lista de Exercícios 06

1) Elabore um algoritmo que leia o nome, a matrícula e a nota de 90 alunos de uma


turma. O algoritmo deverá calcular e imprimir a média geral da turma e o nome e
nota daqueles que apresentarem nota menor que a média.

2) Elabore um algoritmo que cadastre os dados (nome, sexo, estado civil, cargo e
salário) dos funcionários de uma empresa (no máximo 250). O algoritmo deverá
calcular e imprimir:

- Quantos funcionários são do sexo masculino;


- Quantos são do sexo feminino;
- Quantos são casados.

3) Uma loja de móveis mantém um cadastro de suas mercadorias. Para cada


mercadoria, tem-se: nome do móvel, preço de compra e preço de venda. Elabore um
algoritmo que calcule e imprima o lucro obtido por essa loja se forem vendidas todas
as suas mercadorias.

4) Uma empresa de pesquisa distribuiu um questionário solicitando as seguintes


informações dos entrevistados: Sexo, nível de escolaridade (1- Analfabeto, 2-
Primário, 3- Ensino Médio, 4- Nível superior), salario. Elabore um algoritmo que
armazene esses dados e, calcule e imprima:

- Quantas pessoas do sexo feminino têm nível superior;


- Quantas pessoas analfabetas ganham menos de R$200,00;
- Quantas mulheres e quantos homens ganham acima de R$1500,00.

5) (Valor: 3 pontos) Uma empresa tem, para cada funcionário, uma ficha contendo o
nome, número de horas trabalhadas e o número de dependentes deste funcionário.
Considerando que:

a) A empresa paga 12 reais por hora e 40 reais por dependente.


b) Sobre o salário são feito descontos de 8,5% para o INSS e 5% para IR.

Faça um algoritmo para ler o Nome, número de horas trabalhadas e número de


dependentes de todos os funcionários desta empresa. Em seguida, o algoritmo deve
calcular o salário líquido (sem os descontos) de cada funcionário e, imprimir o nome
do funcionário, juntamente com o seu salário.
6) (Valor: 3 pontos) O Departamento de trânsito do estado anotou dados de vários
acidentes ocorridos no último ano. Para cada motorista envolvido no acidente, tem-
se as seguintes informações:

- Idade;
- Sexo (M - Masculino, F - Feminino)
- Procedência ( 0 - Capital, 1 - Interior, 2 - Outro estado);

Com base nesses dados, elabore um algoritmo que leia os dados de todos os
acidentes ocorridos neste ano e calcule e imprima:
a) A porcentagem de motoristas com menos de 21 anos;
b) O número de mulheres que são da capital;
c) O número de motoristas do interior que têm idade maior que 60 anos;

7) (Valor: 3 pontos) Uma determinada empresa mantém um cadastro contendo os


seguintes dado de seus funcionários: nome, idade, cargo e o seu salário bruto.
Considere que:

- O salário bruto teve um reajuste de 38%.


- O funcionário receberá uma gratificação de 20% do salário bruto.
- O Salário total é descontado em 15%.

Elabore um algoritmo que leia os dados acima para todos os funcionários desta
empresa e, calcule e imprima o nome, o cargo e o novo salário de cada um desses
funcionários.

Programação Modular

Uma das técnicas mais utilizadas na confecção de algoritmos muito grandes é a


modularização que consiste em dividir o algoritmo em diversos módulos ou sub-
algoritmos, de certa forma independentes uns dos outros. Existe um módulo que é o
principal, a partir do qual são chamados os outros módulos. Esse módulo recebe o
nome de algoritmo principal, enquanto que os outros são chamados de rotinas.

Rotinas: é um conjunto de comandos que está associado a um identificador e pode


ser executado sempre que invocado.

Dados de Entrada Resultado do Processamento


Rotina
(Processamento)

Os principais motivos para se usar rotinas são:

- Evitar codificação – trocar certos trechos do algoritmo que se repetem por


chamadas de apenas uma rotina que será codificada apenas uma vez.
- Modularizar o algoritmo, dividindo-o em módulos (rotinas), cada uma com
uma função bem definida. Isto facilita a organização do algoritmo, bem como
o entendimento do mesmo.
- Facilitar a busca e correção de possíveis erros.
Existem basicamente dois tipos de sub-rotinas: os Procedimentos e as Funções.

Procedimentos

Um procedimento é sempre declarado no início do algoritmo, na área de


declarações, na forma como é mostrado a seguir:

Procedimento Identificador (Tipo_dos_Valores:Lista_dos_Valores);


início
Declarações;
Comandos;
fim;

Os valores que são passados para um algoritmo, são chamados de parâmetros.

Para que um procedimento seja executado, ele deve ser “chamado” no algoritmo
principal. Veremos como se fazer essa chamada nos exemplos seguintes:

Exemplos

1) Algoritmo que calcula e imprime a soma entre dois valores, utilizando para isto um
procedimento.

Inicio
real: a, b, c, d;
Procedimento Soma (real:x,y);
inicio
real: som;
som← x+y ;
imprima(x, “+”, y, “=”, som);
fim;
imprima(“Digite quatro números:”);
leia(a,b,c,d);
Soma(a,b);
Soma(c,d);
Soma(a,c);
Soma(a,d);
Fim.

2) Elabore um algoritmo que leia o salário atual de 30 funcionários de uma firma e


calcule e imprima o novo salário com percentual de reajuste dependendo do salário
atual conforme a seguinte tabela abaixo. O calculo do novo salário deve ser feito
utilizando-se um procedimento.
Salário atual <500 15%
Salário atual >=500 e <=1000 10%
Salário atual >1000 5%
Inicio
real: sal_atual;
inteiro:i;
Procedimento Reajuste(real:salario);
Inicio
real:novo;
se (salario<500)
então novo←salario+salario*0,15;
senão se salario≥500 e salario ≤ 1000)
então novo ← salario + salario* 0,10;
senão novo ← salario + salario*0,05;
fim se;
fim se;
imprima (“O novo salário deste funcionário é:”, novo);
fim;
para i de 1 até 30 faça
imprima (“Informe o salário atual do funcionário”, i, “:”);
leia (sal_atual);
Reajuste (sal_atual);
fim para;
Fim.

Funções

As funções, embora muito parecidas com os procedimentos, têm a característica


especial de retornar um valor associado ao seu nome.

Declaração de Funções

A declaração de uma função também é feita na área de declarações, de acordo com


a seguinte sintaxe:

Função Identificador (Tipo_do_valores:Lista_de_Valores): Tipo_do_Resultado;


inicio
Declarações;
Comandos;
fim;

Exemplos

1) Algoritmo que calcula o cubo de um número. O cálculo do cubo será feito


utilizando-se uma função.

inicio
real: a;
Função Cubo (real: x): real;
Cubo ← x * x * x;
fim;
imprima(“Digite um valor:”);
leia(a);
imprima(“O cubo de”, a, “é:”, Cubo(a));
Fim.
2) Algoritmo que calcula o maior de dois números dados. O cálculo do maior número
será feito utilizando-se uma função.

inicio
real: a,b;
Função Maior(real:x,y): real;
Inicio
se (x>y) então Maior←x;
senão Maior←y
fim se;
fim;
imprima(“Entre com dois valores:”);
leia(a,b);
imprima(“O maior valor entre”, a, “e”, b “é:”, Maior(a,b));
Fim.

3) Algoritmo que lê vários números inteiros positivos e calcula e imprime o fatorial de


cada um deles. O algoritmo deve parar de ler números quando for digitado um valor
negativo. O fatorial do número deve ser calculado utilizando-se uma função.

inicio
inteiro: x;
Função Fatorial(inteiro: n): inteiro;
inicio
inteiro: fat, i;
fat←1;
para i de 1 até n faça
fat←fat * n;
fim para;
Fatorial←fat;
fim;
imprima(“Digite um número:”);
leia(x);
enquanto(x>0) faça
imprima(“O fatorial de”, x, “é:”, Fatorial(x));
imprima (“Entre com um valor:”);
leia(x);
fim enquanto;
Fim.

Lista de Exercícios 07

1) Elabore um algoritmo que imprima o resultado de uma partida de futebol (vitória,


empate ou derrota). O usuário deverá fornecer o nome das equipes e o número de
gols de cada uma e o algoritmo deverá fornecer o resultado da partida. Utilizar um
procedimento para realizar a impressão do resultado.

2) Construa um algoritmo que calcule e imprima o número de combinações de n


elementos tomados p a p, de acordo com a seguinte fórmula:
n!
C n, p = ( p!)(n − p)!

O algoritmo deverá conter uma função que calcule o fatorial.

3) Elabore um algoritmo que simule uma calculadora com as funções de soma,


diferença, produto e quociente entre dois números. A calculadora funcionará da
seguinte forma:
- Ao se teclar “S”, a calculadora acionará a função soma;
- Ao se teclar “D”, a calculadora acionará a função diferença;
- Ao se teclar “P”, a calculadora acionará a função produto;
- Ao se teclar “Q”, a calculadora acionará a função quociente;

4) Elabore um algoritmo que leia o primeiro termo (a1) de uma Progressão Aritmética
(P.A), e sua razão (r) e, a seguir, calcule e imprima os n primeiros termos dessa P.A.
Dado: an = a1 + (n-1) x r (fórmula do termo geral de uma P.A).

Obs: Deve-se utilizar uma Função para o cálculo dos termos desta P.A.

5) Elabore um algoritmo que, tendo como dados de entrada a altura e o sexo de um


grupo de pessoas, calcule e imprima o peso ideal de cada uma delas, utilizando as
seguintes fórmulas:

- para homens: (72.7 * altura) – 58;


- para mulheres (62.1 * altura) – 44.7.

O algoritmo deve parar de ler dados quando no lugar do sexo for digitada a palavra
fim. Utilizar uma função para realizar o cálculo do peso ideal.

6) Uma empresa tem, para cada funcionário, uma ficha contendo o nome, número
de horas trabalhadas e o número de dependentes deste funcionário. Considerando
que:

a) A empresa paga 12 reais por hora e 40 reais por dependente.


b) Sobre o salário são feito descontos de 8,5% para o INSS e 5% para IR.

Faça um algoritmo para leia o Nome, número de horas trabalhadas e número de


dependentes dos 100 funcionários desta empresa e, calcular e imprimir o nome do
funcionário, juntamente com o seu salário líquido (com os descontos).

Obs: O cálculo do salário líquido e a impressão dos resultados devem ser feitos
utilizando-se um procedimento.

7) Elabore um algoritmo que dadas as coordenadas (x,y) de dois pontos P1,P2,


calcule e imprima a distância entre esses dois pontos, dada pela fórmula:
dist = ( x 2 − x1)2 + ( y 2 − y1)2 . O algoritmo deve utilizar uma função para realizar o
cálculo da distância.
8) Construa um algoritmo que leia três valores, que representam os coeficientes de
uma equação do segundo grau (ax2+bx+c = 0). O algoritmo deve verificar se a
equação formada pelos coeficientes lido apresenta raízes reais e, se possuir, o
algoritmo deve calcular e imprimir essas raízes. O cálculo das raízes deve ser feito
utilizando-se um procedimento.

Dados:

Δ= b2 – 4ac
Se Δ ≥ 0, a equação possui duas raízes reais, calculadas através da fórmula:

−b± Δ
x=
2a

Se Δ <0, a equação não possui raízes reais.

Você também pode gostar