Böse Sieben
-
Hi,
also ich kenne das Spiel nicht, aber dein Ansatz ist doch schon ganz gut.
#include <iostream> #include <sstream> int main ( void ) { for ( int i = 1; i < 101; i++ ) // Wir fangen von 1 an, denn 0 brauchst du sicher nicht, oder? Ansonsten ändern! { std::ostringstream MyStream; MyStream << i; if ( ( i % 7 != 0 ) && ( MyStream.str().find( "7" ) == std::string::npos ) ) // find liefert std::string::npos, wenn der Wert nicht enthalten ist! std::cout << i << std::endl; } return 0; }Ich hoffe das hilft dir
Kenne das Spiel wie gesagt nichtGruß
Edit: Hab was falsch verstanden. Habe Code geändert. Hatte gedacht du willst alle Zahlen die durch 7 teilbar sind
Kommentar geändert. Ich sollte mal eine Pause machen 
-
Das Spiel haben wir früher immer im Physikunterricht in der Klasse gespielt

-
Hmm, c++ ist echt seltsam... oder für Frauen einfach nur unlogisch.
@ Dummie: Habe das jetzt einfach mal reinkopiert.
Zuerst hat er mir 35 Fehler angezeigt und nachdem ich das Programm nochmal neu geöffnet hatte war es nur noch einer:
error C1010: Unerwartetes Dateiende während der Suche nach dem vorkompilierten Header. Haben Sie möglicherweise vergessen, im Quellcode "#include "stdafx.h"" einzufügen?
Dachte mir: "Hmm, keine Ahnung, probiers mal...". Aber natürlich ging es nicht
.
-
Ich glaube mich zu erinnern, dass es schonmal so einen Beitrag gab wo jemand ein ähnliches Problem hatte. Welchen Compiler benutzt du? Ich schätze mal Visual Studio.
Erstelle ein neues Projekt, aber ein LEERES. Und dann fügst du eine neue Code-Datei ein und nennst diese am besten Main. Dort schreibst du dann diesen Code rein und es müsste funktionieren.
Gruß
Patrick
Edit:
Unter Visual Studio C++ 2005
Datei -> Neu -> Projekt
Konsolenanwendung auswählen. Projektname eingeben( Kannste dir aussuchen ).
Auf "Weiter" drücken und bei "Zusätzliche Optionen" dann Leeres Projekt anclicken.
Dann Projekt -> Neues Element hinzufügen
C++-Date(.cpp) auswählen und wie gesagt Main nennen.
Code dort einfügen.
Strg + F5 drücken und es sollte dann klappen
Viel Erfolg

-
Ja, wenn ich das mal wüsste, welchen Compiler ich benutze.
Was ist Visual Studio, was ist ein Compiler?
Ich benutze Visual C++ 2005 ExpEdition (falls du das wissen wolltest).
Oh man, ich spür schon, wie ich mich hier unbeliebt mache.
Aber bin auch erst seit drei Wochen dabei und ein Buch werde ich mir auch noch kaufen!
Erstmal Anweisungen befolgen und ganz lieben Dank dir!
-
Benutzername: schrieb:
a%7 == 0 || a%10 == 7 || a/10 == 7
so dürfte es doch schon ganz leicht mit einer if abfrage funktionieren
-
Ja, funzt perfekt, muss nur noch schauen, wo ich die Zählschleife platziere.
-
Öhm das von wegen stdafx ... das muss ein MS VC++ Compiler sein ... nur die haben so was drin
Also ... es gibt ein Headerfile wo du alle inkludes reintust ... dadurch braucht das obj net immer kompiliert werden ... und musst die datei aber in jedem cpp file inkludieren ... d.h. mekert der weil du das nicht getan hast.
-
So, jetzt habe ich das mal mit der normalen if/else-Bedingung gemacht
und jetzt sind zwei Probleme aufgetreten: Er gibt die 70er-Reihe noch unverändert aus und er gibt nach jeder veränderten Zahl die gleiche nochmal aus,
obwohl if/else.#include "stdafx.h"
#include <iostream>int _tmain(int argc, _TCHAR* argv[])
{std::cout <<"Die boese Sieben wird mit diesem Programm simuliert."
<<std::endl;for (int a=1; a<101; a++)
{
if (a%7 == 0 || a%10 == 7 || a/10 == 7)
{
std::cout << a+1 << std::endl;
}
else std::cout << a << "\n" ;
}return 0;
}Hm, okay, schon festgestellt warum das so ist mit der doppelten Ausgabe, aber ich habe keine Ahnung, wie ich das ändern kann. <- Problem gelöst, wow ging das schnell, nur das mit der 70er-Reihe steht noch aus.
-
Flugsie schrieb:
So, jetzt habe ich das mal mit der normalen if/else-Bedingung gemacht
und jetzt sind zwei Probleme aufgetreten: Er gibt die 70er-Reihe noch unverändert aus und er gibt nach jeder veränderten Zahl die gleiche nochmal aus,
obwohl if/else.#include "stdafx.h"
#include <iostream>int _tmain(int argc, _TCHAR* argv[])
{std::cout <<"Die boese Sieben wird mit diesem Programm simuliert."
<<std::endl;for (int a=1; a<101; a++)
{
if (a%7 == 0 || a%10 == 7 || a/10 == 7)
{
std::cout << a+1 << std::endl;
}
else std::cout << a << "\n" ;
}return 0;
}Hm, okay, schon festgestellt warum das so ist mit der doppelten Ausgabe, aber ich habe keine Ahnung, wie ich das ändern kann. <- Problem gelöst, wow ging das schnell, nur das mit der 70er-Reihe steht noch aus.
Erstmal ein paar Tipps: Benutzt Code-Tags, bitte
Es gibt einen Button C/C++ der extra für C++ Code ist. Dann funktioniert auch die Einrückung, die du ja HOFFENTLICH benutzt.Benutzt doch einfach meinen Code? Dort kannst du auch ohne Probleme mehr als 100 Zahlen ausgeben (Siehe for ( int i = 1; i < 101; i++ ) ) ohne dir Sorgen machen zu müssen was umzuschreiben

#include "stdafx.h" #include <iostream> #include <sstream> #include <tchar.h> // Mein Compiler brauch das... Deiner scheinbar nicht int _tmain( int argc, _TCHAR* argv[] ) { for ( int i = 1; i < 101; i++ ) { std::ostringstream MyStream; MyStream << i; if ( ( i % 7 != 0 ) && ( MyStream.str().find( "7" ) == std::string::npos ) ) std::cout << i << std::endl; else std::cout << "Gehoert nicht dazu: " << i << std::endl; } return 0; }Der sollte bei dir so laufen hab ihn extra etwas umgeändert... Für dich

Gruß Patrick
-
Danke!!! Läuft perfekt. Super.
Und da ich ja gerne dazulerne:
Was bedeutet der Ausdruck? -> std::string::nposSchöne Grüße, Mareike
-
Flugsie schrieb:
Danke!!! Läuft perfekt. Super.
Und da ich ja gerne dazulerne:
Was bedeutet der Ausdruck? -> std::string::nposSchöne Grüße, Mareike
Hatte es auf der Seite davor schonmal geschrieben, aber jetzt nochmal:
Edit:
Ich schreib auch nurnoch Müll
Also nochmal:
Wenn find() std::string::npos liefert ist der gesuchte Wert nicht enthalten.
Wenn find() etwas anderes liefert ist das die Position wo es gefunden wurde.Zu der Frage, was ein Compiler ist:
Der Compiler macht vereinfacht gesagt aus dem Code eine ausführbare Datei.
Visual Studio ist eine IDE, also ein Programm was dich beim Programmieren unterstützt und z.B. bestimmte Begriffe farbig darstellt usw... Der Compiler ist in einer IDE normalerweise dabei.
Gruß Patrick
-
Ups, ja, sorry, übersehen.
Stand ja grasgrün dort.
Die zweite Erklärung war aber die bessere!!!
cout <<" Gewissen mit dieser Aussage erleichtert."
Gruß, Mareike
-
Dein problem mit der 70er Reihe UND der doppelten Ausgabe liegt uebrigens hier
if (a%7 == 0 || a%10 == 7 || a/10 == 7) { std::cout << a+1 << std::endl; }Wenn a eine der "verbotenen" Zahlen ist gib a+1 aus. Jetzt ist a 70, 70 ist verboten, also gibt er a+1=71 aus. Dann wird a 71, ist auch verboten,a lso gibt er a+1=72 aus. Usw, die ganze 70er Reihe auszer der 70 selbst.
Doppelte Ausgabe: a ist 7. 7 ist verboten, also gibt er a+1=8 aus. a wird jetzt um 1 erhoeht, a ist 8. 8 ist nicht verboten, also wird a=8 ausgegeben. Und schon steht die 8 doppelt da.
Funktionnieren tut es, indem du das cout da einfach weglaesst. Am besten so:
#include <iostream> int main() { std::cout <<"Die boese Sieben wird mit diesem Programm simuliert." <<std::endl; for (int a=1; a<101; a++) { if (!(a%7 == 0 || a%10 == 7 || a/10 == 7)) //! bewirkt, dass es nur gemacht wird, wenn das Gegenteil von der Bedingung richtig ist std::cout << a << "\n" ; } return 0; }