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…)
 
mBez shrnutí editace
 
(Není zobrazena jedna mezilehlá verze od stejného uživatele.)
Řá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>
Řádek 65: Řádek 65:
</pre>
</pre>


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


<pre>
<pre>

Aktuální verze z 27. 9. 2009, 14:38

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.