Puntero de arreglo

Iniciado por Supermanxd, 2 Enero 2016, 22:29 PM

0 Miembros y 1 Visitante están viendo este tema.

Supermanxd

Tengo el siguiente programa y tengo que usar un puntero de arreglo que apunte a las dos funciones y que reciba parametros por referencia.. Como lo modifico?

#include<conio.h>
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define pi 3.1416;

int area_cuadrado (float lado);
int area_circulo (float radio);
float lado=0, area_cuadr=0, area_circ, radio, area_circ1;
int opc=0;
int main ()
{
do{

printf ("\n\nEscoja una opcion..");
printf ("\n1-. Area del cuadrado");
printf ("\n2-. Area del circulo");
printf ("\n--");
scanf("%d", &opc);
switch (opc) {
case 1:
system ("cls");
area_cuadrado (lado);
break;
case 2:
system ("cls");
area_circulo (radio);
break;
default:
system ("cls");
}
}while (opc!=2);

return 0;
}


int area_cuadrado (float lado){
printf("\nIngrese el lado del cuadrado: ");
scanf("%f",&lado);
area_cuadr=lado*lado;
printf("\nEl area del cuadrado es: %2.f",area_cuadr);
}

int area_circulo (float radio){

int area_circ=0;
printf("\nIngrese el radio del circulo: ");
scanf("%f",&radio);
area_circ=pow(radio,2);
area_circ1=area_circ*pi;
printf("\nEl area del circulo es: %2.f",area_circ1);

}

MAFUS

Varias cosas:
Las funciones auxiliares esperan que retornes un entero pero llegan al de su ejecución y no devuelven nada.
Llamas a la función con un argumento pero ese argumento no lo usas ya que lo reescribes dentro de la función.
Reescibe las funciones y/o main para dar coherencia a todo el conjunto. Una vez bien definidos los interfaces y la forma de trabajar se podrá cambiar el programa para hacer un array de punteros a funciones.

Supermanxd

Asi esta bien? #include<conio.h>
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define pi 3.1416;

int area_cuadrado (int lado);
int area_circulo (int radio);

int main ()
{
int lado=0, radio=0, resp=0, resp1=0;
int opc=0;
int* area[2];//areglo de puntero

do{
printf ("\n\nEscoja una opcion..");
printf ("\n1-. Area del cuadrado");
printf ("\n2-. Area del circulo");
printf ("\n--");
scanf("%d", &opc);
switch (opc){
case 1:
system ("cls");
printf("\nIngrese el lado del cuadrado: ");
scanf("%d",&lado);
area_cuadrado (lado);
resp=area_cuadrado (lado);
printf("\nEl area del cuadrado es: %d",resp);
break;
case 2:
system ("cls");
printf("\nIngrese el radio del circulo: ");
scanf("%d",&radio);
area_circulo (radio);
resp1=area_circulo (radio);
printf("\nEl area del circulo es: %d",resp1);
break;
default:
system ("cls");
}
}while (opc!=1);
return 0;
}

int area_cuadrado (int lado){
int area_cuadr=0;
area_cuadr=lado*lado;
return area_cuadr;
}

int area_circulo (int radio){
int area_circ=0, area_circ1=0;
area_circ=pow(radio,2);
area_circ1=area_circ*pi;
return area_circ1;
}

MAFUS

Bien. Ahora si he entendido bien quieres usar un array de punteros a funciones, y a este array quieres llamarlo area.

Se crea así:
Su nombre es area, por tanto lo definimos
area
area debe ser un puntero a función
(*area)()
area además debe ser un array de dos punteros a función
(*area[2])()
Las firmas de las funciones tomaran un argumento tipo int y devolverán un int
int (*area[2])(int)
Ahí lo tienes.

Para incluir las funciones al array se hace como si fuera un elemento del array normal, pero pasándole el nombre de la función
area[0] = area_cuadrado;
area[1] = area_circulo;


Para llamar a la función usa el elemento del array como si fuera la función a llamar. Por ejemplo con el cuadrado
resp = area[0](lado);