Приклади програм. Приклад 1. Дано текстовий файл, що містить декілька рядків довжиною не більше 255 символів
Приклад 1. Дано текстовий файл, що містить декілька рядків довжиною не більше 255 символів. У кожному з рядків без помилок записано єдиний вираз, який має вигляд a#b, де a, b – невід’ємні цілочислові величини, # – одна з операцій +, –, /, *. У файлі за останнім виразом переведення рядка не виконувалося. Вивести кожен із виразів і їх значення на екран і в новий текстовий файл.
Розв’язок.
#include < cstdlib> #include < conio.h> #include < iostream> #include < fstream> using namespace std; int main() { int a, b; char s[256], c; int i; cout < < " Input-file name? "; cin > > s; // Уводимо ім'я файлу cin.get(); // Зчитуємо символ нового рядка ifstream fInp; fInp.open(s); // Відкриття потоку (тільки для читання) if (! fInp) // Якщо має місце помилка відкриття { cout < < " Error of opening of a input-file " < < s; cout < < " \nPress any key to exit.\n"; getch(); return 1; } cout < < " Output-file name? "; cin > > s; // Уводимо ім'я файлу cin.get(); // Зчитуємо символ нового рядка ofstream fOut; fOut.open(s); // Відкриття потоку (тільки для запису) if (! fOut) // Якщо має місце помилка відкриття { cout < < " Error of opening of a output-file " < < s; cout < < " \nPress any key to exit.\n"; getch(); return 2; } while (fInp.peek()! = EOF) // Поки не кінець файлу { fInp.getline(s, 256); // Читаємо рядок з файлу i = 0; a = 0; while (s[i] > = '0' & & s[i] < = '9') // Формування { // першого операнда a = a * 10 + s[i] - '0'; i++; } c = s[i++]; // Знак операції b = 0; while (s[i] > = '0' & & s[i] < = '9') // Формування { // другого операнда b = b * 10 + s[i] - '0'; i++; } switch (c) // Обчислення значення виразу { case '+': a += b; break; case '-': a -= b; break; case '/': a /= b; break; case '*': a *= b; } cout < < s < < " = " < < a < < endl; // Вивід на екран fOut < < s < < " = " < < a < < endl; // Вивід у файл } fOut.close(); // Закриття вихідного потоку (файлу) fInp.close(); // Закриття вхідного потоку (файлу) cout < < " Press any key to exit.\n"; getch(); return 0; }
Приклад 2. У текстовому файлі data.txt через довільну кількість будь-яких пробільних символів записано цілі числа, причому за останнім числом додаткові символи відсутні. Переписати у файл res.txt із файлу data.txt усі числа за винятком максимальних (у припущенні, що їх може бути декілька). У кожному рядку файлу res.txt (за винятком останнього) повинно міститися по 10 чисел із розділенням їх символом табуляції.
Розв’язок.
#include < conio.h> #include < iostream> #include < fstream>
using namespace std; int main() { int v, Max; bool b = true; ifstream fInp; fInp.open(" data.txt"); // Відкриття потоку (для читання) if (! fInp) // Якщо має місце помилка відкриття { cout < < " Error of opening of a input-file"; cout < < " \nPress any key to exit.\n"; getch(); return 1; } ofstream fOut; fOut.open(" res.txt"); // Відкриття потоку (для запису) if (! fOut) // Якщо має місце помилка відкриття { cout < < " Error of opening of a output-file"; cout < < " \nPress any key to exit.\n"; getch(); return 2; } while(! fInp.eof()) // Поки не кінець потоку { // читаємо по одному fInp > > v; // числу if (b) // і шукаємо максимальне значення { b = false; Max = v; } else if (v > Max) Max = v; } fInp.close(); // Закриваємо // і знову відкриваємо вхідний потік fInp.open(" data.txt"); // Замість закриття і повторного відкриття файлу можна // встановити стан потоку в нуль функцією clear() і // зсунути покажчик поточної позиції на початок потоку // fInp.clear(); // fInp.seekg(0); int i = 0; while(! fInp.eof()) { fInp > > v; // Читаємо одне число if (v < Max) // Якщо це не максимум { if (i == 10) // Оформлюємо виведення { fOut < < endl; i = 0; } else if (i! = 0) fOut < < '\t'; fOut < < v; // Виводимо число i++; } } fOut.close(); // Закриваємо вихідний потік fInp.close(); // Закриваємо вхідний потік cout < < " Press any key to exit.\n"; getch(); return 0; }
Приклад 3. Створити текстовий файл «Заміри температури пацієнтів поліклініки». Запис про кожного пацієнта заносити в окремий рядок файлу у вигляді: прізвище (послідовність не більш ніж з 30 символів без пробільних символів), вік (ціле число), температура (дійсне число) з розділенням цих елементів даних одним символом табуляції. Занести у файл інформацію про 10 пацієнтів.
Розв’язок.
#include < iostream> #include < fstream> #include < conio.h> using namespace std; int main() { char FileName[100], Surname[31]; int Age; double Temperature; cout < < " Enter file name: "; cin > > FileName; // Уводимо ім'я файлу cin.get(); // Зчитуємо символ нового рядка ofstream fOut; // Визначаємо вихідний потік і відкри- fOut.open(FileName); // ваємо його тільки для запису if (! fOut) // Якщо має місце помилка відкриття { cout < < " Error of opening of a output-file " < < FileName; cout < < " \nPress any key to exit.\n"; getch(); return 1; } for (int i = 0; i < 10; i++) { cout < < " Enter Surname: "; cin > > Surname; cout < < " Enter Age: "; cin > > Age; cout < < " Temperature: "; cin > > Temperature; fOut < < Surname < < '\t' < < Age < < '\t' < < Temperature < < endl; // Пишемо у файл } fOut.close(); // Закриваємо потік puts(" Press any key to exit."); getch(); return 0; }
Приклад 4. Дано текстовий файл «Заміри температури пацієнтів поліклініки». Запис про кожного пацієнта занесена в окремий рядок файлу у вигляді: прізвище (послідовність не більш ніж з 30 символів без пробільних символів), вік (ціле число), температура (дійсне число) із розділенням цих елементів даних у рядку файлу довільною кількістю будь-яких пробільних символів. Вивести на екран прізвища і температуру пацієнтів, чия температура, нижче 36.0 або вище 36.9 градусів.
Розв’язок.
#include < iostream> #include < fstream> #include < conio.h> using namespace std; int main() { char FileName[100], Surname[31]; int Age; double Temperature; cout < < " Enter file name: "; cin > > FileName; // Уводимо ім'я файлу cin.get(); // Зчитуємо символ нового рядка ifstream fInp; // Визначаємо вхідний потік і відкри- fInp.open(FileName); // ваємо його тільки для читання if (! fInp) // Якщо має місце помилка відкриття { cout < < " Error of opening of a input-file " < < FileName; cout < < " \nPress any key to exit.\n"; getch(); return 1; } while (! fInp.eof()) // Поки не кінець файлу { // Читаємо з файлу fInp > > Surname > > Age > > Temperature; if (Temperature < 36.0 || Temperature > 36.9) cout < < Surname < < '\t' < < Temperature < < endl; // Якщо прочитаний рядок файлу містить if (fInp.peek() == '\n') // ознаку кінця рядка, fInp.ignore(2); // то пропускаємо 2 символи } fInp.close(); // Закриваємо потік puts(" Press any key to exit."); getch(); return 0; }
Приклад 5. Дано текстовий файл із рядками довжиною не більше 255 символів. Розвернути кожен його рядок на 180°.
Розв’язок.
#include < iostream> #include < string.h> #include < conio.h> #include < fstream> using namespace std; int main() { char FileName[100], str[256], ch; cout < < " File name? "; cin > > FileName; // Уводимо ім'я файлу fstream fInpOut; // Визначаємо двонаправлений потік // і зв'язуємо його з існуючим файлом для введення fInpOut.open(FileName, ios:: in | ios:: out); // і виводу if (! fInpOut) { cout < < " Error of opening of a file " < < FileName; cout < < " \nPress any key to exit.\n"; getch(); return 1; } int k; streampos Pos1 = 0; // Поточна позиція файлу (початкова) while (! fInpOut.eof()) { fInpOut.getline(str, 256); // Читаємо рядок // Зараз активний режим читання. Далі писати // не можна. Покажчик поточної позиції зсунувся // на strlen(str) байт або на strlen(str) + 2 байт, // якщо було зчитано і ознаку кінця рядка у файлі streampos Pos2 = fInpOut.tellg(); // Запам'ятовуємо // положення поточного покажчика k = strlen(str); for (int i = 0; i < k / 2; i++) // Розвертаємо вміст { // рядка ch = str[i]; str[i] = str[k - 1 - i]; str[k - 1 - i] = ch; } fInpOut.seekp(Pos1, ios:: beg); // Повертаємо // покажчик поточної позиції у положення, яке // він займав перед читанням. Тепер можна писати fInpOut < < str; // Пишемо у файл. Далі читати не можна Pos1 = Pos2; fInpOut.seekg(Pos1); // Встановлюємо покажчик // у положення, яке він займав по закінченні // попереднього сеансу читання. Тепер можна читати } fInpOut.close(); // Закриваємо потік puts(" Press any key to exit."); getch(); return 0; }
|