Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
 Аватар для nemo19
14 / 11 / 3
Регистрация: 22.04.2018
Сообщений: 198

Выбор температуры

03.01.2021, 14:54. Показов 1116. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, форумчане. Всех с новым годом. Делаю программу по выбору шлифовальных кругов. Почти все сделал, но вот возник вопрос. В цикле do while находится значения температуры, для этого вводятся значения разных характеристик. Эти показания разные для разных марок кругов, зависит от диаметра круга и т.д.
Круг для шлифования находится на основании минимальной температуры.
Предположим я нашел значения трех температур, программа должна выбрать шлифовальный круг с минимальной температурой.
Программа выбрала температуру, также она должна распечатать значения величин в этой итерации цикла do while.
Например, программа выбрала, что минимальная температура была во второй итерации. Программа должна распечатать значения полученные во второй итерации цикла. Вопрос, как сохранить все рассчитанные значения итерации, чтобы потом из распечатать.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.01.2021, 14:54
Ответы с готовыми решениями:

Программа вывода таблицы зависимости температуры по Фаренгейту от температуры по Цельсию
1. Программа вывода таблицы зависимости температуры по Фаренгейту от температуры по Цельсию. F = 32 + 1.8 * C; буду очень благодарна...

Создать программу, которая переводит значение температуры по Цельсию в значения температуры по Фаренгейту
Я нашёл похожую программу написанную на Delphi и попробовал переписать её в C++. Программа работает, но вот с расчётами явно что-то не так,...

Составить программу-меню «Выбор температуры»
Составить программу-меню «Выбор температуры», которая покажет на экране меню температур, а именно: 1 – максимальная температура; 2 –...

13
3 / 2 / 1
Регистрация: 07.04.2020
Сообщений: 26
03.01.2021, 20:49
Сохрани в файл, а потом можешь печатать. А если ты имел ввиду вывести на экран, то записывай всё в массив, потом перебирай массив с сохранением данных в переменную и, сейчас попробую объяснить:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//Предположим, итерации 3, тогда
    double myMassive[3];
    double minZnach;
    for(int i=0; i<3; i++)
    {
    cin >> myMassive[i];//Вводим значения в наш массив, но у вас в задаче значения вносятся в массив из вне
    }
    minZnach = myMassive[0];
    for(int i=0; i<3; i++)
    {
    if(myMassive[i]<minZnach)
        {
            minZnach = myMassive[i];
        }
    }
    cout << minZnach;
Старался как можно понятнее писать.
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
04.01.2021, 07:05
Цитата Сообщение от Konstantinn Посмотреть сообщение
Сохрани в файл
зачем ?
Цитата Сообщение от nemo19 Посмотреть сообщение
распечатать значения величин
показывайте код и сообщите какие значения Вам нужно распечатать
0
 Аватар для nemo19
14 / 11 / 3
Регистрация: 22.04.2018
Сообщений: 198
04.01.2021, 19:45  [ТС]
Вот собственно моя программа. В чем проблема?
Критерий для программы минимальная температура, по ней выбирается шлифовальный круг. В основном все зависит от диаметра круга, чем меньше диаметр, тем меньше температура. Нужно ввести от 2 до 10 значений круга. Если диаметры кругов уменьшаются, то программа работает корректно. Выдает рекомендуемый тип круга в зависимости от температуры. Если же наоборот увеличиваются, то работает не корректно. Программа выбирает круг не с меньшей температурой, а с той, которая была получена последней. Подскажите как исправить?
Я закомментировал основные расчеты, чтобы не отвлекали, программа работает.

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
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
//Grinding.cpp-расчеты параметров при шлифовании
 
#include <iostream>
#include <cmath>
#include <string>
 
 
using namespace std;
struct Circle
{
    double D;                       //диаметр абразивного круга, мм
    double widthCircle=30;             //ширина абразивного круга, мм
    double landingHole=15;             //диаметр посадочного отверстия, мм
    string matGrain;                //материал зерна круга
    int abrasiveWheelGrit;          //зернистость абразивного круга
    string abrasiveWheelHardness;   //твердость абразивного круга
    int structAbrasiveWheel;        //структура абразивного круга  
    string bunchCircle;             //связка абразивного круга
    string accuracyClass;           //класс точности
    int imbalanceClass;             //класс неуровновешенности 
};
 
 
double nextTemp(double, double);
double minTemp(double, double);
double tempResult=0;
 
int main()
{
    setlocale(LC_ALL, "rus");
    Circle c1;
    const int MATERIAL = 5;
    const int GRAIN = 15;
    const int HARDNESS = 7;
    const int VISCOSITY = 5;
    const int ACCURACY = 3;
    const char* RAZDEL = "*****************************************************************";
 
    
    
    
    char answer;
    int score = 0;
    double K=1.25;           //коэффициент точности шлифования
    
    double temp[10];
    double t0;               //основное время шлифования
    double L=100;                //длина заготовки
    double a=0.15;           //припуск на сторону
    
    double nk=1200;               //частота вращения абразивного круга об/м
    const float PI = 3.14;   //число Пи
    double Vk;               //скорость абразивного круга м/с
    double kb;               //коэффициент вершины и ориентации зерна
    double k;                //коэффициент доли механической работы перехода в тепло
    double Zp;               //число работающих зерен на единицу площади
    double Hsr;              //среднее значение распределение высоты зерна
    double H;                //высота распределения зерна, мм
    double Tsr=0;            //средняя температура при шлифовании
    double Q;                //температура в зоне резания
    double Pz;               //сила резания
    double Vd;               //скорость детали м/с
    double d=10;                //диаметр детали, мм
    double Sn=9;               //продольная подача
    double t=0.2;                //глубина резания, мм
    double U = 0.1;          //сила трения
    double Usr = 0.28;       //средняя сила трения
    static double T;         //температура на отдельных участках
    double b=0.8;                //интервал случайной величины
    double Cp=2.2;           //коэффициент, зависящий от свойства материала шлифуемой детали
    
    double tMin = 0;
    
    double tempResultMin;
 
    
 
    //данные для формулы типа шлифовального круга
    int partMaterial;        //материал детали
    
    
 
    /*Значение Ср-равно 2,2 - при шлифовании закаленной стали, 2,1-при шлифовании не закаленной стали, 2,0 - при шлифовании чугуна.*/
    
    
    do {
        //Расчет скорости абразивного круга
        cout << "Расчет скорости абразивного круга" << endl;
        cout << "Введите значение диаметра абразивного круга в(мм): ";
        cin >> c1.D;
        //cout << "Введите значение частоты вращения абразивного круга в(об/м): ";
        //cin >> nk;
        //Скорость абразивного круга, м/сек
        Vk = (PI * c1.D * nk) / (60.0 * 1000.0);
        //cout << "Скорость абразивного круга: " << Vk << endl;
        cout << RAZDEL << endl;
 
        //Расчет скорости детали
        cout << "Расчет скорости детали" << endl;
        //cout << "Введите диаметр детали в(мм): ";
        //cin >> d;
        //cout << "Введите значение частоты вращения абразивного круга в(об/м): ";
        //cin >> nk;
        //Скорость детали м/мин
        Vd = (PI * d * nk) / 1000.0;
        //cout << "Скорость детали: " << Vd << endl;
        cout << RAZDEL << endl;
 
        //Расчет силы резания
        cout << "Расчет силы резания" << endl;
        //cout << "Введите значение глубины резания в (мм): ";
        //cin >> t;
        //cout << "Введите значение продольной подачи: ";
        //cin >> Sn;
        //Cила резания
        Pz = Cp * pow(Vd, 0.7) * pow(Sn, 0.7) * pow(t, 0.6);
        //cout << "Сила резания: " << Pz << endl;
        cout << RAZDEL << endl;
 
        //Расчет температуры на отдельных участках
        cout << "Расчет температуры на отдельных участках" << endl;
        //cout << "Введите интервал случайной величины: ";
        //cin >> b;
        T = Pz * b * (Vk / 15);
        cout << endl;
        cout << "Температура на отдельном участке равна: " << round(T * 100) / 100 << endl;
        cout << RAZDEL << endl;
 
        Tsr+=T;
        score++;
        
        
 
        if (tempResult>T)
        {
            tempResultMin = minTemp(T, tempResult);
            cout << "Минимальная температура равна: " << tempResultMin << " C" <<endl;
        }
 
 
        if(tempResult<T)
        {
 
            //cout << "Введите ширину абразивного круга в (мм): ";
            //cin >> c1.widthCircle;
            //cout << "Введите диаметр посадочного отверстия в (мм): ";
            //cin >> c1.landingHole;
            cout << endl;
            cout << "Введите материал детали" << endl;
            cout << endl;
            cout << "1)Cталь конструкционная" << endl;
            cout << "2)Cталь легированная" << endl;
            cout << "3)Cталь жаропрочная" << endl;
            cout << "4)Cталь инструментальная" << endl;
            cout << "5)Чугун и медные сплавы" << endl;
            cout << endl;
            cout << "Выберите материал: ";
 
            cin >> partMaterial;
            switch (partMaterial)
            {
            case 1:
            {
                cout << "Сталь конструкционная\n";
                if (partMaterial == 1)
                {
                    c1.matGrain = "14A";                               //шлиф материал
                    c1.abrasiveWheelGrit = 60;                         //зернистость
                    c1.abrasiveWheelHardness = "K";                    //твердость
                    c1.structAbrasiveWheel = 10;                       //структура
                    c1.bunchCircle = "V";                              //связка
                    c1.accuracyClass = "AA";                           //класс точности
                    c1.imbalanceClass = 1;                             //класс неуровновешености
                }
                break;
            }
            case 2: cout << "Сталь легированная\n"; break;
            case 3: cout << "Сталь жаропрочная\n"; break;
            case 4: cout << "Сталь инструментальная\n"; break;
            case 5: cout << "Чугун и медные сплавы\n"; break;
            }
            tempResult = nextTemp(T, tMin);
            cout << "Текущая температура равна: " << tempResult << " C" << endl;
        }
        
        cout << RAZDEL << endl;
        cout << "Сделать расчет еще для одного круга:(y/n)?";
        cin >> answer;
 
    } while (answer != 'n');
 
    
    cout << endl;
        //формула вывода типа шлифовального круга
        cout << "Рекомендуемый тип шлифовального круга: "
            << c1.D << "X"
            << c1.widthCircle << "Х"
            << c1.landingHole << " "
            << c1.matGrain << " "
            << c1.abrasiveWheelGrit << " "
            << c1.abrasiveWheelHardness << " "
            << c1.structAbrasiveWheel << " "
            << c1.bunchCircle << " "
            << c1.accuracyClass << " "
            << c1.imbalanceClass;
        cout << endl;
        cout << endl;
    //Расчет средней температуры
    Tsr = Tsr / score;
    cout << "Средняя температура равна: " << Tsr << " C"<<endl;
    cout << endl;
 
 
 
 
 
    //Расчет основного времени шлифования
    cout << "Расчет основного времени" << endl;
    cout << RAZDEL <<endl;
    //cout << "Введите длину заготовки в(мм): ";
    //cin >> L;
    //cout << "Введите частоту вращения абразивного круга в (об/м): ";
    //cin >> nk;
    //cout << "Введите значение продольной подачи: ";
    //cin >> Sn;
    //cout << "Введите глубину резания в (мм): ";
    //cin >> t;
    t0 = ((L * a) / (nk * Sn * t)) * K;
    cout << endl;
    cout << "Основное время равно: " << round(t0*100)/100 << " мин." << endl;
    cout << RAZDEL << endl;
    cout << endl;
    
 
    system("pause");
    return 0;
}
//вычисляется минимальная температура в первой итерации
double nextTemp(double temp, double min)
{
    
    if (temp > min)
    {
        min = temp;
    }
 
    return min;
}
//вычисляется минимальная температура в последующих итерациях
double minTemp(double temp, double nextTemp)
{
    double min=0;
 
    if (temp < nextTemp)
    {
        min = temp;
    }
    return min;
}
Добавлено через 6 минут
Делаю эту программу, чтобы на основе ее, сделать программу с графическим интерфейсом в Qt.
В общем то программа уже сделана в графике, осталось только с этой температурой разобраться.

Добавлено через 4 часа 30 минут
Подскажите, как исправить программу?
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
04.01.2021, 20:35
Цитата Сообщение от nemo19 Посмотреть сообщение
В чем проблема?
функции nextTemp и minTemp уберите, а значение минимальной температуры Tmin и номера круга находите в конце цикла:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    double Tmin=2000.; // <--- здесь поставьте максимальное значение температуры или DBL_MAX  
    do 
    {
        ...
        ...
        ...
 
        if(T < Tmin) {Tmin=T;number_circle=score;}
 
        cout << "Сделать расчет еще для одного круга:(y/n)?";
        cin >> answer;
 
    } while (answer != 'n');
не по теме вопроса:
Цитата Сообщение от nemo19 Посмотреть сообщение
const float PI = 3.14;   //число Пи
очень неточно. уберите эту строку, первой строкой поставьте
C++
1
#define _USE_MATH_DEFINES
а в программе PI замените на M_PI
0
 Аватар для nemo19
14 / 11 / 3
Регистрация: 22.04.2018
Сообщений: 198
04.01.2021, 21:14  [ТС]
Ничего не помогло. Если брать круги по мере уменьшения диаметра, то все работает, а наоборот нет. Реверс в программе не работает, если брать на увеличение.

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
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
//Grinding.cpp-расчеты параметров при шлифовании
 
#include <iostream>
#include <cmath>
#include <string>
#define _USE_MATH_DEFINES
 
 
using namespace std;
struct Circle
{
    double D;                       //диаметр абразивного круга, мм
    double widthCircle;             //ширина абразивного круга, мм
    double landingHole;             //диаметр посадочного отверстия, мм
    string matGrain;                //материал зерна круга
    int abrasiveWheelGrit;          //зернистость абразивного круга
    string abrasiveWheelHardness;   //твердость абразивного круга
    int structAbrasiveWheel;        //структура абразивного круга  
    string bunchCircle;             //связка абразивного круга
    string accuracyClass;           //класс точности
    int imbalanceClass;             //класс неуровновешенности 
};
 
 
 
