Введение
В данной работе представлен материал по разработке проекта “Проектирование программ с графическим интерфейсом для работы с компьютерными системами счисления на языке программирования Python”. Тема достаточно актуальная и представляет повышенный интерес для учащихся профильных классов.
Цель данной работы заключается в том, чтобы получить дополнительные знания по работе с компьютерными системами счисления и провести анализ полученных результатов.
Задача состоит в том, чтобы подобрать соответствующий материал с последующей систематизацией, обобщением и иллюстрацией текста.
Работа состоит из двух частей: описательной (даны описание компьютерных систем счисления, преобразование компьютерных чисел) и практической (приведён пример разработки калькулятора с двумя целыми положительными числами и рассмотрены варианты перевода исходных данных и полученного результата в компьютерные системы счисления с использованием соответствующих функций).
Описательная часть
Глава 1. Описание компьютерной системы счисления
§ 1. Определение систем счисления
“Всё есть число”, - говорили пифагорийцы, подчёркивая необычайно важную роль чисел в практической деятельности. Известно множество способов представления чисел. В любом случае число изображается символом или группой символов (словом) некоторого алфавита. Будем называть такие символы цифрами. Для представления чисел используются непозиционные и позиционные системы счисления [7].
Система счисления – это правила записи чисел с помощью специальных знаков – цифр, а также соответствующие правила выполнения операций с этими числами.
Позиционная система счисления – это такая система, в которой значение цифры (её вес) полностью определяется её местом (позицией) в записи числа.
Алфавит системы счисления – это используемый в ней набор цифр.
Разряд – это позиция цифры в записи числа. Разряды в записи целых чисел нумеруются с нуля справа налево [3].
В данной работе представлен материал по работе с компьютерными системами счисления.
§ 2. Десятичная система счисления
Десятичная система счисления имеет основание 10, поскольку в ней используются 10 цифр от 0 до 9. В десятичной системе счисления последовательные позиции слева от десятичной точки представляют единицы, десятки, сотни, тысячи и так далее. Каждая позиция представляет определённую степень основания (10). Например, десятичное число 1234 состоит из цифры 4 в позиции единиц, 3 в позиции десятков, 2 в позиции сотен и 1 в позиции тысяч. Его значение можно записать как:
(1 × 1000) + (2 × 100) + (3 × 10) + (4 × 1)
(1 × 103) + (2 × 102) + (3 × 101) + (4 × 100)
1000 + 200 + 30 + 4 = 1234.
§ 3. Двоичная система счисления
Все данные в компьютерных устройствах хранятся и обрабатываются как числа, представленные в двоичной системе счисления.
Характеристика двоичной системы счисления:
· Использует две цифры: 0 и 1;
· Называется системой счисления с основанием 2;
· Каждая позиция в двоичном числе представляет собой определённую степень основания (2). Пример 20;
· Последняя позиция в двоичном числе представляет собой x степень основания (2). Пример 2x, где x представляет последнюю позицию – (количество цифр в числе минус 1);
Пример
Двоичное число: 101012
Вычисление десятичного эквивалента:
Шаг |
Двоичное число |
Десятичное число |
1 |
101012 |
((1*24) + (0*23) + (1*22) + (0*21) + (1*20))10 |
2 |
101012 |
(16 + 0 + 4 + 0 + 1)10 |
3 |
101012 |
2110 |
Примечание: 101012 обычно записывается как 10101.
§ 4. Восьмеричная система счисления
Восьмеричная система счисления применяется для краткой записи двоичных кодов.
Характеристика восьмеричной системы счисления:
· Использует восемь цифр: 0, 1, 2, 3, 4, 5, 6, 7;
· Также называется системой счисления с базой 8;
· Каждая позиция в восьмеричном числе представляет собой определённую степень основания (8). Пример 80;
· Последняя позиция в восьмеричном числе представляет собой x степень основания (8). Пример 8x, где x представляет последнюю позицию – (количество цифр в числе минус 1);
Пример
Восьмеричное число: 125708
Вычисление десятичного эквивалента:
Шаг |
Восьмеричное число |
Десятичное число |
1 |
125708 |
((1*84) + (2*83) + (5*82) + (7*81) + (0*80))10 |
2 |
125708 |
(4096 +1024 + 320 + 56 + 0)10 |
3 |
125708 |
549610 |
Примечание: 125708 обычно записывается как 12570.
§ 5. Шестнадцатеричная система счисления
Шестнадцатеричная система счисления используется для записи адресов и содержимого ячеек памяти компьютера. Её алфавит содержит 16 цифр, 10 арабских цифр (0..9) и первые шесть буквы латинского алфавита (A=10, B=11, C=12, D=13, E=14, F=15).
Характеристика шестнадцатеричной системы счисления:
· Использует 10 цифр и 6 букв: 0, 1, 2, 3, 4, 5, 6, 7, A, B, C, D, E, F;
· Буквы обозначают числа, начинающиеся с 10. A=10, B=11, C=12, D=13, E=14, F=15;
· Также называется системой счисления с базой 16;
· Каждая позиция в шестнадцатеричном числе представляет собой определённую степень основания (16). Пример: 160;
· Последняя позиция в шестнадцатеричном числе представляет собой x степень основания (16). Пример 16x, где x представляет последнюю позицию – (количество цифр в числе минус 1);
Пример
Шестнадцатеричное число: 19FDE16
Вычисление десятичного эквивалента:
Шаг |
Шестнадцатеричное число |
Десятичное число |
1 |
19FDE16 |
((1*164) + (9*163) + (F*162) + (D*161) + (E*160))10 |
2 |
19FDE16 |
((1*164) + (9*163) + (15*162) + (13*161) + (14*160))10 |
3 |
19FDE16 |
(65536 +36864 + 3840 + 208 + 14)10 |
4 |
19FDE16 |
10646210 |
Примечание: 19FDE16 обычно записывается как 19FDE [6].
Глава 2. Преобразование компьютерных чисел
§ 6. Десятичная система в другую базовую систему
Шаг 1 − Разделите десятичное число, подлежащее преобразованию, на значение нового основания.
Шаг 2 − Получите остаток от шага 1 как крайнюю правую цифру (наименьшую значащую цифру) нового базового числа.
Шаг 3 − Разделите частное от предыдущего деления на новое основание.
Шаг 4 − Запишите остаток от шага 3 в качестве следующей цифры (слева) нового базового числа.
Повторяйте Шаги 3 и 4, получая остатки справа налево, пока частное не станет равным нулю на Шаге 3.
Последний остаток, полученный таким образом, будет самой значащей цифрой (MSD) нового базового числа.
Пример
Десятичное число: 2910
Вычисление двоичного эквивалента:
Шаг |
Операция |
Результат |
Остаток |
Шаг 1 |
29 / 2 |
14 |
1 |
Шаг 2 |
14 / 2 |
7 |
0 |
Шаг 3 |
7 / 2 |
3 |
1 |
Шаг 4 |
3 / 2 |
1 |
1 |
Шаг 5 |
1 / 2 |
0 |
1 |
Как упоминалось на этапах 2 и 4, остатки должны быть расположены в обратном порядке так, чтобы первый остаток стал наименее значащей цифрой (LSD), а последний остаток стал наиболее значащей цифрой (MSD).
Десятичное число: 2910 = Двоичное число: 111012.
§ 7. Другая базовая система в десятичную
Шаг 1 − Определите столбчатое (позиционное) значение каждой цифры (это зависит от положения цифры и основания системы счисления).
Шаг 2 − Умножьте полученные значения столбцов (на шаге 1) на цифры в соответствующих столбцах.
Шаг 3 − Суммируйте произведения, рассчитанные на шаге 2. Итогом является эквивалентное значение в десятичной системе счисления.
Пример
Двоичное число: 111012
Вычисление десятичного эквивалента:
Шаг |
Двоичное число |
Десятичное число |
Шаг 1 |
111012 |
((1 × 24) + (1 × 23) + (1 × 22) + (0 × 21) + (1 × 20))10 |
Шаг 2 |
111012 |
(16 + 8 + 4 + 0 + 1)10 |
Шаг 3 |
111012 |
2910 |
Двоичное число: 111012 = Десятичное число: 2910.
§ 8. Быстрый метод – преобразование двоичной системы счисления в восьмеричную
Шаг 1 − Разделите двоичные цифры на группы по три (начиная справа).
Шаг 2 − Преобразуйте каждую группу из трёх двоичных цифр в одну восьмеричную.
Пример
Двоичное число: 101012
Вычисление восьмеричного эквивалента:
Шаг |
Двоичное число |
Восьмеричное число |
1 |
101012 |
010 101 |
2 |
101012 |
28 58 |
3 |
101012 |
258 |
Двоичное число: 101012 = Восьмеричное число: 258.
§ 9. Быстрый метод – преобразование восьмеричной системы счисления в двоичную
Шаг 1 − Преобразуйте каждую восьмеричную цифру в трехзначное двоичное число (восьмеричные цифры для этого преобразования могут рассматриваться как десятичные).
Шаг 2 − Объедините все полученные двоичные группы (по 3 цифры в каждой) в одно двоичное число.
Пример
Восьмеричное число: 258
Вычисление двоичного эквивалента:
Шаг |
Восьмеричное число |
Двоичное число |
1 |
258 |
210 510 |
2 |
258 |
0102 1012 |
3 |
258 |
0101012 |
Восьмеричное число: 258 = Двоичное число: 101012.
§ 10. Быстрый метод – преобразование двоичной системы счисления в шестнадцатеричную
Шаг 1 − Разделите двоичные цифры на группы по четыре (начиная справа).
Шаг 2 − Преобразуйте каждую группу из четырех двоичных цифр в один шестнадцатеричный символ.
Пример
Двоичное число: 101012
Вычисление шестнадцатеричного эквивалента:
Шаг |
Двоичное число |
Шестнадцатеричное число |
1 |
101012 |
0001 0101 |
2 |
101012 |
116 516 |
3 |
101012 |
1516 |
Двоичное число: 101012 = Шестнадцатеричное число: 1516.
§ 11. Быстрый метод – преобразование шестнадцатеричной системы счисления в двоичную
Шаг 1 − Преобразуйте каждую шестнадцатеричную цифру в 4-значное двоичное число (при этом шестнадцатеричные цифры могут рассматриваться как десятичные).
Шаг 2 − Объедините все полученные двоичные группы (по 4 цифры в каждой) в одно двоичное число.
Пример
Шестнадцатеричное число: 1516
Вычисление двоичного эквивалента:
Шаг |
Шестнадцатеричное число |
Двоичное число |
1 |
1516 |
110 510 |
2 |
1516 |
00012 01012 |
3 |
1516 |
000101012 |
Шестнадцатеричное число 1516 = Двоичное число 101012 [6].
Практическая часть
Глава 3. Проектирование программы с графическим интерфейсом
§ 12. Содержательная постановка задачи
Большинство современных программ, предназначенных для пользователя, управляются с помощью графического интерфейса. Рассмотрим основные принципы построения таких программ на языке Python.
Рассмотренные во второй главе преобразования компьютерных чисел можно выполнять в компьютерном варианте, выполнив разработку проекта “Калькулятор для работы с компьютерными системами счисления”.
§ 13. Формальная модель
В проекте первоначально предусмотрена разработка обычного калькулятора: выполнение арифметических операций с двумя целыми положительными числами: сложение (+), вычитание (-), умножение (*) и деление (/) [5]; далее рассмотрен вариант перевода исходных данных и полученного результата в двоичную, восьмеричную и шестнадцатеричную системы счисления с использованием соответствующих функций: bin(), oct(), hex().
§ 14. Компьютерная модель
14.1. Разработка графического интерфейса проекта
В программе может быть несколько окон, которые называются формами. На форме размещаются элементы графического интерфейса: поля ввода, кнопки и др., которые называются виджетами (англ. widget – элемент) или (как в большинстве аналогичных сред) компонентами. Каждый компонент – это объект определённого класса, у которого есть свойства и методы [4].
В отличие от других объектно-ориентированных языков программирования создание формы (окна) с компонентами и их свойствами прописываются непосредственно в программе с использованием графической библиотеки Tkinter.
14.2. Программа (скрипт) с компонентами (виджетами) на языке Python
Для ввода и вывода информации создать компоненты Entry (текстовые окна) - 13, для добавления текста – компоненты Label (метки) - 17, для выполнения программы – командную кнопку Button [1, 2].
Программа (виджет)
#Проектирование программ с графическим интерфейсом
#Graphical user interface - GUI
#Создать Приложение-Калькулятор с арифметическими операциями
#для работы с компьютерными системами счисления
#Создать Форму с компонентами (виджетами)
#Подключить графическую библиотеку Tkinter
from tkinter import *
import tkinter
top=tkinter.Tk()
#Функция пользователя для командной кнопки (скрипт - программный код)
def process():
L2=Entry.get(E1);L3=Entry.get(E2);L4=Entry.get(E3);L7=Entry.get(E5)
L8=Entry.get(E6);L9=Entry.get(E7);L11=Entry.get(E8);L12=Entry.get(E9)
L13=Entry.get(E10);L14=Entry.get(E11); L15=Entry.get(E12);L16=Entry.get(E13)
#Преобразовать тип данных (строковую переменную в числовую)
L2=int(L2); L3=int(L3)
#Арифметические операции
if L4 == "+":L5=L2+L3
if L4 == "-":L5=L2-L3
if L4 == "*":L5=L2*L3
if L4 == "/":L5=int(L2/L3)
#Перевести в 2-ную систему счисления
L7=bin(L2); L8=bin(L3);L9=bin(L5)
#Перевести в 8-ную систему счисления
L11=oct(L2);L12=oct(L3);L13=oct(L5)
#Перевести в 16-ную систему счисления
L15=hex(L2); L16=hex(L3); L17=hex(L5)
#Занести полученный результат (10 с/с) в текстовое окно E4
Entry.insert(E4,0,L5)
#Занести полученные результаты (2 с/с) в текстовые окна E5,E6,E7
Entry.insert(E5,0,L7);Entry.insert(E6,0,L8);Entry.insert(E7,0,L9)
#Занести полученные результаты (8 с/с) в текстовые окна E8,E9,E10
Entry.insert(E8,0,L11);Entry.insert(E9,0,L12);Entry.insert(E10,0,L13)
#Занести полученные результаты (16 с/с) в текстовые окна E11,E12,E13
Entry.insert(E11,0,L15);Entry.insert(E12,0,L16); Entry.insert(E13,0,L17)
#Полученный результат выдать в окне выполнения программы
print("Исходные данные и результат в десятичной системе: ")
print(L2,L3,L5)
print("Исходные данные и результат в двоичной системе:")
print(L7,L8,L9)
print("Исходные данные и результат в восьмеричной системе:")
print(L11,L12,L13)
print("Исходные данные и результат в шестнадцатеричной системе:")
print(L15,L16,L17);print()
#Для выполнения следующей арифметической операции в текстовые окна E4, E5
#E6, E7, E8, E9, E10, E11, E12, E13 занести пробелы между числами
Entry.insert(E4,0," ")
Entry.insert(E5,0," ");Entry.insert(E6,0," ");Entry.insert(E7,0," ")
Entry.insert(E8,0," ");Entry.insert(E9,0," ");Entry.insert(E10,0," ")
Entry.insert(E11,0," ");Entry.insert(E12,0," "); Entry.insert(E13,0," ")
#Создать интерфейс для десятичной системы счисления
#Создать 6 компонентов Label (метка): название, № позиций (строка, столбец)
#Позиции устанавливаются с помощью функции grid()
L1=Label(top,text="Перевод чисел",).grid(row=0,column=1)
L1=Label(top,text="Десятичная система счисления",).grid(row=1,column=1)
L2=Label(top,text="Первое число",).grid(row=2,column=1)
L3=Label(top,text="Второе число",).grid(row=2,column=2)
L4=Label(top,text="Операция",).grid(row=2,column=3)
L4=Label(top,text="Результат",).grid(row=2,column=4)
#Для ввода информации создать 4 компонента Entry (текстовое окно)
E1=Entry(top,bd =5);E1.grid(row=3,column=1)
E2=Entry(top,bd =5);E2.grid(row=3,column=2)
E3=Entry(top,bd =5);E3.grid(row=3,column=3)
E4=Entry(top,bd =5);E4.grid(row=3,column=4)
#Создать интерфейс для двоичной системы счисления
#Создать 4 компонента Label (метка): название, № позиций (строка, столбец)
#Позиции устанавливаются с помощью функции grid
L6=Label(top,text="Двоичная система счисления",).grid(row=5,column=1)
L7=Label(top,text="Первое число",).grid(row=6,column=1)
L8=Label(top,text="Второе число",).grid(row=6,column=2)
L9=Label(top,text="Результат",).grid(row=6,column=4)
#Для ввода информации создать 3 компонента Entry (текстовое окно)
E5=Entry(top,bd =5);E5.grid(row=7,column=1)
E6=Entry(top,bd =5);E6.grid(row=7,column=2)
E7=Entry(top,bd =5);E7.grid(row=7,column=4)
#Создать интерфейс для восьмеричной системы счисления
#Создать 4 компонента Label (метка): название, № позиций (строка, столбец)
#Позиции устанавливаются с помощью функции grid
L11=Label(top,text="Восьмеричная система счисления",).grid(row=11,column=1)
L11=Label(top,text="Первое число",).grid(row=12,column=1)
L12=Label(top,text="Второе число",).grid(row=12,column=2)
L13=Label(top,text="Результат",).grid(row=12,column=4)
#Для ввода информации создать 3 компонента Entry (текстовое окно)
E8=Entry(top,bd =5);E8.grid(row=13,column=1)
E9=Entry(top,bd =5);E9.grid(row=13,column=2)
E10=Entry(top,bd =5);E10.grid(row=13,column=4)
#Создать интерфейс для шестнадцатеричной системы счисления
#Создать 4 компонента Label (метка): название, № позиций (строка, столбец)
#Позиции устанавливаются с помощью функции grid
L15=Label(top,text="Шестнадцатеричная система счисления",).grid(row=14,column=1)
L15=Label(top,text="Первое число",).grid(row=15,column=1)
L16=Label(top,text="Второе число",).grid(row=15,column=2)
L17=Label(top,text="Результат",).grid(row=15,column=4)
#Для ввода информации создать 3 компонента Entry (текстовое окно)
E11=Entry(top,bd =5);E11.grid(row=16,column=1)
E12=Entry(top,bd =5);E12.grid(row=16,column=2)
E13=Entry(top,bd =5);E13.grid(row=16,column=4)
#Создать командную кнопку Button, ввести её название - Выполнить
B=Button(top,text="Выполнить",command = process).grid(row=22,column=3)
#Для работы с окнами (без функции mainloop() на экране проект не отобразится)
top.mainloop()
14.3. Тестовые примеры (таблица входных и выходных данных)
Первое число |
Второе число |
Операция |
Результат |
Тестовый пример № 1 |
|||
12 |
3 |
+ |
15 |
1100 |
11 |
|
1111 |
14 |
3 |
|
17 |
c |
3 |
|
f |
Тестовый пример № 2 |
|||
12 |
3 |
* |
36 |
1100 |
11 |
|
100100 |
14 |
3 |
|
44 |
c |
3 |
|
24 |
§ 15. Компьютерный эксперимент
1. Войти в программную среду Пайтон, выполнив команды File – New File.
2. В текстовом редакторе набрать исходный модуль программы (скрипт).
3. Запустить программу на выполнение: Run – Run Module (F5).
4. В появившемся окне сохранить модуль, указав имя программы и место сохранения:
5. Ввести значения первого и второго числа, арифметическую операцию и нажать на командную кнопку Выполнить. Результат будет получен как на форме (рис.1, рис.2), так и в окне программной среды (рис. 3).
Рис. 1. Операция сложения и перевод чисел из десятичного эквивалента в другие системы счисления на форме
Рис. 2. Операция умножения и перевод чисел из десятичного эквивалента в другие системы счисления на форме
Рис. 3. Окно выполнения программы с арифметическими операциями (сложение, умножение, деление и вычитание)
§ 16. Анализ полученных результатов
Во всех системах счисления (кроме десятичной) в полученных результатах числа обозначены префиксами (начало), которые указывают на использованную систему счисления:
• 0b ® соответствует двоичной системе счисления (b ® binary);
• 0o ® соответствует восьмеричной системе счисления (o ® octal);
• 0x ® соответствует шестнадцатеричной системе счисления (x ® hexadecimal).
После ввода двух целых положительных чисел, арифметической операции и нажатия на кнопку Выполнить в окне выполнения на форме в соответствующих текстовых окнах появятся полученные результаты (рис. 1). Удалив информацию (исходные данные, знак операции) в первой строке (десятичная система счисления), можно заново ввести два числа (или оставить предыдущие), ввести знак другой операции и вновь нажать на кнопку Выполнить. В этом случае появятся новые результаты выполнения программы. На форме в окнах для систем счисления (рис. 2) новые результаты появятся с левой стороны; предыдущий результат сохраняется и сдвигается через пробел вправо. В окне выполнения программы в среде программирования исходные данные и результат выданы отдельными блоками (рис. 3).
Таким образом, рассмотренный вариант работы на языке программирования Python для проектирования программ с графическим интерфейсом можно применять на уроках информатики в старших классах инженерного, информационно-технологического, физико-математического и естественно-научного профилей.
Заключение
В данной работе показано проектирование программы с графическим интерфейсом. Приведены примеры арифметических операций с целыми положительными числами и последующим переводом десятичных чисел в эквиваленты компьютерных систем счисления.
В ходе разработки проекта получены дополнительные знания по теме “Компьютерные системы счисления”. Проведённый компьютерный эксперимент наглядно показывает практическую значимость проведённых исследований.
Python – современный высокоуровневый профессиональный язык программирования, изучение которого начинается в профильных классах общеобразовательных учреждений (элективные занятия по курсу: “Программирование”) на примере использования не только его основных конструкций, но и его основных объектов и их свойств, что достаточно наглядно показано в данной работе.
Список использованных источников и литературы
1. Tkinter — создание графического интерфейса в Python [Электронный ресурс]. – Режим доступа: https://python-scripts.com/tkinter.
2. Делаем первое программное обеспечение на Python [Электронный ресурс]. – Режим доступа: https://arduinoplus.ru/delaem-po-na-python/.
3. Информатика (базовый и углублённый уровни) (в 2 частях). 10 класс. Ч. 1 : учебник / К.Ю. Поляков, Е.А. Еремин. – М. : БИНОМ. Лаборатория знаний, 2019. – 352 с.: ил.
4. Информатика. 11 класс (базовый и углублённый уровни) (в 2 частях): учебник. Ч. 2 / К.Ю. Поляков, Е.А. Еремин. – М. : БИНОМ. Лаборатория знаний, 2019. – 304 с.: ил.
5. Исследование информационных моделей. Элективный курс: Учебное пособие / Н.Д. Угринович – М.: БИНОМ. Лаборатория знаний, 2004. – 183 с.
6. Компьютерные системы счисления [Электронный ресурс]. – Режим доступа:https://translated.turbopages.org/proxy_u/en-ru.ru.f7b511a8-678b7043-eaee4213-74722d776562/https/www.tutorialspoint.com/computer_fundamentals/computer_number_system.htm
7. Практикум по информатике и информационным технологиям: Учебное пособие для общеобразовательных учреждений / Н. Д. Угринович, Л. Л. Босова, Н. И. Михайлова. – М.: БИНОМ. Лаборатория знаний, 2005. – 394 с.: ил.
Программное обеспечение
1. Операционная система Windows 10
2. Среда программирования Python – 3.8.0
3. Приложение Microsoft Office Word 2016