Jump to content
Fórum Script Brasil
  • 0

Programa com formula de fisica


vjunior

Question

Olá to precisando de uma ajuda em um trabalho pra quem manja em C é o seguinte não estou conseguindo encaixar a formula corretamente de velocidade media quem pode me ajuda aê agradeço desde de já.

8) Faça um programa que seja capaz de resolver problemas de Física, ou seja,

Movimento Uniforme - MU.

Entrada: O usuário deverá entrar com duas informações das três possíveis, ou seja:

a velocidade (km/h ou m/s), o tempo gasto (min,seg,hora) num percurso e/ou o

espaço percorrido (m ou km).

Crítica: As duas informações dadas pelo usuário devem ser maiores que ZERO.

Lembre-se: Há três informações para esses tipos de problemas, conforme acima. A

que não for informada, é a

que deverá ser calculada.

a) Use MENUS para mostrar as opções que o programa oferece, ou seja:

B) Calcular o espaço percorrido e fazer as devidas conversões com as unidades de

medida;

c) Calcular o tempo gasto num percurso e fazer as devidas conversões com as

unidades de medida;

d) Calcular a velocidade média e fazer as devidas conversões com as unidades de

medida;

e) A resposta do espaço percorrido deverá ser obtida em km ou m, o usuário

escolhe.

f) A resposta do tempo gasto deverá ser obtida em h ou min, o usuário escolhe.

g) A resposta da velocidade média deverá ser obtida em km/h ou m/s, o usuário

escolhe.

h) Use e funções.

Link to comment
Share on other sites

14 answers to this question

Recommended Posts

  • 0

Queria só uma ajuda sobre as funções tipo montei so o menu, e to tentando chamar a função pelo switch case.

