![]() |
|
|
Регистрация | << Правила форума >> | 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)
Грамотно поставленный вопрос содержит не менее 50% ответа. Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть. |
#4
|
|||
|
|||
![]() спасибо)
работает) |