Guest User

Untitled

a guest
Jun 24th, 2018
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.00 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h> // operacje na plikach
  3. #include <string.h>
  4.  
  5. #define DLUGOSC_LINI 100
  6. #define DLUGOSC_DZIALANIA 5
  7. #define POZ_LICZBY_NEGOWANEJ 4
  8. #define POZ_DRUGIEJ_LICZBY 13
  9. #define POZ_DZIALANIA 9
  10.  
  11. void WypiszBinarnie(char znak)
  12. {
  13. int i;
  14. for(i = 0; i < 8; i++)
  15. printf("%d", (unsigned char)(znak << i) >> 7);
  16. }
  17.  
  18. char NapisBinarnyNaLiczbe(char* napis)
  19. {
  20. int i;
  21. char wynik = 0;
  22. for(i = 0; i < 8; i++) // 8 - bitowa liczba
  23. {
  24. wynik = 2 * wynik + (napis[i] - '0');
  25. }
  26. return wynik;
  27. }
  28.  
  29. void WczytajDzialanie(char* dzialanie, char* napis)
  30. {
  31. int i, k = 0;
  32. // wczytujemy dzialanie, 5 znakow chyba ze napotkamy spacje
  33. for(i = POZ_DZIALANIA; (napis[i] != ' ') && (i < POZ_DZIALANIA + 5); i++)
  34. dzialanie[k++] = napis[i];
  35. dzialanie[k] = '\0';
  36. }
  37.  
  38. void WczytajLinie(char* linia)
  39. {
  40. if(linia[0] == 'N') //sprawdzenie czy to negacja
  41. {
  42. printf("%s = ", linia);
  43. WypiszBinarnie(~(NapisBinarnyNaLiczbe(linia + POZ_LICZBY_NEGOWANEJ)));
  44. printf("\n");
  45. }
  46. else // dzialanie dwuargumentowe
  47. {
  48. char p = NapisBinarnyNaLiczbe(linia);
  49. char q = NapisBinarnyNaLiczbe(linia + POZ_DRUGIEJ_LICZBY);
  50. char wynik;
  51. char dzialanie[DLUGOSC_DZIALANIA];
  52. WczytajDzialanie(dzialanie, linia);
  53. if(strcmp(dzialanie, "AND") == 0)
  54. wynik = p & q;
  55. else if(strcmp(dzialanie, "NAND") == 0)
  56. wynik = ~(p & q);
  57. else if(strcmp(dzialanie, "OR") == 0)
  58. wynik = p | q;
  59. else if(strcmp(dzialanie, "NOR") == 0)
  60. wynik = ~(p | q);
  61. else if(strcmp(dzialanie, "XOR") == 0)
  62. wynik = (p & ~q) | (~p & q);
  63.  
  64. printf("%s = ", linia);
  65. WypiszBinarnie(wynik);
  66. printf("\n");
  67. }
  68. }
  69.  
  70. int main()
  71. {
  72. FILE *wskPliku;
  73. if((wskPliku = fopen("dane.txt", "r")) == NULL)
  74. {
  75. puts("Nie moge otworzyc pliku dane.txt!\n");
  76. exit(1);
  77. }
  78. else
  79. {
  80. char linia[DLUGOSC_LINI];
  81. while((fgets(linia, DLUGOSC_LINI, wskPliku)) != NULL)
  82. {
  83. linia[strlen(linia)-1] = 0;
  84. WczytajLinie(linia);
  85. }
  86. fclose(wskPliku);
  87. }
  88. return 0;
  89. }
Add Comment
Please, Sign In to add comment