- •Оглавление
- •Предисловие
- •Введение
- •1. Разветвляющиеся вычислительные процессы
- •If логическое_выражение then оператор1 еlse оператор2;
- •If логическое_выражение then оператор1;
- •Пример 1. Вычислить значение функции y(X)
- •Программа
- •Программа
- •2. Циклические вычислительные процессы
- •2.1. Циклы с заданным числом повторений
- •2.1.1. Вычисление массива значений функции
- •2.1.2. Обработка одномерных массивов
- •2.1.2.1. Поиск наименьшего (наибольшего) элемента массива
- •2.1.2.2. Вычисление суммы и количества элементов массива
- •2.1.2.3. Вычисление произведения элементов массива
- •2.1.2.4. Поиск элементов массива по заданному критерию
- •2.2. Циклы с неизвестным числом повторений
- •2.2.1. Табулирование функции
- •2.2.2 Итерационные вычислительные процессы
- •2.2.3. Вычисление суммы членов бесконечного ряда
- •2.3. Сложные циклы
- •2.3.1. Пример алгоритма, содержащего вложенный цикл
- •Программа
- •2.3.2. Обработка двумерных массивов (матриц)
- •2.3.2.1. Вычисление суммы и количества элементов массива
- •2.3.2.2. Поиск элементов массива по заданному критерию
- •3. Работа с текстовыми файлами
- •Программа
- •4. Функции в языке Pascal
- •5. Процедуры в языке Pascal
- •Программа
- •Программа
- •Исходные данные
- •Результаты
- •6. Модули в языке Pascal
- •Unit имя-модуля;
- •Uses имя-модуля1, имя-модуля2, …, имя-модуляN;
- •Пример модуля (библиотеки) с именем Unitmatr
- •Пример рабочей программы (программы пользователя)
- •Литература Методические пособия кафедры
2.1.2.4. Поиск элементов массива по заданному критерию
Пример 10. Переписать положительные элементы массива А, состоящего из n элементов, в массив В (n20).
Программа Схема алгоритма
P rogram Prim10;
var
a,b : array[1..20] of real;
i,n,k : integer;
begin
writeln('Введите n');
readln(n);
writeln('Введите массив');
for i:=1 to n do
read(a[i]);
k:=0;
for i:=1 to n do
if a[i]>0 then begin
k:=k+1;
b[k]:=a[i];
end;
for i:=1 to k do
writeln('b[', i, ']=', b[i]:5:2);
end.
Исходные данные: Результат:
n = 10 b[1]= 4.00
Массив A b[2]= 5.00
4 5 -3 1 7 -2 12 -8 -14 26 b[3]= 1.00
b[4]= 7.00
b[5]=12.00
b[6]=26.00
Пример 11. Найти первый отрицательный элемент массива B, содержащего n элементов (n20).
Программа Схема алгоритма
Program Prim11;
label 1;
var
b:array[1..20] of real;
i,n:integer;
begin
writeln('Введите n');
readln(n);
writeln('Введите массив');
for i:=1 to n do read(b[i]);
for i:=1 to n do
if b[i]<0 then begin
writeln('b[',i,']=',b[i]:6:2);
goto 1;
end;
writeln('Отрицательных элементов нет');
1: end.
Исходные данные: Результат:
I вариант n = 7 I вариант b[3]= -5.00
Массив B
3 8 -5 -2 6 -9 12
II вариант n = 6 II вариант
Массив B Отрицательных элементов нет
4 7 2 9 4 1
2.2. Циклы с неизвестным числом повторений
В циклах с неизвестным числом повторений используются, как правило, операторы repeat-until и while-do.
2.2.1. Табулирование функции
Пример 12. Табулировать функцию y=2x-sin(x) на отрезке [xmin,xmax] с шагом x, т.е. вычислить таблицу значений функции y(x), если x задан на отрезке [xmin,xmax].
В данном примере для организации циклического процесса будем использовать оператор repeat-until.
Общий вид оператора repeat-until:
repeat
оператор1;
оператор2;
…
операторn;
until логическое_выражение;
Выполнение оператора repeat-until:
1) выполняются операторы цикла;
2) если значение логического_выражения равно true (истина), происходит выход из цикла, в противном случае процесс повторяется, начиная с пункта 1).
Программа Схема алгоритма
P rogram Prim12;
var
x, y, xmin, xmax, dx : real;
begin
writeln('Введите xmin,xmax,dx');
readln(xmin,xmax,dx);
x:=xmin;
repeat
y:=2*x-sin(x);
writeln('x=', x:7:2, ' y=', y:7:2);
x:=x+dx;
until x>xmax;
end.
Исходные данные: Результат:
xmin = -2; xmax = 1; dx = 0.5 x= -2.00 y= -3.09
x= -1.50 y= -2.00
x= -1.00 y= -1.16
x= -0.50 y= -0.52
x= 0.00 y= 0.00
x= 0.50 y= 0.52
x= 1.00 y= 1.16
2.2.2 Итерационные вычислительные процессы
Пример 13. Найти методом итераций корень уравнения на интервале [a,b] с заданной точностью и определить количество итераций.
Указания. 1. В качестве нулевого приближения корня уравнения выберем середину интервала [a,b] (x:=(a+b)/2).
2. Для получения предыдущего и последующего приближенных значений корня уравнения будем использовать две переменные x0 и x.
3.Условие выхода из цикла: x - x0.
Программа Схема алгоритма
P rogram Prim13;
var
a,b,x,x0,eps : real;
n : integer;
begin
writeln('a,b,eps');
readln(a,b,eps);
x:=(a+b)/2;
n:=0;
repeat
x0:=x;
x:=sqrt(18+x0)+sqrt(16-x0);
n:=n+1;
until abs(x-x0)<=eps;
writeln('x=', x:8:5,' n=', n:3);
end.
Исходные данные: Результат:
a = 6; b = 8; eps = 0.0001 x= 7.93272 n= 5