Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
0 / 0 / 0
Регистрация: 08.06.2014
Сообщений: 72

Локальные, глобальные переменные и функции

10.04.2015, 16:18. Показов 3506. Ответов 36
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть массив типа char.
char b;
Он заполнен нулями и единицами. b находится в main.
Нужно вывести на консоль b в ф-ции main, но уже в десятичном виде.

Вопрос: Как определить b другой функции, которая осуществляет перевод?

То есть мне надо как-то обратиться к этому массиву, чтоб он существовал для функции BinToDec.

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
int main()
{
    char b[31];
    /*
    Тут часть программы, которая не важна в данном вопросе. Происходит заполнение мсассива.
    */
    cout << "Колесо катится со скоростью " << BinToDec() << " километров в час." << endl;
 
    return 0;
}
 
void BinToDec (...)
{
    int digit = b;
    int i = 0;
    int digitT = digit;
    int rest = 1;
    //Определение числа разрядов
    while (digitT >= 1 && rest <= 1)
    {
        rest = digitT % 10;
        digitT = digitT / 10;
        i++;
    }
    int two = 1;
    int sum = 0;
    digitT = digit;
    if (rest>1) 
    {
        cout<<"Это не двоичная система!\n";
    }
    else
    {
        while (i > 0)
        {
            rest = digitT % 10;
            digitT = digitT / 10;
            sum = sum + rest * two;
            two = two * 2;
            i = i - 1;
        }
            cout << "Число " << digit << " в десятичной системе = " << sum << endl;
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.04.2015, 16:18
Ответы с готовыми решениями:

Курсовой проект с темой "Локальные и глобальные переменные. Правила видимости переменных в С++"
Суть програмы заключается в том чтобы показать суть и разницу локальных и глобальных переменных в с++ и правила видимости в с++ также можно...

Глобальные и локальные переменные: что лучше (или что для чего и в чем конкретная разница)?
Что лучше (или как надо (или что для чего и в чем конкретная разница)): 1. // объявление в глобальной области видимости ...

Глобальные переменные в функции
Подскажите плиз, а можна ли глобальную переменную обявить как то в функции?

36
0 / 0 / 0
Регистрация: 08.06.2014
Сообщений: 72
10.04.2015, 17:58  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от John Prick Посмотреть сообщение
Не придумывай. Вот эта ошибка:
Сообщение от BsSlayer
error C3861: BinToDec: идентификатор не найден
исправится.
Странно... Сейчас попробовал и исправилась. Ума не приложу как так, ведь до этого (чесслово) не помогало. Это я какой-то кривой, видимо

Добавлено через 15 минут
John Prick,
Цитата Сообщение от John Prick Посмотреть сообщение
Остальные ошибки исправляются другими действиями.
Поможете разобраться с этими действиями?
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
10.04.2015, 18:00
Цитата Сообщение от BsSlayer Посмотреть сообщение
Никак не пойму что не нравится ему. Раньше вроде как получалось так переводить из массива char в int.
b[i] внезапно не массив char, а элемент массива (собственно, сам char). Может вам учебник сначала почитать? А то, грубо говоря, вы просите объяснить вам правила склонений, но при этом с трудом отличаете глагол от предлога.
0
0 / 0 / 0
Регистрация: 08.06.2014
Сообщений: 72
10.04.2015, 18:09  [ТС]
Renji, я понимаю это прекрасно.

C++
1
2
3
4
for(int i =31; i>=0; i--)
        {
            digit += atoi(b[i]);
        }
В том-то и дело, что я ПОЭЛЕМЕНТНО приплюсовываю массив, чтоб ЦЕЛИКОМ его вытащить в int.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
10.04.2015, 18:19
Цитата Сообщение от BsSlayer Посмотреть сообщение
Renji, я понимаю это прекрасно.
Тогда зачем пихаете char в atoi, когда компилятор у вас просит const char* (массив символов)? И вообще, на кой черт вам там atoi понадобился, если все это записывается как b[i]-'0'?
Цитата Сообщение от BsSlayer Посмотреть сообщение
В том-то и дело, что я ПОЭЛЕМЕНТНО приплюсовываю массив, чтоб ЦЕЛИКОМ его вытащить в int.
И получаете количество единиц в массиве. += как ни странно, оператор сложения.
0
0 / 0 / 0
Регистрация: 08.06.2014
Сообщений: 72
10.04.2015, 18:21  [ТС]
Renji, Я ведь и прошу помощи, потому что не до конца всё понимаю. Подскажите, если не сложно, Вы ведь знаете, как я понял...
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
10.04.2015, 18:34
Цитата Сообщение от BsSlayer Посмотреть сообщение
Renji, Я ведь и прошу помощи, потому что не до конца всё понимаю. Подскажите, если не сложно, Вы ведь знаете, как я понял...
digit=strtol(b,0,2). Вместо цикла.
0
0 / 0 / 0
Регистрация: 08.06.2014
Сообщений: 72
10.04.2015, 21:41  [ТС]
Renji, в итоге доработки и изменения программы вышло так, что я понял, что там лучше использовать тип String. Только теперь вылазит ошибка. Как тут быть?

C++
1
2
3
4
int BinToDec (string b)
{
        int digit;
        digit=strtol(b,0,2);
Миниатюры
Локальные, глобальные переменные и функции  
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
10.04.2015, 21:45
Цитата Сообщение от BsSlayer Посмотреть сообщение
Renji, в итоге доработки и изменения программы вышло так, что я понял, что там лучше использовать тип String. Только теперь вылазит ошибка. Как тут быть?
stol(b,0,2)
Ну и int BinToDec (string b) int BinToDec (const string&b)
0
0 / 0 / 0
Регистрация: 08.06.2014
Сообщений: 72
10.04.2015, 21:54  [ТС]
Renji, спасибо, скомпилировалось.
Но потом опять в процессе выполнения получаю ошибку в строке
C++
1
digit=stol(b,0,2);
Миниатюры
Локальные, глобальные переменные и функции  
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
10.04.2015, 22:04
Цитата Сообщение от BsSlayer Посмотреть сообщение
Но потом опять в процессе выполнения получаю ошибку в строке
b не распозналось как число в двоичной системе. Проверяйте чего там такого лежало, что stol подавилось.
0
0 / 0 / 0
Регистрация: 08.06.2014
Сообщений: 72
10.04.2015, 22:34  [ТС]
Renji, нашёл.
В функции main я преобразовывал массив char в string. Вышло неудачно... Подскажите, как тут лучше перевести из char[] в string?

C++
1
2
3
    int g;
    string s = b;
    g = BinToDec(s);
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
10.04.2015, 22:43
Раз вышло неудачно, значит что-то не так с b. Запустите программу под отладчиком и посмотрите что там в b лежит.
0
0 / 0 / 0
Регистрация: 08.06.2014
Сообщений: 72
10.04.2015, 22:53  [ТС]
Renji, там массив с единицами и нулями. В данном массиве 31 ноль и 1 единица

Получается b пока ещё нормальный массив, а вот уже в s что-то не то... И я не пойму что.
Миниатюры
Локальные, глобальные переменные и функции  
Изображения
 
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
10.04.2015, 22:56
Ага, понятно. Нужно записать в массив не 1 и 0, а '1' и '0' (именно с кавычками). А после них поставить ноль (0 без кавычек).
0
0 / 0 / 0
Регистрация: 08.06.2014
Сообщений: 72
10.04.2015, 22:58  [ТС]
Renji, но ведь запись в массив у меня идёт вот где...

Не пойму как тут кавычками обрамлять каждый символ...

C++
1
2
3
4
5
6
7
8
9
10
11
12
for (unsigned int ii = 0; ii < 2; ii++)
            {
                for (int j = 31; j >= 0; --j)
                {
                    cout << (ii>>j)%2 << " ";
                    if(ii==1)
                    {
                        mass[j]=(ii>>j)%2;
                    }
                }
                cout << endl;       
            }
P.S. Тут сначала идёт запись в массив mass. Из него я потом переношу в массив b. Это я делаю, чтоб поменять "левую" и "правую" части массива местами... Можно считать mass за b.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
10.04.2015, 23:24
(ii>>j)%2 (ii>>j)%2?'1':'0'
0
0 / 0 / 0
Регистрация: 08.06.2014
Сообщений: 72
10.04.2015, 23:36  [ТС]
Renji, спасибо большое.

Только теперь всё записывается в 48 и 49, то есть через код символа, поэтому функция DecToBin у меня выводит на экран "Это не двоичная система"... Как сделать, чтоб в функции оно определялось как нули и единицы?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.04.2015, 23:36
Помогаю со студенческими работами здесь

Локальные переменные в функции и её аргумент
Привет! Пишу функцию перевода десятичного числа в текст (не обсуждайте зачем и правильно ли я делаю) Суть такова, начало функции: ...

Передать локальные переменные другой функции
Есть функция (допустим, main), в ней объявлены локальные переменные. Есть другая функция, к которой обращается main. Эта функция (func) по...

Какие в коде имеются глобальные переменные, процедуры и функции
И за что они отвечают? #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;locale&gt; #include &lt;cstdlib&gt; using namespace std; ...

Глобальные и статические глобальные переменные
Скажите, чем отличаются глобальные переменные от статических глобальных переменных?

Что такое глобальные и локальные объекты класса?
Что такое глобальние и локальные обекты класа. Напишыте пожалуста с примерами.


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

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru