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

Разработать программу, которая создёт новый файл из значений исходного по некоторому правилу

05.11.2022, 18:44. Показов 4820. Ответов 42

Студворк — интернет-сервис помощи студентам
Всем привет. Это снова я, который пытается понять и освоить программирование в тех. вузе, где ничего особо не объясняется . В общем опять тема потоков. В методичке написано, что задание на потоки и что рекомендовано использовать:

istrstream
ostrstream
strstream
ifstream
ofstream
fstream
constream

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

Требуется разработать программу управления текстовым файлом.

Требования(по методичке):
1. Реализация ввода-вывода на основе файловых потоков С++: ofstream, ifstrim.
2. Имя физического файла вводится пользователем и передается в функции обработки через параметр.
3. При открытии файла выполнять контроль его существования и открытия.
Примечание. При отладке программы можете имя физического файла определить через константу.
4. Разработать функции для выполнения операций над текстовым файлом.
1) создание текстового файла средствами текстового редактора кодировки ASCII, содержащего десятичные числа по несколько чисел на строке;
2) вывод содержимого текстового файла;
3) добавление новой записи в конец файла;
4) прочитать значение числа, указав его порядковый номер в файле, и вернуть его значение;
5) определить количество чисел в файле.
5. Разработать приложение и выполнить тестирование всех функций. Приложение должно содержать диалоговый интерфейс на основе текстового меню.
6. Контроль открытия и существования файла выполнить в основной программе перед вызовом функции. Перед закрытием файла, проверить отсутствие ошибок ввода и вывода (метод good)/
7. Создать модуль и перенести в него все отлаженные функции. Исключить функции из приложения. Отладить приложение, подключив к нему модуль с функциями.
8. Разработать функции для реализации дополнительных операций, определенных вариантом и сохранить их в модуле с остальными функциями.
9. Выполнить тестирование приложения в полном объеме.

Само задание звучит так:

Создать новый файл из значений исходного, по правилу: третья часть содержимого исходного файла должна стать первой частью нового файла, а две первых исходного должны расположиться после первой в новом файле.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.11.2022, 18:44
Ответы с готовыми решениями:

Разработать программу преобразования исходного текстового файла в новый файл, которая будет выполнять задан
Из двух исходных строк, идущих друг за другом сформировать одну, если их суммарная длина менее 70 символов.

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

Сформировать из исходного файла новый файл по заданному правилу
Здравствуйте. Помогите пожалуйста с данной программой. В задаче используются только последовательные файлы. Программа должна: запрашивать...

42
1 / 1 / 0
Регистрация: 19.03.2022
Сообщений: 99
07.11.2022, 19:32  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от SmallEvil Посмотреть сообщение
Основное задание :
Сейчас постараюсь разобраться в вашем варианте решения. Не сомневаюсь, что оно гораздо лучше, просто я делал в меру своей испорченности и незнания

Добавлено через 40 минут
Цитата Сообщение от SmallEvil Посмотреть сообщение
using bostream = basic_ostream<char>;
using bistream = basic_istream<char>;
using biostream = basic_iostream<char>;
Не понимаю что это такое. Вроде похоже на открытие файла разными способами, но мы же его не открываем. Даже не возьмусь предположить что это

Цитата Сообщение от SmallEvil Посмотреть сообщение
size_t count_numbers(bistream& fin){
    size_t numbers = 0;
    double num;
    fin.seekg(0);
    while(fin>>num)
        ++numbers;
    return numbers;
}
Это видимо функция для просчета количества чисел в файле? Ток вот зачем мs туда передаём адрес указателя на поток ввода "bistream& fin" ?


Цитата Сообщение от SmallEvil Посмотреть сообщение
bistream& seek_by_number(bistream& fin, size_t pos){
    double num;
    while(pos-- && fin>>num)
        ;
    return fin;
}
Тут, судя по названию, поиск числа по номеру. Опять непонятно что за тип возвращаемого значения bistream&. То есть, коль мы разыменовываем указатель, мы работаем с самим bistream. Его мы должны возвращать? Еще непонятно как работает сам цикл
C++
1
while(pos-- && fin>>num)
А дальше идёт мейн, в котором, как ни странно, я всё понял с первого раза. По нему никаких вопросов нет.

Ещё, коль уж пока ещё Вы не запретили мне доставать Вас вопросами, то какие есть соглашения в написании кода по стилю. Вроде как на парах как-то говорили использовать camelCase для всего что только можно. Вы используйте snake_case и ваш код сильно понятнее по прочтению. Может есть какой-то канон написания? Я тоже хочу красиво писать, чтобы все понятно было)). Может литературу какую-то посоветуете? (Только вот с английским проблемы, боюсь на нём не потяну. Поэтому и не могу совершенно пользоваться справочником по языку). Приходится либо гуглить, либо спрашивать
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
07.11.2022, 20:46
Цитата Сообщение от daniil_novel Посмотреть сообщение
using bostream = basic_ostream<char>;
Это псевдонимы типов.

Цитата Сообщение от daniil_novel Посмотреть сообщение
Ток вот зачем мs туда передаём адрес указателя
Это ссылки, появились в С++. В Си такого нету. При базовом изучении программирования их тоже могут опустить из-за устаревших программ (или подхода).


Цитата Сообщение от daniil_novel Посмотреть сообщение
Тут, судя по названию, поиск числа по номеру.
Скорее пропуск N чисел. Само число мы не возвращаем, так же как и позицию.
Просто поток переданный в функцию уже будет иметь нужную позицию.

Цитата Сообщение от daniil_novel Посмотреть сообщение
то какие есть соглашения в написании кода по стилю.
У меня смешанный стиль, и к тому же еще не до конца сформирован.
В данном форуме я не обращаю особого внимания на этот аспект. Главное отступы
Да и не тестировал сильно код, с этими смещениями нужно быть внимательным
1
1 / 1 / 0
Регистрация: 19.03.2022
Сообщений: 99
07.11.2022, 21:10  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
Это псевдонимы типов.
Почитал про них. Как я понял, это такой аналог тайпдефа, ток новый, который очень удобно позволяет сократить код. Поскольку я начинал с Си, в свое время использовал тайпдефы и энумы примерно так же. Только вот что такое <char>? Я таких скобочек вообще раньше не видел. Если бы были (), то я бы понял, как приведение типа.

Цитата Сообщение от SmallEvil Посмотреть сообщение
Это ссылки, появились в С++. В Си такого нету
Про ссылки слышал, но не очень знаю как работают. Всегда использовал указатели. Изучу ещё этот вопрос

Добавлено через 1 минуту
А теперь для тех, кто может быть сюда забредет в поисках готового решения, скидываю полностью весь рабочий код

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
//Задание 1. 
//Разработка операций управления текстовым файлом
//Постановка задачи
//Дано. Файл текстовый, элементы (записи) файла целого типа.
//Результат.
//1.    Разработать функцию, которая выводит все записи файла на монитор.
//2.    Разработать функцию, которая формирует новый файл, переписывая в него только четные числа.
//3.    Отладить операции.
//
//Создать новый файл из значений исходного, по правилу:
//третья часть содержимого исходного файла должна стать первой частью нового файла,
//а две первых исходного должны расположиться после первой в новом файле.
 
 
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
int createTextFile(string fileName) {
    ofstream file(fileName); // открываем файл на ввод
    if(file.is_open()) {
        file.close();
        cout << "Открыли" << endl;
        return 0;
    } else {
        file.close();
        cout << "Открыли еще раз" << endl;
        ofstream fileTwo(fileName);
        fileTwo.close();
        return 1;
    }
}
 
