Помощь - Поиск - Пользователи - Календарь
Полная версия: Выборка из массива!
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Дмитрий
Доброго времени суток! Мне необходимо написать программу, которая заносит в массив С элементы, которые присутствуют в нескольких экземплярах в массиве А и отсутствуют в массиве В. Никак не могу придумать нормальный алгоритм. Пока написал следующее:
Код

procedure moveit(var nc:integer; var c:arr);
var i,y,g,m,n:integer;
      flag,flag2:boolean;
begin
y:=y+1;
       for i:=1 to na do begin
            flag:=false;
            flag2:=false;
              for g:=1 to na do begin
                 if (a[i]=a[g]) and (i<>g) then
                 begin
                    while (m<=nb) and not(flag) do begin
                       if (a[i]=b[m]) then begin
                          flag:=true;
                        end;
                     m:=m+1;
                     end;
                        if flag=false then begin
                         c[y]:=a[i];
                          y:=y+1;
                           nc:=nc+1;
                        end;
                   end;
             end;
        end;
end;

na,nb,nc - длина массивов a,b,c соответственно.
a,b,c:arr; - сами массивы (type arr = array [1..20] of integer;)

Данная программа не заносит элементы в массив С =((

До этого добился что программа заносит нужные элементы, но возникла проблема что в массив С заносятся одинаковые элементы(т.к. в массиве А их несколько). По условию задачи это неприемлемо.
Правда к сожалению этот вариант выложить на данным момент не могу, т.к. он остался на дискете, которая безвременно умерла =((
klem4
элементы записываются по одному разу ?
то есть
a = (1,2,3,4,1,2);
b = (7,8,9,0,0,2);

-> c=(1)

?

+ используй поиск, такая задача уже решалась ... обманул. не здесь она решалась smile.gif)))
Дмитрий
Элементы должны записываться по одному разу, а записываются по несколько. В приведенном вами примере они запишутся 2 раза!
-Volvo-
Дмитрий, ты про это:
const
size_a = 10;
a: array[1 .. size_a] of integer =
(1, 2, 6, 5, 2, 8, 3, 8, 9, 1);

size_b = 10;
b: array[1 .. size_b] of integer =
(0, 3, 6, 8, 3, 5, 5, 7, 7, 7);

var
c: array[1 .. size_a] of integer;
ix_c: integer;

i, j, check, count: integer;
found: boolean;

begin
ix_c := 0;

for i := 1 to size_a do begin
check := a[i]; count := 1;
for j := i + 1 to size_a do
if a[j] = check then inc(count);

if count > 1 then begin

found := false;
j := 1;
while (j <= size_b) and (not found) do
if b[j] = check then found := true else inc(j);

if not found then begin
for j := 1 to ix_c do
if c[j] = check then found := true;

if not found then begin
inc(ix_c); c[ix_c] := check;
end;
end;

end;

end;

Writeln('Array C:');
for i := 1 to ix_c do
write(c[i]:4);
writeln;

end.

?
Дмитрий
Да, именно оно! Спасибо огромное!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.