Решаем задачи на начальном этапе изучения программирования

Автор: Лебо Александра Ивановна

Организация: ГБОУ города Москвы «Школа № 626 имени Н.И. Сац».

Населенный пункт: г. Москва

На начальном этапе изучения программирования в 5-8 классах можно заинтересовать учеников задачами -играми.

Решим 4 математические задачи-игры на нескольких языках ИЗ МАТЕМАТИЧЕСКОЙ СМЕКАЛКИ Б.А.КОРДЕМСКОГО.

Теоретический материал изложен в учебнике ИНФОРМАТИКА 8 класс автора Л.Л.Босовой в главах:

Глава 3. Основы алгоритмизации.

Глава 4. Начала программирования на языке Паскаль .

Глава 5. Начала программирования на языке Python.

№1. Кто первым скажет «СТО»

«Играют двое. Первый участник игры называет произвольное целое число, не превышающее десяти, то есть он может назвать 10 и всякое меньшее число (ноль называть нельзя). Второй игрок прибавляет к названному числу свое целое число, также не превосходящее десяти, и сообщает сумму. К этой сумме первый прибавляет какое-либо целое число, опять-таки не превосходящее десяти, и сообщает новую сумму. К новой сумме второй прибавляет число, не большее десяти, и т.д. до тех пор, пока окончательной суммой окажется 100.

Первый может назвать, например 7, второй 5 (сумма 12), первый 10 (сумма 22) и т.д.

Выигрывает тот, кто первый достигнет ста.

Как добиться победы?

После того, как найдете ключ к победе, обдумайте план ведения игры в других условиях, например с предельным слагаемым, равным не десяти, а какому -нибудь другому числу, с предельной суммой , равной не 100, а иному наперед назначенному числу.»

КУМИР:

алг Задача 290 Кордемского
| вводим положительное число больше нуля и не более 10, играем до 100
нач
. цел а, в, сумма
. сумма:=0
. нц пока сумма <100
. . вывод "первый игрок вводит число больше нуля и не более 10 "
. . ввод а
. . если а>10 и а<1 то
. . . . вывод "ВНИМАТЕЛЬНЕЕ!!! первый игрок вводит положительное число не более 10 "
. . . . ввод а
. . все
. . сумма:=сумма+а
. . вывод "СУММА=", сумма,нс
. . если сумма>100 то
. . . . вывод "ПЕРВЫЙ ИГРОК ВЫИГРАЛ", нс
. . . иначе
. . . . вывод "второй игрок вводит положительное число не более 10"
. . . . ввод в
. . . . если в>10 и в<1 то
. . . . . . вывод "ВНИМАТЕЛЬНЕЕ!!! второй игрок вводит положительное число не более 10"
. . . . . . ввод в
. . . . все
. . . . сумма:=сумма+в
. . . . вывод "СУММА=", сумма,нс
. . . . если сумма>100 то
. . . . . . вывод "ВТОРОЙ ИГРОК ВЫИГРАЛ", нс
. . . . все
. . все
. кц
кон

 

ВЫПОЛНЕНИЕ ПРОГРАММЫ:

первый игрок вводит число не более 10 12

ВНИМАТЕЛЬНЕЕ!!! первый игрок вводит положительное число не более 10 9

СУММА=9

второй игрок вводит положительное число не более 10 7

СУММА=16

первый игрок вводит положительное число не более 10 9

СУММА=25

второй игрок вводит число не более 10 34

ВНИМАТЕЛЬНЕЕ!!! второй игрок вводит положительное число не более 10 8

СУММА=33

первый игрок вводит положительное число не более 10 9

СУММА=42

второй игрок вводит положительное число не более 10 9

СУММА=51

первый игрок вводит положительное число не более 10 9

СУММА=60

второй игрок вводит положительное число не более 10 9

СУММА=69

первый игрок вводит положительное число не более 10 9

СУММА=78

второй игрок вводит положительное число не более 10 9

СУММА=87

первый игрок вводит положительное число не более 10 9

СУММА=96

второй игрок вводит положительное число не более 10 8

СУММА=104

ВТОРОЙ ИГРОК ВЫИГРАЛ

ПАСКАЛЬ

var

summa,a,b:integer;

begin

summa:= 0;

while summa <100 do begin

write('первый игрок вводит положительное число больше нуля и не более 10 ');

readln(a);

if a>10 and а<1 then begin

writeln('ВНИМАТЕЛЬНЕЕ!!! первый игрок вводит положительное число не более 10');

readln(a);

end;

summa := summa + a;

writeln('сумма=',summa);

if summa>100 then

writeln('ПЕРВЫЙ ИГРОК ВЫИГРАЛ')

else begin

writeln('второй игрок вводит положительное число больше нуля и не более 10 ');

readln(b);

if b>10 and b<1 then begin

writeln('ВНИМАТЕЛЬНЕЕ!!! второй игрок вводит положительное число не более 10');

readln(a);

summa := summa + b;

writeln('сумма=',summa);

end;

end;

if summa>100 then

writeln('ВТОРОЙ ИГРОК ВЫИГРАЛ');

end;

end.

 

ПИТОН

summa = 0

while summa <100:

a = int(input('первый игрок вводит положительное число не более 10 '))

if a>10 and a<1:

a=int(input(‘ВНИМАТЕЛЬНЕЕ!!! первый игрок вводит положительное число не более 10’))

summa += a

print('сумма=',summa)

if summa>100:

print("ПЕРВЫЙ ИГРОК ВЫИГРАЛ")

else:

b = int(input('второй игрок вводит положительное число не более 10 '))

if b>10 and b<1:

a=int(input(‘ВНИМАТЕЛЬНЕЕ!!! второй игрок вводит положительное число не более 10’))

 

summa += b

print('сумма=',summa)

if summa>100:

print("ВТОРОЙ ИГРОК ВЫИГРАЛ")

 

№2. Побеждает чет

«Из 27 спичек, лежащих на столе, двое играющих поочередно отнимают не менее одной и не более четырех спичек. Выигравшем считается тот, у кого по окончании игры окажется четное количество спичек».

КУМИР

алг Задача 285 Кордемского

| из 27 спичек отнимаем от 1 до 4. У кого окажется четное количество? Можно взять любое нечетное количество спичек, например 17.

нач

. цел а, в, сумма, с1, с2

. сумма:=17

. с1:=0

. с2:=0

. нц пока сумма > 0

. . вывод "первый игрок отнимает от 1 до 4, но не более оставшейся суммы "

. . ввод а

. . если а>сумма

. . . то

. . . . вывод "ВНИМАТЕЛЬНЕЕ!!! первый игрок отнимает от 1 до 4, но не более оставшейся суммы "

. . . . ввод а

. . все

. . если а<1

. . . то

. . . . вывод "ВНИМАТЕЛЬНЕЕ!!! первый игрок отнимает от 1 до 4, но не более оставшейся суммы "

. . . . ввод а

. . все

. . если а>4

. . . то

. . . . вывод "ВНИМАТЕЛЬНЕЕ!!! первый игрок отнимает от 1 до 4, но не более оставшейся суммы "

. . . . ввод а

. . все

. . с1:=с1+а

. . сумма:=сумма-а

. . вывод "у первого игрока ", с1,нс

. . вывод " Осталось ", сумма,нс

. . если сумма>0 то

. . . . вывод "второй игрок отнимает от 1 до 4, но не более оставшейся суммы "

. . . . ввод в

. . . . если в>сумма то

. . . . . . вывод "ВНИМАТЕЛЬНЕЕ!!! второй игрок отнимает от 1 до 4, но не более оставшейся суммы "

. . . . . . ввод в

. . . . все

. . . . если в<1

. . . . . то

. . . . . . вывод "ВНИМАТЕЛЬНЕЕ!!! второй игрок отнимает от 1 до 4, но не более оставшейся суммы "

. . . . . . ввод в

. . . . все

. . . . если в>4

. . . . . то

. . . . . . вывод "ВНИМАТЕЛЬНЕЕ!!! второй игрок отнимает от 1 до 4, но не более оставшейся суммы "

. . . . . . ввод а

. . . . все

. . . . с2:=с2+в

. . . . сумма:=сумма-в

. . . . вывод "у второго игрока ", с2,нс

. . . . вывод " Осталось ", сумма, нс

. . все

. кц
. вывод "у первого игрока ", с1,нс

. вывод "у второго игрока ",с2,нс

. если mod(с1,2)=0

. . то

. . . вывод "ПЕРВЫЙ ИГРОК ВЫИГРАЛ", нс

. . иначе
. . . вывод "ВТОРОЙ ИГРОК ВЫИГРАЛ", нс

. все

кон



ВЫПОЛНЕНИЕ ПРОГРАММЫ:

первый игрок отнимает от 1 до 4, но не более оставшейся суммы -7

ВНИМАТЕЛЬНЕЕ!!! первый игрок отнимает от 1 до 4, но не более оставшейся суммы 8

ВНИМАТЕЛЬНЕЕ!!! первый игрок отнимает от 1 до 4, но не более оставшейся суммы 4

у первого игрока 4

Осталось 13

второй игрок отнимает от 1 до 4, но не более оставшейся суммы 4

у второго игрока 4

Осталось 9

первый игрок отнимает от 1 до 4, но не более оставшейся суммы 4

у первого игрока 8

Осталось 5

второй игрок отнимает от 1 до 4, но не более оставшейся суммы 4

у второго игрока 8

Осталось 1

первый игрок отнимает от 1 до 4, но не более оставшейся суммы 4

ВНИМАТЕЛЬНЕЕ!!! первый игрок отнимает от 1 до 4, но не более оставшейся суммы 1

у первого игрока 9

Осталось 0

у первого игрока 9

у второго игрока 8

ВТОРОЙ ИГРОК ВЫИГРАЛ

ПАСКАЛЬ

var

a, b, summa, c1, c2:integer;

begin

summa:=17;

c1:=0;

c2:=0;

while summa > 0 do begin

writeln('первый игрок отнимает от 1 до 4, но не более оставшейся суммы');

readln(a);

if a>summa then begin

writeln('ВНИМАТЕЛЬНЕЕ!!! первый игрок отнимает от 1 до 4, но не более оставшейся суммы ');

readln(a);

end;

if a<1 then begin

writeln ('ВНИМАТЕЛЬНЕЕ!!! первый игрок отнимает от 1 до 4, но не более оставшейся суммы ');

readln(a);

end;

if a>4 then begin

writeln('ВНИМАТЕЛЬНЕЕ!!! первый игрок отнимает от 1 до 4, но не более оставшейся суммы');

readln(a);

end;

c1:=c1+a;

summa:=summa-a;

writeln('у первого игрока ', c1);

writeln(' Осталось ", summa');

if summa>0 then begin

writeln('второй игрок отнимает от 1 до 4, но не более оставшейся суммы ');

readln(b);

if b>summa then begin

writeln('ВНИМАТЕЛЬНЕЕ!!! второй игрок отнимает от 1 до 4, но не более оставшейся суммы ');

readln(b);

end;

if b<1 then begin

writeln('ВНИМАТЕЛЬНЕЕ!!! второй игрок отнимает от 1 до 4, но не более оставшейся суммы ');

readln(b);

end;

if b>4 then begin

writeln('ВНИМАТЕЛЬНЕЕ!!! второй игрок отнимает от 1 до 4, но не более оставшейся суммы ');

readln(b);

end;

c2:=c2+b;

summa:=summa-b;

writeln('у второго игрока ', c2);

writeln(' Осталось ', summa);

end;

end;

writeln('у первого игрока ', c1);

writeln('у второго игрока ',c2);

if (c1 mod 2) = 0 then

writeln('ПЕРВЫЙ ИГРОК ВЫИГРАЛ')

else writeln('ВТОРОЙ ИГРОК ВЫИГРАЛ');

end.

 

 

ПИТОН

summa=17

c1=0

c2=0

while summa > 0:

a = int(input('первый игрок отнимает от 1 до 4, но не более оставшейся суммы'))

if a>summa:

a = int(input('ВНИМАТЕЛЬНЕЕ!!! первый игрок отнимает от 1 до 4, но не более оставшейся суммы '))

if a<1:

a = int(input('ВНИМАТЕЛЬНЕЕ!!! первый игрок отнимает от 1 до 4, но не более оставшейся суммы '))

if a>4:

a = int(input('ВНИМАТЕЛЬНЕЕ!!! первый игрок отнимает от 1 до 4, но не более оставшейся суммы'))

c1=c1+a

summa=summa-a

print('у первого игрока ', c1)

print(' Осталось ", summa')

if summa>0:

b = int(input('второй игрок отнимает от 1 до 4, но не более оставшейся суммы '))

if b>summa:

b = int(input('ВНИМАТЕЛЬНЕЕ!!! второй игрок отнимает от 1 до 4, но не более оставшейся суммы '))

if b<1:

b = int(input('ВНИМАТЕЛЬНЕЕ!!! второй игрок отнимает от 1 до 4, но не более оставшейся суммы '))

if b>4:

b = int(input('ВНИМАТЕЛЬНЕЕ!!! второй игрок отнимает от 1 до 4, но не более оставшейся суммы '))

