Pascal - Eine kinderleichte Einführung

220
PASCAL Ei kinderleichte Einfuehrung von Ralf Westphal

description

Einführung in Turbo Pascal aus dem Jahre 1985 von Ralf Westphal.220 Seiten mit mehr als 60 liebevoll handgezeichneten Illustrationen. Außerdem Struktogramme, Listings und graphische Annotationen.Der Text war ursprünglich als inoffizielles Lehrbuch für den Einsatz in der Schule des Autors gedacht. Dazu kam es dann aber doch nicht... Und auch kein Verlag konnte sich damals für das Manuskript erwärmen. Lehr- und Fachbücher in Deutschland sollten ernsthafter sein.Mit dem Internet ist nun aber alles anders. Einer Veröffentlichung steht nichts im Wege. Viel Spaß beim Stöbern in einem Text zu uralter Softwaretechnologie.

Transcript of Pascal - Eine kinderleichte Einführung

Page 1: Pascal - Eine kinderleichte Einführung

P A S C A L

E i n © k i n d e r l e i c h t e E i n f u e h r u n g

von

Ralf Westphal

Page 2: Pascal - Eine kinderleichte Einführung

WESTPHAL, RALF:PASCAL - Eine kinderleichte Einfuehrung

1. Auflage, 1985

ISBN: leider noch keine

Al l r ights reserved

No part of this book may be translated or reproduced inany form without written permission from Ralf Westphal.

(c) 1985 by Ralf "Westphal, 3044 Neuenkirchen

Printed in Germany

Page 3: Pascal - Eine kinderleichte Einführung

Dem geneigten Leser /'r~,^' zum Geleit

Da liegt sie nun vor each: die lang erwartete kinderleichteEinfuehrung in die Programsierspräche PASCAL.

denen, die da fragen, uas dieses Heitere Buch zum Thema nunsoll, sei gesagt, dass hiermit versucht wird, in (hoffentlich vonallen so empfunden) Hitziger und lockerer Meise eine oft alssehr trocken eingestufte Sache leicht, in kleinen Haeppchen, zuvermitteln. Auf jeden Fall einmal nicht sooo bierernst, nie diesin zuvielen Fachbuechern geschieht, welche jedem Neuling das Lernen nicht unbedingt leichter machen. Schliesslich kann man nichtvon jedermann ernarten, dass er freinillig eine Programmiersprache lernt.

Das Buch soll KEINE komplette Einfuehrung in die allerletztenFeinheiten von PASCAL sein/ Es soll KEINE Einfuehrung fuer Leutesein, die schon 5 Programmiersprachen beherrschen und nun einesechste lernen Hollen. Es soll KEINE Einfuehrung sein, die auchin die Tiefe der theoretischen Informatik hinabstoesst und vielleicht Effizienzabschaetzungen fuer verschiedene Such- und Sortieralgorithmen liefert.

Es soll demjenigen eine Einfuehrung in PASCAL bieten, der bisher uenig oder keine Ahnung von Informatik hatte. Es soll dieverirrten BASIC-Hacker auf den Pfad der Tugend bringen. Es solldie Grundlagen legen, die ein Verstaendnis weiterfuehrender Literatur ermoeglichen. Es soll Spass machen/

Jooo, das waer's wohl auch schon. Reicht.

Hie schon ernaehnt, hier uird kein Anspruch auf {/ollstaendig-keit erhoben. Derjenige, der in die letzten Feinheiten eindringenmoechte, sollte zusaetzliehe Buecher bezueglich PASCAL studieren.Davon abgesehen uird hier ein PASCAL-Dialekt benutzt (TURBO-PASCAL), der znar sehr verbreitet, aber eben z.B. nicht aufGrossrechenanlagen verfuegbar ist. Bei Besonderheiten Hird je-neils darauf hingewiesen und ein Konsultieren der eigenenHandbuecher empfohlen.

Bevor Ihr anfangt, sei Euch noch das Kapitel 3.11. ans Herzgelegt. Ihr koennt es ruhig schon zu Beginn der Lektuere lesen,auch Nenn das Verstaendnis fuer die Beispiele noch fehlt. DerInhalt ist sehr nichtig und sollte schon bei Eurem ersten PASCAL-Programm Anwendung finden.

Lange Rede, kurzer Sinn, fangt einfach 'mal an.

Mein Dank fuer die Unterstuetzung bei der Erstellung diesesBuechleins gilts Herrn Ralf Lange und dem Gymnasium Sol tau sowieganz besonders Heloe Baumann, mit dem zusammen die ersten eineinhalb Versuchsmanuskripte in tagelanger Arbeit mit viel Spass geschaffen Hürden.

N e u e n k i r c h e n i m J u l i 1 9 8 5 R a l f W e s t p h a l

Page 4: Pascal - Eine kinderleichte Einführung

INHALTSVERZEICHNIS

K a p i t e l U e b e r s c h r i f t u . n e u e B e g r i f f e S e i t e

1 . H a r t e S c h a l e - W e i c h e r K e r n 1

1 . 1 . H a r d w a r e o d e r A l l e s w a s m a n a n f a s s e n k a n n 1Hardware, CPU

1 . 2 . S o f t w a r e o d e r W a s m a n s i c h s o a l l e s a u s d e n k e n k a n n 3Sofware, Maschinencode, warum PASCAL

1 . 3 . D e r A l g o r i t h m u s , b e i d e m j e d e r m i t m u s s 5Schrittweise Verfeinerung, Struktogramme

1 . 4 . N o c h e i n i g e F o r m a l i t a e t e n 8Grammatik, Syntaxdiagramme

D a s P r o g r a m m - A u f s u c h t u n d H e g e 1 2PROGRAM, BEGIN, END, Kommentare, Block, Name

3 . M a n n e h m e - o d e r S p r a c h k o n s t r u k t e 1 5

3 . 1 . W i e s a q t e s m i r m e i n C o m p u t e r 1 5HRITEÜN), String, Character

3 . 2 . K o n s t a n t e n u n d e i n k i n d g e r e c h t e s S p e i e h e r m o d e l 1 2 0CONST, Konstanten, Vereinbarungsteil

3 . 3 . E s i s t d o c h n i c h t a l l e s s o k o n s t a n t w i e ' s a u s s i e h t 2 3o d e r . . .

VAR, INTEGER, REAL, READ(LN), Variable

3 . 4 . N i e d e r e M a t h e m a t i k 3 0DIV, MOD, SIN, COS usw., Standartfunktionen

3 . 5 . E s l a e s s t b i t t e n : S e i n e H e r r l i c h k e i t , d i e W e r t s u - 3 4Weisung

:=, Wertzuweisung

3 . 6 . V e r z w i c k t e s m i t V e r z w e i g u n g e n 3 7IF, THEN, ELSE

3 . 7 . D i e W a h r h e i t u n d n i c h t s a l s d i e W a h r h e i t 4 6TRUE, FALSE, BOOLEAN, AND, OR, NOT, >, <, . . .

3 . 8 . V o n d e n C h a r a k t e r n u n s e r e s C o m p u t e r s 5 fiCHAR, ORD, CHR

3 . 9 . E t w a s C o m p u t e r - M a k r a m e e o d e r . . . 6 0REPEAT, UNTIL

3 . 1 0 . D a s E n d e a m A n f a n g & 6WHILE, DO

Page 5: Pascal - Eine kinderleichte Einführung

3 . 1 1 . P r o g r a m m i e r u n g i s t a u c h e i n e S a c h e d e r A e s t h e t i k 6 9Optische Gliederung

3 . 1 2 . D a c a p o 7 3FOR, TO, DOUNTO, DO

3 . 1 3 . E s w i r d z u T i s c h q e b e t e n 7 9CASE, OF, ELSE

3 . 1 4 . " E y , w a s i s ' n d a s f u e r ' n T y p ? . . . " 8 6

3 . 1 4 . 1 . S k a l a r t y p e n 8 7SUCC, PRED, ORD

3 . 1 4 . 2 . U n t e r b e r e i c h s t y p e n 9 0

3 . 1 4 . 3 . N e u e T y p e n d e fi n i e r e n 9 2TYPE

3 . 1 5 . I n L i n i e a n g e t r e t e n . . . 9 4ARRAY, OF, MAXINT

3 . 1 5 . 1 . W i r e n t s c h w i n d e n i n h o e h e r e D i m e n s i o n e n 1 0 2Mehrdimensionale Felder

3 . 1 5 . 2 . A q a i n s t a l l . . . S t a n d a r t s 1 0 5'STRING, LENGTH, CONCAT, COPY, POS, DELETE,INSERT, CLRSCR, CLREOL, GOTOXY

3 . 1 6 . E i n e M e n g e N e u e s 1 1 4S E T, O F, I N

3 . 1 7 . W h a t K i n d ' a R e c o r d s d ' Y a h a v e ? 1 2 3RECORD, END

3 . 1 8 . V o n o b e n n a c h u n t e n i n P A S C A L 1 2 8

3 . 1 8 . 1 . " T h e s a m e p r o c e d u r e a s e v e r y y e a r , J a m e s ! " 1 3 0PROCEDURE

3 . 1 8 . 2 . F r i s c h g e s c h a c h t e l t i s t h a l b g e w o n n e n 1 3 6

3 .18 .3 . R in in ' s Un te rp rogramm, ' raus aus ' rn Un te rp rogramm 143

3 . 1 8 . 4 . U n d j e t z t n o c h m e h r E i g e n e s 1 5 1FUNCTION

3 . 1 8 . 5 . R e k u r s i o n e n n u r f u e r S c h w i n d e l f r e i e 1 6 1FORWARD, (*$A-*), (#*A+*)

3 . 1 9 . W i r s c h a f f e n f u e r d i e E w i g k e i t 1 6 6

3 . 1 9 . 1 . D i e B u e r o k r a t i e b e g i n n t 1 6 7FILE, OF

3 . 1 9 . 2 . W i r l e r n e n l e s e n 1 7 0ASSIGN, RESET, READ, EOF, CLOSE

3 . 1 9 . 3 . W i r l e r n e n s c h r e i b e n 1 7 4REWRITE, WRITE

Page 6: Pascal - Eine kinderleichte Einführung

3 . 1 9 . 4 . D e r e l e k t r o n i s c h e B r i e f 1 8 1TEXT, READLN, WRITELN, EOLN

3 . 1 9 . 5 . E n d e o h n e S c h r e c k e n 1 8 6C**jT-*>, f**/*#->, IORESULT

> A p p e n d i x < 2 0 3

1 . D i e H J T H - A n w e i s u n g 2 0 4WITH, DO

2 . Z e i g e r 2 0 6*, NIL, NEW, DISPOSE

L i t e r a t u r l i s t e 2 1 0

S t i c h w o r t v e r z e i c h n i s a m E n d e

Page 7: Pascal - Eine kinderleichte Einführung

Harte Schale - Weicher Kern

1.1 Hardware oder A l1es was man anfassen kann

C laus -Pe te r -Uwe f ruehe r :

D a s i s t C l a u s - P e t e r - U w e . C l a u s - P e t e r - U w e a r b e i t e t h i e r i ns e i n e m B u e r o . E r w a r t e t a u f e i n e n A n r u f v o n s e i n e n C h e f . D e r C h e fs a g t i h m d a n n , w a s e r t u n s o l l .

H i e r i s t d e r A n r u f v o n s e i n e m C h e f . C l a u s - P e t e r - U w e s c h r e i b te i f r i g m i t . N u n w e i s s e r , w a s e r t u n s o l l . J e t z t w a r t e t e r n u rn o c h d a r a u f , d a s s e r a n f a n g e n d a r f .

J e t z t g e h t ' s l o s . Z u e r s t l e g t e r s i c h a l l e s , w a s e r b r a u c h t z ur e c h t , u n d d a n n f a e n g t e r a n z u a r b e i t e n :

E r r e c h n e t , e r s c h r e i b t , e r r u f t a n , e r w u e h l t s i c h d u r c h K a r -t e i k a e s t e n , r e n n t i n s A r c h i v , r e n n t w i e d e r z u r u e c k , e r l e e r t A b -l a g e k a e s t e n , f u e l l t s i e w i e d e r a u f u s w . . . .

Page 8: Pascal - Eine kinderleichte Einführung

Claus—Pete r—Uwe i s t f e r t i g (man s ieh t ' s ) . E r ha t a l l es so gemacht, wie sein Chef es ihm gesagt hatte,und sagt ihm, dass er a l les er led ig t ha t .

Nun ruft er diesen an

£ ^C.l aus—Peter—Uwe heute:

Von se inem Che f w i rd e r l i ebevo l l CPU genann t . Das i s t neuhochdeutsch und heisst Central Processing Unit <. = Zentrale- Vera r b e i t u n g s e i n h e i t ) . D i e s e Z e n t r a l e i n h e i t i s t d a s H e r z e i n e sjeden Computers und verantwor t l i ch fuer d ie kor rek te Ausfuehrungaller Befehle, d.h. sie kuernrnert sich um eure Programme.

C P U i s t h e u t e v i e l , v i e l s c h n e l l e r a l s f r u e h e r, a b e r, u n d d a sis t der Haken, man muss ihm ganz genau sagen, was er tun sol l(manchmal werdet ihr euch schon wundern, wie strohdumm CPU heutei s t ! ! ) .

Se in Te le fon i s t j e t z t e in B i l dsch i rm m i t Tas ta tu r, au f dem de rChe f se i ne Be feh le e i n t i pp t , d i e CPU i n se i nem Spe i che r ab l eg tund nachei nander abarbeitet.,

Spe i che r — ob d ie k l e i nen Ch ips (ne in , ke ine Pap r i ka—Ch ips )oder die mehr oder weniger grossen, sich wie wild in einem Kastendrehenden Scheiben (Disket ten oder e infach Floppies) —, Tastatur,D r u c k e r , B i l d s c h i r m o d e r C P U s e l b s t , d a s a l l e s g e h o e r t z u rHARDWARE - man kann's anfassen -.

Page 9: Pascal - Eine kinderleichte Einführung

l . : Software oder Was man sich so alles ausdenken kann

Je t z t ko mme n w i r so a l l ma e h l i ch zu d e m, w a s e u ch e i g e n t l i chi n t e r e s s i e r t , d e n P r o g r a m m e n , d i e i h r s c h r e i b e n w o l l t - a u c hSOFTWARE genannt -. Sie machen das Wesentliche an einem Computera L i s , o h n e s i e g e h t n i c h t s . S e l b s t d e r t o l l s t e R e c h n e r, z . B . e i nApple oder C-64 Cho ho ho) , i s t nu tz los , wenn ke in Mensch s icherbarmt, ein Programm fuer ihn zu schreiben.

Ihr wisst : d ie Programme werden von CPU ausgefuehrt . Das ungeme in Laes t i ge da ran i s t : CF 'U ve rs teh t nu r Zah len a l s Anwe is u n g e n . J a , i h r k o e n n t e s r u h i g g l a u b e n , n u r Z a h l e n ; d a f u e r i s ter aber ungeheuer schnel l .

E i n B e i s p i e l :

OEOOi 2A OB OE0E03: 11 OA 00OE06: 19OE07: 22 00 00OEOAi C9OEÖB: Ol 00

Ve r w i r r e n d , g e l l ? D a s i s t e i n k l e i n e s B e i s p i e l , w i e s o e i n eAnweisungsfolge aussehen koennte, d ie CPU verstehen wuerde. Sieist im sogenannten MASCHINENCDDE gesc*hrieben. Zu allem Uebel mussman die Zahlen in einem anderen Zahlensystem eingeben als wie manes sons t benu tz t . Norma l i s t das Zehnersys tem, h ie r j edoch w i rddas Sechzehnersystem benutzt (HEXADEZIMALSYSTEM). Zu kompliziert?Das dachten s ich schon Leute vor euch und haben 'was bessereser funden...

Die naechste Stufe:

ZAHL:

LD HL, (ZAHL)LD DE, 10ADD HL, DELD (ZAHL) , HLRETDEFW 1

Schon vertrauter, man sieht sowas wie Worte usw.

Was, i h r v e r s t e h t i m m e r n o c h n i c h t s ' Das ist kaum verwunderl ich. Man hat naeml ich d ie Zahlenkombinat ionen nur e in ganzkle in-wenig zusammengefasst und den Befehlen Kuerzel als Namen gegeben:LD fuer LADE, ADD fuer ADDIERE usw.; frueher einmal war das einegewalt ige Verbesserung gegenueber den vermalledeiten Zahlen.

S c h l a u e ( n e i n , v i e l m e h r f a u l e ) P r o g r a m m i e r e r u n d W i s s e nscha f t l e r sannen le tz tend l i ch jedoch au f mehr Komfor t . . .

und h ie r i s t PASCAL ( t ra ra t ra ra) :

ZAHL ZAHL + 10

To l l , n i c h t ? I h r v e r s t e h t a u f A n h i e b w a s d a s b e d e u t e n s o l l ,naemlich der Wert der Zahl ZAHL (wie immer er sein mag) sol l um10 erhoeht werden.

Page 10: Pascal - Eine kinderleichte Einführung

"Warum muss man denn dann PASCAL als Sprache erstIch kann doch Deutsch! Versteht CPU das denn nichtmit ein wenig Muehe)?"

en tw icke ln?( v i e l l e i c h t

Jeder we iss : Muehe a l le in qenueqt n ich t !

Eure Anweisungen muessen CF'U erst mal verstaendlich gemacht werden, indem sie in seine Zahlensprache (Maschinencode) uebersetztw e r d e n . D a s m u s s s c h n e l l u n d e i n f a c h m o e g l i c h s e i n ; i h r w o l l tdoch n ich t Tage darau f war ten , dass der Compute r end l i ch e twasfuer euch tu t .

D e u t s c h o d e r E n g l i s c h s i n d d a f u e r a b e r v i e l z u k o m p l e x u n dmehrdeutig! Was heisst z.B. DER GEFANGENE FLOH ? Na, hm, ohneKontex t und Gross- /K le inschr i f t kommt man n ich t darau f . Und gerade das is t es, was wi r von CPU n icht ver langen koennen, wozuer/es/sie zu dumm ist: zu VERSTEHEN! CPU fuehrt nur aus, verstehtaber niemals! ! ! ! ! ! ! !

PASCAL ist hier der Retter in der Not.( t t a r \ e i n f a c h , p r a e z i s e , s t r u k t u r i e r tP r o g r a m m e s c h r e i b e n , d i e s i c h f a s t w i elassen (gegenueber Deutsch oder so) . Ihrben im Ver lauf d ieser E in fuehrung werdet

Mit dieser Sprache kann( s p a e t e r m e h r d a v o n )v o n s e l b s t u e b e r s e t z e nmuesst das mal so glau-ihr dem immer mehr zu

st immen koennen -le tz ten Re ihe - .

j a , j a , a u c h d i e B A S I C - J u e n g e r d o r t i n d e r

Anmerkung: BASIC (gesprochen: Baessig) is t auch so eine Sprache, von der viele meinen, man koenne mit ihr tol l programmieren.S t immt sogar ; man kann dami t verdammt lange, kompl iz ie r te Prog r a m m e s c h r e i b e n . A b e r d a s Ve r s t e h e n d i e s e r P r o g r a m m e s i e h tungefaehr so aus:

V e r s t a e n d n i s e i n e s B A S I C - P r o q r a r n r n s = 1Zeilenzahl des Programms'

Ach , j a , zu a l l em Uebe rfluss i s t PASCAL noch l e i ch t e r l e rnba ru n d b i e t e t M o e g l i c h k e i t e n z u r A l g o r i t h m e n f o r m u l i e r u n g f u e r e i n egrosse Vie lzah l von Prob lemen, se i es F inzanzbuchha l tung, Walzw e r k s t e u e r u n g , M u t t i s K u e c h e n v e r w a i t u n g o d e r d i e R e a l i s a t i o ne ines Sp ie ls .

So , j e t z t geh t ' s an ' s E ingemach te . . .

4

Page 11: Pascal - Eine kinderleichte Einführung

1 . 3 . D e r A l g o r i t h m u s , b e i d e m j e d e r m i t m u s s

Wi r e r i nne rn uns ans C laus -Pe te r -Uwe , den f r eund l i chen He r rnm i t S c h r e i b t i s c h ?

Nun gut. Damals wie heute hat der Chef s icher ein Poblem, zudessen Loesung er Claus-Peter-Uwe bemueht.

N e h m e n w i r e i n m a l a r t T d e r C h e f w o l l t e K a f f e e f u e r e i n e B esprechung haben. Nun is t Claus-Peter-Uwe ein Hausmann mit zweil i nken Fuessen , de r im Norma l fa l l sogar das Wasser anb rennenlaesst. Daher muesste der Chef ihm ganz genau erklaeren, was erwann wie tun soll. Dazu zerlegte er das Problem "KAFFEKOCHEN" inmehrere Einzelprobleme, als da waeren:

1. Wasser holen2. geholtes Wasser in die Kaffeemaschine giessen3 . F i l t e r t u e t e i n d e n F i l t e r e i n s a t z t u n4. proport ional zur Menge des geholten Wassers Kaffee in

d e n F i l t e r l o e f f e l n5. F i l ter auf d ie Kanne setzen6. F i l ter und Kanne korrekt in Kaffemaschine e infuegen7. Maschine einschal ten8. war ten9. wenn Kaffee durchgelaufen, dann servieren

Das komplexe Problem "KAFFEEKOCHEN" ist durch die Unterteilungkonkreter und uebers icht l ieber geworden.

Sol l te ein Tei1 problern immer noch zu kompl iz iert sein, so kannes noch weiter aufgespalten werden.

Z.B. Punkt 1«, Wasser holen:

1.1 Kanne greifen1.2 mit Kanne zum naechsten Wasserhahn eilen1.3 Kanne mit Wasser fuellen1 .4 mi t ge fue l l te r Kanne zuruecke i len

D ieses Sp ie l chen kann man b i s zu r Haa rspa l te re i t r e i ben . Mannennt es allgemein die Methode der SCHRITTWEH SEN VERFEINERUNG.

Ob iges Be i sp ie l mag t r i v i a l e r sche inen ; be i g roesse ren P rob lemen is t d iese Vorgehensweise des schr i t tweisen Ver fe inerns —d.h.a l le Prob lempunk te , d ie noch zu unuebers ich t l i ch s ind in k le inereU n t e r p u n k t e z u t e i l e n , d e r e n L o e s u n g e i n f a c h e r i s t - j e d o c h v o ngrossem Nutzen.

Ein solches von vielen Lieber sc haetzt es Problem ist das Erarbeit e n e i n e s g u t e n R e f e r a t e s . D i e s e r l e d i g t s i c h f a s t v o n s e l b s t ,wenn man sich 5 (fuenf) Minuten Zeit nimmt und ueberlegt, was undin we lche r Fo rm man ve rm i t t e ln w i l l ( so l l ) .

A l so :

1 . I c h s o l l e i n R e f e r a t h a l t e n ( w i r d w e i t e r v e r f e i n e r t )

1 . 1 I c h e r a r b e i t e d a s R e f e r a t ( w i r d w e i t e r v e r f e i n e r t )1.2 Ich hal te das Referat

1 . 1 . 1 I c h p r a e z i s i e r e d i e P r o b l e m s t e l l u n g d e sReferats themas (was wi l l der Lehrer e igentl i ch hoeren?)

Page 12: Pascal - Eine kinderleichte Einführung

1.1.2 Ich trage mein Wissen zum Thema zusammen1.1.3 Ich z iehe bei grav ierenden Luecken wei tere

Quellen heran1.1.4 Ich ordne das ganze Material1 .1 .5 Ich reduziere das Mater ia l auf das Wesent l iche1 .1 .6 I ch be re i te das Ma te r ia l au f zu r Ve rm i t t l ung

Seht ih r, so e in fach is t das. Um aber w ieder in R ichtung Computer zu kommen, denn darum sol l 's ja eigent l ich hier gehen:

B e i m E n t w u r f e i n e r A n w e i s u n g s f o l g e , d i e s c h l i e s s l i c h a l s P r ogramm von unserem Computer ausgefuehrt werden soll, bedienen wiruns der gleichen Vorgehensweise, wie wir spaeter noch sehen werd e n . D a z u j e d o c h j e t z t s c h o n e i n i g e o p t i s c h e G l i e d e r u n g s v o r -sch r i f t en , w ie s i e auch von P rofis ( j a , j a ) benu tz t we rden :

- Um jedes Tei lproblem wird ein Kaestchen gezeichnet.

+ 1! Teilproblea 2 !

+ +I Teilproblem 3 !

+ + + iI Teilproblea 1 i+ 1

D iese Kaes tchen (B ioecke) werden in r i ch t ige r Re ihen fo lgeu n t e r e i n a n d e r a n g e o r d n e t ( D a s , w a s z u e r s t g e t a n w e r d e nsol l , kommt obendrauf , was fo lgen sol l , kommt drunter usw.)

+ fi Teilprobleo 1 !t 1! Teilprobleo 2 !+ +! Teilproblea 3 !t +

F a l l s Te i l p r o b l e m e n o c h e i n m a l a u f z u t e i l e n s i n d , s o l l t edies in gle icher Weise durch geordnete Kaesten geschehen.

+ +■ Teilproblea 1 !+ + + +! Teilproblea 2 ! <—+ / ! Teilproblea 2.1 I+ 1 + < + +I Tei lprobleo 3 ■ \ ! Tei lprobleo 2.2 i+ + i +

Page 13: Pascal - Eine kinderleichte Einführung

F ' r a k t i s c h e r w e i s e i s t j e d e m K a s t e n s t a p e l e i n e U e b e r s c h r i f tz u g e b e n , d i e d a s m i t i h m z u l o e s e n d e P r o b l e mc h a r a k t e r i s i e r t .

Grossprobles:

+ +! Teilproblea 1 !+ +! Teilproblea 2 I+ +I Teilproblea 3 I+ +

Diese Blockdiagramrne werden a l lgemein STRUKTQGRAMME oder auchN A S 5 I - S C H N E I D E R M A N N - D i a q r a m m e g e n a n n t . D i e A u f t e i l u n g i n s o l c h eBioecke nennt man STRUKTURIERUNG.

S c h o n d e n a l t e n R o e m e r n s c h e i n e n S t r u k t o g r a m r n e g e l a e u fi g g ew e s e n z u s e i n , a u c h d o r t h i e s s e s :

Divide et impera ( Teile und herrsche )

A u c h f u e r d e n C o m p u t e r r n u e s s t i h r d i e z u l o e s e n d e A u f g a b e i nk l e i n e H a e p p c h e n a u f t e i l e n . D i e s e m u e s s e n n o c h e i n f a c h e r u n d d et a i l l i e r t e r s e i n a l s w i e d i e o b i g e n , d a d e r R e c h n e r v i e l u n i n t e ll i g e n t e r i s t a l s C l a u s - P e t e r - U w e .

U n d e b e n d i e s e g a n z e n k l e i n e n H a e p p c h e n , d i e A n w e i s u n g s f o l g e ,d ie eure Au fgabe loesen so l l , d ie nenn t man ALGORITHMUS.U n d e i n P R O G R A M M i s t e i n A l g o r i t h m u s i n e i n e r f u e r d e n R e c h n e rv e r s t a e n d l i c h e n F o r m , d . h . i n e i n e r S p r a c h e , d i e e r v e r s t e h t( fuer uns PASCAL) .

A u f z u r n a e c h s t e n S t u f e :

Page 14: Pascal - Eine kinderleichte Einführung

1 . 4 . Noche i n ige Forma1itaeten

T ja , da kommen w i r n i ch t d rumherum.

Es s ieh t so aus : wenn i h r e i n P r o b l e m h a b t ( e i n q a n z t o l l e s, u n g e h e u e r s c h w e r u s w . ) u n d d a f u e r e i n e L o e s u n g a u fn a t u e r l i c h

e u r e m R e c h n e r p r o g r a m m i e r e n w o l l t , d a n n e n t w e r f t i h r e i n e nw a a a a a h n s i n n i g e n A l g o r i t h m u s u n d u e b e r t r a g t i h n i n d i e S p r a c h ePASCAL, damit der Computer mal 'was zu tun bekommt.

D a b e i i s t a b e r a u c h e i n e G r a m m a t i k z u b e a c h t e n - w i e i m D e u ts c h e n o d e r E n g l i s c h e n - , d . h . i h r k o e n n t n i c h t e i n f a c h s a g e n w a si h r w o l l t , s o n d e r n i h r m u e s s t e u c h a n K o n v e n t i o n e n h a l t e n : d i ePASCAL-ör ammat i k.

W e n n i h r n a t u e r l i c h z u H a u s e a u c h s a g t " N i c h t m e i n e e s s ' S u p p ei c h ! " , d a n n g e b t d i e s e E i n f u e h r u n g d o c h b i t t e a n e i n e n a n d e r e nW i s s e n s d u r s t i g e n w e i t e r , s c h a d e e i g e n t l i c h .

N e i n , i h r s e h t , m a n m u s s s i c h s c h o n i n e i n e r S p r a c h e a n e i n eG r a m m a t i k h a l t e n , s o n s t v e r s t e h t m a n j a g a r n i c h t s m e h r ; u n d g en a u s o i s t e s i n P A S C A L , n u r d a s i n d d i e R e g e l n l a n g e n i c h t s ok o m p l i z i e r t , d a f u e r a b e r s t r e n g e r !

S inn d ieses Kap i t e l s i s t es nun , d i e SYNTAXDIAGRAMME e inzu fueh -ren . SYNTAX bedeu te t sov i e l w ie G rammat i k .

D i e s e o m i n o e s e n S y n t a x d i a g r a r n m e g e b e n i n t o l l u e b e r s i c h t l i c h e rFo rm an , w ie i h r bes t immte PASCAL-Wor te und Kons t ruk te zusammens e t z e n d u e r f t , d a m i t e i n z u m i n d e s t s y n t a k t i s c h r i c h t i g e s P r o g r a m mherauskommt.

E i n B e i s p i e l :

satz:, ' ~ " \ * + ♦ *

—>--■{ ICH ;—>—! verb !—>-r—! ort i--r—>-L < L

verb: r->—' 6EHE i—>-

->---

■>---; STEHE )-->- -(NICHTJ-

ort: ->--•\ IH HAUS r- ->-

->--t">~v IH GARTEN J--->---f-->-

--->--{AUF DER STRASSE)-1

Hiermi t koennen e ine Menge nuetz l ieber Saetze erzeugt werden.Jedermann kann an seinem eigenen Grarnmatikverstaendnis pruefen,ob s ie kor rek t s ind ; is t das so, dann s ind s ie auch den Riege ln ,d ie d ieses Syntaxd iagramm vorg ib t , entsprechend geb i ldet worden.

Dabei bedeutet e in Wort oder Zeichen in einem Kreis (oder rund e n K a s t e n ) , d a s s m a n d i e s e s Z e i c h e n s o , w i e e s d o r t s t e h t ,in den Satz uebernehmen muss. Siehe dazu auch ICH und IM GARTENusw.

8

Page 15: Pascal - Eine kinderleichte Einführung

Ein ECKIGER Kasten bedeutet dass man IM EINER DEFINITION MITDEM NAMEN der in ihm steht, nachschauen muss, was man einsetzend a r f ( w i e ' s w e i t e r g e h t ) .

Als Laie kann man sich eine Eselsbruecke bauen, indem man dieD a r s t e l l u n g a l s S t r a s s e n p l a n b e t r a c h t e t , i n w e l c h e m e s E i nbahn Strassen und Anschlussplaene gibt.

Dann wuerde obiges Beispiel etwa so aussehen.

? » e r U u b c : T » a e h e P l a n : ^ S i e h e P l a n ; ^ f »

ICH V£RB DPT

4

Es s ind a l le Saetze er laubt , d ie dadurch geb i lde t werden koennen, dass ihr den Regeln der STVO folgend von l inks nach rechtsdurch das Syntaxd iagramm fahr t . Wi l l sagen: n ich t fa lschherum ine ine E inbahns t rasse , n i ch t l i nks abb iegen , wo nu r rech ts e r l aub ti st usw.

E in " s iehe P lan so -und-so " bedeu te t , i h r rnuess t i n dem angegebenen Plan nachschauen, was ihr an der Stel le tun duerf t , wie 'swe i te rgeht au f der S t rasse.

"er laubt : so-und-so" sagt euch, welches Symbol oder Zeichen ihrin euren PASCAL-Satz aufnehmen rnuesst, um einen grammatikalischkorrekten zu bekommen.

Z u r Ve r d e u t l i c h u n g e i n i g e g u e l t i g e S a e t z e , d i e n a c h d e m D i agramm erzeugt werden koennen:

ICH GEHE NICHT IM HAUS

ICH STEHE IM GARTEN IM HAUS

ICH GEHE IM HAUS AUF DER STRASSE IM GARTEN IM HAUS

S o k o e n n t e n w i r d a s S p i e l c h e n w e i t e r t r e i b e n . E s i s t j e d o c hschnell zu sehen, wie aus den Regeln tolle deutsche Saetze gebast e l t w e r d e n k o e n n e n , d i e n i c h t u n b e d i n g t i n h a l t l i c h w i r kl ichkei tsnah s ind, auf a l le Fael le aber GRAMMATIKALISCH korrekt ,was j a das w ich t i gs te i s t .

Page 16: Pascal - Eine kinderleichte Einführung

H a l t , j e t z t d i e G e g e n s e i t e , e i n i g e U M G U E LT I G E B e i s p i e l e ( m i tE r k l a e r u n q ) :

ICH IM HAUS (es wurde n i ch t im P lan ve rb nachgeschau t , wase i n z u s e t z e n i s t , s o n d e r n e i n f a c h m i t o r t w e i t e rgemacht )

ICH GEHE STEHE GEHE IM HAUS(nach GEHE in verb kann man nur in RichtungAusgang von verb we i te r fahren , mehrere Verb e n s i n d n i c h t m o e q l i c h )

A u f j e d e n F a l l s o l l t e t i h r d i e I n t e r p r e t a t i o n s o l c h e r S y n t a xd i a g r a m m e v e r i n n e r l i c h e n ; s i e t a u c h e n a l l e n a s ' l a n g i n d e r P r o fi -l i t e r a t t i r a u f .

S i e h t n u r s o k o m p l i z i e r t a u s , i s t a b e r e i n e e r h e b l i c h e E rl e i c h t e r u n g b e i m E r k l a e r e n e i n e r n e u e n R e g e l . U e b u n g m a c h t a u c hh i e r d e n M e i s t e r .

N o c h e i n B e i s p i e l , w e i 1 ' s f u e r d a s V e r s t a e n d n i s s o w i c h t i g i s t :

J e t z t d i e B i l d u n g e i n e s m a t h e m a t i s c h e n A u s d r u c k s , i n d e m g a n z eZ a h l e n u n d d i e O p e r a t i o n e n + u n d - v o r k o m m e n d u e r f e n .

zahl: Ziffer:

—>-7-l Ziffer :~r—>—-+ V

.>__. -\°+ 1 r—f

♦ _ / £ \ _ 4

USW.

ausdruck:+ i

—>--! zahl !-+ + i

. t + t + |+ ! zahl !—<—! operator !—+

t + * +

operator:

"v.*/ ...)._ I.„' . *l i

S i e h t s c h o n k o m p l i z i e r t e r a u s , n i c h t w a h r ? A b e r k e i n e S o r g e ,i h r w i s s t d o c h , w i e e i n m a t h e m a t i s c h e r A n d r u c k a u s s i e h t , k o e n n ta l s o d a r a n p r u e f e n , o b i h r b e i m D u r c h g e h e n d e s S y n t a x d i a g r a m m su n d E r m i t t e l n d e r g u e l t i g e n , d a m i t e r z e u g b a r e n A u s d r u e c k e e i n e nF e h l e r g e m a c h t h a b t . . E i n e Ve r t i e f u n g d e s G e l e r n t e n e r f o l g t i n d e nw e i t e r e n K a p i t e l n , k e i n e A n g s t .

10

Page 17: Pascal - Eine kinderleichte Einführung

Hier einige guelt ige Ausdruecke nach dem letzten Syntaxdiagramm:

2 o d e r 1 2 + 2 o d e r 1 + 2 - 3 + 4 - 5 + 1 0 0 0 0

Sowe i t d i e ko r rek ten , j e t z t e i n paa r ungue l t i ge :

2+ ( i h r se i t nach ope ra to r n i ch t i n zah l h i ne ingegangen )

2+1) (woher so l l denn d ie K lammer kommen?)

2+-1 (wer in opera to r war muss so fo r t ' raus dor t ;danach kann nur e ine Zahl fo lgen! ! )

+ 1 2 ( w e r e i n e n A u s d r u c k e r z e u g e n w i l l , d e r m u s s z u e r s tdurch zahl durch!!)

M a l u e b e r l e g e n . . . J a , j e t z t h a b t i h r d a s R u e s t z e u g u m s or i c h t i g i n PA S C A L e i n t e i g e n z u k o e n n e n . V i e l l e i c h t r e k a p i t u l i e r tihr noch 'mal die neu gelernten Beqriffe (ALGORITHMUS, MASCHINEN-CODE usw.) und Techniken (SCHRITTWEISE VERFEINERUNG, SYNTAX-DIAGRAMME). Und dann auf ins naechste Kapitel...

11

Page 18: Pascal - Eine kinderleichte Einführung

Das Programm - Aufzucht und Hege

In d iesem k le inen Kap i te l wo l len w i r schne l l noch denen Rechtgeben, die da meinen, Informatik oder Programmieren sei eine sehrformal is ie r te Sache. H ier fuehren wi r naeml ich e in ige Rege ln e in ,die ihr immer beim Schreiben eines PASCAL-Programmes beherzigenm u e s s t . I s t n i c h t v i e l , a b e r . . .

Wir setzen das Ganze noch vor das erste grandiose Prograrnmier-p r o j e k t ( h a l t , n i c h t n a c h v o r n e s c h i e l e n u n d s c h a u e n , w a s e si s t ) , d a m i t s p a e t e r n i c h t i m m e r d i e F r a g e k o m m t , w a r u m , w i e s oe in iges immer w ieder i n den Programmen au f tauch t , aber n ie e r -k laer t wurde.

Selbst Claus-Peter-Uwe hat s ich solche Regeln gegeben: Er lobts ich se inen Tagesablauf , der fo lgendermassen aussieht :

- Arn Morgen setze ich ein Motto fuer die Tagesarbeit( z .B . Au f raeumen ode r Pause ode r Rechnen )

- Dann lege ich mir die Dinge zurecht, mit denen ichwaehrend des Tages arbeiten werde (Akten, Taschenrechne r, Ka r te i ka r ten usw. )

- Fo lgend ueber lege ich , we lche Taet igke i ten ich zuver r ich ten habe (Kaffee kochen, Ak ten durcharbe i ten ,Pause machen usw.)

- Und dann, ja, dann mache ich den Plan, wie ich mir dieganze Arbeit ueber den Tag vertei le, was ich wann tunwerde (erst Kaffee kochen, dann Akten durcharbei ten,dann Diktat aufnehmen, Pause, Mittagessen, Aufraeumen,Fe ie rabend ode r aehn l i ch )

In der Kunst des Programmierens mit PASCAL sieht das nicht ganzso schoen aus , w i r rnuessen uns (w ie immer) an e ine Grammat ikhal ten und schre iben:

PROGRAM dies und das tun;

(* hier die Dinge, mit denen ich 'was tue *)

BEGIN

(* hier der tolle Algorithmus, also, wie ichmit den oben aufgelisteten Dinge 'was mache #)

END.

Zunaechst 3 zu verinner 1 ichende Dinge:

1. PROGRAM, BEGIN, END sind Symbole der Sprache PASCAL! Wie dieWorte Haus und Baum zum Deutschen gehoeren, so gehoeren sie zuPASCAL. Diese, und alle noch zu lernenden PASCAL-Symbole, schreiben wir immer qross!

12

Page 19: Pascal - Eine kinderleichte Einführung

N e b e n b e i : 'sch re iben s ie

; " u n d "aber n ich t

" u s w. s i n d a u c hgross (Verze ihung) ,

PASCAL-Symbole, wir

d i e s u n d d a s t u n i s tbei uns nunmal),

ein NAME oderden

BEZEICHNER ( j a , s o h e i s s td a s b e i u n s n u n m a l ) , d e n w i r u n s s e l b s t a u s d e n k e n d u r f t e n . E rentspricht Erwin oder Anabel la im Deutschen, sie gehoeren ja auchnicht zur Sprache. Wir schreiben Namen (Bezeichner) immer klein.MERKE: ein Name darf nie so geschrieben werden wie ein SYMBOL(waere ja Quatsch wie: "haus GING IN DAS HAUS" oder so)

3. Die PASCAL-Symbole (* und *) schl Jessen einen Kommentar ein,den der Programmierer in das Programm einfuegt, um zu erlaeuternode r zu un te r t e i l en .

Ein Kommentar kann ueberall im Programm stehen, wo ein PASCAL-Symbol oder e in Bezeichner auf tauchen dar f ; der Rechner in teress ier t s ich n ich t fuer 5 Pfenn ig dafuer. Kommentare s ind nur in teressant fuer Leute, die das Programm schreiben oder aendern woll e n .

K o m m e n t a r e w e r d e n d u r c h ( * e i n g e l e i t e t u n d r e i c h e n b i s z u mnaechsten *) im Programm!

Der gew issenha f te Lese r w i rd s i che r e i ne beabs i ch t i g te Uebe r -einst immung des geregel ten Programmaufbaus mit Claus-Peter-UwesTagesplan entdeckt haben.

G e n a u : d i e s u n d d a s t u n i s t u n s e r M o t t o , e s m u s s i m m e r a mProgrammanfang stehen; danach fo lg t das Zurecht legen der Dinge,mi t denen etwas getan werden so l l (w ie das geht kommt spaeter )und zum Sch luss noch unse r ge l i eb te r A lgo r i t hmus , d .h . w ie t ueich was mit den zurechtgelegten Sachen (steht dann zwischen BEGINund END).

D i e s e r f o r m a l e P r o g r a m m a u f b a u s o l l u n s d a s s t r u k t u r i e r t eS c h r e i b e n v o n p r o f e s s i o n e l l e n P r o g r a m m e n n a e h e r b r i n g e n u n d m e h rU e b e r s i c h t s c h a f f e n . E i g e n t l i c h d o c h e i n e g u t e S a c h e .

D a r u m f o l g t h i e r d a s S y n t a x d i a g r a m m d a f u e r. I h r r n u e s s t e s n i c h ta u s w e n d i g l e r n e n o d e r s o , n e i n , b e h a l t e t b l o s s g u t , d a s s e s h i e rs t e h t , d a m i t i h r e s s p a e t e r fi n d e t , w e n n w i r m a l d ' r a u f z u -r u e c k k o m m e n , d e n n n o c h i s t n i c h t a l l e s s o v o l l s t a e n d i g e r k l a e r t :

prograaa:

+ +—>—! prograoukopf !-•

+ +

+ +->—! block !-

+ +.>. . .

progranokopf:

->— PRQ8RAH+ +

->—i progrananaae !—>--- > " >

block: vereinbarungsteil:

+ + + +->—! vereinbarungsteil !—>—! anweisungsteil !—>

+ + + +kosot spaeter, keine Sorge

13

Page 20: Pascal - Eine kinderleichte Einführung

a n w e i s u n g s t e i l : . . . n a a e :

^ — + + + 1 t i■{ BEGIN y—>—T--i anveisung !-;—>-~ END }--> —>—! buchstabe !—> 7-! buchstabe !-;----V _ s * + + ! ^ s t + j \ f i + a u

V * ! * +V r > ~ < - ~ ! " " I Z i f f e r ! -

+ +—<

Taucht i rgendwo e in eck iger Kasten auf , in dem e in Wort s teht ,welches mi t . . .naae endet ( z .B. prograaanaoe ) , so is t d ie ob igeD e fi n i t i o n . . . n a a e z u v e r w e n d e n . D . h . s e i b s t z u w a e h l e n d eBezeichner muessen mit einem Buchstaben beginnen und koennen mitBuchs taben oder Z i f fe rn fo r tgese tz t werden ( in bun te r M ischung) ;Sonderze ichen s ind n ich t e r laubt !

Die fast wichtigsten Dinge an diesem Diagramm sind der Punkt amE n d e - i h r d u e r f t i h n n i e v e r g e s s e n - u n d d i e S e m i k o l o n s . S i etauchen immer wieder auf (etwa wie's Komma im Deutschen).

S o , u m a u c h d i e l e t z t e n U n g e d u l d i g e n z u b e r u h i g e n f o l g t n u nendlich das erste PASCAL-Programm zum Eintippen und Freuen...

14

Page 21: Pascal - Eine kinderleichte Einführung

Man _ nehme .. -.....Pder Sp r a c hJkonst r u k t e

!. 1 Wie sagt es mi r mein Computer

D a s o s e h r v i e l u e b e r d i e S e e l e n l o s ! g k e i t d e r a r m e n C o m p u t e rg e k l a g t w i r d , h a b e n w i r ( u n d i h r ) u n s v o r g e n o m m e n , d e n R e c h n e re t w a s m e n s c h l i c h e r e r s c h e i n e n z u l a s s e n ( w o h l g e m e r k t e r s c h e i n e nl a s s e n , e r i s t e s n i c h t ! ) . D e n n f r u s t r i e r e n d n i m m t e s s i c h a u s ,w e n n m a n s i c h Z L i r A r b e i t m i t i h m a n s c h i c k t , u n d e r h a t n u r e i nmuedes READY oder ">" fuer uns uebr ig .

Waere doch schoener, wenn es e in P rog ramm gaebe , we lches , wennw i r e s l a u f e n H e s s e n , u n s m i t e i n e m f r e u n d l i c h e n G r u s sentgegen kaeme und unseren Namen kennen wuerde, n icht wahr?

E i n V o r s c h l a g , d e n w i r m a l s o u n v e r b i n d l i c h v o r b r i n g e n w o l l e n ,i s t d a s f o l g e n d e P r o g r a m m :

PROGRAM freundlichsein}BEGIN

WRITELN; WRITELN;

WRITELN ( 'Heute ist der ', 21, ' .', 2, ' .', 1985 );

WRITELN ( ' Hallo, hallo, einen wunderschoenen guten ','Tag wuensche ich/' );

WRITELN;

WRITE ( 'Ich freue mich schon sehr auf die ' );WRITELN ( 'interessante Zusammenarbeit mit ' );WRITELN ( 'Dir, meine liebe Erika Mustermann.' );

WRITELN;WRITELN ( 'Dann wollen wir mal...' );

END.

Ihr rnuesst doch zugeben: ein sehr sehr angenehmes Programm, undzudem ist es auch noch lehrreich! Ihr lernt naehmlich die PASCAL-A n w e i s u n g k e n n e n , m i t d e r u n s d e r R e c h n e r e t w a s a u f d e nBi ldsch i rm schre iben kann.

Im Eng l i schen he iss t " sch re iben" na tue r l i ch "wr i t e " ; und in denW i s s e n s c h a f t e n i s t e s n u n m a l u e b l i c h , m o e g l i c h s t v i e l g a n z t o l li n t e r n a t i o n a l a u s z u d r u e c k e n , u n d d a b e d i e n t m a n s i c h d e sE n g l i s c h e n . W i l l s a g e n : i n P A S C A L u n d v i e l e na n d e r e n P r o g r a m m i e r s p r a c h e n k o m m e n e i g e n t l i c h n u r e n g l i s c h eWor te a l s vo rdefin ie r t e Sp rachsymbo le vo r.

Page 22: Pascal - Eine kinderleichte Einführung

Vor de r genauen Besch re ibung ma l schne l l noch das , was de rComputer so ausgibt , wenn ihr das Programm laufen lasst ( tu t ihrja sowieso, oder?) :

-Heute ist der 31.2.1985- Hallo, hallo, einen wunderschoenen guten Tag wuensche ich/

-Ich freue mich schon sehr auf die interessante Zusammenarbeit mit-Dir, meine liebe Erika Mustermann.

-Dann wollen wir mal...

S o r n u e s s t e e s b e i e u c h a u f d e m S c h i r m a u s s e h e n . D i e " - " v o rj e d e r Z e i l e e r s c h e i n e n n a t u e r l i c h n i c h t ; s i e z e i g e n h i e r n u r a n ,d a s s d a s P r o g r a m m e i n e Z e i l e g e s c h r i e b e n h a t .

A u f g e s c h l o s s e n w i e i h r s e i d , h a b t i h r e r k a n n t : C P U g i b t a u f d e mB i l d s c h i r m d a s a u s , WA S I H R Z W I S C H E N D E M K L A M M E R N E I N T R A G T. D i eb e i d e n S y m b o l e W R I T E u n d W R I T E L N g e b e n d a z u d e n A u f t r a g .

E s k o e n n e n d e m n a c h Z a h l e n u n d T e x t e u n d e i n z e l n e B u c h s t a b e ng e s c h r i e b e n w e r d e n . B e i s p i e l e f u e r b e i d e s b i e t e t d i eP r o g r a m m z e i l e , i n d e r d i e A n w e i s u n g z u r A u s g a b e d e s D a t u m ss t e h t .

D o r t w i r d a u c h d i e M o e g l i c h k e i t d e u t l i c h , m e h r e r e D i n g e m i te i n e r W R I T E - o d e r W R I T E L N - A n W e i s u n g a u f e i n m a l a u s g e b e n z u l a ss e n ; s i e w e r d e n e i n f a c h , d u r c h K o m m a g e t r e n n t , z w i s c h e n d e nK l a m m e r n a u f g e l i s t e t .

Z a h l e n s e t z t i h r e i n f a c h s o z w i s c h e n d i e K l a m m e r n , u n ds c h o n e r s c h e i n e n s i e a u f d e m S c h i r m .

T e x t e ( a u c h S t r i n g g e n a n n t ; m e r k t e u c h d a s W o r t ) u n d e i n z e l n eZ e i c h e n ( a u c h C h a r a c t e r g e n a n n t ; m e r k e n ! ) s i n d m i t e i n e mH o c h k o m m a e i n z u l e i t e n u n d m i t e i n e m H o c h k o m m a a b z u s c h l J e s s e n . D a sr n u e s s t i h r g u t b e h a l t e n , d e n n b e s o n d e r s d a s a b s c h l i e s s e n d eH o c h k o m m a w i r d o f t v e r g e s s e n , u n d d a s m a g d e r C o m p u t e r g a r n i c h tg e r n .

W e n n s o e i n S t r i n g a l s o a u s g e g e b e n w e r d e n s o l l , s o s c h r e i b t d e rR e c h n e r a l l e s ( ! ) , w a s z w i s c h e n ' u n d ' s t e h t a u f d e n S c h i r m ,u n d z w a r s o , w i e i h r e s e i n g e t r a g e n h a b t !

Z u d e m P r o g r a m m o b e n , i n d e m a l l e s m a l v o r k o m m t , n o c h e i n i g eK u r z - B e i s p i e l e :

A u f g a b e L o e s u n g i n F ' A S C A L A u f d e n S c h i r m k o m m t

S c h r e i b e e i n + W R I T E ( ' + ' ) +S c h r e i b e & i n + W R I T E ( ' + ? ' ) + 7u n d e i n ? W R I T E ( ' + ' , ' ? ' ) ; + ?S c h r e i b e d i e Z a h l W R I T E ( 1 2 3 ) 1 2 31 2 3 W R I T E ( ' 1 2 3 ' ) 1 2 3

U n g u e l t i g w a e r e a b e r z . B . W R I T E ( h a l l o i h r d o r t ) . D e rTe x t r n u e s s t e i n ' e i n g e s c h l o s s e n w e r d e n .

16

Page 23: Pascal - Eine kinderleichte Einführung

L a s s t e u c h n i c h t s t o e r e n d u r c h d i e F o r m d e r A u s g a b e a n w e i s u n gf u e r d e n " H a l l o , h a l l o , . . . " — Te x t . E s m a c h t n i c h t s , w e n n a l l e s , w a si h r m i t e i n e m W R I T E - o d . W R I T E L N - B e f e h l s c h r e i b e n w o l l t , u e b e rm e h r e r e P r o g r a m m z e i l e n r e i c h t . C P U g i b t s o l a n g e a u s , b i s e rw i e d e r e i n e s e h l i e s s e n d e K l a m m e r fi n d e t . P r a k t i s c h , w e n n m a n e i n eM e n g e i n e i e n A u s g a b e z e i l e s t e c k e n w i l l , a b e r n u r w e n i g P l a t z i mP r o g r a m m h a t .

I h r w e r d e t s i c h e r l i c h s c h o n d e n k l e i n e n U n t e r s c h i e d z w i s c h e nW R I T E u n d W R I T E L N f e s t g e s t e l l t h a b e n ; W R I T E g i b t n a e m l i c hi m m e r s c h o e n d e r F i e i h e n a c h a u s , u n d z w a r f a e n g t e s i m m e r d o r ta n , w o i h r z u l e t z t a u f d e m S c h i r m a u f g e h o e r t h a b t m i t d e mS c h r e i b e n .

WRITE ( 'Hal lo ' ) ; WRITE ( 'Du da' )

e r g i b t a l s o : H a l l o D u d a

D a s z w e i t e W R I T E l e g t d i r e k t h i n t e r d e m l e t z t e n g e s c h r i e b e n e nZ e i c h e n v o r n e r s t e n W R I T E l o s , d e m o n a e m l i c h .

D i e B e f e h l s f o l g e W R I T E L N ( ' H a l l o ' ) ; W R I T E ( ' D u d a ' )

w u e r d e j e d o c h d i e s e s R e s u l t a t b r i n g e n : H a l l oDu da

W R I T E L N s c h r e i b t s e i n e n S e r m o n u n d . . . j a , d a n n s e t z t e s d i eP o s i t i o n f u e r d a s n a e c h s t e Z e i c h e n , w e l c h e s i r g e n d w a n n m a l a u s g eg e b e n w e r d e n s o l l a u f d e n A n f a n g d e r n a e c h s t e n Z e i l e ! G e n a u d o r tf a e n g t d i e H fl J T E - A n w e i s u n g d a n n a n m i t d e m D u d a .

S c h r e i b t d o c h s e l b s t m a l k l e i n e P r o g r a m m e , i n d e n e n i h r W R I T Eu n d W R I T E L N b u n t m i x t u n d d a n n s t a u n t , w a s d e r R e c h n e r s o a u sg i b t .

J e t z t a b e r m a l e i n e k l e i n e K o n t r o l l e s H a b t i h r e u c h g e w u n d e r t ,w a r u m n a c h j e d e r A n w e i s u n g e i n S e m i k o l o n f o l g t ? W e n n j a , d a n nb l i c k t d o c h k u r z m a l i n ' s v o r i g e K a p i t e l . D o r t fi n d e t i h r i m S y nt a x d i a g r a m m v o n a n w e i s u n g s t e i l , d a s s n a c h j e d e r A n w e i s u n gz w i s c h e n B E G I N u n d E N D e i n ; s t e h e n s o l l ! U n d s c h l i e s s l i c hs i n d W R I T E u n d W R I T E L N A n w e i s u n g e n . ( F u e r S c h l a u k o e p f e : D a s ;d i r e k t v o r d e m E N D m u s s n i c h t s e i n , d a r f a b e r . A l s o l i e b e rd o r t e i n s z u v i e l , a l s s o n s t e i n s z u w e n i g . M a n c h e m e i n e n z w a r ,w e r d o r t e i n e s s e t z t , d e r h a t P A S C A L n i c h t v e r s t a n d e n , a b e r . . .p a h )

D a s ; s o l l d i e e i n z e l n e n A n w e i s u n g e n v o n e i n a n d e r t r e n n e n ,g e n a u s o w i e d e r P u n k t i n : i c h t u e d i e s , i c h t u e d a s . d a n n e n d e

E s f o l g t d a s S y n t a x d i a g r a m m ( v e r e i n f a c h t ) f u e r d i e A u s g a b e :

ausgabeanveisung:

— > - - " - - ( H R I T E / - ; — >■— 7 > "V > — i T T V + ♦--(hrITELN ;-" ~>-(?v-->•—;--! auszugebendes !-7 Cj.>"^ ' " * ! O b j e k t ! !

* + V

v '

17

Page 24: Pascal - Eine kinderleichte Einführung

a u s z u g e b e n d e s O b j e k t : s t r i n g :+ + ^ + +

.„>....—>...j string j .„_> ...)../»").._>..__._. character :—-—>—CTj.—>j + + * ■ ' a + + v

V t * I <+ > — ! z a h l ! +

+ + character steht fuer Buchstaben und Ziffern,sowie Sonderzeichen!

Z A H L m u e s s e n w i r n i c h t n a e h e r e r l a e u t e r n . J e d e g a n z e Z a h l i s td a r e c h t , a b e r a u c h g e b r o c h e n e , z . B . 1 2 3 0 0 , 5 6 , s i n d e r l a u b t . B e id i e s e n m u s s m a n a u f p a s s e n : s t a t t d e s K o m m a s , w e l c h e s d i el e t z t e n b e i d e n S t e l l e n a b t r e n n t , m u s s i n PA S C A L , n a c h e n g 1 i s c h e rM a n i e r , e i n P u n k t g e s e t z t w e r d e n :

3 , 1 4 1 5 9 2 w i r d i n P A S C A L z u 3 . 1 4 1 5 9 2o d . 8 8 8 4 , 5 4 9 8 " 8 8 8 4 . 5 4 9 8

U m d a s M a s s v o l l z u m a c h e n n o c h e i n e k l e i n e S p i e l e r e i , d i ej ede rmann be im Sch re iben von P rofi -P rog rammen gu t zu pass kommenk a n n ( n a c h d e m M o t t o : a u c h w e n n a l l e s s c h i e f g e h t , l a s s t u n sP r o fi s s e i n ) .

I n PA S C A L i s t e s m o e g l i c h , d i e A u s g a b e v o n Z a h l e n , S t r i n g s u n dB u c h s t a b e n z u f o r m a t i e r e n , i n d e m m a n h i n t e r d i e s e n e i n e n : u n de i n e Z a h l s c h r e i b t .

W R I T E ( ' A ' : 3 ) s c h r e i b t A ( i s t e i n L e e r z e i c h e n )

D i e Z a h l g i b t a n , w i e g r o s s d a s F e l d i s t , i n d e m d e r S t r i n g ( o d e rC h a r a c t e r ) r e c h t s b u e n d i q ( ! ) a u s g e g e b e n w i r d ; i s t s i e k l e i n e r a l sd i e S t r i n g l a e n g e , d a n n p a s s i e r t n i c h t s B e s o n d e r e s :

W R I T E ( ' H a l l o i h r ' - . 1 2 ) w i r d z u H a l l o i h rWRITE ( 'PASCAL' - .2 ) w i rd zu PASCALW R I T E ( ' G u t e n T a g ' ' . 2 0 ) w i r d z u G u t e n T a g

B e i Z a h l e n i s t e s g e n a u s o :

WRITE ( 123:5 ) wird zu __123WRITE ( -123:5 ) wrid zu _-123

D e r F r e i r ä u m f u e r d i e Z a h l u m f a s s t a l l e r d i n g s a u c h e i n e S t e l l ef u e r d a s e v t l . n e g a t i v e Vo r z e i c h e n !

W R I T E ( 9 9 8 9 : 1 0 ) e r g i b t d a n n 9 9 8 9 ( 6 b l a n k s + 4 Z i f f e r n )

B e i r e e l l e n Z a h l e n k a n n m a n z u s a e t z l i c h n o c h d i e Z a h l d e rSte l len h in ter dem Komma angeben:

WRITE ( 3.141592:5:2 ) wird zu _3.14WRITE ( 3.141592:10:6 ) wird zu _„3.141592

18

Page 25: Pascal - Eine kinderleichte Einführung

Hier sagt d ie erste Zahl (d ie 10) , dass fuer den auszugebendenWer t i nsgesamt 10 Ze i chen P la t z se in so l l ( i nk l . Vo rze i chen undDez ima lpunk t ! ! ) . D ie 6 ( bzw. oben d i e 2 ) me lde t : Je t z t abe r nu r6 (bzw. 2) Stel len hinter dem Dezimalpunkt ausgeben!!

E ine famose Sache, n icht wahr? So is t es e in fach jedem gegeben , d ie to l l s ten Tabe l le au f das schne l l s te anzu legen :

PROGRAM tabelle;(* dieses Programm legt eine einfache Tabelle an.

Es dient zur Verdeutlichung der Formatierungsmoeglich-keiten in PASCAL #)

BEGIN

WRITELN;WRITE ( 'Tabelle vom 4.3.1985' );

WRITELN;W R I T E L N ( ' P o s t e n : E i n n a h m e : A u s g a b e : ' ) ;

WRITELN ( ' Auto', 0.0:10:2, 15000.50:14:2 );WRITELN ( ' Miete', 678.70:10:2, 1268.0:14:2 );WRITELN;WRITELN ( 'Summe: ', 678.70:10:2, 16268.50:14:2 );

END.

19

Page 26: Pascal - Eine kinderleichte Einführung

Konstanten und ei n.k.i ndqer.echtes „Spei ehermodel.l_

S i c h e r l i c h h a b t i h r s c h o n e i n e M e n g e p r o b i e r t u n d m i t d e nS c h r e i b a n w e i s u n g e n g e s p i e l t , s o d a s s e s d e n m e i s t e n b e s t i m m tl a e s t i g w a r , e i n i g e Te x t e , w e l c h e i n e i n e m P r o g r a m m w i e d e r u n dw i e d e r a u f t r a t e n , a u c h i m m e r w i e d e r u n d w i e d e r h i n z u s c h r e i b e n .

S c h o e n e r w a e r e e s d o c h , k o e n n t e m a n s i e e i n m a l i r g e n d w oa u f f u e h r e n u n d d a n n L i e b e r e i n K u e r z e l a n s p r e c h e n .

O d e r w i e i s t e s m i t d e r a l l g e g e n w a e r t i g e n K o n s t a n t e n P i ? W i r ds i e ' m a l a n 4 o d e r 5 S t e l l e n i m P r o g r a m m b e n o e t i g t , s o i s t d a ss c h o n d u m m , e i n f a c h e r w a e r e a u c h h i e r , n u r F ' i s a g e n z u m u e s s e nu n d a l l e s i s t i m L o t .

D a s f o l g e n d e P r o g r a m m n u t z t d i e F a e h i g k e i t e n v o n PA S C A L i nd i e s e r R i c h t u n g :

PROGRAM konstantennutzer;

C O N S T C # l e i t e t d i e K o n s t a n t e n v e r e i n b arungen ein #)

p i - 3 . 1 4 1 5 9 2 ; ( » e i n e r e e l l e K o n s t a n t e * ;

rad - 'Berechnung mit Radius -■' ; (* Textkonstanten- #)e i n h = ' Z e n t i m e t e r ' ; ( # V e r e i n b a r u n g * >

BEGIN

WRITELN ( 'Es folgen Berechnungen von Kreisumfaengen...' );

WRITELN;WRITELN ( r ad , 3 :4 , e i nh , ' / e rg i b t : ' ,

2 # pi # 3:7:3, einh, ' als Umfang.' );

WRITELN ( rad, 125:4, einh, '/ ergibt:',2 * pi # 125:7:3, einh, ' als Umfang.' );

END.

S o o d e r a e h n l i c h k o e n n t e e i n p r o b l e m g e l a d e n e n s P r o g r a m maussehen, in dem die Benutzung von sogenannten KONSTANTEN allesv ie l e in facher mach t .

Zum ers ten Mal haben wi r je tz t auch etwas in den b isher n ichtn a e h e r e r l a e u t e r t e n v e r e i n b a r u n g s t e i l ( s i e h e K a p i t e l 2 )eingetragen. Das Syntaxdiagramm seht ihr wei ter unten.

Die Verwendung von Konstanten is t denkbar s impel . Ihr schre ib te i n f ach den Namen h i n , un te r dem i h r z .B . e i ne r ee l l e Zah l a l sK o n s t a n t e v e r e i n b a r t h a b t ( s i e h e p i ) , u n d s c h o n d e n k t d e rR e c h n e r , i h r h a e t t e t d e n W e r t s e l b s t g e n o m m e n . D a s g i l t f u e rText- und reell zahl ige und ganzzahl ige usw. Konstanten.

W e n n C P U a u f e i n h i n d e r A u s g a b e a n w e i s u n g s t o e s s t , d a n ns c h r e i b t e r d e n Te x t a u f d e n S c h i r m , d e n i h r e i n h z u g e w i e s e nhab t , i n d iesem Fa l l ' Zen t imete r ' . Genauso mi t rad und p i .

20

Page 27: Pascal - Eine kinderleichte Einführung

D a s g i l t i n a l l e n L e b e n s l a g e n , s o a u c h i n d e r B e r e c h n u n g d e sU m f a n g s , d . h . i n e i n e m m a t h e m a t i s c h e n A u s d r u c k .

T e r m e a u s d e r M a t h e m a t i k , d i e + , - , * ( m a l n e h m e n ) u n d / ( t e il e n ) e n t h a l t e n , k o e n n t i h r u e b e r n e h m e n L i n d i n d i e W / ? 7 7 f - A n w e i s u n ge i n b a u e n . A u f d e m S c h i r m e r s c h e i n t d a n n d a s E r g e b n i s .

WRITE ( 'Das Ergebnis von 34+9/13 ist: ', 34 + 9 / 13 :5:2 )

O b i g e s l i e f e r t e a u f d e m S c h i r m ( w e n n ' s i n e i n e m P r o g r a m m i s t ) :

Das Ergebnis von 34+9/13 ist: 34.69

Z u r u e c k z u d e n K o n s t a n t e n v e r e i n b a r u n g e n .z u g e h o e r i g e S y n t a x d i a g r a m m :

H i e r e r s t ' m a l d a s

konstantendefinition

—>—.CONST)—>—-—j konstantennaae !—>—v= f—>—! konstante !—>~-\\ V"—>V V * . . - . , - - ' v

konstante:

- > - " ■V

- < • >

■>-i

iV—v - r

V

+ +-I konstantennaue I-+ +

i +-I vorzeichenlose I-I z a h l !+ ++ +

-! string I+ +

1V; „ > „ . . . -->

U m d i e E i n b i n d u n g ö & r K o n s t a n t e n v e r e i n b a r u n g i n e i n P r o g r a m m z uv e r d e u t l i c h e n , f o l g t d a s S y n t a x d i a g r a m m d e s v e r e i n b a r u n g s t e i l :

vereinbarungsteil (achtet auf spaetere Aktualisierungen):

->-+ +

-I konstantendefinition I-t +

Der Vereinbarungsteil kann also auchleer sein!

E s i s t n o c h z u e r w a e h n e n , d a s s e i n K o n s t a n t e n n a r n e i m P r o g r a m mn u r b e n u t z t w e r d e n d a r f , w e n n d i e s e r N a m e a u c h i n d e rK o n s t a n t e n v e r e i n b a r u n g d e fi n i e r t w u r d e !

I c h s a g e j a a u c h n i c h t : H e u t e g e h t ' s m i r a b e r p i i i e p . K e i n e rw e i s s , w a s p i i i e p h e i s s t . N u r w e n n i c h v o r h e r m i t a l l e n a b g es p r o c h e n h a b e : S o , h o e r t m a l ! I m m e r , w e n n i c h p i i i e p s a g e , d a n nm e i n e i c h " d r e c k i g " , k l a r ?

D a n n k a n n i c h s a g e n : D a s A u t o i s t p i i i e p .o d e r a u c h : p i i i e p a r b e i t e i c h a m l i e b s t e n .

21

Page 28: Pascal - Eine kinderleichte Einführung

In anderen Kons tan tendefin i t ionen duer fen auch nur Namen vonKonstanten benutzt werden, d ie vorher vereinbart wurden:

CONSTminuseins •ems; f* geht nicht, weil die *)

ems 1} (# definition von einshinter minuseins ist #)

CONSTeins - 1;minuseins = -eins; (* so ist's gut * )

D ie Vo r te i l e von so l chen Kons tan tenve re inba rungen l i egen f ue rjeden deu t l i ch s i ch tba r au f de r Hand : s ie machen das P rog ramml e i c h t e r l e s b a r, d e n n p i s a g t j e d e m m e h r a l s e i n k o m p l i z i e r t e rWer t . Ausserdem is t das Programm le ich ter war tbar, d .h . es kannschnel l an geaender te Gegebenhei ten angepasst werden. Tr i t t z .B.Pi 35 mal im Programm auf und ein Unglueck geschieht, -die Mathem a t i k b e m e r k t , P i i s t n i c h t g l e i c h 3 . 1 4 , s o n d e r n 5 . 9 8 , - d a n ntragt ihr nur einmal in den Konstantenvereinbarung den neuen Werte in und schon laeuf t a l les w ieder kor rek t . Uebera l l w i rd der neueWer t ve rwandt , doch ih r hab t ihn nur e inma l ak tua l i s ie r t .

MERKE: der WERT einer Konstanten bleibt waehrend de*F' rogrammlaufes g le ich (konstant) .

gesamten

CONSTtageimjahr = 365;

Immer, wenn nun t age im jah r benu tz t w i rd , denk t de r Compu te rs ich 365 . Das i s t n ich t zu aendern (es se i denn, ih r t rag t h in te rdem = die Zahl 366 oder so ein).

Der Laie kann s ich dies ungefaehr fo lgendermassen vorstel len:F u e r j e d e v e r e i n b a r t e K o n s t a n t e n i m m t s i c h d e r R e c h n e r e i nk l e i n e s K a e r t c h e n v o n i r g e n d w o h e r . A u f d i e s s c h r e i b t e r d e nKonstan tennamen, und au f der anderen Se i te no t ie r t e r den Wer tder Kons tan ten -a l les mi t n ich t 1oes l iehern Fo l iens t i f t , dami t manden Wert nicht aendern kann-:

Konstontenname auf cJer anderenSeite der Wert

In den Fae l len , wo nun e in Kons tan tenname im Programm auftaucht, nimmt CPU sich das Kaertchen mit dem Namen und schaut aufder anderen Se i te nach , we lchen Wer t e r be i se inen Opera t ionenbenutzen sol 1.

Page 29: Pascal - Eine kinderleichte Einführung

3 • 3 • Es ist doch nicht al les so konstant wie's aussiehtoder

Wie sage ich es meinem Computer

Die Tage des t r is ten Al l tags, in denen das einzige, was ihr demRechner sagen konntet , e in Programm war,dasse lbe ta t , s i nd gezaeh l t !

W i r e r k l i m m e n n u n d i e e r s t e S t u f e z u rueber die Maschine (unserem armen Rechner,immer gut).

welc hes absolut i mmer

a b s o l u t e n H e r r s c h a f tb i t t e , b e h a n d e l t i h n

W i e u n v e r g l e i c h l i c h k n i s t e r n d e r i s t d o c h d i e A t m o s p h a e r e b e ider Ausfuehrung eines Programmes, dem ihr immer andere Werte eingeben koennt, OHNE den Programmtext aendern zu muessen!

A l s E i n s t i e g v i e l l e i c h t e i n k l e i n e s P r o b l e m i n B e z u g a u fFinanzierung eines Rechners:

d ie

PROGRAM prozentl;

CONSTmeinantei l = 5;pap isante i l =80;omisante i l - 15 ;

VARpreis : INTEGER;

BEGIN

C* ich bezahle 5 % vom Preis *)(* papi bezahlt 80 % *)(# auch omi muss 'ran, leider «>

(n der preis wird waehrend desProgrammlaufs erfragt/ *)

WRITELN ( 'Berechnung der absoluten Anteile, die von' );WRITELN ( 'jedem einzelnen aufgebracht werden muessen: ' );WRITELN;

WRITE ( 'Bitte den Rechnerpreis eingeben: ' ); READLN ( preis );

WRITELN ( 'Mein Anteil:', preis^meinanteil/100 :6:2, ' DMf );

WRITELN ( 'Pap is : ' , p re is#pap isante i l /100 - .6 :2 , ' DM' ) ;

WRITELN ( 'Omis : ' , p re is»omisante i l /100 - .6 :2 , ' DM' ) ;

END.

Die Anweisung READLN ( preis ) erwartet, sobald das Programmangelaufen is t , d ie E ingabe e ines Pre ises ( im Augenbl ick muss erle ider noch ganzzah l ig se in ) , a lso z .B . 500.

Au fg rund d ieses je tz t ak tue l l e inge t ipp ten Pre ises berechne t esdie von jedem zu zahlenden Anteile am Preis.

Der Vo r te i l l i eg t au f de r Hand : i h r rnuess t euch , waehrend ih rd a s P r o g r a m m e i n g e b t , k e i n e G e d a n k e n u e b e r d i e G r o e s s e d e sK a u f p r e i s e s m a c h e n . Z u d e m i s t e s m o e g l i c h ( u n d s i n n v o l l ) b e ijedem neuen Start des Programms einen anderen Preis anzufuehren;keine Notwendigkeit das Programm selbst zu aendern!

Page 30: Pascal - Eine kinderleichte Einführung

Aber wie geht das genau?

Aehmmmm, oehhhh, n un:

A ls e rs tes i s t es noet ig e ine VARIABLE zu vere inbaren, we lchespaeter den Wer t , den w i r ja immer ak tue l l neu e ingeben wo l len ,aufnehmen kann. Im obigen Beispiel geschieht dies in den Zei len

VARpreis : INTEGER;

p r e i s w i r d h i e r a l s Va r i a b l e d e fi n i e r t , d i e n u r g a n z z a h l i g eWerte aufnehmen kann (engl. INTEGER: bedeutet: ganze Zahl). DasPASCAL-Symbol VAR sagt dem R:echner, dass jetzt Variablendeklarat ionen fo lgen; genauso wie CONST die Konstantendef in i t ionen ein—l e u t e t .

I s t e ine Var iab le e rs tma l i n de r beschr iebenen Form vere inbar tworden, so koennt ihr im Programm immer und immer wieder einenn e u e n W e r t f u e r s i e e i n l e s e n , d e r d a n n i n R e c h n u n g e n u n dAusgabeanweisungen verwandt werden kann wie eine Konstante odereine Zahl .

READLN ( preis )

READLN (wieder mal Englisch, READ = lies, lesen) ist die Anweisung, mit der CPU einen Wert von euch anfordert, der dann einget ipp t werden muss . Es i s t desha lb s innvo l l , vo r jeder E ingabeanweisung (.READ oder READLN') einen Text auszugeben, der dem Prog r a m m b e n u t z e r a m S c h i r m s a g t , w a s e r g l e i c h e i n g e b e n s o l l .

Zur Einfuehrung in die Eingabeanweisungen:

eingabeanueisung:

>---r-( READ r--7-->--{7}->—7-! einfache variable !--T—>—f ?}--—>V x .

---./reaüihV-+-

+ Vi

einfache variable:

miss Variable einesSkalar- oder Unterbereichstyps oder String-typs sein. Hehr dazuspaeter.

D e r B e f e h l R E A D o d . R E A D L N e r w a r t e t d a n n d i e E i n g a b e v o ns o v i e l e n W e r t e n , w i e i h r a n V a r i a b l e n i n K l a m m e r n h i n t e r d e mS y m b o l a u f g e f u e h r t h a b t :

READLN ( a, b )

READ

i h r r n u e s s t 2 W e r t e e i n g e b e n , z . B . 2 u . 3

( elementl, letzteselement, Schrittweite )e r w a r t e t 3 G r o e s s e n a l s E i n g a b e .

S o l l t e t i h r w i r k l i c h m a l d e n W u n s c h h a b e n , m i t e i n e rE i n g a b e a n w e i s u n g m e h r e r e W e r t e e i n l e s e n z u w o l l e n , d a n n m u e s s e nb e i m E i n t i p p e n n a c h h e r d i e e i n z e l n e n W e r t e m i t e i n e m L e e r z e i c h e nv o n e i n a n d e r g e t r e n n t w e r d e n ! N u r n a c h d e m l e t z t e n W e r t i s t d i eTa s t e m i t d e r A u f s c h r i f t " C R " o d e r " R e t u r n " o d e r " E n t e r " z u b e -t a e t i q e n .

2 4

Page 31: Pascal - Eine kinderleichte Einführung

W i r d n u r R E A D L N - o h n e V a r i a b l e n i n K l a m m e r n - i n ' s P r o g r a m me i n g e s e t z t , d a n n w a r t e t d e r R e c h n e r , w e n n e r d i e s e n B e f e h l a b a rb e i t e t , a u f d a s D r u e c k e n d e r T a s t e " R e t u r n " o d e r " E n t e r " , s o n s tn i c h t s .

E i n W o r t n o c h z u m U n t e r s c h i e d z w i s c h e n R E A D L N u n d R E A D :Z u n a e c h s t e i n m a l s i n d s i e p r i n z i p i e l l a u s t a u s c h b a r . U n s e r eE m p f e h l u n g i s t a b e r , R E A D L N z u v e r w e n d e n ( f a l l s n i c h ta u s d r u e c k l i c h a n d e r s a n g e g e b e n ) . I m S t a n d a r d - P A S C A L ( d e ru r s p r u e n g l i c h e n F o r m v o n P A S C A L , w e l c h e s i c h H e r r W i r t h a u sZ u e r i c h a u s g e d a c h t h a t ) s i n d e i n i g e S p i e l e r e i e n ( m i t g e b u f f e r t e mi n p u t - f u e r S p e z i e s - ) v o r g e s e h e n , d i e a l l e r d i n g s n i c h t u n b e d i n g ti n a l l e n P A S C A L - D i a l e k t e n r e a l i s i e r t w u r d e n b z w . b e i d e r E i n g a b ev o n W e r t e n m i t t e l s T a s t a t u r s o w i e s o n i c h t f u n k t i o n i e r e n ; a u sd i e s e m G r u n d e l a u t e t u n s e r e E m p f e h l u n g f u e r d e n A u g e n b l i c k ,R E A D L N z u v e r w e n d e n . D a w e i s s m a n , w a s m a n h a t .

M i t d i e s e m R u e s t z e u g a u s g e s t a t t e t , w e l c h e s e u c h e r l a u b t , s e l b s td i e u n m o e g l i c h s t e n V a r i a b l e n e i n z u l e s e n , w o l l e n w i r u n s a u f d i eV e r e i n b a r u n g s o l c h e r s t u e r z e n :

V a r i a b l e n v e r e i n b a r u n g : t y p ( v o r l a e u fi g ) :

^ ^ + + _ + 1 .--->-~ VAR 5-"—7->— I variablennaae !-7—>--■■; : }->--! typ !—>---C7>7~> —>-«—(INTEGER)~T-

- ^ \ \ + + V * ~ + * V V > - - < AS i < , ' ; \ i i L - { r e a l r ~- — ' . . ^

vereinbarungsteil (vorlaeufig):

i ) + 1 \ y t + a—I konstantendefinition !-— —I Variablenvereinbarung !—

t i t +

D a m i t k a n n m a n s c h o n e i n e M e n g e m a c h e n . A l l e V a r i a b l e n n a m e n ,w e l c h e d u r c h K o m m a g e t r e n n t v o r e i n e m T y p b e z e i c h n e r ( . R E A L o d e rI N T E G E R ) s t e h e n , s i n d Va r i a b l e n d i e s e n T y p s !

VARanzahlt, menge, alter : INTEGER;

fak to r, e rgebn is , p rozentwer t : REAL;

a, b : INTEGER;

E i n e V a r i a b l e n d e k l a r a t i o n d i e s e s A u s s e h e n s w u e r d e d i e V a r i a b l e na n z a h l l , m e n g e , a l t e r , a u n d b a l s v o m T y p I N T E G E R r d . h . n u rg a n z a h l i g e W e r t e f a s s e n d , v e r e i n b a r e n ; f a k t o r , e r g e b n i s u n dp r o z e n t w e r t d u e r f t e n , u n d d a s i s t n e u , r e e l l e W e r t e a u f n e h m e n( e n g l . R E A L b e d e u t e t r e a l , r e e l l ) .

Page 32: Pascal - Eine kinderleichte Einführung

Der JWJ£<5£#~Wertebere ich umfasstZ a h l e n v o n - 3 2 7 6 8 b i s 3 2 7 6 7 ( ! ! ! ! ) ,auch oft MAXINTb e a r b e i t e n , s ozuruec kqrei fen.

i m a l l g e m e i n e n n u r d i e g a n z e nd i e o b e r e G r e n z e w i r d d a b e i

g e n a n n t ; i s t e s a b e r n o e t i g , g r o e s s e r e W e r t e z uh i l f t a l l e s n i c h t s , m a n m u s s a u f R E A L — Va r i a b l e n

PROGRAM addition;(*? dieses Progarmm addiert 3 Zahlen und gibt das Ergebnis *)

VARsummand1, summand2, summand3 : REAL;

BEGIN

WRITE ( '1. Summand: f >i READLN ( summandl >iWRITE ( '2. Summand: t ) ; READLN ( summand2 ) ;WRITE ( '3. Summand: r >', READLN ( summandS >;

WRITELN;WRITELN ( summand1:6::2,, ' + ' , summand2:6:2 , '+T,

summand3:6\■ 2> f -r t

summandl + summand2 + summandS :7:3 );

END.

Fuer d ie Summanden koennen 1 oder -2 oder 3 .4 oder 123.005 oder1 9 3 4 5 . 9 8 7 o d e r - 9 8 7 6 . 0 0 0 6 5 4 o d e r o d e r e i n g e g e b e n w e r d e n . E sm u e s s e n n u r m a t h e m a t i s c h k o r r e k t e Z a h l e n s e i n .

B e i d e m P r o g r a m m p r o z e n t l a m B e g i n n d e s K a p i t e l s d a g e g e n ,d u r f t e n w i r n u r P r e i s e w i e 5 0 0 o d e r 1 0 0 0 o d e r 5 o d e r . . . a n g e b e n .I s t j a a u c h k l a r , d e n n d i e Va r i a b l e p r e i s w a r v o m T y p I N T E G E R ,d . h a l l e i n g a n z z a h l i g e W e r t e s i n d e r l a u b t ! s u m m a n d l u s w . s i n dj e d o c h R E A L - Va r i a b l e n , s i e d u e r f e n r e e l l e W e r t e a n n e h m e n .

Z u d i e s e r P r o b l e m a t i k m o e c h t e n w i r e u c h e i n e E r w e i t e r u n gu n s e r e s i n f o r m e l l e n S p e i c h e r m o d e l l s , w e l c h e s w i r m i t d e nK a e r t c h e n f u e r d i e K o n s t a n t e n b e g o n n e n h a b e n , v o r s t e l l e n .

S p e i c h e r m o d e l l d e s h a l b , w e i l C P U s i c h d i e W e r t e d e r Va r i a b l e nm e r k e n ( s p e i c h e r n ) m u s s . I r g e n d w o , s o d a s s e r s i e , w a n n i m m e r e i nG e b r a u c h n o t w e n d i g i s t , s c h n e l l e r m i t t e l n k a n n .

B e i d e n K o n s t a n t e n h a t e rgemach t :

s i c h f u e r j e d e e i n z e l n e e i n K a e r t c h e n

KonstantenkärtcHen.^3 Auf der anderen Selbe

Stehb o/er Wert,hier tc = pl

2 6

Page 33: Pascal - Eine kinderleichte Einführung

B e i d e n Va r i a b l e n i s t e s e t w a s a n d e r s . H i e r b a s t e l t e r s i c hfuer jede vereinbarte einen kleinen Kasten, auf den er den Namende r Va r i ab len sch re ib t :

Kasten für eineReal- Variable

*c: Kasten für einelateaer-\6r table

D i e s e K a e s t c h e n f e r t i g t C P U n a c h e i n e mS c h n i t t m u s t e r b o g e n a n ; d i e s e r r e p r a e s e n t i e r t d e n T y pVa r i a b l e n , d . h . d e n W e r t e b e r e i c h d e r G r o e s s e n , w e l c h e i nKasten duerfen. Bei REAL eben nur reelle Zahlen, bei INTEGERganze Zahlen.

S o h a t C P U a u c h i n t e r n s c h o n e i n e k l e i n eSchnittmustern fuer Kaesten der Typen REAL u. INTEGER:

bestimmtenderdennur

M a p p e m i t

Sc tin i tt musterböaeaür Vor iablen kästen

der Typen. Realund lategerö

Wenn man genau hinsieht, dann erkennt man, dass ein ßf/Jt-Kasteng r o e s s e r i s t , a l s e i n I N T E G E fi - K a s t e n . D e r G r u n d f u e r d i e s e nUmstand ist in den Wertebereichen der Var iablen zu suchen. Jederwe iss : d i e Menge de r ree l l en Zah len i s t g roesse r a l s d ie Mengeder ganzen Zahlen (OK, be ide unendl ich, aber ers tere eben etwasu n e n d l i c h e r ; d a s f a n d s c h o n H e r r C a n t o r i m l e t z t e n J a h r h u n d e r theraus) . Daraus fo lg t : der g roessere Wer tebere ich bekommt e inengroesseren Kasten.

We i te r so l l dami t auch ve rdeu t l i ch t werden : Va r iab len vo rn TypINTEGER koennen und duerfen nie Werte vom Typ REAL enthalten:

Ist oky ober da paßt es nicht

äpr t iS 7<\

Der eifr ige Schueler der Sprache PASCAL merkt sich also:

Versuche NIE einer Variablen vom Typ INTEGER einen REAL-Wertzuzuweisen, das passt nicht; aber eine Variable vom Typ REAL darfreelle und ganzzahl ige Werte bekommen!

Oder noch al lgemeiner (auch fuer spaeter) :

Var iab len duer fen nur Werte erhal ten. d ie dem Typ entsprechen.unter dem s ie vere inbar t wurden - kurz, praegnant , praezise.

27

Page 34: Pascal - Eine kinderleichte Einführung

So l l CPU a l so e inen Wer t i n e ine Va r iab le e in lesen (m i t READoder READLN), dann wartet er auf d ie Eingabe desselben von derTastatur, dann wi rd der Kasten gesucht , auf dem der gewuenschteVariablenname steht, dann stel l t CPU den einget ippten Wert in denKasten:

65.7 ^ Eingabe auf der Tastatur

1READLN ( summandl )

Kasten der ^=a_>Variablen nach"oler Vereinbarung

^ c ^J Ju*mm*&mcI -i I

(SKosten rach der fiwoabedes neuen Wertes

Kommt im fo lgenden der g rosse Augenb l ick der Berechnung derSumme (obiges Beispie lprogramm), so schaff t der Rechner s ich diebenoet ig ten Kaesten heran ( .summandl usw.) , schaut nach, was inihnen steht, und addiert das Ganze, danach die Ausgabe:

B e v o r m a n e i n e Va r i a b l e i n e i n e r O p e r a t i o n w i e d e r A d d i t i o noder so verwendet, muss man umbedingt einen Wert in sie geschrieb e n h a b e n . D a s k a n n m i t e i n e r E i n g a b e a n w e i s u n g o d e r a n d e r sgeschehen.

Sol l te das n icht getan worden sein, kommt keine Fehlermeldung,n e i n , n e i n , C P U n i m m t d a n n i r g e n d e i n e n W e r t , d e n e r s i c hausdenkt , jedoch passt d ieser euch meist ueberhaupt n icht .

Wuerdet ih r anders handeln? Mut t i sch ick t euch zum Einkaufen,ohne e inen Zet te l mi t den e inzuholenden Sachen mi tzugeben. T ja ,in dem Fall kauft ihr dann Teddies oder ein gutes Buch oder sonste twas, garant ier t aber n icht den Kaese fuer d ie gep lagte Mut ter.

Ein kleines Phaenomen am Schluss (dazu ein Programmausschnitt):

vo rhe r nachher

READLN ( preis );

READLN ( preis );

Eingabe: S

Eingabe: 12

l£t<us I

WRITELN ( preis:5 ); C* Ausgegeben wird 12 / *)

Nach dem zwe i ten E in lesen von pre is i s t der a l te Wer t (d ie 8 )NICHT mehr 'drin, sondern die 12 !!

2 8

Page 35: Pascal - Eine kinderleichte Einführung

A ls E rmahnung an d ie Expe r imen t i e r f r eud igen :

R E A D L N ( p i ) m i t C O N S Tpi - 3.14;

f u n k t i o n i e r t n i c h t ,

Genauso muessen die Menge der von euch vergebenen Variablennamen in einem Programm und die der vergebenen Konstantennamend i s j u n k t s e i n ! D . h . k e i n e Va r i a b l e d a r f d e n g l e i c h e n N a m e n w i eeine Konstante haben und umgekehrt.

Wir kommen uns meist schon Lieber penibel vor, es hier zu erwaeh-n^n, aber denkt daran: jede Var iable muss, wenn sie im Programmv e r w e n d e t w i r d , v o r h e r i n d e r Va r i a b l e n d e k l a r a t i o n v e r e i n b a r tworden sein!

2 y

Page 36: Pascal - Eine kinderleichte Einführung

3 . 4 . N i e d e r e M a t h e m a t i k

" I h r d a , h o e r t m a l ! D a s c h r e i b t I h r S e i t e n u m S e i t e n u e b e rP A S C A L u n d s o , a b e r w i e d e r C o m p u t e r ( e n g l . t o c o m p u t e =b e r e c h n e n ) o d e r R e c h n e r z u s e i n e m N a m e n k o m m t , d a s h a b ' i c h n o c hn i c h t g e s e h e n . "

T j a , d a i s t s c h o n ' w a s d r a n . A b g e s e h e n v o n d e r E r w a e h n u n g ,d a s s m a n + u . - u s w . i n d e r A u s g a b e a n w e i s u n g v e r w e n d e n d u e r f t e ,i s t n o c h n i c h t v i e l g e l a u f e n .

D a b e i v e r b r i n g e n v i e l e v i e l e C o m p u t e r i h r g a n z e s L e b e n d a m i t ,v o r s i c h h i n z u r e c h n e n .

B i t t e , w e n n i h r u n b e d i n g t w o l l t , d a n n s o l l t i h r a u c h d a s W i s s e ndazu bekommen .

W i e s c h o n e r w a e h n t , g i b t e s i n P A S C A L d i e m a t h e m a t i s c h e n O p e r at o r e n + , - , * u n d / .

g e w i c h t / a n z a h l e r g a e b e e i n D u r c h s c h n i t t s g e w i c h t

x * x + a $ x + b i s t d i e P A S C A L - R e a l i s a t i o n v o nX s - + A X + B ( b e k a n n t a u s d e r M a t h e -mat i k )

p r e i s * 1 4 / 1 0 0 e r g i b t d i e M e h r w e r t s s t e u e r h o e h e

I h r w i s s t j a , d a s s m a n s t r e n g u n t e r s c h e i d e n m u s s z w i s c h e nVa r i a b l e n v o m T y p I N T E G E R u n d d e n e n v o m T y p R E A L . S o i s t n a e m l i c hv e r e i n b a r t , d a s s d e r O p e r a t o r / i m m e r e i n E r g e b n i s v o m T y p R E A Ll i e f e r t :

9 1 / 2 i s t d a n n e b e n 4 5 . 5

1 0 / 5 i s t d a n n e b e n 2 . 0 ( . 0 z e i g t , d a s se s e i n R E A L -W e r t i s t )

A u s d i e s e m G r u n d e h a t m a n z w e i n e u e O p e r a t o r e n e i n g e f u e h r t :

D I V t e i l t g a n z z a h l i g o h n e R e s t

M O D e r m i t t e l t d e n g a n z z a h l i g e n R e s t e i n e rDivision

z . B .

9 1 D I V 2 i s t d a n n 4 5

1 0 D I V 5 i s t 2 ; a h h h h e i n I N T E G E R - V i e r t2 0 M O D 3 e r g i b t 2 ( 1 8 k a n n m a n g ' r a d e n o c h

d u r c h 3 t e i l e n )

9 1 M O D 2 i s t e b e n 1

D i e R e s u l t a t e d e r O p e r a t i o n e n D I V u . M O D s i n d i m m e r v o m T y pI N T E G E R * . S i e h a b e n d i e g l e i c h e P r i o r i t a e t w i e * u . / i n d e rPun kt-vor-St r i c h-Rec hnung.

Page 37: Pascal - Eine kinderleichte Einführung

Natuerlich kann in PASCAL .auch die Freude des ungehemmten Klammernsetzens vol l ausgekostet werden:

( (( (a + b) * c MOD d ) + e * (f - g) DIV h) * i - j )

Ansonsten gil t aber Punkt-vor-. . .

Damit den Noerglern vom Anfang auch etwas geboten wird, stellenw i r w e i t e r e m a t h e m a t i s c h e S t a n d a r d f u n k t i o n e n v o r, w i e m a n s i ea l l e n a s ' l a n g i n B u e c h e r n fi n d e t . D a b e i v e r w e n d e n w i r d i eVariable intreel lT um anzudeuten, dass der Parameter der Funkt ionvorn Typ INTEGER oder REAL sein kann.

Funktion in PASCAL

ABS ( intreell )

SQR ( intreell )

Er laeuterung

Liefert den Absolutbetrag voni n t r e e l l .

ABS ( -3 ) is t 3

berechnet intreel l2SQR ( 2.5 ) ist 6.25

SQRT ( intreell )

SIN ( intreel l )

berechnet intreell ~* (Wurzel)SQRT ( 6.25 ) ist 2.5

na ja, ergibt Sinus von intreellSIN ( 0 ) ist 1

COS ( intreell )

ARCTAN ( intreell )

LN ( intreel l )

EXP ( intreell )

und den Cosinus

liefert den arcus-tangens von intr e e l l

natuerlicher Logarithmus

* * » • — • " ( e = 2 . 7 1 8 2 8 1 . . . )

Die Ergebnisse der soeben neu kennengelernten Funkt ionen s indimmer vom Typ REAL\ Ausnahme: ABS liefert eines vom intreell-Typ.

N o c h z w e i w e i t e r e F u n k t i o n e n , d i e i m m e r R e s u l t a t e v o m Ty pINTEGER zurueckgeben:

ROUND ( intreell )

TRUNC ( intreell )

auf-/abrunden, den Nachkommastellen entsprechend:

ROUND ( 6.6 ) ergibt 7ROUND ( 6.4 ) ergibt 6

liefert den ganzahl igen Anteil voni n t r e e l l :

TRUNC ( 12.7 ) ergibt 12TRUNC ( 2 ) e rg ib t 2

O lt_f 1

Page 38: Pascal - Eine kinderleichte Einführung

D e r V o l l s t a e n d i g k e i t h a l b e r s t e l l e n w i r n o c h e i n eS t a n d a r d f u n k t i o n v o r , w e l c h e a l l e r d i n g s e i n R e s u l t a t v o r n T y pB O O L E A N l i e f e r t . S c h l a g t d a z u d o c h ' m a l i n K a p i t e l 3 . 7 . n a c h :

O D D ( i n t ) D e r P a r a m e t e r i n t m u s s v o m Ty pINTEGER sein. ODD liefert TRUE,wenn er eine ungerade ganze Zahl ist.

ODD ( 15 ) ergibt TRUE

U r t e i l t s e l b s t . I s t e s n i c h t d e n k b a r s i m p e l , a u c h k o m p l i z i e r t eR e c h n u n g e n i n PA S C A L z u v e r w i r k l i c h e n ? M a n s c h r e i b t ' s e i n f a c h s oh i n , w i e m a n e s g e w o h n t i s t .

S I N ( x ) * C O S ( y ) - S I N ( y ) * C O S ( y ) o d e r

S Q R T ( S Q R ( x ) - S Q R ( y ) ) o d e r

a + b # E X P ( z ) - A B S ( y ) o d e r

LN ( 3.4 ) - TRUNC ( x ) * ARCTAN ( z ) + SIN ( 3 )

L u s t i g e B e i s p i e l e , g e l l ? E s i s t m o m e n t a n s c h w e r , s i c h e t w a sS i n n v o l l e s a u s z u d e n k e n , ' t s c h u l d i g u n g .

B e i m H e r u m s p i e l e n m i t d e n F u n k t i o n e n u n d B a s t e l n v o n s c h o e n e nA u s d r u e c k e n , d e r e n E r g e b n i s a u f d e m S c h i r m e r s c h e i n e n k a n n , m u s se i n e s u n b e d i n g t b e a c h t e t w e r d e n :

G e n a u s o , w i e e i n z e l n e F u n k t i o n e n e i n E r g e b n i s m i t e i n e mb e s t i m m t e n T y p l i e f e r n - b e i S I N ( x ) i s t e r R E A L - , g e n a u s oh a t d a s R e s u l t a t e i n e s g a n z e n A u s d r u c k s e i n e n Ty p !B e i

S IN ( x ) + 3 i s t e r REAL , be i

TRUNC ( SIN ( x ) + 3 ) ist er jedoch INTEGER, weil dieFunktion TRUNC Ergebnissed i e s e n T y p s l i e f e r t .

D e r E r g e b n i s t y p i s t i m m e r d a n n R E A L , w e n n m i n d e s t e n s e i nO p e r a n d ( z . B . x i n x + 3 ) v o m T y p R E A L i s t , o d e r w e n n e i nO p e r a t o r n u r R E A L - U & r t e - a l s R l e s u l t a t l i e f e r t ( z . B . C O S ( x ) i n4 + COS ( 3 ) - 2 ).

I s t ' s a l l e r d i n g s u n s e r u n b a e n d i g e r W u n s c h , e i n E r g e b n i s v o m Ty pI N T E G E R z u b e k o m m e n , s o k o e n n e n w i r d i e s d u r c h d i e F u n k t i o n e nTRUNC und ROUND erreichen:

TRUNC ( 4 + COS ( 3 ) - 2 ) liefert einen INTEGER-Uert,ROUND ( 3.5 ■*• ABS ( -3 ) ) ebenso

3 2

Page 39: Pascal - Eine kinderleichte Einführung

PROGRAM funktionenbeispiel;

CONSTpi - 3.141592;

VARalpha, a, b : REAL;

BEGIN

WRITELN ( 'Berechnung der Hypothenusenlaenge: ' );WRITELN;

WRITE ( 'Laenge der 1. Kathete: ' ); READLN ( a );WRITE ( 'Laenge der 2. Kathete: ' ); READLN ( b );

WRITELN ( 'Daraus folgt die Hypothenuselaenge von',SQRT ( SQR ( a > + SQR ( b ) ) :7:3 ) ;

WRITELN;

WRITELN ( 'Und die Berechnung des Tangens von alpha: ' );WRITELN;

WRITE ( 'Winkel Alpha in Grad eingeben: ' ); READLN ( alpha );

WRITELN ( 'Tangens von alpha:',SIN ( alpha * pi / 180 ) /COS ( alpha * pi / 180 ) -.10:3 );

END.

U n s e r e H o f f n u n g i s t , a l l e h a b e n j e t z t e r s t m a l g e n u g v o nk o m p l i z i e r t e r M a t h e m a t i k . I h r w i s s t n u n , w a r u m d e r R e c h n e rRechner heisst .

Page 40: Pascal - Eine kinderleichte Einführung

3 . 5 . E s l a e s s t b i t t e n : S e i n e H e r r l i c h k e i t , d i e W e r t z u w e i s u n g

D a s i s t k a u m u e b e r t r i e b e n . D i e W E RT Z U W E I S U N G i s t v o n z e n t r a l e rB e d e u t u n g i n d e r g a n z e n I n f o r m a t i k . H i e r s c h e i d e n s i c h v i e l eG e i s t e r - s o l l e i n e s t r e n g e T y p k o n t r o l l e v o r g e n o m m e n w e r d e n ,s o l l e n W e r t Z u w e i s u n g e n z w i s c h e n k o m p l e x e n S t r u k t u r e n m o e g l i c hs e i n u s w . - .

Ach w a s d a s i s t . M o m e n t , d a z u e i n e k 1 e i n e G r a fi k m i tPr ogr amrnaussc hn i 11:

VARa, b, ergebnis INTEGER-,

ergebnis := a + b; (* die Wertzuweisung *)

t w iPolaroid Mo

J-j-xs * *

Um der War i ab 1 en ergebn is e i nen Wer t z uz uwei sen, er mi 11 el t derR e c h n e r d i e W e r t e v o n a u n d b , f u e h r t d i e A d d i t i o n d u r c h u n dp a c k t d e n e r r e c h n e t e n We r t i n d e n K a s t e n - d i e Va r i a b l e — e r g e b n i s .

A l l g e m e i n :

vertzuveisung (vorlaeufig): variable:

—>—! variable !—>--(:=>->-+ +

+ 1-I ausdruck !—>+ f

+ +—>—! variablennaae !—>-

t +

ausdruck (vorlaeufig):

+ 1•>--r—I aatheuatischer lern !—r—)

+ ++ +i variable !-+ +

->-

-matlieaati scher tern ist fuer uns er st einmalausreichend. Spaeter werden wir ihn praezi-sieren.

ausdruck und variable werden spaeter noch verfeinert

3 4

Page 41: Pascal - Eine kinderleichte Einführung

D a s PA S C A L - S y m b o l : = k o e n n e n w i r u n s a l s e i n e n P f e i l v o r s t e ll e n , d e r d o r t h i n w e i s t , w o h i n d a s E r g e b n i s d e s A u s d r u c k s g es c h r i e b e n w e r d e n s o l l :

ergebnis a + b

^ ~ ^ N

ft | + L(JJ

D a b e i w e r d e n d i e I n h a l t e v o n Va r i a b l e n a u f d e r r e c h t e n S e i t evorn Wert Zuweisung sop er at or (so heisst :=) nicht veraendert, dieVar iab le auf der l inken Sei te a l lerd ings bekommt das Resul ta t desAusdrucks als Wert.

Fo lg l i ch i s t d ies durchaus ges ta t te t und haeufig zu sehen:

a + 1 (# der Wert von a wird um 1 erhoeht #)

Nach dem Not ieren des Wertes von a vor der Addi t ion wi rd derKasten ers tmal wieder weggeste l l t , dann wi rd 1 addier t , und dannw i r d d e r K a s t e n v o n a w i e d e r h e r v o r g e k r a m t , w e i l d o r t d a sErgebnis h ine in so l l . So e in fach und e legant .

Mit der Wert Zuweisung ist es rnoegl ich, Var iablen Werte zu geben, ohne s ie d i rekt von der Tastatur in den Kasten e inzulesen.

READLN ( a ); b :- a; (# b hat dann den gleichen Wert wie a)

WICHTIG: Wie schon erwaehnt, duerfen Variablen vom Typ INTEGERkeine REAL-vierte enthalten. So ist also bei ALLEN ZUWEISUNGSANWEISUNGEN darauf zu achten, dass der Ergebnistyp des Ausdrucksauf der rechten Sei te ._q.enau mit dem Typ der Var iablen auf derl i n k e n S e i t e u e b e r e i n s t i m m t , b z w . e i n e U n t e r m e n g e d e s s e nW e r t e b e r e i c h e s d a r s t e l l t ( p r o f e s s i o n e l l : d i e T y p e n m u e s s e nkompat ibe l se in ) !

VARi j INTEGER; r : REAL;

i := i;r := 2; r

r :- i ;

(# gueltig *)4.7; (K beides gueltig #)

(* d i to, wei l INTEGER-Bereich Untermenge von REAL-Bereich ist #)

i : = r ;

i := TRUNC ( r );

(# halt, nicht gueltig #)

(# gueltig, weil TRUNC immer INTEGERl i e f e r t # )

SIN ( 1 ) + LN ( 3 ); C* gueltig *)

Page 42: Pascal - Eine kinderleichte Einführung

i :- COS ( 0.2 ) - ABS ( -2 ); (# ungueltig, Ausdruck lieferteinen REAL-Wert *)

1 j - i ; ( # g e h t n i c h t ; l i n k s m u s s e i n eVariable stehen #)

r : = ' 1 2 . 3 4 ' ; ( * n a , n a , n a . D a s w a r w o h l n i c h t s .Natuerl ich unguelt ig/ *)

I t i s v e r y i m p o r t a n t t h a t . . . o h h h , M o m e n t . . . a l s o , d a s s i h re u c h m e r k t , d a s s d i e Va r i a b l e , w e l c h e r e t w a s z u g e w i e s e n w i r d ,L I N K S v o m : = s t e h t ! M i t d e r Z e i t k o e n n t i h r g a r n i c h t m e h randers denken, aber am Anfang ist es manchmal ungewohnt.

Noch e in k l i tzek le ines Be isp ie l zum Sch luss :

PROGRAM tangenssimulation;

CONSTpi - 3.141592;

VARalpha, alpharad, tangens : REAL;

BEGIN

WRITELN ( 'Berechnung des Tangens von alpha:' );WRITELN;

WRITE ( 'Winkel in Grad eingeben: ' ); READLN ( alpha );

alpharad := alpha * pi / 180; (* Winkel umwandeln indas Bogenmass #)

tangens := SIN ( alpharad ) I COS ( alpharad );

WRITELN ( 'Tangens von', alpha:5:2, ' = ', tangens:7:3 );

END.

B e i s p i e l h a f t a n d i e s e m F ' r o g r a r n m i s t d i e A u s l a g e r u n g d e rTa n g e n s b e r e c h n u n g a u s d e r W ß / T f - A n w e i s u n g . D a s i s t s o v i e luebersicht 1 icher und zur Nachahmung empfohlen.

a l p h a r a d v e r d e u t l i c h t e i n e n Vo r t e i l , d e n s c h o n d i e K o n s t a n t e na n s a t z w e i s e h a t t e n . W i r d e i n W e r t d e s o e f t e r e n b e n o e t i g t , s os o l l t e e r a m P r o g r a m m a n f a n g a l s K o n s t a n t e v e r e i n b a r t w e r d e n ,fa l ls er vor Programmbeginn feststeht und s ich waehrend des Prog r a m m l a u f e s n i c h t a e n d e r t . Tr i f f t d a s a l l e s n i c h t z u , s o v e r e i nbart man ihn klugerweise als Variable und berechnet seine Groessewaehrend der Lau fze i t des Programms (s iehe a lpharad) . Au f d ieWeise z.B wird hier die mehrmalige Auffuehrung von alpha * pi / 180gespar t .

Page 43: Pascal - Eine kinderleichte Einführung

Ve r z w i c k t e s m i t Ve r z w e i g u n g e n

"Sein oder Nichtsein, (Hamlet)

"...- Muss ich mich entscheiden,So will ich ein Verbrecher lieber alsEin Tor von Ihren Augen gehen." (Marquis in Schillers

dramatischem Gedicht"Don Carlos")

"... Ja ich fuehle, und darin darfich meinem Herzen trauen, dass sie- o darf ich, kann ich den Himmelin diesen Worten aussprechen? -dass s ie mich l iebt / . . . " (Werther in Goethes

"Die Leiden des jungenWerthers")

"Wenn nun er es waere? Hinterher?Oder weil nicht? Oder das doppelteEreignis?" (Molly Bloom in James

Joyce' "Ulysses")

S o w e i t u n s e r k l e i n e r A u s fl u g i n d i e L i t e r a t u r . J e d o c h m a gm a n c h ' w i l l i g e r S t u d i o s u s f r a g e n , w a s d a s R e z i t i e r e n s o l l e ?

N u n , n a c h k u r z e r P r u e f u n g d e r o b i g e n A u s f u e h r u n g e n s t e l l t s i c hd e m a u f m e r k s a m e n L e s e r d o c h s o f o r t k l a r d a r, d a s s a l l e d i e s e P e rs o n e n e i n e s g e m e i n s a m h a b e n : s i e m u e s s e n E n t s c h e i d u n g e n t r e f f e nu n d n a t u e r l i c h i n A b h a e n g i g k e i t d i e s e r h a n d e l n .

D a a b e r d i e s E n t s c h e i d e n a u g e n f a e l l i g e i n e s o w i c h t i g e S a c h ei s t , w o l l e n w i r k e i n e n M o m e n t z o e g e r n , a u c h i n PA S C A L d i e M o e g -l i c h k e i t e i n z u f u e h r e n , s o l c h e s i n d e r G e w a l t z u h a b e n , u m d a m i tv e r s c h i e d e n e A k t i o n e n a l t e r n a t i v a b z u a r b e i t e n .

Z u m W a r m w e r d e n z u n a e c h s t e i n e k l e i n e E i n f u e h r u n g i n d i eN o t a t i o n u n d R e k a p i t u l a t i o n d e r S t r u k t o g r a m m e ( w i r h a b e n s i eb i s h e r j a s t r a e fl i c h v e r n a c h l a e s s i g t ) :

" S e i n o d e r N i c h t s e i n . . . " s t e h t z u r A u s w a h l ,e i n w e n i g f o r m e l l e r a n g e b e n , s o s c h r i e b e n w i r

W o l l t e n w i r e s

"röLLs Wiruns fürSein ent-Stkiectenhaben

v ^

SEIH ? ,

J A \ . ' N E I N

' i

/+

weiterauf Erdenvandeln

+

! D o l c h I! nehmen !+ +! den Leben !! ein Ende !! setzen !

1

Seite pur Aktionen, wenn

^- wir uns fur's /Vichfcseinentschieden tahen

nweisung

oi.Anweisun3

beide nurausführenwennNichtsein

3 7

Page 44: Pascal - Eine kinderleichte Einführung

Z u b e a c h t e n , a b e r l e i c h t z u b e h a l t e n i s t , d a s s a l l e s , w a s i nd e m F r e i r a u m u n t e r d e r A l t e r n a t i v e J A s t e h t , n u r a u s g e f u e h r tw i r d , w e n n d i e s e A l t e r n a t i v e g e w a e h l t w u r d e . A l l e s u n t e r N E I Nnur, wenn NICHTSEIN gewaehl t wurde.

D a s e n t s p r i c h t v o l l u n d g a n z u n s e r e r P h i l o s o p h i e , a l l eA n w e i s u n g e n v o n o b e n n a c h u n t e n a b z u a r b e i t e n , w e l c h eu e b e r e i n a n d e r a n g e o r d n e t s i n d ( s i e h e : D e r A l g o r i t h m u s , b e i d e mj e d e r m i t m u s s ) .

E t w a s k o n k r e t e r w i r d d i e s , w e n n w i r u n s v o r s t e l l e n , w i rbekaemen e i nen An ru f von e i nem Au f t r aggebe r :

W i r : " S t e t s z u I h r e n D i e n s t e n . Wa s w u e n s c h e n S i e ? "

Auftraggeber: "Ich haette gerne ein Pragramm, welches mir dasDurchschnittsgewicht meiner Kuehe berechnet.Dabei will ich nur Gesamtgewicht und die Zahlder gewogenen Kuehe eingeben muessen.Laesst sich das zu einem vernuenftigen Preisrea l i s ie ren?"

W i r : " A b e r n a t u e r l i c h , m e i n H e r r . W i r w e r d e n I h n e ndie Loesung binnen Kurzem zusenden.Beehren Sie uns bald wieder."

S o g l e i c h s e t z e n w i r u n s h i n u n d s t e l l e n d i e P r o b l e m l o e s u n g a l sSt ruk togramm da:

+ +! Einlesen des Sesaotgewichtes it +! Einlesen der Zahl der Kuehe !* . - *! v -v Zahl der Kuehe <= 0 ? *' !: !! J A " ^ „ ' ' N E I N I+ 1 +■ i i! Fehlerneldung ! Durchschnitts- I! ausgeben ! gewicht berech- I! I n e n . !. + ii ■ i■ i *i • A u s g a b e d e s Ii I D u r c h s c h n i t t s - !i ! g e w i c h t e s !

Sehlussaeldung

E i n e P r u e f u n g , o b d i e Z a h l d e r K u e h e k l e i n e r o d e r g l e i c h 0 i s t ,e r s p a r t u n s v i e l K u m m e r , d e n n s o l l t e d e r R e c h n e r w i r k l i c h e i n eD i v i s i o n d u r c h 0 d u r c h f u e h r e n w o l l e n , s o w u e r d e e r a b s t u e r z e n ,d . h . d a s P r o g r a m m a b b r e c h e n u n d n u r e i n e n r e l a t i v n i c h t s s a g e n d e nKommentar geben.

A b e r s o w i e o b e n n i m m t s i c h d a s v i e l v i e l e l e g a n t e r a u s .

3 8

Page 45: Pascal - Eine kinderleichte Einführung

Unsere freundl iche* Fehlermeldung wird nur im Ernstfal l ausgegeben , d .h . "Kuhzah l " k l e i ne r ode r g l e i ch 0 . Ande rn fa l l s be rechne tCPU das Durchschnittsgewicht und gibt es aus.

Die Schlussmeldung erscheint IMMER! Zu merken is t das daran,dass ihr Kasten unter der gesamten Abfrage steht , n icht nur untere i n e r A l t e r n a t i v e !

Nun das geldbringende Programm:

PROGRAM durchschnitt;

VARkuhzah l : INTEGER; f * es g ib t nur ganze Kuehe * )

gesamtgewicht,durchschnittsgewicht ; REAL;

BEGIN

WRITE ( 'Bitte das Gesamtgewicht eingeben (in Kg) ; ' );READLN ( gesamtgewicht );

WRITE ( 'B i t t e d ie Zah l de r Kuehe e ingeben : ' ) ;READLN ( kuhzahl );

IF kuhzahl > 0THEN BEGIN

durchschnittsgewicht := gesamtgewicht / kuhzahl;

WRITELN ( 'Das Durchschnittsgewicht betraegt: ',durchschnittsgewicht :5:2, ' Kg' ) ;

END

ELSE WRITELN ( 'Es muessen mehr als 0 Kuehe sein/' );

WRITELN ( 'Wenn neue Werte berechnet werden sollen, bitte ','das Programm neu starten.' );

END.

D e m K e n n e r d e r e n g l i s c h e n S p r a c h e w i r d e s s i c h e r l i c h n i c h tschwerfa l len, d ie Abfrage zu verstehen»

Im Deutschen etwa so:

WENN kuhzahl GROESSER 0DANN durchschnittsgewicht berechnen und ausgebenSONST eine Fehlermeldung ausgeben

3 9

Page 46: Pascal - Eine kinderleichte Einführung

Als Syn taxd iag ramms

if-anweisung:

■> - ( . r ) bedingung ->—'then ) - > -y

-i anweisung !-t + -»-(ELSE}- -■ anweisung !-

+ 1

anweisung:

4 . +——I einfache anweisung !-—■V 4 1 *j t + --—! strukturierte !-—

! anweisung I+ +

strukturierte anweisung:

+—>—---' verbundanueisung I—7-

v + + Aj + + j—-! bedingte anweisung !~

4 4 .

einfache anweisung: verbundanueisung:

+ +-7—! vertzuweisung !—7-V + + Aj + 4 Jt—! ausgabeanw. I—+I t ♦ iI * + It—! eingabeanw. !—+I + 1 !I + + !t—* leere anweisung !—♦

+ +

/ N + + - - - s

—>—i' DE6IN)—>—7—S anueisung !--•■■;-->—( END }-->\ ^ J a + + V N - -

bedingte anweisung (vorlaeufig): leere anweisung:

+ 4-! if-anweisung !-

4 4

W i r haben e in r i ch t i g sch lech tes Gewissen : ob es gu t war, so -v ie le D iag ramme au fe inma l vo rzus te l l en? Prob ie r t ' s ma l» Mussn ich t so for t s i tzen und w i rd auch immer noch ver fe iner t .

j a

D i e Ve r b u n d a n w e i s u n g k e n n t i h r j a s c h o n a l sW e r t Z u w e i s u n g i s t a u c h e i n e A n w e i s u n g , d . h .Anweisungen folgen, so muss ein Semikolon anges

anueisungsteil. Diew e n n a n d e r e

:hlossen werden;aber wem erzaehlen wi r das, wisst ihrden Programmen immer wieder auf.

ja schon, und es taucht in

40

Page 47: Pascal - Eine kinderleichte Einführung

b e d i n g u n g i s t n i c h t n a e h e r e r l a e u t e r t , d a e s s i e s o n i c h t i nPA S C A L g i b t . W i r a p p e l l i e r e n d a a n e u r e n S c h a r f s i n n u n d e u r eIntui t ion. Bedingungen sind fuer uns zunaechst mathematische Aus-druecke, wie

a > = b f u e r a > b10 = 12 f u e r 10 = 1213 <> 14 f u e r 13 £ 140 < = 9 9 f u e r 0 £ 99

Man muss also in PASCAL mittels der Tastatur ein wenig kungeln,um die korrekten mathematischen Zeichen zu erzeugen.

R e c h t s u n d l i n k s d e r Ve r g l e i c h s o p e r a t o r e n m u e s s e nAusdruecke stehen (z.B. (12 + 3) <= (c * d) ist gueltig).

math.

Wichtig ist bei all diesem, dass Bedingungen WAHR: oder FALSCHs e i n k o e n n e n - s o n s t l i e s s e s i c h j a a u c h k e i n e E n t s c h e i d u n gt r e f f e n - , z . B . i s t 1 0 = 1 2 n i c h t W A H R , 0 < = 9 9 i s t W A H R ,13 <> 14 ist WAHR, a >= b ist FALSCH, wenn a = 1 und b =2 ist.

Kann wahr oder falsch Sein

wird QuSQeCührt (wenn die Bedtinouno wcihr40 h 0 . Auch THEN -Ewekj Genannt.

isb.z.B.

ELSE(a»weisung')- ___ wind! nur aUSoeCühr wenn olie hd'mQungCbkch ist,Auch ELSt-ifcjeio oenannt.

Der IF-Anweisung eventuel l fo lgende Eiefehle werdenFa l l ausge fueh r t !

a u f j e d e n

D a d i e S y n t a x d i a g r a m m e e i n d e u t i g , j e d o c h n i c h t L.inbedingts c h n e l l z u v e r s t e h e n s i n d , s c h r e i b e n w i r ' m a l e i n i g e m o e g l i c h eK o n s t r u k t i o n e n m i t I F - A n W e i s u n g e n n i e d e r . D a b e i s t e h t a n w e i s u n g l ,a n w e i s u n g 2 u s w . f u e r i r g e n d e i n e g u e l t i g e P A S C A L - A n w e i s u n g ,bed ingung l usw. fue r e ine gue l t i ge PASCAL-Bed ingung :

IF bedingunglTHEN anweisunglELSE BEGIN

anweisung2;anweisungS;

END;

\ bedingung 1 ' !' ' '

J A x , ' N E I N i_ v ♦

auweis. 1 ! anweis. 2 I4 4

! anueis. 3 I4.

41

Page 48: Pascal - Eine kinderleichte Einführung

IF bedingunglTHEN (* leere Anweisung #)ELSE anweisungl;

\ bedingungl .

J A v , N E I N

IF bedingunglTHEN IF bedingung2

THEN anweisunglELSE anweisung2;

! anveis. 1 I

JA

bedingung 1 /

, ' NEIN

i v v bedingung 2 ' !

! J A \ ' N E I N !4 - / - 1! anu. 1 ! anw. 2 I

IF bedingunglTHEN BEGIN

anweisungl;anweisung2;anweisung3;

ENDELSE IF bedingung2

THEN anweisung4ELSE anweisungS;

4 . - ^

! v b e d i n g u n g 1 ^ - • " I! \ ^ ^ " iI J A V v v - ' ' N E I N !

_ x _ - . . . Al a n w e i s . 1 I \ b e d i n g u n g 2 - - •■ • ^ s \

v . '+ 1 J A v \ x ^ N E I N !! a n w e i s . 2 + *■ . * ++ 4 . a n w e i s . 4 ! a n w e i s . 5 !I a n v e i s . 3 ! I !+

Page 49: Pascal - Eine kinderleichte Einführung

IF bedingunglTHEN IF bedingung2

THEN IF bedingung3THEN anweisunglELSE BEGIN

anweisung2;IF bedingung4

THEN anweisung3ELSE anweisung4;

END;

bedingung 1

JA fJEIN

bedingung 2 '

JA

bedingung 3

, 'NEIN

\JAV>

n <:

anv. 1 !

NEIN

anweisung 2

* . _ - 4I \ bedingung 4 • !I N / I

I J A s / ' N E I N !4 - V 1I anw. 3 I anueis. 4 i

I h r s e h t , d a s k a n n g a n z s c h o e n k n i f fl i g w e r d e n ; a b e r l e g t m a nk o n s e q u e n t S t r u k t o g r a m r n e d a z u a n , d a n n b e h a e l t m a n i n j e d e r L a g ed i e U e b e r s i c h t . F a s t e x z e s s i v r u e c k t m a n d i e P r o g r a m m z e i l e n e i n ,u m a u c h d o r t n o c h K l a r h e i t z u h a b e n ( d a z u i n K a p . 3 . 11 . m e h r ) .

D r e i D i n g e , d i e i m U m g a n g m i t I F z u b e a c h t e n s i n d :

1 . S o b a l d m e h r a l s e i n e A n w e i s u n g i m T H E N - o d e r £ Z . S £ - Z w e i ga u s g e f u e h r t w e r d e n s o l l , m u e s s e n d i e s e m i t B E G I N u n d E N Dgeklammert werden! Sie bilden dann eine verbundanueisung.

2 - H i n t e r d e r A n w e i s u n g , w e l c h e n a c h T H E N s t e h t d a r f K E I NS e m i k o l o n f o l g e n . W E N N e s n o c h e i n E L S E i n d e r / f - A n We i s u n g g i b t !

i s t e i n S e m i k o l o n

muss nach der THEN-

E r s t n a c h d e r A n w e i s u n g , w e l c h e a u f E L S E f o l g t ,z u s e t z e n , w e i l d o r t d i e / F - A n w e i s u n g e n d e t .

S o l l t e k e i n £ £ S £ - Z w e i g v o r h a n d e n s e i n ,A n w e i s u n g e i n " ; " s t e h e n , i s t j a k l a r .

s o

3 . F u e h r t m a n m e h r e r e Z f - A n w e i s u n g e n i n e i n a n d e r a u f , s o n e n n tm a n d a s S C H A C H T E L N . E i n w i c h t i g e r A u s d r u c k , d e r n o c h h a e u fi g e rv o r k o m m e n w i r d . W i e k l e i n e r e S c h a c h t e l n i n g r o e s s e r e p a s s e n , s ok a n n m a n / F - A n w e i s u n g e n i n e i n a n d e r s e t z e n . S i e h e d a z u d a svorangehende St ruk tograrnrn .

I n B e z u g a u f d i e s e P u n k t e s o l l t e tB e i s p i e l e a n s e h e n .

i h r e u c h n o c h r n a l d i e o b i g e n

4 3

Page 50: Pascal - Eine kinderleichte Einführung

Mmmmh, Moment. Da kommt uns gerade ein Sonderfall in den Sinn,d e n z u v e r a c h t e n s i c h n i c h t b e z a h l t m a c h t . D a r u m e i n e k l e i n eDeklamation dazu:

Es wird die Hoehe eines Hauses angegeben. Wenn es niedriger als10 m is t , dann sagen wi r, es se i k le in . Is t es groesser a ls 50m,dann sagen wir, es sei sogar sehr gross. Haeuser, d ie dazwischenl i egen , i n te ress ie ren uns n i ch t . W i r s i nd fue r Ex t reme .

Struktoqrarnm dazu:

+—

+<-Hausgroesse einlesen

*r-

Hoehe >= 10 n ?

JA NEIN—--/:■/ !Hoehe > 50 q ? Schreibe:

- v , ! D a s H a u s i s tJA v - - 'NEIN I k le in .

I Schreibe:I Das Haus ist! sehr gross!4

Umgesetzt in ein Programm:

PROGRAM hausgroesse;

VARhoehe : REAL;

BEGIN

WRITE ( 'Bitte Haushoehe eingeben; ' ); READLN ( hoehe );

IF hoehe >= 10THEN IF hoehe > 50

THEN WRITELN ( 'Ohhh, ein sehr grosses Haus." )ELSE WRITELN ( 'Schade, nur ein kleines Haus.' );

END.

Tipp t es 'ma l e in , und l ass t es m i t ve rsch iedenen Wer ten fue rd i e H a u s h o e h e l a u f e n . N a , u e b e r r a s c h t ? K l a r , e s f u n k t i o n i e r tnaeml ich n icht ganz so, wie geplant .

F u e r H a u s h o e h e n u e b e r 5 0 i s t a l l e s O K , a b e r d a r u n t e r. . . !S e l b s t 2 0 m h o h e H a e u s e r w e r d e n a l s k l e i n b e z e i c h n e t , w a s j an i c h t g e w o l l t w a r.

Gruebel, grurnmel, denk, denk, wo l i eg t der Feh le r?

44

Page 51: Pascal - Eine kinderleichte Einführung

G a n z e i n f a c h . W i r h a b e n e u c h d u r c h f a l s c h e s E i n r u e c k e n d e sE L S E — Z w e i g e s g e l e i m t . D e r g e h o e r t n a e m l i c h n i c h t z u m 1 . I F,sondern zum 2. IF; so sieht 's korrekt aus:

IF hoehe >- 10THEN IF hoehe > 50

THEN WRITELN ( ' ...ELSE WRITELN ( ' ...

E s w i r d e i n E L S E — Z w e i g i m m e r z u m l e t z t e n I F g e r e c h n e t , w e l c h e ske inen ha t ; bzw. immer zum t ie fs tqeschach te l ten , , IF ohne ELSE,

K e i n e V e r z w e i fl u n g a u f k o m m e n l a s s e n . E s g i b t e i n e L o e s u n g .W o l l e n w i r L i m b e d i n g t u n s e r o b i g e s P r o g r a m m v e r w i r k l i c h e n , s o i s td i e Ve rzwe igungsanwe isung so zu p rog rammie ren :

IF hoehe >= 10THEN/BEGIN

IF hoehe > 50THEN WRITELN ( 'Ohhh, ... ' );

diese VerbunoWiweisunQ macht die innereIF-Anweisüno nach draußen unsLchtbqr,So dop otastLSE der äußeren zugeschlagenWird I

ELSE WRITELN ( 'Schade, ...' ) t

oder

IF hoehe >= 10THEN IF hoehe > 50

THEN WRITELN ( 'Ohhh, ...' )ELSE <* hier nur die LEERE ANWEISUNG / *;

ELSE WRITELN ( 'Schade, ... ' );

45

Page 52: Pascal - Eine kinderleichte Einführung

3 .7 . Die Wahrheit und nichts als die Wahrheit

I n d i e s e m K a p i t e l b e s c h a e f t i g e n w i r u n s m i t A u s s a g e n ,Wahrheitswerten und der weiteren Vert iefung unseres Wissens ueberAusdruecke und Vergleiche usw.

Das k l ing t n i ch t nu r t rocken , n e i n . d a s i s t e s a u c h . %J Cv CV ÖC\ m

jeder muss mal eine Durststrecke durchstehen.Danach koenn t ih r aber ge laeu te r t d ie naechs thoeheren Weihen

der Informat ik in Empfang nehmen. Darum: Nicht k leckern, sondernj e t z t m a l ' r a n g e h e n . . .

Aussagen -w ie das Wor t schon andeute t - sagen e twas aus . Umgenauer zu sein: Aussagen kann man immer mit den Adjektiven WAHRoder FALSCH belegen.

Dre i Aussagen a ls Beisp ie l :

" S c h u l u n t e r i c h t i s t m e i s t l a n g w e i l i g . ""Aus diesem Buch kann man nichts lernen." Aussage ist FALSCH."Dieses Buch is t sehr gut . "

"Lass' uns schwimmen gehen,

Aussage ist WAHR.Aussage ist FALSCAussage ist WAHR.

Ist keine Aussage.

Of t werden Aussagen in Verg le ichen anget ro f fen ; das haben wi rschon im letzten Kapi te l gesehen: 3 > 2 ist e ine ALissage.

Auch Her r Wi r th ( ih r e r inner t euch?) dachte s ich schon, es se in u e t z l i c h , m i t W a h r h e i t s w e r t e n i n P r o g r a m m e n j o n g l i e r e n z ukoennen, und uebersetzte flugs wahr und fa lsch ins Engl ische:

w a h r w i r d z u T R U E

f a l s c h w i r d z u FA L S E

Man kann sie im Program verwenden, wo's passt:

IF TRUETHEN WRITE ( 'Die Bedingung ist WAHR' );

E i n £ £ S £ - Z w e i g e r u e b r i g t s i c h , w e i l d i e B e d i n g u n g i m m e r w a h ri s t , e r w u e r d e n i e a n g e l a u f e n . D e n g l e i c h e n Z w e c k w u e r d e :

IF 2 - 2THEN WRITE ( 'Ist auch immer WAHR' );

e r fue l len . Genauso kann man FALSE e inse tzen,d e r £ £ S £ - Z w e i g a n g e l a u f e n ( f a l l s v o r h a n d e n ) .

dann wi rd eben immer

T j a , s o a l l e i n h a b e n T R U E u n d FA L S E n a t u e r l i c h w e n i g S i n n , a b e rd a h a b e n w i r d i e P h a n t a s i e d e s o b e n e r w a e h n t e n H e r r n u n t e r -s c h a e t z t . Z u d i e s e n b e i d e n K o n s t a n t e n h a t e r e i n e n n e u e n T y pe r s o n n e n , d a m i t m a n Wa h r h e i t s w e r t e a u c h Va r i a b l e n z u w e i s e n k a n n .E i g e n t l i c h n u r k o n s e q u e n t , n i c h t ?

D i e s e r Ty p h e i s s t B O O L E A N . B e n a n n t n a c h G e o r g e B o o l e , e i n e mb e r u e h r n t e n M a t h e m a t i k e r. U n s e r t y p - S y n t a x d i a g r a r n r n e r w e i t e r t s i c h :

4 &

Page 53: Pascal - Eine kinderleichte Einführung

typ (inaer noch vorlaeufig):

—>—r—('iHTEfiER)—T—>I I " A\ ' N '+-J REAL r-+

♦~V B00LEANV-+

Va r i a b l e n d i e se n n e u e n Typ s ko e n n e n u e b e ra l l d o r t e i n g e se t z twerden, wo ihr sonst e inen Vergleich schreiben wuerdet.

Nach dem in te rnen Schn i t tmus te r he rges te l l t e Kaes ten f ue r s i es ind sehr sehr k le in ;

Kasten für INTEGER

0 *V KostenfürBOOLEAN

PROGRAM wahrheitsvariablen;

VARkleineshaus, sehrgrosseshaus : BOOLEAN;

h o e h e : R E A L ;

BEGIN

WRITE ( 'Bitte die Haushoehe angeben: ' ); READLN ( hoehe );

k le ineshaus := hoehe <= 10;

sehrgrosseshaus :- hoehe > 50;

IF kleineshausTHEN WRITELN ( 'Schade, ein kleines Haus.' )ELSE IF sehrgrosseshaus

THEN WRITELN ( 'Ohhh, ein sehr grosses Haus/' );

END.

An diesem Wiederaufgr i f f unseres Abschlussproblems vorn letztenKapitel koennen wir mehrere Dinge sehen.

Z u m e i n e n d i e e r w a e h n t e M o e g l i c h k e i t d e r Ve r w e n d u n g v o nB00Z.£M-Variablen immer dort wo eine Bedingung stehen muss; zürnanderen d ie Zuwe isung von Wahrhe i tswer ten an so lche Var iab len .A l s l e t z tes noch , gew isse rmassen e in Nebene f fek t , d ie g roesse reU e b e r s i c h l i c h k e i t e i n e s P r o g r a m m e s d u r c h s p a r s a m e n G e b r a u c hlogischer (BQQLEscher) Var iablen.

Nochmal zur Zuweisung. Genauso, wie ein mathematischer Ausdrucke i n E r g e b n i s l i e f e r t , w e l c h e s v o m Ty p R E A L o d e r I N T E G E R i s t ,genauso hat auch ein logischer Ausdruck ein Ergebnis. Dessen Typist BOOLEAN und kann somit jeder Variablen diesen Typs zugewiesenwerden.

47

Page 54: Pascal - Eine kinderleichte Einführung

Beisp ie le fuer Ausdruecke

12 + 3 # (SIN ( x ) - z)

ROUND ( z * 3.455 + x )

(z - 4.5) >= (SIN ( z ) + 3)

a - 15 - f

Resu11 at st yp en

REAL

INTEGER

BOOLEAN

BOOLEAN

Und immer wieder: der Unterschied zwischen Vergleichsoperatorenu n d a r i t h m e t i s c h e n O p e r a t o r e n i s t , d a s s e r s t e r e e i n e n W a h rh e i t s w e r t ( T R U E o d e r FA L S E ) a l s E r g e b n i s l i e f e r n , l e t z t e r e a b e reinen Zahlenwert. Obwohl beide als Operanden mathematische Ausdruecke ver langen.

D i e P r i o r i t a e t d e r Ve r g l e i c h s o p e r a t o r e n i s t n o c h n i e d r i g e r a l sdie von + oder --. D.h. man kann schreiben:

wahrheitsvariable := (12 + b) >= 13

wahrheitsvariable := 12 ■/■ b >= 13

oder

E r s t e r e s i s t e t w a s e i n d e u t i g e r, a b e r d i e K l a m m e r n s i n d n i c h tnotwendig.

Zur Einschaerfung:

VARWahrheit ; BOOLEAN;i : I N T E G E R ;

Wahrheit := 13 > 9;

Wahrheit := Wahrheit;

ist cvk, Wohrheit bekömmtden Wert TRUE"

ouch out, Wahrheit behältSeinen Wert

Wahrheit :- 9 <> 10; ok, Wahrheit wirrJTRUF

Wahrheit :- 10 + SIN ( 3.14 ) >= 0.5;

Wahrheit :- 3 + 4 - i;

-3 + Wahrheit;

Wahrheit := TRUE;

alles klQv

nein, nein! 3+4. - L liefert, eine Zahlcxls Ergebnis / keinen Wahr heifcs wert]

c|ekt auch n'Cnti X>er Operator +- mußeinen mqth. Ausdiruck als «2. Operqndenhaben!ok!

Die Verwendung von logischen Variablen ist besonders dann sehre legan t , wenn e ine Bed ingung i n e i nem P rog ramm mehre re Ma legepruef t w i rd . In dem Fal l dek lar ie r t man passend e ine boo lescheVa r i a b l e , w e i s s t i h r s c h n e l l d e n W a h r h e i t s w e r t d e r o e f t e r z upruefenden Bedingung zu und verwendet s ie immer dann, wenn dieA b f r a g e e r f o l g e n s o l l :

48

Page 55: Pascal - Eine kinderleichte Einführung

VARbedingung : BOOLEAN;

bedingung :- (i + 9 * SIN ( z )) > EXP ( 1.002 ); (* sehr profimaessig #)

(* weiter unten im Programm folgt dann ; #)

IF bedingungTHEN ...ELSE ...

IF bedingungTHEN ...

IF a > bTHEN ...ELSE IF bedingung

THEN ...

T j a , w i e j e d e r m a n n l e i c h t e i n s i e h t , m a n k a n n s i c h ' n e M e n g eA r b e i t s p a r e n . W e r w o l l t e a u c h d e n R i e s e n v e r g l e i c h s o o f th i n s c h r e i b e n ? W i r s i n d d o c h f a u l !

Aus dem Leben geg r i f f en :

V i e l w i r d d a v o n g e r e d e t , w e n i g e t u n e t w a s d a f u e r . G e m e i n t i s td e r C o m p u t e r i m H a u s h a l t , z . B . i n d e r K u e c h e .

M u t t i m o e c h t e e i n e E n t s c h e i d u n g s h i l f e i n S a c h e n K o c h e n . H o h o ,d i e s o l l s i e b e k o m m e n .

Ver bal e Pr ob 1 ern f or rnul i er ung:

We n n i c h m e h r a l s 5 0 D M i n d e r H a u s h a l t s k a s s e h a b e , d a n n k a u f ei c h S t e a k s , h a b e i c h w e n i g e r , d a n n g i b t e s G r i e s s , e s s e i d e n n ,i c h h a b ' n u r n o c h 1 D M , d a n n w i r d g e f a s t e t , s o n s t g i b t s G r i e s s ,w e n n n i c h t g e r a d e F r e i t a g o d e r D o n n e r s t a g i s t , a n d i e s e n Ta g e ng i b t ' s d a n n F i s c h . S o l l t e i n d e r b e k a n n t e n I l l u s t r i e r t e n x x x x x xg e r a d e e i n e D i a e t l a u f e n , d a n n g i b t ' s d a s D i a e t - M e n u e , e g a l w i ed i e F i n a n z e n s i n d .

49

Page 56: Pascal - Eine kinderleichte Einführung

Als Struktogramm:

+ +! Einlesen, uieviel Geld in der Kasse ist+ —I Wochentag einlesen

Einlesen, ob eine Oiaet laeuft\ -

— i

— +

.___*Oiaet ?\

\JA \ NEIN

-i -<_.

IDiaet-iHenue

JA\+--

oelir als 50 DH ?

H E I N I' - - y *\ weniger als 1 DH?' !

v " I\

J A \ , ' N E I N i. ^ K .+- 1

Fr ? //

Steak ! fasten

i \! JA • NEIN It - . . - V- - >

!\ Do?/;i ja, .nein:+„_.V---+

Fi ! Fi IGriessseh ! seh ! !

+

5 0

Page 57: Pascal - Eine kinderleichte Einführung

E inen Momen t , b i t t e , dann haben w i r das auch a l s P rog ramm:

PROGRAM wassol1 ichessen;

VARgeld : REAL; Wochentag, diaet : INTEGER;

BEGIN

WRITE ( 'Wieviel Geld ist in der Kasse: ' ); READLN ( geld );

WRITE ( 'Diaet in Zeitschrift? Wenn ja, dann 1, sonst 0: ' );READLN ( diaet );

WRITE ( 'Wochentag (Mo=l, Di=2,...So=7): ' ); READLN ( Wochentag );

IF diaet - 1THEN WRITELN ( 'Mmmmm, ein leckeres Diaetmenue." )ELSE

IF geld > 50THEN WRITELN ( 'Kauf doch mal Steaks.' )ELSE

IF geld > 1THEN

IF Wochentag -4 (* d.h. Donnerstag *)THEN WRITELN ( 'Hurra es gibt Fisch.' )ELSE

IF Wochentag - 5 C# Freitag «>THEN WRITELN ( 'Mmmm, Fisch.' )ELSE WRITELN ( 'Tja, nur Gries.' )

ELSE WRITELN ( ' fasten. . . ' ) ;

END.

Zugegeben e in re l a t i v ho les Be i sp ie l , abe r nag t n i ch t t r o t zdemi n e u c h d i e U n z u f r i e d e n h e i t u e b e r d i e U n u e b e r s i c h t l i c h k e i t . O K ,d ie ers ten be iden Schachte lungsebenen gehen ja auch noch, aberz w e i m a l a b z u f r a g e n , w i e d e r W o c h e n t a g i s t , d a s i s t e i n f a c hzuv ie l , und d ie En tsche idung zum Fas ten , e ie ie ie i . . .

Man muesste schreiben duerfen:

IF Wochentag gleich 4 oder 5THEN WRITELN ( 'Es gibt mal wieder Fisch/' );

Und ta t saech l i ch , t r a ra t r a ra , das geh t so , ode r aehn l i ch . Se i teh r l i ch , i h r hab t ' s n i ch t zu ho f f en gewag t .

PASCAL sieht Verknuepfungen zwischen Zahlen vor (+, - usw.) undg e n a u s o g i b t e s d i e M o e g l i c h k e i t , b o o l e s c h e V a r i a b l e n z uv e r k n u e p f e n . D a f u e r s t e h e n d i e O p e r a t o r e n A N D , O R , N O T z u rVerfuegung. Sie entsprechen den Deutschen Worten UND, ODER undNICHT."

Page 58: Pascal - Eine kinderleichte Einführung

E in ige ve rba le Be i sp ie l e :

Wenn Klaus groesser als Peter is t UND Klaus groesser als Wi l l iis t , dann is t K laus der groesste von den dre ien.

Wenn ich NICHT fahre, dann gehe ich, sonst fahre ich.

Wenn ich gehe, dann gehe ich, sonst fahre ich. Hat den gleichenEffekt wie der vorangehende Satz.

Wenn es dunkel ist ODER nach 0 Uhr ist, dann schlafe ich.

Ebenso kann man in PASCAL formulieren, dass eine Anweisung nurausge fueh r t we rden so l l , wenn meh re re Bed ingungen g l e i chze i t i ge r fue l I t s ind :

IF (a > b) AND (a > c)THEN WRITE ( 'a ist am groessten' );

IF (a - b) OR (b - c) OR (c = a)THEN WRITE ( 'mindestens zwei Werte sind gleich' )\

IF NOT (a = b)THEN ...

ist das gleiche wie IF a <> bTHEN ...

M i t A N D , O R u n d N O T k a n n m a n N U R A u s d r u e c k e , Va r i a b l e n u n dKons tan ten verknuep fen . deren Resu l ta t , bzw. Wer t vo rn Typ BOOLEANi st !

VARbl, b2, b3 : BOOLEAN;z : I N T E G E R ;

bl := b2 AND b3 OR (2 > z);

IF (z - 4 < 90) OR b2 AND NOT b3THEN ...

b2 := TRUE; b3 := FALSE;

bl := NOT b2;

b3 :~ z AND bl; (* geht nicht, z hat Typ INTEGER *)

Page 59: Pascal - Eine kinderleichte Einführung

Nun verhaelt es sich so, dass logische Ausdruecke in denen ANDusw. vorkommen nur unter bestimmten Bedingungen TRUE oder FALSEl i e f e r n . U m d i e s e i n w e n i g z u e r h e l l e n , d i e g r u n d l e g e n d s t e nWahrhe i t s tabe l l en :

VARBOOLEAN; (# werden in der folgenden Tabelle be

nutzt *)

! a AND b+! TRUE! FALSE! FALSE! FALSE

a OR b NOT a

TRUE i TRUETRUE i FALSEFALSE ! FALSEFALSE ! TRUE

TRUETRUEFALSETRUE

FALSEFALSETRUETRUE

D a i m m e r w i e d e r d i e A e h n l i c h k e i t z u d e n m a t h e m a t i s c h e nO p e r a t o r e n a u f t a u c h t , w o l l e n w i r e u c h a u c h n i c h t v o r e n t h a l t e n ,d a s s e s e i n e P r i o r i t a e t e n a b f o l g e e b e n f a l l s b e i d e n V e r g l e i c h su n d l o g i s c h e n O p e r a t o r e n g i b t :

D o r t h a t N O T d i e h o e c h s t e P r i o r i t a e t , d i c h t g e f o l g t v o n A N D ,a u f d e m 3 . P l a t z r a n g i e r t O R , u n d w e i t a b g e s c h l a g e n f o l g t d a sF e l d d e r V e r g l e i c h s o p e r a t o r e n ( > , < , = , < = , > = , < > ) , s i e h a b e na l l e g l e i c h e n Vo r r a n g .

A u s d i e s e r Ta t s a c h e e r g i b t s i c h :

(2 > 3) AND (3 < 4)

2 > 3 AND 3 < 4

ist Sek korrekt und liefert ThLSE

oJi,ofi.' f{Nd Wöft/eJu.3 verknüpfen,weiL es \6rmng vor < und > hot,'Also ^elit'S nicht (Kammern Sind Jetzt notwendig i

So, bevor am Schluss noch ein Bonbon auf euch wartet . . . Ohhh,n i c h t l i n s e n , s o l l e i n e U e b e r r a s e h u n g s e i n . N u n , a l s o h i e r n o c hdie Vereinfachung unseres Kuechenprogramms und ein neues Problemmit Loesung.

VARdiaetmenue, fischmenue, steakmenue, fasten ; BOOLEAN;

diaetmenue : = diaet - 1;steakmenue := NOT diaetmenue AND (geld > 50);fasten :- NOT diaetmenue AND NOT steakmenue AND (geld < 1);fischmenue := NOT diaetmenue AND NOT steakmenue AND NOT fasten

AND ( (Wochentag - 4) OR (Wochentag - 5) );

IF diaetmenueTHEN WRITELN ( 'Also ein Diaetmenue.' )ELSE IF fischmenue

THEN WRITELN ( 'Es gibt Fisch." )ELSE IF steakmenu

THEN WRITELN ( 'Es gibt leckere Steaks///' )ELSE IF fasten

THEN WRITELN ( 'Und wieder fasten...' )ELSE WRITELN ( 'Griess, Griess alle Tage. 1 i '

Page 60: Pascal - Eine kinderleichte Einführung

I s t d a s n i c h t s c h o e n u e b e r s i c h t l i c h ? D a b e k o m m t m a n r i c h t i qHunger. Aber h a l t vo r dem Vergnueqen noch e i n wenigProb1emwaelz en:

B o o l e s c h e Va r i a b l e n h a b e n d e n g r o s s e n Vo r t e i l , d a s s s i c h m i ti h n e n r e l a t i v n a t u e r 1 i c h s p r a c h l i c h e P r o b l e m f o r m u l i e r u n g e n l e i c h tund uebersieht l ieh in ein Programm uebertragen lassen:

lies Zahl

gueltig

JA ^ "HEIM

! \ P r i a z a h l ? , \• s " j

I J A \ „ ' N E I N ! M e l d u n gt x < +i r ii i i

[Gratulation! Beileid It

In ein Programm uebersetzt:

PROGRAM primzahltest;

VARzahl : INTEGER; primzahl : BOOLEAN;

BEGIN

WRITE ( 'Eine ganze Zahl zwischen 0 und 10 eingeben: ' );READLN ( zahl );

IF (zahl >- 0) AND (zahl O 10) <* Gueltigkeitskontrolle *)THEN BEGIN

primzahl :- (zahl > 0) AND (zahl < 8) AND(zahl MOD 2 <> 0) OR (zahl = 2);

IF primzahlTHEN WRITELN ( 'Ja, eine Primzahl." )ELSE WRITELN ( 'Schade, keine Primzahl.' );

ENDELSE WRITELN ( 'Junge, eine ungueltige Zahl//!' );

END.

E i n e G u e l t i g k e i t s k o n t r o l l e w i e o b e nP r o fi t e c h n i k e n , d i e i h r e u c h m i t d e r

g e h o e r t a u c hZ e i t a n e i g n e n

z L i d e nso 11t et.

Immer, wenn Werte e inzugeben s ind, und s ie in e inem best immtenBere ich l iegen so l len, kann man e ine so lche Kont ro l le anhaengen,dami t e ine fo lgende Berechnungsrou t ine n ie au f ungue l t i ge Wer teaufbaut : z .B. ents tehen Div is ionen durch 0 .

54

Page 61: Pascal - Eine kinderleichte Einführung

S o j e t z t d a s von dem wi r gesprochen haben.

E s s i n d d i e s n a e m l i c h d i e S y n t a x d i a g r a m m eLISW. s i e w e r d e n d i e l e t z t e n K l a r h e i t e n b e s e i t i g e n :

aultiplikationsoperator

... >.V V V V VI I I I I

It, (/ | l DIV I I HOD 1 i AND )

additionsoperator:

- > - T- - > — 7 — > "V Vi i

' + .y ) « > ;

f u e r ausdruck

Vergleichsoperator (nicht ganz voilstaendig):

1 ♦ >

vorzeichenlose konstante:

—>—-—>-

V

I =

VI

t/ V

>--- :-«>—r~>-i Ii i

V V

■>-

N /* I <>. { > \ I>= )f < M <=)J

-—>—+—>- ->—+-->—+-->-

t f—>--7—! vorzeichenlose zahl !—7

j + 4 jV + + A+—! konstantennaie '—+. + + jj t + jt — ! s t r i n g i — +

+ i

faktor (unvollstaendig):+ 1

— > — 7 ! v a r i a b l e ! 7 -! + 1 !V + 1 a*—! vorzeichenlose konstante i—+j + * j■ t + j+ '(">-! ausdruck !---')% +J t i J: „ „ * + !+-n NOT >-->—-! faktor ! >-—+

+ +

tern:+ +

■>-! faktor i-+ +

+ + + +-i faktor !-<-! nultiplika-+ + J tionsopera'

I tor+

/

einfacher ausdruck;

->-r—>™V

t 1->---! tera !-

i +

ausdruck:+ 1

—>—* einfacher ausdruck !-+ 1

> . .i + + i v

—<—J tera !—<—! additionsoperator I+ + + +

. . > T .V + + + 1 A-—>—! Vergleichsoperator !—>—! einfacher ausdruck i

bedingung:

ist ein ausdruck, dessen Resultat von Typ BOOLEAN ist

Page 62: Pascal - Eine kinderleichte Einführung

3a 8« Von den Charak te rn unseres Compute rs

N e i n , b i t t e v e r s t e h t d i e U e b e r s c h r i f t n i c h t f a l s c h ; n a t u e r l i c hh a t d e r C o m p u t e r k e i n e n C h a r a k t e r . E r i s t n i c h t m a l m e n s c h e n -a e h n l i c h ( a u s s e r d e m m u e s s t e e s " C h a r a k t e r e n " h e i s s e n ) .

U n d d o c h . . . c h a r a c t e r h a t e r . A c h t e t j e t z t a u f d e n U n t e r s c h i e di n d e r S c h r e i b w e i s e : c h a r a c t e r u n d C h a r a k t e r .

W i r m e i n e n e r s t e r e . I n s o f e r n w a r d i e U e b e r s c h r i f t g e m o g e l t( a b e r g a r n i c h t s c h l e c h t , g e l l ? ) .

D a s W o r t " c h a r a c t e r " b e d e u t e t n a e m l i c h B u c h s t a b e o d e r Z e i c h e n ,w e l c h e e s i n P A S C A L j a g i b t . W i r e r i n n e r n n u r a n d i e W R I T E -A n w e i s u n g , z . B . W R I T E ( ' A ' ) s c h r e i b t e i n e n B u c h s t a b e n( c h a r a c t e r ) a u f d e n S c h i r m .

G e n a u s o s c h o e n w a e r e e s a b e r , k o e n n t e m a n a u c h e i n z e l n eB u c h s t a b e n v o n d e r Ta s t a t u r e i n l e s e n w i e Z a h l e n .

U r n d a s z u b e w e r k s t e l l i g e n , m u e s s e n w i r e i n e n n e u e ne i n f u e h r e n : C H A R ( e b e n d i e A b k u e r z u n g v o n c h a r a c t e r ) .

VAR

Ty p

buchstabe : CHAR;

v e r e i n b a r t e i n e V a r i a b l e v o m T y p C H A R . S i e k a n n n u r e i n e ne i n z i g e n B u c h s t a b e n a u f n e h m e n , z . B . A o d e r B o d e r * o d e r ) o d e r9 o d e r V . o d e r 0 . I h r s e h t s c h o n , n i c h t n u r B u c h s t a b e n , s o n d e r na u c h S o n d e r z e i c h e n u n d Z i f f e r n , u m g e n a u z u s e i n . D . h . a l l e Z e ic h e n , d i e d u r c h d a s D r u e c k e n e i n e r T a s t e a u f d e r T a s t a t u r e r z e u g tw e r d e n k o e n n e n .

I s t j a k l a r , d a s s m a n e i n e r C H ^ fi - V a r i a b l e n a u c h e i n e n W e r t i mP r o g r a m m z u w e i s e n d a r f :

b u c h s t a b e : = ' A ' ; o d e r b u c h s t a b e : = ' 0 ' ;

R E A D L N ( b u c h s t a b e ) ; f u n k t i o n i e r t a b e r a u c h .

B e i d e r Z u w e i s u n g m u s s d a s Z e i c h e n w i e d e r i n H o c h k o r n r n a t ae i n g e s c h l o s s e n s e i n ! i i i

M e r k e : b u c h s t a b e : - ' A B ' ;Z e i c h e n i s t i n d e r Z u w e i s u n g e r l a u b tVa r i a b l e n i s t e b e n z i e m l i c h k l e i n :

i s t f a l s c h ! N u r E I ND e r K a s t e n e i n e r C H A R -

$iehske,das

nicht mehrhinein.

5fi

Page 63: Pascal - Eine kinderleichte Einführung

E i n l e t z t e r H i n w e i s g i l t e i n e m o f t n i c h t s o g e n a u b e a c h t e t e nUnterschied zwischen '0 ' und 0.

'0' ist ein Zeichen (Buchstabe), mit dem NICHT gerechnet werdenkann. Mit der Zahl 0 dagegen kann man rechnen. Daraus folgt aberauch dies:

buchstabe := '9';

buchstabe :- 5;

i s t k o r r e k t u n d e r l a u b t ,

aber n icht , da man versucht e inerCHAR -Variable einen JN7£G£ß-Wertzuzuweisen. Geht n icht !

I n d i e s e m Z u s a m m e n h a n g e r i n n e r n w i r a n d i e n o t w e n d i g eUebereinstimmung von Typen in Zuweisungen und Ausdruecken.

VARch ; CHAR; i : INTEGER;

c h : = ' 9 ' ;

i : - 3 ;

i :■=■ i # 12 - ch;

vom Typ INTF&ER

^0 vom Typ CHARoh, oh, oh, das geht nicht/Die Typen stimmen nicht ueberein,

Das neue Syntaxdiagramm fuer TYP:

typ (leider iauer noch unvollstaendig):

-> - I INTEGER r >V " , ~ " _ " ' A+—i ' rea l V- t

+--/8D0lEANr-+. v ■I . I

+---''CHAR V-+

S o o o , d a m i t k e n n t i h r A L L E v o r d e fi n i e r t e n T y p e n i n P A S C A L .D a s s i n d s c h o n e i n e g a n z e M e n g e . Z u r B e l o h n u n g e i n B e i s p i e l P r ogramm:

Page 64: Pascal - Eine kinderleichte Einführung

PROGRAM wandeln;(*# wandelt eingegebene Kleinbuchstaben in Grossbuchstaben #)

VARc h : C H A R ;grossch : INTEGER;

BEGIN

WRITE ( 'Bitte einen Buchstaben eingeben: ' );READLN ( ch );

WRITELN;

IF (ch >= 'a ' ) AND (ch <= 'z ' )THEN BEGIN

grossch := ORD ( ch ) - 32;

WRITELN ( 'Der zugehoerige grosse Buchstabe:',CHR ( grossch ) :3 );

ENDELSE WRITELN ( ' > Es war kein kleiner Buchstabe.' );

END.

T j a a a , n i c h t s c h l e c h t , H e r r S p e c h t . E i n g e p f e f f e r t e s B e i s p i e l ,aus dem man eine Menge lernen kann.

Vorausgesch ick t se i , dass a l le Ze ichen, d ie der Rechner kennt ,durchnumer ie r t s ind :

^r Zeichen+ t

- . / 0 1 243 44 45 46 47 48 49 50

X Y Z a b c88 89 90 97 98 99

r m O 7 * f a w * H C f C > r * *

5 6 5 7 5 8 5 9 6 5 6 6 6 7

• - x y z ■ -■ " z u g e h ö r i g e1 2 0 1 2 1 1 2 2 „ 0 ä Q

Dies war ein k le iner Auszug aus dem character set ( to l les Wort ,bedeu te t : Menge a l l e r Ze ichen des Compute rs ) . Me is t i s t e r demASCI I nach verseh luesse i t . ASCI I=Amer ican Standar t Code fo r Info rmat ion In te rchange (wer ASCI I -Code sag t , ha t i r gendwas n i ch tverstanden -mal das C in ASCII anschauen-).

W e n n d a s s o i s t ( s t i m m t e i g e n t l i c h i m m e r ) , d a n n s i n d a l l eZ i f f e r n u n d d i e G r o s s - Z K l e i n b u c h s t a b e n a u f s t e i g e n d d u r c h n u mm e r i e r t ( s i e h e o b e n ) . ' A ' h a t d i e O r d n u n g s z a h l 6 5 , ' a ' d i e O r dnungszahl 97 usw.

Die Ordnungszah len gehen von 0 b is 255, n ich t we i te r ! D.h . esgibt nur 256 verschiedene Zeichen (Buchstaben).

Aus diesem Grunde ist es auch erlaubt zu schreiben:

IF (ch >= 'a ' ) AND (ch <= 'z>)

I n d i e s e r / ^ - A n w e i s u n g p r u e f t d e r R e c h n e r , o b d i e O r d n u n g s z a h ld e s B u c h s t a b e n i n d e r V a r i a b l e n c h g r o e s s e r o d e r g l e i c h d e rO r d n u n g s z a h l v o n ' a ' ( 9 7 ) b z w . k l e i n e r o d e r g l e i c h d e r v o n ' z '( 1 2 2 ) i s t . D e r 7 " W £ W - Z w e i g o b i q e r A n w e i s u n g w i r d a l s o n u r a u s g e -

5 8

Page 65: Pascal - Eine kinderleichte Einführung

f u e h r t , w e n n d e r B u c h s t a b e i n c h e i n K l e i n b u c h s t a b e i s t , d . h .z w i s c h e n ' a ' u n d ' z ' l i e g t ! M e r k e : ' z ' h a t e i n e h o e h e r eO r d n u n g s z a h l a l s ' a ' !

U m a b e r m i t d i e s e n O r d n u n g s z a h l e n a u c h a r b e i t e n z u k o e n n e n ,s i n d z w e i n e u e F u n k t i o n e n z u l e r n e n :

ORD ( ch ) ch muss e ine CHAR-Var iable sein.Die Funktion liefert die Ordnungszahl des Zeichens in ch, also einenINTEGER-Wert.

O R D ( ' A > ) e r g i b t 6 5 .

C H R ( i n t ) i n t i s t e i n A u s d r u c k , d e r e i n e nINTEGER-Wert als Resultat hat. Dessen Groesse sollte zwischen 0 u. 255liegen.Das Ergebnis von CHR ist ein Wertvom Typ CHAR.

C H R ( 6 5 ) e r g i b t ' A ' .

Mit diesem Wissen ausgestattet schaut euch bit te noch einmal dasList ing des Programms wandeln an. Dort wurden ja CHR und ORDexemp la r i sch e ingese tz t . D ie Ta tsache , dass d ie K le inbuchs tabena u f d i e G r o s s b u c h s t a b e n f o l g e n , w u r d e d o r t g e n u t z t , u m e i n eUmrechnung zu verwirkl ichen.

Z u m S c h l u s s n o c h d i e M e t h o d e , w i e i h r h e r a u s fi n d e n k o e n n t ,w e l c h e l u s t i g e n O r d n u n g s z a h l e n z u d e n Ta s t e n e u r e s R e c h n e r sgehoeren:

PROGRAM Ordnungszahlen;

VARch ; CHAR; (* wenn im Programm nur eine wichtige

CHAR-Variable verwendet wird, so nenntman sie sehr oft ch od. c #)

BEGIN

W R I T E ( ' Ta s t e d r u e c k e n : ' ) ; R E A D ( K B D , c h ) ;WRITELN;

WRITELN ( 'Ordnungszahl dazu: ', ORD ( ch ):3 );

END.

Als kleines Bonbon haben wir hier noch die Anweisung eingebaut,we lche es euch gesta t te t , e in Ze ichen in e ine Var iab len vorn TypCHAR einzulesen, OHNE die "Return" oder "Enter" oder "CR" Tastebetaet igen zu muessen. Das gewuenschte Ze ichen ersche in t a l le rdings NICHT auf dem Schirm. Entscheident ist, dass READ verwendetw i r d , u n d d a s s i n d e n K l a m m e r n z u e r s t s t e h t : K B D , u n d d a n ndie Variable (.KBD bedeutet KeyBoarD oder Tastatur).

WICHTIG: Das geht nur in TURBO-PASCAL so! ! ! Sol l te t ihr e ineandere PASCAL-Vers ion haben , so seh t im Handbuch nach , ode rschreibt einfach wieder READLN ( ch ).

59

Page 66: Pascal - Eine kinderleichte Einführung

*3 Q EJ:jwa^._Cpm£u^ejiH^aJ^a_mee.oder

Wie binde ich

E i n A r g u m e n t f u e r d i e Ve r w e n d u n g v o n C o m p u t e r n s o l l s e i n ,m u n k e l t m a n , d a s s s i e g l e i c h b l e i b e n d e Ta e t i g k e i t e n o h n eErmuedungserscheinungen immer und immer wieder mit wachsenderFreude ausfuehren koennen.

Bisher haben wir davon aber noch n icht a l lzuv ie l gesehen, dennu n s e r R e c h n e r l e g t e s i c h n a c h e i n m a l i g e r D u r c h f u e h r u n g e i n e sProgrammes sofort wieder auf die faule Haut. . Diesen Missstand zub e h e b e n , i s t d a s e r k l a e r t e Z i e l d i e s e s u n d e i n i g e r f o l g e n d e rK a p i t e l .

Kaum zu glauben, dass schone i n e g r o s s e R o l l e s p i e l e n .

im Volksmund Schlei fen (engl, loop)Eine ' S c h l e i f e ' bedeutet e i n e

bes t immte Tae t iqke i t so l l w iederho l t ausqe fuehr t werden !B e i s p i e l :

Der Krug geht solange zum Brunnen, bis er bricht..

U rn d ieses P rob l e rn au fzua rbe i ten , e rs t e inma l e ineKorrektur: da ein Krug nicht gehen kann,Peter-Uwe laufen.

A l so :

l o g i s c h elassen wir Freund Claus-

C l a u s - P e t e r - U w e g e h t s o l a n g e z u m B r u n n e n , b i s e r b r i c h t .

U e b e r t r a g e n i n e i n S t r u k t o g r a r n r n e r g i b t s i c h :

W I E D E R H O L E !i

i +! CPU geht zu» Drunnen I+ i

i

B I S C P U b r i c h t i

D e r e i n g e r u e c k t e B l o c k - d i e e i g e n t l i c h e H a n d l u n g , w e l c h e i m m e rw i e d e r a u s g e f u e h r t w e r d e n s o l l - i s t i n e i n e n g r o e s s e r e n B l o c ke i n q e s c h l o s s e n , welcher mit NIEDERHOLE beginnt u n d m i t e i n e rBed ingung endet (Abbruchbed ingunq) , we lche uns sag t , w ie langewiederho l t werden so l l ; oben eben so lange , b i s de r gu te C laus-Peter-Uwe sich uebergeben hat.

Fuer phantasielose Gemueter bereiten wir einmal das Lesen einesBuches als Wiederholungsanweisung auf:

60

Page 67: Pascal - Eine kinderleichte Einführung

WIEDERHOLE

eine Seite lesen

uablaettern

v

BIS rueckvaertige Uuschlag-seite erreicht

fldorm prujen, ob die^edinOuno SchonerföHt St.

"+ <£- erst diese. Ariwßisuno*" ausführe"

- ; ^dann diese, ausführen

//

I m S t r u k t o r g r a m m v e r w e n d e n w i r N I E D E R H O L E u n d B I S , u m d i eg r o s s e n T a t e n a b z u g r e n z e n , w e l c h e z u r o e f t e r e n A u s f u e h r u n gans tehen , i n PASCAL we rden w i r w iede r eng l i s ch und sagen :

REPEAT und UNTIL

D a z u e r s t m a l fl u g s d a s S y n t a x d i a g r a m m , d a m i t g a r k e i n e U n k l a rh e i t e n a u f t a u c h e n :

repeat-anweisung:

/Weisungen-Solcinfle. QusfiihrerLb'S BediriQuriq 7w£ (.'efert,

--->-«/ REPEAT *-->---—! anweisung !--;—>--{ UNTIL T->—! bedingung !—>v I * + k v v y + +

-<-{ , t-

D a r a u s g e h t d e u t l i c h s t h e r v o r : a l l e s , w a s w i e d e r h o l t a u s g eführ t werden so l l (d ie Anweisungen) , s teht zwischen den PASCAL-Symbolen REPEAT und UNTIL. Die wiederholte Ausfuehrung dauert solange , b i s d ie Bed ingung h in te r UNTIL TRUE l i e fe r t . Zum Au fbauvon Bedingungen siehe auch die JF-Anweisung.

T j a ,Anweisung.

d a s w a r e i g e n t l i c h s c h o n a l l e s . OkMm mm, a b e r n a g u t ; v i e l l e i c h t

a l l e s z u rdoch noch

REPEAT-e i n i g e

K le in igke i ten zur Veranschau l i chung .

Z u e r s t m a l s c h r e i b e n w i r e i n s c h o e n e r e s P r o g r a m m , u r n d i eO r d n u n g s z a h l e n d e r Z e i c h e n i m c h a r a c t e r s e t u n s e r e s R e c h n e r sherauszufinden .

61

Page 68: Pascal - Eine kinderleichte Einführung

Ueberschrift ausaeben

NIEDERHOLE

ein Zeichen einlesen

i \ \\

JA \

Ende-Zeichen ? -

NEIN

Ordnungszahl ausgeben !

BIS Ende-Zeichen eingegeben wurde !t 1

J e t z t m u s s m a n n i c h t m e h r f u e r j e d e s Z e i c h e n d a s P r o g r a m m n e us t a r t e n . E i n e r i i i i i e s e n V e r b e s s e r u n g !

PROGRAM nochmalwandeln;

' E ' ;CONST

endezeichen (# wenn dieses zeichen eingegebenwird, hoert das programm auf #)

VARch i

BEGIN

CHAR;

WRITELN ( 'Ermittlung der ORD-Zahlen der eingegebenen'Zeichen von der Tastatur.' );

WRITELN;

REPEAT

WRITE ( 'Zeichen eingeben (Programm beenden mit ',endezeichen, ') : ' ) ;

READ ( KBD, ch ); WRITELN;

IF ch <> endezeichenTHEN WRITELN ( 'ORD-Zah l dazu : ' , ORD ( ch ) :3 ) ;

WRITELN;

UNTIL ch - endezeichen;

END.

S e l b s t e r k l a e r e n d , n i c h t w a h r ? E r w a e h n e n s w e r t i s t j e d o c h d i eTe c h n i k , w i e s c h o n i n d e r S c h l e i f e g e p r u e f t w i r d , o b b e s t i m m t eAnwe isungen ueberhaupt noch ausge fuehr t werden muessen , odergleich zum Schleifenende gegangen werden soll.

62

Page 69: Pascal - Eine kinderleichte Einführung

Z u r E r b a u u n g a l l e r M a t h e m a t i k f r e u n d e m o e c h t e n w i r u n s a n d i e s e rS t e l l e e r l a u b e n , e i n w e n i g z u r E r l e i c h t e r u n g d e r B e r e c h n u n g v o nF o l g e n u n d F ^ e i h e n b e i z u t r a g e n . M a n c h e m m a g d a s e i n e g e w i s s eE r l e i c h t e r u n g b r i n g e n .

P r o b l e m : D i e B e r e c h n u n g d e r G l i e d e r e i n e r F o l g e s o w i e d e rS u m m e a l l d i e s e r G l i e d e r . E s m u s s d i e Z a h l d e r G l i e d e r u n d d a se r s t e G l i e d , s o w i e d i e D i f f e r e n z z w e i e r G l i e d e r a n g e g e b e n w e r d e n .

NIEDERHOLE

+einlesen der Gliederzahl

I einlesen des 1. Gliedes4

I einlesen der Differenz+! Sumse := 0; gliednunaer := t;+! WIEDERHOLE

Sunae := Sumse + Glied

i i

i i

! Glied := Glied + Differenz+

qliednunoer := gliednuaaer♦ 1

+

! BIS gliednunaer >= Gliederzahl

i Fragen, ob noch eine Folge be-i rechnet werden soll4

BIS keine Folge sehr berechnen

Am beachtenswertesten an diesem Beispiele rzwungen w i rd , e ine gue l t i ge G l i ede rzah lr&n, d ie INIXIALjr^ IERÜ.NG, d.h. Vorbeiegun( S u m m e u s w. ) v o r E i n t r i t t i n d i e S c h l e i f e ,sch ieb t . A ls l e t z tes ve r inner1 iche man gu t ,s e r e n A b f r a g e s c h l e i f e , o b n o c h e i n m a l d e rwuenscht wi rd . E ine sehr nuetz l iehe SacheL ICHKEIT s teh t an ( fas t ) e rs te r S te l le be ija jeder sehen koennen, dass ihr auch dieProgrammierung beherrscht.

i s t z u m e i n e n , w i eeinzugeben, zum ande-g, verschiedener Werte

dami t S innvo l les ge-d ie Technik der aeus-

F ' r o g r a m r n d u r c h l a u f q e -denn BENUTZERFREUND-

u n s . S c h l i e s s l i c h s o l ll e t z t e n K n i f f e i n d e r

63

Page 70: Pascal - Eine kinderleichte Einführung

PROGRAM folgensumme;

VARgliednummer,gl iederzahl : INTEGER;

summe, glied,d i f f e r e n z : R E A L ;

n o c h m a l : C H A R ;

BEGIN

WRITELN ( 'Berechnung der Glieder und Summe einer Folge.' );

REPEAT

WRITELN;

(* Einlesen wichtiger Daten fuer die Folge *)

REPEATWRITE ( 'Gliederzahl der Folge (muss > 0 sein): ' );READLN ( gliederzahl );

UNTIL gl iederzahl > 0;

WRITE ( 'Erstes Glied: ' ); READLN ( glied );WRITE ( 'Differenz zwischen zwei Gliedern: ' ); READLN ( differenz );

(# Initialisierung wichtiger Daten fuer die Berechnung *)

WRITELN;W R I T E L N ( ' G l i e d n u m m e r : G l i e d ; S u m m e : ' ) ;

O Summe und Glieder berechnen und ausgeben #)

summe := 0; gliednummer := 1;

REPEATWRITE ( gliednummer:7, glied:18:3 );

summe := summe + gl ied;

WRITELN ( summe:13:3 );

g l ied : - g l ied * d i f ferenz;

gliednummer ;= gliednummer * 1;UNTIL gliednummer >= gliederzahl;

WRITELN;

C# Abfrage, ob noch eine Folge berechnet werden soll #)

WRITE ( 'Keine Folge mehr berechnen, dann "N" eingeben: ' );READ ( KBD, nochmal ); WRITELN;

UNTIL (nochmal - 'N') OR (nochmal - '»');

END.

6 4

Page 71: Pascal - Eine kinderleichte Einführung

D e r a u f m e r k s a m e L e s e r w i r d s i c h e r s c h o n d i e A u f g a b e v o ng l i e d n u m m e r e r k a n n t u n d a l s w i c h t i g e i n g e s t u f t h a b e n . D i e s eVar iab le naeml i ch d ien t a l s ZAEHLVARlÄBLE. S ie zaeh l t , w ie o f td ie Sch le i fe schon durch lau fen wurde , und mi t i h r w i rd geprue f t ,ob e ine we i te re Abarbe i tung der Anweisungen in der Sch le i fe vonNoeten is t .

N ich t ex t ra e rk lae r t haben w i r d ie moeg l i che Schach te lung vonfl f P f t f r - A n w e i s u n g e n , a b e r, . . . n a j a , e i n B e i s p i e l s a g t e b e n d o c hmehr als 1000 (in Worten: tausend) Worte.

M i t d e r E i n f u e h r u n g d e r S c h l e i f e n h a b t i h r j e t z t d i e e r s t e nh o e h e r e n W e i h e n z u m p a s s a b l e n , n e i n , g u t e n P r o g r a m m i e r e rempfangen. Wir erwaehnten es schon einmal.

Diese Wieder hol ungsan Weisungen heben naemlich F'ASCAL von z.E<-B A S I C ( o h , w e l c h F l u c h l a s t e t a u f d i e s e m W o r t ) a b u n dermoeg l ichen e inem jeden das Schre iben s t ruk tu r ie r te r ProgrammeOHNE das verpoehnte GOTO (wer's nicht kennt, hat Qlueck gehabt).

Page 72: Pascal - Eine kinderleichte Einführung

3 . 1 0 . D a s , , E n d e a m A n f a n g

H a a r s p a l t e r u n t e r e u c h , o d e r d i e e w i g e n A n d e r s d e n k e r , h a b e ns i c h e r l i c h s c h o n d i e e n t s c h e i d e n d e L u e c k e i n C l a u s - P e t e r - U w e sG a n g z u m B r u n n e n g e f u n d e n .

W a s n a e m l i c h , w e n n d e m a r m e n K e r l s c h o n a e u s s e r s t u e b e l i s t ,b e v o r e r s e i n e n e r s t e n W e g z u m B r u n n e n a n t r i t t , u n d e r s i c hd e s h a l b l i e b e r g l e i c h a u f d a s A b o r t b e g i b t ?

C'est une problem tres defficile.

D a s g i l t j e d o c h n u r f u e r d e n d e s F ' A S C A L n o c h n i c h t g a n zM a e c h t i g e n . J e n e r w u e r d e v i e l l e i c h t v o r s c h l a g e n , f o l g e n d e s z ut u n : . . . A b e r h a l t , w i r w i s s e n n i c h t , w a s d i e s e r f r e u n d l i c h eP r o g r a m m i e r e r e m p f i e h l t , w i r e m p f e h l e n d i e W H 7 L £ - S c h l e i f e . Z . B .i n f o l g e n d e r W e i s e :

4 4

I SOLANGE Claus-Peter-Uwe noch! n i c h t u e b e l i s tI TUEj 4 +

I I C l a u s - P e t e r - U w e !! I g e h t z u n B r u n n e n I

4 4

I m D e u s c h e n S O L A N G E u n d T U E , i m E n g l i s c h e n W H I L E u n d D O .G a n z e i n f a c h . D a s f u n k t i o n i e r t q u a s i s o , a l s h a e t t e n w i r e i n e I F —A b f r a g e v o r e i n e R E P E A T S c h l e i f e g e s t e l l t ; n u r i s t e s m i t W H I L Ev i e l e i n f a c h e r . F o l g e n d e P r o g r a r n r n a u s s c h n i t t e d a h e r g l e i c h b e d e ut e n d :

I F b e d i n g u n g e r f u e l l t W H I L E b e d i n g u n g e r f u e l l tT H E N R E P E A T D O . . .

UNTIL NOT bedingung erfuellt

D i e A n w e i s u n g e n i m e i n g e r u e c k t e n B l o c k - s i e s o l l e n w i e d e r h o l ta u s g e f u e h r t w e r d e n - d u r c h l a e u f t d e r R e c h n e r s o o f t d i e B e d i n g u n gh i n t e r W H I L E e r f u e l l t i s t , d . h . s o l a n g e s i e T R U E l i e f e r t . A l s on i c h t B I S d i e B e d i n g u n g e r f u e l l t i s t , s o n d e r n S O L A N G E . E i nw i c h t i g e r U n t e r s c h i e d !

L i e f e r t d i e B e d i n g u n g n i e T R U E , n o c h n i c h t e i n m a l b e v o r i n d i eS c h l e i f e g e g a n g e n w i r d , s o w e r d e n d i e S c h l e i f e n a n w e i s u n g e n n i ea u s g e f u e h r t . M a n s a g t a u c h , d i e W W J t f - S c h l e i f e s e i e i n ea b w e i s e n d e S c h l e i f e . I m G e g e n s a t z d a z u w e r d e n d i e B e f e h l ei n n e r h a l b e i n e r / ? £ P £ # r - K o n s t r u k t i o n m i n d e s t e n s e i n m a la b g e a r b e i t e t .

J e d o c h j e t z t e r s t d a s S y n t a x d i a g r a m m :Solomoe./ wie rjec/'nqunQ 7"RUb" ist AnwelSunQ ausführen

uhile-anweisung;^ — V H 4 _ ^ 4 4

•>—VHHILE,—>—! bedingung I—>-—DO >—! anweisung !—>

6 6

Page 73: Pascal - Eine kinderleichte Einführung

"Moooornen t ma l , Jungs ! Womi t kennse iA n w e i s u n g s f o l g e , d i e I N ö & r S c h l e i f eg e s c h i e h t d a s d u r c h U N T I LM i s t b u c h , o d e r i h r r u e c k t ' m a l ' r a u s m i t d e r

hne ich denn das Ende ders t e h e n s o l l . B e i R E P E AT

, a b e r h i e r . . . ? E n t w e d e r i s t d a s e i nSprac :h e. Hmrnm.

Bravo s e h r g u t ,u e b e r d i e s B u c h . . . ,Muehe. Ehrl ich!

N u n g u t , d i e F r a gEnde der zu wiederhol

G a n z e i n f a c h ; e n tausgefuehrt werden, dputer weiss, dass nurfuehr t werden so l l ;BEGIN u. END (d.h. wiid e m F a l l w e r d e n a l lwaehrend eines Schlei

B e i s p i e l e :

e i n pfi f figes Ke r l chen . Abe r d i e Bemerkungi s t d a s g e r e c h t ? W i r g e b e n u n s w i r k l i c h

e war schon berech t ig t . Wieenden Anweisungsfolge?w e d e r , i n d e r S c h l e i f e s o l lann schre iben w i r ihn h in te r

diese eine Anweisung in derod er, be i mehreren, k lammern wi r s ie durch

machen daraus eine Verbundanweisung). Ine Anweisungen zwischen dem BEGIN u. ENDfendu rch lau f s abgea rbe i t e t .

me lden w i r das

n u r e i n B e f e h lDO und der Corn-Sch le i fe ausge-

WHILE zaehler < 5DO zaehler := zaehler * 1;

nur eine Anue>sum m <ier Schleife

WHILE (zaehler < 10) AND (summe < 100)D O B E G I N . , , o _ . .

s u m m e : = s u m m e + x ; _ ^ « ™ < h e r , ■ ^ / " ^ " f 7zaehler := zaehler + 1; ^ Müssen durch Bt&ltV und

E N D ; E N D o e k l a m m e r t £ & i n .

N a t u e r l i c h , h i e r , w i e a u c h s o n s t u e b e r a l l , m a c h t a u c h n u rUebung einen Meister. Deshalb:

Annahme Ueb: Unser PASCAL besitzt nicht die Operatoren DIV undMOD, t ro t zdem bes tehen w i r da rau f , den ganzzah l i gen Res t e ine rDiv is ion zu er fahren. Ok, dann mal aufgepasst . . .

4 4! Rest := Divident; Zaehler := 1 I4 4

SOLANGE Rest > Divisor !T U E !

4 4I Rest := Rest - Divisor !+ 4! Zaehler := Zaehler * 1 !

4

Das dazugehoerige vol 1staendige Programm:

67

Page 74: Pascal - Eine kinderleichte Einführung

PROGRAM simulation;

VARdivident, divisor, quotient, rest ; INTEGER;

BEGIN

WRITELN ( 'Berechnung von a DIV b und a MOD b...' );WRITELN;

REPEATWRITE ( 'Gib a ein (>= 0): ' ); READLN ( divident );WRITE ( 'Gib b ein (>= 0): ' ); READLN ( divisor );WRITELN;

UNTIL (divident >- 0) AND (divisor >= 0);

quo t ien t : - 0 ; res t : - d i v iden t ;

WHILE rest > divisorDO BEGIN

r e s t : = r e s t - d i v i s o r ;

quotient := quotient + 1;END;

WRITELN ( divident:4, ' DIV ', divisor: 4, ' = ', quotients );

WRITELN ( 'MOD ':9, '= ':7, rest:4 );

END.

Aus der Formul ierung der Bedingung folgt:

9 M O D 7 = 2 u n d 1 2 M O D 1 2 = 0 u n d 6 M O D 8 - 6

u n d

9 D I V 7 = 1 u n d 1 2 D I V 1 2 - 1 u n d 6 D I V 8 = 0

Es ha t a l so a l l es se ine R i ch t i gke i t !

Zur Ver inner l ichung nocheinmal d ie Struktogramme fuer beide:

NIEDERHOLE

! dies tun+! das tun+

BIS Bedingungerfuellt

4 4SOLANGE Dedinqung I

erfueilt IT U E !

4 4! d i e s :4 4! d a s :

4

I m n a e c h s t e n K a p i t e l m a l e t w a s f u e r d i e F e i n f u e h l i g e n u n t e re u c h . . .

68

Page 75: Pascal - Eine kinderleichte Einführung

3.11. . Programmierunq is t auch e ine , S täche der Aesthet i k !

D a s t a u n t w o h l s o m a n c h e r . A b e r w i r m e i n e n e s g e n a u s o , w i e ' sd a s t e h t u n d f u e g e n d a s K a p i t e l q u a s i a l s E n t s p a n n u n g h i e r e i n .

V i e l l e i c h t e i n k l e i n e s a b s c h r e c k e n d e s B e i s p i e l . L e i d e r m u s s a l sS u e n d e n b o c k w i e d e r B A S I C h e r h a l t e n , a u c h w e n n e v e n t u e l l n i c h ta l l e d i e s e r S p r a c h e m a e c h t i g s i n d .

10 PRINT"Divident: uiINPUTDTs?"Divisor: "iINPUTDR20 R=DT:Q.=030 IFR<-DRTHENGOT040:R=R-DR:Q=Q+liGOT03040 PRINTDT;" DIV ";DR;" = "';Q:PRINTDT;" MOD ";DR;" * ";R

Nur dem Glueckl ichen oder sehr Erfahrenen ist es verqoennt, denSinn des vorstehenden Programms schnell zu erkennen.

L a s s t e u c h j e d o c h s a g e n , d i e s e s B A S I C — L i s t i n g e n t s p r i c h t i nse ine r Funk t i on unse rem P rog ramm s imu la t i on aus dem l e t z t enK a p i t e l .

"G laub ' i ch n i ch t . Kann j a j ede r sagen . I ch e rkenn ' das n i ch t ;ist mir viel, viel zu unuebersieht 1 ich. "

So oder aehn l ich s te l len w i r uns eure Reakt ion je tz t vor, dami tw i r e i n e n A u f h a e n g e r f u e r u n s e r e f o l g e n d e n ( E r ) L a e u t e r u n g e nh a b e n . S t i m m t i h r j e d o c h n i c h t m i t d e r fi k t i v e n L e s e r m e i n u n gu e b e r e i n , s o m a c h t e i n f a c h m i t d e m n a e c h s t e n K a p i t e l w e i t e r .V i e l l e i c h t g e h t e u c h s p a e t e r n o c h e i n L i c h t a u f , w e n n i h r e u r eF r e u n d e m i t v e r k l a e r t e m K u e n s t l e r b l i c k v o r d e m R e c h n e r s i t z e nseht..

Fuer d ie , d ie we i te r m i t l esen wo l len :

V i e l l e i c h t h a b t i h r e u c h s c h o n i m m e r g e w u n d e r t , w a r u m w i runsere Programme nicht in etwa so schreiben:

program unueber sichtlich; var a,b.c. integer; beginreadln ( a, b ); c :- 0; repeat a s- a + b;c '.- c + 1; until c >- b; end.

Oooh ja , das g inge du rchaus , i s t aber sch ie r undurchdr ing l i ch ,will man ergruenden, was das Programm tut (es addiert b—mal b zua hinzu» mindestens aber 1 mal).

Ein kleine Verbesserung braechte die folgende Anordnung:

program etwasuebersichtlicher;var a,b,c: integer;beginreadln ( a, b >; c :- 0;repeata := a + b;c := c * 1;until c >- b;end.

G,9

Page 76: Pascal - Eine kinderleichte Einführung

I m m e r n o c h n i c h t o p t i m a l ( i m Ve r t r a u e n , e s g i b t s o g a r B u e c h e r ,i n d e n e n L i s t i n g s i n d i e s e m S t i l a b g e d r u c k t s i n d ) . A b e r u e b e r l e g tm a l , w a r u m d a s n i c h t s o s c h o e n i s t . D e r b e s t e L e r n e f f e k t w i r dd o c h e r z i e l t , w e n n m a n d i e N o t w e n d i g k e i t e i n e r A e n d e r u n g u n m i tt e l b a r b e g r e i f t u n d f o r d e r t .

O h n e e u c h e t w a s a u f d r u e c k e n z u w o l l e n , e r l a e u t e r n w i r ' m a l k u r zunsere Me inung .

I s t d i e V e r w o r r e n h e i t n i c h t d a r a u f z u r u e c k z u f u e h r e n , d a s s m a nn i c h t e r k e n n t , w a s z u s a m m e n g e h o e r t ' 7 ' W i l l s a g e n , e s i s t s c h w e r z us e h e n , w e l c h e B e f e h l e z u r S c h l e i f e g e h o e r e n , w o d i e s e b e g i n n t ,g a n z a l l g e m e i n , e s i s t k e i n e S T R U K T U R i r n P r o g r a m m e r s i c h t l i c h .

S t r u k t u r , e i n E i c h l a g w o r t , w e l c h e s e u c h i m V e r l a u f d i e s e rE i n f u e h r u n g i n PA S C A L s c h o n m e h r m a l s u e b e r d e n We g g e l a u f e n i s t(Struktogr amm, st r u k t ur i er t es Pr og r arnm i er en ) .

Wa s m a c h t n u n s e i n e B e l i e b h e i t a u s , d a s s e s i n a l l e r M u n d e i s t ?Ganz e in fach , da P rog ramute n i ch t nu r gesch r i eben , sondern auchg e l e s e n , d . h . v e r s t a n d e n w e r d e n s o l l e n , m u e s s e n s i e s o g e s t a l t e ts e i n , d a s s s i e j e d e r m a n n l e i c h t f a l l e n .

I n B u e c h e r n u n d l a e n g e r e n Te x t e n ( w i c h t i g b e i R e f e r a t e n ) g i b te s j a a u c h A b s a e t z e u n d U e b e r s c h r i f t e n , d i e d i e O r i e n t i e r u n g i mTe x t e r l e i c h t e r n u n d d a s V e r s t a e n d n i s f o e r d e r n s o l l e n . B e s o n d e r sW i c h t i g e s i s t s o g a r v i e l l e i c h t n o c h f a r b l i c h a b g e h o b e n .

E t w a s l a x g e s p r o c h e n s i n d P r o g r a m m e a b e r a u c h n i c h t s a n d e r e sa l s Te x t e , i n d e n e n m a n s i c h l e i c h t z u r e c h t fi n d e n k o e n n e n m u s s je v e n t u e l l , u m A e n d e r u n g e n a n z u b r i n g e n o d e r e i n f a c h n u r , u m d i eF u n k t i o n s w e i s e z u v e r s t e h e n .

A u s d i e s e m G r u n d e w i r d i n PA S C A L e i n e r e c h t s t r e n g e O r d n u n ga u f r e c h t e r h a l t e n ( d i e e s i n v i e l e n a n d e r e n P r o g r a m m i e r s p r a c h e nn i c h t g i b t ) : e s i s t e i n e K o p f z e i l e z u s c h r e i b e n , d a n n , u n d n u rd a n n f o l g t d e r V a r i a b l e n v e r e i n b a r u n g s t e i l , i n w e l c h e m w i e d e rK o n s t a n t e n v o r d e n Va r i a b l e n d e k l a r i e r t w e r d e n m u e s s e n , d a n a c he n d l i c h d e r A n w e i s u n g s t e i l , s c h o e n g e k l a m m e r t d u r c h B E G I N u n d£«0.

I m A n w e i s u n g s t e i l k a n n m a n d a n n a u c h n o c h s t r u k t u r i e r t e A n w e is u n g e n b e n u t z e n ( . R E P E AT- u . W W / t f - S c h l e i f e , J f - A n w. ) , d i e j e d e mS O F O RT d e u t l i c h m a c h e n , d a s s b e s t i m m t e B e f e h l e w i e d e r h o l t a u s g ef u e h r t w e r d e n s o l l e n o d e r n u r i n A b h a e n g i g k e i t e i n e r B e d i n g u n g .

D e r A l g o r i t h m u s , w e l c h e r a l s S t r u k t o g r a m m n o c h s o u e b e r -s i c h t l i c h w a r , k a n n d a m i t , o h n e v i e l a n K l a r h e i t z u v e r l i e r e n , i nein PASCAL—Programm Liebertragen werden.

K a n n , w o h l g e m e r k t ! G e g e n b e i s p i e l e s i n d d i e b e i d e n o b e ns t e h e n d e n L i s t i n g s .

D a k o e n n e n a u c h R E P E AT u . U N T I L a l s S c h l e i f e n b e g r e n z u n g e nn i c h t s m e h r ' r a u s r e i s s e n .

Wa s f e h l t , i s t e i n e O P T I S C H E G L I E D E R U N G . Wa s f u e r e i n S c h l a gw o r t ! G e w i s s e r m a s s e n w i e d a s B i l d e n v o n A b s a e t z e n o d e r U n t e rs t r e i c h e n i n Te x t e n , s o t e i l t d i e o p t i s c h e G l i e d e r u n g e i n P r og r a m m i n z u s a m m e n g e h o e r i g e Te i l e ( z . B . S c h l e i f e n o d e r Ve r b u n d a n -w e i s u n g e n ) u n d h e b t D i n g e h e r v o r.

E i n Te i l d e r o p t i s c h e n G l i e d e r u n g i s t a u c h d a s G r o s s s c h r e i b e nv o n r e s e r v i e r t e n W o r t e n ( PA S C A L - S y r n b o l e n ) u n d d a s K l e i n s c h r e i b e nv o n s e l b s t g e w a e h l t e n N a m e n i n d e n b i s h e r i g e n L i s t i n g s .

70

Page 77: Pascal - Eine kinderleichte Einführung

PROGRAM uebersichtlich;

VARa, b, c : INTEGER;

BEGIN

READLN ( a, b );

c : - 0 ;

REPEATa := a * b;c := c + 1;

UNTIL c >- b;

END.

S t a u n t d a n i c h t d e r F a c h m a n n ? Wu n d e r t s i c h n i c h t d e r L a i e ?Einern jeden ist zumindest der Aufbau des Algor i thmus nun schnel lk l a r . D a s Ve r s t a e n d n i s d e r F u n k t i o n ( W A S t u t d a s P r o g r a m me i g e n t l i c h ) f o l g t d a n n j e d o c h r a p i d e ? e h e r j e d e n f a l l s , a l srnuess te man s ich durch e in n ich t op t i sch geg l ieder tes Programmwuehlen.

U n d , ' m a l e h r l i c h , i s t d a s L i s t i n g n i c h t v i e l s c h o e n e r, k l a r e r,unverwor rener, gewissermassen aesthet isch? Ok, v ie l le ich t w i rd esbe i so e inem M in ibe i sp ie l n i ch t deu t l i ch . Schau t man s i ch abe rProgramme von ein igen hundert Zei len (s iehe auch das lange Programm im letzten Kapitel) an, so kann man meist sagen: sieht dasL i s t i n g g u t a u s , d a n n i s t d e r A l g o r i t h m u s , b z w. d a s P r o g r a m m ,auch in Ordnung..

"Das sind viel leicht ein paar Spinner. Programme muessen schoena u s s e h e n u s w. . H a u p t s a c h e s i e l a u f e n s c h n e l l , w i e d a s L i s t i n ga u s s c h a u t i s t m i r d o c h e g a l . I c h w e i s s , w a s i n d e m P r o g r a m mv o r g e h t ! "

Traur ig , t rau r ig , wenn ih r e ine so lche Me inung hab t . Und wennn u n d e r Ta g k o m m t , a n d e m z . B . e i n L e h r e r o d e r s o n s t w e r d a sProgramm mal sehen (und verstehen) rnoechte, was dann? UnsereM e i n u n g : H o l l a n d i n N o t ! O d e r l e g t m a l e i n L i s t i n g f u e r 3 — 4Wochen beiseite und versucht dann, das ganze ohne Beschreibung zudu rchb l i cken .

G e w i s s e r m a s s e n u m u n s e r e E r n s t h a f t i g k e i t z u u n t e r s t r e i c h e n ,moechten wi r erwaehnen, dass schon andere Leute s ich ueber d iehier besprochene Problematik Gedanken gemacht haben! Zum einenHerr Wi r th , dann d ie Erfinder der St ruk togramrne und e ine MengeLeute in den USA, die schl iessl ich auch eine Norm herausgebrachthaben, nach der PASCAL—st at ement s (engl. fuer Anweisung) aufzuschre iben s ind . Fuer Spez is : : ANSI IEEüE — 797145-1978 is t d ieNorm.

Nun, immer noch Spinner? Uns l iegt fern, euch anhalten zu woll e n , g e n a u n a c h Vo r s c h r i f t d i e S t a t e m e n t s a u f z u s c h r e i b e n , a b e rlass t uns wen igs tens e in oder zwe i Anha l te geben, w ie man s ichund anderen das Leben leichter gestal ten kann (selbst fuer BASIC-Anhaenger fael l t da noch etwas ab. T ja, so sind wir: grosszuegig,l i ebenswer t usw. ) :

71

Page 78: Pascal - Eine kinderleichte Einführung

Verwendet Vanablennamert ( cjie etwas über ihreV A R ^ ^ * ^ F u n k t i o n < S e W e h

s u m m e : R E A L ;i.eersei(ßn 2uw? ^ibseben von logischen

p r i m z a h l : B O O L E A N } ^ ^ E ^ h m e n ^f ^ ~ . S " n * g «

j e f c u r ^ f c r , J d i e s e t o r t j b f e n H * n F * M r .t

Eine fefaalfcifische. Jt>rrn (alle : in etoer Spalte)1st Schon fur's huQt. Übersichtlichkeit:!(

PASCAL-Symbole groß schreibenIF primzahl

THEN BEGIN^ W R I T E ( ' . . .-/ f*7 ßfdZJ ( KBD, nochmal ); WRITELN;

ENDELSE WRITELN ( '...

{3^Qe,,UAS zu&'neim Verbund ötffer slruk kurierten r\nu&$mQgehört, so stille, etwas eingerückt werden, um die2usqmr/)eiqe.^ori(7l<eic zu verdeutlichen.

* ^L— totbellarisck 7pr7n^ R E P E A T „ * * - - " i

summe := summe + summend;zaehler := zaehler + 1;

UNTIL zaehler >- grenze;

WHILE zaehler > 0 ^rte te&r»\e. rwt ofer Übers/chUichhil: nß*Jid o b e g i n ^ / - ~ n i e a e s c h o . o l e t ,

n W R I T E L N ( ' Z a e h l e r : ' , z a e h l e r : 3 ) ;I w i m ^ r z a e h l e r : - z a e h l e r - 1 ;u n d ^^ £«D;wmer wieder: Einrücken vo» ^nk/eisungsLeHe^

Jooo, das ist wahrscheinl ich erstmal genug. Ihr bekommt mit derZeit auch einen eigenen Sti l , was das Formatieren von Anweisungena n g e h t . D i e a u f m e r k s a m e L e k t u e r e d i e s e s B u c h e s s o w i e v o nProgrammen, d ie ih r i rgendwo abgedruck t seh t , w i rd dazu be i t ragen.

A u f j e d e n F a l l w e r d e t i h r i n Z u k u n f t S t r u k t o g r a r n m e b e s s e rverstehen und l ieben lernen, da in ihnen schon durch die Wahl derKastenforrn (und -aufbau) eine Uebersicht l ichkei t erzwungen wird.

Unser Wunsch war es , e ine k le ine Bewuss tse inserwe i te rung be ieuch zu erwirken, eure Augen fuer d ie Problemat ik zu oeffnen undeuch v ie l le icht etwas zu entspannen.

G l e i c h g e h t ' s w e i t e r m i t S c h l e i f e n . . .

72

Page 79: Pascal - Eine kinderleichte Einführung

O 1 o Da capo

N a c h u n s e r e m k l e i n e n A u s fl u g , j e t z t w i e d e r h a n d f e s t e s PA S C A L .

Zum langsamen War rnwerden e in S impe lp rog ramm-Ausschn i t t f ue r d ieG r u n d s c h u l e . D e r R e c h n e r s o l l m a l s o r i c h t i g s c h o e n z a e h l e n . Vo n1 b is zu e iner e ingegebenen Zah l ( n ) .

z a e h l e r ; - 0 ;

WHILE zaehler <- nDO BEGIN

WRITE ( zaehler:5 );zaehler := zaehler + 1;

END;

Zum Verg le i ch e in ande res F ragmen t :

WHILE buchstabe <> ■'E'DO READLN ( buchstabe );

P r e i s f r a g e : w o l i e g t d e r U n t e r s c h i e d ? G a n z , g a n z e i n f a c h ! I nd e r e r s t e n K o n s t r u k t i o n w i r d d i e S c h l e i f e n - r n a l d u r c h l a u f e n ( w e n nm a n z a e h l e r v o r h e r a u f 1 g e s e t z t h a t ) , d . h . e i n e r V O R H E Rf e s t s t e h e n d e n A n z a h l e n t s p r e c h e n d o f t . B e i d e r z w e i t e n W i e d e rh o l u n g s a n w e i s u n g w i r d s o l a n g e e i n B u c h s t a b e e i n g e l e s e n , b i s " E "e i n g e g e b e n w i r d ; v i e l l e i c h t S r n a l , o d e r S r n a l o d e r l O O O r n a l . W i rwissen es VORHER nicht!

D a m i t a b e r n i c h t e i n e W H I L E - o d e r R E P E AT- f r n W e i s u n g b e m u e h tw e r d e n m u s s , w e n n d i e A n z a h l d e r D u r c h l a e u f e v o r h e r b e k a n n t i s t ,u n d u m a u c h d e r N A S A e i n e e l e g a n t e L o e s u n g f u e r i h r C o u n t - D o w nP r o b l e m z uSchoepfungvo rzusehen .

g e b e n ( s p a e t e r e t w a s d a z u ) , s a hv o n PA S C A L g e n o e t i g t , n o c h e i n e

m a n s i c h b e i d e rSchle i fenanWeisung

FOR zaehler :- / TO nDO WRITE ( zaehler:5 );

t u t d a n n g e n a u d a s , w a s o b e n d i e e r s t e W H 7 Z . £ - K o n s t r u k t i o nl e i s t e t . J e t z t n o c h s c h n e l l d a s S y n t a x d i a g r a m m :

for-anveisung:

->--(for)-4 4 _ _-! variable !-->-■* : = /•

4 4-I ausdruck !->-

-DOHNTO)-

+ 4■>-! ausdruck !-

4 4

^ 4 4■)-- DO /->--! anweisung I— >

+ 4

Page 80: Pascal - Eine kinderleichte Einführung

und auch noch das aktualisierte von strukturierte anweisung:

strukturierte anweisung:

4 4

—>-- ! verbundanweisung !-

4 « bedingte anweisung ! +I 4 + J. + 1 ;t—! Wiederholungsanweisung I—*

4 4

wiederholungsanwei5ung:

4 4

—>—-—j while-anueisung ! 7—>y 4 4 aj 4 4 j+—! repeat-anweisung !—*j 4 4 j

j 4 4 >+—! for-anweisung ! +

4 4

Die Variable hinter FOR heisst auch LAUFVARIABLE und muss alsT y p e i n e n s k a l a r e n T y p e n h a b e n ( w a s d a s n u n i s t , l e r n t i h rspaeter). Zunaechst reicht es zu wissen, dass INTEGER, CHAR undBOOLEAN skalare Typen sind; REAL aber NICHT! ! Oder zaehlt ihr1 .1 , 1 .2 , 1 .3 , 1 .4 usw. ; neeee , 1 , 2 , 3 , 4 i s t besser, vo r a l l em,w e i l z w i s c h e n 1 . 1 u n d 1 . 2 n o c h u n e n d l i c h v i e l e r e e l l e Z a h l e n1i egen!

D ie be iden Ausdruecke müssen vom g le ichen Typ se in , w ie d ieL a u f v a r i a b l e ! S e h r w i c h t i g . D a b e i g i b t d e r e r s t e d e n S t a r t w e r tf u e r d i e L a u f v a r i a b l e a n , d e r z w e i t e d e n E n d w e r t , n a c h d e s s e nUeberschre i ten d ie Sch le i fe n ich t mehr durch lau fen w i rd .

70 und D0WNT0 geben an, ob auf- oder abwaerts gezaehlt werdensol 1.

Nocheinmal eine Gegenueberstel lung:

VARi : INTEGER; (# i, j, k, 1 werden oft als Lauf

variable vereinbart. Eine ueber-kommene Tradition aus FORTRAN-Tagen *>

im Programm:

<äCT Inialisierung

i : = • 1 ; - *■ ' "

REPEAT

WRITE ( i : 5 );

i := i + 1;

UNTIL i > 10;

uird bei T0\\durch den2. AuSrJrMCkrepräsentiert

/FOR i := 1 TO 10

DO WRITE^ i : 5 );

3,. Ausdruck

10 bedeutet die Lauf vnriobkWrd immer um A utiterqemllt

7 4

Page 81: Pascal - Eine kinderleichte Einführung

B e i d e A u s z u e g e z a e h l e n b i s 1 0 , a b e r w e l c h e r i s t k u e r z e r ,uebersicht 1 icher?

A l s o , i m m e r , w e n n m a n v o r h e r w e i s s w i e o f t m a n e t w a s t u n w i l l ,d a n n d i e F O R - S c h l e i f e b e n u t z e n .

W i e n o c h n i c h t g e s a g t : T O b e d e u t e t , d i e L a u f v a r i a b l e w i r dj e w e i l s u m 1 e r h o e h t , D 0 W N T 0 b e d e u t e t , s i e w i r d u m 1 v e r m i n d e r t .Und h ie r kommt dann auch d ie NASA ins Sp ie l , d i e j a andaue rnd von1 0 h i n u n t e r b i s 0 o d e r 1 z a e h l e n w i l l , k a u m d a s s s i e m a l s o e i n eR a k e t e l o s s c h i c k t . D a k o e n n e n w i r m i t e i n e m P r o g r a m m n a t u e r l i c hh i l f r e i c h i n d i e S e i t e s p r i n g e n :

PROGRAM countdown;C* No part of this programe may be reproduced, sold or

transmitted, in any form or by any means, withoutp e r m i s s o n o f t h e N A S A . a )

VARk : INTEGER;

ch : CHAR;

BEGIN

WRITE ( 'Press any key to start count down: ' );READ ( KBD, ch ); WRITELN;

WRITELN ( 'Starting count down now...' );

FOR k :- 10 D0WNT0 1DO WRITELN ( k : 10 );

WRITELN ( ' > I gn i t i on / < ' ) ;

END.

D i e P r e i s e f u e r s o l c h h o c h s p e z i a l i s i e r t e P r o g r a m m e l i e g e n m i tS icherhei t jensei ts eures Vorste l lungsvermoegens. Die NASA laesstes sich eben etwas kosten.

"Neul ichs hab ' ich ma' das e ingegeben, un ' n ix pass ier te :

FOR i :- 10 TO 1DO WRITE ( i );

Was hab' ich'n da falsch gemacht?"

Nun j anz e i n fach : wenn man au fwae r t s zaeh len w i l l , muss de rS t a r t w e r t k l e i n e r ( o d e r g l e i c h ) d e m E n d w e r t s e i n . B e i m A b -waer tszaehlen natuer l ich umgekehr t !

Vorhin sagten wir CHAR und BOOLEAN seien auch skalare Typen.Messerschar f hab t i h r s i che r l i ch schon ge fo lge r t , dass man dannmit Variablen dieser Typen auch "zaehlen" koennen rnuesste.

G e n a u ! W i e s c h o n e i n m a l e r w a e h n t , s i n d a l l e B u c h s t a b e nd u r c h n u m m e r i e r t ( S t i c h w o r t : O r d n u n g s z a h l ) . E b e n f a l l s T R U E u n dFALSE haben Nummern. TRUE hat die Ordnungszahl 0 und FALSE die 1.F o l g l i c h k a n n m a n v o n T R U E b i s FA L S E o d e r v o n » A ' b i s ' Z 'zaeh len . Be isp ie le dazu? Ok , h ie r s ind s ie . . .

Page 82: Pascal - Eine kinderleichte Einführung

Erstmal wol len wir sehen, welche Zeichen der Computer so hat ,d i e e i n d u r c h s c h n i t t l i c h e r D u r c h s c h n i t t s b u e r g e r s i c h a u f d e mS c h i r m a n s e h e n k a n n . W i r b e g i n n e n m i t d e m b l a n k ( ' ' ) , d a n nfo lgen v ie l e Uebe r raschungsze i chen , und w i r hoe ren m i t dem ' z 'au f :

4i FUER zeichen : = ' ' BIS 'z' i

i

! TUE

! schreibe Ordnungszahl i

4! schreibe Zeichen

-+

PROGRAM lustigezeichen;

VARzeichen : CHAR;

BEGIN

FOR zeichen := ' ' TO 'z'DO WRITELN ( zeichen, ' - ', ORD ( zeichen ):3 );

END.

Noch w i t z i ge r w i rd ' s , wenn i h r uebe r d i e O rdnungszah len geh tund mal die Zeichen (mit CHR) zu den Nummern 0 bis 31 oder ab 128( b i s 2 5 5 ) a n s c h a u t . M e i s t p a s s i e r e n t o l l e S a c h e n , a b e r k e i n eGaran t i e .

Habt ihr eigentlich euren Kumpel, das DO, wiedererkannt? Es kamschon bei WHILE vor. Und... jaaaa, st immt! Und eben so, wie dort,m u s s m a n a u c h h i e r, s o l l e n m e h r e r e A n w e i s u n g e n i n d e r F O R -S c h l e i f e a u s g e f u e h r t w e r d e n , d i e s e z u e i n e r Ve r b u n d a n w e i s u n gzusammenfassen!

Ein Beispiel dazu? Ok, mit noch mehr Ueberraschendem...

I h r k e n n t j a s c h o n d i e Wa h r h e i t s t a b e l l e n ( u e b e r l e g , u e b e r l e g ,woher b loss) . Seht mal be i der E in fuehrung von AND usw. nach.Gut , w i r wo l len je tz t naeml ich d ie Wahrhe i ts tabe l le des fo lgendenAusdrucks vom Flechner herstellen lassen: a AND b OR c(.a, b, c sind Variablen vorn Typ BOOLEAN).

76

Page 83: Pascal - Eine kinderleichte Einführung

4 4FUER a := TRUE BIS FALSETUE

4FUER b := TRUE BIS FALSETUE

4 4FUER c := TRUE BIS FALSE!TUE

+ 4I a, b, c schreiben4I Ergebnis vonI a AND b OR c! berechnen4i Ergebnis schreiben

4

W a t t ' n e S c h a c h t e l e i , a b e r i m P r o g r a m m d o c h r e c h t u e b e r -s i c h t l i c h - d u r c h o p t i s c h e G l i e d e r u n g - :

PROGRAM wahrheitstabelle;

VARa, b, c : BOOLEAN;

BEGIN

WRITELN ( 'Berechnung von a AND b OR c:' ); WRITELN;

W R I T E L N ( ' a b c E r g e b n i s : ' ) ;

FOR a := TRUE TO FALSEDO FOR b := TRUE TO FALSE

DO FOR c := TRUE TO FALSEDO BEGIN

W R I T E ( a : 5 , b : 6 , c : 6 ) ;

WRITELN ( (a AND b OR c):10 );

END;

END.

E i n l e u c h t e n d d i e p r o b l e m f r e i e V e r w e n d u n g v o n b o o l e s c h e nVa r i a b l e n a l s L a u f v a r i a b l e .

Neu al lerdings, dass man deren Werte auch einfach so ausgebenkann! Tja, das haben wir uns aufgespart. Die Werte TRUE und FALSEwerden dabei in d ie Str ings 'TRUE' und 'FALSE' umgewandel t undgenau wie jeder andere Str ing ausgegeben. Einlesen kann man sieaber nicht !

77

Page 84: Pascal - Eine kinderleichte Einführung

F u e r S p e z i s , s o l c h e , d i e ' s w e r d e n w o l l e n u n d d i e , d i e i m m e ra l l e s g a n z g e n a u w i s s e n w o l l e n :

FOR i := 1 TO 10DO i : - i * 2 ; (# n ich t d ie Laufvar iab le in der

Schleife veraendern/ #)

s o l l t e m a n n i c h t m a c h e n ( a b e r p r o b i e r t s m a l ) . D i eVe r h a l t e n s w e i s e d e r F O R - S c h l e i f e i s t n i c h t s i c h e r v o r a u s s a g b a r .

Und der Gehe imt ip zum Sch luss : REPEAT- und WH7t£-Sch le i fen s indschne l le r a l s so lche m i t FOR (ausser i n TURBO-PASCAL) .

Zum Ende de r Sch le i f en noch d i e Gew issens f rage :H a b t i h r e u c h s c h o n m a l u e b e r l e g t , w a s p a s s i e r t , w e n n i h r i ne i n e r W H I L E - o d e r / ? £ P £ / ) 7 - A n w e i s u n g e i n e B e d i n g u n g a u f f u e h r t , d i es o b e s c h a f f e n i s t , d a s s d i e S c h l e i f e i m m e r d u r c h l a u f e n w i r d ?

Z . B .

W H I L E T R U E o d e r R E P E A TDO ...

UNTIL 3 > 4

ode r aenh l i ches , n i ch t so o f f ens i ch t l i ch Fa l sches .

Prob ier t es l ieber n ich t , der Rechner (Freund CPU) haengt s ichn a e m l i c h a u f . T j a , s o n e n n t m a n d a s . E r g e r a e t i n e i n eENDLOSSCHLEIFE. Nur noch ein Ausschalten des Computers kann hierA b h i l f e s c h a f f e n .

78

Page 85: Pascal - Eine kinderleichte Einführung

3 . 1 3 . E s w i r d z u T i s e h g e b e t e n

M a c h t e u c h a u f e i n i g e M e n u e s g e f a s s t ! A b e r b e v o r w i r i nku l i na r i sche Verzueckungen ausbrechen , muessen d ie Grund lagengeschaffen werden.

Fuer den muend igen Schue le r rnoech ten w i r j e t z t end l i ch auche t w a s t u n , i n d e m w i r i h m e i n E n t s c h l u e s s e l u n g s p r o g r a m m f u e rseine Zensuren geben.

Er er faehr t dadurch genau, w ie se ine Note im Klar tex t laute t :1 = sehr gut; 2 = gut usw.

PROGRAM Zensuren!;

VARzensur : INTEGER;

BEGIN

WRITE ( 'Zensur (0 - Ende): ' ); READLN ( zensur );

WHILE zensur <> 0DO BEGIN

IF zensur - 1THEN WRITELN ( 'sehr gut' )

ELSE IF zensur - 2THEN WRITELN ( 'gut' )

ELSE IF zensur = 3THEN WRITELN ( 'befriedigend' )

ELSE IF zensur - 4THEN WRITELN ( 'ausreichend' )

ELSE IF zensur - 5THEN WRITELN ( 'mangelhaft' )

ELSE IF zensur - 6THEN WRITELN ( 'ungenuegend' )

ELSE WRITELN ( 'wie bitte?' );

WRITE ( 'Naechste Zensur (0=Ende): •' ); READLN ( zensur );

END; (* der WHILE-schleife *)

END.

Also, als Struktogramrn rnoechten wir das nicht aufmalen. Haettenwi r vorher gewusst , was fuer e ine Arbe i t das is t . . . , oh Mann. Wirsehen auch: manchmal ist es gut, wenn man von seinem gewohnten( o p t i s c h e n ) G l i e d e r u n g s s t i l a b w e i c h t , u m S t r u k t u r e n d e u t l i c h z umachen.

Kurz noch zu einem Trick, den ihr dort seht. Wir haben naemlichvor der Schleife die Zensur erfragt und am Ende wieder. Das machtm a n s o , u m e i n e J f - A b f r a g e i n d e r S c h l e i f e z u v e r m e i d e n , d i ep r u e f t , o b a u f g e h o e r t w e r d e n s o l l . K o e n n t i h r j a m a l i n e u e rRepertoire aufnehmen.

79

Page 86: Pascal - Eine kinderleichte Einführung

J e t z t j e d o c h z u m U n g e r n u e t l i c h k e i t s e f f e k t , d . h . e s s o l l e u c h a ng e s i c h t s o b i g e r v e r s c h a c h t e l t e r A n w e i s u n g e n u n w o h l w e r d e n u n dd a n n , d a n n k o m m t d i e g r o s s e E r l o e s u n g . E s w i r d e u c h l e i c h t u m ' sH e r z : t h e r e s c u e i s n i g h ; b e h o l d t h e C / ) S £ - s t a t e m e n t d e s c e n d sfrom PASCAL—heaven to programmers earth.,

A u f D e u t s c h : e u r e m e n t a l e D i s s o n a n z w i r d d u r c h d a s E r s c h e i n e nder C$S£~AnWeisung in vo l l kommene Harmon ie ve rwande l t .

case-anveisung:

—>—(CASE1—>—! ausdruck I—->-'-{ OfV>-t--t-! konstante !--T—>--<:">->--! anweisung !-7->-(end)-->! r \ / L ii,J~<-

W a r d o c h n i c h t z u v i e l v e r s p r o c h e n , o d e r ? W i e ? I h r s e h t d e nVor te i l noch n ich t? Na, dann ma l e in neues Programm Zensuren :

PROGRAM zensuren2;

VARzensur : INTEGER;

BEGIN

WRITE ( 'Zensur (0 - Ende): ' ); READLN ( zensur );

WHILE zensur <> 0DO BEGIN

IF (zensur > 0) AND (zensur < 7)THEN

CASE zensur OF

1 : WRITELN ( 'sehr gut' );2 : WRITELN ( 'gut' );3 : WRITELN ( 'befriedigend' );4 : WRITELN ( 'ausreichend' );5 : WRITELN ( 'mangelhaft' );6 : WRITELN ( 'ungenuegend' );

END r# der CASE-Anweisung #)

ELSE WRITELN ( 'wie bitte?' );

WRITE ( 'Noch eine Zensur (0 » £NZ>£.>: ' );READLN ( zensur );

END; (* der WHILE-Anweisung *)

END.

S u p e r , n i c h t ? ! G l i e d e r u n g i s t a l l e s , g u t u n t e r s t u e t z t d u r c hCASE.

80

Page 87: Pascal - Eine kinderleichte Einführung

Ein paar Er laeuterungen:

Der Ausdruck hinter CASE ist der Selje.kJ;_or., aufgrund dessen Wertentschieden wird, welche Anweisung innerhalb des CASE—Statementsa u s g e f u e h r t w i r d - n a e m l i c h d i e j e n i g e , d e r e n d a v o r s t e h e n d eKonstante dem Wert des Selektors entspr icht.

Geben w i r im Be isp ie l 1 e in , so w i rd das WRITELN h in te r de rK o n s t a n t e n 1 a u s g e f u e h r t , b e i 2 d a s h i n t e r d e r 2 u s w. T r i f f tkeine Konstante den Wert des Ausdrucks, so passiert in der CASE-Anweisung n ichts! Diesen Fal l muessen wir se lbst abfangen, daherauch der aeussere JF-Befehl!

D i e K o n s t a n t e n u n d d e r S e l e k t o r m u e s s e n e i n e n s k a l a r e n Ty phaben (genau wie bei FOR) und in diesem uebereinstimrnen!

Die Anweisung nach e iner Konstanten kann natuer l ich auch e ineVerbundanweisung sein, keine Frage.

Bevor ihr euiCflSf-Anwei sung,

: h r i ch t i g e rho l t , h i e r noch e i ne Ve rbesse rung de rdie jedoch nicht dem Standart-PASCAL entspr icht :

case-anweisung:

/«->---fCASEi—>—J ausdruck !—>-^ 4 ♦ <0F>->-

i I

4 4 ^ 4 4-! konstante \—{—)---•. y~>—\ anweisung i~-

4 4 V 4 4 V)---<--

V ,

. > ) _ _ / E n d > - >r->—i'elbe)—>— anweisung .-

D i e s e s n e u e E L S E e n t s p r i c h t d e m E L S E b e i I F . E s f a e n g t a l l eF a e l l e a b , d i e n i c h t d u r c h K o n s t a n t e n i n d e r C f l S £ - A n w e i s u n ga b g e d e c k t s i n d . I n z e n s u r e n 2 k o e n n e n w i r a l s o s c h r e i b e n :

WHILE zensur <> 0DO BEGIN

CASE zensur OF

1 ! WRITELN ( 'sehr gut ' ) ;2 i■ WRITELN ( ' g u t ' ) ;3 i WRITELN ( 'be f r ied igend ' ) ;4 :, WRITELN ( 'ausreichend' ) ;5 i, WRITELN ( 'mangelhaf t ' ) ;6 :• WRITELN ( ■ ' u n g e n u e g e n d ' ) ;ELSE WRITELN ( 'w ie b i t t e? ' ) ;

END; f> der CASE-Anweisung *)

END; (* von WHILE a)

81

Page 88: Pascal - Eine kinderleichte Einführung

D i e v o r g e s e t z t e Z f - A b f r a g e e n t f a e l l t s o m i t ; d i eU e b e r s i c h t 1 i c k k e i t w a r a l s o n o c h s t e i g e r u n g s f a e h i g !

E i n e e i n z i g e R e s t r i k t i o n i s t , d a s s z ü r n A u s w a e h l e n e i n e r A l t e rn a t i v e n u r K o n s t a n t e n v e r w a n d t w e r d e n d u e r f e n . S c h a d e z w a r , a b e rn a j a . . .

VARa, b : INTEGER;

CASE a OF

1 : . .

b : . .

END;

cjehc nicht 1 b ist önt Variable t es muß obereine Konstgnte dort stthtn

Wa s d a s g a n z e a b e r m i t M e n u e s z u t u n h a t , f r a g t i h r e u c h ,O o o c h , d a s i s ' qan; e in fach . L a e s s t m a n n a e m l i c h d e nP r o g r a m m b e n u t z e r a u s m e h r e r e n A l t e r n a t i v e n b e w u s s t a u s w a e h l e n , s on e n n t m a n d a s - s i n n i g e r w e i s e - e i n ( e ) M e n u e ( a u s w ä h l )A u s w a h l a u s e i n e r S p e i s e k a r t e .

A e h n l i c h d e r

Z u r E i n f u e h r u n g i n d i e s e s e h r b e l i e b t e u n d w i c h t i g e Te c h n i k e i nk l e i n e r " d e s k - t o p c a l c u l a t o r " ( = T i s c h - o d . Ta s c h e n r e c h n e r ) .

W i r l e s e n 2 Z a h l e n e i n u n d v e r k n u e p f e n s i e n a c h d e s B e n u t z e r sWunsch,,

WIEDERHOLE

zwei Zahlen einlesen

Hernie zeigen u. auswaehlen

Auswahl =

4

iiii

/ f-4 ^ - 4

iaddie-lsubtra-imilti-idivi-l Schluss-Iren Ihieren Ipliz. 'die- ! aeldung! ! ! ! r e n !

--/>A u s w a h l ( ) ' E ' /

JA • I j e i n/! Ergebnis anzeigen4

BIS Auswahl = 'E' ist

8 2

Page 89: Pascal - Eine kinderleichte Einführung

G l e i c h z e i t i g h a b t i h r j e t z t a u c h d a s z u C A S E p a s s e n d eS t r u k t o g r a m m k e n n e n g e l e r n t . N e h m t d e m n a c h b e i m E n t w u r f i m m e r e i ng r o s s e s B l a t t .

PROGRAM taschenrechner;

VARopl, op2,ergebnis :

wähl

BEGIN

REPEAT

REAL;

CHAR;

WRITE ( 'Erster Operand;W R I T E ( ' Z w e i t e r " :

' ) ; READLN ( op l ) ;' ) ; READLN ( op2 ) ;

WRITELN;WRITE ( 'Operatoren: + - a / E - Ende des Programms: ' );

REPEATREAD ( KBD, wähl ); ('*? bis gueltige wähl getroffen *)

UNTIL (wähl = '+') OR (wähl = '-') OR(wähl = '#') OR (wähl = '/') OR(wähl - 'E ') ;

CASE wähl OF

t + sI —!

> * '' / '

ergebnis :- opl + op2;ergebnis :- opl - op2;ergebnis := opl * op2;ergebnis := opl / op2; (# Division durch 0

wird nicht abgefangen/ #)

WRITELN ( 'Sie haben einen simplen Rechner ','sehr, sehr gluecklich gemacht. ' );

END;

IF wähl <> 'E'THEN WRITELN ( opl:9:3, wahl:2, op2:9:3, ' = '

ergebnis:9:3 );

UNTIL wähl

END.

' E ' ;

Zur Arbeitsweise des Programms: kein Kommentar.

( B e ) m e r k e n s w e r t b e i d e r V e r w e n d u n g v o n M e n u e s i s t d e rgrundlegende Aufbau:

S3

Page 90: Pascal - Eine kinderleichte Einführung

N I E D E R H O L E Ii

4 4! Zeige die Haiti uoegl ichkeit en !4 +

! Lies die Haiti des Benutzers !4 4

I Eraittle nit CASE die ge- i! wuenschte Funktion u. fuehre I! s i e a u s !4 4

ii

BIS Wahl = Endezeichen I

Eraittle nit CASE die gewuenschte Funktion.

T y p i s c h a u c h d i e A u s w a h l d u r c h e i n e n e i n z i g e n B u c h s t a b e n ( Z e ic h e n ) , d e r m o e g l i c h s t " i n t e l l i g e n t " s e i n s o l l t e , d . h . e r h a tB e z u g z u r a u s g e w a e h l t e n F u n k t i o n .

E i n g e b u e r g e r t h a b e n s i c h i m g r o s s e n u n d g a n z e nu n t e r s c h i e d ! i c h e M e n u e d a r s t e l l u n g e n :

zwei

Menue zur Stichwortverwaltung:

Neue Stichwoerter aufnehmen > N <

E i n S t i c h w o r t I g e s e h e n > L <

Angaben zu einem Stichworta e n d e r n > A <

S t i c h w o r t e l i s t e n > S <

P r o g r a m m e n d e > E <

Bitte den Buchstaben ihrer Wahl :

E s k a n n d a n n z w i s c h e n N u n d L u n d . . . u n d E g e w a e h l t w e r d e n ,d i e g e w u e n s c h t e z u g e h o e r i g e F u n k t i o n w i r d a u s g e f u e h r t , u n d d a n a c hze ig t das Programm wieder d ieses Menue.

8 4

Page 91: Pascal - Eine kinderleichte Einführung

E i n e t a b e l l a r i s c h e A u fl i s t u n g i s t s e h r u e b e r s i c h t 1 i c h ! D i eWa h l b u c h s t a b e n w u r d e n d e n A u f g a b e n , w e l c h e s i e b e z e i c h n e n ,entsprechend sinnig gewaehl t . Keinem nuetzte es, bezeichnete man"Programmende" mit Y und "Ein Stichwort loeschen" mit M oder so.

Ein zwei tes Muster :

LISTE: Ldsten d. stichworte; 0(hne seitennummern; vorher S(ortieren; E(nde:

H i e r w u r d e d a s g a n z e M e n u e m a l i n e i n e Z e i l e g e p a c k t(p la tzsparend) ; d ie moegl ichen Auswahlbuchstaben s ind a ls e inz igegross geschr ieben, sowie durch e ine K lammer " ( " vom ihrem Wor ta b g e t r e n n t ( d e r U e b e r s i c h l i c h k e i t h a l b e r ) .

D r e i T i p s n o c h , u m s i c h e i n e n p r o f e s s i o n e l l e r e n A n s t r i c h z ugeben:

1 . Zu j edem Menue so l l t e e i ne Uebe rsch r i f t e r sche inen , dam i tman einen groben Anhalt hat, wo im Programm man sich befindet.

2 . H a b t i h r g a n z g a n z G r o s s e s v o r u n d e i n u e b e r h a u p t n u rw ich t iges , langes, kompl iz ie r tes Programm, so erwe is t es s ich a lssehr nuetz l ich, wenn man in den Menues e ine Hi l fs funkt ion auf ruf e n k a n n , w e l c h e e i n e k u r z e E r l a e u t e r u n g z u d e n m o e g l i c h e nMenueauswahlpunkten gibt. Z.B.:

HAUPTMENUE: Adifuegen; L(oeschen; V(eraendern; S(ortieren; Hdlfe; E(nde:

G i b t m a n n u n H f u e r H i l f e , s o e r s c h e i n t e i n k u r z e r Te x t , d e rbeschreibt, was passiert, wenn man A oder L oder V usw. drueckt.

3 . Der voe l l ig abgehobene Programmierer schre ib t se ine Menuessowieso nur in Engl isch:

MAINMENUE: A(ppend; D(elete; Adter; S(ort; H(elp; Q(uit:

E r w i r d i n s b e s o n d e r e d u r c h k u e r z e r e Te x t e ( Wo r t e ) b e l o h n t , d i edas g le iche wie ihre Uebersetzungen bedeuten, jedoch v ie l praeg-nanter s ind. E ine Gewoehnung an d ie gute eng l ische Fachl i te ra ture r fo lg t somi t w ie von se lbs t .

85

Page 92: Pascal - Eine kinderleichte Einführung

3. 14. "Ey, was is 'n das fuer 'n TypJ

N ich t , dass w i r euch e in i ge He r ren vo rs te l l en wo l l en , ne in , esgeht um eine Erweiterung des Typbegri ffs von PASCAL.

Bisher mussten wir jeder Variablen einen Typ zuordnen (.INTEGER,CHAR usw.) oder Konstanten hatten einen IMPLIZITEN Typ, der sichaus ihrem Aufbau ergab (1.3 ist vorn Typ REAL, 'A' vom Typ CHARLisw. ) .

A l l e s d r e h t s i c h , a l l e s b e w e g t s i c h g e w i s s e r m a s s e n u m d e nAngelpunkt Typ.

E s t u t u n s e c h t l e i d , a b e r d i e s e s K a p i t e l w i r d n ' b u e s c h e nt r o c k e n ( h u s t , h u s t ) , d . h . w e n i g e b i s g a r k e i n e v o l l s t a e n d i g e nProgramme, d a f L i e r a b e r e i n e M e n g e W i s s e n . Z u m G l u e c k i s ta l l g e m e i n b e k a n n t : W i s c h e n i s t M a c h t !

Z u n a e c h s t e i n e t w a s v o l I s t a e n d i g e r e s S y n t a x d i a g r a r n r n f u e r t y p :

typ (unvollstaendig): einfacher typ:

4 4—>—-—! einfacher typ I-

V + +! * 1-—' strukturieter !-

I t y p I4 4

4 4

——! skalartyp i—>—7—>V + * ;■ 4 4 j

+--! Unterbereichs !—♦I I t y p ! !! + + !j 4 4 j4 j t ypna iae ! +

4 4

strukturierter typ werdeter st mal zu einfacher typ. .

i h r demnaechs t kennenlernen. j e t z t

O e h h h h m r n m m , n u n , t j a , e i n e i n f a c h e r T y p i s t z u n a e c h s t e r s t m a lk e i n s t r u k t u r i e r t e r T y p - i s t j a k l a r - , d . h . e i n e i n f a c h e r T y ps e t z t s i c h n i c h t a u s n o c h e i n f a c h e r e n B a u s t e i n e n z u s a m m e n . E r i s tq u a s i d a s A t o m d e r s t r u k t u r i e r t e n D a t e n t y p e n .

M o o o m e n t , i h r k e n n t j a s c h o n T y p e n , d i e z u r K l a s s e d e re i n f a c h e n Ty p e n g e h o e r e n : C H A R , B O O L E A N , I N T E G E R u n d R E A L * . S e h rg u t . M a n k a n n s i e u n t e r t y p n a a e i m o b i g e n S y n t a x d i a g r a m me i n o r d n e n .

A b e r w a s i s t m i t d e n b e i d e n a n d e r e n K a e s t e n : s k a l a r t y p u n d s o ?

D i e A n t w o r t :

8 6

Page 93: Pascal - Eine kinderleichte Einführung

3 .14 .1 Skalar typen

skalartyp:

->—'(*>-->-~—! nue I—;—>—'>>-->* 4 + uI y ~ v i

Sie sind gewisser massen der Grundtyp von PASCAL.. Wird einerVa r i a b l e n b e i d e r D e k l a r a t i o n e i n S k a l a r t y p z u g e o r d n e t , s o w i r dder Wertebereich_ dieser Variablen als geordnete Menge festgelegt.Die moeglichen Werte werden durch Namen bezeichnet.

Was das bedeutet? Keine Ahnung!

S t o p , s t o p , s t i m m t n i c h t , n a t u e r l i c h w i s s e n w i r ' s , w a r t e t m a le inen Augenbl ick , dann wi rd es se lbst euch deut l ich.

VAR

tag ( montag, dienstag, mittwoch, donnerstag,frei tag, samstag, sonn tag );

f ä rbe : ( r o t , g ruen , b l au , ge l b ) ;

geschlecht : ( maennlich, weiblich ); (# oh, wie heikel #)

I s t d o c h t o l l , w a s m a ns e l b s t e r k l a e r e n d d a s i s t .

s c v e r e i n b a r e n k a n n . u n d w i e

montag , d iens tag oder ro t , g ruen oder maenn l i ch , we ib l i ch s indWerte, d ie d ie entsprechenden Var iablen tag, färbe und geschlechtannehmen koennen. Genau wie einer INTEGER-Variab1en der Wert 134zugewiesen werden darf.

tag

färbe

geschlecht

montag; tag

ro t ;

maennlich;

:= sonntag; J ^ a[[& ^wlftÄSwöJ

j Merk, x mohtag usw. sindkeine Strims

D i e W o r t e ( N a m e n ) m o n t a g , r o t u s w . s i n d M e n g e n e l e m e n t e(Kons tan ten des Ska la r t yps ) , ke ine S t r i ngs ! Man kann a l so auchn i ch t sch re iben :

tag :- mittwoch; WRITELN ( tag )

Stopping, oben ist noch das St ichwort geordnete Menge gefal len.Das bedeutet -wie jeder le icht e ins ieht - , dass jedem Element e ineOrdnungszahl (woher kennen wir das wohl, hmmm?) zugewiesen ist;Beispiel ist hier die geordnete Menge der Zeichen des Computers.

D i e O r d n u n g w i r d d u r c h d i e R e i h e n f o l g e d e s A u f z a e h l e n s d e rNamen i n den K lammern fes tge leg t . A l s Ordnungszah len fue r d iegue l t i gen Wer te der Var iab len tag e rg ib t s i ch :

87

Page 94: Pascal - Eine kinderleichte Einführung

montag dienstag mittwoch donnerstag freitag samstag sonntag0 1 2 3 4 5 6

Merke: es wird immer von 0 an gezaehlt.

Ex i s t i e r t e ine Ordnung , so koennen w i r f ue r e inze lne E lemen teauch e in Nachfo lgeelement (engl . : successor) und e in vorangehendes E lement (eng l . : p redecessor ) fes t legen.

S o i s t d e r N a c h f o l g e r v o n m o n t a g d a s E l e m e n t d i e n s t a g , v o ndiesem ist es mittwoch usw.

Der Vorgaenger von samstag ist freitag, davon donnerstag usw.

A lso a l les menschenf reund l ich und s impe l . Doch um noch e ineno b e n d r a u f z u s e t z e n , g i b t e s d a f u e r a u c h v o r d e fi n i e r t eFunkt ionen:

SUCC ( x ) l iefert das Nachfolgeelement des Elementes,welches x enthaelt (oder x ist).

SUCC ( dienstag ) ergibt mittwoch.

PRED ( x ) l i e fe r t den Vorgaenger.färbe j- blau; PRED ( färbe ) ergibtdemnach gruen als Resultat.

ORD ( x ) kennen wir schon. Wir erhalten die Ordnungszahl von x.

ORD ( weiblich ) ist eben 1.

A u f a l l e Va r i a b l e n , d e r e n Ty p e i n S k a l a r t y p i s t , k o e n n e n u n dmuessen wir die uns bekannten Regeln anwenden: bei Zuweisungenimmer g l e i che (bzw. kompa t i b l e ) Typen , d i e Ve rg le i chsope ra to ren

) gelten, da jedes Element eine Ordnungszahl hati s t TRUE, we ib l i ch = maenn l i ch dagegen FALSE) .

( < , > = , < > u s w ,(.montag < dienstag

U n d w i r k o e n n e n s i e z . B .verwenden:

in FOR- und C^S£-Anwe isungen munte r

VARfärbe : (rot, blau, gelb, orange, braun)'.

FOR färbe iDO BEGIN

rot TO braun

WRITE ( 'ORD

CASE färbe OF

ORD ( färbe ),

r o t : WRITELN ( ' r o t ' ) ;b l a u : WRITELN ( ' b l a u ' ) ;g e l b : WRITELN ( ' g e l b ' ) ;orange : WRITELN ( ' o r a n g e ' ) ;b r a u n : WRITELN ( ' b r a u n ' ) ;

END;

END;

Farbe: >',

le/o/cr muß man tme so«tcW/iche Enksdlksduhovornehmen, witl man mehrnur die OfdmrüS&hiemerfahren. ^WrfELNifcrbe) Qerit nicht [

8 8

Page 95: Pascal - Eine kinderleichte Einführung

A m g u e n s t i g s t e n i s t e s , i h r s c h r e i b t m a l e i n i g e k l e i n eProgramme, in denen ihr e igene Var iablen skalaren Typs vereinbartund dann mit SUCC und PRED und ORD herumspielt. Vielleicht bauti h r e i n e M e n u e a u s w a h l e i n , u e b e r d i e i h r b e s t i m m t , w e l c h e d e rvorgenannten Funkt ionen ausgefuehrt werden sol l .

83

Page 96: Pascal - Eine kinderleichte Einführung

14. U n t e r b e r e i c h s t y p e n

Vo n d e fi n i e r t e n S k a l a r t y p e n ( w i e m a n n e u e Ty p e n d e fi n i e r t s e h e nw i r i r n n a e c h s t e n K a p i t e l ) o d e r d e n S t a n d a r t t y p e n C H A R , B O O L E A N ,

k a n n m a nI N T E G E R ( n i c h t a b e r R E A L ! ! )U n t e r b e r e i c h f e s t l e g e n .

D a z u i s t i n d e r D e fi n i t i o n d e r k l e i n s t e u n d d e r

e i n e n Te i l - o d e r

g r o e s s t e W e r td e s U n t e r b e r e i c h s a n z u g e b e n , Kl ar d a s s d i e u n t e r e G r e n z e n i c h tg r o e s s e r a l s d i e o b e r e s e i n d a r f .

unterbereichstyp;

4 4

-! konstante I—4 4

r V- > -4 4

-I konstante !-4 4

S o d a r f m a n f o l g e n d e Va r i a b l e n v e r e i n b a r e n :

VARbuchstabe ' A t f 7 / .n . . * . r

tag 1. .31 ;

wahr : TRUE..TRUE;

Die so d e k1ari er t en Variablen d uer f en (und k oen n en) nur Wertea n n e h m e n , d i e i n d e m U n t e r b e r e i c h e n t h a l t e n s i n d , f u e r d e n s i ed e fi n i e r t w u r d e n .

buchstabe 'A' ; buchstabe ' S ' ; Ok!

buchstabe :~ 'a';

wahr

tag

FALSE;

■ 1 r tag

-—- fans ober nicht! 'a' ist nicht""AVZ' enthalten!

3 2 -y

au weihet 1 FqUch!

D e r H a u p t v o r t e i l d e r U n t e r b e r e i c h s t y p e n l i e g t d a r i n , d a s sV a r i a b l e n , d i e w i r k l i c h n i c h t d e n v o l l e n W e r t e b e r e i c h e i n e sS k a l a r t y p e n ( o d e r S t a n d a r t t y p e n ) a u s s c h o e p f e n s o l l e n , e i n g e n a ud e fi n i e r t e s I n t e r v a l l d a r a u s z u g e w i e s e n b e k o m m e n k o e n n e n .

D i e s e r m o e g l i c h t z u m e i n e n e i n e b e s s e r e S p e i c h e r v e r w a l t u n g , z u ma n d e r e n a b e r a u c h e i n e U e b e r p r u e f u n g z u r L a u f z e i t d e s P r o g r a m m e s ,o b d e r Va r i a b l e n e i n W e r t z u g e w i e s e n w i r d , d e n s i e n i e a n n e h m e ns o l l . S o f u e h r t d i e Z u w e i s u n g :

tag :~ tag - 1;

z u e i n e m P r o g r a m m a b b r u c h , w e n n t a g d a d u r c h e i n e n We r t b e k o m m t ,d e r n i c h t i m a n g e g e b e n e n U n t e r b e r e i c h l i e g t . U n d d a s i s ts i n n v o l l , w e i l m a n d a r a n s i e h t : a h a , a h a , i r g e n d e t w a s s t i m m t m i tdem Programm nicht !

90

Page 97: Pascal - Eine kinderleichte Einführung

Auch die Lesbarkeit und Seibstdokumentation von Programmen wirderhoeh t . Es i s t nun moeg l i ch , (passend gewaeh l ten) Namen ih renWertebereich gleich an der Nasenspitze anzusehen.

Speicherplatz kann mit ihnen oekonomischer genutzt werden, wei lz . B . d i e Va r i a b l e t a g l ( m i t 1 . . 3 1 ) w e n i g e r R a u m b e l e g t , a l s oquas i e inen k le ine ren Kas ten ha t a l s e ine Var iab le tag2 vom TypINTEGER.

VARt a g l

VAR1..31; tag2 ; INTEGER;

Merke aber: beides sind JNT£iSj£R-

tagl : - tag2 f un kt i on i er t Be ide s ind ja vom Typ INTEGER, nurt a g l d a r f e b e n n i c h t a l l e W e r t a n n e h m e n , d i e t a g 2 h a b e n d a r f . E i nF e h l e r t r i t t n u r d a n n a u f , w e n n t a g 2 z . B . g l e i c h £ 5 4 i s t , d a sw a e r e z u g r o s s f u e r t a g l .

91

Page 98: Pascal - Eine kinderleichte Einführung

14« »ii. Neue Typen definier en

We n n w i r s c h o n ' w a s m a c h e n , d a n n a b e r a u c h g a n z , j a w o l l l l .Deshalb lernt ihr h ier, wie man neue Typen definieren kann, n ichtw ie b isher immer nur neue Var iab len und Konstan ten . Dami t w i rddann auch der Vereinbarungstei l abgeschlossen.

typdefinition:

—>--f TYPE »■-->-

vereinbarungsteil:

4 4-! typnane !-

H +-i typ i-

->- ->- ->-V 4 4 a+—! konstantendefinition !—+

4 4

y 4 + *+—! typdefinition !—+

4 4

V 4 ++—! Variablenvereinbarung i-

4 4

Upps, was das so l l?d i e Ty p d e fi n i t i o n e nVar iablendeklarat i onenstehen muessen!

N ich t so schne l l .• f a l l s i h r w e l c h e

und HINTER den

Erstmal merkt euch, dassmachen wollt— VOR den

Konstan t endef i nitJonen

Gemerkt? Dann weiter. . .

Erwaehnt haben wir einmal, was der Computer so macht, wenn erd i e V e r e i n b a r u n g e i n e r Va r i a b l e n fi n d e t : e r s u c h t i n s e i n e nSchnit tmustern und bastel t danach einen Kasten.

De r Tr i c k m i t den Typdefin i t i onen i s t nun , dass i h r m i t d i esengewissermassen neue Schnittmuster vereinbaren koennt.

TYPEtage = ( mo, di, mi, do, fr, sa, so );

VARWochentag : tage;

tage he iss t je tz t e in neuer Baste ibogen fuer CPU, nach dem erdann e inen Kas ten z immer t , wenn e r au f e ine Va r iab le t r i f f t , d i emit diesem neuen Typ vereinbart wird (.Wochentag z.B.).

Ma l e i n i ge —n ich t unbed ing t i n te l l i gen te - Be i sp ie l e :

92

Page 99: Pascal - Eine kinderleichte Einführung

CONSTan fang = 1; ende = 10;

TYPEt f a r b e

tgrundfärben

tverwandte

t l o t t e r n

tbereich

ganzzahlig

( gruen, rot, blau, gelb );

r o t . . g e l b ;

( oma, opa, tante, onkel, geschwister );

1. .49;

an fang..ende;

INTEGER;

VARf a r b e : t f a r b e ; c o l o r t g rund fa rbe ;

verwandte : tverwandte;

lo t tozah len : t l o t te rn ;

ganzezahl : ganzzahl ig ;

S o r i c h t i g w i c h t i g w i r d d a s e r s t , w e n n i h r d i e s t r u k t u r i e r t e nD a t e n t y p e n k e n n e n l e r n t . D o c h s e i e r w a e h n t , d a s s d i e s eM o e g l i c h k e i t d e s A u s d e n k e n s v o n n e u e n Ty p e n , w e l c h e v o l l k o m m e ng l e i c h w e r t i g s i n d z u d e n v o r d e fi n i e r t e n S t a n d a r t t y p e n , e r s t e n sz u r U e b e r s i c h t 1 i c h k e i t v o n P r o g r a m m e n b e i t r a e g t , z u m a n d e r e n u n -e r l a e s s l i c h f u e r d i e D a t e n a b s t r a k t i o n i s t ( s p a e t e r m e h r d a v o n )u n d z u g u t e r l e t z t d i e L e s b a r k e i t f o e r d e r t .

A l s B e i s p i e l : d e r Ty p B O O L E A N - w i r a l l ei s t s o v e r e i n b a r t :

k e n n e n u n d l i e b e n i h n -

TYPEBOOLEAN (FALSE, TRUE);

Irgendwo wurde das fuer alle PASCAL-Programmiererauf das man sich nicht mehr d'rum kuemmern muss.

m a l g e t a n ,

k l e i n e r T i p : d e fi n i e r t i h r s o l u s t i g v o r e u c hdann waehlt doch deren Namen in der Weise, dass

E i nTypen,e i n " t " a m A n f a n g s t e h t . A e h n l i c h w i e ' s o b e n i n d e nBeispie l Vereinbarungen gemacht is t . So koennt ihr immer,

h i n n e u eimmer noch

l e t z t e nwo irn

Programm ein Typ name auftauchen soll, pr Liefen, ob es auch eineri s t ; e r so l l t e dann naem l i ch e i n " t " vo ranges te l l t haben .

Page 100: Pascal - Eine kinderleichte Einführung

3.15. In L in ie anget re ten .

W i e d i e U e b e r s c h r i f t s c h o n a n d e u t e t , w i r d e s j e t z t e i n w e n i gm i l i t a e r i s c h . H a t t e t i h r b i s h e r l e d i g l i c h m i t e i n z e l n e n I n d i v iduen zu tun (Variablen), so rnuesst ihr euch nun an den Umgang mitganzen Massen von ihnen gewoehnen.

U m z e i t g e m a e s s z u b l e i b e n : d e n k e n w i r m a l , e u r e G e m e i n d ev e r g i b t a n e u c h d e n A u f t r a g , e i n P r o g r a m m z u s c h r e i b e n , m i twelchem die Bestaende e inzelner Baumarten in der Umgebung desOr tes e r fass t und ausgewer te t werden so l l en . Zu be rechnen s inddie Gesamtzahl an Baeumen und der Antei l der einzelnen Arten and i e s e r ( p r o z e n t u a l ) .

BauQbestandser fassung:4 4I Einlesen der absoluten Baua- !! z a h l e n p r o B a u a a r t !

! Berechnung der Gesamtzahl i4 +! Berechnung der prozentualen II A n t e i l e j e B a u o a r t !+ 4

Einlesen der absoluten BauBzahlen pro Art:4 4

FUER Bauaart := Fichte BIS Sonstige!T U E I

4 4! Lies BauQzahl der Bauoart !

4

Berechnung der Gesautzahl:4! G e s a u t z a h l : - 0

FUER Bauaart := Fichte BIS SonstigelT U E I

4 4! Gesaatzahl := Gesastzahl + I! Bauozahl der Bauoart !

Berechnung der prozentualen Anteile:4 4

FUER Bauoart := Fichte BIS Sonstige !T U E I

4 4! Prozentualen Anteil berechnen I

4

D i e s e F o r m u l i e r u n g a l s S t r u k t o g r a m m i s t d o c h r e c h te i n l e u c h t e n d , o d e r ? M a n g e h t m i t e i n e r S c h l e i f e e i n f a c h d u r c hal le Baumarten und l iest d ie zugehoer ige absolute Anzahl e in oderberechnet deren prozentua len Ante i l .

Dumm nur, dass uns dazu keine Moeglichkeiten in PASCAL gegebenw e r d e n - b i s h e r z u m i n d e s t - ; n e i n , n e i n , e s l i e g t n i c h t a n d e rSch le i f e , sonde rn an den Va r i ab len , m i t denen w i r d i e Da ten zuden Baumarten erfassen wollen.

94

Page 101: Pascal - Eine kinderleichte Einführung

S o l l t e n w i r v i e l l e i c h t s c h r e i b e n :

WRITE ( 'Zahl der F ichten: ' ) ;WRITE ( 'Zahl der Tannen : ' );WRITE ( 'Zahl der Eichen : ' ) ;WRITE ( 'Zahl der Birken : ' ) ;

READLN ( fichtenzahl ) ;READLN ( tannenzahl );READLN ( eichenzahl );READLN ( birkenzahl );

u s w. , o d e r

gesamtzahl := fichtenzahl + tannenzahl + eichenzahl + ...

N e e , d a s k o e n n t i h r n i c h t v e r l a n g e n . A b e r b i t t e , e s s t e h t j e d e mfrei . . .

D e r F a u l e s i n n t j e d o c h a u f A b h i l f e , u n d i n d e n s i e b z i g e rJ a h r e n , a l s P A S C A L a u s d e r Ta u f e g e h o b e n w u r d e , s t a n d e n d i eS c h o e p f e r d e r S p r a c h e a n s c h e i n e n d v o r e i n e m a e h n l i c h e n P r o b l e m .D a r a u f h i n e r f a n d e n s i e d i e F E L D E R !

F e l d e r , e i n s e h r w i c h t i g e r B e g r i f f i n d e r I n f o r m a t i k , s i n ds t r u k t u r i e r t e V a r i a b l e n . D . h . s i e s i n d v o n e i n e m s t r u k t u r i e r t e nTy p , w e l c h e w i r i m l e t z t e n K a p i t e l n o c h v e r s c h w i e g e n h a b e n .

W a s m a n s i c h d a r u n t e r n u n v o r z u s t e l l e n h a t ? S e h r e i n f a c h :F e l d e r s i n d d i e Z u s a m m e n f a s s u n g v o n v i e l e n ( m e h r a l s 1 ) O b j e k t e n( Va r i a b l e n ) - d i e a l l e v o m s e l b e n Ty p s i n d - u n t e r e i n e m N a m e n .

W e p r o u d l y p r e s e n t : B I R N E . T j a , e b e n n u r E I N E B i r n e , g e n a u s o ,w i e w i r b i s h e r n u r e i n z e l n e - u n s t r u k t u r i e r t e - V a r i a b l e nd e k l a r i e r t h a b e n .

W o w , t h a t ' s g r e a t ! A n d h e r e a r e t h e f r i e n d s o f o u r s p e c i a lg u e s t B I R N E ! A p p l a u s e f o r t h e B I R N E - g r o u p . . .

Wa s f u e r e i n S h o w e r e i g n i s ! I h r s e h t , d i e B I R N E - g r o u p i s t z u s a mm e n g e s e t z t a u s l a u t e r M i t g l i e d e r n v o m Ty p B I R N E . S e l b s t m i t v i e lS c h a r f b l i c k l a s s e n s i c h i h r e E l e m e n t e ( M i t g l i e d e r ) n i c h t m e h rd u r c h i h r A e u s s e r e s u n t e r s c h e i d e n . W i r m u e s s e n i h n e n N u m m e r ngeben:

D 3 c?W o l l t i h r n u n e i n I n t e r v i e w m i t e i n z e l n e n M i t g l i e d e r n d e r

Gruppe machen, so habt ihr sie inetwa folgendermassen anzureden:

"Nun, Herr BIRNE-group Hr. 1 , wie a l t s ind s ie?" oder"Wie ist ihre Einstel lung zu F'ASCAL, Mister BIRNE-group Nr. 5?"

E t w a s u m s t a e n d l i c h , a b e r j e d e r k a n n e i n d e u t i g a n g e s p r o c h e nwerden.

95

Page 102: Pascal - Eine kinderleichte Einführung

Zurueck zum Programmieren mit PASCAL. Betrachten wir die soebenv o r g e s t e l l t e S h o w t r u p p e n a e m l i c h v o n d i e s e r S e i t e , s o s t e l l t s i ef u e r u n s e i n F e l d d a , i n w e i c h e r n j e d e s e i n z e l n e E l e m e n t(Feldelement) den Typ BIRNE hat.

In PASCAL saehe das so aus:

TYPEbi rne = (a was birne genau ist, interessiert

uns momentan nicht #)

VARbirnegroup : ARRAY ( .1. .6 . ) OF b i rne;

U p p p s , v i e l l e i c h t e t w a s s c h n e l l , a b e r s c h o n h a b e n w i r d i eD e k l a r a t i o n v o n F e l d e r n k e n n e n g e l e r n t . G u t , w e n n s c h o n , d e n ns c h o n . . .

array-typ: £Lj Index ty?

-->--- ARRAY —•>-4 4 _ _ _ _ 4 4

-'(TV-)--;---! einfacher typ I---—>—i.)")—>—ToF V->—j typ I—>

strukturierter typ (vorlaeufig):

+ 4

—>—I array-typ !—>—4 4

statt .) nh0( (, kgnfl mflnau^h 3 ur\cj l verwenden

Da ihr i nz wi sc henSyntaxdiagrarnrnen habt,l i e b e r ' m a l ' n B e i s p i e l

e r h e b l i c h e E r f a h r u n g m i t PA S C A L u n dn u r e i n e ku r ze E r l a e u te ru n g u n d d a fu e r

mehr»

t o a r r a y ( e n g l . ) , b e d e u t e t o r d n e n , a u f s t e l l e n ; d . h . d a s S y m b o lARRAY ze ig t an , dass e in s t ruk tur ie r te r Typ gewuenscht w i rd , e inFeld.

D ie e inze lnen Komponenten e ines so lchen Fe ldes werden durchIndizes gekennzeichnet. Bei der BIRNE-group waren es einfach dieZahlen 1 bis 6. Es muessen aber nicht notwendigerweise Zahlen alsI n d i z e s v e r w a n d t w e r d e n , d a r u m b e s c h r e i b t d e r e i n f a c h e Ty pzwischen f . und . ) , was fuer Wer te e r laub t s ind (s iehe auch vorh e r g e h e n d e s K a p i t e l ) . G l e i c h z e i t i g w i r d d u r c h d e n I n d e x t y pfes tge leg t , w iev ie le E lemente das Fe ld ha t !

O F u n d t y p d e fi n i e r e n d e n Ty p ,ARRAY haben.

I n Zukun f t f ae l l t es a l so j edem le i ch t ,w i r mal 1000 Var iab len zu defin ieren:

welchen alle Komponenten des

mit einem Schlag, sagen

VARtausendvariablen ARRAY (.1..1000.) OF CHAR;

96

Page 103: Pascal - Eine kinderleichte Einführung

Um euch vor dem ersten Programm einen Einbl ick in die Viel fal tder moegl ichen Deklarat ionen zu geben, e in ige Beisp ie le:

CONSTn = 8; letzteszeichen - 'S';

TYPEtbuchstaben = ARRAY (.'A'..letzteszeichen.) OF BOOLEAN;

tbaumarten - ( fichte, tanne, eibe, birke, buche );

tbaeume - ARRAY (.tbaumarten.) OF INTEGER;

tboolesch = ARRAY (.BOOLEAN.) OF anzahl;

t zah len * ARRAY ( . l . . n . ) OF -1 . .100 ;

VARbuchstaben

baumzahlprozentual

boole

zahlen

tbuchstaben;

tbaeume;ARRAY (.tbaumarten.) OF REAL;

tboolesch;

tzahlen;

D i e o b i g e n V e r e i n b a r u n g e n w e r d e n w i r u n t e n i n w e i t e r e nErlaeuterungen noch verwenden. Also im Auge behal ten! Die erstenG r u n d l a g e n f u e r u n s e r Q e k o — P r o g r a m m s i n d j a s c h o n g e l e g t ;Suchsp ie l , wo . . . ?

" V i e l e n D a n k , l i e b e A u t o r e n , d a s s i c h s o v i e l u e b e r PA S C A Ll e r n e n d a r f . S i e s i n d z u g u e t i g . E s g u a e l t m i c h a l l e r d i n g s d i ef u e r m i c h w i c h t i g e F r a g e , w i e i c h d e n n n u n d i e s o g e n a n n t e nKomponen ten ode r Fe lde le rnen te a l s Va r i ab len ansp rechen kann .Bi t te , geben Sie dazu e ine Er laeuterung."

Oh, n ich t zuv ie l des Lobes. S ie machen uns er roe ten .h ier d ie Antwor t au f ih re Frage:

Dennoch

array-konponentes

4 4->—! arrayvariable !-

+ 4>---((" -->-----i ausdruck i—:—>—(j1»—>

*-—- + VJ \ . ■ '-<-

E i n e n o r m a l e Va r i a b l e s p r e c h e n w i r u e b e r i h r e n N a m e n a n ,n a t u e r l i c h i s t d a s b e i F e l d e r n a u c h s o . A l l e i n , w e n n w i r e i n eeinzelne Komponente auswaehlen wollen, so muessen wir deren Indexn o c h h i n z u f u e g e n . I m I n t e r v i e w s a g t e n w i r : " H e r r B I R N E - g r o u pNr.1 " oder aehn l i ch .

97

Page 104: Pascal - Eine kinderleichte Einführung

Mit PASCAL gesprochen:dasselbe aus!

birnegroup C 1 J , d a s s a g t g e n a u

z 6 Ifldi,izes

1^ birneoroup[3] odtr ^BirneqroupMitglied Hr.Z

Der Ausdruck in array-koaponente muss e in Resul tat vorn selbenT y p l i e f e r n , w i e e i n f a c h e r T y p b e i d e r F e l d v e r e i n b a r u n gvorsch re ib t ! Zum versp rochenen Au fg r i f f de r ob igen Defin i t i onen :

buchstaben (. 'A' .)

buchstaben (. CHR ( 78 ) .)

boole (. TRUE .)

geht nur, wenn das Zeicben.weUnesCHR(78) liefert iV> Werberetc/iV„ (ebtes zeichen Ist!

boole (. baumzahl (. fichte .) > baumzahl (. tanne .) .) -<- Ver-Schacktelt^ber"erlaubt

zahlen (. 10 + 4 - x .) .Sehr schon,qber das, EroeWs muß i«1 Bereich 4..n liegen

prozentual (. 'A' .) Q£rit nicht I Index muß vom

Typ k bäum arten 5eir\ JJedesmal, wenn wir so eine /JÄ/wy-Komponente auswaehlen, dann

erha l ten w i r e ine Var iab le , d ie von dem Typ i s t , den w i r be i derVereinbarung hinter OF geschr ieben haben!! ! Zuweisungen usw. s indnach al len Regeln der Kunst er laubt:

oder

prozentual (. birke .) := baumzahl (. birke .) / gesamtzahl * 100;

boole (. (10 > x) AND (30-2 < y) .) := zahlen (. 4 .);

"Die Phantasie an die Macht" koennte man sagen. Erlaubt ist wasge fae l l t ; immer unsere Rege ln im H in te rkop f , na tuer l i ch !

Und als Belohnung jetzt das Baurn-Programrn:

9 8

Page 105: Pascal - Eine kinderleichte Einführung

PROGRAM baeume;

TYPEtbaumarten = ( fichte, tanne, kiefer, eiche, buche,

ei be, birke, sonstige );

tanzahl - ARRAY (. tbaumarten .) OF INTEGER;tprozent - ARRAY (. tbaumarten .) OF REAL;

VARbaumzahl : tanzahl ;prozentual : tprozent;

gesamtzahl : INTEGER;

a r t : t b a u m a r t e n ;

BEGIN

WRITELN ( 'Eingabe der Zahl der Baeume der einzelnen Arten:' );WRITELN;WRITELN ( ' Artenschiuessel:' );WRITELN ( ' 1 - Fichte; 2 - Tanne; 3 - Kiefer; 4 - Eiche' );WRITELN ( ' 5 = Eibe; 6 = Birke; 7 = Sonstige' );WRITELN;

(# Lesen der Baumzahlen u. Ermittlung des Gesamtbestandes #)

gesamtzahl := ö;

FOR art := fichte TO sonstigeDO BEGIN

WRITE ( 'Art;', ORD ( art );2, ' Anzahl: ' );READLN ( baumzahl (. art .) );

gesamtzahl := gesamtzahl + baumzahl (. art .);END; (* FOR a)

(* Berechnung der prozentualen Anteile der Arten amG e s a m t b e s t a n d d e r B a e u m e * )

FOR art :- fichte TO sonstigeDO prozentual (. art .) := baumzahl (. art .) / gesamtzahl * 100;

<# Tabellarische Ausgabe der Daten #)

WRITELN;WRITELN ( 'Baumbestand:', gesamtzahl:7;0, ' Baeume' );WRITELN;W R I T E L N ( ' B a u m a r t ; A b s o l u t ; P r o z e n t u a l ; ' ) ;

FOR art :- fichte TO sonstigeDO WRITELN ( ORD ( art );5,

baumzah l ( . a r t . ) :16 ,prozentual (. art .) :18:2, ' 7. ' ) ;

END.

y 9

Page 106: Pascal - Eine kinderleichte Einführung

D a s e i n z i g e M a n k o a f t d i e s e m f e i n e n F ' r o g r a m m i s t d i e f e h l e n d ew o e r t l i c h e E n t s c h l u e s s e l u n g d e r A r t e n . V i e l l e i c h t s p a e t e r m e h rdazu .

g e s a m t z a h l h a b e n w i r a l s R E A L - V a r i a b l e v e r e i n b a r t , w e i l w i ra n n e h m e n , d a s e s i m B e r e i c h d e r G e m e i n d e m e h r a l s M A X I N T, d . h .3 2 7 6 7 , B a e u m e g i b t ( e r i n n e r t e u c h a n d e n W e r t e b e r e i c h v o nI N T E G E R ) . Z u r E i n s p a r u n g e i n e r f O fl - S c h l e i f e l e g t e n w i r a u c hn o c h d i e B e r e c h n u n g d e r g e s a m t z a h l i n d i e d e s E i n l e s e n s d e r A nzahl .

W i r g l a u b e n e i n e w e i t e r e E r o e r t e r u n g z u m E f e i s p i e 1 e r u e b r i g ts i c h , s o d a s s w i r m i t e i n i g e n B e s o n d e r h e i t e n d e r F e l d e r w e i t e rmachen koennen.

M i t b a u m z a h l ( . fi c h t e . ) s p r i c h t m a n e i n E l e m e n t d e s F e l d e sa n . Ve r g n u e g t e s Z u w e i s e n i s t e r l a u b t :

baumzahl (. fichte .) := baumzahl (. tanne .) (* z. B. *)

E i n C l o u v o n P A S C A L i s t a b e r , d a s s s e l b s t V a r i a b l e ns t ruk tu r i e r t e r Typen i n Zuwe i sungen vo rkommen due r fen , so langesie den selben Typ haben!

VARfeldl, feld2 : ARRAY (. 1..100 .) OF CHAR;

f e l d 3 : A R R AY ( . 1 . . 1 0 0 . ) O F B O O L E A N ;

f e l d 4 : A R R A Y ( . 1 . . 5 0 . ) O F C H A R ;

f e l d S : A R R A Y ( . 1 . . 1 0 0 . ) O F C H A R ;

fe ld l := fe ld2;

fe ld l := fe ld3;

1st erlautt. Die Werte aller Hementevon {elc{3, werc/en den entsprechenden

Komponenten von PetcM ?uoewiesen.

oeht weht.' 3i'e Wornponer&er\[ype-n

stimmen nicW uberein!

feld2 := feld4; unerlaubt! $ie leider haben unterschiedliche Ansaht von Elementen.

fe ld2 : - fe ld5; Wq, wq£ ajauht ihr??

Z u m l e t z t e n B e i s p i e l : D a s f u n k t i o n i e r t n i c h t ! W a r u m ? B e i d eF e l d e r h a b e n d o c h g l e i c h e n K o m p o n e n t e n t y p u n d g l e i c h e nIndexbere ich.

Macht n ich ts , es geht n ich t . So lange d ie Fe lder n ich t mi t e inere i n z i g e n ( a l s o d e r s e l b e n ) Ve r e i n b a r u n g d e fi n i e r t w e r d e n , d e n k tCPU (genaLier das Ueber set zungsprogr amm), dass feld2 und feldSeinen unterschie l ichen Typ haben.

100

Page 107: Pascal - Eine kinderleichte Einführung

Besser waere:

TYPEtfeld : ARRAY (. 1..100 .) OF CHAR;

VAR oderfe ld l , f e l d2 , f e l d5 : t f e l d ;

VARf e l d l , f e l d 2 ; t f e l d ;f e l d S : t f e l d ;

S t e l l t e u c h d a s s oOperanden rechts undwandt wurde.

vorl inks von

Zuweisungen k lappen nur, wenn fuerd a s s e l b e S c h n i t t m u s t e r v e r -

f e l d l u .h e r g e s t e l l t ,

f e l d 2 w u r d e n m i t d e m g l e i c h e n S c h n i t t m u s t e rb e i f e l d S ( v o r d e m Ve r b e s s e r u n g s v o r s c h l a g ) w u r d e

aber e in neues angelegt , a ls CPU auf das Wort ARRAY gestossenwar.

M i t d e r v e r b e s s e r t e n Ve r e i n b a r u n g u e b e r t f e l d p a s s i e r t s o e i nMahleur nicht, da immer der tfeld-Ba&te-lbogen genommen wird.

101

Page 108: Pascal - Eine kinderleichte Einführung

3 . 15 . 1 . W i r en tschw inden in hoehere D imens ionen

Mit e in igem Verwundern wird machern best immt aufgefa l len sein,dass in der Definition von ARRAY-TYP folgendes auftauchte:

4 f ^

... —>---(. ,-—>-;-—! einfacher typ !---—>—r .))— ...a t f v v S

l I \ i

Das zu erklaeren ist Aufgabe dieser kurzen Abhandlung.

Um mi t den Kis tendiagrammen ver taut zu b le iben, h ier mal 'wasfuer den hapt isehen Lerntyp:

VARfeld : ARRAY (. 1..6 .) OF INTEGER;

Ok, das sieht ja noch jeder ein, was aber, wenn wir eine solcheVere inba rung vo rnehmen (o f fens i ch t l i ch i s t s ie nach dem Syn taxdiagramm er laubt) :

VARfeld : ARRAY (. 1..3 .) OF ARRAY (. 1..3 .) OF INTEGER;

W e r d e n n i c h t 3 F e l d e r d e s Ty p s A R R AY ( . 1 . . 3 . ) O F I N T E G E Ru n t e r d e m N a m e n f e l d z u r Ve r f u e g u n g g e s t e l l t ?

feldM feldU][3]

— £WßJEIId [3]

G e n a u , u n d s i e l a s s e n s i c h w i e g e z e i g t a n s p r e c h e n . W i l l m a nd a n n a b e r n u r d e n 2 . K a s t e n d e s 1 . F e l d e s , s o s c h r e i b t m a n :

feld (. 1 .) (. 2 .)

Spricht einanies Feld an3

wählt aus dem angesprochenenFeld eine Komponente aus.

io:

Page 109: Pascal - Eine kinderleichte Einführung

U n d s c h o n h a b e n w i r e i n z w e i d i m e n s i o n a l e s F e l d v e r e i n b a r t . F a s tw i a i m r i c h t ' g e n L e b e n , d o r t g i b t ' s a u c h s o l c h e S a c h e n , z . B .S c h a c h f e l d e r o d e r S t u n d e n p l a e n e .

TYPEfigur - ( koenig, bauet-, dame, laeufer, springer, türm, leer );

fach - ( mathe, englisch, deutsch, geschi >;t a g - ( M , d i , m i , d o , f r , s a ) ;

VARs c h a c h : A R R AY ( . ' A ' . . ' H ' . ) O F A R R AY ( . 1 . . 8 . ) O F fi g u r ;

p l a n : A R R AY ( . t a g . ) O F A R R AY ( . 1 . . 6 . ) O F f a c h ;

S o k a n n m a n d i e F i g u r , d i e a u f e i n e m F e l d s t e h t , f e s t l e g e n ,i n d e m m a n

s c h a c h ( . ' E * . ) ( . 4 . ) : - b a u e r s c h r e i b t ,

o d e r d a s F a c h i n d e r 4 . S t u n d e a m M i t t w o c h

p l a n ( . m i . ) ( . 4 . ) ; - g e s c h i f e s t l e g e n ,

o d e r e i n e n g a n z e n T a g , m i t a l l s e i n e n S t u n d e n

p l a n ( . d o . ) a n s p r e c h e n .

stäx Mo. Di. Mi. Do..

A f,i!r,. Engl. /

2 hcseh'. Frf /

3 Mal, Molk Milke

l\ fcwkh Moth« ttahi

5 Gec .-

<o H- Hiaf».Std

Mo, i swi pUtrv,o][T]

Z u g e g e b e n e r m a s s e n i s t d a s e i n w e n i g u m s t a e n d l i c h , w e r s c h r e i b ts c h o n b e i v i e r d i m e n s i o n a l e n F e l d e r n ( d i e g i b t ' s ! ) s c h o n 4 m a lARRAY hin? Me, ne, ne, da macht man das so:

VARp a n d i a e n s i o n a l : A R R AY ( . 1 . . 4 , 1 . . 5 , 1 . . 3 , 1 . . 6 . ) O F I N T E G E R

103

Page 110: Pascal - Eine kinderleichte Einführung

Ein 4—d imens iona l es Fe ld . Se ine JW7£G£/ } -Komp onen ten werdend a n n z . B . s o e r m i t t e l t :

pandimensional (. 2, 3, 1, 6 .)

D a s z u z e i c h n e n , e r s p a r t u n s . M i t 3 D i m e n s i o n e n g e h t ' s g e r a d enoch:

VARdimSd : ARRAY (. 1..3, 1..3, 1..2 .) OF CHAR;

dirvt3d [3,3 ,Ä]

a.3)iw-

dim [3-, 3-, 4]

3.3)tmenS»c»n

/Wfbaii des Feldes dimM- Herke'.clirn3d [3] w<We dieMenstruldur ansprechenderen Kosten mit * gekennzeichnetSind (diso ein Ä-dimensiorsol«, Teld)!

We r d a f u e r d e n B a s t e i b o g e n m a c h e n m o e c h t e , s o l l s i c h r u h i gmelden. CPU hat ganz schoen zu keulen.

Ve r s t e h t s i c h n a t u e r l i c h v o n s e l b s t , d a s s a l l e A u s d r u e c k e , d i ee i n e n I n d e x f u e r e i n e D i m e n s i o n b e r e c h n e n , n u r W e r t e i mv e r e i n b a r t e n B e r e i c h l i e f e r n d u e r f e n . d i m 3 d ( . 4 , 7 , 9 . ) w a e r ealso schon mal nicht ok.

Uebe r l eg t ma l , w ie du rch d ie vo rges te l l t en Ve rbesse rungen d ieFelder schach und plan neu vereinbart werden koennten.

Wir haben schon eine Menge gesehen, was man mit ganzen Feldernans te l len kann, nur e ines geh t n ich t :

READLN ( feldl ); oder WRITE ( feld2 );

So schoen es waere, aber Feldinhalte lassen sich nur ueber ihreKomponenten einlesen oder ausgeben. Weiss doch jeder, dass READu n d WR ITE n u r m i t Va r i a b l e n b zw. Ko n s ta n te n f u n k t i o n i e re n , d i eeines einfachen Typs sind. Nach dem Motto: Simpel ist schoen.

Eine sehr sinnvolle, NICHT STANDARTMAESSIGE Einschraenkung desz u l e t z t G e s a g t e n f o l g t s o g l e i c h . . .

104

Page 111: Pascal - Eine kinderleichte Einführung

O 1 er •"> Aoa ins t a l1 . S tandar t s

St immt, in d iesem Kapi te l beschreiben wir e in ige Funkt ionen undMoegl ichkeiten, die nicht im Standard-PASCAL vorgesehen sind, all e r d i n g s i n d e n m e i s t e n D i a l e k t e n ( w i r b e n u t z e n h i e r T U R B OPASCAL) in der einen oder anderen Form zu finden sind.

U n d d a i h r e h e r m i t e i n e m M i c r o c o m p u t e r - PA S C A L i n K o n t a k tk o m m t , a l s m i t e i n e r S t a n d a r t i m p l e m e n t a t i o n , d a c h t e n w i r u n s ,dass d ie In fos h ie r ganz in te ressant se ien .

M i t e u r e m b i s h e r i g e n W i s s e n k o n n t e t i h r t o l l Z a h l e n u n dBuchstaben einlesen und ausgeben. Was ist aber zu tun, wenn manz.B. seinen Namen oder einen laengeren Text eingeben moechte?

Das kurze Programm oeffnet die erste Tuer dazu:

PROGRAM liesname;

VARname : STRING (. 20 .);

INTEGER;

BEGIN

WRITE ( 'Bitte Namen angeben: ' ); READLN ( name );WRITELN;

FOR i := 1 TO 10DO WRITELN ( ' ' : i , 'Hal lo ' , name );

END.

Die Ausgabe is t e twas aufgepeppt , ansonsten e in Simpel l is t ing.

N e u i s t d i e Ve r e i n b a r u n g d e r Va r i a b l e n n a m e . M a n k a n n s i c hd iese ungefaehr so vors te l len :

VARname : ARRAY (. 1. .20 . ) OF CHAR; (# is t n icht das gle iche

wie STRING ( . 20 . ) /Nur ungefaehr/ #)

W i c h t i g i s t : D a s F e l d h a t d e n K o m p o n e n t e n t y p C H A R . W i r d e i n eVa r i a b l e v o m Ty p S T R I N G ( e i n n e u e r Ty p , a b e r a u c h v o r d e fi n i e r t )v e r e i n b a r t , s o b e s t e h t s i e a L t s l a u t e r c h a r a c t e r n .

Alles, CHAft-torioibtai, die unter dem 3e2e?/cWr/ i ^ r t c i m e 2 u s f t m » « e ^ ^ e -

LLLÜ-LU !J U 1.I..UJLLLÜ f°ßt W-

105

Page 112: Pascal - Eine kinderleichte Einführung

S t r i n g s k e n n e n w i r j a s c h o n a u s d e n K o n s t a n t e n Ve r e i n b a r u n g e n .D o r t w a r e i n S t r i n g f o l g e n d e s :

String:

4 4

•>---(7>">---7-! character !--j—>--(»"J—>* + + V

J e t z t d e fi n i e r e n w i r a b e r e i n e n r i c h t i g e n s t r i n g - t y p :

string-typs

S ~ * \ - + ♦--->---, STRING ,-->--/(.}—>—: konstante !—>—(.)Y->

v _ y - J + 4 ^ y

D i e K o n s t a n t e m u s s i m B e r e i c h v o n 1 . . 2 5 5 s e i n ! S i e g i b t a n ,w i e v i e l e Z e i c h e n d i e V a r i a b l e f a s s e n k a n n , d . h . w i e l a n g d e rS t r i n g , d e n w i r d e r Va r i a b l e n z u w e i s e n w o l l e n , m a x i m a l s e i n d a r f- l e i d e r e b e n h o e c h s t e n s 2 5 5 Z e i c h e n l a n g .

Z u r Ve r a n s c h a u l i c h u n g e i n i g e e x a m p l e s :

VAR

n a m e : S T R I N G ( . 1 0 . ) ; M i t I L _ l L J l _ J

t a g : S T R I N G ( . 2 . ) ; I I Iw L

automarke : STRING (. 20 .) ; I 1 I L_ii i 3 * 1 1 0

Die einzelnen Buchstaben koennen wie bei normalen Feldern mit

n a m e ( . 1 . ) o d e r t a g ( . 2 . ) o d e r a u t o m a r k e ( . 1 5 . )

angesprochen werden. MERKE: Die untere Indexgrenze ist 1 !

WertZuweisungen bewirken dieses:

v o r h e r n a c h h e r

n a m e : = ' P e t e r ' ; I I 1 I l I l I I I I | P | e i t i e i r | i i | | I

name := 'He inz -Guenter ' ; l he | t )e ) r ) | | I I i lÜ |e | i \n \ l \~ i&m lepr i i

Beim zweiten Mal wird einfach der Namensrest, der name ueber dieerlaubten 10 Zeichen hinaus fuel len wuerde, weggelassen.

U m m i t S t r i n g s r i c h t i g a r b e i t e n z u k o e n n e n , e x i s t i e r e n n o c he i n e M e n g e v o r d e fi n i e r t e F u n k t i o n e n , d i e w i r i m F o l g e n d e n m a lvors te l len rnoechten. Ih r koennt s ie auswendig le rnen oder immerwieder nachsch lagen, auf jeden Fa l l s ind s ie ex t rem nuetz l ich .

106

Page 113: Pascal - Eine kinderleichte Einführung

E i n g r o s s e s , t o l l e s , w a a a a a a h n s i n n i g s c h i c k e s P r o g r a m m , i n d e ms i e a l l e w i e d e r a u f t a u c h e n , w i r d d a n n d i e A r b e i t s w e i s e m i t i h n e ni m E r n s t f a l l v e r d e u t l i c h e n .

Funk t ionen zum Umgang mi t S t r inass

LENGTH ( string )

Gibt die Anzahl der Zeichen in str ing als INTEGER-Groessezurueck. string ist eine Variable oder Konstante.

i := LENGTH ( 'Hallo' ) hinterher hat i den Wert 5i : = L E N G T H ( " ) " 0 ,

denn " ist der LEERSTRING.i :- LENGTH ( '123456789' ) hinterher hat i den Wert 9

CONCAT ( quellel, quelle2, ... )

E r g i b t e i n e n n e u e n S t r i n g , i n d e m a l l e S t r i n g s ( q u e l l e l ,q u e l l e 2 , . . . ) a n e i n a n d e r g e h a e n g t s i n d . q u e l l e l u s w. k o e n n e nKonstanten oder Variablen sein.

«sl := CONCAT ( 'Ich sage', ' guten ', 'Tag' ) nachher hat

sl den Inhalt 'Ich sage guten Tag'.s l : = C O N C A T ( s l , ' z u D i r ' ) n a c h h e r h a t

sl den Inhalt 'Ich sage guten Tag zu Dir'.

COPY ( quelle, index, laenge )

q u e l l e m u s s e i n S t r i n g s e i n , i n d e x u . l a e n g e I N T E G E R -Ausdruecke. Es wird die Zeichenkette zurueckgegeben, welche abquelle (.index.) beginnt und laenge Zeichen umfasst.

WRITE ( COPY ( 'Viel Spass wuensche ich', 6, 14 ) ) ergibtd ie fo lgende Ausgabe: Spass wuensche

POS ( muster, quelle )

Ergibt den Index in quel le, ab welchem der Text muster inquelle ist als INTEGER-Wert.

W R I T E ( P O S ( ' I c h ' , ' D u u n d I c h ' ) ) s c h r e i b t 8WRITE ( POS ( 'ich', 'Ihr koennt mich mal' ) ) schreibt 13W R I T E ( P O S ( ' D u ' , ' N i c h t d r i n ' ) ) s c h r e i b t 0 ,

we i l 'Du ' n ich t in 'N ich t d r in ' i s t .

107

Page 114: Pascal - Eine kinderleichte Einführung

DELETE ( ziel, index, laenge )

Loescht aus der STRING-Variablen ziel die Zeichenkette, die beiziel (.index.) beginnt und laenge Zeichen umfasst.

s l := 'E in Be isp ie l m i t Pfi f f ; DELETE ( s l , 1 ,4 ) h in te r -laesst in sl den Str ing 'Beispiel mit Pfiff .

INSERT ( quelle, ziel, index >

q u e l l e i s t e i n e S t r i n g - K o n s t a n t e o d e r Va r i a b l e , z i e l e i nSTRING-Variable und index ein INTEGER-Ausdruck. Es wird quelle inziel ab ziel ( . index.) eingefuegt.

s l := 'Ein Tag' ; INSERT ( ' schoener ' , s l , 4 ) ergibt insl den neuen Inhalt: 'Ein schoener Tag'.

W i r h o f f e n , d i e B e i s p i e l e g e b e n g e n u g A u f s c h l u s s u e b e r d i eF u n k t i o n e n u n d M o e g l i c h k e i t e n d i e s e r v o r d e fi n i e r t e n R o u t i n e n .E x p e r i m e n t i e r t e i n f a c h m a l m i t i h n e n u n d s c h a u t e u c h a n , w a s s oherauskommt.

E r w a e h n t s e i n o c h , d a s s - z u m i n d e s t i n T U R B O - PA S C A L - f o l g e n d e sg l e i c h w e r t i g i s t :

sl := CONCAT ( '123', '345', '567' );

sl :- '123' + '345' + '567';

E i n L e e r s t r i n g , o b e n t a u c h t e r k u r z m a l a u f , i s t e i n eZe ichenke t te m i t de r Laenge 0 , a l s Kons tan te ' ' .

D a m i t d a s G a n z e e i n e n r u n d e n A b s c h l u s s v o r d e m e r s t e nMammutbeispiel bekommt, noch ein paar nuetz1iche Dingelchen:

CLRSCR

ist eine vordefinierte Funktion, die den ganzen Bildschirm leermacht.

CLREOL

ist auch vordefiniert und loescht alle Zeichen in der Zeile, inwelcher der Cursor (die Schreibmarke des Rechners) steht, ab dessen momentaner Position.

G0T0XY ( x , y )

s te l l t den Curso r i n d ie Spa l te x i n de r Ze i l e y au f demSchirm. Folgende Schreib- od. Leseoperationen erfolgen dann vondort, x muss im Bereich 1..80, und y im Bereich 1..24 liegen.

Spx[[eJ/tek/- y<, 2v -Spotte &ö /Zeile 4

r , - < Z ~ ~ ^ B i l d s c h i r m108

Page 115: Pascal - Eine kinderleichte Einführung

C L R E O L u s w. g i b t ' s a u c h n i c h t i m S t a n d a r d , a l s o i m m e r e r s tvergewissern, ob sie vorhanden sind. Bei TURBO schon.

"Wo l l e ma ' s h ine in l asse? Naha l l amarsch . . . "

Hier das b isher aufwendigste und schoenste Programm, fuer daskeine Muehen und Kosten gescheut wurden!

109

Page 116: Pascal - Eine kinderleichte Einführung

PROGRAM zeileneditor;

Mit diesem Programm werden die TURBO-Funktionen INSERT, DELETE, POSCONCAT, LENGTH, GOTOXY, CLREOL, CLRSCR eingefuehrt.

//// Sie gehoeren nicht zum Standard von PASCAL ////

zeileneditor ermoeglicht die Eingabe einer Textzeile auf dem Schirm.Diese wird in der Variablen zeile gespeichert.

Um die Eingabe einfach zu gestalten, ist die Verwendung mehrererSteuerfunktion vorgesehen. Diese werden saemtlich durch Control-Car acter angesprochen.Control-Character bedeutet, dass die Taste mit der Aufschrift CTRLund GLEICHZEIT IG eine Buchstaben taste gedrueckt werden.

Schreibweise: 'SS bedeutet CTRL-S, also Taste CTRL und Taste S

Steuerfunktionen in diesem Programm:

AS : Ein Zeichen zurueck, ohne es zu zerstoeren.

AP : E in Ze ichen vorwaer ts .

AF : Eine Zeichen kette in Richtung Zeilenende suchen undCursor darauf positionieren.

Atf ; oder der Rueckwaertspfeil ( <- ). Loescht das Zeichenhinter dem Cursor (in Richtung Zeilenanfang).

"■G : Loescht das Cursorzeichen.

CR : bedeutet die Taste RETURN oder ENTER. Schliesst dieEingabe ab.

CONSTmaxlaenge =60;

C T R L S = 1 9 ; C T R L D = 4 ; C T R L F = 6 ; C T R L H = 8 ; C T R L G = 7 ; C R = 1 3 ;

VARsuchstring, zeile : STRING (. maxlaenge .);

neuindex, index : 1. .maxlaenge;

c h : C H A R ;

110

Page 117: Pascal - Eine kinderleichte Einführung

BEGIN

(# ++++++++++++ Bildschirm fuer Eingabe der Zeile vorbereiten ++++++++++++ *)

C L R S C R ; C » B i l d s c h i r m l e e r m a c h e n * )

WRITELN ( 'Steuerzeichen:' );WRITELN ( ,AS = Cursor nach l inks; "D - Cursor nach rechts;' );WRITELN ( ""G = Cursorzeichen loeschen; '-H - Zeichen vorCursor loeschen;' );WRITELN ( fAF - Zeichenkette in Richtung Zeilenende suchen;' );WRITELN ( 'CR = Abschliessen der Eingabe.' );

GOTOXY ( 1, 12 ); WRITELN ( 'Zeile: ' );W R I T E ( ' A ' , ' A ' ; m a x l a e n g e - 1 ) ;

C# +++++++++++++++¥■++■&■/■ Zeile jetzt endlich einlesen ++++++■/■++■/■+++++■/■+■/■++++ #)

z e i l e : = " ; ( » Z e i l e l e e r m a c h e n * )index := 1;

REPEAT

GOTOXY ( index +7, 12 ); READ ( KBD, ch );

(# +++++++++ falls kein Steuerzeichen, dann in Zeile einfuegen +++++++++ #)

IF ch >~ ' 'THEN BEGIN

IF index > LENGTH ( zeile ) (u zeichen am zeilenende #)THEN BEGIN

WRITE ( ch );zeile := CONCAT ( zeile, ch );

END

E L S E B E G I N ( # z e i c h e n e i n f u e g e n * )INSERT ( ch, zeile, index );WRITE ( COPY ( zeile, index,

LENGTH ( zeile ) - index + 1 ) );END;

IF index < maxlaengeTHEN index := index * 1;

END

Oü~f~t~t-++++++ ab hier die Steuerzeichen interpretieren +++++++++++++#)

ELSE CASE ORD ( ch ) OF

CTRLS : IF index > 1THEN index := index - 1ELSE WRITE ( CHR ( 7 ) ); f*f einmal piepen *)

CTRLD : IF index < (LENGTH ( zeile )+l)THEN index ;= index + 1ELSE WRITE ( CHR ( 7 ) );

111

Page 118: Pascal - Eine kinderleichte Einführung

CTRLH : IF index > 1THEN BEGIN

index ;= index - 1;DELETE ( zeile, index, 1 );

GOTOXY ( index-f-7, 12 );WRITE ( COPY ( zeile, index,

LENGTH ( zeile ) - index + 1 ) );

CLREOL;END

ELSE WRITE ( CHR ( 7 ) ) ;

CTRLG : IF index <= LENGTH ( zeile )THEN BEGIN

DELETE ( zeile, index, 1 );

WRITE ( COPY ( zeile, index,LENGTH ( zeile ) - index + 1 ) );

CLREOL; (* weil jetzt letztes zeichen inzeile doppelt auf schirm ist *)

ENDELSE WRITE ( CHR ( 7 ) );

CTRLF : BEGINGOTOXY (5, 1 );WRITE ( 'Suchstring: ' ); CLREOL; READLN ( suchstring );

neu index := POS ( suchstring, zeile );

IF neuindex > indexTHEN index :~ neuindex;

END;

CR (# RETURN #)

ELSE WRITE ( CHR ( 7 ) ); (* unerlaubtes zeichen kommentieren *-)

END; (* von CASE #)

UNTIL ORD ( ch ) = CR;

WRITELN; WRITELN;

WRITELN ( 'Das Ergebnis: ', zeile );

END.

i i :

Page 119: Pascal - Eine kinderleichte Einführung

H a , w e n n i h r d e n k t , j e t z t s e i g e n u g , o h n e i n . B e v o r w i r e u c hin 's naechs te Kap i te l en t lassen noch e ine Wissenserwe i te rung:

Wir erwaehnten, Str ings haetten eine best immte Laenge, die manmit LENGTH feststel len kann. St immt, dann gi l t aber auch:

'Hal lo ' < 'Hal lo ihr da '

D e r S t r i n g ' H a l l o ' i s t k l e i n e r ( k u e r z e r ) a l s d e r S t r i n g ' H a l l oi h r d a ' . S i e h t j e d e r e i n . E s g e l t e n d a h e r d i e Ve r g l e i c h s o p e r a -t or en auch fuer Str i ng s!

Stop, s top, es geht noch wei ter. Was is t mi t :

'Ha l lo ' < 'Ho l la '

S ie s ind be ide g le i ch l ang . Denk . . . . Es i s t naeml i ch so , dassn i ch t nach de r Laenge e i nes S t r i ngs en t sch i eden w i r d , ob e i ne rk le ine r oder g le i ch e inem anderen i s t , sondern nach dem Inha l t .Wi l l sagen:

CPU verg le icht -an den Ze ichenket tenanfaengen beg innend— d ieZeichen in den Str ings. Je nach dem, ob die Ordnungszahl gleich,k le iner oder g roesser i s t , a ls d ie des Ze ichens aus dem anderenS t r i n g , w i r d e n t s c h i e d e n , o b d i e S t r i n g s g l e i c h , k l e i n e r o d e rn i c h t s i n d . Z u k o m p l i z i e r t ? B e i s p i e l e :

' H a l l o ' = ' H a l l o ' T R U E , i s t k l a r

' H a l l o ' < ' H o l l a ' T R U E , ' a ' < ' o ' g i l t /

' H a l l o ' < ' H a l l o l ' T R U E , w e i l d . e r s t e S t r i n gkuerzer is t .

' a b c d e ' > ' a b c E F G ' T R U E , w e i l ' d ' > ' E ' i s t .

K o n k r e t k a n n m a n d i e s a u s n u t z e n , w e n n S t r i n g s s o r t i e r t( a l p h a b e t i s c h ) w e r d e n s o l l e n o . a e . .

113

Page 120: Pascal - Eine kinderleichte Einführung

£>. 1 6. Eine Menge Neues

'ne ganze Menge Obst , ge l l? Da g ib t 's e ine B i rne, e inen Apfe l ,Ananas und Bananen. Man koennte diese tol len Fruechte eigent l ichzu einer Menge, genannt "Obst", zusammenfassen.

Hinterher sind wir dann gewappnet, wenn jemand kommt und fragt:

"Habt ihr in der Menge Obst auch Kirschen?""Nein, in der Menge Obst s ind Ki rschen n icht enthal ten."

oder

"Gebt mir b i t te den Apfe lin eurer Menge Obst?"

. . . D a n k e . I s t j e t z t n o c h e i n A p f e l

"Nein, natuer l ich nicht . Du hast ihn gerade bekommen."

Genug des Kau fmann-Sp ie l s . Gesehen hab t i h r j eden fa l l s , dassman Dinge in Mengen (engl. set = Menge) zusammenfassen und mitd iesen auch Operat ionen ausfuehren kann. Fragen, ob e in Ding ind e r M e n g e i s t , e i n E l e m e n t a u s d e r M e n g e e n t f e r n e n u n d n o c hv ie les mehr.

M a t h e m a t i s c h Vo r b e l a s t e t e n u n t e r e u c h i s t d a s k l a r e r w e i s enichts Unbekanntes mehr. Die kennen schon die Menge der natuer-l i chen Zah len (^ oder d ie der Ganzen Zah len"^

Be l ieb t i s t d ie Dars te l lung mi t te ls Venn-D iagrammen:

Menge "Obst1 Menoe" FisschrankiMl '

Zwei Mengen, wie wir s ie im taegl ichen Leben mi t wenig Muehefi n d e n .

Wer haet te es n ich t schon geahnt? Was im A l l tag e ine gewisseB e d e u t u n g s p i e l t , d a s s k a n n i n PA S C A L e i g e n t l i c h a u c h n i c h tf e h l e n . N u r w e r d e n d o r t M e n g e n n i c h t m i t k l e i n e n K r e i s e nd a r g e s t e l l t o d e r d e fi n i e r t , s o n d e r n s o :

114

Page 121: Pascal - Eine kinderleichte Einführung

set-typ:

— - > . — x t--->--CSET)—>---lOFV->—! einfacher typ i—>

strukturierter typ (vorlaeufig):

4 4- - ->--—! array- typ ! - - )

V + + vJ 4 4 j'— -! set-typ I--1

4 4

I n d i e s e r W e i s e k o e n n e n w i r a l s o M e n g e n a l s Va r i a b l e n d e fi n i eren , i n dem w i r s i e a l s vom se t - t yp se i end dek la r i e ren .

N a c h O F i s t d i e G r u n d r n e n g e a n z u g e b e n , s i e i s t e i n S k a l a r t y po d e r U n t e r b e r e i c h s t y p , a u s d e r d i e z u k u e n f t i g e n E l e m e n t e , w e l c h ew i r i n d i e M e n g e ( M e n g e n v a r i a b l e ) t u n w o l l e n , s e i n d u e r f e n .

VARx : SET OF 1..3

M i t d i e s e r D e k l a r a t i o n k a n n x d i e f o l g e n d e n I n h a l t e h a b e n :

l e e r e n t h o L t o i f j { j - * » r „ ,i W t l e W < - " * < M H i { d , l ]

D i e S c h r e i b w e i s e n m i t - C u n d > s i n d d i e z u g e h o e r i g e nm a t h e m a t i s c h e n . Z w i s c h e n - C u n d 3 - s t e h e n d a n n d i e i n d e r M e n g eb e fi n d l i c h e n E l e m e n t e a u s d e r G r u n d r n e n g e .

N o c h e i n i g e B e i s p i e l d e fi n i t i o n e n :TYPE

tzeichen = SET OF ' '..'z';

tfärben - (rot, gruen, blau, gelb, braun);tfärbe = SET OF tfarben;

VARx , y , z : S E T O F 0 . . 5 ;

farbenmenge : tfarbe;

darstellbar : tzeichen;

c h : C H A R ;i : I N T E G E R ;

115

Page 122: Pascal - Eine kinderleichte Einführung

x, y, farbenmenge usw. s ind Mengenvar iab len. S ie koennen e ineMenge aufnehmen. Wie aber koennen wir ihnen eine solche geben?M i t d e n o b i g e n D e k l a r a t i o n e n a l l e i n e k o e n n e n w i r n a e m l i c h n u rw e n i g a n f a n g e n . Z u f r a g e n , o b 3 i n d e r M e n g e x i s t h a t n o c hke inen Zweck . Davor ha t PASCAL d ie Notwend igke i t gese tz t , x , yusw. erstmal Elemente zuweisen zu muessen.

Hier sind t und] statt (. .) WogUdi N

a e n g e : ^ —

- . > . . / r . ) — > - r > r - - - ( • " > > - >r ~ \ '

-j-\ ...—>—! ausdruck !—>—7- "4—>—• ausdruck !—>—r~. .. j—>—! ausdruck !—>—7—+V - t * * V1 I

r \

D ie Ausd ruecke muessen dabe i Wer te haben , d ie dem Typ de rGrundmenge entsprechen. Beispiele zu obigen Vereinbarungen:

( . r o t . . b l a u , b r a u n . ) o d e r ( . 0 . . 5 . ) o d e r

( . ' A ' . . ' Z ' , ' a ' . . ' z ' . ) o d e r ( . ' 1 ' , ' 2 ' , ' 3 ' . ) o d e r

( . r o t , b l a u , g e l b . ) o d e r ( . 0 . . 1 , 2 , 3 . . 5 . ) o d e r

( . C H R ( 6 5 ) . . C H R ( 7 0 ) . ) o d e r ( . i - 1 . . i + 1 . ) o d e r

(. PRED (gruen), SUCC (blau)..braun .)

S c h o n b e i m O b s t h a e n d l e r s a h e n w i r d a s Vo r h a n d e n s e i n v o nOpera t ionen m i t Mengen . Desg le i chen s ind s ie in de r Mathemat i kz u fi n d e n . D a d e r e n S c h r e i b w e i s e n j e d o c h n i c h t s o e i n f a c h m i te i n e r n o r m a l e n T a s t a t u r z u e r r e i c h e n s i n d , g e l t e n d i e s eKon ven t i on en:

in PASCAL so:

( . . . . )

+

*

Bedeutung: math. Schreibweise:

Menge £ ]Vere in igung U

Durchschn i t t f \

Di f ferenz \

Tei1menge c.Obermenge ^

Element von £leere Menge P oder {}G l e i c h h e i t =

Ung le i chhe i t j .r

IN

(. .

116

Page 123: Pascal - Eine kinderleichte Einführung

Die Ope ra to ren + , - * und d ie Ve rg le i hsope ra to ren bekommene i n f a c h e i n e n e u e B e d e u t u n g , w e n n s i e a u f M e n g e n a n g e w a n d tw e r d e n . A d d i e r e n u s w. k o e n n t i h r Z a h l e n w e i t e r h i n d a m i t , k e i n eSorge.

Neu ist nur IN. Damit kann man schnel l pruefen, ob ein Wert ine iner Menge entha l ten is t :

S t a t t s c h r e i b t m a n e i n f a c h :

IF (ch = 'A') OR (ch( c h - ' O O R ( c h( c h - ' + ' )

THEN ...

'B ') OR'X') OR

I F c h I N ( . ' + ' , ' A ' . . ' C ,'X ' . )

THEN ...

a n d e r e M o e g l i c h k e i t e n :

WHILE ch IN darstellbarDO...

IF gruen IN farbenmengeTHEN ...

REPEATm m *

UNTIL ORD ( ch ) IN (.1..26.)

WHILE CHR ( i ) INda rs te l l ba r + ( . 'Q ' . )

DO ...

IF i+l IN x*yTHEN...

Hmmrn, e i n e n M o m e n t , Mensch, wenn nun aber n icht a l le denvol len Plan von der Arbei t mit Mengen haben? Die wissen dann jagar nicht so recht, was die ganzen famosen Operatoren so tun! Damuss Abh i l fe her. Kurze Er laeu te rungen mi t k indgerech ten B i ldernzu den einzelnen Operationen:

VARa, b, c : SET OF 1..5; Vorher nachker:

ab

1, 2, 3 .);4, 5 .);

C i : b : q ; ^O 0 ©c :- a + b;

c * (. 2, 4, 6, 1 .);

a - (. 2 .);

b:

117

Page 124: Pascal - Eine kinderleichte Einführung

b : = ( . . ) ; M A

b:oa = c l i e f e r t FA L S E 6) Es stimmen nicht O.U.C

Elwenle. uDsrein

a <> ( . 1 , 3 . ) l ie fe r t FALSE

c < = ( . 1 . . 4 , 5 , 6 , 7 , 8 . ) l i e f e r t T R U E

c >= a l i e fe r t TRUE

"© Jet2-t stiwwen al(£Elemente überein,deshalb Liefert offlLSF

eist einefe'ilfYiertciel

C ist eine Obermwe

Mi t dem neuen Typ e rg i b t s i ch j e t z t auch e i ne Aende rung desBegr i f fes ausdruck. H ier d ie neue Vers ion von FAKTOR dafuer :

faktor: Vergleichsoperator:

*-■

4 4

J Qenge j4 1 *

4 4 •

j v a r i a b l e ! ♦4 4 J

4 1 j

-i vorzeichenlose Konstante !—*4 + j

4 4

—i ( ^ ! ausdruck ! 0>-r— t +

■■(HOT,—->—i faktor !-— 4 +- > +

V V V V V Vt i l i

VN, . "V /V 'TV 'i i r i i i i■ i i i ii._>__i_>_i-_>-i_>.i._>_i_>_^__>

Se id i h r schon da rau f gekommen , dass man nun auch ganze Fe lde rvon Mengen ve re inbaren kann? E twa in de r We ise :

TYPEtmenge - SET OF 1..200;

t fe ld = ARRAY (A. .10. ) OF tmenge;

VARf e l d l , f e l d 2 : t f e l d ;

X 1 ö

Page 125: Pascal - Eine kinderleichte Einführung

U e b e r p r u e f t d a r a u f h i n n o c h m a l , o b i h r v o n s e l b s t d i e I d e egehabt haet tet . Wenn nicht , dann verbessert euer Verstaendnis derS t r u k t o g r a m m e ! I h r g l a u b t d o c h n i c h t , w i r w o l l e n s o l c h e S e l b s t -v e r s t a e n d l i c h k e i t e n i m m e r w i e d e r a u f f u e h r e n . D . h . i n Z u k u n f tlegen wir etwas mehr Straffhei t an den Tag. Oder doch n icht . . .?

Wie s ieht 's aus, In teresse an e inem k le inen Programm? Ok, aufgeht's Buam:

119

Page 126: Pascal - Eine kinderleichte Einführung

PROGRAM mengen;

(#++++++++++++++++++++++++++++++++++++^

Das Programm verdeutlicht die neu eingefuehrten Mengenoperationen. Dazukoennen 2 Mengen vom Benutzer mit Zeichen aus CHAR gefuel It werden.Anschliessend ist die Anwendung der Mengenoperatoren auf diese Mengendurchfuehrbar.

CONSTtk = 'Die Verknuepfung der Mengen 1 u. 2 mit ';

TYPEtmenge - SET OF ' '..'z';

VARmenge

ic h , t c h

ARRAY (.1..3.) OF tmenge;

1 . . 3 ;CHAR;

BEGIN

(# +++++++++++++++++++++++++ INITIALISIERUNGEN +++++++++++++++++++++++++++ #)

m e n g e ( . 1 . ) : - ( . . ) ; m e n g e ( . 2 . ) : - ( . . ) ; m e n g e ( . 3 . ) : - ( . . ) ;

(# +++++++++++++++++++++++++ Menueschleife +++++++++++++++++++++++++++ #)

REPEAT

WRITELN;WRITELNWRITELNWRITELNWRITELNWRITELNWRITELNWRITELNWRITELNWRITELNWRITELNWRITELN

WRITELN (WRITELN (W R I T E (

WRITELN; WRITELN;'Es koennen zwei Mengen 1 u. 2 verknuepft werden,'Verfuegung stehen folgende Funktionen:');' 1 u. 2 : Eingabe der Mengeninhalte' );> «' +

Zur' )\

> }

Durchschnitt von 1 u. 2 bilden' ) }Vereinigung' ) ;D i f fe renz ' ) ;statt <= : Test, ob 1 Teilmenge von 2' );statt >- : Test, ob 1 Obermenge von 2' );Test, ob 1 u. 2 gleich' );Test, ob 1 u. 2 ungleich' );Pruefen, ob ein eingegebenes Zeichen

Ende des Programms' );in 1 ' ) ;

) ;

REPEATREAD ( KBD, ch );

U N T I L c h I N ( . ' 1 ' , ' 2 ' , ' *■ ' , ' + * , ' - ' , ' < ' , ' > ' , ' = ' , ' ? ' ,' I ' , ' i ' , ' E ' , ' e ' . ) ;

CLRSCR;

120

Page 127: Pascal - Eine kinderleichte Einführung

(# ++++++++++++++ Interpretation des gewuenschte» Zeichen ++++++++++++++++ a)

CASE ch OF

(# ++++•/■+++++++++++++++ Mengeninhalt einlesen ■/■+++++++++++++++++■/■+■/■+++++++ a)

' 1'' 2 ' : B E G I N

WRITELN ( 'Bitte die Zeichen, welche in der Menge ', ch,' enhalten sein sol len, hinter ">" ein- ' ) ;

WRITELN ( 'geben. Beendigung durch ein Zeichen, welches',' n i ch t i n " " . . " z " en tha l ten i s t . ' ) ;

WRITE ( ' > ' ) ;

i := ORD ( ch ) - ORD ( '0' ); menge (. i .) :- (..);

READ ( KBD, tch );

WHILE tch IN ( . ' ' . . 'z ' . )DO BEGIN

WRITE ( tch );

menge (. i .) := menge (. i .) + (.tch.);

READ ( KBD, tch );END;

END;

(* ++++++++++++++++++++ Verknuepfungen von Mengen +++++++++++++++++++++++ *)

'#' : menge (. 3 .) := menge (. 1 .) * menge (. 2 .);

'+' : menge (. 3 .) s- menge (. 1 .) + menge (. 2 .);

'-' : menge (. 3 .) := menge (. 1 .) - menge (. 2 .);

(# ++++■/•+++++++++++++ Vergleichs- u. Testoperationen ++++++++++++++++++++ n)

'<' : WRITELN ( tk, '<= ergibt: ', menge (. 1 .) <f- menge (. 2 .) );

'>' : WRITELN ( tk, '>= ergibt; ', menge (. 1 .) >= menge (. 2 .) );

'=' : WRITELN ( tk, '= ergibt: ' , menge (. 1 .) - menge (. 2 .) );

'?' : WRITELN ( tk, '<> ergibt: ', menge (. 1 .) <> menge (. 2 .) );

' V : B E G I NWRITE ( 'Zu testendes Zeichen eingeben: ' );READ ( KBD, tch ); WRITE ( tch )'; WRITELN;

WRITELN ( 'Test, ob das Zeichen in Menge 1 ist ergibt: ',tch IN menge (. 1 .) );

END;

END; (# von CASE *)

121

Page 128: Pascal - Eine kinderleichte Einführung

(a +++++++•/■++++■/■+++ Ausgabe der Mengen nach Verknuepfung +++++++++++++++++ #)

I F c h I N ( . ' # ' , ■ ' + ' , ' - ' . )THEN BEGIN

WRITELN ( 'Opera t ion is t : ' , ch ) ;

FOR i := 1 TO 3DO BEGIN

WRITELN;IF i < 3

THEN WRITE ( 'MENGE; ', i, ': ' )ELSE WRITE ( 'ERGEBNIS: ' );

FOR tch s- TODO IF tch IN menge (. i .)

THEN WRITE ( tch );END; (» von FOR *)

END; (* von IF #)

U N T I L c h I N ( . ' E ' , ' e ' . ) ;

END.

D a s w a r e n u e b e r 1 4 0 Z e i l e n a n P r o g r a r n r n t e x tU e b e r b l i c k b e h a l t e n h a t , d e r k a n n s c h o n ' w a s .z u r B e r e i c h e r u n g e u r e s V e r s t a e n d n i s e s d e rNu tzung i n PASCAL be ige t ragen .

W e r d a d e nH o f f e n t l i c h h a t e sM e n g e n u n d i h r e r

B e v o r i h r j e d o c h w i l d a n f a n g t , h e r u r n z u M E N G E N , n o c h e i n k l e i n e rWeh r mut st r op f en, S e t s k o e n n e n n i c h t m e h r a l s 2 S S E l e m e n t ee n t h a l t e n ! D i e Ve i n b a r u n g

VARm : SET OF 1..1000;

w a e r e f o l g l i c h u n e r l a u b t ! G u e l t i g d a g e g e n i s t

VARn : SET OF CHAR;

, da CHAR nur 256 Zeichen (Elemente) umfasst .

I n e i n p a a r s t i l l e n S t u n d e n k o e n n t i h r e u c h a u c hd e n K o p f d a r u e b e r z e r b r e c h e n ( a b e r n u r , w e n n i h ru n a u f m e r k s a m g e l e s e n h a b e n s o l l t e t ) , w a r u m m a n k e i n eZ a h l e n a l s G r u n d m e n g e e i n e s S e t s n e h m e n d a r f u n dG r u n d e d i e s e Ve r e i n b a r u n g u n e r l a u b t i s t :

n o c h e i n m a lb i s h i e r h e r

r e e l l e na u s w e l c h e m

VARwarum SET OF INTEGER; f# na, wer weiss die Loesung? *)

12:

Page 129: Pascal - Eine kinderleichte Einführung

3.17. What Kind 'a Records d'Ya have?

Bleiben wir ruhig im Augenbl ick 'mal bei der Frage nach heissenS c h e i b e n . S i c h e r l i c h i s t e s s o m a n c h e n s T r a u m , e i n t o l l e sP r o g r a m m z u s c h r e i b e n , m i t d e m m a n s e i n e P l a t t e n s a m m l u n gv e r w a l t e n k a n n . D a w e r d e n d a n n I n t e r p r e t , I n f o , o b L P o d e rS i n g l e , T i t e l d e r F ' l a t t e u s w . e i n g e g e b e n u n d d e r R e c h n e rverwaltet die Daten schoen.

D ie Gre t chen f rage i s t , we l che r A r t d i e Da tens t ruk tu r se in so l l ,d i e a l l d i e w i c h t i g e n I n f o r m a t i o n e n a u f n e h m e n s o l l . E i n Vo rschlag, der machbar is t , s ieht so aus:

CONSTmaximale plattenzahl - 100; (# fuer Anfaenger im Sammeln *)

TYPEtbereich 1..maximaleplattenzahl;

t i n t e r p r e t - S T R I N G ( . 2 0 . ) ;tp la t ten typ = BOOLEAN; (# TRUE = LP; FALSE = S ing le * )t t i t e l STRING (.30.);

VARinterpret

plattentyp

t i t e l

ARRAY ( . t be re i ch . ) OF t i n te rp re t ;

ARRAY ( . tbe re ich . ) OF tp la t ten typ ;

ARRAY ( . t be re i ch . ) OF t t i t e l ;

I s t d o c h g a r n i c h t s o s c h l e c h t , o d e r ? W i l l m a n d a n n z . B . a l l eInf or mat i on en ueberWeise;

d i e 4 7 » F ' l a t t e h a b e n , s o g e h t d a s i n d i e s e r

WRITELN ( ' Interpret : ' , interpret (.47.) );

WRITE ( 'P la t ten typ : ' ) ;IF plat tentyp ( .47.)

THEN WRITELN ( 'LP' )ELSE WRITELN ( 'Single' );

WRITELN ( 'Titel ' , t i t e l ( . 4 7 . ) ) ;

"'tschuldigung, ich habe mir so ein F'rogramm in PASCAL nach demobigen Muster geschr ieben. Ganz to l l . Me in t ih r, i ch kann das ani r g e n d e i n e n v e r k a u f e n ? I c h w u e r d e g e r n e e i n p a a r G r o s c h e ndazuverd ienen. "

Nun, wer eie i n L i s t i n g

Arn besten,ker ausgeben.In dem Fal1direkt vom Drz u l a s s e n .Programm.

Natuer1 ichobigem Musterwenn nach der

n Programm verkaufen moechte, der muss davon erstrnalmachen.

Du laesst Dir das F'rogramm auf einem schoenen Druk-Si eher l ieh ist es ein sehr, sehr langes F'rogramm.

so l l t es t Du n i ch t ve rsaeumen , das bed ruck te Pap ie rL ieker aus in e inen davorgeste l l ten Pap ierkorb fa l lenD e n n d i e s e r i s t d e r e i n z i g r i c h t i g e O r t f u e r s o e i n

ist ein PASCAL—Programm zur F'lattenverwaltung nachtotaler Schwachsinn. Mann, wozu denn dann PASCAL,Holzhackermethode programmiert wird?

12C

Page 130: Pascal - Eine kinderleichte Einführung

Aber n u n g u t , e i g e n t l i c h k o n n t e t i h r j a n o c h n i c h t w i s s e n , i nw e l c h e r W e i s e d e r P r o fi d a s P r o b l e m l o e s t .

K e n n z e i c h n e n d i s t , d a s s u n t e r e i n e r B e z e i c h n u n g , z . B . " F ' l a t t e " ,a l l e z u g e h o e r i g e n D a t e n d e r h e i s s e n S c h e i b e z u fi n d e n s e i ns o l l e n . G e n a u s o , w i e m a n i m P e r s o n a l a u s w e i s a l l e I n f o s u e b e r e i n eP e r s o n fi n d e t .

Das gu te an PASCAL i s t . . . ? Na , eben das , dass man so e twas do r tm a c h e n k a n n : a l l e s u n t e r e i n e m B e g r i f f z u s a m m e n z u f a s s e n .

In e inem Feld (ARRAY) koennen wi r v i .e l .e Var iab len GLEICHEN Typsu n t e r e i n e m N a m e n v e r e i n i g e n .

I n e i n e m Ve r b u n d , s o h e i s s t d e r n e u e Ty p , k o e n n e n w i r \ f a r i a b l e nUNTERSCHIEDL ICHEN Typs zusammenfassen . Au f Eng l i sch i s t Ve rbundg l e i c h r e c o r d .

F L i e r e i n e P l a t t e e r g a e b e s i c h d a r a u s f o l g e n d e r A u f b a u :

VARtp la t te RECORD

in te rp re t ; STRING ( .20 . ) ;

typ

t i t e lEND;

; B O O L E A N ; ( * L P o d e r S i n g l e * )

: STRING (.30.);

U n t e r d e m N a m e n t p l a t t e fi n d e n w i r d a n n a l l e I n f o r m a t i o n e nw i e d e r . W i e , d a s z e i g e n w i r g l e i c h . E r s t m a l d a s p a s s e n d eSyn taxdiagr amm:

record-typ:

—>—(RECORD^—>—i konponentenliste !—>---'eND-->

konponentenliste

+-->-

4 _ _ _ 4 4

kooponentennaae ',---—>--■i : *•-->—! typ i—7—>_ 4 u ^ 4 + V' - * - < i -

strukturierter typ:

; J / "-<-

4 4

-7—i array-typ i—7-V + * ;j t 1 -4 — 1 s e t - t y p ! - - +! 4 4 j! + + j+—! record-typ !—•i-

4 4

U m d a s i n d e r P r a x i s b e w u n d e r n z u k o e n n e n , ' m a l e i n e r w e i t e r t e rV e r b u n d f u e r e i n e F ' l a t t e . H u c h , M o m e n t , w e r h a t ' s e i g e n t l i c h

S c h a l l p l a t t e a u f E n g l i s c h a u c h r e c o r dso wen ige , dabe i haben w i r uns ech t Muehe

g e m e r k t , d a s s n a e m l i c hh e i s s t . . . . W a s , n u rg e g e b e n m i t d e r U e b e r s c h r i f t a l s W o r t s p i e l

124

Page 131: Pascal - Eine kinderleichte Einführung

D o c h h i e r w i e d e r d i e r a u h e P r a x i s :

TYPEt z e i l e

tsongs

tdatum

t p l a t t e

STRING (.30.) ; (# sehr grosszuegig *)

ARRAY (. 1..10 .) OF zeile; (# muss ausreichen *>

RECORDt a g : 1 . . 3 1 ;monat : 1..12;j ä h r : 1 9 0 0 . . 2 0 5 0 ;

END;

RECORDi n t e r p r e t ■ tze i le ;

typ m BOOLEAN;

t i t e l * t z e i l e ;songs I tsongs;

kauf datum,erseheinungitdatum '• tdatum;

pre is * REAL;END;

VARplatten : ARRAY (. 1..100 .) OF tplatte;

p l a t t e : t p l a t t e ;

D i e K o m p o n e n t e n , a l s o t y p , i n t e r p r e t u s w . , d e s V e r b u n d e sk o e n n e n v o n b e l i e b i g e m T y p s e i n , d . h . a u c h w i e d e r e i n V e r b u n d .K l a r , d a s s d i e D e fi n i t i o n d e s R e c o r d d a t u m s e i n e r V e r w e n d u n g i nt p l a t t e v o r a u s g e h e n m u s s !

G e g e n u e b e r u n s e r e r e r s t e n M o e g l i c h k e i t - d i e m i t m e h r e r e nF e l d e r n - i s t d i e s e L o e s u n g v i e l v i e l u e b e r s i c h t l i c h e r . S i e f a s s ta l l e r e l e v a n t e n D a t e n u n t e r e i n e r B e z e i c h n u n g z u s a m m e n .

F r a g t n i c h t e r s t n a c h d e r M e t h o d e , u m e i n e R e c o r d - K o m p o n e n t ea n s p r e c h e n z u k o e n n e n . H i e r i s t s i e :

record-koaponente:

4 4 _ 4 4

-->—I record-variable I—>— .J-->—I koaponentennaoe !—>4 4 4 4

125

Page 132: Pascal - Eine kinderleichte Einführung

A n h a n d v o n B e i s p i e l e n s i e h t ' s s o a u s :

p la t te .pre is : - 19.80;

WRITELN ( platte.interpret ); -*■

platten (. 3 .).preis := 14.45;

l(lar träqt den Preis ein.Ut Ja eine HEAL-Variant

Schreibt den fVrjmendes Interpreters

platten [3] tst vom Typ tplatte (!)darum dqhintßr erst den Punkt2ur Komp^entenQuiwa/)/.

platten (. 55 .).songs (. 2 .) := 'Hello Dolly';

platten (.13 .).kaufdatum.tag ;= 31;platten (. 13 .).kaufdatum.monat := 2;

platten [/*.?}. kowf datum ist wiederein Mzcordl Um eine seiner Komponenten auszuwählen rn^ß wieder"," Uoromert\

u s w . u s w . . V e r b ü n d e w i e a u c h F e l d e r k a n n m a n b e l i e b i gs c h a c h t e l n . E s i s t j e d o c h i m m e r s t r e n g s t e n s d a r a u f z u a c h t e n ,we lchen Typ man be im Ansprechen e iner Komponente hat :

platten (.31.)

platten (.31.).preis

platten (.31.).songs

platten (.31.).songs (.1.)

platten (.31.).kaufdatum

ist vom Typ tplatte

ist vom Typ REAL

ist vom Typ tsongs

ist vorn Typ tzeile

ist vom Typ tdatum

platten (.31.).kaufdatum.jähr ist vom Typ 1910..2050

E i n g r o s s e s P l u s d e r F e l d e r u n d Ve r b ü n d e i s t e s , d a s s m a n m i ti hnen auch Gesamtzuwe isungen tae t i gen kann :

s t a t t

platten (.1.).pre is :- platte.preis;p la t ten (A . ) . t yp : - p la t te . t yp ;

s o l a n g e , b i s a l l e K o m p o n e n t e n v o n p l a t t e n a c h p l a t t e n ( . 1 . )u e b e r t r a g e n s i n d , k a n n m a n s c h r e i b e n :

platten (.1.) :- platte;

u n d s c h o n i s t a l l e s g e r i t z t .

126

Page 133: Pascal - Eine kinderleichte Einführung

D a s g e l i e b t e K i s t e n d i a g r a m m f u e r d i e R e c o r d - Va r i a b l e :

TYPEttest = RECORD

a, b : REAL ;c : I N T E G E R ;d : B O O L E A N ;

END;

VARtest : t test ; test, a

testfeld : ARRAY (.1..4.) OF ttest;

testfeldt

lest.cl

teslfetdC3]x

testfeld [4Lo|

S e i d n i c h t e n t t a e u s c h t , a b e r i n d i e s e m K a p i t e l v e r z i c h t e n w i reinmal auf Prograrnmauszuege. Die Verwendung von Records wurdeob en ja r ec h t aus f ueh r lieh er 1 aeut er t.. Zudem sind in vielen,j e t z t n o c h f o l g e n d e n L i s t i n g s Ve r b ü n d e i n r e g e m G e b r a u c h , s odass, wer wi l l , dort nachschauen kann.

B e v o r i h r z u m n a e c h s t e n K a p i t e l u e b e r g e h t , s o l l t e t i h r v i e ll e i c h t , u m d a s b i s h e r G e l e r n t e z u f e s t i g e n , n o c h e i n o d e r z w e iPrograemmchen schnitzen. Kann nicht schaden.

H a l t , w a s h o e r e n w i r . . . I h r h a b t k e i n e P r o b l e m e ? K a n n n i c h tse in , und wenn doch , dann f rag t eu re Bekann ten . I rgendwer w i rdschon e in Prob lem haben (v ie l le ich t mi t der Bez iehungsk is te oderso ) , dass i h r he r vo r ragend l oesen koenn t - so a l s F i nge ruebunggewisserrnassen. . .

127

Page 134: Pascal - Eine kinderleichte Einführung

1 8 . V o n o b e n n a c h u n t e n i n F ' A S C A L

A l s g e p l a g t e r S c h u e l e r o d e r e i n f a c h t i i i i e r i s c h g e s t r e s s t e r E r -denbuerger (und das gehoert heute ja zum guten Ton) moechte manm e i s t a l l e s i n k l e i n e n l e i c h t v e r d a u l i c h e n H a e p p c h e n s e r v i e r t b ekommen . Aber z umi ndest n i c ht zuvi el e In for mat i onen mi t ei nern Mal-wohlmoeglich muesste man sich dann uebermaessig anstrengen, uma l les zu ve rs tehen- .

In diesem Sinne haben wir schon in einem der ersten Kapitel dieM e t h o d e d e r s t r u k t u r i e r t e n P r o g r a m m i e r u n g e i n g e f u e h r t . I h re r i n n e r t e u c h n o c h ? G r o s s e P r o b l e m e i n k l e i n e r e P r o b l e m ez e r l e g e n , s o l a n g e , b i s m a n d i e K l e i n s t p r o b l e m e a l l e r n u e h e l o sloesen konnte, wenn moegl ich gleich in PASCAL. Danach dann al lediese Kl einst loesungen zusammenpacken und... und schon hat manein Programm, welches unser Anfangs-Grossproblem loest.

D ieses Vo rgehen , von ganz g rob zu ganz fe i n , von oben nachunten, von schwierig zu leicht, nennt man TOP-DOWN-Entwur f oderTOP-DOWN-Programmierung. Unbedingt merken!!

Das Zusammensetzen der Kleinst loesungen, die nun al le schon ine i n e r P r o g r a m m i e r s p r a c h e g e s c h r i e b e n s i n d , z u e i n e mGesamtprogramrn, das nennt man BQTTQM-UP-Proqrammierung.

D e r E n t w u r f f u e h r t e u n s a u s d e n H o e h e n ( T O P ) d e rK o m p l i z i e r t h e i t h i n a b ( D O W N ) z u r t o t a l e n E i n f a c h h e i t . D a sZusammensetzen danach le i tet uns dann von dort unten (BOTTOM)wieder nach oben (UP). Und schon fer t ig . So e infach is t 's .

Schade war es b isher led ig l ich, dass uns F 'ASCAL re la t iv wenigunterstuetsende Mittel dazu in die Hand gab»

O k , D a t e n s t r u k t u r e n k o e n n e n w i r n u n s o e n t w e r f e n ( w i re rwaehnten das S t i chwor t de r Da tenabs t rak t ion ) . Abs t rah ie ren bedeutet dann, dass wir komplexe Strukturen sozusagen hinter e inemein fachen Namen vers tecken, w i r abs t rah ieren vom konkre ten Aufbau. Denkt dabei an den Verbund tplatte. Beim Entwurf der Datens t ruk tu r fue r e in F ' l a t tenve rwa l tungsprog ra rnm gehen w i r s innvo llerweise so vor (TOP-DOWN):

128

Page 135: Pascal - Eine kinderleichte Einführung

platten : tplatten; •ok im rWf-enblick wissen wir mr,S!daß o'lc Infos uW Ratten InderVariablen pUfren au finden Sind-

Ol

d0t rn

t p l a t t e n - A R R AY ( . l . . n . ) O F t p l a t t e ;

Jetzt haben wir uns Schon konkreterüberlegt / wie plafien organisiert sein Soll,

hm hesken eben als Teß, m dem für JedePlmte die Infos okgeU<jb sind.

tp la t te RECORDi n t e r p r e tt ypt i t e lsongspreiskau fda t

END;

STRING (.ilaenge.); Jebt erst deßnieren wir q&nom,t t y P t k . ' c d ; e W o . s ü b e r & n e f w eSTRING (.tlaenge.); a„ssehen «Sollen.

/?£/}£;datum; In t/eileren •Schritte« ww.ssen wir

noch Isonos u. datumkonkretisieren,

u s w. u s w. , s o l a n g e , b i s w i rdas genauste bestimmt haben.

al le Typen und Konstanten usw. auf

Hin terher gehen wi r d ' ran und setzen den ganzen Kladeradatschin einem PASCAL—Programm zusammen. Mit den Konstantendefinitionenbeginnend . . . b is schl iessl ich zur Var iable plat ten : BOTTOM-UP.

Rast lose Geis ter, phantas ievo l le Gemueter oder kurz : a l le Leserd ieses Buches s t r eben j edoch nach meh r. De r G rund e r sch l i ess tsich auch dem Letzten, wenn man bedenkt, dass der Anweisungsteile ines Programmes meist sehr v iel umfangreicher ist a l s d e r Te i lz u r Ve r e i n b a r u n g v o n D a t e n . D . h . i n e r s t e r e m w i r d m e h r n a c hM o e g l i c h k e i t e n z ü r n Ve r b e r g e n v o n I n f o r m a t i o n e n h i n t e r s i m p l e nNamen ( in format ion h id ing) gerufen.

Wenn's denn sein sol l , dann fuehren wir eben die dazu noet igenMi t te l PASCAL'S e in . T jaaaa, d ie g ib t ' s naeml ich .

129

Page 136: Pascal - Eine kinderleichte Einführung

t !> . 18« 1 i "The ..same .procedure as every year, James!"

Gew iss , es i s t komp lex das Thema, abe r w i r we rden es schonmoeg l i chs t k indgerech t se rv ie ren .

Eingefuehrt werden soll naemlich das UNTERPRQGRAMM-Konzept inPASCAL.

"Wat is 'n Untaprojrarn?Lind sagen. . . "

Nu, da stelle wa uns rna janz dumm

Genau, wer erkennt ihn nicht, den Lehrer Boemrnel. Leider ist esu n s n i c h t g e l u n g e n , i h n f u e r e i n e k u r z e A b h a n d l u n g u e b e rU n t e r p r o g r a m m e z u v e r p fl i c h t e n . I h r r n u e s s t d e s h a l b u n s e r e nv ie l l e i ch t paedagog isch n i ch t ganz so gu ten S t i l en tschu ld igen .

UNTERprogramme sind, wie der Name schon vermuten laesst, kleineP r o g r a m m e I N N E R H A L B e i n e s g r o s s e n P r o g r a m m s ( d e s s o g n .Hauptprograrnms). Unterprogramme enthalten Algorithmen zur Loesunge ines Te i l - od . Unterprob lerns des grossen Prob lems, we lches mi tdem Hauptprogramm bearbeitet werden soll.

Mal an einem Struktoararnm verdeutl icht:

4! Unterprob]en 1

--+

! Unterproblea 2

! Unterprob]eo 34 — +

dann koennten wir im Prograrnrn-t e x t s c h r e i b e n :

BEGINunterprobleml;unterproblem2;unterprob lemS;

END.

E i n e d i r e k t e U e b e r s e t z u n g d e s S t r u k t o g r a m r n s i n e i n P r o g r a m m i s ta l so moeg l i ch geworden . Man g ib t den Un te rp rob le rnen e in fach Namenu n d s c h r e i b t d i e s e h i n , w a n n i m m e r m a n i m P r o g r a r n r n t e x t d e n A l g or i t h m u s , d e r s i c h h i n t e r d e m U n t e r p r o g r a m r n n a m e n v e r b i r g t , a b g e a rb e i t e t h a b e n w i l l .

D i e Vo r t e i l e . d i e s i c h d a r a u s e r g e b e n :

1 . B e n o e t i g t m a n e i n e n A l g o r i t h m u s m e h r m a l s , d . h . a nv e r s c h i e d e n e n S t e l l e n i m P r o g r a m m , s o k a n n m a n i h n a l sU n t e r p r o g r a m m v e r e i n b a r e n . D a s E i n f u e g e n s e i n e s N a m e n s i n d e nP r o g r a r n r n t e x t g e n u e g t d a n n . M a n m u s s n i c h t i m m e r a l l e s e i n eB e f e h l s f o l g e n n o c h m a l u n d n o c h m a l h i n s c h r e i b e n .

2 . U m P r o g r a m m e L i e b e r s i c h t l i c h e r z u g e s t a l t e n , l a g e r t m a n s e h rk o m p l e x e P r o g r a m m a b s c h n i t t e i n U n t e r p r o g r a m m e a u s . S c h a u t s i c hd a n n i r g e n d w e r d e n P r o g r a r n r n t e x t e i n m a l a n , s o m u s s e r s i c h n i c h ts t a e n d i g m i t d i e s e m k o m p l e x e n A l g o r i t h m u s h e r u m s c h l a g e n , s o n d e r ns ieh t e inen i hm a l l es sagenden Namen (den Un te rp rog rammnamen) .

3 . S o l l t e e i n Te i l e i n e s A l g o r i t h m u s o e f t e r g e b r a u c h t w e r d e nj e d o c h m i t w e c h s e l n d e n P a r a m e t e r n ( E i n g a b e g r o e s s e n ) , sv e r e i n b a r t m a n z w e c k m a e s s i g e r w e i s e e i n U n t e r p r o g r a m m .

4 . U n t e r p r o g r a m m eA l g o r i t h m e n .

e r l a u b e n r e k u r s i v e (kommt s p a e t e r )

130

Page 137: Pascal - Eine kinderleichte Einführung

5. Bei langen Programmen ver langt das Gebot des st ruktur ier tenP r o g r a m m ! e r e n s ( s i e h e a u c h P u n k t 2 . ) d a s A u s l a g e r n v o nPrograrnmtei len in Unterprogramme.

Schlussv o r s t e l l e n :

j e t z t m i t l u s t i g ,die Prozeduren.

genug gerede t w i r duer fen

D i e P r o z e d u r e n s i n d d e r e r s t e U n t e r p r o g r a m r n t y p , d e n i h rk e n n e n l e r n e n s o l l t . M i t i h n e n k a n n m a n s o p r o g r a m m i e r e n , w i ew i r ' s o b e n a n g e p r i e s e n h a b e n .

Addieren:4 4

E i n g a b e !4

Verarbeitung I4

Ausgabe !4

Eingabe:4 4

I L i e s 1 . Z a h l I+ 4

I L i e s 2 . Z a h l !4 4

Verarbeitung:4 4

•Ergebnis := i. Zahlt !I 2 . Z a h l !4 4

Ausgabe:+ 4

! Ergebnis ausgeben !4 4

Und das Programm dafuer:

PROGRAM addieren;

VARzahll, zahl2, ergebnis ; REAL;

PROCEDURE eingäbe;BEGIN

WRITE ( 'Erste Zahl : ' ); READLN ( zahll );WRITE ( 'Zweite Zahl; ' ); READLN ( zahl2 );

END;

PROCEDURE Verarbeitung;BEGIN

ergebnis := zahll + zahl2;END;

PROCEDURE ausgäbe;BEGIN

WRITELN ( 'Ergebnis: ', ergebnis:7:2 );END;

BEGIN f# hier beginnt das Hauptprogramm #)eingäbe;Verarbeitung;ausgäbe;

END.

•E>n U,hterprooirctmm

131

Page 138: Pascal - Eine kinderleichte Einführung

Schaut euch doch jetzt 'mal das Hauptprogramm an. Welche Grazieze ig t s i ch do r t , e in fach schoen ! K le ine Haeppchen , j eder e rkenn ts o f o r t d i e S t r u k t u r d e s L o e s u n g s a l g o r i t h m u s . W i l l m a n ' s j e d o c hnoch genauer wissen, so schaut man s ich das Unterprogramm an.Wer' s nicht wissen rnoechte, der laesst es eben.

J a d o c h , i s t u n s a u c h k l a r , d a s s s i c h d i e Ve r e i n b a r u n g v o nP r o z e d u r e n b e i d i e s e m k l e i n e n P r o b l e r n e i g e n t l i c h n o c h n i c h tlohnt , aber zum Vor fuehren. . .

Hier mal das Syntaxdiagramm zur Vereinbarung von Prozeduren:

Prozedurvereinbarung (vorlaeufig):

->—fpROCEDURE4 4

■>—! prozedurnane !-4 4

->--{?>-->—! block !—>- \ ' ^

vereinbarungsteil (hurra, jetzt konplett):

•>- ->- ->- ->- ->-

+—! konstantendefinition '—+ +—! typdefinition !—+ ♦—! Variablenvereinbarung i—+4 4 4 4 4 4

-<- -<-

4 4

---<—i prozedurvereinbarung !—7v 4 4 *. 1 > 1a + + y—<—I funktionsvereinbarung i—

4 4

D e u t l i c h i s t d i e g r o s s e U e b e r e i n S t i m m u n g m i t d e m D i a g r a m m f u e rP r o g r a m m e z u e r k e n n e n . S t a t t P R O G R A M s c h r e i b t m a n j e t z t e i n f a c hPROCEDURE. Das i s t ja auch genau dem en tspreched, was w i r vo rh inm e i n t e n , a l s w i r s a g t e n , U n t e r p r o g r a m m e s e i e n F ' r o g r a m m e i mk l e i n e n . M e r k e : h i n t e r d e m E N D d e s A n w e i s u n g s t e i l s e i n e r P r o z e d u rkommt KEIN Punk t , sondern e in Semiko lon .

N u r d e r V o l l s t a e n d i g k e i t h a l b e r : al 1 e Unterprograrnrnnamen,Va r i ab lennamen , Typna rnen usw. usw. muessen ve rsch ieden se in !

He l le Koep fe werden schon 1 aengs t bemerk t haben , dass m i t b locki m S y n t a x d i a g r a m m v o n p r o z e d u r v e r e i n b a r u n g a u c h d i e D e k l a r a t i o nv o n Va r i a b l e n , Ty p e n u s w. u n d w i e d e r P r o z e d u r e n / F u n k t i o n e n i n n e rh a l b e i n e s U n t e r p r o g r a m m s e r l a u b t w i r d . G e e e n a u ! U n d s c h o n w i e d e re i n e U e b e r e i n s t i r n m u n g m i t d e m H a u p t p r o g r a r n m . Wo z u d a s n u e t z l i c hs e i n s o l l ? S e h t i h r g l e i c h . . .

U n s e r n e u e s P r o b l e m l a u t e t . . . m a l s e h e n . . .a l s o : V e r t a u s c h e d i e I n h a l t e z w e i e r Va r i a b l e n .

a h h h , d o r t ! L a u t e t

D a r a u s f o l g t s o g l e i c h .

13-;

Page 139: Pascal - Eine kinderleichte Einführung

PROGRAM tauschen;

VARvariablel, variable2, hi l fsvariable : INTEGER;

PROCEDURE vertauschen;BEGIN

hi l fsvar iab le :■v a r i a b l e l :■v a r i a b l e 2 :■

END;

va r iab le l ;variable2;h i l f s va r i ab l e ;

BEGIN (* Hauptprogramm *)

WRITE ( '1. Variable: ' ); READLN ( variablel );WRITE ( '2. Variable: ' ); READLN ( variable2 );

vertauschen;

WRITELN ( '1. Variable - ' , variablel:5, ' und ','2 . Var iable - ' , var iable2:5 ) ;

END.

h i l f s v a r i a b l e b e n o e t i g e n w i r , w e i l w i r u n s w a e h r e n d d e sVer tauschens den Wer t von var iab le l merken muessen. Der g ingesonst ver1or en.

Da gerade ueber h i l f sva r iab le gesprochen wurde , rnoech ten w i rnoch eure geschaetze Aufmerksamkeit auf den Umstand lenken, dassd i e s e Va r i a b l e n u r i n d e r P r o z e d u r b e n u t z t w i r d . S i e i s t a l l e i nfuer den Vertauschungsvorgang wicht ig! Warum also vereinbaren wirsie zusammen mit variablel u. variable2 im Hauptprogramrn? Besserwaere doch:

VARvariablel, variable2 : INTEGER;

PROCEDURE vertauschen;VAR

hilfsvariable : INTEGER;

BEGINh i l f s v a r i a b l eva r i ab le lvariable2

END;

v a r i a b l e l ;var iable2;h i l f s v a r i a b l e ;

BEGIN (* Hauptprogramm #;

1 OO

Page 140: Pascal - Eine kinderleichte Einführung

N a , w i e s c h a u t ' s a u s ? E i n v e r s t a n d e n ? D e r E f f e k t i s t d e rgleiche, nur machen wir jetzt davon Gebrauch, dass man innerhalbvon Unterprogrammen auch Objekte vereinbaren kann. Tut man das,s o n e n n t m a n d i e d o r t d e k l a r i e r t e n D i n g e L O K A L E O B J E K T E .h i l f s v a r i a b l e i s t j e t z t a l s o e i n e l o k a l e Va r i a b l e .

D e r V o r t e i l l i e g t a u f d e r H a n d . W i r m u e s s e n u n s i mHauptProgramm ueberhaupt keine Gedanken mehr machen, WIE die Werte der Var iab len ver tauscht werden. Vorher war das noet ig , denne s m u s s t e d i e d a z u n o t w e n d i g e Va r i a b l e h i l f s v a r i a b l e d e k l a r i e r twerden.

Nun aber denken w i r n ich t fuer 5 Pfenn ig mehr daran, sondernver lassen uns vol l auf das zustaendige Unterprogramm. Sol l te s ichd o r t d a n n b e i d e r P r o b l e m l o e s u n g f u e r " V e r t a u s c h e n z w e i e rV a r i a b l e n " z e i g e n , d a s s w i r n o c h d i e e i n e o d e r a n d e r eH i l f s v a r i a b l e b e n o e t i g e n , n a , d a n n v e r e i n b a r e n w i r s i e e b e nschnell noch lokal im Unterprogramm.

Diese Vorgehensweise al les, was fuer das Hauptprogramm nichtin einem Unterprogramm lokal zu

n e n n t m a n " i n f o r m a t i o n h i d i n g " .v o n e s s e n t i e l l e r B e d e u t u n g i s t ,vereinbaren oder auszudruecken,Die genauen Informat ionen ueber einen Algor i thmus werdendem Unter progr arnmnamen versteckt.

h i n t e r

Noch ein schnuckel iger F'rogrammauszug. Sod o r t g e z e i g t , k a n n m a n p r o b l e m f r e i m i tumgehen.

s d e r a e h n l i c h , w i es k a l a r e n Va r i a b l e n

PROGRAM waldbestand;

TYPEtbaumarten = (fichte, tanne, kiefer, buche, eiche, sonstige);tbaeume = ARRAY (.tbaumarten.) OF INTEGER;

VARanzahl ; tbaeume;

artenname : STRING (.8.);a r t : t b a u m a r t ;

PROCEDURE entschluesseln;(* dieses Unterprogramm soll die Baumart in der Variablen

art in einen String umwandeln, damit man die Art auchauf den Bilschirm schreiben kann #)

BEGIN

CASE art OF

fi c h t etannek i e f e rbucheeichesonstige

artennameartennameartennameartennameartennameartenname

' F i c h t e ' ;'Tanne' ;' K i e f e r ' ;'Buche';'E i che ' ;'Sonst ige' .

END; dt von CASE if)

END; (if von entschluesseln #)

134

Page 141: Pascal - Eine kinderleichte Einführung

BEGIN C*? des Hauptprogrammes #)

... (if hier kann irgendetwas stehen (aber nicht die Punkte /) *)

Of ++++++++++ Zahl der Baeume pro Art einlesen +++++++++++ #)

FOR art := fichte TO sonstigeDO BEGIN

WRITE ( 'Zahl der ' );

e n t s c h l u e s s e l n ; ( n a r t i n S t r i n g w a n d e l n i f )

WRITE ( artenname, 'n eingeben: ' );

READLN ( anzahl (.art.) );END;

... Of hier kann irgendwas stehen, ist jetzt unwichtig #)

(it ++++++++++ Baeume u. ihre Anzahl ausgeben +++++++++++++ #)

Anzahl : ' ) ;WRITELN ( 'Baumart:

FOR art :~ fichte TO sonstigeDO BEGIN

e n t s c h l u e s s e l n ; ■ . . .hier Steckt die mOX, Strinolonoe arm

W R I T E ( a r t e n n a m e , yanzahl (.art.) : 29 - LENGTH ( artenname ) );

END;

Of hier genauso x)

END.

Trick. um eine {ormoitierte Ausgabemit verschieden, Unaen SlWnGS merhalte*!

H a e t t e n w i r u n s e r W a l d b e s t a n d s p r o g r a m m a u s e i n e m d e rvorangehenden Kapitel in der Weise programmiert, dann waere unser"Schluessel" (Zahlen stat t Baumartennamen) ueberfluessig gewesen.Ihr seht jedoch e in , dass d iese Techn ik ers t durch e ine Prozedurm o e g l i c h i s t , d e n n w e r w o l l t e d i e C A S E - A n w e i s u n g z u mE n t s c h l u e s s e l n m i n d e s t e n s 2 - m a l h i n s c h r e i b e n ? W i r j e d e n f a l l sn i c h t .

135

Page 142: Pascal - Eine kinderleichte Einführung

1 1 p "> F r _ i s £ h _ j g . e s c h a c h t e l t _ i i s t h a l b g e w o n n e n

D e n B e g r i f f k e n n tVe rzwe i gungsanwe i sungen .

i h r s c h o n v o n d e n S c h l e i f e n u n d

W i r f t m a n j e d o c h e i n e n z i e m l i c h s c h a r f e n B l i c k a u f d i eS y n t a x d i a g r a m m e p r o g r a a a u n d p r o z e d u r v e r e i n b a r u n g s o s t e l l t m a nf e s t , d a s s i n b e i d e n b l o c k a u f t a u c h t . S o m i t i s t e s a u c h m o e g l i c hB i o e c k e z u s c h a c h t e l n .

B i o e c k e a b e r e n t h a l t e n V a r i a b l e n v e r e i n b a r u n g e n u n d d e r g l e i c h e nm e h r . E i n z i e m l i c h g e s c h a c h t e l t e s P r o g r a m m s a e h e d a n n s o a u s :

PROGRAM sehrgeschachtelt;

VARx, y : REAL; k, i : INTEGER;

PROCEDURE pi;~vm

* f J INTEGER; b : BOOLEAN;

PROCEDURE pH;VAR

k, i : REAL;BEGIN

x := x + k;* 0 m

END; (*t ende von pH *)

BEGIN Of von pi it)

x : = i l 2 ;a m *

END; ( i t von p l * )

PROCEDURE p2;VAR

y : CHAR;BEGIN

m m m

READLN ( y );

END; Of von p2 #)

BEGIN Of des Hauptprogramm #,'

x : = i / 2 ;WRITE ( y );

END.

Slack M

Slock ri

Blockt^

Blockt

106

Page 143: Pascal - Eine kinderleichte Einführung

"Jungs macht doch ke inen Mist ! Was so l len d iese Kinker l i tzchennun schon wieder, hm mm? Als wenn wir nicht schon genug Problemeh a e t t e n . "

O h , e i n u n g e s t u e m e r Z e i t g e n o s s e , d a b e i w o l l t e n w i r g e r a d ew iede r e twas e rk l ae ren , dam i t i h r eu re P rob leme noch e legan te rloesen koennt. Na ja, 'scheint eine Einzelst imme gewesen zu sein,dann koennen wir weitermachen...

W i r e r i n n e r n u n s a n d e n B e g r i f f " l o k a l e Va r i a b l e " ? G u t , d a sGegenstueck zu diesem ist ein GLOBALES Objekt (z.B. eine globaleVar iab le) . Global werden a l le Dinge genannt , d ie d i rekt im BlockOv e r e i n b a r t s i n d , z . B . p l , p 2 , x u s w . p l l n i c h t , w e i l p l l i mB l o c k l d e k l a r i e r t w u r d e !

B l o c k O i s t i m m e r d e r z u m H a u p t p r o g r a m m g e h o e r e n d e B l o c k .

B ioecke , d ie INNERHALB e ines B locks ve re inbar t s ind , he issenUNTERGEORDNET:

Blockl , B lock l1 und Block2 s ind BlockO untergeordnet .

B lock l1 i s t aber auch B lock l un tergeordnet .

S o l a n g e u n d b r e i t e E r k l a e r u n g e n m a c h e n w i r a u c h n i c h t z u mSpass, deshalb f ragt s ich e in jeder, was der S inn d ieser H i rach iei s t .

Verbunden mit den Bioecken is t der GUELTIGKEIT5BEREICH vonOb jek ten . Grundsae tz l i ch g i l t e r s tma l : a l l e Ob jek te e ines B lockess i n d a u c h i n u n t e r g e o r d n e t e n B i o e c k e n g u e l t i g ! N i c h t i nuebergeordneten.

F u e r e u c h g i l t z u n a e c h s t : e i n e Va r i a b l e , e i n e n s e l b s t d e fi n i e rten Typnnamen usw. darf man nur benutzen, wenn er gueltig ist!

L e i c h t e r k l a e r e n s i c h a u c h d i e B e g r i f f e " l o k a l " u n d " g l o b a l " .G loba le D inge , a l so d i e aus B lockO, due r fen eben uebe ra l l ve rwandt werden, lokale Dinge nur in ihrem Block oder untergeordnet e n .

E i n i g e B e i s p i e l e :

p l , p 2 s i n d i n B l o c k O g u e l t i g .

p l l i s t n u r i n B l o c k l g u e l t i g .

b i s t n u r i n B l o c k l u n d B l o c k l 1g u e l t i g .

Z u m G u e l t i g k e i t s b e g r i f f r n o e c h t e n w i r n o c h d e n A u s d r u c k"Sichtbarke i t " h inzuf L iegen; dazu is t es wicht ig s ich zu er innern,d a s s m a n a l l e D i n g e ( O b j e k t e ) , d i e m a n i m P r o g r a m m b e n u t z e nmoechte , VOR ih re r e rs ten Benutzungss te l le defin ie r t !

137

Page 144: Pascal - Eine kinderleichte Einführung

TYPEtzeit - RECORD

zei t : tuhrze i t ;datum : tdatum;

END;

tdatum = ARRAY (.1..3.) OF INTEGER;

tuhrzeit = RECORDstunden, minuten : INTEGER;

END;

So nicht! Denn tdatum und tuhrzeit muessen VOR ihrer Benutzungi n t z e i t d e fi n i e r t w e r d e n ! V O R b e d e u t e t i m m e r t e x t u e l l v o r, d . h .im Programmtext naeher zum Prograrnrnanfang hin.

W e n n i h r d a s v e r i n n e r 1 i c h t h a b t , d a n n w i r d e s e u c h n i c h tschwer fa l len d ies zu begre i fen :

E in Ob jek t i s t nu r dann s i ch tba r. wenn es gue l t i g i s t UND vo rder Ste i le se iner Nutzung vere inbar t wurde!

S i c h t b a r h e i s s t , d a s s m a n e i n O b j e k t a u c h b e n u t z e n d a r f !Gue l t ig a l le in genuegt n ich t mehr.

So is t p2 in Blockl1 NICHT s ichtbar, p l jedoch in Block2 und inB l o c k l l . A u s s e r d e m s i n d p l u n d p 2 ( n i c h t a b e r p l l ' . l ) i n B l o c k Os i c h t b a r !

Kurze Pause, damit ihr euch das alles am Bei spiel progr amrn 'malansehen koennt (was geht wem textuel l voran usw.). . .

Ha l lo , a l le w ieder da? Schoen! Habt ih r gesehen, dass man p2n i c h t i n n e r h a l b p l a u f r u f e n d a r f ? H o f f e n t l i c h !

V i e l l e i c h t e i n e k l e i n e G r a fi k g e f a e l l i g ' 'Stock /l/j

ÜlotkZ

Block/

138

Page 145: Pascal - Eine kinderleichte Einführung

Monumenta l , ge l l ? Es so l l ganz deu t l i ch se in :

E i n O b j e k t ( Va r i a b l e , P r o z e d u r, Ty p b e z e i c h n e r u s w. )sichtbar, wenn man sich auf einem hoehergelegenen Blockoder dem B lock , in dem es defin ie r t wurde . Kann dennVariable b oder Blockl ! sehen, wenn er auf BlockO ist?

i s t n u rb e fi n d e tCPU die

seh rqeschac h fe. (t

Dagegen , wenn w i r uns au f B loc k l 1 befinden ,ßlocltf

ä 393i//l : ? »7Va8 : <'x

Mock von p/J

dann koennen wir a l les ueberbl icken. Nur zum Ende duer fen wirjetzt n icht schauen, wegen textuel lem Vorangehen.

S o l l t e t i h r d a s a l l e s j e t z t s c h o n b e g r i f f e n h a b e n , d e n nno rma le rwe i se kommt das e rs t m i t de r Ze i t und E r fah rung , danngehoer t ih r zu den ganz fi t ten Burschen. Lob! Andern fa l l s g raern teuch n icht . Eventue l l vers teht ih r das Naechste besser.

139

Page 146: Pascal - Eine kinderleichte Einführung

Es geht um die rnister ioese Ueber einst immun g von Var iabl enn amen.D i e Va r i a b l e y ( : R E A L ) i n B l o c k O u n d d i e Va r i a b l e y t ' j C H A R ) i nBlock2 haben gan:e s . d i e s e l b e n

o f f e n s i c h t 1 i c h . s e l b s t E r s t k l a e s s l e r e r k e n n e nNamen, D a r f m a n d a s ? B i s h e r g a l t d o c h : a l l e

selbstgewaehlten Namen muessen verschieden sein.

Oeehhmmm stimmt? gut aufgepasst. Doch hier,Leben, gi l t : Ausnahmen bestaet igen die Regel .

wie auch sonst irn

Betrachten wir das Phaemomen von einer anderen Seite. Wenne inem Programm im B lockO zwei Var iab len dek la r ie r t werden,

Weiss jederbas te l t CPU s ich 2 Kaes ten , H a e t t e n d i e

i nso

beidenKaes ten den g le i chen Namen, so wuess te ke ine r, we lcher Kas tengenommen werden muss, wenn der Name auftaucht

* — N

beide Variahkn/im ölelcben Jlock

Qfalsch! foe/chen KastenSoll CPU nehmen]

Werden aber Variablen indann laeuft das anders ab.

un te rsch ied l i chen B ioecken ve re inba r t .

W i r d z . B . e i n e Va r i a b l e y i n e i n e m B l o c k d e k l a r i e r t , u n d i ne inem untergeordneten B lock w i rd nochmal e ine Var iab le y dek lar ie r t -s ie kann jeden be l ieb igen Typ haben, dann wi rd der Kastender Variablen des untergeordneten Blocks auf den Kasten der zuvord e fi n i e r t e n Va r i a b l e n g e s t e l l t :

/ Ly

/£ ^- Kaste« der oleichmrnaenVfoWoble« ans demuntergeordneten %Lock

CPU schaut immer, wenn so'n Kastenstapel fuer einen Namen daist , in den obersten Kasten::

tleichnamioe,&rlah\tr> ausübergeordnete»3l»cl(?n.3et2tUnsicIiLtiAr!

nier nachschauen, welcher ti&kQenorrtwien werden Soll; wen* manim unlergeorolwetew Stock ist.

D iese Vorgehenswe ise i s t na tue r l i ch nu r fue r s i ch tba re Ob jek tes o k o m p l i z i e r t . M a n k a n n e s s i c h a u c h s o v o r s t e l l e n , d a s s e i nO b j e k t i n e i n e m u n t e r g e o r d n e t e n B l o c k e i n O b j e k t i n e i n e muebergeordneten unsichtbar macht, wenn es den selben Namen hat.Dies g i l t fuer den untergeordneten Block und a l le Bioecke d ie ihmnun wieder untergeordnet s ind.

S c h w e i n i s c h k o m p l i z i e r t h o e r t e s s i c h a n , i s t e s a b e r n i c h t .Z u r Ve r d e u t l i c h u n g d i e n o c h w e i t e r g e h e n d e B e s p r e c h u n gverschachtelten Programms:

des

140

Page 147: Pascal - Eine kinderleichte Einführung

R E A D L N ( y ) ; i n B l o c k 2 l i e s t e i n e C H A R - V a r i a b l ee i n , n a e m l i c h d i e , w e l c h e i n B l o c k 2 v e r e i n b a r t w u r d e . y : R E A Lw u r d e d a d u r c h u n s i c h t b a r g e m a c h t .

x : = i / 2 ; i n B l o c k l b e n u t z t d i e R E A L - M a r i a b l ex a u s B l o c k O u n d d i e I N T E G E R - Va r i a b l e i a u s B l o c k l !

x : - i / 2 ; i n B l o c k O b e n u t z t n u r d i e V a r i a b l e na u s B l o c k O . A l l e a n d e r e n s i n d n i c h t g u e l t i g !

i , j : I N T E G E R ; i n B l o c k l m a c h t d i e D e fi n i t i o nv o n i i n B l o c k O u n s i c h t b a r ! W i r d i i n B l o c k l b e n u t z t , s o k a n ns i c h n u r d e r W e r t d e r l o k a l e n V a r i a b l e n i a e n d e r n , i a u s B l o c k Ok a n n n i c h t a n g e s p r o c h e n w e r d e n !

i t k ; R E A L ; i n B l o c k l 1 m a c h t d i e V a r i a b l e ia u s B l o c k l U N D d i e V a r i a b l e i a u s B l o c k O u n s i c h t b a r f u e r B l o c k l 1 ,e b e n s o w i r d k a u s B l o c k O " v e r s t e c k t " . F u e h r t m a n i i n B l o c k l 1 a n ,s o w i r d i m m e r d i e l o k a l e V a r i a b l e a u s i h m v e r w a n d t .

Te s t e t d o c h e i n m a l d a s f o l g e n d e P r o g r a m m a u s :

PROGRAM verschachtelter;VAR

a : REAL; b : CHAR;

PROCEDURE pl;VAR

c : INTEGER; b : BOOLEAN;

PROCEDURE pll;VAR

a : INTEGER;

PROCEDURE pill;VAR

a : CHAR;BEGIN

a : = ' A ' ;WRITELN ( 'H ie r i s t p i l l : ' ) ;WRITELN ( ' Wert von a: ', a );WRITELN ( ' Wert von b: ', b );WRITELN ( ' Wert von c: ', c );

END;

BEGIN Of von pll #)a := 123;WRITELN ( ' H i e r i s t p l l : ' ) ;WRITELN ( ' W e r t v o n a : ' , a ) ;WRITELN ( ' W e r t v o n b : ' , b ) ;WRITELN ( ' W e r t v o n c : ' , c ) ;

END;p i l l ;

BEGIN Of von pl a)c : - 99; b := TRUE;WRITELN ( ' H i e r i s t p l ' >',WRITELN ( i Wert von a : ' , a >',WRITELN ( r Wert von b : ' , b >;WRITELN ( f Wert von c : ' , c >-,

END;p l l ;

141

Page 148: Pascal - Eine kinderleichte Einführung

PROCEDURE p2;VAR

a : BOOLEAN;

PROCEDURE p21;VAR

b : BOOLEAN;BEGIN

b := FALSE;W R I T E L N ( ' H i e r i s t p 2 I ' ) ;WRITELN ( ' Wert von a: ' , a );WRITELN ( ' Wert von b: ' , b ) ;WRITELN ( ' Wert von c: ' , c ) ;

END;

BEGIN (# von p2 *)a := FALSE;W R I T E L N ( ' H i e r i s t p 2 ' ) ;WRITELN ( '■ Wert von a: ', a );WRITELN ( ' Wert von b: ' , b );W R I T E L N ( ' W e r t v o n c : ' , c ) ; p 2 1 ;

END;

BEGIN (a des Hauptprogramms it)

a : - 12 .3 ; b : - 'B ' ;

p i ;

p 2 ;

END.

Wir Lieberlassen euch eurem Erstaunen.

L e s t d a s K a p i t e l l i e b e r m e h r m a l s , b e v o r i h r z ü r n n a e c h s t e nu e b e r g e h t . S p r e c h t e u c h m i t M u t t e r o d e r Va t e r a u s , d i e s i c h e rimmer ein offenes Ohr haben fuer eure Probleme mit PASCAL.

Fuer die Unverdrossenen schl lessen wir jedoch noch ein Kapitelan. . .

142

Page 149: Pascal - Eine kinderleichte Einführung

3.18.3. Rin in 's Unterprogramm, ' raus aus 'm Unterprogramm

W i r b e m u e h e n u n s j e t z t r e d l i c h , a l l e s w e n i g e r a b s t r a k t z uh a l t e n .

Vorh in , das Ver tauschungsprogramm, das war so schoen ueber -s i c h t l i e h . . B l e i b e n w i r d o c h d a b e i , m i t e i n e r A e n d e r u n g : w i rr n o e c h t e n n i c h t n u r d i e Va r i a b l e n v a r i a b l e l u n d v a r i a b l e 2 v e rtauschen , sonde rn auch d ie Va r i ab len a und b sow ie zah l l undzahl 2.

Der Vore i l i ge wuerde je tz t schne l l zu r Tas ta tu r g re i fen und ca .drei verschiedene Prozeduren dafuer schreiben.

W i e g e s a g t , d e r Vo r e i l i g e . D e r B e d a c h t e l i e s t e r s t h i e r w e i t e rund bereicher t s ich um ein iges nuetz l iches Wissen.

Der Vorzug der Unterprogramme ist naeml ich, dass s ie n icht nurau f l oka le und g loba le Ob jek te zug re i f en koennen , sonde rn auchau-f Parameter.

Parameter s ind euch in v ie len Lebens lagen schon begegnet . Ih rw iss t z .B . , dass fo lgende Pa ramete r f ue r eu re No te i n e ine r A rb e i t m i t v e r a n t w o r t l i c h s i n d : e u r e M o t i v a t i o n , e u e r W i s s e n ,S c h i e r i g k e i t s g r a d d e r A r b e i t , V o r u r t e i l e d e s L e h r e r s e u c hgegenueber.

In der g le ichen Weise koennen Parameter d ie Akt ionen in e inemUnterprogramm beeinflussen.

PROGRAM tauschen2;VAR

variablel, variable2, a, b, zahl l , zahl2 : INTEGER;

PROCEDURE vertauschen ( VAR x, y : INTEGER );VAR

hilf : INTEGER;BEGIN

h i l fxy

X'ty ;h i l f ;

END; (# von vertauschen #)

BEGIN

vertauschen ( variablel, variable2 );

vertauschen ( zahll, zahll );

» m m

vertauschen ( a, b );

vertauschen ( variable2, zahll );

m m M

END.

143

Page 150: Pascal - Eine kinderleichte Einführung

J e d e r d e r A u f r u f e v o n v e r t a u s c h e n b e w i r k t , d a s s d i e W e r t e d e rVar i ab 1 en i n den Kl aminer n ver t ausc ht wer den.

Zunaechst das passende Syntaxd iagramrn:

paraoeterliste:

< { f y .lV * ♦■ t 1 A

.)„_—Uy--—>—r~7~! paraaetername 1—7—>—(T)—>—I typnaae ! >—() )~v v 1 ' 1 tV V ^ A A + 1 V

<my- --<~~^>-->-

prozedurvereinbarung:

_ _ _ + + + + + +~->~<PROCEDURE>-->•— i prozedurnane !—•>---! paraaeterliste !— >—fjV- >—! block !—>—([">->

4 4 4 4 " 4 4

D i e P a r a m e t e r i n d e r P a r a m e t e r 1 i s t e h e i s s e n " f o r m a l eParamete r " . S ie s ind p rak t i sch loka le Var iab len der Prozedur undh a b e n a u c h d e r e n S i c h t b a r k e i t u s w. . x u . y s i n d h i l f g l e i c h g es t e l l t .

S o s c h w e r e s f a e l l t , a b e r o h n e M a t h e k o m m e n w i r j e t z t n i c h taus. Alle kennen die Funkt i on:

f (x) = 2 # x;

x i s t d e r f o r m a l e P a r a m e t e r d e r F u n k t i o n . E r b e e i n fl u s s t d a sErgebnis, wenn wir die Funkt ion benutzen.

S a g e n w i r i r g e n d w o : y - f ( 2 ) o d e r y - f ( z + 2 )dann s ind 2 bzw. z+2 d ie ak tue l len Parameter. S ie werden in derF u n k t i o n f u e r x e i n g e s e t z t . F o r m a l e P a r a m e t e r s i n d d i eP la t zha l t e r f ue r d i e ak tue l l en Pa rame te r.

Dadurch, dass wir in der Parameter 1iste waehlen koennen, ob wirvo r d i e Pa rame te rnamen VAR sch re iben wo l l en ode r n i ch t , e rg ib ts i c h n o c h e i n e n o t w e n d i g e U n t e r s c h e i d u n g , d i e w i r e r l a e u t e r nmuessen:

Schre iben w i r vor e inen fo rma len Parameter ke in VAR, so w i rdn u r d e r W e r t ( ! ) d e s a k t u e l l e n P a r a m e t e r s a n d i e P r o z e d u ruebergeben, wenn man sie aufruft! Was im Unterprogramm dann mitd e m f o r m a l e n P a r a m e t e r g e s c h i e h t , o b i h m e i n n e u e r W e r tz u g e w i e s e n w i r d o d e r s o n s t w a s , d a s a l l e s i n t e r e s s i e r t d e naktue l len ( ! ) Parameter ueberhaupt n ich t ! ! ! Man nennt so lch e inenformalen Parameter auch "ca l l by va lue"—Parameter, we i l nur derWert uebergeben wird.

144

Page 151: Pascal - Eine kinderleichte Einführung

S c h r e i b e n w i r v o r e i n e n f o r m a l e n P a r a m e t e r a b e r V A R , s o l a e u f ta l l e s a n d e r s . . D i e k l e i n s t e A e n d e r u n g d e s f o r m a l e n P a r a m e t e r s i mU n t e r p r o g r a m m w i r d S O F O R T - o h n e l a n g e s F a c k e l n - a u c h a u f d e na k t u e l 1 e n ( _ _ ! _ . ) u e b e r t r a g e n ! E s w i r d n a e m l i c h n i c h t d e r W e r t d e sa k t u e l l e n P a r a m e t e r s a n d a s U n t e r p r o g r a m m u e b e r g e b e n , s o n d e r ne i n e I n f o r m a t i o n , w e l c h e V a r i a b l e ( s i e i s t d e r a k t u e l l e F ' a r a r n . )d e n P l a t z d e s f o r m a l e n P a r a m e t e r s i m U n t e r p r o g r a m m e i n n e h m e ns o l l . D a m i t i s t e s m o e g l i c h , a l l e A e n d e r u n g e n d e s f o r m a l e n P a r am e t e r s s o f o r t a n d e n a k t u e l l e n w e i t e r z u g e b e n . S o l c h e f o r m a l e nP a r a m e t e r n e n n t m a n a u c h " c a l l b y r e f e r e n c e " - F ' a r a m e t e r .

: a l l ~ b y - v a l u e , c a l l - b y - r e f e r e n c e , :al 1—by—value, c a l 1 - b y -r e f e r e n c e , c a l 1 - b y - v a l u e , c a l 1 - b y - r e f e r e n c e , c a l 1 - b y - v a l u e , c a l l -by—ref erence, : a l lr e f e r e n c e , c a l l - b y. .

y o u o n t h e p h o n e , c a l 1 - b y - v a l u e ,Stop, genug memoriert.

c a l l - b y -

O f f e n s i c h t l i c h w a r e s i n u n s e r e r P r o z e d u r v e r t a u s c h e n n o e t i g ,z w e i c a l 1 - b y - r e f e r e n c e - P a r a m e t e r z u v e r w e n d e n . I s t j a a u c hs o n n e n k l a r , d e n n d i e V e r t a u s c h u n g s o p e r a t i o n s o l l t e s i c h a u f d i ea k t u e l l e n P a r a m e t e r < . a , b , z a h l l , z a h l 2 , v a r i a b l e l u . v a r i a b l e 2 )a u s w i r k e n .

N a c h d e m M o t t o : " W i r b a u e n u n s e i n E s s z i m m e r m i t D u r c h r e i c h e " ,h i e r e i n e g r a fi s c h e V e r d e u t l i c h u n g :

PROCEDURE ( a, b : INTEGER; VAR c : INTEGER;VAR d : BOOLEAN );

BEGIN

END; durchreichen

E i n V A R i n d e r P a r a m e t e r 1 i s t e g i l t i m m e r n u r f u e r d i eP a r a m e t e r n a m e n , d i e u n m i t t e l b a r h i n t e r i h m b i s z u m n a e c h s t e nTypnamen aufgefuehrt werden!

b e i d e C fl U - b y - , ,r e f e r e n c e y n i e r q i U V A n n i c h t m e h r }

PROCEDURE ( a : INTEGER; VAR b, c : INTEGER; d : INTEGER;VAR e : BOOLEAN; VAR f : REAL );

/Anderzr Typ, «also nieder VAUolo.w.sthreitan

14!

Page 152: Pascal - Eine kinderleichte Einführung

S i c h e r l i c h h a b t i h r s c h o n e i n i n t u i t i v e s V e r s t a e n d n i s e r l a n g t ,w e l c h e s e u c h s a g t , w i e i h r n u n e i n U n t e r p r o g r a m m m i t s o v i e l e nP a r a m e t e r n a u f r u f e n r n u e s s t . N i c h t s d e s t o t r o t z h i e r e i n e f o r m a l is i e r t e B e s c h r e i b u n g :

Prozeduranweisung:

r < _ " \ » r T4 4 ^ v 4 4 *

-! prozedurnaae 1—7—>—(0—>---—i aktueller Paraaeter ! >—C) y--—>4 4 v ^ + 1 ^

L > I

aktueller paraaeter:

4 4

—>~7—! ausdruck !—7-V 4 4 A

1 * + !+—! variable !--+

4 4

D a z u e i n i g e k l e i n e r e B e m e r k u n g e n :

1 . D i e Z a h l d e r a k t u e l l e n P a r a m e t e r m u s s b e i j e d e m A u f r u f e i n e sU n t e r p r o g r a m m s m i t d e s s e n Z a h l a n f o r m a l e n P a r a m e t e r nu e b e r e i n s t i m m e n . v e r t a u s c h e n < a , b , z a h l l ) g e h t a l s o n i c h t .

2 . D i e T y p e n d e r a k t u e l l e n P a r a m e t e r m u e s s e n i m m e r a u f d a sG e n a u s t e m i t d e n T y p e n d e r f o r m a l e n P a r a m e t e r n u e b e r e i n s t i m m e n .

PROCEDURE t ( a : BOOLEAN );

m i t d e m A u f r u f : t ( 1 2 . 3 ) g e h t n i c h t , w e i l a l sa k t u e l l e r P a r a m e t e r e i n A u s d r u c k v o m T y p B O O L E A N e r w a r t e t w i r d !

3 . D i e a k t u e l l e n P a r a m e t e r f u e r c a l l - b y ~ r e f e r e n c e - P a r a m e t e rm u e s s e n I M M E R V a r i a b l e n s e i n ! D e n n w o h i n s o l l t e s o n s t e i n g e a e n -d e r t e r W e r t z u r u e c k g e g e b e n w e r d e n ?D e r A u f r u f : v e r t a u s c h e n ( a , 1 2 3 ) i s t a l s o f a l s c h !

4 . D i e a k t u e l l e n P a r a m e t e r f u e r c a l 1 - b y - v a l u e - V a r i a b l e n k o e n n e nV a r i a b l e n o d e r K o n s t a n t e n o d e r A u s d r u e c k e s e i n .

PROCEDURE f ( x : REAL );

m i t d e n A u f r u f e n : f ( y ) ; f ( y + 3 ) ; f ( S I N ( y ) ) ;i s t g u e l t i g , w e n n y v o m Ty p I N T E G E R o d . R E A L i s t .

5 . D i e a k t u e l l e n P a r a m e t e r , m u e s s e n i n d e r g l e i c h e n R e i h e n f o l g ea u f g e f u e h r t w e r d e n , w i e d i e f o r m a l e n , d e n e n s i e z u g e o r d n e t w e r d e nso l 1en !

1 4 6

Page 153: Pascal - Eine kinderleichte Einführung

" O h o , d i e v e r s u c h e n s a u f d i e h a r t e To u r, a b e r n i c h t m i t m i r .I c h w e r d e j e t z t . . . "

M o m e n t , M o m e n t . . . . b i t t e n o c h n i c h t g e h e n / a u f h o e r e n . I s t d a sn i c h t a l l e s z i e m l i c h e i n s i c h t i g ?

"Doch, schon, aber immer nur Gerede; e ine Erk laerung jag t d ien a e c h s t e ; k e i n e P r o g r a r n m b e i s p i e l e , s o n d e r n i m m e r n u r n e u eA u s d r u e c k e : i n f o r m a t i o n h i d i n g , f o r m e l l P a r a m e t e r o d e r s o u n dd a n n c a l 1 - b y - b l a b l a b l a . "

Nur n i ch t ve rzwe i fe ln . I h r a rbe i te t m i t e inem Eng l i sch -Lehrbuchj a a u c h m e h r e r e J a h r e u n d r n u e s s t n i c h t a l l e s b e i m e r s t e n M a lv e r s t e h e n . . D a h a b t i h r e u r e K u m p e l u n d L e h r e r, m i t d e n e n i h rd ' rueber sprechen koennt . Warum nicht auch in PASCAL? Is t dochauch eine Sprache.

Aber gu t , e rs tma l e in Be isp ie l :

147

Page 154: Pascal - Eine kinderleichte Einführung

PROGRAM stringfunktionen;

(#++++++++++++++++++++++++++++++++++++++++^

Mit den Prozeduren in diesem Programm werden die vordefinierten Funktionen POS, INSERT und DELETE nachgebildet.

¥-++++++++++++++++++++++¥-+++++++++++++++++++++-/-+++^

CONSTmaxlaenge - 255;

TYPEmaxstring = STRING (.255.);

tstring = STRING (.maxlaenge.);

VARi : INTEGER;

s : t s t r i ng ;

(#++++++++++++++++++++++++++++++++++++++++++++++^

Der String suchstring wird in der Zeichenkette quelle gesucht. Wird ergefunden, so enthaelt index den Index in quelle, ab welchem suchstringdort zu finden ist. Sonst ist index - 0.

+++++++++++++++++++++++++++++++++++++++++^

PROCEDURE position ( suchstring, quelle : maxstring;VAR index : INTEGER );

VARgefunden ; BOOLEAN;grenze : INTEGER;

BEGIN

grenze := LENGTH ( quelle ) - LENGTH ( suchstring ) + 1;

index := 1; gefunden := FALSE;

WHILE (index <= grenze) AND NOT gefundenDO BEGIN

gefunden ;~ (suchstring = COPY ( quelle, index,LENGTH ( suchstring ) ));

index :- index + 1;END;

IF gefundenTHEN index :- index - 1ELSE index := 0;

END; Of von position a)

143

Page 155: Pascal - Eine kinderleichte Einführung

Nachbildung der Funktion INSERT. In den String ziel wird der Stringquelle ab Index index eingefuegt.Sollte durch das Einfuegen eine Zeichenkette entstehen, die laengerals tstring es erlaubt sein sollte, so wird nichts eingefuegt!

++++++++++++++++++++++++++++++++++++++++++++^

PROCEDURE einfuegen ( VAR ziel : tstring;quelle : maxstring; index : INTEGER );

BEGIN

IF LENGTH ( ziel ) + LENGTH ( quelle ) O maxlaengeTHEN

ziel := CONCAT ( COPY ( ziel, 1, index-1 ),quel le,COPY ( ziel, index, LENGTH ( ziel ) )

>}

END; dt von einfuegen *)

(*++++++++++++++++++++++++++++++++++++++^

Und noch die Routine DELETE nachbilden. Der String der Laengezeichenzahl wird ab Index index in ziel geloescht.

+++++++++++++++++++++++++++++++++++++++^

PROCEDURE loeschen ( VAR ziel : tstring; index, zeichenzahl : INTEGER );VAR

index2 : INTEGER;

BEGIN

IF index <- LENGTH ( ziel )THEN BEGIN

index2 :- index + zeichenzahl; (# Index des ersten Zeichens,welches nicht mehr geloescht werden soll #)

ziel ;~ CONCAT ( COPY ( ziel, 1, index - 1 ),COPY ( ziel. index2,

LENGTH ( ziel ) - index2 + 1 )>',

END;

END; (it von loeschen a)

149

Page 156: Pascal - Eine kinderleichte Einführung

BEGIN (it Hauptprogramm if)

(# Beispiele fuer den Aufruf der oben definierten Prozeduren if)

s := 'Ihr wuerdet mich erfreuen mit einem Geschenk';WRITELN ( 'Der String: ', s );

pos i t i on ( ' i ch ' , s , i ) ;WRITELN ( '"ich" wurde gefunden bei Index: ', i:3 ); WRITELN;

s := 'Ein FEH fehlerhafter String';W R I T E L N ( ' D e r S t r i n g : ' , s ) ;

posit ion ( 'FEH', s, i ) ; loeschen ( s, i , 3 ) ;

WRITELN ( 'Der String jetzt: ', s ); WRITELN;

pos i t ion ( ' feh ' , s , i ) ; e in fuegen ( s , 'n icht mehr ' , i ) ;

WRITELN ( 'Der String jetzt: ', s );

END.

We r b i s h e r n o c h g l a u b t e , v o r d e fi n i e r t e F u n k t i o n e n s e i e n h e i l i gu n d u n e n d l i c h k o m p l i z i e r t , d e r h a t h o f f e n t l i c h s e i n e M e i n u n gje t z t geaende r t .

Lest v iele v iele Programme und schaut euch die dort verwandtenP a r a m e t e r i n d e n U n t e r p r o g r a m m e n a n . D a d u r c h b e k o m m t i h rschneller eine Ahnung, wie wir das hier Gesagte gemeint haben.

150

Page 157: Pascal - Eine kinderleichte Einführung

3 .18 .4 . Und _ j etzt noch mehr E i_g en es

I n d e r g u t e n H o f f n u n g , i h r h a b t e u c h s c h o n s e h r m i t d e nP r o z e d u r e n a u s e i n a n d e r g e s e t z t , r n o e c h t e n w i r e u c h n u n d i eF u n k t i o n e n v o r s t e l l e n .

D i e P a r a l l e l e n z w i s c h e n d e n v o r d e fi n i e r t e n R o u t i n e n I N S E R T u n dD E L E T E z u P r o z e d u r e n s a h e n w i r i m l e t z t e n B e i s p i e l . W i e s t e h t sa b e r m i t P 0 S 7 p o s i t i o n s t i m m t e n u r a n n a e h e r n d d a m i t u e b e r e i n .

U n d s c h o n s i n d w i r m i t t e n d r i n n . P O S - w i e a u c h S I N u n d C O S u n dO R D u s w . - i s t e i n e F U N K T I O N ( k e i n e P R O Z E D U R ) . B e i d e s s i n d U n t e r -p r o g r a m r n t y p e n , k l a r , d e r U n t e r s c h i e d l i e g t i n i h r e m Z w e c k .

F u n k t i o n e n s o l l e n i m m e r e i n R e s u l t a t l i e f e r n . M e i s t e n s w i r dd i e s d a n n a u c h g l e i c h i n e i n e n l a n g e n A u s d r u c k e i n g e s e t z t .

E r l a e u t e r n w i r ' s a n d e r m a t h e m a t i s c h e n F u n k t i o n Ta n g e n s v o n x :

S i e e x i s t i e r t i n P A S C A L n o c h n i c h t , a l s o r n u e s s t e n w i r i m m e r ,w e n n s i e i r g e n d w o b e n o e t i g t w i r d , s c h r e i b e n :

S I N ( x ) / C O S ( x ) w e l c h e s T A N ( x ) e n t s p r i c h t .

I s t d i e s n u r e i n m a l n o e t i g , s o m a c h t d a s n o c h n i c h t s . T a u c h td e r T a n g e n s a b e r 5 b i s 1 2 m a l a u f , s o w i r d d i e S c h r e i b a r b e i t1aest i g.

W i r f a s s e n u n s d a h e r e i n H e r z u n d d e fi n i e r e n e i n e e i g e n e n e u eF u n k t i o n .

Tangens:

i \ COS ( x ) = 0 ? ' !I V I1 V x i

! J A \ s H E I M !^ j l 44

ITAH ( x )! wird{unendlichI gross

TAN ( x ) :SIN ( x )COS ( x )

D i e s e s A u s s e h e n s o l l t e s i e u n g e f a e h r h a b e n . N a s c h o e n ,PASCAL ergibt sich das:

i n

FUNCTION tan ( x : REAL ) : REAL;VAR

cosinus : REAL;

BEGIN

cosinus := COS ( x );

IF cosinus <> 0THEN tan :- SIN ( x ) / cosinusELSE tan := 1000000.0; (# unser Wert fuer Unendlich it)

END; (it tan #)

151

Page 158: Pascal - Eine kinderleichte Einführung

H a l l o , D u , d o r t i n d e r l e t z t e n R e i h e ! J a , D u ! S e l b s t D i r i s ta u f g e f a l l e n , w i e a e h n l i c h P r o z e d u r e n u n d F u n k t i o n e n i n i h r e mAufbau s ind, n icht wahr?

" K l a r , s o n n e n k l a r , Ich, a e h m m m , d a r f i c h n o c h e i n p a a rG r u e s s e . . . "

D a n k e . S e h t i h r . Z u r V e r d e u t l i c h u n g :

funktionsvereinbarung:

- i + * 1 + + i +—>--<TUHCTIOH>->~S funktionsnane !-->--! paraneterliste !-->-<?)•->--', typnaoe i-->--<?v->--: block !~>-Q~>

4 4 4 4 + 4 " 4 4

D a s s i h r n u n , s o l l t e t i h r e i n e F u n k t i o n s t a t t e i n e r P r o z e d u rv e r e i n b a r e n w o l l e n , F U N C T I O N s t a t t P R O C E D U R E s c h r e i b t , i s t n i c h tw e i t e r s c h w e r .

D i e P a r a m e t e r 1 i s t e u n d d e r B l o c k s i n d g e n a u s o , w i e b e iP r o z e d u r e n z u b e h a n d e l n .

W i e a b e r s c h o n a n g e d e u t e t l i e g t d e r w e s e n t l i c h e U n t e r s c h i e d i ma n z u g e b e n d e n T y p n a r n e n ( i n k l . D o p p e l p u n k t ) h i n t e r d e mF u n k t i o n s n a m e / d e r P a r a m e t e r l i s t e .

D i e s e r T y p ( n a m e ) l e g t n a e m l i c h f e s t , v o n w e l c h e m T y p d a sR e s u l t a t i s t , d a s d i e F u n k t i o n l i e f e r t . M e r k e : j e d e F u n k t i o nl i e f e r t e i n R e s u l t a t !

B e i t a n i s t e s v o m T y p R E A L . L o g i s c h , e i n T a n g e n s w e r t i s t e i n er e e l l e Z a h l . I n d i e s e m S i n n e r n o e c h t e n w i r e u c h z e i g e n , w i e e i n i g ev o r d e fi n i e r t e F u n k t i o n e n d a n n a u s s e h e n :

FUNCTION SIN ( x : REAL ) : REAL;

FUNCTION ORD ( ch : CHAR ) : 0..255;

FUNCTION CHR ( Ordnungszahl : INTEGER ) : CHAR;

FUNCTION TRUNC ( x : REAL ) : INTEGER;

FUNCTION POS ( suchstring, quelle : tstring ) : INTEGER;

FUNCTION ODD ( ganzezahl ; INTEGER ) ; BOOLEAN;

152

Page 159: Pascal - Eine kinderleichte Einführung

D a s s o l l t e g e n u e g e n . A u s d e n P a r a m e t e r n d e r F u n k t i o n w i r djewei ls genau EIN Resu l ta t geschn i tz t .

D e r F u n k t i o n s t y p ( , d e r h i n t e r d e r P a r a m e t e r l i s t e ) m u s s e i ns k a l a r e r o d e r U n t e r b e r e i c h s t y p s e i n ! R E A L g e h t a b e r a u c h .Verbünde, Felder oder so'was geht demnach nicht!statemeht

Jenau. B is e ine Funkt ion ihre Arbei t beendet hat , muss mindest e n s e i n m a l i n i h r e m A n w e i s u n g s t e i l i h r e m F u n k t i o n s n a m e n e i nWert, der vom Funkt ionstyp ist , zugewiesen worden sein!

Siehe dazu auch die Zuweisungen: tan := . . . in der /F-Anweisungunserer Tangensfunkt ion!.

D iese Zuwe isung i s t noe t ig , dami tResu l ta t an ih rem Au f ru fso r t abg ib t !

d i e Funk t i on uebe rhaup t e i n

Dazu verschiedene Syntaxdiagrarnme:

wertZuweisung:

4 4

- 7 ! v a r i a b l e ! 7 — > — 1 : = ) - — > -V + * 7 v ^j 4 1 5+--! funktionsname !--+

4 4

4 4-! ausdruck ■-4 4

funktionsaufruf:

4 4—>—! funktionsnaae I-

4 4->-"—(£>■->■

-<- - i j y4 4

—1 aktueller paraseter !-4 4

>

faktor:

4 4

.)-..—} funktionsaufruf I—7-v + 4 vI 4 4 j+ — I v a r i a b l e ! — +j t + ;j + _ 4 j4—; vorzeichenlose !--+! I K o n s t a n t e ! Iu 4 4 *: + + 1*-\^—\ ausdruck I—\Jy+; + + j. 4 1 !

*—( NOT )--)-! faktor !--+— ' t +

1 5 o

Page 160: Pascal - Eine kinderleichte Einführung

Noch einmal kurz zurueck zu unserer to l len Funkt ion tan. Wurdesie nun von uns im Programm vereinbart , so koennen wir ueberal lan den S te l l en , an denen s ie s i ch tba r i s t , s ta t t

y : - S I N ( x ) / C O S ( x ) o d e r

y :- y # SIN ( x ) / COS ( x ) + SQR (SIN ( x ) / COS ( x ))

schre iben

y : = t a n ( x ) o d e r

y := y * tan ( x ) + SQR ( tan < x ) )

W iev ie l mehr Uebers ich t l i chke i t das b r ing t , i s t schon an d iesenk le inen Ausd ruecken zu sehen . We lche Ve rbesse rungen be i nochkomp l i z i e r t e ren Ausd ruecken , d i e w i r du rch Funk t i onen e r se t zen ,zu erzielen sind, kann man sich kaum ausmalen.

Zur Er innnerung: Da Funkt ionen immer Resul tate l iefern, koennensie nur in Ausdruecken verwandt werden!

U n d n u n , l i e b e K i n d e r g e b t f e i n a c h t , w i r h a b e n e u c h w a smi tgebrach t :

Z w e i ( i n Z a h l e n : 2 ) F ' r o g r a m m e , d i e e u c h v i e l v i e l S p a s sb e r e i t e n s o l l e n :

Z u e r s t , a l s h o m m a g e a n u n s e r e n N a m e n s g e b e r f u e r d i e h i e rerk laer te Programmiersprache, Herrn B la ise Pascal :

Das Pascal'sehe Dreieck

Die einzelnen Zahlen des Dreiecks werden durch

f r t \ _ n l _Jv k!(n-k)!

b e r e c h n e t ,

154

Page 161: Pascal - Eine kinderleichte Einführung

PROGRAM pascal;

CONSTzeilen = 10;

VARzei le , spa l te : 0 . .Ze i len ;

FUNCTION binom ( n, k : INTEGER ) : INTEGER;

FUNCTION fakultaet ( x : INTEGER ) : REAL;

Of Fakultaet von x (geschrieben: x!) ist: 1 * 2 * ... # (x-1) # x *)

VARi : INTEGER;f : REAL;

BEGINf := 1.0;

IF x > 0THEN FOR i := 1 TO x

DO f := f it i;

fakul taet := f ;END; (a fakultaet if)

BEGIN (a binom #)

b i n o m : - T R U N C ( f a k u l t a e t ( n ) /( fakul taet ( k ) i t fakul taet ( n-k ) )

) ;

END; (# binom it)

BEGIN dt Hauptprogramm *)

FOR zeile :- ö TO zeilen-lDO BEGIN

WRITELN; WRITE ( ' ': (zeilen-zeile)a2 );

FOR spalte ;- 0 TO zeileDO WRITE ( binom ( zeile, spalte ) : 4 );

END;

END.

155

Page 162: Pascal - Eine kinderleichte Einführung

U n d z u m S c h l u s s d i e A u fl o e s u n g d e s R a e t s e l s s W i e k a n n i c h e i n emat h emat i sc he Funktion auf d em Bildschirm darstellen?

D i e z u m a l e n d e F u n k t i o n m u s s j e w e i l s n e u i n ' s P r o g r a m me i n g e t r a g e n w e r d e n !

PROGRAM funktionsgraph;

CONSTZei len - 22;spal ten =80;

(it Zeilen auf Schirm: 1..Zeilen #)d t S p a l t e n : 1 . . s p a l t e n # )

TYPEtwerte = ARRAY (.1..spalten.) OF REAL;

VARfunktionswerte : twerte; Of hierhinein werden erstmal alle Funktions

werte des Intervalls xmin..xmax geschrieben *)

x m i n , x m a x : R E A L ;

c h : C H A R ;

FUNCTION f ( X : REAL ) : REAL;BEGIN

IF x = 0.0THEN f := 1000000.0ELSE f := SIN ( x ) / x;

dt wieder mal unendlich it)(if fuer eine andere Funktion muss diese

Zeile jeweils geaendert werden #)

END; f * f * )

156

Page 163: Pascal - Eine kinderleichte Einführung

Alle Werte der Funktion f im Intervall xmin..xmax berechnen

PROCEDURE allewerte ( xmin, xmax : REAL );

VARx , d x : R E A L ;

INTEGER;

BEGIN

(a ++++++++ Festlegen der Schrittweite bis zu naechsten x-Wert +++++++++++ #)(ü ++++++++ in Abhaengigkei t von der Bi ldschi rmbrei te +++++++++++ *)

IF (xmax <= 0) OR (xmin >- 0)THEN dx := ( ABS ( xmax ) - ABS ( xmin ) ) / spaltenELSE dx := ( xmax - xmin ) / spalten;

(n ++++++++++++ Berechnen aller Funktionswerte im Intervall *++++++++++++ it)

GOTOXY ( 1, zeilen+1 ); CLREOL;WRITELN ( 'Einen Moment, ich berechne die Funktionswerte:' );CLREOL;

x := xmin;

FOR i J- / TO spaltenDO BEGIN

W R I T E ( ' . ' ) ;

funkt ionswerte (. i . ) := f ( x ) ;

x :■= x + dx;END;

END; dt allewerte *)

(* fuer jeden Wert einen Punkt *)

(a naechster x-Wert «>

157

Page 164: Pascal - Eine kinderleichte Einführung

Ermittlung des Maximalwertes aller Funktionswerte

FUNCTION maximum : REAL;VAR

i : INTEGER;max : REAL;

BEGIN

max := f unk t i onswe r te ( . 1 . ) ; ( * nehmen w i r 'ma l so an # )

FOR i :- 2 TO spaltenDO IF funktionswerte (,i.) > max

THEN max := funktionswerte (,i.);

maximum := max;

END; (a maximum it)

Ermittlung des kleinsten Funktionswertes

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++^

FUNCTION minimum : REAL;VAR

i ; INTEGER;min : REAL;

BEGIN

min :- funktionswerte (.1.);

FOR i :- 2 TO spaltenDO IF funktionswerte (.i.) < min

THEN min :- funktionswerte (.i.);

minimum :- min;

END; (it minimum #)

158

Page 165: Pascal - Eine kinderleichte Einführung

(#++++++++++++++++++++++++++++++++++++++++^

Zeichnen des Graphen der Funktion im Intervall xmin..xmax aufgrundder berechneten Werte

PROCEDURE zeichnen ( xmin, xmax : REAL );

VARmin, max, dy, yh : REAL;x , y : I N T E G E R ;c h : C H A R ;

BEGIN

allewerte ( xmin, xmax );

min := minimum;max i= maximum;

(# erst alle Funktionswerte berechnen it)

(it die aeussersten Extrema ermitteln *)

CLRSCR;

(it +++++++ Die kleinstmoegl iche Auf loesung in y-Richtung ermitteln +++++++ n)

IF (max <= 0.0) OR (min >~ 0.0)THEN dy := ( ABS (max) - ABS (min) ) / ZeilenELSE dy := ( max - min ) / Zeilen;

(H ++++++++++•/■+++ jetzt ersteinmal den Graphen zeichnen ++++++++++++++++++ #)

FOR x := 1 TO spaltenDO BEGIN

y ;= TRUNC ( ( max - funktionswerte (. x .) ) / dy );

GOTOXY ( x, y ); WRITE ( ' . ' ) ;

END;

(it +++++•/■++++++++■*■ Noch erlaeuternde Werte hinzufuegen +++++++++++++++++++ *)

IF (max >= 0 ) AND (m in <= 0 ) ( i t d .h . y=0 i s t au f Sch i rm * )THEN yh := 0E L S E y h : - m a x - I I a d y ;

GOTOXY ( 1, TRUNC ( (max - yh) / dy ) );

W R I T E ( y h : 7 : 2 , ' - > ' ) ;

GOTOXY ( 1, zeilen+1 );WRITELN ( 'Zum Menue? Dann irgendeine Taste druecken: ' );WRITE ( 'X-Interval l : Xmin: ' , xmin:7:2, ' Xmax; ' , xmax:7:2, ' / ' ,

' Y- I n t e r v. : Y m i n : ' , m i n : 7 : 2 , ' Y m a x : ' , m a x : 7 : 2 ) ;READ ( KBD, ch );

END; Of zeichnen #)

159

Page 166: Pascal - Eine kinderleichte Einführung

BEGIN (* Hauptprogramm #)

CLRSCR;

REPEAT

GOTOXY ( 1, zeilen+l );WRITE ( ■'Funktionsgraph; Z(eichnen der Funktion; E(nde: ' );READ ( KBD, ch );

I F c h I N ( . ' Z ' , ' z ' . )THEN BEGIN

REPEATGOTOXY ( 1, zeilen-f-1 ); CLREOL;WRITE ( 'Untere Grenze des X- Interva l I (Xmin) ; ' ) ;READLN ( xmin );

GOTOXY ( 50, zeilen-f-1 );WRITE ( 'Obere Grenze (Xmax): ' ) ;READLN ( xmax );

UNTIL xmax > xmin;

zeichnen ( xmin, xmax );

END;

U N T I L c h I N ( . ' e ' , ' E ' . ) ;

END.

160

Page 167: Pascal - Eine kinderleichte Einführung

O • X O M W I R e k u r s i o n e n n u r f u e r S c h w i n d e l f r e i e

D a m a l s , L e i p z i g e i n u n d l e i p z i g , j a a a , d a h a b e n w i r g e s a g t , d a s sa l l e O b j e k t e i n d e m B l o c k s i c h t b a r s i n d , i n d e m s i e d e fi n i e r tw u r d e n , u n d i n a l l e n , d i e u n t e r g e o r d n e t s i n d .

E ine ganz besonders e igenw i11 ige Ausw i rkung ze ig t das , wenn mans c h r e i b t :

PROCEDURE pl ( x : INTEGER );BEGIN

pl ( 100 ); p A ruß sich selbst auf /

END; (a pl a)

D ieses Phaemornen des s i ch -se lbs t -au f r u f ens nenn t de r FachmannDIREKTE REKURSION.

D a s i s t e t w a s o , a l s w u e r d e m a n s i c h i m S u p e r m a r k t d e r F i r m ax x x x a u f d e m U e b e r w a c h u n g s r n o n i t o r s e h e n , d e r u n s z e i g t , w i e w i ru n s a u f d e m U e b e r w a c h u n g s m o n i t o r s e h e n , d e r u n s z e i g t , w i e w i ru n s a u f d e m U e b e r w a c h u n g s m o n i t o r s e h e n , d e r u n s z e i g t , w i e . . . .

S c h u r z b e i s e i t e , j e t z t i s t S c h u l z . I h r s e h t , e i n e z i e m l i c hschw inde lnd machende Sache , d i e Reku rs i on .

S c h r e i b e n w i r a b e r d o c h ' m a l e i n e l u s t i g e k l e i n e r e k u r s i v eP r o z e d u r :

PRROGRAM schwindelig;

PROCEDURE rekursiv;BEGIN

WRITE ( 'Du da und ' ) ; rekurs iv ;END;

BEGIN

rekurs iv ; WRITELN ( 'Du da auch. ' ) ;

END.

161

Page 168: Pascal - Eine kinderleichte Einführung

D e r s c h l i t z o h r i g e P A S C A L — J u e n g e r h a t n a t u e r l i c h s c h o n h e r a u s ,w i e d i e A u s g a b e a u s s i e h t :

Du da und Du da und Du da und Du da und na ja, usw.

a m S c h l u s s d a n n :

.... und Du da und Du da auch.

T i p p t e s d o c h e i n f a c h e i n u n d l a s s t e s l a u f e n . D i eU e b e r r a s c h u n g w i r d g e w a l t i g s e i n . H i h i h i h i h i . . .

H a , r e i n g e f a l l e n ? ' t s c h u l d i g u n g . A b e r e r s t a u s E r f a h r u n g w i r dm a n k l u g ( g r i n s ) . J e d e r h a t a l s o g e m e r k t : S o g e h t ' s n i c h t !

D e r H a k e n i s t d e r U r n s t a n d , w i r h i e l t e n e s b i s h e r n i c h t f u e rn o e t i g , d u r c h e i n e A b b r u c h b e d i n g u n g d e r e w i g e n ( ! ) R e k u r s i o ne i n e n R i e g e l v o r z u s c h i e b e n . S o r i e f s i c h d i e P r o z e d u r a u f u n d a u fu n d a u f u n d a u f u n d . . . o h n e e i n E n d e z u fi n d e n .

M o r a l v o n d e r G e s c h i e h t : o h n e A b b r u c h g e h t e s n i c h t !

A l s o i m m e r e i n e p a s s e n d e B e d i n g u n g e i n b a u e n :

PROGRAM schonbesser;

PROCEDURE rekursiv ( n : INTEGER );BEGIN

WRITE ( 'Du da und ' );

IF n > 0THEN re kursiv ( n-l );

END; (» rekursiv i t )

BEGIN

rekurs iv ( 20 ) ; WRITELN ( 'Du da auch. ' ) ;

END.

In d ieser Weise geht 's . Bei jedem Aufruf von rekurs iv wi rd e inek l e i n e r e Z a h l a l s a k t u e l l e r P a r a m e t e r u e b e r g e b e n . D a d u r c h i s tgewaehrleistet, dass irgendwann irgendwo n gleich 0 ist . Und dannr u f t s i c h d i e P r o z e d u r n i c h t m e h r a u f , s o n d e r n e s g e h t z u r u e c kzur a l l e re rs ten Au f ru fs te l l e (be i uns ins Haup tp rog ramm) .

U m u n s e i n e n s e r i o e s e n A n s t r i c h z u g e b e n , f u e h r e n w i r j e t z te i n e g a n z p r o f e s s i o n e l l e r e k u r s i v e P r o z e d u r e i n . M a n fi n d e t s i ein jedem besseren Fachbuch (also auch hier).

16 :

Page 169: Pascal - Eine kinderleichte Einführung

D i e F a k u l t a e t e i n e r Z a h l i s t r e k u r s i v d e fi n i e r t d u r c h :

1 f ue r n—O

n

v n * ( n - 1 ) ! f u e r n > 0

W i r h a t t e n d i e F a k u l t a e t s c h o n e i n m a l i n u n s e r e m P r o g r a m mp a s c a l b e n u t z t ; j e d o c h l a n g e n i c h t s o e l e g a n t !

FUNCTION fakultaet ( x : REAL ) : REAL;BEGIN

IF x > 0THEN fakultaet := x * fakultaet ( x - 1 )ELSE fakultaet ;= l;

END; (it fakultaet #)

W e l c h e G r a z i e s i c h h i e r d o c h z e i g t , h a c h c h c h . S e u f z .

Z u b e a c h t e n i s t d i e A b b r u c h b e d i n g u n g ! W e n n x < = 0 i s t , d a n nw i r d d e r F u n k t i o n s w e r t a u f 1 g e s e t z t u n d e i n " R u e c k s t u r z " ( n i c h tg e r a d e a u s d e m H y p e r r a u m , a b e r . . . ) z u r e r s t e n A u f r u f s t e l l ee r f o l g t . A u t o m a t i s c h w i r d d a b e i d i e F a k u l t a e t b e r e c h n e t , t o i 111 .

U n s e r M e r k s a t z : J e d e r r e k u r s i v e A l g o r i t h m u s l a e s s t s i c h a u c hi t e r a t i v b e s c h r e i b e n !

I t e r a t i v b e d e u t e t dass man st at t eines rekursiven Au f r u f sv i e l l e i c h t e i n e S c h l e i f e v e r w e n d e t ( s i e h e d i e a l t e L o e s u n g f u e rd i e F u n k t i o n f a k u l t a e t ) .

R e k u r s i v e A l g o r i t h m e n b e n u t z t m a n , w e n n ' s a b s o l u t e l e g a n ta u s s e h e n s o l l , w e n n ' s u r n b e d i n g t n o e t i g i s t o d e r w e n n m a n s i c h d a sImage eines Wissenden geben rnoechte.

E i n F ' r o b l e r n , w e l c h e s h i e r m i t h i n e i n s p i e l t i s t , w a s e t w a i nf o l g e n d e m F a l 1 g e t a n w e r d e n s o l l :

PROCEDURE pl ( a, b : INTEGER );BEGIN

p2 ( a, a > b );» m m

END; (it pl *)

PROCEDURE p2 ( VAR X : INTEGER; c : BOOLEAN );BEGIN

pl ( 100, 99 );mm a

END; (* p2 a)

163

Page 170: Pascal - Eine kinderleichte Einführung

Dies nennt man INDIREKTE Rekurs ion. Indi rekt deshalb, wei l p2s i ch n i ch t se lbs t au f ru f t , sonde r dazw ischen e rs t p l scha l t e t .

Nach unseren b i she r igen Kenn tn i ssen kann man das so j edochn i c h t m a c h e n ! p 2 i s t f u e r p l n i c h t s i c h t b a r ! W i r e r i n n e r n u n s ?Textuel1 es Vorangehen?

Gut behalten. Abhil fe schafft das Symbol FORWARD. Wir koennendamit ein Unterprogramm "vorwaerts" (nach vorne) sichtbar machen.

D a z u s c h r e i b e n w i r v o r d e r e r s t e n S t e l l e , a n d e r d a sUnterprogramm benoetigt wird, seinen Kopf und dann nur FORWARD:

PROCEDURE p2 ( VAR x : INTEGER; c : BOOLEAN );F O R W A R D ; < = = - > r . . , n^- hier nvifwn UnterproQyQmmmp{.

und fonwmPROCEDURE pl ( a, b ; INTEGER );BEGIN

p2 ( a, a > b );m m 0

END; ( i t p l i f )

PROCEDURE p2;BEGIN

pl ( 100, 99 );0 0 *

END; Of p2 »)

hier d((nn nur nochpROQEJiORE /TMCTiotJund der linterprvorarwiname. ■So we,, natürlich! c%rUnter pfQQrntn™ block!

FORWARD repraesentiert guasi den Block des Unterprogramms, deraber e rs t be i de r w i rk l i chen Vere inbarung s teh t .

Kommt endlich die Stelle, an der das Unterprogramm dann konkretdefiniert werden soll, so muss man dort nur noch PROCEDURE oderF U N C T I O N u n d d e n N a m e n s c h r e i b e n . D e r R e s t i s t j a a u s d e rF O R M A R D — D e k l a r a t i o n s c h o n b e k a n n t .

B e i F u n k t i o n e n i s t d e rVorwaertsdeklarat ion anzugeben!

Funk t i ons t yp nur i n der

Eine Bsonderheit einiger PASCAL-Dialekte ist, dass man dort CPU(besser: Dem Uebersetzungsprogramm) ausdruecklich Bescheid sagenmuss, wi l l man ein rekursives Unterprogramm schreiben.

In TURBO-PASCAL muss man VOR das Unterprogramm<pcu. sol K£/A/ Slonk zuzeiten

O t ü A - i t ) * u n d 4 / F V• ♦ o

schreiben, und hinter das Unterprogramm dann:

(it$A-f-if)

164

Page 171: Pascal - Eine kinderleichte Einführung

W e r ' s g a n z g e n a u w i s s e n r n o e c h t e , d e r s o l l t e i m H a n d b u c hfuer das Uebersetzungsprogramm (auch Compiler genannt) nachlesen.

( * $ A - * )FUNCTION fakultaet ( x : REAL ) ; REAL;BEGIN

a m m

END; (it fakultaet a)(#$A+*)

i s t i n T U R B O - PA S C A L d i e r i c h t i g e S c h r e i b w e i s e .

165

Page 172: Pascal - Eine kinderleichte Einführung

3 . 1 9 . W i r s c h a f f e n f u e r d i e E w i g k e i t

N u r n o c h w e n i g e S e i t e n b i s z u m E n d e . H u r r a ! D a n n i s t ' sgeschafft. Wir haben uns einmal durch PASCAL durchgearbeitet.

Stop! Stop! Keine uebertr iebene Euphor ie. Vor d ieses Zie l habend i e G o e t t e r n o c h d i e D a t e i e n g e s t e l l t . E i n B e r g , d e r e r s t m a lbezwungen sein wi l l .

Keimte in euch denn niemals der Wunsch, euren muehsam gesammelten Daten, d ie mit den to l ls ten Programmen bearbei tet werden, e inDasein zu bescheren, welches laenger waehrt, als bis zum Abschalten des Rechners?

D i e P r o g r a m m e u e b e r d a u e r n j a a u c h , b i s i h r z u r n a e c h s t e nSitzung an den Computer kommt.

Ja , so i s t ' s rech t ! Es muss in euch wueh len . . . das unbaend igeVer langen nach so lch e iner Moegl ichke i t macht euch nervoes. . . Esmuss i rgendwie gehen, dass d ie Daten vor der Zers toerung durche i n A u s s c h a l t e n g e s c h u e t z t w e r d e n , m a n m u s s s i e d a u e r h a f t" re t ten" koennen. Aber w ie , w ie- , «-■ o

Mi t te ls Date ien, ganz e in fach. Man legt e ine Date i an.

Enttaeuscht? Oh, niemand hat eine Ahnung, was Dateien sind? Naschoen, dann fangen wir ganz vorne an und erklaeren es.

166

Page 173: Pascal - Eine kinderleichte Einführung

3 .19 .1 Die Buer okr at i e beg innt

Da te ien (eng l , fi le ) en tsp rechen Kar te ien in e inem Arch iv. JedeKa r te i ha t e i nen Namen , j ede Ka r t e i ha t e i nen I nha l t , der au fKaertchen steht und ganz bestimmte Angaben umfasst (manchmal nurZahlen, manchmal Namen und Adressen usw. usw.) . Das Archiv is tm e i s t s o w e i t w e g , d a s s e i n e Z u s a m m e n a r b e i t m i t i h m e r h e b l i c hl a e n g e r d a u e r t al< haet te man a l le wicht igen Sachen auf demSchreibtisch (d.h. im Speicher von CPU -die Kaestchen und so-)

LsE H Es a g ]

Die. Kasten enthaltenjeweils eint K.orlei,3)er Name steht awfolem Kärtchen

K o m m e n w i r v o n d e n K a r t e i e n z u d e n D a t e i e n , d a n n fi n d e n w i rdiese auf einem "ext er ne-n Sp e i c h er med i um" , z.B. einer "Floppy-D i s k " o d e r e i n e r " P l a t t e " . M e i s t s i n d ' s d i e s e r u n d e nS c h l a b b e r s c h e i b e n ( " F l o p p i e s " ) . D i e s e S p e i c h e r m e d i e n w e r d e n a u c h" M a s s e n s p e i c h e r " g e n a n n t , w e i l s i e e i n e U n m e n g e v o n D a t e ns p e i c h e r n k o e n n e n ( a u c h n a c h A b s c h a l t e n d e s R e c h n e r s ! ) .

D e r M a s s e n s p e i c h e r i s t d a n n u n s e r A r c h i v , i n d e m w i r u n s e r eD a t e i e n s p e i c h e r n .

D a t e i e n b e s t e h e n - w i e F e l d e r a u c h - a u s e i n z e l n e n K o m p o n e n t e n ,z . B . l a u t e r Z a h l e n o d e r V e r b ü n d e o d e r o d e r o d e r . K e i n e G r e n z e nf u e r d i e P h a n t a s i e .

W o l l t i h r n u n d i e D a t e n i n e i n e r D a t e i l e s e n o d e r a e n d e r n , s or n u e s s t i h r z u n a e c h s t e i n e D a t e i v a r i a b l e ( F i l e v a r i a b l e ) a n l e g e n ,b e i F e l d e r n i s t ' s j a e b e n s o .

file-typ: strukturierter typ:

- - > - -(FILE V- •>—(ÖF>-4 4

-)---! typ !--->+ 1 -

4 4-->---—j fiie-typ !—--

V + + tj + + ;+—I array-typ I—+i + 4 >

j 4 4 j*■—! set-typ !—+I * + Ij 4 4 j♦—i record-typ!—+

4 4

1S7

Page 174: Pascal - Eine kinderleichte Einführung

TYPEtdatei = FILE OF REAL;

tperson - RECORDname, vor namea l t e r

END;

STRIN ( .20.) ;INTEGER;

tpersonendatei = FILE OF tperson;

VARzahlendatei : tdatei;

rasterdatei : tpersonendatei;

z a h l e n d a t e i d e l a r i e r t e i n e D a t e i , i n w e l c h e r v i e l e v i e l e R E A L -Wer te s tehen, ras terdate i e ine, d ie e ine Unmenge von Verbundenvorn Typ tperson beinhaltet.

J e d e r e r k e n n t a u f A n h i e b , d a s s F e l d e r w i e a u c h D a t e i e n a u slauter typgleichen Komponenten bestehen.

Den Vor te i l der Date ien, e ine dauerhaf te Speicherung von Datenz u e r m o e g l i c h e n , e r k a u f e n w i r u n s j e d o c h m i t e i n i g e nUnannehmlichkeitens

1. Auf die Komponenten einer Datei kann nur S E Q U ENTIELLzugegriffen werden. D.h. man kann ein Element lesen und dann dasnaechste und dann das naechste usw.5 die Moeglichkeit auf das 1.,2 . , 7 . , 1 0 0 0 . u n d d a s l e t z t e G L E I C H Z E I T I G o d e r B E L I E B I G(in i rgendeiner F:ei hen fo lge) zuzugrei fen, besteht n icht .

A l s B e i s p i e l k a n n u n s w i e d e r d i e K a r t e i d i e n e n . D o r t k o e n n e nw i r i m m e r n u r v o n v o r n e n a c h h i n t e n d i e e i n z e l n e n K a e r t c h e ndurchb lae t te rn . Rueckwaer ts geh t ' s n i ch t . W i r duer fen auch ke ineKarte ueberspr ingen.

d«"es Kärtchenbetrachten wir Gerade

2. Wir koennen immer nur den Inhal t e iner e inzigen Komponentei n d e r D a t e i b e t r a c h t e n , g l e i c h s a m w i e d u r c h e i n F e n s t e r. S o l ld a s n a e c h s t e E l e m e n t i n s p i z i e r t w e r d e n , s o m u e s s e n w i r u n s e rF e n s t e r w e i t e r r u e c k e n . S e l b s t r e d e n d v e r l i e r e n w i r d a d u r c h d e nBlick auf das vorangehende Element.

y

80 -2r w- HTS

filetamponevice

i f SO

/"Fensber

168

Zoo M- S-

weiteraeruckt ai^dashöchste Bereut

J?

Page 175: Pascal - Eine kinderleichte Einführung

Genug der Nach te i le (s ie t re ten spae te r noch deu t l i ch heraus) .E i n V o r t e i l , d e r n i c h t u n b e a c h t e t b l e i b e n s o l l t e , i s t d i epotent ie l l unbegrenzte Groesse von Dateien.

Be i Fe lde rn muss ten w i r uns immer schon be i de r Dek la ra t i onentsche iden, w iev ie le E lemente s ie umfassen so l len (s iehe Indext y p ) . D i e s e B e s c h r a e n k u n g f a e l l t w e g , d e k l a r i e r e n w i r e i n F i l e .Dort hinein koennen iö, 1000, 5000 oder mehr -je nach Wunsch undPlatz auf dem Massenspeicher- Komponenten hineingeschrieben werden.

"Und wie kann man nun mit den Dateien, die so unendbehrlich sind,a r b e i t e n ? "

Kommt so for t , der Her r. . .

169

Page 176: Pascal - Eine kinderleichte Einführung

3 . 1 9 . 2 . W i r l e r n e n l e s e n

W i e d i e U e b e r s c h r i f t s c h o n a n d e u t e t , w o l l e n w i r e u c h z u n a e c h s td a s R i t u a l b e i b r i n g e n , w e l c h e s n o e t i g i s t , w i l l m a n d e n I n h a l te i n e r D a t e i l e s e n .

U n d w i e d e r i s t d i e U e b e r e i n s t i m m u n g m i t e i n e m A r c h i v n i c h t z uuebe rsehen :

- E r s t m u e s s e n w i r d e n N a m e n d e r K a r t e i f e s t l e g e n , w e l c h e w i rb e t r a c h t e n r n o e c h t e n .

- D a n a c h o e f f n e n w i r d i e K a r t e i ( w i r z i e h e n d i e S c h u b l a d eh e r a u s ) u n d r i c h t e n d a b e i u n s e r F e n s t e r s o e i n , d a s s w i r d i ee r s t e K a r t e i n d e r K a r t e i b e t r a c h t e n .

- Dann koennen w i r mun te r l esen .

- A m S c h l u s s m a c h e n w i r d i e S c h u b l a d e w i e d e r d i c h t , w i rs c h l i e s s e n d i e K a r t e i .

S e h r s i m p e l , s e l b s t B e a m t e v e r s t e h e n e s . K l a r , d a s s i n PA S C A Ldas Ganze e twas anders au fgeschr ieben werden muss :

VARd a t e i : F I L E O F R E A L ;

komponente : REAL;

U n s e r e B e i s p i e l d e fi n i t i o n , a n d e r w i r e r s t m a l a l l e s e r l a e u t e r n .D e r Ty p d e s F i l e ( a l s o s e i n e r K o m p o n e n t e n ) i s t R E A L .

ASSIGN ( filevariable, filename )

Wir benennen die Datei auf des Massenspeicher, mit der wira rbe i t en wo l l en . Immer wenn w i r spae te r im P rog ramm d iefilevariable (z.B. datei) verwenden, weiss der Rechner, dass wiruns auf die Massenspeicherdatei mit dem Namen filename beziehen.Dort stehen unsere zu lesenden REAL-Werte.

filename ist ein String, der einen Dateinamen enthaelt, wie ihrihn auch angebt, wenn ihr einen Programmtext retten wollt.

ASSIGN ist KEINE Standardprozedur. Es gibt sie nur in TURBOPASCAL. Wie's in anderen Dialekten aussieht, dass muss man imCompiler-Handbuch nachschlagen.

Beispiel: ASSIGN ( datei, 'ZAHLEN.DAT )

170

Page 177: Pascal - Eine kinderleichte Einführung

RESET ( filevariable )

D ie Da te i w i rd geoe f fne t . Das Fens te r w i rd au f d ie e rs teKomponente gestellt. Vorher muss der filevariablen ein Dateinamezugeordnet worden sein (mit ASSIGN/).

Be isp ie l : RESET ( da te i ) jeder sieht: die Kartchen sind

f ^ q e b l a t t e r t o

der Karteikastenwurde aeoj^net

READ ( filevariable, varl, var2,

Hurra, wir koennen die Daten aus dem File lesen. Latuernich mitREAD. Ganz fest rnuesst ihr euch merken, dass, will man nicht vonder Tastatur lesen sondern aus einer Datei, man die filevariableder Datei als erstes in der Klammer auffuehrt. Dahinter koennendann Variablen stehen, die ALLE von dem Typ sein muessen, denauch die Filekomponenten haben/

Beispiel: READ ( datei, komponente )

E s p a s s i e r t f o l g e n d e s : D e r R e c h n e r n i m m t d i e D a t e n d e rF i l e k o m p o n e n t e , d i e e r i m A u g e n b l i c k d u r c h s e i n F e n s t e r s i e h t ,und pack t s i e i n d i e Va r i ab le (h i e r : komponen te ) . Dann s te l l t e rgeschwind sein Fenster auf das naechste Fi leelement.

-100 %5- Zoo

j e t z t R E A D ( fi l e v a r i a b l e , v a r l )

4QÖ 15 hrt-

<?~ der y&t der'" Tileltömponenbe

wurde im dlitVariable ein-oelesen, ...

*?dc\& TensUr wurde ou£ die nächste fikkomponente k/eiUroerücktj

Merke: READLN nicht bei Dateien benutzten!

EOF ( filevariable )

Eine vordefinierte Funktion, die TRUE od. FALSE liefert. TRUEergibt sie, wenn das Fenster ueber das letzte Element in derDatei (welche zu filevariable gehoert) hinausgeschoben wurde. EOFbedeutet End Of File. Liefert EOF TRUE, so sollte man tunlichstnicht mehr versuchen, von der Datei zu lesen/

B e i s p i e l : E O F ( d a t e i )

171

Page 178: Pascal - Eine kinderleichte Einführung

i r ZooDas T«nster steht hinter derletzten Tilekomysonenten {derTöo).BOF curdle. jet?t Tftuf Liefern

Diese Funkt ion is t deshalb wicht ig, wei l wi r ja n ie wissen,wieviele Komponenten in der Datei stehen - ein Vor- und Nachteil.Folglich kann man ohne sie nie entscheiden, ob man schon dasletzte Element gelesen hat.

CLOSE ( filevariable )

Wir schliessen die Datei wieder. Das ist immer zu tun, wenn mannicht mehr mit ihr arbeiten moechte. Nach CLOSE ist filevariableKEIN Dateiname mehr zugeordnet. Sollte irgendwann wieder derWunsch bestehen, mit filevariable zu arbeiten, so muss man zuerstwieder ASSIGN und RESET benutzen. CLOSE ist keine Standard-PASCAL-Prozedur/

E i n e k l e i n e B e m e r k u n g n o c h : d a s F e n s t e r , w e l c h e s u n s i m m e rnur e ine Komponen te sehen laess t , kann nu r m i t te l s READ und RESETv e r s c h o b e n ( u e b e r d i e E l e m e n t e b e w e g t ) w e r d e n . R E S E T s t e l l t e si m m e r w i e d e r a u f d i e e r s t e .

N a s c h o e n . N a c h d i e s e r r e c h t a u s f u e h r 1 i c h e n E r l a e u t e r u n g e i nBei spi elProgramm:

PROGRAM elementezaehlen;VAR

d a t e i : F I L E O F R E A L ;komponente ; REAL;

elemente : INTEGER;

BEGIN

elemente := 0;

ASSIGN ( datei, 'ZAHLEN.DAT' );

RESET ( da te i ) ;

WHILE NOT EOF ( datei )

dt einen Namen geben if)

(it Datei oeffnen #)

dt pruefen, ob Dateiende erreicht #)

DO BEGINREAD ( datei, komponente ); <# Komponente lesen n)

elemente :- elemente + l;END;

CLOSE ( datei ); (* am Schluss Dateiwieder schliessen #>

WRITELN ( 'In der Datei "ZAHLEN.DAT" sind ', elemente:5,' Zahlen (Elemente) enthalten." );

END.

172

Page 179: Pascal - Eine kinderleichte Einführung

W i r h a b e n e i n f a c h m a l d i e E x i s t e n z e i n e r D a t e i m i t N a m e n'ZAHLEN.DAT' angenommen. Ihr findet al le eingefuehrten Prozedurenund Funktionen wieder, in harmonischem Zusammenspiel.

Vo r d e m L e s e n e i n e r K o m p o n e n t e a u s d e r D a t e i s o l l t e i m m e rg e p r u e f t w e r d e n , o b n i c h t v i e l l e i c h t s c h o n d a s E n d - O f - F i l ee r r e i c h t i s t . I n d e m F a l l a l s o n i c h t l e s e n ! D e s h a l b h a b e n w i roben eine WHILE-Schle-i fe benutzt.

Fuer die Laessigen sei erwaehnt, dass, wenn man nur aus einerDate i ge lesen ha t , n ich t u rnbed ing t CLOSE benutz t werden muss .Aber lieber einmal mehr CLOSEn, als einmal zu wenig.

173

Page 180: Pascal - Eine kinderleichte Einführung

3. 19. W i r l e r n e n s c h r e i b e n

B is eben haben w i r noch annehmen muessen , es gaebe e ine Da te i ,w i e w i r s i e u n s w u e n s c h e n . D a s a e n d e r t s i c h j e t z t . W i r e r z e u g e nu n s d a s F i l e , d a s w i r h a b e n r n o e c h t e n , s e l b s t .

D i e U n t e r s c h i e d el e i c h t e i n s e h b a r .

: u m L e s e n a u s D a t e i e n s i n d r e l a t i v g e r i n g u n d

M i t R E S E T h a b e n w i r u n s e r F e n s t e r a u f d i e e r s t ee i n e r b e s t e h e n d e n D a t e i g e s t e l l t . D a w i r j e t z t a b e rh a b e n , f u n k t i o n i e r t d a s n i c h t , v e r s t e h t j e d e r .

Aus d iesem Grund benutzen w i r vor dem Schre iben

Komponentek e i n e D a t e i

REWRITE ( filevariable )

mit REWRITE wird ein neues File auf dem Massenspeicher erzeugt,welches den Namen traegt, den wir vorher der filevariablen mit.ASSIGN zugeordnet haben. Eine evtl. andere Datei diesen Namenswird in dem Fall geloescht// Das Fenster zeigt nach REWRITE aufkeine Komponente -ist ja auch noch keine da/-. Genauer: das Fenster steht am Fileende.

In unserem Archiv wuerden wir uns einen nagelneuen Kastenschnitzen, der spaeter die Kaertchen unserer Kartei aufnehmensoll. Auch ein kleines Namensschild wuerde er bekommen.

B e i s p i e l : R E W R I T E ( d a t e i ) ^ / /

•° %>_?

WRITE ( filevariable, ausdruckl, ausdruckt,... )

Selbstverstaendlichst/ Beim Lesen READ, beim Schreiben WRITE.Wieder muss als erstes in den Klammern die Filevariable angegebenwerden, damit der Rechner die Werte von ausdruckl usw. nicht aufden Bi ldschirm malt, sondern in die Datei. Selbstredend, ausdruckl usw. muessen den selben Typ haben wie die Filekomponenten.

Es wird eine Komponente im File erzeugt (dort wo das Fenstersteht), der Wert der Variablen dort eingetragen und dann dasF e n s t e r v o r w a e r t s , h i n t e r d a s n e u e E l e m e n t , a n s F i l e e n d everschoben.

AL

flier ist r\och kemc Komponente lEOT ist TRuF

174

Page 181: Pascal - Eine kinderleichte Einführung

j e t z t

^ Z 4 f r

WRITE ( filevariable, varl )

Wert dtr Vdr/aMen in's Tenster schreibenund dieses weiterschieben \

i L ■ i O

Das wa r ' s . Meh r muss man n i ch t w i ssen , um i n e i ne Da te i zuschreiben; zumindest, wenn man sie neu erzeugen (krei eren) wil l .

Wenn ihr nun a l les Noet ige ins F i le gepackt habt , dann rnuessti h r au f a l l e Fae l l e CLOSE aus fueh ren ! Seh r w i ch t i g ! Sons t s i ndke ine Daten in der Date i ! ! !

PROGRAM dateien;

VARdate i : FILE OF INTEGER;

: INTEGER;

dateiname : STRING (.20.);c h : C H A R ;

PROCEDURE lesenundzaehlen;VAR

elemente : INTEGER;

BEGIN

elemente ;- 0; CLRSCR; WRITELN ( 'Die Dateikomponenten:' );

ASSIGN ( datei, dateiname );

RESET ( datei );

WHILE NOT EOF ( datei )DO BEGIN

READ ( datei, k );

elemente := elemente + 1;

W R I T E ( k : 5 ) ;END;

(a Komponente auf Schirm zeigen *)

WRITELN; WRITELN ( 'Elementzahl in der Datei: ', elemente;5 );

END; (it lesenundzaehlen a)

175

Page 182: Pascal - Eine kinderleichte Einführung

PROCEDURE neuerzeugen;BEGIN

ASSIGN ( datei, dateiname ); (it Dateinamen zuordnen a)

R E W R I T E ( d a t e i ) ; ( » D a t e i n e u e r z e u g e n i t )

R E P E A T ( i t l e s e n u . e i n t r a g e n , b i s e i n eZahl < 0 eingegeben wird a)

WRITE ( 'Eine Zahl fuer die Datei (<0, dann Ende): ' );READLN ( k );

IF k >= 0THEN WRITE ( datei, k ); (it Element in Datei schreiben it)

UNTIL k < 0;

C L O S E ( d a t e i ) ; ( n w i c h t i g h i e r / * )END; (* neuerzeugen *)

BEGIN (a Hauptprogramm a)

REPEATWRITELN; WRITELN;

WRITE ( 'N(eue Datei erzeugen; L(esen einer Datei; E(nde: ' );READ ( KBD, ch ); WRITELN; WRITELN;

IF ch IN (.'N', 'n', ' V , ' 1'.)THEN BEGIN

WRITE ( 'Dateiname: ' ); READLN ( dateiname );END;

CASE ch OF

'N', 'n' : neuerzeugen;'L' , '1 ' : lesenundzaehlen;

END;U N T I L c h I N ( . ' E ' , ' e ' . ) ;

END.

In diesem kurzen wie s implen Programm sind al le grundlegendenTe c h n i k e n f u e r d i e D a t e i Ve r a r b e i t u n g e n t h a l t e n . Wa s j e t z t n o c hkommt, s ind k le inere Erweiterungen oder Veral lgemeinerungen.

D ie Funk t ionswe ise des Be isp ie ls muessen w i r doch n ich t nocher laeutern , oder? Gut .

176

Page 183: Pascal - Eine kinderleichte Einführung

Und noch'n Trick fuer Respektlose. Wir haben zwar gesagt, dass,wenn man in eine neue Datei schreiben wil l , nur REWRITE, WRITEund CLOSE verwandt werden duerfen, aber man kann auch mit RESETo p e r i e r e n b e v o r C L O S E e r f o l g t . D a s i s t n i c h t g a n z s a u b e r u n dso l l te vermieden werden , aber es geh t . Der E f fek t i s t , man s teh tnicht mehr am Fileende (wie nach REWRITE immer), sondern auf derersten ins neue File eingetragenen Komponente,.

" I s ' j a h e i s s . M e n s c h t o l l , w a s m a n s o m i t e i n e m C o m p u t e rmachen kann . Ech t . Nu r. . . ' n k l e i nes P rob lem, zu dem m i r nochke ine e legante Loesung e ingefa l len is t :

W ie kann i ch 'n me ine twegen d ie 5 . Komponen te i n e ine r Da te iaendern? Der Rest so l l genauso b le iben, wie er is ' . "

Famos, das passt genau ins Konzept . Es waere ja auch grosserQuatsch, koennte man nur lesen oder voell ig neue Dateien anlegen.Genauso s innvo l l i s t es auch , nu r e inze lne E lemente zu aendernoder weitere Komponenten an eine bestehende Datei anzufLiegen.

B e i e i n e r K a r t e i f u n k t i o n i e r t ' s j a a u c h .

Wie aber koennen wir ein beliebiges Element veraendern? Denkenwir an unser Fenster. Beim Lesen wird ein Fi le-Kornponenteninhaltgelesen und das Fenster auf den naechste gestel l t , beim Schreibenwi rd in 's Fenster geschr ieben und dann wei tergeste l l t . .

Daraus erg ibt s ich unsere Technik:

Angenommen, wir rnoechten das n-te Element abaendern:- Datei oeffnen mit RESET, also Fenster auf 1. Element.

- n-1 Komponenten lesen, einfach nur lesen. Damit verschiebenwir unser Fenster auf das n-te Element.. Das, welches wiraendern wol len.

- F e n s t e r s t e h t a u f n - t e r K o m p o n e n t e , j e t z t d e n n e u e n W e r td a f u e r i n s F i l e e i n t r a g e n .

- Da te i seh l i essen .

So e in fach . Das funk t ion ie r t , wenn w i r nur n -1 -E lemente lesen ,weil nach dem Lesen der x—ten Komponente das Fenster auf der x+1-t e n s t e h t .

Ve r d e u t l i c h t e u c h d e n Vo r g a n g w i r k l i c h a n h a n d d e s F e n s t e r s .E i n s i c h t i g , n i c h t w a h r ?

177

Page 184: Pascal - Eine kinderleichte Einführung

Als Prozedur:

VARdatei : FILE OF telement;

n a m e : S T R I N G ( . 2 0 . ) ; d t D a t e i n a m e « >

PROCEDURE aendern ( n ; INTEGER; neuerwert : telement );

(a aendern der n-ten Filekomponente. Der Wert derVariablen neuerwert wird eingetragen.Die Filekomponenten werden von 0 ab gezaehlt/ #)

VARi : INTEGER;

k : telement;

BEGIN

ASSIGN ( datei, name ); dt kann wegfallen, wenn esschon mal gemacht wurde #)

RESET ( datei );

i : - 0 ;

WHILE NOT EOF ( datei ) AND (i < n)DO BEGIN

READ ( datei, k ); (# nur lesen, bis man dasElement vor dem zu Aendern-den erreicht hat #)

i :~ i -t- 1;END;

IF NOT EOF ( datei )THEN WRITE ( datei, k ) (# Komponente aendern if)

ELSE WRITELN ( 'Die Komponente ', n:5, > gibt es nicht." );

C L O S E ( d a t e i ) ; ( i t z u r S i c h e r h e i t a )

END; (» aendern *)

D a s C L O S E a m E n d e i s t n i c h t u n b e d i n g t n o e t i g , w e n n m a na n s c h l i e s s e n d m i t d e r D a t e i w e i t e r a r b e i t e n r n o e c h t e , z . B . n o c handere Records (Komponenten) aendern. .

J a , j a , j a . S t i m m t . W i r h a b e n e u c h b e s c h w i n d e l t . M a n k a n n a l s od o c h s c h r e i b e n , w e n n a u c h n u r R E S E T z u r D a t e i o e f f n u n g b e n u t z tw u r d e . . Ve r z e i h t u n s d i e s n o c h e i n m a l .

178

Page 185: Pascal - Eine kinderleichte Einführung

Im obigen Beisp ie l s ind wi r n icht umhin gekommen, zu pruefen,o b e s d i e n - t e K o m p o n e n t e - w e l c h e j a s c h l i e s s l i c h g e a e n d e r twerden so l l te - ueberhaup t g ib t .

Daraus koennen wir jetzt einen Nutzen ziehen, wenn wir naemlichn i c h t a b b r e c h e n , s o l l t e n w i r d a s D a t e i e n d e v o r h e r e r r e i c h e n ,sondern . . . . sondern neue -nage lneue- E lemente an d ie b isher igenanfuegen, d .h . d ie Date i vergroessern.

bestehende Date ien zuDamit is t es uns in d ie Hand gegeben,e r w e i t e r n , o h n e s o f o r t e i n e n e u e a n l e g e n z u m u e s s e n ( m i tREWRITE).

U n t e r U e b e r n ä h m e d e r o b i g e n D a t e i d e f i n i t i o nfolgende Prozedur zum anhaengen neuer Komponenten:

ergi bt s i c h

PROCEDURE neueselementlesen ( VAR elementVAR anfuegen

telement;BOOLEAN );

(* liest den Inhalt eines neuen Elementes von der Tastatur nach element ein. anfuegen wird FASLE, wenn mitdem Anhaengen neuer Komponenten auf gehaert werden soll #)

BEGIN

END; (* neueselementlesen *)

PROCEDURE anfuegen;VAR

neu : telement; anfuegen : BOOLEAN;

BEGIN

RESET ( datei ); (it ASSIGN wurde schonirgendwo ausgefuehrt *)

WHILE NOT EOF ( datei )DO READ ( date i , neu ) ; ( * Fenster h in ter le tz tes

Element in Datei stellen #)

(if +++++ jetzt die neuen Komponenten lesen u. anfuegen -t-f-f-f-t-f- #)

REPEATneueselementlesen ( neu, anfuegen );

IF anfuegenTHEN WRITE ( datei, neu );

UNTIL NOT anfuegen;

CLOSE ( datei );

END; (a anfuegen it)

( i t nur, fa l l s w i rk l i chSchluss sein soll #)

R E A D u . W R I T E i n t e r e s s i e r t e s a l s o r e c h t w e n i g , o b d i e D a t e im i t R E S E T o d e r R E W R I T E g e o e f f n e t w u r d e . R E S E T s t e l l t d a s F e n s t e re b e n n u r a u f d a s e r s t e E l e m e n t , R E W R I T E l o e s c h t d a g e g e n a l l e s ,w a s i n d e r D a t e i s t e h t .

179

Page 186: Pascal - Eine kinderleichte Einführung

Wir lernen: REWRITE braucht man nur selten.

Ver inner 1 ichen sol l te ihr auch, dass

READ ( datei, element ); WRITE ( datei, element )

NICHT auf die gleiche Fi lekornponente zugreifen.

U e b e r l e g t d o c h e i n m a l , w i e e i n P r o g r a m m z u m K o p i e r e n e i n e rDate i in e ine andere aussehen muss. Beachtet , es werden je tz t 2D a t e i v a r i a b l e n b e n o e t i g t !

ISO

Page 187: Pascal - Eine kinderleichte Einführung

3 . 1 9 . 4 . D e r e l e k t r o n i s c h e B r i e f

H e u t e , i m 2 0 . J a h r h u n d e r t , i s t e s s c h o n f a s t v e r p o e n t , B r i e f ezu schre iben ; n ich t zu le tz t durch das Mot to "Ruf doch 'ma l an . " .

Neuen Reiz rnoechten wir der alten Kornrnuni kationsart in diesemKapi te l geben.

E i g e n t l i c h r n u e s s t e e s u n s l e i c h t f a l l e n , d e n n s c h l i e s s l i c hsol len Computer ja zu al lem moegl ichen nuetz l ich sein.

I s t a u c h r i c h t i g . J e t z t , w o w i r d i e D a t e i e n k e n n e n g e l e r n th a b e n , i s t e s u n s e i n l e i c h t e s , s e i t e n l a n g e / b u c h d i c k e B r i e f e z uschre iben und zu spe ichern . I rgendwann lassen wi r s ie dann 'malausdrucken.

B r i e f e b e s t e h e n a u s B u c h s t a b e n , d . h . w i r m u e s s t e n f o l g e n d eD e k l a r a t i o n t a e t i g e n :

VARbrief : FILE OF CHAR;

D a F I L E O F C H A R i n d e r I n f o r m a t i k u n d s o n s t a u c h s o s e h r b el i e b t i s t , h a t m a n d a f u e r e i n e n e i g e n e n v o r d e fi n i e r t e n T y p g es c h a f f e n :

VARbrief : TEXT;

b e d e u t e t g e n a u d a s s e l b e . S t e l l t ' s e u c h s o v o r :

TYPETEXT = FILE OF CHAR;

G u t , d a s i s t a b e r n i c h t d a s W e s e n t l i c h e a n d i e s e m K a p i t e l .Nein, wir rnoechten auf einige Feinheiten hinweisen, wenn man ausTex tfi1 es (so he issen d ie naeml i ch ) l i es t oder i n s ie sch re ib t .

Dabei wird in den meisten Faellen naemlich READLN u. WRITELNverwendet . A lso d ie Rout inen , we lche w i r be i anderen F i les n ich tanwenden sol l ten.

Zur Einstimmung:

181

Page 188: Pascal - Eine kinderleichte Einführung

PROGRAM einfacherbrief;

VARb r i e f : T E X T ;

briefzeile : STRING (.100.);

n a m e : S T R I N G ( . 2 0 . ) ;

BEGIN

WRITE ( 'Name fuer Briefdatei: ' ); READLN ( name ); WRITELN;WRITELN ( 'Hinter ":" immer eine Briefzeile eingeben (nicht laenger ' );WRITELN ( 'als 100 Zeichen)/' );WRITELN ( 'Soll der Brief abgeschlossen werden, dann einfach nur "*"' );WRITELN ( 'als 1. Zeilenzeichen schreiben und Zeile abschliessen.' );WRITELN;

ASSIGN ( brief, name );REWRITE ( brief );

REPEAT

WRITE ( ' : ' ) ; READLN ( b r i e f ze i l e ) ;

IF br ie fze i le ( .1 . ) <> ' * 'THEN WRITELN ( brief, briefzeile );

UNTIL b r ie fze i le ( . l . ) = ' * ' ;

CLOSE ( brief );

END.

M i t d i e s e m P r o g r a m m k o e n n t i h r D a t e i e n e r z e u g e n , d i e g e n a u s ob e h a n d e l t w e r d e n , w i e e u r e P r o g r a m m fi l e s . B e i d e s s i n d Te x t d at e i e n . M u t i g e k o e n n e n ' s j a e i n m a l t e s t e n u n d e i n k l e i n e s P r o g r a m mm i t o b i g e m m i n i - E d i t o r ( s o n e n n t m a n P r o g r a m m e , m i t d e n e n m a nTe x t fi l e s e r z e u g e n u n d b e a r b e i t e n k a n n ) s c h r e i b e n u n d u e b e r s e t z e nl a s s e n .

H a t ' s g e k l a p p t ? N a s e h t i h r . I s t d o c h s c h o e n .

Warum denn nun WRITELN u. nicht WRITE, fragt ihr. Ok:

L J U j j e j s j l i l & l t l l e l L M e l l Z | e | t | l | e | * M t i n * * * * *

S o k o e n n t e z . B . e i n e Z e i l e a u s s e h e n , d i e i h r e i n g e g e b e n h a b t .D e r S t r i n g h a t d i e L a e n g e 1 9 .

W e n n i h r n u n d i e Z e i l e i n d a s F i l e u e b e r t r a g t , d a n n g i b t e s 2Moeg l i chke i t en :

18;

Page 189: Pascal - Eine kinderleichte Einführung

WRITE ( briefzeile )

i V l o i r l h i - f c l r l I d i r ( U n j 3 > I t i e \ & I | i | S | t | ) g | i | n | e | | Z | e [ i ' l t | & |

2>er Text warschon t»^> Tile.

W i r d i m m e r n u r m i t W R I T E g e a r b e i t e t , s o w e r d e n a l l e S t r i n g s ,p l a t s c h , a n e i n a n d e r g e s e t z t . S p a e t e r s i e h t m a n n i c h t m e h r , w o d e re i n e a u f h o e r t u n d d e r a n d e r e a n f a e n g t . G e n a u w i e b e i :

WRITE ( 'eine zeile' ); WRITE ( 'noch eine zeile' );WRITE ( 'eine dritte' );

d a b e i e r s c h e i n t a u f d e m S c h i r m :

eine zeilenoch eine zeileeine dritte

Nicht sehr ueberzeugend. Benutzt man dagegen WRITELN

WRITELN ( briefzeile )ieilenendjeicnfn

i V l o M h l e M l o M H i I H ^ l D l i l e \ s I \ l \ s \ h \ l e | i | " l e l \ 2 l e I » ' \ L I d L p |

, s o w i r d h i n t e r j e d e e i n g e t r a g e n e Z e i l e e i n b e s t i m m t e s Z e i c h e ng e s e t z t , w e l c h e s s a g t : H a l t , h i e r i s t e i n e Z e i l e z u E n d e .

WRITELN ( 'eine zeile' ); WRITELN ( 'noch eine zeile' );WRITELN ( 'eine dritte' );

e r g i b t j a a u c h :

eine zeilenoch eine zeileeine dritte

So moegen w i r ' s .

N a t u e r l i c h h a t R E A D L N a u c h e t w a s m i t d i e s e n o m i n o e s e nZei lenendzeichen zu tun.

R E A D ( s ) l i e s t i m m e r n u r s o v i e l e Z e i c h e n a u s d e r D a t e i ,wie in s maximal hineinpassen. Danach laesst READ das Fenster aufdem ersten, nicht mehr gelesenen Buchstaben stehen.

READLN ( s ) l i es t zwar d ie g le i che Anzah l von Ze ichen i r \ se i n , s t e l l t d a s F e n s t e r a b e r d a n a c h a u f d e n n a e c h s t e n z ufindenden Ze i lenanfang!

VARa, b : STRING (.5.);

I n d e r D a t e i s t e h t f o l g e n d e s :

l F l i i n i a i i Z l e l i U i e i f t i P l ' i £ i i ? i w | g | i ' i ^ i e i ^ i

193

Page 190: Pascal - Eine kinderleichte Einführung

Nach

RESET ( datei );

READ ( datei , a ) ; READ ( datei , b ) ;

w u e r d e a = ' E i n e ' s e i n u n d b — ' Z e i l e ' ; d . h . j e w e i l s 5Z e i c h e n l a n g . R E A D ( d a t e i , a ) h a t d a s F e n s t e r a u f ' Z ' s t e h e nl a s s e n . V o n d o r t h a t d a n n R E A D ( b ) w e i t e r g e l e s e n .

Nach

RESET ( datei );

READLN ( datei, a ); READLN ( datei, b );

w u e r d e a - ' E i n e ' s e i n , b w u e r d e a b e r ' D i e z ' e n t h a l t e n !R E A D L N ( d a t e i , a ) h a e t t e n a e m l i c h d a s F e n s t e r a u f d e n n a e c h s t e nZ e i l e n a n f a n g g e s t e l l t !

I m Z u s a m m e n h a n g m i t d e m Z e i l e n e n d z e i c h e n g i b t e s n o c h e i n eS t a n d a r d f u n k t i o n :

EOLN ( fi l eva r i ab l e )

filevariable muss den Typ TEXT haben. EOLN kann TRUE od. FALSEl i e f e r n . T R U E w i r d g e l i e f e r t , w e n n d a s Z e i l e n e n d e e i n e r Z e i l eerreicht wurde (oder EOF auch TRUE ist/).

I n d i e s e m S i n n e w o l l e n w i r e i n m a l R E A D L N ( d a t e i ) s i m u l i e r e n :

WHILE NOT EOLN ( datei )DO READ ( datei );

READ ( datei );

D a s F e n s t e r s t e h t j e t z t a u c h a u f d e m e r s t e n Z e i c h e n n a c h d e mZ e i l e n e n d z e i c h e n .

L i e s t m a n e i n z e l n e B u c h s t a b e n v o n d e r T a s t a t u r e i n , s o i s t e sa u c h m o e g l i c h z u s c h r e i b e n :

VARch : CHAR;

REPEATREAD ( KBD, ch ); WRITE ( ch );

UNTIL EOLN;

E s w i r d d a n n s o l a n g e g e l e s e n , b i s d i e T a s t e " R E T U R N " o d ." E N T E R " g e d r u e c k t w u r d e . E O L N o h n e e i n e F i l e v a r i a b l e d a h i n t e r ,b e z i e h t s i c h a l s o i m m e r a u f d i e Ta s t a t u r a l s E i n g a b e r n e d i u r n .

D i e s e n e u e F u n k t i o n i s t n i c h t s o s e h r w i c h t i g . I h r w e r d e t s i en i c h t o f t b e n o e t i g e n .

A l s A u s k l a n g z u m T h e m a " Te x t d a t e i e n " r n o e c h t e n w i r e i n P r o g r a m ml i e f e r n , w e l c h e s u n s e i n e n B r i e f , P r o g r a m m t e x t o d e r s o n s t e i nT e x t fi l e a u f d e m S c h i r m l i s t e t . D a b e i w i r d i m m e r g e s t o p p t , w e n ne i n m a l d e r B i l d s c h i r m g e f u e l l t w u r d e .

1 8 4

Page 191: Pascal - Eine kinderleichte Einführung

PROGRAM 1iestextfile;

CONSTzazeigendezei len - 23; ( i t Zahl der Zei len, d ie b is zum naechsten

Stop angezeigt werden sollen *)

VARd a t e i : T E X T;ze i le : STRING ( .255.) ; ( i t maximal 255 Zeichen pro Zei le , muss

reichen #,'n r : I N T E G E R ;zeigenr : BOOLEAN;

name ; STRING (.20.) ;

c h ; C H A R ;

BEGIN

WRITE ( 'Dateinamen des zu listenden Textfiles angeben: ' );READLN ( name );

WRITE ( 'Sollen Zeilennummern angezeigt werden (J/N) ; ' );READ ( KBD, ch ); WRITELN ( ch );ze igen r : = ch IN ( . ' J ' , ' j ' . ) ;

ASSIGN ( datei, name );RESET ( datei );

n r ; - 1 ; c h : = ' X ' ; d t c h a u f ' X ' s e t z e n , d a m i t i ndie Schleife gegangen wird #)

WHILE NOT ( EOF ( datei ) OR (ch IN (.'E', 'e'.)) )DO BEGIN

READLN ( da te i , ze i l e ) ; d t Ze i l e aus Da te i ho len i t )

IF zeigenrTHEN WRITE ( nr:6, ' ' );

W R I T E L N ( z e i l e ) ; d t u n d a u f S c h i r m z e i g e n * )

IF nr MOD zuzeigendezeilen = 0 (n wenn noetig, dann stoppen #)THEN BEGIN

WRITE (> £(nde des Listens, andere Tasten setzen das Listen fort; ' );

READ ( KBD, ch ); WRITELN;END;

n r : = n r + 1 ; d t n a e c h s t e Z e i l e n n u m m e r u )

END; dt WHILE *)

END.

185

Page 192: Pascal - Eine kinderleichte Einführung

3. 19.5. Ende ohne Schrecken

H a l l o , s e i d g e g r u e s s t ! W i l l k o m m e n i m l e t z t e n K a p i t e l . A l l e sfr isch? Ausgeschlafen, gute Laune'" '

Z u m A b s c h l u s s n o c h e i n i g e K l e i n i g k e i t e n , m i t d e n e n i h r b e iFreunden Eindruck schinden koennt.

Wir koennen uns nur zu gut eure Gesichter vorste l len, wenn ihre i n e s d e r t o l l s t e n D a t e i p r o g r a m m e h a b t l a u f e n l a s s e n u n d m i tR E S E T e i n e n i c h t e x i s t i e r e n d e D a t e i o e f f n e n w o l l t e t . S c h a d ee igen t l i ch , dass de r Rechne r so fo r t abges tue rz t i s t .

0 Ö j ?

"Ja, aber..." Kein aber. Entweder man weiss, welche Dateien manha t , ode r. . . t j a , ode r man muss d ie en t sp rechenden S i che rungeneinbauen.

D a m a n n u n n i c h t v o n a l l e n L e u t e n e r w a r t e n k a n n , d a s s s i epro fundes Wissen ueber d ie vo rhandenen F i les m i tb r ingen , he l fennur id iotensichere Programme.

W i l l m a n i r g e n d w a n n e i n m a l S o f t w a r e v e r k a u f e n , s o m u s s s i esowieso aeussers t benutzer f reund l ich se in !

D i e F r a g e d e r S t u n d e l a u t e t : W i e v e r h i n d e r e i c h s o l c h e r l e iMaleurs.

D ie Feh le r (eng l . e r ro r ) t re ten nun au f , waehrend d ie ProzedurRESET oder CLOSE oder WRITE oder oder ausgefuehrt wird. Da solltees doch ein Leichtes sein, dem Rechner zu sagen:

"Junge, pass ma l au f . Wenn je tz t g le ich 'n Feh le r be i der E in -ode r Ausgabe au f t r i t t , dann d ruecks te ma l ' n Auge zu . Wer w i rddenn da in d ie Lu f t gehen? A lso . . . a l les k la r?"

(#*!-#)wenn es im Prograrnrntext auftaucht, laesst den Rechner solange

ein Auge zudruecken (nur bei Ein-/Ausgabeoperabionen) , bis

(#$!+*)g e s c h r i e b e n w i r d . D i e S c h r e i b w e i s e k e n n e n w i r j a n o c h v o r nE r w e r b d e r R e k u r s i o n s e r l a u b n i s . K l a r , h i e r a u c h w i e d e r e i n eTURBO-PASCAL-Besonderheit.

Z w i s c h e n d i e s e n S c h a l t e r n ( s o w e r d e n s i e g e n a n n t , g e n a u e r :Compi ler Switches) koennt ihr Dateien oeffnen, loeschen, umbenennen usw. wie es euch gefaellt, ohne dass ein Fehler das Programmabbrechen l iesse.

D ie Feh le r werden I /Q-Er ro r genann t , we i l s ie be i Inpu t— oderOut put-Oper at ionen auftreten; Input == Eingabe, Output = Ausgabe.

F'robiert mal folgendes F'rogramm:

186

Page 193: Pascal - Eine kinderleichte Einführung

PROGRAM test;

VARd : FILE OF INTEGER;i : I N T E G E R ; ( a a u c h d i e s e Va r i a b l e . F u e r

spaeteren Gebrauch // it)BEGIN

ASSIGN ( d , 'QUATSCH' ) ;

RESET ( d ) ;

END.

Ve r g e w i s s e r t e u c h v o r h e r, d a s s K E I N E D a t e - i m i t d e m N a m e n'QUATSCH' exist iert. Dann lasst das Programm laufen.

O k , e i n I / O - E r r o r i s t a u f g e t r e t e n . D a s w a r b e a b s i c h t i g t . J e t z tsetzt vor ASSIGN dies ein: (#$!-*)u n d h i n t e r R E S E T s e t z t i : = I 0 R E S U LT; ( * $ ! + * ) e i n .

Jetzt lasst das Programm nochmal laufen. Na, welch Unterschied!

Wenn ( *$ ! - * ) benu tz t w i rd , kann man t ro t zdem p rue fen , ob e inF e h l e r a u f g e t r e t e n i s t - v i e l l e i c h t , u m e i n e s e h r s i n n i g eFehlermeldung auszugeben und das Programm fortzusetzen.

IORESULT

is t d ie vordefin ier te Funkt ion , d ie uns sagt , ob e in Feh leraufgetreten ist (ihr habt sie oben schon in action gesehen). Sieliefert einen Wert UNGLEICH 0, wenn ein I/O-Fehler vorliegt. Wennnicht, dann 0.

Der Tr ick is t , man kann s ie nur e inmal nach jedem Fehlerbefragen. Tut man es mehrmals, ohne dazwischen eine andere Ein-oder Ausgabeoperation auszufuehren, so liefert sie beim 2. usw.Mal nur 0.

Wird {$!-} usw. verwandt, so muss vor der naechsten I/O-Opera-tion IORESULT einmal aufgerufen werden, ob ihr's noetig habt odern i c h t /

Dam i t l aess t s i ch a l so l e i ch t e i ne Funk t i on sch re i ben , m i t de rw i r a n g s t f r e i f e s t s t e l l e n k o e n n e n , o b e i n b e s t i m m t e s F i l ee x i s t i e r t :

187

Page 194: Pascal - Eine kinderleichte Einführung

TYPEtstring = STRING (.15.);

FUNCTION dateivorhanden ( name : tstring ) : BOOLEAN;VAR

datei : FILE OF INTEGER; dt Elementtyp ist egal it)

BEGIN

( i t $ I - i t ) d t A u g e z u d r u e c k e n i t )

ASSIGN ( datei, name );R E S E T ( d a t e i ) ; d t Ve r s u c h e n D a t e i z u o e f f n e n # )

dateivorhanden := IORESULT - 0;

( i t $ I + * ) ( i t A u g e w i e d e r a u f m a c h e n a )

END; dt dateivorhanden *)

S i e l i e f e r t T R U E , w e n n d i e D a t e i v o r h a n d e n i s t .

B e v o r w i r d a n n z u d e m A b s c h l u s s p r o g r a r n m k o m m e n , n o c h z w e in u e t z l i c h e v o r d e fi n i e r t e P r o z e d u r e n . B e i d e g e h o e r e n n i c h t ( ! ) z u mStandard! Nur in TURBO-PASCAL!

ERASE ( filevariable )

loescht das File, dessen Name der Filevariablen mit ASSIGN zugeordnet worden ist. Fuer immer/ Also Vorsicht/

Beispie l : ASSIGN ( datei , 'date i .dat ' ) ;ERASE ( datei );

Loescht die Datei 'datei.dat' auf dem Massenspeicher.

RENAME ( filevariable, neuername )

benennt die Datei, deren Name filevariable zugeordnet wurde um.Der neue Name steht in dem String neuername.

Beispie l : ASSIGN ( datei , 'date i .dat ' ) ;RENAME ( datei, 'groove.dat' );

D ie Date i , welche den Namen 'date i .dat ' hat te , he iss t je tz t' g roove .da t ' .

In den Fael len, wo ihr e inen der beiden zuletz t angesprochenenB e f e h l e b e n u t z t , s c h l i e s s t b i t t e v o r h e r d i e D a t e i , a u f w e l c h e e ra n g e w a n d t w i r d . T h a t ' s g o o d p r o g r a m m i n g h a b i t . I h r w o l l t d o c hn i c h t s d e m Z u f a l l u e b e r l a s s e n , o d e r ? I m m e r a n M u r p h y ' s l a wdenken!

188

Page 195: Pascal - Eine kinderleichte Einführung

Noch einmal tief Luft holen, dann zum letzten F'rogramrnbei spi el.I n i h m k o m m e n s o z i e m l i c h a l l e s i n n v o l l e n o d e r s i n n l o s e nD a t e i O p e r a t i o n e n v o r . A u c h d i e g e w i s s e B e n u t z e r f r e u n d l i c h k e i tso l l te n icht uebersehen werden!

Vie l Spass und a l les Gute. . .

PROGRAM dateiverarbeitung;

(*+++++++++++++++++++++++++++^

Dieses Programm soll beispielhaft die wichtigsten Operationen einesDateiverarbeitungsProgramms verdeutlichen.Folgende grundlegenden Funktionen sind enthalten:

- Aendern einer Dateikomponente- Loeschen einer Dateikomponente- Anfuegen von Komponenten an eine Datei- Auflisten der Elemente in einer Datei- Kopieren einer Datei- Erzeugen einer neuen Datei

Das Sortieren der Dateikomponenten nach einem bestimmten Kriterium(z.B. alphabetisch) wird NICHT gezeigt, da eine Erlaeuterung desProblems 'Sortieren' den Rahmen des Buches sprengte und der Algorithmus nicht selbsterklaerend genug waere.Es sei auf die im Anhang aufgefuehrte Literatur verwiesen.

Die vorzufuehrenden Dateioperationen beziehen sich alle auf einFile, in dem Daten einer Person gespeichert sind;

Name, Vorname, Altersollen uns genuegen.

Soll die Datei eine andere Struktur haben (z.B. jede Komponente sollnoch Angaben zum Wohnort enthalten o.ae.), so muessen lediglich diestrukturabhaengigen Prozeduren des Programms geaendert werden; diessind die Unterprogramme zum Einlesen einer Komponente und zum Ausgeben einer solchen.

Alle anderen Prozeduren sind strukturunabhaengig, weil sie nie dengenauen Aufbau eines Dateielementes beruecksichtigen.

Eine solche Programmierweise ist sehr aenderungsfreundlich undsol l te ver inner l icht werden/

CONST

f e h l e r z e i l e - 2 3 ;u e b e r s c h r i f t z e i l e - 4 ;m e n u e z e i l e = 2 0 ;

namenslaenge = 20-, dt strukturabhaengig n)

189

Page 196: Pascal - Eine kinderleichte Einführung

TYPEt z e i l echarmenge

tname

telement

STRING (.80.);SET OF CHAR;

STRING (.namenslaenge.); (* strukturabhaengig *)

R E C O R D ( a s t r u k t u r a b h a e n g i g a )nane,vorname : tname;

a l t e r : I N T E G E R ;END;

tdate i = FILE OF telement; dt und schon beginnt dieStrukturunabhaengigkeit *)

VAR

date idateiname

ch

: tdatei;: STRING (.20.);

: CHAR;

(it++++++++-f-++++-f-++-f-++-f-+++-f-+-t-+-t+++++^

Eine Fehlermeldung auf den Schirm und auf einen Tastendruck warten

PROCEDURE fehler ( meldung : tzeile );VAR

ch : CHAR;

BEGIN

GOTOXY ( 1, fehl erzeile ); CLREOL;WRITE ( ' > ', meidung, ' Eine Taste druecken: ' ); READ ( KBD, ch );GOTOXY ( 1, fehlerzeile ); CLREOL;

END; dt fehler * )

190

Page 197: Pascal - Eine kinderleichte Einführung

(#++++++++++-fi+++++++++++++++++-f-+-f-++++^^

Ueberschrift fuer einen Menuepunkt setzenDie Ueberschrift wird zentriert in die Mitteeiner Zeile gesetzt/

PROCEDURE ueberschrift ( zeile ; tzeile );BEGIN

CLRSCR;GOTOXY ( (80 - LENGTH ( zeile )) DIV 2, uebersehr iftzeile );WRITE ( zeile );

END; dt ueberschrift if)

(it-f-++++++++-fi+++++++++-f-++++++++++++^

Ein Menue auf den Sehr im bringen und den Wunsch einlesen.Da die Menge der gueltigen Wahlmoeglichkeiten uebergebenwird, werden nur zulaessige Eingaben von der Prozedurzurueckgegeben/

+++++++++++-fi++++++++++++++-f++++-f-+++^

FUNCTION menue ( zeile : tzeile; zulaessig : charmenge ) : CHAR;VAR

ch : CHAR;

FUNCTION grossbuchstabe ( ch : CHAR ) ; CHAR;dt Aus ch wird der entsprechende grosse Buchstabe gemacht. Aus 'a' wird

'A'. Diese Funktion existiert vordefiniert in der selben Weisein TURBO-PASCAL unter dem Namen UPCASE.*)

BEGIN

IF ch IN (.'a' ..'z> .)THEN ch := CHR ( ORD ( ch ) - 32 ); grossbuchstabe := ch;

END; dt grossbuchstabe *)

BEGIN df menue it)

GOTOXY ( 1, menuezeile ); CLREOL;GOTOXY ( (80 - LENGTH ( zeile) * 1) DIV 2, menuezeile );WRITE ( CHR ( 7 ) , zei le, ' : ' ) ; dt mit Glocke// *)

REPEATREAD ( KBD, ch ); ch :- grossbuchstabe ( ch );

UNTIL ch IN zulaessig;

menue := ch;

END; dt menue a)

191

Page 198: Pascal - Eine kinderleichte Einführung

(it++-f+ +++++++++++++++++++++++-J-+++++++^

Auflisten der Attribute einer Filekomponente

/ / / / s t ruk tu rabhaeng ig / / / /

geraet ist das Textfile, in welches die Auflistung derFilekomponentenelemente geschehen soll. Zur Wahl stehender Drucker und der Bildschirm/

MERKE: Dateien koennen nur als cal1-by-referenceParameter uebergeben werden/

•f-+++-f-++-f-+++++-h++++-/-+++++++++-f-++++^

PROCEDURE listekomponente ( komponente : telement; VAR geraet : TEXT );BEGIN

WRITELN ( geraet, komponente.vorname,' ' : namenslaenge - LENGTH ( komponente.vorname ) -f- 5,komponente.name,' ' : namenslaenge - LENGTH ( komponente.name ) + 10,komponente.alter:2 );

END; dt 1istkomponente #>

(it+++++++++-t++++++++++++++++++++++++^

Auflisten aller Komponente im File mit Nummern

/// Ueberschri f t beim Listen ist strukturabhaengig ff /

PROCEDURE listen;VAR

geraetename : tname;g e r a e t : T E X T ;

k : t e l e m e n t ;

i , i o : I N T E G E R ;c h , c h 2 : C H A R ;

BEGIN

geraetename := 'Bildschirm';

REPEAT

ueberschrift ( 'Listen der Dateikomponenten' );

ch := menue ( CONCAT ( 'Ausgabe auf; ', geraetename,' / W(echsle geraet; L(iste erstellen; E(nde' ),

( . ' W ' , ' L ' , ' E ' . ) ) ;

192

Page 199: Pascal - Eine kinderleichte Einführung

CASE ch OF

'W' : IF geraetename - 'Drucker'THEN geraetename := 'Bildschirm'ELSE geraetename := 'Drucker';

'U : BEGIN( # A u s g a b e g e r a e t o e f f n e n » )

IF geraetename - 'Drucker'THEN ASSIGN ( geraet, 'LST:' )ELSE ASSIGN ( geraet, 'CON:' );

RESET ( geraet ); io := IORESULT;

d t V e r s u c h e n d i e D a t e i z u o e f f n e n * )

( * $ ! - * )RESET ( datei );

IF IORESULT = 0THEN BEGIN

i : = 1 ; d t N u m m e r d e r D a t e i k o m p o n e n t e a )c h 2 : = ' 3 ' ; i o : = 0 ;

uebersehrift ( 'Die gewuenschte Liste kommt...' );WRITELN;

WRITELN ( geraet ); WRITELN ( geraet );WRITELN ( geraet,

' N r . V o r n a m e ; N a m e : A l t e r ; ' ) ;WRITELN ( geraet );

( * J e t z t d i e K o m p o n e n t e a u s g e b e n . N a c h j e w e i l s 2 0 s t o p p e n . i t )

WHILE NOT EOF ( datei ) AND (io ~ 0) ANDNOT (ch2 IN ( . '£ ' , 'e ' . ) )

DO BEGINREAD ( datei, k ); io := IORESULT;

WRITE ( geraet, i :5, ' ' ) ;1 iste komponente ( k, geraet ); i :- i -f- 1;

IF i MOD 20 = 0THEN BEGIN

WRITE (' > E ( n d e d e s L i s t e n s , s o n s t e i n e a n d e r e T a s t e ; ' ) ;

READ ( KBD, ch2 );END;

END;

WRITE ( 'Eine Taste druecken: ' ); READ ( KBD, ch2 );END

ELSE fehler ( CONCAT ( 'Kann Datei ', dateiname,' nicht zum Listen oeffnen/' ) );

(#$1+*)END;

END; (it CASE *)

UNTIL ch IN ( . 'E ' , 'e ' . ) ;

END; dt listen *)

193

Page 200: Pascal - Eine kinderleichte Einführung

( i t++++++++++++++++++++++++++++++++++++++++^

Elemente einer Filekomponente einlesen

/ / / s t rukturabhaengig / / /

PROCEDURE einlesen ( VAR k : telement; neu : BOOLEAN );VAR

komponente, alte ; (vorname, name, alter);

BEGIN

ueberschrift ( 'Aendern eines Filekomponenteninhaltes' );

IF neuTHEN BEGIN

k .name := ' ' ; k .vorname := " ;k.al ter ;= 0;

END;

d t A u fl i s t e n d e s b i s h e r i g e n I n h a l t e s # )

GOTOXY ( 10, 10 );WRITE ( 'Vorname; ', k.vorname );

GOTOXY ( 10, 13 );WRITE ( 'Name : ', k.name );

GOTOXY ( 10, 16 );WRITE ( 'A l ter : ' , k .a l ter :2 ) ;

d t J e t z t e i n l e s e n d e r n e u e n I n h a l t e * )

komponente := vorname; alte := komponente;

REPEAT

GOTOXY ( 2, ORD ( al te ) # 3 + 10 ); WRITE ( ' ' ) ;GOTOXY ( 2, ORD ( komponente ) * 3 + 10 ); WRITE ( '-->' );

ch := menue ('S - eine Komponente nach oben; D - ... nach unten; A(endern; E(nde',( . ' E ' , ' A ' , ' S ' , ' D ' . ) ) ;

194

Page 201: Pascal - Eine kinderleichte Einführung

CASE ch OF

'S' : IF komponente <> vornameTHEN BEGIN

a l t e : = k o m p o n e n t e ;komponente ;- PRED ( komponente );

END;

'D' : IF komponente <> alterTHEN BEGIN

a l t e : = k o m p o n e n t e ;komponente := SUCC ( komponente );

END;

'A' : BEGINGOTOXY ( 19, ORD ( komponente ) a 3 -f- 10 );CLREOL;

CASE komponente OFname : READLN ( k.name ) ;vorname : READLN ( k.vorname );a l t e r : R E A D L N ( k . a l t e r ) ;

END;

IF komponente <> alterTHEN BEGIN

a l t e : = k o m p o n e n t e ;komponente := SUCC ( komponente );

END;END;

END; (it CASE a)

UNTIL ch = '£';

END; dt einlesen *)

195

Page 202: Pascal - Eine kinderleichte Einführung

Anfuegen von Datensaetzen an die Datei

PROCEDURE anfuegen;VAR

io : INTEGER;

k ; te lement;

PROCEDURE sucheende;dt stellt das Fenster hinter die letzte Komponente in der Datei #)BEGIN

d t $ I - i t )RESET ( datei ); io :- IORESULT;

WHILE NOT EOF ( datei ) AND (io = 0)DO BEGIN

READ ( datei, k ); io :- IORESULT;END;

d t$ I+ i t )

END; dt sucheende *)

BEGIN dt anfuegen it)

ueberschrif t ( 'Einen kleinen Moment bit te... ' ) ;sucheende;

( i t $ l - i t )IF io = 0

THEN REPEATeinlesen ( k, TRUE );

WRITE ( datei, k ); io := IORESULT;

ueberschrift ( 'Anfuegen von Datensaetzen' );UNTIL (menue ( 'A(nfuegen eines weiteren Datensatz; E(nde',

( . 'A ' . . 'z ' . ) ) = 'E ' ) OR ( io <> 0)

ELSE fehler ( CONCAT ( 'Datei ', dateiname, ' nicht vorhanden." ) );

CLOSE ( datei ); io := IORESULT; dt damit die neuen Datensaetze auchgarantiert eingetragen sind/ #)

ASSIGN ( datei , dateiname ); dt ist nach CLOSE noetig i t )( i t$ I+ i i )

ch :- '-T; dt war bei Austesten des Programms noetig, warumwissen wir nicht *)

END; dt anfuegen #)

196

Page 203: Pascal - Eine kinderleichte Einführung

Das Fenster auf den n-ten Eintrag in der Datei stellen.Der kann dann gelesen oder geschrieben werden/

+++-f-+-f-+++++++++++++-f+++-fi++++++++^

FUNCTION Suchekomponente ( n : INTEGER ) : INTEGER;VAR

io : INTEGER;k : te lement;

BEGIN

ueberschri f t ( 'Einen Moment bit te.. . ' ) ;

d t $ I - * )RESET ( datei ); io :- IORESULT;

n := n - 1;

IF io - 0THEN WHILE NOT EOF ( datei ) AND (n > 0)

DO BEGINREAD ( datei, k ); io := IORESULT;n := n - 1;

END;

suchekomponente := io;(#$1+*)

END; Of suchekomponente it)

(*+++++++++-t-+++++++++-f++++++++-h++^

Aendern von Filekomponenten

PROCEDURE aendern;VAR

c h : C H A R ;io, nr : INTEGER;

k : t e l e m e n t ;

BEGIN

nr := 1;

REPEATueberschrift ( 'Aendern von Datensaetzen' );

ch :~ menue ('L(isten aller Datensaetze; A(endern; N(aechsten aendern; E(nde',

( . ' L ' , ' A ' , ' N ' , ' E ' . ) ) ;

197

Page 204: Pascal - Eine kinderleichte Einführung

CASE ch OF

■ ' L ' ; l i s t e n ; ( * f a l l s m a n d i e N u m m e r v e r g e s s e n h a t a )

' N ' ,'A' : BEGIN

IF ch = 'N'THEN nr ;= nr + 1ELSE REPEAT

GOTOXY ( 1, menuezeile ); CLREOL;WRITE ( 'Datensatznummer (>0>; ' ); READLN ( nr );

UNTIL nr > 0;

IF (suchekomponente ( nr ) = 0) AND NOT EOF ( datei )THEN BEGIN

READ ( datei, k );

IF IORESULT = 0THEN BEGIN

einlesen ( k, FALSE );

IF suchekomponente ( nr ) = 0THEN BEGIN

WRITE ( datei, k ); io := IORESULT;END

ELSE fehler ( 'Lesefehler/ ' );END

ELSE fehler ( 'Fehler beim Lesen aus Datei." );END

ELSE fehler ( CONCAT ('Finde ', dateiname, ' nicht oder EOF erreicht." ) );

dttl-f-it)END;

END; (a CASE a)

UNTIL ch - 'E ' ;

END; (it aendern #)

198

Page 205: Pascal - Eine kinderleichte Einführung

()i++++++++++++-f--f-++++++++++++++++++^

Loeschen eines oder mehrerer Datensaetze

++++-f-++++-t++++++-f-++++++++++f-++++++^

PROCEDURE loeschen;VAR

c h ; C H A R ;

e r s t e r, l e t z t e r,d u m m y, i o , n r : I N T E G E R ;

h d a t e i : t d a t e i ; d t e i n e H i l f s d a t e i * )k : t e l e m e n t ;

PROCEDURE liesnummer ( nr : INTEGER; VAR nummer : INTEGER );BEGIN

REPEATGOTOXY ( 1, menuezeile ); CLREOL;WRITE ( nr, '. Datensatznummer: ' ); READLN ( nummer );

UNTIL (nummer > 0) AND (nummer > erster);

END; dt liesnummer *)

BEGIN

REPEATueberschrift ( 'Loeschen von Datensaetzen' );

ch := menue ('Ldste aller Datensaetze; 1 ( datensatzl M(ehrere loeschen; E(nde',

( . 'U , ' V, 'M ' , 'E ' . ) ) ;

CASE ch OF

>U : l i s t e n ;

' i ' ,'M> : BEGIN

e r s t e r ; - - 1 ;liesnummer ( 1, dummy ); erster ;- dummy;

le tz te r ;= e rs ter ;IF ch - 'M'

THEN liesnummer ( 2, letzter );

d t J e t z t e r s t m a l e i n e n e u e l e e r e D a t e i e r o e f f n e n # )

d t$ I - i t )

ASSIGN ( hdatei, dateiname-f-'H' ); dt dies ist etwas problematisch, da nicht alleDateinamen einfach umeinen Buchstaben erweitert werden koennen it)

199

Page 206: Pascal - Eine kinderleichte Einführung

R E W R I T E ( h d a t e i ) ; i o : - I O R E S U LT;R E S E T ( d a t e i ) ; i o : = I O R E S U L T ;

( * j e t z t a l l e Da tensae t ze vo r dem e rs ten zu l oeschenden kop ie ren x )

ueberschrift ( 'Datensaetze vor zu Loeschendem kopieren...' );nr := 1;

WHILE NOT EOF ( datei ) AND (io = 0) AND (nr < erster)DO BEGIN

READ ( datei, k ); io := IORESULT;WRITE ( hdatei, k ); io := IORESULT; nr := nr ■/■ 1;

END;

(» jetzt die zu loeschenden Datensaetze ueber lesen, sie werden NICHT — it)d t i n d i e H i l f s d a t e i u e b e r n o m m e n , a l s o g e l o e s c h t # )

ueberschrift ( 'Ueberlesen der zu loeschenden Datensaetze...' );

WHILE NOT EOF ( datei ) AND (nr <= letzter) AND (io = 0)DO BEGIN

READ ( datei, k ); io :- IORESULT; nr :- nr * 1;END;

(* — jetzt die Datensaetze hinter dem letzten zu Loeschenden kopieren #)

ueberschr i f t ( 'Date i res t kop ieren. . . ' ) ;

WHILE NOT EOF ( datei ) AND (io - 0)DO BEGIN

READ ( datei, k ); io := IORESULT;WRITE ( hdatei, k ); io := IORESULT;

END;

d t j e t z t d i e a l t e D a t e i l o e s c h e n u n d d i e H i l f s d a t e i u m b e n e n n e n i t )

C L O S E ( d a t e i ) ; i o : = I O R E S U L T ;C L O S E ( h d a t e i ) ; i o : = I O R E S U L T;

IF io = 0THEN BEGIN

E R A S E ( d a t e i ) ; i o : = I O R E S U L T ;RENAME ( hdatei, dateiname ); io := IORESULT;

ASSIGN ( datei, dateiname );END

ELSE BEGINERASE ( hdatei );

fehler (' I /O-Fehler, konnte nicht loeschen/ Alte Datei intakt. ' ) ;

END;(itfl-f-it)

END;

END; Of CASE it)

UNTIL ch - 'E' ;

END; Of loeschen *)

200

Page 207: Pascal - Eine kinderleichte Einführung

(ii++++-f-++++++++++++-f-++++++++++f-++++^

Eroeffnung einer neuen (noch leeren) Datei

PROCEDURE neuedatei;VAR

ch : CHAR;

BEGIN

ueberschrift ( 'Eroeffnen einer neuen Datei' );

C # P r u e f e n , o b e i n e D a t e i v o m s e l b e n N a m e n s c h o n e x i s t i e r t * )

d t t l - i t )RESET ( datei );

c h : = ' J ' ;

IF IORESULT - 0THEN ch := menue (

'Es existiert schon eine Datei mit diesem Namen. Loeschen (J/N): ',( . ' A ' , . ' z ' . ) ) ;

IF ch - 'J'THEN REWRITE ( datei );

IF (IORESULT - 0) AND (ch = 'J')THEN anfuegen;

dt$I+it)

END; dt neuedatei #)

BEGIN

dateiname := ";

REPEATueberschrift ( 'Ein schoenes Dateiprogramm' );

dt -f-f-f-f-f-f-f- Dies Menue ist leider in Englisch, da so die Bezeichnungen -f-f-f-f-f- n)(# -f-f-f-f-f- fuer die Menuepunkte kuerzer wurden und in eine Zeile passten -t-f-t-f- »)

ch :- menue ('Ldst; Fdlename; N(ew file; A(ppend; C(hange; D(elete; E(nd',

( . ' L ' , ' F ' , ' N ' , ' A ' r ' C , ' D ' , ' E ' . ) ) ;

201

Page 208: Pascal - Eine kinderleichte Einführung

IF (ch - 'F ' ) OR (ch <> 'E ' ) AND (dateiname = ")THEN BEGIN

REPEATGOTOXY ( 1, menuezeile ); CLREOL;WRITE ( 'Der gewuenschte Dateiname; ' );READLN ( dateiname );

UNTIL dateiname <> ";

ASSIGN ( datei, dateiname );END;

CASE <?h OF

>U m l i s ten ;

'N ' • neuedatei;

' A ' ma anfuegen;

' C a aendern;

'D ' ■ loeschen;

END;

UNTIL ch -r ,£,.

END.

M a n k o e n n t e s i c h f r a g e n , w i e e s m o e g l i c h i s t , a u s e i n e r M u e c k ee i n e n c a . 6 5 0 Z e i l e n P r o g r a m r n e l e f a n t e n z u m a c h e n , a b e r . . .B e n u t z e r f r e u n d l i c h k e i t u n d U e b e r s i c h t h a b e n i h r e n P r e i s .

>02

Page 209: Pascal - Eine kinderleichte Einführung

> A p p e n d i x <

In den Kapiteln des Appendix wol len wir den ganz ganz Interess ier ten unter euch noch e in ige b isher verschwiegene PASCAL-Fea-t L i r es vo r s te l l en .

An ihre Benutzung so l l te t ih r a l le rd ings ers t denken, wenn euchdas b is h ie r Gesagte in F le isch und B lu t uebergegangen is t . Ausdiesem Grunde fal len die folgenden Ausfuehrungen sehr knapp aus.U n s e r e A b s i c h t i s t n u r , e i n e n U e b e r b l i c k u e b e r w e i t e r eMoegl ichke i ten PASCALS zu geben. Wer s ich genauer mi t Ze igernusw. . ause inanderse tzen moech te , de r so l l t e we i te re Fach l i t e ra tu rheranz iehen, d ie genauer in den Urngang mi t ihnen e in fuehr t . DerRahmen unserer E in fuehrung in F 'ASCAL wuerde unweiger l i ch gesprengt werden.

203

Page 210: Pascal - Eine kinderleichte Einführung

1 . Die WITH—Anweisung

A r b e i t e t m a n v i e l m i t Ve r b u n d e n , s o k a n n e s m a n c h m a l z u r L a s tw e r d e n , m u s s m a n i m m e r w i e d e r a l l e f u e h r e n d e n Ve r b u n d v a r i a b l e na u f f u e h r e n , w e n n m a n e i n e K o m p o n e n t e t i e f u n t e n i n d e r S t r u k t u ra n s p e c h e n w i l l :

TYPEtbeispiel = RECORD

nummer : INTEGER;

person : RECORDname : STRING (.20.);geb

END;

RECORDtag, monat, jähr ;INTEGER;

END;

END;

VARm i t g l i e d ; t b e i s p i e l ;

mitglieder : ARRAY (.1..100.) OF tbeispiel;

READLN ( mitglied.person.geb.tag );READLN ( mitglied.person.geb.monat );READLN ( mitglied.per son.geb.jähr );

E i n e e c h t e A r b e i t ,u n t e r s c h e i d e n s i e s i

d i e s e L e s e a n w e i s u n g e n z u s c h r e i b e n ,: h n u r i n d e n l e t z t e n K o m p o n e n t e n .

Dabei

PA S C A L b i e t e t u n s n u n d i e M o e g l i c h k e i t , R E C O R D - Va r i a b l e n g u a s ia u s z u k l a m m e r n , w e n n s i e m e h r m a l s a u f t a u c h e n . S o k o e n n e n w i rv e r e i n f a c h t s c h r e i b e n :

WITH mitglied.person.gebDO BEGIN

READLN ( tag );READLN ( monat );READLN ( jähr );

END;

mi tg l i ed .pe rson .geb denk t s i ch CPU e in fach immer vo r d ie Komp o n e n t e n . H a e t t e n w i r n u r m i t g l i e d . p e r s o n h i n t e r W I T H a n g e f u e h r t ,so hae t te immer geschr ieben werden muessen :

READLN ( geb.tag ); u s w.

?04

Page 211: Pascal - Eine kinderleichte Einführung

Formal lautet die neue Anweisung in dieser Weise:

uith-anueisung:

^ — ^ + + _ _ + +—>—^HITH >—>—7—! recordvariable !--—>—(DO)—>—! anweisung !—>— " 7 + 1 V + +

1 _ / ' ~ ^ '\ i T

D u r c h b e d a c h t e V e r w e n d u n g v o n W I T H g e w i n n t m a nU e b e r s i c h t l i c h k e i t , s p a r t S c h r e i b a r b e i t u n d - b e i A R R A Y O F R E C O R D -a u c h R e c h e n z e i t , s i e h e f o l g e n d e n F a l l :

WITH mitgl ieder(. i .) .personDO ...

A u f Z w e i d e u t i g k e i t e n i s t a c h t z u g e b e n , d e r R e c h n e r w e i s s d a n nn i c h t , w e l c h e K o m p o n e n t e n , w e l c h e r V a r i a b l e n i h r m e i n t :

WITH mitgl ieder(, i . ) .person, mitgl ied.personDO BEGIN

name := name; dt soll he issen:mitglied(.i.).person.name := mitglied,person.name »)

END;

Man ueberlege sich also immer genau, was der Rechner vor jedeKomponente vorsetzen wird, was man ausklammert.

Page 212: Pascal - Eine kinderleichte Einführung

Z e i g e r

B i s h e r h a b e n w i r n u r s t a t i s c h e D a t e n s t r u k t u r e n k e n n e n g e l e r n t ,d . h . s o l c h e , d i e w a e h r e n d d e r P r o g r a m m l a u f z e i t n i c h t m e h rv e r a e n d e r t w e r d e n k o n n t e n . W i r m u e s s e n v o r P r o g r a m m s t a r t a l l eV a r i a b l e n v e r e i n b a r e n , d i e w i r s p a e t e r b e n u t z e n w o l l t e n .

D i e s l e g t d e m P r o fi b e i g a n z k n i f fl i g e n P r o b l e m e n a b e r F e s s e l na n , d i e P A S C A L z u e i n e r d u r c h s c h n i t t l i c h e n D u r c h s c h n i t t s s p r a c h ed e g r a d i e r e n w u e r d e n . A u s d i e s e m G r u n d e k a n n m a n a u c h d y n a m i s c hV a r i a b l e n e r z e u g e n , d . h . w e n n d a s P r o g r a m m s c h o n l a e u f t .

D a m a n a b e r n i c h t w e i s s , o b , w a n n , w o u s w . d a s g e s c h i e h t , k a n nm a n d i e s e n d y n a m i s c h e n V a r i a b l e n v o r a b k e i n e n N a m e n g e b e n . S i ew e r d e n d a h e r u e b e r Z e i g e r a n g e s p r o c h e n , d . h . V a r i a b l e n , d i ed o r t h i n w e i s e n , w o w i r i m S p e i c h e r d i e n a g e l n e u e n V a r i a b l e n z u rP r o g r a r n m l a u f z e i t e r s c h a f f e n h a b e n .

zeigertyp:4 4

—>-~(£>">—' typ"*!« I—>~ 4 4

i s t d e r n e u e T y p d a f u e r . B e i s p i e l :

TYPEze iger - ^Ob jek t ; d t man beach te das A * )

VARp , q : z e i g e r ;

p , q s i n d Z e i g e r v a r i a b l e n : u e b e r s i e k o e n n e n w i r d i e n e u z ue r z e u g e n d e n , n a m e n l o s e n Va r i a b l e n a n s p r e c h e n . D i e s e s i n d i m m e rvom Typ objektl

bezugsvariable:

4 4

—>—! zeiger var iable !—>—(^-->4 4

ff Bezuas variable.V" ' d ie$rgeschaffen

hqben. Ist ohneNamen

W e n n p , q v o m T y p ' - o b j e k t s i n d , d a n n s i n d / j a , c / A v o r n T y po b e j k t . S i e s i n d d i e B e z u g s v a r i a b l e n ! J e d e s • " • w i l l j e t z t k o r r e k tg e s e t z t w e r d e n !

TYPEObjekt - (kreis, quadrat); dt Ergaenzung zu oben *)

D i e e t w a s v e r z w i c k t e n V e r h a e l t n i s s e v e r d e u t l i c h e n w i r ' m a l m i te i n i g e n G r a fi k e n :

2 0 6

Page 213: Pascal - Eine kinderleichte Einführung

Z e i g e r v a r i a b l e V a r i a b l e v o n T y p ° o b j e k t °

p x > o p A = Oq , > □ q A = a

p j 4 o N a c h d e r Z u w e i s u n g Z E I 6 T pi a u f d i e s e l b e d y n a m i s c h e

p : = q > ( - ] V a r i a b l e w i e q !q , >

Man denke sich jetzt wieder den selben Zustand hergestellt vie in der ersten 6rafik, dannergibt die naechste Operation folgendes:

p | > Q N a c h d e r Z u w e i s u n g h a t d i ep * : = q A V a r i a b l e , a u f w e l c h e p z e i g t ,

den selben WERT, wie die,q j > Q a u f d i e q z e i g t !

I m Z u s a m m e n h a n g m i t Z e i g e r n ( o d e r e n g l . : p o i n t e r ) g i b t e s a u c he i n e n e u e K o n s t a n t e : N I L .

p : - N I L p *

b e w i r k t d a n n , d a s s pd y n a m i s c h e Va r i a b l e .

a u f n i c h t s z e i g t a l s o a u f k e i n e

J e t z t h a b e n w i r s o v i e l v o n d i e s e n t o l l e n n e u e n V a r i a b l e ne r z a e h l t , d a n n w o l l e n w i r d o c h m a l s e h e n , w i e m a n s i e e i g e n t l i c herzeugen kann :

NEW ( zeigervariable )

erzeugt eine neue Variable vom Typ der Bezugsvariablen derZ e i g e r v a r i a b l e . D e r Z e i g e r a u f s i e w i r d z e i g e r v a r i a b l ezugewiesen.

DISPOSE ( zeigervariable )

gibt den Platz, welchen die zugehoerige Bezugsvariable imSpeicher belegt, wieder frei, zeigervariable hat hinterher denWert NIL.

Z u d i e s e n b e i d e n S t a n d a r d p r o z e d u r e n g i b t e s i n d e n m e i s t e nPA S C A L - D i a l e k t e n n o c h d i e P r o z e d u r e n M A R K u n d R E L E A S E ; d a f u e rf e h l t m e i s t D I S P O S E . S c h l a g t d i e s b e z u e g l i c h d o c h m a l i n e u r e mHandbuch zum Uebe rSe tzungsp rog ramm nach . TURBO-PASCAL en thae l ta l l e 4 R o u t i n e n .

2 0 7

Page 214: Pascal - Eine kinderleichte Einführung

Zur Verdeut l i chung:

TYPEzeiger - ^element;

element - RECORDnaechster : zeiger;

da tenEND;

datentyp; dt hier z.B. CHAR a)

VARwurzel, p, q : zeiger;

NEW ( p )

pA.naechster := NIL

wurzel :■

p*.da ten

NEW ( p'-.naechster )

p*.naechster

wurzel *-

pA.naechster

P *

w u r z e l t >

* !

4

t4

•A' i4

> -4

J4

'A' !4

4+- V -+1 I

I

DISPOSE ( wurzel ) wuerde jetzt die Bezugsvariable mit Dateninhalt'A ' vernichten.

>08

Page 215: Pascal - Eine kinderleichte Einführung

Wie i n de r G rafik angedeu te t , we rden Po in te r zum Au fbau vonL i s t e n b e n u t z t , b e i d e n e n v o r h e r n i c h t b e k a n n t i s t , w i e v i e l eE l e m e n t e s i e e n t h a l t e n w e r d e n .

Ze iger e ignen s ich fuer den vers ie r ten Programmierer, um be l iebig komplexe Datenstrukturen zu schaffen und leicht zu handhaben.

D e r A n f a e n g e r s o l l t e e r s t n a c h g e h o e r i g e r P r o g r a m m i e r p r a x i sd i e s e n n e u e n Ty p b e n u t z e n u n d z u v o r v e r t i e f e n d e L i t e r a t u r z u mThema waelzen.

209

Page 216: Pascal - Eine kinderleichte Einführung

L i t e ra tu r1 i s t e

Bauer, F.L. et al . : Comp i1 er Con st r uc t i on"Spr inger s tudy ed i t i on " , Spr inger -Ver lag Ber l i n He ide lbe rg NewYork Tok io

> Fuer denjenigen geeignet, der sich Einblick in den Aufbauund Arbeitsweise der UeberSetzungsprogramme beschaffen moechte.

B o r l a n d I n t e r n a t i o n a l , I n e ( H e r a u s g e b e r ) : T U R B O P A S C A L -Reference Manua lHei msoeth-Sof tware, Muenchen

> H i e r s i n d a l l e E i g e n h e i t e n d e s i n u n s e r e m B u c h everwendeten PASCAL-Dialektes genau (aber knapp) beschrieben.

Eyssen. Remy: Ich hasse ComputerDroernersche Verlagsanstal t Th. Knaur Mach f . Muenc hen 198E

> A ls Ausg le ichs lek tuere zu d ieser E in fuehrung sehr zuempfehlen.

Her sc hei, Rudolf u. Pi eper , Fr _i e d r_ic_h: PASCALR. Oldenbourg Ver lag Muenchen Wien (1979)

> Auch eine Einfuehrung in PASCAL, 'mal mit anderen Wortenaus einer anderen Sicht.

Schauer, He lmu t : PASCAL fue r An faengerR. O ldenbourg Ver lag Muenchen Wien (1979)

> dito

W i r t h , N i k i a u s : A l g o r i t h m e n u n d D a t e n s t r u k t u r e nTe u b n e r S t u d i e n b u e c h e r I n f o r m a t i k B d . 3 1 , S t u t t g a r t ( 1 9 7 9 )

> E i n M u s s f u e r j e d e n , d e r s i c h n a e h e r m i tProgrammiertechniken und Algorithmen auseinandersetzen moechte.H i e r w i r d a u c h d e r U m g a n g m i t D a t e i e n u n d Z e i g e r n n o c hausfuehrlicher und auf hoher Ebene behandelt. Auch sehr komplexeSortieralgorithmen werden besprochen.

W i r t h , N . : S y s t e m a t i s c h e s P r o g r a m m i e r e nTe u b n e r S t u d i e n b u e c h e r I n f o r m a t i k B d . 1 7 , S t u t t g a r t ( 1 9 7 2 )

> E ine E in fuehrung in den sys temat i schen En twur f vonProgrammen allgemein und PASCAL-Programmen im Besonderen.

Wi r th , N . u . Jensen , - Ka th leen : PASCAL User Manua l and Repor t" S p r i n g e r s t u d y e d i t i o n . " , S p r i n g e r - Ve r l a g N e w Yo r k ( 1 9 7 5 )

> Hier ist niedergelegt, wie PASCAL urspruenglich aussehens o l l t e , g a e b e e s n i c h t a l l d i e u n t e r s c h i e d ! i c h e n D i a l e k t e .Sozusagen DAS Standartwerk vom Erfinder der Sprache.

Wi rth, N. : Cornpi lerbauTe u b n e r S t u d i e n b u e c h e r I n f o r m a t i k , S t u t t g a r t

> siehe Bemerkungen zu "Compiler Construction"

: i o

Page 217: Pascal - Eine kinderleichte Einführung

St i chwortVerzeichnis

Begri ff

A lgor i thmusASCIIAusdrueckeAusgabeanwei sungAuswahl

BedingungenBezeichnerBOTTOM-UP

DateiDynamische Variablen

Central Processing Unit (CPU)Character

Endlosschlei fe

FehlerCompi1 er-Switch fuer I/O -I / O -

Felder- mehrdimensional- vorn Komponententyp CHAR

F i l eFunkt ionen

Globale ObjekteGrammati kG u e l t i g k e i t s b e r e i c h

HardwareHexadez i malsyst em

Identi f ierI n i t i a l i s i e r u n g

KommentarKonstanten

LesenLokale Objekte

MaschinencodeMassenspeicherMathematische Operatoren / FunktionenMengenMenu

Nassi-Schnei dermann—Diagramm

O p t i s c h e G l i e d e r u n g 6 9 f f

S e i t e ni

5 75 855s i e h e S c h r e i b e n79f f

4113 14128

•167f f206 ff

^ i

16 5 6 f f

78

1861 8 6 f9 4 f f1 0 2 f f105f f1 6 7 f f151f f

13781 3 7 f f

23

s i e h e B e z e i c h n e r6 3

132 0 f f

23f f 170f f134

16730 ff1 1 4 f f79f f

6 , 7

Page 218: Pascal - Eine kinderleichte Einführung

F'arametera k t u e l l e -fo rma le -C a l l - b y - Va l u e -Ca l l -by—Refe rence

Programm-au fbau ( f o rma l )

Prozedur

143 f f144144144145713131f f

RechnenRekursion

Compi ler Swi tch fuer -D i r e k t eI n d i r e k t e

30f f161f f164f161164

SchachtelungSchlei fenSchreibenS c h r i t t w e i s e s Ve r f e i n e r nSoftwareStruk togramrnS t r i n g- funktionen in TURBO-PASCAL

- v e r g l e i c h eSymbolSyntax

-diagramm

4360 ff15f f5*_»6, 716107f1131288

1 3 6 f f6 6 f f174 f f

1 0 5 f f

7 3 f f

Tex tda te i enTOP-DOWNTypen

Funkt ions -- i m p l i z i t- s e l b s t d e fi n i e r e nS k a l a r -S t r u k t u r i e r t eUnte rbere ichs -- v o r d e fi n i e r t

l S l f f128

8692 f8 7 f f9 4 f f90 f57

1 1 4 f f 1 2 3 f f

Unterprogramme 130 f f

Va r i a b l eVerbündeVerg le i chsopera to ren

Verzweigung

23f fl^of f4 1 4 81163 7 f f

113

Wahrhei tswerteWertzuwei sung

4 6 f f3 4 f f

Zahlganze -gebrochene -groessete ganze -

242726

27

Page 219: Pascal - Eine kinderleichte Einführung

Verzeichnis der Syntaxdiagramme:

B e z e i c h n u n g S e i t e

A d d i t i o n s o p e r a t o r 5 5A k t u e l l e r P a r a m e t e r 1 4 6A n w e i s u n g 4 0A n w e i s u n g s t e i 1 1 4A R R A Y - K o m p o n e n t e 9 7A R R A Y - T y p 9 6A u s d r u c k 5 5A u s g a b e a n w e i s u n g 1 7

B e d i n g t e A n w e i s u n g 4 0B e d i n g u n g 5 5B e z e i c h n e r ( . . . n a m e ) 1 4B e z u g s v a r i a b l e 2 0 6B l o c k 1 3

C A S E - A n W e i s u n g 8 1

E i n g a b e a n w e i s u n g 2 4E i n f a c h e A n w e i s u n g 4 0E i n f a c h e r T y p 8 6F a k t o r 1 5 3F I L E - T y p 1 6 7F O R — A n w e i s u n g 7 3F L i n k t i o n s a u f r u f 1 5 3F u n k t i o n s v e r e i n b a r u n g 1 5 2

I F - A n W e i s u n g 4 0

L e e r e A n w e i s u n g 4 0

K o m p o n e n t e n 1 i s t e 1 2 4K o n s t a n t e n d e fi n i t i o n 2 1K o n s t a n t e 2 1

M e n g e 1 1 6M u l t i p l i k a t i o n s o p e r a t o r 5 5

N a m e 1 4

P a r a m e t e r 1 i s t e 1 4 4P r o g r a m m 1 3P r o g r a m k o p f 1 3P r o z e d u r a n w e i s u n g 1 4 6P r o z e d u r v e r e i n b a r u n g 1 4 4

R E C O R D - K o m p o n e n t e 1 2 5R E C O R D - T y p 1 2 4R E P E A T - A n w e i s u n g 6 1

S E T - T y p 1 1 5S k a l a r - T y p 8 7S t r i n g 1 8S T R I N G - T y p 1 0 6S t r u k t u r i e r t e A n w e i s u n g 7 4S t r u k t u r i e r t e r T y p 1 6 7

Page 220: Pascal - Eine kinderleichte Einführung

T e r m 5 5T y p 4 7T y p d e fi n i t i o n 9 2

U n t e r b e r e i c h s t y p 9 0

V a r i a b l e 3 4V a r i a b l e n v e r e i n b a r u n g 2 5V e r b u n d a n w e i s u n g 4 0V e r e i n b a r u n g s t e i l 1 3 2V e r g l e i c h s o p e r a t o r 1 1 8V o r z e i c h e n l o s e K o n s t a n t e 5 5

W i e d e r h o l u n g s a n w e i s u n g 7 4W I T H - A n w e i s u n g 2 0 5W H I L E - A n W e i s u n g 6 6W e r t z u w e i s u n g 1 5 3

Z e i g e r t y p 2 0 6