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

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

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

> Программа с очередью, Нужны комментарии(подробные)
rs-mms
сообщение 25.05.2009 12:58
Сообщение #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 страниц V  1 2 >  
 Ответить  Открыть новую тему 
Ответов(1 - 19)
Krjuger
сообщение 25.05.2009 13:09
Сообщение #2


Профи
****

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

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


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

особенно после begin'a в процедуре печати очереди,меня лично как то настараживает.А еще посмотри по сути у тебя идет создание очереди Q и P практически идентичны,я думаю лучше создать одну процедуру.И напиши,что именно тебе не понятно,потому что каждую строчку коментировать врятли кто будет.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
rs-mms
сообщение 26.05.2009 15:40
Сообщение #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 
 К началу страницы 
+ Ответить 
volvo
сообщение 26.05.2009 15:55
Сообщение #4


Гость






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

Как программа, не прошедшая компиляцию, может выполняться - это на форум писателей фантастов... Здесь - программисты.
 К началу страницы 
+ Ответить 
Krjuger
сообщение 26.05.2009 15:59
Сообщение #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 - 26.05.2009 16:08
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 26.05.2009 16:24
Сообщение #6


Гость






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

(сообщение на автоудалении, ссылаться на него не надо...)
 К началу страницы 
+ Ответить 
Krjuger
сообщение 26.05.2009 16:25
Сообщение #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 - 26.05.2009 16:32
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
rs-mms
сообщение 26.05.2009 21:27
Сообщение #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 
 К началу страницы 
+ Ответить 
Krjuger
сообщение 26.05.2009 22:05
Сообщение #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 
 К началу страницы 
+ Ответить 
amega
сообщение 26.05.2009 22:15
Сообщение #10


?
***

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

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


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


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

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


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

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

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


Профи
****

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

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


Цитата

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

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


?
***

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

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


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


Профи
****

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

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


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


?
***

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

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


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

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


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

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

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


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


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


Профи
****

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

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


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


Новичок
*

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

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


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


Профи
****

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

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


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

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


Новичок
*

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

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


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


Профи
****

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

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


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

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

 



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