problemas con el retorno de un array
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);
}
#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);
}