ayuda por favor con un ejercicio, dev c++

Iniciado por raenriquez4, 17 Agosto 2016, 04:46 AM

0 Miembros y 1 Visitante están viendo este tema.

raenriquez4

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

AlbertoBSD

Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

raenriquez4

Cita de: AlbertoBSD en 17 Agosto 2016, 17:07 PM
Ya has usado arreglos?
los he usado, pero no se por donde empezar el ejercicio

AlbertoBSD

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

#include<stdio.h>
#include<string.h>

#define FUMAR 1
#define NOFUMAR 0

unsigned char asientos[20];

int pase(int fumar);

int main() {
int asiento;
memset(asientos,0,20);
asiento = pase(FUMAR);
printf("Asiento asignado %i\n",asiento);
asiento = pase(FUMAR);
printf("Asiento asignado %i\n",asiento);
asiento = pase(FUMAR);
printf("Asiento asignado %i\n",asiento);

asiento = pase(NOFUMAR);
printf("Asiento asignado %i\n",asiento);
asiento = pase(NOFUMAR);
printf("Asiento asignado %i\n",asiento);

asiento = pase(NOFUMAR);
printf("Asiento asignado %i\n",asiento);



}

int pase(int fumar) { //1 para fumar
int i,asiento = -1;
if(fumar) {
i = 10;
while(i < 20) {
if(asientos[i] == 0) {
asiento = i;
asientos[i] =1;
break;
}
i++;
}
}
else {
i = 0;
while(i < 10) {
if(asientos[i] == 0) {
asiento = i;
asientos[i] =1;
break;
}
i++;
}
}
return asiento;
}
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

raenriquez4

Cita de: 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

#include<stdio.h>
#include<string.h>

#define FUMAR 1
#define NOFUMAR 0

unsigned char asientos[20];

int pase(int fumar);

int main() {
int asiento;
memset(asientos,0,20);
asiento = pase(FUMAR);
printf("Asiento asignado %i\n",asiento);
asiento = pase(FUMAR);
printf("Asiento asignado %i\n",asiento);
asiento = pase(FUMAR);
printf("Asiento asignado %i\n",asiento);

asiento = pase(NOFUMAR);
printf("Asiento asignado %i\n",asiento);
asiento = pase(NOFUMAR);
printf("Asiento asignado %i\n",asiento);

asiento = pase(NOFUMAR);
printf("Asiento asignado %i\n",asiento);



}

int pase(int fumar) { //1 para fumar
int i,asiento = -1;
if(fumar) {
i = 10;
while(i < 20) {
if(asientos[i] == 0) {
asiento = i;
asientos[i] =1;
break;
}
i++;
}
}
else {
i = 0;
while(i < 10) {
if(asientos[i] == 0) {
asiento = i;
asientos[i] =1;
break;
}
i++;
}
}
return asiento;
}


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

AlbertoBSD

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:

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!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

AndresEnriquezV

Cita de: 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:

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

MessageBoxA

Código (cpp) [Seleccionar]
unsigned char asientos[20] = {0};

no deberia ser realmente

Código (cpp) [Seleccionar]
unsigned char asientos[19] = {0};???

recordemos que van de 0 a 19 = 20 posiciones
SI LA MATRIX FUERA PERFECTA.... ESTARÍA ESCRITA EN C++

AlbertoBSD

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:

int A;
char hola[3];
A = 0x41414141;
hola[0] = 'H';
hola[1] = 'o';
hola[2] = 'l';
hola[3] = 'a';
printf("%s\n",hola);


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

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
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW