V AdresseWert... 0120... public static void main(...){ int[] v; v=new int[2]; } Was veranlasst diese Anweisung im Arbeitsspeicher ? Es wird im Arbeitsspeicher.

Slides:



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

Imperative Programmierung
Imperative Programmierung
DVG Einfache Klassen Einfache Klassen. DVG Einfache Klassen 2 Strukturen Beispiel: Personendaten bestehen aus –String name –String vorname.
Funktionen, Felder und Parameter-übergabe
(kleine!) Java Einführung Mittwoch, Heute Ziel: erstes Java-Programm erstellen Von der Aufgabenstellung bis zur Lösung Grundlagen Einfache.
der Universität Oldenburg
Sequentielle Liste - Array
Indirekte Adressierung
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
Java: Grundlagen der Sprache
Vererbung.
Datentyp- umwandlung. Literale sind: Bezeichner mit einem festen Wert wie z.B:
Klassenvariable (auch Klassendaten bzw. statische Attribute genannt) und statische Methoden.
Strukturen. In einer Struktur kann eine beliebige Anzahl von Komponenten (Daten) mit unterschiedlichen Datentypen (im Gegensatz zu Feldern) zusammengefaßt.
ARRAY oder FELD oder VEKTOR
Dynamischer Speicher. Ein Vergleich aus dem täglichen Leben...
Ein Beispiel in Java.
Dynamisches Array als "verkettete Liste". Ein Vergleich.
Dynamischer Speicher und Struktur
Pointer. Grundsätzliches: Im Arbeitsspeicher werden Daten gespeichert. Um auf die Daten eindeutig zugreifen zu können, werden diesen Daten Adressen zugeordnet.
Klassenvariable. Da man für jede Kuh bzw. jede Henne auf dem Markt den gleichen Preis für ein Liter Milch, bzw. den gleichen Preis für ein Ei bekommt,
Konstruktoren.
Objekte werden als Adressen (Referenzen) übergeben. Dies führt manchmal zu unerwarteten Ergebnissen...
Parameterübergabe von zweidimensionalen Feldern in Funktionen.
WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
Polymorphie (Vielgestaltigkeit)
Assoziationen (Beziehungen). Zwischen Objekten kann es eine Beziehung geben.
Polymorphie (Vielgestaltigkeit)
Objekte und Arbeitsspeicher
FOR Anweisung.
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
Dynamischer Speicher. In einer Funktion wird z.B. mit der Deklaration int i; Speicher auf dem sogenannten Stack reserviert. Wenn die Funktion verlassen.
DO...WHILE Anweisung.
ARRAY oder FELD oder VEKTOR
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, 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
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Arrays,Strings&Pointer in C/C++
DVG Einfache Klassen 1 Einfache Klassen. 2DVG Einfache KlassenStrukturen Beispiel: Personendaten bestehen aus String name String name.
Wichtige Fachausdrücke in C
Java programmieren mit JavaKara
Einführung in die Programmiersprache C 3.Tag Institut für Mathematische Optimierung - Technische Universität Braunschweig.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut.
Vom Umgang mit Daten. public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i]
C-Einstieg. Agenda 1Vorbereitung 2Aufbau eines Programms 2.1Header 2.2 Methoden 2.3Main 3Datentypen & Variablen 4Operatoren(+, -, *, /) 5Logik 5.1IF 5.2Switch.
Programmierung 1. Einführung Seite 1
Variablenkonzept Klassisch, in Java Basistyp
Arrays / Felder Themen: Arrays / Felder / Vektoren Was soll das eigentlich? Erstellen von Arrays Arrays auslesen. Wie sie verwaltet werden.
Programmieren in C Grundlagen C 2
Programmiervorkurs WS 2014/15 Methoden
Programmiervorkurs WS 2014 Referenzdatentypen
CuP - Java Achte Vorlesung Entspricht ungefähr Kapitel 4.1 des Skriptums Montag, 28. Oktober 2002.
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
Java-Kurs - 3. Übung Hausaufgabe Arrays For-Schleifen.
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Erweiterte Zuweisungskompatibilität. Wie kann man Objekte verschiedener Klassen einer Klassenhierarchie einander zuweisen ?
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.
Tutorium Software-Engineering SS14 Florian Manghofer.
C++ FÜR cOMPUTERSPIELENTWICKLER
Pointer. * und &  Bei der Definition int var1; ○ // „normale“ Variable int *var2; ○ // Zeiger auf einen Integer int *var2 = NULL; ○ // … incl. Initialisierung.
Konstruktoren.
ARRAY oder FELD oder VEKTOR
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.
 Präsentation transkript:

v AdresseWert public static void main(...){ int[] v; v=new int[2]; } Was veranlasst diese Anweisung im Arbeitsspeicher ? Es wird im Arbeitsspeicher an einer bestimmten Adresse Platz für das Objekt erzeugt, auf das v zeigen soll. AdresseWert ? ? ? ? ? ? Aus Platzgründen wird hier der Arbeitsspeicher auf 2 Tabellen verteilt, obwohl eigentlich der ganze Speicher durch eine Tabelle dargestellt wird! null Auf die (Anfangs)Adresse dieses Speicherbereichs hat der Programmierer keinen Einfluß. Diese legt der Interpreter bzw. Programmlader fest. ? ? Wie viel Byte Speicher werden reserviert? (Antwort nächste Folie)

Beispiel

