Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //POPRAWIONA WEJSCIOWKA
- #include <stdio.h>
- #include <string.h>
- #define WIERSZE 5 //liczba wierszy
- #define KOLUMNY 6 //liczba kolumn + 1
- #define LITER_W_WIERSZU 5 //liczba liter w danym wierszu
- #define DLUGOSC_TEKSTU WIERSZE*LITER_W_WIERSZU+1 //maksymalna dlugosc tekstu
- #define PRZESUNIECIE 1 //liczba przesuniec wiersza
- void wypelnijTablice2WAlfabetem(char tab[][KOLUMNY], char znakPoczatkowy, int liczbaWierszy, int liczbaKolumn);
- void wypiszTablice2WChar(char tab[][KOLUMNY], int liczbaWierszy, int liczbaKolumn);
- void wczytajNapis(char tab[WIERSZE*KOLUMNY]);
- void wyznaczAdresyKomorek(char tabA[][KOLUMNY], char *tabB[KOLUMNY], char pom[KOLUMNY]);
- char *wyznaczAdresLitery(char tab[][KOLUMNY], char litera);
- void wypiszNapisWskaznikami(char *tab[KOLUMNY]);
- void szyfruj(char tab[][KOLUMNY]);
- void odszyfruj(char tab[][KOLUMNY]);
- void zmianaWierszy(char tab[][KOLUMNY], int liczba);
- int main() {
- char tabA[WIERSZE][KOLUMNY];
- char *tabB[DLUGOSC_TEKSTU] = {NULL};
- char pom[DLUGOSC_TEKSTU] = "";
- wypelnijTablice2WAlfabetem(tabA, 'a', WIERSZE, LITER_W_WIERSZU);
- printf("Wejsciowka - laboratoria 2.\n");
- printf("Pierwotna tablica:\n");
- wypiszTablice2WChar(tabA, WIERSZE, LITER_W_WIERSZU);
- printf("Wpisz napis bez spacji: ");
- wczytajNapis(pom);
- wyznaczAdresyKomorek(tabA, tabB, pom);
- wypiszNapisWskaznikami(tabB);
- szyfruj(tabA);
- printf("Zaszyfrowana tablica:\n");
- wypiszTablice2WChar(tabA, WIERSZE, LITER_W_WIERSZU);
- printf("Zaszyfrowany tekst:\n");
- wypiszNapisWskaznikami(tabB);
- odszyfruj(tabA);
- printf("Odszyfrowana tablica:\n");
- wypiszTablice2WChar(tabA, WIERSZE, LITER_W_WIERSZU);
- printf("Odszyfrowany tekst:\n");
- wypiszNapisWskaznikami(tabB);
- printf("\nKoniec programu\n");
- return 0;
- }
- void wypelnijTablice2WAlfabetem(char tab[][KOLUMNY], char znakPoczatkowy, int liczbaWierszy, int liczbaKolumn) {
- int kodZnaku = znakPoczatkowy;
- for(int i = 0; i < liczbaWierszy; ++i) {
- for(int j = 0; j < liczbaKolumn; ++j) {
- tab[i][j] = (char)kodZnaku++;
- }
- }
- }
- void wypiszTablice2WChar(char tab[][KOLUMNY], int liczbaWierszy, int liczbaKolumn) {
- for(int i = 0; i < liczbaWierszy; ++i){
- for(int j = 0; j < liczbaKolumn; ++j) {
- if(tab[i][j] != '\0'){
- printf("%3c", tab[i][j]);
- }
- }
- putchar('\n');
- }
- putchar('\n');
- }
- void wczytajNapis(char tab[DLUGOSC_TEKSTU]){
- scanf("%25s", tab);
- }
- void wyznaczAdresyKomorek(char tabA[][KOLUMNY], char *tabB[KOLUMNY], char pom[KOLUMNY]) {
- for(int i = 0; i < DLUGOSC_TEKSTU; ++i){
- if(pom[i] != '\0'){
- tabB[i] = wyznaczAdresLitery(tabA, pom[i]);
- } else {
- break;
- }
- }
- }
- char *wyznaczAdresLitery(char tab[][KOLUMNY], char litera) {
- int kodPierwszegoZnaku = tab[0][0];
- int kodZnaku = litera;
- int literaZKolei = kodZnaku - kodPierwszegoZnaku;
- int x = literaZKolei / LITER_W_WIERSZU;
- int y = literaZKolei - (LITER_W_WIERSZU * x);
- return &(tab[x][y]);
- }
- void wypiszNapisWskaznikami(char *tab[DLUGOSC_TEKSTU]){
- for(int i = 0; i < DLUGOSC_TEKSTU-1; ++i) {
- if(tab[i] != NULL) {
- putchar(*tab[i]);
- }
- }
- putchar('\n');
- }
- void szyfruj(char tab[][KOLUMNY]) {
- zmianaWierszy(tab, PRZESUNIECIE);
- }
- void odszyfruj(char tab[][KOLUMNY]) {
- zmianaWierszy(tab, WIERSZE - PRZESUNIECIE);
- }
- void zmianaWierszy(char tab[][KOLUMNY], int liczba) {
- for(int i = 0; i < liczba; ++i) {
- char ostatniWiersz[KOLUMNY] = "";
- //strcpy(ostatniWiersz, tab[WIERSZE - 1]);
- for(int j = 0; j < KOLUMNY; ++j) {
- ostatniWiersz[j] = tab[WIERSZE - 1][j];
- }
- for(int i = WIERSZE - 2; i >= 0; --i) {
- //strcpy(tab[i+1], tab[i]);
- for(int j = 0; j < KOLUMNY; ++j) {
- tab[i+1][j] = tab[i][j];
- }
- }
- //strcpy(tab[0], ostatniWiersz);
- for(int j = 0; j < KOLUMNY; ++j) {
- tab[0][j] = ostatniWiersz[j];
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement