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

Z GeoWikiCZ
m (typo)
mBez shrnutí editace
 
Řá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.