Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
Mendes324

Programa em C de Temperaturas com pequeno menu(opiniao)

Recommended Posts

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");	

}

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.