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

¿Alguien me puede explicar punteros con este programa?

Estas en el tema de ¿Alguien me puede explicar punteros con este programa? en el foro de C/C++ en Foros del Web. Buenas! Creo que el programa es más bien sencillo, pero a ver si así puedo comprender punteros, el programa pide que devuelva el menor de ...
  #1 (permalink)  
Antiguo 20/08/2013, 02:22
 
Fecha de Ingreso: julio-2013
Mensajes: 11
Antigüedad: 10 años, 9 meses
Puntos: 0
¿Alguien me puede explicar punteros con este programa?

Buenas! Creo que el programa es más bien sencillo, pero a ver si así puedo comprender punteros, el programa pide que devuelva el menor de 3 números:

Código:
#include <stdio.h>
#include <stdlib.h>

float menor(float,float,float);
void swap(float*,float*);

int main() {
    // declaraciÛn de variables
    float a, b, c;
    
    // cuerpo de main()
    printf("Introduce 3 reales: ");
    scanf("%f%f%f", &a, &b, &c);
    
    printf("El menor es: %f\n", menor(a, b, c));
    
    system("pause");
    return 0;
}

void swap(float *a, float *b) {
    float aux;
    
    aux = *a;
    *a = *b;
    *b = aux;
}

float menor(float a, float b, float c) {
    if(a > b) swap(&a, &b);
    if(b > c) swap(&b, &c);
    if(a > b) swap(&a, &b);
    
    return a;
}
Entonces si a>b envía la direccion de la variable a y b a la función swap, perfecto. Luego swap recibe el contenido de la dirección de a y b y cambia los valores para que el menor sea a. Pero luego compara b y c y cuando la función devuelve los valores de swap, habiéndole pasado if(b > c) swap(&b, &c); , ¿donde los graba en a / b? es que ahí es donde me quedo.
Si alguien fuera tan amable de explicármelo qué hace el puntero ahí se lo agradecería mucho en serio.


Gracias!
  #2 (permalink)  
Antiguo 20/08/2013, 19:13
 
Fecha de Ingreso: enero-2012
Ubicación: Buenos Aires
Mensajes: 745
Antigüedad: 12 años, 3 meses
Puntos: 35
Respuesta: ¿Alguien me puede explicar punteros con este programa?

No entendí nada, podés explicarte mejor? No entiendo tu pregunta. En la segunda llamada a swap(), esta función cambia los valores de b y c. Qué tiene que ver con a y b? Me parece que se hace confuso por usar los mismos nombres para todas las variables. Usá un array para el input u otros nombres.
  #3 (permalink)  
Antiguo 23/08/2013, 13:02
 
Fecha de Ingreso: diciembre-2011
Ubicación: Crespo - Entre Rios
Mensajes: 155
Antigüedad: 12 años, 4 meses
Puntos: 25
Respuesta: ¿Alguien me puede explicar punteros con este programa?

tendrias que anidar los if:

Código C++:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. float menor(float,float,float);
  5. void swap(float*,float*);
  6.  
  7. int main() {
  8.     // declaraciÛn de variables
  9.     float a, b, c;
  10.    
  11.     // cuerpo de main()
  12.     printf("Introduce 3 reales: ");
  13.     scanf("%f%f%f", &a, &b, &c);
  14.    
  15.     printf("El menor es: %f\n", menor(a, b, c));
  16.    
  17.     system("pause");
  18.     return 0;
  19. }
  20.  
  21. void swap(float *a, float *b) {
  22.     float aux;
  23.    
  24.     aux = *a;
  25.     *a = *b;
  26.     *b = aux;
  27. }
  28.  
  29. float menor(float a, float b, float c) {
  30.    
  31.     if(a > b) {
  32.       swap(&a, &b);
  33.       if (a>c){
  34.          swap(&a, &c);
  35.       }
  36.     else if(a > c) swap(&a, &c);
  37.    
  38.     return a;
  39. }


creo que ahí debería funcionar.

- si a es mayor a b, se cambian de posición y queda el menor en a
- si se cumplió lo anterior, se comprueba que el valor en a sea menor a c, si es asi, se coloca en a el menor
-en caso de que no se cumpla el primero punto (a es menor o igual a b), se comprueba si a es mayor a c y, si esto es cierto, se coloca en a el menor

Etiquetas: int, programa, 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 19:13.