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

Создание нескольких таблиц и переключение между ними

18.02.2019, 19:09. Показов 4162. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго дня!
Есть программа, в которой идет расчет потока заявок. Перед расчетом нужно указать число лямда, после чего выходит таблица с расчетом. Суть такова, нужно сделать ввод нескольких чисел лямда(через пробел/запятую там не знаю), и чтобы при расчете появлялось столько таблиц сколько чисел лямда было введено. Как это сделать вообще не имею понятия.
Я в программировании полный чайник, и порой не с первого раза понимаю как это всё делается, но очень нуждаюсь в помощи)
код программы mainfrm.cpp

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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <cmath.h>
 
 
#pragma hdrstop
 
#include "mainfrm.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
 
float matrix[7][8];    // Объявляем матрицу P(t,m)
 
 
 
TForm4 *Form4;
//---------------------------------------------------------------------------
 __fastcall TForm4::TForm4(TComponent* Owner)
    : TForm(Owner)
{
 
}
//---------------------------------------------------------------------------double func(int t, int m, int lamda)
void FindMax()      // Функция поиска максимума м  согласно заданию 2
{
 
float maxval = StrToFloat(Form4->Tables->Cells[1][1]);
int mval = 1;
 
int m1=Form4->Tables->RowCount-1;
int t1=Form4->Tables->ColCount;
 
for (int t = 1; t < t1; t++)       // Цикл перебора максимального значения
{
maxval = StrToFloat(Form4->Tables->Cells[t][1]);
mval = 1;
 
    for (int m = 1; m < m1; m++)       // Цикл перебора максимального значения
    {
         if (StrToFloat(Form4->Tables->Cells[t][m])> maxval)
         {
            maxval=StrToFloat(Form4->Tables->Cells[t][m]);
            mval = m;
         }
    }
Form4->Tables->Cells[t][m1] = Form4->Tables->Cells[0][mval];
}
 
 
// Form4->Tables->Cells[mval][1];
 
}
//---------------------------------------------------------------------------double func(int t, int m, int lamda)
 
void Setfields()    // Процедура наполнения таблицы
{
 int t1 = StrToInt(Form4->t1->Text);
 int t2 = StrToInt(Form4->t2->Text);
 int m1 = StrToInt(Form4->m1->Text);
 int m2 = StrToInt(Form4->m2->Text);
 
 Form4->Tables->RowCount = m2-m1+3;
 Form4->Tables->ColCount = t2-t1+2;
 
 Form4->Tables->Cells[0][0] ="m/t";           // заполнение символьных значений
 Form4->Tables->Cells[0][m2-m1+2] ="m(max)";
 
 for (int t = t1; t <= t2; t++)
 {
          Form4->Tables->Cells[t][0] = FloatToStr(t);    // заполнение горизонтальной строки
 }
 for (int m = m1; m <= m2; m++)
 {
          Form4->Tables->Cells[0][m-m1+1] = FloatToStr(m);  // заполнение вертикальной строки
 }
 
 for (int t = 0; t <= t2-t1; t++) {
    for (int m = 0; m <= m2-m1; m++)
    {
          Form4->Tables->Cells[t+1][m+1] = FloatToStrF(matrix[t][m], ffFixed, 2, 6);  //Заполнение таблицы из матрицы
    }
}
 
}
 
//---------------------------------------------------------------------------double func(int t, int m, int lamda)
float func(int t, int m, int lamda )  // Функция интенсивности потока заявок
{
float fact = 1;   // Рассчет факториала
for (int i = 1; i <= m; i++)
    {
       fact = fact * i;
    }
 
return ((lamda * t)^m)*Exp(-lamda * t)/fact;   // Расчет функции
}
//---------------------------------------------------------------------------
 
void calcmatrix()    // Процедура заполнения матрицы
{
int lamda = StrToInt(Form4->lm->Text);
 int t1 = StrToInt(Form4->t1->Text);
 int t2 = StrToInt(Form4->t2->Text);
 int m1 = StrToInt(Form4->m1->Text);
 int m2 = StrToInt(Form4->m2->Text);
 
for (int t = t1; t <= t2; t++)
  {
    for (int m = m1; m <= m2; m++)
    {
          matrix[t-t1][m-m1]=func(t,m,lamda);
    }
  }
}
 
 
 
//---------------------------------------------------------------------------
 
void __fastcall TForm4::Button1Click(TObject *Sender)
{
calcmatrix();
Setfields();
FindMax();
}
//---------------------------------------------------------------------------


Скриншот программы
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.02.2019, 19:09
Ответы с готовыми решениями:

Создание таблиц и связей между ними
Доброго времени суток! Я уже неделю не могу создать нормальную БД и связи между ними. Пишу программу для учета прогулов и успеваемости...

(Access) Создание таблиц и установление связей между ними
Тесты. включают таблицы -группа -студенты -прохождение тестов -тема теста -название теста помогите. пожалуйста

Запуск нескольких процессов и Анализ переключения между ними
Не могу разобраться, наверное я слишком тормоз...%-) Задание: написать программу которая создаёт несколько процессов(в моём случае 2) и...

27
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
19.02.2019, 01:26
Sweppi,
можно к примеру ввести в Едит lm такое значение нескольких чисел (3 5 1 8 2)
и после можно их разделить на отдельные числа
можно воспользоваться функцией StringReplace
вот твои значения введены в Едит
TStringList * lamda = new TStringList;
lamda->Text = StringReplace(lm->Text," ","\r\n",TReplaceFlags() << rfReplaceAll);// разобьем строку на числа. каждый пробел новая строка..
результат
3
5
1
8
2

далее в цикле подставляя каждую строку
функцию изменить на calcmatrix(String lm)
и на кнопке

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
void calcmatrix(String lm)    // Процедура заполнения матрицы
{
int lamda = StrToInt(lm);
 int t1 = StrToInt(Form4->t1->Text);
 int t2 = StrToInt(Form4->t2->Text);
 int m1 = StrToInt(Form4->m1->Text);
 int m2 = StrToInt(Form4->m2->Text);
 
for (int t = t1; t <= t2; t++)
  {
    for (int m = m1; m <= m2; m++)
    {
          matrix[t-t1][m-m1]=func(t,m,lamda);
    }
  }
}
 
 
 
//---------------------------------------------------------------------------
void __fastcall TForm4::SpeedButton1Click(TObject *Sender)
{
 
    TStringList * lamda = new TStringList;
    lamda->Text = StringReplace(lm->Text," ","\r\n",TReplaceFlags() << rfReplaceAll);// разобьем строку на числа. каждый пробел новая строка.
// здесь надо подумать что будет:
// создание нескольких таблиц? или в одной таблице несколько результатов?
//
 for(int i = 0; i<lamda->Count; i++)
 {
calcmatrix(lamda->Strings[i]);
Setfields();
FindMax();
 }
}
//---------------------------------------------------------------------------
Миниатюры
Создание нескольких таблиц и переключение между ними  
1
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
19.02.2019, 01:34
сейчас в таком виде будет выводится результат последнего числа 2

можно клонировать колонки (отображаемое количество только 7) и переключатся между ними
и будет эффект переключения между таблицами.
в одной программе я пользовался точно таким отображением. там постоянно создается неопределенное количество (объектов с несколькими параметрами) и можно переключатся между ними .
0
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
19.02.2019, 01:49
примерно такое отображение
Миниатюры
Создание нескольких таблиц и переключение между ними  
1
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
19.02.2019, 01:50
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void __fastcall TForm4::SpeedButton1Click(TObject *Sender)
{
 
    TStringList * lamda = new TStringList;
    lamda->Text = StringReplace(lm->Text," ","\r\n",TReplaceFlags() << rfReplaceAll);// разобьем строку на числа. каждый пробел новая строка.
// здесь надо подумать что будет:
// создание нескольких таблиц? или в одной таблице несколько результатов?
//
 for(int i = 0; i<lamda->Count; i++)
 {
calcmatrix(lamda->Strings[i]);
Setfields();
FindMax();
 }
 delete lamda;
 lamda = NULL;
}
//---------------------------------------------------------------------------
0
Модератор
 Аватар для D1973
