Другие языки программирования и технологии

Нужна помощь по программированию. Даны две упорядоченные по неубыванию целочисленные последовательности, получить...

Даны две упорядоченные по неубыванию целочисленные последовательности, получить упорядоченную по невозрастанию последовательность, состоящую из членов первой последовательности, которых нет во второй.
Вот мой код программы, подскажите где ошибка и как её можно исправить. Сама программа работает, но не со всеми тестовыми данными, а именно когда один массив больше другого. Например: при вводе массивов

N = 5; [2,4,6,8,9,10]
P = 3; [5,6,9,10]

C этими данными выходит за пределы массива, может мне надо перестроить алгоритм? Если да, то подскажите как лучше это можно сделать.
___________________________________________________________________________________________

Program PRIV_(A);
Const
N = 5;
P = 5;
Type Mas_Onww = array [0..N] of integer;
Mas_Twww = array [0..P] of integer;
{_______________________________________________________________________________
}
Var
mas1:Mas_Onww;
mas2:Mas_Twww;
i,j:integer;
x,r,s,k:integer;
{_______________________________________________________________________________
}
Begin

write('Введите первый массив размером 6: ');
For i := 0 to N do
Read(mas1[i]);

write('Введите второй массив размером 6: ');
For J:= 0 to N do
Read(mas2[J]);
{_______________________________________________________________________________
}
k := N;
r := P;
s := 0;
x := 0;
{_______________________________________________________________________________
}
write('Ответ: [');
{_______________________________________________________________________________
}
repeat
begin
If mas1[r] = mas2[k] then
r := r - 1;
If mas1[r] > mas2[k] then
write(mas1[r]:3);
If mas1[r] <= mas2[k] then
k := k - 1
else
r := r - 1;
end;
until (k < 0) or (r < 0);
Begin
for i := r downto 0 do
write(mas1[i]:3);
end;
{_______________________________________________________________________________
}
write(' ]');
writeln('');
{_______________________________________________________________________________}
End.
repeat
begin

Зачем О_о? Не, оно не мешает, но зачем?

И еще у тебя почему-то цикл идет назад - принципиальной разницы тут нет, но зачем?

Алготитм должен быть примерно таким:
j:=1;
for i:=1 to n do begin
bFound:=False;
while (j<=m) and (a2[j]<=a1[i]) do
if a2[j]=a1[i] then
bFound:=True;
inc(j);
end;
if not bFound then
Writeln(a[i]);
end;

Если твой паскаль позволяет работать со множествами чисел, лучше сделать через множества.
Aртур Арнольд
Aртур Арнольд
53 019
Лучший ответ
Александр Синюков Хорошо, спасибо)
Александр Синюков А то, что цикл идёт назад это позволяет мне за один шаг получить упорядоченную по невозрастанию последовательность
не вникал, можно гораздо проще, но чуть подправил твою и работает
uses crt;
Const
N = 5;
P = 4;
Type Mas_Onww = array [0..100] of integer;
Mas_Twww = array [0..100] of integer;
{_______________________________________________________________________________
}
Var
mas1:Mas_Onww;
mas2:Mas_Twww;
i,j:integer;
x,r,s,k:integer;
{_______________________________________________________________________________
}
Begin

write('Ââåäèòå ïåðâûé ìàññèâ ðàçìåðîì N: ');
For i := 0 to N do
Read(mas1[i]);

write('Ââåäèòå âòîðîé ìàññèâ ðàçìåðîì P: ');
For J:= 0 to P do
Read(mas2[J]);
{_______________________________________________________________________________
}
k := N;
r := P;
s := 0;
x := 0;
{_______________________________________________________________________________
}
write('Îòâåò: [');
{_______________________________________________________________________________
}
repeat
begin
If mas1[r] = mas2[k] then
r := r - 1;
If mas1[r] > mas2[k] then
write(mas1[r]:3);
If mas1[r] <= mas2[k] then
k := k - 1
else
r := r - 1;
end;
until (k < 0) or (r < 0);
Begin
for i := r downto 0 do
write(mas1[i]:3);
end;
{_______________________________________________________________________________
}
write(' ]');
writeln('');
{_______________________________________________________________________________}
End.
Александр Синюков Нет, она выводит все члены последовательности в первом массиве, то есть не соответствует заданию, но всё равно спасибо)
Готовое решение

goo. gl/TVqyiH