Grundlagen der Software-Entwicklung GSE

Größe: px
Ab Seite anzeigen:

Download "Grundlagen der Software-Entwicklung GSE"

Transkript

1 Grundlagen der Software-Entwicklung GSE Friedrich Haase Dieses Skript ist work in progress. Anregungen und Hinweise auf Fehler sind sehr willkommen. Vorlesung FH-Dortmund, Grundlagen der Software-Entwicklung Dr. Friedrich Haase Juli 2017

2 Haase, Grundlagen der Software-Entwicklung 2 Inhaltsverzeichnis 1. Einleitung Ziele Architektur eines Computer Programmier-Werkzeuge Windows Microsoft C++ IDEs Linux Code::Blocks Arduino Android CppDroid Diverse Programmierplattformen Programmbeispiele Zahl- und Zeichendarstellung Zahlen Zeichen C++ Datentypen Algorithmen C / C Variablen Initialisierung Einfache Anweisungen Operatoren Ausführungspriorität Typkonvertierung Felder Deklaration Initialisierung Verwendung Zeichenfelder Steueranweisungen If-Anweisungen Switch-Anweisungen Schleifen Schleife mittels goto while-schleife for-schleife do-while-schleife continue Funktionen Standardfunktionen Vom Anwender definierte Funktionen Rekursionen Überladene Funktionen Strukturen Deklaration Initialisierung Verwendung Zeiger Zeiger und Adressen Verwendung von Zeigern Übergabe von Parameter an eine Funktion Zeiger und Felder...45

3 Haase, Grundlagen der Software-Entwicklung Dynamische allozierter Speicherplatz Speicherplatzverwaltung Typedef Ein-/Ausgabe Standard-Ein-Ausgabe Formatierte Ausgabe Formatierte Eingabe Dateizugriff Gültigkeitsbereiche von Variablen Lokale Daten einer Funktion Lokale Daten und Funktionen in einer Datei Weitere Speicherklassen Modulare Programmierung Multitasking und Echtzeit Technische Systeme Digitale Ein- und Ausgänge PNP- und NPN-Eingänge PNP- und NPN-Ausgänge Analoge Ein- und Ausgänge Spezielle Interface Bus-Systeme C Klassen Konstruktoren und Destruktor Methoden Klassen und Header-Dateien Vererbung Basisklasse und abgeleitete Klassen Initialisierung der Anteile der Basisklassen und Elemente Virtuelle Funktionen Statische Variablen und Methoden Automatisch erzeugte Methoden Überladene Operatoren Standard C++ Klassen string und Containerklassen Beliebte Fehler Mangelhafte oder fehlende Kommentierung Schlecht Wahl von Variablennamen Warnungen des Compilers beachten RYFM Schlechte Strukturierung und Formatierung von Quellcode Mangelnde Fehlerüberprüfung Nicht deklarierte Variablen Nicht definierte Funktionen Semikolon vergessen Überflüssiges Semikolon Nicht initialisierte Variablendefinition Einfaches Gleich-Zeichen für Vergleich verwendete Semikolon an falscher Stellen break in einer switch-anweisung vergessen Feldgrenzen nicht beachten Verwechseln der && und Operatoren Ganzzahlige Division...77

4 Haase, Grundlagen der Software-Entwicklung Nicht initialisierte Zeiger Zeichenfelder auf Gleichheit testen...77 Anhang...79

5 Haase, Grundlagen der Software-Entwicklung 5 1. Einleitung Wie lernt man Schwimmen? Wie lernt man Programmieren? Ein Buch lesen reicht nicht. Man muss es tun learning by doing Ziele Mittels Programmierung kann man zwar mathematische Aufgaben lösen, aber die Schreibweise unterscheidet sich sehr von mathematischen Gleichungen. x = x + 1 Ist keine mathematische Gleichung (wäre auch unsinnig), sondern eine Rechenanweisung. (rechte Seite vom Gleichheitszeichen) Nehme x und addiere 1 (linke Seite vom Gleichheitszeichen) speichere das Resultat als neues x Eine Umwandlung einer Temperatur von C nach F erfolgt in C durchführen tf = tc * 9 / ; Programmieren in C und (etwas) C++ targets Embedded Controller C++ hier nur in geringem Umfang Ziel: programmieren einfacher, kleiner Programme für Berechnungen

6 Haase, Grundlagen der Software-Entwicklung Architektur eines Computer CPU zentrale Recheneinheit ROM nur lesbarer Speicher RAM schreib und lesbarer Speicher In ROM und Massenspeicher bleiben Daten auch nach Abschalten der Spannungsversorgung erhalten. RAM-Speicher ohne Spannung verliert seine Daten. ROM-Speicher ist (normalerweise) nicht änderbar.

7 Haase, Grundlagen der Software-Entwicklung Programmier-Werkzeuge Programmiersprache: eine Methode für den Menschen verständliche und handhabbare Darstellung eines Algorithmus in eine Form zu bringen, die von einem Computer verstanden wird. Maschinensprache Sehr schwer verständlich. Für jeden CPU-Typ anders. Eigentlich sind es ja nur Bitmuster. Im Bild befindet sich daher schon eine (vereinfachende) Darstellung (hexadezimal). Assembler XOR EAX,EAX XOR ECX,ECX MOV EBX,ip_pointer MOV AX,WORD PTR[EBX] XCHG AL,AH MOV CX,WORD PTR[EBX+2] ADD EAX,ECX MOV CX,WORD PTR[EBX+4] ADD EAX,ECX MOV CX,WORD PTR[EBX+6] ADD EAX,ECX MOV CX,WORD PTR[EBX+8] XCHG CL,CH ADD EAX,ECX MOV CX,WORD PTR[EBX+10] ADD EAX,ECX MOV CX,WORD PTR[EBX+12] ADD EAX,ECX Immerhin lesbarer Text. Für jede CPU-Familie anders. Sehr kleinteilig. Jede Zeile ist ein einzelner Befehl. Für nahezu jede sinnvolle kleine Aufgabe sind mehrere Befehle nötig. Aber sehr detailliert. Auch Sonderfunktionen einer CPU sind zugänglich.

8 Haase, Grundlagen der Software-Entwicklung 8 Hochsprachen Hochsprachen sind unabhängig von der verwendeten Rechnerarchitektur oder sollten es zumindest sein. Sie haben aber zumeist Einschränkungen hinsichtlich der angebotenen Funktionalität (kleinster gemeinsamer Nenner). Für allgemeine Aufgaben sind sie bestens geeignet. Hardwarenahe Programmierung ist nicht möglich oder erfordert zusätzliche, spezielle Maßnahmen. Für die Programmierung moderner grafischer Benutzeroberflächen sind spezielle Bibliotheken erforderlich, die jedoch meist plattformspezifisch sind. Compiler für verschiedene Rechnerarchitekturen Spezielle Zielsysteme: Embedded Controller, Smartphones Compiler vs Interpreter Compiler: C/C++, Pascal, Fortran schnell jeweils für ein bestimmtes Zielsystem Interpreter Basic, Python langsam plattformübergreifend

9 Haase, Grundlagen der Software-Entwicklung 9 Zwischenformen z.b. Java Varianten z.b. C-Interpreter, Basic-Compiler Programmiersprachen müssen nicht unbedingt in textueller Form vorliegen. Es gibt auch grafische Programmiermethode, ähnlich den Schaltbildern von elektronischen Schaltungen (IEC 61131, Function Block Diagramm, Ladder Diagramm). Meist benutzt man integrierte Entwicklungsumgebungen (Integrated Development Environment, IDE), die neben dem Compiler auch Programmier-Editore und Projektverwaltung enthalten. Für die Vorlesung C/C++ IDE und Compiler C/C++ ist die meistverwendete Programmiersprache - ca. 50% von allem. Java auf dem 2. Platz - eher wegen Web- und Smartphone-Anwendungen. Für technische und naturwissenschaftliche Anwendungen weniger geeignet. C ist eine sehr leistungsfähige Programmiersprache. Aber sie erleichtert es auch Fehler zu machen. Dies hat sehr zu ihrem Ruf als gefährliche Programmiersprache beigetragen Windows Microsoft C++ IDEs Mehrere Versionen von C++ Arbeitsumgebungen sind bei Microsoft kostenlos erhältlich Ab Windows 7 ist auch Microsoft Visual Studio 2013 geeignet. Vorhandene Projekte der 2010-Version (z.b. Praktikumsaufgaben) werden automatisch konvertiert. Microsoft Visual Studio Community, ebenfalls ab Windows 7, ist für Studenten kostenlos erhältlich. Ein Installationsstarter ist im CIP-Pool auf L:/Haase/GSE vorhanden. Alle Beispiele arbeiten als Konsolen-Anwendungen. Um zu verhindern, dass sich das Ein-/Ausgabefenster am Programmende sofort schließt, ist in den Beispielen für Visual C++ eine Eingabeanforderung _getch() am Programmende angefügt. Hierzu ist auch die Präprozessordirektive #include <conio.h> eingebunden. Die Programme warten am Ende also auf eine Eingabe, die jedoch nicht mehr weiterverarbeitet wird Linux Code::Blocks Auf einem Linux-Rechner oder in einer virtuellen Umgebung mit einem Linux Betriebssystem. Code::Blocks benutzt den gcc-compiler und den gdb-debugger. Statt auf einem Linux-Rechner kann Linux auch in einer virtuellen Umgebung (virtual machine) laufen. VirtualBox findet man bei

10 Haase, Grundlagen der Software-Entwicklung Arduino Netter, preiswerter Embedded Controller. Sehr verbreitet, viel anschließbares Zubehör. Arduino UNO ca. 25, teilweise ab 15, weitere kleinere oder größere Versionen, NANO, MEGA etc. IDE mit Compiler ist kostenlos. Ein aktuelle Version ist im CIP-Pool auf L:/Haase/GSE vorhanden. Ein- und Ausgaben müssen beim Arduino über die serielle Schnittstelle (USB-Anschluß) in ein Fenster der Arduino-IDE geleitet werden (oder zu einem seriellen Monitorprogramm) Android CppDroid Einfache, kleine Programme in C/C++ auf dem Android-Smartphone oder Tablet programmieren. Auf Google Play Store oder im CIP-Pool auf L:/Haase/GSE. Kostet ein paar Euro um die Reklame loszuwerden (in-app Kauf). Eine ähnliche App C4droid findet man im Google Play Store Diverse Programmierplattformen Für industrielle Anwendungen von Embedded Controllern: Keil IAR Raisonance AVR-Studio teilweise als kostenlose Test- oder Demoversion erhältlich. Überwiegend für Windows konzipiert. Für Apple OS X ist gcc oder Xcode bedingt geeignet Programmbeispiele Parallel zu diesem Skript gibt es Programmbeispiele für erwähnten Programmierplattformen. Diese Beispiele sind weitgehend ähnlich oder gleich gehalten. Soweit möglich verwenden diese Beispiele die Ein- und Ausgabe cin und cout von C++. Hierzu ist auch die Präprozessordirektive #include <iostream> eingebunden. Bei Arduinos wird jedoch die für diese Plattform normale serielle Ein- und Ausgabe verwendet. Einige Beispiele insbesondere für Arduinos sind als zyklische Programme ausgelegt. Dies entspricht der gängigen Anwendung von Embedded Controller.

