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

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

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

Как локальную переменную сделать глобально, при это сохранив накопленное в ней значение? - C++

16.09.2013, 09:34. Просмотров 890. Ответов 9
Метки нет (Все метки)

Ребята, помогите, пожалуйста.
Вот, например, есть такой код:

C++
1
2
3
4
for (int i=0; i<10; ++i) {
  /* здесь делается что-то полезное */
}
std::cout << "Цикл закончился. i равно " << i;
Но он, ясно, не будет работать, так как переменная i является локальной для блока цикла и не существует за его пределами. Как эту переменную i сделать глобальной, если мне надо дальше использовать накопленное в ней значение?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2013, 09:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как локальную переменную сделать глобально, при это сохранив накопленное в ней значение? (C++):

Как объявить переменную глобально? - C++
здравствуйте, в книге шилдта есть такой код #include &lt;iostream&gt; using namespace std; void func1(); void func2(); int count;...

Как глобально объявить указатель структуры, и переменные хранящиеся в ней? - C++
Как глобально объявить указатель структуры, и переменные хранящиеся в ней? Вот указатель вроде объявил, но всё же есть ошибки. #include...

Как в данном контексте правильно разместить статическую локальную переменную? - C++
Задание такое: Напишите функцию, которая при каждом вызове будет выводить на экран количество раз, которое она вызывалась ранее. Напишите...

Есть переменная типа char содержащая цифру; как записать это значение в переменную типа int? - C++
Пожалуйста, напомните стандартную функцию

Надо добавить нового администратора через локальную политику домена. Как это сделать?! - Windows Server
Здравствуйте ОТЦИ и все кто рубит в Windows 2003... Начну сразу же с главного. Надо добавить нового администратора(локального), что бы он...

Как сделать Чтобы При выборе строчки в DBComboBOx в переменную присваивалось значение из другой таблицы - Delphi БД
Есть таблица tube_int (с полями id, radius,id_material1,opus) и таблица material ( с полями id,nazva, а). эти таблицы связаны по полю...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Nijaz
34 / 34 / 9
Регистрация: 16.12.2010
Сообщений: 100
16.09.2013, 09:47 #2
C++
1
2
3
4
5
int i=0;
for (i=0; i<10; ++i) {
  /* здесь делается что-то полезное */
}
std::cout << "Цикл закончился. i равно " << i;
Ilot
Модератор
Эксперт С++
1809 / 1166 / 226
Регистрация: 16.05.2013
Сообщений: 3,069
Записей в блоге: 5
Завершенные тесты: 1
16.09.2013, 10:01 #3
Цитата Сообщение от iamthewine Посмотреть сообщение
Ребята, помогите, пожалуйста.
Вот, например, есть такой код:

C++
1
2
3
4
for (int i=0; i<10; ++i) {
  /* здесь делается что-то полезное */
}
std::cout << "Цикл закончился. i равно " << i;
Но он, ясно, не будет работать, так как переменная i является локальной для блока цикла и не существует за его пределами. Как эту переменную i сделать глобальной, если мне надо дальше использовать накопленное в ней значение?
На самом деле ответ на вопрос зависит от многих факторов. В частности это зависит от компилятора. Например мой компилятор ваш код спокойно откомпилирует. Так как для некоторых компиляторов переменная объявленная в цикле определена и далее в том же блоке где находится сам цикл, но это не панацея.
В С++ для решения подобных проблем существует ключевое слово static. Переменная обявленная статической существует все время выполнения программы и в этом отношении аналогична глобальной, но объявляется и имеет область видимости как локальная.
iamthewine
0 / 0 / 0
Регистрация: 15.09.2013
Сообщений: 6
16.09.2013, 10:16  [ТС] #4
Спасибо большое.
Вот у меня есть такой кусок программы, где мне надо узнать является ли число сбалансированным простым числом (Простые числа, которые являются средним арифметическим предыдущего простого числа и следующего простого числа):
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
float IsABalancedNumber (int x) {
    int i;
    int mas [10000];
    int j=0;
        for (i = 2; i <= x; i++) {
            if ((x % i != 0)) {
                mas[j] =x;
                j++;
            } 
            else {
                cout << "Ошибка!" << "\n";
            }
            return 0;
        }
 
    int s;
    for (s=1; s+1 <= j-1; s++) {
        if (mas[s] == (mas [s-1] + mas [s+1])/2) {
            cout << "Это сбалансированное простое число" << "\n";
            system ("PAUSE");
            return 0;
        }
        else {
            cout << "Это не сбалансированное простое число" << "\n";
            system ("PAUSE");
            return 0;
        }
    }
    return 0;
}
Идея: закинуть все простые числа в массив, далее проверять на условие сбалансированного простого числа.
j мне нужна после первого цикла. Куда в этом случае поставить "private"?
И вообще, корректно ли я реализую идею?

P.S. Только начинаю изучать С++.
Croessmah
16.09.2013, 10:22
  #5

Не по теме:

Цитата Сообщение от Ilot Посмотреть сообщение
Например мой компилятор ваш код спокойно откомпилирует. Так как для некоторых компиляторов переменная объявленная в цикле определена и далее в том же блоке где находится сам цикл, но это не панацея.
может стоит обновить старье?

ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
16.09.2013, 10:39 #6
Цитата Сообщение от iamthewine Посмотреть сообщение
j мне нужна после первого цикла. Куда в этом случае поставить "private"?
не понял причем тут private
а что тебе не нравится в своем коде?
можешь объявить её перед самым циклом
до её объявления её не будет видно
а потом до конца функции
если нужно только на определенном участке то можно сделать блок
например так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int fnc()
{
  ....................
  {
    int j;
    for (j=0;j<10;j++)
    { 
    // здесь j видна
    }
  ..............
   // здесь тоже
 }
// а здесь уже нет
..............
}
но память это тебе не сэкономит
Ilot
Модератор
Эксперт С++
1809 / 1166 / 226
Регистрация: 16.05.2013
Сообщений: 3,069
Записей в блоге: 5
Завершенные тесты: 1
16.09.2013, 10:54 #7

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
может стоит обновить старье?
Ну так я уже пытался перейти на wxDev. Однако с ним последнее время стали происходить непонятные вещи. При попытке создать новый проект вылетает без сообщения об ошибке. Так что приходится пользоваться ломаным VS 6.


iamthewine, массив вам не нужен. Используйте три переменные для хранения трех последовательных простых чисел. Весь алгорит можно построить например таким образом:
1. Найти очередное простое число
2. Проверить на "сбалансированность"
3. Передвинуть переменные вперед.
4. Перейти к первому шагу.
Идея: закинуть все простые числа в массив...
Этого у вас не получится так как их бесконечное множество... Ну или очень много.
j мне нужна после первого цикла. Куда в этом случае поставить "private"?
private это относится к классам. Вы что-то путаете. А j там пусть и стоит.
ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
16.09.2013, 11:05 #8
Цитата Сообщение от Ilot Посмотреть сообщение
Так что приходится пользоваться ломаным VS 6.
бесплатными студиями 2008, 2010, 2012 ,бесплатным Qt
короче куча IDE имя им легион

Добавлено через 5 минут
Цитата Сообщение от Ilot Посмотреть сообщение
пользоваться ломаным VS 6.
для шестерки, чтобы она соответствовала стандарту есть костыль-макрос
пишу на память давно не пользовался, но что то типа

C++
1
#define for  if(0) else for
iamthewine
0 / 0 / 0
Регистрация: 15.09.2013
Сообщений: 6
16.09.2013, 11:17  [ТС] #9
Ilot, спасибо вам большое! Сейчас попробую все переделать.
alsav22
16.09.2013, 13:04     Как локальную переменную сделать глобально, при это сохранив накопленное в ней значение?
  #10

Не по теме:

Цитата Сообщение от Ilot Посмотреть сообщение
Так что приходится пользоваться ломаным VS 6.
Раз уж пользуетесь студией, то можно, как предлагает ValeryS, поставить и более новую. Если хотите что-то небольшое (типа DevC++, а она не работает у вас), то можно попробовать Code Blocks.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2013, 13:04
Привет! Вот еще темы с ответами:

Объявить переменную глобально внутри функции при использовании setTimeout - JavaScript
Привет всем, столкнулся с не стандартным и непонятным случаем. Не судите строго js - на уровне любителя, как хобби, решения из интернета,...

Как объявить переменную глобально? - VBA
Есть первый макрос, который сохраняет определенный текст в файл! Путь к файлу хранится в переменной! После записи макрос завершает свою...

Как объявить переменную глобально? - C#
Как сделать одну переменную так, чтобы она могла использоваться во всех других функциях.

Как объявить переменную глобально? - C#
Все просто до идиотизма, создал небольшую программу в формах: При нажатии на кнопку меняется одна переменная и в зависимости от значения...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
16.09.2013, 13:04
Ответ Создать тему
Опции темы

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