Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Интернет: Образование, Работа и Бизнес" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
← Ноябрь 2007 → | ||||||
1
|
2
|
3
|
4
|
|||
---|---|---|---|---|---|---|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
13
|
14
|
15
|
16
|
17
|
18
|
19
|
20
|
21
|
22
|
23
|
25
|
|
26
|
27
|
28
|
29
|
30
|
Статистика
-1 за неделю
Программирование на Delphi (выпуск 77)
Программирование на DELPHI
Выпуск #77 (24 ноября 2007 г.)
Если Вы хотите где-либо разместить материалы, представленные на www.delphi.int.ru или в данной рассылке, свяжитесь, пожалуйста, с их автором или ведущим рассылки.
Delphi.int.ru Expert Последние новости
Архив: вопросы и ответы В архив попадают вопросы, срок действия которых истёк. Каждый заданный вопрос действителен в течение одной недели, т.е. ответы на него принимаются именно в этот период. В сегодняшнем выпуске опубликованы вопросы # 296 - 310. Вопросы, на которые не было дано ни одного ответа, не публикуются. Статистика по выпуску: Кол-во вопросов: 15 Вопрос # 311 Как создать дистрибутив программы, написанной на Delphi 7? Вопрос задала: Наташа (статус: Посетитель) 1. Отвечает эксперт: Лукьяненко Алексей Валериевич Точно так же, как дистрибутив любой другой программы. Для этого существует очень много программ-исталляторов (InstallShield, WiseInstaller, InnoSetup, др), а также можно написать собственный инсталлятор. В комплекте в Delphi идет урезанная версия InstallShield Express - можете попробовать с ее помощью. Интерфейс программы достаточно прост, и сложностей возникнуть у Вас не должно. Ответ отправил: Лукьяненко Алексей Валериевич (статус: 1-ый класс) 2. Отвечает эксперт: Вадим К Есть ещё достаточно хорошая прога для деланья инсталов NSIS. Основная идея - всё на скриптах. Ответ отправил: Вадим К (статус: Магистр) 3. Отвечает эксперт: Виталий Лещенко Здравствуйте, Наташа! Ответ отправил: Виталий Лещенко (статус: 4-ый класс) Вопрос # 312 Здравствуйте, уважаемые эксперты. Подскажите ,пожалуйста, как правильно установить и войти в Borland Delphi 7 . Я скачал и установил данную версию, но при попытке войти, мне выдаёт ссылку на регистрацию программы, зайдя по ссылке регистрации не нахожу. Если не трудно подскажите пожалуйста надёжный источник на скачку етой программы не требующий регистрации, или ссылку на регистрацию етой версии. Вопрос задал: Vitaliy
(статус: Посетитель) 1. Отвечает эксперт: Вадим К Поддержка Delphi 7 на данный момент отсутствует. Вы не можете её зарегистрировать обычным образом. Если всё таки хочеться, то покупается лцензия для BDS2006 а потом понижается. Ответ отправил: Вадим К (статус: Магистр) 2. Отвечает эксперт: Alex Van Glukhman Здравствуйте, Vitaliy! Ответ отправил: Alex Van Glukhman (статус: 7-ой класс) Вопрос # 313 Уважаемые експерти объясните, как действует Приложение: Вопрос задал: Бедзир Олександр (статус: Посетитель) 1. Отвечает эксперт: Сергей Устинов Здравствуйте, Бедзир Олександр! Приложение:
Ответ отправил: Сергей Устинов (статус: 2-ой класс) 2. Отвечает эксперт: Лукьяненко Алексей Валериевич Вместо Repaint лучше вставить Application.ProcessMessages. Связано это с тем, что после загрузки содержимого файла компонент ничего не рисует, а прорисовка происходит при получении системного события WM_PAINT. Событие это будет обработано либо в ходе обработки Application.ProcessMessages, либо после окончания вашего кода (во время его обработки программа не реагирует ни на какие системные события) Ответ отправил: Лукьяненко Алексей Валериевич (статус: 1-ый класс) 3. Отвечает эксперт: Вадим К Это всё верно и хорошо, но есть одно но. Не рекомендую создавать процедур, которые будут выполнятся дольше нескольких десятих секунды, так как этим вы тормозите интерфес программы. Можно сделать поток, но для такой простой задачи это уж слишком. Хотя, если вы надумаете сделать 10 картинок + ко всему хитрую логику их перемешивания (например зависящую от фазы луны:)), то тут уж только поток мутить. И паузы получаться точными, и грузиться всё будет. В потоке можно и sleep написать без угрызения совести. Но в вашем случае рекомендую воспользоваться таймером. После первой загрузки картинки выставляете время для таймера, и запускаете его. В обработчике таймера пишете вначале остановку таймера и загрузку нужной второй картинки. Работать будет хорошо Ответ отправил: Вадим К (статус: Магистр) 4. Отвечает эксперт: Косолапов Дмитрий Юрьевич В дополнение к предыдущему ответу: Ответ отправил: Косолапов Дмитрий Юрьевич (статус: 5-ый класс) Вопрос # 314 Доброго времени суток. Вопрос задал: Илья Бабаков (статус: Посетитель) 1. Отвечает эксперт: Alex Van Glukhman Здравствуйте, Илья Бабаков! Ответ отправил: Alex Van Glukhman (статус: 7-ой класс) 2. Отвечает эксперт: Николай Рубан Еще можно используя команду BETWEEN: Ответ отправил: Николай Рубан (статус: 7-ой класс) Вопрос # 315 Скажите, пожалуйста, где сейчас можно достать Kylix 3? Вопрос задал: Виталий Лещенко (статус: 4-ый класс) 1. Отвечает эксперт: min@y™ Превед! Приложение:
Ответ отправил: min@y™ (статус: Студент) 2. Отвечает эксперт: Вадим К Да, скачать можно, но вот только с установкой будут проблемы. Сам возился когдато. Ему нужны библиотеки нужных версий, и новые ядра ему не подходят. Ставте Lazarus и вы сразу получите всё что надо. Ответ отправил: Вадим К (статус: Магистр) Вопрос # 316 Здравствуйте уважаемые эксперты! Как известно, палитра формируется из трёх цветов, укажите пожалуйста числовой диапазон изменения каждого из цветов, в смысле конечное и начальное число. И ещё, на форме три движка, как сделать так, чтобы один соответствовал одному цвету, а другие другим цветам, и как по их положению выводить получившийся цвет? Заранее благодарен. Вопрос задал: Полушин Сергей Анатольевич
(статус: Посетитель) 1. Отвечает эксперт: Вадим К Смотрим функцию RGB, которая по трём своим параметрам формирует цвет. Параметры имеют тип byte - соответственно диапазон 0..255. Ответ отправил: Вадим К (статус: Магистр) 2. Отвечает эксперт: Роман Здравствуйте, Полушин Сергей Анатольевич!Диапазон изменения каждого цвета 0-255;Поповоду второй части посмотри код,там есть функция GetColour(Red,Green,Blue:integer):TColor; - возвращает значение цвета в RGB. Приложение:
Ответ отправил: Роман (статус: 5-ый класс) Вопрос # 317 Наведя мышкой на Button1, появится Button2. Как мне сделать так что бы убрав мышку с Button2, обратно появлялся Button1. Вопрос задал: Толков Геннадий Викторович (статус: Посетитель) 1. Отвечает эксперт: Alex Van Glukhman Здравствуйте, Толков Геннадий Викторович! Ответ отправил: Alex Van Glukhman (статус: 7-ой класс) 2. Отвечает эксперт: Роман Здравствуйте, Толков Геннадий Викторович!Используйте процедуру BringToFront. Ответ отправил: Роман (статус: 5-ый класс) Вопрос # 318 Здравствуйте.Ответте мне пожалуйста на вопрос как свернуть все окна. Вопрос задал: Толков Геннадий Викторович (статус: Посетитель) 1. Отвечает эксперт: Сергей Устинов Здравствуйте, Толков Геннадий Викторович! Ответ отправил: Сергей Устинов (статус: 2-ой класс) 2. Отвечает эксперт: Alex Van Glukhman Здравствуйте, Толков Геннадий Викторович! Ответ отправил: Alex Van Glukhman (статус: 7-ой класс) 3. Отвечает эксперт: Роман Здравствуйте, Толков Геннадий Викторович!Можно сделать так: для начала нужно импортировать в среду Delphi компоненты, позволяющие получить доступ к функциям оболочки (Microsoft Shell Controls & Automation Type Library). Для этого откройте окно Project - Import Type Library. Найдите в списке строку "Microsoft Shell Controls & Automation (version 1.0)" и нажмите Install. Установленные компоненты при неизменных параметрах установки появятся на вкладке ActiveX.Компонент TShell как раз и
предоставляет те функции оболочки, которые нас интересуют. Поместите его на форму. Он включает все необходимые методы. Например, чтобы свернуть все окна (аналог функции значка "Minimize all" на панели быстрого запуска), следует написать всего одну строку: Ответ отправил: Роман (статус: 5-ый класс) Вопрос # 320 Здравствуйте. Подскажите как создать ScrollBar особой формы. Например шарик на ниточке. Либо как в Winampе на цветной полоске квадратная ручка с изображением. Я делал подобие ScrollBara рисуя его картинками и управляя Image компонентами описывая все условия немелкой программой. Может есть какой-то простой путь, типа описывания регионов компонента как в случае с фигурной формой? Вопрос задал: Павлов Евгений
Владимирович (статус: Посетитель) 1. Отвечает эксперт: Роман Здравствуйте, Павлов Евгений Владимирович!Скорее всего в данном случае прийдётся посоть свой компонент наследник TScrollBar или даже TCustomControl.Приведу на всякий случай вориант изменения цвета scrollbar-a;В Windows предусмотрено сообщение WM_CtlColorScrollBar, которое посылается окну, содержащему элементы управления ScrollBar (полосы прокрутки). В ответ на это сообщение окно должно вернуть системе кисть, которой надо закрасить полосу прокрутки. С помощью WM_CtlColorScrollBar можно получать
разноцветные полосы прокрутки, что иногда бывает достаточно красиво. Приложение:
Ответ отправил: Роман (статус: 5-ый класс) 2. Отвечает эксперт: Alex Van Glukhman Здравствуйте, Павлов Евгений Владимирович! Ответ отправил: Alex Van Glukhman (статус: 7-ой класс) 3. Отвечает эксперт: Матвеев Игорь Владимирович Здравствуйте, Павлов Евгений Владимирович! Ответ отправил: Матвеев Игорь Владимирович (статус: Студент) Вопрос # 321 Здравствуйте. С кнопками у меня нечего не получилось, ну и Вопрос задал: Толков Геннадий Викторович (статус: Посетитель) 1. Отвечает эксперт: Николай Рубан Вам достаточно будет написать такие обработчики: Ответ отправил: Николай Рубан (статус: 7-ой класс) 2. Отвечает эксперт: Матвеев Игорь Владимирович Здравствуйте, Толков Геннадий Викторович! Ответ отправил: Матвеев Игорь Владимирович (статус: Студент) Вопрос # 322 Здравствуйте. С кнопками у меня нечего не получилось, ну и Вопрос задал: Толков Геннадий Викторович (статус: Посетитель) 1. Отвечает эксперт: Сергей Устинов Здравствуйте, Толков Геннадий Викторович! Приложение:
Ответ отправил: Сергей Устинов (статус: 2-ой класс) 2. Отвечает эксперт: Вадим К У TImage есть два хороших события - OnMouseEnter (мышь "зашла на комнонент") и OnMouseLeave ("покинула"). Если у вас делфи 7 и младше, то чтаем статью http://www.delphiworld.narod.ru/base/add_event_onmouseleave.html и пишем компонент с этими событиями. Ответ отправил: Вадим К (статус: Магистр) Вопрос # 323 Приветствую!!!Никто не сталкивался с иметационным моделированием в делфи??? Вопрос задал: KilkaMS (статус: Посетитель) 1. Отвечает эксперт: Вадим К пишем без ошибок "имитационным". Ответ отправил: Вадим К (статус: Магистр) Вопрос # 325 Еще раз, здраствуйте господа программисты! Интересно, есть-ли для Delphi надстройка, компонент или что-то в этом роде, для написания програм под PocketPC(Windows Mobile 2003)? Вопрос задал: Цопа Владимир Милузиевич (статус: Посетитель) 1. Отвечает эксперт: Вадим К Сама делфи не может генерить файлы под PocketPC. Но есть такое дело, как .NET. Под покеты майкрософт выпустила Compact FrameWork. Для Делфи (2006) толи есть патч, толи в следующей версии (2007, бетки уже есть) можно делать приложения Ответ отправил: Вадим К (статус: Магистр) » Найти все предыдущие уроки можно на www.delphi.int.ru в разделе "Статьи". Последние 3 урока: Циклы - общее понятие; цикл с параметром
Введение Запись последовательных команд не всегда может быть эффективным способом достижения поставленной цели. Очень часто в программе требуется выполнить одну и ту же последовательность действий несколько раз. Например, требуется вывести в текстовое поле (TMemo) числа от 1 до 100. Что делать в этом случае? Писать 100 строк кода? Конечно нет, это было бы просто глупо! Примеров можно привести множество. Причём во многих случаях число повторений может быть заранее неизвестно - в этом случае записать фиксированный набор
команд просто невозможно. Цикл с параметром Цикл с параметром (другое его название - цикл по переменной) позволяет выполнить набор команд фиксированное число раз, т.е. число итераций должно быть известно до начала выполнения цикла. Особенностью данного цикла является то, что заводится специальная переменная-счётчик, которая последовательно проходит указанный диапазон значений. Значение этой переменной может быть использовано в блоке кода, находящемся в цикле. Цикл с параметром описывается зарезервированным словом FOR (англ. "для"). Общий вид конструкции цикла FOR: FOR переменная-счётчик := начальное_значение [TO / DOWNTO] конечное_значение DO {Действия} Переменная-счётчик - объявленная выше переменная перечислимого типа (в большинстве случаев - число). Начальное значение и конечное значение - границы диапазона, который последовательно "пробежит" переменная-счётчик. Значения, естественно, того же типа данных, что и переменная-счётчик. При этом следует обращать особое внимание на указанные значения. В зависимости от их соотношения используется либо ключевое слово TO, либо DOWNTO. Слово TO используется в том случае, когда конечное значение больше начального, а DOWNTO - наоборот, т.е. когда цикл пойдёт по убыванию. В случае, если указанные значения не будут соответствовать ключевому слову, то требуемый результат не будет достигнут - цикл, вероятно, выполнится всего один раз. В качестве действий указывается какая-либо команда, либо набор команд. Если команд несколько, их, как обычно, следует заключать в блок BEGIN .. END. Пример №1 Рассмотрим пример, речь о котором шла в начале статьи, только немного усложним его - будем выводить не только числа от 1 до 100, но и их квадраты. Итак, мы заранее знаем, что нам следует выполнить одну и ту же команду - добавление строки в Memo, 100 раз. Запрограммируем это с помощью цикла FOR. Для начала следует разместить на форме TMemo (Memo1). Выполнение команд логичнее всего "повесить" на нажатие кнопки. Для добавления строк в TMemo следует воспользоваться методом Add его свойства Lines. Lines - это набор всех строк TMemo, а метод Add позволяет добавить указанную строку. Перед выполнением цикла содержимое Memo очищается.
Разберём, что здесь происходит: мы заводим переменную i (Integer, целое число) и указываем её как счётчик для цикла. Поскольку нам нужно вывести числа от 1 до 100, указываем соответствующий диапазон. Команда - добавление строки в Memo, содержащей текущее число и его квадрат. Преобразование типов (в данном случае - чисел в строки) обязательно. Как это будет работать: сначала переменной i будет присвоено значение 1, после чего выполнится указанная команда, т.е. в Memo добавится строка "1: 1", далее i станет равным 2 и снова команда повторится. Так произойдёт 100 раз - в результате в Memo и окажется 100 строк. Замечание Одна из часто встречающихся ошибок - использование значения переменной-счётчика после завершена цикла. После выполнения цикла значение переменной-счётчика не определено! В данном случае после завершения цикла значение i не будет 100, хотя по случайности оно может быть. Если Вы хотите использовать значение переменной далее, присвойте ей это значение явным образом. Вложенные циклы Что такое вложенные циклы, понятно из названия - это циклы, которые вложены в другие циклы. К примеру, если один цикл позволяет вывести лишь ряд чисел, то 2 цикла, один из которых вложен в другой, позволят вывести целую таблицу значений. Никаких специальных конструкций для вложенных циклов нет. Всё работает точно также. Переменные-счётчики циклов, как правило, называют буквами I, J, K, хотя название, конечно, может быть любое. Пример №2 Простейший пример применения вложенного цикла - вывод таблицы умножения. Для начала продумаем алгоритм: для вывода таблицы для одного конкретного числа (например, для 5), нужно создать цикл, который пройдёт значения от 1 до 9 и выведет произведение числа 5 на каждое из этих чисел. А чтобы вывести таблицу для самих чисел от 1 до 9, нужен ещё один такой же цикл.
Прерывание и продолжение цикла Примечание: то, о чём пойдёт речь далее, применимо не только к циклу по переменной, но и к циклам с пред- и постусловием. Не всегда выполнение фиксированного числа итераций приводит к нужному результату. Иногда в процессе выполнения могут возникнуть ситуации, когда цикл логично было бы завершить, не выполняя его до конца, т.е. нужно просто исключить все дальнейшие итерации. Такая возможность существует - для этого необходимо вызвать команду BREAK. Данная команда завершает цикл, который выполняется в данный момент, и продолжает выполнение программы. При этом текущая итерация не выполняется до конца
- прерывание происходит именно в той строке, где указана команда Break. Пример №3 Данный пример призван продемонстрировать применение команды Break. Во-первых, следует определиться с циклом. Смвольный тип (Char) - перечислимый, значит его можно использовать для переменной-счётчика цикла For. Во-вторых, для определения кода символа служит функция Ord(). В-третьих, нам не обязательно просматривать абсолютно все символы - если будет найден хотя бы один, значит требуемое условие выполнено и этот символ мы должны вывести как результат работы. Просматривать остальные символы не требуется. Опишем цикл, который последовательно пройдёт все символы от A до Z. Коды символов упорядочены согласно следованию соответстующих букв в алфавите, поэтому "пробег" произойдёт точно по алфавиту, для этого в коде не требуется дополнительно что-либо писать. Код будет приблизительно таким: procedure TForm1.Button1Click(Sender: TObject); var c: Char; begin for c := 'A' to 'Z' do if Sqr(Ord(c)) > 5000 then begin ShowMessage('Символ: '+c+' (код: '+IntToStr(Ord(c))+', квадрат: '+IntToStr(Sqr(Ord(c)))+')'); Break end end; Как сработает этот цикл: сначала будет взят символ "A", будет проверен код этого символа, после этого будет взят символ "B", проверен его код и т.д. Когда условие выполнится (это будет на символе "G"), будет выведено сообщение с результатом, но после этого цикл не продолжится - он тут же завершится. Мы уже нашли искомый символ, у нас есть результат, - зачем же тратить время на проверку остальных символов? В данном случае задержка по времени будет практически незаметна, ведь в алфавите всего 26 символов. Но что будет, если обрабатывать несколько тысяч записей? Цикл с шагом Цикл с шагом позволяет указать шаг прохода счётчиком указанного диапазона. Например, в случае, когда требуется пройти все числа от 0 до 1000, которые делятся на 10, шагом будет число 10, а границами диапазона - 0 и 1000. Цикл при этом будет выполняться таким образом: сначала будет взято первое число и выполнена соответствующая итерация, затем к счётчику будет прибавлена не 1, как обычно, а шаг, т.е. 10 - следующая итерация выполнится при значении счётчика, равном 10, далее - 20, 30 и т.д. Однако не составляет труда написать небольшую надстройку над обычным циклом, которая позволит это сделать. Этот пример также продемонстирует использование команды Continue. Всё просто - нам достаточно проверить, отстаёт ли текущее значение счётчика на целое число шагов от начального значения и, если да, то выполнить текущую итерацию, а если нет - продолжить цикл. procedure TForm1.Button1Click(Sender: TObject); var i,First,Last,Step: Integer; begin First:=3; Last:=100; Step:=10; Memo1.Lines.Clear; for i := First to Last do if ((i - First) mod Step) <> 0 then Continue else Memo1.Lines.Add(IntToStr(i)) end; Для тех, кто забыл: оператор mod выполняет деление с остатком. Разберёмся, как работает данный цикл: переменная-счётчик проходит значения указанного диапазона (в примере - от 3 до 100). Для проверки, является ли итерация "попадающей" под шаг, выполняется проверка, делится ли пройденное число единиц нацело на указанный шаг. В данном примере после 3 "попадание" будет на числе 13, т.к. 13 - 3 = 10 = Шаг * 1. Далее - 23, 33 и т.д. При этом первое значение диапазона всегда будет попадать в шаг, какое бы оно ни было, а последнее - не всегда (в данном случае 100 не попадёт). Блок команд для выполнения в цикле в данном случае указывается после else. Заключение Сегодня мы познакомились с циклами, определили, для чего они нужны, а также познакомились с циклом по переменной - каким образом этот цикл записывается и как работает. Помимо этого мы разобрались, как организовать цикл с шагом, и как применять команды остановки и продолжения цикла. В следующий раз речь пойдёт о других циклах - циклах с постусловием и циклах с предусловием. Оцените данный урок (1 - плохо, ..., 5 - отлично):
-1- -2- -3- -4- -5-. Комментарии в тексте письма приветствуются.
Самые популярные статьи на сайте: ∙ Создание непрямоугольных форм в Delphi Преобразование текста с помощью регулярных выражений
|
Название |
Описание |
Раздел |
Объём |
Ссылки |
MiTeC System Information Component Suite | MiTeC System Information Component Suite (MSICS) - это набор компонент для Delphi 5, 6, 7, 2005 (BDS3) и 2006(BDS4), предоставляющий огромное количество информации об операционной системе и компьютере. Компоненты написаны на чистом VCL и Ассемблере - никаких дополнительных модулей не требуется. |
1.37 Мб |
||
WMA File | Класс TWMAfile предназначен для извлечения информации из звуковых файлов формата WMA. Информация, которую можно получить: - информация о файле: объём файла, режим звуковых каналов, длительность, битрейт; - информация из тегов WMA: название, исполнитель, альбом, трек, год, жанр, комментарии. |
9 Кб |
||
OGGVorbis File | Класс TOggVorbis предназначен для извлечения информации из звуковых файлов формата OGG. Информация, которую можно получить: - информация о файле: объём файла, режим звуковых каналов, длительность, битрейт; - информация из тегов: название, исполнитель, альбом, трек, год, жанр, комментарии, производитель. |
10 Кб |
||
Квадрикс | Вариация на тему тетриса. Большое поле и нестандартные фигуры, включая такие, у элементов которых нет точек соприкосновения. |
167 Кб |
||
Пятнашки | Классическая игра "Пятнашки". |
313 Кб |
||
Всего новых файлов: 5 |
1.87 Мб |
Ведущий раздела: Bruder
Чайники веб-дизайна (часть I)
Эти мелкие, назойливые существа лезут изо всех щелей многострадальной Всемирной Паутины. Они привлекают к себе массу внимания и мешают заниматься делом, но даже новейшие импортные средства против них практически бессильны. Эти существа - чайники веб-дизайна.
Чайники вредны и опасны. Чайники - заклятые враги всего грамотного и профессионального. Чайники дезориентируют и сбивают с толку. Они путают, дезинформируют и перевирают. Они заразнее гриппа: начинающий веб-дизайнер, столкнувшись с чайником, почти со стопроцентной вероятностью сам превратится в чайника. Заразны не только сами чайники, но и отходы их жизнедеятельности, проще говоря - экскременты, которые они бесстыдно разбрасывают по Сети, называя «страничками» и даже «сайтами». Медицине известно множество случаев, когда начинающий веб-дизайнер, по неосторожности столкнувшись с такими фекалиями, испытывал непреодолимое желание скопировать поведение испражнившегося чайника.
Как же отличить чайника, притаившегося в темном закоулке халявного хостинга? Как избежать роковой встречи с ним и опасной заразы?
Из-за удивительной приспосабливаемости чайника и его способности к мимикрии обнаружить его бывает нелегко. Тем не менее, существуют определенные признаки, позволяющие заподозрить близость чайника раньше, чем он на вас нападет.
Чайник ничего не знает и ничего не умеет. Иногда он имитирует какие-то навыки, однако при этом всего лишь подражает каким-то образцам: чаще всего - другим чайникам. Выявить чайника можно, задавая ему вопросы о смысле тех или иных его действий. Почему заголовок сделан синим цветом на бежевом фоне? Почему маркеры круглые, а не, например, квадратные? Почему ширина таблицы 620 пикселей, а не 610 или 630? Чайник никогда не сможет ответить на подобные вопросы, потому что никогда не задумывается над собственными действиями. В лучшем случае он сошлется на то, что «так все делают», или на то, что «знакомый NN сделал так же, мне понравилось и захотелось повторить».
Чайник не способен чему-либо учиться. Чайник обладает только одним механизмом реакции на критику: агрессией. Ему бесполезно объяснять, какие недостатки есть в его работе - он может понять только то, что его работа вам не понравилась, а это является для него безусловным поводом для агрессии. Hе рекомендуется критиковать чайника, находящегося без намордника и не привязанного к какому-либо устойчивому предмету.
Древние иногда путали чайника с человеком, приписывая чайнику человеческие качества и ожидая от него человеческой реакции на раздражители. В наше время совершенно очевидно, что чайник является человеком не более, чем, скажем, попугай, повторяющий некоторые выражения. В связи с этим не выдерживают никакой критики гипотезы об обучаемости чайников. Действительно, иногда при попытке обучить чайника, как человека, от него поступают отдельные реакции, свойственные человеку. Однако эти реакции вызываются не тем, что он что-то понял и осознал, а, опять же, стремлением неосмысленно подражать наиболее эффектным действиям учителя. В отдельных случаях наблюдалась даже имитация чайниками обучающей деятельности, когда они среди своей популяции копировали поведение того, кто их обучал.
Простейшие эксперименты на выявление сообразительности позволяют расположить чайников приблизительно между морскими свинками и крысами, а это очень низкий уровень для отряда приматов, к которому чайники принадлежат по физиологическим показателям.
Впрочем, по формированию и закреплению условных рефлексов чайники превосходят даже людей. Один из наиболее хорошо изученных на чайниках условных рефлексов - денежный рефлекс. За работу, удовлетворяющую некоторым критериям (поставленным экспериментатором), чайники получали подкормку в денежном эквиваленте, причем размер подкормки зависел от того, насколько близка работа к установленным критериям.
Вот один из наиболее показательных случаев. Чайник, использовавший в работе тэги заголовков <H1> и <H2> (вместо тэга <FONT>, которым обычно пользуются чайники), получил от экспериментатора солидную подкормку. Уже в следующей работе чайник использовал четыре уровня заголовков, а еще в одной - двенадцать, употребив для этого тэги <H1>-<H12>, хотя и без всякой связи со структурой опытного документа.
Более продолжительное развитие денежного рефлекса приводит к тому, что чайник совершает только те действия, которые связаны в его представлении с подкормкой. Вся остальная подражательная деятельность чайника подавляется.
Продолжение следует...
:))
Присылайте компьютерные анекдоты, рассказы и истории по этой ссылке и они будут опубликованы в ближайших выпусках рассылки.
Архив рассылки: http://subscribe.ru/archive/comp.soft.prog.delphifaq
В избранное | ||