Umwandlung von Dezi ins Okta oder Hexa oder Dual

amine89

Mitglied
Guten Abend zusammen !

kann mir vlt jmd bei dieser Aufgabe helfen und zwar ich bekomme richtige Ergebnisse nur die Hexazahl wird nicht mit Buchstaben ausgegeben !

danke im voraus.

C++:
#include <stdio.h>


int konvertieren(int basis, int zahl)
{
	char neu[100],i;

for ( i=0; zahl > 0; i++)
{neu[i]=zahl%basis;
zahl=zahl/basis;

if(basis==16){
	switch(neu[i]){
		case '10': printf("A");break;
		case '11': printf("B");break;
		case '12': printf("C");break;
		case '13': printf("D");break;
		case '14': printf("E");break;
		case '15': printf("F");break;
	}}
	
	else 
	printf("");
}
for (; i > 0; i--)
{
printf("%i",neu[i-1]);

} 
	return neu[i-1]; }
	
	int main (){
		// Variablen intitialisieren
	int z;

	int		b = 0;
	int		Ergebnis = 0;
		int beenden=0;
	do{
		// Basis einlesen
	
			printf("Bitte eine Basis: ");
			scanf("%i", &b);	
		
		// Zahl einlesen
		printf("Bitte eine Zahl eingeben:");
		scanf("%i",&z);
		
		// Funktion aufruf

	printf("Ergebnis %c \n",konvertieren(b,z) );
	
	//Programm beenden
		printf("Beenden des Programms ( drucken Sie 0)");
		printf("\n");
		printf("Neustart des Programms (drucken Sie 1)");
		printf("\n");
	  	scanf("%i",&beenden);	 
	
	}while(beenden == 1);
	
	return 0;
}
 
Zuletzt bearbeitet:
Moin,

präzisiere mal bitte Deine Frage!

Was wird (wo im Programm) ausgegeben und was würdest Du stattdessen erwarten ?

Wenn ich den doch wirr formatierten Code richtig verstehe, gibt Dir Deine Funktion "Konvertieren" einen Integer zurück - und genau den den scheinst Du auszugeben ... innerhalb dieser Funktion schreibst Du halt nur "A" und nicht "0xA" .....

Gruß
Klaus
 
Guten Morgen!

ich habe es so geändert ! aber das Problem ist: wenn ich als Basis 16 und als Zahl 90 eingebe , ich möchte dann als Rückgabe 5A bekommen und nicht 510 also A statt 10, weil das eine hexazahl sein sollte.
danke
C++:
switch(neu[i]){
        case '10': neu[i]='A' ;break;
        case '11': neu[i]='B';break;
        case '12': neu[i]='C';break;
        case '13': neu[i]='D';break;
        case '14': neu[i]='E';break;
        case '15': neu[i]='F';break;
    }
 
Zuletzt bearbeitet:
Hallo,

erstmal würde ich dich bitten den Quellcode vernünftig zu formatieren, das ist einfach unlesbar. Zum debuggen setze doch mal einen default-Wert in die switch ein und teste ob neu[ i ] überhaupt jemals das ist, was du erwartest. Ohne es genau angesehen zu haben vermute ich, das da der Fehler liegt.

Grüße,
Jennesta
 
Eine Frage hätte ich dazu auch noch:
Warum setzt du die Werte in Anführungszeichen?
Damit sind die multi-char Literale in den case Anweisungen gemeint. Die Werte, die diese repräsentieren, sind implementierungsabhängig.

Du kannst dir ja mal den Wert dieser Literale ausdrucken lassen
C:
printf("'10' = %d\n"
      "'11' = %d\n"
      "'12' = %d\n",
      '10',
      '11',
      '12');
Ausgabe (kompiliert mit GCC):
Code:
'10' = 12592
'11' = 12593
'12' = 12594
Jetzt kannst du dir mal überlegen warum da nicht das Richtige rauskommt.

Mal ein Tipp:
C:
const char* digits = "0123456789ABCDEF";

digits[12]; // Aha!
 
Nun, das wird ein Bytearray sein und z.B. bei '10' aus 49 und 48 zusammengesetzt sein.

Da "neu" in diesem Code aber ein Byte ist und damit nicht grösser als 255 werden kann, frage ich mich, warum der Threadersteller das so zu lösen versucht.

Gruss
cwriter
 
Nun, das wird ein Bytearray sein und z.B. bei '10' aus 49 und 48 zusammengesetzt sein.
Also dich meinte ich eigentlich mit der Frage nicht, ich wollte eigentlich den Threadersteller ansprechen.

Aber siehe z.B. http://stackoverflow.com/questions/6944730/multiple-characters-in-a-character-constant
Da "neu" in diesem Code aber ein Byte ist und damit nicht grösser als 255 werden kann, frage ich mich, warum der Threadersteller das so zu lösen versucht.
Naja, er wußte nicht was er tut... :)
 
Guten Abend zusammen!


ich habe mein Programm anders geschrieben, aber irgendwie ist was(oder sind viele Sache) nicht richtig!
Ich bitte euch alle um Ihre Hilfe!
C++:
#include <stdio.h>

 
 
int konvertieren(int basis, int zahl)
{
    char neu[100];
	int i;

for ( i=0; zahl > 0; i++)
                         {
						  neu[i]=zahl%basis;
                          zahl=zahl/basis;
 
          if(basis==16){
                               switch(neu[i]){       case 0: neu[i]=0;break;
                                                     case 1: neu[i]=1;break;
                                                     case 2: neu[i]=2;break;
                                                     case 3: neu[i]=3;break;
                                                     case 4: neu[i]=4;break;
							                         case 5: neu[i]=5;break;
                                                     case 6: neu[i]=6;break;
                                                     case 7: neu[i]=7;break;
                                                     case 8: neu[i]=8;break;
                                                     case 9: neu[i]=9;break; 
                                                     case 10: neu[i]='A';break;
                                                     case 11: neu[i]='B';break;
                                                     case 12: neu[i]='C';break;
                                                     case 13: neu[i]='D';break;
                                                     case 14: neu[i]='E';break;
                                                     default: neu[i]='F';break;
    }}
    
    else    {

	                           switch(neu[i]){       case 0: neu[i]=0;break;
                                                     case 1: neu[i]=1;break;
                                                     case 2: neu[i]=2;break;
                                                     case 3: neu[i]=3;break;
                                                     case 4: neu[i]=4;break;
							                         case 5: neu[i]=5;break;
                                                     case 6: neu[i]=6;break;
                                                     case 7: neu[i]=7;break;
                                                     case 8: neu[i]=8;break;
                                                     default: neu[i]=9;break; 
                                                                              }
	         }
			             }
for (; i > 0; i--)
{
printf("%i",neu[i-1]);
 
} 
    return neu[i-1]; }
    
    int main (){
        // Variablen intitialisieren
    int z;
 
    int     b = 0;
    char    Ergebnis = 0;
        int beenden=0;
    do{
        // Basis einlesen
    
            printf("Bitte eine Basis: ");
            scanf("%i", &b);    
        
        // Zahl einlesen
        printf("Bitte eine Zahl eingeben:");
        scanf("%i",&z);
        
        // Funktion aufruf
 
    printf("Ergebnis %c \n",konvertieren(b,z) );
    
    //Programm beenden
        printf("Beenden des Programms ( drucken Sie 0)");
        printf("\n");
        printf("Neustart des Programms (drucken Sie 1)");
        printf("\n");
        scanf("%i",&beenden);    
    
    }while(beenden == 1);
    
    return 0;
}
 
Hallo,

ich habe dir mal deine Funktion gebastelt.

C++:
int konvertieren(int basis, int zahl)
{
	static char digits[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
	char erg[100] = { 0 };
	int i = 0;
	
	while(zahl > 0) {
		int rest = zahl%basis;
		zahl = zahl/basis;
		erg[i] = digits[rest];
		i++;
	}
	while(i >= 0) {
		printf("%c", erg[i]);
		i--;
	}
	return 1;
}

Zu deinem Quellcode. Kann es sein das dein Rückgabewert irgendwie sinnfrei ist?
Womit schreibst du deinen Quellcode, sodass er so formatiert wird, beim kopieren? Bitte nächste mal vernünftig posten.

Grüße,
Jennesta
 
Zuletzt bearbeitet:
Zurück