Программирование анализа чисел

IX Международный конкурс научно-исследовательских и творческих работ учащихся
Старт в науке

Программирование анализа чисел

Гаршина Д.А. 1
1МБОУ «СОШ №17», г. Старый Оскол
Кушнерева Г.Ю. 1Покидова Н.Н. 2
1МБОУ «СОШ №17», г. Старый Оскол
2МБОУ «СОШ № 17»
Автор работы награжден дипломом победителя III степени
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF

Введение

Еще в конце прошлого учебного года я твердо решила связать свои будущие профессиональные интересы с математикой и информатикой. Поэтому выбор соответствующих профилей для продолжения обучения в старшей школе явился предсказуемым.

Обучение информатики и математики в 10 классе на профильном уровне предусматривает изучение многих теоретических аксиом и теорем. За первую четверть этого учебного года на уроках математики мы повторили и углубились в такие темы, как множество чисел, понятие действительного числа, целочисленная арифметика. А на уроках информатики мы рассмотрели значение чисел в различных системах счисления, а также выполняли арифметические действия с числами в этих системах.

Ознакомившись с понятиями числа, действиями над числами на уроках математики и одновременно научившись на уроках информатики приемам программирования теории чисел, у меня возникла идея: а что, если связать полученные мною знания и использовать их в практической деятельности?

Значение числа в нашем понимании связано с его использованием в конкретной области его применения: при счете, при решении задач и уравнений. Числа используются во всех науках и несут различную смысловую нагрузку. Числа используются и в научно-исследовательской деятельности, и в сфере развлечений.

Рассматривая число с математической точки зрения, можно многое о нем рассказать. Но нагляднее было бы показать в программном продукте суть числа, раскрыть не всем доступные методы и приемы работы с числами, реализовать возможности игровых технологий в числах.

Цель исследовательской работы – объединить и систематизировать полученные знания и умения на уроках математики и информатики в одном программном продукте.

Задачи исследовательской работы:

Изучение литературных источников по теме исследования.

Создание программного продукта, ориентированного на наглядное представление числа.

Для реализации поставленных задач мною использованы учебник по информатике (автор Семакин И.Г., 10 класс). Кроме того, для реализации принципов программирования мною изучены некоторые интернет-ресурсы, в частности, приемы обработки линейного массива чисел, прием нахождения делителей числа.

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

В Европе до XVII века рассматривались отдельные задачи теоретико-числовой направленности. Исследованы числа Фибоначчи (1202 год).

Теория чисел вплоть до XX века считалась чистой наукой, не имеющей практического применения. Такой ее называл, в частности, английский математик Харди. Начиная со второй половины XX века появились криптографические протоколы, использующие вычислительную трудность решения задачи разложения больших чисел на простые.

Конечно, использовать в программе все известные методы теории чисел я пока не могу. Однако, совместить некоторые методы математики в программировании путем реализации общепринятых основ алгоритмизации, систематизировать имеющиеся у меня знания в программе я попытаюсь.

Теоретическая часть исследования

Из материалов Википедии [2], число - основное понятие математики, используемое для количественной характеристики, сравнения, нумерации объектов и их частей. Письменными знаками для обозначения чисел служат цифры, а также символы математических операций. Возникнув ещё в первобытном обществе из потребностей счёта, понятие числа с развитием науки значительно расширилось.

В исследованиях по теории чисел, наряду с алгебраическими методами, применяются геометрические и аналитические методы, а также методы теории вероятностей.

О чем говорит значение числа в математике? Является ли оно натуральным, рациональным, действительным? Чем интересно это число?

Мною использованы некоторые методы анализа числа. Допустим, введено число а. Важно, является ли оно положительным или отрицательным.

Если число лежит правее числа 0 на числовой оси, число является положительным. Однако положительные числа могут быть целыми (отсутствует дробная часть числа) или дробными, или как в информатике говорят, вещественными. В своей программе я буду работать только с целыми числами, что определяется особенностями их анализа в программировании.

Целое положительное число является натуральным. Натуральные - это числа, которые используются при счете: 1, 2, 3... и т.д. Ноль не является натуральным. Натуральные числа принято обозначать символом N.

Два числа отличающиеся друг от друга только знаком, называются противоположными, например, +1 и -1, +5 и -5. Знак "+" обычно не пишут, но предполагают, что перед числом стоит "+". Такие числа называются положительными. Числа, перед которыми стоит знак "-", называются отрицательными [3].

Натуральные числа, противоположные им и ноль называют целыми числами. Множество целых чисел обозначают символом Z.

Рациональные и иррациональные числа – это дроби, в своей программе дробные числа я не рассматриваю.

Натуральное число n называется простым числом, если оно не имеет других делителей, кроме единицы и самого этого числа. Существуют таблицы простых чисел. Вот первые их них: 1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29,…

