Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
20
Добавлен:
10.12.2013
Размер:
107.52 Кб
Скачать

28

Алгоритмы итерационной структуры.

Итерационными называются такие циклические вычислительные процессы, в которых количество циклов заранее неизвестно.

Выход из цикла достигается при достижении какого либо условия.

Найти сумму ряда

x x x

y = x - ----- + ----- - ----- + …

2! 3! 4!

С точностью = 10, точность считается достигнутой, если очередной член ряда по модулю <.

Составим программу: x

Program iter; a = a *----- общий член ряда.

uses crt; i

var y = y +a cумма ряда.

x, y, a: real;

i = integer; esp: = real;

begin

Clr Scr; - очищение экрана

Writeln (' введите x, esp'); readln (' x, esp);

определение начальных значений.

While abc (a)>esp do

begin

Вычисление суммы ряда -

Writeln ('y=', y, ' кол. итер.=', i );

end.

1шаг 2 шаг 3 шаг

a = (-1)*(x/1) a = -(x)*(x/2) a = -(-x/2)*(x/3)…

a = +x a = x/2 a = +x/(2*3) = x/3!

Массивы.

Массив объединяет элементы одного типа данных. Всему набору данных присваивают общее имя - имя массива. Каждый элемент массива определяется с помощью индекса, определяющего место этого элемента в общем наборе.

Описание массивов:

a: array[1…n] of <mun>;

описывается в "описательной части" программы.

a - имя массива;

n - максимальное количество элементов массива;

<mun> - тип элементов массива.

Например:

program mas;

var

Mas: array[1…10] of real;

begin

….

Описан массив Mas - содержащий 10 элементов вещественного типа. Каждый элемент массива определяется с помощью индекса, стящего справа от именив квадратных скобках.

a[i], a[i+2], a[9]

Индекс может быть - переменной, константой, ариф. выражением целого типа.

Размер массива должен быть задан в явном виде, или через const.

Например:

Program mas;

const

n = 10;

var

Mas: array [1…n] of real;

… i : integer;

Mas - имя массива;

i - индекс массива.

Задача 1:

Составить программу подсчета суммы и произведения элементов одномерного массива.

Program sum-prois;

uses crt;

const

n = 100;

var

a: array [1…n] of real;

n, k, i: integer;

p, s: real;

begin

clrscr; s: = 0; p: =1;

writeln ('введите размер массива'); readln (nk);

writeln ('введите элемент массива');

for i:=1 to nk do

readln (a[i] );

for i:=1 to nk do

begin

s:= s + a[ i ];

p:= p * a[ i ];

end;

writeln ('Сум. = ', s, 'Произ. =' , p);

end.

Необходимо подготовить ячейки:

  • при накапливании суммы - s=0

  • при подсчете произведения - p=1.

Задача рассчитана на обработку массива с максимальным размером 100 элементов (n=100).

Конкретный размер массива вводится с клавиатуры (nk).

При каждом прохождении через цикл с клавиатуры вводится только один элемент массива. Два цикла for можно было объединить в один.

----------------------------------------------------------------------------------------------------------------

Задача 2:

Составить программу подсчета суммы только тех элементов массива, целая часть которых - нечетная.

Program sum;

coust n=100;

var a: array [1..n] of real;

s: real;

n, k, i: integer;

begin

s: =0; writeln ('введите n100'); readln (nk);

for i:=1 to nk do

begin

writeln ('введ.', i, '- й элемент массива');

readln (a[ i ] );

if odd (trunc (a[ i ] ) then s: = s + a[ i ];

end;

writeln ('Сумма нечетных элементов = ', s);

end.

Ввод и обработка элементов массива производится в одном цикле.

Функция trunc (a[ i ] ) - выделяют целую часть каждого элемента.

Функция odd - вырабатывает значение TRUE - если целая часть элемента массива - нечетное число, и этот элемент попадает в сумму.

Оператор writeln (odd ( trunc(x)) - выдает на печать:

TRUE - если x - нечетное;

FALSE - если x - четное.

-------------------------------------------------------------------------------------------------------------------

Задача 3:

Дан массив a(n). Найти max элемент и определить его номер.

Program max;

var

a: array [1…100] of real;

i, n, k: integer; max: real;

begin

writeln ('введите размер массива');

readln (n);

writeln ('введите элементы массива');

for i:=1 to n do

readln (a[ i ] );

max: =a[1];

k:=1;

for i:=1 to n do

{Составной оператор:}

If a[i]>max then

begin

max: =a[i];

k: =i;

end;

writeln ('max =', max, ' N=', k);

end.

Для поиска min - достаточно изменть a[i]<min.

-------------------------------------------------------------------------------------------------------------------

Задача 4:

Дан массив a(n). Преобразовать массив, циклически сдвинув его на k позиций влево.

Program prim;

var

a: array [1…100] of integer;

i, j, k, n, p: integer;

begin

writeln ('введите размер массива n100 и число k');

readln (n, k);

writeln ('введите элементы массива');

{ввод}

for i:=1 to n do

readln (a[i]);

{сдвиг}

for i:=1 to k do

begin

p: =a[1];

for i:=1 to n-1 do

a[i]:=a[i+1];

a[n]:=p;

end;

{печать }

for i:=1 ton do writein (a[i]);

end.

p - буфер для обмена содержимого ячеек.

k - число сдвигов.

n - реальный размер массива (n100).

--------------------------------------------------------------------------------------------------------------------

Задача 5:

Даны три массива:a(n), b(m), c(k).

Массив a(n)- упорядочен,

a[i]<a[i+1]

Из a(n) - удалить m элементов с номерами, хранящимися в b(m) ,(m<n). Затем в массив a(n) - вставить k элементов, не нарушая упорядоченности из массива c(k).

n-m+k100

Program prim;

label 3;

type

mas = array [1..100] of integer;

var

a, b, c: mas;

i, j, p, n, m, k:integer;

begin

write(' введите n, m, k'); readln(n, m, k);

writeln ('введите массив a);

for i:=1 to n do readln (a[i]);

writeln ('введите массив b');

for i:=1 to m do readln (b[i]);

writeln ('введите массив c');

for i:=1 to k do readln (c[i]);

{ удаление элементов из a }

for i=:1to m do

begin

for i:=b[i] to n-1 do a[i]:=a[i+1];

n:=n-1;

end;

{ вставка элементов в a }

for j:=1 to k do

begin

if c[j]>=a[n] then {если c[j] - наибольший - его ставим в конец массива.}

begin

a[n+1]:=c[j]; n:=n+1;

end;

else

for i:=1 to n do

if a[i]>c[j] then

begin

for p: =n down to i do

a[p+1]:=a[p];

a[i]:=c[j];

n:=n+1; go to 3;

end;

3: end;

for i:=1 to n do

writeln (a[i]);

end.

--------------------------------------------------------------------------------------------------------------

Задача 6:

Упорядочить элементы одномерного массива по возрастанию.

Program prim;

var

a: array [1…100] of real;

f, n, i: integer; p: real;

begin

readln (n);

for i:=1 to n do readln (a[i]);

repeat

f:=0;

for i:=1 to n-1 do

if a[i]>a[i+1] then

begin

p: =a[i];

a[i]:=a[i+1];

a[i+1]:=p; f:=1;

end;

until f=0;

for i:=1 to n do writeln (a[i]);

end.

f =1 - выставляется флаг, что два соседних элемента менялись местами.

f = 0 - массив упорядочен.

Соседние файлы в папке Лекции