Применение языков программирования высокого уровня для реализации численных методов

к курсовой работе по предмету «Языки и
технологии программирования» «Применение
языков программирования высокого уровня для реализации численных
методов и прикладных программ» Принял ст.
преп. Каф. ТК Внедрение ЭВМ во все сферы
человеческой деятельности требует от специалистов разного профиля овладения
навыкамииспользования вычислительной техники. Повышается уровень подготовки
студентов вузов, которые уже с первых курсов приобщаются к использованию ЭВМ и
простейшихчисленных методов, не говоря уже о том, при что выполнении курсовых и
дипломных проектов применение вычислительной техники становится нормой в
подавляющембольшинстве вузов. Вычислительная техника используется сейчас
не только в инженерных расчетах и экономических науках, но и такихтрадиционно
нематематических специальностях, как медицина, лингвистика, психология. В связи
с этим можно констатировать, что применение ЭВМ приобреломассовый характер.
Возникла многочисленная категория специалистов - пользователей ЭВМ, которым
необходимы знания по применению ЭВМ в своей отрасли- навыки работы с уже
имеющимся программным обеспечением, а так же создания своего собственного ПО,
приспособленного для решения конкретной задачи. И здесьна помощь пользователю
приходят описания языков программирования высокого уровня (далее ЯВУ) и
численные методы (далее ЧМ). ЧМ разрабатывают и исследуют, как правило,
высококвалифицированные специалисты-математики. Для большинствапользователей
главной задачей является понимание основных идей и методов, особенностей и
областей применения. Однако, пользователи хотят работать с ЭВМ не только
как с высокоинтеллектуальным калькулятором, а еще и как с помощником
вповседневной работе, хранилищем информации с быстрым и упорядоченным доступом,
а так же с источником и обработчиком графической информации. Все эти
функциисовременной ЭВМ я предполагаю продемонстрировать в настоящей курсовой
работе. В первой части работы представлена программа по нахождению корней
системы из двух нелинейных уравнений методамиНьютона и простых
итераций. Во второй части моей работы представлена программа,
демонстрирующая пользователю всю мощь и многообразие графическихвозможностей
современных ПК на примере применения графических функций языка С++ с
использованием VGA-графики. В третьей части работы представлена
программа «Электронной записной книжки», которая имеет и практическое
значениедля пользователей маломощных персональных компьютеров и ПК блокнотов с
малым дисковым ресурсом для которых нерентабельна эксплуатация ПО типа Lotus
Organizer и подобных ПО с мощным графическиминтерфейсом. К моему сожалению
из-за отсутствия необходимого справочного материала мне не удалось
продемонстрировать в третьейчасти SUPER VGA-графику, но это дело недалекого
будущего. Первая и вторая части работы выполнены с применение языка С++ фирмы
Borland версии 3.1 для DOS и WINDOWS, а третья часть выполнена на ЯВУ «Турбо
Паскаль» версии 7.0 для DOS и WINDOWS фирмы Borland с применением средств TURBO
VISION. Наиболее эффективное применение ВТ нашла
при проведении трудоемких расчетов в научныхисследованиях и инженерных расчетах.
При решении задачи на ЭВМ основная роль все-таки принадлежит человеку. Машина
лишь выполняет его задания поразработанной программе. роль человека и машины
легко уяснить, если процесс решения задачи разбить на перечисленные ниже
этапы. Этот этап заключается в
содержательной (физической) постановке задачи и определенииконечных
решений. Модель
должна правильно (адекватно) описывать основные законы физическогопроцесса.
Построение или выбор математической модели из существующих требует глубокого
понимания проблемы и знания соответствующих разделов
математики. Поскольку ЭВМ может
выполнять лишь простейшие операции, она «не понимает» постановки задачи,даже в
математической формулировке. Для ее решения должен быть найден численный метод,
позволяющий свести задачу к некоторому вычислительному алгоритму. Вкаждом
конкретном случае необходимо выбрать подходящее решение из уже разработанных
стандартных. Процесс решения
задачи(вычислительный процесс) записывается в виде
последовательностиэлементарных арифметических и логических операций, приводящей
к конечному результату и называемой алгоритмом решения задачи. Алгоритм решения задачи записывается на понятном машине
языке в виде точно определеннойпоследовательности операций - программы. Процесс
обычно производится с помощью некоторого промежуточного языка, а ее трансляция
осуществляется самой машиной иее системой. Составленная программа содержит разного рода ошибки, неточности,
описки. Отладка включаетконтроль программы, диагностику (поиск и определение
содержания) ошибок, и их устранение. Программа испытывается нарешении
контрольных (тестовых) задач для получения уверенности в достоверности
результатов. На этом этапе
готовятся исходные данные для расчетов и проводится расчет по
отлаженнойпрограмме. при этом для уменьшения ручного труда по обработке
результатов можно широко использовать удобные формы выдачи результатов в виде
текстовой и графическойинформации, в понятном для человека
виде. Результаты расчетов тщательно
анализируются, оформляется научно-техническая документация. Основное требование, предъявляемое к
математической модели, - адекватность рассматриваемому процессу, явлению, т.е.
она должна достаточно точно ( в рамкахдопустимой погрешности) отражать
характерные черты явления. Вместе с тем она должна обладать сравнительной
простотой идоступностью исследования. Адекватность и
сравнительная простота модели не исчерпывают предъявляемых к ней требований.
Необходимообратить внимание на правильность оценки области применимости
математической модели. Например, модель свободно падающего тела, в которой
пренебреглисопротивлением воздуха, весьма эффективна для твердых тел с большой и
средней плотностью и формой поверхности, близкой к сферической. Вместе с тем, в
рядедругих случаев для решения задачи уже не достаточно известных из курса
физики простейших формул. Здесь необходимы более сложные математические
модели,учитывающие сопротивление воздуха и прочие факторы. Отметим, что успех
решения задачи в значительной степени определяется выбором математической
модели; здесьв первую очередь нужны глубокие знания той области, к которой
принадлежит поставленная задача. Кроме того, необходимы знания соответствующих
разделов математики ивозможностей ЭВМ. С помощью математического моделирования
решение научно-технической задачи сводится к решениюматематической задачи,
являющейся ее моделью. Для решения математических задач используются основные
группы методов: графические, аналитические, численные.
Графические методы позволяют в ряде случаев оценить порядок искомой величины.
Основная идея этих методов состоит в том, что решение находится путем
геометрических построений. Например, для нахождения корней уравнения
f(x)=0 строится график функции y=f(x), точки пересечения которого с осью
абсцисс и будут искомымикорнями. При использовании
аналитических методов решение задачи удается выразить с помощью формул. В
частности, еслиматематическая задача состоит в решении простейших алгебраических
или трансцендентных уравнений, дифференциальных уравнений и т.п., то
использованиеизвестных из курса математики приемов сразу приводит к цели. К
сожалению, на практике это слишком редкие случаи. Основным
инструментом для решения сложных математических задач в настоящее время являются
численные методы,позволяющие свести решение задачи к выполнению конечного числа
арифметических действий над числами; при этом результаты получаются в виде
числовых значений.Многие ЧМ разработаны давно, однако при вычислениях вручную
они могли использоваться лишь для решения не слишком трудоемких
задач. С появлением ЭВМ начался период бурного развития ЧМ и
их внедрения в практику. Только вычислительной машине подсилу выполнить за
сравнительно короткое время объем вычислений в миллионы, миллиарды и более
операций, необходимых для решения многих задач. При счетевручную человеку не
хватило бы жизни для решения одной такой задачи. ЧМ наряду с возможностью
получения результата за приемлемое время должен обладать и ещеодним важным
качеством - не вносить в вычислительный процесс значительных
погрешностей. При написании программы решения системы из двух
нелинейных уравнений мною использовались два известных и широкоприменяемых
численных метода. Это метод Ньютона и метод простых итераций. Этот метод обладает быстрой сходимостью и сравнительно
хорошей точностью вычислений. Вслучае одного уравнения F(x)=0 алгоритм метода
был легко получен путем записи уравнения касательной к кривой y=F(x). В основе
метода ньютона для системы уравнений лежит использование разложения функций
F ) в ряд Тейлора,
причем члены, содержащиевторые (и более высоких порядков) производные,
отбрасываются.
F (x
................
(1) (
например, полученные на предыдущей итерации) равны соответственно
a 1 x n Проведем разложение левых частей уравнений (1) в ряд
Тейлора, ограничиваясь лишь линейными членами
относительноприращений: ,x .............................................. )+ Поскольку в соответствии с (1) левые части этих
выражений должны обращаться в нуль, то приравняем нулю и правыечасти. Получим
следующую систему линейных алгебраических уравнений относительно
приращений: 2
Значения F 2 Для существования единственного решения системы (2) он должен
быть отличным от нуля на каждой итерации. Таким образом,
итерационный процесс решения системы уравнений (1) методом Ньютона состоит в
определении приращенийDx к значениям неизвестных на каждой итерации. Счет прекращается, если
всеприращения становятся малыми по абсолютной величине: max Dx
Ньютона также важен выбор начального
приближения для обеспечения хорошей сходимости.Сходимость ухудшается с
увеличением числа уравнений системы. (x,y)=0,
(3) Пусть приближенные значения неизвестных равны a,b.
Предположим, что якобиан системы (3)при x=a; y=b отличается от нуля,
т.е.: Тогда следующие приближения неизвестных можно аписать в
виде (F Величины,
стоящие в правой части, вычисляются при x=a, y=b. При
программировании данного метода в качестве исходных данных задаются начальные
приближения неизвестных a,b, погрешности e. Если итерации сойдутся,то выводятся
значения x,y; в противном случае происходит вывод x,y по мере работы программы
до прерыванияее пользователем.
x =f
............. Алгоритм
решения этой системы методом простой итерации напоминает метод Гаусса - Зейделя,
используемыйдля решения систем линейных уравнений. , x . Тогда выражения для неизвестных наследующей
итерации имеют вид ), ), i
.................. ,a Итерационный процесс продолжается до тех пор, пока
изменения всех неизвестных в двухпоследовательных итерациях не станут малыми,
т.е. абсолютные величины их разностей не станут меньшими заданного малого
числа. При использовании данного метода успех во многом
определяется удачным выбором начальных приближений неизвестных:они должны быть
достаточно близкими к истинному решению. В противном случае итерационный процесс
может не сойтись. Программа решения системы нелинейных уравнений
методами Ньютона ипростых итераций. Данная
программа разработана как учебная и в силу этого не имеет кодового
обозначенияпредусмотренного ГОСТом 19.402-78 и представляет собой исполняемый
файл Для функционирования
программы необходим персональный компьютер с установленнойоперационной системой
MS-DOS 3.30 и выше или полностью совместимой с ней. Исходный текст
программы написан на языке программирования высокого уровня С++ фирмы
Borland версии 3.1 для DOS и WINDOWS и содержится в файле
в форме пригодной к использованию его
как текстового документа в среде ДОС.Исходный текст программы приведен в
приложении 1.в Данная программа решает
систему нелинейных уравнений методами Ньютона и простыхитераций. Программа не
является универсальной и решает только заложенную в неё систему только из двух
нелинейных уравнений. Для расширения функциональности программы необходимо
внести соответствующее изменение в исходный текст как то: изменение исходной
системы, производных,якобиана системы. При
написании программы использовались математические методы, описанные в
теоретической части настоящей работы. Функционально программа состоит из
трех функций main, newton, iterac. Взаимодействие функций между собой
производится путем вызова из функции main функций newton и iterac с передачей
параметров, в качествекоторых используются переменные х и у в которые помещены
начальные приближения , запрашиваемые у пользователя со стандартного устройства
ввода, дляобеспечения исходных данных к методам решения. После окончания расчета
функции newton и iterac возвращают в функцию main результаты расчета в виде пары
чисел,которые представляют собой корни системы уравнений, выводимые на
стандартное устройство вывода для дальнейшего анализа
пользователем. Для
функционирования программы пригодна минимальная конфигурация ЭВМ на
основепроцессорной серии Ix86 фирмы Интел с 640 Кб оперативной памяти и
накопителем на гибком магнитном диске.
программы осуществляется как с гибкого диска так и с накопителя типа
«винчестер». Прилюбом вызове в командной строке ДОС следует ввести полное имя
исполняемого файла с указанием пути (если таковой не описан в переменной PATH
файла AUTOEXEC.BAT). В качестве входных
данных для программы используется пара вещественных чиселпредставляющих собой
приближенные значения корней системы уравнений, решаемой программой. Числа могут
быть как с дробной частью так и без неё. В качестве выходных данных
программа выдает на стандартное устройство вывода информации пару чисел,
представляющих собой истинное решение системы уравненийв вещественной форме. В
случае если количество знаков после десятичной точки велико, то вывод
производится в экспоненциальной форме. Демонстрационнаяпрограмма графических функций
языка С++. . Данная программа разработана как
учебная и в силу этого не имеет кодового обозначенияпредусмотренного ГОСТом
19.402-78 и представляет собой исполняемый файл Таблица 1.
библиотека взаимодействия с графическим адаптером библиотека
жирного шрифта библиотека шрифта «euro» библиотека
готического шрифта библиотека шрифта типа «Комплекс» библиотека шрифта типа «small» библиотека шрифта
типа «Сан_сериф» библиотека шрифта типа «Скрипт»
библиотека шрифта типа «Симплекс» библиотека шрифта типа
«Триплекс» библиотека шрифта тапа «Триплекс_Скрипт» Для функционирования программы необходима
операционная система MS DOS 3.30 и выше или полностью совместимой
сней. Исходный текст программы написан на языке программирования высокого
уровня С++ фирмы Borland версии 3.1 для DOS и WINDOWS и содержится в файле
в форме пригодной к использованию его
как текстового документа в средеДОС. Исходный текст программы приведен в
приложении 2. . Программа
предназначена для демонстрации основных графических возможностейязыка С++ в
режиме VGA. Программа дает представление о структуре графических возможностей
языка испособах их применения на практике. Функциональным ограничением программы
является невозможность её эксплуатации на компьютерах,
оснащенныхвидеоадаптерами, стандарт которых отличается от EGA-
VGA. . Программа не несет
в себе единого алгоритма в привычном понимании и поэтомублок-схема не
приводится. Методы, использованные при написании программы, не являются
математическими или прочими стандартными и будут описаны ниже приописании
соответствующих функций. представляет ряд функций, которые кратко
описаны в таблице.2 наименование функции в программе main функция
демонстрации рисования линий с применением оператора lineto различными цветами
функция демонстрации рисования окружностей произвольного радиуса
с произвольным выбором цвета и координат центра функция
рисования точек в произвольном месте экрана с произвольным цветом функция рисования закрашенных секторов с произвольным расположением на
экране, произвольным выбором угла, радиуса, стиля заполнения и цвета функция демонстрации вывода текстовых данных в графическом
режиме всеми доступными в языке С++ стандартными способами и шрифтами c
применением библиотек шрифтов, перечисленных в таблице.1
функция формирования на экране графического окна с указанным заголовком
*header функция прорисовки границ графического экрана функция формирования статусной строки с выводом сообщения *msg
функция вывода на экран дуг (частей окружностей) с произвольным
начальным углом, цветом и координатами центра функция вывода на
экран определенного числа одинаковых прямоугольников с произвольно изменяющимся
цветом функция демонстрации вывода на экран прямоугольных
параллелепипедов произвольного размера, способа заполнения передней грани, и
цвета, а так же расположения на экране функция демонстрации
практического применения функции void pieslice(...) языка С++ для построения
круговой диаграммы по заданным параметрам функция демонстрации
практического применения рисования линий и секторов с циклически изменяющимися
параметрами функция практического применения операторов языка С++
для построения простого калейдоскопа завершающая
страница, сообщающая пользователю о завершении работы программы Кроме функций mainwindow и statusline все остальные функции не
имеют входных и выходных параметров. Функция mainwindow в качестве параметра
используетсимвольную строку передаваемую ей вызывающей функцией, также действует
и функция statusline. Всефункции вывода изображения кроме mainwindow,
statusline, drawborder вызываются из главной функции попорядку, а
вышеперечисленные вызываются из функций вывода изображения. Каждая функция
вывода изображения вызывает функцию формирования графического окна снеобходимым
заголовком а также определяет визуальные границы экрана при помощи функции
drawborderи помещает в нижнюю часть экрана статусную строку при помощи функции
statusline с необходимой надписью. Затем начинаетсяпроцесс вывода на экран
самого изображения, демонстрирующего работу той или иной графической функции
языка С++. После прекращения работы управлениепереходит в главную функцию,
откуда вызывается следующая функция вывода изображения. В процессе работы
программа использует файлы, приведенные в таблице.1 и в случаеих отсутствия или
недоступности функционирование программы будет не полным (библиотеки шрифтов)
или полностью невозможным (библиотека взаимодействия
свидеоадаптером). . Для
правильного функционирования программы необходимо применять следующиекомпоненты
аппаратного комплекса: персональный компьютер класса Ix86 с 640Кб ОЗУ,
оснащенный однимнакопителем на гибком магнитном диске 720Кб или накопителем типа
«винчестер», а так же видеоадаптером EGAили VGA(предпочтительно).Компьютер
рекомендуется оснастить видеомонитором, соответствующим
видеоадаптеру. . Для правильного функционирования
программы необходимо разместить основной модуль исопутствующие файлы в одной
директории. Для вызова программы необходимо в командой строке ДОС набрать полное
имя основного модуля. Никаких параметров вкомандной строке не
требуется. . Данная программа является
демонстрационной и не использует входных данных отпользователя. Выходными
данными являются результаты работы функций по выводу изображений на экран.
Параметры изображениясохраняются только на экране в процессе работы программы
(данной функции). Общие сведения . Данная
программа разработана как учебная и в силу этого не имеет кодового обозначения
предусмотренного ГОСТом19.402-78 и представляет собой исполняемый файл
и создаваемые ею в процессе работы файлыданных
пользователя, структура которых приводится в приложении 3. Для
функционирования программы необходима операционная система MS DOS 3.30 и выше
или полностью совместимой сней. Исходный текст программы написан на языке
программирования высокого уровня Турбо Паскальверсии 7.0 фирмы Borland для DOS и
WINDOWS с применением библиотеки Turbo Vision и содержится в файле
в форме пригодной к
использованию его кактекстового документа в среде ДОС, и приведен в приложении
3. Данная программа
предназначена для ведения файлов баз данных подобных страницамадресной записной
книжки и способна полностью заменить собой ее бумажных
предшественников.Информация из файлов программы применяется только в
«электронном» варианте и не может быть выведена на устройство печати (данная
функция в программеотсутствует). В процессе работы программа создает файл
данных и поэтому пользователю не требуется предварительносоздавать его
самому. Программа не
несет в себе определенного алгоритма в стандартном понимании, аявляется
объектно-ориентированной программой (применены специфические конструкции языка -
объекты). В силу сложившихся традиций и особенностей языка
Турбо Паскаль данная программа представляет собой рядпроцедур, выполняющих
определенную роль и взаимодействующих между собой в рамках исполнительного
модуля. Каждая функция выполняет определенное действиеисходя из параметров
полученных от других функций или от пользователя. Основной текст программы
можно разделить на две части: первая - описание переменных иобъектов; вторая -
реализация процедур. Ниже в таблице 3 приводятся процедуры, применяемые в
программе, а в таблице 4 - объекты. Tnotebook.FileSave Tnotebook.ChangeDir Tnotebook.DOSCall
Tinterior.ReadFile
выводит данные в окно просмотра получает команду из основного
диалогового окна основная процедура
обработки событий и операций с файлом данных удаляет указанный
в Location элемент данных добавляет новый или редактирует
имеющийся элемент данных осуществляет поиск необходимого
элемента данных по контексту (первые символы) создает окно,
в которое в последствии будут выводиться данные
обработчик событий программы связанных с различными объектами создание верхнего Bar-меню
формирование строки статуса объект-потомок от Twindow - стандартного объекта
ТурбоВижн создает рамочное окно с полосами прокрутки для управления встроенным
в него объектом Tinterior объект-потомок от Tdialog -
стандартного объекта ТурбоВижн создает диалоговое окно для выбора режима работы
объект-потомок от Tscroller - стандартного объекта ТурбоВижн
обуславливает внутреннюю часть рамочного окна Tworkwin, создает прокручиваемое
окно с записями из файла данных и с помощью диалогового окна Tdlgwin управляет
работой с этими записями оъект-потомок от Taplication
стандартного объекта ТурбоВижн обеспечивающего внешний вид прикладной
программы. . Для
правильного функционирования программы необходимо применять следующиекомпоненты
аппаратного комплекса: персональный компьютер класса Ix86 с 640Кб ОЗУ,
оснащенный однимнакопителем на гибком магнитном диске 720Кб или накопителем типа
«винчестер», а так же видеоадаптером EGAили VGA(предпочтительно).Компьютер
рекомендуется оснастить видеомонитором, соответствующим
видеоадаптеру. . Для вызова программы необходимо в
командой строке ДОС набрать полное имя основного модуля.Никаких параметров в
командной строке не требуется. Входными
и выходными данными для программы является файл (файлы) данныхпользователя и
выводит информацию, содержащуюся в них на экран дисплея. #include <math.h> double pi=3.14,a=1.8,b=-
2.0,c=0.1,d=1.6,e=0.9,eps=0.000001; extern double newton(double xn,double yn); //запрос
начального приближения у
пользователя printf
( Окончательное решение по методу Ньютона\n ); printf ( %g\t%g\n ,
iterac(x,y)); double newton(double xn,double
yn) i++; //производные //очередное значение
y if (fabs(xxn-xn)<epsfabs(yyn-yn)<eps) goto
b; b: return
(xxn,yyn); { xxi=-cos(yi+d)/e; //проверка точности решения и ококнчания счета xi=xxi;yi=yyi; #include
<graphics.h> #include
<time.h> Default_Font ,
Triplex_Font , Small_Font ,
Complex_Font , European_Font ,
Bold_Font void
demoline(void); void
demoarcs(void); void
endpage1(void); /* автоматическое
определение типа видеоадаптера */ // инициализация графических и
локальных переменных //
проверка результатов инициализации printf( Graphics error:
%s\n , grapherrormsg(errorcode)); //вызовы
функций diagram(); endpage2();
// MainWindow( Line demonstration ); setcolor( random( MaxColors - random(15) ) +
random(15) ); i=i+1;xmax=xmax-1;ymax=ymax-
1; //ymax=getmaxy(); randomize(); setcolor( random(
MaxColors - random(15) ) + random(15) ); while(
!kbhit() ); // повторение пока не нажата
клавиша setcolor( random( MaxColors - random(15) ) + random(15)
); {i--
;circle(getmaxx()/2,getmaxy()/2,i);} cleardevice(); void
demopix(void)
putpixel(random(getmaxx()),random(getmaxy()),random(15)); ymax=getmaxy(); void demopieslice(void) do setfillstyle(random(12),
getmaxcolor());
pieslice(random(getmaxx()),random(getmaxy()), int sektors[] =
{20,10,35,15,20}; MainWindow( Pie Chart
Demonstration ); settextstyle(5,0,2);//
установка атрибутов текста //процесс рисования диаграммы по данным из
массива
pieslice((getmaxx()/2),(getmaxy()/2),k,k+secsize,r); outtextxy(
getmaxx()/2+r+30,getmaxy()/2-70,percent[0]); outtextxy( getmaxx()/2-r-
30,getmaxy()/2,percent[2]); outtextxy(
getmaxx()/2+r+20,getmaxy()/2+50,percent[4]); //функция демонстрации
текста в графическом окне MainWindow( Demonstration text in the graphics
screen ); midx=getmaxx()/2; outtextxy(
midx,midy+40, functions of the C++
language );getch();clearviewport(); outtextxy(midx,midy-40, This
text is write by ); settextstyle(0,1,1); //вывод
вертикального текста settextstyle(0,0,0);/*возвращениеи исходного
начертания
текста*/ //функция
демонстрации рисования дуг и многоугольников MainWindow( Arcs and
polygons demonstration ); //рисование дуг
с произвольным расположением и цветом
arc(random(xmax),random(ymax),random(358),random(358),random(100)); while( !kbhit() ); //
повторение пока не нажата
клавиша poly[5] =
ymax-(i+20); drawpoly автоматически не закрывает
многоугольник //рисует многоугольники,
изменяя координаты вершин if(i>1000)
{clearviewport();i=0;} } { int kxb=15,kyb=15; setcolor(random( MaxColors -
random(15) ) + random(15)); while( !kbhit() ); // повторение пока не нажата
клавиша //функция демонстрации трехмерных прямоугольников
StatusLine( Press any key to
continue... );
setfillstyle(random(5),random(getmaxcolor())); random( getmaxx() ),
random( getmaxy() ),10,1); while(
!kbhit() ); // повторение пока не нажата
клавиша void
endpage(void) StatusLine( Press any key to continue...
); setcolor(random( MaxColors -
random(15) ) + random(15)); setcolor(random( MaxColors -
random(15) ) + random(15)); setcolor(0);
line(getmaxx()/2,440,i,getmaxy()/2); clearviewport(); MainWindow(
The simple kaleidoscope ); //получение координат исходной
линии koord1[2]=random((getmaxx()/2)+10); koord2[0]=random((getmaxx()/2)+10); koord2[3]=random((
getmaxy()/2)+10); for (int l=0;l<4;l++)
//нахождение координат движения //линии setcolor(random( MaxColors - random(15) ) +
random(15)); line(getmaxx()-koord3[0],koord3[1],getmaxx()-
koord3[2],koord3[3]);//вторая четверть
line(getmaxx()-koord3[0],getmaxy()-koord3[1], for (int
p=0;p<4;p++)//переприсвоение координат koord1[0]=random(getmaxx()/2);
} // StatusLine( Press any key for exit to
DOS ); } //функция
создания графического окна
ymax=getmaxy(); setviewport( 0, 0,
xmax, ymax, 1 );//открыть окно во //весь экран settextjustify(
CENTER_TEXT, TOP_TEXT );
DrawBorder(); //функция создания строки статуса в нижней части
экрана ymax=getmaxy(); setcolor(
MaxColors - 1 ); //установка текущего цвета //черным setfillstyle( EMPTY_FILL, 0 ); bar( 0, ymax-
(height+4), xmax, ymax ); setviewport( 1,
height+5, xmax-1, ymax-(height+5), 1 ); { setlinestyle(
SOLID_LINE, 0, NORM_WIDTH ); приложение
3 Uses App, Objects, Menus, Drivers, Views,
StdDlg, DOS, Memory, Dialogs; управления встроенным в него объектом
TInterrior} TDlgWin = object (TDialog) {Следующий объект обуславливает
внутреннюю часть рамочного окна TWorkWin. Он гового окна TDlgWin
управляет работой с этими записями} Location:
Word; Procedure ReadFile; {объект-программа ТNotebook поддерживает работу с меню
и строкой стстуса} procedure InitMenuBar; virtual; {Команды для
обработчиков событий:} cmDOS = 204;{временно выйти в дос} cmSearch = 207;{искать нужную запись}
{ножество временно недоступных команд:} LName=25; {длина
поля NAME} LLIne=LName+LPhone+LAddr; {длина
строки} Phone: string [LPhone];{телефон} DataFile: file of
DataType; {файловая переменная} реализация
объекта TWorkWin {создание окна
данных}
Interior: PInterior; {указатель на управляемое текстовое
окно} GetClipRect(Bounds); {получение в BOUNDS кординаты
минимальной перерисо- Bounds.Grow(-1,-1); {установка размеров окна с
текстом} VS:=
StandardScrollBar(sbVertical+sbHandleKeyBoard); Interior :=New(Pinterior,Init(Bounds, HS,
VS)); procedure
TDlgWin.HandleEvent;
EndModal(Event.Command) {создание экземпляра динамического
объекта:} {с помощью следующего оператора окно выводится
на экран и результат работы {анализ результата
запроса:}
begin {польов. указал имя файла:} Reset(DataFile); if OpFileF then
Work {переход к работе} end;
{FileOpen} begin EnableCommands(WinCom2);
{разрешение открыть файл} {-------------------------
-} PD: PChDirDialog; {диалоговое окно смены
каталога диска} Control
:=DeskTop^.ExecView(PD); {использование окна} Dispose(PD,
Done) {удаление окна из кучи} {временный
выход в дос} DoneMemory; {закрыть монитор памяти} writeln('Введите EXIT для
возврата'); {выдать сообщение о выходе} Exec(GetEnv('COMSPEC'),''); SetMemTop(HeapEnd);
{восстановить кучу} InitVideo; {открыть монитор экрана}
InitSysError; {открыть обработчик ошибок} {------------------------------}
TScroller.Init(Bounds, HS, VS); {----
-------------------} {--------------------------} k: Integer; PS:= New(PStringCollection,
Init(100,10)); Read(DataFile, data); s:= s+' ';
s:= s+Addr end;
{ReadFile} var B: TDrawBuffer; Location:= Delta.Y; for n:= 0 to pred(Size.Y)
do Color:=
GetColor(2) if k<pred(PS^.Count) then end; Function Control: Word; But: array [0..4] of string [13]= {надписи на
кнопках} Txt: array [0..3] of string [52] = ( 'Искать -
искать запись, начинающуюся с нужных букв', var D:=New(PDlgWin,Init(R,
'Выберите продолжение:'));
begin end;
R.Assign(X+k*DX,6,X+k*DX+L,8);
SelectNext(False); {активизируем первую кнопку} {------------} {удаляет указанный в
Location эл-т данных}
PStr:=PS^.At(Location); {получаем текущую запись} repeat {цикл поиска по освпадению поля
Name:} Name:=Name+' '
read(DataFile,Data); {читает последнюю запись} seek(DataFile,pred(FileSize(DataFile))); with
PS^ do D:=IndexOf(At(Location)); Draw
{обновляет окно} {добавляет новый или редактирует
элемент данных} R:
TRect; s: String; repeat {цикл ввода
записей}
Str(FileSize(DataFile)+1,s);
end; InWin:=New(PDialog, Init(R,
s)); {создает окно}
R.Assign(2,y+1,2+LName,y+2);
R.Assign(2,y,2+LName,y+1);
R.Assign(2,y+dy+1,2+LPhone,y+dy+2);
Insert(BPhone); {поле телеф.}
R.Assign(2,y+2*dy+1,2+LAddr,y+2*dy+2);
R.Assign(2,y+2*dy,2+LAddr,y+2*dy+1);
R.Assign(2,y+3*dy+1,12,y+3*dy+3);
R.Assign(2+20,y+3*dy+1,12+20,y+3*dy+3); SelectNext(False)
{Активизируем 1-ую кнопку} begin
{готовим начальный текст} Name:=copy(s,1,LName);
InWin^.SetData(Data) {вставляет текст в поля
ввода} if Control=cmOK then with Data do Name:=BName^.Data^; FillChar(s[1],L,' ');
move(Addr[1],s[succ(LName+LPhone)],Length(Addr));
PS^.Insert(NewStr(s)); {добавляет в коллекцию}
write(DataFile,Data) {да - добавляем в файл} {----------------
----} {преобразует строку в верхний
регистр} s[k]:=chr(ord('A')+ord(s[k])-
ord('a')) else if s[k] in ['р'..'я']
then InWin: PDialog; R.Assign(15,8,65,16); R.Assign(2,2,47,3); Insert(New(PLabel, Init(R, 'Введите образец
поиска:',p)));
R.Assign(25,5,35,7); if DeskTop^.ExecView(InWin)=cmCancel
then while
(UpString(s)>=UpString(PString(PS^.At(Location))^)) if
(Location<Delta.Y+pred(Size.Y)) then {------------------------} case Event.What of case Control of {получить команду из основного
диалогового окна} cmDelete:
DeleteItem; cmZoom: exit; MakeLocal(MouseWhere, R); {получение в R
локальные end; kbGrayMinus: if Location<Delta.Y then
kbGrayPlus: if Location<Delta.Y+pred(Size.Y) then end; {TInterior.HandleEvent} R:
TRect; PW:=New(PWorkWin, Init(R)); procedure TNotebook.HandleEvent(var Event:
TEvent); TApplication.HandleEvent(Event); {обработка
станд. команд cmQuit и cmMenu} cmOpen:
FileOpen; {открыть файл}
cmDOSShell: DOSCall; {временный выход в дос} exit {не
обрабатывать другие команды} end;
{TNotebook.HandleEvent} var MenuBar:=New(PMenuBar, Init(R, подменю. Создаем его}
NewMenu( {создание подменю}
NewItem( {второй эл-т} '~~ Сменить диск','',0,cmChangeDir,hcNoContext, NewItem('~~ Вызов
ДОС','',0,cmDOSShell,hcNoContext, NIL)))))) {нет других
элементов подменю} NewItem('~W~ Работа','',kbF4,cmWork,hcNoContext, {-
---------------------------}
R:TRect; {границы строки статуса}
StatusLine:=New(PStatusLine, NewStatusDef(0, $FFFF, {устанавливает макс. диап. кон-
NewStatusKey('~Alt-X~ Выход',kbAltX,cmQuit, NewStatusKey('~F4~
Работа',kbF4,cmWork, NIL) {нет др.
определений} end; {TNotebook.InitStatusLine}