![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Insomnia |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 49 Пол: Мужской Репутация: ![]() ![]() ![]() |
идея задачи в том: что бы произвести со списком различные действия. Проблема в удалении элемента списка по имени. Пробовал различные условия и составление процедуры/ процедур, но что бы полноценно из любого места удалял эл-т не выходит. Как пр: "если ввожу 3 эл-та и удаляю последний - все хорошо. но если следом удаляю 2 то он впринцепи прогоняет и выводит ответ: но вмете с тем и вылетает." . Косяк, я предполагаю, в неккоректных условиях, т.е. выходит за пределы списка.
опишите подробней пожалуйста мои ошибки. P.S. остальные условия работают хорошо, но если заметите недочеты , укажите их, пожалуйста. Прикрепленные файлы ![]() |
![]() ![]() |
IUnknown |
![]()
Сообщение
#2
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 013 Пол: Мужской Ада: Разработчик Embarcadero Delphi: Сторонник Free Pascal: Разработчик Репутация: ![]() ![]() ![]() |
Цитата если я хочу попросить "что лежит под 3 номером, и он вывести должен имя и телефон данного служащего" . А с какой, собственно, стати ты должен об этом спрашивать? Что такое "3 номер" вообще? Список - это не массив, в него ведь информация может добавляться произвольно, в любое место. То что сейчас было №3 через секунду может стать уже №4, а в третьем элементе может оказаться то, что раньше было во втором, или чего раньше вообще не было (я уж не говорю о сортировке, которая так перекроит тебе всю нумерацию, что ты потом будешь месяц разбираться, что где, если еще и поле "порядковый номер" сделаешь). Нельзя делать доступ к элементам списка по порядковому номеру. Только по ключу (уникальному ключевому полю). А ключ у тебя - это фамилия. Вот и делай поиск по фамилии. Никакого счетчика.Цитата указатель на элемент списка? Да. Я имел в виду вот это:function search(const L : PPerson; s : Tname) : PPerson; // Возвращается что? Указатель..., а теперь, вместо того, чтобы "растворять" поиск в программе и размазывать его по нескольким местам, просто... 1) delete_person: case n of 2) found_phone writeln('напишите имя нужного вам человека');Структура программы упростится. Хотя, ты делаешь ошибку многих. Я устал говорить об этом: не перемешивай интерфейс и логику программы. Функция delete_person - это функция, которая должна получить на вход список, где будет производиться поиск, и фамилию искомого клиента. И вернуть результат: True, если данные из списка удалены, и False - если произошло что-то внештатное (именно поэтому я обычно возвращаю Integer. Если 0 - то все нормально, другое значение сигнализирует о том, какая именно ошибка произошла). Все остальное, вся вот эта беседа с пользователем, здесь - явно лишнее. Она должна происходить в другом месте программы, перед вызовом delete_person пользователя надо попросить, чтоб он ввел фамилию для удаления, чтоб ввел номер действия (я бы это делал в модуле Interface_1, у него ж и название правильное, это ИМЕННО интерфейс с пользователем, вот тут: case n of ), а не там, где происходит собственно удаление. То же самое относится и к сортировке: какое отношение имеет writeln ('воздух сортировать что ли ?')к сортировке списка? bubble_sort получила несортированный список, после ее выполнения список стал упорядоченным. Всё! Никакой самодеятельности больше. Все остальное к логике не относится. Это - интерфейс пользователя. Хочется похохмить - верни из bubble_sort единицу при пустом списке и 2-ку при списке, состоящем из одного элемента, и сделай: case bubble_sort(L) ofтам же, в Interface_1. |
![]() ![]() |
![]() |
Текстовая версия | 14.09.2025 19:20 |