Informatik 1

19
Informatik 1 Übung 4

description

Informatik 1. Übung 4. Übung 4. Nachbesprechung. Ich gebe nicht auf. Code schön formatieren. if ( x > 0) { a = 1; b = 1; // Kommentar. if (y > 0) { c = 1; } else { d = 1; } e = 1; }. For-Schleife. Zählvariable nicht im Körper ändern - PowerPoint PPT Presentation

Transcript of Informatik 1

Informatik 1

Übung 4

NACHBESPRECHUNGÜbung 4

Ich gebe nicht auf

• Code schön formatierenif (x > 0) { a = 1; b = 1;

// Kommentar. if (y > 0) { c = 1; } else { d = 1; }

e = 1;}

For-Schleife

• Zählvariable nicht im Körper ändern• Zählvariable nicht ausserhalb deklarieren

for(int i=0; i<10; i++){ k += i;}

int i;for(i=0; i<10; ){ k += i; i++;}

for(int i=0; i<10; i++){ if(...) i--;}

For-Schleife

• Von 0 bis N-1 zählen• N mal durchlaufen

for(int i=0; i<N; i++){ }

WIEDERHOLUNGVorlesung 5

Arrays

• Bisher: einfache Datentypen– char, int, float, double, bool

• Neu: Array– 'Liste' mit fixer Länge– Alle Elemente haben gleichen Typ– Zugriff auf Elemente über Index

Arrays

• Beispiel: Messwertreihe– Temperatur von 7 aufeinanderfolgenden TagenTag # Temperatur

1 16.1

2 17.2

3 21.7

4 21.5

5 21.6

6 18.1

7 17.9

Arrays - Deklaration

• Länge muss konstant sein

typ variable[länge];

// 500 aufeinanderfolgende Zeichenchar text[500];

// ein Vektor mit drei Komponentenfloat v1[3];

// N aufeinanderfolgende Zeichenconst int N = 500;char text[N];

Arrays - Deklaration

• Länge muss konstant sein

typ variable[länge];

// 500 aufeinanderfolgende Zeichenchar text[500];

// ein Vektor mit drei Komponentenfloat v1[3];

// N aufeinanderfolgende Zeichenconst int N = 500;char text[N];

string text;

Arrays - Zugriff

• Indizierung: [0..N-1]• Index konstant oder Ausdruck vom Typ int

variable[index];

int i = ...;

// i-tes Zeichen auf 'A' setzentext[i] = 'A';

// x-Komponente auslesenfloat x = v1[0];

Arrays - Zugriff

• Indizierung: [0..N-1]• Index konstant oder Ausdruck vom Typ int

variable[index];

int i = ...;

// i-tes Zeichen auf 'A' setzentext[i] = 'A';

// x-Komponente auslesenfloat x = v1[0];

for(int i=0; i<N; i++){ text[i] = 'A' + i;}

Arrays - Zugriff

• Zugriff ausserhalb vom Bereich– Programm stürzt evtl. ab– Wert von anderen Variablen wird evtl. verändert– Sicherheitslücke!

• Immer Gültigkeit vom Index prüfen!

Arrays - Interne Abbildung

• Aufeinanderfolgende Zellen im Speicher• Jedes Byte im Speicher hat eine 'Adresse'• 'Adresse' von Variablen bestimmt Compiler

Adresse

Inhalt

1000 ???

1001 text[0]

1002 text[1]

1003 text[2]

1004 text[3]

1005 text[4]

1006 ???

char text[5];

Bitweise OperationenLogisch Bitweise

Arbeitet auf bool einzelne Bits eines char/int/...

UND && &

true && false == false 001101 & 101011 == 001001

ODER || |

true || false == true 001101 | 101011 == 101111

Exkl. ODER (XOR) ^

001101 ^ 101011 == 100100

NICHT/Komplement ! ~

!true == false ~0010 == 1101

XOR

• Exklusives Oder– Beide Argumente verschieden -> wahr– Beide Argumente gleich -> falsch

A B A xor B

false false false

false true true

true false true

true true false

ÜBUNGÜbung 5

Pseudocode

• Kombination Code/natürliche Sprache– Gleiche Kontrollstrukturen (for, while, if, ...)– Beliebige Befehle

Prozedur: euklid Zweck: Euklidischer Algorithmus zur Berechnung des größten gemeinsamen Teilers Parameter: natürliche Zahlen m, n 1. Falls m > n, dann m und n miteinander vertauschen. 2. Jetzt gilt m <= n. 3. Solange m > 0 wiederhole 4. Setze n = n − m. 5. Falls m > n, dann m und n miteinander vertauschen. 6. Jetzt gilt m <= n. Ergebnis: n.

Charakter-Array einlesen

• cin.getline(text, length)

// Liest maximal 500 Zeichen in das Array text einchar text[500];cin.getline(text, 500);

// Liest maximal 'length' Zeichen in das Array text einconst int length = 500;char text[length];cin.getline(text, length);