1 / 29

0120

Auf die (Anfangs)Adresse dieses Speicherbereichs hat der Programmierer keinen Einfluß. Diese legt der Interpreter bzw. Programmlader fest. null. 0470. 0120. ?. v. ?. ?. Was veranlasst diese Anweisung im Arbeitsspeicher ?. ?.

cadee
Download Presentation

0120

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Auf die (Anfangs)Adresse dieses Speicherbereichs hat der Programmierer keinen Einfluß. Diese legt der Interpreter bzw. Programmlader fest. null 0470 0120 ? v ... ? ? 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. ? ? public static void main(...){ int[] v; v=new int[2];} ? Wie viel Byte Speicher werden reserviert? (Antwort nächste Folie) Aus Platzgründen wird hier der Arbeitsspeicher auf 2 Tabellen verteilt, obwohl eigentlich der ganze Speicher durch eine Tabelle dargestellt wird! ?

  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]; Anzahl der Elemente in der 2. Dimension: Jede Zelle des eindimensionalen Feldes besteht wiederum aus 4 Zellen. Anzahl der Elemente in der 1. Dimension: Das Feld besteht aus 3 eindimensionalen Feldern. Variablenname des Feldes Datentyp der Elemente: Jede Zelle hat den gleichen Datentyp

  5. int v[3][4]; besteht hier z.B. aus: besteht hier z.B. aus: v[1][2] = 13; besteht hier z.B. aus: Welche Stelle wird verändert ? 12 11 37 89 v[0] 43 27 42 67 v[1] 49 52 73 69 v[2]

  6. int v[3][4]; Wieviel Speicher benötigt die Variable v ? v[1][2] = 13; = 3 · 4 · Speicherbedarf (int) 12 11 37 89 43 27 13 67 49 52 73 69

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

  8. 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. Problem:

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

  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. 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 for(i=0;i<2;i++) printf("%c",formular[2][i]);

  20. 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 ? Aufgabe:

  21. int main(){ char f[3][13]= {{'M','u','s','t','e','r','m','a','n','n'}, {'E','r','i','k','a'}}; 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. Welche Werte haben die Zellen des Feldes f ? // oder: char f[3][13]={"Mustermann","Erika"}; f[0] f[1] f[2]

  22. Dreidimensionale Felder

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

  24. int v[3][4][5]; Welche Stelle wird verändert ? v[0][2][3] = 18; 18 12 11 37 89 43 27 42 67 49 52 73 69

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

More Related