Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Поянительная записка Пудовкина.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.51 Mб
Скачать

Список использованных источников

  1. Страуструп Б. Язык программирования С++: Пер. с англ. – СПб.; М.: Невский диалект – Издательство БИНОМ, 1999. – 991 с.

  2. http://ru.wikipedia.org/wiki

  3. http://iguania.ru

  4. http://new.ruemcenter.ru

  5. Павловская Т. А. С/С++ Программирование на языке высокого уровня. – СПб.: Лидер,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();

}