Foros del Web » Programación para mayores de 30 ;) » C/C++ »

1º ejercicio con punteros ..

Estas en el tema de 1º ejercicio con punteros .. en el foro de C/C++ en Foros del Web. Hola,vereis acabo de empezar con el tema de funciones por referencias y me meti con el primer ejercicio.. a mi parecer la logica esta bien.. ...
  #1 (permalink)  
Antiguo 25/04/2010, 04:57
 
Fecha de Ingreso: marzo-2010
Mensajes: 127
Antigüedad: 14 años
Puntos: 2
1º ejercicio con punteros ..

Hola,vereis acabo de empezar con el tema de funciones por referencias y me meti con el primer ejercicio.. a mi parecer la logica esta bien.. pero me da errores en la funcion y en la llamada de la funcion..
porfis os dejo mi codigo y si veis los errores indicarmelos.. gracias =)
Código C:
Ver original
  1. /*                      PUNTEROS EJERCICIOS FUNCIONES POR REFERENCIA....
  2. 1.  Crear una función a la que se le parará un entero real y lo modificará por
  3. el valor producido al truncar su parte entera.
  4. Genera el programa principal para poder ejecutar la función creada.    */
  5.  
  6. #include<stdio.h>
  7. float trun(float *);
  8. void main(){
  9.  
  10. float n,*p;
  11.  
  12. printf("Introduce un entero real:\n");
  13. scanf("%f",&n);
  14. p=&n;     //inicializado puntero.
  15. trun(*p);   //llamo a la funcion..
  16. printf("El resultado es: %f\n",n);
  17. }
  18.  
  19. float trun(float *n1){     //funcion truncar parte entera
  20.   float aux;
  21. aux=*n1%10;
  22. *n1=aux;           //el valor que se encuentra en el puntero lo divido entre 10 y el resto seria *n1
  23.  
  24.  
  25. }
  #2 (permalink)  
Antiguo 25/04/2010, 13:14
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años
Puntos: 1360
Respuesta: 1º ejercicio con punteros ..

Ok, tienes varios errores.

Por ejemplo:
Código:
trun(*p);
debería ser
Código:
trun(p);
Otra cosa es que esa función, no esta truncando la parte entera. Es mas el operador modulo no soporta flotantes (pero si existe una función para el modulo flotante, véase fmod en math.h).

Solo como aclaración. El operador *
1.- En la declaración se usa para declarar punteros. Ejemplo
Código:
int *puntero, numero;
2.- Mientras que en cualquier otra parte del programa significa desreferenciar (o sea, obtener el valor de donde esta apuntando. Ejemplo
Código:
puntero = &numero; /*Ahora puntero tiene la dirección de memoria de numero*/
*puntero = 5; /*Ahora numero tiene 5*/
  #3 (permalink)  
Antiguo 25/04/2010, 15:26
 
Fecha de Ingreso: marzo-2010
Mensajes: 127
Antigüedad: 14 años
Puntos: 2
Respuesta: 1º ejercicio con punteros ..

Hola,gracias por responder razpetia,ya corregi los errores que tenia y modifique la funcion ,y ya no me da errores al compilar pero me muestra el valor entero no me lo quita..
os pongo mi codigo..
Código C:
Ver original
  1. /*                      /*                      PUNTEROS EJERCICIOS FUNCIONES POR REFERENCIA....
  2. 1.  Crear una función a la que se le parará un entero real y lo modificará por
  3. el valor producido al truncar su parte entera.
  4. Genera el programa principal para poder ejecutar la función creada.    */
  5.  
  6. #include<stdio.h>
  7. #include<math.h>
  8. void trun(float *);
  9. void main(){
  10.  
  11. float n,*p;
  12.  
  13. printf("Introduce un entero real:\n");
  14. scanf("%f",&n);
  15. p=&n;     //inicializado puntero.
  16. trun(p);   //llamo a la funcion..
  17. printf("El resultado es: %f\n",n);
  18. }
  19.  
  20. void trun(float *n1){     //funcion truncar parte entera
  21.  
  22.   int aux;
  23. aux=fmod(*n1,10);
  24. *n1=aux;        //el valor que se encuentra en el puntero lo divido entre 10 y el resto seria *n1
  25.  
  26.  
  27. }

Última edición por roser24; 25/04/2010 a las 15:48
  #4 (permalink)  
Antiguo 25/04/2010, 17:08
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años
Puntos: 1360
Respuesta: 1º ejercicio con punteros ..

Eso es por que la operación modulo 10 con un flotante te quita la parte entera.

Te daré una idea de lo que podrías hacer.

Tienen un flotante, lo conviertes a entero y ese entero se lo restas al flotante.
  #5 (permalink)  
Antiguo 26/04/2010, 08:56
 
Fecha de Ingreso: marzo-2010
Mensajes: 127
Antigüedad: 14 años
Puntos: 2
Respuesta: 1º ejercicio con punteros ..

Hola ,gracias mil gracias aprendi muxo con este ejercicio y gracias a ti razpetia,
te pongo mi codigo que compila y ejecuta correctamente.

Código C:
Ver original
  1. /*                      /*                      PUNTEROS EJERCICIOS FUNCIONES POR REFERENCIA....
  2. 1.  Crear una función a la que se le parará un entero real y lo modificará por
  3. el valor producido al truncar su parte entera.
  4. Genera el programa principal para poder ejecutar la función creada.    */
  5.  
  6. #include<stdio.h>
  7. #include<math.h>
  8. void trun(float *);
  9. void main(){
  10.  
  11. float n,*p;
  12.  
  13. printf("Introduce un entero real:\n");
  14. scanf("%f",&n);
  15. p=&n;     //inicializado puntero.
  16. trun(p);   //llamo a la funcion..
  17. printf("El resultado es: %f\n",n);
  18. }
  19.  
  20. void trun(float *n1){     //funcion truncar parte entera
  21.  
  22. int aux=0;
  23. aux=int(*n1);
  24. *n1=*n1-aux;        //el valor que se encuentra en el puntero lo divido entre 10 y el resto seria *n1
  25.  
  26.  
  27. }
  #6 (permalink)  
Antiguo 27/04/2010, 10:40
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años
Puntos: 1360
Respuesta: 1º ejercicio con punteros ..

Una aclaración fmod es el reciduo de operar 2 flotantes.

Pero modf, te da la parte entera y la parte en fracción todo en una función.

Ejemplo:
Código C:
Ver original
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. int main (){
  5.   double pi, parte_fraccionaria, parte_entera;
  6.  
  7.   pi = 3.14159265;
  8.   parte_fraccionaria = modf (pi , &parte_entera);
  9.   printf ("%lf = %lf + %lf \n", pi, parte_entera, parte_fraccionaria);
  10.   return 0;
  11. }

Etiquetas: punteros
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:17.