Laboratorium Podstaw Programowania 2 |
---|
ĆWICZENIE 10 |
Data wykonania ćwiczenia: 24.05.2012 |
WSTĘP:
Programowanie strukturalne w odróżnieniu od tego, której używaliśmy posiada inną organizacje oraz pozwala na zredukowanie używanych zmiennych w naszym programie. A co więcej pozwala na tworzenie bardziej wydajnych oraz efektywnych programów np. w naszym kodzie możemy używać przycisków okien oraz innych tego typu elementów.
Zadanie 1.
Utwórz klasę Zarowka. Klasa powinna zawierać metody:
zapalZarowke(), która będzie wyświetlała napis: „Żarówka zapalona”;
zgasZarowke(),która będzie wyświetlała napis: „Żarówka zgaszona”;
rozjasnijZarowke()która będzie wyświetlała napis: „Żarówka rozjaśniona”;
przyciemnijZarowke()która będzie wyświetlała napis: „Żarówka przyciemniona”.
unit elektr;
W module o nazwie elektr utworzenie klasy o nazwie Zarowka oraz klasy zgodnie z treścią polecenia. zapalZarowk, zgasZarowke, rozjasnijZarowke oraz przyciemnijZarowke |
interface
uses crt;
type
Zarowka = object
procedure zapalZarowke;
procedure zgasZarowke;
procedure rozjasnijZarowke;
procedure przyciemnijZarowke;
end;
implementation
procedure zarowka.zapalZarowke;
begin
writeln('Zarowka zapalona');
end;
Utworzenie procedur, które po uruchomieniu będą kolejno wyświetlać : Zarowka zapalona, Zarowka zgaszona, Zarowka rozjasniona oraz Zarowka przyciemniona. Główny program wczytuje moduł z innego pliku oraz deklaruje zmienna c typu Zarowka Oraz uruchamia metody. |
procedure zarowka.zgasZarowke;
begin
writeln('Zarowka zgaszona');
end;
procedure zarowka.rozjasnijZarowke;
begin
writeln('Zarowka rozjasniona');
end;
procedure zarowka.przyciemnijZarowke;
begin
writeln('Zarowka przyciemniona');
end;
end.
program zarowa;
uses crt,zar;
var c:Zarowka;
begin
clrscr;
c.zapalZarowke;
c.zgasZarowke;
c.rozjasnijZarowke;
c.przyciemnijZarowke;
readln;
end.
Wynik działania:
Zadanie 2.
Utwórz klasę Punkt, która będzie zawierać współrzędne punktu (x, y). Klasa ta powinna zawierać metody:
ustawX(), która będzie ustawiała wartość współrzędnej punktu X;
pobierzX(), która będzie zwracała przechowywaną wartość współrzędnej punktu X;
ustawY(), która będzie ustawiała wartość współrzędnej punktu Y;
pobierzY(), która będzie zwracała przechowywaną wartość współrzędnej punktu Y;
wyswietlWspolrzędne(), która będzie wyświetlać współrzędne punktu X i Y.
Utworzenie klasy o nazwie punkty która zawiera klasy potrzebne do pobrania oraz Procedury wyswietlWspolrzedne, która wyświetli punkty. |
unit pkt;
interface
uses crt;
type
punkt = object
wsp_x,wsp_y:byte;
function pobierzX:byte;
procedure ustawX(w:byte);
function pobierzY:byte;
procedure ustawY(w:byte);
procedure wyswietlWspolrzedne(x,y:byte);
end;
implementation
W tym miejscu znajdują się procedury, które ustawiają pobrane wcześniej pobrane wsółrzędne x oraz y o nazwach Ustaw X oraz ustaw Y. |
procedure punkt.ustawX(w:byte);
begin
wsp_x:=w;
end;
procedure punkt.ustawY(w:byte);
begin
wsp_y:=w;
end;
function punkt.pobierzX:byte;
begin
pobierzX:=wsp_x;
end;
function punkt.pobierzY:byte;
begin
pobierzY:=wsp_y;
end;
procedure punkt.wyswietlWspolrzedne(x,y:byte);
begin
writeln(x,',',y);
end;
end.
W głównym programie następuje wczytanie modułu o nazwie pkt oraz utworzenie zmiennej c typu punkty. Następnie odczytanie od użytkownika punktów x oraz y a następnie przekazanie tych zmiennych do procedur ustaw. Na samym końcu następuje wywołanie procedury wyswietlWspolrzedne i przekazanie jej przez parametry funkcji które zwracają wartości współrzędnych. |
program zad2;
uses crt,pkt;
var c:Punkt;
xx,yy:integer;
begin
clrscr;
writeln('podaj x');
readln(xx);
writeln('podaj y');
readln(yy);
c.ustawX(xx);
c.ustawY(yy);
writeln;
write('wspolrzedne punktu to: ');
c.wyswietlWspolrzedne(c.pobierzX,c.pobierzY);
readln;
end.
Wynik działania:
Zadanie 3.
Utwórz klasę, której obiekt będzie mógł wykonywać następujące operacje na liczbach zespolonych :
1. Wyświetlanie liczby zespolonej w postaci a+jb;
2. Obliczanie liczby sprzężonej do danej liczby zespolonej;
3. Obliczanie modułu liczby zespolonej;
4. Obliczanie kąta liczby zespolonej;
5. Dodawanie do jednej liczby zespolonej drugiej liczby zespolonej. Wynik należy zapisać w obiekcie wywołującym metodę np.: a.dodaj(b) wynik w a.
6. Odejmowanie od jednej liczby zespolonej drugiej liczby zespolonej. Wynik należy zapisać w obiekcie wywołującym metodę np.: a.odejmij(b) wynik w a.
7. Mnożenie jednej liczby zespolonej przez drugą liczbę zespoloną. Wynik należy zapisać w obiekcie wywołującym metodę np.: a.mnoz(b) wynik w a.
8. Dzielenie jednej liczby zespolonej przez drugą liczbę zespoloną. Wynik należy zapisać w obiekcie wywołującym metodę np.: a.dziel(b) wynik w a.
unit modzes;
interface
uses crt;
type
Utworzenie klasy o nazwie zesp Oraz odpowiednich metod potrzebnych do dalszych operacji. |
zesp = object
re,im:real;
function pobierzRe:real;
procedure ustawRe(rez:real);
function pobierzIm:real;
procedure ustawIm(imz:real);
procedure wyswietlLiczbeZesp(rez,imz:real);
procedure sprzezona;
function obliczModul:real;
function obliczKat:real;
procedure dodaj(b:zesp);
procedure odejmij(b:zesp);
procedure mnoz(b:zesp);
procedure dziel(b:zesp);
end;
implementation
procedure zesp.ustawRe(rez:real);
begin
re:=rez;
end;
Na samym początku znajdują się procedury pobierające liczby rzeczywiste oraz jednostki urojone. |
procedure zesp.ustawIm(imz:real);
begin
im:=imz;
end;
function zesp.pobierzRe:real;
begin
pobierzRe:=Re;
end;
function zesp.pobierzIm:real;
begin
pobierzIm:=Im;
end;
procedure zesp.wyswietlLiczbeZesp(rez,imz:real);
begin
if imz=1 then
writeln('Liczba zespolona to ',rez:3:4,'+i');
if imz=(-1) then
writeln('Liczba zespolona to ',rez:3:4,'-i');
if ((imz>0)and(imz<>1)) then
writeln('Liczba zespolona to ',rez:3:4,'+',imz:3:4,'i');
if ((imz<0)and(imz<>-1)) then
writeln('Liczba zespolona to ',rez:3:4,imz:3:4,'i');
if imz=0 then
writeln('Liczba zespolona to ',rez:3:4);
end;
procedure zesp.sprzezona;
begin
zesp.ustawIm(zesp.pobierzIm*(-1));
end;
function zesp.obliczModul:real;
begin
obliczModul:=sqrt(zesp.pobierzRe*zesp.pobierzRe+zesp.pobierzIm*zesp.pobierzIm);
end;
W tym miejscu następuje obliczanie modułu z liczby zespolonej, liczby sprzężonej, dodawanie oraz dodawanie, odejmowanie, mnożenie i dzielenie. |
function zesp.obliczKat:real;
var x,kat:real;
begin
x:=arctan(zesp.pobierzIm/zesp.pobierzRe);
kat:=(x*180)/Pi;
obliczKat:=kat;
end;
procedure zesp.dodaj(b:zesp);
begin
zesp.ustawRe(zesp.pobierzRe+b.pobierzRe);
zesp.ustawIm(zesp.pobierzIm+b.pobierzIm);
end;
procedure zesp.odejmij(b:zesp);
begin
zesp.ustawRe(zesp.pobierzRe-b.pobierzRe);
zesp.ustawIm(zesp.pobierzIm-b.pobierzIm);
end;
procedure zesp.mnoz(b:zesp);
var aaa:real;
begin
aaa:=zesp.pobierzRe;
zesp.ustawRe(zesp.pobierzRe*b.pobierzRe-zesp.pobierzIm*b.pobierzIm);
zesp.ustawIm(aaa*b.pobierzIm+b.pobierzRe*zesp.pobierzIm);
end;
procedure zesp.dziel(b:zesp);
var x,y,z:zesp;
begin
x.ustawRe(zesp.pobierzRe);
x.ustawIm(zesp.pobierzIm);
y.ustawRe(b.pobierzRe);
y.ustawIm(b.pobierzIm);
b.sprzezona;
zesp.mnoz(b);
y.mnoz(b);
z.ustawRe(zesp.pobierzRe);
z.ustawIm(zesp.pobierzIm);
zesp.ustawRe(z.pobierzRe/y.pobierzRe);
zesp.ustawIm(z.pobierzIm/y.pobierzRe);
end;
end.
program modzead;
uses crt,modzes;
var
a,b:zesp;
r1,r2,im1,im2:real;
modul:real;
l:byte;
begin
clrscr;
writeln('Pierwsza liczba zespolona:');
write('------- Podaj czesc rzeczywista: ');
readln(r1);
write('------- Podaj czesc urojona: ');
readln(im1);
a.ustawRe(r1);
a.ustawIm(im1);
writeln;
writeln;
a.wyswietlLiczbeZesp(a.pobierzRe,a.pobierzIm);
writeln;
writeln('Druga liczba zespolona:');
write('------- Podaj czesc rzeczywista: ');
readln(r2);
write('------- Podaj czesc urojona: ');
readln(im2);
b.ustawRe(r2);
Główny program odczytuje od użytkownika liczby do obliczenia następnie wyświetla MENU po czym instrukcja case uruchamia odpowiednie procedury. |
b.ustawIm(im2);
writeln;
writeln;
b.wyswietlLiczbeZesp(b.pobierzRe,b.pobierzIm);
writeln;
modul:=a.obliczModul;
readln;
l:=11;
while l<>0 do
begin
clrscr;
modul:=a.obliczModul;
writeln(' (1) Wyswietl liczby zespolone');
writeln(' (2) Oblicz liczbe sprezona');
writeln(' (3) Oblicz modul liczby zespolonej');
writeln(' (4) Oblicz kat liczby zespolonej');
writeln(' (5) Dodaj');
writeln(' (6) Odejmij');
writeln(' (7) Pomnoz');
writeln(' (8) Podziel');
writeln(' (0) ZAKONCZ');
readln(l);
case l of
1:
begin
clrscr;
writeln('Pierwsza liczba zespolona:');
a.wyswietlLiczbeZesp(a.pobierzRe,a.pobierzIm);
writeln;
writeln('Druga liczba zespolona:');
b.wyswietlLiczbeZesp(b.pobierzRe,b.pobierzIm);
writeln;
readln;
end;
2:
begin
clrscr;
a.wyswietlLiczbeZesp(a.pobierzRe,a.pobierzIm);
writeln;
a.sprzezona;
write('Sprzezona ');
a.wyswietlLiczbeZesp(a.pobierzRe,a.pobierzIm);
writeln;
readln;
end;
3:
begin
clrscr;
a.wyswietlLiczbeZesp(a.pobierzRe,a.pobierzIm);
writeln;
writeln('|z|=', a.obliczModul:4:6);
writeln;
readln;
end;
4:
begin
clrscr;
a.wyswietlLiczbeZesp(a.pobierzRe,a.pobierzIm);
writeln;
writeln('KĄt a=', a.obliczKat:4:6);
writeln;
readln;
end;
5:
begin
clrscr;
writeln('Pierwsza liczba zespolona:');
a.wyswietlLiczbeZesp(a.pobierzRe,a.pobierzIm);
writeln;
writeln('Druga liczba zespolona:');
b.wyswietlLiczbeZesp(b.pobierzRe,b.pobierzIm);
writeln;
a.dodaj(b);
a.wyswietlLiczbeZesp(a.pobierzRe,a.pobierzIm);
readln;
end;
6:
begin
clrscr;
writeln('Pierwsza liczba zespolona:');
a.wyswietlLiczbeZesp(a.pobierzRe,a.pobierzIm);
writeln;
writeln('Druga liczba zespolona:');
b.wyswietlLiczbeZesp(b.pobierzRe,b.pobierzIm);
writeln;
a.odejmij(b);
a.wyswietlLiczbeZesp(a.pobierzRe,a.pobierzIm);
readln;
end;
7:
begin
clrscr;
writeln('Pierwsza liczba zespolona:');
a.wyswietlLiczbeZesp(a.pobierzRe,a.pobierzIm);
writeln;
writeln('Druga liczba zespolona:');
b.wyswietlLiczbeZesp(b.pobierzRe,b.pobierzIm);
writeln;
a.mnoz(b);
a.wyswietlLiczbeZesp(a.pobierzRe,a.pobierzIm);
readln;
end;
8:
begin
begin
clrscr;
writeln('Pierwsza liczba zespolona:');
a.wyswietlLiczbeZesp(a.pobierzRe,a.pobierzIm);
writeln;
writeln('Druga liczba zespolona:');
b.wyswietlLiczbeZesp(b.pobierzRe,b.pobierzIm);
writeln;
a.dziel(b);
a.wyswietlLiczbeZesp(a.pobierzRe,a.pobierzIm);
readln;
end;
end;
end;
end;
readln;
end.
WYNIK DZIAŁANIA
PODSUMOWANIE:
Programowanie obiektowe pozwala bardziej zbliżyć się do przestrzeni rozwiązywanego
problemu, gdyż operujemy pojęciami właściwymi temu problemowi. Możemy np.: stworzyć obiekt przechowujący inne obiekty, które przechowują informację
o studentach i wysłać do niego komunikat: „znajdź studenta o podanym nazwisku”. Po nabraniu pewnej wprawy kod programu obiektowego staje się bardziej czytelny
i łatwy do zrozumienia niż kod programu strukturalnego.