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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2013, 21:35   #1
PavelDD
Пользователь
 
Регистрация: 15.02.2013
Сообщений: 35
По умолчанию Двойное уплотнение одномерного массива

Задание: надо удалить только третий повторяющийся элемент:
[1;2;2;3;3;3;4;5;5;5;5] --> [1;2;2;3;3;4;5;5;x;x;x], где х-мусор.
Обращаюсь с просьбой помочь.
Не получается перенести одинаковые элементы, превращенные в мусор, в конец массива.
Код:
uses crt;
const m=6;
var
    arr: array[0..1000] of integer;
    i, j, k, l: integer;
begin
    randomize;
    for i := 1 to m do begin
        arr[i] := random(4)+4;
        write (arr[i]:4);
    end;
    {сортировка}
    writeln; writeln;
    for i := 1 to m-1 do
        for j := 1 to m-i do
            if arr[j] > arr[j+1] then begin
                k := arr[j];
                arr[j] := arr[j+1];
                arr[j+1] := k;
            end;
    writeln;
    write('Отсортированный массив: ');
    writeln;
    for i := 1 to m do
        write (arr[i]:4);
   {уплотнение, которое удаляет только 3 повторяющийся элемент}
    writeln;
    writeln('После уплотнения:  ');
    for i:= 1 to m-1 do
     for j:= 1 to m-i do begin
       if (arr[j]=arr[j+2]) and (arr[j+2]=arr[m]) then
          arr[m]:=0;
       if arr[j]=arr[j+2]  then begin
          arr[j+2]:=0;
          j:=j+2;
       end;

     end;


    //здесь надо вставить перемещение



   for i:=1 to m do
     write(arr[i]:4);
   readln;
end.
PavelDD вне форума Ответить с цитированием
Старый 15.02.2013, 22:55   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Вроде работает
Код:
const
  m = 6;

var
  arr: array [1 .. m] of integer;
  i, j, k: integer;

begin
  { заполнение }
  randomize;
  for i := 1 to m do
  begin
    arr[i] := random(4) + 4;
    write(arr[i]:4);
  end;
  writeln;
  { сортировка }
  for i := 1 to m - 1 do
    for j := i + 1 to m do
      if arr[i] > arr[j] then
      begin
        k := arr[j];
        arr[j] := arr[i];
        arr[i] := k;
      end;
  writeln('Отсортированный массив: ');
  for i := 1 to m do
    write(arr[i]:4);
  writeln;
  { уплотнение, которое удаляет только 3 повторяющийся элемент }
  writeln('После уплотнения:  ');
  j := 1;
  k := 1;
  for i := 2 to m do
  begin
    if arr[i - 1] <> arr[i] then
      k := 1
    else
      inc(k);
    inc(j, ord(k < 3));
    arr[j] := arr[i];
  end;
  inc(j);
  for j := j to m do
    arr[j] := 0;
  for i := 1 to m do
    write(arr[i]:4);
  readln;
end.
Изменил сортировку (написал ту, которую лучше знаю).

Судя по Вашему примеру, нужно сделать так, чтобы каждый элемент встречается не более 2 раз.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 15.02.2013, 23:05   #3
PavelDD
Пользователь
 
Регистрация: 15.02.2013
Сообщений: 35
По умолчанию

inc(j, ord(k < 3));
Выдает ошибку: "функция ORD с параметрами указанных типов не найдена"
PavelDD вне форума Ответить с цитированием
Старый 15.02.2013, 23:18   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Тогда вместо этой строки напишите if k < 3 then inc(j);.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 15.02.2013, 23:20   #5
PavelDD
Пользователь
 
Регистрация: 15.02.2013
Сообщений: 35
По умолчанию

Все работает. Большое спасибо.

Последний раз редактировалось PavelDD; 16.02.2013 в 00:17.
PavelDD вне форума Ответить с цитированием
Старый 16.02.2013, 00:19   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Пожалуйста. А по тому вопросу нужно думать - не могу ничего посоветовать так сразу.
Если Вам еще требуется ответ на него, то зря удалили
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 16.02.2013, 01:35   #7
PavelDD
Пользователь
 
Регистрация: 15.02.2013
Сообщений: 35
По умолчанию

Вопрос открыт.
" Уплотнение, совмещенное с сортировкой. Это нужно модифицировать простые вставки." С чего начать?
Заранее благодарю.

Последний раз редактировалось PavelDD; 16.02.2013 в 01:46.
PavelDD вне форума Ответить с цитированием
Старый 16.02.2013, 02:41   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Вроде работает
Код:
const
  m = 6;

var
  arr: array [1 .. m] of integer;
  i, j, z, k: integer;

begin
  { заполнение }
  randomize;
  for i := 1 to m do
  begin
    arr[i] := random(4) + 4;
    write(arr[i]:4);
  end;
  writeln;
  { сортировка и уплотнение }
  for i := 1 to m do
  begin
    k := arr[i];
    z := i - 1;
    while (z > 0) and (arr[z] > k) do
      dec(z);
    if (z > 1) and (arr[z] = k) and (arr[z - 1] = k) then
      arr[i] := 999
    else
    begin
      for j := i - 1 downto z do
        arr[j + 1] := arr[j];
      arr[z + 1] := k;
    end;
  end;
  for i := 1 to m do
    write(arr[i]:4);
  readln;
end.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 16.02.2013, 14:25   #9
PavelDD
Пользователь
 
Регистрация: 15.02.2013
Сообщений: 35
По умолчанию

Большое спасибо.Все работает.
PavelDD вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка одномерного массива. С McFrey Помощь студентам 4 01.05.2012 13:38
Как обнулить элементы строки двумерного массива, содержащей наибольшее количество элементов одномерного массива griignat Помощь студентам 1 22.11.2011 20:04
!Модификация одномерного массива! Dmitry73 Помощь студентам 1 01.12.2010 23:33
Формирование одномерного массива Kcu Помощь студентам 22 24.10.2010 17:28
уплотнение массива KatrinX60 Общие вопросы C/C++ 3 16.03.2010 21:53