program Lab_4;
const max=5;
type Evt= integer;
var
elem:array [1..max] of Evt;
spos, rpos:integer;
end.
Задача на стеки и очереди. |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Задача на стеки и очереди. |
Анисия |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 25 Пол: Женский Реальное имя: Анисия Репутация: 0 |
Добрый день. Помогите разобраться с очередями и стеками. Как организовать очередь из n целых чисел. Пока взяла 5 чисел, это получается что надо сформировать массив. Посмотрите пожалуйста правильно сделала?
|
volvo |
Сообщение
#2
|
Гость |
Цитата это получается что надо сформировать массив Тебе что, стек организовать надо на основе массива? Извращение... Стек - он тем и хорош, что не имеет ограничений, которые имеет массив, а ты опять хочешь его загнать в те же рамки?В FAQ-е, в теме "Все о динамических структурах данных" есть информация о создании стеков/очередей в нормальном виде... |
Анисия |
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 25 Пол: Женский Реальное имя: Анисия Репутация: 0 |
Тебе что, стек организовать надо на основе массива? Извращение... Стек - он тем и хорош, что не имеет ограничений, которые имеет массив, а ты опять хочешь его загнать в те же рамки? В FAQ-е, в теме "Все о динамических структурах данных" есть информация о создании стеков/очередей в нормальном виде... Мне надо сформировать очередь из n чисел. |
volvo |
Сообщение
#4
|
Гость |
Очередь можно сформировать на основе статического массива, или на основе динамического выделения памяти. Какое формирование нужно тебе?
Вот тебе пример: сформировала ты очередь из 5-ти чисел, а преподаватель тебе говорит: а добавь-ка шестое число... И что? Выходишь из программы, меняешь цифры, перекомпилируешь, запускаешь заново и вводишь 6 чисел? А ведь этого можно избежать, и вводить столько чисел, на сколько хватит памяти. Ну, в общем решать тебе, конечно... Я просто говорю, как лучше, но как всегда это никого не интересует - все делают по-своему. А потом приходят, и говорят, что не сдали... |
Lapp |
Сообщение
#5
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Мне кажется, что дело даже не в том, что шестой элемент не влезет, а в том, что если взять заведомо большой массив (чтоб все влезло на все случаи жизни), то будет неоправданная трата памяти. Динамическая память хороша именно тем, что выделяется только тогда, когда она нужна.
Но использование памяти - это другая тема. И вполне возможно, что Анисия этого еще просто не знает. Так что ничего не вижу плохого в демонстрации собственно принципа очереди на статическом массиве. Вот, я продолжил (немного изменив некоторые идентификаторы) программу из первого поста: program Lab_4;Анисия - разберешься? -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Анисия |
Сообщение
#6
|
Новичок Группа: Пользователи Сообщений: 25 Пол: Женский Реальное имя: Анисия Репутация: 0 |
|
Анисия |
Сообщение
#7
|
Новичок Группа: Пользователи Сообщений: 25 Пол: Женский Реальное имя: Анисия Репутация: 0 |
Подскажите что означает две команды Dec и Inс???
Сообщение отредактировано: Анисия - |
Lapp |
Сообщение
#8
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Подскажите что означает две команды Dec и Inс??? Dec(x) эквивалентно x:=x-1 Inc(x) эквивалентно x:=x+1 -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
amega |
Сообщение
#9
|
? Группа: Пользователи Сообщений: 283 Пол: Мужской Репутация: 4 |
а можно маденький вопросик? уже которою програму просматриваю. били на форуме я ни как не могу понять, чем отличается
type от того что мы просто зделает так
|
volvo |
Сообщение
#10
|
Гость |
Цитата //почему тогда здесь не писали тип telem? Не путай теплое с мягким... TElem описывает тип данных, а то, что ты показал - это индексы, а они всегда целочисленные... А вот если тебе понадобится очень быстро сменить тип данных, с которыми работает программа, например, на вещественный (без лазания по коду и многократной перекомпиляции, чтоб выяснить "а где еще недопустимое присваивание"), то достаточно будет всего лишь изменить TElem. |
amega |
Сообщение
#11
|
? Группа: Пользователи Сообщений: 283 Пол: Мужской Репутация: 4 |
Цитата Не путай теплое с мягким... TElem описывает тип данных, а то, что ты показал - это индексы, а они всегда целочисленные... А вот если тебе понадобится очень быстро сменить тип данных, с которыми работает программа, например, на вещественный (без лазания по коду и многократной перекомпиляции, чтоб выяснить "а где еще недопустимое присваивание"), то достаточно будет всего лишь изменить TElem. о спасибо! буду знать теперь) |
Анисия |
Сообщение
#12
|
Новичок Группа: Пользователи Сообщений: 25 Пол: Женский Реальное имя: Анисия Репутация: 0 |
Попробовала сегодня написать, счою программку на очереди. Ну не как не могу понять почему у меня выводится значения:
vvod 69 vvod 0 vvod 0 vvod 0
|
volvo |
Сообщение
#13
|
Гость |
Добавь первой строкой {$R+} и запусти свою программу еще раз... Ты узнаешь много интересного
|
Анисия |
Сообщение
#14
|
Новичок Группа: Пользователи Сообщений: 25 Пол: Женский Реальное имя: Анисия Репутация: 0 |
Выходит за пределы страницы f:=f+1; на этой строке
|
Lapp |
Сообщение
#15
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Выходит за пределы страницы f:=f+1; на этой строке И это все, что ты можешь сказать?.. Это определила не ты, а железная машина. А ты должна из этого сделать выводы.Но сначала поправка: не страницы, а массива. И не на этой строке, а на следующей. Ты f чем инициалицировала? 4? Так. А потом к нему единицу прибавила? Прибавила. Что вышло? Правильно, 5. А массив у тебя размерности какой? 4. Так чего ты хочешь?.. Тебе надо сделать не просто приращение f, а циклическое приращение по модулю 5. И массив тебе, думаю, надо нумерновать с нуля, а не с единицы. Тогда приращение f сделаешь так: f:=(f+1) mod 5; Понятно? Еще ты с m запуталась. Пусть m будет длина очереди, а нумерация - от 0 до m-1=m1. Вот, смотри, я тебе все это сделал. И, ПОЖАЛУЙСТА, обрати внимание на формат.. Ну нельзя же программы писать как записки соседу по парте!.. program ocher; И последнее: зачем ты стала переделывать мой код? Только сейчас заметил, что он практически идентичен)). Для тренировки? Ок, похвально, что не копи-пейст)). Спрашивай еще, что неясно. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Анисия |
Сообщение
#16
|
Новичок Группа: Пользователи Сообщений: 25 Пол: Женский Реальное имя: Анисия Репутация: 0 |
Мне дали вот такое задание: организовать очередь из n целых чисел. Изменить ссылки так, чтобы последний элемент очереди стал первым, первый – вторым, вто-рой – третьим и т.д.
|
Анисия |
Сообщение
#17
|
Новичок Группа: Пользователи Сообщений: 25 Пол: Женский Реальное имя: Анисия Репутация: 0 |
Как я правидно поняла, надо циклом создавать очередь чисел, и первый эелемнт помещать в конец очереди
А как сдвигать ссылку на следующий элемент7 |
volvo |
Сообщение
#18
|
Гость |
Цитата Изменить ссылки так, чтобы последний элемент очереди стал первым, первый – вторым, вто-рой – третьим и т.д. Мне всегда нравятся вот такие задания... Просто великолепно. А ничего, что для этого не надо менять никакие ссылки? Это задание вообще не надо делать. Это не очередь уже, вот в чем дело... Ты в очереди когда-нибудь стояла? Знаешь, что это? Это FIFO - "первым пришел, первым вышел". А ты что предлагаешь? Пришел кто-то последним, тут его раз, перекинуть в самое начало, а всех отодвинуть? Какая-то коррумпированная очередь у тебя. Не пойдет... Не предназначена для этого очередь. Чтоб первый стал последним - легко, для этого достаточно изъять элемент из очереди, и добавить его снова, он добавится в конец... С деком твоя операция тоже делается легко, поскольку там очередь - двухсторонняя, там можно брать элемент с любой стороны, и добавлять его тоже в любую сторону, хоть в "голову", хоть в "хвост", он предназначен для таких операций, рассчитан на них. А очередь, увы, нет...Поймите уже раз и навсегда: нельзя вообще лезть на уровень указателей, когда работаешь с очередью. Равно, как и с любой другой структурой данных. Твое дело при работе с очередями - запрограммировать 2 операции: Get (которая берет элемент из начала очереди), и Put (которая добавляет элемент в ее конец). Всё, ничего больше... Точно так же, как при работе со стеком никому в голову не придет менять указатели, все что надо - это Push/Pop, иначе это уже не стек, а простой список... |
Lapp |
Сообщение
#19
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
А ты что предлагаешь? Пришел кто-то последним, тут его раз, перекинуть в самое начало, а всех отодвинуть? ага, а так всегда и делалось у нас! Так просто не отучишь..Справедливости ради, замечу, что в принципе эту операцию можно осуществить, если в реализации очереди предусмотрена функция Length (Длина). Тогда просто нужно повторить перекладывание из начала в хвост Length-1 раз. Мне кажется, нет смысла все это вещать пользователю Анисия. Человек, ни разу не сказавший тривиальное "спасибо" ни одному из отвечавших, практически не отвечающий на вопросы собеседников, вряд ли заслуживает каких бы то ни было советов или объяснений.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Анисия |
Сообщение
#20
|
Новичок Группа: Пользователи Сообщений: 25 Пол: Женский Реальное имя: Анисия Репутация: 0 |
Спасибо за то, что указали за мою бестактность.... Больше не буду.
Но я действительно не понимаю....... Сообщение отредактировано: Анисия - |
Текстовая версия | 23.12.2024 20:14 |