November, 2005

GIP Aufgabe 8

Mittwoch, November 30th, 2005
#include "stdafx.h"
#include 
#include 

using namespace std;

void datumEinlesen(short &tag, short &monat, short &jahr);
short codewertMonat(short monat, short jahr);
bool schaltjahr(short jahr);
string ermittleWochentag(short ergebnis);

int main()
{	
	short tag, monat, jahr;
	jahr += jahr / 4;
	datumEinlesen(tag, monat, jahr);

	return 0;
}
void datumEinlesen(short &tag, short &monat, short &jahr)
{
	cout << "Datum eingeben: \nTag = ? ";
	cin >> tag;

    cout << "Monat = ? ";
	cin >> monat;

	cout << "Jahr = ?  ";
	cin >> jahr;
}

short codewertMonat(short monat, short jahr)
{
	switch(monat)
	{
		//September, Dezember 1 		
		case 9:
		case 12:
			monat += 1;
			break;

		//April, Juli 2 
		case 4:
		case 7:
			monat += 2;
			break;

		//Januar, Oktober 3
		case 1:
			if(schaltjahr(jahr))
				monat -= 1;
		case 10:
			monat += 3;
			break;
		
		//Mai 4
		case 5:
			monat += 4;
			break;
		//August 5
		case 8:
			monat += 5;
			break;
		
		//Februar, März, November 6
		case 2:
			if(schaltjahr(jahr))
				monat -= 1;
		case 3:
		case 11:
			monat += 6;
			break;

		default:
			//Juni 0 
			break;
	}
	return monat;
}

string ermittleWochentag(short ergebnis)
{
	string a[7];
	a[0] = "Donnerstag";
	a[1] = "Freitag";
	a[2] = "Samstag";
	a[3] = "Sonntag";
	a[4] = "Montag";
	a[5] = "Dienstag";
	a[6] = "Mittwoch";

	return a[ergebnis];
}

bool schaltjahr(short jahr)
{
	//if(jahr%4 == 0 && jahr%100!=0 || jahr%400==0)
	if(jahr%4 == 0)
	{
		if(jahr%100==0)
		{
			if(jahr%400==0)
				return true;
		}
		else
			return true;
	}
	return false;
}

GIP Aufgabe 7

Mittwoch, November 23rd, 2005
#include "stdafx.h"
#include 

using namespace std; 

int main()
{
	int a[20] = {0};
	char text[201];
	int wl = 0;

	cout << "Text = ? ";
	cin.get(text,200);

	for(int i = 0;true;i++)
	{
		if(text[i] == ' ' || text[i] == 32 || text[i] == '\0')
		{
			if(wl>20)
				wl=20;

			if(wl>0)
				a[wl - 1] = a[wl - 1] + 1;
			wl=0;
		}
		else 
			wl++;
		
		if(text[i] == '\0')
			break;
	}
    
	for(int i=0; i < 20; i++)
	{
		if(a[i] != 0)
		{
			if(i < 10)
				cout << " ";

			cout << i + 1 << " "; 
			for(int ii=0;ii < a[i];ii++)
			{
				cout << "#";	
			}
			cout << endl;
		}
	}

	return 0;
}

GIP Aufgabe 6

Mittwoch, November 16th, 2005
// aufgabe_6.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//
#include "stdafx.h"
#include  

using namespace std; 

int addieren(int a, int b);
int subtrahieren(int a, int b);
int multiplizieren(int a, int b);
int dividieren(int a, int b);

double addieren(double a, double b);
double subtrahieren(double a, double b);
double multiplizieren(double a, double b);
double dividieren(double a, double b);


int main()
{
	char c,d;
	int a,b=0;
	double e, f=0, summe;

	do
	{
		do
		{
			cout << "Minirechner: (i)nteger oder (d)ouble ? ";
			cin >> d;
		}while(d != 'i' && d != 'd');
	
		cout << "Zahl 1 = ? ";
		if(d == 'i')
			cin >> a;
		else
			cin >> e;

		do
		{
			cout << "Rechenart (+ - * /) ? ";
			cin >> c;
		} while (c != 43 && c != 45 && c != 42 && c != 47); 
		
		if(d == 'i')
		{
			do
			{
				cout << "Zahl 2 = ? ";
				cin >> b;
			}while(c == 47 && b == 0);
	
			switch(c)
			{
				case '+':
						summe = addieren(a,b);
					break;
				case '-':
						summe = subtrahieren(a,b);
					break;
				case '*':
					summe = multiplizieren(a,b);
					break;
				case '/':
					summe = dividieren(a,b);
					break;
			}
			cout << a << c << b << "=" << summe;
		}
		else
		{
			do
			{
				cout << "Zahl 2 = ? ";
				cin >> f;
			}while(c == '/' && f == 0);

			switch(c)
			{
				case '+':
						summe = addieren(e,f);
					break;
				case '-':
						summe = subtrahieren(e,f);
					break;
				case '*':
					summe = multiplizieren(e,f);
					break;
				case '/':
					summe = dividieren(e,f);
					break;
			}
			cout << e << c << f << "=" << summe;
		}
		
		cout << "\n\nNoch einmal (j/n)? ";
		cin >> c;
	}
	while(c=='j');

	return 0;
}

int addieren(int a, int b)
{
	return a + b;
}
int subtrahieren(int a, int b)
{
	return a - b;
}

int multiplizieren(int a, int b)
{
	return a * b;
}

int dividieren(int a, int b)
{
	if(b)
		return a / b;
	return 0;
}

