Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ricardo gomes araujo

[Resolvido] Função com ponteiro

Recommended Posts

Estou querendo implementar um programa que através da chamada de uma função calcule as raizes de uma equação do segundo grau

mas a função deve obedecer ao seguinte protótipo:

 

int raizes(float a, float b, float c, float* x1, float* x2);

 

E deverá retornar o número de raízes reais e distintas. Se existirem raízes reais, os valores deverão ser armazenados nas variáveis apontadas por x1 e x2

 

Segue a minha tentativa

 

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

int raizes(float a, float b, float c, float*x1, float*x2);

main()
{
float a,b,c;
printf ("\n\n\nInforme o valor do coeficiente a: ");
scanf ("%f", &a);
printf ("Informe o valor do coeficiente b: ");
scanf ("%f", &B);
printf ("Informe o valor do coeficiente c: ");
scanf ("%f", &c); 

raizes(a,b,c); //chama a funcao
getch();
}

int raizes(float a, float b, float c, float*x1, float*x2);
{
float delta;
float *x1;
float *x2;
delta=pow(b,2)-4*a*c;

if(a!=0)
{
if (delta >=0)
{
//Caso delta > 0
*x1=(-b+sqrt(delta))/(2*a);
*x2=(-b-sqrt(delta))/(2*a);
printf ("\nx1=%.2f e x2=%.2f\n\n", x1, x2);

}
else
{
printf("Nao e possivel calcular");
}
} //fim do ultima if 

} //fim da funçao

Quando tento executar o programa. O compilador acusa um erro na função raizes.

 

Alguém poderia me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você colocou ponto-e-vírgula depois da função:

 

int raizes(float a, float b, float c, float*x1, float*x2);
Você não pode abrir um bloco de função com um ponto-e-vírgula antes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tirando o ; da função o programa ainda gera erro

 

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

int raizes(float a, float b, float c, float*x1, float*x2);

main()
{
float a,b,c;
printf ("\n\n\nInforme o valor do coeficiente a: ");
scanf ("%f", &a);
printf ("Informe o valor do coeficiente b: ");
scanf ("%f", &B);
printf ("Informe o valor do coeficiente c: ");
scanf ("%f", &c);                 
        
raizes(a,b,c); //chama a funcao
getch();
}
      
int raizes(float a, float b, float c, float*x1, float*x2)
{
float delta;
float *x1;
float *x2;
delta=pow(b,2)-4*a*c;

if(a!=0)
{
if (delta >=0)
{
          //Caso delta > 0
          *x1=(-b+sqrt(delta))/(2*a);
          *x2=(-b-sqrt(delta))/(2*a);
   printf ("\nx1=%.2f e x2=%.2f\n\n", x1, x2);

}
else
{
printf("Nao e possivel calcular");
}
} //fim do ultima if        

} //fim da funcao

Segue os erros que o compilador acusa

--------------------------------------------------------

Compilador: Default compiler

Executando g++.exe...

g++.exe "C:\Users\Gustavo\Desktop\equacao3.cpp" -o "C:\Users\Gustavo\Desktop\equacai3.exe" -I"C:\Dev-Cpp\lib\gcc\mingw32\3.4.2\include" -I"C:\Dev-Cpp\include\c++\3.4.2\backward" -I"C:\Dev-Cpp\include\c++\3.4.2\mingw32" -I"C:\Dev-Cpp\include\c++\3.4.2" -I"C:\Dev-Cpp\include" -L"C:\Dev-Cpp\lib"

C:\Users\Gustavo\Desktop\equacao3.cpp: In function `int main()':

C:\Users\Gustavo\Desktop\equacao3.cpp:5: error: too few arguments to function `int raizes(float, float, float, float*, float*)'

C:\Users\Gustavo\Desktop\equacao3.cpp:17: error: at this point in file

 

C:\Users\Gustavo\Desktop\equacao3.cpp: In function `int raizes(float, float, float, float*, float*)':

C:\Users\Gustavo\Desktop\equacao3.cpp:24: error: declaration of 'float*x1' shadows a parameter

C:\Users\Gustavo\Desktop\equacao3.cpp:25: error: declaration of 'float*x2' shadows a parameter

 

Execução terminada

-------------------------------------------------------------------------------------------------------------

 

Você colocou ponto-e-vírgula depois da função:

 

int raizes(float a, float b, float c, float*x1, float*x2);
Você não pode abrir um bloco de função com um ponto-e-vírgula antes.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

scanf ("%f", &B);
não é B e sim b

+ isso até é o de menos, a sua função raizes pelo protótipo dela precisa retornar um inteiro e verifique os argumentos da sua função.

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui resolver o problema

 

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

int raizes(float, float, float, float*, float*);

int main()
{
float a,b,c;
float x1,x2;
printf ("\n\n\nInforme o valor do coeficiente a: ");
scanf ("%f", &a);
printf ("Informe o valor do coeficiente b: ");
scanf ("%f", &B);
printf ("Informe o valor do coeficiente c: ");
scanf ("%f", &c);                 
        
raizes(a,b,c,&x1,&x2); //chama a funcao
getch();
}
      
int raizes(float a, float b, float c, float*x1, float*x2)
{
float delta;

delta=pow(b,2)-4*a*c;

if(a!=0)
{
if (delta >=0)
{
          //Caso delta > 0
          *x1=(-b+sqrt(delta))/(2*a);
          *x2=(-b-sqrt(delta))/(2*a);
   printf ("\nx1=%.2f e x2=%.2f\n\n", *x1, *x2);

}
else
{
printf("Nao e possivel calcular");
}
} //fim do ultima if        

} //fim da funcao

scanf ("%f", &B);
não é B e sim b

+ isso até é o de menos, a sua função raizes pelo protótipo dela precisa retornar um inteiro e verifique os argumentos da sua função.

 

[]s

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.