Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 08.02.2020
Сообщений: 17

Работа с файлами и массивами

09.02.2020, 02:39. Показов 2695. Ответов 31

Студворк — интернет-сервис помощи студентам
Доброго времени суток, коллеги!
И так, кратко изложу свою проблему. У меня имеется набор файлов с одинаковым названием( например sample_1, sample_2 и т.д., 10 файлов). В каждом файле два столбца данных, разделенных символом "Tab" (длинный пробел), т.е. данные формата 2000х2 ( на самом деле точек может быть от 1900 до 2100). Первый столбец - амплитуда, второе значение - время. Это с точки зрения оформления данных.
С точки зрения сути проблемы, у меня имеется десять синусоид с различной начальной фазой(сигнал немного шумный). Моя задача состоит в том, чтобы взять эти десять разнофазных синусоид и сделать синхронизацию по фазе, чтобы получить наглядное сравнение амплитуд на графике.

Каким вижу решение проблемы: я определяю пороговое значение, с которого должны "выбегать" мои синусоиды из начальной точки через цикл if. К примеру, это будет 0,5, тогда начальная фаза будет 30 градусов. Я знаю, что как только синусоида начнёт загибаться вниз и значение снова упадёт ниже этого, цикл прервётся - мне главное получить один гребень синусоиды, чтобы сравнить амплитуды. Я хочу записывать данные в новый файл в таком же формате, как и было, значение амплитуда + время в одной строке. На самом деле время меня не интересует, можно вместо него использовать счетчик, форма сигнала от этого не изменится.

