Ĺ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
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