Organisatorisches. Algorithmen und Datenstrukturen (für ET/IT) Programm heute. Definition Datenstruktur. Nächste Woche keine Vorlesung!

Ähnliche Dokumente
Algorithmen und Datenstrukturen (für ET/IT) Wiederholung: Ziele der Vorlesung. Wintersemester 2012/13. Dr. Tobias Lasser

Escape-Sequenzen. Dr. Norbert Spangler

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

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Einführung in die Programmierung Wintersemester 2008/09

Programmieren in C Einführung

Was ist Wirtschaftsinformatik?

Rechnerstrukturen WS 2012/13

Datentypen printf und scanf. Programmieren in C Dr. Michael Zwick

Zahlen und Zeichen (1)

Merke: Mit jedem zusätzlichen Bit verdoppelt sich die Anzahl der darstellbaren Zahlen bzw. Zustände

Algorithmen und Datenstrukturen (für ET/IT)

Arrays (Felder/Vektoren)

C++ Teil 5. Sven Groß. 13. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 18

6. Bearbeitung von Strings in C Bearbeitung von Strings in C

Grundlagen der Programmierung in C++ Arrays und Strings, Teil 1

4 ZEICHEN UND ZEICHENKETTEN

Skript. EDV Grundlagen

Wie werden die Barcode Prüfziffern berechnet?

Elementare Datentypen in C++

Darstellung von Informationen

Informatikgrundlagen I Grundlagen der Informatik I

Grundlagen der Informationstechnik

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

Advanced Programming in C

Advanced Encryption Standard. Copyright Stefan Dahler 20. Februar 2010 Version 2.0

Vorkurs Informatik WiSe 16/17

Thema 1 -- Fortsetzung. Computersystem, Informationsdarstellung

C++ Teil 6. Sven Groß. 27. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 14

Zeiger, Arrays und Strings in C und C++

Grundlagen der Informationstechnik

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

DAP2 Praktikum Blatt 1

Kapitel 05. Datentypen. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

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

3. Informationsdarstellung

Hydroinformatik I: Hello World

Programmieren in C / C++ Grundlagen C 2

Einführung in die STL

Praxis der Programmierung

Grundlagen der Informatik 11. Zeiger

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

Primitive Datentypen und Felder (Arrays)

Java Einführung Objekt-Datentypen und Strings. Kapitel 8 und 9

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

Zusammengehörige Daten struct. Strukturierte Datentypen und Funktionszeiger. Zugriff auf struct-elemente. Variablendeklarationen mit struct

Übung zur Wirtschaftsinformatik I. Zahlensysteme / Codierung

Inhalt. Zeichen und Zeichenketten (engl. Strings)

Motivation und Überblick

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

Kapitel 1. Programmierkurs. 1.2 Allgemeiner Aufbau des Computers. 1.1 Hallo, Computer...?

Algorithmen zur Datenanalyse in C++

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

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

Einführung in die Programmierung mit C++

Barcode- Referenzhandbuch

Einführung in die Programmierung Wintersemester 2014/15

Wertebereich und Genauigkeit der Zahlendarstellung

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

Zeichen. Datentyp char. char ch = 'x'; Page 1. Zeichen braucht man zur Verarbeitung von Texten, Namen, Bezeichnungen. Zeichencodes

Objektorientierte Programmierung. Kapitel 10: Strings

X = {x 1,x 2,...} sei ein Symbolalphabet eines Kodes. In diesem Kode sind card(x) = X Sachverhalte darstellbar

Counting - Sort [ [ ] [ [ ] 1. SS 2008 Datenstrukturen und Algorithmen Sortieren in linearer Zeit

Einführung in die Programmierung

Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften

Einleitung. Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ Kurzeinführung in C/C++

M. Graefenhan Übungen zu C. Blatt 3. Musterlösung

Einstieg in die Informatik mit Java

Voyager 9520/40 Voyager GS9590 Eclipse 5145 Kurzanleitung

5. Abgeleitete Datentypen

Programmieren in C/C++ und MATLAB

GI Vektoren

Einführung in die Programmierung Wintersemester 2011/12

C für Java-Programmierer

Zeichenketten (Strings) in C

Assoziative Container in C++ Christian Poulter

Einführung in die STL anhand eines ausgewählten Beispiels

Zusammengesetzte Datentypen -- Arrays und Strukturen

Rechnerorganisation. IHS 2015/2016 H.-D. Wuttke, K. Henke

Zeiger und dynamischer Speicher

Vektoren 105. array-qualifier static restrict const volatile array-size-expression assignment-expression * simple-declarator identifier

DAP2-Programmierpraktikum Einführung in C++ (Teil 1)

Wie entwerfe ich ein Programm?

C++-Zusammenfassung. H. Schaudt. August 18, 2005

Variablen. Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes

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

Praxis der Programmierung

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

Zusammenfassung des Handzettels für Programmieren in C

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

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Kap 9. Bitoperationen und -strukturen

Beispiele elementarer Datentypen Ganze Zahlen (integer) Unterbereiche Gleitkommazahlen Festkommazahlen

Einführung in die Programmierung Wintersemester 2008/09

Verschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes

Übungen zur Vorlesung EidP (WS 2015/16) Blatt 6

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

Dr. Monika Meiler. Inhalt

Variablen und Datentypen

Transkript:

Organisatorisches Algorithmen und Datenstrukturen (für ET/IT) Wintersemester 2012/13 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Nächste Woche keine Vorlesung! Es finden nächste Woche keine Vorlesungen statt! Mittwoch, 31. Oktober 2012: FVV (Fachschaftsvollversammlung) Donnerstag, 1. November 2012: Feiertag (Allerheiligen) Der Übungsbetrieb (Zentralübung, Montag 29. Oktober 2012, sowie die Fragestunden, Freitag, 2. November 2012) findet statt! 2 Programm heute Definition Datenstruktur 1 Einführung 2 Mathematische Grundlagen Mengen Abbildungen Zahldarstellung Boolesche Logik 3 Elementare Datenstrukturen Zeichenfolgen Felder Definition Datenstruktur (nach Prof. Eckert) Eine Datenstruktur ist eine logische Anordnung von Datenobjekten, die Informationen repräsentieren, den Zugriff auf die repräsentierte Information über Operationen auf Daten ermöglichen und die Information verwalten. Zwei Hauptbestandteile: Datenobjekte z.b. definiert über primitive Datentypen Operationen auf den Objekten z.b. definiert als Funktionen 4 5

Primitive Datentypen in C, C++ Bits und Bytes Natürliche Zahlen, z.b. unsigned short, unsigned long Wertebereich: bei n Bit von 0 bis 2 n 1 Operationen: +, -, *, /, %, <, ==,!=, > Bit 7 Bit 0 Ganze Zahlen, z.b. int, long Wertebereich: bei n Bit von 2 n 1 bis 2 n 1 1 Operationen: +, -, *, /, %, <, ==,!=, > Floating Point Zahlen, z.b. double, float Wertebereich: abhängig von Größe Operationen: +, -, *, /, <, ==,!=, > Logische Werte, bool Wertebereich: true, false Operationen: &&,,!, ==,!= Was ist mit Zeichen und Zeichenfolgen? 1 Byte = 8 Bit Bytes als Maßeinheit für Speichergrössen: 2 10 Bytes = 1024 Bytes = 1 kb, ein kilo Byte (großes B) 2 20 Bytes = 1 MB, ein Mega Byte 2 30 Bytes = 1 GB, ein Giga Byte 2 40 Bytes = 1 TB, ein Tera Byte 2 50 Bytes = 1 PB, ein Peta Byte 2 60 Bytes = 1 EB, ein Exa Byte Hinweis: auch Bits werden als Maßangabe verwendet, z.b. 16 Mbit oder 16 Mb (kleines b). 6 7 Bytes und ASCII ASCII Erweiterungen, Unicode Interpretation eines Bytes als Zeichen (anstatt Zahlen) z.b. ASCII Code 7 Bit ASCII Code..0..1..2..3..4..5..6..7..8..9..A..B..C..D..E..F 0.. nul soh stx etx eot enq ack bel bs ht lf vt ff cr so si 1.. dle dc1 dc2 dc3 dc4 nak syn etb can em sub esc fs gs rs us 2.. sp! # $ % & ( ) * +, -. / 3.. 0 1 2 3 4 5 6 7 8 9 : ; < = >? 4.. @ A B C D E F G H I J K L M N O 5.. P Q R S T U V W X Y Z [ \ ] ˆ 6.. a b c d e f g h i j k l m n o 7.. p q r s t u v w x y z { del ASCII verwendet nur 7 Bit von einem Byte enthält z.b. keine Umlaute (ä, ö, ü) oder Akzente (é, ç) es gibt verschiedene Erweiterungen von ASCII auf 8 Bit in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) belegt die Codes von 128-255 (bzw. 80-FF in hex) Unicode wurde als 16 Bit Codierung eingeführt erste 128 Zeichen stimmen mit ASCII überein die nächsten 128 Zeichen mit ISO Latin-1 danach z.b. kyrillische, arabische, japanische Schriftzeichen UTF-8 ist eine Mehrbyte-Codierung von Unicode (1-6 Bytes) Code-Länge wird durch die ersten Bits codiert 8 9

Zeichen und Strings Repräsentation eines ASCII Zeichens in C, C++: char Zeichen-Literale in einfachen Anführungszeichen Beispiele: A, u, D char zeichen = A ; Vorsicht bei nicht-ascii Zeichen! Repräsentation einer Zeichenfolge? (Englisch: String) String-Literale in doppelten Anführungszeichen Beispiel: AuD in C gespeichert als Folge von Zeichen, terminiert durch \0 'A' 'u' 'D' '\0' Strings in C Strings in C: dargestellt als Array von chars fester Länge: char test_ string [8]; C Arrays werden indiziert von 0! (hier also von 0 bis 7) immer genug Platz für terminierendes \0 einplanen! dargestellt als Array von chars dynamischer Länge (mittels Pointer): char * test_ string ; Speicher muss explizit über malloc/free angefordert/freigegeben werden! Größe des Arrays komplett in eigener Verantwortung! sehr fehleranfällig, bitte vermeiden wenn möglich! 10 11 Programm: Strings in C Strings in C - Operationen # include <stdio.h> # include <string.h> int main () { char test_ string [5] = " test "; // Laenge ist 4+1 printf (" test_string : %s\n", test_string ); char AuD_ string [4]; AuD_ string [0] = A ; AuD_ string [1] = u ; AuD_ string [2] = D ; AuD_ string [3] = \0 ; // terminierende 0 printf (" AuD_string : %s\n", AuD_string ); printf (" Laenge : %lu\n", strlen ( AuD_string ) ); Operationen auf C Strings: definiert in string.h strlen(str): liefert Länge des Strings str strcpy(ziel, quelle): kopiert String quelle nach ziel ziel wird als groß genug vorausgesetzt! strcat(ziel, quelle): hängt String quelle an String ziel hinten an ziel wird als groß genug vorausgesetzt! strcmp(str1, str2): vergleicht die Strings str1 und str2 ist das Ergebnis 0, sind die Strings gleich return 0; 12 13

Programm: Strings in C (Fortsetzung) Strings in C - Probleme # include <stdio.h> # include <string.h> int main () { char test_string [] = " test "; char AuD_string [] = " AuD "; char resultat_ string [20]; // gross genug strcpy ( resultat_string, AuD_ string ); printf (" strcpy Ergebnis : %s\n", resultat_string ); int vergleich = strcmp ( resultat_string, AuD_ string ); printf (" strcmp Ergebnis : %d\n", vergleich ); Probleme mit C Strings: terminierende \0 wird vergessen Zuweisung nach Initialisierung schwierig Größenvoraussetzungen werden nicht automatisch geprüft Verwaltung von Strings dynamischer Länge eine Quelle der häufigsten Programmierfehler aber gerade Strings dynamischer Länge werden gebraucht! strcat ( resultat_string, test_ string ); printf (" strcat Ergebnis : %s\n", resultat_string ); return 0; 14 15 Strings in C++ Strings in C++: dargestellt als std::string std :: string test_ string ; Zugriff wie bei C Strings über [] Operator, indiziert von 0 std :: string test_string = " test "; test_ string [1] = a ; automatische Verwaltung der Größe nicht terminiert mit \0, sondern speichert Größe direkt Operationen direkt in std::string eingebaut Programm: Strings in C++ # include < iostream > # include < string > using namespace std ; int main () { string test_ string = " test "; cout << " test_ string : " << test_ string << endl ; string AuD_ string = " BvE "; AuD_ string [0] = A ; AuD_ string [1] = u ; AuD_ string [2] = D ; cout << " AuD_ string : " << AuD_ string << endl ; cout << " Laenge : " << AuD_ string. length () << endl ;... 16 17

Programm: Strings in C++ (Fortsetzung) Programm heute... string resultat_ string ; 1 Einführung resultat_ string = AuD_ string ; cout << " Kopieren : " << resultat_ string << endl ; bool vergleich = ( resultat_ string == AuD_ string ); cout << " Vergleich : " << vergleich << endl ; resultat_ string = resultat_ string + test_ string ; // oder kuerzer : // resultat_ string += test_ string ; cout << " Anhaengen : " << resultat_ string << endl ; return 0; 2 Mathematische Grundlagen Mengen Abbildungen Zahldarstellung Boolesche Logik 3 Elementare Datenstrukturen Zeichenfolgen Felder 18 19 Definition Feld Feld als sequentielle Liste Definition Feld Ein Feld A ist eine Folge von n Datenelementen (d i ) i=1,...,n, mit n N 0. A = d 1, d 2,..., d n Die Datenelemente d i sind beliebige Datentypen (z.b. primitive). Beispiele: A sind die natürlichen Zahlen von 1 bis 10, aufsteigend geordnet: A = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 Repräsentation von Feld A als sequentielle Liste (oder Array) feste Anzahl n von Datenelementen zusammenhängend gespeichert in linearer Reihenfolge mit Index Zugriff auf i-tes Element über Index i: A[i]... Feld A: A[n-1] A[n-2] A[2] A[1] A[0] Ist n = 0, so ist das Feld leer. 20 21

Beispiel sequentielle Liste Eigenschaften sequentielle Liste Feld A=0,8,15, Länge 3 Beispiel in C: Beispiel in C++: int A [3]; A [0] = 0; A [1] = 8; A [2] = 15; std :: vector <int > A (3); A [0] = 0; A [1] = 8; A [2] = 15; Feld A mit Länge n als sequentielle Liste (Array) Vorteile: direkter Zugriff auf Elemente in konstanter Zeit mittels A[i] sequentielles Durchlaufen sehr einfach Nachteile: Verschwendung von Speicher falls Liste nicht voll belegt Verlängern der sequentiellen Liste sehr aufwendig Hinzufügen und Löschen von Elementen sehr aufwendig 22 23 C Beispiel: sequentielles Durchlaufen Verlängern der sequentiellen Liste int felda [5]; int i; // sequentielles Durchlaufen printf (" felda : "); for ( i = 0; i < 5; ++ i) { felda [ i] = i * i; printf ("%d ", felda [i ]); printf ("\n"); Gegeben: Feld A, Länge n+1, als sequentielle Liste Gewünscht: Feld A erweitert auf Länge n+2 neuen Speicher der Größe n+2 reservieren alte Liste in neuen Speicher kopieren... Feld A: A[n] A[n-1] A[2] A[1] A[0] Ausgabe: felda : 0 1 4 9 16 neues Feld A: A[n+1] A[n] A[n-1]... A[2] A[1] A[0] 24 25

C Beispiel: Verlängern der Liste int neuesfelda [6]; // altes Feld kopieren : for ( i = 0; i < 5; ++ i) neuesfelda [i] = felda [i]; // neues Element : neuesfelda [5] = 25; Ausgabe: // neuesfelda ausgeben : printf (" neuesfelda nach Verlaengern : "); for ( i = 0; i < 6; ++ i) printf ("%d ", neuesfelda [i ]); printf ("\n"); neuesfelda nach Verlaengern : 0 1 4 9 16 25 Löschen von Element aus Liste Gegeben: Feld A, Länge n, als sequentielle Liste Gewünscht: Element i aus Feld A löschen Element i entfernen Listenelemente nach i umkopieren 25 16 9 4 1 0-25 16 9 4 1 26 27 C Beispiel: Löschen von Element Ausgabe: // loesche erstes Element for ( i = 1; i < 6; ++ i) neuesfelda [i -1] = neuesfelda [ i]; // setze letztes Element auf -1 neuesfelda [5] = -1; // neuesfelda ausgeben : printf (" neuesfelda nach Loeschen : "); for ( i = 0; i < 6; ++ i) printf ("%d ", neuesfelda [i ]); printf ("\n"); neuesfelda nach Loeschen : 1 4 9 16 25-1 Einfügen von Element in Liste Gegeben: Feld A, Länge n, als sequentielle Liste Gewünscht: neues Element in Feld A an Stelle i einfügen Listenelemente nach i umkopieren Element i einfügen - 25 16 9 4 1 25 16 9 8 4 1 28 29

C Beispiel: Einfu gen von Element C++ Beispiel: sequentielle Listen vector < int > felda (5); // neues Element (8) an 3. Stelle einfuegen for ( i = 5; i > 2; --i ) neuesfelda [ i ] = neuesfelda [i -1]; neuesfelda [2] = 8; // sequentielles Durchlaufen for ( int i = 0; i < 5; ++ i ) { felda [ i ] = i * i ; // neuesfelda ausgeben : printf ( " neuesfelda nach Einfuegen : " ); for ( i = 0; i < 6; ++ i ) printf ( " % d ", neuesfelda [ i ]); printf ( " \ n " ); // Verlaengern der Liste felda. resize (6); felda [5] = 25; // loesche erstes Element felda. erase ( felda. begin () ); felda [5] = -1; Ausgabe: neuesfelda nach Einfuegen : 1 4 8 9 16 25 // neues Element (8) an 3. Stelle einfuegen felda. insert ( felda. begin () + 2, 8); 30 Ausblick: Anwendung von sequentiellen Listen 31 Zusammenfassung 1 Einfu hrung 2 Mathematische Grundlagen Mengen Abbildungen Zahldarstellung Boolesche Logik 3 Elementare Datenstrukturen Zeichenfolgen Felder in 2D und 3D Bildern! 32 33