Решение задачи 10 ОГЭ 2017 по информатике
Задачи типа 10 ОГЭ по информатике относятся к довольно сложным. В подобных задачах проверяется знание учащегося работы с одномерными массивами, а также с циклами.
Рассмотрим решение такой задачи на примере демоверсии ФИПИ по информатике за 2017 год. Напомню, что на сайте уже есть решение подобной задачи.
Условие:
Алгоритмический язык | Бейсик | Паскаль |
алг нач целтаб Dat[1:10] цел k, m Dat[1] := 16 Dat[2] := 20 Dat[3] := 20 Dat[4] := 41 Dat[5] := 14 Dat[6] := 21 Dat[7] := 28 Dat[8] := 12 Dat[9] := 15 Dat[10] := 35 m := 0 нц для k от 1 до 10 если Dat[k]>m то m := Dat[k] все кц вывод m кон | DIM Dat(10) AS INTEGER DIM k,m AS INTEGER Dat(1) = 16: Dat(2) = 20 Dat(3) = 20: Dat(4) = 41 Dat(5) = 14: Dat(6) = 21 Dat(7) = 28: Dat(8) = 12 Dat(9) = 15:Dat(10) = 35 m = 0 FOR k = 1 TO 10 IF Dat(k)>m THEN m = Dat(k) ENDIF NEXT k PRINT m | Var k, m: integer; Dat: array[1..10] of integer; Begin Dat[1] := 16; Dat[2] := 20; Dat[3] := 20; Dat[4] := 41; Dat[5] := 14; Dat[6] := 21; Dat[7] := 28; Dat[8] := 12; Dat[9] := 15; Dat[10] := 35; m := 0; for k := 1 to 10 do if Dat[k]>m then begin m := Dat[k] end; writeln(m); End. |
Решение:
Итак, давайте рассмотрим программу для того, чтобы понять, что, собственно, она делает. Я буду рассматривать программу, написанную на Паскале. Возможно, мое объяснение будет некорректно с точки зрения классического программирования и профессиональной терминологии, но моя задача объяснить, как это работает.
Посмотрим на первые строки:
Var k, m: integer;
Dat: array[1..10] of integer;
В них мы говорим Паскалю, что будем использовать две целочисленные переменные — k и m, а также описываем массив, который называем Dat. Этот массив состоит из 10 элементов, в качестве которых выступают целые числа. Далее начинается блок операторов и самое интересное.
Первое, что мы делаем — заполняем описанный массив Dat значениями. Это происходит в следующих строках:
Dat[1] := 16; Dat[2] := 20;
Dat[3] := 20; Dat[4] := 41;
Dat[5] := 14; Dat[6] := 21;
Dat[7] := 28; Dat[8] := 12;
Dat[9] := 15; Dat[10] := 35;
Думаю, понятно, что в первый элемент массива мы кладем число 16, во второй 20, в третий 20 и так далее. Это можно отобразить более наглядно в виде таблицы (кликните для увеличения).
Задача 10 ОГЭ по информатике
Итак, массив мы заполнили, дальше пойдет самое интересное. Переменной m мы присваиваем значение, равное нулю. А после этого запускаем цикл:
for k := 1 to 10 do
if Dat[k]>m then
begin
m := Dat[k]
end;
Давайте проанализируем, что происходит в этом цикле. По первой строчке (for k := 1 to 10 do) мы видим, что в цикле переменная k меняется от 1 до 10 с шагом 1. Далее условный оператор (if Dat[k]>m then), который сравнивает значение текущего элемента массива и значение переменной m. И если элемент массива больше, то в переменную m записываем значение этого элемента. Давайте попробуем пошагово.
Итак, в переменной m у нас ноль, начинаем выполнение цикла. Значение k равно единице. Подставим в условие значения Dat[1] (а это 16) и m и получим:
if 16>0 then
Как видим, это условие истинно, значит выполним следующее присваивание m := Dat[1] и в переменной m вместо нуля уже окажется число 16. Первый шаг цикла мы отработали. Перейдем ко второму.
На втором шаге переменная k равна 2, а условие примет вид if Dat[2]>m. Подставим значения и получим if 20>16 then. Условие опять истинное, значит выполнив следующий оператор присваивания m := Dat[k] получим в переменной m число 20.
На третьем шаге будем сравнивать значение третьего элемента массива (20) и значение переменной m (20). Это условие будет ложным, так как 20 не больше 20, а значит и оператор присваивания мы не выполняем, переходя к четвертому шагу.
На 4 шаге получим, что Dat[4] = 41, а в переменной m число 20. Так как 41 > 20, то в m у нас окажется 41.
Этого уже достаточно, чтобы понять логику программы. Подумайте сами, прежде чем прочитать мой ответ. На самом деле, мы проходим по всем элементам массива и сравниваем его наибольшим предыдущим. И если элемент больше, ты запоминаем его в переменной m и выводим его на экран (writeln(m)). Следовательно, в переменной m в конце выполнения программы у нас будет самый больший элемент массива Dat. А это 41. Это и будет ответом — 41.
Задание 10 ОГЭ информатика
Массив чисел — это последовательность чисел, которые принадлежат одной и той же переменной (называемой «массив») и имеют порядковые номера — индексы. Массив часто именуется таблицей.
DIM A(10) AS INTEGER ‘массив A — целочисленный массив, ‘который состоит из 10 чисел с индексами от 1 до 10 . A(1)=3 ‘элементу массива с индексом 1 присваиваем значение 3 A(2)=8 ‘элементу массива с индексом 2 присваиваем значение 8 A(3)=6 ‘элементу массива с индексом 3 присваиваем значение 6 FOR i = 1 TO 3 PRINT A(i) NEXT i ‘в цикле выводим значения трех элементов массива: ‘A(1), A(2) и A(3) ‘т.е. на экране появятся числа: ‘3 ‘8 ‘6
A=[3, 8, 6, 10, 15, 2, 7, 9, 8, 7] # A — массив, # который состоит из 10 чисел с индексами от 0 до 9 # т.е. A[0]=3 элемент массива с индексом 0 равен значению 3 # A[1]=8 элемент массива с индексом 1 равен значению 8 # A[2]=6 элемент массива с индексом 2 равен значению 6 for i in range (3): print (A[i]) # в цикле выводим значения трех элементов массива: # A[0], A[1] и A[2] # т.е. на экране появятся числа: # 3 # 8 # 6
Разбор 10 задания ОГЭ по информатике
- Подробный видеоразбор по ОГЭ 10 задания:
В таблице Dat хранятся данные измерений среднесуточной температуры за 10 дней в градусах ( Dat[1] — данные за первый день, Dat[2] — за второй и т. д.).
Определите, какое число будет напечатано в результате работы следующей программы.
Текст программы приведён на нескольких языках программирования:
Var k, m: integer; Dat: array[1..10] of integer; Begin Dat[1] := 12; Dat[2] := 15; Dat[3] := 17; Dat[4] := 15; Dat[5] := 14; Dat[6] := 12; Dat[7] := 10; Dat[8] := 13; Dat[9] := 14; Dat[10] := 15; m := 0; for k := 1 to 10 do if Dat[k] > m then begin m := Dat[k]; end; writeln(m); End.
DIM Dat(10) AS INTEGER DIM k,m AS INTEGER Dat(1) = 12: Dat(2) = 15 Dat(3) = 17: Dat(4) = 15 Dat(5) = 14: Dat(6) = 12 Dat(7) = 10: Dat(8) = 13 Dat(9) = 14: Dat(10) = 15 m = 0 FOR k = 1 TO 10 IF Dat(k) > m THEN m = Dat(k) ENDIF NEXT k PRINT m
Dat = [12, 15, 17, 15, 14, 12, 10, 13, 14, 15] m = 0 for k in range (10): if Dat[k] > m: m = Dat[k] print (m)
- Рассмотрим алгоритм:
Затем обнуляется переменная m :
Результат: 17
В таблице Dat хранятся данные измерений среднесуточной температуры за 10 дней в градусах ( Dat[1] — данные за первый день, Dat[2] — за второй и т. д.).
Определите, какое число будет напечатано в результате работы следующей программы.
Текст программы приведён на нескольких языках программирования:
Var k, m: integer; Dat: array[1..10] of integer; Begin Dat[1] := 12; Dat[2] := 15; Dat[3] := 17; Dat[4] := 15; Dat[5] := 14; Dat[6] := 12; Dat[7] := 10; Dat[8] := 13; Dat[9] := 14; Dat[10] := 15; m := 0; for k := 1 to 10 do if Dat[k] > 12 then begin m := m + 1; end; writeln(m); End.
DIM Dat(10) AS INTEGER DIM k,m AS INTEGER Dat(1) = 12: Dat(2) = 15 Dat(3) = 17: Dat(4) = 15 Dat(5) = 14: Dat(6) = 12 Dat(7) = 10: Dat(8) = 13 Dat(9) = 14: Dat(10) = 15 m = 0 FOR k = 1 TO 10 IF Dat(k) > 12 THEN m = m + 1 ENDIF NEXT k PRINT m
Dat = [12, 15, 17, 15, 14, 12, 10, 13, 14, 15] m = 0 for k in range (10): if Dat[k] > 12: m = m + 1 print (m)
#include <iostream> using namespace std; int main() < int Dat[10] = <12, 15, 17, 15, 14, 12, 10, 13, 14, 15>; int m = 0; for (int k = 0; k < 10; k++) if (Dat[k] > 12) m = m + 1; cout << m; return 0; >
- Рассмотрим алгоритм:
Затем обнуляется переменная m :
Результат: 7
В таблице A представлены данные о количестве голосов, поданных за 10 исполнителей народных песен ( A[1] — количество голосов, поданных за первого исполнителя, A[2] — за второго и т. д.).
Определите, какое число будет напечатано в результате работы следующей программы.
Текст программы приведён на нескольких языках программирования:
var k, m: integer; A: array[1..10] of integer; Begin A[1] := 16; A[2] := 20; A[3] := 20; A[4] := 41; A[5] := 14; A[6] := 21; A[7] := 28; A[8] := 12; A[9] := 15; A[10] := 35; m := 1; for k := 1 to 10 do if A[k] > A[m] then begin m := k; end; writeln(m); End.
DIM A(10) AS INTEGER DIM k,m AS INTEGER A(1) = 16: A(2) = 20 A(3) = 20: A(4) = 41 A(5) = 14: A(6) = 21 A(7) = 28: A(8) = 12 A(9) = 15: A(10) = 35 m = 1 FOR k = 1 TO 10 IF A(k) > A(m) THEN m = k ENDIF NEXT k PRINT m
A= [16, 20, 20, 41, 14, 21, 28, 12, 15, 35] m = 1 for k in range (10): if A[k] > A[m]: m = k print (m)
#include <iostream> using namespace std; int main() < int A[10] = <16, 20, 20, 41, 14, 21, 28, 12, 15, 35>; int m = 1; for (int k = 0; k < 10; k++) if (A[k] > A[m]) m = k; cout << m; return 0; >
- Рассмотрим алгоритм:
Результат: 4
В таблице A представлены данные о количестве голосов, поданных за 10 исполнителей народных песен ( A[1] — количество голосов, поданных за первого исполнителя, A[2] — за второго и т. д.).
Определите, какое число будет напечатано в результате работы следующей программы.
Текст программы приведён на нескольких языках программирования:
var k, m: integer; A: array[1..10] of integer; Begin A[1] := 20; A[2] := 16; A[3] := 20; A[4] := 36; A[5] := 15; A[6] := 21; A[7] := 28; A[8] := 17; A[9] := 16; A[10] := 35; m := 1; for k := 1 to 10 do if A[k] >= A[m] then begin m := m + 1; end; writeln(m); End.
DIM A(10) AS INTEGER DIM k,m AS INTEGER A(1) = 20: A(2) = 16 A(3) = 20: A(4) = 36 A(5) = 15: A(6) = 21 A(7) = 28: A(8) = 17 A(9) = 16: A(10) = 35 m = 1 FOR k = 1 TO 10 IF A(k) >= A(m) THEN m = m + 1 ENDIF NEXT k PRINT m
A= [20, 16, 20, 36, 15, 21, 28, 17, 16, 35] m = 1 for k in range (10): if A[k] >= A[m]: m = m + 1 print (m)
#include <iostream> using namespace std; int main() < int A[10] = <20, 16, 20, 36, 15, 21, 28, 17, 16, 35>; int m = 1; for (int k = 0; k < 10; k++) if (A[k] >= A[m]) m = m + 1; cout << m; return 0; >
- Рассмотрим алгоритм:
Результат: 11
В таблице Dat хранятся данные о количестве сделанных заданий учениками ( Dat[1] — заданий сделал первый ученик, Dat[2] — второй и т.д.).
Определите, какое число будет напечатано в результате работы следующей программы.
Текст программы приведён на нескольких языках программирования:
var k, m, n: integer; Dat: array[1..10] of integer; Begin Dat[1] := 7; Dat[2] := 9; Dat[3] := 10; Dat[4] := 5; Dat[5] := 6; Dat[6] := 7; Dat[7] := 9; Dat[8] := 8; Dat[9] := 6; Dat[10] := 9; m := 10; n := 0; for k := 1 to 10 do if Dat[k] < m then begin m := Dat[k]; n := k; end; writeln(n); End.
DIM Dat(10) AS INTEGER DIM k, m, n AS INTEGER Dat(1) = 7: Dat(2) = 9 Dat(3) = 10: Dat(4) = 5 Dat(5) = 6: Dat(6) = 7 Dat(7) = 9: Dat(8) = 8 Dat(9) = 6: Dat(10) = 9 m = 10; n = 0 FOR k = 1 TO 10 IF Dat(k) < m THEN m = Dat(k) n = k ENDIF NEXT k PRINT n
Dat = [7, 9, 10, 5, 6, 7, 9, 8, 6, 9] m = 10 n = 0 for k in range(0,10): if Dat[k] < m: m = Dat[k] n = k + 1 print (n)
#include <iostream> using namespace std; int main() < int Dat[10] = <7, 9, 10, 5, 6, 7, 9, 8, 6, 9>; int m = 10; int n = 0; for (int k = 0; k < 10; k++) if (Dat[k] < m) < m = Dat[k]; n = k + 1; >cout << n; return 0; >
- Рассмотрим алгоритм:
Ответ: 4
В результате выполнения программы напечатано число 10.
Какое наибольшее значение может иметь переменная S после выполнения программы?
Текст программы приведён на нескольких языках программирования.
Var k, m, S, N: integer; Dat: array[1..100] of integer; Begin N:= 5; m := 0; S := 0; for k := 1 to N do readln(Dat[k]); for k := 1 to N do begin S := S + Dat[k]; if Dat[k]>m then begin m := Dat[k] end end; writeln(m) End.
DIM Dat(100) AS INTEGER DIM N AS INTEGER DIM k, m, S AS INTEGER N = 5 FOR k = 1 TO N INPUT Dat(k) NEXT k m = 0 S = 0 FOR k = 1 TO N S = S + Dat(k) IF Dat(k)>m THEN m = Dat(k) END IF NEXT k PRINT m
Определите какое число будет напечатано в результате работы следующей программы
Задания Д9 № 10
В таблице Dat хранятся данные измерений среднесуточной температуры за 10 дней в градусах (Dat[1] — данные за первый день, Dat[2] — за второй и т. д.). Определите, какое число будет напечатано в результате работы следующей программы. Текст программы приведён на пяти языках программирования.
DIM Dat(10) AS INTEGER
DIM k,m AS INTEGER
Dat(1) = 12: Dat(2) = 15
Dat(3) = 17: Dat(4) = 15
Dat(5) = 14: Dat(6) = 12
Dat(7) = 10: Dat(8) = 13
Dat(9) = 14: Dat(10) = 15
IF Dat(k) = 15 THEN
Dat = [12, 15, 17, 15, 14, 12, 10, 13, 14, 15]
for k in range (10):
Var k, m: integer;
Dat: array[1..10] of integer;
using namespace std;
Программа предназначена для подсчёта количества дней, в которых среднесуточная температура была равна 15 градусам. Проанализировав входные данные, приходим к выводу, что таких дней три.
Задания Д9 № 30
В таблице Dat хранятся данные измерений среднесуточной температуры за 10 дней в градусах (Dat[1] — данные за первый день, Dat[2] — за второй и т. д.). Определите, какое число будет напечатано в результате работы следующей программы. Текст программы приведён на пяти языках программирования.