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

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

Войти
Регистрация
Восстановить пароль
 
niikiita
3 / 3 / 0
Регистрация: 29.05.2013
Сообщений: 226
#1

Доделать заполнение динамического массива вручную - C++

25.05.2014, 14:52. Просмотров 867. Ответов 11
Метки нет (Все метки)

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
#include "stdafx.h"
#include <iostream>
#include <string>
 
using namespace std;
 
int main()
{
    char bvector1[11]={0,1,1,1,1,1,1,1,1,1,1};
    char bvector2[11]={0,1,0,0,0,0,0,0,0,0,0};
    char rezult[11];
    int i;
    char carry,sum;
    i=10;
    carry=0;
    while (i>=0)
    {
       sum=bvector1[i]-bvector2[i]+carry;
       rezult[i--]=sum&1;
       carry=sum>>1;
    }
    printf("\n");
    for (i=0; i<11; i++)
    printf("%d",(int)rezult[i]);
    system("Pause");
}
Вот код программы, складывающей двоичные числа. Вопрос следующий: как переделать, чтобы можно было вручную вводить числа? Попробовал с помощью динамических массивов, не пойму почему не работает:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
char *bvector1 = new char [9];
    char *bvector2 = new char [9];
    cin >> bvector1 >> bvector2;
    char rezult[9];
    int i;
    char carry,sum;
    i=8;
    carry=0;
    while (i>=0)
    {
       sum=bvector1[i]+bvector2[i]+carry;
       rezult[i--]=sum&1;
       carry=sum>>1;
     }
 printf("\n");
 for (i=0; i<9; i++)
     printf("%d",(int)rezult[i]);
    system("Pause");
    delete [] bvector1;
    delete [] bvector2;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2014, 14:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Доделать заполнение динамического массива вручную (C++):

Заполнение динамического массива числами от -50 до 50! - C++
Плиз помогите Заполненить динамический массив числами от -50 до 50!буду очень признателен

заполнение динамического двумерного массива - C++
Дано число n. Создайте массив int A и заполните его по спирали начиная с числа 0 в центральной клетке A. Спираль выходит вверх, далее...

Заполнение двумерного динамического массива - C++
Объявить и заполнить двумерный динамический массив случайными числами от 10 до 50. Показать его на экран. Для заполнения и показа на экран...

Заполнение двумерного динамического массива - C++
Доброго времени суток! Уважаемые коллеги! Второй день пытаюсь разобраться с вводом в char** символов, точнее строки символов. Создал...

Заполнение двумерного динамического массива - C++
int **Create(int size1, int size2) { int **Arr = new int*; for (int i = 0; i &lt; size1; i++) Arr = new int; return Arr; } ...

Динамическая матрица, заполнение динамического массива. - C++
Вот моя программа, которая никак не хочет работать, помогите пожалуйста. #include &quot;iostream&quot; #include &lt;cstdlib&gt; #include &lt;conio.h&gt; ...

11
zss
Модератор
Эксперт С++
6540 / 6102 / 2010
Регистрация: 18.12.2011
Сообщений: 15,878
Завершенные тесты: 1
25.05.2014, 15:44 #2
Вводятся коды цифр, и вам надо из них получить числа:
C++
1
2
3
4
5
6
7
8
9
10
11
char bvector1[100];
    char bvector2[100]; 
cin >> bvector1 >> bvector2;
for(int i=0;i<strlen(bvector1);i++)
{
   bvector1[i]-='0';
}
for(int i=0;i<strlen(bvector2);i++)
{
   bvector2[i]-='0';
}
0
niikiita
3 / 3 / 0
Регистрация: 29.05.2013
Сообщений: 226
25.05.2014, 16:40  [ТС] #3
Цитата Сообщение от zss Посмотреть сообщение
Вводятся коды цифр, и вам надо из них получить числа:
А как задать так, чтобы нулевой элемент массива был изначально равен нулю?

Добавлено через 22 минуты
Цитата Сообщение от zss Посмотреть сообщение
Вводятся коды цифр, и вам надо из них получить числа:
Я не пойму, вот вводим мы число, например 11110101. Потом мы от числа отнимает код нуля: 1 - '0' - в чем смысл этого?
0
zss
Модератор
Эксперт С++
6540 / 6102 / 2010
Регистрация: 18.12.2011
Сообщений: 15,878
Завершенные тесты: 1
25.05.2014, 16:56 #4
Цитата Сообщение от niikiita Посмотреть сообщение
вот вводим мы число, например 11110101
Т.к. массивы bvector1 bvector2 имеет тип char, то Вы вводите буквы.
Соответственно, если введена буква '1', то '1'-'0' Даст число 1, а '0'-'0' - число 0

Добавлено через 1 минуту
Цитата Сообщение от niikiita Посмотреть сообщение
как задать так, чтобы нулевой элемент массива был изначально равен нулю?
можно, конечно написать bvector1[0]=0; только зачем? cin>>bvector1; его затрет.
0
niikiita
3 / 3 / 0
Регистрация: 29.05.2013
Сообщений: 226
25.05.2014, 17:17  [ТС] #5
Цитата Сообщение от zss Посмотреть сообщение
Т.к. массивы bvector1 bvector2 имеет тип char, то Вы вводите буквы.
Соответственно, если введена буква '1', то '1'-'0' Даст число 1, а '0'-'0' - число 0
Это понятно. А как мне дальше,например в массиве char rezult[9]; определить, количество этих введённых символов?
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
char bvector1[100];
    char bvector2[100]; 
    cin >> bvector1 >> bvector2;
    for(int i=0;i  <strlen(bvector1); i++)
    {
        bvector1[i]-='0';
    }
    for(int i=0;i < strlen(bvector2); i++)
    {
        bvector2[i]-='0';
    }
    int q;
    strlen(bvector2) == q;
    char rezult[q];
    int i;
    char carry,sum;
    i=q-1;
    carry=0;
    while (i>=0)
    {
       sum=bvector1[i]+bvector2[i]+carry;
       rezult[i--]=sum&1;
       carry=sum>>1;
     }
 printf("\n");
 for (i=0; i<q; i++)
     printf("%d",(int)rezult[i]);
    system("Pause");
Пытался так, но выдает что выражение должно иметь константное значение
0
zss
Модератор
Эксперт С++
6540 / 6102 / 2010
Регистрация: 18.12.2011
Сообщений: 15,878
Завершенные тесты: 1
25.05.2014, 17:46 #6
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
   cin >> bvector1 >> bvector2;
     int L1=strlen(bvector1);
    for(int i=0;i  <L1; i++)
    {
        bvector1[i]-='0';
    }
    int L2=strlen(bvector2);
    for(int i=0;i < L2; i++)
    {
        bvector2[i]-='0';
    }
    int q=L2; // !!!!! нет гарантии, что L1 равно L2
    char rezult[100];
    int i;
    char carry,sum;
    i=q-1;
    carry=0;
    while (i>=0)
    {
       sum=bvector1[i]+bvector2[i]+carry;
       rezult[i--]=sum&1;
       carry=sum>>1;
     }
 printf("\n");
 for (i=0; i<q; i++)
     printf("%d",(int)rezult[i]);
    system("Pause");
0
niikiita
3 / 3 / 0
Регистрация: 29.05.2013
Сообщений: 226
25.05.2014, 18:40  [ТС] #7
Цитата Сообщение от zss Посмотреть сообщение
[CPPchar bvector1[9]={0,1,0,1,0,1,1,1,1};
char bvector2[9]={0,1,0,1,1,0,1,0,1};
char rezult[9];
int i;
char carry,sum;

i=8;
carry=0;
while (i>=0) {
sum=bvector1[i]+bvector2[i]+carry;
rezult[i--]=sum&1;
carry=sum>>1;
}
printf("\n");
for (i=0; i<9; i++)
printf("%d",(int)rezult[i]);
[/CPP]
Вы не могли бы объяснить, как работает этот кусок кода?
sum=bvector1[i]-bvector2[i]+carry;// '1' + '1' + '0' = ??
rezult[i--]=sum&1;// выделение следующего бита так?
carry=sum>>1;// сдвиг на следующий бит, но каким образом? '0' = сдвигу. Как это?
0
zss
Модератор
Эксперт С++
6540 / 6102 / 2010
Регистрация: 18.12.2011
Сообщений: 15,878
Завершенные тесты: 1
25.05.2014, 18:47 #8
Цитата Сообщение от niikiita Посмотреть сообщение
sum=bvector1[i]+bvector2[i]+carry;
В арифметических выражениях char интерпретируется как int,
так что там после вычитания кода буквы ноль ('0') получается не
'1'+'1'+0, а 1+1+0
0
niikiita
3 / 3 / 0
Регистрация: 29.05.2013
Сообщений: 226
25.05.2014, 19:13  [ТС] #9
Цитата Сообщение от zss Посмотреть сообщение
В арифметических выражениях char интерпретируется как int,
так что там после вычитания кода буквы ноль ('0') получается не
'1'+'1'+0, а 1+1+0
1+1+0=2, в чем смысл этой строки? carry=sum>>1;
0
zss
Модератор
Эксперт С++
6540 / 6102 / 2010
Регистрация: 18.12.2011
Сообщений: 15,878
Завершенные тесты: 1
25.05.2014, 19:26 #10
Цитата Сообщение от niikiita Посмотреть сообщение
1+1+0=2
2 - в двочной системе 10, если сдвинуть на 1 разряд, то получим 1.
0
niikiita
3 / 3 / 0
Регистрация: 29.05.2013
Сообщений: 226
25.05.2014, 19:37  [ТС] #11
Цитата Сообщение от zss Посмотреть сообщение
2 - в двочной системе 10, если сдвинуть на 1 разряд, то получим 1.
Как переписать программу, чтобы она считала с разными длинами? вот например:
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
char bvector1[100];
    char bvector2[100]; 
        cin >> bvector1 >> bvector2;
    int L1=strlen(bvector1);
    for(int i=0;i  <L1; i++)
    {
       bvector1[i]-='0';
    }
    int L2=strlen(bvector2);
    for(int i=0;i < L2; i++)
    {
       bvector2[i]-='0';
    }
    int G = L1;
    if(L2 > L1){ L2 = G;}
 
    int q=G; 
    char rezult[100];
    int i;
    char carry,sum;
    i=q-1;
    carry=0;
    while (i>=0)
    {
       sum=bvector1[i]+bvector2[i]+carry;
       rezult[i--]=sum&1;
       carry=sum>>1;
     }
 printf("\n");
 for (i=0; i<q; i++)
     printf("%d",(int)rezult[i]);
    system("Pause");
но ответы не верные получаются
0
niikiita
3 / 3 / 0
Регистрация: 29.05.2013
Сообщений: 226
30.05.2014, 20:24  [ТС] #12
Цитата Сообщение от zss Посмотреть сообщение
Вводятся коды цифр, и вам надо из них получить числа:
Код C++
1
2
3
4
5
6
7
8
9
10
11
char bvector1[100];
* * char bvector2[100];
cin >> bvector1 >> bvector2;
for(int i=0;i<strlen(bvector1);i++)
{
* *bvector1[i]-='0';
}
for(int i=0;i<strlen(bvector2);i++)
{
* *bvector2[i]-='0';
}
А зачем мне из букв получать числа? До этого в символьном виде все считалось.
0
30.05.2014, 20:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.05.2014, 20:24
Привет! Вот еще темы с ответами:

Создание динамического массива и его заполнение - C++
как можно создать динамический массив чтобы пользователь сам ввел размерность и заполнил его? вот мои наработки. массив вроде создал, но...

Заполнение динамического массива случайными числами - C++
оч нужна помощь написать в консоли программу: динаммический массив размерностью 20 заполняется случайными числами

Заполнение динамического массива через указатели - C++
Есть два одномерных динамических массива: А и B. Необходимо создать третий массив С, в котором надо записать общие элементы двух массивов....

Заполнение динамического массива структур из бинарного файла - C++
Здравствуйте! Нужна помощь в реализации вот такого алгоритма: предположим, что изначально мы создали динамический массив структур и...


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

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

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