Master_Yoda Posted July 1, 2005 at 05:12 PM Report #1539 Posted July 1, 2005 at 05:12 PM 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 compilerExecuting 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.... :?
Roftone Posted July 2, 2005 at 04:31 PM Report #1552 Posted July 2, 2005 at 04:31 PM 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.
Master_Yoda Posted July 3, 2005 at 11:01 AM Author Report #1564 Posted July 3, 2005 at 11:01 AM 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..
deathseeker25 Posted July 3, 2005 at 11:24 AM Report #1565 Posted July 3, 2005 at 11:24 AM 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.....
Roftone Posted July 3, 2005 at 03:12 PM Report #1576 Posted July 3, 2005 at 03:12 PM É 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; }
febra Posted July 4, 2005 at 06:32 PM Report #1661 Posted July 4, 2005 at 06:32 PM É 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...
saramgsilva Posted August 15, 2005 at 02:49 PM Report #2965 Posted August 15, 2005 at 02:49 PM 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... www.saramgsilva.com As minhas apps no WP7 Marketplace Youtube : Galinho - Windows Phone 7.5
Gurzi Posted August 15, 2005 at 02:58 PM Report #2966 Posted August 15, 2005 at 02:58 PM pode ter o system("PAUSE") desde que utilize a biblioteca adequada (#include <stdlib.h>)
saramgsilva Posted August 15, 2005 at 03:01 PM Report #2968 Posted August 15, 2005 at 03:01 PM pode ter o system("PAUSE") desde que utilize a biblioteca adequada (#include <stdlib.h>) pois, não sei...nunca usei o system("PAUSE")... www.saramgsilva.com As minhas apps no WP7 Marketplace Youtube : Galinho - Windows Phone 7.5
Gurzi Posted August 15, 2005 at 03:03 PM Report #2969 Posted August 15, 2005 at 03:03 PM 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")
saramgsilva Posted August 15, 2005 at 03:15 PM Report #2972 Posted August 15, 2005 at 03:15 PM uso o cmd e trab la, executo la os programas em vez de usar o icon do dev-c++ pra executar... :? www.saramgsilva.com As minhas apps no WP7 Marketplace Youtube : Galinho - Windows Phone 7.5
Gurzi Posted August 15, 2005 at 03:21 PM Report #2974 Posted August 15, 2005 at 03:21 PM 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 ?
Bruno Posted August 15, 2005 at 03:25 PM Report #2976 Posted August 15, 2005 at 03:25 PM 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 😛
Gurzi Posted August 15, 2005 at 03:27 PM Report #2977 Posted August 15, 2005 at 03:27 PM 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
saramgsilva Posted August 15, 2005 at 03:29 PM Report #2978 Posted August 15, 2005 at 03:29 PM 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... www.saramgsilva.com As minhas apps no WP7 Marketplace Youtube : Galinho - Windows Phone 7.5
Bruno Posted August 15, 2005 at 03:30 PM Report #2979 Posted August 15, 2005 at 03:30 PM Eu acho que ainda não percebeste bem o que faz um compilador! 😛 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
Gurzi Posted August 15, 2005 at 03:33 PM Report #2980 Posted August 15, 2005 at 03:33 PM 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
Bruno Posted August 15, 2005 at 03:36 PM Report #2982 Posted August 15, 2005 at 03:36 PM Ainda bem que percebeste 😛 :P
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now