» Beispielprogramm Umwandlung zwischen Zahlensystemen mit selbsgeschriebener Funktion itoa

Neu hier, hlife beim programmieren bitte!!Neuen Thread eröffnenNeue Antwort erstellenWochentagserrechnung nach Gauss oder Butcher
AutorNachricht
Junior 
Name: Voller Name als Anagramm: Fitje Weshoms
Geschlecht:
Fahrzeug: Yamaha YZF R6 Thundercat
Anmeldedatum: 15.07.2012
Beiträge: 92
Wohnort: Amberg, Oberpfalz
24.06.2014, 18:04
zitieren

Folgender Programmcode geschrieben für Linux wandelt natürliche Zahlen die als String
gespeichert sind von einem Zahlensystem ins andere um. Geschrieben wurde das ganze
in codeblocks 16.01. Sollte aber abwärtskompitabel sein.

Es wurde der Quelltext weiter geändert.

goto wird jetzt nicht mehr gebraucht, es wird mit switch gearbeitet.
Die Funktion getch entfällt daher.

Weiter wurde der Quellcode der Funktion itoa weiter auf c++ angenähert.
Ein Arbeiten mit char-Arrays bei itoa ist nicht mehr notwendig in diesem Beispiel.
Es soll ja der Umbau von c-Programmen auf c++ erleichtert werden.

Eigentlich ist die Ausgabe und die Eingabe im c++-Stil gehalten.
Aber die Funktionen sind noch im c-Stil, um die Kompatibilität zu erhalten.

Bei der Funktion xwertzudez, habe ich den Namen in xbasetoint geändert.
Diese wandelt eine als String gespeicherte Zahl eines Zahlensystems von 2 bis 36
in eine Dezimalzahl um. Danach wieder in ein anderes Zahlensystem von 2 bis 36.
So kann man von einem beliebigen Zahlensystem natürliche Zahlen in ein anderes
Zahlensystem konvertieren.

Übrigens: No Warranty!! Keine Gewähr!


#include <iostream>
#include <math.h>
#include <stdlib.h>


using namespace std;

std::string itoa(int zahl, int basis)
 {
  std::string puffer;
  std::string numzei = "0123456789abcdefghijklmnopqrstuvwxyz";
  int slei = 0, start;
  int produkt = 0, dummy = 0, nullsteller = 0;
  /* behandelt maximal basis hoch 16 große ganze Dezimalzahlen (natürliche Zahlen)
  zuerst wird geprüft, ob eine negative Zahl vorliegt*/
    if (zahl == 0 )
     {
      puffer = "0";
      return puffer;
     }
    if (zahl < 0 )
     {
      puffer += '-';
      zahl *= -1;
     }
  // Prüft, wann die erste Zahl vorliegt
   for (slei = 32; slei >= 0; slei--)
     {
      produkt = (int)pow(basis, slei);
      if (produkt != 0)
       {
        start = slei;
        break;
       }
     }
   for (slei = start; slei >= 0; slei--)
     {

      produkt = (int)pow(basis, slei);
      dummy   = zahl / produkt;
      zahl   -= dummy * produkt;

      if ((dummy == 0) && (nullsteller == 1))
       puffer += '0';
      if ( dummy != 0)
       {
        puffer += numzei[dummy];
        nullsteller = 1;
       }
      puffer += '\0';
     }
 return puffer;
 }


/**
  * xbasetoint Version 0.7
  * Wandelt eine als String gespeicherte Zahl(Parameter 2)
  * vom Zahlensystem "basis"(Parameter 3)
  * in eine Dezimalzahl um(Parameter 1)
  * Rückgabewert ist -1 falls das Zahlensystem < 2 oder > 36 ist
  * Falls eine fehlerhafte Zeichenfolge, die nicht dem umzuwandelnden
  * Zahlensystem entspricht vorliegt, wird -2 zurückgegeben
  * Geschrieben von Josef Wismeth
  * Lizenz unter GPL
  */
int xbasetoint(int *wert, std::string puffer, int basis)
 {
  char zeichen [36] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
                        'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
                        'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
                        'u', 'v', 'w', 'x','y','z'};
  int slei, sleib, erge, lenge, zahl, dummy, fehlertest;

  // Rückgabewert ist -1 falls basis ungueltig
  erge = -1;
  lenge = zahl = fehlertest = 0;
// check if basis is valid
  if (basis < 2 || basis > 36) return erge;

  //get length of string
  lenge = puffer.length();
  //for (slei = 0; slei < 200; slei++)
  // if ((puffer[slei]) != '\0') lenge++;
  //  else break;

  for (slei = 0; slei < lenge; slei++)
   {

    // Test, ob andere Zeichen vorhanden sind
    for (sleib = 0; sleib < basis; sleib++)
     if (zeichen[sleib] == puffer[slei]) fehlertest++;

    if ((puffer[slei]) == '\0')
     break;

   }

//Umwandlung des Strings in eine Dezimalzahl
//umwandeln: //cout << "Richtige Zeichen: " << fehlertest <<  "   Stringlaenge: " << lenge << endl;
    if (fehlertest != lenge)
     {
      erge = -2;
      return erge;
     }
     else erge = 0;

 for (slei = lenge - 1; slei >= 0; slei--)
   {
    dummy = puffer[slei];
    for (sleib = 0; sleib <= 35;sleib++)
     {
      if (dummy == zeichen[sleib])
       if (sleib > 0)
        zahl += pow(basis, (lenge -slei -1)) * sleib;
     }
   }
 *wert = zahl;

return erge;
}

int main(void)
{
int wouhi = 8, deza, erge, basis;
string buf, nummer;

do
switch(wouhi)
{
default:
    cout << endl << endl << "Programm zum Umrechnen von Zahlensystemen" << endl;
    cout << "dezi in hexa.....................1" << endl;
    cout << "hexa in dezi.....................2" << endl;
    cout << "Zahl System x in System y........3" << endl;
    cout << "Programmende ....................4" << endl;
    cin >> wouhi;
    if ((wouhi < 1) || (wouhi > 42)) wouhi = 8;
  break;

case 1:
    deza = 0;
    cout << "Eingabe Dezimalzahl: ";
    cin >> deza;
    cout <<"Hexa= " << hex << deza;
    wouhi = 8;
   break;

case 2:
    deza = 0;
     cout << endl << "Eingabe Hexadezimalzahl: ";
     cin >> hex >> erge;
     cout << "dezimal: " << erge << endl;
     wouhi = 8;
   break;

case 3:
    cout << endl << endl << "Umzuwandelnde Zahl eingeben: ";
    cin >> buf;
    cout << endl << "Basis dieser Zahl eingeben(von 2 bis 36): ";
    cin >> basis;
    erge = xbasetoint(&deza, buf, basis);
    if (!erge)
    {
     cout << endl << "Zielzahlensystem eingeben(2 bis 36): ";
     cin >> basis;
     nummer = itoa(deza, basis);
     cout << endl << "Im "<< basis<< "er-System dargestellt: " << nummer; //puffer;
    }
    else
     cout << "Fehlerhafte Zeichenfolge" << endl;
     wouhi = 8;
   break;


case 4:
    return 0;
   break;


}
while(wouhi != 4);

return EXIT_SUCCESS;
}


Viel Spaß beim Testen
Guiseppe


pn
Gast 
24.06.2014, 18:04
zitieren

Mach mit!

Wenn Dir die Beiträge zum Thread "Beispielprogramm Umwandlung zwischen Zahlensystemen mit selbsgeschriebener Funktion itoa" gefallen haben oder Du noch Fragen hast oder Ergänzungen machen möchtest, solltest Du Dich gleich bei uns anmelden:



Registrierte Mitglieder genießen die folgenden Vorteile:
✔ kostenlose Mitgliedschaft
keine Werbung
✔ direkter Austausch mit Gleichgesinnten
✔ neue Fragen stellen oder Diskussionen starten
✔ schnelle Hilfe bei Problemen
✔ Bilder und Videos hochladen
✔ und vieles mehr...


Neuen Thread eröffnenNeue Antwort erstellen
Ähnliche BeiträgeRe:
Letzter Beitrag
memcpy und Umwandlung von Groß-in Kleinbuchstaben
Hallo, ich soll eine Kopie der Zeichenkette "kette3" mit memcpy anlegen. Dann soll man in der Kopie "neueKette" alle Groß- in Kleinbuchstaben umwandeln, alle anderen Zeichen sollen unverändert bleiben. Dann ursprüngliche und...
[C]von luna12
1
151
03.06.2020, 14:27
steinsgate
Manteldeal: Tyros AG vor Umwandlung in Energie-Holding
Die Tyros AG (WKN: 509080) ist eine tickende Kurs-Bombe und eine Explosion aus unserer Sicht nur noch eine Frage der Zeit! Fakt ist: Der bis letztes Jahr noch insolvente Börsenmantel steht vor der kurzfristigen Wiederbelebung. Wie aus Seite 29 einer...
von dPA
5
5.156
02.06.2014, 09:06
dPA
Daihatsu Hijet Umwandlung in Offroad Mini Pickup Truck
https://www.youtube.com/watch?v=ti1MHUS62v0...
von mgutt
0
613
08.06.2014, 10:45
mgutt
LSD Funktion
Wollte mal wissen ob irgendjemand von euch weiß wie man herausfindet ob das LSD so funktioniert wie es soll? Oder könnte man sonst überhaupt nicht fahren. Wie weiß ich ob das LSD wirklich jetzt sperrt oder...
von Honda_Civic_Boy_VB
4
354
29.09.2011, 10:35
Honda_Civic_Boy_VB
Airbag Funktion
Hallo, kann mir mal einer sagen wie unser Airbag ausgelöst wird? Dafür muss es ja ein Aufprallsensor geben, wo sitzt dieser und wie funktioniert...
von Ingo01
3
223
10.11.2016, 16:20
stussy
Sound Off Funktion
hätte da mal ne kleine Anregung. Die Chat Sounds können einem Teilweise echt auf den Geist gehen :yes: Ich weis nicht wie oft ich mich zu Tode erschrecke, weil ich den Chat im Hintergrund habe und auf einmal son Sound kommt! Meistens hatte ich dann...
von HugoFreund
3
360
07.06.2011, 20:20
Pumsti
Mittelwert Funktion in C
Hallo, ich bin nicht so gut in Programmieren. Möchte das lernen aber ich weiss nicht wie. Wir haben Programmieren C und C++ in der Schule aber irgend wie verstehe ich das nicht so. Vielleich irgend welche Tipps wie ich mitch verbessern kann oder...
[C]von len4ik
7
37.632
12.08.2012, 08:15
Guiseppe
Berganfahrhilfe - Funktion
Vielleicht kann mir jemand kurz helfen. Wie funktioniert die Berganfahrhilfe im CRZ? Ich habe diesbezüglich keine Taste gefunden. Danke für eure...
von Japanbomber
2
351
13.01.2020, 07:02
Japanbomber
V-Tec auf Funktion prüfen?
Sevus Leute, ich bin eben auf dieses Forum gestoßen und habe mich gleich mal angemeldet. Ich fahre seit ca nem Monat einen Del Sol V-Tec 1,6L 125Ps Baujahr 1993. Da ich vorher noch nie Honda gefahren habe, kenne ich mich leider nicht mit V-Tec...
von Mr.Schraubergott
11
1.102
09.06.2012, 18:29
Dragonia
array in funktion
Hallo , ich möchte 4 zahlen nach der Größe sortieren, das ist für mich Jetzt kein Problem, allerdings möchte ich die Sortierung in einer Funktion machen. Aber die zahlen sollen trotzdem in der main ausgegeben werden also call by reference, kann mir...
[C++]von arti1012
1
368
28.06.2015, 13:33
arti1012
© 2004 - 2025 www.programmierer-forum.de | Communities | Impressum |