Qt cvičení - rozvoj funkce sinus
Napište interaktivní GUI aplikaci, která pro zadaný argument počítá jednotlivé kroky rozvoje funkce sinus pro zadaný argument v bodě nula.
Třída MainWindow definuje privátní atributy x, y, n, c, s viz jejich popis v komentářích.
class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = 0); ~MainWindow(); private: Ui::MainWindow *ui; double x; // argument double y; // spravna hodnota int n; // index double c; // clen double s; // castecny soucet private slots: void on_pushButton_clicked(); void on_lineEdit_x_textChanged(QString ); };
Konstruktor explicitně maže obsah widgetů Label, které jsou používány pro výstup údajů.
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); ui->label_sin ->clear(); ui->label_n ->clear(); ui->label_clen ->clear(); ui->label_soucet->clear(); ui->label_chyba ->clear(); }
Při změně widgetu LineEdit (zadání argumentu x) jsou nastaveny hodnoty interních atributů (slot reagující na signál text changed).
void MainWindow::on_lineEdit_x_textChanged(QString ) { x = ui->lineEdit_x->text().toDouble(); y = std::sin(x); ui->label_sin->setText("sin(x) = " + QString::number(y)); n = 1; // index c = x; // prvni clen s = x; // castecny soucet ui->label_n ->setText(QString::number(n)); ui->label_clen ->setText(QString::number(c)); ui->label_soucet->setText(QString::number(s)); ui->label_chyba ->setText(QString::number(s-y)); }
Výpočet dalšího členu rozvoje (a zobrazení průběžného stavu) se provádí ve slotu vždy po stisknutí tlačítka Další. Hodnota členu rozvoje se přitom počítá z předchozího členu rozvoje (tj. nikdy například nepočítáme explicitně faktoriály nebo mocniny).
void MainWindow::on_pushButton_clicked() { c /= (n+1)*(n+2); n += 2; c *= -x*x; s += c; ui->label_n ->setText(QString::number(n)); ui->label_clen ->setText(QString::number(c)); ui->label_soucet->setText(QString::number(s)); ui->label_chyba ->setText(QString::number(s-y)); }
Příklady funkcí pro výpočet funkční hodnoty rozvojem viz příklady 6, 7, 8 a 9.