Dla uzupełnienia wiadomości z Pascala polecam dodatkowo kursy on-line :
Wszystkie książki z tej kategorii (pascal)
WYKŁAD 1
Język programowania Pascal opracował Niklaus Wirth w 1971 r. Przyświecały mu dwa cele:
- opracowany język powinien być dogodnym narzędziem do nauczania programowania.
- opracowany język powinien być przenośny, czyli łatwo instal. na innych komp.
Cel ten został zrealizowany.
Cechy języka Pascal
- Pascal jest językiem wysokiego poziomu; oznacza to, że użytkownik piszący program w języku pascal nie musi znać szczegółów wewnętrznej budowy komputera.
- Pascal ma wbudowane precyzyjne mechanizmy kontroli struktur i reguł gramatycznych; dzięki temu łatwa jest identyfikacja i poprawienie błędów.
- Pascal jest językiem algorytmicznym, pomyślanym tak aby łatwo było w nim zapisywać algorytmy opracowane przez użytkownika.
- Pascal jest językiem strukturalnym; oznacza to że poszczególne fragmenty algorytmu można zapisać w postaci wyraźnie wyodrębnionych struktur językowych.
- Pascal jest językiem modularnym. Cecha ta pozwala składać program z oddzielnych 'cegiełek' - modułów które w razie potrzeby można wymieniać bez naruszenia pozostałej części programu.
- pascal jest językiem publikacyjnym co oznacza potencjalną możliwość opublikowania oryginalnego, interesującego algorytmu w notacji języka Pascal
STANDARDOWE SYMBOLE JĘZYKA PASCAL
Języki programowania służą do przedstawienia algorytmów w takiej postaci, w której mogą być one wykonane przez komputery. Najwygodniejszą formą komunikacji człowiek - maszyna okazał się zapis tekstowy. Program jest więc tekstem. Ze względu na ograniczenia praktyczne, narzucane przez maszyny, tekst ten jest po prostu ciągiem znaków, tzn nie ma np. możliwości stosowania zwykłego zapisu ułamków, potęgowania i indeksowania stosowanego w matematyce. - obowiązuje jeden poziom znaków.
Program pascalowy buduje się z elementarnych jednostek tekstowych języka nazywanych symbolami. Symbol może być pojedynczym znakiem bądź ciągiem znaków alfabetu języka.
W Pascalu są dostępne następujące symbole :
Alfabet :
a) - duże i małe litery alfabetu łacińskiego
b) - cyfry od 0 - 9
c) - odstęp (spacja)
d) - jednoznakowe symbole specjalne :
+ - * / = < > [ ] . , : ; ^ ( ) { } spacja
Wieloznakowe symbole specjalne :
e) - dwuznakowe smbole specjalne :
<> <= >= := ..
f) - słowa kluczowe - niepodzielne ciągi znaków:
AND DOWNTO IF OR THEN
ARRAY ELSE IN PACKED TO
BEGIN END LABEL PROCEDURE TYPE
CASE FILE MOD PROGRAM UNTIL
CONST FOR NIL RECORD VAR
DIV FUNCTION NOT REPEAT WHILE
DO GOTO OF SET WITH
g) Identyfikatory
Podobnie jak słowa kluczowe identyfikatory są symbolami języka Pascal złożonymi z ciągu znaków. Pewne identyfikatory mają z góry określone nazwy. Są to tzw. identyfikatory standardowe. Użytkownik ma prawo przedefiniować znaczenie tych identyfikatorów w sekcji deklaracji swojego programu i używać ich w zdefiniowanym znaczeniu. Oznacza to jednak utratę wbudowanych w język ułatwień. Natomiast użytkownik może stosować własne identyfikatory dla nadawania nazw programom i wszelkim obiektom niestandardowym w programach. Każdy taki identyfikator musi być ciągiem liter i cyfr przy czym pierwszy znak musi być literą. Przykład : A, C5, XY20, CYFRA, dzieńD itp.
Pascal nie ogranicza długości identyfikatora i nie rozróznia małych i dużych liter w nazwach obiektów programu. Tak więc identyfikatory IDENT1 i Ident1 są traktowane identycznie.
h) Separatory
W programie pascalowym separatory służą do rozdzielenia poszczególnych obiektów programu. Separatorami mogą być : Srednik, jedna lub więcej spacji, przejście do nowego wiersza, komentarz. Obowiązuje przy tym zasada, że dowolne dwa słowa kluczowe, identyfikatory lub liczby bez znaku muszą być rozdzielone co najmniej jednym separatorem. Zatem ciąg kolejnych spacji jest równoważny jednej spacji, to samo dotyczy przejść do nowego wiersza. Komentarz ma postać ciągu znaków zamkniętego w nawiasy klamrowe. np.
{To jest komentarz}
Wewnątrz pary nawiasów można umieścić dowolny ciąg znaków za wyjątkiem nawiasu klamrowego. Dopuszczalne jest zastąpienie nawiasów klamrowych symbolami dwuznakowymi (* oraz *). Umieszczenie komentarzy w tych miejscach programu w których mogą być pomocne w zrozumieniu jego konstrukcji należy do dobrej praktyki programistycznej.
STRUKTURA PROGRAMU
Podobnie jak tekst książki czy opowiadania tekst programu ma swoją strukturę. Na przykład książkę zwykle rozpoczyna nazwisko autora i tytuł. W środku występuje podział na rozdziały, punkty i akapity a na ostatniej stronie bywa słowo KONIEC. Przy nadawaniu tekstowi książki struktury korzysta się z różnego rodzaju czcionek i podkreśleń w tytułach. W pascalu do organizowania struktury programu jest dostępny tylko jeden rodzaj znaków. dlatego używa się w tym celu odpowiednich słów kluczowych. Np. każdy program musi rozpoczynać się słowem kluczowym program.i kończyć słowem kluczowym end oraz kropką. Program w Pascalu możemy przyrównać do domku z klocków, którego podstawowymi elementami są tzw. słowa kluczowe. Stanowią one integralną część języka i nie mogą być definiowane przez użytkownika. Struktura programu pascalowego została ściśle zdefiniowana przez autora języka N. Wirtha.
Każdy program powinien składać się z dwóch zasadniczych części : nagłówka i bloku programu. W nagłówku podaje się nazwę programu oraz informacje o tym skąd wprowadzane będą dane do programu i dokąd będą wyprowadzane wyniki (tzw wejście - wyjście). W sytuacji, kiedy dane wczytujemy z klawiatury a wyniki wypisywane są na ekranie (tzw standardowe wejście - wyjście) część nagłówka dotyczącą urządzeń we - wy można opuścić. Nagłówek zdefiniowany jest wtedy następująco :
PROGRAM nazwa programu
Nazwa programu następująca po słowie kluczowym powinna być ciągiem znaków nie zawierającym żadnych przerw.
Przykłady nagłówków :
program Oscylator_harmoniczny; (prawidłowy nagłówek)
program Oscylator harmoniczny ; ( błędny nagłówek)
Parametrami w nagłówku są nazwy tzw plików czyli ciągów (sekwencji) danych przechowywanych w pamięci zewnętrznej . Pliki te będą bądź źródłem danych dla programu bądź miejscem przeznaczenia do którego dane będą przesyłane. W języku pascal użytkownik ma do dyspozycji dwa tzw. pliki standardowe Input i Output . Rysunek (?) ilustruje wykorzystanie pliku Input jako źródła a pliku Output jako miejsca przeznaczenia danych. Jedną z ważniejszych cech dobrze napisanego programu jest jego czytelność, czyli łatwość zrozumienia treści kodu źródłowego przez osoby nie będące jego autorami. Pierwszym i jednym z ważniejszych składników determinujących czytelność programu jest jego nazwa. Najlepiej aby była związana z tym co program faktycznie wykonuje.
Przykłady nagłówków :
program rozwiązywanie_równania_kwadratowego;
program mnożenie_macierzy;
Blok programu następujący po deklaracji nagłówka służy do dokładnego opisu algorytmu : składa się z dwóch elementów : opisu danych i części operacyjnej. W opisie danych należy zdefiniować oraz zadeklarować wszystkie obiekty występujące w części operacyjnej. Część operacyjna zaczyna się słowem kluczowym begin a kończy end. (wyraz end zakończony kropką). Część operacyjna musi zawierać przynajmniej jedną instrukcję. W najprostszym przypadku może to być instrukcja pusta tj. pusty ciąg znaków.
PRZYKŁAD PROGRAMU :
PROGRAM Liczby_Pierwsze;
{Program wypisuje liczby pierwsze z przedziału [1,n]}
CONST n=100;
VAR p,d:integer;
pierwsza: Boolean;
BEGIN
writeln('Liczby pierwsze z przedziału [1,',n,']:');
write(2:4,3:4);
p:=5;
WHILE p<=n DO
BEGIN
d:=3;pierwsza:=true;
WHILE pierwsza AND (d*d<=p) DO
BEGIN
pierwsza:=(p MOD d ) <> 0;
d:= d+2
END;
IF pierwsza THEN write(p:4);
p:=p+2
END
END.
OPIS OBIEKTÓW
Definicje stałych ( w powyższym przykładzie : CONST n = 100; )
W programie pascalowym można zdefiniować pewne obiekty (tzw. stałe), których wartość w czasie działania programu się nie zmienia Przypisanie stałej wartości identyfikatorowi następuje za pomocą instrukcji :
const ident = stała;
Przykład :
const Avogadro = 6.02e23;
const nazwa = 'informatyka' ; (stała nie musi być liczbą ; może być np łańcuchem znaków)
Najczęściej popełniany błąd : const a:=2.5 (zamiast = użyto znaku z instrukcji przyp. :=)
Deklaracje zmiennych :
Zmienne są wielkościami zmieniającymi swoją wartość. w trakcie wykonywania programu. Każda zmienna wykorzystana w programie jest całkowicie określona przez swoją nazwę, którą nadaje się jej zgodnie z przyjętymi w Pascalu regułami. Nazwą (identyfikatorem) jest ciąg liter i cyfr, zaczynający się od litery i nie zawierający znaków specjalnych.
Przykłady zmiennych : delta; x1; pierwiastek_kwadratowy.
Błędne nazwy zmiennych :X1#x2; 1a (użyty znak specjalny # a w drugiej nazwa zaczyna od cyf.)
Długość identyfikatora zmiennej jest dowolna, z tym że tylko pierwsze 63 znaki są znaczące. Nazwa zmiennej powinna charakteryzować rolę jaką odgrywa ona w programie
Istnieją dwie zasadnicze różnice pomiędzy identyfikatorami stałych, a identyfikatorami zmiennych.
Pierwsza : wartości identyfikatorów stałych są określone zanim rozpocznie się wykonywanie prog ramu, a żadna ze zmiennych nie ma nadanej wartości.
Druga : wartość identyfikatora stałej nie może być zmieniona w trakcie wykonywania programu, podczas gdy zmienna może przyjmować różne wartości.
Wszystkie zmienne używane w programie muszą być wcześniej zadeklarowane. Na deklarację zmiennej składają się trzy elementy : słowo kluczowe var (variable) nazwa zmiennej i jej typ.
W momencie deklaracji zmiennej nie przypisywane są im żadne wartości liczbowe. Deklaracje sygnalizują tylko komputerowi konieczność zarezerwowania dla nich odpowiedniej jednostki pamięci
Typy obiektów
Przyjęto zasadę, że każda stała, zmienna, wyrażenie lub funkcja jest pewnego typu. Ogólnie biorąc typ określa :
a) zbiór wartości do którego należy stała, bądź jakie może przyjmować zmienna czy wyrażenie, lub jakie mogą być generowane przez funkcję;
b) zbiór operacji, które można wykonywać na wymienionych w (a)
obiektach.
Język pascal oferuje użytkownikowi pięć różnych typów :
- standardowe typy proste : Boolean, Char, Integer, Real
- standardowy typ strukturalny Text;
- niestandardowe, tj definiowane przez użytkownika, typy proste : okrojone i wyliczeniowy;
- niestandardowe typy strukturalne (również definiowane przez użytkownika) : tablicowy, zbiorowy, rekordowy i plikowy;
- niestandardowy typ wskaźnikowy.
Standardowym lub wbudowanym, nazywamy taki typ, którego identyfikator, zbiór wartości oraz dopuszczalne operacje zostały określone standardowo w języku.
Typy proste są podstawowymi jednostkami typu w języku Turbo Pascal. Na ich podstawie można utworzyć inne, bardziej rozbudowane struktury danych - typy strukturalne. Typy strukturalne wprowadzono w związku z dążeniem do możliwie szerokiego zakresu zastosowań języka.
Typ zmiennej określa jednoznacznie zbiór z którego zmienna przybiera wartości.
Wśród typów prostych wyróżniamy klasę tzw typów standardowych a mianowicie:
a) integer (całkowity)
b) real (rzeczywisty)
c) char (znakowy)
d) boolean (logiczny)
Ad. a)
Każdy ze zbiorów należących do klasy integer stanowi pewien podzbiór zbioru liczb całkowitych. Poszczególne podklasy typu integer różnią się tylko zakresem liczb, jaki ten podzbiór obejmuje. Podział klasy typu integer przedstawia się następująco :
Shortint - [-128,127] (zajmuje 1 bajt pamięci)
Byte - [0,255] (zajmuje 1 bajt pamięci)
Integer - [-32768, 32767] (zajmuje 2 bajty pamięci)
Word - [0,65535] (zajmuje 2 bajty pamięci)
Longint - [-2147483648, 2147483647] (zajmuje 4 bajty pamięci)
Przykłady deklaracji zmiennej typu integer :
1) var Liczba_atomowa : byte;
2) var silnia : longint;
Należy mieć na uwadze ,że zadeklarowanie zmiennej Liczba_atomowa jako np integer spowoduje ,że zmienna ta zarezerwuje w pamięci operacyjnej komputera dużo więcej miejsca. Należy bardzo uważać aby zadeklarowana zmienna nie przyjmowała wartości spoza zakresu przynależnego do jej typu. Gdy następuje wyjście poza zakres najczęściej przyjmuje ona przypadkowe wartości. Taki błąd jest wyjątkowo trudny do usunięcia, ponieważ ujawnia się dopiero w trakcie wykonywania programu.
Ad b)
Zmienne które przyjmują wartości rzeczywiste, określamy jako real. Dana typu real należy do przedziału liczb [ 10-38 - 1038 ] i zajmuje 6 bajtów pamięci.. Komputer wyposażony w koprocesor arytmetyczny pozwala na określenie czterech dodatkowych typów rzeczywistych :
- single [1e-45, 3.4e38] (zajmuje 4 bajty pamięci)
- double [5.0e-324, 1.7e308] (zajmuje 8 bajtów pamięci)
- extended [1.9e-4951, 1.1e4932] (zajmuje 10 bajtów pamięci)
- comp [-263 - 263-1] [-9.2e18,9.2e18] (zajmuje 8 bajtów pamięci)
Przykłady deklaracji zmiennych rzeczywistych :
var masa_cząsteczkowa : real;
var masa_wszechświata : double; - tylko wtedy gdy komputer jest wyposażony w koprocesor.
Ad c)
Dana typu znakowego jest jednym znakiem ze zbioru wszystkich znaków ASCII
Przykład :
var jeden_znak : char; (character)
Ad d)
Zmienna typu logicznego może przyjmować dwie wartości : true (prawda) lub false (fałsz) Obie stałe logiczne są predefiniowane.
Przykład :
var to_be_or_not_to_be : boolean;
Typ łańcuchowy
W programach często wykorzystuje się zmienne będące napisami. Konstruktorzy kompilatora przewidzieli dla tego rodzaju zmiennych specjalny typ, nazywany łańcuchowym (string). Daną typu łańcuchowego można zadeklarować w dwojaki sposób; przykład :
var nazwisko : string[20]; - długość łańcucha nie może przekraczać 20 znaków.
var nazwisko : string; - długość zmiennej nazwisko nie jest z góry określona, ale nie może przekraczać 256 znaków
1