Kategori FH-Aachen

GIP 2

Freitag, Oktober 19th, 2007

Schreiben Sie ein Programm zur Lösung der quadratischen Gleichung ax2 + bx + c = 0 Die Koeffizienten a, b und c sollen von der Tastatur eingelesen werden. Ist die Diskriminante (b2 -4ac) negativ, gebe man den Text „Keine reellen Loesungen“ auf dem Bildschirm aus. Ist die Diskriminante nicht negativ, berechne man die Lösungswerte x1 sowie x2 und gebe sie auf dem Bildschirm aus.
Für a ≠ 0 gilt:

Hinweise:

  • Überlegen Sie, welchen Datentyp die Variablen haben sollten.
  • Denken Sie daran, dass auch Zahlenkonstanten (wie 1, 2 oder 4) einen passenden
  • Datentyp haben müssen.

  • Berechnen Sie zuerst die Diskriminante und speichern Sie das Ergebnis in einer Variablen. Prüfen Sie danach, ob die Diskriminante nicht negativ ist und berechnen Sie nur in diesem Fall die Wurzel. Sonst geben Sie die Meldung laut Aufgabenstellung aus.
  • Die Funktion double sqrt(double x) liefert die Quadratwurzel von x. Sie ist in der Datei <math.h> deklariert. Diese muss also mit include eingebunden werden. Für den Eingabewert a=0 muss die Division durch Null abgefangen werden, vgl. Testlauf 4!

Testdaten:

  1. a=1, b=2, c=-3
  2. a=4, b=8, c=0
  3. a=1, b=2, c=3
  4. a=0, b=8, c=4
#include 
#include 

using namespace std;

int main (void)
{
	int a=0, b=0, c=0, term1=0;
	double x1=0, x2=0;
	cout << "Loesung der quadratischen Gleichung" << endl;

	cout << "a = ? ";
	cin >> a;
	
	if(a == 0)
	{
		cout << "Keine Loesung (Division durch Null)" << endl;
		return 0;
	}

	cout << "b = ? ";
	cin >> b;
		
	cout << "c = ? ";
	cin >> c;


	term1 = ( b * b ) - ( 4 * a * c);
	if(term1 < 0)
	{
		cout << "Keine reellen Loesungen" << endl;
		return 0;
	}

	x1 = (1.0 / (2.0 * (double)a ) ) * ( (double)(b * -1) + sqrt( term1 ) );
	x2 = (1.0 / (2.0 * (double)a ) ) * ( (double)(b * -1) - sqrt( term1 ) );
	cout << "Loesung: " << endl << "x1 = " << x1 << endl << "x2 = " << x2 << endl << endl;

	return 0;
}

dividierten Differenz

Donnerstag, April 26th, 2007

Hier der Source Code zur Mathe II Numerik Vorlesung mit dem Problem des "Schema der dividierten Differenz"

#include "stdafx.h"

using namespace std;

int main()
{
	int n = 10;
	double a[10][2];

	// Inizialisirung
	for(int i=0; i < n; i++)
	{
		a[i][0] = i;
		a[i][1] = (double)( 1 / (double)( 1 + (i*i) ) ) ;
	}

	// Funktion
	for(; n > 0; n--)
	{	
		for(int i=0; i < n ; i++)
		{
			if(i < n -1)
			{
				a[i][1] = (double)((double)( a[i+1][1] - a[i][1] ) / (double)( a[i+1][0] - a[i][0] ));
				cout << a[i][1] << " ";
			}
			if(i > 1)
				a[i-1][0] = a[i][0];

			//cout << a[i][0] << " ";
		}
		cout << "\n";
	}

	return 0;
}

Ich habe mal wieder eine Rechenaufgabe für euch

Montag, November 27th, 2006


Aus 3 Brettern soll eine Rinne gebaut werden. Die Bretter haben eine Kantenlänge von 10cm. In welchen Winkel müssen die Bretter zueinander stehen damit das Volumen Maximal ist.
Tipp der Winkel ist nicht 45°!

Sudoku

Mittwoch, April 19th, 2006

Drei Tage habe ich gebraucht, dann war die erste Version meines Sudoku löse Programms fertig. Mit meinem Algorithmus ist es in einer wahnsinnigen schnellen Geschwindigkeit möglich auch komplizierteste Sudoku Ränzel innerhalb von Sekunden zulösen.

#include "stdafx.h"
#include 

using namespace std;
/*
int a[9][9] = {
	{0,4,0,0,0,7,0,0,0},
	{0,0,7,0,8,0,0,2,9},
	{0,9,0,1,0,2,7,3,0},
	{0,6,0,0,0,0,0,0,0},
	{1,2,0,4,0,3,0,9,0},
	{0,0,0,0,0,0,0,6,0},
	{0,1,2,5,0,9,0,7,0},
	{9,3,0,0,1,0,5,0,0},
	{0,0,0,3,0,0,0,8,0}
};
*/

int a[9][9] = {
	{0,5,0,1,0,2,0,9,0},
	{1,0,0,6,0,3,0,0,8},
	{0,0,3,0,4,0,2,0,0},
	{6,1,0,0,0,0,8,3,9},
	{7,0,0,0,0,0,0,0,4},
	{9,3,2,0,0,0,0,7,5},
	{0,0,1,0,5,0,9,0,0},
	{2,0,0,9,0,7,0,0,6},
	{0,9,0,8,0,6,0,4,0}
};

int c[9] = {0};
void m(int va[9][9],int x, int y)
{
//	int va[9][9] = {{0}};
//	for(int i=0; i<9; i++)
//		for(int ii=0; ii<9; ii++)
//			va[i][ii] = sa[i][ii];
		
	int b[9] = {0}, x2=(x/3), y2=(y/3);
	for(int i=0,iii=0; i<3; i++)
		for(int ii=0; ii<3; ii++)
			b[iii++] = va[((x2*3)+i)][((y2*3)+ii)];

	//int tmp[9] = {1,2,3,4,5,6,7,8,9};
	for(int i=0;i<9;i++)
		c[i] = i + 1;

	for(int i2=0; i2<9; i2++)
	{
		if(va[x][i2] > 0)
			c[(va[x][i2] - 1)] = 0;
		if(va[i2][y] > 0)
			c[(va[i2][y] - 1)] = 0;
		if(b[i2] > 0 )
			c[(b[i2]    - 1)] = 0;
	}
}

int rz(int sa[9][9])
{
	int n=0;
	int va[9][9];
		
	for(int i=0; i<9; i++)
		for(int ii=0; ii<9; ii++)
		{
			va[i][ii] = sa[i][ii];
			if(va[i][ii] == 0) 
				n++;
		}

	for(int i4=0; 1; i4++)
	{
		n = 0;
		for(int i=0; i<9 && !n; i++)
			for(int ii=0; ii<9 && !n; ii++)
			{
				if(va[i][ii] == 0) 
					n++;
			}

		if(n==0)
		{
			cout << "Fertig\n";
			for(int i=0; i<9 && n==0; i++)
			{
				for(int ii=0; ii<9 && n==0; ii++)
					cout << va[i][ii];
				cout << endl;
			}
			return 1;
		}

		for(int i=0; i<9; i++)
		{
			for(int ii=0; ii<9; ii++)
			{
				if(va[i][ii] == 0)
				{
					//Möglichkeiten für FELD
					m(va,i,ii);

					int tmp = 0;
					for(int iii=0; iii<9; iii++)
						if(c[iii])
							tmp++;
						
					if(tmp==0)
					{
						cout << "  x:" << i << "y:" << ii << " error\n";
						/*
						for(int i=0; i<9; i++)
						{
							for(int ii=0; ii<9; ii++)
								cout << va[i][ii];
							cout << endl;
						}
						*/

						return 0;
					}

					if(tmp==1)
						for(int iii=0; iii<9; iii++)
							if(c[iii])
							{
								va[i][ii] = c[iii];
								i4=0;
								cout << va[i][ii] << " x:" << i << "y:" << ii << "\n";
							}

					//cout << i4 << "\n";
					if(i4>0 && tmp>1) // && tmp < i4)
					{
						for(int iii=0; iii<9; iii++)
							if(c[iii])
							{
								va[i][ii] = c[iii];
								cout << va[i][ii] << " x:" << i << "y:" << ii << " r " << tmp <<"\n";
								if(rz(va))
									return 1;
								i4=0;		
							}
					}			

				}
			}
		}
	}
	return 1;
}

int main()
{
	if(rz(a))
		return 1;
	return 0;
}

Hier gibt es meinen Sudoku Quellcode v 0.3 sodoku3.cpp.

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