калькулятор на с++

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Arlts
Сообщения: 1
Зарегистрирован: 28 ноя 2010, 13:41

как сделать отмену последней операции и сброс результата?

Код: Выделить всё

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include<conio.h>
#include<string.h>
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<iostream.h>
#include<iomanip.h>
#include<string.h>
#include<ctype.h>


const int   arabar[]  = {  1,   4,    5,   9,    10,  40,  50,   90,  100, 400,  500, 900,  1000};
const char *romanar[] = { "I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M"};


 class calculator
{
 public:
  int arab();
  char * rom();
 friend char *arab2roman(unsigned short int arab);
 friend unsigned short int roman2arab(char * roman);
 friend char * summa(char * roman,char *oi);
 friend char* proizved(char * roman,char *oi);
 friend char * zeloe_del(char * roman,char *oi);
 friend char* ostatok(char * roman,char *oi);
 private:
 int a;
 char * b;
 };


 int calculator::arab()
  {
  cout<<"Vvedite arabskoe chislo:";
  cin>>a;
  return a;
  };

  char * calculator::rom()
  {cout<<"Vvedite rimskoe chislo:";
  cin>>b;
  return  b;
  };

char *arab2roman(unsigned short int arab) {
		  static char roman[80];
		  const int m = sizeof(arabar)/sizeof(int)-1, arabmax=arabar[m];
		  const char romanmax=romanar[m][0];
		  int i, n;
		  if(!arab) {   char *l;
		  l="O";

					 return l;
		  }
		  i=0;
		  while(arab>arabmax) {
					 roman[i++] = romanmax;
					 arab      -= arabmax;
		  }
		  n=m;
		  while(arab > 0) {
					 if(arab >= arabar[n]) {
								roman[i++] = romanar[n][0];
								if(n&1)
										  roman[i++] = romanar[n][1];
								arab -= arabar[n];
					 } else
								n--;
		  }
		  roman[i]=0;
		  return roman;
}

unsigned short int roman2arab(char* roman) {
		  const int m = sizeof(arabar)/sizeof(int)-1;
		  unsigned short int arab;
		  int len, n, i, pir;
		  len=strlen(roman);
		  arab=0;
		  n=m;
		  i=0;
		  while(n >= 0 && i < len) {
					 pir=n&1;
					 if((roman[i]&0xdf) == romanar[n][0] && (!pir || (roman[i+1]&0xdf) == romanar[n][1])) {
								arab += arabar[n];
								i    += 1+pir;
					 } else
								n--;
		  }
		  return arab;
}

char * summa(char * roman,char *oi)
{
int c;
c=roman2arab(roman)+roman2arab(oi);
return arab2roman(c);
}



char * proizved(char * roman,char *oi)
{
int c;
c=roman2arab(roman)*roman2arab(oi);
return arab2roman(c);
}


char * zeloe_del(char * roman,char *oi)
{
int c; char*b="Delenie na 0";
if(roman2arab(oi)!=0)
{c=roman2arab(roman)/roman2arab(oi);
return arab2roman(c);
}
else
return b;

}

char * ostatok(char * roman,char *oi)
{
int c;  char *b="Delenie na 0!!!";
if(roman2arab(oi)!=0)
{c=roman2arab(roman)%roman2arab(oi);
return arab2roman(c);
}
else
return b;
}





main()
{clrscr();
 char* m,*n;
calculator p,c;
int v,o,b;
m=p.rom();
n=c.rom();
cout<<"\n"<<ostatok(n,m);
getch();

getch();
}
Ответить