
- •Оглавление
- •Введение………………………………………………………..……
- •I. Теоретический раздел работы………………………………………….….
- •I. Теоретический раздел работы…………………………………………….
- •I. Теоретический раздел работы……………………………………………..
- •Работа 1
- •1.Введение.
- •2. Начало работы в среде Turbo Pascal.
- •2.1. Вызов Turbo Pascal.
- •2.2. Использование меню.
- •2.3. Работа с окнами. Использование мыши.
- •2.4. Первая программа.
- •2.5. Работа с файлами
- •2.6. Основные приемы работы с текстовым редактором.
- •2.7. Меню Edit
- •3. В конце работы Вы должны уметь
- •Работа 2 ввод и вывод информации
- •I. Теоретический раздел работы
- •1. Введение.
- •2. Структура программы на языке Паскаль
- •3. Типы данных в языке Turbo Pascal.
- •4. Ввод и вывод данных.
- •II. Экспериментальный раздел работы
- •III. Дополнительный материал.
- •IV. Раздел заданий для самостоятельной работы.
- •Работа 3 расчет по формулам
- •I.Теоретический раздел работы
- •1. Некоторые понятия лексика языка Turbo Pascal.
- •2. Представление вещественных чисел на эвм.
- •3. Оператор присваивания
- •4. Алгебраические выражения.
- •5. Описание пользовательских подпрограмм-функций.
- •II.Экспериментальный раздел работы
- •III. Раздел заданий для самостоятельной работы.
- •Работа 4
- •I.Теоретический раздел работы
- •1. Некоторые сведения о целых типах данных.
- •2. Операции над целыми типами данных.
- •3. Представление целых чисел в компьютере.
- •4. Некоторые стандартные подпрограммы для работы с целыми числами.
- •II.Экспериментальный раздел работы
- •III. Раздел заданий для самостоятельной работы
- •Работа 5 Логический тип данных
- •I.Теоретический раздел работы
- •1. Некоторые сведения о логическом типе данных.
- •2. Логические выражения.
- •3. Основные законы алгебры логики.
- •4. Побитовые операции над целыми числами.
- •Работа 6
- •I.Теоретический раздел работы
- •1. Введение.
- •2. Оператор условного перехода if ... Then...Else
- •3. Условный оператор case...Of
- •II. Экспериментальный раздел работы
- •Работа 7
- •I. Теоретический раздел работы
- •1.Введение.
- •2. Оператор цикла while… do.
- •II. Экспериментальный раздел работы.
- •2. Оператор цикла repeat … until.
- •3. Суммирование рядов.
- •II. Экспериментальный раздел работы Пример 1. Пусть требуется найти сумму ряда:
- •III. Раздел заданий для самостоятельной работы
- •Работа 9 оператор цикла с параметром
- •I. Теоретический раздел работы
- •1. Введение
- •2. Оператор цикла for …do
- •3. Операторы завершения цикла
- •4. Алгоритм Горнера.
- •II. Экспериментальный раздел работы
- •III. Раздел заданий для самостоятельной работы
- •Список литературы
II. Экспериментальный раздел работы
Пример 1. Вычислим
,
где значения аргумента выражены в
градусах.
Сократим число членов в представленном выражении до четырех
.
Начиная с «хвоста», запишем
Начальное значение
,
далее для k=n-1,…1:
Кроме того, нужно перевести градусы
в радианы
.
Алгоритм вычисления:
«подготовка» цикла: n:=45; k:=n; p:=k;
«тело» цикла: k:=k-1; p:=p*pi/180; p:=k +cos(p);
«управление» циклом: если k>1, то выполнять тело цикла;
вывод результата y=cos(p).
Составим подпрограмму
program Example_91;
function Ycos(n:integer):real;
var k:integer; p:real;
begin
k:=n; p:=k;
for k:=n-1 downto 1 do
begin p:=p*pi/180; p:=k + cos(p) end;
Ycos:=cos(p)
end;
var x:real; n:integer;
begin
writeln(‘Введите n=?’); readln(n);
writeln(‘ S =?’, Ycos(n):10:3); readln
end.
Проведите тестовые расчеты при разных значениях параметров.
Пример 2. Составим подпрограмму-функцию вычисления arctg(x) для -1<x<1
с помощью цепной дроби
где коэффициенты k заданы .
Вычислениe цепных дробей легко реализуются с помощью алгоритма Горнера:
function Atan_1(x:real):real;
const n=4;
var u,p : real; m : integer;
k : real;
begin
k:=-0.20556880; {k- последний коэффициент}
u:=sqr(x); p:=k;
for m:=n-1 downto 0 do
begin
writeln(‘Введите очередной коэффициент’);
{0.99999752,-3.00064286, -0.55703890, -17.03715998, -0.20556880}
readln(k);
p:=k+u / p;
end;
Atan_1:=x*p
end;
Проведите тестирование программы, выполнив вычисления при разных значениях параметра x . Полученные значения сравните с табличными значениями функции.
Пример 3. Вычислим интеграл вероятности
используя следующую формулу для его аппроксимации
,
где
.
Здесь коэффициенты ak
заданы.
Program Example_93;
function Erf (x:real):real;
const m=6;
var а,p,q:real;
m,k:integer;
begin
a:=0.3275911;
q:=1/(1+a*x); p:=1.0614054;
for k:=m-2 downto 1 do
begin
writeln(‘введите следующий элемент’);
{0.2548295, -0.28449673,1.4214137,-1.453152, 1.0614054}
readln(a);
p:=a+q*p;
end;
Erf:=1-q*p*exp(-sqr(x));
end;
var xmin,xmax,dx,x :real; k,kmax :integer;
begin
xmin:=0; xmax:=3; dx:=0.1;
kmax:=trunc((xmax-xmin)/dx) +1;
for k:=1 to kmax do
begin
x:=xmin + (k-1)*dx;
writeln(k:4,’ ‘,x:5:0,’ ‘,Erf(x):10:6)
end;
readln
end.
Здесь xmin,xmax – промежуток а dx – шаг табуляции функции.
Проведите тестирование программы для
функций
и
в
диапазоне от 0 до 3.
Пример 4. Разработаем программу, позволяющую рассчитывать таблицу значений многочлена , его первой и второй производных для х в диапазоне от xmin= 0 до max= 9 с шагом dх=3.
Не будем торопиться решать эту задачу «в лоб», а воспользуемся рекуррентным соотношением и дважды продифференцируем его по х:
Вычисления можно организовать так.
Начальные значения очевидно
.
Далее в цикле, от k=n-1
до 0, необходимо «прокручивать»
систему рекуррентных формул
.
Составим программу для многочлена
вида
:
program Example_94;
const n=3;
var a, xmin,xmax,dx,x,p,p1,p2 :real; m, k,nmax :integer;
begin
xmin:=0; xmax:=9; dx:=3;
nmax:=trunc((xmax-xmin)/dx) +1;
for m:=1 to nmax do
begin x:=xmin + (m-1)*dx;
p:=-7.0; p1:=0; p2:=0;
for k:=n-1 downto 0 do
begin
p2:=2*p1 + x*p2; p1:=p + x*p1;
writeln(‘введите следующий элемент’);
{2.1, 3.6, 8.5, -7.0}
readln(a);
p:=a+ x*p
end;
writeln(m:4,’ ‘,x:5:0,’ ‘,p:7:3,’ ‘,p1:7:3,’ ‘,p2:7:3)
end;
readln
end.
Пример 5 (для опытных). Вычислить корень нелинейного уравнения f(x)=0 методом касательной.
Выберем начальное приближение к
решению
.
Это можно сделать, например, проводя
табуляцию функции и построив ее график.
Значение
выберем вблизи точки, где функция
меняет знак, т.е. одного из корней
уравнения f(x)=0.
Далее, вычислив
и
,
из очевидного равенства
легко найти формулу для вычисления следующего приближения аргумента
или обобщая, получим рекуррентное соотношение Ньютона:
,
где
поправка к «старому» значению
аргумента
,
которая должна улучшать «новое»
значение
,
приближая его к искомому значению
x.
Если
,
то для решения поставленной задачи,
можно воспользоваться результатами,
полученными в предыдущем примере.
Запишем подпрограмму-функцию:
function X_Newt( x, eps: real): real;
function Delta(x: real): real;
const n=3;
a : array[0..n] of real = (2.1, 3.6, 8.5, -7.0);
var p,p1:real; k:integer;
begin
p:=a[n]; p1:=0;
for k:=n-1 downto 0 do
begin p1:=p + x*p1; p:=a[k] + x*p end;
Delta:= - p/p1
end;
var
begin k:=0; kmax:=100;
repeat
Inc(k); if (k>kmax) then begin writeln(‘Error_01’;Exit end;
xs:=x; x:=x + Delta(x);
until abs (xs-x) <eps;
end;