Балтийский Государственный
Технический Университет
«ВоенМех»
имени Д.Ф. Устинова
Отчет
к лабораторной работе по информатике №1
На тему
“Директива $I и Псевдографика”
Отчет выполнил студент
Факультета «И»
Суханов Александр
Группа И433
Санкт-Петербург 2004
Лабораторная работа по информатике №1
Тема: Директива $I и Псевдографика.
Цель: Ознакомиться с директивой $I, а также научиться использовать псевдографику для оформления результатов программы.
Исходная задача: Написать программу для тестирования функции MyFunc, вычисляющей значение натурального логарифма. Программу разбить на три файла:
1. InOut.pas – содержит процедуры ввода-вывода
2. Count.pas – содержит тестируемые функции и процедуру Count [Root]
3. Main.pas – сама программа
Результаты оформить в виде таблицы. Кол-во тестов для функции – от 1 до 10.
Структуры данных:
Data – массив тестовых значений. Тип Real
MyResult – массив значений тестируемой функции. Тип Real
StResult – массив значений стандартной функции. Тип Real
N – количество тестов
Процедуры и функции:
Процедура Init (var n: integer; var Data: massiv) – Ввод массива Data и его размера
Процедура Finit (n: integer; Data, MyResult, StResult: massiv) – Вывод результатов тестирования
Процедура Count (n: Integer; Data: massiv; Func: FuncName; var Result: massiv) – Заполнение массива
Result, использую функцию Func.
Функция MyFunc (x: Real): Real – тестируемая функция
Функция StFunc (x: Real): Real – Стандартная функция
Блок-схемы подпрограмм:
1. Головной модуль Main.pas:
2. Процедуры ввода-вывода InOut.pas:
3. Подпрограммы вычисления значений тестируемых функций Count.pas:
Листинг программы Lab1:
{Файл Main.pas}
{$F+}
program lab1;
uses Crt;
const Nmax = 10;
type Massiv = array [1..Nmax] of real;
FuncName = function (x: Real): Real;
var Data, MyResult, StResult: Massiv;
n: Integer;
{$I InOut.pas}
{$I Count.pas}
begin
Init(n, Data);
Count(n, Data, MyFunc, MyResult);
Count(n, Data, StFunc, StResult);
Finit(n, Data, MyResult, StResult);
end.
{Файл InOut.pas}
procedure Init(var n: Integer; var Data: massiv);
var zicl: Integer;
c: char;
begin
ClrScr;
write('Введите кол-во элементов [Maximum ', Nmax,']: '); readln(n);
if n>Nmax then n:=Nmax;
for zicl:=1 to n do
begin
write('Data[', zicl, ']: '); readln(Data[zicl]);
end;
writeln;
writeln('Ввод успешно завершен. Нажмите любую клавишу...');
repeat
until Keypressed;
while keypressed do c:=readkey;
end;
procedure Finit (n: Integer; Data, MyResult, StResult: massiv);
var zicl: Integer;
begin
ClrScr;
gotoXY(13, 2);
writeln('Разложение в ряд функции ln(x) - натуральный логарифм');
writeln(' г============T=======================T=======================T===============¬');
writeln(' ¦ Аргумент ¦ Тестируемая функция ¦ Стандартная функция ¦ Разница ¦');
for zicl:=1 to n do
begin
writeln(' ¦------------+-----------------------+-----------------------+---------------¦');
write(' ¦ ', Data[zicl]:8:5, ' ¦ ', MyResult[zicl]:14:10, ' ¦ ', StResult[zicl]:14:10, ' ¦');
writeln(' ', abs(StResult[zicl]-MyResult[zicl]):12:10, ' ¦');
end;
writeln(' L============¦=======================¦=======================¦===============-');
gotoXY(1, 25);
write('Нажмите любую клавишу...');
repeat
until Keypressed;
end;
{Файл Count.pas}
function MyFunc (x: Real): Real;
const eps = 1E-8;
var step, chlen: real;
zicl: integer;
s: real;
begin
if x<=0 then
begin
ClrScr;
writeln(‘Ошибка ввода...’);
halt;
end;
step:=(x-1)/x;
zicl:=1; s:=0;
chlen:=step/zicl;
repeat
s:=s+chlen;
inc(zicl);
step:=step*(x-1)/x;
chlen:=step/zicl;
until abs(chlen)<eps;
MyFunc:=s;
end;
function StFunc (x: Real): Real;
begin
StFunc:=ln(x);
end;
procedure Count (n: Integer; Data: massiv; Func: FuncName; var Result: massiv);
var zicl: integer;
begin
for zicl:=1 to n do
Result[zicl]:=Func(Data[zicl]);
end;
Тестовые данные:
Разложение в ряд функции ln(x) - натуральный логарифм
+-------------------------------------------------------------------------------------------------+
¦ Аргумент ¦ Тестируемая функция ¦ Стандартная функция ¦ Разница ¦
¦---------------+------------------------------+------------------------------+-------------------¦
¦ 1.10000 ¦ 0.0953101718 ¦ 0.0953101798 ¦ 0.0000000080 ¦
¦---------------+------------------------------+------------------------------+-------------------¦
¦ 1.20000 ¦ 0.1823215548 ¦ 0.1823215568 ¦ 0.0000000020 ¦
¦---- --------+------------------------------+------------------------------+-------------------¦
¦ 1.30000 ¦ 0.2623642531 ¦ 0.2623642645 ¦ 0.0000000114 ¦
¦---------------+------------------------------+------------------------------+-------------------¦
¦ 1.40000 ¦ 0.3364722278 ¦ 0.3364722366 ¦ 0.0000000089 ¦
¦---------------+------------------------------+------------------------------+-------------------¦
¦ 1.50000 ¦ 0.4054651013 ¦ 0.4054651081 ¦ 0.0000000068 ¦
+-------------------------------------------------------------------------------------------------+
Нажмите любую клавишу…
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.