Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "V AdresseWert... 0120... public static void main(...){ int[] v; v=new int[2]; } Was veranlasst diese Anweisung im Arbeitsspeicher ? Es wird im Arbeitsspeicher."—  Präsentation transkript:

1 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)

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]; 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]; 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} }; 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

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]; 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)


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

Ähnliche Präsentationen


Google-Anzeigen