Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h> // operacje na plikach
- #include <string.h>
- #define DLUGOSC_LINI 100
- #define DLUGOSC_DZIALANIA 5
- #define POZ_LICZBY_NEGOWANEJ 4
- #define POZ_DRUGIEJ_LICZBY 13
- #define POZ_DZIALANIA 9
- void WypiszBinarnie(char znak)
- {
- int i;
- for(i = 0; i < 8; i++)
- printf("%d", (unsigned char)(znak << i) >> 7);
- }
- char NapisBinarnyNaLiczbe(char* napis)
- {
- int i;
- char wynik = 0;
- for(i = 0; i < 8; i++) // 8 - bitowa liczba
- {
- wynik = 2 * wynik + (napis[i] - '0');
- }
- return wynik;
- }
- void WczytajDzialanie(char* dzialanie, char* napis)
- {
- int i, k = 0;
- // wczytujemy dzialanie, 5 znakow chyba ze napotkamy spacje
- for(i = POZ_DZIALANIA; (napis[i] != ' ') && (i < POZ_DZIALANIA + 5); i++)
- dzialanie[k++] = napis[i];
- dzialanie[k] = '\0';
- }
- void WczytajLinie(char* linia)
- {
- if(linia[0] == 'N') //sprawdzenie czy to negacja
- {
- printf("%s = ", linia);
- WypiszBinarnie(~(NapisBinarnyNaLiczbe(linia + POZ_LICZBY_NEGOWANEJ)));
- printf("\n");
- }
- else // dzialanie dwuargumentowe
- {
- char p = NapisBinarnyNaLiczbe(linia);
- char q = NapisBinarnyNaLiczbe(linia + POZ_DRUGIEJ_LICZBY);
- char wynik;
- char dzialanie[DLUGOSC_DZIALANIA];
- WczytajDzialanie(dzialanie, linia);
- if(strcmp(dzialanie, "AND") == 0)
- wynik = p & q;
- else if(strcmp(dzialanie, "NAND") == 0)
- wynik = ~(p & q);
- else if(strcmp(dzialanie, "OR") == 0)
- wynik = p | q;
- else if(strcmp(dzialanie, "NOR") == 0)
- wynik = ~(p | q);
- else if(strcmp(dzialanie, "XOR") == 0)
- wynik = (p & ~q) | (~p & q);
- printf("%s = ", linia);
- WypiszBinarnie(wynik);
- printf("\n");
- }
- }
- int main()
- {
- FILE *wskPliku;
- if((wskPliku = fopen("dane.txt", "r")) == NULL)
- {
- puts("Nie moge otworzyc pliku dane.txt!\n");
- exit(1);
- }
- else
- {
- char linia[DLUGOSC_LINI];
- while((fgets(linia, DLUGOSC_LINI, wskPliku)) != NULL)
- {
- linia[strlen(linia)-1] = 0;
- WczytajLinie(linia);
- }
- fclose(wskPliku);
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment