Pascal
Struktura programu w języku Pascal
Standardowe typy danych
Operatory i wyrażenia
Instrukcje warunkowe i instrukcja wyboru
Instrukcje iteracyjne
Procedury
Funkcje
Lab1
Struktura programu w języku Pascal
Cel ćwiczenia:
Poznanie edytora i kompilatora języka Pascal Dev-Pascal lub freePascal, struktury programu, zmiennych o typach prostych, instrukcji przypisania oraz standardowych procedur obsługi monitora i klawiatury.
z1. Opracować program drukujący napis: 'To jest linia 1 programu' (wykorzystać standardowe procedury wyjścia: write, writeln). Przykładowa struktura programu:
program lab1_z1;
begin
writeln('To jest linia 1 programu');
end.
z2. Zmodyfikować poprzedni program tak, aby numer linii był wyświetlany za pomocą zmiennej.
program lab1_z2;
var
i:integer;
begin
i:=1;
writeln('To jest linia ', i, ' programu');
end.
z3. Opracować program, który wyprowadza 5 napisów 'To jest linia' w punktach ekranu o współrzędnych (x,y) postaci: (1,1), (2,2), (3,3), (4,4), (5,5). Do ustawienia kursora na pozycji (a,b) wykorzystać procedurę GotoXY(a,b), gdzie 1<=a<=80 oraz 1<=b<=25. Każdy napis wyprowadzić w innym kolorze. Wykorzystać procedurę TextColor(k), k=1,2,3,4,5, np. TextColor(1), TextColor(2), ... , TextColor(5).
program lab1_z3;
uses crt;
begin
GotoXY(1,1);
TextColor(1);
Write('To jest linia');
GotoXY(2,2);
TextColor(2);
Write('To jest linia');
GotoXY(3,3);
TextColor(3);
Write('To jest linia');
GotoXY(4,4);
TextColor(4);
Write('To jest linia');
TextColor(5);
GotoXY(5,5);
Write('To jest linia');
end.
z4. Opracować program, który oblicza iloczyn dwóch liczb rzeczywistych a, b typu real wczytywanych z klawiatury za pomocą procedury readln. Wynik wyprowadzić na ekran w formacie uwzględniającym zadaną liczbę miejsc po przecinku, np. writeln(wynik: s : d); gdzie s jest liczbą pól na ekranie przeznaczonych dla zmiennej wynik, natomiast d jest liczbą miejsc po przecinku (np. wynik:9:4); s > d. Zmodyfikować program w taki sposób, aby parametry formatu wyniku (liczby s i d) były wprowadzane z klawiatury, np. wczytywane za pomocą procedury readln.
program lab1_z4;
uses crt;
var
a,b,wynik: Real;
s,d: Integer;
begin
Write('Podaj 1 liczbe: ');
ReadLn(a);
Write('Podaj 2 liczbe: ');
ReadLn(b);
wynik:=a*b;
WriteLn('Zaokraglanie...');
Write('Podaj liczbe s: ');
ReadLn(s);
Write('Podaj liczbe d: ');
ReadLn(d);
WriteLn(wynik:s:d);
end.
z5. Opracować program, na podstawie schematu blokowego algorytmu.
program lab1_z5;
var
x,y,z,suma: real;
begin
{ Pobranie danych z klawiatury }
write('Podaj x='); readln(x);
write('Podaj y='); readln(y);
write('Podaj z='); readln(z);
{ Obliczenie sumy }
suma:=x+y+z;
{ Wyprowadzenie wynikow z dokladnoscia do 2 miejsc na 0 polu }
writeln('suma=',suma:0:2);
readln;
end.
wróć
Lab2
Standardowe typy danych
Cel ćwiczenia:
Definiowanie stałych i deklarowanie zmiennych o typach prostych: całkowitych, rzeczywistych, znakowych i logicznych. Nadawanie wartości zmiennym. Typ łańcuchowy. Wyprowadzanie stałych i zmiennych.
z1. Zdefiniować dwie stałe całkowite a=25 i b=1247. Wyprowadzić stałe na ekran jedna pod drugą na 5 polach.
program lab2_z1;
const
a = 25;
b = 1247;
begin
writeln(a:5);
writeln(b:5);
end.
z2.Zdefiniować dwie stałe rzeczywiste x=1.237 i y=375.493. Wyprowadzić stałe na ekran jedna pod drugą na 9 polach z 2 miejscami po przecinku.
program lab_z2;
const
x = 1.237;
y = 375.493;
begin
writeln(x:9:2);
writeln(y:9:2);
end.
z3. Zadeklarować zmienną inicjowaną (const) typu real z wartością początkową w = 2.3456. Wyprowadzić zmienną na ekran z rosnącą precyzją, tj. bez cyfr po przecinku, z jedną cyfrą po przecinku, dwoma, trzema oraz czterema cyframi po przecinku. Kolejne wartości zmiennych wyprowadzać jedna pod drugą. Określić sposób zaokrąglania liczb.
program lab2_z3;
const
w: real = 2.3456;
begin
writeln(w:9:0);
writeln(w:9:1);
writeln(w:9:2);
writeln(w:9:3);
writeln(w:9:4);
end.
z4. Zadeklarować dwie zmienne w1, w2 typu boolean oraz dwie zmienne c1, c2 typu char. W programie głównym zmodyfikować wartości zmiennych następująco: w1=False, w2=True oraz c1='A', c2=#97. Wyprowadzić zmienne logiczne i znakowe na ekran.
program lab2_z4;
var
w1,w2: boolean;
c1,c2: char;
begin
w1:=False;
w2:=True;
c1:='A';
c2:=#97;
writeln(w1);
writeln(w2);
writeln(c1);
writeln(c2);
end.
z5. Zadeklarować dwie zmienne im, naz typu string (zmienne łańcuchowe). W programie głównym podstawić im='Jan' oraz naz='Nowakowski'. Wyprowadzić zmienne na ekran jedna obok drugiej z odstępem jednej spacji. Wczytać nowe wartości zmiennych z klawiatury. Wyprowadzić zmienne na ekran jedna pod drugą na 20 polach każdą.
program lab2_z5;
var
im,naz: string;
begin
im:='Jan'; naz:='Nowakowski';
writeln(im, ' ', naz);
write('Podaj imie: ');
readln(im);
write('Podaj nazwisko: ');
readln(naz);
writeln(im:20);
writeln(naz:20);
end.
z6. Wyprowadzić na ekran następujące teksty (s - spacja):
ssss1
sss12
ss123
s1234
program lab2_z6;
begin
writeln('1':5);
writeln('12':5);
writeln('123':5);
writeln('1234':5);
end.
z7. W programie głównym zadeklarować następujące zmienne inicjowane o typach prostych:
const xs: shortint = -120;
xb: byte = 200;
xi: integer = 32000;
xw: word = 50000;
xl: longint = 600000;
xc: char = #65;
xg: single = 6.123456789;
xr: real = 6.123456789012345;
xd: double = 6.1234567890123456789;
xe: extended = 6.1234567890123456789012;
xp: comp = -9.2E5;
Wyprowadzić zmienne na ekran za pomocą procedury writeln. Dla liczb rzeczywistych dobrać format wydruku tak, aby wyprowadzić możliwie największą liczbę cyfr dokładnych.
program lab2_z7;
const
xs: shortint = -120;
xb: byte = 200;
xi: integer = 32000;
xw: word = 50000;
xl: longint = 600000;
xc: char = #65;
xg: single = 6.123456789;
xr: real = 6.123456789012345;
xd: double = 6.1234567890123456789;
xe: extended = 6.1234567890123456789012;
xp: comp = -9.2E5;
begin
writeln(xs);
writeln(xb);
writeln(xi);
writeln(xw);
writeln(xl);
writeln(xc);
writeln(xg);
writeln(xr);
writeln(xd);
writeln(xe);
writeln(xp);
end.
z8. Wczytać z klawiatury za pomocą procedury readln nowe wartości zmiennych zadeklarowanych w poprzednim zadaniu (np. xs=130, xb=260). Wyprowadzić zmodyfikowane zmienne na ekran.
program lab2_z8;
const
xs: shortint = -120;
xb: byte = 200;
xi: integer = 32000;
xw: word = 50000;
xl: longint = 600000;
xc: char = #65;
xg: single = 6.123456789;
xr: real = 6.123456789012345;
xd: double = 6.1234567890123456789;
xe: extended = 6.1234567890123456789012;
xp: comp = -9.2E5;
begin
readln(xs);
readln(xb);
readln(xi);
readln(xw);
readln(xl);
readln(xc);
readln(xg);
readln(xr);
readln(xd);
readln(xe);
readln(xp);
writeln(xs);
writeln(xb);
writeln(xi);
writeln(xw);
writeln(xl);
writeln(xc);
writeln(xg);
writeln(xr);
writeln(xd);
writeln(xe);
writeln(xp);
end.
wróć
Lab3
Operatory i wyrażenia
Cel ćwiczenia:
Realizacja obliczeń matematycznych z wykorzystaniem prostych typów danych, operatorów arytmetycznych, standardowych funkcji matematycznych oraz wyrażeń.
z1. Opracować program obliczający odległość między dwoma punktami w przestrzeni dwuwymiarowej. Współrzędne punktów (x1,y1) i (x2,y2) są liczbami rzeczywistymi wprowadzanymi z klawiatury. Odległość d = sqrt( sqr(x1- x2) + sqr(y1-y2) ), sqrt funkcja pierwiastek, sqr funkcja podnoszenia do kwadratu.
program lab3_z1;
uses crt;
var
x1,x2,y1,y2: real;
d: real;
begin
writeln('Obliczenie odleglosci "d" miedzy dwoma punktami');
writeln('Wzor: d = sqrt(sqrt(x1-x2) + sqrt(y1-y2))');
writeln('Podaj wspolrzedne puntow:');
write('x1 = '); readln(x1);
write('y1 = '); readln(y1);
write('x2 = '); readln(x2);
write('y2 = '); readln(y2);
d:= sqrt(sqrt(x1-x2) + sqrt(y1-y2));
writeln('d = ',d:9:2);
end.
z2. Opracować program obliczający wartość w = 5|a-b| + 3|b-a|, gdzie a i b są liczbami rzeczywistymi wczytywanymi z klawiatury, natomiast | x | jest modułem liczby x.
program lab3_z2;
var
a,b: real;
w: real;
begin
writeln('Obliczam wyrazenie:');
writeln('w = 5|a -b| + 3|b - a|');
write('a = '); readln(a);
write('b = '); readln(b);
w:= 5*abs(a - b) + 3*abs(b - a);
writeln('w = ', w:0:2);
end.
z3. Dla zmiennych a, b, c, x, y, z, u, w, v, s, o, wczytywanych z klawiatury, obliczyć wartości wyrażeń:
w1 = ax^2 + bx + c (a, b, c, x - liczby rzeczywiste),
w2 =| | x | - | y || (x, y - liczby rzeczywiste),
w4 = 16 * s + o (s, o - liczby całkowite; np. jeśli s=10000 i o=2, to w3=160002).
z4. Dla zmiennych x, y, a, wczytywanych z klawiatury, obliczyć wartości wyrażeń:
u1 = (x * tg y) /( y + sin x) (x, y - liczby rzeczywiste),
u2 = ln(e* x2 + 0.5) (e - stała exp(1); x - liczba rzeczywista),
u3 = ax (a > 0; a, x - liczby rzeczywiste).
program lab3_z4;
var
a,x,y,u1,u2,u3: real;
begin
writeln('Obliczam wyrazenie');
writeln('u1 = (x*tgy)/(y+sinx)');
write('x = '); readln(x);
write('y = '); readln(y);
u1:= (x*(sin(y)/cos(y)))/(y+sin(x));
writeln('u1 = ', u1:0:2);
writeln('Obliczam wyrazenie');
writeln('u2 = ln(e*x^2+0.5)');
write('x = '); readln(x);
write('y = '); readln(y);
u2:= ln(exp(1) * sqr(x) + 0.5);
writeln('u2 = ', u2:0:2);
writeln('Obliczam wyrazenie');
writeln('u3 = a^x');
write('a = '); readln(a);
write('x = '); readln(x);
u3:= exp(x*ln(a));
writeln('u3 = ', u3:0:2);
end.
z5. Wczytać trzy liczby rzeczywiste a, b, c. Obliczyć ich średnią s = (a+b+c)/3 oraz odchylenie od średniej d = sqrt( sqr(a-s) + sqr(b-s) + sqr(c-s) ). Wyniki wyświetlić w postaci tabeli zawierającej następujące kolumny: | a | b | c | s | d |.
program Lab3_z5;
uses crt;
const
z1=#218;
z2=#196;
z3=#194;
z4=#191;
z5=#179;
z6=#192;
z7=#217;
z8=#193;
var
a,b,c,s,d:real;
begin
write('Podaj a: '); readln(a);
write('Podaj b: '); readln(b);
write('Podaj c: '); readln(c);
s:= (a+b+c)/3;
d:= sqrt( sqr(a-s) + sqr(b-s) + sqr(c-s) );
writeln(z1,z2,z2,z2,z2,z3,z2,z2,z2,z2,z3,z2,z2,z2,z2,z3,\
z2,z2,z2,z2,z3,z2,z2,z2,z2,z4);
writeln(z5,a:0:2,z5,b:0:2,z5,c:0:2,z5,s:0:2,z5,d:0:2,z5);
writeln(z6,z2,z2,z2,z2,z8,z2,z2,z2,z2,z8,z2,z2,z2,z2,z8,\
z2,z2,z2,z2,z8,z2,z2,z2,z2,z7);
readln;
end.
z6. Opracowa program obliczajcy pole powierzchni S i objto V:
kuli: S = 4PIr2; V = (4/3)PIr3 ; r - promien;
walca kolowego: S = 2PIrh + 2PIr2; V =PIr2h; r - promien; h - wysokosc
program lab3_z6;
var
S,V,r,h: extended;
begin
writeln('Podaj promien kuli: ');
write('r = '); readln(r);
writeln('Powierzchnia kuli -> S = 4*Pi*r^2 ');
S:= 4*Pi*sqr(r);
writeln('S = ', S:0:2);
writeln('Objestosc kuli -> V = (4/3)*Pi*r^3 ');
V:= (4/3)*Pi*exp(3*ln(r));
writeln('V = ', V:0:2);
writeln('Podaj promien walca: ');
write('r = '); readln(r);
writeln('Podaj wysokosc walca: ');
write('h = '); readln(h);
writeln('Powierzchnia walca -> S = 2*Pi*r*h+2*Pi*r^2');
S:= 2*Pi*r*h+2*Pi*sqr(r);
writeln('S = ', S:0:2);
writeln;
writeln('Objetosc walca -> V = Pi*r^2*h');
V:= Pi*sqr(r)*h;
writeln('V = ', V:0:2);
writeln;
end.
z7. Dla (a,b) i (c,d) wczytywanych z klawiatury obliczyć iloczyn liczb zespolonych z1 = a + bi oraz z2 = c + di.
program lab3_z7;
var
a,b,c,d: extended;
rzecz: extended;
uroj: extended;
begin
writeln('Iloczyn liczb zespolonych z1=a+bi oraz z2=c+di');
write('a = '); readln(a);
write('b = '); readln(b);
write('c = '); readln(c);
write('d = '); readln(d);
rzecz:= a*c-b*d;
uroj:= a*d + b*c;
writeln('z1 * z2 = ',rzecz:0:0, ' + i', uroj:0:0);
writeln;
end.
z8. Opracować program wyznaczający część całkowitą oraz resztę z dzielenia liczby naturalnej x przez liczbę naturalną y. Liczby x i y są losowane z przedziału [0, 100).
program lab3_z8;
var
x,y,r_z_d: real;
c_c: longint;
begin
writeln('Obliczenie czesci calkowitej oraz resty z dzielenia dwoch liczb');
randomize;
x:=random(100);
y:=random(100);
writeln('x = ',x);
writeln('y = ',y);
c_c:= trunc(x/y);
r_z_d:= x - c_c * y;
writeln('x / y = ',c_c,' reszta =', r_z_d:0:0);
end.
wróć
Lab4
Instrukcje warunkowe i instrukcja wyboru
Cel ćwiczenia:
Poznanie zastosowań instrukcji warunkowych (if, if-else) oraz instrukcji wyboru (case). Programy rozgałęzione. Typy proste definiowane przez użytkownika: typ wyliczeniowy, typ okrojony.
z1. Wczytać trzy liczby rzeczywiste a, b, c. Wyznaczyć min, max, średnią arytmetyczną.
program lab4_z1;
var
a,b,c,min,max: real;
begin
write('a = '); readln(a);
write('b = '); readln(b);
write('c = '); readln(c);
writeln('Srednia arytmetyczna S = ',(a+b+c)/3:0:2);
{ wyznaczenie min }
min:=a;
if b<=min then min:=b;
if c<=min then min:=c;
writeln('Minimum = ', min:0:2);
{ wyznaczenie max }
max:=a;
if b>=max then max:=b;
if c>=max then max:=c;
writeln('Minimum = ', max:0:2);
readln;
end.
z2. Zbadać, czy z odcinków a, b, c można zbudować trójkąt (można jeśli równocześnie spełnione są warunki: a+b>c i b+c>a i c+a>b. Określić typ trójkąta (równoboczny, równoramienny, prostokątny, różnoboczny).
program lab4_z2;
var
a, b, c: real;
begin
{ wczytanie liczb }
write('Podaj a='); readln(a);
write('Podaj b='); readln(b);
write('Podaj c='); readln(c);
{ sprawdzenie czy można utworzyć trójkąt }
if (a+b>c) and (b+c>a) and (c+a>b) then
begin
writeln('Z odcinków a,b,c można zbudować trójkąt.');
{ sprawdzenie jaki trójkat }
if(a=b) and(b=c) then writeln('Trójkąt jest równoboczny');
if ((a=b) and (b<>c)) or ((b=c) and (a<>b)) or ((a=c) and (b<>c)) then
writeln('Trójkąt jest równoramienny');
if(a<>b) and(b<>c) and(a<>c) then writeln('Trójkąt jest różnoboczny');
if sqr(a)+sqr(b)=sqr(c) then writeln('Trójkąt jest prostokątny');
end
else writeln('Nie można zbudować trójkąta');
readln;
end.
z3. Rozwiązać równanie kwadratowe ax2 + bx + c = 0. Rozważyć przypadki:
a=b=c=0,
a=b=0 & c<>0,
a=c=0 & b<>0,
b=c=0 & a<>0,
a=0 & b<>0 & c<>0,
b=0 & a<>0 & c<>0,
c=0 & a<>0 & b<>0,
a<>0 & b<>0 & c<>0.
program lab4_z3;
var
a, b, c, delta, x1, x2, x0 : real;
begin
{ wczytanie współczynników równania }
write('Podaj wspolczynnik a: '); readln(a);
write('Podaj wspolczynnik b: '); readln(b);
write('Podaj wspolczynnik c: '); readln(c);
{ Postać równania }
writeln(a:0:2,'x^2 + ',b:0:2,'x + ',c:0:2,' = 0');
{ Sprawdzenie czy równanie jest kwadratowe a<>0 }
if a <> 0 then
begin
{ Obliczenie delty delta = b^2 -4ac }
delta:= sqr(b)-4*a*c;
if delta > 0 then
begin
{ Równanie posiada dwa pierwiastki rzeczywiste }
x1 := (-b + sqrt(delta))/(2*a);
x2 := (-b - sqrt(delta))/(2*a);
writeln('x1 = ', x1:0:4);
writeln('x2 = ', x2:0:4);
end;
if delta = 0 then
begin
{ Równanie posiada jeden pierwiastek rzeczywisty }
x0 := (-b + sqrt(delta))/(2*a);
writeln('Pierwistek równania - punkt zerowy');
writeln('x0 = ', x0:0:4);
end;
if delta < 0 then
writeln('Równanie nie posiada rozwiązań rzeczywistych');
end
else writeln('Nie jest to równanie kwadratowe');
readln;
end.
z4. Określ przez, które ćwiartki układu współrzędnych (lub oś X) przechodzi prosta postaci y=ax+b, gdzie a i b są danymi wczytywanymi z klawiatury. Na przykład, dla a=2; b=2; prosta y=2x+2 przechodzi przez 1, 2 i 3 ćwiartkę; dla a=b=0; prosta y=0 pokrywa się z osią X.
a>0 & b>0 - 1,2,3
a>0 & b<0 - 1,3,4
a<0 & b>0 -1,2,4
a<0 & b<0 - 2,3,4
a=0 & b=0 - pokrywa się z osią x
b=0 & a>0 - 1,3 i przechodzi przez punkt (0,0)
b=0 & a<0 -2,4 i przechodzi przez punkt (0,0)
program lab4_z4;
var
a,b: real;
begin
writeln('Dana jest prosta y=ax+b');
write('Podaj wspolczynnik kierunkowy a: '); readln(a);
write('Podaj wspolczynnik przesuniecia b: '); readln(b);
write('Sprawdzenie przez, ktore cwiartki ukladu wspolrzednych przechodzi prosta');
if (a>0) and (b>0) then
begin
writeln('Prosta y=ax+b przechodzi przez 1, 2 i 3 cwiartke ukladu wspolrzednych');
end;
if (a>0) and (b<0) then
begin
writeln('Prosta y=ax+b przechodzi przez 1, 3 i 4 cwiartke ukladu wspolrzednych');
end;
if (a<0) and (b>0) then
begin
writeln('Prosta y=ax+b przechodzi przez 1, 2 i 4 cwiartke ukladu wspolrzednych');
end;
if (a<0) and (b<0) then
begin
writeln('Prosta y=ax+b przechodzi przez 2, 3 i 4 cwiartke ukladu wspolrzednych');
end;
if (a=0) and (b=0) then
begin
writeln('Prosta y=ax+b pokrywa sie z osio x');
end;
if (b=0) and (a>0) then
begin
writeln('Prosta y=ax+b przechodzi przez punkt (0,0) przez 1 i 3 cwiartke ukladu wspolrzednych');
end;
if (b=0) and (a<0) then
begin
writeln('Prosta y=ax+b przechodzi przez punkt (0,0) przez 2 i 4 cwiartke ukladu wspolrzednych');
end;
readln;
end.
z5.Określ czy punkt o współrzędnych (p,q), gdzie p,q - liczby rzeczywiste wczytywane z klawiatury, należy do obszaru wyznaczonego przez prostokąt zdefiniowany przez proste: X=A, X=B, Y=C, Y=D, gdzie A B i C D (A, B, C, D - stałe typu rzeczywistego zdefiniowane w programie).
program lab4_z5;
const
A=5;
B=10;
C=5;
D=10;
var
{ wspolrzedne punktu }
p,q: real;
begin
writeln('Podaj wspolrzedne punktu: ');
write('p: '); readln(p);
write('q: '); readln(q);
if (p>=A) and (p<=B) and (q>=C) and (q<=D) then
begin
writeln('Punkt o wspolrzednich (', p:0:1, ',', q:0:1, ') nalezy do prostokata ADBC');
end
else
writeln('Punkt o wspolrzednich (', p:0:1, ',', q:0:1, ') nie nalezy do prostokata ADBC');
readln;
end.
z6.Wprowadzić z klawiatury rok, miesiąc i dzień. Jeżeli data jest poprawna, tj. dzień 32, miesiąc 13, styczeń 32, luty 30 w roku przestępnym oraz luty 29 w roku zwykłym, marzec 32, itd., to wyprowadzić na ekran datę (miesiąc słownie). Uwzględnić lata przestępne. Przyjąć, że rok nie jest przestępny (rok zwykły) jeśli: nie dzieli się przez 4 lub dzieli się przez 100, ale nie przez 400 (np. lata zwykłe: 1700, 1800, 2100; lata przestępne: 4, 1600, 1996, 2000, 2400). W szczególności data 29-02-1800 r. nie jest datą poprawną.
program lab4_z6;
uses crt;
var
rok: longint;
dzien, mies,czesc_calkowita,czesc_calkowita1: integer;
przestepny,reszta,przestepny1,reszta1: real;
begin
write('Podaj rok w formacie [0000]: '); readln(rok);
{ sprawdzenie poprawnosci wpowadzonego roku }
while rok>9999 do
begin
writeln('Podales zly rok !!!');
write('Podaj rok w formacie [0000]: '); readln(rok);
end;
write('Podaj miesiac w formacie [00]: '); readln(mies);
write('Podaj dzien w formacie [00]: '); readln(dzien);
{ Rok zwykly czy przestepny(zwykly - jesli nie dzieli sie przez 4 lub dzieli sie przez
100 ale nie 400)
przestepny gdy dzieli sie przez 4 ale nie przez 400 }
przestepny:=rok/4;
przestepny1:=rok/400;
czesc_calkowita:= trunc(przestepny);
czesc_calkowita1:= trunc(przestepny1);
reszta:= rok - czesc_calkowita * 4; // rok zwykly nie dzieli sie bez reszty przez 400
reszta1:= rok - czesc_calkowita1 * 400;
if reszta>0 then
begin
writeln('Rok ', rok, ' jest zwykly');
while (mies=2) and (dzien>28) do
begin
clrscr;
writeln('Podales zla date luty ma 28 dni w roku zwyklym');
write('Podaj dzien <29 w formacie [0]: '); readln(dzien);
end;
while ((mies=4) and (dzien>30)) or ((mies=6) and (dzien>30)) or ((mies=9)
and (dzien>30)) or((mies=11) and (dzien>30)) do
begin
clrscr;
writeln('Podales zla date miesiace(4,6,9,11) maja 30 dni w roku zwyklym');
write('Podaj dzien <31 w formacie [0]: '); readln(dzien);
end;
end
else
if reszta1>0 then
begin
writeln('Rok ', rok, ' jest zwykly (dzieli sie bez reszy przez 4 ale nie przez 400)');
end
else
begin
writeln('Rok ', rok, ' jest przestepny');
while (mies=2) and (dzien>29) do
begin
clrscr;
writeln('Podales zla date luty ma 29 dni w roku przestepnym');
write('Podaj dzien <30 w formacie [0]: '); readln(dzien);
end;
while ((mies=4) and (dzien>30)) or ((mies=6) and (dzien>30)) or ((mies=9) and (dzien>30))
or((mies=11) and (dzien>30)) do
begin
clrscr;
writeln('Podales zla date miesiace(4,6,9,11) maja 30 dni w roku przestepnym');
write('Podaj dzien <31 w formacie [0]: '); readln(dzien);
end;
end;
while (dzien>=32) do
begin
clrscr;
writeln('Podales zla date');
write('Podaj dzien <32 w formacie [0]: '); readln(dzien);
end;
while (mies>=13) do
begin
clrscr;
writeln('Podales zle miesiac');
write('Podaj miesiac <13 w formacie [00]: '); readln(mies);
end;
clrscr;
if (dzien<10) and (mies<10) then
begin
writeln;
writeln('Podales date prawidlowo: 0', dzien, '.0', mies, '.', rok, ' r.');
end;
if (dzien<10) and (mies>9) then
begin
writeln;
writeln('Podales date prawidlowo: 0', dzien, '.', mies, '.', rok, ' r.');
end;
if (dzien>9) and (mies>9) then
begin
writeln;
writeln('Podales date prawidlowo: ', dzien, '.', mies, '.', rok, ' r.');
end;
if (dzien>9) and (mies<10) then
begin
writeln;
writeln('Podales date prawidlowo: ', dzien, '.0', mies, '.', rok, ' r.');
end;
if reszta>0 then
begin
writeln('Rok ', rok, ' jest zwykly');
end
else
if reszta1>0 then
begin
writeln('Rok ', rok, ' jest zwykly (dzieli sie bez reszy przez 4 ale nie przez 400)');
end
else
writeln('Rok ', rok, ' jest przestepnym');
case mies of
1: writeln('Data: ', dzien, ' Styczen ',rok, ' r.');
2: writeln('Data: ', dzien, ' Luty ',rok, ' r.');
3: writeln('Data: ', dzien, ' Marzec ',rok, ' r.');
4: writeln('Data: ', dzien, ' Kwiecien ',rok, ' r.');
5: writeln('Data: ', dzien, ' Maj ',rok, ' r.');
6: writeln('Data: ', dzien, ' Czerwiec ',rok, ' r.');
7: writeln('Data: ', dzien, ' Lipiec ',rok, ' r.');
8: writeln('Data: ', dzien, ' Sierpien ',rok, ' r.');
9: writeln('Data: ', dzien, ' Wrzesien ',rok, ' r.');
10: writeln('Data: ', dzien, ' Pazdziernik ',rok, ' r.');
11: writeln('Data: ', dzien, ' Listopad ',rok, ' r.');
12: writeln('Data: ', dzien, ' Grudzien ',rok, ' r.');
end;
writeln;
write('Nacisnij ENTER aby zakonczyc...');
readln;
end.
z7.Zadeklarować zmienną dzień typu wyliczeniowego Tdni = (pon, wt, sr, czw, pt, sob, niedz). Wylosować wartość zmiennej dzien. Przyjmując, że zmienna dzień jest selektorem instrukcji wyboru case wyprowadzić pełną nazwę dnia tygodnia.
program lab4_z7;
uses crt;
type
{ typ wyliczeniowy }
Tdni = (pon, wt, sr, czw, pt, sob, niedz);
var
{ zmienna typu wyliczeniowego Tdni }
dzien: Tdni;
i: integer;
begin
repeat
clrscr;
{ generator liczb pseudolosowych }
randomize;
i:=random(6);
dzien:=Tdni(i); { rzutowanie typu integer do typu Tdni }
case dzien of
pon: writeln('Poniedzialek');
wt: writeln('Wtorek');
sr: writeln('Sroda');
czw: writeln('Czwartek');
pt: writeln('Piatek');
sob: writeln('Sobota');
niedz: writeln('Niedziela');
end;
readln;
end.
wróć
Lab5
Instrukcje iteracyjne
Cel ćwiczenia:
Wykorzystanie instrukcji iteracyjnych w programach. Obliczanie prostych sum szeregów. Wyprowadzanie informacji na ekran w trybie znakowym.
z1. Poszukaj losową liczbę całkowitą należącą do przedziału [40, 50]. Liczby są losowane z przedziału [0,100]. Użyj instrukcji sterującej przebiegiem programu break.
program Lab5_z11;
uses crt;
var
x: word;
begin
x:=0;
randomize;
while true do
begin
x:=random(101);
delay(100);
writeln('losuje x ze 100 ...');
if (x>=40) and (x<=50) then
begin
writeln('Wylosowano liczbe z przdzialu [40,50] x = ',x);
break;
end;
end;
readln;
end.
z2. Wyprowadź na ekran losowe liczby nieparzyste należące do przedziału [0, 100]. Liczba prób 70. Użyj instrukcji sterującej przebiegiem programu continue.
program Lab5_z12;
var
x,i: integer;
begin
randomize;
for i:=1 to 70 do
begin
x:=random(100);
if(x mod 2 = 0) then continue; {liczba parzysta powraca na poczatek petli}
writeln('liczba nieparzysta x = ',x);
end;
readln;
end.
z3. Wykorzystując instrukcję pętli (for) obliczyć sumę S = 1 + 2 + ... + n, gdzie n jest liczbą naturalną wczytywaną z klawiatury.
program lab5_z13;
var
i,n: longint;
S: real;
begin
writeln('Obliczenie sumy S=1+2+3+....+n');
write('Podaj liczbe n = '); readln(n);
S:=0;
for i:=1 to n do
begin
S:= S + i;
end;
writeln('S = ',S:0:2);
readln;
end.
z4. Wykorzystując instrukcję pętli (for) obliczyć iloczyn silnia = 1 * 2 * ... * n, (n!) gdzie n jest liczbą naturalną wczytywaną z klawiatury.
program lab5_z14;
var
i,n: longint;
silnia: real;
begin
writeln('Obliczenie iloczynu silnia=1*2*3*....*n!');
write('Podaj liczbe n = '); readln(n);
silnia:=1;
for i:=1 to n do
begin
silnia:= silnia * i;
end;
writeln(n,'! = ',silnia:0:2);
readln;
end.
z5. Opracować program, który dla naturalnego n i rzeczywistego x, wczytywanych z klawiatury, oblicza:
a) P = 1+2+ ... +n;
b) W = x*x* ... *x = xn (x do potęgi n).
Wykorzystać instrukcje iteracyjne.
program lab5_z15;
var
i,n: integer;
P,W,x: real;
begin
writeln('Obliczenie iloczynu P=1*2*3*....*n - n!');
write('Podaj liczbe n = '); readln(n);
P:=1;
for i:=1 to n do
begin
P:= P * i;
end;
writeln('P = ', n,'! = ',P:0:2);
writeln('Obliczenie W=x*x*x*....x^n');
write('Podaj liczbe potegowana x = '); readln(x);
write('Podaj wykladnik potegii n = '); readln(n);
W:=1;
for i:=1 to n do
begin
W:= W * x;
end;
writeln('W = ',x:0:0,'^',n,' = ',W:0:2);
readln;
end.
z6. Opracuj program, który wyprowadza na ekran następującą figurę:
XXXXXXXXXXXX
XXXXXXXXXXXX
XXXXXXXXXXXX
XXXXXXXXXXXX
Niech znaki X pojawiają się na ekranie z opóźnieniem 100 ms.
program lab5_z16;
uses crt;
var
i,j: integer;
begin
{ 1 sposob }
for i:=1 to 4 do
begin
for j:=1 to 12 do
begin
if (j mod 12 >0) then
begin
write('X');
end
else writeln('X');
end;
end;
{ 2 sposob }
for i:=1 to 4 do
begin
for j:=1 to 12 do
begin
write('X');
end;
writeln;
end;
readln;
end.
z7. Opracuj program, który wyprowadza na ekran następujące figury:
X X X
XX XX XXX
h XXX XXX h XXXXX h
XXXX XXXX XXXXXXX
Zmienna całkowita h, określająca wysokość figury, jest wczytywana z klawiatury.
program lab5_z17;
uses crt;
var
i,j,h,x,y: integer;
begin
clrscr;
write('Podaj wysokosc trojkata h: '); readln(h);
x:=1; y:=1;
for i:=1 to h do
begin
gotoXY(x,y+i);
for j:=1 to i do
begin
write('X');
end;
end;
x:=20; y:=1;
for i:=1 to h do
begin
gotoXY(x-i,y+i);
for j:=1 to i do
begin
write('X');
end;
end;
x:=40; y:=1;
for i:=1 to h do
begin
gotoXY(x-i,y+i);
for j:=1 to i do
begin
write('X');
end;
end;
x:=39; y:=1;
for i:=1 to h do
begin
gotoXY(x,y+i);
for j:=1 to i do
begin
write('X');
end;
end;
readln;
end.
z8. Opracować program wyprowadzający na ekran wierszami znaki o kodach ASCII od a do b, gdzie a, b są wczytywane z klawiatury oraz spełniają zależność 33 <= a <= b <=255. Wyprowadzać po 12 znaków w wierszu w formacie: znak na dwóch polach, myślnik (-), kod znaku na trzech polach, np. A - #65, e - #101.
program lab5_z18;
var
a,b,i,l: integer;
begin
repeat
writeln('Podaj liczbe z przedzialu [33-255]');
write('Podaj a: '); readln(a);
write('Podaj b: '); readln(b);
until (a>=33) and (a<b) and (b<=255);
i:=1;
writeln('Znaki klawiatury i odpowiadajace im kody ASCII');
for l:=a to b do
begin
if (i mod 12 >0) then
begin
write(chr(l),' - ', '#',l,' ' );
end
else
begin
writeln(chr(l),' - ', '#',l,' ');
end;
inc(i); {inkremetacja i, i=i+1}
end;
writeln;
readln;
end.
z9. Opracować program, który umożliwia przesuwanie po ekranie w trybie znakowym kursora reprezentowanego za pomocą dowolnego znaku, np. x. Przesuwanie zrealizować za pomocą klawiszy strzałek (wykorzystać funkcję ReadKey). W prawym górnym rogu ekranu wyświetlać aktualne współrzędne kursora.
program lab5_z19;
uses crt;
procedure PodajXY(s:string; px,py: integer);
begin
cursoroff;
gotoXY(1,1);
write(s, ' ','[',px,',',py, ']');clreol;
end;
var
i,j: integer;
x,x_ext: char; {x- znak normalny x_ext - znak rozszerzony}
Koniec: boolean;
px,py: integer;
s: string;
begin
cursoroff;
clrscr;
s:='Pozycja kursora: ';
px:=1; py:=1;
i:= 1;
j:=2;
Koniec := false;
repeat
PodajXY(s,px,py);
x_ext := char(0);
x:=readKey;
if x = char(27) then Koniec:=true; {kod ASCII Esc - 27}
if x = char(0) then x_ext := readkey;
if(x_ext = 'M') then
begin
gotoXY(i, j);
if keypressed=false then begin delline;clreol;end;
write('X');
inc(i);
end;
if(x_ext = 'K') then
begin
gotoXY(i, j);
if keypressed=false then delline;
Write('X');
dec(i);
end;
if(x_ext = 'H') then {gora}
begin
gotoXY(i, j);
if keypressed=false then delline;
Write('X');
dec(j);
end;
if(x_ext = 'P') then {dol}
begin
gotoXY(i, j);
if keypressed=false then delline;
Write('X');
if keypressed=false then insline;
inc(j);
end;
px:=whereX;
py:=whereY;
until Koniec;
clrscr;
end.
wróć
Lab6
Procedury
Cel ćwiczenia:
Poznanie zastosowań procedur. Struktura procedury. Przekazywanie parametrów do procedur. Obliczanie sum szeregów z wykorzystaniem procedur.
z1. Opracować procedurę, która oblicza sumę dwóch liczb rzeczywistych przekazywanych przez wartości za pomocą argumentów x i y oraz zwraca wynik dodawania argumentów za pośrednictwem zmiennej wyn, będącej argumentem procedury. W programie głównym wywołać funkcję dla danych wejściowych wczytywanych z klawiatury. Przyjąć następujący nagłówek procedury: procedure Suma1(x, y: real; Var wyn: real).
program lab6_z1;
var
x,y,wyn: real;
procedure Suma1(x,y: real; var wyn: real);
begin
wyn:=x+y;
end;
begin
write('Podaj x: '); readln(x);
write('Podaj y: '); readln(y);
Suma1(x,y,wyn);
write(wyn:0:2);
readln;
end.
z2. Opracować procedurę, która zwraca przez zmienne minimum, maksimum oraz średnią arytmetyczną z dwóch liczb rzeczywistych przekazywanych do procedury przez wartości. Nagłówek procedury: procedure MS(x, y: real; Var min, max, sr: real).
program lab6_z2;
var
x,y,min,max,sr: real;
procedure MS(x,y: real; var min,max,sr:real);
begin
{ wyznaczenie min }
min:=x;
if y<=min then min:=y;
{ wyznaczenie max }
max:=x;
if y>=max then max:=y;
{ wyznaczenie sredniej arytmetycznej }
sr:=(x+y)/2;
end;
begin
write('Podaj x: '); readln(x);
write('Podaj y: '); readln(y);
MS(x,y,min,max,sr);
writeln('min = ', min:0:2);
writeln('max = ', max:0:2);
writeln('sr = ', sr:0:2);
readln;
end.
z3.Opracować procedurę, która dla n będącego jej parametrem oblicza sumę:
S(n) = 1 - 1/2 + 1/4 - 1/6 + ... +1/k ,
gdzie k <=n tj. obliczenia należy zakończyć, gdy pojawi się k > n. Na przykład, n = 1; S(1) = 1;
n = 2; S(2) = 1 - 1/2;
n = 3; S(3) = 1 - 1/2;
n = 4; S(4) = 1 - 1/2 + 1/4;
n = 5; S(5) = 1 - 1/2 + 1/4.
Nagłówek procedury: procedure S1(n: integer; Var wyn: real).
program lab6_z3;
var
n: integer;
wyn: real;
procedure S1(n: integer; var wyn: real);
var
k,i: integer;
begin
i:=1;
k:=2;
wyn:=1;
while (k<=n) do
begin
if i mod 2 = 0 then wyn:=wyn+1/real(k) else wyn:=wyn-1/real(k);
k:=k+2;
inc(i);
end;
end;
{Program glowny}
begin
write('Podaj n: '); readln(n);
S1(n,wyn);
writeln('Suma S1=',wyn:0:2);
readln;
end.
z4. Niech x będzie liczbą rzeczywistą wczytywaną z klawiatury. Opracować procedurę, która dodaje kolejne wyrazy szeregu
S(x, k) = 1 + x1 / 1! + x2 / 2! + ... + xk / k! ...
tak długo, aż pojawi się wyraz o numerze k taki, że moduł | xk / k! | < eps, gdzie eps=1E-7 jest stałą w programie (obliczanie ex z dokładnością eps=10-7). Przyjąć, że x oraz eps są argumentami procedury. Zastosować następujący nagłówek procedury: procedure S2(x, eps: real; Var wyn: real);
z5.Opracować procedurę, która wyznacza sumę cyfr liczby naturalnej x. W programie głównym wywołać procedurę dla x wczytywanego z klawiatury. Nagłówek procedury: procedure SumC(x: word; Var suma: word).
program lab6_z5;
var
x, suma: word;
procedure SumC(x: word; var suma: word);
var
l: string;
c,i: integer;
begin
str(x,l); {kowersja do typu napisowego}
for i:=length(l) downto 1 do
begin
c:=ord(l[i]) - ord('0'); {kody ASCII}
suma:=suma+c;
end;
end;
{Program glowny}
begin
write('Podaj liczbe (0..65535) x='); readln(x);
SumC(x,suma);
writeln('suma cyfr liczby ',x,' wynosi ',suma);
readln;
end.
wróć
Lab7
Funkcje
Cel ćwiczenia:
Poznanie zastosowań funkcji. Struktura funkcji. Przekazywanie parametrów do funkcji i zwracanie wyników. Funkcje rekurencyjne. Obliczenia iteracyjne i rekurencyjne.
z1.Opracować funkcję, która oblicza sumę dwóch liczb rzeczywistych przekazywanych przez wartości, za pomocą argumentów x i y, oraz zwraca wynik dodawania argumentów przez wartość funkcji. W programie głównym wywołać funkcję dla danych wejściowych wczytywanych z klawiatury. Przyjąć, że nagłówek funkcji ma następującą postać: function Suma(x, y: real): real.
program lab07z1;
var
x,y: real;
function Suma(x,y:real): real;
begin
Suma:=x + y;
end;
begin
write('Podaj x ='); readln(x);
write('Podaj y ='); readln(y);
writeln(Suma(x,y):0:2));
readln;
end.
z2.Opracować funkcję, która zwraca przez wartość średnią arytmetyczną z dwóch liczb rzeczywistych, przekazywanych do funkcji przez wartości, oraz zwraca minimum i maksimum z tych liczb przez zmienne. Przyjąć, że nagłówek funkcji ma następującą postać: function SMM(x,y: real; Var min,max: real): real.
program lab7z2;
var
x,y,min,max: real;
function SMM(x,y: real; var min,max: real): real;
begin
SMM:=(x + y)/2;
{wyznaczenie min}
min:=x;
if y<=min then min:=y;
{wyznaczenie max}
max:=x;
if y>=max then max:=y;
end;
begin
write('Podaj x ='); readln(x);
write('Podaj y ='); readln(y);
writeln('Funkcja oblicza srednia z liczb x,y');
writeln('SMM = ',SMM(x,y,min,max):0:2);
writeln('Max = ',max:0:2);
writeln('Min = ',min:0:2);
readln;
end.