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.