Advertisement
PoulYakov

Untitled

Dec 6th, 2022
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.45 KB | None | 0 0
  1. #include <iostream>
  2. #include <signal.h>
  3. using namespace std;
  4.  
  5. bool checkString(string s) { // Функция проверки строки на корректность ввода строки s
  6.  
  7. if (s.length() > 5) // Проверяем, если строка больше, чем 5 символов в длину
  8. return false; // Завершаем программу с ложным результатом
  9. else { // Если удовлетворяет длине строки
  10. for (int i = 0; i < s.length(); ++i) { // Цикл для поочередного перебора символов строки
  11. if (!((65<=s[i] && s[i]<=90) || (48<=s[i] && s[i]<=57) || (97<=s[i] && s[i]<=122))) // Проверка, является ли символ латинской буквой либо цифрой десятичной системы счисления
  12. return false; // Если нет, то завершаем программу с ложным результатом
  13.  
  14. }
  15. }
  16. return true; // Если программа отработала и до этого не завершилась с ложным результатом - завершаем программу с истинным результатом
  17. }
  18.  
  19. int getMinBase(string s) { // Функция для получения минимальной системы счисления, в которой может быть представлена строка4 s
  20. int minimum_base = 2; // Инициализируем минимально возможную систему счисления
  21. for (int i = 0; i < s.length(); ++i) { // Цикл для поочередного перебора символов строки
  22. char symb = s[i]; // Создаем переменную symb с записаным туда значением символа текущего символа в цикле
  23.  
  24. // Переводим каждую цифру в десятичную систему счисления
  25. if (symb < 65) { // Цифры, с ASCII кодом до 65, а именно 0,1,2,3,4,5,6,7,8,9
  26. symb = symb - 48; // Придодим символы в целочисленное значение
  27. }
  28. else if (symb <= 90) // Латинские символы с ASCII кодом до 90 включительно
  29. symb -= 55; // Придодим символы в целочисленное значение
  30. else {
  31. symb = toupper(symb); // Приводим оставшиеся символы латиницы в верхний регистр
  32. symb -= 55; // Придодим символы в целочисленное значение
  33. }
  34. if (symb + 1 > minimum_base) // проверяем может ли символ symb быть в системе счисления с основанием minimum_base
  35. minimum_base = symb + 1; // если нет, то обновляем минимально возможную систему счисления
  36. }
  37. return minimum_base; // Возвращаем целочисленное значение системы счисления, в которой может быть представлена строка s
  38. }
  39.  
  40.  
  41. int main()
  42. {
  43. system("chcp 1251"); // Позволяет работать с русским языком
  44. // Выводим текст
  45. cout << "Введите матрицу размера 4x4, состоящую из строк символов десятичных цифр и латиницы длиной до 5 включительно\n";
  46. int matrix[4][4]; // Создаем двумерный массив
  47. string input_string; // Иницализация строки
  48. for (int i = 0; i < 4; ++i) { // Цикл для поочередного заполнения строк в матрице
  49. for (int j = 0; j < 4; j++) { // Цикл для поочередного заполнения элементов в строке
  50. cout << "matrix[" << i << "][" << j << "] = ";
  51. cin >> input_string; // Пользователь вводит строку
  52.  
  53. while (!checkString(input_string)) { // Проверка на корректность ввода
  54. cout << "Неверный ввод, введите строку состоящую из цифр и букв английского алфавита\nmatrix["<<i<<"]["<<j<<"] = ";
  55. cin >> input_string; // Пользователь вводит строку
  56.  
  57. }
  58.  
  59. matrix[i][j] = getMinBase(input_string); // Заполняем ячейку матрицы минимальным
  60. // основанием системы счисления, в которой может быть исходная строка
  61. }
  62. }
  63.  
  64. cout << "Новая матрица:\n";
  65. // Выводим новую матрицу
  66. for (int i = 0; i < 4; ++i) { // Цикл для поочередного перебора строк
  67. for (int j = 0; j < 4; j++) { // Цикл для поочередного перебора элементов строки
  68. cout << matrix[i][j]<<" "; // Выводим на экран элемент марицы
  69. }
  70. cout << "\n"; // Переход на новую строку для вывода матрицы
  71. }
  72. }
  73.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement