С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Сфня
0 / 0 / 0
Регистрация: 23.11.2013
Сообщений: 49
#1

Числа по основанию 2 и 10. Выполнить операцию умножения - C++

20.01.2014, 20:58. Просмотров 648. Ответов 12
Метки нет (Все метки)

Числа по основанию 2 и 10. Выполнить операцию умножения?
Вообщем она работает! Но минус слишком большая и очень сложно объяснять. Как ее сделать по проще?)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
using namespace std;
 
 
void a(char* line, char** x){
    char *p = strtok(line, ".");
    x[0] = p;
    if ((p = strtok(NULL, " ")) != NULL) x[1] = p;
}
 
double forReal_2(char* line){
    int i = 0;
    vector<int> vec;
    while (line[i] != '\0')
    {
        int tmp = line[i] - '0';
        vec.push_back(tmp);
        i++;
    }
    double sum = 0.0;
    i = 1; int lenght = vec.size();
    for (vector<int>::iterator it = vec.begin(); it != vec.end(); ++it){
        double temp = *it * (pow(2, lenght - i));
        sum += temp;
        i++;
    }
    return sum;
}
 
double forPoint_2(char* line){
    int i = 0;
    vector<int> vec;
    while (line[i] != '\0')
    {
        int tmp = line[i] - '0';
        vec.push_back(tmp);
        i++;
    }
    double sum = 0.0;
    i = 1; int lenght = vec.size();
    for (vector<int>::iterator it = vec.begin(); it != vec.end(); ++it){
        double temp = *it * (pow(2, 0 - i));
        sum += temp;
        i++;
    }
    return sum;
}
 
double forReal_10(char* line){
    int i = 0;
    vector<int> vec;
    while (line[i] != '\0')
    {
        char tmp = line[i];
        int tmp1 = 0;
        switch (tmp)
        {
        case 'A':
            tmp1 = 2; break;
        case 'B':
            tmp1 = 3; break;
        case 'C':
            tmp1 = 4; break;
        case 'D':
            tmp1 = 5; break;
        case 'E':
            tmp1 = 6; break;
        case 'F':
            tmp1 = 7; break;
        case 'G':
            tmp1 = 8; break;
        default:
            tmp1 = tmp - '0';  break;
        }
        vec.push_back(tmp1);
        i++;
    }
    double sum = 0.0;
    i = 1; int lenght = vec.size();
    for (vector<int>::iterator it = vec.begin(); it != vec.end(); ++it){
        float temp = *it * (pow(10, lenght - i));
        sum += temp;
        i++;
    }
    return sum;
}
 
double forPoint_10(char* line){
    int i = 0;
    vector<int> vec;
    while (line[i] != '\0')
    {
        char tmp = line[i];
        int tmp1 = 0;
        switch (tmp)
        {
        case 'A':
            tmp1 = 2; break;
        case 'B':
            tmp1 = 3; break;
        case 'C':
            tmp1 = 4; break;
        case 'D':
            tmp1 = 5; break;
        case 'E':
            tmp1 = 6; break;
        case 'F':
            tmp1 = 7; break;
        case 'G':
            tmp1 = 8; break;
        default:
            tmp1 = tmp - '0';  break;
        }
        vec.push_back(tmp1);
        i++;
    }
    double sum = 0.0;
    i = 1; int lenght = vec.size();
    for (vector<int>::iterator it = vec.begin(); it != vec.end(); ++it){
        double temp = *it * (pow(10, 0 - i));
        sum += temp;
        i++;
    }
    return sum;
}
 
double get_2to10(char** x){
    double sum1 = forReal_2(x[0]);
    double sum2 = forPoint_2(x[1]);
    double sum = sum1 + sum2;
    return sum;
}
 
double get_10to10(char** x){
    double sum1 = forReal_10(x[0]);
    double sum2 = forPoint_10(x[1]);
    double sum = sum1 + sum2;
    return sum;
}
 
