Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: raenriquez4 en 17 Agosto 2016, 04:46 am



Título: ayuda por favor con un ejercicio, dev c++
Publicado por: raenriquez4 en 17 Agosto 2016, 04:46 am
necesito realizar un ejercicio que dice lo siguiente en el tema de arrays:
 
Una aerolínea necesita un programa que asigne asientos en cada vuelo de avión de la misma (capacidad 20 asientos) el programa deberá demostrar el siguiente menú:
por favor ingrese 1 para fumadores
por favor ingrese 2 para no fumadores
si la persona escribe 1 deberá asignarse un asiento en la sección de fumar (asientos 1 al 10)
 si la persona escribe 2 de igual forma (asientos 11 al 20) a continuación se deberá imprimir un pase de abordaje indicando el numero de asiento de la persona si esta en la sección o no del avión
utilizar un arreglo unidimensional para representar el diagrama de asientos de avión, previamente inicializar todos lo elementos del arreglo a 0 para indicar que todos están vacíos, conforme se asigne cada asiento definir los elementos correspondiente del arreglo a 1 para indicar que dicho asiento no esta disponible, el programa no deberá asignar un asiento ocupado cuando se llene la sección de fumar, se deberá solicitar a la persona si le parece aceptable ser colocada en la de no fumar, (o viceversa), si dice que si entonces efectuar la asignación apropiada, si dice que no, imprimir el mensaje, el proximo vuelo ale en 3 horas,
usar como libreria principal stdio.h

por favor necesito ayuda en este ejercicio, no se muy bien como hacerlo y necesito ideas para realizarlo correctamente, muchas gracias por su atención


Título: Re: ayuda por favor con un ejercicio, dev c++
Publicado por: AlbertoBSD en 17 Agosto 2016, 17:07 pm
Ya has usado arreglos?


Título: Re: ayuda por favor con un ejercicio, dev c++
Publicado por: raenriquez4 en 17 Agosto 2016, 17:39 pm
Ya has usado arreglos?

los he usado, pero no se por donde empezar el ejercicio


Título: Re: ayuda por favor con un ejercicio, dev c++
Publicado por: AlbertoBSD en 17 Agosto 2016, 18:01 pm
Un ejemplo, la funcion pase regresa -1 cuando ya no hay asientos, ahi tendrias que evaluar si quiere cambiar de sección o esperar otro vuelo

Código
  1. #include<stdio.h>
  2. #include<string.h>
  3.  
  4. #define FUMAR 1
  5. #define NOFUMAR 0
  6.  
  7. unsigned char asientos[20];
  8.  
  9. int pase(int fumar);
  10.  
  11. int main() {
  12. int asiento;
  13. memset(asientos,0,20);
  14. asiento = pase(FUMAR);
  15. printf("Asiento asignado %i\n",asiento);
  16. asiento = pase(FUMAR);
  17. printf("Asiento asignado %i\n",asiento);
  18. asiento = pase(FUMAR);
  19. printf("Asiento asignado %i\n",asiento);
  20.  
  21. asiento = pase(NOFUMAR);
  22. printf("Asiento asignado %i\n",asiento);
  23. asiento = pase(NOFUMAR);
  24. printf("Asiento asignado %i\n",asiento);
  25.  
  26. asiento = pase(NOFUMAR);
  27. printf("Asiento asignado %i\n",asiento);
  28.  
  29.  
  30.  
  31. }
  32.  
  33. int pase(int fumar) { //1 para fumar
  34. int i,asiento = -1;
  35. if(fumar) {
  36. i = 10;
  37. while(i < 20) {
  38. if(asientos[i] == 0) {
  39. asiento = i;
  40. asientos[i] =1;
  41. break;
  42. }
  43. i++;
  44. }
  45. }
  46. else {
  47. i = 0;
  48. while(i < 10) {
  49. if(asientos[i] == 0) {
  50. asiento = i;
  51. asientos[i] =1;
  52. break;
  53. }
  54. i++;
  55. }
  56. }
  57. return asiento;
  58. }


Título: Re: ayuda por favor con un ejercicio, dev c++
Publicado por: raenriquez4 en 17 Agosto 2016, 18:28 pm
Un ejemplo, la funcion pase regresa -1 cuando ya no hay asientos, ahi tendrias que evaluar si quiere cambiar de sección o esperar otro vuelo

