Структуры в качестве параметров функции
Структуру можно передать в функцию как параметр. При этом используется передача параметра по ссылке, то есть в структуру передается адрес переменной структурного типа.
# include < iostream.h >
struct Student {
int ID ;
char name [ 10 ] ;
int age ;
} ;
void input ( Student * ) ;
main ( ) {
Student List ;
input ( &List ) ;
cout << List.ID << List.name << List.age ;
return 0 ;
}
void input ( Student *L ) {
cin >> L->ID ;
cin >> L->name ;
cin >> L->age ;
}
Задания к самостоятельной работе
1. Описать структуру с именем Student, содержащую следующие поля: name, group, ses(успеваемость - массив из 5 элементов). Ввести с клавиатуры данные в массив stud1, состоящий из 10 структур типа student. Записи упорядочить по алфавиту. Вывести на экран фамилии и номера групп для всех студентов, имеющих оценки 4 и 5, если таких нет, то вывести соответствующее сообщение.
2. Описать структуру с именем Train, содержащую следующие поля: nazn(название пункта назначения), num(номер поезда), time(время отправления). Ввести с клавиатуры данные в массив rasp, состоящий из 6 структур типа Train. Записи упорядочить по номерам поездов. Вывести на экран информацию о поезде, номер которого введен с клавиатуры, если такого поезда нет, то вывести соответствующее сообщение.
3. Описать структуру с именем worker, содержащую следующие поля: name, pos(должность), year(год поступления на работу). Ввести с клавиатуры данные в массив tabl, состоящий из 10 структур типа worker. Записи упорядочить по дате поступления на работу. Вывести на экран фамилии работников, чей стаж работы превышает значение, введенное с клавиатуры, если таких нет, то вывести соответствующее сообщение.
Лабораторная работа 6
Файлы
В С++ ввод и вывод осуществляются через потоки. Поток (stream) - абстрактный канал связи, который создается в программе для обмена данными с файлами и стандартными устройствами ввода-вывода. По направлению передачи данных различают следующие потоки:
1. Входные потоки, из которых извлекаются данные (istream);
2. Выходные потоки, в которые записываются значения из программы (ostream);
3. Двунаправленный поток, который допускает и чтение, и запись.
При подключении библиотечного файла iostream.h создаются потоки cin и cout. Работа с файлами также осуществляется через потоки, при этом требуется подключить файл fstream.h. Этот файл позволяет создавать следующие потоки:
ifstream для чтения данных,
ofstream для записи данных,
fstream для чтения и записи данных.
Работу с файлами можно подразделить на 4 этапа:
1. Создание потока (объявление потоковой переменной). Переменные потока ввода из файла имеют тип ifstream, переменные потока вывода в файл имеют тип ofstream.
2. Связывание потока с файлами и открытие файла для работы в определенном режиме. Для связи файла с потоком используется функция open ( ) .
3. Обмен данными с файлом через поток: запись в поток, чтение из потока. Информация из потоков считывается с помощью операций “ >> ” - извлечь из потока. Запись информации в файл осуществляется с помощью операции “ << ” - отправить в поток.
4. Разрыв связи потока с файлом: закрытие файла и разрыв его связи с потоком. Файл закрывается с помощью функции close ( ).
Пример. Написать программу, которая считывает две переменные из файла и записывает результат в другой файл.
Для решения этой задачи необходимо создать в программе Блокнот файл Т1.txt и записать два числа, а затем запустить программу.
# include < fstream.h >
main ( ) {
ifstream in; // объявление входного потока
ofstream out; // объявление выходного потока
in.open (“ T1.txt ”); // связь потока с файлом
out.open (“T2.txt”);
int a, b, c;
in >> a >> b ; // чтение данных из файла
c = a + b ;
out << c ; // запись результата в файл
in.close ( ) ; // разрыв потока с файлом
out.close ( ) ; // разрыв потока с файлом
return 0;
}
Режимы открытия файла
Файлы могут открываться в различных режимах. Режим открытия файла определяется с помощью определенных констант.
Константа | Режим | Позиция в файле |
ate | Используется для работы с файлами произвольного доступа | По умолчанию конец файла либо любая позиция в файле |
app | Используется для добавления данных в файл | Конец файла |
nocreate | Не создает новый файл. Если файл не существует, операция открытия не выполняется | |
noreplace | Не замещать. Если файл существует, то операция его открытия не выполняется | |
in | Открытие файла для чтения | Начало файла |
out | Открытие файла для записи | Начало файла |