Einführung
In diesem Lab werden wir lernen, wie man Zahlen zwischen verschiedenen Zahlensystemen mit der Programmiersprache C umwandelt. Das Lab umfasst die folgenden Schritte:
- Einlesen der Zahl und der Zielbasis aus der Benutzereingabe.
- Implementieren des Umrechnungsalgorithmus mithilfe von Division und Resten, um die Dezimalzahl in die Zielbasis umzuwandeln.
- Ausgabe der umgewandelten Zahl.
Das Lab bietet eine schrittweise Anleitung zur Entwicklung eines Basisumrechnungsprogramms in C und behandelt die erforderlichen Konzepte aus der Zahlentheorie und der diskreten Mathematik.
Einlesen der Zahl und der Zielbasis
In diesem Schritt werden wir lernen, wie man in der Programmiersprache C eine Zahl und ihre Zielbasis für die Umrechnung einliest. Wir werden ein einfaches Programm erstellen, das es Benutzern ermöglicht, eine Dezimalzahl einzugeben und die Basis anzugeben, in die sie diese umwandeln möchten.
Zuerst erstellen wir eine neue C-Datei für unser Basisumrechnungsprogramm:
cd ~/project
nano base_converter.c
Jetzt schreiben wir den Anfangscode, um die Zahl und die Zielbasis einzulesen:
#include <stdio.h>
int main() {
int number, base;
// Aufforderung an den Benutzer, die Dezimalzahl einzugeben
printf("Enter a decimal number to convert: ");
scanf("%d", &number);
// Aufforderung an den Benutzer, die Zielbasis einzugeben
printf("Enter the target base (2-16): ");
scanf("%d", &base);
// Überprüfung der Basis-Eingabe
if (base < 2 || base > 16) {
printf("Invalid base. Please enter a base between 2 and 16.\n");
return 1;
}
printf("Number entered: %d\n", number);
printf("Target base: %d\n", base);
return 0;
}
Wir kompilieren und starten das Programm:
gcc base_converter.c -o base_converter
./base_converter
Beispielausgabe:
Enter a decimal number to convert: 42
Enter the target base (2-16): 2
Number entered: 42
Target base: 2
Code-Erklärung:
- Wir verwenden
scanf(), um die Dezimalzahl und die Zielbasis aus der Benutzereingabe einzulesen. - Wir überprüfen die Basis, um sicherzustellen, dass sie zwischen 2 und 16 liegt (unterstützt Binär bis Hexadezimal).
- Das Programm gibt die eingegebene Zahl und Basis zurück, um die Eingabe zu bestätigen.
Umrechnung mit Division und Resten
In diesem Schritt werden wir den Kernalgorithmus zur Umrechnung einer Dezimalzahl in eine andere Basis mithilfe von Division und Resten implementieren. Wir werden unser vorheriges Programm ändern, um die Umrechnungslogik hinzuzufügen.
Öffnen Sie die vorhandene Datei und aktualisieren Sie den Code:
cd ~/project
nano base_converter.c
Ersetzen Sie den vorherigen Code durch die folgende Implementierung:
#include <stdio.h>
#include <string.h>
// Funktion zur Umrechnung von Dezimal in eine beliebige Basis
void convertToBase(int number, int base, char *result) {
int index = 0;
char digits[] = "0123456789ABCDEF";
// Sonderfall 0 behandeln
if (number == 0) {
result[index++] = '0';
result[index] = '\0';
return;
}
// Umrechnung mit Division und Resten
while (number > 0) {
int remainder = number % base;
result[index++] = digits[remainder];
number = number / base;
}
// Zeichenkette umkehren
result[index] = '\0';
for (int i = 0, j = index - 1; i < j; i++, j--) {
char temp = result[i];
result[i] = result[j];
result[j] = temp;
}
}
int main() {
int number, base;
char result[33]; // Max. 32 Bits + Null-Terminator
// Benutzer auffordern, die Dezimalzahl einzugeben
printf("Enter a decimal number to convert: ");
scanf("%d", &number);
// Benutzer auffordern, die Zielbasis einzugeben
printf("Enter the target base (2-16): ");
scanf("%d", &base);
// Basis-Eingabe überprüfen
if (base < 2 || base > 16) {
printf("Invalid base. Please enter a base between 2 and 16.\n");
return 1;
}
// Umrechnen und das Ergebnis ausgeben
convertToBase(number, base, result);
printf("Decimal %d in base %d is: %s\n", number, base, result);
return 0;
}
Kompilieren und starten Sie das Programm:
gcc base_converter.c -o base_converter
./base_converter
Beispielausgabe:
Enter a decimal number to convert: 42
Enter the target base (2-16): 2
Decimal 42 in base 2 is: 101010
Enter a decimal number to convert: 255
Enter the target base (2-16): 16
Decimal 255 in base 16 is: FF
Code-Erklärung:
- Die Funktion
convertToBase()implementiert den Kern-Umrechnungsalgorithmus. - Nutzt Division und Rest, um die Ziffern von rechts nach links zu extrahieren.
- Unterstützt Basen von 2 bis 16 mithilfe eines vordefinierten Ziffern-Satzes.
- Behandelt den Sonderfall 0.
- Kehrt die Ergebniszeichenkette um, um die richtige Ziffernreihenfolge zu erhalten.
- Nutzt ein Array von Ziffern, um die Reste auf die entsprechenden Basiszeichen abzubilden.
Ausgabe der umgewandelten Zahl
In diesem letzten Schritt verbessern wir unser Basisumrechnungsprogramm, indem wir umfassendere Ausgabe- und Formatierungsoptionen hinzufügen, um die umgewandelte Zahl anzuzeigen.
Öffnen Sie die vorhandene Datei und aktualisieren Sie den Code:
cd ~/project
nano base_converter.c
Aktualisieren Sie den Code mit verbesserten Ausgabe- und Formatierungsfunktionen:
#include <stdio.h>
#include <string.h>
// Funktion zur Umrechnung von Dezimal in eine beliebige Basis
void convertToBase(int number, int base, char *result) {
int index = 0;
char digits[] = "0123456789ABCDEF";
int original = number; // Ursprüngliche Zahl für die Anzeige speichern
// Sonderfall 0 behandeln
if (number == 0) {
result[index++] = '0';
result[index] = '\0';
return;
}
// Umrechnung mit Division und Resten
while (number > 0) {
int remainder = number % base;
result[index++] = digits[remainder];
number = number / base;
}
// Zeichenkette umkehren
result[index] = '\0';
for (int i = 0, j = index - 1; i < j; i++, j--) {
char temp = result[i];
result[i] = result[j];
result[j] = temp;
}
}
// Funktion zur Ausgabe detaillierter Umrechnungsinformationen
void printConversionInfo(int decimal, int base, const char *converted) {
printf("\n--- Number Conversion Details ---\n");
printf("Original Number (Decimal): %d\n", decimal);
printf("Target Base: %d\n", base);
printf("Converted Number: %s\n", converted);
// Zusätzliche Basisdarstellungen
printf("\nBase Representations:\n");
printf(" Decimal: %d\n", decimal);
// Binäre Darstellung
if (base!= 2) {
char binaryResult[33];
convertToBase(decimal, 2, binaryResult);
printf(" Binary: %s\n", binaryResult);
}
// Hexadezimale Darstellung
if (base!= 16) {
char hexResult[9];
convertToBase(decimal, 16, hexResult);
printf(" Hexadecimal: %s\n", hexResult);
}
}
int main() {
int number, base;
char result[33]; // Max. 32 Bits + Null-Terminator
// Benutzer auffordern, die Dezimalzahl einzugeben
printf("Enter a decimal number to convert: ");
scanf("%d", &number);
// Benutzer auffordern, die Zielbasis einzugeben
printf("Enter the target base (2-16): ");
scanf("%d", &base);
// Basis-Eingabe überprüfen
if (base < 2 || base > 16) {
printf("Invalid base. Please enter a base between 2 and 16.\n");
return 1;
}
// Zahl umrechnen
convertToBase(number, base, result);
// Detaillierte Umrechnungsinformationen ausgeben
printConversionInfo(number, base, result);
return 0;
}
Kompilieren und starten Sie das Programm:
gcc base_converter.c -o base_converter
./base_converter
Beispielausgabe:
Enter a decimal number to convert: 42
Enter the target base (2-16): 16
--- Number Conversion Details ---
Original Number (Decimal): 42
Target Base: 16
Converted Number: 2A
Base Representations:
Decimal: 42
Binary: 101010
Hexadecimal: 2A
Code-Erklärung:
- Hinzufügen der Funktion
printConversionInfo()zur Ausgabe detaillierter Umrechnungsinformationen - Anzeige der ursprünglichen Dezimalzahl, der Zielbasis und des umgewandelten Ergebnisses
- Einbeziehung zusätzlicher Basisdarstellungen (binär und hexadezimal)
- Bedingte Ausgabe alternativer Basisdarstellungen, um Redundanzen zu vermeiden
- Bereitstellung einer informativeren und lehrreichen Ausgabe
Zusammenfassung
In diesem Lab haben wir gelernt, wie man in der Programmiersprache C eine Zahl und ihre Zielbasis für die Umrechnung einliest. Wir haben ein einfaches Programm erstellt, das es Benutzern ermöglicht, eine Dezimalzahl einzugeben und die Basis anzugeben, in die sie diese umwandeln möchten. Wir haben auch den Kernalgorithmus zur Umrechnung einer Dezimalzahl in eine andere Basis mithilfe von Division und Resten implementiert. Schließlich haben wir gelernt, wie man die umgewandelte Zahl in der gewünschten Basis ausgibt.
Die wichtigsten Lernpunkte aus diesem Lab umfassen das Verständnis, wie man die Funktion scanf() verwendet, um Benutzereingaben einzulesen, die Eingabe zu überprüfen, um sicherzustellen, dass die Zielbasis innerhalb des gültigen Bereichs liegt, und die Basisumrechnungslogik mithilfe von Division und Resten zu implementieren. Das Programm zeigt eine praktische Anwendung dieser Konzepte in der C-Programmierung.



