[Algorithmus gesucht] Pascalsche Dreieck



  • Hi, ich bin auf der Suche nach einem Algorithmus um das Pascalsche Dreieck zu zeichnen. Dabei dürfen keine Arrays oder ähnliches verwendet werden. Dass man das ganze in ein 2dimensionales array packen kann weiß ich auch. Ich würds aber gern nur in ein paar Schleifen ausrechnen.

    Ist das möglich?



  • Wenn du es nur Zeichnen willst, reicht es ja, wenn du nur die letzte und die aktuelle Zeile
    jeweils in einem (ein-dim) Array speicherst. Alternativ kannst du jede Zahl im Dreieck durch
    einen Binominalkoeffizienten beschreiben. Letzteres ist mathematisch hübscher, wenn du aber
    ein großes Dreieck zeichnen willst, wird das wahrscheinlich viel zu viel rechnerei (durch die
    Fakultäten).



  • Taurin schrieb:

    Alternativ kannst du jede Zahl im Dreieck durch
    einen Binominalkoeffizienten beschreiben.

    Könntest du das bitte genauer beschreiben? Ich bin ehrlichgesagt ziemlicher anfänger 😞



  • Binomialkoeffizient - müsstest aber auch in jedem Mathebuch etwas dazu finden.

    Am Ende würde es dann wahrscheinlich ungefähr so aussehen (Achtung, ist nur ein schneller Entwurf. Geht natürlich noch viel schöner und vor allem sicherer):

    #include <iostream>
    
    //Fakultät berechnen
    int fakultaet(int x)
    {
    
    	if (x==0) return 1;
    	else
    	{
    		int erg(1);
    
    		for (int i(x);i>1;--i)
    		{
    			erg*=i;
    		}
    
    		return erg;
    	}
    }
    
    //----------------------------------------------------------------------------------
    
    //Binomialkoeffizient berechnen
    int nUeberK(int n, int k)
    {
    
    	if (k==0) return 1;
    	else return ( fakultaet(n) / ( fakultaet(k) * fakultaet(n - k) ) );
    
    }
    
    //----------------------------------------------------------------------------------
    
    int main()
    {
    
    	std::cout<<"Pascalsches Dreieck:\n";
    	std::cout<<"--------------------\n\n";
    
    	int numberOfLines;
    	std::cout<<"Wieviele Zeilen des Pascalschen Dreiecks sollen dargestellt werden? ";
    	std::cin>>numberOfLines;
    	std::cout<<"\n";
    
    	for (int i(0);i<numberOfLines;++i)
    	{
    
    	std::cout<<"Zeile "<<i<<": ";
    
    		for (int j(0);j<i+1;++j)
    		{
    			std::cout<<nUeberK(i, j)<<"|";
    		}
    
    	std::cout<<"\n";
    
    	}
    
    	std::cout<<"\n\nZum Beenden ENTER druecken.\n";
    	std::cin.ignore();
    	std::cin.get();
    
    	return 0;
    
    }
    


  • Den Binomialkoeffizienten würde ich anders berechnen...
    Hatte die Funktion schonmal gepostet:

    template<typename T> 
      T Binomial(unsigned n, unsigned k) 
    { 
      if(k > n) return 0; 
      if(k == n) return 1; 
    
      T rval = 1; 
      for(unsigned i = n; i != k; --i) 
        rval *= i; 
      for(unsigned i = n - k; i != 1; --i) 
        rval /= i; 
    
      return rval; 
    }
    


  • MaSTaH schrieb:

    Hatte die Funktion schonmal gepostet

    Bei mir 😃
    Hier der Link mit ein paar anderen Möglichkeiten für den Binomialkoeffizienten und Fakultäten auszurechnen


Anmelden zum Antworten