Методические
материалы для проведения уроков информатики в 7-9 классах по теме «ЭЛЕМЕНТЫ
ИГРЫ В ПРЕПОДАВАНИИ ПРОГРАММИРОВАНИЯ»
Бадагиева Елена Зайнутдиновна, учитель информатики
высшей квалификационной категории МБОУ «Гимназия № 26», г. Набережные Челны,
Республика Татарстан
Информатика это достаточно молодой школьный предмет, он появился в
школе в 1985 году, и в настоящий момент его изучение является просто
необходимым. Мы живем в информационном обществе, где большая часть населения занята
хранением, обработкой и передачей информации. И компьютер помогает хранить,
обрабатывать и передавать большие объемы информации. В связи с этим
современному учителю информатики приходится непрерывно следить за развитием
средств вычислительной техники, за появлением новых программ, за непрерывно
меняющимися методами работы с ними.
Курс школьной информатики со временем изменялся, но неизменным в нем
остается раздел «Алгоритмизация и программирование», основной задачей которого
является развитие мышления. Если с изучением пользовательского курса у ребят не
возникает больших проблем, то при изучении программирования такие проблемы
есть. И часто ребята с нежеланием изучают этот раздел курса. Многие ученики
считают, что пользовательского курса информатики им вполне достаточно и, дойдя
до темы «программирование», даже не пытаются вникнуть в ее суть. Связано это
как со сложностью изучения программирования, так и с непониманием того,
насколько им это может пригодиться в жизни.
Для решения этой проблемы я стараюсь мотивировать ребят. Во-первых,
рассказываю о постоянно меняющемся рынке профессий связанных с программированием,
о их востребованности. Если в XX веке чаще всего человек
выбирал одну профессию, которой посвящалась вся жизнь, то в XXI веке в связи с увеличением продолжительности и ритма жизни человек при
желании успевает сделать несколько карьер. Я считаю, что до ребят необходимо
донести мысль о том, что возможно именно программирование пригодится им в
жизни. Ведь ученическая способность к самоанализу, самоопределению и
саморазвитию является ключевой. Во-вторых, использую для объяснения нового
материала мультимедиа технологии, интерактивную доску, что позволяет повысить
эффективность урока за счет визуализации учебного материала. В-третьих, использую
метод проектов,
Современные школьники большое количество времени проводят в социальных
сетях и играют. Я стараюсь использовать элементы игры при изучении
программирования. Ведь не так сложно предложить ученикам вместо скучных для них
программ на поиск минимума или максимума из набора чисел, вычисление суммы
ряда, обработку числовых массивов подобрать задачи с использованием элементов
какой либо игры. К примеру, при изучении темы «Условный оператор. Составные
условия» я подбираю задачи связанные с игрой в шахматы. В классе всегда есть
ребята, которые умеют играть в шахматы и знают, как ходит та или иная шахматная
фигура, они то и помогают мне при объяснении идеи задач. В школьном курсе
информатики мы изучаем язык программирования С++, но для более широкого
использования данного учебного материла программные коды я приведу на трех
языках программирования С++, Pascal и Python. На уроках в 7-8 классе мы решаем следующие задачи.
Пример
1 «Ладья»
Шахматная
ладья ходит по горизонтали или вертикали. Даны две различные клетки шахматной
доски, определите, может ли ладья попасть с первой клетки на вторую одним
ходом.
Формат
входных данных
Программа
получает на вход четыре числа от 1 до 8 каждое, задающие номер столбца и номер
строки сначала для первой клетки, потом для второй клетки.
Формат
выходных данных
Программа
должна вывести YES, если из первой клетки ходом ладьи можно попасть во вторую
или NO в противном случае.
Sample Input:
4
4
5
5
Sample Output:
NO
При обсуждении идеи решения задачи мы с ребятами рассматриваем
следующую таблицу, которая иллюстрирует ход ладьи
Таблица 1 Иллюстрация к задаче «Ладья»
11
|
21
|
31
|
41
|
51
|
61
|
71
|
81
|
12
|
22
|
32
|
42
|
52
|
62
|
72
|
82
|
13
|
23
|
33
|
43
|
53
|
63
|
73
|
83
|
14
|
24
|
34
|
44
|
54
|
64
|
74
|
84
|
15
|
25
|
35
|
45
|
55
|
65
|
75
|
85
|
16
|
26
|
36
|
46
|
56
|
66
|
76
|
86
|
17
|
27
|
37
|
47
|
57
|
67
|
77
|
87
|
18
|
28
|
38
|
48
|
58
|
68
|
78
|
88
|
|
11
|
21
|
31
|
41
|
51
|
61
|
71
|
81
|
12
|
22
|
32
|
42
|
52
|
62
|
72
|
82
|
13
|
23
|
33
|
43
|
53
|
63
|
73
|
83
|
14
|
24
|
34
|
44
|
54
|
64
|
74
|
84
|
15
|
25
|
35
|
45
|
55
|
65
|
75
|
85
|
16
|
26
|
36
|
46
|
56
|
66
|
76
|
86
|
17
|
27
|
37
|
47
|
57
|
67
|
77
|
87
|
18
|
28
|
38
|
48
|
58
|
68
|
78
|
88
|
|
Входные
данные
4
4
5
5
|
Входные
данные
3
2
7
2
|
Выходные
данные
NO
|
Выходные
данные
YES
|
Исходя из рисунка ребята формулируют условие:
Обозначим 4 числа переменными а, b, c, d соответственно.
Если а=с ИЛИ b=d, то ладья
попадает из клетки (а, b) в клетку (c,
d) и мы выводим YES, иначе выводим NO.
После
обсуждения алгоритма решения задачи ученики без особого труда пишут
программный
код к задаче
С++
|
Pascal
|
Python
|
#include
<iostream>
using
namespace std;
int
main()
{ int
a, b, c, d;
cin
>> a >> b >> c>>d;
if
(a == c || b == d)
cout<<"YES";
else
cout<<"NO";
return 0;
}
|
var
a, b, c, d: integer;
begin
readln
(a, b, c, d);
if
(a=c) or (b=d)
then
writeln ('YES')
else
writeln ('NO');
end.
|
a = int(input())
b = int(input())
c = int(input())
d = int(input())
if a == c or b ==
d:
print("YES")
else:
print("NO")
|
При
решении следующей задачи ребята уже самостоятельно строят графическую модель
задачи и формулируют условие.
Пример
2 «Король»
Шахматный
король ходит по горизонтали, вертикали и диагонали, но только на 1 клетку. Даны
две различные клетки шахматной доски, определите, может ли король попасть с
первой клетки на вторую одним ходом.
Формат
входных данных
Программа
получает на вход четыре числа от 1 до 8 каждое, задающие номер столбца и номер
строки сначала для первой клетки, потом для второй клетки.
Формат
выходных данных
Программа
должна вывести YES, если из первой клетки ходом короля можно попасть во вторую
или NO в противном случае.
Sample
Input:
4
4
5
5
Sample
Output:
YES
Таблица 2 Иллюстрация к задаче «Король»
11
|
21
|
31
|
41
|
51
|
61
|
71
|
81
|
12
|
22
|
32
|
42
|
52
|
62
|
72
|
82
|
13
|
23
|
33
|
43
|
53
|
63
|
73
|
83
|
14
|
24
|
34
|
44
|
54
|
64
|
74
|
84
|
15
|
25
|
35
|
45
|
55
|
65
|
75
|
85
|
16
|
26
|
36
|
46
|
56
|
66
|
76
|
86
|
17
|
27
|
37
|
47
|
57
|
67
|
77
|
87
|
18
|
28
|
38
|
48
|
58
|
68
|
78
|
88
|
|
11
|
21
|
31
|
41
|
51
|
61
|
71
|
81
|
12
|
22
|
32
|
42
|
52
|
62
|
72
|
82
|
13
|
23
|
33
|
43
|
53
|
63
|
73
|
83
|
14
|
24
|
34
|
44
|
54
|
64
|
74
|
84
|
15
|
25
|
35
|
45
|
55
|
65
|
75
|
85
|
16
|
26
|
36
|
46
|
56
|
66
|
76
|
86
|
17
|
27
|
37
|
47
|
57
|
67
|
77
|
87
|
18
|
28
|
38
|
48
|
58
|
68
|
78
|
88
|
|
Входные
данные
4
4
5
5
|
Входные
данные
3
2
7
3
|
Выходные
данные
YES
|
Выходные
данные
NO
|
Обозначим 4 числа переменными а, b, c, d соответственно.
Если | с – а |= 1 ИЛИ с – а = 0 И | d – b |=1 ИЛИ d – b = 0, то король
попадает из клетки (а, b) в клетку (c,
d) и мы выводим YES, иначе выводим NO.
С++
|
Pascal
|
Python
|
#include
<iostream>
#include
<cmath>
using
namespace std;
int
main()
{ int
a, b, c, d;
cin
>> a >> b >> c>>d;
if
((abs (c-a)==1 ||c-a== 0) && (abs (d-b)==1 ||d-b== 0 ))
cout<<"YES";
else
cout<<"NO";
return 0;
}
|
var
a, b, c, d: integer;
begin
readln
(a, b, c, d);
if
((abs(c-a)=1) or (c-a=0)) and ((abs (d-b)=1) or (d-b=0))
then
writeln ('YES')
else
writeln ('NO');
end.
|
a = int(input())
b = int(input())
c = int(input())
d = int(input())
if (abs(a - c)
== 1 or a - c == 0) and (abs(d - b) == 1 or d - b == 0):
print("YES")
else:
print("NO")
|
Пример
3 «Слон»
Шахматный
слон ходит по диагонали. Даны две различные клетки шахматной доски, определите,
может ли слон попасть с первой клетки на вторую одним ходом.
Формат
входных данных
Программа
получает на вход четыре числа от 1 до 8 каждое, задающие номер столбца и номер
строки сначала для первой клетки, потом для второй клетки.
Формат
выходных данных
Программа
должна вывести YES, если из первой клетки ходом слона можно попасть во вторую
или NO в противном случае.
Sample
Input:
4
4
5
5
Sample
Output:
YES
Таблица 3 Иллюстрация к задаче «Слон»
11
|
21
|
31
|
41
|
51
|
61
|
71
|
81
|
12
|
22
|
32
|
42
|
52
|
62
|
72
|
82
|
13
|
23
|
33
|
43
|
53
|
63
|
73
|
83
|
14
|
24
|
34
|
44
|
54
|
64
|
74
|
84
|
15
|
25
|
35
|
45
|
55
|
65
|
75
|
85
|
16
|
26
|
36
|
46
|
56
|
66
|
76
|
86
|
17
|
27
|
37
|
47
|
57
|
67
|
77
|
87
|
18
|
28
|
38
|
48
|
58
|
68
|
78
|
88
|
|
11
|
21
|
31
|
41
|
51
|
61
|
71
|
81
|
12
|
22
|
32
|
42
|
52
|
62
|
72
|
82
|
13
|
23
|
33
|
43
|
53
|
63
|
73
|
83
|
14
|
24
|
34
|
44
|
54
|
64
|
74
|
84
|
15
|
25
|
35
|
45
|
55
|
65
|
75
|
85
|
16
|
26
|
36
|
46
|
56
|
66
|
76
|
86
|
17
|
27
|
37
|
47
|
57
|
67
|
77
|
87
|
18
|
28
|
38
|
48
|
58
|
68
|
78
|
88
|
|
Входные
данные
4
4
5
5
|
Входные
данные
3
2
7
3
|
Выходные
данные
YES
|
Выходные
данные
NO
|
Обозначим 4 числа переменными а, b, c, d соответственно.
Если a + b = c + d ИЛИ a + d = b + c, то слон попадает
из клетки (а, b) в клетку (c, d) и мы выводим YES, иначе выводим NO.
С++
|
Pascal
|
Python
|
#include
<iostream>
using
namespace std;
int
main()
{ int
a, b, c, d;
cin
>> a >> b >> c>>d;
if
(a+b==c+d || a+d == b+c)
cout<<"YES";
else
cout<<"NO";
return 0;
}
|
var
a, b, c, d: integer;
begin
readln
(a, b, c, d);
if
(a+b=c+d) or (b+c=a+d)
then
writeln ('YES')
else
writeln ('NO');
end.
|
a = int(input())
b = int(input())
c = int(input())
d = int(input())
if a + b == c +
d or a + d == b + c:
print("YES")
else:
print("NO")
|
Пример
4 «Ферзь»
Шахматный
ферзь ходит по диагонали, горизонтали или вертикали. Даны две различные клетки
шахматной доски, определите, может ли ферзь попасть с первой клетки на вторую
одним ходом.
Формат
входных данных
Программа
получает на вход четыре числа от 1 до 8 каждое, задающие номер столбца и номер
строки сначала для первой клетки, потом для второй клетки.
Формат
выходных данных
Программа
должна вывести YES, если из первой клетки ходом ферзя можно попасть во вторую
или NO в противном случае.
Sample
Input 1:
4
4
5
5
Sample
Output 1:
YES
|
Sample
Input 2:
3
2
7
3
Sample
Output 2:
NO
|
Таблица 4 Иллюстрация к задаче «Ферзь»
11
|
21
|
31
|
41
|
51
|
61
|
71
|
81
|
12
|
22
|
32
|
42
|
52
|
62
|
72
|
82
|
13
|
23
|
33
|
43
|
53
|
63
|
73
|
83
|
14
|
24
|
34
|
44
|
54
|
64
|
74
|
84
|
15
|
25
|
35
|
45
|
55
|
65
|
75
|
85
|
16
|
26
|
36
|
46
|
56
|
66
|
76
|
86
|
17
|
27
|
37
|
47
|
57
|
67
|
77
|
87
|
18
|
28
|
38
|
48
|
58
|
68
|
78
|
88
|
|
11
|
21
|
31
|
41
|
51
|
61
|
71
|
81
|
12
|
22
|
32
|
42
|
52
|
62
|
72
|
82
|
13
|
23
|
33
|
43
|
53
|
63
|
73
|
83
|
14
|
24
|
34
|
44
|
54
|
64
|
74
|
84
|
15
|
25
|
35
|
45
|
55
|
65
|
75
|
85
|
16
|
26
|
36
|
46
|
56
|
66
|
76
|
86
|
17
|
27
|
37
|
47
|
57
|
67
|
77
|
87
|
18
|
28
|
38
|
48
|
58
|
68
|
78
|
88
|
|
Входные
данные
4
4
5
5
|
Входные
данные
3
2
7
3
|
Выходные
данные
YES
|
Выходные
данные
NO
|
Чаще
всего происходит следующая догадка, что ФЕРЗЬ = СЛОН + ЛАДЬЯ
Если (a + b = c + d ИЛИ a + d = b + c) ИЛИ (а = с ИЛИ b = d), то ферзь попадает из клетки (а, b) в клетку (c, d) и мы
выводим YES, иначе выводим NO.
С++
|
Pascal
|
Python
|
#include
<iostream>
using
namespace std;
int
main()
{ int
a, b, c, d;
cin
>> a >> b >> c>>d;
if
((a+b==c+d || a+d == b+c) || (a == c || b == d))
cout<<"YES";
else
cout<<"NO";
return 0;
}
|
var
a, b, c, d: integer;
begin
readln
(a, b, c, d);
if
(a+b=c+d) or (b+c=a+d) or (a=c) or (b=d)
then
writeln ('YES')
else
writeln ('NO');
end.
|
a = int(input())
b = int(input())
c = int(input())
d = int(input())
if (a + b == c +
d or a + d == b + c) or (a == c or b == d):
print("YES")
else:
print("NO")
|
Пример
5 «Конь»
Шахматный
конь ходит буквой “Г” — на две клетки по вертикали в любом направлении и на
одну клетку по горизонтали, или наоборот. Даны две различные клетки шахматной
доски, определите, может ли конь попасть с первой клетки на вторую одним ходом.
Формат
входных данных
Программа
получает на вход четыре числа от 1 до 8 каждое, задающие номер столбца и номер
строки сначала для первой клетки, потом для второй клетки.
Формат
выходных данных
Программа
должна вывести YES, если из первой клетки ходом коня можно попасть во вторую
или NO в противном случае.
Sample
Input 1:
4
4
5
5
Sample
Output 1:
NO
|
Sample
Input 2:
3
2
5
3
Sample
Output 2:
NO
|
Таблица 5 Иллюстрация к задаче «Конь»
11
|
21
|
31
|
41
|
51
|
61
|
71
|
81
|
12
|
22
|
32
|
42
|
52
|
62
|
72
|
82
|
13
|
23
|
33
|
43
|
53
|
63
|
73
|
83
|
14
|
24
|
34
|
44
|
54
|
64
|
74
|
84
|
15
|
25
|
35
|
45
|
55
|
65
|
75
|
85
|
16
|
26
|
36
|
46
|
56
|
66
|
76
|
86
|
17
|
27
|
37
|
47
|
57
|
67
|
77
|
87
|
18
|
28
|
38
|
48
|
58
|
68
|
78
|
88
|
|
11
|
21
|
31
|
41
|
51
|
61
|
71
|
81
|
12
|
22
|
32
|
42
|
52
|
62
|
72
|
82
|
13
|
23
|
33
|
43
|
53
|
63
|
73
|
83
|
14
|
24
|
34
|
44
|
54
|
64
|
74
|
84
|
15
|
25
|
35
|
45
|
55
|
65
|
75
|
85
|
16
|
26
|
36
|
46
|
56
|
66
|
76
|
86
|
17
|
27
|
37
|
47
|
57
|
67
|
77
|
87
|
18
|
28
|
38
|
48
|
58
|
68
|
78
|
88
|
|
|
Входные
данные
4
4
5
5
|
Входные
данные
3
2
5
3
|
|
Выходные
данные
NO
|
Выходные
данные
YES
|
|
С++
|
Pascal
|
Python
|
#include
<iostream>
using
namespace std;
int
main()
{ int
a, b, c, d;
cin
>> a >> b >> c>>d;
if
((a-c)*(a-c)+(b-d)*(b-d)==5)
cout<<"YES";
else
cout<<"NO";
return 0;
}
|
var
a, b, c, d: integer;
begin
readln
(a, b, c, d);
if
(a-c)*(a-c)+ (b-d)*(b-d)=5
then
writeln ('YES')
else
writeln ('NO');
end.
|
a = int(input())
b = int(input())
c = int(input())
d = int(input())
if (a - c) * (a
- c) + (b - d) * (b - d) == 5:
print("YES")
else:
print("NO")
|
|
|
|
|
|
Все выше представленные задачи могут быть
предложены ребятам для решения при изучении темы «Двумерные массивы».
Обучение школьников алгоритмизации и
программированию с методической точки зрения является одной из самых сложных
задач. Составление программ – это сложный процесс, требующий от ученика
мыслительных усилий, усидчивости. Учащиеся имеют различную степень подготовки,
разную мотивацию, те у кого хорошие знания по математике справляется с темой
«Алгоритмизация и программирование» легко. Но и тем ученикам, кому точные науки
даются с трудом необходимо дать шанс и помочь разобраться. Выше представленные
задачи помогают это сделать, ведь такую задачу легко протестировать, подобрать
входные данные самостоятельно и тем самым исправить ошибки в программе или не
допустить их. В дальнейшем интересующиеся ребята смогут создать проект
«Программирование игры в шахматы».
При этом формирование алгоритмического
мышления и умения программировать у учащихся способствует достижению высоких
результатов в олимпиадах и турнирах по программированию различных уровней. Ведь
для успешного участия в олимпиаде по программированию школьник должен не только
владеть языком программирования, но и уметь придумывать и реализовывать
алгоритмы решения задач, оценивать время их работы, тестировать и отлаживать
свои программы.
Оставьте свой комментарий
Авторизуйтесь, чтобы задавать вопросы.