Информационный сервер для программистов: Исходники со всего света. Паскальные исходники со всего света
  Powered by Поисковый сервер Яndex: Найдется ВСЁ!
На Главную Pascal Форум Информер Страны мира
   Статьи о Паскале    >>    Ребята, пишите программы!
   
 
 Ребята, пишите программы!    Евгений Скляревский 26.01.2001


Начало серии статей по занимательному программированию на Turbo Pascal. Программа, демонстрирующая иллюзию кафельной стенки, в которой ряды плиток кажутся искривлёнными, хотя они вовсе не искривлены. BGI graphics.


20k 
 
Домашний Компьютер

Ребята, пишите программы!

Евгений Скляревский
26.01.2001

“Один из первых, вы решили
Доверить дважды два машине.
И, вот, почти уж сорок лет,
Как мы используем ответ”
(Из поздравления ветерану)

Буквально недавно, по воспоминаниям ветерана, моё поздравление которому вынесено в эпиграф, пришли первые ЭВМ. Программы (аппроксимация кривой дугами парабол) вводили, втыкая штырьки в отверстия в определённой комбинации. Позже программисты, получив время на машине, бегали с колодами перфокарт, которые сами набивали и перебивали. Потом программистов перестали пускать к машине – они передавали колоды операторам в белых халатах, а те считали и возвращали им распечатки с ошибками и перфоленты. Диалог с ЭВМ шёл через “консоль” – пишущую машинку. Машина печатала на ней сообщения и запросы, а оператор вводил команды. Потом всем поставили дисплеи, снова “приблизив” к машине и самыми частыми фразами стали: “Перезагрузка, недельное копирование, перезагрузка, месячная профилактика, перезагрузка”.

Прекращаю трясти бородой и перехожу к нынешней действительности. Компьютеры на столах во всех организациях и у многих дома. Бухгалтерия считает зарплату и баланс, художник рисует, в банках проводят платежи. Почти все компьютеры используются в режиме пишущей машинки для вывода бесконечных накладных, писем, актов, приказов и статей. Картина будет неполной без обязательных шариков и пасьянса. По данным “Компьютерры” №8/99 (стр. 39) ответы на вопрос: “Ваш домашний компьютер используется в основном для:” распределились следующим образом. Для работы в Интернете – 32.9%; для моего бизнеса – 27%; для игр – 20.7%; у меня нет дома компьютера – 12.3%; как пишущая машинка – 6.9%. За прошедшие полтора года результат, интересующий нас, вряд ли изменился.

К чему я это всё? К тому, что компьютер перестал быть средством написания программ, а стал окном в Интернет, живой энциклопедией, альбомом фотографий, пишущей машинкой и большим тетрисом. А жаль – не то, что стал, а то, что перестал. Программы не пишут даже те доли процента, которых не хватает до ста в вышеприведённом опросе. Один знакомый, недавно купивший компьютер, спросил меня: “Зачем нужны языки программирования, разве не все программы написаны?” (Разве не все слова сказаны?) Действительно, вроде все программы есть – графические, текстовые и музыкальные редакторы, бухгалтерия, делопроизводство, кадры, проектирование всего и вся. Но, могу вас заверить, в любой организации найдутся процессы, поддающиеся автоматизации с помощью ПК. И дело даже не в организациях с их процессами, шут с ними, а в том, что (наконец, добрался до главного) писать программы очень приятно. Вообще, работа на компьютере вызывает положительные эмоции. Психологи пометили такой эффект: человеку приятно даже просто нажимать на клавиши, не говоря уже о тыканьи мышкой в яркие кнопки. (Поэтому выбор между AutoCAD’ом и кульманом решается в пользу AutoCAD’a , хотя приводятся мотивированные технические обоснования такого выбора.) Особенно притягательна работа на ПК в WINDOWS 95/98 – на фоне любимой картинки красивые иконки, окна, звуки, курсоры, заставки – и всё это можно настраивать по вкусу и менять каждый месяц или каждые 10 минут. И, всё-таки упорно возвращаюсь к главной мысли: приятен именно сам процесс написания (обдумывания, кодирования и отладки) программ. Даже если это нуднейший учёт движения имущества или тестик из двух команд. В любом случае, это прежде всего общение с компьютером, с языком программирования – с умным, остроумным, язвительным, вредным и одновременно дружелюбным собеседником. (В отличие от людей не подвластным плохому настроению, плохому характеру и плохому воспитанию. И не надо обвинять в человеконенавистничестве - я знаю несколько неплохих ребят и пару милых женщин.) И не просто общение, а совместная взаимозависимая деятельность по созданию хорошо работающей программы. Даже ещё круче – это настоящая, захватывающая полноценная жизнь, а всё, что вне её – блеклое и скучное ожидание старости.

Всё вышесказанное должно было подготовить терпеливого читателя к призыву: “Ребята, пишите программы!” Найдите и установите какой-нибудь Бейсик (можно Turbo Basic, можно Qbasic – есть русифицированный, можно старенький, но надёжный GWBasic, но не Visual Basic, это не для начинающих) или Turbo Pascal (версии 5.0, 5.5 или, лучше 7.0, входящий в пакет Borland Pascal 7.0). Начните, попробуйте, выведите на экран сообщение, потом выведите его в разных зонах экрана, потом поменяйте цвет и фон букв. Нарисуйте линию, круг, прямоугольник, поменяйте их параметры. Проделав эти опыты, вы попадёте под магическое действие особой внутренней пружины: “А что, если что-то поменять?” И попробуйте, поменяйте. Ваши опыты – это лучшее применение для вашего компьютера. Ваши опыты, даже самые простенькие, увеличивают сумму знаний всего человечества, если это для вас важно. Если нет, всё равно, показывая полученные интересные результаты, вы вовлечёте в программирование хотя бы одного из сотни знакомых, тот ещё кого-нибудь, это не менее достойно, чем посадить дерево. Те, кого волнует практическое применение, обязательно найдут, что можно поручить компьютеру из своих хлопот – личных, на работе, дома – везде. А те, кому важнее получить ответы на интересные отвлечённые вопросы (например, количество счастливых билетов или уравнение цветка сирени) получат пропуск в сказочную страну прекрасной бесполезной информации.

А не хотите, и не надо, что это я пристал к любезному читателю, может он терпеть не может программирование и программистов.

Так зачем нам нужен собеседник? Каждому человеку надо что-то рассказывать. Когда мы говорим, происходит процесс укладывания “по полочкам” новых, ещё не нашедших своего места мыслей, освобождающий “место” для следующей порции. Если человек долго не рассказывает, он ощущает дискомфорт, переходящий в невроз или что-то ещё (прислушайтесь к своему телу). Обратите внимание: во время беседы каждый торопится выговориться, не слушая собеседника. (Кстати, написание писем и статей – то же самое выговаривание, нужное только автору, поэтому не надо ничего читать – мои статьи можно.) Так вот: компьютер обладает психотерапевтическим эффектом, заменяя в некотором приближении, конечно, собеседника. Любые манипуляции с компьютером – даже набор текста и укладывание цветных шариков спасает нас, возможно, от шизофрении.

Мир безвозвратно разделился на две части. Первая, надо полагать, (читающие эти строки) будет всю ночь рисовать фракталы, крутить флексагоны и подбирать устойчивые конфигурации в игре “Жизнь”. Вторая, подавив зевок, скажет: “Красиво, только зачем это нужно?”. Не будем отвечать. Если человек спрашивает, значит ему уже нельзя объяснить, пусть доживает остатки дней своих серо и неказисто.

Как говорил великий Штирлиц, запоминается последняя фраза. Так вот, по словам Лазарева, автора “Диагностики Кармы” (одна из самых заметных теорий из обрушившихся на нас после отмены обязательного марксизма-ленинизма), программирование, как процесс упорядочивания хаотической информации, разрушает Карму. А это, как известно, отражается на успехах, на здоровье, на детях и на следующей жизни. Но, наверняка, отказ от программирования из-за лени и нелюбопытства разрушает Карму ещё сильнее. Есть над чем подумать. Ну, вот, вступление получилось сумбурное, но непоследовательность в поступках - одно из основных отличий разумной материи от неразумной.

Итак, мы начинаем (почти как Масляков) серию статей по занимательному программированию. Для начала вам понадобится Turbo Pascal 5.5 (можно скачать, например, здесь). Запустите файл turbo.exe, наберите текст программы и нажмите Ctrl+F9 для выполнения ее.

Об иллюзии кафельной стенки, в которой ряды плиток кажутся искривлёнными, хотя они вовсе не искривлены.

“Иллюзия кафельной стенки” возникает при разглядывании плоскости, покрытой чередующимися квадратами или прямоугольниками, которые разделены тонкими “швами”. Иллюзия состоит в том, что горизонтальные линии кажутся сходящимися к левой или правой стороне. Направление схождения меняется от ряда к ряду: в одном ряду плитки как бы увеличиваются слева направо, в другом – справа налево.

Кафель

Специалисты по зрительному восприятию обратили внимание на эту иллюзию в начале 1970-х годов, после того, как она была замечена на стенке кафе в Бристоле, в Великобритании. Р. Грегори и П. Херд из Бристольского университета опубликовали первый подробный анализ этой иллюзии. Они связали её с гораздо более старой иллюзией, известной под названием узора Мюнстерберга и названной так по имени психолога Х. Мюнстерберга, описавшего её в 1897 году. В узоре Мюнстерберга верхняя и нижняя стороны каждой плитки кажутся наклонными и направление наклона меняется от ряда к ряду. Однако эффект схождения здесь слабее. Грегори, Херд и другие исследователи заметили, что иллюзия кафельной стенки проявляется особенно отчётливо, когда тёмные и светлые плитки контрастируют по яркости, а шов достаточно узок и по яркости занимает промежуточное положение между тёмными и светлыми плитками. Если яркость шва такая же, как у светлых плиток, иллюзия ослабевает и даже может совсем пропасть, если же шов совсем светлый, иллюзии не возникает вообще. Когда шов такой же тёмный, как и тёмные плитки, возникает иллюзия Мюнстерберга со слабым схождением; если он более тёмный, схождение отсутствует. Плитки не обязательно должны быть чёрными и белыми, они могут быть цветными, но если они не различаются по яркости, иллюзии не возникает. Плитки должны чередоваться в строгом порядке. Однако, если они смещены так, что образуют в точности шахматную доску, иллюзия так же отсутствует.

Мы предлагаем, учитывая важность темы, набрать приведённую ниже программу в Turbo Pascal’e и понаблюдать на экране иллюзию кафельной стенки:

PROGRAM KAFEL;
USES CRT,GRAPH,DOS;
VAR
  M,S,X,Y : INTEGER;
  C: STRING;
  procedure GrInit;
  var
    GraphDriver : Integer;
    GraphMode   : Integer;
    ErrorCode   : Integer;
  begin 
    GraphDriver:= Detect;
    InitGraph(GraphDriver,GraphMode,'');
    ErrorCode:=GraphResult;
    if ErrorCode <> grOk then 
      begin
        Writeln('Ошибка графики',GraphErrorMsg(ErrorCode));
        Writeln('Программа остановлена’);
        Halt (1)
      end {if}
  end;
{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
BEGIN
  GRINIT;
  SETFILLSTYLE(1,0) ; {1}
  BAR(0,0,640,480) ;
  SETFILLSTYLE(1,15) ; {2}
  Y:=0 ; M:=40 ; S:=2 ; {3}
  REPEAT
    X:=0 ;
    REPEAT
      BAR(X,Y,X+M,Y+M) ;
      LINE(0,Y,640,Y) ; {4}
      X:=X+M+M+S;
    UNTIL X > 640 ;
    Y:=Y+M+S ;
    X:=M DIV 2 ; {5}
    REPEAT
      BAR(X,Y,X+M,Y+M) ;
      LINE(0,Y,640,Y) ; {6}
      X:=X+M+M+S;
    UNTIL X > 640;
    Y:=Y+M+S;
  UNTIL Y>480;
  C:=READKEY;
  CLOSEGRAPH;
END.

В программе можно поменять цвета плиток в строках 1 ( заливка фона) и 2 (заливка выводимых в цикле квадратиков), можно, так же, менять размер плиток и ширину шва – переменные M и S в строке 3 . Ещё можно понаблюдать эффекты от удаления линий на швах, удалив строки 4 и 6, и от попытки изменить сдвиг между рядами в строке 5. Попробуйте, и вы будете вознаграждены удивительными эффектами. И если вам придётся выбирать рисунок при укладке настоящего кафеля, то вы уже наверняка сможете удивить всех иллюзией искривления. Иллюзия возникает из-за особенностей устройства фоторецепторов на сетчатке глаза.



Домашний Компьютер