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

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

10.04.2015, 16:18. Показов 3504. Ответов 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 / 1
Регистрация: 10.04.2015
Сообщений: 4
10.04.2015, 16:27
void BinToDec (char b[])

так?
0
0 / 0 / 0
Регистрация: 08.06.2014
Сообщений: 72
10.04.2015, 16:32  [ТС]
Пробовал так, но потом вылазит такая ошибка...
Миниатюры
Локальные, глобальные переменные и функции  
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
10.04.2015, 16:35
Цитата Сообщение от BsSlayer Посмотреть сообщение
<< BinToDec()
Что здесь по вашему должно выводиться, если BinToDec ничего не возвращает (void)?
0
16 / 16 / 11
Регистрация: 23.10.2013
Сообщений: 60
10.04.2015, 16:38
int main() и void BinToDec (...) - функции, которые никак по сути не связаны.
у функции BinToDec (...) в скобочках указываешь параметры, как я понимаю, в твоей задаче это массив и число элементов в массиве
C++
1
int digit = b;
эта строка (номер 14), если ты считаешь, что b - массив не верна в принципе, поскольку int и char[] - разные вещи

+ чтобы не запутаться лучше в функции void BinToDec (...) в аргументах укажи массив с названием mas (или другой, но не b)

когда вызываешь функцию BinToDec (...) из main, то ты передаешь ей нужные аргументы
0
0 / 0 / 1
Регистрация: 10.04.2015
Сообщений: 4
10.04.2015, 16:47
Наверно эта функция должна вернуть число
C++
1
2
3
4
5
6
int BinToDec (char b[])
{
    ...
    ...
    return sum;
}
0
0 / 0 / 0
Регистрация: 08.06.2014
Сообщений: 72
10.04.2015, 16:49  [ТС]
Ultrafight, Я сделал вот так, но не пойму, как мне сделать так, чтоб char перевести в int...

C++
1
2
3
4
5
6
7
8
9
10
    
    char b[31];
    cout << "Колесо " << a << " со скоростью " << BinToDec(b) << " километров в час." << endl;
 
    return 0;
}
 
int BinToDec (char b[])
{
        int digit = b;

Пробовал так

C++
1
2
3
4
5
6
7
8
int BinToDec (char b[])
{
    int digit;
    for(int i =31; i>=0; i--)
    {
        digit += atoi(b[i]);
    }
}
Но так тоже не выходит...

Добавлено через 2 минуты
Snek, Даже, если она возвращает sum, я не пойму какие параметры давать BinToDec() при её выводе в ф-ии main.
0
2393 / 1920 / 763
Регистрация: 27.07.2012
Сообщений: 5,560
10.04.2015, 16:51
C++
1
2
3
4
5
6
7
8
9
int BinToDec (char b[])
{
    int digit;
    for(int i =31; i>=0; i--)
    {
        digit += atoi(b[i]);
    }
    return digit; // <-- возвращаем значение
}
0
16 / 16 / 11
Регистрация: 23.10.2013
Сообщений: 60
10.04.2015, 16:56
BsSlayer, ты понимаешь, в чем разница, если перед функцией стоит int или void?
0
0 / 0 / 0
Регистрация: 08.06.2014
Сообщений: 72
10.04.2015, 17:03  [ТС]
Ultrafight, если честно, то в функциях, обращении к ним и их аргументах я вообще не шарю...

Добавлено через 5 минут
Когда пишу так,
C++
1
cout << "Колесо " << a << " со скоростью " << BinToDec(b) << " километров в час." << endl;
то пишет ошибку error C3861: BinToDec: идентификатор не найден
0
16 / 16 / 11
Регистрация: 23.10.2013
Сообщений: 60
10.04.2015, 17:07
если функция int BinToDec (char b[]), то она возвращает целое число (в ней должна быть строка return xxx; где xxx (просто так переменную назвал) - целое число... может быть написано return 5; например)
если бы было char BinToDec (char b[]), то функция должна возвращать символ,
если void - то пустой тип (т.е. ничего)

в main у тебя есть строка
C++
1
cout << "Колесо катится со скоростью " << BinToDec(...) << " километров в час." << endl;
программа выполняет эту функцию с переданными в нее аргументами, а потом результат (return функции) подставляет в cout

например, если функция вернула символ '#', то прога выведет строку
Колесо катится со скоростью # километров в час

ты сам должен выбирать тип функции исходя из того, значение какого типа хочешь вернуть

Добавлено через 1 минуту
Цитата Сообщение от BsSlayer Посмотреть сообщение
cout << "Колесо " << a << " со скоростью " << BinToDec(b) << " километров в час." << endl;
тебе нужен тот тип функции, который "понравится" cout.

Добавлено через 1 минуту
кинь весь код, который ты написал, я попробую подредактировать
0
2393 / 1920 / 763
Регистрация: 27.07.2012
Сообщений: 5,560
10.04.2015, 17:11
Цитата Сообщение от BsSlayer Посмотреть сообщение
то пишет ошибку error C3861: BinToDec: идентификатор не найден
Перенеси функцию перед main.
0
0 / 0 / 0
Регистрация: 08.06.2014
Сообщений: 72
10.04.2015, 17:14  [ТС]
Цитата Сообщение от Ultrafight Посмотреть сообщение
тебе нужен тот тип функции, который "понравится" cout.
Я уже поперебирал типы, но всё равно выдаёт ошибку. А ещё две ошибки вылазят тут в строке digit += atoi(b[i]);

C++
1
2
3
4
5
6
7
int BinToDec (char b[])
{
        int digit;
        for(int i =31; i>=0; i--)
        {
            digit += atoi(b[i]);
        }
Пишет: error C2664: atoi: невозможно преобразовать параметр 1 из "char" в "const char *
и IntelliSense: аргумент типа "char" несовместим с параметром типа "const char *

Никак не пойму что не нравится ему. Раньше вроде как получалось так переводить из массива char в int.

Добавлено через 1 минуту
John Prick, то же самое получается
0
16 / 16 / 11
Регистрация: 23.10.2013
Сообщений: 60
10.04.2015, 17:15
кидай код всей проги, так тяжело понять, в чем ошибка.
0
2393 / 1920 / 763
Регистрация: 27.07.2012
Сообщений: 5,560
10.04.2015, 17:16
Цитата Сообщение от BsSlayer Посмотреть сообщение
то же самое получается
Какая-то безысходность... Выложи ВЕСЬ код, который на данный момент у тебя есть.

Добавлено через 46 секунд
Цитата Сообщение от BsSlayer Посмотреть сообщение
Раньше вроде как получалось так переводить из массива char в int.
Что именно переводить? Что лежит в массиве? Строка с числом? Набор чисел?
0
16 / 16 / 11
Регистрация: 23.10.2013
Сообщений: 60
10.04.2015, 17:19
Цитата Сообщение от John Prick Посмотреть сообщение
Какая-то безысходность... Выложи ВЕСЬ код, который на данный момент у тебя есть.
вот я тож пытаюсь этого добиться)

BsSlayer, пойми, пока код мы сами не сможем скомпилить и исправить, мы мало чем сможем помочь ^_^
0
0 / 0 / 0
Регистрация: 08.06.2014
Сообщений: 72
10.04.2015, 17:26  [ТС]
Ultrafight, John Prick, Вот весь код:
Но для начала поясню что к чему...
Мы считываем секунды из системного времени и по прошествии пяти секунд выводим на экран число i, которое инкрементировалось с каждым циклом for. Число получается около 6 миллионов.
Потом строим бинарную таблицу до той самой шестимиллионной строки вида:
... 0 0 0 0 0
... 0 0 0 0 1
... 0 0 0 1 0
... 0 0 0 1 1
... 0 0 1 0 0
... 0 0 1 0 1
... 0 0 1 1 0
... 0 0 1 1 1
................
где в 32-символьной строке справа постоянно увеличивается бинарное число.
Затем окончательный вариант считываем и проверяем 15 (а в массиве он будет 14-м) элемент массива mass. Если он = 1, то колесо едет в одну сторону, если 0, то в другую.
Затем меняем местами части до и после 15 элемента и получившееся бинарное число переводим в десятичную систему.

Кстати, у меня была идея, чтоб пока проходят 5 секунд ожидания, на экране мигало "Загрузка", но почему-то по прошествии 5 секунд программа не выходит из цикла while для написание этого в консоль... Я пока отказался от этой идеи.

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
#include <iostream>
#include <stdlib.h>
#include <ctime>
#include <windows.h>
#include <bitset>
#include <string.h>
#include <cstdio>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "russian");
 
    char Seconds[60];
    time_t t;
    time(&t);
    tm *local = localtime (&t); 
    strftime(Seconds, sizeof(Seconds)/sizeof(Seconds[0]), "%S", local);
    double a = atoi(Seconds);
 
    //bool q = true;
 
    int mass[64] = {0};
 
    for (unsigned int i = 0; ; i++)
    {
        time_t t;
        time(&t);
        tm *local = localtime (&t); 
        strftime(Seconds, sizeof(Seconds)/sizeof(Seconds[0]), "%S", local);
        
        /*while(q == true)
        {
            Sleep(200);
            system("cls");
            cout << "Загрузка";
            Sleep(200);
            system("cls");
            cout << "Загрузка.";
            Sleep(200);
            system("cls");
            cout << "Загрузка..";
            Sleep(200);
            system("cls");
            cout << "Загрузка...";
            if (atoi(Seconds) >= a + 5)
            {
                q = false;
                system("cls");
            }
        }*/
        
        if (atoi(Seconds) >= a + 1)
        {           
            cout << "Во время качения колесо пошлёт " << i << " импульсов." << endl;
 
            system("pause");
 
            for (unsigned int ii = 0; ii < i; ii++)
            {
                for (int j = 31; j >= 0; --j)
                {
                    std::cout << (ii>>j)%2 << " ";
                    if(ii==99)
                    {
                        mass[j]=(ii>>j)%2;
                    }
                }
                cout << endl;       
            } 
            system("pause");
 
            system("cls");
 
            for (int i = 31; i >= 0; i--)
            {
                cout << mass[i];
            }
            system("pause");
 
            if (mass[14] == '1')
            {
                string a = "движется вправо";
            }
            if (mass[14] == '0')
            {
                string a = "движется влево";
            }
 
            char b[31], c[13];
 
            for (int i1 = 31; i1 >= 15; i1--)
            {
                b[i1] = mass[i1];
            }
            for (int i2 = 13; i2 >= 0; i2--)
            {
                c[i2] = mass[i2];
            }
 
            strcat(b, c);
 
            cout << "Колесо " << a << " со скоростью " << BinToDec(b) << " километров в час." << endl;
 
            return 0;
        }
    }
}
 
int BinToDec (char b[])
{
        int digit;
        for(int i =31; i>=0; i--)
        {
            digit += atoi(b[i]);
        }
        return digit;
        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;
            }
        }
        return sum;
}
P.S. Если нужно выводить около 6 миллионов строк таблицы, то приходится ждать минут 40 пока выведет (я проверял ), потому я думал записывать вывод таблицы в файл, а потом считать последнюю строку из него просто. Так будет быстрее походу. Как думаете?
0
2393 / 1920 / 763
Регистрация: 27.07.2012
Сообщений: 5,560
10.04.2015, 17:32
Цитата Сообщение от BsSlayer Посмотреть сообщение
Вот весь код
Ну и где вот это?
Цитата Сообщение от John Prick Посмотреть сообщение
Перенеси функцию перед main.
Добавлено через 40 секунд
Цитата Сообщение от BsSlayer Посмотреть сообщение
Если нужно выводить около 6 миллионов строк таблицы
Кому это нужно?? Да и зачем тут строки?
0
0 / 0 / 0
Регистрация: 08.06.2014
Сообщений: 72
10.04.2015, 17:36  [ТС]
Цитата Сообщение от John Prick Посмотреть сообщение
Ну и где вот это?
Я переносил, но ничего не поменялось... Потом откатил назад пробовал по-всякому, в итоге вышло, что скинул сюда вариант без обновлений

Цитата Сообщение от John Prick Посмотреть сообщение
Кому это нужно?? Да и зачем тут строки?
Ну, мне это надо, чтоб считать нужную строку... Не придумал, как считать её сразу, без построения таблицы
0
2393 / 1920 / 763
Регистрация: 27.07.2012
Сообщений: 5,560
10.04.2015, 17:39
Цитата Сообщение от BsSlayer Посмотреть сообщение
Я переносил, но ничего не поменялось...
Не придумывай. Вот эта ошибка:
Цитата Сообщение от BsSlayer Посмотреть сообщение
error C3861: BinToDec: идентификатор не найден
исправится.

Остальные ошибки исправляются другими действиями.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.04.2015, 17:39
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru