ne_viens
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору #include <stdlib.h> #include <stdio.h> #define ARRLEN 11 #if !(ARRLEN & 1) #error "Array size must be odd!" #endif ////////////////////////////////////////////////// void decode(char* cipher, char* plain) { int i, j, x, y; char buf[ARRLEN][ARRLEN]; y = x = ARRLEN >> 1; for(j = 1; ; ++j) { for(i = 0; i < j; ++i) { buf[y][x] = *cipher++; if(j & 1) ++x; else --x; } if(j >= ARRLEN) break; for(i = 0; i < j; ++i) { buf[y][x] = *cipher++; if(j & 1) ++y; else --y; } } memcpy(plain, buf, sizeof(buf)); } ////////////////////////////////////////////////// void encode(char* plain, char* cipher) { int i, j, x, y; char buf[ARRLEN][ARRLEN]; memcpy(buf, plain, sizeof(buf)); y = x = ARRLEN >> 1; for(j = 1; ; ++j) { for(i = 0; i < j; ++i) { *cipher++ = buf[y][x]; if(j & 1) ++x; else --x; } if(j >= ARRLEN) break; for(i = 0; i < j; ++i) { *cipher++ = buf[y][x]; if(j & 1) ++y; else --y; } } } char str[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvw"; ////////////////////////////////////////////////// main() { int i, j; char buf[ARRLEN * ARRLEN], buf2[ARRLEN * ARRLEN + 1]; decode(str, buf); for(j = 0; j < ARRLEN; ++j) { for(i = 0; i < ARRLEN; ++i) printf("%c ", buf[j * ARRLEN + i]); puts(""); } puts(""); puts(str); encode(str, buf); for(i = 0; i < ARRLEN * ARRLEN; ++i) printf("%c", buf[i]); puts(""); decode(buf, buf2); for(i = 0; i < ARRLEN * ARRLEN; ++i) printf("%c", buf2[i]); puts(""); getchar(); } | Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 18:59 19-06-2013 | Исправлено: ne_viens, 08:54 21-06-2013 |
|