Ifstream in_stream2; // Поток для подсчета символов

// Создание файла

out_stream.open("Integers.txt");

for (count = 1; count <= 5; count++)

out_stream << number++ << ' ';

out_stream.close();

// Подсчет количества целых чисел в файле

in_stream1.open("Integers.txt");

count = 0;

in_stream1 >> number;

while (!in_stream1.eof())

{

50

count++;

in_stream1 >> number;

}

in_stream1.close();

cout << "В файле хранится " << count << " целых чисел,\n";

// Подсчет количества символов, не являющихся разделителями

in_stream2.open("Integers.txt");

count = 0;

in_stream2 >> character;

while (!in_stream2.eof())

{

count++;

in_stream2 >> character;

}

in_stream2.close();

cout << "представленных с помощью " << count << " символов.\n";

return 0;

}

Программа 7.1.

Программа 7.1 выведет на экран следующие сообщения:

В файле хранится 5 целых чисел,

Представленных с помощью 10 символов.

При подсчете символов в последней части программы 7.1 снова обратите вни-

мание на то, что, в отличие от функции "get(...)", оператор ">>" игнорирует в файле

Пробелы (которые разделяют пять целых чисел).

Сводка результатов

В лекции рассмотрены способы работы с текстовыми файлами с помощью по-

токов ввода/вывода. "Низкоуровневый" ввод/вывод выполняется с помощью функций

"get(...)" и "put(...)", а "высокоуровневый" ввод/вывод значений разных типов – с

помощью потоковых операторов ">>" и "<<".

Упражнения

Упражнение 1

Напишите программу, печатающую на экране содержимое собственного ис-

ходного файла на Си++.

Упражнение 2

Разработайте программу, которая (1) начинается с оператора вывода тестового

сообщения:

cout << "Проверка: " << 16/2 << " = " << 4*2 << ".\n\n";

и затем (2) копирует собственный исходный файл на Си++ в файл

"WithoutComments.cpp" и на экран, при этом пропуская все комментарии между

маркерами "/*... */" (и маркеры комментариев тоже).

51

Получившийся файл "WithoutComments.cpp" должен компилироваться и ра-

Ботать точно так же, как и исходная программа.

Подсказки: (1) вам может пригодиться функция " putback() "; (2) для отслежива-

Ния состояния, находитесь ли вы внутри комментария или нет, можете применить

логический "флаг".

Упражнение 3

Напишите программу, которая подсчитывает и выводит на экран количество

Символов (включая пробелы) в собственном исходном файле.

Упражнение 4

Без использования массива (массивы будут рассмотрены в 6-й лекции) напи-

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

Порядке.

Подсказки: (1) Для начальной части этой программы может пригодиться програм-

Ма из упражнения 3. (2) Будьте внимательны и не используйте поток ввода после

Ошибки – вместо этого работайте с новым потоком.

Примечание: не беспокойтесь, если перед началом печати происходит небольшая

Задержка – открытие и закрытие файлов требует некоторого времени.

Упражнение 5

Что выведет на экран следующая программа?

#include <iostream.h>

#include <fstream.h>

Int main()

{

char character;

int integer;

ofstream out_stream;

ifstream in_stream;

// Создание текстового файла и запись в него двух целых чисел

out_stream.open("Integers.txt");

out_stream << 123 << ' ' << 456;

out_stream.close();

// Попытка чтения из только что созданного файла

// "Integers.txt" символа, затем целого числа,

// затем снова символа, затем опять целого числа.

in_stream.open("Integers.txt");

in_stream >> character >> integer;

cout << "символ: '" << character << "'\n";

cout << "целое число: " << integer << "\n";

in_stream >> character >> integer;

cout << "символ: '" << character << "'\n";

cout << "целое число: " << integer << "\n";

in_stream.close();

return 0;

}

52

ЛЕКЦИЯ 5. Операторы ветвления и циклы

Логические значения, выражения и функции

В этой лекции подробно рассматриваются операторы ветвления ("if" и

"switch") и операторы циклов "for" и "while". Для применения всех этих операто-

Ров необходимо хорошо знать, что такое логические выражения и как они вычисля-

Ются.

Язык Си++ унаследовал от языка Си соглашение, согласно которому целое

значение 0 считается логическим "false" (ложное значение), а ненулевое целое – ло-

гическим "true" (истинным значением). Но выражения вроде

условие1 == 1

Или

условие2 == 0

Не слишком удобны при чтении теста программ человеком. Было бы лучше записы-

вать логические выражения в интуитивно понятном виде:

условие1 == true

и

условие2 == false

Поэтому в Си++ был добавлен специальный логический тип "bool". Перемен-

ные типа "bool" могут принимать значения "true" и "false", которые при необхо-

Димости автоматически преобразуются в выражениях в значения 1 и 0.

Тип данных "bool" можно использовать в программах точно так же, как и ти-

пы "int", "char" и др. (например, для описания переменных или для создания функ-

ций, возвращающих значения типа "bool").

Программа 1.1 приведена в качестве примера использования типа данных

"bool". Она запрашивает с клавиатуры возраст кандидата, сдававшего некий тест, и

Полученную кандидатом оценку в баллах. Затем программа оценивает результат вы-

Полнения теста по шкале, зависящей от возраста кандидата и делает вывод о том, сдан

Тест или нет. Для кандидатов до 14 лет порог сдачи теста составляет 50 баллов, для 15

Или 16 лет – 55 баллов, старше 16-ти лет – 60 баллов.

#include <iostream.h>

bool acceptable(int age, int score);

Int main()

{

int candidate_age, candidate_score;

cout << "Введите возраст кандидата: ";

cin >> candidate_age;

cout << "Введите результат тестирования: ";

cin >> candidate_score;

If (acceptable(candidate_age, candidate_score))

cout << "Этот кандидат сдал тест успешно.\n";

Else

cout << "Этот кандидат тест не прошел.\n";

53

return 0;

}

// Функция оценки результата тестирования: тест сдан/не сдан

Bool acceptable(int age, int score)

{

if (age <= 14 && score >= 50)

return true;

else if (age <= 16 && score >= 55)

return true;

else if (score >= 60)

return true;

Else

return false;

}

Программа 1.1.

2. Циклы "for", "while" и "do...while"

Циклы "for" впервые встречались во 2-й лекции, цикл "while" упоминался в

4-й лекции. Любой цикл "for" можно переписать в виде цикла "while" и наоборот.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow