Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/12: Рейтинг темы: голосов - 12, средняя оценка - 4.50
2 / 2 / 0
Регистрация: 22.01.2016
Сообщений: 44

Ввод исходных данных из файла

02.07.2019, 23:42. Показов 2517. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написал программу, которая с помощью двух массивов точек X и Y и коэффициентов интерполяционного многочлена Лагранжа вычисляет недостающие точки
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
#include "stdafx.h"
 
float x[6] = {1.5, 1.54, 1.56, 1.60,1.63, 1.70}; 
float y[6] = {3.873,3.924,3.950,4.00,4.037,4.123}; 
 
/* Главная функция, вычисляет коэффициенты Лагранжа
x - аргумент
n - степень многочлена или число x - ов 
i - номер узла
*/
 
float L(float xp,int n,int i) {
 
float Chesl; // числитель и знаменатель 
float Znam;
 
 
Chesl = 1; Znam = 1;
 
int k;
// вычисление числителя
for (k = 0; k!= n; k++ ) {
 
if ( k == i ) continue; 
// убираем множитель x - x(i)
Chesl *= xp - x[k];
}
// вычисление знаменателя
for(k= 0; k!= n;k++) {
 
if (x[i] == x[k]) continue; 
// убираем, а то ноль в знаменателе
 
Znam *= x[i] - x[k];
}
 
 
return Chesl/Znam; 
 
}
int main(int argc, char* argv[])
{
 
// вычисляем степень полинома
int n = sizeof(y)/sizeof(float); 
 
// начальное значение 
float R = 0; 
 
// произвольная точка для проверки 
float px = 1.55;
 
 
// вычисляем значение интерполяционного многочлена
// в точке должно выйти 3.937 
for (int i = 0; i != n; i++) { 
 
R += y[i]*L(px,n,i);
}
 
printf("Результат : %f ",R); // вывод результата
return 0;
}
Работает правильно, но как сделать чтобы координаты вводились не вручную в массивы, а просто подавалось 1 или 2 файла на вход с координатами. С этим проблема...
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.07.2019, 23:42
Ответы с готовыми решениями:

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

Файл: Изменить программу таким образом чтобы ввод исходных данных осуществлялся из файла, результат также должен выводиться в файл
Помогите разобраться с этой проблемой, исходную задачу я написал, а вот как считать из файла не получается. Необходимо изменить программу...

Доделать ввод исходных данных в программу
Программа для решения нелинейных уравнений, методом дихотомии, касательных хорд, простых итераций. Ввод коэфициентов как ввод масива. То...

7
 Аватар для SomniPhobia
602 / 439 / 137
Регистрация: 22.11.2017
Сообщений: 1,407
03.07.2019, 16:53
ruse_89, привет!
Нормально?

Кликните здесь для просмотра всего текста

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
#include "stdio.h"
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
 
//float x[6] = { 1.5, 1.54, 1.56, 1.60,1.63, 1.70 };
//float y[6] = { 3.873,3.924,3.950,4.00,4.037,4.123 };
 
/* Главная функция, вычисляет коэффициенты Лагранжа
x - аргумент
n - степень многочлена или число x - ов
i - номер узла
*/
 
size_t read_points(const std::string& path, double *x, double *y);
 
float L(double *x, float xp, int n, int i);
 
int main(int argc, char* argv[])
{
    setlocale(LC_ALL, "Rus");
    const size_t len = 500u;
    double* x = new double[len];
    double* y = new double[len];
 
    // вычисляем степень полинома
    //int n = sizeof(y) / sizeof(float);
    size_t n = read_points("input.txt", x, y);
    size_t max = -1;
    if (n == max)
    {
        printf("Ошибка");
        return 1;
    }
    
    // начальное значение 
    float R = 0;
 
    // произвольная точка для проверки 
    float px = 1.55;
 
    // вычисляем значение интерполяционного многочлена
    // в точке должно выйти 3.937 
    for (int i = 0; i != n; i++)
    {
        R += y[i] * L(x, px, n, i);
    }
    delete[] x;
    delete[] y;
 
    printf("Результат: %f ", R); // вывод результата
    return 0;
}
 
size_t read_points(const std::string& path, double* x, double* y)
{
    std::ifstream fin;
    fin.open(path);
    if (!fin.is_open())
    {
        printf("Ошибка. Файл не удалось открыть");
        return -1;
    }
    std::string line_x, line_y;
    getline(fin, line_x);
    getline(fin, line_y);
    std::istringstream iss_x(line_x);
    std::istringstream iss_y(line_y);
    size_t idx_x = 0u;
    for (;iss_x.good();)
    {
        double value;
        iss_x >> value;
        x[idx_x++] = value;
    }
    size_t idx_y = 0u;
    for (; iss_y.good();)
    {
        double value;
        iss_y >> value;
        y[idx_y++] = value;
    }
    if (idx_x != idx_y)
    {
        printf("Ошибка. Файл содержит некорректные данные");
        return -1;
    }
    return idx_x;
}
 
float L(double* x, float xp, int n, int i)
{
 
    float Chesl; // числитель и знаменатель 
    float Znam;
 
 
    Chesl = 1; Znam = 1;
 
    int k;
    // вычисление числителя
    for (k = 0; k != n; k++) {
 
        if (k == i) continue;
        // убираем множитель x - x(i)
        Chesl *= xp - x[k];
    }
    // вычисление знаменателя
    for (k = 0; k != n; k++) {
 
        if (x[i] == x[k]) continue;
        // убираем, а то ноль в знаменателе
 
        Znam *= x[i] - x[k];
    }
 
 
    return Chesl / Znam;
 
}
Миниатюры
Ввод исходных данных из файла  
1
2 / 2 / 0
Регистрация: 22.01.2016
Сообщений: 44
09.07.2019, 02:16  [ТС]
Почти идеально, но хотелось бы чтобы в файле данные были размещены в 2 колонки и разделены пробелом или табуляцией...
0
 Аватар для SomniPhobia
602 / 439 / 137
Регистрация: 22.11.2017
Сообщений: 1,407
09.07.2019, 17:10
Лучший ответ Сообщение было отмечено ruse_89 как решение

Решение

ruse_89, привет!
Отлично! Я изменил код. Теперь из файла читает две колонки: первая x, вторая y. В колонках разделитель -> пробел.

Кликните здесь для просмотра всего текста

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
#include "stdio.h"
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
 
//float x[6] = { 1.5, 1.54, 1.56, 1.60,1.63, 1.70 };
//float y[6] = { 3.873,3.924,3.950,4.00,4.037,4.123 };
 
/* Главная функция, вычисляет коэффициенты Лагранжа
x - аргумент
n - степень многочлена или число x - ов
i - номер узла
*/
 
size_t read_points(const std::string& path, double* x, double* y);
 
float L(double* x, float xp, int n, int i);
 
int main(int argc, char* argv[])
{
    setlocale(LC_ALL, "Rus");
    const size_t len = 500u;
    double* x = new double[len];
    double* y = new double[len];
 
    // вычисляем степень полинома
    //int n = sizeof(y) / sizeof(float);
    size_t n = read_points("input.txt", x, y);
    size_t max = -1;
    if (n == max)
    {
        printf("Ошибка");
        return 1;
    }
 
    // начальное значение 
    float R = 0;
 
    // произвольная точка для проверки 
    float px = 1.55;
 
    // вычисляем значение интерполяционного многочлена
    // в точке должно выйти 3.937 
    for (int i = 0; i != n; i++)
    {
        R += y[i] * L(x, px, n, i);
    }
    delete[] x;
    delete[] y;
 
    printf("Результат: %f ", R); // вывод результата
    return 0;
}
 
size_t read_points(const std::string& path, double* x, double* y)
{
    std::ifstream fin;
    fin.open(path);
    if (!fin.is_open())
    {
        printf("Ошибка. Файл не удалось открыть");
        return -1;
    }
    size_t idx = 0u;
    for (;fin.good();)
    {
        std::string p;
        getline(fin, p);
        std::istringstream iss_p(p);
        iss_p >> x[idx] >> y[idx];
        ++idx;
    }
    return idx;
}
 
float L(double* x, float xp, int n, int i)
{
 
    float Chesl; // числитель и знаменатель 
    float Znam;
 
 
    Chesl = 1; Znam = 1;
 
    int k;
    // вычисление числителя
    for (k = 0; k != n; k++) {
 
        if (k == i) continue;
        // убираем множитель x - x(i)
        Chesl *= xp - x[k];
    }
    // вычисление знаменателя
    for (k = 0; k != n; k++) {
 
        if (x[i] == x[k]) continue;
        // убираем, а то ноль в знаменателе
 
        Znam *= x[i] - x[k];
    }
 
 
    return Chesl / Znam;
 
}
1
2 / 2 / 0
Регистрация: 22.01.2016
Сообщений: 44
15.07.2019, 22:18  [ТС]
Добрый вечер!
Не знаю в чём проблема, но вместо результата выдаёт "nan"
Среда разработки VisualStudio и U++ - результат один и тот же...
Ниже скрин с результатом и подаваемый файл с координатами
Миниатюры
Ввод исходных данных из файла  
Вложения
Тип файла: txt 12.txt (124 байт, 8 просмотров)
0
2 / 2 / 0
Регистрация: 22.01.2016
Сообщений: 44
19.07.2019, 02:33  [ТС]
Еще раз добрый вечер!
Разобрался с проблемой, всё работает как надо. Спасибо Вам огромное!!!
Появилось 2 вопроса, прошу помочь хотя бы советом...
1) программа перестаёт работать когда в файле большое кол-во точек, можно как-то переделать её под огромные данные? У меня есть файлы по несколько тысяч координат =)
2) в колонке Y иногда будут пустые места, надо чтобы эта самая функция Лангранжа, написанная мною ранее, ориентируясь на значение Х в этой же строке сразу высчитывала Y и записывала уже полноценные 2 столбца в новый файл. Для примера прикрепил файл с примерным видом данных
Вложения
Тип файла: txt 1.txt (61 байт, 3 просмотров)
0
 Аватар для SomniPhobia
602 / 439 / 137
Регистрация: 22.11.2017
Сообщений: 1,407
19.07.2019, 14:46
ruse_89, привет!
Рад тебя видеть!
Цитата Сообщение от ruse_89 Посмотреть сообщение
Разобрался с проблемой, всё работает как надо. Спасибо Вам огромное!!!
И в чём оказалась причина? В функции L()? Можно будет потом окончательный вариант рабочего кода мне?
Цитата Сообщение от ruse_89 Посмотреть сообщение
программа перестаёт работать когда в файле большое кол-во точек
Правильно. Смотри строку 23 в моём предыдущем коде
C++
1
const size_t len = 500u;
Нужно std::vector<T> вместо массива задействовать. Он более гибкий, удобный контейнер.
Цитата Сообщение от ruse_89 Посмотреть сообщение
в колонке Y иногда будут пустые места, надо чтобы эта самая функция Лангранжа, написанная мною ранее, ориентируясь на значение Х в этой же строке сразу высчитывала Y и записывала уже полноценные 2 столбца в новый файл
Ты дружишь с C++17? Там есть std::optional<T>. На мой взгляд, он как раз в этой ситуации к месту будет.
Умеешь C++17 в студии включать? Если нет -> смотри мой скин.

В общем, я написал тебе полностью код, который и 1) и 2) твои решает. Внеси поправку, ты писал выше про nan и скинь мне. Программа сама ищет пустые места в файле *.txt и заполняет их на основе известных точек.
Кстати, я задействовал авторскую функцию разбиения строки на подстроки split_mod() модифицированная. Спасибо тем, кто помогал 166 строку писать. Она не моя.

Код работает. Я писал и тестил в VisualStudio 2019.
Пожалуйста ->

Кликните здесь для просмотра всего текста

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
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
#include <optional>
#include <algorithm>
 
//float x[6] = { 1.5, 1.54, 1.56, 1.60,1.63, 1.70 };
//float y[6] = { 3.873,3.924,3.950,4.00,4.037,4.123 };
 
/* Главная функция, вычисляет коэффициенты Лагранжа
x - аргумент
n - степень многочлена или число x - ов
i - номер узла
*/
 
using point = std::pair<double, std::optional<double>>;
 
template<typename InIt, typename OutIt>
void split_mod
(
    InIt it_begin_s,
    InIt it_end_s,
    InIt it_begin_seps,
    InIt it_end_seps,
    OutIt it_out
);
 
void read_points(const std::string& path, std::string& seps, std::vector<point>& points);
 
double L(std::vector<point>& points, float xp, int n, int i);
 
int main(int argc, char* argv[])
{
    setlocale(LC_ALL, "Rus");
    const std::string path0("input.txt");
    std::string seps(" !?+*/\\\"'~`@#№:;$%^&()[]{}<>=_\t");
 
    std::vector<point> points;
 
    try
    {
        read_points(path0, seps, points);
    }
    catch (const char* out)
    {
        std::cout << out << "\n";
        return 1;
    }
 
    std::vector<point> points_deterministic;
    auto predicate_copy = [](const point& pp)
    {
        return !!pp.second;
    };
    std::copy_if(begin(points), end(points), std::back_inserter(points_deterministic), predicate_copy);
 
    //Вычисляем степень полинома
    size_t n = points_deterministic.size();
 
    size_t max = -1;
    if (n == max)
    {
        std::cout << "Ошибка\n";
        return 1;
    }
 
    for (auto& pp : points)
    {
        if (!!pp.second)
        {
            continue;
        }
        //Начальное значение 
        double R = 0;
        //Произвольная точка для проверки 
        double px = pp.first;
        //Вычисляем значение интерполяционного многочлена
        for (size_t i = 0; i != n; ++i)
        {
            R += *(points_deterministic[i].second) * L(points_deterministic, px, n, i);
        }
        pp.second = R;
    }
    
    std::ofstream fout;
    fout.open(path0);
    for (const auto& pp : points)
    {
        fout << pp.first << "\t" << pp.second.value_or(777) << "\n";
    }
    fout.close();
 
    return 0;
}
 
void read_points(const std::string& path, std::string& seps, std::vector<point>& points)
{
    std::ifstream fin;
    fin.open(path);
    if (!fin.is_open())
    {
        throw "Ошибка. Файл не удалось открыть";
    }
    for (; fin.good();)
    {
        std::string p;
        getline(fin, p);
        std::vector<std::string> pack;
        split_mod(begin(p), end(p), begin(seps), end(seps), std::back_inserter(pack));
        if (!pack.size() || pack.size() > 2u)
        {
            throw "Ошибка. Некорректное содержание файла";
        }
        if (pack.size() == 2u)
        {
            points.push_back({ stod(pack[0u]), stod(pack[1u]) });
        }
        else if (pack.size() == 1u)
        {
            points.push_back({ stod(pack[0u]), {} });
        }
    }
    fin.close();
}
 
double L(std::vector<point>& points, float xp, int n, int i)
{
    //Числитель и знаменатель 
    double Chesl = 1.;
    double Znam = 1.;
 
    //Вычисление числителя
    for (size_t k = 0; k != n; ++k)
    {
        if (k == i)
            continue;
        //Убираем множитель x - x(i)
        Chesl *= xp - points[k].first;
    }
    //Вычисление знаменателя
    for (size_t k = 0; k != n; ++k)
    {
        if (points[i].first == points[k].first)
            continue;
        //Убираем, а то ноль в знаменателе
        Znam *= points[i].first - points[k].first;
    }
 
    return Chesl / Znam;
}
 
template<typename InIt, typename OutIt>
void split_mod
(
    InIt it_begin_s,
    InIt it_end_s,
    InIt it_begin_seps,
    InIt it_end_seps,
    OutIt it_out
)
{
    if (!is_sorted(it_begin_seps, it_end_seps))
        sort(it_begin_seps, it_end_seps);
    using S = typename std::basic_string<std::iterator_traits<InIt>::value_type>;
    InIt it_old = it_begin_s;
    for (InIt it = it_begin_s; it != it_end_s; ++it)
        if (std::binary_search(it_begin_seps, it_end_seps, *it))
        {
            if (it_old != it)
                * it_out++ = S(it_old, it);
            it_old = it;
            std::advance(it_old, 1u);
        }
    if (it_old != it_end_s)
        * it_out++ = S(it_old, it_end_s);
}
Миниатюры
Ввод исходных данных из файла   Ввод исходных данных из файла  
1
 Аватар для SomniPhobia
602 / 439 / 137
Регистрация: 22.11.2017
Сообщений: 1,407
19.07.2019, 15:36
ruse_89, внёс несколько поправок.
Бери этот код, а не предыдущий.

Кликните здесь для просмотра всего текста

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
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
#include <optional>
#include <algorithm>
 
//float x[6] = { 1.5, 1.54, 1.56, 1.60,1.63, 1.70 };
//float y[6] = { 3.873,3.924,3.950,4.00,4.037,4.123 };
 
/* Главная функция, вычисляет коэффициенты Лагранжа
x - аргумент
n - степень многочлена или число x - ов
i - номер узла
*/
 
using point = std::pair<double, std::optional<double>>;
 
template<typename InIt, typename OutIt>
void split_mod
(
    InIt it_begin_s,
    InIt it_end_s,
    InIt it_begin_seps,
    InIt it_end_seps,
    OutIt it_out
);
 
void read_points(const std::string& path, std::string& seps, std::vector<point>& points);
 
double L(std::vector<point>& points, float xp, int n, int i);
 
int main(int argc, char* argv[])
{
    setlocale(LC_ALL, "Rus");
    const std::string path_input("input.txt");
    const std::string path_output("output.txt");
    std::string seps(" !?+*/\\\"'~`@#№:;$%^&()[]{}<>=_\t");
 
    std::vector<point> points;
 
    try
    {
        read_points(path_input, seps, points);
    }
    catch (const char* out)
    {
        std::cout << out << "\n";
        return 1;
    }
 
    std::vector<point> points_deterministic;
    auto predicate_copy = [](const point& pp)
    {
        return !!pp.second;
    };
    std::copy_if(begin(points), end(points), std::back_inserter(points_deterministic), predicate_copy);
 
    //Вычисляем степень полинома
    size_t n = points_deterministic.size();
 
    size_t max = -1;
    if (n == max)
    {
        std::cout << "Ошибка\n";
        return 1;
    }
 
    for (auto& pp : points)
    {
        if (!!pp.second)
        {
            continue;
        }
        //Начальное значение 
        double R = 0;
        //Произвольная точка для проверки 
        double px = pp.first;
        //Вычисляем значение интерполяционного многочлена
        for (size_t i = 0; i != n; ++i)
        {
            R += *(points_deterministic[i].second) * L(points_deterministic, px, n, i);
        }
        pp.second = R;
    }
    
    std::ofstream fout;
    fout.open(path_output);
    for (const auto& pp : points)
    {
        fout << pp.first << "\t" << pp.second.value_or(777) << "\n";
    }
    fout.close();
 
    return 0;
}
 
void read_points(const std::string& path, std::string& seps, std::vector<point>& points)
{
    std::ifstream fin;
    fin.open(path);
    if (!fin.is_open())
    {
        throw "Ошибка. Файл не удалось открыть";
    }
    for (; fin.good();)
    {
        std::string p;
        getline(fin, p);
        std::replace(begin(p), end(p), '.', ',');
        std::vector<std::string> pack;
        split_mod(begin(p), end(p), begin(seps), end(seps), std::back_inserter(pack));
        if (!pack.size())
        {
            continue;
        }
        if (pack.size() > 2u)
        {
            throw "Ошибка. Некорректное содержание файла";
        }
        if (pack.size() == 2u)
        {
            points.push_back({ stod(pack[0u]), stod(pack[1u]) });
        }
        else if (pack.size() == 1u)
        {
            points.push_back({ stod(pack[0u]), {} });
        }
    }
    fin.close();
}
 
double L(std::vector<point>& points, float xp, int n, int i)
{
    //Числитель и знаменатель 
    double Chesl = 1.;
    double Znam = 1.;
 
    //Вычисление числителя
    for (size_t k = 0; k != n; ++k)
    {
        if (k == i)
            continue;
        //Убираем множитель x - x(i)
        Chesl *= xp - points[k].first;
    }
    //Вычисление знаменателя
    for (size_t k = 0; k != n; ++k)
    {
        if (points[i].first == points[k].first)
            continue;
        //Убираем, а то ноль в знаменателе
        Znam *= points[i].first - points[k].first;
    }
 
    return Chesl / Znam;
}
 
template<typename InIt, typename OutIt>
void split_mod
(
    InIt it_begin_s,
    InIt it_end_s,
    InIt it_begin_seps,
    InIt it_end_seps,
    OutIt it_out
)
{
    if (!is_sorted(it_begin_seps, it_end_seps))
        sort(it_begin_seps, it_end_seps);
    using S = typename std::basic_string<std::iterator_traits<InIt>::value_type>;
    InIt it_old = it_begin_s;
    for (InIt it = it_begin_s; it != it_end_s; ++it)
        if (std::binary_search(it_begin_seps, it_end_seps, *it))
        {
            if (it_old != it)
                * it_out++ = S(it_old, it);
            it_old = it;
            std::advance(it_old, 1u);
        }
    if (it_old != it_end_s)
        * it_out++ = S(it_old, it_end_s);
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.07.2019, 15:36
Помогаю со студенческими работами здесь

Преобразование текстового файла в двоичный и чтение исходных данных из двоичного файла.
#include&lt;iostream&gt; #include&lt;fstream&gt; #include&lt;locale.h&gt; #include&lt;iomanip&gt; #include &lt;cstdlib&gt; using namespace std; struct...

Ввод структурированных данных в файл и вывод данных из этого файла на экран (сделать хранилище данных в файле)
Здравствуйте) помогите написать программу, осуществляющую ввод структурированных данных в файл и вывод данных из этого файла на экран...

Ввод данных, добавление данных, получение информации из файла по заданным критериям выборки
Все привет!!!Обращаюсь к вам за помощью...никак не получается решить задачку... Суть такая....Написать на языке программирования С++,...

Ввод данных из файла
Здравствуйте, не откажите пожалуйста в помощи, вот программа: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;iomanip&gt; ...

Ввод данных из файла
Добрый день Прошу помочь разобраться в вопросе: как нужно правильно вводить данные из файла (txt (или exel,но с ним пока вообще не...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru