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
, 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
e
).
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
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.
b. Armazene as temperaturas em uma matriz
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
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:
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
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
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
epara j de 1 até 7
. - Dentro, usamos
repita … até
para validar que a temperaturaesteja entre e . - 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
.
Passo 6
Criamos o procedimento
mostrarRelatorio
:- Para cada cidade
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
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
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
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
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
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
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)
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 > e cod <
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
fimAlgoritmo
caso 1:
cadastrarCidades()
caso 2:
registrarTemperaturas()
caso 3:
mostrarRelatorio()
caso 4:
escreva("Código da cidade (1-4): ")
leia(cod)
se cod >
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
fimAlgoritmo