Hexadezimalzahl -> Dezimalzahl
-
TactX schrieb:
ten schrieb:
res = (res<<4) + c;
Mach doch aus dem + noch ein | dann wirds noch elitärer
stimmt. grundrechenarten und bitoperationen gemischt sieht doof aus
-
ah, super, ich glaub ich hab beides jetzt verstanden,
werde aber erst einmal das umsetzen:summe = 0 Text von hinten her durchgehen { wenn textzeichen bei aktueller position zwischen '0' und '9' summe += (textzeichen bei aktueller position - '0') * 16^(länge-position) sonst das selbe mit 'a' bis 'f' }
und wenn das super geklappt hat und ich noch zeit habe,mach ich mich an die meiner meinung nach kompliziertere variante
bin mal gespannt ob ich morgen vormittag genug zeit dafür habe. hab mich in das thema zeiger noch nicht so ganz reingelesen, deshalb könnte es sein, das ich diesbezüglich ein paar schwierigkeiten bekomme und mich noch mal melde, ansonsten schon mal vielen vielen dank !
-
char hextab[24] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','A','B','C','D','E','F'}; int dectab[24] = { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10, 11, 12, 13, 14, 15, 10, 11, 12, 13, 14, 15}; char hex[256] = "ffffffff"; int zahl = 0; for (int i = 0; i < 8; i++) { for (int j = 0; j < 24; j++) if (hex[i] == hextab[j]) { zahl <<= 4; zahl |= dectab[j]; break; } printf("Fehler in Hexzahl!"); break; }
:xmas1:
-
verfluchte fehler
char hextab[24] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','A','B','C','D','E','F'}; int dectab[24] = { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10, 11, 12, 13, 14, 15, 10, 11, 12, 13, 14, 15}; char hex[256] = "ffffffff"; int zahl = 0; for (int i = 0, j; i < 8; i++) { for (j = 0; j < 24; j++) { if (hex[i] == hextab[j]) { zahl <<= 4; zahl |= dectab[j]; break; } } if (hex[i] != hextab[j]) { printf("Fehler in Hexzahl!"); break; } }
-
spagetti schrieb:
zahl |= dectab[j];
zahl |= (j%16 + j/16*10);
:xmas2:
-
hmmm, ich bekomms nicht hin...
ich scheitere schon bei der eingabe von der hexzahl.
welche variable wird für die eingabe genutzt, und wie sieht da die syntax aus?
wenn ich etwas mitgets ( variable );
mache, spuckt er mir einen fehler beim compilieren aus.
könntet ihr mir ne erklärung zu den verwendeten variablen geben, ich verstehe es leider einfach nichtdaher schaff ichs auch nich das "drum herrum" zu programmieren.
achja und ein frohes neues wünsche ich
-
tim-buktu schrieb:
gets ( variable );
char variable[256]; gets (variable);
aber vorsicht,
nicht mehr als 'sizeof(variable)-1' zeichen eingeben, weil 'gets' nicht weiss wieviel platz da ist...
:xmas2:
-
Ohne den Code wie du variable definiert hast können wir nichts sagen. Die Fehlermeldungen gehören auch zu einer ordentlichen Problembeschreibung.
Außerdem ist gets() eh nicht gut. fgets() sollte für Eingaben benutzt werden. Ein einfaches Beispiel für die Benutzung von fgets liefer ich dir sogar:#include <stdio.h> #define BUFF_MAX 64 int main(void){ char buffer[BUFF_MAX]; fgets(buffer, BUFF_MAX, stdin); puts(buffer); return 0; }
-
nun ja, ich wollte es jetzt mit diesem code umsetzten
char hextab[24] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','A','B','C','D','E','F'}; int dectab[24] = { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10, 11, 12, 13, 14, 15, 10, 11, 12, 13, 14, 15}; char hex[256] = "ffffffff"; int zahl = 0; for (int i = 0, j; i < 8; i++) { for (j = 0; j < 24; j++) { if (hex[i] == hextab[j]) { zahl <<= 4; zahl |= dectab[j]; break; } } if (hex[i] != hextab[j]) { printf("Fehler in Hexzahl!"); break; } }
aber ich verstehe ihn leider nicht wirklich
wie muss ich den code abändern, damit ich eine eingabe machen kann bzw. auch wieder die richtige dezimalzahl ausgegeben wird...also welche variable wird dazu genutzt? ist das hextab[] oder hex[] ?ich hätte nich so viel feiern sollen an den feiertagen, ich glaub das hat mir das gehirn zermatscht
-
hmmm also, so langsam steige ich doch dahinter...
das problem an dem programm bisher ist nur, das wenn ich nur eine ziffer eingebe, das der hinter diese ziffer nullen stellt, also praktisch die maximale wertigkeit für diese eine ziffer nimmt, wobei er dabei glaub ich auch en rechnen fehler hat(glaube ich jedenfalls). hab den code mal so abgeändert:char hextab[24] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','A','B','C','D','E','F'}; int dectab[24] = { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10, 11, 12, 13, 14, 15, 10, 11, 12, 13, 14, 15}; char hex[256] = "ffffffff"; unsigned long zahl = 0,i,j; gets (hex); for ( i = 0 ; i < 8; i++) { for (j = 0; j < 24; j++) { if (hex[i] == hextab[j]) { zahl <<= 4; zahl |=(j%16 + j/16*10); break; } } if (hex[i] != hextab[j]) { printf("Fehler in Hexzahl!"); break; } } puts(hex); printf("%li",zahl); getch();
wie bekomm geht das, das der wenn ich nur eine ziffer eingebe, die kleinste wertigkeit dafür nimmt, sprich die vorderen 7 stellen mit 0en füllt?
-
machs so
#include <stdio.h> #include <string.h> int main() { const char hextab[24] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','A','B','C','D','E','F'}; const int dectab[24] = { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10, 11, 12, 13, 14, 15, 10, 11, 12, 13, 14, 15}; char hex[256]; unsigned long zahl = 0; size_t i, j; gets (hex); for ( i = 0 ; i < strlen(hex) && i < 8; i++) { for (j = 0; j < 24; j++) { if (hex[i] == hextab[j]) { zahl <<= 4; zahl |= dectab[j]; break; } } if (hex[i] != hextab[j]) { printf("Fehler in Hexzahl!"); //break; return 0; } } if (strlen(hex) >= 8) printf("Fehler Hexzahl hat mehr als 8 Stellen!"); else printf("%li\n",zahl); return 0; }
-
dankö, so meinte ich es.
verstehe nur 2 zeilen nicht 100%igsize_t
wozu braucht man das ?
undi < strlen(hex)
ansonsten ist der code ja fast gleich dem von vorher.
aufgabe 2 hab ich mitlerweile auch fertig.
#include <stdio.h> #include <conio.h> void main() { int awahl; do { int a[5]={ 0,0,0,0,0},b[5]={ 0,0,0,0,0},tmp[6]={ 0,0,0,0,0,0},i; clrscr(); printf("Menupunkt 1:\tSkalarprodukt berechnen\n"); printf("Menupunkt 0:\tEnde"); printf("\n\nBitte geben Sie einen Menupunkt ein: "); scanf("%i",&awahl); switch (awahl) { case 1: { clrscr(); for (i=0;i<5;i++) { printf("Bitte geben Sie a%i ein: ",i); scanf("%i",&a[i]); } for (i=0;i<5;i++) { printf("Bitte geben Sie b%i ein: ",i); scanf("%i",&b[i]); } clrscr(); for (i=0;i<5;i++) { tmp[i]=a[i]*b[i]; printf("Produkt aus a%i und b%i ist: %i\n",i,i,tmp[i]); getch(); } tmp[6]=tmp[0]+tmp[1]+tmp[2]+tmp[3]+tmp[4]+tmp[5]; printf("\n\nDas Skalarprodukt ist: %i",tmp[6]); getch(); break; } case 0: { clrscr(); printf("Ende"); break; } default: { clrscr(); if (awahl!=1 && awahl !=0) {printf("Falsche Eingabe"); getch(); break; } } } }while(awahl!=0); }
jemand was dran auszusetzen ?
-
size_t ist ein vorzeichenloser Ganzzahltyp - der laut Standard zur Angabe von Speichergrößen verwendet wird. Und der Vergleich auf strlen(hex) sichert, daß du nicht über die Länge der Eingabe hinausliest (hinter der Eingabe stehen eventuell noch Nonsens-Zeichen, die dir die Berechnung zerstören könnten)
Zu deiner neuen Frage: Was genau war die Aufgabe? Und ist es wirklich nötig, die Zwischenergebnisse der Skalarprodukt-Berechnung mitzuführen?
-
das ist die aufgabe:
zur aufgabe2:
ein programm, das die berechnung eines skalarproduktes realisiert.
vorgabe:
zwei int felder a und b jeweils der länge 5 sollen eingelesen werden (a0,a1,a2...) (b0,b1,b2...)
es soll nach der formel skprod=∑i=0..4 Ai*Bi berechnet werden und anschließend sollen die beiden vektoren a und b bzw ihre komponenten sowie das ergebniss skprod ausgegeben werden.