ebook img

Programmierprinzipien in BASIC und Pascal: Mit 12 BASIC- und 13 Pascal-Programmen PDF

67 Pages·1984·1.666 MB·German
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Programmierprinzipien in BASIC und Pascal: Mit 12 BASIC- und 13 Pascal-Programmen

Dietmar Herrmann Programrnierprinzipien in BASIC und Pascal Programmieren von Mikrocomputem Die Bande dieser Reihe geben den Benutzern von Heimcomputern, Hobbycomputern bzw. Personalcomputern iiber die Betriebsanleitung hinaus zusatzliche Anwendungshilfen. Der Leser findet wertvolle I nformationen und H inweise mit Beispielen zur optimalen Ausnutzung seines Gerates, besonders auch im Hinblick auf die Entwicklung eigener Programme. Bisher erschienene Bande Band 1 EinfUhrung in BASIC von W. Schneider Band 2 lehr-und Obungsbuch fur die Rechnerserien cbm 2001 und cbm 3001 von G. Oetzmann Band 3 BASIC fUr Fortgeschrittene von W. Schneider Band 4 Einfuhrung in PASCAL von W. Schneider Band 5 lehr-und Obungsbuch fur die Rechnerserien cbm 4001 und cbm S001 von G. Oetzmann Band 6 BASIC-Programmierbuch zu den grundlegenden Ablaufstrukturen der Datenverarbeitung von E. Kaier Band 7 lehr-und Obungsbuch fUr Commodore-Volkscomputer von G. Oetzmann Band S Assembler-Programmierung von Mikroprozessoren (SOSO, S085, Z SO) mitdem ZXS1 von P. Kahlig Band 9 Einfiihrung in die Anwendung des Betriebssystems CP/M von W. Schneider Band 10 Datenstrukturen in PASCAL und BASIC von D. Herrmann Band 11 Programmierprinzipien in BASIC und PASCAL von D. Herrmann Band 12 Assembler-Programmierung von Mikroprozessoren (SOSO, SOS5, Z SO) mit dem ZX Spectrum von P. Kahlig Programmieren von Mikrocomputem Band 11 Dietmar Herrmann Programmierprin,zipien in BASle und Pascal Mit 12 BASIC- und 13 Pascal-Programmen Herausgegeben von Harald Schumny Springer Fachmedien Wiesbaden GmbH CIP-Kurztitelaufnahme der Deutschen Bibliothek Hemnann. Dietmar: Programmierprinzipien in BASIC und Pascal: mit 12 BASIC-und 13 Pascal-Programmen I Dietmar Herrmann. - Braunschweigj Wiesbaden: Vieweg, 1984. (Programmieren von Mikrocomputernj Bd. 11) ISBN 978-3-528-04258-5 ISBN 978-3-322-86163-4 (eBook) DOI 10.1007/978-3-322-86163-4 NE:GT Alle Rechte vorbehO,ti on © Springer Fachmedien Wiesbaden 1984 UrspI1lnglich erschienen bei Friedr. Vieweg & Sohn Verlagsgesellschaft 1984 Das hierin enthaltene Programm-Material ist mit keiner Verpflichtung oder Garantie irgendeiner Art verbunden. Der Autor iibemimmt infolgedessen keine Verantwortung und wird keine daraus folgende oder sonstige Haftung iibernehmen, die auf irgendeine Art aus der Benutzung dieses Programm-Materials oder Teilen davon entsteht. Die Vervielfliltigung und Obertragung einzelner Textabschnitte, Zeic;hnungen oder Bilder, auch rur Zwecke der Unterrichtsgestaltung, gestattet das Urheberrecht nur, wenn sie mit dem Verlag vorher vereinbart wu:rden. Im EinzelfaU md iiber die Zahlung einer Gebllhr rur die Nutzung fremden geistigen Eigentums entschieden werden. Das gilt rur die Vervielfliltigung durch alle Verfahren einschlie1\lich Speicherung und jede Obertragung auf Papier, Transparente, Filme, Bănder, Platten und andere Medien. Dieser Vermerk umfdt nicht die in den §§ 53 und 54 URG ausdriicklich erwahnten AU8- nahmen. v Inhaltsverzeichnis E.infiihrung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 1 1 Top-down-Methode......................................... 5 1.1. GauB-Elimination (pascal) ................................ 5 1.2. Primzahlsieb (pascal) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 7 2 Aigebraische Umformungen ...... . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 10 2. 1.G ro6ter gememsamer Teiler (Pascal) . . . . . . . . . . . . . . . . . . . . . . . . .. 10 2.2. Elliptisches IntegralI. Art (BASIC) . . . . . . ... . . . . . . . . . . . . . . . . .. 11 2.3. Modulorest einer Potenz (BASIC) ........................... 12 3 Rekursion............................................... 16 3.1. Ackermann-Funktion (pascal) ................' . . . . . . . . . . . . .. 16 3.2. Permutationen (BASIC) .................... ;'.. . . . . . . . . . .. 18 3.3. Partitionen (pascal) ......................... '. ~ . . . . . . . . .. 19 . .-:,. 4 lteration................................................ 22 4.1. Ackermann-Funktion (BASIC) . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 22 4.2. BinomialkoefflZienten (BASIC) . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 23 4.3. Gammafunktion (BASIC). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 25 5 Backtracking-Verfahren...................................... 29 5.1. Springerzug (pascal) .................................... 29 5.2. O/l-Rucksackproblem (pascal) ............................. 31 5.3. Labyrinth (pascal) ..................................... 33 6 Teile-und-Herrsche~rinzip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 37 6.1. Quicksort (Pascal) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 37 6.2. Sortieren durch binăres Einftigen (pascal) ...................... 39 6.3. Wăgeproblem (pascal) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 40 7 Heuristische Methoden ...................................... 43 7.1. Springerzug (BASIC) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 43 7.2. Umftillaufgabe (pascal) .................................. 45 VI Inhaltsverzeichnis 8 Greedy-Methoden .......................................... 47 8.1. Rucksackproblem (BASIC) .............................. " 47 8.2. Travelling-Salesman-Problem (BASIC) ........................ 49 9 Riickwărtsrechnen ......................................... 52 9.1. Jeepproblem (pascal) .................................. " 52 9.2. Besselfunktion 1. Art (BASIC) ............................. 54 10 Simulation .............................................. 56 10.1. Warten auf einen vollstandigen Satz (BASIC) . . . . . . . . . . . . . . . . . . .. 56 10.2. Anzahlschatzung von Objekten (BASIC) . . . . . . . . . . . . . . . . . . . . . .. 58 Literaturverzeichnis ........................................... 59 Sa~hwortverzeichnis .... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 60 VII Vorwort Sto~t man auf eine besonders elegante Formulierung eines Algorithmus, so fragt man sich meist, wie der Autor auf die entsprechende Programmieridee gekommen ist. Mustert man eine Vielzahl von Algorithmen genauer, so erkennt man, d~ es etwa ein Dutzend grund legender Programmiertechniken gibt. Im vorliegenden Band sollen daher einige solche Pro grammierprinzipien wie - Top-down-Prinzip - Rekursion - Iteration - Backtracking-Verfahren - Teile-und-Herrsche-Prinzip - Greedy-Algorithmen vorgestellt werden. Thre Realisierung wird an Hand von 25 vollstandigen BASIC- und Pascal-Programmen diskutiert. Diese Programme sind vielfaltigen Bereichen entnommen: Neben numerischen und unterhaltungs-mathematischen Problemen werden auch kombi natorische, Sortier-und Operations-Research-Fragen behandelt, z.B. - Permutationen - Springerzug - Labyrinth - Quicksort - Rucksackproblem - Travelling-Salesman. Viele Algorithmen sind durch Struktograrnme erkliirt und konnen damit gegebenenfalls in andere Programmiersprachen iibertragen werden. Anzing, Oktober 1983 Einfiihrung Wăhrend in der FrUhzeit des Programmierens die Programmerstellun~ mehr oder weniger Sache des personlichen Geschmacks bzw. Geschicks war, hat sich mittlerweile das "Software-Engineering" entwickelt, das eine ganze Reihe von Anforderungen an Pro gramme erstellt. Ausgangspunkt war die Entwicklung des strukturierten Prograrnrnierens, die sich in dem Buch "Structured Prograrnrning" von Dijkstra, Hoare und Dahl (1972) niederschlug. Vorausgegangen war die beriihmte Kontroverse um Dijkstra 's "GOTO-considered harmful" (1968). ZieI des Strukturierens war, unter strikten Anwendung der Kontrollstrukturen - repetive Anweisung (FOR .. DO,REPEAT .. UNTIL,WHlLE .. DO) - alternative Anweisung (IF .. THEN .. ELSE,CASE .. OF) - Verbundanweisung (BEGIN .. ENO) und unter Vermeidung der Sprunganweisung (GOTO) den Programmablaufiiberschaubar und kontrollierbar zu machen. Die Korrektheit eines Prograrnms sollte formal und nicht durch Testlăufe bewiesen werden. Was bewirkt der folgende Programmabschnitt? x :=x -y; y :=x +y; x :=y-x; Hat x anfangs den Wert a und y den Wert b, so folgt entsprechend x :=a-'b; y := (a - b) + b = a; x :=(a-b)+b -(a-b)=b; Damit ist formal gezeigt, daB bei diesem Programmabschnitt die Variablen x und y ihren Wert austauschen. Durch Aufstellen von Invarianten sollten Schleifen formal veriflZiert werden konnen. Folgender Programrnausschnitt bestimmt das Maximum des Feldes ali], 1 OS;;; i OS;;; n: i:= 1; m:= 1; <n while i do begin i := i + 1; > if ali] a[m] then m := i end; max :=a[m]; Die auftretende WHILE .. DO-Schleife hat folgende Invarianten (1 OS;;; i OS;;; n) A (1 OS;;; m OS;;; i) A (a[m];;" a[I], ... , a[m];;" a[n]) 2 EinfUhrung Wiire eine der Invariantenbedingung verlettt, so wtirde das Programmsttick nicht den An forderungen gentigen. Ebenso solIte das Determinieren eines Algorithrtllls formal veriftziert werden. > Folgendes Programmsttick liefert das Produkt der Variablenwerte x . y(x, y O): z:= O; u:= x; repeat z :=z +y; u:= u-1 until u = O; Da in der REPEA T .. UNTIL-Schleife gleiche Summanden y aufsummiert werden, lautet die Invariantenbedingung (z: u . y = x . y)  (u ~ O). Zusammen mit der Abbruchbedingung der Schleife (u = O) folgt (z + u . Y = x . y)  (u = O) ~ (z = x . y) also das gewtinschte Resultat, da~ z den Produktwert von x und y liefert. Die Schleife determiniert somit genau nach x Schritten. Die eben angeflihrten Forderungen des strqkturierten Programrnierens erm6glichen aber nicht nur die formale Veriftkation eines Programms, sondern erleichtern auch wesent lich das ModifIzieren und Warten von Programrnen. Weitere Forderungen des Software Engineerings k6nnen dem Diagramm auf Seite 3 entnommen werden (aus [8]). Eine wichtige Programmiertechnik, die sich aus demPrinzip des Strukturierens ergibt, ist die Top-down-Methode. Dabei wird das gegebene Problem in kleinere, einzeln 16sbare und tiberschaubare Problemschritte zerlegt. Das Gegenteil des Top-down-Prinzips ist die Buttom-up-Methode, bei der das Programrn aus einzelnen vorgefertigten Programmteilen, Prozeduren usw. zusammengegesetzt wird. EbenfalIs vom Gro~en ins Kleine geht das Prinzip Teile-und-Herrsche. Wie von der Biniirsuche bekannt ist, wird die Anzahl der zu untersuchenden Alternativen bei jedem Schritt halbiert. Dieses Prinzip wird an zwei Sortierverfahren aufgezeigt, am Quicksort und am Sortieren durch biniires Einfligen. Da~ auch manchmal der Problemumfang ge drittelt werden kann, wird am Beispiel eines Wăgealgorithmus dargestelIt. Auch die Methode der algebraischen Verein[achung verlagert das Problem vom Komplizierten zum Einfachen. Dieses Prinzip wird hier zur Berechnung des gr6~ten ge meinsamen Teilers, des elliptischen Integrals 1. Art und des Modulorests einer Potenz angewandt. Ein seit langem bekanntes Programmierprinzip ist das der Rekursion. Die Rekursion ist etwas in Miskredit geraten, da viele Programmiersprachen keine rekursiven Prozeduren erlauben und sie, ungeschickt angewandt, wenig effektive Programme erzeugt. Manche In formatikprofessoren sind der Meinung, d~ Rekursion prinzipiell zu vermeiden seL Je doch gibt es eine ganze Reihe von Algorithmen, die, rekursiv formuliert, sehr effektiv sind oder in nattirlicher Weise auf rekursiven Datenstrukturen operieren. Ein in der numerischen Mathematik vielbentitzte Programmtechnik ist die Iteration. Nach D. E. Knuth (1974) ist die Umwandlung eines rekursiven Schemas in ein iteratives Einfiihrung 3 Gerăteunab- hăngigkeit Portabilităt Autarkie Genauigkeit Zuverlăssigkeit Volistăndigkeit Robustheit Integritiit Konsistenz ZiihIbarkeit Effizienz Gerăteeffizienz Benutzer freundlichkeit Zugănglichkeit Assimilations- fiihigkeit Testbarkeit Selbsterklărung Wartbarkeit Verstăndlichk. Strukturierung Kompaktheit Ănderbarkeit Lesbarkeit a ..... b: abeinhaltet b Erweiterbarkeit eines der grundlegendsten Konzepte der Informatik. Als Anwendung werden die Acker mann-und Gammafunktion iterativ berechnet, ebenso die Binomialkoeffizienten. Spezielle rekursive Verfahren sind die Backtracking-Verfahren, die eine LOsung durch systematisches Ausprobieren ansteuem. Sie sind imstande, sich aus einer "Sack gasse" zurtickzuziehen und einen neuen Ausgangspunkt zu suchen, der eine Weiterent wicklung erlaubt. Als typische Backtracking-Verfahren werden hier der Springerzug, Wegsuche in einem Labyrinth und ein Rucksackproblem behandelt. Mit dem Backtracking verwandt sind die Branch-and-Bound-Verfahren. Sie durch mustem eine Vielzahl von Moglichkeiten (Branch) und fUhren aber nur eine beschrankte

See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.