fork(4) download
  1. #include <iostream>
  2. #include <cmath>
  3.  
  4. using namespace std;
  5.  
  6. struct Point {
  7.  
  8. int x;
  9. int y;
  10.  
  11. };
  12.  
  13.  
  14. class Quad {
  15.  
  16. public:
  17. Quad(int x ,int y ,int w ,int h);
  18. ~Quad() {}
  19.  
  20. void opseg();
  21. void povrsina();
  22. void dijagonala();
  23.  
  24. protected:
  25. void init_ASM_DATA();
  26.  
  27. private:
  28. Point m_topLeft;
  29. int m_width;
  30. int m_height;
  31.  
  32. int data_ASM[4];
  33. };
  34.  
  35.  
  36. Quad::Quad(int x ,int y ,int w ,int h)
  37. {
  38. m_topLeft.x = x;
  39. m_topLeft.y = y;
  40. m_width = w;
  41. m_height = h;
  42.  
  43. init_ASM_DATA();
  44. }
  45.  
  46. void Quad::init_ASM_DATA()
  47. {
  48. data_ASM[0] = m_topLeft.x;
  49. data_ASM[1] = m_topLeft.y;
  50. data_ASM[2] = m_width;
  51. data_ASM[3] = m_height;
  52. }
  53.  
  54.  
  55. void Quad::opseg()
  56. {
  57. /*******FORMULA***************/
  58. /* opseg = 2*width + 2*height*/
  59. /****************************/
  60.  
  61. int res;
  62.  
  63. __asm__(
  64.  
  65. "movl %1 , %%esi \n"
  66. "movl 8(%%esi) , %0 \n"
  67. "addl 12(%%esi), %0 \n"
  68. "imull $2 , %0 \n"
  69. : "=b" (res)
  70. : "a" (data_ASM)
  71.  
  72. );
  73.  
  74. cout<< "opseg: " << res << "\n";
  75. }
  76.  
  77.  
  78. void Quad::povrsina()
  79. {
  80. /*******FORMULA***************/
  81. /* width * height */
  82. /****************************/
  83.  
  84. int res;
  85.  
  86. __asm__(
  87.  
  88. "movl %1 , %%esi \n"
  89. "movl 8(%%esi) , %0 \n"
  90. "imull 12(%%esi), %0 \n"
  91. : "=b" (res)
  92. : "a" (data_ASM)
  93.  
  94. );
  95.  
  96. cout<< "povrsina: " << res << "\n";
  97.  
  98. }
  99.  
  100.  
  101.  
  102. void Quad::dijagonala()
  103. {
  104. /*******FORMULA***************/
  105. /* sqrt(width^2 + height^2) */
  106. /****************************/
  107.  
  108. int res;
  109.  
  110. __asm__(
  111.  
  112. "movl %1 , %%esi \n"
  113. "movl 8(%%esi) , %0 \n"
  114. "imull %0 , %0 \n"
  115. "movl 12(%%esi) , %%ecx \n"
  116. "imull %%ecx , %%ecx \n"
  117. "addl %%ecx , %0 \n"
  118. : "=b" (res)
  119. : "a" (data_ASM)
  120.  
  121. );
  122.  
  123. cout<< "dijagonala: " << sqrt(res) << "\n";
  124.  
  125. }
  126.  
  127.  
  128. int main()
  129. {
  130. int x , y , width , height;
  131. cout<< "unesi koordinate gornje lijeve točke(x,y)\n";
  132. cout<< ", sirinu i visinu pravokutnika\n";
  133. cin>> x >> y >> width >> height;
  134.  
  135. int state;
  136. cout<< "\nbiraj\n";
  137. cout<< "3.Opseg pravokutinika\n";
  138. cout<< "2.Površina pravokutinka\n";
  139. cout<< "1.Opseg i površina pravokutinika\n";
  140. cout<< "0.Opseg,površina i duljina dijagonale\n\n\n";
  141. cin>> state;
  142. cout<< "\n";
  143.  
  144. Quad pravokutnik(x , y , width , height);
  145.  
  146. switch(state)
  147. {
  148. case 0:
  149. {
  150. pravokutnik.dijagonala();
  151. }
  152.  
  153. case 1:
  154. {
  155. pravokutnik.opseg();
  156. }
  157.  
  158. case 2:
  159. {
  160. pravokutnik.povrsina();
  161. }
  162. break;
  163.  
  164. case 3:
  165. {
  166. pravokutnik.opseg();
  167. }
  168. break;
  169. }
  170.  
  171.  
  172.  
  173. return 0;
  174. }
Success #stdin #stdout 0s 2900KB
stdin
0 0 4 5 3
stdout
unesi koordinate gornje lijeve točke(x,y)
, sirinu i visinu pravokutnika

biraj
3.Opseg pravokutinika
2.Površina pravokutinka
1.Opseg i površina pravokutinika
0.Opseg,površina i duljina dijagonale



opseg: 18