Problema con constantes en c

Iniciado por BJM, 20 Marzo 2013, 14:58 PM

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

BJM

El error se produce en la linea 11: void mostrarvendidos(int venta[][ncolumnas], int nfilas,int ncolumnas), paso las constantes nfilas y ncolumnas como parametro, es valido?

#include <stdlib.h>
#include <stdio.h>
#define ncolumnas 2
#difine nfilas 2
#define libre 0
#define ocupado 1

int menu();
void reservarboletos(int venta[][ncolumnas]);
void cancelarboletos(int venta[][ncolumnas]);
void mostrarvendidos(int venta[][ncolumnas], int nfilas,int ncolumnas);


int menu(){
    system("color 21");
    int resp;
    printf("\n\n");
    printf("\t *** \n");
    printf("\n 1 reservar boletos");
    printf("\n 2 cancelar boletos");
    printf("\n 3 mostrar boletos");
    printf("\n 4 salir");
    printf("\n Eleccion: ");
    scanf("%d",&resp);
    return resp;
}

void reservarboletos(int venta[][ncolumnas]){
     int fila=0,col=0;
     printf("\n Ingrese fila del asiento: "); scanf("%d",&fila);
     printf("\n Ingrese columna del asiento: "); scanf("%d",&col);
     if(venta[fila][col]==ocupado){
     printf("\n Asiento ocupado ");
     }
     else{
          venta[fila][col]==ocupado;
          printf("\n Asiento[%d][%d] reservado con exito",fila,col);
          }
          }
     
void cancelarboletos(int venta[][ncolumnas]){
     int fila=0,col=0;
     printf("\n Ingrese fila del asiento a cancelar: "); scanf("%d",&fila);
     printf("\n Ingrese columna del asiento a cancelar: "); scanf("%d",&col);
     if(venta[fila][col]!=ocupado){
     printf("\n Asiento no reservado");
     }
     else{
          venta[fila][col]=libre;
          printf("\n Asiento [%d][%d] ha sido cancelado",fila,col);
          }
          }
         
void mostrarvendidos(int venta[][ncolumnas]){
     for(int i=0;i<nfilas;i++){
      for(int j=0;j<ncolumnas;j++)
      if(venta[][ncolumnas]==ocupado){
        printf("\n Asiento[%d][%d]: Ocupado\n",i,j);
        }
        else{
             printf("\n Asiento[%d][%d]: Libre\n",i,j);
             }
       
        }
        }
     
         
main(){
       int puest=0;
       do{
       switch(menu()){
       case 1:
            if(puest<4){
            reservarboletos(venta);
            puest++;
            }
            else{
                 printf("\n Agotados los puestos");
                 }
            break;
       case 2:
            cancelarboletos(venta);
            break;
       case 3:
            mostrarvendidos(venta,nfilas,ncolumnas);
            break;
       case 4:
            printf("\n ***FIN***");
            break;
       }
       }while((resp>0)&&(resp<4));
       printf("\n\n");
       system("pause");
       }
       

amchacon

No tienes que pasarlo, nfilas y ncolumnas son globales.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

rir3760

Cita de: BJM en 20 Marzo 2013, 14:58 PMEl error se produce en la linea 11: void mostrarvendidos(int venta[][ncolumnas], int nfilas,int ncolumnas), paso las constantes nfilas y ncolumnas como parametro, es valido?
No. El problema se debe a que el preprocesador actúa primero y al sustituir las macros en la declaración:
#define ncolumnas 2
/* "difine" cuando deberia ser "define" */
#difine nfilas 2

/* ... */

void mostrarvendidos(int venta[][ncolumnas], int nfilas,int ncolumnas);

Esta termina como:
void mostrarvendidos(int venta[][ncolumnas], int 2,int 2);
Por eso el compilador genera el mensaje de error.

Para solucionarlo solo tienes que cambiarla para que coincida con su definición:
void mostrarvendidos(int venta[][ncolumnas]);

Hay otros errores en el programa:

* Uso del operador de comparación "==" cuando debería ser asignación "=":
venta[fila][col]==ocupado;

* En la función "mostrarvendidos" no indicas el indice del elemento a procesar:
if(venta[][ncolumnas]==ocupado){

* El array venta tienes que declararlo en la función main y pasarlo a las otras funciones (falta).

* La variable resp la debes declarar en la función main (falta).

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

BJM

Gracias ya he pulido los errores que mencionaste , ahora el problema es lo siguiente:

         ***

1 reservar boletos
2 cancelar boletos
3 mostrar boletos
4 salir
Eleccion: 1

Ingrese fila del asiento: 0

Ingrese columna del asiento: 0

Asiento[0][0] reservado con exito

         ***

1 reservar boletos
2 cancelar boletos
3 mostrar boletos
4 salir
Eleccion: 3

Asiento[0][0]:=>libre
Asiento[0][1]:=>libre
Asiento[1][0]:=>libre
Asiento[1][1]:=>libre

         ***

1 reservar boletos
2 cancelar boletos
3 mostrar boletos
4 salir
Eleccion:


Este es el prog ejecutable, reservo el asiento
  • , pero luego cuando selecciono mostrar boletos el asiento[0][0] dice estar libre cuando deberia estar ocupado.

    #include <stdlib.h>
    #include <stdio.h>
    #define NCOLUMNAS 2
    #define NFILAS 2
    #define LIBRE 0
    #define OCUPADO 1

    int mostrarmenu();
    void reservarboletos(int venta[NFILAS][NCOLUMNAS]);
    void cancelarboletos(int venta[NFILAS][NCOLUMNAS]);
    void mostrarvendidos(int venta[NFILAS][NCOLUMNAS]);


    int resp=0;     
    main(){
           
           int boletos[NFILAS][NCOLUMNAS]={0};
           do{
           switch(mostrarmenu()){
           case 1:
                reservarboletos(boletos);
                break;
           case 2:
                cancelarboletos(boletos);
                break;
           case 3:
                mostrarvendidos(boletos);
                break;
           case 4:
                printf("\n ***FIN***");
                break;
           }
           }while((resp>0)&&(resp<4));
           printf("\n\n");
           system("pause");
           }
           
    int mostrarmenu(){
        system("color 3a");
       
        printf("\n\n");
        printf("\t *** \n");
        printf("\n 1 reservar boletos");
        printf("\n 2 cancelar boletos");
        printf("\n 3 mostrar boletos");
        printf("\n 4 salir");
        printf("\n Eleccion: ");
        scanf("%d",&resp);
        return resp;
    }

    void reservarboletos(int venta[NFILAS][NCOLUMNAS]){
         int fila,col;
         printf("\n Ingrese fila del asiento: ");
         scanf("%d",&fila);
         printf("\n Ingrese columna del asiento: ");
         scanf("%d",&col);
         if(venta[fila][col]==OCUPADO)
         {
         printf("\n Asiento ocupado ");
         }
         else{
              venta[fila][col]==OCUPADO;
              printf("\n Asiento[%d][%d] reservado con exito",fila,col);
              }
              }
         
    void cancelarboletos(int venta[NFILAS][NCOLUMNAS]){
         int fila,col;
         printf("\n Ingrese fila del asiento a cancelar: ");
         scanf("%d",&fila);
         printf("\n Ingrese columna del asiento a cancelar: ");
         scanf("%d",&col);
         if(venta[fila][col]==LIBRE){
         printf("\n Asiento no reservado");
         }
         else{
              venta[fila][col]=LIBRE;
              printf("\n Asiento [%d][%d] ha sido cancelado",fila,col);
              }
              }
             
    void mostrarvendidos(int venta[NFILAS][NCOLUMNAS]){
         int i,j;
         for(i=0;i<NFILAS;i++){
          for(j=0;j<NCOLUMNAS;j++){
            printf("\n Asiento[%d][%d]:",i,j);
            if(venta[i][j]==LIBRE){
            printf("=>libre");
            }
            else{
            printf("=>ocupado");
            }
            }
               }
                   }
         

durasno

Hola! el error ya te lo marco rir3760 antes:
Citar* Uso del operador de comparación "==" cuando debería ser asignación "=":"

En reservaboletos() debes usar la asignacion:
     else{
         venta[fila][col]==OCUPADO; /* <--- aca va el "=" no el "==" */
         printf("\n Asiento[%d][%d] reservado con exito",fila,col);
         }
         }



Saludos
Ahorrate una pregunta, lee el man

BJM

 :-X Pusshhh necesito lentes! Gracias a los dos.