KMA
Долгожитель
|
Mas ты объясни, что ты подразумеваешь под "периметром матрицы"? Это, сумма элементов "сторон", т. е. элементы которые имеет крайние индексы. Под крайними, полагается то, что если дана матрица n*m, то крайними будут все элементы для которых выполняется [1,j], [i,1], [n,j], [m,i]. Но тогда точно должно выпоняться хотя бы одно из требований, такое, что матрица обязана быть квадратной, или заранее известен размер матрицы. Уточни.
|
Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 24 мая 2006 11:33 | IP
|
|
Guest
Новичок
|
Ребят, помогите плиз с решением вот этой задачи: Один из простейших способов шифровки текста состоит в табличной замене каждого символа другим символом - его шифром. Выбрать некоторую таблицу, разработать способ ее представления, а затем необходимо: а) зашифровать текст б) расшифровать текст Замена символа оформляется в виде функции. Исходный текст берется из файла данных, а результат (зашифрованный текст, расшифрованный текст) помещается в файл результата. Допустим я записываю таблицу в файл *.dat следующим образом: А 1 Б 2 В 3 Г 4 ..... Э * Ю + Я [ заранее, отзвавшимся - огромное спасибо.
|
Всего сообщений: Нет | Присоединился: Never | Отправлено: 24 мая 2006 17:17 | IP
|
|
KMA
Долгожитель
|
Привиди пожалуйста полную кодировку таблички, а еще лучше ссылку, чтобы здесь все не загромождать, а там и о функциях победседуем. Ты сам то как думаешь это делать?
|
Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 24 мая 2006 17:20 | IP
|
|
KMA
Долгожитель
|
Мое предложение, не быть гением, а закодировать все в следующем виде. а-1 б-2, в-3 .... ю-32, я-33. Как вам такой метод, и особо стараться не надо.
|
Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 24 мая 2006 17:23 | IP
|
|
Guest
Новичок
|
Да это номальный метод. КМА, если не сложно плиз помоги.
|
Всего сообщений: Нет | Присоединился: Never | Отправлено: 24 мая 2006 17:50 | IP
|
|
Mas
Новичок
|
Цитата: KMA написал 24 мая 2006 11:33 Mas ты объясни, что ты подразумеваешь под "периметром матрицы"? Это, сумма элементов "сторон", т. е. элементы которые имеет крайние индексы. Под крайними, полагается то, что если дана матрица n*m, то крайними будут все элементы для которых выполняется [1,j], [i,1], [n,j], [m,i]. Но тогда точно должно выпоняться хотя бы одно из требований, такое, что матрица обязана быть квадратной, или заранее известен размер матрицы. Уточни.
Матрица должна быть квадратной, под периметром понимается сумма элементов 1 строки, 1 столбца, n строки, n столбца.
|
Всего сообщений: 8 | Присоединился: май 2006 | Отправлено: 24 мая 2006 17:51 | IP
|
|
KMA
Долгожитель
|
Итак теперь более или менее понятно. Очень важная вещь, которую хочу тебе сказать Mas, файл должен быть желательно типизированный. Итак, записать файл в поток очень просто: пусть есть некая переменная f типа file of integer; Даже пусть он задан. Итак, вначале я узнаю размер матрицы, делаю я это очень хитро: n:=trunc (sqrt (fileSize (f))); Таким образом я узнал порядок данной матрицы. Это уже хорошо. Итак, далее мне нужно найти периметр. Я точно должен знать только одно, как записывался в файл поток данных в виде твоей матрицы. Пусть он записывался по следующему алгоритму: [1,1] -первый элемент, [1,2] - второй элемент, [1,3] - третий элемент ну и так далее. Итак ищу сумму элементов первой строки: seek (f,0); for i:=1 to n do begin read (f, buf); perimetr:=perimetr+buf end; Нашел. Далее, вещь похожая, но только для последней строки: seek (f, fileSize (f)-n-1); for i:=1 to n do begin read (f, buf); perimetr:=perimetr+buf end; Две стороны нашли, уже хорошо. Итак, теперь самая сложная задача, найти боковые стороны, т. е. столбцы. Решается должно в этом духе. for i:=1 to n-2 do begin seek (f, n*i); read (f, buf); perimetr:=perimetr+buf; {для первого столбца} seek (f, n*i+n-1); read (f, buf) perimetr:=perimetr+buf; {для второй} end; Еще раз говорю, не факт, что это самый рациональный и правильный метод. Не факт, что код у меня точен. Возможно, где-то напутал с единицами, или в координатах ошибся. Главное, я дал тебе алгоритм, а вот далее ты уже должен решить сам. Далее, как говориться - критическое программирование - исправление через анализ ошибок. Дерзай.
|
Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 24 мая 2006 23:47 | IP
|
|
KMA
Долгожитель
|
Guest не в моих правилах писать всем все и вся, тем более, тем людям, которые леняться выложить свои коды, конечно, если предварительно они не поленились их написать. Но задача довольно простая и поэтому я могу рассказать об основном алгоритме ее решения. Есть два метода шифрования твоим методом. Первый -- хаотичный, когда ты сам какому-то знаку задаешь какую-то букву. Этот код занимает довольно долгое время на зашифровку, и расшифровку, так как постоянно приходиться искать по таблице соответствующий символ, а значит, для зашифровки скажем одного символа требуется (если алфавит содержит 33 буквы) в худшем случае 33 опреации сравнения. На нынешних машинах, это не особо заметно, а вот на старых видно и невооруженным глазом. Я не говорою о коде в котором идет поиск по среднему слову. Вторая метода, это исходить от таблиц кодов символов, и применять какую-то определенную зависимость цифр, символов и тому подобного. И те и другие вполне реально расшифровать, не имея даже таблиц шифров. Но первый уже сложнее. Ладно, думаю, что суть не в этом. Итак, я тебе предложил создать алфавит из 32 букв (букву ё я не буду считать). Пусть эти буквы будут заглавными (всегда тянуло на великое ). Тогда я создам некую шифровальную таблицу, для этого напишу отдельную программу. Создаю типизированный файл следующего типа: TYPE alfavit=1..32; shifr=record code: alfavit; symbol: char; end; Var f: file of shifr; tabl: array [1..32] of shifr; Супер, теперь я туда вбахаю всю таблицу, но прежде я ее задам. for j:=1 to 32 do begin tabl[j].code:=j; tabl[j].symbol:=chr (127+j) end; Ну а дальше пошаговая запись. С этим думаю ты справишься. Почему я записываю все это в файл??? Знаешь, так просто, чтобы было, вдруг все забудешь. Можно и без этого. Теперь, когда у меня есть таблица значений, то мне намного проще все записать. Итак процедура для шифрования. Я пишу лишь скромненько функцию преобразования из одного шифра в другой: function symbolToShifr (symb: char):alfavit; Begin symbolToShifr:=ord (ch)-127 End; Функция для расшифровки: function shifrToSymbol (code: alfavit):char; Begin shifrToSymbol:=chr (code+127) End; Вот и все. А уж дальше ты попробуй сам. (Сообщение отредактировал KMA 25 мая 2006 0:23)
|
Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 25 мая 2006 0:21 | IP
|
|
Guest
Новичок
|
большое спасибо
|
Всего сообщений: Нет | Присоединился: Never | Отправлено: 25 мая 2006 0:38 | IP
|
|
Guest
Новичок
|
Боюсь, что и с пошаговой записью я не справлюсь=))). Понимаешь, в деле програмирования - я - полнейший ноль(это мягко говоря). Может быть, если уж ты и так выложил 3\4 всей программы, тебе не составит труда все таки выложить ее полностью??? Я знаю, что жестко наглею...но это только из-за того, что информатика для меня это ЛЕС. Плиз помоги.
|
Всего сообщений: Нет | Присоединился: Never | Отправлено: 25 мая 2006 0:54 | IP
|
|
|