Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Dokument_Microsoft_Office_Word (1).docx
Скачиваний:
23
Добавлен:
13.04.2015
Размер:
2.05 Mб
Скачать

2 Описание программы

2.1 Общие сведения.

Моя программа назевается – «Application0».

Для функционирования программы необходимо:

- Операционная система: Windows 2000 или выше.

- Процессор: 233 MHz или выше.

- Оперативная память: 64 Мб или выше

- Видеоадаптер и монитор: VGA (640 x 480) Super VGA (800 x 600) или выше

- Свободное место на HDD: 0.5 Гб или больше

- Устройства взаимодействия с пользователем: клавиатура и мышь

Языки программирования, на которых написана программа: эта программа написана с помощью программы «Microsoft Visual Studio 2012» на языке программирования C++.

2.2 Функциональное назначение.

Программа «Application0» выполняет арифметическую возведения в квадрат, особенность этой программы в том, что она так же может возведения в квадрат числа размерности около 512 бит. Так же эту программу возможно использовать, как часть более сложной программы-калькулятора.

Ограничение этой программы в её быстродействии работы над числами приближенным к размерности в 512 бит.

2.3 Описание логической структуры.

Хранить длинные числа будем в виде вектора чисел , где каждый элемент - это одна цифра числа.

Для повышения эффективности будем работать в системе по основанию миллиард, т.е. каждый элемент вектора содержит не одну, а сразу цифр:

Цифры будут храниться в векторе в таком порядке, что сначала идут наименее значимые цифры (т.е. единицы, десятки, сотни, и т.д.).

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

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

2.4 Используемые технические средства.

В работе я использовал ноутбук Acer Aspire 7741ZG

:

Процессор -  Intel Pentium P6200 (2 ядра, 2 потока, 2,13 ГГц, 512 Кбайт L2, 3072 Кбайт L3).

Память - 4096 Мбайт DDR3-1066.

Чипсет - Intel HM55.

Видеокарта -  AMD Radeon HD6550M 1024 МБ

Жесткий диск 500 Гбайт (5400 об/мин, SerialATA).

Порты - ExpressCard / 3 порта USB 2.0 / RJ-11 (модем) / RJ-45 (LAN)/микрофонный вход/линейныйvвыход Операционная система - Windows 8 64-bit.

2.5 Вызов и загрузка.

Программа запускается при помощи файла «Application0.exe»(размер 96 KB)

При запуске программа использует 800КБ операционной памяти. После выполнения этой программой операций возведения в степень, её размер не увеличился, что свидетельствует о качественности программы.

Всего папка с программой занимает 14,2 МБ на жестком диске.

2.6 Входные данные

Для оптимальной работы с программой, вам потребуется клавиатура. С её помощью нужно будет вводить нужные вам числа.

Одно число надо указывать без пробела, знаков препинания и букв алфавитов – только с помощью десяти цифр – 1, 2, 3, 4, 5, 6, 7, 8, 9, 0. Так же нельзя первой цифрой в числе указывать 0 иначе, могут возникнут ошибки. После ввода одного числа вам надо нажать клавишу Enter и вы получите результат.

2.7 Выходные данные

В выходных данных вы увидите набор цифр, который будет являться результатом возведения в квадрат введенного числа. С помощью рисунка 2.1 убедимся в её подсчете больших чисел.

Рисунок 2.1 – « Подсчет больших чисел»

ВЫВОД

Я рассмотрел, один из самых значимых методов возведения в квадрат арифметического подсчета в области больших чисел – этот метод называется «Классический алгоритм».

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

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

В итоге я реализовал программу выполняющую возведения в квадрат больших целых чисел (512 и более бит). В итоге я считаю, что с поставленной задачей справился: теорию усвоил и подтвердил это работающей, исправной программой.

ССЫЛКИ

1 «Искусство программирования» том 2 - Получисленные методы раздел 4.3 – Алгоритм сложения-вычитания.

2 «Искусство программирования» том 2 - Получисленные методы раздел 4.3 – Алгоритм умножения.

3 «Искусство программирования» том 2 - Получисленные методы раздел 4.3 – Алгоритм деления.

СПИСОК ИСПОЛЬЗОВАНВЫХ ИСТОЧНИКОВ

1 Вікіпедія [Електронний ресурс] – Режим доступу: http://ru.wikipedia.org/wiki/Кнут,_Дональд_Эрвин.

2 Дональд Кнут Искусство программирования, том 2. Получисленные методы = The Art of Computer Programming, vol.2. Seminumerical Algorithms. — 3-е изд. — М.: «Вильямс», 2007. — 832 с. — ISBN 5-8459-0081-6.

3 Форум программистов и сисадминов [Електронний ресурс] – Режим доступу: - http://www.cyberforum.ru/

4 Форум программистов [Електронний ресурс] – Режим доступу: - http://forum.codeby.net/forum8.html

5. Н.Смарт. Криптография /Н.Смарт. 2005. –М.:Техносфера.– 528с. 

6.Горбенко І.Д., Гріненко Т.О. Захист інформації в інформаційно-телекомунікаційних системах: Навчальний посібник. Частина 1: Криптографічний захист інформації. – Харків. ХНУРЕ, 2004. – 376 с.

ПРИЛОЖЕНИЕ А

#include "stdafx.h"

#include <iostream>

#include <stdlib.h>

#include <string>

#include <conio.h>

#include <vector>

#include <time.h>

using namespace std;

typedef vector<int> lnum;

int main()

{

const int base = 1000*1000*1000;

lnum a;

unsigned char *s=new unsigned char[64+1];

cout<<"enter the number:";

cin>>s;

for (int i=strlen((char *)s); i>0; i-=9)

{

s[i] = 0;

a.push_back (atoi (i>=9 ? (char *)s+i-9 : (char *)s));

}

while (a.size() > 1 && a.back() == 0)

a.pop_back();

lnum c (a.size()+a.size());

for (size_t i=0; i<a.size(); ++i)

for (int j=0, carry=0; j<(int)a.size() || carry; ++j)

{

long long cur = c[i+j] + a[i] * 1ll * (j < (int)a.size() ? a[j] : 0) + carry;

c[i+j] = int (cur % base);

carry = int (cur / base);

}

while (c.size() > 1 && c.back() == 0)

c.pop_back();

cout<<"\ncount:";

printf ("%d", c.empty() ? 0 : c.back());

for (int i=(int)c.size()-2; i>=0; --i)

printf ("%09d", c[i]);

cout<<endl;

system("pause");

return 0;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]