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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение файла в массив и построение графика TChart, floating point overflow 
:(
    Опции темы
vitalyisaev2
Дата 8.11.2010, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте, пишу на С (так как С++ мне не даётся) программу построения графиков в Borland C++ Builder. Задача простая: считать текстовый файл в массив чисел и построить график в ряд Series1 объекта TChart. 

На вход подаётся такой файл:
Код

1.2
2.3
3.1
4.0
25.9
6.5
7.5
8.3
9.2
10.1


Код

...
static int p = 0;
static double A[10000];
...
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (!OpenDialog1->Execute())return;
FILE *f1; //Открываем и настраиваем входящий поток
f1 = fopen(OpenDialog1->FileName.c_str(), "r");
double value; 
while (fscanf(f1,"%f", &value)==1) //Считываем файл в массив
    {
        A[p]=value;
        p++;
    }
...
for (int i=0; i < p; i++) //Выводим числа из массива на график
    {
        Series1->AddXY(i,A[i],"",clRed);
    }
}
  

При отладке компилятор выдаёт следующую ошибку: 

Код

First chance exception at $7791FBAE. Exception class EOverflow with message 'Floating point overflow'. Process cordim_builder.exe (2180)




Это сообщение отредактировал(а) vitalyisaev2 - 8.11.2010, 22:28
PM MAIL   Вверх
bsa
Дата 9.11.2010, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



vitalyisaev2, зря. Микс из двух языков это плохо.
Цитата(man fscanf)
       f      Matches  an  optionally  signed  floating-point number; the next
              pointer must be a pointer to float.

PM   Вверх
folta
Дата 3.12.2012, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

static int p = 0;
static double A[10000];
...
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (!OpenDialog1->Execute())return;
FILE *f1; //Открываем и настраиваем входящий поток
f1 = fopen(OpenDialog1->FileName.c_str(), "r");
double value; 
while (fscanf(f1,"%f", &value)==1) //Считываем файл в массив
    {
        A[p]=value;
        p++;
    }
...
for (int i=0; i < p; i++) //Выводим числа из массива на график
    {
        Series1->AddXY(i,A[i],"",clRed);
    }
}


таки как это перебить под с++
?
PM MAIL   Вверх
volatile
Дата 4.12.2012, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

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



Вот именно для таких как вы и создали  С++
(и всю эту страшилку с безопастностью типов). 

Цитата(vitalyisaev2 @  8.11.2010,  22:10 Найти цитируемый пост)
пишу на С (так как С++ мне не даётся)

пишите лучше на С++, так как С вам не дается.

Цитата(vitalyisaev2 @  8.11.2010,  22:10 Найти цитируемый пост)
double value; 

Цитата(bsa @  9.11.2010,  00:14 Найти цитируемый пост)
pointer to float.



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


Новичок



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

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



хорошо, зайдем с другой стороны)

как вычитать из файла массив и просто изобразить точками по оси x 
наводку на пример бы.
ну и пусть пример частичный (будь то извлечение данных из файла или перевод чисел в графическое подобие), главное чтобы лишнего кода не было и можно вникнуть своим пешком.

Добавлено через 14 минут и 17 секунд
вот например, рисует и даже лепит в файл.
но черт ногу сломит.
Код

#include <windows.h>
#include <cstdlib>
#include <iostream>
#include <fstream> 
#include <sstream>
#include <math.h>
#include <string.h>
   
    ofstream fout;
    int x[80] = {0}, y[80] = {0};
    char graph[30][80];
    stringstream ss;
 
    for ( size_t i = 0; i < 30; ++i ) {
        for ( size_t k = 0; k < 80; ++k ) {
            if ( i == 28 ) {
                graph[i][k] = '_';
            }
            else if ( k == 1 ) {
                graph[i][k] = '|';
            }
            else {
                graph[i][k] = ' ';
            }
        }
    }
    for ( size_t i = 0; i < 79; ++i ) {
        x[i] = i;
        y[i] = 2 * sqrt( 2.0 * x[i] );
        graph[28 - y[i]][x[i] + 1] = '.';
    }
    for ( size_t i = 0; i < 30; ++i ) {
        for ( size_t k = 0; k < 80; ++k ) {
            ss << graph[i][k];
        }
        ss << "\n";
    }
    fout.open( "text_log.txt" );
    fout << ss.str( );
    fout.close( ); 
    
    system("PAUSE");
    return EXIT_SUCCESS;



а надо чтобы из моего .txt вычитало и забабахало картинку)
PM MAIL   Вверх
folta
Дата 4.12.2012, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



тэкс, заходим с другой стороны.
располовиним задачу.
1. запихать данные в массив

как туточки добиться полной вычитки всех целых из файла?
может просто маппить весь файл вместо этого?
Код

#include<iostream>
#include<fstream>

using namespace std;

int main()
{
  int x[4];
  string s;
  ifstream fi("input_file.txt");
  ofstream fo("buf_file.txt");
  getline(fi, s);
  for (int i = 0; i <= s.size(); i++)
  {
   if (s[i]!='|')
     fo << s[i];
   else
     fo << endl;
  }
  fi.close();
  fo.close();
  fi.open("buf_file.txt");
  for (int i=0; i<=3; i++)
  {
    fi>>x[i];
  }
  return 0;
}


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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