Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Создание личной библиотеки программистаСодержание книги Поиск на нашем сайте
Каждый опытный программист со временем накапливает определенное количество процедур и функций, которые использует как готовые блоки при разработке различных программ. Организуем из них библиотечный модуль Mybibl и откомпилируем его с размещением на диске результата (опция компиляции Build). После выполнения компиляции на диске создается файл Mybibl.tpu, доступный для использования без каких-либо дополнительных описаний. Этот файл можно подключать в любую программу следующим образом: Uses Mybibl;
Программа в общем случае состоит из заставки, набора процедур, функций и глобального блока (функционирующего посредством меню). Заставка является визитной карточкой программы. Она выводится на экран сразу после старта программы и содержит информацию о названии программы, ее назначении, авторе и т.д. Меню – это перечисление возможностей системы, из которого пользователь выбирает нужную в текущий момент. Меню должно быть простым в работе и понятым для самого неподготовленного пользователя. Более или менее сложная система обычно имеет несколько меню. Среди них выделяется главное, наиболее общее меню. Каждый элемент главного меню может генерировать новое (вложенное) меню, являющееся второстепенным по отношению к главному. В свою очередь второстепенное меню может также активизировать подчиненное ему меню и т.д. Уровень вложения меню ограничивается только логической структурой решаемой задачи. Виды меню Простой запрос представляет собой наиболее несложный вид меню. Выбор режима меню осуществляется нажатием цифры выбранного режима меню.
Пример простого меню: Program Simple_Menu; Uses Crt; Const K=4; {Количество режимов} Nameregim:array[1..K] of String [26]= ('1 - ввод', '2 - вывод', '3 - обработка', '4 - выход'); Var i,j: Byte; Procedure Zast; Begin {процедура заставка} End; Procedure Vvod; Begin {процедура ввода} End; Procedure Vivod; Begin {процедура вывода} End; Procedure Obrabotka; Begin {процедура обработки} End; Begin Zast; While True do Begin Clrscr; GotoXY(24,4); Write ('ГЛАВНОЕ МЕНЮ'); For j:=1 to 4 do Begin GotoXY(25,7+j); Write (Nameregim[j]); end; GotoXY(20,15); Write (‘Выберете режима и нажмите Enter’); ReadLn(i); Case i of 1: Vvod; 2: Vivod; 3: Obrabotka; 4: Exit Else Begin GotoXY(20,17); Write (‘Такого режима нет. Повторите!’); end {else} end {case} end {while} End.
Горизонтальное меню представляет собой строку из списка режимов, один из которых (обычно первый) выделен цветом. Выбор нужного пункту меню осуществляется нажатием клавиш →, ←, активизация режима – клавиша Enter.
ГОРИЗОНТАЛЬНОЕ МЕНЮ Ввод Вывод Обработка Выход
Вертикальное меню – отличается от горизонтального расположением списка режимов.
ВЕРТИКАЛЬНОЕ МЕНЮ Ввод Вывод Обработка Выход
Модуль Mybibl, содержащий горизонтальное и вертикальное меню, процедуру формирования рамки и установки цветов фона и символов: Unit MYBIBL; INTERFACE Uses CRT; Type mas_string=array[1..5] of String; Procedure Frame(X1,Y1,X2,Y2,fon,cvet:INTEGER); Procedure VertMenu(x1,y1,L:Byte;Stor:mas_string; var regim:Byte); Procedure GorMenu(x1,y1,L:Byte;Stor:mas_string; var regim:Byte);
IMPLEMENTATION
Procedure Frame(X1,y1,x2,y2,fon,cvet:Integer); {Процедура черчения рамок заданного цвета и фона} {X1,Y1,X2,Y2 - координаты соответственно левого верхнего и правого нижнего угла рамки} Const {для черчения двойной линии} A=#186; B=#187; C=#188; D=#200; E=#201; F=#205; {для черчения одинарной линии A=#179; B=#191; C=#217; D=#192; E=#218; F=#196;} Var i,j:Integer; Begin TextColor(cvet); GotoXY(X1,Y1); Write(E); {левый верхний угол} {горизонтальная линия} For i:=X1+1 to X2-1 do Write(F); Write(B); {правый верхний угол} {вертикальные линии} For i:=Y1+1 to Y2-1 do Begin GotoXY(x1,i); {переходим к левой границе} Write(A); {левая черта } GotoXY(X2,i); {правая граница } Write(A); {правая черта } end; GotoXY(x1,y2); Write(D); {левый нижний угол} {расширяем вниз на одну строку координаты окна, иначе вывод в правый нижний угол вызовет прокрутку окна вверх} Window(X1,Y1,X2,Y2+1); {возвращаем курсор из левого верхнего угла окна в нужное место} GotoXY(2,Y2-Y1+1); {горизонтальная рамка} For i:=X1+1 to X2-1 do Write(F); Write(C); {правый нижний угол} { Определяем внутреннюю часть окна} {задание окна внутри рамки} Window (x1+1,y1+1,x2-1,y2-1); TextColor(cvet); TextBackground(fon); Clrscr; End;
Procedure VertMenu(x1,y1,L:Byte;Stor:mas_string; var regim:Byte); {процедура формирования вертикального меню} Var k,i:Byte; kod:Char; Begin {задаем окно} frame (x1,y1,x1+20,y1+L+1,blue,Yellow); k:=1; {номер режима} kod:=' '; While kod<>#13 do Begin For i:=1 to L do Begin If i=k then Begin TextBackGround(Green); TextColor(Yellow); End Else Begin TextBackGround(Blue); TextColor(Yellow); end; {вывод строки меню} GotoXY(1,i); Write(Stor[i]); end; {отображение выбора с помощью стрелок} kod:=ReadKey;{считывание символа} {если нажата функциональная клавиша} If kod=#0 then Begin {считывание второго байта} kod:=ReadKey; {если нажата стрелка вверх} If kod=#72 then Begin If k>1 then k:=k-1 else k:=L end; {если нажата стрелка вниз} If kod=#80 then Begin If k<L then k:=k+1 else k:=1; end; end; regim:=k; end; {while} end;
Procedure GorMenu(x1,y1,L:Byte;Stor:mas_string; var regim:Byte); {процедура формирования горизонтального меню} Var k,i:Byte; kod:Char; Begin Frame (x1,y1,79,3,Blue,Yellow); {задаем окно} k:=1; kod:=' '; While kod<>#13 do Begin For i:=1 to L do Begin If i=k then Begin TextBackGround(Green); TextColor(Yellow); End Else Begin TextBackGround(Blue); TextColor(Yellow); end; {вывод строки меню} GotoXY((i-1)*15+1,1); Write(Stor[i]); end; {отображение выбора с помощью стрелок} kod:=ReadKey;{считывание символа} {если нажата функциональная клавиша} If kod=#0 then Begin {считывание второго байта} kod:=ReadKey; {если нажата стрелка ввлево} If kod=#75 then Begin If k>1 then k:=k-1 else k:=L end; {если нажата стрелка вправо} If kod=#77 then Begin If k<L then k:=k+1 else k:=1; end; end; regim:=k; end; end;
BEGIN END.
Пример основной программы, вызывающей вертикальное меню: Program Prim_Vert_Menu; Uses Crt,Mybibl; Const {задаем пункты меню} Menu:mas_string=('Ввод ', 'Вывод ', 'Обработка', 'Выход ',''); Var reg,i,j,k:Byte; kod:Char; Procedure Vvod; Begin Window(1,1,80,25); Frame(40,1,70,10,Blue,Yellow); WriteLn ('Ввод матрицы'); {окно с рамкой с заданным фоном} ... End; Procedure Vivod; Begin Window(1,1,80,25); Frame(40,1,70,10,Blue,Yellow); WriteLn ('Вывод матрицы'); ... End; Procedure Obrabotka; Begin Window(1,1,80,25); Frame(40,11,70,20,Blue,Yellow); WriteLn ('Обработка'); ... End; Begin {основная программа} Clrscr; While True do Begin Window(1,1,80,25); VertMenu(1,1,4,Menu,reg); Case REG of 1:Vvod; 2:Vivod; 3:Obrabotka; 4:Exit end; End End.
Для формирования горизонтального меню необходимо лишь заменить вызов процедуры вертикального меню на процедуру горизонтального меню.
Пример основнойпрограммы формирования меню с подменю следующего вида: ╔═════════════════════════════════════════════════╗ ║ Ввод Вывод Обработка Выход ║ ╚═════════════════════════════════════════════════╝ ╔═════════════╗ ║Поиск ║ ║Перестановка ║ ║Сортировка ║ ║Выход ║ ╚═════════════╝ Program Menu_with_menu; Uses Crt,Mybibl; Const Menu:mas_string=('Ввод ', 'Вывод ', 'Обработка', 'Выход ',''); Menu3:mas_string=('Поиск ', 'Перестановка', 'Сортировка ', 'Выход ',''); Var reg,reg3,i,j,k:Byte; kod:Char; Procedure Vvod; Begin Window(1,1,80,25); Frame(1,4,25,15,Blue,Yellow); WriteLn ('Ввод матрицы'); End; Procedure Vivod; Begin Window(1,1,80,25); Frame(1,4,25,15,Blue,Yellow); WriteLn ('Вывод матрицы'); End; Procedure Poisk; Begin Window(1,1,80,25); Frame(58,4,79,15,Blue,Yellow); WriteLn ('Поиск'); End; Procedure Perest; Begin Window(1,1,80,25); Frame(58,4,79,15,Blue,Yellow); WriteLn ('Перестановка'); End; Procedure Sort; Begin Window(1,1,80,25); Frame(58,4,79,15,blue,yellow); WriteLn ('Сортировка'); End; Begin {основная программа} Clrscr; While True do Begin Window(1,1,80,25); GorMenu(1,1,4,Menu,reg); Case reg of 1:Vvod; 2:Vivod; 3: begin Window(1,1,80,25); VertMenu(32,4,4,Menu3,reg3); case reg3 of 1:Poisk; 2:Perest; 3:Sort; end; {очищаем подменю} Window(1,1,80,25); Window(32,4,55,10); TextBackGround(Blue); Clrscr; Continue; end; 4:Exit end; End End. ПРИБЛИЖЕННОЕ ВЫЧИСЛЕНИЕ ФУНКЦИЙ
Функцию n+1 раз дифференцируемую на интервале (a,b), содержащемточку с, можно разложить в ряд Тейлора, т.е. представить в виде суммы многочлена n- ой степени и остаточного члена : Выражение называется общим членом ряда. Необходимым условием сходимости ряда является то, что общий член ряда по абсолютной величине стремится к нулю. Вычислять значение суммы будем следующим образом: зададим начальное значение суммы, вычислим первый член суммы и добавим его к начальному значению, вычислим второй член суммы, третий и т.д., до тех пор, пока значение n -го члена суммы, по абсолютной величине, не будет меньше заданной точности (добавление его к сумме не повлияет на значение суммы). Формула общего члена ряда может принадлежать к одному из трех типов: 1) ; ; ;... 2) ; ; ;... 3) ; ; ;... В первом случае каждый член суммы вычисляется непосредственно по общей формуле. Во втором случае для вычисления суммы лучше всего использовать рекуррентные соотношения, т.е. выражать последующий член ряда через предыдущий. В последнем случае член суммы представляется в виде произведения двух сомножителей, первый из которых вычисляется с использованием рекуррентных соотношений, а второй вычисляется непосредственно. Пример. Найдем рекуррентные соотношения для 2-х общих членов ряда: 1. Общий член ряда тогда Найдем отношение . Значит 2. Общий член ряда тогда Найдем отношение Тогда Если при подстановке n =1 в общий член суммы будет получен первый член суммы, то начальное значение S=0, если же будет получен второй член суммы, то за начальное значение Sn принимают значение первого члена суммы. Начальное значение для рекуррентных соотношений определяется из первых членов суммы ряда путем выделения в них той части, которая вычисляется рекуррентно. Вычисление суммы организовывается в цикле. Когда при прохождении цикла номер члена суммы изменяется на 1, то сумма изменяется на его n -й член, т.е. Sn+1=Sn+Qn+1, Sn — сумма n членов. Вычисления проводят до тех пор, пока не будет выполнено неравенство | Qn |£ . Пример: С точностью =0,001 подсчитать значение Sn функции F(x), представленной разложением в ряд S=S(x): Результат сравнить со значением функции . Вычисления произвести в диапазоне изменения аргумента x: 0.1£ x £1 с заданным шагом h=(b-a)/k, k =10. На печать выдавать в виде таблицы: аргумент x, значения S и f, количество членов ряда n, обеспечивающих заданную точность и значения члена ряда un. В данном примере общий член ряда принадлежит к третьему типу. Представим его в виде произведения двух сомножителей где вычисляется рекуррентно, а – непосредственно. Найдем рекуррентные соотношения: , Значит Program Sum_While; {Вычисление суммы ряда} Uses Crt; Const eps=0.001; Var a,b,h,x,s,q,u,f:Real; k,n:Integer; Begin Clrscr; Write ('Введите отрезок [a,b]->'); ReadLn (a,b); Write ('Введите значение k->'); Readln (k); h:=(b-a)/k; x:=a; WriteLn(' Таблица значений функции '); WriteLn('┌────┬────────┬────────┬────────┬────┐'); WriteLn('│ x │ S │ f │ Q │ n │'); WriteLn('├────┼────────┼────────┼────────┼────┤'); While (x<=b) do Begin s:=0; n:=1; u:=x*x; q:=u/2; While (abs(q)>eps) do Begin s:=s+q; n:=n+1; u:=u*(-x*x); q:=u/((2*n-1)*2*n); end; f:=x*arctan(x)-ln(sqrt(1+x*x)); WriteLn('│',x:4:2,'│',s:8:4,'│',f:8:4,'│', q:8:4,'│',n:3,'│'); x:=x+h; end; WriteLn ('└────┴────────┴────────┴────────┴────┘'); Repeat Until Keypressed;{задержка экрана пока} End. {не нажата любая клавиша}
|
|||||||
Последнее изменение этой страницы: 2017-02-05; просмотров: 241; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.135.195.180 (0.008 с.) |