- •1 Вопрос
- •2 Вопрос Основные структуры данных
- •Линейные структуры (списки данных, векторы данных)
- •Табличные структуры (таблицы данных, матрицы данных)
- •Иерархические структуры данных
- •Упорядочение структур данных
- •Файлы и файловая структура
- •3 Вопрос
- •Классическая архитектура
- •4 Вопрос характеристика программного обеспечения пк. Прикладные пакеты и программы. Инструментальные системы операционные системы
- •Функции [править]
- •Понятие [править]
- •Ядро [править]
- •Эволюция и основные идеи [править]
- •Пакетный режим [править]
- •Разделение времени и многозадачность [править]
- •Разделение полномочий [править]
- •Реальный масштаб времени [править]
- •Файловые системы и структуры [править]
- •5 Вопрос
- •6 Вопрос . Алфавит, Типы данных, Переменные и Константы
- •Синтаксис и семантика
- •Алфавит языка
- •Элементарные конструкции
- •Простые типы данных
- •Понятие типа данных в Турбо Паскаль
- •Переменные и константы
- •7 Вопрос Структура программы на языке Паскаль
- •Заголовок программы
- •Раздел меток (label)
- •Раздел констант (const)
- •Раздел типов (type)
- •Раздел переменных (var)
- •Раздел процедур и функций
- •Раздел действий (операторов)
- •8 Вопрос алгоритмический язык паскаль. Арифметические выражения. Функции. Оператор присвоения Возникновение и назначение Паскаля
- •Структура программы на Паскале
- •Операторы ввода, вывода, присваивания
- •Правила записи арифметических выражений
- •Пунктуация Паскаля
- •9 Вопрос Операторы ввода и вывода
- •Ввод данных
- •Вывод данных
- •10 Вопрос Составной оператор Условные операторы Pascal-Паскаль
- •Условные операторы Pascal-Паскаль
- •Оператор выбора Паскаля
- •11 Вопрос операторы цикла. Цикл с предусловием. Цикл с постусловием. Цикл с параметром. Циклический алгоритм
- •Цикл с предусловием / пока
- •Цикл с постусловием - до
- •Цикл с параметром
- •Цикл - пока цикл с параметром
- •Операторы цикла
- •12 Вопрос алгоритм табулирование функции
- •11.1. Алгоритм табулирования
- •13 Вопрос алгоритм вычисления конечный суммы рекуррентная формула
- •Некоторые рекуррентные формулы
- •14 Вопрос массивы. Синтаксис и применение Массивы
- •Синтаксис Определение при помощи array()
- •15 Вопрос Одномерные массивы. Описание, ввод, вывод и обработка массивов на Паскале
- •16 Вопрос алгоритм вычисления суммы элементов одномерного массива
- •17 Вопрос алгоритм вычисления максимального элемента одномерного массива
- •18 Вопрос алгоритм упорядочивания элементов одномерного массива
- •19 Вопрос алгоритм вычисления суммы элементов двумерного массива
- •20 Вопрос алгоритм нахождение максимального элемента двумерного массива
- •21 Вопрос работа с файлами ввод вывод данных паскаль Ввод-вывод данных
- •Вывод данных на экран. Форматированный вывод
- •22 Вопрос функции. Параметры. Локальные глобальные описание
- •23. Процедуры и функции . Параметры-значения и параметры-переменные
- •24 Вопрос модули.Структура модулей Структура модуля
- •25 Вопрос численное решение уравнений. Метод половинного деления
- •26 Вопрос численное решение нелинейных скалярных уравнений. Метод хорд.
- •27 Вопрос численное решение алгебраических уравнений. Метод ньютона
- •28 Вопрос численное решение систем линейных алгебраических уравнений метод простой итерации
- •29 Вопрос численное решение системы линейных алгебраических уравнений метод Зейделя Метод Зейделя для решения слау
- •30 Вопрос численное решение системы линейных алгебраических уравнений с ленточной матрицей. Метод прогонки Метод прогонки
- •31 Вопрос численное решение системы нелинейных алгебраических уравнений метод простой итерации Системы нелинейных уравнений
- •32 Вопрос численное решение системы нелинейных алгебраических уравнений метод ньютона
- •33 Вопрос
- •Численные методы поиска экстремумов функций одной переменной
- •34 Вопрос интерполяция функции многочлен лагранжа Интерполяционный многочлен Лагранжа
- •35 Вопрос аппроксимация эмпирических данных. Метод наименьших квадратов Метод наименьших квадратов (мнк).
- •Суть метода наименьших квадратов (мнк).
- •Вывод формул для нахождения коэффициентов.
- •Оценка погрешности метода наименьших квадратов.
- •Графическая иллюстрация метода наименьших квадратов (мнк).
- •36 Вопрос
- •37 Вопрос интерполяционный кубический сплайн определение Формулировка. Задачи Кубический интерполяционный сплайн
- •38 Вопрос численное интегрирование метод прямоугольников метод Рунге оценки точности численого определения интеграла Метод прямоугольников.
- •Суть метода прямоугольников.
- •Применение правила Рунге Оценка точности вычисления определённого интеграла
- •39 Вопрос численное интегрирование метод трапеций метод Рунге оценки точности численого определения интеграла
- •Применение правила Рунге Оценка точности вычисления определённого интеграла
- •40 Вопрос численное интегрирование метод Симпсона оценки точности численого определения интеграла
- •41 Вопрос
12 Вопрос алгоритм табулирование функции
Итак, основное назначение циклов -- обработка большого объема данных. Математически эта обработка зачастую сводится к поиску, выбору и статистической обработке нужных величин. Практически в любой реальной задаче мы ищем максимальные и минимальные значения в наборе данных, суммируем или перемножаем требуемые данные, определяем арифметическое среднее или количество элементов, отвечающих условию. Для решения всех этих распространенных задач существуют типовые алгоритмы, задающие правила выполнения соответствующих расчетов. Изучением этих алгоритмов мы займемся в гл. 11 и 12.
Разумеется, настоящие задачи, встающие перед программистами, значительно сложнее, чем приведенные далее примеры, но из типовых алгоритмов, как из кирпичиков, строится здание любой сложной программы.
11.1. Алгоритм табулирования
Применяется для составления всевозможных таблиц, которыми могут быть как абстрактная таблица значений математической функции, так и конкретная таблица стоимости товара или платежей, совершенных абонентом сотового оператора.
В общем виде алгоритм можно описать так:
1. до цикла задается начальное значение управляющей переменной, условием выхода из цикла служит достижение управляющей переменной конечного значения;
2. в теле цикла на каждом шаге вычисляется очередное значение функции, зависящее от управляющей переменной, затем формируется строка таблицы;
3. в конце шага цикла значение управляющей переменной (обозначим ее x) изменяется оператором вида x:=x+d;, где d -- заданный шаг по управляющей переменной.
В качестве примера составим таблицу синусов в пределах от 0 до π с шагом по аргументу 0.25. Обозначим аргумент как x, значение синуса от x обозначим как y. В простейшем случае программа табулирования может выглядеть так:
var x,y:real;
begin
writeln('x':10,'sin(x)':10);
{печать заголовка таблицы до цикла}
x:=0; {начальное значение аргумента}
while x<=pi+1e-6 do begin
y:=sin(x); {вычисление функции}
writeln (x:10:2, y:10:2);
{печать строки таблицы}
x:=x+0.25; {шаг по x}
end;
end.
"Расширим" задачу за счет использования произвольных границ изменения аргумента и произвольного шага, а также выполнения всех необходимых проверок корректности. Пусть, например, требуется составить таблицу значений следующей функции:
,
значения a, b вводятся
пользователем.
Напишем текст программы, сопроводив его соответствующими комментариями.
var x,f,a,b,dx:real;
n:integer; {счетчик выведенных строк}
begin
repeat {Цикл ввода с контролем
правильности значений: a,dx,b должны быть
числами, dx>0, a+dx должно быть меньше b}
writeln ('Введите a,dx,b:');
{$I-}read (a,dx,b);{$I+}
if IoResult <> 0 then begin
writeln ('Вы не ввели 3 числовых ',
'значения, попробуем еще раз');
continue;
end;
if (dx<=0) or (a+dx>=b) then begin
writeln ('Вы не ввели допустимые ',
'данные, попробуем еще раз');
continue;
end
else break;
until false;
{Печать заголовка таблицы}
writeln;
writeln ('x':10,'f(x)':10);
x:=a;
n:=2; {2 строки уже использованы}
while x<=b+1e-6 do begin
{в условии цикла учитываем возможную
погрешность работы с real!}
if x<=0 then f:=sqr(x)*x
else f:=exp(1/3*ln(abs(x)));
{корень 3 степени взяли через exp и ln}
writeln (x:10:2,f:10:2);
n:=n+1;
if n=24 then begin
{На экране консоли по умолчанию 25 строк}
write ('Нажмите Enter...');
reset (input); readln;
n:=1;
end;
x:=x+dx;
end;
writeln ('Таблица выведена');
reset (input); readln;
end.
Как видно из примера, основной порядок действий -- такой же, как в предыдущей задаче. Так как экран консоли по умолчанию содержит всего 25 строк, с помощью переменной n мы дополнительно контролируем число уже выведенных строк и делаем по заполнении экрана паузу до нажатия пользователем клавиши Enter.
Разумеется, другие изученные нами виды циклов также могут применяться при табулировании. Рассмотрим в качестве примера следующую задачу.
Известна стоимость единицы товара. Составить таблицу стоимости 1, 2, ..., K единиц товара, значение K вводится.
Так как число единиц товара -- заведомо целое, при программировании задачи будет удобен цикл for:
var t:real;
i,k:integer;
begin
writeln;
writeln ('Стоимость единицы товара:');
read (t);
writeln ('Количество единиц товара:');
read (k);
writeln ('Единиц':10,'Стоимость':10);
for i:=1 to k do
writeln (i:10,(i*t):10:2);
end.
Здесь для простоты мы исключили сделанные в предыдущем примере проверки. Стоимость единицы товара обозначена t, переменная i необходима для перебора возможных значений единиц товара в цикле for. Поскольку счетчик цикла for автоматически меняется с шагом 1, а оператором writeln можно выводить не только значения переменных, но и выражения, основной цикл программы состоит из одного оператора и не нуждается в операторных скобках.
