Suche Hilfe bei der Programmierung eines IBAN-Rechners



  • @revo94 sagte in Suche Hilfe bei der Programmierung eines IBAN-Rechners:

    @firefly Die habe ich im Code als Kommentar angehängt 🙂

    Unbehandelte Ausnahme bei 0x740C45A2 in IBAN.exe: Microsoft C++-Ausnahme: std::out_of_range bei Speicherort 0x00DDF940.
    

    Nein! Das ist keine Compiler Warnung. Die ausgabe passiert wenn du dein Programm laufen lässt



  • @firefly Okay... sorry, ich weiß jetzt nicht wirklich wo das in Visual Studio geht.



  • @revo94 sagte in Suche Hilfe bei der Programmierung eines IBAN-Rechners:

    @DirkB Also kommen die Variablen die ich in einer .cpp benötige, in die .cpp selbst?

    Ja natürlich.
    Am Besten noch in die Funktion (auch main ist eine Funktion) in der du sie als erstes (dem Aufruf nach) benötigst.
    Der Rest wird über Funktionsparamter weiter gegeben.

    Wenn du eine Variable doch mal in einer anderen .cpp benötigst, wird sie mit extern im Header deklariert.



  • @DirkB Danke für deine Geduld mit mir und natürlich für deine Tipps!



  • @revo94 sagte in Suche Hilfe bei der Programmierung eines IBAN-Rechners:

    @firefly Okay... sorry, ich weiß jetzt nicht wirklich wo das in Visual Studio geht.

    Was weißt du nicht?
    Der Unterschied zwischen Compiler Fehler (evtl auch Linker Fehler) und ein Fehler der zur Laufzeit des Programms entsteht?

    Du kannst ein Programm übersetzten (Compilieren)
    Du kannst ein Programm bauen (compilieren und linken)
    Und du kannst ein Programm laufen lassen (Run)

    Visual Studio kann das alles automatisch nacheinander ausführen.
    Dennoch bleiben es getrennte Aktionen.



  • @DirkB
    @firefly sagte in Suche Hilfe bei der Programmierung eines IBAN-Rechners:

    Schalt mal deine Warnung im compiler an

    Ich vermute

    stol(sbban)
    

    wirft eine Warnung

    "Schalt mal deine Warnung im Compiler an"
    Ich weiß nicht wie ich das einschalte.



  • @revo94 sagte in Suche Hilfe bei der Programmierung eines IBAN-Rechners:

    @mgaeckler Danke erst mal... Hätte mir ehrlich gesagt nettere Antworten erwartet 😃 Aber hey, im Internet kann man sowas wohl vergessen.... Wie auch immer... Das

    Wie meinen? Was verstehst Du unter netter?

    using namespace std;
    

    hat man bei uns so an der Hochschule gezeigt bekommen.

    Aber dort wurde Dir hoffentlich auch gesagt, daß man sowas in headern schön bleiben lässt.

    Und danke, jetzt weiß ich das der Datentyp falsch ist 👍
    Und das mit der Variablen Definition... Ist dafür nicht der Header da? 🤔

    Bitte belehre mich eines Besseren!

    Das haben andere schon gemacht.



  • Du brauchst niemals die gesamte IBAN als int, sondern immer nur 9 (oder anders viele, was gerade in deinen int passt). Für die Berechnung mit 9 Ziffern reicht sogar ein Integer mit 32 Bit.

    Und du brauchst auch nicht die Codes für alle Länder einzeln zu speichern (DE=1314), sondern du erhältst du Zahl eines Einzelbuchstaben über (buchstabe - 'A' + 10). Beispiel: 'D' - 'A' + 10 == 13.

    Edit: vielleicht sollte ich es anders erklären: bei Modulo kannst du immer schöne Dinge tun. Zum Beispiel bei +, -, * jederzeit bei jedem Zwischenergebnis und bei jedem Summanden und bei jedem Faktor einzeln modulo rechnen (wo es dir beliebt).

    Wenn deine IBAN lautet: DExx123456782525252525, dann wird daraus ja 123456782525252525131400.
    Das ist gleich: 123456782 * 10^irgendwas + 525252525131400 (mod 97). Jetzt wenden wir das %97 einfach auf 123456782 an. Kommt 32 raus. Also ist das gleiche wie 32 * 10^irgendwas + 525252525131400 = 32525252525131400 (mod 97). Jetzt nimmst du wieder n Ziffern und wiederholst den Spaß. Statt 9 Ziffern kannst du auch anders viele nehmen. So viele, wie gerade in deinen int passen, zum Beispiel.

    Also:

    123456782525252525131400123456782525252525131400

    =123456×10a+782525252525131400=72×10a+782525252525131400=72782525252525131400= 123456 \times 10^a + 782525252525131400 = 72 \times 10^a + 782525252525131400 = 72782525252525131400

    =7278252525×10b+2525131400=18×10b+2525131400=182525131400= 7278252525 \times 10^b + 2525131400 = 18 \times 10^b + 2525131400 = 182525131400

    =55  (mod 97)= 55 \ \ \text{(mod 97)}

    PS: Wie mache ich hier ein Mehrzeilen-Displaymath mit ausgerichteten =-Zeichen? "\\" und "&=" scheinen nicht zu funktionieren.


  • |  Mod

    Sehr gute Faustregel, ob ein Datum eine Zahl (zum Rechnen) oder eine Ziffernfolge ist:

    1. Macht die Differenz von zwei Daten Sinn?
    2. Macht der Durchschnitt von mehreren Daten Sinn?

    Postleitzahl: Meine Postleitzahl minus deine Postleitzahl ist 26452. Quatsch. Die durchschnittliche Postleitzahl aller Deutschen ist 52424.383. Quatsch.

    Alter: Mein Alter minus dein Alter ist 5. Ich bin 5 Jahre älter als du. Das Durchschnittsalter in Berlin ist 46. Auch interessant.

    Telefonnummer: Meine Telefonnummer minus deine Telefonnummer ist -3275723712. Quatsch. Die durchschnittliche Telefonnummer von Deutschland ist 491648588156. Quatsch.

    IBAN?



  • @mgaeckler sagte in Suche Hilfe bei der Programmierung eines IBAN-Rechners:

    Wie meinen? Was verstehst Du unter netter?

    Ach weißt Du @mgaeckler, manchmal sehnt man sich einfach so wie @revo94 nach ein wenig Menschlichkeit und möchte in die Arme genommen und fest gedrückt werden.

    @revo94 sagte in Suche Hilfe bei der Programmierung eines IBAN-Rechners:

    Ich bin dabei, um C++ etwas mehr zu lernen

    https://www.google.com/search?q=c%2B%2B+books

    @revo94 sagte in Suche Hilfe bei der Programmierung eines IBAN-Rechners:

    @DirkB
    @firefly sagte in Suche Hilfe bei der Programmierung eines IBAN-Rechners:

    Schalt mal deine Warnung im compiler an

    Ich weiß nicht wie ich das einschalte.

    Das steht im Manual deines Lieblingscompilers.


Anmelden zum Antworten