problemas con el retorno de un array

german dauro
06 de Septiembre del 2010
hey buenas, soy principiante C... hice un programita para calcular las raices de un polinomio de 2do grado. para eso utilizo 2 funciones (una en caso de raices reales y otra para imaginarias) y además defino 2 variables globales. el código es este:

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

void bascarareal(float a, float b, float c);
void bascaraimaginaria(float a, float b, float c);
float r1, r2;
int main(void)
{
char temp[1];
float a, b, c;
while(1)
{
printf ("nSi desea salir ingrese "s" de lo contrarioningrese a seguido de un enter: ");
scanf("%c", &temp);
if(temp[0] == 's')break;
getchar();
printf("Ingrese a seguido de un enter: ");
scanf("%f", &a);
getchar();
printf("Ingrese b seguido de un enter: ");
scanf("%f", &b);
getchar();
printf("Ingrese c seguido de un enter: ");
scanf ("%f", &c);
getchar();
float x;
x = b * b - 4 * a * c;
if(x < 0 || x >= 0 || a == 0)
{
if(x < 0)
{
bascaraimaginaria(a, b, c);
printf("nLa primera raiz es = (-(%f) + (%f)i)/%fn", b, r1, 2 * a);
printf("La segunda raiz es = (-(%f) + (%f)i)/%fn", b, r2, 2 * a);
printf("nNo existen raices realesn");
}
if(x > 0)
{
bascarareal(a, b, c);
printf("nLa primera raiz es= %fn", r1);
printf("La segunda raiz es= %fn", r2);
}
if(a == 0)
{
float r3;
r3 = - c / b;
printf("nLa raiz del polinomio es %fn", r3);
}
}
}
return(0);
}
void bascarareal(float a, float b, float c)
{
float x;
x = b * b - 4 * a * c;
r1 = (- b + sqrt(x)) / (2 * a);
r2 = (- b - sqrt(x)) / (2 * a);
}
void bascaraimaginaria(float a, float b, float c)
{
float x;
x = b * b - 4 * a * c;
r1 = sqrt(-x);
r2 = -sqrt(-x);
}

ahora supongamos que yo no quiero usar globales... se me ocurrió retornar el puntero a un array de 2 elementos que contienen mis dos raices... pero no compila... además tengo conflictos con la asignación del puntero dentro del main... ahi va, y desde ya muchas gracias:


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

int bascara(float a, float b, float c);
int main(void)
{
char temp[1];
float a, b, c;
while(1)
{
printf ("nSi desea salir ingrese "s" de lo contrarion ingrese a seguido de un enter: ");
scanf("%c", &temp);
if(temp[0] == 's')break;
printf("Ingrese a seguido de un enter: ");
scanf("%f", &a);
getchar();
printf("Ingrese b seguido de un enter: ");
scanf("%f", &b);
getchar();
printf("Ingrese c seguido de un enter: ");
scanf ("%f", &c);
getchar();
float x;
x = b * b - 4 * a * c;
if(x < 0 || a == 0)
{
if(x < 0)
{
printf("nNo existen raices realesn");
}
else
{
float r3;
r3 = - c / b;
printf("nLa raiz del polinomio es %fn", r3);
}
}
float misraices[2];
misraices = bascara(a, b, c);
printf("nLa primera raiz es= %fn", misraices[0]);
printf("La segunda raiz es= %fn", misraices[1]);
}
return(0);
}
int bascara(float a, float b, float c)
{
float x, r1, r2, raices[2];
x = b * b - 4 * a * c;
r1 = (- b + sqrt(x)) / (2 * a);
r2 = (- b - sqrt(x)) / (2 * a);
raices[0] = r1;
raices[1] = r2;
return(raices);
}