11 Haase, Grundlagen der Software-Entwicklung Zahl- und Zeichendarstellung Computer benutzen umschaltbare Elemente genannt Bits. Jeweils nur einer von 2 Zuständen möglich Null oder Eins, Strom oder kein Strom, wahr oder falsch. Da man mit nur einem Bit kaum etwas anfangen kann, kombiniert man mehrere Bits zu größeren Einheiten. So sind 8 Bits üblicherweise 1 Byte. 16, 32 oder 64 Bits werden ein Wort genannt, abhängig von der verwendeten Rechner-Architektur Zahlen Zur Darstellung von Zahlen gängig Zehnerystem es gibt nur die Ziffern 0.. 9, also 10 Ziffern In der Datenverarbeitung viel verwendet Dualsystem (Zweiersystem, Binärsystem) es gibt nur die Ziffern 0 und 1, also 2 Ziffern Hexadezimalsystem es gibt 16 Ziffern 0..9 und zusätzlich (ersatzweise) A.. F als Ziffern 10 bis 15 Stellenschreibweise vgl. römische Zahlenschreibweise Zehnersystem (10er-System) Stellen für Einer, Zehner, Hunderter,... Binärsystem (Zweiersystem) eine Ziffer steht für 1 Bit Stellen für Einer, Zweier, Vierer, Hexadezimalsystem eine Ziffer steht für 4 Bit Stellen für Einer, 16-er, 256-er, Schreibweise in C/C++ mit vorangestelltem 0x, z.b. 17 hexadezimal 0x11 Die Rechenmethoden sind immer gleich. Beispiel Dec2Hex Beispiel Hex2Dec Ganzzahlen Man unterscheidet in der Rechnertechnik bei ganzzahligen Werten nach der Anzahl der verwendeten

12 Haase, Grundlagen der Software-Entwicklung 12 Bytes und ob auch negative Zahlenwerte darstellbar sein sollen. Beispiel Sizeof Größe mit Vorzeichen ohne Vorzeichen 1 Byte char unsigned char 2 Byte short unsigned short 4 Byte long unsigned long 8 Byte long long unsigned long long Die 1 Byte großen char dienen auch der Speicherung von Buchstaben und Ziffern daher der Name. Bei den meisten Compilern speichern sie Zahlen mit Vorzeichen. Gelegentlich einstellbar. Auch mit vorangestelltem signed oder unsigned. Sehr häufig findet man auch die ursprünglichen Ganzzahltypen (integer) int und unsigned int. Je nach Architektur können diese jedoch 2, 4 oder sogar 8 Bytes haben. Für die Varianten mit Vorzeichen darf auch signed vorangestellt werden. Allen außer char darf auch int nachgestellt werden z.b. unsigned short int. Neuere Compiler kennen auch ganzzahlige Datentypen Namen, die die Bitgröße unmittelbar im Namen tragen z.b. int8_t, int16_t, uint32_t etc. Negative Zahlen Einerkomplement 1 Bit als Vorzeichen. Ungebräuchlich. Zweierkomplement Beispiel für Zweierkomplement mit 4 Binärstellen (Zahlenbereich -8 bis +7) binär dezimal Komplement von 6 1 addiere Probe Der Übertrag in die (nicht existierende) 5. Stelle entfällt / wird ignoriert. Überlauf Wird der darstellbare Bereich bei einer Operation über- oder unterschritten, so ergeben sich unsinnige bzw. völlig falsche Werte. Wird beispielsweise zu der Zahl mit dem Datentyp unsigned short (2 Bytes) eine 1 addiert so ergibt sich nicht sondern der Wert 0. Im Binärsystem besteht die Zahl aus 16 mal 1er-Bits. Eine Addition von 1 führt zu 16 mal 0er-Bits und einem Übertrag in das nicht mehr vorhandene 17. Bit.

13 Haase, Grundlagen der Software-Entwicklung 13 Fließkommazahlen Festpunktzahlen werden langsam unüblich (2014). Stattdessen exponentielle Darstellung mit Mantisse und Exponenten - allerdings binär und nicht dezimal. Früher gab es diverse Standards, heute überwiegend IEEE-754 / IEC Beispiel Sizeof Größe Datentyp 4 Bytes float 8 Bytes double 10 Bytes Extended (selten) 16 Bytes long double (sehr selten) Fließkommazahlen haben nur eine begrenzte Genauigkeit gewissermaßen ein Anzahl gültiger Stellen. Außerdem werden sie rechnerintern in binärer Form dargestellt. Daraus resultieren gelegentlich Überraschungen. Beispielweise hat der Wert von 1/10 in dezimaler Darstellung nur eine einzige Nachkommastelle ist also leicht exakt darstellbar. Als binäre Zahl hingegen ist 1/10 ein unendlicher, periodischer Bruch und daher mit endlich vielen Bits nicht exakt darzustellen. Die Rechenmethoden sind gleich. Beispiel: Division von 1 durch 10 Die interne Darstellung nach IEEE 754 verwendet allerdings ein anderes Format - eine binäre Exponential-Darstellung. Die Genauigkeit der Fließkommazahlen liegt bei etwa 7 Stellen für die 4-Bytes float und bei etwa 16 Stellen für die 8-Bytes double Zeichen Um Buchstaben, Ziffern, Sonderzeichen zu behandeln, ist eine eindeutige Zuordnung von Bitmustern zu den einzelnen Zeichen erforderlich. Kleines Alphabet für die wichtigsten, englischen Zeichen (1 Byte).

14 Haase, Grundlagen der Software-Entwicklung Zeichen (ASCII) einigermaßen einheitlich standardisiert. Die übrigen 128 Zeichen (hexadezimal 80 bis FF) wurden mehrfach unterschiedlich definiert. Einzelne Zeichen kann man in einem Programm benutzen, indem man diese zwischen einfache Hochkommata setzt. char achar = 'L'; oder if ( ch == '4' ) Für einige Sonderzeichen gibt es spezielle Formen, die einen vorangestellten rückwärtigen Schrägstrich nutzen. \n Zeilenwechsel \r Wagenrücklauf \f nächste Seite \t Tabulator \' einfaches Anführungszeichen \" doppeltes Anführungszeichen \\ rückwärtiger Schrägstrich In besonderen Fällen kann man auch die hexadezimalen oder dezimalen Äquivalente der Zeichen angeben. char letterl = 0x4C; oder if ( adigit == 0x37 ) // check for digit '7' Fremdländische Zeichen wie beispielsweise Ä, Ö, Ü, ß sind in den ersten 128 Zeichen nicht vorhanden, wurden aber länderabhängig und auf unterschiedliche Weise in den zweiten 128 Zeichen untergebracht. Für kyrillisch, griechisch, arabisch oder gar chinesisch ist diese Methode jedoch ungeeignet. Großes Alphabet genannt Unicode (ISO/IEC 10646) für alle existierenden Zeichen (4 Bytes) (lebend, tot, graphisch, ) z.b. Japanisch (hier Katakana)

