UCOZ Реклама
Смотрите cars-energy.ru купить аккумулятор для авто, varta.

Урок 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

Константа Число Цвет Процедуры
Black 0 Черный TextColor, TextBackGround
Blue 1 Синий TextColor, TextBackGround
Green 2 Зеленый TextColor, TextBackGround
Cyan 3 Голубой TextColor, TextBackGround
Red 4 Красный TextColor, TextBackGround
Magenta 5 Фиолетовый TextColor, TextBackGround
Brown 6 Коричневый TextColor, TextBackGround
LightGray 7 Ярко-серый TextColor, TextBackGround
DarkGray 8 Темно-серый TextColor
LightBlue 9 Ярко-синий TextColor
LightGreen 10 Ярко-зеленый TextColor
LightCyan 11 Ярко-голубой TextColor
LightRed 12 Ярко-красный TextColor
LightMagenta 13 Ярко-фиолетовый TextColor
Yellow 14 Желтый TextColor
White 15 Белый TextColor
Blink 128 Мерцание TextColor (как слогаемое)

 

Основные директивы модуля 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.

 

<
td>

Библиотека (модуль) 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).

 

Возврат в оглавление

Hosted by uCoz