Pascalsches Dreieck



  • hi, ich hab da mal ein Problem mit einer Aufgabenstellung in meinen Programmierungsaufgaben...

    wir sollten ein Pascalsches Dreickeck programmieren was ich auch getan habe

    #include <stdio.h>
    #include <stdlib.h>
    
    unsigned long long fak(unsigned n)                  
    {
      unsigned long long result = 1;
      unsigned i = 1;
      for (; i <=n; ++i)
        result = result*i;
      return result;
    }
    
    unsigned binomial(unsigned n, unsigned k)           
    {
      return fak(n)/(fak(k)*fak(n-k));
    }
    
    int main ()                                         
    {
      unsigned max_n;
      printf("Maximales n (0-15)? ");                   
      if (scanf("%ud", &max_n) == 1)
        {
          unsigned zeichenbreite=7;                     
          if (max_n > 15)
            exit(1);
          else if (max_n >= 13)
            zeichenbreite = 5;
          else if (max_n >= 9)
            zeichenbreite = 4;
          else if (max_n >= 5)
            zeichenbreite = 3;
          else
            zeichenbreite = 2;
    
          char formatstring[6];
          sprintf(formatstring, "%%%uu ", zeichenbreite - 1);
    
          unsigned n, k;
          for(n = 0; n <= max_n; ++n)
            {
              int num_leer = ((max_n)/2. - n/2.)*zeichenbreite;
              int i;
              for(i = 0; i < num_leer; ++i)
                printf(" ");                                        
              for(k = 0; k <= n; ++k)
                {
                  printf(formatstring, binomial(n,k));              
                }
              printf("\n");
            }
        }
    
      return 0;
    }
    

    nun müssen wir wieder ein Pascalsches Dreieck programmieren aber diesmal ohne die Berechnung der Fakultäten und wir sollen ein 2D Array verwenden...

    leider hab ich keine Ahnung wie man ein 2D Array verwendet und hoffe das mir da jemand helfen kann...



  • Das ist auch nicht anders als ein 1D Array.

    int feld[11][22]; // macht ein 2D Array der Größe 11 x 22
    

    Und diese Konstrukt

    sprintf(formatstring, "%%%uu ", zeichenbreite - 1); 
    printf(formatstring, binomial(n,k));
    

    geht auch hübscher:

    printf("%*u ", zeichenbreite - 1, binomial(n,k)); // beachte den *
    


  • DirkB schrieb:

    Das ist auch nicht anders als ein 1D Array.

    int feld[11][22]; // macht ein 2D Array der Größe 11 x 22
    

    und es reicht diese Zeile in mein Programm einzufügen oder muss ich noch irgendwas anderes beachten?



  • #include<stdio.h>
    
    int pascal(int zeile, int spalte)
    {
        if (zeile*spalte == 0 || zeile==spalte)
        {
            return 1;
        }
        else
        {
            return (pascal(zeile-1, spalte-1) + pascal(zeile-1, spalte));
        }
    }
    
    void main(void)
    {
        int max;
        int i,j,l;
        printf("Dieses Programm berechnet das Pascalsche Dreieck bis zur eingegebenen Grenze.\n"
            "Bitte geben Sie eine Grenze ein: ");
        scanf("%i",&max);
    
        for (i = 0; i < max; i++)
        {
            for (l=0;l<2*(max-i);l++)
            {
                printf(" ");
            }
            for (j = 0; j<=i; j++)
            {
                printf("%*i", 5, pascal(i, j));
            }
            printf("\n");
        }
    }
    

    Hab hier im Forum ein Pascalsches Dreieck ohne die Berechnung der Fakultäten gefunden...
    kann mir jemand erklären wie ich das jetzt verändern muss damit ich ein 2D Array verwende?



  • proggn schrieb:

    und es reicht diese Zeile in mein Programm einzufügen oder muss ich noch irgendwas anderes beachten?

    Cool, damit hast Du quasi eben zugegeben, daß

    proggn schrieb:

    wir sollten ein Pascalsches Dreickeck programmieren was ich auch getan habe

    eine glatte Lüge ist ...



  • Swordfish schrieb:

    proggn schrieb:

    und es reicht diese Zeile in mein Programm einzufügen oder muss ich noch irgendwas anderes beachten?

    Cool, damit hast Du quasi eben zugegeben, daß

    proggn schrieb:

    wir sollten ein Pascalsches Dreickeck programmieren was ich auch getan habe

    eine glatte Lüge ist ...

    wie willst du denn daraus schließen das ich gelogen habe?

    ich habe keine ahnung wie man ein Array in einem Programm verwendet deswegen suche ich ja hilfe...



  • ok *chancegeb'*

    DirkB schrieb:

    int feld[11][22]; // macht ein 2D Array der Größe 11 x 22
    

    ... ist eine Deklaration.

    proggn schrieb:

    [...] und es reicht diese Zeile in mein Programm einzufügen [...] ?

    Gegenfrage: Reicht es aus, in irgendein x-beliebiges Programm eine ebenso x-beliebige Deklaration einzufügen um das Resultat entscheidend zu beeinflussen?



  • Swordfish schrieb:

    Gegenfrage: Reicht es aus, in irgendein x-beliebiges Programm eine ebenso x-beliebige Deklaration einzufügen um das Resultat entscheidend zu beeinflussen?

    nein es reicht nicht aus nur eine Deklaration einzufügen das ist mir schon klar...

    ich weiß aber nicht an welche Stellen ich mein Programm noch bearbeiten muss...

    ok vllt war die Frage vorhin ein bisschen blöd gestellt aber ich wollte ja nur verständlich erklärt haben wie man ein Array verwendet und wie man es in ein Programm einarbeitet...



  • proggn schrieb:

    leider hab ich keine Ahnung wie man ein 2D Array verwendet und hoffe das mir da jemand helfen kann...

    Ich bin davon ausgegangen, dass du zumindest weißt, wie man ein einfaches Array benutzt.

    proggn schrieb:

    ich weiß aber nicht an welche Stellen ich mein Programm noch bearbeiten muss...

    Weißt du denn wie du das Dreieck ohne Fakultät berechnen kannst?



  • proggn schrieb:

    #include<stdio.h>
    
    int pascal(int zeile, int spalte)
    {
        if (zeile*spalte == 0 || zeile==spalte)
        {
            return 1;
        }
        else
        {
            return (pascal(zeile-1, spalte-1) + pascal(zeile-1, spalte));
        }
    }
    
    void main(void)
    {
        int max;
        int i,j,l;
        printf("Dieses Programm berechnet das Pascalsche Dreieck bis zur eingegebenen Grenze.\n"
            "Bitte geben Sie eine Grenze ein: ");
        scanf("%i",&max);
    
        for (i = 0; i < max; i++)
        {
            for (l=0;l<2*(max-i);l++)
            {
                printf(" ");
            }
            for (j = 0; j<=i; j++)
            {
                printf("%*i", 5, pascal(i, j));
            }
            printf("\n");
        }
    }
    

    das ist doch ohne die Berechnung der Fakultäten...



  • In deiner Funktion pascal() greifst du über die Rekursion auf die darüber liegende Zeile zu.
    Wenn du die Werte vorher zeileweise ablegst, kannst du direkt zugreifen und musst nicht jedesmal neu berechnen.


Anmelden zum Antworten