Beispiel für eine rekursive Funktion

Größe: px
Ab Seite anzeigen:

Download "Beispiel für eine rekursive Funktion"

Transkript

1 Rekursive Funktionen Werden verwendet, wenn ein Problem in Teilprobleme aufgespalten werden kann, von denen eines sofort lösbar ist und die weiteren eine etwas vereinfachte Form des Originalproblems sind. Zum Beispiel läßt sich das Drucken einer Zahl auf das Drucken einer Ziffer und das Drucken einer (kleineren) Zahl aufspalten. Der rekursive Aufruf muß zuerst bearbeitet werden, dann kann die letzte Ziffer gedruckt werden. 1

2 Beispiel für eine rekursive Funktion #include <iostream> using namespace std; void DruckeZiffer(short); void DruckeZahl(long); voidmain() DruckeZahl( ); cout << endl; DruckeZahl(-33); cout << endl; } DruckeZahl(0); cout << endl; 2

3 void DruckeZiffer(short d) switch (d) case 0: cout << '0'; break; } case 1: cout << '1'; break; case 2: cout << '2'; break; case 3: cout << '3'; break; case 4: cout << '4'; break; case 5: cout << '5'; break; case 6: cout << '6'; break; case 7: cout << '7'; break; case 8: cout << '8'; break; case 9: cout << '9'; break; } void DruckeZahl (long n) // rekursive Funktion if ( n < 0 ) cout << '-'; DruckeZahl(-n); } else long quotient; short rest; quotient = n/10; rest = n % 10; if(quotient > 0) DruckeZahl(quotient); } DruckeZiffer(rest); } 3

4 Ausgabe: Press any key to continue 4

5 9. Zeiger und Strukturen 5

6 Motivation Ein Array ist ein benutzerdefinierter Datentyp. Er besteht aus - Elementen mit identischem Typ - diese sind hintereinander (lückenlos) abgespeichert - der Zugriff auf ein Element erfolgt über einen Index. Eine Struktur ist ein benutzerdefinierter Datentyp. Er besteht aus - Elementen mit möglicherweise unterschiedlichen Typen - Die Abspeicherung ist i. a. unbekannt (irrelevant) - der Zugriff auf ein Element erfolgt über den Punktoperator. 6

7 Motivation Beispiele: Datum Uhrzeit Hoersaal Klausurtermin Punkt -> tag/monat/jahr :3 ganze (positive) Zahlen -> stunde/minute: 2 ganze (positive) Zahlen: -> bezeichnung/kapazitaet : Text/positive ganze Zahl: -> Datum/Uhrzeit/Hoersaal/Vorlesung/Aufsicht -> Gleitkommazahlen (elektrisches) Bauteil ->? 7

8 Schlüsselwort 9.1 Definition und Deklaration struct Name typelement1 nameelement1; typelement2 nameelement2; typelementn nameelementn; }; Name der Struktur üblicherweise mit Großbuchstabe beginnend. Inhalte der Struktur: Elemente/Eigenschaften/ Attribute Semikolon am Ende 8

9 struct Datum unsigned int tag; unsigned int monat; unsigned int jahr; }; Beispiele struct Hoersaal string bezeichnung; unsigned int kapazitaet; }; struct Punkt double x; double y; double z; }; struct Uhrzeit unsigned int stunde; unsigned int minute; }; struct Klausurtermin Datum termin; Uhrzeit zeit; Hoersaal raum; string vorlesung; string aufsicht; }; struct Bauteil string bezeichnung; double widerstand; bool stromfliesst; }; 9

10 Deklaration Die Deklaration erfolgt wie bisher: Beispiel: Namederstruktur variable1,variable2, Datum d1;d2; //2 Variable Uhrzeit u; //1 Variable Hoersaal raeume[20]; //Array mit 20 Elementen vom Typ Hoersaal Klausurtermin *t; //Zeiger auf Klausurtermin 10

11 Dateien Die Definition muss immer ausserhalb einer Funktion erfolgen. Üblicherweise erfolgt sie in einer separaten Datei (Headerdatei). Die Definition wird dann mittels include dort eingefügt, wo sie benötigt wird. #include "Datum.h" #include "Uhrzeit.h" #include "Hoersaal.h" #include "Klausurtermin.h" #include <iostream> using namespace std; void main() } 11

12 9.2 Elementzugriff Der Zugriff auf die einzelnen Elemente eines Objekts erfolgt mittels des Punktoperators: namedesobjekts.namedeselements Beispiel: Uhrzeit u,v; u.minute=0; u.stunde=12; cin>>v.stunde; cin>>v.minute; if ( v.stunde > u.stunde ) 12

13 Zugriff über Zeiger Ist die Adresse eines Objekts in einer Zeigervariablen gespeichert erfolgt der Zugriff mittels des Verweisoperators * Beispiel: Uhrzeit u, *ptr=&u; (*ptr).minute=0; //entspricht u.minute=0; Achtung: Klammern sind hier unbedingt erforderlich wg. der Rangfolge *ptr.minute würde als *(ptr.minute) interpretiert, was Unsinn ist, es sei denn das Element wäre ein Zeiger. 13

14 Pfeiloperator Der Verweisoperator wird bei Zeigervariablen üblicherweise durch den Pfeiloperator ersetzt. Beispiel: Uhrzeit u, *ptr=&u; Statt (*ptr).minute kann man besser ptr->minute schreiben ptr->minute=0; //entspricht u.minute=0; Dies ist weniger fehleranfällig, da hier keine Klammern notwendig sind. 14

15 9.3 Mehrfachverwendung Strukturen können innerhalb eines Systems mehrfach eingesetzt werden. Beispiel: Klausurtermin und main verwenden Uhrzeit, Datum, Hoersaal Also müssen in den Dateien main.cpp und Klausurtermin.h jeweils die Direktiven #include "Uhrzeit.h" bzw. #include "Datum.h" #include "Hoersaal.h" enthalten sein: -> Mehrfachdefinition -> Fehlermeldung Dies lässt sich durch spezielle Direktiven verhindern 15

16 Mehrfaches Includieren Um Mehrfachdefinitionen durch mehrfaches Includieren zu verhindern, werden spezielle Präprozessor-Direktiven bei der Definition der Struktur verwendet: #ifndef _Strukturname_ // if not defined Strukturname (begrenzt durch 2* _) #define _Strukturname_ // definiere Strukturname...// hier ist die Definition #endif // Ende der Definition Diese Direktiven sollten generell verwendet werden. #ifndef _Datum_ #define _Datum_ struct Datum unsigned int tag; unsigned int monat; unsigned int jahr; }; #endif 16

17 9.4 Operationen mit Strukturen Der Zuweisungsoperator zwischen Variablen mit identischem Strukturtyp ist erlaubt: Beispiel: Datum d1,d2; d2=d1;//zuweisung ist erlaubt. Andere Operatoren sind nicht definiert und müssen ggf. selbst programmiert werden - als Operatorfunktion (später). if ( d1== d2 ) //Fehlermeldung if ( d1!= d2 ) //Fehlermeldung 17

18 Strukturen als Parameter Strukturen können wie die elementaren Datentypen als Parameter von Funktionen verwendet werden, also sowohl mittels Call by Value als auch mittels Call by Reference. void ausgabe(datum t) //Call by Value cout<<t.tag<<'.'<<t.monat<<'.'<<t.jahr; } void ausgabe(uhrzeit &u) //Call by Reference cout<<u.stunde<<':'<<u.minute; } 18

