Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы Алгоритм и Програм.doc
Скачиваний:
5
Добавлен:
14.09.2019
Размер:
407.04 Кб
Скачать

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