1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
| Madam |
28.09.2006 13:03
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 39 Пол: Женский Реальное имя: Наталья Репутация: 1 |
Здравствуйте!
Помогите пожалуйста далеко не юной зочнице справится с кусовиком. Как с помощью Randomize создать линейный список из десяти положительных целых чисел? Заранее благодарю. Сообщение отредактировано: Madam - 10.10.2006 8:36 |
![]() ![]() |
| volvo |
7.10.2006 2:55
Сообщение
#2
|
|
Гость |
Значит, так...
Смотри, что я сделал: 1. Все циклы вида: j:=0; заменены на циклы: SetFillStyle(SolidFill, White); Почему? Потому, что во-первых они проще читаются, следовательно и находить недочеты и неполадки будет проще. Ну, а во-вторых - SetFillStyle делать на каждой итерации совершенно необязательно, достаточно это сделать один раз перед циклом... 2. Однотипные действия, вроде: if(ch='0') then beginвыделены в отдельные функции... 3. Немного подправлена сама организация работы с меню: вместо того, чтобы хранить все время текущую Y-позицию, я храню "индекс", т.е. порядковый номер текущего (в смысле, выбранного в данный момент) элемента. Это позволяет мне во-первых, избавиться от совершенно ненужных констант: const(зачем нужны 6 констант, если можно вычислить значение в любой момент по текущему индексу и стартовому значению?), и во-вторых, заменить булевские переменные n1, n2, n3 на массив n: array[1 .. 3] of boolean (ну, что поделать, я привык к структурированным программам Естественно, я не мог оставить в программе и вот это: OutTextXY(10,45,'Create new list');- строки были записаны в массив и выведены в простом цикле... 4. Блок обработки расширенных клавиш (то, что ты называешь HARD) внесен в основной Case: Case ReadKey OfКстати, у тебя была ошибка: While ch <> '27'do beginэто не везде будет компилироваться (зависит от настроек компилятора), ибо некорректно сравнивать символ со строкой... 5. Теперь о главном: у тебя же был список целых? Зачем ты его превратила в список строк? Теперь ты понимаешь, что я имел в виду, когда говорил, что нельзя смешивать интерфейс и логику? Ты изменила базовый тип, потому что он не вписывался в твой интерфейс!!! Не стоит этого делать. Интерфейс должен подстраиваться под логику, а не наоборот. Смотри, что нужно было сделать: typeТо, что я добавил - это процедура отрисовки определенного элемента. Понимаешь? Тебя на этапе создания списка вообще не должно волновать, как именно будет отображаться этот элемент. Для этого есть Интерфейс. Ты ему передала все необходимые данные, и все. А как реализовать конкретно отрисовку этого элемента списка - это ты будешь думать уже потом, на этапе реализации интерфейса. Если он будет графическим, то функция ShowListItem, например, может быть такой: Procedure ShowListItem(yPos, n: integer; p: pt);, будет текстовым - процедура будет другой. НО!!! Изменяться будет только эта процедура! Сам принцип формирования списка остается неизменным, и потому - неприкосновенным... 6. Ну, и еще одно... Нежелательно описывать все переменные, как глобальные. Я уже как-то приводил на форуме пример программы, в которой при простом перемещении нескольких переменных ниже по тексту программы (ближе к концу) еще на этапе компиляции (!!!) выявлялась очень трудноуловимая ошибка, так что я еще раз повторяю: переменная должна быть описана как можно ближе к тому блоку, в котором она используется... Вот, например, у тебя в программе, где описаны переменные var gd, gm: integer;? А используются где? Только в основном блоке? Вот и описывай их там. Во избежание... Конечно, именно эти переменные ничего не меняют в данном случае, это просто пример, но все же... Ну, и, наконец, сама подкорректированная программа: (я не стал добавлять отсутствующие функции, попробуй это сделать сама, если что - обращайся, подскажем как что поправить Прикрепленные файлы
madam.pas ( 8.49 килобайт )
Кол-во скачиваний: 171 |
| volvo |
7.10.2006 10:20
Сообщение
#3
|
|
Гость |
Цитата я пока только запустила твою программу, еще не разбиралась, но после поиска она выводит на А что она раньше выводила?экран не обновленный список, а новый элемент. А я ведь говорил: Цитата(volvo @ 7.10.2006 1:55) я не стал добавлять отсутствующие функции, попробуй это сделать сама А то, что она ВООБЩЕ что-то выводит - это, как видно, побочный эффект, от которого, кстати, надо избавляться. Побочных эффектов в программе быть не должно... |
| Madam |
7.10.2006 10:52
Сообщение
#4
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 39 Пол: Женский Реальное имя: Наталья Репутация: 1 |
А что она раньше выводила? А я ведь говорил: А то, что она ВООБЩЕ что-то выводит - это, как видно, побочный эффект, от которого, кстати, надо избавляться. Побочных эффектов в программе быть не должно... Там есть процедура Insert, она-то и должна была выводить обновленный список. |
Madam Линейный список 28.09.2006 13:03
lapp Наташа,
пожалуйста, создавай для новой задачи нову... 28.09.2006 13:34
Madam Здравствуйте уважаеммый Андрей!
Спасибо за отв... 29.09.2006 9:38
lapp
Прошу прощения за ошибки
Да какие там ошибки - не... 29.09.2006 13:46
Madam Андрей, спасибо большое, все получилось. Теперь бу... 3.10.2006 8:46
lapp
Теперь буду полученный список сортировать и т. д.... 3.10.2006 11:21
Madam Отлично. Если что - говори. И даже если все врод... 5.10.2006 11:01
volvo Вот простейшая процедура создания списка (все, что... 29.09.2006 9:43
volvo Потому, что ты сказала ей делать это:Insert(p1);
... 5.10.2006 11:10
Madam Что, собственно, нужно сделать? Вставить новый эле... 5.10.2006 11:16
volvo P.S. Кстати, программа вообще аварийно заканчивает... 5.10.2006 11:17
Madam Причина: наличие в программе ГЛОБАЛЬНОЙ переменной... 5.10.2006 11:32
Atos Я сейчас пытаюсь разобраться в программе... :nea:... 5.10.2006 11:58
Madam
Я сейчас пытаюсь разобраться в программе... :nea... 5.10.2006 12:01
Madam
Я сейчас пытаюсь разобраться в программе... :nea... 5.10.2006 12:20
volvo :blink: И что? First, которая БЫЛА в Create_List ... 5.10.2006 12:06
Madam
:blink: И что? First, которая БЫЛА в Create_List ... 5.10.2006 12:16
Atos В общем, если уж работать с глобальным списком, то... 5.10.2006 12:19
volvo Смотри, насколько все проще при использовании функ... 5.10.2006 12:21
Atos
Значит, где-то ещё ошибка.
Смотри, перед этим ты ... 5.10.2006 12:32
Madam
Значит, где-то ещё ошибка.
Смотри, перед этим ты ... 5.10.2006 12:53
Madam Володя, Миша спасибо большое с функцией получилось... 6.10.2006 12:07
volvo А знаешь, почему у тебя это не получается или полу... 6.10.2006 12:40
Madam
А знаешь, почему у тебя это не получается или пол... 6.10.2006 12:45
lapp
Я вот сомневаюсь можно-ли в поиске сравнивать так... 7.10.2006 5:56
Madam Володя, ты просто волшебник, а я еще только учусь.... 7.10.2006 10:00
volvo Должна была и выводила - это разные вещи. Запусти ... 7.10.2006 11:18
Madam
Должна была и выводила - это разные вещи. Запусти... 7.10.2006 11:42
volvo Подпорть :blum:
Я все равно через пару часов вы... 7.10.2006 12:01
volvo Вот и очередное обновление...
Что изменено...
1. ... 7.10.2006 14:57
Madam Нет, Volvo, ты не один, мне очень-очень интересно.... 8.10.2006 6:08
Madam Volvo, я не поняла, зачем ты делаешь проверку на н... 8.10.2006 9:39
volvo А проверку на пользователя, НЕ вводящего цифры, а ... 8.10.2006 10:24
Madam
А проверку на пользователя, НЕ вводящего цифры, а... 8.10.2006 10:32
Madam Volvo, я тут умру сейчас совсем.
удалить най денны... 8.10.2006 12:22
volvo
Ну, так правильно... Тебе, чтобы вывести только ч... 8.10.2006 12:45
Madam
...не правда ли?
Нет не правда. M это элемент, к... 8.10.2006 12:59
Madam
Вот так исправляем:
Все получилось, забыла в мен... 8.10.2006 13:37
Madam
Все получилось, забыла в меню обратно исправить
... 8.10.2006 15:04
volvo Читай следующий пост... 8.10.2006 13:09
Madam Не поняла, что и где читать? 8.10.2006 13:15
volvo Читай мой предыдущий ответ, я исправил его... 8.10.2006 13:26![]() ![]() |
|
Текстовая версия | 9.12.2025 20:36 |