Помощь - Поиск - Пользователи - Календарь
Полная версия: Списки и двоичное дерево
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
SeRGuSii
1. Дан двунаправленный список целых чисел, получить однонаправленный список, содержащий все элементы исходного, порядковые номера которых являются простыми числами, а значения не являются простыми.
2. Дано два однонаправленных списка целых чисел, удалить во втором списке все элементы, которые больше среднего арифметического положительных элементов первого списка и продублировать все элементы второго списка, меньше среднего арифметического четных элементов первого списка.
3. Дано двоичное дерево. Найти сумму элементов дерева больших значения разности max-min

p.s. Ребята помогите, а то уже от этих задач пухнит голова, а зачет уже не загорами sad.gif, исходники можно сделать и без описательной части в виде подпрограмм.
klem4
для начала попробуй вот это : FAQ_Списки

+ пользуйся поиском, на списки много задач решено, врядли кто-то будет делать такую задачу за тебя полностью с нуля.
volvo
Цитата(SeRGuSii @ 22.05.05 15:31)
3. Дано двоичное дерево. Найти сумму элементов дерева больших значения разности max-min

Подсказка - в двоичном дереве max - "крайнее правое" значение, min - "крайнее левое". Находишь max - min и проходом по дереву (рекурсия) суммируешь значения, удовлетворяющие условию...

Кстати, а про списки и деревья ты читал?
FAQ: Деревья
SeRGuSii
klem4, да ненужно полностью программу писать, просто функцию или процедуру опишите по конкретной задаче, все остальное элементарно делается.
volvo, насчет деревьев имею представление, правда небольшое, неудалось еще написать нормально работающию программу под них sad.gif, путаюсь я в них sad.gif
volvo
Цитата(SeRGuSii @ 22.05.05 15:31)
1. Дан двунаправленный список целых чисел, получить однонаправленный список, содержащий все элементы исходного, порядковые номера которых являются простыми числами, а значения не являются простыми.


Type
  ref=^node;
  node=record
    next:ref;
    data:integer;
  end;

tlist = record
first, last: ref;
end;

... { описание doubleref }
tdoublelist = record
  first, last: doubleref;
end;

procedure append(var list: tlist; T: integer);
var pt: ref;
begin
  new(pt);
  pt^.data := T;
  pt^.next := nil;

  if list.first = nil then list.first := pt
  else list.last^.next := pt;

  list.last := pt;
end;

procedure num_1(one: tdoublelist; var two: tlist);
var p: doubleref;
begin
  two.first := nil; two.last := nil;
  p := one.first; count := 1;
  while p <> nil do begin
    if isPrime(count) and not isPrime(p^.data) then
      append(two, p^.data);
    inc(count); p := p^.next;
  end;
end;

Реализацию isPrime можно взять здесь: FAQ: Замечательные числа
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.