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 nurint 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)); }