06-10, pascal


Pascal

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.



Wyszukiwarka

Podobne podstrony:
06-10, pascal w2, WSTĘP
06-10, pascal w3, WSTĘP
2011 06 10 LZPN test okregowka 07062011 odp a (2)
Informatyka zadanie 14 06 10 Tomasiewicz ćw10
06-10, schematy-blokowe
2004 06 10 1101
loveparade 2010 anlage 26 aktenvermerk abnahme sv 25 06 10
2011 06 10 LZPN test iv liga 07062011 odp a (2)
023 HISTORIA SZTUKI WCZESNOCHRZEŚCIJAŃSKIEJ I BIZANTYJSKIEJ, WYKŁAD, 1 06 10
Informatyka zadanie 14 06 10 Tomasiewicz ćw11,12 Etykiety?resowe
Wybrane pytania z testow polityka spol zdnia 06 10
Informatyka zadanie 14 06 10 Nieznany
Podatki dochodowe PODATEK DOCHODOWY, WYKŁAD 1 (06.10.2013)
BANKOWOŚĆ WYKŁAD 1 (06 10 2012)
2011 06 10 LZPN test a b klasa 08062011 odp a (2)
2011.06.10 - LZPN, test niesklasyfikowani 09062011 odp
Analiza egzamin podstawowy 23-06-10
Podatki dochodowe, PODATEK DOCHODOWY WYKŁAD 1 (06 10 2013)

więcej podobnych podstron