» 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
180
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
407
29.09.2011, 10:35
Honda_Civic_Boy_VB
Contents Funktion
Hallo, ist es irgendiwe möglich in PMWiki eine art contents funktion (wie z.B. im MediaWiki das die "Überschriften" automatisch am seitenanfang in ner contents-box zusammengefasst werden) einzubauen? Vielleicht gibt es ja auch schon eine...
von qrawl
0
1.259
19.09.2007, 14:36
qrawl
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
417
28.06.2015, 13:33
arti1012
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.159
09.06.2012, 18:29
Dragonia
LWR ohne Funktion
Salve zusammen, kürzlich hat die Leuchtweitenregulierung auf der Beifahrerseite aufgegeben. Heute ist mir aufgefallen, daß es auch die linke nicht mehr tut. Vor zwei Wochen ging wenigstens diese noch... Wie gehe ich am besten auf Fehlersuche? Das WHB hat...
von LSi
3
518
13.02.2013, 22:04
white*angel
Problem mit PN funktion
Hallo Leute, Bekam von dem User AndreasRoedel eine PM, weil er sich für meinen Civic interessiert. Als flink antworten dachte ich. Jedoch kommt dann auf einmal die Meldung der Benutzer exisiterit nicht. Okay dachte ich, dann schaust mal in die Suche und...
von Mitsupichu
1
192
03.09.2012, 13:23
DarkAngel1977
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
374
07.06.2011, 20:20
Pumsti
© 2004 - 2025 www.programmierer-forum.de | Communities | Impressum |