Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Visual Studio 2008 и компиляция проекта

32K
03 октября 2010 года
paska
26 / / 06.02.2009
Здравствуйте. Пишу программу в Visual Studio 2008 и столкнулся со следующей проблемой. Когда компилирую и запускаю в отладчике то программа выдает верный результат. (причем только в конфигурации DEBUG), а стоит только перевести отладчик в режим RELEASE или закрыть VS и попробывать запустить программу... не важно какую (DEBUG или RELEASE) то результат выдается не верный и причем разный (от каждой конфигурации свой). Может кто сталкивался с таким явлением...?
В заранее большое спасибо!
2.1K
03 октября 2010 года
Norgat
452 / / 12.08.2009
ну давай сюда свой код... посмотрим на него. ибо обычно то всё в порядке.
32K
03 октября 2010 года
paska
26 / / 06.02.2009
это задача о ранце
на входе данные:
2 47
13 36
3 8

вот код:
Код:
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <limits>
#include <conio.h>
using namespace std;
#define MAXN 100

int _tmain(int argc, _TCHAR* argv[])
{
    int cost[MAXN], w[MAXN];
    int n,TotalW,weight,i;
    bool take[MAXN][MAXN];
    int *dp;
  ifstream inp("data.txt");
    if(inp.fail())
    {
        cout <<"error! file not found!"<< endl;
        cout <<"Press any key to exit..."<< endl;
        _getch();
        return 0;
    }
  inp >> n;  inp >> TotalW;
    for(i = 1; i <= n; i++)
    {
        inp >> w; inp >> cost;
    }
    inp.close();
    for(i = 0; i <= TotalW; i++)take[0] = false;

    dp = new int[TotalW+1];
  dp[0]=0;  
    for( weight = 1; weight <=TotalW; weight++)
    {
        dp[weight] = numeric_limits<int>::min();
        for (i = 1; i <= n; i++)
        {
            if (w <= weight)
            {
                dp[weight] = max(dp[weight], dp[weight - w] + cost);
                take[weight] = true;
            }
            else
            {
                dp[weight]=dp[weight-1];
                take[weight] = false;
            }
        }
        cout <<"Weight: "<<weight<<" price: "<<dp[weight]<<endl;
    }
  cout <<endl;
    cout <<"Best price: "<< dp[TotalW] <<endl;
  delete[] dp;
    weight = TotalW;
    //выводим взятые товары
    cout <<"taken goods: ";
    int p=0,s=0,res;
    while (weight > 0)
    {
        i = n-1;
        while (i >= 0 && !take[weight]) i--;
        if (i >= 0)
        {  
            cout << i+1  <<" ";
            if(i == 0) p++;
          if(i == 1) s++;
            weight = weight-w;
        }
        else weight = 0;
    }
  res = w[1]*p+w[2]*s;
            //выводим вес взятых товаров
    cout <<endl<<"weight taken goods: "<<res<<endl;
    cout <<"Press any key to exit..."<<endl;
  _getch();
    return 0;
}
2.1K
03 октября 2010 года
Norgat
452 / / 12.08.2009
 
Код:
ifstream inp("data.txt");


из этого сразу напрашивается вопрос: а файл data.txt всегда кидался в папку с экзешником?
32K
03 октября 2010 года
paska
26 / / 06.02.2009
да конечно...
2.1K
03 октября 2010 года
Norgat
452 / / 12.08.2009
проблема в том, что ты не инициализируешь руками take[MAXN][MAXN]
и дебаггер в VS этого не делает... но в релизе он инициализируется нулями.

после добавления этого куска:

 
Код:
int cost[MAXN], w[MAXN];
    int n, TotalW, weight,i;
    bool take[MAXN][MAXN];
    int *dp;

    [COLOR="Blue"]for(int i = 0; i < MAXN; ++i)
        for(int j = 0; j < MAXN; ++j)
            take[j] = 0;[/COLOR]


release и debug программы стали давать идентичный вывод.

возможно поэтому не работает правильно:

 
Код:
while (i >= 0 && !take[weight]) i--;


или ещё что-то(я не делал полноценный проход дебагером)...
32K
03 октября 2010 года
paska
26 / / 06.02.2009
да это проблему устранило... правда результат работы проги неправильный стал....)) главное Цену выводит правильно а набор взятых товаров нет.....
2.1K
03 октября 2010 года
Norgat
452 / / 12.08.2009
Цитата: paska
да это проблему устранило... правда результат работы проги неправильный стал....)) главное Цену выводит правильно а набор взятых товаров нет.....



ну это уже проблемы работы логики программы) так что дебаггер в руки и вперёд:)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог