Prévia do material em texto
das
A
Gabarito
utoatividades
ALGORITMOS E PROGRAMAÇÃO
Prof. Cléverson Tambosi
3UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
GABARITO DAS AUTOATIVIDADES DE
ALGORITMOS E PROGRAMAÇÃO
UNIDADE 1
TÓPICO 1
1 Qual é a origem da palavra “algoritmo”?
R.: Essa palavra tem origem no apelido de um matemático árabe do século IX,
Al-Khwarizmi, cujos conhecimentos abriram uma nova era da matemática. Seu
nome, na forma latina, é algoritmi, dando origem à palavra que conhecemos
hoje.
2 O que é um algoritmo?
R.: É uma sequência de passos ou instruções, que têm por objetivo resolver
um determinado problema.
3 Qual é a diferença básica entre “dado” e “informação”?
R.: O dado é basicamente um valor, porém sem significado. Por exemplo: o
valor “6,5” ou a palavra “nome”.
A informação possui um significado. Por exemplo, “Nome da rua” ou “6,5 kg”.
4 O que é lógica de programação?
R.: A lógica é o estudo do pensamento válido, a ciência das leis ideais do
pensamento e a arte de aplicá-las à pesquisa e à demonstração da verdade.
A lógica de programação é um encadeamento de instruções para resolver
um problema através do computador.
5 O que é uma pseudolinguagem?
R.: É uma linguagem utilizada especificamente para construção de algoritmos.
6 Faça um algoritmo para escovar os dentes.
R.: a) pegar a pasta de dentes;
4 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
b) abrir o tubo da pasta de dentes;
c) pegar a escova de dentes;
d) posicionar a ponta do tubo da pasta de dentes sobre as cerdas da escova
de dentes;
e) apertar o tubo para sair cerca de 1 cm de pasta sobre as cerdas;
f) levar a parte das cerdas à boca e fazer movimentos de fricção entre as
cerdas e os dentes;
g) iniciar pelos dentes de trás superiores na parte externa entre os dentes e
a bochecha e seguir lentamente em direção à parte da frente e, em seguida,
até a parte de trás do lado oposto;
h) passar as cerdas para a parte interna dos dentes superiores da parte de
trás, entre os dentes e a língua e seguir lentamente até a parte da frente e,
em seguida, até a parte de trás do lado oposto;
i) repetir todo o processo a partir do item g), porém, com os dentes da parte
inferior.
7 Faça um algoritmo para escrever e enviar um e-mail.
R.: a) abrir o programa de e-mail de sua preferência;
b) clicar no botão Nova Mensagem;
c) no campo “Para:”, informar o endereço de e-mail do destinatário;
d) se desejar enviar o e-mail, colocar uma vírgula após o último endereço de
e-mail informado no campo “Para:” e informar o próximo endereço de e-mail;
e) se desejar enviar uma cópia do e-mail para outro endereço, informar o
endereço de e-mail que deverá receber a cópia, no campo “Cc:”;
f) se desejar enviar uma cópia oculta do e-mail, informar o endereço de e-mail
que deverá receber a cópia oculta, no campo “Cco:”;
g) no campo “Assunto”, informar uma breve descrição do que se trata a
mensagem;
h) no campo “Mensagem”, informar o conteúdo sobre o qual deseja comunicar;
i) ao terminar de informar o conteúdo da mensagem, pressionar o botão
“Enviar”.
TÓPICO 2
1 Quais são as partes (etapas) básicas de, praticamente, qualquer
problema?
R.: Entrada → Processamento → Saída.
2 Na área da informática, como se costuma chamar as pessoas que
utilizam um programa?
5UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
R.: Usuários.
3 Quais são as regras básicas para compor o nome de um identificador?
R.: - deve iniciar com uma letra ou com um “caractere de sublinhado”;
- depois disto, pode ser seguido por letras, números ou “caracteres de
sublinhado”.
4 O que são "variáveis"?
R.: Uma variável é um “local” na memória do computador, utilizado para
armazenar uma informação. O conteúdo deste “local” pode mudar durante a
execução de um algoritmo, por isto o nome “variável”.
5 O que são "constantes"?
R.: São “locais” na memória do computador que servem para armazenar
valores. Estes valores não podem ser alterados durante a execução de um
algoritmo. Daí o nome “constante”.
6 Considerando que o nome de cada uma das variáveis a seguir
represente o conteúdo que ela armazenará, defina o tipo de dado
ideal para cada variável:
R.:
Idade Inteiro
Nome_do_carro Caractere
Placa_do_carro Caractere
Salario Real
Quantidade_de_parafusos Inteiro
7 Cite 3 "tipos de dados" e dê 2 exemplos, para cada tipo de dado
citado, de valores que se podem armazenar em cada tipo.
R.: Tipo: Inteiro
Tipo Valores
Inteiro
2
300
53
6 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
Real
31,8
1000
37,49
Caractere
“João da Silva”
“12.458.950/0001-20”
“MPU-2391”
8 Um “operador de atribuição” serve para atribuir o quê?
R.: Um valor a uma variável.
9 O que significa “declarar um identificador”?
R.: Significa informar, no início do algoritmo, que esse identificador existe e
qual é o tipo de dado que ele poderá suportar.
10 Para que serve o ponto e vírgula em um algoritmo escrito em portugol?
R.: Serve para finalizar uma instrução, informando ao algoritmo que a instrução
acabou naquele local.
TÓPICO 3
1 Explique o operador aritmético “mod”.
R.: Este operador faz a divisão entre dois valores numéricos e retorna o resto
da divisão.
2 O que faz (verifica) a seguinte expressão: X <> 10?
R.: Verifica se o conteúdo da variável “X” é diferente de 10.
3 Considerando as seguintes atribuições:
a ← 10;
b ← 12;
c ← 25;
d ← 51;
informe se o valor de cada expressão abaixo é verdadeiro ou falso:
(somente operadores relacionais)
7UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
a >= 10 verdadeiro
a >= b falso
b >= a verdadeiro
c <> a verdadeiro
a < d verdadeiro
(operadores relacionais e aritméticos)
a = (b – 2) verdadeiro
d < (b + c) falso
(a + b) >= (d – c) falso
d mod 2 = 0 falso
b + a < c verdadeiro
c <> 5 * 5 falso
a = 20 / 2 verdadeiro
(operadores relacionais e lógicos)
(a = 10) e (d = 51) verdadeiro
(a <> 10) e (d = 51) falso
(a <> 10) ou (d = 51) verdadeiro
(d > a) ou (b > c) verdadeiro
não a = 10 falso
(operadores relacionais, lógicos e aritméticos)
(a + b > c) e (d – c > a) falso
(a + b > c) ou (d – c > a) verdadeiro
(não b + c > 30) e (d > 50) falso
(a / 2 = 5) e (d = 50 + 1) verdadeiro
(a * 2 = 22) ou (d + 50 = 101) verdadeiro
TÓPICO 4
1 Para que serve o comando Escreva?
R.: Para exibir informações para o usuário. Estas informações podem ser:
uma mensagem, o conteúdo de uma variável ou constante, ou até o resultado
de um cálculo.
2 Para que serve o comando Leia?
R.: Para captar dados fornecidos pelo usuário através do teclado do
computador.
3 Para que servem os comentários? Dê um exemplo do seu uso.
8 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
R.: Para explicar algo que esteja sendo feito no algoritmo, como, por exemplo,
um determinado cálculo ou qualquer informação que o desenvolvedor do
algoritmo achar necessária.
4 Faça um algoritmo que solicite e armazene o peso de uma pessoa
(você determinará a variável na qual será armazenado o valor do
peso). Em seguida, o algoritmo deverá exibir a mensagem “Seu peso
é <peso>”, onde, no lugar de <peso>, deverá ser exibido o peso que
a pessoa informou.
Acima de cada uma destas instruções, faça um comentário (no
formato portugol)explicando o que cada instrução faz.
R.:
Algoritmo Unidade1_Topico4_Exe4 ;
var
peso : real;
Início
Escreva('Informe seu peso: ');
Leia(peso);
Escreva('Seu peso é ', peso);
Fim.
5 Desenvolva um algoritmo que solicite e armazene as seguintes
informações de uma pessoa:
a) Nome
b) Sobrenome
c) Idade
d) Endereço
Após ler as informações, o algoritmo deverá exibir uma mensagem semelhante
a esta: “Olá, Humberto Pereira. Você tem 23 anos e mora na Rua Antônio
Pchara”.
Os dados em negrito serão as informações que o usuário forneceu.
R.:
9UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
Algoritmo Unidade1_Topico4_Exe5;
var
Nome, Sobrenome, Endereco : Caractere;
Idade : Inteiro;
Início
Escreva('Informe seu nome: ');
Leia(Nome);
Escreva('Informe seu sobrenome: ');
Leia(Sobrenome);
Escreva('Informe sua idade: ');
Leia(Idade);
Escreva('Informe seu endereço: ');
Leia(Endereco);
Escreva('Olá, ',Nome, ' ', Sobrenome, '.
Você tem ',Idade,' anos e mora na ',Endereco,'.');
Fim.
TÓPICO 5
1 Faça um trecho de algoritmo que solicite e armazene:
a) um valor correspondente ao salário de uma pessoa;
b) um valor correspondente aos benefícios de saúde que a pessoa recebe;
c) um valor correspondente ao vale-transporte.
Você precisa exibir qual é o valor total que a pessoa recebeu, entre salário
e benefícios.
R.:
10 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
Algoritmo Unidade1_Topico5_Exe1;
var
Salario, Beneficios, Vale : Real;
Início
Escreva('Salário: ');
Leia(Salario);
Escreva('Valor dos benefícios: ');
Leia(Beneficios);
Escreva('Valor do vale-transporte: ');
Leia(Vale);
Escreva('Valor total recebido: ',
(Salario + Beneficios + Vale));
Fim.
2 Desenvolva um algoritmo que leia um valor correspondente a uma
temperatura em Fahrenheit, converta para graus centígrados e exiba
a temperatura convertida. Para converter, basta utilizar a fórmula C
= (F – 32) / 1,8, onde “f” é a temperatura lida.
R.:
Algoritmo Unidade1_Topico5_Exe2;
var
F, C : Real;
início
Escreva('Temperatura em Fahrenheit: ');
Leia(F);
C <- (F - 32) / 1.8;
Escreva(F, ' graus Fahrenheit equivalem a ', C,
' graus Centígrados.');
Fim.
11UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
3 Construa um algoritmo que solicite e armazene o preço de venda
de uma mercadoria e o valor pago pelo cliente. O algoritmo deverá
calcular e exibir o troco a ser entregue ao cliente.
Algoritmo Unidade1_Topico5_Exe3 ;
var
Preco_Venda, Valor_Pago, Troco : Real;
início
Escreva('Preço da mercadoria: ');
Leia(Preco_Venda);
Escreva('Valor pago: ');
Leia(Valor_Pago);
Troco <- Valor_Pago - Preco_Venda;
Escreva('Troco: ', Troco);
Fim.
4 Desenvolva um algoritmo que solicite e armazene o preço de custo
de uma mercadoria, calcule e mostre o preço de venda. Este preço é
obtido acrescentando 28% ao preço de custo.
Algoritmo Unidade1_Topico5_Exe4;
var
Preco_Custo, Preco_Venda : Real;
início
Escreva('Preço de custo da mercadoria: ');
Leia(Preco_Custo);
Preco_Venda <- Preco_Custo + (Preco_Custo * 28 / 100);
Escreva('Preço de venda: ', Preco_Venda);
Fim.
12 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
5 Faça um algoritmo que solicite e armazene o salário de uma pessoa
e um valor percentual. O algoritmo deve aplicar o percentual sobre
o salário e exibir o salário atualizado.
Algoritmo Unidade1_Topico5_Exe5 ;
var
Salario, Percentual, SalarioAtualizado : Real;
início
escreva('Salário: ');
Leia(Salario);
escreva('Percentual de acréscimo: ');
Leia(Percentual);
SalarioAtualizado <- Salario +
(Salario * Percentual / 100);
escreva('Salário atualizado: ', SalarioAtualizado);
Fim.
6 Crie um algoritmo que solicite e armazene:
a) uma distância percorrida (em km);
b) o tempo que durou para percorrer esta distância.
O algoritmo deverá informar qual foi a velocidade média utilizada ao percorrer
o período.
13UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
Algoritmo Unidade1_Topico5_Exe6 ;
var
Distancia, Tempo, Velocidade : Real;
início
escreva('Distância percorrida: ');
Leia(Distancia);
escreva('Tempo que durou: ');
Leia(Tempo);
Velocidade <- Distancia / Tempo;
Escreva('A velocidade média foi: ', Velocidade);
Fim.
7 A fórmula para calcular a área de uma circunferência é A = πR2. Sendo
o valor de π = 3.14159, faça um algoritmo que:
a) solicite e armazene o valor do raio de uma circunferência, no caso a
variável R;
b) efetue o cálculo da área, elevando o valor de R ao quadrado e multiplicando
por π;
c) apresente o valor da variável A.
* O valor de π deve estar armazenado em uma constante.
R.:
14 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
Algoritmo Unidade1_Topico5_Exe7 ;
Const pi = 3.14159;
var
A, R : Real;
início
escreva('Raio: ');
Leia(R);
{ pi * R ao quadrado)}
A <- pi * (R * R);
Escreva('A área da circunferência é: ', A);
Fim.
8 Faça um algoritmo que leia um valor correspondente a uma
quantidade de horas (por exemplo: 1,5 corresponde a uma hora e
meia). O algoritmo deverá exibir o equivalente em minutos.
R.:
Algoritmo Unidade1_Topico5_Exe8;
var
horas : Real;
início
escreva('Horas: ');
Leia(horas);
escreva(horas, ' horas equivalem a ', (horas * 60),
' minutos.');
Fim.
15UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
UNIDADE 2
TÓPICO 1
1 Reescreva o mesmo algoritmo de conversão de temperaturas,
adaptando-o da seguinte forma: além de ler a temperatura, o algoritmo
deverá ler se o usuário quer converter de Fahrenheit para Centígrados
ou de Centígrados para Fahrenheit. A fórmula para converter graus
Centígrados em Fahrenheit é F = (C * 1,8) + 32.
R.:
Algoritmo Unidade2_Topico1_Exe1;
var
Temp_Original, Temp_Convertida : Real;
Tipo_de_Conversao : texto;
início
Escreva('Temperatura: ');
Leia(Temp_Original);
Escreva('1 - Converter de Fahrenheit para Centígrados');
Escreva('2 - Converter de Centígrados para Fahrenheit');
Leia(Tipo_de_Conversao);
Se (Tipo_de_Conversao = '1') então
início
Temp_Convertida <- (Temp_Original - 32) / 1.8;
Fim
senão
início
Temp_Convertida <- (Temp_Original * 1.8) + 32;
Fim;
Escreva('Temperatura convertida: ', Temp_Convertida);
Leia;
Fim.
16 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
2 Escreva um algoritmo que solicite e armazene três valores. O
algoritmo deverá calcular e exibir o maior dos três valores.
R.:
Algoritmo Unidade2_Topico1_Exe2;
var
v1, v2, v3, Maior : Real;
início
escreva('Valor 1: ');
Leia(v1);
escreva('Valor 2: ');
Leia(v2);
escreva('Valor 3: ');
Leia(v3);
Se (v1 >= v2) então
início
Maior <- v1;
Fim
senão
início
Maior <- v2;
Fim;
Se (v3 > Maior) então
início
Maior <- v3;
Fim;
escreva('O maior valor é: ', Maior);
Fim.
3 Faça um algoritmo que leia umnúmero e informe se ele é menor que
zero, se ele é maior que zero ou se ele é o próprio valor zero.
R.:
17UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
Algoritmo Unidade2_Topico1_Exe3;
var
valor : real;
início
escreva('Informe um valor: ');
Leia(valor);
Se (valor > 0) então
início
escreva('O valor é maior que zero.');
Fim
senão Se (valor < 0) então
início
escreva('O valor é menor que zero.');
Fim
senão
início
escreva('O valor é zero.');
Fim;
Fim.
4 Desenvolva um algoritmo que leia um número inteiro e informe se o
número é par ou é ímpar.
R.:
18 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
Algoritmo Unidade2_Topico1_Exe4;
var
numero : inteiro;
início
escreva('Informe um número: ');
Leia(numero);
Se (numero mod 2 = 0) então
início
escreva('O número é par.');
Fim
senão
início
escreva('O número é ímpar.');
Fim;
Fim.
5 Faça um algoritmo que leia um número inteiro de zero a nove e exiba
o valor por extenso.
R.:
19UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
Algoritmo Unidade2_Topico1_Exe5 ;
var
numero : inteiro;
início
escreva('Informe um número: ');
Leia(numero);
Escolha numero
Caso 0 : Escreva('Zero');
Caso 1 : Escreva('Um');
Caso 2 : Escreva('Dois');
Caso 3 : Escreva('Três');
Caso 4 : Escreva('Quatro');
Caso 5 : Escreva('Cinco');
Caso 6 : Escreva('Seis');
Caso 7 : Escreva('Sete');
Caso 8 : Escreva('Oito');
Caso 9 : Escreva('Nove');
Fim;
Fim.
6 Desenvolva um algoritmo que solicite e armazene dois valores
numéricos reais. Em seguida, o algoritmo deverá exibir as seguintes
opções:
+ Adição
- Subtração
* Multiplicação
/ Divisão
O algoritmo, após exibir as opções acima, deverá ler a escolha do usuário
e efetuar o cálculo entre os dois valores lidos, de acordo com a escolha do
usuário. Ao final, o algoritmo deverá exibir o resultado do cálculo.
R.:
20 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
Algoritmo Unidade2_Topico1_Exe6;
var
v1, v2 : Real;
operacao : texto;
início
escreva('Valor 1: ');
Leia(v1);
escreva('Valor 2: ');
Leia(v2);
Escreva('Escolha a operação: ');
Escreva('+ Adição');
Escreva('- Subtração');
Escreva('* Multiplicação');
Escreva('/ Divisão');
Leia(operacao);
escreva('Resultado da operação: ');
Se (operacao = '+') então
início
Escreva(v1 + v2);
Fim
senão Se (operacao = '-') então
início
Escreva(v1 - v2);
Fim
senão Se (operacao = '*') então
início
Escreva(v1 * v2);
Fim
senão Se (operacao = '/') então
início
{
Matematicamente, não é possível fazer uma divisão por 0 (zero).
Assim, antes de fazer o cálculo, deve-se verificar se o divisor não é
0 (zero).}
Se (v2 <> 0) então
início
Escreva(v1 / v2);
Fim
senão
início
Escreva('Erro! Não é possível dividir por zero.')
Fim;
Fim;
Fim.
21UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
7 Construa um algoritmo que leia o salário de um funcionário. O
algoritmo deverá calcular um aumento no salário de acordo com o
quadro a seguir:
Se o salário for: Acrescentar:
Menor que R$ 800,00 40%
Entre R$ 800,00 e R$ 1.000,00 35%
Entre R$ 1.001,00 e R$ 1.500,00 25%
Acima de R$ 1.500,00 15%
R.:
Algoritmo Unidade2_Topico1_Exe7;
var
Salario, Aumento, NovoSalario : Real;
início
escreva('Salário: ');
Leia(Salario);
Se (Salario < 800) então
início
Aumento <- 40;
Fim
senão Se (Salario <= 1000) então
início
Aumento <- 35;
Fim
senão Se (Salario <= 1500) então
início
Aumento <- 25;
Fim
senão
início
Aumento <- 15;
Fim;
NovoSalario <- Salario + (Salario * Aumento / 100);
Escreva('Novo salário: ', NovoSalario);
Fim.
22 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
TÓPICO 2
1 Quando é necessário utilizar uma estrutura de repetição?
R.: Quando precisarmos repetir uma instrução ou um mesmo conjunto de
instruções mais de uma vez.
2 Quando se dá preferência por utilizar a estrutura Para-faça ao invés
de Enquanto-faça?
R.: Quando se sabe a quantidade de vezes que a estrutura deverá repetir.
3 Explique o que é flag e dê um exemplo.
R.: É a condição para parar uma estrutura de repetição.
Exemplo: (x = 0)
“Enquanto” x for igual a zero, a estrutura irá repetir. Assim a flag é “x diferente
de zero”. Quando o valor da variável “x” for diferente de zero, a estrutura irá
parar.
4 Crie um algoritmo que leia o salário de 8 pessoas. O algoritmo deverá
informar:
a) quantas pessoas ganham mais que 1.000 reais;
b) a média salarial entre as 8 pessoas.
R.:
23UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
Algoritmo Unidade2_Topico2_Exe4 ;
{Como a quantidade é 8 fixa, pode-se colocar esta quantidade em uma
constante }
Constante Qtd = 8;
var
Salario, Soma, Media : Real;
Qtd_Mais_Mil, Qtd_Total : inteiro;
início
{ Inicializa a variável que contará quantos ganham mais do que mil }
Qtd_Mais_Mil <- 0;
{ Inicializa a variável que acumulará a soma dos salários }
Soma <- 0;
Para Qtd_Total <- 1 até 8 faça
início
escreva('Salário: ');
Leia(Salario);
{Para a questão a), verifica se o salário é maior do que mil}
Se (Salario > 1000) então
início
{ Conta mais uma pessoa que ganha mais do que mil }
Qtd_Mais_Mil <- Qtd_Mais_Mil + 1;
Fim;
{ Para fazer a média é necessário somar (acumular a soma de) todos
os salários }
Soma <- Soma + Salario;
Fim;
{ Calcula a média, dividindo a soma de todos os salários pela quantidade
de salários }
Media <- Soma / Qtd;
{Exibe os resultados }
Escreva(Qtd_Mais_Mil, ' pessoas recebem acima de mil reais.');
Escreva('A média salarial foi de ', Media);
Fim.
24 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
5 Faça um algoritmo que possa imprimir o menu abaixo:
MENU ESTADO CIVIL
1 – Solteiro(a)
2 – Desquitado(a)
3 – Casado(a)
4 – Divorciado(a)
5 – Viúvo(a)
Opção:
a) O usuário deverá selecionar uma das opções, digitando o número
correspondente.
b) Emitir mensagem de erro caso seja escolhida uma opção inexistente.
c) Ao finalizar, o algoritmo deverá apresentar a porcentagem de cada estado civil.
R.:
25UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
Algoritmo Unidade2_Topico2_Exe5 ;
var
estado_civil : Char;
Solteiro,
Desquitado,
Casado,
Divorciado,
Viuvo,
Total : inteiro;
início
{ Inicializa as variáveis que irão contar a quantidade de cada estado civil}
Solteiro <- 0;
Desquitado <- 0;
Casado <- 0;
Divorciado <- 0;
Viuvo <- 0;
Total <- 0; { Conta o total de pessoas para calcular o percentual }
Escreva('1 - Solteiro');Escreva('2 - Desquitado');
Escreva('3 - Casado');
Escreva('4 - Divorciado');
Escreva('5 - Viuvo');
Escreva('9 - Sair');
Leia(estado_civil);
Enquanto (estado_civil <> '9') faça
início
Caso estado_civil de
'1' : Solteiro <- Solteiro + 1;
'2' : Desquitado <- Desquitado + 1;
'3' : Casado <- Casado + 1;
'4' : Divorciado <- Divorciado + 1;
'5' : Viuvo <- Viuvo + 1;
senão Escreva('Opção inexistente.');
Fim;
26 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
Total <- Total + 1;
{ Solicita o estado civil da próxima pessoa }
Escreva('1 - Solteiro');
Escreva('2 - Desquitado');
Escreva('3 - Casado');
Escreva('4 - Divorciado');
Escreva('5 - Viuvo');
Escreva('9 - Sair');
Leia(estado_civil);
Fim;
{ Calcula o percentual na hora de exibir }
Escreva('Percentual de solteiros: ', (Solteiro * 100 / Total));
Escreva('Percentual de desquitados: ', (Desquitado * 100 / Total));
Escreva('Percentual de casados: ', (Casado * 100 / Total));
Escreva('Percentual de divorciados: ', (Divorciado * 100 / Total));
Escreva('Percentual de viuvos: ', (Viuvo * 100 / Total));
Fim.
6 Faça um algoritmo que leia um número inteiro. O algoritmo deverá
exibir se o número é primo ou não. Conceito de um número primo:
Um número natural é um número primo quando ele tem exatamente
dois divisores distintos: o número um e ele mesmo. Por convenção,
os números 0, 1 e -1 não são considerados primos nem compostos.
R.:
27UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
Algoritmo Unidade2_Topico2_Exe6;
var
Primo : lógica; { Variável para identificar se é primo ou não (verdadeiro/
falso}
Numero, NumeroTeste : inteiro;
início
{ Assume que Primo é verdadeiro.
A lógica do problema mudará esse valor se no momento que descobrir
que o número não é primo }
Primo <- verdadeiro;
escreva('Informe um número: ');
Leia(Numero);
{ Se o número for -1, 0 ou 1, já assume que não é mais primo }
Se (Numero >= -1) e (Numero <= 1) então
início
Primo <- falso;
Fim
senão { Se não for nenhum desses valores, faz os testes }
início
{ Não é necessário testar a divisão pelo próprio número, nem por 1, pois
sempre dará resto zero
Assim, testa-se a divisão sempre começando por um número anterior
ao número informado e indo até 2 }
NumeroTeste <- 2;
{ Enquanto não chegou no número anterior ao número informado
e enquanto não descobrir que não é mais primo, continua }
Enquanto (NumeroTeste < Numero) e (Primo) faça
início
{ Se a divisão for exata (resto zero) é porque o número é divisível
por outro número,
que não é ele mesmo, nem 1.}
Se (Numero mod NumeroTeste = 0) então
início
Primo <- falso;
Fim;
NumeroTeste <- NumeroTeste + 1;
Fim;
Fim;
28 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
Se (Primo) então
início
Escreva('O número ',Numero, ' é primo.');
Fim
senão
início
Escreva('O número ',Numero, ' não é primo.');
Fim;
Fim.
7 Faça um algoritmo que leia um número e calcule o seu fatorial. O
algoritmo deverá apresentar uma mensagem semelhante a: O fatorial
de X é Y.
O fatorial de um número é calculado multiplicando o número por
todos os seus antecessores até chegar em 1. Exemplo: Se o número
for 5, o cálculo será 5 * 4 * 3 * 2 * 1 = 120.
Assim, o fatorial de 5 é 120.
R.:
Algoritmo Unidade2_Topico2_Exe7;
var
Numero, Fatorial, I : inteiro;
início
{ Inicializa com um valor neutro na multiplicação }
Fatorial <- 1;
Escreva('Informe um número: ');
Leia(Numero);
{ Pode-se chegar até 2, pois o 1 é neutro na multiplicação,
não fazendo diferença multiplicar por 1,
mas é um processamento a mais, desnecessário }
Para I <- Numero voltar 2 faça
início
Fatorial <- Fatorial * I; { I receberá cada número entre o número
informado e 2 }
Fim;
Escreva('O fatorial de ',Numero,' é ',Fatorial);
Fim.
29UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
8 Desenvolva um algoritmo para calcular o Índice de Massa Corpórea
(IMC) de várias pessoas. O usuário deverá informar seu peso e altura.
O IMC é calculado dividindo-se o peso pela altura ao quadrado. O
algoritmo deverá exibir a situação da pessoa de acordo com o quadro
logo a seguir. O algoritmo deverá permanecer solicitando os dados
das pessoas e informando sua situação até que seja informada a
altura igual a 0 (zero).
Quadro de situações segundo a faixa de peso:
Cálculo IMC Situação
Abaixo de 18,5 Você está abaixo do peso ideal
Entre 18,5 e 24,9 Parabéns — você está em seu peso normal!
Entre 25,0 e 29,9 Você está acima de seu peso (sobrepeso)
Entre 30,0 e 34,9 Obesidade grau I
Entre 35,0 e 39,9 Obesidade grau II
40,0 e acima Obesidade grau III
R.:
Algoritmo Unidade2_Topico2_Exe8;
var
Peso, Altura, IMC : Real;
início
escreva('Altura: ');
Leia(Altura);
Enquanto (Altura > 0) faça
início
escreva('Peso: ');
Leia(Peso);
IMC <- Peso / (Altura * Altura);
Se (IMC < 18.5) então
início
Escreva('Você está abaixo do peso ideal.');
Fim
30 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
senão Se (IMC < 25) então
início
Escreva('Parabéns — você está em seu peso normal!');
Fim
senão Se (IMC < 30) então
início
Escreva('Você está acima de seu peso (sobrepeso).');
Fim
senão Se (IMC < 35) então
início
Escreva('Obesidade grau I.');
Fim
senão Se (IMC < 40) então
início
Escreva('Obesidade grau II.');
Fim
senão
início
Escreva('Obesidade grau III.');
Fim;
{ Pede a altura da próxima pessoa }
escreva('Altura: ');
Leia(Altura);
Fim;
Fim.
9 Escreva um algoritmo que solicite o preço unitário e a quantidade
de uma mercadoria a ser vendida. O algoritmo deverá permanecer
solicitando estes valores até que o preço seja 0 (zero). A cada vez que
forem lidas as informações, o algoritmo deverá verificar se a mercadoria
foi vendida em uma quantidade maior do que cinco. Caso tenha sido,
deverá ser dado um desconto de 15% no valor total da compra.
Ao final, o algoritmo deverá informar quanto deixou de ser arrecadado
em função dos descontos oferecidos.
R.:
31UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
Algoritmo Unidade2_Topico2_Exe9;
var
Preco, ValorCompra, DescontoTotal : Real;
Qtd : inteiro;
início
{ Inicializa a variável DescontoTotal, que acumulará o total
de desconto concedido, considerando todas as compras. }
DescontoTotal <- 0;
escreva('Preço unitário: ');
Leia(preco);
Enquanto (Preco > 0) faça
início
escreva('Quantidade: ');
Leia(qtd);
ValorCompra <- Preco * Qtd;
Se (Qtd > 5) então
inícioDescontoTotal <- DescontoTotal + (ValorCompra * 15 / 100);
Fim;
escreva('Preço unitário: ');
Leia(Preco);
Fim;
Escreva('Deixou de ser arrecadado: ', DescontoTotal);
Fim.
TÓPICO 3
1 Para que servem os contadores?
R.: Para contar quantas vezes uma estrutura de repetição é executada ou quantas
vezes uma situação específica é executada dentro de uma estrutura de repetição.
32 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
2 O que é inicialização e para que serve?
R.: É atribuir um valor inicial a uma variável.
Quando uma variável receber o conteúdo que ela já possui (por exemplo:
variavel ← variavel +1), é necessário inicializar, pois na primeira vez que a
instrução for executada, a variável já deverá ter algum valor armazenado.
3 Para que servem os acumuladores?
R.: Como o nome já sugere, serve para acumular valores em uma variável,
geralmente fazendo a variável receber o que ela já possui armazenada até
o momento, mais o conteúdo de outra variável ou resultado de um cálculo.
4 Para cada uma das técnicas a seguir, imagine um problema que
necessita da técnica para ser resolvido (diferente dos problemas
já apresentados no caderno), descreva o problema imaginado e
resolva-o utilizando algoritmos (ao todo, serão três algoritmos):
a) Contador
R.:
{ Conta quantas pessoas são maiores de idade (18 anos ou mais) }
Algoritmo Unidade2_Topico3_Exe4_a ;
var
Idade, Maiores : inteiro;
início
Maiores <- 0;
escreva('Idade: ');
Leia(Idade);
Enquanto (Idade > 0) faça
início
Se (Idade >= 18) então
início
Maiores <- Maiores + 1;
Fim;
escreva('Idade: ');
Leia(Idade);
Fim;
33UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
Escreva(Maiores, ' pessoas são maiores de idade.');
Leia;
Fim.
b) Acumulador
R.:
{
Uma loja resolveu doar todo o valor arrecadado durante um dia,
nas compras que custarem menos de 5 reais.
O algoritmo deverá solicitar valores das compras até que seja informado
0 (zero).
Ao final, o algoritmo deverá exibir o valor total que será doado.
}
Algoritmo Unidade2_Topico3_Exe4_b ;
var
ValorCompra, Doacao : inteiro;
início
Doacao <- 0;
escreva('Valor da compra: ');
Leia(ValorCompra);
Enquanto (ValorCompra > 0) faça
início
Se (ValorCompra < 5) então
início
Doacao <- Doacao + ValorCompra;
Fim;
escreva('Valor da compra: ');
Leia(ValorCompra);
Fim;
Escreva('Valor recebido por doação: ', Doacao);
Leia;
Fim.
34 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
c) Menor valor
R.:
{
O algoritmo lê o nome e idade de várias pessoas até que seja informado
0 (zero)
para a idade.
Em seguida, o algoritmo deverá exibir o nome da pessoa mais nova.
}
Algoritmo Unidade2_Topico3_Exe4_c ;
var
Nome, NomeMaisNovo : texto;
Idade, IdadeMaisNovo : inteiro;
início
IdadeMaisNovo <- 999;
escreva('Idade: ');
Leia(Idade);
Enquanto (Idade > 0) faça
início
escreva('Nome: ');
Leia(Nome);
Se (Idade < IdadeMaisNovo) então
início
IdadeMaisNovo <- Idade;
NomeMaisNovo <- Nome;
Fim;
escreva('Idade: ');
Leia(Idade);
Fim;
Escreva(NomeMaisNovo, ' é a pessoa mais nova.');
Fim.
35UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
5 O que é "looping"?
R.: É quando uma estrutura de repetição entra em uma situação onde nunca
mais irá parar de repetir.
6 Faça um algoritmo diferente do apresentado no caderno, cuja
estrutura de repetição entre em looping.
R.:
{ Se for informado um valor menor do que zero para “x”, a estrutura irá
parar. Mas se for informado um valor maior do que zero, entrará em
looping }
Algoritmo Unidade2_Topico3_Exe;
var
x : Inteiro;
início
Escreva('Informe um valor: ');
Leia(x);
Enquanto (x > 0) faça
Início
Escreva('O valor informado para x é ', x);
Fim;
Fim.
TÓPICO 4
1 O que são vetores?
R.: Os vetores são um tipo de variável onde se podem armazenar vários
valores ao mesmo tempo.
36 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
2 Escreva um algoritmo que leia 10 valores e armazene-os. Em seguida,
o algoritmo percorrerá todos os valores e, ao final, exibirá qual é o
maior valor armazenado no vetor.
R.:
Algoritmo Unidade2_Topico4_Exe2 ;
Constante qtd = 10;
var
valores : vetor [1..qtd] de inteiro;
i, maior : inteiro;
início
{ Armazenando os valores }
Para i <- 1 até qtd faça
início
escreva('Valor ', i, ': ');
Leia(valores[i]);
Fim;
{ Uma boa técnica é atribuir o primeiro valor do vetor como sendo o
maior
Depois é só comparar com os demais }
Maior <- valores[1];
{ Percorrendo e localizando o maior valor.
Pode iniciar da 2a. posição, pois o 1o. já está como sendo o maior até
o momento }
Para i <- 2 até qtd faça
início
Se (valores[i] > Maior) então
início
Maior <- valores[i];
Fim;
Fim;
escreva('O maior valor armazenado é: ', Maior);
Fim.
37UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
3 Escreva um algoritmo que leia 20 valores e armazene todos eles. Em
seguida, o algoritmo deverá exibir quantos valores negativos estão
armazenados no vetor.
R.:
Algoritmo Unidade2_Topico4_Exe3;
Constante qtd = 20;
var
valores : vetor [1..qtd] de real;
i, negativos : inteiro;
início
negativos <- 0;
Para i <- 1 até qtd faça
início
escreva('Informe um valor: ');
Leia(valores[i]);
Fim;
{ Percorre o vetor.
Poderia ser verificado no "for" anterior,
mas foi feito separadamente para termos noção de
que todos os valores já estão armazenados quando
formos verificar }
Para i <- 1 até qtd faça
início
Se (valores[i] < 0) então
início
negativos <- negativos + 1;
Fim;
Fim;
Escreva(negativos, ' valores eram negativos.');
Fim.
38 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
4 Desenvolva um algoritmo que solicite 10 valores e armazene-os. Após
armazenados, o algoritmo deverá exibir quantos valores pares estão
armazenados no vetor.
R.:
Algoritmo Unidade2_Topico4_Exe4 ;
Constante qtd = 10;
var
valores : vetor [1..qtd] de inteiro;
i, pares : inteiro;
início
pares <- 0;
Para i <- 1 até qtd faça
início
escreva('Informe um valor: ');
Leia(valores[i]);
Fim;
{ Percorre o vetor.
Poderia ser verificado no "for" anterior,
mas foi feito separadamente para termos noção de
que todos os valores já estão armazenados quando
formos verificar }
Para i <- 1 até qtd faça
início
Se (valores[i] mod 2 = 0) então
início
pares <- pares + 1;
Fim;
Fim;
escreva(pares, ' valores são pares.');
Fim.
39UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
5 Faça um algoritmo que solicite 15 valores e armazene todos em umvetor. Ao final, o algoritmo deverá exibir quantos valores múltiplos
de três estão armazenados.
R.:
Algoritmo Unidade2_Topico4_Exe5 ;
Constante qtd = 15;
var
valores : vetor [1..qtd] de inteiro;
i, multiplo3 : inteiro;
início
multiplo3 <- 0;
Para i <- 1 até qtd faça
início
escreva('Informe um valor: ');
Leia(valores[i]);
Fim;
{ Percorre o vetor.
Poderia ser verificado no "for" anterior,
mas foi feito separadamente para termos noção de
que todos os valores já estão armazenados quando
formos verificar }
Para i <- 1 até qtd faça
início
Se (valores[i] mod 3 = 0) então
início
multiplo3 <- multiplo3 + 1;
Fim;
Fim;
escreva(multiplo3, ' valores são multiplos de 3.');
Fim.
40 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
6 Refaça o algoritmo anterior, porém, após armazenados os valores, o
algoritmo deverá solicitar mais um valor e, em seguida, exibir todos
os valores múltiplos deste último valor lido.
R.:
Algoritmo Unidade2_Topico4_Exe6;
Constante qtd = 15;
var
valores : vetor [1..qtd] de inteiro;
i, valor : inteiro;
início
Para i <- 1 até qtd faça
início
escreva('Informe um valor: ');
Leia(valores[i]);
Fim;
escreva('Você deseja encontrar os múltiplos de que valor: ');
Leia(valor);
Para i <- 1 até qtd faça
início
Se (valores[i] mod valor = 0) então
início
Escreva(valores[i]);
Fim;
Fim;
Fim.
7 Escreva um algoritmo que leia 20 valores e armazene todos eles.
Em seguida, o algoritmo deverá exibir uma mensagem informando
se a quantidade de valores pares é maior do que a quantidade de
valores ímpares; se a quantidade de valores ímpares é maior do que
a quantidade de valores pares ou se a quantidade é igual.
R.:
41UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
Algoritmo Unidade2_Topico4_Exe7;
Constante qtd = 20;
var
valores : vetor [1..qtd] de inteiro;
i, qtd_pares, qtd_impares : inteiro;
início
qtd_pares <- 0;
qtd_impares <- 0;
Para i <- 1 até qtd faça
início
escreva('Informe um valor: ');
Leia(valores[i]);
Fim;
Para i <- 1 até qtd faça
início
Se (valores[i] mod 2 = 0) então
início
qtd_pares <- qtd_pares + 1;
Fim
senão
início
qtd_impares <- qtd_impares + 1;
Fim;
Fim;
Se (qtd_pares > qtd_impares) então
início
Escreva('A quantidade de valores pares é maior do que a quantidade
de valores ímpares.');
Fim
senão Se (qtd_impares > qtd_pares) então
início
Escreva('A quantidade de valores ímpares é maior do que a quantidade
de valores pares.');
Fim
senão
início
Escreva('A quantidade de valores pares e ímpares é igual.');
Fim;
Fim.
42 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
8 Desenvolva um algoritmo que solicite ao usuário quantos nomes ele
deseja informar. Esta quantidade não pode ser maior do que 50. Em
seguida, o algoritmo deverá solicitar um nome para busca.
Após solicitar o nome, o algoritmo deverá percorrer todos os nomes
armazenados e verificar se o nome de busca existe armazenado. Se
tiver, exibir a mensagem “Nome encontrado”; se não tiver, exibir a
mensagem “Nome inexistente”.
R.:
Algoritmo Unidade2_Topico4_Exe8 ;
var
nomes : vetor [1..50] de texto;
nome_busca : texto;
qtd, i : inteiro;
início
escreva('Quantos nomes deseja informar? ');
Leia(qtd);
{ Enquanto a quantidade ultrapassar 50, pede novamente }
Enquanto (qtd > 50) ou (qtd < 0) faça
início
escreva('A quantidade não pode ultrapassar 50, nem pode ser
negativa. Quantos nomes deseja informar? ');
Leia(qtd);
Fim;
escreva('Nome para busca: ');
Leia(nome_busca);
Fim.
TÓPICO 5
Questão única: Faça o teste de mesa do trecho restante do algoritmo.
Linha 21: L recebe 1
43UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
Algoritmo Unidade2_Topico5_Exe1 ;
{ Tanto as linhas quanto colunas são iguais.
Assim, coloca-se em uma única constante este valor }
Constante Dimensao = 4;
var
{ A matriz terá as linhas 1 a 4 e as colunas 1 a 4 }
valores : vetor [1..Dimensao, 1..Dimensao] de Real;
MaiorValor : Real;
l, c, lMaior, cMaior : inteiro;
início
Para l <- 1 até Dimensao faça
início
Para c <- 1 até Dimensao faça
início
escreva('Valor: ');
Leia(valores[l,c]);
Fim;
Fim;
{Percorre a matriz para localizar o maior valor.
Como é necessário iniciar a variável que guarda um valor,
pode-se iniciar com o primeiro valor armazenado na matriz.
A casa onde está este valor é a 1,1. Assim, armazena esta
coordenada nas variáveis lMaior e cMaior
}
MaiorValor <- valores[1,1];
lMaior <- 1;
cMaior <- 1;
{ Percorre a matriz procurando se há um valor maior que o primeiro }
Para l <- 1 até Dimensao faça
início
Para c <- 1 até Dimensao faça
início
Se (valores[l,c] > MaiorValor) então
início
{ Guarda o valor e onde ele está }
MaiorValor <- valores[l,c];
44 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
lMaior <- l;
cMaior <- c;
Fim;
Fim;
Fim;
Escreva('O maior valor é ',MaiorValor,'. Ele está na linha ',lMaior,', coluna
',cMaior);
Leia;
Fim.
2 Crie um algoritmo que solicite valores e preencha uma matriz de
ordem 5 x 4 (5 linhas por 4 colunas). Em seguida, o algoritmo deverá
solicitar mais um valor para procurá-lo na matriz. O algoritmo deverá
informar, no fim, em que linha x coluna está o valor. Se o valor não
for encontrado, o algoritmo deverá exibir uma mensagem informando
esta situação.
R.:
Algoritmo Unidade2_Topico5_Exe2;
Constante
linhas = 5;
colunas = 4;
var
mat : vetor [1..linhas,1..colunas] de real;
procurar : real;
l, c : inteiro;
encontrou : lógica;
início
Para l <- 1 até linhas faça
início
Para c <- 1 até colunas faça
início
escreva('Valor: ');
Leia(mat[l,c]);
Fim;
Fim;
45UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
escreva('Valor para busca: ');
Leia(procurar);
{ Como ainda não começou a procurar, assume-se que ainda não
encontrou o valor }
encontrou <- falso;
Para l <- 1 até linhas faça
início
Para c <- 1 até colunas faça
início
Se (mat[l,c] = procurar) então
início
{ Mostra a localização do valor }
Escreva('Linha: ',l,' Coluna: ',c);
{ Indica que encontrou o valor }
encontrou <- verdadeiro;
Fim;
Fim;
Fim;
{ Se não encontrou o valor, exibe a mensagem }
Se (not encontrou) então
início
escreva('O valor ',procurar,' não existe na matriz.');
Fim;
Fim.
3 Desenvolva um algoritmo que leia valores e preencha uma matriz 4
x 4. O algoritmo deverá informar quantos valores maiores do que 5
estão armazenados na matriz.
R.:
46 GABARITODAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
Algoritmo Unidade2_Topico5_Exe3;
Constante
Dimensao = 4;
var
valores : vetor [1..Dimensao,1..Dimensao] de Real;
l,c, QtosMaioresQ5 : inteiro;
início
QtosMaioresQ5 <- 0;
Para l <- 1 até Dimensao faça
início
Para c <- 1 até Dimensao faça
início
escreva('Valor: ');
Leia(valores[l,c]);
Fim;
Fim;
Para l <- 1 até Dimensao faça
início
Para c <- 1 até Dimensao faça
início
Se (valores[l,c] > 5) então
início
QtosMaioresQ5 <- QtosMaioresQ5 + 1;
Fim;
Fim;
Fim;
Escreva('Existem ', QtosMaioresQ5, ' valores maiores do que 5
armazenados na matriz.');
Leia;
Fim.
47UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
4 Faça um algoritmo que solicite valores para preencher uma matriz 3
x 4. Depois, o algoritmo deverá solicitar mais um valor e criar uma
segunda matriz, cujos valores são formados pelo resultado de cada
um dos valores da primeira matriz, multiplicados pelo valor lido por
último. Exibir a segunda matriz.
R.:
Algoritmo Unidade2_Topico5_Exe4;
Constante
linhas = 3;
colunas = 4;
var
mat : vetor [1..linhas,1..colunas] de real;
mat2 : vetor [1..linhas,1..colunas] de real;
multiplicador : real;
l, c : inteiro;
início
Para l <- 1 até linhas faça
início
Para c <- 1 até colunas faça
início
escreva('Valor: ');
Leia(mat[l,c]);
Fim;
Fim;
escreva('Valor para multiplicar: ');
Leia(multiplicador);
Para l <- 1 até linhas faça
início
Para c <- 1 até colunas faça
início
mat2[l,c] <- mat[l,c] * multiplicador;
Fim;
Fim;
48 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
{ Mostra a matriz 2 }
Para l <- 1 até linhas faça
início
Para c <- 1 até colunas faça
início
escreva(mat2[l,c],' '); { Exibe o valor e adiciona um espaço para
exibir o próximo }
Fim;
Escreva;
Fim;
Leia;
Fim.
5 Crie um algoritmo que preencha uma matriz de dimensão 3 x 3 com
valores fornecidos pelo usuário. O algoritmo deverá exibir a média
dos valores de cada uma das linhas.
R.:
Algoritmo Unidade2_Topico5_Exe2;
Constante
Dimensao = 3;
var
mat : vetor [1..Dimensao,1..Dimensao] de real;
SomaValores : Real;
l, c : inteiro;
início
Para l <- 1 até Dimensao faça
início
Para c <- 1 até Dimensao faça
início
escreva('Valor: ');
Leia(mat[l,c]);
Fim;
Fim;
Para l <- 1 até Dimensao faça
início
49UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
{ A cada linha, inicializa SomaValores novamente }
SomaValores <- 0;
{ Percorre todos os valores de uma linha }
Para c <- 1 até Dimensao faça
início
SomaValores <- SomaValores + mat[l,c];
Fim;
{ Ao chegar aqui, terminou a soma de todos os valores de uma linha.
Com isto, calcula-se a média e já exibe, sem necessidade de armazenar
em variável }
Escreva('Média dos valores da ',l,' linha: ', (SomaValores / Dimensao));
{ A média é a soma dos valores dividido pela quantidade. Sabe-se que
todas as linhas
terão três (Dimensao) valores. Assim, divide-se por Dimensao }
Fim;
Leia;
Fim.
6 Escreva um algoritmo que leia um número e exiba uma mensagem
informando se o número é primo ou não. O algoritmo utilizará um
subalgoritmo que recebe um valor, verifica se ele é primo e retorna uma
informação lógica indicando se é primo ou não. O algoritmo principal
deverá utilizar esta informação para exibir a mensagem na tela.
Algoritmo Unidade2_Topico6_Exe6;
var
Numero : inteiro;
função Primo(Numero : inteiro) : lógica;
var
NumeroTeste : inteiro;
Verifica : lógica;
início
Verifica <- verdadeiro;
{ Se o número for -1, 0 ou 1, já assume que não é mais primo }
Se (Numero >= -1) e (Numero <= 1) então
início
50 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
Verifica <- falso;
Fim
senão { Se não for nenhum desses valores, faz os testes }
início
{ Não é necessário testar a divisão pelo próprio número, nem por 1, pois
sempre dará resto zero
Assim, testa-se a divisão sempre começando por um número anterior
ao número informado e indo até 2 }
NumeroTeste <- 2;
{ Enquanto não chegou no número anterior ao número informado
e enquanto não descobrir que não é mais primo, continua }
Enquanto (NumeroTeste < Numero) e (Verifica) faça
início
{ Se a divisão for exata (resto zero) é porque o número é divisível
por outro número,
que não é ele mesmo, nem 1.}
Se (Numero mod NumeroTeste = 0) então
início
Verifica <- falso;
Fim;
NumeroTeste <- NumeroTeste + 1;
Fim;
Fim;
{ Retorna o "verdadeiro" ou "falso" }
Primo <- Verifica;
Fim;
início
escreva('Informe um número: ');
Leia(Numero);
Se (Primo(Numero)) então
início
Escreva('O número ',Numero, ' é primo.');
Fim
senão
início
51UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
Escreva('O número ',Numero, ' não é primo.');
Fim;
Fim.
7 Desenvolva um algoritmo que leia três números. Os três números
serão enviados para um subalgoritmo que retornará o maior dos três.
O algoritmo principal deverá exibir o maior valor.
R.:
Algoritmo Unidade2_Topico6_Exe7;
var
a, b, c : Real;
função Maior (v1, v2, v3 : Real) : Real;
var
ArmazenaMaior : Real;
início
Se (v1 > v2) então
início
ArmazenaMaior <- v1;
Fim
senão
início
ArmazenaMaior <- v2;
Fim;
Se (v3 > ArmazenaMaior) então
início
ArmazenaMaior <- v2;
Fim;
Maior <- ArmazenaMaior;
Fim;
52 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
início
escreva('Informe o primeiro número: ');
Leia(a);
escreva('Informe o segundo número: ');
Leia(b);
escreva('Informe o terceiro número: ');
Leia(c);
Escreva('O maior valor é ', Maior(a,b,c));
Fim.
8 Escreva um algoritmo para calcular exponenciação. O algoritmo
deverá ler dois valores e exibir o resultado do primeiro elevado ao
segundo (por exemplo, se os valores lidos forem 3 e 2, o algoritmo
deverá exibir o resultado de 32). O algoritmo deverá utilizar um
subalgoritmo que recebe dois valores, calcula e retorna o primeiro
elevado ao segundo. Calcular somente com expoentes inteiros.
R.:
Algoritmo Unidade2_Topico6_Exe8;
var
base : Real;
expoente : inteiro;
função Potencia(b : Real; e : inteiro) : Real;
var
i : inteiro;
Resultado : Real;
início
Resultado <- 1; { Inicializa com um número neutro na multiplicação }
{ Multiplica a base por "n" vezes,
onde "n" equivale à quatidade representada pelo expoente }
Para i <- 1 até e faça
início
Resultado <- Resultado * b;
Fim;
53UNIASSELVI
NEADGABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
Potencia <- Resultado;
Fim;
início
escreva('Informe o número base: ');
Leia(base);
escreva('Informe o expoente: ');
Leia(expoente);
Escreva(base, ' elevado a ', expoente, ' é ', Potencia(base, expoente));
Fim.
9 Desenvolva um algoritmo que leia um valor correspondente ao
raio de uma esfera. O algoritmo deverá passar este valor para um
subalgoritmo que calculará o volume da esfera e retornará este
volume. O algoritmo principal deverá exibir o volume da esfera. A
fórmula para calcular o volume de uma esfera, baseando-se no valor
do raio, é v = 4/3 * Pi * R3.
R.:
Algoritmo Unidade2_Topico6_Exe9;
var
raio : Real;
função VolumeEsfera(r : Real) : Real;
Constante
pi = 3.1415926535;
início
VolumeEsfera <- 4 / 3 * pi * (r * r * r);
Fim;
início
escreva('Raio: ');
Leia(raio);
Escreva('O volume da esfera é ',VolumeEsfera(raio));
Fim.
54 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
10 Faça um algoritmo que exiba este menu na tela:
1 – Adição
2 – Subtração
3 – Multiplicação
4 – Divisão
Este menu deverá ser exibido por um subalgoritmo.
O algoritmo principal deverá ler a opção do usuário e mais dois valores
numéricos.
Os dois valores, mais a operação, deverão ser enviados a um subalgoritmo
que fará o cálculo de acordo com a escolha do usuário e retornará o resultado.
Ex.: Se a escolha foi 2 (subtração) e os valores foram 2 e 8, o subalgoritmo
retornará -6.
O algoritmo deverá exibir o resultado.
R.:
Algoritmo Unidade2_Topico6_Exe10;
var
valor1, valor2 : Real;
Operacao : char;
Procedimento Menu;
início
Escreva('1 - Adição');
Escreva('2 - Subtração');
Escreva('3 - Multiplicação');
Escreva('4 - Divisão');
Fim;
função Calculo(v1, v2 : Real; Op : char) : Real;
início
Caso Op de
'1' : Calculo <- v1 + v2;
'2' : Calculo <- v1 - v2;
'3' : Calculo <- v1 * v2;
'4' :
início
{ Como divisão por 0 não existe, deve-se tratar esta situação }
Se (v2 = 0) então
escreva('Erro. Divisão por zero.')
55UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
senão
Calculo <- v1 / v2;
Fim;
Fim;
Fim;
início
escreva('Primeiro valor: ');
Leia(valor1);
escreva('Segundo valor: ');
Leia(valor2);
{ Chama o sub-programa que exibe o menu }
Menu;
{ Lê a opção do usuário }
Leia(Operacao);
escreva('Resultado do cálculo: ', Calculo(valor1, valor2, Operacao));
Fim.
UNIDADE 3
TÓPICO 1
1 Por que foi escolhida a linguagem Pascal para o aprendizado de
linguagens de programação?
R.: Por ser a mais parecida com a pseudolinguagem portugol.
2 Esta linguagem tem este nome em homenagem a Blaise Pascal. Por
que foi prestada esta homenagem a ele?
R.: Porque ele inventou a primeira máquina de calcular mecânica do mundo.
3 Qual é o atributo pelo qual Blaise Pascal é conhecido?
R.: Blaise Pascal é considerado o pai da Ciência da Computação.
56 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
4 Quem criou a linguagem Pascal? Com que objetivo?
R.: Niklaus Wirth. Seu objetivo era criar uma linguagem para o ensino da
programação. Uma linguagem que fosse simples, incentivando o aprendizado
através de programas claros e legíveis, permitindo a utilização de boas
técnicas de programação.
5 Cite dois exemplos de ambientes de programação para Pascal.
R.: Turbo Pascal, da Borland
PascalZim
6 O que é case sensitive?
R.: Case sensitive significa que a linguagem faz distinção entre letras
maiúsculas e minúsculas. Em outras palavras, se dizemos que uma linguagem
é case sensitive, as letras maiúsculas são diferentes de minúsculas.
7 Cite uma importância dos tipos de dados em uma linguagem de
programação.
R.: Para que o programador possa ter um certo controle sobre o quanto seu
programa irá utilizar da memória do computador.
TÓPICO 2
1 Qual é a regra básica sobre a utilização do Begin/End em uma
estrutura: quando é obrigatório e quando não é?
R.: O Begin/End apenas é obrigatório quando há duas ou mais instruções
dentro de uma estrutura.
2 Qual é a importância de utilizar o "else" para encadear uma estrutura
"if", ao invés de apenas utilizar estruturas "if" independentes?
R.: Se utilizar “IFs” independentes, todas as condições da estrutura serão
testadas. Ao encadear com “else”, quando uma condição for verdadeira, a
execução não testa mais as condições seguintes.
3 Crie um programa que solicite o salário de uma pessoa. O programa
deverá dar um reajuste de 9% no salário se este for até R$ 1.000,00.
Se for maior, deverá dar um reajuste de 6%. Exibir o novo salário.
57UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
R.:
Program Unidade3_Topico2_Exe3;
var
Salario, Reajuste : Real;
Begin
write('Salário: ');
readln(Salario);
if (Salario <= 100) then
begin
Reajuste := 9;
end
else
begin
Reajuste := 6;
end;
Writeln('Salário com reajuste: ', (Salario + (Salario * Reajuste /
100)));
End.
4 Uma loja concede pagamento a prazo em 3, 5 e 7 vezes. A partir do
preço à vista de um determinado produto, calcule o preço total a pagar
e o valor da prestação mensal, referentes ao pagamento parcelado.
Se o pagamento for parcelado em três vezes, deverá ser dado um
acréscimo de 12% no total a ser pago. Se for parcelado em 5 vezes,
o acréscimo é de 22%. Parcelado em 10 vezes, acrescenta-se 38%.
R.:
Program Unidade3_Topico2_Exe4;
var
preco_vista, total_pagar,
prestacao, acrescimo : Real;
parcelas : Integer;
Begin
write('Preço da mercadoria: ');
readln(preco_vista);
58 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
write('Em quantas vezes você deseja pagar: ');
readln(parcelas);
{ Não permite que continue se a parcela não for uma opção correta
}
while (parcelas <> 3) and (parcelas <> 5) and (parcelas <> 10) do
begin
write('Esta quantidade não é permitida. Em quantas vezes
você deseja pagar: ');
readln(parcelas);
end;
case parcelas of
3 : acrescimo := 12;
5 : acrescimo := 22;
10 : acrescimo := 38;
end;
total_pagar := preco_vista + (preco_vista * acrescimo / 100);
writeln('Será pago R$ ', total_pagar,' em ',parcelas,' vezes de R$ ',
(total_pagar / parcelas));
End.
5 Desenvolva um programa que solicite o cargo, o salário e a idade de
uma pessoa e calcule o aumento que ela receberá de acordo com os
dados a seguir:
Cargo Idade Aumento
1 - Programador Até 20 anos 5%
1 - Programador Acima de 20 anos 8%
2 – Analista de sistemas Até 25 anos 8,5%
2 – Analista de sistemas Acima de 25 anos 10%
3 – Qualidade de software Independente da idade 7%
O programa deverá exibir o novo salário da pessoa.
Faça o programa de duas formas, cada uma utilizando uma estrutura de
seleção diferente.
59UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
R.:
Utilizando “case”
Program Unidade3_Topico2_Exe5;
var
Cargo : char;
Salario, Aumento : Real;
Idade : Integer;
Begin
writeln('Informe o cargo');
writeln('1 - Programador');
writeln('2 - Analista de sistemas');
writeln('3 - Qualidade de software');
readln (Cargo);
write('Salário: ');
readln(Salario);
write('Idade: ');readln(Idade);
case Cargo of
'1' :
if (idade <= 20) then
Aumento := 5
else
Aumento := 8;
'2' :
if (idade <= 25) then
Aumento := 8.5
else
Aumento := 10;
'3' : Aumento := 7;
end;
writeln('Novo salário: ', (Salario + (Salario * Aumento / 100)));
End.
60 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
Utilizando “if”
Program Unidade3_Topico2_Exe5;
var
Cargo : char;
Salario, Aumento : Real;
Idade : Integer;
Begin
writeln('Informe o cargo');
writeln('1 - Programador');
writeln('2 - Analista de sistemas');
writeln('3 - Qualidade de software');
readln (Cargo);
write('Salário: ');
readln(Salario);
write('Idade: ');
readln(Idade);
if (Cargo = '1') then
begin
if (idade <= 20) then
Aumento := 5
else
Aumento := 8;
end
else if (Cargo = '2') then
begin
if (idade <= 25) then
Aumento := 8.5
else
Aumento := 10;
end
else if (Cargo = '3') then
begin
Aumento := 7;
end
else
begin
61UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
writeln('Cargo inexistente.');
Aumento := 0;
end;
writeln('Novo salário: ', (Salario + (Salario * Aumento / 100)));
End.
6 Faça um programa que solicite três valores correspondentes aos
lados de um possível triângulo e informe:
- Se for um triângulo, exibir qual é o tipo (equilátero, isósceles, escaleno).
- Se for um triângulo retângulo, exibir uma mensagem informando.
- Se não for triângulo, exibir uma mensagem informando.
Regras matemáticas:
a) Para que as medidas formem um triângulo, cada um de seus lados deve
ser maior que o valor absoluto (módulo) da diferença dos outros dois lados e
menor que a soma dos outros dois lados. Resumo da regra:
| b - c | < a < b + c
| a - c | < b < a + c
| a - b | < c < a + b
b) Para que seja um triângulo equilátero, todos os seus lados devem ser
iguais.
c) Para que seja um triângulo isósceles, deve possuir apenas dois lados
iguais.
d) Para que seja um triângulo escaleno, todos os seus lados devem ser
diferentes.
e) Para que seja um triângulo retângulo, a soma do quadrado entre dois
lados deve ser igual ao quadrado do lado restante. Ex.: a2 = b2 + c2. Note
que um triângulo retângulo pode ser somente isósceles ou escaleno, nunca
equilátero.
R.:
Program Unidade3_Topico2_Exe6;
var
a, b, c : Real;
Begin
write('Lado a: ');
readln(a);
62 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
write('Lado b: ');
readln(b);
write('Lado c: ');
readln(c);
{ Verifica se é triângulo }
if (a < b + c) and (b < a + c) and (c < a + b) then
begin
{ Verifica qual é o triângulo }
{ Se todos os lados forem iguais, é equilátero }
if (a = b) and (b = c) then
begin
writeln('O triângulo é Equilátero.');
end
else
begin
{ Se não for equilátero, pode ser isósceles,
escaleno e,
independente disto, pode ser Retângulo }
if (a = b) or (a = c) or (b = c) then
begin
writeln('O triângulo é Isósceles.');
end
else
begin
writeln('O triângulo é Escaleno.');
end;
{ Verifica se é retângulo }
if (((a*a) = (b*b) + (c*c)) or ((b*b) = (a*a) + (c*c)) or
((c*c) = (a*a) + (b*b))) then
begin
writeln('O triângulo é Retângulo.');
end;
end;
end
else
begin
writeln('As medidas não formam um triângulo.');
end;
End.
63UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
TÓPICO 3
1 Onde é utilizado e para que serve o DownTo?
R.: É utilizado na estrutura “for” e serve para fazer com que uma variável
percorra de um número maior para um número menor.
2 Qual é a diferença básica entre as estruturas de repetição While-Do
e Repeat-Until?
R.: Na estrutura “repeat-until”, as instruções ali contidas executarão pelo
menos uma vez.
Na estrutura “while-do”, pode ser que as instruções nunca sejam executadas.
3 Refaça o exercício que verifica se um número é primo, agora na
linguagem de programação. Obs.: procure não consultar o exercício
feito em algoritmo. Você vai perceber que, mesmo um exercício que
já foi resolvido, trará desafios ao tentar resolvê-lo novamente.
R.:
Program Unidade3_Topico3_Exe3;
var
Primo : Boolean; { Variável para identificar se é primo ou não
(verdadeiro/falso}
Numero, NumeroTeste : Integer;
Begin
{ Assume que Primo é verdadeiro.
A lógica do problema mudará esse valor se no momento que
descobrir que o número não é primo }
Primo := true;
write('Informe um número: ');
readln(Numero);
{ Se o número for -1, 0 ou 1, já assume que não é mais primo }
if (Numero >= -1) and (Numero <= 1) then
begin
64 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
Primo := false;
end
else { Se não for nenhum desses valores, faz os testes }
begin
{ Não é necessário testar a divisão pelo próprio número,
nem por 1, pois sempre dará resto zero
Assim, testa-se a divisão sempre começando por um
número anterior ao número informado e indo até 2 }
NumeroTeste := 2;
{ Enquanto não chegou no número anterior ao número
informado
e enquanto não descobrir que não é mais primo, continua
}
while (NumeroTeste < Numero) and (Primo) do
begin
{ Se a divisão for exata (resto zero) é porque o
número é divisível por outro número,
que não é ele mesmo, nem 1.}
if (Numero mod NumeroTeste = 0) then
begin
Primo := false;
end;
NumeroTeste := NumeroTeste + 1;
end;
end;
if (Primo) then
begin
writeln('O número ',Numero, ' é primo.');
end
else
begin
writeln('O número ',Numero, ' não é primo.');
end;
End.
4 Desenvolva um programa que leia, de uma quantidade indeterminada
de pessoas, os seguintes dados:
a) Nome
b) Salário
65UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
c) Idade
Ao final, o programa deverá exibir:
a) Nome da pessoa mais velha
b) Nome e salário da pessoa que tem o salário mais alto
c) Salário da pessoa mais nova
Program Unidade3_Topico3_Exe4;
var
nome, nome_mais_velho, nome_salario_alto : String;
salario, salario_mais_alto, salario_mais_novo : Real;
idade, idade_mais_velho, idade_mais_novo : Integer;
continua : char;
Begin
idade_mais_velho := 0;
salario_mais_alto := 0;
idade_mais_novo := 999;
write('Deseja iniciar? (s/n) ');
readln(continua);
while (continua = 's') do
begin
write('Nome: ');
readln(nome);
write('Salário: ');
readln(salario);
write('Idade: ');
readln(idade);
{ Verifica o nome da pessoa mais velha }
if (idade > idade_mais_velho) then
begin
idade_mais_velho := idade;
nome_mais_velho := nome;
end;
{ Verifica o nome da pessoa que possui o salário mais alto
}
if (salario > salario_mais_alto) then
begin
66 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
salario_mais_alto := salario;
nome_salario_alto := nome;
end;
{ Verifica o salário da pessoa mais nova }
if (idade < idade_mais_novo) then
begin
idade_mais_novo := idade;
salario_mais_novo := salario;
end;
write('Deseja continuar? (s/n) ');
readln(continua);
end;
writeln('Nome da pessoa mais velha: ', nome_mais_velho);
writeln(nome_salario_alto,' tem o salário mais alto: R$ ',salario_
mais_alto);
writeln('O salário da pessoa mais nova é R$ ',salario_mais_novo);End.
5 Na matemática, um número perfeito é um número inteiro para o qual
a soma de todos os seus divisores positivos próprios (excluindo ele
mesmo) é igual ao próprio número.
Construa um programa que leia um número e informe se o número
é perfeito ou não.
Por exemplo, o 6 é um número perfeito, pois 1 + 2 + 3 = 6. No caso,
1, 2 e 3 são os únicos divisores de 6.
Exemplos de números perfeitos: 6; 28; 496; 8128; 33.550.336;
8.589.869.056.
R.:
67UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
Program Unidade3_Topico3_Exe5;
var
Numero, SomaDivisores, i : Integer;
Begin
SomaDivisores := 0;
write('Informe um número: ');
readln(Numero);
for i := 1 to Numero - 1 do
begin
if (Numero mod i = 0) then
begin
SomaDivisores := SomaDivisores + i;
end;
end;
if (SomaDivisores = Numero) then
begin
write('O número é perfeito.');
end
else
begin
write('O número não é perfeito.');
end;
End.
6 Em uma empresa, foram solicitadas informações de cada funcionário
para realizar uma pesquisa. Para cada funcionário é informado o nome
e quantos filhos ele possui. Ao final, a pesquisa deverá informar:
a) Nome da pessoa que mais possui filhos
b) Quantos filhos a pessoa do item acima (item a) possui
c) Se existem na empresa mais pessoas com filhos ou mais pessoas sem
filhos (apresentar uma mensagem informando)
d) Percentual de pessoas sem filhos
R.:
68 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
Program Unidade3_Topico3_Exe6;
var
nome, nome_mais_filhos : string;
qtd_filhos, mais_filhos,
qtd_com_filhos, qtd_sem_filhos : Integer;
continua : char;
Begin
mais_filhos := 0;
qtd_com_filhos := 0;
qtd_sem_filhos := 0;
write('Deseja iniciar? (s/n)');
readln(continua);
while (continua = 's') do
begin
write('Nome: ');
readln(nome);
write('Quantidade de filhos: ');
readln(qtd_filhos);
if (qtd_filhos > mais_filhos) then
begin
mais_filhos := qtd_filhos;
nome_mais_filhos := nome;
end;
if (qtd_filhos > 0) then
begin
qtd_com_filhos := qtd_com_filhos + 1;
end
else
begin
qtd_sem_filhos := qtd_sem_filhos + 1;
end;
write('Deseja continuar? (s/n)');
readln(continua);
end;
69UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
writeln(nome_mais_filhos, ' é o funcionário que mais possui filhos');
if (qtd_com_filhos > qtd_sem_filhos) then
begin
writeln('Existem mais pessoas com filhos.');
end
else if (qtd_sem_filhos > qtd_com_filhos) then
begin
writeln('Existem mais pessoas sem filhos.');
end
else
begin
writeln('A quantidade de pessoas sem filhos e com filhos é
a mesma.');
end;
{ Quantidade sem filhos vezes 100, dividido pelo total de pessoas }
writeln((qtd_sem_filhos * 100 / (qtd_com_filhos+qtd_sem_filhos)),
'% das pessoas não tem filhos.');
End.
7 Um órgão governamental fará um recadastramento de pessoas físicas
e jurídicas para obter informações sobre impostos. Para cada pessoa
ou empresa serão solicitadas as seguintes informações:
- Tipo de pessoa (física/jurídica)
- Salário ou faturamento bruto mensal
As pessoas físicas pagarão 3,5% do seu salário para o imposto.
As pessoas jurídicas pagarão 5,2%.
Para cada pessoa, exibir quanto de imposto ela irá pagar.
O programa deverá fornecer as seguintes informações:
a) Foram recadastradas mais pessoas físicas ou jurídicas?
b) Qual é a percentagem de pessoas físicas que fizeram recadastramento?
c) Qual foi o imposto (em valor) mais alto pago por uma pessoa jurídica?
d) Qual é a média geral de imposto pago por pessoas físicas?
* Não se sabe quantas pessoas virão fazer o recadastramento. O algoritmo
deverá estar preparado para isso.
R.:
70 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
Program Unidade3_Topico3_Exe7;
const
pf = 3.5;
pj = 5.2;
var
tipo : char;
valor_mensal, imposto,
imposto_mais_alto_juridica, soma_imposto_fisica : real;
qtd_fisica, qtd_juridica : Integer;
Begin
qtd_fisica := 0;
qtd_juridica := 0;
imposto_mais_alto_juridica := 0;
soma_imposto_fisica := 0;
writeln('Informe a opção:');
writeln('F - Física');
writeln('J - Jurídica');
writeln('* - Sair (qualquer outra informação para sair');
readln(tipo);
while (tipo = 'f') or (tipo = 'j') do
begin
write('Salário ou faturamento mensal: ');
readln(valor_mensal);
if (tipo = 'f') then
begin
imposto := valor_mensal * pf / 100;
qtd_fisica := qtd_fisica + 1;
soma_imposto_fisica := soma_imposto_fisica +
imposto;
end
else
begin
71UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
imposto := valor_mensal * pj / 100;
qtd_juridica := qtd_juridica + 1;
if (imposto > imposto_mais_alto_juridica) then
begin
imposto_mais_alto_juridica := imposto;
end;
end;
writeln('Informe a opção:');
writeln('F - Física');
writeln('J - Jurídica');
writeln('* - Sair (qualquer outra informação para sair');
readln(tipo);
end;
if (qtd_fisica > qtd_juridica) then
begin
writeln('Foram cadastradas mais pessoas físicas.');
end
else if (qtd_juridica > qtd_fisica) then
begin
writeln('Foram cadastradas mais pessoas jurídicas.');
end
else
begin
writeln('Foi cadastrada a mesma quantidade de pessoas
físicas e jurídicas.');
end;
writeln((qtd_fisica * 100 / (qtd_fisica+qtd_juridica)), '% das pessoas
que fizeram cadastramento eram físicas.');
writeln('O valor mais alto de imposto pago por uma pessoa jurídica
foi de R$ ', imposto_mais_alto_juridica);
if (qtd_fisica > 0) then
begin
writeln('A média de imposto pago por pessoas físicas foi de
R$ ', (soma_imposto_fisica / qtd_fisica));
end
else
begin
writeln('Não houve pessoas físicas no cadastramento.');
end;
End.
72 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
8 Abriu um novo cinema na cidade e, no dia da estreia, estão cobrando
10 reais a entrada normal e 5 para estudantes. O cinema deseja saber
algumas informações sobre a primeira sessão (a sessão de estreia).
Para isto, você fará um programa em que, quando uma pessoa
comprar um ingresso para esta sessão, o atendente informe se a
pessoa é estudante ou não.
Você define a flag de saída.
Após vendidos todos os ingressos da sessão, o programa deverá exibir:
a) Quanto o cinema arrecadou na sessão?
b) Qual foi o percentual de estudantes em relação ao total de pessoas?
c) Foi arrecadado mais com entradas normais ou com estudantes?
d) Foram comprados mais ingressos de estudante ou normais?
R.:
Program Unidade3_Topico3_Exe8;
var
tipo : char;
valor, total, valor_estudante, valor_nao_estudante : real;
qtd_estudante, qtd_nao_estudante : integer;
Begin
total := 0;
valor_estudante := 0;
valor_nao_estudante := 0;
qtd_estudante := 0;
qtd_nao_estudante := 0;
writeln('1 - Estudante');
writeln('2 - Não estudante');
writeln('* - Qualquer outra informação para sair');
readln(tipo);
while(tipo = '1') or (tipo = '2') do
begin
if (tipo = '1') then
begin
valor := 5;
valor_estudante := valor_estudante + valor;
73UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
qtd_estudante := qtd_estudante + 1;
end
else
begin
valor := 10;
valor_nao_estudante := valor_nao_estudante + valor;
qtd_nao_estudante := qtd_nao_estudante + 1;end;
total := total + valor;
writeln('1 - Estudante');
writeln('2 - Não estudante');
writeln('* - Qualquer outra informação para sair');
readln(tipo);
end;
writeln('O cinema arrecadou R$ ', total);
writeln('O percentual de estudantes foi de ',(qtd_estudante * 100 /
(qtd_estudante+qtd_nao_estudante)),'%');
if (valor_estudante > valor_nao_estudante) then
begin
writeln('Foi arrecadado mais com estudantes.');
end
else if (valor_nao_estudante > valor_estudante) then
begin
writeln('Foi arrecadado mais com pessoas que não são
estudantes.');
end
else
begin
writeln('Foi arrecadado o mesmo valor entre estudantes e
não estudantes');
end;
if (qtd_estudante > qtd_nao_estudante) then
begin
writeln('Foi comprado mais ingressos de estudantes.');
end
else if (qtd_nao_estudante > qtd_estudante) then
begin
74 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
writeln('Foi comprado mais ingressos de pessoas que não são estudantes.');
end
else
begin
writeln('Foi arrecadada a mesma quantidade de ingressos
entre estudantes e não estudantes');
end;
End.
TÓPICO 4
1 Faça um programa que solicite e armazene cinco valores. Em seguida, o
algoritmo deverá exibir os valores na ordem inversa em que foram lidos.
R.:
Program Unidade3_Topico4_Exe1;
const
qtd = 5;
var
valores : array [1..qtd] of real;
i : integer;
Begin
for i := 1 to qtd do
begin
write('Valor 1: ');
readln(valores[i]);
end;
writeln; { Deixa uma linha em branco na tela }
writeln('Valores na ordem inversa:');
for i := qtd downto 1 do
begin
writeln(valores[i]);
end;
End.
75UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
2 Desenvolva um programa que leia 10 números e armazene-os em
um array do tipo vetor. Após a leitura destes números, o algoritmo
deverá solicitar outro número para fazer uma busca.
O programa deverá percorrer os números lidos procurando pelo
“número de busca”. Ao final, o programa deverá exibir quantas
vezes o número de busca está presente no array ou apresentar uma
mensagem informando se o número não está no array.
R.:
Program Unidade3_Topico4_Exe2 ;
const
qtd = 10;
var
numeros : array [1..qtd] of real;
numero_busca : real;
i, qtd_encontrou : integer;
Begin
qtd_encontrou := 0;
for i := 1 to qtd do
begin
write('Numero: ');
readln(numeros[i]);
end;
writeln('Informe um número para busca: ');
readln(numero_busca);
for i := 1 to qtd do
begin
if (numeros[i] = numero_busca) then
begin
qtd_encontrou := qtd_encontrou + 1;
end;
end;
if (qtd_encontrou = 0) then
begin
writeln('O número informado não está no array.');
76 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
end
else
begin
writeln('O número ',numero_busca,' foi encontrado ', qtd_
encontrou, ' vezes no array.');
end;
End.
3 Crie um programa que solicite oito valores e armazene-os em um
array (vetor). O programa, em seguida, deverá ler mais dois valores
(A e B) e apresentar a soma dos valores armazenados nos índices A
e B do array.
R.:
Program Unidade3_Topico4_Exe3;
const
qtd = 8;
var
numeros : array [1..qtd] of real;
numero_busca : real;
i, a, b : integer;
Begin
for i := 1 to qtd do
begin
write('Numero: ');
readln(numeros[i]);
end;
writeln('Informe o primeiro índice: ');
readln(a);
writeln('Informe o segundo índice: ');
readln(b);
writeln('O valor do índice a (',numeros[a],') somado ao valor do
índice b (',numeros[b],') resulta em ', (numeros[a] + numeros[b]));
End.
77UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
4 Faça um programa que leia 10 valores e armazene-os em um array.
O programa deverá ordenar (em ordem crescente) os valores, dentro
do próprio array. Ao final, o programa percorrerá o array e exibirá os
valores na tela, já ordenados.
R.:
Program Unidade3_Topico4_Exe4;
const
qtd = 10;
var
numeros : array [1..qtd] of real;
i, j : integer;
temp : real;
Begin
for i := 1 to qtd do
begin
write('Numero: ');
readln(numeros[i]);
end;
for i := 1 to qtd - 1 do
begin
for j := 1 to qtd - 1 do
begin
if (numeros[j] > numeros[j+1]) then
begin
temp := numeros[j];
numeros[j] := numeros[j+1];
numeros[j+1] := temp;
end;
end;
end;
writeln;
for i := 1 to qtd do
begin
writeln(numeros[i]);
end;
End.
78 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
5 Crie um programa que leia e armazene 10 valores em um array “A”
e mais 10 valores em um array “B”. O programa deverá preencher
um terceiro array onde, nos índices pares, serão armazenados os
valores do array “A”. Nos índices ímpares, deverão ser armazenados
os valores do vetor “B”.
R.:
Program Unidade3_Topico4_Exe5;
const
qtd = 10;
qtd2 = 20;
var
a : array [1..qtd] of real;
b : array [1..qtd] of real;
terceiro : array [1..qtd2] of real;
i, indice_controle : integer;
Begin
writeln('Valores para o array "a"');
for i := 1 to qtd do
begin
write('Valor ',i,': ');
readln(a[i]);
end;
writeln('Valores para o array "b"');
for i := 1 to qtd do
begin
write('Valor ',i,': ');
readln(b[i]);
end;
{ Preenche o terceiro array nos índices pares }
indice_controle := 1; { recebe o primeiro índice que será usado
para o array "a"}
for i := 2 to qtd2 do { Não precisa começar do 1 }
begin
if (i mod 2 = 0) then
begin
terceiro[i] := a[indice_controle];
79UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
indice_controle := indice_controle + 1;
end;
end;
{ Preenche o terceiro array nos índices ímpares }
indice_controle := 1; { recebe o primeiro índice que será usado para
o array "b"}
for i := 1 to qtd2 do
begin
if (i mod 2 <> 0) then
begin
terceiro[i] := b[indice_controle];
indice_controle := indice_controle + 1;
end;
end;
{ Exibe o terceiro array }
for i := 1 to qtd2 do
begin
writeln(terceiro[i]);
end;
End.
6 Desenvolva um programa que preencha uma matriz quadrada 5 x 5.
O programa deverá exibir todos os valores que estão na diagonal
principal da matriz.
R.:
80 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
Program Unidade3_Topico4_Exe6;
const
dimensao = 5;
var
mat : array [1..dimensao, 1..dimensao] of real;
l, c : integer;
Begin
for l := 1 to dimensao do
begin
for c := 1 to dimensao do
begin
write('Valor[',l,',',c,']: '); { Visualmente -> Valor[1,1]:
}
readln(mat[l,c]);
end;
end;
{ Percorre a matriz }
for l := 1 to dimensao do
begin
for c := 1 to dimensao do
begin
{ Se estiver na diagonal, ou seja, se a linha for
igual à coluna }
if (l = c) then
begin
writeln(mat[l,c]);
end;
end;
end;
End.
7 Reescreva o mesmo programa anterior, porém o programa deverá
exibir os valores que estão fora da diagonal principal.
R.:
81UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
Program Unidade3_Topico4_Exe7;
const
dimensao = 3;
var
mat : array [1..dimensao, 1..dimensao] of real;
l, c : integer;
Begin
for l := 1 to dimensao do
begin
for c := 1 to dimensao do
begin
write('Valor[',l,',',c,']: '); { Visualmente-> Valor[1,1]:
}
readln(mat[l,c]);
end;
end;
{ Percorre a matriz }
for l := 1 to dimensao do
begin
for c := 1 to dimensao do
begin
{ Se estiver fora da diagonal, ou seja, se a linha
for diferente da coluna }
if (l <> c) then
begin
writeln(mat[l,c]);
end;
end;
end;
End.
8 Reescreva novamente o programa anterior, modificando-o para que
exiba somente os valores que estão acima da diagonal principal.
R.:
82 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
Program Unidade3_Topico4_Exe8;
const
dimensao = 3;
var
mat : array [1..dimensao, 1..dimensao] of real;
l, c : integer;
Begin
for l := 1 to dimensao do
begin
for c := 1 to dimensao do
begin
write('Valor[',l,',',c,']: '); { Visualmente -> Valor[1,1]:
}
readln(mat[l,c]);
end;
end;
{ Percorre a matriz }
for l := 1 to dimensao do
begin
for c := 1 to dimensao do
begin
{ Se estiver acima da diagonal, ou seja, se a linha
for menor do que a coluna }
if (l < c) then
begin
writeln(mat[l,c]);
end;
end;
end;
End.
83UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
9 Escreva um programa que consiga armazenar uma matriz de até 10 x 10.
No início, o programa solicitará ao usuário que informe a dimensão da
matriz que deseja trabalhar (se ultrapassar 10 x 10, o programa deverá
alertar que não é permitido e solicitar novamente, até que o usuário
informe um valor dentro do permitido). A matriz somente poderá ser
quadrada. Após ler a dimensão, o programa deverá solicitar valores
para preencher a matriz. Depois de preenchida, o programa deverá
exibir todos os valores armazenados na diagonal secundária.
R.:
Program Unidade3_Topico4_Exe8;
const
dimensao_maxima = 10;
var
mat : array [1..dimensao_maxima, 1..dimensao_maxima] of real;
l, c, dimensao : integer;
Begin
write('Qual a dimensão que deseja trabalhar? ');
readln(dimensao);
while (dimensao < 1) or (dimensao > dimensao_maxima) do
begin
write('Esta dimensão não é permitida. Qual a dimensão
que deseja trabalhar? ');
readln(dimensao);
end;
for l := 1 to dimensao do
begin
for c := 1 to dimensao do
begin
write('Valor[',l,',',c,']: '); { Visualmente -> Valor[1,1]:
}
readln(mat[l,c]);
end;
end;
{ o "c" será utilizado para controlar as colunas }
c := dimensao;
84 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
{ Percorre as linhas }
for l := 1 to dimensao do
begin
writeln(mat[l,c]);
{ Diminui a coluna }
c := c - 1;
end;
End.
10 Faça um programa que leia o nome de, no mínimo, três cidades e
armazene-os em um array (vetor). O programa deverá solicitar valores
para alimentar uma matriz onde cada casa da matriz corresponde à
distância entre duas cidades. Exemplo:
Distância em km Blumenau Indaial Timbó
Blumenau 0 20 25
Indaial 20 0 5
Timbó 25 5 0
Pode-se perceber que podemos fazer uma relação entre os índices do vetor
e as linhas e colunas da matriz. Por exemplo: casa 1 x 3 da matriz, onde
está o valor 25, corresponde à distância entre Blumenau (índice 1 do vetor)
e Timbó (índice 3 do vetor).
A matriz contém somente os números correspondentes às distâncias. O vetor
servirá para orientar o usuário, para ele saber qual é a distância que estará
informando.
Quando o programa pedir uma distância, deverá exibir as cidades referentes
a esta distância, por exemplo: “Informe a distância entre Blumenau e Indaial:”.
O programa não deverá:
a) Solicitar a distância entre uma mesma cidade (Blumenau x Blumenau).
b) Solicitar a distância entre duas cidades que já foram informadas. Exemplo:
Após solicitar a distância entre Blumenau e Timbó, o programa não deverá
solicitar a distância entre Timbó e Blumenau, pois a distância será a mesma.
No caso “a)”, o programa deverá preencher, automaticamente, o valor 0 (zero).
No caso “b)”, o programa deverá preencher, automaticamente, o valor já
informado anteriormente, correspondente à distância entre estas duas
cidades.
Após a matriz preenchida, o programa deverá exibir:
a) Quais são as duas cidades mais próximas e qual é a distância entre elas.
b) Quais são as duas cidades mais distantes e qual é a distância entre elas.
85UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
R.:
Program Unidade3_Topico4_Exe10;
const
qtd_max = 10;
var
distancias : array [1..qtd_max, 1..qtd_max] of real;
cidades : array [1..qtd_max] of string;
l, c, qtd_cidade,
linha_mais_proxima, coluna_mais_proxima,
linha_distante, coluna_distante,
linha_mais_distante,
coluna_mais_distante : integer;
Begin
write('Quantidade de cidades: ');
readln(qtd_cidade);
while (qtd_cidade < 1) or (qtd_cidade > qtd_max) do
begin
write('Esta quantidade não é permitida. Quantidade de
cidades: ');
readln(qtd_cidade);
end;
{ Solicita as cidades }
for c := 1 to qtd_cidade do
begin
write('Cidade: ');
readln(cidades[c]);
end;
for l := 1 to qtd_cidade do
begin
for c := 1 to qtd_cidade do
begin
if (l = c) then { Se a cidade for a mesma }
begin
distancias[l,c] := 0;
end
else if (l < c) then { A primeira vez que solicita a
distância entre duas cidades }
86 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
begin
write('Distância entre ',cidades[l],' e ',
cidades[c],': ');
readln(distancias[l,c]);
{ Já coloca a mesma distância para as
cidades no sentido oposto }
distancias[c,l] := distancias[l,c];
end;
end;
end;
{ Para achar as cidades mais próximas, vamos procurar pelo menor
valor.
Ao encontrá-lo, vamos guardar os índices onde está este valor
Para achar as cidades mais distantes, vamos procurar pelo maior
valor.
Ao encontrá-lo, vamos guardar os índices onde está este valor
}
{ Inicia-se assumindo que, tanto as cidades mais próximas, quanto
as mais distantes,
estão na 2a casa da matriz, depois passa a comparar com as
demais,
se encontrar uma distância menor, guarda os índices desta como
sendo a menor,
ao encontrar uma distância maior, guarda os índices desta como
sendo a maior}
linha_mais_proxima := 1;
coluna_mais_proxima := 2; { Não coloca como 1, pois a casa 1,1
sempre vai ser 0 (zero), pois é a mesma cidade }
linha_mais_distante := 1;
coluna_mais_distante := 2; { Não coloca como 1, pois a casa 1,1
sempre vai ser 0 (zero), pois é a mesma cidade }
for l := 1 to qtd_cidade do
begin
for c := 1 to qtd_cidade do
begin
{ Somente verifica se não for a mesma cidade }
if (l <> c) then
87UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
begin
{ Verifica se é a menor distância }
if (cidades[l,c] < cidades[linha_mais_
proxima, coluna_mais_proxima]) then
begin
linha_mais_proxima := l;
coluna_mais_proxima := c;
end;
{ Verifica se é a maior distância }
if (cidades[l,c] > cidades[linha_mais_
distante, coluna_mais_distante]) then
begin
linha_mais_distante := l;
coluna_mais_distante := c;
end;
end;
end;
end;
{ Exibe as cidades e a distância mais curta }
writeln('As cidades mais próximas são ',cidades[linha_
mais_proxima], ' e ', cidades[coluna_mais_proxima], ' e a distância é
',distancias[linha_mais_proxima,coluna_mais_proxima]);
writeln('As cidades mais distantes são ',cidades[linha_mais_distante],
' e ', cidades[coluna_mais_distante],' e a distância é ',distancias[linha_mais_
distante,coluna_mais_distante]);
End.
TÓPICO 5
1 Desenvolva um algoritmo que leia o valor do salário bruto de uma
pessoa e calcule o desconto do imposto de renda segundo os dados
a seguir:
Faixa Salarial Desconto (%)
até 500 Isento
de 500 até 1.500 10%
de 1.500 até 2.500 15%
acima de 2.500 25%
88 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
Enquanto o salário não for 0 (zero), o programa deverá continuar solicitando
salários para calcular o desconto.
Crie um subprograma chamado CalculaDesconto que receba o salário bruto
e retorne o salário líquido calculado.
R.:
Program Unidade3_Topico5_Exe1 ;
var
salario_bruto, salario_liquido : Real;
function CalculaDesconto(salario : Real) : Real;
var
Desconto : Real;
begin
if (salario <= 500) then
begin
Desconto := 0;
end
else if (salario <= 1500) then
begin
Desconto := 10;
end
else if (salario <= 2500) then
begin
Desconto := 15;
end
else
begin
Desconto := 25;
end;
CalculaDesconto := salario - (salario * Desconto / 100);
end;
Begin
write('Salário bruto: ');
readln(salario_bruto);
while (salario_bruto > 0) do
begin
89UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
salario_liquido := CalculaDesconto(salario_bruto);
if (salario_liquido = salario_bruto) then
begin
writeln('Isento');
end
else
begin
writeln('O salário líquido é ', salario_liquido);
end;
write('Salário bruto: ');
readln(salario_bruto);
end;
End.
2 Você faz uma aplicação de “A” reais à taxa de juros “J” constante por
um período de “M” meses. Qual será o montante “T” após o término
da aplicação? Considere o cálculo de juros compostos.
O programa deverá ler os valores A, J e M, enviar estes valores para um
subprograma chamado Calcula, que calculará o montante e retornará
o valor calculado. O programa principal deverá exibir o resultado.
R.:
Program Unidade3_Topico5_Exe2;
var
a, j : Real;
m : Integer;
function Calcula(a, j : Real; m : Integer) : Real;
var
i : Integer;
Montante : Real;
begin
Montante := a; { Começa com o valor aplicado }
for i := 1 to m do
begin
Montante := Montante + (Montante * j / 100);
end;
90 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
Calcula := Montante;
end;
Begin
write('Valor aplicado: ');
readln(a);
write('Taxa de juros: ');
readln(j);
write('Por quantos meses: ');
readln(m);
write('Disponível: R$ ', Calcula(a,j,m));
End.
3 Refaça o programa que lê três valores correspondentes aos possíveis
lados de um triângulo e exibe se pode ser um triângulo ou não. Se
puder, o programa deverá exibir qual é o tipo do triângulo. Se o triângulo
for isósceles ou escaleno, o programa deverá verificar se ele também
é um triângulo retângulo e exibir esta informação ao usuário.
O programa deverá utilizar os seguintes subprogramas:
Triangulo – Subprograma que recebe três medidas e verifica se as medidas
formam um triângulo. O subprograma deve retornar um valor lógico indicando
se as medidas formam um triângulo ou não.
Equilatero – Subprograma que recebe três medidas e verifica se as medidas
formam um triângulo equilátero. O subprograma deve retornar um valor lógico
indicando se as medidas formam um triângulo equilátero ou não.
Isosceles – Subprograma que recebe três medidas e verifica se as medidas
formam um triângulo isósceles. O subprograma deve retornar um valor lógico
indicando se as medidas formam um triângulo isósceles ou não.
Escaleno – Subprograma que recebe três medidas e verifica se as medidas
formam um triângulo escaleno. O subprograma deve retornar um valor lógico
indicando se as medidas formam um triângulo escaleno ou não.
Retangulo – Subprograma que recebe três medidas e verifica se as medidas
formam um triângulo retângulo. O subprograma deve retornar um valor lógico
indicando se as medidas formam um triângulo retângulo ou não.
R.:
91UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
Program Unidade3_Topico5_Exe3;
var
a, b, c : Real;
function Triangulo(a, b, c : Real) : Boolean;
begin
if (a < b + c) and (b < a + c) and (c < a + b) then
begin
Triangulo := true;
end
else
begin
Triangulo := false;
end;
end;
function Equilatero(a, b, c : Real) : Boolean;
begin
if (a = b) and (b = c) then
begin
Equilatero := true;
end
else
begin
Equilatero := false;
end;
end;
function Isosceles(a, b, c : Real) : Boolean;
begin
{ Se a função for executada isoladamente, precisa tratar o terceiro
lado.
Neste exercício, não precisaria. }
if ((a = b) and (a <> c)) or ((a = c) and (a <> b)) or ((b = c) and
(a <> b)) then
begin
Isosceles := true;
end
else
begin
Isosceles := false;
end;
92 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
end;
function Retangulo(a, b, c : Real) : Boolean;
begin
{ Se a função for executada isoladamente, precisa tratar o terceiro
lado }
if (((a*a) = (b*b) + (c*c)) or ((b*b) = (a*a) + (c*c)) or ((c*c) = (a*a) +
(b*b))) then
begin
Retangulo := true;
end
else
begin
Retangulo := false;
end;
end;
Begin
write('Lado a: ');
readln(a);
write('Lado b: ');
readln(b);
write('Lado c: ');
readln(c);
{ Verifica se é triângulo }
if (Triangulo(a,b,c)) then
begin
{ Se todos os lados forem iguais, é equilátero }
if (Equilatero(a,b,c)) then
begin
writeln('O triângulo é Equilátero.');
end
else
begin
{ Se não for equilátero, pode ser isósceles, escaleno
e,
independente disto, pode ser Retângulo }
if (Isosceles(a,b,c)) then
93UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
begin
writeln('O triângulo é Isósceles.');
end
else { Neste caso, não precisaria da função
Escaleno }
begin
writeln('O triângulo é Escaleno.');
end;
{ Verifica se é retângulo }
if (Retangulo(a,b,c)) then
begin
writeln('O triângulo é Retângulo.');
end;
end;
end
else
begin
writeln('As medidas não formam um triângulo.');
end;
End.
4 Um clube fará um recadastramento de todos os seus sócios. Cada
sócio que comparecer no recadastramento passará a pagar um valor
fixo (R$ 300,00) por mês, mais alguns acréscimos, de acordo com o
número de dependentes e o tempo que já é cliente.
Faça um programa que solicite, para cada sócio (não se sabe quantos
sócios aparecerão) a quantidade de dependentes e o tempo que é
cliente (em meses).
A cada sócio, o programa deverá exibir a mensalidade a ser paga, a
quantidade de dependentes e o tempo de cliente.
As regras para recálculo são:
Número de dependentes
Nenhum dependente – desconto de 5% (sobre o valor fixo)
1 dependente – acréscimo de R$ 5,00
2 ou mais dependentes – acréscimo de R$ 10,00
Tempo de cliente
12 meses ou menos – 1% de desconto
13 meses até 47 meses – 3% de desconto
94 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
48 meses ou mais – 8% de desconto
* Este desconto é aplicado sobre o valor da mensalidade já considerando o
desconto ou acréscimo correspondente ao número de dependentes.
Para auxiliar o programa principal, crie os seguintes subprogramas:
Continua – subprograma utilizado para verificar se o usuário deseja ler mais
dadosou parar a leitura. O subprograma deve perguntar se o usuário deseja
continuar, deverá ler a decisão do usuário e retornar um valor indicando se
o usuário deseja continuar ou não. O programa principal deverá utilizar-se
dessa resposta (desse valor) para continuar a solicitar dados ou não.
Dependentes – subprograma que recebe um valor referente ao número de
dependentes e o valor da mensalidade. O subprograma deverá alterar o valor
da mensalidade de acordo com a regra.
Tempo – subprograma que recebe um valor referente ao tempo de cliente
e o valor da mensalidade (já calculado com o número de dependentes). O
subprograma deverá alterar a mensalidade de acordo com a regra.
Exibe – este subprograma recebe o valor da mensalidade calculado, o
número de dependentes e o tempo que o usuário é cliente e exibe estes
valores, semelhante a:
Valor a pagar: 285,2
Dependentes: 2
Tempo: 50 meses
R.:
Program Unidade3_Topico5_Exe4;
const
vl_fixo = 300;
var
qtd_dependentes, tempo_cliente : Integer;
mensalidade : Real;
function Continua : Boolean;
var
resposta : char;
begin
write('Deseja continuar (s/n)? ');
readln(resposta);
if (resposta = 's') or (resposta = 'S') then
Continua := true
else
Continua := false;
end;
95UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
procedure Dependentes(var mens : Real; Dep : Integer);
begin
if (Dep = 0) then
begin
mens := mens - (mens * 5 / 100); { Desconto de 5% }
end
else if (Dep = 1) then
begin
mens := mens + 5; { Acréscimo de 5 reais }
end
else
begin
mens := mens + 10; { Acréscimo de 10 reais }
end;
end;
procedure Tempo(var mens : Real; Tempo : Integer);
var
Desconto : Real;
begin
if (Tempo <= 12) then
begin
Desconto := 1;
end
else if (Tempo <= 47) then
begin
Desconto := 3;
end
else
begin
Desconto := 8;
end;
mens := mens - (mens * Desconto / 100);
end;
procedure Exibe(pagar : real; dep, tempo : integer);
begin
writeln('Valor a pagar: ', pagar);
writeln('Dependentes: ', dep);
writeln('Tempo: ', tempo);
end;
96 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
Begin
while (Continua) do
begin
write('Informe há quantos meses é cliente: ');
readln(tempo_cliente);
write('Quantidade de dependentes: ');
readln(qtd_dependentes);
5 Faça um programa que leia estas informações de vários funcionários:
Salário (utilizar subprograma LerSalario)
Tempo de serviço (utilizar subprograma LerTempo)
Regra 1 - Se o salário for menor que R$ 700,00, o programa deverá solicitar
a quantidade de dependentes que o funcionário possui e deverá adicionar,
ao salário, R$ 9,50 para cada dependente.
Regra 2 - O programa também deverá verificar o tempo de serviço. Se
esse tempo for maior que 1 ano e menor que três anos, o salário deverá ser
acrescido de 0,5%. Se o salário estiver entre 3 anos e menor que 5 anos,
deverá ser acrescido de 1,5%. Se for maior que 5 anos, deverá ser acrescido
de 3%.
Funcionamento:
O programa principal deverá chamar um subprograma para ler o salário
e um subprograma para ler o tempo de serviço (ver especificação destes
subprogramas mais abaixo).
Para saber o valor a ser calculado sobre o número de dependentes, o
programa principal deverá chamar o subprograma ValorDependentes.
Para calcular o acréscimo baseado no tempo de serviço, o programa chamará
o subprograma AcrescimoTempo.
A cada funcionário, o programa deverá exibir o salário acrescido do valor por
dependentes, mais o acréscimo por tempo de serviço.
Definição dos subprogramas:
LerSalario – Subprograma que recebe uma variável para armazenar um
salário, solicita o valor de um salário, lê um valor e armazena o valor lido na
variável recebida.
LerTempo – Subprograma que recebe uma variável para armazenar um valor
inteiro, solicita o valor de tempo em meses, lê um valor e armazena o valor
lido na variável recebida.
ValorDependentes – Subprograma que recebe o valor correspondente
ao salário de um funcionário e verifica se o valor é menor que R$ 700,00.
Se for, o subprograma deverá solicitar a quantidade de dependentes. O
97UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
subprograma deverá calcular R$ 9,50 para cada dependente e devolver esse
valor calculado (Regra 1).
AcrescimoTempo – Subprograma que recebe um valor correspondente a
um tempo de serviço e a um salário, verifica o mesmo e retorna o valor de
acréscimo conforme Regra 2.
R.:
Program Unidade3_Topico5_Exe5;
var
Salario, Acrescimo_por_Dependente : Real;
Tempo_Servico : Integer;
procedure LerSalario(var sal : real);
begin
write('Informe o salário: ');
readln(sal);
end;
procedure LerTempo(var tempo : integer);
begin
write('Informe o tempo de serviço: ');
readln(tempo);
end;
function ValorDependentes(salario : real) : real;
var
dependentes : integer;
begin
if (salario < 700) then
begin
write('Informe a quantidade de dependentes: ');
readln(dependentes);
ValorDependentes := dependentes * 9.5;
end
else { Neste caso, não há acréscimo; retorna zero }
begin
ValorDependentes := 0;
end;
end;
function AcrescimoTempo(tempo : integer; salario : real) : real;
var
98 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
acrescimo : Real;
begin
if (tempo > 5) then
begin
acrescimo := 3;
end
else if (tempo > 3) then
begin
acrescimo := 1.5;
end
else if (tempo > 1) then
begin
acrescimo := 0.5;
end
else
begin
acrescimo := 0;
end;
AcrescimoTempo := salario * acrescimo / 100;
end;
Begin
LerSalario(Salario);
while (Salario > 0) do
begin
LerTempo(Tempo_Servico);
Acrescimo_por_Dependente := ValorDependentes(Salario);
writeln('O salário a receber é R$ ', Salario + Acrescimo_
por_Dependente + AcrescimoTempo(Tempo_Servico, Salario));
LerSalario(Salario);
end;
End.
99UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
TÓPICO 6
1 Cite uma vantagem de utilizar tipos de dados criados pelo
programador. Dê um exemplo.
R.: Exemplo:
var
mat1 : array [1..3,1..4] of real;
mat2 : array [1..3,1..4] of real;
mat3 : array [1..3,1..4] of real;
Isto pode ser substituído por:
Type
matriz : array [1..3,1..4] of real;
var
mat1, mat2, mat3 : matriz;
2 Faça um programa que armazene os dados de, no máximo, 50
pessoas. Tais dados são: Nome, Salário e Idade. Estes dados devem
ser armazenados em uma estrutura de registro.
Após todos os dados armazenados, o programa deverá exibir:
a) o nome da pessoa mais nova
b) o nome da pessoa que possui o salário mais alto, porém somente das
pessoas acima de 30 anos
c) o salário da pessoa mais velha
R.:
100 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
Program Unidade3_Topico6_Exe2;
Type
Registro = Record
Nome : String;
Idade : Integer;
Salario : Real;
end;
var
pessoas : array [1..50] of Registro;
qtd_pessoas, i,
indice_mais_novo,
indice_salario_mais_alto,
indice_mais_velho : Integer;
continua : char;
Begin
{ Índice = 1 significa que inicia-se considerando
a primeira pessoa do array }
indice_mais_novo := 1;
indice_salario_mais_alto := 1;
indice_mais_velho := 1;
qtd_pessoas := 0;
{ Não é utilizado um "for", para melhor controlar a parada }
write('Deseja iniciar? ');
readln(continua);
while (qtd_pessoas <= 50) and (continua = 's') do
begin
qtd_pessoas := qtd_pessoas + 1;
write('Nome: ');
readln(pessoas[qtd_pessoas].Nome);write('Idade: ');
readln(pessoas[qtd_pessoas].Idade);
write('Salário: ');
readln(pessoas[qtd_pessoas].Salario);
101UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
write('Deseja continuar? ');
readln(continua);
end;
{ Percorre o array buscando as respostas }
for i := 1 to qtd_pessoas do
begin
{ Pessoa mais nova }
if (pessoas[i].Idade < pessoas[indice_mais_novo].Idade)
then
begin
indice_mais_novo := i;
end;
{ Salário mais alto, somente das pessoas que possuem
mais de 30 anos }
if (pessoas[i].Idade > 30) then
begin
if (pessoas[i].Salario > pessoas[indice_salario_
mais_alto].Salario) then
begin
indice_salario_mais_alto := i;
end;
end;
if (pessoas[i].Idade > pessoas[indice_mais_velho].Idade)
then
begin
indice_mais_velho := i;
end;
end;
if (qtd_pessoas > 0) then
begin
writeln('A pessoa mais nova chama-se ',pessoas[indice_
mais_novo].Nome);
writeln('A pessoa que possui o salário mais alto chama-se ',
pessoas[indice_salario_mais_alto].Nome);
writeln('A pessoa mais velha recebe R$ ', pessoas[indice_
mais_velho].Salario);
end;
End.
102 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
3 Crie um programa que possa armazenar, em um registro, o nome e
três notas de um aluno. Crie um vetor que possa armazenar estas
informações para até 30 alunos.
O programa deverá solicitar as informações dos alunos e, ao final,
exibir, para cada aluno: o nome, a média e uma mensagem indicando
se está aprovado ou não. A nota para aprovação é 6,5.
R.:
Program Unidade3_Topico6_Exe3;
const qtd_notas = 3;
Type
Registro = Record
Nome : String;
Notas : array [1..qtd_notas] of Real;
end;
var
alunos : array [1..30] of Registro;
qtd_alunos, i, n : Integer;
continua : char;
soma_notas, media : Real;
Begin
qtd_alunos := 0;
write('Deseja iniciar? ');
readln(continua);
while (qtd_alunos <= 30) and (continua = 's') do
begin
qtd_alunos := qtd_alunos + 1;
write('Nome: ');
readln(alunos[qtd_alunos].Nome);
for i := 1 to qtd_notas do
begin
write('Informe a ',i,'ª nota: ');
readln(alunos[qtd_alunos].Notas[i]);
end;
103UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
write('Deseja continuar? ');
readln(continua);
end;
{ Percorre os alunos e informa a média e aprovação }
for i := 1 to qtd_alunos do
begin
{ Para cada aluno, inicializa novamente a soma das notas
}
soma_notas := 0;
for n := 1 to qtd_notas do
begin
soma_notas := soma_notas + alunos[i].Notas[n];
end;
{ Como vai utilizar o valor da média mais de uma vez, é
recomendado
que armazene o valor em variável }
media := soma_notas / qtd_notas;
writeln('Nome: ', alunos[i].Nome);
if (media >= 6.5) then
begin
write('Aprovado ');
end
else
begin
write('Reprovado ');
end;
writeln('com média: ',media);
end;
End.
4 Desenvolva um programa que contenha um registro para armazenar
as seguintes informações: CPF, Nome, Estado civil (1-Solteiro,
2-Casado, 3-Desquitado, 4-Viúvo) e Endereço. O campo Endereço é
formado por outros tipos de dados de Registro, que são: Rua, Número,
Bairro e CEP.
O programa deverá ler e armazenar todos os dados para, no mínimo,
10 pessoas. Ao final, o programa deverá listar todas as pessoas e
seus dados, no seguinte formato:
104 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
João Luiz Correa, CPF: 012.345.567-89, Casado, residente em: Rua
Antônio Blar, 135, bairro Centro, CEP 12654-321
Rogério Mello, CPF: 987.654.321-01, Solteiro, residente em: Rua São
Joaquim, 957, bairro Itoupava, CEP 89765-752
R.:
Program Unidade3_Topico6_Exe4;
const
qtd_min = 3;
qtd_max = 100;
Type
TipoEndereco = record
{ Nr e CEP não precisam ser numéricos, pois não se
utiliza
este tipo de informação pra fazer cálculos }
Rua, Nr, Bairro, CEP : String;
end;
TipoPessoa = record
CPF, { Não precisa ser numérico }
Nome : String;
EstadoCivil : Integer;
Endereco : TipoEndereco;
end;
var
Pessoas : array [1..qtd_max] of TipoPessoa;
i, qtd_pessoa : Integer;
continua : char;
OpcoesEstadoCivil : array [1..4] of String;
Begin
{ Mantendo estas informações em um array, auxilia a exibir
estas informações na tela }
OpcoesEstadoCivil[1] := 'Solteiro';
OpcoesEstadoCivil[2] := 'Casado';
OpcoesEstadoCivil[3] := 'Desquitado';
OpcoesEstadoCivil[4] := 'Viúvo';
105UNIASSELVI
NEAD
GABARITO DAS AUTOATIVIDADES
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
qtd_pessoa := 0;
continua := 's'; { Já comça com 's', pois tem que ter no mínimo 3
pessoas }
while (qtd_pessoa <= qtd_min) or ((qtd_pessoa <= 100) and
(continua = 's')) do
begin
qtd_pessoa := qtd_pessoa + 1;
write('Nome: ');
readln(Pessoas[qtd_pessoa].Nome);
write('CPF: ');
readln(Pessoas[qtd_pessoa].CPF);
writeln('Estado civil: ');
{ Percorre o array para exibir as opções na tela }
for i := 1 to 4 do
begin
writeln(i,' - ',OpcoesEstadoCivil[i]);
end;
readln(Pessoas[qtd_pessoa].EstadoCivil);
writeln('Endereço');
writeln('Rua: ');
readln(Pessoas[qtd_pessoa].Endereco.Rua);
writeln('Número: ');
readln(Pessoas[qtd_pessoa].Endereco.Nr);
writeln('Bairro: ');
readln(Pessoas[qtd_pessoa].Endereco.Bairro);
writeln('CEP: ');
readln(Pessoas[qtd_pessoa].Endereco.CEP);
if (qtd_pessoa >= qtd_min) then
begin
write('Deseja continuar? ');
readln(continua);
end;
end;
for i := 1 to qtd_pessoa do
begin
writeln(Pessoas[i].Nome,
', CPF: ', Pessoas[i].CPF,
', ', OpcoesEstadoCivil[Pessoas[i].EstadoCivil],
', residente em: Rua ',Pessoas[i].Endereco.Rua,
106 GABARITO DAS AUTOATIVIDADES UNIASSELVI
NEAD
A
L
G
O
R
I
T
M
O
S
E
P
R
O
G
R
A
M
A
Ç
Ã
O
', ',Pessoas[i].Endereco.Nr,
', bairro ',Pessoas[i].Endereco.Bairro,
', CEP ', Pessoas[i].Endereco.CEP);
writeln;
end;
End.