Hilfe beim arbeiten mit Feldern
-
Hallo zusammen,
ich möchte mich erstmal kurz vorstellen.
Da ich keine Rubrik für Neuvorstellungen gesehen/gefunden habe, tue ich dies mal hier, falls es ok ist.Mein Name ist Andrej und ich bin 24 Jahre alt.
Vor fast 4 Monaten habe ich eine Fernlehre zum geprüften Informatiker begonnen.
Jetzt ist es so, dass ich etwas Hilfe bräuchte bei C++.
Auf der Plattform für den Lehrgang habe ich bis jetzt zwar Hilfe bekommen, werde aber mit den Tipps nicht ganz so warm und hoffe, dass ich hier mit manchen Fragen vielleicht besser aufgehoben bin.Und zwar bin ich in Sachen Informatik nur ein "blutiger" Anfänger.
Ich soll ein Programm schreiben, welches Binärzahlen in Dezimalzahlen umrechnet. Ich erwarte jetzt keine Komplettlösungen. Das würde mir im Endeffekt überhaupt nicht weiterhelfen, wenn ich am Ende der Lehre genau so dumm bin wie vorher. ^^Ich bin dank meiner Studienhefte schon so weit, dass ich weiß, mit Feldern arbeiten zu müssen.
Meine Frage wäre jetzt aber, wie gebe ich nun die Binärzahl über cin ein?
Als komplette Binärzahl mit 8 Stellen oder muss ich jede Stelle einzeln eintragen und mit Enter bestätigen.
Außerdem habe ich immer noch nicht verstanden, wie ich auf die einzelnen Felder zugreifen kann um mit diesen zu rechnen.Ich hoffe jemand kann mir da einige Tipps geben oder sagen, wo ich diesbezüglich nachschlagen könnte.
Ich danke schon mal im vorraus.
-
du liest die Binärdarstellung in einen String ein, wandelst diesen in ein
int
um und gibst diesen dann aus.
-
@Fischbrezel sagte in Hilfe beim arbeiten mit Feldern:
Fernlehre zum geprüften Informatiker
lol
@Fischbrezel sagte in Hilfe beim arbeiten mit Feldern:
Meine Frage wäre jetzt aber, wie gebe ich nun die Binärzahl über cin ein?
#include <cstdlib> #include <string> #include <iostream> bool is_valid_binary(std::sting const &str) { for (auto ch : str) if (ch != '1' && ch != '0') return false; return true; } int main() { std::string number; std::cin >> number; if(!is_valid_binary(number)) { std::cerr << "Input error :(\n\n"; return EXIT_FAILURE; } // do something with number }
-
@Fischbrezel sagte in Hilfe beim arbeiten mit Feldern:
Ich soll ein Programm schreiben, welches Binärzahlen in Dezimalzahlen umrechnet. Ich erwarte jetzt keine Komplettlösungen. Das würde mir im Endeffekt überhaupt nicht weiterhelfen, wenn ich am Ende der Lehre genau so dumm bin wie vorher. ^^
Das hier dürfte dir weiter helfen: https://de.wikipedia.org/wiki/Horner-Schema#Anwendungsmöglichkeiten_des_Hornerschemas
Btw, das mit der Vorstellung war keine gute Idee. Neulinge werden hier gern verarscht. Die "Profis" brauchen das wohl für ihr Ego.
-
@RBS2 sagte in Hilfe beim arbeiten mit Feldern:
Neulinge werden hier gern verarscht. Die "Profis" brauchen das wohl für ihr Ego.
Ne, das stimmt so nicht. Ich verarsch dich auch jederzeit gern.
-
@Swordfish sagte in Hilfe beim arbeiten mit Feldern:
@RBS2 sagte in Hilfe beim arbeiten mit Feldern:
Neulinge werden hier gern verarscht. Die "Profis" brauchen das wohl für ihr Ego.
Ne, das stimmt so nicht. Ich verarsch dich auch jederzeit gern.
Du fühlst dich angesprochen und darob angepisst. Meine Aussage war aber nicht speziell auf dich bezogen. Du bist zwar ein Mitglied der Nooby-Bashing-Gang, aber es gibt Schlimmere.
-
@RBS2 sagte in Hilfe beim arbeiten mit Feldern:
Du fühlst dich angesprochen und darob angepisst. Meine Aussage war aber nicht speziell auf dich bezogen.
Ne, ich fühle mich nicht wirklich angesprochen.
Du bist zwar ein Mitglied der Nooby-Bashing-Gang, aber es gibt Schlimmere.
Ja, ich weiß ich arbeite noch an mir.
-
@Fischbrezel Guck mal in der Forumssuche. Zu deinem Problem gibt es hier massig Threads.
Bau dir ein Grundgerüst und poste es gut formatiert mit Code-Tags. Bei Problemen dann nochmal melden.
cu
-
Mein Gerüst sieht aktuell so aus:
#include <iostream> using namespace std; int main() { int ergebnis; int zahlFeld[8] {0, 1, 2, 3, 4, 5, 6, 7}; cout << "Geben Sie eine Binaerzahl mit maximal 8 Stellen ein:" << endl; cin >> zahlFeld[8]; ergebnis = (zahlFeld[0]*(2^1))+(zahlFeld[1]*(2^2))+(zahlFeld[2]*(2^3))+(zahlFeld[3]*(2^4))+(zahlFeld[4]*(2^5))+(zahlFeld[5]*(2^6))+(zahlFeld[6]*(2^7))+(zahlFeld[7]*(2^8)); cout << ergebnis; return 0; }
Leider kommt immer das falsche Ergebnis bei raus. Wenn ich 10101010 eingebe, kommt 168 raus.
-
std::string input; cout << "Geben Sie eine Binaerzahl ein:" << endl; cin >> input; // TODO: auswerten
-
Allgemeine Programmier-Regel: Du musst bei JEDEM Zeichen in deinem Quellcode wissen, was es tut. Hast du ^ nachgeschlagen?
-
-
Mit
cin >> zahlFeld[8];
liest du kein Feld sondern nur ein Element ein.
Hier das mit dem Index 8. Und das existiert nicht.
-
Für den Anfang
#include <iostream> #include <regex> using namespace std; int main() { char in[8]; cout << "8 Bits eingeben ... "; cin >> in; if (regex_match(in, regex("[01]{8}"))) { // TODO: nach Dezimal umrechnen } else { cout << "Falsche Eingabe!" << endl; } }
-
@out sagte in Hilfe beim arbeiten mit Feldern:
Allgemeine Programmier-Regel: Du musst bei JEDEM Zeichen in deinem Quellcode wissen, was es tut. Hast du ^ nachgeschlagen?
Danke für den Hinweis, da habe ich wohl was komplett falsches eingegeben gehabt.
pow(a,b) sollte in diesem Fall richtig sein, oder?@RBS2 sagte in Hilfe beim arbeiten mit Feldern:
Für den Anfang
#include <iostream> #include <regex> using namespace std; int main() { char in[8]; cout << "8 Bits eingeben ... "; cin >> in; if (regex_match(in, regex("[01]{8}"))) { // TODO: nach Dezimal umrechnen } else { cout << "Falsche Eingabe!" << endl; } }
Ich habe den Code so eingegeben und CodeBlocks hat bei regex angefangen zu streiken. ^^
-
@Fischbrezel sagte in Hilfe beim arbeiten mit Feldern:
Ich habe den Code so eingegeben und CodeBlocks hat bei regex angefangen zu streiken. ^^
C++ hat Regex erst seit der Version 11: http://www.cplusplus.com/reference/regex/
Du solltest Compiler und Standard Library updaten,
oder du schmeißt die Überprüfung einfach raus. Ist ja nicht für deine Aufgabe relevant.
-
@Fischbrezel sagte in Hilfe beim arbeiten mit Feldern:
pow(a,b) sollte in diesem Fall richtig sein, oder?
Ist aber nicht nötig.
Das Hornerschema wurde schon genannt.
Du fängst beim ersten Wert/Index an
Dann nimmst den aktuellen Wert und addierst den zum Ergebnis.
Wenn es noch Stellen gibt, multiplizierst du das Ergebnis mit 2 (wegen Dualsystem) und gehst zum nächsten Wert/IndexMal als Beispiel den Wert "1001"
Ergebnis = 0;
Index 0 = 1
Ergebnis * 2 -> Ergebnis = 0
Ergebnis + 1 -> Ergebnis = 1Index 1 = 0
Ergebnis * 2 -> Ergebnis = 2
Ergebnis + 0 -> Ergebnis = 2Index 2 = 0
Ergebnis * 2 -> Ergebnis = 4
Ergebnis + 0 -> Ergebnis = 4Index 3 = 1
Ergebnis * 2 -> Ergebnis = 8
Ergebnis + 1 -> Ergebnis = 9Index 4 gibt es nicht: fertig
Ergebnis = 9
Das kann man in einer Schleife machen.
Da du nur die Binärdarstellung der Zahl haben möchtest, kannst du auch mit Zeichen/Strings arbeiten.
Du musst nur beachten, dass das Zeichen '0' nicht den Wert Null hat.
Eine Überprüfung aob überhaupt nur Nullen und Einsen eingegeben wurde wäre auch nicht schlecht. (Das macht das regex_match, geht aber auch in der Schleife)
-
Davon abgesehen funktioniert mein Code nicht einmal.
Statt Zeile 10 muß sowas hin:regex r = regex("[01]{8}"); if (regex_match(in, r))
Warum auch immer. C++ ist eben seltsam. Oder ich bin zu doof dafür.
-
@RBS2 sagte in Hilfe beim arbeiten mit Feldern:
@manni66 sagte in Hilfe beim arbeiten mit Feldern:
std::string input;
Besser
char input[8];
Wenn du "besser" durch "gefährlicher" ersetzt... An den @Fischbrezel: halte dich an @manni66 s Vorschlag
-
@wob sagte in Hilfe beim arbeiten mit Feldern:
Wenn du "besser" durch "gefährlicher" ersetzt...
Schreibt dann 'cin' über die Arraygrenze hinaus?