Методические рекомендации по проведению уроков в 11 классе урок Табличный процессор. Основные сведения Планируемые образовательные результаты
Скачать 1.38 Mb.
|
to n do if A[i,1] < A[j,1] then begin k:=A[i,1]; A[i,1]:=A[j,1]; A[j,1]:=k; end; В этом фрагменте: упорядочивается первая строка массива по убыванию; упорядочивается первый столбец массива по убыванию; упорядочивается первая строка массива по возрастанию; упорядочивается первый столбец массива по возрастанию. 5. Ниже представлен фрагмент программы, обрабатывающей одномерный целочисленный массив с индексами от 0 до 10. Известно, что в начале выполнения этого фрагмента в массиве находилась возрастающая последовательность чисел, т. е. A[0] < A[1] < … < A[10]. Какое наибольшее значение может иметь переменная s после выполнения данной программы? s:=27; n:=10; for i:=0 to n-1 do begin s:=s+A[i]-A[i+1]+2 end; Ответ: 37. Указания, комментарии, ответы и решения Ответы на вопросы в тексте параграфа Вопрос к примеру 2 на стр. 105. 51 Возможный вариант модификации программы: program slova; var simbol: array [1..20] of char; i, n: integer; begin writeln('Введите n:'); readln(n); writeln('Введите слово - цепочку из n символов'); i:=0; repeat i := i + 1; read(simbol[i]); until i>n; n := i-1; writeln('Перевёрнутое слово:'); for i:=n downto 1 do write(simbol[i]); end. Следует отметить, что работа со строками может быть организована более эффективно: var s1,s2:string; i:integer; begin Write('Введите слово: '); Readln(s1); s2:=''; for i:=length(s1) downto 1 do s2:=s2+s1[i]; Writeln('Перевернутое слово: ',s2) end. Вопрос к примеру 3 на стр. 107. Соответствующий алгоритм рассматривался в учебнике 9 класса. Вопрос к примеру 4 на стр. 108. Нахождение минимального элемента массива с помощью цикла for: const n=10; var a: array [1..n] of integer; i, min: integer; begin writeln('Ввод значений элементов массива:'); for i:=1 to n do read(a[i]); min:=a[1]; for i:=2 to n do if a[i] end. Алгоритм поиска наибольшего элемента в неупорядоченном массиве обладает линейной сложностью O(n): необходимо просмотреть все n элементов массива, чтобы понять, какой из них максимальный. Вопрос к примеру 6 на стр. 109. const n=7; var a: array [1..n] of integer; i, k: integer; 52 begin writeln('Ввод значений элементов массива:'); for i:=1 to n do read(a[i]); k:=0; for i:=1 to n do; if (a[i]>9) and (a[i]<100) then k:=k+1; if k=n then writeln('Да') else writeln('Нет') end. Вопрос к примеру 7 на стр. 109. const n=7; var a: array [1..n] of integer; i: integer; flag: boolean; begin writeln('Ввод значений элементов массива:'); for i:=1 to n do read(a[i]); flag:=true; for i:=1 to n-1 do if a[i]>a[i+1] then flag:=false; if flag then writeln('Да') else writeln('Нет') end. Эта задача может быть решена и путём подсчёта пар, таких, что a[i]>a[i+1]: const n=7; var a: array [1..n] of integer; i, k: integer; begin writeln('Ввод значений элементов массива:'); for i:=1 to n do read(a[i]); k:=0; for i:=1 to n-1 do; if a[i]>a[i+1] then k:=k+1; if k=0 then writeln('Да') else writeln('Нет') end. Вопрос к примеру 8 на стр. 110. const n=7; var a: array [1..n] of integer; i, k: integer; begin writeln('Ввод значений элементов массива:'); for i:=1 to n do read(a[i]); writeln('Введите номер удаляемого элемента:'); read(k); for i:=k to n-1 do a[i]:=a[i+1]; for i:=1 to n-1 do writeln(a[i]) end. Вопрос к примеру 9 на стр. 111. const n=8; 53 var a: array [1..n] of integer; i, k: integer; begin writeln('Ввод значений элементов массива:'); for i:=1 to n-1 do read(a[i]); writeln('Введите номер места вставляемого элемента:'); read(k); for i:=n downto k+1 do a[i]:=a[i-1]; writeln('Введите значение вставляемого элемента:'); read(a[k]); for i:=1 to n do writeln(a[i]) end. Вопрос к примеру 10 на стр. 112. const n=7; var a: array [1..n] of integer; i, r: integer; begin writeln('Ввод значений элементов массива:'); for i:=1 to n do read(a[i]); for i:=1 to n div 2 do begin r:=a[i]; a[i]:=a[n-i+1]; a[n-i+1]:= r end; for i:=1 to n do writeln(a[i]) end. Вопрос к примеру 11 на стр. 114. const n=7; var a: array[1..n] of integer; i, j, r: integer; begin writeln('Ввод значений элементов исходного массива:'); for i:=1 to n do read(a[i]); for i:=1 to n-1 do for j:=1 to n-i do if a[j]>a[j+1] then begin r:=a[j]; a[j]:=a[j+1]; a[j+1]:=r end; writeln('Отсортированный массив: '); for i:=1 to n do write(a[i]:6) end. Вопрос к примеру 12 на стр. 115. const n=7; var a: array[1..n] of integer; 54 i, j, imin, per: integer; begin writeln('Ввод значений элементов исходного массива:'); for i:=1 to n do read(a[i]); for i:=1 to n-1 do begin imin:=i; for j:=i+1 to n do if a[j]then imin:=j; per:=a[i]; a[i]:=a[imin]; a[imin]:=per; end; writeln('Отсортированный массив: '); for i:=1 to n do write(a[i]:6) end. Ответы на задания к параграфу № 3. 1) Будет найдена сумма индексов 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55. 2) Вместо суммы элементов программа находит сумму индексов – сумму чисел от 1 до 10. Поэтому, чтобы программа работала правильно, можно, например, ввести числа 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 в любом порядке. В целом же, так как ответ не зависит от значения элементов массива, то программа выдаёт верный ответ во всех случаях, когда сумма элементов равна 55. Например, если A[1]=55, а все остальные элементы равны 0. 3) Вместо s:=s+i надо s:=s+a[i]. № 4. 1) 0. 2) Любой массив из десяти элементов, имеющий хотя бы одно нулевое значение. 3) Вместо p:=0 надо p:=1. № 5. const n=7; var a: array[1..n] of integer; i, j, min, max : integer; begin writeln('Ввод значений элементов исходного массива:'); for i:=1 to n do read(a[i]); max:=a[1]; min:=a[1]; for i:=2 to n do if a[i] else if a[i]>max then max:=a[i]; writeln('min= ', min,' max=',max); end. 55 № 6. Пусть k = 4. Преобразованный массив: i 1 2 3 4 5 6 7 a[i] 10 12 5 4 15 20 20 № 8. Преобразованный массив: i 1 2 3 4 5 6 7 a[i] 20 15 4 8 5 12 10 № 9. Результат выполнения программы: max1=6, max2=6. Решается задача нахождения двух наибольших элементов одномерного массива, которые могут быть как равны между собой, так и различаться; max1 – наибольший, max2 – следующий по величине элемент массива. № 10. const t=5; var a: array[1..t] of integer; i, n, max, min, s, p, k: integer; begin write('n='); read(n); k:=0; while n>0 do begin k:=k+1; a[k]:=n mod 10; n:=n div 10 end; max:=a[1]; min:=a[1]; s:=a[1]; p:=a[1]; for i:=2 to k do begin if a[i]>max then max:=a[i]; if a[i] end; writeln('max=', max, ', min=', min); writeln('s=', s, ', p=', p); end. Самостоятельная работа № 4 Вариант 1. № 1. program r4_v1_1; const t=4; var a: array[1..t] of integer; i: integer; begin write ('Введите элементы массива '); for i:=1 to t do read(a[i]); for i:=1 to t do writeln('a[', i, ']=', a[i]) 56 end. № 2. program r4_v1_2; const t=20; var a: array[1..t] of integer; i: integer; begin for i:=1 to t do a[i]:=i*i; for i:=1 to t do writeln('a[', i, ']=', a[i]) end. № 3. program r4_v1_3; const t=15; var a: array[1..t] of integer; i: integer; begin for i:=1 to t do a[i]:=random(100); for i:=1 to t do writeln('a[', i, ']=', a[i]) end. № 4. program r4_v1_4; const t=11; var a: array[1..t] of real; i: integer; s: real; begin s:=0; write ('Введите элементы массива'); for i:=1 to t do begin read(a[i]); s:=s+a[i]; end; writeln('s=', s) end. s = 123.5. № 5. program r4_v1_5; const t=11; var a: array[1..t] of real; i, k1, k2, k3: integer; begin k1:=0; k2:=0; k3:=0; write ('Введите элементы массива'); for i:=1 to t do begin read(a[i]); if a[i]<0 then k1:=k1+1; if a[i]=0 then k2:=k2+1; 57 if a[i]>0 then k3:=k3+1; end; writeln('отрицательных - ', k1); writeln('нулевых - ', k2); writeln('положительных - ', k3); end. № 6. program r4_v1_6; const t=11; var a: array[1..t] of real; i: integer; p: real; begin p:=1; write('Введите элементы массива'); for i:=1 to t do begin read(a[i]); if a[i]<>0 then p:=p*a[i]; end; writeln('p=', p); end. p = 718641000. № 7. program r4_v1_7; const t=11; var a: array[1..t] of integer; i: integer; s1, s2: real; begin s1:=0; s2:=0; write ('Введите элементы массива'); for i:=1 to t do begin read(a[i]); if a[i] mod 2 = 0 then s1:=s1+a[i] else s2:=s2+a[i]; end; if s1>s2 then writeln('сумма чётных значений больше суммы нечётных на ', s1-s2) else if s1=s2 then writeln('суммы чётных и нечётных значений равны ') else writeln('сумма нечётных значений больше суммы чётных на ', s2-s1) end. Сумма нечётных значений больше суммы чётных на 37. № 8. program r4_v1_8; const t=11; 58 var a: array[1..t] of real; i, k: integer; s, sa: real; begin k:=0; s:=0; write ('Введите элементы массива'); for i:=1 to t do begin read(a[i]); if a[i]>0 then begin s:=s+a[i]; k:=k+1 end end; sa:=s/k; writeln('sa=', sa:8:4) end. sa = 19.6429. № 9. program r4_v1_9; const t=11; var a: array[1..t] of real; i, k: integer; z: real; begin write('Введите z='); read(z); k:=0; write('Введите элементы массива'); for i:=1 to t do begin read(a[i]); if a[i]>z then k:=k+1; end; writeln('k=', k) end. № 10. program r4_v1_10; const t=12; var a: array[1..t] of integer; i : integer; begin for i:=1 to t do begin a[i]:=random(10)+1; write(a[i]:3); end; writeln; for i:=1 to t do if a[i]=i then writeln('a[', i, ']=', a[i]) end. 59 Вариант 2. № 1. program r4_v2_1; const t=12; var b: array[1..t] of integer; i : integer; begin b[1]:=1; for i:=2 to t do b[i]:=b[i-1]*i; for i := 1 to t do writeln('B[', i, ']=', b[i]) end. B[1]=1 B[4]=24 B[7]=5040 B[10]=3628800 B[2]=2 B[5]=120 B[8]=40320 B[11]=39916800 B[3]=6 B[6]=720 B[9]=362880 B[12]=479001600 № 2. program r4_v2_2; const t=20; var b: array[1..t] of integer; i : integer; begin for i:=1 to t do begin b[i]:=random(81); write (b[i]:3); end; end. № 3. program r4_v2_3; const t=20; var a, b: array[1..t] of integer; i : integer; begin for i:=1 to t do begin b[i]:=random(81); write (b[i]:3); end; writeln; for i:=1 to t do begin a[i]:=b[20-i+1]; write (a[i]:3); end; end. № 4. program r4_v2_4; 60 const t=100; var a, b: array[1..t] of integer; i, k1, k2, k3 : integer; begin for i:=1 to t do begin a[i]:=random(100); b[i]:=random(100); end; k1:=0; k2:=0; k3:=0; for i:=1 to t do begin if a[i]then k1:=k1+1; if a[i]=b[i] then k2:=k2+1; if a[i]>b[i] then k3:=k3+1; end; writeln ('k1=',k1); writeln ('k2=',k2); writeln ('k3=',k3) end. № 5. program r4_v2_5; const t=11; var b: array[1..t] of real; i, k: integer; s, sa: real; begin k:=0; s:=0; write ('Введите элементы массива'); for i:=1 to t do begin read(b[i]); if b[i] < 0 then begin s := s + abs(b[i]); k := k + 1 end end; sa:=s/k; writeln('sa=', sa:8:4) end. sa = 84.6250. № 6. program r4_v2_6; const t=11; var b: array[1..t] of real; i, k: integer; p, s: real; begin p:=1; s:=0; k:=0; write ('Введите элементы массива'); for i:=1 to t do begin 61 read(b[i]); if b[i]<0 then s := s + b[i]; if b[i]=0 then k := k + 1; if b[i]>0 then p := p * b[i]; end; writeln('произведение положительных - ', p); writeln('сумма отрицательных: ', s); writeln('количество нулевых - ', k) end. № 7. program r4_v2_7; const t=11; var b: array[1..t] of real; i: integer; p: real; begin p:=1; write ('Введите элементы массива'); for i:=1 to t do begin read(b[i]); if (abs(b[i]<=20)) and (b[i]<>0) then p:=p*b[i]; end; writeln('p=', p) end. № 8. program r4_v2_8; const t=11; var b: array[1..t] of real; i, k: integer; s, sa: real; begin s:=0; write ('Введите элементы массива'); for i:=1 to t do begin read(b[i]); s:=s+b[i]; end; sa:=s/t; k:=0; for i:=1 to t do if b[i]>sa then k:=k+1; writeln('k=', k) end. № 9. program r4_v2_9; const t=11; var b: array[1..t] of real; i: integer; max: real; begin 62 write ('Введите элементы массива'); for i:=1 to t do read(b[i]); max:=b[1]; for i:=2 to t do if b[i]>max then max:=b[i]; writeln('max=', max) end. № 10. program r4_v2_10; const t=12; var b: array[1..t] of integer; i, maxotr : integer; begin for i:=1 to t do begin b[i]:=random(20)-10; write (b[i]:4) end; maxotr:= -10; for i:=1 to t do if (b[i]<0) and (b[i]>maxotr) then maxotr:=b[i]; writeln; write ('maxotr=', maxotr) end. Вариант 3. № 1. program r4_v3_1; 0>0> |