Addieren der Werte in einem Array



  • Hallo,

    ich beschäftige mich noch nicht so lange mit C++ und habe jetzt ein Problem, an dem ich verzweifle. Und zwar hab ich ein kleines Prog geschrieben, das am Anfang die durchläufe einlesen soll (var=m). Dann werden Werte in ein Array eingelesen (mit einer for Schleife und Bedingun, bei m auzusteigen). Nun möchte ich die Wert des Arrays addieren (dh koord[1]=5, koord[2]=67, koord[m]= usw)
    Es sollen jetzt nur die Werte addiert werden. Also in dem Fall 5+67+m usw. Hatte es mit einer for Schleife veruscht und einem neuen Array aber das hat leider nicht funktioniert. Übrigens soll die Schleife dann (falls man dazu eine Schleife verwendet) wieder bei m abbrechen.

    Vielen Dank im Voraus!



  • verstehe nicht ganz was du meinst aber schau dir mal
    std::accumulate()
    an
    zeig mal an deinem source was du bis jetzt hast
    lässt sich dann vielleicht auch leichter erkennen was du genau meinst.



  • #include <valarray>       
    using namespace std;
    ...
            valarray<int> koord(m);
            koord[1] = 5;
            koord[2] = 67;
            koord[m-1]= 8; //[m-1] = letzter Index
    
            int result = koord.sum(); //Fertig!
    

    🙂



  • //Polygon.cpp
    
    /* Datei: Polygon.cpp
       Autor: 
       Datum: 
       Zweck: Berechnung eines Polygon */
    
    # include <iostream>
    # include <cmath>
    
    using namespace std;
    
    /* void Koordinaten()
    {
         int koord[cntpts]; */
    
    int main()  
    
    {
        unsigned short cntpts;
        int i,j,k,l,m,n,r; //i counter in der "dreier" Bedingung, j counter für das Array
        double koordx[99], koordy[99], laenge[99],gl[100], offen[100];
            char weiter;
    
          for (int r=0; r<99; r++)
         {
         gl[r]=0; koordx[r]=0; koordy[r]=0; laenge[r]; offen[r]=0;
         } 
    
          begin: // Sprungstelle für goto Anweisung    
          cout << "Wieviele Punkte moechtest Du eingeben (minimal drei Punkte)?" << endl;
          cin >> cntpts; //liest die max. Anzahl der Koordinaten ein
    
          if (cntpts>2)
          {
          cout << "Du hast " << cntpts << " Punte ausgewaehlt." << endl;    //Textausgabe
          j=0;
          k=0;
          l=0;
    
       for (int i=1; i<4; i++)
         {
          j++; 
          l++; //counter für die zweite schleife           
          cout << "Bitte geb die Koordinaten nacheinander ein." << endl;
          cin >> koordx[j]; //liest die erste Koordinate in das Array ein
          cin >> koordy[j]; //liest die zweite Koordinate in das zweite Array ein
          cout << "Du hast (" << koordx[j] <<"|" << koordy[j] <<") eingegeben" << endl;    //Textausgabe 
         }
    
         for (int k=3; k<cntpts;)
          {
          cout << "Moechten Sie eine weitere Koordinate eingeben (J/N) druecken!";
          cin >> weiter;
    
          if (weiter=='j')
           {
           j++;
           k++;               
           cout << "Bitte geb die Koordinaten ein." << endl;
           cin >> koordx[j]; //liest die erste Koordinate in das Array ein
           cin >> koordy[j]; //liest die zweite Koordinate in das zweite Array ein
           cout << "Du hast (" << koordx[j] <<"|" << koordy[j] <<") eingegeben" << endl;    //Textausgabe 
           }
          else
           if (weiter=='J')
           {
           j++;
           k++;
           cout << "Bitte geb die Koordinaten ein." << endl;
           cin >> koordx[j]; //liest die erste Koordinate in das Array ein
           cin >> koordy[j]; //liest die zweite Koordinate in das zweite Array ein
           cout << "Du hast (" << koordx[j] <<"|" << koordy[j] <<") eingegeben" << endl;    //Textausgabe 
           }
          else
           if (weiter=='n')
           {
           cout << "Das Programm berechnet nun das Polynom." << endl;
           k=11;
           }
            else
             if (weiter=='N')
             {
             cout << "Das Programm berechnet nun das Polynom." << endl;
             k=11;
             }
             else
             cout <<"Ungueltige Eingabe. Bitte nur mit (J/N) antworten." << endl;
    
            }
    
            cout <<"Ausgabe der Arraywerte." << endl;
    
         for (int m=0; m<j ;)
         {
          m++;    
         cout << koordx[m] << "|" << koordy[m] << endl;
         laenge[m]=pow((pow((koordx[m+1]-koordx[m]),2) + pow((koordy[m+1]-koordy[m]),2)),0.5);
         cout << laenge[m] << endl;
         }
     // Hier hätte ich jetzt gerne, das er mir die Länge ausgibt!! Das ganze ist zur Berechnung eine offenen Polygons (im zweiten Schritt ein geschlossenes - aber das folgt noch)
         cin.get();
         }
         else
         {
         cout << "Der Wert war zu klein. Das Programm startet neu." << endl;
         goto begin;
         }
    
    cin.get();
    cin.get();
    
    return 0;
    }
    

    Falls mein Quellcode nicht so toll ist bitte ich das zu entschuldigen. Bin wie gesagt noch Anhfänger.

    Hier mal die Aufgabenstellung:
    Schreiben Sie ein Programm zur Längen-Berechnung eines Polygons.

    Zunächst soll die Anzahl der Punkte eingegeben werden.

    Danach sind in einer Schleife die Koordinaten der einzelnen Punkte einzulesen.

    Unabhängig von der vg. Anzahl sind mindestens dier Punkte zu ermitteln. anschließend ist bis zum Erreichen der eingegebenen Anzahl nach jedem Punkte-Paar die Frage: noch mal (j/n) zu stellen. es werden nur die Buchstaben j,J n,N akzepteiert. Ansonsten beliebig lange Wiederholung der Aufforderung.

    Wird die Eingabe mit nein abgeschlossen oder ist die zu Anfang ermittelte Anzahl erreicht, soll anschließend die Länge des offenen und geschlossenen Polygons ausgegeben werden.

    Noch eine Frage zu
    int ergebnis = koord.sum(); kann mir das jemand kurz erklären 🙄
    vielleicht ist es schon die Lösung meines Problems.

    Grüße



  • #include <iostream>
    #include <valarray>       
    using namespace std; 
    ... 
            valarray<int> koord(0, m);             // alle arraywerte  auf0, m = arraygrösse
            for (int i = 0; i < m; i++)
                    cin >> koord[i], cin.flush(); // werte einlesen
    
            int result = koord.sum();  //Summe aller Werte im Array wird zurückgegeben.  
    ...
    


  • Ich erkenne zwar das, das richtig aussieht aber sowas wie

    valarray<int> koord(0, m);             // alle arraywerte  auf0, m = arraygrösse
    
    int result = koord.sum();  //Summe aller Werte im Array wird zurückgegeben.
    

    hab ich noch nie angewannt und weiß nicht so recht wie es dann fertig aussehen soll 😕 Kannst Du es nicht in dem Beispiel an einer Stelle einfügen? Die restlichen bekomme ich dann schon hin.
    Wäre super nett!

    Wieso reicht hier cin nicht!?

    cin >> koord[i], cin.flush(); // werte einlesen
    


  • Und noch eine Frage. Muss ich zwingend die Größe des Arrays am Anfang festlegen oder kann ich die Größe nicht mit Hilfe einer Variablen festlegen..!?



  • Habs jetzt hinbekommen. Gut ding brauch weile 😉

    Danke für eure Hilfe!



  • ja, cin.flush gibt's nicht.
    Dein Programm:

    #include <iostream> 
    #include <cmath> 
    #include <valarray> 
    using namespace std; 
    
    int main()   
    { 
            valarray<double> koordx, koordy, laenge;
            unsigned cntpts;
            double zuklein; 
            char weiter;
    do{   
            do{
                    cout << "Wieviele Punkte moechtest Du eingeben (minimal drei Punkte)?" << endl;
    
                    cin >> cntpts;
            }while(cntpts < 3);  
            cout << "Du hast " << cntpts << " Punkte ausgewaehlt." << endl; 
    
            koordx = valarray<double>(0.0, cntpts);
            koordy = valarray<double>(0.0, cntpts);
            laenge = valarray<double>(0.0, cntpts);
    
            for (unsigned int i = 0; i < cntpts; i++){ 
                  cout << "Moechten Sie Koordinaten eingeben (J/N, j/n) druecken!"; 
                  cin >> weiter; 
                  if (weiter == 'J' || weiter == 'j'){
                       cin >> koordx[i], cin >> koordy[i];
                       cout << "Du hast (" << koordx[i] <<" | " << koordy[i] <<") eingegeben" << endl;
                       continue;
                  }
                  if (weiter == 'N' || weiter == 'n') break;
                  cout <<"Ungueltige Eingabe. Bitte nur mit (J/N, j/n) antworten." << endl; 
                  i--;
            }
            cout <<"Ausgabe der Arraywerte." << endl; 
            for (unsigned int m = 0; m < (cntpts-1); m++){ 
                 cout << koordx[m] << "|" << koordy[m] << endl; 
                 laenge[m]=pow((pow((koordx[m+1]-koordx[m]),2) + pow((koordy[m+1]-koordy[m]),2)),0.5); 
                 cout << laenge[m] << endl; 
    
                 cout << laenge[m] << endl;
            }
            zuklein = laenge.sum();
    
            if (zuklein < 3.0)
            cout << "Der Wert war zu klein. Das Programm startet neu." << endl; 
    }while(zuklein < 3.0);
    return 0; 
    }
    

    🕶



  • Soll das der gesamte Quelltext sein? Funktioniert bei mir nich.. oder hast Du einen Teil weggelassen. Im übrigen soll er die ersten drei Paare einlesen und dann die Abfrage starten... 😉

    Greetz


Anmelden zum Antworten