ďťż

Ładny brzuch

Witam!
Otóż mam taki mały problem...
chciałbym napisac program który wyswietla mi wartosci danej funkcji z ustalonego przez uzytkowanika przedziału x1,x2.
Problem niby banalny a jednak nie moge wpasc na rozwiazanie:|
procedure funkcja1; begin f1:=1/1+x*x;  for i:=x1 to x2 do  begin ???



function funkcja1(X1, X2 : Integer): Integer; begin  funkcja1 := X1 + X2; end;

jancu
---------------
jancu@poczta.fm

a mógłbym prosić o jakies mniejsze wytłumaczenie:)
Czytałem o opcji "function" ale nie moge załapac jak to sie ma do mojego przypadku?

cytat:Crisu napisał:

chciałbym napisac program który wyswietla mi wartosci danej funkcji z ustalonego przez uzytkowanika przedziału x1,x2.

To zależy jak i gdzie chcesz to wypisać.
Przy założeniu, że chcesz wypisać na ekranie wartości danej funkcji z przedziału x1 do x2 z krokiem krok, możesz użyć np. coś takiego:

procedure wypisz_funkcje(x1, x2, krok : real); begin  while x1<=x2 do    begin      writeln('x=',x1:2:4,'   f(x)=',1/(1+x1*x1):1:4);      x1 := x1 + krok;    end; end;
Co do funkcji to możesz jej użyć w tym przypadku do zwracania wartości danej funkcji dla wybranego x. Np.
function wartosc_funkcji(x : real) : real; begin  wartosc_funkcji := 1/(1+x*x); end; procedure wypisz_funkcje(x1, x2, krok : real); begin  while x1<=x2 do    begin      writeln('x=',x1:2:4,'   f(x)=', wartosc_funkcji(x1):1:4);      x1 := x1 + krok;    end; end;
To jak to zrealizujesz zależy już od Twoich upodobań i od tego jaki program piszesz.

PS.
W kodzie ująłem 1+x*x w nawias bo chyba się machnąłeś przy zapisie.
1/1+x*x - to jest to samo co x*x a chyba nie o to Ci chodzi...

ICQ : 245-363-570 | TLEN : oxisoft | GG : 486-2-486



Oxi widze ze przewidujesz:)
Napisz program do tablicowania funkcji f(x) w przedziale <x1, x2> z jednostajnym krokiem dla m punktów tablicowania.
http://skocz.pl/lsu

Wiec motyw z funkcją zrozumiem:)
Gorzej z procedurą...
procedure wypisz_funkcje(x1, x2, krok : real); begin  while x1<=x2 do    begin      writeln('x=',x1:2:4,'   f(x)=', wartosc_funkcji(x1):1:4);      x1 := x1 + krok;    end; end;
Na poczatek moze jeszcze spytam o ten krok?? Co to właściwie jest?

Drugie pytanie dotyczny while x1<=x2 do
Rozumiem, że jednak po wykonaniu tego warunku program wypisuje x1
i wartosc funkcji dla x1(tzn tej function zadelkatowanej:)
Dalej nie bardzo wiem wiem o co chodzi z tym krokiem..
No i co sie dzieje z x2??

Przepraszam, że tak męcze ale nie moge kurcze załapać tych procedur i funkcji

cytat:Crisu napisał:
Wiec motyw z funkcją zrozumiem:)
Gorzej z procedurą...
procedure wypisz_funkcje(x1, x2, krok : real); begin  while x1<=x2 do    begin      writeln('x=',x1:2:4,'   f(x)=', wartosc_funkcji(x1):1:4);      x1 := x1 + krok;    end; end;
Na poczatek moze jeszcze spytam o ten krok?? Co to właściwie jest?