Código
  1. #include<stdio.h>
  2. #include<string.h>
  3.  
  4. #define FUMAR 1
  5. #define NOFUMAR 0
  6.  
  7. unsigned char asientos[20];
  8.  
  9. int pase(int fumar);
  10.  
  11. int main() {
  12. int asiento;
  13. memset(asientos,0,20);
  14. asiento = pase(FUMAR);
  15. printf("Asiento asignado %i\n",asiento);
  16. asiento = pase(FUMAR);
  17. printf("Asiento asignado %i\n",asiento);
  18. asiento = pase(FUMAR);
  19. printf("Asiento asignado %i\n",asiento);
  20.  
  21. asiento = pase(NOFUMAR);
  22. printf("Asiento asignado %i\n",asiento);
  23. asiento = pase(NOFUMAR);
  24. printf("Asiento asignado %i\n",asiento);
  25.  
  26. asiento = pase(NOFUMAR);
  27. printf("Asiento asignado %i\n",asiento);
  28.  
  29.  
  30.  
  31. }
  32.  
  33. int pase(int fumar) { //1 para fumar
  34. int i,asiento = -1;
  35. if(fumar) {
  36. i = 10;
  37. while(i < 20) {
  38. if(asientos[i] == 0) {
  39. asiento = i;
  40. asientos[i] =1;
  41. break;
  42. }
  43. i++;
  44. }
  45. }
  46. else {
  47. i = 0;
  48. while(i < 10) {
  49. if(asientos[i] == 0) {
  50. asiento = i;
  51. asientos[i] =1;
  52. break;
  53. }
  54. i++;
  55. }
  56. }
  57. return asiento;
  58. }

muchisimas gracias por ayudarme en esto, me podrias explicar que hace memset?


Título: Re: ayuda por favor con un ejercicio, dev c++
Publicado por: AlbertoBSD en 17 Agosto 2016, 18:33 pm
Hola!

Memset es una funcion que "setea" o establece la memoria a X valor asi cada asiento se inicializa en 0

se podria omitir y dejarlo como:

Código
  1. unsigned char asientos[20] = {0};

o en su defecto crear un ciclo for o while que recorra todo el arreglo y lo haga 0, esto para que los asientos este "libres"

Saludos!


Título: Re: ayuda por favor con un ejercicio, dev c++
Publicado por: AndresEnriquezV en 22 Agosto 2016, 05:33 am
Hola!

Memset es una funcion que "setea" o establece la memoria a X valor asi cada asiento se inicializa en 0

se podria omitir y dejarlo como:

Código
  1. unsigned char asientos[20] = {0};

o en su defecto crear un ciclo for o while que recorra todo el arreglo y lo haga 0, esto para que los asientos este "libres"

Saludos!
muchisimas gracias amigo por la ayuda


Título: Re: ayuda por favor con un ejercicio, dev c++
Publicado por: MessageBoxA en 22 Agosto 2016, 05:48 am
Código
  1. unsigned char asientos[20] = {0};

no deberia ser realmente

Código
  1. unsigned char asientos[19] = {0};
???

recordemos que van de 0 a 19 = 20 posiciones


Título: Re: ayuda por favor con un ejercicio, dev c++
Publicado por: AlbertoBSD en 22 Agosto 2016, 06:20 am
Se deja en 20 para que solo puedas escribir en las posiciones 0 a la 19 como dices. ya que si lo dejas en 19 solo podras escribir de la position 0 a la 18 sin errores.

Si si es posible declarar un arreglo de 20 y seguir escribiendo en las posiciones 21,22, 23, 1000 etc.. nada te lo impide recordar que las variables estan continuas en la memoria y estarias sobreescribiendo valores en otras variables.

Veamos el siguien codigo:

Código
  1. int A;
  2. char hola[3];
  3. A = 0x41414141;
  4. hola[0] = 'H';
  5. hola[1] = 'o';
  6. hola[2] = 'l';
  7. hola[3] = 'a';
  8. printf("%s\n",hola);
  9.  

Si bien la salida puede variar de un sistema a otro en mi sistema imprime:

Código:
HolaAAAA

Y por eso es que aunque si sea sufiente declarar el arreglo con 3 para la palabra en cuestion es mejor dejar la declaración en Numeros "Humanos".

Saludos