Zum Inhalt springen

Funktion zum berechnen eines Pascalschen Dreiecks


Jonsc1

Empfohlene Beiträge

Bin gerade dabei aus Spass ein Programm zu schreiben das jede Gleichung der Form (a+B)^n lösen kann.

Dazu brauche ich eine Funktion die mir die Zahlen des Pascalschen Dreiecks in ein Array schreibt....

Da ich an diesem Punkt langsam verzweifle bitte ich hier mal um Hilfe.

1 <.. das muss in ein Array wenn 0 übergeben wird

11 <.. 1

121 <.. 2

1331 <.. 3

14641 <.. 4

usw...

Sry das ich das Problem jetzt nicht genauer schildern kann, bin wirklich fertig weil ich schon seit Stunden an dem Problem arbeite...

Morgen wenn ich wieder ein wenig Kraft geschopft habe stell ich noch dazu zu was das ganze gut ist :)

mfg

Jonsc1

Link zu diesem Kommentar
Auf anderen Seiten teilen

Bin gerade dabei aus Spass ein Programm zu schreiben das jede Gleichung der Form (a+B)^n lösen kann.

Dazu brauche ich eine Funktion die mir die Zahlen des Pascalschen Dreiecks in ein Array schreibt....

Warum benötigst du ein Array? Das frisst Speicher (wenn es schlecht programmiert ist) und Rechenzeit (wenn deine Aufgabe mal etwas Anspruchsvoller wird - also z. B. (a+B)^1001.

Du kannst die einzelnen Zahlen anhand der Position berechnen.

5 Zeile 3 Spalte :

5!/[3!*(5-3)!]

bzw. Allgemein:

n te Zeile, m te Spalte:

n!/[m!*(n-m)!]

! bedeutet Fakultät bzw. Produkt der Zahlen von 1 bis n.

Wenn du erst kürzt, dann berechnest, dann stößt du nicht so schnell an Grenzen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das Array brauche ich um die Koeffizienten zwischenzuspeichern...

Ich will das Ergebniss als Term ausgeben.

Bsp:

(a+B)^2

= a^2 + 2ab + b^2 (gekürtzt... vollständige Version siehe unten: )

= 1*a^2*b^0 + 2*a^1*b^1+ 1*a^0*b^2

Was fällt auf?

1. Die Zahl der Summanten ist (immer) n+1.

2. Jeder Summant hat die Form: x*a^y*b^z , wobei x der Koeffizient ist.

3. Die Koeffizienten lassen sich aus dem Pascalschen Dreieck ablesen.

In unserem Fall sind die Koeffizienten 1,2,1

Dazu das Pascalsche Dreieck bis zur Stelle 2 (n)

0: 1

1: 11

2: 121

4. noch einige andere besondere Merkmale, auf die es hier nicht ankommt...

Wenn ich das Ergebniss als ausmultiplizierten Term ausgeben will muss ich wohl oder übel die Koeffizienten in einem dynamischen Array zwischenspeichern... oder?

Danke für den Tipp mit der Fakultät-Funktion... werde mich mal dran ausprobieren...

mfg

Jonsc1

EDIT:

Mein bisheriger (sehr umständlicher, und kaum verständlicher) Lösungsansatz der leider nicht funktioniert... sry das die Kommentare fehlen, ich editier sie später rein...


int reihe[10];

int letze_reihe[10];



void pascal_reihe(int n)

{

	letze_reihe[0] = 1;

	letze_reihe[1] = 1;


	for(int i=1; i<=n; i++)

	{

		reihe[0] = 1;

		for(int j=1; j<n; j++)

		{

			reihe[j] = letze_reihe[j-1] + letze_reihe[j];

		};

		reihe[n] = 1;

		for(int k=0; k<i; k++)

		{

			reihe[k] = letze_reihe[k];

		};

	};

};

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dieses Programm ist nach der oben genannten Metode geschrieben.

Es wird aber einfach <nichts> ausgegeben...

... wo liegt der Fehler?


#include <iostream>

using namespace std;



int fact(int n); // Fakultät Funktion

int pascDreieck(int n, int m);



int main()

{

	cout<<pascDreieck(4,2);	

	return 0;

};






int fact(int n) // Fakultät Funktion

{

   if(n==0)

      return 1;

   else

      return n*fact(n-1);

};	


int pascDreieck(int n, int m)

{

	int tmp_factN = fact(n);

	int tmp_factM = fact(m);

	int tmp_factMn = fact(m-n);


	return tmp_factN / (tmp_factM * tmp_factMn);

};


Link zu diesem Kommentar
Auf anderen Seiten teilen

-.-

Tut mir leid, aber ein letzes mal muss ich euch noch zu diesem Thema belästigen...

Ich will mal wieder den Fehler einfach nicht finden.

Das Programm läuft bis zum aufruf von "ergebnis_ausgeben(...);" bricht nach dem ausgegebenen Ergebnis aber ab.

Die Zeile "cout<<"fertig"; wird nicht mehr ausgeführt....

Ich kann beim besten Willen keinen Fehler finden...

EDIT:

So weit bin ich schonmal, der Fehler MUSS in der Funktion ergebnis_ausgeben liegen...

Da arbeitet das Programm wohl doch nicht so korrekt....


#include <iostream>

using namespace std;


//

// Vorwärtsdeklarationen


void ueberschrift_ausgeben();	// Ausgabe der Überschrift

int n_eingeben();				// Eingabe von n

int koeffizient(int n, int m);	// Pascalsches Dreieck, nte Spalte, mte Reihe

int fact(int n);				// Fakultät Funktion

void ergebnis_ausgeben(int n, int anzahl_summanten); //Gibt Ergebnis aus





//------------- H A U P T P R O G R A M M --------------------------------------

int main()

{

	ueberschrift_ausgeben();

	int n = n_eingeben();


	//Bestimmen der Summanten (n+1) (Summanten = Zahl der benötigten Koeffizienten)

	int anzahl_summanten = n + 1;	//Zahl der Summanten ist immer n+1

	cout<<"Zahl der Summanten: "<<anzahl_summanten<<endl;;

	cout<<endl;



	ergebnis_ausgeben(n, anzahl_summanten);

	cout<<"fertig";

	return 0;



};






//########################################################################################

//------------- F U N K T I O N E N --------------------------------------------


void ueberschrift_ausgeben()

{

	cout<<"###############################"<<endl;

	cout<<"# Programm zum zur Berechnung #"<<endl;

	cout<<"#  von Funktionen der Form    #"<<endl;

	cout<<"#          (a+^n            #"<<endl;

	cout<<"###############################"<<endl;

	cout<<endl;

};



int n_eingeben()

{

	cout<<"Geben sie n ein: "; int n; cin>>n;

	if(n<0)

	{

		cout<<"Nur positive Zahlen!"<<endl;

		n = n_eingeben();

	};

	return n;

};



int fact(int n) // Fakultät Funktion

{

   if(n==0)

      return 1;

   else

      return n*fact(n-1);

};	



int koeffizient(int n, int m) // Pascalsches Dreieck, nte Spalte, mte Reihe

{

	int tmp_factN = fact(n);

	int tmp_factM = fact(m);

	int tmp_factMn = fact(n-m);


	return tmp_factN / (tmp_factM * tmp_factMn);

};


void ergebnis_ausgeben(int n, int anzahl_summanten)

{

	//Ergebniss ausgeben

	cout<<"(a+^"<<n<<" = "<<endl;

	cout<<"   ";   //Formatierung der Ausgabe

	for(int y=0; y<=anzahl_summanten; y++)

	{

		cout<<"    "<<koeffizient(n, y);

		cout<<" * ";

		cout<< "a^"<<n-y<<" * "<<"b^"<<n-(n-y); 

		cout<<endl;

		if(y<anzahl_summanten-1)

		{	

		cout<<" + ";

		};

	};

};

[/code]

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...