Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
InterfaceUses 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. {не нажата любая клавиша}
|