Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Informatik in der Schule (http://www.informatikerboard.de/board/board.php?boardid=21)
--- Unterprogramme in C (http://www.informatikerboard.de/board/thread.php?threadid=62)


Geschrieben von Yoshee am 23.10.2006 um 05:01:

  Unterprogramme in C

Hi, ich habe folgendes Progamm:

int main (void)
{

int jahr, gebjahr, alter;
printf ("\nAktuelles Jahr: ");
scanf ("%d", &jahr);
printf ("\nGeburtsjahr: ");
scanf ("%d", &gebjahr);
alter = jahr - gebjahr;
AusgabeAlter (alter);
return (0);
}
void AusgabeAlter (int a) {
printf("\nDas Alter betraegt %d Jahre\n\n",a);
}

Das AusgabeAlter habe ich ja schon als Unterprogamm geschrieben, jetzt will ich auch das Eingabe Jahr als Unterprogamm schreiben, möglichst mit
eigener variable. Das Unterprogamm hab ich:

int Eingabe Jahr(void) {
int year;
printf ("\nAktuelles Jahr: ");
scanf ("%d", &year);
return (year);
}
Ich weiß jetzt nicht, wie ich das Pogramm "einleite". Ich hab schon alles mögliche probiert, kann mir bitte jemand helfen?
danke

Yoshee



Geschrieben von ed209 am 23.10.2006 um 11:41:

 

Um den Rückgabewert zu erhalten musst du das Ergebnis der Funktion der Variable zuweisen. Der Funktionsname sollte aus nur einem Wort bestehen.
Es ist auch nicht verkehrt, sich schon bei kleineren Programmen anzugewöhnen Kommentare zu Unterprogrammen einzufügen.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
int main (void)
{
   int jahr, gebjahr, alter;
   jahr=Eingabe_Jahr();
   ...
}


// Eingabe_Jahr liest eine Jahreszahl von der Tastatur ein.

int Eingabe_Jahr(void) 
{
   int year; 
   printf ("\nAktuelles Jahr: ");
   scanf ("%d", &year);
   return (year);
}



Gruss,
ED



Geschrieben von Yoshee am 23.10.2006 um 11:58:

 

mhh, jetzt krieg ich folgende Fehlermeldung:

\quell.cpp(8) : error C2065: 'year': nichtdeklarierter Bezeichner
.\quell.cpp(8) : error C3861: "Zusatz": Bezeichner wurde nicht gefunden.
.\quell.cpp(18) : error C2365: "Zusatz": Erneute Definition; vorherige Definition war "Ehemals unbekannter Bezeichner".

Ich versteh auch nicht woher das Programm weiß, dass Variable year= Variable jahr ist...



Geschrieben von ed209 am 23.10.2006 um 12:27:

 

Zitat:
Original von Yoshee
mhh, jetzt krieg ich folgende Fehlermeldung:

\quell.cpp(8) : error C2065: 'year': nichtdeklarierter Bezeichner
.\quell.cpp(8) : error C3861: "Zusatz": Bezeichner wurde nicht gefunden.
.\quell.cpp(18) : error C2365: "Zusatz": Erneute Definition; vorherige Definition war "Ehemals unbekannter Bezeichner".

Ich versteh auch nicht woher das Programm weiß, dass Variable year= Variable jahr ist...


Sorry das war ein Flüchtigkeitsfehler, ich meinte jahr statt year oben.
Ich änder das mal oben.

Aber ich halte es für keine gute Idee plain-C als C++ zu kompilieren. Das würde ich sauberer Trennen (hab mal an einem Projekt gesponnen, daß C und C++ wild gemischt hat, das war wirklich furchbar).

Gruss,
ED

PS: Aber woher das Wort "Zusatz" kommt, ist mir schleierhaft.



Geschrieben von Yoshee am 23.10.2006 um 12:30:

 

achso, das war ein Flüchtigkeitsfehler von mir, ich hab das Unterprogramm "zusatz" genannt.... Augenzwinkern

ähm, kann ich mit microsoft vc++ in c kompilieren? oder mss ich jetzt alles umscheiben?



Geschrieben von Yoshee am 24.10.2006 um 00:19:

 

Ok, ich habs jetzt in C hinbekommen.
Nächste Frage:
Ich soll folgende Korektur einbauen:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
int Korr (int j) {
	if (j < 20) {
		j = j +2000;
	}
	else {
		if (j < 100) {
			j = j + 1900;
		}
	}
	return (j );}


Ich hab
code:
1:
alter = Korr();

und
code:
1:
Korr (alter);

probiert, aber das scheint ja beides falsch zu sein...
kann mir jemand beim aufrufen helfen?



Geschrieben von evok am 24.10.2006 um 20:16:

 

Zitat:
Original von Yoshee
Ok, ich habs jetzt in C hinbekommen.
Nächste Frage:
Ich soll folgende Korektur einbauen:

Ich hab
code:
1:
alter = Korr();

in diesem fall gibst du deiner Funktion Korr nichts mit, woher soll sie also wissen welchen wert das j hat, (geschweige denn dass es mit einem compiler error abgebrochen ist)
Zitat:

und
code:
1:
Korr (alter);


in diesem fall gibst du zwar das aktuelle alter in die funktion mit, rechnest in der Funktion auch prima damit, lieferst es auch prima zurück heraus, jedoch weist du den zurückgelieferten wert niemals deiner ursprünglichen variable im Hauptprogramm zu.

Verstehst du was ich meine?
Wenn du eine Funktion haben willst, die einen Wert verändert hast du zwei Möglichkeiten:
die eine wären Pointer (aber da ich annehme dass du das noch nicht kannst nehmen wir die zweite und dies läuft über den Return value, nur solange du den Return value keiner anderen Variable im Hauptprogramm zuweist arbeitet dein Unterprogramm/Funktion zwar munter vor sich hin, aber leider interessiert sich niemand für das Ergebnis, also den Rückgabewert.
Quintessenz dieses elend langen Bandwurmsatzes ist die Funktion mit dem Parameter Alter aufzurufen und gleichzeitig dem Alter zuzweisen.
Ich poste die Lösung bewusst nicht weil ich sehn will ob du verstanden hast was ich meine

lg
h


Forensoftware: Burning Board, entwickelt von WoltLab GmbH