Clase de mañana

23 views
Skip to first unread message

Juan Pablo Capurro

unread,
Sep 12, 2018, 10:22:17 PM9/12/18
to algoritmos7540-mm

Hola!

Mañana vamos a ver cómo podemos mejorar la modularización haciendo uso de pasaje de parámetros por referencia.
Refrescando la resolución que había llevado como tentativa:

#include<stdio.h>
#include<stdbool.h>
const double LIMITE_PUNTOS_JUEGO = 7.5;
const char OPCION_SEGUIR='y';

bool seguir_jugando(){
    char opcion;
    puts("Queres una carta?");
    scanf(" %c",&opcion);
    return opcion == OPCION_SEGUIR;
}

double obtener_valor_a_sumar(){
  int numero_aleatorio;
  puts("psst! necesito un numero aleatorio 1-10");
  scanf(" %i", &numero_aleatorio);
  if(numero_aleatorio>7){
    return 0.5;
  } else{
    return numero_aleatorio;
  }
}

int main(){
  double puntos_jugador_1=0, puntos_jugador_2=0;
  bool sigue_jugador_1 = true, sigue_jugador_2 = true;

  while (sigue_jugador_1 || sigue_jugador_2){
    puts("Jugador 1");
    if(seguir_jugando()){
      puntos_jugador_1 += obtener_valor_a_sumar();
      printf("Tenes %lf puntos\n", puntos_jugador_1);
      if (puntos_jugador_1 > LIMITE_PUNTOS_JUEGO) {
        puts("Te pasaste! Perdiste!");
        sigue_jugador_1 = false;
      }
    } else {
      sigue_jugador_1 = false;
    }
    puts("Jugador 2");
    if(seguir_jugando()){
      puntos_jugador_2 += obtener_valor_a_sumar();
      printf("Tenes %lf puntos\n", puntos_jugador_2);
      if (puntos_jugador_2 > LIMITE_PUNTOS_JUEGO) {
        puts("Te pasaste! Perdiste!");
        sigue_jugador_2 = false;
      }
    } else {
      sigue_jugador_2 = false;
    }
  }
  printf("El juego termino. \nEl jugador 1 tiene %lf, y el 2 %lf", puntos_jugador_1, puntos_jugador_2);
  return 0;

}

Creo que podría aportarles ver cómo lo pensé yo:

#include<stdio.h>
#include<stdbool.h>
const double LIMITE_PUNTOS_JUEGO = 7.5;
const char OPCION_SEGUIR='y';

bool seguir_jugando();
double obtener_valor_a_sumar();
bool jugar(double* puntos);

int main(){
  double puntos_jugador_1=0, puntos_jugador_2=0;
  bool sigue_jugador_1 = true, sigue_jugador_2 = true;

  while (sigue_jugador_1 || sigue_jugador_2){
    if(sigue_jugador_1){
      puts("Jugador 1");
      sigue_jugador_1 = jugar(&puntos_jugador_1);
    }
    if(sigue_jugador_2){
      puts("Jugador 2");
      sigue_jugador_2 = jugar(&puntos_jugador_2);
    }
  }
  printf("El juego termino. \nEl jugador 1 tiene %lf, y el 2 %lf\n", puntos_jugador_1, puntos_jugador_2);
  return 0;
}

double obtener_valor_a_sumar(){
  int numero_aleatorio;
  puts("psst! necesito un numero aleatorio 1-10");
  scanf(" %i", &numero_aleatorio);
  if(numero_aleatorio>7){
    return 0.5;
  } else{
    return numero_aleatorio;
  }
}

bool seguir_jugando(){
  char opcion;
  printf("Queres una carta? %c/n\n", OPCION_SEGUIR);
  scanf(" %c",&opcion);
  return opcion == OPCION_SEGUIR;
}

bool jugar(double* puntos){
  if(seguir_jugando()){
    *puntos += obtener_valor_a_sumar();
    printf("Tenes %lf puntos\n", *puntos);
    if (*puntos > LIMITE_PUNTOS_JUEGO) {
      puts("Te pasaste! Perdiste!");
      return false;
    } else {
      return true;
    }
  } else {
    return false;
  }
}

Noten como ahora ya no repetimos todo el flujo del juego para cada jugador, y el main se lee más como el flujo de un juego, y menos como un programa de C ✨

Preparen las consultas que tengan sobre esta implementación, nos interesa saber cómo lo pensaron ustedes.

Nos vemos el jueves!


Saludos, Juan Pablo >^.^<.

Reply all
Reply to author
Forward
0 new messages