elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con constantes en c
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con constantes en c  (Leído 2,587 veces)
BJM

Desconectado Desconectado

Mensajes: 41


Ver Perfil
Problema con constantes en c
« en: 20 Marzo 2013, 14:58 pm »

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?

Código
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #define ncolumnas 2
  4. #difine nfilas 2
  5. #define libre 0
  6. #define ocupado 1
  7.  
  8. int menu();
  9. void reservarboletos(int venta[][ncolumnas]);
  10. void cancelarboletos(int venta[][ncolumnas]);
  11. void mostrarvendidos(int venta[][ncolumnas], int nfilas,int ncolumnas);
  12.  
  13.  
  14. int menu(){
  15.    system("color 21");
  16.    int resp;
  17.    printf("\n\n");
  18.    printf("\t *** \n");
  19.    printf("\n 1 reservar boletos");
  20.    printf("\n 2 cancelar boletos");
  21.    printf("\n 3 mostrar boletos");
  22.    printf("\n 4 salir");
  23.    printf("\n Eleccion: ");
  24.    scanf("%d",&resp);
  25.    return resp;
  26. }
  27.  
  28. void reservarboletos(int venta[][ncolumnas]){
  29.     int fila=0,col=0;
  30.     printf("\n Ingrese fila del asiento: "); scanf("%d",&fila);
  31.     printf("\n Ingrese columna del asiento: "); scanf("%d",&col);
  32.     if(venta[fila][col]==ocupado){
  33.     printf("\n Asiento ocupado ");
  34.     }
  35.     else{
  36.          venta[fila][col]==ocupado;
  37.          printf("\n Asiento[%d][%d] reservado con exito",fila,col);
  38.          }
  39.          }
  40.  
  41. void cancelarboletos(int venta[][ncolumnas]){
  42.     int fila=0,col=0;
  43.     printf("\n Ingrese fila del asiento a cancelar: "); scanf("%d",&fila);
  44.     printf("\n Ingrese columna del asiento a cancelar: "); scanf("%d",&col);
  45.     if(venta[fila][col]!=ocupado){
  46.     printf("\n Asiento no reservado");
  47.     }
  48.     else{
  49.          venta[fila][col]=libre;
  50.          printf("\n Asiento [%d][%d] ha sido cancelado",fila,col);
  51.          }
  52.          }
  53.  
  54. void mostrarvendidos(int venta[][ncolumnas]){
  55.     for(int i=0;i<nfilas;i++){
  56.      for(int j=0;j<ncolumnas;j++)
  57.      if(venta[][ncolumnas]==ocupado){
  58.        printf("\n Asiento[%d][%d]: Ocupado\n",i,j);
  59.        }
  60.        else{
  61.             printf("\n Asiento[%d][%d]: Libre\n",i,j);
  62.             }
  63.  
  64.        }
  65.        }
  66.  
  67.  
  68. main(){
  69.       int puest=0;
  70.       do{
  71.       switch(menu()){
  72.       case 1:
  73.            if(puest<4){
  74.            reservarboletos(venta);
  75.            puest++;
  76.            }
  77.            else{
  78.                 printf("\n Agotados los puestos");
  79.                 }
  80.            break;
  81.       case 2:
  82.            cancelarboletos(venta);
  83.            break;
  84.       case 3:
  85.            mostrarvendidos(venta,nfilas,ncolumnas);
  86.            break;
  87.       case 4:
  88.            printf("\n ***FIN***");
  89.            break;
  90.       }
  91.       }while((resp>0)&&(resp<4));
  92.       printf("\n\n");
  93.       system("pause");
  94.       }
  95.  
  96.  


En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Problema con constantes en c
« Respuesta #1 en: 20 Marzo 2013, 15:24 pm »

No tienes que pasarlo, nfilas y ncolumnas son globales.


En línea

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


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Problema con constantes en c
« Respuesta #2 en: 20 Marzo 2013, 16:02 pm »

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?
No. El problema se debe a que el preprocesador actúa primero y al sustituir las macros en la declaración:
Código
  1. #define ncolumnas 2
  2. /* "difine" cuando deberia ser "define" */
  3. #difine nfilas 2
  4.  
  5. /* ... */
  6.  
  7. void mostrarvendidos(int venta[][ncolumnas], int nfilas,int ncolumnas);
Esta termina como:
Código
  1. 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:
Código
  1. void mostrarvendidos(int venta[][ncolumnas]);

Hay otros errores en el programa:

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

* En la función "mostrarvendidos" no indicas el indice del elemento a procesar:
Código
  1. 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
En línea

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

Desconectado Desconectado

Mensajes: 41


Ver Perfil
Re: Problema con constantes en c
« Respuesta #3 en: 22 Marzo 2013, 18:27 pm »

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.
Código
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #define NCOLUMNAS 2
  4. #define NFILAS 2
  5. #define LIBRE 0
  6. #define OCUPADO 1
  7.  
  8. int mostrarmenu();
  9. void reservarboletos(int venta[NFILAS][NCOLUMNAS]);
  10. void cancelarboletos(int venta[NFILAS][NCOLUMNAS]);
  11. void mostrarvendidos(int venta[NFILAS][NCOLUMNAS]);
  12.  
  13.  
  14. int resp=0;    
  15. main(){
  16.  
  17.       int boletos[NFILAS][NCOLUMNAS]={0};
  18.       do{
  19.       switch(mostrarmenu()){
  20.       case 1:
  21.            reservarboletos(boletos);
  22.            break;
  23.       case 2:
  24.            cancelarboletos(boletos);
  25.            break;
  26.       case 3:
  27.            mostrarvendidos(boletos);
  28.            break;
  29.       case 4:
  30.            printf("\n ***FIN***");
  31.            break;
  32.       }
  33.       }while((resp>0)&&(resp<4));
  34.       printf("\n\n");
  35.       system("pause");
  36.       }
  37.  
  38. int mostrarmenu(){
  39.    system("color 3a");
  40.  
  41.    printf("\n\n");
  42.    printf("\t *** \n");
  43.    printf("\n 1 reservar boletos");
  44.    printf("\n 2 cancelar boletos");
  45.    printf("\n 3 mostrar boletos");
  46.    printf("\n 4 salir");
  47.    printf("\n Eleccion: ");
  48.    scanf("%d",&resp);
  49.    return resp;
  50. }
  51.  
  52. void reservarboletos(int venta[NFILAS][NCOLUMNAS]){
  53.     int fila,col;
  54.     printf("\n Ingrese fila del asiento: ");
  55.     scanf("%d",&fila);
  56.     printf("\n Ingrese columna del asiento: ");
  57.     scanf("%d",&col);
  58.     if(venta[fila][col]==OCUPADO)
  59.     {
  60.     printf("\n Asiento ocupado ");
  61.     }
  62.     else{
  63.          venta[fila][col]==OCUPADO;
  64.          printf("\n Asiento[%d][%d] reservado con exito",fila,col);
  65.          }
  66.          }
  67.  
  68. void cancelarboletos(int venta[NFILAS][NCOLUMNAS]){
  69.     int fila,col;
  70.     printf("\n Ingrese fila del asiento a cancelar: ");
  71.     scanf("%d",&fila);
  72.     printf("\n Ingrese columna del asiento a cancelar: ");
  73.     scanf("%d",&col);
  74.     if(venta[fila][col]==LIBRE){
  75.     printf("\n Asiento no reservado");
  76.     }
  77.     else{
  78.          venta[fila][col]=LIBRE;
  79.          printf("\n Asiento [%d][%d] ha sido cancelado",fila,col);
  80.          }
  81.          }
  82.  
  83. void mostrarvendidos(int venta[NFILAS][NCOLUMNAS]){
  84.     int i,j;
  85.     for(i=0;i<NFILAS;i++){
  86.      for(j=0;j<NCOLUMNAS;j++){
  87.        printf("\n Asiento[%d][%d]:",i,j);
  88.        if(venta[i][j]==LIBRE){
  89.        printf("=>libre");
  90.        }
  91.        else{
  92.        printf("=>ocupado");
  93.        }
  94.        }
  95.           }
  96.               }
  97.  
  98.  
En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: Problema con constantes en c
« Respuesta #4 en: 22 Marzo 2013, 23:25 pm »

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:
Código
  1.     else{
  2.         venta[fila][col]==OCUPADO; /* <--- aca va el "=" no el "==" */
  3.         printf("\n Asiento[%d][%d] reservado con exito",fila,col);
  4.         }
  5.         }


Saludos
En línea

Ahorrate una pregunta, lee el man
BJM

Desconectado Desconectado

Mensajes: 41


Ver Perfil
Re: Problema con constantes en c
« Respuesta #5 en: 27 Marzo 2013, 18:30 pm »

 :-X Pusshhh necesito lentes! Gracias a los dos.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Constantes fallas con el CloneDVD
Software
kines 1 1,895 Último mensaje 13 Julio 2005, 23:07 pm
por Siuto
constantes
Programación Visual Basic
geel 1 1,599 Último mensaje 12 Junio 2006, 17:26 pm
por NYlOn
Constantes Hexedecimales
Programación Visual Basic
Yekka 2 1,796 Último mensaje 4 Noviembre 2007, 03:40 am
por HaDeS, -
Constantes del teclado (VK_)
Programación Visual Basic
Majinz 3 4,757 Último mensaje 27 Septiembre 2011, 12:29 pm
por Majinz
[Solucionado] Constantes de carácter y constantes de cadena de carácteres
Programación C/C++
Caster 4 4,369 Último mensaje 20 Febrero 2012, 15:43 pm
por Caster
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines