Hilfe!!! Hilfe!!! Fachabitur!!!
-
Guten Tag liebe User,
in der Schule haben wir einen abschließenden Arbeitsauftrag erhalten und sollen diesen lösen. Bis her kam ich auch mit allen Programmen klar, allerdings bin ich jetzt an einem Knackpunkt angekommen.
Deswegen benötige ich eure Hilfe damit ich eine gute Note auf meinem Abschlusszeugniss mitnehmen kann. Ich appelliere an eure Mitgefühl und hoffe auf eure Hilfe.Ich soll ein Konsolenprogramm schreiben. In diesem Programm soll der User seine Netzwerkadresse eingeben mit den Sonderzeichen "." ,allerdings weiß ich nicht wie ich das anstellen soll, da diese Netzwerkadresse später in eine binäre Zahl umgewandelt werden soll.
Ich bitte um eure Hilfe, denn ich brauche sie sehr!!
Mit lieben Grüßen
Jens
-
Wie weit bist Du denn schon? Also zeig mal was, damit wir eine gewisse Eigenleistung erkennen können.
(Übrigens ist das nicht nett, wenn Du durch Betrug eine gute Note auf dem Abschlußzeugnis hast und am Ende jemandem den Studienplatz wegschnappst, der viel besser wäre.)
-
Mr. XXX schrieb:
Ich soll ein Konsolenprogramm schreiben. In diesem Programm soll der User seine Netzwerkadresse eingeben mit den Sonderzeichen "." ,allerdings weiß ich nicht wie ich das anstellen soll, da diese Netzwerkadresse später in eine binäre Zahl umgewandelt werden soll.
Was meinst du mit "binäre Zahl?" Nach welchem Format? Sollen die Punkte hinterher verschwinden, sodass du nur die Zahl "10255255255" binär umwandeln musst, oder muss jede Zahl zwischen einem Punkt binär umgewandelt werden (10.255.255.255)?
volkard schrieb:
(Übrigens ist das nicht nett, wenn Du durch Betrug eine gute Note auf dem Abschlußzeugnis hast und am Ende jemandem den Studienplatz wegschnappst, der viel besser wäre.)
Der ist gut ...
Ich persönlich finde die Aufgabe zu leicht.
-
Edit: es macht sich super, einen Thread mit "Hilfe" zu beginnen und dann noch massig Aufrufezeichen zu verwenden, das schreckt die meisten ab. Kleiner Tipp für's nächste Mal: keine Ausrufezeichen und "Hilfe", sondern grobe Beschreibung des Problems.
-
Glühbirne schrieb:
Was meinst du mit "binäre Zahl?" Nach welchem Format? Sollen die Punkte hinterher verschwinden, sodass du nur die Zahl "10255255255" binär umwandeln musst, oder muss jede Zahl zwischen einem Punkt binär umgewandelt werden (10.255.255.255)?
Da es sich um eine Netzwerkadresse handelt, muss wohl jede Zahl "zwischen einem Punkt" in genau ein Byte umgewandelt werden.
-
Leuchtdiode schrieb:
Da es sich um eine Netzwerkadresse handelt, muss wohl jede Zahl "zwischen einem Punkt" in genau ein Byte umgewandelt werden.
Dachte ich mir auch, aber ich kann mir nicht sicher sein, dass er dies meint, wenn er es nicht explizit angibt. Schließlich kann es auch eine Übungsaufgabe sein, und dann?
Egal, ich möchte erst einmal sehen, wie weit du gekommen bist.
-
Überhaupt: sollt ihr den Algorithmus zur Umwandlung selbst schreiben, oder könnt ihr euch einer Bibliothek bedienen? Dann wäre
_itoawohl das Richtige für dich.
-
Also ich will nicht schummeln.
Ich will nur Hilfe einbeziehen.
Also es soll aus der IP-Adresse eine binäre Zahl werden.
192.168.1.1 =11000000.10101000.00000001.00000001
Das ist ja noch nicht so schwer aber der Knackpunkt ist. Der . muss erkannt werden und sollte dann die 4 x 8 bit in 4 variabeln ausgeben. Also jeder Block sollte seine eigene Variable haben.
Da das direkt der erste Schritt ist, habe ich noch nicht viel porgrammieren können.Und vielen Dank für den Tipp in Zukunft nicht alle abzu schrecken.:D
Mir war nicht klar, dass ich diesen Effekt hervor rufe.Ich bedanke mich bis hier hin bei jedem schon mal der sich die Mühe gegeben hat mich über diesen Account zu kontaktieren.
-
#include <winsock2.h> int main() { .. addr.sin_addr.s_addr = inet_addr("192.168.0.1"); }Siehe auch: http://msdn.microsoft.com/en-us/library/ms738563(v=vs.85).aspx
Ansonsten selbst schreiben. Mit C++ Streams sollte das noch einfacher gehen, der C Weg wäre wohl strtoul.
-
zeig deinen Code, dann wird dir sicher geholfen, aber hier macht dir niemand deine Hausaufgaben
greetz KN4CK3R
-
Mr. XXX schrieb:
Und vielen Dank für den Tipp in Zukunft nicht alle abzu schrecken.:D
Mir war nicht klar, dass ich diesen Effekt hervor rufe.Übrigens rufst du den gleichen Effekt hervor, wenn du nicht allzu sehr auf deine Rechtschreibung achtest ...

Mr. XXX schrieb:
Also ich will nicht schummeln.
Ich will nur Hilfe einbeziehen.
Also es soll aus der IP-Adresse eine binäre Zahl werden.
192.168.1.1 =11000000.10101000.00000001.00000001
Das ist ja noch nicht so schwer aber der Knackpunkt ist. Der . muss erkannt werden und sollte dann die 4 x 8 bit in 4 variabeln ausgeben. Also jeder Block sollte seine eigene Variable haben.
Da das direkt der erste Schritt ist, habe ich noch nicht viel porgrammieren können.Schummeln ist nicht schlimm, es gibt nur einige ... nun, Moralapostel (der Ausdruck ist noch zensiert), die meinen, die Welt wäre gerecht.
Was dein Problem angeht:
std::stringzum Sichern und Teilen der Eingabe (vom Anfang bis Punkt, von Punkt zu Punkt, von Punkt zu Punkt und von Punkt zu Ende),_itoazum Umwandeln und fertig.Wenn du
_itoanicht benutzen darfst: frage dich erstmal, wie du manuell von Dezimal in Binär umwandelst, und dann versuche, den Compiler dies für dich machen zu lassen. Beispiel von mir:233/2=116 R:1
116/2=58 R:0
58 /2=29 R:0
29 /2=14 R:1
14 /2=7 R:0
7 /2=3 R:1
3 /2=1 R:1
1 /2=0 R:1Die Reste von oben nach unten lesen ergibt die Binärzahl. 233 ist also 1110 1001. Klingelt's?
Das Tolle ist aber: abhängig von der angegeben Basis (in dem Fall 2) kannst du mit dieser Formel in jedes System umrechnen.
-
Kleine Berichtigung: die Reste von unten nach oben gelesen ergibt die Binärzahl.
-
ja ok
danke euch
ich weiß zawr wie ich eine binärzahl entwickel
denke ich werden den modolu befehl nutzen aber ich muss erst ma schauen ob der befehl funktioniert die IP-Adresse in einem durch zu lessen allerdings später aufzusplitten und die 4 x 8 bit felder
ansonsten kann ich einfach nicht durch 2 teilen
ich werde die variable ja mit als charakter einlesen muss die aber in 4 int variabeln packen aber das stellt sich als schwieriger herraus als doch dachte
-
Ach übrigens: sollst du die Eingabe auch streng prüfen, oder einfach verwenden, und wenn es einen Fehler gibt, darf der Anwender rätseln, was passiert ist?
-
Zum Threadtitel lies dir mal bitte den Link in meiner Signatur durch...
-
Mr. XXX schrieb:
ich werde die variable ja mit als charakter einlesen muss die aber in 4 int variabeln packen aber das stellt sich als schwieriger herraus als doch dachte
Geht sogar mit C super einfach: strtoul.
-
Du musst gar nicht den Umweg über string gehen, du kannst die einzelnen Teile gleich in ints lesen:
int ip_1, ip_2, ip_3, ip_4; char c; cin >> ip_1 >> c >> ip_2 >> c >> ip_3 >> c >> ip_4; cout << ip_1 << "." << ip_2 << "." << ip_3 << "." << ip_4 << endl;
-
Mr. XXX schrieb:
ich werde die variable ja mit als charakter einlesen muss die aber in 4 int variabeln packen aber das stellt sich als schwieriger herraus als doch dachte
Das ist eigentlich noch das leichteste an der Übung, mach einfach ein paar cin's hintereinander, und spar dir das ganze Umwandeln.
-
War zu langsam.
Marsmann hat es bereits hingeschrieben.
-
Marsmann schrieb:
Du musst gar nicht den Umweg über string gehen, du kannst die einzelnen Teile gleich in ints lesen:
int ip_1, ip_2, ip_3, ip_4; char c; cin >> ip_1 >> c >> ip_2 >> c >> ip_3 >> c >> ip_4; cout << ip_1 << "." << ip_2 << "." << ip_3 << "." << ip_4 << endl;Das dieser Code aber ein bisschen unsicher ist, weißt du?
1. Was, wenn der Benutzer statt einer Zahl ein Zeichen eingibt? Auf meiner Maschine führt das sofort zum Beenden des Programms.
2. Außerdem kann der Benutzer auch versuchen, Adresse ohne Punke einzugeben, was garantiert zu einem Fehler führt, denn dann wird alles inip_1gesichert und der Benutzer hängt in 6 weiteren Eingaben fest.
3. Ich weiß nicht genau, was passiert, wenn der Benutzer aus Versehen zwei Punkte hintereinander eingibt. Zwei Szenarien: entweder wird alles bis zur nächsten Zahl incüberschrieben, oder die ganze Zahl wird ignoriert. Beides stimmt mich nicht zuversichtlich.
-
@ TE: Du kannst die Benutzereingabe überprüfen, an jedem Punkt spliten, die Zahlenstrings selbstständig in
intumwandeln (ist nicht so schwer, vom Buchstaben den Wert 48 abziehen und nach jeder Stelle den Wert zur nächsten Potenz von 10 hochrechnen) und dann mit meiner Formel wieder ins Binärformat schreiben.Eingabe spliten -> einzelne Strings
Einzelne Strings inints umwandeln -> einzelne Zahlen
Einzelne Zahlen in Binär umwandeln -> einzelne StringsNur noch mal zur Übersicht!