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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.06.2014, 16:14   #1
sanji2010
Пользователь
 
Регистрация: 25.11.2013
Сообщений: 52
По умолчанию Изменение длины строки. Добавление строки

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 и почленно переписывал, но, так и не получилось. Кто посмотрит и хоть немного подскажет, заранее большое спасибо)
Код:
procedure ChangTheLengh(var str500:string500; var temp:temp1);
var s1,s3:string;
    c:char;
    n,n1,s,err,m,m1,m2,i,j,i1,i2,i3,i4,i5,k:integer;
begin
clrscr;
  writeln('Исходная строка');
  writeln(str500.sleft,str500.sright);
  s:=Length(str500.sleft)+length(str500.sright);
  writeln('На данный момент длина строки равна ',s);
  writeln('Для увеличения длины строки нажмите "А", для уменьшения "D", если ничего не хотите изменять нажмите дважды ENTER');
  write('(Внимание, А и D - латинские буквы) - ');
   readln(c);
  if (c='A') or (c='a') then
   begin
    writeln('Введите строку, которую необходимо добавить');
    readln(s1);
    repeat
     write('Введите номер элемента, после которого произойдёт вставка новой строки в исходную - ');
     readln(n);
     err:=IOresult;
      if err<>0 then
       writeln('Ошибка! Введите число!');
    until err=0;
    if (n+length(s1))>250 then
     begin
      for i:=1 to n do
        temp.sleft1[i]:=str500.sleft[i];
     end;
         for i1:=1 to length(s1) do
            begin
             break;
             k:=i1;
            end;
           if (n+i1)<=250 then
            temp.sleft1[n+i1]:=s1[i1];
      end;
        m:=length(s1)-k;
        m1:=1;
         for i2:=(length(s1)-m) to length(s1) do
          begin
           temp.sright1[m1]:=s1[i2];
           inc(m1);
          end;
         for i3:=1 to length(str500.sright) do
          begin
           temp.sright1[m1+i3]:=str500.sright[i3];
          end;
     str500.sleft:=temp.sleft1;
     str500.sright:=temp.sright1;
     if n+length(s1)<=250 then
     k:=n;
     for i:=1 to n do
      temp.sleft1[i]:=str500.sleft[i];
     for i2:=1 to length(s1) do
      begin
       temp.sleft1[n+1]:=s1[i2];
       inc(n);
      end;
      m:=n;
       repeat
        temp.sleft1[n+1]:=str500.sleft[k];
        inc(n);inc(k);
       until n=250;
       i4:=250-k-m;
     for i3:=1 to i4 do
      begin
       temp.sright1[i+1]:=str500.sleft[k];
       inc(k);
      end;
      m2:=0;
     for i2:=i4 to length(str500.sright) do
      begin
        temp.sright1[i2+1]:=str500.sright[m2+1];
        inc(k);
      end;
     str500.sleft:=temp.sleft1;
     str500.sright:=temp.sright1;
Skype sanji-dim
Свою благодарность можно выразить на счёт R393628098492

Последний раз редактировалось sanji2010; 23.06.2014 в 16:19.
sanji2010 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Измерение длины строки в C++ Ghost3 Помощь студентам 10 03.02.2013 09:27
Программа на языке "Ассемблер" - ввод строки, анализ длины строки, добавление точки в конец строки Алексей_2012 Помощь студентам 1 05.04.2012 11:26
вычисление длины строки fokinamasha Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 01.04.2011 22:06
измерение длины строки Agafon Общие вопросы Delphi 6 11.11.2010 15:13
Поиск длины строки beda Microsoft Office Word 5 21.06.2010 14:27