C++ "Kleines" mathematisches Problem

Chippo schrieb:
Und was VS angeht, aufgrund dessen das mein Dozent letztens rumgemosert hat VS Ultimate es offensichtlich nicht mag wenn man Klassen per Hand erstellt, scheint es ebend nicht das gelbe vom Ei zu sein. Insbesonders für Leute die noch lernen und die Finger vom Wizard lassen sollten.

Sekunde, die Reihe nach...
Er sitzt mit seinem Laptop neben mir. Hat MS VS irgendwas 2008 auf der Platte. Code auf dem Schirm, mir Vorgaben machend was ich tun soll. Irgendwann fing mein VS U 2010 an Fehler auszuspucken. Mein Dozent verstand nicht warum. Setzt sich um und schaut nach was nicht stimmt. Am Ende (10 Minuten später) meinte er das mein VS - wovon er sagte ich es "so" eben bräuchte ( also kein Express) - es nicht mag wenn Klassen per Hand generiert werden. Er führte mir das auch vor.
Per Hand Fehlermeldung. Per Wizard keine.
Wenn du jetzt fragst: Warum, um Gottes Willen? Keine Ahnung! Wie gesagt, das ist passiert als er mir noch versuchte beizubringen wie man Klassen generiert.

Visual Studio ist es garantiert schnurz-piep-egal, ob man Klassen von Hand erstellt, oder irgend einen Wizard das erledigen läßt. Da muß irgend was anderes faul sein.

Poste mal den exakten Wortlaut der Fehlermeldung + den Code, der den Fehler verursacht.
 
Zuletzt bearbeitet:
antred schrieb:
Visual Studio ist es garantiert schnurz-piep-egal, ob man Klassen von Hand erstellt, oder irgend einen Wizard das erledigen läßt. Da muß irgend was anderes faul sein.


Habs grad getestet. Funktioniert doch.
Der Fehler saß wohl mal wieder vorm Gerät.
 
@ Backslash
Es geht ja hier nicht um ein Prof-Programm, sondern um eine Aufgabe.
Vielleicht dachte mein Dozent, das ich dafür schon bereit bin. Denn ich habe mal aus Langweile ein Vigenère-VerschlüsselungProgramm mit c++ erstellt und es funktioniert sogar. Das hätte ich vielleicht nicht tun sollen.:freak: Denn dann meinte mein Dozent das er mir eigentlich die Sache mit Arrays und String-Manipulation nicht mehr beibringen müsste (da im Code schon zu genüge verbaut) und deswegen gleich zur Klassen-Erstellung kommen wollte. Und dann kommt er mir auch noch mit IBAN... musste erst mal drüber nachdenken was das nochmal war.

An die Coder:
Habt dank, werde mal die Codes analysieren und versuchen zu verstehen.:D



Poste mal den exakten Wortlaut der Fehlermeldung + den Code, der den Fehler verursacht.

Sitze erst Morgen wieder vor meinem Arbeitsrechner - oder seh ich aus als hätte ich 4200 Euro?


Jedenfalls was Whiz-zarD Bemerkung angeht:
Der Fehler saß wohl mal wieder vorm Gerät.
Ich leite das gern an den Dozenten weiter:D

... Was ist wenn der Dozent einen Fehler gemacht hat? Nichts für ungut, aber Dozenten sind auch nur Menschen, oder? Zumindest war der Wiki nichts anderes zu entnehmen. Ich meine erst hat er mich ja instruiert und selbst versucht es hinzukriegen.

Der Grund warum ich morgen Probleme haben werde, das Problem zu reproduzieren, ist das ich immer noch nicht so genau weiß wie Klassen erstellt werden. Einfache kann ich generieren, ja, aber mit dem womit mich mein Dozent bombardiert hat sieht es anders aus.
Ich habe inzwischen mal geschaut und festgestellt das es doch Unterschiede gibt zwischen denn was mir der Dozent versuchte beizubringen und dem was für Anfänger gedacht ist. Und der Umstand das sich der arme Kerl auch noch 3 teilen muss (vergesst bitte die Netzwerker und Kaufleute nicht) ist auch nicht so fein.

Bleibt nur das Internet und diese tollen C++ in 24/12/5/40/33/23.4321^23-84 Tagen "Bücher".
In einem habe ich ein Beispiels-Code gefunden mit einer "und so sieht die Ausgabe aus" Bemerkung drunter. Als ich denn Code einfach mal rein kopiert habe, sah ich rot. Das lag nicht an nicht inkludierten Zeugs (war überraschender weise alles da), sondern daran das hier und da " und ; fehlten. Testen diese Autoren auch mal ihre - übrigens oft nicht aus dokumentierten - Codes oder sind sie so von sicher überzeugt das sie diese in Word einhacken ohne nochmal nach zu schauen ob das überhaupt funktioniert?
Langsam begreife ich warum mein Dozent meine Frage nach benötigten Bücher für meine Schulung mit "keine" beantwortete.
 
Nun bleib mal locker, es hat ja auch niemand angedeutet, daß dein Dozent jetzt auf den Scheiterhaufen gehört.

Das mit den schlechten / falschen / fehlerverpesteten Tutorials und Anfängerbüchern ist leider so, wie es ist. Ich find's auch immer wieder traurig, wie viele Leute sich berufen fühlen, über Themen Bücher zu schreiben, von denen sie keine Ahnung haben. :(
 
Sitzen gerade nebeneinander und mein Dozent versucht gerade diese Sache mit dem Bigint zu lösen. Ich hoffe er braucht nicht so lange wie ich um aufzugeben^^
 
In meinem Beispiel verwende ich GMP, das ist echt einfach. Kann man einfach von einem String (oder bei kleineren Zahlen auch int etc) initialisieren.
 
Der Dozent meinte das GMP zu linuxsch sei. Er meint der Compiler von VS würde damit nichts anfangen können.

Was mich auf eine Idee bringt. Ich meine wenn ich für die Schule VS nutzen muss, ok.
Aber zuhause kann ich mich doch bedienen womit ich will.
Welche Umgebung wäre wohl die beste für mich? Also nach denn Gesichtspunkten Bloody Apprentice und "lass mich verwenden was ich will und wie ich will". Ich meine letzteres so das ich vor allem am Anfang mich nicht unbedingt starr an Vorlagen halten kann und will.
Ich habe festgestellt das ich am besten etwas verstehe wenn ich damit spiele.
Ergo ein Stück Code aus dem Netz, denn ich dann analysiere, auseinandernehme, manipuliere und aufgrund der Reaktionen dann die funktionsweise verstehen kann.

Ich kann einfach eine Sache nicht verstehen, wenn ich sie nicht zuvor seziert habe. Kein Wunder, das ich keine abkriege:D
 
Chippo schrieb:
Der Dozent meinte das GMP zu linuxsch sei. Er meint der Compiler von VS würde damit nichts anfangen können.

(...)

Sorry, aber dann hat dein Dozent offensichtlich keine Ahnung.
http://gladman.plushost.co.uk/oldsite/computing/gmp4win.php
http://cs.nyu.edu/exact/core/gmp/

Ich verwende für C++ am liebsten Linux Standardtools also Vim, make, gdb, valgrind, gprof und zum Testen (wie man in meinem Beispiel sieht) gtest. Und natürlich git zur Versionsverwaltung.
Das ist zwar alles eigentlich recht einfach zu bedienen mag aber für einen Einsteiger etwas gewöhnungsbedürftig sein.
 
Zuletzt bearbeitet:
Danke Backslash:)
Jedenfalls war gestern mein Dozent da.
Anfangs durfte ich meinen IBAN-Programm bis zu diesem Punkt mit dem BigInt-Problem neu schreiben. Natürlich so wie mein Dozent wollte. (Was heisst mein Code wäre Steinzeit?
Wie dem auch sei, irgendwann schrieb ich ein Stück (3 Minuten) ohne seine Instruktionen. Das Ergebnis war zwar falsch, eine Null zu viel, aber das Problem war leicht zu lösen da mit einem Blick offensichtlich. Dann kommt mein Dozent und sagt "Steinzeitcode":(.
Ok, diesen Part so geschrieben wie er wollte. 10 Minuten coding state of the art. Das bedeutet erst mal sich in Klammern verheddern wie Fliege im Netz.
Code fertig (ich auch), kompiliert und gestartet. Mein Dozent ruft triumphierend auf: "Genau so ist es richtig!!"
Ok, ja... Bis auf dem Umstand eine Null zu viel.:freak:
So, danach kümmerte sich mein Dozent um das Kernproblem (erinnert ihr euch? Zahl mit 24 Ziffern? Natürlich nicht voll Retro per Hand, sondern State of the art per Lib made by MS.
Nach einiger Zeit räumte er dann ein das was auf dieser speziellen MS-Seite stand - an die er sich gehalten hatte - offensichtlich nicht der Wahrheit entsprach:( Da ist nichts mit BigInt oder sonst was. Das hätte ich und habe ich ihm schon vorher sagen können und getan... <-- Deutsch ist blöd^^
Jedenfalls, Aufgabe für nächste Woche: Pointer und Co.


Aber ICH will mein IBAN-Proggi fertig kriegen. Und zwar so wie ich will! Ich beharre so drauf, weil ich jetzt schon weiß das es nicht das erst und nicht letzte mal sein wird, das ich auf externe libs setzen muss.
Problem ist nur ich bekomme diese GMP Sache grade nicht so zum laufen. Deswegen würde ich dich Backslash um noch etwas mehr Geduld bitten und ähhm... erkläre es mir wenn es sein muss wie Urmensch.

Bsp. steht in der Anleitung:
Für Visual C++ 6.0 & Visual C++ .Net
Download latest GMP and unzip to ${gmp_build}
Was ist ${gmp_build}?
Schon da habe ich das Gefühl was verpasst zu haben...



Also, Schritt für Schritt, was soll ich damit genau tun?
In der Zwischenzeit beschäftige ich mich mit dem scheiß Pointern...


... Von wegen Steinzeitcode. Meiner funktioniert wenigsten...
 
Mit der dynamischen von hier hat es bei mir funktioniert, die statische geht nicht weil sie wohl zu alt ist.

Du musst in VS in den Projekteigenschaften unter Linker>Eingabe>Zus. Abhängigkeiten die gmp.lib hinzufügen und unter VC++-Verzeichnisse das Verzeichnis in dem .lib, .h und .dll liegen (also zB gmp-dynamic) als Bibliotheks- und Headerordner hinzufügen. So ging es jedenfalls bei mir.
Ich bin kein großer Fan von VS für C++, vielleicht kann das jemand der Ahnung davon hat noch genauer erklären.


/edit: Aus den oben geposteten Dateien musst du das gtest Zeug rausnehmen wenn du das nicht auch noch in VS zum laufen bringen willst, falls du es mit meinem Code testen willst.
Meine IBANToolMain.cpp zum testen:
Code:
#include <iostream>
#include "IBAN.h"

int main(int argc, char** argv)
{
  std::cout << "1: check IBAN" << std::endl;
  std::cout << "2: generate IBAN" << std::endl;

  int choice;
  std::cin >> choice;

  if (choice == 1)
  {
    std::string ibanStr;
    std::cout << "IBAN: ";
    std::cin >> ibanStr;
    IBAN iban(ibanStr);
    if (iban.check())
      std::cout << "IBAN ok" << std::endl;
    else
      std::cout << "IBAN invalid" << std::endl;
  }
  else if (choice == 2)
  {
    std::string lcode, knr, blz;
    
    std::cout << "Land: ";
    std::cin >> lcode;
    if (lcode.size() != 2)
    {
      std::cout << "invalid lcode, must be 2 chars long" << std::endl;
      return;
    }

    std::cout << "BLZ: ";
    std::cin >> blz;
    
    std::cout << "KNr: ";
    std::cin >> knr;
    
    IBAN outIBAN;
    outIBAN.generate(lcode.c_str(), knr, blz);
    std::cout << "IBAN: " << outIBAN.str() << std::endl;
  }
  else
  {
    std::cout << "invalid input" << std::endl;
  }

  return EXIT_SUCCESS;
}
 
Zuletzt bearbeitet:
So, was ich zusammenbasteln tun sollte, ist nun fertig (und ich auch...).
Letzten Endes habe ich mich (übrigens gegen die Forderung des Dozenten für die "manuelle" Variante entschieden. Also die des Boardies BigNum.
Bis auf diesen einen Punkt habe ich es so zusammengestellt, wie mein Dozent es wollte. Wodurch eine letzte Frage entsteht. WARUM habe ich es getan?
So wie es mein Dozent wollte, ergibt der Code selbst, noch dessen Funktion einen Sinn.
Technisch lief es wohl (wahrscheinlich) darauf hinaus das das Programm am Ende ausgeben soll, das die IBAN valide ist, oder nicht. Was es übrigens auch tut.
Da aber das ganze Proggi durchläuft, ohne auch nur denn User zu fragen OB nun eine IBAN erzeugt oder eine IBAN geprüft werden sollte, ist das ganze ein bisschen hirnlos.
Aber wenn er es so haben wollte...
Schließlich soll ich später ja auch noch Vorlage arbeiten (Chef will es so und nicht anders) und da kann ich ja auch nicht einfach Dinge tun, nur weil ich denke sie ergeben mehr Sinn... :freak:
Ich überlege ob das nicht letzten Endes die wirkliche Aufgabe war: Zu begreifen das eigenständiges Denken nicht erwünscht ist.

Vielleicht habe ich ja meinen Dozenten damit erzürnt das ich aus Langweile dieses Verschlüsselungsprogramm geschrieben habe.

Jedenfalls danke für eure Hilfe:)
 

Ähnliche Themen

Zurück
Oben