int main(){
    cout << "Input your numbers in 2 and in 10: " << endl;
    char line_2[10]="", line_10[10]="";
    gets(line_2); gets(line_10);
    char *x_2[2] = { "0", "0" }; char *x_10[2] = { "0", "0" };
    a(line_2, x_2); a(line_10, x_10);
    double x1 = get_2to10(x_2), x2 = get_10to10(x_10);
    cout << x_2[0] << "." << x_2[1] << " * " << x_10[0] << "." << x_10[1] << " = "<< x1*x2 << endl;
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2014, 20:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Числа по основанию 2 и 10. Выполнить операцию умножения (C++):

Числа по основанию 2 и 16. Выполнить операцию умножения - C++
Добрый день,товарищи!)нужна ваша помощь в задании с &quot;переводом числа по основанию 2 и 16. Выполнить операцию умножения. &quot; Для целых чисел...

Числа по основанию 10 и 16. Выполнить операцию сложения - C++
Здравствуйте,пмогите/подскажите,как выполнить задание :Числа по основанию 10 и 16. Выполнить операцию сложения. Имеется программа для...

Числа по основанию 8 и 4. Выполнить операцию деления - C++
Числа по основанию 8 и 4. Выполнить операцию деления. Добавлено через 4 часа 38 минут Помогите пожалуйста, я знаю алгоритм, но не...

Написать программу, которая переводит числа по основанию 8 в 4. Выполнить операцию деления - C++
Написать программу, которая переводит числа по основанию 8 в 4. Выполнить операцию деления.

Получить два целых числа и найти их произведение, не используя операцию умножения - C++
напишите программу, которая получает два целых числа и находит их произведение, не используя операцию умножения. Учтите, что числа могут...

Ввести два числа и выполнить указанную операцию - C++
2. Цифры 1, 2, 3 и 4 обозначают операции сложение, умножение, вычитание и деление. Предложить пользователю ввести два числа и выбрать...

12
_script_
170 / 138 / 34
Регистрация: 01.05.2012
Сообщений: 414
20.01.2014, 21:10 #2
Нужно перевести первое число из двоичной системы в десятичную и выполнить у них умножение? так?
1
Сфня
0 / 0 / 0
Регистрация: 23.11.2013
Сообщений: 49
20.01.2014, 21:14  [ТС] #3
да, нужно сначала перевести из 2 в 10 систему счисления, а потом умножить оба числа в 10!
0
cooller
565 / 533 / 120
Регистрация: 25.12.2013
Сообщений: 1,456
20.01.2014, 21:19 #4
Сфня,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<iostream>
#include<string>
#include <bitset>
 
int main()
{
    std::string str;
    int number;
    std::cout<<"Enter the number in binary system:";
    std::cin>>str;
    std::cout<<"\nEnter a number in the decimal system:";
    std::cin>>number;
    std::cout<<str<<"("<<std::bitset<32>(str).to_ulong()<<")"<<"*"<<number<<" = "
                <<std::bitset<32>(str).to_ulong() * number;
 
    return 0;
}
2
_script_
170 / 138 / 34
Регистрация: 01.05.2012
Сообщений: 414
20.01.2014, 21:22 #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
using namespace std;
int to10(string str)
{
    int rez=0;
    int k=1;
    for (int i=str.length()-1; i>=0; i--,k*=2)
        if (str[i]=='1')
            rez+=k;
    return rez;
}
 
int main()
{
    string str_ch1;
    int ch2;
    cin >> str_ch1;
    cin >> ch2;
    int ch1=to10(str_ch1);
    cout << ch1*ch2;
    return 0;
}
1
Сфня
0 / 0 / 0
Регистрация: 23.11.2013
Сообщений: 49
20.01.2014, 21:27  [ТС] #6
Спасибо, оба варианта работают) Я лучше 2-й вариант возьму, а можно вкратце по строкам, где что происходит)
0
_script_
170 / 138 / 34
Регистрация: 01.05.2012
Сообщений: 414
20.01.2014, 21:33 #7
Сфня, можно)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
 
using namespace std;
 
int to10(string str) //Функция перевода строки с числом в двоичной в число в десятичной
{
    int rez=0;
    int k=1;
    for (int i=str.length()-1; i>=0; i--,k*=2)  //В цикле прибавляем к результату следующую степень двойки, если 1. Цикл идет с конца строки
        if (str[i]=='1')
            rez+=k;
    return rez;
}
 
int main()
{
    string str_ch1;
    int ch2;
    cin >> str_ch1; //Вводим первое число
    cin >> ch2;     //Вводим второе число
    int ch1=to10(str_ch1);  //Преобразовуем строку в число
    cout << ch1*ch2;        //Умножаем и выводим результат
    return 0;
}
1
Сфня
0 / 0 / 0
Регистрация: 23.11.2013
Сообщений: 49
20.01.2014, 21:34  [ТС] #8
Спасибо, за помощь)
0
Сфня
0 / 0 / 0
Регистрация: 23.11.2013
Сообщений: 49
22.01.2014, 21:39  [ТС] #9
Еще поинтересуюсь как сделать так, чтобы программа считала и дробную часть! Ото я не понял правильно ли она считает(
0
_script_
170 / 138 / 34
Регистрация: 01.05.2012
Сообщений: 414
22.01.2014, 21:41 #10
Сфня, в данном коде работа только с целыми числами
0
Сфня
0 / 0 / 0
Регистрация: 23.11.2013
Сообщений: 49
22.01.2014, 21:59  [ТС] #11
Странно) А у меня считал) Только суть одна и та же( А как сделать чтобы еще и дробную считал?

Добавлено через 9 минут
Все очень печально(
0
_script_
170 / 138 / 34
Регистрация: 01.05.2012
Сообщений: 414
22.01.2014, 22:08 #12
Вот переделал код) теперь можно и дробный в двоичной писать)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
 
using namespace std;
 
double to10(string str) //Функция перевода строки с числом в двоичной в число в десятичной
{
    double rez=0.0;
    int pos=str.find('.');  //Находим точку
 
    int k=1;
    if (pos==-1)    //Есди число целое
    {
        for (int i=str.length()-1; i>=0; i--,k*=2)  //В цикле прибавляем к результату следующую степень двойки, если 1. Цикл идет с конца строки
        if (str[i]=='1')
            rez+=k;
    }
    else    //Если число дробное
    {
        for (int i=pos-1; i>=0; i--,k*=2)
            if (str[i]=='1')
            rez+=k;
 
        k=2;
        for (int i=pos+1; i<str.length(); i++,k*=2)
            if (str[i]=='1')
                rez+=(1.0/double(k));
    }
 
    return rez;
}
 
int main()
{
    setlocale(NULL,"rus");
    string str_ch1;
    double ch2;
    cout << "первое число(в двоичной системе счисления):";
    cin >> str_ch1; //Вводим первое число
    cout << "второе число(в десятичной системе счисления):";
    cin >> ch2;     //Вводим второе число
 
    double ch1=to10(str_ch1);  //Преобразовуем строку в число
    cout << ch1<<'*'<<ch2<<'='<<ch1*ch2;        //Умножаем и выводим результат
    return 0;
}
1
Сфня
0 / 0 / 0
Регистрация: 23.11.2013
Сообщений: 49
22.01.2014, 22:20  [ТС] #13
Большое спасибо, вот теперь работает
0
22.01.2014, 22:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.01.2014, 22:20
Привет! Вот еще темы с ответами:

Написать функцию умножения двух,заданных с клавиатуры чисел, используя только операцию умножения и рекурсию - C++
Помогите пожалуйста с рекурсией Написать функцию умножения двух,заданных с клавиатуры чисел, используя только операцию умножения и...

Смоделировать операцию умножения двух целых чисел - C++
Смоделировать операцию умножения двух целых чисел длиной до 30 десятичных цифр каждое. Результат выдать в форме +\- 0.m E K, где длина...

Рекурсия: функция умножения двух чисел, используя только операцию сложения - C++
Напишите функцию умножения двух чисел, используя только операцию сложения(через рекурсию)

Написать функцию умножения двух чисел, используя только операцию сложения - C++
Используя рекурсивные функции, решить следующую задачу. Написать функцию умножения двух чисел, используя только операцию сложения


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.