Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Gomeric Gerstel Geändert vor über 11 Jahren
1
v AdresseWert... 0120... 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... 0470 ? ? ? ? ? ? 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)
2
Beispiel
3
Dieses zweidimensionale Feld besteht aus 3 Zellen. Jede dieser Zellen ist wiederum ein eindimensionales Feld, das aus 4 Zellen besteht.
4
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.
5
int v[3][4]; 49527369 43274267 12113789 v[1][2] = 13; Welche Stelle wird verändert ? v[0] v[1] v[2] besteht hier z.B. aus:
6
int v[3][4]; 49527369 43271367 12113789 v[1][2] = 13; Wieviel Speicher benötigt die Variable v ? = 3 · 4 · Speicherbedarf (int)
7
Initialisierung bei der Deklaration int v[3][4]={{12,11,37,89}, {43,27,42,67}, {49,52,73,69} }; 49527369 43274267 12113789 v[0] v[1] v[2]
8
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.
9
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 ?
10
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.
11
Wie kann man dies programmtechnisch einfacher machen ? Mit einem zweidimensionalen Feld.
12
Aufgabe : Schreiben Sie ein Programm, das alle Zellen in einem zweidimensionalen Feld mit '\0' belegt.
13
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'; }
14
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.
15
const int zanz = 3; const int sanz = 40; int main(){ char formular [zanz][sanz];
16
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';
17
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';
18
formular[2][2] = '\0'; printf("Initialen = %s\n", formular[2]); Ja, wenn die Ausgabe wie hier mit der Formatierung %s gemacht wird !
19
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
20
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 ?
21
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 ?
22
Dreidimensionale Felder
23
Merke: In der Programmiersprache C fasst man ein dreidimensionales Feld als eindimensionales Feld auf, dessen einzelne Zellen (Elemente) aus zweidimensionalen Feldern bestehen.
24
int v[3][4][5]; 49527369 43274267 12113789 v[0][2][3] = 18; 18 Welche Stelle wird verändert ?
25
int v[3][4][5]; v[0][2][3] = 18; Wieviel Speicher benötigt die Variable v ? = 3 · 4 · 5 · Speicherbedarf (int)
26
Vierdimensionales Feld Beispiel
27
Temperatur-Erfassung an einer Wetterstation über folgende Zeitdauer: - 10 Jahre - Monatlich - Täglich - Stündlich
28
Wie kann man diese Daten "geschickt" anordnen, so dass leicht darauf zugegriffen werden kann ?
29
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)
Ähnliche Präsentationen
© 2025 SlidePlayer.org Inc.
All rights reserved.