Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МЕтодичка по практическим работам.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
156.28 Кб
Скачать

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

for параметр:=начальное_значение downto конечное_значение do оператор

Параметру присваивается начальное значение, после чего проверяется не меньше ли параметр конечного значения. Если меньше, выполнение цикла завершается, если нет, выполняется оператор и параметр уменьшается на 1, после чего он снова сравнивается с конечным значением и так до тех пор, пока параметр не получит значение меньше конечного. При изначальной ситуации, когда начальное значение меньше конечного, оператор ни разу не выполняется.

Оператор прерывания цикла

break;

Осуществляет безусловное прерывание выполнения цикла for, while или repeat и передает управление первому следующему за циклом оператору.

Оператор продолжения цикла

continue;

Осуществляет безусловный переход на следующую итерацию цикла for, while или repeat.

Пример выполнения

Дано натуральное число N. Получить все его натуральные делители.

program Primer;

var N,I:integer;

begin

writeln('введите N');

readln(N);

writeln('делители:');

for I:=1 to N do

if N mod I = 0 then writeln(I)

end.

Варианты заданий

1. Даны целые числа m, n (m<>0, n<>0). Получить все их общие делители (положительные и отрицательные).

2. Пусть ai=(i-1)/(i+1)+sin((i-1)3/(i+1)), i=1,2...n. Дано натуральное n. Среди a1 ...an выбрать наименьшее положительное число. Если положительных чисел нет, выдать сообщение.

3. Пусть a1=0.01, ak=sin(k+ak-1), k=2...1000. Определить, какие из ai, i=1,2,4,8,16... (степени 2) имеют значение, меньшее, чем 0.25. Если таковых нет, выдать сообщение.

4. Дано натуральное число n. Найти наибольшее среди чисел k*esin(k+1), k=1..n, а также сумму всех этих чисел.

5. Пусть x1=0.3, x2=-0.3, xi=i+sin(xi-2), i=3,4... . Среди x1...x1000 найти ближайшее к числу 8 и его индекс.

6. Пусть x1 = y1 = 1, xi = xi-1+yi-1/i2, yi = yi-1+xi-1/i, i=2,3... . Даны два натуральных числа m и n. Найти xm и yn.

7. Даны натуральные числа m и n. Получить (m!+n!)/(m+n)!.

8. Дано натуральное число n. Вычислить произведение первых n сомножителей: (2/1)*(2/3)*(4/3)*(4/5)*(6/5)*(6/7)*... .

9. Пусть a0=cos21, a1=-sin21, ak=2ak-1-ak-2, k=2,3... . Найти сумму квадратов тех чисел a1...a1000, которые не превосходят 2.

10. Пусть ak=sin2(3k+5)-cos(k2-15), k=1,2...1000. Определить, какие из ai, i=1,2,4,8,16... (степени 2) имеют значение, меньшее, чем 0.25. Если таковых нет, выдать сообщение.

11. Дано натуральное число n. Получить все такие натуральные q, что n делится на q2 и не делится на q3.

Контрольные вопросы

  1. Можно ли внутри цикла for изменять значение переменной цикла ?

  2. Каким образом можно написать цикл «по счетчику» с шагом отличным от 1 и –1 ?

  3. В чем основные отличия циклов while и repeat until ?

  4. Можно ли с помощью цикла while реализовать цикл for ?

  5. Можно ли с помощью цикла while реализовать цикл repeat until?

  6. Можно ли с помощью цикла for реализовать цикл while ?

  7. Можно ли с помощью цикла repeat until реализовать цикл while?

Лабораторная работа 4. Использование массивов

Основные сведения

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

Var список_имен_массивов: array [тип_индекса1,тип_индекса2...] of базовый_тип;

Тип индекса может быть boolean, char, перечислимый или ограниченный.

Обращение к элементу массива имя_массива[индекс1,индекс2...]

Элемент массива является переменной базового типа массива и с ним можно производить любые операции, доступные для переменных этого типа.

Ввод и вывод массивов осуществляется только поэлементно.

Пример выполнения

Даны матрицы вещественных чисел A3x6 и B6x10. Вычислить матрицу C3x10 = A*B.

program PRIMER;

var A :array [1..3,1..6] of real;

B :array [1..6,1..10] of real;

C :array [1..3,1..10] of real;

SUM :real;

i,j,k :integer;

begin

writeln('введите A');

for i:=1 to 3 do

for j:=1 to 6 do

read(A[i,j]);

writeln('введите B');

for i:=1 to 6 do

for j:=1 to 10 do

read(B[i,j]);

for i:=1 to 3 do

for j:=1 to 10 do begin

SUM:=0;

for k:=1 to 6 do

SUM:=SUM+A[i,k]*B[k,j];

C[i,j]:=SUM

end;

writeln('матрица C:');

for i:=1 to 3 do begin

for j:=1 to 10 do

write(C[i,j]:7);

writeln

end

end.