9915 / 6452 / 2455
Регистрация: 21.01.2014
Сообщений: 27,386
Записей в блоге: 3
19.02.2019, 05:32
Цитата Сообщение от Sweppi Посмотреть сообщение
return ((lamda * t)^m)*Exp(-lamda * t)/fact; * // Расчет функции
Sweppi, а Вы можете привести формулу в нормальном виде, а не в Вашей трактовке? Просто, я очень сильно сомневаюсь, что тут должна использоваться операция XOR (^). Ну и за одним версию свою озвучьте...

Не по теме:

Цитата Сообщение от Sweppi Посмотреть сообщение
нужно указать число лямда
лямбда!!!

0
0 / 0 / 0
Регистрация: 18.02.2019
Сообщений: 10
19.02.2019, 10:34  [ТС]
D1973,

lifeforce, по заданию мне нужно создание нескольких таблиц, точнее чтобы создавалось столько таблиц, сколько чисел лямбда будет введено и по каждому числу заполнялась таблица.
0
Модератор
 Аватар для D1973
9915 / 6452 / 2455
Регистрация: 21.01.2014
Сообщений: 27,386
Записей в блоге: 3
19.02.2019, 11:47
Ну что и предполагалось: формула неверна...
0
0 / 0 / 0
Регистрация: 18.02.2019
Сообщений: 10
19.02.2019, 12:23  [ТС]
D1973, Почему вы говорите что формула неверна? И как будет тогда?
0
Модератор
 Аватар для D1973
9915 / 6452 / 2455
Регистрация: 21.01.2014
Сообщений: 27,386
Записей в блоге: 3
19.02.2019, 12:39
Цитата Сообщение от Sweppi Посмотреть сообщение
Почему вы говорите что формула неверна?
((lamda * t)^m)*Exp(-lamda * t)/fact
Потому, что вот этот выделенный мной значок - это отнюдь не возведение в степень, а операция побитового исключающего ИЛИ (XOR)...
0
0 / 0 / 0
Регистрация: 18.02.2019
Сообщений: 10
19.02.2019, 12:45  [ТС]
D1973, понял, спасибо)
А правильно будет: (pow(lamda * t),m)*Exp(-lamda * t)/fact ?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,896
Записей в блоге: 11
19.02.2019, 12:57
Правильно будет вообще не использовать возведение в степень. Достаточно одного цикла:
C++
1
2
3
4
5
6
float func(int t, int m, int lambda )  // Функция интенсивности потока заявок
{
    float result = 1.0;
    for (int i = 1; i <= m; i++) result *= ((float)lambda)*t / i;
    return result * exp(-lambda*t);
}
0
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
19.02.2019, 21:04
Лучший ответ Сообщение было отмечено Sweppi как решение

Решение

Sweppi,
Вариантов реализовать таблицы и их переключение - огромное множество все зависит от вашего решения как будет выглядеть визуальное отображение.
вот к примеру я подставил КОМБОБОКС в котором после нажатия на кнопку появится список всех вводных чисел. и просто скроллируя комбобокс на таблице отображается результат.

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
float func(int t, int m, double lambda )  // Функция интенсивности потока заявок
{
    float result = 1.0;
    for (int i = 1; i <= m; i++) result *= ((float)lambda)*t / i;
    return result * exp(-lambda*t);
}
//---------------------------------------------------------------------------
void __fastcall TForm4::SpeedButton1Click(TObject *Sender)
{
    TStringList * lamda = new TStringList;
    lamda->Text = StringReplace(lm->Text," ","\r\n",TReplaceFlags() << rfReplaceAll);// разобьем строку на числа. каждый пробел новая строка.
//
ComboBox1->Items->Text = lamda->Text;
ComboBox1->ItemIndex = 0;
ComboBox1Change(0);
ComboBox1->SetFocus();
 delete lamda;
 lamda = NULL;
}
//---------------------------------------------------------------------------
void __fastcall TForm4::ComboBox1Change(TObject *Sender)
{
try
{
calcmatrix(ComboBox1->Text);
Setfields();
FindMax();
}catch(...){}
}
//---------------------------------------------------------------------------
Миниатюры
Создание нескольких таблиц и переключение между ними  
Вложения
Тип файла: rar Project2.rar (74.7 Кб, 3 просмотров)
0
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
19.02.2019, 21:04
0
0 / 0 / 0
Регистрация: 18.02.2019
Сообщений: 10
20.02.2019, 01:21  [ТС]
lifeforce,
Спасибо большое! Всё работает)
Как оказалось еще нужно реализовать функции открытия файла, сохранения и сохранить как. Если сможете помочь, буду очень благодарен!)
Я пытался реализовать эти функции по чужой проге, но по скольку я не особо шарю и плюс прога совсем для другого, я не очень понимаю как это реализовать. Ибо при попытке вставить код выдаёт кучу ошибок типа неизвестный компонент и прочее...
Вот код кнопок из другой проги если вдруг облегчит задачу)
Код

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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
//---------------------------------------------------------------------------
 
void __fastcall TForm1::N12Click(TObject *Sender)
{
 
if(!save){  switch (MessageBox (NULL, L"Возможна потеря не сохраненных данных. Сохранить?",
                   (Application->Title).c_str(), MB_YESNOCANCEL|MB_ICONINFORMATION)) {
case IDYES:  N13->Click();
            break;
 
case IDNO: {    Memo1->Clear();
                Chart1->Series[0]->Clear();
            for (int i = 1; i < StringGrid1->ColCount; i++) {
                StringGrid1->Cols[i]->Clear();
            }
 
           }
    break;
 
case IDCANCEL:
                return;
    }
}else
for (int i = 1; i < StringGrid1->ColCount; i++) {
    StringGrid1->Cols[i]->Clear();
}
Memo1->Clear();
StringGrid1->ColCount=3;
save=1;
Name=L"";
Memo2->Clear();
Memo2->Lines->Add(L"Текущий Файл:");
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Edit3KeyPress(TObject *Sender, System::WideChar &Key)
{
  if ((Key<L'0' || Key>L'9') && Key!=8 && Key!=13) {
    Key=0;
}
}
//---------------------------------------------------------------------------
 
 
 
void __fastcall TForm1::ComboBox1KeyPress(TObject *Sender, System::WideChar &Key)
 
{
Key=NULL;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::OpenButtonClick(TObject *Sender)
{
if(!save){  switch (MessageBox (NULL, L"Возможна потеря не сохраненных данных. Сохранить?",
                   (Application->Title).c_str(), MB_YESNOCANCEL|MB_ICONINFORMATION)) {
case IDYES:  N13->Click();
            break;
 
case IDNO: {    Memo1->Clear();
                Chart1->Series[0]->Clear();
           Open();
           save=1;
           }
    break;
 
case IDCANCEL:
                return;
    }
}else Open();
 save=1;
}
//---------------------------------------------------------------------------
 
 
 
void __fastcall TForm1::N13Click(TObject *Sender)
{
if(Name==L""){
N3->Click();
}else {
TStringList *TS=new TStringList;
TS->Add(IntToStr(StringGrid1->ColCount));
for(int i=0;i<4;i++)
    {
        for (int j = 1; j < StringGrid1->ColCount; j++)
            {
            TS->Add(AnsiString(StringGrid1->Cells[j][i]));
            }
    }
 
 
TS->SaveToFile(Name);
save=1;
delete TS;
}
}
 
//---------------------------------------------------------------------------
 
 
void __fastcall TForm1::N14Click(TObject *Sender)
{
if(!SavePictureDialog1->Execute())
     return ;
     else Chart1->SaveToBitmapFile(SavePictureDialog1->FileName+".bmp");
}
 
//---------------------------------------------------------------------------
 
 
 
 
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
if (!save)  switch (MessageBox (NULL, L"Возможна потеря не сохраненных данных. Сохранить?",
                   (Application->Title).c_str(), MB_YESNOCANCEL|MB_ICONINFORMATION)) {
case IDYES:  N13->Click();
            break;
 
case IDNO:
    break;
 
case IDCANCEL:
                Abort();
    }
}
 
//---------------------------------------------------------------------------
 
void __fastcall TForm1::N3Click(TObject *Sender)
{
TStringList *TS=new TStringList;
TS->Add(IntToStr(StringGrid1->ColCount));
for(int i=0;i<4;i++)
    {
        for (int j = 1; j < StringGrid1->ColCount; j++)
            {
            TS->Add(AnsiString(StringGrid1->Cells[j][i]));
            }
    }
if(SaveDialog1->Execute()){
Name=(SaveDialog1->FileName).w_str();
TS->SaveToFile((SaveDialog1->FileName)+".rtb");
save=true;
Memo2->Clear();
Memo2->Lines->Add(L"Текущий Файл:");
UnicodeString s;
s=Name;
Memo2->Lines->Add(s);
}else   {
delete TS;
    return;
}
delete TS;
}
//---------------------------------------------------------------------------
0
Модератор
 Аватар для D1973
9915 / 6452 / 2455
Регистрация: 21.01.2014
Сообщений: 27,386
Записей в блоге: 3
20.02.2019, 04:44
Цитата Сообщение от Sweppi Посмотреть сообщение
еще нужно реализовать функции открытия файла, сохранения и сохранить как
А что Вы сохранять хотите? Таблицы? Все разом? И как потом читать, тоже все разом?
0
0 / 0 / 0
Регистрация: 18.02.2019
Сообщений: 10
20.02.2019, 07:56  [ТС]
D1973, да и там и там все разом. Я где-то видел такое, там формат файлов поддерживался какой-то на "R" но я не помню)
0
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
20.02.2019, 20:50
Sweppi,
Тот код совсем не нужен.
точно для этой проги достаточно сохранить текст из едита lm->Text
к примеру в файл под названием "Lambda.txt"
теперь есть варианты.
:можно при запуске открывать последние введенные числа.
:или добавить кнопку загрузки.
:добавить кнопку записи
:добавить событие при закрытии программы , и если не был сохранен файл то сохранить.
вариантов много только ваша фантазия и представление как должна работать программа.

добавим кнопку записи
и ее событие
C++
1
2
3
4
5
6
7
8
9
10
11
12
void __fastcall TForm4::Button_SaveClick(TObject *Sender)
{
        if(mrYes==MessageDlg("Сохранить данные?", mtWarning,
        TMsgDlgButtons() << mbNo << mbYes, 0))
        {
 TStringList * lambda = new TStringList;
lambda->SaveToFile("Lambda.txt");
 delete lambda;
 lambda = NULL;
        }
}
//---------------------------------------------------------------------------
теперь можно и добавить в событие закрытия программы событие кнопки записи Button_SaveClick
C++
1
2
3
4
5
void __fastcall TForm4::FormCloseQuery(TObject *Sender, bool &CanClose)
{
 Button_SaveClick(0);
}
//---------------------------------------------------------------------------
и так же с сохранением данных из поля едит.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void __fastcall TForm4::Button_LoadClick(TObject *Sender)
{
TStringList * lambda = new TStringList;
if(FileExists("Lambda.txt"))lambda->LoadFromFile("Lambda.txt");
else
{
ShowMessage("Нет сохранений");
return;
}
lm->Text = lambda->Text;
 delete lambda;
 lambda = NULL;
}
//---------------------------------------------------------------------------
можно теперь и добавить при старте программы автоматически загрузить файл
для этого достаточно в Form4 выбрать событие OnCreate и выбрать там нашу кнопку записи Button_LoadClick

вот и все программа будет стартовать сразу с последними данными , и закрытие программы так же будет предлогать сохранить данные.
Миниатюры
Создание нескольких таблиц и переключение между ними  
0
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
20.02.2019, 21:06
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm4 *Form4;
float matrix[7][8];    // Объявляем матрицу P(t,m)
TStringList * lambda = new TStringList;// объявляем глобально
//---------------------------------------------------------------------------
__fastcall TForm4::TForm4(TComponent* Owner)
    : TForm(Owner)
{
 
}
//---------------------------------------------------------------------------
void FindMax()      // Функция поиска максимума м  согласно заданию 2
{
 
float maxval = StrToFloat(Form4->Tables->Cells[1][1]);
int mval = 1;
 
int m1=Form4->Tables->RowCount-1;
int t1=Form4->Tables->ColCount;
 
for (int t = 1; t < t1; t++)       // Цикл перебора максимального значения
{
maxval = StrToFloat(Form4->Tables->Cells[t][1]);
mval = 1;
 
    for (int m = 1; m < m1; m++)       // Цикл перебора максимального значения
    {
         if (StrToFloat(Form4->Tables->Cells[t][m])> maxval)
         {
            maxval=StrToFloat(Form4->Tables->Cells[t][m]);
            mval = m;
         }
    }
Form4->Tables->Cells[t][m1] = Form4->Tables->Cells[0][mval];
}
 
 
// Form4->Tables->Cells[mval][1];
 
}
//------------------ --------------------------------------------------
void Setfields()    // Процедура наполнения таблицы
{
 int t1 = StrToInt(Form4->t1->Text);
 int t2 = StrToInt(Form4->t2->Text);
 int m1 = StrToInt(Form4->m1->Text);
 int m2 = StrToInt(Form4->m2->Text);
 
 Form4->Tables->RowCount = m2-m1+3;
 Form4->Tables->ColCount = t2-t1+2;
 
 Form4->Tables->Cells[0][0] ="m/t";           // заполнение символьных значений
 Form4->Tables->Cells[0][m2-m1+2] ="m(max)";
 
 for (int t = t1; t <= t2; t++)
 {
          Form4->Tables->Cells[t][0] = FloatToStr(t);    // заполнение горизонтальной строки
 }
 for (int m = m1; m <= m2; m++)
 {
          Form4->Tables->Cells[0][m-m1+1] = FloatToStr(m);  // заполнение вертикальной строки
 }
 
 for (int t = 0; t <= t2-t1; t++) {
    for (int m = 0; m <= m2-m1; m++)
    {
          Form4->Tables->Cells[t+1][m+1] = FloatToStrF(matrix[t][m], ffFixed, 2, 6);  //Заполнение таблицы из матрицы
    }
}
 
}
//---------------------------------------------------------------------------double func(int t, int m, int lamda)
float func(int t, int m, double lambda )  // Функция интенсивности потока заявок
{
    float result = 1.0;
    for (int i = 1; i <= m; i++) result *= ((float)lambda)*t / i;
    return result * exp(-lambda*t);
}
//---------------------------------------------------------------------------
void calcmatrix(String lm)    // Процедура заполнения матрицы
{
int lamda = StrToInt(lm);
 int t1 = StrToInt(Form4->t1->Text);
 int t2 = StrToInt(Form4->t2->Text);
 int m1 = StrToInt(Form4->m1->Text);
 int m2 = StrToInt(Form4->m2->Text);
 
for (int t = t1; t <= t2; t++)
  {
    for (int m = m1; m <= m2; m++)
    {
          matrix[t-t1][m-m1]=func(t,m,lamda);
    }
  }
}
//---------------------------------------------------------------------------
void __fastcall TForm4::SpeedButton1Click(TObject *Sender)
{
    lambda->Clear();
    lambda->Text = StringReplace(lm->Text," ","\r\n",TReplaceFlags() << rfReplaceAll);// разобьем строку на числа. каждый пробел новая строка.
//
ComboBox1->Items->Text = lambda->Text;
ComboBox1->ItemIndex = 0;
ComboBox1Change(0);
ComboBox1->SetFocus();
 //delete lamda;
 //lamda = NULL;
}
//---------------------------------------------------------------------------
void __fastcall TForm4::ComboBox1Change(TObject *Sender)
{
try
{
calcmatrix(ComboBox1->Text);
Setfields();
FindMax();
}catch(...){}
}
//---------------------------------------------------------------------------
 
void __fastcall TForm4::Button_LoadClick(TObject *Sender)
{
lambda->Clear();
if(FileExists("Lambda.txt"))lambda->LoadFromFile("Lambda.txt");
else
{
ShowMessage("Нет сохранений");
return;
}
lm->Text = lambda->Text;
}
//---------------------------------------------------------------------------
 
 
void __fastcall TForm4::Button_SaveClick(TObject *Sender)
{
        if(lm->Text!="" && mrYes==MessageDlg("Сохранить данные?", mtWarning,
        TMsgDlgButtons() << mbNo << mbYes, 0))
        {
lambda->Text = lm->Text;
lambda->SaveToFile("Lambda.txt");
        }
        else ShowMessage("Нет сохранений");
}
//---------------------------------------------------------------------------
 
void __fastcall TForm4::FormCloseQuery(TObject *Sender, bool &CanClose)
{
 Button_SaveClick(0);
 delete lambda;
 lambda = NULL;
}
//---------------------------------------------------------------------------
0
0 / 0 / 0
Регистрация: 18.02.2019
Сообщений: 10
21.02.2019, 10:12  [ТС]
Цитата Сообщение от lifeforce Посмотреть сообщение
Тот код совсем не нужен.
точно для этой проги достаточно сохранить текст из едита lm->Text
к примеру в файл под названием "Lambda.txt"
теперь есть варианты.
Проблема в том что, мне было сказано чтобы ввод и вывод данных был с файлами не текстового расширения, а например *.stt .
Это возможно сделать с тем кодом что написали вы?
И еще по возможности было бы круто дописать код для кнопки "Сохранить как".
Заранее спасибо!)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.02.2019, 10:12
Помогаю со студенческими работами здесь

Загрузка нескольких картинок из папки и реализовать возможность переключения между ними
Добрый день. Хочу для начала сделать следующее: В окне у меня расположен ListBox. Кликая на определенном элементе, в Imagebox отображается...

Создание, редактирование электронных таблиц. Выполнение наипростейших операций с ними
Здравствуйте! Помогите пожалуйста с этим заданием. Начальный уровень сложности, работы на 15 минут, но справиться не могу никак. Спасибо!

C# Консольная псевдографика, создание меню, переключение между страницами
Добрый день, я немного ламер в C#, но у меня стоит задача: Мне надо в консольном приложении создать меню(это осилил) и чтобы при...

Скорость первого автомобиля V1 км/ч, второго — V2 км/ч, расстояние между ними S км. Определить расстояние между ними через T часов, если автомобили пе
Скорость первого автомобиля V1 км/ч, второго — V2 км/ч, расстояние между ними S км. Определить расстояние между ними через T часов, если...

Создание нескольких таблиц InterBase 6.5
Здравствуйте! Помогите пожалуйста, если не трудно! При компиляции данного кода выскакивает ошибка: Unsuccessful metadata update ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru