Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 1st, 2012  |  syntax: None  |  size: 9.69 KB  |  hits: 16  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #include "stdafx.h"
  2. #include "stdafx.h"
  3. #include <iostream>
  4. #include <conio.h>
  5. #include <string.h>
  6. #define SIZE 500
  7.  
  8. using namespace std;
  9.  
  10. int str_in() {
  11.         char text[1024];
  12.         int length, i, k;
  13.         int s;
  14.  
  15.         gets(text);
  16.         length = strlen(text);
  17.         while (1) {
  18.                 k = 0;
  19.                 for (i = 0; i <= length; i++)
  20.                         if ((text[i] >= '\x30') & (text[i] <= '\x39')) k++;
  21.                         else break;
  22.                 if (k != length) puts("Incorrect Enter, try one more time");
  23.                 else break;
  24.                 gets(text);
  25.                 length = strlen(text);
  26.         }
  27.         s = atoi(text);
  28.         if (strlen(text) == 0) {
  29.                 puts("Incorrect Enter, try one more time");
  30.                 gets(text);
  31.         }
  32.         return s;
  33. }
  34.  
  35. class Stroka {
  36. public:
  37.         char *pChar;
  38.     int length;
  39.     Stroka (void);
  40.     Stroka (char* source);
  41.         Stroka (char schar);
  42.         Stroka (Stroka &source);
  43.  
  44.         void down_reg ();
  45.         void add (char* source);
  46.         void show ();
  47.         ~Stroka ();
  48. };
  49.  
  50. Stroka::Stroka (void) {
  51.         length = 0;
  52.         pChar = new char[SIZE];
  53. }
  54.  
  55. Stroka::Stroka(char schar) {
  56.         pChar = new char[SIZE];
  57.         char *p = &schar;
  58.         strcpy (pChar, p);
  59.     length = 1;
  60. }
  61.  
  62. Stroka::Stroka(char* source) {
  63.         pChar = new char[SIZE];
  64.         length = strlen(source);
  65.         strcpy (pChar, source);
  66. }
  67.  
  68. Stroka::Stroka (Stroka &source) {
  69.         pChar  = new char[SIZE];
  70.         strcpy (pChar, source.pChar);
  71.         length = source.length;
  72. }
  73.  
  74. void Stroka::down_reg () {
  75.         int i, asci;
  76.         for (i = 0; i <= length; i++) {
  77.                 asci = (int) pChar[i];
  78.                 if (((asci > 64)&&(asci < 91))||((asci > -129)&&(asci < -112))) {
  79.                         asci = asci + 32;
  80.                         pChar[i] = (char) asci;
  81.                 }
  82.                 if ((asci > -113)&&(asci < -96)) {
  83.                         asci = asci + 80;
  84.                         pChar[i] = (char) asci;
  85.                 }
  86.                 if (asci == -16) {
  87.                         asci = asci + 1;
  88.                         pChar[i] = (char) asci;
  89.                 }
  90.         }
  91. }
  92.  
  93. void Stroka::add (char* source) {
  94.         strcat (pChar, source);
  95.         length = length + strlen (source);
  96.  
  97. }
  98.  
  99. void Stroka::show () {
  100.         if (length == 1)
  101.         printf("%c",pChar[0]);
  102.         else cout << pChar;
  103. }
  104.  
  105. Stroka::~Stroka() {
  106.         delete [] pChar;
  107. }
  108.  
  109.  
  110. class Hex_Stroka : public Stroka {
  111. public:
  112.         Hex_Stroka (void);
  113.         Hex_Stroka (char* source);
  114.         Hex_Stroka (Hex_Stroka &source);
  115.  
  116.         int hex_to_dec (void);
  117.         ~Hex_Stroka ();
  118.  
  119.         bool operator == (Hex_Stroka &source) {
  120.                 if (length != source.length)
  121.                         return false;
  122.                 else {
  123.                         for (int i=0; i<length; i++)
  124.                                 if (pChar[i] != source.pChar[i]) return false;
  125.                 }
  126.                 return true;
  127.         }
  128.  
  129.         Hex_Stroka& operator = (Hex_Stroka &source) {
  130.                 length = source.length;
  131.                 if (source.pChar == 0) {
  132.                         pChar = 0;
  133.                         return *this;
  134.                 }
  135.                 pChar = new char[SIZE];
  136.                 strcpy (pChar, source.pChar);
  137.                 return *this;
  138.         }
  139.  
  140.         Hex_Stroka operator & (Hex_Stroka &source) {
  141.                 char tChar[SIZE];
  142.                 memset(tChar, 0, sizeof(tChar));
  143.  
  144.                 int k;
  145.                 if (length!=source.length) {
  146.                         if (length < source.length) {  
  147.                                 k = source.length - length;
  148.                                 for (int i=0; i < k; i++)      
  149.                                         tChar[i] =  '0';
  150.                                 for (int i=k; i < source.length; i++)
  151.                                         tChar[i] =  pChar[i-k] & source.pChar[i];
  152.                         }
  153.                         else {
  154.                                 k = length - source.length;
  155.                                 for (int i=0; i < k; i++)                              
  156.                                         tChar[i] = '0';
  157.                                 for (int i=k; i < length; i++)                 
  158.                                         tChar[i] = pChar[i] & source.pChar[i - k];
  159.                         }
  160.  
  161.                 }
  162.                 Hex_Stroka res(tChar);
  163.                 return res;
  164.         }
  165.  
  166. };
  167.  
  168.  
  169. Hex_Stroka::Hex_Stroka (void) {
  170.         length = 0;
  171.         pChar  = new char[SIZE];
  172. }
  173.  
  174. Hex_Stroka::Hex_Stroka(char* source) {
  175.         pChar = new char[SIZE];
  176.         length = strlen(source);
  177.         int i, asci;
  178.         strcpy (pChar, source);
  179.         for (i = 0; i < length; i++) {
  180.                 asci = (int) source[i];
  181.                 if (((asci >= 48)&&(asci <= 57))||((asci >= 65)&&(asci <= 70)))
  182.                         pChar[i] = source[i];
  183.                 else pChar[i] = '0';
  184.         }
  185. }
  186.  
  187. Hex_Stroka::Hex_Stroka (Hex_Stroka &source) {
  188.         pChar = new char[SIZE];
  189.         strcpy (pChar, source.pChar);
  190.         length = source.length;
  191. }
  192.  
  193. int Hex_Stroka::hex_to_dec (void)
  194. {
  195.         int i, asci, res, k;
  196.         k = 1;
  197.         res = 0;
  198.         for (i = length - 1; i >= 0; i--) {
  199.                 asci = (int) pChar[i];
  200.                 if ((asci>=48) && (asci<=57))
  201.                         res = res + (asci-48)*k;
  202.                 else if ((asci>=65) && (asci<=70))
  203.                         res = res + (asci-55)*k;
  204.                  k = k * 16;
  205.         }
  206.         return res;
  207. }
  208.  
  209.  
  210. Hex_Stroka::~Hex_Stroka() {
  211. //      delete [] pChar;
  212. }
  213.  
  214. void main() {
  215.         char st1[SIZE];
  216.         int choice=-1;
  217.         Hex_Stroka *pointer[4];
  218.         string** mas;
  219.         mas = new string*[4];
  220.  
  221. while (choice!=0) {
  222.         puts("Welcome to main menu");
  223.         puts("1 - Filling objects");
  224.         puts("2 - Working with subclass");
  225.         puts("3 - Testing overloaded operations");
  226.         puts("4 - Show all objects");
  227.         puts("0 - Exit");
  228.         choice = str_in();
  229.         if (choice==1) {
  230.                 while (choice!=0) {
  231.                         puts("Welcome to menu - Filling objects");
  232.                         puts("1 - All clean");
  233.                         puts("2 - All with strings");
  234.                         puts("3 - Copying objects");
  235.                         puts("4 - One clean");
  236.                         puts("5 - One with string");
  237.                         puts("0 - Exit in main menu");
  238.                         choice = str_in();
  239.                         switch (choice) {
  240.                         case 1 :
  241.                                 {
  242.                                         for (int i=0; i<4; i++) {
  243.                                                 mas[i] = new Hex_Stroka;
  244.                                                 pointer[i] = reinterpret_cast<Hex_Stroka*>(mas[i]);
  245.                                         }
  246.                                         system("cls");
  247.                                         puts("4 pure object created");
  248.                                         puts("-----------------------");
  249.                                 }
  250.                                 break;
  251.                         case 2 :
  252.                                 {
  253.                                         for (int i=0; i<4; i++) {
  254.                                                 cout << "Enter string " << i+1 << " to create hex_string object:\n";
  255.                                                 cin.getline (st1, SIZE);
  256.                                                 mas[i] = new Hex_Stroka(st1);
  257.                                                 pointer[i] = reinterpret_cast<Hex_Stroka*>(mas[i]);
  258.                                         }
  259.                                         system("cls");
  260.                                         puts("4 filled object created");
  261.                                         puts("-----------------------");
  262.                                 }
  263.                                 break;
  264.                         case 3 :
  265.                                 {
  266.                                         cout << "Enter number of object that will be source: ";
  267.                                         int source, dest;
  268.                                         source = str_in();
  269.                                         cout << "Enter number of object that will be destination: ";
  270.                                         dest = str_in();
  271.                                         mas[dest] = new Hex_Stroka(*pointer[source]);
  272.                                         pointer[dest] = reinterpret_cast<Hex_Stroka*>(mas[dest]);
  273.                                
  274.                                         system("cls");
  275.                                         puts("1 object copied");
  276.                                         puts("-----------------------");
  277.                                 }
  278.                                 break;
  279.                         case 4 :
  280.                                 {
  281.                                         cout << "Enter number of object that will be created clean: ";
  282.                                         int n;
  283.                                         n = str_in();
  284.                                         mas[n] = new Hex_Stroka;
  285.                                         pointer[n] = reinterpret_cast<Hex_Stroka*>(mas[n]);
  286.                                         system("cls");
  287.                                         puts("1 pure object created");
  288.                                         puts("-----------------------");
  289.                                 }
  290.                                 break;
  291.                         case 5 :
  292.                                 {
  293.                                         cout << "Enter number of object that will be created with string: ";
  294.                                         int n;
  295.                                         n = str_in();
  296.                                         cout << "Enter string to create hex_string object:\n";
  297.                                         cin.getline (st1, SIZE);
  298.                                         mas[n] = new Hex_Stroka(st1);
  299.                                         pointer[n] = reinterpret_cast<Hex_Stroka*>(mas[n]);
  300.                                         system("cls");
  301.                                         puts("1 filled object created");
  302.                                         puts("-----------------------");
  303.                                 }
  304.                                 break;
  305.                         default:
  306.                                 break;
  307.                         }
  308.                 }
  309.                 choice=-1;
  310.         }
  311.         if (choice==2) {
  312.                 while (choice!=0) {
  313.                         puts("Welcome to menu - working objects of subclass using pointers");
  314.                         puts("1 - Print one in decimal");
  315.                         puts("2 - Print all in decimal");
  316.                         puts("0 - Exit in main menu");
  317.                         choice = str_in();
  318.                         switch (choice) {
  319.                         case 1 :
  320.                                 {
  321.                                         cout << "Enter number of object that will be converted in dec: ";
  322.                                         int n,d;
  323.                                         n = str_in();
  324.                                         d = pointer[n]->hex_to_dec();
  325.                                         system("cls");
  326.                                         puts("Source string:");
  327.                                         pointer[n]->show();
  328.                                         puts("");
  329.                                         puts("In dec:");
  330.                                         cout << d << "\n";
  331.                                         puts("-----------------------");
  332.                                 }
  333.                                 break;
  334.                         case 2 :
  335.                                 {
  336.                                         system("cls");
  337.                                         cout << "All objects converted in dec: \n";
  338.                                         for (int i=0; i<4; i++) {
  339.                                                 int d;
  340.                                                 d = pointer[i]->hex_to_dec();
  341.                                                 pointer[i]->show();
  342.                                                 cout << "\t:\t" << d << "\n";
  343.                                         }
  344.                                         puts("-----------------------");
  345.                                 }
  346.                                 break;
  347.                         default:
  348.                                 break;
  349.                         }
  350.                 }
  351.                 choice=-1;
  352.         }
  353.  
  354.         if (choice==3) {
  355.                 while (choice!=0) {
  356.                         puts("Welcome to menu - Testing overloaded operations");
  357.                         puts("1 - 2 objects equivalence");
  358.                         puts("2 - Giving");
  359.                         puts("3 - Logic &");
  360.                         puts("0 - Exit in main menu");
  361.                         choice = str_in();
  362.                         switch (choice) {
  363.                         case 1 :
  364.                                 {
  365.                                         int n1, n2;
  366.                                         system("cls");
  367.                                         cout << "Enter number of object that will be 1 operand: ";
  368.                                         n1 = str_in();
  369.                                         cout << "Enter number of object that will be 2 operand: ";
  370.                                         n2 = str_in();
  371.  
  372.                                         puts("Source strings:");
  373.                                         pointer[n1]->show();
  374.                                         cout << "\t";
  375.                                         pointer[n2]->show();
  376.                                         cout << "\n";
  377.                                         if (*pointer[n1]==*pointer[n2])
  378.                                                 puts ("Objects are equivalents");
  379.                                         else
  380.                                                 puts ("Objects are NOT equivalents");
  381.                                         puts("-----------------------");
  382.                                 }
  383.                                 break;
  384.                         case 2 :
  385.                                 {
  386.                                         system("cls");
  387.                                         int n1, n2 ,d;
  388.                                         cout << "Enter number of object that will be 1 operand: ";
  389.                                         n1 = str_in();
  390.                                         cout << "Enter number of object that will be 2 operand: ";
  391.                                         n2 = str_in();
  392.  
  393.                                         puts("Source strings:");
  394.                                         pointer[n1]->show();
  395.                                         cout << "\t";
  396.                                         pointer[n2]->show();
  397.                                         cout << "\n";
  398.  
  399.                                         *pointer[n1]=*pointer[n2];
  400.                                         puts("Operator =");
  401.  
  402.                                         puts("After:");
  403.                                         pointer[n1]->show();
  404.                                         cout << "\t";
  405.                                         pointer[n2]->show();
  406.                                         cout << "\n";
  407.  
  408.                                         puts("-----------------------");
  409.                                 }
  410.                                 break;
  411.                         case 3 :
  412.                                 {
  413.                                         int n1, n2;
  414.                                         system("cls");
  415.                                         cout << "Enter number of object that will be 1 operand: ";
  416.                                         n1 = str_in();
  417.                                         cout << "Enter number of object that will be 2 operand: ";
  418.                                         n2 = str_in();
  419.  
  420.                                         puts("Source strings:");
  421.                                         pointer[n1]->show();
  422.                                         cout << "\t";
  423.                                         pointer[n2]->show();
  424.                                         cout << "\n";
  425.                                        
  426.                                         puts("Operator &");
  427.                                         puts("Result:");
  428.                                        
  429.                                         Hex_Stroka *tmp;
  430.                                         tmp = new Hex_Stroka("tmp");
  431.                                         *tmp = *pointer[n1] & *pointer[n2];
  432.                                         tmp->show();
  433.                                         puts("\n-----------------------");
  434.                                 }
  435.                                 break;
  436.                         default:
  437.                                 break;
  438.                         }
  439.                 }
  440.                 choice=-1;
  441.         }
  442.         if (choice==4) {
  443.                 system("cls");
  444.                 for (int i=0; i<4; i++) {
  445.                         pointer[i]->show();
  446.                         puts("");
  447.                 }
  448.                 getch();
  449.         }
  450.  
  451.         system("cls");
  452. }
  453. }