Προς το περιεχόμενο

άσκηση στη c


orfeas1601

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλημέρα,θα ήθελα εάν κάποιος από εσάς θα μπορούσε να με βοηθήσει σχετικά με τον παρακάτω κώδικα.Ο κώδικας εμφανίζει ένα σύστημα κρατήσεων θέσεων ενός αεροπλάνου 36 θέσεων .Στην εκτύπωση του πλάνου μου βγάζει μόνο την πρώτη σειρά,γιατί δεν συνεχίζει να διαβάζει και να εκτυπώνει και την 2η κλπ..?

σημείωση, δοκιμάστε με την διακεκριμένη θέση , η οικονομική είναι ελλιπής.

 

Ευχαριστώ πολύ ,Ορφέας

 

 

#include<stdio.h>

#include <string.h>

#include <stdlib.h>

#define WINDOW_SEAT 1 // επιλογή θέσης σε παράθυρο

#define AISLE_SEAT 2 // επιλογή θέσης σε διάδρομο

#define NAME_SIZE 30 //μέγεθος του ονόματος του επιβάτη

#define N 9 //ο αριθμός των σειρών του αεροπλάνου

#define K 4 //οι θεσεις ανα σειρα του αεροπλανου

const char ROW_LETTER[K]={'A', 'B', 'C', 'D'};// Ο πίνακας αυτός χρησιμοποιείται για τη μετατροπή της αρίθμησης των θέσεων σε μια σειρά από αριθμούς σε γράμματα (Α, Β, C, D)

int plano[N][K];// Ο πίνακας στον οποίο αποθηκεύεται το πλάνο του αεροπλάνου

char pass_name[100];// Στη μεταβλητή αυτή αποθηκεύεται το όνομα του επιβάτη (ορίζουμε μεγάλο μέγεθος για να αποφύγουμε run time error σε περίπτωση που ο χρήστης δώσει πάνω από 30 χαρακτήρες)

char table[N*K][(NAME_SIZE+1)];// Ο πίνακας στον οποίο αποθηκεύεται η λίστα των επιβατών, έχουμε μια θέση παραπάνω (30+1) για τον χαρακτήρα '\0'

int list_index=0;// Σε αυτή τη μεταβλητή αποθηκεύεται η επόμενη διαθέσιμη θέση στην λίστα των επιβατών

int select_seat(void);

int line_selected=0;// Στη μεταβλητή αυτή αποθηκεύεται η γραμμή της θέσης που κρατήθηκε

int row_selected=0;// Στη μεταβλητή αυτή αποθηκεύεται η θέση στη γραμμή που κρατήθηκε

//int count=0;

int menu();

void oikonomiki(void);//Συναρτηση οικονομικής θεσης

void diakekrimeni(void);// διακεκριμένης θέσης

void list_ep(void); //λιστα επιβατων

void print_map(void);// εκτυπωση πλανου αεροπλανου

 

 

int main()

 

{

system("chcp 1253>nul");

 

int i,j;

 

 

int epilogi;

 

do {

epilogi=menu();

switch(epilogi) {

case 1: diakekrimeni();

break;

case 2: oikonomiki();

break;

case 3: print_map();

break;

case 4: list_ep();

break;

case 5:

break;

}

}while(epilogi!=0);

system("PAUSE");

}

int menu()

{

int k;

printf("\n");

printf(" Μενού Επιλογών:\n");

printf("\n");

printf("Παρακαλώ πληκτρολογήστε 1 για κράτηση στην διακεκριμένη θέση.\n");

printf("Παρακαλώ πληκτρολογήστε 2 για κράτηση στην οικονομική θέση.\n");

printf("Παρακαλώ πληκτρολογήστε 3 για εμφάνιση του πλάνου του αεροσκάφους.\n");

printf("Παρακαλώ πληκτρολογήστε 4 για εμφάνιση της λίστας των επιβατών.\n");

printf("Παρακαλώ πληκτρολογήστε 0 για έξοδο από το πρόγραμμα.\n\n");

printf("\nΔιαλέξτε μία από τις παραπάνω επιλογές: ");

do {

k=getchar()-'0';

}while (k<0 || k>4);

return k;

}

 

 

