Übungsaufgabe Pythagoras-Dreieck



  • Hallo alle zusammen!

    Ich bin was die Programmiererei angeht eine absolute Anfängerin und bräuchte mal
    eure Hilfe bei einer Übungsaufgabe, irgendwie geht das nicht so wie ich mir das vorstelle;
    Hier mal die Angabe:
    Drei integers l>0, m>0 und n>0 bilden ein rechtwinkliges Dreieck,
    wenn l^2 + m^2 = n^2.
    Nun sollen wir ein Programm schreiben, dass alle Dreierkombinationen
    mit n<=40 und l<=m berechnet und genau diese Ergebnisse ausgibt.

    So sieht jetzt mal mein Ansatz aus, aber es kommt eine unüberschaubare
    Anzahl von Fehlermeldungen dass ich mich nun noch weniger auskenne 😞

    #include <stdio.h>

    main()

    {
    int n = 1,2,3,...,40;
    int l >0;
    int m >0;

    (l*l)+(m*m) = (n*n);

    printf("\n l m n \n");
    printf'(\n %f %f %f, l, m, n );

    return 0;

    }

    Bitte nicht schimpfen, ich weiß ich habe da einen Schei** fabriziert...



  • int n = 1,2,3,...,40;
    int l >0;
    int m >0;
    

    ist falsch! als erstes musst du einfach die variablen geeignet initialisieren. so etwa:

    int n=0,l=0,m=0;
    

    was "int" ist, ist dir klar?
    die bedingungen <40 etc. musst du über schleifen erfüllen.

    printf'(\n %f %f %f, l, m, n );
    

    %f ist der Platzhalter für float Zahlen (für int %i)

    richtiger wäre also:

    printf("%i",l);
    


  • So... aber ich brauche ja die floating numbers als Ergebnis, weil
    bei so ner Berechnung doch sicher keine ganzen Zahlen rauskommen, dachte ich.
    Oder muss ich die int dann in float konvertieren?

    Und kann ich in der Anfangsbedingung nicht schreiben, dass l,m und n
    größer als 0 sein müssen?

    Dann... die Schleife initialisiere ich dann mit while... also bis mein n 40 erreicht hat?

    Uiuiui, so viele Fragen - danke schonmal für die Mühe!!



  • Lalelu schrieb:

    So... aber ich brauche ja die floating numbers als Ergebnis, weil
    bei so ner Berechnung doch sicher keine ganzen Zahlen rauskommen, dachte ich.

    Wenn du eine ganze Zahl mit sich selbst multiplizierst, kommt wieder eine ganze Zahl heraus.

    Lalelu schrieb:

    Und kann ich in der Anfangsbedingung nicht schreiben, dass l,m und n
    größer als 0 sein müssen?

    Weil es in C so etwas wie eine "Anfangsbedingung" nicht gibt.



  • Lalelu schrieb:

    So... aber ich brauche ja die floating numbers als Ergebnis, weil
    bei so ner Berechnung doch sicher keine ganzen Zahlen rauskommen, dachte ich.
    Oder muss ich die int dann in float konvertieren?

    Also wenn nicht mindestens l oder m ganzzahlig sein MUSS, dann gibt es doch für jedes n unendlich viele Lösungen, oder irre ich mich?



  • Quark - in der Aufgabe heißt es ja:

    Drei Integers ....

    Also brauchst Du auch keine floats. Du nimmst einfach alle Quadratzahlen von 1 bis 40 und überprüfst, ob Du sie aus der Summe zweier anderer (kleinerer) Quadratzahlen bilden kannst ...



  • so in der Art müsste dein Quelltext aussehen (keine Gewähr auf Richtigkeit).
    Ich habs nur mal auf die Schnelle hingeschrieben...

    Das Ganze läßt man natürlich noch viel besser und performanter programmieren 😉

    [

    l = 0;
    pruef = 0;
    
    WHILE n <= 40
    {
    	n^ = n * n;
    
    	m = n - 1;
    
    	WHILE (m > 0)
    	{
    		m^ = m * m;
    		l = 1;
    
    		WHILE l < m
    		{
    			pruef = (l * l) + m^;
    
    			if (pruef < n^)
    			{
    				l++;
    			}
    			else if (pruef > n^)
    			{
    				break;	
    			}
    			else
    			{
    				korrekt -> ausgeben;
    			}
    		}
    
    		m--;
    	}
    
    	n--;
    }
    


  • Falls dir einmal langweilig ist, kannst du ja das da lesen.

    Jedenfalls kommt die Sache auf Wikipedia weit verständlicher rüber:
    http://de.wikipedia.org/wiki/Pythagoräische_Tripel


Anmelden zum Antworten