Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Изучи содержание параграфа пар.68 "Работа с файлами" и выполни задания.
- Задание 1. Ответь кратко на вопросы.
- Вопрос
- Ответ
- 1. Чем отличаются текстовые и двоичные файлы по внутреннему содержанию? Можно ли сказать, что текстовый файл – это частный случай двоичного файла?
- Текстовые - хранят только текстовые символы и символ переноса строки.
- Двоичные - хранят любые символы.
- Текстовый - частный случай двоичного, т.к. символы текста относятся ко "всем" символам
- 2. Объясните «принцип сэндвича» при работе с файлами.
- 1 этап - открытие файла, установление связи между программой и файлом
- 2 этап - работа с файлом
- 3 этап - закрытие файла и сохранение изменений, разрыв связи с программой.
- 3. Как вы думаете, почему открытый программой файл, как правило, блокируется и другие программу не могут получить к нему доступ?
- Чтобы не было конфликтующих изменений
- 4. Почему рекомендуется вручную закрывать файлы, хотя при закрытии программы они закроются автоматически? В каких ситуациях это может быть важно?
- Могут не сохранится изменения, если файл редактировался.
- 5. Что такое файловая переменная? Почему для работы с файлом используют не имя файла, а файловую переменную?
- Файловая переменная содержит блок управления файлами, это удобнее
- 6. В каком случае одна и та же файловая переменная может быть использована для работы с несколькими файлами, а в каком – нет?
- По завершении работы с одним файлом, файловую переменную можно использовать и для нескольких других.
- 7. Что такое «последовательный доступ к данным»?
- Принцип, при котором, чтобы прочитать n-й элемент, нужно прочитать и n-1 элементов до него.
- 8. Как можно начать чтение данных из файла с самого начала?
- Закрыть файл, а потом заново открыть его.
- 9. Как определить, что данные в файле закончились?
- Курсор будет указывать на конец файла, а функция F.eof() вернёт истину.
- В каких случаях надо знать максимальное количество данных в файлах, а в каких - нет?
- В случае обработки данных в статическом массиве, а если хранить данные необязательно, то и знать их количество не нужно.
- 11. В каких случаях нужно открывать одновременно несколько файлов?
- Когда программа работает сразу с несколькими файлами, например, читает данные из одного, а выводит результат в другой.
- Задание 2. Реши задачи
- Задание
- Программный код задачи
- 1. Напишите программу, которая находит среднее арифметическое всех чисел, записанных в файле в столбик, и выводит результат в другой файл.
- #define _CRT_SECURE_NO_WARNINGS
- #include <iostream>
- #include <vector>
- #include <algorithm>
- #include <set>
- #include <string>
- #include <iomanip>
- #include <fstream>
- #define pb push_back
- #define mp make_pair
- #define ti t[i]-'a'
- using namespace std;
- using ll = long long;
- int main() {
- string s1;
- ifstream in("D:\\input.txt");
- ofstream out("D:\\output.txt");
- int s = 0;
- int cnt = 0;
- while (getline(in, s1)) {
- s += stoi(s1);
- cnt++;
- }
- in.close();
- out << (double)s / cnt;
- out.close();
- return 0;
- }
- 2. Напишите программу, которая находит минимальное и максимальное среди чётных положительных чисел, записанных в файле, и выводит результат в другой файл. Учтите, что таких чисел может вообще не быть.
- #define _CRT_SECURE_NO_WARNINGS
- #include <iostream>
- #include <vector>
- #include <algorithm>
- #include <set>
- #include <string>
- #include <iomanip>
- #include <fstream>
- #include <algorithm>
- #define pb push_back
- #define mp make_pair
- #define ti t[i]-'a'
- using namespace std;
- using ll = long long;
- int main() {
- string s1;
- ifstream in("D:\\input.txt");
- ofstream out("D:\\output.txt");
- int mx = -INT32_MAX;
- int mn = INT32_MAX;
- while (getline(in, s1)) {
- if (stoi(s1) > 0 && stoi(s1) % 2 == 0) {
- mn = min(mn, stoi(s1));
- mx = max(mx, stoi(s1));
- }
- }
- in.close();
- if (mn == INT32_MAX) {
- out << "NO";
- }
- else {
- out << "max: " << mx << endl << "min: " << mn;
- }
- out.close();
- return 0;
- }
- 3. В файле в столбик записаны целые числа. Напишите программу, которая определяет длину самой длинной цепочки идущих подряд одинаковых чисел и выводит результат в другой файл.
- #define _CRT_SECURE_NO_WARNINGS
- #include <iostream>
- #include <vector>
- #include <algorithm>
- #include <set>
- #include <string>
- #include <iomanip>
- #include <fstream>
- #include <algorithm>
- #define pb push_back
- #define mp make_pair
- #define ti t[i]-'a'
- using namespace std;
- using ll = long long;
- int main() {
- string s1;
- ifstream in("D:\\input.txt");
- ofstream out("D:\\output.txt");
- int l = 1;
- int l2 = 1;
- int cur = INT32_MAX;
- while (getline(in, s1)) {
- int c = stoi(s1);
- l = max(l, l2);
- if (c == cur) l2++;
- else l2 = 1;
- cur = c;
- }
- in.close();
- out << l;
- out.close();
- return 0;
- }
- 4. В файле записаны в столбик целые числа. Отсортировать их по возрастанию последней цифры и записать в другой файл.
- #define _CRT_SECURE_NO_WARNINGS
- #include <iostream>
- #include <vector>
- #include <algorithm>
- #include <set>
- #include <string>
- #include <iomanip>
- #include <fstream>
- #include <algorithm>
- #define pb push_back
- #define mp make_pair
- #define ti t[i]-'a'
- using namespace std;
- using ll = long long;
- bool cmp(int f, int s) {
- return f % 10 < s % 10;
- }
- int main() {
- string s1;
- ifstream in("D:\\input.txt");
- ofstream out("D:\\output.txt");
- vector<int> a;
- while (getline(in, s1)) {
- a.pb(stoi(s1));
- }
- sort(a.begin(), a.end(), cmp);
- in.close();
- for (int i = 0; i < a.size(); out << a[i++] << endl);
- out.close();
- return 0;
- }
- 5. В файле записаны в столбик целые числа. Отсортировать их по возрастанию суммы цифр и записать в другой файл.
- #define _CRT_SECURE_NO_WARNINGS
- #include <iostream>
- #include <vector>
- #include <algorithm>
- #include <set>
- #include <string>
- #include <iomanip>
- #include <fstream>
- #include <algorithm>
- #define pb push_back
- #define mp make_pair
- #define ti t[i]-'a'
- using namespace std;
- using ll = long long;
- inline int sum(int n) {
- int ans = 0;
- while (n > 0) ans += n % 10, n /= 10;
- return ans;
- }
- bool cmp(int f, int s) {
- return sum(f) < sum(s);
- }
- int main() {
- string s1;
- ifstream in("D:\\input.txt");
- ofstream out("D:\\output.txt");
- vector<int> a;
- while (getline(in, s1)) {
- a.pb(stoi(s1));
- }
- sort(a.begin(), a.end(), cmp);
- in.close();
- for (int i = 0; i < a.size(); out << a[i++] << endl);
- out.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement