Arrays (Eigenschaften)

Slides:



Advertisements
Ähnliche Präsentationen
Einführung in die Programmiersprache C/C++
Advertisements

Imperative Programmierung
Strukturen in C Spelz, Sievers, Bethke.
Funktionen, Felder und Parameter-übergabe
Forschungszentrum caesar
Hochschule Fulda – FB ET Sommersemester 2010
Variablen und Datentypen
der Universität Oldenburg
Sequentielle Liste - Array
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
Dynamisches Array als "verkettete Liste". Ein Vergleich.
Polymorphie (Vielgestaltigkeit)
Objekte und Arbeitsspeicher
V AdresseWert public static void main(...){ int[] v; v=new int[2]; } Was veranlasst diese Anweisung im Arbeitsspeicher ? Es wird im Arbeitsspeicher.
Dynamischer Speicher. In einer Funktion wird z.B. mit der Deklaration int i; Speicher auf dem sogenannten Stack reserviert. Wenn die Funktion verlassen.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen Halbzeit: Was haben wir bisher gelernt? Prof. Th. Ottmann.
Perl-Grundlagen Teile der Präsentation von A. Grupp,
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 10 Claudio Moraga; Gisbert Dittrich FBI Unido
Imperative Programmierung
DVG Felder1 Felder. DVG Felder 2 Was sind Felder? Felder sind Reihungen aus endlich vielen Elementen gleichen Typs. Z.B.: Vektoren : (x.
Arrays,Strings&Pointer in C/C++
Einführung MySQL mit PHP
Java programmieren mit JavaKara
Programmieren in C Zeichen-/Stringfunktionen Dynamischer Speicher
Einführung in die Programmiersprache C 3.Tag Institut für Mathematische Optimierung - Technische Universität Braunschweig.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Einführung in die Programmierung
Einführung in die Programmiersprache C 4
Vom Umgang mit Daten. public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i]
Variablenkonzept Klassisch, in Java Basistyp
Arrays / Felder Themen: Arrays / Felder / Vektoren Was soll das eigentlich? Erstellen von Arrays Arrays auslesen. Wie sie verwaltet werden.
Informatik II Grundlagen der Programmierung Programmieren in C Benutzerinteraktion / Ein- und Ausgabe Hochschule Fulda – FB ET Sommersemester
Programmieren in C Grundlagen C 2
PHP: Operatoren und Kontrollstrukturen
Programmiervorkurs WS 2014 Referenzdatentypen
5. Zeiger und komplexe Datenstrukturen
A) Erklären Sie den Datentyp char. b) Erklären Sie den Datentyp Struct c) Erklären Sie die Wirkungsweise des Operators & bei Anwendung im Zusammenhang.
Java-Kurs - 3. Übung Hausaufgabe Arrays For-Schleifen.
Sammlungsklassen Array.
(Syntax, Strings/Zahlen, Variablen, Arrays)
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Felder (Arrays).
Funktionen. Aufgabe : Eingabe zweier Zahlen ---> Minimum bestimmen Dann nochmals Eingabe zweier Zahlen ---> Minimum bestimmen.
Pointer. Grundsätzliches: Im Arbeitsspeicher werden Daten gespeichert. Um auf die Daten eindeutig zugreifen zu können, werden diesen Daten Adressen zugeordnet.
Funktionen, Felder und Parameter- übergabe. Funktionsaufruf mit Feld als Parameter: Parameter = Name des Feldes.
TRUE und FALSE in C Der Wert 0 steht für FALSE Jeder von 0 verschiedene Wert steht für TRUE FALSE wird als 0 dargestellt TRUE wird als 1 dargestellt.
Variablen und Operatoren. C++ Teil 2: Grundstrukturen Variablen Operatoren Kontrollstrukturen Funktionen Header-Dateien Pointer und Referenzen.
Tutorium Software-Engineering SS14 Florian Manghofer.
Pointer, Arrays und verkettete Listen. Mehrdimensionale Arrays  Pointer auf ein Array von Pointern  int32 **matrix = new int32*[3];  matrix: Zeiger.
Funktionen (Zweck und Eigenschaften) Funktionen sind Unterprogramme, die einen bestimmten Zweck erfüllen Sie zerlegen Probleme in kleine, abgeschlossene.
Inhalte der Übungen 1.Grundlagen, Ein- und Ausgabe 2.Kontrollstrukturen (Projekt 1) 3.Funktionen 4.Zeiger, Felder (Projekt 2) 5.Strings, Strukturen 6.Fileverarbeitung.
Strukturen (Eigenschaften) Strukturen dienen zur Zusammenfassung mehrerer Komponenten verschiedener Typen zu einer Einheit, die dann mit gemeinsamen Namen.
Pointer. * und &  Bei der Definition int var1; ○ // „normale“ Variable int *var2; ○ // Zeiger auf einen Integer int *var2 = NULL; ○ // … incl. Initialisierung.
Konstruktoren.
Programmieren in C Zeichen-/Stringfunktionen Dynamischer Speicher
Datentypen: integer, char, string, boolean
Datentypen: integer, char, string, boolean
Reihungen Prof. Dr. Christian Böhm In Zusammenarbeit mit Gefei Zhang
Von Cem, Maurice und lars
Arrays in Java Ein Array ist eine Variable, die aus einer An-zahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
Arrays in Java Ein Array ist eine Variable, die aus einer An-zahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
Arrays in C Ein Array ist eine Variable, die aus einer Anzahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
Implementieren von Klassen
Felder in der Informatik
Schleifen Datenfelder (Arrays) Verzweigungen
 Präsentation transkript:

Arrays (Eigenschaften) Arrays oder Felder dienen zur Speicherungen mehrer Variablen des gleichen Typs Sie belegen einen zusammenhängenden Speicherblock Alle Variablen werden über einen gemeinsamen Namen (dem Feldnamen) und einen Index (beginnend bei 0) angesprochen

Arraydefinition datentyp name[konstante]; Beispiel: char buchst[26]; Eindimensionales Array vom Typ char mit 26 Elementen. Die Elemente können nun über buchst[0] bis buchst[25] angesprochen werden. Bei der Definition eines Arrays muss die Größenangabe eine Konstante sein.

Größe eines Arrays - sizeof Die Größe (Speicherbedarf) eines Feldes ergibt sich aus Anzahl der Elemente * Größe eines Elementes Die Größe von Datenelementen kann mit dem Operator sizeof ermittelt werden. Beispiel: double werte[1000]; printf(“%d“, sizeof(werte)); liefert 8000

Keine Indexprüfung Vorsicht: C prüft nicht eine allfällige Indexüberschreitung. Beispiel: int a[100]; Nach der obigen Felddefinition sind Zuweisungen der Form a[100] = 20; a[200] = 30; a[-3] = 50; möglich! Man überschreibt dabei fremde Speicherbereiche. Bei einem Array mit n Elementen stehen die Elemente mit den Indizes 0, 1, ..., n-1 zur Verfügung. Ein Feld mit n Elementen kann sauber wie folgt abgearbeitet werden: for(i=0; i<n; i++) a[i] = ...;

Arrays Beispiel 1 Ein Feld von 100 Integerwerten ist mit zufälligen dreistelligen Zahlen zu füllen. Anschließend ist der größte Zufallswert zu bestimmen und anzuzeigen. int a[100], i, max; for(i=0; i<100; i++) a[i] = rand()%900 + 100; max = a[0]; for(i=1; i<100; i++) if(a[i] > max) max = a[i]; printf(“Der groesste Wert des Feldes ist %d\n.“, max);

Übung 5_1 Simulieren Sie eine Wurfserie von 10000 Würfen mit je drei Würfeln. Die absoluten Häufigkeiten der Augenzahlen sind in einem geeigneten Feld zu speichern. Anschließend ist die Häufigkeitsverteilung graphisch darzustellen.

Initialisierung eines Arrays Ein Array kann bei der Definition auch initialisiert werden. In diesem Fall kann die Größenangabe entfallen. Dann ist die Anzahl der Feldelemente gleich der Anzahl der Initialisierer: int a[] = {1,4,9,16,25,36,49,64,81,100}; Werden zuwenig Initialisierer angegeben, so werden die restlichen Elemente mit Nullen aufgefüllt. int b[5] = {1,2}; erzeugt folgendes Feld: b[0]=1; b[1]=2; b[2]=0; b[3]=0; b[4]=0;

Arrays und Zeiger 1 Der Name eines Arrays ist ein konstanter Zeiger auf das erste Feldelement. int a[5] = {1,2,3,4,5}; *a bedeutet nichts anderes als a[0] a a[0] a[1] a[2] a[3] a[4]

Zeigeroperationen Folgende Operationen sind mit Zeigern erlaubt: Addition eines Integerwertes n (nicht mit void-Pointern): Erhöhung der Adresse um n * sizeof(Zeigertyp) Subtraktion eines Integerwertes n (nicht mit void-Pointern): Verminderung der Adresse um n * sizeof(Zeigertyp) Subtraktion zweier Zeiger des gleichen Typs (nicht mit void-Pointern) Vergleiche zweier Zeiger mit <, <=, >, >=, ==, !=

Arrays und Zeiger 2 Allgemein gilt also: a[i] ist nichts anderes als *(a+i) a a+1 a+2 a+3 a+4 a[0] a[1] a[2] a[3] a[4]

Arrays und Zeiger 3 Das folgende Beispiel addiert die in einem Array abgespeicherten Werte mit Hilfe von Zeigerzugriffen: double f[100], *pd, summe = 0.0, n = 100; // Initialisierung des Feldes pd = f; // pd zeigt auf f[0] while(n--) { summe += *pd; pd++; }

Felder als Funktionsparameter Bei der Übergabe eines Feldes an eine Funktion wird immer nur die Anfangsadresse des Feldes übergeben. Konsequenz: auf Grund der Adresse kann die Funktion nicht entscheiden, wie groß das Feld ist. Es ist also immer auch die Länge des Feldes mitzuübergeben: int f[100]; function(f, 100); function(f, sizeof(feld)/sizeof(feld[0])); /*----Äquivalente Funktionsprototypen----*/ void function(int *a, int n); void function(int a[], int n);

Arrays Beispiel 2 (Bubblesort) Schreiben Sie eine Funktion, die ein Integerfeld von n Elementen aufsteigend sortiert. Verwenden Sie den Sortieralgorithmus Bubblesort. void bubblesort(int *a, int n) { int i, j, h; for(i=1; i<n; i++) for(j=0; j<n-i; j++) if(a[j]>a[j+1]) { h = a[j]; a[j] = a[j+1]; a[j+1] = h; } }

Zweidimensionale Arrays Bei eindimensonalen Arrays wird jedes Element über einen Index angesprochen, bei m-dimensionalen Array über m Indizes. Zweidimensionale Arrays (Tabellen oder Matrizen): datentyp arrayname[zeilen][spalten]; Beispiel: int tabelle[5][4]; Die Abarbeitung erfolgt über verschachtelte for-Schleifen: int z, s; for(z=0; z<5; z++) for(s=0; s<4; s++) tabelle[z][s] = z + s;

Zweidimensionale Arrays Ein zweidimensionales Array ist prinzipiell ein eindimensionales Array, dessen Elemente wieder eindimensionale Arrays (die Zeilen der Tabelle) sind. Dies sieht man schön bei folgender Art der Initialisierung: int f[2][3] = { {1,2,3} , {4,5,6}}; 1 2 3 f[0] = {1,2,3}; 4 5 6 f[1] = {4,5,6};

Zweidimensionale Arrays Treten zweidimensionale Arrays als formale Parameter auf, so sind folgende Funktionsprototypen äquivalent: void ausgabe(int matrix[8][10], int zeilen); void ausgabe(int matrix[][10], int zeilen); void ausgabe(int (*matrix)[10], int zeilen); Die dritte Schreibweise verdeutlicht, dass es sich bei matrix um einen Zeiger auf int-Arrays der Größe 10 handelt. Mit matrix++ wird um die Größe eines Feldes der Länge 10, also um eine Zeile weitergeschaltet.

Übung 5_2 Eine Matrix der maximalen Größe 20 mal 20 ist mit Zufallswerten (1-10) zu füllen und anschließend auszugeben. Danach sind die Zeilen der Matrix aufsteigend nach ihrer Zeilensumme zu sortieren. Die sortierte Matrix ist wieder auszugeben.

Strings (Eigenschaften) Strings (Zeichenketten) sind char-Arrays, deren Inhalt mit dem Zeichen ‘\0‘ (binäre Null abgeschlossen ist. Stringkonstante sind mit Anführungszeichen “...“ zu klammern, z.B. “Ich lerne C“ Es gibt einen String ohne Inhalt, den Leerstring ““

Deklaration und Initialisierung char s[5] = “abcd“; ‘a‘ ‘b‘ ‘c‘ ‘d‘ ‘\0‘ Hier wird Speicherplatz für 5 Charakters bereitgestellt. char *s = “abcd“; Hier wird nur ein Zeiger auf char definiert, der (zunächst) auf das Stringliteral “abcd“ zeigt.

sprintf, sscanf Die Bibliotheksfunktionen sprintf und sscanf gestatten formatierte Schreibe- und Lesefunktionen auf bzw. von Strings int sprintf( char *buffer, const char *format [, argument] ... ); int sscanf( const char *buffer, const char *format [, argument ] ... ); Prototypen in stdio.h Der erste Parameter gibt dabei den String an, auf den geschrieben bzw. von dem gelesen wird.

Konsole IO mit Strings char * gets(char *s); <stdio.h> dient zum Lesen eines Strings von stdin Dabei wird das abschließende ‘\n‘ als ‘\0‘ im String gespeichert. int puts(char *s); <stdio.h> dient zum Schreiben eines Strings auf stdout Dabei wird das abschließende ‘\0‘ als ‘\n‘ geschrieben.

Umgehung von scanf Mit Hilfe der vorgestellten Funktionen kann man nun das unsichere scanf umgehen. Das folgende Beispiel liest 3 Integers und setzt sie zu einer Uhrzeit im Format hh:mm:ss zusammen: char ein[130], zeit[31]; // Eingabestring char *text = “Uhrzeit“; int h, m, s; printf(“Eingabe im Format h,m,s --> „); gets(ein); test = sscanf(ein,“%2d,%2d,%2d“, &h, &m, &s); // Weitere Prüfungen sprintf(zeit, “%s: %02d:%02d:%02d“, text,h,m,s); puts(zeit);

Wichtige Stringfunktionen 1 In string.h sind die Prototypen vieler für das Arbeiten mit Strings nützlicher Funktionen definiert. Z.B: size_t strlen( const char *string ); Bestimmt die inhaltliche Länge von string char *strcpy( char *strDestination, const char *strSource ); Kopiert den String strSource nach strDestination char *strcat( char *strDestination, const char *strSource ); Hängt den String strSource an strDestination an

Wichtige Stringfunktionen 2 int strcmp( const char *string1, const char *string2 ); Vergleicht die Strings string1 und string2 lexikographisch. Rückgabewert < 0, wenn string1 < string2 Rückgabewert 0, wenn string1 = string2 Rückgabewert > 0, wenn string1 > string2 Variante: stricmp char *strstr( const char *string, const char *strCharSet ); Prüft, ob der String strCharSet im String string enthalten ist und liefert die Adresse der ersten Übereinstimmung, sonst NULL

Übung 5_3 Schreiben Sie die Funktionen strlen, strcat strcmp selbst sowie eine Funktion strreverse und testen Sie in einem geeigneten Hauptprogramm.

Übung 5_4 Es sind maximal 10 Zeilen Text (max 80 Zeichen Länge) von stdin zu lesen, zu sortieren und wieder auszugeben. Weiters sind jene Strings nocheinmal auszugeben, die einen einzulesenden Teilstring enthalten.