Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение из файла, Чтение из файла значения Типа Double 
:(
    Опции темы
lisushka
Дата 1.6.2007, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 22.5.2007

Репутация: нет
Всего: нет



Есть текстовый документ "1.txt" . В нем  числа - значения переменных. То есть, например, первое значение - количество переменных,
второе - количество ограничений. Три(первое, второе и предпоследнее) значения типа int, остальные - double. Вот, например, его содержание :

5
10
-0.01
0.01
-1000
1000
10
20
0.005

 В приложении на С++ я считываю эти значения(в нужные мне переменные считываются). А вот когда я их, получившиеся переменные, использую для вызова 
функции Gen_task(), они( типа double) не срабатывают. Причем, если передавать сразу значениями все работает(занесено в комментарии).В чем тут может быть дело и как это исправить?
Часть кода на С++:

Код

void main(void)
{
    int n; //êîëè÷åñòâî ïåðåìåííûõ
    int m; //êîëè÷åñòâî îãðàíè÷åíèé
    double *A,*b,*c,*x0,*x_dop,*x_opt;
    double a,bb,xll,xhh, an,bn;
    double ro2,eps,del,eta;
    int kol,kkol;//êîëè÷åñòâî çàäà÷ â ñåðèè
    int j;
    int kRes=0;//êîëè÷åñòâî ðåøåííûõ çàäà÷
    int kNeResO;//îáùåå êîëè÷åñòâî íåðåøåííûõ çàäà÷
    int maxf1,minf1,srednf1,maxg1,ming1,sredng1,
        maxf2,minf2,srednf2,maxg2,ming2,sredng2,
        maxf3,minf3,srednf3,maxg3,ming3,sredng3;
    //n=20; m=40;
    ifstream in;
    in.open("c:\\1.txt");
    in>>n;
    printf("n=%d\n",n);
    if(n<1)
    {
        cout<<"Error!Enter again!\n";
        return;
    }
    in>>m;
    printf("m=%d\n",m);
    if(m<1)
    {
        cout<<"Error!Enter again!\n";
        return;
    }
    in>>a;
    an=double(a);
    printf("an=%lf\n",an);
    if(an=0.0)
    {
        cout<<"Error!Enter again!\n";
        return;
    }
    in>>bb;
    bn=double(bb);
    printf("bn=%lf\n",bn);
    if(bn=0.0)
    {
        cout<<"Error!Enter again!\n";
        return;
    }
    in>>xll;
    printf("xll=%lf\n",xll);
    if(xll=0.0)
    {
        cout<<"Error!Enter again!\n";
        return;
    }
    in>>xhh;
    printf("xhh=%lf\n",xhh);

    if(xhh=0.0)
    {
        cout<<"Error!Enter again!\n";
        return;
    }
    in>>eps;
    printf("eps=%lf\n",eps);
    if(eps=0.0)
    {
        cout<<"Error!Enter again!\n";
        return;
    }
    in>>kkol;
    printf("kkol=%d\n",kkol);
    in>>eta;
    printf("eta=%lf\n",eta);
    in.close();



    A=new double[n*n*(m+1)];
    b=new double[n*(m+1)];
    c=new double[m+1];
    x_dop=new double[n];
    x0=new double[n];
    x_opt=new double[n];

    ofstream out;
    out.open("test.txt");;//ñîçäàíèå ôàéëà äëÿ âûâîäà
    if(!out)
    {
        cout<<"File is not possible open\n";
        return;
    }
    out<<"êîëè÷åñòâî ïåðåìåííûõ="<<n<<"\n";
    out<<"êîëè÷åñòâî îãðàíè÷åíèé="<<m<<"\n";

    del=1e-6;
//    eta=0.005;
    out<<"del="<<del<<" eta="<<eta<<"\n";
//    eps=1.0;
    out<<"eps="<<eps<<"\n";


    kNeResO=0;
    for(kol=0;kol<kkol;kol++)
    {
        printf("kol=%d\n",kol);
        out<<"Íîìåð çàäà÷è="<<kol<<"\n";
//        Gen_task(n,m,-0.01,0.01,-1000.0,1000.0,eps,A,b,c,x_dop);

        Gen_task(n,m,an,bn,xll,xhh,eps,A,b,c,x_dop);






PM MAIL   Вверх
DigitSphinx
Дата 1.6.2007, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 28.4.2007
Где: Москва

Репутация: 1
Всего: 3



Код

double a, an, bb, bn;
...................
in >> a;
an = double(a);
...................
in>>bb;
bn=double(bb);
...................

 smile 
А зачем ??
У тебя в переменные считываются значения ? 
Если да то может проблема в функции Gen_task() .
Если нет попробуй считывать в char;
Код

char Buff[1024];
in >> Buff;
an = atof(Buff);





--------------------
Чтобы пробить стену лбом нужен или большой разбег, или много лбов.
(Альберт Эйнштейн)
Умен ты или глуп, велик ты или мал, не знаем мы, пока ты слова не сказал.
(Альберт Эйнштейн)
user posted image
PM MAIL ICQ   Вверх
lisushka
Дата 1.6.2007, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 22.5.2007

Репутация: нет
Всего: нет



Нет, не получается так тоже. Отвечаю на вопрос "Зачем?": может несовпадение типов. 
С функцией все нормально, потому что, если напрямую задавать значения, она работает. Это проверялось и не раз. Но я сразу при ее вызове вручную значения задавала. Один из таких вызовов закомментирован.
Код

void Gen_task(int n,      int m,  double a1,  double b1,double x_l,double x_h,double eps_h,double*A,double*b, double*c,  double* x_dop)



PM MAIL   Вверх
DigitSphinx
Дата 1.6.2007, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 28.4.2007
Где: Москва

Репутация: 1
Всего: 3



Долго думал в чем же дело ?!?!?!
 smile  
Код

.................
if(an=0.0)
.................
if(bn=0.0)
.................
if(xll=0.0)
.................
if(xhh=0.0)
.................
if(eps=0.0)
.................
if(eps=0.0)
.................

Ты их сама обнуляешь !
Надо “==” вместо “=”
И еще лучше 
Код

....
if(0.0 == an)
....

тогда эта ошибка не появится ! а если опечатаешься "=" вместо "==" то  компилятор начнет ругаться
Код

error C2106: '=' : left operand must be l-value 



Это сообщение отредактировал(а) DigitSphinx - 1.6.2007, 14:20


--------------------
Чтобы пробить стену лбом нужен или большой разбег, или много лбов.
(Альберт Эйнштейн)
Умен ты или глуп, велик ты или мал, не знаем мы, пока ты слова не сказал.
(Альберт Эйнштейн)
user posted image
PM MAIL ICQ   Вверх
nickless
Дата 1.6.2007, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 19
Всего: 181



Кстати, проверять переменные типа float и double на равенство не рекомендуется, они могут быть "почти" равны или нужное число может вообще не иметь точного представления в двоичном виде (0.1 например). Лучше писать так:
Код
const double eps = 1.0e-10; // или сколько надо
if ((0.0 + eps > f) && (f > 0.0 - eps)) {
    // код
}



--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1117 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.