- •Общие сведения об эвм
- •1. Общая функциональная схема эвм
- •2. Языки программирования
- •3. Этапы решения задач на эвм
- •4. Понятие алгоритма и его свойства
- •5. Графическое описание алгоритмов. Схемы алгоритмов
- •Блоки для изображения схем алгоритмов и программ
- •6. Типы алгоритмов
- •7. Ос эвм. Понятие о файловой системе
- •Имя.Расширение
- •8. Команды ms dos
- •Программирование на языке Паскаль
- •1. Структура программы на языке паскаль
- •2. Описание данных
- •2.1. Константы
- •2.2. Переменные
- •3. Комментарии
- •4. Операторы языка паскаль
- •5. Операторы обработки данных
- •5.1. Операторы ввода
- •5.2. Операторы вывода
- •5.3. Вычисление по формулам. Оператор присваивания
- •6. Линейные программы
- •7. Управляющие операторы
- •7.1. Разветвляющиеся алгоритмы. Оператор if (если)
- •7.2. Пример разветвляющейся программы
- •7.3. Оператор case
- •8. Циклические алгоритмы и программы
- •8.1. Общая схема цикла
- •8.2. Циклы со счетчиком
- •8.3. Итерационные циклы
- •8.3.1. Оператор цикла с пост-условием
- •8.3.2. Оператор цикла с пред-условием
- •Описание данных
- •9. Типы данных, используемых в паскале
- •9.1. Представление данных в эвм
- •9.2. Стандартные функции Паскаля и Турбо Паскаля
- •9.3. Булевские переменные и выражения
- •9.4. Функции для работы с символами
- •Функции языка Паскаль
- •9.5. Массивы
- •10. Примеры программ обработки массивов
- •11. Особенности алгоритмов и программ с накапливанием
- •12. Алгоритм нахождения минимума и максимума
- •13. Задача сортировки
- •14. Обработка многомерных массивов
- •15. Программы обработки строк символов (текстов)
- •15.1. Простейшие алгоритмы и программы обработки строк
- •15.2. Анализ символов в строке
- •16. Типовые программы обработки строк
- •16.1. Выделение слов из текста (слова разделены одним пробелом)
- •16.2. Выделение слов из текста (слова разделены несколькими пробелами)
- •16.3. Некоторые типовые алгоритмы и программы обработки массивов строк (слов из текстов)
- •17. Алгоритмы поиска
- •17.1. Алгоритм линейного поиска
- •17.2. Алгоритм дихотомического поиска
- •Процедуры, функции и модули в паскале
- •18.1. Процедуры
- •18.1.1. Пример программы с процедурой
- •18.1.2. Расположение процедур в программе
- •18.2. Функции
- •18.2.1. Пример программы с функцией
- •18.3. Внешние процедуры и функции
- •18.3.1. Модули пользователей
- •19. Итерационные циклы
- •19.1. Приближенное вычисление функций
- •19.2. Решение уравнений приближенными методами
- •19.2.1. Метод деления отрезка пополам
- •19.2.2. Метод Ньютона
- •19.2.3. Метод прохождения отрезка с переменным шагом
- •19.3. Вычисление определенных интегралов
- •19.3.1. Метод прямоугольников
- •19.3.2. Метод трапеций
- •20. Дополнительные сведения о ТипАх данных, применяемЫх в Паскале
- •20.1. Перечисляемый тип
- •20.2. Интервальный тип
- •20.3. Множества
- •20.3.1. Примеры программ с использованием множеств
- •Алгоритм
- •20.4. Записи
- •20.4.1. Примеры программ обработки записей
- •Алгоритм
- •Оператор_1;
- •21. Файлы и наборы данных
- •Assign(имя_файла, имя_нд);
- •21.1. Текстовые файлы
- •21.1.1. Создание текстового файла
- •21.1.2. Работа с существующим текстовым файлом
- •21.2. Типизированные файлы
- •21.2.1. Последовательная обработка типизированных файлов
- •21.2.2. Использование прямого доступа к записям типизированного файла
- •21.2.3. Упорядочение записей в файле
- •Алгоритм
- •21.2.4. Удаление записей из файла
- •21.2.5. Вставка записей в файл
- •22. Динамическое распределение памяти. Указатели и списки
- •22.1. Использование указателей. Списки
- •22.2. Очереди
- •22.2.1. Очередь типа lifo
- •22.2.2. Очередь fifo
- •23. Стандартные модули Турбо Паскаля
- •23.1. Модуль Crt
- •23.1.1. Работа с клавиатурой и звуком
- •23.1.2. Управление цветом
- •23.1.3. Создание окон и позиционирование курсора
- •23.1.4. Построение графика в текстовом режиме
- •23.1.5. Алгоритм и программа представления меню средствами Турбо Паскаля
- •23.2. Модуль dos
- •23.3. Модуль Graph
- •23.3.1. Инициирование графического режима
- •1) Процедура InitGraph(Var grDr,grMd:integer;path:string);
- •23.3.2. Вывод точек на экран
- •23.3.3. Вывод текста (надписей) в графическом режиме
- •1) SetTextStyle(Шрифт, Направление:Word; Размер:1..10);
- •23.3.4. Построение графических изображений
- •1) SetLineStyle(Тип_линии, Образец, Толщина : Word);
- •23.3.5. Запоминание и вывод изображений
- •24. Рекомендации по оформлению текста программ
- •Библиографический список
- •Оглавление
19.2.3. Метод прохождения отрезка с переменным шагом
В отличие от двух предыдущих этот метод позволяет найти не один, а несколько корней, если таковые имеются на выбранном интервале. Он предоставляет возможность локализовать каждый из искомых корней (определить все отрезки [a,b]). Сами корни находят одним из первых двух методов.
Суть метода заключается в следующем.
-
Выбирается интервал [А, В] значений аргумента Х, на котором ищутся корни.
-
Определяется начальное значение шага Н = (В - А)/ n, где n — начальное количество точек на интервале.
-
Проходят интервал [А, В] с шагом Н, вычисляя значения функции f(x) и f(x+H).
-
Если вычисленная пара значений функции имеет разные знаки, корень локализован. Его можно определить, например методом Ньютона. После нахождения корня отступают от него на величину шага Н.
-
Уменьшают шаг, например: Н:= Н / 2
-
Пункты 3 — 5 выполняют до тех пор, пока не будут найдены все корни.
Алгоритм нахождения корня описанным методом, который предполагает, что в программе будет использована функция f(x) и ее производная Prf(x), а также процедура нахождения корня уравнения методом Ньютона, приведен ниже.
1.1. Ввести А, В и Е.
1.2. Ввести Предполагаемое количество корней.
1.3. Вычислить начальный шаг Н = (В - А)/ n.
2. Повторять
2.1. Найдено_корней:= 0.
2.2. Х:= А.
2.3. Пока Х < B выполнить.
2.3.1. Вычислить у1:= f(X);
2.3.2. Вычислить y2:= f(x+H);
2.3.3. Если у1 и у2 имеют разные знаки, то
а) положить Левая_граница:= Х;
б) положить Правая_граница:= Х + Н;
в) найти корень методом Ньютона и вывести его;
г) Найдено_корней:= Найдено_корней + 1;
2.3.4. Х:= Х + Н;
2.4. Н:= Н / 2;
Пока не будет (Предполагаемое = Найдено_корней) Или (Н Е).
3. Закончить.
Программа для этого алгоритма будет иметь вид
Program Roots;
Const
n= 20; { начальное количество точек на интервале }
Var
A, B, X, y1, y2, lev, Prav, E : Real;
Predpol, Naideno: Integer; { количества корней }
Function f(x: Real): Real;
Begin
f:= { здесь должна быть формула для вычисления функции}
End;
Function Prf(x: Real): Real;
Begin
Prf:= { здесь будет формула для вычисления производной}
End;
Procedure Newton(Lev,E: Real; Var x:Real);
{ нахождение корня методом Ньютона }
{ Lev - левая граница, x - корень }
Var
Y, xn: Real;
Begin
x := Lev;
{ вычисление корня }
Repeat
xn := x-f(x)/Prf(x);
y := Abs(xn-x);
x := xn;
Until y <= E;
X:= xn;
End;
Begin
Writeln('Введите интервал нахождения корней и погрешность');
Readln(A, B, E);
Writeln('Введите предполагаемое количество корней');
Readln(Predpol);
{ Начальный шаг }
H:=(B-A)/2;
{ Поиск корней }
Repeat
Naideno:=0; { найдено корней }
X:=A;
While x < B do
Begin
Y1:= f(x);
Y2:= f(x+H);
If ((y1>=0) And (y2<0))Or((y1<0) And (y2>=0)) then
Begin
{ корень локализован }
Lev:= x;
Newton(Lev, E, x);
Y1:= f(x);
Writeln('Корень = ', Xsl:8:4);
Writeln('Функция = ', y2:10:7);
End;
X:= x + H;
End;
H:= H / 2;
Until (Predpol = Naideno) Or (H <= E);
If Predpol <> Naideno Then
Writeln('Количество корней задано неверно');
Writeln('Работа окончена');
Readln;
End.