Ir ao conteúdo
  • Cadastre-se

C Utilização do comando switch


Rafaella Bastos

Posts recomendados

A questão pede que eu Crie um programa em C ou C++ para realizar o cálculo de uma operação complexa envolvendo dois números, utilizando o comando “switch” permita o usuário escolher entre: soma, subtração, multiplicação e divisão dos números fornecidos. Ao final informe os números complexos e o resultado, segundo a opção do usuário.

Mas quando eu executo o programa, logo após eu colocar os números complexos ele trava e  encerra. Me ajudem por favor!

Segue código:

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

int main()
{
    int a, b, c, d;
    char img;
    printf("Digite o primeiro numero complexo, sem espacos, na forma: a+bi. Ex.: 6+5i >>");
    scanf("%f",&a);
    scanf("%f",&b);
    scanf("%c",&img);
    printf("Digite o segundo numero complexo, sem espacos, na forma: c+di. Ex.: 2-6i >>");
    scanf("%f",&c);
    scanf("%f",&d);
    scanf("%c",&img);


    int adicao1,adicao2;

    adicao1 = a + c;
    adicao2 = b + d;

    int sub1,sub2;

    sub1 = a + (-1* c);
    sub2 = b + (-1*d);

    int mult1,mult2;

    mult1 = (a*c) - (b*d);
    mult2 = (a*d) + (b*c);


    int div1,div2;

    div1 = ((a*c) + (b*d)) / ((c*c) + (d*d));
    div2 = ((c*b) - (a*d)) / ((c*c) + (d*d));

     switch ( adicao1, adicao2,sub1, sub2, mult1, mult2, div1, div2 )
    {
   
    case 1 :
    printf("\n\nAdicao = %.2f + %.2fi",adicao1,adicao2);
    break;

    case 2 :
    printf("\n\nSubtracao = %.2f + %.2fi",sub1,sub2);
    break;

    case 3 :
    printf("\n\nMultiplicacao = %.2f + %.2fi",mult1,mult2);
    break;

    case 4 :
    printf("\n\nDivisao = %.2f + %.2fi",div1,div2);
    break;

    }
    getch();
    return 0;

}
 

Link para o comentário
Compartilhar em outros sites

@Rafaella Bastos Sempre use essa ferramenta aqui para postar o código:

image.png.fef011e1767c88fa8c5529e7c1c1b8fc.png

Facilita a visualização.

 

Logo de cara já da pra ver que você declarou várias variáveis com o tipo inteiro e está usando o identificador de ponto flutuante para as mesmas, comece arrumando por aí.

 

27 minutos atrás, Rafaella Bastos disse:

switch ( adicao1, adicao2,sub1, sub2, mult1, mult2, div1, div2 )

Não é assim que funciona o switch/case. Use apenas uma variável dentro dos parênteses, que deve ser a responsável pela escolha da operação, então você pode fazer um menu para tal.

 

Efetue somente a operação requisitada pelo usuário, então passe tudo para os cases.

 

Arrume isso por enquanto e envie seu programa novamente para vermos como está.

 

PS: Um rapaz já postou a mesma dúvida nesse fórum há pouco tempo, se quiser dar uma procurada depois.

Link para o comentário
Compartilhar em outros sites

@Lucca Rodrigues como eu posso fazer um menu? desde já muito obrigada 

segue codigo: 

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

int main()
{
    int a, b, c, d;
    char img;
    printf("Digite o primeiro numero complexo, sem espacos, na forma: a+bi. Ex.: 6+5i >>");
    scanf("%d",&a);
    scanf("%d",&b);
    scanf("%c",&img);
    printf("Digite o segundo numero complexo, sem espacos, na forma: c+di. Ex.: 2-6i >>");
    scanf("%d",&c);
    scanf("%d",&d);
    scanf("%c",&img);


    int adicao1,adicao2;

    adicao1 = a + c;
    adicao2 = b + d;

    int sub1,sub2;

    sub1 = a + (-1* c);
    sub2 = b + (-1*d);

    int mult1,mult2;

    mult1 = (a*c) - (b*d);
    mult2 = (a*d) + (b*c);


    int div1,div2;

    div1 = ((a*c) + (b*d)) / ((c*c) + (d*d));
    div2 = ((c*b) - (a*d)) / ((c*c) + (d*d));

    int operacao;

     switch (operacao )
    {

    case 1 :
    printf("\n\nAdicao = %.2f + %.2fi",adicao1,adicao2);
    break;

    case 2 :
    printf("\n\nSubtracao = %.2f + %.2fi",sub1,sub2);
    break;

    case 3 :
    printf("\n\nMultiplicacao = %.2f + %.2fi",mult1,mult2);
    break;

    case 4 :
    printf("\n\nDivisao = %.2f + %.2fi",div1,div2);
    break;

    }
    getch();
    return 0;

}

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Rafaella Bastos Atente-se à isso daqui:

36 minutos atrás, Lucca Rodrigues disse:

Sempre use essa ferramenta aqui para postar o código:

image.png.fef011e1767c88fa8c5529e7c1c1b8fc.png

Facilita a visualização.

Algumas coisas podem desaparecer do seu código quando você coloca em forma de texto, por isso, use essa ferramenta aí pra postar códigos.

 

18 minutos atrás, Rafaella Bastos disse:

como eu posso fazer um menu?

É só mostrar as opções:

printf("\n[1] - adição");
printf("\n[2] - subtração");
printf("\n[3] - multiplicação");
printf("\n[4] - divisão");

Daí usa scanf() pra escolher a opção e switch/case para avaliar a opção escolhida.

 

Corrija isso daqui também, que você não corrigiu:

39 minutos atrás, Lucca Rodrigues disse:

Logo de cara já da pra ver que você declarou várias variáveis com o tipo inteiro e está usando o identificador de ponto flutuante para as mesmas, comece arrumando por aí.

Perceba que eu não estava falando somente dos identificadores nas funções scanf(), mas nas printf() também. E isso:

40 minutos atrás, Lucca Rodrigues disse:

Efetue somente a operação requisitada pelo usuário, então passe tudo para os cases.

Pegue as operações por exemplo, de soma, e coloque dentro do case respectivo.

Não se esqueça do default (que não leva break) no final, dê uma revisada na estrutura switch/case.

Link para o comentário
Compartilhar em outros sites

@Lucca Rodrigues ainda tem algo errado 

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

int main()
{
    int a, b, c, d, operacao;
    char img;
    printf("Digite o primeiro numero complexo, sem espacos, na forma: a+bi. Ex.: 6+5i >>");
    scanf("%d",&a);
    scanf("%d",&b);
    scanf("%c",&img);
    printf("Digite o segundo numero complexo, sem espacos, na forma: c+di. Ex.: 2-6i >>");
    scanf("%d",&c);
    scanf("%d",&d);
    scanf("%c",&img);


    int adicao1,adicao2;

    adicao1 = a + c;
    adicao2 = b + d;

    int sub1,sub2;

    sub1 = a + (-1* c);
    sub2 = b + (-1*d);

    int mult1,mult2;

    mult1 = (a*c) - (b*d);
    mult2 = (a*d) + (b*c);


    int div1,div2;

    div1 = ((a*c) + (b*d)) / ((c*c) + (d*d));
    div2 = ((c*b) - (a*d)) / ((c*c) + (d*d));


    printf("\n\nEscolha a operacao desejada, em que 1 e adicao, 2 e subtracao, 3 e multiplicacao e 4 e divisao:");
    scanf ("%d", operacao);


     switch (operacao)
    {
    case 1 :
    printf("\n\nAdicao = %.2d + %.2di",adicao1,adicao2);
    break;

    case 2 :
    printf("\n\nSubtracao = %.2d + %.2di",sub1,sub2);
    break;

    case 3 :
    printf("\n\nMultiplicacao = %.2d + %.2di",mult1,mult2);
    break;

    case 4 :
    printf("\n\nDivisao = %.2d + %.2di",div1,div2);
    break;

    default :
    printf ("Valor invalido!\n");

    }

    getch();
    return 0;

}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Rafaella Bastos Você está tentando imprimir um inteiro limitando as casas após a vírgula, considerando que ele é um inteiro. Não existe %.2d nem nada assim. Você poderia deixar todas as variáveis do tipo ponto flutuante.

 

Ainda falta isso:

46 minutos atrás, Lucca Rodrigues disse:
1 hora atrás, Lucca Rodrigues disse:

Efetue somente a operação requisitada pelo usuário, então passe tudo para os cases.

Pegue as operações por exemplo, de soma, e coloque dentro do case respectivo.

 

O que está tentando ler aqui?

28 minutos atrás, Rafaella Bastos disse:

scanf("%c",&img);

Um número complexo tem uma parte real e uma imaginária, e a imaginária é acompanhada do imaginário i ou j, isso não vai variar, então o usuário não precisa inserir esse caractere.

 

Só pra deixar bem claro... É assim que se efetuam as operações, então se você fez diferente disso, corrija:

Soma:

z1 + z2 = (x1 + iy1) + (x2 + iy2) = (x1 + x2) + i (y1 + y2)

Multiplicação:

z1 * z2 = (x1 + iy1) * (x2 + iy2) = (x1 x2) + (i x1 y2) + (i y1 x2) + (i² y1 y2) = (x1 x2 - y1 y2) + i (x1 y2 - y1 x2)

Divisão:

z1 / z2 = z1 * z2⁻¹ = (x1 + iy1) * [ (x2 / x²2 + y²2) + (-y2 / x²2 + y²2)] = [ x1 x2 + y1 y2 + (y1 x2 - x1 y2) i] / x²2 + y²2

Com z1 pertencente aos complexos e z2 aos complexos não nulos.

Subtração:

z1 - z2 = z1 + (- z2) = (x1 + iy1) + (- x2 - iy2) = (x1 - x2) + i (y1 - y2)

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...