Практикум — Глава 2. Алгоритмы, реализуемые с помощью циклов типа ДЛЯ

Определите значение переменных s и i после выполнения следующих – школьные

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




Циклы типа для применяются, когда
число повторений цикла известно к началу его выполнения.

ЯзыкПримерВеличина шага
Школьный АЯ  нц  для  от  1  до 

тело цикла 

  кц
Всегда 1
Pascal  For  i := 1  to do 

тело цикла ;
  1
  For  i := N  downto  1  do 

тело цикла ;
-1
Basic  FOR  I  = 1  TO  STEP 

тело цикла 

  NEXT
Шаг Н произвольный (по умолчанию равен 1)

 Пример 2.1. Вычислить сумму элементов числового массива
  A =
(a
1
, a2,
… , a
N
).
   Тест

ДанныеРезультат
N=5A=(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]
  кц
кон
Исполнение алгоритма

iS
 0 
10 a1= 0 3 = 5 
2a1 a2= 3 5 = 8 
3a1 a2 a3= 8-2 = 6 
4a1 a2 a3 a4= 6 6 = 12 
5a1 a2 a3 a4 a5= 12 3=15

 

 

 

Результаты работы Pascal-программы 

  Введите N = 5
<Enter> 
 

  A[1] =  3  
<Enter> 
 

  A[2] =  5  
<Enter> 
 

  A[3] = -2  
<Enter> 
 

  A[4] =  6  
<Enter> 
 

  A[5] =  3  
<Enter> 
 

  Сумма равна  15.0

 

QBasic

CLSINPUT "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 =
(a
1,
a
2 , …, aN
) и его номер.
 Тест  

ДанныеРезультаты
N=4A=(3, -1, 10, 1)Amax=10K=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] > 170KКондидаты в команду
1123 - 012Кулов  Уваров
212--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 вычислить Практикум — Глава 2. Алгоритмы, реализуемые с помощью циклов типа ДЛЯЗдесь 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-программы 

Введите n = 3   <Enter>  

Введите x = 1   <Enter>  

Ответ:  S =  .3333333

 

Пример 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  ,  a
 ,  …  ,  aN-2
 ).

2.13. [Pascal | C | Basic]
Дан массив A(N). Получите массив B(N)i-й элемент
которого равен среднему арифметическому первых  элементов
массива А:   bi =  (a1    a2
    …    a
 ) / i.

2.14. [Pascal | C | Basic]
Вычислите значения многочленов:

  P =  an xn
    an-1  xn-1
    …    a x     a0 ;

  Q = a0 xn
    a1  xn-1
    …    an-1  x    
an,

используя формулу Горнера. Коэффициенты многочленов заданы в виде
вектора   A = (a0
, a1 ,  …  ,  a
).

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 = (x
,  xN-1 ,  …,  x)
.

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). Постройте массивы с элементами, соответственно равными:

а) a,  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 после выполнения фрагмента программы равняется s=2 плюс 2 плюс 3 плюс 1 плюс 4 плюс 2 плюс 1 плюс 5=20.

Ответ: 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.