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");
}
No tienes que pasarlo, nfilas y ncolumnas son globales.
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
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");
}
}
}
}
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
:-X Pusshhh necesito lentes! Gracias a los dos.