INFORMATIK I

Übung 6 : Kontrollfluss


1. April 2015


Daniel Hentzen
dhentzen@student.ethz.ch




Übung 5 : Arrays und Strings







Theorie






  • structures

  • unions
  • enumerations
  • loops (for, while, do while)




Structures (struct)

= benutzerdefinierter Typ
= "Ordner"


Definition

struct MyNewDataType {	<type1> member1;
	<type2> member2;
	...
}; //Semikolon !
struct student{ 
	float grade;
	bool passed;
};



Definition : Alternativen
struct student{...} adam, eva; //erstellt 2 student : adam, eva
struct {...} s1; //erstellt einen struct mit namen s1







Variablendeklaration & Initialisierung

MyNewDataType name;
student eva; //Deklarationstudent adam = {5.25, true}; //Deklaration & Deklarationeva = adam; //Zuweisung

  • auf Mitglied-Variablen zugreifen : 

name.member1 = ...; // "member1 von name"float a = Hans.grade; // "grade von Hans"
daniel.grade = hans.grade; // "grade von Daniel = grade von Hans"


Achtung auf Datentypen bei Zuweisung!


  • Nesting :
struct teacher{
	int students;
	student adam; // erlaubt
	student eva;
	teacher markus; // nicht erlaubt!
};




Unions

mehrere Typen im gleichen Speicher


union type_name {
	<type1> member1;
	<type2> member2;
	..
} object_names;

  • besetzter Speicherplatz = Speicherplatz der grössten Mitgliedsvariable
  • allen Typen wird der gleiche Wert zugeordnet
  • nur 1 Wert kann gespeichert werden!
  • falls eine Variable geändert wird, werden alle geändert





Beispiel


union mix_temp{
	int l;
	struct s{
	  	short hi;
	 	short lo;
	};
	char c[4];
} mix;







mix.l = 3;


  • mix.l = 3,
  • mix.s.hi = 3,
  • mix.s.lo = 3,
  • mix.c[0] = 3,
  • mix.c[1] = 3,
  • mix.c[2] = 3,
  • mix.c[3] = 3






Enumerations


enum type_name {value1,value2,value3,...} object_names;
enum Months {January, February, March, April, May, June, July, August, September, October, November, December} a;a = May; //ein Wert aus der Listea = 4; //Index 0-11 (Standard)
enum Months {January = 1, February,...} a;a = 5; //May


enum Months {January = 1, June = 6, March = 3} a;





Loops / Schleifen

for
while
do while


for

for (int i=0; i<4; i++)
{
	cout << "i is: " << i;
}

  • int i : Index
    • von 0 bis (i < 4 = false) (0 bis 3)
  • Bedingung i < 4 wird zuerst geprüft, dann wird ausgeführt
  • nach dem Ausführen : i++ (i = i+1)





Beispiel : Arrays


int temperaturliste[7] = {10,12,11,15,14,13,17};

for (int i=0; i < 7; i++)
{
	cout << temperaturliste[i];
}


while

int i = 0;
while (i < 4)
{
	cout << "i is: " << i;
	i++;
}

  • Index-Variable vor der Schleife definieren
  • Zuerst wird Bedingung geprüft, dann wird ausgeführt
  • nach dem Ausführen : i++ (i = i+1) (in der Schleife)





Beispiel :


int temperaturliste[7] = {10,12,11,15,14,13,17};

int i = 0;
while (i < 7)
{
	cout << temperaturliste[i];
	i++;
}


 

for vs while


  • for
    • für Schleifen mit bekannter Anzahl an Durchgängen
    • "für i=x bis y"

  • while
    • für Schleifen mit unbekannter Anzahl an Durchgängen
    • "solange Bedingung = true"
    • für komplexe Bedingungen

while <-> for


do while

int i = 0;
do {
	cout << "i is : " << i;
	i++;
} while (i<4);


  • Zuerst wird ausgeführt, dann Bedingung überprüft !!
  • --> mindestens 1 Durchlauf !


Verkürzte Operatoren

postfix : x++ (x--)

prefix : ++x (--x)


int x = y++; //int x = y; y = y+1;int x = ++y; //y = y+1; int x = y; 

Zuweisung :

x += 2; //x = x+2;x -= 2; //x = x-2;x *= 2; //x = x*2;x /= 2; //x = x/2;x %= 2; //x = x % 2;




Übung 6 : Kontrollfluss



Aufgabe 1 : Durchschnitt III



Aufgabe 2 : Fakultät




Aufgabe 3 : Primzahlen (!)



Aufgabe 4 : Unix Prozesse


  • top : Liste aller Prozesse
  • firefox & : Firefox wird geöffnet, Konsole bleibt aktiv
  • ps : Prozesse, die von der Konsole gestartet wurden
  • kill <pid> : bricht Programm ab
  • kill -9 <pid>

Übung 6 : Kontrollfluss

By Daniel Hentzen

Übung 6 : Kontrollfluss

  • 731