Grundlagen der Programmierung

Werbung
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.
Herunterladen