Соответственно у меня возникают трудности в том:
- как указать программе, откуда считывать значения амплитуды, что сравнивать с пороговым значением. (надо как-то выгрузить данные из файла в массив и сравнивать значения массива, но я не знаю как это сделать)
- как сделать так, чтобы программа работала сразу с 10 файлами, а не с одним (т.е. чтобы в строчке { ostream file("sample_i.txt"); мне не пришлось менять самому номер i и 10 раз запускать программу, а чтобы программа это делала сама.

Буду признателен за любую помощь.

Мне нужно сделать так, чтобы эти сигналы выходили из одной точки по оси времени:
https://radikalno.ru/full/2020... l.png.html
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.02.2020, 02:39
Ответы с готовыми решениями:

Работа с файлами и массивами
Всем привет, помогите сделать 2 програмки: 1) Нужна програмка каторая бы открывала текс( на английском языке, допустим) и все строки...

Работа с файлами и массивами строк
Помогите пожалуйста :(:wall: Нужно написать программу, которая считывает текст из файла и записывает каждое слово в отдельный элемент...

Работа с файлами, массивами и т.д.(2 задачи)
Пропустил эту тему, теперь не могу ничего сделать... 4. Фирма имеет N магазинов. Информацию о доходе каждого магазина, за каждый месяц...

31
0 / 0 / 0
Регистрация: 08.02.2020
Сообщений: 17
10.02.2020, 00:58  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Yetty Посмотреть сообщение
nemansky, так переменную нужно в строковый тип перевести, попробуйте или цикл по char или если не получится, непосредственно переведите число в строку to_string(j);
файлы для записи тоже переделайте
попробовал через char, не получилось, сейчас попробую to_string(j)

кстати если пробовать без цикла, с одним файлом, то он вместо этой операции пересылает вот такие данные в файл

C++
1
2
3
4
5
6
7
8
9
10
fout << a << i << "\n";
 
0.02327-858992993
0.02382-858992992
0.02382-858992991
0.02147-858992990
0.00991-858992989
0.00443-858992988
0.00209-858992987
0.00112-858992986
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
10.02.2020, 01:13
Цитата Сообщение от nemansky Посмотреть сообщение
<< a << i
может разделите пробелом ? и нумерация обычно сначала идёт
Цитата Сообщение от nemansky Посмотреть сообщение
попробовал через char, не получилось
так пробовали ?
C++
1
for (char j='1'; j < '8'; j++)
Добавлено через 6 минут
Цитата Сообщение от nemansky Посмотреть сообщение
0.02327-858992993
у Вас в переменной i мусор, инициализируйте нулём:
C++
1
2
3
4
int main()
{ 
    int i=0;
    double a, eps=1e-9;
0
0 / 0 / 0
Регистрация: 08.02.2020
Сообщений: 17
10.02.2020, 01:16  [ТС]
Цитата Сообщение от Yetty Посмотреть сообщение
может разделите пробелом ? и нумерация обычно сначала идёт
Сообщение от nemansky
попробовал через char, не получилось
так пробовали ?
C++Выделить код
1
for (char j='1'; j < '8'; j++)
Разделил пробелом, всё заработало)
Пробовал и так, и без ' ', видимо надо делать обычный цикл for(int j=1; j<8; j++) и в начале цикла переводить j в строковый тип

Добавлено через 1 минуту
Цитата Сообщение от Yetty Посмотреть сообщение
у Вас в переменной i мусор, инициализируйте нулём:
я всё сделал, вот выходные данные

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
0 0.02327
1 0.02382
2 0.02382
3 0.02147
4 0.00991
5 0.00443
6 0.00209
7 0.00112
8 0.000610828
9 0.000605716
10 0.000630087
11 0.000782866
12 0.000691435
13 0.000840802
14 0.000891057
15 0.000887186
16 0.00107
17 0.00102
18 0.00129
19 0.00128
20 0.00132
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
10.02.2020, 01:24
Цитата Сообщение от nemansky Посмотреть сообщение
в начале цикла переводить j в строковый тип
не в начале, а прямо при суммировании:
C++
1
2
ifstream fin("scope"+to_string(j)+".txt");
ofstream fout("scope"+to_string(j)+"new.txt");
вопрос решён ?
0
0 / 0 / 0
Регистрация: 08.02.2020
Сообщений: 17
10.02.2020, 01:28  [ТС]
Цитата Сообщение от Yetty Посмотреть сообщение
вопрос решён ?
вот что он выдаёт, если написать так
Кликните здесь для просмотра всего текста
1>------ Построение начато: проект: обработка сигнала, Конфигурация: Debug Win32 ------
1> обработка сигнала.cpp
1>c:\users\acer\desktop\обработка сигнала\обработка сигнала\обработка сигнала.cpp(13): error C2668: std::to_string: неоднозначный вызов перегруженной функции
1> d:\microsoft office 2010\mvs2010\vc\include\string(688): может быть "std::string std::to_string(long double)"
1> d:\microsoft office 2010\mvs2010\vc\include\string(680): или "std::string std::to_string(_ULonglong)"
1> d:\microsoft office 2010\mvs2010\vc\include\string(672): или "std::string std::to_string(_Longlong)"
1> при попытке сопоставить список аргументов "(int)"
1>c:\users\acer\desktop\обработка сигнала\обработка сигнала\обработка сигнала.cpp(15): error C2668: std::to_string: неоднозначный вызов перегруженной функции
1> d:\microsoft office 2010\mvs2010\vc\include\string(688): может быть "std::string std::to_string(long double)"
1> d:\microsoft office 2010\mvs2010\vc\include\string(680): или "std::string std::to_string(_ULonglong)"
1> d:\microsoft office 2010\mvs2010\vc\include\string(672): или "std::string std::to_string(_Longlong)"
1> при попытке сопоставить список аргументов "(int)"
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========


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
int _tmain(int argc, _TCHAR* argv[])
{ double a; double eps = 0.000000001; int i = 1;
 
for(int j=1; j<8; j++)
{
ifstream fin("scope"+to_string(j)+".txt");
fin.imbue(locale("rus_rus.1251"));
    ofstream fout("scopenew"+to_string(j)+".txt");
    if (fin.is_open()) // проверка файла на удачное открытие
    {
        while (fin >> a)
        {
            if (a>0.0006+eps)
        {   fout << i << " "  << a << "\n"; 
            i++;
            }}
     }
     else cout << "Unable to open file\n";      
    fin.close();
    fout.close();
    i = 0;
}
 system("pause");       
        return 0;
}
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
10.02.2020, 01:39
nemansky, сложно сказать, что там у Вас не работает. вот набросал код, всё работает, сравнивайте:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    string a;
    for (int j=1; j < 8; j++)
    {
        a="abc"+to_string(j)+".txt";
        cout << a << "\n";
    } 
    
system("pause");
return 0;
}
0
0 / 0 / 0
Регистрация: 08.02.2020
Сообщений: 17
10.02.2020, 02:02  [ТС]
Цитата Сообщение от Yetty Посмотреть сообщение
nemansky, сложно сказать, что там у Вас не работает. вот набросал код, всё работает, сравнивайте:
Ладно, буду разбираться дальше сам. Спасибо Вам огромное!!!

Добавлено через 19 минут
Цитата Сообщение от Yetty Посмотреть сообщение
сравнивайте

C++
1
2
3
ifstream fin("scope"+to_string((unsigned long long)j)+".txt");
fin.imbue(locale("rus_rus.1251"));
    ofstream fout("scopenew"+to_string((unsigned long long)j)+".txt");
Вот так у меня всё заработало)

Вопрос решён)
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
10.02.2020, 02:11
nemansky, да, прочитал ошибку ещё разок - компилятор не понимает для какого типа переменной вызывать
функцию. мне это не совсем понятно, потому что j объявлена как int. можете сказать, а так будет работать:
to_string((int)j)
просто интересно
0
0 / 0 / 0
Регистрация: 08.02.2020
Сообщений: 17
10.02.2020, 02:12  [ТС]
Цитата Сообщение от Yetty Посмотреть сообщение
nemansky, да, прочитал ошибку ещё разок - компилятор не понимает для какого типа переменной вызывать
функцию. мне это не совсем понятно, потому что j объявлена как int. можете сказать, а так будет работать:
to_string((int)j)
просто интересно
Нет, так работать не будет (
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
10.02.2020, 02:16
а так ?
C++
1
2
for (unsigned j=1; j < 8; j++)
ifstream fin("scope"+to_string(j)+".txt");
0
0 / 0 / 0
Регистрация: 08.02.2020
Сообщений: 17
10.02.2020, 02:27  [ТС]
Цитата Сообщение от Yetty Посмотреть сообщение
а так ?
так тоже не работает
0
Модератор
 Аватар для long399
2889 / 1858 / 933
Регистрация: 16.10.2013
Сообщений: 5,257
Записей в блоге: 15
10.02.2020, 07:52
По поводу неработающей to_string(): видимо это связано с мелкомягким компилятором, ибо g++ скомпилировал все варианты:

C++
1
2
for (char j=1; j < 8; j++)
        std::cout << std::to_string(j) << std::endl;
C++
1
2
for (unsigned j=1; j < 8; j++)
        std::cout << std::to_string(j) << std::endl;
C++
1
2
for (int j=1; j < 8; j++)
        std::cout << std::to_string(j) << std::endl;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.02.2020, 07:52

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

Строки, работа с файлами и массивами строк
Требуются срочная помощь :swoon: зачет через 2 часа... Не хватает 2х лаб... помогите люди добрые кто чем может :sorry: Лаба...

Работа с файлами и массивами
Помогите, пожалуйста, нужно, чтобы прога прочитала таблицу из блокнота ,отсортировала по какому-либо столбцу и вывела её на экран. Пример...

Работа с файлами и массивами
Задача состоит в том чтоб считать 30 файлов в каждом файле 24 значения. Посчитать среднее значение каждого файла и записать в МЕМО. А затем...

Работа с файлами и массивами
Дан двумерный массив размером n*m. 1. Заменить минимальный по модулю элемент каждого столбца на противоположный 2. Вставить после...


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

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru