Jump to content

Recommended Posts

Posted

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

Posted

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

Posted

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;



} 
Posted

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

Posted

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

Posted

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;


}   
}
Posted

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?

Posted

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

Posted

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!

Posted

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.

Posted

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?

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