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

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

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

> Задача на двумерный список
habi
сообщение 12.05.2008 19:51
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 44
Пол: Мужской
Реальное имя: Артём

Репутация: -  0  +


Задача. используя динамические списки, найти в массиве последнию группу положительных элементов, и удалить её.
Проблема: не могу установить указатели конца(вроде установил) и начала последней группы положительных элементов.
Если есть другие предложения по алгоритму, просьба высказать.
Вот набросал за сегодня :

program labа;
uses
crt;
type
ukaz=^mas;
mas=record
chisl:integer;
next:ukaz;
pred:ukaz;
end;
Var
first, tek, tmp, last,listkon,listnach: ukaz;
i,j,n,nach,konec,temp:integer;
{----------------------------------------------------------------------------}
procedure CreateSpisok(n:integer);
Begin
write('Vvedite koli4estvo 4isel massiva->');
readln(n);
new(first);
first^.pred:=nil;
first^.chisl:=random(200)-50;
tek:=first;
for i:=1 to n do
begin
new(tek^.next);
tek^.next^.chisl:=random(200)-50;
tek^.next^.pred:=tek;
write(tek^.chisl:5);
tek:=tek^.next;
end;
tek^.next:=nil;
writeln;
end;
{----------------------------------------------------------------------------}
Function SearchLastPolGroup: ukaz;
var
Pol:ukaz;
begin
Pol:=first;
while (pol^.chisl<=0) and (pol^.next<>nil) do
pol:=pol^.next;
if pol^.chisl>0 then
SearchLastPolGroup:=pol
else
SearchLastPolGroup:=nil;
end;
{----------------------------------------------------------------------------}
Procedure DisposeRec;
var
temp:ukaz;
begin
tek:=first;
repeat
temp:=tek^.next;
tek:=temp;
until tek=nil;

end;
{----------------------------------------------------------------------------}
BEGIN
randomize;
clrscr;
writeln;
writeln('Programma formiruet dinamy spisok, i perenosit ponextniy gruppu pol elementov');
writeln('v nachalo spiske dinam, i zamenaet ego nylami, gruppa eto elementi > 2 shtuk'); writeln;
textcolor(red);
writeln('Svobodnaja pamjat do nachala ',memavail,' kb');
writeln;
CreateSpisok(n);
tek:=first;
i:=1;
while tek^.next<>nil do
begin
if tek^.chisl>0 then
begin
temp:=temp+1;
if temp>=2 then
begin
nach:=i-temp+1;
konec:=i;
listkon:=tek;
end;
end
else
temp:=0;
tek:=tek^.next;
i:=i+1;
end;
{----------------------------------------------------------------------------}
textcolor(blue);
writeln;
writeln('nachalo last pol. group-->',nach:3,' konecec last pol.group-->', konec:3);
writeln('idet perestanovka i obnulenie last pol. group, najmite Enter');
readln;
tek:=first;

for i:=1 to konec-1 do
tek:=tek^.next;
dispose(tek);
for i:=konec downto nach do
begin
temp:=tek^.chisl;
tmp:=tek;
for j:=konec-1 downto 1 do
begin
tmp^.chisl:=tmp^.pred^.chisl;
tmp:=tmp^.pred;
end;
first^.chisl:=temp;
end;
{----------------------------------------------------------------------------}

listnach:=first;tek:=listnach;
repeat
tmp:=tek^.next;
dispose(tek);
tek:=tmp;
until tek=listkon;
{----------}
writeln;
textcolor(lightblue);
tek:=first;
if SearchLastPolGroup<>nil then
while tek^.next<>nil do
begin
write(tek^.chisl:5);
tek:=tek^.next;
end
else
writeln('pol. grup elementov net');
writeln;
writeln;
writeln('Svobodnaja pamjat v processe ',memavail,' kb');
readln;
DisposeRec;
textcolor(green);
writeln;
writeln('Svobodnaja pamjat posle o4ustku ',memavail,' kb');
readln;
end.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 12.05.2008 20:31
Сообщение #2


Гость






Чтоб найти последний положительный элемент (ведь именно он будет являться концом последней группы, правда?) достаточно пробежать от конца списка назад до тех пор, пока не встретишь положительный элемент или NIL (если NIL - значит выходим из программы, положительных элементов нет)...

А чтоб найти начало этой же группы - от только что найденного указателя (если он ненулевой) - опять же назад, пока элементы положительны (если в результате получишь NIL, значит, начинать удаление с самого начала)... Вот и все...
 К началу страницы 
+ Ответить 

Сообщений в этой теме
habi   Задача на двумерный список   12.05.2008 19:51
volvo   Чтоб найти последний положительный элемент (ведь и...   12.05.2008 20:31
habi   Вопрос решён, пришлось ввести ещё пару указателей,...   13.05.2008 23:10
volvo   :no1: Если задача только в том, что написано в пе...   13.05.2008 23:33
habi   Нашёлся баг Если список состоит из элементов типа...   18.05.2008 12:17
volvo   Значит, смотри, вот твое задание, но без украшател...   18.05.2008 14:04
habi   Спасибо.Разберусь, но если рюшечки это вывод значе...   18.05.2008 14:14
habi   Не смог разобраться, как сделать проверку на кол-в...   18.05.2008 16:44
volvo   Ну вот расскажи мне, я тебе код привел для чего? Д...   18.05.2008 17:18
habi   Спасибо за разъяснение по показателям. Я разобралс...   18.05.2008 17:30
habi   Всё-таки я не могу в этом коде выделить группу. В...   18.05.2008 20:28
habi   Только сейчас заметил мелкий баг =( Программа уда...   20.05.2008 16:58
volvo   А сейчас я сделаю нечто такое, чего от меня вряд л...   20.05.2008 17:29
habi   Спасибо, ты правильно понял мысль. Но наш препод п...   20.05.2008 17:35
volvo   Ну, тогда извращайся другими методами... Я ж не пр...   20.05.2008 17:39
habi   Согласен с тобой, но наш преподователь категоричес...   20.05.2008 17:42
volvo   Извращенец... Держи: var start, finish: ukaz; ...   20.05.2008 17:53
habi   Что в версии с лейблами, что с ввайлами....то имее...   20.05.2008 20:14
volvo   Ну, блин... Присвой изначально Count := 1, а не 0....   20.05.2008 20:23
habi   ух как всё просто) а я отлаживал + два условия нап...   20.05.2008 20:32


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

 



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