c2=c2+b

summa=summa-b

print('у второго игрока ', c2)

print(' Осталось ', summa)

print('у первого игрока ', c1)

print('у второго игрока ',c2)

if c1% 2 == 0:

print('ПЕРВЫЙ ИГРОК ВЫИГРАЛ')

else:

print('ВТОРОЙ ИГРОК ВЫИГРАЛ')

 

 

№3. Сколько вам лет?

«-Сколько вам лет?

-Не хотите сказать? Ну, хорошо, скажите мне только сколько получится, если от числа, в 10 раз большего, чем число ваших лет, вычесть произведение какого-нибудь однозначного числа на 9. Благодарю вас, теперь я знаю, сколько вам лет.

СПОСОБ ОТГАДЫВАНИЯ. Отделить от объявленного результата число единиц и сложить его с оставшимся числом.

ПРИМЕР. От числа 170, которое в 10 раз больше числа лет, отняли, скажем, 27. После этого объявили результат: 143.

Определяем возраст: 14+3=17 лет.

Легко и эффектно!»

 

КУМИР:

алг Задача 303 Кордемского
| сколько вам лет. умножьте ваше число на 10 и
|отнимите от него двузначное число, полученное
|произведением любого однозначного числа на 9
нач
. цел а,лет
. вывод " ВВЕДИТЕ ваш результат "
. ввод а
. лет:=mod(а,10)+div(а,10)
. вывод "ВАМ ", лет, " лет"
кон

ВЫПОЛНЕНИЕ ПРОГРАММЫ:

 

Объявите ваш результат 205

ВАМ 25 лет

ПИТОН

a = int(input( " ВВЕДИТЕ ваш результат "))

let = a % 10 + a // 10

print("ВАМ ", let, " лет")

 

№4. Загадочное число

«В одной из египетских пирамид ученые обнаружили на каменной плите гробницы выгравированное иероглифами число 2520. Трудно точно сказать, за что выпала такая честь на долю этого числа. Может быть за то, что оно без остатка делится на все без исключения целые числа от 1 до 10. Действительно, нет числа, меньшего чем 2520, обладающего указанным свойством. Нетрудно убедиться в том, что это число является наименьшим общим кратным целых чисел первого десятка.»

Докажем это утверждение, деля все числа от 1 до 2520 на числа первого десятка.

КУМИР

алг Задача 305 Кордемского

| Число 2520 без остатка делится на все без исключения целые числа от 1 до 10.

|Это число является наименьшим общим кратным целых чисел первого десятка.

|Докажем это утверждение, деля все числа от 1 до 2520 на числа первого десятка

нач

. цел т,д ,к

. | т- переменная цикла, перебор от 1 до 2520

. | к-подсчет чисел, являющимися кратным целых чисел первого десятка

. | д- переменная цикла, перебор от 1 до 10

. к:=0

. нц для т от 1 до 2520

. . нц для д от 1 до 10

. . . если mod(т,д)=0

. . . . то к:=к+1

. . . все

. . . если к=10 то

. . . . . вывод "Число ", т, " кратное для всех целых чисел первого десятка"

. . . все

. . кц

. . к:=0

. кц

кон

ВЫПОЛНЕНИЕ ПРОГРАММЫ:

Число 2520 кратное для всех целых чисел первого десятка

ПИТОН

k = 0;

for t in range(1,2521):

for d in range(1,11):

if t%d == 0:

k +=1

if k == 10:

print("Число ", t, " кратное для всех целых чисел первого десятка")

k=0

 

Рекомендуемая литература по поиску задач и изучению языков

  1. Абрамов С.А., Зима Е.В. Начала информатики, М, Наука, 1989 г.
  2. Босова Л.Л. Информатика 8 класс, М, Просвещение, 2023 г.
  3. Босова Л.Л., ШтепаЮ.Л., Кочергин И.О. , Аквилянов Н.А. Начала программирования на языке Python. Дополнительные главы к учебникам М, Просвещение, 2023 г.
  4. Житкова О.А., Кудрявцева Е.К. Бейсик и Паскаль от простого к сложному, Издательство Н Бочкаревой, Калуга, 1998 г.
  5. Житкова О.А., Кудрявцева Е.К. Тематический контроль по информатике, Справочные материалы по программированию на языке Паскаль, М, интеллект-центр, 2001г.
  6. Б.А.Кордемский Математическая смекалка, М, ГИТЛ,1957 г.
Опубликовано: 27.02.2025