rezaict 1 ارسال شده در بهمن 1 سلام. اگر بخوایم برای ضرب دو عدد با طول بی نهایت در یک ماشین حساب که در محیط QT ساخته شده است به شرطی که نتیجه ضرب را نشان دهد و overflow رخ ندهد، از چه کتاب خانه ای می توان استفاده کرد؟ نقل قول به اشتراک گذاری این ارسال لینک به ارسال به اشتراک گذاری در سایت های دیگر
کامبیز اسدزاده 623 ارسال شده در بهمن 1 در 17 ساعت قبل، rezaict گفته است : سلام. اگر بخوایم برای ضرب دو عدد با طول بی نهایت در یک ماشین حساب که در محیط QT ساخته شده است به شرطی که نتیجه ضرب را نشان دهد و overflow رخ ندهد، از چه کتاب خانه ای می توان استفاده کرد؟ درود،با هدف بینهایت که منطقی نیست به هر حال باید یک بازهٔ قابل پشتیبانی اعمال بشه. این کتابخانه را بررسی کنید. #include "BigInt.hpp" ///// BigInt big1 = 1234567890, big2; big2 = "9876543210123456789098765432101234567890"; std::cout << big1 * big2 * 123456 << "\n"; // Output: 1505331490682966620443288524512589666204282352096057600 نقل قول به اشتراک گذاری این ارسال لینک به ارسال به اشتراک گذاری در سایت های دیگر
rezaict 1 ارسال شده در بهمن 1 (ویرایش شده) ممنونم از پاسختون جسارتا موقعی که اجراش میکنم با ارور مواجه میشم (من دارم از حالت widget application در QT استفاده میکنم. شاید به خاطر این باشه که از حالت console استفاده نمیکنم) error: multiple definition of `is_valid_number(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' debug/calculator.o: In function `ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE16_M_construct_auxIPcEEvT_S7_St12__false_type': ویرایش شده در بهمن 1 توسط rezaict ناقص بودن اطلاعات نقل قول به اشتراک گذاری این ارسال لینک به ارسال به اشتراک گذاری در سایت های دیگر
کامبیز اسدزاده 623 ارسال شده در بهمن 1 در 2 ساعت قبل، rezaict گفته است : ممنونم از پاسختون جسارتا موقعی که اجراش میکنم با ارور مواجه میشم (من دارم از حالت widget application در QT استفاده میکنم. شاید به خاطر این باشه که از حالت console استفاده نمیکنم) error: multiple definition of `is_valid_number(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' debug/calculator.o: In function `ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE16_M_construct_auxIPcEEvT_S7_St12__false_type': بنده روی Qt Widget و STL آزمایش کردم، مشکلی نداره و اجرا میشه. خطایی که ارسال کردین اشاره به بازتعریف is_valid_number داره، بررسی کنید که تکرار در تعریف تابع وجود نداشته باشه. نقل قول به اشتراک گذاری این ارسال لینک به ارسال به اشتراک گذاری در سایت های دیگر
rezaict 1 ارسال شده در بهمن 1 آها ببخشین من کتابخانه رو به صورت <> تعریف کرده بودم در صورتیکه باید توی کوتیشن بود. ولی با این حال هیچ تفاوتی نکرد وقتی طول اعداد بزرگ باشه حاصلضرب رو کامل نمایش نمیده و به صورت عدد e خلاصه میکنه (یه عکس از خروجی براتون میفرستم) حاصلضرب دو عدد 123456789 و 987654321 رو نشون میده لینک عکس: ممنون میشم راهنماییم بفرمایین نقل قول به اشتراک گذاری این ارسال لینک به ارسال به اشتراک گذاری در سایت های دیگر
کامبیز اسدزاده 623 ارسال شده در بهمن 1 مشکلی نداره و کد مربوط به بخش نمایش مقادیر رو ببینم. نقل قول خروجی در سیستم من: 121932631112635269 نقل قول به اشتراک گذاری این ارسال لینک به ارسال به اشتراک گذاری در سایت های دیگر
rezaict 1 ارسال شده در بهمن 1 (ویرایش شده) این کدهایی هست که من نوشتم (فایلی به اسم calculator.cpp) "calculator.h" #include "ui_calculator.h" #include "BigInt.hpp" calculator::calculator(QWidget *parent) : QWidget(parent) , ui(new Ui::calculator) { ui->setupUi(this); action=Action_Type::nothing; connect(ui->Button_0,&QPushButton::clicked,this,[this](){ui->display->setText(ui->display->text()+"0");}); connect(ui->Button_1,&QPushButton::clicked,this,[this](){ui->display->setText(ui->display->text()+"1");}); connect(ui->Button_2,&QPushButton::clicked,this,[this](){ui->display->setText(ui->display->text()+"2");}); connect(ui->Button_3,&QPushButton::clicked,this,[this](){ui->display->setText(ui->display->text()+"3");}); connect(ui->Button_4,&QPushButton::clicked,this,[this](){ui->display->setText(ui->display->text()+"4");}); connect(ui->Button_5,&QPushButton::clicked,this,[this](){ui->display->setText(ui->display->text()+"5");}); connect(ui->Button_6,&QPushButton::clicked,this,[this](){ui->display->setText(ui->display->text()+"6");}); connect(ui->Button_7,&QPushButton::clicked,this,[this](){ui->display->setText(ui->display->text()+"7");}); connect(ui->Button_8,&QPushButton::clicked,this,[this](){ui->display->setText(ui->display->text()+"8");}); connect(ui->Button_9,&QPushButton::clicked,this,[this](){ui->display->setText(ui->display->text()+"9");}); connect(ui->Button_dot,&QPushButton::clicked,this,[this](){ui->display->setText(ui->display->text()+".");}); connect(ui->Button_add,SIGNAL(clicked(bool)),this,SLOT(onAdd())); connect(ui->Button_div,SIGNAL(clicked(bool)),this,SLOT(onDiv())); connect(ui->Button_sub,SIGNAL(clicked(bool)),this,SLOT(onSub())); connect(ui->Button_mul,SIGNAL(clicked(bool)),this,SLOT(onMul())); connect(ui->Button_result,SIGNAL(clicked(bool)),this,SLOT(onResult())); connect(ui->Button_clean,SIGNAL(clicked(bool)),this,SLOT(onClean())); connect(ui->Button_exit,SIGNAL(clicked(bool)),this,SLOT(onExit())); } calculator::~calculator() { delete ui; } void calculator::onAdd() { if(ui->display->text().isEmpty()) return; previousVal=ui->display->text().toDouble(); action=Action_Type::add; ui->resultdisplay->setText(ui->display->text()+"+"); ui->display->clear(); } void calculator::onSub() { if(ui->display->text().isEmpty()) return; previousVal=ui->display->text().toDouble(); action=Action_Type::sub; ui->resultdisplay->setText(ui->display->text()+"-"); ui->display->clear(); } void calculator::onMul() { if(ui->display->text().isEmpty()) return; previousVal=ui->display->text().toDouble(); action=Action_Type::mul; ui->resultdisplay->setText(ui->display->text()+"*"); ui->display->clear(); } void calculator::onDiv() { if(ui->display->text().isEmpty()) return; previousVal=ui->display->text().toDouble(); action=Action_Type::div; ui->resultdisplay->setText(ui->display->text()+"/"); ui->display->clear(); } void calculator::onResult() { if(ui->display->text().isEmpty()) return; double currentVal=ui->display->text().toDouble(); if(action!=Action_Type::nothing) { switch (action) { case Action_Type::add: ui->resultdisplay->setText(ui->resultdisplay->text()+QString::number(currentVal)+"="+QString::number(previousVal + currentVal)); break; case Action_Type::sub: ui->resultdisplay->setText(ui->resultdisplay->text()+QString::number(currentVal)+"="+QString::number(previousVal - currentVal)); break; case Action_Type::mul: ui->resultdisplay->setText(ui->resultdisplay->text()+QString::number(currentVal)+"="+QString::number(previousVal * currentVal)); break; case Action_Type::div: ui->resultdisplay->setText(ui->resultdisplay->text()+QString::number(currentVal)+"="+QString::number(previousVal / currentVal)); break; default: break; } ui->display->clear(); action=Action_Type::nothing; } } void calculator::onClean() { if(ui->display->text().isEmpty()) return; previousVal=ui->display->text().toDouble(); action=Action_Type::clean; // ui->resultdisplay->setText(ui->display->text()+""); ui->display->clear(); } void calculator::onExit() { calculator::close(); بنظرتون مشکل از کجاست ویرایش شده در بهمن 1 توسط کامبیز اسدزاده عدم بلاکگذاری کد. نقل قول به اشتراک گذاری این ارسال لینک به ارسال به اشتراک گذاری در سایت های دیگر
کامبیز اسدزاده 623 ارسال شده در بهمن 1 به نظرم به خاطر تبدیل مجدد به double هست، خب شما خروجی مستقیم از کتابخانه رو چاپ کنید و در قالب Text به کنترل QLabel بدین. یک مثال ساده: BigInt big1 = 123456789; BigInt big2 = 987654321; BigInt res = big1 * big2; qDebug() << res.to_string().c_str(); ui->label->setText(res.to_string().c_str()); نقل قول به اشتراک گذاری این ارسال لینک به ارسال به اشتراک گذاری در سایت های دیگر
rezaict 1 ارسال شده در بهمن 1 سلام، واقعیتش تا الان درگیرش بودم ولی به نتیجه ای نرسیدم و نتونستم کد رو بزنم فک کنم چون من تازه وارد این حوزه شدم و مفاهیم رو به طور کامل بلد نیستم این اتفاق برام افتاده به هر حال ممنون از شما که برام وقت گذاشتین سپاسگزارم نقل قول به اشتراک گذاری این ارسال لینک به ارسال به اشتراک گذاری در سایت های دیگر
کامبیز اسدزاده 623 ارسال شده در بهمن 1 در 9 ساعت قبل، rezaict گفته است : سلام، واقعیتش تا الان درگیرش بودم ولی به نتیجه ای نرسیدم و نتونستم کد رو بزنم فک کنم چون من تازه وارد این حوزه شدم و مفاهیم رو به طور کامل بلد نیستم این اتفاق برام افتاده به هر حال ممنون از شما که برام وقت گذاشتین سپاسگزارم درود، کدی که مثال زدم رو سعی کنید خیلی ساده جایگزین کنید، کار خاصی نداره؛ نباید در خروجی نهایی نوع دابل اعمال بشه و سعی کنید در قالب خودش یعنی رشته نمایشش بدین. موفق باشید. نقل قول به اشتراک گذاری این ارسال لینک به ارسال به اشتراک گذاری در سایت های دیگر
rezaict 1 ارسال شده در بهمن 1 (ویرایش شده) سلام مجدد، بالاخره تونستم با راهنمایی شما مشکل رو حل کنم البته کدها رو به این شکل تغییر دادم (به عنوان مثال برای عمل جمع) BigInt result; result = previousVal + currentVal; ui->resultdisplay->setText(result.to_string().c_str()); و دستور زیر رو حذف کردم: //ui->resultdisplay->setText(ui->resultdisplay->text()+QString::number(currentVal)+"="+QString::number(previousVal + currentVal)); سپاس از شما ویرایش شده در بهمن 1 توسط کامبیز اسدزاده عدم بلاکگذاری کد. 1 نقل قول به اشتراک گذاری این ارسال لینک به ارسال به اشتراک گذاری در سایت های دیگر