|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Помогите пожалуйста написать рекурсивную проц-ру
Дан список целых чисел. Удалить все элементы после ноля.
|
#2
|
|||
|
|||
Код:
for i:= 0 to Length(Spisok)-1 do begin if spisok[i]=0 then begin newLength:=i; Break; end; end; SetLength(Spisok, newLength); |
#3
|
|||
|
|||
Snake22, умный, да
Список же дан Ладно, я сегодня добрый. Код:
type PItem = ^TItem; TItem = record Value : Integer; Next : PItem; End; // Вариант 1. Находим нужный элемент, после чего хвост удаляем procedure DeleteAfterZero1(AHead : PItem); var ATail : PItem; begin If AHead <> Nil Then If AHead.Value = 0 Then Begin ATail := AHead.Next; AHead.Next := Nil; // Здеся циклом, хотя можно тоже сделать рекурсию While ATail <> Nil Do Begin AHead := ATail.Next; Delete(ATail); ATail := AHead; End; End Else DeleteAfterZero1(AHead.Next); end; // Вариант 2. Находим нужный элемент, после чего хвост удаляем рекурсивно procedure DeleteAfterZero2(AHead : PItem; IsDelete : Boolean = Fasle); var ATail : PItem; begin If AHead <> Nil Then If IsDelete Then Begin ATail := AHead.Next; Delete(ATail); DeleteAfterZero2(ATail,IsDelete); End Else Begin If AHead.Value = 0 Then Begin ATail := AHead.Next; AHead.Next := Nil; DeleteAfterZero2(ATail,True); End Else DeleteAfterZero2(AHead.Next,IsDelete); End; end; |