Skip to content

Instantly share code, notes, and snippets.

@Pan-Maciek
Created January 22, 2017 19:30
Show Gist options
  • Select an option

  • Save Pan-Maciek/39f94c6128f111082bed512878c40066 to your computer and use it in GitHub Desktop.

Select an option

Save Pan-Maciek/39f94c6128f111082bed512878c40066 to your computer and use it in GitHub Desktop.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
int qpow(int base, int p){
if (p == 0) return 1;
int value = base;
for (; p > 1; --p) value *= base;
return value;
}
int read_number(int read_base){
char input[256] = {' '};
fgets(input, sizeof(input), stdin);
int i = sizeof(input) - 2, value = 0, base = 0, power = 0;
if (read_base != 0) {
base = read_base;
} else {
for(; i >= 0; i--){ // reading base
if (input[i] == '\0' || input[i] == '\n') continue;
else if (input[i] == 'x') break;
else {
base += (input[i] - '0') * qpow(10, power++);
}
}
i--;
power = 0;
}
for(; i >= 0; i--){ // reading base
if (input[i] == ' ') break;
if (input[i] >= 'A' && input[i] <= 'Z'){
value += (input[i] - 'A' + 10) * qpow(base, power++);
} else if (input[i] >= 'a' && input[i] <= 'z') {
value += (input[i] - 'a' + 10) * qpow(base, power++);
} else {
value += (input[i] - '0') * qpow(base, power++);
}
}
return value;
}
void printAsBase(int number, int base){
char out[256] = {' '};
int i = 0;
while (number != 0){
int now = number % base;
if (now > 9){
out[i++] = 'A' - 10 + now;
} else {
out[i++] = '0' + now;
}
number /= base;
}
for (; i >= 0; i--){
printf("%c", out[i]);
}
}
int to_grey_code(int number){
return number ^ (number >> 1);
}
int from_grey_code(int number) {
int mask;
for (mask = number >> 1; mask != 0; mask = mask >> 1) {
number = number ^ mask;
}
return number;
}
int main(){
printf("1. Convert number to base.\n");
printf("2. Create Hamming's Code.\n");
printf("3. Read Hamming's Code.\n");
printf("4. Create Grey's Code.\n");
printf("5. Read Grey's Code.\n");
printf("6. exit\n");
int option = 6, number, base;
do {
scanf("%i", &option);
switch(option){
case 1:
printf("Enter number in format number|x|base example 123x16\n>");
number = read_number(0);
printf("Enter base\n>");
scanf("%i", &base);
printf("As base %i: ", base);
printAsBase(number, base);
printf("\n");
break;
case 2:
break;
case 3:
break;
case 4:
printf("Enter number in format number|x|base example 123x16\n>");
number = read_number(0);
printf("Grey's code: ");
printAsBase(to_grey_code(number), 2);
printf("\n");
break;
case 5:
printf("Enter Grey's code\n>");
number = read_number(2);
printf("Enter base\n>");
scanf("%i", &base);
printAsBase(from_grey_code(number), base);
printf("\n");
break;
}
} while(option != 6);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment