c-Programm Hilfe



  • Dann wende dich doch an deinen Lehrer, wenn du Fragen hast.



  • Max Mustermannnn schrieb:

    Was ist jetzt an diesem Programm so katastrophal? 😃

    Die Zeilen 1 bis 5 sind nicht katastrophal.

    Ab dann frühzeitige Variablen, keine Problemzerlegung Funktionen, ausgerollte Schleifen die zudem lügen, unnötige Zwischenergebnisse, unsinnige Kommentare weil immewr noch keine Problemzerlegung Funktionen, und getchar() am Ende.



  • volkard schrieb:

    Max Mustermannnn schrieb:

    Was ist jetzt an diesem Programm so katastrophal? 😃

    Die Zeilen 1 bis 5 sind nicht katastrophal.

    Ab dann frühzeitige Variablen, keine Problemzerlegung Funktionen, ausgerollte Schleifen die zudem lügen, unnötige Zwischenergebnisse, unsinnige Kommentare weil immewr noch keine Problemzerlegung Funktionen, und getchar() am Ende.

    Was meinst du mit den Schleifen die "lügen"?

    Bin noch Anfänger in C bzw. allgemein Programmieren...



  • Kopierter Code ist scheiß Code.
    VLA benutzen nur Deppen.



  • Wutz schrieb:

    Kopierter Code ist scheiß Code.
    VLA benutzen nur Deppen.

    Was kopierter Code?


  • Mod

    Max Mustermannnn schrieb:

    Wutz schrieb:

    Kopierter Code ist scheiß Code.
    VLA benutzen nur Deppen.

    Was kopierter Code?

    Zwei Aspekte am Codekopieren sind "scheiße":
    1. Code von anderen Leuten zu kopieren ohne ihn zu verstehen. Hast du hier vermutlich nicht gemacht, aber komm lieber auch nicht auf die Idee, das später irgendwo zu machen.
    2. In einer Idealvorstellung kommen in einem Programm keine zwei Zeilen vor, die sich auch nur ähnlich sehen. Wenn jemand sein Programm per Copy&Paste zusammensetzt - was du hier offensichtlich getan hast - dann ist das das komplette Gegenteil. Das zeigt, dass du nicht die nötigen Abstraktionen durchgeführt hast, die für gute Programmierung nötig wären¹.

    ¹: Ja, du bist Anfänger, das entschuldigt deine mangelnde Fähigkeit dazu. Das ändert aber nichts am Fakt, dass das so ist.



  • Hab jetzt nicht die Möglichkeiten, das nachzuvollziehen, aber was passiert wohl, wenn ich '1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111" oder 'D' oder sowas eingebe?



  • SeppJ schrieb:

    Max Mustermannnn schrieb:

    Wutz schrieb:

    Kopierter Code ist scheiß Code.
    VLA benutzen nur Deppen.

    Was kopierter Code?

    Zwei Aspekte am Codekopieren sind "scheiße":
    1. Code von anderen Leuten zu kopieren ohne ihn zu verstehen. Hast du hier vermutlich nicht gemacht, aber komm lieber auch nicht auf die Idee, das später irgendwo zu machen.
    2. In einer Idealvorstellung kommen in einem Programm keine zwei Zeilen vor, die sich auch nur ähnlich sehen. Wenn jemand sein Programm per Copy&Paste zusammensetzt - was du hier offensichtlich getan hast - dann ist das das komplette Gegenteil. Das zeigt, dass du nicht die nötigen Abstraktionen durchgeführt hast, die für gute Programmierung nötig wären¹.

    ¹: Ja, du bist Anfänger, das entschuldigt deine mangelnde Fähigkeit dazu. Das ändert aber nichts am Fakt, dass das so ist.

    Kopiert hab ich hier gar nichts^^.

    Hab den bis zu den Schleifen auch alles selbst geschrieben, aber ab da hat mir dann der Lehrer sehr geholfen.

    Bei der Eingabe häng ich jetzt eben rum, da ich nicht wirklich weiß, wie ich da mit Schleifen arbeiten kann..



  • EOP-... schrieb:

    Hab jetzt nicht die Möglichkeiten, das nachzuvollziehen, aber was passiert wohl, wenn ich '1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111" oder 'D' oder sowas eingebe?

    Meinst du in einer Zeile die ganzen 1en eingeben?

    Das würde nicht funktionieren, da man pro Zeile nur 9 Ziffern eingeben kann.



  • Max Mustermannnn schrieb:

    Das würde nicht funktionieren, da man pro Zeile nur 9 Ziffern eingeben kann.

    Nein.
    scanf liest bei %d Dezimalzahlen ein.
    Die können durchaus aus mehreren Ziffern bestehen.

    Aber eine fehlerhafte Eingabe sollte erstmal nicht dein Problem sein.



  • DirkB schrieb:

    Max Mustermannnn schrieb:

    Das würde nicht funktionieren, da man pro Zeile nur 9 Ziffern eingeben kann.

    Nein.
    scanf liest bei %d Dezimalzahlen ein.
    Die können durchaus aus mehreren Ziffern bestehen.

    Aber eine fehlerhafte Eingabe sollte erstmal nicht dein Problem sein.

    Mein Problem ist ja nur, dass ich das Programm immer ein wenig umschreiben muss, bevor ich z.B von einem 3x3 Quadrat auf ein 9x9 Quadrat wechsle.



  • DirkB schrieb:

    Schleifen.
    Schon für die Zeilen hättest du eine Schleife nehmen müssen.
    Dann kannst du dadrin auch noch eine Schleife für die einzelnen Werte machen.



  • Wie DirkB schon geschrieben hat. Du hast den Code für deine Eingabe praktisch vor der Nase:

    for (j = 0; j<dim; j++) 
      { 
        int summe = 0; 
        int i = 0; 
       // i-te Zeile 
        for (i = 0; i<dim; i++) 
          summe = summe + quadrat [i][j]; 
        spaltensumme [j] = summe; 
      }
    

    ^^^^ Das hast du im Code selbst. Das heißt, du musst ja wissen, dass du durch alle indices durchgehst. Warum nicht so deine Eingaben abfragen?



  • Bierkorken schrieb:

    Wie DirkB schon geschrieben hat. Du hast den Code für deine Eingabe praktisch vor der Nase:

    for (j = 0; j<dim; j++) 
      { 
        int summe = 0; 
        int i = 0; 
       // i-te Zeile 
        for (i = 0; i<dim; i++) 
          summe = summe + quadrat [i][j]; 
        spaltensumme [j] = summe; 
      }
    

    ^^^^ Das hast du im Code selbst. Das heißt, du musst ja wissen, dass du durch alle indices durchgehst. Warum nicht so deine Eingaben abfragen?

    Was muss ich dann mit den ganzen Eingabefenster machen?

    Weiß nicht wirklich, wie ich da anfangen soll...



  • Nur nochmal als Tipp. Sieh dir mal eine deiner mehrfach gleich vorhandenen Zeilen an:

    scanf("%d", &quadrat[0][0] );
    

    Oder die indices mal anders dargestellt:

    scanf("%d", &quadrat[i][j] );
    

    Setz das mal im Zusammenhang mit dem Schleifenkonstrukt, dass du weiter unten im Code bereits verwendet hast.

    for (j = 0; j<dim; j++) 
      { 
        for (i = 0; i<dim; i++)
        {
          // Du erhälst hier die Indices i / j im Rahmen der Größe deines Quadrates
          // Wie wäre es hier mit deiner Eingabefunktion?
        }
      }
    


  • Bierkorken schrieb:

    Nur nochmal als Tipp. Sieh dir mal eine deiner mehrfach gleich vorhandenen Zeilen an:

    scanf("%d", &quadrat[0][0] );
    

    Oder die indices mal anders dargestellt:

    scanf("%d", &quadrat[i][j] );
    

    Setz das mal im Zusammenhang mit dem Schleifenkonstrukt, dass du weiter unten im Code bereits verwendet hast.

    for (j = 0; j<dim; j++) 
      { 
        for (i = 0; i<dim; i++)
        {
          // Du erhälst hier die Indices i / j im Rahmen der Größe deines Quadrates
          // Wie wäre es hier mit deiner Eingabefunktion?
        }
      }
    

    Geht es so in die richtige Richtung:

    for (i=0; i<dim; i++)
      {
        for (j = 0; j<dim; j++)
          {
           printf("Eingabe der %i Zeile: ");
           scanf("%d", &quadrat[i][j] );
          }
      }
    
      for (j=0; j<dim; j++)
      {
        for (i=0; i<dim; i++)
          {
            printf("Eingabe der %i Zeile: ");
            scanf("%d", &quadrat[i][j]);
          }
      }
    
    [/quote]
    

    Das mit dem printf geht noch nicht wirklich



  • Du musst printf auch noch den Wert mitgeben, den du ausgeben möchest.

    Warum machst du das zweimal?

    Das printf ist in der falschen Zeile.
    Z.Zt wird es bei jedem Element ausgegeben. Im Text (von printf ) steht aber nur etwas von Zeile.



  • DirkB schrieb:

    Du musst printf auch noch den Wert mitgeben, den du ausgeben möchest.

    Warum machst du das zweimal?

    Das printf ist in der falschen Zeile.
    Z.Zt wird es bei jedem Element ausgegeben. Im Text (von printf ) steht aber nur etwas von Zeile.

    printf("Geben sie das Ergebnis des Quadrates ein: ");
      scanf("%d", &ergebnis);
    
      // Eingabe der Zeilen
      for (i=0; i<dim; i++)
      {
        // Eingabe der Spalten
        for (j=0; j<dim; j++)
        {
          printf("Eingabe %d. Zeile, %d. Spalte: ", i+1, j+1);
          scanf("%d", &quadrat[i][j] );
        }
      }
    [/quote]
    

    Habs jetzt


Anmelden zum Antworten