Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/57: Рейтинг темы: голосов - 57, средняя оценка - 4.84
1 / 1 / 0
Регистрация: 22.07.2012
Сообщений: 19

Построение графика по точкам

22.07.2012, 15:44. Показов 11133. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Есть задание: построить график по заданным точкам. Проблема в том, что никак не могу разобраться с тем, как это делать, если заданные точки нужно считывать из файла...

вот код программы, выводящей график по точкам, введенным в самой программе
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
   Edit1->Clear();    //очищаем эдит1
   Edit2->Clear();    //очищаем эдит2
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   if(Edit1->Text == "")
 
{
     ShowMessage("Вы не ввели значение Y !");
         return ;
   }
     if(Edit2->Text == "")
   {
      ShowMessage("Вы не ввели значение  X !");
         return ;
  }
 
int y;
int x;
y = Edit1->Text.ToInt();
x = Edit2->Text.ToInt();
 
Series1->Add(y,x,clBlue);
 
Edit1->Text = "";     
Edit2->Text = "";     
}

Может кто может помочь? Заранее благодарна.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.07.2012, 15:44
Ответы с готовыми решениями:

Построение прямой по точкам
В &quot;Edit&quot; вводит координаты Y, а программа должна построить прямые по точкам. Х меняется как 1,2,3,...n. Например, вводим &quot;2, 23,...

