If-Else Exit



  • @titan99_
    Funktioniert leider nicht - Vehicle sei dann "redeclared" 😐


  • Gesperrt

    @NoobHunter12 Ja wenn es genau so steht, es ist nur als Hinweis gedacht. Dann übergibst du halt das bereits deklarierte Vehicle an averagePower und löschst die Redeklaration.



  •  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
    

    Vielleicht ist dir das ja eine Hilfe.
    Ich möchte das Ergebniss der Funktion averagePower in der Main ausgeben.
    Mein Array habe ich mit " Vehicle fahrzeug[maxVehicles]; deklariert


  • Gesperrt

    Also ich erahne so, dass averagePower(fahrzeug, maxVehicles) anstelle von averagePower(vehicles, 10) stehen sollte. Aber maxVehicles muss konstant sein, bzw. zur Kompilierzeit feststehen, sonst geht das nicht.

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



  • @titan99_

    ohja er rechnet jetzt tatsächlich was 😍
    allerdings nicht ganz richtig.
    Wenn ich vorher für fahrzeug1 20 ps eingebe und für fahrzeug2 10 ps eingebe gibt er mir 6,06ps als Mittelwert aus.
    Könnte das an meinem return in der averagePower Funktion liegen?

    Edit: auch wenn ich andere Werte für die Leistung der Fahrzeuge eingebe gibt er trotzdem den gleichen Mittelwert aus (6,069...)


  • 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