![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
TheKnyazz |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 15 Пол: Мужской Репутация: ![]() ![]() ![]() |
Здравствуйте!Я очень внимательно прочитал ваш достаточно качественный ЧаВо по файлам и динамическим спискам, но тут проблема, я не знаю куда прилепить процедуру закрытия файла, чтоб в моем ткст файле сохранялись мои записи в таблицу, и при следующем запуске программы, я мог загрузить из файла значения, и продолжить работу со старыми данными. Так же небольшая проблема с пониманием такой строки моего задания "создать процедуру, которая вставляет в список L новый элемет Е1, за каждым вхождением элемента Е"
Я просто не понимаю, что это значит. У нас была только 1 лекция по этой теме, но это нам не обьясняли, а на следующее практическое задание тянуть готовую лабу. Обьясните пожалуйста, что оно такое. Вот мой исходник.
Основные ф-ции работают вроде, а вот чтоб сохранять данные, не получается. |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата чтоб сохранять данные, не получается. Перед тем, как выйти из программы (при выборе 6-го пункта), переоткрой файл F на запись, пробеги по списку, и сохрани его содержимое в файл.Цитата "создать процедуру, которая вставляет в список L новый элемет Е1, за каждым вхождением элемента Е" Допустим, у тебя был список:Я просто не понимаю, что это значит. L = <1, 2, 3, 1, 5, 6, 7, 8, 1> , и E = 1, E1 = 10... Твоя задача - пройти по списку, найти все элементы, равные значению E, то есть, единице, и после каждого такого элемента вставить значение E1. В результате, список должен выглядеть так: L = <1, 10, 2, 3, 1, 10, 5, 6, 7, 8, 1, 10> |
TheKnyazz |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 15 Пол: Мужской Репутация: ![]() ![]() ![]() |
Что-то я зашел в тупик.
Из ваших слов procedure Escape; Эту штуку я должен использовать в 6 пункте. Но почему-то толку ни какого. Или я что-то не правильно понял? |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата Из ваших слов Не-а... Я сказал: Цитата(Self) (при выборе 6-го пункта), переоткрой файл F на запись , это делается Rewrite-ом... И записать содержимое списка в файл, а не просто пронестись по нему вхолостую:procedure Escape;Я надеюсь, ты сохранил где-то указатель на начало списка, иначе ты потеряешь его, и будет у тебя утечка памяти, этого делать не стОит... |
TheKnyazz |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 15 Пол: Мужской Репутация: ![]() ![]() ![]() |
Я надеюсь, ты сохранил где-то указатель на начало списка, иначе ты потеряешь его, и будет у тебя утечка памяти, этого делать не стОит... с этого места поподробнее пожалуйста, моск почему-то слабо осознает. Мне ввести еще одну ссылочную переменную специально для того, чтобы сохранить в ней первый элемент? теоретически грамотный пользователь будет заполнять мою таблицу начиная с 1 элемента.(я имею ввиду, то что спрашивается при добавлении элементов, какой номер.) Нельзя ли это как-то использовать? Или имеется ввиду указатель типа конец файла\конец строки? А так же, каким образом еще и закрыть основную программу? Когда я дописываю exit после clrscr В процедуре escape, почему-то меня не хочет выкидывать из программы. Сообщение отредактировано: TheKnyazz - 1.02.2009 21:56 |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Цитата Мне ввести еще одну ссылочную переменную специально для того, чтобы сохранить в ней первый элемент? Не вот у тебя когда происходит просмотр списка, ты делаешь так:Writeln('ochered soderjit sleduyuschie elementy');, то есть, Temp у тебя - именно дополнительная переменная, которая используется только для того, чтобы пробежать по списку, основная же переменная (Left) не изменяется... Здесь (при сохранении списка) почему-то Left-а и в помине нет (а вдруг я выберу "выход" сразу же после просмотра списка, когда Temp = nil? Опять ничего не сохранится). Сделай и здесь то же самое: сначала Temp := Left, а потом - все остальное... + к этому, я ж сказал, что еще надо сделать: надо список не только сохранить, но и память, им занимаемую, освободить. Не привыкай делать "чтобы как-то отработало", если память выделялась (а она выделялась, в частности - в процедуре Org, при создании списка) - она должна быть удалена. На каждый New должен быть свой Dispose. Цитата Когда я дописываю exit после clrscr В процедуре escape, почему-то меня не хочет выкидывать из программы. А что, должно? Exit завершает текущую процедуру, а не программу вообще-то... Добавь этот самый Exit не внутрь Escape, аCase Key Of, собственно, он там и был, чего ты убрал его оттуда - непонятно... |
TheKnyazz |
![]()
Сообщение
#7
|
Новичок ![]() Группа: Пользователи Сообщений: 15 Пол: Мужской Репутация: ![]() ![]() ![]() |
Вас понял, из-за таких "гениев" как я происходит переполнение памяти, и многочасовой труд например в ранних версиях ворда уходит на смарку).
Огромное вам спасибо за помощь! Все поправил, все работает. Со своим заданием с элементом е1 постараюсь разобраться сам, надо же почувстовать себя программистом ![]() ![]() |
Alma |
![]()
Сообщение
#8
|
Гость ![]() |
Я конечно прошу прощения. Но у меня аналогичная проблема с программой. Список не сохраняется в файл и при повторном открытии таблица пустая. Я попыталась сделать так, как Вы советовали, но ничего не получается. Не могли бы вы мне подсказать в чем ошибка, а то было уже перепробовано много вариантов и все равно не сохраняется. Спасибо заранее
program lab9; |
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Цитата Я попыталась сделать так, как Вы советовали, но ничего не получается. Я советовал записывать в файл, а не выводить на экран:procedure Escape;Разница заметна? |
Гость |
![]()
Сообщение
#10
|
Гость ![]() |
Разница заметна, спасибо, сама не увидела:)
Единственное, на строке writeln() теперь выдает ошибку Invalid file type |
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
Потому что в исходной программе работа была с текстовым файлом, а ты пытаешься работать с типизированным... Для типизированных все еще проще:
while Temp<>nil do beginсохранит данные в файл, главное потом правильно их прочесть... Или поменяй тип файла на текстовый, и делай, как я написал в предыдущем посте... |
Гость |
![]()
Сообщение
#12
|
Гость ![]() |
сохранит данные в файл, главное потом правильно их прочесть... Не получается правильно прочесть. Если пишу еще одну процедуру просто для чтения типизированного файла, паскаль завершает работу. Если меняею процедуру prosmotr все рачно ничего не выводиться при повторном запуске procedure prosmotr; |
volvo |
![]()
Сообщение
#13
|
Гость ![]() |
Цитата Если пишу еще одну процедуру просто для чтения типизированного файла, паскаль завершает работу. А если написать эту процедуру правильно? Вот так, например:Procedure ReadFile; |
Гость |
![]()
Сообщение
#14
|
Гость ![]() |
Спасибо огромное. Вы очень мне помогли
|
![]() ![]() |
![]() |
Текстовая версия | 18.07.2025 14:06 |