Prikaži potpunu verziju : Pomoc oko programa!!!
Treba mi pomoc oko zadatka iz paskala radi:confused:
Napisati program za nalazenje nule funkcije f(x)=2+x+arctgx metodom polovljenja sa zadatom tacnoscu i zadatim pocetnim intervalom. Resenje staviti u rastuci poredak sa jos 2 zadata broja koristeci procedure.
Ako moze neko da pokusa da uradi, ne znam cak ni o cemu se radi...Hvala unapred!
Evo link (http://sr.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D0%BF%D0%BE% D0%BB%D0%BE%D0%B2%D1%99%D0%B5%D1%9A%D0%B0_%D0%B8%D 0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%D0%B0) sa wiki.
Fora je da uzmes interval sa krajnjim lijevim i desnim vrijednostima (obavezno suprotnog znaka), za koje si siguran da funkcija nije nula i zatim uzimas vrijednost koja se nalazi tacno na sredini tog intervala i pitas koliki je rezultat funkcije sa tom vrijednoscu. Ako je veci od 0, onda uzimas novi interval [krajnja lijeva vrijednost, trenutna vrijednost] ili ako je manji od nule [trenutna vrijednost, krajnja desna vrijednost] i ponavljas sve dok ne dobijes 0. Imas cak i ilustrovano.
Sad posto funkcija ima arctg mislim da ces da imas samo jednu nulu.
Kako da nadjes pocetne dvije vrijednosti?
Mozes da opalis for petlju sa vrijednostima od -1000 do +1000 i pamtis i onda ces da imas masu vrijednosti, i onda da izaberes neku negativnu i neku pozitivnu vrijednost. Nije bitno kolika je razlika, posto polovis interval. Ovaj algoritam ti se ponasa isto kao binarno trazenje tako da ti je slozenost logN za osnovu 2, a mozes odmah da provjeris da nisi naletio na nulu xD
Pozdrav.
:)
Hvala sto zelis da pomognes :) Nedam se da neko moze da mi uradi ovo, ipak je u pitanju skolski zadatak. Nije meni zadat, nikada ovo nisam ucio. Pitali su me dal znam nekog ko zna ovo pa sam se setio ovog foruma
Sad ne znam kolko je to skolski zadatak ? Mene je ovo vise za fakultet xD
Al' ne znam Pascal, znam C/C++.
Ovako bi to izgledao u C/C++:
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
double func(double x) {
return 2 + x + atan(x);
//return x + 2;
}
int main()
{
double left = func(-10);
double right = func(10);
double mid = (left+right)/2;
while( abs( func(mid) ) > 0.0001 ) {
if( func(mid) < 0 ) left = mid;
else if ( func(mid)> 0 ) right = mid;
mid = (left+right) / 2;
}
cout << mid;
return 0;
}
Nadam se da ce jos neko da se javi pa da pogleda i ovaj moj kod posto nisam bas siguran da li je to to xD
(posto se radi u realnim brojevima, ne mozemo nikad da potrefimo tacan broj 0, tako da ja idem na preciznost do 0.0001 :D)
I meni ovo mnogo vise lici na fakultetski zadatak i zato mislim da preciznost treba da bude mnogo veca od 5 ili 6 decimala.
Na takmicenjima se obicno koristi preciznost na 4 decimale, ali naravno to nije problem, samo se doda jos jedna nula ispred 1 :))
Ako neko ima da pogleda je li kod dobar :D
Ja nisam siguran da je to to, a radio sam ovo prije pola godine xD
vBulletin® v3.8.7, Copyright ©2000-2024, vBulletin Solutions, Inc.