Zajęcia 3 1. Instrukcja iteracyjna while while WARUNEK do Instrukcja; 2. Deklaracja funkcji function nazwa(x:real;i:integer;...): typ_funkcji; deklaracje zmiennych lokalnych; instrukcje (w tym podstawienie pod nazwe funkcji wartości); 3. Podstawowe funkcje mamematyczne. http://www.freepascal.org/docs-html/rtl/system/mathematicalfunctions.html ZAPOZNAĆ SIĘ!!! 4. Pewne procedury konwersji http://www.freepascal.org/docs-html/rtl/sysutils/conversionroutines.html wiedzieć, że takie coś jest, przeczytać Przykład 1. Program wyznaczający liczbe maksymalną ze wszystkich wczytanych liczb całkowitych; zapamiętuje wczytane liczby i ew. je drukuje. Podaje też ilość wczytanych liczb program maksimum; {wyznacza maksymalna liczbe integer, wczytane liczby pamieta w tablicy tab do ew. dalszego wykorzystania liczy tez ilosc wczytanych liczb} var max,a,i,ile_liczb:integer; odp:char; tab: array[1..1111] of integer; max:=0; {i to numer kolejnej liczby, ile_liczb -ich ilosc} i:=0; ile_liczb:=0; writeln(' jesli zakonczyć wcisnij n, kontynuowac - t '); readln(odp); while (odp<>'n') do write('podaj wartosc liczby :'); readln(a); i:=i+1; tab[i]:=a; ile_liczb:=i; if max<a then max:=a; writeln(' jesli zakonczyć wcisnij n, kontynuowac - t '); readln(odp); if(ile_liczb<>0) then Writeln('wczytales ',ile_liczb,' liczb, maxymalna liczba to ',max); {teraz ewentyalnie wydrukuje wczytane liczby} writeln(' nacisnij ENTER'); readln; writeln(' czy wypisac wczytane liczby t/n'); readln(odp); if odp='t' then for i:=1 to ile_liczb do writeln(' liczba ',i, ' jest rowna = ',tab[i]);
end else writeln(' nie wczytales zadnej liczby'); Przykład 2. Program wyznacza resztę z dzielenie dwu liczb rzeczywistych. Resztę z dzielenia dwu liczb całkowitych oblicza się stosując operator mod: i mod j Program reszta; var a,b:real; function modd(x,y:real):real; var il:real; il:=int(x/y); modd:=x-(il*y); write('podaj wartosc licznika a :');readln(a); write('podaj wartosc mianownika b :');readln(b); if(b<>0) then writeln('czesc calkowita to ',int(a/b):0:0, ' reszta z dzielenia a/b wynosi : ',modd(a,b):0:5) else writeln(' nie dziel przez 0 '); Przykład 3. Program rysuje trójkąt prostokątny o danej podstawie (jednostka: znak < 80) program trojkacik; var a,b,i:byte; write('podaj Podstawe trojkata (< od dlugosci wiersza :');readln(a); b:=0; writeln('*'); b:=b+1; if a>2 then write('*'); for i:=2 to b do write(' '); writeln('*'); until (a=b+2)or(a=2); for i:=1 to a do write('*'); readln; Przykład 3. Obliczanie silni. Wersja bez (silnia1) oraz z (silnia2) rekurencją program silnia1; var i,x: Integer; w : extended; Writeln('Program oblicza silnie podanej liczby'); Write('Podaj liczbe x: ');Read(x); if (x < 0 ) then if (x=0) then Writeln('Silnia liczby ',x, ' wynosi 1') else writeln(' liczba ujemna, nie ma '); end
else W:=1; for i:=1 to x do W:=W*i; Writeln('Silnia liczby ',x, ' wynosi ', W); Program silnia2; uses Crt; var M : integer; Function Silnia(N : integer):extended; Var I : integer; wartosc : extended; Begin Wartosc:=1; For I:=1 to N do Begin Wartosc:=Wartosc*I; End; Silnia:=Wartosc; Begin {blok instrukcji} Write('Podaj liczbe: ');readln(m); if (M < 0 ) then if (M=0) then Writeln('Silnia liczby ',M, ' wynosi 1') else writeln(' liczba ujemna, nie ma '); end else Writeln('Silnia liczby ',M,' = ',Silnia(M)); End. Przykład 4. Obliczenie iloczynu 2 macierzy 2x2. Wyrazy macierzy - przypadkowe liczby <=100. program iloczyn_macierzy; var i,ii:longint; macierz1:array[1..2,1..2]of longint; macierz2:array[1..2,1..2]of longint; randomize; for i:=1 to 2 do for ii:=1 to 2 do Begin macierz1[i,ii]:=random(100); macierz2[i,ii]:=random(100); writeln('macierz 1'); for i:=1 to 2 do for ii:=1 to 2 do Begin writeln(' ',macierz1[i,ii]);
writeln('macierz 2'); for i:=1 to 2 do for ii:=1 to 2 do Begin writeln(' ',macierz2[i,ii]); writeln('iloczyn Macierzy 1 i Macierzy 2'); writeln((macierz1[1,1]*macierz2[1,1])+(macierz1[2,1]*macierz2[1,2])); writeln((macierz1[1,1]*macierz2[2,1])+(macierz1[2,1]*macierz2[2,2])); writeln((macierz1[1,2]*macierz2[1,1])+(macierz1[2,2]*macierz2[1,2])); writeln((macierz1[1,2]*macierz2[2,1])+(macierz1[2,2]*macierz2[2,2])); Przykład 5. Program zgaduje ile masz lat z odpowiedzi T/N program ile_lat; var a1,a2,pyt:byte; ch:char; Writeln('PROGRAM ODGADNIE ILE MASZ LAT, mniej niz 100'); a1:=1; a2:=100; { maximum} pyt:=round(int((a1+a2)/2)); Writeln('Masz mniej niz ',pyt,' lat? [T/N]'); ch:=upcase(readkey); until (ch='n')or(ch='t'); if ch='n' then a1:=pyt; if ch='t' then a2:=pyt; if(a1-a2=1)or(a2-a1=1)then a2:=a1; until a1=a2; Writeln('Masz ',a1,' lat'); readln; Przykład 6. Program rysuje na ekranie prymitywną szachownicę. {lub uses wincrt;} var i,j:byte; procedure b; for j:=1 to 4 do write(#987+#987+#987+' '); procedure c; for j:=1 to 4 do write(' '+#987+#987+#987);
Writeln('Szachownica!'); writeln(' A B C D E F G H'); for i:=8 downto 1 do if i mod 2 = 0 then write(' ',i,' ');b;end else write(' ',i,' ');c; Przykład 7. Odpytywanie z tabliczki mnożenia. program tabliczka_mnozenia; var odp,l1,l2,pytan,bledow,zasieg:integer; ch:char; Writeln(' Program Mnozenie'); write('podaj zasieg z jakiego losowac liczby [1..100] : ');readln(zasieg); until (1<zasieg)and(zasieg<101); pytan:=0; bledow:=0; randomize; pytan:=pytan+1; l1:=random(zasieg)+1; l2:=random(zasieg)+1; Writeln('Pytanie Numer : ',pytan); Write('Ile Jest ',l1,' x ',l2,' = ');readln(odp); if odp<>l1*l2 then Writeln('Zle!');bledow:=bledow+1;end else writeln('dobrze'); Writeln('------------ STATYSTYKA -------------'); Writeln(' Pytan - ',pytan); Writeln(' Dobrych - ',pytan-bledow); Writeln(' Blednch - ',bledow); Writeln(' Procent Dobrych : ',100*(pytan-bledow)/pytan:0:1,' %'); Writeln('Kontynuowac? : [T/N]'); ch:=readkey; {funkcja upcase zamienia duze na małe litery} until upcase(ch)='n'; writeln('koniec'); UWAGA. Użyto funkcji upcase(ch). Inne funkcje operacji na łascuchach/znakach: http://www.freepascal.org/docs-html/rtl/system/stringfunctions.html ZAPOZNAĆ SIĘ Z NIMI!!
Przykład 8. Podajemy współczynniki funkcji liniowej. Obliczamy przecięcia z osiami X i Y oraz pisze, czy jest rosnąca, czy malejąca. program funkcja_liniowa; var a,b:integer; ch:char; Writeln('Program Oblicza Stan Funkcji Liniowej y = ax + b'); Writeln('Sprawdza czy jest rosnaca, malejaca czy stala.'); Write ('Podaj wartosc wpolczynnika a :');readln(a); Write ('Podaj wartosc wpolczynnika b :');readln(b); if a=0 then Writeln('Funkcja jest Stala'); if a<0 then Writeln('Funkcja jest Malejaca'); if a>0 then Writeln('Funkcja jest Rosnaca'); Writeln('Punkt przeciecia z osia y = x = 0 y = ',b); if a<>0 then Writeln('Punkt przeciecia z osia x = x = ',((0-b)/a):0:1,' Writeln('Punkt przeciecia z osia x = BRAK'); y = 0') else if a>0 then Writeln('Wartosci przyjmuje wartosc ujenma dla przedzialu (-nieskoncz, ',((0-b)/a):0:1,' )'); Writeln('Wartosci przyjmuje wartosc dodatmia dla przedzialu ( ',((0-b)/a):0:1,',nieskoncz )'); if a<0 then Writeln('Funkcja przyjmuje wartosc dodatnia dla przedzialu (-nieskoncz, ',((0-b)/a):0:1,' )'); Writeln('Funkcja przyjmuje wartosc ujemna dla przedzialu ( ',((0-b)/a):0:1,',nieskoncz )'); if a=0 then if b>0 then writeln('wartosc funkcji jest dodatnia dla ( -nieskoncz, nieskoncz )'); if b=0 then writeln('wartosc funkcji jest rowna zero'); if b<0 then writeln('wartosc funkcji jest ujemna dla ( -nieskoncz, nieskoncz )'); {} write('jeszcze Raz? [T/N] :'); ch:=readkey; {upcase zamienia mala na duza literę} until upcase(ch)='n'; writeln('koniec');