int main()
{
    setlocale(LC_ALL, "rus");
    Circle c1;
    const int MATERIAL = 5;
    const int GRAIN = 15;
    const int HARDNESS = 7;
    const int VISCOSITY = 5;
    const int ACCURACY = 3;
    const char* RAZDEL = "*****************************************************************";
 
    
    
    
    char answer;
    int score = 0;
    int number_circle = 0;
    double K=1.25;           //коэффициент точности шлифования
    bool minTemperature;
    double temp[10];
    double t0;               //основное время шлифования
    double L;                //длина заготовки
    double a=0.15;           //припуск на сторону
    
    double nk;               //частота вращения абразивного круга об/м
    float M_PI=3.14;   //число Пи
    double Vk;               //скорость абразивного круга м/с
    double kb;               //коэффициент вершины и ориентации зерна
    double k;                //коэффициент доли механической работы перехода в тепло
    double Zp;               //число работающих зерен на единицу площади
    double Hsr;              //среднее значение распределение высоты зерна
    double H;                //высота распределения зерна, мм
    double Tsr=0;            //средняя температура при шлифовании
    double Q;                //температура в зоне резания
    double Pz;               //сила резания
    double Vd;               //скорость детали м/с
    double d;                //диаметр детали, мм
    double Sn;               //продольная подача
    double t;                //глубина резания, мм
    double U = 0.1;          //сила трения
    double Usr = 0.28;       //средняя сила трения
    static double T;         //температура на отдельных участках
    double b;                //интервал случайной величины
    double Cp=2.2;           //коэффициент, зависящий от свойства материала шлифуемой детали
    double tMin = 2000;
    double tempResultMin;
    //данные для формулы типа шлифовального круга
    int partMaterial;        //материал детали
 
    /*Значение Ср-равно 2,2 - при шлифовании закаленной стали, 2,1-при шлифовании не закаленной стали, 2,0 - при шлифовании чугуна.*/
    
    
    do {
        //Расчет скорости абразивного круга
        cout << "Расчет скорости абразивного круга" << endl;
        cout << "Введите значение диаметра абразивного круга в(мм): ";
        cin >> c1.D;
        cout << "Введите значение частоты вращения абразивного круга в(об/м): ";
        cin >> nk;
        //Скорость абразивного круга, м/сек
        Vk = (M_PI * c1.D * nk) / (60.0 * 1000.0);
        //cout << "Скорость абразивного круга: " << Vk << endl;
        cout << RAZDEL << endl;
 
        //Расчет скорости детали
        cout << "Расчет скорости детали" << endl;
        cout << "Введите диаметр детали в(мм): ";
        cin >> d;
        //Скорость детали м/мин
        Vd = (M_PI * d * nk) / 1000.0;
        //cout << "Скорость детали: " << Vd << endl;
        cout << RAZDEL << endl;
 
        //Расчет силы резания
        cout << "Расчет силы резания" << endl;
        cout << "Введите значение глубины резания в (мм): ";
        cin >> t;
        cout << "Введите значение продольной подачи: ";
        cin >> Sn;
        //Cила резания
        Pz = Cp * pow(Vd, 0.7) * pow(Sn, 0.7) * pow(t, 0.6);
        //cout << "Сила резания: " << Pz << endl;
        cout << RAZDEL << endl;
 
        //Расчет температуры на отдельных участках
        cout << "Расчет температуры на отдельных участках" << endl;
        cout << "Введите интервал случайной величины: ";
        cin >> b;
        T = Pz * b * (Vk / 15);
        cout << endl;
        cout << "Температура на отдельном участке равна: " << round(T * 100) / 100 << endl;
        cout << RAZDEL << endl;
 
        Tsr+=T;
        score++;
        
            cout << "Введите ширину абразивного круга в (мм): ";
            cin >> c1.widthCircle;
            cout << "Введите диаметр посадочного отверстия в (мм): ";
            cin >> c1.landingHole;
            cout << endl;
            cout << "Введите материал детали" << endl;
            cout << endl;
            cout << "1)Cталь конструкционная" << endl;
            cout << "2)Cталь легированная" << endl;
            cout << "3)Cталь жаропрочная" << endl;
            cout << "4)Cталь инструментальная" << endl;
            cout << "5)Чугун и медные сплавы" << endl;
            cout << endl;
            cout << "Выберите материал: ";
 
            cin >> partMaterial;
            switch (partMaterial)
            {
            case 1:
            {
                cout << "Сталь конструкционная\n";
                if (partMaterial == 1)
                {
                    c1.matGrain = "14A";                               //шлиф материал
                    c1.abrasiveWheelGrit = 60;                         //зернистость
                    c1.abrasiveWheelHardness = "K";                    //твердость
                    c1.structAbrasiveWheel = 10;                       //структура
                    c1.bunchCircle = "V";                              //связка
                    c1.accuracyClass = "AA";                           //класс точности
                    c1.imbalanceClass = 1;                             //класс неуровновешености
                }
                break;
            }
            case 2: cout << "Сталь легированная\n"; break;
            case 3: cout << "Сталь жаропрочная\n"; break;
            case 4: cout << "Сталь инструментальная\n"; break;
            case 5: cout << "Чугун и медные сплавы\n"; break;
            }
        
        cout << RAZDEL << endl;
        if (T < tMin) 
        { tMin = T; number_circle = score; }
 
        cout << "Сделать расчет еще для одного круга:(y/n)?";
        cin >> answer;
 
    } while (answer != 'n');
 
    
    cout << endl;
        //формула вывода типа шлифовального круга
        cout << "Рекомендуемый тип шлифовального круга: "
            << c1.D << "X"
            << c1.widthCircle << "Х"
            << c1.landingHole << " "
            << c1.matGrain << " "
            << c1.abrasiveWheelGrit << " "
            << c1.abrasiveWheelHardness << " "
            << c1.structAbrasiveWheel << " "
            << c1.bunchCircle << " "
            << c1.accuracyClass << " "
            << c1.imbalanceClass;
        cout << endl;
        cout << endl;
    //Расчет средней температуры
    Tsr = Tsr / score;
    cout << "Средняя температура равна: " << Tsr << " C"<<endl;
    cout << endl;
 
    //Расчет основного времени шлифования
    cout << "Расчет основного времени" << endl;
    cout << RAZDEL <<endl;
    cout << "Введите длину заготовки в(мм): ";
    cin >> L;
    t0 = ((L * a) / (nk * Sn * t)) * K;
    cout << endl;
    cout << "Основное время равно: " << round(t0*100)/100 << " мин." << endl;
    cout << RAZDEL << endl;
    cout << endl;
    
    system("pause");
    return 0;
}
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
04.01.2021, 21:58
nemo19, что значит не помогло ? эти значения ещё нужно вывести на экран после цикла

насчёт M_PI. строку
Цитата Сообщение от nemo19 Посмотреть сообщение
#define _USE_MATH_DEFINES
поставьте САМОЙ ПЕРВОЙ СТРОКОЙ

строку
Цитата Сообщение от nemo19 Посмотреть сообщение
float M_PI=3.14;   //число Пи
вообще уберите
0
 Аватар для nemo19
14 / 11 / 3
Регистрация: 22.04.2018
Сообщений: 198
04.01.2021, 22:00  [ТС]
Немного не понимаю, можно по конкретнее.
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
04.01.2021, 22:07
Цитата Сообщение от nemo19 Посмотреть сообщение
Немного не понимаю
что именно не понятно ? что такое первая строка программы ? что значит вывести значения на экран ? что значит удалить строку ?
0
 Аватар для nemo19
14 / 11 / 3
Регистрация: 22.04.2018
Сообщений: 198
04.01.2021, 22:12  [ТС]
Программа не вычисляет наименьшую температуру, если шлифовальные круги выбирать от меньшего к большому?
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
04.01.2021, 22:17
nemo19, замените ещё static double на double, внесите все правки про которые говорил выше и сбросьте код
0
 Аватар для nemo19
14 / 11 / 3
Регистрация: 22.04.2018
Сообщений: 198
04.01.2021, 23:09  [ТС]
Вроде все исправил.
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
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
//Grinding.cpp-расчеты параметров при шлифовании
#define _USE_MATH_DEFINES
#include <iostream>
#include <cmath>
#include <string>
 
 
 
using namespace std;
struct Circle
{
    double D;                       //диаметр абразивного круга, мм
    double widthCircle;             //ширина абразивного круга, мм
    double landingHole;             //диаметр посадочного отверстия, мм
    string matGrain;                //материал зерна круга
    int abrasiveWheelGrit;          //зернистость абразивного круга
    string abrasiveWheelHardness;   //твердость абразивного круга
    int structAbrasiveWheel;        //структура абразивного круга  
    string bunchCircle;             //связка абразивного круга
    string accuracyClass;           //класс точности
    int imbalanceClass;             //класс неуровновешенности 
};
 
 
 
int main()
{
    setlocale(LC_ALL, "rus");
    Circle c1;
    const int MATERIAL = 5;
    const int GRAIN = 15;
    const int HARDNESS = 7;
    const int VISCOSITY = 5;
    const int ACCURACY = 3;
    const char* RAZDEL = "*****************************************************************";
 
    
    
    
    char answer;
    int score = 0;
    int number_circle = 0;
    double K=1.25;           //коэффициент точности шлифования
    bool minTemperature;
    double temp[10];
    double t0;               //основное время шлифования
    double L;                //длина заготовки
    double a=0.15;           //припуск на сторону
    
    double nk;               //частота вращения абразивного круга об/м
    double Vk;               //скорость абразивного круга м/с
    double kb;               //коэффициент вершины и ориентации зерна
    double k;                //коэффициент доли механической работы перехода в тепло
    double Zp;               //число работающих зерен на единицу площади
    double Hsr;              //среднее значение распределение высоты зерна
    double H;                //высота распределения зерна, мм
    double Tsr=0;            //средняя температура при шлифовании
    double Q;                //температура в зоне резания
    double Pz;               //сила резания
    double Vd;               //скорость детали м/с
    double d;                //диаметр детали, мм
    double Sn;               //продольная подача
    double t;                //глубина резания, мм
    double U = 0.1;          //сила трения
    double Usr = 0.28;       //средняя сила трения
    double T;                //температура на отдельных участках
    double b;                //интервал случайной величины
    double Cp=2.2;           //коэффициент, зависящий от свойства материала шлифуемой детали
    double tMin = 2000;
    double tempResultMin;
    //данные для формулы типа шлифовального круга
    int partMaterial;        //материал детали
 
    /*Значение Ср-равно 2,2 - при шлифовании закаленной стали, 2,1-при шлифовании не закаленной стали, 2,0 - при шлифовании чугуна.*/
    
    
    do {
        //Расчет скорости абразивного круга
        cout << "Расчет скорости абразивного круга" << endl;
        cout << "Введите значение диаметра абразивного круга в(мм): ";
        cin >> c1.D;
        cout << "Введите значение частоты вращения абразивного круга в(об/м): ";
        cin >> nk;
        //Скорость абразивного круга, м/сек
        Vk = (M_PI * c1.D * nk) / (60.0 * 1000.0);
        //cout << "Скорость абразивного круга: " << Vk << endl;
        cout << RAZDEL << endl;
 
        //Расчет скорости детали
        cout << "Расчет скорости детали" << endl;
        cout << "Введите диаметр детали в(мм): ";
        cin >> d;
        //Скорость детали м/мин
        Vd = (M_PI * d * nk) / 1000.0;
        //cout << "Скорость детали: " << Vd << endl;
        cout << RAZDEL << endl;
 
        //Расчет силы резания
        cout << "Расчет силы резания" << endl;
        cout << "Введите значение глубины резания в (мм): ";
        cin >> t;
        cout << "Введите значение продольной подачи: ";
        cin >> Sn;
        //Cила резания
        Pz = Cp * pow(Vd, 0.7) * pow(Sn, 0.7) * pow(t, 0.6);
        //cout << "Сила резания: " << Pz << endl;
        cout << RAZDEL << endl;
 
        //Расчет температуры на отдельных участках
        cout << "Расчет температуры на отдельных участках" << endl;
        cout << "Введите интервал случайной величины: ";
        cin >> b;
        T = Pz * b * (Vk / 15);
        cout << endl;
        cout << "Температура на отдельном участке равна: " << round(T * 100) / 100 << endl;
        cout << RAZDEL << endl;
 
        Tsr+=T;
        score++;
        
            cout << "Введите ширину абразивного круга в (мм): ";
            cin >> c1.widthCircle;
            cout << "Введите диаметр посадочного отверстия в (мм): ";
            cin >> c1.landingHole;
            cout << endl;
            cout << "Введите материал детали" << endl;
            cout << endl;
            cout << "1)Cталь конструкционная" << endl;
            cout << "2)Cталь легированная" << endl;
            cout << "3)Cталь жаропрочная" << endl;
            cout << "4)Cталь инструментальная" << endl;
            cout << "5)Чугун и медные сплавы" << endl;
            cout << endl;
            cout << "Выберите материал: ";
 
            cin >> partMaterial;
            switch (partMaterial)
            {
            case 1:
            {
                cout << "Сталь конструкционная\n";
                if (partMaterial == 1)
                {
                    c1.matGrain = "14A";                               //шлиф материал
                    c1.abrasiveWheelGrit = 60;                         //зернистость
                    c1.abrasiveWheelHardness = "K";                    //твердость
                    c1.structAbrasiveWheel = 10;                       //структура
                    c1.bunchCircle = "V";                              //связка
                    c1.accuracyClass = "AA";                           //класс точности
                    c1.imbalanceClass = 1;                             //класс неуровновешености
                }
                break;
            }
            case 2: cout << "Сталь легированная\n"; break;
            case 3: cout << "Сталь жаропрочная\n"; break;
            case 4: cout << "Сталь инструментальная\n"; break;
            case 5: cout << "Чугун и медные сплавы\n"; break;
            }
        
        cout << RAZDEL << endl;
        if (T < tMin) 
        { tMin = T; number_circle = score; }
 
        cout << "Сделать расчет еще для одного круга:(y/n)?";
        cin >> answer;
 
    } while (answer != 'n');
 
    
    cout << endl;
        //формула вывода типа шлифовального круга
        cout << "Рекомендуемый тип шлифовального круга: "
            << c1.D << "X"
            << c1.widthCircle << "Х"
            << c1.landingHole << " "
            << c1.matGrain << " "
            << c1.abrasiveWheelGrit << " "
            << c1.abrasiveWheelHardness << " "
            << c1.structAbrasiveWheel << " "
            << c1.bunchCircle << " "
            << c1.accuracyClass << " "
            << c1.imbalanceClass;
        cout << endl;
        cout << endl;
    //Расчет средней температуры
    Tsr = Tsr / score;
    cout << "Средняя температура равна: " << Tsr << " C"<<endl;
    cout << endl;
 
    //Расчет основного времени шлифования
    cout << "Расчет основного времени" << endl;
    cout << RAZDEL <<endl;
    cout << "Введите длину заготовки в(мм): ";
    cin >> L;
    t0 = ((L * a) / (nk * Sn * t)) * K;
    cout << endl;
    cout << "Основное время равно: " << round(t0*100)/100 << " мин." << endl;
    cout << RAZDEL << endl;
    cout << endl;
    
    system("pause");
    return 0;
}

