Programowanie w języku Pascal

Podobne dokumenty
Programowanie w języku Pascal

Programowanie w języku Pascal

Programowanie w języku Pascal

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych:

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 2 WSTĘP DO INFORMATYKI

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

Wykład VII PASCAL - grafika;

typ zakres sposob zapamietania shortint integer bajty (z bitem znaku) longint byte word

Pascal - wprowadzenie

Język programowania PASCAL

Programowanie w Turbo Pascal

Moduł graph w Pascalu

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

Kod źródłowy programu: program Grafika1; uses crt, graph; (1) var sterownik, tryb:smallint; (2)

Programowanie w języku Python. Grażyna Koba

Programowanie Delphi obliczenia, schematy blokowe

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

1 Podstawy c++ w pigułce.

PASCAL Kompendium. Środowisko TURBO PASCAL Skróty klawiaturowe. Edycja kodu Pomoc spis treści. Skopiowanie zaznaczonego bloku do schowka

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

PROGRAMOWANIE W JĘZYKU PYTHON

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

Podstawy programowania

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

Pracownia Komputerowa wykład VI

Podstawy Programowania C++

1 Podstawy c++ w pigułce.

Przykład programu Rozwiązanie równania postaci:

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

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

Wstęp do programowania

Pliki. Operacje na plikach w Pascalu

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

Podstawy Informatyki. Metalurgia, I rok. Wykład 3 Liczby w komputerze

Pascal - grafika. Uruchomienie trybu graficznego. Moduł graph. Domyślny tryb graficzny

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

Podstawy Informatyki

Elementy języków programowania

Instrukcja standardowa Writeln

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}

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy Programowania Podstawowa składnia języka C++

Wprowadzenie komentarzy do programu

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

Wprowadzenie do języka Pascal

Wykład PASCAL - Pliki tekstowe

Baltie 3. Podręcznik do nauki programowania dla klas I III gimnazjum. Tadeusz Sołtys, Bohumír Soukup

Ćwiczenie 2 Wczytywanie i zapisywanie do plików tekstowych

OPERACJE NA PLIKACH. Podstawowe pojęcia:

Języki programowania zasady ich tworzenia

Programowanie w języku C++ Grażyna Koba

INFORMATYKA W SZKOLE. Podyplomowe Studia Pedagogiczne. Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227

Wprowadzenie do architektury komputerów systemy liczbowe, operacje arytmetyczne i logiczne

P R OGRA M OW A N I E KOMPUTERÓW Ćwiczenia laboratoryjne

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

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

2 Przygotował: mgr inż. Maciej Lasota

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Liczby rzeczywiste są reprezentowane w komputerze przez liczby zmiennopozycyjne. Liczbę k można przedstawid w postaci:

Pracownia Komputerowa wyk ad VI

Kompendium wiedzy z Pascala

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Zasady Programowania Strukturalnego

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

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

Algorytmika i Programowanie VBA 1 - podstawy

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

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI

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

LibreOffice Calc VBA

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

Cw.12 JAVAScript w dokumentach HTML

Programowanie komputerowe. Zajęcia 1

Wprowadzenie do programowania w VBA

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

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

Algorytmy i struktury danych

Programowanie. Pascal - język programowania wysokiego poziomu. Klasa 2 Lekcja 9 PASCAL

Wielkości liczbowe. Wykład z Podstaw Informatyki dla I roku BO. Piotr Mika

C++ wprowadzanie zmiennych

Teoretyczne Podstawy Informatyki

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 5 Liczby w komputerze

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

Technologie Informacyjne

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

Metody numeryczne Technika obliczeniowa i symulacyjna Sem. 2, EiT, 2014/2015

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

ARYTMETYKA BINARNA. Dziesiątkowy system pozycyjny nie jest jedynym sposobem kodowania liczb z jakim mamy na co dzień do czynienia.

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

Skrypty powłoki Skrypty Najcz ciej u ywane polecenia w skryptach:

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

INSTRUKCJE PĘTLI, INSTRUKCJA WYBORU. Instrukcja pętli For to do

Kod uzupełnień do dwóch jest najczęściej stosowanym systemem zapisu liczb ujemnych wśród systemów binarnych.

Przedmiot: Urządzenia techniki komputerowej Nauczyciel: Mirosław Ruciński

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Kod IEEE754. IEEE754 (1985) - norma dotycząca zapisu binarnego liczb zmiennopozycyjnych (pojedynczej precyzji) Liczbę binarną o postaci

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

Transkrypt:

Programowanie w języku Pascal Dr inż. Grażyna KRUPIŃSKA grazyna@fis.agh.edu.pl D-10 pokój 227

Prezentacja algorytmu w języku programowania Aby przedstawić algorytm w postaci programu, trzeba go napisać jako ciąg instrukcji języka programowania. Każda instrukcja podobnie jak skrzynka w schemacie blokowym odpowiada określonej operacji, dlatego też kolejność występowania instrukcji w programie określa kolejność wykonywania operacji. Nauka programowania nie polega jednak na nauczeniu się na pamięć instrukcji danego języka, ale na zrozumieniu zasad ich działania oraz na umiejętnym ich zastosowaniu. Programowanie w języku Pascal 08.12.2016 2

Programowanie algorytm rozwiązuje problem program realizuje algorytm komputer wykonuje program Programowanie w języku Pascal 08.12.2016 3

Programowanie ETAPY PROGRAMOWANIA PROBLEM ALGORYTM PROGRAM ŹRÓDŁOWY PROGRAM WYKONYWALNY KOMPUTER 0. WYBÓR-ZNALEZIENIE- OPRACOWANIE ALGORYTMU 1. IMPLEMENTACJA to zapis algorytmu w języku programowania 2. TRANSLACJA to tłumaczenie programu źródłowego na kod maszynowy 3. URUCHOMIENIE programu 4. TESTOWANIE programu Programowanie w języku Pascal 08.12.2016 4

Języki programowania ALGORYTM PROGRAMOWANIE kod źródłowy programu kompilator języka interpreter języka KOMPILACJA kod binarny program wykonywalny Programowanie w języku Pascal 08.12.2016 5

Program źródłowy i wynikowy PROGRAM (KOD) ŹRÓDŁOWY to algorytm zapisany w języku programowania (języku wysokiego poziomu) Przejrzysta struktura (reguły języka) zrozumiały dla człowieka Niezależność od sprzętu PROGRAM (KOD) WYNIKOWY to program zapisany w języku wewnętrznym (maszynowym) procesora Instrukcje odpowiadają instrukcjom konkretnego procesora Programowanie w języku Pascal 08.12.2016 6

Program źródłowy wynikowy TRANSLACJA - tłumaczenie programu źródłowego na kod maszynowy. Używamy do tego programów zwanych translatorami. INTERPRETERY każde polecenie języka wysokiego poziomu jest na bieżąco zamieniane na kod maszynowy i wykonywane (do wykonania programu potrzebne jest uruchomienie interpretera) KOMPILATORY cały program źródłowy jest tłumaczony na kod maszynowy i zapisywany w pliku wykonywalnym (*.exe). Raz skompilowany program jest gotowy do użycia. Programowanie w języku Pascal 08.12.2016 7

Struktura programu w Pascalu program polekola; uses crt; const var pi=3.14; p,r:real; begin end. writeln( pole koła ); writeln('podaj promień'); readln(r); p:=pi*r*r*; nagłówek programu część deklaracyjna część wykonawcza writeln(pole koła wynosi,p:4:2) program nazwa; uses lista modułów; const nazwa=wartość; var lista zmiennych:typ; begin instrukcje programu end. nazwa jest jednym wyrazem (bez spacji) nazwa nie zawiera polskich liter deklaracje modułów moduły to zbiory funkcji i procedur, które możemy wykorzystywać w naszych programach definicje stałych deklaracje zmiennych wszystkie zmienne występujące w programie muszą być wcześniej zadeklarowane Kolejność zapisywania instrukcji odpowiada kolejności wykonywania Instrukcje oddzielamy średnikiem Programowanie w języku Pascal 08.12.2016 8

Zmienne Zmienna jest synonimem pewnego obszaru pamięci, służącego do przechowywania danych. Posiada trzy podstawowe atrybuty: symboliczną nazwę identyfikator, miejsce przechowywania, wartość; Za pomocą nazwy możemy w kodzie źródłowym odwołać się do zawartości. W programie wartość zmiennej może być odczytywana lub zastępowana nową wartością, tak więc wartość zmiennej może zmieniać się w trakcie wykonywania programu. Nazwa i miejsce przechowywania nie zmieniają się w trakcie istnienia zmiennej Programowanie w języku Pascal 08.12.2016 9

Zmienne KAŻDA ZMIENNA UŻYWANA W PROGRAMIE MUSI BYĆ ZADEKLAROWANA dla każdej zadeklarowanej zmiennej rezerwowany jest fragment pamięci o określonym adresie i wielkości zmiennym nadajemy wartości wczytując je z klawiatury lub pliku używając instrukcji przypisania przypisując nową wartość zmiennej automatycznie kasujemy starą Programowanie w języku Pascal 08.12.2016 10

Podstawowe typy danych PREDEFINIOWALNE TYPY DANYCH liczby całkowite INTEGER liczby rzeczywiste REAL wartości logiczne BOOLEAN = {TRUE, FALSE} wartości znakowe CHAR łańcuchy STRING STRING[n] łańcuch ograniczony do n znaków Programowanie w języku Pascal 08.12.2016 11

Notacja nadmiarowa Wartość dziesiętna liczby zapisanej w dwójkowym kodzie z nadmiarem b n-1 b n-2...b 2 b 1 b 0 (BIAS) = b n-1 2 n-1 + b n-2 2 n-2 +... + b 2 2 2 + b 1 2 1 + b 0 2 0 - bias gdzie b - bit, cyfra dwójkowa 0 lub 1 n - liczba bitów w zapisie liczby bias - nadmiar, odchyłka w stosunku do naturalnych wartości słów kodowych 00011111 (BIAS=63) = 2 4 + 2 3 + 2 2 + 2 1 + 2 0-63 00011111 (BIAS=63) = 31-63 00011111 (BIAS=63) = (-32) (10) Programowanie w języku Pascal 08.12.2016 12

Liczby duże i małe Zapisywanie liczb oznaczających bardzo duże lub bardzo małe wartości notacja naukowa. Gwiazda Proxima Centauri znajduje się w odległości 9460800000000 [km], 9,4608 x 1012. Masa elektronu wynosi me = 0,00000000000000000000000000091095 [g], czyli 9,1095 x 10-28 [g] Programowanie w języku Pascal 08.12.2016 13

Zapis zmiennopozycyjny Liczba w tym zapisie składa się z trzech części: liczby stałoprzecinkowej podstawy systemu potęgi zwanej wykładnikiem lub cechą. L = m * p c m mantysa p podstawa systemu c cecha - wykładnik potęgowy Programowanie w języku Pascal 08.12.2016 14

Zapis zmiennopozycyjny L = m * p c 325 10 20 = 32,5 10 21 = 3,25 10 22 = 0,325 10 23 = dokładność liczby wielkość liczby Znormalizowana liczba zmiennoprzecinkowa to taka, w której mantysa spełnia nierówność: p > m 1 Programowanie w języku Pascal 08.12.2016 15

Zapis zmiennopozycyjny L = m * p c Przykład 8-bitowy zapis liczby 01101101 bit znaku; cecha kodowana z nadmiarem 4 na 3 bitach; mantysa na 4 bitach; 0 1 1 0 1 1 0 1 liczba dodatnia cecha 110 (BIAS=4) =6-4=2 mantysa.1101 11.01 czyli 3 1 4 Programowanie w języku Pascal 08.12.2016 16

Zapis zmiennopozycyjny L = m * p c Przykład 8-bitowy zapis liczby 10111100 1 0 1 1 1 1 0 0 liczba ujemna cecha 011 (BIAS=4) =3-4=-1 mantysa.1100 0.1100 czyli 3 8 Programowanie w języku Pascal 08.12.2016 17

Zapis zmiennopozycyjny L = m * p c Przykład +2 3 4 1 0. 1 1 0 1 0 1 1 cecha powinna mieć wartość 2, (2 + 4 = 6) czyli 110 (BIAS=4) 0 1 1 0 1 0 1 1 Programowanie w języku Pascal 08.12.2016 18

L = m * p c Zapis zmiennopozycyjny Przykład 2.625= 2 5 8 1 0. 1 0 1 utracony bit 0 1 0 1 0 cecha powinna mieć wartość 2, (2 + 4 = 6) czyli 110 (BIAS=4) 0 1 1 0 1 0 1 0 czyli 2 4 8 a nie 2 5 8 Programowanie w języku Pascal 08.12.2016 19

Standard zapisu zmiennoprzecinkowego IEEE 754 Standard IEEE 754 definiuje dwa rodzaje liczb zmiennoprzecinkowych: 32-bitowe (pojedynczej precyzji - ang. single precision) 64-bitowe (podwójnej precyzji - ang. double precision). Format zapisu zmiennoprzecinkowego IEEE 754 32 bity (1 bit) b 31 (8 bitów) b 30... b 23 (BIAS=127) (23 bity)b 22... b 0 (U1) 64 bity (1 bit) b 63 (11 bitów) b 62... b 52 (BIAS=1023) (52 bity)b 51... b 0 (U1) Opis pół bitowych L = m * p c bit znaku bity kodu cechy bity mantysy Programowanie w języku Pascal 08.12.2016 20

Standard zapisu Zapis cechy w notacji nadmiarowej umożliwia szybkie porównywanie liczb: większa ma 1-kę na pierwszym od lewej różniącym się polu: zmiennoprzecinkowego 00101010 > 00011001 IEEE 754 Format zapisu zmiennoprzecinkowego IEEE 754 32 bity (1 bit) b 31 (8 bitów) b 30... b 23 (BIAS=127) (23 bity)b 22... b 0 (U1) 64 bity (1 bit) b 63 (11 bitów) b 62... b 52 (BIAS=1023) (52 bity)b 51... b 0 (U1) Opis pół bitowych bit znaku bity kodu cechy bity mantysy Wzrost ilości bitów cech liczb zmiennoprzecinkowych wpływa na ich zakres. L = m * p c Wzrost liczby bitów mantys wpływa na ich precyzję, czyli dokładność odwzorowywania liczb rzeczywistych. Programowanie w języku Pascal 08.12.2016 21

Standard zapisu zmiennoprzecinkowego IEEE 754 Mantysy są zapisywane w stałoprzecinkowym kodzie U1. (wartości od -127 wszystkie bity wyzerowane do 128 wszystkie bity ustawione na 1) Mantysa jest prawie zawsze znormalizowana (p>m 1 ) - jej wartość liczbowa zawiera się pomiędzy 1 a 2. Pierwszy bit całkowity mantysy zawsze wynosi 1 => zapamiętujemy tylko bity ułamkowe. Mantysa dłuższa o jeden bit - zwiększamy jej rozdzielczość do 24 bitów dla formatu pojedynczej precyzji i do 53 bitów dla formatu podwójnej precyzji. Programowanie w języku Pascal 08.12.2016 22

Standard zapisu zmiennoprzecinkowego IEEE 754 Format zapisu zmiennoprzecinkowego IEEE 754 32 bity (1 bit) b 31 (8 bitów) b 30... b 23 (BIAS=127) (23 bity)b 22... b 0 (U1) Mantysy są zapisywane w stałoprzecinkowym kodzie U1. (wartości od -127 wszystkie bity wyzerowane do 128 wszystkie bity ustawione na 1) 64 bity (1 bit) b 63 (11 bitów) b 62... b 52 (BIAS=1023) (52 bity)b 51... b 0 (U1) Opis Mantysa pół jest prawie zawsze znormalizowana bity (p>m 1 ułamkowe ) - bit znaku bity kodu cechy bity mantysy bitowych jej wartość liczbowa zawiera się pomiędzy 1 a 2. mantysy Pierwszy bit całkowity mantysy zawsze wynosi 1 => zapamiętujemy tylko bity ułamkowe. Mantysa dłuższa o jeden bit - zwiększamy jej rozdzielczość do 24 bitów dla formatu pojedynczej precyzji i do 53 bitów dla formatu podwójnej precyzji. Programowanie w języku Pascal 08.12.2016 23

Standard zapisu zmiennoprzecinkowego IEEE 754 Z kodu wydzielamy poszczególne pola Do odczytanej mantysy dodajemy na początku 01 i przecinek - otrzymujemy dodatnią liczbę stałoprzecinkową w kodzie U1. Obliczamy wartość cechy i mantysy, a następnie wyliczamy wartość liczby wg wzoru: L (IEEE 754) = m * p c = (-1) z *m*2 c 01000010110010000000000000000000 10010000000000000000000 (IEEE 754) ) z = 0 - liczba jest dodatnia c = 10000101 (BIAS=127) = 133-127 = 6 m = 01,10010000000000000000000 (U1) = 1 9 / 16 Programowanie w języku Pascal 08.12.2016 24

Standard zapisu zmiennoprzecinkowego IEEE 754 Z kodu wydzielamy poszczególne pola L (IEEE 754) = (-1) z * m * 2 c = (-1) 0 * 1 9 / 16 * 2 6 = 25 / 16 * 2 6 = Do 25 odczytanej * 2 2 = 25 * 4 mantysy = 100 (10) dodajemy na początku 01 i przecinek - 01000010110010000000000000000000 otrzymujemy dodatnią liczbę stałoprzecinkową (IEEE w 754) kodzie = 100 U1. (10) Obliczamy wartość cechy i mantysy, a następnie wyliczamy wartość liczby wg wzoru: L (IEEE 754) = m * p c = (-1) z *m*2 c 01000010110010000000000000000000 10010000000000000000000 (IEEE 754) ) z = 0 - liczba jest dodatnia c = 10000101 (BIAS=127) = 133-127 = 6 m = 01,10010000000000000000000 (U1) = 1 9 / 16 Programowanie w języku Pascal 08.12.2016 25

Zakres w standardzie IEEE 754 Największa cecha i mantysa cecha 11111110 (BIAS=127) c = 254-127 c = 127 11111111 (BIAS=127) wartość zdenormalizowana mantysa 11111111111111111111111 (U1) m = 01, 11111111111111111111111 (U1) m = 1+ (2 23-1) / 2 23 = (2 24-1) / 2 23 max (IEEE 754) = m 2 c max (IEEE 754) = (2 24-1) / 2 23 2 127 max (IEEE 754) = (2 24-1) 2 104 max (IEEE 754) = 3,4028234663852885981170418348452 10 38 Programowanie w języku Pascal 08.12.2016 26

Zakres w standardzie IEEE 754 W pojedynczej precyzji Z (IEEE 754) = - 3,4 10 38... 3,4 10 38 W podwójnej precyzji Z (IEEE 754) = - 1,8 10 308... 1,8 10 308 Programowanie w języku Pascal 08.12.2016 27

Precyzja liczb IEEE 754 Precyzję zapisu liczby zawsze wyznacza ilość dostępnych bitów mantysy. Jedną cyfrę dziesiętną koduje (statystycznie) log 2 (10) bitów mantysy W pojedynczej precyzji - 24 bity mantysy 24 / log 2 (10) = 24 / 3,32 = 7,2 cyfr W podwójnej precyzji - 53 bity mantysy 53 bity / log 2 (10) = 53 bity / 3,32 = 15,96 cyfr Programowanie w języku Pascal 08.12.2016 28

Przykład komórka zawierająca zapis 0 1 0 0 0 0 0 1 może oznaczać: liczbę 65 lub kod litery A typ Rodzaj danych Zakres wartości rozmiar char znaki Znaki alfabetu ASCII 1 bajt boolean wartości logiczne TRUE/FALSE 1 bajt byte Liczby naturalne [0;255] 1 bajt shortint Liczby całkowite [-128;127] 1 bajt word Liczby naturalne [0;65 535] 2 bajty integer Liczby całkowite [-32 768;32 767] 2 bajty long Liczby całkowite [-2147483648;2147483647] 4 bajty real Liczby rzeczywiste (-1,7 38 ;1,7 38) 11-12 cyfr znaczących 6 bajtów single Liczby rzeczywiste (-3,4 38 ;3,4 38 ) 7-8 cyfr znaczących 4 bajtów double Liczby rzeczywiste (-1,7 308 ;1,7 308) 15-16 cyfr znaczących 8 bajtów extended Liczby rzeczywiste (-1,1 4932 ;1,1 4392) 19-20 cyfr znaczących 10bajtów Programowanie w języku Pascal 08.12.2016 29

Instrukcje wejścia Służą do wprowadzania danych do programu Read(lista zmiennych); Readln(lista zmiennych); wczytanie ( z klawiatury) zmiennych wymienionych w nawiasie wczytanie ( z klawiatury) zmiennych wymienionych w nawiasie, a następnie przeniesienie kursora do następnej linii Programowanie w języku Pascal 08.12.2016 30

Wprowadź z Służą do wprowadzania danych do programu Przykład dla zmiennych x, y, z, t wprowadzamy odpowiednio wartości 4 12 6 8 read(x,y); read(z); read(t); readln(x,y); readln(z); read(t); Instrukcja Sposób wprowadzenia (ekran) 4 12 6 8 <ENTER> 4 12 <ENTER> 5 <ENTER> 8 <ENTER> Programowanie w języku Pascal 08.12.2016 31

Instrukcje wyjścia Służą do wyprowadzania wyników lub komunikatów Write(lista zmiennych); Writeln(lista zmiennych); wypisanie wartości zmiennych wymienionych w nawiasie wypisanie wartości zmiennych wymienionych w nawiasie, a następnie przeniesienie kursora do następnej linii Writeln( tekst komunikatu ); Tekst ujęty w apostrofach zostanie wypisany na ekranie Programowanie w języku Pascal 08.12.2016 32

Wypisz j Przykład dla zmiennych i, j, k o wartościach 12, 4 i 78 Instrukcja write( oto liczby: ); write(i); write(j); write(k); writeln( oto liczby: ); write(i); writeln(j); write(k); Sposób wyprowadzenia (ekran) oto liczby: 12 4 78 oto liczby: 12 4 78 Programowanie w języku Pascal 08.12.2016 33

Formatowanie wydruku liczby całkowite: writeln(zmienna:l_cyfr) l_cyfr - długość liczby (w znakach), Przykład dla zmiennych n = 153, k = 76 Instrukcja Ekran Write(n,k); 15376 Write(n:3,k:3); 153 76 Write(n:5,k:5); 153 76 Programowanie w języku Pascal 08.12.2016 34

Formatowanie wydruku liczby rzeczywiste: writeln(zmienna:l_cyfr :c_dzies) l_cyfr - długość liczby (w znakach) łącznie z przecinkiem c_dzies liczba cyfr po przecinku Przykład dla zmiennej x=9,75 Instrukcja Write(X); Ekran 9.7500000E+00 Write(x:4:2) 9.75 Write(x:3:1) 9.8 Write(x:5:1) 9.8 Write(x:8:4) 9.7500 Programowanie w języku Pascal 08.12.2016 35

Instrukcja przypisania Służy do nadawania wartości zmiennym przez program zmienna := wyrażenie; S a + b wyrażenie (wzór) to zapis obliczeń składający się ze zmiennych, operatorów działań i funkcji wartość obliczona na podstawie wyrażenia zostanie przypisana zmiennej typ zmiennej musi być zgodny z typem wyrażenia Programowanie w języku Pascal 08.12.2016 36

Instrukcja przypisania Służy do nadawania wartości zmiennym przez program Operacje arytmetyczne + dodawanie - odejmowanie * mnożenie / dzielenie rzeczywiste przykład: 7/2=3,5 div dzielenie całkowite przykład: 7 div 3 = 2 mod reszta z dzielenia całkowitego przykład: 7 mod 3 = 1 Programowanie w języku Pascal 08.12.2016 37

Budowa wyrażeń Zasady zapisu: wszystkie działania muszą być jawne np. y:=2*a a nie y:=2a do grupowania działań służy nawias zwykły np y:=1/((1/x)+1) Kolejność działań: wartości funkcji wyrażenia w nawiasach mnożenie i dzielenie dodawanie i odejmowanie Programowanie w języku Pascal 08.12.2016 38

a 2 b h Budowa wyrażeń (a+b)/2*h a b cd a b c d (a+b)/c*d (a+b)/(c*d) 1 x 2 1 1/sqrt(x*x+1) 2 sin cos 2 2 2*sin((a+b)/2)*cos((a-b)/2) Programowanie w języku Pascal 08.12.2016 39

Funkcje standardowe abs(x) - wartość bezwzględna sqr(x) - kwadrat sqrt(x) - pierwiastek kwadratowy ln(x) - logarytm naturalny z x exp(x) - e x sin(x) - sinus (x w radianach) cos(x) - cosinus (x w radianach) arctan(x) - arcus tangens x (wynik w mierze łukowej) round(x) - zaokrąglenie do najbliższej liczby całkowitej round(7.67)=8 trunc(x) - obcięcie części ułamkowej trunc(7.67)=7 Programowanie w języku Pascal 08.12.2016 40

Instrukcja warunkowa Pozwala na podjęcie decyzji, którą instrukcję ma wykonać w zależności od postawionego warunku a 0 Tak Nie wynik a wynik -a Wypisz wynik Programowanie w języku Pascal 08.12.2016 41

Instrukcja warunkowa Pozwala na podjęcie decyzji, którą instrukcję ma wykonać w zależności od postawionego warunku a 0 Tak Nie wynik a wynik -a IF warunek THEN instrukcje_gdy_tak Wypisz wynik - wykonywana jest gdy warunek jest spełniony ELSE instrukcje_gdy_nie; - wykonywana jest gdy warunek nie jest spełniony Programowanie w języku Pascal 08.12.2016 42

Instrukcja warunkowa Pozwala na podjęcie decyzji, którą instrukcję ma wykonać w zależności od postawionego warunku Przykład 1: if (x=1) then y:=0.5*x*x-4 else y:=1/(x-1); Przykład 2: Readln(x); if (x<0) then x:=x*(-1); Writeln( wartość bezwzględna=,x); Programowanie w języku Pascal 08.12.2016 43

Warunek, operacja, operator IF warunek THEN... warunek czyli wyrażenie logiczne wyrażenie logiczne (warunek) to zapis warunku przy użyciu operatorów relacji lub operacji logicznych wyrażenie logiczne przyjmuje wartość TRUE lub FALSE (może być fałszywe lub prawdziwe) Programowanie w języku Pascal 08.12.2016 44

Warunek, operacja, operatory relacji = - równe <> - różne < - mniejsze > - większe <= - mniejsze lub równe >= - większe lub równe operator operacje logiczne not and - negacja - iloczyn logiczny or - suma logiczna przykłady wyrażeń logicznych a > b ( a > b ) or ( a > c ) ( a <> 0 ) and ( ( a> b ) or ( a > c ) ) Programowanie w języku Pascal 08.12.2016 45

Instrukcja złożona Służy do grupowania kilku instrukcji w celu łącznego wykonania (lub nie wykonania) begin... instrukcje programu;... end; Programowanie w języku Pascal 08.12.2016 46

Instrukcja złożona Instrukcja warunkowa IF...THEN..ELSE sama z siebie domyślnie warunkiem (na tak lub nie) obejmuje tylko jedną instrukcję programu if x=0 then writeln( y nie istnieje ) else y:=1/x; writeln( y=,y:5:2); if x<>0 then writeln( y nie istnieje ); else begin y:=1/x; writeln( y=,y:5:2) end; elementem instrukcji warunkowej jest tylko y:=1/x; writeln( y=,y:5:2); wykona się niezależnie od wartości x Obie instrukcje zostaną wykonane (lub nie) - zależnie od wartości x Programowanie w języku Pascal 08.12.2016 47

Instrukcja wyboru Pozwala na wybór jednej spośród kilku instrukcji w zależności od wartości wyrażenia sterującego (selektora) CASE (wyrażenie) OF w 1 :instrukcja 1; w 2 :instrukcja 2; w 3 :instrukcja 3;... END; obliczana jest wartość wyrażenia w nawiasie wyrażenie musi być typu całkowitego lub znakowego wykonywana jest instrukcja odpowiadająca obliczonej wartości jeżeli obliczonej wartości wyrażenia nie ma na liście nie zostanie wykonana żadna z instrukcji gdy dla jednej wartości wyrażenia należy wykonać kilka instrukcji stosujemy instrukcję złożoną (begin... end) Programowanie w języku Pascal 08.12.2016 48

Instrukcja wyboru Pozwala na wybór jednej spośród kilku instrukcji w zależności od wartości wyrażenia sterującego (selektora) Case (kont div 90+1) of 1:writeln( pierwsza ćwiartka ); 2:writeln( druga ćwiartka ); 3:writeln( trzecia ćwiartka ); 4:writeln( czwarta ćwiartka ); end; Obliczane jest wyrażenie (kont div 90)+1 Wykonywana jest instrukcja informująca do której ćwiartki należy wartość kont Programowanie w języku Pascal 08.12.2016 49

Instrukcja iteracyjna FOR Pozwala na powtarzanie instrukcji określoną ilość razy S 0 L N Tak L > 0 Nie S S + L L L 1 Pisz S Programowanie w języku Pascal 08.12.2016 50

Instrukcja iteracyjna FOR S 0 L N Tak L > 0 Nie FOR zmienna:=wart.początkowa TO wart. końcowa DO instrukcja; S S + L L L 1 Pisz S FOR zmienna:=wart.początkowa DOWNTO wart. końcowa DO instrukcja; Po każdym wykonaniu instrukcji zmienna jest automatycznie modyfikowana o 1 zmienna musi być typu całkowitego w górę dla TO w dół dla DOWNTO Instrukcja wykonywana jest tyle razy aby zmienna startując od wartości początkowej osiągnęła wartość końcową Programowanie w języku Pascal 08.12.2016 51

Instrukcja iteracyjna FOR Pozwala na powtarzanie instrukcji określoną ilość razy for i:=1 to 10 do suma:=suma+i; for i:=1 to 10 do begin write( liczba= ); readln(liczba); suma:=suma+liczba; end; gdy pętlą jest objętych kilka instrukcji (linijek) trzeba stosować instrukcję złożoną Programowanie w języku Pascal 08.12.2016 52

Instrukcja cykliczna repeat...until Pozwala na powtarzanie instrukcji nieokreśloną ilość razy aż do spełnienia zadanego warunku Tak Czytaj Liczba S <=30 Nie Wypisz Liczba Pisz S S S + Liczba Programowanie w języku Pascal 08.12.2016 53

Instrukcja cykliczna repeat...until Pozwala na powtarzanie instrukcji nieokreśloną ilość razy aż do spełnienia zadanego warunku REPEAT instrukcja; UNTIL warunek; instrukcja (instrukcje) umieszczone wewnątrz pętli będą wykonywane dopóki warunek nie zostanie spełniony; po spełnieniu warunku program opuści pętlę repeat write( liczba= ); readln(liczba); suma:=suma+liczba; until suma<=100; najpierw wykonywana jest instrukcja, a później sprawdzany jest warunek między słowami kluczowymi repeat...until możemy umieścić kilka instrukcji - powtarzane są wszystkie Programowanie w języku Pascal 08.12.2016 54

Instrukcja cykliczna while...do Pozwala na powtarzanie instrukcji nieokreśloną ilość razy tak długo jak długo warunek jest spełniony WHILE warunek DO instrukcja; instrukcja jest powtarzana tak długo jak długo jest spełniony warunek gdy warunek nie będzie spełniony program opuści pętlę najpierw sprawdzany jest warunek, a później wykonywana jest instrukcja Programowanie w języku Pascal 08.12.2016 55

Instrukcja cykliczna while...do Pozwala na powtarzanie instrukcji nieokreśloną ilość razy tak długo jak długo warunek jest spełniony while (a*b)<>0 do if a>b then a:=a mod b else b:=b mod a; while suma<100 do begin write( liczba= ); readln(liczba); suma:=suma+liczba; end; gdy warunkiem jest objętych kilka instrukcji (linijek) trzeba stosować instrukcję złożoną Programowanie w języku Pascal 08.12.2016 56

Tablice - wstęp Służą do przechowywania ustalonej liczby elementów (liczb całkowitych, rzeczywistych lub znaków) tego samego typu. tablica posiada nazwę każde pole tablicy posiada numer (indeks) nazwa nr pola liczby 1 1 2 3 5 8 13 21 34 55 1 2 3 4 5 6 7 8 9 10 Dostęp do każdego elementu tablicy uzyskujemy poprzez nazwę (tablicy) i numer Przykład odwołanie się do elementu tablicy: liczby[2]=1 liczby[6]=8 Programowanie w języku 08.12.2016 57

Tablice - deklaracje deklaracja klasyczna definicja 10 elementowej tablicy liczb całkowitych o nazwie liczby var liczby:array[1..10] of integer; nazwa rozmiar typ elementów Rozmiar tablicy musi być stałą liczbą całkowitą Programowanie w języku 08.12.2016 58

Tablice- deklaracje Można również zdefiniować tablicę o określonym rozmiarze jako nowy typ danych, a następnie zadeklarować zmienną tego typu program przykład; type tablica=array[1..10] of integer; definicja typu danych tablica var liczby:tablica;... deklaracja zmiennej typu tablica Programowanie w języku 08.12.2016 59

Tablice - odwołania do elementów Nadawanie wartości: poprzez wczytanie z klawiatury: read (liczby[i]); poprzez instrukcję przypisania : liczby[i]:=wyrażenie; Przypisywanie wartości całej tablicy wykonujemy nadając wartość każdemu elementowi z osobna Lub For i:=1 to 10 do liczby[i]:=wyrażenie; For i:=1 to 10 do readln (liczby[i]); 08.12.2016 60

Tablice - odwołania do elementów Wyprowadzanie wartości elementów tablicy również każdy element osobno For i:=1 to 10 do write (liczby[i]); Programowanie w języku 08.12.2016 61

Łańcuchy Służą do przechowywania ciągu znaków (w tym spacji). Łańcuchy mogą mieć do 255 znaków. deklaracja zmiennej łańcuchowej: var nazwa:string[liczba znaków]; - gdy brak liczby znaków Pascal przyjmie 255 Przykład deklaracja 30 znakowego łańcucha o nazwie wyraz var wyraz:string[30]; Programowanie w języku 08.12.2016 62

Łańcuchy Łańcuchy możemy traktować jak tablice znaków wyraz = parowóz to wyraz[1]= p wyraz[4]= o Wprowadzanie zawartości łańcucha przez wczytanie z klawiatury readln(wyraz); instrukcja przypisania wyraz:= parowóz tekst musi być ujęty w pojedyncze apostrofy Programowanie w języku 08.12.2016 63

Łańcuchy - funkcje i procedury length(łańcuch) określenie długości łańcucha (liczba znaków) length( parowoz )=7 pos(podłańcuch, łańcuch) określenie pozycji od której zaczyna się podłańcuch pos( men, dokumentacja )=5 Programowanie w języku 08.12.2016 64

Łańcuchy - funkcje i procedury concat(łańcuch1,łańcuch2,...) połączenie kilku łańcuchów w jeden copy(łańcuch,indeks,licznik) skopiowanie z łańcucha licznik znaków począwszy od indeks copy( dyrygent,5,3) oznacza gen Programowanie w języku 08.12.2016 65

Łańcuchy - funkcje i procedury delete(łańcuch,indeks,licznik) usunięcie z łańcucha licznik znaków począwszy od indeks delete( telefon,1,4) da w wyniku fon insert(podłańcuch,łańcuch,indeks) wstawienie podłańcucha do łańcucha na określonym przez indeks miejscu insert( promujemy, gra,4) da w wyniku programujemy Programowanie w języku 08.12.2016 66

Łańcuchy - funkcje i procedury Zamiana liczba - łańcuch Val(łańcuch,liczba,kod)- zamiana łańcucha na liczbę (kod<>0 oznacza błąd) Str(liczba,łańcuch) zamiana liczby na łańcuch Programowanie w języku 08.12.2016 67

Tablice dwuwymiarowe Służą do przechowywania ustalonej liczby elementów (liczb całkowitych, rzeczywistych lub znaków) tego samego typu. 1 7 2 13 5 8 3 21 89 55 wiersze 10 1 6 31 7 0 32 51 34 28 88 0 14 3 111 5 714 29 38 51 44 15 7 22 58 87 13 33 59 8 kolumny każde pole posiada dwa indeksy odwołanie do elementu tablicy wygląda tak: nazwa[wiersz, kolumna] tablica[1,3]=2 tablica[2,1]=10 tablica[4,10]=8 Programowanie w języku 08.12.2016 68

Tablice dwuwymiarowe deklaracja klasyczna tablica liczb całkowitych złożona z : 4 wierszy i 10 kolumn o nazwie tabliczka var tabliczka:array[1..4, 1..10] of integer; nazwa l.wierszy, l.kolumn typ elementów Programowanie w języku 08.12.2016 69

Tablice dwuwymiarowe Przypisywanie wartości całej tablicy w podwójnej pętli for i:=1 to 4 do for j:=1 to 10 do tabliczka[i,j]:=wyrażenie; Lub for i:=1 to 4 do for j:=1 to 10 do readln(tabliczka[i,j]); Wyprowadzanie wartości elementów tablicy for i:=1 to 4 do for j:=1 to 10 do write(tabliczka[i,j]); Programowanie w języku 08.12.2016 70

Podprogramy Pewne obliczenia (zestawy instrukcji) mogą być wykonywane w programie wielokrotnie dla takich samych lub innych danych. Korzystne jest wydzielenie takich fragmentów w postaci podprogramów. Podprogram służy do wyodrębnienie pewnego fragmentu programu, stanowiącego pewną całość logiczną w całość fizyczną identyfikowaną za pomocą nazwy. Taki podprogram może być wywołany w wielu miejscach programu. Programowanie w języku 08.12.2016 71

Podprogramy Pascal posiada dwa rodzaje podprogramów Procedury używane do wykonania przez program jakiejś złożonej czynności np. wczytanie lub wydrukowanie zawartości tablicy, wyczyszczenie ekranu itp. Funkcje wykonują zespół instrukcji, którego efektem jest obliczenie jakiejś wartości ( być może poprzez wykonanie wielu rachunków elementarnych) Programowanie w języku 08.12.2016 72

Definicja procedury: procedure nazwa(lista parametrów); var lista zmiennych; begin zestaw instrukcji; end; Procedury Zdefiniowaną procedurę wywołujemy w programie podając jej nazwę z listą parametrów Program TakieCosTam; uses crt; type type Tablica=array[1..10] of real; Tablica=array[1..10] of real; procedure CzytajTablice(var t:tablica); var var i:integer; begin a,b,c,d:tablica; for i:=1 to 10 do Begin begin ClrScr; write( t[,i:2, ]= ); for readln(t[i]); i:=1 to 10 do end; begin end; write( a[,i:2, ]= ); readln(a[i]); write( b[,i:2, ]= ); var readln(b[i]); a, b, write( c[,i:2, ]= ); c, d:tablica; Begin readln(c[i]); ClrScr; write( c[,i:2, ]= ); CzytajTablice(a); readln(c[i]); CzytajTablice(b); CzytajTablice(c); CzytajTablice(d); end; Programowanie w języku end. 08.12.2016 73

Procedury Program TakieCosTam; uses crt; type Tablica=array[1..10] of real; Definicja procedury: procedure nazwa(lista parametrów); var lista zmiennych; begin zestaw instrukcji; end; procedure CzytajTablice(var t:tablica); var i:integer; begin for i:=1 to 10 do begin write( t[,i:2, ]= ); readln(t[i]); end; end; Zdefiniowaną procedurę wywołujemy w programie podając jej nazwę z listą parametrów var a, b, c, d:tablica; Begin ClrScr; CzytajTablice(a); CzytajTablice(b); CzytajTablice(c); CzytajTablice(d); Programowanie w języku end. 08.12.2016 74

Definicja funkcji: function nazwa(lista parametrów):typ funkcji; var lista zmiennych; begin zestaw instrukcji; nazwa:=wyrażenie; end; Typ funkcji to typ wartości obliczanej przez funkcję Funkcje W zestawie instrukcji musi pojawić się instrukcja przypisania wartości obliczanej przez funkcję Funkcję wywołujemy w programie używając jej (z listą parametrów) w instrukcji przypisania Program TakieCosTam; uses crt; function maks(x,y:real):real; begin if x>y then maks:=x else maks:=y; end; var a,b,c:real; begin ClrScr; readln(a); readln(b); c:=maks(a,b);... end. Programowanie w języku 08.12.2016 75

Zmienne globalne i lokalne Pascal wymaga zadeklarowania każdej zmiennej poprzez podanie jej nazwy i typu jest to związane przydzieleniem dla niej miejsca w pamięci operacyjnej W programie głównym deklarujemy zmienne globalne to znaczy takie które są widoczne w całym programie (zmienne globalne mają przydzieloną pamięć przez cały czas pracy programu) W procedurach i funkcjach deklarujemy zmienne lokalne widziane tylko przez podprogram w programie głównym nie są one widoczne (zmienne lokalne mają pamięć przydzieloną tylko na czas wykonywania podprogramu po jego wykonaniu pamięć jest zwalniana a wartość zmiennej ulega zagubieniu) Programowanie w języku 08.12.2016 76

Przekazywanie parametrów Pascal pozwala przekazywać parametry do procedur i funkcji na dwa sposoby przez wartość procedure pisz(t:tablica); var i:integer; begin for i:=1 to 10 do writeln(t[i]); end; wartości parametrów są kopiowane do zmiennych lokalnych po zakończeniu procedury zmiany ulegają zapomnieniu (pozostaje wartość pierwotna parametru) przez zmienną procedure czytaj(var t:tablica); var i:integer; begin for i:=1 to 10 do readln(t[i]); end; procedura otrzymuje dostęp do zmiennej globalnej (adres w pamięci operacyjnej) wprowadzone zmiany pozostają po wykonaniu procedury Programowanie w języku 08.12.2016 77

Przykład komórka zawierająca zapis 0 1 0 0 0 0 0 1 może oznaczać: liczbę 65 lub kod litery A typ Rodzaj danych Zakres wartości rozmiar char znaki Znaki alfabetu ASCII 1 bajt boolean wartości logiczne TRUE/FALSE 1 bajt byte Liczby naturalne [0;255] 1 bajt shortint Liczby całkowite [-128;127] 1 bajt word Liczby naturalne [0;65 535] 2 bajty integer Liczby całkowite [-32 768;32 767] 2 bajty long Liczby całkowite [-2147483648;2147483647] 4 bajty real Liczby rzeczywiste (-1,7 38 ;1,7 38) 11-12 cyfr znaczących 6 bajtów single Liczby rzeczywiste (-3,4 38 ;3,4 38 ) 7-8 cyfr znaczących 4 bajtów double Liczby rzeczywiste (-1,7 308 ;1,7 308) 15-16 cyfr znaczących 8 bajtów extended Liczby rzeczywiste (-1,1 4932 ;1,1 4392) 19-20 cyfr znaczących 10bajtów Programowanie w języku 08.12.2016 78

Deklaracja własnych typów danych Oprócz standardowych typów danych użytkownik może definiować własne Definicję rozpoczynamy kluczowym słowem TYPE Po którym następuje definicja: nazwa_typu=opis_typu; Programowanie w języku 08.12.2016 79

Deklaracja własnych typów danych Przykład: definiujemy typ napisowy o długości 20 znaków: tekst20=string[20]; definiujemy 10 elementową tablicę liczb całkowitych tab10int=array[1..10] of integer; Po zdefiniowaniu typu deklarujemy zmienną, która będzie ten typ wykorzystywała type tekst=string[30]; var komunikat:tekst; begin komunikat:= wszystko gra ;... Programowanie w języku 08.12.2016 80

Typ wyliczeniowych Używany jest gdy pewne wartości stałe używane w programie mają odpowiedniki tekstowe [identyfikatory]: type nazwa_typu =(lista identyfikatorów); Przykładem mogą być oceny... 1)Wykaz identyfikatorów <=255 pozycji 2)Nie mogą być słowami zastrzeżonymi 3)Są ponumerowane od 0 do n-1 type oceny=(niedostateczny,dopuszczajacy,dostateczny,dobry,bardzo_dobry,celujacy); var odp, kl, pk : oceny; Programowanie w języku 08.12.2016 81

Typ wyliczeniowych Używany jest gdy pewne wartości stałe używane w programie mają odpowiedniki tekstowe [identyfikatory]: Dostępne funkcje: ORD(identyfikator) zwraca numer identyfikatora ORD( dobry )=3 PRED(identyfikator) zwraca poprzedni identyfikator PRED( dobry )= dostateczny SUCC(identyfikator) - zwraca następny identyfikator SUCC( dobry )= bardzo _dobry Programowanie w języku 08.12.2016 82

Typ okrojony Dotyczy konkretnego typu bazowego. Zbiór wartości typu okrojonego jest podzbiorem zbioru wartości typu bazowego. Definiujemy jak każdy inny typ użytkownika (potem deklarujemy zmienną nowozdefiniowanego typu) Możemy zdefiniować typ podczas deklarowania zmiennych type miesiac=1..12; var mc_ur : miesiac; var mc_ur : 1..12; dz_ur : 1..31; Próba nadania zmiennej typu okrojonego wartości spoza zakresu kończy się błędem wykonania Programowanie w języku 08.12.2016 83

Rekordy dostęp do pól Rekord jest zmienną złożoną [strukturą] służącą do przechowywania danych różnego typu. Każde pole ma nazwę Każde pole ma określony typ danych,które przechowuje rekord data rekord osoba dzień l.całkowita miesiąc l.całkowita rok l.całkowita nazwisko łańcuch imię łańcuch wiek l.całkowita Programowanie w języku 08.12.2016 84

Rekordy dostęp do pól rekord osoba nazwisko łańcuch imię łańcuch wiek l.całkowita type osoba=record imie:string[30]; nazwisko:string[50]; wiek:integer; end; Deklaracja zmiennych rekordowych: var uczen, nauczyciel, dyrektor : osoba; Programowanie w języku 08.12.2016 85

Rekordy Dostęp do pól rekordu (wprowadzanie lub wyprowadzanie danych) uzyskujemy: var Podając nazwę zmiennej (rekordu) i nazwę pola oddzieloną kropką Korzystając z instrukcji with podajemy nazwę zmiennej a następnie używamy tylko nazwy pola uczen,nauczyciel:osoba; begin readln(uczen.nazwisko); readln(uczen.imie); readln(uczen.wiek);... var uczen,nauczyciel:osoba;... with uczen do begin readln(nazwisko); readln(imie); readln(wiek); end;... Programowanie w języku 08.12.2016 86

Pliki Pliki zawierają dane przechowywane w pamięci dyskowej są zachowywane po zakończeniu pracy z programem Pliki reprezentowane są w programie przez zmienną plikową Zmienna plikowa musi zostać związana ze znajdującym się na dysku plikiem fizycznym [Plik fizyczny stanowi obszar pamięci dyskowej identyfikowalny poprzez nazwę] Podczas pracy programu dane z pliku są sprowadzane do pamięci operacyjnej tam są przetwarzane Programowanie w języku 08.12.2016 87

Pliki Dane w plikach są zapisywane po kolei (sekwencyjnie) można je odczytywać po kolei lub zażądać odczytania elementu o określonym numerze. Liczba elementów w pliku jest dowolna (ograniczona wolnym miejscem na dysku) Po przetworzeniu dane mogą być zapisane do tego samego lub innego pliku Programowanie w języku 08.12.2016 88

Pliki - rodzaje Pliki tekstowe składają się ze znaków kodów ASCII pogrupowanych we wiersze o różnej długości Wiersz kończy się parą znaków CR LF (#10 #13) Plik kończy się znakiem końca pliku EOF (#26) Pliki binarne dane zapisane są binarnie (liczby dwójkowe) nie nadają się do bezpośredniego oglądania wymagają interpretacji przez program Pliki zdefiniowane składają się z elementów o określonej strukturze (np. ze zdefiniowanych w programie rekordów) Pliki niezdefiniowane poszczególne porcje danych mogą mieć różny rozmiar i różne znaczenie program odczytujący musi wiedzieć co tam jest Programowanie w języku 08.12.2016 89

Pliki - przetwarzanie Deklaracja zmiennej plikowej zm_plik:rodzaj pliku; text plik tekstowy file of element - plik elementów File plik niezdefiniowany Skojarzenie zmiennej z plikiem fizycznym Otwarcie pliku Wykonanie operacji na pliku ReWrite(zm_plik); Reset(zm_plik); Append(zm_plik); Assign(zm_plik, nazwa pliku); Read(zm_plik, lista zmiennych); Write(zm_plik, lista zmiennych); nazwa pliku ze ścieżką dostępu nowy pliku do zapisu danych plik do odczytu danych plik tekstowy do dopisania danych na końcu Zamknięcie pliku Close(zm_plik); plik otwarty musi zostać zamknięty Programowanie w języku 08.12.2016 90

Pliki - przydatne funkcje EOF(zm_plik) zwraca TRUE gdy osiągnięto koniec pliku EOLN(zm_plik) zwraca TRUE gdy osiągnięto koniec linii w pliku tekstowym Seek(zm_plik,n) ustawia wskaźnik pliku na elemencie o numerze n FilePos(zm_plik) zwraca aktualną pozycję wskaźnika pliku FileSize(zm_plik) zwraca liczbę elementów pliku IOResult zwraca 0 gdy ostatnią operację na pliku wykonano pomyślnie w przeciwnym wypadku zwraca kod błędu Programowanie w języku 08.12.2016 91

PROBLEM ALGORYTM PROGRAM ŹRÓDŁOWY PROGRAM WYKONYWALNY KOMPUTER ETAPY PROGRAMOWANIA 0. WYBÓR-ZNALEZIENIE- OPRACOWANIE ALGORYTMU 1. IMPLEMENTACJA to zapis algorytmu w języku programowania 2. TRANSLACJA to tłumaczenie programu źródłowego na kod maszynowy 3. URUCHOMIENIE programu 4. TESTOWANIE programu 12/8/2016 Język Pascal - Grafika 92

program pole_kola; uses crt; const pi=3.14; var p,r:real; begin writeln( pole koła ); writeln('podaj promień'); readln(r); p:=pi*r*r*; nagłówek programu część deklaracyjna część wykonawcza writeln(pole koła wynosi,p:4:2) end. program nazwa; uses lista modułów; const nazwa=wartość; var lista zmiennych:typ; begin instrukcje programu end. nazwa jest jednym wyrazem (nie spacji), nie zawiera polskich liter deklaracje modułów moduły to zbiory funkcji i procedur, które możemy wykorzystywać w naszych programach definicje stałych deklaracje zmiennych wszystkie zmienne występujące w programie muszą być wcześniej zadeklarowane Kolejność zapisywania instrukcji odpowiada kolejności wykonywania Instrukcje oddzielamy średnikiem 08.12.2016 Programowanie w języku Pascal 93

Pascal posiada dwa rodzaje podprogramów Procedury używane do wykonania przez program jakiejś złożonej czynności np. wczytanie lub wydrukowanie zawartości tablicy, wyczyszczenie ekranu itp. Funkcje wykonują zespół instrukcji, którego efektem jest obliczenie jakiejś wartości ( być może poprzez wykonanie wielu rachunków elementarnych) 12/8/2016 Język Pascal - Grafika 94

Program TakieCosTam; uses crt; type tablica=array[1..10] of integer; procedure nazwa (lista parametrów); var lista zmiennych; begin zestaw instrukcji; end; procedure WypiszTablice(var t:tablica); var i:integer; begin writeln ('Zawartosc tablicy:'); for i:=1 to 10 do writeln('t[',i:2,']=', t[i]); end; var a,b :tablica; i:integer; Zdefiniowaną procedurę wywołujemy w programie podając jej nazwę z listą parametrów Begin for i:=1 to 10 do begin a[i]:=i*2; b[i]:= i; end; WypiszTablice(a); WypiszTablice(b); end. 12/8/2016 Język Pascal - Grafika 95

function nazwa (lista param.):typ ; var lista zmiennych; begin zestaw instrukcji; nazwa := wartość end; Zdefiniowaną funkcję wywołujemy w programie podając jej nazwę z listą parametrów w miejscu gdzie może wystąpić wyrażenie Program funkcja; uses crt; type Tablica=array[1..10] of integer; function srednia (var t:tablica): real; var i, suma : integer; suma := 0; begin for i:=1 to 10 do suma := suma + t[i]; srednia := suma/10; end; var a,b :tablica; i:integer; Begin for i:=1 to 10 do begin a[i]:=i*2; b[i]:= i; end; writeln('srednia tablicy a =', srednia(a)); writeln('srednia tablicy b = ', srednia(b)); end. Język Pascal - Grafika 96

W programie głównym deklarujemy zmienne globalne to znaczy takie które są widoczne w całym programie (zmienne globalne mają przydzieloną pamięć przez cały czas pracy programu) W procedurach i funkcjach deklarujemy zmienne lokalne widziane tylko przez podprogram w programie głównym nie są one widoczne (zmienne lokalne mają pamięć przydzieloną tylko na czas wykonywania podprogramu po jego wykonaniu pamięć jest zwalniana, a wartość zmiennej ulega zagubieniu) 12/8/2016 Język Pascal - Grafika 97

Program zmienne; uses crt; var zmienna_1 : integer; procedure pierwsza ( ); var zmienna_2 :integer; //zmienna globalna //zmienna lokalna w procedurze begin zmienna_2 :=2; writeln('w procedurze zmienna_1 = ', zmienna_1:2); writeln('w procedurze zmienna_2 = ', zmienna_2:2); writeln('w procedurze zmienna_3 = ', zmienna_3:2); end; var zmienna_3 : integer; ; //zmienna lokalna w procedurze głównej begin zmienna_3:=3 zmienna_1 :=1; writeln('zmienna_1 = ', zmienna_1:2); writeln('zmienna_2 = ', zmienna_2:2); writeln('zmienna_3 = ', zmienna_3:2); pierwsza(); end. 12/8/2016 Język Pascal - Grafika 98

procedure p_1(a_1 : integer); begin writeln (procedura p_1 parametr a_1 = ', a_1:3); a_1:=21; writeln (procedura p_1 parametr a_1 = ', a_1:3); end; procedure p_2(var a_2 : integer); begin writeln (procedura p_2 parametr a_2 = ', a_2 :3); a_2:=45; writeln (procedura p_2 parametr a_2 = ', a_2 :3); end; var b : integer; begin b :=10; writeln (program glowny b = ', b:3); p_1( b ); writeln ('po pocedurze p_1 b = ', b:3); b:=10; p_2( b ); writeln ('po pocedurze p_2 b = ', b:3); end. 12/8/2016 Język Pascal - Grafika 99

Wszystkie polecenia języka Turbo Pascal zostały uporządkowane w postaci grup zwanych modułami (ang. units). Istnieje kilka standardowych modułów, które zostały dołączone do programu Pascal (System, Dos, Crt, Printer, Graph, itp.) Moduł standardowy System jest dostępny automatycznie. Pozostałe wymagają świadomego dołączenia przez programistę. Możliwe jest również tworzenie własnych modułów. 12/8/2016 Język Pascal - Grafika 100

Wśród modułów standardowych wyróżniamy: System zawiera procedury standardowe języka; Crt zawiera procedury obsługi ekranu, klawiatury i sterowania dźwiękami emitowanymi przez głośnik komputera; Dos zawiera procedury współpracujące z systemem operacyjnym; Graph zawiera procedury potrzebne do tworzenia grafiki; 12/8/2016 Język Pascal - Grafika 101

Aby móc korzystać z procedur któregoś z modułów należy zadeklarować jego użycie (nie dotyczy to modułu System, który jest automatycznie deklarowany przez program Pascal). Moduł deklaruje się poprzez użycie słowa uses, a dalej podje się nazwę modułu lub modułów oddzielając je program polekola; przecinkami. uses crt, graph; const pi=3.14; 12/8/2016 Język Pascal - Grafika 102 var p,r:real; begin instrukcje end.

ClrScr - czyści ekran i ustawia kursor w lewym górnym rogu (pozycja 0:0) Delay(MS : word) - zatrzymuje program na określoną ilość milisekund. GotoXY(X, Y : byte) - przesuwa kursor do punktu x:y KeyPressed { : Boolean } - sprawdza aktywność klawiatury ReadKey { : Char } - wczytuje znak z klawiatury TextBackground(color : byte) - zmienia kolor tła TextColor(color : byte) - zmienia kolor tekstu 12/8/2016 Język Pascal - Grafika 103

program pierwszy; uses crt; begin TextBackground ( 7 ); ClrScr; //deklaracja użycia modułu Crt //zmienia kolor tła na szary //czyścimy ekran GotoXY(30, 13); //umieszczamy kursor w pozycji 30:13 TextColor ( 4 ); write ( To jest pierwszy tekst ); end. //zmieniamy kolor czcionki na czerwony //i piszemy 12/8/2016 Język Pascal - Grafika 104

program drugi; uses crt; begin TextBackground (3); ClrScr; //deklaracja użycia modułu Crt //zmienia kolor tła na niebieski //czyścimy ekran GotoXY (0,0); //umieszczamy kursor w pozycji 0:0 TextColor (4); write ( To jest pierwszy tekst ); //zmieniamy kolor czcionki na różowy //i piszemy GotoXY (10,10); //umieszczamy kursor w pozycji 10:10 TextColor (4); write ( To jest drugi tekst ); end. //zmieniamy kolor czcionki na zielony //i piszemy 12/8/2016 Język Pascal - Grafika 105

program trzeci; uses crt; var i:byte; begin ClrScr; textcolor (1); for i:=0 to 10 do begin textcolor (i); writeln; writeln(' To jest kolor nr - ', i:2); end; readln; end. 12/8/2016 Język Pascal - Grafika 106

Moduł Graph obsługuje operacje ekranowej grafiki punktowej (pikselowej). Zawiera procedury i funkcje, które umożliwiają rysowanie na ekranie monitora krzywych różnych kształtów i kolorów, wypełnianie obszarów określonym wzorem i kolorem, wykreślanie tekstów o zdefiniowanej przez użytkownika wielkości wybraną czcionką w poziomie lub pionie. Umiejętne wykorzystanie zasobów modułu pozwala również na tworzenie rysunków animowanych 12/8/2016 Język Pascal - Grafika 107

Tryb graficzny jest ściśle związany z kartą graficzną, w jaką jest wyposażony komputer. Podczas inicjowania trybu graficznego należy określić właściwy dla danego sprzętu sterownik i tryb pracy ekranu. Do tego służy procedura DetectGraph. DetectGraph (sterownik, tryb); sterownik identyfikator karty sterownika graficznego; tryb tryb graficzny (rozdzielczość, ilość kolorów); 12/8/2016 Język Pascal - Grafika 108

Z przeważającej większości procedur i funkcji modułu graficznego można korzystać dopiero po zainicjowaniu graficznego trybu pracy monitora, czyli wywołaniu procedury InitGraph: InitGraph (sterownik: Integer, tryb: Integer, ścieżka: String); sterownik identyfikator karty sterownika graficznego; tryb tryb graficzny (rozdzielczość, ilość kolorów); ścieżka katalog, w którym znajduje się sterownik *.bgi Przejście do trybu graficznego powoduje przydzielenie części pamięci operacyjnej dla potrzeb realizacji operacji graficznych. Po zakończeniu ich wykonywania należy zwolnić tę część pamięci i przywrócić poprzedni tryb tekstowy za pomocą procedury CloseGraph 12/8/2016 Język Pascal - Grafika 109

Dla prawidłowej pracy monitora w trybie graficznym potrzebne są programy obsługujące zainstalowaną w komputerze kartę graficzną. Programy takie nazwano sterownikami (ang. Drivers). W systemie TurboPascal zdefiniowano sterowniki dla 8 najpopularniejszych kart graficznych komputerów klasy IBM: CGA, MCGA, EGA, VGA, Hercules, ATT400, IBM8514, IBM3270PC. Sterownikom tym nadano rozszerzenie BGI (Borland Graphics Interface) 12/8/2016 Język Pascal - Grafika 110

Wszystkie operacje graficzne wykonywane są w obrębie okna graficznego. W momencie inicjacji trybu graficznego okno zajmuje cały ekran. Lewy, górny róg ekranu ma współrzędne (0,0) i jest początkiem układu, którego oś pionowa jest skierowana w dół, a oś pozioma - w prawo. Współrzędne prawego dolnego rogu są określone przez funkcje GetMaxX, GetMaxY i zależą od rozdzielczości ekranu i jego trybu pracy. 12/8/2016 Język Pascal - Grafika 111

program linia; uses Graph, Crt; var sterownik, tryb, karta : SmallInt; begin DetectGraph(sterownik,tryb); //inicjalizacja trybu graficznego InitGraph (sterownik,tryb,'c:\program Files\Dev-Pas'); SetColor (4); //ustawiamy kolor Line (30,30,610,450); //rysujemy linie od punktu (30,30) do punktu (610,450) Repeat Until Keypressed; CloseGraph; //zamykanie trybu graficznego repeat until keypressed; end. 12/8/2016 Język Pascal - Grafika 112

Procedura SetLineStyle SetLineStyle (Rodzaj_Lin, Wzor, Grubosc : word); zmienia rodzaj linii oraz jej grubość używanej przy procedurach Line, Circle. Rodzaje linii to: SolidLn = 0 - ciągła DottedLn = 1 - kropkowana CenterLn = 2 - symetryczna DashedLn = 3 - przerywana 12/8/2016 Język Pascal - Grafika 113

program linia_2; uses Graph, Crt; var sterownik, tryb, karta : SmallInt; begin DetectGraph(sterownik,tryb); //inicjalizacja trybu graficznego InitGraph (sterownik,tryb,'c:\program Files\Dev-Pas'); SetColor (4); //ustawiamy kolor SetLineStyle(3,0,3); //ustawiamy rodzaj linii Line (30,30,610,450); //rysujemy linie od punktu (30,30) do punktu (610,450) SetColor (7); //ustawiamy kolor SetLineStyle(1,0,1); //ustawiamy rodzaj linii Line (30,50,610,500); //rysujemy linie od punktu (30,50) do punktu (610,500) Repeat Until Keypressed; CloseGraph; //zamykanie trybu graficznego repeat until keypressed; end. 12/8/2016 Język Pascal - Grafika 114

program kwadrat_i_kolo; uses Graph, Crt; var sterownik, tryb : SmallInt; begin DetectGraph (sterownik,tryb); //inicjalizacja trybu graficznego InitGraph (sterownik,tryb,'c:\program Files\Dev-Pas'); SetColor(Green); SetLineStyle(0,0,3); //ustawiamy rodzaj linii Rectangle(30,30,120,120); //rysowanie kwadratu SetColor (Yellow); SetLineStyle (3,0,3); //ustawiamy rodzaj linii Circle(150, 150, 100); //rysowanie kola repeat until keypressed; end. 12/8/2016 Język Pascal - Grafika 115

Procedura SetFillStyle SetFillStyle (nr_wzorca, kolor : word); zmienia rodzaj i kolor wypełnienia konturów wykorzystywanych przez niektóre procedury. Domyślne ustawienia początkowe to wzorzec wypełniania ciągłego i numer koloru będący maksymalnym kolorem aktualnego trybu graficznego. 12/8/2016 Język Pascal - Grafika 116

EmptyFill = 0 - wypełnienie kolorem tła SolidFill = 1 - wypełnienie ciągłe LineFill = 2 - wypełnienie pogrubionymi liniami poziomymi LtSlashFill = 3 - wypełnienie liniami pochyłymi w prawo SlashFill = 4 - wypełnienie pogrubionymi liniami pochyłymi w prawo BkSlashFill = 5 - wypełnienie pogrubionymi liniami pochyłymi w lewo LtBkSlashFill = 6 - wypełnienie liniami pochyłymi w lewo HatchFill = 7 - wypełnienie siatką pionową xhatchfill = 8 - wypełnienie siatką ukośną InteerleaveFill = 9 - wypełnienie liniami splecionymi VideDotFill = 10 - wypełnienie kropkami CloseDotFill = 11 - wypełnienie zagęszczonymi kropkami UserFill = 12 - wypełnienie wzorem zdefiniowanym przez użytkownika procedurą SetFillPattern 12/8/2016 Język Pascal - Grafika 117

Procedura FloodFill FloodFill(X, Y : Integer; kolorgranicy : word); wypełnia kolorem i wzorem podanym w procedurze SetFillStyle (sposób_wypełniani, kolor_granicy) obszar ekranu. Jeżeli przy wypełnianiu napotka linię, wykonaną kolorem kolor granicy przerywa wypełnianie tak jakby to był dla niej mur nie do przejścia Punkt X, Y jest miejscem od którego procedura zaczyna wypełnianie. 12/8/2016 Język Pascal - Grafika 118

program kwadrat_1_fill; uses Graph, Crt; var sterownik, tryb : SmallInt; begin DetectGraph (sterownik,tryb); //inicjalizacja trybu graficznego InitGraph (sterownik,tryb,'c:\program Files\Dev-Pas'); SetColor(Green); SetLineStyle(0,0,3); //ustawiamy rodzaj linii Rectangle(30,30,120,120); //rysowanie kwadratu SetFillStyle(1, red); //ustawiamy sposób wypelniania FloodFill (90, 90, Green); //wypelnienie repeat until keypressed; end. 12/8/2016 Język Pascal - Grafika 119

program kwadrat_2_fill; uses Graph, Crt; var sterownik, tryb : SmallInt; begin DetectGraph (sterownik,tryb); //inicjalizacja trybu graficznego InitGraph (sterownik,tryb,'c:\program Files\Dev-Pas'); SetColor(Green); SetLineStyle(0,0,3); //ustawiamy rodzaj linii Rectangle(30,30,120,120); //rysowanie kwadratu SetFillStyle(1, red); //ustawiamy sposób wypelniania FloodFill (130, 130, Green); //wypelnienie repeat until keypressed; end. 12/8/2016 Język Pascal - Grafika 120

program kwadraty; uses Graph, Crt; var sterownik, tryb : SmallInt; begin DetectGraph (sterownik,tryb); //inicjalizacja trybu graficznego InitGraph (sterownik,tryb,'c:\program Files\Dev-Pas'); SetColor ( Green); Rectangle (30,30,120,120); //rysujemy kwadrat Circle (150, 150, 100); //rysujemy okrąg SetFillStyle(1, red); //ustawianie sposobu wypełniania FloodFill ( 50, 50, Green); //funkcja wypełniająca repeat until keypressed; CloseGraph; //zamykanie trybu graficznego repeat until keypressed; end. 12/8/2016 Język Pascal - Grafika 121

Bar(X1, Y1, X2, Y2) : rysuje wypełniony prostokąt. X1,Y1 to współrzędne lewego górnego rogu, X2,Y2 to współrzędne prawego dolnego rogu. Kolor ramki jest określany przez procedurę SetColor, a kolor wypełnienia przez procedurę SetFillStyle. Bar3D(X1, Y1, X2, Y2; B; TOP) : rysuje trójwymiarowy prostokąt wypełniony. X1,Y1 to współrzędne lewego górnego rogu przedniej ścianki, X2,Y2 to współrzędne lewego dolnego rogu przedniej ścianki, zmienna B jest to głębokość prostopadłościanu, zmienna TOP określa czy górna powierzchnia jest widoczna czy nie. 12/8/2016 Język Pascal - Grafika 122

PutPixel (X, Y; Kolor) : wyświetla jeden punkt o współrzędnych (X, Y) i podanym kolorze. OutTextXY(X, Y, S) : wyświetla na ekranie tekst określony przez zmienną S rozpoczynając od współrzędnych X, Y. Kolor tekstu podawany jest przez procedurę SetColor. ClearDevice : procedura ta czyści ekran graficzny, analogicznie do procedury ClrScr w trybie graficznym 12/8/2016 Język Pascal - Grafika 123