000
09.07.2020, 13:32 Uhr
flydia
|
Hallo liebe Menschen, Ich lerne gerade C++ im Rahmen eines Uni Kurses. Mir ist alles noch relativ neu, dieser Code kommt aus einer übungsaufgabe und soll Hexadezimalzahlen ind Dezimalzahlen umwandeln und andersherum. Selbst gecodet habe ich nur die beiden Funktionen, der Rest war schon vorgegeben und soll die Funktionen testen. Mein Problem ist, dass das Programm kompiliert, bei Ausführung aber das hier ausgibt: terminate called after throwing an instance of 'std::out_of_range' what(): vector::_M_range_check: __n (which is 0) >= this->size() (which is 0)
wenn ich richtig recherchiert habe weist std::out_of_range auf einen logischen Fehler hin (https://en.cppreference.com/w/cpp/error/out_of_range)
Ich hab das erste mal Vektoren verwendet, ist da evtl. etwas falsch?
Und dann ist mir Allgemein nicht ganz klar wann ich Referenzen übergebe, wann ich einen Pointer brauche usw. zum Bespiel habe ich zuerst copy_dezz = &dezimalzahl; im code stehen gehabt, das wollte der compiler aber nicht akzeptieren. Warum verwende ich jetzt nicht mehr die referenz? Besten Gruß und schonmal vielen lieben Dank!
C++: |
#include <iostream> #include <sstream> #include <cmath> #include <vector>
using namespace std;
vector<char> dezimalZuHexadezimal(unsigned int &dezimalzahl){ // Hier ihr Code ... vector<char> hexvec; // Kopie dezimalzahl unsigned int copy_dezz = dezimalzahl; unsigned int Rest; int z =0; do { copy_dezz/=16; Rest = copy_dezz%16; hexvec.at(z) = Rest; z++; }while (dezimalzahl / 16 != 0); return hexvec; }
unsigned int hexadezimalZuDezimal(vector<char> &hexadezimalzahl){ // Hier ihr Code ... unsigned int dezimalzahl2; for (unsigned int i = 0; i<hexadezimalzahl.size();i++){ dezimalzahl2 += (pow(16,i))*hexadezimalzahl.at(i); } return dezimalzahl2; }
string printHexadezimalZahl(vector<char> &hexadezimalzahl){ stringstream s; for(int i = hexadezimalzahl.size()-1; i >= 0 ; i--){ s << hexadezimalzahl.at(i); } return s.str(); }
int main(void){
unsigned int dez_A = 500; // Hexadezimal: 1F4 unsigned int dez_B = 439; // Hexadezimal: 1B7 // Achtung: die Dualzahl wird hier "verkehrt herum" initialisiert! // Die niederwertigste Ziffer steht vorne im Vektor (Index 0) vector<char> hexadezimal_C = {'4','2','5','C','9'}; // Dezimal: 640292 vector<char> hexadezimal_D = {'A','4'}; // Dezimal: 74 // Konvertiere dezimal zu hexadezimal vector<char> hexadezimal_A = dezimalZuHexadezimal(dez_A); vector<char> hexadezimal_B = dezimalZuHexadezimal(dez_B); // Konvertiere hexadezimal zu dezimal unsigned int dez_C = hexadezimalZuDezimal(hexadezimal_C); unsigned int dez_D = hexadezimalZuDezimal(hexadezimal_D); // Ergebnisse ausgeben cout << "--------------------------------------" << endl; cout << "| | Dezimal | Hexadezimal |" << endl; cout << "--------------------------------------" << endl; cout.fill(' ');
cout << "| Zahl A |"; cout.width(12); cout << dez_A << " | "; cout.width(11); cout << printHexadezimalZahl(hexadezimal_A) << " |"<< endl;
cout << "| Zahl B |"; cout.width(12); cout << dez_B << " | "; cout.width(11); cout << printHexadezimalZahl(hexadezimal_B) << " |"<< endl;
cout << "| Zahl C |"; cout.width(12); cout << dez_C << " | "; cout.width(11); cout << printHexadezimalZahl(hexadezimal_C) << " |"<< endl;
cout << "| Zahl D |"; cout.width(12); cout << dez_D << " | "; cout.width(11); cout << printHexadezimalZahl(hexadezimal_D) << " |"<< endl; }
|
Dieser Post wurde am 09.07.2020 um 19:14 Uhr von FloSoft editiert. |