96 Napište program pro převod decimálního ASCII kódu stisknutého znaku na binární: /* Projekt v C jazyce k7_dobin - převod znaku na ASCII kód v decimálním a binárním tvaru s použitím bitové aritmetiky © V.Pospíšil 2020 © */ #include <stdio.h> #include <conio.h> #include <stdlib.h> void main(void) { int klic, k, maska; unsigned int i[8];
//proměnná typu 8 místné pole na načítání 1 bytu, čili 8 bitů
system("chcp 1250"); system("color 9f"); system("mode con lines=29 cols=80"); znovu: printf("\n\tStiskněte klávesu nebo klávesovou kombinaci: "); klic=getch(); for (k=0; k<8; ++k) { //cyklus procházející jeden byte = 8 bitů zprava doleva printf("\n\tbit cislo %d",k); //tisk pozičního čísla bitu maska=(k>0)?maska*2:1; //ternární operátor a dvojková váha bitu printf("\t\tvaha bitu = %d",maska); //tisk váhy bitu = mocnina čísla dva i[k]=(klic&maska)>0?1:0; //nenulové váhy nahrazuje jedničkou printf("\t\tobsah bitu = %d",i[k]); //tisk obsahu bitu (0 nebo 1) } printf("\n\tVložil jste znak %c, s ASCII kódem %d,",klic,klic); printf(" binárně %d%d%d%d%d%d%d%d\n\t",i[7],i[6],i[5],i[4],i[3],i[2],i[1],i[0]); goto znovu; }
Ukázka elektronické knihy, UID: KOS280722
97 Napište program pro porovnávání dvojice náhodných číslic 0 až 7 bitovou funkcí AND: /* Projekt v C jazyce k7_binruleta * rozdíl bytových a bitových funkcí * © V. Pospíšil 2020 © */ #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <time.h> void main(void) { int vstup1=7, vstup2=8, k, maska; unsigned int v1[8], v2[8]; //proměnné typu 8 místného pole na načítání 1 bytu, čili 8 bitů time_t cas1, cas2; char odpoved='a', vystup; system("chcp 1250"); system("color 9f"); system("mode con lines=4 cols=70"); srand((unsigned) time(NULL)); //nastavení výpočtu pseudonáhodného čísla dle aktuálního času if (vstup1 && vstup2) printf("\tPodmínka (%d && %d) je pravda.",vstup1, vstup2); else printf("\n\tPodmínka (%d && %d) je lež.",vstup1, vstup2); if (vstup1 & vstup2) printf("\n\tPodmínka (%d & %d) je pravda.",vstup1, vstup2); else printf("\n\tPodmínka (%d & %d) je lež.",vstup1, vstup2); printf("\n\tTeď roztočíme bitovou ruletu s funkcí AND (&):\n\t"); system("pause"); while (odpoved=='a') { vstup1=rand()%8; //naplnění vstupů náhodným číslem od 0 do 7 včetně vstup2=rand()%8; for (k=0; k<8; ++k) { //cyklus procházející jeden byte = 8 bitů zprava doleva maska=(k>0)?maska*2:1; //ternární operátor a dvojková váha bitu v1[k]=(vstup1&maska)>0?1:0; //nenulové váhy nahrazuje jedničkou v2[k]=(vstup2&maska)>0?1:0; } printf("\n\tPrvní znak je: %d,",vstup1); printf(" binárně %d%d%d%d%d%d%d%d", v1[7],v1[6],v1[5],v1[4],v1[3],v1[2],v1[1],v1[0]); printf("\n\tDruhý znak je: %d,",vstup2); printf(" binárně %d%d%d%d%d%d%d%d", v2[7],v2[6],v2[5],v2[4],v2[3],v2[2],v2[1],v2[0]); printf("\n\tBitový součin je %d.",vystup=(vstup1&vstup2)?1:0); printf("\n\tPokračovat a/n ? "); odpoved=getch(); } }
Ukázka elektronické knihy, UID: KOS280722
98 /* © V.Pospíšil 2020 © převod posloupnosti znaků na binární čísla a xor zašifrování */ #include <stdio.h> #include <string.h> #include <conio.h> #include <stdlib.h> void main(void) { unsigned char znaky[51], byty[50][8], sifra[8], vysledek[50], klic, kod[8]; int pocet, i, j, dvojka; FILE *vystup; system("color 9f"); system("chcp 1250"); system("mode con lines=29 cols=90"); vystup=fopen("Kodovany.txt","w"); printf("\n\tVlož max 50-ti znakovou zprávu i s interpunkcí včetně mezer a odentruj:\n\t"); fgets(znaky, 51, stdin); //scanf čte jen po bílý znak, fgets až po enter včetně pocet=strlen(znaky); printf("\tPočet vložených znaků %d",pocet-1); //pomocí -1 eliminujeme enter, tedy \n printf("\n\tVlož šifrovací znak: "); klic=getch(); printf("%c",klic); for (i=0; i<8; i++) { dvojka=(i>0)?dvojka*2:1; sifra[i]=(klic&dvojka)>0?1:0; } printf("\n\tVložil jsi znak \"%c\" s ASCII kodem %u, binárně ", klic, klic); printf ("%u%u%u%u%u%u", sifra[7], sifra[6], sifra[5], sifra[4], sifra[3], sifra[2]); printf ("%u%u\n\t", sifra[1], sifra[0]); for (i=0; i<pocet-1; i++) { //pomocí -1 eliminujeme ukončovací znak řetězce, tedy \0 for (j=0; j<8; j++) { dvojka=(j>0)?dvojka*2:1; byty[i][j]=(znaky[i]&dvojka)>0?1:0; } vysledek[i]=znaky[i]^klic; for (j=0; j<8; j++) { dvojka=(j>0)?dvojka*2:1; kod[j]=(vysledek[i]&dvojka)>0?1:0; } if (i==20|i==40) { printf("\n\t"); system("pause"); printf("\n\t%c %3u\t%u%u%u", znaky[i], znaky[i] ,byty[i][7],byty[i][6],byty[i][5] ); printf("%u%u%u%u%u xor ", byty[i][4],byty[i][3],byty[i][2],byty[i][1],byty[i][0]); printf("%u%u%u%u%u%u", sifra[7], sifra[6], sifra[5], sifra[4], sifra[3], sifra[2]); printf("%u%u = %u%u%u%u", sifra[1], sifra[0], kod[7], kod[6], kod[5], kod[4]); printf("%u%u%u%u %3u ", kod[3], kod[2], kod[1], kod[0], vysledek[i]); printf("%c ", vysledek[i]); fprintf(vystup,"%u ",vysledek[i]); } fclose(vystup); printf("\n\n\t"); system("pause"); }
Ukázka elektronické knihy
}