If-Else Exit


  • Gesperrt

    Eher an for (int k=0 ; k <= anzahl; k++), for (int k=0 ; k < anzahl; k++) sollte es in Ordnung bringen, da sonst die Schlaufe einmal zuviel durchlaufen wird.



  • @titan99_

    Habe es geändert. Leider gibt er wieder 6,06..aus auch wenn die 4 und folgende nachkommastelle ein bisschen anders ist als vorher


  • Gesperrt

    Kann es so nicht genau sagen, aber eventuell kann es auch noch daran liegen, dass ein double mit einem size_t dividiert wird. Vielleicht cout << "leistung:" << (gesamtpower/static_cast<double>(anzahl));?



  • @titan99_ sagte in If-Else Exit:

    Edit: Also normalerweise sollte es so sein, auf Ideone geht es trotzdem.

    Das geht nur bei C99-fähigen Compilern, die das für C++ übernehmen. Nennt sich VLA (variable-length array) und ist kein C++.

    @NoobHunter12 Zeig doch mal deinen kompletten bisherigen Code, also von dem ersten include bis zur abschließenden Klammer von main.



  • @yahendrik

    #include <iostream>
    #include <string>
    #include <strings.h>
    
    using namespace std;
    
    typedef struct
    {
    string manufacturer;
    string model;
    string serialNumber;
    int weight;
    int power;
    int numDoors;
    }Vehicle;
    
    const size_t maxVehicles {10}; // Definition der Fuhrparkgröße
    
    void copyVehicle(const Vehicle &Fahrzeug1, Vehicle &Fahrzeug2) //Alle Werte von Fahrzeug1 werden in Fahrzeug2 
    kopiert
    {
     Fahrzeug2 = Fahrzeug1;
    }
    
    void writeVehicle(const Vehicle &fahrzeug)  //Ausgabe der Fahrzeuge
    {
      cout << fahrzeug.manufacturer << '\n';
      cout << fahrzeug.model << '\n';
      cout << fahrzeug.serialNumber << '\n';
      cout << fahrzeug.weight << '\n';
      cout << fahrzeug.power << '\n';
      cout << fahrzeug.numDoors << '\n';
      cout << "\n";
    }
    
    
    size_t readVehicle(Vehicle *fahrzeug)
    {
     size_t anzahl {0};
    
     setlocale(LC_ALL,"GERMAN"); // Bib. für deutsche Umlaute - Quelle: Google; [Benutzt in der Nutzerabfrage]
    
       while(anzahl < maxVehicles)  // Sicherstellen, dass Speicher nicht überfüllt
       {
       string antwort;
    
      while(antwort != "ja" && antwort != "nein") // Erneute Abfrage bei Fehleingabe
      {
         cout << "Möchten Sie ein Fahrzeug eingeben? (ja/nein)\n";
         cin >> antwort;
      }
    
      if(antwort == "nein") // Falls kein Fahrzeug mehr eingelesen werden soll - Anzahl zurückgeben
         return anzahl;
    
    //Datentyp Vehicle, Name kfz
      Vehicle kfz;
    
      cout << "Wer ist der Hersteller des Fahrzeugs?\n";
      cin >> kfz.manufacturer;
    
      cout << "Welches Modell ist das Fahrzeug?\n";
      cin >> kfz.model;
    
      cout << "Wie lautet die Seriennummer?\n";
      cin >> kfz.serialNumber;
    
      cout << "Wie schwer (in kg) ist das Fahrzeug?\n";
      cin >> kfz.weight;
    
      cout << "Wie viel Leistung (in PS) hat das Fahrzeug?\n";
      cin >> kfz.power;
    
      cout << "Wie viele Türen hat das Fahrzeug?\n";
      cin >> kfz.numDoors;
    
    
    
      copyVehicle(kfz, fahrzeug[anzahl++]);
      }
    
       return anzahl; // Erhöhte Anzahl zurückgeben
     }
    
    double averagePower( Vehicle*fahrzeug,size_t anzahl)
    
    {
    
    double gesamtpower {0};
    for (int k=0 ; k < anzahl; k++)
     {
    
    gesamtpower= gesamtpower + fahrzeug[k].power;
    
     }
    cout << "leistung:" << (gesamtpower/anzahl);
    return (gesamtpower/anzahl);
    };
    
    
    
    
    
    
    
    
    
    
    
    int main()
    {
      Vehicle fahrzeug[maxVehicles];//Array
    
    
     size_t anzahl = readVehicle(fahrzeug);
     cout << "Eingegebene Fahrzeuge:\n\n";
     for(size_t i{0}; i < anzahl; ++i)
    {
      writeVehicle(fahrzeug[i]); // Ausgabe der eingegebenen Fahrzeuge. i=1 -> 2tes Fahrzeug der Arrayliste ausgeben
    };
    
    
    
    //double H = averagePower(const Vehicle*fahrzeug, size_t anzahl);
    cout << "\nDie durchschnittliche Leistung ist: " <<averagePower(fahrzeug,maxVehicles);
    //cout << "Leistung:" << averagePower(gesamtpower/static_cast<double>(anzahl));
     //for (size_t k{0}; k <= anzahl; k++)
    //{
      //averagePower(fahrzeug.power[k]);
    //};
    }
    

    lasst euch bitte nicht von den ganzen versuchen in der main verwirren.. bin blutiger anfänger


  • Gesperrt

    Ja, ähm. Was ist denn der Unterschied zwischen der Variable anzahl und maxVehicles im Ablauf des Programms? Also in Zeile 125 sollten sie vertauscht werden.



  • @titan99_
    maxvehicles legt in zeile 17 die array größe fest und anzahl ist die anzahl der tatäschlich eingelesenen fahrzeuge (dachte ich zumindest?!)



  • Um zu testen, kannst du es auch erst einmal alles direkt hinschreiben. Du musst nicht bei jedem Testlauf alles mühsam eingeben:

    size_t readVehicle(Vehicle *fahrzeug)
    { 
    	Vehicle vehicle;
    	vehicle.weight=1000;
    	vehicle.numDoors=5;
     
    	vehicle.power=200;
    	copyVehicle(vehicle, fahrzeug[0]);
    	vehicle.power=100;
    	copyVehicle(vehicle, fahrzeug[1]);
    	vehicle.power=20;
    	copyVehicle(vehicle, fahrzeug[2]);
    	return 3;
    // dein Code steht noch hier
    }
    

    Und wenn du die Zeile 125 entsprechend änderst, sollte es klappen. Du hast allerdings noch eine überflüssige Ausgabe in averagePower, die kannst du rausnehmen.
    Mit den Daten sollte also 320.0/3=106.667 herauskommen. Beachte die 3.
    3 Datensätze, nicht maxVehicles=10.



  • cout << averagePower(fahrzeug, anzahl) << '\n';

    statt:
    int main()
    {
    cout<<"\nDie durchschnittliche Leistung ist: " <<averagePower(const Vehicle*fahrzeug, size_t anzahl);
    }

    Wie kommt man eigentlich auf die Idee, solche Programme zu schreiben, wenn man nicht mal die Grundlagen ansatzweise kennt?



  • @Belli
    @yahendrik

    danke für eure Bemühung 🙂

    cout << "\nDie durchschnittliche Leistung ist: " <<averagePower(fahrzeug,anzahl);
    

    hat das Problem gelöst. Die Durchschnittsleistung wird jetzt richtig ausgegeben.

    und @Belli :

    Das ist ganz einfach. Der Kurs ist ein Pflichtteil meines Studiums. Ich muss ihn also machen. Dank Corona gibt es niemanden (außer wöchentlich ein einstündiges Video-Meeting) der einem C++ beibringt. Dazu kommt dass ich sowieso schon meine Schwierigkeit mit dem Programmieren habe. So kommt also eins zum Anderen 🙂
    Habe mir aber jetzt einen Nachhilfelehrer für die kommenden Wochen gesucht um die Abgaben irgendwie zu schaffen.



  • @NoobHunter12 sagte in If-Else Exit:

    Dank Corona gibt es niemanden (außer wöchentlich ein einstündiges Video-Meeting) der einem C++ beibringt.

    Und uns hier 😄



  • @Belli
    In der Tat 😃 ihr habt mich echt gerettet!


Anmelden zum Antworten