IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Задачи по спискам и деревьям
HEKTO
сообщение 23.06.2005 23:52
Сообщение #1


Гость






Товарищи, я понимаю, что с такими глупыми вопросами лезут каждый день и достают, но, пожалуйста, спасите. До утра я должен сделать вот эти 3 задачки:

1. Дан вектор B, который состоит из указателей на целые переменные. Составить подпрограмму для вычисления первого из элементов вектора B, которые указывают на отрицательные числа(NIL если такие отсутствуют).

2. В списке переставляет в обратном порядке все элементы между первым и последним вхождением элемента X, если X входит в список не менее 2 раз.

3. Используя очередь или стек написать процедуру или функцию, которая:
Присваивает параметру Е элемент листа непустого дерева Д, который является самым левым.

ЗЫ Убедительная просьба не отсылать меня в разделы по этим темам, к сожалению я не успею в этом разобраться.

Сообщение отредактировано: HEKTO - 23.06.2005 23:54
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 4)
volvo
сообщение 23.06.2005 23:57
Сообщение #2


Гость






Цитата(HEKTO @ 23.06.05 23:52)
1. Дан вектор B, который состоит из указателей на целые переменные. Составить подпрограмму для вычисления первого из элементов вектора B, которые указывают на отрицательные числа(NIL если такие отсутствуют).

function first_negative(root: plist): plist;
begin
first_negative := nil;
while root <> nil do begin
if root^.data^ < 0 then begin
first_negative := root; exit
end;
root := root^.next;
end;
end;


P.S. Во второй задаче уточни, какой список - одно или двунаправленный?
 К началу страницы 
+ Ответить 
HEKTO
сообщение 24.06.2005 0:01
Сообщение #3


Гость






Цитата(volvo @ 23.06.05 23:57)
P.S. Во второй задаче уточни, какой список - одно или двунаправленный?

Двунаправленный.
 К началу страницы 
+ Ответить 
volvo
сообщение 24.06.2005 0:23
Сообщение #4


Гость






Тогда вот так примерно (набирал прямо здесь, так что могут быть какие-то неточности, но сама идея - такая):
procedure change_between(root: plist; x: integer);
var
p, _first, _last: plist;
_i, _between, count, T: integer;
begin
p := root;
count := 0; _between := 0; _i := 0;
_first := nil; _last := nil;
while p <> nil do begin
if p^.data^ = x then begin
if _first = nil then _first := p
else begin
_last := p; _between := _i;
end;
inc(count);
end;

if _first <> nil then inc(_i);
p := p^.next;
end;
{ проверяем, есть ли по крайней мере 2 элемента,
и не находятся ли они слишком близко: }
if (count <2) or (_between <= 2) then exit;

{ "переворачиваем" элементы между _first и _last }
for _i := 1 to _between div 2 do begin
{ продвигаемся к следующим элементам для "переворачивания" ... }
_first := _first^.next; _last := _last^.prev;
{ ... и меняем эти очередные элементы местами }
T := _first^.data^; _first^.data^ := _last^.data^; _last^.data^ := T
end;
end;
 К началу страницы 
+ Ответить 
Guest
сообщение 24.06.2005 8:22
Сообщение #5


Гость






Огромнейшее спасибо.
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 19:10
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"