Натуральное число n называется составным числом, если его можно представить в виде произведения двух множителей, каждый из которых больше единицы.

Самым маленьким составным числом является число  .  В школьном курсе математики предлагается следующий алгоритм разложения числа на простые множители:

Шаг.1. Записать данное число. Справа от него провести вертикальную линию.

Шаг 2. Найти наименьший, отличный от единицы простой делитель b  числа и записать его справа от заданного числа. Записать под заданным числом частное c от деления на b.

Шаг 3. Если c=1, то получено разложение на простые множители. Если  , перейти к шагу 2.

Пример. Разложить число 660 на простые множители.

Получим  , так как последовательно имеем:              

В программирования для определения, является ли число простым, используется Решето Эратосфена. Принцип работы данного алгоритма в следующем. Рассматриваются все возможные делители числа а, отличные от 1 в интервале от 2 до половины а. Если среди таких чисел найдется такое i, на которое число a делится нацело – число простым не является (приложение 1).

for i:=2 to abs(x) div 2 do

if abs(x) mod i =0 then f:=false;

if f=true then writeln ('Число является простым')

Само по себе число может иметь видимые особенности. Так, если это число читается одинаково слева направо и наоборот – то оно является палиндромом.

В программировании для данного анализа используется сравнение цифр этот числа. Если число двузначное – то одинаковое значение 1 и 2 цифр дадут палиндром, а если трехзначное – то одинаковыми должны быть 1 и 3 цифры числа. Для отделения цифр от числа используются в программировании функции целочисленного деления div и mod.

Интересен в информатике раздел, изучающий числа в различных системах счисления. В 9 классе мы работали с числами в двоичной системе счисления. В 10 классе мы научились перемножать и складывать числа в системах счисления с основанием, меньшим либо равным 16 [1]. Однако в программе я рассматриваю системы счисления с основанием, меньшим 10 по причине того, что цифры в системах с основанием больше 10 становятся буквами, и в программировании данный момент сложно реализовать.

Выполнение арифметических вычислений в позиционных системах счисления производится по общим правилам. В их основе лежат таблицы сложения и умножения одноразрядных чисел.

Для реализации алгоритма вывода на экран таблицы умножения чисел в позиционных системах счисления, я воспользовалась материалами учебника Семакина И.Г. Допустим, необходимо в Р-ичной системе счисления перемножить числа I и J. Структура алгоритма – два вложенных цикла: внешний – по переменной I и внутренний – по переменной J [1]. Произведением является число, образованное суммой первой цифры числа, умноженной на 10 и второй цифры. Они, в свою очередь, образуются путем вычисления целой части от деления (I*J) на Р, т.е. на основание системы счисления и путем вычисления остатка от деления (I*J) на Р (приложение 1).

x:=(i*j div p)*10+(i*j) mod p;

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

Игроку предлагается запомнить такое количество чисел, которое он сам пожелает. Числа светятся на экране 5 секунд, затем исчезают. Данный момент запрограммирован как формирование случайным образом числового массива.

Далее игрок должен воспроизвести запомненные им числа, но наоборот: назвать последнее число, затем предпоследнее и т.д.

Вводимые «на память» запомненные числа записываю в другой массив и сравниваю его значения с первоначальным массивом. Если их значения совпадают – вывожу соответствующее утверждение на экран (приложение 1).

for i:=1 to n do

if a[i]=b[i] then writeln (i,' Числоугадановерно')

else writeln (i,' Число не угадано');

Все три варианта практической работы с числами я собрала в процедуру Меню, выход из которой осуществляется командой exit.

Реализация алгоритма произведена в системе программирования PascalABC, адаптированного для операционных систем Windows и Linux. Для работы программы достаточно компьютера или ноутбука с минимальными системными требованиями.

Практическая часть исследования

Программа разработана в среде программирования Pascal ABC, свободно распространяемой.

В программе использованы приемы организации процедур, все виды ветвлений, циклический алгоритм, использованы числовые массивы.

Описание входных и выходных данных представлено в таблице 1.

Таблица 1.

Входные и выходные данные

Пункт меню

Входные данные

Выходные данные

Анализ числа (процедура analiz)

А – введенное пользователем целое число в диапазоне

[-1000;1000]

1. Информация о числе – является ли оно положительным или отрицательным.

2. Информация о разрядности числа.

3. Информация о возможности вычисления из числа квадратного корня.

4. Информация, является ли число четным.

5. Информация, является ли число простым, и если число составное – выводятся все делители этого числа, за исключением 1 и самого числа.

6. Информация, является ли введенное число палиндромом.

Шпаргалка (процедура spargalka)

Р – основание системы счисления

Таблица умножения в Р-ичной системе счисления.

Игра на тренировку памяти (процедура igra)

N – количество чисел для запоминания,

A[N] – массив чисел в промежутке от [-100;100]

Информация о совпадении запомненного игроком числе с эталонным вариантом.

Листинг программного кода представлен в приложении 1.

Графический алгоритм реализации программного кода некоторых процедур представлен на схеме 1.

Схема 1. Блок-схемы процедур

Блок-схема основной программы

Блок-схема процедуры MENU

   

Блок-схема процедуры IGRA

 
 

Заключение

Роль чисел в нашей жизни огромна. Каждый из нас одно и то же число в различных жизненных ситуациях воспринимает по-разному.

«Сухость» науки математики позволяет сделать анализ числа, который будет интересен только при решении математических задач. Однако, если подойти к понятию числа с точки зрения программирования – то можно процесс изучения числа сделать наглядным и интересным.

Разработанную мною программу можно использовать и в качестве справочного материала, и в качестве пособия при выполнении арифметических операций в позиционных системах счисления, а также как тренировочный материал для развития зрительной памяти.

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

Список использованных источников и литературы

Семакин И.Г. Информатика и ИКТ. Учебник профильный уровень, 10 класс.

http://cyclowiki.org/wiki

https://ru.wikipedia.org/wiki

Приложение 1.

Листинг программы

uses crt;

var a:byte;

label 1;

procedure menu;

begin

clrscr;

gotoxy (10,8); textcolor(4); write('1. '); gotoxy (14,8); textcolor(3); write('Анализчисла');

gotoxy (10,10); textcolor(4); write('2. '); gotoxy (14,10);textcolor(3); write('Шпаргалка (арифметикавсистемесчислениясоснованиемР)');

gotoxy (10,12); textcolor(4); write('3. '); gotoxy (14,12);textcolor(3); write('Игранатренировкупамяти');

gotoxy (10,14); textcolor(4); write('4. '); gotoxy (14,14);textcolor(3); write('Выход');

gotoxy (10,17); textcolor(4); write('Введитепунктаменю... ');

read(a);

clrscr; {очистка экрана после вывода меню}

textcolor(0); {возврат к черному цвету текста}

end;

procedure spargalka;

var X,Y,Z,p:integer;

begin

write('Введите p (2<p<=10):');readln (p);

writeln;

writeln(P,'-ичнаятаблицаумножения');

for X:=1 to p-1 do

begin

for Y:=1 to p-1 do

begin

Z:=(X*Y div p)*10 + (X*Y) mod p;

write(Z:3)

end;

writeln

end;

writeln;

writeln ('Для выхода в меню нажмите Enter');

readln

end;

procedure analis;

var k,i:integer;

F:boolean;

begin

write('Введите любое число от -1000 до 1000...');

read(k);

if k=0 then writeln('Ноль не анализируется');

if k>0 then writeln('Положительное. Является натуральным') else if k<0 then writeln('Отрицательное');

if (abs(k)>0) and (abs(k)<10) then writeln('Числооднозначное');

if (abs(k)>10) and (abs(k)<100) then writeln('Числодвухзначное');

if (abs(k)>100) and (abs(k)<1000) then writeln('Числотрёхзначное');

if k>0 then

for i:=2 to 35 do

if i*i=k then writeln('Квадратныйкореньизчисла ',k,'=',i);

F:=true;

for i:=2 to k div 2 do

if k mod i=0 then F:=false;

if F=false then writeln('Числосоставное. Его делители: ') else if k<>0 then writeln('Число простое');

if F=false then

for i:=2 to k div 2 do

if k mod i=0 then write(i:4);writeln;

if (k div 10)=(k mod 10) thenif k<>0 then writeln('Палиндром');

if (k div 100)=(k mod 10) thenif k<>0 then writeln('Палиндром');

writeln;

writeln ('Для выхода в меню нажмите Enter');

readln

end;

procedure igra;

var B,A:array[1..50]of integer;

i,n:integer;

begin

write('Сколько чисел вы хотите запомнить?');

read(n);

writeln;

For i:=1 to n do

begin

A[i]:=Random(99+99)-99;

write (A[i]:4);

end;

writeln;

writeln;

writeln('У вас есть 5 секунд, чтобы запомнить числа');

delay(5000);

clrscr;

writeln('Назовите числа в обратном порядке');

For i:=n downto 1 do read(B[i]);

For i:=1 to n do

if A[i]=B[i] then writeln(i,' числоугадано') else writeln(i,' неверноечисло');

writeln;

writeln ('Для выхода в меню нажмите Enter');

readln

end;

begin

1:menu;

if (a<1) or (a>4) then

begin

clrscr;

gotoxy (10,8); write ('Выошиблись, такогопунктаменюнет.');

gotoxy (10,10); write ('Нажмите ENTER и попробуйте еще раз...');

readln;

clrscr;

menu;

end

else

case a of

1:begin analis;goto 1;end;

2:begin spargalka;goto 1;end;

3:begin igra;goto 1;end;

4:exit;

end;

end.

Просмотров работы: 253