Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Сфня
0 / 0 / 0
Регистрация: 23.11.2013
Сообщений: 49
20.01.2014, 20:58     Числа по основанию 2 и 10. Выполнить операцию умножения #1
Числа по основанию 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2014, 20:58     Числа по основанию 2 и 10. Выполнить операцию умножения
Посмотрите здесь:

C++ : Написать функцию умножения двух чисел, используя только операцию сложения
C++ Смоделировать операцию умножения двух целых чисел
Написать программу, которая переводит числа по основанию 8 в 4. Выполнить операцию деления C++
Числа по основанию 8 и 4. Выполнить операцию деления C++
Написать функцию умножения двух чисел, используя только операцию сложения C++
Числа по основанию 10 и 16. Выполнить операцию сложения C++
Написать функцию умножения двух,заданных с клавиатуры чисел, используя только операцию умножения и рекурсию C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
_script_
169 / 137 / 34
Регистрация: 01.05.2012
Сообщений: 414
20.01.2014, 21:10     Числа по основанию 2 и 10. Выполнить операцию умножения #2
Нужно перевести первое число из двоичной системы в десятичную и выполнить у них умножение? так?
Сфня
0 / 0 / 0
Регистрация: 23.11.2013
Сообщений: 49
20.01.2014, 21:14  [ТС]     Числа по основанию 2 и 10. Выполнить операцию умножения #3
да, нужно сначала перевести из 2 в 10 систему счисления, а потом умножить оба числа в 10!
cooller
 Аватар для cooller
564 / 532 / 120
Регистрация: 25.12.2013
Сообщений: 1,456
20.01.2014, 21:19     Числа по основанию 2 и 10. Выполнить операцию умножения #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;
}
_script_
169 / 137 / 34
Регистрация: 01.05.2012
Сообщений: 414
20.01.2014, 21:22     Числа по основанию 2 и 10. Выполнить операцию умножения #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;
}
Сфня
0 / 0 / 0
Регистрация: 23.11.2013
Сообщений: 49
20.01.2014, 21:27  [ТС]     Числа по основанию 2 и 10. Выполнить операцию умножения #6
Спасибо, оба варианта работают) Я лучше 2-й вариант возьму, а можно вкратце по строкам, где что происходит)
_script_
169 / 137 / 34
Регистрация: 01.05.2012
Сообщений: 414
20.01.2014, 21:33     Числа по основанию 2 и 10. Выполнить операцию умножения #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;
}
Сфня
0 / 0 / 0
Регистрация: 23.11.2013
Сообщений: 49
20.01.2014, 21:34  [ТС]     Числа по основанию 2 и 10. Выполнить операцию умножения #8
Спасибо, за помощь)
Сфня
0 / 0 / 0
Регистрация: 23.11.2013
Сообщений: 49
22.01.2014, 21:39  [ТС]     Числа по основанию 2 и 10. Выполнить операцию умножения #9
Еще поинтересуюсь как сделать так, чтобы программа считала и дробную часть! Ото я не понял правильно ли она считает(
_script_
169 / 137 / 34
Регистрация: 01.05.2012
Сообщений: 414
22.01.2014, 21:41     Числа по основанию 2 и 10. Выполнить операцию умножения #10
Сфня, в данном коде работа только с целыми числами
Сфня
0 / 0 / 0
Регистрация: 23.11.2013
Сообщений: 49
22.01.2014, 21:59  [ТС]     Числа по основанию 2 и 10. Выполнить операцию умножения #11
Странно) А у меня считал) Только суть одна и та же( А как сделать чтобы еще и дробную считал?

Добавлено через 9 минут
Все очень печально(
_script_
169 / 137 / 34
Регистрация: 01.05.2012
Сообщений: 414
22.01.2014, 22:08     Числа по основанию 2 и 10. Выполнить операцию умножения #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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.01.2014, 22:20     Числа по основанию 2 и 10. Выполнить операцию умножения
Еще ссылки по теме:

Числа по основанию 2 и 16. Выполнить операцию умножения C++
Ввести два числа и выполнить указанную операцию C++
C++ Рекурсия: функция умножения двух чисел, используя только операцию сложения
C++ Получить два целых числа и найти их произведение, не используя операцию умножения

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

Или воспользуйтесь поиском по форуму:
Сфня
0 / 0 / 0
Регистрация: 23.11.2013
Сообщений: 49
22.01.2014, 22:20  [ТС]     Числа по основанию 2 и 10. Выполнить операцию умножения #13
Большое спасибо, вот теперь работает
Yandex
Объявления
22.01.2014, 22:20     Числа по основанию 2 и 10. Выполнить операцию умножения
Ответ Создать тему
Опции темы

Текущее время: 12:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru