Úloha v C ++

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Gábi
nováček
Příspěvky: 3
Registrován: duben 13
Pohlaví: Žena
Stav:
Offline

Úloha v C ++

Příspěvekod Gábi » 29 dub 2013 12:06

Ahoj, prosím Vás o pomoc. Potřebuji naprogramovat v céčku tohle:

Napište program, který určí kořen funkce pomocí metody binárního půlení. Program ověřte na libovolné funkci. Jako vstup programu zadejte: interval , ve kterém leží kořen, dále hodnoty N a e.
Výpočet ukončete, překročí-li počet iterací nebo je funkční hodnota v nalezeném kořeni v absolutní hodnotě menší než e.


Nějak si s tím nevím rady a spěchá to. :pls-help:

Předem děkuju za Vás čas a ochotu..
Budu Vám moc vděčná
Naposledy upravil(a) Ltb dne 29 dub 2013 21:09, celkem upraveno 1 x.
Důvod: Úprava nadpisu

Reklama
Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: C ++

Příspěvekod faraon » 29 dub 2013 19:09

S čím si nevíš rady? Neumíš to spočítat? Neumíš to naprogramovat? Mrkni sem: http://www.fd.cvut.cz/personal/xfabera/ ... predn1.pdf
Ukaž co už máš hotové a někdo ti s tím určitě pomůže pohnout, ale nečekej že tu za tebe uděláme celý úkol.
Má to být v C nebo v C++? To je trochu rozdíl.

A vítej na fóru :smile:
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

Gábi
nováček
Příspěvky: 3
Registrován: duben 13
Pohlaví: Žena
Stav:
Offline

Re: C ++

Příspěvekod Gábi » 29 dub 2013 21:00

Tak já mám hotové toto, ale nejsem si jistá úplnou správostí :)
Tak bych byla ráda, kdyby to někdo alespoň projel, vyznačil chyby a popř. předělal...


#include <stdio.h>
#include <math.h>

double bisect(double, double, double, double(double), int *); /* Implementuje bisekci pro nalezení kořenu funkce */
double g(double); /* testovací funkce 'g' */
double h(double); /* testovací funkce 'h' */
double koren(double, double, double, double, double, double, double, double(double), int); /* Najde kořen, nebo nový interval funkce */

int main(void)
{
/* deklarování proměnných */
double x_vlevo, /* Levý koncový bod intervalu */
x_vpravo, /* Pravý koncový bod intervalu */
epsilon, /* Tolerantní chyba */
koren; /* kořenová funkce */
int chyba; /* Chybová hodnota použita v případě nenalezení kořenu */

/* Zadání intervalu a tolerantní chyby z klávesnice */
printf("\nZadejte interval: ");
scanf("%lf%lf", &x_vlevo, &x_vpravo);
printf("\nZadejte toleranci: ");
scanf("%lf", &epsilon);

/* Použití bisect funkce pro nalezení kořenů g a h */
printf("\n\nFunkce g");
koren = bisect(x_vlevo, x_vpravo, epsilon, g, &chyba);
if (!chyba)
printf("\n g(%.7f) = %e\n", koren, g(koren));

printf("\n\nFunkce h");
koren = bisect(x_vlevo, x_vpravo, epsilon, h, &chyba);
if (!chyba)
printf("\n h(%.7f) = %e\n", koren, h(koren));
return 0;
}

double bisect(double x_vlevo, double x_vpravo, double epsilon, double f(double farg), int *chyb)
{
double x_stred, /* stred intervalu */
f_stred, /* f(x_stred) */
f_vlevo, /* f(x_vlevo) */
f_vpravo; /* f(x_vpravo) */
int koren_nalezen = 0; /* hodnota nalezených nebo nenalezených kořenů */

/* výpočet funkčních hodnot v počátečních a koncových bodech intervalu */
f_vlevo = f(x_vlevo);
f_vpravo = f(x_vpravo);

/* pokud není změna v operátorche daného intervalu, není tam koren. Hledá se nový kořen, pokud existuje. */
if (f_vlevo * f_vpravo > 0) /* Stejné operátory ++,-- */
{
*chyb = 1;
printf("\nKoren nenalezen [%.7f, %.7f]", x_vlevo, x_vpravo);
}
else
{
*chyb = 0;
/* Vyvolání rekurzivní funkci */
x_stred = koren(x_vpravo, x_vlevo, f_vpravo, f_vlevo, x_stred, f_stred, epsilon, f, koren_nalezen);
}

/* Pokud je kořen nalezen, je střed [x_vlevo, x_vpravo] */
return x_stred;
}

double g(double x)
{
/* testování funkce 5x - 2x + 3 */
return (5 * pow(x, 3.0) - 2 * pow(x, 2.0) + 3);
}

double h(double x)
{
/* testování funkce x - 3x - 8 */
return (pow(x, 4.0) - 3 * pow(x, 2.0) - 8);
}

double koren(double x_vpravo, double x_vlevo, double f_vpravo, double f_vlevo, double x_stred, double f_stred, double epsilon, double f(double farg), int koren_nalezen)
{
/* Hledá tak dlouho, dokud není interval dostatečně velký a žádný kořen nalezen */
if ((fabs(x_vpravo - x_vlevo) > epsilon) && !koren_nalezen)
{
/* Vypočítá střední hodnotu */
x_stred= (x_vlevo + x_vpravo) / 2.0;
f_stred = f(x_stred);

if (f_stred == 0.0) /* Zde je kořen */
koren_nalezen= 1;
else if (f_vlevo * f_vpravo < 0.0) /* kořen je [x_vlevo, x_stred] */
x_vpravo = x_stred;
else /* Kořen je [x_stred, x_vpravo] */
{
x_vlevo = x_stred;
f_vlevo = f_stred;
}

/* Vypíše kořen a interval, nebo nový interval*/
if (koren_nalezen)
{
printf("\nKoren nalezen v x = %.7f, stredni hodnota [%.7f, %.7f]", x_stred, x_vlevo, x_vpravo);
return x_stred;
}
else
{
printf("\nNovy interval je [%.7f, %.7f]", x_vlevo, x_vpravo);
x_stred = (x_vlevo + x_vpravo) / 2.0;
/* Rekurzivní funkce */
x_stred = koren(x_vpravo, x_vlevo, f_vpravo, f_vlevo, x_stred, f_stred, epsilon, f, koren_nalezen);
}
}
return x_stred;

}

Gábi
nováček
Příspěvky: 3
Registrován: duben 13
Pohlaví: Žena
Stav:
Offline

Re: Úloha v C ++

Příspěvekod Gábi » 03 kvě 2013 10:02

Nikdo nic?
Prosím, opravdu bych to potřebovala

Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Úloha v C ++

Příspěvekod CZechBoY » 03 kvě 2013 10:50

koukali jsme na to s faraonem a žádná chyba tam není (syntaktická)
takže v čem je problém?
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW


Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 4 hosti