GIP 6

#include 

using namespace std;

int addiren( int augend, int addend  )
{
	return augend + addend;
}

int subtrahieren( int minuend, int subtrahend )
{
	return minuend - subtrahend;
}

int multiplizieren( int multiplikand, int multiplikator )
{
	return multiplikand * multiplikator;
}

int dividieren(int dividend, int divisor)
{
	if(divisor == 0)
	{
		return 0;
	}
	return dividend / divisor;
}

/* Überladene Funktionen */
double addiren( double augend, double addend  )
{
	return augend + addend;
}

double subtrahieren( double minuend, double subtrahend )
{
	return minuend - subtrahend;
}

double multiplizieren( double multiplikand, double multiplikator )
{
	return multiplikand * multiplikator;
}

double dividieren(double dividend, double divisor)
{
	if(divisor == 0)
	{
		return 0;
	}
	return dividend / divisor;
}


int main (void)
{
	char id, jn='j', ra;
	double erg=0, z1, z2;

	do 
	{

		cout << "Minirechner: (i)nteger oder (d)ouble ? ";
		cin >> id;
		
		if(id != 'i' && id != 'd')
			continue;			

		cout << "Zahl 1 = ? "; 
		cin >> z1;

		cout << "Rechenart (+ - * /) ? ";
		cin >> ra;

		cout << "Zahl 2 = ? ";
		cin >> z2;

		if(id == 'i')
		{
			z1 = (int)z1;
			z2 = (int)z2;

			switch(ra)
			{
				case '+':
					erg = addiren( (int)z1, (int)z2 );
					break;
				case '-':
					erg = subtrahieren( (int)z1, (int)z2 );
					break;
				case '*':
					erg = multiplizieren( (int)z1, (int)z2 );
					break;
				case '/':
					erg = dividieren( (int)z1, (int)z2 );
					break;
				default:
					break;	
			}
		}
		else 
		/* if(id == 'd') */
		{
			switch(ra)
			{
				case '+':
					erg = addiren( z1, z2 );
					break;
				case '-':
					erg = subtrahieren( z1, z2 );
					break;
				case '*':
					erg = multiplizieren( z1, z2 );
					break;
				case '/':
					erg = dividieren( z1, z2 );
					break;
				default:
					break;	
			}
		}		
		cout << z1 << ra << z2 << "=" << erg << endl; 
		
		cout << "Noch einmal (j/n)? ";
		cin >> jn;
		
	} 
	while (jn == 'j');	

	return 0;
}

deb Pakete auflisten

Immer wieder bin ich auf der suche nach Paketen:

dpkg --get-selections | less
Er liefert mir alle Pakete die per apt installiert sind und listet sie in der less auf.

Oder wenn man bestimmte Pakete sucht:
dpkg -l "linux-image*"| grep ^ii

Und wenn man wissen will was sich in dem Pakte befindet:
dpkg -L less

Rsync vom Server zum BackupServer

Zunächst muss ein Schlüsselpaar erstellt werden. Das machen wir mit ssh-keygen

ssh-keygen -b 4096 -t rsa -f rsync

Kein Passfrase eingeben sonst kann man das nicht automatisieren. Abschließend wurden die folgenden Dateien in ~/.ssh/ erstellt.

rsync (ist der private key)
rsync.pub (ist der public key)

Den Public Key auf BackupServer kopieren, damit der lokale Server autorisiert werden kann.

backup@BackupServer:~$ cd /home/backup/.ssh
backup@BackupServer:~/.ssh$ cat rsync.pub >> authorized_keys
backup@BackupServer:~/.ssh$ chmod 0600 authorized_keys

Achtung! Falls schon eine "authorized_keys" Datei existiert nicht überschreiben, sondern anhängen.
Zum Testen und um Akzeptieren des Zertifikates könnt ihr euch per SSH verbinden.

root@server:~$ ssh -i /root/.ssh/rsync backup@BackupServer

Wenn nun die Verbindung direkt aufgebaut wird, ohne die Abfrage eines Passworts, habt ihr alles richtig gemacht.

root@server:~$ rsync -e "ssh -i /root/.ssh/rsync" -avcuz /home/Tux/ ZielServer:/home/Tux/Tuxbackup/

Hier noch eine Übersicht welche Befehle es gibt:

-a Archiv: rekursiv, mit Links und allen Rechten (als das gleich wie: -rlptgoD)
-v Fortschrittsanzeige
-c Checksummen von Dateien vergleichen
-C Unwichtige Dateien ignorieren
-u Update: neue Dateien nicht überschreiben
-H Hardlinks auf dem Ziel synchronisieren
-n Nichts tun, nur zeigen, was getan würde
-e ssh SSH für die Verbindung nutzen
–delete Lokal gelöschte Dateien auch auf dem Ziel entfernen
–modify-window=N Toleranz für Zeitstempel, die Rsync noch als gleich auffasst
-z Zip: Dateien vor dem Übertragen komprimieren (spart Bandbreite, kostet Rechenzeit)

GIP 5

#include 

using namespace std;

void hw(void)
{
	cout << "Hello wordl!" << endl;
}

void cbv1(double d)
{
	cout << d << endl;	
}

char cbv2 (double d)
{
	if(d >= 0)
	{
		return 'p';
	}
	return 'n';
}
void cbr1(float &f)
{
	f = 12.345;
}

int cube(int l, int b, int h=1)
{
	return l * b * h;
}

int main (void)
{
	/* Aufgabe a) */
	hw();

	/* Aufgabe b) */
	cout << "Wert von a in cbv1 = ";
	cbv1(12.6);

	/* Aufgabe c) */
	double d = 7.1234;
	cout << "Wert von a in cbv1 = ";
	cbv1( d );

	/* Aufgabe d) */
	cout << "Ergebnis von cbv2 mit Parameter -23: " << cbv2 (-23) << endl;;
	cout << "Ergebnis von cbv2 mit Parameter +10: " << cbv2 (10) << endl;;

	/* Aufgabe e) */
	float f=0;
	cout << "Vor dem Aufruf von cbr1: f = " << f << endl;
	cbr1(f);
	cout << "Vor dem Aufruf von cbr1: f = " << f << endl;
	
	/* Aufgabe f) */
	cout << "Daten (L: 10 B: 11 H: 12)" << endl << "Rauminhalt: " << cube( 10, 11, 12 ) << endl;

	cout << "Daten (L: 10 B: 11 H: 1)" << endl << "Flaeche: " << cube( 10, 11 )  << endl;

	return 0;	
}

GIP 4

#include 
#include 

using namespace std;

int game(int max);

int main (void)
{
	int level=0;

	while(true)
	{
		cout << "Welchen Level moechten Sie spielen? (1, 2 oder 3) ";
		cin >> level;

		switch(level)
		{
			case 1:
				return game(10);			
				break;
			case 2:
				return game(100);
				break;
			case 3:
				return game(1000);
				break;
			default:
				break;
		}
	}
	return 0;
}

int game(int max)
{
	int ip=0, zahl=0;

	srand ( time(NULL) );
	zahl = rand()%max + 1;

	for(int i=1; ip != zahl; i++ )
	{
		cout << "Zahl = ? (1 bis " << max << ") ";
		cin >> ip;
		
		if(ip < zahl)
		{
			cout << "Die eingegebene Zahl ist zu klein!" << endl << endl;
		}
		else if (ip > zahl)
		{
			cout << "Die eingegebene Zahl ist zu gross!" << endl << endl;
		}
		else if(ip == zahl)
		{
			cout << "Richtig! Die Zahl lautet " << zahl << endl <<"Sie haben " << i << " Versuche gebraucht." << endl << endl;
			return i;
		} 
		else 
			--i;
	}
	return 0;
}