Kleine Frage zu C - Programm funktioniert nicht



  • Warum führt er das unten nicht aus?

    wenn ich " int iterativ(int a, int b) "
    herausnehme unt nur

    int a;
    int b;

    schreibe, geht es. aber so nicht, weshalb?

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(){
    
    // iterativ
    
    	int iterativ(int a, int b)
    
    {
    	printf("Geben Sie a ein");
    	scanf("%d",&a);
    	printf("Geben Sie b ein");
    	scanf("%d",&b);
    
        if (a == 0)                          //Wenn a=0 ist b der größte gemeinsame Teiler laut Definition
        {
            return b;
        }
        while(b != 0)                        //Solange wiederholen, solange b nicht 0 ist.
        {
            if (a > b)
            {
                    a = a - b;               //Wenn a größer als b, subtrahiere b von a.
            } else
            {
                    b = b - a;               //In jedem anderen Fall subtrahiere a von b.
            }
    
        }
        printf("ggT: %d\n",a);
        return a;                            //In a steht jetzt der größte gemeinsame Teiler von a und b.
    
    }
    
    }
    


  • Du kannst keine Funkton innerhalb einer anderen Funktion definieren. Du musst die Funktion iterativ ausserhalb der main-Funktion definieren. Dann kannst du die Funktion iterativ aus der main-Funktion aufrufen:h

    #include <stdio.h>
    #include <stdlib.h>
    
    int iterativ(int a, int b)
    {
        printf("Geben Sie a ein: ");
        scanf("%d",&a);
        printf("Geben Sie b ein: ");
        scanf("%d",&b);
    
        if (a == 0)                          //Wenn a=0 ist b der größte gemeinsame Teiler laut Definition
        {
            return b;
        }
        while(b != 0)                        //Solange wiederholen, solange b nicht 0 ist.
        {
            if (a > b)
            {
                    a = a - b;               //Wenn a größer als b, subtrahiere b von a.
            } else
            {
                    b = b - a;               //In jedem anderen Fall subtrahiere a von b.
            }
    
        }
        printf("ggT: %d\n",a);
        return a;                            //In a steht jetzt der größte gemeinsame Teiler von a und b.
    
    }
    
    int main()
    {	
    	int ggT = iterativ(2, 3);
    }
    

    *Edit
    Ich habe jetz nicht geschaut ob das Programm richtig rechnet. Aber so kompiliert es zumindest und laesst sich ausfuehren.



  • Bedanke mich vielmals 👍



  • Eine weitere Frage:

    Ist es möglich bei der
    int iterativ(int a, int b) Funktion
    ohne printf, den Return-Wert auszugeben?

    Weil ich habe hier noch eine rekursive Version:

    int euklid(int c, int d){
    
    {
    	        if (d == 0) {
                                 return c;
    
            } else if (c == 0) {
    
                    return d;
            } else if (c > d) {
    
                    return euklid(c - d, d);
            } else {
                    return euklid(c, d - c);
            }
    
    }
    }
    

    Wäre es bei beiden Funktionen möglich ohne in jeder else Abzweigung einfach den
    letztlichen return Wert herausgeben zu lassen (was in dem Fall der ggT wäre).



  • Du kannst das printf selbstverständlich auch in der main machen.

    ....
    int main()
    {   
    //    int ggT = iterativ(2, 3);
    
          printf("ggT_iterativ: %d\n", iterativ(2, 3));
          printf("ggT_rekursiv: %d\n", euklid(2, 3));
    }
    

Anmelden zum Antworten