Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // hm_4_8
- // умножение матриц
- #include <iostream>
- using namespace std;
- int main()
- {
- setlocale(0, "");
- float a[3][4];
- float b[4][2];
- float c[3][2];
- // sheet A
- a[0][0] = 5; a[0][1] = 2; a[0][2] = 0; a[0][3] = 10;
- a[1][0] = 3; a[1][1] = 5; a[1][2] = 2; a[1][3] = 5;
- a[2][0] = 20; a[2][1] = 0; a[2][2] = 0; a[2][3] = 0;
- // sheet B
- b[0][0] = 1.20; b[0][1] = 0.50;
- b[1][0] = 2.80; b[1][1] = 0.40;
- b[2][0] = 5.00; b[2][1] = 1.00;
- b[3][0] = 2.00; b[3][1] = 1.50;
- // sheet C
- c[0][0] = 0; c[0][1] = 0;
- c[1][0] = 0; c[1][1] = 0;
- c[2][0] = 0; c[2][1] = 0;
- // получится С (выручка) (комиссионные)
- // fill sheet C
- for (int i = 0; i < 3; i++) {
- for (int j = 0; j < 4; j++) {
- c[i][0] += a[i][j] * b[j][0];
- c[i][1] += a[i][j] * b[j][1];
- }
- }
- for (int i = 0; i < 3; i++) { // вывод C
- for (int j = 0; j < 2; j++) {
- cout << "c[" << i << "][" << j << "] = " << c[i][j] << "; ";
- }
- cout << endl;
- }
- cout << endl;
- // 1) какой продавец выручил больше всего денег с продажи, какой - меньше?
- cout << "1) Какой продавец выручил больше всего денег с продажи, какой - меньше?" << endl;
- float income1 = c[0][0] + c[0][1]; // доход 1 продавца
- float income2 = c[1][0] + c[1][1]; // доход 2 продавца
- float income3 = c[2][0] + c[2][1]; // доход 3 продавца
- if (income1 > income2 and income1 > income3) {
- cout << "max = 1 продавец; ";
- if (income2 < income3) {
- cout << "min = 2 продавец";
- }
- else {
- cout << "min = 3 продавец";
- }
- }
- else if (income2 > income1 and income2 > income3) {
- cout << "max = 2 продавец; ";
- if (income1 < income3) {
- cout << "min = 1 продавец";
- }
- else {
- cout << "min = 3 продавец";
- }
- }
- else {
- cout << "max = 3 продавец; ";
- if (income1 < income2) {
- cout << "min = 1 продавец";
- }
- else {
- cout << "min = 2 продавец";
- }
- }
- cout << endl;
- // 2) какой получил наибольшие комиссионные, какой - наименьшие?
- cout << "2) Какой получил наибольшие комиссионные, какой - наименьшие?" << endl;
- // комиссионные продавца 1: c[0][1]
- // комиссионные продавца 2: c[1][1]
- // комиссионные продавца 3: c[2][1]
- if (c[0][1] > c[1][1] and c[0][1] > c[2][1]) {
- cout << "max = 1 продавец; ";
- if (c[1][1] < c[2][1]) {
- cout << "min = 2 продавец";
- }
- else {
- cout << "min = 3 продавец";
- }
- }
- else if (c[1][1] > c[0][1] and c[1][1] > c[2][1]) {
- cout << "max = 2 продавец; ";
- if (c[0][1] < c[2][1]) {
- cout << "min = 1 продавец";
- }
- else {
- cout << "min = 3 продавец";
- }
- }
- else {
- cout << "max = 3 продавец; ";
- if (c[0][1] < c[1][1]) {
- cout << "min = 1 продавец";
- }
- else {
- cout << "min = 2 продавец";
- }
- }
- cout << endl;
- // 3) чему равна общая сумма денег, вырученных за проданные товары?
- cout << "3) Чему равна общая сумма денег, вырученных за проданные товары?" << endl;
- float sum = 0;
- sum = sum + c[0][0] + c[1][0] + c[2][0];
- cout << "sum = " << sum << endl;
- // 4) сколько всего комиссионных получили продавцы?
- cout << "4) Сколько всего комиссионных получили продавцы?" << endl;
- float comSum = 0;
- comSum = comSum + c[0][1] + c[1][1] + c[2][1];
- cout << "comSum = " << comSum << endl;
- // 5) чему равна общая сумма денег, прошедших через руки продавцов?
- cout << "5) Чему равна общая сумма денег, прошедших через руки продавцов?" << endl;
- float capital = 0;
- capital = capital + sum + comSum;
- cout << "capital = " << capital << endl;
- return 0;
- }
- /////////////////////////////////////////////////////
- // hm_4.9
- // Перевод чисел из одной СС в другую
- #include <iostream>
- #include <string>
- #include <map>
- #include <cmath>
- #include <sstream>
- using namespace std;
- bool isNegative(string strNum) { // проверка знака числа
- if (strNum[0] == '-') {
- return true; // если отрицательное
- }
- else {
- return false; // если положительное
- }
- }
- bool isFloat(string strNum) { // целое ли число?
- for (int i = 0; i < strNum.length(); i++) {
- if (strNum[i] == '.') {
- return true;
- }
- }
- return false;
- }
- int main()
- {
- setlocale(0, "");
- string number; // число в старой СС
- int inTenInt = 0; // целая часть в 10ой СС
- double inTenMan = 0; // мантисса числа в 10ой СС
- int manLength = 0; // длина мантиссы начального числа
- int intLength = 0; // длина целой части начального числа
- int x; // старая СС
- int n; // новая СС
- // создание массивов для приведения чисел к виду конкретной СС
- char sym[255];
- 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;
- 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;
- sym['W'] = 32, sym['X'] = 33, sym['Y'] = 34, sym['Z'] = 35;
- //
- map <int, char> symInt;
- 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';
- 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';
- 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';
- symInt[28] = 'S', symInt[29] = 'T', symInt[30] = 'U', symInt[31] = 'V', symInt[32] = 'W', symInt[33] = 'X', symInt[34] = 'Y', symInt[35] = 'Z';
- //
- cout << "Дробная часть числа отделяется ТОЧКОЙ !!!" << endl;
- cout << "Введите число ";
- cin >> number;
- cout << "Укажите старую СС ";
- cin >> x;
- cout << "Укажите новую СС ";
- cin >> n;
- if (n <= 0) {
- cout << "Ошибка!";
- exit(1);
- }
- int pointInd = 0; // индекс первой цифры мантиссы
- if (isFloat(number)) {
- for (int i = 0; i < number.length(); i++) {
- if (number[i] == '.') {
- manLength = number.length() - (i + 1); // длина дробной части числа
- pointInd = i + 1;
- intLength = number.length() - (manLength + 1); // длина целой части числа
- }
- }
- }
- else {
- intLength = number.length(); // длина целой части числа
- }
- char numMan[255]; // символьный массив дробной части числа
- int k = 0;
- for (int i = pointInd; i < number.length(); i++) {
- numMan[k] = number[i];
- k++;
- }
- char num[255]; // символьный массив целой части числа
- if (isNegative(number)) {
- for (int i = 0; i < intLength; i++) {
- num[i] = number[i + 1];
- }
- intLength -= 1; // не учитывает "-" при подсчете кол-ва символов целой части числа
- }
- else {
- for (int i = 0; i < intLength; i++) {
- num[i] = number[i];
- }
- }
- // нормализация
- int numInt[36]; // целая часть
- for (int i = 0; i < intLength; i++) {
- if (num[i] > 64 and num[i] < 91) { // 'A' = 65, 'Z' = 90;
- numInt[i] = sym[num[i]];
- }
- else if (num[i] > 47 and num[i] < 58) { // '0' = 48, '9' = 57;
- numInt[i] = num[i] - 48;
- }
- }
- int numIntMan[36]; // дробная часть
- for (int i = 0; i < manLength; i++) {
- if (numMan[i] > 64 and numMan[i] < 91) { // 'A' = 65, 'Z' = 90;
- numIntMan[i] = sym[numMan[i]];
- }
- else if (numMan[i] > 47 and numMan[i] < 58) { // '0' = 48, '9' = 57;
- numIntMan[i] = numMan[i] - 48;
- }
- }
- //
- // проверка валидности символов числа
- for (int i = 0; i < intLength; i++) {
- if (numInt[i] >= x) {
- cout << "Ошибка! Такого числа в " << x << "ой СС не существует!" << endl;
- exit(1);
- }
- }
- for (int i = 0; i < manLength; i++) {
- if (numIntMan[i] >= x) {
- cout << "Ошибка! Такого числа в " << x << "ой СС не существует!" << endl;
- exit(1);
- }
- }
- if (x == n) { // если основания СС равны
- cout << "Ваше число осталось в той же СС! (" << x << "ой) " << number << endl;
- exit(0);
- }
- int inTen = 0; // перевод в 10ую
- for (int i = 0; i < intLength; i++) { // целая часть
- inTen += numInt[i] * pow(x, intLength - i - 1);
- }
- for (int i = 0; i < manLength; i++) { // дробная часть
- inTenMan += numIntMan[i] * pow(x, (i + 1) * (-1));
- }
- //
- if (n == 10) { // если новая СС 10ая --> выход
- if (isFloat(number)) {
- string preAnsw;
- int b = inTen;
- double c = inTenMan;
- stringstream ss, sS;
- sS << b;
- string stR = sS.str();
- preAnsw += stR;
- ss << c;
- string str = ss.str();
- for (int i = 0; i < str.length() - 1; i++) {
- str[i] = str[i + 1];
- }
- preAnsw += str;
- cout << "Ваше число в 10ой СС: " << preAnsw;
- }
- else {
- cout << "Ваше число в 10ой СС: " << inTen;
- }
- cout << endl;
- exit(0);
- }
- // перевод в новую СС
- int i = 0, inTenNum[255];
- while (inTen > 0) { // целая часть
- int a = 0;
- a += inTen % n;
- inTen = inTen / n;
- inTenNum[i] = a;
- i++;
- }
- int inTenLen = i; // длина числа в 10ой СС
- int inTenMantissa[255];
- if (isFloat(number)) { //дробная часть
- int b, j = 0;
- while (inTenMan > 0) {
- b = inTenMan * n;
- inTenMantissa[j] = b;
- inTenMan = inTenMan * n - b;
- j++;
- manLength = j; // длина новой мантиссы
- if (j > 5) {
- break;
- }
- }
- }
- char answ[255]; // ответ
- char man[255]; // мантисса для ответа
- if (n > 10) { // нормализация
- for (int i = 0; i < inTenLen; i++) {
- answ[i] = symInt[inTenNum[i]];
- }
- if (isFloat(number)) {
- for (int i = 0; i < manLength; i++) {
- man[i] = symInt[inTenMantissa[i]];
- }
- }
- }
- //
- for (int i = 0; i < inTenLen / 2; i++) { // разворот числа
- swap(answ[i], answ[inTenLen - i - 1]);
- }
- string fin;
- for (int i = 0; i < inTenLen; i++) { // конечный ответ
- fin += answ[i];
- }
- if (isFloat(number)) {
- fin += '.';
- for (int i = 0; i < manLength; i++) {
- fin += man[i];
- }
- }
- cout << endl;
- if (isNegative(number)) {
- cout << "Ваше число в " << n << "ой СС: " << "-" << fin;
- }
- else {
- cout << "Ваше число в " << n << "ой СС: " << fin;
- }
- cout << endl;
- return 0;
- }
- ////////////////////////////////////////////////
- // Evklid_NOD
- // НОД двух целых чисел
- #include <iostream>
- using namespace std;
- int main()
- {
- setlocale(0, "");
- int a, b;
- cout << "a = ";
- cin >> a;
- cout << "b = ";
- cin >> b;
- while (a != b) {
- if (a > b) {
- a = a - b; // из большего вычитать меньшее
- }
- else {
- b = b - a;
- }
- }
- cout << endl;
- cout << "НОД = " << a << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement