PDA

Prikaži potpunu verziju : Pomoc oko programa!!!


Number3
7.6.2012, 0:17
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!

clzola
7.6.2012, 0:42
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.
:)

Number3
7.6.2012, 1:08
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

clzola
7.6.2012, 16:13
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)

Todors
7.6.2012, 17:38
I meni ovo mnogo vise lici na fakultetski zadatak i zato mislim da preciznost treba da bude mnogo veca od 5 ili 6 decimala.

clzola
7.6.2012, 23:58
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