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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.03.2016, 16:17   #1
arainne
Новичок
Джуниор
 
Регистрация: 16.03.2016
Сообщений: 1
Вопрос Удалить из массива элементы, входящие в другой массив (Pascal)

Здравствуйте. Мне нужно написать программу, которая удаляет из массива элементы, входящие в другой массив. Моя процедура ВРОДЕ БЫ работает, но не удаляет те элементы-дубли, которые в исходном массиве встречаются больше одного раза (возможно, есть еще проблемы). Помогите, пожалуйста, устранить ошибку. Массивы одного размера.

Код:
procedure delete(var a: tar; k: word); //удаление из массива элемента с номером k
var
     i: integer;
begin
     for i := k to num - 1 do
          a[i] := a[i + 1];
end;
Код:
procedure substraction(a, b: tar); //вычитание из массива другого массива
var
     i, j, k, n: word;
     chk: boolean;
begin
     k := 0;
     i := 0;
     n := num; //num - кол-во эл-тов в массивах
     while (i <= n) do
     begin
          j := 0;
          chk := true; //проверка на дубль
          while (chk) and (j <= num) do
          begin
               if a[i] = b[j] then
               begin
                    delete(a, i); //удаляем дубль
                    inc(k); //счетчик кол-ва найденных дублей
                    dec(n); //уменьшаем кол-во эл-тов в массиве
                    chk := false; //выход из цикла поиска дублей
               end
               else inc(j); //не найдено - переход к следующему эл-ту
          end;
          inc(i);
     end;
     
     for i := 0 to num - k do write(a[i]:4);
end;

Последний раз редактировалось arainne; 16.03.2016 в 16:20.
arainne вне форума Ответить с цитированием
Старый 20.03.2016, 10:26   #2
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Код:
const num=10;
type tar=array[0..num-1] of integer;

procedure delete(var a: tar; k: word);
var      i: integer;
begin
     for i := k to num - 2 do
          a[i] := a[i + 1];
end;

procedure substraction(a, b: tar);
var  i, j, k, n: word;
     chk: boolean;
begin
     n := num-1;
     For i:=num-1 downto 0 do
        For j:=num-1 downto 0 do
        begin
               if a[i] = b[j] then
               begin
                    delete(a, i);
                    dec(n);
               end;
        end;
     
     for i := 0 to n do
        write(a[i]:4);
end;

var a,b:tar;
    i:integer;
begin
   Randomize;
   For i:=0 to num-1 do
   begin
      a[i]:=Random(21);
      Write(a[i]:3,'  ');
   end;
   Writeln;
   Writeln;
   For i:=0 to num-1 do
   begin
      b[i]:=Random(21);
      Write(b[i]:3,'  ');
   end;
   Writeln;
   Writeln;
   substraction(a,b);
   Readln;
end.
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массив на C# (удалить элементы из массива, добавить элементы в массив) NetFantazii Помощь студентам 0 20.10.2013 12:22
Переписать элементы массива в другой массив (вставка ассемблера) на СИ Pras Помощь студентам 0 18.06.2013 20:50
Сформировать новый массив, содержащий повторяющиеся элементы массива A. Элементы в новом массиве не повторяются(Pascal) mad_putin Помощь студентам 0 13.12.2012 00:09
Удалить из массива все элементы, последняя цифра которых нечетная и сжать массив Proskurina Помощь студентам 4 21.09.2012 23:02
Задачка про массив - Из массива удалить четные элементы, стоящие после максимального Crookers Общие вопросы C/C++ 4 23.09.2008 19:35