.j
-
.j
-
Eine Möglichkeit wäre (ungetestet):
#include<stdio.h> struct grenzen { int ug; int og; }; grenzen grenzen_ermitteln(char geschlecht, char disziplin) { struct grenzen gr; char m, w; char L, H, W; int untergrenze, obergrenze; int *grenze1 = &untergrenze; int *grenze2 = &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; } printf("%d, %d\n", untergrenze, obergrenze); gr.ug = untergrenze; gr.og = obergrenze; return gr; } int main(void) { struct grenzen gr; 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'; gr = grenzen_ermitteln(geschlecht, disziplin); printf("%d, %d\n", gr.ug, gr.og); return 0; }
-
Die Variablen
untergrenze
undobergrenze
ausmain
haben mit den gleichnamigen Variablen ausgrenzen_ermitteln
gar nichts zu tun.Wozu brauchst du die Variablen
char m, w; char L, H, W;
?
Du setzt in der Funktion Zeichen ein, die genauso aussehen wie die Variablennamen, aber auch das sind verschiedene Sachen.Deine Funktion
grenzen_ermitteln
soll einen int Wert zurückgeben.
Bei deinem return ist aber kein Wert/Variable angegebn.Da du nach Zeigern fragst:
Die Zeiger musst du an die Funktion übergeben.int grenzen_ermitteln(char geschlecht, char disziplin, int *ogrenze, int *ugrenze ) { // ogrenze und ugrenze sind jetzt Zeiger // Die Adresse bekommst du von der aufrufenden Funktion // Da die Funktion jetzt weiss wo die Variable liegt, kann sie ihren Wert ändern. int untergrenze, obergrenze; ... // Deine Berechnung hier *ogrenze =obergrenze; *ugrenze =untergrenze; return 0; }
Und in main sieht der Aufruf dann so aus:
grenzen_ermitteln(geschlecht, disziplin, &obergrenze, &untergrenze); // ^ mit dem Adressoperator übergibst du die Adresse von obergrenze
-
.j
-
Hallo,
Warum willst du es nicht online Stellen? Genau genommen sieht das bisherige nicht so aus, als wenn das ein anderer Klauen möchte.
Grüße und tschuldigung für die Ehrlichkeit.
-
.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... -.-