-
Notifications
You must be signed in to change notification settings - Fork 0
/
binary.c
119 lines (90 loc) · 2.17 KB
/
binary.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
//## @Author: Paul Passek
//## Description: calculate binary or decimal version of a given number
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int decimalToBinary (int n);
int binaryToDecimal (int n);
void decideCalc (int d);
int main (int argc , char * argv[]) {
int d = 0;
printf ("***********************\n\n");
printf ("Variante 1: Umrechnung von Dezimalsystem in Binärsystem\n\n");
printf ("Variante 2: Umrechnung von Binärsystem in Dezimalsystem\n\n");
printf ("Variante 3: Beenden\n\n");
printf ("***********************\n\n");
while (!(d == 1 || d == 2 || d == 3)){
printf ("Variante ");
scanf ("%d",&d);
getchar();
}
decideCalc (d);
}
// negative Zahlen abfangen
void decideCalc (int d) {
int solution,n = -1;
if (d == 1) {
printf("\n\n++++++++++++++++++++++++++++\n\n");
while (n < 0){
printf ("Zahl im Dezimalsystem: ");
scanf ("%d",&n);
getchar();
}
solution = decimalToBinary (n);
printf("%d\n",solution);
}
else if (d == 2) {
printf("\n\n++++++++++++++++++++++++++++\n\n");
while (n<0){
printf ("Zahl im Binärsystem: ");
scanf ("%d",&n);
getchar();
}
solution = binaryToDecimal (n);
printf("%d\n",solution);
}
else{
exit(0);}
printf("\n++++++++++++++++++++++++++++\n\n\n");
main(0,0);
}
int decimalToBinary (int n) {
int i = 0;
int exp = 1;
int binary = 0;
printf ("\nDualzahl: ");
while ( exp <= n) {
exp = pow (2,i);
i++;
}
if (i>2){i-=2;}
for (int j = i; j>-1;--j) {
if (n-pow(2,j)<0) {
binary *= 10;
}
else {
binary = (binary * 10) + 1;
n -= pow (2,j);
}
}
return binary;
}
int binaryToDecimal (int n) {
int count = 0;
int temp_n = n;
while (temp_n>1) {
temp_n /=10;
count +=1;
}
//count ++;
printf ("\nDezimalzahl: ");
int decimal = 0;
for (int i = 0;i<count+1;++i) {
int temp = (n/10)*10;
int factor = n - temp;
if (!(factor == 0 || factor == 1)){printf("!!!! Das war eine ungültige Zahl im Binärsystem. Sie gelangen nun zum Haupmenü.\n\n"); main(0,0);}
decimal += factor * pow(2,i);
n = temp/10;
}
return decimal;
}