fork(1) download
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <ctype.h>
  4. using namespace std;
  5.  
  6.  
  7. class Card {
  8. protected:
  9. int id;
  10. // int listnum;
  11. // char *name;
  12. Card *next;
  13. Card *prev;
  14. public:
  15. // Designers
  16. Card (int);
  17. Card () { next=prev=NULL; };
  18.  
  19. // Methods of obtain private field
  20. int GetId() { return id; };
  21. // int GetListNum() { return listnum; };
  22. // char* GetName() { return name; };
  23. Card* GetNext() { return next; };
  24. Card* GetPrev() { return prev; };
  25.  
  26. // Methods of obtain some element from list
  27. Card* GetFirst();
  28. Card* GetByNum (int);
  29.  
  30. // Delete functions
  31. void RemoveThis();
  32. void RemoveNum(int);
  33. void RemoveList();
  34.  
  35. // Paste functions
  36. void InsertBefore(Card*);
  37. void InsertAfter(Card*);
  38.  
  39. // Print functions
  40. void PrintToFinish();
  41. void PrintId();
  42.  
  43. // Edit functions
  44. Card* CreatNewList();
  45. Card* Mix();
  46. };
  47.  
  48. class Player {
  49. protected:
  50. Card* First;
  51. const char *name;
  52. public:
  53. Player() { First = NULL; };
  54. void PrintToFinish() { First->PrintToFinish(); };
  55. void Distribution(Card*);
  56. void PrintName() { cout << name; };
  57. virtual int move();
  58. };
  59.  
  60.  
  61. class Man: public Player {
  62. public:
  63. Man(const char* n): Player() { name = n; };
  64. virtual int move();
  65. };
  66.  
  67. class PC: public Player {
  68. public:
  69. PC(const char* n): Player() { name = n; };
  70. virtual int move();
  71. };
  72.  
  73. //--------------------------------------------------------------------- //
  74.  
  75. Card::Card(int i) {
  76. id=i;
  77. // listnum=n;
  78. next=prev=NULL;
  79. }
  80.  
  81. void Card::InsertBefore(Card *q) {
  82. q->next=this;
  83. q->prev=prev;
  84. if (prev!=NULL)
  85. prev->next=q;
  86. prev=q;
  87. }
  88.  
  89. void Card::PrintToFinish() {
  90. Card *p;
  91. Card *q;
  92. p=this;
  93. while (p!=NULL) {
  94. cout << p->id << " ";
  95. p=p->next;
  96. }
  97. cout << endl;
  98. }
  99.  
  100. Card* Card::GetByNum (int n) {
  101. Card* q;
  102. q=this;
  103. int i=0;
  104. if (n>=0)
  105. while (i!=n) {
  106. if (q->next == NULL)
  107. return q;
  108. q=q->next;
  109. i++;
  110. }
  111. else
  112. while (i!=n) {
  113. if (q->prev == NULL)
  114. return q;
  115. q=q->prev;
  116. i--;
  117. }
  118. return q;
  119. }
  120.  
  121. Card* Card::GetFirst() {
  122. Card* q;
  123. q=this;
  124. while (q->prev!=NULL)
  125. q=q->prev;
  126. return q;
  127. }
  128.  
  129. void Card::RemoveThis() {
  130. if (prev!=NULL)
  131. prev->next=next;
  132. if (next!=NULL)
  133. next->prev=prev;
  134. next=prev=NULL;
  135. }
  136.  
  137. void Card::PrintId() {
  138. cout << id << endl;
  139. }
  140.  
  141. void Card::InsertAfter(Card *q) {
  142. q->next=next;
  143. if (next!=NULL)
  144. next->prev=q;
  145. next=q;
  146. q->prev=this;
  147. }
  148.  
  149. Card* Card::Mix() {
  150. srand(time(NULL));
  151. int i, k;
  152. Card *q, *NewStart;
  153. NewStart = new Card(0);
  154. for (i=0; i<35; i++) {
  155. k=rand()%(35-i)+1;
  156. q=this->GetByNum(k);
  157. q->RemoveThis();
  158. NewStart->InsertAfter(q);
  159. }
  160. k=rand()%35+1;
  161. q=NewStart->GetByNum(k);
  162. q->InsertAfter(this);
  163. q=NewStart->next;
  164. NewStart->RemoveThis();
  165. delete NewStart;
  166. return q;
  167. }
  168.  
  169. Card* Card::CreatNewList() {
  170. Card *Finish;
  171. Finish = new Card(0);
  172. Card *Start;
  173. int i, j;
  174. int N=6;
  175. Card *p;
  176. for (i = 0; i < 36; i += 4) {
  177. for (j = i; j < 4 + i; j++) {
  178. p = new Card(N * 10 + j - i);
  179. Finish->InsertBefore(p);
  180. }
  181. N++;
  182. }
  183. Start = Finish->GetFirst();
  184. delete Finish;
  185. Finish->RemoveThis();
  186. return Start;
  187. }
  188.  
  189. void Card::RemoveList() {
  190. Card *p, *q;
  191. p=q=this;
  192. while (p!=NULL) {
  193. q=p->next;
  194. delete p;
  195. p->RemoveThis();
  196. p=q;
  197. }
  198. }
  199.  
  200. //--------------------------------------------------------------------- //
  201.  
  202. void Player::Distribution(Card* Start) {
  203. Card *q, *NewList;
  204. NewList = new Card();
  205. int i, k;
  206. srand(time(NULL));
  207. for (i=0; i<6;i++) {
  208. k=rand()%(36-i);
  209. q=Start->GetByNum(k);
  210. if (k==0)
  211. Start=Start->GetNext();
  212. q->RemoveThis();
  213. NewList->InsertAfter(q);
  214. }
  215. q=NewList->GetNext();
  216. delete NewList;
  217. NewList->RemoveThis();
  218. First=q;
  219. }
  220.  
  221. //--------------------------------------------------------------------- //
  222.  
  223. int main () {
  224. Card *Start;
  225. Start=Start->CreatNewList();
  226. Start=Start->Mix();
  227. Start->PrintToFinish();
  228.  
  229. Man *Human;
  230. PC *Asus;
  231. Human = new Man("Human");
  232. Asus = new PC("Asus");
  233.  
  234. Human->Distribution(Start);
  235. Asus->Distribution(Start);
  236.  
  237. Asus->PrintToFinish();
  238. Human->PrintToFinish();
  239. Start->PrintToFinish();
  240.  
  241. Start->RemoveList();
  242. return 0;
  243. }
Compilation error #stdin compilation error #stdout 0s 3276KB
stdin
Standard input is empty
compilation info
/home/WxVHf3/ccz7ysbT.o: In function `main':
prog.cpp:(.text.startup+0x42): undefined reference to `vtable for Man'
prog.cpp:(.text.startup+0x64): undefined reference to `vtable for PC'
collect2: error: ld returned 1 exit status
stdout
Standard output is empty