1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
В общем задача заключается в том чтобы после елемента списока P1,с ключем Х,равным задаваемому значению А,вставить список P2.
Type TElem = string;
TList = ^TNode; TNode = record Info: TElem; Next: TList end; var P1,P2:TList; r:TList; A:integer;
Procedure Insert(var P1: Tlist; x : integer); begin new®; r^.info:=x; r^.next:=P1^.next; P1^.next:=r; end;
Тут я беру элемент из списка п2 и записываю его после элемента с ключем Х.В общем моя идея заключалась в том,чтобы создать процедуру,которая будет юзять insert и потихоньку выдирая из п2 по 1 элементу вставлять их каждый раз сдвигая ключ на 1,тем самым впихнуть весь список, но как это реализовать хз.
Так же есть вопрос немного в другой области.Необходимо взять из конца дека V элементов и вставить их в стек,вот тут приветствуются лбые идеи,потому что своих совсем нет((( P.s.Просьба на фак не тыкать прочитал и не один,но если есть конкретные вещи из фака ,тобуду только рад.
Ну так кто нибуть может что нить дельное по этому поводу сказать?)
Дельное? Пользуйся сам своими же советами:
Цитата(Krjuger @ 13.05.2009 12:16)
И еще процедуры должны быть говорящие,а то хрен поймеш что за апы и дауны,когщда до списков дойдеш будеш так голову вскрывать...
Напомнить, откуда?
У тебя, конечно всякие M, R и тому подобные переменные - говорящие, да? Форматировать программу тоже не мешало бы. Есть утилита PTOP (даже где-то на форуме выкладывалась), если не хочешь делать это вручную.
Procedure SeachAndInsert(P1, P2: point ; x : integer); var flag: boolean; saved: Point; begin flag:=true;
while (P1<>nil) and flag do begin { <--- Обрати внимание !!! } if P1^.number = x then begin flag := false; saved := P1^.next; end else begin P1 := P1^.next; end; end;
P1^.next:=P2; while P2^.next<> nil do P2:=P2^.next; { <-- Здесь у тебя тоже был полный бардак } P2^.next:=save; end;
Procedure Create(var p : point; var fin:text); var curr, last: point; begin reset(fin); while not seekeof(fin) do begin { А это - чтобы не засовывало лишний ноль в конец списка } new(curr); read(fin, curr^.number); curr^.next := nil;
if p = nil then p := curr else last^.next := curr;
last := curr; write(last^.number:4); end; close(fin); end;
Не проверял, Паскаля под рукой нет, но не вижу причин, чтоб не отработало...
Теперь - о том, что я выделил комментариями... У тебя было:
Цитата
while (P1<>nil) and flag=true do
Какая разница между тем, что у меня, и тем, что у тебя? А очень простая: приоритет операции AND выше, чем у операции сравнения, то есть твой код Паскаль интерпретирует так:
while ((P1<>nil) and flag)=true do ...
Хорошо ли это? Я вот не думаю, что хорошо. И надо либо проставлять скобки, чтоб компилятор понял, чего ты хочешь, либо перестать извращаться, и не делать "масло масляное". Без сравнения с true понятно, что While flag аналогично While flag = true, на то и логическая переменная.