Программа шифрования
Помогите пожалуйста, не могу найти ошибку. Пишу на c++
Программа должна вывести координаты букв слова из матрицы в которой записан русский алфавит, но выводятся какие-то непонятные символы, что я сделал не так( помогите пожалуйста. #include <iostream> #include <cmath> #include <conio.h> #include <string> using namespace std; int main() { setlocale(LC_ALL, "Russian"); cout << "******** Квадрат Полибия (3 метод)! *********" << endl; char M[6][6], K = 0; int i, j, k=0, KS = 0; int Sif[100]; char S[38] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ***********"; char sym[50] = "ZAWITA"; for (i = 0; i < 6; i++) for (j = 0; j < 6; j++) { M[i][j] = S[K]; K++; } cout << endl; cout << S << endl; cout << endl; for (i = 0; i < 6; i++) { cout << endl; for (j = 0; j < 6; j++) cout << M[i][j]; } cout << endl; cout << endl; cout << sym << endl; for (k = 0; k < 50; k++) for (i = 0; i < 6; i++) {for (j = 0; j < 6; j++) if (sym[k] == M[i][j]) Sif[KS] = i; else Sif[KS+1] = j; KS++; } cout << endl; cout << "Координаты слова - " << Sif << endl; _getch(); return 0; } |
Вложений: 1
Цитата:
Код:
Const Вложение 336280 Оно? Теперь по поводу ошибок. 1. Символьный массив S должен содержать 49 элементов (считая с 1), или 48, если счет начинать с 0. У Вас - маловато. Ну или можно 36 элементов (от 0 до 35), но тогда массив М должен быть M[5][5] с соответствующей поправкой границ циклов. 2. Несколько ошибок в тройном цикле сопоставления символов пробного слова с символами матрицы: а) первую фигурную скобку нужно сместить на 2 строки вниз, т.е. она должна стоять перед Sif[KS]; б) "else" тут ни к селу, ни к городу, его нужно просто убрать; в) в конце цикла величину KS следует увеличивать не на 1, а на 2. Ну вот как-то так... |
Изменил, символьный массив S содержит 48 элементов, сдвинул фигурную скобку на две строки, убрал "else" и в конце цикла KS увеличил на 2, почему-то тоже самое :( Всякий раз он выводится новая строчка в котрой не изменяется только 00, а дальше бред, похожий на это:
******** Квадрат Полибия (3 метод)! ********* ABCDEFGHIJKLMNOPQRSTUVWXYZ*********** ABCDEF GHIJKL MNOPQR STUVWX YZ**** ****** ZAWITA Координаты слова - 0031F908 |
Цитата:
|
int main()
{ setlocale(LC_ALL, "Russian"); cout << "******** Квадрат Полибия (3 метод)! *********" << endl; char M[6][6], K = 0; int i, j, k=0, KS = 0; int Sif[100]; char S[48] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ***********"; char sym[50] = "ZAWITA"; for (i = 0; i < 6; i++) for (j = 0; j < 6; j++) { M[i][j] = S[K]; K++; } cout << endl; cout << S << endl; cout << endl; for (i = 0; i < 6; i++) { cout << endl; for (j = 0; j < 6; j++) cout << M[i][j]; } cout << endl; cout << endl; cout << sym << endl; for (k = 0; k < 50; k++) for (i = 0; i < 6; i++) for (j = 0; j < 6; j++) if (sym[k] == M[i][j]) {Sif[KS] = i; Sif[KS+2] = j; KS++; } cout << endl; cout << "Координаты слова - " << Sif << endl; _getch(); return 0; } |
Молодой человек, так дело НЕ ПОЙДЁТ!
Программирование - это не та деятельность, которой можно заниматься по принципу "шаляй-валяй", "так сойдёт", "что-то типо" и т.п. Каждая строка программы, да что там - каждый набиваемый символ должен быть тщательно обдуман и выверен. Цитата:
char S[35] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ**********"; Цитата:
Цитата:
for (k = 0; k < 50; k++) for (i = 0; i < 6; i++) for (j = 0; j < 6; j++) if (sym[k] == M[i][j]) {Sif[KS] = i; Sif[KS+1] = j; KS = KS + 2; } |
Спасибо большое, что помогли разобраться с телом цикла, очень рад что выводятся нормальные числа.
Ещё можете подсказать как вывести их? Не так как в вашем примере, немного по другому, в строку. Я ведь должен при выводе добавить ещё два цикла для i и j чтоб вывелся полноценный код? |
Ура, работает=). Сделал вывод на основе того, что вы набрали на паскале. Пожалуйста, вы не могли бы объяснить, для чего мы i умножаем на два, а во втором случае ещё и добавляем единицу, никак не могу понять=(
for (i = 0; i < 6; i++) cout << Sif[2*i] << Sif[2*i+1]; _getch(); return 0; } |
Цитата:
Sif[KS+1] = j; KS = KS + 2; |
Цитата:
Цитата:
Цитата:
|
Часовой пояс GMT +4, время: 10:52. |
Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.