Урок n 19
Вид материала | Урок |
- Уроки с измененными способами организации, 139.22kb.
- Шаровой Любови Григорьевны. Обычный урок, 98.55kb.
- Урок. Математика 6 класс. «Длина окружности», 95.5kb.
- Урок гра з української літератури в 7 класі "Що? Де? Коли?", 42.92kb.
- В. А. Андреев рассматривает нетрадиционный урок как урок инновационного типа и дает, 508.85kb.
- Урок творческий отчёт урок изобретательства урок-сочинение, 119.16kb.
- Лидия Ивановна Логачёва урок литературного чтения в 4классе по системе Л. В. Занкова., 59.43kb.
- Урок Вводный Урок «Вольга и Микула Селянинович», 28.31kb.
- Анастасией Викторовной Павловой источник: Поурочное планирование •Вводный урок, 288.83kb.
- Произведения Александра Дюма "Три мушкетёра", "Двадцать лет спустя", "Виконт де Бражелон", 1258.59kb.
Урок N 19
Данные логического, символьного и строкового типа в Turbo Pascal.
Библиотека (модуль) CRT и Graph.
Работа с файлами в Turbo Pascal.
Построение графиков функций. Численные методы.
Логический тип переменных называется булевым. Он основан на ма-
тематической логике, в которой применяются две константы: 1 (ис-
тина) и 0 (ложь). В языке Turbo Pascal тоже есть две логические
константы: TRUE (истина) и FALSE (ложь). Их можно использовать в
явном виде или обозначать именем в разделе CONST, например:
const
T=true;
F=false;
L=true;
Логическая переменная тоже может принимать два значения TRUE и
FALSE. Описание логической переменной имеет тип BOOLEAN, например:
var L,A,C:boolean;
В разделе операторов логическому типу переменной можно присвоить
значение логической константы, например:
L1:=true; L2:=false; L3:=L1;
В языке Turbo Pascal для сравнения переменных, принимающих чис-
ленные значения, существуют следующие операции отношений:
< меньше,
<= меньше или равно,
= равно,
<> не равно,
> больше,
>= больше или равно.
Операции с данными логического типа
В языке Turbo Pascal есть логические операции:
OR - логическое ИЛИ (логическое сложение - дизъюнкция).
AND - логическое И (логическое умножение - конъюнкция).
NOT - логическое отрицание НЕ.
Пример программы с использованием логических операций.
Задача. Дополните программу вычисления площади треугольника по
формуле Герона исследованием существования треугольника, если
заданы его три стороны.
program tangle;
var a,b,c,p,S,Q:real;
begin
writeln('Вычислите площадь треугольника по трем сторонам');
writeln('и проведите его анализ.');
writeln('Введите стороны треугольника a,b,c:');
read(a,b,c);
p:=(a+b+c)/2;
S:=sqrt(abs(p*(p-a)*(p-b)*(p-c)));
if (a>=(b+c)) or (b>=(a+c)) or (c>=(a+b))
then writeln('Треугольник не существует.')
else if (a=b) and (b=c)
then writeln('Треугольник равносторонний, его площадь S=',s)
else if (a=b) or (b=c) or (a=c)
then writeln('Треугольник равнобедренный, его площадь S=',s)
else writeln('Треугольник разносторонний, его площадь S=',s);
if (a*a=(b*b+c*c)) or (b*b=(a*a+c*c)) or (c*c=(a*a+b*b))
then writeln('Треугольник прямоугольный.');
writeln('Для выхода из программы введите число 1.');
readln(Q);
end.
Данные символьного типа в Turbo Pascal Язык TP может обрабатывать не только числа, но и символы. Это даёт возможность представлять в программах тексты и выполнять над ними некоторые операции, обрабатывать различные ведомости, доку- менты, справочники и т.д. Значениями символьного типа является всё множество символов ПК. Каждому символу приписывается целое число в диапазоне 0...255. Это число служит кодом внутреннего представления символов. Для кодировки используется код ASCII (Американский стандартный код для обмена информацией). Символьная константа (литера) - это символ, заключенный в апост- рофы, например: 'A', 'R', '+', '7'. Внешние апострофы являются признаком символьной константы, которая занимает 1 байт памяти. Символьную константу можно обозначить именем и задать в разделе констант, например: Const sim='A'; A='B'; S='+'; D1='T'; Символьная переменная принимает значение одного символа. В раз- деле переменных она обозначается описателем CHAR (символьный тип), например: Var B1,B2,R:CHAR; BUKVA:CHAR; Допускается использование символьных данных в операторе присваи- вания, например: BUKVA:='A'; R:='*'; B1:='S'; Операции. Так как символы языка упорядочены, то к символьным данным применимы операции отношений (сравнений): <,<=,=,<>,>,>=. Поэтому 'A'<'B'; '+'<'-'; '*'<'4'. Результатом операции сравнения является логическая константа TRUE (истина) или FALSE (ложь). К символьным данным можно применять встроенные функции: ORD(X)-определяет порядковый номер символа X, например ORD('R')=82. CHR(X)-определяет символ, стоящий по порядковому номеру Х, напри- мер: CHR(68)='D'; PRED(X)-определяет предыдущий символ по отношению к Х, например: PRED('N')='M'; SUCC(X)-определяет последующий символ по отношению к Х, например: SUCC('R')='S'. Пример программы вывода на экран символов (букв) от A до Z: program Simbol; {Данные символьного типа} uses crt; var i:Char; begin clrscr; writeln('Вывод на экран букв от A до Z:'); for i:='A' to 'Z' do write(' ',i); writeln; writeln('Выход-любая клавиша.'); readkey; end. |
Строковые данные Строковые данные - это последовательность символов произвольной длины (до 255 символов). Размер строки указывают в квадратных скобках, но если размер не указан, то он считается равным 255. Строковые данные задаются описателем string. Пример строковой пе- ременной: var str1: string[80]; str2: string; Строковая константа: const January: string[10]='Январь'; Для строковых данных применимы операции объединения (конкатена- ции) и сравнения. Пример: Объединение двух строк. program ObStr; var str, str1, str2: string[80]; begin .... str1:='Turbo'; str2:='Pascal'; str:=str1+str2; {В переменной str - 'Turbo Pascal'} .... end. Пример программы, позволяющей соединить два слова в одно: program Stroka1; {Строковые переменные} uses crt; var x,y,z:string[255]; begin clrscr; writeln('Программа, объединяющая два слова в одно.'); writeln('Введите 1-е слово:'); readln(x); writeln('Введите 2-е слово:'); readln(y); z:=x+y; writeln(z); writeln('Выход-любая клавиша.'); readkey; end. |
Библиотека (модуль) CRT в Turbo Pascal. Библиотека CRT позволяет менять цвета и яркость экрана, производить его очистку, управлять звуковым генератором компьютера. Подключение модуля CRT производится директивой USES CRT, которая указывается в разделе описаний. CRT - аббревиатура, означающая "Электронно-лучевая трубка". Таблица настройки цветов в модуле CRT Turbo Pascal
|
Основные директивы модуля CRT Uses CRT - подключение модуля CRT. TextColor - устанавливает цвет символов. TextBackGround - устанавливает цвет фона (только 8 неярких цветов). HighVideo - устанавливает включение яркости. LowVideo - устанавливает выбор низкой яркости. NormVideo - восстановление того цветового оформления, которое было на момент начала работы программы. ClrScr - производит очистку экрана. ReadKey - обеспечивает задержку изображения и выход из программы при нажатии любой клавиши, например Esc, Enter, Пробел. Sound(1000) - включение звукового сигнала частотой 1000 Гц. Sound(1500) - включение звукового сигнала частотой 1500 Гц. Delay(1000) - установка (задержка) звучания на время 1 с (1000 мс). Delay(2000) - установка (задержка) звучания на время 2 с. NoSound - отключение звукового сигнала. Пример подключения модуля CRT: USES CRT; BEGIN TextColor(14); {Задаёт желтые символы текста} TextBackGround(5); {Задаёт фиолетовый фон} HighVideo; {Устанавливает включение яркости} ClrScr; {Очищает экран} Пример: TextColor(14+128); {Задаёт мерцание символов желтого цвета} Пример программы, использующей модуль CRT: Program Gas; uses CRT; var N:integer; begin TextColor(14); TextBackGround(1); highvideo; clrscr; writeln('Законы состояния идеального газа.'); writeln; writeln('Рассмотрим случаи (здесь число N - номер случая), когда:'); writeln('1) T=const, N=1.'); writeln('2) V=const, N=2.'); writeln('3) P=const, N=3.'); writeln('4) P,V,T=varia, N=4.'); writeln('5) Быстрое сжатие или расширение'); writeln('в теплоизолированном сосуде Q=0, N=5.'); write('Введите число N='); read(N); writeln; if N=1 then writeln('Изотерм. процесс, T=const, PV=const-закон Бойля-Мариотта.'); if N=2 then writeln('Изохорный процесс, V=const, P/T=const-закон Шарля.'); if N=3 then writeln('Изобарный процесс, P=const, V/T=const-закон Гей-Люсака.'); if N=4 then writeln('P,V,T=varia, PV=(M/Mo)RT-уравнение Менделеева-Клайперона.'); if N=5 then writeln('Адиабатный процесс, Q=0, (PV)Г-уравнение Пуассона.'); if N>5 then writeln('Другие случаи здесь не рассматриваются.') else writeln; writeln('Выход - любая клавиша.'); readkey; TextColor(7); TextBackGround(0); clrscr; end. |
Библиотека (модуль) Graph в Turbo Pascal 7.0. Модуль Graph представляет собой библиотеку подпрограмм Turbo Pascal, обеспечивающих полное управление графическими режимами различных мониторов - CGA, EGA, VGA, SVGA. Библиотека содержит более 50 графических процедур и функций, как базовых (рисование точек, линий, окружностей и т.п.), так и расширяющих возможностей базовых (многоугольники, закрашивание фигур, вывод текста и др.). Для запуска программ, использующих модуль Graph, должен быть доступен драйвер egavga.bgi. Для компиляции программ должен быть доступен модуль GRAPH.TPU. Основные директивы модуля GRAPH Uses GRAPH - подключение модуля GRAPH. InitGraph(gd,gm,'c:\tp7\') - инициирование графического режима, указываем gd-графический драйвер, gm-графическую мода и полный путь файла поддержки графики egavga.bgi: c:\tp7\. ClearDevice - очистка экрана в графическом режиме. SetColor(14) - установка цвета рисуемых линий. SetBkColor(1) - установка цвета фона. SetLineStyle(0,0,3) - установка толщины линий. SetFillStyle(5,11) - установка стиля и цвета закраски. Число сти- лей закраски = 0-11. PutPixel(300,250,15) - рисование точки (X, Y, C), где X, Y -коор- динаты точки, C - цвет точки. С=0-15. Line(25,100,100,200) - рисование отрезка прямой линии (X1,Y1,X2,Y2), где X1,Y1-координаты начала отрезка; X2,Y2-коор- динаты конца отрезка прямой линии. Rectangle(25,100,100,200) - рисование прямоугольной рамки (X1,Y1,X2,Y2), где X1,Y1 и X2,Y2 - координаты соответственно начала и конца диагонали левого верхнего угла. Bar(20,70,210,50) - рисование закрашеннго прямоугольника (X1,Y1,X2,Y2), где X1,Y1 и X2,Y2 - координаты соответственно начала и конца диагонали левого верхнего угла. Circle(300,250,80) - рисование окружности (X, Y, R), где X, Y - координаты центра окружности, R - радиус окружности. Arc(300,250,135,45,60) - рисование дуги окружности (X,Y,Ф1,Ф2,R), где Ф1,Ф2 - начальный и конечный углы дуги. X,Y,R - см. выше. PieSlice(100,100,30,120,70) - рисование сектора окружности (X,Y,Ф1,Ф2,R). Ellipse(300,250,0,360,95,40)-рисование эллипса (X,Y,Ф1,Ф2,R1,R2). Ф1,Ф2 - начальный и конечный углы. R1, R2 - радиусы эллипса. Sector(400,100,90,290,200,80)- рисование сектора эллипса (X,Y,Ф1,Ф2,R1,R2). FillEllipse(X,Y,R1,R2) - рисование закрашенного эллипса (или окружности при R1=R2). OutTextXY(25,30,'Текст.') - вывод текста (X, Y, 'Текст'). CloseGraph - закрытие графического режима. Ниже приведены примеры программ, использующих модуль Graph и Graph0 (модуль Graph0 - графика для начинающих, упрощенный модуль Graph). Из комментариев к ним можно узнать о конкретном использо- вании основных директив модуля Graph при создании простейших гра- фических изображений. Пример 1. Program Ris1; uses Crt,Graph; var gd,gm:integer; {gd-графический драйвер, gm-графическая мода} begin gd:=detect; {Автоматически определяем графический драйвер} InitGraph(gd,gm,'c:\tp7\'); {Инициируем графический режим, указы- ваем полный путь файла egavga.bgi} SetLineStyle(0,0,3); {Задаем толщину линии} SetColor(LightMagenta); {Задаем цвет линии} SetFillStyle(1,LightGreen); {Задаем стиль и цвет закраски} PieSlice(100,100,30,120,70); {Рисуем сектор окружности, X,Y,Ф1,Ф2,R} SetColor(White); {Задаем цвет линии} SetFillStyle(5,11); {Задаем стиль и цвет закраски} Sector(400,100,90,290,200,80); {Рисуем сектор эллипса, X,Y,Ф1,Ф2,R1,R2} Readkey; {Обеспечиваем задержку изображения и выход из программы при нажатии любой клавиши, например Esc, Enter, Пробела} CloseGraph {Закрываем графический режим} end. Пример 2. Program Grafika; uses Crt,Graph,Graph0; {Подключаем модули CRT, GRAPH, GRAPH0} begin Init('c:\tp7\'); {Указываем полный путь файла egavga.bgi} SetColor(14); {Задаем цвет рисуемых линий} SetLineStyle(1,0,ThickWidth); {Задаем тройную толщину линии} SetBkColor(1); {Задаем цвет фона} Circle(300,250,120); {Рисуем окружность, X, Y, R} SetColor(11); Circle(300,250,100); SetColor(13); Circle(300,250,80); SetColor(10); Arc(300,250,135,45,60); {Рисуем дугу, X, Y, Ф1, Ф2, R} SetColor(12); Ellipse(300,250,0,360,95,40); {Рисуем эллипс, X, Y, Ф1, Ф2, R1, R2} PutPixel(300,250,15); {Рисуем точку, X, Y, C} SetColor(15); OutTextXY(25,30,'Графика в Turbo Pascal.'); {Вывод текста, X, Y, 'Текст'} SetColor(11); OutTextXY(160,450,'Для выхода из программы нажмите Esc.'); SetFillStyle(1,14); {Задаем вид закраски (0-11) и цвет закраски С} Bar(20,70,210,50); {Рисуем закрашенный прямоугольник, X1,Y1,X2,Y2} SetColor(11); Rectangle(25,100,100,200); {Рисуем прямоугольную рамку, X1,Y1,X2,Y2} SetColor(14); Line(25,100,100,200); {Рисуем прямую линию, X1,Y1,X2,Y2} Readkey; CloseGraph; end. Здесь X, Y, X1, Y1, X2, Y2 - координаты основных точек на экране; Ф1, Ф2 - углы дуг, круговых и эллиптических секторов; R, R1, R2 - радиусы окружностей, эллипсов, дуг и секторов. С - цвет линий (0-15). Пример 3. Флаг России. program Flag_RUS; uses CRT,Graph,Graph0; begin Init('c:\tp7\'); SetFillStyle(1,15); Bar(0,0,320,50); SetFillStyle(1,1); Bar(0,51,320,101); SetFillStyle(1,4); Bar(0,102,320,152); ReadKey; CloseGraph; end. Примеры программ построения графиков функций: 1. Построение графика параболы в декартовых координатах (путь S(t)=gt2/2 при свободном падении тела). Построение производится по точкам. Program Put3; uses Crt,Graph,Graph0; var t1,S,H,n:integer;Y,g,dt,t:real; begin Init('c:\tp7\'); SetColor(14); OutTextXY(25,30,'Путь S(t)=gt2/2 при свободном падении.'); OutTextXY(25,50,'Выход - любая клавиша.'); SetColor(10); Line(0,470,550,470); Line(0,0,0,470); g:=9.81; t:=0; n:=100; repeat Y:=g*t*t/2; dt:=1/(n+1); t:=t+dt; t1:=round(6*t); S:=round(Y); H:=round(470-S/70); PutPixel(t1,H,11); until t>80; Readkey; CloseGraph; end. 2. Построение графика функции (улитки Паскаля) в полярных коорди- натах. Если в прямоугольных (декартовых) кординатах задают точку A на плоскости по её координатам x, y, то в полярных координатах точку задают по её радиус-вектору R и углу fi между вектором R и осью X (смотрите чертёж на рисунке). Функция в декартовых коорди- натах имеет вид y=f(x), в полярных координатах R=F(fi). Связь между декартовыми и полярными координатами: x=R*cos(fi), y=R*sin(fi), R=SQRT(x*x+y*y). Program Ulitka; uses crt, graph, graph0; const xc=320; yc=175; k=0.775; var fi,dfi,R,a:real; x1,y1,x2,y2,n:integer; Function F(fi:real):real; begin F:=a/2+a*cos(fi); end; begin clrscr; writeln('Улитка Паскаля: R=1+a*cos(fi).'); write('Введите коэффициент a=0.5-2; a='); read(a); a:=100*a; write('Введите число точек n>=100; n='); read(n); init('C:\TP7\'); cleardevice; outtextxy(10,10,'Улитка Паскаля: R=1+a*cos(fi).'); setcolor(10); line(xc,0,xc,349); line(0,yc,639,yc); dfi:=2*pi/n; x1:=xc; y1:=yc; fi:=0; while fi<2*pi+dfi do begin R:=F(fi); x2:=xc+round(R*cos(fi)); y2:=yc+round(k*R*sin(fi)); setcolor(11); line(x1,y1,x2,y2); x1:=x2; y1:=y2; fi:=fi+dfi; end; outtextxy(10,30,'Выход - любая клавиша.'); readkey; closegraph; end. Здесь построение графика функции производится с помощью отрезков прямых линий, которые при большом их числе превращаются в кривую линию. В программе для построения графика функции используется процедура Function, что позволяет строить графики других функций, не меняя программы (универсальный алгоритм), а заменив только вид самой функции R=F(fi). Например, если подставить R=a*(1-cos(fi)), то мы получим кардиоиду. Аналогично можно построить график спира- ли Архимеда R=a*fi и т.д. |
Работа с файлами в Turbo Pascal При работе с файлами в TP используются следующие процедуры: assign(var F; name: string); - устанавливает соответствие между файлом и файловой переменной, окрывает все другие поцедуры работы с файлами. F -переменная любого файлового типа, name - полное имя файла. close(var F); - окончание процедур работы с файлами (закрытие файла). rewrite(var F: file); - создаёт и открывает новый файл. reset(var F: file); - открывает существующий файл. append(var F: text); - открывает существующий текстовый файл и позиционирует указатель обработки на конец файла. После этого можно дополнять текстовый файл информацией, начиная с конца стро- ки. erase(var F); - удаляет неоткрытый внешний файл любого типа, за- даваемый переменной F. rename(var F: newname: string); - переименовывает неоткрытый файл F любого типа. Новое имя задаётся строкой newname. Текстовый файл можно рассматривать как последовательность симво- лов, разбитую на строки длиной от 0 до 256 символов. Для описания используется стандартный тип text: var F: text; (F - файловая пе- ременная). Стандартные типы данных не требуют описания в разделе type в от- личие от типов, образованных пользователем. Формат раздела: type <имя типа> = <значение типа>; Имя и значение типа даёт пользователь. Пример: type fil=text; Рассмотрим работу с файлами в TP на примерах. Пример 1. Запись текстового файла на диск и ввод в него текста. program wtf; type fil=text; var f1:fil; name:string[35]; txt:string; begin write('Введите имя файла для записи текста>'); readln(name); writeln; assign(f1,name); rewrite(f1); writeln('Введите текст для записи (для окончания-Enter):'); writeln; repeat write(':>'); readln(txt); writeln(f1,txt); until txt=''; close(f1); writeln; writeln('Ввод окончен, нажмите Enter.'); readln; end. Пример 2. Запись результата вычисления в текстовый файл. program wtf1; uses crt; type fil=text; var f1:fil; name:string[35]; txt:string; var i,n:real;s,q:real; begin clrscr; writeln('Для вычисления суммы ряда S=1+1/4+1/9+...+1/n2,'); write('введите n=1,2,3...: n='); read(n); i:=1; S:=1; while i<>n do begin i:=i+1; s:=s+1/(i*i); end; writeln('Сумма членов ряда равна S=',s); name:='rezult.txt'; txt:='Сумма ряда S=1+1/4+1/9+...+1/n2 равна: S='; writeln; assign(f1,name); rewrite(f1); writeln(f1,txt,s,' при n=',n:9:0); close(f1); writeln('Ваш результат будет записан в файл rezult.txt'); writeln('Для выхода из программы нажмите Enter.'); readkey; end. Пример 3. Чтение последовательности длиной до 35 символов из текстового файла example.txt (его содержимое, например, "23456 Всем привет!" Функция Eoln(var F: text) возвращает булевское значение True, если текущая файловая позиция находится на маркере конца строки или вызов Eof(F) возвратил значение True. Во всех других случаях значение функции будет False. Функция Eof(var F: text) возвращает булевское значение True, ес- ли указатель конца файла находится сразу за последним компонен- том. В противном случае - False. program wtf2; var F: text; St: string[35]; begin assign(F, 'example.txt'); {Файл example.txt должен существовать!} reset(F); while not Eoln(F) do begin {Проверка конца строки} read(F,St); writeln('St = ',St); {Вывод на экран} end; readln(F); {Переход к следующей строке} close(F); writeln('Вывод символов из файла окончен. Для выхода - Enter.'); readln; end. |
Численные методы и связанные с ними задачи. Рассмотрим некоторые характерные для численных методов задачи, для решения которых удобно использовать программирование на TP. Пример 1. Вычислите приближенно определенный интеграл по формуле прямоугольников. Подынтегральная функция f(x)=sin(x). Пределы ин- тегрирования a=0; b=pi. program INTEGRAL1; var i,n:integer; a,b,S,h,x,Y:real; begin writeln('Подынтегральная функция f(x)=sin(x). Пределы a=0; b=pi.'); write('Введите число членов ряда приближения: n='); read(n); a:=0; b:=pi; h:=(b-a)/n; S:=0; for i:=1 to n do begin x:=a+i*h-h/2; S:=S+h*sin(x) end; writeln('Приближенное значение интеграла равно: I=',S); writeln('Для выхода из программы введите число 1.'); readln(Y); end. Пример 2. Вычислите выражение S=sqrt(1+sqrt(2+sqrt(3+sqrt(4+...))) с максимальной точностью. program zp1; var j,n:integer;s0,s1:real; begin s0:=0; s1:=1; n:=1; while s0<>s1 do begin s0:=s1; n:=n+1; s1:=0; for j:=n downto 1 do s1:=sqrt(j+s1); end; writeln('Ответ: значение выражения S=',s1); writeln('Для выхода из программы - Enter.'); readln end. Пример 3. Вычислите с точностью e (e<<1) сумму ряда S=sin(x)=x-x3/3!+x5/5!-x7/7!+...+(-1)(n-1)*x(2*n-1)/(2*n-1)! Это разложение функции S=sin(x) в ряд Тейлора. program zp2; var i:integer;x,y,S,e,q:real; begin write('Введите x='); read(x); write('Введите величину точности e='); read(e); i:=1; S:=x; y:=x; while abs(y)>e do begin i:=i+1; y:=-y*x*x/((2*i-2)*(2*i-1)); S:=S+y; end; writeln('Ответ: Сумма ряда S=',S); writeln('Для сравнения и проверки S=sin(x)=',sin(x)); writeln('Для выхода из программы введите любое число.'); readln(q); end. Пример 4. Решение уравнения F(x)=sin(x)-x+0.25=0 методом простых итерраций. Суть этого метода заключается в следующем. Пусть Xo - исходное приближённое значение корня уравнения F(x)=0, которое может быть переписано в виде x=f(x). Тогда в качестве следующего приближения примем x1=f(Xo). В качестве следующего приближения возьмём x2=f(x1). Продолжая процесс дальше, в качестве n-го приб- лижения необходимо положить Xn=f(X(n-1)). Итеррационный процесс будет сходиться и мы в итоге указанной процедуры найдем корень уравнения, если ABS(f'(x))<1. В противном случае процесс расхо- дится и мы не найдём решение этим методом. При нахождении исход- ного значения корня Xo следует учитывать, что в окрестности корня функция F(x) меняет знак. Данное уравнение можно решить только приближённо и лишь численны- ми методами. Заданная точность e=1e-9. Начальное значение корня x=1. Получаемый в процессе решения результат x=1.1712296519 прев- ращает уравнение в тождество с большой точностью. program iterac; label m1; var i:integer; x,x1,e,q:real; begin e:=1e-9; x:=1; for i:=1 to 30 do begin x1:=sin(x)+0.25; if abs(x1-x)<=e then goto m1; x:=x1; end; m1: writeln('Ответ: x =',x1); writeln('Для выхода введите любое число.'); readln(q); end. Пример 5. Решение уравнения F(x)=cos(x)-x=0 методом Ньютона. Согласно методу Ньютона, корень уравнения равен x1=x-F(x)/F'(x). Этот численный метод часто используется как основной, а также в тех случаях, когда уравнение не удаётся решить методом простых итерраций. Чтобы метод сходился и приводил к результату необходи- мо, чтобы начальное значение x было выбрано достаточно близко к корню и в окресности корня значение F'(x) не было слишком большим и F'(x) не было слишком близко к нулю. Последнее условие F'(x)<>0 означает, что никакие два корня не находятся слишком близко один к другому. В данном примере начальное значение корня x=0.7. Корень x=0.73908. program Newton; uses crt; var x,x1,e:real; i:integer; begin clrscr; i:=1; e:=1E-3; x:=0.7; repeat i:=i+40; x:=x+i*e; x1:=x+(cos(x)-x)/(sin(x)+1); until abs(x-x1)>=e; writeln('Ответ: x=', x1); writeln('Проверка решения: F(x)=cos(x)-x =', cos(x1)-x1); writeln('Выход - любая клавиша.'); readkey; end. |
Вопросы 1. Что такое данные логического типа и как они используются? 2. Какие существуют операции отношений над переменными в Turbo Pascal? 3. Какие существуют операции над данными логического типа? 4. Что такое данные символьного типа? 5. Что такое данные строкового типа? 6. Что такое библиотека CRT в Turbo Pascal и как она используется? 7. Какие директивы модуля CRT вы знаете? 8. Как очищается экран и задается цвет текста и цвет фона? 9. Как устанавливается и отключается звуковой сигнал? 10. Что такое модуль Graph и какие директивы модуля Graph Вы знаете? Задания 1. Воспроизведите самостоятельно и проанализируйте приведенную выше программу исследования треугольника. 2. Составьте программу, определяющую наибольшее из трёх чисел. 3. Составьте программу, определяющую наименьшее из трёх чисел. 4. Введите в приведенные выше программы модуль CRT и задайте цвет текста и цвет фона, а затем поменяйте их. Примените команду очистки экрана. 5. Введите в приведенные выше программы модуль CRT и задайте включение звука, измените частоту и длительность его звучания. Попытайтесь исполнить простейшую мелодию, а затем отключите звук. 6. Создайте простейшие изображения (окружность, линия, прямоу- гольник, эллипс) при помощи модуля Graph Turbo Pascal. 7. Нарисуйте треугольник с вписанной и описанной окружностями. 8. Нарисуйте квадрат с диагоналями и с вписанной в него окруж- ностью. 9. Нарисуйте Солнце. 10. Нарисуйте пятиконечную звезду, вписанную в окружность. 11. Нарисуйте график функции (параболы, гиперболы и т.д.). 12. Решите уравнение методом простых итерраций: exp(x)+x=0 (Ответ: x=-0.567) 13. Решите следующие уравнения методом Ньютона: 2*x3-5*x2+5*x-3=0 (Ответ: x=1.5); x3-x2-x-2=0 (Ответ: x=2); exp(x)+x-3=0 (Ответ: x=0.792) 14. Вычислите простейшие определённые интегралы методом прямоугольников от следующих функций: cos(x) от 0 до pi/2 (Ответ: S=1) 1/x от 1 до e (Ответ: S=1) 4/(1+x2) от 0 до 1 (Ответ: S=pi) exp(x) от 0 до 1 (Ответ: S=e-1). |