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)
| | |-+  Como llamar a una funcion dentro de otra funcion. Una ayuda urgentemente porfavo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Como llamar a una funcion dentro de otra funcion. Una ayuda urgentemente porfavo  (Leído 10,209 veces)
LobateZZZ

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Como llamar a una funcion dentro de otra funcion. Una ayuda urgentemente porfavo
« en: 13 Abril 2013, 22:56 pm »

Hola, mi problema es el siguiente: Tengo que llamar a varias funciones dentro de otra funcion, pero cuando ejecuto el programa, me da número muy altos que no se corresponden con lo que deberia ser. Que no os engañe tanto codigo, solo necesito que mireis el case:8 y la ultima funcion, abajo del todo.

Aqui va el codigo:
Código:
#include <stdio.h>
#include <math.h>

void suma(int equis1, int equis2, int equis3, int jota1, int jota2, int jota3); /*Declaraciones de todas las funciones*/
void resta(int equis1, int equis2, int equis3, int jota1, int jota2, int jota3);
int mod(int equis1, int equis2, int equis3);
int mod1(int jota1, int jota2, int jota3);
void escalar_por_vector(int jota1, int jota2, int jota3, int escalar1);
int producto_escalar(int equis1, int equis2, int equis3, int jota1, int jota2, int jota3);
void producto_vectorial(int equis1, int equis2, int equis3, int jota1, int jota2, int jota3);
void listar_componentes(int equis1, int equis2, int equis3);
void listar_componentes1(int jota1, int jota2, int jota3);
void demostracion();

int main(){ /*Funcion principal "main"*/
int efe,equis1,equis2,equis3,jota1,jota2,jota3,zeta1,zeta2,zeta3,escalar1,resultado;
float modulo, modulo1;
printf("====================================\n");
  printf("Indtroduzca la operación a realizar:\n");
printf("1) Suma de vectores\n");
printf("2) Resta de vectores\n");
printf("3) Módulo de un vector\n");
printf("4) Producto de un escalar por un vector\n");
printf("5) Producto escalar de dos vectores\n");
printf("6) Producto vectorial de dos vectores\n");
printf("7) Listar componentes\n");
printf("8) Demostración\n");
printf("====================================\n");
scanf("%d",&efe);

if (efe>8 && efe<1)
printf("ERROR\n\n");
else{
switch (efe){
case 1:
printf("Introduzca 3 valores para el vector 1:\n"); /*Suma de vectores*/
scanf("%d %d %d", &equis1, &equis2, &equis3);
printf("Introduzca 3 valores para el vector 2:\n");
scanf("%d %d %d", &jota1, &jota2, &jota3);
suma(equis1,equis2,equis3,jota1,jota2,jota3);
break;

case 2:
printf("Introduzca 3 valores para el vector 1:\n"); /*Resta de vectores*/
scanf("%d %d %d", &equis1, &equis2, &equis3);
printf("Introduzca 3 valores para el vector 2:\n");
scanf("%d %d %d", &jota1, &jota2, &jota3);
resta(equis1,equis2,equis3,jota1,jota2,jota3);
break;

case 3:
printf("Introduce las coordenadas de un vector:\n"); /*Modulo de un vector*/
scanf("%d %d %d", &equis1, &equis2, &equis3);
modulo = mod(equis1,equis2,equis3);
printf("El módulo será: %f\n", modulo);
break;

case 4:
printf("Introduce las coordenadas de un vector:\n"); /*Producto de un escalar con un vector*/
scanf("%d %d %d", &jota1, &jota2, &jota3);
printf("Introduce un escalar: \n");
scanf("%d", &escalar1);
escalar_por_vector(jota1, jota2, jota3, escalar1);
break;

case 5:
printf("Introduzca 3 valores para el vector 1:\n"); /*Producto escalar de dos vectores*/
scanf("%d %d %d", &equis1, &equis2, &equis3);
printf("Introduzca 3 valores para el vector 2:\n");
scanf("%d %d %d", &jota1, &jota2, &jota3);
resultado = producto_escalar(equis1,equis2,equis3,jota1,jota2,jota3);
printf("El producto escalar será: %d \n", resultado);
break;

case 6:
printf("Introduzca 3 valores para el vector 1:\n"); /*Producto vectorial*/
scanf("%d %d %d", &equis1, &equis2, &equis3);
printf("Introduzca 3 valores para el vector 2:\n");
scanf("%d %d %d", &jota1, &jota2, &jota3);
producto_vectorial(equis1,equis2,equis3,jota1,jota2,jota3);
break;

case 7:
printf("Introduzca 3 valores para el vector:\n"); /*Listar componentes*/
scanf("%d %d %d", &equis1, &equis2, &equis3);
listar_componentes(equis1,equis2,equis3);
break;

           case 8: /*Demostrar*/
equis1=1;
equis2=2;
equis3=3;
jota1=4;
jota2=5;
jota3=6;
escalar1=2;
demostracion();
break;[/color]
}

}


return (0);
}



void suma(int equis1, int equis2, int equis3, int jota1, int jota2, int jota3){ /*Funcion suma*/
int zeta1,zeta2,zeta3;
zeta1=equis1+jota1;
zeta2=equis2+jota2;
zeta3=equis3+jota3;
printf("(%d, %d, %d)\n", zeta1,zeta2,zeta3);
}




void resta(int equis1, int equis2, int equis3, int jota1, int jota2, int jota3){ /*Funcion resta*/
int zeta1,zeta2,zeta3;
zeta1=equis1-jota1;
zeta2=equis2-jota2;
zeta3=equis3-jota3;
printf("(%d, %d, %d)\n", zeta1,zeta2,zeta3);
}


int mod(int equis1, int equis2, int equis3){ /*Funcion modulo*/
float modulo;
modulo = sqrt((equis1*equis1)+(equis2*equis2)+(equis3*equis3));
return(modulo);
}

int mod1(int jota1, int jota2, int jota3){
float modulo1;
modulo1 = sqrt((jota1*jota1)+(jota2*jota2)+(jota3*jota3));
return(modulo1);
}


void escalar_por_vector(int equis1, int equis2, int equis3, int escalar1){ /*Funcion escalar por vector*/
int zeta1,zeta2,zeta3;
zeta1=equis1*escalar1;
zeta2=equis2*escalar1;
zeta3=equis3*escalar1;
printf("(%d, %d, %d)\n", zeta1,zeta2,zeta3);
}

int producto_escalar(int equis1, int equis2, int equis3, int jota1, int jota2, int jota3){ /*Funcion producto escalar de dos vectores*/
int resultado;
resultado = ((equis1*jota1)+(equis2*jota2)+(equis3*jota3));
return (resultado);
}


void producto_vectorial(int equis1, int equis2, int equis3, int jota1, int jota2, int jota3){ /*Funcion producto vectorial*/
int zeta1, zeta2, zeta3;
zeta1=((equis2*jota3)-(equis3*jota2));
zeta2=((equis1*jota3)-(equis3*jota1));
zeta3=((equis1*jota2)-(equis2*jota1));
printf("(%d, %d, %d)\n",zeta1, zeta2, zeta3);
}


void listar_componentes(int equis1, int equis2, int equis3){ /*Funcion listar componentes*/
printf("(%d, %d, %d)\n", equis1, equis2, equis3);
}

void listar_componentes1(int jota1, int jota2, int jota3){
printf("(%d, %d, %d)\n", jota1, jota2, jota3);
}

void demostracion(){

int equis1, equis2, equis3, jota1, jota2, jota3, modulo, modulo1, resultado,escalar1; /*Funcion demostracion*/

suma(equis1,equis2,equis3,jota1,jota2,jota3);

resta(equis1,equis2,equis3,jota1,jota2,jota3);

modulo = mod(equis1,equis2,equis3);
printf("El módulo será: %f\n", modulo);
modulo1 = mod1(jota1,jota2,jota3);
printf("El módulo será: %f\n", modulo1);
escalar_por_vector(jota1, jota2, jota3, escalar1);

resultado = producto_escalar(equis1,equis2,equis3,jota1,jota2,jota3);
printf("%d \n", resultado);
producto_vectorial(equis1,equis2,equis3,jota1,jota2,jota3);

listar_componentes(equis1,equis2,equis3);

listar_componentes1(jota1,jota2,jota3);

}




Los vectores con los que debería trabajar son, (1,2,3) y el (4,5,6), y un escalar 2. Los resultados que me da el programa son:
(252393256, 1027456316, 1031621970)                                                         "Suma"
(252393256, -1027390782, -1023225128)                                                         "Resta"
El módulo será: 0.000000
El módulo será: 0.000000
(0, -2105009848, -2105009848)                                                                       "Escalar por vector"
-1971644220                                                                                                      "Prod, escalar"
(944204994, -296178552, -296178552)                                                               "Prod Vectorial"
(252393256, 32767, 4198421)                                                                              "Listar
(0, 1027423549, 1027423549)                                                                                 componentes"




Ayuda por favor, no tengo ni idea de como se hace esto para que haga bien las operaciones.

¿Están bien llamadas las funciones en la ultima funcion? Si es asi, ¿será porque defino mal las variables en el case:8?


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Como llamar a una funcion dentro de otra funcion. Una ayuda urgentemente porfavo
« Respuesta #1 en: 14 Abril 2013, 03:07 am »

Para empezar las funciones para modulo y listar las tienes duplicadas, en el caso de la primera:
Código
  1. int mod(int equis1, int equis2, int equis3){ /*Funcion modulo*/
  2.   float modulo;
  3.   modulo = sqrt((equis1*equis1)+(equis2*equis2)+(equis3*equis3));
  4.   return(modulo);
  5. }
  6.  
  7. int mod1(int jota1, int jota2, int jota3){
  8.   float modulo1;
  9.   modulo1 = sqrt((jota1*jota1)+(jota2*jota2)+(jota3*jota3));
  10.   return(modulo1);
  11. }
Con una basta (elimina la otra).

----

El programa no funciona correctamente porque las variables que declaras en una función son locales a esta, ninguna otra función puede acceder a ellas.

Caso concreto: declaras variables como "equis1", "equis2", "equis3", etc. en la función main. Esas variables son distintas de las variables que declaras en la función "demostracion". El problema es que las variables en main si tienen un valor inicial mientras que este falta en "demostracion".

Para solucionarlo debes modificar la función "demostracion" para que acepte como argumentos el valor inicial de las siete variables, estas deben ser parámetros de la función.

Los cambios son:

1) Cambiar su declaración a:
Código
  1. void demostracion(
  2.   int equis1, int equis2, int equis3,
  3.   int jota1, int jota2, int jota3,
  4.   int escalar1
  5. );

2) Cambiar su definición a:
Código
  1. void demostracion(
  2.   int equis1, int equis2, int equis3,
  3.   int jota1, int jota2, int jota3,
  4.   int escalar1
  5. )
  6. {
  7.   int modulo, modulo1, resultado; /*Funcion demostracion*/
  8.  
  9.   suma(equis1,equis2,equis3,jota1,jota2,jota3);
  10.  
  11.   /* ... */
  12. }

3) El caso ocho en la función main cambia a:
Código
  1. case 8:  /*Demostrar*/
  2.   demostracion(1, 2, 3, 4, 5, 6, 2);
  3.   break;

Un saludo


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

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