Изменение длины строки. Добавление строки - Turbo Pascal

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! В написании программы столкнулся с такой сложностью. Есть строка из 500 символов. Она задаётся как тип запись, состоящая из 2 полей: str500.sleft и str500.sright. Строка получается состоит из символов <500. Дано задание. Изменить размер строки, с этой сложностью я и столкнулся. Дана строка из 400 символов, пользователь вводит строку, например состоит из 10 символов, и выбирает позицию, например 245. Значит, необходимо, чтобы 5 символов записались после 245, а остальные 5, в правую строку, так же 5 символов, которые были до этого после 245 элемента так же переписались, и далее правая строка. Это первая ситуация, так же может быть, что строка, введённая для добавления влезала. Значит надо остаток от первой строк просто перенести в правую. Например, строка 400 символов, вводим 10 символов после 230, значит у нас получается так: (230 исходных+10 добавленных+10 исходных)=250 и от них сместить те 10, которые сместила добавленная строка, то есть правая строка должна быть такая (10 левой строки+150 правой строки) = 160. Извините за столько много букв, надеюсь кто - нибудь заинтересуется этим заданием. Необходимо в течение сегодняшнего дня (23.06.14). Если будет необходимо заплатить - могу не более 100р, но завтра, как буду в универе. Фрагмент кода, сделанный мной, но имеет ошибки, не имею понятия какие. Я использовал дополнительную строку temp.sleft1 и temp.sright1 и почленно переписывал, но, так и не получилось. Кто посмотрит и хоть немного подскажет, заранее

большое спасибо)

Решение задачи: «Изменение длины строки. Добавление строки»

textual
Листинг программы
Type
  Str500 = Record
             sleft, sright : String[250];
           end;
Var
  St : Str500;
 
{ требуется доделать проверку при строке < 250 символов общей длины }
Procedure Insert500(InsSt : String; Var S : Str500; n : Word);
Begin 
  If n>250 then Insert(InsSt,S.sright,n-250)
  else
    If n+Length(InsSt)<=250 then
    Begin
      Insert(Copy(S.sleft,250-Length(InsSt),Length(S.sleft)),S.sright,1);
      Delete(S.sleft,250-Length(InsSt),Length(InsSt));
      Insert(InsSt,S.sleft,n);
    end
    else
      Begin
        { 252-n   -номер символа InsSt с которого она (часть строки) заносится в rigth}
        Insert(Copy(S.sleft,n,251-n),S.sright,1);
        Delete(S.sleft,n,251-n);
        Insert(Copy(InsSt,1,251-n),S.sleft,n);
        Insert(Copy(InsSt,252-n,Length(InsSt)+n-251),S.sright,1);
      end;
 { If Length(S.sright)>250 then Delete(S.sright,251,5); }
end;
 
Begin
  {250 символов} St.sleft:='1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890';
  {150 символов} St.sright:='1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890';
  Writeln(Length(St.sleft));
  Writeln(Length(St.sright));
  Writeln;
  Insert500('ABCDEFGHIJ',St,245);
  Writeln(Length(St.sleft));
  Writeln(Length(St.sright));
  Writeln;
  Writeln(St.sleft);
  Writeln(St.sright);
  Writeln;
end.

Объяснение кода листинга программы

  1. В данном коде используется структура данных Str500, которая представляет собой запись с двумя полями: sleft и sright, оба из которых являются строками длиной до 250 символов.
  2. Переменная St инициализируется двумя строками, длина каждой из которых составляет 250 символов.
  3. В процедуре Insert500 принимается строка InsSt, длина которой не превышает 250 символов, и переменная n, которая указывает на количество символов, которые нужно добавить к строке InsSt.
  4. Если n больше 250, то выполняется операция вставки строки InsSt в поле sright записи Str500.
  5. Если n меньше или равно 250, то выполняется ряд проверок для определения того, как следует изменить строку InsSt и поле sleft записи Str500.
  6. Если длина строки InsSt меньше или равна 250 символам, то выполняется операция вставки строки InsSt в поле sleft записи Str500.
  7. Если длина строки InsSt больше 250 символов, то выполняется операция удаления символов из поля sleft записи Str500.
  8. После выполнения всех проверок и операций изменения строки InsSt и записи Str500, результат выводится на экран.
  9. Затем в цикле выводятся длина строк sleft и sright записи Str500.
  10. В конце выполняется вызов процедуры Insert500, в которую передается строка 'ABCDEFGHIJ', переменная St и значение 245 для переменной n.
  11. Результаты выполнения этой процедуры также выводятся на экран.
  12. Завершается выполнение программы.

Оцени полезность:

13   голосов , оценка 4.308 из 5
Похожие ответы