[Предыдущая страница]       [Просмотр исходного кода]       [Страница учителя Усольцева Б.М.]         [Сайт Равнецкой школы]

 

Создание арифметического калькулятора

Работа ученика 8 класса Садыкова Козбая.

1. Мотивы создания программы.

            а. Интерес. После знакомства компьютерными программами всемирно известных фирм в качестве пользователя мне захотелось понять, как устроены эти продукты изнутри. Но их внутренняя механика скрыта и недоступна обычному пользователю. Возник вопрос: как туда проникнуть. Доступные мне источники (Интернет, книги, учителя) давали один ответ: надо изучать языки программирования. Оказалось, что изучение программирования достаточно увлекательное дело, однако, занимаясь им, постоянно сталкиваешься с неожиданными препятствиями и попадаешь в какие-то тупики, поиски выхода из которых требуют массу времени и усилий.

            б. Получение полезного продукта. Для освоения ремесла программиста надо решить множество элементарных учебных задач. Чтобы они решались не ради самого процесса решения, а как кирпичики складывались бы в нечто существенное, автор задумал частные решения объединить в один проект «Калькулятор». Создаваемый калькулятор должен был обладать всеми функциями стандартного калькулятора Windows, но иметь другой стиль, более удобный ученикам 7-8 класса школы.

            в. Выяснение собственных возможностей. Когда я впервые увидел программный текст, то устрашающее нагромождение символов показалось мне запредельной абракадаброй абсолютно недоступной обычному человеку. Потом я заметил, что слова и строки загадочного текста располагаются в каком-то особом порядке, фрагменты кода  иногда повторяются, и это таинственное  послание машине несёт в себе внутреннюю красоту. Мне захотелось испытать свои силы: а смогу ли я осмысленно писать хоть нечто отдалённо подобное.

2.Выбор языка

(конспект разных источников)

а. Вместо введения. Программа – это инструкция для компьютера. Она пишется на понятном для компьютера языке. Человек, который пишет программу, является программистом, а человек, который пользуется готовыми программами – пользователем.

Сравнивая с человеком, знающим иностранные языки, можно говорить, что компьютер разговаривает на нескольких языках. Но ни один из них для компьютера родным не является. У компьютера есть свой собственный родной язык - машинный, на котором уже десятки лет никто из людей не программирует. На этом языке писались самые первые программы, его основные элементы – это нули и единицы. Машинный язык невероятно труден для человека, поэтому вместо машинных языков были созданы машинно-ориентированные языки — ассемблеры. В них вместо длинных последовательностей нулей и единиц люди используют мнемонические (удобные для памяти) команды.

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

Для создания языка среднего уровня Си программисты использовали уже существующие ассемблеры. Совершенствуя язык Си, программисты создали три языка программирования, похожие на Си,  это - С++, Java и С#, на одном  из вариантов Си написаны современные операционные системы Windows 95,  Windows 98,  Windows XP, Unix и Linux. Программы, написанные на Си намного короче и их проще читать, чем аналогичные ассемблеровские, но они достаточно велики и работают медленнее.

Языки высокого уровня используют некоторые слова разговорного языка (как правило, английского) и общепринятые математические символы. Тем самым они имитируют естественные языки, и поэтому они наиболее удобны для человека.  С их помощью  можно писать программы до нескольких тысяч строк длиной. Однако легко понимаемый в коротких программах, этот язык становился нечитаемым и трудно управляемым, когда дело касалось больших программ. Решение этой проблемы пришло после изобретения языков структурного программирования. Были введены процедуры и функции. К примеру, если есть задача, которая выполняется несколько раз, то ее можно объявить как функцию или процедуру и в выполнении программы просто вызывать ее. Общий код программы в данном случае становится меньше.

Для первых опытов в программировании я выбрал язык Visual Basic.NET, который входит в состав пакета Microsoft Visual Studio 2005 и имеет общую платформу .NET Framework с языками Си и Java.

            б. Почему Visual Basic.NET. Просматривая Интернет страницы, я обнаружил много противоречивых и даже взаимоисключающих суждений на тему: какой язык лучше. Настораживали уничижительные суждения некоторых программистов о языке Basic. Действительно первоначально  Basic был создан, именно, как язык для обучения программированию, но затем имел длительную эволюцию и породил множество версий и диалектов. А когда за Basic взялась компания Microsoft, он получил качественный скачок и, сохранив врождённую легкость синтаксиса, стал визуальным объектно-ориентированным языком профессионального программирования. По некоторым данным в США до 60% прикладных программ писалось на Visual Basic. Последняя версия Visual Basic получившая приставку.NET по мнению многих программистов является по сути новым языком высокого уровня.

            Итак, почему же Visual Basic.NET? Плюсы:

            - Простой синтаксис, позволяющий быстро освоить язык.

            - Возможность сравнительно быстро создать приложение под Windows.

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

            - Близкий родственник VBA (Visual Basic for Application) является языком программирования в пакете Microsoft Office.

            -Другой родственник VBscript можно использовать для написания сценариев в HTML-страницах.

 

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

 

При создании программы можно выделить следующие этапы

      - Создание интерфейса (размещение контролов на форме и задание их свойств)

                  - Написание кода

                  - Тестирование и отладка программы

                  - Создание дистрибутива для переноса программы на другие компьютеры.       

3. Создание интерфейса

а. Основная идея

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

Ввод чисел осуществляется только в поле А. После ввода первого числа следует нажать клавишу «Вверх», в результате число из поля А переместится в поле В, а поле А обнулится и станет доступно для ввода второго числа. После ввода обоих чисел нажимается кнопка с двухкомпонентным действием – это 4 кнопки арифметических действий и кнопка , возводящая число в произвольную степень. Результат двухкомпонентного действия  отображается в поле А, а поле В обнуляется. У пользователя возникает эффект, как будто 2 компонента слились в один результат.

При однокомпонентном действии (возведение в квадрат, извлечение квадратного корня, смена знака числа) и само число и результат действия остаются в поле А.

Две кнопки с диагональными стрелками отправляют число из поля А в память и обратно. При чем при взятии числа из памяти в поле А предыдущее содержимое услужливо поднимается в поле В.

            3б. Дополнительные функции

            Кроме чисто вычислительных функций, калькулятор «Восьмиклассник» умеет:

  1. Решать квадратные уравнения. Для этого надо щелкнуть на кнопке с трехчленом и в открывшейся форме ввести коэффициенты в соответствующие поля.
  2. Связываться с другими приложениями  Windows, например, Word, Excel через буфер обмена.
  3. Становиться полупрозрачным. Для изменения прозрачности калькулятора надо сдвинуть ползунок слайдера, находящегося у правого края формы. Эта функция может быть весьма полезной при совместной работе калькулятора с документами Word, Excel  и т. д.   
  4. Выходить в интернет. Через пункт меню «Помощь» открывается справка, расположенная по адресу:  http://tutor-ub.narod.ru/sadykov/help1.htm. Дополнительная кнопка позволяет выйти на сайт моего учителя и через гиперссылки путешествовать по сети интернет.

            3в. Среда программирования

             Среда программирования  Visual Basic достаточно сложна и охватывает несколько десятков окон. При написании программы я использовал лишь самую малую часть имеющихся окон и средств. В основном я использовал окна  ToolBox, Properties Window, Solution Explorer и встроенный редактор кода.

 

 

            Наиболее часто употребляемые контролы находятся в разных вкладках окна ToolBox. Оттуда методом drag-and-drop я перетащил на форму кнопки (Button), текстовые окна

 (Textbox), надписи (Label), слайдеры (TrackBar), строку меню (MenuStrip). Некоторые повторяющиеся контролы, например кнопки я размножал методом копирования.

            Каждый контрол имеет много свойств, которым присваиваются нужные значения. Присвоение значений можно производить двумя путями:

1.      Перемещая контрол по форме, мы задаем координаты его положения (Location) в окне. Протягивая за маркеры его размеры мы задаем значение его свойств Width (длина) Height (высота). Эти значения Visual Basic. автоматически записывает в код.  

2.      Часть свойств определяется записью в таблицу значений, которая находится в окне свойств Properties Window. Наиболее часто я менял значения свойств Name, Text, TabIndex, Tag, BackColor, Font.

Часть свойств я оставлял заданными по умолчанию (by default), часть свойств менялось в окне кода.

 

4. Написание кода

            Весь код моей программы состоит из составных частей. Эти части называются процедуры. Каждая процедура обрабатывает какое-то событие. Например кнопка имеет такие события, как щелчок на кнопке (Click), появление курсора над кнопкой (MouseEnter), переход курсора с кнопки на другой объект (MouseLeave).

 

Пример №1:

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

Private Sub btnPlus_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPlus.Click

        txtRez.Text = txtA.Text + txtB.Text   

    End Sub

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

txtRez.Text = CSng(txtА.Text) + CSng(txtВ.Text).

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

            Пример №2:

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

Private Sub bt7_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles bt7.Click

        txtRez.Text = txtRez.Text + bt7.Text

    End Sub

 

 

 

Пример №3:

Всего для ввода любого числа потребуется 10 цифровых процедур, одна процедура для ввода десятичной запятой и еще одна для смены знака. В первых вариантах «Восьмиклассника» мой код таким и был. Для оптимизации кода аналогичные процедуры обрабатывающие одно и тоже событие можно объединить в одну(смотри ниже):

Private Sub Digit(ByVal sender As Object, ByVal e As System.EventArgs) Handles bt1.Click, _

    bt0.Click, bt2.Click, bt3.Click, bt4.Click, bt5.Click, bt6.Click, bt7.Click, bt8.Click, bt9.Click, _

    btnComma.Click, btnSign.Click

 

        Dim objButtonDigit As Button

        objButtonDigit = sender

 

        Select Case objButtonDigit.Tag

            Case "comma"

                If (txtRez.Text).IndexOf(",") = -1 Then

                    txtRez.Text = txtRez.Text & ","

                Else

                    txtRez.Text = txtRez.Text

                End If

            Case "sign"

                txtRez.Text = CSng(txtRez.Text) * (-1)

            Case Else

                If txtRez.Text = "0" Then

                    txtRez.Text = objButtonDigit.Text

                Else

                    txtRez.Text = txtRez.Text + objButtonDigit.Text

                End If

        End Select

    End Sub

Поясню код процедуры. В заголовке процедуры после служебного слова Handles (обрабатывает)  перечисляются все обрабатываемые контролы с указанием их события.

Далее декларируется создание некого объекта, которому присваивается тип кнопки

        Dim objButtonDigit As Button

А строкой objButtonDigit = sender мы обязываем этот объект играть роль всех кнопок. Рассмотренная процедура обрабатывает только кнопки ответственные за ввод числа: цифры, знак, запятая. В полном тексте исходного кода в эту процедуру я включил обработка кликов на всех без исключения кнопках. Для идентификации кнопок в структуре Select Case использовано свойство tag, которому программист может присвоить любое значение. Любопытно, что в версии Visual Basic 6.0 обработка нескольких контролов в одной процедуре была организована иначе: через массив контролов.

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

 

Список литературы

1. Лукин С.Н. Понятно о Visual Basic.NET. Москва. Диалог-МИФИ. 2005

2. Зак Д. Самоучитель Visual Basic.NET. СПб. Питер. 2003.

3. Трусов М.Н. Visual Basic.NET практическое руководство для начинающего программиста. NT-Press. Москва. 2006

4. Интерактивный учебник по Visual Basic.NET от Майкрософт. 2010

                        http://msdn.microsoft.com/ru-ru/library/90h82b3x(VS.90).aspx

 

 

[Предыдущая страница]       [Просмотр исходного кода]       [Страница учителя Усольцева Б.М.]         [Сайт Равнецкой школы]

Сайт управляется системой uCoz