program ochered; uses crt; type PtrNode=^Node; Node=record; Info: Integer; Next: PetrNode; end;
procedure prn_q(G: PtrNode); var t: PtrNode; begin t: G; while t<>Nil do begin write(t^.Info:5); t:=t^.Next; end; writeln; end;
var Q,P: PtrNode; HQ,HP: PtrNode; Tek: PtrNode; n1, n2, i: Integer; begin clrscr; Q:=Nil; HQ:=Nil; repeat write('vvedite kol-vo elementov v ocheredi Q: '); readln(n1); until n1>0; i:=0; while i<n1 do begin New(Tek); Tek^.Info:=random(100); Tek^.Next:=Nil; if Q=Nil then begin Q:=Tek; HQ:=Tek; end else begin HQ^.Next:=Tek; HQ:=Tek; end; i:=i+1; end; writeln('sozdana ochered Q: '); prn_q(Q);
P:=Nil; HP:=Nil; repeat write('vvedite kol-vo elementov v ocheredi P(ne menshe 4): '); readln(n2); until n2>=4; i:=0; while i<n2 do begin New(Tek); Tek^.Info:=random(100); Tek^.Next:=Nil; if P=Nil then begin P:=Tek; HP:=Tek; end else begin HP^.Next:=Tek; HP:=Tek; end; i:=i+1; end; writeln(sozdana ochered P: '); prn_q(P);
for i:=1 to 3 do begin Tek:=P; HQ^.Next:=Tek; HQ:=Tek; P:=P^.Next; HQ^.Next:=Nil; end; writeln('ochered P posle udalenia is nee 3 elementov: '); prn_q(P); writeln('ochered Q posle dobavlenia v nee 3 elementov: '); prn_q(Q); readln; end.
Krjuger
25.05.2009 17:09
Слушай,если чесно оно у тебя вообще компилируется?
Код
t: G;
особенно после begin'a в процедуре печати очереди,меня лично как то настараживает.А еще посмотри по сути у тебя идет создание очереди Q и P практически идентичны,я думаю лучше создать одну процедуру.И напиши,что именно тебе не понятно,потому что каждую строчку коментировать врятли кто будет.
rs-mms
26.05.2009 19:40
Все работает! И препод видел, сказал, нормально, только мне нужно будет в пятницу объяснить как и что тут работает. Мне непонятно как работают указатели, программу писала по кусочкам, по образцам, поэтому и непонятно что и как.
Добавлено через 6 мин. пишу, что как понимаю, исправьте, если не права type PtrNode=^Node; Node=record; Info: Integer; Next: PetrNode; end; здесь Node это запись с двумя полями
procedure prn_q(G: PtrNode); var t: PtrNode; begin t: G; while t<>Nil do begin write(t^.Info:5); t:=t^.Next; end; writeln; end;
процедура наверное выводит очередь на экран, а вот как она это делает... дальше идет создание очереди одной, потом второй, вывод их на экран при помощи процедуры. а как именно происходит создание очереди? New - это новый элемент, с циклом тоже понятно, а вот что на что указывает - непонятно)) ну и последний кусок, который с цикла начинается, это наверное собственно добавление и удаление элементов, опять же как это происходит непонятно...
volvo
26.05.2009 19:55
Цитата
Все работает!
Скриншот посмотреть, на котором будет видно, что программа откомпилировалась, и при этом видно четвертую или 12-ю строки исходника, можно? Потому что: Нажмите для просмотра прикрепленного файла
Как программа, не прошедшая компиляцию, может выполняться - это на форум писателей фантастов... Здесь - программисты.
Krjuger
26.05.2009 19:59
Ну представь что у тебя есть такая полоска разбитая на несколько кусочков,в кадом кусочке у тебя что то запсано.ты береш читаеш из кусочка и переходиш к следующему.
procedure prn_q(G: PtrNode); var t: PtrNode; begin t: =G;{мне все таки кажется "=" долно быть,мож я и ошибаюсь} while t<>Nil do{до тех пор пока ты не наткнешся на отсутствие кусочка ты делаеш следующее} begin write(t^.Info:5);{выводиш на экран текущий кусочек} t:=t^.Next;{передвигается к следующему кусочку} end; writeln; end;
Насчет того как ты очередь создаеш я не очень понимаю твой алфавит.
volvo,ну не реагирай ты так язвительно,тебя бояться будут)))) Кстати она скинула лиш кусок кода, поэтому и не компилируетя,весь код в первом посте,так что тут ты немного не прав.
З.Ы а забавная в твоем паскале подсветочка.
volvo
26.05.2009 20:24
Для слепых - я скопировал код из первого поста целиком... Дальше флеймить будешь? Я бы поостерегся на твоем месте... И, это, я как-нибудь сам разберусь, как мне реагировать, язвительно или еще как...
(сообщение на автоудалении, ссылаться на него не надо...)
Krjuger
26.05.2009 20:25
Я бы на твоем месте сделал бы как нить так.
type TElem = Integer; TList = ^Telement; TElement = record{Volvo говорит что после рекорда ничего стоять не должно, и это действительно так,так что видно,что программа сдается скорее на листочке,чем компьютере} INFO:TElem; NEXT : TList end; TQueue = record head:TList; tail:TList; end; var Q,P:Tlist;
Function QueueEmpty(Q:TQueue):boolean;{проверяет пуста ли наша очередь} begin QueueEmpty:=(Q.HEAD=nil) end;
Procedure OueuePush(var q:TQueue;E:TElem);{добавляет элемент в очередь} var temp:Tlist; begin new(temp); temp^.info:=random(100); temp^.next:=nil; If QueueEmpty(q) then q.head:=z else q.tail^.next:=z;
q.tail:=z end;
Procedure CreateOueue(var q:TQueue;n:integer);{содаем всю очередь} var i,e:integer; begin i:=0; while i<=n do begin e:=random(100); OueuePush(q,e); i:=i+1; end; end; {тогда код твоей главное программы будет выглядеть так}
clrscr; repeat write('vvedite kol-vo elementov v ocheredi Q: '); readln(n1); until n1>0; CreateOueue(Q,n1); writeln('sozdana ochered Q: '); prn_q(Q); repeat write('vvedite kol-vo elementov v ocheredi P(ne menshe 4): '); readln(n2); until n2>=4; CreateOueue(P,n2); ................. .................
кстати потом,когда ты будеш добавлять в очередь Q элементы ты можеш воспользоваться процедурой OueuePush,кстати,если что Volvo поправит,но я не помню надо ли обьявлять "е" глобально.
Volvo,извини,но посмотри на свой скрин,я лично по нему могу увидеть лиш ее третий пост,а что ниже скопировано,сори не вижу.Наверно я реально слепой......
rs-mms
27.05.2009 1:27
Цитата(volvo @ 26.05.2009 16:55)
Скриншот посмотреть, на котором будет видно, что программа откомпилировалась, и при этом видно четвертую или 12-ю строки исходника, можно? Потому что: Нажмите для просмотра прикрепленного файла
Как программа, не прошедшая компиляцию, может выполняться - это на форум писателей фантастов... Здесь - программисты.
нуу...всего лишь не поставила второпях знак. конечно же он присутствует и все работает.
Добавлено через 2 мин. так что видно,что программа сдается скорее на листочке,чем компьютере}
программа сдается в виде файла pas
Добавлено через 10 мин. Вы конечно очень добры и терпеливы, спасибо за новый код, но, препод уже видел первоначальный вариант и исправлять не буду - это будет подозрительно непохоже на работу первокурсника, будет видно что работали профессионалы! Мне еще нужно блок-схему к этой очереди, я конечно понимаю, что сначала составляется алгоритм, а потом уже пишется код, но у меня вот так не получается. А блок-схему не могу составить, пока не пойму "как это работает"))
ну вот хотя бы про эти строчки(добавление и удаление элемента) - что на что указывает и в каком месте добавляется а в каком удаляется?
for i:=1 to 3 do begin Tek:=P; HQ^.Next:=Tek; HQ:=Tek; P:=P^.Next; HQ^.Next:=Nil; end;
Krjuger
27.05.2009 2:05
Ну как тебе сказать,я не профессионал и мне до него далеко,я такой же первокурсник,просто профиль прикладная математика и информатика
for i:=1 to 3 do{тут цикл,ты же передать 3 элемента хочеш} begin Tek:=P;{записываеш эkемент второй очереди во временную переменную} HQ^.Next:=Tek; HQ:=Tek; P:=P^.Next;{сдвигаешся к следующему элементу в очереди} HQ^.Next:=Nil;{показываеш,что следующего элемента не существует,чтобы на следующем витке цикла написать в эту "ячейку"} end;
Насчет HQ я не совсем уверен,это имеется в виду HeadQ?тобиш начало очереди?
amega
27.05.2009 2:15
Цитата
Мне непонятно как работают указатели
при выполнение(запуске программы) память распределятся так: на код, локальние переменые, "куча" (динамическая память) Нажмите для просмотра прикрепленного файла дак вот допустим ми обявили переменную А типа масив о 1 до 5 типа интежер , при компиляции в то место де локальние переменные занеслась А (5*4 байт). Все прекрасно мы работаем с этим масивом но вдруг к нам нужно 6 значений, каждый раз не побижим к програмисту чобы менял диапазон масива, для этого используется динамическая память. Указатель - это переменная которая содержит адрес ячейки памяти в динамической памяти. дак вот когда мы делаем New() мы просим менеджер кучи чтоб он нашол нам место в "кучи" для хранения, нашолши место она записывает адрес где хранится инф. Нажмите для просмотра прикрепленного файла для того чтоб добратся до информации хранящийся мы используем ^
Цитата
- это будет подозрительно непохоже на работу первокурсника, будет видно что работали профессионалы!
а при чем здесь первый курс, я тож щс на первом курси и что мне теперь не делать тежолые задачи по томучто на первом курсе неповерят??
Цитата
"как это работает"
а как очередь в магазине работает, также и здесь только здесь переменные
Krjuger
27.05.2009 2:21
Цитата
а как очередь в магазине работает, также и здесь только здесь переменные
чтоб ты вреш и не краснееш!!!!.В магазине, из начала удаляют а в хвост добавляют,а в очереди не так,это уже дек получается
amega
27.05.2009 2:27
Очередь - упорядоченный набор элеменотов, которые могут удалятся с одного ее конца ( начало очереди) и помещатся в другой конец (конец очереди). очередь обеспечивают диссциплину обслуживания "первый пришол первый ушол".
Krjuger
27.05.2009 2:35
Ладно не понял ты шутки)))Разьяснять не буду,тупо получиться.В общем про очередь амега правильно говорит)))Только не в магазине.
amega
27.05.2009 2:39
Цитата
Разьяснять не буду,тупо получиться.
ну а ты постарайся чтоб умно получилось
Lapp
27.05.2009 7:06
Цитата(Krjuger @ 26.05.2009 23:21)
чтоб ты вреш и не краснееш!!!!
Вот это ты называешь шуткой? Я бы извинился на твоем месте..
Krjuger
27.05.2009 19:23
А я извинился,в привате,потому что это уже флуд,который никак не относится к теме,хотя создатель топа явно уже забил на эту тему.........
rs-mms
27.05.2009 20:43
ничего я не "забила"! еще пытаюсь разобраться до сих пор....
Krjuger
27.05.2009 21:35
Господи....Короче береш листочек и ресуеш паровозик.В кадом вагоне сидит какая то информация(число ,буква,слово не важно),и у каждого вагончика есть ссылка на следующий вагончик.Суть очереди в чем,ты с начала твоего поезда можеш отсоединять вагоны и к концу поезда можеш присоединять ваготы.при это когда ты отсоединяеш вагон,ты разрываеш связ между отсоединяемым и следующим за ним,а когда добакляеш в конец,то ты добавляемому элементу должна показать,что бывший последний вагон стоит перед ним.Блин я уж хз как по другому обяснить.
rs-mms
28.05.2009 1:17
Ладно, больше не пристаю. Про вагончики понятно, спасибо большое)) Теорию читала, принцип понятен. Я имела в виду, что непонятно в самом коде, путаница с переменными, которые показывают одна на другую. Вот говорите, что каждую строчку комментировать никто не будет, а вышло бы быстрее и мне понятнее. Ну уже ладно, все сдала, в пятницу расскажу уж про вагончики!
Krjuger
28.05.2009 1:20
Да не в этом дело,просто конкретно обознач,за что отвечает каждая переменная.из того куска,что ты скидывала,я лиш 2 строчки не откоментировал.
rs-mms
30.05.2009 2:48
Поздравляю господа! Вашими стараниями я получила пятерку!
Krjuger
30.05.2009 3:41
Что вариант с паровозиком или очередь в магазине помогли?))))Делись пятеркой,она лишней не бывает.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.