Я хочу создать калькулятор, способный вычислять с десятичными числами и возвращать десятичные значения в соответствующих двоичных, восьмеричных или шестнадцатеричных представлениях.
Пока что в основном методе программа читаеткомандная строка, и я могу вызвать программу двумя способами.
Первый путь будет с 3 значениями:
"number1" "operator" "number2".
А второй путь будет с4 значения:
"желаемая система счисления для выхода" "number1" "оператор" "number2".
Где для желаемого вывода числовой системы b будет стоятьдля двоичного, o для восьмеричного и h для шестнадцатеричного.В обоих случаях пользователь должен иметь возможность вводить десятичные, восьмеричные и шестнадцатеричные числа для входов number1 и number2.
#include "zahlen.h"
#include <stdio.h>
#include "stringTOint.h"
int main(int argc, char *argv[]) {
char o,op,sx[DIGITS+1],sy[DIGITS+1],sz[DIGITS+1];
int x,y,z;
char flag_x,flag_y;
/* 1) Read Commandline */
if (argc != 4 && argc != 5) {
printf("Aufruf: %s -o <x> <op> <y> \n",argv[0]);
return 1;
} else if(argc == 4) {
x = stringTOint(argv[1]);
op = argv[2][0];
y = stringTOint(argv[3]);
} else if(argc == 5) {
o = argv[1][0];
x = stringTOint(argv[2]);
op = argv[3][0];
y = stringTOint(argv[4]);
if(o != 'b' && o != 'o' && o != 'h') {
printf("Wrong Operation\n");
return 1;
}
}
/* 2) Solve the equation */
if(argc==4) {
printf("solve: %s %c %s \n", argv[1], op, argv[3]);
z = solve(x, op, y);
} else if(argc==5) {
printf("solve: %s %c %s \n", argv[2], op, argv[4]);
z = solve(x, op, y);
}
/* 3) Calculate the Representation of the wished Numeral System */
switch(o) {
case 'b':
intTObinaer(x, sx);
intTObinaer(y, sy);
intTObinaer(z, sz);
break;
case 'o':
intTOoctal(x,sx);
intTOoctal(y,sy);
intTOoctal(z,sz);
break;
case 'h':
intTOhexal(x,sx);
intTOhexal(y,sy);
intTOhexal(z,sz);
break;
default:
intTObinaer(x, sx);
intTObinaer(y, sy);
intTObinaer(z, sz);
break;
}
/* 4) Return the results */
printf("\n %s %d\n%c %s %d\n= %s %d\n", sx,x,op,sy,y,sz,z);
return 0;
}
Методы intTObinaer, intTOoctal и intTOhexal различаются только по основанию, с которым получает десятичное числоразделенный.
intTObinaer(int i, char str[]) {
unsigned int zahl = i;
int j;
/* Fill Array with zeros */
int x = 0;
for (x; x < DIGITS+1; x++) {
str[x] = '0';
}
/*Calculate the Binary representation of the given Decimal integer */
for (j = DIGITS-1; j > 0; j--) {
/* This base gets changed to 8 or 16 for octal and hexal representation */
str[j] = (char) (zahl % 2) + '0';
zahl = zahl / 2;
if (zahl == 0) {
break;
}
}
/* Set the end of the Array */
str[DIGITS] = '\0';
}
Фактическое уравнение решается в методе решения, где правильная операция для числа 1 и числа 2 выбирается распределительным шкафом, где различные случаи могут быть выбраны с помощью оператора ввода символов, который был введен пользователеммежду двумя числами.
#include <stdio.h>
int solve(int x, char op, int y) {
int ergebnis = 0;
switch(op) {
case '+':
ergebnis = x + y;
break;
case '-':
ergebnis = x - y;
break;
case '*':
ergebnis = x * y;
break;
case '/':
ergebnis = x / y;
break;
case '&':
ergebnis = x & y;
break;
case '|':
ergebnis = x | y;
break;
default:
printf("Wrong input\n");
}
return ergebnis;
}
Мой вопрос сейчас связан с тем, что пользователь должен иметь возможность вводить разные системы счисления (например, десятичную, восьмеричную или шестнадцатеричную), как я могу идентифицировать разные системы счисления и затем переводить их в десятичную системутак что я могу рассчитать результат.После этого эти десятичные числа должны быть преобразованы обратно в желаемую систему счисления, которую хотел пользователь.