Advertisement
kirya_shkolnik

Кристине, системы счисления

Nov 16th, 2020 (edited)
259
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.30 KB | None | 0 0
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include "math.h"
  4.  
  5. MainWindow::MainWindow(QWidget *parent) :
  6.     QMainWindow(parent),
  7.     ui(new Ui::MainWindow)
  8. {
  9.     ui->setupUi(this);
  10. }
  11.  
  12. MainWindow::~MainWindow()
  13. {
  14.     delete ui;
  15. }
  16.  
  17.  
  18. QString transformation(int value, int base)
  19. {
  20.     QString output;
  21.     while(value > 0)
  22.     {
  23.         char digit = value % base;
  24.  
  25.         if(digit < 10)
  26.             digit += 48; // смещение на 48 позиций таблицы ASCII, так как (char) 0 = (int) 48
  27.         else
  28.             digit += 55; // смещение на 55 позиций таблицы ASCII, так как (char) A = (int) 55  ( A = 10 )
  29.         output += digit;
  30.         value /= base;
  31.     }
  32.     std::reverse(output.begin(), output.end()); // переворот строки
  33.     return output;
  34. }
  35.  
  36. void MainWindow::on_pushButton_Result_clicked()
  37. {
  38.     QString str,bases;
  39.     int input, base;
  40.     bool isNumInput = false;
  41.     bool isNumBase = false;
  42.  
  43.     bool minus = false; // если число было введено с минусом, к конечному модулю переведенного числа будет дописан минус
  44.  
  45.     QString output = ""; // Объявление строки на вывод
  46.  
  47.     str = ui->lineEdit_Decimal->text(); // Ввод числа
  48.     bases = ui->lineEdit_Base->text();  // Ввод сс в которую будет осуществлен перевод
  49.     input=str.toInt(&isNumInput); // перевод в целочисленный тип данных с проверкой на существование числа
  50.     base=bases.toInt(&isNumBase);
  51.  
  52.  
  53.  
  54.     if(base > 32 || base < 2 || isNumBase == false) {
  55.         ui->lineEdit_Base->setText("Требуется число от 2 до 32!");
  56.         ui->lineEdit_Result->setText("Error: Система счисления 2-32!"); //вывод ошибки, так как программа работает с системами счисления до 32-ой
  57.     }
  58.     else{
  59.         if(isNumInput ==  false) { //проверка на существования числа
  60.              ui->lineEdit_Decimal->setText("Требуется число!");
  61.  
  62.              ui->lineEdit_Result->setText("Error: Необходимо ввести число!");
  63.         }
  64.         else{
  65.             if(input < 0){
  66.                  minus = true;
  67.             }
  68.             else{
  69.                  minus = false;
  70.             }
  71.             output = ""; // очищение строки
  72.             if(minus == true) output += "-"; // добавление к числу минуса в строковом типе данных
  73.             output += transformation(abs(input), base); // добавление к имеющейся строке переведенное число, введенное число взято по модулю
  74.             ui->lineEdit_Result->setText(output); //вывод
  75.         }
  76.     }
  77.     if(isNumInput ==  false) { // проверка на существования числа, если система счисления тоже вписана с ошибкой (если ошибка присутствует сразу в двух полях ввода)
  78.          ui->lineEdit_Decimal->setText("Требуется число!");
  79.     }
  80.  
  81. }
  82.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement