В целое число.
int InputNum(HANDLE out, char *mes, char *error, int begPoz=0, WORD PozitionNumX=0, WORD PozitionNumY=10) { char CharNum [20]; //массив символов при вводе с клавиатуры int NUM; //число, полученное из массива символов COORD XY; //координаты для позиционирования
//позиционирование курсора с предварительной очисткой строки SetConsoleTextAttribute(out, 0);// цвет черный XY.X = PozitionNumX; XY.Y = PozitionNumY; SetConsoleCursorPosition(out,XY); for(int i=begPoz; i<75; i++) _putch(' ');//подготовка строки - очистка SetConsoleCursorPosition(out,XY); SetConsoleTextAttribute(out, 15);// цвет текста белый
//вывод сообщения для ввода и сам ввод строки printf_s(mes); scanf_s("%19s",CharNum,20);
//проверка на допустимое значение с преобразованием NUM = Proverka(CharNum);
//выдача сообщения об ошибке в фиксированной позиции if(NUM < 0) { SetConsoleTextAttribute(out, 0);//цвет черный XY.X = 0; XY.Y = 15; SetConsoleCursorPosition(out,XY); for(int i=0; i<75; i++) _putch(' ');//очистка строки
XY.X = 0; XY.Y = 15; SetConsoleCursorPosition(out,XY); SetConsoleTextAttribute(out, 12);//цвет красный printf_s(error); } else //число правильное, стирание сообщения об ошибке { SetConsoleTextAttribute(out, 0);//цвет черный XY.X = 0; XY.Y = 15; SetConsoleCursorPosition(out,XY); for(int i=0; i<75; i++) _putch(' ');//очистка строки SetConsoleTextAttribute(out, 15);//цвет белый } return NUM; }
//----------------------------------------------------------------- Функция формирование дроби из двух целых чисел drob GetDrob(HANDLE out) { char *Messag1 = "Введите числитель дроби-> "; char *Messag2 = "Введите знаменатель дроби-> "; char *Messag3 = "Неверный ввод данных!!!"; drob d; WORD PozChisX = 0, PozZnamX = 40; //позиции для высветки int NUM = -1; //непреобразованное число
//ввод числителя while(NUM < 0) { NUM = InputNum(out, Messag1, Messag3); } d.chis = NUM;
//ввод знаменателя NUM = -1; while(NUM < 0) { NUM = InputNum(out, Messag2, Messag3, 40, 40); } d.znam = NUM; return d; }
//------------------------------------------------------------- Функция формирования степени целого числа С записью в строку для протокола int GetStep(HANDLE out, char *str1) { char *Messag1 = "\tВведите степень дробного числа -> "; char *Messag2 = "Неверный ввод степени числа!!!";
int NUM = -1; //непреобразованное число - степень
//ввод строки - степени числа и ее преобразование while(NUM < 0) { NUM = InputNum(out, Messag1, Messag2, 0, 0, 12); }
sprintf_s(str1,80,"%d",NUM); //запись в строку return NUM; }
//------------------------------------------------------------------ Функция вывода ответа. Вывод дроби с преобразованием в целую и дробную часть на экран. Запись дроби в строку str1 для протокола. void PrintOtvet(drob d, HANDLE out, char * str1, char oper) {
SetConsoleTextAttribute(out, 10);//цвет зеленый COORD XY; XY.X = 0; XY.Y = 15; SetConsoleCursorPosition(out,XY); for(int i=0; i<75; i++) _putch(' ');//очистка строки
XY.X = 0; XY.Y = 15; SetConsoleCursorPosition(out,XY); SetConsoleTextAttribute(out, 10);//цвет зеленый int count=0;//счетчик целого числа
if(d.chis >= d.znam) //если числитель больше знаменателя { do{ d.chis = d.chis - d.znam; count++; //выделение целой части, если числитель больше знаменателя }while(d.chis >= d.znam); if(d.chis == 0)sprintf_s(str1,80,"Ответ: (%d)",count); //только целая часть else sprintf_s(str1,80,"Ответ: (%d %d / %d)",count, d.chis, d.znam); //целая часть и дробная часть } else{ //если числитель меньше знаменателя if(d.chis == 0 && count == 0) sprintf_s(str1,80,"Ответ: (%d)",count);//в ответе 0 else sprintf_s(str1,80,"Ответ: (%d / %d)",d.chis, d.znam); //правильная дробь } printf_s("Операция %c, %s", oper, str1); SetConsoleTextAttribute(out, 15);//цвет белый
} //--------------------------------------------------------------- Функция ввода операции char GetOper(HANDLE out) { COORD XY; XY.X = 0; XY.Y = 12; SetConsoleCursorPosition(out,XY); for(int i=0; i<75; i++) _putch(' ');
XY.X = 0; XY.Y = 12; SetConsoleCursorPosition(out,XY); char op; printf_s("\tВведите операцию-> "); op = _getch(); _putch(op); return op; }
//------------------------------------------------------------- Функция вывода сообщения на экран о неправильно введенной операции void PrintNoOper(char oper, HANDLE out) { SetConsoleTextAttribute(out, 0);//цвет черный COORD XY; XY.X = 0; XY.Y = 15; SetConsoleCursorPosition(out,XY); for(int i=0; i<75; i++) _putch(' ');//очистка строки
XY.X = 0; XY.Y = 15; SetConsoleCursorPosition(out,XY); SetConsoleTextAttribute(out, 12);//цвет красный printf_s("Операции %c не существует!!!", oper);
SetConsoleTextAttribute(out, 15);//восстановление белого цвета текста }
|