ggT berechnen funzt net ; (



  • Hallo Zusammen,

    um das Programm darzustellen nutze ich code blocks. Leider verstehe ich nicht warum bei dieser Programmierung immmer nur ein ggT (größtem gemeinsamen Teiler) von "eins" heraus kommt. Ich habe die Schritte (wie ich sie mir vorstelle) auf einem Papier durchgearbeitet und komme auf einen ggT von "drei" bei einem Bruch von 24/9 . Im Programm aber nur auf "eins".

    Vielen Dank im Voraus für eure Hilfe.
    P.S. :Ich bin c-Beginner ; )

    #include <stdio.h>

    int x;
    int y;

    main()
    {
    printf("Geben Sie den Z\x84hler ein: \n");
    scanf(" %d", &x);
    printf("Geben Sie den Nenner ein: \n");
    scanf(" %d", &y);

    while(x!=y)
    {
    if(x>y)
    x = x - y;
    else(x>y);
    y = y - x;
    }
    printf("\n\nDer gr\x94\xe1te gemeinsame Teiler ist: %d\n\n\n",x);
    return(0);
    }



  • Da steht mal etwas schöner dargestellt:

    while(x!=y)
    {
      if(x>y)
        x = x - y;
      else
       (x>y);   // Was soll das sein?
    
      y = y - x;
    }
    

    Eine Bedinging gibt es nicht bei else. Das kann nur der unwahre Fall vom if sein.



  • Den Fehler hatten wir doch vorgestern gerade erst. Was ist da los? Hat JW ein neues Buch geschrieben?

    Wie dem auch sei, Ausdrücke ohne Nebeneffekte werden in C mit Ausdrücken ohne Nebeneffekten so weit wie möglich über einen Kamm geschoren. Ich kann ohne Probleme

    int main(void) {
      1; /* <-- Ausdruck ohne Nebeneffekt */
    
      return 0;
    }
    

    schreiben; der Ausdruck bewirkt nur halt einfach nichts. Und genau das passiert hier in deinem else-Zweig. Wenn du schreibst

    if(x>y) { /* Blockklammern sind hier eine gute Invesitition/Angewohnheit. */
        x -= y;
      } else {
        (x > y);  /* x wird mit y verglichen; der Wert des Ausdrucks wird nicht benutzt. */
      }
    

    ...ist der Netto-Effekt deines else-Zweigs aus dem gleichen Grund Null.


Log in to reply