430 likes | 649 Views
PROGRAMOWANIE STRUKTURALNE. Wprowadzenie do programowania w TP. część 4. Temat:. Opracowanie bibliotek programów. Biblioteki. do każdego programu możną dołączyć: standardowe (crt, graph), własne biblioteki (funkcji i procedur). Bibliotekę dołączamy stosując słowo kluczowe USES.
E N D
PROGRAMOWANIE STRUKTURALNE Wprowadzenie do programowania w TP. część 4
Temat: Opracowanie bibliotek programów.
Biblioteki • do każdego programu możną dołączyć: • standardowe (crt, graph), • własne biblioteki (funkcji i procedur). • Bibliotekę dołączamy stosując słowo kluczowe USES
UNIT tekst; INTERFACE user crt; procedure WriteXY(x,y:byte; s:string); IMPLEMENTATION procedure WriteXY(x,y:byte; s:string); begin GotoXY(x,y); write(s); end; begin end.
Użycie biblioteki użytkownika program dolacz_biblioteke; uses crt,tekst; begin WriteXY(5,5,'Witaj'); readln; end.
Temat: Dyrektywy kompilatora.
Dyrektywy kompilatora • Ponieważ dyrektywy kompilatora, nie są częścią języka programowania, muszą być zapisywane w kodzie źródłowym w taki sposób, aby translator mógł odróżnić i wyodrębnić dyrektywę, • Typowym rozwiązaniem jest zapis dyrektyw kompilatora w formie komentarza o własnej składni. Zespół zdefiniowanych dyrektyw stanowi również pewien język.
Przykłady pierwszy • writeln('Sprawdzimy twoj kompilator.'); • {$IFDEF WINDOWS} • writeln('Pracujesz pod WINDOWS'); • {$ELSE} • writeln('Pracujesz pod DOS'); • {$ENDIF}
Przykład drugi • writeln('Podaj liczbe:'); • {$I-} readln(liczba); {$I+} • if ioresult=0 then writeln('Twoja liczba to:',liczba) • else writeln('Bad! To nie bya liczba!');
Zbiór innych dyrektyw • {$A+,B-,D+,E+,F-,G-,I+,L+,N-,O-,R-,S+,V+,X-} • {$M 16384,0,655360}
Temat: Obsługa urządzeń peryferyjnych.
Przerwania • Przerwanie to procedura obsługijakiegoś zdarzenia: • sprzętowego, np.: ruchu myszą, wciśnięcia klawisza, zegara, • programowego: sprawdzenia czy klawisz został naciśnięty, włączenia jakiegoś trybu graficznego, drukowanie, odczyt/zapis z dysku itp. • Przerwań jest 256, ich adresy są umieszczone w pamięci pod adresem 0:0w tablicy o rozmiarze 1024 bajtów (1 kB).
Temat: Rejestry procesora.
Wstęp do rejestrów procesora • Praca procesora polega na pobieraniu z pamięci rozkazów wraz z danymi i wykonywaniu ich. • Dane i rozkazy niczym między sobą się nie różnią. Liczba może być traktowana jako kod rozkazu lub wartość innego. • W celu szybszego operowania danymi każdy procesor został wyposażony w kilka rejestrów, czyli bajtów pamięci (najszybszej).
Procesor 8086 • Ponieważ wszystkie procesory 8086 i w górę są ze sobą kompatybilne (przynajmniej powinny), będziemy zajmować się w głównej mierze 8086. • Procesor 8086 (i nowsze, jednak te posiadają jeszcze inne rejestry) posiada 14 rejestrów 16-bitowych.
Rejestr IP (Instruction Pointer) • Jest jeszcze jeden rejestr, ale jest on nie osiągalny bezpośrednio przez programistę. • Zawiera on adres aktualnie wykonywanej instrukcji i może być modyfikowany przez rozkazy sterujące pracą programu.
Rejestr znaczników • Do tego rejestru również nie można odwoływać się bezpośrednio. Do tego celu używa się specjalnych instrukcji. Dla programisty rejestr ten to 9 pojedynczych bitów informujących o stanie procesora, np. by porównać dwie wartości (wykonać polecenie Pascal'owe IF) używa się instrukcji CMP. • Część z tych znaczników można ustawiać, a część tylko odczytywać.
Temat: Wbudowany asembler.
Główne komendy • MOV (kopiuj) • ADD (dodawanie) • SUB (odejmowanie) • MUL (mnożenie) • DIV (dzielenie bez znaku) • INC (inkrementacja) • DEC (dekrementacja)
Główne komendy • CMP (porównanie) • JE (wykonaj skok, jeżeli równe) • POP (zdejmij ze stosu) • PUSH (odłóż na stos) • CALL (wywołanie funkcji/podprogramu) • RET (powrót) • LOOP (pętla)
Przykład (LPT) • program asembler_LPT; • uses crt,dos; • begin • asm • mov dx, $3BC (adres LPT) • mov ax, 0 (lub inna wartość) • mov dx, ax (kopiuj) • end; • end.
Temat: Lokalizacja i usuwanie usterek w programie za pomocą debuggera.
Czym jest debugowanie? • Kiedy piszemy program i działa on niepoprawnie (nawet jeśli uważamy, że wszystko zakodowane jest tak, jak powinno być) musimy prześledzić kod, aby dowiedzieć się, gdzie jest przyczyna błędu. • Jednym ze sposobów jest wykorzystanie np. procedury writeln , aby śledzić zmienne. • Innym znacznie lepszym i profesjonalnym sposobem jest użycie debugera Turbo Pascal.
Debuger • Aby uruchomić program w trybie debugera naciskamy F7. Każde naciśnięcie klawisza F7 powoduje wykonanie kolejnej linii programu. Podobnie F8, jednak nie wchodzi do procedur i funkcji. • Jeśli naciśniemy Alt+F5 można podejrzeć okno programu i/lub powrócić do debugera. • Aby kontrolować wartość zmiennej należy w zakładce Debug wybrać opcję Add Watch i podać nazwę zmiennej.
Temat: Poprawność i złożoność obliczeniowa algorytmów.
Podstawowym elementem przy rozwiązywaniu zadanego problemu jest dobór algorytmu i struktury danych. • Najważniejszymi aspektami algorytmu są jego: • poprawność • złożoność: czasowa i pamięciowa.
Poprawność – własność stopu. • Jednym z podstawowych elementów poprawności algorytmu jest własność stopu: dla poprawnych danych wejściowych algorytm zatrzymuje się w skończonym czasie. • Pytanie może odnosić się albo do konkretnych danych wejściowych, albo do wszystkich możliwych danych. Jeśli program zatrzymuje się dla wszystkich danych, to mówimy, że ma własność stopu.
Złożoność czasowa • W przypadku złożoności czasowej, z reguły wyróżnimy pewną operację dominującą, a czas będziemy traktować jako liczbę wykonanych operacji dominujących. • W przypadku sortowania, operacją dominującą jest przeważnie porównanie dwóch elementów, a w przypadku przeglądania drzewa - jedno przejście w drzewie między wierzchołkami. W przypadku algorytmów tekstowych operacją dominującą jest porównanie dwóch symboli.
Złożoność pamięciowa • Podobnie jak złożoność czasowa jest miarą czasu działania algorytmu, tak złożoność pamięciowa jest miarą ilości wykorzystanej pamięci. • Jako tę ilość najczęściej przyjmuje się użytą pamięć. Możliwe jest również obliczanie rozmiaru potrzebnej pamięci fizycznej wyrażonej w bitach lub bajtach.
Temat: Optymalizacja działania programów.
Optymalizacja - przykłady • Operacje matematyczne: • dobieraj optymalne typy zmiennych; • zamiast dzielenia przez 2 lub potęgę dwójki stosu j przesunięcie bitów, np. y:=x div 2 zamień na y:=x shr 1; • zamiast dodawać lub odejmować jeden stosu inkrementację lub dekrementację, np. i:=i+1 zamień inc(i),
Optymalizacja - przykłady • Operacje logiczne: • nie porównuj typu boolean, np. zamiast if z=true … pisz samo if z … • na początku warunku zawsze używaj wyrażeń, które wykonują się szybciej, jak w przykładzie: if (a=0)and(a*x+b>0) then … • próbuj zamieniać warunki logiczne na działania matematyczne: if (x=1) then x:=2 else x:=1; zamień na x:=3–x;
Optymalizacja - przykłady • Optymalizacja kodu: • stosuj procedury i funkcje, jednak staraj się unikać wielokrotnego wykonywania tej samej funkcji lepiej zapamiętaj wartość; • w pętli unikaj niepotrzebnych obliczeń, zrób co konieczne przed pętlą, pamiętaj w pętli wykona się to wiele razy; • jeśli jakieś wyliczenia miałyby wykonać się dwukrotnie, wylicz je raz i zapamiętaj wartość.
Ważne • Jeśli chcesz, aby twoje algorytmy działały naprawdę szybko, stosuj powyższe zasady oraz myśl . • Przede wszystkim dbaj o swój kod w momencie gdy go piszesz. • Wiedz, że napisany program będziesz poprawiał, tylko wtedy, gdy będzie to konieczne.
Temat: Dokumentacja techniczna programu.
Niezbędne elementy dokumentacji • opis plików programu – każdy plik powinien zawierać informacje o autorze, dacie modyfikacji i nazwie, • opis zmiennych – każda zmienna powinna zawierać komentarz na jej temat, • opis funkcji i procedur, każda funkcja i procedura powinny zawierać opis jej działania, dokładny opis parametrów i wartości przekazywanej, • ponadto powinny być omówione np. formaty plików itp.