У меня тоже проблемы с этим методом, только задание другое:
Дана последовательность вещественных чисел, заданная в типизированном файле. Методом индуктивной функции вычислить среднюю длину связных подпоследовательностей отрицательных чисел.
Olya, давай договоримся: ты будешь сама пробовать компилировать свои программы. Компилятор у тебя есть? По крайней мере выловишь очевидные ляпы (тип объявляется через равенство, всякие лишние символы - только в коментариях, аосле var двоеточие не нужно, переменные объявляются один раз, все переменные должны быть объявлены..). Ты согласна? Тогда двигаемся дальше..
Скажи, зачем ты переназвала стандартные типы? Вас так учат? Я бы все же делал это только там, где это осмысленно..
Формат такой, что программу читать трудно - отступы скачут без системы. Видно вроде, что ты хотела чего-то добиться этим - но чего?.. Правила простые: 1. блоки объявлений желательно сдвинуть (это у тебя есть) 2. После каждого begin (и repeat) все следующие строки получают дополнительный сдвиг на Таб (обычно Таб=2, но можно делать и 4 или даже 3, только выдерживать принятое значение на протяжении программы) 3. end (и until), если он не закрывает begin (repeat) на той же строке, должен стоять в начале строки. Эта строка и все после нее пишутся с отступом, уменьшенным на Таб. Вот, практически, и все. Бегин двигает вправо, энд влево. Сложно? Еще одно: не надо так разрывать условный оператор. То, что стоит после then или else - должно стоять на той же строчке, если позволяет длина. Если не позволяет - желательно забрать в блок и сдвинуть уже по правилу бегин-энд.. При этом бегин должен стоять сразу за then (else). Лишние (пустые) строки ставь только там, где это чем-то обусловлено (например, разделить процедуры друг от друга, выделить структурный блок, если нужно). Вот так выглядит твоя программа, если ее причесать:
{ Переменные, для вычисления значения функци vi_Scet - общее количество отрицательных чисел в массиве, vi_N - количество цепочек отрицательных символов; vt_Text - дескриптор стандартного типа файлов; vi_x - Буфферная переменая. Служит для обмена с файловыми данными; vr_Long - Переменная фиксирующая значение функции; vb_f0 - флаг принадлежности к цепочке; (Индуктивное расширение имеет два решения vb_f0=true - Данные верны, дополняем множество решений; vb_f0=false -Данные не верны, обрыв цепочки) }
{ Функция inductiv Проверяет принадлежность входных данных к цепочке отрицательных элементов. Входные параметры: x: формальный параметр <входные данные> побочный эффект: ТRUE данные принадлежат к цепочке, FALSE - нет }
function inductiv(x:v_Integer):boolean; begin if x<0 then inductiv:=true else inductiv:=false; end;
{ Процедура расчёта средней длины связных подпоследовательностей отрицательных чисел. Входные данные хранятся в стандартном файле. vr_Long - выходной параметр <Результат расчёта> }
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.
Пожалуйста, разберись с этим, а я пока продолжу по существу..
Добавлено через 4 мин. Последний блок я закомментировал, так как не стал разбираться, что такое scet и как его объявлять. Надеюсь, ты это исправишь сама.
--------------------
я - ветер, я северный холодный ветер я час расставанья, я год возвращенья домой