+ All Categories

0120

Date post: 23-Jan-2016
Category:
Upload: cadee
View: 32 times
Download: 0 times
Share this document with a friend
Description:
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 ?. ?. - PowerPoint PPT Presentation
29
Adress Wert ... public static void main(...){ } 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. Adress e Wert ... 0470 ? ? ? ? ? ? Aus Platzgründen wird hier der Arbeitsspeicher auf 2 Tabellen verteilt, obwohl eigentlich der ganze Speicher durch eine Tabelle dargestellt wird! 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
Transcript
Page 1: 0120

v

Adresse Wert

...

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.

Adresse Wert

...

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)

Page 2: 0120

Beispiel

Page 3: 0120

Dieses zweidimensionale Feld besteht aus 3 Zellen.

Jede dieser Zellen ist wiederum ein eindimensionales Feld, das

aus 4 Zellen besteht.

Page 4: 0120

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.

Page 5: 0120

int v[3][4];

49 52 73 6943 27 42 6712 11 37 89

v[1][2] = 13;

Welche Stelle wird verändert ?

v[0]

v[1]

v[2]

besteht hier z.B. aus:

besteht hier z.B. aus:

besteht hier z.B. aus:

Page 6: 0120

int v[3][4];

49 52 73 6943 27 13 6712 11 37 89

v[1][2] = 13;

Wieviel Speicher benötigt die Variable v ?

= 3 · 4 · Speicherbedarf (int)

Page 7: 0120

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

49 52 73 6943 27 42 6712 11 37 89v[0]

v[1]

v[2]

Page 8: 0120

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.

Page 9: 0120

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 ?

Page 10: 0120

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.

Page 11: 0120

Wie kann man dies programmtechnisch einfacher machen ?

Mit einem zweidimensionalen Feld.

Page 12: 0120

Aufgabe:

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

Page 13: 0120

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

Page 14: 0120

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.

Page 15: 0120

const int zanz = 3;const int sanz = 40;

int main(){ char formular [zanz][sanz];

Page 16: 0120

printf("Vorname eingeben\n");scanf("%s", &formular[0]);printf("Nachname eingeben\n");scanf("%s", &formular[1]);

// Initialen schreibenformular[2][0] = formular[0][0];formular[2][1] = formular[1][0];formular[2][2] = '\0';

Page 17: 0120

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

formular[2][2] = '\0';

Page 18: 0120

formular[2][2] = '\0'; printf("Initialen = %s\n", formular[2]);

Ja, wenn die Ausgabe wie hier mit der Formatierung %sgemacht wird !

Page 19: 0120

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

Page 20: 0120

Aufgabe:

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

Page 21: 0120

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.

M u s t e r m a n n \0 ? ?

E r i k a \0 ? ? ? ? ? ? ?

\0 ? ? ? ? ? ? ? ? ? ? ? ?

f[0]

f[1]

f[2]

Welche Werte haben die Zellen des Feldes f ?

Page 22: 0120

DreidimensionaleFelder

Page 23: 0120

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

Page 24: 0120

int v[3][4][5];

49 52 73 6943 27 42 6712 11 37 89

v[0][2][3] = 18;

18

Welche Stelle wird verändert ?

Page 25: 0120

int v[3][4][5];v[0][2][3] = 18;

Wieviel Speicher benötigt die Variable v ?

= 3 · 4 · 5 · Speicherbedarf (int)

Page 26: 0120

VierdimensionalesFeld

Beispiel

Page 27: 0120

Temperatur-Erfassung an einer Wetterstation über

folgende Zeitdauer:

- 10 Jahre- Monatlich- Täglich- Stündlich

Page 28: 0120

Wie kann man diese Daten "geschickt" anordnen, so

dass leicht darauf zugegriffen werden kann ?

Page 29: 0120

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)


Recommended