Laboratorium Podstaw Programowania

Laboratorium Podstaw Programowania 2
ĆWICZENIE 10

Data wykonania

ćwiczenia:

17.05.2012

  1. Wstęp teoretyczny

Programowanie obiektowe - paradygmat programowania, w którym programy definiuje się za pomocą obiektów - elementów łączących stan (czyli dane, nazywane najczęściej polami) i zachowanie (czyli procedury, tu: metody). Obiektowy program komputerowy wyrażony jest jako zbiór takich obiektów, komunikujących się pomiędzy sobą w celu wykonywania zadań. Podejście to różni się od tradycyjnego programowania proceduralnego, gdzie dane i procedury nie są ze sobą bezpośrednio związane. Programowanie obiektowe ma ułatwić pisanie, konserwację i wielokrotne użycie programów lub ich fragmentów. Największym atutem programowania, projektowania oraz analizy obiektowej jest zgodność takiego podejścia z rzeczywistością - mózg ludzki jest w naturalny sposób najlepiej przystosowany do takiego podejścia przy przetwarzaniu informacji.

  1. Programy

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”.

Kod źródłowy:

Unit BIBLIO;

interface

type Zarowka = object

procedure zapalZarowke;

procedure zgasZarowke;

procedure rozjasnijZarowke;

procedure przyciemnijZarowke;

end;

implementation

procedure Zarowka.zapalZarowke;

begin

writeln('Zarowka zapalona')

end;

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 lab10zad1;

uses crt,BIBLIO;

var z:Zarowka;

begin

clrscr;

z.zapalZarowke;

z.zgasZarowke;

z.rozjasnijZarowke;

z.przyciemnijZarowke;

readln;

end.

W tym module definiujemy klase o nzaie zarowka, i metody zapalZarowke, zgasZarowke, rozjasnijZarowke, przyciemnijZarowke.

W głównym programie wczytywany jest modol BIBLIO, a następnie twozona zmienna typu zarowka. Program wykonuje się.

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.

Kod źródłowy:

unit BIBLIO2;

interface

type

Punkt = object

x,y:integer;

procedure ustawX(wspx:integer);

function pobierzX:integer;

procedure ustawY(wspy:integer);

function pobierzY:integer;

procedure wyswietlWspolrzedne(a,b:integer);

end;

implementation

procedure Punkt.ustawX(wspx:integer);

begin

x:=wspx;

end;

function Punkt.pobierzX:integer;

begin

pobierzX:=x;

end;

procedure Punkt.ustawY(wspy:integer);

begin

y:=wspy;

end;

function Punkt.pobierzY:integer;

begin

pobierzY:=y;

end;

procedure Punkt.wyswietlWspolrzedne(a,b:integer);

begin

writeln('X=',a);

writeln('Y=',b);

end;

end.

Program lab10_zad2;

uses

crt,BIBLIO2;

var

z:Punkt;

begin

clrscr;

z.ustawX(5);

z.ustawY(3);

z.wyswietlWspolrzedne(z.pobierzX,z.pobierzY);

readln;

end.

Na początku tworzona jest klasa o nazwie Punkt w której znajdują się metody które pobierają punkty oraz klasa która zwraca te punkty. W programie głównym przekazane są przez parametry do metod współrzędne punktów X i Y a następnie uruchomienie procedury wyświetlającej.

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.

Kod źródłowy:

program lab10zad3;

uses math,crt;

type liczba = object

private

Re: real;

Im: real;

public

procedure ustawRe(a:real);

function pobierzRe:real;

procedure ustawIm(a:real);

function pobierzIm:real;

function sprzezona:liczba;

function obliczModul:real;

function obliczKat:real;

procedure wyswietlLiczbeZesp;

procedure dodaj(b:liczba);

procedure odejmij(b:liczba);

procedure mnoz(b:liczba);

procedure dziel(b:liczba);

end;

procedure liczba.ustawRe(a:real);

begin

Re:=a;

end;

function liczba.pobierzRe:real;

begin

pobierzRe:=Re;

end;

procedure liczba.ustawIm(a:real);

begin

Im:=a;

end;

function liczba.pobierzIm:real;

begin

pobierzIm:=Im;

end;

function liczba.sprzezona:liczba;

var a:liczba;

begin

a.Re:=Re;

a.Im:=-Im;

sprzezona:=a;

end;

function liczba.obliczModul:real;

begin

obliczModul:=sqrt((Re*Re)+(Im*Im));

end;

function liczba.obliczKat:real;

begin

if obliczModul<>0 then

obliczKat:=radtodeg(arcsin(Im / obliczModul))

else writeln('Dzielenie przez zero!');

end;

procedure liczba.wyswietlLiczbeZesp;

begin

{wypisywanie liczby}

if Re<>0 then write(Re:1:2);

if Im>0 then writeln(' + j * ',Im:1:2);

if Im=0 then writeln();

if Im<0 then writeln(' - j * ',-Im:1:2);

end;

procedure liczba.dodaj(b:liczba);

begin

Re:=Re+b.Re;

Im:=Im+b.Im;

end;

procedure liczba.odejmij(b:liczba);

begin

Re:=Re-b.Re;

Im:=Im-b.Im;

end;

procedure liczba.mnoz(b:liczba);

begin

Re:=Re*b.Re;

Im:=Im*b.Re;

end;

procedure liczba.dziel(b:liczba);

begin

if (b.Re<>0) and (b.Im<>0) then begin

Re:=Re / b.Re;

Im:=Im / b.Im;

end else writeln('Dzielenie przez zero!');

end;

procedure MENU;

var a,b:liczba; tmp:real;

begin

clrscr;

{wczytywanie Im i Re obu liczb}

write('Podaj czesc rzeczywista pierwszej liczby: ');

readln(tmp); a.ustawRe(tmp);

write('Podaj czesc urojana pierwszej liczby: ');

readln(tmp); a.ustawIm(tmp);

write('Podaj czesc rzeczywista drugiej liczby: ');

readln(tmp); b.ustawRe(tmp);

write('Podaj czesc urojona drugiej liczby: ');

readln(tmp); b.ustawIm(tmp);

repeat {menu}

clrscr;

writeln(' MENU ');

writeln('1. Wyswietlanie liczby zespolonej ');

writeln('2. Obliczanie liczby sprezonej ');

writeln('3. Obliczanie modulu liczby zespolonej');

writeln('4. Obliczanie kata liczby zespolonej ');

writeln('5. Dodawanie liczb zespolonych ');

writeln('6. Odejmowanie liczb zespolonych ');

writeln('7. Mnozenie liczb zespolonych ');

writeln('8. Dzielenie liczb zespolonych ');

writeln('0. Wyjscie ');

write('Wybierz: ');

readln(tmp);

case (trunc(tmp)) of

1: begin {dla wyboru 1 wyswietlenie obu liczb}

clrscr;

write('Pierwsza liczba zespolona: '); a.wyswietlLiczbeZesp;

write('Druga liczba zespolona: '); b.wyswietlLiczbeZesp;

readln;

end;

2: begin

clrscr;

write('Liczba sprzezona do liczby: '); a.wyswietlLiczbeZesp;

write('to: '); a.sprzezona.wyswietlLiczbeZesp;

write('Liczba sprzezona do liczby: '); b.wyswietlLiczbeZesp;

write('to: '); b.sprzezona.wyswietlLiczbeZesp;

readln;

end;

3: begin

clrscr;

write('Modul z liczby: '); a.wyswietlLiczbeZesp;

writeln('to: ',a.obliczModul:1:2);

write('Modul z liczby: '); b.wyswietlLiczbeZesp;

writeln('to: ',b.obliczModul:1:2);

readln;

end;

4: begin

clrscr;

write('Kat liczby zespolonej: '); a.wyswietlLiczbeZesp;

writeln('do OX wynosi: ',a.obliczKat:1:2);

write('Kat liczby zespolonej: '); b.wyswietlLiczbeZesp;

writeln('do OX wynosi: ',b.obliczKat:1:2);

readln;

end;

5: begin

clrscr;

write('Pierwsza liczba zespolona: '); a.wyswietlLiczbeZesp;

write('Druga liczba zespolona: '); b.wyswietlLiczbeZesp;

writeln;

write('Wynik dodawania: '); a.dodaj(b); a.wyswietlLiczbeZesp;

readln;

end;

6: begin

clrscr;

write('Pierwsza liczba zespolona: '); a.wyswietlLiczbeZesp;

write('Druga liczba zespolona :'); b.wyswietlLiczbeZesp;

writeln;

write('Wynik odejmowania: '); a.odejmij(b); a.wyswietlLiczbeZesp;

readln;

end;

7: begin

clrscr;

write('Pierwsza liczba zespolona: '); a.wyswietlLiczbeZesp;

write('Druga liczba zespolona :'); b.wyswietlLiczbeZesp;

writeln;

write('Wynik mnozenia: '); a.mnoz(b); a.wyswietlLiczbeZesp;

readln;

end;

8: begin

clrscr;

write('Pierwsza liczba zespolona: '); a.wyswietlLiczbeZesp;

write('Druga liczba zespolona :'); b.wyswietlLiczbeZesp;

writeln;

write('Wynik dzielenia: '); a.dziel(b); a.wyswietlLiczbeZesp;

readln;

end;

0: halt;

end;

until (0<>0); {program bedzie sie wykonywal w nieskonczonosc, chyba ze uzytkownik wybierze 0}

end;

BEGIN

MENU;

readln;

END.

Opis programu:

procedure liczba.ustawRe – procedura odpowiada za przypisanie Re wartosci podanej jako argument.

function liczba.pobierzRe – odpowiadza za wypisanie liczby rzeczywistej (Re).

procedure liczba.ustawIm – procedura odpowiada za przypisanie Im wartosci podanej jako argument.

function liczba.pobierzIm – odpowiada za wypisanie liczby urojonej (Im).

function liczba.sprzezona – ta funkcja zwraca liczbe sprzężona.

function liczba.obliczModul – ta funkcja zwraca modulo

procedure liczba.wyswietlLiczbeZesp – ta procedura odpowiada za wyświetlanie liczby zespolonej.

procedure liczba.dodaj – procedura dodaje dwie liczby zepolone

procedure liczba.odejmij – procedura odejmuje liczby zespolone

procedure liczba.mnoz – procedura mnozy liczby zespolone

procedure liczba.dziel – procedura dzieli liczby zespolone

procedurę MENU – W tej procedurze zawarte jest menu programu. Jest ona komunikatorem miedzy użytkownikiem a programem. Przy pomocy instrukcji case wywoływane są poszczególne opcje programu.

  1. Wnioski

Wykonane na zajęciach laboratoryjnych programy pozwoliły nam bliżej zapoznać się z programowaniem obiektowym. Zadania wykonywane przy pomocy programowania obiektowego różnią się od zwykłych zadań.


Wyszukiwarka