
- •Разработка программы преобразования чисел в различные системЫ счисления
- •Задание на курсовое проектирование
- •1 Исходные данные (функциональные требования) на проектирование
- •2 Структура проекта
- •3 Календарный график выполнения проекта
- •Оглавление Введение 4
- •1. Анализ задачи преобразования чисел в различные системы счисления и выполнения арифметических операций........................................................................5
- •2. Проектирование программы преобразования чисел..............................................10
- •Введение
- •1 Анализ задачи преобразования чисел в различные системы счисления и выполнения арифметических операций
- •2 Проектирование программы преобразования чисел
- •2.1 Разработка структуры программы
- •2.2 Разработка алгоритмов реализации основных функций
- •3. Реализация программы преобразования чисел
- •3.1. Программная реализация преобразования чисел
- •3.2. Тестирование
- •3.3. Руководство пользователя
- •Заключение
- •Список использованных источников
- •Приложение 1.
- •Приложение 2.
Список использованных источников
Страуструп Б. Язык программирования С++: Пер. с англ. – СПб.; М.: Невский диалект – Издательство БИНОМ, 1999. – 991 с.
http://ru.wikipedia.org/wiki
http://iguania.ru
http://new.ruemcenter.ru
Павловская Т. А. С/С++ Программирование на языке высокого уровня. – СПб.: Лидер,2010.-461 с.
Приложение 1.
Рисунок 1. Диаграмма класса “Calculator”:
Рисунок 2. Диаграмма вариантов использования(прецедентов)
Рисунок 3. Схема основной программы:
Рисунок 4. Функция Menu:
Рисунок 6. Функция DecToString:
Приложение 2.
Текст программы на языке С++
#include"stdafx.h"
#include<iostream>
#include<windows.h>
#include<math.h>
#include<stdlib.h>
#include<string>
usingnamespacestd;
class Calculator
{
string c1,c2;
int bas1,bas2, basis;
public:
void Menu();
stringDecToString(constint, int);
intStringToDec(string, int);
};
void Calculator:: Menu()
{
string s;
do
{
cout<<"1. Введите первое число (пример: -123, AB)"<<endl;
cin>> c1;
cout<<"2. Введите систему счисления первого числа (2-16 или римская=-1)"<<endl;
cin>> bas1;
cout<<"3. Введите второе число (пример:-123, AB)"<<endl;
cin>> c2;
cout<<"4. Введите систему счисления второго числа (2-16 или римская=-1)"<<endl;
cin>> bas2;
cout<<"5. Введите систему счисления ответа (2-16 или римская=0)"<<endl;
cin>> basis;
if (((bas1 >= 2 && bas1 <= 16) || (bas1==-1)) && (( bas2 >= 2 && bas2 <= 16)||(bas2==-1)) && ((basis >= 2 && basis <= 16)||(basis==-1)))
{
cout<<c1<<'('<<bas1<<')'<<" + "<<c2<<'('<<bas2<<')'<<" = "<<DecToString(StringToDec(c1, bas1)+StringToDec(c2,bas2), basis)<<'('<<basis<<')'<<endl;
cout<<c1<<'('<<bas1<<')'<<" - "<<c2<<'('<<bas2<<')'<<" = "<<DecToString(StringToDec(c1, bas1)-StringToDec(c2,bas2),basis)<<'('<<basis<<')'<<endl;
cout<<c1<<'('<<bas1<<')'<<" * "<<c2<<'('<<bas2<<')'<<" = "<<DecToString(StringToDec(c1,bas1)*StringToDec(c2,bas2),basis)<<'('<<basis<<')'<<endl;
cout<<c1<<'('<<bas1<<')'<<" / "<<c2<<'('<<bas2<<')'<<" = "<<DecToString(StringToDec(c1,bas1)/StringToDec(c2,bas2),basis)<<'('<<basis<<')'<<endl;
cout<<c1<<'('<<bas1<<')'<<" % "<<c2<<'('<<bas2<<')'<<" = "<<DecToString(StringToDec(c1,bas1)%StringToDec(c2,bas2),basis)<<'('<<basis<<')'<<endl;
}
else
cout<<"Ошибка: система счисления не соответствует позиционной от 2 до 16 или римской"<<endl;
cout<<endl;
cout<<"Повторить (да/нет) ";
cin>> s;
} while(s == "да");
}
int Calculator::StringToDec(string val, int t)
{
intk,c=0,a,m=0,n,z=0;
boolkk;
if (val[0] == '-')
{
kk = true;
val[0] = '0';
}
else
kk = false;
k=val.length();
if (t==-1) // римская система счисления
{
for (int i = 0; i < k; i++)
{
n=c;
switch (val[i])
{
case'I': c=1; break;
case'V': c=5; break;
case'X': c=10; break;
case'L': c=50; break;
case'C': c=100; break;
case'D': c=500; break;
case'M': c=1000; break;
default: c= val[i]-'0';
}
if (c > n)
a = -2 * n;
else
a = 0;
m = m + a + c;
}
if (kk) m = -m;
return m;
}
else
// система счисления 2-16
for(int i = 0; i < k; i++)
{
switch(val[i])
{
case'A': c=10; break;
case'B': c=11; break;
case'C': c=12; break;
case'D': c= 13; break;
case'E': c= 14; break;
case'F': c= 15; break;
default: c= val[i]-'0';
}
z = z*t+c;
}
if (kk) z = -z;
return z;
}
string Calculator::DecToString(int z, int t)
{
string s;
int k;
char c;
boolkk;
if (z<0)
{
kk = true;
z = -z;
}
else
kk = false;
if (t==-1) //римская система счисления
{
while (z>9)
{
if (z>=1000)
{
s= s+'M';
z-=1000;
}
else
if (z>=500)
{
s= s+'D';
z-=500;
}
else
if (z>=100)
{
s= s+'C';
z-=100;
}
else
if (z>=50)
{
s= s+'L';
z-=50;
}
else
if (z>=10)
{
s= s+'X';
z-=10;
}
}
switch (z)
{
case 1: s+="I"; break;
case 2: s+="II"; break;
case 3: s+="III"; break;
case 4: s+="IV"; break;
case 5: s+="V"; break;
case 6: s+="VI"; break;
case 7: s+="VII"; break;
case 8: s+="VIII"; break;
case 9: s+="IX"; break;
}
}
else
{
do
{
k = z % t;
switch(k)
{
case 10: c = 'A'; break;
case 11: c = 'B'; break;
case 12: c = 'C'; break;
case 13: c = 'D'; break;
case 14: c = 'E'; break;
case 15: c = 'F'; break;
default: c = k + '0';
}
s = c + s;
} while (z/=t);
}
if (kk)
s = '-'+s;
return s;
}
voidmain()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
cout<<"Здравствуйте, Вас приветствует программа Калькулятор систем счисления.\nПрограмма позволяет выполнять арифметические операции с числами в различных \nсистемах счисления (в том числе в римской).\nРазработчик: Пудовкина Елена, группа ПЭ-11"<<endl;
system("pause");
Calculator Reshenie;
Reshenie.Menu();
}