Advertisement
Guest User

Untitled

a guest
Feb 28th, 2020
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.10 KB | None | 0 0
  1. //POPRAWIONA WEJSCIOWKA
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. #define WIERSZE 5 //liczba wierszy
  6. #define KOLUMNY 6 //liczba kolumn + 1
  7. #define LITER_W_WIERSZU 5 //liczba liter w danym wierszu
  8. #define DLUGOSC_TEKSTU WIERSZE*LITER_W_WIERSZU+1 //maksymalna dlugosc tekstu
  9. #define PRZESUNIECIE 1 //liczba przesuniec wiersza
  10.  
  11. void wypelnijTablice2WAlfabetem(char tab[][KOLUMNY], char znakPoczatkowy, int liczbaWierszy, int liczbaKolumn);
  12. void wypiszTablice2WChar(char tab[][KOLUMNY], int liczbaWierszy, int liczbaKolumn);
  13. void wczytajNapis(char tab[WIERSZE*KOLUMNY]);
  14. void wyznaczAdresyKomorek(char tabA[][KOLUMNY], char *tabB[KOLUMNY], char pom[KOLUMNY]);
  15. char *wyznaczAdresLitery(char tab[][KOLUMNY], char litera);
  16. void wypiszNapisWskaznikami(char *tab[KOLUMNY]);
  17. void szyfruj(char tab[][KOLUMNY]);
  18. void odszyfruj(char tab[][KOLUMNY]);
  19. void zmianaWierszy(char tab[][KOLUMNY], int liczba);
  20.  
  21. int main() {
  22. char tabA[WIERSZE][KOLUMNY];
  23. char *tabB[DLUGOSC_TEKSTU] = {NULL};
  24. char pom[DLUGOSC_TEKSTU] = "";
  25. wypelnijTablice2WAlfabetem(tabA, 'a', WIERSZE, LITER_W_WIERSZU);
  26. printf("Wejsciowka - laboratoria 2.\n");
  27. printf("Pierwotna tablica:\n");
  28. wypiszTablice2WChar(tabA, WIERSZE, LITER_W_WIERSZU);
  29. printf("Wpisz napis bez spacji: ");
  30. wczytajNapis(pom);
  31. wyznaczAdresyKomorek(tabA, tabB, pom);
  32. wypiszNapisWskaznikami(tabB);
  33. szyfruj(tabA);
  34. printf("Zaszyfrowana tablica:\n");
  35. wypiszTablice2WChar(tabA, WIERSZE, LITER_W_WIERSZU);
  36. printf("Zaszyfrowany tekst:\n");
  37. wypiszNapisWskaznikami(tabB);
  38. odszyfruj(tabA);
  39. printf("Odszyfrowana tablica:\n");
  40. wypiszTablice2WChar(tabA, WIERSZE, LITER_W_WIERSZU);
  41. printf("Odszyfrowany tekst:\n");
  42. wypiszNapisWskaznikami(tabB);
  43. printf("\nKoniec programu\n");
  44. return 0;
  45. }
  46.  
  47. void wypelnijTablice2WAlfabetem(char tab[][KOLUMNY], char znakPoczatkowy, int liczbaWierszy, int liczbaKolumn) {
  48. int kodZnaku = znakPoczatkowy;
  49. for(int i = 0; i < liczbaWierszy; ++i) {
  50. for(int j = 0; j < liczbaKolumn; ++j) {
  51. tab[i][j] = (char)kodZnaku++;
  52. }
  53. }
  54. }
  55.  
  56. void wypiszTablice2WChar(char tab[][KOLUMNY], int liczbaWierszy, int liczbaKolumn) {
  57. for(int i = 0; i < liczbaWierszy; ++i){
  58. for(int j = 0; j < liczbaKolumn; ++j) {
  59. if(tab[i][j] != '\0'){
  60. printf("%3c", tab[i][j]);
  61. }
  62. }
  63. putchar('\n');
  64. }
  65. putchar('\n');
  66. }
  67.  
  68. void wczytajNapis(char tab[DLUGOSC_TEKSTU]){
  69. scanf("%25s", tab);
  70. }
  71.  
  72.  
  73. void wyznaczAdresyKomorek(char tabA[][KOLUMNY], char *tabB[KOLUMNY], char pom[KOLUMNY]) {
  74. for(int i = 0; i < DLUGOSC_TEKSTU; ++i){
  75. if(pom[i] != '\0'){
  76. tabB[i] = wyznaczAdresLitery(tabA, pom[i]);
  77. } else {
  78. break;
  79. }
  80. }
  81. }
  82.  
  83. char *wyznaczAdresLitery(char tab[][KOLUMNY], char litera) {
  84. int kodPierwszegoZnaku = tab[0][0];
  85. int kodZnaku = litera;
  86. int literaZKolei = kodZnaku - kodPierwszegoZnaku;
  87. int x = literaZKolei / LITER_W_WIERSZU;
  88. int y = literaZKolei - (LITER_W_WIERSZU * x);
  89. return &(tab[x][y]);
  90. }
  91.  
  92. void wypiszNapisWskaznikami(char *tab[DLUGOSC_TEKSTU]){
  93. for(int i = 0; i < DLUGOSC_TEKSTU-1; ++i) {
  94. if(tab[i] != NULL) {
  95. putchar(*tab[i]);
  96. }
  97. }
  98. putchar('\n');
  99. }
  100.  
  101.  
  102. void szyfruj(char tab[][KOLUMNY]) {
  103. zmianaWierszy(tab, PRZESUNIECIE);
  104. }
  105.  
  106. void odszyfruj(char tab[][KOLUMNY]) {
  107. zmianaWierszy(tab, WIERSZE - PRZESUNIECIE);
  108. }
  109.  
  110. void zmianaWierszy(char tab[][KOLUMNY], int liczba) {
  111. for(int i = 0; i < liczba; ++i) {
  112. char ostatniWiersz[KOLUMNY] = "";
  113. //strcpy(ostatniWiersz, tab[WIERSZE - 1]);
  114. for(int j = 0; j < KOLUMNY; ++j) {
  115. ostatniWiersz[j] = tab[WIERSZE - 1][j];
  116. }
  117. for(int i = WIERSZE - 2; i >= 0; --i) {
  118. //strcpy(tab[i+1], tab[i]);
  119. for(int j = 0; j < KOLUMNY; ++j) {
  120. tab[i+1][j] = tab[i][j];
  121. }
  122. }
  123. //strcpy(tab[0], ostatniWiersz);
  124. for(int j = 0; j < KOLUMNY; ++j) {
  125. tab[0][j] = ostatniWiersz[j];
  126. }
  127. }
  128. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement