Jump to content

Dúvida em exercício


Master_Yoda
 Share

Recommended Posts

Master_Yoda

Boa tarde programadores,

Tenho aqui uma dúvida num exercício que estou a fazer dum livro que comprei para aprender a programar em C..

Exercício: Escreva um programa que dados dois valores e um operando, imprima o resultado da respectiva operação. As operações são a adição, a subtracção, a multiplicação e a divisão, a que correspondem os caracteres +,-,*,/ respectivamente.

E eu elaborei o seguinte código:

int main()
{   
   int n1,n2,num;
   char oper;

   printf("\nInsira o primeiro numero: ");
   scanf("%d",&n1);
   printf("\nInsira o seguno numero: ");
   scanf("%d",&n2);
   printf("\nInsira a operação a efectuar (+,-,*,/): ");
   scanf("%c",&oper);

   if(oper=="+"){
               n1+n2=num;
               scanf("%d",&num);
               }
   if(oper=="-"){
               n1-n2=num;
               scanf("%d",&num);
               }
   if(oper=="*"){
               n1*n2=num
               scanf("%d",&num);
               }
   if(oper=="/"){
               n1/n2=num
               scanf("%d",&num)
               }

               printf("\nOs valores %d e %d em conjunto com a operação desejada originamo numero %d.",&n1,&n2,&num);

               system("PAUSE");

               }

E dá-me os seguintes erros depois de compilar:

Compiler: Default compiler

Executing g++.exe...

g++.exe "C:\C projects\calculo valores (n1 e n2).cpp" -o "C:\C projects\calculo valores (n1 e n2).exe" -I"C:\Dev-Cpp\include\c++\3.3.1" -I"C:\Dev-Cpp\include\c++\3.3.1\mingw32" -I"C:\Dev-Cpp\include\c++\3.3.1\backward" -I"C:\Dev-Cpp\lib\gcc-lib\mingw32\3.3.1\include" -I"C:\Dev-Cpp\include" -L"C:\Dev-Cpp\lib"

