Ćwiczenia z Zastosowania informatyki w chemii-3

Transkrypt

Ćwiczenia z Zastosowania informatyki w chemii-3
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;
begin
instrukcje (w tym podstawienie pod nazwe funkcji wartości);
end;
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}
uses crt;
var max,a,i,ile_liczb:integer;
odp:char;
tab: array[1..1111] of integer;
begin
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 begin
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);
end;
clrscr;
if(ile_liczb<>0) then
begin
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
begin
for i:=1 to ile_liczb do
writeln(' liczba ',i, ' jest rowna = ',tab[i]);
end;
end
else writeln(' nie wczytales zadnej liczby');
end.
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;
uses crt;
var a,b:real;
function modd(x,y:real):real;
var il:real;
begin
il:=int(x/y);
modd:=x-(il*y);
end;
begin
clrscr;
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 ');
end.
Przykład 3. Program „rysuje” trójkąt prostokątny o danej podstawie (jednostka: znak < 80)
program trojkacik;
uses crt;
var a,b,i:byte;
begin
write('Podaj Podstawe trojkata (< od „dlugosci” wiersza :');readln(a);
clrscr;
b:=0;
writeln('*');
repeat
b:=b+1;
if a>2 then begin
write('*');
for i:=2 to b do write(' ');
writeln('*');
end;
until (a=b+2)or(a=2);
for i:=1 to a do write('*');
readln;
end.
Przykład 3. Obliczanie silni. Wersja bez (silnia1) oraz z (silnia2) rekurencją
program silnia1;
uses crt;
var
i,x: Integer;
w : extended;
begin
Writeln('Program oblicza silnie podanej liczby');
Write('Podaj liczbe x: ');Read(x);
if (x < 0 ) then begin
if (x=0) then Writeln('Silnia liczby ',x, ' wynosi 1')
else
writeln(' liczba ujemna, nie ma ');
end
else
begin
W:=1;
for i:=1 to x do W:=W*i;
Writeln('Silnia liczby ',x, ' wynosi ', W);
end;
end.
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;
end;
Begin {blok instrukcji}
Write('Podaj liczbe: ');readln(M);
clrscr;
if (M < 0 ) then
begin
if (M=0) then Writeln('Silnia liczby ',M, ' wynosi 1')
else
writeln(' liczba ujemna, nie ma ');
end
else begin
Writeln('Silnia liczby ',M,' = ',Silnia(M));
end;
End.
Przykład 4. Obliczenie iloczynu 2 macierzy 2x2. Wyrazy macierzy przypadkowe liczby <=100.
program iloczyn_macierzy;
uses crt;
var i,ii:longint;
macierz1:array[1..2,1..2]of longint;
macierz2:array[1..2,1..2]of longint;
begin
randomize;
for i:=1 to 2 do
for ii:=1 to 2 do Begin
macierz1[i,ii]:=random(100);
macierz2[i,ii]:=random(100);
end;
writeln('Macierz 1');
writeln;
for i:=1 to 2 do begin
for ii:=1 to 2 do Begin
writeln(' ',macierz1[i,ii]);
end;
writeln;
end;
writeln('Macierz 2');
writeln;
for i:=1 to 2 do begin
for ii:=1 to 2 do Begin
writeln(' ',macierz2[i,ii]);
end;
writeln;
end;
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]));
end.
Przykład 5. Program zgaduje ile masz lat z odpowiedzi T/N
program ile_lat;
uses crt;
var a1,a2,pyt:byte;
ch:char;
begin
Writeln('PROGRAM ODGADNIE ILE MASZ LAT, mniej niz 100');
a1:=1;
a2:=100; { maximum}
repeat
pyt:=round(int((a1+a2)/2));
repeat
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;
Writeln('Masz ',a1,' lat');
readln;
end.
Przykład 6. Program rysuje na ekranie prymitywną szachownicę.
uses crt; {lub uses wincrt;}
var i,j:byte;
procedure b;
begin
for j:=1 to 4 do write(#987+#987+#987+' ');
end;
procedure c;
begin
for j:=1 to 4 do write(' '+#987+#987+#987);
end;
begin
clrscr;
Writeln('Szachownica !');
writeln;writeln;
writeln(' A B C D E F G H');
writeln;
for i:=8 downto 1 do
begin
if i mod 2 = 0 then begin write(' ',i,' ');b;end
else begin write(' ',i,' ');c;end;
writeln;
end;
Przykład 7. Odpytywanie z tabliczki mnożenia.
program tabliczka_mnozenia;
uses crt;
var odp,l1,l2,pytan,bledow,zasieg:integer;
ch:char;
begin
clrscr;
Writeln('
Program Mnozenie');
writeln;
writeln;
repeat
write('Podaj zasieg z jakiego losowac liczby [1..100] : ');readln(zasieg);
until (1<zasieg)and(zasieg<101);
pytan:=0;
bledow:=0;
randomize;
repeat
clrscr;
pytan:=pytan+1;
l1:=random(zasieg)+1;
l2:=random(zasieg)+1;
Writeln('Pytanie Numer : ',pytan);
Writeln;
Write('Ile Jest ',l1,' x ',l2,' = ');readln(odp);
if odp<>l1*l2 then begin Writeln('Zle !');bledow:=bledow+1;end else writeln('Dobrze');
writeln;
Writeln('------------ STATYSTYKA -------------');
Writeln(' Pytan - ',pytan);
Writeln(' Dobrych - ',pytan-bledow);
Writeln(' Blednch - ',bledow);
Writeln(' Procent Dobrych : ',100*(pytan-bledow)/pytan:0:1,' %');
Writeln;
Writeln('Kontynuowac ? : [T/N]');
ch:=readkey;
{funkcja upcase zamienia duze na małe litery}
until upcase(ch)='N';
writeln('KONIEC');
end.
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;
uses crt;
var a,b:integer;
ch:char;
begin
repeat
clrscr;
Writeln('Program Oblicza Stan Funkcji Liniowej y = ax + b');
Writeln('Sprawdza czy jest rosnaca, malejaca czy stala.');
Writeln;
Write ('Podaj wartosc wpolczynnika a :');readln(a);
Write ('Podaj wartosc wpolczynnika b :');readln(b);
writeln;
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
writeln;
if a>0 then
begin
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 )');
end;
if a<0 then
begin
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 )');
end;
if a=0 then
begin
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 )');
end;
{}
writeln;
write('Jeszcze Raz ? [T/N] :');
ch:=readkey;
{upcase zamienia mala na duza literę}
until upcase(ch)='N';
writeln('Koniec');
end.