Baixe o app para aproveitar ainda mais
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]
Compartilhar