do{

printf("\n ********** MENU **********\n");

printf("\n 1 - Calcular o espaço percorrido e fazer as devidas conversões com as unidades de medida");

printf("\n 2 - Calcular o tempo gasto num percurso e fazer as devidas conversões com as unidades de medida");

printf("\n 3 - Calcular a velocidade média e fazer as devidas conversões com as unidades de medida");

printf("\n 4 - Sair\n");

printf("\n # Digite o numero da opcao desejada: ");

scanf("%d",&op);

Link to comment
Share on other sites

  • 0

e cade o switch?

Uma maneira de se fazer é colocar o switch dentro do do-while.

do{
    printf("\n ********** MENU **********\n");
    printf("\n 1 - Calcular o espaço percorrido e fazer as devidas conversões com as unidades de medida");
    printf("\n 2 - Calcular o tempo gasto num percurso e fazer as devidas conversões com as unidades de medida");
    printf("\n 3 - Calcular a velocidade média e fazer as devidas conversões com as unidades de medida");
    printf("\n 4 - Sair\n");
    printf("\n # Digite o numero da opcao desejada: ");
    scanf("%d",&op);

    if(op<1 || op>4)
        continue;

    switch(op){
        case 1:
               ...comandos...
        break;

        case 2:
               ...comandos...
        break;

        case 3:
               ...comandos...
        break;
    }

} while(op != 4);

Link to comment
Share on other sites

  • 0

estou tentando fazer por função dentro do switch a chamada pra ler as variaveis por exemplo, eu calculo a velocidade media e deixo o valor gravado de velocidade media e faço o calculo do espaço percorrido e do tempo com o uso das funções alguém poderia me ajudar com um exemplo com uma função com ponteiro?

qualquer ajuda será bem vinda!

#include<stdio.h>

#include<stdlib.h>

#include<conio.h>

void LeTempo(float tmp);

void LeVelocidadeMedia(float vm);

void LeSpaco(float esp);

float ConverSpaco(float esA, float esB);

float ConverTempo(float tmA, float tmB);

float CalculaVm(float esp, float tmp);

float CalculaS(float vm, float tmp);

float CalculaT(float vm, float esp);

int main(){

float tmp, esA, esB;

float vm, esp, tmA;

float tmB;

int t, op, m;

do{

printf("\n ********************************** MENU *****************************************************\n");

printf("\n 1 - Calcular o espaço percorrido e fazer as devidas conversões com as unidades de medida");

printf("\n 2 - Calcular o tempo gasto num percurso e fazer as devidas conversões com as unidades de medida");

printf("\n 3 - Calcular a velocidade média e fazer as devidas conversões com as unidades de medida");

printf("\n 4 - Sair\n");

printf("\n # Digite o numero da opcao desejada: ");

scanf("%d",&op);

system("cls");

if(op<1 || op>4)

continue;

switch(op){

case 1:

break;

case 2:

break;

case 3:

printf("\ndigite o espaco percorrido");

scanf("%f", &esp);

setbuf(stdin,NULL);

printf("\nQual a unidade de medida"

"\n1. Km"

"\n2. Metros");

scanf("%f", &t);

setbuf(stdin,NULL);

printf("%f", LeTempo(tmp));

//scanf("%f", &tempo);

setbuf(stdin,NULL);

printf("\nQual a unidade de medida"

"\n1. Horas"

"\n2. Minutos"

"\n3. Segundos");

scanf("%f", &m);

setbuf(stdin,NULL);

printf("%fkm/h", CalculaVm(esp, tmp));

break;

}

} while(op != 4);

system("pause");

getchar();

return(0);

}

void LeTempo(float tmp){

printf("Digite o tempo gasto: ");

scanf("%f", &tmp);

}

void LeVelocidadeMedia(float vm){

printf("Digite a velocidade media: ");

scanf("%f", &vm);

}

void LeSpaco(float esp){

printf("Digite o espaco percorrido: ");

scanf("%f", &esp);

}

float ConverSpaco(float esA, float esB){

}

float ConverTempo(float tmA, float tmB){

}

float CalculaVm(float esp, float tmp){

float VM;

VM=(esp/tmp);

return(VM);

}

float CalculaS(float vm, float tmp){

}

Link to comment
Share on other sites

  • 0

Cara consegui fazer isso alguém ae pode me ajudar com as funções como posso colocar elas e como devo chamar as funções PF GENTE

#include<stdio.h>

#include<stdlib.h>

#include<conio.h>

float LeTempo(float tmp);

void LeVelocidadeMedia(float vm);

void LeSpaco(float esp);

float ConverSpaco(float esA, float esB);

float ConverTempo(float tmA, float tmB);

float CalculaVm(float esp, float tmp);

float CalculaS(float vm, float tmp);

float CalculaT(float vm, float esp);

int main(){

int hs, min, seg; //TEMPO

int km, mt, op; // ESPAÇO

int k_h, m_s; //TRANSFORMAÇÃO DE ESPAÇO

int op2, op3, op4;

float velocidade, tempo, espaco;

do{

printf("\n===================Menu======================="

"\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"

"\n1. calculo da velocidade media"

"\n2. calcular espaco percorrido "

"\n3. calcular tempo gasto "

"\n4. sair"

"\n" );

scanf("%d",&op);

system("cls");

if(op<1 || op>4)

continue;

switch(op){

case 1:

printf("\nDigite o espaco percorrido");

scanf("%f", &espaco);

setbuf(stdin,NULL);

while(op2<1 || op2>2){

printf("\nQual a unidade de medida? "

"\n1- Km"

"\n2- Metros"

"\n");

scanf("%d", &op2);

}

//while(op2<0 || op2>2); //mexendo

setbuf(stdin,NULL);

printf("\nDigite o tempo gasto");

scanf("%f", &tempo);

setbuf(stdin,NULL);

while(op3<1 || op3>3){

printf("\nQual a unidade de medida? "

"\n1- Horas "

"\n2- Minutos "

"\n3- Segundos "

"\n");

scanf("%d", &op3);

}

setbuf(stdin,NULL);

while(op4<1 || op4>2){

printf("\nQual a forma da resposta?"

"\n1- Km/h"

"\n2- m/s"

"\n");

scanf("%d", &op4);

setbuf(stdin,NULL);

}

break;

case 2:

break;

case 3:

break;

}

} while(op != 4);

getchar();

return(0);

}

float LeTempo(float tmp){

printf("Digite o tempo gasto: ");

scanf("%f", &tmp);

}

void LeVelocidadeMedia(float vm){

printf("Digite a velocidade media: ");

scanf("%f", &vm);

}

void LeSpaco(float esp){

printf("Digite o espaco percorrido: ");

scanf("%f", &esp);

}

float ConverSpaco(float esA, float esB){

}

float ConverTempo(float tmA, float tmB){

float t

switch(t)

case 1:

}

float CalculaVm(float esp, float tmp){

float VM;

VM=(esp/tmp);

return(VM);

}

float CalculaS(float vm, float tmp){

}

Link to comment
Share on other sites

  • 0

É realmente necessário colocar cada leitura de dados em uma função?

Isso torna o código bem ilegível, e complica muito um algoritmo fácil.

Ao postar um código, utilize as tags 'CODE' do fórum. E sempre idente seu código.

Sobre o código, você tem uns ponto-e-vírgula faltando, uns abre-chaves sem fecha-chaves, uns erros de funções (por exemplo, um switch com variável float. Switch deve receber um inteiro).

O que eu recomendo...

Faça três funções apenas.

1º: Função do menu

int menu();
Apenas exibe o menu, e retorna o inteiro que corresponde á opção que o usuário quer. 2º: Função de E/S
void entrSaid(int opcao, float *valor1, float *valor2);
Recebe a opção (o que o usuário quer calcular), e dois ponteiros, que correspondem aos dois valores a serem entrados. Por receber por referência as variáveis a serem completadas, não é necessário retornar nada. 3º: Função de cálculo
float calculo(int opcao, float valor1, float valor2);

Recebe a opção, pois é a mesma que irá definir qual será o cálculo. Também recebe os valores a serem utilizados no cálculo, e retorna o float, que é o resultado.

Isso irá facilitar e muito.

Link to comment
Share on other sites

  • 0

QUERIA SABER COMO FAZ PRO USUARIO não ENTRAR COM Zero se alguém poder colocar ae pra mim eu agradeço

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

float CalculaVm(float esp, float tmp);
float CalculaS(float vm, float tmp);
float CalculaT(float esp, float vm);

int main(){
    int hs, min, seg;   //TEMPO
    int km, mt, op;    // ESPAÇO
    int k_h, m_s;      //TRANSFORMAÇÃO DE ESPAÇO
    int op2, op3, op4;
    float velocidade, tempo, espaco;
  while(op<1 || op>4){
    printf("\n===================Menu======================="
           "\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"
           "\n1. calculo da velocidade media"
           "\n2. calcular espaco percorrido "
           "\n3. calcular tempo gasto       "
           "\n4.  para sair " 
           "\n" ); 
           
    scanf("%d",&op);
    setbuf(stdin,NULL);
       
}
          

    switch(op){
        case 1:
              printf("\nDigite o espaco percorrido em Km");
              scanf("%f", &espaco);
              setbuf(stdin,NULL);
                printf("\nDigite o tempo gasto em Horas");
                scanf("%f", &tempo);
                setbuf(stdin,NULL);
           
            while(op2<1 || op2>2){     
                printf("\nQual a forma da resposta?"
                     "\n1- Km/h"
                     "\n2- m/s"
                     "\n");
                scanf("%d", &op2);
                setbuf(stdin,NULL);
                }
                switch(op2){
                    case 1:
                          printf("\n%.2f Km/h", CalculaVm(espaco, tempo));
                          getchar();  
                          setbuf(stdin,NULL);  
                    break;
                    
                    case 2:
                          printf("\n%.2f m/s", CalculaVm(espaco, tempo)/3.6);        
                          getchar();  
                          setbuf(stdin,NULL);  
                    break;        
                            }
                                           
        break;

        case 2:
               printf("\nDigite velocidade media em Km/h ");
               scanf("%f", &velocidade);
               setbuf(stdin,NULL);
               printf("\nDigite o tempo gasto em Horas");
               scanf("%f", &tempo);
               setbuf(stdin,NULL);
               
               
               while(op2<1 || op2>2){     
                printf("\nQual a forma da resposta?"
                     "\n1- Km"
                     "\n2- metros"
                     "\n");
                scanf("%d", &op2);
                setbuf(stdin,NULL);
                }
                switch(op2){
                    case 1:
                          printf("\n%.2f Km", CalculaS(velocidade, tempo));
                          getchar();  
                          setbuf(stdin,NULL);  
                    break;
                    
                    case 2:
                          printf("\n%.2f metros", CalculaS(velocidade, tempo)*1000);        
                          getchar();  
                          setbuf(stdin,NULL);  
                    break;        
                    }
                          
               
               
               
        break;

        case 3:
              printf("Digite a velocidade media em Km/h");
              scanf("%f", &velocidade);
              setbuf(stdin,NULL);
              printf("Digite o espaco percorrido em Km ");
              scanf("%f", &espaco);
              setbuf(stdin,NULL);
              
              while(op2<1 || op2>3){     
                printf("\nQual a forma da resposta?"
                     "\n1- HORAS"
                     "\n2- MINUTOS"
                     "\n3- SEGUNDOS"
                     "\n");
                scanf("%d", &op2);
                setbuf(stdin,NULL);
        
                
                }
                switch(op2){
                    case 1:
                          printf("\n%.2f HORAS", CalculaT(espaco, velocidade));
                          getchar();  
                          setbuf(stdin,NULL);  
                    break;
                    
                    case 2:
                          printf("\n%.2f MINUTOS", CalculaT(espaco, velocidade)*60);        
                          getchar();  
                          setbuf(stdin,NULL);  
                    break;        
                    
                    case 3:
                          printf("\n%.2f SEGUNDOS ", CalculaT(espaco, velocidade)*3600);        
                          getchar();  
                          setbuf(stdin,NULL);  
                    break;        
                    }
              
        break;
    }


    
 printf("Operacao realizada com sucesso!");   
 getchar();   
 return(0);   
    
    
        }

                      

float CalculaVm(float esp, float tmp){
       float VM;
          VM=(esp/tmp);
          return(VM);
      
}
float CalculaS(float vm, float tmp){
      float SP;
        SP=(vm*tmp);
        return(SP);
                     
}
float CalculaT(float esp, float vm){
      float T;
        T=(esp/vm);
        return(T);      
}

Link to comment
Share on other sites

  • 0

Opa, Entrar com zero a onde? se for no inicio do programa( no menu) coloquei um "if" logo abaixo do main para testar a opção escolhida.Caso for menor do que 1 e maior do que 4, dá uma mensagem na tela, e fecha o programa.

Teu codigo alterado depois do menu.

int main(){
    int hs, min, seg;   //TEMPO
    int km, mt, op;    // ESPAÇO
    int k_h, m_s;      //TRANSFORMAÇÃO DE ESPAÇO
    int op2, op3, op4;
    float velocidade, tempo, espaco;
  while(op<1 || op>4){
    printf("\n===================Menu======================="
           "\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"
           "\n1. calculo da velocidade media"
           "\n2. calcular espaco percorrido "
           "\n3. calcular tempo gasto       "
           "\n4.  para sair "
           "\n" );
          
    scanf("%d",&op);
    setbuf(stdin,NULL);
     

       if (op < 1 || op > 4)
    {
      printf("Opcao Invalida\n");
      system("pause");
      exit(0);
    }    
       
}
Agora se , não poderá entrar com zero em alguma das opções escolhida pelo usuario, como "espaço percorrido", "tempo em horas"... faça a mesma coisa, que eu fiz anteriormente, use um "if" e teste a variavel.. Exemplo:
switch(op){
        case 1:
              printf("\nDigite o espaco percorrido em Km");
              scanf("%f", &espaco);
              setbuf(stdin,NULL);
            
               if (&espaço == 0 || &espaço < 0){
               
                     //comandos;
               }
              
                printf("\nDigite o tempo gasto em Horas");
                scanf("%f", &tempo);
                setbuf(stdin,NULL);

                 if (&tempo == 0 || &espaço < 0){
               
                     //comandos;
                 }
              
                ............

Edited by Prog_Junior
Link to comment
Share on other sites

  • 0

Opa, faça conforme expliquei anteriormente... faça um "if (comando de condição) para testar sua variavel. Conforme ultimo "post".

Logo após o usuario digitar o valor correspondente, teste esse valor, se for "zero", faça seus comandos;

Senão for zero, continue seu algoritimo.

Link to comment
Share on other sites

  • 0

Agradeço a ajuda de voces gente e o programa ficou assim, poderia ter saido melhor mais não consegui se alguém conseguir editar alguma coisa me avisa ae que eu gostaria de poder revisar o meu programa também

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


float CalculaVm(float esp, float tmp);
float CalculaS(float vm, float tmp);
float CalculaT(float esp, float vm);


int main(){
    int hs, min, seg;   //TEMPO
    int km, mt, op;    // ESPAÇO
    int k_h, m_s;      //TRANSFORMAÇÃO DE ESPAÇO
    int op2, op3, op4;
    float velocidade, tempo, espaco;
    while(op<1 || op>4){
    printf("\n===================Menu======================="
           "\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"
           "\n1. calculo da velocidade media"
           "\n2. calcular espaco percorrido "
           "\n3. calcular tempo gasto       "
           "\n4.  para sair " 
           "\n" ); 
           scanf("%d",&op);
           setbuf(stdin,NULL);       
                        }        
    switch(op){
        case 1:
              
              printf("\nDigite o espaco percorrido em Km = ");
              scanf("%f", &espaco);
              setbuf(stdin,NULL);
        if (espaco == 0 || espaco < 0){
              
                         printf("DIGITE UM NUMERO MAIOR QUE ZERO!\n");
                         printf("\nTENTE NOVAMENTE DO COMECO!\n");
                         system("pause");
                         exit(0);
                                               }        
              
                         printf("\nDigite o tempo gasto em Horas = ");
                         scanf("%f", &tempo);
                         setbuf(stdin,NULL);
        if(tempo == 0|| tempo < 0){
                         printf("DIGITE UM NUMERO MAIOR QUE ZERO!\n");
                         printf("\nTENTE NOVAMENTE DO COMECO!\n");
                         system("pause");
                         exit(0);
                                           }
           
        while(op2<1 || op2>2){     
                          printf("\nQual a forma da resposta?"
                          "\n1- Km/h"
                          "\n2- m/s"
                          "\n");
                          scanf("%d", &op2);
                          setbuf(stdin,NULL);
                             }
        switch(op2){
                    case 1:
                          printf("\n%.2f Km/h", CalculaVm(espaco, tempo));
                          getchar();  
                          setbuf(stdin,NULL);
                    break;
                    
                    case 2:
                          printf("\n%.2f m/s", CalculaVm(espaco, tempo)/3.6);        
                          getchar();  
                          setbuf(stdin,NULL);  
                    break;        
                 }
            
                               
        break;

        case 2:
               printf("\nDigite velocidade media em Km/h = ");
               scanf("%f", &velocidade);
               setbuf(stdin,NULL);
                         if(velocidade == 0|| velocidade < 0){
                         printf("DIGITE UM NUMERO MAIOR QUE ZERO!\n");
                         printf("\nTENTE NOVAMENTE DO COMECO!\n");
                         system("pause");
                         exit(0);}
               printf("\nDigite o tempo gasto em Horas = ");
               scanf("%f", &tempo);
               setbuf(stdin,NULL);
                         if(tempo == 0|| tempo < 0){
                         printf("DIGITE UM NUMERO MAIOR QUE ZERO!\n");
                         printf("\nTENTE NOVAMENTE DO COMECO!\n");
                         system("pause");
                         exit(0);}
               
               
        while(op2<1 || op2>2){     
                printf("\nQual a forma da resposta?"
                "\n1- Km"
                "\n2- metros"
                "\n");
                scanf("%d", &op2);
                setbuf(stdin,NULL);
                                    }
                switch(op2){
                    case 1:
                          printf("\nRESPOSTA = %.2f Km", CalculaS(velocidade, tempo));
                          getchar();  
                          setbuf(stdin,NULL);  
                    break;
                    
                    case 2:
                          printf("\nRESPOSTA = %.2f metros", CalculaS(velocidade, tempo)*1000);        
                          getchar();  
                          setbuf(stdin,NULL);  
                    break;        
                           }
               
               
                    break;

                    case 3:
                   
                         printf("Digite o espaco percorrido em Km = ");
                         scanf("%f", &espaco);
                         setbuf(stdin,NULL);
                     if(espaco == 0|| espaco < 0){
                         printf("DIGITE UM NUMERO MAIOR QUE ZERO!\n");
                         printf("\nTENTE NOVAMENTE DO COMECO!\n");
                         system("pause");
                         exit(0);}
                         printf("Digite a velocidade media em Km/h = ");
                         scanf("%f", &velocidade);
                         setbuf(stdin,NULL);
                     if(velocidade == 0|| velocidade < 0){
                         printf("DIGITE UM NUMERO MAIOR QUE ZERO!\n");
                         printf("\nTENTE NOVAMENTE DO COMECO!\n");
                         system("pause");
                         exit(0);}
              
                    while(op2<1 || op2>3){     
                         printf("\nQual a forma da resposta?"
                         "\n1- HORAS"
                         "\n2- MINUTOS"
                         "\n3- SEGUNDOS"
                         "\n");
                         scanf("%d", &op2);
                         setbuf(stdin,NULL);        
                                          }                                         
                switch(op2){
                    case 1:
                          printf("\nRESPOSTA = %.2f HORAS", CalculaT(espaco, velocidade));
                          getchar();  
                          setbuf(stdin,NULL);  
                    break;
                                        
                    case 2:
                          printf("\nRESPOSTA = %.2f MINUTOS", CalculaT(espaco, velocidade)*60);        
                          getchar();  
                          setbuf(stdin,NULL);  
                    break;
                                                
                    case 3:
                          printf("\nRESPOSTA = %.2f SEGUNDOS ", CalculaT(espaco, velocidade)*3600);        
                          getchar();  
                          setbuf(stdin,NULL);  
                    break;        
                            }
              
        break;
    }
    
 printf("\nOPERACAO REALIZADA COM SUCESSO!");   
 getchar();   
 return(0);
          }                    
                      
float CalculaVm(float esp, float tmp){
       float VM;
          VM=(esp/tmp);
          return(VM);
      
}
float CalculaS(float vm, float tmp){
      float SP;
        SP=(vm*tmp);
        return(SP);
                     
}
float CalculaT(float esp, float vm){
      float T;
        T=(esp/vm);
        return(T);      
}

Link to comment
Share on other sites

  • 0

if (espaco == 0 || espaco < 0){
Nesses casos (verificação de uma variável), faça sem o ||...
if (espaco <= 0){
Sobre essa verificação pra saber se o usuário digitou zero... Prefira um laço 'do-while'. Ele executa no mínimo uma vez, e dependendo do valor da variável de controle, pode ou não ser executado mais vezes... Um exemplo:
do{
        printf("Digite um valor: ");
        scanf("%f", &valor);
} while(valor <= 0);
Ou seja, se o usuário digitar um número maior que zero, executa apenas uma vez. Ao contrário, executa até o usuário digitar um valor válido. Você também pode colocar um aviso para o usuário...
do{
        printf("Digite um valor: ");
        scanf("%f", &valor);
        if(valor <= 0)
               printf("Digite apenas valores maiores que zero.\n");
} while(valor <= 0);

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652.1k
×
×
  • Create New...