Даны две упорядоченные по неубыванию целочисленные последовательности, получить упорядоченную по невозрастанию последовательность, состоящую из членов первой последовательности, которых нет во второй.
Вот мой код программы, подскажите где ошибка и как её можно исправить. Сама программа работает, но не со всеми тестовыми данными, а именно когда один массив больше другого. Например: при вводе массивов
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;
Если твой паскаль позволяет работать со множествами чисел, лучше сделать через множества.
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;
Если твой паскаль позволяет работать со множествами чисел, лучше сделать через множества.
Александр Синюков
Хорошо, спасибо)
Александр Синюков
А то, что цикл идёт назад это позволяет мне за один шаг получить упорядоченную по невозрастанию последовательность
не вникал, можно гораздо проще, но чуть подправил твою и работает
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.
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
goo. gl/TVqyiH
Похожие вопросы
- Мне нужна помощь в программировании
- Нужна помощь по программированию. Язык с++
- Нужна помощь по языку программирования PROLOG
- нужна помощь профи в программировании,и просто в ПК
- Нужна кому-нибудь помощь с программированием?
- Нужен наставник в программировании
- Нужна помощь в решении задачи по языку программирования С++!!срочно!
- Программирование, нужна помощь срочно, не за бесплатно
- НУЖНА ПОМОЩЬ!!!!«Основы алгоритмизации и программирования»..СПАСИБО ОГРОМНОЕ.
- Хочу создать свой язык программирования. Нужна помощь по синтаксису