void print_map(void)

{

int i, j;

//init_app();

 

printf("\n");

printf(" A B C D\n\n"); // Εμφάνιση του header του πίνακα

for(i=0;i<N;i++)

{

printf("%d. ", (i+1)); // Εμφάνισης της σειράς

for (j=0;j<K;j++)

printf("%d ", plano[j]); // Εμφάνιση της κατάστασης κάθε θέσης

printf("\n"); // Εμφανίσαμε όλες τις θέσεις μιας σειράς πάμε στην από κάτω σειρά

}

}

 

 

 

 

 

 

 

 

void list_ep(void)

{

 

int i;

printf("\n\nΛΙΣΤΑ ΕΠΙΒΑΤΩΝ\n");

printf("\n");

i=0;

while(i<(N*K)){

printf(" %d.%s\n",i+1,table); //εμφανιση των στοιχειων της λιστας

i++;

}

list_index+=0;

printf("\nΈχουν κρατηθεί %d θέσεις από τις %d διαθέσιμες.\n",list_index,(N*K));

}

 

 

void oikonomiki(void)

{

int name_size=(NAME_SIZE+1);

//select_seat();

while(name_size>NAME_SIZE)

{

printf("\n\nΠαρακαλώ δώστε το όνομα του επιβάτη :");

scanf("%s",&pass_name);

name_size=strlen(pass_name);

strcpy(table[list_index], pass_name);

list_index++;

}

}

 

 

 

 

void diakekrimeni(void)

{

int name_size=(NAME_SIZE+1);

int ans=-1,j,i;

while ((ans!=WINDOW_SEAT)&&(ans!=AISLE_SEAT)) // Αμυντικός Προγραμματισμός

{

fflush(stdin);

// Εμφάνιση των διαθέσιμων επιλογών στο χρήστη

printf("\n\nΠαρακαλώ πληκτρολογήστε 1 για θέση σε παράθυρο \n");

printf("Παρακαλώ πληκτρολογήστε 2 για σε διάδρομο ");

// Διάβασμα της επιλογής του χρήστη

scanf("%i", &ans);

 

}

 

while(name_size>NAME_SIZE)

{

 

printf("\n\nΠαρακαλώ δώστε το όνομα του επιβάτη :");

scanf("%s",&pass_name);//αναγνωση του ονοματος του επιβατη

name_size=strlen(pass_name);

strcpy(table[list_index], pass_name);//προσθετουμε τον επιβατη στη λιστα επιβατων

list_index++;// Αυξάνουμε το δείκτη της επόμενης διαθέσιμης θέσης στη λίστα επιβατών

 

 

if((ans==WINDOW_SEAT)&&((row_selected==0)||(row_selected==3))){

plano[line_selected][row_selected]=1;// Μαρκάρουμε την επιλεγόμενη θέση ως μη διαθέσιμη στο πλάνο του αεροσκάφους

 

}

if((ans==AISLE_SEAT)&&((row_selected==1)||(row_selected==2))){

plano[line_selected][row_selected]=1;// Μαρκάρουμε την επιλεγόμενη θέση ως μη διαθέσιμη στο πλάνο του αεροσκάφους

 

}

printf("\nΚρατήθηκε η θέση %i%c και προστέθηκε ο επιβάτης στην λίστα \n", (line_selected+1), ROW_LETTER[row_selected]);

// Εμφανίζουμε μήνυμα σχετικά με την κράτηση της θέσης

row_selected+=1;//παμε στην επομενη θεση

}

 

 

}

