Akaria Geschrieben 29. April 2009 Teilen Geschrieben 29. April 2009 Also ich mach mal einen neuen Faden auf, da der andere zu meinem neuen Hauptproblem nicht passt. Ich hab das problem, dass ich eine Ziffer mit 24 Stellen, irgendwie mit modulo 97 nehmen muss nur passt die 24stellen ziffer in kein Datentyp!!! [die 24 stellen ergeben sich aus mehreren eingegebenen Zahlen (123 + 456 = 123456)] Matheformel wird nicht fiel nützen, da einige der Zahlen die eingelesen werden schon größer 10 stellen sind und damit schon die datentypen rahmen sprengen. Eine Bibliothek anlegen, hab ich noch nie gemacht und auch keine Ahnung wie das geht. Sieht ausserdem auch nicht so aus, als hätte ich das selber gemacht, da wir sowas noch nie im der Berufsschule gemacht haben, geschweige denn mal erwähnt, dass es sowas gibt! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 29. April 2009 Teilen Geschrieben 29. April 2009 (bearbeitet) Es gibt Datenstrukturen, die mit solchen Größen rechnen können (SIMD - 128 Bite breite Register sollten reichen). Aber Du kannst Dir mal überlegen was Modulo macht. Modulo liefert Dir die Restklassen der Division, bei Dir können maximal die Zahlen 0 bis 96 aus der Division heraus kommen. D.h. ob ich nun 7 % 3 = 1 oder 13 % 3 = 1 berechne, ist jedenfalls vom Ergebnis her identisch. Wenn ich nun zwei Zahlen x,y habe und z als x+y definiere, wie hängt dann x % m bzw y % m mit (x+y) % m zusammen? Die Lösung ist recht einfach :-P Phil Bearbeitet 29. April 2009 von flashpixx Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Akaria Geschrieben 29. April 2009 Autor Teilen Geschrieben 29. April 2009 Ja das mit dem x und y versteh ich ja. Das ist auch kein thema. Mein Problem ist einfach, dass schon die zahlen die der Benutzer des Programms eingibt zu groß sind. Wie soll ich denn das bitte verhindern? Wenn da seht geben Sie ihre Kontonummer ein, dann wird er da 11 Stellen eingeben und nicht erst die ersten 5 stellen und dann die nächsten 6 stellen. Wie geht das mit dem SIMD Register? Hab davon noch nichts gehört! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Enno Geschrieben 29. April 2009 Teilen Geschrieben 29. April 2009 Dann lies doch die Eingabe des Users als Textfeld ein. Und nimm dann aus dem Textfeld soviel Zeichen wie du noch handeln kannst. Dann schneidest diese Zeichen ab und nimmst die nächsten. Und das solange bis die Eingabe komplett abgearbeitet ist. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 29. April 2009 Teilen Geschrieben 29. April 2009 (bearbeitet) Mein Problem ist einfach, dass schon die zahlen die der Benutzer des Programms eingibt zu groß sind. Wie soll ich denn das bitte verhindern? Du kannst solche relativ großen Zahlen als String einlesen. Wenn da seht geben Sie ihre Kontonummer ein, dann wird er da 11 Stellen eingeben und nicht erst die ersten 5 stellen und dann die nächsten 6 stellen. Als Bsp: Ich kann immer nur 2 Stellen verarbeiten und soll 1234 % 97 berechen: 1234 % 97 = (1200 + 34) % 97 = (12 * 1*10^2 + 34) % 97. Wobei die 1*10^2 sogar als Konstante betrachtet werden können. Wie sieht dann das Ergebnis aus? Wie geht das mit dem SIMD Register? Es bringt Dir nichts, irgendwelche technischen Klimmzüge zu machen, wenn Du das Problem nicht lösen kannst. Die Lösung ist nicht irgendwie programmatisch und mit technischer Finesse das ganze lösen, sondern die Lösung liegt in der Mathematik, in dem Du das Problem vereinfachst Phil Bearbeitet 29. April 2009 von flashpixx Tippfehler Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Akaria Geschrieben 29. April 2009 Autor Teilen Geschrieben 29. April 2009 Ist ok, ich werd es versuchen. Da werden aber bestimmt noch einige Fragen kommen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Akaria Geschrieben 30. April 2009 Autor Teilen Geschrieben 30. April 2009 (bearbeitet) So, also ich glaube das ich es dann jetzt weiß wie es geht. Ich muss die (blz * 10 ^ktngr + (ktn))%97 //ktngr = maximale größe der kontonummer (ktn)(zB Deutschland 11 stellen, Griechenland 16 stellen) nehmen. Um jetzt die 11 stellen der ktn (jetzt ein string), passent zu bekommen muss ich den string auslesen um zu sehen, wie viele stellen der string überhaupt hat (könnten ja auch weniger sein!). Dann muss ich den string (wenn ich nicht irre) in Substrings gestückelt werden. Jetzt muss ich aufpassen! Also wenn ich immer die ersten 8 stellen in den ersten substring setze und den rest (egal wie groß) in den 2ten. dann müsste die formel für die ktn so sein: ktn =substring 1 (die ersten 8stellen) * 10^stellen des substring2 + substring 2 Achja, vorher muss ich noch die substrings in int umwandeln. (dafür bräuchte ich auch noch hilfe, im INet steht das über all, dass es nur mit verrenkungen geht, und so sahen auch die q-codes dazu aus) So jetzt zum eigentlichen Problem, mir fehlen die befehle um die positionen auszulesen, sowie das eigentliche zerstückeln an position x und hineinschreiben in die substrings. Ich hab schon im Internet gesucht, aber irgendwie ist das alles chinesisch und ich versteh das nicht wirklich. Wäre klasse wenn ihr mir nochmal helfen könnten.:valen Bearbeitet 30. April 2009 von Akaria Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 30. April 2009 Teilen Geschrieben 30. April 2009 Du musst für diese Aufgabe weder Strings zerstückeln noch zusammensetzen. Sowohl die Kontonummer als auch die Bankleitzahl sollten doch problemlos in einen 64-Bit-Integer passen. Wandle beide um, z.B. mit Stringstreams, und wende dann die Modulo-Rechenregeln auf deine Formel an. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Akaria Geschrieben 30. April 2009 Autor Teilen Geschrieben 30. April 2009 Also ich hab gerade nachgelesen, so wie ich das verstehe geht das mit den 64Bit int leider nicht, dafür brauch man auch den entsprechenden rechner! Den ich leider nicht habe. Bei C gibt es einen unsigned long long int, der wäre genau richtig für mich, nur so wie ich das wiederrum verstanden habe gibt es den bei c++ nicht. Hab ich auch schon getestet, kommt immer der fehler das nur ein long geht und nicht long long (egal wie geschrieben). Wenn ich jetzt etwas flasch verstanden habe, dann bitte aufklären. int64 ktn ist so nicht möglich. Hab auch gleich 3 weitere (angegebene) bibliotheken hinzugefügt, int64 kennt er aber trotzdem nicht. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 30. April 2009 Teilen Geschrieben 30. April 2009 Bei C gibt es einen unsigned long long int, der wäre genau richtig für mich, nur so wie ich das wiederrum verstanden habe gibt es den bei c++ nicht.Die Größe der Datentypen ist in C und C++ gar nicht festgelegt. Für so ziemlich jeden aktuellen Compiler für Desktopplattformen gibt es aber eine Unterstützung für 64-Bit-Integer. Wenn du nur endlich mal verraten würdest, was du benutzt. int64 ktn ist so nicht möglich.Sagt das der Compiler? "Ist nicht möglich"? Oder kommt da vielleicht doch eine ordentliche Fehlermeldung? Hab auch gleich 3 weitere (angegebene) bibliotheken hinzugefügt, int64 kennt er aber trotzdem nicht.Diese Information ist auch ziemlich nutzlos, wenn du nicht erwähnst, welche Bibliotheken das sind, und du wieder nur "kennt er nicht" als Fehlerbeschreibung lieferst. Je genauer deine Problembeschreibung, desto gezielter die Hilfe. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Akaria Geschrieben 30. April 2009 Autor Teilen Geschrieben 30. April 2009 Also... ich habe Microsoft Visual C++ 6.0 (habe auch gelesen, dass es Probleme bei visual gibt mit dem 64 Bit) Ich hab das hier mal kto genannt, da ich mein ktn nicht zerkloppen will #include <iomanip> #include <iostream> #include <string> #include <math.h> #include <string> #include <limits.h> #include <stdio.h> #include <climits> using namespace std; int blz=0; int64 kto = 0; int ktn=0; error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'kto' error C2501: 'int64' : Fehlende Speicherklasse oder Typbezeichner fatal error C1004: Unerwartetes Dateiende gefunden Also wenn die zeile int64 kto =0; weg ist, geht das alles. Auch wenn ich die letzten 3 Bilbliotheken entfernt (mit oder ohne kto ausführe) kommen die gleichen fehler. Achja, Bedenke, dass das Programm nachher auch auf anderen Rechnern gehen muss, mein Lehrer möchte nachher die ausführbare Programmdatei haben, nicht dass das nachher wegen der 64 Bit nicht geht!! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 30. April 2009 Teilen Geschrieben 30. April 2009 Also... ich habe Microsoft Visual C++ 6.0Oh, Steinzeitsoftware . Hat das einen bestimmten Grund? Benutz mal __int64 (zwei Unterstriche). Achja, Bedenke, dass das Programm nachher auch auf anderen Rechnern gehen muss, mein Lehrer möchte nachher die ausführbare Programmdatei haben, nicht dass das nachher wegen der 64 Bit nicht geht!!Kein Grund für multiple Ausrufezeichen, das geht. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 30. April 2009 Teilen Geschrieben 30. April 2009 naja 24 Stellen gehen da aber auch nicht rein... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Akaria Geschrieben 30. April 2009 Autor Teilen Geschrieben 30. April 2009 Oh, Steinzeitsoftware . Hat das einen bestimmten Grund? Hab damals Visual von der Arbeit bekommen, ist aber auch schon etwas her. ich glaube 1 1/2 Jahre oder 2. damals war das aktuell. Außerdem funktioniert der spaß doch, das ist das wichtigste! das mit dem __int64 kto =0; scheint er zu nehmen, wenigstens wird das __int64 jetzt blau! So jetzt hab ich aber folgendes problem: cout<<"Bitte geben Sie ihre Kontonummer ein" <<endl; cin>> ktn; cout<<" kto!!" <<endl; cin>> kto; cout<<"Ihre Kontonummer ist: " <<ktn <<endl <<"Bitte geben Sie nun Ihre BLZ ein" <<endl; cin>>blz; cout<<"Ihre BLZ ist: " <<blz <<endl; cout<<endl <<endl <<kto; error C2679: Binaerer Operator '>>' : Kein Operator definiert, der einen rechtsseitigen Operator vom Typ '__int64' akzeptiert (oder keine geeignete Konvertierung moeglich) error C2593: 'Operator <<' ist mehrdeutig Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 30. April 2009 Teilen Geschrieben 30. April 2009 Hab damals Visual von der Arbeit bekommen, ist aber auch schon etwas her. ich glaube 1 1/2 Jahre oder 2. damals war das aktuell. Kaum. VS6.0 ist inzwischen fast 11 Jahre alt. Die aktuellste Version, Visual Studio 2008, ist schon fast 1 1/2 Jahre alt. So jetzt hab ich aber folgendes problem: Tja, funktioniert der Spaß wohl doch nicht. Mit einer aktuellen Version von Visual C++ klappt das problemlos. Selbst mit Visual C++ 2003 sollte es gehen. Wenn du nicht umsteigen kannst oder willst, könntest du es mit printf/scanf versuchen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TDM Geschrieben 30. April 2009 Teilen Geschrieben 30. April 2009 Wenn du nicht umsteigen kannst oder willst, könntest du es mit printf/scanf versuchen. Anmerkung: %I64d nehmen. Nicht %d. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Akaria Geschrieben 30. April 2009 Autor Teilen Geschrieben 30. April 2009 Kaum. VS6.0 ist inzwischen fast 11 Jahre alt. Die aktuellste Version, Visual Studio 2008, ist schon fast 1 1/2 Jahre alt. Oh, DAS wusste ich garnicht. Naja man lernt nie aus. Aber 11 Jahre ist echt ne steinzeit. Wusste ja, dass die nicht ganz aktuell war, aber so alt hätte ich nicht gedacht. Umsteigen ist schlecht, da ich mein Betrieb kein anderes hat (glaube ich zumindest), müsste aber mal schauen. Hab auch eignetlich keine lust jetzt noch irgendwas großartiges runter zu landen. Ich weiß es gibt noch ne freie version, die haben wir auch inner berufsschule, aber naja, ich hab eigentlich keine lust was neues zu installieren, das sollte auch so gehen. Kann es sein, dass mir für den __int64 irgend ne bibliothek fehlt, kann ja sein! Ansonsten könnt ihr mir das mit dem printf und scanf erklären? und das versteh ich garnicht: Anmerkung: %I64d nehmen. Nicht %d. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TDM Geschrieben 30. April 2009 Teilen Geschrieben 30. April 2009 Kann es sein, dass mir für den __int64 irgend ne bibliothek fehlt, kann ja sein! Nö, aber für printf - <stdio.h> Ansonsten könnt ihr mir das mit dem printf und scanf erklären? und das versteh ich garnicht: printf - C++ Reference Oder was verstehst du nicht? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.