Оператор цикла с последующим условием 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Оператор цикла с последующим условием



Цикл с последующим условием используется в тех случаях, когда заранее неизвестно число повторений цикла. Общий вид оператора:

Repeat

Оператор 1;

Оператор2;

Оператор N;

until условие;

Здесь repeat, until – зарезервированные слова; условие - выражение логического типа.

Оператор цикла с последующим условием действует следующим образом. Операторы циклической части выполняются повторно до тех пор, пока значение логического выражения ложно. Если логическое выражение принимает значение истина, то цикл прекращает свою работу и управление передается на следующий оператор. Если логическое выражение сразу имеет значение истина, то цикл повторяется один раз. Если в операторах цикла не предусмотрено изменение логического выражения и оно все время имеет значение ложь, то цикл будет бесконечным.

 
 

Пример. Составить программу нахождения суммы сходящегося ряда с точностью е. Расчет суммы закончить, когда слагаемое по модулю станет меньше заданной точности. В качестве значения е можно взять 0.1, или 0.01, или 0.001.

 

В данном примере необходимо составить рекуррентную формулу, позволяющую каждое следующее слагаемое вычислять через предыдущее. N! – это выражение равно 1·2·3·…·n. Рекуррентная формула представлена ниже.

 
 

Var

s, x, y, e: real;

n: integer;

Begin

WriteLn(‘введите х, е');

ReadLn(x, e);

s:= x; (*первоначальная сумма*)

n: = 0;

y:= x; (*первое слагаемое*)

Repeat

n:= n + 1;

y:= y *x * x / (2 * n * (2 * n + 1));

s:= s + y;

until abs(y) <= e;

WriteLn(‘сумма= ’,s:12:5,’ при n= ‘,n,’ y=’,y:12:5);

End.

Вложенные циклы. Циклы могут быть вложены один в другой. При использовании вложенных циклов необходимо соблюдать следующие правила:

– счетчики вложенных циклов должны быть разными;

– вложенный цикл должен полностью находиться внутри внешнего цикла;

– счетчик внутреннего цикла меняется быстрее счетчика внешнего цикла.

Ввод – вывод числовых матриц. Ввод элементов матриц можно осуществлять по одному элементу, по элементам строк, всех элементов. Пусть даны три матрицы А, В, С.

Var

a: array [1..2, 1..3] of real;

c, b: array [1..3, 1..2] of integer;

i, j: integer;

Begin

(*Ввод элементов матрицы по одному элементу*)

WriteLn (‘Ввод матрицы В по одному элементу’);

for i:= 1 to 3 do

for j:= 1 to 2 do

Begin

Write(‘введите элемент матрицы b[’, i, ‘,’,j,’]’);

ReadLn (b[i, j]);

end;

 

При выполнении данной группы операторов на экран будет выведено:

Ввод матрицы В по одному элементу

 

Затем необходимо ввести, например, следующие данные:

3 Enter

5 Enter

-67 Enter

 

(*Вывод матрицы С по строкам,*)

WriteLn (‘матрица с’);

for i:=1 to 3 do

Begin

for j:=1 to 2 do

Write (c[i, j]:3,’ ‘);

WriteLn;

end;

На экране, например, может быть выведено следующее:

 

Матрица С

5 7

-12 –34

8 2

 

Примеры программ, где используются вложенные циклы.

Пример. В вещественной матрице А (2, 3) найти сумму целых и произведение элементов с дробной частью.

Var

a: array [1..2, 1..3] of real;

s, p: real;

i, j: integer;

Begin

WriteLn (‘введите а(2,3)’);

for i:= 1 to 2 do

for j:= 1 to 3 do

Read (a[i, j]);

ReadLn;

s:= 0;

p:= 1;

for i:= 1 to 2 do

for j:= 1 to 3 do

if trunc (a[i, j]) = a[i, j] then

s:= s+a[i, j]

Else

p:= p * a[i, j];

WriteLn (‘Матрица а’);

for i:= 1 to 2 do

Begin

for j:= 1 to 3 do

Write (a[i, j]:10:3, ‘ _’);

WriteLn;

end;

WriteLn(‘s= ’, s:10:1, ‘ p= ’, p:10:2);

ReadLn;

End.

 

Пример. В символьной матрице А(4, 5) определить, в какой строке больше всего * и сколько их.

Var

a: array [1...4, 1..5] of char;

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

Begin

WriteLn (‘ввод а(4, 5)’);

for i:= 1 to 4 do

for j:= 1 to 5 do

ReadLn (a[i, j]);

max:= 0; k:= 0;

for i:= 1 to 4 do

Begin

n:= 0;

for j:= 1 to 5 do

if a[i, j] = ’*’ then n:= n+1;

if max < n then

Begin

max:=n;

k:=i;

end;

end;

WriteLn (‘max= ’,max,’ строка= ’, k);

WriteLn (‘матрица а’);

for j:=1 to 4 do

WriteLn (a[i]);

end.

Пример. Составить программу умножения матрицы на матрицу (А=В*С).

Var

a, b, c: array [1..3, 1..3] of real;

i, j, k: integer;

Begin

WriteLn (‘Ввод b(3,3)’);

for i:= 1 to 3 do

for j:= 1 to 3 do

Read (b[i, j]);

ReadLn;

WriteLn (‘Ввод c(3,3)’);

for i:= 1 to 3 do

for j:= 1 to 3 do

Read (c[i, j]);

ReadLn;

for i:= 1 to 3 do

for j:= 1 to 3 do

Begin

a[i, j]:= 0;

for k:= 1 to 3 do

a[i, j]:= a[i, j] + b[i, k] * c[k, j];

end;

WriteLn (‘ Матрица а’);

for i:= 1 to 3 do

Begin

for j:= 1 to 3 do

Write (a[i, j]:5:1,’_’);

WriteLn;

end;

End.

 

Операторы break и continue.

Для гибкого управления циклическими операторами for, while и repeat используются две процедуры:

break – реализует немедленный выход из цикла; управление передается оператору стоящему сразу за концом цикла;

continue – обеспечивает досрочное завершение очередного прохода цикла; управление передается в самый конец циклического оператора.

 

Методы сортировки

 

Сортировка – упорядочивание элементов списка, последовательности или массива в соответствии с каким-либо признаком. Если упорядочивается числовая последовательность, то ее можно отсортировать по возрастанию или убыванию, если символьная – то в прямом или обратном алфавитном порядке.

Одной из наиболее часто встречающихся в программировании задач является сортировка массива по возрастанию или убыванию. В общем случае, когда элементы массива представляют собой неупорядоченную последовательность, можно воспользоваться тремя основными алгоритмами сортировки:

– сортировка методом пузырька;

– сортировка методом поиска минимума (максимума);

– сортировка вставками.

Наиболее простой является сортировка методом пузырька.



Поделиться:


Последнее изменение этой страницы: 2017-02-05; просмотров: 316; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.133.86.172 (0.014 с.)