Определите значение переменных s и i после выполнения следующих – школьные
Практикум — глава 2. алгоритмы, реализуемые с помощью циклов типа для
Циклы типа для применяются, когда
число повторений цикла известно к началу его выполнения.
Язык | Пример | Величина шага |
Школьный АЯ | нц для i от 1 до N тело цикла кц | Всегда 1 |
Pascal | For i := 1 to N do тело цикла ; | 1 |
For i := N downto 1 do тело цикла ; | -1 | |
Basic | FOR I = 1 TO N STEP H тело цикла NEXT I | Шаг Н произвольный (по умолчанию равен 1) |
Пример 2.1. Вычислить сумму элементов числового массива
A = (a1
, a2,
… , aN ). Тест
Данные | Результат | |
N=5 | A=(3, 5, -2, 6, 3) | S=15.0 |
Демонстрация
Школьный АЯ алг Сумма (арг цел N, арг вещ таб A[1:N], рез вещ S) дано N>0 начцел i S:=0 нц для i от 1 до N S := S A[i] кц кон | Исполнение алгоритма
|
Результаты работы Pascal-программы
| QBasicCLSINPUT "N = " ; N : DIM A(N)FOR i = 1 TO N PRINT "A(" ; i ; ")=" ; INPUT A(i)NEXT iS = 0FOR i = 1 TO N S = S A(i)NEXT iPRINT "Сумма = " ; S
END |
Пример 2.2. Найти наибольший элемент числового массива
A = (a1,
a2 , …, aN
) и его номер. Тест
Данные | Результаты | ||
N=4 | A=(3, -1, 10, 1) | Amax=10 | K=3 |
Демонстрация Turbo Pascal
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
IfA[i] > Amaxthen
begin
Amax := A[i]; k := i
end;
WriteLn; WriteLn('Наибольший элемент' , k , '-й');
WriteLn('Его значение ', Amax : 5 : 1); ReadLn
END.
QBasic
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) > AmaxTHEN Amax = A(i) : k=i
NEXT i
PRINT "Наибольший элемент" ; k ; "-й"
PRINT "Его значение" ; Amax
END
Пример 2.3. В баскетбольную команду могут быть приняты ученики, рост
которых превышает 170 см. Составьте список кандидатов в команду из
учеников класса. Система тестов
Номер теста | Проверяемый случай | Число учеников | Фамилии | Рост | Результаты |
1 | Есть кандидаты | 3 | Кулов Чехин Уваров | 171165178 | Кулов Уваров |
2 | Нет кандидатов | 2 | Ершов Иванов | 170165 | Нет кандидатов |
ДемонстрацияШкольный АЯ
алг Баскетбол (арг цел 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] кц все кон
Исполнение алгоритма
N теста | i | Рост[i] > 170 | K | Кондидаты в команду |
1 | 123 | - | 012 | Кулов Уваров |
2 | 12 | -- | 0 | - |
TurboPascal
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]>170then
begin K:=K 1; Cand[K] := SurName[i] end;
IfK=0then WriteLn('В КЛАССЕ НЕТ КАНДИДАТОВ В КОМАНДУ.')
else
begin WriteLn('КАНДИДАТЫ В БАСКЕТБОЛЬНУЮ КОМАНДУ :');
For i := 1 to K do WriteLn( i, '. ' , Cand[i]);
end;
ReadLn
END.
QBasic
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) > 170THEN K = K 1 : Cand$(K) = SurName$(i) NEXT i
IFK = 0THEN PRINT "В КЛАССЕ НЕТ КАНДИДАТОВ В КОМАНДУ." ELSE PRINT "КАНДИДАТЫ В БАСКЕТБОЛЬНУЮ КОМАНДУ :" FOR i = 1 TO K PRINT i ; ". " ; Cand$(i) NEXT i END IF END
Пример 2.4. Для заданного x вычислить Здесь n! = 1. 2. 3 …. n (читается
как “n-факториал”). Тест ДемонстрацияШкольный АЯ
алг Сумма Ряда (арг вещ х, арг цел n, рез вещ S)
нач цел i, вещ P | P - очередное слагаемое S := 1; P := 1 нц для i от 1 до n P := - P*x /i | получение очередного слагаемого S := S P кц кон
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-программы
|
Пример 2.5. Дан массив X(N). Получить новый массив Y(N) такой, что в нем
сначала идут положительные числа, затем нулевые, и затем отрицательные
из X. Тест
Данные | Результат |
N=7 X=(-1, 2, 0, 4, -3,-2,0) | Y=(2, 4, 0, 0, -1, -3, -2) |
ДемонстрацияШкольный АЯ
алг Новый Порядок (арг цел 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] все кцкон
QBasic
CLS : INPUT "N = "; N : DIM X(N), 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 | C | Basic]
Подсчитайте число и сумму положительных, число и произведение отрицательных
элементов заданного массива A(N).
2.2. [Pascal | C | Basic]
Заданные векторы X(N) и Y(N) преобразуйте по правилу: большее
из xi и yi
примите в качестве нового значения xi,
а меньшее — в качестве нового значения yi .
2.3. [Pascal | C | Basic]
Элементы заданного массива B(N) перепишите в новый массив A(N)
в обратном порядке.
2.4. [Pascal | C | Basic]
Из заданного вектора A(3N) получите вектор B(N),
очередная компонента которого равна среднему арифметическому очередной тройки
компонент вектора А.
2.5. [Pascal | C | Basic]
В заданном массиве Х(N) замените нулями все отрицательные компоненты,
непосредственно предшествующие его максимальной компоненте (первой по порядку,
если их несколько).
2.6. [Pascal | C | 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 | C | Basic]
Вычислите сумму квадратов всех элементов заданного массива X(N),
за исключением элементов, кратных пяти.
2.8. [Pascal | C | Basic]
Вычислите значения функции z = (a b ci )
/ i, если a изменяется от 0 с шагом 1, b
изменяется от 5 с шагом 1, ci
является элементом массива C(N) . При этом a и b изменяются
одновременно с i.
2.9. [Pascal | C | Basic]
В заданном массиве A(N) поменяйте местами наибольший и наименьший элементы.
2.10. [Pascal | C | Basic]
В заданном массиве A(N) определите количество элементов, которые
меньше заданного значения.
2.11. [Pascal | C | Basic]
Осуществите циклический сдвиг компонент заданного вектора A(N)
влево на одну позицию, то есть получите вектор
А = (a2 , a3 ,
…, aN , a1 ).
2.12. [Pascal | C | Basic]
Осуществите циклический сдвиг компонент заданного вектора A(N)
вправо на две позиции, то есть получите вектор
A = (aN-1 , aN
, a1 , a2
, … , aN-2 ).
2.13. [Pascal | C | Basic]
Дан массив A(N). Получите массив B(N), i-й элемент
которого равен среднему арифметическому первых i элементов
массива А: bi = (a1 a2
… ai ) / i.
2.14. [Pascal | C | 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 | C | Basic]
Запишите подряд в массив A(N) элементы заданного массива В(2N),
стоящие на чётных местах, а элементы, стоящие на нечетных местах, запишите в
массив С(N).
2.16. [Pascal | C | Basic]
Выведите на печать номера элементов заданного массива Y(N),
удовлетворяющих условию 0 < yi
< 1.
2.17. [Pascal | C | Basic]
Выведите на печать номера точек, лежащих в круге радиусом R
с центром в начале координат. Координаты точек заданы массивами X(N)
и Y(N).
2.18. [Pascal | C | Basic]
В заданном массиве A(N) вместо a1
запишите наибольший элемент массива, а вместо aN
— наименьший элемент массива.
2.19. [Pascal | C | Basic]
В заданном массиве A(N), все элементы которого попарно различны,
найдите:
а) наибольший элемент из отрицательных;
б) наименьший элемент из положительных;
в) второй по величине элемент.
2.20. [Pascal | C | Basic]
В заданном массиве A(N) определите число соседств:
а) двух положительных чисел;
б) двух чисел разного знака;
в) двух чисел одного знака, причем абсолютная величина
первого числа должна быть больше второго числа;
г) чётного числа и нечётного c нечётным индексом.
2.21. [Pascal | C | Basic]
В заданном массиве A(N) положительные элементы уменьшите вдвое,
а отрицательные замените на значения их индексов.
2.22. [Pascal | C | Basic]
В заданном массиве A(N) вычислите среднее геометрическое и среднее
арифметическое значения для положительных элементов.
2.23. [Pascal | C | Basic]
Вычислите P = 1 . 2 2 . 3
. 4 3 . 4 . 5 .
6 … N . (N 1) . … .
2N.
2.24. [Pascal | C | Basic]
Образуйте массив B, состоящий из положительных элементов заданного
массива A(N), больших пяти. Выведите на печать образованный массив
и число его элементов.
2.25. [Pascal | C | Basic]
Из заданных векторов X(N) и Y(N) получите вектор Z(2N
) c элементами (x1 , y1 , x2 , y2 , …, xN , yN) .
2.26. [Pascal | C | Basic]
Для заданного вектора X(2N ) вычислите Y = x1
– x2 x3
– … – x2N .
2.27. [Pascal | C | Basic]
Дан вектор A(N). Найдите порядковый номер того из элементов, который
наиболее близок к какому-нибудь целому числу (первому по порядку, если таких несколько).
2.28. [Pascal | C | Basic]
Элементы заданного массива X = (x1 ,
x2, …,xN
) переупорядочите следующим образом: X = (xN
, xN-1 , …, x1 ).
2.29. [Pascal | C | Basic]
Для заданного набора коэффициентов a, b, c, d найдите наименьшее значение
функции y = a x3 b x2
cx d и значение аргумента, при котором оно получено.
Значение х изменяется от 0 до 2 с шагом 0,2.
2.30. [Pascal | C | Basic]
Дано натуральное N. Вычислите сумму тех элементов серии i 3
-3 . i . N N,
i = 1, 2, …, N, которые являются удвоенными нечётными числами.
2.31*. [Pascal | C | Basic]
Сожмите заданный массив A(N) отбрасыванием нулевых элементов.
2.32. [Pascal | C | Basic]
Дан массив A(2N). Постройте массивы с элементами, соответственно равными:
а) a1 , aN 1 , a2,
aN 2 , … , aN
, a2N ;
б) a2N,
a1 , a2N-1 , a2 , …
, aN 1 , aN .
2.33. [Pascal | C | Basic]
Дана матрица A(3, N), элементы которой положительны. Определите,
какие из троек a1i , a2i ,
a3i (i = 1, …, N) могут
служить сторонами треугольника. Выведите массив b1 , … , bN , состоящий
из нулей и единиц. Если тройка a1i ,
a2i , a3i
может служить сторонами треугольника, то bi
= 1, если нет, то bi = 0.
2.34. [Pascal | C | Basic]
У кассы аэрофлота выстроилась очередь из N человек. Время обслуживания
кассиром i-го клиента равно Ti (i = 1, …, N).
а) Определите время пребывания в очереди каждого клиента;
б) Укажите номер клиента, для обслуживания которого кассиру
потребовалось больше всего время.
2.35. [Pascal | C | Basic]
В соревнованиях по фигурному катанию N судей независимо выставляют
оценки спортсмену. Затем из объявленных оценок удаляют самую высокую (одну,
если самую высокую оценку выставили несколько судей). Аналогично поступают с
самой низкой оценкой. Для оставшихся оценок вычисляется среднее арифметическое,
которое и становится зачетной оценкой. По заданным оценкам судей определите
зачетную оценку спортсмена.
2.36. [Pascal | C | Basic]
Несколько однотипных спасательных катеров, находящихся в акватории в точках с
координатами (xi , yi ),
i = 1, 2, …, N, получили сигнал SOS от судна, находящегося
в той же акватории в точке с координатами (x0 , y0 ). Определите, какой из катеров быстрей
других сможет оказать помощь?
2.37. [Pascal | C | Basic]
По данным о расписании движения пригородных поездов определите значение
наибольшего интервала времени между отправлениями поездов.
2.38. [Pascal | C | Basic]
Учитель объявил результаты контрольной работы. Определите пpоцентное
содеpжание выставленных им “пятерок”, “четверок”, “троек” и “двоек”.
2.39. [Pascal | C | Basic]
Фунт стерлингов, денежная единица Великобритании, до 1971 г. равнялся 20
шиллингам или 240 пенсам. С проходящего корабля в порту Ливерпуля сошли N
путешественников, каждый из которых имел по одной десятифунтовой купюре.
Они купили сувениры на сумму p1 ,
p2 , …, pn,
соответственно. Сколько фунтов, шиллингов и пенсов сдачи получил каждый из
путешественников?
2.40. [Pascal | C | Basic]
О каждом учащемся класса известны его пол, год рождения, рост и вес.
Определите, сколько в классе мальчиков и сколько девочек. Найдите средний
возраст мальчиков и средний возраст девочек. Определите, верно ли, что самый
высокий мальчик весит больше всех в классе, а самая маленькая девочка является
самой юной среди девочек.
Решу егэ
Данный алгоритм отнимает от значения следующего элемента массива значение текущего, если текущий элемент массива меньше следующего. Если текущий элемент массива больше или равен следующему, то от значения текущего элемента массива отнимается значение следующего элемента массива. При этом на каждой итерации цикла к значению s прибавляется значение текущего элемента массива после его обработки.
Изначальный порядок значений: 2, 4, 6, 1, 7, 2, 3, 6, 7, 2.
Первое изменение элементов: 2, 2, 6, 1, 7, 2, 3, 6, 7, 2, s = s 2.
Второе изменение элементов: 2, 2, 4, 1, 7, 2, 3, 6, 7, 2, s = s 2.
Третье изменение элементов: 2, 2, 3, 1, 7, 2, 3, 6, 7, 2, s = s 3.
Четвёртое изменение элементов: 2, 2, 3, 1, 6, 2, 3, 6, 7, 2, s = s 1.
Пятое изменение элементов: 2, 2, 3, 1, 4, 2, 3, 6, 7, 2, s = s 4.
Шестое изменение элементов: 2, 2, 3, 1, 4, 2, 1, 6, 7, 2, s = s 2.
Седьмое изменение элементов: 2, 2, 3, 1, 4, 2, 1, 5, 7, 2, s = s 1.
Восьмое изменение элементов: 2, 2, 3, 1, 4, 2, 1, 5, 2, 2, s = s 5.
Последнее изменение элементов: 2, 2, 3, 1, 4, 2, 1, 5, 0, 2, s = s 0.
Таким образом, значение переменной s после выполнения фрагмента программы равняется
Ответ: 20.
§
Так будет выглядеть массив после пятого шага:
{1, 2, 3, 4, 5, 5, 4, 3, 2, 1}
А так после десятого
{10, 18, 24, 28, 30, 30, 28, 24, 18, 10}
Таким образом, видно, что после выполнения данного цикла элементы массива будут возрастать вплоть до пятого элемента, а потом начнут убывать.
Следовательно, правильный ответ указан под номером 4.
§
Задаем массив A[i]:=2 i: 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12.
Меняем массив, идя от краев в центр, левый меняем на правый с вычетом 1, а потом правый на измененный левый плюс 3:
A[i]:= A[10-i] – 1: 12 – 1, 11 – 1, 10 – 1, 9 – 1, 8 – 1 = 11, 10, 9, 8, 7 – первые пять ячеек.
A[10 – i]:= A[i] 3 = A[10-i] – 1 3 = A[10-i] 2: 12 2, 11 2, 10 2, 9 2, 8 2 = 14, 13, 12, 11, 10 – вторые пять ячеек в обратном порядке (с номера 10 до номера 6).
Элемент A[5] остался неизменным: A[5] = 7.
В итоге: 11 10 9 8 7 7 10 11 12 13 14.
Правильный ответ указан под номером 3.