15 Haase, Grundlagen der Software-Entwicklung 15 Für die chinesische Schrift ca Zeichen. Da reichen inzwischen auch 2 Bytes zur Codierung nicht mehr aus (Windows). In der nächst größeren Stufe von 4 Bytes werden z.z. 23 Bits von Unicode genutzt ( Es gibt mehrere Formen der Kodierung hierfür. Eine weit verbreitete Codierung genannt UTF-8 nutzt je nach Zeichen (bzw. code point) 1 bis 6 Bytes ( , Web, etc.) C++ Datentypen In moderneren C Implementierungen und in C++ gibt es einige zusätzliche Datentypen. Teilweise sind diese unmittelbar in die Sprache eingebaut, teilweise gehören sie zu Standardbibliotheken. bool (in C++) Ein (ganzzahliger) Datentyp, der nur die Werte 0 und 1 annehmen kann. Als Synonyme sind auch die Schlüsselwörter true und false erlaubt. bool bfertig = true; bfertig = 0; if ( bfertig )... // mit oder ohne Initialisiernng // oder bfertig = false // als Bedingung complex (ab C99 und in C++) Eine vergleichsweise neuere Ergänzung für komplexe Zahlen. string (in C++) Als Teil einer sehr bequeme anzuwendenden Standard-Bibliothek. Üblicherweise sind string-variablen nicht auf ein Feld aus 1-Byte char beschränkt sondern erlauben einenteil oder den ganzen Unicode- Zeichensatz. string singername = "Amy Winehouse"; string singername("amy Winehouse"); Für den Datentyp string sind eine Vielzahl von Funktionen definiert. Beispiel String

16 Haase, Grundlagen der Software-Entwicklung Algorithmen Zu den ersten, ursprünglichen Aufgaben von Computern gehörten Berechnungen, oftmals militärischer Art. Heute sind sie aus kaum einem Lebensbereich wegzudenken. Nur sehr einfache Berechnungen können durch eine einzelne Formel ausgedrückt werden. Meist sind längere Rechenwege erforderlich. Solche Rechenwege nennt man Algorithmen. Sie bestehen aus einer mehr oder weniger festgelegten Reihenfolge einzelner Rechenoperationen und können auch Fallunterscheidungen enthalten. Algorithmen werden gelegentlich durch sogenannte Flussdiagramme dargestellt. Das nachfolgende Diagramm zeigt die iterative Berechnung einer Quadratwurzel. Beispiel SquareRoot Solche Diagramme (oder Struktogramme) sind intuitiv sehr leicht verständlich. Sie werden daher auch für andere Zwecke als Programmierung verwendet. Es gibt einige alternative Diagramme Nassi Shneiderman, UML etc.

17 Haase, Grundlagen der Software-Entwicklung C / C++ Programmbeispiel #include <iostream> using namespace std; int main() cout << "Hello World!" << endl; return 0; Ein Programm besteht aus einer Reihe von Deklarationen und Anweisungen. Alle Anweisungen werden mit einem Semikolon abgeschlossen. Beispiel HelloWorld Die Methoden für die Ein- und Ausgabe sind in den Programmiersprachen sehr unterschiedlich. Cout für Ausgaben und cin für Eingaben gehören zu C++. In reinem C verwendet man u.a. printf- und scanf-funktionen. In grafischen Benutzeroberflächen müssen (üblicherweise) darzustellende Werte an Objekte übergeben werden. Das Beispiel ist ein sogenanntes Konsolen-Programm. Die Darstellung erfolgt in einem Textfenster oder unmittelbar auf dem Bildschirm, im Gegensatz zu einem graphischen (GUI-) Programm. Im Beispiel wird der Text Hello World! auf dem Bildschirm ausgegeben. Die Ausgabe von endl bewirkt einen Übergang in die nächste Zeile. Aller ausführbarer Programm-Code befindet sich in C/C++ in Funktionen. Im Beispiel gibt es nur die Funktion main, die in diesem Fall keine Übergabeparameter in () benötigt und einen int-wert als Resultat zurückliefert. Die Bestandteile, der Body (Körper) einer Funktion steht innerhalb geschweifter Klammern. Die Funktion main ist gewissermaßen der Hauptteil eines Programms und wird als erstes aufgerufen. Der Rückgabewert kann als Fehlerkennzeichnung verwendet werden. Der Wert 0 gilt als fehlerfrei ausgeführt. Am Anfang eines Programm-Codes findet man meist spezielle Compiler-Direktiven. Mit diesen wird dem Compiler mitgeteilt, wie er arbeiten soll. Im Beispiel oben wird die iostream-bibliothek eingebunden wg cout - und der Namensraum std ohne explizite Angabe genutzt ebenfalls wg cout. Es ist üblich Programm-Code gut lesbar zu schreiben. Zwingend nötig ist dies in C bzw. C++ nicht. Das Programm oben hätte man auch in eine einzige Zeile und weitgehend ohne Leerzeichen schreiben dürfen (ausgenommen die Prozessor-Direktive in der ersten Zeile). #include <iostream> using namespace std;int main()cout<<"hello World!"<<endl;return 0; Es gibt aber keine festen Regeln für die Schreibweise. Solange der Compiler Schlüsselwörter, Namen u.a. identifizieren kann, sind Leerzeichen, Tabulatoren oder Zeilenwechsel funktional bedeutungslos. Sie können aber die Lesbarkeit verbessern. Leerzeichen etc. werden in C/C++ als white space bezeichnet.

18 Haase, Grundlagen der Software-Entwicklung 18 Normalerweise sollten Programme in textueller Form kommentiert werden. Außer bei trivialen Programmen kann man aus dem Programm-Code allein unmöglich oder allenfalls mühsam den Zweck einzelner Anweisungen verstehen. In /C/C++ werden Kommentare in den Programm-Code eingestreut und für den Compiler in besonderer Weise als Kommentar gekennzeichnet. Die älteste Form, der C-Kommentar, verwendet die Zeichenfolge /* als Anfang eines Kommentars und die Zeichenfolge */ als Ende des Kommentars. Der komplette Text dazwischen hat für den Compiler keine Bedeutung. Er darf sich auch über mehrere Zeilen erstrecken. In C++ trat ein weiterer Kommentar hinzu. Er beginnt mit der Zeichenfolge // und geht bis zu Ende der Zeile. /* dies ist ein einzeiliger Kommentar */ /* dies ist ein mehrzeiliger Kommentar */ // und hier ein Kommentar bis zum Ende der Zeile

19 Haase, Grundlagen der Software-Entwicklung Variablen Sinnvolles Programmbeispiel Umrechnung von Celsius-Temperaturen in Fahrenheit-Temperaturen. #include <iostream> using namespace std; int main() double tc, tf; cout << "Celsius 2 Fahrenheit\n"; cout << "Enter C: "; cin >> tc; tf = 1.8 * tc ; cout << tc << "C = " << tf << "F" << endl; return 0; Variablendeklarationen bestehen aus der Angabe des gewünschten Datentyps z.b. double und einem Namen für die Variable z.b. tc. Mehrere Variablen können gleichzeitig - durch Komma getrennt deklariert werden z.b. double tc, tf. Jede Deklaration muss mit einem Semikolon abgeschlossen werden. Die Namen von Variablen müssen mit einem Buchstaben (oder einem Unterstrich) beginnen, gefolgt von beliebig vielen weiteren Buchstaben, Ziffern und Unterstrichen. Groß- und Kleinbuchstaben sind in C/C+ + verschiedene Zeichen (anders als beispielsweise in Pascal oder Strukturiertem Text). VA und Va sind in C/C++ also die Namen von 2 verschiedenen Variablen. Einige Namen sind für die Programmiersprache reserviert z.b. using, return oder die Bezeichner für die Standard-Datentypen int, char, double etc. Variablennamen sollten aussagekräftig gewählt werden. Also eher TempC und TempF statt tc und tf oder sogar temperaturcelsius und temperaturfahrenheit. Häufig wird jedes Teilwort (evtl. außer dem ersten) in einem Variablennamen mit einem Großbuchstaben geschrieben z.b. temperaturmessungpt100incelsius genannt Camel Notation. Eine andere häufig verwendete Methode stellt jeder Variablen einen typabhängigen Präfix voran. Integer- Variablen erhalten ein vorangestelltes n, Variablen vom Typ double wird ein d vorangestellt. int double nanzahl; dtemperatur; Hier spricht man von der Ungarischen Notation (Hungarian Notation), benannt nach dem Microsoft Programmierer Charles Simonyi. Beispiel C2F Beispiel F2C Beispiel SquareRoot Initialisierung Häufig sollen Variablen schon von Anbeginn festgelegte Werte besitzen, initialisiert werden. Für das

20 Haase, Grundlagen der Software-Entwicklung 20 Programmbeispiel oben Umrechnung von Celsius-Temperaturen in Fahrenheit-Temperaturen sind folgende initialisierte Variablen denkbar. double scalec2f = 1.8; double offsetc2f = 32.0;... tf = scalec2f * tc + offsetc2f; Erforderlichenfalls können solche Variablen auch noch als Konstante also unveränderlich definiert werden. const double scalec2f = 1.8; const double offsetc2f = 32.0; Solche initialisierten und unveränderlichen Variablen können durch gut gewählte Namensgebung zum Verständnis eines Programms beitragen. Werden in einem Programm häufig Umrechnungen von Bogenmaß zu Winkelmaß und umgekehrt benötigt, so sind folgende Variablen praktisch. const double Pi = ; const double Radiant2Angle = 180.0/Pi; const double Angle2Radiant = Pi/180.0;

21 Haase, Grundlagen der Software-Entwicklung Einfache Anweisungen Die typischen Aufgaben von Programmen sind Berechnungen irgendwelcher Art. Programm-Code hat daher eine gewisse Ähnlichkeit mit mathematischen Gleichungen. KreisUmfang = 2 * Pi * Radius; KreisUmfang, Radius und wohl auch Pi sind die Namen von Speicherplätzen oder Variablen. Die Gleichung verwendet die bereits vorliegenden Werte für Pi und Radius zur Berechnung des Kreisumfangs. Das Ergebnis wird in der Variablen KreisUmfang abgelegt. Betrachtet man solche einfachen Anweisungen an der Stelle des Gleichheitszeichens geteilt, so findet man auf der rechten Seite ein Rechenvorschrift bestehend aus Konstanten und Werten aus Variablen verknüpft durch mathematische Operationen. Die linke Seite vom Gleichheitszeichen besteht lediglich aus dem Namen einer einzelnen Variablen in der das Resultat abgelegt werden soll. Das Gleichheitszeichen entspricht also nicht dem Gleichheitszeichen der Mathematik sondern bedeutet eine Wertzuweisung. Deshalb ist X = X + 1 eine sinnvolle Anweisung. Mathematisch betrachtet wäre es sinnlos. Jedoch als programmierte Anweisung bedeutet es ein Inkrementieren (um 1 erhöhen) der Variablen X. In C/C++, aber auch in vielen anderen modernen Programmiersprachen, muss jede Anweisung mit einem Semikolon abgeschlossen werden. Dies hilft dem Compiler bei der Arbeit. Der rechtsseitige Ausdruck muss alle mathematischen Operationen explizit angeben. Die in der Mathematik übliche und unmissverständliche Schreibweise KreisUmfang = 2 Pi Radius; ist nicht zulässig und ergibt eine Fehlermeldung durch den Compilers Operatoren Neben den gängigen Operatoren Plus (+), Minus (-), Mal (*) und Geteilt (/) gibt es eine Vielzahl weiterer Operatoren. Da es nicht genügend Tasten auf der Tastatur für alle mathematischen Operatoren gibt, werden einige Operatoren durch 2 ohne Leerzeichen aufeinanderfolgende Zeichen dargestellt z.b. die Vergleichsoperation auf größer oder gleich wird >= geschrieben. In der Mathematik haben Operatoren eine Rangfolge Punktrechnung geht vor Strichrechnung. Schon im Beispiel der Konvertierung von Celsius nach Fahrenheit wurde diese Vorrangregel ohne Erwähnung benutzt. Bei C/C++ (und bei fast allen anderen Programmiersprachen) gelten die normalen mathematischen Vorrangregeln. Die Operatoren legen auch die Ergebnisdatentypen fest. Meist sind es die gleichen Datentypen wie die Operanden. In sind 1 und 2 Ganzzahlen. Daher wird auch das Ergebnis ganzzahlig sein. Eine Überraschung gibt es bei der ganzzahligen Division. 5 / 2 ist nicht etwa 2.5 sondern 2. Auch hier ist das Resultat ganzzahlig

22 Haase, Grundlagen der Software-Entwicklung 22 und es wird nach unten abgerundet. C/C++ kennt eine Vielzahl von speziellen Operatoren, die in anderen Programmiersprachen nicht zu finden sind.?? reichlich Klammern verwenden Ausführungspriorität Aus

23 Haase, Grundlagen der Software-Entwicklung Typkonvertierung Für gelegentlich notwendige Umwandlungen von einem Datentyp in einen anderen gibt es in C/C++ sogenannte Type Casts. Die möglichen Umwandlungen sind allerdings beschränkt. Man kann eine Ganzzahl in eine Fließkommazahl wandeln da hierbei kein Stellenverlust eintritt. Umgekehrt kann man aber eine Fließkommazahl nicht in eine Ganzzahl konvertieren, weil hierbei der Nachkommateil abgeschnitten wird. Für einen Type Cast verwendet man in C den Datentyp in Klammern vorangestellt, z.b. adouble = (double)anint; anunsignedshort = (unsigned short)asignedshort; In C++ kann ein Type Cast auch wie eine Funktion geschrieben werden. Allerdings geht dies nur mit Datentypen die aus einem einzelnen Schlüsselwort bestehen, also nicht als unsigned int (). adouble = double(anint); asignedshort = short(anunsignedshort); Beispiel TypeCast Beispiel PtrCast Eine andere wichtige Anwendung werden Type Casts im weiteren Verlauf bei Zeigern finden.?? C11 named cast: static_cast, dynamic_cast, const_cast, reinterpret_cast

24 Haase, Grundlagen der Software-Entwicklung Felder Häufig müssen mehrere gleichartige Werte (vom gleichen Datentyp) zusammengehalten werden. Vektoren oder Matrizen sind gängige Beispiele. Aber auch zeitlich aufeinanderfolgende Messwerte können etwa für eine Mittelwertbildung zusammengehalten werden. Für derartige Zwecke verwendet man ein- oder mehrdimensionale Arrays / Felder Deklaration Die Deklaration von Feldern erfolgt in C/C++ mit angehängten eckigen Klammern und der Dimensionsangabe darin. double Vector[3]; // Vektor der Dimension 3 double Matrix[3][4]; // 3x4-Matrix Beispiel Vector Falls die Felder global sind, werden sie automatisch mit 0.0 initialisiert. Lokale Felder in Funktionen hingegen werden nicht initialisiert. Die Elemente enthalten mehr oder weniger zufällige Werte. C11 bietet ergänzende (Template-)Klassen für Container Initialisierung Felder können auch initialisiert werden. double NullPunktVektor[3] = 0.0, 0.0, 0.0 ; double Rotation2D90Grad[2][2] = 0.0, -1.0, 1.0, 0.0 ; alternativ double Rotation2D90Grad[2][2] = 0.0, -1.0, 1.0, 0.0 ; Die Initialisierungswerte werden durch Kommas getrennt in geschweiften Klammern geschrieben. Bei mehrdimensionalen Feldern kann man die Zeilen jeweils nacheinander in geschweiften Klammern schreiben. Hier wird berücksichtigt, dass die Elemente einer Matrix in C/C++ (und den meisten anderen Programmiersprachen, jedoch nicht in FORTRAN) zeilenweise gespeichert werden. Es wächst also der letzte Index zuerst. Beispiel Array Ein Feld kann auch durch Angabe seiner Elemente in der Initialisierung dimensioniert werden. double Messung[] = 1, 2, 3 ; // Feld mit 3 Werte initialisert Die Dimensionsangabe in den eckigen Klammern darf hier entfallen. Andererseits kann man ein Feld auch nur teilweise initialisieren. double Messung[5] = 1, 2 ; // Feld mit 5 Elementen

25 Haase, Grundlagen der Software-Entwicklung 25 Hier werden nur die ersten beiden Elemente explizit initialisiert mit 1 und 2. Die übrigen 3 Elemente werden vom Compiler automatisch mit 0 initialisiert. Die Dimensionsangabe ist hier natürlich nötig, da sonst die Dimension nicht festgelegt wäre. Wenn in der Initialisierung zu viele Werte angegeben werden, erfolgt eine Fehlermeldung beim Übersetzungsvorgang durch den Compiler. double Messung[3] = 1, 2, 3, 4, 5 ; // falsch Verwendung Die Indizierung der Feldelemente erfolgt in C/C++ immer mit 0 beginnend. Auch hier dienen die eckigen Klammern zur Kennzeichnung. double Messung[3]; // Feld für 3 Messwerte In diesem Feld gibt es die Feldelemente Messung[0], Messung[1] und Messung[2]. Insbesondere beachte man, es gibt kein Feldelement Messung[3]. Ein Zugriff auf ein solches nicht existierendes Element ist einer der beliebtesten Fehler, oftmals mit katastrophalen Folgen. Messung[0] = 1.1; Messung[1] = 2.2; Messung[2] = 3.3; Mittelwert = ( Messung[0] + Messung[1] + Messung[2] ) / 3; Statt einen Index unmittelbar als Zahl anzugeben, kann er auch berechnet werden. Es sei N = 1 der Wert einer ganzzahligen Variablen. Dann wird mit Messung[N+1] wird auf das letzte Element Messung[2] zugegriffen. Auch in diesen Fällen achte man darauf, nicht versehentlich auf nicht existierende Feldelemente zuzugreifen. Unsinnige Resultate oder sogar Software-Abstürze sind die Folge.?? mehrdimensionale Felder?? C11 begin() und end() bei Feldern Beispiel Vector Zeichenfelder Sehr häufig werden Felder gebraucht, die Zeichenfolgen enthalten - character arrays. In ihnen können dann Text, Namen, Bezeichnungen etc. in lesbarer Form gespeichert werden. Man sagt statt Zeichenfolge auch String. Aber diese sollten nicht mit dem C++ Datentyp string verwechselt werden. C besitzt für Zeichenfolgen eine spezielle Regel. Die verwendeten Felder sind normalerweise größer als nötig, oftmals erheblich größer. Der enthaltene Text beginnt auf dem Element mit dem Index 0 und hinter dem letzten Element des Textes wird ein Zeichen mit dem binären Wert 0 eingetragen. char VorName[50] = "Tobias"; Hier wird ein Zeichenfeld mit dem Variablennamen VorName definiert. Es besteht aus 50 Speicherplätzen vom Typ char und es wird mit der Zeichenfolge "Tobias" initialisiert. Zeichenfolgen-Konstanten, auch

26 Haase, Grundlagen der Software-Entwicklung 26 String-Konstanten genannt, werden in doppelten Anführungszeichen eingeschlossen. Die Anführungszeichen gehören nicht zu der Zeichenfolge, sondern sind lediglich ein Hinweis an den Compiler. Die Zeichenfolge "Tobias" besteht aus 6 Zeichen, die in den Feldelementen VorName[0] bis VorName[5] eingetragen sind. In dem Element VorName[6] wird der Wert 0 eingetragen als Kennzeichen für das Ende der Zeichenfolge. Da ein solches 0-Zeichen in jeder Zeichenfolge als Endekennzeichen notwendig ist, kann in einem Zeichenfeld von 50 Elementen wie VorName[50] maximal ein Text/Name bestehend aus 49 Zeichen vorliegen. Auch bei der Definition von Zeichenfolgen kann man dem Compiler die Ermittlung der Feldgröße überlassen. char VorName[] = "Tobias"; In diesem Fall wird der Compiler das Feld VorName auf 7 char festlegen, 6 für den Namen Tobias und ein weiteres für das abschließende 0-Zeichen. Beispiel Char Für die Behandlung von Zeichenfolgen besitzt C/C++ Bibliotheksfunktionen, die berücksichtigen, dass Zeichenfolgen immer mit dem 0-Zeichen abgeschlossen sind. Da das 0-Zeichen bereits als Endekennzeichen einer Zeichenfolge benutzt wird, enthält eine Zeichenfolge normalerweise kein 0-Zeichen. Für Unicode-Zeichen (ISO/IEC 10646) gibt es eine Darstellungsform UTF-8, die für jedes Zeichen 1 bis 6 char verwendet. Die Zeichen des grundlegenden ASCII-Zeichensatzes bleiben unverändert, sind also 1 char lang. Alle anderen Zeichen werden über mehrere char kodiert dargestellt. Beispielsweise besteht die japanische Zeichenfolge aus den hexadezimalen Werten 0xE3, 0x83, 0x8E, 0xE3, 0x82, 0xA6, 0xE3, 0x82, 0xB5, 0xE3, 0x82, 0xAE und einem abschließenden 0-Zeichen. Für jedes japanische Zeichen (in der Norm code point genannt) werden hier 3 Bytes (char) benötigt.

27 Haase, Grundlagen der Software-Entwicklung Steueranweisungen Eine lineare Folge von Einzelanweisungen ist in den seltensten Fällen ausreichend. Häufig sind Fallunterscheidungen und Wiederholungen nötig. Hierfür gibt es spezielle Steueranweisungen. Ein zweite wichtige Eigenart von C/C++ ist die Bildung von sogenannten Blöcken. Ein oder mehrere Anweisungen können durch geschweifte Klammern zu Blöcken zusammengefasst werden. Sie nehmen dann die gleiche Stelle ein, die sonst eine einzelne Anweisung inne hätte. tf = 1.8 * tc ; Diese Anweisung kann funktional gleichwertig ersetzt werden durch folgende zwei aufeinanderfolgende Anweisungen. tf = 1.8 * tc; tf = tf ; Ohne die beiden geschweiften Klammern könnten diese beiden Anweisungen jedoch nicht an einer Stelle stehen, an der nur eine einzelne Anweisung erlaubt wäre. Mit den geschweiften Klammern entsteht ein Block, der dann die Stelle einer einzelnen Anweisung einnimmt. Viele Steueranweisungen erlauben jeweils nur eine einzelne Anweisung oder aber erfordern einen Block, der dann beliebig viele Anweisungen enthalten darf. Die Steueranweisungen selbst gelten ebenfalls als Anweisungen. Ein Block hat an seinem Ende, hinter der schließenden geschweiften Klammer, kein Semikolon If-Anweisungen Ein sehr häufig verwendete Steueranweisung, die if-anweisung, führt eine Fallunterscheidung durch. if ( <Bedingung> ) <Anweisung oder Block> else <Anweisung oder Block> // Bedingung ist erfüllt, true // Bedingung ist nicht erfüllt, false Die if-anweisung besteht aus dem Schlüsselwort if, einer Bedingung in runden Klammern und der Anweisung bzw. dem Block, welcher auszuführen ist, wenn die Bedingung erfüllt ist. Erforderlichenfalls, aber nicht zwingend, kann nach dem Schlüsselwort else die Anweisung bzw. der Block folgen, welcher auszuführen ist, wenn die Bedingung nicht erfüllt ist. Beispiel IfElse If-Anweisungen können auch gekettet werden. if ( <Bedingung 1> ) <Anweisung oder Block> else if ( <Bedingung 2> ) <Anweisung oder Block> else <Anweisung oder Block>

28 Haase, Grundlagen der Software-Entwicklung 28 Beispiel IfElseIf If-Anweisungen können auch geschachtelt werden. if ( <Bedingung 1> ) if ( <Bedingung 2> ) <Anweisung oder Block> else <Anweisung oder Block, gehört zum zweiten if> Hier ist zunächst nicht klar ersichtlich, ob der else-pfad zu dem ersten oder dem zweiten if gehört. Die Regeln von C/C++ besagen, daß das else zu dem letzten vorausgegangenen if ohne zugehöriges else gehört. Einrücken durch Leerzeichen oder Tabulatoren wie im Beispiel kann die Absicht allenfalls verdeutlichen. Besser wäre es, das zweite if mit dem zugehörigen else als Block in geschweifte Klammern zu setzen. Wenn das else zu dem ersten if gehören soll, ist es sogar notwendig das zweite if als Block zu formulieren. if ( <Bedingung 1> ) if ( <Bedingung 2> ) <Anweisung oder Block> else <Anweisung oder Block, gehört zum ersten if> Als Bedingung ist jeder beliebige Ausdruck geeignet. Wenn der Wert des Ausdrucks ungleich 0 ist, dann gilt die Bedingung als erfüllt. Nur der Wert 0 bedeutet nicht erfüllt. Dies erleichtert die Formulierung von Bedingungen in vielen Fällen, führt aber auch zu merkwürdig zu lesende Bedingungen. if ( nanzahl )... // Wert in Variable nanzahl ungleich 0 else... // Wert in Variable nanzahl gleich 0 Man beachte, daß eine if-anweisung nur jeweils eine Anweisung im if- und eine im else-teil erlaubt. Werden mehrere Anweisungen benötigt. So sind diese in einem Block einzuschließen. Ein Spezialfall einer if-anweisung ist das arithmetische if. Es wird aus Fragezeichen und Doppelpunkt gebildet Vor dem Fragezeichen steht die Bedingung und der Doppelpunkt trennt die Teile für die erfüllte und nicht erfüllte Bedingung. <Bedingung>? <Ausdruck für erfüllt> : <Ausdruck für nicht erfüllt> Variable c soll das Maximum von a und b erhalten. Statt if ( a > b ) c = a; else c = b; kann man kürzer schreiben c = ( a > b )? a : b; Entsprechend den Vorrangregeln sind auch die Klammern nicht erforderlich. Sie dienen allenfalls der

29 Haase, Grundlagen der Software-Entwicklung 29 besseren Lesbarkeit. Zwar spricht man hier häufig von einem arithmetischen if, für die Bedingung vor dem Fragezeichen ist aber jeder beliebige Ausdruck erlaubt (erforderlichenfalls in Klammern). Besondere Vorsicht ist bei Vergleichen von Fließkommawerten nötig. Wegen der begrenzten Genauigkeit liefern Vergleiche auf Gleichheit oder Ungleichheit oftmals unerwartete Resultate Switch-Anweisungen Häufig erfordert eine Fallunterscheidung die Prüfung einer ganzen Reihe von Varianten. Verkettete if- Anweisungen sind hierfür zwar geeignet, werden aber schnell unübersichtlich. C/C++ bietet hierfür die switch-anweisung an. Sie besteht aus dem Schlüsselwort switch gefolgt von der bedingenden Variablen in runden Klammern und einem Block mit den Fallunterscheidungen. Für die einzelnen Fälle wird der Wert mit vorangehendem Schlüsselwort case und nachfolgendem Doppelpunkt aufgelistet. Die fallabhängige Bearbeitung beginnt mit der nächsten Anweisung nach der Fallselektion und endet bei der nächsten break-anweisung oder mit dem Ende des Blocks. Für alle nicht ausdrücklich selektierten Fälle gibt es optional eine eigene Alternative, die mit dem Schlüsselwort default eingeleitet wird. switch ( N ) case 0 :... // auszuführen bei N gleich 0 break; case 1 :... // auszuführen bei N gleich 1 // hier kein break, Fall N gleich 1 geht weiter case 2 :... // auszuführen bei N gleich 1 oder 2 break; case 3 : case 4 :... // auszuführen bei N gleich 3 oder 4 break; default :... // auszuführen falls N weder 0, noch 1, noch 2, noch 3, noch 4 ist break; // break hier nicht erforderlich, da ohnehin am Ende des switch... // weitere Anweisungen immer ausgeführt Beispiel Switch Das Beispiel auch zeigt wie ein Teil der Anweisungen für zwei Fälle (N gleich 1 oder 2) ausgeführt werden können, indem man das break an geeigneter Stelle weglässt. Andererseits gehört ein fehlendes break zu den beliebtesten Fehlern. Leider muss die Steuervariable einer switch-anweisung immer ganzzahlig sein. Hierzu gehören auch einzelne Zeichen. Fließkommawerte oder Zeichenfolgen sind nicht erlaubt Schleifen Viele Aufgaben sind nur durch wiederholte Ausführung von sehr gleichen oder ähnlichen Operationen mit unterschiedlichen Daten lösbar. Die Suche nach einem Namen in einer Liste beispielsweise erfordert den

30 Haase, Grundlagen der Software-Entwicklung 30 wiederholten Vergleich eines Namens aus der Liste mit dem gesuchten Namen. Zur Bildung solcher Schleifen bietet C/C++ mehrere Möglichkeiten. Nachfolgend wird der bereits beschriebene Algorithmus zur Berechnung einer Quadratwurzel W einer Zahl X unter Verwendung der Schleifen-Alternativen gezeigt. Für den Vergleich, ob die nötige Genauigkeit erreicht ist, wird die jeweils zuvor berechnete Näherung als Walt gespeichert. Nota: es gibt zur Berechnung einer Quadratwurzel eine schnellere Bibliotheksfunktion sqrt() Schleife mittels goto Die einfachste (und zugleich schlechteste) Variante ist die Bildung einer Schleife mit einer Sprung- Anweisung (goto) zu einem Sprungziel (label). Der Algorithmus zur Berechnung einer Quadratwurzel sähe dann etwa so aus. W = X / 2.0; loop: Walt = W; W = ( W + X / W ) / 2.0; if ( W!= W alt ) goto loop; Das Sprungziel - hier loop - darf einen beliebigen, eindeutigen Namen haben. Sprünge sind vorwärts und rückwärts erlaubt. Start und Ziel müssen aber im gleichen Block liegen. Beispiel Goto Beispiel SquareRoot Das Hauptproblem bei der Verwendung von goto ist die erschwerte Lesbarkeit. Ab einer gewissen Menge von Sprüngen spricht man von Spagetti-Code. Im Fehlerfall kann man solche Programme nicht mehr gezielt reparieren sondern nur noch gezielt wegwerfen while-schleife Die einfachste, strukturierte Schleife ist die while-schleife. Sie besteht aus dem Schlüsselwort while und einer Fortsetzungsbedingung in runden Klammern gefolgt von einer einzelnen Anweisung oder einem Block. while ( <Fortsetzungsbedingung> ) <Anweisung oder Block> Hinter die schließende runde Klammer gehört kein Semikolon. Beispiel WhileLoop Die Fortsetzungsbedingung wird vor jeder Ausführung der Anweisung oder des Blocks ermittelt. Jeder Ausdruck mit ganzzahligem Wert ist als Bedingung geeignet und auch hier gilt nur der Wert 0 als nicht erfüllt (false), alle anderen Werte ungleich 0 als erfüllt (true).

31 Haase, Grundlagen der Software-Entwicklung 31 Manchmal wird die Fortsetzungsbedingung nicht genutzt, indem sie auf immer erfüllt gesetzt wird, und die Schleife wird durch ein passendes break innerhalb des kontrollierten Blocks beendet. Der Algorithmus zur Berechnung einer Quadratwurzel sähe dann etwa so aus. while ( true ) <Anweisungen> if ( <Endebedingung> ) break; Der Algorithmus für die Berechnung der Quadratwurzel in einer while-schleife lautet dann W = X / 2.0; Walt = 0.0; while ( Walt!= W ) Walt = W; W = ( W + X / W ) / 2.0; Ein sehr beliebter Fehler bei while-schleifen ist ein überflüssiges Semikolon hinter der Bedingung. while ( <Bedingung> ) ; <Anweisung> // falsch, nicht in der Schleife Hier ist gemeint, dass die <Anweisung> solange ausgeführt wird, wie die <Bedingung> erfüllt ist. Doch die von while kontrollierte Anweisung ist die "leere Anweisung" bestehend aus dem einzelnen Semikolon. Die <Anweisung> befindet sich nicht in der while-schleife sondern hinter ihr for-schleife Die for-anweisung besteht aus dem Schlüsselwort for gefolgt von drei steuernden Anteilen getrennt voneinander durch Semikolon und in runden Klammern, gefolgt von einer einzelnen Anweisung oder einem Block. for ( <Anfangsoperation>; <Fortsetzungsbedingung>; <Endeoperation> ) <Anweisung oder Block> Hinter die schließende runde Klammer gehört kein Semikolon. Zum besseren Verständnis sei die for-schleife mit ihren jeweiligen Teilen nochmals unter Zuhilfenahme der while-schleife dargestellt. <Anfangsoperation> while ( <Fortsetzungsbedingung> ) <Anweisung oder Block> <Endeoperation>

32 Haase, Grundlagen der Software-Entwicklung 32 Die Anfangsoperation wird also nur einmalig ausgeführt. Sie enthält typischerweise die Schleifeninitialisierung. Die Anfangsoperation kann auch leer sein, weggelassen werden. Das nachfolgende Semikolon ist jedoch erforderlich. Die Fortsetzungsbedingung wird vor jeder Ausführung der Anweisung oder des Blocks ermittelt. Jeder ganzzahlige Ausdruck ist als Bedingung geeignet und auch hier gilt nur der Wert 0 als nicht erfüllt (false), alle Werte ungleich 0 als erfüllt (true). Die Fortsetzungsbedingung wird also am Ende der Rechnung ein weiteres letztes mal ermittelt, liefert den Wert 0 und die Schleife endet. Wenn die Fortsetzungsbedingung schon bei der ersten Ermittlung 0 (false) ist, wird der Schleifeninhalt übersprungen. Auch kann die Fortsetzungsbedingung weggelassen werden, wenn die Schleife durch eine andere Maßnahme, etwa ein break, beendet wird. Das nachfolgende Semikolon ist jedoch auch hier erforderlich. In der Endeoperation wird üblicherweise die Zählvariable oder der Laufindex hochgezählt. Prinzipiell ist hier jede beliebige Anweisung möglich. Die Endeoperation kann sogar entfallen, wenn dies sinnvoll sein sollte. Beispiel ForLoop Beispiel NestedLoops Der Algorithmus für die Berechnung der Quadratwurzel in einer for-schleife lautet dann W = X / 2.0; for ( int i=0; i<100000; i++ ) Walt = W; W = ( W + X / W ) / 2.0; if ( W == Walt ) break; Beispiel ForLoopBreak Hier wird die Zählvariable i für die Schleife in der for-anweisung definiert. Dies ist nur in C++ möglich. In C muß i vorab deklariert werden. In modernen C++-Compilern existiert die so deklarierte Zählvariable nur innerhalb der for-schleife. Bei dem hier gewählten Algorithmus ist die nötige Anzahl von Schleifendurchläufen a priori unbekannt. Der Algorithmus konvergiert bekanntermaßen sehr gut. Die hier angegebene Höchstzahl von Schleifendurchläufen ist um viele Größenordnungen zu hoch. Das Ende der Schleife wird durch das break in der if- Anweisung erreicht, wenn die maximal mögliche Genauigkeit erreicht ist. Die geschweiften Klammern sind in diesem Fall notwendig, weil die for-anweisung mehr als eine einzelne Anweisung kontrollieren soll hier sind es drei Anweisungen in einem Block. Prinzipiell muss eine for-schleife keine Zählvariable enthalten, obwohl hierin die typische Anwendung liegt. Die Wurzelberechnung kann auch wie folgt abgekürzt werden. W = X / 2.0; for ( Walt = 0.0 ; W!= Walt; ) Walt = W; W = ( W + X / W ) / 2.0;

33 Haase, Grundlagen der Software-Entwicklung 33 Da die Variable Walt außer in der Schleife selbst nicht gebraucht wird, könnte sie auch lokal als Schleifenvariable deklariert werden for ( double Walt = X ;... Der Fortsetzungsbedingung sollte man besondere Aufmerksamkeit widmen, weil hier ein weiterer beliebter Fehler lauert. Die Schleife for ( int i = 0; i < 10; i++ )... wird genau 10-mal durchlaufen, ein letztes mal mit i gleich 9. Hingegen wird die Schleifen for ( int i = 0; i <= 10; i++ ) mal durchlaufen, ein letztes mal mit i gleich 10. Ein sehr beliebter Fehler bei for-schleifen ist ein überflüssiges Semikolon am Ende. for ( <Anfangsoperation>; <Fortsetzungsbedingung>; <Endeoperation> ) ; <Anweisung> // falsch, nicht in der Schleife Hier ist gemeint, dass die <Anweisung> solange ausgeführt wird, wie die <Fortsetzungsbedingung> erfüllt ist. Doch die von for kontrollierte Anweisung ist die "leere Anweisung" bestehend aus dem einzelnen Semikolon. Die <Anweisung> befindet sich nicht in der for-schleife sondern hinter ihr.?? range for of C do-while-schleife Die do-while-schleife ist eine Variante der while-schleife bei der die Fortsetzungsbedingung nicht zu Anfang sondern am Ende geprüft wird. Sie besteht aus dem Schlüsselwort do, einer einzelnen Anweisung oder einem Block gefolgt von dem Schlüsselwort while und der Forsetzungsbedingung in runden Klammern. do <Anweisung oder Block> while ( <Fortsetzungsbedingung> ) ; Hinter der schließenden runden Klammer steht ein Semikolon, weil die do-while-anweisung hier komplett ist. Beispiel DoWhileLoop Die Anweisung oder der Block werden also mindestens einmal ausgeführt. In der while-schleife und in der for-schleife kann bei passender Bedingung der kontrollierte Teil unausgeführt bleiben. Dies ist der Grund, warum die do-while-schleife seltener gebraucht wird. Der Algorithmus für die Berechnung der Quadratwurzel in einer do-while-schleife lautet dann

34 Haase, Grundlagen der Software-Entwicklung 34 W = X / 2.0; do Walt = W; W = ( W + X / W ) / 2.0; while ( Walt!= W ); Auch eine do-while-schleife kann mit break vorzeitig verlassen werden continue Manchmal muss der Code in einer Schleife nicht gänzlich durchlaufen werden, sondern der nächste Schleifendurchlauf kann vorzeitig gestartet werden. Dies ermöglicht die continue-anweisung, typischerweise als Teil einer if-anweisung. while ( <Bedingung> ) // evtl. erste Berechnung, immer durchzuführen if ( <Bedingung für vorzeitige Fortsetzung> ) continue; // Berechnung, nicht immer nötig Beispiel ForLoopContinue

35 Haase, Grundlagen der Software-Entwicklung Funktionen Im Grunde bestehen Programme in C/C++ nur aus einer Vielzahl von Funktionen. Funktionen sind das wichtigste Ordnungsmittel eines Programms. Alle Funktionen haben einen Namen und einen Körper (Body). Dem Funktionsnamen vorangestellt ist der Datentyp des Rückgabewertes. Wenn eine Funktion keinen Wert zurückliefert, wird stattdessen als Rückgabe-Datentyp void (Abfall, Müll) verwendet. Hinter dem Funktionsnamen und vor dem Body werden die Übergabeparameter in runden Klammern angegeben - die sogenannten Formalparameter. Falls die Funktion keine Parameter benötigt, so sind dennoch die Klammern erforderlich. Die Parameter werden durch Komma getrennt und der jeweilige Datentyp wird vorangestellt. Der Body einer Funktion steht - als Block - immer in geschweiften Klammern, auch wenn er aus nur einer Zeile besteht. z.b. int Multiply(int x, int y) return x * y; Hier sind x und y formale Parameter. Mit ihnen sind die beiden übergebenen Werte innerhalb des Bodies der Funktion Multiply über einen Variablennamen zugänglich. Diese Namen implizieren aber keinen Namen für die beim Aufruf verwendeten Variablen. Aufgerufen wird eine Funktion mit ihrem Namen und aktuellen Werten für die erforderlichen Parameter - die sogenannten Aktualparameter. z.b. int a, b=3, c=5; a = Multiply( b, c ); Die Namen der aktuellen Parameter b und c müssen nicht mit den Namen der formalen Parameter übereinstimmen. Häufig werden Funktionen an einer anderen Stelle definiert, als vor der Stelle ihrer Verwendung, z.b. Standardfunktionen in Bibliotheken. Eine Funktion, die an anderer Stelle definiert ist, kann man durch Angabe ihres Prototypen typsicher verwenden. Als Prototyp dient die Funktionsdeklaration ohne den Body, aber mit angehängtem Semikolon. int Multiply(int x, int y); Derartige Prototypen werden häufig in sogenannten Header-Dateien untergebracht und dieser bei der Anwendung inkludiert. Dies erlaubt eine zuverlässige Bildung von Bibliotheken und modulare Programmierung. Prototypen sind auch dann erforderlich, wenn eine Funktion in einer Quelldatei erst nach ihrer Verwendung deklariert wird. Bei der Deklaration von Prototypen dürfen die Namen der formalen Parameter weggelassen werden. int Multiply(int, int); Hier kommt es, soweit es den Compiler betrifft, nur auf die Datentypen der Parameter an. Erst in der Definition der Funktion sind die Namen erforderlich. Allerdings sind Namen in den Prototypen sehr oft

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML. JavaScript JavaScript wird direkt in HTML-Dokumente eingebunden. Gib folgende Zeilen mit einem Texteditor (Notepad) ein: (Falls der Editor nicht gefunden wird, öffne im Browser eine Datei mit der Endung

Mehr

Einheit Datentypen in der Programmiersprache C Schwerpunkt: Elementare (arithmetische) Datentypen

Einheit Datentypen in der Programmiersprache C Schwerpunkt: Elementare (arithmetische) Datentypen Einheit Datentypen in der Programmiersprache C Schwerpunkt: Elementare (arithmetische) Datentypen Kurs C/C++ Programmierung, WS 2008/2009 Dipl.Inform. R. Spurk Arbeitsgruppe Programmierung FR 6.2 Informatik

Mehr

4.2 Gleitkommazahlen. Der Speicherbedarf (in Bits) ist üblicherweise. In vielen Anwendungen benötigt man gebrochene Werte. Physikalische Größen

4.2 Gleitkommazahlen. Der Speicherbedarf (in Bits) ist üblicherweise. In vielen Anwendungen benötigt man gebrochene Werte. Physikalische Größen . Gleitkommazahlen In vielen Anwendungen benötigt man gebrochene Werte. Physikalische Größen Umrechnen von Einheiten und Währungen Jede Zahl x Q mit x 0 lässt sich folgendermaßen schreiben: x = s m e mit

Mehr

Projekt 3 Variablen und Operatoren

Projekt 3 Variablen und Operatoren Projekt 3 Variablen und Operatoren Praktisch jedes Programm verarbeitet Daten. Um mit Daten programmieren zu können, muss es Möglichkeiten geben, die Daten in einem Programm zu verwalten und zu manipulieren.

Mehr

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++ 1. Teil 11. April 2012 Organisatorisches MÜNSTER Übung zur Vorlesung Wissenschaftliches

Mehr

RO-Tutorien 15 und 16

RO-Tutorien 15 und 16 Tutorien zur Vorlesung Rechnerorganisation Tutorienwoche 2 am 04.05.2011 1 Christian A. Mandery: KIT Universität des Landes Baden-Württemberg und nationales Grossforschungszentrum in der Helmholtz-Gemeinschaft

Mehr

Elementare Datentypen in C++

Elementare Datentypen in C++ Elementare Datentypen in C++ bool signed/unsigned char signed/unsigned short int signed/unsigned int signed/unsigned long int (signed/unsigned long long int) float double long double void enum char Der

Mehr

Wertebereich und Genauigkeit der Zahlendarstellung

Wertebereich und Genauigkeit der Zahlendarstellung Wertebereich und Genauigkeit der Zahlendarstellung Sowohl F als auch C kennen bei ganzen und Floating Point-Zahlen Datentypen verschiedener Genauigkeit. Bei ganzen Zahlen, die stets exakt dargestellt werden

Mehr

Unterlagen. CPP-Uebungen-08/

Unterlagen.  CPP-Uebungen-08/ Unterlagen http://projects.eml.org/bcb/people/ralph/ CPP-Uebungen-08/ http://www.katjawegner.de/lectures.html Kommentare in C++ #include /* Dies ist ein langer Kommentar, der über zwei Zeilen

Mehr

C++ Notnagel. Ziel, Inhalt. Programmieren in C++

C++ Notnagel. Ziel, Inhalt. Programmieren in C++ C++ Notnagel Ziel, Inhalt Ich versuche in diesem Dokument noch einmal die Dinge zu erwähnen, die mir als absolut notwendig für den C++ Unterricht und die Prüfungen erscheinen. C++ Notnagel 1 Ziel, Inhalt

Mehr

Klausur: Grundlagen der Informatik I, am 05. Februar 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Klausur: Grundlagen der Informatik I, am 05. Februar 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte: Seite 1 von 8 Hiermit bestätige ich, dass ich die Übungsleistungen als Voraussetzung für diese Klausur in folgender Übung erfüllt habe. Jahr: Übungsleiter: Unterschrift: 1. Aufgabe ( / 10 Pkt.) a) Geben

Mehr

C++ Teil Schleifen. Man kann bestimme Anweisungen in einem Programm mehrfach ausführen lassen. Dazu gibt es in C++ verschiedene Schleifen.

C++ Teil Schleifen. Man kann bestimme Anweisungen in einem Programm mehrfach ausführen lassen. Dazu gibt es in C++ verschiedene Schleifen. C++ Teil 3 3.3 Schleifen Man kann bestimme en in einem Programm mehrfach ausführen lassen. Dazu gibt es in C++ verschiedene Schleifen. for-schleife for-schleife while-schleife do-while-schleife for ( Ausdruck1;

Mehr

C++ Teil 4. Sven Groß. 30. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 16

C++ Teil 4. Sven Groß. 30. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 16 C++ Teil 4 Sven Groß IGPM, RWTH Aachen 30. Apr 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 4 30. Apr 2015 1 / 16 Themen der letzten Vorlesung Funktionen: Definition und Aufruf Wert- und Referenzparameter,

Mehr

Grundlagen der Software-Entwicklung GSE

Grundlagen der Software-Entwicklung GSE Grundlagen der Software-Entwicklung GSE Friedrich Haase Dieses Skript ist work in progress. Anregungen und Hinweise auf Fehler sind sehr willkommen. Vorlesung FH-Dortmund, Grundlagen der Software-Entwicklung

Mehr

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08 Kapitel 4 Programmierkurs Birgit Engels, Anna Schulze Wiederholung Kapitel 4 ZAIK Universität zu Köln WS 07/08 1 / 23 2 Datentypen Arten von Datentypen Bei der Deklaration einer Variablen(=Behälter für

Mehr

Einführung in die C-Programmierung

Einführung in die C-Programmierung Einführung in die C-Programmierung Warum C? Sehr stark verbreitet (Praxisnähe) Höhere Programmiersprache Objektorientierte Erweiterung: C++ Aber auch hardwarenahe Programmierung möglich (z.b. Mikrokontroller).

Mehr

Grundlagen der Informatik 2. Typen

Grundlagen der Informatik 2. Typen Grundlagen der Informatik 2. Typen Speicher, Speicherbedarf Ein-/Ausgabe Grundlagen der Informatik (Alex Rempel) 1 Wiederholung // root calculation #include #include using namespace

Mehr

Programmieren in C/C++ und MATLAB

Programmieren in C/C++ und MATLAB Programmieren in C/C++ und MATLAB Sven Willert Sabine Schmidt Christian-Albrechts-Universität zu Kiel CAU 5-1 Übung Schreiben Sie ein Programm, das die Zahl π durch π = 4 4 4 4 4 4 + + +... 3 5 7 9 11

Mehr

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung C Sprachelemente für Übung 2 Typumwandlungen (type casts) Bei Ausdrücken, in denen Operanden mit unterschiedlichem Typ vorkommen, werden diese vom Compiler vor der Ausführung automatisch in einen gemeinsamen

Mehr

Programmierkurs C++ Variablen und Datentypen

Programmierkurs C++ Variablen und Datentypen Programmierkurs C++ Variablen und Datentypen Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer #2 Überblick Welche Datentypen gibt es in

Mehr

Intensivübung zu Algorithmen und Datenstrukturen

Intensivübung zu Algorithmen und Datenstrukturen Intensivübung zu Algorithmen und Datenstrukturen Silvia Schreier Informatik 2 Programmiersysteme Martensstraße 3 91058 Erlangen Übersicht Programmierung Fallunterscheidung Flussdiagramm Bedingungen Boolesche

Mehr

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22 C++ Teil 2 Sven Groß IGPM, RWTH Aachen 16. Apr 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 2 16. Apr 2015 1 / 22 Themen der letzten Vorlesung Hallo Welt Elementare Datentypen Ein-/Ausgabe Operatoren Sven

Mehr

Einführung in die Programmierung Wintersemester 2011/12

Einführung in die Programmierung Wintersemester 2011/12 Einführung in die Programmierung Wintersemester 2011/12 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund : Kontrollstrukturen Inhalt Wiederholungen - while

Mehr

Grundlagen von C# - 1

Grundlagen von C# - 1 Grundlagen von C# - 1 Marc Satkowski 20. November 2016 C# Kurs Gliederung 1. Über diesen Kurs 2. Benötigte Software 3. Exkurs: Architektur von.net und C# 4. Erstes Programm: Hello World Grundlegende Eigenschaften

Mehr

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2 Fakultät Verkehrswissenschaften Friedrich List, Professur für Verkehrsbetriebslehre und Logistik Modul Entscheidungsunterstützung in der Logistik Einführung in die Programmierung mit C++ Übung 2 SS 2016

Mehr

3 Grundstrukturen eines C++ Programms anhand eines Beispiels

3 Grundstrukturen eines C++ Programms anhand eines Beispiels 3 Grundstrukturen eines C++ Programms anhand eines Beispiels 3.1 Einige Grundbegriffe Mit Hilfe eines Programmes wird dem Computer mitgeteilt, wie er eine bestimmte Aufgabe bearbeiten soll. Es besteht

Mehr

Java I Vorlesung Imperatives Programmieren

Java I Vorlesung Imperatives Programmieren Java I Vorlesung 2 Imperatives Programmieren 3.5.2004 Variablen -- Datentypen -- Werte Operatoren und Ausdrücke Kontrollstrukturen: if Imperatives Programmieren Im Kern ist Java eine imperative Programmiersprache.

Mehr

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

Einführung in den Einsatz von Objekt-Orientierung mit C++ I Einführung in den Einsatz von Objekt-Orientierung mit C++ I ADV-Seminar Leiter: Mag. Michael Hahsler Syntax von C++ Grundlagen Übersetzung Formale Syntaxüberprüfung Ausgabe/Eingabe Funktion main() Variablen

Mehr

4 Formelsammlung C/C++

4 Formelsammlung C/C++ 4 Formelsammlung C/C++ 4.1 Datentypen Datentyp stdint.h type Bits Sign Wertebereich (unsigned) char uint8_t 8 Unsigned 0.. 255 signed char int8_t 8 Signed -128.. 127 unsigned short uint16_t 16 Unsigned

Mehr

C++ - Einführung in die Programmiersprache Header-Dateien und Funktionen. Leibniz Universität IT Services Anja Aue

C++ - Einführung in die Programmiersprache Header-Dateien und Funktionen. Leibniz Universität IT Services Anja Aue C++ - Einführung in die Programmiersprache Header-Dateien und Funktionen Leibniz Universität IT Services Anja Aue Modularisierung Logische Gliederung von Programmteilen mit Hilfe von Namensräumen. Aufteilung

Mehr

Motivation und Überblick

Motivation und Überblick Motivation und Überblick Drei große Bereiche der Vorlesung: Darstellung von Zahlen in Rechnern Verarbeitung von Binärdaten auf der Ebene digitaler Schaltungen Programmierung auf Maschinenebene und relativ

Mehr

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff Programmieren in C Eine Einführung in die Programmiersprache C Prof. Dr. Nikolaus Wulff Textausgabe per printf Die Funktion printf ist kein Bestandteil der C Sprache sondern gehört zur C Bibliothek. printf

Mehr

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens Grundlagen von C Jonas Gresens Proseminar C Grundlagen und Konzepte Arbeitsbereich Wissenschaftliches Rechnen Fachbereich Informatik Fakultät für Mathematik, Informatik und Naturwissenschaften Universität

Mehr

Einführung in die Programmierung Wintersemester 2008/09

Einführung in die Programmierung Wintersemester 2008/09 Einführung in die Programmierung Wintersemester 28/9 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund : Darstellung von Information Inhalt Einfache Datentypen

Mehr

Zeichendarstellung. Zeichen sind Zahlen (in C) Zeichen und switch

Zeichendarstellung. Zeichen sind Zahlen (in C) Zeichen und switch darstellung Arbeiten mit darstellung werden im Computer durch (kleine) Zahlen dargestellt in C können im Datentyp char gespeichert werden, dieser umfasst ein Byte und gilt als Ganzzahltyp darstellung Arbeiten

Mehr

Felder, Zeiger und Adreßrechnung

Felder, Zeiger und Adreßrechnung Felder, Zeiger und Adreßrechnung Felder bestehen aus Variablen eines einzigen Datentyps. Bisher kennen wir eindimensionale Felder. In C sind Felder mit beliebigen Dimensionen möglich. Unsere räumliche

Mehr

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 1

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 1 Fakultät Verkehrswissenschaften Friedrich List, Professur für Verkehrsbetriebslehre und Logistik Modul Entscheidungsunterstützung in der Logistik Einführung in die Programmierung mit C++ Übung 1 SS 2016

Mehr

Eine praktische Einführung in die Programmierung mit der Programmiersprache C

Eine praktische Einführung in die Programmierung mit der Programmiersprache C Eine praktische Einführung in die Programmierung mit der Programmiersprache C www.c-howto.de C-HowTo www.c-howto.de Inhaltsverzeichnis 1 Einführung.. 10 1:1 Wozu Programmieren? 10 1.2 Was ist ein Programm?

Mehr

Java: Eine kurze Einführung an Beispielen

Java: Eine kurze Einführung an Beispielen Java: Eine kurze Einführung an Beispielen Quellcode, javac und die JVM Der Quellcode eines einfachen Java-Programms besteht aus einer Datei mit dem Suffix.java. In einer solchen Datei wird eine Klasse

Mehr

RO-Tutorien 3 / 6 / 12

RO-Tutorien 3 / 6 / 12 RO-Tutorien 3 / 6 / 12 Tutorien zur Vorlesung Rechnerorganisation Christian A. Mandery WOCHE 2 AM 06./07.05.2013 KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft

Mehr

VORBEMERKUNGEN ZUM INFORMATIK-KURS : PROGRAMMIEREN MIT C++

VORBEMERKUNGEN ZUM INFORMATIK-KURS : PROGRAMMIEREN MIT C++ VORBEMERKUNGEN ZUM INFORMATIK-KURS : PROGRAMMIEREN MIT C++ Sie können ein C++-Programm mit den unterschiedlichsten Programmen erstellen. Früher wurde mit dem kostenlos zu erwerbenden dev++ -Programm gearbeitet.

Mehr

Programmieren I + II Regeln der Code-Formatierung

Programmieren I + II Regeln der Code-Formatierung Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme WS 2016/2017, SS 2017 Programmieren I + II Regeln der Code-Formatierung In diesem Dokument finden

Mehr

Inhalt. 1 Einstieg in die Welt von C Erste Schritte in C 31. Vorwort... 15

Inhalt. 1 Einstieg in die Welt von C Erste Schritte in C 31. Vorwort... 15 Vorwort... 15 1 Einstieg in die Welt von C 17 1.1 Die Sprache C... 17 1.2 Die C-Standardbibliothek... 18 1.3 Die nötigen Werkzeuge für C... 21 1.4 Übersetzen mit der Entwicklungsumgebung... 23 1.5 Übersetzen

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java Vorlesung vom 25.4.07, Anweisungen Übersicht 1 Ausdrucksanweisung 2 Einfache Ausgabeanweisung 3 Einfache Eingabeanweisung, Vorbereitungen 4 Verbundanweisung 5 Bedingte Anweisung 6 Auswahlanweisung 7 for

Mehr

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen Programmieren I Martin Schultheiß Hochschule Darmstadt Wintersemester 2011/2012 1 / 25 Operatoren für elementare Datentypen Bedingte Schleifen 2 / 25 Zuweisungsoperator Die Zuweisung von Werten an Variablen

Mehr

8. Referenzen und Zeiger

8. Referenzen und Zeiger 8. Referenzen und Zeiger Motivation Variable werden in C++ an speziellen Positionen im Speicher abgelegt. An jeder Position befindet sich 1 Byte. Sie sind durchnummeriert beginnend bei 0. Diese Positionen

Mehr

Die einfachsten Anweisungen

Die einfachsten Anweisungen 2 Die einfachsten Anweisungen 2-1 Inhalt Die einfachsten Anweisungen Einführung Datentypen Arithmetische Operatoren Mathematische Funktionen Mehrfache Zuweisungen Übungsaufgaben Einführung Wir wollen unser

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 47 Einstieg in die Informatik mit Java Anweisungen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 47 1 Ausdrucksanweisung 2 Einfache Ausgabeanweisung 3 Einfache Eingabeanweisung,

Mehr

Programmieren I + II Regeln der Code-Formatierung

Programmieren I + II Regeln der Code-Formatierung Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme WS 2012/2013, SS 2013 Programmieren I + II Regeln der Code-Formatierung Die hier vorgestellten

Mehr

Java - Zahlen, Wahrheitswerte und Zeichen. Leibniz Universität IT Services Anja Aue

Java - Zahlen, Wahrheitswerte und Zeichen. Leibniz Universität IT Services Anja Aue Java - Zahlen, Wahrheitswerte und Zeichen Leibniz Universität IT Services Anja Aue Kommentare Hilfe für den Entwickler. Wer hat wann welche Änderung vorgenommen? Warum werden diese Anweisungen hier ausgeführt?

Mehr

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen. Ziele sind das Arbeiten mit Funktionen und dem Aufzählungstyp (enum), sowie - einfache Verzweigung (if else) - Alternativen switch case - einfache Schleifen (while oder do while) Aufgabe 3: Diese Aufgabe

Mehr

1.8.5 Wiederholungen. Beispiele Unendliche Schleife: 1.8 Kontrollstrukturen 75. ( Bedingung ) AnweisungOderBlock. ja Anweisung. Bedingung erfüllt?

1.8.5 Wiederholungen. Beispiele Unendliche Schleife: 1.8 Kontrollstrukturen 75. ( Bedingung ) AnweisungOderBlock. ja Anweisung. Bedingung erfüllt? 1.8 Kontrollstrukturen 75 1.8.5 Wiederholungen Häufig muss die gleiche Teilaufgabe oft wiederholt werden. Denken Sie nur an die Summation von Tabellenspalten in der Buchführung oder an das Suchen einer

Mehr

Physische Datenstrukturen

Physische Datenstrukturen Elementare Datentypen Strukturierte Datentypen Zeiger Seite 1 Einfache Datentypen Datentyp char Verwendung: ASCII-Zeichen Wertebereich: alle darstellbaren Zeichen, 8 bit lange Ganzzahlen im Intervall -128

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java Vorlesung vom 18.4.07, Grundlagen Übersicht 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White Space Zeichen 4 Wortsymbole 5 Interpunktionszeichen 6 Operatoren 7 import Anweisungen 8 Form

Mehr

Einführung in die C++ Programmierung für Ingenieure

Einführung in die C++ Programmierung für Ingenieure Einführung in die C++ Programmierung für Ingenieure MATTHIAS WALTER / JENS KLUNKER Universität Rostock, Lehrstuhl für Modellierung und Simulation 14. November 2012 c 2012 UNIVERSITÄT ROSTOCK FACULTY OF

Mehr

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke Java 2 Markus Reschke 07.10.2014 Datentypen Was wird gespeichert? Wie wird es gespeichert? Was kann man mit Werten eines Datentyps machen (Operationen, Methoden)? Welche Werte gehören zum Datentyp? Wie

Mehr

Tag 4 Repetitorium Informatik (Java)

Tag 4 Repetitorium Informatik (Java) Tag 4 Repetitorium Informatik (Java) Dozent: Michael Baer Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Übersicht Arrays (Reihungen)

Mehr

S. d. I.: Programieren in C Folie 4-1. im Gegensatz zu Pascal gibt es in C kein Schlüsselwort "then"

S. d. I.: Programieren in C Folie 4-1. im Gegensatz zu Pascal gibt es in C kein Schlüsselwort then S. d. I.: Programieren in C Folie 4-1 4 Anweisungen 4.1 if-anweisung 1) if (Ausdruck) 2) if (Ausdruck) } else im Gegensatz zu Pascal gibt es in C kein Schlüsselwort "then" es wird nur der numerische Wert

Mehr

Algorithmen zur Datenanalyse in C++

Algorithmen zur Datenanalyse in C++ Algorithmen zur Datenanalyse in C++ Hartmut Stadie 16.04.2012 Algorithmen zur Datenanalyse in C++ Hartmut Stadie 1/ 39 Einführung Datentypen Operatoren Anweisungssyntax Algorithmen zur Datenanalyse in

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java Vorlesung vom 6.11.07, Weitere Anweisungen Übersicht 1 Verbundanweisung 2 Bedingte Anweisung 3 Auswahlanweisung 4 for Schleife 5 while Schleife 6 do Schleife 7 break Anweisung 8 continue Anweisung 9 Leere

Mehr

2 Teil 2: Nassi-Schneiderman

2 Teil 2: Nassi-Schneiderman 2 Teil 2: Nassi-Schneiderman Wie kann man Nassi-Schneiderman in einer objektorientierten Sprache verwenden? Jedes Objekt besitzt Methoden, welche die Attribute des Objektes verändern. Das Verhalten der

Mehr

C++ Teil 1. Sven Groß. 9. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil 1 9. Apr / 19

C++ Teil 1. Sven Groß. 9. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil 1 9. Apr / 19 C++ Teil 1 Sven Groß IGPM, RWTH Aachen 9. Apr 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 1 9. Apr 2015 1 / 19 Organisatorisches Anmeldung zu Vorlesung und Praktikum über CampusOffice heute! Zugang zu

Mehr

Kapitel 2. Einfache Beispielprogramme

Kapitel 2. Einfache Beispielprogramme Kapitel 2 Einfache Beispielprogramme 2.1 Ausgabe auf dem Bildschirm 2.2 Lokale Variablen, Ausdrücke und Schleifen 2.3 Zahlen von der Tastatur einlesen 2.4 Formatierung bei der Ausgabe 2.5 Zusammenfassung

Mehr

Javaprogrammierung mit NetBeans. Variablen, Datentypen, Methoden

Javaprogrammierung mit NetBeans. Variablen, Datentypen, Methoden Javaprogrammierung mit NetBeans Variablen, Datentypen, Methoden Programmieren 2 Java Bezeichner Bezeichner: Buchstabe _ $ Buchstabe _ $ Ziffer Groß- und Kleinbuchstaben werden strikt unterschieden. Schlüsselwörter

Mehr

Institut für Programmierung und Reaktive Systeme. Java 3. Markus Reschke

Institut für Programmierung und Reaktive Systeme. Java 3. Markus Reschke Java 3 Markus Reschke 08.10.2014 Kommentare Kommentare nützlich zum späteren Verständnis Zwei Arten Einzeiliger Kommentar bis zum Zeilenende mit // Mehrzeiliger Kommentar mit /*Text*/ 1 double x = 5; //

Mehr

Schleifen in C/C++/Java

Schleifen in C/C++/Java Schleifen in C/C++/Java Alle 3 Sprachen stellen mindestens die folgenden 3 Schleifenkonstruktionen zur Verfügung. In C gibt es auch keine weiteren, C++, Java und C# haben noch weitere nützliche Varianten.

Mehr

Java - Zahlen, Wahrheitswerte und Zeichen. Leibniz Universität IT Services Anja Aue

Java - Zahlen, Wahrheitswerte und Zeichen. Leibniz Universität IT Services Anja Aue Java - Zahlen, Wahrheitswerte und Zeichen Leibniz Universität Anja Aue Kommentare Hilfe für den Entwickler. Wer hat wann welche Änderung vorgenommen? Warum werden diese Anweisungen hier ausgeführt? Bei

Mehr

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2 Java Einführung VARIABLEN und DATENTYPEN Kapitel 2 Inhalt dieser Einheit Variablen (Sinn und Aufgabe) Bezeichner Datentypen, Deklaration und Operationen Typenumwandlung (implizit/explizit) 2 Variablen

Mehr

Tag 3 Repetitorium Informatik (Java)

Tag 3 Repetitorium Informatik (Java) Tag 3 Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Übersicht Typkonvertierung

Mehr

Grundlagen der OO- Programmierung in C#

Grundlagen der OO- Programmierung in C# Grundlagen der OO- Programmierung in C# Technische Grundlagen 1 Dr. Beatrice Amrhein Überblick Visual Studio: Editor und Debugging Die Datentypen Methoden in C# Die Speicherverwaltung 2 Visual Studio 3

Mehr

Repräsentation von Daten Binärcodierung von rationalen Zahlen und Zeichen

Repräsentation von Daten Binärcodierung von rationalen Zahlen und Zeichen Kapitel 4: Repräsentation von Daten Binärcodierung von rationalen Zahlen und Zeichen Einführung in die Informatik Wintersemester 2007/08 Prof. Bernhard Jung Übersicht Codierung von rationalen Zahlen Konvertierung

Mehr

GI Vektoren

GI Vektoren Vektoren Problem: Beispiel: viele Variablen vom gleichen Typ abspeichern Text ( = viele char-variablen), Ergebnisse einer Meßreihe ( = viele int-variablen) hierfür: Vektoren ( = Arrays = Feld ) = Ansammlung

Mehr

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren hat eine Kantenlänge hat eine Füllfarbe Kantenlänge setzen Füllfarbe lesen Volumen berechnen Leibniz Universität IT Services Anja Aue

Mehr

Themen. Formatierte und unformatierte Eingabe Bedingungsoperator Namespaces Kommandozeilenargumente

Themen. Formatierte und unformatierte Eingabe Bedingungsoperator Namespaces Kommandozeilenargumente Themen Formatierte und unformatierte Eingabe Bedingungsoperator Namespaces Kommandozeilenargumente Formatierte Eingabe mit cin Die Formatierung der Eingabe ist der Ausgabe sehr ähnlich: Die Flags werden

Mehr

Vorkurs Informatik WiSe 16/17

Vorkurs Informatik WiSe 16/17 Java Schleifen und Arrays Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe, 06.10.2016 Technische Universität Braunschweig, IPS Überblick Kommentare Typen Kontrollstrukturen Arrays 06.10.2016 Dr. Werner

Mehr

1. Referenzdatentypen: Felder und Strings. Referenz- vs. einfache Datentypen. Rückblick: Einfache Datentypen (1) 4711 r

1. Referenzdatentypen: Felder und Strings. Referenz- vs. einfache Datentypen. Rückblick: Einfache Datentypen (1) 4711 r 1. Felder und Strings Eigenschaften von Referenzdatentypen 1. Referenzdatentypen: Felder und Strings Referenzdatentypen sind Konstrukte, mit deren Hilfe wir aus einfachen Datentypen neue eigene Typen erzeugen

Mehr

1. Referenzdatentypen: Felder und Strings

1. Referenzdatentypen: Felder und Strings 1. Felder und Strings Eigenschaften von Referenzdatentypen 1. Referenzdatentypen: Felder und Strings Referenzdatentypen sind Konstrukte, mit deren Hilfe wir aus einfachen Datentypen neue eigene Typen erzeugen

Mehr

Deklarationen in C. Prof. Dr. Margarita Esponda

Deklarationen in C. Prof. Dr. Margarita Esponda Deklarationen in C 1 Deklarationen Deklarationen spielen eine zentrale Rolle in der C-Programmiersprache. Deklarationen Variablen Funktionen Die Deklarationen von Variablen und Funktionen haben viele Gemeinsamkeiten.

Mehr

Schachtelung der 2. Variante (Bedingungs-Kaskade): if (B1) A1 else if (B2) A2 else if (B3) A3 else if (B4) A4 else A

Schachtelung der 2. Variante (Bedingungs-Kaskade): if (B1) A1 else if (B2) A2 else if (B3) A3 else if (B4) A4 else A 2.4.6. Kontrollstrukturen if-anweisung: Bedingte Ausführung (Verzweigung) 2 Varianten: if (Bedingung) Anweisung (Anweisung = einzelne Anweisung oder Block) Bedeutung: die Anweisung wird nur ausgeführt,

Mehr

Programmierung mit C Zeiger

Programmierung mit C Zeiger Programmierung mit C Zeiger Zeiger (Pointer)... ist eine Variable, die die Adresse eines Speicherbereichs enthält. Der Speicherbereich kann... kann den Wert einer Variablen enthalten oder... dynamisch

Mehr

Funktionen in JavaScript

Funktionen in JavaScript Funktionen in JavaScript Eine Funktion enthält gebündelten Code, der sich in dieser Form wiederverwenden lässt. Es können ganze Programmteile aufgenommen werden. Mithilfe von Funktionen kann man denselben

Mehr

2.5 Primitive Datentypen

2.5 Primitive Datentypen 2.5 Primitive Datentypen Wir unterscheiden 5 primitive Datentypen: ganze Zahlen -2, -1, -0, -1, -2,... reelle Zahlen 0.3, 0.3333..., π, 2.7 10 4 Zeichen a, b, c,... Zeichenreihen "Hello World", "TIFI",

Mehr

PIC16 Programmierung in HITECH-C

PIC16 Programmierung in HITECH-C PIC16 Programmierung in HITECH-C Operatoren: Arithmetische Operatoren - binäre Operatoren + Addition - Subtraktion * Multiplikation / Division % Modulo + - * / sind auf ganzzahlige und reelle Operanden

Mehr

Kapitel 3: Variablen

Kapitel 3: Variablen Kapitel 3: Variablen Thema: Programmieren Seite: 1 Kapitel 3: Variablen Im letzten Kapitel haben wir gelernt, bestimmte Ereignisse zu wiederholen solange eine Bedingung erfüllt ist. Nun möchten wir aber

Mehr

Tutorium Rechnerorganisation

Tutorium Rechnerorganisation Woche 2 Tutorien 3 und 4 zur Vorlesung Rechnerorganisation 1 Christian A. Mandery: KIT Universität des Landes Baden-Württemberg und nationales Grossforschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu

Mehr

Dr. Monika Meiler. Inhalt

Dr. Monika Meiler. Inhalt Inhalt 3 C-Ausdrücke...3-2 3.1 Arithmetische Ausdrücke...3-3 3.2 Wertzuweisungen...3-5 3.3 Inkrementieren und Dekrementieren...3-6 3.4 Logische Ausdrücke (Bedingungen)...3-7 3.5 Bedingte Ausdrücke...3-8

Mehr

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015 Java Crashkurs Kim-Manuel Klein (kmk@informatik.uni-kiel.de) May 4, 2015 Quellen und Editoren Internet Tutorial: z.b. http://www.java-tutorial.org Editoren Normaler Texteditor (Gedit, Scite oder ähnliche)

Mehr

Abschnitt 2: Daten und Algorithmen

Abschnitt 2: Daten und Algorithmen Abschnitt 2: Daten und Algorithmen 2. Daten und Algorithmen 2.1 Zeichenreihen 2.2 Datendarstellung durch Zeichenreihen 2.3 Syntaxdefinitionen 2.4 Algorithmen 2 Daten und Algorithmen Einf. Progr. (WS 08/09)

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 12/13. Kapitel 3. Grunddatentypen, Ausdrücke und Variable

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 12/13. Kapitel 3. Grunddatentypen, Ausdrücke und Variable 1 Kapitel 3 Grunddatentypen, Ausdrücke und Variable 2 Eine Datenstruktur besteht aus Grunddatentypen in Java einer Menge von Daten (Werten) charakteristischen Operationen Datenstrukturen werden mit einem

Mehr

Grundlagen der Informatik 4. Kontrollstrukturen I

Grundlagen der Informatik 4. Kontrollstrukturen I 4. Kontrollstrukturen I Anweisungen und Blöcke Grundlagen der Informatik (Alex Rempel) 1 Anweisungen und Blöcke Anweisungen ("statements") Immer mit Semikolon abzuschließen "Leere" Anweisung besteht aus

Mehr

Funktionen in JavaScript

Funktionen in JavaScript Funktionen in JavaScript Eine Funktion enthält gebündelten Code, der sich in dieser Form wiederverwenden lässt. Mithilfe von Funktionen kann man denselben Code von mehreren Stellen des Programms aus aufrufen.

Mehr

Java - Schleifen. Bedingung. wiederhole. Anweisung Anweisung Anweisung. Leibniz Universität IT Services Anja Aue

Java - Schleifen. Bedingung. wiederhole. Anweisung Anweisung Anweisung. Leibniz Universität IT Services Anja Aue Java - Schleifen Bedingung wiederhole ja Anweisung Anweisung Anweisung Leibniz Universität IT Services Anja Aue Anweisung int zahl; zahl = 2; zahl = zahl * 10; int zahl; ; Jede Anweisung endet mit einem

Mehr

Klausur: Grundlagen der Informatik I, am 05. Februar 2008 Dirk Seeber, h_da, Fb Informatik

Klausur: Grundlagen der Informatik I, am 05. Februar 2008 Dirk Seeber, h_da, Fb Informatik Seite 1 von 8 Hiermit bestätige ich, dass ich die Übungsleistungen als Voraussetzung für diese Klausur in folgender Übung erfüllt habe. Jahr: Übungsleiter: Unterschrift: 1. Aufgabe ( / 15 Pkt.) Für eine

Mehr

7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter});

7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter}); S. d. I.: Programieren in C Folie 7-1 7 Funktionen 7.1 Definition Prototyp-Syntax: Speicherklasse Typ Name (formale Parameter); der Funktions-Prototyp deklariert eine Funktion, d.h. er enthält noch nicht

Mehr

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 25

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf  Seite 1 von 25 Kapitel 9 Schleifen Seite 1 von 25 Schleifen - Schleifen werden zur wiederholten Ausführung von Anweisungen verwendet. - Es werden drei Arten von Schleifen unterschieden: o for -Schleife o while -Schleife

Mehr

Organisatorisches. drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50

Organisatorisches. drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50 Organisatorisches Vorlesung Donnerstag 8:35 bis 10:05 Übung drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50 Tutorium (Mehr oder weniger) abwechselnd Mo und Mi 10-11:30 Termine

Mehr

C-Programmierung: Ausdrücke und Operatoren#Division.2F

C-Programmierung: Ausdrücke und Operatoren#Division.2F C-Programmierung: Ausdrücke und Operatoren#Division.2F http://de.wikibooks.org/wiki/c-programmierung:_ausdrücke_und_operatoren#division_.2f This Book Is Generated By Wb2PDF using RenderX XEP, XML to PDF

Mehr