.j



  • Die Variablen untergrenze und obergrenze aus main haben mit den gleichnamigen Variablen aus grenzen_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



  • http://ideone.com/CA8AK

    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 mit geschlecht und disziplin .
    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.


Anmelden zum Antworten