Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.11.2016, 17:48   #1
Pistoletka
Пользователь
 
Регистрация: 18.09.2016
Сообщений: 13
По умолчанию Шифрование PascalABC.net

Я написала шифрование методом рассечения-разнесения. Ввод текста у меня происходит с клавиатуры, нужно переделать, чтобы читал данные из файлы. Я пыталась, но постоянно вылезают ошибки. Подскажите, как правильно сделать? И как сделать так, чтобы вывод происходил в несколько файлов?
Краткое описание метода: содержимое одного файла разбивается на блоки, которые разносятся по нескольким файлам. Каждый такой файл не несет никакой информации, а сбор данных в единое целое осуществляется простой программой.
Код:
program laba2;

const
  m = 20;
  n = 30;

var
  text: string;
  dtext: array [1..n * m] of string;
  v, i, j, m1, n1, k: integer;
  key1: array [1..m] of integer;
  key2: array [1..n] of integer;

begin
  Write('Введите число строк: ');
  Readln(m1);
  Write('Введите число столбцов: ');
  Readln(n1);
  Write('Введите текст для шифрования: ');
  Readln(text);
  k := ceil(length(text) / (n1 * m1)); //Определяем число итераций  
  while n1 * m1 * k > length(text) do
    text := text + ' ';
  
  
  
  Writeln('Введите последовательность индексов строк: '); 
  repeat
    for j := 1 to m1 do
      read(key1[j]);   
    v := 0;
    for i := 1 to m1 do
      for j := i + 1 to m1 do
        if key1[i] = key1[j] then inc(v);       
    if v <> 0 then        
    begin
      writeln('Ошибка! Символы ключа не уникальны!');          
    end;
    i := 1;
    while (i <= m1) and (key1[i] >= 1) and (key1[i] <= m1) do
      Inc(i);
    if i <= m1 then
    begin
      writeln('Ошибка! Выход из диапазона!!');
      Inc(v);
    end;  
    
  until v = 0; 
  
  
  Writeln('Введите последовательность индексов столбцов: '); 
  repeat
    for i := 1 to n1 do
      read(key2[i]);   
    v := 0;
    for i := 1 to n1 do
      for j := i + 1 to n1 do
        if key2[i] = key2[j] then inc(v);       
    if v <> 0 then        
    begin
      writeln('Ошибка! Символы ключа не уникальны!');          
    end;
    i := 1;
    while (i <= n1) and (key2[i] >= 1) and (key2[i] <= n1) do
      Inc(i);
    if i <= n1 then
    begin
      writeln('Ошибка! Выход из диапазона!!');
      Inc(v);
    end;  
    
  until v = 0; 
  
  for i := 1 to n1 * m1 do
    dtext[i] := '';
  for v := 1 to k do
  begin
    for i := 1 to m1 do
    begin
      for j := 1 to n1 do
      begin
        dtext[(key1[i] - 1) * n1 + key2[j]] := dtext[(key1[i] - 1) * n1 + key2[j]] + text[n1 * m1 * (v - 1) + n1 * (i - 1) + j]; //Заполняем матрицу шифровки
        
      end;
    end;
  end;
  Writeln('Зашифрованные блоки: ');
  for i:=1 to n1*m1 do
    writeln(dtext[i]);
end.
Pistoletka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PascalABC.Net now2 Помощь студентам 2 27.03.2014 21:03
PascalABC.NET v1ktor Паскаль, Turbo Pascal, PascalABC.NET 0 21.06.2011 13:58
Типы PascalABC.NET ofenod Помощь студентам 0 14.05.2011 22:20
PascalABC.net gogomon93 Помощь студентам 5 17.04.2011 18:48
PascalABC.net *stRong* Помощь студентам 2 10.06.2010 17:50