INFORMATYKA. Studia Niestacjonarne Elektrotechnika Wydział Elektrotechniki i Informatyki. dr inż. Michał Łanczont

Podobne dokumenty
PLIKI TEKSTOWE F C E 30 0D 0A 42 6F 72 6C 61 6E 64 1A T U R B O _ P A S C A L _ 7. 0

2.Sprawdzanie czy podana liczba naturalna jest pierwsza Liczba pierwsza to liczba podzielna tylko przez 1 i przez siebie.

OPERACJE NA PLIKACH. Podstawowe pojęcia:

Informatyka 1. Przetwarzanie tekstów

Delphi Laboratorium 3

Język programowania PASCAL

Zakres wykładu INFORMATYKA. dr inż. Michał Łanczont Wydział Elektrotechniki i Informatyki p. E419 tel

Programowanie w Turbo Pascal

Wrocław, dn. 19 kwietnia 2006 roku. Anna Kaleta Piotr Chojnacki IV rok, informatyka chemiczna Liceum Ogólnokształcące nr 10 we Wrocławiu

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

Wykład PASCAL - Pliki tekstowe

Procedury i funkcje. Przykład programu z procedurą. Definicja. Cechy procedury

Pliki. Operacje na plikach w Pascalu

Przykładowerozwiązania.

PLIKI. Składnia deklaracji zmiennej plikowej: file of <typ>

INSTRUKCJA PUSTA. Nie składa się z żadnych znaków i symboli, niczego nie robi. for i := 1 to 10 do {tu nic nie ma};

Instrukcje podsumowanie. Proste: - przypisania - wejścia-wyjścia (read, readln, write, writeln) - pusta - po prostu ; (średnik) Strukturalne:

Pliki. Ze względu na typ zawartych w nich danych rozróżnia się trzy podstawowe rodzaje plików:

Procedury i funkcje - powtórzenie i uzupełnienia. Przykład funkcji potęgowanie przy wykładniku naturalnym

Informatyka 1. Wyrażenia i instrukcje cd., ręczna symulacja, operacje wejścia/wyjścia

Smarty PHP. Leksykon kieszonkowy

Lekcja 6: Pascal. Procedura i funkcja

Pascal. 1. Pliki tekstowe. Przykład 1.1. Zapis do pliku tekstowego

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Wstęp do programowania. Procedury i funkcje. Piotr Chrząstowski-Wachtel

Podprogramy. Procedury

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Podstawy programowania 2. Temat: Wprowadzenie do wskaźników. Przygotował: mgr inż. Tomasz Michno

Podstawy programowania skrót z wykładów:

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Wszystkie zmienne typu plikowego, z wyjątkiem Output i Input muszą być zadeklarowane w sekcji deklaracji programu, który z nich korzysta.

Podstawy programowania

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

Podstawy programowania. Wykład PASCAL. Zmienne wskaźnikowe i dynamiczne. dr Artur Bartoszewski - Podstawy prograowania, sem.

20. Pascal i łączenie podprogramów Pascala z programem napisanym w C

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Programowanie modułowe

Podstawy Programowania semestr drugi. Wykład czternasty

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

INSTRUKCJA ITERACYJNA REPEAT. repeat Instrukcja_1; Instrukcja_2; {... } Instrukcja_N; until wyr ; INSTRUKCJA ITERACYJNA WHILE

Wstęp do programowania. Różne różności

PASCAL. Etapy pisania programu. Analiza potrzeb i wymagań (treści zadania) Opracowanie algorytmu Kodowanie Kompilacja Testowanie Stosowanie

Wykład 4. Tablice. Pliki

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.

Pascal - wprowadzenie

Wykład 03 JavaScript. Michał Drabik

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja cz. 1

Podstawy programowania

Język programowania DELPHI / Andrzej Marciniak. Poznań, Spis treści

Algorytmy i struktury danych

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Wprowadzenie Tablica jednowymiarowa Tablice wielowymiarowe Algorytmy Rekordy Pliki Zadania Bibliografia

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Podstawy wykorzystania bibliotek DLL w skryptach oprogramowania InTouch

P R OGRA M OW A N I E KOMPUTERÓW Ćwiczenia laboratoryjne. TEMAT 8: Moduły standardowe

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 1. Programowanie komputerowe

INFORMATYKA Studia Niestacjonarne Elektrotechnika

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Ćwiczenie 2 Wczytywanie i zapisywanie do plików tekstowych

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Wprowadzenie komentarzy do programu

Wykład III PASCAL - iteracja cz, 2, - liczby losowe, - tablice

Informatyka 2015/16 wykład 9. Pliki Sterowanie przebiegiem programu cz. 2. Dr inż. Witold Nocoń (p. 230)

Wprowadzenie do programowania w języku C

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

Język PL/SQL Procedury i funkcje składowane

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

Zapis algorytmów: schematy blokowe i pseudokod 1

TEMAT: Podejmowanie decyzji w programie instrukcja warunkowa (IF).

Bloki anonimowe w PL/SQL

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

3. Podstawowe funkcje mamematyczne. ZAPOZNAĆ SIĘ!!!

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Delphi podstawy programowania. Środowisko Delphi

APROKSYMACJA. Rys. 1. Funkcja aproksymująca zbiór punktów pomiarowych (1) (2) (3) (4) (5) (6) (7) ... Zmienna y

Laboratorium 10 Temat: Zaawansowane jednostki testowe. Operacje na plikach. Funkcje.

PODSTAWY PROGRAMOWANIA

WIADOMOŚCI WSTĘPNE WPROWADZENIE DO JĘZYKA TURBO PASCAL. Klawisze skrótów. {to jest właśnie komentarz, moŝna tu umieścić dowolny opis}

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Wykład 5: Klasy cz. 3

Tworzenie projektu asemblerowego dla środowiska Visual Studio 2008.

Tworzenie własnych komponentów

Zasady programowania Dokumentacja

Materiały do laboratorium MS ACCESS BASIC

Funkcje w PL/SQL Funkcja to nazwany blok języka PL/SQL. Jest przechowywana w bazie i musi zwracać wynik. Z reguły, funkcji utworzonych w PL/SQL-u

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

Delphi podstawy programowania. Pliki INI

Instrukcja do ćwiczenia P4 Analiza semantyczna i generowanie kodu Język: Ada

Oracle PL/SQL. Paweł Rajba.

Delphi podstawy programowania. Rejestr systemowy

Języki skryptowe w programie Plans

Procedury i funkcje składowane

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

Delphi 7 + Indy 10 Przykłady prostych aplikacji sieciowych

KURS PASCAL A. 1.Wprowadzenie

Transkrypt:

INFORMATYKA Studia Niestacjonarne Elektrotechnika Wydział Elektrotechniki i Informatyki dr inż. Michał Łanczont Wydział Elektrotechniki i Informatyki p. E419 tel. 81-538-42-93 m.lanczont@pollub.pl http://lanczont.pollub.pl Zakres wykładu Procedury Funkcje Biblioteki DLL Dynamiczne i statyczne korzystanie z bibliotek DLL Zapis i Odczyt danych z i do pliku 2 1

Programowanie proceduralne Polega na wydzieleniu powtarzających się fragmentów kodu programu do zewnętrznych podprogramów zwanych procedurami lub funkcjami Rozwiązanie to sprawia że kod programu zostaje w sposób znaczący skrócony, staje się przejrzystszy Wydzielone fragmenty kodu są we właściwych miejscach wywoływane jako procedury lub funkcje 3 Procedury Procedury są wydzielonymi fragmentami kodu programu głównego wykonującymi określone zadanie wyświetlenie tekstu na ekranie, rysunku, zapisanie danych do pliku, wysłanie danych na port itp. Procedura nie może zwracać żadnej wartości Nazwa procedury powinna być unikalna 4 2

Procedury Procedury deklaruje się w obszarze nagłówkowym programu Zastosowanie procedur powoduje że w programie mogą wystąpić zmienne globalne (zdefiniowane dla całego programu) oraz lokalne, wewnątrz procedury i tylko w niej występują 5 Procedury Zmienna o tej samej nazwie może występować jako lokalna jak i globalna program test; var x:string; procedure foo; var x:string; x:='ala'; writeln(x); x:='ola'; foo; writeln(x); readln; end. 6 3

Procedury program test; var x:string; procedure foo; writeln(x); x:='ala'; writeln(x); x:='ola'; foo; writeln(x); readln; end. 7 Funkcje Funkcje spełniają identyczną rolę jak procedury W odróżnieniu od procedury funkcje zwracają jakąś wartość jako efekt działania Funkcje jako zmiennej wyjściowej używają zmiennej o nazwie funkcji Przy wybraniu opcji obiektowej kompilatora {$mode objfpc} można stosować zmienną niejawną Result jako zmienną wyjściową funkcji 8 4

Funkcje program test; {$mode objfpc} var x:string; function imie:string; write('podaj swoje imie '); readln(result); x:=imie; writeln('twoje imię to: ',x); readln; end. 9 Funkcje program test; var x:string; function imie:string; write('podaj swoje imie '); readln(imie); x:=imie; writeln('twoje imie to: ',x); readln; end. 10 5

Procedury i funkcje Mogą mieć kilka, jeden lub nie mieć żadnych parametrów wejściowych Parametrem wejściowym może być zmienna, tablica lub zbiór W przypadku funkcji wielkość wyjściowa może być zmienną, tablica lub zbiorem Możliwe jest zdefiniowanie wartości domyślnych parametrów, w takim wypadku parametr domyślny nie musi być podawany jako wielkość wejściowa 11 Procedury i funkcje Deklaracja funkcji bez parametrów wejściowych: Function GetName:string; Deklaracja procedury z jednym parametrem wejściowym: Procedure SetName(Name:string); Parametry wejściowe tego samego typu mogą być grupowane: Function SetName(FN:string, SN:string; age: byte): string; Function SetName( FN,SN:string; age: byte): string; 12 6

Procedury i funkcje Tablica może być parametrem wejściowym funkcji i procedury, jak również wielkością zwracaną przez funkcję Procedure ArrayProc(A: array of string); Function ArrayFunc: array of string; Parametrami mogą być także zmienne zdefiniowane jako type Type TBar = array of string Function ArrayFunc: Tbar; 13 Procedury i funkcje W definicji funkcji lub procedury nie można przekazywać ograniczeń rozmiaru Procedure Foo(S: String[20]); Możliwe to jest poprzez zdefiniowanie nowego typu zmiennej: Type MyString = string[20]; Procedure Foo(S: MyString); 14 7

Procedury i funkcje Można ustawić domyślną wartość prarametru Procedure SetName(FN: string; SN: string= Nieznany ; age:byte=25); Wywołanie funkcji lub procedury z domyślnymi parametrami realizowane jest poprzez ich pominięcie SetName( Adam ); Możliwe jest zastąpienie wartości domyślnych podanymi SetName( Adam, Nowak,30); 15 Procedury i funkcje Przy definiowaniu wartości domyślnych nie można grupować zmienneych Procedure SetName(FN,SN: string= Nieznane ; age: byte=25); Parametry nie posiadające wartości domyślnych muszą być zadeklarowane jako pierwsze Function Funk(X:integer = 0; Y:integer):integer; 16 8

Procedury i funkcje Parametr wejściowy zdefiniowany jako stała nie może być zmieniony wewnątrz procedury Procedure show(const Message: string); Procedury i funkcje mogą być zagnieżdżane Pamiętać należy aby procedura lub funkcja zagnieżdżona zdefiniowana została przez słowem funkcji lub procedury nadrzędnej. 17 Procedury i funkcje Przekazywanie parametrów przez referencję program test; procedure setval(var mess:string); mess:='ala ma kota'; var s: string; s:='ola ma kota'; writeln(s); setval(s); writeln(s); readln; end. bez var z var Polega na umożliwieniu zmiany wartości parametry wewnątrz procedury lub funkcji. Jest to możliwe wtedy gdy deklarację parametry poprzedzi się słowem kluczowym var. 18 9

Program wyznacza przybliżenie liczby Pi metodą Monte-Carlo Podawany jest promień okręgu i liczba prób r 19 program PI; {$mode objfpc} uses crt, math; var Funkcja r,n: integer; p:single; clrscr; randomize; writeln('program wyznacza przybliżenie liczby Pi metodą Monte-Carlo'); write('podaj wymiar obszaru losowania, promień okręgu R='); readln(r); write('podaj liczbę prób do wyznaczaniu liczby Pi, N='); readln(n); p:=pi(n,r); writeln('przybliżenie liczby Pi=',p:11:10); readln; end. 20 10

function pi(t,k:integer):single; var i,x,y,m:integer; d:single; r m:=0; for i:=1 to t do x:=random(2*k+1); y:=random(2*k+1); d:=power((power(x-k,2))+(power(y-k,2)),0.5); if d<k then m:=m+1; Result:=4*m/t; 21 R 10 100 1000 1000 1000 1000 5000 N 10000 1000 1000 10000 100000 10000000 10000000 Pi 2,7767 3,1520 3,1440 3,1220 3,1384 3,1377 3,1418 22 11

Zmodyfikować program aby sam poszukiwał parametrów funkcji pi() w poszukiwaniu najdokładniejszego przybliżenia liczby Pi Wzorcowa wartość Pi= 3.14159265 Modyfikacja ma polegać optymalizacji poszukiwania parametrów funkcji pi() Liczba Pi wyznaczana jest za pomocą funkcji pi() z poprzedniego przykładu 23 program PI; {$mode objfpc} uses crt, math; var d:single; r:integer; clrscr; randomize; Funkcja i procedura writeln('program wyznacza przyblizenie liczby Pi metoda Monte-Carlo'); write('podaj wymiar obszaru losowania, promien okregu R='); readln(r); write('podaj oczekiwana dokładnosc wyznaczenia liczby Pi, n(%)='); readln(d); optymal(d,r); readln; end. 24 12

procedure optymal(a:single;b:integer); var i:longword; pw,p,n: single; i:=b; pw:=4*arctan(1); repeat i:=i*2; p:=pi(i,b); n:=(pw-p)/pw*100; writeln('pi=', p:5:4,' dokladnosc n(%)=',abs(n):5:4,' liczba prob N=', i); until (abs(n)<=a); writeln('wyznaczono przyblizenie liczby PI=', p:5:4,', po wykonaniu ', i,' prob.'); 25 26 13

27 Biblioteki DLL DLL to skrót do Dynamic Link Library DLL jest plikiem z skompilowanym kodem źródłowym który może być wykorzystany w połączeniu z aplikacją W bibliotekach DLL zazwyczaj umieszcza się procedury i funkcje wydzielano z głównego kodu aplikacji Wydzielone w ten sposób funkcje i procedury mogą być wykorzystywane przez różne programy 28 14

Biblioteki DLL Kod źródłowy biblioteki DLL tworzy się analogicznie jak zwykłego programu Kod biblioteki rozpoczyna się od słowa kluczowego library Funkcje i procedury zdefiniowane w bibliotece powinny być opatrzone odpowiednią dyrektywą, najczęściej stdcall procedure nazwa(x:single);stdcall; 29 Biblioteki DLL Procedury i funkcje które mają być dostępne poza biblioteką muszą zostać wskazane za pomocą instrukcji exports; exports nazwa name Moja_funkcja, nazwa index 1; 30 15

Biblioteki DLL Procedury i funkcje z biblioteki mogą być w kodzie programu podpięte statycznie, co oznacza że dana procedura lub funkcja jest cały czas dostępna w pamięci komputera Procedure nazwa(x:typ); stdcall external nazwa.dll name nazwa ; Procedure nazwa(x:typ); stdcall external nazwa.dll index numer ; Function nazwa(x:typ):typ; stdcall external nazwa.dll name nazwa ; Function nazwa(x:typ):typ; stdcall external nazwa.dll index numer ; 31 library biblioteka; {$mode objfpc} uses math; function sqrt(x:single):single; stdcall; result:=power(x,0.5); procedure dwa(x:single); stdcall; write(x:8:2); exports sqrt name 'pierwiastek', dwa name 'dwapoprzecinku'; end. 32 16

Program testowy; {$mode objfpc} uses crt, sysutils; procedure dwapo(x:single); stdcall external 'biblioteka.dll' name 'dwapoprzecinku'; function pier(x:single):single; stdcall external 'biblioteka.dll' name 'pierwiastek'; 33 var x,y:single; i:integer; clrscr; randomize; for i:=1 to 15 do x:=((random(10000)/13)+123)*5; y:=pier(x); dwapo(x); write(' pierwiastek '); dwapo(y); writeln; readln; end. 34 17

35 Biblioteki DLL Ładowanie dynamiczne polega na załadowaniu biblioteki, procedury lub funkcji wtedy gdy jest potrzebna, a następnie zwolnienie z pamięci. Kod wywołania dynamicznego jest o wiele bardziej złożony jak przy wywołaniu statycznym Dynamiczna obsługa biblioteki dll jest możliwa po podpięciu modułu dynlibs 36 18

Biblioteki DLL Funkcje i procedury są definiowane jako typ zmiennych Nazwy funkcji i procedury przypisana jest do nowych typów Utworzone jest zaczepienie dla biblioteki Biblioteka ładowana jest funkcją LoadLibrary Funkcje i procedury przypisywane są za pomocą funkcji GetProcedureAddress Biblioteka zwalniana jest z pamięci funkcą FreeLibrary 37 Program testowy; {$mode objfpc} uses crt,sysutils,dynlibs; type MyFunc = function(x:single):single;stdcall; MyProc = procedure(x:single);stdcall; var DLL: TLibHandle=dynlibs.NilHandle; dwapo: MyProc; pier: MyFunc; x,y:single; i:integer; 38 19

Biblioteki DLL clrscr; randomize; DLL:=Loadlibrary('biblioteka.dll'); pier:=myfunc(getprocedureaddress(dll, 'pierwiastek')); dwapo:=myproc(getprocedureaddress(dll,'dwapoprzecinku')); 39 Biblioteki DLL for i:=1 to 15 do x:=((random(10000)/13)+123)*5; y:=pier(x); dwapo(x); write(' pierwiastek '); dwapo(y); writeln; FreeLibrary(DLL); readln; end. 40 20

Biblioteki DLL 41 Pliki Pliki służą do przechowywania danych Dane z plików mogą być przetwarzane przez programy Przechowuje się w nich dane wyjściowe programów Zachowane w plikach dane zachowywane są po zamknięciu pracy z programem, umożliwiają kontynuowanie pracy nad nimi w późniejszym czasie Dane można przechowywać w plikach Tekstowych Binarnych 42 21

Pliki tekstowe Obsługa plików tekstowych jest analogiczna do wysyłania treści na ekran monitora lub odczytywanie danych z klawiatury Operacje na pliku są możliwe po jego podpięciu do aplikacji poleceniem Assign Rozpoczęcie pracy z podpiętym plikiem jest możliwe po aktywacji metody dostępu procedurą Reset, Rewrite lub Append Zapis i odczyt realizowany jest funkcjami Write i Read Dostęp do pliku zamykany jest instrukcją Close 43 Program plikdane; {$mode objfpc} uses crt; var plik:text; dane:string; clrscr; writeln(plik,dane); close(plik); reset(plik);//otwiera plik readln(plik,dane); close(plik); writeln(dane); readln; end. Assign(plik,'plik.txt'); rewrite(plik);//tworzy plik na dysku writeln('podaj tekst do zapisu'); write(':/>'); readln(dane); 44 22

45 Pliki Zazwyczaj aplikacje nie tylko tworzą nowe pliki ale korzystają z już istniejących Funkcja FileExists() sprawdza czy podany plik istnieje na dysku, zwraca wartość true lub false Funkcja EOF() i Eoln() ułatwia odczytywanie danych z pliku informując o końcu pliku i linii Odczyt i zapis danych do pliku wygodnie realizować jest w konstrukcji testowej try..finally lub try..except 46 23

Program plikdane2; {$mode objfpc} uses crt; var plik:text; dane:string; tab: array[1..10,1..10] of byte; i,j:byte; clrscr; Assign(plik,'plik.txt'); rewrite(plik); 47 for i:=1 to 10 do for j:=1 to 10 do tab[i,j]:=i*j; write(i*j,' '); write(plik,i*j,' '); writeln; writeln(plik,''); close(plik); 48 24

writeln('dopisanie danych do pliku'); append(plik); writeln('podaj podpis do danych jakie zostały wprowadzone'); write(':>'); readln(dane); writeln(plik,dane); close(plik); 49 writeln('odczyt danych z pliku'); reset(plik); while not Eof(plik) do while not Eoln(plik) do read(plik,dane); write(dane); readln(plik); writeln; readln; end. 50 25

51 Program plikdane; {$mode objfpc} uses crt; var plik:text; dane:string; clrscr; write('podaj nazwę pliku:'); readln(dane); 52 26

try try assign(plik,dane); writeln('odczyt danych z pliku:,dane); reset(plik); while not Eof(plik) do while not Eoln(plik) do read(plik,dane); write(dane); readln(plik); writeln; 53 finally close(plik); except writeln('plik o podanej nazwie nie istnieje!'); readln; end. 54 27

55 Program plikdane; {$mode objfpc} uses crt,sysutils; var plik:text; dane:string; clrscr; write('podaj nazwę pliku:'); readln(dane); 56 28

if fileexists(dane) then assign(plik,dane); writeln('odczyt danych z pliku'); reset(plik); while not Eof(plik) do while not Eoln(plik) do read(plik,dane); write(dane); readln(plik); writeln; end else writeln('plik o podanej nazwie nie istnieje!'); readln; end. 57 58 29

Zadanie Napisać program do gromadzenia danych kontaktowych (osobowe, adresowe, komunikacyjne) Dane przechowywane są w pliku tekstowym Program umożliwia wyszukiwanie osób po nazwisku lub imieniu 59 Zadania W kodzie źródłowym obu projektów należy wykorzystać procedury i funkcje dla wydzielonych zadań Procedury i funkcje z obu projektów umieścić w bibliotece DLL Sprawdzić działanie bibliotek w formie statycznej i dynamicznej 60 30