Qt cvičení - rozvoj funkce sinus: Porovnání verzí

Z GeoWikiCZ
m (Založena nová stránka: {{QT}} Napište interaktivní GUI aplikaci, která pro zadaný argument počítá jednotlivé kroky rozvoje funkce sinus pro zadaný argument v bodě nula. [[Soubor:Qt-roz…)
 
m (typo)
Řádek 4: Řádek 4:
[[Soubor:Qt-rozvoj fce sinus.png|center]]
[[Soubor:Qt-rozvoj fce sinus.png|center]]


Třída <tt>MainWindow</tt> definuje privátní atributy <tt>x, y, n, c, s</tt>, viz jejich popis v komentářích.
Třída <tt>MainWindow</tt> definuje privátní atributy <tt>x, y, n, c, s</tt> viz jejich popis v komentářích.


<pre>
<pre>
Řádek 45: Řádek 45:
</pre>
</pre>


Při změně widgetu LineEdit (zadání argumentu x) jsou nastaveny hodnoty interních atributů (slot reagující na signál ''text chaned'').
Při změně widgetu LineEdit (zadání argumentu x) jsou nastaveny hodnoty interních atributů (slot reagující na signál ''text changed'').


<pre>
<pre>

Verze z 27. 9. 2009, 14:35

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ší.

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.