Array mit double-Wertebereich füllen
-
#include <cmath> #include <iostream> #include <iomanip> #define _USE_MATH_DEFINES #include <math.h> using namespace std; int main() { const int N = 100; double x[N] = {}; double y[N] = {}; double x_min = 0; double x_max = 2*M_PI; double x_delta = (x_max - x_min) / N; for (int i = 0; i < N; i++) { x[i] = x_min + x_delta + i * x_delta; y[i] = (sin((x[i])) * sin((x[i]))); cout << fixed; cout << setprecision(2); cout << i; cout << " Xwerte: " << x[i] << endl; cout << "Ywerte: " << y[i] << endl; //cout << "test: " << x[i + 1] - x[i]<< endl; <= hierfuer immernoch keine Lösung } }
hatte es jetzt wie du sagst oft mit den kleinen Werten probiert jetzt hab ich alle ergebnisse ich habe ein x_delta noch addiert in der schleife. Jetzt sollte es aber stimmen, oder?
-
@Ricky sagte in Array mit double-Wertebereich füllen:
for (int i = 0; i < N; i++) {
x[i] = x_min + x_delta + i * x_delta;Jetzt sollte es aber stimmen, oder?
Nein. Du fängst ja nicht bei
x_min
an, sondern beix_min + x_delta
.Auch das hier:
double x_delta = (x_max - x_min) / N;
Ob das wohl richtig ist? Angenommen du hast N=2. Also zwei Punkte, bei denen du das berechnen willst. Dann solltest du bei
x_min
und beix_max
einen Punkt haben, würde ich denken (ok, ist unterdefiniert, aber das wäre meine Annahne). Ob da dann nicht vielleicht ein-1
fehlt?Wie @SeppJ sagte: spiel dir das für kleine Zahlen selbst durch und überlege, was rauskommen soll.
-
@wob wenn ich doch n- 1 rechne dann berechne ich doch nicht mehr N sondern nur noch /99 statt 100, dass ist doch das was @SeppJ meinte, oder nicht? aber selbst mit dem -1 habe ich es versucht, es klappt nicht. ich weiß einfach wirklich nicht mehr weiter Leute, ich habe es mit kleinen Zahlen probiert... von 0-1 und nur 10 zahlen dann kommt als Ergebnis 0.1 raus schön und gut, aber trotzdem kriege ich den Maximalwert nicht raus wenn ich den minimalwert noch einbeziehen möchte, egal wie ich es mache, aber ist ja auch logisch da ich ja nicht bis zum N in der schleife gehe, sondern nur kleiner N bleibe, aber sobald ich da ein = mache kriege ich Bereichsüberschreitung. also in der schleife habe ich es probiert for(int i = 0; i<=N;i++) funktioniert nicht for(int i = 1 ; <= N ;i++) funktioniert nicht. ich habe jetzt wirklich viel probiert, aber ich komme nicht auf die Lösung. Egal was ich mache ich kriege entweder den minimalenwert, oder den max. wert raus. Jedesmal wenn ich denke jetzt müsste es logisch sein, wieder was anderes... ich habe mit der Aufgabe am Samstag angefangen. Das ist für mich sehr demotivierend wenn ich weiß das ich nichtmal die ersten zwei Aufgaben hinbekomme.
-
@Ricky Wenn du einen 10 m langen Zaun aufstellen sollst und die Pfosten 1 m Abstand haben. Wieviel Pfosten brauchst du?
Wenn du nur 6 Pfosten hast, wie lang ist dann der Abstand?
-
@Ricky: Ich habe mal deinen Code genommen und entsprechend angepaßt: Ideone-Code - funktioniert und läuft von
0.00
bis6.28
.
-
@Ricky sagte in Array mit double-Wertebereich füllen:
0-1 und nur 10 zahlen dann kommt als Ergebnis 0.1 raus
nö:
min = 0
max = 1
anzahl = 10
abstand = (max - min) / (anzahl - 1) != 0.1
-
@Ricky sagte in Array mit double-Wertebereich füllen:
#include <cmath> #include <iostream> #include <iomanip> #define _USE_MATH_DEFINES #include <math.h> using namespace std; int main() { const int N = 100; double x[N] = {}; double y[N] = {}; double x_min = 0; double x_max = 2; double x_ges = (x_max - x_min) / N; for (int i = 0; i < N; i++) { x[i] = x_min + i * x_ges * M_PI; y[i] = (sin((x[i])) * sin((x[i]))); cout << fixed; cout << setprecision(2); cout << "Xwerte: " << x[i] << endl; cout << "Ywerte: " << y[i] << endl; } }
@Th69 Also hatte hier nur das -1 an der stelle gefehlt... Danke dir auf jeden Fall.
@DirkB kommt drauf an der Zaun brauch ja noch an den Enden jeweils Pfosten also insgesamt 11 bei 0m-1er Pfosten bei 1m - 2er Pfosten, bei 2m- 3er Pfosten usw. bis zur zehn und zehn hat auch einen Pfosten also 10m - 11er Pfostenauf alle Fälle vielen Dank für die zahlreichen Antworten... ich bin euch sehr dankbar... ich werde euch allen in diesem Forum aber bestimmt noch des Öfteren auf die nerven gehen... der Studiengang ist noch lang...
-
Dieser Beitrag wurde gelöscht!
-
Verschieb noch das
M_PI
aus Zeile 20 in die Zeile 16. Sonst musst du deine Obergrenzen immer in Einheiten von Pi angeben, was recht unpraktisch klingt.Ansonsten bin ich nicht sicher, ob das wirklich das ist, was du möchtest. Ich habe zwar oben erklärt, wie du technisch gesehen die Seitenabstände wählen kannst, wie du möchtest. Und das tust du auch, und es erfüllt technisch gesehen die Aufgabe. Aber du hast eine recht komische Wahl getroffen, und ich habe den Verdacht, dass du das nicht bewusst durch Verständnis des Problems getan hast, sondern weil du einfach nur herumprobiert hast. Ob das so im Sinne des Aufgabenstellers ist?
Angenommen x_min wäre 1, x_max wäre 4, und N wäre auch 4. Du sollst also 4 Werte zwischen 1 und 4 erzeugen mit gleichem Abstand. Die meisten Leute würden hier doch intuitiv 1, 2 ,3, 4 antworten. Andere nach längerem Nachdenken vielleicht 1.6, 2.2, 2.8, 3.4 (alles hat Abstand 0.6, und der Abstand zum Rand ist auch 0.6). Du sagst aber 1, 1.75, 2.5, 3.25. Technisch gesehen richtig, aber eine interessante Wahl.
Wenn dein Prof nun sagt, "Entschuldigung, so habe ich die Aufgabe nicht gemeint, können Sie das schnell ändern zu 1,2,3,4 (oder 1.6, 2.2, 2.8, 3.4)?", kannst du das dann? Ich habe das Gefühl, du könntest es nicht, und ich empfehle dir dringend, das Problem so zu durchdringen, bis du es kannst. An solch einfachen Problemen zu üben ist wichtig, weil es dir die Bausteine gibt, um später komplexe Probleme zu lösen, und dich lehrt, gängige Fehler zu vermeiden.
-
@SeppJ sagte in Array mit double-Wertebereich füllen:
Andere nach längerem Nachdenken vielleicht 1.6, 2.2, 2.8, 4.4
3.4 am Ende?
-
@wob sagte in Array mit double-Wertebereich füllen:
@SeppJ sagte in Array mit double-Wertebereich füllen:
Andere nach längerem Nachdenken vielleicht 1.6, 2.2, 2.8, 4.4
3.4 am Ende?
Ups, Tippfehler. Korrigiert. Danke!