19 Strukturen als Funktionswert Strukturen können auch als Ergebnis einer Funktion auftreten. Uhrzeit nulluhr() Uhrzeit u; u.minute=0; u.stunde=0; return u; } //Aufruf Uhrzeit v; v=nulluhr(); //Zuweisungsoperator ist erlaubt 19

20 9.5 Äquivalenz Strukturen mit unterschiedlichen Namen sind stets verschieden. Dabei spielt es keine Rolle, wenn die Elemente identisch sind. struct TYP1 double x; } struct TYP2 double x; } double h=0.0; Typ1 u; Typ2 v; u=v; // Fehlermeldung u=h; // Fehlermeldung 20

21 9.6 Datenstrukturen Beispiele Liste/Tabelle Baum :00 Informatik1 NB1 Linus :00 Mathematik NB2 Fibonacci. Urgroßvater... Urgroßmutter Großvater-V Großmutter-V Großvater-M Großmutter-M Graph/Netzwerk Vater Mutter Dieburg Münster Klein Umstadt Person Groß Zimmern Gross-Umstadt Raibach Array String Ein Neger mit Gazelle zagt im Regen nie 21

22 Datenstrukturen bestehen aus Objekten, Datenstrukturen die in einer speziellen Art und Weise zueinander in Beziehung stehen mit denen festgelegte Verarbeitungen durchgeführt werden können Sie sind primär durch die Organisation bzw. die Beziehung der Objekte zueinander und die zugehörigen Zugriffstechniken beschrieben und nicht durch den gespeicherten Inhalt 22

23 Sequenzielle Strukturen Die einfachsten Strukturen sind die sequenzielle Strukturen. Dabei sind die einzelnen Objekte sequenziell hintereinander angeordnet. Dies bedeutet jedoch nicht zwangsläufig, dass sie auch hintereinander abgespeichert sind. Bisherige Beispiele: Arrays Strings Bei verketteten Strukturen wird dagegen auf die sequentielle Abspeicherung wie bei den Arrays verzichtet. Stattdessen erhält man ausgehend von einem Objekt ein nächstes Objekt durch die Angabe von dessen Adresse. 23

24 9.7 Einfach verkettete Listen Es wird ein spezieller Zeiger für das erste Objekt benötigt Zeigervariable mit der Adresse des nächsten Objekts Erstes Objekt next next First... Zweites Objekt next Letztes Objekt NULL 24

25 Einfach verkettete Listen/Definition Eine Liste lässt sich als Struktur implementieren. Das einzige Element ist die Zeigervariable auf das erste Objekt der Liste Allgemein struct Liste Elementtyp* first; } Beispiel struct Hoersaalliste Hoersaal* first; } Hoersaalliste a; a.first = 0; //Leere Liste 25

26 Listenobjekte Ein Objekt lässt sich als Struktur implementieren, wobei ein Element next erforderlich ist, welches die Adresse des nächsten Listenobjekts enthält. Variante 1: Alle Elemente inkl. Zeiger sind einzeln aufgeführt struct Listenobjekt int Listenobjekt* next; }; struct HSE string bezeichnung; unsigned int kapazitaet; HSE* next; }; Variante 2: Zeiger auf Daten/next struct Listenobjekt Daten *inhalt; Listenobjekt* next; }; struct HSE Hoersaal *ptr_saal; HSE* next; }; Damit spielen die Daten keine Rolle mehr, da sie über einen Zeiger angesprochen werden. Alle Listen sind somit "gleich"; 26

27 Prinzipielle Aufgaben Neues (Listen-)Objekt erzeugen Erstellen (Aufbau) der Datenstruktur Listenobjekte einfügen Einfügen am Anfang Einfügen am Ende Einfügen gemäß einer gewünschten Sortierung Sonderfall: Einfügen in eine leere Struktur Verändern der Datenstruktur Listenobjekte einfügen (wie oben) Listenobjekte löschen Listenobjekt ändern Aktionen mit der Datenstruktur alle Listenobjekte anzeigen ein Listenobjekte suchen die Anzahl der Listenobjekte ermitteln. 27

28 Erzeugung eines Listenobjekts Ein Listenobjekt lässt sich mittels new erzeugen, zweckmäßigerweise in einer Funktion, die als Ergebnis die Adresse des neuen Elements liefert Listenobjekt* neueslistenobjekt(parameter1, ) Listenobjekt *neu = new Listenobjekt; neu->element1= parameter1; return neu; } Die erforderlichen Daten werden als Parameter übergeben HSE* neueshse(string pb, unsigned int pk) HSE *neu = new HSE; neu->bezeichnung = pb; neu->kapazitaet = pk; neu->next = 0; return neu; } 28

29 Einfügen am Anfang Ausgangssituation: first zeigt auf das erste Element/first kann NULL sein a) Einzufügendes Objekt Listelement a; a.next = first; first = &a; b) Einzufügendes Objekt Adresse gespeichert in Listelement *ptr. Dies ist etwa dann der Fall, wenn das Objekt mittels new erzeugt wurde. ptr->next = first; first = ptr; Testfälle: leere Liste nicht leere Liste 29

30 Aktionen mit verketteten Listen Anwendungsbeispiele: alle Algorithmen, die es auch für Arrays gibt Ausnahme: sortieren/mischen ist unüblich Der prinzipielle Ablauf ist stets derselbe: Beginnend bei dem ersten Objekt werden der Reihe nach alle anderen Objekte aufgesucht, bis kein Objekt mehr vorhanden ist. Bei Arrays lässt sich dies mit einer konventionellen for-schleife erreichen. Hier muss dies mittels Zeigern realisiert werden. AktuellesObjekt = erstesobjekt (= first) Solange AktuellesObjekt vorhanden (aktuell ist nicht NULL) Aktion mit AktuellesObjekt durchführen AktuellesObjekt = nächstesobjekt nach aktuellemobjekt (= AktuellesObjekt-> next) 30

31 Aktionen mit verketteten Listen Scrollen mit Aktion Vorlauf:Initialisierungen/Anfangsaktion Erstes Objekt wählen Solange Objekt vorhanden Objekt bearbeiten (Aktion) nächstes Objekt wählen Nachlauf: Abschlussaktion Beispiel Kopfzeile ausgeben, Zähler, Summationsvariable 0 setzen aktuellesobjekt=first aktuellesobjekt nicht NULL Aktion aktuellesobjekt=aktuellesobjekt->next Beispiel: Fußzeile ausgeben, Durchschnitt berechnen neue Seite 31

32 Prinzipieller Testplan Fall Beschreibung Daten Ergebnis 1 Leere Liste / 2 Liste mit 1 Element obj1 3 Liste mit 2 Elementen obj1,obj2 4 Liste mit 3 Elementen obj1,obj2,obj3 32

33 Beispiel: Anzeigen void anzeigen(hse* start) void ausgabe(hse*); HSE* aktuell=start; cout<<"hoersaaluebersicht"<<endl; while (aktuell!= 0) ausgabe(aktuell); aktuell=aktuell->next; } } Startelement als Parameter Ausgabefunktion für ein Listenelement Auch als void ausgabe(hse a) void ausgabe(hse &a) möglich. void ausgabe(hse* ptr) cout<<"raum "<<ptr->bezeichnung; cout<<" "<<ptr->kapazitaet<<" Plaetze"<endl; } 33

34 Beispielprogramm #include "HSE.h" #include <iostream> #include <string> using namespace std; void main() void ausgabe(hse*); void anzeigen(hse*); HSE* neueshse(string,unsigned int); HSE* first=null; for ( int i=0;i<3;i++) //Liste erstellen cout<<" Beschreibung / Kapazitaet "; string pb; unsigned int pk; cin>>pb>>pk; HSE* ptr=neueshse(pb,pk);//neues Objekt ptr->next=first; //einfügen am Anfang first=ptr; } anzeigen(first); } 34

35 Aktion: Zählen int zaehlen(hse* start) HSE* aktuell=start; int z=0; while (aktuell!=null) z++; aktuell=aktuell->next; } return z; } 35

36 Testplan Fall Beschreibung Daten Ergebnis 1 Leere Liste / 0 2 Liste mit 1 Element obj1 1 3 Liste mit 2 Elementen obj1,obj2 2 4 Liste mit 3 Elementen obj1,obj2,obj3 3 36

37 Aktion: Suchen HSE* suche(hse* start,string pb) HSE* aktuell=start; while (aktuell!=null) if ( aktuell->bezeichnung == pb return aktuell; aktuell=aktuell->next; } return NULL; } 37

38 Testplan Der Testplan ist in seiner Struktur identisch zum Testplan für Arrays. Der Plan wird aus Anwendersicht (Blackboxtest) erstellt. Daher ist es unerheblich, ob die Struktur als Array oder als verkettete Liste implementiert wird. Daher ist jeder Testplan abhängig von den Merkmalen Anzahl der Elemente positives/negatives Ergebnis Würde man sich bei den Testfällen vom Programmcode inkl. Implementierung leiten lassen gäbe dies möglicherweise eine andere Struktur des Testplans (Whiteboxtest). 38

39 Aktion: letztes Listenobjekt bestimmen HSE* suche(hse* start) HSE* aktuell=start; if ( aktuell = =0 )//Leere Liste return NULL; while (aktuell->next!= 0)//nicht letztes Objekt aktuell=aktuell->next; return aktuell; } 39

40 Testplan Fall Beschreibung Daten Ergebnis 1 Leere Liste / NULL 2 Liste mit 1 Objekt obj1 &obj1 3 Liste mit 2 Objekten obj1,obj2 &obj2 4 Liste mit 3 Objekten obj1,obj2,obj3 &obj3 40

41 Aktion: Löschen Aufgabenstellung: Es soll ein Objekt gelöscht werden. 1. Schritt: Vorgaenger + Objekt suchen -> Adressen gefunden 2. Schritt Objekt aus Liste entfernen 3. Verwendung des gelöschten Objekts klären next suchwert kopieren next next vorgaenger aktuell Befehl: vorgaenger->next =aktuell->next Sonderfall: wenn suchwert das erste Objekt ist. In diesem Fall ändert sich first und nicht voegaenger 41

42 Aktion: Löschen loeschen(start,pb) vorgaenger=null aktuell=start aktuell!=null ja aktuell->bezeichnung = pb nein ja aktuell=start nein start= aktuell->next vorgaenger->next= aktuell->next vorgaenger=aktuell aktuell=aktuell->next return 42

43 Aktion: Löschen void loeschen(hse* &start,string pb) HSE* aktuell=start,*vorgaenger=null; while (aktuell!=null ) if ( aktuell->bezeichnung==pb ) //gefunden if ( aktuell==start )//erstes Objekt start=aktuell->next; else vorgaenger->next=aktuell->next; return; } else //nicht gefunden vorgaenger=aktuell; aktuell=aktuell->next; } } 43

44 Testplan Wie suchen 44

45 Aktion: Löschen Vergleich mit Arrays Vorteil kein Umspeichern Nachteil zusätzlicher Speicherplatz für Zeiger Offene Frage Was geschieht mit dem gelöschten Objekt? Falls mit new erzeugt-> mit delete entfernen Ansonsten? 45

46 Aktion: Einfügen Ein Objekt soll in eine sortierte verkettete Liste eingefügt werden. Die Adresse ist in neu gespeichert. stelle neu < suchwert next suchwert next > suchwert next Aufgabe : man muss die erste Stelle finden, dessen Nachfolger einen größeren Suchwert (z.b. Artikelnummer) hat als das neue Objekt Sonderfälle : leere Liste, wenn neu das erste oder das letzte Objekt wird. 46

47 Aktion: Einfügen stelle neu < suchwert next suchwert next > suchwert next Befehlsfolge neu->next = stelle->next; stelle->next=neu Sonderfälle: einfügen am Anfang bzw. Ende 47

48 Aktion: Einfügen Einfügen Sortiert ja Liste leer Stelle finden nein In leere Liste einfügen Stelle=Anfang ja nein Stelle=Ende am Anfang ja nein einfügen Am Ende einfügen in der Mitte einfügen Programmcode: Übung 48

49 Testplan Einzufügendes Objekt: neu Fall Beschreibung Daten Ergebnis 1 Leere Liste / neu 2 Liste mit 2 Objekten obj1,obj2 2.1 vorne einfügen neu,obj1,obj2 2.2 in der Mitte einfügen obj1,neu,obj2 2.3 hinten einfügen obj1,obj2,neu 49

50 Aktion: Einfügeposition finden HSE* position(hse*start,string pb) HSE* aktuell=start, *vorgaenger=0; while (aktuell!=null ) if ( aktuell->bezeichnung>=pb ) return vorgaenger;//gefunden else //nicht gefunden vorgaenger=aktuell; aktuell=aktuell->next; } return vorgaenger;//letztes falls nicht gefunden } Es soll das Objekt gesucht werden, nach dem das neue Objekt eingefügt werden soll. Kriterium: sortiert nach bezeichnung Vorgehensweise: suche das erste Objekt, welches eine "größere" bezeichnung hat. Davor kommmt das neue Objekt Testplan: wie einfügen 50

51 9.8 Doppelt verkettete Listen Neben der Adresse des nachfolgenden Objekts ist auch noch die Adresse des vorhergehenden Objekts gespeichert. first last left right left right left right 51

52 Doppelt verkettete Listen Die Algorithmen sind analog den Algorithmen der einfachen Verkettung. Vorteil: Das Ende der Struktur ist sofort zugreifbar. Nachteil: zusätzlicher Zeiger erhöhter Aufwand bei den Agorithmen 52

53 9.9 Weitere sequenzielle Strukturen Es gibt spezielle sequenzielle Strukturen, bei denen für die Operationen Einfügen und Löschen spezielle Randbedingungen gelten: Diese Operationen sind dann nur am Anfang (erstes Objekt) bzw. am Ende (letztes Objekt) erlaubt. 53

54 Stack (Keller, Stapel, Kellerstapel) Ein Stack ist eine sequentielle Struktur von Objekten, bei der die Operationen Einfügen und Löschen nur an einem Ende möglich sind. Prinzip: LIFO (last in first out) Einfügen Löschen 54

55 Operationen auf einem Stack Ein Stack lässt sich mittels einer verketteten Liste oder auch einem Array implementieren. Wichtig dabei ist, dass ein spezieller Satz an Funktionen bereitgestellt wird: push pop top/peek empty ein Objekt einfügen das zuletzt eingefügte Objekt löschen das zuletzt eingefügte Objekt liefern prüfen ob der Stack leer ist 55

56 Anwendungen Anwendungsbeispiele Browsen im Internet Aufruf von Menuestrukturen Aufruf/Return von Funktionen in Programmen (Rücksprungadresse im Stack merken) Analyse von Klammerstrukturen ( : push ) : pop 56

57 Queue (Schlange, Warteschlange) Eine Warteschlange ist eine sequentielle Struktur von Objekten gleichen Typs, bei der die Operation Einfügen nur an dem einen Ende, die Operation Löschen nur an dem anderen Ende möglich ist. Prinzip: FIFO (first in first out) Einfügen Löschen 57

58 Operationen auf einer Queue Wie Stack 58

59 Anwendungen Anwendungsbeispiele Abarbeitung von Maus- und Tastaturereignissen Management von Druckaufträgen (Spooling) Bestellsysteme 59

60 9.10 Bäume Beispiel Stammbaum Urgroßvater... Urgroßmutter Großvater-V Großmutter-V Großvater-M Großmutter-M Vater Mutter Person 60

61 Prinzip Definition von Bäumen: Es gibt genau ein Objekt ohne Vorgänger -> Wurzel Verschiedene Objekte haben keine gemeinsamen Nachfolger oder Jedes Objekt hat genau einen Vorgänger (außer die Wurzel) Hat jedes Objekt genau 2 Nachfolger (inkl. NULL) so spricht man von einem Binären Baum Anstelle von next gibt es hier dann einen linken Nachfolger (left) und einen rechten Nachfolger (right) 61

62 Anwendungen Anwendungsbeispiele sitemap einer Internetanwendung Verzeichnisbaum/-struktur Arithmetische Ausdrücke + / * a + d - b c e f 62

63 Algorithmen Die Algorithmen für Einfügen und Löschen sind analog zur Verkettung. Die Algorithmen für Anzeigen und Suchen werden in der Regel rekursiv programmiert. void anzeigebaum(be* wurzel) wurzel->anzeigen();//anzeige eines Objekts if (wurzel->left!=null) anzeigebaum(wurzel->left); if (wurzel->right!=null) anzeigebaum(wurzel->right); } 63

64 Algorithmen: Suche Der große Vorteil von Bäumen liegt in der schnellen Suche. Der Aufwand ist vergleichbar dem bei der binären Suche log 2 (anzahl). Der Algorithmus ist analog zur binären Suche. BE* suchebaum(be* wurzel, typ key) if ( wurzel==null ) return NULL; else if ( wurzel->xxx==key ) return wurzel;//gefunden else if ( key<wurzel->xxx )//nicht gefunden return suchebaum(wurzel->left); else return suchebaum(wurzel->right); } } Datentyp zur Suche Element zur Suche 64

65 Strukturen und Verbunde (Unions) Selten gibt es in Programmen Felder, die für sich alleine stehen, meist gehören Gruppen von Datenwerten zusammen. Beispiel: Gruppe von Kindern mit Gewicht, Geschlecht, Alter und Größe: const int MAXKINDER = 1000; double groesse[maxkinder]; double gewicht[maxkinder]; int alter_jahre[maxkinder]; int alter_monate[maxkinder]; char geschlecht[maxkinder]; Jetzt sind die Daten eines einzelnen Kindes nur über den gleichen Index als zusammengehörig erkennbar viele Fehlermöglichkeiten! In C++ kann eine Zusammengehörigkeit durch Strukturen gekennzeichnet werden. Wie die Felder, sind auch die Strukturen und Verbunde abgeleitete Datentypen, sie werden aus den einfachen Grundtypen zusammengesetzt. 65

66 Strukturen und Verbunde (Unions) Strukturen werden mit dem Schlüsselwort struct deklariert, diesen folgt der Name der Struktur und dann in geschweiften Klammern die Liste der Variablen, aus denen die Struktur besteht. Beispiel: struct Kind double groesse; double gewicht; int alter_jahre; int alter_monate; char geschlecht; }; Mit dieser Deklaration wird der Typ Kind bekanntgemacht. Die Struktur besteht aus den double-variablen groesse und gewicht, den int-variablen alter_jahre und alter_monate und der char-variablen geschlecht. Die Gesamtlänge einer Variablen vom Typ kind ist 2 * 8 Bytes (double) + 2 * 4 Bytes (int) + 1 Byte (char) =

67 Strukturen und Verbunde (Unions) Definition von Variablen vom Typ Kind: Kind Berta; Kind Hugo; Kind testgruppe [MAXKINDER]; Vorbesetzung: Kind beispiel = 125.0, 32.5, 13, 2, w }; Zugriff auf einzelne Elemente der Struktur : Berta.gewicht = 37.5; if (Hugo.groesse > g_grenze)... Auch die komplette Struktur kann verwendet werden: z.b. Kind groesstes; groesstes.groesse = 0; for ( int i=0; i < AnzKinder ; i++) if ( testgruppe[i].groesse > groesstes.groesse ) groesstes = testgruppe[i]; 67

68 Strukturen und Verbunde (Unions) Verbunde ( Unions) sind den Strukturen sehr ähnlich, allerdings liegen die einzelnen Komponenten nicht hintereinander im Speicher, sondern sozusagen übereinander. Alle Komponenten beginnen an der gleichen Stelle. Verbunde werden mit dem Schlüsselwort union deklariert. z.b. union test long zahl; char zeichen [4]; }; Die Länge einer Union ist gleich der Länge der längsten Komponente. Im Beispiel 4 Bytes. 68

69 Anwendung: #include <iostream> #include <string> using namespace std; int main (void) union test long zahl; char zeichen [4]; }; test variable; variable.zahl = ; cout << endl << variable.zeichen<< endl; cout << endl << variable.zahl<< endl; strcpy ( variable.zeichen,"oha"); cout << endl << variable.zeichen<< endl; cout << endl << variable.zahl<< endl; return 0; } 69

70 Ausgabe: % Oha ( Wer zuletzt schreibt hat gewonnen! ) Verbunde werden daher nur selten verwendet. 70

9. Zeiger und Strukturen

9. Zeiger und Strukturen 9. Zeiger und Strukturen Motivation Ein Array ist ein benutzerdefinierter Datentyp. Er besteht aus - Elementen mit identischem Typ - diese sind lückenlos hintereinander abgespeichert - der Zugriff auf

Mehr

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny Grundlagen der Informatik Prof. Dr. Stefan Enderle NTA Isny 2 Datenstrukturen 2.1 Einführung Syntax: Definition einer formalen Grammatik, um Regeln einer formalen Sprache (Programmiersprache) festzulegen.

Mehr

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen Binäre Bäume 1. Allgemeines Binäre Bäume werden grundsätzlich verwendet, um Zahlen der Größe nach, oder Wörter dem Alphabet nach zu sortieren. Dem einfacheren Verständnis zu Liebe werde ich mich hier besonders

Mehr

Einführung in die Programmierung

Einführung in die Programmierung : Inhalt Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund - mit / ohne Parameter - mit / ohne Rückgabewerte

Mehr

Vorkurs C++ Programmierung

Vorkurs C++ Programmierung Vorkurs C++ Programmierung Klassen Letzte Stunde Speicherverwaltung automatische Speicherverwaltung auf dem Stack dynamische Speicherverwaltung auf dem Heap new/new[] und delete/delete[] Speicherklassen:

Mehr

M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung

M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung M. Graefenhan 2000-12-07 Aufgabe Lösungsweg Übungen zu C Blatt 3 Musterlösung Schreiben Sie ein Programm, das die Häufigkeit von Zeichen in einem eingelesenen String feststellt. Benutzen Sie dazu ein zweidimensionales

Mehr

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java: Technische Informatik für Ingenieure (TIfI) WS 2005/2006, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Datenstrukturen 9. Datenstrukturen Daten zusammenfassen

Mehr

1 Vom Problem zum Programm

1 Vom Problem zum Programm Hintergrundinformationen zur Vorlesung GRUNDLAGEN DER INFORMATIK I Studiengang Elektrotechnik WS 02/03 AG Betriebssysteme FB3 Kirsten Berkenkötter 1 Vom Problem zum Programm Aufgabenstellung analysieren

Mehr

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2015/2016 Wirtschaftsingenieur Bachelor 5. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2015/2016 Wirtschaftsingenieur Bachelor 5. Aufgabe Datenstruktur, Dateieingabe und -ausgabe Aufgabenstellung Für eine Hausverwaltung sollen für maximal 500 Wohnungen Informationen gespeichert werden, die alle nach der gleichen Weise wie folgt strukturiert sind: Art Baujahr Wohnung Whnginfo Nebenkosten

Mehr

Ziel, Inhalt. Programmieren in C++ Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind

Ziel, Inhalt. Programmieren in C++ Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind Templates und Containerklassen Ziel, Inhalt Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind Templates und Containerklassen 1 Ziel, Inhalt

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE16-Rekursion (Stand 09.12.2011) Aufgabe 1: Implementieren Sie in Java ein Programm, das solange einzelne Zeichen vom Terminal einliest, bis ein #-Zeichen

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

Folge 19 - Bäume. 19.1 Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

Folge 19 - Bäume. 19.1 Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12 Grundlagen: Folge 19 - Bäume 19.1 Binärbäume - Allgemeines Unter Bäumen versteht man in der Informatik Datenstrukturen, bei denen jedes Element mindestens zwei Nachfolger hat. Bereits in der Folge 17 haben

Mehr

FB Informatik. Fehler. Testplan

FB Informatik. Fehler. Testplan Fehler #include int i,n,summe; int summe (int); cout 0) cin>n; i=summme(n); cout

Mehr

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung Suchbäume Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-13-14/infoeinf WS13/14 Action required now 1. Smartphone: installiere die App "socrative

Mehr

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2014/2015 Wirtschaftsingenieur Bachelor 4. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2014/2015 Wirtschaftsingenieur Bachelor 4. Aufgabe Datenstruktur, Dateieingabe und -ausgabe Aufgabenstellung Für ein Baumkataster sollen für maximal 500 Bäume Informationen gespeichert werden, die alle nach der gleichen Weise wie folgt strukturiert sind: Nummer Bauminfo Baumart Hoehe Baum Umfang

Mehr

2. Programmierung in C

2. Programmierung in C 2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten Operatoren, Ausdrücke und Anweisungen Kontrollstrukturen (Steuerfluss)

Mehr

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur Unterprogramme Unterprogramme sind abgekapselte Programmfragmente, welche es erlauben, bestimmte Aufgaben in wiederverwendbarer Art umzusetzen. Man unterscheidet zwischen Unterprogrammen mit Rückgabewert

Mehr

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 18

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 18 Kapitel 3 Datentypen und Variablen Seite 1 von 18 Datentypen - Einführung - Für jede Variable muss ein Datentyp festgelegt werden. - Hierdurch werden die Wertemenge und die verwendbaren Operatoren festgelegt.

Mehr

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben.

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben. Aufgabe 1.30 : Schreibe ein Programm DM_in_Euro.java zur Umrechnung eines DM-Betrags in Euro unter Verwendung einer Konstanten für den Umrechnungsfaktor. Das Programm soll den DM-Betrag als Parameter verarbeiten.

Mehr

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu Daten Makro + VBA effektiv 5 DATEN 5.1. Variablen Variablen können beliebige Werte zugewiesen und im Gegensatz zu Konstanten jederzeit im Programm verändert werden. Als Variablen können beliebige Zeichenketten

Mehr

Klausur in Programmieren

Klausur in Programmieren Studiengang Sensorik/Sensorsystemtechnik Note / normierte Punkte Klausur in Programmieren Sommer 2014, 16. Juli 2014 Dauer: 1,5h Hilfsmittel: Keine (Wörterbücher sind auf Nachfrage erlaubt) Name: Matrikelnr.:

Mehr

2. Semester, 2. Prüfung, Lösung

2. Semester, 2. Prüfung, Lösung 2. Semester, 2. Prüfung, Lösung Name Die gesamte Prüfung bezieht sich auf die Programmierung in C++! Prüfungsdauer: 90 Minuten Mit Kugelschreiber oder Tinte schreiben Lösungen können direkt auf die Aufgabenblätter

Mehr

Studentische Lösung zum Übungsblatt Nr. 7

Studentische Lösung zum Übungsblatt Nr. 7 Studentische Lösung zum Übungsblatt Nr. 7 Aufgabe 1) Dynamische Warteschlange public class UltimateOrderQueue private Order[] inhalt; private int hinten; // zeigt auf erstes freies Element private int

Mehr

Übung 9. Quellcode Strukturieren Rekursive Datenstrukturen Uebung 9

Übung 9. Quellcode Strukturieren Rekursive Datenstrukturen Uebung 9 Informatik I 2 Übung 9 Quellcode Strukturieren Rekursive Datenstrukturen Uebung 9 Quellcode Strukturieren Wenn alle Funktionen in einer Datei zusammengefasst sind wird es schnell unübersichtlich Mehrere

Mehr

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 16

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 16 Kapitel 5 Arithmetische Operatoren Seite 1 von 16 Arithmetische Operatoren - Man unterscheidet unäre und binäre Operatoren. - Je nachdem, ob sie auf einen Operanden wirken, oder eine Verknüpfung zweier

Mehr

Über Arrays und verkettete Listen Listen in Delphi

Über Arrays und verkettete Listen Listen in Delphi Über Arrays und verkettete Listen Listen in Delphi Michael Puff mail@michael-puff.de 2010-03-26 Inhaltsverzeichnis Inhaltsverzeichnis 1 Einführung 3 2 Arrays 4 3 Einfach verkettete Listen 7 4 Doppelt verkettete

Mehr

Klausur in Programmieren

Klausur in Programmieren Studiengang Sensorik/Sensorsystemtechnik Note / normierte Punkte Klausur in Programmieren Winter 2009/2010, 18. Februar 2010 Dauer: 1,5h Hilfsmittel: Keine (Wörterbücher sind auf Nachfrage erlaubt) Name:

Mehr

Klausur in Programmieren

Klausur in Programmieren Studiengang Sensorik/Sensorsystemtechnik Note / normierte Punkte Klausur in Programmieren Wintersemester 2010/11, 17. Februar 2011 Dauer: 1,5h Hilfsmittel: Keine (Wörterbücher sind auf Nachfrage erlaubt)

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens 1 Organisatorisches Freitag, 05. Mai 2006: keine Vorlesung! aber Praktikum von 08.00 11.30 Uhr (Gruppen E, F, G, H; Vortestat für Prototyp)

Mehr

Programmierung in C. Grundlagen. Stefan Kallerhoff

Programmierung in C. Grundlagen. Stefan Kallerhoff Programmierung in C Grundlagen Stefan Kallerhoff Vorstellungsrunde Name Hobby/Beruf Schon mal was programmiert? Erwartungen an den Kurs Lieblingstier Für zu Hause C-Buch online: http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/

Mehr

Zählen von Objekten einer bestimmten Klasse

Zählen von Objekten einer bestimmten Klasse Zählen von Objekten einer bestimmten Klasse Ziel, Inhalt Zur Übung versuchen wir eine Klasse zu schreiben, mit der es möglich ist Objekte einer bestimmten Klasse zu zählen. Wir werden den ++ und den --

