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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.03.2013, 09:21   #1
lipniskaya
Новичок
Джуниор
 
Регистрация: 22.03.2013
Сообщений: 2
По умолчанию По зашифрованной строке и номеру позиции в отсортированном списке циклических сдигов восстановить исходную строку

Помогите с программой!! пожалйста, срочно)))

Суть алгоритма сжатия строки состоит в следующем. Возьмем все возможные циклические сдвиги исходной строки и расположим их в словарном порядке в виде квадратной таблицы. В получившейся таблице выделим последний столбец, который, если его записать в виде строки, и будет являться результатом описанного преобразования.
Рассмотрим, что происходит при таком преобразовании со строкой «abraca»:
abraca aabrac
bracaa abraca
abraca → racaab → acaabr → caraab
acaabr bracaa
caabra caabra
aabrac racaab

Итак, в результате получили строку «caraab». В дополнение к найденной строке определим также позицию исходной строки в отсортированном списке циклических сдвигов (в данном случае 2). Данной информации достаточно, чтобы однозначно восстановить первоначальную строку.
Необходимо составить программу, которая по зашифрованной строке и номеру позиции в отсортированном списке восстанавливает исходную строку.
Входной файл: В первой строке входного файла записано целое число k – номер исходной строки в отсортированном списке циклических сдвигов. На следующей строке записан результат преобразования.
Входные данные таковы, что исходная строка всегда существует. Сама строка состоит из символов с кодами от 33 до 255. Длина заданной строки не превосходит 105.
Выходной файл: содержит восстановленную строку.
lipniskaya вне форума Ответить с цитированием
Старый 22.03.2013, 09:36   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Уважае(мый, мая - нужное подчеркнуть) lipniskaya!

Во-первых, создайте новую тему, а не лезьте в чужую
Во-вторых, если я правильно понял суть преобразования, то итоговая строка будет не caraab, а caabra
В-третьих, в каком месте это алгоритм сжатия?
В-четвертых, не мешало бы язык программирования указать. На паскале получение исходной строки будет таким:

Код:
var s, s_out: string;
    n: integer;
    F: Text;
begin
  Assign(F,'inp.txt');
  Reset(F);
  ReadLn(F,n);
  ReadLn(F,s);
  Close(F);
  s_out:=Copy(s,n,length(s)-n+1)+Copy(s,1,n-1);
  Assign(F,'out.txt');
  Rewrite(F);
  WriteLn(F,s_out);
  Close(F);
end.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 22.03.2013, 09:54   #3
lipniskaya
Новичок
Джуниор
 
Регистрация: 22.03.2013
Сообщений: 2
По умолчанию

Sciv, большое спасибо за ответ!
прошу прощения, что залезла не в ту тему((( просто увидела "программы по строкам"
Вопрос: при запуске программы он ничего не выдаёт. просто пустой экран. я так поняла, что он должен просить ввод числа( например, 2)?? а исходное слово? его тоже требуется вводить. подскажите!!
lipniskaya вне форума Ответить с цитированием
Старый 22.03.2013, 10:05   #4
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
я так поняла, что он должен просить ввод числа( например, 2)?? а исходное слово? его тоже требуется вводить. подскажите!!
обратите внимание на собственные условия:

Цитата:
Входной файл: В первой строке входного файла записано целое число k – номер исходной строки в отсортированном списке циклических сдвигов. На следующей строке записан результат преобразования.
Выходной файл: содержит восстановленную строку.
Создайте в папке с программой файл inp.txt, в первой строке файла введите номер начала строки, а во второй строке - сам зашифрованный текст.
Ну или вот вам процедура создания файла:

Код:
Procedure CreateFile;
var st, st1: string;
    num: integer;
    Fil: Text;
begin
  Write('Vvedite stroku: ');
  ReadLn(St);
  Write('Vvedite chislo symvolov sdviga: ');
  ReadLn(num);
  st1:=Copy(st,num+1,length(st)-num)+Copy(st,1,num);
  Assign(Fil,'inp.txt');
  Rewrite(Fil);
  WriteLn(Fil,num);
  WriteLn(Fil,st1);
  Close(Fil);
end;

var s, s_out: string;
    n: integer;
    F: Text;

begin
  CreateFile;  //Вызываем нашу процедуру
  Assign(F,'inp.txt');

  //И далее по тексту пишем всю предыдущую программу
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавить строку в файл с нужной позиции Fakov Общие вопросы Delphi 2 15.12.2012 15:51
Вопрос про удаление символа с определенной позиции в строке lagg Общие вопросы C/C++ 1 15.11.2011 18:45
Парные\непарные позиции в строке Phoenix617 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 27.01.2011 15:18
Преобразовать исходную строку. Delphi BelialL Помощь студентам 4 21.11.2010 15:27
Опредиление № позиции по алфавиту в несортированом списке SMShrek Microsoft Office Excel 7 02.03.2010 13:49