double addieren(double a, double b)
{
	return a + b;
}
double subtrahieren(double a, double b)
{
	return a - b;
}

double multiplizieren(double a, double b)
{
	return a * b;
}

double dividieren(double a, double b)
{
	if(b)
		return a / b;
	return 0;
}

GIP Aufgabe 5

Mittwoch, November 9th, 2005

Funktionen in C++
Schreiben Sie die folgenden C++-Funktionen und rufen Sie sie in main() auf. Benutzen Sie das Hilfsblatt „Funktionen“ (Download im GIP-Vorlesungsbereich).

  1. Schreiben Sie eine Funktion hw(), die keine Argumente und keinen Rückgabewert hat, sondern lediglich die Zeichenkette „Hello world!“ auf dem Bildschirm ausgibt.

    Testlauf:
    Hello world!

  2. Schreiben Sie eine Funktion cbv1(), die ein Argument vom Typ double und keinen Rückgabewert hat. Der Wert des Argumentes ist von der Funktion auf dem Bildschirm auszugeben. Rufen Sie die Funktion mit dem konstanten Parameter 12.6 auf.
    Testlauf: Wert von a in cbv1 = 12.6
  3. Rufen Sie die Funktion cbv1() auf, indem Sie als Parameter eine Variable übergeben, die Sie vorher mit dem Wert 7.1234 belegt haben.

    Testlauf:
    Wert von a in cbv1 = 7.1234

  4. Schreiben Sie eine Funktion cbv2(), die ein Argument vom Typ double und einen Rückgabewert vom Typ char hat. Die Funktion soll das Zeichen ’p’ zurückgeben, wenn eine positive Integerzahl als Parameter übergeben wird und das Zeichen ’n’ bei einer negativen Integerzahl. Rufen Sie die Funktion einmal mit einer positiven und einmal mit einer negativen Zahl auf und geben Sie das Ergebnis in main() auf dem Bildschirm aus.

    Testlauf:
    Ergebnis von cbv2 mit Parameter -23: n
    Ergebnis von cbv2 mit Parameter +10: p

  5. Schreiben Sie eine Funktion cbr1(), die die Float-Variable f im Hauptprogramm auf den konstanten Wert 12.345 setzt. Geben Sie den Wert von f in main() vor und nach dem Aufruf der Funktion aus.

    Testlauf:
    Vor dem Aufruf von cbr1: f = 0
    Nach dem Aufruf von cbr1: f = 12.345

  6. Schreiben Sie eine Funktion cube(), die abhängig von der Anzahl der übergebenen Parameter den Rauminhalt eines Quaders oder die Fläche eines Rechtecks berechnet und als Wert zurückgibt. Argumente sind Länge, Breite und Höhe. Definieren Sie die Höhe als Default-Parameter mit dem Defaultwert 1, so dass beim Weglassen der Höhe beim Funktionsaufruf mit 1 gerechnet und somit der Wert für die Fläche zurückgegeben wird. Rufen Sie die Funktion mit Beispielwerten auf. Die Daten sind innerhalb der Funktion am Bildschirm auszugeben, das Ergebnis in main().

    Testlauf:
    Daten (L: 10 B: 11 H: 12)
    Rauminhalt: 1320
    Daten (L: 10 B: 11 H: 1)
    Flaeche: 110

Überprüfen Sie die Werte der Variablen in den Aufgaben b) bis f) mit dem Debugger!

#include "stdafx.h"

using namespace std;

void hw(void);
void cbv1(double i = 12.6);
char cbv2(double d = 0);
void cbr1(double &d);
int cube(int l,int b,int h=1);

int main(void)
{
	// Aufgabe A
	hw();

	//Aufgabe B
	cbv1();

	//Aufgabe C
	cbv1(7.1234);

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

	// Aufgabe E
	d = 0;
	cout << "Vor dem Aufruf von cbr1: f = " << d << endl;
	cbr1(d);
	cout << "Nach dem Aufruf von cbr1: f = " << d << endl;

	// Aufgabe F
	int l=10,b=11,h=12;
/*
	cout << "Daten (L: "<< l << " B: " << b << " H: " << h <<")" << endl << "Rauminhalt: " << cube(l,b,h)  << endl;
	h=1; 
	cout << "Daten (L: "<< l << " B: " << b << " H: " << h <<")" << endl << "Flaeche: " << cube(l,b) << endl;	
*/

	cout << cube(l,b,h) << endl;
	cout << cube(l,b) << endl;

	return 0;
}

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

void cbv1(double i)
{
	cout << "Wert von a in cbv1 = " << i << endl;
}

// Aufgabe D
char cbv2(double d)
{
	char zeichen;

	if(d < 0)
	{
		zeichen = 'n';
	}
	else if(d > 0)
	{
		zeichen = 'p';
	}
	//	cout << "Ergebnis von cbv2 mit Parameter " << d << ": " << zeichen;

	return zeichen;
}

void cbr1(double &d)
{
	d = 12.345;
}

int cube(int l,int b,int h)
{
	if(h==1)
	{
		cout << "Daten (L: "<< l << " B: " << b << " H: " << h <<")" << endl << "Flaeche: ";
	}
	else 
	{
		cout << "Daten (L: "<< l << " B: " << b << " H: " << h <<")" << endl << "Rauminhalt: ";
	}

	return l*b*h;
}

Neulich in GIP ein vergleich zwischen Globalen Variabeln und einem Auto

Dienstag, November 8th, 2005

Sie stelle auch nicht ihr Auto für alle zur Verfügung, dann wissen sie nicht wo es sich befindet und welchen Wert es danach hat.