Δημοσ.
>#include<stdio.h>
#include <string.h>
#include <stdlib.h>
#define WINDOW_SEAT 1 //  επιλογή θέσης σε παράθυρο
#define AISLE_SEAT 2 //  επιλογή θέσης σε διάδρομο
#define NAME_SIZE 30  //μέγεθος του ονόματος του επιβάτη
#define N 9  //ο αριθμός των σειρών του αεροπλάνου
#define K 4   //οι θεσεις ανα σειρα του αεροπλανου
const char ROW_LETTER[K]={'A', 'B', 'C', 'D'};// Ο πίνακας αυτός χρησιμοποιείται για τη μετατροπή της αρίθμησης των θέσεων σε μια σειρά από αριθμούς σε γράμματα (Α, Β, C, D) 
int plano[N][K];// Ο πίνακας στον οποίο αποθηκεύεται το πλάνο του αεροπλάνου
char pass_name[100];// Στη μεταβλητή αυτή αποθηκεύεται το όνομα του επιβάτη (ορίζουμε μεγάλο μέγεθος για να αποφύγουμε run time error σε περίπτωση που ο χρήστης δώσει πάνω από 30 χαρακτήρες) 
char table[N*K][(NAME_SIZE+1)];// Ο πίνακας στον οποίο αποθηκεύεται η λίστα των επιβατών, έχουμε μια θέση παραπάνω (30+1) για τον χαρακτήρα '\0' 
int list_index=0;// Σε αυτή τη μεταβλητή αποθηκεύεται η επόμενη διαθέσιμη θέση στην λίστα των επιβατών 
int select_seat(void);
int line_selected=0;// Στη μεταβλητή αυτή αποθηκεύεται η γραμμή της θέσης που κρατήθηκε
   int row_selected=0;// Στη μεταβλητή αυτή αποθηκεύεται η θέση στη γραμμή που κρατήθηκε
//int count=0;
int menu();
void oikonomiki(void);//Συναρτηση οικονομικής θεσης
void diakekrimeni(void);// διακεκριμένης θέσης
void list_ep(void);    //λιστα επιβατων             
void print_map(void);// εκτυπωση πλανου αεροπλανου


int main()

{
system("chcp 1253>nul");

int i,j;


int epilogi;

do {
epilogi=menu();
switch(epilogi) {
case 1: diakekrimeni();
break;
case 2: oikonomiki();
break;
case 3: print_map();
break;
case 4: list_ep();
break;
case 5:
break;
}
}while(epilogi!=0);
system("PAUSE");
}
int menu()
{
int k;
printf("\n");
printf("  Μενού Επιλογών:\n");
printf("\n");
printf("Παρακαλώ πληκτρολογήστε 1 για κράτηση στην διακεκριμένη θέση.\n");
printf("Παρακαλώ πληκτρολογήστε 2 για κράτηση στην οικονομική θέση.\n");
printf("Παρακαλώ πληκτρολογήστε 3 για εμφάνιση του πλάνου του αεροσκάφους.\n");
printf("Παρακαλώ πληκτρολογήστε 4 για εμφάνιση της λίστας των επιβατών.\n");
printf("Παρακαλώ πληκτρολογήστε 0 για έξοδο από το πρόγραμμα.\n\n");
printf("\nΔιαλέξτε μία από τις παραπάνω επιλογές: ");
do {
k=getchar()-'0';
}while (k<0 || k>4);
return k;
}


void print_map(void)
{
int i, j;
//init_app();

printf("\n");                  
printf("   A B C D\n\n"); // Εμφάνιση του header του πίνακα
for(i=0;i<N;i++)
{
printf("%d. ", (i+1)); // Εμφάνισης της σειράς
for (j=0;j<K;j++)
printf("%d ", plano[i][j]); // Εμφάνιση της κατάστασης κάθε θέσης
printf("\n"); // Εμφανίσαμε όλες τις θέσεις μιας σειράς πάμε στην από κάτω σειρά
}
}








void list_ep(void)                            
{
    
    int i;
    printf("\n\nΛΙΣΤΑ ΕΠΙΒΑΤΩΝ\n");
    printf("\n");
    i=0;
    while(i<(N*K)){
                   printf(" %d.%s\n",i+1,table[i]);  //εμφανιση των στοιχειων της λιστας
                   i++; 
                   }
                   list_index+=0;
                   printf("\nΈχουν κρατηθεί %d θέσεις από τις %d διαθέσιμες.\n",list_index,(N*K));
                   }


void oikonomiki(void)
{
   int name_size=(NAME_SIZE+1);
   //select_seat();
   while(name_size>NAME_SIZE)
{
   printf("\n\nΠαρακαλώ δώστε το όνομα του επιβάτη :");
   scanf("%s",&pass_name);
   name_size=strlen(pass_name);
   strcpy(table[list_index], pass_name);
   list_index++;
}
}


  

void diakekrimeni(void)
{
    int name_size=(NAME_SIZE+1);
    int ans=-1,j,i;
while ((ans!=WINDOW_SEAT)&&(ans!=AISLE_SEAT)) // Αμυντικός Προγραμματισμός
{
fflush(stdin);
// Εμφάνιση των διαθέσιμων επιλογών στο χρήστη
printf("\n\nΠαρακαλώ πληκτρολογήστε 1 για θέση σε παράθυρο \n");
printf("Παρακαλώ πληκτρολογήστε 2 για σε διάδρομο ");
// Διάβασμα της επιλογής του χρήστη
scanf("%i", &ans);

}

   while(name_size>NAME_SIZE)
{
                         
printf("\n\nΠαρακαλώ δώστε το όνομα του επιβάτη :");
scanf("%s",&pass_name);//αναγνωση του ονοματος του επιβατη
 name_size=strlen(pass_name);
strcpy(table[list_index], pass_name);//προσθετουμε τον επιβατη στη λιστα επιβατων
list_index++;// Αυξάνουμε το δείκτη της επόμενης διαθέσιμης θέσης στη λίστα επιβατών


if((ans==WINDOW_SEAT)&&((row_selected==0)||(row_selected==3))){
plano[line_selected][row_selected]=1;// Μαρκάρουμε την επιλεγόμενη θέση ως μη διαθέσιμη στο πλάνο του αεροσκάφους

}          
if((ans==AISLE_SEAT)&&((row_selected==1)||(row_selected==2))){
plano[line_selected][row_selected]=1;// Μαρκάρουμε την επιλεγόμενη θέση ως μη διαθέσιμη στο πλάνο του αεροσκάφους

}
printf("\nΚρατήθηκε η θέση %i%c και προστέθηκε ο επιβάτης στην λίστα \n", (line_selected+1), ROW_LETTER[row_selected]);
// Εμφανίζουμε μήνυμα σχετικά με την κράτηση της θέσης
row_selected+=1;//παμε στην επομενη θεση
}


}



        

Δημοσ.

τα έχεις κάνει λίγο σαλάτα με τον πίνακα plano.

σου έφτιαξα μόνο την διακεκριμμένη θέση και μόνο την θέση για παράθυρο.

τσέκαρε το και φτιάξε το υπόλοιπο.αν κολλήσεις πες μου

 

>
................
void diakekrimeni(void)
{
................
while(name_size>NAME_SIZE)
{

.................
list_index++;//απο δω αρχίζουν οι αλλαγές

if (ans==WINDOW_SEAT){//αν θεση παραθύρου
   for (int i=0;i<N;i++){
       if (plano[i][0]==0){//αν στην Α θέση
           plano[i][0]=1;
           line_selected=i;//επιλέγω γραμμή
           row_selected=0;//επιλέγω στήλη
           break;
       }
       if (plano[i][K-1]==0){//αν στην Δ θέση υπάρχει κενό
           plano[i][K-1]=1;
           line_selected=i;
           row_selected=N-1;
           break;
       }
   }
}
//δεν χρειάζονται πλέον τα παρακάτω
//if((ans==WINDOW_SEAT)&&((row_selected==0)||(row_selected==3))){
//plano[line_selected][row_selected]=1;//if((ans==AISLE_SEAT)&&((row_selected==1)||(row_selected==2))){
//plano[line_selected][row_selected]=1;

//}
................
//row_selected+=1;
}

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...