elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Puntero de arreglo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Puntero de arreglo  (Leído 2,322 veces)
Supermanxd

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Puntero de arreglo
« 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?

Código
  1. #include<conio.h>
  2. #include<stdio.h>
  3. #include<math.h>
  4. #include<stdlib.h>
  5. #define pi 3.1416;
  6.  
  7. int area_cuadrado (float lado);
  8. int area_circulo (float radio);
  9. float lado=0, area_cuadr=0, area_circ, radio, area_circ1;
  10. int opc=0;
  11. int main ()
  12. {
  13. do{
  14.  
  15. printf ("\n\nEscoja una opcion..");
  16. printf ("\n1-. Area del cuadrado");
  17. printf ("\n2-. Area del circulo");
  18. printf ("\n--");
  19. scanf("%d", &opc);
  20. switch (opc) {
  21. case 1:
  22. system ("cls");
  23. area_cuadrado (lado);
  24. break;
  25. case 2:
  26. system ("cls");
  27. area_circulo (radio);
  28. break;
  29. default:
  30. system ("cls");
  31. }
  32. }while (opc!=2);
  33.  
  34. return 0;
  35. }
  36.  
  37.  
  38. int area_cuadrado (float lado){
  39. printf("\nIngrese el lado del cuadrado: ");
  40. scanf("%f",&lado);
  41. area_cuadr=lado*lado;
  42. printf("\nEl area del cuadrado es: %2.f",area_cuadr);
  43. }
  44.  
  45. int area_circulo (float radio){
  46.  
  47. int area_circ=0;
  48. printf("\nIngrese el radio del circulo: ");
  49. scanf("%f",&radio);
  50. area_circ=pow(radio,2);
  51. area_circ1=area_circ*pi;
  52. printf("\nEl area del circulo es: %2.f",area_circ1);
  53.  
  54. }


En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Puntero de arreglo
« Respuesta #1 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.


En línea

Supermanxd

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Puntero de arreglo
« Respuesta #2 en: 2 Enero 2016, 23:55 pm »

Asi esta bien?
Código
  1. #include<conio.h>
  2. #include<stdio.h>
  3. #include<math.h>
  4. #include<stdlib.h>
  5. #define pi 3.1416;
  6.  
  7. int area_cuadrado (int lado);
  8. int area_circulo (int radio);
  9.  
  10. int main ()
  11. {
  12. int lado=0, radio=0, resp=0, resp1=0;
  13. int opc=0;
  14. int* area[2];//areglo de puntero
  15.  
  16. do{
  17. printf ("\n\nEscoja una opcion..");
  18. printf ("\n1-. Area del cuadrado");
  19. printf ("\n2-. Area del circulo");
  20. printf ("\n--");
  21. scanf("%d", &opc);
  22. switch (opc){
  23. case 1:
  24. system ("cls");
  25. printf("\nIngrese el lado del cuadrado: ");
  26. scanf("%d",&lado);
  27. area_cuadrado (lado);
  28. resp=area_cuadrado (lado);
  29. printf("\nEl area del cuadrado es: %d",resp);
  30. break;
  31. case 2:
  32. system ("cls");
  33. printf("\nIngrese el radio del circulo: ");
  34. scanf("%d",&radio);
  35. area_circulo (radio);
  36. resp1=area_circulo (radio);
  37. printf("\nEl area del circulo es: %d",resp1);
  38. break;
  39. default:
  40. system ("cls");
  41. }
  42. }while (opc!=1);
  43. return 0;
  44. }
  45.  
  46. int area_cuadrado (int lado){
  47. int area_cuadr=0;
  48. area_cuadr=lado*lado;
  49. return area_cuadr;
  50. }
  51.  
  52. int area_circulo (int radio){
  53. int area_circ=0, area_circ1=0;
  54. area_circ=pow(radio,2);
  55. area_circ1=area_circ*pi;
  56. return area_circ1;
  57. }
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Puntero de arreglo
« Respuesta #3 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
Código
  1. area
area debe ser un puntero a función
Código
  1. (*area)()
area además debe ser un array de dos punteros a función
Código
  1. (*area[2])()
Las firmas de las funciones tomaran un argumento tipo int y devolverán un int
Código
  1. 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
Código
  1. area[0] = area_cuadrado;
  2. 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
Código
  1. resp = area[0](lado);
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines