ЕГЭ по информатике — “головная боль”
школы
Согласно Федеральному базисному
учебному плану от 2004 года, изучение информатики в
10–11-х классах не является обязательным для всех
учащихся. На профильном уровне информатику
рекомендуется изучать в классах
физико-математического и
информационно-технологического профилей.
Предметом горячих обсуждений стало
новое положение о приеме в вузы по итогам ЕГЭ. На
значительное число специальностей ЕГЭ по
информатике может стать вступительным
“пропуском”. Ситуация уникальная, поскольку
нет другой такой школьной дисциплины, не
обязательной для изучения в старших классах, по
которой бы сдавался ЕГЭ, необходимый для
поступления в вузы на многие популярные
специальности.
Знакомство с содержанием ЕГЭ за
прошлые годы, а также с демонстрационными
материалами к ЕГЭ 2009 года убеждает, что ни
требования образовательного стандарта по
информатике для основной школы, ни даже
требования стандарта для полной средней школы
базового уровня не соответствуют необходимому
уровню подготовки учащихся к ЕГЭ. Обеспечить
такую подготовку может только
общеобразовательный курс профильного уровня,
изучение которого не является массовым явлением
в школе.
Относительно непрофильных по
информатике классов вывод в сложившейся
ситуации очевиден: для тех учеников, которые
собираются поступать в вузы, требующие
результатов ЕГЭ по информатике, необходимо
организовать дополнительное обучение. В рамках
школьного учебного плана это можно сделать в
форме элективного курса “Подготовка к ЕГЭ по
информатике”. Изучение же общеобразовательного
курса на профильном уровне должно полностью
гарантировать, без какой-либо дополнительной
подготовки, успешную сдачу ЕГЭ по информатике.
В 2007 году был обнародован совместный
документ РАН и РАО под названием
“Фундаментальное ядро общего образования”
(проект для обсуждения). В этом документе
информатика отнесена к базовым дисциплинам
общего образования, наряду с филологией и
математикой. Факт распространения
вступительного экзамена по информатике в вузы
(наряду с русским языком и математикой) —
проявление этой тенденции. Дело теперь за тем,
чтобы признать данное положение на уровне
нормативных документов общего образования и
реализовать его в школьном учебном процессе.
Чему же учить на профильном курсе?
Можно ли считать, что подготовка к ЕГЭ
является основной задачей профильного курса
информатики? Нет, конечно! Это, как говорят
математики, необходимое, но далеко не
достаточное условие для профильного обучения.
Попытаюсь описать свое понимание задач
профильного обучения информатике в школе.
Становление школьного курса
информатики происходит уже более 20 лет. В этом
процессе есть два наиболее заметных направления:
1) формирование фундаментального
содержания курса;
2) расширение прикладного содержания —
овладение учащимися средствами и методами ИКТ.
С развитием процесса информатизации
школьного образования, с внедрением ИКТ в
обучение многим школьным дисциплинам, с
расширением доступности компьютеров и Интернета
(в том числе в домашних условиях) решение второй
задачи перестало быть привилегией курса
информатики. Поэтому развитие и укрепление
информатики в школе как полноценной
общеобразовательной дисциплины должно
происходить преимущественно по первому из
названных двух направлений.
Непросто дать ответ на вопрос “что
именно следует отнести к фундаментальному
содержанию школьной информатики?”. Отмечу два
основных признака, по которым определенную
учебную тему можно считать фундаментальной
составляющей курса:
1) тема имеет прямое отношение к
основному объекту изучения в научной области
информатики: к информации и информационным
процессам;
2) тема не изучается по программам
других школьных дисциплин.
Следует различать два понятия:
профильное обучение информатике и
общеобразовательный курс информатики
профильного уровня. В старших классах профильное
обучение информатике реализуется через
общеобразовательный курс и элективные курсы
информатического содержания. Элективные курсы
могут носить как прикладное, так и
фундаментальное содержание. Примером последнего
является курс “Математические основы
информатики”, разработанный в учебном пособии
Е.В. Андреевой, Л.Л. Босовой, И.Н. Фалиной. И
все-таки рискну предположить, что наибольшее
количество выбираемых учащимися (и учителями)
элективных курсов будет иметь прикладное
содержание.
Фундаментальное ядро профильного
обучения информатике в школе должно быть
заложено в общеобразовательный курс. Изучение
фундаментальных основ требует хорошего знания
других дисциплин, прежде всего математики и
физики. В этом проявляются межпредметные связи
информатики, а не только в компьютерном
моделировании, которое по отношению к
информатике носит скорее прикладной характер. На
таких принципах можно успешно выстроить
общеобразовательный курс профильного уровня с
учетом того, что ученики в профильных классах
более мотивированы, лучше подготовлены по
математике и физике.
Существенным признаком
фундаментальности общеобразовательного курса
является присутствие в нем исторической линии.
Развитие научных отраслей информатики,
информационной техники и технологий имеет свою
историю, важные даты, имена классиков.
Хронологический аспект изучения предмета —
важный системообразующий фактор.
Должно ли различаться профильное
обучение информатике в физико-математических
(Ф-М) и информационно-технологических (И-Т)
классах? Да, должно. Но это различие в основном
будет проявляться через выбор элективных курсов.
Для общеобразовательного курса профильного
уровня есть один ГОС. Его требования должны быть
обеспечены в любом варианте.
Тем не менее в преподавании
общеобразовательного курса в Ф-М и И-Т классах
должны быть различия. Они главным образом будут
проявляться через организацию практикума: по
уровню и количеству заданий на разные разделы
курса. Это обстоятельство отразится и на
распределении учебных часов по тематическим
разделам. Например, в Ф-М классах больше времени
будет выделяться на раздел “Математическое
моделирование” по сравнению с И-Т классами. А на
раздел “Информационные технологии” — наоборот.
Реализация фундаментального
общеобразовательного курса информатики
профильного уровня в виде учебно-методических
комплексов — важная задача для всей системы
информатического образования. Профильный курс
должен стать “эпицентром” распространения
“волны фундаментализации” как вниз, так и вверх.
Вниз — это в основную школу. Если с 8–9-х классов
будет снята проблема обучения основам
компьютерной грамотности, то возникнет задача
повышения уровня теоретического содержания
курса информатики в этих классах.
Вверх — это в систему ВПО. Профильный
курс в 10–11-х классах — это предпрофессиональная
подготовка будущих выпускников школы.
Значительная часть учеников, заканчивающих
классы физико-математического и
информационно-технологического профилей, пойдут
в вузы, где информатика станет основной или одной
из основных составляющих их профессиональной
подготовки. Если в вузы придут выпускники школы,
подготовленные на уровне требований профильного
ГОС по информатике (или хотя бы ЕГЭ по
информатике), то эффективность вузовского
обучения значительно повысится. Не секрет, что
пока обучение в вузе на многих профильных к
информатике специальностях приходится начинать
с азов.
В процессе изучения
общеобразовательного курса профильного уровня
ученики активно должны использовать весь
арсенал своих навыков работы со средствами ИКТ,
который они приобрели в основной школе. Это
относится ко всем без исключения темам учебной
программы. Одной из наиболее востребованных для
этих целей технологий должны стать электронные
таблицы.
Теперь о программировании. Как
известно, в ЕГЭ задания по программированию
занимают примерно половину всего материала. И в
принципе это правильно! Поскольку ЕГЭ по
информатике фактически выступает как форма
проверки уровня предпрофессиональной
подготовки, то в этом смысле роль
программистской подготовки очень большая. Для
профессионала в области информатики и IT
программирование — это образ мышления. У
разных людей различаются способности к
программированию. Грамотное обучение в школе
алгоритмизации и программированию развивает эту
форму мышления. Известно, что на первых курсах
компьютерных специальностей происходит большой
“отсев” именно из-за неуспеваемости по
программированию. Принять неспособного к
программированию человека на такую
специальность, это все равно, что принять
безголосого абитуриента на вокальное отделение
консерватории.
По нашему мнению, программирование
должно стать сквозной линией
общеобразовательного курса профильного уровня.
Согласно образовательному стандарту, с основами
программирования ученики знакомятся в основной
школе. После 9-го класса они должны уметь
составлять простые программы на одном из языков
программирования, уметь работать в среде
определенной системы программирования. Опираясь
на эту базу, следует развивать программистские
знания и навыки учеников непрерывным образом в
течение всего курса в 10–11-х классах.
В настоящее время автор данной статьи
совместно со своими коллегами работает над
учебником по общеобразовательному курсу
информатики профильного уровня. Начиная с
данного номера газеты, будут публиковаться
фрагменты учебника. Постараемся отразить в этих
фрагментах наиболее характерные содержательные
и методические свойства учебника, реализующие те
принципы, о которых говорилось выше.
ПРЕДСТАВЛЕНИЕ ЧИСЕЛ
Методическое предисловие
Вниманию читателей предлагается
раздел учебника под названием “Представление
чисел”. Здесь речь идет о системах счисления.
Тема представления числовых типов данных в
компьютере рассматривается в другом разделе —
“Архитектура ЭВМ”.
Системы счисления — традиционная
тема, присутствующая во всех учебниках по
информатике, начиная с первого школьного
учебника А.П. Ершова. Рассматривается эта тема и в
курсе информатики для основной школы. Чем
отличается изложение этой традиционной темы в
общеобразовательном курсе профильного уровня?
Прежде всего более высоким
математическим уровнем, более широким
освещением темы. Рассказывается о том, что среди
позиционных систем счисления существуют
традиционные и нетрадиционные системы. Для
традиционных систем вводится понятие базиса
системы, разложения числа по базису. При
рассмотрении перевода p-ичных чисел в
десятичную систему дается обоснование
применению схемы Горнера как для целых, так и для
дробных чисел.
Приводится пример нетрадиционной
системы счисления — фибоначчиевой системы
счисления. Дается понятие об избыточности
системы и “технической полезности” свойства
избыточности.
Дается математическое обоснование
алгоритма перевода десятичного числа в
недесятичную систему счисления через
оперирование с общей формой алгебраического
многочлена.
Наиболее “инновационной” частью
этого раздела является параграф “Автоматизация
перевода чисел из системы в систему”. Здесь
рассматривается способ перевода недесятичного
числа в десятичное с помощью электронной
таблицы. Таким образом, ученики расширяют свои
представления о круге задач, которые можно
решать на электронной таблице. Активное
применение электронных таблиц продолжается и в
других разделах учебника. Ученики должны
убедиться в том, что электронные таблицы — это
своеобразный язык программирования, с помощью
которого можно решать множество различных
математических задач, а не только задачи
учетно-бухгалтерского характера, как это
традиционно принято считать.
В этом же параграфе присутствует
раздел под заголовком “Учимся
программировать”. Такие вставки повторяются и в
других параграфах учебника. Это реализация той
декларации, которая сделана во вводной статье:
линия программирования — сквозная линия курса.
Используется язык программирования Паскаль. Это
связано с несколькими причинами. Первое — то, что
основы Паскаля излагаются в разделе
“Программное управление компьютером” в
авторском курсе информатики для 9-го класса. Еще
один немаловажный факт: в вузах в качестве
первого языка для обучения программированию
чаще всего предпочтение отдается Паскалю. Все
преподаватели программирования понимают
методические достоинства Паскаля для обучения
принципам структурного программирования,
которые лежат в основе профессиональной
культуры программиста. Еще один прагматический
аргумент: в заданиях ЕГЭ на программирование
всегда присутствует Паскаль.
На примере каждой конкретной
программы объясняются новые для учеников
элементы языка, приемы программирования.
Использование подробных комментариев в текстах
программ, трассировочных таблиц направлено на
лучшее усвоение материала. В учебнике для 11-го
класса будет отдельный раздел, посвященный
программированию. В нем будут рассматриваться
общие принципы различных парадигм и технологий
программирования. Более глубокое изучение может
быть продолжено в элективных курсах, например, по
объектно-ориентированному программированию, по
офисному программированию (VBA) и пр.
Электронные таблицы и Паскаль
используются в параграфе “Арифметика в
позиционных системах счисления”. Хочется
отметить, что тема систем счисления — очень
благодатный материал для программирования.
В конце параграфов присутствуют
таблицы под заголовком “Система основных
понятий”. Авторы придают большое значение этому
дидактическому средству. Это структурограммы,
содержательно и структурно отражающие суть
изложенного в параграфе материала. На них
обязательно нужно обращать внимание учеников,
комментировать, обсуждать, использовать при
объяснениях.
Важное значение авторы придают
подбору заданий, присутствующих в конце
параграфов. Эти задания ориентированы на
коллективную работу в классе в режиме семинара, в
том числе и с использованием компьютеров.
Некоторые задания могут быть предложены
ученикам для домашнего выполнения. Для
индивидуальной практической работы следует
использовать пособие “Задачник-практикум по
информатике”, которое знакомо большинству
учителей. Задачник-практикум будет переработан и
дополнен с учетом потребностей профильного
курса.
В УМК будет включен диск с необходимым
программным обеспечением, цифровыми ресурсами.
В частности, в содержание этого диска
планируется включить учебный тренажер по
системам счисления. В коллекции ЦОР будут
контрольные тесты по этой теме.
В завершение хочу сказать следующее.
Данные публикации в газете представляют
рабочие материалы авторов, но не окончательный
текст учебника. В процессе дальнейшей работы
могут произойти некоторые изменения в
публикуемых текстах. Эти изменения могут быть
вызваны отзывами учителей, которые возьмут на
себя труд прочитать наши материалы и высказать
свое мнение, свои пожелания. Для этого, уважаемые
учителя, вы можете использовать мою авторскую
мастерскую, которая имеется на сайте
издательства “БИНОМ. Лаборатория знаний” (www.lbz.ru) в разделе методической
службы. Там можно воспользоваться форумом для
общения с авторами, а также узнать мой
электронный адрес.
§1. Системы счисления
Системой счисления, или нумерацией,
называется определенный способ записи чисел. Из
базового курса информатики вы знакомы с историей
систем счисления, знаете, что системы счисления
бывают позиционными и непозиционными. Вам также
известно, что привычная для нас система
счисления называется десятичной позиционной
системой, что в компьютере для представления
чисел и выполнения вычислений используется
двоичная система счисления.
Числа заключают в себе количественную
информацию. Запись чисел по правилам
определенной системы счисления есть способ
кодирования чисел. От способа кодирования
зависит размер кода, то есть количество цифр в
записи числа, а также правила выполнения
вычислений. Одна из главных проблем, которую
нужно было решить изобретателям ЭВМ, это
проблема представления чисел в памяти
компьютера и составления алгоритма их обработки
(вычислений) процессором. Для понимания того, как
были решены эти проблемы, нужно знать принципы
организации систем счисления.
Основные понятия позиционных систем
счисления
Цифрами называют символы,
используемые для записи чисел. Алфавитом системы
счисления называется совокупность всех цифр.
Количество цифр, составляющих алфавит,
называется его размерностью.
В записи многозначного числа цифры,
стоящие в разных позициях, имеют разный вес.
Так в целом десятичном числе 325 тройка означает
три сотни, двойка — два десятка, пятерка —
пять единиц: 325 = 3·100 + 2·10 + 5·1. Такая запись
называется развернутой формой записи числа:
число записывается в виде суммы, в которой каждое
слагаемое — это цифра, умноженная на свой вес.
Вот еще пример развернутой записи смешанного
десятичного числа:
6248,547 = 6·1000 + 2·100 + 4·10 + 8·1 + 5·0,1 + 4·0,01 +
7·0,001 = 6·103 + 2·102 + 4·101 + 8·100 +
5·10–1 + 4·10–2 + 7·1–3
В десятичной системе счисления веса
равны степеням десятки (положительным и
отрицательным). Каждая позиция в записи числа
называется разрядом числа. Разряды
нумеруются в целой части числа положительными
целыми числами, начиная от нуля, в дробной части
— отрицательными числами, начиная от минус
единицы:
число: 6248, 5 4 7
разряды: 3210 -1-2-3
Здесь номера разрядов указаны
маленькими цифрами снизу. Отсюда видно, что веса
соответствующих цифр равны десяти в степени,
равной номеру разряда, в котором стоит эта цифра.
Десятичная система относится к числу традиционных
систем счисления. Следующий, бесконечный в обе
стороны ряд целых степеней десятки называется базисом
десятичной системы счисления:
… 109, 108, 107, 106, 105,
104, 103, 102, 101, 100, 10–1,
10–2, 10–3, …
Запись числа в развернутой форме еще
называют разложением числа по базису.
Система счисления именуется
традиционной, если ее базис образует
геометрическую прогрессию. Знаменатель этой
прогрессии называется основанием системы
счисления. У традиционных систем счисления
знаменатель базиса совпадает с размерностью ее
алфавита.
Основание десятичной
системы счисления равно десяти, так как
размерность ее алфавита и знаменатель базиса
равны десяти. |
По такому же принципу организованы все
другие традиционные системы счисления.
Наименьшим основанием для позиционной системы
является 2 — двоичная система. Система с
основанием 1 не может быть позиционной, поскольку
для нее невозможно построить базис, — единица в
любой степени равна единице. Базис двоичной
системы счисления выглядит так:
… 29, 28, 27, 26, 25,
24, 23, 22, 21, 20, 2–1,
2–2, 2–3, …
Основанием
традиционной позиционной системы может быть
любое натуральное число, начиная от двух. |
Размерность алфавита равна основанию
системы счисления. Вот несколько примеров
позиционных систем и их алфавитов:
Если основание системы n не больше
десяти, то в алфавите используются n первых
арабских цифр. Если основание превышает 10, то в
качестве дополнительных цифр выступают буквы
латинского алфавита по порядку.
При записи недесятичного числа
принято указывать его основание маленькой
подстрочной цифрой — нижним индексом. Например:
1375 — число в пятеричной системе счисления.
Отметим одно очень важное обстоятельство.
В любой позиционной
системе счисления ее основание записывается как
10. |
Например: 102 = 2, 103= 3, 108
= 8, 1016 = 16 и т.д.
Задача 1. Число в троичной системе
счисления 2011,13 нужно перевести в
десятичную систему, т.е. определить равное ему
число в десятичной системе.
Разложим данное число по базису
троичной системы счисления, т.е. запишем его в
развернутой форме и вычислим полученное
выражение по правилам десятичной арифметики:
2011,13= 2·33 + 0·32 + 1·31
+ 1·30 + 1·3–1 = 54 + 3 + 1 + 1/3 = .
Задача 2. Шестнадцатеричное число
2AF,8C16 перевести в десятичную систему.
Задача также решается через
разложение шестнадцатеричного числа по базису
системы счисления и вычисления полученного
выражения. В разложении цифры, обозначаемые
буквами, заменяются на их эквиваленты в
десятичной системе.
2AF,8C16 = 2·162 + 10·16 + 15·160 +
8·16–1 + 12·16–2 = 512 + 160 + 15 + 1/2 + 3/64 =
= 687,546875.
Задача 3. Двоичное число 1010101111,1000112
перевести в десятичную систему.
1010101111,1000112 = 1·29 + 1·27 +
1·25 + 1·23 + 1·22 + 1·2 + 1 + 1·2–1 +
1·2–5 + 1·2–6 = 512 + 128 + 32 + 8 + 4 + 2 + 1 + 1/2 + 1/32 +
1/64 = 687,546875.
Обратите внимание, что результат тот
же, что и в задаче 2. Значит, двоичное число из
данной задачи равно шестнадцатеричному числу из
задачи 2. К этому обстоятельству мы еще вернемся.
Схема Горнера и перевод чисел
Недесятичное число можно быстро
перевести в десятичную систему и с помощью
простого калькулятора. Такой перевод связан с
применением так называемой схемы Горнера для
вычисления алгебраических многочленов. Сначала
рассмотрим перевод целого числа на примере
восьмеричного числа 2317458. Запишем его в
развернутой форме и преобразуем полученную
сумму к эквивалентной скобочной форме:
2317458 = 2·85 + 3·84 + 1·83+
7·82 + 4·8 + 5 =
= ((((2·8 + 3)·8 + 1)·8 + 7)·8 + 4)·8 + 5 = 78 821.
Раскройте мысленно скобки в
записанном выражении, и вы увидите, что получится
то же разложение по базису восьмеричной системы
счисления. Но зато скобочное выражение очень
просто вычислять. На калькуляторе нужно
последовательно слева направо выполнять
умножения и сложения. Порядок нажатия клавиш на
калькуляторе будет таким:
В этом примере было выполнено пять
умножений и пять сложений. Такой способ
вычисления называется схемой Горнера.
В общем виде алгебраический многочлен n-й
степени и его преобразование к скобочной форме
выглядят так:
Из этой формулы следует, что
алгебраический многочлен n-й степени можно
вычислить за n операций умножения и n
операций сложения. Это самый оптимальный способ
вычисления.
Схему Горнера можно применить и для
перевода дробных чисел. Покажем это на примере
двоичного числа 0,1101012. Запишем число в
развернутой форме и выполним тождественные
преобразования, приводящие выражение к
скобочной форме:
0,1101012 = 1·2–1+ 1·2–2 + 0·2–3
+ 1·2–4 + 0·2–5 + 1·2–6 = 1·2–6 +
0·2–5 + 1·2–4 + 0·2–3 + 1·2–2 +
1·2–1 = (((((1/2 + 0)/2 + 1)/2 + 0)/2 + 1)/2 + 1)/2 = 0,828125.
Полученное выражение также поддается
последовательному вычислению на калькуляторе:
шесть операций деления и пять — сложения.
Клавиши нажимаются в таком порядке:
Прибавление нулей можно не делать,
тогда число операций сократится.
Пример нетрадиционной системы
счисления
В качестве примера нетрадиционной
системы счисления рассмотрим так называемую
“фибоначчиевую систему”. Базисом этой системы
является следующий числовой ряд: 1, 2, 3, 5, 8, 13, 21, 34,
55, 89, … Он называется рядом Фибоначчи, или числами
Фибоначчи. Ряд Фибоначчи строится следующим
образом: первые два числа задаются как начальные
значения: F1 = 1, F2 = 2. Каждое следующее число равно
сумме двух предыдущих чисел:
F3 = F2 + F1, F4 = F3 + F2, F5 = F4 + F3 и т.д.
Базис фибоначчиевой системы не
является геометрической прогрессией, как у
традиционных систем счисления. Алфавит
фибоначчиевой системы состоит из двух цифр: 0 и 1,
как у двоичной системы счисления. Можно доказать,
что в фибоначчиевой системе представимо любое
целое число. В следующей таблице для сравнения
приводятся первые 10 целых чисел в десятичной,
двоичной и фибоначчиевой системах счисления:
Таблица 1
Десятичная с.с. |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
Двоичная с.с. |
0 |
1 |
10 |
11 |
100 |
101 |
110 |
111 |
1000 |
1001 |
Фиббонач. с.с. |
0 |
1 |
10 |
100 |
101 |
1000 |
1001 |
1010 |
10000 |
10001 |
Отметим важную особенность
фибоначчиевой системы: неоднозначность
представления некоторых целых чисел в этой
системе. Например, число 3 можно записать двумя
способами: 3 = 11fib = 100fib. А число 8 можно
записать тремя способами: 8 = 10000fib = 1100fib
= 1011fib. Такое свойство системы называется избыточностью.
Традиционные системы счисления не имеют
избыточности. Для автоматической обработки
данных избыточность оказывается полезным
свойством. Благодаря избыточности можно
обнаруживать потерю данных, возникающую из-за
технических сбоев. Отсюда интерес к
фибоначчиевой системе счисления со стороны
конструкторов вычислительной техники.
Система основных понятий
Вопросы и задания
1. Определите основные понятия
систем счисления: традиционные системы,
нетрадиционные системы; цифра, алфавит системы,
основание системы.
2. Почему развернутую форму записи
числа называют разложением по базису?
3. Чему будет равно: 1/3 при переводе
в троичную систему, 1/5 — в пятеричную систему, 1/8
— в восьмеричную систему, 1/16 — в
шестнадцатеричную систему?
4. Что общего между результатами
вычисления следующих выражений:
1112 + 12, 2223 + 13, 7778
+ 18, FFF16 + 116 ?
5. Назовите предыдущие значения в
натуральном ряде чисел для следующих значений: 1005,
1007, 1009.
6. В табл. 1 для всех чисел в
диапазоне от 0 до 9 приведено лишь по одному
способу представления в фибоначчиевой системе
счисления. Для тех чисел, представление которых
неоднозначно, запишите все варианты.
7. Составьте программу вычисления n-го
элемента из ряда чисел Фибоначчи (n > 2)
согласно определению ряда: F1 = 1, F2 = 2, Fi
= Fi–1 + Fi–2, i = 3, 4, … Массив
в программе не использовать.
8*. Составьте программу перевода
целого числа из фибоначчиевой системы счисления
в десятичную систему.
9**. Составьте программу перевода
целого десятичного числа в фибоначчиеву систему
счисления.
§2. Перевод десятичных чисел в другие
системы счисления
Рассмотрим перевод десятичных чисел в
системы счисления с другими основаниями.
Подойдем к этой проблеме с общей математической
позиции.
Сначала получим правила перевода
целого числа. Обозначим целое число через Х.
Основание системы счисления, в которую будем
переводить, обозначим p. В результате
перевода получится (n + 1)-разрядное число.
Запишем его следующим образом:
Здесь 0
обозначает цифру нулевого разряда числа, 1 —
цифру первого разряда и т.д. Значения этих цифр
лежат в диапазоне от 0 до р – 1. Запишем
значение числа в системе p в развернутом виде
и преобразуем к скобочной форме.
Отсюда
нетрудно понять, что 0 равно остатку от
целочисленного деления Х на р, а Х1 —
частное от целочисленного деления Х на р. Применяя
символику языка Паскаль, запишем: 0 = X mod p, X1 = X div
p. Здесь div — знак операции целого деления, а
mod — остаток от деления. Таким образом,
найдена 0 —
цифра нулевого разряда числа в p-ичной
системе.
Теперь запишем число Х1 в скобочной
форме:
По аналогии с предыдущим следует, что 1 = X1 mod p —
остаток от деления Х1 на р; X2 = X1
div p. Найден 1 —
первый разряд искомого числа.
Продолжая далее целочисленные деления
на р с выделением остатка, последовательно
будем получать искомые цифры р-ичного числа.
Процесс закончится, когда в результате деления
нацело (div) получится ноль. Последний остаток
будет равен n
— старшей цифре числа.
Задача 1. Перевести число 58 в
троичную систему счисления.
Перевод производим путем
последовательных делений на 3. После знака
равенства записывается целая часть частного, а в
скобках указывается остаток.
58 : 3 = 19 (1)
19 : 3 = 6 (1)
6 : 3 = 2 (0)
2 : 3 = 0 (2)
Окончательный результат такой: 58 = 20113.
Это равенство мы уже получали в предыдущем
параграфе.
Теперь рассмотрим перевод
десятичной дроби в систему счисления с
основанием р. Пусть Y — дробное
десятичное число: Y < 1. Очевидно, что в
системе с основанием р оно также будет
дробным числом, поскольку 1 в любой системе
счисления обозначает одну и ту же величину.
Число, равное Y в системе р, запишем в
развернутой форме:
Умножим это равенство на р:
.
Отсюда видно, что –1 — это целая часть
произведения Y·p, а Y1 — дробная часть
этого произведения. Далее выпишем Y1 и умножим
его на р:
.
Теперь
–2 стало целой частью произведения Y1·p.
Очевидно, что дальше нужно умножать на р
значение Y2. Выделив его целую часть, получим
третью цифру дробного числа — –3. И так далее.
До каких же пор продолжать этот
процесс? Тут могут быть разные ситуации. Первая
ситуация: после некоторого числа умножений в
дробной части произведения получится ноль.
Понятно, что дальше будут все нули.
Следовательно, переведенное значение имеет
конечное число цифр. Рассмотрим пример такого
перевода.
Задача 2. Перевести десятичную
дробь 0,625 в двоичную систему счисления.
Будем последовательно умножать это
число на 2, выделяя целую часть произведения:
В итоге получили: 0,625 = 0,1012.
Вторая ситуация — получение
периодической дробной части. В таком случае
последовательные умножения надо продолжать до
выделения периода.
Задача 3. Перевести число 0,123 в
пятеричную систему счисления.
Далее пойдет повторение двух
последних цифр. Результат получился таким:
0,123 = 0,030(14)5.
Из математики вам должно быть
известно, что число с конечной или периодической
десятичной дробной частью является рациональным
числом. Можно доказать, что любое дробное
рациональное десятичное число при переводе в
другую систему счисления также дает
рациональное число. Попробуйте доказать это
самостоятельно!
Если требуется перевести смешанное
десятичное число, то отдельно переводятся целая
часть числа путем последовательных делений и
дробная часть путем умножений. Затем эти два
результата записываются через запятую одним
смешанным числом.
§3. Автоматизация перевода чисел из
системы в систему
В этом параграфе будут рассмотрены
способы перевода чисел из одной системы
счисления в другую с помощью электронных таблиц
и программирования.
Перевод из недесятичной системы в
десятичную
Как переводить недесятичные числа в
десятичную систему счисления, было рассказано
раньше. Там же описан способ быстрого перевода на
основе использования схемы Горнера, который
можно реализовать на простом калькуляторе.
Решим теперь такую задачу. Требуется
создать электронную таблицу, с помощью которой
будет происходить автоматический перевод
недесятичного числа из любой системы счисления,
основание которой меньше десяти, в десятичную
систему.
Пример использования такой таблицы
приведен на рис. 1. Здесь показан перевод
троичного числа 2011,13.Для перевода числа
используется разложение по базису позиционной
системы. Знаменатель базиса — в ячейке D2.
Номера разрядов числа равны степеням
знаменателя в развернутой форме. Значащие цифры
числа вписываются в соответствующие ячейки
пятой строки. В шестой строке вычисляются
слагаемые развернутой формы числа. Например, в
ячейке B6 записана формула: =B5*$D$2^B4. В ячейке C6: =C5*$D$2^C4 и т.д. Результат перевода
получается в ячейке N5 , где стоит
формула: =СУММ(B6:L6). Данная таблица
рассчитана на 6-разрядную целую часть и
4-разрядную дробную часть. При необходимости ее
можно расширить.
Учимся программировать
Рассмотрим программу на Паскале, по
которой происходит перевод целого недесятичного
числа в десятичную систему.
Program Numbers_p_10;
var N10,Np,k: longint;
p: 2..9;
{ввод основания системы}
begin write('p='); readln(p);
{ввод исходного p-ичного числа}
write('N', p,'='); readln(Np);
k := 1; N10 := 0;
{цикл выполняется, пока Np не равно нулю}
while (Np <> 0) do
begin
{суммирование развернутой формы}
N10 := N10 + (Np mod 10) * k;
{вычисления базиса: p, p2, p3 …}
k := k * p;
{отбрасывание младшей цифры}
Np := Np div 10
end;
{вывод десятичного числа}
writeln('N10=',N10)
end.
В программе использованы следующие
переменные:
p — основание системы счисления —
исходное данное;
Np — целое p-ичное число —
исходное данное;
N10 — десятичное число — результат.
Тип longint — длинный
целый тип. Значения величин этого типа лежат в
диапазоне от –2 147 483 648 до 2 147 483 647.
Значит, данная программа может работать с
числами, не более чем 9-значными. Тип переменной р
— диапазон целых чисел от 2 до 9.
Про операции div и mod уже было сказано
раньше: div — целое деление, mod — остаток от
целого деления. Например: 1234 mod 10 = 4 — выделяется
разряд единиц; 1234 div 10 = 123 — отбрасывается младший
разряд.
Рис. 1. Перевод недесятичного числа
в десятичную систему счисления
Пример: при переводе по данной
программе двоичного числа 11012 в десятичную
систему на экране увидим:
p = 2
N2 = 1101
N10 = 13
Следовательно, в итоге получили: 11012
= 13
Для лучшего понимания работы
программы внимательно изучите приведенную выше
трассировочную таблицу. Она отражает изменения
значений переменных на каждом шаге выполнения
алгоритма, реализованного в программе.
Теперь познакомьтесь с программой
перевода целого десятичного числа в
недесятичную систему счисления с основанием p
(1 < p < 10).
Program Numbers10-p;
var N10, Np, k: longint;
p: 2..9;
begin {Ввод исходного десятичного
числа}
write('N10='); readln(N10); write('p='); readln(p); {Ввод
основания системы}
k := 1; Np := 0;
repeat
{Суммирование развернутой формы}
Np := Np + (N10 mod p)*k;
k := k * 10; {Вычисление базиса: 10, 100, 1000, …}
N10 := N10 div p {Отбрасывание младшей цифры}
until N10 = 0; {Цикл заканчивает
выполнение при N10 = 0}
Writeln('N',p,'=',Np) {Вывод p-ичного числа}
end.
Здесь использованы те же обозначения,
что и в предыдущей программе. Исходными данными
являются: N10 — десятичное число и p —
основание системы, в которую осуществляется
перевод. Результат получается в переменной Np
— число в системе с основанием p.
В алгоритме используется цикл с
постусловием
(repeat … until). Цикл повторяется до
выполнения условия: N10 = 0.
Пример использования программы.
Переведем число 25 в двоичную систему счисления.
Работа программы на экране компьютера отразится
следующим образом:
N10 = 25
p = 2
N2 = 11001
Следовательно, в результате получили:
25 = 110012.
Для лучшего понимания работы
программы рекомендуем построить трассировочную
таблицу наподобие предыдущей.
Вопросы и задания
1. Как переводится целое десятичное
число в систему счисления с основанием р?
2. Как переводится дробное
десятичное число в систему счисления с
основанием р?
3. Переведите число 4267,13 в двоичную
и восьмеричную системы счисления.
4. Реализуйте на компьютере
программу Numbers_p-10.
Протестируйте ее на различных значениях
исходных данных.
5. Реализуйте на компьютере
программу Numbers10-p.
Протестируйте ее на различных значениях
исходных данных.
6*. Постройте электронную таблицу
для перевода целого десятичного числа в систему
счисления с основанием р (2 р 9). Протестируйте работу таблицы.
7*. Составьте программу на Паскале
перевода дробного числа из р-ичной системы в
десятичную.
8**. Составьте программу на Паскале
перевода дробного десятичного числа в р-ичную
систему счисления.
Продолжение следует
Система основных понятий
Перевод
десятичных чисел в р-ичные |
Целые числа |
Дробные числа |
Перевод
производится последовательным делением числа на
р с выделением остатка. Вычисление
заканчивается, когда частное становится равным
нулю |
Перевод
производится последовательным умножением числа
на р с выделением целой части произведения.
Результат — конечная или периодическая дробь |
Программирование
перевода 10 р и р 10 основано на использовании
операций над целыми числами: div — целое деление,
mod — остаток от целого деления. |
|