Исследовательская работа Создание приложения для устройств с ОС Android


Муниципальное бюджетное образовательное учреждение
«Средняя школа №17»
Секция «Прикладная информатика»Создание приложения для мобильных устройств с ОС Android «Numeral System Trainer»
Автор: Викторов Александр,
учащийся 11 «А» класса
МБОУ «Средняя школа №17»
Руководитель: Максимова О.В.,
учитель информатики высшей категорииМБОУ «Средняя школа №17»
г. Дзержинск
2017 г.
Содержание:
Введение 3
Глава I. Теоретические основы создания приложения «Numeral System Trainer» 4
Язык программирования JAVA 4
Язык свободного описания структур документов XML 5
Android Studio 6
Глава II. Создание приложения«Numeral System Trainer» на языке программирования Java и языке свободного описания структур документов XML 9
Назначение и условия применения программы 9
Описание приложения «Numeral System Trainer» 9
Заключение 11
Список использованной литературы 12
Приложения 13
Введение
Чтобы работать с числами, необходимо уметь называть и записывать их. К представлениям о числе, исчислимости предметов люди приходят через иные представления — о том, что такое величина; количество; множество и единичность; сравнимость и несравнимость. В формировании представлений о числах участвуют операции измерения, сводящаяся к отношениям «больше» или «меньше» для двух или более предметов; логическая операция «обобщение понятий».
Измерение величин есть соотнесение человеком размеров частей своего тела с другими предметами, своих шагов, прыжков с покрываемыми расстояниями. Измерение есть прикладывание человеком частей своего тела к измеряемому предмету. Например, русское слово «дюйм» происходит от голландского DUIM, буквально означающего «большой палец». Один дюйм равен 25,4 мм. Английский фут (FOOT переводится как «ступня») равен 304,8 мм.
Итак, во внешнем мире существуют предметы, величины которых можно сравнивать. Числа изобретены человеком и существуют только в головах людей. Цифры — символические записи чисел, иначе: цифры — знаки чисел.
Способ наименования и записи чисел принято называть системой счисления. Иначе: системы счисления — это способ изображения чисел и соответствующие ему правила действия над числами.
Системы счисления активно используются в информационных технологиях, поэтому моя работа актуальна в наше время.
Целью данной работы является разработка приложения для мобильных устройств с ОС Android, которое позволяет производить вычисления в различных системах счисления, знакомит с теоретическими основами перевода чисел из одной системы счисления в другую и позволяет проверять свои практические навыки по переводу.
Объект исследования — перевод чисел из одной системы счисления в другую и выполнения простейших арифметических действий над ними.
Задачи исследования:
Познакомиться с языком программирования Java и языком свободного описания структур документов XML, а также средой программирования Android Studio.
Рассказать об основных этапах создания приложения под ОС Android.
Представить, написанную мною программу. Объяснить принцип ее работы и среду применения.

Глава I. Теоретические основы создания приложения «Numeral System Trainer»
Приложение «Numeral System Trainer»было написано в среде разработки Android Studio. Работа в данной среде программирования осуществляется на двух языках: Java и XML.
-461010338455Язык программирования JAVA
Язык программирования Java – это высокоуровневый объектно-ориентированный язык, разработанный в компании Sun Microsystems.
С момента появления языка Java его возможности и сферы использования значительно увеличились.
Программы на Java  транслируются  в  байт-код, выполняемый виртуальной машиной Java (JVM) — программой, обрабатывающей байтовый код и передающей инструкции оборудованию как интерпретатор.
Достоинством подобного способа выполнения программ является полная независимость байт-кода от операционной системы и оборудования, что позволяет выполнять Java-приложения на любом устройстве, для которого существует соответствующая виртуальная машина. Другой важной особенностью технологии Java является гибкая система безопасности, в рамках которой исполнение программы полностью контролируется виртуальной машиной. Любые операции, которые превышают установленные полномочия программы (например, попытка несанкционированного доступа к данным или соединения с другим компьютером), вызывают немедленное прерывание.
Часто к недостаткам концепции виртуальной машины относят снижение производительности, но ряд усовершенствований несколько увеличил скорость выполнения программ на Java.
Основные операторы языка Java
Простейшие арифметические операции:

Операции сравнения:

Язык свободного описания структур документов XML
260604017780XML – это язык свободного описания структур документов. То есть, если мы хотим, чтобы в документе присутствовал какой-либо элемент, то мы для него определяем некоторый тег (маркер в тексте). Например, для описания элемента «текстовая строка» можно условиться использовать тег, где первая метка указывает начало описания элемента, а вторая (со знаком /) - конец описания. Между парой тегов помещается сам элемент. Для каждого элемента применяется своя пара тегов, при этом однотипные элементы описываются одинаковой парой тегов. Таким образом, для описания двух строк нам нужны две пары тегов:
<string> это первая строка </string> и
<string> это вторая строка</string>
В открывающем теге можно поместить атрибуты описываемого элемента, такие как цвет, размер, начертание, выравнивание и т.п., то есть описать особенности формируемого элемента. Атрибут — это свойство описываемого элемента. При этом у однотипных элементов полный набор атрибутов будет совпадать, но в описании можно использовать не все свойства.
Правила построения XML-документа
Каким бы свободным не был стиль XML-документа, все-таки существуют правила его формирования.
В языке XML все теги парные. Это значит, что у каждого открывающего тега обязательно должен присутствовать закрывающий тег. Это правило позволяет описывать вложенные экземпляры, то есть помещать внутри одного элемента другие. Если тело тега пусто, то два тега записываются в один, который завершается косой чертой:
< string color = “red” align = “center”/>.
Документ должен содержать строку заголовка, в которой указывается версия языка и используемая текстовая кодировка:
<?xml version="1.0" encoding="utf8"?>
Имена тегов должны начинаться с буквы или символа «_» с соблюдением регистра, поскольку XML различает регистры.
Для реализации возможности одинаковых имен элементов для различающихся структур используют понятие пространства имен. Чтобы различать схемы документов, для каждой из них ставится в соответствие специальный уникальный идентификатор ресурса или URI. В результате схемы будут считаться тождественными только в том случае, если уникальные идентификаторы будут совпадать. В связи с этим в качестве идентификатора чаще всего используется адрес своего (возможно, несуществующего) ресурса. Пространство имен определяется благодаря атрибуту xmlns в начальном теге элемента:
< string xmlns:string="http://my_strings/styles/new" … > …</string>
В XML-тексте комментарии выделяются тегами :
<!-- текст, не читаемый анализатором документа -->.
Android Studio
Android – свободно распространяемая, активно развивающаяся операционная система (ОС) для мобильных устройств. Эта ОС основана на ядре Linux 2.6, включая прикладное программное обеспечение. Первая устойчивая версия Android 1.0 была выпущена 23 сентября 2008 года. На сегодняшний день Android - самая распространенная система для мобильных устройств. Изначально ОС разрабатывалась компанией Android Inc., которую затем купила Google. Google в альянсе c Open Handset Alliance (OHA) занимается поддержкой и дальнейшим развитием платформы Android. Инструментарий программной разработки Android SDK находится в свободном доступе и включает в себя интерфейсы прикладного программирования (API) на языке Java. Для разработки под android чаще всего использут IDE Eclipse с плагином ADT (Android Developer Tools) или Android Studio, в состав этих сред разработки включены все необходимые инструменты. С декабря 2014 года компания Google официально объявила о прекращении поддержки плагина ADT и переходе на Android Studio.
32016701108075-38101100455Android Studio — это интегрированная среда разработки (IDE) для работы с платформой Android, анонсированная 16 мая 2013 года на конференции GoogleI/O.

Приложения
Платформа Android не различает по правам предустановленные и сторонние приложения, что позволяет менять программную конфигурацию устройства, в том числе на самостоятельно разработанные. Основным языком разработки под Android является Java, однако, можно так же использовать другие языки программирования, например, С++. Все функциональные возможности системы открыты, так же имеется возможность создания новых компонент.
Система приложений включает различные службы, курирующие работу составляющих системы (Activity Manager, Resource Manager и другие).
Activity Manager — диспетчер активности, который отвечает за функционирование приложения и его жизненный цикл.
Resource Manager — диспетчер ресурсов необходим для доступа к используемым внутренним ресурсам (строковым, графическим и т.п.).
Библиотеки
Кроме стандартных SLD (2D графика), OpenGL (3D графика), Media Framework (мультимедиа), WebKit (встроенный браузер), FreeType (поддержка шрифтов), SQLite (работа с базой данных), SSL (зашифрованные соединения), разработчики Android создали собственную версию стандартной библиотеки С/С++ - библиотеку Bionic (не поддерживаются исключения С++ и несовместима с GNU libs и POSIX).
Активности
Каждая Активность – это экран (по аналогии с web-формой), который приложение может показывать пользователям. Чем сложнее создаваемое приложение, тем больше экранов (Активностей) потребуется. При создании приложения потребуется, как минимум, начальный (главный) экран, который обеспечивает основу пользовательского интерфейса приложения. При необходимости этот интерфейс дополняется второстепенными Активностями, предназначенными для ввода информации, ее вывода и предоставления дополнительных возможностей. Запуск (или возврат из) новой Активности приводит к «перемещению» между экранами UI.
Состояния Активностей
Активности могут находиться в одном из четырех возможных состояний:
Активное (Active). Активность находится на переднем плане (на вершине стека) и имеет возможность взаимодействовать с пользователем. Android будет пытаться сохранить ее работоспособность любой ценой, при необходимости прерывая работу других Активностей, находящихся на более низких позициях в стеке для предоставления необходимых ресурсов. При выходе на передний план другой Активности работа данной Активности будет приостановлена или остановлена.
Приостановленное (Paused). Активность может быть видна на экране, но не может взаимодействовать с пользователем: в этот момент она приостановлена. Это случается, когда на переднем плане находятся полупрозрачные или плавающие (например, диалоговые) окна. Работа приостановленной Активности может быть прекращена, если ОС необходимо выделить ресурсы Активности переднего плана. Если Активность полностью исчезает с экрана, она останавливается.
Остановленное (Stopped). Активность невидима, она находится в памяти, сохраняя информацию о своем состоянии. Такая Активность становится кандидатом на преждевременное закрытие, если системе потребуется память для чего-то другого. При остановке Активности разработчику важно сохранить данные и текущее состояние пользовательского интерфейса (состояние полей ввода, позицию курсора и т. д.). Если Активность завершает свою работу или закрывается, он становится неактивным.
Неактивное (Inactive). Когда работа Активности завершена, и перед тем, как она будет запущена, данная Активности находится в неактивном состоянии. Такие Активности удаляются из стека и должны быть (пере)запущены, чтобы их можно было использовать.
135826582550

Глава II. Создание приложения «Numeral System Trainer» на языке программирования Java и языке свободного описания структур документов XML
1.Назначение и условия применения программы
Программный продукт «Numeral System Trainer» предназначен для перевода чисел из одной системы счисления в другие системы счисления, для выполнения арифметических операции с числами, записанными в различных системах счисления, а также для проверки практического навыка перевода чисел из одной системы счисления в другую.
«Numeral System Trainer» реализует следующие функции:
предоставление наглядного материала (теория с примерами) по переводу систем счислений;
предоставление наглядного материала (теория с примерами) по выполнению арифметических операций с системами счислений;
предоставление примеров сформированных случайным образом, для проверки практических навыков по переводу чисел из одной системы счисления в другую;
осуществление арифметических операций для чисел, представленных в различных системах счисления (пользователь может задать любое число и указать основание системы счисления).
2.Описание приложения «Numeral System Trainer»
В разработанном мной приложении четыре основных раздела (Рис. 1):
Тренажер (Рис. 6, 7, 8, 9);
Калькулятор (Рис. 10);
Теория (Рис. 3, 4, 5);
Инструкция (Рис.2).
После установки приложения, на экране мобильного устройства появляется ярлык.
Рассмотрим подробнее каждый из разделов.
Тренажер. В нем можно практиковаться в умении выполнять арифметические действия над числами в разных системах счисления. Ответ выводится в десятичной системе счисления. Если зананный пример на вычисление частного, то ответ выводится до трех знаков после запятой. Рис.
Для проверки правильности вычисления, можно не только сразу увидеть ответ, но и ввести свой для проверки.
Калькулятор. Выполняет арифметические действия над числами (необязательно целыми) в разных системах счисления (от двоичной до шестнадцатеричной).
Пользователь имеет возможность задать число, указать основание системы счисления и получить ответ в десятичной системе счисления. В меню калькулятора заданы основные арифметические операции:
Сумма чисел;
Разность чисел;
Произведение чисел;
Частное чисел.
Теория. В этом разделе объясняются принципы перевода чисел из одной системы счисления в другую, а также выполнения арифметических операций над этими числами.
Инструкция. Здесь прописаны некоторые особенности данного приложения, а также дано подробное описание каждого раздела программы.

Заключение
В результате разработки приложения «Numeral System Trainer» была достигнута цель исследования и решены поставленные задачи: изучен материал по системам счисления, разработано приложение, соответствующее предъявленным в начале работы требованиям.
Программа легко может применяться в учебных целях, при обучении школьников и студентов, а также для проведения необходимых калькуляций.
Эта программа широко используется мной и моими одноклассниками в учебных целях. Она очень сильно помогает, когда нужно быстро произвести арифметические действия над числами в разных системах счисления, также можно проверить свои знания в решении таких задач. В дальнейшем я продолжу работу над приложением и планирую расширить спектр решаемых задач.
В мои планы входит добавление перевода чисел из одной системы счисления в другую, а также добавление окна регулирования сложности примеров, чтобы можно было выбрать, какие действия и системы счисления добавить или убрать.

Список литературы:
Информатика и информационные технологии. Учебник для 10-11 классов / Н.Д. Угринович. – 4-е изд. – М.:БИНОМ. Лаборатория знаний, 2007. – 511с.: ил.
YouTube – видеохостинг. Канал: “StartAndroid”. https://www.youtube.com/channel/UCzE7HcbvyEiS5ea1rVRbPLQYouTube –видеохостинг. Канал: “PRABEESH R K”.
https://www.youtube.com/channel/UCfQkNueQenRQQ1NnCBe6eQQСайт: “Освой программирование играючи”. Автор: Александр Климов.
http://developer.alexanderklimov.ru/android/Учебные материалы “IT ШКОЛА SAMSUNG” 2015 г. Основы программирования(Java). ООП. Разработка Android Приложений.
Сайт: “JAVAPORTAL”, статья: “Немного из истории: История возникновения Java”.
http://www.javaportal.ru/articles/historyJava.html
Сайт:“Хабрахабр”, статья:“Тайны кнопок в Android. Часть 1: Основы верстки.” Автор: Степан Фурдей.
http://habrahabr.ru/post/206012/Теоретические материалы и задачи курса “Программирование на Java”. Библиотечный класс Math. Псевдослучайные числа.
Приложение 1
Код приложения «Numeral System Trainer»
Код функционала для раздела калькулятор(Java):
packagecom.example.alexandr.NumeralSystemTrainer;
import android.content.pm.ActivityInfo;import android.content.res.ColorStateList;import android.graphics.Color;import android.support.annotation.ColorRes;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.AdapterView;import android.widget.ArrayAdapter;import android.widget.Button;import android.widget.EditText;import android.widget.Spinner;import android.widget.TextView;import android.widget.Toast;import com.example.alexandr.viproject.R;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;public class Calculator extends AppCompatActivityimplements View.OnClickListener { Spinner spinner; Spinner spinner2; Spinner spinner3;ArrayAdapter<CharSequence>adapter;ArrayAdapter<CharSequence>adapter1;final String LOG_TAG = “myLogs1”;final String FILENAME = “file1”;final String LOG_TAG2 = “myLogs2”;final String FILENAME2 = “file2”;final String LOG_TAG3 = “myLogs3”;final String FILENAME3 = “file3”;EditTextchis1;EditTextchis2;TextViewtextView;TextViewtextView4;TextViewtextView5;TextViewtextView6;TextViewtextView7;TextViewtextView8;TextViewtextView14;TextViewtextView16;//#48352f //#49c0f6@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_calculator); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//работатольковпортретномрежимеtextView= (TextView) findViewById(R.id.textView);textView4 = (TextView) findViewById(R.id.textView4);textView5 = (TextView) findViewById(R.id.textView5);textView6 = (TextView) findViewById(R.id.textView6);textView7 = (TextView) findViewById(R.id.textView7);textView8 = (TextView) findViewById(R.id.textView8);textView14 = (TextView) findViewById(R.id.textView14);textView16 = (TextView) findViewById(R.id.textView16);spinner = (Spinner) findViewById(R.id.spinner);spinner2 = (Spinner) findViewById(R.id.spinner2);//spinner3 = (Spinner) findViewById(R.id.spinner3);adapter = ArrayAdapter.createFromResource(this, R.array.numeral_systems1, android.R.layout.simple_spinner_item);adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);adapter1 = ArrayAdapter.createFromResource(this, R.array.numeral_systems2, android.R.layout.simple_spinner_item);adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);spinner.setAdapter(adapter);//спиннердляпервогочислаspinner2.setAdapter(adapter);//спиннердлявторогочисла // spinner3.setAdapter(adapter1);//спиннердляответаButton b1 = (Button) findViewById(R.id.plus); Button b2 = (Button) findViewById(R.id.minus); Button b3 = (Button) findViewById(R.id.umnog); Button b4 = (Button) findViewById(R.id.delenie); b1.setOnClickListener(this); b2.setOnClickListener(this); b3.setOnClickListener(this); b4.setOnClickListener(this);spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {@Overridepublic void onItemSelected(AdapterView<?> parent, View view, intposition, long id) {TextViewmyText = (TextView) view;// Toast.makeText(getBaseContext(),parent.getItemAtPosition(position)+” selected”,Toast.LENGTH_LONG).show();inty = position; String str = Integer.toString(y);writeFile(str);//Toast toast = Toast.makeText(getApplicationContext(), “Х” + position, Toast.LENGTH_LONG); //toast.show();((TextView) parent.getChildAt(0)).setTextColor(Color.BLACK); ((TextView) parent.getChildAt(0)).setTextSize(20); }@Overridepublic void onNothingSelected(AdapterView<?> parent) { } });spinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {@Overridepublic void onItemSelected(AdapterView<?> parent, View view, intposition, long id) {TextViewmyText = (TextView) view;// Toast.makeText(getBaseContext(),parent.getItemAtPosition(position)+” selected”,Toast.LENGTH_LONG).show();inty = position; String str = Integer.toString(y); writeFile2 (str);((TextView)parent.getChildAt(0)).setTextColor(Color.BLACK); ((TextView) parent.getChildAt(0)).setTextSize(20); }@Overridepublic void onNothingSelected(AdapterView<?> parent) { } });}public void onClick(View v) {//textView.setText(num1);chis1 = (EditText) findViewById(R.id.chis1); String numStr1 = chis1.getText().toString(); String chislo1 = numStr1;//double num1 = Double.parseDouble(chis1.getText().toString());chis2 = (EditText) findViewById(R.id.chis2); String numStr2 = chis2.getText().toString(); String chislo2 = numStr2;// double num2 = Double.parseDouble(chis2.getText().toString());String osnovanie = “0”;osnovanie = readFile(osnovanie); String osnovaniePerv=osnovanie;double osnovanieDob = Double.parseDouble(osnovanie.toString());intosnovanieInt1=(int)osnovanieDob;//преобразуемоснование 1 числавтипинтеджерString osnovanie2 = “0”; osnovanie2 = readFile2(osnovanie2); String osnovanieVtor = osnovanie2;double osnovanieDob2 = Double.parseDouble(osnovanie2.toString());intosnovanieInt2=(int)osnovanieDob2;//преобразуемоснование 2 числавтипинтеджерdouble Otvet = 0; String otvet = “0”;double ch1=0;double ch2=0;switch (osnovanieInt1){case 0: osnovanieInt1=2; ch1 = transfer(numStr1,osnovanieInt1);break;case 1: osnovanieInt1=3; ch1 = transfer(numStr1,osnovanieInt1);break;case 2: osnovanieInt1=4; ch1 = transfer(numStr1,osnovanieInt1);break;case 3: osnovanieInt1=5; ch1 = transfer(numStr1,osnovanieInt1);break;case 4: osnovanieInt1=6; ch1 = transfer(numStr1,osnovanieInt1);break;case 5: osnovanieInt1=7; ch1 = transfer(numStr1,osnovanieInt1);break;case 6: osnovanieInt1=8; ch1 = transfer(numStr1,osnovanieInt1);break;case 7: osnovanieInt1=9; ch1 = transfer(numStr1,osnovanieInt1);break;case 8: osnovanieInt1=10; ch1 = transfer(numStr1,osnovanieInt1);break;case 9: osnovanieInt1=11; ch1 = transfer(numStr1,osnovanieInt1);break;case 10: osnovanieInt1=12; ch1 = transfer(numStr1,osnovanieInt1);break;case 11: osnovanieInt1=13; ch1 = transfer(numStr1,osnovanieInt1);break;case 12: osnovanieInt1=14; ch1 = transfer(numStr1,osnovanieInt1);break;case 13: osnovanieInt1=15; ch1 = transfer(numStr1,osnovanieInt1);break;case 14: osnovanieInt1=16; ch1 = transfer(numStr1,osnovanieInt1);break; }switch (osnovanieInt2){case 0: osnovanieInt2=2; ch2 = transfer(numStr2,osnovanieInt2);break;case 1: osnovanieInt2=3; ch2 = transfer(numStr2,osnovanieInt2);break;case 2: osnovanieInt2=4; ch2 = transfer(numStr2,osnovanieInt2);break;case 3: osnovanieInt2=5; ch2 = transfer(numStr2,osnovanieInt2);break;case 4: osnovanieInt2=6; ch2 = transfer(numStr2,osnovanieInt2);break;case 5: osnovanieInt2=7; ch2 = transfer(numStr2,osnovanieInt2);break;case 6: osnovanieInt2=8; ch2 = transfer(numStr2,osnovanieInt2);break;case 7: osnovanieInt2=9; ch2 = transfer(numStr2,osnovanieInt2);break;case 8: osnovanieInt2=10; ch2 = transfer(numStr2,osnovanieInt2);break;case 9: osnovanieInt2=11; ch2 = transfer(numStr2,osnovanieInt2);break;case 10: osnovanieInt2=12; ch2 = transfer(numStr2,osnovanieInt2);break;case 11: osnovanieInt2=13; ch2 = transfer(numStr2,osnovanieInt2);break;case 12: osnovanieInt2=14; ch2 = transfer(numStr2,osnovanieInt2);break;case 13: osnovanieInt2=15; ch2 = transfer(numStr2,osnovanieInt2);break;case 14: osnovanieInt2=16; ch2 = transfer(numStr2,osnovanieInt2);break; }switch (v.getId()) {case R.id.plus:Otvet = ch1+ch2;otvet = Double.toString(Otvet);osnovaniePerv = Integer.toString(osnovanieInt1);osnovanieVtor = Integer.toString(osnovanieInt2);textView.setText(chislo1);textView4.setText(osnovaniePerv);textView5.setText(“ + “);textView6.setText(chislo2);textView7.setText(osnovanieVtor);textView8.setText(“ = “);textView14.setText(otvet);textView16.setText(“10”);break;case R.id.minus:Otvet = ch1-ch2;otvet = Double.toString(Otvet);osnovaniePerv = Integer.toString(osnovanieInt1);osnovanieVtor = Integer.toString(osnovanieInt2);textView.setText(chislo1);textView4.setText(osnovaniePerv);textView5.setText(“ – “);textView6.setText(chislo2);textView7.setText(osnovanieVtor);textView8.setText(“ = “);textView14.setText(otvet);textView16.setText(“10”);break;case R.id.umnog:Otvet = ch1*ch2;otvet = Double.toString(Otvet);osnovaniePerv = Integer.toString(osnovanieInt1);osnovanieVtor = Integer.toString(osnovanieInt2);textView.setText(chislo1);textView4.setText(osnovaniePerv);textView5.setText(“ * “);textView6.setText(chislo2);textView7.setText(osnovanieVtor);textView8.setText(“ = “);textView14.setText(otvet);textView16.setText(“10”);break;case R.id.delenie:Otvet = ch1/ch2;otvet = Double.toString(Otvet);osnovaniePerv = Integer.toString(osnovanieInt1);osnovanieVtor = Integer.toString(osnovanieInt2);textView.setText(chislo1);textView4.setText(osnovaniePerv);textView5.setText(“ / “);textView6.setText(chislo2);textView7.setText(osnovanieVtor);textView8.setText(“ = “);textView14.setText(otvet);textView16.setText(“10”);break; } }void writeFile(String y) {try {// отрываемпотокдлязаписиBufferedWriterbw = new BufferedWriter(new OutputStreamWriter(openFileOutput(FILENAME, MODE_PRIVATE)));// пишемданныеbw.write(y);// закрываемпотокbw.close();Log.d(LOG_TAG, “Файлзаписан”); } catch (FileNotFoundException e) {e.printStackTrace(); } catch (IOException e) {e.printStackTrace(); } }public String readFile(String t) {try {// открываемпотокдлячтенияBufferedReaderbr = new BufferedReader(new InputStreamReader(openFileInput(FILENAME))); String str = “”;// читаемсодержимоеwhile ((str = br.readLine()) != null) {Log.d(LOG_TAG, str); t = str; }// br.close();} catch (FileNotFoundException e) {e.printStackTrace(); } catch (IOException e) {e.printStackTrace(); }return t; }void writeFile2(String y) {try {// отрываемпотокдлязаписиBufferedWriterbw = new BufferedWriter(new OutputStreamWriter(openFileOutput(FILENAME2, MODE_PRIVATE)));// пишемданныеbw.write(y);// закрываемпотокbw.close();Log.d(LOG_TAG2, “Файлзаписан”); } catch (FileNotFoundException e) {e.printStackTrace(); } catch (IOException e) {e.printStackTrace(); } }public String readFile2(String t) {try {// открываемпотокдлячтенияBufferedReaderbr = new BufferedReader(new InputStreamReader(openFileInput(FILENAME2))); String str = “”;// читаемсодержимоеwhile((str = br.readLine()) != null) {Log.d(LOG_TAG2, str);t = str; }// br.close();} catch(FileNotFoundExceptione) {e.printStackTrace(); } catch(IOExceptione) {e.printStackTrace(); }eturn; }voidwriteFile3(Stringy) {try{// отрываемпотокдлязаписиBufferedWriterbw = newBufferedWriter(newOutputStreamWriter(openFileOutput(FILENAME3, MODE_PRIVATE)));// пишемданныеbw.write(y);// закрываемпотокbw.close();Log.d(LOG_TAG, “Файлзаписан”); } catch(FileNotFoundExceptione) {e.printStackTrace(); } catch(IOExceptione) {e.printStackTrace(); } }publicStringreadFile3(Stringt) {try{// открываемпотокдлячтенияBufferedReaderbr = newBufferedReader(newInputStreamReader(openFileInput(FILENAME3)));Stringstr = “”;// читаемсодержимоеwhile((str = br.readLine()) != null) {Log.d(LOG_TAG3, str);t = str; }// br.close();} catch(FileNotFoundExceptione) {e.printStackTrace(); } catch(IOExceptione) {e.printStackTrace(); }eturn; }publicdoubletransfer (Stringy, intosnovanie) {//функцияперевода //чиселизлюбойссвдесятичнуюdoublecount1 =0;//длядробнойчастиdoublecount = 0;//дляцелойчастиStringh=y;charm[] = h.toCharArray();//переводимстрокувмассивсимволовintrazmer = m.length;charm1[]=newchar[razmer];charcel[]=newchar[razmer];chardrob[]=newchar[razmer];intqw=0;for( qw = 0; qw<razmer;qw++){//массивцелойчастиif((m[qw]==’,’)||(m[qw]==’.’)){break; }else{cel[qw]=m[qw]; } }for (inti= 0 ; i<qw; i++) {//переворачиваеммассивцелойчастичислаm1[i]=cel[qw-i-1]; }for (inti= 0 ; i<qw; i++){if (m1[i]==’a’) {double t = Math.pow(osnovanie,i); count=count+(10*t); }else if (m1[i]==’b’){ count=count+(11*Math.pow(osnovanie,i)); }else if (m1[i]==’c’){ count=count+(12*Math.pow(osnovanie,i)); }else if (m1[i]==’d’) { count=count+(13*Math.pow(osnovanie,i)); }else if (m1[i]==’e’) { count=count+(14*Math.pow(osnovanie,i)); }else if (m1[i]==’f’) { count=count+(15*Math.pow(osnovanie,i)); }else{double x = Character.getNumericValue(m1[i]);double t = Math.pow(osnovanie,i); count=count+(x*t); } }if (qw<razmer){intqw1=qw+1;intt=0;int r=-1;for (qw1=qw+1;qw1<razmer;qw1++){//составляеммассивдробнойчастиdrob[t]=m[qw1];t++; }for (inti= 0 ; i<t; i++){if (drob[i]==’a’) { count1=count1+(10*Math.pow(osnovanie,r)); }else if (drob[i]==’b’){ count1=count1+(11*Math.pow(osnovanie,r)); }else if (drob[i]==’c’){ count1=count1+(12*Math.pow(osnovanie,r)); }else if (drob[i]==’d’) { count1=count1+(13*Math.pow(osnovanie,r)); }else if (drob[i]==’e’) { count1=count1+(14*Math.pow(osnovanie,r)); }else if (drob[i]==’f’) { count1=count1+(15*Math.pow(osnovanie,r)); }else{double x = Character.getNumericValue(drob[i]); count1=count1+(x*Math.pow(osnovanie,r)); } r--; }return count+count1; }return count; }}
XML-код для создания пользовательского интерфейса (калькулятор):
<?xml version=”1.0” encoding=”utf-8”?><LinearLayoutxmlns:android=”http://schemas.android.com/apk/res/android”xmlns:tools=”http://schemas.android.com/tools” android:layout_width=”match_parent”android:layout_height=”match_parent” android:paddingLeft=”@dimen/activity_horizontal_margin”android:paddingRight=”@dimen/activity_horizontal_margin”android:paddingTop=”@dimen/activity_vertical_margin”android:paddingBottom=”@dimen/activity_vertical_margin”tools:context=”com.example.alexandr.NumeralSystemTrainer.Calculator”android:background=”#c4edfe”android:weightSum=”1”android:orientation=”vertical”><LinearLayoutxmlns:android=”http://schemas.android.com/apk/res/android”xmlns:tools=”http://schemas.android.com/tools” android:layout_width=”623dp”android:layout_height=”70dp” android:paddingLeft=”@dimen/activity_horizontal_margin”android:paddingRight=”@dimen/activity_horizontal_margin”android:orientation=”vertical”android:weightSum=”1”android:layout_weight=”0.29”android:gravity=”left”android:background=”#c4edfe”><LinearLayoutandroid:layout_width=”316dp”android:layout_height=”30dp”android:orientation=”horizontal”><TextViewandroid:layout_width=”wrap_content”android:layout_height=”wrap_content”android:textAppearance=”?android:attr/textAppearanceLarge”android:id=”@+id/textView”android:textSize=”20dp”android:layout_weight=”0.00”android:textIsSelectable=”false”android:textColor=”#000000” /><TextViewandroid:layout_width=”22dp”android:layout_height=”29dp”android:id=”@+id/textView4”android:textSize=”14sp”android:phoneNumber=”false”android:textColor=”#0288D1” /><TextViewandroid:layout_width=”24dp”android:layout_height=”wrap_content”android:id=”@+id/textView5”android:textSize=”20dp”android:textColor=”#000000” /></LinearLayout><LinearLayoutandroid:layout_width=”316dp”android:layout_height=”30dp”android:orientation=”horizontal”><TextViewandroid:layout_width=”wrap_content”android:layout_height=”wrap_content”android:textAppearance=”?android:attr/textAppearanceLarge”android:id=”@+id/textView6”android:layout_weight=”0.00”android:textSize=”20dp”android:textColor=”#000000” /><TextViewandroid:layout_width=”wrap_content”android:layout_height=”wrap_content”android:id=”@+id/textView7”android:layout_weight=”0.00”android:textSize=”14dp”android:textColor=”#0288D1” /><TextViewandroid:layout_width=”wrap_content”android:layout_height=”wrap_content”android:textAppearance=”?android:attr/textAppearanceLarge”android:id=”@+id/textView8”android:layout_weight=”0.00”android:textSize=”20dp”android:textColor=”#000000”android:gravity=”left” /></LinearLayout><LinearLayoutandroid:layout_width=”316dp”android:layout_height=”30dp”android:orientation=”horizontal”><TextViewandroid:layout_width=”wrap_content”android:layout_height=”wrap_content”android:textAppearance=”?android:attr/textAppearanceLarge”android:id=”@+id/textView14”android:layout_weight=”0.00”android:textSize=”20dp”android:textColor=”#000000” /><TextViewandroid:layout_width=”wrap_content”android:layout_height=”wrap_content”android:textAppearance=”?android:attr/textAppearanceLarge”android:id=”@+id/textView16”android:layout_weight=”0.00”android:textSize=”14dp”android:textColor=”#0288D1” /></LinearLayout></LinearLayout><TextViewandroid:layout_width=”wrap_content”android:layout_height=”wrap_content”android:textAppearance=”?android:attr/textAppearanceLarge”android:text=”Число 1:”android:id=”@+id/textView9”android:layout_weight=”0.08”android:textSize=”18dp”android:textColor=”#000000”android:gravity=”bottom” /><EditTextandroid:layout_width=”match_parent”android:layout_height=”40dp”android:id=”@+id/chis1”android:textSize=”18dp”android:layout_weight=”0.06”android:textColor=”#000000”android:layout_gravity=”center_horizontal” /><TextViewandroid:layout_width=”match_parent”android:layout_height=”wrap_content”android:textAppearance=”?android:attr/textAppearanceLarge”android:text=”Основаниепервогочисла:”android:id=”@+id/textView10”android:textSize=”18dp”android:textColor=”#000000” /><Spinnerandroid:layout_width=”match_parent”android:layout_height=”30dp”android:id=”@+id/spinner”android:layout_weight=”0.07” /><TextViewandroid:layout_width=”wrap_content”android:layout_height=”wrap_content”android:textAppearance=”?android:attr/textAppearanceLarge”android:text=”Число 2:”android:id=”@+id/textView13”android:layout_weight=”0.02”android:textSize=”18dp”android:textColor=”#000000” /><EditTextandroid:layout_width=”match_parent”android:layout_height=”wrap_content”android:id=”@+id/chis2”android:textSize=”18dp”android:layout_weight=”0.02”android:textColor=”#000000”android:layout_gravity=”center_horizontal” /><TextViewandroid:layout_width=”wrap_content”android:layout_height=”wrap_content”android:textAppearance=”?android:attr/textAppearanceLarge”android:text=”Основаниевторогочисла:”android:id=”@+id/textView12”android:textSize=”18dp”android:textColor=”#000000”android:layout_weight=”0.02” /><Spinnerandroid:layout_width=”match_parent”android:layout_height=”30dp”android:id=”@+id/spinner2” /><TextViewandroid:layout_width=”wrap_content”android:layout_height=”30dp”android:textAppearance=”?android:attr/textAppearanceLarge”android:text=”Действие:”android:id=”@+id/textView11”android:layout_weight=”0.02”android:textColor=”#000000”android:textSize=”18dp” /><LinearLayoutxmlns:android=”http://schemas.android.com/apk/res/android”xmlns:tools=”http://schemas.android.com/tools” android:layout_width=”match_parent”android:layout_height=”48dp” android:paddingLeft=”@dimen/activity_horizontal_margin”android:paddingRight=”@dimen/activity_horizontal_margin”android:orientation=”horizontal”android:weightSum=”1”android:gravity=”center_horizontal”><LinearLayoutandroid:layout_width=”55dp”android:layout_height=”40dp”><Buttonandroid:layout_width=”50dp”android:layout_height=”40dp”android:text=”+”android:id=”@+id/plus”android:textSize=”25dp”android:background=”@drawable/background”android:textColor=”#000000” /></LinearLayout><LinearLayoutandroid:layout_width=”55dp”android:layout_height=”55dp”android:weightSum=”1”><Buttonandroid:layout_width=”50dp”android:layout_height=”40dp”android:text=”-“android:id=”@+id/minus”android:textSize=”25dp”android:background=”@drawable/background”android:layout_gravity=”left”android:textColor=”#000000” /></LinearLayout><LinearLayoutandroid:layout_width=”55dp”android:layout_height=”40dp”><Buttonandroid:layout_width=”50dp”android:layout_height=”40dp”android:text=”/”android:id=”@+id/delenie”android:textSize=”25dp”android:background=”@drawable/background”android:layout_gravity=”left”android:textColor=”#000000” /></LinearLayout><LinearLayoutandroid:layout_width=”55dp”android:layout_height=”40dp”><Buttonandroid:layout_width=”50dp”android:layout_height=”40dp”android:text=”*”android:id=”@+id/umnog”android:textSize=”25dp”android:background=”@drawable/background”android:textColor=”#000000” /></LinearLayout></LinearLayout></LinearLayout>
Код функционала для раздела тренажер(Java):
package com.example.alexandr.NumeralSystemTrainer;import android.app.ActionBar;import android.content.Intent;import android.content.pm.ActivityInfo;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.Window;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import android.widget.Toast;import com.example.alexandr.viproject.R;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.util.Random;public class MainActivityextends AppCompatActivityimplements View.OnClickListener {EditTextotvet;TextViewtextView;TextViewtextView4;TextViewtextView5;TextViewtextView6;TextViewtextView7;TextViewtextView8;TextViewproverka;final String LOG_TAG = “myLogs”;final String FILENAME = “file”;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//this.requestWindowFeature(Window.FEATURE_NO_TITLE);//textView= (TextView) findViewById(R.id.textView);textView4 = (TextView) findViewById(R.id.textView4);textView5 = (TextView) findViewById(R.id.textView5);textView6 = (TextView) findViewById(R.id.textView6);textView7 = (TextView) findViewById(R.id.textView7);textView8 = (TextView) findViewById(R.id.textView8);proverka= (TextView) findViewById(R.id.proverka); Button b1 = (Button) findViewById(R.id.button); Button b2 = (Button) findViewById(R.id.sled); Button b3 = (Button) findViewById(R.id.otv); b1.setOnClickListener(this); b2.setOnClickListener(this); b3.setOnClickListener(this); }public void onClick(View v) {switch (v.getId()) {case R.id.sled:proverka.setText(“ “);intmaxRange = 50;intmaxRange1 = 3;double num1 = 0;intchis1 = (int) (Math.random() * (101)+50);intchis2 = (int) (Math.random() * (maxRange)+1);intznak = (int) (Math.random() * (maxRange1 + 1));intosnov1 = (int) (Math.random() * (4));intosnov2 = (int) (Math.random() * (4));//Toast toast = Toast.makeText(getApplicationContext(),”Х”+k, Toast.LENGTH_SHORT); // toast.show();String str = Integer.toString(chis1); String str1 = Integer.toString(chis2); String str2 = Integer.toString(znak); String Osnov1 = Integer.toString(osnov1); String Osnov2 = Integer.toString(osnov2);double Otvet1 = 0;switch (znak) {case 0: str2 = “+”; Otvet1 = chis1 + chis2;break;case 1: str2 = “-“; Otvet1 = chis1 – chis2;break;case 2: str2 = “*”; Otvet1 = chis1 * chis2;break;case 3: str2 = “/”;double y = (double)chis1;double z = (double)chis2;double t = y / z; Otvet1= t*1000;double k =(int)Otvet1;Otvet1 = k/1000;break; } String OTVET = Double.toString(Otvet1);writeFile(OTVET);switch (osnov1) {case 0: Osnov1 = “2”;intg = chis1;str = Integer.toBinaryString(g);break;case 1: Osnov1 = “8”; g = chis1;str = Integer.toOctalString(g);break;case 2: Osnov1 = “16”; g = chis1;str = Integer.toHexString(g);break;case 3: Osnov1 = “10”;break; }switch (osnov2) {case 0: Osnov2 = “2”;intg = chis2; str1 = Integer.toBinaryString(g);break;case 1: Osnov2 = “8”; g = chis2; str1 = Integer.toOctalString(g);break;case 2: Osnov2 = “16”; g = chis2; str1 = Integer.toHexString(g);break;case 3: Osnov2 = “10”;break; }textView.setText(str);textView4.setText(Osnov1);textView5.setText(str2);textView6.setText(str1);textView7.setText(Osnov2);textView8.setText(“ = ?”);break;case R.id.button: String bb=”0”; bb = readFile(bb);Double k = Double.parseDouble(bb.toString());otvet= (EditText) findViewById(R.id.otvet); num1 = Double.parseDouble(otvet.getText().toString());if (k == num1) {proverka.setText(“Верно!”); }else{proverka.setText(“Неверно!”); }break;case R.id.otv: String gg = “0”;gg = readFile(gg);proverka.setText(“Ответ = “+gg);break; } }//#5D4037 – коричневыйvoid writeFile(String y) {try {// отрываемпотокдлязаписиBufferedWriterbw = new BufferedWriter(new OutputStreamWriter(openFileOutput(FILENAME, MODE_PRIVATE)));// пишемданныеbw.write(y);// закрываемпотокbw.close();Log.d(LOG_TAG, “Файлзаписан”); } catch (FileNotFoundException e) {e.printStackTrace(); } catch (IOException e) {e.printStackTrace(); } }public String readFile(String t) {try {// открываемпотокдлячтенияBufferedReaderbr = new BufferedReader(new InputStreamReader(openFileInput(FILENAME))); String str = “”;// читаемсодержимоеwhile ((str = br.readLine()) != null) {Log.d(LOG_TAG, str); t = str; }// br.close();} catch (FileNotFoundException e) {e.printStackTrace(); } catch (IOException e) {e.printStackTrace(); }return t; }}
XML-код для создания пользовательского интерфейса(тренажер):
<?xml version=”1.0” encoding=”utf-8”?><LinearLayoutxmlns:android=”http://schemas.android.com/apk/res/android”xmlns:tools=”http://schemas.android.com/tools” android:layout_width=”match_parent”android:layout_height=”match_parent” android:paddingLeft=”@dimen/activity_horizontal_margin”android:paddingRight=”@dimen/activity_horizontal_margin”android:paddingTop=”@dimen/activity_vertical_margin”android:paddingBottom=”@dimen/activity_vertical_margin” tools:context=”.MainActivity”android:orientation=”vertical”android:weightSum=”1”android:background=”#c4edfe”><Buttonandroid:layout_width=”match_parent”android:layout_height=”75dp”android:text=”Следующийпример”android:id=”@+id/sled”android:textSize=”18dp”android:layout_marginBottom=”106dp”android:layout_alignParentBottom=”true”android:layout_centerHorizontal=”true”android:drawableLeft=”@drawable/icon”android:background=”@drawable/background”android:textStyle=”bold|italic”android:gravity=”left|center_vertical”android:textColor=”#ffffff”android:layout_gravity=”center” /><TextViewandroid:layout_width=”match_parent”android:layout_height=”wrap_content”android:id=”@+id/proverka”android:layout_gravity=”center_horizontal”android:textSize=”25dp”android:layout_weight=”0.04”android:textColor=”#000000”android:gravity=”center” /><TextViewandroid:layout_width=”wrap_content”android:layout_height=”wrap_content”android:text=”Пример:”android:id=”@+id/textView3”android:textSize=”25dp”android:textColor=”#000000” /><LinearLayoutxmlns:android=”http://schemas.android.com/apk/res/android”xmlns:tools=”http://schemas.android.com/tools” android:layout_width=”match_parent”android:layout_height=”wrap_content” android:paddingLeft=”@dimen/activity_horizontal_margin”android:paddingRight=”@dimen/activity_horizontal_margin”android:orientation=”horizontal”android:weightSum=”1”android:layout_weight=”0.14”><TextViewandroid:layout_width=”wrap_content”android:layout_height=”wrap_content”android:textAppearance=”?android:attr/textAppearanceLarge”android:id=”@+id/textView”android:textSize=”20dp”android:layout_weight=”0.05”android:textIsSelectable=”false”android:textColor=”#000000” /><TextViewandroid:layout_width=”22dp”android:layout_height=”29dp”android:id=”@+id/textView4”android:textSize=”16sp”android:phoneNumber=”false”android:textColor=”#0288D1” /><TextViewandroid:layout_width=”24dp”android:layout_height=”wrap_content”android:id=”@+id/textView5”android:textSize=”20dp”android:textColor=”#000000” /><TextViewandroid:layout_width=”wrap_content”android:layout_height=”wrap_content”android:textAppearance=”?android:attr/textAppearanceLarge”android:id=”@+id/textView6”android:layout_weight=”0.05”android:textSize=”20dp”android:textColor=”#000000” /><TextViewandroid:layout_width=”wrap_content”android:layout_height=”wrap_content”android:id=”@+id/textView7”android:layout_weight=”0.05”android:textSize=”16dp”android:textColor=”#0288D1” /><TextViewandroid:layout_width=”wrap_content”android:layout_height=”wrap_content”android:textAppearance=”?android:attr/textAppearanceLarge”android:id=”@+id/textView8”android:layout_weight=”0.05”android:textSize=”20dp”android:textColor=”#000000” /></LinearLayout><TextViewandroid:layout_width=”wrap_content”android:layout_height=”wrap_content”android:text=”Ответ:”android:id=”@+id/textView2”android:layout_below=”@+id/Primer”android:layout_alignParentLeft=”true”android:layout_alignParentStart=”true”android:layout_marginTop=”42dp”android:textSize=”25dp”android:textColor=”#000000” /><EditTextandroid:layout_width=”match_parent”android:layout_height=”wrap_content”android:id=”@+id/otvet”android:layout_gravity=”center_horizontal”android:textColor=”#000000” /><LinearLayoutxmlns:android=”http://schemas.android.com/apk/res/android”xmlns:tools=”http://schemas.android.com/tools” android:layout_width=”match_parent”android:layout_height=”wrap_content” android:paddingLeft=”@dimen/activity_horizontal_margin”android:paddingRight=”@dimen/activity_horizontal_margin”android:orientation=”horizontal”android:weightSum=”1”android:gravity=”center_horizontal”><Buttonandroid:layout_width=”115dp”android:layout_height=”45dp”android:text=”Проверить”android:id=”@+id/button”android:textSize=”18dp”android:layout_alignBaseline=”@+id/sled”android:layout_alignBottom=”@+id/sled”android:layout_centerHorizontal=”true”android:background=”@drawable/background”android:textColor=”#ffffff”android:layout_gravity=”left” /><LinearLayoutxmlns:android=”http://schemas.android.com/apk/res/android”xmlns:tools=”http://schemas.android.com/tools” android:layout_width=”wrap_content”android:layout_height=”match_parent” android:paddingLeft=”@dimen/activity_horizontal_margin”android:paddingRight=”@dimen/activity_horizontal_margin”android:orientation=”horizontal”android:weightSum=”1”></LinearLayout><Buttonandroid:layout_width=”115dp”android:layout_height=”45dp”android:text=”Ответ”android:id=”@+id/otv”android:textSize=”18dp”android:layout_alignBaseline=”@+id/sled”android:layout_alignBottom=”@+id/sled”android:layout_centerHorizontal=”true”android:background=”@drawable/background”android:textColor=”#ffffff”android:layout_gravity=”right” /></LinearLayout></LinearLayout>
Приложение 2
Рисунок 1

Рисунок 2

Рисунок 3

Рисунок 4

Рисунок 5

Рисунок 6

Рисунок 7

Рисунок 8

Рисунок 9

Рисунок 10