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

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

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

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


Гость






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

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

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

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

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

Сообщение отредактировано: HEKTO -
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 4)
сообщение
Сообщение #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. Во второй задаче уточни, какой список - одно или двунаправленный?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






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

Двунаправленный.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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;
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






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

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

 





- Текстовая версия 11.09.2025 20:53
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name