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

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

Войти
Регистрация
Восстановить пароль
 
Kuzia domovenok
 Аватар для Kuzia domovenok
1886 / 1741 / 117
Регистрация: 25.03.2012
Сообщений: 5,916
Записей в блоге: 1
#1

Затирается переменная в DevCPP - C++

15.11.2012, 20:06. Просмотров 319. Ответов 1
Метки нет (Все метки)

Проблема возникла в этой теме.
Выставить цифры в числе 1234567890 таким образом, чтобы новое число делилось без остатка на все числа от 2 до 18 включительно.
Программу я написал в MSVS2008 и она корректно работала,
но стали поступать жалобы, я проверил и обнаружил что в DevCPP возникает ошибка.

Дело в глобальных переменных
divisor, half_life и массиве mask[10]
В ходе заполнения массива mask переменная divisor портится, хотя за пределы массива я не выхожу.
Я проверял адреса этих переменных, смутно помню что там что, но факт есть. Чтобы mask не затирал divisor между ними нужно объявить доп. переменную half_life

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 <iostream>
using namespace std;
int mask[10]; 
//если поменять местами объявление divisor и half_life всё заработает, т.к. 
// half_life не используется в программе.
// Но если оставить в неизменном виде код, то портится значение divisor,
// затираясь последним элементом массива mask
unsigned long long divisor;     
unsigned long long half_life;
void solve(int l, int r){
    unsigned long long i;
    if (l==r){
        for (i=0, l^=r; l<10; l=l+1)
            i=i*10+mask[l];
        if (!(i%divisor))
                 cout<<"found i="<<i<<endl;
        
    }
    else
        for (int i=l; i<=r; i++){
            if (l-i){
                mask[l]^=mask[i];
                mask[i]^=mask[l];
                mask[l]^=mask[i];
                solve(l+1, r);
                mask[l]^=mask[i];
                mask[i]^=mask[l];
                mask[l]^=mask[i];
            }else
                solve(l+1, r);
            
        }
}
int main(int argc, char* argv[])
{
    setlocale(0, "russian");
    double x = 0;
    int a[10]; 
           //1*2*3*4*5*6*7*8*9*10*11*12*13*14*15*16*17*18
    divisor=   2*3*2*5*  7*2*3*   11   *13       *2*17;
    for (argc^=argc; argc<10; mask[argc]=argc)argc++;
    solve(0,9);
       cout<<"not found"<<endl;
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.11.2012, 20:06     Затирается переменная в DevCPP
Посмотрите здесь:

Не удается просмотреть значение переменной в DevCpp C++
C++ переменная
C++ Переменная
Не запускается Devcpp C++
C++ Не создается переменная
Переменная параметров C++
DevCpp не запускаются программы C++
преобразовать код программы из DevCPP в VisualStudio C++
opengl with devcpp C++
C++ DevCpp не вводятся спец символы (масти карт)
DevCpp + bgi, очистка дисплея C++
Где скачать библиотеку OpenGL для DevCpp? C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4869 / 3008 / 370
Регистрация: 10.11.2010
Сообщений: 11,059
Записей в блоге: 10
Завершенные тесты: 1
15.11.2012, 20:24     Затирается переменная в DevCPP #2
Выходишь за пределы, так видно:
C++
1
    for (argc^=argc; argc<10; mask[argc]=argc, cout << argc << endl ) {
Yandex
Объявления
15.11.2012, 20:24     Затирается переменная в DevCPP
Ответ Создать тему
Опции темы

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