![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
помогите пожалуйста с решение задачи:
Дан однонаправленный список L из элементов целого типа. Из каждой группы подряд идущих равных элементов оставить в списке только один. нашла программу для удаления всех повторяющихся элементов,немного изменила,но не работает Код:
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils;
var a:array[1..10] of integer;
n,i,j,k:integer;
begin
{ TODO -oUser -cConsole Main : Insert code here }
randomize;
write('n=');readln(n);
writeln('ishodnui massiv:');
for i:=1 to n do
begin
a[i]:=random(10);
write(a[i],' ');
end;
writeln;
i:=1;
while i<=n do
begin
j:=i+1;
while j<=n do
begin
if a[j]=a[j+1] then
begin
for k:=j to n-1 do
a[k]:=a[k+1];
n:=n-1;
end
else j:=j+1;
end;
i:=i+1;
end;
writeln('novui massiv:');
for i:=1 to n do
write(a[i],' ');
readln
end.Последний раз редактировалось 4u4undrik, 21.12.2012 в 22:05. |
|
#2
|
||||
|
||||
|
Такого рода задачи решаются просто добавлением еще одного массива. Общий алгоритм такой - в цикле крутим исходный массив. Совпадают элементы ? - если да, считаем количество совпадений. Если нет - увеличиваем счетчик для другого массива и по этому счетчику копируем не совпадающий элемент. Вот пример. Немного подлатал вашу программу - ввел проверку ввода значения размера массива. Комментарии чтобы не возникало лишних вопросов.
Код:
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
n, i, j, k : integer;
a,b : array[0..10] of integer;
begin
j := 0; // счетчик повторений
k := 0; // счетчик массива b
Randomize;
write('Enter n = ');
readln(n);
// Проверка условия введенного n
// n больше 10 или меньше 1?
if ((n < 1) or (n > 10)) then
begin
// да, предупреждаем, выходим
writeln('Error, array range must be > 0 and <= 10');
writeln('Press any key...');
readln;
Exit;
end;
writeln('ishodnui massiv:');
for i := 0 to n do
begin
a[i] := random(10);
write(a[i], ' ');
end;
writeln;
// Проверка совпадений
for i := 0 to n do
begin
{
Текущий элемент массива равен
следующему?
}
if (a[i] = a[i + 1]) then
begin
// считаем количество совпадений
k := k + 1;
// начинаем цикл заново
continue;
end
// нет совпадений?
else
// копируем a[i] в b[j]
b[j] := a[i];
// увеличиваем итератор
j := j + 1;
end;
// Результат:
writeln('Result:');
{
выводим массив от 0
до введенного n минус
количество совпадений
}
for i := 0 to n-k do
write(b[i],' ');
writeln;
write('Press any key...');
readln;
end.![]() |
| Этот пользователь сказал Спасибо orion_asm за это полезное сообщение: | ||
4u4undrik (22.12.2012)
| ||
|
#3
|
||||
|
||||
|
По-моему вы не в ту область полезли. При чем тут массивы, когда речь идет об однонаправленном списке? (Wiki)
|
|
#4
|
|||
|
|||
|
спасибо)
работает) |