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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.01.2009, 15:20   #1
RomT24
Пользователь
 
Регистрация: 10.01.2009
Сообщений: 71
Вопрос Серии в массиве, задача, помогите разобраться!

Задача:
Дано целое число К(К>0) и целочисленный масссив размера N. Преобразовать массив, удвоив длину его серии (серия - группа подряд идущих одинаковых элементов, длина серии - кол-во этих элементов, может быть равна 1) с номером К. Если серий меньше числа К, то вывести массив без изменений.

Вот такая заковыристая задача. Кто может, помогите разобраться (если выложите код, то прошу наиболее сложные места сопроводить комментарием, мне хочется именно понять механизм решения).

Заранее спасибо!

Последний раз редактировалось RomT24; 11.01.2009 в 15:22.
RomT24 вне форума Ответить с цитированием
Старый 11.01.2009, 20:32   #2
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию Задачка ) Отзыв не забудь! xD

Довольно кропотливая задачка - интересная "вестч"! Но все-таки я ее сделал - в общем тут с динамической памятью для нового массива: если что - вопросы - спрашивайте:
Код:
program mass1;
const
 KA = 2;
 N = 10;
var
 A : array [1..N] of integer;
 B : array [1..2*N] of ^integer;
 x : integer;
 k, i, dl, ser, y : byte;
 m : boolean;
begin

  Randomize;
  writeln ('Vash massiv: ');
  for i:=1 to N do
  begin
    A[i]:=random(3);
    write (A[i],'|')
  end;
  writeln;

  m:=false;
  i:=0;
  ser:=0;
  dl:=1;
  repeat
    if ser<=KA then inc(i,dl)
    else inc(i);
    dl:=1;
    k:=i;
    x:=A[i];
     while (x=A[k+1]) and (k+1<=N) do
     begin
       inc(k);
       inc(dl)
     end;
    inc(ser);
    if ser=KA then
    begin
      y:=i+2*dl-1;
      for k:=i to y do
      begin
        new(B[k]);
        B[k]^:=x
      end;
      m:=true;
      continue
    end;
    if not m then
    for k:=i to (i+dl-1) do
    begin
      new(B[k]);
      B[k]^:=x
    end;
    if m then
    begin
      inc(y);
      for k:=y to (y+dl-1) do
      begin
        new(B[k]);
        B[k]^:=x
      end
    end
  until i>=N;

  writeln ('Vash noviy massiv: ');
  if ser>=KA then
   for i:=1 to y do write (B[i]^,'|')
  else
   for i:=1 to N do write (A[i],'|');
  writeln;
  readln;

end.
capta1n вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться с задачей, уже в отчаянии (+) Ink_90 Паскаль, Turbo Pascal, PascalABC.NET 3 22.12.2008 16:42
помогите с задачей разобраться r3krut Паскаль, Turbo Pascal, PascalABC.NET 1 16.12.2007 15:43
Нужна помощь с задачей...никак не могу разобраться( Gekata Паскаль, Turbo Pascal, PascalABC.NET 4 13.12.2006 14:02