Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Приклади програм. Приклад 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;
}






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.