Summe der Menge < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Aufgabe | [Dateianhang nicht öffentlich] |
Mein Ansatz lautet wie folgt:
1: |
| 2: | # include <iostream >
| 3: |
| 4: |
| 5: | int main (){
| 6: |
| 7: | int a[]={1,5,9,13};
| 8: | int sum;
| 9: |
| 10: | for (int x=0 ; x<=3; x++){
| 11: | for (int y=0 ; y <=3; y++){
| 12: | sum = a[y]+a[x];
| 13: | std::cout << sum << "/n";
| 14: | }}
| 15: |
| 16: |
| 17: |
| 18: | return 0;
| 19: | }
|
Das Programm wird zwar ausgeführt, ich erhalte jedoch nicht die werte, die ich gerne hätte.
Wie kann ich außerdem noch 2 Mengen voneinander unterscheiden, dass man zwei Zahlen (wie in der Aufgabenstellung) nicht doppelt addiert?
Wäre die Lösung durch y!=x erreichbar?
Es wird ja dadurch x=y als Summe addiert aber nicht umgekehrt?
Würde mich jedenfalls um jeden Rat freuen.
Dateianhänge: Anhang Nr. 1 (Typ: jpg) [nicht öffentlich]
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 17:49 Di 06.11.2007 | Autor: | Fibonacci- |
Sry ich habe gerade gemerkt, dass !y=x völliger unfug ist.
Vllt kann man das aber noch woanders mit einbinden.
|
|
|
|
|
Hallo,
um der Aufgabenstellung zu genügen, müsste Zeile 13 aber eher so aussehen:
std::cout << a[x] << " + " << a[y] << " = " << sum << "\n";
Dabei ist der Backslash zu beachten!
Zum eigentlichen Problem:
x!=y allein reicht nicht. Wie verhindern wir also, dass zwar a[x]+a[y], aber nicht a[y]+a[x] vorkommt? Wir könnten als Bedingung [mm] $y\ge [/mm] x$ wählen.
Das wollen wir aber nicht als zusätzliche Bedingung formulieren, sondern durch eine kleine Modifikation des bestehenden Codes erreichen.
Wie ändern wir also den Kopf der inneren for-Schleife, damit dies gewährleistet ist?
Gruß
Martin
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 19:11 Di 06.11.2007 | Autor: | Fibonacci- |
Es hat sich erledigt ;)
vielen Dank again :)
|
|
|
|
|
Da wir gerade dabei sind, möchte ich zusätzlich das ganze nochmal mit steps,limit und start versehen.
Bei dieser Aufgabe war die Menge {1,5,9,13}, dh
der start = 1 , step = 4 , limit = 13
Wie könnte man nun eine Operation der art ausführen, damit die selbe Ausgabe wie vorhin erfolgt (Rechenoperation)?
1: |
| 2: | # include <iostream >
| 3: | using namespace std;
| 4: |
| 5: | int main () {
| 6: |
| 7: | int start , step , limit, x=0, k=0 ;
| 8: |
| 9: | cout << " Wert von \" start \" eingeben : ";
| 10: | cin >> start ;
| 11: | cout << " Wert von \" step \" eingeben : ";
| 12: | cin >> step ;
| 13: | cout << " Wert von \" limit \" eingeben : ";
| 14: | cin >> limit ;
| 15: |
| 16: | for ( ; x <= limit ; ){
| 17: | x = start + step*k;
| 18: | k++;}
| 19: | cout >> x >> "\n";
| 20: | }
|
das x sollten die Werte der Menge sein, wobei k die Lauffaktor ist.
Bsp. die Menge {1,5,9,13}
die "5" hätte die Lauffaktor "1" !
start, step, limit sollten (wie oben) manuell eingegeben werden.
Das ist meine Idee und wollte fragen, wie sich das am günstigsten machen lässt?!
|
|
|
|
|
Hallo,
ich weiß nicht, ob ich das richtig verstanden habe, aber falls ja, dann sollte es in etwa so gehen. Ich habe aber vorher einige Fehler aus deinem Code entfernen müssen:
1: | # include <iostream >
| 2: | using namespace std;
| 3: |
| 4: | int main () {
| 5: |
| 6: | int start , step , limit, x, y;
| 7: |
| 8: | cout << " Wert von \" start \" eingeben : ";
| 9: | cin >> start ;
| 10: | cout << " Wert von \" step \" eingeben : ";
| 11: | cin >> step ;
| 12: | cout << " Wert von \" limit \" eingeben : ";
| 13: | cin >> limit ;
| 14: |
| 15: | for (x = start ; x <= limit ; x += step)
| 16: | for (y = x ; y <= limit ; y += step)
| 17: | printf("%3d + %3d = %4d\n", x, y, x+y); //alternative Ausgabe
| 18: | //cout << x << " + " << y << " = " << (x+y) << "\n";
| 19: | } |
Gruß
Martin
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 20:09 Di 06.11.2007 | Autor: | Fibonacci- |
Du hast es vollkommen richtig verstanden =)
vielen Dank...
ich bastel mal wieder weiter :P
|
|
|
|
|
Ich hab jetzt eine weitere Idee =)
Wir haben alle Rechenoperationen mit den selben x bzw y Faktor gelöscht!
Bsp: 4+1=5 ; 1+4=5
jetzt würde ich gerne wissen, wie der Quelltext aussieht, wenn ich die selben ergebnisse entferne?
Bsp: 5+9=14 ; 13+1=14 (ein von den beiden Rechenoperationen soll nicht ausgegeben werden!)
Kann mir da jemand auf die beine helfen?
|
|
|
|
|
Hallo,
nochmal den Text aus der PN:
Die einfachste Möglichkeit, wie wir gleiche Ergebnisse verhindern könnten, wäre:
1: | y = start;
| 2: | for (x = start ; x <= limit ; x += step)
| 3: | printf(" %3d + %3d = %4d\n", x, y, x+y); //alternative Ausgabe
| 4: | x -= step;
| 5: | for (y += step ; y <= limit ; y += step)
| 6: | printf(" %3d + %3d = %4d\n", x, y, x+y); //alternative Ausgabe |
Diese Vereinfachung ist möglich, weil die Menge so regelmäßig aufgebaut ist.
Für allgemeinere Mengen wird es schon etwas komplizierter.
Gruß
Martin
|
|
|
|
|
1: |
| 2: | # include <iostream >
| 3: | using namespace std;
| 4: |
| 5: | int main () {
| 6: |
| 7: | int start , step , limit, x, y;
| 8: |
| 9: | cout << " Wert von \" start \" eingeben : ";
| 10: | cin >> start ;
| 11: | cout << " Wert von \" step \" eingeben : ";
| 12: | cin >> step ;
| 13: | cout << " Wert von \" limit \" eingeben : ";
| 14: | cin >> limit ;
| 15: |
| 16: | y = start;
| 17: | for (x = start ; x <= limit ; x += step){
| 18: |
| 19: | x -= step;
| 20: | for (y += step ; y <= limit ; y += step)
| 21: | cout << x << " + " << y << " = " << (x+y) << "\n";
| 22: |
| 23: | }}
|
mit dem printf-Befehl klappt es zwar nur ohne leider nicht!
Ich will diese Befehle möglichst vermeiden. So würde der Text hier keinen Sinn ergeben, da der Wert x immer auf start gesetzt wird (x-=step)
|
|
|
|
|
Hallo,
das liegt daran, dass die Schleifen nicht verschachtelt werden sollen, sondern nacheinander durchlaufen werden. Die Ausgabe sollte in beiden Schleifen stattfinden. (s. PN)
Gruß
Martin
|
|
|
|