indexieren:
-
Aha, und warum stecke ich in einer Schleife?
-
Aha, und warum stecke ich in einer Schleife?
Was meinst du?

-
Schleife meint, er steckt in einer Schleife, ohne Ausdruck und rennt und rennt ...
Das Teil endet mit Exit Code 9, aber nur wenn ich auf Stopp klicke, ansonsten zeigt es running an.
for ZZ=1 DZ=2 ZI=0
if ZZ=1 DZ=10
= 10 ist Durchlaufzahl Runde=1.
Program ended with exit code: 9Das ist der Ausdruck ....
-
for(int Durchlaufzahl; cin>>Durchlaufzahl;) { // ...Du kannst hier Zahlen eingeben bis zur Unendlichkeit. Die Schleife bricht nur ab, wenn du keine Zahl eingibst.
-
out schrieb:
for(int Durchlaufzahl; cin>>Durchlaufzahl;) { // ...Du kannst hier Zahlen eingeben bis zur Unendlichkeit. Die Schleife bricht nur ab, wenn du keine Zahl eingibst.
kann da nicht eine Externe Bedingung hin? Die Schleife sollte Abbrechen, wenn die Erste Zahl von Durchlaufzahl, aber von der alten oben, sagen wir 3 x vorkommt ...dazu muß er auf den Map-Befehl zugreifen, denn dort ist abgelegt, wie oft eine jede Zahl aus der Variablen Durchlaufzahl vorkommt.
-
Ich glaube, du willst da gar keine Schleife? Ich weiß gar nicht was das Programm überhaupt machen soll, hab mir das net angeschaut, zu viele komische Variablennamen. Vielleicht schreibst du mal eine detaillierte Aufgabenstellung.
-
out schrieb:
Ich glaube, du willst da gar keine Schleife? Ich weiß gar nicht was das Programm überhaupt machen soll, hab mir das net angeschaut, zu viele komische Variablennamen. Vielleicht schreibst du mal eine detaillierte Aufgabenstellung.
Doch, doch, da kommt ne Schleife hin. Was macht das Teil? Es nimmt eine Zahl, multipliziert die mit der Faktorzahl und berechnet den Abstand zur Spiegelzahl, dann dasselbe mit dem Abstand u. s. w. u. s. f. Dabei entstehen jewels x-gliedlange Ketten von Zahlen. Deshalb soll er beim ersten dreimaligen Vorkommen einer Zahl aussteigen.
Wieso sind meine Variablennamen komisch?
-
brak schrieb:
Was macht das Teil? Es nimmt eine Zahl, multipliziert die mit der Faktorzahl und berechnet den Abstand zur Spiegelzahl, dann dasselbe mit dem Abstand u. s. w. u. s. f. Dabei entstehen jewels x-gliedlange Ketten von Zahlen. Deshalb soll er beim ersten dreimaligen Vorkommen einer Zahl aussteigen.
Das ist alles? Klingt einfach:
#include <cstdlib> #include <iostream> #include <map> using namespace std; int main() { map<int,unsigned> vorkommen; for(int zahl=1, faktor=2, spiegelzahl=12;;) { cout << "Zahl = " << zahl; zahl *= faktor; zahl = abs( spiegelzahl-zahl ); cout << " und Abstand = " << zahl << '\n'; if( ++vorkommen[zahl] == 3 ) break; } }Ist das das, was du wolltest?
brak schrieb:
Wieso sind meine Variablennamen komisch?
Ah, hast du schon etwas geändert, hab ich übesehen.
-
Das ist der bisher beste Troll... chapeau!
-
@out
Das Teil, was Du schreibst, hatte ich auch schon. Es ist nur der Kern der Aufgabe, aber nicht vollständig erfasst. Gib in Dein Tool mal die Zahl 100 als Spiegelzahl ein, so wirst Du die Kette erblicken.
Ich wollte die Kette in Map einlesen lassen, und zwar deshalb, weil im Allgemeinen vor Beginn der Kette noch ein paar nicht dazugehörende Zahlen kommen. Mich interessiert aber zb. nur die Kettenlänge. Ich wollte das Problem über Map lösen, denn nur so kann man die Zahlen erfassen, die mindestens 2 x vorkommen, und damit zur Kette gehören.
Der nächste Schwierigkeitsgrad ist dann, daß manche zahlen 2 und 3 oder 4 verschiedene Ketten produzieren ... aber Schritt für Schritt, ich wollte das selber machen.
(das nächste Mal nehme ich mein Buch mit, ... vielen Dank für die bisherige Hilfe ...
-
#include <cstdlib> #include <iostream> #include <map> using namespace std; int main() { map<int,unsigned> vorkommen; for(int zahl=1, faktor=2, spiegelzahl=100;;) { //cout << "Zahl = " << zahl; zahl *= faktor; zahl = abs( spiegelzahl-zahl ); // cout << " und Abstand = " << zahl << '\n'; if( ++vorkommen[zahl] == 3 ) { for(map<int,unsigned>::iterator it=vorkommen.begin(); it!=vorkommen.end(); ++it) { cout << it->first << " ist " << it->second << " x vorhanden" << '\n'; } break; } } }jetzt wollte ich von dieser Liste nur die Zahlen, die genau 2 x vorkommen auslesen lassen. und in einen extra Speicher tun, wobei die erste Zahl, die 3 x vorkommt, die Abbruchbedinmgung auch in der Liste sein müsste, weil sie zur Kette gehört ...
-
Dann musst du die Liste auf ==2 vergleichen, nach der for-Schleife. Am Rest ändert sich ja nichts. Du kannst auch mal die komplette Aufgabenstellung posten.
-
brak schrieb:
Der nächste Schwierigkeitsgrad ist dann, daß manche zahlen 2 und 3 oder 4 verschiedene Ketten produzieren ... aber Schritt für Schritt, ich wollte das selber machen.
Versteh' ich nicht.
Wie soll das gehen?
In dem Loop ist ja nur die Zahl selbst variabel, und die Zahl selbst ist auch das was betrachtet wird?
Wie kann es da "verschiedene Zyklen" geben?
Das geht doch schon rein theoretisch nicht.Ansonsten sollte das recht einfach sein: in jedem Durchlauf machst du einen Eintrag in die map:
map[zahl] = durchlaufsnummer;Davor guckst du ob es schon einen Eintrag für "zahl" gibt. Wenn ja kannst du aus der aktuellen Durchlaufsnummer und der in der Map eingetragenen die Zyklenlänge errechnen.
Viel einfacher geht's nicht
-
Das geht doch schon rein theoretisch nicht.
.. doch doch, die Ausgangszahl ist doch immer verschieden ....
out schrieb:
Dann musst du die Liste auf ==2 vergleichen, nach der for-Schleife. Am Rest ändert sich ja nichts. Du kannst auch mal die komplette Aufgabenstellung posten.
hatt ich schon gemacht, und zwar so:
if( ++vorkommen[zahl] == 3 ) { for(map<int,unsigned>::iterator it=vorkommen.begin(); it!=vorkommen.end(); ++it) { if (it->second>=2) { cout << it->first << "; "; } } cout<<"ist die Serie von SZ= "<<spiegelzahl<<" "; break;Es funktioniert jedenfalls,...:-)
Was ich nicht versteh, ist Deine For Schleife in Zeile 9.
Es gibt übrigens keine Aufgabenstellung. Ich forsche auf privater Basis nur ein bisschen im Zahlenraum rum .... Mach ich im Urlaub immer.
Jetzt will ich die Spiegelzahl erhöhen und für jede Spiegelzahl Variable Zahl von 1 bis zur halben Spiegelzahl durchrattern lassen. Dabei sieht man, wieviel verschiedene* Ketten ein und dieselbe Spiegelzahl produziert.
*verschieden nicht im Sinne der Eintrittszahl, oder Abfolge sondern im Sinne von gänzlich anderem Zahlenbestand
-
Warum funktioniert die auskommentierte vorgestzte fortschleife von Zeile 11 nicht, die das For in Zeile 14 beeinflusst?
#include <cstdlib> #include <iostream> #include <map> using namespace std; int zehler; int spiegelzahl; int main() { map<int,unsigned> vorkommen; //for ( zehler=1;zehler=50; zehler++) // { //cout<<"zehler="<<zehler<<""; for(int zahl=zehler, faktor=2, spiegelzahl=100;;) { // cout << "Zahl = " << zahl; zahl *= faktor; zahl = abs( spiegelzahl-zahl ); // cout << " und Abstand = " << zahl << '\n'; if( ++vorkommen[zahl] == 3 ) { for(map<int,unsigned>::iterator it=vorkommen.begin(); it!=vorkommen.end(); ++it) { if (it->second>=2) { cout << it->first << "; "; } } cout<<"ist die Serie von SZ= "<<spiegelzahl<<" "; break; } } // } }
-
Was funktioniert da net? compilieren tuts.
Wieso verstehst du die eine for-Schleife von mir nicht? Kann es sein, dass es bei der an den Grundlagen der Grundlagen sehr hapert?

-
Schau dir mal die Abbruchbedingung an.
-
out schrieb:
Was funktioniert da net? compilieren tuts.
ich meine, wenn man wieder einkommentiert ....
out schrieb:
Wieso verstehst du die eine for-Schleife von mir nicht?
Warum tust Du die drei Initialisierungen, die ich normalerweise vor main anbringen würde, in die erste Abteilung von for?
out schrieb:
Kann es sein, dass es bei der an den Grundlagen der Grundlagen sehr hapert?

Kann schon sein, hab nie ne Computerschule besucht und mir erst letztes Jahr nen Buch gekauft, was jetzt auch nicht unglücklicherweise zuhause liegt ... außerdem bin ich kein Schnellmerker und auch sonst nicht so helle ...
-
Ich forsche mal mit im Zahelraum

#include <iostream> #include <cstdlib> #include <map> #include <string> #include <sstream> #include <vector> using namespace std; string int_to_string( int zahl ) { ostringstream oss; oss << zahl; return oss.str(); } struct kette { int zahl; int faktor; int spiegelzahl; string k; }; kette mach_kette( int zahl, int faktor, int spiegelzahl ) { kette k = { zahl, faktor, spiegelzahl }; for(map<int,unsigned> vorkommen;;) { zahl *= faktor; zahl = abs( spiegelzahl-zahl ); k.k += int_to_string( zahl ); if( ++vorkommen[zahl] == 3 ) break; } return k; } int main() { map< string,vector<kette> > zahlenspiel; for(int zahl=1; zahl!=10; ++zahl) { for(int faktor=1; faktor!=3; ++faktor) { for(int spiegelzahl=10; spiegelzahl!=15; ++spiegelzahl) { kette k = mach_kette( zahl, faktor, spiegelzahl ); zahlenspiel[k.k].push_back( k ); } } } for(map< string,vector<kette> >::iterator it=zahlenspiel.begin(); it!=zahlenspiel.end(); ++it) { vector<kette>& vec = it->second; for(vector<kette>::iterator itk=vec.begin(); itk!=vec.end(); ++itk) { cout << "Kette=" << itk->k << " Z=" << itk->zahl << " F=" << itk->faktor << " SZ=" << itk->spiegelzahl << '\n'; } cout << '\n'; } }Wie findest das? Ich hab nur keine Ahnung, ob das immer terminiert

brak schrieb:
Warum tust Du die drei Initialisierungen, die ich normalerweise vor main anbringen würde, in die erste Abteilung von for?
Variablen kommen da hin, wo man sie brauch. Das was du machst war der Stil der 80er Jahre, schon uralt.
-
Danke, OUT, das scheint es zu sein. Du bist aber nicht in die interessanten Bereiche vorgedrungen. In "Kette" wird bei Dir alles bis zum Break abgespeichert. Es soll aber nur 1 x die Kette rein, damit Kettenlänge und Eintrittszahl registriert werden können.
Jetzt noch was. In den höheren Bereichen treten mehrere Ketten auf. 34 ist bei mir die erste Zahl, in der zwei vollkommen unabhängige Viererketten auftauchen.
Den Faktor kann man vorerst auf 2 einstellen. Wichtig ist die Spiegelzahl hochzudrehen, und die Ketten bis zur Hälfte der Spiegelzahl, wegen Symmetrie, herauszusuchen, also, wieviel verschiedene, wie lang die sind, und welche Zahlen Sie beinhalten. Vielleicht gibt es ja auch welche, die sich eine Zahl teilen? (Was ich nicht glaub). Wo die Spiegelzahl ungerade ist bei Faktor zwei übrigens die Folge der unger. Zahlen Kettenbestandteil.
Kannst Du nicht auch noch Semikolons zwischen die einzelnen Glieder der Kette zaubern, oder mir sagen, wo ich die hintun muß? Du machst ja int zu string .... hab ich noch nie gemacht... weiss gar nicht, ob das gut ist.