Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Kuzia domovenok
2334 / 2078 / 485
Регистрация: 25.03.2012
Сообщений: 7,429
Записей в блоге: 1
1

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

15.11.2012, 20:06. Просмотров 392. Ответов 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.11.2012, 20:06
Ответы с готовыми решениями:

opengl with devcpp
При компиляции проектов с opengl ошибки вида: undefined reference to`_imp____...

Не запускается Devcpp
Перестал запускаться Devcpp. попробовал переустановить, но ничего не...

Не компилится код в DevCpp
В DevCpp не компилится код, ругается вот на эту строчку. В IDE Qt - все...

DevCpp не запускаются программы
В DevCPP при компиляции любой программы вылезает окно с надписью &quot;Программа...

DevCpp + bgi, очистка дисплея
Играюсь с графикой в консоли через bgi Собственно пробую сделать очистку...

1
castaway
Эксперт С++
4930 / 3037 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
15.11.2012, 20:24 2
Выходишь за пределы, так видно:
C++
1
    for (argc^=argc; argc<10; mask[argc]=argc, cout << argc << endl ) {
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2012, 20:24

Не удается просмотреть значение переменной в DevCpp
У меня есть компилятор Dev Cpp, проблема в том, что он не отлаживает...

преобразовать код программы из DevCPP в VisualStudio
Помогите пожалуйста переделать код программы на С++, из DevCPP в VisualStudio...

Где скачать библиотеку OpenGL для DevCpp?
Мало чего знаю по C++ и потому решил начать с готового примера 3D игры. Есть...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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