IPB
ЛогинПароль:

> Метод индуктивной функции..часть 2
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Женский
Реальное имя: Olya

Репутация: -  0  +


blink.gif У меня тоже проблемы с этим методом, только задание другое:

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

Что здесь можно сделать? wacko.gif smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Olya, давай договоримся: ты будешь сама пробовать компилировать свои программы.
Компилятор у тебя есть? По крайней мере выловишь очевидные ляпы (тип объявляется через равенство, всякие лишние символы - только в коментариях, аосле var двоеточие не нужно, переменные объявляются один раз, все переменные должны быть объявлены..). Ты согласна? Тогда двигаемся дальше..

Скажи, зачем ты переназвала стандартные типы? Вас так учат? Я бы все же делал это только там, где это осмысленно..

Формат такой, что программу читать трудно - отступы скачут без системы. Видно вроде, что ты хотела чего-то добиться этим - но чего?.. Правила простые:
1. блоки объявлений желательно сдвинуть (это у тебя есть)
2. После каждого begin (и repeat) все следующие строки получают дополнительный сдвиг на Таб (обычно Таб=2, но можно делать и 4 или даже 3, только выдерживать принятое значение на протяжении программы)
3. end (и until), если он не закрывает begin (repeat) на той же строке, должен стоять в начале строки. Эта строка и все после нее пишутся с отступом, уменьшенным на Таб.
Вот, практически, и все. Бегин двигает вправо, энд влево. Сложно? smile.gif
Еще одно: не надо так разрывать условный оператор. То, что стоит после then или else - должно стоять на той же строчке, если позволяет длина. Если не позволяет - желательно забрать в блок и сдвинуть уже по правилу бегин-энд.. При этом бегин должен стоять сразу за then (else).
Лишние (пустые) строки ставь только там, где это чем-то обусловлено (например, разделить процедуры друг от друга, выделить структурный блок, если нужно).
Вот так выглядит твоя программа, если ее причесать:
{
Переменные, для вычисления значения функци
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.

Пожалуйста, разберись с этим, а я пока продолжу по существу..

Добавлено через 4 мин.
Последний блок я закомментировал, так как не стал разбираться, что такое scet и как его объявлять. Надеюсь, ты это исправишь сама.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 19.04.2024 23:51
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name