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

Master_Yoda

Dúvida em exercício

19 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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;
} 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pode ter o system("PAUSE") desde que utilize a biblioteca adequada (#include <stdlib.h>)

pois, não sei...nunca usei o system("PAUSE")...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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")

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

uso o cmd e trab la, executo la os programas em vez de usar o icon do dev-c++ pra executar... :?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

sim é isso mesmo... não tive necessidade de aprender outra forma, porque quando tive a estudar, fazia programas uns atrás dos outros, e era só mudar o nome...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link 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