Dezimal-Konvertierungen zu base-Nummern 2-16 (Binäre durch Hexadezimal)
Hey, ich Schreibe ein Programm, das konvertiert dezimal zahlen in jeder base unit von Binär zu hexadezimal (2,3,4,....,15,16). Dies ist, was ich habe, so weit, mit einer beliebigen Anzahl von 2 - 15 Ergebnisse in einer Endlosschleife. Ich Frage mich, ob Sie hatte einen Rat für den rest von meinem Projekt. Beim laufen, dieser wird Sie bitten, für zwei ganze zahlen, die erste sollte eine dezimale ganze Zahl > 0, die zweite sollte die Basis geben, die Sie wollen umgewandelt. Jede und alle Ratschläge für das ausfüllen dieser würde sehr geschätzt werden! Danke.
#include <stdio.h>
#include <stdlib.h>
int main(void){
int x, y, z, c;
printf("Please enter two integers: ");
scanf("%d", &x);
scanf("%d", &y);
printf("%d\n", x);
printf("%d\n", y);
printf(" \n");
if(y < 2 | y > 16){
printf("You have entered incorrect information.\n");
return 0;
}
else if(y > 1 && y < 16){
while(z != 0){
z = (x/y);
c = (x%y);
printf("%d\n", z);
}
printf("%d\n", z);
printf("%d\n", c);
}
else if(y == 16){
printf("%X\n", x);
}
}
**********************Bearbeiten**********************
#include <stdio.h>
#include <stdlib.h>
int main(void){
int x, y, z, c, i;
printf("Please enter two integers: ");
scanf("%d", &x);
scanf("%d", &y);
printf("%d\n", x);
printf("%d\n", y);
printf(" \n");
if(y < 2 || y > 16){
printf("You have entered incorrect information.\n");
return 0;
}
else if(y > 1 && y < 17){
while(x != 0){
c = (x%y);
x = (x/y);
if( c > 1 && c < 10){
printf("%d", c);
}else if( c == 10){
c = printf("A");
}else if( c == 11){
c = printf("B");
}else if( c == 12){
c = printf("C");
}else if( c == 13){
c = printf("D");
}else if( c == 14){
c = printf("E");
}else if( c == 15){
c = printf("F");
}
}
printf("\n");
}
Dies ist der Fortschritt, den ich gemacht habe bisher. Meine Probleme sind: ich Schaffe es nicht, die Werte A-F, um die Ausgabe richtig zu stellen Nummern 10-15. Auch ich kann nicht die ganzen zahlen angezeigt werden, ist der richtige Weg. Ich denke, das ist eine einfache Lösung, sondern ein Befehl, den ich bin nicht verwendet, um noch. Danke Euch allen für Eure Hilfe, es ist schon sehr vorteilhaft.
*********Bearbeiten 2 ************
#include <stdio.h>
#include <stdlib.h>
int main(void){
int x, y, z, c; //Sets up variables to be used in program
printf("Please enter two integers: "); //Asks for user input
scanf("%d", &x);
scanf("%d", &y); //stores input
printf("%d\n", x);
printf("%d\n", y);
printf(" \n");
if(y < 2 || y > 16){
printf("You have entered incorrect information.\n");
return 0;
} //bug checks
else if(y > 1 && y < 17){
while(x != 0){
c = (x%y);
x = (x/y); //Loops numbers until a 0 value is reached, can be used with
//any Base
if( c == 10){
c = printf("A");
}else if( c == 11){
c = printf("B");
}else if( c == 12){
c = printf("C");
}else if( c == 13){
c = printf("D");
}else if( c == 14){
c = printf("E");
}else if( c == 15){
c = printf("F");
}else{
printf("%d", c);
}
//Returns for each remainer option
}
printf("\n");
}
}
OKay drittes mal ist der Charme. Das einzige problem habe ich mit meinem code jetzt ist, dass ich kann nicht herausfinden, wie machen es die Ausgabe in umgekehrter Reihenfolge, der richtigen Reihenfolge. Ignorieren ist mein zweiter edit, ich löste das Problem selbst. Jede Eingabe wäre toll. Ich weiß wirklich nicht, wie ich werde, um es zu bekommen zu kommen rückgängig gemacht. Vielen Dank an alle!
|
sollte ||
("oder sonst"). z
ist nicht initialisiert und die Schleife ändert nicht den Zustand (endlos).In Ihrem
while (z != 0)
Schleife, unter welchen Umständen z
0 werden? Passiert da was in der Schleife beeinflussen den Wert des z
überhaupt?Das ist Teil meines Problems. Ich will immer wieder teilen z, bis er 0 erreicht. Ich bin neu in C und ich bin verwirrt, wie ich generieren würde.
Ändern
printf("%d\n", z)
zu putchar("0123456789ABCDE"[z])
. Machen while () - Schleife ein do ... while()
drucken 0;Dies wurde gerade gefragt. Siehe link: stackoverflow.com/questions/19072348/...
InformationsquelleAutor Ted Cost | 2013-10-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Seit
x
ist nicht geändert in dieser Schleifez
wird immer berechnet den gleichen Wert, und die Schleife wird nie beendet:Zum konvertieren einer Zahl in einen Unterschied base, was Sie normalerweise tun, ist immer wieder dividieren Sie die Zahl durch die Basis, und die Reste geben Sie die Ziffern. Dies wird drucken Sie die Ziffern vom letzten zum ersten:
dies wirkte Wunder! Jetzt muss ich arbeiten daran, es zu kommen nach hinten!
InformationsquelleAutor Joni
Dies ist ein Spaß.
Einige Vorschläge:
Diese version hat bis zu base 36, Druck-Buchstaben-stellige Symbole > 9, und druckt beide umgedreht und erwartet, um...
Und, wenn Sie ausgeführt wird,
Nun, wie würden Sie ändern diese konvertiert einen input string in eine angegebene Basis?
InformationsquelleAutor ChuckCottrill
Um-Einführung in eine alte Stil debugging-Prozess genannt Trockenlauf
InformationsquelleAutor Tony Hopkinson
Dies ist seltsam, Sie 0 zurückgeben, was bedeutet, dass "alles gut gegangen" wenn es eine Fehlermeldung, und Sie werden nicht zurückkehren, nichts sonst.
Plus ja, Sie meinte, | | nicht |
Sie hat nicht initialisieren Ihrer z-variable, könnte es niemals in die Schleife, wenn es 0 ist, und noch schlimmer, Sie sind nie zuneigung neuen Wert für z, so dass, wenn es nicht 0 ist, wird es auch nie werden, und Sie sind in einer endlos-Schleife
InformationsquelleAutor toor
Zweck dieses Programms ist es, zu lernen, wie die Konvertierung von zahlen zu anderen Basen, nicht nur um zu versuchen, aus
printf
wenn es gibt Ihnen eine Verknüpfung. Warum nicht versuchen:geeigneten Methoden?
Verwenden Sie außerdem keine
x
undy
für Variablen-Namen. Sie schreiben, die dies für das Verständnis, nicht zu spielen, Code Golf.Sollten Sie auch versuchen, machen dies zu einem mehr general purpose Programm. Anstelle von Druck-alles so, wie Sie berechnen, erstellen Sie eine Zeichenfolge (ein
char[]
) und drucken. So, dieconvert
Funktion, die ich vorgeschlagen, Sie schreiben sollten erklärt werden:oder
Durch die Art und Weise, was passiert, wenn
x
negativ ist? Ich bin mir nicht sicher, ob Sie das richtige tun. Vielleicht solltest du dirx
aus der Benutzer zuerst, und dann bekommeny
vom Benutzer. Auf diese Weise können Sie geben dem Benutzer eine zweite chance, wenn er Typen in1
statt16
:Durch die Art und Weise, obwohl es nicht standard ist, gibt es Gründe für die Verwendung von höheren Basen. Ein Buch, das ich mit dem Titel Programmierung, als wenn die Leute Zählte von Nathaniel S. Borenstein (ISBN 0691037639) beschreibt eine situation, wo ein college ausgedruckt zufällig generierte IDs auf Adressetiketten. Leider, manchmal sind die IDs sah aus wie 2378gw48fUCk837 oder he294ShiT4823, und der Empfänger dachte, die Schule wurde zu fluchen.
Einen Ausschuss einberufen, um Wörter vorschlagen, die nicht in diese IDs. Ein student, Praktikant kam auf diese Idee, dass der Ausschuss überflüssig: Nur mit Basis 31 und weglassen der Vokale. Das heißt, verwenden Sie 0123456789bcdfghjklmnpqrstvwxyz als der Basis-31 Ziffern. Dies reduziert die Arbeit, eine Menge Programmierung unnötig, und Leute aus einem job heraus.
Natürlich nicht. Aber nur um zu wissen, wie zu verwenden
printf
ist nicht der Punkt.InformationsquelleAutor Eric Jablow
InformationsquelleAutor Jatinkumar Dadhaniya