Dieses zweidimensionale Feld besteht aus 3 Zellen. Jede dieser Zellen ist wiederum ein eindimensionales Feld, das aus 4 Zellen besteht.

int v[3][4]; Datentyp der Elemente: Jede Zelle hat den gleichen Datentyp Variablenname des Feldes Anzahl der Elemente in der 1. Dimension: Das Feld besteht aus 3 eindimensionalen Feldern. Anzahl der Elemente in der 2. Dimension: Jede Zelle des eindimensionalen Feldes besteht wiederum aus 4 Zellen.

int v[3][4]; v[1][2] = 13; Welche Stelle wird verändert ? v[0] v[1] v[2] besteht hier z.B. aus:

int v[3][4]; v[1][2] = 13; Wieviel Speicher benötigt die Variable v ? = 3 · 4 · Speicherbedarf (int)

Initialisierung bei der Deklaration int v[3][4]={{12,11,37,89}, {43,27,42,67}, {49,52,73,69} }; v[0] v[1] v[2]

Problem: In einem Formular (z.B. EK-Steuerformular) sollen alle (eindimensionalen) Felder ausgefüllt werden. Dies geschieht durch eine Eingabefunktion, von der man nicht weiß, ob sie die Eingabe mit ' \0 ' beendet.

Alle Zellen aller Felder vorher mit '\0' auffüllen ! Frage: Was ist zu tun, dass zu 100 % garantiert ist, dass am Feldende aller Felder ' \0 ' steht ?

Warum ist dies bei einem grossen Formular für den Programmierer sehr aufwendig ? Weil man dazu bei z.B. 100 eindimensionalen Feldern 100 FOR-Anweisungen benötigt.

Wie kann man dies programmtechnisch einfacher machen ? Mit einem zweidimensionalen Feld.

Aufgabe : Schreiben Sie ein Programm, das alle Zellen in einem zweidimensionalen Feld mit '\0' belegt.

const int zanz = 3; const int sanz = 40; int main(){ int i, j; char formular [zanz][sanz]; for (i=0; i<zanz; i++){ for (j=0; j<sanz; j++){ formular[i][j] = '\0'; }

Aufgabe : Genauso wie in einem vorigen Programm soll der Vorname und der Nachname einer Person in einem Programm eingegeben (mit scanf( " %s ",...)) und gespeichert werden.Daraus sollen dann die Initialen berechnet, gespeichert und ausgegeben werden. Dies soll durch ein zweidimensionales Feld realisiert werden.

const int zanz = 3; const int sanz = 40; int main(){ char formular [zanz][sanz];

printf("Vorname eingeben\n"); scanf("%s", &formular[0]); printf("Nachname eingeben\n"); scanf("%s", &formular[1]); // Initialen schreiben formular[2][0] = formular[0][0]; formular[2][1] = formular[1][0]; formular[2][2] = '\0';

printf("Vorname = %s\n", formular[0]); printf("Nachname = %s\n", formular[1]); printf("Initialen = %s\n", formular[2]); return 0; } // Ende main War diese Anweisung in der letzten Folie unbedingt nötig ? formular[2][2] = '\0';

formular[2][2] = '\0'; printf("Initialen = %s\n", formular[2]); Ja, wenn die Ausgabe wie hier mit der Formatierung %s gemacht wird !

for(i=0;i<2;i++) printf("%c",formular[2][i]); Bei Ausgabe mit printf("%c",... ) ist dies dagegen nicht nötig. Wie gibt man aber die Zeichenkette damit aus ? Der Programmierer muß aber die Länge (=2) der Initialen- Zeichenkette kennen

Aufgabe : In einem Probeformular sollen folgende Voreinträge für Vornamen, Nachnamen und Initialen (zu Demo-Zwecken) gemacht werden: Erika Mustermann Wie wird das programmtechnisch gemacht ?

int main(){ char f[3][13]= {{'M','u','s','t','e','r','m','a','n','n'}, {'E','r','i','k','a'}}; // oder: char f[3][13]={"Mustermann","Erika"}; Die Zeichenketten "Mustermann" und "Erika" werden jeweils automatisch durch '\0' beendet. Da die Zelle f[2] hier nicht angegeben wurde, wird für sie automatisch der leere String "" (eine Zeichenkette die nur aus der '\0' besteht) angenommen. Mustermann \0 ?? Erika ??????? ???????????? f[0] f[1] f[2] Welche Werte haben die Zellen des Feldes f ?

Dreidimensionale Felder

Merke: In der Programmiersprache C fasst man ein dreidimensionales Feld als eindimensionales Feld auf, dessen einzelne Zellen (Elemente) aus zweidimensionalen Feldern bestehen.

int v[3][4][5]; v[0][2][3] = 18; 18 Welche Stelle wird verändert ?

int v[3][4][5]; v[0][2][3] = 18; Wieviel Speicher benötigt die Variable v ? = 3 · 4 · 5 · Speicherbedarf (int)

Vierdimensionales Feld Beispiel

Temperatur-Erfassung an einer Wetterstation über folgende Zeitdauer: - 10 Jahre - Monatlich - Täglich - Stündlich

Wie kann man diese Daten "geschickt" anordnen, so dass leicht darauf zugegriffen werden kann ?

double v[10][12][31][24]; t = v[2][11][30][23]; Wieviel Grad hat es im 3. Jahr am Jahreswechsel (Sylvester)? Wie weist man dies der Variablen t zu ? Wieviel Speicher benötigt die Variable v ? = 10·12·31·24 · Speicherbedarf (double)