Russian Qt Forum
Апрель 26, 2024, 16:00 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Преобразование систем счисления 2-16  (Прочитано 1552 раз)
alexu007
Чайник
*
Offline Offline

Сообщений: 57


Просмотр профиля
« : Май 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));

}
« Последнее редактирование: Май 01, 2022, 17:28 от alexu007 » Записан
qtkoder777
Частый гость
***
Offline Offline

Сообщений: 245


Просмотр профиля
« Ответ #1 : Май 02, 2022, 00:04 »

Qstring::number
Написание собственных функций для таких вещей в промышленном коде не приветствуется.
Записан
alexu007
Чайник
*
Offline Offline

Сообщений: 57


Просмотр профиля
« Ответ #2 : Май 02, 2022, 07:32 »

Задача была учебной. Бедняге студенту злой препод "ничего не объяснил", и сразу "задал такую непосильную задачу". Задачу я решил, но код выкладывать не стал. Не люблю работать за двоечников. Да ему (студенту) это бы и не помогло. Программа написана на Qt и оконная, а ему нужна консольная, и что-бы не меняя ни одного символа сразу показать преподу. Модификация чужих программ и подгонка их под свои требования вгоняет двоечников в гарантированный ступор.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.045 секунд. Запросов: 22.