Jump to content
Sign in to follow this  
Master_Yoda

Dúvida em exercício

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.... :?

Share this post


Link to post
Share on other sites
Roftone

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.

Share this post


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

Share this post


Link to post
Share on other sites
deathseeker25

Boas,

No código do SLider parece haver algo errado.....Depois de compilar e entrar na janela de execução, o programa pede-me o primeiro e segundo valor, não pede a operação a realizar e dá resultados estranhos no final....

Aqui fica a imagem: http://img99.imageshack.us/img99/1642/programaao5lg.jpg

Espero que de para compreender.....

Share this post


Link to post
Share on other sites
Roftone

É 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;
} 

Share this post


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

Share this post


Link to post
Share on other sites
saramgsilva

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...

Share this post


Link to post
Share on other sites
Gurzi

pode ter o system("PAUSE") desde que utilize a biblioteca adequada (#include <stdlib.h>)

Share this post


Link to post
Share on other sites
Gurzi

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

Share this post


Link to post
Share on other sites
Gurzi

ensina lá isso sff.. então qual é o procedimento para usar isso ? basta compilar e usar o obj ou tens que passar a exe mesmo ?

Share this post


Link to post
Share on other sites
Bruno

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

Share this post


Link to post
Share on other sites
Gurzi

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

Share this post


Link to post
Share on other sites
Bruno

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

Share this post


Link to post
Share on other sites
Gurzi

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

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  

×
×
  • 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.