Название: Преобразование систем счисления 2-16
Отправлено: alexu007 от Май 01, 2022, 17:20
Преобразование систем счисления 2-16. Не производится никаких проверок на корректность введённых чисел. Максимальный размер чисел - те, которые "влезают" в 64 разряда. Код: #ifndef WIDGET_H #define WIDGET_H
#include <QWidget>
QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACE
class Widget : public QWidget { Q_OBJECT
public: Widget(QWidget *parent = nullptr); ~Widget();
private: Ui::Widget *ui;
public slots: void press_pbtn_01(); };
#endif // WIDGET_H #include "widget.h" #include "ui_widget.h"
Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this);
QObject::connect(ui->pbtn_01,SIGNAL(clicked()),this,SLOT(press_pbtn_01())); }
Widget::~Widget() { delete ui; }
// перевод числа из х в десятичную систему QString conv_any_todec(int x, QString str_in) { // удаление пробелов из входной строки str_in = str_in.remove(" ");
QString s1; quint32 ln = str_in.length() - 1; quint64 k, sum = 0;
for(quint32 j = 0; j <= ln; j++) { s1 = str_in.at(ln - j);
if(s1 == "A") s1 = "10"; if(s1 == "B") s1 = "11"; if(s1 == "C") s1 = "12"; if(s1 == "D") s1 = "13"; if(s1 == "E") s1 = "14"; if(s1 == "F") s1 = "15";
k = 1; for(quint32 i = 0; i < j; i++) k *= x;
sum += s1.toInt() * k; }
return QString::number(sum); }
// перевод числа из десятичной в х систему QString conv_dec_toany(int x, QString str_in) { QString s1, res; quint32 k; quint64 dig = str_in.toULongLong();
while(dig > 0) { k = dig % x; dig /= x;
if(k < 10) s1 = QString::number(k);
if(k == 10) s1 = "A"; if(k == 11) s1 = "B"; if(k == 12) s1 = "C"; if(k == 13) s1 = "D"; if(k == 14) s1 = "E"; if(k == 15) s1 = "F";
res += s1; }
s1.clear(); for(int j = res.length()-1; j >= 0; j--) { s1.append(res.at(j)); }
return s1; }
//функция добавляет пробелы в число 12345678 -> 12 345 678 //--------------------------------------------------------------------------- QString fn_SpsToInt(QString str, quint32 k) { int x = str.length() - k; while(x > 0) {str.insert(x, QString(" ")); x -= k;}
return str; }
// кнопка "Start" void Widget::press_pbtn_01() { QString str, dec, res; quint32 chl, k;
str = ui->lineEdit_1->text(); chl = str.toInt();
str = ui->lineEdit_2->text().toUpper(); ui->lineEdit_2->setText(str);
dec = conv_any_todec(chl, str);
str = ui->lineEdit_3->text(); chl = str.toUInt();
if(chl == 10) k = 3; else k = 4;
res = conv_dec_toany(chl, dec);
ui->label->setText(fn_SpsToInt(dec, 3)); ui->lineEdit_4->setText(fn_SpsToInt(res, k));
}
Название: Re: Преобразование систем счисления 2-16
Отправлено: qtkoder777 от Май 02, 2022, 00:04
Qstring::number Написание собственных функций для таких вещей в промышленном коде не приветствуется.
Название: Re: Преобразование систем счисления 2-16
Отправлено: alexu007 от Май 02, 2022, 07:32
Задача была учебной. Бедняге студенту злой препод "ничего не объяснил", и сразу "задал такую непосильную задачу". Задачу я решил, но код выкладывать не стал. Не люблю работать за двоечников. Да ему (студенту) это бы и не помогло. Программа написана на Qt и оконная, а ему нужна консольная, и что-бы не меняя ни одного символа сразу показать преподу. Модификация чужих программ и подгонка их под свои требования вгоняет двоечников в гарантированный ступор.
|