Void, float y pasos por referencia

Iniciado por fedegar91, 6 Mayo 2011, 10:55 AM

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

fedegar91

hola amigos, no recuerdo mi cuenta aqui y me tuve que hacer otra ¬¬.
Al loro, nada, preguntarles acerca de los pasos por referencia que necesito para la programacion de una calculadora. Les paso una parte del codigo, ya que es extenso y lo unico que resta son los printf y los scan para guardar las variables a,b,c,d...

el subcodigo o void de la division es el que me genera problemas, lo unico que hago es realizar las ecuaciones a mano y luego poner todo en funcion de las variables, para calcular los valores de x e y. Pero no hay forma de que me funcione, segun mi profe es que necesito hacer pasos por referencias, algo que no tengo ni la mas p**a idea XD.

Creo que no me falta mucho para completar mi codigo o la duda es algo estupida, estuve leyendo posts pero no he encontrado algo "similar" a este problema.

Aqui lo dejo:

[color=red]float division(int a, int b, int c, int d, float y, float x)
  {
       y=((b/(c*c)-(d*a)/(c*c))/(1+(d*d)/c));
       x=((a-d*y)/c);
       printf("\nEl resultado de la division z1/z2 = (%d, %d)\n", x, y);
       
  }[/color]
[hr]

printf("\nEleccion: ");
  scanf("%d", &z);
 
  switch (z)
  {
         case 1:
              suma(a,b,c,d);
              break;
         case 2:
              resta(a,b,c,d);
              break;
         case 3:
              producto(a,b,c,d);
              break;
         [color=red]case 4:
              division(a,b,c,d,&y,&x);
              break;[/color]
         case 5:
              escala(a,b,k);
              break;
         case 6:
              modulo(a,b,&p);
              break;
  }




espero haber sido claro!

suerte y gracias de antemano!!

Akai

Si quieres modificarlos dentro de la función, necesitas pasar punteros para poder pasarlos por referencia, a menos que estes en C++, que la cosa cambia. Por cierto, para imprimir floats, se usa %f

float division(int a, int b, int c, int d, float* y, float* x)
  {
       *y=((b/(c*c)-(d*a)/(c*c))/(1+(d*d)/c));
       *x=((a-d*y)/c);
       printf("\nEl resultado de la division z1/z2 = (%f, %f)\n", x, y);
       
  }

//llamada a división:
división(a,b,c,&y,&x); //de esta forma, pasas las direcciones de x,y. Otra forma sería pasar propiamente punteros a los floats.



En c++, en vez de usar punteros, para pasar algo por referencia, simplemente pones & en el parámetro,cuando defines la función.

float division(int a, int b, int c, int d, float & y, float & x)

sería el caso. uso:

división(a,b,c,y,x)

Pero en este caso y,x si se modifican dentro de la función.