Zum Inhalt springen

24stellen Ziffer passt nirgends rein!


Akaria

Empfohlene Beiträge

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!

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von flashpixx
Link zu diesem Kommentar
Auf anderen Seiten teilen

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!

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von flashpixx
Tippfehler
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von Akaria
Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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!!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also...

ich habe Microsoft Visual C++ 6.0

Oh, 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. :)
Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...