Аппроксимация графика, построенного по точкам
в С++ билдере, Необходимо сгладить(аппроксимировать) график построенный по точкам х,у( что б график проходил строго по точкам, и был...

Построение графика по точкам
Дано два массива с данными, один с Х-ами, второй с Y-ками. Нужно построить график по точкам.

19
 Аватар для MatrixDeity
7 / 7 / 1
Регистрация: 20.04.2011
Сообщений: 69
22.07.2012, 16:31
Добрый день.
Я бы загружал содержимое файла в StringList, а затем построчно оттуда считывал.
0
 Аватар для Aventus
0 / 0 / 0
Регистрация: 03.07.2012
Сообщений: 4
22.07.2012, 17:14
Нужно использовать файловае потоки fstream.
0
1 / 1 / 0
Регистрация: 22.07.2012
Сообщений: 19
23.07.2012, 08:16  [ТС]
MatrixDeity, а не могли бы Вы покаэать пример использования StringList?
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
23.07.2012, 08:20
C++
1
2
3
4
TStringList *SL= new TStringList;
SL->LoadFromFile("1.txt");
// тут обработка которая зависит от того как записаны данные в файл.
delete SL;
1
1 / 1 / 0
Регистрация: 22.07.2012
Сообщений: 19
23.07.2012, 09:29  [ТС]
В моем файле данные вида:
a: 0 0 20 150 456 280 ...
b: 0 16 45 156 500 ...
...
и т.д.

и на график мне нужно вывести по оси Y данные одной из строк (естественно, именно числовые значения, стоящие после названия строки (a:, b:..); при этом, ввести номер/название строки нужно с Form'а), а по оси X просто порядковые номера этих числовых значений (1, 2, 3...)

есть ли у кого-нибудь идеи по этому поводу?
0
 Аватар для OmutMoren
17 / 17 / 0
Регистрация: 04.06.2012
Сообщений: 88
23.07.2012, 09:59
Ну смотри, я думаю что последовательность должна быть следующая:
1. Копируешь данные из файла в TStringList;
2. Далее каждую строчку тебе нужно разбить на отдельные слова (в данном случае числа) - для этого есть функция strtok;
3. Одновременно разбивая строку на составляющие, записываешь их в массив a, или можешь сразу же на выводить на экран график.

Если хочешь кода, пиши. Напишу.
1
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
23.07.2012, 10:45
для этого есть функция strtok;
Для этого есть разбитие в самом StringList c помощью DelimitedText Разбитие строки через DelimitedText

Но я бы использовал fstream и наверное boost/regex
0
 Аватар для OmutMoren
17 / 17 / 0
Регистрация: 04.06.2012
Сообщений: 88
23.07.2012, 10:58
Разница в чём? В скорости работы? Или в объеме кода?
0
1 / 1 / 0
Регистрация: 22.07.2012
Сообщений: 19
23.07.2012, 11:49  [ТС]
OmutMoren, спасибо большое!
если не затруднит..очень помогли бы
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
23.07.2012, 12:36
Разница в чём? В скорости работы? Или в объеме кода?
Да именно так, и в том и в том, а еще легче модифицировать переносить в другую среду.

И если я не ошибаюсь strtok это сишная ф-ция.

Добавлено через 14 минут
diana_9,
1. А количество точек фиксировано?
2. Количество строк?
3. Количество строк в каждой строке может быть разным?
0
1 / 1 / 0
Регистрация: 22.07.2012
Сообщений: 19
23.07.2012, 12:47  [ТС]
Avazart, да, фиксировано. всего ро 1200 точек в одной строке, отсюда и X: 1, 2, ... , 1200

Добавлено через 9 минут
а что, если использовать структуру, где одним из полей будет название строки (а:, b:, ...), а другое - одномерные массивы из точек? а затем, введя параметр первого поля, рисовать график по соответствующим числовым значениям..
только еще одна проблема в том, что названия повторяются по 3 раза:
"a: 0 25 350 ...
a: 0 0 150 ...
a: 0 38 125 ...
b: 0 23 148 ...
b: .....
b: ....
......."
а мне нужны значения именно первых строчек
0
 Аватар для OmutMoren
17 / 17 / 0
Регистрация: 04.06.2012
Сообщений: 88
23.07.2012, 12:54
Ловите: temp.rar
1
1 / 1 / 0
Регистрация: 22.07.2012
Сообщений: 19
23.07.2012, 13:01  [ТС]
Avazart, все фиксировано.
количество строк - 6144 (т.е. в первом столбце всего 2048 наименований, повторяющихся по 3 раза и имеющие абсолютно разные значения)
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
23.07.2012, 13:10
а что, если использовать структуру, где одним из полей будет название строки
Думаю так и надо.
1
1 / 1 / 0
Регистрация: 22.07.2012
Сообщений: 19
23.07.2012, 13:17  [ТС]
OmutMoren, большое спасибо!
но только вот значения по X должны были быть такими: "1, 2, 3,...", а считывать нужно только одну из строк, которые и есть значения по Y..
ну, буду разбираться
спасибо, выручили
0
 Аватар для OmutMoren
17 / 17 / 0
Регистрация: 04.06.2012
Сообщений: 88
23.07.2012, 13:20
Ну я думаю логика действий вам теперь понятна.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
23.07.2012, 14:45
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
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <map>
#include <sstream>
#include <iterator>
#include <algorithm>
 
typedef std::multimap< std::string,std::vector<int> > data_t;
//------------------------------------------------------------
int main() 
{
 using namespace std;
 string filename= "1.txt"; 
 fstream f(filename.c_str() );
 
 data_t data;
 
 if(f)
  {
   string name,buf;
   vector<int> values;
 
   while(getline(f,name,':') &&  getline(f,buf) )
    { 
     stringstream ss;
     ss<<buf;
     istream_iterator<int> b(ss),e;
     copy(b,e,back_inserter(values) );
     data.insert(pair<string,vector<int> >(name,values) );
     values.clear();
    }     
  }   
 else cerr<<"Не удалось открыть файл";
}
После чего содержимое файла находится в мултимапе data, ( first -имя, second- вектор -набор данных)
1
1 / 1 / 0
Регистрация: 22.07.2012
Сообщений: 19
24.07.2012, 08:24  [ТС]
Avazart, спасибо огромное!!

Добавлено через 17 минут
Avazart, глупые вопросы: что за мультимап data? и каким образом я дальше буду считывать значения для построения графика?..
прошу прощения, если это элементарно..моя первая работа с builder..да и сам язык не так давно начала изучать..

Добавлено через 1 час 43 минуты
В общем, попыталась сделать, все-таки, все с помощью структуры
вот, что из этого вышло..
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
//---------------------------------------------------------------------------
 
#include<iostream>
#include <stdio.h>
#include <conio.h>
#include<string>
using namespace std;
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 
struct file
{
    string angle;
    int a[1200];
};
 
struct file f[6144];
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
        //Edit1->Clear();
        //Edit2->Clear();
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        //int x, y;
        long int i, j;
    long int a[1200];
        string N;
    string angle;
        //N = Edit1->Text;                                  //здесь каким-то образом нужно сделать так,
                                                                //  чтобы можно было вводить значения первого 
                                                                //  столбца (вида: "0:", "1:" ...)
        
 
        freopen ("d:\\file.txt", "r", stdin);
        for (i=0; i<6144; i++)
        {
                cin>>angle;
                f[i].angle=angle;
                for (j=0; j<1200; j++)
            {
                cin>>a[j];
                f[i].a[j]=a[j];
        }
    }
        for (i=0; i<6144; i++)
        {
                if (f[i].angle==N)                             //присвоение введенного значения N полю 
                                                                  //структуры, содержащему название (0:, 1:,...)
                {
                        for (j=0; j<1200; j++)
                        {
                                Series1->Add(a[j],j,clBlue);
                                //x=j;
                        }
                }
        }
}
нужна небольшая помощь с вводом N в Edit1 текста вида: "1:"
и еще, для проверки, не используя N, запустила программу, однако она вывела график прямой (по оси X (в моем коде j): "1, 2, ... , 1199", а по оси Y все нули..)
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
24.07.2012, 11:50
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
#include <iostream>
#include <fstream>
#include <string>
 
template<int col_count>
struct data_t
{
    std::string name;
    int values[col_count];
};
//------------------------------------------------------------
int main() 
{
 using namespace std;
 
 const int col_count= 3,row_count=4; // нужно указать  количество строк и значений для своего файла
 data_t<col_count> data[row_count];  // массив объектов струкуры соответствующего размера
 
 string filename= "1.txt";  // имя файла
 fstream f(filename.c_str() ); // открываем файл
 if(f) // если успешно открыт файл
  {
   for(int i=0;i<row_count;i++)
    {  
      getline(f,data[i].name,':'); // читаем имя (строку до символа-разделителя ":" )
      for(int j=0;j<col_count;j++) f>> data[i].values[j];  
    }   
  }   
 else cerr<<"Не удалось открыть файл";
// Вывод данных в консольном приложении
for(int i=0;i<row_count;i++)
  {  
   cout<<data[i].name<<"\t";
   for(int j=0;j<col_count;j++) cout<<data[i].values[j]<<"\t";
  }   
}
Только при таком подходе файл должен четко соответсвовать формату и дополнение в файл новых строки и значений невозможно.

Добавлено через 8 минут
что за мультимап data?

Контейнер STL

http://www.cplusplus.com/reference/stl/
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.07.2012, 11:50
Помогаю со студенческими работами здесь

Построение графика функции по точкам
Visual C++. Имеется матрица координат точек (x,y). (Точек не менее 20и). По введенным юзером точкам нужно восстановить и построить график...

Построение графика по заданным точкам
Доброго времени суток! Очень нужна помощь: вывести на экран график по заданным координатам точек из файла..строить нужно в консоли. ...

Построение графика функции по точкам (Dev-C )
Подскажите как построить график по точкам(Dev-C++), какая это библиотека и где можно почитать основные команды?

Построение графиков по точкам
Не строится график по 100 точкам. Прикрепил координаты.

Построение граффика по точкам
Доброго времени суток! Есть задача считать из объекта textEdit строки типа: 001234 125678 356789 ... 356798 Их может...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru