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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.63
Jagir
2 / 2 / 0
Регистрация: 13.06.2011
Сообщений: 12
13.06.2011, 16:53     Модель лифта #1
Доброго времени суток! Задача - реализовать в программе команды по управлению лифтом, учитывая практические ограничения ( лифт должен оставаться на этаже, куда "приехал" пользователь) . Мыслью было сделать нечто вроде текстовых игр ( т.е. последовательно задающиеся вопросы). В итоге написал код, но компилятор сильно ругается, особенно в мэйне (использую 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++
C++ Модель перекрестка
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;
                }
        }
}
Нашёл ошибку в работе "ограничителя" веса. Вы вместо операции присваивания "=" используете операцию "==".
Jagir
2 / 2 / 0
Регистрация: 13.06.2011
Сообщений: 12
13.06.2011, 20:48  [ТС]     Модель лифта #5
Да, я уже заметил. заодно если заменить == на =, начинает работать функция вывода на экран открывания\закрывания дверей
Yandex
Объявления
13.06.2011, 20:48     Модель лифта
Ответ Создать тему
Опции темы

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