Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

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

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

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 12.09.2020, 12:08   #11
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 249
По умолчанию

maks1331, подправил, как я это вижу. Без особой отладки
Код:
#include <iostream>
#include <array>
#include <unordered_map>
#include <vector>

void AdjustCoding()
{
	setlocale(LC_ALL, "Russian");//для документа в кодировке 1251
}

using std::cout;
using std::cin;

using letterArr_t=std::array<uint8_t, 5> ; // тип переменной содержащей закодированный символ из нескольких строк
using td_letters_map=std::unordered_map<char,letterArr_t>;

static const td_letters_map m_letters_map=
{
	{' ' ,{ 0b00000000,
		   0b00000000,
		   0b00000000,
		   0b00000000,
		   0b00000000, }},

	{'A' ,{ 0b00110000,
		   0b01001000,
		   0b10000100,
		   0b11111100,
		   0b10000100, }},

	//далее можно так же в двоичном виде разрисовать, но мне лень
	{'B' ,{ 0xFC,
		   0x8C,
		   0xF8,
		   0x8C,
		   0xFC }},

	{'C' ,{ 0x7C, 0x84, 0x80, 0x84, 0x7C }},
	{'D' ,{ 0xF8, 0x84, 0x84, 0x84, 0xF8 }},
	{'E' ,{ 0xFC, 0x80, 0xFC, 0x80, 0xFC }},
	{'F' ,{ 0xFC, 0x80, 0xFC, 0x80, 0x80 }},
	{'G' ,{ 0xFC, 0x80, 0x9C, 0x84, 0xFC }},
	{'H' ,{ 0x84, 0x84, 0xFC, 0x84, 0x84 }},
	{'I' ,{ 0xFC, 0x30, 0x30, 0x30, 0xFC }},
	{'J' ,{ 0xFC, 0x18, 0x18, 0x98, 0x60 }},
	{'K' ,{ 0x84, 0x88, 0xF0, 0x90, 0x8C }},
	{'L' ,{ 0x80, 0x80, 0x80, 0x80, 0xFC }},
	{'M' ,{ 0x84, 0xCC, 0xB4, 0x84, 0x84 }},
	{'N' ,{ 0xC4, 0xA4, 0x94, 0x8C, 0x84 }},
	{'O' ,{ 0x30, 0x48, 0x84, 0x48, 0x30 }},
	{'P' ,{ 0xFC, 0x84, 0xFC, 0x80, 0x80 }},
	{'Q' ,{ 0x30, 0x48, 0x84, 0x48, 0x34 }},
	{'R' ,{ 0xFC, 0x84, 0xFC, 0x88, 0x84 }},
	{'S' ,{ 0x7C, 0x80, 0x78, 0x04, 0xF8 }},
	{'T' ,{ 0xFC, 0x30, 0x30, 0x30, 0x30 }},
	{'U' ,{ 0x84, 0x84, 0x84, 0x84, 0xFC }},
	{'V' ,{ 0x84, 0x84, 0x84, 0x48, 0x30 }},
	{'W' ,{ 0x84, 0x84, 0xB4, 0xCC, 0xCC }},
	{'X' ,{ 0x84, 0x48, 0x30, 0x48, 0x84 }},
	{'Y' ,{ 0x84, 0x48, 0x30, 0x30, 0x30 }},
	{'Z' ,{ 0xFC, 0x08, 0x30, 0xC0, 0xFC }},
};

static const letterArr_t m_NaN=
{
	0b01111000,
	0b10000100,
	0b00011000,
	0b00000000,
	0b00011000,
};

enum class Error { // сообщения об ошибках
	mainMenu, // ошибка в главном меню
	mainProgramMenu, // ошибка в меню основной функции
};

void startInfo() { // выводим стартовую информацию
	std::cout <<	""   ".............."
				"\n" "...111...111.."
				"\n" "..1.....1....."
				"\n" "..1.11..1.11.."
				"\n" ".............."
				"\n" "...111111111.."
				"\n" ".............."
				"\n" "Программа визуализации введенной фразы."
				"\n" ""
				;
}