Вот вывод программы, если круги выбираются по возрастанию от меньшего к большему. Я выбрал два круга с диаметрами 100 и 200. В строке "рекомендуемый тип шлифовального круга", первая цифра должна быть 100.
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
05.01.2021, 00:13
nemo19, я привёл пример как найти номер круга, если Вам нужны другие параметры, добавляйте их в строку
{ tMin = T; number_circle = score; }
вместо number_circle = score;
например: width_circle=c1.widthCircle;

Добавлено через 2 минуты
в Вашей задаче не вижу особого смысла в структуре - зачем Вы её используете ?
1
 Аватар для nemo19
14 / 11 / 3
Регистрация: 22.04.2018
Сообщений: 198
07.01.2021, 00:58  [ТС]
Здравствуйте, всех с С новым годом и Рождеством. В моей программе выводятся два значения, должно одно. То в котором первое значение меньше. Выводится так должно, если выбираешь круги по возрастанию и наоборот. Подскажите где ошибка?
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
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
#define _USE_MATH_DEFINES
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
class Circle
{
public:
    double T;                       //температура на отдельных участках
    double D;                       //диаметр абразивного круга, мм
    double widthCircle=30.0;             //ширина абразивного круга, мм
    double landingHole=15.0;             //диаметр посадочного отверстия, мм
    string matGrain;                //материал зерна круга
    int abrasiveWheelGrit;          //зернистость абразивного круга
    string abrasiveWheelHardness;   //твердость абразивного круга
    int structAbrasiveWheel;        //структура абразивного круга  
    string bunchCircle;             //связка абразивного круга
    string accuracyClass;           //класс точности
    int imbalanceClass;             //класс неуровновешенности 
    int score = 0;
    double K = 1.25;         //коэффициент точности шлифования
    double t0;               //основное время шлифования
    double L;                //длина заготовки
    double a = 0.15;         //припуск на сторону
    double nk=1200;               //частота вращения абразивного круга об/м
    double Vk;               //скорость абразивного круга м/с
    double Tsr = 0;          //средняя температура при шлифовании
    double Pz;               //сила резания
    double Vd;               //скорость детали м/с
    double d=10;                //диаметр детали, мм
    double Sn=9.0;               //продольная подача
    double t=0.2;                //глубина резания, мм
    double b=0.8;                //интервал случайной величины
    int partMaterial=1;        //материал детали
    double Cp = 2.2;         //коэффициент, зависящий от свойства материала шлифуемой детали
    double curT;
    double curD;
    double minT=0;
    double minTempr;
    double rTmin;
    double currentDiametr;
    double minD;
    double minimumD;
    double resultD;
    double ControlT;
    /*Значение Ср-равно 2,2 - при шлифовании закаленной стали, 2,1-при шлифовании не закаленной стали, 2,0 - при шлифовании чугуна.*/
    
public:
    void calcCircle();
    void typeCircle();
    double currTemp(double, double);
    double minTemp(double, double);
    double resultTemp(double, double);
    double currDiam(double, double);
    double minDiam(double, double);
    double resultDiametr(double, double);
};
 
