Skočiť na obsah


Programovanie v jazyku C a C#

Návody pre začiatočníkov a pokročilých



Fórum: Škôlka jazyka C
- - - - -
Fotografia

Prevody medzi číselnými sústavami


Prevody medzi číselnými sústavami

Začneme s prevodom z hexidecimálneho (šesťnásťková sústava) do dekadického čísla (desiatková sústava).
V hexidecimálnej sa používajú čísla 0 - 9 a písmená a - f alebo A -F (nie je v tom rozdiel).
Pri výpočtoch sa vychádza z tohto:
Obrázok
a počíta sa nasledovne:
Obrázok

Ak bude potreba, priložím ďalšie výpočty prevodov.

Napísal som program, ktorý vysvetľuje a demonštruje prevody medzi číselnými sústavami.
Jedná sa o dvojkovú (binárnu), desiatkovú (decimálnu) a šesťnásťkovú (hexadecimálnu) sústavu.

Tu je kód:

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <string.h>
#include <ctype.h>
#define CISTI system("cls") // vycisti obrazovku
#define PAUZA system("pause") // pozastavi beh programu
 
typedef struct {
    char znak;
    char dvoj[5];
} PREVOD;
 
 
char* des_dvoj_kr(unsigned int desiatkove);
char* des_sestn_kr(unsigned int desiatkove);
unsigned int dvoj_des_kr(char *dvojkove);
unsigned int sest_des_kr(char *sestn);
void des_dvoj(unsigned int desiatkove);
void dvoj_des(char *dvojkove);
void sest_des(char *sestn);
void des_sestn(unsigned int desiatkove);
void dvoj_sestn(char *dvojkove);
void sest_dvoj(char *sestn);
 
int main (void)
{
    int i, vyber;
    unsigned int descis;
    char dvojkove[33], sestnastkove[10];
 
    for (;;) {
        CISTI; // vycisti obrazovku
        /* menu */
        printf( "                    <<<< M E N U >>>>\n\n"
                " 1. prevod desiatkoveho cisla na dvojkove a setnactkove\n\n"
                " 2. prevod dvojkoveho cisla na sestnastkove a desiatkove\n\n"
                " 3. prevod sestnastkoveho cisla na desiatkove a dvojkove\n\n"
                " 4. system vypoctu prevodu desiatkoveho cisla na dvojkove\n\n"
                " 5. system vypoctu prevodu desiatkoveho cisla na sestnastkove\n\n"
                " 6. system vypoctu prevodu dvojkoveho cisla na desiatkove\n\n"
                " 7. system vypoctu prevodu dvojkoveho cisla na sestnastkove\n\n"
                " 8. system vypoctu prevodu sestnastkoveho cisla na desiatkove\n\n"
                " 9. system vypoctu prevodu sestnastkoveho cisla na dvojkove\n\n"
                " 0. ukoncit program\n\n\n"
                "      Vasa volba: ");
        scanf("%d", &vyber);
 
        CISTI; // vycisti obrazovku
        /* vyber z menu */
        switch (vyber) {
            case 1:
                /* prevod z desiatkoveho cisla na dvojkove a setnactkove */
                printf(" Prevod z desiatkoveho cisla na dvojkove a setnactkove.\n\n"
                        " Zadaj cele kladne desiatkove cislo : ");
                scanf("%u", &descis);
                printf("\n dvojkove cislo:\t%s\n\n sestnastkove cislo:\t%s\n",
                       des_dvoj_kr(descis), des_sestn_kr(descis));
                break;
            case 2:
                /* prevod z dvojkoveho cisla na sestnastkove a desiatkove */
                printf(" Prevod z dvojkoveho cisla na sestnastkove a desiatkove.\n\n"
                        " Zadaj dvojkove cislo: ");
                scanf("%s", dvojkove);
                printf("\n sestnastkove cislo:\t%s\n\n desiatkove cislo:\t%u\n",
                       des_sestn_kr(dvoj_des_kr(dvojkove)), dvoj_des_kr(dvojkove));
                break;
            case 3:
                /* prevod sestnastkoveho cisla na desiatkove a dvojkove */
                printf(" Prevod sestnastkoveho cisla na desiatkove a dvojkove.\n\n"
                        " Zadaj sestnastkove cislo: ");
                scanf("%s", sestnastkove);
                /* osetrenie aby vsetky pismena v retazci boli velke */
                for (i = 0; i < strlen(sestnastkove); i++)
                    sestnastkove[i] = toupper(sestnastkove[i]);
                printf("\n desiatkove cislo:\t%u\n\n dvojkove cislo:\t%s\n",
                       sest_des_kr(sestnastkove), des_dvoj_kr(sest_des_kr(sestnastkove)));
                break;
            case 4:
                /* system vypoctu z desiatkoveho cisla na dvojkove */
                printf(" System vypoctu z desiatkoveho cisla na dvojkove.\n\n"
                        " Zadaj cele kladne desiatkove cislo : ");
                scanf("%u", &descis);
                des_dvoj(descis);
                break;
            case 5:
                /* system vypoctu z desiatkoveho cisla na sestnastkove */
                printf(" System vypoctu z desiatkoveho cisla na sestnastkove.\n\n"
                " Zadaj cele kladne desiatkove cislo : ");
                scanf("%u", &descis);
                des_sestn(descis);
                break;
            case 6:
                /* system vypoctu z dvojkoveho cisla na desiatkove */
                printf(" System vypoctu z dvojkoveho cisla na desiatkove.\n\n"
                       " Zadaj dvojkove cislo: ");
                scanf("%s", dvojkove);
                dvoj_des(dvojkove);
                break;
            case 7:
                /* system vypoctu z dvojkoveho cisla na sestnastkove */
                printf(" System vypoctu z dvojkoveho cisla na sestnastkove.\n\n"
                       " Zadaj dvojkove cislo: ");
                scanf("%s", dvojkove);
                dvoj_sestn(dvojkove);
                break;
            case 8:
                /* system vypoctu zo sestnastkoveho cisla na desiatkove */
                printf(" System vypoctu zo sestnastkoveho cisla na desiatkove.\n\n"
                       " Zadaj sestnastkove cislo: ");
                scanf("%s", sestnastkove);
                /* osetrenie aby vsetky pismena v retazci boli velke */
                for (i = 0; i < strlen(sestnastkove); i++)
                    sestnastkove[i] = toupper(sestnastkove[i]);
                sest_des(sestnastkove);
                break;
            case 9:
                /* system vypoctu zo sestnastkoveho cisla na dvojkove */
                printf(" System vypoctu zo sestnastkoveho cisla na dvojkove.\n\n"
                       " Zadaj sestnastkove cislo: ");
                scanf("%s", sestnastkove);
                /* osetrenie aby vsetky pismena v retazci boli velke */
                for (i = 0; i < strlen(sestnastkove); i++)
                    sestnastkove[i] = toupper(sestnastkove[i]);
                sest_dvoj(sestnastkove);
                break;
            case 0:
                printf("              *********************\n");
                printf("              ***  K O N I E C  ***\n");
                printf("              *********************\n\n");
                return 1;
            default:
                printf(" Mimo rozsah!\n");
                return 1;
        }
        printf("\n ");
        PAUZA; // pozastavi beh programu
    }
    return 0;
}
 
/* prevod z desiatkoveho na dvojkove, vystup dvojkove (retazec) */
char* des_dvoj_kr(unsigned int desiatkove)
{
    int i = 0, j, k = -1;
    char *p_dvojkove, *p_pom;
 
    /* dynamicka alokacia s kontrolou volnej pamati */
    if ((p_dvojkove = (char *) malloc(35)) == NULL) {
        printf("Malo pamati!");
        return;
    }
    if ((p_pom = (char *) malloc(35)) == NULL) {
        printf("Malo pamati!");
        return;
    }
    while (desiatkove != 0) {
        p_pom[i] = (desiatkove % 2) + 48;
        desiatkove /= 2;
        i++;
    }
    p_pom[i] = '\0';
    for (j = i; j >= 0; j--)
        p_dvojkove[j] = p_pom[k++];
    p_dvojkove[i + 1] = '\0';
    return (p_dvojkove);
}
 
/* prevod z desiatkoveho na sestnastkove, vystup sestnastkove (retazec) */
char* des_sestn_kr(unsigned int desiatkove)
{
    int i = 0, j, k;
    char *p_sestn, *p_pom;
 
   /* dynamicka alokacia s kontrolou volnej pamati */
    if ((p_sestn = (char *) malloc(35)) == NULL) {
        printf("Malo pamati!");
        return;
    }
    if ((p_pom = (char *) malloc(35)) == NULL) {
        printf("Malo pamati!");
        return;
    }
    while (desiatkove != 0) {
        k = desiatkove % 16;
        p_pom[i] = k >= 10 && k <= 15 ? k + 55 : k + 48;
        desiatkove /= 16;
        i++;
    }
    p_pom[i] = '\0';
    k = -1;
    for (j = i; j >= 0; j--)
        p_sestn[j] = p_pom[k++];
    p_sestn[i + 1] = '\0';
    return (p_sestn);
}
 
/* prevod z dvojkoveho na desiatkove, vystup desiatkove (unsigned int) */
unsigned int dvoj_des_kr(char *dvojkove)
{
    int i, j, pocet, mocnitel;
    unsigned int descis = 0;
 
    /* vypis vypoctu mocnitelov */
    pocet = strlen(dvojkove);
    for (j = 0; j < pocet; j++) {
        mocnitel = 2;
        for (i = 1; i < (pocet - j) - 1; i++)
            mocnitel *= 2;
        if (j == (pocet - 1)) {
            if (dvojkove[j] == 0)
                mocnitel = 0;
            else
                mocnitel = 1;
        }
        /* vypocet desiatkoveho cisla a jeho vypis */
        descis += ((int) dvojkove[j] - 48) * mocnitel;
    }
    return descis;
}
 
/* prevod z sestnastkoveho na desiatkove, vystup desiatkove (unsigned int) */
unsigned int sest_des_kr(char *sestn)
{
    int i, j, pocet, mocnitel;
    unsigned int descis = 0;
 
    /* vypis vypoctu mocnitelov */
    pocet = strlen(sestn);
    for (j = 0; j < pocet; j++) {
        mocnitel = 16;
        for (i = 1; i < (pocet - j) - 1; i++)
            mocnitel *= 16;
        if (j == (pocet - 1)) {
            if (sestn[j] == 0)
                mocnitel = 0;
            else
                mocnitel = 1;
        }
        /* vypocet desiatkoveho cisla a jeho vypis */
        descis += (sestn[j], (sestn[j] >= '0' && sestn[j] <= '9') ? (int) sestn[j] - 48
               : isupper(sestn[j]) ? (int) sestn[j] -55: sestn[j] - 87) * mocnitel;
    }
    return descis;
}
 
/* system vypoctu z desiatkoveho cisla na dvojkove */
void des_dvoj(unsigned int desiatkove)
{
    int i = 0, j, k;
    int dvojkove[35];
    unsigned int pom = desiatkove;
 
    /* teoria */
    CISTI; // vycisti obrazovku
    printf(" Najprv trochu teorie.\n\n"
           " Ak chceme previest cislo z desiatkovej sustavy do inej sustavy, \n"
           " musime cislo delit zakladom sustavy, do ktorej cislo chceme previest, \n"
           " az pokial nedostaneme cislo nula. \n"
           " Po kazdom deleni si zapiseme zvysok, pricom zvysok po prvom deleni je cifra \n"
           " najnizsieho (nulteho) radu, zvysok po druhom deleni udava cifru prveho radu...\n"
           " Takto napriklad prevedieme cislo 215 do dvojkovej sustavy:\n\n"
           " 215 : 2 = 107; zvysok 1\n"
           " 107 : 2 = 53; zvysok 1\n"
           " 53 : 2 = 26; zvysok 1\n"
           " 26 : 2 = 13; zvysok 0\n"
           " 13 : 2 = 6; zvysok 1\n"
           " 6 : 2 = 3; zvysok 0\n"
           " 3 : 2 = 1; zvysok 1\n"
           " 1 : 2 = 0; zvysok 1\n\n"
           " Vysledok teda je 11010111 (zvysky zapisane v opacnom poradi).\n\n");
    putchar(' ');
    PAUZA; // pozastavi beh programu
    /* prakticka ukazka */
    CISTI; // vycisti obrazovku
    printf(" Bolo zadane desiatkove cislo %u.\n\n", desiatkove);
    while (desiatkove != 0) {
        dvojkove[i] = desiatkove % 2;
        printf(" %10d / 2 = %10d, zvysok %d\n", desiatkove, desiatkove / 2, desiatkove % 2);
        desiatkove /= 2;
        i++;
    }
    putchar('\n');
    /* vypis poctu bitov */
    printf(" Desiatkove cislo %u ma v dvojkovej sustave %d bitov\n", pom, i);
    /* vypis dvojkoveho cisla */
    printf(" a prevedene na dvojkove je ");
    for (j = i - 1; j >= 0; j--)
        printf("%d", dvojkove[j]);
    putchar('\n');
}
 
/* system vypoctu z desiatkoveho cisla na sestnackove */
void des_sestn(unsigned int desiatkove)
{
    int i = 0, j, k;
    char sestn[10];
    unsigned int pom = desiatkove;
 
    /* teoria */
    CISTI; // vycisti obrazovku
    printf(" Najprv trochu teorie.\n\n"
           " Ak chceme previest cislo z desiatkovej sustavy do inej sustavy, \n"
           " musime cislo delit zakladom sustavy, do ktorej cislo chceme previest, \n"
           " az pokial nedostaneme cislo nula. \n"
           " Po kazdom deleni si zapiseme zvysok, pricom zvysok po prvom deleni je cifra \n"
           " najnizsieho (nulteho) radu, zvysok po druhom deleni udava cifru prveho radu...\n"
           " Je tu ale jedna zvlastnost!\n"
           " Pretoze cisla 10 az 15 nemaju jednociselny ekvivalent, boli premenovane na pismena:\n\n"
           " 10 = A, 11 = B, 12 = C, 13 = D, 14 = E, 15 = F\n"
           " (mozu sa pouzivat aj male pismena: a, b, c, d, e, f)\n\n"
           " Takto napriklad prevedieme cislo 215 do sestnastkovej sustavy:\n\n"
           " 215 : 16 = 13; zvysok 7\n"
           " 13 : 16 = 0; zvysok 13 (ten zodpoveda symbolu D alebo d)\n\n"
           " Vysledok teda je D7 alebo d7 (zvysky zapisane v opacnom poradi).\n\n");
    putchar(' ');
    PAUZA; // pozastavi beh programu
    /* prakticka ukazka */
    CISTI; // vycisti obrazovku
    printf(" Bolo zadane desiatkove cislo %u.\n\n", desiatkove);
    while (desiatkove != 0) {
        k = desiatkove % 16;
        //printf("%c\n", k + 55);
        sestn[i] = k >= 10 && k <= 15 ? k + 55 : k + 48;
        printf(" %10u / 16 = %10d, zvysok %c\n", desiatkove, desiatkove / 16, sestn[i]);
        desiatkove /= 16;
        i++;
    }
    putchar('\n');
    /* vypis sestnastkoveho cisla */
    printf("Desiatkove cislo %u prevedene na sestnackove je ", pom);
    for (j = i - 1; j >= 0; j--)
        printf("%c", sestn[j]);
    putchar('\n');
}
 
/* prevod cisla z dvojkoveho na desiatkove */
void dvoj_des(char *dvojkove)
{
    int i, j, pocet, mocnitel;
    int descis = 0;
 
    /* teoria */
    CISTI; // vycisti obrazovku
    printf(" C islo v lubovolnej sustave sa do desiatkovej prevedie nasledovne:\n\n"
           " Ocislujeme si poradie:\n"
           " pod prvu cifru sprava napiseme 0, pod druhu 1, pod tretiu 2 ...\n"
           " Vysledne cislo v desiatkovej sustave potom dostaneme ako sucet cifier\n"
           " vynasobeny zakladom sustavy umocnenym na prislusne poradie.\n\n"
           " Tento postup funguje pre vsetky sustavy vratane desiatkovej.\n"
           " Napriklad desiatkove cislo 10294 sa da popisanym postupom napist takto:\n\n"
           " 10294 = 1.10(na 4) + 0.10(na 3) + 2.10(na 2) + 9.10(na 1) + 4.10(na 0)\n"
           " teda 1.10000 + 0.1000 + 2.100 + 9.10 + 4.1\n"
           " teda 10000 + 0 + 200 + 90 + 4 = 10294\n\n"
           " Podobne aj dvojkove cislo 1010 sa da popisanym postupom previest takto:\n\n"
           " 1010 = 1.2(na 3) + 0.2(na 2) + 1.2(na 1) + 0.2(na 0)\n"
           " teda 1.8 + 0.4 + 1.2 + 0.1\n"
           " teda 8 + 0 + 2 + 0 = 10\n\n");
    putchar(' ');
    PAUZA; // pozastavi beh programu
    /* prakticka ukazka */
        CISTI; // vycisti obrazovku
    /* vypis vypoctu mocnitelov */
    printf("Bolo zadane dvojkove cislo %s.\n\n", dvojkove);
    pocet = strlen(dvojkove);
    for (j = 0; j < pocet; j++) {
        mocnitel = 2;
        for (i = 1; i < (pocet - j) - 1; i++)
            mocnitel *= 2;
        if (j == (pocet - 1)) {
            if (dvojkove[j] == 0)
                mocnitel = 0;
            else
                mocnitel = 1;
        }
        printf(" %d  krat  mocnitel: %d  =  %d\n", (int) dvojkove[j] - 48, mocnitel, ((int) dvojkove[j] - 48) * mocnitel);
 
        /* vypocet desiatkoveho cisla a jeho vypis */
        descis += ((int) dvojkove[j] - 48) * mocnitel;
    }
    printf("\n Sucet vsetkych vysledkov je %d\n\n", descis);
    printf("\n Dvojkove cislo %s je %d desiatkovo.\n", dvojkove, descis);
}
 
/* prevod cisla z sestnastkoveho na desiatkove */
void sest_des(char *sestn)
{
    int i, j, pocet, mocnitel;
    int descis = 0;
 
    /* teoria */
    CISTI; // vycisti obrazovku
    printf(" C islo v lubovolnej sustave sa do desiatkovej prevedie nasledovne:\n"
           " Ocislujeme si poradie:\n"
           " pod prvu cifru sprava napiseme 0, pod druhu 1, pod tretiu 2 ...\n"
           " Vysledne cislo v desiatkovej sustave potom dostaneme ako sucet cifier\n"
           " vynasobeny zakladom sustavy umocnenym na prislusne poradie.\n"
           " Tento postup funguje pre vsetky sustavy vratane desiatkovej.\n"
           " Napriklad desiatkove cislo 10294 sa da popisanym postupom napist takto:\n\n"
           " 10294 = 1.10(na 4) + 0.10(na 3) + 2.10(na 2) + 9.10(na 1) + 4.10(na 0)\n"
           " teda 1.10000 + 0.1000 + 2.100 + 9.10 + 4.1\n"
           " teda 10000 + 0 + 200 + 90 + 4 = 10294\n\n"
           " Podobne aj sestnastkove cislo F40A sa da popisanym postupom previest takto:\n\n"
           " F40A = 15.16(na 3) + 4.16(na 2) + 0.16(na 1) + 10.16(na 0)\n"
           " teda 15.4096 + 4.256 + 0.16 + 10.1\n"
           " teda 61440 + 1024 + 0 + 10 = 62474\n\n"
           " Poznamka.\n"
           " sestnastkove cislo sa sklada z hodnot 1 - 15.\n"
           " Hodnoty vacsie ako 9 sa oznacuju takto:\n"
           " 10 = 'A', 11 = 'B', 12 = 'C', 13 = 'D', 14 = 'E' a 15 = 'F'\n"
           " (mozu sa pouzit aj male pismena? 'a', 'b', 'c', 'd', 'e', 'f')\n\n");
    putchar(' ');
    PAUZA; // pozastavi beh programu
    /* prakticka ukazka */
    CISTI; // vycisti obrazovku
    printf(" Bolo zadane sestnastkove cislo %s.\n\n", sestn);
    /* vypis vypoctu mocnitelov */
    pocet = strlen(sestn);
    for (j = 0; j < pocet; j++) {
        mocnitel = 16;
        for (i = 1; i < (pocet - j) - 1; i++)
            mocnitel *= 16;
        if (j == (pocet - 1)) {
            if (sestn[j] == 0)
                mocnitel = 0;
            else
                mocnitel = 1;
        }
        printf(" %c = %d  krat  mocnitel: %d  =  %d\n",
               sestn[j], (sestn[j] >= '0' && sestn[j] <= '9') ? (int) sestn[j] - 48 // ak je znak '0' - '9' = prevod na cisla 0 - 9
               : isupper(sestn[j]) ? (int) sestn[j] -55: sestn[j] - 87, // ak je velke alebo male pismeno = prevod na 10 - 15
               mocnitel,
               /* vypocet hodnota * mocnitel */
               (sestn[j], (sestn[j] >= '0' && sestn[j] <= '9') ? (int) sestn[j] - 48
               : isupper(sestn[j]) ? (int) sestn[j] -55: sestn[j] - 87) * mocnitel);
 
        /* vypocet desiatkoveho cisla a jeho vypis */
        descis += (sestn[j], (sestn[j] >= '0' && sestn[j] <= '9') ? (int) sestn[j] - 48
               : isupper(sestn[j]) ? (int) sestn[j] -55: sestn[j] - 87) * mocnitel;
    }
    printf("\n Sucet vsetkych vysledkov je %d\n\n", descis);
    printf("\n sestnastkove cislo %s je %d desiatkovo.\n", sestn, descis);
}
 
/* prevod cisla z dvojkoveho na sestnastkove */
void dvoj_sestn(char *dvojkove)
{
    int i, j, k, pole, pocet;
    char pom[33], stvor[5], sestn[10];
 
    /* naplnenie pola struktur udajmi 1hex = 4bin */
    PREVOD prevody [16] = {{'0', "0000"}, {'1', "0001"}, {'2', "0010"},
                          {'3', "0011"}, {'4', "0100"}, {'5', "0101"},
                          {'6', "0110"}, {'7', "0111"}, {'8', "1000"},
                          {'9', "1001"}, {'A', "1010"}, {'B', "1011"},
                          {'C', "1100"}, {'D', "1101"}, {'E', "1110"},
                          {'F', "1111"}};
 
    /* teoria */
    CISTI; // vycisti obrazovku
    printf(" Prevod cisla z dvojkovej sustavy na sestnastkovu je velmi jednoduchy.\n"
           " Staci cislo dvojkovej sustavy rozdelit na stvorcislia zacinajuc\n"
           " od najnizsieho poradia (teda sprava). Kazde stvorcislie moze nadobudat\n"
           " hodnoty od 0 do 15, co je prave jedna cifra cisla sestnastkovej sustavy.\n\n"
           " Napriklad cislo 11010111 prevedieme nasledovnym sposobom:\n\n"
           " 11010111 = 1101 0111; (1101)b = (13)d =(D)H; (0111)b = (7)d =(7)H\n"
           " Takze vysledok je D7.\n\n");
    putchar(' ');
    PAUZA; // pozastavi beh programu
    /* prakticka ukazka */
    CISTI; // vycisti obrazovku
    printf("Bolo zadane dvojkove cislo %s.\n\n", dvojkove);
    /* doplnenie mnozstva prvkov na cislo delitelne 4-mi */
    pocet = strlen(dvojkove);
    while (pocet % 4 != 0)
        pocet % 4 != 0 ? pocet++ : pocet;
    /* doplnenie nul do stvorice pred cislo, cize ak je zadane 10, doplni sa 0010 */
    pom[0] = '\0';
    /* naplnenie pom[] nulami */
    for (i = 0; i < pocet - strlen(dvojkove); i++)
        pom[i] = '0';
    pom[i] = '\0'; /* ukoncenie retazca */
    strcat(pom, dvojkove); /* spojenie dvoch retazcov */
    /* rozdelenie cisla na stvorcislia */
 
    k = 0;
    pocet = 0;
    if ((strlen(pom) / 4) > 1) {
        for (j = 4; j <= strlen(pom); j += 4) {
            for (i = j - 4; i < strlen(pom); i++) {
                if (i < j) {
                    stvor[k] = pom[i];
                    k++;
                }
            }
            stvor[k] = '\0';
            /* hladanie v strukture a vypis spravneho udaju */
            printf("dvojkovo %s je ", stvor);
            for (pole = 0; pole < 16; pole++){
                if (strcmp(prevody[pole].dvoj, stvor) == 0) {
                    printf("sestnastkovo %c\n", prevody[pole].znak);
                    sestn[pocet] = prevody[pole].znak;
                }
            }
            pocet++;
            k = 0;
        }
        sestn[pocet] = '\0';
    }
    else {
        for (i = 0; i < 4; i++)
            stvor[i] = pom[i];
        stvor[i] = '\0';
        printf("dvojkovo %s je ", stvor);
        for (pole = 0; pole < 16; pole++){
            if (strcmp(prevody[pole].dvoj, stvor) == 0) {
                printf("sestnastkovo %c\n", prevody[pole].znak);
                sestn[0] = prevody[pole].znak;
                sestn[1] = '\0';
            }
        }
    }
    printf("\nDvojkove cislo %s prevedene na sestnastkove je %s.\n", dvojkove, sestn);
}
 
/* prevod cisla z sestnastkoveho na dvojkove */
void sest_dvoj(char *sestn)
{
    int i, pole, pocet;
    char dvojkove[33];
    /* naplnenie pola struktur udajmi 1hex = 4bin */
    PREVOD prevody[16] = {{'0', "0000"}, {'1', "0001"}, {'2', "0010"},
                          {'3', "0011"}, {'4', "0100"}, {'5', "0101"},
                          {'6', "0110"}, {'7', "0111"}, {'8', "1000"},
                          {'9', "1001"}, {'A', "1010"}, {'B', "1011"},
                          {'C', "1100"}, {'D', "1101"}, {'E', "1110"},
                          {'F', "1111"}};
 
    /* teoria */
    CISTI; // vycisti obrazovku
    printf(" Prevod cisla zo sestnastkovej sustavy do dvojkovej je velmi jednoduchy.\n"
           " Staci jednotlive cisla sestnastkovej sustavy premenit na prisluchajuce\n"
           " dvojkove stvorcislia a spojit ich za sebou.\n"
           " Kazde sestnastkove cislo 0 - 9, A -F (10 - 15) je vlastne stvorcislie\n"
           " v dvojkovej sustave.\n\n"
           " Napriklad sestnastkove cislo D7 prevedieme nasledovnym sposobom:\n\n"
           " D7 = D 7; (D)H = (13)d = (1101)b; (7)H = (7)d =(0111)b\n"
           " Takze vysledok je 11010111.\n\n");
    putchar(' ');
    PAUZA; // pozastavi beh programu
    /* prakticka ukazka */
    CISTI; // vycisti obrazovku
    printf(" Bolo zadane sestnastkove cislo %s.\n\n", sestn);
    /* prevod jednotlivych cisiel sestnastkoveho na stvorciferne dvojkoveho,
       vytlacenie na obrazovku a vlozenie do retazca */
    dvojkove[0] = '\0';
    for (i = 0; i < strlen(sestn); i++){
        printf(" sestnastkovo %c je ", sestn[i]);
        for (pole = 0; pole < 16; pole++) {
            //printf("%c - %c\n", sestn[i], prevody[pole].znak);
            if (sestn[i] == prevody[pole].znak) {
                printf(" dvojkovo %s\n", prevody[pole].dvoj);
                strcat(dvojkove, prevody[pole].dvoj);
            }
        }
    }
    printf("\n Sestnastkove cislo %s prevedene na dvojkove je %s.\n", sestn, dvojkove);
}
  • 0

Popis: Prevody medzi číselnými sústavami
Poznámky:
Odkazy:


0 Komentárov


Najlepšie lekcie


Najnovšie pridané lekcie


Najnovšie komentáre


Najviac komentované lekcie


Najviac zobrazené lekcie


Náhodné lekcie


Na tejto stránke bolo užívateľ(ov) za posledných 30 minút

členov, návštevníkov