Процесс завершается тогда, когда после очередного выполнения заданной последовательности операторов тела цикла условие примет (впервые) значение истина. Проверка условия производится после выполнения тела цикла.
Repeat … until − зарезервированные слова («Повторять», «пока не [выполнится условие]»).
Program Name3;
Var
X, А: integer; Y: real;
Begin
A:=5;
X:=1;
repeat
Y:=X*X+sin(X+A);
Writeln ('X=',X,'; Y=',Y:4:1);
X:=X+2;
until X>10;
readln;
end.
4 способ: Организация цикла с параметром (FOR)
Общий вид алгоритмацикла с параметром
Предписывает выполнять тело цикла для всех значений некоторой переменной (параметра цикла) в заданном диапазоне между начальным и конечным значениями. Используется в том случае, если параметр цикла имеет целочисленный тип и значение параметра увеличивается (уменьшается) на 1.
i –параметр цикла
i1– начальное значение,
i2 –конечное значение
Общий вид записи:
for «Параметр цикла» := «Начальное значение» to (downto) «Конечное значение» do
«Тело цикла»;
В качестве параметра цикла можно использовать имя простой переменной целого типа, в качестве начального, конечного значений можно использовать константы, переменные, а также арифметические выражения только целого или перечислимого типа.
for, to, downto, do – зарезервированные слова («для», «до», «уменьшить до», «выполнить»).
Порядок выполнения действий:
До разработки алгоритма решения задачи необходимо вычислить количество повторений цикла К.
К – в данной программе будет означать конечное значение цикла.
1) Присвоение значения переменной А.
2) Присвоение переменной К значения, полученного до разработки алгоритма решения задачи.
3) Присвоение значения 1 переменной Х (начальное значение).
4) Организация цикла с параметром по переменной i (целое число).
5) Вычисление значения функции Y.
6) Вывод значения функции Y.
7) Добавление шага к переменной Х.
Program Name4;
Var
X, А, К i: integer; Y: real;
Begin
A:=5; K:=5;
X:=1;
for i:=1 to K do begin
Y:=X*X+sin(X+A);
Writeln ('X=',X, ';Y=',Y:4:1);
X:=X+2;
end;
readln;
end.
Задание 4. Циклические вычислительные процессы. Решение задач, содержащих вычисление конечных сумм и произведений
Условие задачи:
Вычислите конечное значение суммы функции
Для решения задачи использовать разные способы организации цикла:
1) Цикл с предусловием (WHILE);
2) Цикл с постусловием (REPEAT … UNTIL);
3) Цикл с параметром (FOR) со счётчиком (с шагом 1).
Пояснение:
1 способ: Цикл с предусловием (WHILE)
Обозначения:
А – вспомогательная переменная, в которой вычисляется слагаемое;
S – переменная, в которой происходит накапливание значений сумм.
Первое значение переменной S=0.
Program Summa1;
Var
X: integer; S, A: real;
Begin
X:=1;
S:=0;
While X<=20 do begin
A:=1/(X*X);
S:=S+A;
X:=X+1;
end;
Writeln ('S=', S:4:2);
readln;
End.
2 способ: Цикл с постусловием (REPEAT … UNTIL)
Program Summa2;
Var
X: integer; S, A: real;
Begin
X:=1;
S:=0;
repeat
A:=1/(X*X);
S:=S+A;
X:=X+1;
until Х>20;
Writeln ('S=', S:4:2);
readln;
End.
3 способ: Цикл с параметром (FOR) со счётчиком (с шагом 1)
Program Summa3;
Var
X: integer; S, A: real;
Begin
S:=0;
for X:=1 to 20 do begin
A:=1/(X*X);
S:=S+A;
end;
Writeln ('S=', S:4:2);
readln;
End.
Условие задачи:
Вычислите конечное значение произведения функции
Пояснение:
1способ: Цикл с предусловием (WHILE)
Обозначения:
А – вспомогательная переменная, в которой вычисляется множитель;
P – переменная, в которой происходит накапливание значений произведения.
Первое значение переменной P=1.
Program Summa1;
Var
N: integer; P, A: real;
Begin
N:=1;
P:=1;
While N<=10 do begin
A:=N*N/(3+N);
P:=P*A;
N:=N+1;
end;
Writeln ('P=', P:4:2);
readln;
End.
Остальные способы аналогично вычислению конечной суммы.
Задание 5. Разветвление в цикле
Разветвление в цикле означает, что тело цикла содержит разветвляющийся процесс.
Разветвляющийся процесс – это процесс, в котором вычисления могут выполняться разными путями в зависимости от выполнения или невыполнения некоторых условий. Обеспечивает в зависимости от результата проверки условия (да или нет) выбор одного из альтернативных путей работы алгоритма. Каждый из путей ведет к общему выходу, так что работа алгоритма будет продолжаться независимо от того, какой путь будет выбран.
Общий вид записи с условным оператором:
If «Условие» then «Оператор_1» else «Оператор_2»;
«Условие» − логическое выражение.
if, then, else − зарезервированные слова («если», «то», «иначе»).
Условие задачи:
Найдите значения функции ,
если
Порядок выполнения действий:
1. Присвоение значений переменным A и B.
2. Организация цикла по переменной Х.
3. Вычисление функции D в зависимости от условия.
4. Вычисление значений функции F.
5. Вывод значения функции F.
1 способ: Цикл с предусловием (WHILE)
Program funk_F1;
Var
а, b, d, x, F: real;
begin
a:= 2.7; b:= -0.3;
x:=1;
While x<=8 do begin
if x<2.3 then d:=(a+x)/x else
if x>=5 then d:=a*x*x+b*x else
d:=(a+b)/(x+1);
F:=b*d+ln(d);
writeln('F(',x:2:1, ')= ',F:6:2);
x:=x+0.5;
end;
readln;
end.
2 способ: Цикл с постусловием (REPEAT … UNTIL)
Program funk_F2;
var
a, b, d, x, F:real;
begin
a:= 2.7; b:=-0.3;
x:=1;
repeat
if x<2.3 then d:=(a+x)/x else
if x>=5 then d:=a*x*x+b*x else
d:=(a+b)/(x+1);
F:=b*d+ln(d);
Writeln ('F(',x:2:1, ')= ',F:6:2);
x:=x+0.5;
until x>8;
readln;
end.
Задание 6. Обработка одномерных массивов
Одномерный массив − это фиксированное количество элементов одного и того же типа, объединенных одним именем, где каждый элемент имеет свой номер.
Например, A(8) – одномерный массив, где А – имя массива, 8 – количество элементов.
Общий вид записи:
А1, А2, А3……., Аn – это одномерный массив,
где Аi – элементы массива, i=1, 2, 3……n – индекс представляет собой переменную целого типа. Запись элемента массива на языке Паскаль А[i].
Общий вид записи описания одномерного массива:
Var «Имя массива»: Array[n1..n2] Of «Тип элементов»;
n1 − номер первого элемента;
n2 − номер последнего элемента.
Array, of – зарезервированные слова («массив», «из»).
Задача 1. В массиве X(15) вычислите максимальный элемент массива и его порядковый номер.
Обозначения:
MAX– максимальный элемент массива;
K – порядковый номер максимального элемента массива.
Program Massiv1;
Var
{Описание используемых переменных}
K, i, MAX: integer;
{Описание массива X}
X: array [1..15] of integer;
begin
{Организация цикла для ввода элементов массива с клавиатуры}
for i:=1 to 15 do
readln (X[i]);
{Присвоение начальных значений максимальному элементу и его порядковому номеру}
MAX:=X[1]; K:=1;
{Организация цикла для поиска максимального элемента массива и его порядкового номера}
for i:=2 to 15 do
if X[i]>MAX then begin MAX:=X[i]; K:=i; end;
{Вывод результатов вычисления на экран}
writeln ('MAX=', MAX:2, ';K=', K);
readln;
end.
Задача 2. В массиве R(8) найдите минимальный элемент и замените его на 5.
Обозначения:
MIN– минимальный элемент массива;
N – порядковый номер минимального элемента.
Program Massiv2;
Var
R: array[1..8] of integer;
i, n, MIN: integer;
begin
for i:=1 to 8 do
readln (R[i]);
{Присвоение начальных значений минимальному элементу и его порядковому номеру}
MIN:= R[1]; n:=1;
{Организация цикла для поиска минимального элемента массива и его порядкового номера}
for i:=2 to 9 do
if R[i]<MIN then begin
MIN:= R[i]; n:=i;
end;
{Вывод результатов вычисления на экран}
writeln ('MIN=',MIN);
{Замена минимального элемента массива на 5}
R[n]:=5;
{Вывод нового массива на экран}
for i:=1 to 8 do
write (R[i]:5);
readln;
end.
Задача 3. В массиве А(8) определите количество положительных и отрицательных элементов.
Обозначения:
p – количество положительных элементов;
ot – количество отрицательных элементов.
Program Massiv3;
Var
p, ot, i: integer;
a: array[1..8] of integer;
begin
writeln ('Введите элементы массива А');
for i:=1 to 8 do
readln (А[i]);
{Присвоение начальных значений количеству положительных и отрицательных элементов}
p:=0; ot:=0;
{Организация цикла для подсчёта количества положительных и отрицательных элементов массива}
for i:=1 to 8 do
if А[i]>0 then p:=p+1 else ot:=ot+1;
{Вывод результатов вычисления на экран}
writeln ('Количество положительных элементов=', p:2);
writeln ('Количество отрицательных элементов=', ot:2);
readln;
end.
Задача 4. В массиве X(15) вычислите сумму элементов массива меньших 10 и произведение элементов массива больших нуля.
Обозначения:
S – сумма элементов массива, меньших 10;
P – произведение элементов массива, больших нуля.
Program Massiv4;
Var
i, S, P: integer;
X: array [1..15] of integer;
begin
for i:=1 to 15 do
readln (X[i]);
{Присвоение начальных значений сумме и произведению}
S:=0; P:=1;
{Организация цикла для вычисления суммы и произведения элементов массива}
for i:=1 to 15 do begin
if X[i]<10 then S:=S+X[i];
if X[i]>0 then P:=P*X[i];
end;
{Вывод результатов вычисления на экран}
writeln ('S=', S);
writeln ('P=', P);
readln;
end.
Задача 5. В массиве D(15) найдите все положительные элементы и замените их на среднее арифметическое отрицательных элементов.
Обозначения:
S – сумма отрицательных элементов массива;
SA – среднее арифметическое отрицательных элементов массива;
K –количество отрицательных элементов массива.
Program Massiv5;
Var
K, I: integer;
S, SA: real;
D: array [1..15] of real;
Begin
write ('Введите элементы массива D');
for i:=1 to 15 do
readln (D[i]);
{Присвоение начальных значений сумме и количеству элементов}
S:=0; K:=0;
{Организация цикла для вычисления суммы и количества отрицательных элементов массива}
for i:=1 to 15 do
if D[i]<0 then begin S:=S+D[i]; K:=K+1;
end;
{Вычисление среднего арифметического элементов массива}
SA:=S/K;
{Вывод среднего арифметического элементов массива на экран}
writeln ('SA=',SA:7:2);
writeln ('Вывод нового массива D');
{Организация цикла для определения положительных элементов массива и замена их на среднее арифметическое и вывод нового массива на экран}
for i:=1 to 15 do begin
if D[i]>0 then D[i]:=SA;
writeln ('D(',i, ')= ', D[i]:5:2);
end;
readln;
end.
Задача 6. В массиве С(7) отсортируйте все элементы по возрастанию.
Обозначения:
m – вспомогательная переменная для перестановки элементов массива.
Данные массива задаются типизированной константой, значения элементов массива выбираются произвольно
Program Massiv6;
Var
k, i, M: integer;
{Описание массива С с помощью типизированной константы}
const c: array[1..7] of integer =
(5,-4,2,7,-1,88,9);
begin
{Сортировка массива}
for k:=1 to 7 do
for i:=k+1 to 7 do
if c[i]<=c[k] then begin M:=c[i]; c[i]:=c[k]; c[k]:=M;
end;
{Вывод нового массива на экран}
for i:=1 to 7 do
writeln ('c[',i,']=',c[i]:2);
readln;
end.
Алгоритм сортировки массива:
1. Сравним между собой первый и второй элементы массива и переставим их (если это необходимо) в порядке возрастания. Затем то же самое проделаем со вторым и третьим элементами и т.д. до конца массива. В результате этих сравнений и перестановок наименьшее число окажется первым.
2. Второй этап сравнений и перестановок будет проходить для (N−1) элементов (N − количество элементов массива), начиная со второго до N. В этом случае второй элемент окажется наименьшим. Уменьшая каждый раз количество элементов на 1, операции сравнения и перестановок закончим тогда, когда останется один элемент массива.
Переменная M является в качестве подсобной для перестановки элементов.
Задача 7. В массиве Х(8) подсчитайте сумму элементов, стоящих на чётных местах.
Обозначения:
S − сумма элементов, стоящих на чётных местах;
i − переменная цикла с предусловием.
Program Massiv7;
Var
i,s: integer;
X: array[1..8] of integer;
begin
for i:=1 to 8 do
readln (X[i]);
{Присвоение начальных значений сумме и переменной}
S:=0;
i:=2;
{Организация цикла с предусловием}
While i<=8 do begin
{Вычисление суммы и переход на следующее чётное место}
S:=S+X[i];
i:=i+2;
end;
{Вывод результатов вычисления на экран}
writeln ('S=',S);
readln;
end.
Задание 7. Обработка двумерных массивов
Двумерный массив – это структура данных, хранящая прямоугольную матрицу. В матрице каждый элемент определяется номером строки и номером столбца, на пересечении которых он расположен.
Например, D(3×4) – двумерный массив, состоящий из 3 строк и 4 столбцов.
Общий вид записи:
где Dij– элементы массива;
i– индекс строки;
j– индекс столбца.
Запись элементов двумерного массива на языке Паскаль D[i,j].
Общий вид записи описания двумерного массива:
Var «Имя массива»: array[n1..n2, m1..m2] of «Тип элементов»;
n1 − номер первой строки;
n2 − номер последней строки;
m1 – номер первого столбца;
m2 – номер последнего столбца.
array, of – зарезервированные слова («массив», «из»).
Задача 1. Найдите максимальный элемент в каждой строке матрицы A(4×3).
Обозначения:
MAX– максимальный элемент матрицы.
Program Matriza1;
Var
i, j, MAX: integer;
А:array[1..4,1..3] of integer;
begin {Организация ввода матрицы с клавиатуры построчно}for i:=1 to 4 dofor j:=1 to 3 do readln (A[i, j]);
{Организация цикла для поиска максимального элемента в каждой строке}
for i:=1 to 4 do begin
{Присвоение начального значения максимальному элементу текущей строки}
MAX:=a[i,1];
for j:=2 to 3 do
if a[i,j]>MAX then MAX:=a[i,j];
{Вывод результатов вычисления на экран}
writeln ('Макс.элемент в', i, 'строке=', MAX);
end;
readln;
end.
Задача 2. В матрице D(3×3) найдите произведение элементов каждого столбца.
Обозначения:
P – произведение элементов каждого столбца.
Program Matriza2;
Var
{Описание переменных матрицы}
i, j, p: integer;
{Описание матрицы D}
D: array[1..3,1..3] of integer;
Begin
{Организация ввода матрицы с клавиатуры построчно}for i: =1 to 3 dofor j: = 1 to 3 do readln (D[i, j]);
{Организация цикла для вычисления произведения элементов каждого столбца}
for j:=1 to 3 do begin
{Присвоение начального значения произведению}
P:=1;
for i:=1 to 3 do p:=p*D[i,j];
{Вывод результатов вычисления на экран}
writeln ('P=',P);
end;
readln;
end.
Задача 3. В матрице С(5×5) элементы, лежащие выше главной диагонали, уменьшите на сумму элементов главной диагонали.
Обозначения:
Элементы, лежащие на главной диагонали, имеют одинаковые индексы (i=j).
S – сумма элементов главной диагонали.
Для ввода данных используется функция Random (50) –датчик случайных чисел в диапазоне [0;49].
Program Matriza3;
Var
i, j, s: integer;
C: array[1..5,1..5] of integer;
begin
{Запуск генератора случайных чисел}
Randomize;
Writeln ('Данная матрица');
For i:=1 to 5 do begin
For j:=1 to 5 do begin
C[i, j]:=Random(50);
Write (' ',C[i, j]:4);
End;
Writeln;
End;
{Присвоение начального значения сумме}
S:=0;
{Вычисление суммы элементов главной диагонали матрицы}
For i:=1 to 5 do
S:=S+C[i, i];
Writeln ('S=',S);
Writeln ('Новая матрица');
{Организация цикла для уменьшения элементов матрицы, лежащих выше главной диагонали на сумму}
For i:=1 to 5 do begin
For j:=1 to 5 do begin
If i<j then C[i, j]:= C[i, j]-S;
{Вывод новой матрицы на экран}
Write (' ',C[i, j]:4); end;
Writeln;
End; Readln;
End.
Задача 4. В матрице В(3×3) все элементы, лежащие на главной диагонали, замените на 0.
Данные задаются типизированной константой, значения элементов массива выбираются произвольно
Элементы, лежащие на главной диагонали, имеют одинаковые индексы (i=j).
Program Matriza4;
Var
i, j: integer;
{Описание матрицы В с помощью типизированной константы}
const B: array[1..3,1..3] of integer=
((1,-3,2),
(5,-4,-2),
(-1,5,8));
begin
{Организация цикла для замены элементов главной диагонали матрицы на0}
for i:=1 to 3 do
for j:=1 to 3 do
if i=j then B[i, j]:=0
{Вывод новой матрицы на экран}
for i:=1 to 3 do begin
for j:=1 to 3 do
write (B[i, j]:5);
writeln;
end;
readln;
end.
Задача 5. В матрице А(4×4) определите в каждом столбце количество отрицательных элементов.
Обозначения:
k– количествоотрицательных элементов.
Program Matriza5;
Var
i, j, k: integer;
A: array[1..4,1..4] of integer;
begin
for i: = 1 to 4 do
for j: = 1 to 4 do
readln (А[i, j]);
{Организация цикла для подсчёта количества отрицательных элементов в каждом столбце}
for j:=1 to 4 do begin
{Присвоение начального значения количеству элементов}
k:=0;
for i:=1 to 4 do
if A[i,j]<0 then k:=k+1;
{Вывод результатов вычисления на экран}
writeln ('В столбце №',j,
'кол-во отриц.элементов- ',k);
end;
readln;
end.
Задача 6. Выполните транспонирование матрицы Х(3×3) (замените строки столбцами).
Обозначения:
Yij – элементы полученной матрицы после транспонирования.
Program Matriza6;
Var
i, j: integer;
Y: array[1..3,1..3] of integer;
X: array[1..3,1..3] of integer;
begin
{Организация ввода матрицы X с клавиатуры}
for i:=1 to 3 do
for j:=1 to 3 do
readln (X[i, j]);
{Организация цикла для замены строк столбцами матрицы}
for i:=1 to 3 do
for j:=1 to 3 do
Y[j,i]:=X[i,j];
{Вывод новой матрицы Y на экран}
for i:=1 to 3 do begin
for j:=1 to 3 do
write (Y[i,j]:5);
writeln;
end;
readln;
end.
Задача 7. Определите произведение элементов четных столбцов матрицы В(3×4).
Обозначения:
Р – произведение элементов.
Program Matriza7;
Var
Р, i, j: integer;
B: array[1..3,1..4] of integer;
begin
for i: = 1 to 3 do
for j: = 1 to 4 do
readln (B[i, j]);
j:=2;
{Организация цикла с предусловием}
while j<=4 do begin
{Присвоение начального значения произведению}
P:=1;
{Вычисление произведения}
for i:=1 to 3 do
Р:=Р*В[i,j];
{Вывод результатов вычисления на экран}
writeln ('Р=',Р);
{Переход на следующий чётный столбец}
j:=j+2;
end;
readln;
end.
Задача 8. В каждой строке матрицы А(3×3) определите сумму положительных элементов.
Обозначения:
S– сумма положительных элементов.
Program Matriza8;
Var
s, i, j: integer;
A: array[1..3,1..3] of integer;
begin
for i: = 1 to 3 do
for j: = 1 to 3 do
readln (А[i, j]);
{Организация цикла для вычисления суммы положительных элементов матрицы в каждой строке}
for i:=1 to 3 do begin
{Присвоение начального значения сумме}
S:=0;
for j:=1 to 3 do
if A[i,j]>0 then S:=S+A[i,j];
{Вывод результатов вычисления на экран}
writeln ('Сумма ',i,' строки=',S);
end;
readln;
end.
Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет
studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав!Последнее добавление