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