Ir ao conteúdo

Posts recomendados

Postado

Gente eu precisaria declarar o delta (d) na função main, para adicionar  retornos : return -2 caso a equação não possua raízes reais.

só que quando tento fazer isso, não funciona.

e outro retorno para quando as raízes apresentarem valores iguais, mas pra isso eu preciso do delta.

#include<stdio.h>


#include<math.h>
void ResolveEquacao2Grau (float a, float b, float c, float *x1, float *x2)

{
   float d;
   d = sqrt( b * b - 4 * a * c);

   *x1 =  - (b + d) / (2 * a);
   *x2 = (d - b) / (2 * a);
}


int main(void){
 float a, b, c, px, p2, d;

     printf("Digite o lado a:");
     scanf("%f", &a);
     printf("Digite o lado b:");
     scanf("%f", &b);
     printf("Digite o lado c:");
     scanf("%f", &c);


     if (d < 0){
        return 2;
     }
     if (a == 0){
            printf("os coficientes  nao formam uma equacao do segundo grau pois o coeficiente a = 0\n");
            return 1;
     }

     ResolveEquacao2Grau(a, b, c,&px, &p2 );
     printf("raiz de x1:%0.2f\n", p2);
     printf("raiz de x2: %0.2f\n", px);


 return 0;

}
 

Postado

Quando delta é negativo ou menor que 0.

20 minutos atrás, Leanderson Pinheiro disse:

 if (d < 0){
        return 2;
     }

Coloque o sinal (-)

A desculpa, notei agora que sua função não retorna por mudança de parâmetro o delta.

 

 

Postado

Sua função usa retornos por mudança de parâmetro.

 

Como gostaria de retorna o status -2

Por parâmetro ou por retorno de função no lugar de void?

Postado
agora, mauro_b disse:

Sua função usa retornos por mudança de parâmetro.

 

Como gostaria de retorna o status -2

Por parâmetro ou por retorno de função no lugar de void?

Eu não poderia retornar por paramêtro, porque no exercício pede que a função e seus paramêtros sejam somente aqueles.

Postado
3 minutos atrás, Leanderson Pinheiro disse:

Eu não poderia retornar por paramêtro, porque no exercício pede que a função e seus paramêtros sejam somente aqueles.

Aah então é por retorno de função.

 

No lugar de   void?

Assim:

int   ResolveEquacao2Grau (float a, float b, float c, float *x1, float *x2)

{
   float d;
   d = sqrt( b * b - 4 * a * c);

   *x1 =  - (b + d) / (2 * a);
   *x2 = (d - b) / (2 * a);
   
  if(d < 0)return -2;
  return 0;
}

 

Postado
1 minuto atrás, mauro_b disse:

Aah então é por retorno de função.

 

No lugar de   void?

Assim:


int   ResolveEquacao2Grau (float a, float b, float c, float *x1, float *x2)

{
   float d;
   d = sqrt( b * b - 4 * a * c);

   *x1 =  - (b + d) / (2 * a);
   *x2 = (d - b) / (2 * a);
   
  if(d < 0)return -2;
  return 0;
}

 

Tipo, eu queria meio que retornar o delta, na função main, sacou ? Porque só com ele eu poderia printar se existem ou não raízes reais, e se as raízes seriam iguais tlg ?

Eu consegui resolver, criando outra função Delta. Entretanto, não sei se era permitido, mas funcionou.

Postado
51 minutos atrás, Leanderson Pinheiro disse:

Tipo, eu queria meio que retornar o delta, na função main, sacou ? Porque só com ele eu poderia printar se existem ou não raízes reais, e se as raízes seriam iguais tlg ?

Eu consegui resolver, criando outra função Delta. Entretanto, não sei se era permitido, mas funcionou.

Calculará o delta duas vezes! Tente retorno da função

Postado
5 minutos atrás, mauro_b disse:

Calculará o delta duas vezes! Tente retorno da função.

 

Assim:


#include<stdio.h>
#include<math.h>
float ResolveEquacao2Grau (float a, float b, float c, float *x1, float *x2)
{
   float d;
   d = sqrt( b * b - 4 * a * c);

   *x1 =  - (b + d) / (2 * a);
   *x2 = (d - b) / (2 * a);
  
  retutn d;
}


int main(void){
 float a, b, c, px, p2, d;

     printf("Digite o lado a:");
     scanf("%f", &a);
     printf("Digite o lado b:");
     scanf("%f", &b);
     printf("Digite o lado c:");
     scanf("%f", &c);

     float d= ResolveEquacao2Grau(a, b, c,&px, &p2 );
     if (d < 0){
        //<<<< Aqui coloque a mensagem
     }
     if (a == 0){
            printf("os coficientes  nao formam uma equacao do segundo grau pois o coeficiente a = 0\n");
            return 1;
     }

     
     printf("raiz de x1:%0.2f\n", p2);
     printf("raiz de x2: %0.2f\n", px);


 return 0;

}
 

 

Apresentou erro, " redeclaration of 'd' with no linkage".

  • Curtir 1
Postado
6 minutos atrás, mauro_b disse:

Huuummm já existe um d, vou corrigir


#include<stdio.h>
#include<math.h>
float ResolveEquacao2Grau (float a, float b, float c, float *x1, float *x2)
{
   float d;
   d = sqrt( b * b - 4 * a * c);

   *x1 =  - (b + d) / (2 * a);
   *x2 = (d - b) / (2 * a);
  
  retutn d;
}


int main(void){
 float a, b, c, px, p2, d;

     printf("Digite o lado a:");
     scanf("%f", &a);
     printf("Digite o lado b:");
     scanf("%f", &b);
     printf("Digite o lado c:");
     scanf("%f", &c);

     d= ResolveEquacao2Grau(a, b, c,&px, &p2);
     if (d < 0){
        //<<<< Aqui coloque a mensagem
       return -2;
     }
     if (a == 0){
            printf("os coficientes  nao formam uma equacao do segundo grau pois o coeficiente a = 0\n");
            return 1;
     }

     
     printf("raiz de x1:%0.2f\n", p2);
     printf("raiz de x2: %0.2f\n", px);


 return 0;

}
 

Retirei o float para usar o d existente.

ele está ignorando esse if onde existe o retorno -2. Quando o Delta está sendo negativo apresenta as seguintes saídas : raiz de x1:-1.#J
raiz de x2: 1.#R

Dessa maneira funciona perfeitamente, mas o enunciado diz que quer somente a função ResolveEquação, em tese não precisaria da Função Delta, mas só consigo avaliar as condiçõe para os returns, se tiver ela.

 

#include<stdio.h>
#include<math.h>
void ResolveEquacao2Grau (float a, float b, float c, float *x1, float *x2)

{
   float d;
   d = sqrt( b * b - 4 * a * c);
   *x1 =  - (b + d) / (2 * a);
   *x2 = (d - b) / (2 * a);


}
int Delta(int a, int b, int c){

    return b * b -4 * a * c;

}


int main(void){
 float a, b, c, px, p2, delta;

     printf("Digite o lado a:");
     scanf("%f", &a);
     printf("Digite o lado b:");
     scanf("%f", &b);
     printf("Digite o lado c:");
     scanf("%f", &c);

    delta = Delta(a, b, c);
    ResolveEquacao2Grau(a, b, c,&px, &p2 );

     if (delta == 0 && a !=0){
        printf("as raizes apresentam o mesmo valor = %lf\n", p2);

    }

    if (delta < 0){
        printf("Nao existem raizes reais\n");
        return -2;
    }

     if (a == 0){
            printf("os coficientes  nao formam uma equacao do segundo grau pois o coeficiente a = 0\n");
            return 1;
     }


     if (p2 != px){
     printf("raiz de x1:%0.2f\n", p2);
     printf("raiz de x2: %0.2f\n", px);
     }


 return 0;

}
 

  • Solução
Postado

É porque DELTA: b*b - (4*a*c)

É negativo, a raiz quadrado de um número negativo gera esse código impresso.

 

Temos que testar se DELTA < 0 antes de calcular a RAIZ quadrada dele,

 

Lá na função:

	
	float d= b * b - 4 * a * c;
	if(d < 0) return -1;
             
	d= sqrt( d );

	*x1 =  - (b + d) / (2 * a);
	*x2 = (d - b) / (2 * a);
             
 	return d;

 

 

Postado

@Leanderson Pinheiro Sua função pode ter esse retorno para testar em main se existe raiz,

 

int ResolveEquacao2Grau(float a, float b, float c, float *x1, float *x2){
    float d = b * b - 4 * a * c;
    if(d < 0){
        return -2;
    }
    d = sqrt(d);
    *x1 = -(b + d) / (2 * a);
    *x2 = (d - b) / (2 * a);
    return 1;
}

 

if(ResolveEquacao2Grau(a, b, c, &x1, &x2) != -2){
    printf("raiz de x1:%0.2f\n", x1);
    printf("raiz de x2: %0.2f\n", x2);
...

 

Postado
11 minutos atrás, mauro_b disse:

É porque DELTA: b*b - (4*a*c)

É negativo, a raiz quadrado de um número negativo gera esse código impresso.

 

Temos que testar se DELTA < 0 antes de calcular a RAIZ quadrada dele,

 

Lá na função:


	
	float d= b * b - 4 * a * c;
	if(d < 0) return -1;
             
	d= sqrt( d );

	*x1 =  - (b + d) / (2 * a);
	*x2 = (d - b) / (2 * a);
             
 	return d;

 

 

Resolveu, muito obrigado!

4 minutos atrás, Midori disse:

@Leanderson Pinheiro Sua função pode ter esse retorno para testar em main se existe raiz,

 


int ResolveEquacao2Grau(float a, float b, float c, float *x1, float *x2){
    float d = b * b - 4 * a * c;
    if(d < 0){
        return -2;
    }
    d = sqrt(d);
    *x1 = -(b + d) / (2 * a);
    *x2 = (d - b) / (2 * a);
    return 1;
}

 


if(ResolveEquacao2Grau(a, b, c, &x1, &x2) != -2){
    printf("raiz de x1:%0.2f\n", x1);
    printf("raiz de x2: %0.2f\n", x2);
...

 

Desta maneira, também resolveria o problema!!

  • Curtir 1

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!