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

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

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

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Программа с очередью, Нужны комментарии(подробные)
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 11
Пол: Женский

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


Код

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


Профи
****

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

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


Слушай,если чесно оно у тебя вообще компилируется?
Код
t: G;

особенно после begin'a в процедуре печати очереди,меня лично как то настараживает.А еще посмотри по сути у тебя идет создание очереди Q и P практически идентичны,я думаю лучше создать одну процедуру.И напиши,что именно тебе не понятно,потому что каждую строчку коментировать врятли кто будет.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 11
Пол: Женский

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


Все работает! И препод видел, сказал, нормально, только мне нужно будет в пятницу объяснить как и что тут работает. Мне непонятно как работают указатели, программу писала по кусочкам, по образцам, поэтому и непонятно что и как.

Добавлено через 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 - это новый элемент, с циклом тоже понятно, а вот что на что указывает - непонятно))
ну и последний кусок, который с цикла начинается, это наверное собственно добавление и удаление элементов, опять же как это происходит непонятно...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
Все работает!
Скриншот посмотреть, на котором будет видно, что программа откомпилировалась, и при этом видно четвертую или 12-ю строки исходника, можно? Потому что:
Прикрепленное изображение

Как программа, не прошедшая компиляцию, может выполняться - это на форум писателей фантастов... Здесь - программисты.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Профи
****

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

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


Ну представь что у тебя есть такая полоска разбитая на несколько кусочков,в кадом кусочке у тебя что то запсано.ты береш читаеш из кусочка и переходиш к следующему.

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,ну не реагирай ты так язвительно,тебя бояться будут))))
Кстати она скинула лиш кусок кода, поэтому и не компилируетя,весь код в первом посте,так что тут ты немного не прав.

З.Ы а забавная в твоем паскале подсветочка.

Сообщение отредактировано: Krjuger -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Для слепых - я скопировал код из первого поста целиком... Дальше флеймить будешь? Я бы поостерегся на твоем месте... И, это, я как-нибудь сам разберусь, как мне реагировать, язвительно или еще как...

(сообщение на автоудалении, ссылаться на него не надо...)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Профи
****

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

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


Я бы на твоем месте сделал бы как нить так.

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,извини,но посмотри на свой скрин,я лично по нему могу увидеть лиш ее третий пост,а что ниже скопировано,сори не вижу.Наверно я реально слепой......

Сообщение отредактировано: Krjuger -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 11
Пол: Женский

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


Цитата(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;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Профи
****

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

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


Ну как тебе сказать,я не профессионал и мне до него далеко,я такой же первокурсник,просто профиль прикладная математика и информатика smile.gif

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?тобиш начало очереди?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


?
***

Группа: Пользователи
Сообщений: 283
Пол: Мужской

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


Цитата
Мне непонятно как работают указатели


при выполнение(запуске программы) память распределятся так: на код, локальние переменые, "куча" (динамическая память)
Прикрепленное изображение
дак вот допустим ми обявили переменную А типа масив о 1 до 5 типа интежер , при компиляции в то место де локальние переменные занеслась А (5*4 байт). Все прекрасно мы работаем с этим масивом но вдруг к нам нужно 6 значений, каждый раз не побижим к програмисту чобы менял диапазон масива, для этого используется динамическая память.
Указатель - это переменная которая содержит адрес ячейки памяти в динамической памяти.
дак вот когда мы делаем New() мы просим менеджер кучи чтоб он нашол нам место в "кучи" для хранения, нашолши место она записывает адрес где хранится инф.
Прикрепленное изображение
для того чтоб добратся до информации хранящийся мы используем ^

Цитата
- это будет подозрительно непохоже на работу первокурсника, будет видно что работали профессионалы!


а при чем здесь первый курс, я тож щс на первом курси и что мне теперь не делать тежолые задачи по томучто на первом курсе неповерят??

Цитата
"как это работает"

а как очередь в магазине работает, также и здесь только здесь переменные smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Профи
****

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

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


Цитата

а как очередь в магазине работает, также и здесь только здесь переменные

чтоб ты вреш и не краснееш!!!!.В магазине, из начала удаляют а в хвост добавляют,а в очереди не так,это уже дек получается smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


?
***

Группа: Пользователи
Сообщений: 283
Пол: Мужской

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


Очередь - упорядоченный набор элеменотов, которые могут удалятся с одного ее конца ( начало очереди) и помещатся в другой конец (конец очереди). очередь обеспечивают диссциплину обслуживания "первый пришол первый ушол".
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Профи
****

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

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


Ладно не понял ты шутки)))Разьяснять не буду,тупо получиться.В общем про очередь амега правильно говорит)))Только не в магазине.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


?
***

Группа: Пользователи
Сообщений: 283
Пол: Мужской

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


Цитата
Разьяснять не буду,тупо получиться.

ну а ты постарайся чтоб умно получилось
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Krjuger @ 26.05.2009 23:21) *
чтоб ты вреш и не краснееш!!!!
Вот это ты называешь шуткой?
Я бы извинился на твоем месте..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Профи
****

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

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


А я извинился,в привате,потому что это уже флуд,который никак не относится к теме,хотя создатель топа явно уже забил на эту тему.........
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Новичок
*

Группа: Пользователи
Сообщений: 11
Пол: Женский

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


ничего я не "забила"! еще пытаюсь разобраться до сих пор....
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Профи
****

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

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


Господи....Короче береш листочек и ресуеш паровозик.В кадом вагоне сидит какая то информация(число ,буква,слово не важно),и у каждого вагончика есть ссылка на следующий вагончик.Суть очереди в чем,ты с начала твоего поезда можеш отсоединять вагоны и к концу поезда можеш присоединять ваготы.при это когда ты отсоединяеш вагон,ты разрываеш связ между отсоединяемым и следующим за ним,а когда добакляеш в конец,то ты добавляемому элементу должна показать,что бывший последний вагон стоит перед ним.Блин я уж хз как по другому обяснить.

Сообщение отредактировано: Krjuger -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Новичок
*

Группа: Пользователи
Сообщений: 11
Пол: Женский

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


Ладно, больше не пристаю. Про вагончики понятно, спасибо большое)) Теорию читала, принцип понятен. Я имела в виду, что непонятно в самом коде, путаница с переменными, которые показывают одна на другую. Вот говорите, что каждую строчку комментировать никто не будет, а вышло бы быстрее и мне понятнее. Ну уже ладно, все сдала, в пятницу расскажу уж про вагончики!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Профи
****

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

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


Да не в этом дело,просто конкретно обознач,за что отвечает каждая переменная.из того куска,что ты скидывала,я лиш 2 строчки не откоментировал.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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