
Дана последовательность вещественных чисел, заданная в типизированном файле. Методом индуктивной функции вычислить среднюю длину связных подпоследовательностей отрицательных чисел.
Что здесь можно сделать?


{
Переменные, для вычисления значения функци
vi_Scet - общее количество отрицательных чисел в массиве,
vi_N - количество цепочек отрицательных символов;
vt_Text - дескриптор стандартного типа файлов;
vi_x - Буфферная переменая. Служит для обмена с файловыми данными;
vr_Long - Переменная фиксирующая значение функции;
vb_f0 – флаг принадлежности к цепочке;
(Индуктивное расширение имеет два решения
vb_f0=true - Данные верны, дополняем множество решений;
vb_f0=false -Данные не верны, обрыв цепочки)
}
type
v_Integer: integer;
v_Bool: boolean;
v_Text: text;
v_Real: real;
.
.
.
{
Функция inductiv Проверяет принадлежность входных данных к цепочке отрицательных элементов.
Входные параметры:
x: формальный параметр «входные данные»
побочный эффект: ТRUE данные принадлежат к цепочке, FALSE - нет
}
function inductiv(x:v_Integer):boolean;
begin
if x<0 then
inductiv:=true
else
inductiv:=false;
end;
{
Процедура расчёта средней длины связных подпоследовательностей отрицательных чисел. Входные данные хранятся в стандартном файле.
vr_Long - выходной параметр «Результат расчёта»
}
procedure Sr_Lenght(var: vr_Long: v_Real);
var
vt_Text: v_text;
vi_x,vi_Scet, vi_N: v_Integer;
vr_Long: v_Real;
f0: v_Bool;
begin
AssignFile(vt_Text,'Dan.txt');//Указавем путь к файлу данных
reset(vt_Text); //Устанавливаем готовность к чтению данных
//Инициализируем переменные
vi_Scet:=0; vi_N:=0; f0:=true;
repeat
readln(vt_Text,vi_x); //Считываем данные из файла
if inductiv(vi_x)=true then //если «цепочка», подсчитываем кол
begin
inc(vi_Scet); //Счётчик элементов=+1
f0:=true end //Сохраняем текущее значение функции
else // «Обрыв»
if f0=true then
begin
f0:=false; //Сохраняем текущее значение функции
inc(vi_N) end; //Счётчик «цепочек»=+1
until Eof(vt_Text); //Повторяем процесс, пока не достигнут конец файла.
{Обрабатываем ситуацию - отрицательных элементов нет}
if scet=0 then writeln('ОТРИЦАТЕЛЬНЫХ ЭЛЕМЕНТОВ НЕТ!')
else
srLong:=scet/n;//Вычисляем значения функции
end;
.
.
.
end.
М | Использование тегов - это требование Правил! (Выделить текст программы блоком и выбрать нужный тип кода в меню CODE над окном ввода) Lapp |
{
Переменные, для вычисления значения функци
vi_Scet - общее количество отрицательных чисел в массиве,
vi_N - количество цепочек отрицательных символов;
vt_Text - дескриптор стандартного типа файлов;
vi_x - Буфферная переменая. Служит для обмена с файловыми данными;
vr_Long - Переменная фиксирующая значение функции;
vb_f0 - флаг принадлежности к цепочке;
(Индуктивное расширение имеет два решения
vb_f0=true - Данные верны, дополняем множество решений;
vb_f0=false -Данные не верны, обрыв цепочки)
}
type
v_Integer = integer;
v_Bool = boolean;
v_Text = text;
v_Real = real;
{
Функция inductiv Проверяет принадлежность входных данных к цепочке отрицательных элементов.
Входные параметры:
x: формальный параметр <входные данные>
побочный эффект: ТRUE данные принадлежат к цепочке, FALSE - нет
}
function inductiv(x:v_Integer):boolean;
begin
if x<0 then inductiv:=true else inductiv:=false;
end;
{
Процедура расчёта средней длины связных подпоследовательностей отрицательных чисел.
Входные данные хранятся в стандартном файле.
vr_Long - выходной параметр <Результат расчёта>
}
procedure Sr_Lenght(var vr_Long: v_Real);
var
vt_Text: v_text;
vi_x,vi_Scet, vi_N: v_Integer;
f0: v_Bool;
begin
Assign(vt_Text,'Dan.txt');//Указавем путь к файлу данных
reset(vt_Text); //Устанавливаем готовность к чтению данных
//Инициализируем переменные
vi_Scet:=0; vi_N:=0; f0:=true;
repeat
readln(vt_Text,vi_x); //Считываем данные из файла
if inductiv(vi_x)=true then begin //если <цепочка>, подсчитываем кол
inc(vi_Scet); //Счётчик элементов=+1
f0:=true
end //Сохраняем текущее значение функции
else if f0=true then begin // <Обрыв>
f0:=false; //Сохраняем текущее значение функции
inc(vi_N)
end; //Счётчик <цепочек>=+1
until Eof(vt_Text); //Повторяем процесс, пока не достигнут конец файла.
{Обрабатываем ситуацию - отрицательных элементов нет}
{if scet=0 then writeln('ОТРИЦАТЕЛЬНЫХ ЭЛЕМЕНТОВ НЕТ!')
else srLong:=scet/n;//Вычисляем значения функции}
end;
begin
end.
{Average negative chain length calculating}
{by Lapp}
var
f:text;
n,l,m:integer;
function NegChainL:integer;
var
a:real;
begin
ReadLn(f,a);
if EoF(f) or(a>0) then NegChainL:=0 else NegChainL:=NegChainL+1
end;
begin
Assign(f,'NegChain.dat');
Reset(f);
n:=0;
m:=0;
repeat
l:=NegChainL;
if l>0 then begin
Inc(n);
m:=m+l
end
until EoF(f);
Close(f);
if n=0 then WriteLn('No negative chains found')
else WriteLn('The average negative chain length is ',m/n:8:3);
end.
{Average negative chain length calculating}
{by Lapp}var
f:text;
n,l,m:integer;
{функция NegChainL
если значение считанного элемента отрицательно, значение функции увеличивается на 1
в противном случае обнуляется}
function NegChainL:integer;:
var
a:real;
begin
ReadLn(f,a); // чтение входных данных
if EoF(f) or(a>0) then NegChainL:=0 else NegChainL:=NegChainL+1//если конец файла или
//a>0 то значение функции=0, иначе значение функции+1;
end;
begin
Assign(f,'NegChain.dat');//связываемем имя файла с файловой переменной
Reset(f); //готовим файл к чтению
n:=0; //инициализируем переменные
m:=0;
repeat
// (*)
l:=NegChainL; //переменной l присваиваем значение функции
if l>0 then begin //Если l>0
Inc(n); //счётчик цепочек+1
m:=m+l //счётчик орицательных элементов+!
end
until EoF(f); //если не конец файла, повторяем процесс (*)
Close(f); //Закрываем файл
//Вывод результата
if n=0 then
WriteLn('No negative chains found')
else WriteLn('The average negative chain length is ',m/n:8:3);
end.