Форум программистов, компьютерный форум CyberForum.ru

Из Дейтела (4.20) - C++

Восстановить пароль Регистрация
 
Chekhov
1 / 1 / 0
Регистрация: 09.09.2010
Сообщений: 53
04.07.2011, 23:15     Из Дейтела (4.20) #1
Привет всем!!!! Ребята, есть задачка из Дейтела (4.20) для зачета, но совсем в проге не смыслем, послезавтра сдают, кто поможет а? И если нетрудно с комментариями!

(Система резервирования билетов авиакомпании). Небольшая авиакомпания купила компютеры для своей новой автоматизированной системы резервирования. Вас попросили запрограммировать нову- систему. Вы должны написать программу выделения мест на каждый полет вдинственного самолета (вместимость 10 мест).
Ваша программа должна отображать следующее меню альтернатив:
Введите, пожалуйста, 1 для "курящих"
Введите, пожалуйста, 2 для "некурящих"
Если клиент ввел 1, ваша программа должна выдлять место в салоне для курящих (места 1-5). Если клиент ввел 1, ваша программа должна выделять место в салоне для некурящий (места 6-10). Ваша программа должна также напичатать посадочный талон, указывающий номер места клиента и тип салона в самолете- для курящих или не курящих.
Используйте одномерный массив для представления схемы расположения мест в самолете. Присвойте всем элементам массива нулевые начальные значения, чтобы показать, что все места свободны. Как только место выделено пассажиру, устанавливайте соответствующие элементы массива в состояние 1, чтобы показать, что месро уже занято.
Ваша программа, конечно, никогда не должна выделять уже занятые места. Если салон для курящих заполнен, ваша программа должна спросить у клиента, приемлем ли для него салон для некурящих. Если, да то сделайте выделение соответсвующего места. Если нет, то напечатайте сообщение "Следующий полет состоится через три часа".

Заранее очень благодарны.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
R136a1
 Аватар для R136a1
142 / 111 / 15
Регистрация: 14.04.2011
Сообщений: 261
05.07.2011, 03:45     Из Дейтела (4.20) #2
код получился громоздким, потому как я только учусь но всё работает
Если клиент ввел 1, ваша программа должна выделять место в салоне для некурящий (места 6-10)
я так понял что вы отпечатались и имели в виду 2

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <iostream>
using namespace std;
 
int main()
{
    int location[10] = {0};
    char choise;
    bool nl = false;
    static int b = 5;
    static int a = 0;
    
    while(!nl) {
    
     do {
          cout << "\n1. для курящих\n"
               << "2. для некурящих\n";
    
          cin >> choise;
    
     } while(choise < '1' || choise > '2');
    
    cout << "\n";
    
    switch(choise) {
        case '1':
           if(a < 5) {
              location[a] = 1;
              cout << "Место: " << a+1 << "\n";
              a++; }
           else { 
             char ch;
             cout << "мест больше нет, приемлем ли для вас салон для некурящих?(y/n)\n";
             cin >> ch;
             if(ch == 'y' || ch == 'Y') {
                if(b < 10) {
                   location[b] = 1;
                               cout << "Место: " << b+1 << "\n";
                               b++; }
                else {
               cout << "мест больше нет, следующий полет состоится через три часа\n";
               nl = true; }
                }  
             }     
        break;
        case '2':
           if(b < 10) {
              location[b] = 1;
                      cout << "Место: " << b+1 << "\n";
                      b++; }
                   else {
                      cout << "мест больше нет, следующий полет состоится через три часа\n";
                  nl = true; }
        break;
       }
   }
    return 0;
}
Chekhov
1 / 1 / 0
Регистрация: 09.09.2010
Сообщений: 53
05.07.2011, 07:55  [ТС]     Из Дейтела (4.20) #3
ОГРОМНОЕ спосибо!!!!!!
Chekhov
1 / 1 / 0
Регистрация: 09.09.2010
Сообщений: 53
09.07.2011, 22:37  [ТС]     Из Дейтела (4.20) #4
А такую задачку кто поможет решить?
(Восемь Ферзей) Шахматной головоломкой является задача о Восьми Ферзях: можно ли поставить на пустой шахматной доске восемь фрезей так, чтобы ни один из них не "атаковал" другого, т.е. никакие два ферзя не стояли бы на одном и том же столбце или на одной и той же строке или на одной и той же диагонали?
Совет: Присвоить значение каждой клетке шахматной доски, указывая сколько клеток пустой шахматной доски "исключается", если ферзя поместить на эту клетку. Каждому углу должно быть присвоено значение 22. Как только эти числа исключений будут присвоены всем 64 клеткам, можно предложить эвристику: ставить каждого следующего ферзя на клетку с наименьшим числом исключений.

И еще такую!
Для каждого класса укажите некоторые общие атрибуты у финкции, определяющие иерархию. Добавьте некоторые другие классы, такие, как UndergraduateStudent, GraduateStudent, Freshmen, Sophomore, Junior, Senior и т.д., чтобы обоготить иерархию.

Огромное спосибо за внимание и помощь!!!!!
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
09.07.2011, 22:41     Из Дейтела (4.20) #5
Цитата Сообщение от Chekhov Посмотреть сообщение
(Восемь Ферзей) Шахматной головоломкой является задача о Восьми Ферзях:
botasa
3 / 3 / 0
Регистрация: 18.01.2011
Сообщений: 131
09.07.2011, 23:07     Из Дейтела (4.20) #6
какой выпуск книги у вас ? так как у меня эти все задачи в главе 7
Chekhov
1 / 1 / 0
Регистрация: 09.09.2010
Сообщений: 53
09.07.2011, 23:16  [ТС]     Из Дейтела (4.20) #7
Незнаю, у меня электронная версия! В чем разница то?
botasa
3 / 3 / 0
Регистрация: 18.01.2011
Сообщений: 131
09.07.2011, 23:18     Из Дейтела (4.20) #8
да и у меня электронная версия, сколько у вас страниц в книге ? а точнее какое издание ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.07.2011, 23:27     Из Дейтела (4.20)
Еще ссылки по теме:

C++ Задача из книги Дейтела "Шахматная доска"
C++ Задача из книги Дейтела "Квадрат"
Задача из книги Дейтела "Ромб" C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Daemon025
 Аватар для Daemon025
380 / 329 / 67
Регистрация: 06.12.2010
Сообщений: 900
09.07.2011, 23:27     Из Дейтела (4.20) #9
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#include <stdio.h>
#include <stdlib.h>
#include <time.h>  
#define SIZE 8
//ГґГіГ*êöèÿ äëÿ Г§Г*ГЇГЁГ±ГЁ èçìåГ*ÿåìûõ ýâðèñòè÷. Г§Г*Г*Г·.
void evristic( int e_dos[][ SIZE ], int dos[][ SIZE ], 
const int hor[ SIZE ], const int vert[ SIZE ]);
 
int main()
{
   int strk, stlb, hod = 0, x,y,z,i,c,v=0,n=0,m, vr_s, vr_st;
   
   int doska[ SIZE ][ SIZE ] = { 0 }; //Г¬Г*Г±Г±ГЁГў äëÿ Г§Г*ГЇГЁГ±ГЁ "îïГ*Г±Г*ûõ êëåòîê"
   int evr_doska[ SIZE ][ SIZE ] = { 0 }; //Г¬Г*Г±Г±ГЁГў äëÿ Г§Г*ГЇГЁГ±ГЁ èçìåГ*ÿåìûõ ýâðèñòè÷. Г§Г*Г*Г·.
   
   const int horizont[ SIZE ]= {0, 1,1,1,0,-1,-1,-1 }; //Г¬Г*Г±Г±ГЁГўГ» êîîðäèГ*Г*ГІ õîäîâ
   const int vertical[ SIZE ]= {-1, -1,0,1,1,1,0,-1 }; 
   
   srand( time( NULL ) ); 
   
   for ( c = 1; c <= 8; ++c ) { //Г§Г*ГЇГіГ±ГЄГ*ГҐГ¬ 8 ôåðçåé Г± óñëîâèåì äëÿ ГІГіГЇГЁГЄГ* Г±Г¬.i
      
      evristic( evr_doska, doska, horizont, vertical );//ГЁ ìåГ*ГїГҐГ¬ ГЅГўГ°. Г§Г*Г*Г·.
      z = 28;//äëÿ âûáîðГ* Г*Г*èìåГ*Гё. ГЅГўГ°. Г§Г*Г*Г·.
      
      m = 1 +  rand() % 3;
      
     //Г§Г*ГЇГіГ±ГЄГ*ГҐГ¬ 64 öèêë äëÿ ïîèñêГ* ñâîá. ГЁ Г*Г*ГЁГ¬. ГЅГўГ°. Г§Г*Г*Г·. êëåòêè
      for ( x = 0; x <=7; ++x ) { 
      
         for ( y = 0; y <=7; ++y) { 
         
            if ( doska[ x ][ y ] == 0 ){
         
               if ( (evr_doska[ x ][ y ]<= z) && (n <= m) ){
                    
                  ++n;
                  z = evr_doska[ x ][ y ];  
                  strk = x;
                  stlb = y;
                  v = 1;
               }
            }
         }    
      } 
      n = 0;
      if  ( v == 1 ){ 
          
         doska[ strk ][ stlb ] = c;
         vr_s = strk;// ñîõð. äëÿ âîçì. âîçâð. Г*Г* ГЁГ±Гµ. ïîç.
         vr_st = stlb;// äëÿ âîçâð. Г*Г* ГЁГ±Гµ. ïîç.
         //Г§Г*ГЇГіГ±ГЄГ*ГҐГ¬  Г¶ГЁГЄГ« äëÿ Г§Г*ГЇГЁГ±ГЁ ГўГ±ГҐГµ âåðò., ãîð., äèГ*ГЈ., ïðîïóñêГ*Гї Г§Г*Г*ÿòûå 
         for ( hod = 0; hod < SIZE; ++hod ) {
         
            for ( i = 1; i < SIZE; ++i ) {
            
               strk += vertical[ hod ]*i;// ïîëó÷Г*ГҐГ¬ Г*îâóþ ïîç.
               stlb += horizont[ hod ]*i;// ïîëó÷Г*ГҐГ¬ Г*îâóþ ïîç.
               // ïðîâåðÿåì ГЈГ°Г*Г*èöû ГЁ Г*Г*ëè÷èå ñâîá. õîäîâ
               if ( strk >= 0 && stlb >= 0 && strk <= 7 && stlb <= 7 
               && doska[ strk ][ stlb ] == 0 ){
                    
                  doska[ strk ][ stlb ] = -1;
               }
               strk = vr_s;// âîçâð. Г*Г* ГЁГ±Гµ. ïîç.
               stlb = vr_st;      
            }
         }  
      }
      v = 0;
   }
   printf( "\n\n" );
    for ( x = 0; x < SIZE; ++x ) {
      
       printf( "\n\n" ); 
      
       for ( y = 0; y < SIZE; ++y ) {
           
           if (doska[ x ][ y ]==-1)
              printf( "*  ", doska[ x ][ y ] );
          else
             printf( "%d  ", doska[ x ][ y ] );
       } 
   }
 
 
   printf( "\n\n" );
   system("PAUSE"); 
   return 0;  
 
} 
 
void evristic( int e_dos[][ SIZE ], int dos[][ SIZE ], 
const int hor[ SIZE ], const int vert[ SIZE ]){
 
  int strk, stlb, hod, x,y,z=0,b,i;
  
   for ( x = 0; x < SIZE; ++x ) { 
      
      for ( y = 0; y < SIZE; ++y) { 
         
         z = 0;// åñëè êëåòêГ* Г*ГҐ ГЇГіГ±ГІГ*Гї, ГІГ® Г§Г*ГЇГЁГ±. 0
         if ( dos[ x ][ y ] == 0 ){
         
            strk = x;
            stlb = y; 
            ++z;
            
            for ( hod = 0; hod < SIZE; ++hod ) {
                
               for ( i = 1; i < SIZE; ++i ) {
                  strk += vert[ hod ]*i;// ïîëó÷Г*ГҐГ¬ Г*îâóþ ïîç.
                  stlb += hor[ hod ]*i;// ïîëó÷Г*ГҐГ¬ Г*îâóþ ïîç.
                  // ïðîâåðÿåì ГЈГ°Г*Г*èöû ГЁ Г*Г*ëè÷èå ñâîá. õîäîâ
                  if ( strk >= 0 && stlb >= 0 && strk <= 7 && stlb <= 7 
                  && dos[ strk ][ stlb ] == 0 ){
                     ++z; // óâåëè÷. êîë. âîçì. õîäîâ
                     
                  }
                  strk = x;// âîçâð. Г*Г* ГЁГ±Гµ. ïîç.
                  stlb = y;       
               }
            }
         }
         e_dos[ x ][ y ] = z; // Г§Г*ГЇГЁГ±. êîë. âîçì. õîäîâ
      }  
   }
   printf( "\n\n" ); 
   for ( x = 0; x < SIZE; ++x ) {
      
      printf( "\n\n" ); 
      
      for ( y = 0; y < SIZE; ++y ) {
          
         if ( y < 10 )
            printf( "%2d  ", e_dos[ x ][ y ] );
         else 
            printf( "%d  ", e_dos[ x ][ y ] );
      } 
   } 
}
Yandex
Объявления
09.07.2011, 23:27     Из Дейтела (4.20)
Ответ Создать тему
Опции темы

Текущее время: 09:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru