.j
-
.j
-
Das Programm verwendet globale Variablen zur Übergabe von Daten aus der Funktion an das Hauptprogramm. Sowas ist anfängerhaft und somit erstmal unverdächtig für deinen Lehrer.
-
.j
-
sowas hab ich ja noch nie gesehen?
untergrenze <= weitwurfpunkte <= obergrenze
das schon eher...
if(weitwurfpunkte >= untergrenze
&& weitwurfpunkte <= obergrenze){...}
-
.j
-
du musst der variable urkunde schon i'wo einen wert zuweisen...
also in z.146 return urkunde;
in z.174 urkunde = urkunde_ermitteln(...und in urkunde_ermitteln solltest du geschlecht und disziplin i'wie setzen
disziplin wird auch vom programm geraten, oder? da fehlt doch ein scanf(" %c", &disziplin);
upps. disziplin = 'L'; hab ich überlesen, sry
-
_-- schrieb:
du musst der variable urkunde schon i'wo einen wert zuweisen...
also in z.146 return urkunde;
in z.174 urkunde = urkunde_ermitteln(...und in urkunde_ermitteln solltest du geschlecht und disziplin i'wie setzen
disziplin wird auch vom programm geraten, oder? da fehlt doch ein scanf(" %c", &disziplin);
upps. disziplin = 'L'; hab ich überlesen, sry
So, hab jetzt das mit dem return 0; zu return urkunde; geändert. In der main-Funktion hab ich auch vor dem Aufruf der Funktion urkunde = ... geschrieben.
Aber in urkunde_ermitteln hab ich doch in den if-Abfragen immer abgefragt, ob geschlecht männlich oder weiblich ist und wie die Disziplin ist? Warum muss ich das dann nochmal auf irgendwas setzen?
Ich hab ja bis jetzt nur disziplin = 'L'; in der main-Funktion stehen, das heißt, ich müsste wenigstens für diese Disziplin eine Urkunde ausgegegeben bekommen, was aber keider nicht der Fall ist.
-
_-- schrieb:
und in urkunde_ermitteln solltest du geschlecht und disziplin i'wie setzen
ich kanns einfach nicht anders erklären, tut mir leid.
-
#include<stdio.h> int grenzen_ermitteln(char geschlecht, char disziplin, int *ogrenze, int *ugrenze) { int untergrenze, obergrenze; if(geschlecht == 'm' && disziplin == 'L') { untergrenze = 400; obergrenze = 800; } else if(geschlecht == 'm' && disziplin == 'H') { untergrenze = 300; obergrenze = 600; } else if(geschlecht == 'm' && disziplin == 'W') { untergrenze = 500; obergrenze = 1000; } else if(geschlecht == 'w' && disziplin == 'L') { untergrenze = 360; obergrenze = 720; } else if(geschlecht == 'w' && disziplin == 'H') { untergrenze = 270; obergrenze = 540; } else if(geschlecht == 'w' && disziplin == 'W') { untergrenze = 450; obergrenze = 900; } *ogrenze = obergrenze; *ugrenze = untergrenze; return 0; } char urkunde_ermitteln(int laufpunkte, int hochsprungpunkte, int weitwurfpunkte, int untergrenze, int obergrenze) { char geschlecht; char disziplin; char urkunde, T, E, S; //printf("%d, %d\n", untergrenze, obergrenze); if(geschlecht == 'm' && disziplin == 'L') { if(laufpunkte < untergrenze) { urkunde = 'T'; } else if(laufpunkte >= untergrenze && laufpunkte <= obergrenze) { urkunde = 'S'; } else if(laufpunkte > obergrenze) { urkunde = 'E'; } } else if(geschlecht == 'm' && disziplin == 'H') { if(hochsprungpunkte < untergrenze) { urkunde = 'T'; } else if(hochsprungpunkte >= untergrenze && hochsprungpunkte <= obergrenze) { urkunde = 'S'; } else if(hochsprungpunkte > obergrenze) { urkunde = 'E'; } } else if(geschlecht == 'm' && disziplin == 'W') { if(weitwurfpunkte < untergrenze) { urkunde = 'T'; } else if(weitwurfpunkte >= untergrenze && weitwurfpunkte <= obergrenze) { urkunde = 'S'; } else if(weitwurfpunkte > obergrenze) { urkunde = 'E'; } } else if(geschlecht == 'w' && disziplin == 'L') { if(laufpunkte < untergrenze) { urkunde = 'T'; } else if(laufpunkte >= untergrenze && laufpunkte <= obergrenze) { urkunde = 'S'; } else if(laufpunkte > obergrenze) { urkunde = 'E'; } } else if(geschlecht == 'w' && disziplin == 'H') { if(hochsprungpunkte < untergrenze) { urkunde = 'T'; } else if(hochsprungpunkte >= untergrenze && hochsprungpunkte <= obergrenze) { urkunde = 'S'; } else if(hochsprungpunkte > obergrenze) { urkunde = 'E'; } } else if(geschlecht == 'w' && disziplin == 'W') { if(weitwurfpunkte < untergrenze) { urkunde = 'T'; } else if(weitwurfpunkte >= untergrenze && weitwurfpunkte <= obergrenze) { urkunde = 'S'; } else if(weitwurfpunkte > obergrenze) { urkunde = 'E'; } } return urkunde; } char urkunde_ausgeben(char disziplin, char urkunde) { printf("100m-Lauf: %c\n", urkunde); printf("Hochsprung: %c\n", urkunde); printf("Weitwurf: %c\n", urkunde); return urkunde; } int main(void) { int laufpunkte, hochsprungpunkte, weitwurfpunkte; char geschlecht, disziplin, urkunde; int untergrenze, obergrenze; printf("Bitte Punkte fuer 100m-Lauf, Hochsprung und Weitwurf (durch Komma getrennt) eingeben: "); scanf("%d, %d, %d", &laufpunkte, &hochsprungpunkte, &weitwurfpunkte); printf("Bitte Geschlecht eingeben (m oder w): "); scanf(" %c", &geschlecht); disziplin = 'L'; grenzen_ermitteln(geschlecht, disziplin, &obergrenze, &untergrenze); urkunde = urkunde_ermitteln(laufpunkte, hochsprungpunkte, weitwurfpunkte, untergrenze, obergrenze); urkunde_ausgeben(disziplin, urkunde); return 0; }
Meinst du das so? In Zeile 50? Leider gibt er mir immer noch nichts aus.
Leider gibt er
-
Deiner Funktion
urkunde_ermitteln
gibst du laufpunkte, hochsprungpunkte, weitwurfpunkte, untergrenze und obergrenze mit.
In der Funktion arbeitest du aber mitgeschlecht
unddisziplin
.
Woher soll die Funktion die denn kennen?Es ist auch erstmal eine gute Idee, Variablen zu initialisieren.
D.h. bei der Definition einen Wert zuzuweisen.
Das könnte in Zeile 50 so aussehen:char urkunde ='u'; // u für unbekannt
Die Variablen T, E und S brauchst du nicht.
-
Jetzt bin ich soweit, dass er mir zu jeder Disziplin ein u ausgibt.
#include<stdio.h> int grenzen_ermitteln(char geschlecht, char disziplin, int *ogrenze, int *ugrenze) { int untergrenze, obergrenze; if(geschlecht == 'm' && disziplin == 'L') { untergrenze = 400; obergrenze = 800; } else if(geschlecht == 'm' && disziplin == 'H') { untergrenze = 300; obergrenze = 600; } else if(geschlecht == 'm' && disziplin == 'W') { untergrenze = 500; obergrenze = 1000; } else if(geschlecht == 'w' && disziplin == 'L') { untergrenze = 360; obergrenze = 720; } else if(geschlecht == 'w' && disziplin == 'H') { untergrenze = 270; obergrenze = 540; } else if(geschlecht == 'w' && disziplin == 'W') { untergrenze = 450; obergrenze = 900; } *ogrenze = obergrenze; *ugrenze = untergrenze; return 0; } char urkunde_ermitteln(int *lauf, int *hochsprung, int *weitwurf, int *ugrenze, int *ogrenze) { int laufpunkte, hochsprungpunkte, weitwurfpunkte, untergrenze, obergrenze; char geschlecht; char disziplin; char urkunde = 'u'; //printf("%d, %d\n", untergrenze, obergrenze); if(geschlecht == 'm' && disziplin == 'L') { if(laufpunkte < untergrenze) { urkunde = 'T'; } else if(laufpunkte >= untergrenze && laufpunkte <= obergrenze) { urkunde = 'S'; } else if(laufpunkte > obergrenze) { urkunde = 'E'; } } else if(geschlecht == 'm' && disziplin == 'H') { if(hochsprungpunkte < untergrenze) { urkunde = 'T'; } else if(hochsprungpunkte >= untergrenze && hochsprungpunkte <= obergrenze) { urkunde = 'S'; } else if(hochsprungpunkte > obergrenze) { urkunde = 'E'; } } else if(geschlecht == 'm' && disziplin == 'W') { if(weitwurfpunkte < untergrenze) { urkunde = 'T'; } else if(weitwurfpunkte >= untergrenze && weitwurfpunkte <= obergrenze) { urkunde = 'S'; } else if(weitwurfpunkte > obergrenze) { urkunde = 'E'; } } else if(geschlecht == 'w' && disziplin == 'L') { if(laufpunkte < untergrenze) { urkunde = 'T'; } else if(laufpunkte >= untergrenze && laufpunkte <= obergrenze) { urkunde = 'S'; } else if(laufpunkte > obergrenze) { urkunde = 'E'; } } else if(geschlecht == 'w' && disziplin == 'H') { if(hochsprungpunkte < untergrenze) { urkunde = 'T'; } else if(hochsprungpunkte >= untergrenze && hochsprungpunkte <= obergrenze) { urkunde = 'S'; } else if(hochsprungpunkte > obergrenze) { urkunde = 'E'; } } else if(geschlecht == 'w' && disziplin == 'W') { if(weitwurfpunkte < untergrenze) { urkunde = 'T'; } else if(weitwurfpunkte >= untergrenze && weitwurfpunkte <= obergrenze) { urkunde = 'S'; } else if(weitwurfpunkte > obergrenze) { urkunde = 'E'; } } *lauf = laufpunkte; *hochsprung = hochsprungpunkte; *weitwurf = weitwurfpunkte; *ugrenze = untergrenze; *ogrenze = obergrenze; return urkunde; } char urkunde_ausgeben(char disziplin, char urkunde) { printf("100m-Lauf: %c\n", urkunde); printf("Hochsprung: %c\n", urkunde); printf("Weitwurf: %c\n", urkunde); return urkunde; } int main(void) { int laufpunkte, hochsprungpunkte, weitwurfpunkte; char geschlecht, disziplin, urkunde; int untergrenze, obergrenze; printf("Bitte Punkte fuer 100m-Lauf, Hochsprung und Weitwurf (durch Komma getrennt) eingeben: "); scanf("%d, %d, %d", &laufpunkte, &hochsprungpunkte, &weitwurfpunkte); printf("Bitte Geschlecht eingeben (m oder w): "); scanf(" %c", &geschlecht); disziplin = 'L'; disziplin = 'H'; disziplin = 'W'; grenzen_ermitteln(geschlecht, disziplin, &obergrenze, &untergrenze); urkunde = urkunde_ermitteln(&laufpunkte, &hochsprungpunkte, &weitwurfpunkte, &untergrenze, &obergrenze); urkunde_ausgeben(disziplin, urkunde); return 0; }
Irgendwo ist immer noch ein richtig doofer Fehler drin, aber ich finde ihn einfach nicht.
Ich hab jetzt bei der 2. Funktion mit Zeigern gearbeitet. Ist das soweit richtig?
-
stellst du dich absichtlich blöd, oder willst du mich anflirten
-
_-- schrieb:
stellst du dich absichtlich blöd, oder willst du mich anflirten
Haha. -.-
Ich stehe gerade wirklich auf dem Schlauch...
-
Juli84 schrieb:
_-- schrieb:
stellst du dich absichtlich blöd, oder willst du mich anflirten
Haha. -.-
Ich stehe gerade wirklich auf dem Schlauch...stimmt, auf meinem und das taugt mir überhaupt nicht
-
_-- schrieb:
Juli84 schrieb:
_-- schrieb:
stellst du dich absichtlich blöd, oder willst du mich anflirten
Haha. -.-
Ich stehe gerade wirklich auf dem Schlauch...stimmt, auf meinem und das taugt mir überhaupt nicht
Hilft mir nicht wirklich bei meinem Problem weiter... -.-
-
dann geh ein paar schritte zurück, lies die posts und lös' unser beider probleme!
-
DirkB schrieb:
Deiner Funktion
urkunde_ermitteln
gibst du laufpunkte, hochsprungpunkte, weitwurfpunkte, untergrenze und obergrenze mit.
In der Funktion arbeitest du aber mit geschlecht und disziplin.
Woher soll die Funktion die denn kennen?Da nütz es auch nichts, wenn du die erst genannten Parameter als Zeiger übergibst, denn die willst du doch gar nicht verändern.
Deine Funktion muss so aussehen:char urkunde_ermitteln(int laufpunkte, int hochsprungpunkte, int weitwurfpunkte, int untergrenze, int obergrenze, char geschlecht, char disziplin) { char urkunde = 'u'; .... // deine Rest hier }
wie der Aufruf aussehen muss, kannst du dir hoffentlich denken.
-
DirkB schrieb:
DirkB schrieb:
Deiner Funktion
urkunde_ermitteln
gibst du laufpunkte, hochsprungpunkte, weitwurfpunkte, untergrenze und obergrenze mit.
In der Funktion arbeitest du aber mit geschlecht und disziplin.
Woher soll die Funktion die denn kennen?Da nütz es auch nichts, wenn du die erst genannten Parameter als Zeiger übergibst, denn die willst du doch gar nicht verändern.
Deine Funktion muss so aussehen:char urkunde_ermitteln(int laufpunkte, int hochsprungpunkte, int weitwurfpunkte, int untergrenze, int obergrenze, char geschlecht, char disziplin) { char urkunde = 'u'; .... // deine Rest hier }
wie der Aufruf aussehen muss, kannst du dir hoffentlich denken.
Vielen Dank, Dirk!
So, jetzt hab ich in der Ausgabe überall ein S stehen, was ja für Siegerurkunde steht. Aber laut Aufgabenstellung muss bei der Disziplin Hochsprung E, also Ehrenurkunde stehen. Muss ich nicht noch irgendwie festhalten, dass laufpunkte zum 100m-Lauf, hochsprungpunkte zu Hochsprung und weitwurfpunkte zu Weitwurf gehören?
-
jetzt weiß ich, warum frauen immer so schnell rauf kommen und doch nichts können... ein depp findet sich doch immer
-
Du hast doch aber nur eine Urkunde. So steht es in deinem Programm.
disziplin = 'L'; disziplin = 'H'; disziplin = 'W'; grenzen_ermitteln(geschlecht, disziplin, &obergrenze, &untergrenze); // hier rufst du mit diszipli zu 'W' auf urkunde = urkunde_ermitteln(&laufpunkte, &hochsprungpunkte, &weitwurfpunkte, &untergrenze, &obergrenze); // also berechnest du auch nur für 'W' urkunde_ausgeben(disziplin, urkunde);
Noch etwas:
Wenn du wie hier:char urkunde_ermitteln(int laufpunkte, int hochsprungpunkte, int weitwurfpunkte, int untergrenze, int obergrenze) { char geschlecht; char disziplin; if(geschlecht == 'm' && disziplin == 'L') ...}
eine Variable benutz, ohne ihr vorher einen Wert zugewiesen zu haben,
dann gibt es zwar keinen Fehler, aber der Compiler ist so nennt und warnt dich.
In der Art: "Benutzung der Variablen geschlecht ohne vorherige Zuweisung".Wenn du so eine Warnung nicht bekommen hast, musst du die Einstellungen für die Warnungen erhöhen.
Dann behandle Warnungen, als wären es Fehler.
Du kannst ein Programm so schreiben, dass es keine WArnungen mehr gibt.