void getInfo() { // выводим информацию о программе
	cout <<	""   ".............."
			"\n" "Программа визуализации введенной фразы:"
			"\n" "\t- Версия 0.2 beta"
			"\n" "\t\t- Ограниченный набор символов (EN CAPS)"
			"\n" "\t\t- Добавлена обработка неверного ввода"
			"\n" "\t- (c) 09.2020 ****"
			"\n" ".............."
			;
}

void mainProgram()
{
	while(1)
	{
		cout << '\n';
		cout << "Ваша фраза: ";
		std::string words; std::getline(cin,words); cin.sync();
		cout << '\n';

		std::vector<letterArr_t> arrayLetter;
		for(auto& c:words)
		{
			if(auto it=m_letters_map.find(c); it!=m_letters_map.end())
			{
				arrayLetter.emplace_back(it->second);
			}
			else
			{
				arrayLetter.emplace_back(m_NaN);
			}
		}

		for(const auto& letter:arrayLetter)
		{
			using type=letterArr_t::value_type;
			for(const type& line_of_letter:letter)
			{
				constexpr type full_mask=~type(0);//==0b11111111
				constexpr type elder_bit_mask=(full_mask^(full_mask>>1));//==0b1000000

				type value_to_scan=line_of_letter;
				type mask=elder_bit_mask;

				for(;mask;mask>>=1)
				{
					cout << ((value_to_scan&mask)?'1':' ');
				}

				cout << '\n';
			}

			cout << '\n';
		}

		enum class choose{none,cont,ret,};

		//показываем меню
		cout << "Продолжить("+std::to_string((int)choose::cont)
			   +")/Вернуться("+std::to_string((int)choose::ret)+
			   ") в меню ?" << "\nВВОД:";
		const choose menu_x=[]
		{
			int val=0; cin >> val; cin.sync();
			return choose(val);
		}();

		//выполняем
		switch(menu_x)
		{
			case choose::cont:{}break; // к запросу фразы
			case choose::ret:{return;}break;
			default:{cout << "Ошибка: " << static_cast<int>(Error::mainProgramMenu) << '\n';}break;
		}
	}
}

int main()
{
	AdjustCoding();

	startInfo();

	do
	{
		//показываем меню
		enum class choose{none,run,help,close,};
		cout << '\n';
		cout << '\n';
		cout << "ВВОД "+std::to_string((int)choose::run)+" - ЗАПУСТИТЬ ПРОГРАММУ;" << '\n';
		cout << "ВВОД "+std::to_string((int)choose::help)+" - СПРАВКА;" << '\n';
		cout << "ВВОД "+std::to_string((int)choose::close)+" - ЗАКРЫТЬ ПРОГРАММУ;" << '\n';
		const choose menu_x=[]
		{
			int val=0; cin >> val; cin.sync();
			return choose(val);
		}();

		//выполняем
		switch (menu_x)
		{
			case choose::run:{mainProgram();}break;
			case choose::help:{getInfo();}break;
			case choose::close:{ return 0;}break;
			default:{cout << "Ошибка: " << static_cast<int>(Error::mainMenu) << '\n';}
		}
	} while (true);

	return 0;
}

Последний раз редактировалось Алексей1153; 12.09.2020 в 12:14.
Алексей1153 вне форума Ответить с цитированием
Старый 15.09.2020, 07:38   #12
maks1331
Пользователь
 
Регистрация: 20.12.2016
Сообщений: 69
По умолчанию

Алексей1153, спасибо, буду вникать
maks1331 вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массивы, функции, С++ Eddi_Brown Помощь студентам 3 24.03.2014 08:15
Массивы и функции tutty123 Помощь студентам 0 06.12.2012 01:57
Массивы, функции СИ Redbbt Помощь студентам 1 08.10.2012 22:46
С++ массивы и функции. Jenkins Помощь студентам 15 28.02.2012 22:41
Функции и массивы. 3.14rojoke Общие вопросы C/C++ 1 14.04.2010 14:32


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS
Здесь нужно купить рекламу за 7 тыс руб в месяц! )
пишите сюда - alarforum@yandex.ru
ИКС 840