Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Mendes324

Programa em C de Temperaturas com pequeno menu(opiniao)

Mensagens Recomendadas

Mendes324

Boas,estou a postar este programa devido a querer uma opiniao de programadores mais experientes.

Estou neste momento no 1º ano do curso proficional de programação e queria saber dicas para melhorar.

Obrigado e boa programaçao

#include <stdio.h>
#include <stdlib.h>

#define TAM 12

void mostra(int temp[])
{
     int i;
     int a=1;
     for(i=0;i<TAM;i++)
     {
         printf("temperatura do mes %d:%d\n",a,temp[i]);
         a++;
     }
}

void procura(int temp[],int valor)
{
     int i;
     int a=1;
     int existe=0;
     for(i=0;i<TAM;i++)
     {
         if(temp[i]==valor)
         {
            printf("\n\nTemperatura Encontrada!\n\n\nTemperatura do mes %d:%d\n\n",a,temp[i]);
            existe=1;
         }  
         a++;     
     }
     if(existe==0)
         printf("temperatura nao encontrada!!!");
}

int media(int temp[])
{
    int i;
    int soma=0;
    int media=0;
    for(i=0;i<TAM;i++)
       soma=temp[i]+soma;
    media=soma/TAM;
}
    
int maior(int temp[])
{
    int i;
    int maior=0;
    for(i=0;i<TAM;i++)
    {
        if(temp[i]>maior)
            maior=temp[i];
    }
    return maior;
}

int menor(int temp[])
{
    int i;
    int menor=1000;
    for(i=0;i<TAM;i++)
    {
        if(temp[i]<menor)
            menor=temp[i];
    }
    return menor;
}

int amplitude(int temp[])
{
    int amplitude=0;
    amplitude=maior(temp)-menor(temp);
    return amplitude;
}
    
  
main()
{
  int i;
  int valor;
  int opcao=0;
  int temp[TAM];
  for(i=0;i<TAM;i++)
  {
      printf("Introduza as temperaturas anuais\n");
      scanf("%d",&temp[i]);
  }
  do
  {
     printf("\n"); 
     printf("    -----------------------------------------------------------\n"); 
     printf("   |1-Mostrar todos os valores de temperaturas registados      |\n");
     printf("   |2-Pesquizar a ocorrencia de uma temperatura                |\n");
     printf("   |3-Media da temperatura anual                               |\n");
     printf("   |4-Temperatura mais elevada                                 |\n");
     printf("   |5-Temperatura mais baixa                                   |\n");
     printf("   |6-Amplitude termica                                        |\n ");
     printf("  |7-Sair                                                     |\n");
     printf("    -----------------------------------------------------------\n"); 
     printf("    opcao:");
     scanf("%d",&opcao);
     
     switch(opcao)
     {
          case 1:mostra(temp);break;
               
          case 2:printf("Introduza a temperatura a procurar");
                 scanf("%d",&valor);
                 procura(temp,valor);break;
               
          case 3:printf("media:%d\n",media(temp));break;
               
          case 4:printf("Temperatura mais elevada:%d\n",maior(temp));break;
               
          case 5:printf("Temperatura mais baixa:%d\n",menor(temp));break;
               
          case 6:printf("Amplitude Temica:%d\n",amplitude(temp));break;
               
          case 7:printf("A encerrar o programa...ate breve!!!\n");break;    
     }
  }
  while(opcao!=7);                 
  system("PAUSE");	

}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Se utilizasses ficheiros ficava melhor. Mas estás em concreto a pedir que tipo de ajuda? Queres opinião sobre o quê?

p.s. Diz-se profissional  :)


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Mendes324

pois isso profissionalXD

queria saber se quem ja frequentou um curso de linguagem C, ja deveria saber fazer programas mais avançados do que esses

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Eu nunca frequentei um curso de C porque estou no 10º ano em ciencias e tecnologias mas é obvio que existem programas muito mas muito mais complexos que esse. 

Se ainda estás no 1º ano é natural que ainda não faças programas muito complicados, por exemplo, aí podias ter trabalhado com ficheiros, visto que as temperaturas não vão ficar gravadas em lado nenhum e não vais poder usá-las mais tarde.

Existem muitas coisas que podias ter adicionado aí. No entanto, o programa está bem organizado.

Só mais uma pequena observação. Cria uma função para o menú senão fica um bocadinho feio esse main  :)


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
softklin

Nas funções maior e menor, podes usar o primeiro valor do array para as comparações, em vez de usares os valores 0 e 1000 (útil em situações em que não sabes os limites dos números contidos num array por exemplo). Depois resta-te comparar com os restantes (a começar na 2ª posição).

Na tua função procura, pareceu-me que querias encontrar se uma temperatura existia ou não. Se for esse o caso (apenas uma temperatura), então podes terminar aí a procura. Imagina o pior caso, em que tens 1000 temperaturas, e a que tu queres está logo na 1ª posição. A função iria percorrer todo o array, quando logo à partida já encontrou o que querias. Podes mandar a mensagem, e terminar a execução do ciclo nessa prte, com a instrução 'break'.

De resto não testei, mas ficam duas pequenas dicas para melhorar o teu programa.


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Cynary

softclean: Se reparares bem, a função imprime mais do que uma temperatura, logo a tua última sugestão não teria efeito.

Quando trabalhas com menus, convém usares funções/macros para cada opção (que incluem, por exemplo neste caso o printf()), de forma a que no futuro seja mais fácil alterá-las, sem ficares com um switch feio xD

Além disso, um bug no teu programa é, como foi mencionado por softclean, a temperatura máxima e mínima.

Exemplo: Imagina que tinhas em todos os meses temperaturas abaixo de 0, ou acima de mil. Nesse caso, o teu programa daria, respectivamente o máximo de 0 e o mínimo de 1000, que está errado (o de 0 pode estar certo se considerares como graus Kelvin para a temperatura, mas o 1000 estaria sempre errado).

Um reparo final: retira o comando: system("pause");

Presumo que estejas a trabalhar com windows ... bom, esse comando não é universal, e não necessitas para pausar o programa. Se queres mesmo pausar o programa, usa um scanf ou fgets/gets sem argumentos, que já é universal.

Para finalizar, acho que a forma como separas as strings (muitos \n), e como o input vem logo após ao output, sem nenhum espaço, fica um pouco feia, podes melhorar isso facilmente.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
softklin

softclean: Se reparares bem, a função imprime mais do que uma temperatura, logo a tua última sugestão não teria efeito.

É verdade, realmente até faz mais sentido procurar todas as ocorrências de uma temperatura, e não apenas uma, não cheguei a olhar para o menu para ver esse pormenor.


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.