Технологии и языки программирования

Внедрение ЭВМ во
все сферы человеческой деятельности требует от специалистов разного профиля
овладения навыками использования вычислительной техники. Повышается уровень
подготовки студентов вузов, которые уже с первых курсов приобщаются к
использованию ЭВМ и простейших численных методов, не говоря уже о том, при что
выполнении курсовых и дипломных проектов применение вычислительной техники
становится нормой в подавляющем большинстве вузов. Вычислительная техника
используется сейчас не только в инженерных расчетах и экономических науках, но и
таких традиционно нематематических специальностях, как медицина, лингвистика,
психология. В связи с этим можно констатировать, что применение ЭВМ приобрело
массовый характер. Возникла многочисленная категория специалистов -
пользователей ЭВМ, которым необходимы знания по применению ЭВМ в своей отрасли -
навыки работы с уже имеющимся программным обеспечением, а так же создания своего
собственного ПО, приспособленного для решения конкретной задачи. И здесь на
помощь пользователю приходят описания языков программирования высокого уровня
(далее ЯВУ) и численные методы (далее ЧМ). ЧМ разрабатывают и исследуют, как
правило, высококвалифицированные специалисты-математики. Для большинства
пользователей главной задачей является понимание основных идей и методов,
особенностей и областей применения. Однако, пользователи хотят работать с ЭВМ
не только как с высокоинтеллектуальным калькулятором, а еще и как с помощником в
повседневной работе, хранилищем информации с быстрым и упорядоченным доступом, а
так же с источником и обработчиком графической информации. Все эти функции
современной ЭВМ я предполагаю продемонстрировать в настоящей курсовой
работе. В первой части работы представлена программа по нахождению корней
системы из двух нелинейных уравнений методами Ньютона и простых итераций. Во
второй части моей работы представлена программа, демонстрирующая пользователю
всю мощь и многообразие графических возможностей современных ПК на примере
применения графических функций языка С++ с использованием 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 ) в ряд Тейлора,
причем члены, содержащие вторые (и более высоких порядков) производные,
отбрасываются. n (x (напр
имер, полученные на предыдущей итерации) равны соответственно
a . Задача состоит в нахождении
приращений (поправок) к этим значениям
x , благодаря которым решение системы (1) запишется в
виде: ,...,x Проведем разложение
левых частей уравнений (1) в ряд Тейлора, ограничиваясь лишь линейными членами
относительно
приращений: n ,x )+ .............................................. n Поскольку в соответствии с (1) левые части этих
выражений должны обращаться в нуль, то приравняем нулю и правые части. Получим
следующую систему линейных алгебраических уравнений относительно
приращений: ............................ ,F 2 J= Для
существования единственного решения системы (2) он должен быть отличным от нуля
на каждой итерации. Таким образом, итерационный процесс решения системы
уравнений (1) методом Ньютона состоит в определении приращений
x к значениям неизвестных на каждой итерации. Счет прекращается, если все
приращения становятся малыми по абсолютной величине:
maxx Ньютона также важен выбор начального приближения для обеспечения
хорошей сходимости. Сходимость ухудшается с увеличением числа уравнений
системы. (x,y)=0,(3) Пусть
приближенные значения неизвестных равны a,b. Предположим, что якобиан системы
(3) при x=a; y=b отличается от нуля, т.е.: Тогда следующие приближения неизвестных
можно аписать в виде 1 Величины, стоящие в правой части, вычисляются при x=a,
y=b. При программировании данного метода в качестве исходных данных задаются
начальные приближения неизвестных a,b, погрешности . Если итерации
сойдутся, то выводятся значения x,y; в противном случае происходит вывод x,y по
мере работы программы до прерывания ее пользователем. ...x n Алгоритм решения этой
системы методом простой итерации напоминает метод Гаусса - Зейделя, используемый
для решения систем линейных уравнений. =a x ,a ,a ,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 и представляет собой исполняемый файл
euro.chr библиотека готического шрифта sans.chr библиотека шрифта типа
"Симплекс" Вышеприведенные файлы необходимо
разместить в той же директории, что и основной модуль. Для функционирования
программы необходима операционная система MS DOS 3.30 и выше или полностью
совместимой с ней. Исходный текст программы написан на языке программирования
высокого уровня С++ фирмы Borland версии 3.1 для DOS и WINDOWS и содержится в
файле в форме пригодной к использованию
его как текстового документа в среде ДОС. Исходный текст программы приведен в
приложении 2. . Программа предназначена для
демонстрации основных графических возможностей языка С++ в режиме VGA. Программа
дает представление о структуре графических возможностей языка и способах их
применения на практике. Функциональным ограничением программы является
невозможность её эксплуатации на компьютерах, оснащенных видеоадаптерами,
стандарт которых отличается от EGA-VGA. .
Программа не несет в себе единого алгоритма в привычном понимании и поэтому
блок-схема не приводится. Методы, использованные при написании программы, не
являются математическими или прочими стандартными и будут описаны ниже при
описании соответствующих функций. представляет ряд функций, которые кратко
описаны в таблице.2 наименование функции в программе главная функция из которой вызываются все другие функции
функция
демонстрации рисования линий с применением оператора 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 -
объекты. Tinterior.ReadFile Tinterior.Draw DEleteItem SearchItem создает окно, в которое в
последствии будут выводиться данные обработчик событий
программы связанных с различными объектами объект-потомок от Twindow - стандартного объекта ТурбоВижн
создает рамочное окно с полосами прокрутки для управления встроенным в него
объектом Tinterior объект-потомок от Tdialog - стандартного объекта ТурбоВижн
создает диалоговое окно для выбора режима работы объект-потомок от Tscroller -
стандартного объекта ТурбоВижн обуславливает внутреннюю часть рамочного окна
Tworkwin, создает прокручиваемое окно с записями из файла данных и с помощью
диалогового окна Tdlgwin управляет работой с этими записями оъект-потомок от Taplication
стандартного объекта ТурбоВижн обеспечивающего внешний вид прикладной
программы. . Для
правильного функционирования программы необходимо применять следующие компоненты
аппаратного комплекса: персональный компьютер класса Ix86 с 640Кб ОЗУ,
оснащенный одним накопителем на гибком магнитном диске 720Кб или накопителем
типа "винчестер", а так же видеоадаптером EGA или VGA
(предпочтительно).Компьютер рекомендуется оснастить видеомонитором,
соответствующим видеоадаптеру. . Для вызова программы
необходимо в командой строке ДОС набрать полное имя основного модуля. Никаких
параметров в командной строке не требуется.
Входными и выходными данными для программы является файл (файлы) данных
пользователя и выводит информацию, содержащуюся в них на экран
дисплея. //описание переменных, используемых в программе //описания функций решения методами Ньютона и простых итераций //запрос начального приближения у
пользователя printf ("Окончательное решение по методу
Ньютона\n"); printf ("%g\t%g\n", iterac(x,y)); double f1,f2,xxn,yyn; f1=sin(xn+a)+b*yn+c; //якобиан
системы //очередное значение y if (fabs(xxn-
xn)<epsfabs(yyn-yn)<eps) goto b; b: return
(xxn,yyn); double xxi,yyi;
yyi=-(sin(xi+a)+c)/b; //изменение текущих
значений #include
<graphics.h> #include
<math.h> "SansSerif_Font",
"Gothic_Font", "Script_Font", "Simplex_Font", "TriplexScript_Font", //прототипы функций void demotext (void); void demobars(void); int gdriver = DETECT,
gmode, errorcode; initgraph(&gdriver, &gmode, ""); errorcode = graphresult(); printf("Press any
key to halt:"); demopieslice(); cleardevice(); //формирование графического окна и статусной
строки do lineto (i,ymax); clearviewport(); { moveto(random(xmax),random(ymax));
circle(random(getmaxx()),random(getmaxy()),random(100)); i++; {setcolor(0); while( !kbhit() ); //
повторение пока не нажата
клавиша void demopix(void) setcolor( random( MaxColors - random(15) ) + random(15) ); while(
!kbhit() ); // повторение пока не нажата
клавиша // StatusLine(
"Press any key to continue..." ); setfillstyle(random(12), getmaxcolor()); random(360),random(360),random(1
50)); clearviewport();
char *percent[]={"20%","10%","35%","15%","20%"}; StatusLine(
"Press any key to continue..." ); outtextxy(
getmaxx()/2,25,"This is the pie chart diagramm"); secsize =
(360 * sektors[i])/100; //подписи процентов
outtextxy( getmaxx()/2-r-30,getmaxy()/2,percent[2]); // StatusLine( "Press any key to
continue..."
); outtextxy( midx,midy-40,"This programm will demonstrate to you all
graphics");
settextstyle(i,0,0); getch();clearviewport();
outtextxy(midx,midy,"This programm created by Grinjoff Mark"); //функция демонстрации
рисования дуг и многоугольников StatusLine(
"Press any key to continue..."
); setcolor(random( MaxColors -
random(15) ) + random(15)); } //рисование
многоугольников с произвольным цветом
poly[2] = xmax-(i+20); /* 2-я */ poly[6] =i+xmax/2; /* 4-я */
поэтому необходимо это сделать самому
setcolor(random( MaxColors - random(15) ) + random(15)); while( !kbhit() ); //
повторение пока не нажата
клавиша void demobars(void) int kxb=15,kyb=15;
for(x=3;x<getmaxx();x+=stx){
setfillstyle(SOLID_FILL,random(getmaxcolor())); clearviewport();
MainWindow( "3D Bars demonstration" ); setcolor(random( MaxColors - random(15) ) +
random(15)); random( getmaxx() ), random( getmaxy()
),10,1); while( !kbhit() ); // повторение пока не нажата
клавиша MainWindow( "The cycle"
); setcolor(random( MaxColors - random(15) ) +
random(15)); pieslice(580,390,i,i+1,rad); line(getmaxx()/2,10,i,getmaxy()/2); line(getmaxx()/2,10,i,getmaxy()/2); getch(); 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++)
//нахождение координат движения //линии
line(koord3[0],koord3[1],koord3[2],koord3[3]); //первая //четверть line(koord3[0],getmaxy()-koord3[1],koord3[2],getmaxy()-
koord3[3]);//третья четверть } //получение новых координат первой
линии koord1[3]=random(getmaxy()/2); //последняя
страница { getch(); int height;
setcolor( MaxColors - 2 );//установка текущего цвета //белым height = textheight( "H"
);//установить начальную высоту //текста setviewport( 0, height+4,
xmax, ymax-(height+4), 1 ); //функция создания строки статуса в
нижней части экрана setviewport( 0, 0, xmax, ymax,
1 ); //открыть окно во //весь экран settextjustify( CENTER_TEXT, TOP_TEXT
); height = textheight( "H" );//установка текущей высоты //текста outtextxy( xmax/2, ymax-(height+2), msg ); //функция, образующая границу
графического окна setcolor( MaxColors - 1 );//установка текущего цвета
//белым rectangle( 0, 0, getmaxx(), getmaxy()
); Uses App,
Objects, Menus, Drivers, Views, StdDlg, DOS, Memory, Dialogs; управления встроенным
в него объектом TInterrior} {Объект TDlgWin
создает диалоговое окно для выбора режима работы} {Следующий объект обуславливает внутреннюю часть рамочного окна TWorkWin.
Он гового окна TDlgWin управляет работой с этими записями} Constructor Init (var Bounds: TRect; HS, VS: PScrollBar);
Procedure HandleEvent (var Event: TEvent); Virtual; TNotebook =
object (TApplication) procedure HandleEvent (var Event: TEvent); virtual; end; cmWork = 203;{обработать
данные} cmDelete = 206;{уничтожить текущую запись} {ножество временно недоступных команд:} LPhone=11; {---------- PHONE} DataType = record {тип данных
в файле} DataFile: file of DataType;
{файловая переменная} реализация объекта TWorkWin {создание окна данных} begin GetClipRect(Bounds); {получение в BOUNDS кординаты минимальной
перерисо- {Включение стандартных по размеру и положению полос-
уаказателей:} {создание текстового
окна:} end; {TWrkWin.Init}
if Event.What=evCommand then var {создание экземпляра динамического объекта:} {с помощью
следующего оператора окно выводится на экран и результат работы
{анализ результата запроса:} PF^.GetFileName(s); {s содержит имя
файла} OpFileF := IOResult=0; Work {переход к работе} {---------------------------} EnableCommands(WinCom2); {разрешение открыть файл} {--------------------------} PD: PChDirDialog;
{диалоговое окно смены каталога диска} Control
:=DeskTop^.ExecView(PD); {использование окна} end;
{TNotebook.ChangeDir} txt='Для возврата
введите EXIT в ответ'+ DoneVideo; {закрыть монитор экрана}
writeln('Введите EXIT для возврата'); {выдать сообщение о выходе} Exec(GetEnv('COMSPEC'),''); InitMemory;
{открыть монитор памяти} InitSysError; {открыть обработчик ошибок} constructor TInterior.Init; GrowMode
:=gfGrowHiX+gfGrowHiY; Dispose(PS,Done); {читает содержимое файла данных в массив LINES} PS:=
New(PStringCollection, Init(100,10)); with data
do while Length(s) < LName+LPhone do end; {ReadFile} n, {текущая строка
экрана} if Delta.Y>Location then for n:= 0 to pred(Size.Y) do Color:= GetColor(1); MoveStr(B,
Copy(p^,Delta.X+1,Size.X),Color); Function
Control: Word; But: array [0..4] of string [13]= {надписи на кнопках}
Txt: array [0..3] of string [52] = ( 'Искать - искать запись, начинающуюся с нужных
букв', D: PDlgWin; begin
Insert(New(PStaticTEXT,Init(R,#3+Txt[k]))) Init(R,But[k],cmCan+k,bfNormal)))
Control:=DeskTop^.ExecView(D); {выполняем диалог} {удаляет
указанный в Location эл-т данных} PStr:=PS^.At(Location); {получаем текущую
запись} repeat {цикл поиска по освпадению поля Name:} until Data.Name=s; write(DataFile,Data); {помещает ее на
место удаляемой} with PS^ do
D:=IndexOf(At(Location)); {----------------------} L=LName+LPhone+LAddr; OldCount: Word; repeat
{цикл ввода записей} while
Length(s)<3 do
R.Assign(15,5,65,16); R.Assign(2,y+1,2+LName,y+2); Insert(New(PLabel, 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);
Insert(New(PButton, Init(R, 'Выход',cmCancel,bfNormal))); begin {готовим начальный текст}
Phone:=copy(s,succ(LName),LPhone);
Control:=DeskTop^.ExecView(InWin); {выполняем диалог}
Name:=BName^.Data^; move(Name[1],s[1],Length(Name)); OldCount:=PS^.Count;
{прежнее кол-во записей}
write(DataFile,Data) {да - добавляем в файл} procedure SearchItem; k:
Integer; else if s[k] in ['а'..'п'] then
s[k]:=chr(ord('P')+ord(s[k])-ord('p')); begin {SearchItem}
R.Assign(2,2,47,3); Insert(New(PLabel, Init(R, 'Введите образец
поиска:',p)));
Insert(New(PButton,Init(R,'Выход',cmCancel,bfNormal))); while
(UpString(s)>=UpString(PString(PS^.At(Location))^)) ScrollTo(Delta.X,Location) TScroller.HandleEvent(Event); case
Control of {получить команду из основного диалогового окна} cmSearch: SearchItem;
MakeLocal(MouseWhere, R); {получение в R локальные
case Event.KeyCode of kbGrayPlus: if
Location<Delta.Y+pred(Size.Y) then {------------------------
} R.Assign(0,0,80,23); {-----
-------------------} begin {TNotebook.HandleEvent} case Event.Command of cmChangeDir: ChangeDir; {сменить диск} exit {не
обрабатывать другие команды} {-----------------------------
---} R.B.Y:=succ(R.A.Y); {R - координаты строки
меню} подменю. Создаем его} NewItem( {первый эл-т} '~~
Закрыть','F2',kbF2,cmSave,hcNoContext,
NewItem('~~ Вызов ДОС','',0,cmDOSShell,hcNoContext, {создаем второй элемент главного меню} end; {TNotebook.InitMenuBar}
R:TRect; {границы строки статуса}
StatusLine:=New(PStatusLine, текстной справочной
службы} NewStatusKey('~F3~ Открыть',kbF3,cmOpen, NIL))))), {нет других клавиш} end; {TNotebook.InitStatusLine}