//int readTextFile(string fileName) {
//  ifstream file;
//  file.open(fileName);
//  int buf = 0;
//
//  if(!file.is_open()) {
//      cout << "Ошибка открытия" << endl;
//      file.close();
//      return 0;
//  } else {
//      cout << "Файл открыт и считан:" << endl;
//      do {
//          file >> buf;
//          cout << buf << " ";
//      } while(!(file.eof()));
//
//      cout << endl;
//      file.close();
//      return 1;
//  }
//}
 
 
int readTextFile(string fileName) {
    ifstream file;
    file.open(fileName);
    int buf = 0;
 
    if(!file.is_open()) {
        cout << "Ошибка открытия" << endl;
        file.close();
        return 0;
    } 
    else {
        while(file >> buf)
            cout << buf << ' ';
    //  cout << "Файл открыт и считан:" << endl;
        cout << endl;
        file.close();
        return 1;
    }
}
 
int addNotetoEndFile(string fileName) {
    ofstream file(fileName, ios::app); // открываем файл на дозапись
    string line;
    if(file.is_open()) {
    //  cout << "Enter empty line to skip input\n" << endl;
        while(getline(cin, line) && !line.empty())
            file << line << endl;
    }
    file.close();
    system("pause");
    return 0;
}
 
int poiskFile(string fileName, unsigned int n) {
    ifstream file(fileName);
    int buf;
    if(file.is_open()) {
        int i = 1;
        do {
            file >> buf;
            if(i == n) {
                cout << "Число под номером n:" << buf << endl;
            }
            i++;
        } while(!(file.eof()));
        file.close();
        return 1;
    } else {
        file.close();
        return 0;
    }
}
 
int numInFile(string fileName) {
    ifstream fin(fileName);
    int buf = 0;
    int numCount = 0;
    if(fin.is_open()) {
        while(fin >> buf)
            ++numCount;
    }
    //cout << "Количество чисел в файле:" << numCount << endl;
    return numCount;
}
 
void clearFile(string fileName) {
    fstream clear_file(fileName, ios::out);
    clear_file.close();
}
 
//Создать новый файл из значений исходного, по правилу:
//третья часть содержимого исходного файла должна стать первой частью нового файла,
//а две первых исходного должны расположиться после первой в новом файле.
 
int personalTask(string fileName) {
    ofstream fout("OutFile.txt");
    ifstream fin(fileName);
 
    int buf = 0;
    int numCount = numInFile(fileName); // 6
    int firstTwoPart = 2 * numCount / 3;
    int lastThirdPart = numCount - numCount / 3; // 4
 
    int i = lastThirdPart; // 4
    while(fin >> buf && --i); // сместились на 4 числа
    while(fin >> buf) {
        fout << buf << ' ';
    }
 
    fin.clear(); // очищаем флаги ошибок и состояния, конец файла
    fin.seekg(0); // смещаем на начало, только для ifstream и fstream, 
    while(fin >> buf && firstTwoPart--)
        fout << buf << " ";
    return 0;
}
 
//Создать новый файл из значений исходного, по правилу:
//третья часть содержимого исходного файла должна стать первой частью нового файла,
//а две первых исходного должны расположиться после первой в новом файле.
 
int main() {
    setlocale(LC_ALL, "rus");
    string fileName = "BaseFile.txt";
 
    readTextFile(fileName);
 
    clearFile(fileName);
 
    addNotetoEndFile(fileName);
 
    readTextFile(fileName);
 
//  printf("количество чисел %d\n", numInFile(fileName));
//  personalTask(fileName);
//  readTextFile("OutFile.txt");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.11.2022, 21:10

Написать программу, которая формирует новый текстовый файл из исходного файла, удаляя из него все знаки математических операций («*», «/», «+», «–
Создать в программе Блокнот текстовый файл. Написать программу, которая формирует новый текстовый файл из исходного файла, удаляя из него...

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

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

Разработать программу, которая строит логический вектор L(n) по правилу
Помогите с программой, пожалуйста. Заданная матрица,X(n,n),n&lt;=15. Разработать программу, которая строит логический вектор L(n) по...

Разработать программу, которая строит логический вектор по заданному правилу
Заданная матрица x (n, n), n &lt;= 15. Разработать программу, которая строит логический вектор L (n) по правилу: L (i) = true, если в i-той...


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

Или воспользуйтесь поиском по форуму:
43
Ответ Создать тему
Новые блоги и статьи
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru