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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.63
Jagir
2 / 2 / 0
Регистрация: 13.06.2011
Сообщений: 12
#1

Модель лифта - C++

13.06.2011, 16:53. Просмотров 2691. Ответов 4
Метки нет (Все метки)

Доброго времени суток! Задача - реализовать в программе команды по управлению лифтом, учитывая практические ограничения ( лифт должен оставаться на этаже, куда "приехал" пользователь) . Мыслью было сделать нечто вроде текстовых игр ( т.е. последовательно задающиеся вопросы). В итоге написал код, но компилятор сильно ругается, особенно в мэйне (использую MS Visual Studio 2010) + хотелось бы выслушать в целом о программе - будет ли работать, каким образом можно оптимизировать?) Заранее спасибо!
Схему программы вложил + код:
Код
#include <iostream>
#include <cctype>
#include <cstring>
#include <cstdlib>

using namespace std;

class Lift {
	int current_floor,f;
	bool isOpened;
public:
    int GetCurrentFloor(), floor_menu(), wight_menu();
	static int start_menu()
    void SetCurrentFloor(int floor), CloseOpenDoors(bool n);
	 
};

int Lift::start_menu()
{
	char choice;

	cout << "\n";
	do {
		cout << " Enter \n (C)all lift\n (E)xit";
		cin>>choice;
	} while(!strchr("ce",tolower(choice)));
	return tolower(choice);
}

void Lift::CloseOpenDoors(bool n)
{
	bool IsOpened=n;
	if (isOpened == true) cout << "Doors are opened\n";
	if (isOpened == false) cout << "Doors are locked\n";
	
}

int Lift::wight_menu()
{
	int wight;
	cout << " Enter passanger's wight\n (limit - 1000 kg)";
	cin >> wight;
	if (0 < wight < 1000) {
		isOpened == false;
		CloseOpenDoors(isOpened);
		floor_menu();
	} else cout << " Limit is nesoblyuden!\n";
}
	
int Lift::floor_menu()
{
	int ch;
	cout << "\n There is five floors \nEnter number of floor\n";
	cin>>ch;
	switch(ch) {
	case 1:cout << "You're in this floor";break;
	case 2: 
		{
			isOpened==false;
		    CloseOpenDoors(isOpened);
		    cout << " \nlift come to" << ch << "floor\n";
		    isOpened==true;
		    CloseOpenDoors(isOpened);
		    break;
		}
	case 3: 
		{
			isOpened==false;
		    CloseOpenDoors(isOpened);
		    cout << " \nlift come to" << ch << "floor\n";
		    isOpened==true;
		    CloseOpenDoors(isOpened);
		    break;
		}
	case 4: 
		{
			isOpened==false;
		    CloseOpenDoors(isOpened);
		    cout << " \nlift come to" << ch << "floor\n";
		    isOpened==true;
		    CloseOpenDoors(isOpened);
		    break;
		}
	case 5: 
		{
			isOpened==false;
		    CloseOpenDoors(isOpened);
		    cout << " \nlift come to" << ch << "floor\n";
		    isOpened==true;
		    CloseOpenDoors(isOpened);
		    break;
		}
	default:cout << "error!";
	}
}

int Lift::GetCurrentFloor() 
{
	return current_floor;
}

void Lift::SetCurrentFloor(int f)
{ 
	current_floor = f;
}

int main()
{ 
	char choice;
	bool isOpened;
	cout << " Welcome to Lift programm!\n";

	for(;;) {
		choice=Lift::start_menu();
		switch(choice) {
		case 'c':
			{
			cout << " You called lift\n";
			isOpened==true;
			CloseOpenDoors();
			wight_menu();
			break;
			}
		case 'e':return 0;
		}
	}
}
Миниатюры
Модель лифта  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.06.2011, 16:53     Модель лифта
Посмотрите здесь:

Промоделировать в консоли работу лифта - C++
Помогите пожалуйста доделать программу модуляции лифта. Вот мой код: #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;locale.h&gt; ...

Программирование классов для моделирования лифта. - C++
Помогите пожалуйста создать модель работы лифта в С++. Есть пасажир &quot;1&quot; появляется на 1 этаже,время появления по таймеру:1,направление...

Физическая модель - C++
Пробовал создать физическую модель нецентрального соударения 2х шаров - не получилось. Помогите решить, учитывая, что у каждого шара...

Спичечная модель - C++
Спичечная модель Профессор Самоделкин решил изготовить объемную модель кубиков из спичек, используя спички для рёбер кубиков....

Модель перекрестка - C++
Приветствую. Небольшая предыстория: я не программист, а будущий педагог, но так сложилось, что в рамках большой исследовательской работы...

Модель полета - C++
Добрый день. Мне нужно смоделировать полета самолета по горизонтальной восьмерке, нужно вывести крен, тангаж и приборную скорость, а также...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
battlemc
Сообщений: n/a
13.06.2011, 20:03     Модель лифта #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
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
#include <iostream>
#include <cctype>
#include <cstring>
#include <cstdlib>
 
using namespace std;
 
class Lift {
        int current_floor,f;
        bool isOpened;
public:
    int GetCurrentFloor(), floor_menu(), wight_menu();
        static int start_menu();
    void SetCurrentFloor(int floor), CloseOpenDoors(bool n);
         
};
 
int Lift::start_menu()
{
        char choice;
 
        cout << "\n";
        do {
                cout << " Enter \n (C)all lift\n (E)xit";
                cin>>choice;
        } while(!strchr("ce",tolower(choice)));
        return tolower(choice);
}
 
void Lift::CloseOpenDoors(bool n)
{
        bool IsOpened=n;
        if (isOpened == true) cout << "Doors are opened\n";
        if (isOpened == false) cout << "Doors are locked\n";
        
}
 
int Lift::wight_menu()
{
        int wight;
        cout << " Enter passanger's wight\n (limit - 1000 kg)";
        cin >> wight;
        if (0 < wight < 1000) {
                isOpened == false;
                CloseOpenDoors(isOpened);
                floor_menu();
        } else cout << " Limit is nesoblyuden!\n";
        return 0;
}
        
int Lift::floor_menu()
{
        int ch;
        cout << "\n There is five floors \nEnter number of floor\n";
        cin>>ch;
        switch(ch) {
        case 1:cout << "You're in this floor";break;
        case 2: 
                {
                        isOpened==false;
                    CloseOpenDoors(isOpened);
                    cout << " \nlift come to" << ch << "floor\n";
                    isOpened==true;
                    CloseOpenDoors(isOpened);
                    break;
                }
        case 3: 
                {
                        isOpened==false;
                    CloseOpenDoors(isOpened);
                    cout << " \nlift come to" << ch << "floor\n";
                    isOpened==true;
                    CloseOpenDoors(isOpened);
                    break;
                }
        case 4: 
                {
                        isOpened==false;
                    CloseOpenDoors(isOpened);
                    cout << " \nlift come to" << ch << "floor\n";
                    isOpened==true;
                    CloseOpenDoors(isOpened);
                    break;
                }
        case 5: 
                {
                        isOpened==false;
                    CloseOpenDoors(isOpened);
                    cout << " \nlift come to" << ch << "floor\n";
                    isOpened==true;
                    CloseOpenDoors(isOpened);
                    break;
                }
        default:cout << "error!";
        }
        return 0;
}
 
int Lift::GetCurrentFloor() 
{
        return current_floor;
}
 
void Lift::SetCurrentFloor(int f)
{ 
        current_floor = f;
}
 
int main()
{ 
        Lift x;
        char choice;
        bool isOpened;
        cout << " Welcome to Lift programm!\n";
 
        for(;;) {
                choice=Lift::start_menu();
                switch(choice) {
                case 'c':
                        {
                        cout << " You called lift\n";
                        isOpened=true;
                        x.CloseOpenDoors(isOpened);
                        x.wight_menu();
                        break;
                        }
                case 'e':return 0;
                }
        }
}
Ваша отлаженная программа. Ошибки чисто синтаксические - пропущены ';' , функции не возвращают занчения, ну и в мэйне немного напутали.
Для оптимизации могу посоветовать выводить номер этажа, на котором находится лифт, лучше будет сохранять номер этажа в файле. Ещё у вас не работает проверка на макимальный вес пассажира.
Jagir
2 / 2 / 0
Регистрация: 13.06.2011
Сообщений: 12
13.06.2011, 20:11  [ТС]     Модель лифта #3
battlemc, Огромное спасибо! Думаю, с весом и остальным разберусь сам.
battlemc
Сообщений: n/a
13.06.2011, 20:18     Модель лифта #4
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
#include <iostream>
#include <cctype>
#include <cstring>
#include <cstdlib>
 
using namespace std;
 
class Lift {
        int current_floor,f;
        bool isOpened;
public:
    int GetCurrentFloor(), floor_menu(), wight_menu();
        static int start_menu();
    void SetCurrentFloor(int floor), CloseOpenDoors(bool n);
         
};
 
int Lift::start_menu()
{
        char choice;
 
        cout << "\n";
        do {
                cout << " Enter \n (C)all lift\n (E)xit";
                cin>>choice;
        } while(!strchr("ce",tolower(choice)));
        return tolower(choice);
}
 
void Lift::CloseOpenDoors(bool n)
{
        bool IsOpened=n;
        if (isOpened == true) cout << "Doors are opened\n";
        if (isOpened == false) cout << "Doors are locked\n";
        
}
 
int Lift::wight_menu()
{
        int wight;
        cout << " Enter passanger's wight\n (limit - 1000 kg)";
        cin >> wight;
        if (0 < wight < 1000) {
                isOpened = false;
                CloseOpenDoors(isOpened);
                floor_menu();
        } else cout << " Limit is nesoblyuden!\n";
        return 0;
}
        
int Lift::floor_menu()
{
        int ch;
        cout << "\n There is five floors \nEnter number of floor\n";
        cin>>ch;
        switch(ch) {
        case 1:cout << "You're in this floor";break;
        case 2: 
                {
                        isOpened=false;
                    CloseOpenDoors(isOpened);
                    cout << " \nlift come to" << ch << "floor\n";
                    isOpened=true;
                    CloseOpenDoors(isOpened);
                    break;
                }
        case 3: 
                {
                        isOpened=false;
                    CloseOpenDoors(isOpened);
                    cout << " \nlift come to" << ch << "floor\n";
                    isOpened=true;
                    CloseOpenDoors(isOpened);
                    break;
                }
        case 4: 
                {
                        isOpened=false;
                    CloseOpenDoors(isOpened);
                    cout << " \nlift come to" << ch << "floor\n";
                    isOpened=true;
                    CloseOpenDoors(isOpened);
                    break;
                }
        case 5: 
                {
                        isOpened=false;
                    CloseOpenDoors(isOpened);
                    cout << " \nlift come to" << ch << "floor\n";
                    isOpened=true;
                    CloseOpenDoors(isOpened);
                    break;
                }
        default:cout << "error!";
        }
        return 0;
}
 
int Lift::GetCurrentFloor() 
{
        return current_floor;
}
 
void Lift::SetCurrentFloor(int f)
{ 
        current_floor = f;
}
 
int main()
{ 
        Lift x;
        char choice;
        bool isOpened;
        cout << " Welcome to Lift programm!\n";
 
        for(;;) {
                choice=Lift::start_menu();
                switch(choice) {
                case 'c':
                        {
                        cout << " You called lift\n";
                        isOpened=true;
                        x.CloseOpenDoors(isOpened);
                        x.wight_menu();
                        break;
                        }
                case 'e':return 0;
                }
        }
}
Нашёл ошибку в работе "ограничителя" веса. Вы вместо операции присваивания "=" используете операцию "==".
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2011, 20:48     Модель лифта
Еще ссылки по теме:

Модель стека - C++
Не знаю где создать эту тему, поэтому создал тут: Есть вот такое задание: Модель стека 1. Исходные данные: стек списковой...

модель атома - C++
написать программу ,которая осуществит движение електронов вокруг атома.

C++. Виртуальная модель - C++
Заранее извиняюсь.Если подобные темы уже возникали.Но вопрос в следующем.Никто не мог бы дать ссылку,примеры,по работе с анимацией в С++.? ...

Модель «Сахарный мир» - C++
Модель «Сахарный мир» Модель «Сахарный мир» описывается следующими правилами: 1) Пространство является двумерной сеткой. 2) В...

Исследование алгоритмов (модель) - C++
Помогите решить задачку, наработок пока нету, с чего начать тоже не знаю... Исследование алгоритмов (модель) решения проблемы...

Модель СМО на С++. Реально? - C++
Добрый вечер! Можно ли при помощи языка С++, построить модель СМО? Если да, то может кто помочь, т.е. подсказать, как и с чего лучше начать?


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

Или воспользуйтесь поиском по форуму:
Jagir
2 / 2 / 0
Регистрация: 13.06.2011
Сообщений: 12
13.06.2011, 20:48  [ТС]     Модель лифта #5
Да, я уже заметил. заодно если заменить == на =, начинает работать функция вывода на экран открывания\закрывания дверей
Yandex
Объявления
13.06.2011, 20:48     Модель лифта
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru