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

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

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

Мусор в массиве - C++

16.01.2014, 01:17. Просмотров 825. Ответов 21
Метки нет (Все метки)

Задание: Подсчитать количество ненулевых разрядов в двоичной записи заданного натурального числа.
Например в числе 13210 = 100001002 - 2 ненулевых разряда.
Вот, что я написал... Когда я вывожу на экран, после двоичного кода, у меня какой то мусор, помогите разобраться, пожалуйста!
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 "conio.h"
#include "stdio.h"
#include "math.h"
#include "stdlib.h"
 
void GetBit (int n, int mas[]) {
    for (int i=1;n>=1;i++){
      mas[31-i]=n%2;
      n/=2;
    }
}
void ClearArray (int mas[]) {
    for (int i=0;i<31; i++) {
        mas[i]=0;
    }
}
 
int Count (int c,int mas[]) {
    for (int i=0;i<31; i++) {
        if (mas[i]==1) {c++;}
    }
    return c;
}
 
int main()
{
   int x,n,a,b,c,i;
   int mas[32];
 
   ClearArray(mas);
   printf ("Vvedite chislo: \n");
   scanf("%i",&n);
   GetBit(n,mas); 
   printf ("Chislo v dvoichnom vide:\n");
 
   for (i=0;i<n;i++){
     printf ("%i",mas[i]);
     }
 
   printf ("Kolichestvo nenulevih razrjadov\n");
   printf ("%i",&c);
   
        while (!kbhit());
        return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2014, 01:17     Мусор в массиве
Посмотрите здесь:

Записывается мусор в файл C++
C++ Мусор в строках
C++ Мусор в файлах
Мусор C++
C++ Мусор в строке
Мусор в переменной C++
Мусор и оператор new C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
korep
51 / 44 / 9
Регистрация: 06.01.2013
Сообщений: 590
16.01.2014, 01:41     Мусор в массиве #2
массив создайте динамическим и перед каждым добавлением доюовляйте элемент

Добавлено через 51 секунду
тогда у вас весь в массиве не останется пустых элементов, которые выдает непонято что.
clown_exe
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 20
16.01.2014, 01:46  [ТС]     Мусор в массиве #3
Цитата Сообщение от korep Посмотреть сообщение
массив создайте динамическим и перед каждым добавлением доюовляйте элемент

Добавлено через 51 секунду
тогда у вас весь в массиве не останется пустых элементов, которые выдает непонято что.
Не могли бы поточнее указать на ошибку и её решение, потому что я уже совсем запутался.
korep
51 / 44 / 9
Регистрация: 06.01.2013
Сообщений: 590
16.01.2014, 01:53     Мусор в массиве #4
Даже проще вектора.
Объявление: vector<int> array;
Добавление push_back(value);
Выбор элемента at(i);
Header #include <vector.h> или в кавычках
cooller
564 / 532 / 120
Регистрация: 25.12.2013
Сообщений: 1,456
16.01.2014, 01:56     Мусор в массиве #5
Цитата Сообщение от korep Посмотреть сообщение
Header #include <vector.h> или в кавычках
просто
C++
1
#include<vector>
clown_exe
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 20
16.01.2014, 01:56  [ТС]     Мусор в массиве #6
Цитата Сообщение от korep Посмотреть сообщение
Даже проще вектора.
Объявление: vector<int> array;
Добавление push_back(value);
Выбор элемента at(i);
Header #include <vector.h> или в кавычках
а куда мне нужно разместить этот вектор ?
korep
51 / 44 / 9
Регистрация: 06.01.2013
Сообщений: 590
16.01.2014, 02:00     Мусор в массиве #7
Использовать вместо массивов. Количество записанных элементов там выдает count()

Добавлено через 1 минуту
Очистить список clear, в результате Вы сможете уменьшить и упростить код.
clown_exe
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 20
16.01.2014, 02:02  [ТС]     Мусор в массиве #8
Цитата Сообщение от korep Посмотреть сообщение
Использовать вместо массивов. Количество записанных элементов там выдает count()

Добавлено через 1 минуту
Очистить список clear, в результате Вы сможете уменьшить и упростить код.
hm... Я извиняюсь, но не могли бы вы исправить мой код, на ваш вариант ?
korep
51 / 44 / 9
Регистрация: 06.01.2013
Сообщений: 590
16.01.2014, 02:02     Мусор в массиве #9
Но в функцию надо будет передавать ссылку на вектор.
cooller
564 / 532 / 120
Регистрация: 25.12.2013
Сообщений: 1,456
16.01.2014, 02:03     Мусор в массиве #10
Цитата Сообщение от korep Посмотреть сообщение
Использовать вместо массивов. Количество записанных элементов там выдает count()
C++
1
vec.size();
korep
51 / 44 / 9
Регистрация: 06.01.2013
Сообщений: 590
16.01.2014, 02:05     Мусор в массиве #11
Там есть функция count это один из плюсов по отношению к динамическим массивами.
clown_exe
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 20
16.01.2014, 02:08  [ТС]     Мусор в массиве #12
так, теперь я окончательно запутался.
cooller
564 / 532 / 120
Регистрация: 25.12.2013
Сообщений: 1,456
16.01.2014, 02:08     Мусор в массиве #13
korep, В vector нет функции count!!!
clown_exe
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 20
16.01.2014, 02:16  [ТС]     Мусор в массиве #14
Цитата Сообщение от cooller_94 Посмотреть сообщение
korep, В vector нет функции count!!!
Не могли бы вы исправить мой код ? а то, я совсем запутался и не могу найти ошибку
cooller
564 / 532 / 120
Регистрация: 25.12.2013
Сообщений: 1,456
16.01.2014, 02:24     Мусор в массиве #15
clown_exe, Могу написать на С++
clown_exe
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 20
16.01.2014, 02:28  [ТС]     Мусор в массиве #16
Цитата Сообщение от cooller_94 Посмотреть сообщение
clown_exe, Могу написать на С++
Мне и нужно на С++, буду очень благодарен
cooller
564 / 532 / 120
Регистрация: 25.12.2013
Сообщений: 1,456
16.01.2014, 02:39     Мусор в массиве #17
clown_exe, держи
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
#include "stdafx.h"
#include<iostream>
#include<cmath>
 
int Binary(int number)
{
    int i, b;  
    long c = 0;  
    for(i=0;number > 0;i++)  
    {
        b = number % 2;  
        number = (number-b)/2;
        c += b * pow(10,(double)i);
    }
    return c;
}
 
int Discharge(int n)
{
    int kol = 0;
    while(n>0)
    {
        if(n%10 == 1)
            kol++;
        n/=10;
    }
    return kol;
}
 
 
int main()
{
    int N;
    std::cout<<"Input number:";
    std::cin>>N;
    std::cout<<"Number in binary form:"<<Binary(N);
    std::cout<<"\nKol = "<<Discharge(Binary(N));
    
 
    system("pause");
  return 0;
}
clown_exe
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 20
16.01.2014, 02:47  [ТС]     Мусор в массиве #18
Цитата Сообщение от cooller_94 Посмотреть сообщение
c += b * pow(10,(double)i);
можете объяснить эту строку ?

Добавлено через 5 минут
Цитата Сообщение от cooller_94 Посмотреть сообщение
std::cout<<"Input number:";
* * std::cin>>N;
* * std::cout<<"Number in binary form:"<<Binary(N);
* * std::cout<<"\nKol = "<<Discharge(Binary(N));
И что значит std , а то я ещё умею "писать" только с помощью Printf - Scanf
cooller
564 / 532 / 120
Регистрация: 25.12.2013
Сообщений: 1,456
16.01.2014, 03:24     Мусор в массиве #19
clown_exe, завтра переделаю по понятному, я офф

Добавлено через 10 минут
clown_exe,
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
#include "stdafx.h"
#include<iostream>
#include<cmath>
#include <conio.h>
 
 
 
int Discharge(int n)
{
    int kol = 0;
    while(n>0)
    {
        if(n%10 == 1)
            kol++;
        n/=10;
    }
    return kol;
}
 
int main()
{
    setlocale(LC_ALL,"Russian");
    int N;
    char a[33];
    printf("Введите число:");
    scanf ("%d",&N);
    printf("Число в двоичном виде = %s\n",ltoa(N,a,2));
    printf("Количество = %d\n",Discharge(atoi(ltoa(N,a,2))));   
 
    system("pause");
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.01.2014, 11:10     Мусор в массиве
Еще ссылки по теме:

Мусор в конце строки C++
C++ Мусор в консоли
C++ Мусор в массиве после использования malloc и memcpy
Мусор в массиве символов C++
Мусор в массиве C++

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

Или воспользуйтесь поиском по форуму:
SatanaXIII
Супер-модератор
Эксперт С++
5589 / 2623 / 239
Регистрация: 01.11.2011
Сообщений: 6,448
Завершенные тесты: 1
16.01.2014, 11:10     Мусор в массиве #20
Цитата Сообщение от cooller_94 Посмотреть сообщение
Цитата Сообщение от korep Посмотреть сообщение
Header #include <vector.h> или в кавычках
просто
C++
1
#include<vector>
В старых компиляторах с .h.

Цитата Сообщение от cooller_94 Посмотреть сообщение
#include "stdafx.h"
Студийные заголовки тоже не всем нужны.
Yandex
Объявления
16.01.2014, 11:10     Мусор в массиве
Ответ Создать тему
Опции темы

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