Форум
» Назад на решение задач по физике и термеху
Регистрация | Профиль | Войти | Забытый пароль | Присутствующие | Справка | Поиск

» Добро пожаловать, Гость: Войти | Регистрация
    Форум
    Информационные технологии
        Турбо Паскаль. Программирование на Pascal
Отметить все сообщения как прочитанные   [ Помощь ]
» Добро пожаловать на форум "Информационные технологии" «

Переход к теме
<< Назад Вперед >>
Несколько страниц [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 ]
Модераторы: paradise, KMA
  

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

Эта тема закрыта, новые ответы не принимаются

Переход к теме
<< Назад Вперед >>
Несколько страниц [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 ]

Форум работает на скрипте © Ikonboard.com