Автор: Пользователь скрыл имя, 25 Февраля 2013 в 17:46, контрольная работа
Пример 2.1. Вычислить сумму элементов числового массива A = (a1 , a2 , ... , aN ).
Пример 2.2. Найти наибольший элемент числового массива A = (a1, a2 , ..., aN ) и его номер.
Пример 2.3. В баскетбольную команду могут быть приняты ученики, рост которых превышает 170 см. Составьте список кандидатов в команду из учеников класса.
Пример 2.5. Дан массив X(N). Получить новый массив Y(N) такой, что в нем сначала идут положительные числа, затем нулевые, и затем отрицательные из X.
Тема: Одномерные массивы
Циклы типа для применяются, когда число повторений цикла известно к началу его выполнения.
Язык |
Пример |
Величина шага |
Школьный АЯ |
нц для i от 1 до N |
Всегда 1 |
Pascal |
For i := 1 to N do |
1 |
For i := N downto 1 do |
-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 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-программы
|
Пример 2.2. Найти наибольший элемент числового массива A = (a1, a2 , ..., aN ) и его номер.
Тест
Данные |
Результаты | ||
N=4 |
A=(3, -1, 10, 1) |
Amax=10 |
K=3 |
Школьный АЯ алг МаксЭлемент (арг цел N, арг вещ таб A[1:N], рез вещ Amax, рез цел k) нач цел i Amax := A[1]; k := 1 нц для i от 2 до N если A[i] > Amax то Amax:=A[i]; k := i все кц кон Исполнение
алгоритма
|
Блок-схема |
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
If A[i] > Amax then
begin
Amax := A[i]; k := i
end;
WriteLn; WriteLn('Наибольший элемент' , k , '-й');
WriteLn('Его значение ', Amax : 5 : 1); ReadLn
END.
Пример 2.3. В баскетбольную команду могут быть приняты ученики, рост которых превышает 170 см. Составьте список кандидатов в команду из учеников класса.
Система тестов
Номер теста |
Проверяемый случай |
Число учеников |
Фамилии |
Рост |
Результаты |
1 |
Есть кандидаты |
3 |
Кулов Чехин Уваров |
171 165 178 |
Кулов Уваров |
2 |
Нет кандидатов |
2 |
Ершов Иванов |
170 165 |
Нет кандидатов |
Школьный АЯ
алг Баскетбол (арг цел 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 |
1 2 3 |
+ - + |
0 1 2 |
Кулов Уваров |
2 |
1 2 |
- - |
0 |
- |
Pascal
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('РОСТ КОТОРЫХ
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.
Пример 2.4. Для заданного x вычислить
Здесь n! = 1. 2. 3 .... n (читается как "n-факториал").
Тест
Данные |
Результат | |
X=1 |
n=3 |
Школьный АЯ
алг Сумма Ряда (арг вещ х, арг цел n, рез вещ S)
нач цел i, вещ P | P - очередное слагаемое
S := 1; P := 1
нц для i от 1 до n
P := - P*x /i | получение очередного слагаемого
S := S + P
кц
кон
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. |
Блок-схема |
Результат
работы программы
|
Пример 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]
все
кц
кон
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. |
Блок-схема (фрагмент) |
Задачи для самостоятельного решения
2.1. Подсчитайте число и сумму положительных, число и произведение отрицательных элементов заданного массива A(N).
2.2 Варианты заданий Array1-140 из электронного задачника по программированию
М.Э. Абрамяна (стр 49-63)
№ |
ТЕМА: № задач | ||||||
Формирование массива и вывод его элементов 1-17 |
Анализ элементов массива
18-50 |
Работа с несколькими массивами 51-64 |
Преобразование массива 65-89 90-111 *112-115 |
Серии 116-130 |
Множества точек на плоскости 131-140 |
Модуль с основными алгоритмами обработки одномерных массивов | |
Баллы |
3 |
4 |
2 |
4 |
3 |
3 |
4 |
1 |
1-3 5 |
18,22, 33, 34 |
51 |
70 90 |
116 |
140 |
|
2 |
1-3 6 |
19, 21 32, 35 |
52 |
69 91 |
117 |
139 |
|
3 |
1-3 8 |
18,22, 31, 36 |
53 |
68 92 |
118 |
138 |
|
4 |
1-3 9 |
19, 21 30, 37 |
54 |
67 93 |
119 |
137 |
|
5 |
1-3 10 |
18,22, 29, 38 |
55 |
66 94 |
120 |
136 |
|
6 |
1-3 13 |
19, 21 28, 39 |
56 |
65 95 |
121 |
135 |
|
7 |
1-3 14 |
18,22, 27, 40 |
57 |
64 96 |
122 |
134 |
|
8 |
1-3 15 |
19, 21, 26, 41 |
58 |
63 97 |
123 |
133 |
|
9 |
1-3 16 |
18,22, 25, 42 |
59 |
62 98 |
124 |
132 |
|
10 |
1-3 17 |
19, 21 24, 43 |
60 |
61 99 |
125 |
131 |
Дополнительные индивидуальные задания ( 3 балла)
Задания учебника : 44-50; 71-89; 100-111; 112-115; 126-130
2.34. У кассы аэрофлота
выстроилась очередь из N человек. Время обслуживания кассиром i-го клиента равно Ti (i = 1, ..., N).
а) Определите время пребывания в очереди
каждого клиента;
б) Укажите номер клиента, для обслуживания
которого кассиру потребовалось больше
всего время.