C:/C projects/calculo valores (n1 e n2).cpp: In function `int main()':

C:/C projects/calculo valores (n1 e n2).cpp:17: error: ISO C++ forbids

comparison between pointer and integer

C:/C projects/calculo valores (n1 e n2).cpp:18: error: non-lvalue in assignment

C:/C projects/calculo valores (n1 e n2).cpp:21: error: ISO C++ forbids

comparison between pointer and integer

C:/C projects/calculo valores (n1 e n2).cpp:22: error: non-lvalue in assignment

C:/C projects/calculo valores (n1 e n2).cpp:25: error: ISO C++ forbids

comparison between pointer and integer

C:/C projects/calculo valores (n1 e n2).cpp:27: error: non-lvalue in assignment

C:/C projects/calculo valores (n1 e n2).cpp:27: error: syntax error before `('

token

C:/C projects/calculo valores (n1 e n2).cpp:29: error: ISO C++ forbids

comparison between pointer and integer

C:/C projects/calculo valores (n1 e n2).cpp:31: error: non-lvalue in assignment

C:/C projects/calculo valores (n1 e n2).cpp:31: error: syntax error before `('

token

C:/C projects/calculo valores (n1 e n2).cpp:38:18: warning: no newline at end of file

Execution terminated

Ajuda precisa-se.... :?

Link to comment
Share on other sites

Além das atribuições estarem todas mal feitas (são sempre feitas da direita para a esquerda), daí­, provavelmente a utilização do scanf("%d",&num) para guardar o resultado, e haver falta de ';' (todas as linhas de código, com excepção dos ciclos e dos if e else, apesar de haver casos particulares de ciclos com ';' no fim, têm ';' no final) esse programa até poderia funcionar com estas correcções mas é muito mais eficiente se for usado um switch ... case como o SLider3 fez. De qualquer maneira estás no bom caminho mas tens de ver melhor as atribuições.

Link to comment
Share on other sites

Master_Yoda

Eu sei que seria mais eficiente utilizando a expressão switch, mas isso vem pedido no exercício seguinte que por acaso o SLider3 já me resolveu no post dele....

No entanto, vou fazer as correcções de que falas e posto já o código aqui...

Obrigado pela ajuda..

Link to comment
Share on other sites

É estranho porque acabei de testar isso e funciona bem.

Eu fazia uma coisa mais assim:

int main()
{  
   int n1,n2,num;
   char oper;

   printf("\nInsira o primeiro numero: ");
   scanf(" %d",&n1);
   printf("\nInsira o seguno numero: ");
   scanf(" %d",&n2);
   do{
       printf("\nInsira a operação a efectuar (+,-,*,/): ");
       scanf(" %c",&oper);
   }while(oper!='+' && oper!='-' && oper!='*' && oper!='/');

   switch(oper) {
       case '+' : num=n1+n2; break;
       case '-' : num=n1-n2; break;
       case '*' : num=n1*n2; break;
       case '/' : num=n1/n2; break;
   }


   printf("\nOs valores %d e %d em conjunto com a operação \"%c\" originam o numero %d.\n",n1,n2,oper,num);

   system("PAUSE");
   return 0;
} 
Link to comment
Share on other sites

É estranho porque acabei de testar isso e funciona bem.

Eu fazia uma coisa mais assim:

int main()
{  
   int n1,n2,num;
   char oper;

   printf("\nInsira o primeiro numero: ");
   scanf(" %d",&n1);
   printf("\nInsira o seguno numero: ");
   scanf(" %d",&n2);
   do{
       printf("\nInsira a operação a efectuar (+,-,*,/): ");
       scanf(" %c",&oper);
   }while(oper!='+' && oper!='-' && oper!='*' && oper!='/');

   switch(oper) {
       case '+' : num=n1+n2; break;
       case '-' : num=n1-n2; break;
       case '*' : num=n1*n2; break;
       case '/' : num=n1/n2; break;
   }


   printf("\nOs valores %d e %d em conjunto com a operação \"%c\" originam o numero %d.\n",n1,n2,oper,num);

   system("PAUSE");
   return 0;
} 

sim este parece-me bem tive a ver e acho que está bom e faz o que desejavas, podes ainda por o código mais pequeno tipo...

int main()
{
   int n1,n2,num;
   char oper;

   printf("\nInsira dois numeros: ");
   scanf(" %d\n%d",&n1,&n2);

   do{
       printf("\nQual a operação que deseja efectuar (+,-,*,/): ");
       scanf(" %c",&oper);
   }while(oper!='+' && oper!='-' && oper!='*' && oper!='/');

   switch(oper) {
       case '+' : num=n1+n2; break;
       case '-' : num=n1-n2; break;
       case '*' : num=n1*n2; break;
       case '/' : num=n1/n2; break;
   }

   printf("\nOs valores %d e %d em conjunto com a operação \"%c\" originam o numero %d.\n",n1,n2,oper,num);

   getch();
} 

Pa só fiz uma pequena alteração de resto ta muito fixe...

Link to comment
Share on other sites

Também testei o programa, e está tudo ok...bem eu retirei a parte:

 system("PAUSE");
return 0;

e pareceu funcionar bem...aconselhava-te era a fazer uma função para efectuares a operação... e no main chamava a função operação... era melhor no sentido em que se tiveres a fazer um programa longo, e mais fácil de corrigir erros... e mesmo para se ler...

Link to comment
Share on other sites

como fazes então em windows para a console não se fechar automaticamente ?

Eu em Pascal usava o famoso readln ou o while n0t keypressed :X

desconheço qualquer outra função no C além do system("Pause")

Link to comment
Share on other sites

Hmmm... qd compilas crias o exe... basta depois acederes pela cmd (menu iniciar, executar, "cmd") à pasta onde foi criado o exe e corres colocando o seu nome na linha de comandos :P

Link to comment
Share on other sites

pensava que o exe só era criado quando carregava em executar e não mal fazia o compile...

pensava que o cmd fazia esse processo através quando gravas o source em *.c

Link to comment
Share on other sites

Eu acho que ainda não percebeste bem o que faz um compilador! :P

Se ele compila o teu código e o traduz para algo que o processador saiba correr onde ficaria tal tradução?

Em relação à tua 2ª frase não percebi nada! O cmd é a linha de comandos do windows e pouco tem haver com o devc++!

PS: Post de resposta ao Gurzi

Link to comment
Share on other sites

i know o que é cmd é por aí que sempre necessito alguma coisa do velhinho Dos , é a forma que utilizo para tal.

também sei que que o compilador passa de linguagem de programação para uma linguagem que o processador reconhece chamada "binária" , e já reparei que construi mal o meu raciocinio visto que mal fazemos compile é verdade como tu disseste e bem tem que ficar armazenada em algum lado a tradução para linguagem máquina, obrigado

Link to comment
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
 Share

×
×
  • Create New...

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.