frog Posted June 29, 2006 at 06:26 PM Report #35523 Posted June 29, 2006 at 06:26 PM Ola, como ainda estou no principio de C fiz um programa bem basico uma calculadora para adicionar e para subtrair, em que vcs carregam 1 para advionar e 2 para subtrair o problema e que se eu carregar 1 ou 2 vao os dois para adcionar, vcs sao a minha unica ajuda, como ainda nao tenho a disciplina de Informatica , vou parendendo pela net e por livros aqui vai o codigo: #include <stdio.h> #include <stdlib.h> float a , b; char ch; int main() { printf("ola, escolha um numero\n<1> para soma\n<2> para subtracçao\n >> "); scanf("%c" , &ch); if (ch=1) { printf(">>"); scanf("%f" , &a); printf(">>"); scanf("%f" , &; printf("O resultado e: %.2f" , a+; printf("\nBy JoAoZaO"); } if (ch=2); { printf(">>"); scanf("%f" , &a); printf(">>"); scanf("%f" , &; printf("O resultado e: %.2f" , a-b); } printf("\nBy JoAoZaO"); system("pause>nul") ; return 0; } P,S-Peço desculpa, mas nao percebi como se usa o GeSHi
entering Posted June 29, 2006 at 07:08 PM Report #35533 Posted June 29, 2006 at 07:08 PM char ch; ......... .... printf("ola, escolha um numero\n<1> para soma\n<2> para subtracçao\n >> "); scanf("%c" , &ch); bem se vais ler o 1 ou 2 recomendo o uso de um inteiro em vez de caracter if (ch=1) a igualdade em c é == e nao =, o caracter = esta reservado para a atribuiçao printf("\nBy JoAoZaO"); visto que em qualquer caso vai aparecer porque nao por a seguir aos if's?! ou seja antes do system bem ch==1 ja nao pode ser 2 logo usa um else if usar o system("pause"); para parar o programa é uma estupidez pois compremete a portabilidade espero ter ajudado
frog Posted June 29, 2006 at 07:34 PM Author Report #35541 Posted June 29, 2006 at 07:34 PM Obrigado , fiz o que me disseste e deu certo, e decidi por as funçoes de multiplicar e dividir e voltou a dar o mesmo problema! eu so ponho o system("pause"), pq assim logo qe a calculadora der o resultado fecha logo o prog e nem da tempo para ler o resultado! bem o codigo e o seguinte, espero que me ajudem... #include <stdio.h> #include <stdlib.h> float a , b; char ch; int main() { printf("ola, escolha um numero\n<1> para soma\n<2> para subtracçao\n<3> para multiplicacao\n<4> para divisao\n >> "); scanf("%c" , &ch); if (ch==1); { printf(">>"); scanf("%f" , &a); printf(">>"); scanf("%f" , &b); printf("O resultado e: %.2f" , a+b); printf("\nBy JoAoZaO"); } if (ch==2); { printf(">>"); scanf("%f" , &a); printf(">>"); scanf("%f" , &b); printf("O resultado e: %.2f" , a-b); } if (ch==3); { printf(">>"); scanf("%f" , &a); printf(">>"); scanf("%f" , &b); printf("O resultado e: %.2f" , a*b); } if (ch==4); { printf(">>"); scanf("%f" , &a); printf(">>"); scanf("%f" , &b); printf("O resultado e: %.2f" , a/b); } printf("\nBy JoAoZaO"); system("pause>nul") ; return 0; }
Warrior Posted June 29, 2006 at 07:37 PM Report #35542 Posted June 29, 2006 at 07:37 PM não se colocam ; na linha do if.
entering Posted June 29, 2006 at 07:43 PM Report #35543 Posted June 29, 2006 at 07:43 PM já para não falar char ch; em vez de int ch; visto que depois so vai armazenar inteiros ao ler les com %i em vez de %c
frog Posted June 29, 2006 at 07:56 PM Author Report #35545 Posted June 29, 2006 at 07:56 PM Obrigado, que erro mais estupido(o das ";" e odo "char"...tenho uma nova duvida, esta calculadora so serve para fazer um calculo, e depois tem que se fechar e voltar a abrir, como e que eu faço para dar para fazer varios calculos, eu acho que tenho que usar o "for" mas nao sei como...
Warrior Posted June 29, 2006 at 07:59 PM Report #35548 Posted June 29, 2006 at 07:59 PM o for é um ciclo no qual conheces o numero de iterações. Neste caso, o que mais se adequa é um while. while (ch!='0') { ... } de modo que ele vai repetir sempre o menu até ser escolhida a opção 0. ainda não falaram nisso mas eu refiro, se estás a fazer um menu, e com diversas opções, um "switch.. case" será o mais indicado em vez desses ifs todos
frog Posted June 29, 2006 at 08:11 PM Author Report #35551 Posted June 29, 2006 at 08:11 PM poia mas eu ja tentei com switch...case e nao consegui. o que devo por no no while?
Saco Posted June 30, 2006 at 03:07 PM Report #35654 Posted June 30, 2006 at 03:07 PM no while põe como já disseram... while(ch! = '0') { /* O código todo que já tens... */ } Outras notas que me parecem interessantes: - É uma boa prática declarar as variáveis internamente em vez de teres só variáveis globais, portanto deves declará-las dentro da main, e não fora. - Como já foi aqui dito várias vezes, se estás a ler números seria melhor a variável ch ser do tipo int em vez de char. - Se optares pelo char, tens que ter em conta que para comparares com 1, 2, 3 etc, tens que usar plicas, portanto em vez de (ch == 1) deves usar (ch == '1'). - Como também já foi dito, já que tens tantos ifs, era uma boa ideia usares um switch...case. Aqui fica o teu programa alterado para switch...case e com o while: #include <stdio.h> #include <stdlib.h> int main() { float a , b; char ch='-' ; /* inicializar a variavel ch com um valor qualquer, desde que seja diferente de '0' para nao dar problemas ao entrar no while */ while(ch != '0') { printf("ola, escolha um numero\n<1> para soma\n<2> para subtracçao\n<3> para multiplicacao\n<4> para divisao\n<0> para terminar \n>> "); scanf("%c" , &ch); swith(ch) { case '1' : { printf(">>"); scanf("%f" , &a); printf(">>"); scanf("%f" , &b); printf("O resultado e: %.2f" , a+b); break; } case '2': { printf(">>"); scanf("%f" , &a); printf(">>"); scanf("%f" , &b); printf("O resultado e: %.2f" , a-b); break; } case '3': { printf(">>"); scanf("%f" , &a); printf(">>"); scanf("%f" , &b); printf("O resultado e: %.2f" , a*b); break; } case '4': { printf(">>"); scanf("%f" , &a); printf(">>"); scanf("%f" , &b); printf("O resultado e: %.2f" , a/b); break; } default: { /* Aqui podes meter uma mensagem de erro que apareça caso seja escolhida uma hipotese inexistente, por exemplo: */ printf("Opcao invalida!!\n"); break; } } printf("\nBy JoAoZaO"); system("pause>nul") ; return 0; } }
frog Posted June 30, 2006 at 03:34 PM Author Report #35660 Posted June 30, 2006 at 03:34 PM Obrigado pelo esclareciento e por te deres dado ao trabalho de pores aqui um codigo! Comprei um livro de C que disseram que era melhor para iniciantes que se chama Linguagem C de Luis Damas, conhecem no?
Warrior Posted June 30, 2006 at 03:38 PM Report #35661 Posted June 30, 2006 at 03:38 PM Sim, e é muito bom para quem quer começar (opinião pessoal claro) Sem tentar complicar muito, habitua-te a estruturar o código. #include <stdio.h> void somar() { float a,b; system("cls"); printf(">>"); scanf("%f",&a); printf(">>"); scanf("%f",&b); printf("O resultado e: %.2f\n",a+b); system("pause"); } void subtrair() { float a,b; system("cls"); printf(">>"); scanf("%f",&a); printf(">>"); scanf("%f",&b); printf("O resultado e: %.2f\n",a-b); system("pause"); } void multiplicar() { float a,b; system("cls"); printf(">>"); scanf("%f",&a); printf(">>"); scanf("%f",&b); printf("O resultado e: %.2f\n",a*b); system("pause"); } void dividir() { float a,b; system("cls"); printf(">>"); scanf("%f",&a); printf(">>"); scanf("%f",&b); printf("O resultado e: %.2f\n",a/b); system("pause"); } void fim() { system("cls"); printf("By JoAoZaO\n"); system("pause"); } int main() { int ch; //inicializar a variavel ch com um valor qualquer, desde que seja diferente de '0' para nao dar problemas ao entrar no while while(ch!=0) { system("cls"); printf("ola, escolha um numero\n<1> para soma\n<2> para subtracçao\n<3> para multiplicacao\n<4> para divisao\n<0> para terminar \n>> "); scanf("%d",&ch); switch(ch) { case 1: somar(); break; case 2: subtrair(); break; case 3: multiplicar(); break; case 4: dividir(); break; case 0: fim(); } } return 0; } (sim, compromete-se portabilidade recorrendo ao system, mas não me parece que ele vá transformar aquilo num grande programa que necessita de correr em todos os sistemas operativos e mais alguns. Windows para ele chega.)
frog Posted June 30, 2006 at 07:27 PM Author Report #35714 Posted June 30, 2006 at 07:27 PM Obrigado, por me responderes.Realmente esse codigo e muito melhor! Mas porque e que eu devo usar esse codigo? Habituo-me melhor á logica? Aqueles comandos system("..."), sao os comandos de batch? Este livro e o melhor que eu comprei e mesmo muito bom, para quem ta a iniciar , eu acho o melhor!
Warrior Posted June 30, 2006 at 08:18 PM Report #35720 Posted June 30, 2006 at 08:18 PM Sim, o comando "system" chama um comando da consola. Pause não existe em Linux por exemplo. Ou então assim #include <stdio.h> float somar(float a,float b) { return a+b; } float subtrair(float a,float b) { return a-b; } float multiplicar(float a,float b) { return a*b; } float dividir(float a,float b) { return a/b; } void fim() { system("cls"); printf("By JoAoZaO\n"); } int main() { int ch; //inicializar a variavel ch com um valor qualquer, desde que seja diferente de '0' para nao dar problemas ao entrar no while float a,b; while(ch!=0) { system("cls"); printf("ola, escolha um numero\n<1> para soma\n<2> para subtracçao\n<3> para multiplicacao\n<4> para divisao\n<0> para terminar \n>> "); scanf("%d",&ch); if ((ch>0) && (ch<=4)) { system("cls"); printf(">>"); scanf("%f",&a); printf(">>"); scanf("%f",&b); } switch(ch) { case 1: printf("O resultado e: %.2f\n",somar(a,b)); break; case 2: printf("O resultado e: %.2f\n",subtrair(a,b)); break; case 3: printf("O resultado e: %.2f\n",multiplicar(a,b)); break; case 4: printf("O resultado e: %.2f\n",dividir(a,b)); break; case 0: fim(); } system("pause"); } return 0; } ou mais pequeno #include <stdio.h> void fim() { system("cls"); printf("By JoAoZaO\n"); } int main() { int ch; //inicializar a variavel ch com um valor qualquer, desde que seja diferente de '0' para nao dar problemas ao entrar no while float a,b; while(ch!=0) { system("cls"); printf("ola, escolha um numero\n<1> para soma\n<2> para subtracçao\n<3> para multiplicacao\n<4> para divisao\n<0> para terminar \n>> "); scanf("%d",&ch); if ((ch>0) && (ch<=4)) { system("cls"); printf(">>"); scanf("%f",&a); printf(">>"); scanf("%f",&b); } switch(ch) { case 1: printf("O resultado e: %.2f\n",a+b); break; case 2: printf("O resultado e: %.2f\n",a-b); break; case 3: printf("O resultado e: %.2f\n",a*b); break; case 4: printf("O resultado e: %.2f\n",a/b); break; case 0: fim(); } system("pause"); } return 0; } Há varias formas de fazer a mesma coisa. Neste momento "faz-te bem" ler varias formas de programar, para te habituares a várias formas de pensar.
frog Posted June 30, 2006 at 09:13 PM Author Report #35728 Posted June 30, 2006 at 09:13 PM Eu sei que e bom, mas...Ainda nao parendi muito bem funçoes, quando aprender vou tentar modificar esta calculadora! Entao quer dizer que com esse system("...") posso tipo apagar ficheiros e criar, e editar, tal como faria no prompt?
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