Título: Puntero de arreglo
Publicado por: Supermanxd en 2 Enero 2016, 22:29 pm
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"); switch (opc) { case 1: area_cuadrado (lado); break; case 2: area_circulo (radio); break; default: } }while (opc!=2); return 0; } int area_cuadrado (float lado){ printf("\nIngrese el lado del cuadrado: "); 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: "); area_circ1=area_circ*pi; printf("\nEl area del circulo es: %2.f",area_circ1 ); }
Título: Re: Puntero de arreglo
Publicado por: MAFUS en 2 Enero 2016, 23:46 pm
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.
Título: Re: Puntero de arreglo
Publicado por: Supermanxd en 2 Enero 2016, 23:55 pm
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"); switch (opc){ case 1: printf("\nIngrese el lado del cuadrado: "); area_cuadrado (lado); resp=area_cuadrado (lado); printf("\nEl area del cuadrado es: %d",resp ); break; case 2: printf("\nIngrese el radio del circulo: "); area_circulo (radio); resp1=area_circulo (radio); printf("\nEl area del circulo es: %d",resp1 ); break; default: } }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_circ1=area_circ*pi; return area_circ1; }
Título: Re: Puntero de arreglo
Publicado por: MAFUS en 3 Enero 2016, 01:47 am
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);
|