670 likes | 918 Views
1. Podstawowe wiadomości na temat języka programowania 2. Polecenia w języku Turbo Pascal 3. Symbole stosowane w sieciach działań 4. Klawisze funkcyje 5. Struktura programu w języku TURBO PASCAL 6. Zapowiedzi definicji procedury lub funkcji
E N D
1. Podstawowe wiadomości na temat języka programowania 2. Polecenia w języku Turbo Pascal 3. Symbole stosowane w sieciach działań 4. Klawisze funkcyje 5. Struktura programu w języku TURBO PASCAL 6. Zapowiedzi definicji procedury lub funkcji 7. Deklaracja typów zmiennych w języku TURBO Pascal 8. Pliki tekstowe w języku TURBO Pascal 9. Typy zmiennych 10. Procedury 11. Edycja, kompilacja i uruchamianie programów w języku TURBO PASCAL 12. Moduły w języku TURBO Pascal Spis treści
Język programowana Pascal (nazwa na cześć francuskiego matematyka, fizyka i filozofa Blaise Pascala) należy aktualnie do najpopularniejszych języków programowania komputerów. Powstał w 1971 roku, kiedy to NIKLOUS WIRTH zgłosił pierwszy raport tego języka. Z czasem język Pascal i wzorowana na nim notacja zaczął pełnić role języka uniwersalnego służącego nie tylko do nauki programowania, samego programowania, ale tak że do zapisywania na nim algorytmów i porozumiewania się pomiędzy specjalistami z zakresu inżynierii programowania. Wraz z powstaniem i rozwojem techniki mikrokomputerowej powstały liczne wersje języka Pascal przeznaczone specjalnie do mikrokomputerów. Podstawowe wiadomości na temat języka programowania PASCAL
Najpopularniejszą implementacją języka PASCAL la mikrokomputerów klasy IBM PC jest TURBO PASCAL wprowadzony na rynek w 1983 roku przez amerykańską firmę BORLAND INC. Obecnie ukazała się wersja TURBO PASCAL ver. 7,0
System TURBO PASCAL firmy BORLAND składa się z : • komplikatora języka TURBO PASCAL • zintegrowanego, systemowego, pełnoekranowego edytora tekstu, • zintegrowanego programu uruchomieniowego DEBAGER
Profesjonalna wersja programu systemu TURBO PASCAL ( od ver. 7,0 wprowadzona na rynek jako BORLAND PASCAL) zawiera dodatkowo uniwersalne systemy wspomagające programowanie w dowolnym języku firmy Borland (TURBO Pascal, Turbo C++, TURBO Asembler): • TURBO DEBAGER- do śledzenia przebiegu wykonywania programów oraz lokalizacji i poprawiania błędów programowych. • TURBO PROFILER- do optymalizacji (analizy efektywności) programów
System BORLAND PASCAL umożliwia programowanie w trzech trybach: • w systemie operacyjnym DOS w trybie adresowania rzeczywistego, • w systemie operacyjnym DOS w trybie adresowania wirtualnego z ochroną, • w środowisku graficznym WINDOWS
POLECENIA PASCAL
Restore Line Odtworzenie ostatniego wiersza, który był poddany edyji Cut <Shift><Del> Usunięcie wyróżnionego bloku tekstu i umieszczenie go w notatniku (buforze powielania) Copy Skopiowanie wyróżnionego bloku tekstu do notatnika Copy Example Skopiowanie przykład z okienka wyjaśniającego do notatnika (przykład może być zmodyfikowany i umieszczany w tekście źródłowym programu) Show Clipboard Wyświetlenie okienka zawierającego teksty umieszczone w notatniku Clear Usunięcie zaznaczonego bloku tekstu bez umieszczania go w notatniku Paste Wstawienie przed pozycją kursora tekstu ostatnio umieszczonego w notatniku EDIT
Find… Wyświetlenie okienka dialogowego umożliwiającego odszukanie podanego tekstu Replice… Wyświetlenie okienka dialogowego umożliwiającego odszukanie i zamianę podanego tekstu na inny Serach Again… Powtórzenie ostatnio wykonywanego polecenia Find lub Replice Go to line numer… Przeniesienie kursora do wiersza o podanym numerze Find procedure… Wyświetlenie tekstu procedury o podanej nazwie (polecenie może być wykonane tylko podczas uruchamiania programu) Find terror… Zlokalizowanie błędu wykonania programu SEARCH
Run <Ctrl>[F9] Skomplikowanie programu w trybie make, a następnie wykonanie go. Przerwanie wykonania <Ctrl>-Break Program reset <Ctrl>[F2] Zakończenie uruchomienia programu, zwolnienie przydzielonej mu pamięci i zamknięcie aktywnych plików Go to kursor [F4] Zastawienie tymczasowej pułapki w wierszu wyróżnionym przez kursor, a następnie podjęcie wykonywania programu aż do wpadnięcia w pułapkę lub zakończenia Trace [F7] Wykonanie najbliższej instrukcji programu lub wykonanie procedury Steo oper [F8] Wykonanie najbliższej instrukcji programu. Jeśli instrukcja ta jest wywołaniem procedury, to zostanie ona wykonana w jednym kroku Parameters Umożliwienie podania argumentów wykonywania programów takich jakie podaje się gdy jest on aktywny w systemie DOS RUN
Compile <Alt>-[F9] Przeprowadzenie komplikacji tekstu zawartego w aktywnym okienku edycyjnym Make [F9] Przeprowadzenie komplikacji w trybie Make Build Przeprowadzenie komplikacji w trybie Build Destination Określenie miejsca umieszczenia kodu wynikowego (z rozszerzeniem nazwy . EXE) Menory/Dysk (pamięć/dysk) Primary File Określenie nazwy pliku pierwotnego COMPILE
Evalute/Modify Wyświetlenie okienka dialogowego umożliwiającego określenie aktualnej wartości zmiennej lub wyrażenia z możliwością przypisania zmiennej nowej wartości (okienko dialogowe może być także wykorzystane jako kalkulator) Watches Wyświetlanie menu umożliwiającego zarządzanie obserwacją wyrażeń i zmiennych Add Watch Deleten Watch Edit Watch Remove All Watches Ustawienia obserwacji <Ctrl>-[F7] Usunięcie obserwacji Modyfikacja obserwacji Usunięcie wszystkich obserwacji Toggle Breakpoint Zastawienie (program będzie bezwarunkowo przerwany w wierszu w którym znajduje się kursor) lub usunięcie pułapki Breakpoints Wyświetlenie okienka dialogowego umożliwiającego zastawienie i usuwanie pułapek warunkowych i bezwarunkowych DEBUG
Compiler Umożliwienie ustawienia opcji komplikatora Menory Size Określenie rozmiarów stosu oraz minimalnego maksymalnego rozmiaru sterty Linker Określenie sposobu wykonywania konsolidacji Debugger Określenie warunków uruchmiania programów w tym włączania do programu wykonywanego symbolicznych informacji uruchomieniowych Directories Określenie nazw katalogów,w których znajdują się pliki wynikowe , dołączane i biblioteczne. Nazwy są oddzielane średnikami Environment Określenie parameró pracy zintegrowanej systemu TURBO Pascal Save Options Zapamiętanie ustalonej konfiguracji w pliku o podanej nazwie (standardowa konfiguracja zapisana jest w pliku TURBO.TP) Retrieve Options Odtworzenie uprzednio zapamiętanej konfiguracji OPTIONS
Size/More Zmiana pozycji i rozmiaru aktywnego okienka Zoom Powiększanie/zmniejszenie aktywnego okienka Title Wyświetlenie okienek w układzie kartotekowym Cascade Wyświetlenie okienek w układzie kaskadowy, Next Uaktywnienie następnego otwartego okienka Previons Uaktywnienie poprzedniego okienka Close Zamknięcie aktualnego okienka i usunięcie go z ekranu Watch Otwarcie i uaktywnienie okienka obserwacyjnego Register Otwarcie i uaktywnienie okienka rejestrów. W okienku ty, podawany jest stan rejestrów procesora istotny podczas wykonywania rozkazów maszynowych wstawianych do programu za pomocą instrukcjiasemblerowych. Output Otwarcie i uaktywnienie okienka wyjściowego do którego są kierowane wyniki dziania programów (nie dotyczy to programów graficznych) Call Stack Otwarcie specjalnego okienka zawierającego liste odwołań do procedur i funkcji WINDOWS
Programowanie systemu komputerowego.Symbole stosowane w sieciach działań. Algorytmem – nazywamy zbiór reguł postępowania, mający na celu w skończonej liczbie kroków przetwarzania informacji wejściowych (danych) w informacje wyjściowe (wyniki). Raz opracowany algorytm dla danego problemu powinien służyć do rozwiązywania wszystkich problemów tej klasy, dla której został opracowany. Algorytm powinien uwzględniać wszystkie możliwe teoretyczne warianty przebiegu obliczeń zaistniałych z powodu różnego doboru danych wejściowych. Rozwiązywanie algorytmu powinno być poprzedzone analizą matematyczną zadania w oparciu o metody numeryczne. Na podstawie algorytmu układa się programy. Programem – nazywamy algorytm przetwarzania informacji zapisany w języku programowania. W praktyce programistycznej stosowane są zasadniczo dwie metody projektowania algorytmów:- metoda analityczna (zstępująca) (ang. top-down programming) – stosowana jest głównie przy projektowaniu nowych algorytmów i polega na podziale postawionego zadania na podzadania, które następnie dekomponuje się na mniejsze podzadania, aż do momentu gdy zadania cząstkowe będą na tyle małe, że ich rozwiązanie nie będzie sprawiało trudności.- metoda syntetyczna (wstępująca) (ang. bottom-up-programming) – stosowana jest głównie przy projektowaniu istniejących algorytmów i polega na zaprojektowaniu wszystkich potrzebnych podprogramów w celu ich późniejszej syntezy. Po zaprojektowaniu algorytmu należy udowodnić, że jest on poprawny. Przeprowadzenie dowodu poprawności algorytmu często może sprawić wiele trudności i w takim przypadku poprzestajemy na testowaniu algorytmu dla różnych danych wejściowych. Należy pamiętać, że przetestowanie algorytmu nie jest dowodem na jego poprawność za pomocą testowania można natomiast wykazać niepoprawność algorytmu.
Nazwa operacji Symbol Wyjaśnienie Początek, koniec lub przerwa. Oznaczenie miejsca rozpoczęcia lub przerwania działania programu. Wprowadzenie, wyprowadzenie. Wprowadzenie lub wyprowadzenie danych. Przetwarzanie. Operacja, lub grupa operacji w wyniku której ulegną zmianie wartości postaci lub miejsca zapisu informacji. Decyzja. Operacja określająca wybór jednej z alternatywnych dróg działania. Przygotowanie. Modyfikacja rozkazu lub grupy rozkazów powodująca zmianę w przebiegu procesu przetwarzania. Podprogram, proces zdefiniowany. Wywołanie programu lub procesu zdefiniowanego jako program. Droga przepływu informacji. Wiążąca operacja pomiędzy poszczególnymi procesami przetwarzania.
Nazwa operacji Symbol Wyjaśnienie Droga przepływu informacji ze wskazaniem kierunku. Skrzyżowanie dróg przepływu informacji bez powiązania między nimi. Łączenie przepływu dróg informacji Komentarz. Oznaczenie miejsca na komentarz. Łącznik stronicowy. Wejście lub wyjście z wyodrębnionych fragmentów schematów znajdujących się na tej samej stronie. Łącznik międzystronicowy. Wejście lub wyjście z wyodrębnionych fragmentów schematów znajdujących się na różnych stronach. Decyzja. Operacja określająca wybór jednej z alternatywnych dróg (1..n) działania w zależności od wartości k={1..n} Komentarz K 1 2 3 … N
Przykład 1. Napisać algorytm komputerowy umożliwiający rozwiązywanie trójmianów kwadratowych w postaci: Rozwiązanie: Analiza matematyczna problemu: Równanie ma dwa pierwiastki w zbiorze liczb rzeczywistych: Równanie ma jeden pierwiastek podwójny: Równanie nie ma pierwiastków w zbiorze liczb rzeczywistych. II. Algorytm komputerowy: START Algorytm programu rozwiązującego trójmian kwadratowy Pisz: „Podaj współczynniki równania A, B, C” Czytaj: A, B, C DELTA=B*B-4*A*C DELTA < 0 DELTA = 0 Pisz: „Trójmian nie mapierwiastków w zbiorzeliczb rzeczywistych 1 2 2 STOP X1=(-B-SQRT(DELTA))/2/A X2=(-B+SQRT(DELTA))/2/A Pisz: „Trójmian nie mapierwiastków w zbiorzeliczb rzeczywistych STOP
F1 wyświetlenie informacji pomocniczych F2 zapisanie na dysku zbioru znajdującego się w okienku edycyjnym F3 wyświetlenie okienka dialogowego służącego do wczytania zbioru F4 wykonanie programu do miejsca aktualnego położenia kursora F5 powiększenie/pomniejszenie aktualnego okna F6 przejście do następnego otwartego okienka F7 wykonanie bieżącej instrukcji programu F8 wykonanie bieżącej instrukcji programu. Jeśli tą instrukcją będzie wywoływanie procedury, to będzie ona wykonana w jednym kroku F9 kompilacja programu znajdującego się w bieżącym okienku F10 uaktywnienie górnego menu Ctrl F1 wyświetlenie informacji o identyfikatorze wyróżnionym przez kursor (uruchamianie pomocy kontekstowej) Ctrl F2 zakończenie sesji debuggera (usunięcie punktów kontrolnych) Ctrl F3 wyświetlenie okienka zawierającego historię wywołań procedur i funkcji Ctrl F4 obliczenie wartości podanych zmiennych i wyrażeń Klawisze Funkcyjne
Ctrl F5 zmiana położenia lub rozmiaru aktywnego okienka Ctrl F7 dodawanie zmiennej lub wyrażenia do okienka obserwacyjnego Ctrl F8 ustalenie/usunięcie bieżącego wiersza jako punktu przeważania programu (pułapki programowej). Ctrl F9 kompilacja i wykonanie programu Ctrl Del usunięcie wyróżnionego tekstu Ctrl Ins skopiowanie wyróżnionego tekstu do notatnika Ctrl L powtórzenie ostatniej operacji wyszukiwania lub wyszukiwania i zmiany ciągu znaków Alt F1 wyświetlanie poprzedniego okienka zawierającego wyjaśnienia Alt F3 zamknięcie aktywnego okienka Alt F5 wyświetlenie okienka, na które wyprowadzane są wyniki programów Alt F8 zlokalizowanie błędu wykonania programu Alt F9 kompilacja programu znajdującego się w aktywnym okienku Alt O wyświetlenie listy otwartych okienek Alt nr wyświetlenie okienka o podanym numerze Alt litera uaktywnienie odpowiedzi Shift Del usunięcie zaznaczonego bloku tekstu i umieszczenie go w buforze powielania Shift Ins powielenie zawartości bufora powielania w miejscu aktualnego położenia kursora w aktywnym okienku Shift F1 wyświetlenie skorowidza informacji pomocniczych Shift F9 przejście do poprzednio otwartego okna
Struktura programu w języku TURBO PASCAL Każdy program w języku TURBO Pascal ma następującą strukturę : (Nie wszystkie podane poniżej elementy składowe muszą wystąpić w każdym programie.) Tekst umieszczony w znakach (* *) lub { } oznacza komentarz i nie jest brany pod uwagę poprzez kompilator PROGRAM przykład; (*nagłówek ; przykład jest nazwą programu*) USES crt; (dołączenie modułów standardowych *) CONST (*deklaracja stałych*) C=’C’; L=’L’; R=500; {w tym przypadku zadeklarowano stałe C,L,R,PI} PI=3,14 TYPE(*deklaracja typów zmiennych Adres=record Nazwisko :string[16]; Imię :string[12]; Ulica :string[20]; Kod :string[6]; Miejscowość:string[20]; End; {zadeklarowano typ adres} VAR(*deklaracja zmiennych globalnych*) Plik :file of adres; L,k :Integer; {zadeklarowano zmienne plik,l,k,r,odp}
R :Real Odp :Char; PROCEDURE przykładowa; (*deklaracja procedur*) VAR Zn : char; {deklaracja zmiennych lokalnych obowiązujących } {tylko wewnątrz procedury } BEGIN … … END; BEGIN {początek programu głównego} … … {tu należy umieścić instrukcje stanowiące} … {program główny} END. {koniec programu głównego }
V Zapowiedzi definicji procedury lub funkcji. Z poziomu procedury lub funkcji można wywołać inne procedury i funkcie. Definicje wywołanych podprogramów powinny się znajdować przed procedurą lub funkcjią ich wywołującą . Jeśli z różnych powodów jest to niemożliwe lub podprogramy wywołują sie nawzajem, należy zastosować deklaracje z dyrektywą standardową FORWARD. Podprogram z FORWARD uważa się za zadeklarowany, choć jego treść zostanie podana póżniej. Definicja procedury lub funkcji zadekladrowanej wcześniej jako FORWARD nie wymaga powtórnego wyszczegółowania paramatrów foramlnych ani typu wyniku funkcji (choć powtórne wyszczególnienie nie jest błędem). Przykład deklaracji funkcji z dyrektywą FORWARD PROCEDURE Nic(a,b,c:INTEGER) FORWARD; PROCEDURE SuperNic(a,b,c:INTEGER); Begin .. {tu należy umieścić treść procedury} .. END; PROCEDURE Nic; BEGIN .. {tu należy umieścić treść procedury} .. END;
VI Przykłady definicji procedur i funkcji: Przykłady definicji procedur. PROCEDURE Kreska; BEGIN WRITELN(‘***************’) END; Procedura bezparametrowa kreska spowoduje wyrysowanie w miejscu aktualnego położenia kursora linii składającej się z ‘’ * ‘’. PROCEDURE SuperKreska(x,y,dl: BYTE;znak:CHAR); VAR k:BYTE BEGIN FOR K:=1 to dl DO BEGIN GOTOXY(x+k-l,y); WRITELN(znak) END; END; Procedura SuprerKreska spowoduje w rysowanie w miejscu wskazanym przez współrzędne X,Y dwoch rzędów znaków o długości dl, np. wywołanie procedury SuperKreska z parametrami : BEGIN {początek programu głównego} SuperKreska(10,12,55,’=’); END. {koniec programu głównego} spowoduje wrysowanie na ekranie monitora w punkcie początkowym o współrzędnych 10,12 lini skłądającej się z 55 znaków ‘’=’’
X 08 0”0 = = = = = = = = = = = 25 Y Rys. Wygląd ekranu monitora po wywołaniu PROCEDURY SuperKreska PROCEDURE stop; BEGIN WRITELN(‘wciśnij dowolny klawisz’); REPEAT UNTIL KEYPRESSED; END; PROCEDURE stoj; BEGIN WRITELN (‘wciśnij ENTER’); READLN; END; Powyższe procedury mają podobne działanie i służą do zatrzymania wykonywania programu do czasu wciśnięcia odpowiedniego klawisza.
Przykłady definicji funkcji: FUNCTION DELTA (A,B,C:REAL):REAL; BEGIN DELTA:=B*B-4*A*C; END; Funkcja DELTA wyznacza wyróżnik równania kwadratowego. FUNCTION POTEGA(X,Y:REAL):REAL; BEGIN POTEGA:=EXP(Y*LN(X)); END; Y Funkcja POTEGA oblicza X . Funkcja Lg oblicza logarytm dziesiętny liczby X FUNCTION Lg(X:REAL):REAL; BEGIN Lg:=Ln(X)/Ln(10) END; FUNCTION Log(a,b:REAL):REAL; BEGIN Log:=Ln(b)/Ln(a) END; Funkcja Log oblicza logarytm o podstawie a z liczby b
VII. Definicjie funkcji i procedur rekurencyjne i iteracyjne. obliczanie silni metodą iteracyjną: FUNCTION SILNIA(n:BYTE):LongInt; VAR i:BYTE Iloczyn : Longint; BEGIN iloczyn:=1; IF n>1 THEN BEGIN FOR i:=2 TO n DO iloczyn:=iloczyn*i; END; SILNIA:=iloczyn END; b) obliczanie silni metodą rekurencyjną; W procedurach i funkcjach zdefiniowanych rekurencyjnie występuje bezpośrednie lub pośrednie wywoływanie tego samego podprogramu FUNCTION SILNIA(n:BYTE):LongInt; BEGIN IF ( n=0) OR (n=1) THEN SILNIA:=1 ELSE SILNIA:=n*SILNIA(n-1); END;
Poniżej przedstawiona zostanie prosta procedura służąca do wyświetlania n pustych wierszy zrealizowana w postaci iteracyjnej i rekurencyjnej. 1)Definicja iteracyjna PROCEDURY odstęp. PROCEDURE ODSTEP(n); VAR K :INTEGER; BEGIN FOR k:=N DOWNTO 1 DO WRITELN; END; 2) Definicja rekurencyjna PROCEDURY ODSTĘP. PROCEDURE ODSTEP(n); BEGIN IF n>1 THEN ODSTEP(n-1); WRITELN; END;
Deklaracja typów zmiennych w języku TURBO Pascal.Każdą zmienną występującą w programie należy zadeklarować, tzn. określić jej identyfikator (nazwę) i zbiór wartości, do którego należy. Ten zbiór wartości nazywa się typem zmiennej.W języku TURBO PASCAL część typów zmiennej jest przedefiniowanych przez tworców kompilatora i wtedy ich deklaracje można umieszczać po słowie kluczowym VAR, a część musi być zdefiniowana przez użytkownika. Deklaracje typów zmiennych umieszcza się po słowie kluczowym TYPE (=>patrz struktura programu).W języku TURBO Pascal zmienne wszystkich typów z wyjątkiem typu wskaźnikowego są zmiennymi statycznymi. Dla zmiennych typu statycznego miejsce w pamięci komputera jest przydzielane podczas kompilacji deklaracji tych zmiennych.Dla zmiennych typu wskaźnikowego miejsce w pamięci komputera jest przydzielane i zwalniane w trakcie wykonywania programu, gdy jest to potrzebne. Tego typu zmienne nazywają się zmiennymi dynamicznymi.
Pliki tekstowePlikami tekstowymi nazywamy pliki o strukturze wierszowej. Pod pojęciem wiersza rozumie się dowolną sekwencje znaków zakończoną znacznikiem końca wiersza EOL(ang. End Of Line), któremu odpowiada sekwencja znaków CR/LF (ang.carriage return/line feed) (#13/#10). Plik tekstowy w języku TURBO Pascal typem standardowym o nazwie TEXT.Pliki tekstowe można przeglądać za pomocą dowolnego edytora standardowego. Dostęp do pliku tekstowego jest wyłącznie dostępem sekwencyjnym. Aby odczytać określony fragment tekstu należy odczytać wszystko co się przed nim znajduje. Dla plików tekstowych można stosować procedury WRITELN i READLN. Możliwe jest otwarcie pliku tekstowego do dopisywania za pomocą procedury APPEND(plik).Przykład deklaracji pliku tekstowego:TYPEPlik=TEXT;VARZBIÓR, DANE : Plik;LubVARZBIÓR, DANE : TEXT;\Wewnętrzna definicja typu tekstowego jest następująca:TYPETEXT=FILE OF CHAR;VARINPUT,OUTPUT :TEXT;INPUT – jest standardowym plikiem wejścia skojarzonym standardowo z klawiaturą ( plik ten jest automatycznie otwierany przed wykonaniem każdego programu w języku Turbo Pascal ).OUTPUT – jest standardowym plikiem wyjścia skojarzonym standardowo z monitorem ( plik jest automatycznie otwierany przed wykonaniem każdego programu w języku Turbo Pascal)Dowolny plik tekstowy można kojarzyć z fizycznym zbiorem danych (plikiem) lub urządzeniem zewnętrznym ( klawiaturą, konsolą, terminalem, drukarką, portami we/wy).Wcześniej opisane procedury i funkcje dotyczące operacji na plikach można stosować także dla plików tekstowych.
Procedury dotyczące operacji na plikach - Opis procedury ASSIGN(dane,’B:\wynik.TXT’) - Skojarzenie pliku tekstowego dane z fizycznym zbiorem (plikiem wynik.TXT który znajduje się na dysku B:) ASSIGN(dane,’nazwa_urządz’) - Skojarzenie pliku tekstowego dane z urządzeniem zewnętrznym. Dozwolone są następujące nazwy urządzeń: CON - konsola TRM – terminal KBD – klawiatura LST – drukarka PRN – drukarka (LPT1) LTP1 – port równoległy LTP2 – port równoległy AUX – port szeregowy COM1 – port szeregowy we/wy COM2 – port szeregowy we/wy NUL – urządzenie puste RESET(dane) - Otwarcie pliku dane (dane nie może być plikiem standardowym input lub output) i ustawienie wskaźnika na pierwszym elemencie pliku. Wcześniej musi być wywołana procedura Assign(). Jeśli plik tekstowy skojarzony został z urządzeniem zewnętrznym, to jest automatycznie otwierany i wywołane procedury nie powoduje żadnego skutku. REWRITE(nazwa_pliku) - Otwarcie pliku o podanej nazwie. Jeśli plik nie był pusty, to jego zawartość będzie skasowana. Wcześniej należy wykonać procedurę Assign()
READ(dane,x1[,x2,x3,….xn]) - Odczytanie z pliku dane kolejnych elementów i przypisanie ich wartości zmiennym x1,x2,…xn. Zmienne x1…xn mogą być typu INTEGER, REAL, CHAR, lub STRING. Składnia wprowadzanych znaków musi być zgodna z typem zmiennej x1..xn. READLN(nazwa_pliku) - Wprowadzenie jednego wiersza z pliku o podanej nazwie. Jeśli nie wyspespecyfikowano nazwy pliku to operacja dotyczyczy pliku standardowego INPUT. READLN(dane,x1[,x2,x3,…xn]) - Odczytanie z pliku tekstowego dane jednego wiersza przypisanie wartości kolejnych elementów zmiennym x1,x2,..xn. Zmienne x1..xn mogą byćtypu INTEGER, REAL, CHER, lub STRING. WRITE(dane,x1[,x2,x3,…xn]) - Dopisanie do pliku tekstowego dane wartości zmiennych x1,x2,..xn. Zmienne x1..xn mogą być typu INTEGER, REAL, CHAR, lub STRING. Składnia wprowadzonych znaków musi być zgodna z typem zmiennych x1..xn. Jeśli nie podano nazwy pliku to procedura dotyczy pliku standardowego OUTPUT. WRITELN(dane,x1[,x2,x3,…xn]) - Dopisanie do pliku tekstowego dane jednego wiersza zawierającego wartość zmiennych x1,x2,..xn. Zmienne x1..xn mogą być typu INTEGER, REAL, CHAR, lub STRING. Składnia wprowadzanych znaków musi być zgodna z typem zmiennych x1..xn. Jeśli nie podano nazwy pliku to procedura dotyczy pliku standardowego OUTPUT. WRITELN(nazwa_pliku) - Dopisanie do pliku tekstowego o podanej nazwie jednego wiersza. Jeśli nie wyspecyfikowano nazwy pliku to operacja dotyczy pliku standardowego OUTPUT. CLOSE(nazwa_pliku) - Zamknięcie wcześniej otwartego pliku. Jeśli plik nie był otwarty, to po wywołaniu procedury Clone(nazwa_pliku) jego stan nie ulega zmianie.
RENAME(dane,’A:\zbior.txt’) - Zmiana nazwy zbioru skojarzonego z plikiem dane na zbior.txt znajdujący się na dysku A:. W chwili wywołania procedury renami() plik dane musi być zamknięty. Nowa nazwa nie może być nazwą zbioru już istniejącego. ERASE(dane) - Skasowanie zbioru danych skojarzonego z plikiem dane. Zaleca się aby przed wywołaniem procedury Erase plik dane nie był otwarty. Eof(nazwa_pliku) - Funkcja logiczna przyjmująca wartości: -True jeśli zmienna wskazująca wskazuje na koniec pliku (znajduje się przed znakiem Ctr-Z (^Z) lub zbiór jest pusty -False w przeciwnym wypadku Eof - działa jak wyżej, z tym że dotyczyczy standardowego pliku wejściowego INPUT Eoln(nazwa_pliku) (ang. End of line) - funkcja logiczna przyjmująca wartości: -True jeśli zmienna wskazujcfca wskazuje na koniec wiersza (znajduje się przed znakiem końca wiersza LF/CR) ,lub koniec pliku (znajduje się przed znakiem Ctr-Z (^Z), lub plik jest pusty, - False w przeciwnym przypadku Eof - działa jak wyżej, z tym że dotyczyczy standardowego pliku wejściowego INPUT SeekEof(nazwa_pliku) - Funkcja logiczna przyjmująca wartości: -True jeśli zmienna wskazująca wskazuje na koniec pliku (znajduje się przed znakiem Ctr-Z (^Z) lub zbiór jest pusty, - False w przeciwnym przypadku Funkcia SeekEof pomiia znaki spacji, tabulacji i znaczniki końca wiersza ieśli znaiduia sie w pozycji bieżącej otwartego pliku. Wywołanie funkcji SeekEof zamiast Eof może być użyteczne przy odczytywaniu z pliku wartości numerycznych.
SeekEof - działa jak wyżej, z tym że dotyczyczy standardowego pliku wejściowego INPUT SeekEoln(nazwa_pliku) - funkcja logiczna przyjmująca wartości: -True jeśli zmienna wskazująca wskazuje na koniec wiersza (znajduje się przed znakiem końca wiersza LF/CR) ,lub koniec pliku (znajduje się przed znakiem Ctr-Z (^Z)), lub plik jest pusty, -False w przeciwnym przypadku Funkcja SeekEoln pomija znaki spacii. tabulacji i znaczniki końca wiersza jeśli znajdują się w pozycji bieżącej otwartego pliku. Wywołanie funkcji SeekEoln zamiast Eoln może być użyteczne przy odczytywaniu z pliku wartości numerycznych. SeekEoln - działa jak wyżej, z tym że dotyczyczy standardowego pliku wejściowego INPUT Standardowe zmienne plikowe INPUT i OUTPUT można wykorzystać do wysłania wyników działania programu do pliku lub na urządzenie zewnętrzne i pobrania danych z pliku lub urządzenia zewnętrznego. W tym celu należy w odpowiednim miejscu programu umieścić procedurę ASSIGN() np.: ASSIGN(OUTPUT,'nazwapliku') - skierowanie wyników działania programu do pliku o podanej nazwie (nazwę pliku można poprzedzić pełną ścieżką dostępu ) ASSIGN(OUTPUT,’PRN') - skierowanie wyników działania programu na drukarkę (podłączoną do portu równoległego LTPI). ASSIGN(INPUT,’nazwa_pliku’) - pobranie danych z pliku o podanej nazwie (nazwę pliku można poprzedzić pełną ścieżką dostępu). Po zakończeni powyższych operacji należy przywrócić pierwotne przypisania plików standardowych 1NPUT OUTPUT za pomocą procedur: ASSIGN(INPUT,’ ‘) lub ASSIGN(INPUT,'CON') ASSIGN(OUTPUT,’ ‘) lub ASSIGN(OUTPUT,'CON ')
W języku TURBO PASCAL zdefiniowane są następujące typy zmiennych: wyliczeniowy okrojony całkowity prosty porządkowy logiczny łańcuchowy rzeczywisty znakowy Typ tablicowy strukturalny rekordowy obiektowy zbiorowy wskaźnikowy plikowy
Typy porządkowe typ wyliczeniowy Typ wyliczeniowy definiujemy wyliczając jego elementy składowe, które muszą być unikalnymi nazwami. Każdy element składowy ma nadawany numer porządkowy. Typ wyliczeniowy stosuje się zwykle dla zbiorów o niewielkiej liczbie elementów, na których nie wykonuje się operacji arytmetycznych. UWAGA! Dwa różne typy wyliczeniowe nie mogą mieć wspólnych elementów składowych. Identyfikatory elementów w obrębie jednego typu muszą być różne. Na elementach typu wyliczeniowego nie można wykonywać żadnych operacji arytmetycznych. Wartości typu wyliczeniowego nie można wczytywać, wprowadzać na ekran i drukarkę Przykład deklaracji typu wyliczeniowego. TYPEidentyfikator_typu=(lista_identyfikatorów);
Przykłady deklaracji typu wyliczeniowego. TYPE tydzień = (pn, wt, śr, czw, pt, sob, niedz ); pora_roku = (zima, wiosna, lato, jesień ); kolor = (czerwony, zielony, niebieski) VAR dzień : tydzień; pora :pora_roku; barwa :kolor; b) typ okrojony; Typ okrojony jest niepustym podzbiorem dowolnego typu porządkowego (całkowitego, logicznego, znakowego, wyliczeniowego). Ogólna deklaracja typu okrojonego: TYPE identyfikator_typu=stała..stała; Obie stałe muszą być tego samego typu bazowego.
Przykłady deklaracji typu okrojonego: TYPE liczba=97..113; {typ okrojony typu całkowitego} pozytywna=3..6; litera=‘G’..’R’ {typ okrojony typu znakowego} wolne=pt..niedz {typ okrojony typu wyliczeniowego} VAR licznik :liczba; ocena :pozytywna; znak, hasło :litera; weekend :wolne; c) całkowity; Typ całkowity zawiera liczby całkowite z określonego przedziału. TYPE liczba=Integer; VAR wynik: liczba
Nazwa typu Zawartość Wielkość BYTE liczby całkowite 0 do 255 1 bajt WORD liczby całkowite od 0 do 65535 2 bajty SHORTINT liczby całkowite od -128 do 127 1 bajt INTEGER liczby całkowite -32762 do 32767 2 bajty LongINT liczby całkowite -2147483648 do 214783647 4 bajty Typ całkowity jest predefiniowany i nie wymaga deklaracji. Deklaracja zmiennych typu całkowitego może mieć postać: VAR liczba :INTEGER; a,b,c :WORD;
Dla zmiennych typu całkowitego określone są następujące operacje: + Dodawanie div Część całkowita z dzielenia - Odejmowanie mod Reszta z dzielenia całkowitego * Mnożenie shl Przesunięcie w lewo / Dzielenie shr Przesunięcie w prawo NOT Negacja OR Alternatywa AND koniunkcja XOR Różnica symetryczna Funkcja Opis Przykład abs(i) wartość bezwzględna |i| abs(-4)=4 sqr(i) kwadrat sqr(4)=16 succ(i) następnik i+1 succ(13)=14 pred(i) poprzednik i-1 pred(12)=11 Liczby typu całkowitego można zapisywać w kodzie hexadecymalnym. Wtedy tak zapisaną liczbę należy poprzedzić znakiem ‘$’, np $E12A Funkcje standardowe o wartościach typu całkowitego o argumencie typu całkowitego
b) o argumencie typu rzeczywistego Funkacje Opis Przykład Round(r) Zaokrąglenie liczby rzeczywistej r do najbliższej liczby całkowitej Round(4.8)=5 Round(4.4)=4 Trunc(r) Zaokrąglenie lczby rzeczywistej r do najbliższej liczby całkowitej w kierunku zera Trunc(9.6)=9 Trunc(-9.6)=-9 d) typ logiczny; Typ logiczny (Boolean) jest określony tylk przez dwie wartości: False- fałsz (wartośćporządkowa 0) true- prawda (wartość porządkowa 1) TYPE znak=BOOLEAN; VAR odp:znak Lub Varodp: BOOLEAN;
Dla zmiennych typulogicznego określone są następujące operatory logiczne: NOT negacja NOT p AND koniunkcja p AND q OR alternatywa p OR q XOR różnica symetryczna p OXR q p q NOT p p AND q p OR q p XOR q 1 1 0 1 1 1 1 0 0 0 1 1 0 1 1 0 1 1 0 0 1 0 0 0 Funkcja Opis Przykład odd(i) Funkcja badająca nieparzystość argumentu, który musi być typu całkowitego Odd(17)=true Odd(24)=false Funkcje standardowe o wartościach typu logicznego
e) Typ znakowy; Typ znakowy obejmuje zbiór znaków alfanumerycznych: cyfr od 1…9, liter a…z A…Z, znaków specjalnych np. (+.-,=,|,*,&,^,@,#.%...) Wartości typu znakowego zapisujemy w apostrofach, np. ‘A’, ‘a’, ‘$’. Każda dam typu znakowego zapamiętywana jest w 1 bajcie pamięci. TYPE znak=Char; lub VAR odp: Char VAR odp: znak; Dla wartości typu znakowego są określone następujące funkcje standardowe:
PROGRAM wizytówka; USES Printer; VAR imie,nazwisko :string[20] kod_miejscowosc :string[30] ulica_nr :string[25] telefon :string[8] Begin WRITE(‘imie : ’); READLN(imie) WRITE(‘nazwisko’) REALDLN(nazwisko) WRITELN(‘telefon :’); READLN(telefon); WRITE(‘podaj kod i miejscowość’); READLN(kod_miejscowości) WRITE(‘podaj ulice i numer mieszkania’); READLN(ulica_nr); WRITELN(Lst,imie,’ ‘,nazwisko); WRITELN(Lst,’ ‘.’ulica ‘,ulica_nr); WRITELN(Lst,kod_miejscowość); WRITELN(Lst,’telefon ‘,telefon); WRITELN(Lst) {przesunięcie papieru o jedne wiersz} END.
Wyrażenie Wynik ‘THM’=‘THM’ true prawda ‘THM’=‘thm’ false fałsz ‘THM’<>’Thm’ true Prawda ‘THM’,’Thm’ true prawda Na zmiennych typu łańcuchowego można wykonywać operacje konkatynacji (dodawania), porównanie, kopiowanie, usuwania. Przykłady konkatenacji łańcuchów napis1 :=‘Technikum ’; napis2 :=‘Hutniczo’ napis3 :=‘Mechaniczne’; Napis4 :=napis1+napis2+’-’+napis3 { napis4=‘Techniikum Hutniczo Mechaniczne’ } Łańcuchy można porównywać za pomocą operatorów relacji (porównywane są kody ASCII poszczególnych znaków łańcucha) : >,<,=,<>,<=,>= Przykłady użycia operatorów realcji:
‘Ostrowiec w’,’Ostrowiec’ false fałsz ‘187’<‘1328’ false fałsz ‘Thm’>=‘THm’ true prawda CONCAT(Ł1,Ł2,Ł3,…ŁN) Wynikiem działaniafunkcji jest łańcuch Ł1+Ł2+Ł3+…Łn COPY(Ł,n,k) Wartość funkcji jest łańcuch o k elementach pobrany z łańcucha Ł począwszy od n znaku LENGHT(Łańcuch) Wartością funkcji jest liczba znaków łańcucha POS(Ł1,Ł2) Wynikiem funkcji najmniejszy numer pozycji w łańcuchu Ł2, od której rozpoczyna się podciąg identyczny z łańcuchem Ł1. Jeśli łańcuch Ł2 nie zawiera podciągu określonego łańcuchem Ł1, to funkcja zwraca wartość 0. Funkcje łańcuchowe (moduł systemu):
DELETE(Ł,n,k) Usuniecie k znaków z łańcucha Ł począwszy od znaku znajdującego się na pozycji n INSERT(Ł1,Ł2,n) • Wstawienie do łańcucha Ł2 przed znak znajdujący się na pozycji n znaków łańcucha Ł1. • Uwaga! • n musi należeć do przedziału [1,255] • Jeśli n>LENGHT(Ł2), to n:=LENGTH(Ł2)+1 • Jeśli wartość wyrażenia LENGHT(Ł1)+LENGHT(Ł2) jest większe od zadeklarowanej max. Długość łańcucha Ł2, to przypisuje się znaki od lewej do prawej odrzucając znaki nadmiarowe STR(wyrL,Ł1) Przekształcenie danej reprezentowanej przez wyrażenie liczbowe wtrL w ciągu znaków, który będzie przypisany zmiennej łańcuchowej Ł. M (typy INTEGER) określa długość cg znaków N (typy INTEGER) określa liczbę cyfr ułamkowych SRT(wyrL:m,Ł) STR(wyrL:m:n,Ł) Val(Ł,x,k) Znaki łańcucha Ł są traktowane jako zapis liczby, która zostaje przypisana znanej x typu INTEGER lub REAL. Jeśli przypisanie, zostało zrealizowane prawidłowo to k=0, jeśli nie to k określa numer znaku w łańcuchu Ł, który umożliwił wykonanie przepisania. Procedury łańcuchowe
4. Typy strukturalne. Tablicowy Typ tablicowy służy do opisu obiektów złożonych, których składowe są tego samego typu. Typ tablicowy w języku programowania wywodzi się z pojęć matematycznych i odpowiada pojęciu wektora n-wymiarowego lub macierzy n-wymiarowej. Przykłady deklaracji typu tablicoweg: Deklaracja tablicy jednowymiarowej Tablica i tablicy dwuwymiarowej Duża_Tablica. TYPE Tablica=ARRAY[1..10] OFBYTE; Duza_TabŁica=ARRAY[1..8] OF ARRAY[1..12] OF CHAR; (* lub Duza_Tablica=ARRAY[1..8,L.12] OF CHAR; *) VAR A: Tablica; B:Duża_Tablica; Dostęp do poszczególnych elementów tablicy uzyskuje się przez użycie indeksów, np. A[23J ,A[kl, B[23,2], B[lt+ik]. Czas dostępu do każdego elementu tablicy jest taki sam. Typ tablicowy jest typem strukturalnym o dostępie bezpośrednim. Przykład odwołania do zmiennej tablicowej: BEGIN FOR i:=l TO m DO FORi:=lTOnDO BEGIN WRIĘLNCPodaj dane'); READLN(A[ij]>; WRITELN(A[ij]>; END END
1 2 3 4 5 6 7 8 21 34 89 90 89 99 76 32 1 21 11 45 65 78 89 122 9 2 211 56 865 786 78 3 21 90 3 43 23 876 321 6 90 87 43 4 2 1 54 677 2 1 89 90 5 6 0 0 5 1 2 67 0 6 Przkład tablicy dwuwymiarowej zawierającej dane typu całkowitego. A(x,y)= kolumny 1,2,3…8 wiersze 1,2,3…6