Logo Passei Direto
Buscar

Gabarito das Autoatividades de Algoritmos e Programação

Ferramentas de estudo

Questões resolvidas

Qual é a origem da palavra “algoritmo”?

Qual é a diferença básica entre “dado” e “informação”?

O que é uma pseudolinguagem?

Na área da informática, como se costuma chamar as pessoas que utilizam um programa?

Quais são as regras básicas para compor o nome de um identificador?

Cite 3 "tipos de dados" e dê 2 exemplos, para cada tipo de dado citado, de valores que se podem armazenar em cada tipo.

Um “operador de atribuição” serve para atribuir o quê?

O que significa “declarar um identificador”?

Para que serve o ponto e vírgula em um algoritmo escrito em portugol?

Explique o operador aritmético “mod”.

O que faz (verifica) a seguinte expressão: X <> 10?

para que serve o comando Escreva?

Para que serve o comando Leia?

Para que servem os comentários? Dê um exemplo do seu uso.

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.

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.

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.

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.

Faça um algoritmo que leia um número e informe se ele é menor que zero, se ele é maior que zero ou se ele é o próprio valor zero.

Desenvolva um algoritmo que leia um número inteiro e informe se o número é par ou é ímpar.

Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Questões resolvidas

Qual é a origem da palavra “algoritmo”?

Qual é a diferença básica entre “dado” e “informação”?

O que é uma pseudolinguagem?

Na área da informática, como se costuma chamar as pessoas que utilizam um programa?

Quais são as regras básicas para compor o nome de um identificador?

Cite 3 "tipos de dados" e dê 2 exemplos, para cada tipo de dado citado, de valores que se podem armazenar em cada tipo.

Um “operador de atribuição” serve para atribuir o quê?

O que significa “declarar um identificador”?

Para que serve o ponto e vírgula em um algoritmo escrito em portugol?

Explique o operador aritmético “mod”.

O que faz (verifica) a seguinte expressão: X <> 10?

para que serve o comando Escreva?

Para que serve o comando Leia?

Para que servem os comentários? Dê um exemplo do seu uso.

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.

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.

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.

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.

Faça um algoritmo que leia um número e informe se ele é menor que zero, se ele é maior que zero ou se ele é o próprio valor zero.

Desenvolva um algoritmo que leia um número inteiro e informe se o número é par ou é ímpar.

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) falso
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 um nú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.');
 Fimsenã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ício 
 DescontoTotal <- 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 resolveudoar 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 um 
vetor. 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 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_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
NEAD
GABARITO 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 deboas 
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çao 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 
dados ou 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.

Mais conteúdos dessa disciplina