Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2019
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.94 KB | None | 0 0
  1. // hm_4_8
  2. // умножение матриц
  3.  
  4. #include <iostream>
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9. setlocale(0, "");
  10.  
  11. float a[3][4];
  12. float b[4][2];
  13. float c[3][2];
  14.  
  15. // sheet A
  16. a[0][0] = 5; a[0][1] = 2; a[0][2] = 0; a[0][3] = 10;
  17. a[1][0] = 3; a[1][1] = 5; a[1][2] = 2; a[1][3] = 5;
  18. a[2][0] = 20; a[2][1] = 0; a[2][2] = 0; a[2][3] = 0;
  19. // sheet B
  20. b[0][0] = 1.20; b[0][1] = 0.50;
  21. b[1][0] = 2.80; b[1][1] = 0.40;
  22. b[2][0] = 5.00; b[2][1] = 1.00;
  23. b[3][0] = 2.00; b[3][1] = 1.50;
  24. // sheet C
  25. c[0][0] = 0; c[0][1] = 0;
  26. c[1][0] = 0; c[1][1] = 0;
  27. c[2][0] = 0; c[2][1] = 0;
  28.  
  29. // получится С (выручка) (комиссионные)
  30.  
  31. // fill sheet C
  32.  
  33. for (int i = 0; i < 3; i++) {
  34. for (int j = 0; j < 4; j++) {
  35. c[i][0] += a[i][j] * b[j][0];
  36. c[i][1] += a[i][j] * b[j][1];
  37. }
  38. }
  39. for (int i = 0; i < 3; i++) { // вывод C
  40. for (int j = 0; j < 2; j++) {
  41. cout << "c[" << i << "][" << j << "] = " << c[i][j] << "; ";
  42. }
  43. cout << endl;
  44. }
  45. cout << endl;
  46.  
  47. // 1) какой продавец выручил больше всего денег с продажи, какой - меньше?
  48. cout << "1) Какой продавец выручил больше всего денег с продажи, какой - меньше?" << endl;
  49. float income1 = c[0][0] + c[0][1]; // доход 1 продавца
  50. float income2 = c[1][0] + c[1][1]; // доход 2 продавца
  51. float income3 = c[2][0] + c[2][1]; // доход 3 продавца
  52. if (income1 > income2 and income1 > income3) {
  53. cout << "max = 1 продавец; ";
  54. if (income2 < income3) {
  55. cout << "min = 2 продавец";
  56. }
  57. else {
  58. cout << "min = 3 продавец";
  59. }
  60. }
  61. else if (income2 > income1 and income2 > income3) {
  62. cout << "max = 2 продавец; ";
  63. if (income1 < income3) {
  64. cout << "min = 1 продавец";
  65. }
  66. else {
  67. cout << "min = 3 продавец";
  68. }
  69. }
  70. else {
  71. cout << "max = 3 продавец; ";
  72. if (income1 < income2) {
  73. cout << "min = 1 продавец";
  74. }
  75. else {
  76. cout << "min = 2 продавец";
  77. }
  78. }
  79. cout << endl;
  80.  
  81. // 2) какой получил наибольшие комиссионные, какой - наименьшие?
  82. cout << "2) Какой получил наибольшие комиссионные, какой - наименьшие?" << endl;
  83. // комиссионные продавца 1: c[0][1]
  84. // комиссионные продавца 2: c[1][1]
  85. // комиссионные продавца 3: c[2][1]
  86. if (c[0][1] > c[1][1] and c[0][1] > c[2][1]) {
  87. cout << "max = 1 продавец; ";
  88. if (c[1][1] < c[2][1]) {
  89. cout << "min = 2 продавец";
  90. }
  91. else {
  92. cout << "min = 3 продавец";
  93. }
  94. }
  95. else if (c[1][1] > c[0][1] and c[1][1] > c[2][1]) {
  96. cout << "max = 2 продавец; ";
  97. if (c[0][1] < c[2][1]) {
  98. cout << "min = 1 продавец";
  99. }
  100. else {
  101. cout << "min = 3 продавец";
  102. }
  103. }
  104. else {
  105. cout << "max = 3 продавец; ";
  106. if (c[0][1] < c[1][1]) {
  107. cout << "min = 1 продавец";
  108. }
  109. else {
  110. cout << "min = 2 продавец";
  111. }
  112. }
  113. cout << endl;
  114.  
  115. // 3) чему равна общая сумма денег, вырученных за проданные товары?
  116. cout << "3) Чему равна общая сумма денег, вырученных за проданные товары?" << endl;
  117. float sum = 0;
  118. sum = sum + c[0][0] + c[1][0] + c[2][0];
  119. cout << "sum = " << sum << endl;
  120.  
  121. // 4) сколько всего комиссионных получили продавцы?
  122. cout << "4) Сколько всего комиссионных получили продавцы?" << endl;
  123. float comSum = 0;
  124. comSum = comSum + c[0][1] + c[1][1] + c[2][1];
  125. cout << "comSum = " << comSum << endl;
  126.  
  127. // 5) чему равна общая сумма денег, прошедших через руки продавцов?
  128. cout << "5) Чему равна общая сумма денег, прошедших через руки продавцов?" << endl;
  129. float capital = 0;
  130. capital = capital + sum + comSum;
  131. cout << "capital = " << capital << endl;
  132.  
  133. return 0;
  134. }
  135. /////////////////////////////////////////////////////
  136. // hm_4.9
  137. // Перевод чисел из одной СС в другую
  138.  
  139. #include <iostream>
  140. #include <string>
  141. #include <map>
  142. #include <cmath>
  143. #include <sstream>
  144.  
  145. using namespace std;
  146.  
  147. bool isNegative(string strNum) { // проверка знака числа
  148. if (strNum[0] == '-') {
  149. return true; // если отрицательное
  150. }
  151. else {
  152. return false; // если положительное
  153. }
  154. }
  155.  
  156. bool isFloat(string strNum) { // целое ли число?
  157. for (int i = 0; i < strNum.length(); i++) {
  158. if (strNum[i] == '.') {
  159. return true;
  160. }
  161. }
  162. return false;
  163. }
  164.  
  165. int main()
  166. {
  167. setlocale(0, "");
  168.  
  169. string number; // число в старой СС
  170. int inTenInt = 0; // целая часть в 10ой СС
  171. double inTenMan = 0; // мантисса числа в 10ой СС
  172. int manLength = 0; // длина мантиссы начального числа
  173. int intLength = 0; // длина целой части начального числа
  174. int x; // старая СС
  175. int n; // новая СС
  176.  
  177. // создание массивов для приведения чисел к виду конкретной СС
  178. char sym[255];
  179. sym['A'] = 10, sym['B'] = 11, sym['C'] = 12, sym['D'] = 13, sym['E'] = 14, sym['F'] = 15, sym['G'] = 16, sym['H'] = 17, sym['I'] = 18, sym['J'] = 19, sym['K'] = 20;
  180. sym['L'] = 21, sym['M'] = 22, sym['N'] = 23, sym['O'] = 24, sym['P'] = 25, sym['Q'] = 26, sym['R'] = 27, sym['S'] = 28, sym['T'] = 29, sym['U'] = 30, sym['V'] = 31;
  181. sym['W'] = 32, sym['X'] = 33, sym['Y'] = 34, sym['Z'] = 35;
  182. //
  183. map <int, char> symInt;
  184. symInt[0] = '0', symInt[1] = '1', symInt[2] = '2', symInt[3] = '3', symInt[4] = '4', symInt[5] = '5', symInt[6] = '6', symInt[7] = '7', symInt[8] = '8', symInt[9] = '9';
  185. symInt[10] = 'A', symInt[11] = 'B', symInt[12] = 'C', symInt[13] = 'D', symInt[14] = 'E', symInt[15] = 'F', symInt[16] = 'G', symInt[17] = 'H', symInt[18] = 'I';
  186. symInt[19] = 'J', symInt[20] = 'K', symInt[21] = 'L', symInt[22] = 'M', symInt[23] = 'N', symInt[24] = 'O', symInt[25] = 'P', symInt[26] = 'Q', symInt[27] = 'R';
  187. symInt[28] = 'S', symInt[29] = 'T', symInt[30] = 'U', symInt[31] = 'V', symInt[32] = 'W', symInt[33] = 'X', symInt[34] = 'Y', symInt[35] = 'Z';
  188. //
  189.  
  190. cout << "Дробная часть числа отделяется ТОЧКОЙ !!!" << endl;
  191. cout << "Введите число ";
  192. cin >> number;
  193. cout << "Укажите старую СС ";
  194. cin >> x;
  195. cout << "Укажите новую СС ";
  196. cin >> n;
  197. if (n <= 0) {
  198. cout << "Ошибка!";
  199. exit(1);
  200. }
  201.  
  202. int pointInd = 0; // индекс первой цифры мантиссы
  203. if (isFloat(number)) {
  204. for (int i = 0; i < number.length(); i++) {
  205. if (number[i] == '.') {
  206. manLength = number.length() - (i + 1); // длина дробной части числа
  207. pointInd = i + 1;
  208. intLength = number.length() - (manLength + 1); // длина целой части числа
  209. }
  210. }
  211. }
  212. else {
  213. intLength = number.length(); // длина целой части числа
  214. }
  215.  
  216. char numMan[255]; // символьный массив дробной части числа
  217. int k = 0;
  218. for (int i = pointInd; i < number.length(); i++) {
  219. numMan[k] = number[i];
  220. k++;
  221. }
  222.  
  223. char num[255]; // символьный массив целой части числа
  224. if (isNegative(number)) {
  225. for (int i = 0; i < intLength; i++) {
  226. num[i] = number[i + 1];
  227. }
  228. intLength -= 1; // не учитывает "-" при подсчете кол-ва символов целой части числа
  229. }
  230. else {
  231. for (int i = 0; i < intLength; i++) {
  232. num[i] = number[i];
  233. }
  234. }
  235.  
  236. // нормализация
  237. int numInt[36]; // целая часть
  238. for (int i = 0; i < intLength; i++) {
  239. if (num[i] > 64 and num[i] < 91) { // 'A' = 65, 'Z' = 90;
  240. numInt[i] = sym[num[i]];
  241. }
  242. else if (num[i] > 47 and num[i] < 58) { // '0' = 48, '9' = 57;
  243. numInt[i] = num[i] - 48;
  244. }
  245. }
  246.  
  247. int numIntMan[36]; // дробная часть
  248. for (int i = 0; i < manLength; i++) {
  249. if (numMan[i] > 64 and numMan[i] < 91) { // 'A' = 65, 'Z' = 90;
  250. numIntMan[i] = sym[numMan[i]];
  251. }
  252. else if (numMan[i] > 47 and numMan[i] < 58) { // '0' = 48, '9' = 57;
  253. numIntMan[i] = numMan[i] - 48;
  254. }
  255. }
  256. //
  257.  
  258. // проверка валидности символов числа
  259. for (int i = 0; i < intLength; i++) {
  260. if (numInt[i] >= x) {
  261. cout << "Ошибка! Такого числа в " << x << "ой СС не существует!" << endl;
  262. exit(1);
  263. }
  264. }
  265. for (int i = 0; i < manLength; i++) {
  266. if (numIntMan[i] >= x) {
  267. cout << "Ошибка! Такого числа в " << x << "ой СС не существует!" << endl;
  268. exit(1);
  269. }
  270. }
  271.  
  272. if (x == n) { // если основания СС равны
  273. cout << "Ваше число осталось в той же СС! (" << x << "ой) " << number << endl;
  274. exit(0);
  275. }
  276.  
  277. int inTen = 0; // перевод в 10ую
  278. for (int i = 0; i < intLength; i++) { // целая часть
  279. inTen += numInt[i] * pow(x, intLength - i - 1);
  280. }
  281. for (int i = 0; i < manLength; i++) { // дробная часть
  282. inTenMan += numIntMan[i] * pow(x, (i + 1) * (-1));
  283. }
  284. //
  285.  
  286. if (n == 10) { // если новая СС 10ая --> выход
  287. if (isFloat(number)) {
  288. string preAnsw;
  289. int b = inTen;
  290. double c = inTenMan;
  291. stringstream ss, sS;
  292. sS << b;
  293. string stR = sS.str();
  294. preAnsw += stR;
  295. ss << c;
  296. string str = ss.str();
  297. for (int i = 0; i < str.length() - 1; i++) {
  298. str[i] = str[i + 1];
  299. }
  300. preAnsw += str;
  301. cout << "Ваше число в 10ой СС: " << preAnsw;
  302. }
  303. else {
  304. cout << "Ваше число в 10ой СС: " << inTen;
  305. }
  306. cout << endl;
  307. exit(0);
  308. }
  309.  
  310. // перевод в новую СС
  311. int i = 0, inTenNum[255];
  312. while (inTen > 0) { // целая часть
  313. int a = 0;
  314. a += inTen % n;
  315. inTen = inTen / n;
  316. inTenNum[i] = a;
  317. i++;
  318. }
  319. int inTenLen = i; // длина числа в 10ой СС
  320.  
  321. int inTenMantissa[255];
  322. if (isFloat(number)) { //дробная часть
  323. int b, j = 0;
  324. while (inTenMan > 0) {
  325. b = inTenMan * n;
  326. inTenMantissa[j] = b;
  327. inTenMan = inTenMan * n - b;
  328. j++;
  329. manLength = j; // длина новой мантиссы
  330. if (j > 5) {
  331. break;
  332. }
  333. }
  334. }
  335.  
  336. char answ[255]; // ответ
  337. char man[255]; // мантисса для ответа
  338. if (n > 10) { // нормализация
  339. for (int i = 0; i < inTenLen; i++) {
  340. answ[i] = symInt[inTenNum[i]];
  341. }
  342. if (isFloat(number)) {
  343. for (int i = 0; i < manLength; i++) {
  344. man[i] = symInt[inTenMantissa[i]];
  345. }
  346. }
  347. }
  348. //
  349.  
  350. for (int i = 0; i < inTenLen / 2; i++) { // разворот числа
  351. swap(answ[i], answ[inTenLen - i - 1]);
  352. }
  353.  
  354. string fin;
  355. for (int i = 0; i < inTenLen; i++) { // конечный ответ
  356. fin += answ[i];
  357. }
  358. if (isFloat(number)) {
  359. fin += '.';
  360. for (int i = 0; i < manLength; i++) {
  361. fin += man[i];
  362. }
  363. }
  364.  
  365. cout << endl;
  366. if (isNegative(number)) {
  367. cout << "Ваше число в " << n << "ой СС: " << "-" << fin;
  368. }
  369. else {
  370. cout << "Ваше число в " << n << "ой СС: " << fin;
  371. }
  372. cout << endl;
  373.  
  374. return 0;
  375. }
  376. ////////////////////////////////////////////////
  377. // Evklid_NOD
  378. // НОД двух целых чисел
  379.  
  380. #include <iostream>
  381. using namespace std;
  382.  
  383. int main()
  384. {
  385. setlocale(0, "");
  386.  
  387. int a, b;
  388.  
  389. cout << "a = ";
  390. cin >> a;
  391. cout << "b = ";
  392. cin >> b;
  393.  
  394. while (a != b) {
  395. if (a > b) {
  396. a = a - b; // из большего вычитать меньшее
  397. }
  398. else {
  399. b = b - a;
  400. }
  401. }
  402. cout << endl;
  403. cout << "НОД = " << a << endl;
  404.  
  405. return 0;
  406. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement