Коваль Леон: другие произведения.

Быть дедом - заботливым или озабоченным

Сервер "Заграница": [Регистрация] [Найти] [Рейтинги] [Обсуждения] [Новинки] [Помощь]
  • Оставить комментарий
  • © Copyright Коваль Леон (leonko@walla.com)
  • Обновлено: 31/12/2010. 37k. Статистика.
  • Обзор: Израиль
  • Иллюстрации: 10 штук.
  •  Ваша оценка:
  • Аннотация:
    В т.ч.: сольфеджио, НЛО, шомЕр масАх, будильник - на Паскале


  •    Леон Коваль
       Быть дедом - заботливым или озабоченным
      
       Это - третий текст из серии "Быть дедом". Названия и адреса двух предыдущих указаны ниже. Все тексты серии связаны между собой и с программированием (на Паскале) для школьников.
       1.Быть дедом http://world.lib.ru/editors/p/professor_l_k/070711_koval_bitdedom.shtml
       2.Быть дедом. "Долбица" умножения и Паскаль
       http://world.lib.ru/editors/p/professor_l_k/070725_koval_dolbicaotdeda.shtml
      
       Сольфеджио. Название раздела звучит красиво, но оно не шибко точное. Ибо сольфеджио заключается в вокальных упражнениях чтения(воспроизведения) нот по тексту или решении обратной задачи - определения нот при их исполнении.
       Когда старший внук лет семь назад обнаружил неплохой слух и желание поучиться музыке на электронном пианино, которое, кажется, называется, "фоно", родители приветствовали это интересное, между прочим(c), начинание и обеспечили отпрыска инструментом и учителем. А его верный дед решил развить музыкальные слух и память начинающего музыканта. Была придумана компьютерная игра, в которой могут участвовать сразу несколько человек. До начала собственно игры программа напоминает стандартные частоты в герцах нот, пронумерованных от 1 до 73, в пределах шести октав и дважды воспроизводит их. Затем программа настраивается в диалоге по числу участников и количеству сетов. Участники получают в свои счетчики очков бонус, равный минус удвоенному числу сетов. В каждом сете генерируются случайные звуки из числа заявленных, и игроки должны указать номер исполненного звука. На экране сообщается расхождение со знаком(выше, ниже) от точного ответа, и расстояние (без знака) добавляется в соответствующий счетчик очков. Звук можно повторить, если на запрос номера звука указать число меньше 1 или больше 73. За каждое повторение игроку добавляется одно штрафное очко. Победителем, понятно, считается тот игрок, чья накопленная сумма наименьшая.
       Прошло много лет, у внука уже другие интересы, на фоно он играет редко. Но забытую программу Nota протестировал теперь с интересом. Ноты он угадывал довольно точно, а вот с октавами былы проблемы: ответы могли отличаться от правильных на 12 единиц или вверх или вниз.
       Следует уточнить, что программа будет звучать, если в компьютере сохранился звуковой генератор, выдающий "монохроматический" звук по заданной частоте в герцах. Такие генераторы теперь есть не во всех новых машинах. А переподключить программу к колонкам, если таковое возможно на продвинутых компиляторах, я не сумел.
       Недавно мельком видел фрагмент какого-то русского фильма, в котором два бомжеватых персонажа готовились насладиться баночным пивом, повидимому просроченным. Один из них пощелкал по помятой банке, прислушался и изрек: "До-диез. Сойдет". Замечательная иллюстрация к теме "Музыка и жизнь".
       Текст программы Nota.pas :
      
     []
      
     []
      
      
       Дед озабочен. Если терпеливый читатель зайдет на титул нашей с внуком странички в интернете по адресу http://koval-ron.tripod.com/ (посещается она слабо, да и мы ее почти не развиваем в последнее время), кликнет по полигону ОГЛАВЛЕНИЕ, то откроется ему это самое оглавление с отсылками на разнообразные шедевры автора в первоначальной редакции. Надо спуститься "вниз" по перечню. Наткнетесь на заголовок и подзаголовок:
       "Список оригинальных и переведенных на русский язык израильских учебников по математике и программированию с адресными отсылками. Комментарий и историю вопроса см. в тексте "Как я пытался помочь израильской системе образования"".
       А далее идут названия полутора десятков учебников, переведенных с иврита на русский, и отсылки к ним. Уточним: два учебных пособия по программированию составлены мною на русском и затем переведены мною же (азОхун вей!) на иврит (впрочем редкие пользователи - носители иврита говорят, что -да! - смешно, но понять можно).
       Обещание написать текст "Как я и т.д" не выполнено по сей день. И бог с ним.
      
       Переводить израильские учебники по математике я начал с хорошего пособия по алгебре для девятого/десятого класса, используя для этого пару часов еженедельно по дороге домой и на работу в ж/д транспорте. Содержание несложное, терминология понятная, язык улучшается - все в предверии недалекого 60-летия. Потом я два года маленько (сколько позволял Институт национального страхования - БитУах ЛеумИ, на попечение которого мы с женой перешли) занимался вспомогательными уроками по программированию в местной гимназии и техникуме - либо для продвинутых, либо, наоборот, для отстающих учеников. А кроме того немного репетировал дома и по математике и по программированию. Список переведенных книг по математике сложился спонтанно - в соответствии с тем, чем пользовались подопечные. Надо сказать, что на нашей страничке сохранена лишь часть переводов, довольно много крупных фрагментов переложений разных пособий, в т. ч. Открытого Университета по алгебре, анализу, статистике и даже началам функционального анализа (для нематематиков, понятно) на нашу страничку не помещены. Правда, по высшей математике у меня было всего две ученицы - красивые, надо сказать, "русиет" из Хайфского университета. Очень боялся опозориться, но пронесло. Что ни говори - нас недурно учили более 50 лет тому назад.
      
       (Замечу в скобках, что израильские школьные учебники по математике, как освященные Минпросом, так и изданные вольно, в основном, хорошего качества. Пособия же по программированию для средних школ мне не понравились. Они сильно уступают соответствующим российским книжкам, изданным примерно в то же время. Русские учебники рассчитаны на получение конкретного знания и умения. Израильские же дают лишь представление о предмете).
      
       Во второй половине 90-х среди подростков, привезенных в Страну в возрасте старше 14 лет, стали преобладать т.н. полукровки, четвертькровки и т.д. У многих из них не было еврейской прививки - пробивать головой стенку. Возникли проблемы с математикой, которую ребята и прежде не жаловали. А учить математику надо было на малопонятном первые годы неродном языке. Родители везли их с просторов СНГ от войны или просто от призыва в местные армии. Евреями они себя не считали, а притворяться, как иногда их родители, - не умели. В некоторых классах густопсовых были единицы, и стадная стихия обращала их в париев. Что могло превратить обсуждаемый котингент в нормальных израильтян, а их будущих потомков - в евреев? Выделю два важнейших инструмента: религиозное воспитание и/или приличное образование. Мне известны хорошие религиозные(неупертые, скажем так) интернаты, особенно для девочек, которых учителя вели вплоть до замужества. Хорошие (цитирую Бабеля) вырастали еврейки.
       А по линии образования - надо было всемерно помогать. В Минпросе пошли на то, что экзамен по математике на атестат зрелости(багрут) можно было сдавать по-русски. Но это после того как программа выполнялась строго на иврите.
       Я вступил в переписку с тремя ведомствами по поводу размещения в Интернете уже выполненных переводов и пособий по математике и программированию (после необходимой редакции, а далее - и новых) - Минпросом, Минабсорбцией и Сохнутом. Сохнут я сооблазнял тем, что таким образом можно внедрить израильские учебники и программы в русско-еврейских школах заграницей.
       Не буду, как и обещал выше, рассказывать о перепалках с чиновниками. Укажу лишь некоторые аргументы Минпроса: пусть учат иврит; возможность использовать русские версии книг по математике и программированию помешают ученикам в тотальном переходе на иврит; у бедняг олим нет компьютеров; учебники категорически нельзя размещать в Интернете; математику надо учить по бумажному носителю с карандашом и тетрадкой. С последним указанием я полностью согласен. Но разве компьютеры этому мешают? (Прошло лет 7-8, и Минпрос принял решение о размещении в Интернете основных школьных учебников - на иврите).
      
       Постепенно я терял интерес к затеянному делу, но подрос внук. Когда ему стукнуло лет 11, он соорудил для деда вышеупомянутую страничку и поместил туда накопленные тексты. Я все ждал, что может быть сама по себе образуется некоторая аудитория, кто-то воспользуется. Иногда ГУГЛ выдает отсылки именно на эту часть странички, но в основном, увы ...
       В этом сентябре Рон пошел в десятый класс. Я уговариваю его записаться и на программирование (в Израиле, кроме нескольких обязательных предметов, ученик сам набирает себе другие дисциплины по выбору под необходимую сумму баллов). А это значит, надо и мне подготовиться: освежить в памяти Паскаль и обратить внимание внука на текст под названием "Введение в программирование. Язык программирования Паскаль - TURBO PASCAL 7.0". На первую половину русского текста можно выходить и прямо по адресу http://koval-ron-texts4.tripod.com/pasrus.htm , а на вторую - по адресу
       http://koval-ron-texts4.tripod.com/pasrus1.htm .
      
       А во внешнюю аудиторию призываются моложавые деды и молоденькие бабули - впрочем, я об этом уже писал в предыдущем шедевре "Быть дедом. "Долбица" умножения и Паскаль".
      
       Немного общих рассуждений. История человечества это непрерывная цепь открытий и изобретений. Некоторые из них определяли целые эпохи мирового развития. Времена мощного распространения важных открытий часто именуют промышленными революциями.
       Возможно, первая такая революция состоялась в далекой древности и связана она с изобретением колеса. Окружающая нас природа не располагает подобным элементом передвижения. И не все человеческие цивилизации, в древности существовавшие изолированно, пришли к изобретению и использованию колеса. К примеру, интеллектуально развитые индейские цивилизации Америки не знали колеса. И это обстоятельство существенно облегчило завоевание Америки немногочисленными европейскими конкистадорами в 16 веке нашей эры.
      
       Промышленная революция, состоявшаяся на рубеже 18 и 19 веков, связана с изобретением паровой машины и появлением железных дорог. Принято отсчитывать новую историю человечества именно с этого периода. В течение 200 последних лет промышленные революции сменяли одна другую с нарастающей скоростью. Достаточно вспомнить появление промышленного электричества, двигателя внутренного сгорания, авиации, радио, ракетной техники, ядерной энергии, биологических технологий ...
       Все эти открытия человеческого гения, его мышления развивают физическую мощь человека, способствуют тому, чтобы он производил больше товаров, передвигался быстрее, выше, дальше, овладевал все новыми видами энергии.
      
       Но одно достижение человечества - промышленная революция новейшего времени - принципиально отличается от всех упомянутых выше. Это - изобретение и распространение компьютеров. Последние усилили интеллектуальную мощь человека. Термины новой дисциплины лишь подчеркивают сходство между действиями компьютера и деятельностью человеческого мозга: компьютер запоминает, пишет, читает, считает, решает логические задачи, а теперь и - учит, развивает, развлекает, информирует ...
      
       Профессионально современный человек (не специалист - электронщик) может общаться с компьютером как пользователь и как программист. Программисты развивают компьютерные технологии, расширяют области применения компьютеров и , следовательно, развивают и интеллектуальные возможности человека.
      
       Компьютер как электронное устройство (Hardware) не может работать без программного обеспечения (Software). Непосредственно с электроникой взаимодействует внутреннее программное обеспечение, именуемое операционной системой. Системные средства и могучие оболочки типа WINDOWS создаются системными программистами. Следущая группа программистов занимается разработкой трансляторов (компиляторов) с алгоритмических языков на языки электроннных машин. Программистов этих двух сословий я бы назвал аристократами, дворянами матобеспечения. Но самый широкий круг программистов - разночинцев решает т.н. 'проблемные' задачи. С одной стороны они пользуются операционными системами и трансляторами, а с другой - разрабатывают математические модели (алгоритмы) решения задач и реализуют их с использованием языков программирования.
       Проблемные программисты должны быть сведущими в той области науки, техники, экономики, которой они занимаются, знать вычислительную математику и обладать определенными способностями к собственно программированию. Эти особые человеческие свойства можно свести к :
       - способности представлять сложную задачу в целом - от входа в нее до получения результатов - и учитывать при этом интересы пользователя;
       - способности разложить задачу на элементарные взаимосвязанные части и заставить их действовать правильно и эффективно;
       - склонности получать удовольствие от процесса общения с компьютером , поиска алгоритма, собственно программирования , отладки программ и достижения поставленных целей.
      
       "Hardware" и "Software" в моей "комнате безопасности". Мне уже доводилось рассказывать, как оснащено мое компьютеризированное рабочее место в помещении, которое на иврите называется "хедер битахон". Можно обратиться к тексту "Алма-Ата. Всемирные РФ и ГРФ", http://world.lib.ru/p/professor_l_k/070322_koval_rf_grf.shtml
       В нем есть раздел "О вышеупомянутом Маалоте и кое-что о себе - любимом".
       Итак несколько последних лет у меня была машина с такими основными характеристиками: "потактная" частота (кажется так это раньше называлось), от которой зависит скорость исполнения операций, 600 Mhz; объем RAM (оперативная память) 128 мег; дисковая память 9.3 гиг. Плюс комбайн с принтером, сканер и колонки. По старой памяти казалось, что таких средств хватит мне до конца дней. Ведь на первом моем домашнем компьютере в Израиле образца 92 года вся дисковая память составляла 80 мег! Но! - дворяне программирования перестали экономить такую теперь доступную память. А желание иметь у себя много всего в компьютере не соответствует возможностям последнего. Кроме того любимая внучка Керен, которой этим летом исполнилось 6 лет(осенью пошла в первый класс), все активнее во время пребывания у нас стала вытеснять деда с его кресла перед экраном, желая порисовать или поиграть. Пришла пора размежевания.
       Комьютеры в торговой сети дешевеют быстро. И мы осилили покупку нового комплекта, состоящего из собственно компьютера и плоского монитора. Теперь у нас два компьютера, они связаны кабелем. Левый(см. нижеследующую картинку с мониторами) - мой: скорость 1.6 Ghz, Ram 512 мег, дисковая память 80 гиг. Должно хватить до конца дней. А правый - для Керен. Принтер, сканер и колонки достались левому компьютеру, у которого, как выяснилось, "внутри" нет генератора звукового сигнала. И программы Паскаля со звуком (см. выше и ниже) только похрюкивают на колонках(или даже помалкивают). Разрешить эту проблему я не смог, надеюсь на помощь читателей - более молодых и современных дедов и бабуль. Этот самый генератор, нужный нам в ряде программок, и хиленькие колонки внутри нового монитора достались Керен.
      
     []
      
       Все системное матобеспечение мы с внуком обновляем благодаря Интернету. И только бесплатно, если это возможно. Год или полтора назад Рон возобновил у нас компилятор (транслятор) "Турбо Паскаль-7" редакции 92 года. Иконка этого компилятора стоит первой справа на следующей картинке.
      
     []
      
       Все бы ничего, но мы сменили Антивирус. И новый Антивирус стал обнаруживать какую-то гадость в некоторых (далеко не всех) создаваемых этим компилятором исполнимых файлах. (А прежний Антивирус ничего такого не находил). После безуспешной борьбы с обнаруженной бякой решено было транслятор 92 года удалить и поискать другой такой-же. Нашли - редакции 93-94 годов (см. иконку в центре картинки).
       Оба "досовских" компилятора Паскаля создают очень экономные по памяти .exe-файлы - в соответствии с требованиями старого времени. Но это достигается, в частности, с помощью невключения в исполнимый файл ряда библиотечных средств. Например, графических. На графическую библиотеку Паскаля надо ссылаться несложным, но особым образом. В MS DOS все было просто, теперь же под WINDOWS надо изворачиваться.
       Мы решили поискать еще чего-нибудь. И нашли! Новенький(2007 года) FreePascal (Свободный Паскаль - иконка слева). Большой компилятор, занимающий на диске раз в 30 больше места, чем TP. А создаваемые им исполнимые модули длиннее раз в 15(согласно принципа "все свое ношу с собой"). Звукового генератора FPC не "видит". Подозреваю, что я не разобрался с опциями, но для этого надо-таки знать английский. А работать с компилятором FPC и создаваемыми им .exe файлами - одно удовольствие.
      
       Три последних параграфа настоящего текста посвящены реализациям несложных графических алгоритмов, содержащих элементы двухмерной мультипликации. В книжку они не вошли (как и "долбица" с "сольфеджио"). Их техническое воспроизведение "забегая вперед" не повредит, впрочем к этим программкам можно будет вернуться и по мере освоения (я все-таки надеюсь) самого "Введения".
       На предпоследней иллюстрации на левом мониторе можно разглядеть вывод программки - будильника(см. ниже).
      
       Охранитель экрана (шомЕр масАх). Напишем и подробно прокомментируем собственную нехитрую версию популярного когда-то сохранителя экрана. Наш ScreenSaver запускается без задания дополнительных параметров, а его действие прекращается нажатием на любую клавишу. Картинка сохранителя представляет из себя пару пятиугольников, которые деформируются и крутятся в течение, примерно, 2 сек., а затем сменяются другой парой пятиугольников.
      
     []
      
      
     []
      
      
       {1} - x1, y1 - пиксельные координаты левого верхнего угла прямоугольника, в котором будут совершаться графические действия.
       {2} - sn, cs - синус и косинус угла в 1R, необходимые для трансфомации пятиугольников (поворота координат).
       {3} - массивы описания пятиугольников с замыканием.
       {4} - запуск генератора случайных чисел от системных часов.
       {5} - переменной GrafDriver присваивается код автоматического определения драйвера графического устройства.
       {6} - инициализация графического режима.
       {7} - пиксельные координаты правого нижнего угла прямоугольника для графики.
       {8} - в нашем хранителе экрана крутится два пятиугольника: второй создается из первого переменой порядка координат(х на у и наоборот). С помощью отношения ot учитывается анизотропия размеров прямоугольного окна в пределах экрана(например, 640 пиксел по х и 480 пиксел по у). Для указанных размеров экрана это отношение с десятикратным увеличением числителя и целым делением равно
       ot = 10*(619-20) div (459-20) = 13.
       {9} - устанавливается черный цвет фона экрана.
       {10} - очистка экрана, окрашивание его в цвет фона, установление текущей позиции графического курсора в точку (0, 0) .
       {11} - задание параметров рисуемых линий: стиль - пунктир, шаблон - обычно задается нулем, толщина линии - нормальная.
       {12} - установление режима построения отрезков прямых процедурой Line: при наложении линий , созданных этой процедурой, их изображения гасятся.
       {13} - главный цикл программы, повторяется до нажатия какой-либо клавиши.
       {14} - формирование координат случайных пяти последовательных вершин базисного многоугольника в пределах прямоугольного окна(х1,у1 - левый верхний угол, х2, у2 - правый нижний угол).
       {15} - замыкание пятиугольника.
       {16} - хх и уу, составляющие 1/50 долю приращения соответствующих координат левого верхнего угла окна и третьей вершины базисного пятиугольника со случайной добавкой, будут использоваться для деформации многоугольника.
       {17} - три оператора, включая while, создают два случайных, обязательно различных кода цвета пятиугольников из второй(яркой) половины палитры.
       {18} - цикл изображения 50 кадров вращающихся и деформируемых пятиугольников.
       {19} - цикл получения координат второго пятиугольника с помощью перемены х на у и наоборот - с учетом ot(см. {8})
       {20} - изображение одного кадра - цикл рисования 5 сторон первого многоугольника{22} (хранится в массиве ху) цветом к1{21} и второго(из массива ух) - цветом к2.
       {23} - удаление линий предыдущего кадра (оператор if и следующий за ним цикл), сохраненных в массивах uv и vu (см. ниже). (В программе установлен прокоментированный в {12} режим работы процедуры Line - гашение совпадающих отрезков прямых). Следует обратить внимание на то, что программа сперва воспроизводит линии текущего кадра, а затем стирает линии предшествующего. Высокое быстродействие компьютера не дает заметить, что на экране одновременно находится два изображения, с другой стороны деформация и вращение многоугольников воспринимается мягче, 'непрерывней'.
       {24} - каждый кадр высвечивается на экране в течение 40 миллисекунд, что примерно соответствует принятым в кино 24 кадрам в сек.
       {25} - последний(50-й) кадр демонстрации очередных пятиугольников стирается сразу по завершении временной паузы.
       {26} - цикл сохранения в массивах uv и vu описаний текущих многоугольников для удаления их изображений в следующем кадре.
       {27} - приступаем к формированию следующего кадра: в пятиугольнике ху координаты третьей вершины изменяются на приращения, вычисленные в операторах {16}.
       {28} - вычисление среднеарифметического значения координат вершин пятиугольника (определение примерного положения его центра).
       {29} - смещение координат вершин пятиугольника комбинацией движений к центру и от него.
       {30} - поворот полученных выше координат вокруг центра на 1R с использованием формул геометризации из параграфа 9.1 (см. книжку).
       {31} - вычисление приращений координат вершин от центра.
       {32} - определение повернутой первой координаты.
       {33} - (два оператора if) защита от выхода за пределы окна первой координаты. Три следующих оператора выполняют те же действия над второй координатой.
       {34} - замыкание многоугольника.
       {35} - выход из графического режима.
      
       Летающая тарелка на фоне звездного неба. Этот заимствованный пример (у Фаронова В.В. - см. литературу в книжке) иллюстрирует способы сохранения и вывода изображений: одноразовое создание и запоминание графического фрагмента в динамической памяти('куче'), его перемещение во взаимодействии с фоновым изображением(наложение, сохранение, стирание и т.д.). В алгоритме исправлен небольшой недочет. Программа запускается без задания дополнительных параметров; для прекращения ее действия нужно нажать на любую клавишу - исчезнет тарелка, а затем - на клавишу Enter.
      
     []
      
       {1} - постоянная, определяющая размер изображения тарелки в пикселях.
       {2} - пауза сохранения на экране текущего изображения тарелки в миллисекундах.
       {3} - нетипизированный указатель на место в динамической памяти('куче'), где хранится описание изображения тарелки.
       {4} - булева переменная, с помощью которой осуществляется 'отскок' тарелки внутрь прямоугольной области от ее границ (перемена направления движения тарелки).
       {5} - начало инициализации графического режима.
       {6} - запуск генератора равномерно распределенных случайных чисел.
       {7} - подготовка к построению образа тарелки из двух эллипсов и двух 'антенн' и вычисление параметров прямоугольника звездного неба. Переменные в четырех комментируемых операторах присвоения принимают значения(для r = 20, GetMaxX = 639, GetMaxY = 479): х = 100, у = 40, xm = 159, ym = 119.
       Начальная инициализация графического режима устанавливает по умолчанию некоторые параметры построения линий, например, белый цвет, линия сплошная нормальной толщины. В дальнейшем эти характеристики можно изменять.
       {8} - построение дуг двух эллипсов. Два первых параметра соответствующих процедур задают координаты центра (у дуги второго эллипса центр на 4 пикселя выше). Два следующих параметра - центральные углы(в градусах) направлений на начальную и конечную точки дуги, отсчитываемые против часовой стрелки от горизонтальной оси, направленной слева направо. Иначе говоря, первый эллипс изображается полностью, а второй - между углами 190R и 357R. Два последних параметра задают горизонтальную и вертикальную полуоси эллипса(в нашем примере у первого эллипса это 20 и 8 пиксел, а у второго 20 и 6 пиксел).
       {9} - построение прямолинейных усиков двух антенн.
       {10} - построение на вершинах антенн круговых колец радиусом в 2 пиксела.
       {11} - двухсекундная пауза позволяет рассмотреть тарелку в месте ее построения. Через два оператора организована еще одна пауза для рассмотрения покрашенной тарелки. Оба delay можно удалить.
       {12} - процедура задает однородное заполнение площади цветом и цвет(желтый).
       {13} - процедура закрашивает область, ограниченную непрерывной линией, указанным выше орнаментом(однородная раскраска) и цветом(желтым). Первые два параметра задают координаты строго внутренней точки этой области, третий параметр задет цвет пограничной линий.
       {14} - определение параметров построенной на экране прямоугольной картинки с тарелкой в пикселах(байтах) для помещения ее в динамическую память. lx, ly - пиксельные координаты левого верхнего угла прямоугольника; rx, ry - координаты его правого нижнего угла; width, height - ширина и высота прямоугольника в пикселах.
       {15} - определение размеров памяти в байтах, необходимой для размещения прямоугольного фрагмента экрана с тарелкой. Параметрами функции являются пиксельные координаты левого верхнего и правого нижнего углов прямоугольника.
       {16} - выделение в 'куче' указанной памяти и помещение ее адреса в указатель Saucer.
       {17} - процедура сохраняет в памяти(saucer^) изображение прямоугольного участка экрана(lx,ly,rx,ry) с тарелкой.
       {18} - повторное рисование тарелки на месте ее создания с параметром XorPot приводит к стиранию изображения.
       {19} - рисование белой прямоугольной рамки для фона. В примере левая верхняя и правая нижняя ее вершины находятся, соответственно, в точках 159, 119 и 477, 357.
       {20} - процедура устанавливает окно для вывода графической информации и перемещает начало координат (0, 0) в левый верхний его угол(в примере - в точку 160, 120). Параметр ClipOn указывает на то, что все построения могут проводиться только в пределах окна.
       {21} - вывод в пределах окна 500 случайных разноцветных пиксел, изображающих звездное небо(не все точки будут различимы, например, темносерые).
       {22} - установление первоначальных параметров - положение тарелки в центре окна и шаги перемещения по осям(5 пиксел).
       {23} - основной цикл.
       {24} - тарелка устанавливается на новое место и после паузы - стирается.
       {25} - булевой переменной придается истинное значение, с ее помощью будет выполняться 'отскок' тарелки внутрь прямоугольной области от ее границ (перемена направления движения тарелки).
       {26} - цикл выбора правильного направления движения тарелки у границ фрагмента (от левой границы - вправо вверх или вниз, от верхней - вниз влево или вправо, от правой границы - влево вверх или вниз и от нижней - вверх влево или вправо).
       {27} - новые координаты тарелки.
       {28} - тарелка выходит из окна?
       {29} - если да - меняем направление и скорость ее движения; если нет - меняем значение loop на false, выходим из цикла проверки и уточнения направления движения; перемещение тарелки продолжается с прежними параметрами.
       {30} - основной цикл выполняется до нажатия на произвольную клавишу.
       {31} - освобождение динамической памяти.
       {32} - пауза до нажатия клавиши Enter.
       {33} - выход из графического режима.
      
       Часы-будильник. Программа имитирует работу часов-будильника, она запускается без дополнительных параметров. Время в ней показывают движущиеся стрелки и цифровой дисплей. Стирание предыдущего состояния стрелок и дисплея осуществляется повторным их рисованием черным цветом на черном фоне. В начале программы пользователь, если нужно, может уточнить компьютерное время и запустить будильник. Звуковой сигнал будильник подает в течение 30 сек. На выходе из программы пользователь может заново установить системное время.
      
     []
      
      
     []
      
       {1} - S, M, H - пиксельные размеры, соответственно, секундной, минутной и часовой стрелок; XC, YC, R - пиксельные координаты центра циферблата и его радиус; df - центральный угол в радианах, соответствующий одной минуте или секунде; ac - исходное состояние флажка будильника.
       {2} - процедура исправления системных часов.
       {3} - процедура DOS установления системного времени.
       {4} - процедура одновременного определения состояния цифровых(строка дисплея) и аналоговых часов(координаты концов стрелок).
       {5} - пять первых операторов создают строчку, в которой по два символа отводится часам, минутам и секундам, разделенным двоеточиями.
       {6} - определение угла f в радианах между вертикальным направлением и текущим положением часовой стрелки, а затем координат ее конца xy[0], xy[1].
       {7} - то же самое для минутной стрелки.
       {8} - то же самое для секундной стрелки.
       {9} - получение текущего времени и затем вывод его на экран.
       {10} - исправление часов по необходимости.
       {11} - установление, если нужно, положения ограничителя будильника(угол ff) и исправление его флажка.
       {12} - установление цвета прямоугольной рамки часов и затем ее рисование.
       {13} - установление цвета окружности циферблата, а затем ее изображение.
       {14} - задание для текстового графического вывода шрифта, направления и размера.
       {15} - цикл изображения 60 рисок на циферблате и чисел-часов.
       {16} - определение угла f между вертикалью и направлением риски.
       {17, 18} - определение координат концов короткой риски.
       {19} - если положение риски не совпадает с часовой, то вывод этой риски,
       {20} - иначе - уточнение координат начала длинной часовой риски и ее вывод; подготовка строчки с часом, определение места ее вывода и вывод{21}.
       {22} - если задействован будильник - рисование его ограничителя. Звучать будильник будет один раз в сутки, а не каждые 12 часов.
       {23,24} - получение исходных: времени, позиции стрелок и строки цифрового дисплея.
       {25} - 'бесконечный' цикл работы часов - до нажатия произвольной клавиши.
       {26} - сохранение предыдущего времени.
       {27} - получение текущего времени.
       {28} - если секунды изменились, то - стирание(рисование черным цветом) стрелок и проверка необходимости запуска сигнала будильника(по флажку, при совпадении часа и минут, в течении 30 секунд этой минуты).
       {29} - сигнал(четыре звука).
       {30} - обработка текущего времени. Установление цвета(белого) вывода стрелок и цифрового дисплея, вывод цифрового индикатора, стрелок и после паузы{31} - стирание цифрового индикатора(дисплея).
       {32} - запоминание текущего состояния стрелок.
       {33} - освобождение буфера клавиатуры от символа, помещенного туда нажатием произвольной клавиши для прекращения работы часов.
       {34} - установление(если нужно) времени.
      
     
     []
     
       *** 20.09.2007 Канун Иом-Киппур - Судного дня. Гмар хатимА товА! - хорошей записи в Книгу Cудеб
  • Оставить комментарий
  • © Copyright Коваль Леон (leonko@walla.com)
  • Обновлено: 31/12/2010. 37k. Статистика.
  • Обзор: Израиль
  •  Ваша оценка:

    Связаться с программистом сайта
    "Заграница"
    Путевые заметки
    Это наша кнопка