Презентация по информатике Решение задач из открытого банка ФИПИ 2014 год по теме Массивы


МассивыЗадачи из открытого банка ФИПИ 2014 год Задача №1. Опишите на русском языке или одном из языков программирования алгоритм поиска номера первого из двух последовательных элементов в целочисленном массиве из 30 элементов, произведение которых максимально (если таких пар несколько, то можно выбрать любую из них).Значения двумерного массива размера 7×7 задаются с помощью вложенного оператора цикла в представленном фрагменте программы:Сколько элементов массива будут иметь положительные значения?         {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}БейсикFOR n=1 TO 7FOR k=1 TO 7B(n, k)=k–nNEXT kNEXT nПаскальfor n:=1 to 7 dofor k:=1 to 7 do  B[n, k]:=k–n;Алгоритмическийнц для n от 1 до 7нц для k от 1 до 7  B[n, k]=k–nкцкц{5C22544A-7EE6-4342-B048-85BDC9FD1C3A} 1) 492) 283) 21 4) 7 Паскальfor n:=1 to 7 dofor k:=1 to 7 do  B[n, k]:=k–n;Сколько положительных?{5940675A-B579-460E-94D1-54222C63F5DA}123456711-12-13-14-15-16-17-121-22-23-24-25-26-27-231-32-33-34-35-36-37-341-42-43-44-45-46-47-451-52-53-54-55-56-57-561-62-63-64-65-66-67-671-72-73-74-75-76-77-7k – номер столбцаn – номер строки{5940675A-B579-460E-94D1-54222C63F5DA}1234567101234562-10123453-2-1012344-3-2-101235-4-3-2-10126-5-4-3-2-1017-6-5-4-3-2-10Результат: 21 Задача №2. Элементы двумерного массива A размером N х N первоначально были равны 1000. Затем значения некоторых из них меняются с помощью вложенного оператора цикла в представленном фрагменте программы (ниже представлен фрагмент одной и той же программы, записанный на разных языках программирования).Какой элемент массива в результате будет иметь минимальное значение?{5C22544A-7EE6-4342-B048-85BDC9FD1C3A}Бейсикk:=0FOR i=1 TO NFOR j=N–i+1 TO Nk=k+1A(i, j)=kNEXT jNEXT iПаскальk:=0;for i:=1 to N dofor j:=N–i+1 to N do  begin     k:=k+1;    A[i, j]:=k;  endАлгоритмический  k:=0нц для i от 1 до N  нц для j от N–i+1 до N    k:=k+1    A[i, j]:=k  кцкц{5C22544A-7EE6-4342-B048-85BDC9FD1C3A}1) A(1, 1)2) A(1, N)3) A(N, 1)4) A(N, N) Паскальk:=0;for i:=1 to N dofor j:=N–i+1 to N do  begin     k:=k+1;    A[i, j]:=k;  endКакой элемент массива в результате будет иметь минимальное значение?{5940675A-B579-460E-94D1-54222C63F5DA}1000100010001000100011000100010001000210003100010001000100010001000100010001000100010001000100010001000j - номер столбцаi - номер строкиN=51 ход цикла: i:=1, j:=5-1+1=5K:=0+1=1A[1,5]:=12 ход цикла: i:=2, j:=5-2+1=4K:=1+1=2A[2,4]:=23 ход цикла: i:=2, j:=4+1=5K:=2+1=3A[2,5]:=3Видим, что k только увеличивается, значит минимум будет в первом цикле, т.е. А[1,5], где 5 –это N. Ответ: 2) A[1,N] Задача №3. Значения двумерного массива A размера 9×9 задаются с помощью вложенного оператора цикла в представленном фрагменте программы:{5C22544A-7EE6-4342-B048-85BDC9FD1C3A}БейсикFOR n=1 TO 9FOR k=1 TO 9A(n,k)=n+k+1NEXT kNEXT nПаскальfor n:=1 to 9 dofor k:=1 to 9 do    A[n,k]:=n+k+1Алгоритмическийнц для n от 1 до 9нц для k от 1 до 9    A[n,k]=n+k+1кцкц{5C22544A-7EE6-4342-B048-85BDC9FD1C3A} 1) 362) 403) 41 4) 45Сколько элементов массива A будут принимать четное значение? {5940675A-B579-460E-94D1-54222C63F5DA}12345678913456789101124567891011123567891011121346789101112131456789k – номер столбцаn – номер строкиПаскальfor n:=1 to 9 dofor k:=1 to 9 do    A[n,k]:=n+k+1Выполняем заполнение:n=1 k от 1 до 9A[1,1]:=1+1+1=3A[1,2]:=1+2+1=4A[1,3]:=1+3+1=5A[1,4]:=1+4+1=6 и т.дn=2 k от 1 до 9A[2,1]:=2+1+1=4A[2,2]:=2+2+1=5A[2,3]:=2+3+1=6 и т.д.Сколько элементов массива A будут принимать четное значение?В 1-ой строке 4 чётных числа, во 2-ой – 5 чётных чисел, в 3-ей – 4 чётных числа и т.д.в 4 -5, в 5- 4, в 6 – 5, в 7 – 4, в 8 – 5, в 9 – 4. (5*4+4*5=40)Ответ: 2) 40 Задача №4. Дан фрагмент программы, обрабатывающей двумерный массив A размера n×n.{5C22544A-7EE6-4342-B048-85BDC9FD1C3A}Бейсикk = 1FOR i = 1 TO n    c = A(i,i)    A(i,i) = A(k,i)    A(k,i) = cNEXT iПаскальk:=1;for i:=1 to n dobegin    c:=A[i,i];    A[i,i]:=A[k,i];    A[k,i]:=cendАлгоритмическийk:=1нц для i от 1 до n    c:=A[i,i]    A[i,i]:=A[k,i]    A[k,i]:=cкцПредставим массив в виде квадратной таблицы, в которой для элемента массива A[i,j] величина i является номером строки, а величина j – номером столбца, в котором расположен элемент. Тогда данный алгоритм меняет местами 1) два столбца в таблице 2) две строки в таблице 3) элементы диагонали и k-ой строки таблицы 4) элементы диагонали и k-го столбца таблицы Паскальk:=1;for i:=1 to n dobegin    c:=A[i,i];    A[i,i]:=A[k,i];    A[k,i]:=cendТогда данный алгоритм меняет местамиK:=11 ход цикла: i:=1c:=A[1,1]A[1,1]:=A[1,1]A[1,1]:= A[1,1], т.е. ничего не изменилось2 ход цикла: i:=2c:=A[2,2]A[2,2]:=A[1,2]A[1,2]:= A[2,2], т.е. меняются A[2,2] и A[1,2]3 ход цикла: i:=3c:=A[3,3]A[3,3]:=A[1,3]A[1,3]:= A[3,3], т.е. меняются A[3,3] и A[1,3]Видим, что k не изменяется, значит берутся элементы 1-ой строки, А[i,i]-это диагональ.  3) элементы диагонали и k-ой строки таблицыОтвет: 1) Опишите на русском языке или одном из языков программирования алгоритм поиска номера первого из двух последовательных элементов в целочисленном массиве из 30 элементов, произведение которых максимально (если таких пар несколько, то можно выбрать любую из них).pmax - произведение 2-х последовательных элементов: a[1] и a[2], a[2] и a[3] и т.д. Запомнить номер первого из элементов - imax. Const n=30;Var a:array [1..n] of integer; i, imax, pmax:integer;BeginFor i:=1 to n do readln(a[i]); {вводим массив} pmax:=a[1]*a[2]; imax:=1; {начальные значения} For i:=2 to n-1 do If a[i]*a[i+1]>pmax {выбор максимального произведения} then begin pmax:= a[i]*a[i+1]; imax:=i end; Write(imax) {вывод результата}End. 2) Опишите на русском языке или одном из языков программирования алгоритм подсчета максимального количества подряд идущих совпадающих элементов в целочисленном массиве длины 30.Подряд идущие совпадающие? a[i+1]=a[i] или a[i-1]=a[i]Const n=30;Var a:array [1..n] of integer; i, k, kmax:integer;BeginFor i:=1 to n do readln(a[i]); {вводим массив}k:=1; kmax:=1; {начальные значения} for i:=2 to n do {i=2 чтобы не выйти за пределы массива [1..n], т.к. используем a[i-1]} if a[i-1]=a[i] then begin k:=k+1; {считаем количество подряд идущих равных} if k>kmax then kmax:=k; {выбираем максимум} end else k:=1; {если соседние элементы не равны, сбрасываем счетчик и начинаем считать с 1}Write(kmax); {вывод результата}End. 3) Опишите на русском языке или одном из языков программирования алгоритм вычисления разности между средним арифметическим максимального и минимального значений элементов заданного целочисленного массива из 30 элементов и средним арифметическим всех элементов этого массива.Const n=30;Var a:array [1..n] of integer; i, max, min, s:integer;BeginFor i:=1 to n do readln(a[i]); {вводим массив}min:=a[1]; max:=a[1]; {начальные значения} for i:=2 to n do {т.к. a[1] использовали в начальном условии, начинаем цикл с 2} begin s:=s+a[i]; {сумма всех элементов массива} if a[i]>max then max:=a[i]; {выбор максимума} if a[i]<min then min:=a[i]; {выбор минимума} end;Write(abs(s/n-(max+min)/2)); {модуль разности между средним арифметическим всех элементов этого массива и средним арифметическим максимального и минимального значений элементов заданного массива.}End. 4) Опишите на русском языке или одном из языков программирования алгоритм получения из заданного целочисленного массива размером 30 элементов другого массива, который будет содержать модули значений элементов первого массива (не используя специальной функции, вычисляющей модуль числа).Определить два массива (например а и b). Модуль – если a[i]<0 то b[i]:=-a[i] иначе b[i]:=a[i] Const n=30;Var a,b:array[1..n] of integer; i:integer;Begin For i:1 to n do readln(a[i]); {вводим массив}Const n=30;Var a,b:array[1..n] of integer; i:integer;Begin For i:1 to n do readln(a[i]); {вводим массив}Const n=30;Var a,b:array[1..n] of integer; i:integer;Begin For i: For i:1 to n do begin if a[i]<0 then b[i]:=-a[i] else b[i]:=a[i]; {если элемент А[i] отрицательный, то меняем знак, если 0 или положительный, то без изменений помещаем в массив В} writeln(b[i]); {вывод массива b} end;End. 5) Опишите на русском языке или на одном из языков программирования алгоритм вычисления разности максимального среди элементов, имеющих четные значения, и максимального среди элементов, имеющих нечетный значения, в заданном целочисленном массиве из 30 положительных элементов(в предположении, что в массиве есть четные и нечетные элементы).Const n=30;Var a:array [1..n] of integer; i, max, min, s:integer;BeginFor i:=1 to n do readln(a[i]); {вводим массив}max1:=0; max2:=0; {начальные значения}For i:=1 to n do beginIf (a[i] mod 2=0) and (a[i]>max1) then max1:=a[i]; {max среди четных}If (a[i] mod 2<>0) and (a[i]>max2) then max2:=a[i]; {max среди нечетных}End;Write(max1-max2); {вывод результата}End. 6) Дан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значения от 0 до 10000 включительно. Опишите на естественном языке или на одном из языков программирования алгоритм, позволяющий найти и вывести максимальное значение среди элементов массива, которые имеют чётное значение и являются трёхзначными. Если в исходном массиве нет элемента, значение которого является чётным трёхзначным числом, то вывести сообщение «Не найдено».Const n=20;Var a:array [1..n] of integer; i, j, max:integer;BeginFor i:=1 to n do readln(a[i]); {вводим массив}max:=0; {начальные значения} for i:=1 to n doIf (a[i] mod 2=0) and (a[i]>=100) and (a[i]<1000) then max:=a[i]; {решение}If max>0 then Write(max) else write(‘Не найдено’); {вывод результата}End.(a[i] mod 2=0) - определение четности (a[i]>=100) and (a[i]<1000) - все трёхзначные числа лежат в этом диапазоне const N = 20;var a: array [1..N] of integer; i, j, min: integer;begin for i := 1 to N do readln(a[i]); j:=0; for i := 1 to N do if (A[i]>0) and (A[i] mod 10=0) and ((j=0) or (A[i]<min)) then begin j:=j+1; min:= A[i] end; if j>0 then write(min) else write(‘не найдено’)end.7) Дан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значения от –1000 до 1000 включительно. Опишите на естественном языке или на одном из языков программирования алгоритм, позволяющий найти и вывести минимальное значение среди положительных элементов массива, оканчивающихся на 0. Если в исходном массиве нет элемента, значение которого положительно и оканчивается цифрой 0, то вывести сообщение «Не найдено». 8) Дан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значениия от -1000 до 1000 включительно. Опишите на естественном языке или на одном из языков программирования алгоритм, позволяющий найти и вывести минимальное значение среди положительных элементов массива, имеющих чётное значение. Если в исходном массиве нет элемента, значение которого чётно и положительно, то вывести сообщение «Не найдено».9) Дан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значения от –1000 до 1000 включительно. Опишите на естественном языке или на одном из языков программирования алгоритм, позволяющий найти и вывести минимальное значение среди положительных элементов массива, кратных 5. Если в исходном массиве нет элемента, значение которого положительно и делится на 5, то вывести сообщение «Не найдено».