Grundlagen der Programmierung .,:' 7 .1 ',.''',.i. l li r ';r 't, : Vom Problem zum Programm in der Industde tätige Infomatiker scheiben auch bei großen Softwareprojekten keine eiMige Zeilc Progräm]nqüellcode selbst. I]rfe Hauptaufgabe bestehr in der problemaralyse und der Konzeption von Softwarcstruktuen. Dabei werden folgetrde plrnkte berücksichtigt: r Lösharkeit: Ist das PrcblelJ, nit den Mcthoden det Inlarmatik lösbo t? r Struktuderung: Karn das Problem rn 'teilprcbleme zetlest werden, sodass im Team daran gcarbeitet weden kafl1? r Modellierung: Bieten sich bastimmte ,olsntqen- Llnd -struktüten an, die dic prograIn, Viele mierung vereinfa.hen? r Schnittstellendefinition: Wie müssen die Daten urd Softwaremodule cinzelner Arbeitsgruppen zur cesdmrlösung des Problems ver,(nnpt't we cn? Meist heüscht gerade bei Anfingeln die Meinung vor, dass die Änalyse eil1es problems leicht im Kopf siattfinden kann und man sich daruch einfach an den öompurer setzt und das Programm in einer beliebigen Programmiersprache eingibt. W:ihrend ca. S0 % aller A ängcr meist so vorgehen, gibt es unrer den professionellen Softwareentwicklern wahr scheinlich wenigcr a1s 10 %, die auf dic beschriebenc Weise wirklich effektiv arbeitetr krjnSie könncn sich leicht selbst davon übeüeugen, dass ein problem, das im räglichen Leben recht einfach aussicht, äuße vezra-ickt werden kann, wenn man versucht, es mit eirem Computer zu lösen: Ziehen Sie einige Karten aus einem Kartenspiel üld legen Sie diese aufgedcckt auf den Tisch. Sortiercn Sie diese Kdrter nach ihrem Wcrr. Was ftir Sie aufgrund Ihrer Edahrung mit Spielkartcn sehr leicht erscheini, muss dern Computer mit großem Aufwand erst mühsam beigebmcht werdeL Das Kemproblem der F.agestellung istr Wie brinsr man einem Computer das Sortiercn bei, wenn dieser die Bedcuturg der K.rtenwerto nicht kennt?1 r- .f F if ir it I r E b !D ti ä E !- l Wjr gehetr m dieser Stclle \.ereinfachend davon aus, dass der ComputE die Ka{en nicht physika, lisch [2.8. per Roboterdm und Kmera) soitieren mxss, sondem aer Mensch ihrn dic se;uBurel Karlenwerte mitteilt. ,:E -.t .L - 7.1 Vom Problem zum koglamm WffiWWWffiW L4erschen oft selbstverstand iche ALrfgaben müssen dem Computer mÜhsam beige brachi weden. Die Kunn der Programmierunq besteht darln, Lrmsangssprachlich formulierte Probleme in eine d€m Computer geläuf ige Programmierspmche umzusetzen. Abbildung 7.1: Einfache für den EvA-Prinzip und Top-down-Entwurf wie bereits in (dpirel J ausgeftibrt 't1lde, gilt sowohl i Software- als auch nn Hardwarebereich das Prinzip von Eingabe-Vem$eitLülT-Äus8obe, kurz:8v,4. Dieses u'ird zur Lösung von kleinen bis mittelgroßen Softwareprcjektetr ir der Tdp-dol'l,r-Iösurgssfrote8rc umgesetzt, die das Itoblem von eincr grobell Formulierung ausSehend schrittweise verfeinert: t Präzisieren der Ein- und Ausgabe: Hier interessicrt man sich dafür, welche Datentypen man ftir Xin- und Ausgabe verwerdet. Bei dem oben bcschriebelen Spielkartenproblem bictet sich eire Codierung nt Form von Brchstaben und Zahlen an, die auf einen Bercich der natürtichen Zahlen abgebildet wedcn. Die rang edrigste Karte rv:he lwenn man z.B. an die Skatregeln und ein Skatspiel mit 32 Karten denkt) dje Karo 7, sie entsprichi der 1. Dje ranghöchste Karte w:üe der Kreuz Bübe, er etrtsp cht der 32. r f,ntwickeln einer Lösungsidee: Das Entwickeh der Lösrngsidee so11 vor allen Dingen Folgendes sicherstellen: Die Lüsung soll korreit seir, d.b.. sie soll genau das leisten, was man von ihr erwartet. In unserem Beispiel u';ile das die dchtige Sortiemng der Kartcn. Weiterhin soll die Lösung effizient seLl,, d.h. nicht utrnaitig viele Systemressoücen (Speicher, CPU-Zeit) verbmrchen. Die Lösungsideen, die man zum Soriiercn vor Daten benötigt. werden Sie in l(i]pitel I Doch ausflihrlich kcnnenlelnen Entyurl des groben Programmgerüsts: Um von der umgangssPmchlich formulierter Lösungsidcc zum konkreten Programm zu getangen, formuliert man den Lösungsweg als Algorithmus in Fonn eiies Programmablaufplnns (P-4P) oder Sfnr-krogromms, nach den Erfindem auch N^ssl-snNEmmMAN-riogmmm genannt. Als Übergangsform eignet sich vor der eigentlichen Programmierurrg auch die VerwendunB von Pseüdocode Schrittweise VerfeinemnS: Nachdem man das gobe Ge ist des Prograrnms in Form eines Starktogamms oder PAPS formuliert hai, prüIt man, ob alle beschdeberen Schritie direkt io die Programmiersprache der wahl ilbemommen werden können. lst das dcht derFall, so muss an den beteffenden Stelletr, an denen Probleme zu erwarten sind, noch nachgearbeitet werden. Die Formulieflrnger müssen so vedeinert wer d,et lstepwise rcJine' menfJ, dass sie direkt in Code umgesetzt werden kömen. r r Gründlagen der Progrannierutrg r Umsetzung in €ine Programmiersprache: Der letzte ScFrritt zum Programm ist die eigendi. che Programmierun8, die letzdich auch von Laicn oder mit ertsprecherdetr Tools sogar vollautDmatisch vorgenonrmen \,\,erden kann (v91. ropffe1 9J. Zur Progrärrmierung sind die Inhalte des Struktogramms/PAPs eins zu eins in eine Proganriersprache umzusetzen. r Tesrer utrd Korigieren von Fehlertr: Nicht zr uterschätzen ist die Zeit, die man daftir aufwenden muss, um eir Proglamin auf Herz ünd Nierer zu p fen. Dabei sollte man verschiedano Szena en von Eingabcdaten durchspielen und bei fehlerhaften Berechnungen die verursachenden Fehlcr auf'spüren. Diesen Prozess nentrt }J,an Debu1ging. Abschließend sei noch bemerkt: Das gemue Gegenteil des Top-doü,n-Progrrmnie.+amdigmas findet man in der Bortom'up Prograrrmierung: Hier wird das Problem jn kleine Bestandteile zerlegt, die schlussendlich zrII Lösung des Gesamtprcblems zusammengefügt weden. lnsbesondere ftir Informatikeinsteige. ist diese Voryehensweise allerdings nichi zu empfehlen. 7.2 Programmiersprachen Eine Pmgrammießprache ist das Bindc8lied zwischer der mercchlichen Denk, llnd Arbeitsweise und der Welt des Computers, die ja bekanntlich nur aus Nullen und Eimen besteht. Betrachten Sie also die Programmiersprache als eitre Ait Dollnctscher oder Vermittler zwischen ßnen und dem Computer. Das folgende Diagramm zeigt in Form einer VererbLrngsgrafik (einer sogenalnter Mndmap) die Grundklassen von Progmmmierspmcherr. c++ Abbildung 7.2: Derstämmbaum der Prcqrammießprachen rnit Beispieler 7.3 E6te S.hitte Die eil1zelnen Spmchklassen haben folgende Xedeutngenl r Sysremodentierte Sprachen: Diese Spmchtt?an arbeiten direkt auf der Befehlssatzebene des Pmzessoß und sind geftagt, wenn es d .lr gahl einfache Berechnungen auf Hard wareebene zeitlich zu optimiercn. Die systemrahen Sprachen sind ftir Anfänger weniger geeignet. Beispiele für systemnahe Sprachen sind,4ssembier und dic Masc,hrnensprac/re. r Die problemodentierten Sprachen sind die Hocirsprdcien der Programmierung. Im Bcrcich der problemorientierten Sprachen we.den folgende Klassetr unte$chieden: - Die imperativer Sprachen: Mit ihüen werden Lösurgen als Folgen von Anweisungen formuliert, was der Top-down-Technik sehr ertgegenkommt. Im Bereich der impera ti\.en Sprachen untcrscheidet man - objektarientie e Spruclten: Bcispiele wären /avo, C# und C++. prozedurale Spmchen: Zu diesem Bereich gehiierl univeße e (BASIC, C, PASCAL) .lrtd spezielle Sprochen (2.8. SQZ zr1l Abliage von Datenbanten). Sprachen hasieren auf der BeschreibunS vo. Objekten und dere. Beziehugen züeinander. Zu diesen Spmchen zäh1cn einige Vertreter, die zur Realisienrng voD Systemen mtt künstlicher Intclligenz f,(I, verwendet werden. Beispiele sind Prolo& trISP, aber auch IOGO wird zur Gattung der deklarativen Sprachen gez:ihlt. -Die deklarativen Alle Spmchcn können, bezogen a den Ablauf zum Erhalt eiires Iauffähiger Programms, in die folgenden Kategorien aufgeteilt wcrden: r Int€rpret€rsprachen: Ein Interpreter übersetzt die Befehle eines Programmq[ellcodes w:ilrend der Abarbeitung des Codes, er tuhrt den Code somit dirckt ars. Die vom Com I puter durchgetuhrten Rechnungen müssen schließlich zurückinterpretiert werden. Das kosiet Zeit, hat aber den Vorteil, dass mar ein eingcgcbenes Programm nichl bei jeder Anderung neu übersetzen müss. Zu den Interprcterspracher züIlen BASIC, Pe , Ptthon und -Ruby Auch Slrriptsprochen wie lavasc pf werden zlll Laufzeit interprctiert. Compil€ßprachen: Ein Compiler {ar Deuisch: Übeßetzer) isl ein Compüterprogr ux, das einen vorSege.benen Quellcode in eine maschinennahe Sprache iibe.setzt- Das bcdaüt€t zwat dass im Gegersatz zu Inte+reterspmchen boi joder Anderung am Quell(rodc das Progra]n]n neu übeßetzt werdcn muss, das ausführbare Programm ist alledings im Vergleich zu Interyreterprogrammetr um Größenordnungen scheller und oft arch schla*er. Eine wahre Kunsi und eigerctihdiges Gebiei der pmktischcn lnformatik ist dcr Compler6ou: Hier werden Progrä]n]ne konzipiert, dic don Quellcode anaiysieren und üboßctzcn. Beispiele ftir Compilerspmchen sind /ovo, a, (,1++ und CH. 7.3 Erste Schritte leder Prosammic+mfi wurde im Laufe seiner Leh{ahe mit einem Prosamm konfrontielt, das untcr dem Namen I]ello World bekamt ist. Diescs Programm tut nichts andcrcs, als den simplen Text ,,Hello World" auf dcm Bildschirm oder im Teminal auszugeben. Welchen Snrn hat solch ein oinfaches Prcgmmm? Es stellt sicher, dass der Anwender in der Lage ist, alle Schritte im Svstem vorzunehmen, um zu einem la Iähigen Pmgmmm zr gelangen, er somit die zü Progmmmierung notwendige Irhastuktrl auf seinem spcziellen Systcm kcnnt. Die folgenden Beispiele führcn die tJmsetzung des Hello World Progmmms in verschiedenen Programmieflrmgebungen vor. Dabei werden wichtige, zum $ößten Teil auch im vorliegenden Büch behandelte Prcgmmmiersprachen voryeste]]t. Grundlägen der Progrämmierung >Abbildung 7.4 zeigt den A.beitsfluss bei dff Verwendung eines Compilers. Bibliotheken lilaschinencode Abbildung 7.4: D€r Weg einer Quellcodedatei durch einen compiledlinker zum laufiähigen ProgGmm Praktisch läuft die Übersotzung eines C-Quellcodeprogramms itr der l-ernumgebung folgcndermaßen ab: E Man erstellt mit dem Editor eine Queltcode-Textdatei mit dem Namen ÄeIo.c, die folgenden Inhalt hat: /li ncl ude <stdio.h> mai n( ) { pri ntf("Hel I o l{orldl\n"); ] E Dje Quellcodedatei wird auf der Kommändozeile mithilfe des GNU-C-Compileß überpearson@pearson:-s gcc hell o.c Treicn bei der Llbersetzung Fehler aüf, so überprüfen Sie Ihre Quellcodedatei aufTippfehler. 7.3 Eßte Schdtte E Durch den Compiler wird eine austuhrbare Datei mit dem Namen o.oul erzeu$ Diese wird wie folgt gestartet: pearson@pearson:-l . /a.out Hello I'lo.ld! Die Zeichenfolge . / ist wichtiE, damit der Kommandozeileninteryreter (die bas,h) in der Lemumgeblrng weiß, dass sich die aNftihrbare Datei im aktuellen Verzeichnis beffndel' Soll das Programrn einen selbst delinierter Namen haben, dann muss es mit dem Compileßchaltel o kompiliert werden: pearson@pearson:-$ gcc _o <Programmname> hello.c 7.3.5 C++-Compile] C++ ist die objektorientiete Erweiterung der Programmiersprache Hello Worid sieht in C++ folgendermaßen aus: C Der Quellcode von /lincl ude <lostrean> int { I main() std::cout << "Hello. lrorld!\n"i Speichem Sie den Code als ,he?7o.cpp ab und übersctzen Sie das Progamm wie folgt: pearson@pearson:-$ g+ he'l 'lo. cpp GestartetwirddasProgrammwiederdurchEirgabevon./a.outaufderKommandozeile' 7.3.6 Javä-compiler Die Progammiercpmche Java ist der Programmiersprache C++ vom BasisbefehlssFtz her recht ähnlich. Der Quellcode eines He-1?o World-lava-hogrämms sieht folgendermaßen aus: class hello { public static void main (String args[]) [ system. oüt. pri nt( "Hell o l{orld!"); ] ) wichtig: Die Datei muss unter dcm Namen der HauptkJasse gespeichert werden, im vorliegenden Fall aiso hello.iova. Die Harptklasse cl ass hello ist quasi das Hauptprogmrm, in welchem weiterc Unterklassen definiet werden. Mebr zum Konzept der Klassen im Besor derer und der objektorientieten Programmienrn8 im Allgemeinen elfalren Sie sPäter in Kopitel9. Die ÜbeNetzung e blgt druch pearson@pearson:-$ lavac he11o. i av a Zum Austuhren stel]t man del ausführbaren (lassendatei hello.class den Befehl iava pearson@pearson:-$ Hello l{orld! iava hel I o G.undlägen der Programrnieruns Im Buch werden auch einige Beispiele als lava-Applet realisiert. Diese sind in eirer Brcwserumgeburg laufftlhig ünd bieten Zugriff auf eine Vietzahl von Grafit<bibtiorheken. Zur ErstellutrS eines Hello World-Applets gehetr Sie folgendemaien vor: E Erstellen Sie eine DaIe\ HelloApplet.java mit folgerdem Inhalt: import javä. appl et.*; import java. awt. *, public class HelloAppiet extends Applet { public Hel I oAppt et( ) { Label schriftzug = ney Label("Hello l,Jorld!")i schriftzug. setBackground(Col or. red ); add ( sch ri ftzug ): ] ] E Übe$etzen Sie dieDatei mittels javac HelloApptet.Javä. Erstellen Sie eine HTML-Datei tesr.it ?1mit folgerdem Inhalt: <HTML> <HEAD> <TITLE> Java Hello i{orld! </TITLE> </HEAD) <BODY> <APPLET code="HelloApplet.class" </APPLET> width-400 heisht-200> </BODY> </HTML> Öfftren Sie die Datei tesr.,hfn im Brcwser (>Abbildung 7.S). 3 tuhli. .l.ss H.tto^pplet ert.nt. ADoler I 6 p8lrn HeUoappteto { I tab.l s.hrih/ug = rd Lab€tt.H.tt. {ortd'.}. r§ schriftzus,setBäckqround{color.red);l add(schriftzuq)i I Abbildung 7.5: Java-Applers werden dnekt im Browser ausgefühft. Dadurch könner Jäva-programme in nahear beliebigen systemumqebunqen veMendet werden. 7.1 Erste s(hrifle Die Java Virtual Ma(hine 7.3"7 Deklarative Sprache: prolog proble,ne eisnet sich eine dektaiative spmche wie prolos. Man l:ar :l: T:llT l"q,".ne,Sprachp orescr lr.lrnderharen urüecht, wenn man sie nrtl dazr verwcnden würdc, den Text ,,Hcllo World" auszugeben. Umer progrämmbeispiet in prolog ist daher eine Demonstration der logischen Fähigkeiren dieser Sprache. Betachten Si"ä"r" f"fg""J", r"i.pi"t logische. zusamme rärgc in einer Familie. die mit dem Editor emtelt helloprolog.pl3 abgespeichert werdcr: Frank ist ""äi" "i"". r»*r der Bruder von Christinari sti na ). brude r ( frank, ch schuester(chri sti na. frank) . ist ein Junge, Christina ein üädchen geschl echt(frank,maennt i ch). geschl echt( ch ri sti na, bl i ch) . gr-ank urd Christiratvei srnd Kinde. der Ldnihe. % Frank fami I i e( frant . ki nd ) . stina, ki nd) fami I i e{ chri . Die Ausftihrutrgen hinter den zeichen g dienen lediglich ars Kommentare und werder vorn Interpreter/Compiler isnoriert. Deachten Sie, dass hinterjedem p"rrii.J'.t"L. Befehl Dio Beziehun8etr welden in der proiog-Umgebung näher unte$ucht: "r" Stafien Sie_ ir der Lernumgebrmg den SWI prolog Interpretor durch Eingabe von svripl und laden Sie das Prcgmmm heltoprctlog.pl in der Speiche; mithitfe de" e"i"t f" pearson@pearson:-$ sriDl (MutLi th.eaded. ,7 bils. I:]::l:.:".slI:llgrgs r.l I9q0-2008 Ur.ve-s:Ly of !9!vfis!t 5ril.Pr0toq ""r";r;, version s.6.64) Amsrerddm. comes uifl- ABS0LUT,Ly \O l,{ARRANTY. -, you are v{etcome to redistribute it under This is free soltuäre, certatn *raiti""i.!ld Please visit http://!,/tlll,r.sl,/i -prol og.org tor detail s. 3 UDgtii.klicheMeise venvetrder prolog die gtciche Dateicnduns wie perl. nänlich.Di. Grundlägen d€r Programmierung For help, use ?- ? help(Topic). or ?- apropos(l,lord). consult(helloprolog). X helloprolog complled 0.00 sec, 1,576 bytes true. Nün können Sie die logischen Fähigkeiten von Prolog testen. Die folgetrden AbhaSen geben jeweils Wahrheitswerte aus (true = wahr, false = fatsch). ?- bruder(frdnk,christlna). taue. ? - ?- bruder(klau§,chr{stinä). geschlecht(f rank,fidennlich). true. Interessant wird es, wetrn das System selbst Schlüsse ziehen soll: ?- bruder(X.ch.lstlra). X = frank. ?- geschlecht(chrlstlna,Y). Y = i,eibl ich- Auch komplexere Fragesiellutrgen lassen sich lijsen: ? X X fanllie()(,kind), = frank : = chri sti na. Um die zweite Antwort anzeigen zu lass€n, muss zunächst ein Semikolon hinter die elste Antwo eingegeberwerdeL Sie ktinnen die kogämmierumgebung jederzeit durch Eingabe votr ? halt. pearson@pearson:-$ hält. wieder verlas- 7.4 Entwickleruerkreuge 7.4 Entwicklerwerkzeuge Nachdem Sie nrn mit den grundlegenden Programmierwerkzeugen in Be hrung gekommen sitrd, beleuchtet der folgende Abschdtt einige Hiusmiitel näh rnd gibt Tipps zum effektivetr Arbeiten. 7.4.1 Der Editor Die Eineabe des Qrellcodes erfolgt mithilfe eines Editors. In der Lernumgobung bietet sich der GNOME-Ediior gedit an. Iolgende Funktiotrer des Editors unterstützen dio Arbeit bei der Progrämmierungl r Syntaxhighlighting: Schlüsselwörter der verwendeten Programmie$prache werden farb lich hervorgehoben (>AbbildLn,l 7.6J. Ahbildung 7.6: Die meisten modernen Ediloren beherbeqen eineVlelzahlvon Hilfsmitteln fürden Progßmmierer. Die Schlüsselwörter der gängigen Proqlammiersprachen werden ! e*annt und farblich hetuoßehoben. Automatischff Zeileneinzug: ZuI Stukturienrng von Programmqrellcode wird dieser eingerückt, urn besonderc Elemente wie Schleifen oder VeEweigungen kenntlich zu machen. Das erhöht dic Lesbarkeit des Programms. r Zeileünuümederung: Beim Übersetzen des Progran1ms werden Fehler mit Bezug arü die Zeile im Quelltext. in der der Fehler auftaucht, angezeigt. Daher ist es wichtig, die Zei lennummern im Editor anzeigen zu lassen. Grundlagen der Prog.ämmierung pea rson@pearson :-$ Javac Eüklld. java Euklid. java:9:' ;' expected Eingabe ein - nell,I Eingabe()^ l error Listing 7.2: ln der Kommandozelle werden beim Übers€tzen der P.ogßmrne Fehler urterAnqabe der Zeilennummer ange zeiqt. Dervorlieqende Fehler im Java-Proqramm ist offensichllich: Das den Befehlabschlleßende Semikolon in zeile 9 fehlt. . Copy&Paste: Man glaubt gar nicht, wie viel Code sich rccyceln lässt. Dieser wtud per Copy&Pasic in den Editor eingeftigt bzw' verschoben ul1d kann dort beliebig abgdindert 7.4.2 DieKommandozeile Zrlm Übersetzen der Progmmmqüelliaxte wird der Compi]er von einer Kommandozeile bzw. einem Terminal hemus aufgemfen. Die Kommandozeile in der Lernumgebüng verfigt über zwei trützliche Funktionen, dic die Arboit beim mehrfachen Kompiliercn erleichtern: r Bash-Hisrory: Die L1 l-Taste erlarbt, die letäen eingegebenen Befehle (die History) wie der zum Vo$chein zu britrgen. Das spärt die rochmaiige Eingabe der Befehle zum Kom- r piliercn urd Testen. Autovervollsf:indigen von Befehlen bzw' Dateinamen: Mithilfe der Tabulatortaste lasser sich Dateinamen veNollständigeü. pearson@pearson;-$ java jäva javadoc javac javah Javap java-rmi.cgi JE javal,ls Listing 7.3: Zweifaches Betäligen der Tabulatodaste zeist alle Befehle, die mit der eingegebenen zeicherfolge beg nnen. 7.4.3 Entwicklungsumgebungen , Es gibt eineVielzahlvon Prog.ammierumgebungen, diedas Erstellen von Programmen dadurch erleiahtem, dass sie alle wichtigen werkzeuqe (Editor. Compiler/Linker, Programmaudührung) in eine zentrale oberflä che inteq eren. Derartiqe obertÄchen weden IDE Unteqßted Developnent Enitunnent) qenannf. Im vorliegenden Buch wird die Mehrzall der Prcgftmmbeispiele in Java erstellt. Hiefür bietet sich die IDE Bluel at1, die eigens daftlr konzipiert wnrde, die Progmmmießpmche Java zr erlemen. Ir Lernumgebung finden Sie BIüeJ nach der Installation im Menü Anwen dungen/EntwicHLtng. Blue]. Die Anwendutrg uüd Irctallatiotr vor Bluel wid im , nfioflA austuhrlicher voryestcllt. In der Regel arbeiteü die meisien Progammiercr mit IDES, die auch die einfache Gestaltung von Formr aren ufld dercn Verknüpfung mit Programmcode uüteßtützen. Beliebt für Einsteiger ist im Windows-Bercich yr'su{rl Sfudio, hier imbesondere in l.orm der Progmmmier sprache visual Basic. Das Aquivalent zu Visual Bdsic im Open-source-Bereich heißt Gambos 2. Gambas 2 ist eitre IDE fi die Pmgmmmiersprache Basic, die dic uostaltung von formularbasierten Prcglammlrn erlautrt. 7.4 Enlrivi*leMerlzeuge r = ax bi /r kisa r d€i tusr b; /, tri5e i da' err a = ) h € (r != o); /'Isr r riqrd i r (&n) z, L/, o\t s€&r a6 ,/ Abbildung 7.7: Di€ Java Lernumgebung Bluel istbesondeßfür Einsteiqergut geeigner. Editor, compilerund Programnrausführung sind ausdem Hauptprogramm herauszugänqlich.Auch ein syrnbolis.her Debugger ist im Paketenthalten. .se.rnfo('krb Abbildung 7,8: rorld r., .ox. ) Grafische lDEs erlauben das Genalten von Formularen und [4eiür die an die optik des Betr]ebssyn€ms anqepasstsind. Gambas 2 ist unt€r Llnux elre freie Alte.nat ve zu /lila/raizunter Vlicrosoft Windows. Grundlag€n d€r Progranmierung Datentypen 7.5 Der fblgende Absch tt führt anhard konkreter Beispiele in die Kunst der Proganmierung ein. Die wichiigsten Programmsimkturcn werden erläuteft, nebenbei wird eine Einllibrutrg in die Pmgmmmiersprache Java gegeben. Dio Beispiele setzer vomus, dass Sie in dor Lage sind, einen vorgegebenen lava Queilcode zu übe$etzen ünd zu tesien. Das kann z.B. in der Lemrmgebung Bluel erfolgen. Die Installatior und dje Verwendüng von Blue] in unterschiedlichen Betriebssystemumgebulgen werdeo im An irong erläutet. 7.5.1 ElementareDatentypen vor Daten vorlie8en. Die elementaren Datontypen der Progmmmießprache Java sind in >Tabelle 7.1 zusämmengefasst Dater iypen beschreiber Bereiche, die die Variable abdecken kann. Der Computer veraüeitet Informatioren, die in FoIm boolean äussage -- truei -128 bis 127 short -32.168 bis 32.167 lnt -217bis212 '2e Zeichen r,:,. lnt = 5, short mittel int = 32000: int g.oss lnt = 123456t byte k:leln byte 1 long ri esig-'i nt = 123456789i bis 2@-1 float float -t,40338 bis 3,40318 doubile -1,7973&bis 1,797308 double gooqol = char - alle,Unicode Zeichen dezimal =7.145; char zeichen - 1e100i i,A', Die elementaren Dätentypen der Programmießprdche ldva. Das Beispie zeist jeweils eine lonkrete Wert0u. rJwei5ung einer VanäblFn. Dl" S(hraibwFise 1e I 00 entsprid t nd(h wis5e1\haftl:, hel Notanon 1 0 Iabell€ 7.1: Eine Vadable ist nichts anderes als ein Behälter fi Zahlenwerte oder anderc Datentypen. In diesen Beh:ilter kantr man beliebige Inhalte, dje jm Bereich des dekladerten Typs liegcn, hireirtun und auch wiede.r herausnehmen und/oder durch ardore Inhalte ersetzen. Das folgende Java-Codebeispiel zeigt dcn Umgang mit eidgen ir der Tabelle aulgeftihnen Variablen. cl ass VarTypen { public static void nain(String args[]) { booleän aussage = true; long riesig int = 123456749t double googol = 1e100; System.out.println("llert von aussage = " + aussage); System.out.println("I{ert von riesig int = " + riesig int): Systen.out.println("l,lert von gooqol = " + googol): inta=3; intb=5; System.out.println("a + b System.out.println("a - b Listing 7.4: Java Codebeispiel zu variab en -"+ -"+ (a+b) ) (a b) : ): floai x = 3; float y = 7; Systefi.out.println("x / y =' + (x./y))' double pi = 3.14159: r = 5; System.out.println("KreisfIäche: " + (pi*r*r) ) ' double ] Listing 7.4: lava Codebeispie zu Varablen (Fons.) Das Ergebnis der Berechnung sicht folgendermaßen aus: llert von aussage = true l{ert von riesig int = 123456789 |lert von googol = 1.0E100 a+b=8 a b = '2 \/y:0.42851143 Kreisfläche :18.53915 lnr Codcbcispiel findet man schon eirige Rechrungen. Diesc vcrwenden die Opernioren + (Additionl, - (Subiraktiot), * (Multiplikation) und 1 @ivisionl. Für mathematisch anspmchsvollere Funktionen benötjgi man cine Bibliothek. die diese Funktionen zr1l Vertugurg stellt. Diese wird ir einer der nächstcn Übungen vorgestellt. 7.5.2 SpezielleDatentypen Mit den in Tabelle 7.1 aufgeftihrten DatentypeD lassen sich z\,var schon f.iele Programmier aufgaben löseni fiir maüche Aufgabon wünscht mar sich allerdings speziellere Variablcntvpen. Beliebt ist hier der Va ableütyp dcr Zeiche*ette (eng].r Sfri.l8), die in Iava durch cinc eigere Klasse zrll Vertugulrg gestellt wird. Dic A vendung der StrinS-Klasse zeigt das folgcnde Beispiel: class StringTest { public static void mar'n(String ärgs[]){ String objekt : "oer Apfel"; String farbe = "rot": ] ] system.out.println(objekt + " ist r'+ farbe); Sbings können sDmit über das + Zeichen zusanmengetugt werder. 7.5.3 Ein- und Ausgabeklasse. ehe einfache Möglichkeii, oinem Iava Pro gralrm Zahlen r.on einem Benutzer zu übcrgcben, die zul weiteren Bercchnung verü'endet werden. Dazu rvird die Klasse Elngabe.class verwendet, die im Begleitlüalerial erthalten ist. Sie firden die im Buch besprochenen Programmbcispiole in FoIm von Blucl-Projekten auf der BeBIait-DVD bzw. dirckt in der virtuellen Lernumgebung im Ordner ueüunger, v81. Anhdrl9. Gemäß dem nvA-Prinzip wünscht man sich crundlägen der Progiammierung E$telletr Sie ein Progralnm, das zu den gegebenen drei Seitedängen a, b und c eines Quaders dessen Volumer V, die oberfläche o und die Länse d einer Raumdiagonale I H]nn eis: Es gelien folgende lormeln: QuadervolumenrV = a D'c o - 2.(o-b I Qxadercberßäcbe: Raumdiasonare: d=ü' o-, b-,) + ö' + c' tÖSUNG 01 import java.math.* i 02 03 pub'lic cl ass ouader 04{ 05 06{ 07 08 09 10 11 12 13 T4 15 16 17 i8 19 20 21 22 23j 24j publlc stätic void main (Siring argsl]) double ä, b, c: Eingabe ab: c: ein = new EinSabeo; ein.readDouble("Käntenlänge ein.readDouble("Kantenlänge ein.reädDouble("Käntenlänge a: "); b: "); c: "); double V = a*b+c. double 0 = 2*(ä*b+a*c+b*c). doubl e d: Math.sqrt(ä*a+b*b+c*c); System.out.println("Volumen-"+V); System.out.println("oberfläche-"+0); System.out.println(" Raumdiagonale: " + d): Listing 7.5: Berechnunqen an einem Quader 7.5 Dätentypen Die Ein-/Ausgabe des Programms sieht folgendermaßen aus: Kantenlänge a: 12 Kantenl änge b: 5 Kantenlänge c: 6 Volunen - 360.0 oberfläche = 324.0 Raundi agonal e= 14.3'J.182106327 6353 Erläuterung des Listings r In Zeile 1 wird die zuI Bercchnutrg der Wurzel notwendige mathematische Klassenbibliothek java.math. * irnpo iert. r In Zeile 3 wird die Hauptklasse Quader definiert. ! In Zeile 5 wid die Iür eir eigeNt:irdig laufEliges KoNolenprogmmm notwcndige void main eirgeleitet. I Die Vdriable ein wird in Zeile I aüs der Eingabeklasse (Einsabe.ctass) abgeleiter. Diese Klasse gestattet die vereinfachte Eingabe von Zahlen und Zeichen. Sie finden sie im Begleitmateriä] aüf der DVD. r In den Zeilen 11bis 13 werdetr die Kantenlängen des Qrädeß einSelesen. r Die Berechnun8 von Volumen, Oberfläche und Raumdiagonale erfolgt ir den Zeilen 15 bis 17. Dort wird die Wurzelfu*tiotr Math.sqrt aus der mathematischen Biblio- thek verwendet. I In den Zeiletr 1S bis 21 werder die bemchneten Werte schließlich ausgegeben. Dem Listing sind einige r r stukturclle Besonderheiten von Java zu errnehmenl Befehle werden mit einem Sem*o/on abgeschlossen. Logische Blöcke wie z.B. Klassen werden mil geschweiften Klammerr eingeschlossen. a &oß und Kleinschrcibuns wird in Iava ,teßciieden. crundlagen der Programnierury 7.6 Programmstrukturen ZuI übersichtlichen, siruktulierten Darstellung von Algorithmen oder Handlungsabläufen verwendet man in der Inlomatik Nossi Shneideman-DiaBromme. die nach ihren Erfindem ISAAC NASSI und BEN SI$iEIDERMAN benannt wurden, Diese werden auch Sfullogmmme genannt. Ein Stuktogramm setzt das Top_down_Pmgmmmierparadigma gmfisch um. Ein Beispiel zeigt >Abbildung 7.9 Därin wird die Handlungsfolge zum Flicken eines Fahrradschlauchs formuliert. Fehmdschlätrch flicken 7.9: Auch a hägliche Handlungen kann man in Struktogrammform formulieren. lm vorliegenden Struk' zum Flicken eines Fahrrad*Lalchs sind bereits alle Elemente zufinden, die rnan auch in der Proglamml._ togramrn rung benötigt:die Vetzweigung, die Schleile und dieAnweisung bzw. dle tolge von Anwehungen abbildu.g Ein Programmablaufplän (PAP) ist äInlich wie eiIl Nassi"Shneideman-Diagranm die Bralische Daßtellung des Ablaufs eines Computerprogramms. hn Gegensatz zum SbuktogarDm wfud der Fluss des Progmmrns nicht durch aneinandergrenzende Blöcke, sondem durch Verbindungslinietr, die zwischen S,'mbolen verlaufsn, h€€estellt. Das folgende Beispiel zeigt eitren PAP zu eitrem Proeramm, das alle Quadratzahletr von 1 bis 100 ausgibt. abbildüng 7.10: Der Programmablauhlan zeigt ein Prograrnm, das alle QuadraEahlen von 1 bis 100 ausqibt. Die einzelnen Knotenpunkte werden äbhängig von deren runktion mit qenormten Symbolen dargestellt Für Ein_ und Austritßpirntte des Algorithmus vemendet man abgerundete Rerhteck€. Anweisungen sowie Ein' und Aurgaben \,!erden in Rechteckform dargestellt veEweigunqen haben die Fofin einer Raute. Diese wen;gen Symbole genügen, um beispielsweise äuch Schleifen dal?ustellen. F om als Aktivitötsdiaganme bei objektodentierer Pro$anrmieränsätzen, die in UML fomuliert weden, v€rwendet. Ein PAP g6hört zUI I(asse der cmplen (vCl. (opifel 9): Die Slmbole heißen trnoten, die Verbindungslinier (dnten. Programmablau{pläne werder in abgewandelter Grundlagen der Programmierüng strktuellen Elemente, die man zur Programmi€nrng beliebiSer Fmgestellungen benötigt, sind übeßchaubar. Sie lasser sich in dmi Hauptlategorieo einteilenl Die I r I Anweisung bzw. Anweisungsfolge Verzweigung wiederholung,Schleife Nachfolgend werden die wichtigsten Programmstrrkturcn besprochen. Dabei wird der allgemeinen Beschrcibungsform in FDrm eines Nassi-Shneiderman-Diagmmms der Iav.-Code eines speziellen Boispiels gegenübergestellt. 7.6.1 Anweisungsfolge zmirdest ir Teilen linear aufgebaut: Durch eire Folse von einzcl werden Eingabedaten in Ausgabedaten überführt. Das zugehörige srnrLnen Rechenschdtten togammelemant eines Anweisrngsblocks hat folgende Gestalt: Viele Atgorithmen sind Anweisungsblock Abbildung 7.1t: I!4ehrere Anweisunqen bilden einen Anweislnqsblock. Programmbeispiel Beispiel ftir einen liredren Algorithmus ist Listing 7.5 zu Bercchnungen am Quader. Das Pro$amm besteht rr aus einer Abfoige von Anweisutrgen. 7.6.2 Verzweigungen ComputerproNicht nur das Leber verlangt von Zeit zu Zeit nach nntscheidungen: ^uch genannt wer gramme müssen zrweilon Entscheidun8en heffen, die hier Verzweigunger den. Man üterscheidet einsejtige, zweiseitige und mehrfache Verzweigrngen. Die Darstel lung dicser Elemente in Struktogrammform zeigt >Abbildung 7.12 7.6 Progr.mmstruhuren Abbildung 7.12: Einseitige und zweiseitige Auswahl im Sirukogramm. Das %'Zeichen besagt dass im zugefiörigeo Zweig kein Befehl ausgefühft wnd. Progl,,om,,beispiel Eine quadratische Gleichug hat die Form or' + äx + c = 0. Die LösUnCetr der quadratischer Gleichung h:hgen von der sogenannten Dislailninanten D ab, die sich nach der Formel D = b' a a c berechnet. In Abhängigkeit von D erhält man lolgende Läsungen: D > 0: Mao erhäll _^-'tD z$ei Lösunp.n: D = 0: Mar erhält eille j-ösunp r- b JD ,t.',lo b - --:-l-L 2a - --2'a D < 0: Die Gleichung ist nicht lösbar. Zur Verdeutlichurg ein Zä] enbeispiel: Die quadratische Gleichutrg 2x' + 8x+ 6 =o hat di€ Diskrimimnte D = a'z - 4. 2. 6 = 1,6. Die Diskdminante D ist größff als null, die Gleichung hat somii zwei Lösrngen: x,: Das Shul(toglän1m -8 +.,[6 ='1. 2.2 x,: -8-ü6 2.2 zlrl Lösung einer quadratischen Gleichung zeigt >Abbildung 7.13. Quadratische Gleichung Abbildung 7.13: Süuhoqlamm zum Lösen einer q uadratische n Gleichunq Grundlagen der Progrämmieruns Das obige Shuktogramm lässt sich umittelbär in ein Java-ProBramn umsetzer: 01 import j ava.math.*; a2 03 publ ic class Quadcl 04{ 05 06{ 07 08 09 10 11 12 13 14 15 16 17 18 l9 20 2tj 22 23 24 25 26j 27 28\ 29j 30] publlc static void maln (String args[]) Listing 7.5: double a, double D, Eingabe b, c; /* Paraneter der Gleichung */ xl, ein = x2- /* Hilfsvariäblen */ new Eingabe(): a= eln.reädDouble("a: "): b: e1n.reädDouble("b: "); c - er'n.readDouble("c: "): D rf = b*b-4*a*c. ) 0){ x1 = (-b + Math.sqrt(D))/(2*a): x2 = (-b - Math.sqrt(D))/(2*a); System.out.prlntln(" Z$ei Lösungen: x1 (D ="+x1 +", x2=" +xz)i else{ if (D - 0){ xl = b/(2*a) i System.out.println(" Elne Lösunq: x1 = " + x1): else System.out.println("Es gibt keine Lösung"); Lösen einer quadratischen Glelchung: DieveEweigungen wurden fen markiert. Beachten Sie, dass sich alle Blöcke innerhalb einer venwelgung in geschweiften Klammern befinden. Der Ten, ob D einem doppelten Gleichheitszeichen (==). = 0 ist edolgt in Zeile 23 mit Testen von Algorithmen und Programmen 7.6 Prcgrammstrukturen Grundlasen der Programnieruq 7.5.3 Mehrfächauswahl Möchte man, basieiend auf einem Veüw€iSungskriterium, mehl als zwei Verzweigrngen itr eitrem PIogIaffIn reälisieren, so bietei sich die Me.hdoc}auswail an. Das zugehödge Shüktogmmmelemetrt zeigt >Abbildung 7.15. Abbildung 7.15: ln einer Mehrfachauswahl wird zwischen meh als zwei Alternativen gewählt. GenÜgt der Ausdruck kei nerdervorqeqebenenBedinsunqen,sownddieAlternativanweisunq(imvorlieqendenFalL:sonstiserWert)ausgefühn. Programmbeispie) Das folgende Listitrg zeigt die Umsetzung einer Mebrfachauswal üithille des svri tch-Konstrukts. Dabei wid ein Wochentag ar1hand einer vom Benutzer eirgegebenen Zahl elmittelt. publ i { c cl ass SuitchTest public static void maln (Strlng args[]) t int tag int: Eingabe ein - neu Eingabe(); System.out.println("Geben Sie einen l,Jochentag als zahl einl"); tag int - ein.readlnt("}{ochentag (1-7): "): sl.,i tch (taq i nt) { case 1: System. out. pri ntl n( "Montag" ); breäk; cäse 2: Systen. out. pri ntl n( "Di enstag" ): break: cäse 3: Sys Lem. ou L. pri System. out. pri n L ln ( "M ntl n ( il luoch" ); "Donnerstä9" b-eal,; ); break; 7.5 Progrämmstrukruren 5: System. out. pri ntl n( 6: "Frei tag" ); break; System.out. pri ntl n( "Samstag" defa ul t: System.out.println("Sonntag") Systen. out. prl ntl ) ] n ( "Die ); break; ; brea Eingabe ist k; fal sch. "); ] Listing 7.7: Programmbeispiel air svitch Anweisung Seitre eigendiche LeistungsfüLigkeit zeigt eirl Computer bei der stupiden Wiederholung st:in, dig wiederkehrcnder Arweisungsfolgen. Im Compute{argon werden derarrige wiederholurgen ScilerFe-n genannt. Die drei Grund§?en del Schleile werden nachJolgend besprochen. 7.6.4 Gezählte Wiederholung Eine gezählte Wiederholung läuft nach dff im folgenden Stl,uktogla]nm beschriebenen Abhildung 7.r6: cezählte Wiederholung Ein klassisches Beispiel zur gez:ihlten Wiederholury lieferre der g-rährige CAnr FREDRTCE GAUssr Dessen Mathematiklehrer gab der Klasse die Al gabe, die Surllme aller Zailen von 1 bis 100 zu bilden. Kaum war die Aufgabe fomuliert, hatte caüß die Suntrrc schor bercchnet: Er hatle auf die Schnelle eine Fomel zuI Surnmation der Zal etr im Kopf entwickelt, mit der sich das hoblem im Hmdumdrehen lösen ließ. Der Computerbesitzt fteilich derlei menschliche KombinationsBabe nicht, sodass man hier eine Schleife zul Bewältigung des Problems verwendet. Das folgetrde Beispiel enthält eine etwas allg€meiner formulierte Aufgabenstellung. 201 Grundlagen der Progrämmierung Scheiben Sie ein Prc$aInm, das alle nadülichen Zallen von 1 beginnend bis zu eher voBegebenen Za}l n suInmiefi. Eine deErtige Sulrme nennt man aüch fendlicleJ _Rer'he tÖ5UNG Die folgende Abbildung zeigt das zurn Prcblem gehiiriSe Strrktogramm Abbildung 7.17: Die Summation einer endlichen Reihe zeigt einige q'plsche Progrämmiertechniken' Dle Hlfsvärlable um den summe wiä zunächst auf nullgesetzt (lnitiällsien). Beijedem Schleifendurchlaufwird der lnhaltvon sunme akiuellen Wet der Schleifenzählväriablen erhöht. Beachten Sie die vadablenzuweisung sunme - summe + i: Als maihematische Aüssage nicht brauchbar (Beispieli 5 = 5 + 2 ist eire falsche Aussage), ist eln derartiges Konstrukt typisch tur eine Pro$ammiemnweisüng: Der Inhalt der Vadablen, der auf der linken Seite steht, wird mit dem Eryebnis der Anweisr'rng auf der rechten Seite übeßchriebell Die Umsetzung in Iava-Code zei8t folgendes Listing: 01 public cl ass endlSunme a2 I 03 public static void main (String args[]) 04{ 05 06 07 wl rd: " 08 Eingabe ein = new Eingabe(), System.out.println("Geben Sie die Zahl ); 09 10 11 12 ein' bis zu welcher sunmieri; int r = ein.reaolrL("Zal^l 1r "): int summe = 0: for (int i=1i i<=n: i=i+l) summe: summe + i; System.out.println("Die Reihe hat den l'{ert: "+ i3 summe): 14 1s 16 ] ) Listing 7.8: Umsetzung der Berechnung einer endlichen Reih€ t - a 7.5 Prcglammstrukturen E rl äute ru n I d e s Li stings In Zeile 8 wird die ZaIl eingelesen, bis zu der summiet werder soll. Itr Zeil€ 10 wird die Hillsvariable summe zunächst auf null Sesetzt. In dieser werden dann die Werre, die sich durch den Schleifendurchlauf ergeben, aufsummiert. Die eigentliche for-schleife in Zeile 11 hat folgende Bedeutung: Die Schleife wtud über die Zählvadable i (int i ) so lange hochgezäh]t, wie der We von i kleitrer oder gleich n ist (i<-nl. Vor Schitt zu Schitt wird der We votr i um einen Zäh1er erhijht (i = j +11. Den letzretr Befehl hätte man auch küEer ir Form von i+ schreiben können. Mehr zu dieser verkitztetr Schrcibweise firden Sie im weitercn Verlauf des Kapitels. 7.6.5 S(hleifemitEinstiegsbedingung Nicht atte Probleme der lnfomatik lassen sich mit einfach strukturierten, gezählten Wiederholungen lösen. Viele Algoridmen verlangen nach Schleifen, deren Fortsetzung von komplexen Bedingungen abhängen. Eine Schleife mit explizit formulierter Einstiegsbedingung zeigt >Abbildung 7.18. Abbildüng 7.r8: Schleife mit Elnniegsbedingung Zu beachten ist, dass eine Schleife mit Einstiegsbedingung im Extremfall gar nicht durchlau, fen wird, und zwar genau daIln, wenn die Schleifenbedingurg vor dem allereßten Durchlauf nicht ertullt ist. Ein typisches Beispiel tur eine Schleife mit Einstiegsbedingung finden Sie in der lolgenden ü]bung. c.undlägen der Programnierung Erstelen Sie ein Plograrnm, das zu einem vorgegeberen Ziftsatz und einem vorgegebenen Kapital die Zeitspanne bercchnet, nach der sich das Kapital verdoppelt hat. Stellen Sie auch die zeitliche Ertwicklung des Kapitais (sinnvoll gerundet) där. tö5UNG Der Kem des Strüldograrrms ist eine Schleile mit Eitrtittsbedingung (>Abbildung 7.1e1. Abbildung 7.19: Um die zeitliche Entwicklung des Kapitals mit dern Anfangskapital verglei.hen ,u können, wird dievariablestartkapitaleingeführt.DieabgelaufeneZeitwirdinderVariableniahrsespekhed.Feirheilen wiedie Rundung des Kapitälwens für die ausqabe werden irn Struktogramm noch nicht berücksichtlgt. Die Umsetzung des Struktogmmms in Progmmmcode zeigt das folgetrde Listing. 01 import jäva.mäth.*; 02 03 public class kapi tal 04t 05 public statlc vo'ld naln (String args[]) 06{ 07 Eingabe ein: nev{ Eingabe(); 08 double zinseni 09 double k gerundet; 10 11 12 13 14 15 double startkapital :ein.readDouble("Startkapital: ")i double zinssatz - ein.readDouble("Zinssatz in Prozent: "): double käpiial = startkapital; int Jahr = 0; 7,6 Proqrammstrukturen khile (kapital <- 2*startkapital){ 16 17 18 zinsen = kapital 20 l,le zinssatz / 100; jahr=Jahr+1; 19 2l * kapitäl = kapitai + zinsen; rt " k gerundel = Math, ri nt( kapiial *100) /100; Systen.out.println("Nach "+jähr +" Jahren hat das (apitäl +k gerundet); ] 22 23 24 verdoppel den System.out.println("Das Kapltal hat sich nach t."): " +jahr +" Jahren 25 26j ] Proqramm zu Käpitalverdopplunq: Gibt der Benutzer den Zinssau direkl in Prczent ein, so muss der Programmcode für die richtige Umwandlung sorgen (zeile l7). Das Runden auf zwei Nächkommastellen übernimmt Listing 7.9: der Befehl Math. rlnt in zelle 20. Dort wird eine lnteger Rundungsfunktion äus der mathematischen Bibliothek 7.6.6 Schleife mit Ausstiegsbedingung Eine Schleife mit Austittsbedingung wird mindestens einmal dumhlaul'en. Das zusehörise Struktogrammelement zeigt >Abbildung 7.20. Abbildüng 7.20: Schleife mit Ausstiegsbedingung Die Schleife mit Ausstiegsbedingung wid z.B. darln eitrgesetzt. wetrn ein Programmsegment bis zur Eingabe eines speziellen Zeichens duchlaufen werden sDll. Typisch dafür ist die lbtgeseizte Berechnune von Funktionswerten. 6rundlagen der Progrämmierung Ir der Stochastik/Kombinato k spielt die sogenannie Fakultätstunktion eire wichtiBc Rolle. Diese ist ü.ie lolgt definiert: nr= 1.2.3. ...n = fli Dazr ein Beispiel: 4 verschiedene Personen sollen sich auf 4 Stühle setzen. Um die Anzahl der Verteilungsmöglichkeiten zu berechnen, geht man folgendermaßen vor: Die eßte Person kann aus 4 Stühlen wählen, die zweite Person aut noch aus 3 usw. Die Gesamtanzahj der Kombinationsmöglichkeiten Personen/Stühle w:ire dann ist eitr Programm, das die Fakuttätstunktion zu voryegebenen natrtlichen Zahlen fortlaufend berechnet, bis der Anwender die Zahl 0 eingibt. Die Berechnung der Fakultät soll in einem Unterprogamm erfolgen. Gesucht Eingabeschleife Fakulkit Abbildung 7.21: Struktogßmm zur Bercchnunq der Fakultätsfunktion. Das Hauptprcgramm übernimmt die Eigabq da5 Unt€rprogramm dle egentllche Berechnung der Funhion. lm UnteQrogramm erfolgt die Berechnung der Faku tät iteratv unterVerwendung der Hilisvariablen fak. Die Umsetzurg in Java-Code zeigt Listing 7.10. 01 import java.math. *; 02 03 public cl ass fakult 04t 05 public static void main (String args[]) 06t 07 Eingabe ein = nelv Eingabe( ); 08 int n: 09 10 do{ 7.6 Prcqämmstrukturen n: ei n. readlnt( "n: "): +n System. out. pri ntl n( "Fakul whil e (n !=0): System. out. pri ntln( "Programm beendet. 11 72 13 14 15 16 11 18 19 20 21 22 tät(" ] ] // "+fakultaet(n)): lJnterprogram zur Berechnung der Fakultät fakul taet( i nt n){ long fak=1i for( i nt i=2r i<=n; ++i) static long fak *= 1; return fak; // \erkützt 23j Berechnung der Fakultätsfunhion. Die eigentliche Funktionsbercchnung erfolgt in Form einer routine ab Zeile 17. ln Zeile 20 wid ein neues Programmierel€ment verwendel:die opeGtion *=. Listing 7.10: Verkürzte Schreibweise Urter Gr!ndlagen der Progrämmierung I Zum Weiterarbeiten ! a Analysieren Sie folgendes Listing und erläutern sie, was ausgegeben wird: publ ic c'lass Praefix_Postfix { a public static void majn(String[] args) [ int i; i+; i--; - Systen. out. pri ntl n( i ); ntl n( i++) I (ysren.our.pr'ntlr Lri i:,/ ! System. out. pri ] ] I 2 U s A M lul E N A s U tu G I Vor der eigetrtlichen Programmierung mlrss oin informatisches Problem zunächsi ,llukrl-lPI prldc.l und io pinFn Algorilhrnu\ urntesprzt \aerden. tse,:rt..I Pronlcmen, die sich mit eiüem Computer lösen lassen, gilt das lung - Ausgab€ Il,.,lz EVAJ. P nzip EiDgabe - Verarbei Programmie$prachetr werden in folgenden Hauptkat€gorien ein€eteitt: - Systemorienlierte Sprachen: Dazu zaihlcn Assembler und Maschilensprache. - Prcblemorietrtierte Sprachen: Es wird zwischen imperativen (2.8. C, C++, PASCAL) und deklarariven Spmcher (2.B. LlSe PROLOG) Lutemchieder. Die Umsetzung des Progranrn1codes in naschireninterpretie$arcn Codc erfolgt duch einen Interpr€ter oder cinen Cotrlpiler. Der lnterpmter wandelt die Prc gran1mbefbhlc zur Laufzeit um, der Compiler übersetzt das komplette Prograrnm zu oiner ausfülubarcn tsinärdatei. Ein kompiliertes Prog.amm drbeitet nr der Regel suhlleller al. e:n inrarp criedFi Pro$a,nr.. Zllnr Tost einer nenen Programmieruagebung erstellt man ein Programm, anhand doc..n,l;c pinzpl AD Arh.i15{ hr; e /u PrDB,dm,ni, runB gel,rüh,n"rd"n. Die" i"t'.n der Regel das Programm Hello Wortd. We\cnrlnhFWprk,,.LlieturEoh{irU"r"i1dd.rEditor,,,m, Crsr-llpndps P,ogrJnlrncodes, der Interprcter bz$,. Compiler,4,inker zrrm ÜDersetze Erstellen des Maschinencodes sowie der Debugger zum Testetr des Programms. Oft findet man alle Werkzeuge vereint in einer integrieder Entwicklungsümgebune (ID[) 1.or.