Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции ЯП (Кузьмин) ч.2_new (Паскаль).docx
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
3.97 Mб
Скачать

12. Табулирование функций

Табулирование функций - построение таблиц функций.

В общем случае задача ставится следующим образом: для значений аргумента, заданных (определенных) на интервале от А (начальное значение аргумента) до В (конечное значение аогумента) с шагом h, надо построить таблицу следующего вида:

шапка

тело таблицы

Х

Y

Х1

Y1

Х2

Y2

...

...

Хn

Yn

Анализ объекта, который надо построить (таблицы), позволяет разбить его на шапку и тело. Поэтому задача по выводу распадается на 2 подзадачи: вывод шапки и вывод тела.

Вывести шапку

Вывести таблицу

Вывести тело

WriteLn ('| X | Y |');

WriteLn ('+-------+-------+');

В общем случае ширина строк в шапке неизвестна, потому, что она будет зависеть от того, сколько символов вы выберете для представления значения Х и значения Y.

Анализ тела таблицы показывает, что оно имеет т.н. регулярную структуру (см. далее – Массивы), и вывод его на экран можно записать следующим образом:

Создание каждой строки на экране будет состоять из трех шагов:

  1. Получить текущее значение x.

  2. Вычислить значение функции y = f(x).

  3. Вывести значения x и y.

В итого получим следующую последовательность действий для вывода тела:

1шаг {создание 1-ой строки тела}

Х1 = А

Y1 = F(X1);

WriteLn(Х1 и Y1

2шаг {создание 2-ой строки тела}

X2 = X1 + h

Вычислить Y2 = F(X2).

WriteLn( X2 и Y2 можно свернуть в цикл

3шаг {создание 3-ей строки тела}

X3 = X2 + h

Вычислить Y3 = F (X3)

WriteLn(X3 и Y3

Из выше написанного легко заметить, начиная со второго шага (с создания второй строки) замечается повторяемость, что говорит о том, что можно найти обобщенную запись (рекуррентную формулу) для действий, начиная со второй строки. Эта обобщенная запись будет иметь вид:

Xi = Xi-1 + h

Вычислить Yi = F (Xi)

WriteLn(Xi и Yi)

То, что не удалось обобщить, нужно включить в подготовку цикла, и ее надо сразу упростить, чтобы включить в цикл (тело цикла) все шаги, начиная с 1-го:

X1 = A X0 + h = A X0 = A - h

X1 = X0 + h упрощенная подготовка цикла

В общем случае, цикл получится следующим:

X0 = A – h;

for i := 1 to n do

begin

точнее

n = round((B - A) / h) + 1

Xi = Xi-1 + h

Yi = f(Xi)

WruteLn(Xi и Yi);

end;

В этом фрагменте программы остаются неизвестными 2 момента:

  1. чему равняется n?

  2. как выводить строку со значением Xi и Yi?

Для вычисления n обычно используется формула: n = (B - A) / h + 1, где h - заданный шаг.

Вывод строк в шапке таблицы можно будет уточнить после того, как определим, как выводится каждая детальная строка в теле таблицы:

Например:

9 позиций 9 позиций

Writeln('| ', x:9:4,' | ', y:9:4,' |'); вывод детальной строки

Writeln('| X | Y |); вывод строки шапки

9 позиций 9 позиций

В общем случае заранее ширина шапки неизвестна (она определяется тогда, когда станет ясна форма вывода строк тела шапки).