If-Else Exit



  • @NoobHunter12 sagte in If-Else Exit:

    Ich hoffe ich konnte alle Fehler beheben (?)

    Der Compiler sagt: NEIN!



  • @DirkB

     double Mittelwert = (fahrzeug[k].power+x)/anzahl;
    

    in der Zeile hatte ich natürlich das +x vergessen.

    double averagePower(const Vehicle*fahrzeug, size_t anzahl)
    {
    int x;
    for (int k ; k < anzahl; k++)
      {
    double Mittelwert = (fahrzeug[k].power+x)/anzahl;
    
    cout<< Mittelwert;
    return Mittelwert;
      }
    };
    

    So steht mein Code aktuell drin und der Compiler merkt nichts an. (Ob damit die gewünschte Aufgabe erfüllt wird ist noch unklar)
    Ja die Summe ist = Addition aller Einzelwerte geteilt durch die Anzahl der Einzelwerte.



  • @NoobHunter12

    ist noch unklar

    Nein, das ist klar: sie wird nicht erfüllt.



  • Vor der Schleife:
    double gesamtpower{0};
    In der Schleife:
    gesamtpower = gesamtpower + fahrzeug[k].power;
    Nach der Schleife:
    return gesamtpower / anzahl;

    Was soll x?



  • @Belli

    double averagePower(const Vehicle*fahrzeug, size_t anzahl)
    {
    double gesamtpower {0};
    for (int k ; k < anzahl; k++)
      {
        gesamtpower= gesamtpower + fahrzeug[k].power;
      }
       return gesamtpower/ anzahl;
    };
    

    Das ist dann jetzt die Funktion..
    Das heißt doch dass die Funktion am Ende den Durchschnittswert returned bekommt richtig?
    Wenn ich dann in der Main den Wert ausgeben lassen möchte muss ich "nur" die Funktion averagePower in der Main aufrufen?



  • Die Funktion returned dss, was hinter return steht ...
    Im Schleifenkopf sollte k noch initialisiert werden!

    Und dann testen, was passiert, das musst Du doch nicht alles fragen?!



  • @Belli

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

    So möchte ich mir jetzt die Durchschnittsleistung ausgeben lassen.
    Fehler error: expected primary-expression before "const"


  • Gesperrt

    @NoobHunter12 Vielleicht sowas?

    int main()
    {
        Vehicle vehicles[10];
        cout << "Die durchschnittliche Leistung ist: " << averagePower(vehicles, 10) << endl;
    }
    

    Kann nicht genauer anhand der letzten Beiträge erkennen, was genau stehen muss.

    Edit: Obwohl ist vielleicht nicht so gut, aber so ist es auch nur wenig besser. Je nach dem.

    #include <iostream>
    #include <array>
    
    int main()
    {
        std::array<Vehicle, 10> vehicles;
        std::cout << "Die durchschnittliche Leistung ist: " << averagePower(vehicles.data(), vehicles.size()) << std::endl;
    }
    


  • @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?!)


Anmelden zum Antworten