void Circle::calcCircle()
{
    //Расчет скорости абразивного круга
    //cout << "Расчет скорости абразивного круга" << endl;
    cout << "Введите значение диаметра абразивного круга в(мм): ";
    cin >> D;
    //cout << "Введите значение частоты вращения абразивного круга в(об/м): ";
    //cin >> nk;
    //Скорость абразивного круга, м/сек
    Vk = (M_PI * D * nk) / (60.0 * 1000.0);
 
    
 
    //Расчет скорости детали
    //cout << "Расчет скорости детали" << endl;
    //cout << "Введите диаметр детали в(мм): ";
    //cin >> d;
    //Скорость детали м/мин
    Vd = (M_PI * d * nk) / 1000.0;
    //Расчет силы резания
    //cout << "Расчет силы резания" << endl;
    //cout << "Введите значение глубины резания в (мм): ";
    //cin >> t;
    //cout << "Введите значение продольной подачи: ";
    //cin >> Sn;
    //Cила резания
    Pz = Cp * pow(Vd, 0.7) * pow(Sn, 0.7) * pow(t, 0.6);
    //Расчет температуры на отдельных участках
    //cout << "Расчет температуры на отдельных участках" << endl;
    //cout << "Введите интервал случайной величины: ";
    //cin >> b;
    T = Pz * b * (Vk / 15);
    cout << endl;
    cout << "Температура на отдельном участке равна: " << round(T * 100) / 100 << endl;
    score++;
 
    currentDiametr = currDiam(D, curD);
    cout << "Текущий диаметр: " << currentDiametr << endl;
    
    if (score < 2)
    {
        minimumD = minDiam(currentDiametr, D);
        cout << "Минимальный диаметр: " << minimumD << endl;
        curD = minimumD;
    }
    
 
    if (score >= 2)
    {
        resultD = resultDiametr(currentDiametr, minimumD);
        cout << "Минимальный диаметр равен: " << resultD << endl;
    }
 
 
    
        curT = currTemp(T, minTempr);
        cout << "Текущая температура равна: " << curT << endl;
 
        if (score > 0 && score <= 1)
        
            minTempr = minTemp(curT, T);
            cout << "Минимальная температура равна: " << minTempr << endl;
 
        if (score > 1)
        {
            rTmin = resultTemp(curT, minTempr);
            ControlT = rTmin;
            cout << "Минимальная температура равна: " << rTmin << endl;
        }
 
        
    
 
    //cout << "Введите ширину абразивного круга в (мм): ";
    //cin >> widthCircle;
    //cout << "Введите диаметр посадочного отверстия в (мм): ";
    //cin >> landingHole;
    cout << endl;
    //cout << "Введите материал детали" << endl;
    cout << endl;
    cout << "1)Cталь конструкционная" << endl;
    cout << "2)Cталь легированная" << endl;
    cout << "3)Cталь жаропрочная" << endl;
    cout << "4)Cталь инструментальная" << endl;
    cout << "5)Чугун и медные сплавы" << endl;
    cout << endl;
    //cout << "Выберите материал: ";
 
    //cin >> partMaterial;
    switch (partMaterial)
    {
    case 1:
    {
        cout << "Сталь конструкционная\n";
        if (partMaterial == 1)
        {
            matGrain = "14A";                               //шлиф материал
            abrasiveWheelGrit = 60;                         //зернистость
            abrasiveWheelHardness = "K";                    //твердость
            structAbrasiveWheel = 10;                       //структура
            bunchCircle = "V";                              //связка
            accuracyClass = "AA";                           //класс точности
            imbalanceClass = 1;                             //класс неуровновешености
        }
        break;
    }
    case 2: cout << "Сталь легированная\n"; break;
    case 3: cout << "Сталь жаропрочная\n"; break;
    case 4: cout << "Сталь инструментальная\n"; break;
    case 5: cout << "Чугун и медные сплавы\n"; break;
    }
    
}
 
 
 
 
void Circle::typeCircle()
{
    cout << endl;
    //формула вывода типа шлифовального круга
    if((resultD) && (minTempr))
    
        cout << "Тип шлифовального круга: "
            << D << "X"
            << widthCircle << "Х"
            << landingHole << " "
            << matGrain << " "
            << abrasiveWheelGrit << " "
            << abrasiveWheelHardness << " "
            << structAbrasiveWheel << " "
            << bunchCircle << " "
            << accuracyClass << " "
            << imbalanceClass;
        cout << endl;
    
}
 
double Circle::currTemp(double T, double current )
{
    if (current < T)
    {
        current = T;
        return current;
    }
 
    if (current > T)
    {
        T = current;
        return T;
    }
    
}
double Circle::minTemp(double curTemp, double T)
{
    if (curTemp > T)
    {
        return T;
    }
    else if(curTemp = T)
    {
        curTemp = T;
        return curTemp;
    }
    else if (curTemp < T)
    {
        return curTemp;
    }
}
double Circle::minDiam(double curD, double D)
{
    if (curD > D)
    {
        return curD;
    }
    else if (curD = D)
    {
        curD = D;
        return curD;
    }
    else if (curD < T)
    {
        return curD;
    }
}
double Circle::resultDiametr(double cur, double min)
{
    if (cur > min)
        return min;
    else 
        return cur;
}
double Circle::resultTemp(double cur, double min)
{
    if (cur > min)
        return min;
    else
        return cur;
}
double Circle::currDiam(double D, double currD)
{
    if (currD < D)
    {
        currD = D;
        return currD;
    }
    if (currD > D)
        return D;
}
 
 
int main()
{
    setlocale(LC_ALL, "rus");
    Circle cr1;
    char ch;
    fstream file;
 
    file.open("type circle.dat", ios::trunc | ios::out | ios::in | ios::binary);
    do {
        cout << endl;
        cout << "Введите данные о шлифовальном круге: " << endl << endl;
        cr1.calcCircle();
        file.write(reinterpret_cast<char*>(&cr1), sizeof(cr1));
        cout << "Продолжить ввод: (y/n)?";
        cin >> ch;
    } while (ch=='y');
    
    file.seekg(0);
    file.read(reinterpret_cast<char*>(&cr1), sizeof(cr1));
 
    while (!file.eof())
    {
        cr1.typeCircle();
        file.read(reinterpret_cast<char*>(&cr1), sizeof(cr1));
    }
    cout << endl;
 
    return 0;
}
Вот вывод программы

Должно выводится значение, в котором первый параметр 100.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.01.2021, 00:58
Помогаю со студенческими работами здесь

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

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

Перевод значение температуры по Цельсию в значение температуры по Фаренгейту
3) Создать программу, которая переводит значение температуры по Цельсию в значение температуры по фаренгейту. Введите графический обьект...

Температуры
Собрал комп. Раньше пользовался моделями готовой сборки, внимание на температуры не уделял, потомучто там стояла водянка следил тока за...

Температуры ПК
Вот мои температуры: Плата - 34 С ЦП - 71 С AUX - 126 C Графический процессор - 56 С SAMSUNG SV0411N - 32 C Seagate ST3320620A...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru