Программирование на языке C++
Программирование на языке C++
Какие бывают файлы?
Принцип сэндвича
Обработка ошибок
Ввод данных
Вывод данных в файл
Чтение неизвестного количества данных
Обработка массивов
Обработка массивов
Обработка строк
Чтение строк из файла
Обработка строк
581.00K
Категория: ПрограммированиеПрограммирование

Л_13-Запись в файл

1. Программирование на языке C++

1
Программирование
на языке C++
• Простейшие программы
• Вычисления
• Ветвления
• Циклические алгоритмы
• Циклы по переменной
• Работа с файлами
• Процедуры
• Функции
• Рекурсия
К.Ю. Поляков, Е.А. Ерёмин, 2025
http://kpolyakov.spb.ru

2. Программирование на языке C++

2
Программирование
на языке C++
Работа с файлами
К.Ю. Поляков, Е.А. Ерёмин, 2025
http://kpolyakov.spb.ru

3. Какие бывают файлы?

Алгоритмизация и программирование, язык C++, 10 класс
3
Какие бывают файлы?
файлы
текстовые
«plain text»:
• для чтения человеком
• текст, разбитый на строки;
• из специальных символов
только символы перехода
на новую строку
двоичные
• любые символы
• рисунки, звуки, видео, …
12
123
1234
К.Ю. Поляков, Е.А. Ерёмин, 2025
http://kpolyakov.spb.ru

4. Принцип сэндвича

Алгоритмизация и программирование, язык C++, 10 класс
4
Принцип сэндвича
хлеб
начинка
хлеб
#include <fstream>
открыть файл
работа с файлом
закрыть файл
файловые потоки
ifstream Fin; // поток ввода
ofstream Fout; // поток вывода
Fin.open ( "input.txt" );
Fout.open ( "output.txt" );
// здесь работаем с файлами
Fin.close();
Fout.close();
К.Ю. Поляков, Е.А. Ерёмин, 2025
http://kpolyakov.spb.ru

5. Обработка ошибок

Алгоритмизация и программирование, язык C++, 10 класс
5
Обработка ошибок
! В случае неудачи поток нулевой!
ifstream F;
F.open ( "input.txt" );
if ( F ) if ( F.is_open() )
{
// здесь работаем с файлом
}
else
printf ( "Открыть файл не удалось." );
? Когда такое может быть?
К.Ю. Поляков, Е.А. Ерёмин, 2025
http://kpolyakov.spb.ru

6. Ввод данных

Алгоритмизация и программирование, язык C++, 10 класс
6
Ввод данных
int a, b;
ifstream Fin;
Fin.fopen ( "input.txt" );
Fin >> a >> b;
Fin.close();
Переход к началу открытого файла:
Fin.close();
Fin.open( "input.txt" );
Определение конца файла:
eof = end of file, конец файла
if ( Fin.eof() )
printf("Данные кончились");
К.Ю. Поляков, Е.А. Ерёмин, 2025
http://kpolyakov.spb.ru

7. Вывод данных в файл

Алгоритмизация и программирование, язык C++, 10 класс
7
Вывод данных в файл
int a = 1, b = 2;
ofstream Fout;
Fout.open( "output.txt" );
Fout << a << "+" << b << "=" << a + b;
Fout.close();
Режим добавления:
ofstream Fout( "output.txt",
ios_base::app );
К.Ю. Поляков, Е.А. Ерёмин, 2025
http://kpolyakov.spb.ru

8. Чтение неизвестного количества данных

Алгоритмизация и программирование, язык C++, 10 класс
8
Чтение неизвестного количества данных
Задача. В файле записано в столбик неизвестное
количество чисел. Найти их сумму.
пока не конец файла
// прочитать число из файла
// добавить его к сумме
int sum = 0, x;
while( ! Fin.eof() )
{
Если удалось
if ( Fin >> x )
прочитать число, …
sum += x;
}
int sum = 0, x;
while( Fin >> x )
sum += x;
К.Ю. Поляков, Е.А. Ерёмин, 2025
http://kpolyakov.spb.ru

9. Обработка массивов

Алгоритмизация и программирование, язык C++, 10 класс
9
Обработка массивов
Задача. В файле записано не более 100 целых чисел.
Вывести в другой текстовый файл те же числа,
отсортированные в порядке возрастания.
? В чем отличие от предыдущей задачи?
сортировки нужно удерживать все элементы в
! Для
памяти одновременно.
const int MAX = 100;
int A[MAX];
К.Ю. Поляков, Е.А. Ерёмин, 2025
http://kpolyakov.spb.ru

10. Обработка массивов

Алгоритмизация и программирование, язык C++, 10 класс
10
Обработка массивов
Ввод массива:
? Зачем?
N = 0;
while ( N < MAX && !Fin.eof() )
{
if( Fin >> A[N] ) N++;
}
Вывод результата:
Fout.open( "output.txt" );
for ( int i = 0; i < NN ; i++ )
Fout << A[i] << endl;
Fout.close();
К.Ю. Поляков, Е.А. Ерёмин, 2025
http://kpolyakov.spb.ru

11. Обработка строк

Алгоритмизация и программирование, язык C++, 10 класс
11
Обработка строк
Задача. В файле записано данные о собаках: в каждой
строчке кличка собаки, ее возраст и порода:
Мухтар 4 немецкая овчарка
Вывести в другой файл сведения о собаках, которым
меньше 5 лет.
пока не конец файла(Fin)
// прочитать строку из файла Fin
// разобрать строку – выделить возраст
если возраст < 5 то
// записать строку в файл Fout
К.Ю. Поляков, Е.А. Ерёмин, 2025
http://kpolyakov.spb.ru

12. Чтение строк из файла

Алгоритмизация и программирование, язык C++, 10 класс
12
Чтение строк из файла
Чтение одной строки:
строка
string s;
getline( Fin, s );
входной поток
! При неудаче getline вернет NULL!
Чтение всех строк:
while ( getline(Fin, s) )
{
// обработать строку s
}
К.Ю. Поляков, Е.А. Ерёмин, 2025
http://kpolyakov.spb.ru

13. Обработка строк

Алгоритмизация и программирование, язык C++, 10 класс
13
Обработка строк
Разбор строки:
// найти в строке пробел
// удалить из строки кличку с первым пробелом
// найти в строке пробел
// выделить возраст перед пробелом
// преобразовать возраст в числовой вид
string s, s1;
p+1
int p, age;
Мухтар 4 немецкая овчарка
...
p = s.find ( ' ' );
s1 = s.substr ( p + 1 );
не влияет!
age = atoi ( s1.c_str() );
до конца строки
К.Ю. Поляков, Е.А. Ерёмин, 2025
к формату строк Си
http://kpolyakov.spb.ru
English     Русский Правила