Reserva de asientos en un cine

Iniciado por sora_ori, 22 Enero 2014, 22:05 PM

0 Miembros y 2 Visitantes están viendo este tema.

sora_ori

Hola compañeros,

Estoy haciendo un programa en C que me haga con una matriz los asientos de un cine, y me ha surgido un problema tonto. Cuando asigno un asiento reservado y muestro por pantalla me aparece así:



Yo escogí reservar fila 3 y columa 3 y me reserva los anteriores, es decir, donde he marcado en rojo debería estar en "0".

                      printf("\nEscribe la fila: ");
                      scanf("%d", &fila);
                      printf("\nEscribe la columna: ");
                      scanf("%d", &columna);
                     
                      for (i=0; i<fila; i++) {
                          for (j=0; j<columna; j++) {;}
                          if (mat[i][j] != 1){   
                             mat[i][j] = 1;
                          }
                          else printf("Asiento ocupado");
                      }




Gracias!

engel lex

Decidiste reservas fila 3 Y columna 3 o decifiste reservar el asiento que cumpla ambas condiciones?
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

sora_ori

Solamente el asiento, como se ve en la imagen, el color verde es el correcto, el color rojo es lo que sobra.


Saludos

ivancea96

Tal como está, yo quitaría los 2 for, y lo dejaría:

Código (cpp) [Seleccionar]

if (mat[i][j] != 1){   
      mat[i][j] = 1;
}
else printf("Asiento ocupado");

sora_ori

@ivancea96

De esa forma no me funciona. Si no recorro la matriz no se puede hacer nada.

dato000

Puede ser que el scanf este guardando en el buffer de memoria el salto de linea lo que provoca esos errores.

Intenta con:
printf("\nEscribe la fila: ");
scanf("%d%c", &fila);  //Para cuando presiones Enter
printf("\nEscribe la columna: ");
scanf("%d%c", &columna);  //Para cuando presiones Enter

for (i=0; i<fila; i++) {
      for (j=0; j<columna; j++) {;}  // WAAAAAAT???
             if (mat[i][j] != 1){   
                      mat[i][j] = 1;
             }
             else printf("Asiento ocupado");
}





rir3760

Cita de: sora_ori en 22 Enero 2014, 22:05 PMEstoy haciendo un programa en C que me haga con una matriz los asientos de un cine, y me ha surgido un problema tonto. Cuando asigno un asiento reservado y muestro por pantalla me aparece así:
El problema se debe a que por alguna extraña razón estas utilizando un bucle:
printf("\nEscribe la fila: ");
scanf("%d", &fila);

printf("\nEscribe la columna: ");
scanf("%d", &columna);

for (i = 0; i < fila; i++){
   for (j = 0; j < columna; j++){
      ; /* Este es el cuerpo del bucle */
   }
   /* El valor final de "j" es "columna" */
   
   if (mat[i][j] != 1){ /* Si mat[i][columna] != 1 ... */
      mat[i][j] = 1;
   }else
      printf("Asiento ocupado");
}


Basta con eliminar el bucle, quedando así:
puts("Escribe la fila:");
scanf("%d", &fila);

puts("Escribe la columna:");
scanf("%d", &columna);

if (mat[fila][columna] != 1)
   mat[i][j] = 1;
else
   puts("Asiento ocupado");


Un saludo
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

sora_ori

Gracias "dato000" y "rir3760" por la ayuda, hice las sugerencias de ambos y me sigue printando igual (en el caso de "dato000") y en el caso de "rir3760" me lo deja todo en 0.


Saludos

ivancea96

Código (cpp) [Seleccionar]
if (mat[fila][columna] != 1)
   mat[fila][columna] = 1;
else
   puts("Asiento ocupado");


Si con eso que hemos dicho, sin los bucles, no te va, es que ha de haber algo mal en el código.

sora_ori

Posteo todo el code haber si así me podeis ayudar a encontrar el error.

Gracias!


#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(){
    srand(time(NULL));
    int opcion, i, j, fila, columna;
    int mat[20][15];

    while (opcion != 0){
          system("cls");
          printf("1.- Vaciar sala\n");
          printf("2.- Visualizar asientos disponibles\n");
          printf("3.- Reservar asientos\n");
          printf("0.- Salir\n");
          printf("\nEscoge una opcion: ");
          fflush(stdin);
          scanf("%d", &opcion);
         
          switch (opcion){
                 case 1: // Vaciar sala
                      system("cls");
                      for (i=0; i<20; i++) {
                          for (j=0; j<15; j++) {
                              mat[i][j] = 0;
                          }
                      }
                      printf("La sala ha sido vaciada correctamente");
                      getch();
                      break;
                     
                 case 2: // Visualizar asientos disponibles
                      system("cls");
                      for (i=0; i<20; i++) {
                          printf("\n");
                          for (j=0; j<15; j++) {
                              printf(" %d ", mat[i][j]);
                          }
                          printf("\n");
                      }
                      getch();
                      break;

                 case 3: // Reservar asientos
                      system("cls");
                      printf("\tReserva de asientos");
                      printf("\n------------------------------\n");
                      printf("\nEscribe la fila: ");
                      scanf("%d%c", &fila);
                      printf("\nEscribe la columna: ");
                      scanf("%d%c", &columna);
                     
                      for (i=0; i<fila; i++) {
                         for (j=0; j<columna; j++) {;}
                          if (mat[i][j] != 1){   
                             mat[i][j] = 1;
                          }
                          else printf("Asiento ocupado");
                     }
                     
                      getch();
                      break;
                     
                 case 0:
                      system("cls");
                      printf("Has decidido salir, hasta luego");
                      getch();
                      return 0;
                      break;
                 
                 } // Fin switch
    } // Fin while

    getch();
    return 0;
}