Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.03.2016, 17:49   #1
Ubuntu_Ninja
Новичок
Джуниор
 
Регистрация: 13.03.2016
Сообщений: 3
Радость Задача на краткость в коде

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

Код:
#include <iostream>
#include <math.h>

int main(int argc, char** argv) {
	setlocale (0, "rus");
	std::string abb;                 //======Параметр ввода=======
	int i=0,c=0; int b=0, d=0;
	std::cout << "Это программа - автомобиль с дверьми.\n";
	std::cout<< "Выбирете какую дверь открыть, для того введите:\n";
	oppa:
	std::cout<< "L - левая дверь, R - правая дверь, BL - задняя левая, BR - задняя правая\n\n";
	std::cout << "Для закрытия введите ту же букву (Регистр ТОЛЬКО БОЛЬШОЙ)\n";
	std::cin >> abb;
	//==============================LEFT DOOR=======================
	if (abb=="L"&& i==0)
	{
		std::cout <<	"LEFT Дверь открыта\n";
		i+=1;
	}
	else
	if(abb=="L" && i==1)
	{
		std::cout <<	"LEFT Дверь закрыта\n";
		i-=1;
	}
	//==================================RIGHT DOOR==========================
	if (abb=="R"&& c==0)
	{
		std::cout <<	"Right Дверь открыта\n";
		c+=1;
	}
	else
	if (abb=="R"&& c==1)
	{
		std::cout <<	"Right Дверь закрыта\n";
		c-=1;
	}
	//=======================================BACK DOORS=============================
	//-----
	//==============================BACK LEFT DOOR==============================
	if (abb=="BL"&& b==0)
	{
		std::cout <<	"LEFT Дверь открыта\n";
		b+=1;
	}
	else
	if(abb=="BL" && b==1)
	{
		std::cout <<	"LEFT Дверь закрыта\n";
		b-=1;
	}
	//=====================================BACK RIGHT DOOR=========================
	if (abb=="BR"&& c==0)
	{
		std::cout <<	"Right Дверь открыта\n";
		d+=1;
	}
	else
	if (abb=="BR"&& d==1)
	{
		std::cout <<	"Right Дверь закрыта\n";
		d-=1;
	}
	//======================================END OF BACK DOORS==========================
	

//================================НЕТ ВЫХОДА ПОКА НЕ ЗАКРОЕТЕ ВСЕ ДВЕРИ========================
if (abb=="exit")
{
	if(i==0&&c==0&&b==0&&d==0) //если все двери равны 0(закрыты)
	{
	std::cout << "СПАСИБО ЗА ВНИМАНИЕ!";
	return 0; //////////ТО КОНЕЦ ИГРЫ
	}else //НО ЕСЛИ ХОТЬ ОДНА ОТКРЫТА
	{
		std::cout<<"Пожалуйста, закройте сначала двери авто"; //ТО ПРОСЬБА ЗАКРЫТЬ
	}
}
	std::cout<< "(для выхода напишите exit)\n";
	goto oppa;
return 0;
system ("pause");
}
Благодарю за внимание

Последний раз редактировалось Аватар; 14.03.2016 в 09:34.
Ubuntu_Ninja вне форума Ответить с цитированием
Старый 13.03.2016, 17:51   #2
Ubuntu_Ninja
Новичок
Джуниор
 
Регистрация: 13.03.2016
Сообщений: 3
По умолчанию

Программу я писал на скорую руку, так что извиняюсь за мелкие маразмы в выдаче текста там
Ubuntu_Ninja вне форума Ответить с цитированием
Старый 13.03.2016, 19:43   #3
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Не нужно проверять открытость/закрытость дверей. Поступила команда закрыть - закрываем и пофиг, что она уже была закрыта.
Для хранения состояния дверей я бы запользовал "флаги" для побитового хранения.
https://msdn.microsoft.com/ru-ru/library/2dzy4k6e.aspx
Код:
enum DoorsState
{
  AllClosed = 0,
  FrontLeft = 1,
  FrontRight = 2,
  BackLeft = 4,
  BackRight = 8
}
Если значение этой фигни будет 0 - значит двери все закрыты.
Идут годы, проходят века, а люди всё пишут goto...
Более кошерно зацикливать циклом, в данном случае можно взять с постусловием. Если совсем просто делать, то бесконечный while (true) и выход из него по break. Всяко лучше, чем goto.
pu4koff вне форума Ответить с цитированием
Старый 14.03.2016, 02:07   #4
Ubuntu_Ninja
Новичок
Джуниор
 
Регистрация: 13.03.2016
Сообщений: 3
Радость Благодарю

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Не нужно проверять открытость/закрытость дверей. Поступила команда закрыть - закрываем и пофиг, что она уже была закрыта.
Для хранения состояния дверей я бы запользовал "флаги" для побитового хранения.
https://msdn.microsoft.com/ru-ru/library/2dzy4k6e.aspx
Код:
enum DoorsState
{
  AllClosed = 0,
  FrontLeft = 1,
  FrontRight = 2,
  BackLeft = 4,
  BackRight = 8
}
Если значение этой фигни будет 0 - значит двери все закрыты.
Идут годы, проходят века, а люди всё пишут goto...
Более кошерно зацикливать циклом, в данном случае можно взять с постусловием. Если совсем просто делать, то бесконечный while (true) и выход из него по break. Всяко лучше, чем goto.
Сам я начинающий, думаю это заметно) Благодарю за ответ, отличный вариант как по мне)
Ubuntu_Ninja вне форума Ответить с цитированием
Старый 14.03.2016, 09:30   #5
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Главное - не гнаться за компактностью. Код должен быть рабочим и понятным, размер тут не имеет значения вообще.
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Легкая задача в C++, не могу найти ошибку в коде. Aaaaaa111 Помощь студентам 3 20.02.2012 14:07
Легкая задача в С++, найдите ошибку в коде Aaaaaa111 Помощь студентам 11 15.02.2012 12:46
Задача на процедуру.(у меня в коде ошибка) Буханкин Паскаль, Turbo Pascal, PascalABC.NET 1 20.11.2011 12:56
найти ошибку в коде С задача на обратную матрицу Monomah Помощь студентам 0 20.02.2011 17:11
Задача по нахождению ошибок в коде(язык с) tolik_gd Общие вопросы C/C++ 11 16.02.2011 12:51