Advertisement
Guest User

Untitled

a guest
Feb 19th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.45 KB | None | 0 0
  1. class ChemicalElement {
  2. private:
  3. float a;
  4. int z;
  5.  
  6. bool _isMetal;
  7.  
  8. int period;
  9. int group;
  10. bool main;
  11. std::string name; // Sodium
  12. std::string sign; // Na
  13. public:
  14.  
  15. ChemicalElement() {
  16. }
  17.  
  18. ChemicalElement(std::string name) {
  19. this->name = name;
  20. }
  21.  
  22. ChemicalElement(float a, int z, int group, int period, bool main, bool metal, std::string name, std::string sign) {
  23. this->group = group;
  24. this->period = period;
  25. this->_isMetal = metal;
  26. this->main = main;
  27.  
  28. this->a = a;
  29. this->z = z;
  30. this->sign = sign;
  31. this->name = name;
  32. }
  33.  
  34. bool isMetal() {
  35. return this->_isMetal;
  36. }
  37.  
  38. int getPeriod() {
  39. return this->period;
  40. }
  41.  
  42. int getGroup() {
  43. return this->group;
  44. }
  45.  
  46. bool isMain() {
  47. return this->main;
  48. }
  49.  
  50. std::string getName() {
  51. return this->name;
  52. }
  53.  
  54. std::string getSign() {
  55. return this->sign;
  56. }
  57.  
  58. int getZ() {
  59. return this->z;
  60. }
  61.  
  62. int getA() {
  63. return this->a;
  64. }
  65. };
  66.  
  67. namespace PeriodicTable {
  68. std::vector<ChemicalElement*> elements;
  69. std::map<std::string, int> indicies;
  70.  
  71. void add(ChemicalElement* el) {
  72. indicies[el->getSign()] = elements.size();
  73. elements.push_back(el);
  74. }
  75.  
  76. void init() {
  77. add(new ChemicalElement(1, 1, "Hydrogen", "H"));
  78. add(new ChemicalElement(14, 7, "Nitrogen", "N"));
  79. add(new ChemicalElement(16, 8, "Oxygen", "O"));
  80. add(new ChemicalElement(19, 9, "Fluorine", "F"));
  81. add(new ChemicalElement(23, 11, "Sodium", "Na"));
  82. add(new ChemicalElement(39, 19, "Potassium", "K"));
  83. add(new ChemicalElement(35.5f, 17, "Chlorine", "Cl"));
  84. add(new ChemicalElement(107.8f, 47, "Silver", "Ag"));
  85. }
  86.  
  87. ChemicalElement* getBySign(std::string name) {
  88. std::cout << "[DEBUG] " << name << std::endl;
  89.  
  90. return elements[indicies[name]];
  91. }
  92.  
  93. ChemicalElement* getByName(std::string sign) {
  94. for (int i = 0; i < elements.size() && elements[i]->getName() != sign; ++i) {
  95. return elements[i];
  96. }
  97. }
  98.  
  99. ChemicalElement* getByZ(int z) {
  100. for (int i = 0; i < elements.size() && elements[i]->getZ() != z; ++i) {
  101. return elements[i];
  102. }
  103. }
  104. }
  105.  
  106. class Ion {
  107. private:
  108. int charge;
  109. ChemicalElement* element;
  110. const std::regex ionRegex = std::regex("(?:\\w)*(\\+|\\-[0-9]*)");
  111. std::string textual;
  112.  
  113. void parse(std::string str) {
  114. std::smatch result;
  115. std::regex_search(str, result, ionRegex);
  116.  
  117. if (result[1] == "-") {
  118. this->charge = -1;
  119. }
  120. else if (result[1] == "+") {
  121. this->charge = 1;
  122. }
  123. else {
  124. this->charge = std::stoi(result[1]);
  125. }
  126.  
  127. this->element = PeriodicTable::getBySign(str.substr(0, str.length() - str.find(result[1]) + 1));
  128. }
  129. public:
  130. // OH- -> O, H, charge = -1
  131. // NO3- -> N, O, charge =
  132. // Ag+
  133. Ion(std::string str) {
  134. this->textual = str;
  135. this->parse(str);
  136.  
  137. std::cout << "Hello, I'm " << this->element->getName() << " I have charge: " << this->charge << std::endl;
  138. }
  139. };
  140.  
  141. class Molecule {
  142. private:
  143. std::vector<ChemicalElement*> elements;
  144. const std::regex expression = std::regex("(?:\\w)*(\\+|\\-[0-9]*)");
  145. std::string textual;
  146.  
  147. void parse() {
  148. std::string atoms = str.substr(0, str.length() - str.find(result[1]) + 1);
  149.  
  150. std::cout << str << " " << result[1] << std::endl;
  151. std::cout << "Atoms: " << atoms << std::endl;
  152.  
  153.  
  154. // NaCl
  155. // Ca(OH)2
  156. // Na[Al(OH)4]
  157. // (NH4)2SO4
  158.  
  159. int i = 0;
  160. int j = -1;
  161. std::string temp;
  162.  
  163. while (atoms[i]) {
  164. char current = atoms[i];
  165.  
  166. temp += current;
  167.  
  168. if (isupper(current)) {
  169. if (j != -1) {
  170. //this->elements.push_back(PeriodicTable::getBySign(temp));
  171.  
  172. std::cout << temp;
  173. temp = "";
  174. }
  175.  
  176. j = i;
  177. }
  178.  
  179. ++i;
  180. }
  181. }
  182. public:
  183.  
  184. };
  185.  
  186. class Reactor {
  187. private:
  188.  
  189. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement