Questão Prática: Controle de Temperaturas Semanais em Cidades

Enunciado:
Crie um algoritmo em Portugol (VisualG) que armazene e analise as temperaturas registradas em 4 cidades ao longo de 7 dias da semana. O sistema deve permitir o cadastro dos nomes das cidades, o registro das temperaturas diárias e fornecer estatísticas úteis sobre os dados.

Requisitos:

a. Armazene os nomes das 4 cidades em um vetor.
b. Armazene as temperaturas em uma matriz 4 \times 7, onde cada linha representa uma cidade e cada coluna representa um dia da semana.
c. Crie um procedimento para cadastrar os nomes das cidades.
d. Crie um procedimento para registrar as temperaturas de cada cidade em cada dia (validar para aceitar apenas temperaturas entre -50^{\circ} \mathrm{C} e 60^{\circ} \mathrm{C} ).
e. Crie uma função que calcule a temperatura média semanal de uma cidade específica.
f. Crie uma função que calcule a temperatura média geral do país.
g. Crie um procedimento para mostrar um relatório com o nome da cidade, temperaturas por dia e a média da semana.
h. Implemente um menu de opções com as seguintes funcionalidades:
1 - Cadastrar Cidades
2 - Registrar Temperaturas
3 - Mostrar Relatório Semanal de Temperaturas por Cidade
4 - Mostrar Média Semanal de uma Cidade
5 - Mostrar Média Geral das Temperaturas
0 - Sair do Sistema

Validações e Regras:

  • As temperaturas devem estar entre -50 e 60 graus Celsius.
  • Ao escolher uma cidade por código, o usuário deve digitar de 1 a 4 .
  • Após cada operação, o menu deve reaparecer.
  • Caso a opção escolhida seja inválida, o sistema deve exibir: “Opção inválida!”

Conceitos Trabalhados:

Conceito Aplicação
Vetores Nomes das cidades
Matrizes Temperaturas por cidade e dia
Procedimentos Cadastro, entrada de dados, exibição
Funções Cálculo de média por cidade e geral
Validações Temperaturas dentro do intervalo permitido
Repetição Menu com repita...até
Condicional Controle do menu, verificação de código

Passo 1

O enunciado pede um algoritmo em Portugol (VisualG) para gerenciar temperaturas de 4 cidades ao longo de 7 dias. Vamos usar:
  • Um vetor de 4 posições para armazenar os nomes das cidades.
  • Uma matriz 4\times7 para armazenar as temperaturas.
  • Procedimentos para cadastrar cidades, registrar temperaturas e mostrar relatórios.
  • Funções para calcular a média semanal de uma cidade e a média geral.
  • Um laço de repetição para exibir o menu até o usuário escolher sair.

Passo 2

Criamos o procedimento cadastrarCidades que percorre o vetor de nomes e lê cada cidade:
  • Laço para i de 1 até 4.
  • leia(cidades[i]) para armazenar o nome.

Passo 3

Criamos o procedimento registrarTemperaturas que preenche a matriz:
  • Laço duplo para i de 1 até 4 e para j de 1 até 7.
  • Dentro, usamos repita … até para validar que a temperatura t esteja entre -50 e 60.
  • Se inválida, exibimos mensagem e repetimos a leitura.

Passo 4

Criamos a função mediaCidade(cod: inteiro): real:
  • Soma todos os valores da linha cod da matriz.
  • Retorna a soma dividida por 7.

Passo 5

Criamos a função mediaGeral(): real:
  • Soma todos os elementos da matriz.
  • Retorna a soma dividida por 4\times7=28.

Passo 6

Criamos o procedimento mostrarRelatorio:
  • Para cada cidade i de 1 a 4:
  • Exibe o nome.
  • Percorre os 7 dias exibindo cada temperatura formatada.
  • Chama mediaCidade(i) e exibe a média semanal.

Passo 7

Implementamos o menu principal com repita … até opc = 0:
  • Exibimos as opções de 0 a 5.
  • Usamos escolha opc para chamar o procedimento ou função correspondente.
  • Validamos código de cidade (1–4) e opção de menu, exibindo mensagens de erro quando inválido.
  • Opção 0 finaliza o laço e encerra o programa.

Resposta

algoritmo “ControleTemperaturas”
var
cidades: vetor[1…4] de caractere
temp: vetor[1…4,1…7] de real
opc, cod: inteiro
media: real
procedure cadastrarCidades()
var i: inteiro
inicio
para i de 1 ate 4 faca
escreva("Digite nome da cidade ", i, ": ")
leia(cidades[i])
fimPara
fimProcedure
procedure registrarTemperaturas()
var i, j: inteiro
t: real
inicio
para i de 1 ate 4 faca
para j de 1 ate 7 faca
repita
escreva("Temp. da cidade ", i, ", dia ", j, ": ")
leia(t)
se t < -50 ou t > 60 entao
escreval(“Temperatura inválida! Deve estar entre -50 e 60.”)
fimSe
ate nao(t < -50 ou t > 60)
temp[i,j] <- t
fimPara
fimPara
fimProcedure
function mediaCidade(cod: inteiro): real
var s: real
j: inteiro
inicio
s <- 0
para j de 1 ate 7 faca
s <- s + temp[cod,j]
fimPara
retorno s / 7
fimFunction
function mediaGeral(): real
var s: real
i, j: inteiro
inicio
s <- 0
para i de 1 ate 4 faca
para j de 1 ate 7 faca
s <- s + temp[i,j]
fimPara
fimPara
retorno s / 28
fimFunction
procedure mostrarRelatorio()
var i, j: inteiro
m: real
inicio
para i de 1 ate 4 faca
escreval("Cidade: “, cidades[i])
para j de 1 ate 7 faca
escreval(” Dia ", j, “: “, temp[i,j]:6:2)
fimPara
m <- mediaCidade(i)
escreval(” Média semanal: “, m:6:2)
escreval(”---------------------------”)
fimPara
fimProcedure
inicio
repita
escreval(“Menu:”)
escreval(“1- Cadastrar Cidades”)
escreval(“2- Registrar Temperaturas”)
escreval(“3- Mostrar Relatório Semanal de Temperaturas por Cidade”)
escreval(“4- Mostrar Média Semanal de uma Cidade”)
escreval(“5- Mostrar Média Geral das Temperaturas”)
escreval(“0- Sair do Sistema”)
escreva("Opção: ")
leia(opc)
escolha opc
caso 1:
cadastrarCidades()
caso 2:
registrarTemperaturas()
caso 3:
mostrarRelatorio()
caso 4:
escreva("Código da cidade (1-4): ")
leia(cod)
se cod > =1 e cod < =4 entao
media <- mediaCidade(cod)
escreval("Média da cidade ", cidades[cod], ": ", media:6:2)
senao
escreval(“Código inválido!”)
fimSe
caso 5:
media <- mediaGeral()
escreval("Média geral do país: ", media:6:2)
caso 0:
escreval(“Saindo…”)
outrocaso
escreval(“Opção inválida!”)
fimescolha
ate opc =0
fimAlgoritmo

Exercícios relacionados