Mehr

Einführung in die Java- Programmierung

Einführung in die Java- Programmierung Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Wichtig... Mittags keine Pommes... Praktikum A 230 C 207 (Madeleine + Esma) F 112 F 113

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Name, Vorname Matrikelnummer Probeklausur zur Vorlesung Einführung in die Programmierung WS 2008/09 Dauer: 2 Stunden Hinweise: Schreiben Sie Ihren Namen und Ihre Matrikelnummer auf dieses Deckblatt und

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum

Mehr

Die Programmiersprache C99: Zusammenfassung

Die Programmiersprache C99: Zusammenfassung Die Programmiersprache C99: Zusammenfassung Jörn Loviscach Versionsstand: 7. Dezember 2010, 19:30 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen in der Vorlesung. Videos dazu: http://www.youtube.com/joernloviscach

Mehr

Binäre Bäume Darstellung und Traversierung

Binäre Bäume Darstellung und Traversierung Binäre Bäume Darstellung und Traversierung Name Frank Bollwig Matrikel-Nr. 2770085 E-Mail fb641378@inf.tu-dresden.de Datum 15. November 2001 0. Vorbemerkungen... 3 1. Terminologie binärer Bäume... 4 2.

Mehr

Fakultät Angewandte Informatik Lehrprofessur für Informatik 23.01.2012

Fakultät Angewandte Informatik Lehrprofessur für Informatik 23.01.2012 WS 2011/2012 Fakultät Angewandte Informatik Lehrprofessur für Informatik 23.01.2012 Prof. Dr. Robert Lorenz Musterlösung zur Vorlesung Informatik I, Extrablatt zu komplexen Datenstrukturen Aufgabe 45 **

Mehr

Erwin Grüner 09.02.2006

Erwin Grüner 09.02.2006 FB Psychologie Uni Marburg 09.02.2006 Themenübersicht Folgende Befehle stehen in R zur Verfügung: {}: Anweisungsblock if: Bedingte Anweisung switch: Fallunterscheidung repeat-schleife while-schleife for-schleife

Mehr

Java Kurs für Anfänger Einheit 5 Methoden

Java Kurs für Anfänger Einheit 5 Methoden Java Kurs für Anfänger Einheit 5 Methoden Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 22. Juni 2009 Inhaltsverzeichnis Methoden

Mehr

Übung 9 - Lösungsvorschlag

Übung 9 - Lösungsvorschlag Universität Innsbruck - Institut für Informatik Datenbanken und Informationssysteme Prof. Günther Specht, Eva Zangerle Besprechung: 15.12.2008 Einführung in die Informatik Übung 9 - Lösungsvorschlag Aufgabe

Mehr

Kapitalerhöhung - Verbuchung

Kapitalerhöhung - Verbuchung Kapitalerhöhung - Verbuchung Beschreibung Eine Kapitalerhöhung ist eine Erhöhung des Aktienkapitals einer Aktiengesellschaft durch Emission von en Aktien. Es gibt unterschiedliche Formen von Kapitalerhöhung.

Mehr

Objektbasierte Entwicklung

Objektbasierte Entwicklung Embedded Software Objektbasierte Entwicklung Objektorientierung in C? Prof. Dr. Nikolaus Wulff Objektbasiert entwickeln Ohne C++ wird meist C im alten Stil programmiert. => Ein endlose while-schleife mit

Mehr

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff Programmieren in C Macros, Funktionen und modulare Programmstruktur Prof. Dr. Nikolaus Wulff Der C Präprozessor Vor einem Compile Lauf werden alle Präprozessor Kommandos/Makros ausgewertet. Diese sind

Mehr

Klausur in Programmieren

Klausur in Programmieren Studiengang Sensorik/Sensorsystemtechnik Note / normierte Punkte Klausur in Programmieren Sommer 2009, 16. Juli 2009 Dauer: 1,5h Hilfsmittel: Keine (Wörterbücher sind auf Nachfrage erlaubt) Name: Matrikelnr.:

Mehr

Angewandte Mathematik und Programmierung

Angewandte Mathematik und Programmierung Angewandte Mathematik und Programmierung Einführung in das Konzept der objektorientierten Anwendungen zu mathematischen Rechnens SS2013 Inhalt Projekt Vorlesung: praktische Implementierung üben Ein und

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 25. August 2014. Programmier-Labor. 04. + 05. Übungsblatt. int binarysearch(int[] a, int x),

Institut für Programmierung und Reaktive Systeme 25. August 2014. Programmier-Labor. 04. + 05. Übungsblatt. int binarysearch(int[] a, int x), Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 25. August 2014 Programmier-Labor 04. + 05. Übungsblatt Aufgabe 21: a) Schreiben Sie eine Methode

Mehr

Konzepte der Informatik

Konzepte der Informatik Konzepte der Informatik Vorkurs Informatik zum WS 2011/2012 26.09. - 30.09.2011 17.10. - 21.10.2011 Dr. Werner Struckmann / Christoph Peltz Stark angelehnt an Kapitel 1 aus "Abenteuer Informatik" von Jens

Mehr

Folge 18 - Vererbung

Folge 18 - Vererbung Workshop Folge 18 - Vererbung 18.1 Ein einfacher Fall der Vererbung Schritt 1 - Vorbereitungen Besorgen Sie sich - vielleicht aus einer der Übungen der Folge 17 - ein fertiges und lauffähiges Listenprojekt,

Mehr

1 topologisches Sortieren

1 topologisches Sortieren Wolfgang Hönig / Andreas Ecke WS 09/0 topologisches Sortieren. Überblick. Solange noch Knoten vorhanden: a) Suche Knoten v, zu dem keine Kante führt (Falls nicht vorhanden keine topologische Sortierung

Mehr

Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter

Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter Aufgabe 3: Konto Um Geldbeträge korrekt zu verwalten, sind zwecks Vermeidung von Rundungsfehlern entweder alle Beträge in Cents umzuwandeln und

Mehr

Klausur C-Programmierung / 15.02.2014 / Klingebiel / 60 Minuten / 60 Punkte

Klausur C-Programmierung / 15.02.2014 / Klingebiel / 60 Minuten / 60 Punkte Klausur C-Programmierung / 15.02.2014 / Klingebiel / 60 Minuten / 60 Punkte Musterlösung 1. Aufgabe (5 Punkte) Im folgenden Programmcode sind einige Fehler enthalten. Finden und markieren Sie mindestens

Mehr

Grundbegriffe der Informatik

Grundbegriffe der Informatik Grundbegriffe der Informatik Einheit 15: Reguläre Ausdrücke und rechtslineare Grammatiken Thomas Worsch Universität Karlsruhe, Fakultät für Informatik Wintersemester 2008/2009 1/25 Was kann man mit endlichen

Mehr

Software Engineering Klassendiagramme Assoziationen

Software Engineering Klassendiagramme Assoziationen Software Engineering Klassendiagramme Assoziationen Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Lesen von Multiplizitäten (1) Multiplizitäten werden folgendermaßen

Mehr

Modellierung und Programmierung 1

Modellierung und Programmierung 1 Modellierung und Programmierung 1 Prof. Dr. Sonja Prohaska Computational EvoDevo Group Institut für Informatik Universität Leipzig 19. November 2015 Gültigkeitsbereich (Scope) von Variablen { int m; {

Mehr

Algorithmen und Datenstrukturen Suchbaum

Algorithmen und Datenstrukturen Suchbaum Algorithmen und Datenstrukturen Suchbaum Matthias Teschner Graphische Datenverarbeitung Institut für Informatik Universität Freiburg SS 12 Motivation Datenstruktur zur Repräsentation dynamischer Mengen

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Dynamische Datenobjekte Pointer/Zeiger, Verkettete Liste Eigene Typdefinitionen 1 Zeigeroperatoren & und * Ein Zeiger ist die Speicheradresse irgendeines Objektes. Eine

Mehr

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster Es gibt in Excel unter anderem die so genannten Suchfunktionen / Matrixfunktionen Damit können Sie Werte innerhalb eines bestimmten Bereichs suchen. Als Beispiel möchte ich die Funktion Sverweis zeigen.

Mehr

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung: Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Der Sourcecode wird an den entsprechenden Stellen im Programm wiederholt Programm wird lang

Mehr

Proseminar C-Programmierung. Strukturen. Von Marcel Lebek

Proseminar C-Programmierung. Strukturen. Von Marcel Lebek Proseminar C-Programmierung Strukturen Von Marcel Lebek Index 1. Was sind Strukturen?...3 2. Padding 5 3. Vor- und Nachteile von Padding..8 4. Padding gering halten 9 5. Anwendungsgebiete von Strukturen.11

Mehr

368 4 Algorithmen und Datenstrukturen

368 4 Algorithmen und Datenstrukturen Kap04.fm Seite 368 Dienstag, 7. September 2010 1:51 13 368 4 Algorithmen und Datenstrukturen Java-Klassen Die ist die Klasse Object, ein Pfeil von Klasse A nach Klasse B bedeutet Bextends A, d.h. B ist

Mehr

Einführung in die Programmierung

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

Mehr

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken.

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken. Seite erstellen Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken. Es öffnet sich die Eingabe Seite um eine neue Seite zu erstellen. Seiten Titel festlegen Den neuen

Mehr

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) Wintersemester 2007/08 Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät für Informatik Lehrstuhl

Mehr

Bauteilattribute als Sachdaten anzeigen

Bauteilattribute als Sachdaten anzeigen Mit den speedikon Attributfiltern können Sie die speedikon Attribute eines Bauteils als MicroStation Sachdaten an die Elemente anhängen Inhalte Was ist ein speedikon Attribut?... 3 Eigene Attribute vergeben...

Mehr

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen: VBA Programmierung mit Excel Schleifen 1/6 Erweiterung der Aufgabe Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen: Es müssen also 11 (B L) x 35 = 385 Zellen berücksichtigt

Mehr

Java Einführung Collections

Java Einführung Collections Java Einführung Collections Inhalt dieser Einheit Behälterklassen, die in der Java API bereitgestellt werden Wiederholung Array Collections (Vector, List, Set) Map 2 Wiederholung Array a[0] a[1] a[2] a[3]...

Mehr

Objektorientierte Programmierung. Kapitel 12: Interfaces

Objektorientierte Programmierung. Kapitel 12: Interfaces 12. Interfaces 1/14 Objektorientierte Programmierung Kapitel 12: Interfaces Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2012/13 http://www.informatik.uni-halle.de/ brass/oop12/

Mehr

Algorithmik II. a) Fügen Sie in einen anfangs leeren binären Baum die Schlüsselfolge 20, 28, 35, 31, 9, 4, 13, 17, 37, 25 ein.

Algorithmik II. a) Fügen Sie in einen anfangs leeren binären Baum die Schlüsselfolge 20, 28, 35, 31, 9, 4, 13, 17, 37, 25 ein. Aufgabe 10 Binäre Bäume a) Fügen Sie in einen anfangs leeren binären Baum die Schlüsselfolge, 28, 35, 31, 9, 4,, 17, 37, 25 ein. 1. Einfügen von : 3. Einfugen von 35: 2. Einfügen von 28: 28 28 10. Einfügen

Mehr

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-13-14/infoeinf WS13/14 Action required now 1. Smartphone: installiere die App "socrative student"

Mehr

Einführung in die Programmierung (EPR)

Einführung in die Programmierung (EPR) Goethe-Center for Scientific Computing (G-CSC) Goethe-Universität Frankfurt am Main Einführung in die Programmierung (EPR) (Übung, Wintersemester 2014/2015) Dr. S. Reiter, M. Rupp, Dr. A. Vogel, Dr. K.

Mehr

Web-Kürzel. Krishna Tateneni Yves Arrouye Deutsche Übersetzung: Stefan Winter

Web-Kürzel. Krishna Tateneni Yves Arrouye Deutsche Übersetzung: Stefan Winter Krishna Tateneni Yves Arrouye Deutsche Übersetzung: Stefan Winter 2 Inhaltsverzeichnis 1 Web-Kürzel 4 1.1 Einführung.......................................... 4 1.2 Web-Kürzel.........................................

Mehr

Klausur C++ #1 Jahr: 2001; Dozent: Dipl.Ing. Sorber

Klausur C++ #1 Jahr: 2001; Dozent: Dipl.Ing. Sorber Klausur C++ #1 Jahr: 2001; Dozent: Dipl.Ing. Sorber 1) Welche Antworten zur Operatorüberladung sind richtig? (1) a) C++ - Operatoren können zusammen mit Objekten funktionieren b) C++ - Operatoren wird

Mehr

Datensicherung. Beschreibung der Datensicherung

Datensicherung. Beschreibung der Datensicherung Datensicherung Mit dem Datensicherungsprogramm können Sie Ihre persönlichen Daten problemlos Sichern. Es ist möglich eine komplette Datensicherung durchzuführen, aber auch nur die neuen und geänderten

Mehr

Programmieren für Ingenieure Sommer 2015. Ein Rechner. Rechner sind überall. Gerät, das mittels programmierbarer Rechenvorschriften Daten verarbeitet.

Programmieren für Ingenieure Sommer 2015. Ein Rechner. Rechner sind überall. Gerät, das mittels programmierbarer Rechenvorschriften Daten verarbeitet. Programmieren für Ingenieure Sommer 2015 Andreas Zeller, Universität des Saarlandes Ein Rechner Gerät, das mittels programmierbarer Rechenvorschriften Daten verarbeitet. Rechner sind überall Ihr Rechner

Mehr

Institut für Programmierung und Reaktive Systeme 26. April 2013. Programmieren II. 10. Übungsblatt

Institut für Programmierung und Reaktive Systeme 26. April 2013. Programmieren II. 10. Übungsblatt Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 26. April 2013 Programmieren II 10. Übungsblatt Hinweis: Insgesamt werden in diesem Semester fünf

Mehr

17.1.2014 Einführung in die Programmierung Laborübung bei Korcan Y. Kirkici. 12.Übung 13.1. bis 17.1.2014

17.1.2014 Einführung in die Programmierung Laborübung bei Korcan Y. Kirkici. 12.Übung 13.1. bis 17.1.2014 17.1.2014 Einführung in die Programmierung Laborübung bei Korcan Y. Kirkici 12.Übung 13.1. bis 17.1.2014 1 BEFRAGUNG http://1.bp.blogspot.com/- waaowrew9gc/tuhgqro4u_i/aaaaaaaaaey/3xhl 4Va2SOQ/s1600/crying%2Bmeme.png

Mehr

Visio 2013. Grundlagen. Linda York. 1. Ausgabe, Oktober 2013

Visio 2013. Grundlagen. Linda York. 1. Ausgabe, Oktober 2013 Visio 2013 Linda York 1. Ausgabe, Oktober 2013 Grundlagen V2013 2 Visio 2013 - Grundlagen 2 Einfache Zeichnungen erstellen In diesem Kapitel erfahren Sie wie Sie Shapes einfügen, kopieren und löschen was

Mehr

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang sysplus.ch outlook - mail-grundlagen Seite 1/8 Outlook Mail-Grundlagen Posteingang Es gibt verschiedene Möglichkeiten, um zum Posteingang zu gelangen. Man kann links im Outlook-Fenster auf die Schaltfläche

Mehr

12. Dokumente Speichern und Drucken

12. Dokumente Speichern und Drucken 12. Dokumente Speichern und Drucken 12.1 Überblick Wie oft sollte man sein Dokument speichern? Nachdem Sie ein Word Dokument erstellt oder bearbeitet haben, sollten Sie es immer speichern. Sie sollten

Mehr

Überblick. Lineares Suchen

Überblick. Lineares Suchen Komplexität Was ist das? Die Komplexität eines Algorithmus sei hierbei die Abschätzung des Aufwandes seiner Realisierung bzw. Berechnung auf einem Computer. Sie wird daher auch rechnerische Komplexität

Mehr

Anleitung über den Umgang mit Schildern

Anleitung über den Umgang mit Schildern Anleitung über den Umgang mit Schildern -Vorwort -Wo bekommt man Schilder? -Wo und wie speichert man die Schilder? -Wie füge ich die Schilder in meinen Track ein? -Welche Bauteile kann man noch für Schilder

Mehr

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag Ludwig-Maximilians-Universität München WS 2015/16 Institut für Informatik Übungsblatt 9 Prof. Dr. R. Hennicker, A. Klarl Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung:

Mehr

Übersicht... 2 Dateiupload... 3 Administratorfunktionen... 4

Übersicht... 2 Dateiupload... 3 Administratorfunktionen... 4 Inhalt Übersicht... 2 Dateiupload... 3 Administratorfunktionen... 4 Benutzer hinzufügen... 4 Benutzerverwaltung... 5 Ordner anlegen... 6 Rechteverwaltung... 7 Verlag für neue Medien Seite 1 Übersicht Mit

Mehr

Übungen zu C++ Kapitel 1

Übungen zu C++ Kapitel 1 Übungen zu C++ Kapitel 1 Aufgabe 1 Ergänze den Text. a) Die sechs logischen Einheiten eines Computers sind Eingabe-Einheit, Ausgabe-Einheit, RAM, ALU, CPU, Plattenspeicher. b) Die Programme, welche Hochsprachenprogramme

Mehr

Theoretische Grundlagen der Informatik

Theoretische Grundlagen der Informatik Theoretische Grundlagen der Informatik Vorlesung am 12.01.2012 INSTITUT FÜR THEORETISCHE 0 KIT 12.01.2012 Universität des Dorothea Landes Baden-Württemberg Wagner - Theoretische und Grundlagen der Informatik

Mehr

Übungen 19.01.2012 Programmieren 1 Felix Rohrer. Übungen

Übungen 19.01.2012 Programmieren 1 Felix Rohrer. Übungen Übungen if / else / else if... 2... 2 Aufgabe 2:... 2 Aufgabe 3:... 2 Aufgabe 4:... 2 Aufgabe 5:... 2 Aufgabe 6:... 2 Aufgabe 7:... 3 Aufgabe 8:... 3 Aufgabe 9:... 3 Aufgabe 10:... 3 switch... 4... 4 Aufgabe

Mehr

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes.

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes. Binäre Bäume Definition: Ein binärer Baum T besteht aus einer Menge von Knoten, die durch eine Vater-Kind-Beziehung wie folgt strukturiert ist: 1. Es gibt genau einen hervorgehobenen Knoten r T, die Wurzel

Mehr

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala Das Typsystem von Scala 1 Eigenschaften Das Typsystem von Scala ist statisch, implizit und sicher 2 Nichts Primitives Alles ist ein Objekt, es gibt keine primitiven Datentypen scala> 42.hashCode() res0:

Mehr

Kapiteltests zum Leitprogramm Binäre Suchbäume

Kapiteltests zum Leitprogramm Binäre Suchbäume Kapiteltests zum Leitprogramm Binäre Suchbäume Björn Steffen Timur Erdag überarbeitet von Christina Class Binäre Suchbäume Kapiteltests für das ETH-Leitprogramm Adressaten und Institutionen Das Leitprogramm

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Testklausur Einführung in die Programmierung Probeklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList In

Mehr

Excel Funktionen durch eigene Funktionen erweitern.

Excel Funktionen durch eigene Funktionen erweitern. Excel Funktionen durch eigene Funktionen erweitern. Excel bietet eine große Anzahl an Funktionen für viele Anwendungsbereiche an. Doch es kommt hin und wieder vor, dass man die eine oder andere Funktion

Mehr

Ein + vor dem Ordnernamen zeigt an, dass der Ordner weitere Unterordner enthält. Diese lassen sich mit einem Klick (linke Maustaste) anzeigen.

Ein + vor dem Ordnernamen zeigt an, dass der Ordner weitere Unterordner enthält. Diese lassen sich mit einem Klick (linke Maustaste) anzeigen. Ordner erstellen, Bilder ordnen Um neue Ordner zu erstellen und Bilddateien zu ordnen, bietet es sich an, sich zunächst die Hierarchie der bereits vorhandenen Ordner anzuschauen. Mit einem Klick auf Ordner

Mehr

C++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet

C++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet C++ Grundlagen ++ bedeutet Erweiterung zum Ansi C Standard Hier wird eine Funktion eingeleitet Aufbau: In dieser Datei stehen die Befehle, die gestartet werden, wenn das Programm gestartet wird Int main()

Mehr

Datenstrukturen und Algorithmen

Datenstrukturen und Algorithmen Datenstrukturen und Algorithmen VO 708.031 Bäume robert.legenstein@igi.tugraz.at 1 Inhalt der Vorlesung 1. Motivation, Einführung, Grundlagen 2. Algorithmische Grundprinzipien 3. Sortierverfahren 4. Halden

Mehr

Grundlagen. Kapitel 1

Grundlagen. Kapitel 1 Grundlagen Dieses Kapitel umfasst grundlegende Fragen und Aufgaben zur Erstellung von C++-Programmen. Hierzu zählen auch das Inkludieren von Header-Dateien Eine Header-Datei beinhaltet Informationen, die

Mehr

Lernziele: Ausgleichstechniken für binäre Bäume verstehen und einsetzen können.

Lernziele: Ausgleichstechniken für binäre Bäume verstehen und einsetzen können. 6. Bäume Lernziele 6. Bäume Lernziele: Definition und Eigenschaften binärer Bäume kennen, Traversierungsalgorithmen für binäre Bäume implementieren können, die Bedeutung von Suchbäumen für die effiziente

Mehr

Vorkurs Informatik WiSe 15/16

Vorkurs Informatik WiSe 15/16 Konzepte der Informatik Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe, 16.10.2015 Technische Universität Braunschweig, IPS Inhaltsverzeichnis Suchen Binärsuche Binäre Suchbäume 16.10.2015 Dr. Werner

Mehr

Algorithmen & Datenstrukturen 1. Klausur

Algorithmen & Datenstrukturen 1. Klausur Algorithmen & Datenstrukturen 1. Klausur 7. Juli 2010 Name Matrikelnummer Aufgabe mögliche Punkte erreichte Punkte 1 35 2 30 3 30 4 15 5 40 6 30 Gesamt 180 1 Seite 2 von 14 Aufgabe 1) Programm Analyse

Mehr