Probleme mit dem Array



  • Hey,
    damit ihr euch nicht wundert : Ich bin Anfänger in c++ .
    Also wollte einen Zahlensystemumrechner machen und bin dabei auf einige Probleme gestoßen. Ich gebe euch einfach mal die Aufgabenstellung :

    Zuerst sollen wir eine Klasse ZSUmrechner erstellen zum Umwandeln von ganzen Zahlen im Dezimalsystem in Zahlen Systemen mit beliebegen Basen zwischen 1 und 37. Alle Zahlen über 9 sollen als Buchstaben dargestellt werden.

    Die Deklaration soll auf einer Datei namens ZSUmrechner.h gemacht werden und umsetzen sollen wir es auf der Datei ZSUmrecner.cpp .

    In dem Hauptprogramm (main.cpp) ist mindestens ein Objekt dieses Typs zu schaffen und für einige verschiedene Basiswerte zu testen. Die gesamte E/A bis auf die Ausgabe des Ergebnisses (dies ist eine spezielle Ausnahme) ist mittels cout und cin im Hauptprogramm zu erledigen.

    Dann haben wir noch eine Kurzbescheibung für die Umrechnungsmethode bekommen:

    Man berechnet den Rest modulo der Basis B ( Operationszeichen: 😵 und speichert diesen in einen Hilfsspeicher an die Position mit Index 0. Danach teilt man den Dezimalwert ganzzahlig durch die Basis und erhält den neuen Wert nWert. Mit nWert wird nun genau so verfahren und man speichert den Ergebniswert an die Position 1, dann 2 usw.... Dies wird fortgesetzt solange nWert ungleich 0 ist. Wenn nWert gleich 0 ist, steht im Hilfsspeicher die komplette Ziffernfolge des Ergebniswertes in dem Zahlsystem mit Basis B (aber in umgekehrter Reihenfolge). Sodann muss in das Attribut ErgWert die berechnete Ziffernfolge in umgekehrter Reihenfolge und mit einem Stringabschlusszeichen „\0“ am Ende geschrieben werden.

    Mit der Aufgabe habe ich eigentlich mehrere Probleme und mich würde es freuen wenn diese in diesem Thread auch direkt geklärt werden können.
    Also ich hab noch keine Ahnung von Klassen und auch noch nie mit modulo oder mit einem Array gearbeitet. Daher hab ich jetzt mal alles in meiner main datei ohne Klassen geschrieben. Ich versuche mich im Moment am Binärsystem, aber da tauchen schon Probleme auf. Auch weiß ich nicht genau wie ich die Zahlen > 9 darstellen kann . Mit char ?! und einzeln den Zahlen von 10 bis 36 Buchstaben zuordnen?!
    Würde mich freuen wenn mir hier geholfen werden kann, auch wenn ich weiß dass, das Ziemlich viele Fragen auf einmal sind . Hier mein Quelltext bei dem ich leider Gottes keinen Fehler finde :(.

    #include<iostream>
    
    using namespace std;
    
    int main(void)
    {
    int dezWert, x, optionb, B, nWert, p = 0, i;
    int ergWert[100];	
    do
    	{
    	cout << "Das ist ein Umrechner von Zahlensystemen\n" << "\n";
    	cout << "Geben Sie ihre Dezimalzahl ein die Sie umrechnen möchten : \n";
    	cin >> dezWert;
    	cout << "Bitte Geben sie nun eine Basis zwischen 2 und 37 ein : \n";
    	cin >> optionb;
    	if(optionb == '2')
    		{
    		do
    			{
    			B = 2;
    			ergWert[p] = dezWert % B;
    			nWert = dezWert - ergWert[p];
    			x = nWert / B;
    			x = dezWert;
    			p++;
    			}while(x != 0);
    
    			cout << "Die Dezimalzahl : " << dezWert << "im Binärsystem : \n";
    
    			for (i=0; i<p; i++)
    			{
    			cout << ergWert[i] << "\n";
    			}
    
    		}
    	}while(true);
    }
    

    Danke schon einmal !! 🙂 👍



  • ich helf mal:

    #include <string>
    #include <iostream>
    
    class ZSUmrechner {
    public:
      /// Konstruktor der den Integer Wert ggf. setzt
      /// @param[in] int wert Der zu setzende Wert oder 0
      ZSUmrechner(int wert=0) : gesetzterWert(wert) {}  
    
      /// Setzt den Integer Wert
      /// @param[in] int wert Der zu setzende Wert
      void setzeZahl(int wert);
    
      /// Gibt den gesetzten Integer Wert zuück
      /// @param[in] int wert Der zu setzende Wert
      int welcheZahl();
    
      /// Gibt den umgewandelten Wert zurücl
      /// @param[in] int wert Basis [11..37]
      /// @return std::string der den Wert enhält
      std::string umgerechneterWertAlsString(unsigned short int basis);
    
    private: // methods
      /// Gibt den umgewandelten Wert zurücl
      /// @param[in] int wert Basis [2..10]
      /// @return std::string der den Wert enhält
      std::string rechneUm(int basis);
    
    private: // members
     int gesetzterWert;
    };
    
    void ZSUmrechner::setzeZahl(int wert) {
        gesetzterWert = wert;
    }
    
    int ZSUmrechner::welcheZahl() {
        return gesetzterWert;
    }
    
    std::string ZSUmrechner::umgerechneterWertAlsString(unsigned short int basis) {
        return rechneUm(basis);
    }
    
    std::string ZSUmrechner::rechneUm(unsigned short int basis) {
        const char lookUpTable [] = "0123456789abcdefghijklmnopqrstuvwxyz";
        std::string ergebnisReverse;
    
        // hier musste dann rumrechnen .. 
    }
    

    Die Aufgabe zielt warscheinlich auf char-arrays ab, einfacher (und c++'igger) ist die Nutzung von std::string (http://www.cplusplus.com/reference/string/string/). Da gibts sowas wie push_back("was") und insert(pos,"was") , sieh in die API.

    Dann google mal nach lookuptable und mach dir ein Kopf wie das Konstrukt in rechneUm(...) praktisch sein könnte beim umrechnen 😉

    Viel Spass dabei



  • fuman schrieb:

    Also ich hab noch keine Ahnung von Klassen

    Ja dann musst Du das ändern!

    fuman schrieb:

    und auch noch nie mit modulo oder mit einem Array gearbeitet.

    Ja dann musst Du das ändern!

    fuman schrieb:

    Auch weiß ich nicht genau wie ich die Zahlen > 9 darstellen kann . Mit char ?! und einzeln den Zahlen von 10 bis 36 Buchstaben zuordnen?!

    Ja. Du könntest Dir dazu zB zwei Funktionen schreiben. Eine ordnet einem Zeichen einen Wert zu und die andere ordnet einem Wert ein Zeichen zu.

    fuman schrieb:

    Würde mich freuen wenn mir hier geholfen werden kann, auch wenn ich weiß dass, das Ziemlich viele Fragen auf einmal sind.

    So viele Fragen sind das gar nicht. Ich habe nur eine gesehen. Du musst aber schon konkretere Fragen stellen. Du kannst nicht erwarten, dass man Dir Klassen, Arrays und % komplett erklärt. Das musst Du schon selbst anhand von Lehrmaterial erarbeiten. Wenn Du konkrete Fragen dazu hast, kannst Du sie natürlich hier stellen.

    kk



  • und wie weit bist du damit jetzt?


Log in to reply