Wojciech Myszka
Programowanie — Pascal
22 lutego 2008
Spis treści
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
6. Struktura programu w języku PASCAL
. . . . . . . . . . . . . . . . . . . . . . . .
16
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
8.1. Typy porządkowe całkowite
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
11.Standardowe funkcje arytmetyczne
. . . . . . . . . . . . . . . . . . . . . . . . . .
25
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
1. Języki programowania
Z
, wolnej encyklopedii:
Język programowania to usystematyzowany sposób przekazywania komputerowi
poleceń do wykonania. Język programowania pozwala programiście na precyzyjne
przekazanie maszynie, jakie dane mają ulec obróbce i jakie czynności należy podjąć
w określonych warunkach.
Języki programowania klasyfikuje się zależnie od tego, do jakiego paradygmatu
lub paradygmatów programowania najlepiej się nadają:
a
Paradygmat to zbiór podstawowych pojęć i teorii tworzących podstawy danej dziedziny.
— imperatywne (taka metoda programowania w której program składa się ze
zmiennych oraz modyfikujących je operacji, z jawnie określonym przepływem
sterowania. Typowe języki tego typu to C, Pascal. Największą zaletą jest bli-
skość takiej reprezentacji do tego co rzeczywiście wykonywane jest przez kom-
puter.) C, Pascal
— obiektowe (metodologia tworzenia programów komputerowych, która definiuje
programy za pomocą „obiektów” — elementów łączących stan (czyli dane) i
zachowanie (czyli procedury, tu: metody)) C++
— funkcyjne (to filozofia programowania, w której funkcje należą do wartości
podstawowych, a nacisk kładzie się na ewaluację (często rekursywnych) funkcji,
a nie na wykonywanie poleceń) Haskel, LISP
— logiczne ( to metoda programowania, w której program podawany jest jako
pewien zestaw zależności, a obliczenia są dowodem pewnego twierdzenia w
oparciu o te zależności) Prolog
— i inne
2. Pascal
Jeden z najpopularniejszych języków programowania, uniwersalny, wysokiego po-
ziomu, ogólnego zastosowania, oparty na języku Algol. Został opracowany przez
Niklausa Wirtha w 1971 roku. Pierwotnie służył celom edukacyjnym (do nauki
programowania strukturalnego).
Pierwszy opis języka Wirth zawarł w The programming language Pascal, Acta
Informatica 1/1971, a kolejny, poprawiony w The programming language Pascal
(Revised Report), Bericht der Fachrgruppe Computer ? Wissenschaften 5/1972.
Pierwszym podręcznikiem języka Pascal była pozycja Jensen, Wirth, Pascal, User
Manual and Report 1974.
Jedną z popularniejszych implementacji kompilatorów tego języka był produkt
firmy Borland International — Turbo Pascal. W chwili obecnej dość mocno roz-
powszechnionym obiektowym dialektem języka Pascal jest Object Pascal osadzony
w Delphi oraz Kylix’ie (również wyprodukowanych przez Borland International).
Istnieją wolne kompilatory Pascala, na przykład Free Pascal, a także wolne środo-
wisko IDE jak Lazarus.
3. Czemu Pascal?
1. Stosunkowo prosty
2. Stosunkowo „porządny”
3. Łatwo dostępny
4. . . .
4. Przykładowy program
Poniższe programy ściągnięte z serwisu „99 Bottles of Bear (One program in 621
variants)”
4.1. Pascal
(
∗
P a s c a l v e r s i o n o f 99 B o t t l e s o f b e e r
∗
)
program B o t t l e s O f B e e r s ( i n p u t , o u t p u t ) ;
var
b o t t l e s : i n t e g e r ;
begin
b o t t l e s := 9 9 ;
repeat
WriteLn ( b o t t l e s ,
’ b o t t l e s o f b e e r on t h e w a l l ,
’ ,
b o t t l e s ,
’ b o t t l e s o f b e e r . ’ ) ;
Write ( ’ Take one down , p a s s i t around ,
’ ) ;
b o t t l e s := b o t t l e s
−
1;
WriteLn ( b o t t l e s ,
’ b o t t l e s o f b e e r on t h e w a l l . ’ ) ;
u n t i l ( b o t t l e s = 1 ) ;
WriteLn ( ’ 1 b o t t l e o f b e e r on t h e w a l l , one b o t t l e o f b e e r . ’ ) ;
WriteLn ( ’ Take one down , p a s s i t around , ’ ,
’ no more b o t t l e s o f b e e r on t h e w a l l ’ )
end .
4.2. Perl
#! / u s r / b i n / p e r l
# Jim Menard jimm@
{
bbn , i o
}
. com
# ( 6 1 7 ) 873
−
4326 h t t p : / /www . i o . com/˜ jimm /
$ n B o t t l e s = $ARGV [ 0 ] ;
$ n B o t t l e s = 100 i f $ n B o t t l e s eq ’ ’
| |
$ n B o t t l e s
<
0 ;
foreach ( r e v e r s e ( 1 . .
$ n B o t t l e s ) )
{
$ s = ( $
== 1 ) ? ” ” : ” s ” ;
$ o n e L e s s S = ( $
== 2 ) ? ” ” : ” s ” ;
p r i n t ”
\
n $
b o t t l e $ s o f b e e r on t h e w a l l ,
\
n” ;
p r i n t ” $
b o t t l e $ s o f b e e r ,
\
n” ;
p r i n t ” Take one down , p a s s i t around ,
\
n” ;
p r i n t $
−
1 , ” b o t t l e $ o n e L e s s S o f b e e r on t h e w a l l
\
n” ;
}
p r i n t ”
\
n
∗
b u r p
∗\
n” ;
4.3. C
/
∗
99 b o t t l e s o f b e e r i n a n s i c
∗
by B i l l Wein : b e a r h e a r t @ b e a r n e t . com
∗
/
#d e f i n e MAXBEER ( 9 9 )
void chug ( i n t b e e r s ) ;
main ( )
{
r e g i s t e r b e e r s ;
f o r ( b e e r s = MAXBEER ; b e e r s ; chug ( b e e r s
−−
))
p u t s ( ” ” ) ;
p u t s ( ”
\
nTime t o buy more b e e r !
\
n” ) ;
e x i t ( 0 ) ;
}
v o i d chug ( r e g i s t e r b e e r s )
{
c h a r howmany [ 8 ] ,
∗
s ;
s = b e e r s != 1 ? ” s ” : ” ” ;
p r i n t f (”%d b o t t l e%s o f b e e r on t h e w a l l ,
\
n ” , b e e r s , s ) ;
p r i n t f (”%d b o t t l e%s o f b e e e e e r . . . ,
\
n ” , b e e r s , s ) ;
p r i n t f ( ” Take one down , p a s s i t around ,
\
n ” ) ;
i f (
−−
b e e r s ) s p r i n t f ( howmany , ”%d ” , b e e r s ) ;
e l s e s t r c p y ( howmany , ”No more ” ) ;
s = b e e r s != 1 ? ” s ” : ” ” ;
p r i n t f (”% s b o t t l e%s o f b e e r on t h e w a l l .
\
n ” , howmany , s ) ;
}
4.4. Fortran
C
99 B o t t l e s o f b e e r i n FORTRAN 77
r e a l c o u n t
c o u n t = 99
do while ( c o u n t . g t . 0 )
w r i t e (
∗
,
∗
) c o u n t , ” b o t t l e s o f b e e r on t h e w a l l , ”
w r i t e (
∗
,
∗
) c o u n t , ” b o t t l e s o f b e e r , ”
w r i t e (
∗
,
∗
) ” Take one down , p a s s i t around , ”
c o u n t = c o u n t
−
1
w r i t e (
∗
,
∗
) c o u n t , ” b o t t l e s o f b e e r on t h e w a l l ”
w r i t e (
∗
,
∗
) ” ”
end do
stop
end
5. Pascal – podstawy
5.1. Literatura
— dowolny podręcznik do języka PASCAL
— Iglewski, Madey, Matwin „Pascal Standard, Pascal 360”
— Marciniak „Turbo Pascal 5.5”,
— „Turbo Pascal 7.0 z elementami programowania”
— Bielecki „Turbo Pascal 5.5”
— Bielecki „Turbo Pascal 6”
— Bielecki . . .
— Zahorski „Turbo Pascal 7.0 mały leksykon”
— Sielicki A. „Laboratorium programowania w języku Pascal”
— Wirth Niklaus „Algorytmy + struktury danych = programy”
5.2. Program wykładu
1. Struktura programu w języku PASCAL
2. Podstawowe typy danych, instrukcja przypisania, funkcje arytmetyczne
3. Instrukcja warunkowa IF ELSE, instrukcja wyboru CASE OF
4. Instrukcje repetycyjne: REPEAT, WHILE, FOR
5. Przykłady prostych algorytmów iteracyjnych
6. Programowanie proceduralne (podprogramy: procedury i funkcje)
7. Komunikacja z użytkownikiem w trybie tekstowym (moduł CRT)
8. Złożone struktury danych — typ tablicowy (ARRAY)
9. Zastosowanie instrukcji repetycyjnych do operacji na tablicach
10. Typ łańcuchowy (STRING)
11. Typ rekordowy (RECORD)
12. Przykład prostej bazy danych — tablica rekordów
13. Archiwizacja danych na dyskietce — typ plikowy (FILE)
14. Plik tekstowy (TEXT)
6. Struktura programu w języku PASCAL
Najprostszy program w Pascalu:
begin
{
n a j p r o s t s z y program
}
end .
Program, który coś robi:
begin
{
w y p i s a n i e t e k s t u na e k r a n i e
}
w r i t e ( ’ C z e s c ! To j a , t w o j ko mpu ter ’ ) ;
readln ;
end .
{ Nagłówek Programu }
program
nazwa programu ( l i s t a i d e n t y f i k a t o r ó w ) ;
{ S e k c j a d e k l a r a c j i }
uses
lista nazw modułów ;
l a b e l
l i s t a e t y k i e t ;
{ D e k l a r a c j a e t y k i e t }
const
s e k w e n c j a d e f i n i c j i s t a ł y c h ;
{ D e f i n i c j e s t a ł y c h }
type
s e k w e n c j a d e f i n i c j i t y p ó w ;
{ D e f i n i c j e typów }
v a r
s e k w e n c j a d e k l a r a c j i z m i e n n y c h ;
{ D e k l a r a c j e z m i e n n y c h }
procedure
nazwa procedury 1 ;
{ D e f i n i c j e p r o c e d u r }
{ D e f i n i c j a s k ł a d o w y c h p r o c e d u r y 1 }
procedure
nazwa procedury 2 ( l i s t a p a r a m e t r ó w ) ;
{ D e f i n i c j a s k ł a d o w y c h p r o c e d u r y 2 }
.
.
.
f u n c t i o n
n a z w a f u n k c j i 1 : t y p w a r t o s c i ; { D e f i n i c j e f u n k c j i }
{ D e f i n i c j a s k ł a d o w y c h f u n k c j i 1 }
f u n c t i o n
n a z w a f u n k c j i 2 ( l i s t a p a r a m e t r ó w ) : t y p w a r t o ś c i ;
{ D e f i n i c j a s k ł a d o w y c h f u n k c j i 2 }
.
.
.
{ S e k c j a i n s t r u k c j i }
begin
i n s t r u k c j a 1 ;
. . .
i n s t r u k c j a N ;
end
.
7. Dane
— definicje stałych CONST
— definicje typów TYPE
— deklaracje zmiennych VAR
7.1. Typ zmiennej
— zbiór (przedział) jej wartości,
— format jej zapisu w pamięci (wielkość pamięci, struktura),
— zbiór możliwych operacji.
Typy
Proste
Strukturalne
Wskaźnikowe
(tablice,
rekordy,
zbiory,
pliki)
Porządkowe
Rzeczywiste
single,
real,
extended,
double,
comp
Predefinowane
Definiowane
okrojony
wyliczeniowy
Całkowity
Logiczny
boolean
Znakowy
char
word
integer
longint
shortint
byte
8. Typ porządkowy
Zbiór elementów ze zdefiniowaną relacją porządku.
Funkcje standardowe:
— Ord(N) — numer porządkowy,
— Pred(N) — poprzednik (element poprzedzający),
— Succ(N) — następnik (element następny ),
8.1. Typy porządkowe całkowite
Nazwa
Zakres
Format
Shortint
-128 . . . 127
1 bajt
Integer
-32768 . . . 32767
2 bajty
Longint -2 147 483 648 . . . 2 147 483 647 4 bajty
Byte
0 . . . 255
1 bajt
Word
0 . . . 65535
2 bajty
Operatory:
+
,
∗
,
/
, div , mod ,
=
,
<
,
>
,
<=
,
>=
,
<>
,
:=
div operator dzielenia całkowito-liczbowego, np: 5 div 2 = 2
mod operator reszty z dzielenia (modulo), np: 5 mod 2 = 1
8.2. Typ porządkowy logiczny
Nazwa
Zakres
Format
Boolean False, True
1 bajt
Operatory:
and , or , not , xor,
=
,
<
,
>
,
<=
,
>=
,
<>
,
:=
8.3. Typ porządkowy znakowy
Nazwa
Zakres
Format
Char
# 0 . . . # 255
1 bajt
Operatory:
=
,
<
,
>
,
<=
,
>=
,
<>
,
:=
,
+
Funkcje standardowe: Chr(numer znaku) , UpCase(znak)
9. Typ wyliczeniowy
Typ porządkowy definiowane! Trzeba zdefiniować, żeby móc używać.
type
Dni = ( Pon , Wt , Sr , Czw , Pt , Sob , N i e d z ) ;
Meble=( s t ó ł , k r z e s ł o , s z a f a , t a p c z a n ) ;
Operatory:
<
,
>
,
<=
,
>=
,
=
,
<>
,
:=
9.1. Typ okrojony
type
Oceny = 1 . . 5 ;
L i t e r y = ’A ’ . .
’ Z ’ ;
N u m e r y d n i = 1 . . 31 ;
D n i r o b o c z e = Pon . . Pt ;
9.2. Typy proste rzeczywiste
Nazwa
Zakres
Format
Real
2.9 ∗ 10
−39
÷ 1.7 ∗ 10
38
6 bajtów
Single
1.5 ∗ 10
−45
÷ 3.4 ∗ 10
38
4 bajty
Double
5.0 ∗ 10
−324
÷ 1.7 ∗ 10
308
8 bajtów
Extended
3.4 ∗ 10
−4392
÷ 1.1 ∗ 10
4932
10 bajtów
Comp
(−2
63
+ 1) . . . (2
63
− 1)
8 bajtów
Operatory:
+
,
∗
,
∗
,
/
,
=
,
<
,
>
,
<=
,
>=
,
<>
,
:=
10. Instrukcja przypisania
{
o g ó l n a p o s t a ć i n s t r u k c j i
p r z y p i s a n i a
}
N a z w a z m i e n n e j
:=
w y r a ż e n i e ;
Wyrażenia (matematyczne):
— jeden poziom,
— nie opuszczamy znaku mnożenia,
— nie ma nawiasów kwadratowych i klamrowych,
— liczby niecałkowite z kropką
1
5
x + 7
(a − b)(c + d)
− 11
1 / 5
∗
( ( x +7)/(( a
−
b )
∗
( c+d ))
−
11)
11. Standardowe funkcje arytmetyczne
Nazwa Wynik
Typ argumentu
Typ wyniku
Abs
wart. bezwzględna
rzeczywisty, całkowity rzeczywisty, całkowity
ArcTan arcus tangens
rzeczywisty, całkowity rzeczywisty
Cos
cosinus
rzeczywisty,
całkowity
rzeczywisty
Exp
e do potęgi
rzeczywisty, całkowity rzeczywisty
Frac
część ułamkowa
rzeczywisty, całkowity rzeczywisty
Int
część całkowita
rzeczywisty, całkowity rzeczywisty
Ln
logarytm naturalny
rzeczywisty, całkowity
(> 0)
rzeczywisty
Pi
3.1415926536
nie ma
rzeczywisty
Round
zaokrąglenie do naj-
bliższej liczby całkowi-
tej
rzeczywisty
Longint
Sin
sinus
rzeczywisty, całkowity rzeczywisty
Sqr
kwadrat
rzeczywisty, całkowity rzeczywisty, całkowity
Sqrt
pierwiastek
rzeczywisty, całkowity
(> 0)
rzeczywisty
Trunc
część całkowita
rzeczywisty
longint
12. Przykłady
x = sin(πx)
x := s i n ( Pi
∗
x )
c =
√
x
2
+ y
2
c := s q r t ( sqr ( x)+ sqr ( y ) )
z = e
n+1
+ ln
1
|k − 1|
z := exp ( n+1)+ l n ( 1 / abs ( k
−
1))