Harald Nahrstedt
C++ fUr Ingenieure
Grundlagen Maschinenbau
Lehrsystem Technische Mechanik mit lehrbuch, Aufgabensammlung, losungsbuch sowie Formeln und Tabellen von A. Boge und W. Sch lemmer Handbuch Maschinenbau herausgegeben von A. Sage Elektrotechnik fflr Maschinenbauer von R. Busch Technische Berichte von H. Hering und L. Hering
Englisch fUr Maschinenbauer von A. Jayendran Excel+VBA fUr Maschinenbauer von H. Nahr stedt
lehrwerk Roloff/Matek Maschinenelemente von H. Wittel, O. Muhs, D. Jannasch und J. VoBiek Praktische Regelungstechnik von W. Schneide r Werkstoffkunde
von W. WeiBbach
www.viewegteubner.de
----.
Harald Nahrstedt
C++ fur
Ingenieure Effizient Programmieren erlernen Mit 157 Abbildungen und 70 Tabelien
STU DIUM
VIEWEG+ TEUBNER
Bibliogralische Information der Deutschen Nat ionalbibhothek Die Deutsche Nationalbibliothek verzeichnet diese Publikancn in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet fiber
abnrtbar.
1. Aullage 2009 Aile Rechte vorbehalten C Vieweg+Teubner I GWV Fachverlage GmbH, Wiesbaden 2009 Lektorat: Thomas Zipsner I rmke Zander Vieweg+Teubner ist Teil der Fachvenagsgruppe Springer Science-Business Media. www.viewegteubner.de Das Werk eeschuesuch aller seiner Iaila lst urheberrechtlich geschctzt. jede Verwer tung auRerhalb der eogen Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung des Verlags unzuliissig und stralbar. Das gill insbesondere tur Vervielfaltigungen, Obersetzungen, Mikroverfil mungen und die Einspeicherung und Verarbeitung in etekrrcnec nen Systemen. Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Werk berechtigt euch chna besondere Kennzeichnung nicht zu der Annahme, dass sclcha Namen im Sinna der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betracbten waren und daher von jedermann benutzt werden ournen. Umschlaggestaltung: Kunkell opka Medienentwicklung, Heidelberg Technische Redaknon: Stefan Kreickenbaum, Wiesbaden Druck und buchbinderische verarbeirung: Krips b.v., Meppel Gedruckt auf siiurefreiem und chlorfrei gebleichtem Papier. Printed in the Netherlands ISBN 978-3-8348-0464-8
v
Vorwort lVaru", dieses Such Die erfofgrciche Hcrausgabc cines Buches fiber Excel und VBA mit dcr Kopp lung von Lchrsroff und Anwcndungs beispiclen aus dcm lngcnicurbcreich und "ide crfrculiche Zuschri llcn waren d..' f MOlor zur IiM d lung dieses lJuc hes. Auc h h i..... soli,," sowohl d cm Ing cn ic urst ud..'Tll...n als auc h dcm praktL.ic...~nden Ingc nseur Wq!c und MOglichkcilC'D der Entwicklu ng eigener Progra mm e ge.. eigt werden. Dabc i gche ich bewussl iiber einfacbe Slrukturen mcju hinaus. Ich halle einfache Programme fUr cine solide na si" eigencr Prop"am menl w id .lung und cinfache Anwendungsbeispie le Iur cine J?Ule Gnmdlage fU r cig ..m e Tests , Ich habe vcrsuch t, auf die elegaraen Tricks in C+-+ LU verzictnen, die sich bei nae nsiver Nutzung und d""01 weneren Stud iurn "on selbst einstejlen. Auf meiner Website werde ich im weitercn Vcrlauf ergsnlmd..- I lilfen und Themen emstenen
Ili/fen
Zur Ers tclhmg do...... Programme babe ich ein EntwickhmgswerkJ'ctlg von Bloodshed Software (hn p·lIwww .bloodshe d.pct)benutzt. Esisl eine Free Software Foundation und ihre Entwicklungsumgebung enthill &'11 GNU Compiler. dL'I" zur freicn Nutzung auch in viclen andcren Emwicklungsumgcbc ngen zu li nden ist . w egen der Scbnctllebigkeit in diesem Bereich verweise ich an dicser Stdle ebenfalls auf meine Website (sjche uetem. in der ich weirere Hinweise einsrellen werdc . Dort lindo.'t dcr Lese r aoch dL'1I Quellte\t &'1" Programme aus diescm Bueh.
Zum ."ul nau Die aufgcfhhrtcn Bcr eiche ems prcchcn der chronologischen Entwicklung de... Progra rnmier ung. Anhand emfachcr Modcllc versuchc ich dL'1I LeS'-'I" flrr C ++;[Ubegcistem, da s durch seine ein fache GestahWlg und kom ple xcn Ml'lg lichleih:Tl bcsticht. Die Kapitel der mod ularen und prozeduralcn Progra mmi crung babe ich kurz gcfusst, III Gunsten mreressan rcr Anwendengsbeispiele. Zum Thema objek toriemiene Programmierung habc ich d;..flrr ctwas mchr ein fhhrendcn Text verwcndct . Ieh hoffc. dass der Leser ausre ichcnd und meuvicn dcm Theme folgcn kann. 1m lctztcn Kapitcl zur gcnc rischcn Prograrnmicrung gcbc ich cincn kurzcn liinblick in zuknnffigc Bctrachnm gen und Anwcndungen. Die eiwclnen Kapitcl bcginnen mil emcm rheorcrischcn Teil zum Thema C ++ und cndcn m etst mit cmcm Anwc ndungs bcispicl. Die A nwL"Tl dunl,~he ispiele greifc n das Them a dann auf und'odcr dicncn als Vorlage zur Umsctz ung des Gelemten. J)l1nksagli nK
Ieh bcdankc mich bci all dcncn im Hause Vicwcg e'Teubncr, die stcts irn llimcrgrund wirkcnd. zum Gc ling-en dicscs Huchcs bcigcuagcn habcn. Ein bc, ondere r Dank gilt meinem Leklor T homas Z ipsner, der mir in lr eulldschlllilichcr Verbunden heit geduldig mil vielen wichligen lind ri\'hligen Kalschlagen half. den Itir den Leser hesten Weg ein/uhalten. Seine Erfahrllngen ai, Chellel tor des Lo:klorals Teehnik waren Hlr rnich sehr hilli"eich. [)lll1 ken mochte ich auBerdem ltllen Kolleginnen und Kollegcn der I' imla seneos Gmhll , Kl'll n. die llir mich cine hcrulliehe !l eima t hcdeutcl. Es isl immer wiedcr cine Frcude in einem Tcam engltgk'l1cr lngenicure an dcr Losllng technisc hcr Problemc lei lzuhabcll_Bci allcm lo rtsehri" lichen Slrehcn slchl hk'f der nL'lle und menso: hliehc Umgang an erstl'f Stelle und iSI damit die Ba, i, des Erlo lgs. An den Leser
Dieses Uuch soll ilueh Lum Dialog zwischen Aulor Wld Leser alilTordern . Daher linden Sic sowohl auf der lIomepage des Vcrla~"S www vjcwegleu hncr,de als auch au f der lI omepage des Aulon www baraldnahrslclll.de c in f orum Hir erglin/ende Programme. Anregt Ulgen. Kezcnsioncn und Kommcnlarc. Mohnesce, f ebruar 2009
lIarald Nabrstcdl
VI
Inhaltsverzeichnis Grun d lag{"n d er Progr ammierung 1.1 Emwickl ung 1.2 Grundstrukturen 1.3 Datentypen, Variable und Konsrame I A Operatoeen und Ausdracke 1.5 Anweisungen 1.6 Fe lder 1.7 Zeiger auf Datentypen 1.8 Zeic be nkeuen
1
J
9 19 31 48 58 67 77
2
Prozed urate Progra mmieru ng 2.1 Der \ Ve-g zu Losung 2.2 Funktionen 2.3 Parameter 2.4 Deklarationen und Gult igkeusbereiche 2.5 Zeiger auf Funktionen 2.6 Callback-Funktion en
87 87 93 106 117 132 141
3
:\Iod ulare Pr earammfcrung 3. 1 :\..todule 3.2 Srrukturen 3.3 Verbu nde 3.4 Zeiger au f Strukturen 3.5 Verken ete Listen 3.6 Dynamische Speicherung
149 149 158 168 178 189 20 1
4 O bjekterten ne r te Pro grammicrung 4 . 1 Der Weg zum Obj ekt 4.2 Objekte und Klassen 4.3 Spez ielle Obj ekte und Met hoden 4.4 Klassenhierarchie lind Vererbung 4 .5 Virtuelle Funktio nen 4.6 Streams 4.7 Ein- und Ausgabe von Strings 4.H Streams und Dareien
212 2 12 220 238 257 272 288 30 1 3 10
5 Gelll'r ischc Pro grammierung 5. 1 Das Grundprinzip
322 322 324 328
5.2 5.3
Punktions-Templates Klassen-Templates
Literaturverz clchni s
.. 331
Sa chwortverzeich nis C++ Thcmcn
.. 333
Sachwe rtverzcichnls Inform ali kffec:hnisch c Th em cn
336
I Gr undlage n der Pro grammierung 1.1 Ent wic k lung Die Darstellun g in Bild I-I zeig t die zeithc he Enrwicklung von C++.
,-
Simula. EitTcI I
C
---'I
....,
,-
l
e mit Klassen
J L "'f , ---'I
-v
'w,
AT&T I--' AT&T C++ ReI. 2 h C++ ReI. 3
Sma ltalk.
,m
C++
J h
,-
J l
,-
'w,
I--' Dr.ofl ---'I ISO 14882 An si h Kcmmitcc Proposal Standa rd
....,
"'f" Algol. Ada Erweiterungcn Bild I -I Die En tstebungsgcschicbte \"011 C++
C++ basien auf C, des in der Zeit urn 1970 in den Forschungslaboralorien von Bell Telephone in den USA entstand . Die Vater von C sind Kernighan und Ritchie, die auch das Standardwerk nber C ..The C Programming Language" verfassten. Gnmdlage war d ie Speache Be Pl, aus der sich erst B und dann C entwickelte. Ehemals fllr Systema ufgabe n geschr ieben. erlengre sic mil dem Betriebssystem UNIX cine gro ue Verbreitung . Bjarne Stroustrup (eben falls Bell Labs) erweit erte die Sprache urn objektori entierte Struktu ren und nannte sie C++. Tools u nd Obj ektc
Gild 1-2 zeigt anschaulich. welche werkzeoge und Daieien am Entsrebungsprozess eines auf der Basis von C++ entwickelten Programms beteiligt sind. Der grau hinterlegte Bereich stelh dabei em Mini mum dar. ru r die Erstelhmg der im Huch dargestellten Progr amme babe ich das Entwicklungs-Werkzeug .,DEV C++" [Blo odshed] benutzr. Es enthalt sowo hl einen Texteditor als auch einen Compiler (GN U) lind Linker. Da sich die Werkzeuge in einem standigen w eu erer uwicktcn gsprozess befinden. ge he ich nicht welter auf' sie ein und verwelse an d ieser Stelle eur meine Web site: www .harald- na hrstcdt. d{' Auf d ieser werde ich d ie jeweiligen Hinweise und Miueilungen der Hersteller und Leser ein-
srenen.
Nachfolgend in Bild 1· 2 und Tabe jte I-I sind die Werkzeuge und Dateien noch einmal beschrieben. Kursiv gesetzte Angaben . in der nachfolgenden Tabelle ebenso wie irn ganzen
2
I Grundlagen der Programrmerung
Buch, sind Platzhalter und besc hreiben di e eige nnic hen Angaben. In eckigen Klammem gesetzte Obj ekte kcnnen auch entfallen. Editor
n
Proj ckJ 1 Qucllcode-
Header-
Dillc i(clJ )
Dillc i(c u)
-'=j~
I
JC
J
I
Other Moduls O bjekl-
r
I II t- '--==J
Ileader-
D
L
PriprmeSSOl" Translater Assembler
I Datci (en )
Standa rd- Libra ries
Make-Darer
Compiler
I
Jl
~
Objekl Date i
I
J
I
I
Standard-Librar ies
Obj...-kt.
Dateifen}
Linker
I
K=:j
Programm
Deb ugg..-r
I
8Ud 1-2 Wt....kzeuge und Datcien im Entste bengsprozcss
Ta helle I-I W...,.k.rcuge und Datcicn im Entstehungsprozes s
werkzeug
Dateitypen
Inhalt
Editor
Ouellcodederei
Ei n Softwa re modul, das in C ++ gesc brieben ist.
Heade rdate i
Enthalt Deklarauo nen von Variablen und Funktionen. di e in mehreren Ouelt codes benutzt w erden konn en.
Name.cpp Nwne.h
Compiler:
Praprozessor
Bearbeite t Anweisung en die mit # begjnn en. Sucht und ersetzt T ext. Brsretn den vollst andigen Quellcode als Text.
Tra nslator
Erzeugt Assemblercod e. de r noch von Menscben gelese n werden kann .
Assembler
Obje ktdatei
Maschinencod e
Nume.obj Linker
Programm Name.exe
Verbindet aile Objektdateien und Bibliotheken zu einer ausflj hrbaren Datei.
1.1 Emwic klung
3
Ed itor Die Entwickl ung beginm mil der Erstellu ng einer oder mebrerer Q uellcod e-Dateien . Eine Quellcode-Darei wird im ein fachsten Fall mit einem einfachen Texteditor ersreln. 1m komplexesten Fall ist der Eduor in einer Emw icklung sumg ebung eingebe uet. Wic htig bei der Wahl emes Editors ist. dass de r erstellte Text keine Steuerzeichen en tban. wie sie zur formatierten Darstellung von Te xt rninmter verwendet werden. Windows bietet einen so lehen einfach en Edi tor umer Zube hor an. Smn vouer iSI jed och die Verwendung eines Editors. der Eruwicktungshilfen bereitstelh.
Co m p iler Beim Co mprler-Prozess wird nber di e Quellcode-Dat eien itenert. nicht aber tiber die Head erDateien . Der Prozess umeneilt sich dabei in drei Schritte. I. Zuerst ist der Prapro zessor u. a. fUr di e Einbindung der Header-Dateien zustandig . Head erDateien di enen dazu . von Quellcode-Dateien (oder von anderen Header-Dareien j ein gebunden zu werden. 2. Danach er folgt die Umsetzung in d ie Maschinensprache und 3. levnich eine Assemblierung. Die so erstellten Dbjekt -Dateien Nam e.obj en rhalten Iertig kompilierte Progr amrn- Mod ule. Zusammen mit Programm-Modulen. die sich in Bibliotheken (Libraries) befinden. wird dUTCh den Linker das Iertige ausfuhrbare Programm erstetlt. Der gesa mte Vorgang (Pra pro zess. Kompilieren und Linken ) kan n gewohnlich durc h einen einzigen Aufruf des Compile rs durchgefljhrt werden . Eine Alternative ware es jedoch, Komp iliere n und Linken getrennt voneinander auszu fllhren, und d ie Organisation daruber 7_ B. ei nem Tool (Ma ke) anzuvenrauen.
Pr sprozessor Prdprozessor-Direktive n sind vom eige ntlichen Programmcode durch das It Zeichen am Zeilenanfang klar zu unterscheiden Etnfu gen von Datelen Sy ntax:
I 'inc l ude
. Da t e i n ame -
Eine Direktive dieser Form veranlass t den Praprozessor. dess di ese Zeile dur ch den ln halt der Datei Dateiname ersetzt wird. Die Datei wird zunac hst im aktuellen Verzeic hnis gesnclu. anschliebend werden die voreingestellte n lnclude-Verzeichnisse nach der Datei durchsucht. Wird der Datein ame stall in Anfuhnmgszeichen in spnze Klammem einge schlossen, werden nur di e voreingesrelne n lnclude-Verzeichnisse nac h der Datei durchsucht. Beispiel e: Aufruf einer Standard- und einer projektbezogenen Hibliothek
'include <s tdlib. h> ' i nc l ude . H i l f e. h ~
II im Inc l ude - Ver ze i chni s II i m ak t uellen Ve r ze ichnis
smclude-Di rekriven darfen verschachielt werden : Eingebundene Dateien durfen so mit wieder #include-Direktiven enrhalten.
4
I Grcndlagen der Prog ramrmerung
T CXlc r sclzu ngc lI
Die folgend e Direktive erlaubt Tex tersetzu ngen (Makros) m it od er ohne Parameter,
S)Tl13X: Allgemeines Makro
I ' define
Anwe i s un g
Sic sind em wicbug es Hilfsmiue! in Standard-C. Sic haben abe r auch eme n grouen Nact nei f: \ Iil Textersetzun gen Ill.s.sl sich sehr leicht die Typs tre nge von C++ unterlaufen. In C++ sollten Konstanten-Def imtionen, Au fza hlungen ode r inline-Fu nkuo nen bevorzugt werden. Syn tax : \ lakro ohoe Parameter
I ' def ine
Ncune Ersetzungstext
Dabei muss de Name ein gul uge r Bezeichner sem. fUr den Ersetzun gstext gibt es keine Einschransungen. Er kann soga r leer sein. Hinte r dem Name n dar f auch ei ne Paramet erlis te ste hen {Argumente: gfllt jge Bezeichner . dUTCh Kom mata ge trennt. in rund e Klammem eingeschlossen). Zwisc hen dem Name n und dec offne nden Klammer der Paramet erfiste dar f kein Luckenzeic hen (Leerzeic ben. Tab ulator etc.) stehen. Definien e Makros kon nen mil der #Unde f· Direklive wied er aufgeboben werde n. Bedingt e Kemplll er un g on ist es noug . mehre re versionen eines Progra mms zu entwic keln, die sich nur in wenigen Details untersc heiden. Diese Unterschiede konn en in der Anpassung an eine bestimmt e Hardware-K onfiguration (Grafi k-Au tlosung. Coprozessor etc.) ode r an verschiedene Comp iler begrrandet sein. Man kc nnte hierro eine Kopie des Oue th extes enfertigen und dari n die Ande· rungen anbring en. o n fallen aber spater Korrekturen im versionsunabhnngige n Progr ammteil an. Diese rnnssen dann immer in allen Versionen angebracht werden. Dabei ge ht leicht die Ijbersic ht verlor en. Man kann sic h vie! Verwirrung und Speic heraufwand ersparen. indem man di e verschiedenen Versio nen mit den Co mpile r-Direktiven zur beding ten Kompi lierun g verwalrer. Syntax :
. i f de f Bezeichner Anwe is un g en 1 . e l se
Anwei s un g en 2
. e nd if
Die Anweisungenl werde n Ilbersetzt, falls der Bezeic hner (mit sdefine) definiert ist. lsr er nicht definiert. so werden die Allweislmgen2 ubersetzt. Die Defi nition de s Bezeich ners sollte ganz am Anfang des Programms ste hen. So lasst sic h durch Andem einer Zeile zwischen zwei Programmversionen umschalte n. W ie abflch. dar f der else-Zweig auch entfallen (tfe1se- Dire k1 ive und Anwei sungen2 ). ~it der tfifndef-D irektive kann auc h gepril rt werde n. ob der Bezeic hner nich t definiert ist. Die Dire ktiven zur bedingten Co mpilierung dur fen verschac htelt werde n.
1.1 Emwic klun g
5
Source-Code Aile ersrelne n So urce-Code- Dateien bild en ein in sicb ebgescblossenes Softwaremod ul. Sie werde n in der Regel m il Nume .cpp bezeic bnet. Unt er Unix Ist auc h Name.C ublic h. Dabe i ist Name eine kurze und sinnvo lle Bezeichnung der Modul funktion . Der Inhah et nes SourceCodes ist der Bestandteil d ieses Buches.
Head er-D atelcn Header-Dateien bi lden eine logisc he Sa mmlung: vo n Datenstrukturen und Funkuons-Deklarati on en. Sie en thalten: • Defi niuo nen vo n Konstanten, Variablen. Datentypen und Datens truknrren • Deklarationen \ ' 00 Funktion en und Klassen • Programmteile. d ie ..1M Prapr ozessor an di e Stelle einer T extanweisung setzt. Was sie nicht enuuhen dnr fen sind: • •
zu komp ilierender Code Konstanten, veriable n, Datentypen und Darensnu krcren. die nicht globa l genutzt werde n.
Man kan n lun d sollte) fiir eige ne Module Header-Da teien anlege n. Sl08 t de r Praprozessor auf eine Ze ile der Form Sy ntax : Einbind en elner Header-Datei
I finclude Name .h
so sucht er zunachst im akfuellen Verze ichnis nach der Darei Nume .h. Wenn er ste dort nicht finder. sucht er in den v erxeichmssen. die rur die Stan dard-Heade r-Dareien gedac bt sind. Wo sic b die se genau befinden. wird meist in einer Umge bun gs van able od er ahnhc hem fesrgelegt. Wen n (wie bei den Standard- Bibhothe ken ublich) so fort in diese n Verzeic hnisse n (o hne de n Umweg ube r des aktue lle Verzeic hnis) ges ucht werden soli. wird der Name in spitze Klammern ges etzt . Beispiel : Aufru f der Standardbibhothek
I ' i nc l ude
<stdlib. h>
C ++ besitzt einen verg leichsweis e kleinen Sprachumfang. was die Anzahl von Schlnss elwortern und Regeln angeht. d ie ZlI ihrer Defin ition notig sind. Sehr vie l Funktionalitlit steckt nber in den Standard-Biblio tbeken. Tabdlc J -2 Hcispielc hliulig vcrwcndctcr Standard- Hcader dareicn und dcren Funktiona htnt
Filename
Beschreib ung
iostream.h
Ein-IAusgab e mil C-e-e-Streams
stdio.h
Ein~/A u sgabe
stdhb.h
Standard- Bibliotheks-Funktio nen : exit. atoi , qsort
stddefh
Standardtypen und
sm ng.h
String-Verv..ahungsfunku on en: strcpy, sircmp. strlen
im C-Slil
-wene: size_t. NU LL
6
I Grundla gen der Programrmerung
Die Schnittstellen zu d iesen Funktionen befinden sich in Standard Header-Dateien. HeaderDeteien haben einen bestimmten Aufbau und lnhah . Codt I-I Smrktur efncr Headcr-Datci ' i fnd e f MYHEADER_H ' d ef ine MYHEADER_H II Kommentar: Dateiname und Au f g abe II Ers t e ! ! u n g s da t um II Versio n II Re vi sio n
II c omp i l e rse h a l t e r
. def ine WI NDOWS ' und e f UNI X
II I nc l ude - Da t e i e n . i n c l u d e
. i nc l ude
~myModul .h·
II Symbolische Ko n s tanten ' d ef i n e TRUE 1 II Makro s I d ef i n e MIN IZahl A.ZahlB I (( a) < IbJ ? f a) ,(bl l
I/Gl oba l e Konstanten
cons t d ouble MAX: I 0 0 ; II00 t e n s t r u k t u r e n und Typve r e inba rung en t ypedef fl o a t Fl aec he ;
II Globa l e Variablen e x tern i n t
Ma s s ;
II De k l arationen v on Fu n k ti o n en d o u ble Flae c h e ( f l o a t Bre i te , f l o a t Hoeh e ) ;
. end i f
Der fblgende Code sc rgt dafllr, dass schon einmal deflnie rte Grenen (bel einem mehrfachen Aufruf der Header-Dater) nicht erneur eing ebunden werden. Dabei stehr ••ifudef" a ls Kurzform Hir .Jrnot deli nition": Cudt' J-2 Header-Schulter
I IUf n d ef def i ne
MY_M ODUL_ H MY_M ODUL_H
l e nd if G lobale Variable in Header-Dareien verletzen das Prinzip Information Hiding. In ei ner HeaderDatei kann ein v erweis auf eine globale Variable stehen. defimen wird sie abe r im Ouellcod e.
1.1 Emwic klung
7
Inform ation Hid ing ist cine Technik zur Mod ularisierung von So ftwares ystemen. Ideates Beispiel sind Obje kte, die ihre imem en Detail s nach aullen hin nicht bekann rgebe n. Nu r uber d ie defi merten Merbodenschniustetle n Bild 1· 3 ist ein Zugriff auf die ge kapselten Daten mog ficb. Die Konstruknon von Obj ekten. auf di e ube r Meth oden zugegriffen wird. wird da her auc h als Datenkapselung bezeichnet und ist ein zeruraler Begriff der Obj ektorientierte n Progzrammierung. Objekl
Botschaften tmes~ges)
-
_ _• I Botscbaftcn [messages}
~ekl
Schnittstellen
Kild 1-3 Obj ckt mit Attrib ut.:n [Daten] und Mctboden (Op':11Itionc nl
Nacbfolg end als klein es Beispiel die De klara rion g jobale r Variab len in der Header-Datei. die Definition erfolgt dann im eig enthc hen Programm De kla rarion der beid en int-Datent ypen mil extern: 1/ Glob alDat e n. h
' i f nde f Globa l Dat en ' de f i ne Gl oba lDaten
e xtern i nt Formen (20 ) ; e xtern i nt FormZeiger ; . e ndif Defi nition der be iden inl-Dalenlype n im Q uellcode: I I GlobalDa ten.cpp
i n t Formen[ 201 :{O}; i n t Formzeiger=O;
Linke r Die vom Co mpiler erzeug ren Obiekr-Dareien enthalten mog ficherweise noch nicht aufgeloste Referenzen auf in der emsprec henden Da tei nicht definierte Fun kuo nen od er globale v ariablen und sind dah er nicht lau ffa hig. Der Linker hat die Aufgabe. nicht aufgelost e Referenzen in ein er Da iei mi t Hille der Angaben aus ande ren Dateien aufzu losen. Wie das ge nau gescbiebt, ist an die ser Stelle unbe deutend. Wichtig ist nur, dass der Link er nur dann ein aus fiihrbares Programm erzeugen kann. wenn er
8
I Grundla gen der Programrmerung
zu j edem unden nierten Eimrag einer Datei einen definierten Eintrag in einer anderen Datei finder, der auf jed en Fall genau gleich lauten muss.
Debugger Ein Debugger dient zur schriuweisen Unrerbrechung eines Programmablaufs und zur Ausgabe von Werten in Var iablen und damit indirekt zur Lokalisierung von Fehlem . Aulkrdem konnen Konekiu ren durchge flihrt und geprtlfl werden . Es gibt unrerschiedhche Meiboden des Debugging. Modeme Debugger haben die Moglichk eit. Anderungen am Quellcod e wahrend der Programmausfllhrung dire kt zu abersetzen und dann das Programm Ionzusetzen. Diese Technik wird auch als .j ust in time debugging" bezeichn et. Ein Debugger isl o il Bestand teil einer Programm-En tw icklung sumg ebung . Bei de r Fehler korrektur und -lokalisierung mil einem Debugger spricht man auch von Debug. gen. Der Worneil Bug fur Progr ammie rfeh ler wurde ...·on der Computerpio nierin Grace Hop per gepragt. ~f i t Bugfi x (engl. fix fUr reparieren. ausbessernj wird die Bebebcn g eines Programmfehlers bezeichnet. Beim Reverse Engineering w ird ein Debugger dazu eing esetzt . urn durch Ablaufverfol gung und Datenzustand e tin fremd es Programm besser und schneller zu ...-ersreben.
' lak e Bei groCeren Programmprojekten oder aus anderen Grunden komrn t es o ft vor, dass eine Datei in mehrere kfeinere Dateien aufgele ilt werden muss. C ++ erm6 gl icht es. dass aile Dateien einzeIn ube rsetzt werden konnen. Bei zunehmender Zahl der Dareien gehl der Uberblick verloren, welc he Dateien sich gesnden haben. Es folg t der Wunsc h, aile Daieien automausch zu ...-erwal len . Genau das leistet M ake. Bs ist t in Unhr y-Prograrnm. das zu den meisten C·Comp ilem mitgelie fert wird Es beracksict nigt auch die Abhangigkeiten. di e zw ischen den Dateien eines Projek ts exis tieren.
Tcst.cpp
Test.obj
Tcst.cxc
Tcst2.obj Kild l ·of Hcispicl zum Makc-Pmzcss
Umer Betrachtun g von Mild 1-4 hangt die ausfllhrbare Date! Test.exe von Test.obj und eventnell ....on einer weueren Objektdatei Testl.obj abo Wird eine der heiden durch den Compiler neu gebildet . muss der Linker wieder in Aktion treten und Tesr.exe emeuem . Make erkennr an den Emtrage n in der Directory den Zeitpunkt der Erstell ung. Die beste henden Ab hdngigkeiten zw ischen den Dateien kann der Anwend er in elner MakeDatei angeben . Bbenso. wie diese zu erstellen und aktualisieren sind. fu r d ie Eintrage ist eine Syntax vorgeschn eben.
1.2 Grundstrukturen
9
1.2 G rundst rukturen Zur Einfllhrung ein einfaches Progra mmbeispiel . Es hal die klassische Struktur einer Black Box.
I'inga be
Hitd
I ·~
Q
1
Auswenung
1
Q
A." ,,,.,
b
a
,
Black Doll. und Aurgaben!iki7..7c
C OOt' 1-3 Anwendungsbeispicl - SaIL des Py thagoras 1* Pythagora s . cpp Dieses Programm berechnet die Hypotenuse eines rechtwi nkligen Dreiecks nach dem Satz des Pythag oras
"/ 'include < ios t ream. h> ' i n c l u d e <ma t h. h> int main (II II Deklarationen d ouble Se i t e_a, Seite_b , Se i t e _ c; II Ei ngabe cou t « . Se i t e a ; c i n » Se i t e _ a; cou t « . Seite b ; c i n » Seite_b ;
•• ••
// Auswertung Se i t e_c ; s q r t( Se i t e _ a * Seite_a + Seite_b * Seite_b) ; 1/ Au sgabe cou t « .Seite c ; • « Se ite_c; s y stem (. Pau se~); re tu r n 0;
Komm cutarc Kommentare dien en in ellen Programmen zur besseren Lesbarke u des Quellcod es und daher solhe man an ihnen nicht sparen. In C++ Programm en wer den Kommenrare mit den Ze iche nIolgen / - und -, geklarnmen . Dabei kann der Texr uber mehrere Zeilen gehen. Einzeihger Komm entar kann mit dem Dop pel lf beginnen. Die Kommen tare in den Prograrnrnoelspielen dieses Buc hes habe ich auf des wesenth che red uziert, damit mehr Platz rur Erklarungen b leibt.
10
1 Grundlagen der Programrmerung
Zeic hc n Das Grundobj ekl eine r Sprache s ind die verw endeten Zeichen. Hier: • • • •
Klein buchstaben la ob. c•. .. . z] GroBbuchstaben {A . B. C•...• Z} Ziffe m {O. I .2•... . 9 } Sonde rzeichen t:=:. -, -•••/. [. 1. <, >•. .. • Leerr eichen }
Bezei ch ncr
ruT
Be zeic tmer s ind Namm Obj ektc der Ptogra mmie rsprach e, wi e Variablenoamen . Standardfunktionen . Anwe isungsobj ekte u . a. Bezeichner besteben 8US e iner Folge von Buchs taben und Ziffem, so wie dem Sonderzeichen Tiefstrich: Ll . Ein Bezeichner darf auBerdem nicht mit ein er ZilTer beg innen . S ign ifikanl sind n UT die ers ten 3 1 Ze ichen cines Bezeichners . Bezeichner, die mit zwe i Ll Ze ichen beg innen. sind dem Berriebssystem vorbe halten. Sc hlasselwoner d arfen nicht als Bezei chner verwendet we rden . Sc hltiss{'h \'orte r C ++ verwal tet in Bibliotbeken S tanda rd funklionen., deren Na men a ls SchHissel worte r bezeichnet werden. Ebenso bestehen An w eis ungen a us Sc hlnsselworte m . auc h O pera toren und ande re Srrukturbezeichnu ngen.
Separa tore n Separatoren dtenen der Trennu ng von O bjekt en in ei nem C++ Progn a mm. • • •
Ein Se mik olon (;) trennt Anweisu ngen Ein Ko mm a (,) trennt O bjekt e Eine Lee rstelle ( ) rrennt Wo rte
x a mensr a ume Die im ersten Programm verw e nde te An wei sung
~ name5~~.~c~.,--s~t~d~,
---.J
besagt. dass be i a llen Zugrilfe n au f C ++ S randa rd bib hotheke n der C ++ Standard-Namensra um ve rwende t we rde n so li. Diese Anweisung wird , we nn s je nic ht vo rgege ben ist, als de fa ultAnweisung a utomatisc h ve rn Co mpiler ge setz t. Es kann nic ht aus gesc hlossen werden. dass zw ei unabh angig vo nein ander entsra ndene Quellcodes d ie gleichen Nam en verwende n. Dam wu rde in C++ de r Ne me nsreum ein gemhn . So mit konnen Deklararionen und Definit ionen unter einem Nam ensraum zusa mmenge fasst lind gegen andere Nam en abgegrenzt werden. Funkti ensaufbau
Ein C++ Programm besitzt e ine und nur ein e Fun ktion. die mit .main'' beze icbnet wi rd . Diese Funktion wird beim A ufruf des kompilierten Progzram ms zu erst gestartet. Eine Funknon besuzt ein en Datemyp . der vc m Ruck gabewert (return] abhangt . Strukturbloc ke werden d urch " I I' (gesc hwe ifte Klammem) gerahmt. Jed e Funktion besnzt den nachfolg end da rge stellten Aufb au:
1.2 Gru ndstr ukturen
11
Syntax : Muster einer Funktion Dat en typ Name ! Param e t e r[. Parameter_ I ) {
Variablen Deklara t ion en und I ni ti a li s i e r un g en ; Anll'ei s un g en ; [ ret u r n Daten;.:e r tJ;
Token A ls Token wird die kteinste vom Compiler erk ennbare syn takusc he Einheit eines C++ Programms versta nden. Token werden durch Sepera rcren ge tren m. Dies erklart, warum Bezeichner und Scblnsselwoner keine Leerzeichen enthalten durfen. Oil tritt der Fall ein, dass die Reihe nfolge der To ken vom Compi ler anders als gewoth verstenden wird. Ungar b che Xo ra tlon Bei der sog enannten ungari schen Notation hande h es sich urn Namen skonvenuonen. die auf den Ungam Charles Sinwl~\·j zurackge ben. Die Idee ist, dass sich aus de n Namen emer ProgrammgroBe so fon die wic htigsten Eigenscbaften herlei ten lassen. Ob diese Notation die Les bar keit von Progra mmen verbe ssert. ist umstritten. Nach d ieser Notation bestehen Name n aus drei mogfic ben Teilen
I [ Basistyp ] [ Pd.fi x ] I dent ifikato r
Basjstypan gabe und Prafix werde n meist d urch ein bis zwe i Zeichen geb ildet, konnen jedoc h auch emfatlen. Der ldennfikator, der eigemhche Name, sothe den verwendungszweck beschreibe n und ist da her meist lnnger. 'h bl'lI" 1-3 Beispielc '0'00 Basistypen
Basistyp
Bedeutung
"
allge meiner numerischer Wen (int, o ft auch UINT ode r LONG).
u
numenscber wen ohne Vorzeichen (VINT). Diese werde n in der Prax is j edoch on auch mit " n" bezeichnet.
I
LO NG, wird on auch mit .n'' bezeic hnet.
dw
DWOR D
b
BOOl
f
110at
f
steht in Emzelfallen auc h fur ein Flag (boolscher Wen). Flags sollte n besser mit
.b' gekennzeichnet werden.
,h
einze lnes Zeichen (char),
12
1 Grundlagen der Programrmerung
by
einzelnes Byte (BYTE).
5Z
o-terminien er String als Charakter-Array (char [J).
s
String bei Verwendung einer Stn ngklasse (eStr ing oder AnsiString).
T llbelle 1--1
8~i spiel e
fiir Prlifixe
Prlifix
Bedeutung
a
Array
c
Zahler (Counter)
d
Differenz zwischen LW ei Variablen desselben Typs
c
Element eines Arra ys
h
Handle
;
Index elnes Arrayelementes
p
Zeige r (Pointer). Man findet auch noch die 16-8 il Relikte ..lp'' und ••np" fUr long Pointer und Near Pointer.
r
Referenz
s
globale Variable
ffi_
Mernbervariabte
In
Funktion
pi
Funkncn. d ie als Parameter nbergeben wird (Callback-Funktion). Wird on auch mit .pth" bezeichnet.
Ein ldemifikator beginnt mit einem Grobbuchstahen. Setzt sich ein Identilikator aus rnehreren ..Worten" zusa mmen. so beginnt jedes .,Wort" mil einem Grolibuchsraben. Aile anderen Buchstaben werden klein geschrieben. Beispiele flir Narnen:
N=e
p s zVa l ue a fTernperatur
nM,x
l c Index bErg-ebni s ichEr s tes
Besch reibung Zeiger au f St ring, mit dem Nu ll ze i ch en termi nier t Ar r ay mi t Tempera t u rwerten v om Date ntyp f l oa t numerischer Hax imalwe rt ZAhler tiber I ndi ze s v om Datentyp l ong Ergebniswert einer bool sche n Funktion Index des ers ten Zeichens eines St r i ngs
1.2 Grundstrukturen
13
A n\wnd ungs bcis p icl: v ektnren - Kr afl e im Raum Die Kraft hat den Charakte r eines hnienfluchtigen vekrcrs und isr somit dur ch GrOBe. Wirkrichtung und AngrilTspunkt eindeuug bestimmt. Greifen mehrere Krlfk an einem Punkt an. dan n lassen sie sich mine ls der so genannten Vektoradditio n zu e iner Kraft. man spricht von einer Resultierenden. zusamrnenfassen. Urn die Lage und Richtung der Krane besumrnen zu konnen , bedie nen wir uns eines Koord ina-
teesystems {x, y. z) mil seinem Urs prung u.
y F
"
x
, Hild 1-6 Koordinatensystem
ZW"
Betrachtung riumlicher Kniftc
Die Anordnung der Krane im Raum kann beliebig sein. FUr den Fall. dass die Wirkl inie einer Kraft nicht durch den Urspn mg geht. kommen wir zur zweuen wichnge n GrOBe in der Stank. dem Moment. Ein Moment ist das Produ kt aus Kraft x Hebelarm: M =F 'a
( l.l )
Dabei ist der Hebelarm der karzeste Absland zw ischen Wirk linie der Kra ft und Ursprung u. Er Iiegt aube rdem senkrecht zur Wirklin ie. Ein Moment ist die Ursache einer Drehbewegung. Momente lassen sich genau wie Kraf'te zusamme nfassen. y
F
"
u
, Hild 1-' Kran Eund I tcbclerm a
Sind nun n Krane Fj 0= 1• ..n) gegeben. so ergibt sich die resuhierende Kraft aus der Summe
der vektoren
"
Fr =LF. i- I
( 1.2)
14
1 Grundlagen der Programrmerung
und das resuluerende Moment aus n
Mu
n
LM 2>i-F;.
""
( 1.3)
ui ""
i-I
i=1
F
Fyi
/-:"'~~l/;:ri
•
,
'J-+---:, ax;
lJild 1-8 Kompo.....'111endal'!ildlung
Genausc gilt auch filr die Projektio nen der Kra fte und Mom ente auf d ie Ach sen des Koo rdinatensystems n
F.. = 2: ~k . k E{,.pI
( 1.4)
j" l ,
n
LM
( 1.5 )
uik "" 2: ( aip ' fi q - a iq ' fi p )
M uk ""
j" l
i- I
Dari n isl k c {x. y. z } und fllr p und q als ab ha ngige Ind izes g ilt: k
P
q
x
y
z
y
,
,
x
x
y
Die betragsma uigen GroBen von resunierend er Kra ft und resultier endem Moment ergeben sich den berechneten Kcmpo nente n nach dem Satz der Pythagoras
If,l =
2:
rrk2
( 1.6)
k-x.y,z
IM,I=
2:
,
M ~k .
( 1.7)
k- lI;.y,l
Wil kl die resulne rende Kraft Fr senkrect a aus der Bbene, die Pr und ~fu aufspannen. so urn den Ve ktor a ve rschobe n. dass resulnerende Kraft und Moment d ie gleicbe Richumg haben, so
1.2 Grundstrukturen
15
bezeic hnet man dieses vektorpeer (Fr. Mu) als Dyname (Kraftschraube). Der Orstvekror a des Fnupunkres Fbezngtich des Ursprungs u ergib t sich in seiner Komponenten darstellu ng aus ( 1.8)
\i it Hilfe des Parameters p f rM y
I
p ~ --- ~ --
i'Fr
I'
'Fr
2:
I' k -ll .Y.Z
Fnr.M: Yk
(1. 9)
lisst sich der auf den FuBpunkl Fbezogene Momentenve ktor Mf berechnen
~t r
=
pJ-~
=p
L
F~
(1.1 0 )
k -ll.y.Z
Ein Programm soli. bei der Eingabe von Kraften dur ch deren GroBe und Lage. die res uttierenoe Krall: und das resuluererde Moment ermiuetn. T.belle I·S Smrktogramm zur Kri ft.:rcdult ion
Eingabe der erforderlichen Daten zur Berechnung
i '" I urn I bis n
L F,k
= L F,k + F,k. k E [x. y. z]
L M uik = L M uik +M Yik
IF;I~ ~ _ 2: FJ ke x.y.z
IM,I=, ae =
2:
,
M ~k
ke x.y.z
1~ 12 ( FrpM: uq - I-~ M:up ) , k = xvy. z I-~ Mu 1 p ~ - -,,-- = - "
L f-rkM uk
IF,I- IFJ k e x.y.z
Mr
= pl-~
=p
2:
Frk
ke.x.y.z
Au sgabe der Ergebnisse in Tabellen und Diagrammen Das Programm besrehr aus drei Teilen , von denen nur die Auswertung als Suu ktogram m beschrieben wird, Die liin gabe und Ausgabe ist einfach und daher direkt im Programm zu
erkennen
16
1 Grundlagen der Programmie rung
C oM 1·-4 Anwcndungsbcispicl - Kliiftc im Raum j *
0'
Kr a e f t e . c pp Das Progr amm bestimmt mi t Para me t e r n von Kr&f ten im fre i e n Raum resultierende Kra ft , Mome nt und Dyname
' in clu d e
< io8 t re am. h ~
'includ e <ma t h. h> i nt main ()
c ha r we i t e r ;
double x . Y. z ; double Fx . Fy . Fz ;
double Sux , Suy , Su z; double SuFx. SUFy . SuFz; double S uMx. SuMy, SuHz ; double Fr . Hr , p ; double Hx . My. Hz; doubl e ax, ay. az ; do (
cou t « · we i t e r ( E: Ende / N=Ne u /W=We i t e r / A=Au s g a bel "; ci n » weiter ; s wi tc h (wei t e rl I c a s e ' E' : 1* Eo d e * /
break ;
c ase ' N': ; * Ne ua n f a ng Su x 0;
*j
Su y :: 0 ; su z ::: 0 ,
susx :: 0, Su Fy '" 0, Su F z '" 0, Su Mx :: 0; SuMy :: 0; SuMz ::: 0; case ' W' : 1* wei t e r
*;
II Ei ng a b e n cou t « "Ang r i f f s p unk t c i n » X; cou t « "Anqr i f f s p unk t ci n » y ; cou t « "Angr i f f s pu nk t ci n » z;
cou t cin cout cin cout
» »
«
( x)
= ".
( y)
" ;
( 2)
= ".
" Kr llf t kompon e n t e (x,
o ,
Fx ;
«
" Kr a f t kornpone n t e (yl Fy , « - Kr ll f t kompone n t e (' I
~
~
o.
o .
1.2 Gru ndstr ukturen ci n »
17 Fz ;
II Auswertung
Sux :: s ux +x; Suy :: Suy +y; Su z :: Su z +z;
SuFx :: SUFx +Fx; SUFy :: SUFy +Fy; Su Fz :: Su Fz +Fz; SuMx :: SuMx+y " Fz - z "Fy ; SuMy :: SuMy +z " Fx - x "Fz; SuMz :: SuMz+x " Fy - y "Fx; break ; c ase ' A': I " Ausgabe " I Fr s q r t(Su Fx "S u Fx +Su Fy "SuFy +SuFz "S u Fz); Kr s q r t(SuMx"S uMx+SuMy"SuMy+SuMz "SuMz); ax :: (Su Fy "S uMz-Su Fz "S uMyI /I Fr " Fr); ay:: (Su Fz "S uMx-Su Fx "SuMz) /I Fr " Fr); az :: (SuFx "S uMy-Su Fy "S uMx) /I Fr " Fr); p :: SuFx "S uMx+Su Fy "S uMy+Su Fz "SuMz; Mx p "SuFx / (Fr "Fr ) ; My :: p" SuFy/ (Fr "Fr ) ; Mz :: p" Su Fz / (Fr "Fr l ; cou t « "Resu l t i e r e nde Kra f t « Fr « cou t « "Resu l t i e r e nde s Moment:: «Kr « cou t « "Dyname Or tsve k to r (x) :: «ax « cou t « "Dyname Or t s ve k to r ( y) :: «ay « cou t « "Dyname Or t s ve k to r Lz I « az « cou t « " Mornen t e nve k to r (x) « Mx « cou t « "Momentenvekto r (y) « My « c out « " Mome n t e nve k to r (z) :: «Mz « break ; de fault : cou t « "Pa Ls c h e Eingabe t " « e nd l ;
e nd!; endl ; endl ; endl ; e nd! ; e nd! ; end! ; endl ;
1
while (weiterl::'E');
Mild )·9 zeigt das Ergebnis emes Eingabebeispiels. Obw ohl noch nicht aile Elemente des Programms besprochen wurden, sollte der Leser soviet Progra mmierk ennrn is besi txen. dass er die Struk ruren und Methoden versteht. D bungcn
Aulier der M5g.lichk eil der Kompo ner uenangabe. gibt es zur Richrungsangabe etnes Vektors zum Urspmng und den Koordinate n, die Angabe der Richtungswink el (Mild 1-10 ). Nehmen Sie deren Bestimmung in lh re Berec hnung m it au f ~,
a ' = arccos G
a
I' fi =
( 1. 11)
18
1 Grund lagen der Programmienm g ,, " i t .. .. (E ~ End .. / N ~ Ne uAI · Weite .. /A · A u ~g .. he ) H Angri f f s punkt ( x) = 3 An g ri ff s punkt (y) = 8 Ang r iffspu n kt (z) = 8 K..aftk" .. po ne nte <x> I' K.... ftk" .. po " ent e (y) 3 Kraftko .. p o nente
(z)
0
Kra ftkonp o nente
( x)
0
Kraftko .. p o nente (y)
0
we iter (E =Ende / H=He uAI =\leit e r/A =Au sgahe> \.I Ang .. iff spu n kt (x) = 0 Angr iff spu n kt = t Ang .. i ff s punkt ( z ) • 8 K.."ftko,"po nente (y) I' K.... ftko .. po n ent e (2) = 8 Angr iff spu n kt (y) = 0 Angr if hpu n kt ( 2) = 2 5 KI'...ftkonpo n ent e (x) K.." f t k o .. po nente ( 2) I' we i t e .. (E =Ende/H=He uAI =\leiter/ A=Au sgahe) A Re sult i e r en d e Kraft 7.Iil?HI7 Re sult i e r en d e s 110 .... nt 14 . 83 57 llyn
Or t sue ktor ( ,,)
- 0 . 2 (,
llyn " Ort sv"ktDr ( y) - 0 .58 0. 7(, Dyn e O.. t ~ u e k t o .. ( ", ) <x ) B.6 MOl'len t en u ekt o r MOl'len t e n...e ktor ( y) 5.1(, Mo .. e nte nue k t or ( z) 6 .oB "e i t e r <E =Ende / H=HeuAI= \le i t e r/A=Au sg .. he)
lJild 1·9 Ausgabe des Beispicls
y
'y x
lJild 1·(0 Richtungswin kel
19
1.3 Datentypen, Varia ble Dod Konstante Vartablcnmndcl l Das nach folgende Behllltermodell hat flir aile imperariven Programmiersprachen Gu ltig ke it.
Ikzcichncr ("' amc)
t\anK:(Bacichnc r) · A Uras.::
~
Adresse in! Speicher
8Ud I - II Bcbaltcrmodel l und ZugrifT
Zu jeder Variab len gehOrl"J1 ein Name (Bezeic hnerj. eine Adre sse im Speiche r und der Inha!t (W ert ) die ses Spe icbers . In der Programmierung i SI eine Va riab le ein Speic her. dessen We rt sich andem kann . DeT ZugrifT auf die-sen We rt er folgt aber den Bezeich ner oder die Adr esse. im Gegensarz zu r Math emati k. in der eine Vari ab le ein Platzh aher zur verangemeinerung von Gleichunge n iSI.
Variab le Be-VOl ma n ein e Vari able ve rwenden kann , muss sie deklari ert werde n. Bei der Deklaration wird der Name der Var iab len eingefhhrt und ihr ein Datentyp zugewiesen. :\1il dem Darentyp wird festgeleg t. welc be Form von Daten die Varia ble spe ichem kann . Dies ist erforderhc h. we il mi t de m Datent yp gleic hzeit ig die Ope ratio nen best immt sind, die sich auf diesen Datentypen durchfiih ren lassen . Sy ntax : Va riable nde klarario n
Dat entypl Vari ablen l i s tel ;
Dat entyp2 Vari abl enl is te2 ;
M it der Dek lararion ke nnen Variab len auc h ininalisiert we rde n: Syntax : Initialisierung einer Variable n
I Dat en typ
Vari ab l e" Wert;
Konst ant e Zuslitzlich zu v ariablen konnen in C++ auch benu tze rde finie rte Kon stant en deklarien und iniualisiert werden. Syntax : Deklaration und Initialisierung einer Kon stamen
I ccnsc
Dat en t yp KONSTANTENNAME " l'le r t;
20
1 Grundlagen der Programrmerung
Der Kon staruen kann im Programm kein neuer Wert zug ewiesen werden. Urn Konstante von Variablen zu unrerscheide n. werden ihre Namen gro Ggescbrieben. Eine andere
~ 6g1 ic h kei t
bes rehr darin . Konsranren mil Hil fe des Praprozessors zu erzeugen.
Syntax: Praprozessor- Direktive zur Erzeugun g von Konsranren
I . define
Name Er s a tz
Hier wird kein Speiche rplatz beleg t. da der Praprozessor im gesa mte n Quelhext das won Name durch Ersatz ersetzt. Fu ndamcn ta ter Daten typ void
Der Datentyp void ist nur syntaktisch von Bedeutung, da es keine Objekte von diesem Typ gibt. Er wird ha uptsachlich als Funkno nstyp und fllr Para mererangaben genu rzt. ~ il der Typ angabe void wird angezeigt, class diese Funkti on keinen Wert zurtlckliefert. Void wird da her auc h als Pseudo-R uck gaberyp bezeic hnet. Ga nuahligc Da tcn typen Ganze Za hlen (e ngl. integer) werd en mil unrersc hiedlicher Anzahl von Bus verwa lrer. Die w onlange ist com pilerabbangig. T llbt llt 1-6 O~rsicht g;l1V..l'ahligcr Datcntypcn
Typ
Speicherbedarf
w ertebe reich
short in!
2 Byte
-32 7M bis 32767
unsig ned sho rt int
2 By1e
Obis 65535
int
4 Byte
-2 14748364 8 ... 2 1474 K3647
long inl
4 Byte
-2 14 74K364 K ... 2 147 483 647
unsigned long inl
4 Byte
O bis 42949672 95
Beis piel e: Deklarat ionen (und lnitia lisierungen] l ong int Ba u t eil e : 4 5 5 ; int Anz ahl _Me s s werte, S t ich p roben ; u n signe d l o n g i nt Ve rs uch e : 1 23 4 56 7 8 90;
Gau ze Zahlen werden ohne Dezima lpunkt geschriebe n. In C++ sind ein ige lnteger-Konstanren vordef iniert. d ie ohne Deklarauo n und lniti alisierung ang ewend et werden konn en. w enn die Header-Datei ..limits.h" eingefligt wird: Beispie le: lnteger-Konstante aus Bjbliothek en I NT MAX 32767 oder 21 47 483 6 47 INT MIN : -32768 oder -21 47 483648
21
1.3 Datentypen. Var iab le und Ko nsta nte Recllc Dar cntypcn
Reelle Za hlen (engl. Float) werden rech nermt em in exponentieller Fonn durch Mant isse und Expo nent da rgestellr. Dadu rc h mussen neben Speic herbeda rf auc h die Anzahl darstellbarer
Ziffem genannr werden. T ebelle 1-7 Ohcrs ichl rccuer Daicmypen
Typ
Spe iche rbedarf
Stellen
w en ebereich
float
4 Byt e
ca . 7
1.2E-38 bis 3.4E-t38
do uble
8 Byl e
ca. 15
2.2E- 308 bis 1.7E+308
long double
10 Byte
ca. 18
3.3 E-4932 bis J. 2E -t4932
Beispiele: Deklaranonen (u nd Iniriahsierungen ) f l o a t Durchbiegung : O. 123 4 e - 2; d ouble Nullstelle_l , Nulls tell e_2 , Nulls telle_3 ; l ong d ouble Loesung : 3 . 4 5e +4 ;
Fest pun ktzablen mussen emen Dezima lpunk t er halten . Auch bie r sind die darsrenbaren Grenzen dUTCh Double-Konstante in der Header-Date! ••Iimits.h" gegebe n mit DBL_MAX und D BL_:\ IIN.
Cha rac ter Daacmypcn Char-Va riablen d ienen in der Haoptsache zur Speic heru ng von AS CII-Zeic hen. T llht'lIt' I -H Ohcrsic ht ocr character Datentypen
Typ
Spe icher-
wertebe reic h
bedarf char
I Byte
- 128 bis + 127
signed char
I Byte
· 128 bis + 127
unsigned char
I Byte
o his 255
Beispiele: Deklaratio nen (und lnitia lisie rungen) c h a r Tr a e g erform : ' T'; s i gn e d c h a r geset zt ; u n s igned c h a r Ze i c hen : 2 3 1;
Die Initiali sierung kann durch em e Ze ichenkon stante (er kennb ar an den Hochkommas) od er dur ch den dezimale n A SC II-Cod e erfolg en.
22
1 Grundlagen der Programrmerung
Loglschc Dat cntypcn In C ++ is! der bools che Datentyp vordefiniert: 'I llbelle )-') Dcr boolsche Datcruyp
Typ
w en ebereich
bool
true ocer raise
Beispiel e: Deklararionen (und Initiatisierungen) boo! Te~inger ec h t : t rue ; boo! An <;j'ebot. Au f t rag;
C asling
Oil soli der Wen eine r Variablen eines Datenryps an eine Variable anderen Datentyps nbergeben werden. Dam ist eine Typumwand lung erforderlich. Die s wird dUTCh den Cas t-Operator (Dure"typ) errejcht . Beispie le: Casting von Darentypen
Devi s or
= 3. 14; Anzahl = l i n tl Devis or ; = 11 2 ; We r t e = ( f loa t) Bauteile _Zahl ;
Bauteile_Zahl
Dieses Casting wirdjedoch immer angewe ndet, auch wenn d ies nicht sinnvol! isr. Daher sollte man die neuen Anweisungen consrcast. static_cast. reimerprercasr und dynam ic_cast verwenden. Der consfcast-Operator w ird benutzt. urn den const- oder volatile-Modifizjerer von einem Datentyp zu entfernen. Der stariccast-Operator wird Illr das cas ting zwischen Ganzza hlDatentypen und Glenkomma-Datentypen verwende r. Der reint erpr er cast-Operator wird zum einen filr eine Konvertierung zwischen unterschiedlichen Zeigen ypen und zum anderen fl lr eine Konvenieru ng von Ga nzzahlen in Zeigern und umgekehrt benutzt. Der dynamic j castOperator wird im Zusamrnenhang mit Klassen benurzt. Aute ma tlsche Typko nvertler u ng (Promotioos) Viele Konvenierun gen kann der Compiler ohne Angabe eines Ope rators selbst vcm ehmen. vorausserzcng ist, es gehen keine Informat jonen ver toren. Demzufolge wird der .jdeinere'' Datemyp auf den "gro13eren" erweuerr. Beim Integral Promotion werden die Datentypen char, 1IJ1.1"igJll!d char, umiglll!d short und signed sho rt au f den Datentyp int erweite n. Sonst wird die Konverrierung auf den Datentyp unsigned tnt versuclu. Ebenfalls konnen ellllm-Datentypen in tm- Oller /ollg-Datentypen erweitert werden. Ein htHI/-Datentyp kann in einen ill1-Datentyp konvertieren. wobei false e 0 und uue e 1 ist. Beim Floatin g Prom otion kann ein j1oat-Datentyp auf ein en dOllhle-D atentyp konveruen werden. Beim Floating-Integra l Pro motion wird ein Gleitkommawert in ein en Ganu .ahlwert umgewandell. Dabei emfallen d ie Nachkommas tellen.
1.3 Datentypen. Var iab le un d Konstan te
23
Beim Poin ter Promotio n wird der Ze iger eines beliebigen Datentyps in einen void-Zeiger kon-
venie n .
Typmodifi7.ierer Ein e \ t6glichk eil . einer Kon stan ten emen emd eungen Datent yp zuzuordnen, isl der Typmodifizierer. Hall e d ie Kreiskon srant e 3.141 59 normalerw eise den Typ double. so la sst sie sic h durch die Schreibweise 3. 14159f dem Typ float zuordnen. Es steht f rUT Float. u fUr unsigne d und I fur long. A ubi hI u ngsf) 'pl'n
Eine Aufza hlung (e ng l. en umera tion) ist ein Typ. der eine Menge dUTCh de n Am..-ender spezifizie rte r we ne speichern kann. Nach der Definition wird eine Aufzahl ung fast ge nau wie ein intTyp benutzt . Bei spiel: Definition eine s Enumereuon-Typs
I en um Fo rm
{KREIS , RECHTECK. DREI ECK} ;
Die Anweisun g definie n drei ganr....a hlige Kons tan te. Enumeraloren genanm. und we ist ihnen We rre zu . S tandardmauig be kommen Enumeratoren We ne von 0 an au fste igend zugew iese n. Daher ist nach dieser Deklaratio n KR El S:O, REC HTE CK = I und DREIECK =2. In einem Progra mm konn en Variable vom Aufzahlungstyp definiert werden . Die sen Variablen kcnnen Eleme nte des Aufzahlungstyps zugewiesen we rden, nicht jedoch urngekeh rt. Beispiel: Zuweisung von Enu merations Form Bauteil ; = KREIS ;
I Baute i l
vorbe legungen konnen bei de r Defi nition de r Enumerati on au ch e nders festgele gt we rde n. Be ispiel : De finition von Enum eration s mit Vorbe legu ng
I enum
Fo rm ( KREI S=3 , RECHTECK, DREIECK=1 0, TRAPEZ) ;
Mit die ser Deklararion wir d KR El S=3. RECHTECK=4 , DR EIECK = IO und T RAPEZ=II . Elgcnc Ty pcn rlefinieron Mi l dem Hefehl ~\'JI(.'d4 Iassen s ich Typ en eig ene Na men zuweisen. Sehr beliebr ist d ie Methode urn lange Ty pnamen abzuknrze n. 50 ko rmen Sie einen /fJl.l'igJled-im-Typ einfac h den Zwe unamen uint geben. Die Anwe isung dazu la utet: Beispi el: Eige ne Typde klam rion
I typede f
uns igne d int uint ;
M it dem Zw eitnam en kan n aber au ch e rklart werde n. wczu dieser Typ benutzt wird, W ird er zu Speicherung elnes Span nungswertes benutzt , karin ma n auc h deklarieren : Beispiel: Higene Typdeklaration nach Anwend ung
I typede f
uint Vol t ;
24
1 Grundlagen der Programrmerung
Auch die Dek faration cines Typs Serien numm er. der nichts ande res als ein lon g-Typ isr. karm zeigen, dass mit dl esem Typ n UT Daten dokumentiert werde n.
" m"Cnd ungsbeispid: Q ua dratischc Gleichu ng - Harteb estlmmung na ch Brin cll Quadret ische Gleichu ngen haben die allgem eine Form x 1 + ax+ b= O
( 1.12)
Sind die Koe ffiziemen dieser Gleichu ng reell, treten dre i Los barkeitsfalle auf. Die Losu nge n und versc hieden. reel l und fallen zusammen od er konj ugiert komplex ohne sind entw eder reelt e Losu ng. Die Los ungsformel rur die reellen faile lautet allgemein
reen
(1.13)
Der Rad ikand der Wurzel wird als Diskrimmante [lat. discnminare. trennen. scheiden)
D = (~)' -b
(1.1 4)
bezeichnet und ist aussc hlaggebend ruTdie An der L6s ungen. lsi 0 > O. gibt C'S zwe i reelle Losungen. ist D '" 0 nur eine reelle Losung und ist D < O. werden die Losungen imagin1i.r. Die Hartebesumman g ist fllr mec hanische Te ile eine wich tige Prufu ng, da sie sc hnell und praktisch zers rorungstrei durchgefuhrt werden kann. Nac h Brinel l wird dazu eine ge hartete Stahtkugel in das zu uruersuc hende Material mit einer besumrmen Kra ll gedruckt. Die Eindri ngtie fe lasst sich aus dem Kugelabdru ck wie fo lgt be rec hnen:
h x lIi1d 1-12 Geometric tics Kugclabdr ucks
Nach dem Satz des Pythago ras erhalt man
r 2 = (r_ h 2 )+ x 2
( 1.15)
Dies Ihhrt dUTCh Umstellung auf die Norma lform der Quadratischen Gleichung h 2_ 2rh+ x 2 = 0
(1.16)
Die Losung lautet
~~
( 1.17 )
25
1.3 Datentypen. Variable und Konsrante
Dabei ist nur der Fall sinnv oll. bei dem eine Hohe erminelt wird. d ie klein er ist als der Rad ius ( 1.18 )
T llbl"lll' 1-10 Smrktogram m
I lIT
Bes timmung der Eindri ngti efe
Eingaben Kuge badiu s r.
Ahdru ckradius x
h = , - ~(r' -x' ) Ausgabe Eindrmgnefe h C ude 1-5 Anwendungsbcisrid - Bcst imm ung dc,. Eindringticfe fur cine Jl lln ...-priifung
1* Ei n d ring tiefe.cpp Die ses Pr ogr amm berechnet die Eindring tie f e d u rch einen Ku g e l a bdruc k bei d e r H~rteprGf ung nach Bri n e l l "/
t i n c l u d e < ios t ream. h> t i n c l u d e i nt mai n () ( II Deklarat i o ne n int Ra di u s ; doub l e KugelRa d i u s ; d o uble Abdr u c kRad i u s , Abdruc kHo e he ;
II Eing a ben
ccu t « "Kugelrad ius r ;; "; cin » Radi u s ; Ku g e lRadius ;; (d ouble) Rad ius; c c u r « "Abd r u c k r a d i u s x ;;" · c i n » Abdru c kRadi us;
I I Aus wertun g Abdruc kHoehe ;; Ku g e lRad i u s Abdru ckRa di u s * Abd ruc k Radius) ; I I Au s g a be cou t « " Eindri n g t i e f e h
s ys t em (" Pa u s e " ) ;
" «
s qr t ( Ku g e l Ra d i us
AbdruckHoehe «
Kug e lRa d ius
e ndl ;
26
1 Grundla gen der Programmierung
Obu ngcn
Die Brineljhane Hissl sich aus dem Durchmesser d der Eindruckflache, dem Kugeldurchmesser D und der einwirkenden Kraft F direkt aus ( 1.19) angeben. Elg31L1.ell Sic: &c. Prog rannn UIII di~ Ra;hnullg. E:. gilJt 1100.:11 andere PII1 fn ,. falut'1I wie die' nach Rockwell und Vickers . Dort werden ande re Blndringkorper benurzt.
Anwendung\bchpiel: U bungsformel filr kubisch e G lcic hungc n - Trichl cnolum en
Die Lzsungsforme l ruTkubiscbe Gleichungen gehr auf den Mathematiker del Ferro zurack. Es handeh sich dabei eher um ein Verfahren in mebreren Schriuen. Die Nonnal form der kubischen Gleichung lautet
(1.20) In einem ersten Schritt wird d ie Gleichung mil einem Faktor mullipliziert. Danach eine kubische ETganzung ermittelt und in einem weitere n Schritt eine Substitutio n durchgefiihrt. So erh alt man ein e reduzierte kubische Gleichung. deren Losung sich durc h zwei Kubikwu rzeln darstellen Ilts..st. Dleses so erhaltene Gleichungssystem ist nach dem w urxelsarz von Viera losbar. Den Losungsalgoruh mcs als Struktogramm zeigt die nachfolgende Tabelle. T.btllt I-II Strukiogra mm zur Ll>sun}! kubischcr Gkichungcn
Kubische Gleich ung
Xl
+ ax l + bx + c = 0
"3
p =b - -
q=-227·a---3-H 1
a -b
[y = >+ ~J Diskriminate 0 =
(~r + (
*r
D
r = ~-2~J _1 cos(lp)= J
r
27
1.3 Datentypen, Variable und Konsrame
y,='' ' '1fl "" (3"+T ~ "l
Yl = 2· ' r vcos
""
{~
4.')
Yl= 2·- r vco "3+ 3ITO
Drei reelle Losungen. Yon denen Lwei idemisch sind
YI= 2.g
Y1 = YJ
=-V- ~
0 >0
Eine reelle Losung und zwei konj ugiert komptex e Losungen
u= V- ~+ .[r5
v=H-ro Yl
Y2.J
=
=
U+
v
- (u + v)+ i . J3 · (u - v]
z
C ud\' 1-6 Anwendungsbc lsplcl - Losung eincr kubis chen Gleichung
1* Kub i s c he _Gl e i chung . c pp
Dieses Programrn bes t immt d ie Losungen e iner kub i s c he n Gleic hung nach del Fe rro
' include ' i n c l ude <mat h . h> int mai n () { II Dekl arationen fl oat a, b. c r f l oa t p , q . r , S, u . v . w, z ; fl oat D; fl oat yl , y z , y 3 , y 2i, y 3i, x j , x z • x3 ; fl oat f = 0.3333333;
2M
1 Gruncllagen clef Programmien mg
II Eingaben cou t « "Ge ben Si e d ie Fa k t o ren e in " « endl ; cou t « " z u r Glei chung: " « endl ; c out « " x ~ 3 + a x ~2 + b x + c : 0" « endl ; cou t« ----- - - - - - - - - - - - - - - - - - - - - « e n d l ; cou t « "a : " ; cin » a ; cou t « " b : "; c i n » b; c out « " c '" "; cin » c; cou t « e ndl « endl ; cou t « " Di e Loesung der Gleic hung "; c cur « " x~3 + .. « a « " x " 2 + " « b « " x + " « 0" « endl; cou t « " l a u t e t:" « endl ; II Aus wertung p : b -pow (a . 21 /3; q : (2 "pow( a. 311 / 27 -( a " bI /3 +c; 0 = pow ( (ql2 l. 2 1+pow ( (p /3 1 . 3) ; "Oe t e rm i n a n t e D : " « D « c out «
endl ;
i f ( 0<01
I
s q r t( - pow( Ipl3l . 3 1 1;
r r
- ( q / 2) I r ;
atan (- z /sq r t ( - z " z + ll) +2 " a t a n ( 1) ; y1 : p ow (2 "r . f J " c o s (w/ 3 ) ; y2 : p ow (2 "r . f 1" c o s (w/ 3 +B" a t a n (l)I3) ; y3 : p ow (2 " r . f ) " c o s (wl3 +1 6 " a t a n ( 1)13) ; y l - a l3 ; xl x2 y2 -al3 ; x 3 : y 3 - a l3 ; cou t -c ·x1 : « xl « e n d l ; « cou t -c · x2 : x2 « e n d l; « x 3 « e n dl ; cou t « · x 3 '" w
I
e lse {
i f ( D : : O) (
y1 y2 y3 xl x2 x3
• • • •
2 "pow( (-q/2) . f) ; p ow( (-q/2). f } ; y2 ; y 1 -al3 ; y2 -a / 3 ; y3-a /3;
cou t « cou t « cou t «
I
else
I
"x l
•
-xa •
"x 3
« « «
xl « x2 « x3 «
endl; endl; e nd 1 ;
c «
" :
29
1.3 Datentypen, Variable und Konsrame s = sqrt (D); z '" - (q / 2 l +s ; i f ( z >::Ol u:: pow ( z, f l ; e l se u'" -pow ( (- z l , f l o z '" - (ql2l-s ; i f ( z >"'OI v '" pow (z, t l ; else v "' - (( - z l , f l ; yl = u +v ; y2 '" - (u +v l l2 ; y2i '" sqrt ( 3 1+ (u -v ) /2 ; y 3 :: - (u +v ) / 2 ; y 3 i = -sqrt (3 ) * (u- v I /2; xl y l - a l3 ; x2 = y2-a l3; x3 :: y 3 -a /3 ; cou t « ~ x l :: « xl « cou t « -xz :: « x2 « « x3 « cou t « ~x3 '"
endl ; +
i~
«
• + i · «
y2i « y 3i «
e nd l ; endl;
II Stop s yst em (. Pa us e ~ I ;
~ i t Hilfe des ersretne n Progra mms lassr sich das nacbfolgende Berecbnungsprobte rn ldsen. Ein Blechtrichter nacb Bild 1-13 hat die Querschnittsform eines gleichseuigen Dreiecks und em Volu men von 1814 cm1. Gesuc hr ist der obere Durchmesser des Kegels. denn bier soli em zylindri sches Rohr angeschweiut werden.
,
.
Kild 1· 13 Gcschwcibrcr Blcchtrichtcr
Das Volumen bestimmt sich aus der Pormel V=
; ·(~r ·h.
Da der Quers chnin ein gleichseitiges Dreieck iS1. Iolgt rUT die Hohe
( 1.21)
30
1 Grundlagen der Prog ramm ien mg
(1.22)
Damit ergibt sic h d ie kubisch e Gleicb ung
d l _ 24 '~ =O =dJ _ 8000
( 1.23)
Jr · ,, 3
Mit lI ilfe des Pro gramms ergibr sich cine reeue Losung. DeTDurcbrne sser isl 20 em groB .
Ceben S i!! di e faktoren "in " " r Gle ic hun g : ,, ~ 3 • " " A2 • h " • c _ 8
••.....
•b
-
o
Di l! Lo e sung der Gle i chung " AJ • 9 " A2 • H " • - 8800 l
tlel ",...in",nt" D
,,1
'
28
=
1.6 ,,'887
,,2 • -11'1 • i17 . J285 ><3 = - HI • i - 17 .32 85 Dru ck.. n S i e " ine beliebig l!
ra s ee
.
•
. •
Hlld 1·14 Hrgcbms zum Berccbnun gsbcispiel mit ri ner recllcn l (lsung x I
Obllnge n w etchen Durchme sser haue ein Kugelbehaher bei g leicbem Volumen'? Es g ibt auc h cine Losungsform eln filr Gt eich ungen mil vier Unbe kannren. Sic: wur de von dem Italiener L Ferra ri ( 1522- 1565) gefunde n. Ferrari war Schuler von G . Cerdano, der d ie Forme! m it in seine •A rs magna" au fnahm.
Die' allgemeine Gleichung 4 . Grades hat die Form
a",4 +hx ·l +cx 2 + dx+e = O .
( 1.24)
:'vi iI Hilfe einer Subs titutio n ergib t sich daraus
y4+ p/ + qy+ r = O.
( 1.25)
1.4 Ope rato ren und Ausdracke
31
1.4 Operamre n und Ausdriicke Operaroren beschrelben Op erauonen, die au f den j ewerligen Darentypen zu llissig sind. Die Verknnpfung von Variab len und/oder Konstanten uber Operaroren wi rd als Ausdruck be zeicbnet. Der so gewon nene neue Wert wird als Wertzuweisung mit dem Operator (=) e iner neuen v an abten zu gewi esen. Syn tax : Anwendung von Operaroren
I Namel
:: Name2 Opero/lt o rl Name 3
[Ope r a tor2 Name 4)
_' u ml'ri k Fur ganze und reelle Zahlen gelt en in erwa gl eich e Operaioren. T. btll t 1-12 Numcnsche Opcraroeen
Operator
Datentyp
Bezej chnung
Ga nze Zah len
Ree lle Zahlen
+
erlaubt
erlaubt
Additi on
-
erl aub t
erlaube
Suhtrakt ion
•
erlaubt
er laubt
Mul tiplikation
I
erlaubt
erlaubt
Division
%
erlaubt
Modulo Division
++
erla ubt
lnkrement urn I
--
erlaubt
Dekrement urn I
Beispiele: No rma le und verk urzte Darste llung von nume rischen Operatoren
•
b
c d
• • • • • •
•b -•
•
7, II ve r ktlr z t 0- 7 10 ; II verktlrzt b - • 10 c , 3, I I v e rkUr zt c ' . 3 d I 2· I I verkUrzt d 1::2 1, II ve rkUn:t I I nk r erne n t f II ve r kUr z t f - - I Dekrernent
•f • •
"
...
PriiJh un d Pos tfix
Den lnkrement- und Dekreme nt-Ope raror gibt es in der Praflx - und in der Postfix-Vers ion. Sie unters cheide n slch ledigfich durch ihren Ruckgabewert.
Beispiele: Praf lx- und Postfix-Operationen int a::2; int b . c ;
b :: + +a; b ::a++;
c ::--a ; c ::a - -;
/I Pr ~ f i x liefe rt b::3 . a =3 // Pos t f i x liefert b =3. a =4 // Pr ~ f i x liefe rt c=3. a =3 // Pos t f i x lief e r t c ::3. a:: 2
32
1 Grundlagen der Programrmerung
Logik Variablen lassen sich mil Vergleichsoperat oren verkn upfen . Diese Ausdru cke liefem eine der boo leschen Konstanten true oderlalse. Tllbt'llt' 1- 13 v crglcichsopeatoren
Operator
Bed eutung
:: =
gleich
!=
ung leich
< ~
kleiner gleich
> ~
gro8er g leich
<
kleiner
>
groBer
Beispie le: Anwend ung von Vergleichsope ratoren
(23 == 45 1
(7. 55 < 8 .22 ) ( ' a ' < 'B' ) ( 3 > 3)
II II II II
lie fert f a l s e
lie fe rt t rue
lie fe rt f a l s e lie fert fa l s e
Logische Ausdrtlcke kennen mit nach folgenden logischen Opereroren kombmi ert werden : Ta helle 1-'-' Logischc Opcrarcren
Operator
Bedeutung
&& II
logisch UN D
!
Nega tion
logisch DD ER
Diese liefern die aus der Boolesch en Algebra be kannten Wahrh eitstabellen . Beis piele: Anwendung logisch er Operaroren
o < Hoehe && Ho e h e < MAX_HO EHE a:bll c :b Kr af t
!:
NULL
Op erat or slzeof Mit dem Operator sizeo f karin der Speicherbede rr von Variablen und Daten typen bes um mr werden.
1.4 Operatoren und Ausdracke
33
Syntax : A ufruf als unarer Operator oder als Funktion s i zeo f Au s d r u c k si zeo f (Aus d r uckl
// u n a r e r Ope r a to r // Fun k t i o n s a u f ru f
Darin ist Ausdruck in ein fachsten Fall eine Variable. Fur den Funktionsaufruf ist a ls Ausdruck auc h ein Datenlyp erlaubr. Das nachfolg ende Programm erminet t den Speicherbedarf des benutzten Sys tems. COOl:' 1-7
An\\l:ndun~sbe i spic l
- Besiimmcn g des Spe jcherbedarfs eimger Datem ypc n
/ * Speicherbedar f.cpp
.,
Das Progr amm z e i gt den Speich e r bedar f v e rsch iedener Oa tentypen
'inclu d e
/ * Zeichenkonsta nte * /
i n t rnai n (v o i d) {
/ * Ze ichen v a riable * /
cha r c h = ' x'; bool s top ; cou t cou t cou t cou t c ou t c ou t cou t
« « « « « « «
· s i z eof ·si zeof ·s i zeof ·s i zeof · s i z eo f · s i z eo f ·s i zeo f
int • « s i zeo fl i n tl« endl; c ha r « s izeo flch a r l « endl; ch « si zeo flch l « endl ; wchar_t « s izeo flwcha r_ t l « e ndl; fl oat = • « s i z eo f t f loa t l « e ndl ; double = • « s i z eo f t double l « endl; l ong double « si zeof ( long double l «
=• =• =•
=•
e ndl;
c In ~~ s t op; re tu rn 0;
Das Programm tiefen zum Beispiel folgende A usgabe : s i zeo f s i z eo f s i z eo f s i z eo f s izeo f s i z eo f s i z eo f
i nt = 4 c har 1 ch 1 wcha rt_t 2 fl o at = 4 doub l e 8 l ong double
=
=
=
=
= 12
nncpcraunncn C++ bietet auch d ie ~ og l i ch k eit. einzelne Bits von Ganzz ahlen mithilfe von Bitoperationen I:U beemrlussen. Bitoperationen sind nUT auf Ganzzahlen zulassig. Bis auf den Bitope rator .Schiebe rechts' arbenen aile Buoperatoren vorzeichenunab hangig. d . h. sic wirken auf sign ed- und unsigned-Daten gleich.
34
1 Grundlagen der Prog ramrmerung
Bitop eratio nen sind bina re Operationen. d. h. d ie Ganzzahl wird hier als eine Komh ination von
o und 1 Bils ausgewe rtet.
Urn einzel ne Bits inner halb eine r Ganzzaht zu beeinflussen, s rehen die nacbfolge nden Bitoperationen zur Verfiigung: U ~ D -o p('ra l io n :
Zwei Ganzza hjen werden dUTCh den Operator (&) UND verknupft. Syntax : An wendung des UND-Operators
I Er g e bni s
= Ope r an d I " Ope rand2 ;
Die UND·Verknlipfung liefert als Ergebnis nur an randen ein l -Bit besuz en .
oen Stellen ein
l -Bit. an denen be-ide Ope-
O DER-Opcralion: lwei G anzza hlen we rden durch den Operator (I) D DER verkn apft . Syn tax: Anwendun g des DOER-Operators
1 Ergebnis = Operand I
I
Operand2 ;
Die O DER-Ver knupfu ng lie-felt als Ergebnis an den Stellen ein l -Bit . an denen mindestens ei ner der Operanden d o l -Bit bes itzt .
EXC LUSI\'· ODE R-Oper ation : Zwei Ganzza hle n we rden durch den Opera tor (") EXCL USIV-OD ER verknu ptl. Syntax: Anwe nd ung de s EXC LUS IV-ODER-Operators
I Erg ebn i s
= Ope randI " Ope rand2 ;
Die EXCL USIV-ODER-Verkn upfung lie fert als Ergebnis an den Stelte n ein l -Bu. an denen beide Op eranden un terschiedl iche Bits be sitzen. ~ ega l i() n so p{'ratio n
( Ie r-Komp tcmont) :
Zum ln vertieren alte r Bits eines Op eranden wird der Op erator (- ) verwe nde t. Synta x: Anwendung des Nega tionsoperators
L§':gebn i s = - CI.peran~~~;
---.J
Das Ergebnis enthdlt an den Stelle n do l -Bit . an denen der O perand ein O·B it besitzt und umge kehrt. Man bezeic hnet diese Operat ion auch als Bildung des l er- Komplements. Schichl.'° I)Crafillnl.'n
Au Ber den Bitoperatio nen stellt C++ auc h noch Operetoren zur Verfugu ng, urn die Hils einer Ga nzz ahl um ein e bestimmte An za hl von Positionen nach links od er rechrs zu schie ben. S H IF T· U : J-'T O p creuo n :
Eine Ganzza hl kan n mithilfe des Operators « <) urn ein e bestimmte Anzahl von Bits nach links gescbobe n werden. Syntax: SH IFT · LH'T·Operalor
I Ergebni s
= Gan z z ah l «
Bi t anzahl ;
1.4 Ope rato ren und Ausdracke
35
Die rectns frei werdenden Bits werden mit 0 au fgeflillt und Uber illufe werde n verworfen.
SIIIl-T-RIG l ll' Operation : Der Operator (» ) schiebt eme Ganzzahl urn eine bestimrnre Bitanzahl nach rechts.
Syn tax : SHU'T -RIG HT-Operalor
I Er ge bn i s
'" Gan z z ah l »
Bitanzahl;
lst die Ganzzahl vorzeichenlos (u nsigned). werd en d ie link s frei werdenden Bits mit O aufgerulil. Bei pos itive n vorze ichenbe banete n Zahlen w erde n die frei werdenden Bits ebenfalls mil o aufgefttln . Bei negauven Zahlen iSI das Ver hahen It. ANSI C++ undefi niert. In der Rege l werden die frei we rdende n Bits aber mit dem vorze icbenb it (bochstwertiges Bit, bei negativen Zahlen gleich , I' ) aufgeffi lll.
Kurzschretbwelsen Genauso wie bei den Gru ndrec henoperarionen steben auc h rur die Bit- und Scbiebeoperauonen entsp rechende xurzschreibweisen zur verfugung. die in der nacbfolgenden Tabe lle aufg efuhrt sind. Beispie te: Kurzschreibwei sen
x• X X X X
• • •
X&¥ x l¥ X'¥
x «y x»y
verkUrzt verkUrzt verkUrz t verkUr z t // verkUr zt /I /I // //
rUT Schiebeoperationen X &- ¥ X I- ¥ X ¥ X «'" ¥ X » '" ¥
'.
Das nachfolgende Programm dient zur einfachen Beuach tung der versc biedenen BitOpe rationen. C ed e 1-8 Anwcndungsbeispiel -, Bitopcrationcn
1* Bi t Operat i onen . c pp Bei s piele "/ ' i nc l ude ' i nc l ude using std: : c out; using std: : end l ; II De f inition der benu tz ten Var i ablen sho rt myVall '" OxAF19, myVa l 2 '" OXBE2 8; II Ha uptprogramm in t ma i n ( l{
un si ~n e d
II Umstellung der Aus ga be auf h ex mi t Anga be de r Zahlenba si s cou t « s t d:: he x« std::showbase; II Die Variablen c out « e ndl ; cou t « - myVa l l: «myVa ll« e ndl ; cou t « - myVa l 2: «myVa l2« e ndl ;
36
1 Grundla gen der Programrmerung
II High-Byte d er Variablen ausgeben cou t « ~ High - Byte von • « myVall « " : « ImyVa l 1»8) « endl ; II Low-Byte der Va r i a b l e n ausgeben cou t « "Low-Byte v o n "« myVall « « ImyVal l&Ox FF) « e ndl ; II Ei n faeh e Ope r a t ione n cou t « endl ; cou t « · myVall & myVa1 2 , « IrnyVa ll & myVa 12) « « cou t « -rnyVal l I myVa12 : (myV a ll I myVal 2 ) « « cout « -rnyVal l myVa12 : (myVa l l myVa12 1 « « cout « " - myVal l : (- myVall l « endl : II zurUckstelle n der Ausgabe a u f dezimal cout « std::dec; II 2e r Potenzen 4usgeben cout « endl ; cou t « .2 hoch 0: « (1 « 0 1 « « cout « .2 hoch 1 : 11«11 « « ( 1«2 ) « cou t « .2 hoch 2: II Division du rch 2e r cou t « e nd l ; cou t « "2 4 4 / 4: < <: cou t « "244 /8 : « cou t « "24 4 / 16: «
1244»21 «
endl ;
( 2 4 4 )> 3) « ( 2 4 4 )> 4 ) «
endl ; endl ;
Das Programm liefert die fclgende Ausgabe: myVall : Ox a fl9 myVa!2 : Oxb e 2 8 High-Byte v on Oxa f 1 9 : Oxa f Low-Byte von Oxa f 1 9 : Ox19 myVall & myVa12 : oxeeca myVa11 I myVa12: Oxbf39 myVall myVa12 : Ox1l 31 - myVa11: Ox f f f fSOe6
"
2 44 /4 : 61 24 4/ 8: 30 244 /1 6 : 15
endl ;
Potenzen
s ys t em(" Pause -j; return 0;
2 hoch 0 , 1 2 hoch 2 2 hoch 2, 4
endl ; endl;
e n dl;
e n d l; endl ;
37
1.4 Oper atoren und Ausdracke 5 1andard fu nkl iOlicli
Berens in den vorangega ngenen Beispielen wurde n einige Funkrionen aus StandardBjbhotheken verwender. Eme Ubersicht aller fUr C ++ angebotenen Bibliot heken mit den darin enthalte nen Funkt ionen linden Sie auf meiner Website. In der nachfolgenden Tabe lle sind einige der wichng sren aufge flihtt. Die Praprczessor-Anweis ung zur Embindung tauter:
I l i nc l ud e
< f i le. h,..
T abt'lIt' 1-15 stdl ib.h
Funktion
Bescbreibung
,,. zu ve r g leich ender GrOSen Liefert MinilllUDl i. ,,. :u v ergleichender GrO Sen
typ -...x (typ x . y )
Liefert Maximum i . x und y
typ min (typ x .y )
x und y
in< rand (void)
Liefe rt e i ne int-Zu fall szahl zwis chen (2 " -1
o """
in< randoat lint li m)
Liefert e i ne int-Zufal l szahl zwi ac hen +l im - 1
o """
in'
St a r t de. Zufa11szahlengene rat or a vor rand/ r~ e i n setzen
r~doIDize
double at o f (cons t ' he<
-. J
Wande l t Str ing ungOltig )
•
i n doub le- Za h 1 ( _0 S t r ir19
doub l e at oi (cans t ' he<
-' J
W&nd", l t St ri ng ungOltig )
•
in eine int-Zahl
d ouble at ol (cans t c ha r
-. J
Wande l t String ungtilt ig )
•
in a i ne long-Zahl 1_0 S t r i ng
d ouble a t r t od (c on s t c ha r *s . c ha r *' endp t r )
..
-
,-0 String
Ein String wird in e ina d oubla -Z ahl konvertiert
c ha r *u l t oa (un s i gned long in' h ,
Wand ",l t uns igned long x in einen St ring zur Basis h (2 . 8 , 1 0 , 16 )
char *ltoa ( l ong x , c holl r ' s ,int h ,
Wand"'l t long x in einen S t r i ng 'u, Basis b (2 , 8 , 10, 1 6 )
c ha r ' i t ooll ( int x , c ha r *s ,in t h ,
Wandelt i nt-Zah1 x in e i n en St ring zur Zahlenbasis h (2 , 8 , 1 0 , 16 )
in' sy a tem(cons t cha r *b e f eh l )
DOS-Bef eh1 a ktivie rttn
Voi d *c a l l oc (s i z . _ t nmmnb, d siz. _t s i z. )
Al lok i e r t Heap vo n nrnemb in de' Lllnge s i ze und 1ie fert Ze iger euf den He ap (NULL bei Ni chter f olg )
void ' maI I oc (s i ze _ t size }
All ok ie r t Heap in der Lllng e s i ze und I i.fe r t Zeiger au f d~ He ap (NULL bei Ni cht e rf ol g )
vo i d ' r e a lloc (vo i d "bl , aize _t s i ze'
Ji,ndert Heap au f Lllng e s i ze und lie fer t Ze iger au f neuen He ap (NULL bei Ni cht e r f olg )
x . c holl r
- ,.
••
. Paua .-
...
1 Grundlagen der Programrmerung
Void f r e a (*p t r l
Gi b t Heap , zuvo r mH mall oc l ca l l o c allokiert wurde f r e i
Voi d e x i t ( i n t aIel
Abbrueh mit OberO'abe d •• Error-c ode s (0 bo i OK- Abb ruch l
Tll bdlr 1-16 math.h
Funktion
Beschreibung
in< ab. ( i nt x l
Liefert den mathem. Ab s olut bet u, O' von x
doub l e a cos (d oubl e x l
Liefert arc c o s (xl
doub la a sin (d ouble x l
Liefer t a r c sin (xl
doub l. at an (d oubl e x l
Liefert arctan (xl
doub l e a t an2 ldouble y . x l
Liefert aretan (y /x )
doub l . c . il (d ouble x l
RWld e t x auf Ganz z a h l
doubl . c o.(doubl . x l
Lie fert cos (xl
d oubl e c o s h( d oubla x l
Liefert cosh (x l
d ouble sin (doubl a x l
Liefert s in (x l
double si nh (doubl. x l
Liefert s inh (x l
doubl e tan ldou b l e x l
Liefert tan (xl
d ouble tanh (doub l a x l
Liefert tanh (xl
d ouble
f ll ~
(doub la x l
d ouble f l oo r (d ouhl e x l
Liefe rt a b s olutwe rt von x Liefertn~ch stkl.in.r.
Gan:u :ah l von x
d ouble fmod (d ouble x , y l
Berechnet x ""'" y
d ouble fr exp ld ouble x , i nt *exp l
Gi b t f ilr x Manti " ". IEr O'ebn bl und Ex ponen t e n
double hypo t (d ouble x , y l
Hypothenuse de s r ec ht wi n kl i g e n Dr eie eks Ka t he ten x . y
,=.
i n'
lll ba (lonO' int x l
double Idexp( double x , int
fa,
Li efer t den Abs olutbetraO' v on x Berechnet
x* 2~
."PI
doubl e lOO'(d oubl e x l
Bereehnet ln x (natilrlicher Logarithmus l
d ou b le 100'1 0 (dou b le x l
Beree hnet lOO', ox (d e kad i$ e h e r Logari thmu sl
d ou b l e p ow{d ouble x , y )
Bereehnet x'
doub l e p owl O(dou bl e x l
Bereehne t
doub l e s q r r Idoubl e x l
Liefert d ie Qua dr atwurze l v on x
,,'
( Po t e n zi.r .... ) ( Po t e n z ie renl
39
1.4 Operato ren und Ausdracke 're beue 1-17 iostream.h
.u.
Funk tion
Beschreibung
ce r r «
Gi b t Zeic hen f o l ge 9b. . . t de r r -.t ream
cin »
Li e s t Ze ichenfolq e tibe r . tdin- .t r eam . i n
l nt f ile . c l o. e (c ha r· f i l ename )
Sc h l i eSt d i e Oatei fil ename IO_ok)
e='
Gibt Zeichenf olge fiber s t dout -.t ream
«
c ha r · f il e . g e t ()
Lies t Zeile Von o f fene r T.xt da t e i
in' file .open (char · f ile name )
Of f n e t di e Oatei f il en_
cha r · f ile . r ead l . pec )
.u.
IO-okl
Lie s t sequen t i a l I Anzahl ~ Byte. VOn akt. aus o f f ene r Binardat .i
'00
c ha r · f i l e . wr i t e l spec )
Sc hre ib t s equentiell an akt . Po•• Anzah l von Bytes in o f fene S i narda t e i
T lbt'lIr 1-18 time.h
Funknon
Beschreibung
Cloc,,"-t c l oc kl vo i d)
Liefert Zeitqr 6B.e a la c loc,,"-h . S. k: Ic lock2c ioc k l 1/C LK TCK
Cha r · ct i me (c onst time_ t · t ime )
Time wi rd in S t r illO' ve rwande lt (Hen Jan 8 10:10:22 2008 \n \ Oj
l n t qe t time (.truc t ·ti)
Li e f er t oII- k tue l le Zeit ( t L t i ...Jlli n, t i . t i _ ho ur . tL tijiund. t i _t i_s e e l
,,-
Time_t lt ime_t ·t i mer )
Lief er t Anzah l de< Sekunden . d i . a. it 1. 1. 1970 v.. rqoll-ngen s i nd
Tabelle 1-19 ctype.h
Funktion
Besc hreibung
i n' i aoll-lnwn(in t e l
T.. st , ob c Buchs t oll-be ode< Zif f er (0: f oll- lse/ 1: t r u e)
i n ' i Soll-l pholl- (Z. i chen )
Te s t ob Buc hstabe
i n' i s a s c i! (Cod .. 0...127 )
Te st ob ASCII- Code
in' I s d i qi t (Zeichen )
Te st ob Dezirnalzif f e r
in' I $q r a ph (Ze i ch en )
Te st ob Zeichen d r uckhar
i n' I s I O'W e r
(Ze i che n)
Te s t ob Kl e i nbuch s t ane
i n< I spun ct (Ze i chen )
Te s t ob Sonder zeichen l und i s .pacel
in< I s s pa ce (Ze i c hen )
Te s t ob b l oll-nc . tab .cr . nl
in< Isupper lZ eichen )
Te s t ob GroSbuchstabe
40
1 Grundlagen der Programrmerung
A nw c n d u n gs h cl~pic l :
Lfisu ng vo n G lcic hungen - :'\l inim um/:'\laxim u m
Jede alge braische Gleichung kann in der allgemeinen Form n o- I
3n "- + an_lx
+... + 31"- + 30 =0
( 1.26)
dargestelh werde n. Man sprict a von emer G leichung n-ten Grades. FUr n > 4 gibt es keine Losungsformel. Das iSI mathema tisch bewiesen. Betra chtet man diese G leichung als Funkrion ( 1.27)
so ergeben sich einige Losungs verfah ren. Durch die Entwicklung der Computenechnologie haben die so ge nannten lteratio nsverfahren eine grobe Bedeutung erlangt , lassen sich di e Losungsrneihoden doch in Form von lterationsschleifen programmieren. die solange durchlaufen werden, his die gewanscbte Genauigkeit erreicht ist. Betra chten w ir di e Methode Regu la Falsi (Bild 1-15). Bezeichnen wir die zu sucheode Nullsretle (Wur..el ) emer sretigen Funktion ((x) mit X(j . Bei der ~ ethooJe erse tzt man di e Kurve ((x) im Interval! (ltl. l(2) dur ch eine Sekante (lineare Interpol ation). Der Schnittpu nkt mit de r ItAchse It ] ist d ie angenahen e Losung rur xo. Eine wiederhohe A nwend ung d ieser ~ ethode mit den Naherungswen en liefert eine Losung mit hinreichender Genauigkeit. v oraussetzung ist die Stetigkeit der Funktion. Eine ahnlic he Methode ist das Newtonsche Verfahren. Diese Verfahren funktionieren nicht nur bei Funkrionen, die als Polynome gegeben sind. so ndem genere ll fiir sterige Funktionen.
, ,
x Sckante
Bild
l - I ~ Mc l hod~
Regula h is!
A ls konkretes Beispiel betrachten wir ein en zylindrischen Behalter nach Hild )·16. Bei vergegebenem Inhalt soli die Herstellong mog fichst wenig Material verbrauchen. Das Volumen bestimmt sich
-. ,
h
I
~::t=7 -' BUd 1-16 Zylindrischer Behahcr
( 1.28)
4'
1.4 Operatoren und Ausdrac ke Die Oberflache. die eigentlic he Zie lgrofe. bestimrm sich aus
2 V 0 = 2 .n . r 2 + . .
( 1.29)
r
wenn man flir h d ie umgest ellte Volumengleichung einsetzr. Nun suchen wir nicht nach einer Nullstelle d ieser Funktion. sondem nach einem Bxuemwen. namlich dem ~ in imum . Es gill fUr stetige Funktio nen, da s an der Stelle eines Extrem wertes der Funktion flx ) ihre ers te Ab leitung y' .. f(x) das v orzeichen wec hselt. Em lixrremwert der Ableitung ist wiederum an ibrer Abteinmg, der zweiren Ableilung zu erkennen . 1st d iese an dieser Stelle posi t iv. da nn liegi ein Min imum vor , ande mfa lls Ableirungen der Obert lache ergeben
em Maxim um . Die
,--2·r Y-
( 1.30)
.. 4 4·Y 0 = · It + - - ·
( 1.31)
0' = 4 ' :11: un
"
Stetlen wir zuna chsr den Algorithmus fUr d ie M ethod e Regu la Falsi auf. T abdle 1-20 zeigt d ie Meihod e in der angemeinen Form eines Struktogramms. Ich benutze dazu eine Tabellenfonn. So lassen sich Suu krogramme schnel l ers tell en T ah fl le 1·20 Su uktogramm zur Methode Regula Falsi
Emgabe Bestimm ung zweier Stanwerte x l und x2. so dass flXI )>O und f(x2)
1st f( x) > 0
J,
Nein
xj v x
x2 = X
So lange wie :r <x): >
c
Ausgabe x Nun ersetzen wir die allg emeinen Bedingungen und Formel n durch die speziellen unseres Beispiel» und erhalten so einen A lgorit hmus. wie in Tabetle 1-21 derge stellt.
42
1 Grundlagen der Programmien mg
"1IIb('lIe 1-21 Bcsrimmung dcr minimalcn Dbcrflacbc
Eingabe
Bestimmung zweier Srartwerte dj und d1. so dass O'(d j) > 0 und O '(d!) < O. Abschaltwert der lterationsschleife c
d=d-O'(d) I
I
d, - d, O'(d 1) -O'(d l ) 1st O'( d) > 0 Nein
J' d] = d
dj
e
d
So lange wie ]f( 'l ~ > c Bestimm e O "(d)
Ausgabe d und Angabe ob Minimum oder Maximum C OO t 1-9 Anwendu ngsbcispicl -. Minimalc Oberfl ache 1* Mi nOberf l a e c he . cpp
.,
Das Pr og r amm bestimmt d i e minima Ie ei nes zy l i nd r i s c he n Beh~l te rs be i v orge ge benem Voh une n
Ober f l ~c he
' inc l ud e 'inc l ude <math.h> cons t doub l e p i : 4 *ata n ll l ;
/ / Kon s t a n t e p i
II Rad i u s in em dou ble Rad (doub l e d} {
r e t urn d/2;
II Ober fl~c he i n cm~ 2 doub le Ob( do ub l e V, doubl e d} (
II 1 . Ableitung der Ober f l ac he double Ob ll doub l e V, d ouble d ) (
return 4 *p i *Rad (d ) -2 *V/ (Rad ld ) *Rad ld l ) ;
43
1.4 Operatoren und Ausdracke
II 2 . Ableitung der Ober f l a e h e d ouble Ob 2( doub l e V, d ouble d ) (
r e t urn 4* p i+4* V/ 1Ra d (d l*Rad (d )*Rad (d ) ) ; i n t me Ln (I d ouble V, dl , d2 , d, e; d ouble 0 1 , 0 2;
bool H;
eou t « endl « c i n » V, c out « e ndl « cin » dl; cou t « e ndl « c i n » 02 · cou t « endl « ci n » c o ut « e ndl «
..
" Vol ume n lc cml V ·St a r t we r t
[= l d1
•
o .
· St a r t we r t
{=I 02
•
o .
" Absch a l t g r e n z e
{
i f (02)::0 1 {
f al s e ;
l
else {
i f (0 2 ) ::0 ) (
d :: dl ; dl d2 ; d2 :: d ; )
e lse {
M
. .,
· d \ t \ tO \ t \ t O' \ t \ tO · • • «
II Star tObe rp rU fung H :: true ; 0 1 :: Ob I (V, dll ; 0 2 :: Ob I (V, d2 1 ; i f (0 1 ) ::0 1
M ::
. ·,
fa l se ;
J
if {M::::t r u el {
II Bere c hnung do (
d :: dl- ol * (d2 -dl l / (02-0 1 ) ; i f tcer :v . d l> Ol dl :: d ; e l se d2 :: d ,
e n dl ;
44
1 Grundlagen der Programmien mg cou t « c out «
d « " ' t \ t " « Ob(V, d ) « - \ t \ t " ; a b l( v. d ) « "' t \t « Ob le v , d ) « N
e ndl ;
}
1/ Abbruchkriterium while ( f a bs(Ob l( V, d l l > e ); cou t « d « "\ t\ t" « Ob lV, d ) « " ' t \t " ; c out « Ob l(V . d ) « "\ t\ e" « Ob 2( V, d l «
endl ;
}
el se cou t «
·S t a r t we r t e f a l s ch ! " «
e ndl ;
Das Programm bestimmt einen optimale n Durcbm esser mit 3.99313 em. I) ol .. _n
I ~
S t ...... ..., ...
[cool
$ t .... t...., .. t
le,,1
,
~b =c
.... lt!l'...,n ""
" "
8.81
o
o'
99.';(,22 "18. '' ' - ' 7";. 1f>2? n .(,877 'X, . 9 1.lli8 7(, . 1 372 7(, .8594 ?S .7'8('7 7"; .s '182 7";. 1 191 7";.Hil2 ·l!. . 2 ?f, 6
2 . 17881 J . 18'n2 4.tr)] ..
.r• J IB it1 1 . 4 832
) ...9814
3.""'.1'>
] .(, )211
3 . 1.89 4 9
]. 7 ]94 1
].78 284 1. 82l1i(,3 3.85]" 3 .111121 3 . 9 l1i(, 98 3.92U3 3.9 4'146 3.96385 3 .9'1Il1 ] . 9 911"> 1 .80129 3.9919 1 ].99]1J ].99313 D";kl<.on
..
'"
~
~.2263 ~ .l't15 ~.16·1Il
~.1522
75.1 423 75.1365
~,IJJ5
S l~
75 .1325 75.1328 75.132 5 75.132 5 7 !> . 1325 " In" t."ll"h i
•
T "~ t ,,
-71.31111 -1'1. 3289 1 A88'>3 -15 .9896 - 13 . 1'. '1 - 18.\1835 'L846iH - ·}. 499? -l) .28337 5.11i135 - 4.18 438 -),3%8 -2 .72 472 -2 .14959 - 1.65627 - 1 .23228 - 8 . 8 6 72 4 8 - 8 .552 52 6 - 8 .2888 43 - 8. 84U16 34 8 . 15?l111 - 8.019 6 8 16 8.80348'199 8.80 34849 9
,.. J j, . 237<1
S 3. 1S'S .. 0, .'''84
16'l'.I1l> (,!.'SIB
"6.9""7 SiI . 19 4 8 "7. 81'>7 44.4 2'16
4 3.U.S'
4 1. 2554
rl • .,422
42.1 237 411.52'14 39 .914 39.3948 38.9"38 311."'179 38.2567 3"1.98 15 :1'1,'14<'] 37.7188 :1'1.69<"1 rl.6957
lIi1d 1- 17 Auswertung dcr Minimum-Aufgabc
Ein weireres Anwendungsproblem dieser Klasse suc ht nach einem Maximum. liin Transportbehalte r so li so aus einem quadrat ischen Blech mil der Kantentange a ge formt werden. dass sein Volumen ein Maximum darstellt (Bild 1.18 ). Zur Hersrel tung werden d ie vier kleinen Quadrate an den Ecken eusgestanzt und d ie seitlichen Laschen ge falzt. Das Volumen des Behane rs bestimmt sich aus der Gleichung
V = x(a _ 2x)l .
(1.32)
Die Ah leitungen ergeben hier
V' = 12x l - 8ax +a l und
( 1.33 )
1.4 Operatoren und Ausdracke
45
v" = 24x - f(a .
11.34)
,
•
• • BUd 1-18 Blechzuschnin
Auch hier wird wiederum nach einer Nullstelle der Ableitung gesuchr. Diesmal wolle n wir uns des Newtonsche Verfahren ansehen (Bild 1-19). 1m Gegensaiz zur \lethode Regula Falsi wird stall der Sekante eine Tangenre zur Enninlung einer weiteren Naherung benutzt.
y
Tangent':"
,.)
Bitd 1_1 9 Met hode nach Newlon
Sie liefert nach endtichen ue ranon sschriuen eine brauchbare Losung. Ta hellc 1-22 Struktog rumm zur Methode nach Newton
liingabe Bestimmung eines Startwertes xl Abschaltwen der lterationsschleife r [ (Xl )
x =xl - - -
r'( XI )
xl ~ X So lange wie If (x)' > r
Ausgabe x
46
1 Grundla gen der Programmien mg
Damit sich unsacblich Naherungswerte ergeben. muss im betrac hreten lntervall gelte n f ( x ) · f' ( x )
< I-
f 1.35)
If' f, l]'
lme ressant isl noch . dass diese Method e mit einem Stanwert auskommt. ~Ur beide Methoden ist eine v ora usserzung. da.ss es sich urn zw eimal stetig differen zierbare Punkuonen handeh. Nur dann iSI ein Abbruc h der lterationen gewahrlei srei. T. bl'l ll' 1-13 Suu ktogra mm .lllr Bcsumm ung des maxnna leu Volumens
Eingabe Eingabe der Kamen lange a in em Bestimmung des Startwertes
xI
Abschaltwert der lterationsschleife e V(xl ) x=x , - - - -
V '(Xt)
Bestimme Vex). v '(x) urd V"(x)
So lange wie I f " (x~ > c C udI' 1-10 Anwcnden gsbeispiel -. Max jmales v o fumeu
'*
Ma x Vo l umen. cpp
Das Programm bestimmt den Zuschnitt f Or e i n maximale s Qua der-Vo lumen be i vo r g e ge bene r Ma t e r i a l f l a ch e
'/
' i nc l ude ' i nc l ude <ma.th .h> II Vo lumen i n cmA )
doub le Vo l (doub le a, double x l (
re t urn x* (a.-2 * x) * ( a -2 * x);
II 1 . Abl eitung des Volurne ns d ouble Vol l(double a, d o ub l e x ) {
r e t u r n 12 *x *x -8 *a.*x +a *a ;
/1 2 . Ableitung des Volumens double Vo12 (double 4, d ouble x l {
return 2 4 *x -8*a ;
47
1.4 Operatoren und Ausdracke
int mai n ( ) d ouble a, x , e ; bool H; int i ; cout « endl c ,n » a; c out « endl d n » cou t « e n dl c in » c o u t « endl
.."
«
" Ka n t e n l a e n g e
«
" St a r t we r t
«
"Abs c h a l t g r e n z e
«
- x\ t\ t V\ t\ t V '\ t\ t V ' , . «
[em] a = . ;
. ., • ..
Icml x
e ndl ;
I I ge r e c hnunq do [
=
x x -Voll (a, x ) /Vo I2 (a , x l ; cou t « x « - \ t \ t- « Voi la , a l « " \ t \ t· ; cou t « Voll (a, x l « " \ t \ t" « Vo l 2( a, x ) «
e ndl ;
]
II Abbruchkriterium wh i l e ( f a b stVo l l( a , x l ) > e l ; cou t « x « -\ t\ t - « Vol (a , x l « " \ t \ t"; c o ut « Voll (a , x l « -\ t\ t" « Vol2l a, x l « s ys t elll (" Pause " I ;
endl ;
Das Programm bestimmt eine oprimale Hohe von 8.333 em.
8i1d 1-10 Au swertung dcr M axirnurn-A ufg abc
Ub ungon
Suchen Sie weitere lixtremwert-Aufgaben. wie r . it: Ein T richrer soli aus einer BlechKreisscheibe durch herausschneiden eines Kreissektors gefonn t werden ;.Ail welchem Winkel erha h der Trichter da s groBte Fassungsve rmogen?
1 Grundlagen der Programrmerung
1.5 Anwelsungen Neben de n Ausdriicken und wenzuweisungen sind noch einige Ab laufstru kturen in C++ defi niert. Sd eklion du r ch el nraehc Fa uu nter schcld ung Selektio nen dienen zur Fallunt erscheidu ng und sind von ihrer Darstellun g her leicht verstandIich. Der allg emeine f all: TBbl" lIl"
1 - 2~
Einfacbe hll umerschc:idtmg
tru e
logi scher Ausdru ck
Anweisungen 1
false
Anw eisungen 2
In Abbangigkeit eines logischen Ausdru cks werden je nach w ahrbeirsgeban unterschied hche A nweisu ngen ausgefhhrt. 1st der Wahrheitswert des Iogisc ben Ausdru cks true; werde n die An weisungen I durchgefllhrt. Hei false di e Anwei sungen2. Die Anweisungsblock e werden durch die Separatoren ( ~) und (}) geklammert: Syntax : Selektion durch eiufache Falfunters cbeidung
,
if ( logischer Aus druck l Anwei s un gen l ; J e l se Anwe i sungen2 ;
Besteht der Anwei sungsblock nur eus einer Anweisu ng, da nn konnen d ie Sepnrutcr en entfallen. Der eI.\·e-Te il kann eben nil Is er ufallen. wen n nur Anweisunge n unter ' rile ausgefiihrt werden. In Anweisungsb locken konnen weitere Fallunterscheidunge n stehen. Man spricht da nn von verschac htetu ngen. CUd f l -Ll Anwc ndungsbcispicl - Satz des Heron 1* Heron . cpp Dies e s Pro gramm berec hne t den F l a c h e n inha l t e i nes bel i ebi g e n Dreiec k s n a ch dem Sa t z v on Hero n Of
'includ e < i ost r e am. h> ' in clud e <ma t h. h>
1.5 Anweisungen
49
int main (I I II Dekl arationen double a , b, c, $, f ; II Ei ng aben CQu t « "Se i t e a cin » 1I. ; cou t « "Se i t e b c in » b ; CQut « "Se i t e c = ";
= "; = ";
cin
>:>
c;
II Aus wertung un d AU$911.be s = 11I. +b +c) /2;
,
i f la<s && h<s & & ccs}
f = s q r t (s * (s - a ) * (s -bl * Is -ell; cout « *Flaeche « f « ' \ n';
=-
)
e lse {
CQu t «
- Ei ngabef e h l e r !" «
' \ n';
s ys t em I" Pa use - ' ;
Sele ktion du rch mch rfa che Fa uu nterschc ldu ng
o n sind mehrfache Fallu nterscheidungen ge fragt. die eine komptexe verschachrelu ng von einfachen Fallu merscheidungen erfordern. Zur Vereinfachnng wurde die swh ch-Anweisung
eingefl ihrt: T ab t'lIl' 1-25 Struktur emcr switch-Anwcisung
Ausdruc k Wert_ I : Anweisungen 1 W, rt 2: Anweisu ngen_2
Wert 3: Anweisun gen 3 usw. bis
wen
n: Anweisungenn
Sonst: Anwe isungen nH Syntax: Switch-Anweis ung swi tch I A usdruckj {
c ase !"e r el: An""Ed s un g en l ;
50
1 Grondlagen der Programmierung
case h'ert 2 : Anwe i s un gen 2 ; case [,rert], Anwe i s ungen 3 ; case f1er t N, ArlI\'e i s ung enN; de fau l t : An we i s un g s b l o ckN+ l ; )
Codt 1-12 Anwendungsbeispicl - Volumenberechnung von finitcn Elcrncmcn / * Vo l wnen.cpp
.,
Di e 5e Swi tch - Anwe i s ung berec hnet d as Volumen e ines Zy l inders oder einer Re chteckp l a t t e . je n a c h Inhalt v on Fo ~
. inc l ude 'include <math. h>
l n t mai n () cha r
I
Form ;
l ong a ,b , c ,Vol ;
cout « cin »
"Fo rm ; " ; Fo rm ;
swi t ch ( Fo rm) [
case ' Z' : ' " Zylinder " ' cou t « - Dur c hmes s e r c l o >:> a ; cou t « "Ho ehe " " , c In » bi Vo l=a "a "3. 1 4159 / 4 *b; cou t « ·Volumen " • «
=
break ;
0
,
Vol;
c a s e 'R ' : ' " Rechteckplatte * f c out « "Laenge ", cln » a ; cou t « " Br el t e e l n » b, eou t « " Hoe h e " cin » c ; Vol =a *b *c; cou t « "Volume n "« Vol; b reak; de fa u l t: So ns t cou t « "Fal s che Eingabe!";
= ",
'*
*'
s ys tem (" Pa use" );
Die hrea k-Anweisung verbinden die AusfU hrung nacbfolgender Anweisungen und kann auch er ufallen. Ebenso die dtt cl/llt-A nweisung. Erganzen Sie die Funktion.
1.5 Anweisungen
51
It er ation mit fest er AII,I~ahl " on Wi ed crholungen lteran cnen sind wiederhc fungen von Anweisungen in Abhangig keit von logischen Ausd riicken. hier els Bedmgungen bezeic hne r. Solange die Bedingu ng den Wahrhe itswer1 true besitzt. werde n d ie Anweisungen wiederholt ausgefbhrt.
Die jce-Anweisung ist eine Iteration mit einer Iesren Anza hl von Wied erholu ngen . oft aueh als Schleife n bezeichner. Die Laufvaria ble begin nt mit einem Startwert und wird dann urn eine Schrittweite so lange verandert. bis eine Bedin gun g erreicht ist. T .bl"lIl" 1-26 Iteration mil Ieststcbcnde r Anza hl Wiederbolungen
for {Laufvariablev Startwert; Bedingung; Schrittweite)
I
Anweisu nge n
Sy ntax : Iteration f or
( Lau f va r i a b l e : Startwert ; Bedingung; S chrittweite )
{
Anwei sungen ;
Auch bier kennen bei einer Anweisung die Separa toren ent fatlen. ClIdl' 1-13 Anwcrnl ungshcispicl - Numerische Integration: Das besummte Integral als Fllicht.'fIinhalt /.
Ite rati o n_F I~ cheninhalt .cpp
bestimmte In t egr al als Fl ~cheninhalt: Die Fu nktio n bestimmt den Fl a c h e n i nha l t in n Sch r i t t e n zwis c he n der Pa r a bel y: f (x ):x ' x und de r x-Achse im In t e r vall l <: x <: 2 du rc h Ang a be der Unter- und Obersummen ~s
Of
' i n c l u d e ' i n c l u d e <math. h> i nt ma i n ( ) ( int L n : do uble x , dx , Us:O, Os:O; bo0 1 Stop; cou t « " Iterationen : cin » n; dx: 1 1 (doub l e) n : x:1.0; for
( i: l; i< :n ; ++i )
{
Us :Us +x *x *dx ;
x s.xe dx ,
Os:Os +x ' x ' dx ;
";
52
1 Grondla gen der Prog rammie rung
cout « cou t «
· Un te rsumme = " « Us ; ·O bersumme « Os;
=.
s ys t em(· Pa u s e - ) ;
:\l il hinre icbender An....ahl von heran onen nahern sic h die Summen an. Besti mmen Sic: zusa tzhc h eine Surnme aus den Mitt elwerten , AuBer der Su mmation von Iiniten Rechrecken. kcnnen auch Trapezsegmente summ ien werden. Sc hreiben Sic die jeweiligen Vers ionen .
It er ati on mit voranste hender Be-dingung Die wbne-Anwei sung fiihrt Anwe isungen so lange durcb. wie eine vora nstehende Bedi ngu ng
erfiilll ist. T lIbl'lIl' 1-17 Iteration mit vo ran stchendcr Bedingun g
while (Iogischer Ausdruck)
I
Anweisungen
Syntax : Iteration mit Stanbed ingu ng
,
while (logischer Aus dr uc k l Anwei s ungen ;
Eben falls konnen bel einer Anweisu ng auch hier die Sepa rato ren entfallen. Dadc rch. dess d ie Bedingung am An fang der Anweisung stehr. muss es nicht zur A usfiihrung der Anweis ung en kcrn men, Irn Oegensarz zur t1o-while-Anwe isung, die nach folgend beschrieben wird. CIldl' ! · 14 Anwcnd uugsbcispic l - Nntlstellcnbestimrnung nach d..'r Hiscktionsmcthod c
/ . Null s t e l l e_Bis ek t i on. cpp Di e Funk tion bestimmt e ine Null ste l l e de r math emati s chen Funktion F (x ) =x·x - 7=O na ch der Bi s e k tionsmethode mit den St artwerten x l =2 und x2 =4 ' /
linclude linc l ude <mat h. h> II zu unter s u chende Funktion doubl e f (double x l
,
r e t urn x ·x -7 ;
1.5 Anweisun gen
53
int main () ( i n t i ::O; double xl ::2 , x2::4 ; double yl , y2 ; double x , y ; wh i l e Il x2- x ll > 0.000 1) {
i ::i +l; x ::xl+ (x 2-xl l / 2 ; y =f (xl ; i f (y
xl ::x ; y l ::y ; )
el se (
x2 =x ; y2::y ; )
cout « cout «
· x l , x2 :: • « xl « " / " « xl i « • I terat i onen " « ' \ n';
«
'\n ' ;
s ystem I" Paus e " ) ;
[l b ungen Spielen Sie in diesem Beispiel mil den Stan werten und dem Absc hahkriterium, Sichem Sie d ie Eingabe und den Programmablauf abo
IIcr ati on mil nach folgcnder Bedingung Die do-while-Anweisung fhhrt Anweisungen zue rst aus und macht den Wahrheitswen eine s logjschen Ausdruc ks zur Hedingun g fiir die wiederholung der Anweis ungen. Die Anweisu ngen werden rnmdesrens ein mal ausgefb hrt und wenn der Wahrheitswert true ist wiederhoh . Tandl" I -2M ltcnujon mil nachfolgcnder Bed ingung
do1
Anwe isungen
while (logischer Ausdruck) Syntax: Iteration mit Endbedingung do {
Anwei s un gen ; I while ( l ogi s ch e r Au sdruckl ;
Auch hier k6nnen bei einer Anweisung die Seperaroren ent fallen.
54
1 Grondlagen der Programmie rung
C oM 1·15 Anwcndangsbe ispicl - Nullstcllcnsucbc dUTCh sukzcssive Approxi matio n
1* Null stel le_Approximation.cpp
.,
Die Funktion bestimmt e ine Nu l l s t e l l e der mathemati s chen Funktion y= x *x-7 nach d e r Methode der sUKzessiven Approximation x ::: F ix ) mit dem Startwert x=2.6
'include 'include <ma t h. h > II ZU untersuchende Funktion d ouble f (do ub l e x t {
return s q r t(3 +s q r t( xll; i nt main ()
(
int i=O ;
double xr • x2;2 ; doub l e y L, y2 ; do I
xt exz ; i:::1 +1 ;
x2 =£ lxl J ; while «( x 2 - x l)
cou t « cou t «
;>
0 .0000 1) ;
-xl ,xl::: «xl « I • « x2 « - lterat i onen " -c ' \n ';
'\ n';
i «
system I " Pa use*l ;
return 0 ;
Ir b ungcn
Probieren Sic: das verfabren mit anderen Funktionen, Gib t es irnrner eine Losung? break und continue Die Anwendung de r break-Anwe isnng ..vurde bereits in den Fallunre rscheldungen gezeigt. lhre Anwendung isl auc h bei den Schleifen sinnvoll, wen n kein besse res Resulta t dur ch weitere Durchlaufe zu erwarten ist. Mit der conunue -Anweisung wird so fort d ie nachste Schleife eingeteiter. Auch darmt kann Rechenzeit gespa rt werde n. C ede 1-16 An wcndengsbci spicl - Schlcifcn konstruktion mit con tinue und break
1* Nullstellen_Vergleichend.cpp Die Fun k t i on bestimmt aIle Nullstellen der mathernatischen Fun k tion F lx l =x* x - 7 =0 im Intervall von - 100 bis 1 00
1.5 Anweisungen
./
55
du rc h vergleichende Au s wertung
' i nc l ud e ' i nclud e <mat h. h > II Zu u nter suchende Fun ktion double f (doub1e x l I
r e t u rn x ·x- 7 ;
int main () ( int i, ii , i 2 ; double xu. x l. x 2:: -100 ; double yl. y2: double x , y, II erster Funktionswert mit Vorzeich e n
y2::f (x2) ;
i2::1 ; i f ly 2<0 ) i2:: -1 :
f o r (x =- 100 : x<1 00 : x ++ l {
II Vertaus chung
xl=x2 ; yl :y2 ; H =i2 ; II zwe i t e r Funk t i onswert mi t Vorzeic he n x2::x ; y 2:f (x2 1; i2: 1 ; i f (y2 <0 ) i 2 =-1 ; II Vorzeichen glei ch, d ann we ite r i f (i1:: i2 ) con t i nu e ; c out « "xl, vi- " « x l « • I • « y1 « '\ n ' ; c out « -xa. y2 : " « x2 « • I • « y 2 « • \ n' ; II Nu ll s t e l l e mit maximal 1000 I tarat i onen an nAhern f or (i : l ;i < 1000 ; i ++) {
x oexz - xl ; i f (xO
cout « "Nullste l l e :: " « x l « " I • « b rea k; II Au s stieg a us de r f or - Anwe i s ung }
else x O=x l+ (x 2 -xl ) / 2 ; y =f (xO) , i f (y < 0 ) {
xl =xO,
x2 «
' \n';
56
1 Gro ndlag en del" Programmierung else (
x2::xO;
l
system ( • Pause- ) ;
Ob ungc n Das Beispie l ist zwar sehr konstruiert. es zeigt abe l" ansc hau lich den Sacbverbalr. Analysiere n Sie d ie Scbleilen ko nsuu ktion. Zu beachten isr. dass co ntinue und brea k sic h imm er nul" auf die innerste Schlei fenebene beziehen und mcht dazu ben utzt werden konnen. tiefer versc hachtelte Schjei fen zu vertassen .
goto un d la bel Tiefe r verscha chtelte Schleifen konnen dUTCh die verpome go to-Anweisung verfassen werden. Das Spnmgziel ist durch einen Irei wahlba ren Nam en (Label) ge kennzeic hne t und wird dUTCh einen Doppelpunkr abgeschlos sen. Syntax : Spru nganwei sung
I g-o to Ha r k e ;
Syntax: Spnmgziel
I M<'I rke :
Da be i mehrtacher Verwe ndung der goro-A nwe lsung am Zie l nicht feststeht, von wo aus das gore erfolgte, sollte sic: bessel" nicht verw endet werden. Ein Label kann auch durch eine norm ale A nweisungsfolg e erreicht werden AuJ3erdem durfe n mit der go to-A nweisung lokale Anwei sungsb locke zwar verlass en. aber nieh t betreren werden. So kann beis pielsweise nic ht vorn ifTei l eine r Entsch eidong in den else-Tei l gesprungen werden, oder von auBen in eine n Schleifenkorper. Hbenso darf de r Kontext einer Funktion nich t vertassen werde n Oa der Einsatz de r goto-Anweisung fast nie notwendig iSI und sich bei ube rlegter Progr ammierung vermelden l11ssl. verzichte ich hier auf eine weitere Bescbreibung .
Tern nrer Operator Der tern are Operator (?) erlaub t eine bedingte Auswerrung innerhal b von Ausdrac ken Code 1-17 Anwcndungsbcispicl -, Die Nut..ung cines tcrnarcn Operators 1* ten_Ope ra tor.cpp
"'
Die Funk t i on zei gt an e i n f ache n Be i spi elen die Nutz un g eines t ern!ren Operat ors
tincl ude
1.5 Anweisun gen
57
int main (l (
i n t a :: 1· int b ; II u r sprUglic he Verzweigung i f (a ::= l) b = 1 ; else b = :1; c out « "b i s t glei ch " « b «
' \ n' ;
II KUrzere Sch r e i bwe i s e des ober e n Kons truk t s : b :: (a ==l) ? 2 : 3; cou t « ~ b ist g lei ch " « b « ' \ n'; II Vers c hac htelung o hne K1ammerung schwe r 1esbar b (4 ==1 ) ? (a ! =l ) ? ( a ==2 1 ? 1 : 2 : 3 : 4 ; c out « - b ist gleich ~ « b « ' \n' ;
=
system ( -Pause - ) ; retu rn 0 ;
1st der vor dem Fragezeic hen ste hende Ausdruck we hr, so wird dec Te ilausdruck vor dern Dop pelpcnkt. sons t de rje nige nach dem Dop pelpu nkt ausge.....ertet. Der resuhierende Typ dec belden alternat iven Ausdriick e muss gleich sein Zur Verdeu tlichung so llien Klammem ver.....ender .....erde n. besorders bei versch achrene n Operatoren. Ob ungen Schreibe n Sie ein ein faches Venauschungsprogra mm unter Nutzung eines terraren Opera tors.
versc hacbtetungen Eine Verscbachre hmg vo n Schleife n ist grun dsatzficb erlaubr. so fern sie inemander verschac htelt sind. Dbergreitende Struktnre n. wie nach folgend bi ldlich dargestellt . sind verbo ten. Struktur block I Strukturblock 2
Kild 1-21 Ilbcrgreifcnd verschachtclte Strukturcn
5&
1 Grundlagen der Programrmerung
1.6 Felder Felder. auch als Arrays bezeichnet. erlauben die Verwa ltung von mehreren Daten umer g teichern Namen. Del ZugrilT wird uber einen Index geregetr. Fur n definierte Elemente beginnt der Index bei Null und endet bei n-1. Eind imc m,iona le Felde r
Feldnamc:
Index 0
II
Index I
II
Index 2
I ...
! Indc,", n-I
I
Bild 1-22 Strukt ur eires eindirrc nsforatcn Feldcs
Eindimensionale Felder werden wie folgt deklariert und initialisien : Svntux: Definition n:m eindimensionalen Fe tdem Datentyp Fe l dname l n J : { A u f z .!Ull un g} ; II n 1st die Anzahl Felder mi t dem Index von 0 bi s (n- ll II die Au f z ah l un g nennt aIle Elemente wi e 1 , 2 , 3 , _
II od e r 41 s Zeichen ' 4', 'b ' ,
Del Index wird in eckigen Klammem [ ] gehalten und iSI nicht zu verwechseln mit runden Klammem (). Fur d ie Angabe des Index gelten folgende Regeln: • •
Der Index muss eme Ganzza hl sein. Der Index muss ein konstanter Ausdruck sein.
Be ispiete: con s t int SI ZE : 10; s ho r t int Maxi : 20; II e r l aub te I ndiz ierungen, s ho rt Me s s u ng (4 0 ) ; c har Texte [SIZE ); II n i cht erl a ub t e I ndizierung , long Di g ita l [Max i) ;
Das Feld Messung wird aber emen Wert definiert. Beim zweiten Peld Te xte erfolgt die Definition uber eine benannte Konstante. Nicht erlaubt ist die Definit ion des Feldes Digital. da FeldgroJ3en nur durch einen konstanten Ausdruck definiert werden kor men. .\I ch rd imcmlona le Felde r Mehrdimensjonale Felder werden wie folgt definiert. Syntax: Definition von mehrdimensiona len Feldem
I Datentyp Feldn41lle[diln
OJ [ d iln l )
[ d i 1!Ln - l )
1.6 relde r
59
dim_x ist dabei die Anzah l Felder der Dimension x = O. 1•. . .. n-l . Rei d ieser Konstruktion sprichr man auch von ein er Matrix. Spalte :
o o Feldname:
2
3
I""".
Zeile:
unu 2
Hild 1-2] Sirultur cines zweidimcesjoealen Feldc-s
Konstante }o'eld el'" Felder konn en durch das Zusatzwort const als Konstante initialisi ert werden. Beispiel: Initialisie rung 5 konstan ter Felde r mit den Inhalten I•...,5: ! COh s t i nt i[] = { 1, 2, 3, 4 , 5 J;
"fl'H'ndun g1libehpicl: Inter polation - Seih"erla uf Nicht imrner liegt zu einer funktiona len Abhangigke it eine G leichung oder ein Gleichungssystern vor. Onmals werd en in der Praxis Werte geme ssen und dara us Funktionen abge leuet. Eine Method e ist die gewansc hre Funknon durch ein Polynom zu beschre jben. Wir besrirnrnen einen Seilve rlau f flir das dargestellte Beisp iel durch ein Inrerpolarionspotynom nach New ton. y
50 -
-
-
-
Hild 1-24 Beispiel fllr cin Stahlsci l zwischen lwei Masten
Das Po lynom hat die allgemeine Form : P( x ) = b o + bl ( x - x o) + b 1(x - xo )( x - x 1 ) + .._ + ba(x - xo )( x - x . )...( x -x a_l )
(1.36)
60
1 Grundlag en J eTProgrammierung
Die Koeffi zienten hi werden so bestimmt. dass da s Naherungspol ynom durch d ie Punk te (XO.Yo). (x ].)'1)• . ..• (xn,yn) verlaufl. Setzt man in dem Newtonschen Ansatz Illr x di e wene x(). XI• ...• Xn ein. so erhalt man das Gleichung ssystem
Yo = b o y, = bo + h, (x l - x O ) )' 1
= b o + b.tx , - x o) + b:(x : - x o)(x: - x. )
Y. = b, + bl(x ! - x o ) + b l (x : - xo)(x :
b. (x. - x, Xx.
- XI
( 1.37)
)+ ...
- xl )...(x, - x . _, }
Dieses System HisS1 sich schrittvveise rur
bo. hi • . . .• b, aunosen mit
b, = Yo
hi =
Yo = {x ,x,]
)' 1 Xl - Xo
l
b, = [x: x,x o
(1.38)
usw.
den dividjerten Di rferen zen , Setzt man diese in den Ansatz ein, emllll man das Newt cnsche Interp olationspo lynom
y = Yo + [x lXO](x - x o) + [x zX1 XO J(x - xo)(x - x. }+ ... + [x"x... l •••X l X, X O]( X - Xo)(x - x, )...(x - X. _1)
(1.39)
Cod e 1·18 Anweooungsbcispicl - Scilver lauf mit dcr Interpolation nach Newton
I - Se i l v e r l a u f_ I n t e rpol a t ion . c pp
0'
Di e Funk t i on bestimmt eine n Se ilver l a u f ~u s g emesse ne n W e r t en durch In t erpo l ation na ch Ne wt on
f i nc l ude int main ( ) {
i nt i, j ; doub le xi , yi , zi; doub l e x ! ) ; {O, l O, 2 0,3 0,3 S, 40,SO }; doub l e y ! }; {30 , l S, 11 . S, l O, l O. S , 12 . S , 20 }; double zI SJ I SJ ; II Mat r i x f Or Schema int n;6; II Sc hema a u f baue n
f or
(j;O; j <; n +l ; j ++) f or (i;O; i <:::n +l ; i ++ ) z [i l [ j l ::: O;
f or (j;O; j< ; n; j ++) z( j) ( Ol =x [ j ] ;
Il g emesse ne Posi tionen Il g emesse ne Se i l h6 he n
1.6 Felder
61
f or (j=O; j<=n ; j ++ l z[j] u i -vrn , c out «
endl ;
II Dividierte S t e i gun g e n f or ( i =2; i<=n+l; i ++ 1 t or (j =O; j<:n- i +1 ; j ++ J z( j) (i)= (z(j +1) ( i -1 ]-z [j ]
u-rn l ( z [ j +i - 1 ) ( 0) -z lj) rcn .
I I Verlauf f or (x i:x (O ); xi<:x(6) ; x i ++ ) ( yi :y( O) ; f or (j : 2; j<:n+1 ; j + + J I zi =z( O)l j) ; f or (1= 0; i < = j-2 ; i ++ ) zi =zP (x i - z ( il (O )); yi =yi +zi ; cou t «
~ x. y :
~
«
xi «
"
" «
yi «
' \ n ';
I - Au s Qa be Sch ema. f or rf-c . j <=n +1 ; j ++ J {
f or ( i=O; i <= n +1 ; i ++ ) cou t « z{ jJ(i) « cou t « ' \ n ';
".
"/ s ystem( " Pa use" ) ;
Db ungen
Die Ausgabe des Schemes habe ich auskc rnrnenriert. Ihre Ausgabe hilfl aber zum besseren v erstsndnis und knnn bei Hedarf wieder aktiviert werden. Wer mag, kann die lmer polation auch nach Lagrange oder einer anderen Methode ausprobieren.
:\.nwl'nd ungshclsplcl: Backt racking - ctnschrttnge Codes
Rnckverfolgung (eng l. Backtracking) stellt ein fundamentales algor ubmisches Prinzip dar. Viele Problem e. bei denen man nach elner Menge- von Losungen sucht, konnen mit dieser Methode gellist werden. Der Algorithmus ahnelt dem Suchen in Baumen. Man d urchHlufl dabei aile Zweige eines Baumes (Blld 1. 25) nach einer Straregfe. die durch Pfeile dargestellt ist und ..links vor rechts'' heiben konnre.
62
1 Grundlagen der Programmie rung
Bild 1·25 Suchen in doer Beumsnu ktur
Dieses verfabren f inder aueh de n Ausgang aus einem Labyrin th. In der Litera tur sehr belie bt als Beispiel ist das 8-Damen-Prob lem. Wir betra chten nachfolgend einsc briuige Codes, wie sic
zur w egmessung eingesetzt werden. Ein klassischer v enre ter ist der Gray-Code. Er hat eine Eigenschaft , d ie der Binarcode Diehl besitzt. Beim w ecbsel von einer Zahl auf die nach folgende oder " ora nge-gangene lI.nder1 sich immer nur ein Bit im Code. NUTdadurch sind Iehler freie
Messungen nX'lglich. f.mpf'iinger
m id 1-26 Wcgmcssung
Der nachfolgende Algorithmus so li miner s Backtracking untersuchen. ob es meglicberweise noch andere. sogenanme ein schrittige Codes gibt. T ahflh." 1·2 9 Hindr - und G ray-Code
;
Bmar-Code
Gray-Code
;
Hin ar-Code
G ray-Code
0
000 001
4
110
5
100 101
2
000 001 010
011
6
11 0
11 1 101
3
011
010
7
11 1
100
1
1.6 Felder
63
A ls Basis fiir das Programm werden 4 Bit gewahlt. Da eine lange l.au fzeu zu erwa rten ist. bekomrnt de s Progr amm em Abbruchkriieriurn. so dass nech Erreichen einer vorg egebenen Anzahl Konsrellauonen der Prozes s terrninien . T ah t llt 1-30 Bcsnm mung etnschrittigcr Codes nach dcr Backt racking-Methode
Bestimm ung der Ausga ngskon flguration j = i (l) 4
IA( lj ) ~O Merker auf Null setzen i =I ( 1)1 6
I "O) ~ O i -0
Start
Schrin vor
j ~ I ( I )4
I Vii) ~ A(;j ) 1st ~1(i) < 4 Bit er boben Bit lindem
~I( i)
=
~I(i)
U( ~I (i)) =
j,
Nein
U( ~I ( i»
Schritt zu rec k
+ I
1-
Kon slellation be reus vo rhanden ?
Nem
J.
Neue Position i = i + I
MO) = 0
Obema hme j = I ( I) 4
I AOj ) ~ Vii) 1st die 16. Position erre icht ?
J.
Nein
lSI der Code in sic h gesc blossen ?
J.
Nein
Code anzeige n Schritt zurtlc k M'(i) = 0
./.
i=i+ I So lange n icht alle M'og lich keilen untersuc bt sind (i > 0)
64
1 Grundlagen der Programmie rung
C oM 1·19 Anwcndangsbeispicl - Einschrittigc Codes nach dcr Backtracking-Mcrhodc 1* Eins chrittige_Codes. cpp
./
Dieses Programm s uch t alle mOglichen ein s chrittigen Code s nach d e r Backtracking-Methode
.include
'include <s t r i ng. h> int main II { II Deklarat i o nen lnt A1l 6] [4 ]. U [4 J . M[1 6 J ; lnt i . j. k . 1 . n ; i nt pL p2 ; l nt v . a , s; II S t a r t
cou t « "Anzah l d e r Code s bis zum Stop: c in » z ; cou t « - Bi t t e haben s i e etwas Geduld ! -
~.
«
e nd l;
y :: 1;
II Ausgangskonfiquration 0000
f or (j= 1;j<5; j ++J I All) Ijl = 0;
II Merker Ausgangswerte
f o r U =I ;1<17 ;1++ ) {
Mlil = 0 ;
II St a r t i = 1; do (
1/ Schrit t vor f o r (j =1;j<5;j ++) U[j] = A l i ] Ijl; i f ( M I1 )<4 ) (
MIl ) +-;-; U[M[1 1 1 ;. l-U [M (i J J ;
II Pr Qfu ng II wird d ie g l e ich e Konstellation noch e inrnal g e f u nde n II i st pl" l pl " 0; f or (k ; l ; k< i +l; k ++l
1.6 Felder
65
p2 : 0 ; f or ( j : 1 ; j< 5;j ++1
,
i f (U!j ] ! : A [k][j l ) p2 :
1-
}
i f (p 2: :0) p1 : 1;
II
neue Konstellation i f Ip l : : O) {
i ++ ; f or I j : l; j <5;j ++J {
A (i l l j l : U[ j ]; if (i : : 1 6 1 {
II
prufun9. o b de r Code i n sic h ges ch10 s sen ist S
0;
:
f or ( j : 1 ; j < 5 ; j ++ ) {
i f (A[ 1jlj l { s ++ ;
!:
Alill jl )
}
,
i f ( s : : 1)
II
,
Code brauchbar und wi rd r egi striert f or Ik: 1; k < 1 7 ; k ++ 1
,
for
{j=1;j<5;j++ 1 i f (A[ kj[jj==ll cout « " X' ; else cout « "_" ;
cou t «
endl ;
y ++ ;
II
II
Me rke r s t a n d ze i g e n cou t « "Mer ker, " « endl; f or (k= 1; k< 17; k ++1 c ou t -c M[k l ; cou t « e ndl;
II
S top if (y : =z + 11 systeml" Pause" ) ;
Sch r i t t zurQck
66
1 Grundlagen der Programmierung M[ i l ; 0; i - -;
I
e lse
I
II Schritt %urUc k Mlil :: 0 ;
i--; )
while (i> Ol ;
c out « y « ~ gefundene Co d e s !" « s ystern( - Pause- ' ;
Die letzte Kons retlau on
\'IX
e ndl ;
dem Programmende zeigt d ie nachfolgende Darstellung. x
-," "'" x l l )l
"lOL:1( XXXX
xxx
xx e.xx x ,
,-
I1er ke r '
1 31 21 ]1 11 34 21 318
2(,119 \I"fund e" e Codes ! Dri icke" Si" "in" heliehi " r" ste . . .
Kild 1· 27 Letztc gcfundcne Kcnstellation
Ub ungl'n
(I berprufen Sie, ob sich [ilr einzelne der gefundenen Codes eine Gewichtung einfuhren lasst. Verfllgen die gefundenen Cod es noeh fiber andere Eigenscheffen?
1.7 Zeig er auf'Da ien type n
67
1.7 Zeiger auf Dat entypen Zeige r sind Variable zu m Speic he m von Adres sen . Diese Adressen sind im ein fachsren Fa ll d ie Speiche radressen normale r v er iable r. Sie kcnnen abel' auc h Adr essen ande rer Objekte sein. Adressoperator Aile bisher de finie nen Datenrypen belegen j e nach Typ eine n unte rschiedlichen Speic herpta rz im A rbeus spe icb er . Ein int- Datentyp betegt pe r De linition 4 Byte, ein sbon-Date ntyp 2 Byte, usw. Die Sta rtposit ion des Daten typs im Speicher ist j edoc h ein e Zahl, die atlg em eln als Adresse bezeichnet wird. Diese Ad resse tasst sic h fill' eine Va ria ble aber de n Adressoperator & au s nach folgender Anwei sung bestimmen. Syntax : Besrimmcn g ein er Varia ble nadresse
1 i nt Ad r e s s e = "vari able ; verwelseperat or 1m Bei spiel wird die Adr esse ein er Va riablen als inr-Datentyp ges peic ben . Umg ekehrt las st sic h libel' diese Adresse wiederum ebe nfalls auf d ie Va riab le zugreifen. Dies ge schie ht iibe r den Verweis op erator • . Dabe i gib t es jedcc b ein Problem. welchen Speic he rbe reich soli die Zuwe is ung an erne bestim mte Ad resse ans prec hen, rom Be ispiel 4 Byte rur ein en int-Dateruyp oder 2 Byte rUT em en sbon-Detentype ode r allg emein n Byte rur ein en beliebigen Darentyp? Zei ger Diese Informat ion Iiefert uns der neue Datentyp •.Zeig er auf", auc h als Poi nter bezeichnet. FUr ein en beliebigen Datentyp T ist mit T * der Typ ..Zeige r au f T" dek lari ert . Ein Typ P kann die Adr esse eines Obj ekts vc m Typ T speic hern . Damit ist die Zu ordnu ng Ze iger auf Da tentyp eind eutig . normalc Variab le
Zcigcrvariablc
Bczcich ner (Name]
Bcz cic bncr (:"lame)
Adrcssc im Spe icher
Adrcssc im Speicher Glcichhcit
Inbalr
Verweis auf
Inhalt=Adresse des Vcrwcisobjek ts
Gleichhcit
Inhah des Vcrwcisobjckts Bild I -2M Zugri ff auf norrnale Variable durch Zeigervariable
6&
1 Grundla gen der Programrmerung
Syntax : Deklaration cines Zeigers (Point er)
1 Datentyp* Var i abl e; int - p = & \":
intve- Ll ; v
int w · . p;
p
w
Ox82
II
II lJild 1·29 Be ispiele von Zuweisun gen urxl ihre Folgen
Zdgeropera tio nen Eine gru ndlegende Opera tion auf einem Zeiger isl das Dere ferenzieren, das he illl sich auf ein Objekt beziehen, auf das ern Zeige r zeigt. Beispiele: z eigeropera rionen i ntv =11 ; int· p &v ; c ha r w = "p ;
II p enth~lt d ie Adre s s e v o n v II in w steht je t z t eben f alls 11
Durch lnkrementieren cder Dekreme ntieren eines Zeigers wird d ieser auf des nachste bzw. vorbergehende Objek t gese tzt. Zeiger lassen sic h miteinander oder mit dem NULL· Element vergleichen. Zwei Zeiger dilrfen suhtrahiert werden und das Ergebnis ist eine Ganzzahl. Hingegen isl das Addieren verboten. Die Addition einer Ganzzahl ist erlaubr und wird hei Feldem verwende t. Zei ger au f Feld er Zeiger und Felder sind eng miteinander verwandt. So kann d er Name ei nes Feldes als Zeiger auf sein ersres Element verwendet werden. Beispie le: Zeiger auf Feldelemente int v [1 i nt * p1 i n t* p2 i nt* p 3
~
1, 2, 3, 4, 5 1 II Ze iger auf e rs tes El ement &v[l] : II Ze iger auf zwei t e s Eleme n t &v[S ] : II Zeiger di r e k t h i nter das l etzte Element (
v,
69
1.7 Zeig er auf'Da ientype n p2
pi
p3
I
~~ , v I
lJild )·30 Zeigl....auf Datenfcjd-Elcmemc
Zei ger lind Konsta nl e Ze iger auf Konstante
konstanter Ze iger
Kon stame
konstam er Zeiger auf Kon stant~
Konstant e
Bild 1-31 Zeigc... und Konstante
Bei der Nuteung elnes Zeigers sind imme r zwe i Obje kte beteihg t, das Obj ekt, auf das gezeigt wird lind der Zei ger setbst. Wird der Deklaration eines Z ejgers ein const vorangesretn. so wird darnit das Obj ekt zur Konstanten, nicht aber der Zeiger. Beisp iele: Zeiger und Konstame cha r k l l = " Dr e i e c k " i c ha r * P i const c h a r · q ki
=
q [2 )
= ' a' i
II FEHLER - q zeigt a uf Ko n s t an t e
'L:-P"-,
_!
lIC K
=:~
Urn den Zeiger selbs t als konstant zu deklarieren und nicht des Objekt, benutzt man den " const-Operator. Beispiel: Konstanter Zeiger c h a r k L] = " Dre i e c k" ; char * P ; c h a r *c o nst q k;
=
q [2 ] = 'a'; II OK q = Pi
II FEHLER
q i s t k o n stant
70
1 Grundla gen der Programrmerung
A nw c n d u n gs h cl~pic l :
BuhhlcSort
Oft fallen Werre oder lnformationen an, die es zu sortie ren gilt. Eine Venauschung von Adressen ist oft weniger zeitaufwend ig als das Ven ausc hen von Speicherinhalten. COOt' I-10 Anwcndengsbcispiel Zufallv ahlen - BubbleSon I~
"'
BubbleSort . cpp
Dieses Programm erzeugt 50 Zufall szahlen un d sor ti e rt sie n ach d er BubbleSort -Meth ode
'include
< ios t re~
.include < iomanip> 'inc l ude < time.h>
II s t r e am 10 II s t r e am 10 mit Tab II Pseudozu fall s zahlen
u sin g namespace s t d;
II Anzahl Zahlen 'define MaxAnz 50
typedef int IntArrayIMaxAnz) ; II Zufallszahlen generieren v oid Zufall I IntArray Zahlen i n t Anz l ( sra nd( timeI NULL)); IIGe ne r a t or I n i t i a l i s i e rung f or (int i : 0 ; i
= rand l ) ;
II Ps e u d o z u f a l l s z a h l
II Zeigen des Arrays v oid Zeige n ( IntArray Zahlen • i nt An z ) f or ( i n t i:O ; i Zahlen[j+l] ) Swap (Zahlen[j] , Zahlen lj +l] I ; int mai n ( v oid I int Anz : SO; IntArray Zah len ; b001 S top;
1.7 Zeiger auf' Da ien type n
71
Zufall ( Za h l e n, An~ ) ; II Zu fa l l s~ah le n erzeuge n cou t « "Er z e ug t e Zu falls~ahlen:" « e ndl ; Ze i gen (Zahlen , An~ ); II Zufalls~ahlen zeigen BubbleSort (Zahlen , Anz ); II s ortieren cou t « ·Sor t i e r t: \ n"; Ze ige nCZa h l e n, Anz l ; cin » Stop ; return 0;
Ein Il'I6gliches Ergebnis zeigt die nachfolgende Dars tellung : .I:.. ",e "g te 7..... r .. I ls",.. hl en :
191 6 8 19318 2 1872 236 18 3255
So .. t ie .. t:
81.
55 49 1"'" 18789 236 48
22682 1 5 95 25691 2?195 15 8 59
13565 1?319 27585 1914
1 6 3? 56 18 I M62 1 8 889 25619
81.
5 122 ?316 1?1 29 1 845 I M62
193 96 23 181 38 1l 1. . av
188 89 19 382 55 19 16177 1 6 3?
1 845 5868 13 833 1 9168 2569 1
592 1 13565 19 38 2 2?495
aeee
325 5 5 993 14119 1 9 396 27585
38 1l 7 316 1 5 859 2 1872
,-
'77"
11119 I ttS 5? 256 19
'77" 2 192?
3M33 ' 077 3 1 8819 5993 91 6 2
5868 56 18 52 19 2286? 28376
1 8 78 9 592 1 286g e 13 iB3 2 9 115
4814 91 6 2 1 6477 2 192? 28376
4 59 5 19318 1 7319 2286? 2869 9
5 122 I ttS 5 ? 1 7429 22682 29115
5219 1077 3 1 8819 2318 1 38933
BUd 1-32 Er}!cbnis cines Prc grammla ufs
l\ mH'n d u n gs b d ~ p icl :
Kompfcxe Za hlen - elcktrtsch er Sebwtngkrets
Das Rechnen mi t komplexen Za hlen bie tet ge rade in der Ejekt rorec hnik sehr viele Anwendungsrnegtich keite n. Kc mplexen Za hlen sind definiert durch C = lz = a+ hi,
( 1.40)
a. b e R, i =.J=l1
Sie bestehen aus einem Realteil a und einem lmaginarteil b. a und b (a, be R) sind reelle Zahlen Ko mplex e Zahlen mil dem lmagmaneil b = 0 , sind reelle Za hlen. Komplexe Za hle n lassen
..r::J
sich nic ht euf dem Za hlens trahl darstellen , da es keinen Punkt gib t. Dutch Ein fllhrung ein er lmaginaren Zehlenge rade n zusamrnen mit ein er reelle n Za hle nge rade n ist ein e gra fische Darstellung mogfich. Die von der reellen lind imaginaren Zehlengeraden au fgespanme Eben e wird als Oauusche Za hlenebene bezeic hnet. Kom pt exe Zah len sind Zeige rgrouen . Es Iiegt also na he. sie auc h als solc he I:U be handeln .
72
1 Grundla gen der Programrmerung
Im(zl
ib + - - - - -.,
'------
,b
z-a -lb
Rc( z)
-i-
a
zv a-ib
lI i1d 1· 33 Ga u&.-che l...a hlcncbcne
Fur das Rechnen mit komplexen Zahlen gibl es einfache Regeln. Die Addition tauter 7..
+ 7.: = 3. + b. i + 3 2 + b zi = 3. + 3 : + i(b. + h I) '
(JA 1)
Wie bei den reetlen Zahlen gelren auch hier die Kommurauv- und Assozienv-Gesetze. Die Subirakuon Iltsst sich bereus vermuten (1.42)
Die :\Iulliplik al ion hal di e Form :1. 1 ' :1. :
= ( 3. + b 1i) ' (3 : + b :i)= (a ,3 z - h,b 2 )+ i(a ,b 2 +3 : b l) .
( 1.43)
Ebe nso rolgl fil r di e DiJ'M tJn 7.1
31 + b1i
a la : + bib: +i(a 1h l - al h: )
z z =a Z+ b1i
( 1.44)
a;+b;
Nun muss die Welt nichr neu erfun de n werden. da es bereits eine Hibliothek zu diesem T heme gibt. Mil dem Einbinden des Headers
~~,l"e~x">~
~~~
_
stehen sic: dem Anwender zur Verlligung. Darin werden komplexe Zahlen durch spexielle Templates fllr die Standardtypen 1I0at. double lind long double realisi ert. Komp lexe Zahlen bilden mathernans ch einen Kerper, die vier Gnmdrechenarten sind definiert. es gibt ein Nullund ein Eins-Element. Neben den arithmetischen Grundoperationen sind auch Prufungen auf Gleichheit ('" "') und Ung feichheit (! = ) moglich. Andere Vergleichoperaroren ergeben [ilr komplexe Zahlen kemen Sinn. Germschte Operetic nen werden eben falls untersrurzt. C ud\' 1-2:1 Anwcndungsbcispiel -. Operati on mil reellem und komplexcm Antcil
1'*
C ornpl exRee l l.cp~
Demoprogramm zel.gt
73
1.7 Zeig er auf'Da ientype n g emisch t e Mu l t ipl ika t i on comp l e x - reell ' i n c l u d e < ios t r e am. h > ' i n c l u d e int lMl i n ( ) I c omp l e x< f loat> c( 1.0. - 1 ) ; cou t «
" Koml. Za h l c :
- «
c «
e nd l ;
II Hu l t i p l i k a t i o n ein e r k omplexen Za h l II mit d em r eel l en Wer t p i c 4 - a t an ll ) ;
-=
cou t «
rc - pi
:
- «
c «
e nd l ;
s ys tem(- Pa use-) ;
Die nachfolgende Tabelle zeigt wicbuge Funktionen, die mit kompt exen Darentypen mog fich sind. T llob l'lh.' 1-31 wicbrigc t'unktioncn filr kom plexe Daten typen
Abkurzung en: T = Typ floa t, double oder long double
mathematische Beschreibu ng
C = complex-cT> T reultconst C& x)
Realteil von x (= x.rea lm
T imegtc cn st C& x)
lmagjnbrteil von x (= x.imagO)
T abstconsr C& x]
Betrag von x
T argfco nst C& x]
Phasenwinkel von x in rad
T nor mtconst C& x)
Betregsquac rer von x
C conj(const C& x)
zu x konj ugien -komplexe Zahl
C costco nsr C& x)
cos x
C cosbtco nsr C& x)
cosh x
C exptconst C& x)
,A,
C logtconst C& x)
In ,
C log lO(conSl C& x}
log_1O x
C powt consr C& x, int y)
' ''y
74
1 Grundlagen der Programrme rung
C po w t consr C& x. const T& y )
xoy
C powtconst T& x. const C& y)
x' y
C powtconst C& x, const C& y )
x' y
C stm consr C& x}
S in
C sinh(consl C& x}
sinh x
C sqrnconst C& x]
- Quadretwurzel aus x
C tant const C& x}
tan x
C tanh( consl C&
xl
x
tanh x
C fabstconst C& x}
Betrag von x als komplexe Zahl
C acostconst C& x}
acos x
C acos h(const C& x]
acosh x
C asin(const C& x)
asm x
C asinh(co nst C& x]
as inh x
C ata n(co nst C& xl
alan x
C atanh(consl C&
xl
atanh x
ZUf prektischen Anwendung betrachten wir einen Reibenscbwingkreis mit R. C und L nach Bild 1-34 und berechnen die Frequenz-Ubertragungsfunkrion z in Abhfingigkeit von der Frequenz
f.
z = -U, ( 2 .
U
I
7[.
f )= -U." (m) = U
R
(1 .45)
. 1 R + J(- + wL ) mC
I
V ,( f)
..
L
R
lIild 1_.\4 Reihcn schwmgkreis
U,{ f)
J
C
1.7 Zeige r auf'D aientypen
75
Cnd l.' 1-22 Anwcndungsbeispicl - Rcchncn mit komplcx cn Zahlcn 1* Reihen s chwingkrei s . cpp Anwendung komplexer Zahlen am Beispi el d es Frequenzgangs eines Reihens chwingkrei ses ./
' i n c l u d e <s t d io. h> 'include < iost r e am. h > 'include <math .h> ' include using n amespace s td; int ma i n I } (
d ouble x . y . f . Omega. R. C. L ; dou ble u 1 8 0 . 0 /M_PI ; FILE *puffer ; puffer = f open l ~ C: \ \Temp \ \Frequenz .dat ~ .
=
"w - l;
c o ut « - \ nWide rs t a n d [Ohm) = "; c i n » R; cou t « ~ \ nKapa zi t ae t [Nano-Farad) = "; c i n » C; c o ut « - \ n I n d u kt i v i t a e t IMikro-Henry) = ". cin » L; cou t «
endl «
~ \n f[ H z ) \ t log( f) \ t Be t r a g( z3)\ t log( Be t ragl z3)1\ t Phas e( z 3)\n \n";
f or (f =IO ;f <1000000000; f=f *I.2 )
I
omega = 2 *M_ PI * f ; x = Otnega* C ; Omega *L ; y complex z l ( R . 0 ). z2 (R. -l/x+yJ. z 3; z 3 = zl /z2; II Au sgabe auf den Bi l dsch irm cou t -c f « " \t" « l o gI O( f ) « "\t" « abs(z3) -c " \t" « l ogI0(abs(z3» « " \ t " « arg( z3) *u « II Au sgabe in eine Datei f p r i n t f (puffer. "%4 .le\ t U .le\ tU .le\ t U .1e \tU .If \ n " . f . l ogIO(f ). abs( z3). logI0(abs(z3 ». arg(z3) "u);
=
endl;
I
f c l o s e (p u f f e r ) ; s ys t em( " Pa use") ;
Die komplexen Widerstllnde lassen sich unmittelbar als komplexe Zahlen schreiben. Die uber die Bauelemen te und die Frequ enz variablen Real- und lmaginarteile werden als reelle Variable in d ie Slruklur d~r komp l~ xen Zahlen eingefUgt. siehe
~l ex < f loa t> z l (R . 0 1 .z2 (R . -l / IOmega " C ) +Omega*L ) . z 3;
76
1 Grundlagen der Programrmerung
M it den w enen R = 10. L = 0.0000 1 und C = 0.0000004 erhalt man die nach folgenden wen e-
tabellen. Die Diagramme wurden aus der Darendatei uber einen Import nach Excel als Diagramme erzeugt . Gut erkennbar ist die Rescnanzwirkung der Anordnung, die sich im Maximum des Be-nags und als Nullwert des Phasen winkels zeigt .
U OI· ::O , : .:JO!- 30
' .IIOf· 30
., 'lOlHlI
7 7 7
-._'IOOO-:l(j
-1---
.J
-j
soo-oo
.J_.""
.~
I
/
•
rm~.~_"'l \
\
, l.:IOIl·~1
'\
\
-u~ _
lJild
1 ·.1~
Frequcnzgang des Retrap
. 3G I
•
UUd 1-36
FrC(llICnl~ .mg
des Phascnwmkcls
O b u n g~'11
Neben der Darslellung de r komplexen Zahlen in algebraische r Form. gibt es linch die Darstellung in tr igonomet risc her Form . In der Gauuschen Zahleneb ene wird die komp lexe Zahl z durch einen Zeiger der Lange r und semen Richtung swin kele eindeu tig beschrieben. z = r(co s lp + isin lp).
( 1.46)
Scbreiben Sie ein Programm fLir das Rechnen mit komplexen Za hlen und erganzen Sie es urn di e Umrechnu ng zw ischen algebraischer und trtgon ometrtscher Darstellung komplexer Zah len. Erweitem Sie das Programm urn d ie Rechenarten Pct enxieren und Radizieren komplex er Za hlen.
1.8 Zeic henketten
77
1.8 Zelchenken en Ze lche n ke u en lite ra le
Hin zeichenkeuenlheral ist eine Aneinanderreihung von Zeichen und diese w erden zur Begrenzung in Anfubrungszeic hen derge stellt. Solche Literate w urden bereits als Ein- und Ausgabe rexre in den bisherigen Beispielen ver.....endet. i~ , da ss e ine Zei chen ke ue (verwahu ngsrechnis ch ) ein Zeic be n mehr en1hlilt, als sicbtbar sind. Das liegn daran, dass eine Ze ichenke ne immer durch das Null-Zei chen '\0 ' terminiert w ird.
Zu beachren
"Zeichcn'>
I
'z'
I
' c"
"i"
'h'
"
'n'
I
' \0'
Hild 1-37 Bc ispicl-Datenstrukrur emcs Zeic hcnkettenlitcrals
Esca pe-Seq uenzen Neben dem Nullzeichen gibt es auch noch andere zeichen. die nicht als Textzeichen dien en. Diese als Escape -Sequenz bezeichneten Steuerzeichen .....erden immer dUTCh des \-Zeichen
eingeleiret. Ts belle 1-32 Wicbtige Es cape-Scquenzen
Escape -Sequenz
Beschreibung
Escape-Sequenz
Beschrei bung
I'
,
I"
11
? (nur ? schreiben - das \ davor ist optional)
II
" I
\a
alert (signal)
Ib
Backspace
If
fonn feed
In
newline (line feed)
"
carriage return
It
Tabu lator
Iv
verticalta bulator
Es gibt noch wenere Escape-Sequeezen. Eine Zahl hinter dem c-Zeichen wird als O ktalza hl au fgefasst. so dass ..\0 12" das Zeic hen mit dem ASCII w ert 10 beschreibt. ~it einem xZe ichen vor der Zahl wird efne Hexadezimalzahl bescbrieben. so dass \xA ebenfalls den Dezimalwert \ 0 meinr. Zcichcnkclfcll Ze ichenketten sind Felder vcm Ty p char und daher dtlrfen sie zwar durch Literat e initialisiert werden, abe r bereus beste henden Zeichenketten kann kein Literal zugewiesen werden: Syntax: Definition einer Zeic henkette
I c ha r
Feldname jn] " Zei chenkettenliteral ;
Eine leere Zejchenkene wird d urch die unmiuelbare Folge von ,: ' Ze ichen dargestellt und hat den Typ consr char] I).
1 Grundlagen der Programrmerung
Eine Ze jchenkettenvariable verw eist auf das erste Zeichen und ist damit im Prinzip nut em Zeiger auf den Anfang. Somit g ibt es keine ;"1og lich keit. zu uberprufen. ob der rechen auige Bereich eines Strings verlassen wird. Dazu ein einfaches Beispiel: Codt 1-2.\ Anwendungsbcispiel - Addit ion von Zcicben kctten: char-Version 1* Die Funk t i o n k opier t z wei Ze ich enk ette n l ite ra le i n zwe i Zeiehenk et t en und f u g t d ie~e z u ei n er zu ~ammen
"'
'inclu d e < ios t r e am . h >
ma in I) { c h a r s111 0]:~Zei chen -~ char s 2 1 1 0]:· ~ e t t e·; i nt i: O, j : O;
;
IIZe i c h e n k e t t e n IIDek l a r a t i o n e n
II Bestimmung der LAnge v o n s 1 ....hile (s 1 I i )I ::' \O ') { i ++; }
II anhlngen v on 5 2 a n s 1 while (s2 Ij ) I::' \O ') I s ll i ]:s2 I j ) ; i++ ; j ++ ;
l
s 1 I i ): ' \O '; II Aus g a be cou t « 51;
Die Deklaratio n der char-Dater uy pen s l und s2 reserviert j eweils 10 Bytes. Damit sind s l und s2 konstan te Zeiger au fe in char- Datenfeld. Weist man elner Ze jchenkette bei der Deklaration rnehr als die maxirnale Anzahl zulxssige r Zeicben zu, so gih t der Compiler ein e Fehlerm eldung aus. Ges chieht d ie Zuwe isung im Programrn. so gibl es naHirlich keine Compile rmeldung und das Prog ramrn laufl in der Regel fehlerfrei. aber auf solc he Experimen te sollt e man verzichten. C++ liefert zur Handhahung von Zeic henkenen e ine Sta nda rdb iblioth ek string (dem engtischen Wort Ilir Zeic henkeue) . Dabei handel! es sich urn eine Klasse (wird spiller erklan ). die nebe n Eigenschaflen auch noch Methoden in Form von Funk tionen liefert. Sie gestalten des Arbeiten mit Zei chenkeuen wesenttic h angenehmer. Auch diese wird durch eine Direktive vom Praprozessor in den Quellt ext eingefbgt . Syntax: Einbinden der Zeichenketten-Bib hot hek uber den Praprozessor
I 'inclu d e
<string. h>
Die Bjbhorhek definiert string im Narnespace std. so dass flir d ie korrekte Ansprache std ::string verwendet werden muss. Oder aber es erfolgt ein Imparl des kompletten Namespaces minds using-Anwe isung.
1.8 Zeic henketten
79
Syntax: Definition des Standard-Namensraums
I [usi ng]
nam espace s td ;
Einen kleinen Oberblick liefert die nechfolgend e Tab elle. Darin sind Funktionen rur Kopieren. vergtelchen. Anhlingen und Langenbesu mmung enth ahen. T ah dl c 1-33 SlTing ·f unkt ioncn Anweisung
Beschreibung
strcpy(ZielString. Qu ellString);
Kopiert QuellString in dl..' tl/JeIString.
stmc:py(b d String, QuellString..n];
ersctzt die crsen n 7.....jchcn \'00 lJelSlring dun:h die ers ten 0 zeicben von Qu.:-IIString. Die ubrigen zeicben blcibe.'tl unveraodert.
strcat(lJeIString.Que IIString) ;
Ocr QlId lStrin g wird an den ZidSlr ing ange hangt .
slmnp(ZieIString.Que IlStringl;
Verglejcht ZielString mit Quell Stri ng lexikalisch. Stehl ZielString vor Q uellString im Lexikon, win! das Ergebnis negativ, bd Gleichbcit 0 und scns t positiv .
strlen($lri ngl ;
Liefcrt die U nge von String . Das Ende l eiehen \0 ' wird nicbt milgetAhll.
In C ++ wird das Ende cines Siring d urch das Sonderzeichen "' 0' gekennzeichnet. Die obig cn Funkuonen sctzcn ' \0' sc1hstsllindig lind verwahen das Ende eine s Strings bis Lll diescm I..... icben unabhangig \'011 d\'f dckla ril'f1l::n Lange.
Aile Funktionen in string.h linden sich in der Bescbr eibung des verwe ndeten Com pilers. Nachfolgend wird das zuvo r benutzte Demoprogramm auf die Anwendung von Strings umgestellt. Cod e 1· 24 Anwendungsbcispiel -Addition von Zcichcnkcttcn: string-Version
1* Die Fu nktion k opiert zwe i zeichenkettenlitera le in zwei St r i n gs und f Qg t diese z u einem St r i n g aueenenen "/ ' i n c l u d e II Dekla rationen der S tr ing- Fu nkti on e n ' i n c lud e <string.h> II Definition der Strings c h a r s l (1 0 1 . s 2 [ 1 0 1 ; mai n ( ) {
bool S top; s t r e py 5 t rcp y s c rca t e o ut « ein »
(s l. "S t r i n g - -) ; (5 2. "Verkettung " ) ; (a i • 52 ); s l; S t op;
80
1 Grundla gen der Programrmerung
Die Zuweisung an die Strings wird mit der Funktion string- co py [strcpy} dur chgeflihrt. Diese Funktion kopien Byte fliT Byte "om zwe ite n Argum ent ..urn ersten Argume nt. bis sic: au f ein Null-Byte s1081.
:\1 il strcpy (sl , ..Zeichen-"]; werden die neun Bytes ,Z',' e',' i' ,'c',' h' ,' e' ,' n ' :-,:\O' nach 51 kopiert. In de r nacbsten Ze ile werden di e Bytes .Verkenung'' nach 52 kopi ert. Doc h bier gibt es ein Problem, den n ,.Verkenung" hal 10 Bucbstaben, es werden also mit dem Null-Byte 11 Byles kopiert, cines mehr als dafur reservi ert wurde. Dennoch wird der Vorgang ausgefiihrt. Zum v erkeuen von Zeic henkenen dient die Hibljotheksfun kuon sne er. Sie zweite n Argument s an den Inhall des ersten .
h1\n~>1
den lnhalt des
A" wendungsbdspiel: widerst ands-Farbcodc Urn das Arbe iten mil Zeichenkenen zu verdeu rlichen. ben utzen wir ein Anwendungsbeispiel aus der Elektrotechnik . Der Wert emes Widerstandes lasse sich an se iner Farbgebung ebles en.
I . Ring 2. Ring 3. Ring 4. Ring
8 ild 1-_\1I Farbkcnnu ng emcs elektrisc hen Widcrstands Tabt'lIt' 1-34 Wido.:notands -Farbcodc
Furbc
Schwar z
0
2. Ring 2. Z iITer
0
3. Ring Zahl dc r Na llen
4. Rin g Tclcra nz
0
I
Bra un
I
I
I
Rill
2
2
2
Orange
3
3
3
Gd b
4
GrOn
s
,
,
Hlau
6
6
6
4
4
Viol ell
J
J
J
Grau
s
s
s
wein
9
9
9
Gold
-
Silber Dbne CtJd~ 1 - 2 ~
1. Ring 1. ZitTer
Die Funktion bestimmt den Farbco d e
2
0,5
-
-
-
XO.I
,
X O.QI
10
Anwcndungsbeispiel -. Farbcode \'011 widcrsr anden
I '" FarbCode . c p p
in %
20
1.8
81
Z~i c hen kelll:n
>/
e i nes Wi d e rs t a n dwe r t e s ve re i n f ach t o h n e To ler anzangabe
' i n c l ud e < ios t r e am. h> ' in clu d e <s t r i n g. h > II Deklara tio nen d er St r i n 9 - Funk t ion e n main () (
c h a r Ohm ( 1 J, COde; i nt i: O, Max , Null en: O; cou t « "Wide rs t a ndswe r t c i n » Ohm;
[Ohm] :
-.
Max : strlen (Ohm) ; cout « '\n' « ·Wi d e rs t a n d s f a r ben : f or ( i=O; i <=Max ; i ++ ) ( i f (Ohm[ i] ==' \ n' J break ; Code: ' ' ; i f (i<: l J (Code :Ohm[ i) ; } else ( i f ( Ohm [ i ] ==' O' ) { Nu l l e n+ + ; } else ( Nullen: O; )
I
-.
..
i f (1) 1 i= =Max- 1 ) {Code : (c h a r) (Nu l l e n +4 8 J;) s wi tc h (Code) ( s c nwa r e- ; brea k ; c ase '0' : ( cou t « Braun " ; b r e a k ; ) c a s e '1' : ( cou t « c ase ' 2' : ( cou t « Ro t · ; break ; ) c a s e ' 3 ' : ( cou t « Or a n g e" ; break ; ) cere- ; b rea k; ) c a se ' 4 ' : ( cou t « Gru e n - ; break ; ) c a se ' 5 ' : ( eou t « c ase ' 6 ' : ( eou t « Bl a u · ; break ; ) c ase '7 ' : ( eou t « Violet t - ; b r ea k; c ase '8' : ( eou t « Grau " ; break ; I we iss · ; b r e a k; l c ase ' 9' : ( eou t « d efault : (eou t « • • ; ) )
s ys tem ( " Pa u s e " ) ;
Ol)llngc n Dieses Programm lassr sich beliebig weiter optimieren und ausbauen Neben der Toleranzbestimmung kann auch umgekebrt die Widerstandsbestimmung durch Farbangaben erfotgen. A nwend unglobchplcl: Wlrh chaftlichk eit sr echnung - :'\utzwcrl an alyloc 1m Ingenieuralltag kommt es immer wieder zu Situationen. bei denen Entscheidungen in Abhangigkeit von vielen Parametem getroffen werden mnssen . In diesen Fallen und in vielen Bereichen hal sich die Nutzwertanalyse bewahrt. die nachfolgend in einfacher Fonn behandelt
wird,
82
1 Grundlagen der Programrmerung
Die Nutzwertanalyse wurde in den USA unrer dem Bee.'TiIT utility analysis en twicke lt und sen
ungefahr 1970 auch in Deutschland eingesetzt. Die Nutzwertanalyse priorisiert verschiedene Ldsungen. Dies geschiebt durch deren Gewicbn mg im Hinblick ZU T Erreichung eines oder mehrerer Ziele . In einem ersten Schritt werden die Kriterien in zwei Gruppen sortiert. Solche Kriterien. die ruT ein Proj ekt wichtig und maBgeblich sind und solcbe deren Einhaltung erwOnscht aber nicht notwendig erlUUt sein massen. In einem zweiten Schrin ma ssen nun die einzelnen Soll-Ziele in eine Ordnu ng geb racht wetden. M:6glich ist eine System atisierung in Fonn von Oberzielen und dezagehongen Unterzielen. Den einzelnen Zielen werden Gewichrungsfaktoren zugeordnet,
"""'-
Teilnutzen 1 X Ziel1 ( Faktor 2)
Teilnutzen 2 X Zicl2 (Falctor 4)
TeilrM.Jtzen 3 X Zicl3 (Faktor 3)
Nwen
A
3x2=6
2 x 4 =8
4x3 = 12
26
B
3x2= 6
3x 4= 12
2x 3=6
2.
C
2x2 = 4
2x4 = 8
1x 3 = 3
15
BUd 1· 39 Beispiel eincr Nutzwcrtanaly sc in cinfachcr Form
Code 1·26 Anwcndungsbcispic l -, Einfachc Nutzwertanalysc 1* Nutz WertAnalayse .cpp Oa s Pr o gra mm bestimmt d en Nut ze n unte r s chiedli c her L5sungen aus Fa kt oren u n d Nutzwe r t e n ' f l i n c l u d e < i o stream .h> lin c l u d e < s tri ng. h> II De kl a r a t i o n e n d e r St r i ng - Fu n k t ion e n
main (J {
i nt i , j, x , Lo esun g e n , Kr iterien ; II L5 sungen cou t « - Anz a h l Loesungen c i n » Loesunge n; s td;;s t ri ng Lo e sung [Lo esun g e n]; c o u t « *Besch re i ben Si e d ie Loes ung e n : \ n * ;
= .;
83
1.8 Zeichenketten f o r (i=O, i
" \ n",
/ / Kriter ien eou t « "Anza h l Kriter ien = ", e in » Kri terien ; std:: s t r i n g Kri terium I Kr iter i en ] , int Wieh t un g I Kr i t e r i e n ) ; int GradI Loesunge n JI Kr i t e rie n]; eou t « " Bes e h r e i ben 5 i e d i e Kr ite rien : \n " ; f or l i=O; i
cou t « Loesun g l j ] « ein » Grad l i l l j ] ;
" = ",
/ / Aus wertung f or ( i= O; i< Kri terien ; i ++l {
f or {
( j =O, j
eout « "\ n\ nAuswe r t u ng s - Ma t r i x :\n" ; f o r (i=O, i
f or
(j=O; j
84
1 Grundlagen der Programrmerung
cou t « "'n Erge b n is :\n"; f o r ( i=O; i
x=O , f or (j=O; j< Kri t e r i e n; j ++l (
x = x + Grad [ j ] [ i ]; J cou t « e ndl;
cou t «
cou t «
Loes ung [i] «
• = • «
X;
e ndl ;
Die Bitdschinnausgabe des Beispiels zeigt Bild 1-40.
Ubunge-n Erwe item Sic: das Progra mm. damit zu jede m Kriterium auc h noc h Unrerkritenen angegeben werden konnen . Beachten Sic: dabei, dass di e Kriterie n auch verschiedene Anzahlen von Unterknterien besitzen konnen. Stetlen Sie die Analyse so urn, dass mil Prozenten gearbeitet werden kann .
WeTin diese m Bereich noch weu ere interessante Themen erarbeiten rnoch te, dem empfeh le ich die Markov-Analyse und die Entscheidungsana lyse nach Bayes. Markov-Methcd en eignen sich gut. urn Komponem en mit me hreren Zustlinden zu unrersuchen. beispiels welse mil Zustande n, die di e Nominaltunktion, leichte Fehlfu nktionen und kritisch e Fehlfu nktionen beschreiben, Ein Beisp iel mil dre i Zustl1nden zeigt 8ild 141 .
1.8 Zeic henkette n
85 Anz <'Ih l I.o" ,,,,n y ,,n = 3 Be s c hr-e t ben S i" di" I.o" suny"n : 1. ,
2.
B
~
3. " C
Anz ahl kri t " ri "n = 3 Be s chr"i be n S i" d I e k r i t" r i"n : I . An s c haffuny sko st "n 2. = Z.uul!r lass iy kl! i t 3. = S"MI i CI! Geben S il! di l! Gew ichtunysf al
C
= =
3
2
f r f .. "ll" n g sg rad u o n Zuu l!rla s sigkl! it dUl"Ch:
,
. 2
B • 3
C
<
,
2
Erfu l! l lun g s g r a d vo n S" .... I c e d"rch :
B C
=
2 I
Au s wert u n g s - l'Ia t ri x:
, s • 8 12 8 12 s 3
Ergl!bn i s : A • 2f, B = 21 C = 15 Or;i ckl!n S il! I! i nl! hl!lil!bi I! Ta s t l! • . .
Hi1d 1-40 Heispiclausgnbc emcr Nutzwcrtan alysc
Zustand I
Zus tand
2
J.l1- 2 BUd 1-41 Markov-Modell cines Systems mil drei Zustandcn
Zus tand
o
11 0- 1
86
1 Gnmdlagen clef Programm ierung
1m Mark ov-Model l win! j eder Zu standsubergang durch eine Obergang swa brsc he inlichkeu charak rer isiert. Wirt schaflswis sen schaftler nutz en di ese Method e zu r Simu lation und Analyse vo n Wenbewerbem. Die' Entscheidungsan alyse nach Bayes revidi ert we brsc beintic hkeite n gerruiB dem Th eor em vo n Bayes zu bedingten Ereignissen und bewert et deru ber hin aus mog fiche M"allna hmen mil Hilfe ein er Gewinnma trix . Angew andt wird diese Technik rom Beispiel aufS tichproben in der Qualitlilsko ntro lle. Diese Me rbode benutzt eigene subj ektiv e Wa hrsch einlichkeit en .
FUr zwei Ereignisse A und B gilt P(A I U) = P(U IA) ·I)(A)
P(B)
( 1.41)
Darin ist PIA l die A-priori-W ahrsc hein lichleit rur ein Ereignis A und P(B IAl d ie Wa hrsc he inlichkeit filr ein Ere-ignis B unter de r Bedingung . da ss A ein getreten ist und P(B ) die A-prioriw ahrscheinlic hkeit fU r ein Ereignis B ist. Das Theorem folgt unmittelbar aus der Definition der bedingten w ahrscheinlichkeiten
P(A rI B) . P(A ) P(A I 0 ) = P(A rI B) =---,P-,(Ao,),-=-_ _ = P(B IA ) · P(A ) P(O) P(B) P(B )
( 1.48)
87
2 Prozedurale Programmierung 2.1 Der
'Ve~
zur Lbsung
In de r Prozeduralen Programmie rung er folgt di e Erstellu ng von Computerprogremrren unter dem Ansatz, das Gesam tproh lem als etne Summe von Te ilproblemen und deren Los ung aufzubauen. Ein Progr arnm schreitet bei diese r Sichtwe ise zur Gesamtl osung von Teillosu ng zu Teillosung (auc h Prozedur genannt. '0'00 lat. procedere = voranschre iten). Eine Prozedur nell dabe i beren s auf die Wiederverwendharkeit bei anderen ProblemlOsungen. Dieser Ansatz wird sparer in der rrodc laren Programmierung umgesetzt.
Algorilhm en und Lasu ngss truk ruren Auf de r Suche nach der Losung von (Te il-Il'roblemen bed ient man sich gewisser Los ungsstru kturen und Prozed uren. auch Algoril hmen genanru. Sie sind eine genau definierte VOT· schrift ZUT Los ung eines Problems ode r besummter Arlen von Problemen. Wichtig i SI. dass diese Lz sung in endlicb en Schriuen er folgt, Blaek BoX/While Box
Am Anfang der Progr ammierung waren Probleme noch klein und uberschaubar. In de r Regel lieB sich das Ergebr us eines Programms aus den direkt Eingabe n herleuen. Man begnagt e sich mil der Black Box/While Box-Betrac htung.
Hild 2-1 Black Box
Bel der Black-Box-Sic ht liegen Inputs vor. die- naeh Umwand lung durch Anweis ungen Outp uts erze ugen. Die whire-Box-Sicht befasst sich ausscblie ulic h mit dem ln nenleb en der Box. T op-Dnw n-Design
Mit der Zeit wurden die Problemlcsungen imrner komple xer lind der Schwerp unkt lag au f der Suche nach effixienten A tgoritbmen. Methoden w ie Top-Down-Design hal fen bel der Findun g von Losungen komplexer Programmiera ufgaben . Rei dieser Methode wird grafisch ein komple xes Problem in Teilprobleme zerlegt. Sind diese Teilp rohleme immer noc h komp lex. werden sie erneut in we itere Teilproble me zerlegt. Dieser Vorga ng kann so lange dur chge filhrt werden. bis es fUr j edes Teilprob lem elnen Losungsalgorith mus gibt. 1m einfachsten Fall ist dies eine Anweisun g. Die Zusammensetzung alter Teillosungen liefen auc h die Gesamtlo sung. Wen wundert es de. dass diese Teillo sungen sich o ft. in Fun ktion en wieder fanden. Haufig wiederke hrende Funkrione n wurden da nn in Standa rdbibliotheken zusammengefasst. wie rom Beispiel Sortierfunktionen.
2 Prozedurale Programrmerung Problem
Td lproblem 1
Teilproblcm 2
Teilproblem 4 L&\IIlg"
Teilproblem :!.1
Teilproblem 2.2
~g 2 . 1
Uisung 2.2
A lgorit hme n Umer einern A lgori thmus versteht man eine genau definierte Handl ungsvorschr ifl zur Losung eines Problems. Er stellt eine der wic htigs ten matbematiscben Begritfe da r. vergleicbbar etwa mit dem Begri fTder Funktion. Algorithmen verfttgen aber folgende wic btigen Eigenschafien: • • • •
Aile verwe ndeten Gr6Ben ma ssen bekann t sein Die Umarbei tung gesc hieht in endhchen Arbeitsschritten Die Beschreibun g des Algorithrnus ist vollstand ig A ile angege benen Operationen sind zul assig
Ein Algor ithmus wird in eine r (informatischen) Sprac he nach bestimmten Regetn definiert. A lgor ithmen verbinde n in ihrer Anwe ndung o ft sehr unterschied liche wissensgebie te miteinande r. In diesem Buch finden sich Algorithmen aus de m ingenieurwissenschaf'thchen Bereich. Sie bedurfen ein er besonderen Sichtweise. Ande rs als de r Naturw issenschafile r kann sich der lngenieur nicht ausgi ebig mit allen Rand bedingungen eine s Problems befassen. Die Zeit. die ihm fbr e ln Projekt zur Verfugun g steht, ist ebenso endlic h wie der finanzielle Rahmen seiner Projekte. Er muss mil begr enzten Inform ationen Er uscbeidungen treffen lind dabei Risiken absc bmzen. Mit Hilfe von Computersystemen und Iachrelevanter Algc rithmen kann er sic h diese ln formationen durc h Berechnungen und Simulationen in kurzester Zeit effizient besorgen.
"'Iussdi agr amm c und Slruktogra mmc Auf dem Weg zum eige nuic hen Sou rce-Code eruwic kelten sich noch einig e meh r oder weniger grafische Verfahren zur Darst ellung von Losungsalgor ithrnen in sprac benunebhangiger Fonn. Das Flussdiagra mm in Bild 2-3 zeigt die Aneinenderreihung von Anwe isungen . Bei der Entwicklu ng gerat man leicht in Versuc hung , nach Ab fragen Abla ufe zu splitten. So mit gelangen Sprttnge in den Q uellcode - eine scblechte Qualita t der Progr amm ierung.
2.1
D~r
89
We-g zu r Lesung San
Bcd ingung
Inp ulS
eem
ernUl!
~ ja
Bcdingung erltlIll - - :~ n"in
"<;"
An,, 'cisunge n A
I
Anwe isungm lJ
0u1pU1S
Struktogramm
Hild 2-) Grafische Darstelhmgen "on AI}!or1thmen
Des Nass i-Scbneiderma nn-Diagramm, auc h aIs Stru ktogram m bezeichnet. verhinde rt durch seine Grafike jemente solc he schlec hren Programmiermo gficbkeiten. Ein wei terer voneil ist. da ss sich in d ieser grafiscben Dars te llung deurhch mehr Tex t unte rbringen Iltssl. Seuktogramme sind nach DI N 66261 ge normt. Sc ftwa rearcnttekeur ~ i l zunehme nder Kom plex int der So ftware emstand der Begriff der Softwarearchne ktur und d ie Au fgabe des Sollwarearchitekten sowie damit verbundene neue- Entwicklungswe rkzeuge. Die Architektur in der Infonn ati k besc hreib t die grundlegenden Kompo nenten und deren Zusammens piel innerhalb eines So nwaresvstems. Die So ltwarearc tmektur ist Tei l des So ilwareen twurfs, innerhalb dessen sie entsteht. Wahrend der Scftwareentwur f sich deraillien mit der Umsetzung der v orgaben befasst. zeig r d ie So ftwarearchitektur d ie globale n Eigensc haflen des Gesamrsyste ms.
1m Rahm en der So ftwareentwick hmg reprasentie rt die So llwarearchitektur mil einem Architekturentwurf die nc beste So ttwa redesig n-Enrsc heid ung . Sie wird im w esentlic hen dur ch So ttwa requa htatskrirerien wie Modifizierbarkeit. Sic herheit od er Perform an ce bestimrr u. Eine ein mal festgelegte Softwarearchite ktur ist spate r nu r m it hoh em Aufwa nd abande rba r. Die Entscheidung nber ihr Design ist somit eine der kritischsten und wic htig sten Punkt e im Emwicklungsprozess etner So ftwa re. Zur graflsc hen Visualisierun g von Softwarearchuekturen werden unterschiedliche Method en etnges erzr. Beispielswe ise: • •
Unifie-d Mode ling Language (UM L) f undamenta l Mod eling Co ncepts ( F~ C)
90
2 Prozed urale Programrmerung
Sysrcrna nfordcrungs-
Abnahmc&
Anal\'~
~ut7U1l
System Archirektur
SystC'lllbOll
Int.::
SystemFnNo~,,-f
Software An;b itektur
,
Detilillim mg
Hild I-f Des V-f\h)(iell zur So ftwercemwic klung ( Drcscbe l, Heuser, Middcrbo IT.
199 ~l
Die U:-'1L umfasst cine Menge von eng zusammenha ngende n Modethe rungseleroenten. mit denen ein Benut zer emen ausgewahlten Aspekt cines Systems mit einem besnmrmen Formalismus rnodelheren kann . Umerschied en werden versc hiede ne Speechein heiten. di e sich in Struk turdiag rammen wie • • • • • •
Klassend iagramm Kompos ilionsslruklurdiagramm (auch : Montagediagra mm) Komponenlendiagrnm m v eneilungsdiagramm Obj ektdia gramm Paketd iagramm lind Verhane nsdiagzrammen wie • • •
Akuviursd iegramm Anwendungsfalldiagra mm (auch Use-Case - oder Nutzfa lldiagramm) lntemktionsubersichtsdiagr amm
•
K ornmunika t jonsdiagramm
• Sequenzdiag ramm • Zeuve rlaufsdiag ramm • Zustandsdiagramm darstellen . Spitler. bei der Obj ektorie ntierten Programrni enm g, w ird
G leiclveiug mil der Prozed uralen Programmierung und deren Verwirklichung in immer groBer werdenden SoOwareprojekten kamen we itere Begrifflichkeit en [Kriterien] au f den Merkt. die sich unter dem Begriff Softwareq ualita t zusammen fassen lassen. Nach ISO 9 126 (DIN 66272) sind die nachfolgend dar gestellten sechs O ualnarsmerkme fe definiert.
2.1
D~r
9'
We-g zu r Lesung
Z UVe!"'
li§
Hild 2-S Qualititsmerkmalc Ilrr Softwareprodukte nech ISO I Q26 (DIN 6(272)
Ein Krit erium isl die Robustheit einer Software. Dammer verseeht man ihre Fabigkeit. auch e nter nich t normalen Bedin gun gen zu funktion ieren. So sollte ein So ftwareabsturz kein e ..Katastrophe'' auslcsen. Der schlimmste Fall liegt vor. wenn eine Soft ware Ialsche Ergebn isse liefert . denen man ihre ..Falsc hheir' nicht sofort ansieh t. Einen gewi ssen Cha rme hal die So ftware. die de m Nutzer eine aussagekrnfbge Fehlermeldung Jiefert und ihm d ie Emscheidung auf Abbruch od er Fort fllhrung unter Bedingungen uberlassr. Ein weiteres Knterium ist Korrektheit. Eine So ftware ist dann korrekt, wenn sie ihre Au fgaben (Req uiremen ts) gemli8 einer Spezi flkation exakt erfili ll. Men spric ht hier vo n einer primaren QualiUit. Eme Software die sowohl rob ust als au ch korrekt ist wird als zuverl1issig bezeic t met. Das Kriterium Anderba rkeit spiell bel de r Kosten betrach n mg eine gro8e Rolle. da ca. 65 % der Herstellkosten du rch Anderun gen entstehen, also durch ET'o'..euerungen und Wanu ngen. Darau s resulriert wiede r eine der hauflgsten Fehlerursac hen . d ie Enrwicklung unrer Zeitdruck. Erwerterungen ergeben sich durch A.nderungen der Spez ifi kauo n. ws brend Wartungen das Ergebn is gefundener Fehler sind. Unterstiltzt wird die Anderbarkeit durch folge nde Merkmale :
• • • •
Einfachheit des So flwareen twur fs Autonome Mod ule mil ein fach en Schnins telle n Kapselu ng vo n Daten stmk turen und darnit nur Datenzu grifftiber Funktionen Sinnvo lle Dokumentatio n. am bes ten im Code
Die A nde rbarkeit vo n So ftware lassr sic h mit herkommlichen prozeduralen Programm iertechniken 011 nur mit hohem Aufwand erreic hen. Ein sehr wichtiges Kriteriu m ist die W iederverw endb arkeit. Sie stamm t aus der Erfahrung , dass nach dem gleichen M uster aufgeba ut sind. Eine wiederverwe ndete Proze dur Proxeduren muss nicht erneut au f eigene Fe hler ge testet werden und reduziert darnit Kosten. Auc h Wiederverwendbarkeit lassl sic h kaum m il herkommlichen prozeduralen Programmiert echniken erreichen. M it dl esern Krirerium befasst sic h das Kap itel Mod ulate Prog ramm ierung.
on
Das Kritenu m Kompa tib ilitat isr em :\iaB fUr die Vertragl ichke it mit ande ren Softw aremodulen. Dabe i liegt der Fokus mei st auf kompatible Darenformate. die sich durch ein heitliche Standards erzie ten lassen. Das Krirerium Portabihtat triff eine Aussage fiber d ie Verwendung des So llwaremodu ls au f versc hiede nen Hardware-Umgebungen und lmegrari onsmogfichkeite n zu verscbiedene n So ftwareprod ckren. Gerade da s Portiere n kann einen er heblicben Kosten fak tor darstellen.
92
2 Prozedurale Programrmerung
Das Kmerium Veri fizierba rkeit isr ein Y1aB Iilr die Leichtigkeir. mit der sich Fehlerverfolgung und Fehlerbestimmung be-sanders in der Testphas e umsetzen lassen. Das Kriterium Integzritllt betrachtet die Softwa re aus der Siehl der Kaps elung von Daten und Prozeduren gegen unberec htigte Zugnffe und v era nderungen (s iehe DO P). Das Krite rium Benutze rfreundhc hkeit untene ilt sich in viele Kapite l. so dass bier n UT grundlege nd d ie Nutzun g von Funkuo nen, das Bereustelle n von Dalen und der Zugnff auf Ergebm sse ge nannt we rden soll en . 1m Exfrem fall 5h"111 das Mod ul e in grafisches Interface zur Ve rfiiglln g. Das Kriteriu m Per form ance betrachtet d ie okonomische Nutzung von Ressourcen (wie Spe icher). Die Entwicklung liefert immer schnellere Prozessoren. opumierende Co mpiler und immer hobere Bandbreiten. Aile genannten Km erien . und es lie8en sich noch einige nennen . sind nich t immer direkt mit einander vereinbar. So steht die perfekte Anpas sung an erne besrimmte Hardw are im Widerspruch zur Portabilitar. Doc h es lassen sich immer Komp romi sse linden. wenn man den Krite rien Priorit aten zuordnet. So en tstehen Meuiken, die den Enrwicklem hel fen. Grun dsatzlich lasst sich Sofiwarequa litJit mil disaiphniertem und metbodi schem v orgehen erreichen.
Archilck tur·Ent\n.n
•\.f
";nmtw"n und
•
'{
•
(·odimm~
InlcSJ'ltion und Tn !
•
•~ •
lIi1d 2-6 Dus w asscrfall- Mod cll, dcr Ah nherr allcr Prozessmod cllc [nach Royce. 1970)
Uh ungt.'l1
Erstellen Sie den A lgorithmus zur Berechnung der Hypotenuse eines rechtw inkligen Dreiecks nach Pythagoras in gra fischer Form mil allen Fehlerabgrenzungen und suchen Sie weitere A lgorithmen. Henutzen Sie dazu zuerst die To p-Do....-n-Design-Methode. bevor Sie em H ussdiagram m oder Struktogramm erstellen.
2.2 Punktionen
93
2.2 Funktionen Der Begnff der Funktion wird in Informatik und Mathematik mil unterschiedlicher Bedeutung verwe nder. In der Mathematik ist eine Funkuon eine Abbi ldung der Funktionsargume nte auf des jeweilige Funktionsergebnis. Dabei liefem d ieselben Funkuo nsargumente immer dassel be Ergebnis. In der lnformatik wird eine Funktion haufig auch als Prozedur bezeichner. Anders als in der Mathematik brauchen in der lnformatik Funktionen weder werterreu noch Irei von einer Wirkung zu sein. Das Ergebnis eines Punktionsaufrufs kann neben den beim Aufru f a bergebenen Parametern auch "om augenblicklichen Zustand des verwendeten Speichers abhangen. Ebenso muss die Wechselwi rkung zwischen unterschied lichen Funktionen beachtet werden. Deklar ation und Defi nition von Fu nk ncnen
Jedes C ++ Programm starter mit der Abarbeitung der Funktion mil dem Namen main. Aile anderen Funkrionen w e den dadurch definiert. dass sie nacheinander aufgefhhrt werden. Funktionen . die aufgerufen werden. mnssen vomer de finiert sein. Die Definition von Funkuo nen in Funktionen ist mcbt erlaubl. Code 2· 1 Allgemetner Programmaufbau
II Ei nbi nde n v on Headerdateien .include Header~teiNamel 'include HeaderDateiName2 II Kons t a n t e nv e r e i nba r unge n . de f i ne Namel Va l u e l ' de f i ne Name2 Val ue2 I I Def i n i t i on des Namensraums using name space s t d ; II Dek l a r a t ione n von Funk tionen als Pro totypen DatenTYP Fun k t i on s n ame l {Parameterlis tell; DatenTYP Fun k t i o n s n ame 2 {Pa r ame t e r l i s t e 2 l ;
I I Ha up t f unk t ion DatenTYP main {Parameterlis t el {
IIDef i n i t ione n von Funk t i on e n I I0 a die Funk t i one n bereits ober h a l b vo n main al s Prototypen Ild e f i n i e r t s i nd . ke nne n sie auch nach ma i n dekla riert werden. DatenTYP FUnkti onsnamel ( Pa r ame t e r l i s t e l) {
94
2 Prozedur ale Programmienmg
,
Daten'JYp Funkt i onsname2 ( Par ame t e r l i s t e 2 l
Protntype n
Bevo r eine Funktio n verwendet we rde n kann . mus s dem Co mpiler zunachst rrutgeteih werde n. das s es eine Fun ktio n dies es Namens g ibt, wie vide und welc be Parameter sie hal und welc hen Typ sie zaruckhefert. Dies gesc hiehr mit einem so genannren Prototyp der Funktion. DeT Prolotyp sieht genauso aus wie die Funktion selbst his auf den Funkt ionskorper : dieser feh lt und wird d UTCh ein emfaches Sem ikolon (; ) erse tzt. Es ist sogar erlaubt. die Namen der Argumente wegzulassen und nur ihre Typen anzugeben. Ana log zu den Variab len stellt der Proto typ die Deklara tion der Funktion und di e Fun krion se lbst mil ihrem Anweisungsb lock di e Defin ition dar. Syn tax: Prototyp einer Fun ktion
I Daten'JYp
Funkt i on s name ( Par amet e r l i s t el ;
Fu n ktie nsaufbau
Eine Funkti on hal den nach tolgend dargestellten augemeinen Aulbau. Syn tax : Allg emeiner Au lba u einer Funktion
,
Daten'JYp Funkti on s name ( Par ame t e r l i s t e) An 1o'e i s un g s b l oc k return (Datentyp [Ruck gabe1o'e r t ll;
Sie be sitz t einen Datentyp. einen Name n, eine Parameterlis te, einen Anwei sungsb loc k und einen Ruc kgabewert .
Fu nkno nen Dillie Uhcr ga hl'-Pa ra mctcr Funktionen konn en ohn e Peeameterangabe n aufgeru fen werden. Dann muss in der Param eterliste der fundamentale Daten typ void stehen. Syntax : Prozedur , Funktion ohne Ubergabeparameter Daten'JYp Fun kti onsname (voi d ) (
An we i s un g sbl oc k r etur n (Ru c kgabewert );
Funktien cn nh ne R uckgabewert lsi der Datent yp der Funktion void. dann hal di e Funktion kein en Ruckgabeparameter und die rei um -Anweisun g entfallt. Diese Form der Funktion wird auc h als Prozedur bezeic hnet.
95
2.2 Punktio nen Syntax : Prozed ur , Funktion ohne Ruckgabew ert
vo i d Fun k t i on s name ( Par ame t e r l i s t el Anweisungsblock
me
rel u rn-A mH' i~ u ng
in Funkucnen
Eine Funktion endet sparesrens mit der Ausfiihrun g de r letzten Anweisung und der Programmab laufl iegt wiede r bet der ru fenden Punktion. Ohne A ngabe eines Ruckgebewenes ist dieser j e nach Datentyp del Funknon au toma tisc h au f das Null elemenr des Datentyps ge setzt.
Mit de r return-Anweisun g wird ein vorzeitiges Ende der Funkt ion erreic ht und der bei di eser Anweisung angegebene Wert wird als Rack gebewen der Fu nktio n der ru fenden Funktion a bergeben. Uber la den "on Fu nktio ncn Es gibt den Fall. class eme Funktion konzeptionel l die gleic he n Aufgaben mil unrerschied lichen Daten typen ausiuhren muss . Die Nutzu ng desselbe n Name ns iur gleicbe Operanonen auf unterschiedlichen Datentypen wird als Oberlade n bezeic hnet. Bekannt ist diese Tec hnik bereus aus den Orundoperauo nen . Zum Beisp iel wird eine Addit ion ( -+) iur unterschiedliche Daten typen aussge fiihrt. Beispiel: Irberladen von Funkt ionen
' i nc l ud e int Max ( i n t a , i nt b l {re t u r n (a >=bl? a : b; ) double Max (doubl e a , double b ) {r e t u r n (a> ::b l? a : b ; ) int mai n (I {
c out c out c out c out
« « « «
"Der groessere We r t von 12 und 13 i st : "; Max ( 12, 13 1 ~~ e nd1 ; "Der groessere We r t v on 12.2 und 12,1 i st : " ; Max ( 12 .2 , 12. 1 l « end1;
s ys t em( "Pa u s e " ) ;
Inli nc-Fu nklinn en Eine ein fache Fun ktio n. wie oben de finiert, kann auch inline definiert werden. Dies ist eine AufTorderun g an den Compiler. den Code der Funktion an der Stelle im Cod e online zu genen eren. an der ihr Aufruf steht. stan sie durch ublic he A ufru fmechanisrnen nutzbar zu macbe n. Beispiel: Inline-Funktion
I n 1i ne int Max ti n t a, int b l {re t u r n (a>= bj ? a : b ; I
96
2 Prozedurale Progra mrmerung
Der Vorteil dieser effizierueren Codeerzeogung wird hinfiillig. wenn d ie Funktion an vielen Stellen aufgeru fen wird. Rekursien cn Rekurs ive Algorithmen lassen sich oft dUTCh rekursive Prozeduren elegant losen. Eine rekursive Prozedur lsr in der Lege. sich selbst autzurufen. Dabei wird oft die Losung eines (n)Problems auf ein (n- Jj-Problem zuriickgefiihrt. Beispiel: Rekursive Best immung von n-Fakuh at
. i nc l ude
l ong i nt Fakul (long int n J {
l ong int fllk; i£ (n== 11 fak 1; else fak n * Fakul (n-l l ; return fak ; int maoin tI (
cou t « cou t «
"Der We r t von 7! i s t , . , Fakul (7 1 « endl ;
s ys t em ( • Pau se · I ;
Vorga be-Argumcnle Beim Entwurf von Funktionen steht man oft vor der Wahl. ob die Funktion unkompliziert in der Anwendung oder universell verwendbar sein soil. Beispiel: Funktion zum Zeichnen von Ellipse n
vo i d el lipse lint x, int y, int stangle, int endangle, int xra d i us , i nt y~r"a"d,i"u"s"'",C-
~
Die ersren heiden Parameter geben den Mittelpunk t der Ellipse an. die let/ en belden Parame ter d ie beiden Hafbachsen. Die Parameter steng te und endangle erlauben . emen Tei l der Ellipse I U zeichnen: Sie geben den Anfangs- und Endwinkel (in Altgrad] an. FUr den Normalfall einer votls utndig en Ellipse mussen hier stets die Werte 0 und 300 eingesetzt werden . Die Funktion ware lelchrer I II rnerken. wenn man diese heiden Werle weglassen konnt e. Desbal b ist es in C++ erfaubt. bei der Deklaration einer Punktion Argumenren Vorgabewe rte zu geben. die automatisch verwendet werden. wenn die A rgumer ue weggelassen werden. Dami t der Compiler eindeu tig erkennen kann. welche Paramete r weggelassen wurden. gilt die Einschrankung. dass solc he Vorgabe-A rgumente am Ende der Parame terliste srehen mcssen Die Vorgabeargumente durfen nur bel der ersren Deklaratio n angegeben werden! Ais Beispiel folgt eine Funkuo n (mil dem doppeld eat igen Namen Ellipse), bei der die Winkelargu mente weggelassen werden konnen.
2.2 Punktionen
97
Beispiel: ru nktion zum Zeich nen \'on Ellipsen mil Vorgabewenen flir Sian · und Endwinkel v oid El lips e
(int x ,int y ,int a ,int b ,int wO;.O, i n t wl;.360 )
{
e l l ips e {x , y , wO, wt • a , b l ;
Rt>i"pil'+ Aufmft> der Fun ktion vu m 7....ichnt'n von Fllip"t'fI Ellipse ( 40 , 4 0 , 30 , 20 ) ; Ell i p s e (80 , 4 0 , 30 , 20 , O. 9 0 );
Durch die beid en Aufrufe werden eine volle und eine vi ertel Ellipse ge...reichnet.
A nwend ungebelsplct: Partlelle DifTer ential gleiehun gen - .\lem branO aehe In gew6 hnlichen Dilferenti alg jeichungen rreten nur Funkrionen mit einer unabhangfg v eranderlichen auf. Dagegen spncht man von eme r partiellen Diffe rennalgfeichung. wenn die gesuc hte Funkti on y = y(xl .x 2.···.xn)
(2.1)
von mehreren v eranderhchen XI. x2•... • xq abhangt und in der Gleichung pan id le Ablenungen der Form
Vy Oxj •
,
ify • usw. l?xj l'lxj
( 2.2)
auttreren. Urn deren Losung numens ch zu bestimme n. ube raieht man d ie x, y- Hb ene mit einem zweidimensionalen G iller der Maschenweire h.
,
C\
•
I
,
\" - )
•
h
• I
-. .h
,
8i1d 2-7 Gmcrp unkre in dcr Ebcnc
Die Giuerpunkte bestimmen sich dUTCh xi =xo + i· h und Yj=Yo + j · h . AuBerdem woll en W iT Iolgende Abkarzung
( 2.3)
9'
2 Prozedurale Programmierung (2.4 )
Ui,j = u ( Xj ' Yj )
verv..enden Ahnlich wie zuvo r werden auch hier partielle Ableuungen erster und hoherer Ordnung durch Dilferenz enquon enten app roxim iert (diskre usiern. So ergib t sich
tAo (
in.. ){. ..- yJ.
~
) -_ ui+l.j- Ui_ l.j 211
+ O(h' )
(2.5 )
un
(2.6)
Ein haulig auftretender Differenualoperator ist der Lap lace-Operator A
(2 .7)
mit der DifTerenzenapproximation
(2 .8)
Dies lasst sich symbolisch und anschaulich durch den in Bild 2-8 da rgesrellten Berechnungsoperator omsetzen.
'"
\ J : ~/
lIi1d 2-1' Hcrcchnung s opcnnor
A ls konkreres Beisp iel wird die nachfolgend dargesrelne elastische Membran verwender.
S Ud 2-9 Form dcr techniscben Membrane
2.2 run ktion en
99
Sie iSI an den Randem fest eingespannr und erfullt die Laplacesche Different ialgleichung
,
,
Lt"u+ ff"U ""o
l jx 2
Vy2
(2.9)
.
Dabei isl u die Hohe der Membran e fibe r der (x.yH·::bene . Die Randwerte seien u = 0 fur de n .liufk ren und u = I fur den inneren Rand . Aus der Sym metrieeigenschaft des Laplace-Operators gen u!," di e Betrachtung eines v iertelsmc ks.
/
Symmelri.:a.:hso:
BUd 2-10 Mcmbranausschnitt
Durch Anwe ndu ng des Ope rators ergeben sic h nach folgende Differenzen. Verbes serung der z eilenwerte (von Schritt n nach n tl ): j =O. i: 3 :
.
.
.
.
-u , 0' n+ II . 4 u J 01 0+1)_14 01 rt+- 1buJ _11n)+UJ I(n)
-.
daraus folgt: 4u.l .0(rt+-1l- u4.0 (0"'\I = 2 uJ .I(0)+ I weil U2.0(llTl b I. j =O. i:4: -1l3,OlO+1)-t4u 4.0(0+ILu5.d o+ lbu4._1(01-tU4,1'0)
daraus folgt: -Ul ,O(Il+1I-t4u 4.0(0+I)=O weil U5.0ln+l bo. j = l . i: 2 : -u 1.1(0+I) • 4u 2, I(n+IL u 3.1(n+1)=U2.0ln4 u2,2(0)
daraus folgt: 4 Ul . l, n+1L U3. 1,0+l)=U 2.2(n)-t2 wei! uI .JllH )=U2.0lob I .
je l , i: 3 : -U2.I(n+ 1)14 U3.1(0. 1L14. llo +119IJ .o(0)+U3.210)
daraus folgt : -U2. I(n+Il -t4 u3.l , 0+II=UJ.o,01 wei l U4.1,0- 1bu 3,2(°bo.
100
2 Prozedu rale Progrummierung
j- z. i=2: -u 1.2, n. ' )+4u 2.2(0+ ' t u 3.2(11"""1b Ul. l (Il)+u V (n)
daraus folgt: -U2, 1' 0· 1) +4 U2.2(0+ I bu 2, 1In)
weil UJ .2,n- 1bu z} nb O und UI.2,n- 1bu 2, 1(n- 11(sy m.).
Verbesserung der Spa ftenwe ne
(Vorl
Schritt n+1 nach n+2):
j: 2.j= 1: . U2.01n-2)...4u 2,1(n-2LuU ,o-2bul .rln-l l +uJ.I(n-1 1
daraus folgt: 4 U2,I,n- 2)_UU (o- 2bu3.1(0-1}-0-2 we il uu ru l.I = I.
j:2.j=2: -u 2. 1(n- 21. 4 u2.2'0- 2).u2.3'0- 2bu l.in- H.-- u U ' n- l)
daraus folgt: -U2. 1(0- ;n +4 u 2.2(0- 2bu , 1In- II 2
we il u2J =UJ.2=O und " l.2=U2.1(sym.).
i=3. j =O: -u 3,- 1' 0'"21+4uJ.O' n- 2)_u 3. 1t e- 2bu z ,o, n- I)+14.0' 0- 1)
daraus folgt:
4u3,0' 0-21.2u3.1' 0- 2)= U4.0' n- 1)+ I weil U2.o= lu nd \13._I=u 3,1 (sym .).
i: 3, j =l : - 11.1.0(0+2) +4uJ, I(0" 2L u3,2(0"2l=U Z. l (n- l )+U 4,1(n-I\
daraus folgl: -U.l ,U1n+:!l+4 u.l , ](n"'2)"'U2. I(n...n we il1l 3.2"' U4.1"'O.
· 1l4._1(n'"2)+4 U4.o'n+2L u4, ](n+2)",u3.O( n"'])+U5.o' ll"' l) daraus folg t: 4 U4.0(1l"'2bu3,O(n...])
wei ! U4.1"'U5.0'='O un d 14 ._1"'U4.1 (sym.).
DUTCh Umstetlu ng ergeben sjch di e 10 lterationsgfeichungen: u
In+1) = ..!.. (2u (n ) + 1) 4.0 IS 3.1
2.2 Punktionen u
101
(n+1) - 4u ( n l 4.0
3.0
U (n+ ll = ...!... ( U., , (D) + 4 U., .,(n1 + 11 3.1 15 -.-.-
u, (n+2) = ...!... (4 u , In+1l + U (0 +1) + 2)
_.2
U 2.1
15
(nH) _ -
4
_.I
3.1
( n+ll (D+!l u 2.2 - u2.1
(nHI - I (4 (n+!) + (DH ) + 1) - 14 u Z.I u4 .0
U 3.1
(0+2) _ .. In +21 (0+11 - u 3.1 -u 2,1
U 3.0
~ U) .O(D+I)
U4.0(n +2) =
T ah fl lt 2-1 Suu ktogremm - Differenzcnapprc ximanon
Eingahe Startwe rte 101 114.0( 0 ) = 0 ; 113.0 (0 ) = 0; /1) .1 = 0; 112.1(0) = 0 ; 11 2. 2 101 = 0
n ue reuonsschriue (n + l) = - 1 ( 2 u (n l + 1) U4,0 15 a.r (n +1) .. (n+1) = U4.O Ul ,U Ul l ,
(n+n
I (nl 4 (n ) = - ( u22 + u30 +11 15 ' ,
II (n+]) - 4 u (nH I U (n) J.I - 3.0 1.1 Ul ,l U
(n+ ll
=
I (
4"
( n +2 ) = ~ ( 4U
2.1
15
( HI)
Ul,1
+
(11 ) U2.1
(o+]) + u
2.1
\ 11 +11 + 2 ) 3.1
\ n+2 1 .. (0+1) (0+1) - U2.1 U2,1 = U2,2
102
2 Prozedu rale Prograrnrnierun g
(0 +21 _
u J.!
-
U
=
( 0+ 2) 3.0
U
4 .0
~ (4
(0+1)
14
u 2.1
4
(n +2)
Ul.l
(n+21 _ .!. u - 4
3.0
+
(0+11 + 1l
u 4.O
- Ul.1
(n+1I
In+ l l
Das Progranun entba h in der Reihenfolge die lterarionsgleich ungen . F.s ist jedoc h darauf zu ac hten. w elc ber lterationswert in die j e w eilige Gleic hung emgef n. lch habe dies dUTC h die Var ieblenfolge u, v, w geke nnzeic hnet. Erst nac h Beendigung der beiden lterationsschr itte erfo lgt eine Verschiebu ng und ei n neuer Durchlauf kann beginnen. Cod e 2-2 Anwendunflshcispiel Partielle Differentialgleichung - Membrane 1* Mernbrane .cpp 0/
l i nc l ude II I t e r a t i onen fl oat f 4 0 ( fl o a t u31 ) {return 1 /1 5* (2* u 31 +1 ) ; } f l o a t f3 0 ( f loa t v4 0 ) {return 4*v4 0 ; }
f l oa t f l l ( f l oa t u22 . fl oat u3 0 ) (r e t ur n 1 /15 * {u21 +4 *u3 0+2 ) ;} fl oat f 2 1 ( f loa t v31, f l oa t u3 0 ) (return 4 *v 3l -u30 ; ) fl oat f 22 ( floa t v21, fl oat uz t t (re turn 1 / 4 * (v2l +u211 ;) fl oat fl oat fl o at fl oat
g22 g2 1 g31 9 40
( f loa t (float (float (float
v2 l, w22 , v2l, v 30 )
fl oat v 31 ) (r e t urn 1 /1 5* (4* v 21 +v 3 1+2 1; 1 fl oat v21 1 (return 4* w22 - v 2 1 ; ) fl oa t v4 0 ) (re turn 1 /14* (4* v 21 +v4 0+ 1 ) ; ) {r e t u r n 1 /4 *v30;}
int main ( I {
int i, lc; fl oa t da t a [ll ] [11]; fl oat u[5]; fl oa t v[5]; fl oa t w40, w30 ,w3l , w2l , w22; F IL E *puff e r; puffer = f op e n ("C : \ \ Temp\ \ Membr an .dat " , "w") ; II Sta r twe r te f or (i =O; i
"" "
"
2.2 Funktio nen
103
data 16] 16] = 1 ; data 17] IS] = 1; II Eingabe und Anzeige c out « endl « "Eingabe: · f or Ci=O; i
« endl;
{
f or ( k=O; k
e ndl ;
II Aus wertung ul O] • data[51 [91 ; data (51 181 ; ull I data [ 41 [8 ]; u[21 u[ 3 I data [ 41 [71 ; ul 41 • data[ 3 1 [7 J ; f or ( i =O; i <1 0 0 ; i ++ J (
v [0 ] v Il ] v[2] v[3] v l 41 w22 w21 w31 w40
• •
f 4 0 {uI 2] J ; f3 0 (vI 0] J ; f31 (u [4 ], u[ l l1 ; f21 (v[2 ] . u [ l )) ; f22 (v I3), u[3 !) ; g22 (v( 3), v[2I J; g21(w22, vI 3]); g31(v I3), v iO l J ; g 40(v ll l);
• • •
w40; w30; w31; w21; w22;
u 10 I u Il I u(21 u(31 u [4 1
• • •
dat a data da ta data da ta
[51 [51 [4 I 14 I [3 I
[91 [81 [8 1 [71 [71
• • • • •
u u u u u
[0 I ; [11 ; [ 21 ; [31 ; [ 41 ;
/I Ube rt ragung (Symme t r ie) data [6] [8] • da ta [ 4J [8 1; data [ 6 ] [7] • data [ 4] [7 1; data [7 ] [7] • data [3][7 1; data [7] [6] • data [3] [6 1; data [ 8] [6] • dat a 12] [61; data 18] [5] • d a ta [2]15 1 ; data 19115] • data [1] [51 ; data III lSI • data 15 ] 191 ;
•• ;
104
2 Prozedu rale Prograrnrnierung data 12l (51 :: data [ 5 1 I B) ; data [2] (61 :: data [41 [ 8 ) ; data [3] [61 :: data [4 1 (7 1 ; data 12 ) [41 :: data [2 ] [ 61;
data 13) [ 4 ] '" data [3] [61 ; data (7) [ 4 ] :: data [ 7 ] [6] ; datil (8) [ 4 ] " data [ 8] [6 ] ; datil ( 3) [ 3 ] :: data [3] [7];
data 141 LjJ :: data [ 4J [7J; data (6) [3] data (7) [ 3 ] data (4) 12 l data lSI [2 ] data 16) [2 ] data (51 II I
:: '" " ::
data [6] [7 ]; data [7 ] [7 ]; data [ 4 ] [8 ] ; data [5 ] [8 ] ; :: data [ 6] [ 8]; :: data [ 5J [9 ] ;
II Ausgabe f o r l i=O ; 1<11 ; i++ ) {
f or ( k =O; k
printf l " \t\ 2 .2e " , da ta l Ll Ikl L, fprintf lpuffer . " \ t \ 2. 2 e-, data t il [k] l ; }
pri ntf (" \ n "'; fprintf (p u f f e r, " ' n "I; )
cou t « endl ; f c l os e l p u f f e r J ; s ys t em!· Pause " ) ;
Zunachst werden die- Positionspunkte der Viertel-Membran be rechnet und danach entsprec hend der Sym meme nbertrage n. Die Daten werden in eine Datei geschrieben und kormen so nachIclg end ausgewertet werden. Ich benu tze dazu gem e des Excel Programm von Microso ft.
1.00[ '00 8 .00['()1
s.cor-ci ~ .OO[ '()1
0,00[ , 00
2
DUd 2- 11 M embranvcrformung
,
•
5
, , ,
,
10
11
2.2 Funktio nen
105
Ubu ngl' n Eine H ekuonenroh re hat den nach folgend dargestellt en Aulba u. Wir ge hen von der ve rein fachten Annahme aus. dass d ie Elektroden naeh links und rechts un endlich fertge filhrt sind. Dann gen ugt die Porenrialverteilu ng im Raum zw isc hen den Elektroden der Laplace schen Di fferentia lgleic hung.
,
,
rh:·
IJy 2
if~ + rru = O .
(2.9)
Die Kathode hat das Poten tial 0 Volt und das Giller - I Vo lt. Wie groB muss di e Anodenspan nung gewahh we rde n, damit da s Potential zw isc hen den Gitt erfad en nicht r egati v wird? Benurzen Sie di e dargesrellt e Aufteilung unter Bera cksi cbt igun g symmetrisc her verbalrmsse .
o
;II
i
-
•
,
Arn,Jc
, ,V
;1
,I
. -1
I
>()
L•
.I
>u
. -1
I
G ilt er
»u
• - IV
I OV
Kathodc Bild 2-12 Scbematischer Autbau emcr Elektroncnrohre
Brmiueln Sie dur ch die Anwe ndung des Operators die sich darau s erge berden Dilferenzen. Du rch Urnsrelle n und Einsetze n erg ebe n sich dara us ltera uo nsg leic hunge n. In die sen Gleichunge n wird di e AnoJenpannung vorgegeben und nachgeprn tt. ob d ie Gitt erspannung e.'TOlk r null ist.
106
2 Prozedurale Progrummierung
2.3 Param eter Paeam eterubergabe Nemen von Fun ktionsergumemen werden als im auue ren Block einer Funktio n deklariert betrachtet. Beispiel: Parametera bergabe v ol4
I~
t (l nt x l
int x ; IIF EHLER !
~til dem Aufruf einer Funktion werden in der Regel auch Para meter abergeben. Dabei wird ein zusatzhcher Spe icher (Funktionss tack) erzeugt. in den Kopien de r akruellen Parameter angelegt werde n. Nach Ver lassen de r Funktion w ird der Slac k wied er ge lt1schl (Ausnahme stausc he Variable).
Das Ande m einer globalen Var iablen aus eine r Fun ktion beraus wird als Se itene ffekt bez eichnet und kann enter Umstaode n zu verwirrenden Ergebnis sen Ilihren.
1 * Sei tenef fekt.epp
0'
' i n clud e < i ost r eam. h>
int x s Il g l o ba l int main II
1
e xter n i n t fl int yl; x: 9 ; cou t « x =9 ; cout -c
«
endl ;
(f( x} * f( 9ll -c
endl;
( f( 9) *!( x»
s ys tem ( " Pa us e ") ;
int f lint 1
y'
x - =9; r e t u r n y*y +l ;
Dieses Beispielliefert die Ausgabe :
I"
6 72 4
2.3 Parameter
107
Parameter lassen sic h in C++ per value, per pointer Oller pe r reference an Punkno nen ube rgeben. Die Entscheidung. wie ein Parame ter ube rgebe n wird. wird flir j eden einzel nen in der Para mererh ste geiro ffen: Die (Jbergabe als Wert dutch die Nennu ng der Variablen. die Dbergabe als Zeiger dureh den Adr essoperator zur Varia blen od er die Ube rgabe els Reterenz durch de n Referenzoperator zur Variablen.
Ca ll b)' va lue Wird ei n Funktion sparameter als w ert tper value) an eme Funktion ubetgeben. dan n wird eme Kopie der Variab len im Speicher (Slack) engelegt. Innerhal b der Fun ktio n kann der Inhalt der Kopie beliebig veranden werden. Der Programm ierer kann sicher sein. da ss mil Been digung der Funknon der Inhah des Origi nals nicht veran den wur de. COOt 2-& v ertauschung dcr Inhalte zweier inl-Variablen minds coli by }'(llue 1* c a l l ByVa l ue . cpp
0'
'inclu de vo i d swap (int a ,int b ) (
i nt trnp=a ; a=b; b =trnp; i nt mai nl) (
i n t a =l ; int b =9 ; swa pla, b); cout « " a: cout « " b :
« «
a « b «
endl ; e nd l ;
s ystem( "Pause");
Das Progmmm liefer!: [ b"': 19
Die Werle werde n also mcht vertausc ht. Das liegt da ran. dass mil dem Aufruf der Funktion s wap die Werte der v artable n in entsprechend lokale Var iable der Fun ktion kopiert werden. Die Vertausc hung finder nur unter den lokale n Variab len der Punkno n stan. Beim verjessen d er Funktion werden die lokalen Variab len 3 . b und tmp verworfen.
C all by pointer Das im vo rherigen r ail durchaus gewn nscbre Verhalten fllhrt dan n zu Problemen. wenn die Vertau schung auch fiir die rufende Funkt ion gelten 5011. denn die ge rufene Funktion ka nn
10K
2 Prozedurale Progrummierung
hochstens nur einen Ruckgabewert (mind s return) liefem. Die typische Losung ist. dass r ncht die werte an sich, sondem nur deren Adressen an die Funktion abergeben werden. COO t" 2 -~ v ertauschung dc r Inhalte zweicr im-Variablen minds call h)·pointer
, - Ca l l By Po i n t e r . cpp
0'
' inc l u d e v oid s wa pl i n t -a,int Ob I {
int tmp =-a; · a =· b ; - b =tmp ; I ,
int main () int a =l; int b =9 ; s wa p! &a , &bl; « cou t « "4 : cou t « "b: ° «
I,
•
«
b «
endl ; endl ;
s ys t em!" Pause - I ;
Das Prcgr arnrn liefert nun auch das gewu nschte Ergebnis:
Ca ll by refer ence C++ kennr noeh erne weitere Form der Paramererabergabe . die Ilbe rgabe per reference. Dies wird dadurch gekennzeichnet. dass dem Funktionsparameter em & vorangestellt wird. In diesem Zusammenhang ist der Operator nicht mil dem Adressoperator & zu verwechse!n. Das Testbelsplel bekommt dadurch die nachstehende Form. CUdl' 2-6 Vcrtuuschung dcr lnhaltc zwc icr int-vanablcn mmcls call hy ref erence
, - Ca l l By Re f e r e n c e . c p p
0'
' i n c l u d e v oid s wa p( i n t 'a.int 'b l {
I,
int tmp =4 ; a=b ; b:tmp ;
2.3 Parameter
109
int main () {
int a =l; int b =9 ; SW<'!l p( a. b' ; cou t « "a, cou t « "b: }
«
«
a « b
«
endl ; endl ;
, s ys t em( " Pa use"';
Und auch dieses Programm liefert das gewanscbte Ergebnis: 009
1b , 1 Die Para merernbergabe cu ll by referenc e isl gegenaber der Parameterabe rgabe call by pointer besser lesbar und daher vorzuziehen. Das trim auch dann zu, wenn es sich bei den Dbergabeparametem um Strukturen und Objekte handelt . Dazu spate!" mehr. Nach diesen Betracht ungen wenden sich oft Lemwitlige C e e -Anfanger mil Grausen abo Fur d ie Unerschuue rlichen Iolgt ein A nwendungsbe ispiel. An" l'ndungsbdspld: ca ll h~.. pointer - So r lieralgorit hmus Bubbtesore
Dieses Beispiel zeigt mil dem ein fachen Sortiera lgorithmus (Bubblesort) eine slnnvotle Anwendung von Funktionszejgem . Oil' Funktion kann behebig groue eindunensionale Felder des Daientyps im sorue ren. Code 2-7 Anw.:ndungsheispicl l-"unklionsleigcr - Sortieralgorithmus Bubblcson
/ * Bubb l e So r t . c pp "/
f i nc l ude s ta tic void Tau s che (int *p l , i nt "p 2 ) {
i nt t; t = "p I , "p I = *p 2 , *p2 =t ; s t a t i c v oid Bubb l e So r t ( i ot - ve x ecr , II Adresse des Sor t ierbereichs int Anzahl ) II Anzahl der Elemen te i f (Anza h l)
f or (i n t i= O;i Ve k to r[ j!1 { Tau$che (Ve k to r +i . Ve k to r +j);
2 Prozedurale Programmierung
110
i nt llIll.i n II {
i nt 1 ; i nt data [] :: {3 . L
.,
c out « endl « ~ unsor t i e r t:" «endl ; f or ( i::O ; i<sizeo f ldata l /s i zeof ( int l ; i ++1 cou t
«
data[i1 «
~
cou t « "sor t i e r t :" « e ndl ; f or ( i ::O; i <sizeo f {da ta l /s izeof l i nt l ; i ++) c out «
data(il «
~
c out «
e ndl ;
Bubb l e So r t
.,
9. 2. 5 . 8. 7 . 6. 4 } ;
c out « s ys t em(
I d a t a. sizeof I d a t a) / s i zeo f( i n t));
e ndf r ~ Pause");
Obun gcn
Der Bubbtesort-Algomhmcs arbeitet be i gro8eTen Darenmengen ziemhch uneffektiv. In der Standard-Bibho thek SMU h.1I gib t es auch eine Quicksort-lmplementierung oson. Wie musste das Programm fU r das Sortieren von Werten eines beliebigen Datentyps aussehen? Wie sieht das Programm mil call hy ref erence aus? Felder a ls Param et er
Die Ubergabe von Felde rn als Para meter an Funktionen kann auf verschiedene An und Weise er fojgen. Dam ein Beispiel. bei dem eine feste Anzahl Felder ttbergeben wird.
Beispiel: Ubergabemogtichkeiten eines Peldes als Parameter vo i d f a ( int a[ 4)} ; fb (in t all}; f c (int *a } ;
vo id II void
Die Funktion fa im Beispiel erwarret 4 lnteger-Wene . Dabei wird nicht das Feld kopiert. sondem es wird lediglicb die Adresse des Feldes ubergeben. Folglieh sind Anderungen direkt auch in der autrufenden Funktion wu ksam. Die Funkrion Ib pliill nieht einmal, ob d ie 4 erwan eren Werle auch vorhanden sind. Auch hier ist jede Andemn g direkt in der aufrufenden Funktion wirksam. Die Funktion fc erwartet den Ze iger auf eine Integer-Variable und stellt so auch eine M"oglichkeit der Dbergabe dar. Man so llte j edoeh die Angabe der Dimensic nen nuv en. damit der Bet rachter d irekt eine Peldnbergabe erkennt. 5011 eine veranderung des Feldes innerhalb der gerufenen Funktion verhindert werden. muss dem Parameter das Schlusselwort const vorangestellt we rden. Dann wird der Comp iler jede Anderung des Feldes mnerhalb der Funktion mit einer Fehlermeld ung ahnden.
2.3 Parameter
111
Beispiel : Funk tion mit konstantern Feld void f a (c o ns t int a l 4 ]l (
a [21
~
3; II Fehlermeldung des Comp i l e rs !
'Ich rdimcn sion al c Felder a ls Pa ram et er Bet mehrdimensionalen Feld ern kann nUT die ersre Dimension ofTen blejben . wie da s bei eind imensi ona len Feldem oer Fall iSI. Jed e weitere Dimension muss feslgelegl werden. Beispiele : Zu lassig sind folgende Protorypen: v oid hlint aI 31ISI ) ; v oid f b Unt alliS) ) ; v oid f c lint l - a ) ISj);
Die zweite Dimensi on muss angege ben werden. da es ansonsten innerhalh der Fun ktio n nicht mog lich iSI. die korrekte Speichers te lte zu ermineIn. So hal a[ I UI ] in unserem Beispiel die sechs re Pos ition im Speic her. Ware die zwe ite Dimension sie ben, dann hatt e afl ][ l ] die achte SId le. 1m Fall eines zweidimensio nale n Feld es wird die zweite Dimen sion auch vc m Compiler gepra ft. Der A ufruf einer dies er Funktio ne n mit eine m Peld, das als b{S][3] definiert wurde. wird vom Compiler entdeckt und verhinden . Die Klammern urn "a sind bei fc erforderfich, da der Param eter ansons ten nich t als zweidi men sion ales lnreger-Feld interpretiert w ird, sondem als ein eind imensionales Feld vo n Zeigern auf Integer. A m.;end ung:o; bchpicl: Ui:o;ung linca rer G lcichu ngssptc m e - Temperaturverteuu ng Der allgemei ne Fall eines linearen Gleichung ssysrems liegt vor, wer m m Gleichungen mit n Unhekannten geg eben sind. a ll X' + u 12 x 2 +",+ u1n x n e c, a u x . + a :1x 1 + ... + u1"x" = c 2
(2.10)
Die reellen Zahlen ajk (ie l .. ...m; ke l .... .n) sind d ie Koeffizienten des Systems. Die reellen Za hlen Cj werden als Abso lutglieder bezeichne t. Das Glei chun gssystem wird als hom ogen bezeic hnet. wenn die Abs ot utgtieder verschwinden. Eine M ethode zur Bestimmung der Losun g ist das Ga uBsche verfabren. auch als Gaubsch es Elimin ation sverfahr en bezeichnet. Man en tfernt durc h Multiptik ation von Gleichu ngen mil einer Zahl und Addition zu einer anderen aus (n-l} von n Oleichu ngen elne Unbekannte. Entfemt au s (n-2 ) der neuen (n-f ) Gleichungen elne zweite Unbekan nte . Das v erfabren wird solange wiederhcn. bis nur eine Gleic hun g m il einer Unbekannten vorheg r. Aus ihr wird die Unbe kannte bestimmt und dUTCh ruc kwir kendes Einsetzen aile ande ren. Ta helle 2-2 Suuktogramm - Gau6-Elirnination Eingabe der Koeffiz jenten des Gl eich ungs sysrems i: O; i-cn; i t+
112
2 Prozedurale Progrummierung
j - O;j
/ a ii
C=3ji
kei e l ; k-en; k++ 1 3jk - 3j k - C 3 ik
ien; i>O; i-
La-
3i,n.1
k - i + l (l ) n
I I a =Ia - aik xk Xi = Ia /3ii Losung ausgebe n COO t 2-8 Anwcndungsbeispiel -, GOluB-Elimination
1*
0'
G~ us s E l i m i na t io n.cpp
Loesung eines linearen Gleichungssystems nac h der Methode der Gauss-Eliminat i on
li nc l ude
'include
u sing name s pa c e s t d; II Ma t r i ze ng r OBe
con st i nt n =4 ;
vo i d Aus gab e ldoub l e all In] ) 1 f o r (int k =O;k
lint j:O;j
c ou t «
ar k) [ j] « "
endl;
int main () (
double a ( n ] [ n J;
double b ln ), x l n ); int L j,k; double f ;
Il n * n Ma trix / / Lo e s u ng s ve k t o r / /C ou n t e r
// Fa k to r zu r Ze i l e na ddition
II Eingabe der Matrix cou t « "Bi t t e Matrix zei lenweise
f or (1 =0 ; i
e i ngeben ~
«
e ndl ;
";
2.3 Parameter
113
II Eing a be de s Vek t o r s der rechten Se i t e cou t « "Bi t t e Loesungsvek t o r e i n geben " « f or ( i=O; i
e nd! ;
E lim~nat i ons s c hritte
{
Au s g a be (a l ; f o r (j= i +1; j
Ila l l e f o l ge n de n Ze ilen bearbeiten
(
f = - al jJl i) I a li ] [ i]; I I Fa k tor bes ttmmen al jlli) = 0 .0; Ild i e s e s Element wird zu 0 g emach t f or Ik= i +1; k< n; k ++1 Il z um Res t de r j - ten Zei le das Il f - f a c he de r i- t en Zeile addie ren a [ j ] [k] = a[ j ] I kl +f"' a{i]l k] ; b[j ] = b[ j ] +f *b [ i ) ; Il e bens o auf de r r echten Se i t e )
Au s g a be (a) ; II x iii aus Dreiecksmatri x bestimmen f or ( i =n - 1 ; i >=0 ; i - -1 (
x li) = b l i ); I/ r ech t e Se i t e f or (j=n- 1;j>i;j- -1 xl i ) = x li) - al i ] f j l*x [ j l ; I/al l e bekann ten x [ j ] einset zen x i i I = x l il / al i ili ]; Ild u r c h Oiago naleleme n t d i v idieren
II Er gebni s ausgeben cou t « "Er g e b n is: " « endl ; f o r U =O;i
Ein ein faches Beispie l so li die Anwendun g dernonstrieren.
2x t +6x 2 - ] x3 + 12x 4 =- 6 4x t + 3x 2 + 3x3 + 15x4 = 6 4xt - 3x2+6x3+6 x4 = 6
(2.11 )
- 3x2+ 5x3- 2x4 =1 4 8ild 2-13 zeigt da s Erge bnis . Temperatu rvertcilun g Nun folgt als Praxis beispiel [ Btld 2-14 ) die Te mperaturverteilung innerhalb eines Kanals mil rechteckigem Querscbnn t. An der Rohrwand werden unrerschiedliche Temperaturen ge rnessen.
114
2 Prozedurale Progrummierung
Es souen aile Temperaturen an den Giuer-Punkt en bes timrm we rde n uruer der Ann ahme. dass ein innen liegender Punkr den Mirtelwert alief be nachba rten Punkte hal.
Bild 2- 13 Er~'l;lmis dcrr Bcispiela usweneng
12 12 12
16 16
12
24
IS
x,
'.
x,
"
x
"
x"
Xu
x"
x"
24
32
x,
42
x,
' " '" 16
36
24
X,
16
42 42
30 16 16
Hitd 2-14 Gith..r -Modcll mil Randtcmpcraturcn in Grad Celsius
Jed er Punkt f!('ht zu einem Viertel in die G teic bu ngen ein und da wir nic ht ums tandlic h m il Briichen arbei ten wolten. mu l1iplizier en wi r die Gleichungen mil 4 und so ergeben sich die nachfol genden Gleichunge n.
2.3 Parameter
115
X, : 4x I - x a - xl> = 24 x 2:- xI
+ 4x2 - xl- x,
xJ :- x2
+ 4xJ
x4:-x l
+ 4x4 - xs - x9
xs : - x 4
+ 4xS - x IO
= 18
- x4 - xII = 24
x6:·xl + 4x6 - x7
= 36
= 84
- XI I
= 22
x7: - x2 - xl>
+ 4x 7
x8: -x J - x7
+ 4xg - x9 - xn
X9:-X 4 - xII xlO :- Xs - x9 x lI :- Xli
+
- Xg - xl2 = 0
= 0
+ 4x9 - xlO -x14 = 0 + 4xIO ox' s = 30
4x u - Xu
x12: -x 7 - xII
+
= 34
4x12 - xll = 24
xu> XII - xu + 4xu • xl4 x' 4:- x9 - Xu + 4 xl4 - XI S x IS:- xlO - xI4
+
(2 .12)
= 32
= 24
4x lS = 32
D ie entsprechende n Dalen liest die Hauptfunktion aus einer zu satz liche n Datenfun ktion. Das Haupiprogr amm iSI entsprec hend anzupass en (Leser). Codl' 2-9 Erg-i lVcndc Datcncingabe-Funktion
v oid Da te n (doubl e a ( J ( n J, dou ble bt l ) (
int L, j; cou t « ,,-------- Daten ---- - - - - ---; cou t « "n " " « n « e n d l; f o r ( i"O; i
a l i ] [j] " 0 ; i f ( i""j) a [i l [ jl " 4; )
a[O ] [II " -1, a [ O] [5]
- 1;
a [l ) [01 " -1, a [ 1 1 [2] -1; a [ l ) [61 " -1; a12 ) [ 1 ] - 1 , a[2] [ 31 " - 1 ; a l 2 J [7] - 1; a [ 3 1 [ 2] " -1 , a [3 1 [ 4 ] - 1; a (3 1 [8] " -1; a [ 4 ] [3 ] " -1 , a[ 4] [ 9 ] - 1; a [S ] [0 ] - 1, a[ 5) [8] " - 1; a [ S ] [1 0 ) " - 1; a[ 6 ] [ 1) -1, a[6) [ 5] " - 1; a[ 6]17 1 " - 1 , a[6) [ 11) " - 1; a[71 ( 2) " -1 , a17] [6) " - 1; a[7] (8 ) " - 1 , a(7) {l 2) " - 1;
116
2 Prozedurale Progrummierun g a[8 ] [3] = -1, a [ 81 (7 1 = -1; a[ 8] [9] = - I , a(8 1 [13 ) '" - 1; a19] [ 4] = -I , a(9 ] (8 1 = - 1; a19] (l4) :: -1 ; allO) IS) = - 1, a[1 01 [11] = -1; alll) (6) '" -1. a [111 [1 0j = -1; alll) (12] '" - 1 ; a(l2) ( 7) :: - 1 . a [12J [ 11 ] - 1; all :.!) (l$ J :: - 1 ; all )) ( 8) = - 1 . a[13] [ 1 2 ] - 1; a1l 3) (14 ] = - 1, a(l4) ( 9) = - I , a[14] [ 13 ] = -1 ; bi OI = 2 4 ; bill :: 1 8; bl21 = 24;
b l) )
36;
b[4 ]
84;
b[S]
22;
= 0; b! ?] = 0; bl S] = 0;
b[6]
b1 9 ] blI O] bill ]
3 0; 34 ; 24 ;
b1l 4)
32 ;
b1l2] = 32 ; b1l3) = 2 4;
Die erminelten Temper aturdaten lassen sich in einem Diagramm zur Verde utlichung darstellen.
h' 9 ~ bo ,
i,'
16 . ~1 8 2
211.6.1 6
2~.]]n
1I.226J ]~.nI6
2 1. 1l H
22.60 6'1 2~. 1?41 2·1.~~4]
28. '11
1~.h~11
2J. I 'I'lh
26.l'rlb
21. O]b~ 21. n 11 Oriic ~~"
~ir
h 'h
Dild 2- 1!i Ergcbnis dc r Tcmper atu rverteilung
D bun gen
Schreibe n Sie em erganzendes Programm. mit dessen Hilfe Sie die Randtempe raturen verandern konnen. Wie sieht die Temperaturverteilung fllr ein rundes Rohr aus?
2.4 Deklararione n und Gultigkeirsberelche
117
2.4 Dekl aration en und G ultigkeits be re lche l>ekl a r al ion cn Beve r ein Beze ichner in einem C++ Progra mm be nutzt .....erden karin, muss er dekla riert .....erde n. FUr ein fache Daten typen wurde dies bereirs beschrieben. Erne Dek larano n teilt dem Comp iler mit. auf .....elc he A n von Entil! t sich der Name be ziebt. Beispi ele: Dekla ranonen und ln itialisieru ngen c ha r z ; i n t cou n t = 5 ; c onst d ouble p i 3.1 4159265 ; extern i nt f ehle r ; cons t c ha r - j a h r esze i t l l (~ Fruh l i ng~.~S omme r·.· H e rbs t·
=
=
.· W i n t e r ·) ;
Deklarationen assoziieren nicht nu r einen Typ m it einem Namen, sie definieren auch eine Ent itlit ffir den Namen. aufden sie sich beziehen. Eine Deklaration besteht aus vier Te ilen : Einem op tionalen Spezifizierer, einem Bas istyp. einem Dek larator und einem optionalen lnitialisierer. :-.1it Ausnahme vo n Funktionen und Namensbereichsdefinitionen wird ein Deklaratoe m it ei nem Semiko lon beendet. Beispiel : Deklara tion
Hier ist de r Basistyp char. der Deklarator " Formenl] und der Initialisalor = 1. .. 1. Ein Spezifizierer ist ein Schlilsselwort wie er.....a virtual oder extern. das ein Nic hr-Typ-Aunbu t filr das Deklarierte spez if iziert. Ein Deklarator ist aus eiuem Namen und op uo nale n Dek laratoroperator en zusammenge serzr. Die haufigsten sind in der nachfolgenden Ta belle aufgeHihrt. T llbt'lle 2-3 Dcklaratorcn
Deklarat oroperator
Bezeichnung
Typ
•
Zeiger
Praflx
"c onst
konstanrer Zeiger
Praflx
&
Referent:
Prafix
[]
Feld
Postfix
()
Funktion
Postfix
Die Postfixoperatoren binde n starker als die Pranxope raroren.
Dekta r jcrcn mehr ere r Xa men Es ist megfich, mehrere Namen in einer einzige n Deklarati on zu dek lari eren.
118
2 Prozedurale Progrummie rung
Beispie le: Deklarationen von Variab len
l
i n t x ,y ; c h a r a,b , c ;
GUll igkcibbcrclchc Eine Deklaration fiihn einen Namen in einen Galugkensbereich ein. Der Name kan n so mu in einern bes um rmen Te il des Progrnmms be nutzt werde n. Fur ein en in einer Funktion deklari erten Namen (o ft als lokal er Name bezeic hnet) ersrreckt sich der G altigkeitsbereich vom Punk! der Deklaration bis ru m Ende des Blocks. in dem d ie Deklaration auflrar. Ein Bloc k ist ein von eine m Paar gescbweifter Klammem I } begrenzter Codebereich .
Ein Name wird als global bezeichnet, wenn er auBerhalb einer Funktion. etner Klasse oder eines Namensbe reicbs deli niert vvird. Der Giiltigkeitsbereich eines globalen Namens erstreckt
sich vom Punkl seiner Deklaranon his zum Ende der Derei. in der er deklanert wurde. Die Deklaration eines Name ns in einem Block kann eme Deklararion in einem umsc blieuenden Bloc k ode r einen globa ten Namen verdec ken. Ein Name kann in einem Block so definiert werden, dass er sich auf eine andere Eruitat bezieht. Nach v erlassen des Block s erhah de r Name seine vorberige Bedeutung zurack. C OOt' 2·1 0 Dcmoprogremm - globele und lokale Variable
I - Gl obalLokal .cpp 0/
GUl t i gke i tsber e iche von Variablen
. include int x '" 9 ; vo i d
II
globales x
e()
{
i nt x; x"'l ; c out «
Il loka l e s x verdeckt globales x II Zuwe isung an l okal e s x "x . L '" " « x « e ndl ;
int X ; Ilv e r de c k t ers tes l okal e s x x =2 ; I I Zuwe i s ung a n zwe i tes l okal e s x c ou t « "x .V = " « x « e ndl ; cou t « x= 3; c ou t «
"x. L '" " « x « e ndl ; // Zuwe i s ung an e rs t e s lokales "x.L = " « x « e nd l ;
x
i nt main ( l 1 t ll ;
int - p = &X ; Iln immt die Adresse des glohalen x c out « . p = • « - p « e ndl ; s ys t em!" Pa u s e - ) ;
2.4 Deklararionen und Gultigkeirsberelche x _L x _U x _L
~ ~ ~
x_L p
~
9
~
119
1
2
1
3
DrUcken Sle e m e belie b i ge Til lite • .
•
lJild 2-16 Programm ausga bc globale und lokalc Vari able >
Ein verdeckt g lobaler Name kann durch den Bereichsoperaror (::) sichtbar gemacbt werden. C ode 2-11 Dcmoprogramm - \·erded..1 gjobale Variabl e
I '" Ve rdee:k.tGlobal.epp Ve rdec:k.t qlobale Variable
0'
' i nc l u de i nt x :: 9;
q l obal es x
II
void f lJ (
i nt x::l; Il lo:k.a l e s x c ou t « · x . L : • « X :: x : 2 ; II Zuwe i s un q x= 3 ; II Zuwe i s ung cou t « "x . L :: " « x
verdec:k.t g loba l es x « endl ; an globales x an l okales x « endl ;
int mai n () f (J ;
int * p :: &x ; Ii n i mmt d i e Adres s e des globa len x cou t « "p :: " « *p « e nd l; s ys tem( "Pause " ) ;
x. L x _U
x. L x. L p
~
~ ~
~ ~
9
1 2 1
3
DrUc ken S ie ei ne be l iebige Ta s t e
_
BUd 2-17 Progranunausga be - vcrdcc kt glo balc Va riable
Es ist auch moglich. mit einem einzigen Namen ohne Benutzung des Bereicbs-Operetors (::) zwei verschiedene Obiekte in einem Block anzusprechen.
120
2 Prozedurale Progrummierung
CoM 2-12 vcrsc hicdcnc Objcktc 1* Ve rsch i e de ne .cpp
.,
Vers chiedene Ob j e k t e
' i nclude i ntx =9 ;
globales x:
II
v oid f II {
int y =x ; ttbenu t z t globales x : y=9 cou t « · y. L :: • « X « e n d l ; x=22 ; II Zuwe i s ung an l ok a l e s x y=x; l l benu t z t l okales x : y =22 « x « endl ; c out « · x. L " c out -c · y. L =' • « x « endl ;
int maoin (J (
f n ;
int * p
cou t «
= &>0: ; Il nimmt .p = • « *p
d ie Adre s se des globalen x «
endl ;
s y s t em(· Pau se " ) ;
y. L
x. L y. L p
-
~ ~
~
22
9
22 22
DrUc ke n S 1O' e r ne bel u ,hlg e Ta " t e • • •
Bild 2- IM Pr ogrammausgabe - verschicdcne Dbjck re
xamcusruumc Ein Namensraum (en gl. namespace) is! ein Gttltigkeitsbereich. in dem belie bige Objekte w ie Variablen , Funktionen und andere Strukturen deklarien werden konnen. Aile Bibliorheken der Standard Temp late Librar y (ST L) sind zum Name nsraum s td zusammengefass t und werden dur ch die using-Anweisung Syntax : Definition des Standard-Namensraums
I using
n arne s p a c e s t d;
deklariert, wie berelts in ein igen Beispiele n gezeigt . Ein Namensraum kan n deklari en werden und Obj ekte in ihm werden durch den Bereich s-Operator (::) angesproc hen. Der HereichsOperator wird auch als Sco pe-Ope rator bezeichnet.
2.4 Deklararionen und Gultigkeirsberelche
121
Cod l.' 2-13 Dcmoprogra mm - Narncnsranmc 1* Namensraeume . c pp Zeigt die Wirkung v on Namens r aumen "/
' i n clu d e < ios t r e am. h > II Deklaration v on Namens r aum A namespace A
1
int i = S ; int f l i n t x ) {r e t u r n 2 *x+l ; }
II Deklaratio n v on Namensraum 8 namespace 8
1
=
i nt i 6; i nt f lint x l {r e t u r n 2 *x ;}
i n t main 11 (
cou t c out c o ut c out
« « « «
"Der "Der "Der "Der
We r t We r t We r t We r t
v on v on v on v on
i i f f
in in lJ ) (4 )
A, B,
« «
A; 8; « in A, in B, " « " "
;i « ;i « A;; f B;; f
endl ; endl; ( 3 ) « endl ; (4 ) « endl ;
system l " Pause " ) ;
De r Ue t"t vQn 1 in A : 5 Der Ue t"t v on 1 in B: (, Der Wert VQ n f (l ) In A: 7 De r Wet"t VQ n f (4 ) In B: 8 Drll(: ke n S l e e l ne beliebig e La s t e
WId 2-19 Programmausgabc - Narncnsranmc
Namensrnume kormen auch gesc hachtelt deklarien werden. Co de 2-14 Dcmoprogramm -, gcschachtelrc Nnmcnsraumc 1* Geschachtel t.cpp Gesc hac htelte Narnen sr~ume "/
' i n c l ud e < i o s t r e am . h > IIDek l a r a t i o n de r Namensra e ume namespace A {
• __
122
2 Prozedurale Progrummierung
.
int i
5,
narnespa ce B (i n t
int mai n
1
i ot cou t cou t cou t
i
()
« « «
i • 6;)
,,
" De r We r t von i i n rnai n : " De r We :r- t von « i n A' " De r We r t von i i n B, «
,
system l ·Pause ~ l
.
«
i «
A : :i « A : : 8:: i
endl ; endl ; « endl ;
;
Der Wer t von). J.O _in ; 4 De r \Je r t v on i i n A: 5 Der Wert v on ). J.O B: 6 Drlicken Sle e i ne bel i ebige Ta st e . . •
Hild 2-20 Pregranjmausgabe - gescbachtche Narrensrsume
Die S peichc r"k la ~ ~c a utomat ic Fur lokale Variab le und Funktionsargu mente wild auto matisch Speic herplatz reservien . :\.til jedem Emsneg in cine Funktion od er einen Block l I be ko mmen d iese eigene Kop ien. Will ma n diesen Sac hverhalt ex plixit angebe n. so gibt es dazu das (liberOussige) Schlassetwo n QI/ t o . Beispiel:
II Fo l g e nde Deklarationen haben die gleiche Bedeutung i ot i " 5 ; au t o i n t i = 5;
Aullerhalb ihres Bloc ks sind automatic vereinbarte Variable unsic htbar. Cude 2-1!' Dcmoprogmmm -cautoma tic vcreinbartc Variable
; * Au t omat i c. cpp Au t omat i c vereinbar te Va r i a b le "/
' i nc l ude int main () auto int i = 4 ;
1
int i = 5 ; c out « "Der We r t v on i : " «
c out «
"Der We r t von i: " «
s ys t em!" Pa u s e - ) ;
i «
i «
endl ;
endl;
2.4 Deklararion en und Gultigkeirsbe relche
123
Der Wert von 1: 5 Der Wert von i: 4 Dru l:ken S le e In e be liebig e La s t e
lIild 2-21 Ptogrammausgabe -
O//I,m/ot ic
_
vcrembarte Variable
Die Speic hcrklauc §Ialic 1m Gegensarz zu r Speic berkjasse automatic behalt eme stausche Variable ihren Wert so lange. h is sie eine neue Wenzu.....eisu ng erhalt. Wird eine statische Var iable am Anfang nut definiert und nic ht de klariert. so erh.lilt sic vom Comp iler automausc b des Nullelement des Datent yps. Codt' 2-16 Demopeogramm - slatk' verembane Variable
' " Static . cpp St a t ic vereinbarte Var iable
.,
' include int mai n ( I i nt Swrrne( int. x t . f or lint i=1 ; i <5 ; i ++l c out « i « - \ t- « Summe (i ) «
endl ;
s ys t.em( " Pa us e" I ; int. s unee lint x ) 1 s t a t ic i nt s; int i = 5 ; r e turn (s+=x) ;
,
, J
4
,3
,
,n
DJ'uc ken Sle el ne b e l l e bi ge T
8i1d 2-22 l'rOb'fllmmltlisgabe" .f tutic dcklaricrre Variable
.
124
2 Prozedurale Progrummierung
Die Spclchcr klassc es ter n Ist eine Variab le nicht in eine m Block dek lariert. muss sic dort als extern deklariert werden. Cede 2-17 Dcm oprogramm « es tern vereinbarte Variable
'* Extern v e r e i nba r te Variable "' Ex t e rn . c p p
' inc l ude
int rnai n
I)
lnt i = 1; extern lnt k ; cou t « i « - \ t- «
k «
endl ;
5ystem ( -Pause - ' ;
lnt k :: 3;
Il e xt e r n 1 3 Pr iic ken S le e ine be l iebige Ta s t e .
_ .
BUd 2-U Ptogrammausgabe - extern dcklanene Variab le
Funkt ionsnamen sind ebenso im ga nzen Progra mm de klariert und damit geho ren sle auch zu r Speicherklasse extern.
Die Sp elchcrklass e volati le ;\1it volatile dekla rierte Variable sind von der Co mpiler-Optimie rung ausgeschloss en. Dies is! besond ers mr Sysremvanabl e wichtig . Anwcndun gsb cispicl : Lfncarc O ptimicr u ng - Pr oduktl unsoptimlc ruug Bleiben wir welter bei den Gl eic hue gssysteme n. Bei viele n wirtscbafrlichen Problernen gilt es
fU r eine Ziel- oder Kostenfunktion mit n Variablen (2. 13)
einen Extremwert (m inimale Kosten , rnaximale Ausnutzung. etc.) zu linden, fur d ie zusatzlich gegebe ne Nebenbedingungen (G leic hunge n od er Ung leichungen) erfb tlt sind. + a ln x n = a l a2 1xl + a 22x 2 + + a 2nxn :S a 2 a ll xl + a 12 x2 +
usw. m it Xl>-O,. .. .
xn >~'
(2 . 14)
2.4 Deklararion en und Gultigkeirsbereiche
125
Zu r Losung gibt es einige verfahren. Wir befassen uns an dieser Stelle m it der SimplexMeihode von Daruzig. Eine Prod uktion ersrel h mit Lwei Maschin engruppe n ~11' ~ 1 zwei Produk te Pt. Pz mit folg ende n Ze iten und Gewinnen: Tah l"llt 2-& Prod ukticn subcrsj cht
",
~l t
P, (A)
6
Pz (B)
Gewin n
2
3 Euro
4
4
5 Euro
160 SldJWoche
120 StdJ Woche
Die Finna arb eitet mit 40 Stunde n/woche und verfugr aber 4 Mesctnnen der Gru ppe ~I I und 3 Maschinen der Groppe :\ot2. u nter der Ann ahme. dass immer di e ganze Produkti on verkautt werd en kann , isl der max imale Ge winn ges ucht. Kom men wir zur Aufstetjun g des Gleichun gssyste ms. A se i di e wcc benrtic he Produkn on des Prod ukts PI und B die woc henuic he Produktion des Prod uktes P2. ~ il der Gruppe ~ I stehe n 160 Stunden und mit der Gruppe :\012 120 Stunden pro w ocbe zur Ver lUgung. Damit gill: Gesu chi : Maximum von
3A +5B "'> Maximum
(2 .15)
Restriktion en : M +4U S 160
(2 .16)
2A + 4U S 120 A, U 2:;O
Gm fisch ist diese s Pro blem dir ekt le sbar. wenn man die Restriktio nen als Funkuonen im gul tige n Bere ich zeic hnet. B
4n
llA +4 B<= 160
zulassig cr
Bereich
.10
2A +4B<=120
26,7 Hild 2-24 Gralischc
L~sun~
A
126
2 Prozedurale Programmierung
Doc h W iT rmeressie ren uns Hir die Simple x-Methode. Dazu ers relh ma n fllr das Problem eine Tabelle d er nach folgenden Form. A ls Pivorsp alte wird diejenige gewahlt. in der in der untersren Zeile der grN.\le negative Wert steht. In diesem Fall -So Ais Pivotzeile wird diejenig e gewabn. be i der sich der Quotient aus Wert de r letzten Spal te ge teilt durch Wen der Pivotsp eh e den kleinsten Wert ergib t. In diesem Fall ist 160/4 ~ 40 > 120/4 ~ 30. Somit ist das Pivo relem en r die 4 in der zweir en Ze ile. T llb tllt
2· ~
Auswen ung51abclle
Die Tabelle wird nun folgendermalkn umgeforrnt. Die Elemente in der Pivotzeile werden d urch das Pivotelemenr dividiert. Die Elememe der Pivotspahe werden durch da s Pivote tement dividiert und be komm en das umgekehrte Vo rzeic hen. Das Pivotetement selb st wird durch semen Reziprokwen erseta. Aile ubrig en Elemenre werde n nach der Recbteck rege l umgeform l.
a
b
c
p
8i1d 2-25 Rcc hteckrege!
Sei a ein beiiebiges Elem ent au s der al ten Tabe lle, b und c di e im Rechtec k rom Pivotelement p angeordneten Elemen te der allen Tab elle. dan n ergibt sich fiir den neuen Wert
a =a - b . ~ ·
(2,17)
p
Die neue Tabe lle sie ht also bereit s nach der ersten Um fonnu ng wie in Tuhelle 2-6 dargestellt aus. T lIlll'llc 2-6 Auswcrtungstabellc nach der crsrcn Umfonn ung
4.00 0,50
- 1,00 0,25
40 30
-0.50
1.25
150
Die Tabelle w ird sola nge umgeformt . bis in der urueren Ze ile nur noch positive Ele men te stehen.
2.4 Dekla ra rione n und Gultigkeirsbereic he
127
T ah tll r 2-7 Auswen ungstabctle nach dcr lctzten Umfonnun g
0.25 -0.125
-0.25 0.375
10 25
0. 125
1.125
ISS
Zu satz lich we rden die Elemente de r un rersten Zeile und die H emem e der letzt en Spe lte mi t fo rtlaufende n La hlen mar kiert. !::lei jeder Umwandlung we rden dann die Ma rken vo n Prvotzerte und Pivot spahe vertausc hr. Am Ende ste hen in de n Zei len 1.2... .• n in der hint e ren Spe lre di e
w erte rur ltt .lt2. .. .. lt n.
Das v erfahren liefert das gleiche Ergebnis. wie
es von der gralischen Losung kermen.
WiT
namhch dass da s Maxi mum bei 3 ·10 + 5 · 25 = 155 Euro Iiegt . T ab r llr 2-8 Struktogramm - Simplex-Methode
G runddaten n"'4 ; 0; ic n- I: i ++ Feld daten J -0; ic n- I; i++ a(i.j) "'" ...
do Besumme Pivot spalte
i -0; i a(n-2.i)
"
ps- i
Nein J.
x> a( n-2 .i t-1)
J,
Ne in
ps ·i +- I
Bestimm e Pivo tze ile
./.
; 0; ic n-J : i+-+ x- a(i,n-2)1a(i,ps) y -a(i +- 1.n-2)1a( i +- 1,ps)
z'-rninfx.y] z= x
J,
Nem
pzv i
J.
rv Ja p=i +-I
Nein J.
128
2 Prozedurale Programmierung
Umformung
i -O; i
it- ps
Pi votzeile
J. b(pl:, il = U lllrUI1I1UII~
Nein
a ( pl.i)
J.
a( pz.,ps)
t-o; ten- t : i + of-
Pivotspalte
il-pz
Jo
Nein b(i,ps) =-
Umformu ng
Pivotelement Umformung
b(P7-.PS) =
a(i ,ps)
J.
a(p7.. ps)
1 a(p1:,ps)
i=i>; i
Fdd
j'='O; i
it-pz &&j! P' Jo b(i,j)
Nein
ali,j)
J.
a(i ,ps) atpz. j) a(pz. ps )
Ubergabe a(i j) -b(i j). i O. .. n-L j - O... n-I Mark en vertausc hen
x-atpz.n- I) atpz.n- Ij- atn-t .ps)
etn-t .psr- x Schleifenbedingung
I " 0;
icn-z: i++
k-=-O
a(n-2.i )
Ja k 1
Nein ./ .
sola nge k 1 Code 2-18 AnwendungsbcispiclLmcarc Optimicrung - Produktionsopumic rung 1* Pr oduktionsOptimierung .cpp
"'
Cas Pr ogramm bestimmt d ie LOs ung eines Te stbe i s p i e l s
. inc l ude . inc l ude
2.4 Deklararionen und Gultig keirsbe reiche
129
'include <mat h. h> 'include <s tdlib.h> using n amespa c e s td; const i n t n= 4; v oid Au s g a be (doubl e al l [nl l {
int L, f • f or (ln t
i =O;i
{
f or (ln t j ;O ;j
e ndl;
int main ()
r.
int L, int p s , pz ; doub l e a[ 4] [ 4] , b[ 4] [ 4]; doub le x . Y. z ; /I Be i s pield ate n 6, a[O] IO I 4, a [ 0 ]1l1 1 60 ; a [ 0 ]1 21 a [1 11 01 • 2· a [1 11l1 • 4 , a [1 11 21 • 12 0 ; -3 ; a[ 2 ]IOI -5; a[ 2] 11 1 a [2 11 21 • o· /I Marken a [3 ] [0 ] • i • a [3 ] [ I ] 2, a [3 ] [ 2 ] 3, a [ 3 ] [3 ] a[ O] [ 3] • a[ l ] [ 3] • 2 · a[2 ) [ 3] 3,
,, "
Ausgabe (a) ; I I Auswertungs s chlei fe do { II Pi v o t s p a l t e f or ( i=O; i
x = min(a[ n - 2] [ i]. a (n - 2] (1+1)) ; i f (x ==a[n-2) [ i] l ps=i; i f ( x==al n-2) [ 1+ 11 1 p s=i +1 ;
alilljl -c-c
»
-.
130
2 Prozedurale Programmierung cou t «
"Pi vo tSp a l t e _ • «
II Pi v o t zeile f or ( 1 :::0 ; l< n -3;
1
ps «
e nd l;
i ++ )
x = a[i]l n- 21 / a[ i] l ps] ; y ali + l] [n- 21 / a[i + l l Ips ]; z " mi.n Lx , y l ; it ( z : : X! p z : i; if ( z : : y) p z = i +!;
c out « c ou t «
~P ivotZe il e " · Pi vot e l emen t
«
pz «
«
emil ;
a lpz l lps ) «
e nd l «
e ndl;
II umf ormung der Piv otzeile f or 11= 0 ; l< n- 1 ; i + + ) i f (i! =ps )
bl p z)!i) " a lpz)! i ] I a [p z l lps l ;
+'
II umf o rmung de r Pivotspalte f or ( 1 =0; l
b li ] lj ] " a[ i][ j l - a l i l l ps J *al p zlljl / a [pz]lps]; II Obergabe f o r (1=0;1<0 -1; 1 ++) f or ( j :0 ;j
a li) [j J:b[ i ] I j);
II Ma r k e n v e r t aus c hen
x = a [pz] [n -1]; a[pz] [n- 1] = a[n- 1] [ps]; a [ n- 1] Ips ] = X;
/ / Au s g a b e Au s g a b e ( a) ; / / Abbru c h j =0 ;
for
1
(i n t
i= 0 ; i<: n -2 ; i + + )
i f ( ",[ n - 21 (i l<:O. O) j = l ;
1
) while ( j == ll; s ys t em ( • Pau s e · I ;
2.4 Deklararionen und Gultigkeirsbereiche
131
4 .000000 160 .000000 1 .000000 2. 0 00 0 00 4 .000000 120 .000000 2 . 0 00 0 00 - 3 . 00 8 00 0 -5. 0 0 00 0 0 0 .000000 3 . 0 00 0 00 1 .000800 2. 00 0 00 0 3 . 00 0 00 0 4 .000000
b . ~ ~ItI~ "nt
Piuot Sp ...lt e ; 1 Piuo t Zeil e ; 1 Piuo t ele Aent ; 4 .000000 4 .000000
- 1. 0 0 00 0 0 40 .000000 1 . 000000 A. 25AAI'IA 39 .AAAAAI'I 2. AAMAAA - IL S00088 1- 258088 150 .000900 3 . 0000 0 0 1. 000000 2. 0 0000 0 3 • 000000 4 • 000080
~ . SAAAAA
Piv otSp...lte ; 0 PivotZeile ; 0 Pivote lefte n t ; 4 .000000 0 .25 0080 - 0.250 080 10 .000000 1 .000800 - 0 . 125 800 0 . 3 7