1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Operações de Calculo em C - Dúvida

Discussão em 'Programação' iniciada por JemanPT, 23 de Setembro de 2007. (Respostas: 14; Visualizações: 5747)

  1. Boas,

    Estou a tirar um curso e, neste momento, estamos a dar C...
    O prof. deu-nos o seguinte desafio para o fim-de-semana:
    "Elaborar um código em C que leia dois números inteiros, uma operação e escreva qual o resultado. Tenham em atenção que não é possível dividir por ZERO."


    Pois bem, para introduzir os numeros, pus:

    int a, b;
    scanf(“%i %i”,&a, &b);

    para os calculos, usei a função switch case:
    switch case (op) {
    case ‘+’:
    cout << a + b;
    break;
    ... etc

    Para a condição usei if (b==0)

    Mas para alem de me dar erro, acho que falta aqui qualquer coisa... como é que o programa sabe qual a operação a fazer?

    A borrada que fix até agora foi:

    #include <stdio.h>
    #include <stdlib.h>

    int main(int argc, char *argv[])
    {
    int a, b;
    prinf(" qual o numero a \n");
    scanf("%d", &a);
    printf(" o numero introduzido e: \n", &a);
    if(b==0) {
    printf("Nao pode dividir por: %i\n",b);
    }
    switch case (op) {
    case '+':
    cout << a + b;
    break;
    case '-':
    cout << a - b;
    break;
    case 'x':
    cout << a * b;
    break;
    case '/':
    cout << a / b;
    break;
    }
    system("PAUSE");
    return 0;
    }


    Quem me puder ajudar... ;) Obrigado
     
  2. Baderous

    Baderous Banido

    Código:
    #include <stdio.h>
    int main() {
        int a,b,r;
        char op;
        printf("Introduza o valor de a: ");
        scanf("%d",&a);
        printf("Introduza o valor de b: ");
        scanf("%d",&b);
        fflush(stdin);
        printf("Indique a operacao a efectuar ( + , - , * , / ): ");
        op=getchar();
        switch (op) {
               case '+': r=a+b;
                         break;
               case '-': r=a-b;
                         break;
               case '*': r=a*b;
                         break;
               case '/': if (b==0) {
                            printf("Erro: Divisao por zero!\n");    
                            getchar();getchar();                       
                            return 0;                                        
                            }
                         else {   
                         r=a/b;
                         break;}
               default: printf("Operador errado!!\n");
               }
        printf("%d%c%d=%d\n",a,op,b,r);       
        system("PAUSE");
        return 0;
    }
    Usei aqueles 2 getchar() seguidos do return 0, porque não estava a conseguir resolver o problema da divisão por zero. Eu tinha
    Código:
    if (b==0) {
                            printf("Erro: Divisao por zero!\n");
                            break;
                            }
    ..........
    printf("%d%c%d=%d\n",a,op,b,r);.....
    Mas assim está a efectuar a operação de divisão mesmo que o b seja 0. O problema é básico de resolver mas já estou meio comido, amanhã resolvo isto.
     
  3. xtr3me

    xtr3me Power Member

    JemanPT: sem receberes o sinal de operação pelo stdin é complicado o programa saber a operação a fazer.

    Pelo menos mais um getchar precisas.

    Baderous: da próxima vez, dá só ideias para ele resolver o problema, não lhe dês o código :D

    Ensina a pescar, não dês o peixe.
     
  4. Desculpa a pergunta, mas como estou cá para aprender, qual o porquê do %d e o %c? é á sorte ou tem significado?

    O que faz o fflush(stdin)? esta, eu ainda não aprendi ;)

    Thanks
     
  5. Heron

    Heron Power Member

    Em C não existe & (referência), só em C++.
     
  6. AliFromCairo

    AliFromCairo Power Member

    Tem significado. O %d é para dígitos e o %c para chars.

    A função fflush em C está definida para streams de saída (e.g. stdout), logo, não faz grande sentido usá-la para o stdin.

    Existe.
     
  7. Heron

    Heron Power Member

    Não, não existe. O gcc engole isso porque é também um compilador de C++, e para todos os efeitos práticos C é um sub-conjunto de C++.

    Mas posso estar enganado, podes postar alguma referencia sobre C onde indica que exista &?
     
  8. AliFromCairo

    AliFromCairo Power Member

    Boas, dá uma vista de olhos aqui.
     
  9. Heron

    Heron Power Member

    Tens razão, não sei onde é que fui buscar esta.
    Ignorem o que eu disse.
     
  10. xtr3me

    xtr3me Power Member

    O %d é usado para inteiros e o %c é usado para caracteres.

    Só não concordo totalmente ali com a afirmação do AliFromCairo porque o %f também é para dígitos (floats). Fica só aqui esta nota ...

    Convém usares os tipos certos (de acordo com a declaração que fizeste) porque senão podes correr o risco de "perder informação/precisão". Isto é, se tentares representar um float como um inteiro, a representação é feita, mas perdes a informação sobre a parte decimal. É por causa disso que existem estas diferenças.

    O fflush(stdin) é uma técnica que se costuma usar para limpar o buffer de input, só para certificar que não se recebe lixo na string que queremos analisar.
     
  11. greatbunzinni

    greatbunzinni Power Member


    Estás enganado em várias coisas.

    Antes de mais, a mais óbvia. O GCC é o nome que dão à colecção de compiladores. O compilador de C é o gcc e o compilador de C++ é o g++. Essa do gcc "engolir" as referências por ser compilador de C++ não tem pés nem cabeça.

    Sobre o teu engano do operador &, aconselho-te a leres o livro "The C programming language" de Brian Kernighan e Dennis Ritchie. Se por acaso conseguires arranjar a 2ª edição, que abrange a norma ISO da linguagem C, abre-o na página 78 e lê o que escreveram na secção 5.1 sobre "pointers and addresses".
     
  12. HecKel

    HecKel The WORM

    Ele já afirmou que se enganou ;)

    As referências é algo usado em quase todas as linguagens de programação :P E é tramado perceber como se usam e para que servem, para ser sincero durante mesmo muito tempo usei referências só porque era mecanizado ou porque o compilador dava erro :P Julgo que agora já as uso com consciência do que estou a fazer ;)

    EDIT: Já agora.... http://youtube.com/watch?v=6pmWojisM_E
     
    Última edição: 23 de Setembro de 2007
  13. souto

    souto To fold or to FOLD?

    Pequena correcção: referências são usadas em Java. Em (quase) tudo o resto são ponteiros.
     
  14. AliFromCairo

    AliFromCairo Power Member

    Mas que tem comportamento indefinido (para streams de entrada). Isso foi discutido aqui.
     
  15. HecKel

    HecKel The WORM

    Tu crias um ponteiro para um endereço de memória, mas podes usar referências também. São coisas diferentes, e em C e C++ existe referências. O java é um caso particular, usa muita coisa que o programador nem sequer precisa de ter noções, referências e ponteiros por exemplo.
     

Partilhar esta Página