Krok oznacza tu co ile będziesz zwiększał x przy kolejnych odczytach.
Np. Jeśli masz dany przedział <4, 19> i będziesz miał stablicować wartości funkcji w tym przedziale, ze stałym krokiem w 6 punktach to zrobisz to dla x=4, x=7, x=10, x=13, x=16 i x=19.
W tym przypadku zastosowany krok wynosi 3 (o tyle za każdym razem zwiększasz x).
Mając przedział <a, b> i warunek, żeby dokonać odczytów w m punktachm krok możesz obliczyć z prostego wzoru (to nie jest jakiś podręcznikowy wzór - napisałem go na poczekaniu, żeby Ci to wytłumaczyć)

krok = (b-a)/(m-1)

W podanym przezemnie przykładzie będzie to:

krok = (19-4)/(6-1) = 15/5 = 3

cytat:
Drugie pytanie dotyczny while x1<=x2 do
Rozumiem, że jednak po wykonaniu tego warunku program wypisuje x1
i wartosc funkcji dla x1(tzn tej function zadelkatowanej:)
Dalej nie bardzo wiem wiem o co chodzi z tym krokiem..
No i co sie dzieje z x2??

Na początku obliczana jest wartość danej funkcji w punkcie x1. Potem oblicza się wartość danej funkcji w punkcie x1+krok (żeby "zaoszczędzić na zmiennych - zapisuje to od razu do zmiennej x1 bo jej stara wartość do niczego nie jest już nam potrzebna).
No i x dla którego obliczamy kolejne wartości danej funkcji zwiększany jest za każdym razem o wartość zapisaną w zmiennej krok dopóki nie przekroczy się wartości zapisanej w zmiennej x2.
Jak to się statnie to kończy się wypisywanie wartości bo wypisane zostały już wartości z całego przedziału <x1, x2>.
Nie wiem czy dostatecznie jasno Ci to wytłumaczyłem. Jeśli dalej nie bardzo "łapiesz" o co mi chodzi to może rozpisz to sobie na kartce i wykonaj po kolei te kroki.
Jakbyś dalej miał wątpliwości to pytaj.

ICQ : 245-363-570 | TLEN : oxisoft | GG : 486-2-486

Kurna cos "ciezko" mi sie myśli....(to pewnie dlatego, ze sesja tuż tuż:)

uses WinCrt; var x,x1,x2,krok,m:real;   function wartosc_funkcji(x:real):real;   begin    wartosc_funkcji:=1/(x*x+1);   end;   procedure wypisz_funkcje(x1, x2, krok:real);   begin        while x1<=x2 do         begin         writeln('x=',x:1:2,'   f(x)=',wartosc_funkcji(x1):1:4);         x1:=x1 + krok;         end;   end; begin writeln('Podaj wartosc x1:'); readln(x1); write('Podaj wartosc x2:'); read(x2); write('Podaj wartosc punktow "m" tablicowania '); read(krok); wypisz_funkcje(x1,x2,krok); readln; end.

Dobra, motyw z procedurą zapałem( ja bym to napisał na repeat ale mniejsza o to:)
Po skompresowaniu wywala mi błąd...tzn wartosci sa dla x=0 cały czas...
Domyslam się, że bład lezy po mojej stronie. Tylko gdzie..
Linijkawypisz_funkcje(x1,x2,krok); Jest raczej dobrze?

cytat:Crisu napisał:
Po skompresowaniu wywala mi błąd...tzn wartosci sa dla x=0 cały czas...
Domyslam się, że bład lezy po mojej stronie. Tylko gdzie..
Linijkawypisz_funkcje(x1,x2,krok); Jest raczej dobrze?

Tak - ta linijka jest OK.
Nie uruchamiałem tego ale możliwe, że problem jest z krokiem.
Zwróć uwagę na to, że liczba punktów do tablicowania to jest co innego niż krok.
Pierwsze oznacza w ilu punktach ma być odczyt wartości funkcji, natomiast drugie oznacza o ile są odległe kolejne x dla których następuje odczyt.
Jeśli w temacie miałeś, że podawana jest liczba punktów do tablicowania to lepiej jest wczytać m i obliczyć krok z wzoru, który Ci wcześniej podałem:

krok := (x2-x1)/(m-1);

Co do problemu, że cały czas liczy Ci dla x=0 to nie do końca tak jest.
Przy wypisywaniu wyników podałeś x zamiast x1 - ale obliczenia prowadzisz tak jak trzeba dla x1.
Tzn, zamiast:

writeln('x=',x:1:2,' f(x)=',wartosc_funkcji(x1):1:4);

powinno być:

writeln('x=',x1:1:2,' f(x)=',wartosc_funkcji(x1):1:4);

ICQ : 245-363-570 | TLEN : oxisoft | GG : 486-2-486

uses WinCrt; var m,krok:real; x1,x2,i:integer;   function wartosc_funkcji1(x:real):real;   begin    wartosc_funkcji1:=1/(x*x+1);   end;   procedure wypisz_funkcje1(x1, x2, krok:real);   begin        clrscr;        krok := (x2-x1)/(m-1);        i:=1;        gotoxy (15,i); writeln('x');        gotoxy (30,i); writeln('F(x)');        while x1<=x2 do         begin         gotoxy (15,i+1);writeln('x=',x1:1:2);         gotoxy(30,i+1);writeln ('f(x)=',wartosc_funkcji1(x1):1:4);         end;   end;   function wartosc_funkcji2(x:real):real;   begin    wartosc_funkcji2:=1/(x*x+1)+x;   end;   procedure wypisz_funkcje2(x1, x2, krok:real);   begin        clrscr;        krok := (x2-x1)/(m-1);        i:=1;        gotoxy (15,i); writeln('x');        gotoxy (30,i); writeln('F(x)');        while x1<=x2 do         begin         gotoxy (15,i+1);writeln('x=',x1:1:2);         gotoxy(30,i+1);writeln ('f(x)=',wartosc_funkcji2(x1):1:4);         x1:=x1 + krok;         end;   end; begin writeln('Podaj wartosc x1:'); readln(x1); write('Podaj wartosc x2:'); read(x2); write('Podaj wartosc punktow "m" tablicowania '); read(m);           if (x1<=0) and (x2<=0) then            begin             wypisz_funkcje1(x1,x2,krok);            end           else             wypisz_funkcje2(x1,x2,krok); readln; end.

Wiec napisałem tak jak tłumaczyłeś...(przynajmniej tak mi sie wydaje)
Na poczatku kazdej procedury obliczany jest krok..
No i nie wiem czemu, wyswietla mi te same liczby zarowno dla wartosci jak i argumentów.

I jeszcze takie pytanko z innej beczki:)

"Wydruk kolejnej strony powinien nastąpić po naciśnięciu klawisza Enter."

To ustalane jest jakaś komendą?

cytat:Crisu napisał:

Wiec napisałem tak jak tłumaczyłeś...(przynajmniej tak mi sie wydaje)
Na poczatku kazdej procedury obliczany jest krok..
No i nie wiem czemu, wyswietla mi te same liczby zarowno dla wartosci jak i argumentów.
W funkcji wypisz_funkcje1 zapomniałeś dodać zwiększanie zmiennej x1 więc zmienna ta cały czas ma tą samą wartość.
Dodaj

x1:=x1 + krok;

cytat:I jeszcze takie pytanko z innej beczki:)

"Wydruk kolejnej strony powinien nastąpić po naciśnięciu klawisza Enter."

To ustalane jest jakaś komendą?

Możesz to zrobić sobie samemu - np. wypisujesz na ekranie 20 wyników i wyświetlasz komunikat żeby nacisnąć Enter. Potem czyścisz ekran i znów wyświetlasz następne 20 wyników.

ICQ : 245-363-570 | TLEN : oxisoft | GG : 486-2-486

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •