Компьютерное приложение "Возведение в степень числа"
Создание компьютерного приложения "Возведение в степень числа", обладающего доступным, понятным интерфейсом, который обеспечит пользование приложением неопытным пользователям. Возведение числа от 1 до 9 в степень от 1 до 200 с помощью программы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 16.02.2015 |
Размер файла | 177,1 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Содержание
1. Введение
2. Постановка задачи
3. Алгоритм решения поставленной задачи
4. Метод решения
5. Реализация поставленной задачи
6. Заключение
Список использованных источников
Приложение А
1. Введение
Целью данной практики является закрепление полученных в ходе обучения навыков путем создания компьютерного приложения «Длинная арифметика» вычисление точного значения.
2. Постановка задачи
программа приложение компьютерный степень
Задача вычислительной практики заключается в создании компьютерного приложения «Возведение в степень числа», обладающей доступным, интуитивно понятным интерфейсом, который позволит пользоваться данным приложением неопытным пользователям.
Цель приложения состоит в том, чтобы помочь пользователю возводить числа от 1 до 9 в степень от 1 до 200.
Для реализации данного проекта необходимо разработать компьютерное приложение на языке С++. Для этого требуется:
1) разработать и реализовать алгоритм создания компьютерного приложения «Возведение в степень»;
2) оформить компьютерное приложение «Возведение в степень» с помощью графического интерфейса;
3) провести отладку и тестирование программы.
Требования к проекту:
· проект должен обладать интуитивно понятным интерфейсом;
· проект должен быть многофайловым;
· входное значение числа, возводимого в степень, должно быть не меньше 2 и не больше 9;
· входное значение степени должно быть не меньше 1 и не больше 200;
· получение максимально точного выходного значения.
3. Алгоритм решения поставленной задачи
В соответствии с требованиями к проекту для решения поставленной задачи был разработан алгоритм программы, вычисляющий точное значение числа, возведенного в степень.
При вычислении числа, возведенного в степень от 2 до 9, на выходе получается длинное число. Стандартный числовой тип не позволяет хранить весь необходимый для работы программы диапазон значений.
В результате образуется число, в котором количество разрядов превышает предыдущее. Происходит перенос из младшего разряда в старший несуществующий для операндов разряд. Но перенос не всегда происходит, следовательно, формируем на один разряд больше, чем необходимо. Если переноса не произошло, то ошибки в этом не будет.
В конце созданного массива number_Out [] записывается единица, которая будет умножаться на начальное число столько раз, какова величина степени. Для удобства числа записываются с конца массива [0][0]....[0][0][5][2][5].
Реализован метод умножения столбиком. Далее число разбивается на десятки и единицы. Если при сложении единицы перешли в десятки, то прибавляется один десяток. Аналогично с десятками и сотнями.
В процессе участвуют 3 цифры - разряды операндов и перенос. Для самых младших разрядов перенос равен нулю.
После расчета числа, возведенного в степень, происходит группировка чисел по разрядам, то есть ставится пробел после каждой третьей цифры в числе. Далее строка записывается в обратном направлении и выводится в форму при нажатии кнопки.
4. Метод решения
Для решения поставленной задачи использован проект Windows Form Application реализованный на программной платформе.NET Framework. Для решения поставленной задачи создан класс Form1 и GroupingNumber.
В классе Form1 происходит расчет данных. Он содержит следующие атрибуты: int number_Initial, int exponent_Initial, int count_numbers. Атрибуты int number_Initial и int exponent_Initial служат для задания начального числа, возводимого в степень и степени; int count_numbers - константа, определяющая количество цифр в итоговом числе.
В приложении содержатся массивы: number_Out [count_numbers] и number_Interim [count_numbers]. Сначала массивы инициализируются нулем. Для записи промежуточного числа используется number_Interim [count_numbers]. Для вывода конечного числа используется массив number_Out [count_numbers]. Для удобства число записывается с конца.
В вычисления лежит принцип умножения «столбиком». Выбираем большое число, и поэтапно умножаются числа из каждого разряда этого большого числа, на другое число. В результате на каждом шаге у нас получаются «промежуточные» большие числа, суммируя которые получаем необходимый нам результат.
В классе GroupingNumber выполняется функция группировки цифр по разрядам, запись числа в обратном порядке и вывод итога на экран.
5. Реализация поставленной задачи
В ходе выполнении практики был разработан многофайловый проект на объектно-ориентированном языке программирования С++. Проект состоит из трёх файлов: Form1.h, GroupingNumber.h, Practice.cpp, подключаемых с помощью директивы препроцессора #include. Механизм директив #include является простым текстовым средством, указывает препроцессору, что содержимое заданного файла необходимо обработать так, как если бы оно находилось в исходной программе в той точке, в которой располагается эта директива[2].
Чтобы сделать выражения в программном коде более компактными используем пространства имён System, System::Windows::Forms и System::Drawing. Пространство имён - некоторое множество, под которым подразумевается модель, абстрактное хранилище или окружение, созданное для логической группировки уникальных имён [4].
Пространство имен System содержит фундаментальные и базовые классы, которые определяют распространенные типы значений и ссылочные типы данных, события и обработчики событий, интерфейсы, атрибуты и исключения обработки. Содержит также классы, обеспечивающие поддержку преобразования типов данных, операций с параметрами методов, математических операций, удаленного и локального вызова программ, управления средой приложений и контроля управляемых и неуправляемых приложений [2].
Директива using используется для импортирования пространства имен. Пространства имён являются механизмом логического группирования программных объектов [5].
Пространство имен System.Windows.Forms содержит классы для создания Windows-приложений, которые содержат функции пользовательского интерфейса, доступные в операционной системе Microsoft Windows [2].
Пространство имен System::Drawing предоставляет доступ к GDI и базовой функциональности графики [2]. GDI (Graphics Device Interface) - это интерфейс Windows для представления графических объектов и передачи их на устройства отображения, такие как мониторы и принтеры [5].
Проект обладает дружественным интерфейсом, обеспечивающий пользователю удобное взаимодействие с вычислительной системой.
Число будет храниться в таком виде, что сначала идут наименее значимые цифры (т.е. единицы, десятки, сотни, и т.д.).
Пример главного окна представлен на рисунке 5.1.
Рисунок 5.1 Меню вычислений
Здесь необходимо выбрать число, которое необходимо возвести в степень и степень. Числа можно вводить с клавиатуры или с помощью нажатия кнопок вверх-вниз. После нажатия кнопки "Выполнить вычисления" происходит вычисление заданных данных. Результат работы приложения представлен на рисунке 5.2
Рисунок 5.2 Результат вычислений
Атрибуты number_Initial и exponent_Initial, принадлежащие классу Form1, служат для записи числа, возводимого в степень и самой степени.
Атрибуты int number_Out[count_numbers] и number_Interim[count_numbers] необходимы для записи конечного и промежуточного числа. Изначально инициализируются нулем.
6. Заключение
По результатам проделанной работы можно сделать выводы:
· была поставлена задача разработки компьютерной программы, возведение числа в степень; проект многофайловый; создан интуитивно понятный интерфейс;
· разработан и реализован алгоритм программы «Длинная арифметика»;
· создана компьютерная программа «Длинная арифметика» на языке С++;
· программа отлажена и протестирована.
Поставленные цели можно считать выполненными.
Список использованных источников
1. Томский государственный университет систем управления и радиоэлектроники [Электронный ресурс] URL: http://www.tusur.ru/ (дата обращения 27.07.13г.).
2. Библиотека MSDN [Электронный ресурс] URL: http://msdn.microsoft.com (дата обращения 02.08.13г.).
3. Бьерн Страуструп Язык программирования С++. Специальное издание. Пер. с англ. М.: Издательство Бином, 2011 г. 1136 с.
4. Свободная энциклопедия Википедия [Электронный ресурс] URL: http://ru.wikipedia.org/ (дата обращения 02.08.13).
5. Зиборов В. В. MS Visual C++ 2010 в среде.NET. Библиотека программиста. СПб.: Питер, 2012. 320 с.
Приложение А
(справочное)
Код программы
#include "stdafx.h"
#include "Form1.h"
using namespace Practice;
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{ Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
Application::Run(gcnew Form1());
return 0;}
#pragma once
#include "GroupingNumber.h";
namespace Practice {
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
public ref class Form1 : public System::Windows::Forms::Form
{ public:
Form1(void)
{ InitializeComponent();
}
protected:
~Form1()
{ if (components)
{ delete components;
}}
private: System::Windows::Forms::NumericUpDown^ numericUpDown_number;
protected:
private: System::Windows::Forms::NumericUpDown^ numericUpDown_exponent;
private: System::Windows::Forms::Button^ button_compute;
private: System::Windows::Forms::Label^ label_out;
private: System::Windows::Forms::Label^ label1;
private: System::Windows::Forms::Label^ label2;
private:
System::ComponentModel::Container ^components;
#pragma region Windows Form Designer generated code
void InitializeComponent(void)
{ this->numericUpDown_number = (gcnew System::Windows::Forms::NumericUpDown());
this->numericUpDown_exponent = (gcnew System::Windows::Forms::NumericUpDown());
this->button_compute = (gcnew System::Windows::Forms::Button());
this->label_out = (gcnew System::Windows::Forms::Label());
this->label1 = (gcnew System::Windows::Forms::Label());
this->label2 = (gcnew System::Windows::Forms::Label());
(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->numericUpDown_number))->BeginInit();
(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->numericUpDown_exponent))->BeginInit();
this->SuspendLayout();
this->numericUpDown_number->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Regular,
System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(204)));
this->numericUpDown_number->Location = System::Drawing::Point(220, 8);
this->numericUpDown_number->Maximum = System::Decimal(gcnew cli::array< System::Int32 >(4) {9, 0, 0, 0});
this->numericUpDown_number->Minimum = System::Decimal(gcnew cli::array< System::Int32 >(4) {2, 0, 0, 0});
this->numericUpDown_number->Name = L"numericUpDown_number";
this->numericUpDown_number->Size = System::Drawing::Size(79, 22);
this->numericUpDown_number->TabIndex = 0;
this->numericUpDown_number->Value = System::Decimal(gcnew cli::array< System::Int32 >(4) {2, 0, 0, 0});
this->numericUpDown_exponent->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Regular,
System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(204)));
this->numericUpDown_exponent->Location = System::Drawing::Point(688, 8);
this->numericUpDown_exponent->Maximum = System::Decimal(gcnew cli::array< System::Int32 >(4) {200, 0, 0, 0});
this->numericUpDown_exponent->Minimum = System::Decimal(gcnew cli::array< System::Int32 >(4) {1, 0, 0, 0});
this->numericUpDown_exponent->Name = L"numericUpDown_exponent";
this->numericUpDown_exponent->Size = System::Drawing::Size(79, 22);
this->numericUpDown_exponent->TabIndex = 1;
this->numericUpDown_exponent->Value = System::Decimal(gcnew cli::array< System::Int32 >(4) {1, 0, 0, 0});
this->button_compute->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point,
static_cast<System::Byte>(204)));
this->button_compute->Location = System::Drawing::Point(831, 7);
this->button_compute->Name = L"button_compute";
this->button_compute->Size = System::Drawing::Size(203, 23);
this->button_compute->TabIndex = 2;
this->button_compute->Text = L"Выполнить вычисление";
this->button_compute->UseVisualStyleBackColor = true;
this->button_compute->Click += gcnew System::EventHandler(this, &Form1::button_compute_Click);
this->label_out->AutoSize = true;
this->label_out->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point,
static_cast<System::Byte>(204)));
this->label_out->Location = System::Drawing::Point(12, 51);
this->label_out->Name = L"label_out";
this->label_out->Size = System::Drawing::Size(91, 16);
this->label_out->TabIndex = 3;
this->label_out->Text = L"Результат:";
this->label1->AutoSize = true;
this->label1->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,
static_cast<System::Byte>(204)));
this->label1->Location = System::Drawing::Point(12, 12);
this->label1->Name = L"label1";
this->label1->Size = System::Drawing::Size(202, 16);
this->label1->TabIndex = 4;
this->label1->Text = L"Число возводимое в степень:";
this->label2->AutoSize = true;
this->label2->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,
static_cast<System::Byte>(204)));
this->label2->Location = System::Drawing::Point(372, 12);
this->label2->Name = L"label2";
this->label2->Size = System::Drawing::Size(310, 16);
this->label2->TabIndex = 5;
this->label2->Text = L"Степень, в которую будет возводиться число:";
this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->ClientSize = System::Drawing::Size(1094, 86);
this->Controls->Add(this->label2);
this->Controls->Add(this->label1);
this->Controls->Add(this->label_out);
this->Controls->Add(this->button_compute);
this->Controls->Add(this->numericUpDown_exponent);
this->Controls->Add(this->numericUpDown_number);
this->Name = L"Form1";
this->Text = L"Длинная арифметика. Возведение в степень";
(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->numericUpDown_number))->EndInit();
(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->numericUpDown_exponent))->EndInit();
this->ResumeLayout(false);
this->PerformLayout(); }
#pragma endregion
private: System::Void button_compute_Click(System::Object^ sender, System::EventArgs^ e)
{ const int count_numbers = 1000;
int number_Initial;
int exponent_Initial;
number_Initial = (int)numericUpDown_number->Value;
exponent_Initial=(int)numericUpDown_exponent->Value;
int number_Out[count_numbers];
int number_Interim[count_numbers];
for(int i = 0; i < count_numbers; i++)
{ number_Out[i] = 0;
number_Interim[i] = 0; }
number_Out[count_numbers - 1] = 1;
for(int i = 1; i <= exponent_Initial; i++)
{for(int j = count_numbers - 1; j >= 2; j--)
{ int number_Hi;
number_Hi = number_Out[j] * number_Initial / 10;
number_Low = number_Out[j] * number_Initial % 10;
if(number_Interim[j] + number_Low > 9)
{ number_Interim[j] = number_Interim[j] + number_Low - 10;
number_Hi++; }
else
{ number_Interim[j] = number_Interim[j] + number_Low; }
if(number_Interim[j - 1] + number_Hi > 9)
{ number_Interim[j - 1] = number_Interim[j - 1] + number_Hi - 10;
number_Interim[j - 2]++;
int k = j - 2;
while(number_Interim[k] = 10){
number_Interim[k] = 0;
k--;
number_Interim[k]++; }}
else
{ number_Interim[j - 1] = number_Interim[j - 1] + number_Hi; }}
for(int j = 0; j < count_numbers; j++)
{ number_Out[j] = number_Interim[j]; }
for(int i = 0; i < count_numbers; i++)
{ number_Interim[i] = 0; } }
bool begin_Number = false;
String^ str_Out = "";
for(int i = 0; i < count_numbers; i++)
{if(number_Out[i] > 0)
{begin_Number = true; }
if(begin_Number == true)
{ str_Out += number_Out[i].ToString();} }
GroupingNumber groupingNumber;
label_out->Text = "Результат: " + groupingNumber.Grouping(str_Out);
}};}
#pragma once
using namespace System;
public ref class GroupingNumber
{ public:
GroupingNumber(void);
String^ str_Out;
String^ Grouping(String^ str_In)
{ str_Out = "";
String^ str = "";
int ch = 1;//счётчик
for(int i = str_In->Length - 1; i >= 0; i--)
{str += str_In[i];
if(ch % 3 == 0) str += " ";
ch++;}
for(int i = str->Length - 1; i >= 0; i--)
{str_Out += str[i];}
return str_Out;}};
Размещено на Allbest.ru
...Подобные документы
Создание программы калькулятор, вычисляющий простейшие математические примеры на сложение, вычитание, умножение, деление и возведение в степень. Определение входных и выходных данных, требований к программе. Рекомендации по использованию программы.
курсовая работа [717,6 K], добавлен 17.01.2013Разработка компьютерного приложения "Кипящая жидкость" с применением навыков программирования на языке Java. Проектирование алгоритма для решения поставленной задачи, его предметная область. Создание приложения с графическим пользовательским интерфейсом.
отчет по практике [3,0 M], добавлен 29.10.2015Выбор структуры класса больших целых чисел, их сравнительная характеристика и описание преимуществ, недостатков. Реализация метода перемножения двух больших чисел, возведения числа в степень и взятия факториала числа. Режим вычисления выражений.
курсовая работа [827,2 K], добавлен 19.04.2011Актуальность и предыстория проблемы построения систем связи с открытым ключом. Алгоритм кодирования, перевода из десятичного числа в двоичное, быстрого возведения числа в степень, поиска взаимно простых чисел. Дешифрование сообщения по криптоалгоритму.
курсовая работа [140,3 K], добавлен 20.06.2017Выполнение действий сложения, вычитания, умножения, деления, возведения в целую степень, извлечения квадратного корня по формуле Муавра и преобразования из одной формы в другую при помощи программы, разработанной на языке программирования С++.
курсовая работа [1,3 M], добавлен 16.01.2012Понятие и основные свойства точки, определение ее места в пространстве. Алгоритм построения сечения пространственных тел. Способы визуализации трехмерного пространства. Создание компьютерного приложения для проектирования в трехмерном пространстве.
курсовая работа [636,0 K], добавлен 04.02.2010Блок-схема основной программы. Линейная и графическая схемы основной программы. Линейная и графическая схемы процедуры вычитания. Реализация ввода с клавиатуры числа, длиной не более 128 символов. Размещение числа в выделенной оперативной памяти.
контрольная работа [73,4 K], добавлен 08.07.2012Создание многоуровневого приложения с Web-интерфейсом выставления оценки фильму и просмотра оценок других пользователей. Клиентская часть приложения. Разработка многопользовательского веб-приложения на ASP.NET MVC 3 с разграничением доступа к данным.
курсовая работа [949,7 K], добавлен 22.02.2015Запись прямого и обратного кода для числа 10010 и -10010. Получение дополнительного кода числа для 16-разрядной ячейки. Перевод в двоичную систему счисления десятичных чисел: 10, 45, 7, 33. Запись в обратном и дополнительном кодах числа -67, -43, -89.
практическая работа [13,7 K], добавлен 19.04.2011Рассмотрение методов прямоугольников и трапеций как способов вычисления определенных интегралов. Характеристика графика зависимости погрешности от числа разбиений N. Создание приложения по вычислению интеграла с помощью методов приближенного вычисления.
курсовая работа [1,6 M], добавлен 20.06.2012Разработка клиент-серверного приложения, позволяющего взаимодействовать друг с другом с использованием доступа к базам данных. Проектирование связи сервера с базой данных с помощью технологии ODBC. Разработка интерфейса программы, ее тестирование.
курсовая работа [352,0 K], добавлен 24.08.2016Теоретические основы объектно-ориентированного языка программирования Delphi, изучение среды визуального проектирования приложений. Определение 40-го числа Фибоначчи, составление листинга и блок-схемы программы, тестирование ее на работоспособность.
курсовая работа [261,1 K], добавлен 25.03.2015Создание тестирующих и игровых программ. Степень сложности и художественного оформления интерфейса пользователя. Создание справочной системы. Корректное отображение символов. Создание системы управления базами данных в среде Delphi и таблиц базы данных.
методичка [1,0 M], добавлен 24.10.2012Проектирование приложения "Тетрис", осуществляющего вывод различных фигур на экран случайным образом и их падение. Описание логической структуры программы, ее тестирование. Требования к аппаратной и программной средам. Функции для работы с приложением.
курсовая работа [343,7 K], добавлен 20.01.2015С точки зрения "готовности" к сохранению в память компьютера, информация делится на две категории - дискретная и непрерывная. Правила замены символов алфавита B символами алфавита A. Целые числа. Вещественные числа. Символы. Графика. Звук.
реферат [12,8 K], добавлен 26.10.2006Решение задач с помощью языка программирования Delphi: вычисление значения функции Y от X; систем двух уравнений; прогрессий; последовательностей; вычисление числа с определенной точностью; перевод числа из десятичной в восьмеричную систему счисления.
отчет по практике [83,8 K], добавлен 08.06.2010Основные принципы написания оконных приложений с графическим интерфейсом на языке Java в среде Eclipse. Управление компоновками компонентов: показ диалоговых окон, вывод графической информации. Структура приложения и размещение элементов интерфейса.
лабораторная работа [1,1 M], добавлен 01.05.2014Теоретические основы разработки Windows-приложений с использованием библиотеки MFC. Создание приложения с помощью Visual C++. Описание логической структуры приложения. Установка и запуск программы. Входные и выходные данные. Преимущество MFC библиотек.
курсовая работа [563,2 K], добавлен 21.06.2011Признание Интернета основным информационным ресурсом при переходе к информационному обществу. Проблемы ограничения числа пользователей современного Интернет и необходимость его модернизации. Создание и масштабирование локальных сетей нового поколения.
статья [30,0 K], добавлен 04.12.2009Обследование объекта, обоснование необходимости систем компьютерного тестирования. Анализ существующих разработок и обоснование выбора технологии проектирования. Создание системы компьютерного тестирования на основе случайного выбора в среде Visual Basic.
дипломная работа [2,4 M], добавлен 18.08.2013