Zahlen von beliebigen basen in beliebigen basen umwandeln

Ja super, um nochmal da sicher zu sein, bei chartyp 2 passiert das selbe nur das dies dann für die Ergebnisausgabe gilt und die erste natürlich bei der Eingabe, so nochmal ganz kurz zur logik, er hat das Int-Main wahrscheinlich nur aus Platzsparsamkeit nach hingesetzt, oder? ALso um sich die vorherige deklaration zu ersparen;)
 
So, ich hoffe erstmal das es die letzte frage ist für heute, zu dem folgendem teil nochmal, warum wir bei i-- vorher
 
Zuletzt bearbeitet:
Das beantworte ich dir, sobald du deinen Post so geändert hast, dass der Programm-Code in C-Tags steht:

[ c ]
hier kommt der Code rein
[ /c ]

PS: Die Leerzeichen innerhalb der eckigen Klammern musst du natürlich weglassen.
 
Hast du gut gemacht, darfst du ab jetzt immer machen :)
In diesem Fall ist es egal, ob du --i oder i-- schreibst, beide Male wird i um eins heruntergezählt (dekrementiert). Du solltest dir aber genau merken, was der Unterschied ist.
Wenn du --i schreibst, wird erst i dekrementiert, und der dekrementierte Wert ist dann der Wert des Ausdrucks.
Wenn du i-- schreibst, ist der ursprüngliche Wert der Variablen i der Wert des Ausdrucks, und erst dann wird i dekrementiert.
Beispiel:
C++:
{
  int i;
  i = 10;
  printf("i: %d\n",i--); // gibt 10 aus
  i = 10;
  printf("i: %d\n",--i); // gibt 9 aus
}
 
Der Compiler braucht das gar nicht zu wissen, das geschieht während der Laufzeit.
Zeichen werden als ASCII-Code im Speicher abgelegt, und dort belegen die Zeichen für 0 bis 9 und für A-Z jeweils einen durchgängigen Bereich. Wenn man also eine Ziffer in einem char gespeichert hat, kann man den Wert der Ziffer berechnen, indem man den ASCII-Wert von '0' davon abzieht.

C++:
char c;
int w;

c = '5'; // Das Zeichen für die Ziffer 5, ASCII-Wert 53
// von 53 wird jetzt der ASCII-Wert für die Ziffer 0 (48) abgezogen
w = c-'0'; // w bekommt den Wert 5;

Dieses Vorgehen wird sowohl bei den if-Bedingungen als auch bei der Berechnung des return-Wertes genutzt.
 
Hallo Velveth, habe gestern mit meinen Kollegen das ganze noch mal zum Lernen durchgeprobt und bin bei der letzten void-funktion ins stottern geraten!
C++:
void dezipart2(char* outbuffer, int value, int basis)
{
	char btwPuffer[32];                               (ZwischenPuffer wird auf 32 Zeichen begrenzt!)
	int buffPos=0;                                       (buffPos wird deklariert und mit 0 definiert, wenn z.B. 1 da steht dann habe ich ne differenz um 1, darum 0)
	int erg;                                                    (Erg wird als integer deklariert)
	while (value != 0)                                  (Hier wird mit while definiert, das value bei 0 beendet wird)
	{
                        erg = value % basis;                          (Hier wird der Rest ausgegeben, also das Ergebnis in umgekehrter  
	  value = value / basis;                         (hier wird  solange geteilt bis value 0 ist)
	  btwPuffer[buffPos]=chartyp2(erg);   (Das komplette Ergebnis wird erstmal in Falscher reihenfolge ausgegeben und durch ++buffPos von links nach rechts!)
      ++buffPos;            
	}
	for (int i=buffPos-1; i>=0; i--)               (hier wird durch durch for eine Schleife definiert die das Ergebnis in richtiger Reihenfolge bringt )
	{
		*outbuffer=btwPuffer[i];   (*outbuffer und btwPuffer werden von rechts nach links gleichgesetzt)
		++outbuffer;                      (fertige Ergebnis wird wieder von links nach rechts in richtiger Reihenfolge aufgeschrieben
                      }
                      *outbuffer=0;                                         Stringende
	
}

bin mir jetzt nicht ganz sicher was beim allerersten mal passiert, d.h. wenn jetzt 10 als dezi in oktal umgerechnet wird und Ergebnis 12 ist, ich weiss das beim ersten mal 2 ausgegeben wird und dann 1. Und dazu bin ich mir total unsicher welchen wert value als erstes annimmt und ob int erg das gleiche ergebnis darstellt wie in der ersten int Dezipartfunktion und als int erg nur neu mit rübergenommen wird!
C++:
}

int Dezipart1(char* c, int basis)
{
	char* beginn = c;
	int b=1;
	int erg=0;
	while( *c!=0)
		++c;

	do
	{
	  --c;
	  erg = erg+ chartyp1(*c)*b;
	  b=b*basis;

	}while (c != beginn);
	return erg;
}

Besten dank für die letzte Antwort und für diese nochmal im Vorraus
 
Zuletzt bearbeitet von einem Moderator:
Ich weiß nicht, was dein Problem ist. Abgesehen von den fehlenden Kommentarzeichen hast du doch alles korrekt beschrieben.

PS: Und lerne endlich mal, meinen Namen richtig zu schreiben.
 
Hast recht Vereth(Siehste nach CPP klappt auch das) Habe jetzt auch so gut wie alles verstanden, nur eine sache währe da noch, ich habe versucht die Ein und Ausgabe auf 6 zu beschränken und dabei folgendes probiert, nur es t nicht, hast irgend nen rat?
C++:
	char c[5];
	char co[5];
	int basStart, basZiel, erg;
    int i=c[5];

und dazu bei char btwPuffer nochmal begrenzt
C++:
char btwPuffer[5];

wo ist das probliem das er nach 5 buchstaben trotzdem rechnet?
 
Zuletzt bearbeitet von einem Moderator:
Für 5 Zeichen brauchst du 6 char's, weil du zusätzlich das Stringende-Kennzeichen anhängen musst.
 

Neue Beiträge

Zurück