Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- void hex_to_oct()
- {
- char hex[8]; //Jeśli limitem jest 75174, to wiêcej ni¿ 5 nie trzeba
- printf("Podaj liczbe hexadecymalna: ");
- scanf("%s", hex);
- int pom = strlen(hex);
- char bin[pom*4];
- char oct[pom*4];
- for(int i=0; i<pom; i++)
- {
- switch(hex[i]){ //zamiana z hex na bin // P O T E Z N Y SWITCH
- case '0':
- bin[4*i+0]='0';
- bin[4*i+1]='0';
- bin[4*i+2]='0';
- bin[4*i+3]='0';
- break;
- case '1':
- bin[4*i+0]='0';
- bin[4*i+1]='0';
- bin[4*i+2]='0';
- bin[4*i+3]='1';
- break;
- case '2':
- bin[4*i+0]='0';
- bin[4*i+1]='0';
- bin[4*i+2]='1';
- bin[4*i+3]='0';
- break;
- case '3':
- bin[4*i+0]='0';
- bin[4*i+1]='0';
- bin[4*i+2]='1';
- bin[4*i+3]='1';
- break;
- case '4':
- bin[4*i+0]='0';
- bin[4*i+1]='1';
- bin[4*i+2]='0';
- bin[4*i+3]='0';
- break;
- case '5':
- bin[4*i+0]='0';
- bin[4*i+1]='1';
- bin[4*i+2]='0';
- bin[4*i+3]='1';
- break;
- case '6':
- bin[4*i+0]='0';
- bin[4*i+1]='1';
- bin[4*i+2]='1';
- bin[4*i+3]='0';
- break;
- case '7':
- bin[4*i+0]='0';
- bin[4*i+1]='1';
- bin[4*i+2]='1';
- bin[4*i+3]='1';
- break;
- case '8':
- bin[4*i+0]='1';
- bin[4*i+1]='0';
- bin[4*i+2]='0';
- bin[4*i+3]='0';
- break;
- case '9':
- bin[4*i+0]='1';
- bin[4*i+1]='0';
- bin[4*i+2]='0';
- bin[4*i+3]='1';
- break;
- case 'A':
- case 'a':
- bin[4*i+0]='1';
- bin[4*i+1]='0';
- bin[4*i+2]='1';
- bin[4*i+3]='0';
- break;
- case 'B':
- case 'b':
- bin[4*i+0]='1';
- bin[4*i+1]='0';
- bin[4*i+2]='1';
- bin[4*i+3]='1';
- break;
- case 'C':
- case 'c':
- bin[4*i+0]='1';
- bin[4*i+1]='1';
- bin[4*i+2]='0';
- bin[4*i+3]='0';
- break;
- case 'D':
- case 'd':
- bin[4*i+0]='1';
- bin[4*i+1]='1';
- bin[4*i+2]='0';
- bin[4*i+3]='1';
- break;
- case 'E':
- case 'e':
- bin[4*i+0]='1';
- bin[4*i+1]='1';
- bin[4*i+2]='1';
- bin[4*i+3]='0';
- break;
- case 'F':
- case 'f':
- bin[4*i+0]='1';
- bin[4*i+1]='1';
- bin[4*i+2]='1';
- bin[4*i+3]='1';
- break;
- default:
- printf("Nieprawidlowa liczba\n\n");
- return;
- break;
- }
- }
- printf("Jej odpowiednik oktalny to: ");
- /*
- for(int i=0; i<pom*4; i++) //wypisywanie ciagu binarnego
- printf("%c", bin[i]);
- printf("\n");
- fflush(stdin);
- */
- int i=0; //zmienna wskazujaca na moment, od ktorej ma byc zamiana z bin na oct
- if((pom*4)%3!=0) //warunek sprawdza, czy dlugosc ciagu binarnego jest podzielna przez 3, jak nie to robi pierwsza zamiane w zaleznosci od modulo 3
- if((pom*4)%3==1)
- {
- if(bin[0]=='0')
- printf("0");
- else printf("1");
- i=1;
- }
- else
- {
- switch(bin[0]){
- case '0':
- if(bin[1]=='0')
- printf("0");
- else
- printf("1");
- break;
- case '1':
- if(bin[1]=='0')
- printf("2");
- else
- printf("3");
- break;
- }
- i=2;
- }
- //printf("i=%d\n", i);
- for(i; i<pom*4; i+=3){ //zamiana z bin na oct
- switch(bin[i]){
- case '0':
- switch(bin[i+1]){
- case '0':
- if(bin[i+2]=='0')
- printf("0");
- else printf("1");
- break;
- case '1':
- if(bin[i+2]=='0')
- printf("2");
- else printf("3");
- break;
- }
- break;
- case '1':
- switch(bin[i+1]){
- case '0':
- if(bin[i+2]=='0')
- printf("4");
- else printf("5");
- break;
- case '1':
- if(bin[i+2]=='0')
- printf("6");
- else printf("7");
- break;
- }
- break;
- default: printf("Cos nie tak...");
- }
- }
- printf("\n\n");
- return;
- }
- void oct_to_hex()
- {
- char oct[8]; //limit?
- printf("Podaj liczbe oktalna: ");
- scanf("%s", oct);
- int pom = strlen(oct);
- char bin[pom*3];
- for(int i=0; i<pom; i++){
- switch(oct[i]){
- case '0':
- bin[3*i+0]='0';
- bin[3*i+1]='0';
- bin[3*i+2]='0';
- break;
- case '1':
- bin[3*i+0]='0';
- bin[3*i+1]='0';
- bin[3*i+2]='1';
- break;
- case '2':
- bin[3*i+0]='0';
- bin[3*i+1]='1';
- bin[3*i+2]='0';
- break;
- case '3':
- bin[3*i+0]='0';
- bin[3*i+1]='1';
- bin[3*i+2]='1';
- break;
- case '4':
- bin[3*i+0]='1';
- bin[3*i+1]='0';
- bin[3*i+2]='0';
- break;
- case '5':
- bin[3*i+0]='1';
- bin[3*i+1]='0';
- bin[3*i+2]='1';
- break;
- case '6':
- bin[3*i+0]='1';
- bin[3*i+1]='1';
- bin[3*i+2]='0';
- break;
- case '7':
- bin[3*i+0]='1';
- bin[3*i+1]='1';
- bin[3*i+2]='1';
- break;
- default:
- printf("Nieprawidlowa liczba.\n\n");
- return;
- break;
- }
- }
- printf("Odpowiednik w hexadexymalnej to: ");
- int i=0;
- if((pom*3)%4!=0)
- {
- switch((pom*3)%4){
- case 1:
- if(bin[0]==0)
- printf("0");
- else printf("1");
- i=1;
- break;
- case 2:
- switch(bin[0]){
- case '0':
- if(bin[1]=='0')
- printf("0");
- else
- printf("1");
- break;
- case '1':
- if(bin[1]=='0')
- printf("2");
- else
- printf("3");
- break;
- }
- i=2;
- break;
- case 3:
- switch(bin[0]){
- case '0':
- switch(bin[1]){
- case '0':
- if(bin[2]=='0')
- printf("0");
- else printf("1");
- break;
- case '1':
- if(bin[2]=='0')
- printf("2");
- else printf("3");
- break;
- }
- break;
- case '1':
- switch(bin[1]){
- case '0':
- if(bin[2]=='0')
- printf("4");
- else printf("5");
- break;
- case '1':
- if(bin[2]=='0')
- printf("6");
- else printf("7");
- break;
- }
- break;
- }
- i=3;
- break;
- }
- }
- for(i; i<pom*3; i+=4){
- switch(bin[i]){
- case '0':
- switch(bin[i+1]){
- case '0':
- switch(bin[i+2]){
- case '0':
- if(bin[i+3]=='0')
- printf("0");
- else printf("1");
- break;
- case '1':
- if(bin[i+3]=='0')
- printf("2");
- else printf("3");
- break;
- }
- break;
- case '1':
- switch(bin[i+2]){
- case '0':
- if(bin[i+3]=='0')
- printf("4");
- else printf("5");
- break;
- case '1':
- if(bin[i+3]=='0')
- printf("6");
- else printf("7");
- break;
- }
- break;
- }
- break;
- case '1':
- switch(bin[i+1]){
- case '0':
- switch(bin[i+2]){
- case '0':
- if(bin[i+3]=='0')
- printf("8");
- else printf("9");
- break;
- case '1':
- if(bin[i+3]=='0')
- printf("A");
- else printf("B");
- break;
- }
- break;
- case '1':
- switch(bin[i+2]){
- case '0':
- if(bin[i+3]=='0')
- printf("C");
- else printf("D");
- break;
- case '1':
- if(bin[i+3]=='0')
- printf("E");
- else printf("F");
- break;
- }
- break;
- }
- break;
- default:
- printf("Cos nie tak...");
- return;
- break;
- }
- }
- printf("\n\n");
- }
- int main()
- {
- char instrukcja;
- while(11){
- printf("Dostepne opcje:\n1. Z szesnastkowego na osemkowy,\n2. Z osemkowego na szesnastkowy,\n3. Wyjscie z programu.\nPodaj numer opcji:");
- scanf("%c", &instrukcja);
- switch(instrukcja){
- case '1': hex_to_oct();break;
- case '2': oct_to_hex();break;
- case '3': return 0;
- default: printf("Wpisano nieprawidlowe polecenie. Prosze wybrac jeszcze raz.\n\n");break;
- }
- fflush(stdin);
- };
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement