Циклы типа для применяются, когда
число повторений цикла известно к началу его выполнения.
|
|
|
|
|
|
нц для i от 1 до N
тело цикла кц |
|
|
|
For i:=1 to N do
тело цикла ; |
|
| For i:=N downto 1 do
тело цикла ; |
|
|
|
|
FOR I = 1 TO N STEP H
тело цикла NEXT I |
|
|
|
|
|
|
|
|
|
Школьный АЯ
алг Сумма (арг цел N, арг вещ
таб A[1:N], рез вещ S)
дано N>0
нач цел i S:=0 нц для i от 1 до N S := S + A[i] кц кон |
|
Turbo Pascal
Program Summa;
Uses Crt;
Type Mas = Array [1..20] of Real;
Var A : Mas;
i, N : Integer;
S : Real;
BEGIN
ClrScr; {очистка экрана }
Write('Введите N = ');
ReadLn(N); {ввод значения N}
For i := 1 to N dо {цикл по элементам массива}
begin
Write('A [ ', i , ' ] = ');
ReadLn(A[i]) {ввод элементов массива}
end;
S := 0; {присваивание начального значения}
For i := 1 to N do S := S+A[i]; {суммирование}
WriteLn;
WriteLn('Сумма равна ', S : 5 : 1);
ReadLn
END.
|
![]() |
Результаты работы Pascal-программы
|
QBasic
CLS
INPUT "N = " ; N : DIM A(N)
FOR i = 1 TO N
PRINT "A(" ; i ; ")=" ;
INPUT A(i)
NEXT i
S = 0
FOR i = 1 TO N
S = S + A(i)
NEXT i
PRINT "Сумма = " ; S
END
|
|
|
|
||
|
|
|
|
|
Школьный АЯ
алг МаксЭлемент (арг цел N, арг вещ таб A[1:N],
рез вещ Amax, рез цел k)
нач цел i
Amax := A[1]; k := 1
нц для i от 2 до N
если A[i] > Amax
то Amax:=A[i]; k := i
все
кц
кон
Исполнение алгоритма
|
![]() |
Program MaxElem;
Uses Crt;
Type Mas = Array [1..20] of Real;
Var A : Mas;
i, N : Integer;
k : Integer;
Amax : Real;
BEGIN
СlrScr;
Write('Введите N = ');
ReadLn(N);
For i := 1 to N do {Ввод значений элементов массива А}
begin
Write('A [ ', i, ' ] = '); ReadLn(A[i])
end;
Amax := A[1]; k:=1; {Поиск максимального элемента}
For i := 2 to N do
If A[i] > Amax then
begin
Amax := A[i]; k := i
end;
WriteLn; WriteLn('Наибольший элемент' , k , '-й');
WriteLn('Его значение ', Amax : 5 : 1); ReadLn
END.
CLS
INPUT "N = "; N : DIM A(N)
FOR i = 1 TO N ' Ввод массива А
PRINT "A("; i; ") = ";
INPUT A(i)
NEXT i
Amax = A(1) : k = 1 ' Поиск максимального элемента FOR i = 2 TO N IF A(i) > Amax THEN Amax = A(i) : k=i NEXT i
PRINT "Наибольший элемент" ; k ; "-й" PRINT "Его значение" ; Amax END
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
алг Баскетбол (арг цел N, арг лит таб Фам[1:N], арг вещ
таб Рост[1:N], рез лит таб Канд [1:N] )
нач цел i, k
k:=0
нц для i от 1 до N | запись фамилий кандидатов в таблицу Канд
если Рост[i]>170
то k:=k+1; Канд [k] := Фам [i]
все
кц
если k=0
то вывод "В КЛАССЕ НЕТ КАНДИДАТОВ В КОМАНДУ."
иначе нц для i от 1 до k
вывод Канд [i]
кц
все
кон
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Program BascetBall;
Uses Crt;
Var
SurName : Array [1..30] of String; { фамилии учеников }
Height : Array [1..30] of Real; { рост учеников }
Cand : Array [1..30] of String; { фамилии кандидатов }
NPupil, i, K : Integer; { NPupil - число учеников,
K - количество зачисленных}
BEGIN ClrScr;
Write('В КОМАНДУ ЗАЧИСЛЯЮТСЯ УЧЕНИКИ, ');
WriteLn('РОСТ КОТОРЫХ ПРЕВЫШАЕТ 170 СМ.'); WriteLn;
Write('Сколько всего учеников ? ');
ReadLn(NPupil);
WriteLn('Введите фамилии и рост учеников :');
For i := 1 to NPupil do
begin Write(i, '. Фамилия - '); ReadLn(SurName[i]);
Write(' Рост - '); ReadLn(Height[i]);
end; WriteLn;
K:=0; { Составление списка команды }
For i := 1 to NPupil do
If Height[i]>170 then
begin K:=K+1; Cand[K] := SurName[i] end;
If K=0 then WriteLn('В КЛАССЕ НЕТ КАНДИДАТОВ В КОМАНДУ.')
else
begin WriteLn('КАНДИДАТЫ В БАСКЕТБОЛЬНУЮ КОМАНДУ :');
For i := 1 to K do WriteLn( i, '. ' , Cand[i]);
end;
ReadLn
END.
CLS : PRINT "В КОМАНДУ ЗАЧИСЛЯЮТСЯ УЧЕНИКИ, "; PRINT "РОСТ КОТОРЫХ ПРЕВЫШАЕТ 170 СМ." : PRINT INPUT "Сколько всего учеников ? " , NPupil DIM SurName$(NPupil), Height(NPupil), Cand$(NPupil)
PRINT "Введите фамилии и рост учеников :" FOR i = 1 TO NPupil INPUT "Фамилия - " , SurName$(i) INPUT "Рост - " , Height(i) NEXT i : PRINT
K = 0 FOR i = 1 TO NPupil IF Height(i) > 170 THEN K = K + 1 : Cand$(K) = SurName$(i) NEXT i
IF K = 0 THEN
PRINT "В КЛАССЕ НЕТ КАНДИДАТОВ В КОМАНДУ."
ELSE
PRINT "КАНДИДАТЫ В БАСКЕТБОЛЬНУЮ КОМАНДУ :"
FOR i = 1 TO K
PRINT i ; ". " ; Cand$(i)
NEXT i
END IF
END

|
|
|
|
|
|
|
|
алг Сумма Ряда (арг вещ х, арг цел n, рез вещ S)
нач цел i, вещ P | P - очередное слагаемое S := 1; P := 1 нц для i от 1 до n P := - P*x /i | получение очередного слагаемого S := S + P кц кон
Turbo Pascal
Program SumUp;
Uses Crt;
Var x, S, P : Real;
{P - очередное слагаемое}
i, n : Integer;
BEGIN ClrScr;
Write('Введите n = '); ReadLn(n);
Write('Введите x = '); ReadLn(x); WriteLn;
S := 1; P := 1;
For i := 1 to n do
begin
P := - P*x /i; {получение очередного слагаемого}
S := S + P
end;
WriteLn('О т в е т : S = ', S : 7 : 3 ); ReadLn
END.
|
![]() |
QBasic
CLS INPUT "Введите n = ", n INPUT "Введите x = ", x S = 1 : P = 1 FOR i = 1 TO n P = -P * x / i S = S + P NEXT i PRINT : PRINT "О т в е т : S = " ; S END |
Результат работы
QBasic-программы
|
|
|
|
|
|
|
алг Новый Порядок (арг цел N, арг вещ таб Х[1:N], рез вещ таб Y[1:N])
нач цел i, k | k - индекс массива Y
k := 0
нц для i от 1 до N | Занесение в Y положительных чисел из X
если X[i] > 0
то k := k+1; Y[k] := X[i]
все
кц
нц для i от 1 до N | Занесение в Y чисел, равных нулю, из X
если X[i] = 0
то k := k+1; Y[k] := X[i]
все
кц
нц для i от 1 до N | Занесение в Y отрицательных чисел из X
если X[i] < 0
то k := k+1; Y[k] := X[i]
все
кц
кон
Turbo Pascal
Program NewOrder;
Uses Crt;
Var N, i, k : Integer;
X, Y : Array [1..20] of Real;
BEGIN
ClrScr;
Write('Введите N = '); ReadLn(N);
For i := 1 to N do
begin
Write('X[ ', i, ' ] = '); ReadLn(X[i])
end;
k:=0;
For i := 1 to N do
If X[i]>0 then
begin k:=k+1; Y[k]:=X[i]
end;
For i := 1 to N do
If X[i]=0 then
begin k:=k+1; Y[k]:=X[i]
end;
For i := 1 to N do
If X[i]<0 then
begin k:=k+1; Y[k]:=X[i]
end;
Write('О т в е т : полученный массив');
For i := 1 to N do Write(Y[i] : 5 : 1);
WriteLn; ReadLn
END.
|
![]() |
CLS : INPUT "N = "; N : DIM X, Y(N)
FOR i = 1 TO N
PRINT "X("; i; ") = "; : INPUT X(i)
NEXT i
k = 0 FOR i = 1 TO N IF X(i) > 0 THEN k = k + 1 : Y(k) = X(i) NEXT i
FOR i = 1 TO N IF X(i) = 0 THEN k = k + 1 : Y(k) = X(i) NEXT i
FOR i = 1 TO N IF X(i) < 0 THEN k = k + 1 : Y(k) = X(i) NEXT i
PRINT "О т в е т : полученный массив" ; FOR k = 1 TO N PRINT Y(k) ; NEXT k : PRINT END
2.1. [Pascal | Basic] Подсчитать число и сумму положительных, число и произведение отрицательных элементов заданного массива A(N).
2.2. [Pascal | Basic] Заданные векторы X(N) и Y(N) преобразовать по правилу: большее из xi и yi принять в качестве нового значения xi , а меньшее - в качестве нового значения yi .
2.3. [Pascal | Basic] Элементы заданного массива B(N) переписать в новый массив A(N) в обратном порядке.
2.4. [Pascal | Basic] Из заданного вектора A(3N) получить вектор B(N), очередная компонента которого равна среднему арифметическому очередной тройки компонент вектора А.
2.5. [Pascal | Basic] В заданном массиве Х(N) заменить нулями все отрицательные компоненты, непосредственно предшествующие его максимальной компоненте (первой по порядку, если их несколько).
2.6. [Pascal | Basic]
Вычислить значения
а) sin x + sin2x
+ ... + sinnx ;
б) sin x + sin x2
+ ... + sin xn ;
в) sin x + sin2x2
+ ... + sinnxn;
г) sin x + sin sin x + ... + sin sin...sin x
(n раз).
2.7. [Pascal | Basic] Вычислить сумму квадратов всех элементов заданного массива X(N), за исключением элементов, кратных пяти.
2.8. [Pascal | Basic] Вычислить значения функции z = (a+b+ci ) / i, если a изменяется от 0 с шагом 1, b изменяется от 5 с шагом 1, ci является элементом массива C(N). При этом a и b изменяются одновременно с i.
2.9. [Pascal | Basic] В заданном массиве A(N) поменять местами наибольший и наименьший элементы.
2.10. [Pascal | Basic] В заданном массиве A(N) определить количество элементов, которые меньше заданного значения.
2.11. [Pascal | Basic] Осуществить циклический сдвиг компонент заданного вектора A(N) влево на одну позицию, то есть получить вектор А = (a2 , a3, ..., aN , a1 ).
2.12. [Pascal | Basic] Осуществить циклический сдвиг компонент заданного вектора A(N) вправо на две позиции, то есть получить вектор A = (aN -1 , aN , a1 , a2 , ... , aN -2 ) .
2.13. [Pascal | Basic] Дан массив A(N). Получить массив B(N), i-й элемент которого равен среднему арифметическому первых i элементов массива А: bi = (a1 + a2 + ... + ai ) / i.
2.14. [Pascal | Basic]
Вычислить значения полиномов:
P = an xn
+ an-1 xn -1
+ ... + a1 x + a0 ;
Q = a0 xn
+ a1 xn -1
+ ... + an -1 x + an
,
используя формулу Горнера. Коэффициенты полинома заданы в виде
вектора A = (a0
, a1 , ... , an
).
2.15. [Pascal | Basic] Записать подряд в массив A(N) элементы заданного массива В(2N), стоящие на чётных местах, а элементы, стоящие на нечётных местах, записать в массив С(N).
2.16. [Pascal | Basic] Вывести на печать номера элементов заданного массива Y(N), удовлетворяющих условию 0 < yi < 1.
2.17. [Pascal | Basic] Вывести на печать номера точек, лежащих в круге радиусом R с центром в начале координат. Координаты точек заданы массивами X(N) и Y(N).
2.18. [Pascal | Basic] В заданном массиве A(N) вместо a1 записать наибольший элемент массива, а вместо aN - наименьший элемент массива.
2.19. [Pascal | Basic]
В заданном массиве A(N), все элементы которого попарно различны,
найти:
а) наибольший элемент из отрицательных;
б) наименьший элемент из положительных;
в) второй по величине элемент.
2.20. [Pascal | Basic]
В заданном массиве A(N) определить число соседств:
а) двух положительных чисел;
б) двух чисел разного знака;
в) двух чисел одного знака, причем абсолютная величина
первого числа должна быть больше второго
числа;
г) чётного числа и нечётного c нечётным индексом.
2.21. [Pascal | Basic] В заданном массиве A(N) положительные элементы уменьшить вдвое, а отрицательные заменить на значения их индексов.
2.22. [Pascal | Basic] В заданном массиве A(N) вычислить среднее геометрическое и среднее арифметическое значения для положительных элементов.
2.23. [Pascal | Basic] Вычислить P = 1 . 2 + 2 . 3 . 4 + 3 . 4 . 5 . 6 + ...+ N . (N+1) . ... . 2N.
2.24. [Pascal | Basic] Образовать массив B, состоящий из положительных элементов заданного массива A(N), больших пяти. Вывести на печать образованный массив и число его элементов.
2.25. [Pascal | Basic] Из заданных векторов X(N) и Y(N) получить вектор Z(2N ) c элементами (x1 , y1 , x2 , y2 , ..., xN , yN ).
2.26. [Pascal | Basic] Для заданного вектора X(2N ) вычислить Y = x1 - x2 + x3 - ... - x2N .
2.27. [Pascal | Basic] Дан вектор A(N). Найти порядковый номер того из элементов, который наиболее близок к какому-нибудь целому числу (первому по порядку, если таких несколько).
2.28. [Pascal | Basic] Элементы заданного массива X = (x1 , x2 , ...,xN ) переупорядочить следующим образом: X = (xN , xN -1, ..., x1 ).
2.29. [Pascal | Basic] Для заданного набора коэффициентов a, b, c, d найти наименьшее значение функции y = ax3 + bx2 + cx + d и значение аргумента, при котором оно получено. Значение х изменяется от 0 до 2 с шагом 0,2.
2.30. [Pascal | Basic] Дано натуральное N. Вычислить сумму тех элементов серии i 3 - 3 . i . N + N, i = 1, 2, ..., N, которые являются удвоенными нечётными числами.
2.31*. [Pascal | Basic] Сжать заданный массив A(N) отбрасыванием нулевых элементов.
2.32. [Pascal | Basic]
Дан массив A(2N). Построить массивы с элементами, соответственно
равными:
а) a1 ,
aN+1 , a2 ,
aN+2 , ... , aN
, a2N ;
б) a2N ,
a1 , a2N
-1 , a2 , ...
, aN+1 , aN.
2.33. [Pascal | Basic] Дана матрица A(3, N), элементы которой положительны. Определить, какие из троек a1i , a2i, a3i (i = 1, ..., N) могут служить сторонами треугольника. Вывести массив b1 , ..., bN , состоящий из нулей и единиц. Если тройка a1i , a2i , a3i может служить сторонами треугольника, то bi = 1, если нет, то bi = 0.
2.34. [Pascal | Basic]
У кассы аэрофлота выстроилась очередь из N человек. Время обслуживания
кассиром i-го клиента равно Ti (i = 1, ..., N).
Требуется:
а) определить время пребывания в очереди каждого
клиента;
б) указать номер клиента, для обслуживания которого
кассиру потребовалось самое большое время.
2.35. [Pascal | Basic]
В соревнованиях по фигурному катанию N судей независимо выставляют
оценки спортсмену. Затем из объявленных оценок удаляют самую высокую (одну,
если самую высокую оценку
выставили несколько судей). Аналогично поступают с самой низкой оценкой.
Для оставшихся оценок вычисляется среднее арифметическое, которое и становится
зачетной оценкой. По заданным оценкам судей
определить зачетную оценку спортсмена.