МегаПредмет

ПОЗНАВАТЕЛЬНОЕ

Сила воли ведет к действию, а позитивные действия формируют позитивное отношение


Как определить диапазон голоса - ваш вокал


Игровые автоматы с быстрым выводом


Как цель узнает о ваших желаниях прежде, чем вы начнете действовать. Как компании прогнозируют привычки и манипулируют ими


Целительная привычка


Как самому избавиться от обидчивости


Противоречивые взгляды на качества, присущие мужчинам


Тренинг уверенности в себе


Вкуснейший "Салат из свеклы с чесноком"


Натюрморт и его изобразительные возможности


Применение, как принимать мумие? Мумие для волос, лица, при переломах, при кровотечении и т.д.


Как научиться брать на себя ответственность


Зачем нужны границы в отношениях с детьми?


Световозвращающие элементы на детской одежде


Как победить свой возраст? Восемь уникальных способов, которые помогут достичь долголетия


Как слышать голос Бога


Классификация ожирения по ИМТ (ВОЗ)


Глава 3. Завет мужчины с женщиной


Оси и плоскости тела человека


Оси и плоскости тела человека - Тело человека состоит из определенных топографических частей и участков, в которых расположены органы, мышцы, сосуды, нервы и т.д.


Отёска стен и прирубка косяков Отёска стен и прирубка косяков - Когда на доме не достаёт окон и дверей, красивое высокое крыльцо ещё только в воображении, приходится подниматься с улицы в дом по трапу.


Дифференциальные уравнения второго порядка (модель рынка с прогнозируемыми ценами) Дифференциальные уравнения второго порядка (модель рынка с прогнозируемыми ценами) - В простых моделях рынка спрос и предложение обычно полагают зависящими только от текущей цены на товар.

Пример 17.13. Использование функции ferror().-Работает





#include <stdio.h>

#include <iostream.h>

#include <conio.h>

 

int main( )

{

int count, total = 0;

char buffer[100];

FILE *fp;

 

if( (fp = fopen( "prim17-12.txt", "r" )) == NULL )

return 0;

while( !feof( fp ) )

{

count = fread( buffer, sizeof( char ), 100, fp );

if( ferror( fp ) ) {

perror( "Read error" );

break;

}

total += count;

}

printf( "Number of bytes read = %d\n", total );

fclose( fp );

 

cout << "\nНажмите любую клавишу..." ;

getch();

return 0;

}

 

 

В языке С имеются также функции remove() и rename() для удаления и переименования файлов. Их синтаксис следующий:

 

int remove( const char *path );

 

где *path - путь с именем удаляемого файла. Данная функция определена в библиотеках stdio.h и io.h, возвращает нуль при успешном удалении и -1 в противном случае.

 

int rename( const char *oldname, const char *newname );

 

где *oldname - имя файла для переименования; *newname - новое имя файла. Данная функция определена в библиотеках stdio.h и io.h, возвращает нуль при успешном удалении и не нуль в противном случае.

 

Существует два способа доступа к элементам двоичных файлов: последовательный и произвольный.

 

2.2. Последовательный доступ к элементам двоичных файлов

Последовательный доступ к элементам файла особенно эффективен, если нужно перебрать все данные, хранящиеся в нем. Кроме того, если файл открыт для записи, но еще не содержит данных (т.е. пустой), то заполнение его лишь в последовательном режиме.

Пример 17.14. Записать 100 целых, случайно выбранных чисел, в двоичный файл.-Работает

#include <iostream>

#include <iomanip>

#include <stdlib.h>

#include <time.h>

#include <conio.h>

#include <stdio.h>

#include <string.h>

 

using namespace std;

 

int main()

{

int a, b;

srand(time(NULL));

//запрашиваем нижнюю и верхнюю границы рандомизации

cout << "Enter a: ";

cin >> a;

cout << "Enter b: ";

cin >> b;

 

FILE *f_out;

int number;

 

f_out = fopen ( "prim17-14.txt","wb");

if (! f_out) { puts("Нельзя создать файл !\n");

exit(1);

}

for (int i = 0; i < 100; i++)

{ number = a + rand() % (b - a + 1);

cout << setw(5) << number;

fwrite(&number, sizeof(int), 1, f_out);

}

fclose(f_out);

 

cout << "\nНажмите любую клавишу..." ;

getch();

return 0;

}

Все использованные в программе функции встречались ранее, кроме функции fwrite(), производящей запись данных в поток. Прототип ее находится в заголовочном файле stdio.h. Синтаксическое описание функции имеет вид:

size_t fwrite (const void *ptr, size_t site, size_t n, FILE *stream);

Параметры функции:

const void *ptr - указатель на исходные данные, записываемые в файл;

size_t size - размер в байтах одного элемента данных;

size_t n - число записываемых в файл элементов данных, размером size байтов каждый;

FILE *stream - указатель на файловый поток, открытый в двоичном режиме.

 

Поскольку функция fwrite() имеет в качестве одного из своих аргументов количество записываемых элементов, можно применять ее и для записи в файл сразу целого массива, который к моменту записи в файл должен быть сформирован и заполнен данными.

Пример 17.15. Записать в двоичный файл массив целых, случайно выбранных чисел. -Работает

#include <iostream>

#include <iomanip>

#include <stdlib.h>

#include <time.h>

#include <conio.h>

#include <stdio.h>

#include <string.h>

 

using namespace std;

 

int main()

{

int a, b;

srand(time(NULL));

//запрашиваем нижнюю и верхнюю границы рандомизации

cout << "Enter a: ";

cin >> a;

cout << "Enter b: ";

cin >> b;

 

FILE *f_out;

int number[20];

 

f_out = fopen ( "prim17-15.txt","wb");

if (! f_out) { puts("Нельзя создать файл !\n");

exit(1);

}

for (int i = 0; i < 20; i++)

{ number[i] = a + rand() % (b - a + 1);

cout << setw(5) << number[i];}

 

fwrite(&number, sizeof(int), 20, f_out);

fclose(f_out);

 

cout << "\nНажмите любую клавишу..." ;

getch();

return 0;

 

}

 

Это - оптимальный способ доступа с точки зрения скорости записи информации на диск.

Пример 17.16. Определить максимальное из целых чисел, записанных в двоичном файле и его порядковый номер..-Работает

#include <iostream>

#include <iomanip>

#include <stdlib.h>

#include <time.h>

#include <conio.h>

#include <stdio.h>

#include <string.h>

#include <io.h>

 

using namespace std;

 

int main()

{ FILE *f_inp;

int cnt_max; // номер максимального элемента

int handle; // дескриптор файла

float value, max;

f_inp = fopen ("prim17-16.txt","rb"); // чтение в двоичном режиме

if (! f_inp) { puts( "Нельзя открыть файл !\n" );

exit(1);

}

handle = fileno(f_inp); // преобразовать открытый файловый

// поток в дескриптор файла

fread(&max, sizeof(float), 1, f_inp);

cnt_max = 0;

for (int i = 0; i<filelength(handle); i++)

{ fread(&value, sizeof(float), 1, f_inp);

if (value>max) { max = value;

cnt_max = i+1;

}

}

printf("Max = %8.3f", "number = %4d",max,cnt_max);

fclose(f_inp);

 

cout << "\nНажмите любую клавишу..." ;

getch();

return 0;

}

Функция filelength(f_inp) в качестве аргумента принимает дескриптор файла, открытого функцией fopen(), и возвращает размер этого файла. Для получения дескриптора, используемого для идентификации файла, служит функция преобразования файлового потока в дескриптор fileno(). Аргументом функции fileno(FILE *stream) является файловый поток. Отрицательное значение дескриптора служит признаком ошибки.

Заметим, что, как и в массивах, первый элемент, находящийся в файле, имеет номер 0, второй - 1 и т.д.

 

Функция чтения значений с диска fread() имеет тот же синтаксис, что и функция записи fwrite(), только первым аргументом здесь является адрес приемника, в который эта функция должна скопировать байты с диска. При использовании этой функции следует убедиться в том, что размер приемника достаточен для копирования количества байтов. Прототип функции fread() находится в заголовочном файле stdio.h.

 

Функция fread() может загрузить больше одного значения с диска в один прием. Тогда в качестве приемника должен выступать массив элементов соответствующего типа и достаточного размера. Этот массив может быть статическим, если заранее известна длина файла, или динамическим, если размер файла определяется в процессе выполнения программы.

float arr_f[100];

. . .

fread (&arr_f, sizeof(float), 100, f_inp);

 

Это самый быстрый способ загрузки из файла большого количества чисел.

 

2.3. Организация произвольного доступа к элементам
двоичных файлов

Организация произвольного доступа к компонентам файла позволяет считывать значения из любой позиции в файле, а также записывать новую информацию в любое место в файле. Но к файлам с произвольным доступом предъявляется одно жесткое требование: их компоненты должны иметь одинаковую длину. Двоичные файлы позволяют обеспечить удовлетворение этого требования. О том, чтобы данные, которые будут находиться в файле произвольного доступа, имели одинаковый размер, следует позаботиться в момент создания файла.

Еще раз напомним о том, что первичная запись в файл возможна только в режиме последовательного доступа.

Для организации произвольного доступа к элементам файла можно осуществить с помощью функции fseek(), прототип которой описан в заголовочном файле stdio.h. Синтаксическое описание функции:

 

int fseek (FILE * stream, long offset, int whence);

 

Функция fseek() перемещает внутренний указатель файлового потока, изменяя место в файле, с которого начинается следующая операция чтения или записи. В случае успешного завершения функция возвращает 0, в случае ошибки -ненулевое значение.

Параметры функции:

FILE *stream - yказатель на открытый файловый поток, аналогичной возвращаемому функцией fopen();

long offset - число байтов, на которое нужно переместить файловый указатель в направлении, указанном параметром whence. Для перемещения файлового указателя в обратном направлении (в сторону начала файла), следует устанавливать ofset равным отрицательному значению;

int whence - указывает положение точки отсчета файлового указателя, от которой будет происходить его перемещение. Значения аргумента whence представлены в табл. 17.4.

Таблица 17.4

Значения аргумента whence

Значение Описание
SEEK_SET Перемещение файлового указателя происходит относительно начала файла
SEEK_END Перемещение файлового указателя происходит относительно конца файла
SEEK_CUR Перемещение файлового указателя происходит относительно текущей позиции файлового указателя

 

При использовании функции fseek() следует соблюдать осторожность, так как из-за ограничений DOS попадание за пределы файла чаще всего не приводит к генерации ошибки, поэтому программисту самому следует принимать меры для предотвращения обращения к диску за пределами известных границ файла.

При организации произвольного доступа используется функция ftell(), осуществляющая навигацию внутри файла. Прототип функции описан в stdio.h. Данная функция возвращает внутренний указатель файлового потока, равный смещению в байтах от начала двоичного файла до байта, с которого начинается следующая операция ввода/вывода. Это значение можно передать функции fseek(), или использовать каким-либо другим образом.

 

Синтаксическое описание функции:

long int ftell(FILE *stream).

 

Единственным параметром функции является указатель на открытый файловый поток.

 

Следующие операторы демонстрируют возможности функции fseek():

fseek(f, sizeof(t), SEEK_CUR); - перемещает файловый указатель с текущей позиции на следующую;

fseek(f, -sizeof(t), SEEK_CUR); - на предыдущую позицию;

fseek(f, 0,SEEK_END); - на конец файла.

Пример 17.17. Прочитать из файла, содержащего целые числа, его 25-й элемент. -Работает

#include <stdio.h>

#include <stdlib.h>

#include <iostream>

#include <conio.h>

#include <iomanip>

 

using namespace std;

 

int main()

 

{ FILE *inp_f;

int value;

inp_f= fopen("prim17-14.txt", "rb");

if (! inp_f) { puts ("Невозможно открыть файл\n");

exit(1);

}

fseek(inp_f, 25*sizeof(int), SEEK_SET);

fread(&value, sizeof(int), 1, inp_f);

printf( "Прочитанное число = %d\n", value);

fclose(inp_f);

 

cout << "\nНажмите любую клавишу..." ;

getch();

return 0;

}

 

В любом случае при работе с двоичными файлами не следует забывать добавлять букву "b" при указании режима доступа функции fopen(), но нужно быть особенно внимательным, если предполагается, что будет осуществляться произвольный доступ к компонентам данного файла.

Пример 17.18. Записать ноль на место максимального значения в файле Test.dat.-Работает

#include <stdio.h>

#include <stdlib.h>

#include <io.h>

#include <iostream>

#include <conio.h>

#include <iomanip>

using namespace std;

 

int main ()

{ FILE *f_test;

int i_max; // номер максимального элемента

int handle; // дескриптор файла

int value, max,zero;

f_test = fopen("prim17-14.txt","r+b");

if (! f_test) { puts( "Нельзя открыть файл !\n" );

exit(1);

}

handle = fileno(f_test); // преобразовать открытый файловый

// поток в дескриптор файла

fread(&max, sizeof(int), 1, f_test);

i_max = 0;

for (int i = 0; i<filelength(handle); i++)

{ fread(&value, sizeof(int), 1, f_test);

if (value>max) { max = value;

i_max = i;

}

}

fseek(f_test, i_max*sizeof(int), SEEK_SET);

fwrite(&zero, sizeof(int), 1, f_test);

fclose(f_test);

 

cout << "\nНажмите любую клавишу..." ;

getch();

return 0;

}

 

Для определения конца файлового потока используется функция feof(), прототип которой описан в заголовочном файле stdio.h. Функция возвращает истину (1), если внутренний указатель заданного файлового потока находится за последним байтом файла и ложь (0), если внутренний указатель файла находится не в конце файла.

Пример 17.19. Определить количество отрицательных элементов в файле prim17-14.txt.-Работает

#include <stdio.h>

#include <stdlib.h>

#include <iostream>

#include <conio.h>

 

using namespace std;

 

int main ()

{ FILE *f_n;

int quantity = 0; // количество отрицательных элементов

int value;

f_n = fopen("prim17-14.txt","rb");

if (! f_n) { puts( "Нельзя открыть файл !\n" );

exit(1);

}

while(! feof(f_n))

{ fread(&value, sizeof(int), 1, f_n);

if (value<0) quantity++;

}

printf("Количество отрицательных элементов = %d", quantity);

fclose(f_n);

 

cout << "\nНажмите любую клавишу..." ;

getch();

return 0;

}

 

Замечание: необходимо предварительно с помощью программы примера 17.14 сформировать файл prim17-14.txt, в котором должны быть отрицательные числа. Для этого в программе примера 17.14, например, можно задать нижнюю и верхнюю границы рандомизации: a = -50; b = 50.

 

Запись значения при произвольном доступе буферизована, т.е. выполнение функции fwrite() не гарантирует моментальной записи на диск, поэтому здесь также актуальными остаются процедуры флэширования данных и закрытия файла.

 

2. ЗАДАНИЕ

2.1. Изучить теоретические сведения.

2.1.1. Изучить средства языка С++ для работы с файлами.

2.2. Разобрать и выполнить примеры 17.1 – 17.4, 17.6 – 17.19 к данной лабораторной работе.

2.2.1. Особое внимание обратите на примеры 17.7, 17.11, 17.12. Материал этих примеров пригодиться при написании программ заданий 2.4.2, 2.5.1. и 2.5.2.

2.3. Написать и отладить три программы на языке С++ для заданий 2.4.2, 2.5.1. и 2.5.2.

Замечание: для ускорения выполнения заданий 2.4.2, 2.5.1. и 2.5.2 рекомендуется воспользоваться результатами лабораторной работы № 14. Программирова­ние с использованием струк­тур, выполненной в предыдущем семестре.

2.4. Задания для выполнения на занятиях

 

2.4.1. Задание 1.

Найти и устранить ошибку в примере 17.5. Добиться работоспособности программы примера 17.5.

 

2.4.2. Задание 2. Вычисление с использованием структур

 

Создать массив структур, содержащий информацию согласно варианту индивидуального задания. Структуры (исходную и сформированную по запросу) сохранить в отдельных файлах. Выполнить задание и вывести на экран полученный результат.

Замечание: для ускорения выполнения задания рекомендуется воспользоваться результатами лабораторной работы № 14. Программирова­ние с использованием струк­тур, выполненной в предыдущем семестре.

 

2.4.2.1. Условие задания

 

Таблица 17.5

Структура данных и задание
Структура "Автомобиль" имеет поля: марка; серийный номер; регистрационный номер; год выпуска. Вывести все сведения об автомобилях, имеющих дату выше заданной (новые автомобили).
Структура "Сотрудник" имеет поля: фамилия, имя, отчество; должность; год рождения; заработная плата. Вывести все сведения о сотрудниках, имеющих заработную плату выше средней.
Структура "Государство" имеет поля: название; столица; численность населения; занимаемая площадь. Вывести все сведения о государствах, в столицах которых проживает более 5 млн жителей.
Структура "Человек" имеет поля: фамилия, имя, отчество; домашний адрес; номер телефона; возраст. Вывести все сведения о людях, имеющих возраст больше заданного.
Структура "Человек" имеет поля: фамилия, имя, отчество; год рождения; рост; вес. Вывести все сведения о людях, имеющих рост выше среднего.
Структура "Школьник" имеет поля: фамилия, имя, отчество; класс; номер телефона; оценки по предметам (математика, физика, русский язык, литература). Вывести все сведения о школьниках, имеющих 2 хотя бы по одному предмету.
Структура "Студент" имеет поля: фамилия, имя, отчество; домашний адрес; группа; оценки по 5 предмета сессии. Вывести все сведения о студентах имеющих 2 хотя бы по одному предмету.
Структура "Покупатель" имеет поля: фамилия, имя, отчество; домашний адрес; номер телефона; номер кредитной карточки. Вывести все сведения об покупателе с заданной фамилией.
Структура "Пациент" имеет поля: фамилия, имя, отчество; домашний адрес; номер медицинской карты; номер страхового полиса, дата рождения. Вывести все сведения о пациентах, имеющих дату выше заданной.
Структура "Информация" имеет поля: носитель; объем; название; автор. Вывести все сведения о произведениях конкретного автора.
Структура "DVD-диск" имеет поля: название фильма; режиссер; продолжительность; цена. Вывести все сведения о дисках, имеющих цену ниже средней.
Структура "DVD- диск" имеет поля: название; режиссер; продолжительность; цена. Вывести все сведения о фильмах конкретного режиссера.
Структура "Спортивная команда" имеет поля: название; город; количество игроков; количество набранных очков. Вывести все сведения о лидирющих (трех) командах
Структура "Стадион" имеет поля: название; адрес; вместимо сть;год постройки; виды спорта. Вывести все сведения о стадионах, имеющих дату постройки ниже заданной (старые стадионы).
Структура "Автомобиль" имеет поля: марка; год выпуска; мощность двигателя; цена; цвет. Вывести все сведения об автомобилях, имеющих цену выше средней.
Структура "Владелец автомобиля" имеет поля: фамилия, имя, отчество; номер автомобиля; телефон; номер техпаспорта, дата выдачи прав. Вывести все сведения о владельцах автомобилей, имеющих дату сдачи на права выше заданной.
Структура "Фильм" имеет поля: название; режиссер; год выпуска; стоимость. Вывести все сведения офильмах, стоимость которых выше средней.
Структура "Книга" имеет поля: название; автор; год издания; количество страниц. Вывести все сведения о книгах, имеющих год издания выше заданного.
Структура "Фильм" имеет поля: название; режиссер; страна; год выпуска; приносимая прибыль. Вывести все сведения о фильмах, которые приносят прибыль выше средней.
Структура "Государство" имеет поля: название; государственный язык; денежная единица; численность населения; столица. Вывести все сведения о государствах с численностью населения больше заданной.
Структура "Автомобиль" имеет поля: марка; серийный номер; регистрационный номер; год выпуска. Вывести все сведения об автомобилях заданной марки.
Структура "Владелец автомобиля" имеет поля: фамилия, имя, отчество; номер автомобиля; номер техпаспорта; год выпуска;отделение регистрации ГАИ. Вывести все сведения об автомобилях, имеющих год выпуска меньше заданного (старые автомобили).
Структура "Стадион": имеет поля: название; год постройки; вместимость; количество площадок; виды спорта. Вывести все сведения о стадионах, имющих вместимость меньше заданной.
Структура "Студент" имеет поля: фамилия, имя, отчество; номер телефона; группа; оценки по 5 предметам сессии. Вывести все сведения о студентах, имеющих 3 только по одному из предметов.
Структура "Студент" имеет поля: фамилия, имя, отчество; дата рождения; домашний адрес; оценки по 5 предметам сессии. Вывести все сведения о студентах, имеющих 5 по всем предметам.
Структура "Студент" имеет поля: фамилия, имя, отчество; домашний адрес; группа; оценки по 5 предметам сессии. Вывести все сведения о студентах, имеющих 4 или 5 по предметам.
Структура "Книга" имеет поля: название; автор; год издания; количество страниц. Вывести все сведения о книгах, имеющих год издания выше заданного.
Структура "Автомобиль" имеет поля: марка; серийный номер; регистрационный номер; год выпуска. Вывести все сведения об автомобилях, имеющих дату ниже заданной (старые автомобили).
Структура "Абитуриент" имеет поля: фамилия, имя, отчество;год рождения;оценки вступительных экзаменов (3);средний балл аттестата. Вывести все сведения об абитуриентах, имеющих средний балл выше заданного.
Структура "Студент" имеет поля: фамилия, имя, отчество; домашний адрес; группа; оценки по 5 предметам сессии. Вывести все сведения о студентах, имеющих 5 по всем предметам.

 

2.4.2.2. Пример для варианта 30

Структура "Студент" имеет поля: фамилия, имя, отчество; домашний адрес; группа; оценки по 5 предметам сессии.

Вывести все сведения о студентах, имеющих 5 по всем предметам.

 

2.4.2.3. Программа

//Лабораторная работа № 14

//Задание № 1

//Выполнил ст. Иванов А.А.

//20 мая 2012 г.

#include <iostream.h>

#include <string.h>

#include <conio.h> // подключение библиотеки функций ввода-вывода

int main ()

{

struct strc // Объявление структуры strc

{ char fam[20];

char im[15];

char otch[20];

char adres[40];

char ngr[9];

int otcen[5];

double sb;

}

mstud[100]; // Объявление массива структур mstud

int nst, i, j;

cout << "Введите количество студентов <=100" << endl;

cin >> nst;

for (i=0; i < nst; i++) // Ввод информации о студентах

{

cout << "Введите фамилию: ";

cin >> mstud[i].fam;

cout << "Введите имя: ";

cin >> mstud[i].im;

cout << "Введите отчество: ";

cin >> mstud[i].otch;

cout << "Введите адрес: ";

cin >> mstud[i].adres;

cout << "Введите номер группы: ";

cin >> mstud[i].ngr;

cout << "Введите 5 оценок" << endl;

mstud[i].sb = 0;

for (j=0; j<5; j++) // Ввод пяти оценок

{ // за последнюю сессию

cin >> mstud[i].otcen[j];

mstud[i].sb += mstud[i].otcen[j] / 5.; // Вычисление

} // среднего балла студента

cout << endl;

}

 

for (i=0; i < nst; i++)

{

if (mstud[i].sb >=5.0) // Вывод информации

{

cout << mstud[i].fam << " " << mstud[i].im << " "<< mstud[i].otch

<< " " << mstud[i].ngr << " Оценки: ";

for (j=0; j<5; j++) // Вывод пяти оценок

{ // за последнюю сессию

cout << mstud[i].otcen[j]<< " ";

}

cout << endl;

}

}

 

cout << "Нажмите любую клавишу..." ;

getch();

return 0;

}

 

2.4.2.4. Тестирование

 

 

 

2.5. Домашние задания

 

 

2.5.1. Задание 1. Запись в файл массивов структур

Создать массив структур, содержащий информацию согласно варианту индивидуального задания. Структуры (исходную и сформированную по запросу) сохранить в отдельных файлах. Выполнить задание и вывести на экран полученный результат.

Замечание: для ускорения выполнения задания рекомендуется воспользоваться результатами лабораторной работы № 14. Программирова­ние с использованием струк­тур, выполненной в предыдущем семестре.

 

2.5.1.1. Условие задания

Таблица 17.6

 

Задание
В магазине сформирован список постоянных клиентов, который включает ФИО, домашний адрес покупателя и размер предоставляемой скидки. Вывести всех покупателей, имеющих 5 % - ную скидку.
Список товаров, имеющихся на складе, включает в себя наименование товара, количество единиц товара, цену единицы и дату поступления товара на склад. Вывести список товаров, стоимость которых превышает 100 000 рублей.
Для получения места в общежитии формируется список студентов, который включает ФИО студента, номер группы, средний балл, доход на члена семьи. Вывести фамилии студентов, у которых доход на члена семьи меньше двух минимальных зарплат.
В справочной автовокзала имеется расписание движения автобусов. Для каждого рейса указаны его номер, тип автобуса, пункт назначения, время отправления и прибытия. Вывести информацию о рейсах, которыми можно воспользоваться для прибытия в пункт назначения раньше заданного времени.
На междугородной АТС информация о разговорах содержит дату разговора, код и название города, время разговора, тариф, номер телефона абонента. Вывести для заданного города общее время разговоров с ним и сумму.
Информация о сотрудниках фирмы включает ФИО, табельный номер, количество отработанных часов за месяц, почасовой тариф. Вывести размер заработной платы каждого сотрудника.
Информация об участниках спортивных соревнований содержит название страны, название команды, ФИО игрока, игровой номер, возраст, рост и вес. Вывести фамилии спортсменов, возраст которых больше 20 лет.
Для книг, хранящихся в библиотеке, задаются регистрационный номер книги, автор, название, год издания, издательство, количество страниц. Вывести список книг с фамилиями авторов, изданных после заданного года.
Различные цеха завода выпускают продукцию нескольких наименований. Сведения о выпущенной продукции включают наименование, количество, номер цеха. Для заданного цеха вывести количество выпущенных изделий.
Информация о сотрудниках содержит ФИО, номер отдела, должность, стаж работы на предприятии. Вывести список сотрудников заданного отдела, имеющих стаж работы на предприятии более 20 лет.
Ведомость абитуриентов содержит ФИО, адрес, оценки по трем предметам. Определить средний балл абитуриентов, проживающих в городе Москве.
В справочной аэропорта имеется расписание вылета самолетов. Для каждого рейса указаны его номер, тип самолета, пункт назначения, время вылета. Вывести все номера рейсов, вылетающих в заданный пункт назначения.
У администратора железнодорожных касс имеется информация о свободных местах в поездах на текущие сутки в следующем виде: пункт назначения, время отправления, число свободных мест. Вывести информацию о числе свободных мест в поездах, следующих до заданного пункта назначения.
Ведомость абитуриентов, сдавших вступительные экзамены в университет, содержит ФИО абитуриента и его оценки. Определить средний балл по университету и вывести список абитуриентов, средний балл которых выше среднего балла по университету.
В радиоателье хранятся квитанции о сданной в ремонт радиоаппаратуре. Каждая квитанция содержит наименование изделия, дату приемки в ремонт, состояние готовности заказа (выполнен, не выполнен). Вывести информацию об изделиях, ремонт которых еще не выполнен.
Cписок студентов группы. О каждом студенте хранятся следующие сведения: Ф.И.О., год рождения, номер зачетной книжки, пол, результаты последней сессии по четырем экзаменам (физика, математика, история, химия). Вывести Ф.И.О. студентов, получивших отличные оценки по математике.
Cписок студентов группы. Окаждом студенте хранятся следующие сведения: Ф.И.О., год рождения, номер зачетной книжки, пол, результаты последней сессии по четырем экзаменам (физика, математика,история, химия). Вывести Ф.И.О. студентов заданной группы, не имеющих троек.
Cписок студентов группы. Окаждом студенте хранятся следующие сведения: Ф.И.О., год рождения, номер зачетной книжки, пол, результаты последней сессии по четырем экзаменам (физика, математика,история, химия). Вывести Ф.И.О. студентов заданной группы, имеющих только отличные оценки.
Cписок результатов метеорологических наблюдений по месяцам. Элемент списка хранит следующие данные: период наблюдения(месяц или год), количество дней месяца, количество выпавших осадков, количество облачных дней, количество дней с переменной облачностью. Определить месяц в заданном году, в течение которого выпало наибольшее количество осадков.
Cписок результатов метеорологических наблюдений по месяцам. Элемент списка хранит следующие данные: период наблюдения(месяц или год), количество дней месяца, количество выпавших осадков, количество облачных дней, количество дней с переменной облачностью. Определить год с наиболее высоким количеством выпавших осадков в течение летних месяцев.
Cписок результатов метеорологических наблюдений по месяцам. Элемент списка хранит следующие данные: период наблюдения(месяц или год), количество дней месяца, количество выпавших осадков, количество облачных дней, количество дней с переменной облачностью. Определить год с наиболее высокой минимальной температурой, зафиксированной в течение зимних месяцев.
Cписок книг, хранящихся в библиотеке. О каждой книге хранятся следующие сведения: инвентарный номер, шифр УДК, название книги, Ф.И.О. автора, место издания, год издания. Вывести сведения о книгах, имеющих заданный шифр УДК и выпущенных не раньше указанного года.
Cписок книг, хранящихся в библиотеке. О каждой книге хранятся следующие сведения: инвентарный номер, шифр УДК, название книги, Ф.И.О. автора, место издания, год издания. Вывести сведения о книгах заданного автора, выпущенных не раньше заданного года.
Cписок книг, хранящихся в библиотеке. О каждой книге хранятся следующие сведения: инвентарный номер, шифр УДК, название книги, Ф.И.О. автора, место издания, год издания. Вывести сведения о читателях, для которых истек срок возврата книг.
Cписок поставок. Описание поставки включает в себя номер поставки, дату поставки (день, месяц год), Ф.И.О поставщика, наименование поставленного товара,объем поставки, единицу измерения (штука, тонна и т.д.). Для товара с заданным наименованием определить Ф.И.О поставщиков, когда - либо осуществляющих его поставки, а также даты и номера поставок.
Список поставок. Описание поставки включает в себя номер поставки, дату поставки (день, месяц год), Ф.И.О поставщика, наименование поставленного товара,объем поставки, единицу измерения (штука, тонна и т.д.). Вывести сведения о поставке заданного товара с с максимальным объемом. Принять, что для одинаковых наименований товара единицы измерения одинаковы.
Cписок поставок. Описание поставки включает в себя номер поставки, дату поставки (день, месяц год), Ф.И.О поставщика, наименование поставленного товара,объем поставки, единицу измерения (штука, тонна и т.д.). Вывести сведения о поставках товара заданного наименования, осуществляющихся поставщиком, с заданным Ф.И.О.
Cписок работников, содержащий следующие поля: фамилия и инициалы работника, название занимаемой должности, год поступления на работу. Вывести фамилии работников, чей стаж работы превышаетзначение, введенное с клавиатуры. Если таких работников нет, то вывести соответствующее сообщение.
Записная книжка NOTE. NOTE включает следующие поля: Ф.И.О., номер телефона, дата рождения ( массив из трех чисел). Вывести информацию о людях, чьи дни рождения приходятся на месяц, значение которого введено с клавиатуры. Если таких людей нет, то вывести соответствующее сообщение.
Создать массив структур, содержащий информацию о студентах: ФИО, номер группы, оценки за последнюю сессию. Вывести информацию о студентах группы ИНФО-101 в порядке убывания среднего балла.
Записная книжка NOTE. NOTE включает следующие поля: Ф.И.О., номер телефона, дата рождения (массив из трех чисел). Вывести информацию о человеке, фамилия которого которого введена с клавиатуры. Если такого человека нет, то вывести соответствующее сообщение.
Записная книжка NOTE. NOTE включает следующие поля: Ф.И.О., номер телефона, дата рождения ( массив из трех чисел). Вывести информацию о человеке, номер телефона которого введен с клавиатуры. Если такого человека нет, то вывести соответствующее сообщение.

 

2.5.1.2. Пример для варианта 30

Создать массив структур, содержащий информацию о студентах: ФИО, номер группы, оценки за последнюю сессию. Вывести информацию о студентах группы ИНФО-101 в порядке убывания среднего балла.

 

2.4.3.3. Программа

//Лабораторная работа № 14

//Задание № 2

//Выполнил ст. Иванов А.А.

//20 мая 2012 г.

#include <iostream.h>

#include <string.h>

#include <conio.h> // подключение библиотеки функций ввода-вывода

int main ()

{

struct strc // Объявление структуры strc

{ char fio[40];

char ngr[9];

int otc[5];

double sb;

}

mstud[100]; // Объявление массива структур mstud

int nst, i, j;

cout << "Vvedite kol-vo studentov <=100" << endl;

cin >> nst;

for (i=0; i < nst; i++) // Ввод информации о студентах

{

cout << "Vvedite FIO: ";

cin >> mstud[i].fio;

cout << "Vvedite nomer gr: ";

cin >> mstud[i].ngr;

cout << "Vvedite 5 otcenok" << endl;

mstud[i].sb = 0;

for (j=0; j<5; j++) // Ввод пяти оценок

{ // за последнюю сессию

cin >> mstud[i].otc[j];

mstud[i].sb += mstud[i].otc[j] / 5.; // Вычисление

} // среднего балла студента

cout << endl;

}

strc stemp;

for (i=0; i < nst-1; i++) // Сортировка по среднему баллу

for (j=i+1; j<nst; j++)

if (mstud[i].sb < mstud[j].sb

&& !strcmp (mstud[i].ngr, "ИНФО-101")

&& !strcmp (mstud[j].ngr, "ИНФО-101"))

{

stemp = mstud[i]; // Перестановка структур

mstud[i] = mstud[j];

mstud[j] =stemp;

}

for (i=0; i < nst; i++)

if (!strcmp (mstud[i].ngr, "ИНФО-101")) // Вывод информации

cout << mstud[i].fio << " " << mstud[i].ngr << " "

<< mstud[i].sb << endl;

 

cout << "Нажмите любую клавишу..." ;

getch();

return 0;

}

 

2.4.3.4. Тестирование

 

 

 

 

 

2.5.2. Задание 2. Формирование и запись в файл массивов структур

Создать массив структур, содержащий информацию согласно варианту индивидуального задания. Структуры (исходную и сформированную по запросу) сохранить в отдельных файлах. Выполнить задание и вывести на экран полученный результат.

Замечание: для ускорения выполнения задания рекомендуется воспользоваться результатами лабораторной работы № 14. Программирова­ние с использованием струк­тур, выполненной в предыдущем семестре.

 

2.5.2.1. Условие задания

Таблица 17.7

 

Задание
Описать структуру с именем STUDENT, содержащую следующие поля: • фамилия и инициалы; • номер группы; • успеваемость (массив из пяти элементов). Написать программу, выполняющую следующие действия: • ввод с клавиатуры данных в массив, состоящий из десяти структур типа STUDENT (записи должны быть упорядочены по возрастанию номера группы); • вывод на экран фамилий и номеров групп для всех студентов, включенных, в массив, если средний балл студента больше 4,0 (если таких студентов нет, вывести соответствующее сообщение).
Описать структуру с именем STUDENT, содержащую следующие поля: • фамилия и инициалы; • номер группы; • успеваемость (массив из пяти элементов). Написать программу, выполняющую следующие действия: • ввод с клавиатуры данных в массив, состоящий из десяти структур типа STUDENT (записи должны быть упорядочены по алфавиту); • вывод на экран фамилий и номеров групп для всех студентов, имеющих хотя бы одну оценку 2 (если таких студентов нет, вывести соответствующее сообщение).
Описать структуру с именем STUDENT, содержащую следующие поля: • фамилия и инициалы; • номер группы; • успеваемость (массив из пяти элементов). Написать программу, выполняющую следующие действия: • ввод с клавиатуры данных в массив, состоящий из десяти структур типа STUDENT(записи должны быть упорядочены по возрастанию среднего балла); • вывод на экран фамилий и номеров групп для всех студентов, имеющих оценки 4 и 5 (если таких студентов нет, вывести соответствующее сообщение).
Описать структуру с именем STUDENT, содержащую следующие поля: • фамилия и инициалы; • номер группы; • успеваемость (массив из пяти элементов). Написать программу, выполняющую следующие действия: • ввод с клавиатуры данных в массив, состоящий из десяти структур типа STUDENT(записи должны быть упорядочены по возрастанию среднего балла); • вывод на экран фамилий и номеров групп для всех студентов, имеющих оценки 5 по всем предметам (если таких студентов нет, вывести соответствующее сообщение).
Описать структуру с именем AER0FL0T, содержащую следующие поля: • название пункта назначения рейса; • номер рейса; • тип самолета. Написать программу, выполняющую следующие действия: • ввод с клавиатуры данных в массив, состоящий из семи элементов типа AER0FL0T (записи должны быть размещены в алфавитном порядке по названиям пунктов назначения); • вывод на экран пунктов назначения и номеров рейсов, обслуживаемых самолетом, тип которого введен с клавиатуры (если таких рейсов нет, вывести соответствующее сообщение).
Описать структуру с именем WORKER, содержащую следующие поля: • фамилия и инициалы работника; • название занимаемой должности; • год поступления на работу. Написать программу, выполняющую следующие действия: • ввод с клавиатуры данных в массив, состоящий из десяти структур типа WORKER (записи должны быть упорядочены по алфавиту); • вывод на экран фамилий работников, стаж работы которых превышает значение, введенное с клавиатуры (если таких работников нет, вывести соответствующее сообщение.
Описать структуру с именем TRAIN, содержащую следующие поля: • название пункта назначения; • номер поезда; • время отправления. Написать программу, выполняющую следующие действия: • ввод с клавиатуры данных в массив, состоящий из восьми элементов типа TRAIN (записи должны быть размещены в алфавитном порядке по названиям пунктов назначения); • вывод на экран информации о поездах, отправляющихся после введенного с клавиатуры времени (если таких поездов нет, вывести соответствующее сообщение).
Описать структуру с именем TRAIN, содержащую следующие поля: • название пункта назначения; • номер поезда; • время отправления. Написать программу, выполняющую следующие действия: • ввод с клавиатуры данных в массив, состоящий из шести элементов типа TRAIN (записи должны быть упорядочены по времени отправления поезда); • вывод на экран информации о поездах, направляющихся в пункт, название которого введено с клавиатуры (если таких поездов нет, вывести соответствующее сообщение).
Описать структуру с именем TRAIN, содержащую следующие поля: • название пункта назначения; • номер поезда; • время отправления. Написать программу, выполняющую следующие действия: • ввод с клавиатуры данных в массив, состоящий из восьми элементов типа TRAIN (записи должны быть упорядочены по номерам поездов); • вывод на экран информации о поезде, номер которого введен с клавиатуры (если таких поездов нет, вывести соответствующее сообщение).
Описать структуру с именем MARSH, содержащую следующие поля: • название начального пункта маршрута; • название конечного пункта маршрута; • номер маршрута. Написать программу, выполняющую следующие действия: • ввод с клавиатуры данных в массив, состоящий из восьми элементов типа MARSH (записи должны быть упорядочены по номерам маршрутов); • вывод на экран информации о маршруте, номер которого введен с клавиатуры (если таких маршрутов нет, вывести соответствующее сообщение).
Описать структуру с именем MARSH, содержащую следующие поля: • название начального пункта маршрута; • название конечного пункта маршрута; • номер маршрута. Написать программу, выполняющую следующие действия: • ввод с клавиатуры данных в массив, состоящий из восьми элементов типа MARSH (записи должны быть упорядочены по номерам маршрутов); • вывод на экран информации о маршрутах, которые начинаются или оканчиваются в пункте, название которого введено с клавиатуры (если таких маршрутов нет, вывести соответствующее сообщение).
Описать структуру с именем NOTE, содержащую следующие поля: • фамилия, имя; • номер телефона; • дата рождения (массив из трех чисел). Написать программу, выполняющую следующие действия: • ввод с клавиатуры данных в массив, состоящий из восьми элементов типа NOTE (записи должны быть упорядочены по дате рождения); • вывод на экран информации о человеке, номер телефона которого введен с клавиатуры (если такого нет, вывести соответствующее сообщение).
Описать структуру с именем NOTE, содержащую следующие поля: • фамилия, имя; • номер телефона; • дата рождения (массив из трех чисел). Написать программу, выполняющую следующие действия: • ввод с клавиатуры данных в массив, состоящий из восьми элементов типа NOTE (записи должны быть размещены по алфавиту); • вывод на экран информации о людях, чьи дни рождения приходятся на месяц, значение которого введено с клавиатуры (если таких нет, вывести соответствующее сообщение).
Описать структуру с именем NOTE, содержащую следующие поля: • фамилия, имя; • номер телефона; • дата рождения (массив из трех чисел). Написать программу, выполняющую следующие действия: • ввод с клавиатуры данных в массив, состоящий из восьми элементов типа NOTE (записи должны быть упорядочены по трем первым цифрам номера телефона); • вывод на экран информации о человеке, чья фамилия введена с клавиатуры (если такого нет, вывести соответствующее сообщение).
Описать структуру с именем ZNAK, содержащую следующие поля: • фамилия, имя; • знак Зодиака; • дата рождения (массив из трех чисел). Написать программу, выполняющую следующие действия: • ввод с клавиатуры данных в массив, состоящий из восьми элементов типа ZNAK (записи должны быть упорядочены по дате рождения); • вывод на экран информации о человеке, чья фамилия введена с клавиатуры (если такого нет, вывести соответствующее сообщение).
Описать структуру с именем ZNAK, содержащую следующие поля: • фамилия, имя; • знак Зодиака; • дата рождения (массив из трех чисел). Написать программу, выполняющую следующие действия: • ввод с клавиатуры данных в массив, состоящий из восьми элементов типа ZNAK (записи должны быть упорядочены по дате рождения); • вывод на экран информации о людях, родившихся под знаком, название которого введено с клавиатуры (если таких нет, вывести соответствующее сообщение).
Описать структуру с именем ZNAK, содержащую следующие поля: • фамилия, имя; • знак Зодиака; • дата рождения (массив из трех чисел). Написать программу, выполняющую следующие действия: • ввод с клавиатуры данных в массив, состоящий из восьми элементов типа ZNAK (записи должны быть упорядочены по знакам Зодиака); • вывод на экран информации о людях, родившихся в месяц, значение которого введено с клавиатуры (если таких нет, вывести соответствующее сообщение).
Описать структуру с именем PRICE, содержащую следующие поля: • название товара; • название магазина, в котором продается товар; • стоимость товара в рублях. Написать программу, выполняющую следующие действия: • ввод с клавиатуры данных в массив, состоящий из восьми элементов типа PRICE (записи должны быть упорядочены в алфавитном порядке по названиям товаров); • вывод на экран информации о товаре, название которого введено с клавиатуры (если таких товаров нет, вывести соответствующее сообщение).
Описать структуру с именем PRICE, содержащую следующие поля: • название товара; • название магазина, в котором продается товар; • стоимость товара в рублях. Написать программу, выполняющую следующие действия: • ввод с клавиатуры данных в массив, состоящий из восьми элементов типа PRICE (записи должны быть упорядочены в алфавитном порядке по названиям магазинов); • вывод на экран информации о товарах, продающихся в магазине, название которого введено с клавиатуры (если такого магазина нет, вывести соответствующее сообщение).
Описать структуру с именем PRICE, содержащую следующие поля: • название товара; • название магазина, в котором продается товар; • стоимость товара в рублях. Написать программу, выполняющую следующие действия: • ввод с клавиатуры данных в массив, состоящий из восьми элементов типа PRICE (записи должны быть упорядочены в алфавитном порядке по названиям товаров); • вывод на экран информации о товарах, стоимость которых ниже средней по магазину.
Описать структуру с именем WORKER, содержащую следующие поля: • фамилия и инициалы работника; • название занимаемой должности; • год поступления на работу. Написать программу, выполняющую следующие действия: • ввод с клавиатуры данных в массив, состоящий из десяти структур типа WORKER (записи должны быть упорядочены по алфавиту); • вывод на экран фамилий работников, стаж работы которых превышает среднее значение (старые сотрудники).
Описать структуру с именем NOTE, содержащую следующие поля: • фамилия, имя; • номер телефона; • дата постановки на учет (массив из трех чисел). Написать программу, выполняющую следующие действия: • ввод с клавиатуры данных в массив, состоящий из восьми элементов типа NOTE (записи должны быть размещены по дате постановки на учет); • вывод на экран информации о людях, вставших на учет ранее даты введенной с клавиатуры.
Описать структуру с именем PRICE, содержащую следующие поля: • название товара; • название магазина, в котором продается товар; • стоимость товара в рублях. Написать программу, выполняющую следующие действия: • ввод с клавиатуры данных в массив, состоящий из восьми элементов типа PRICE (записи должны быть упорядочены в алфавитном порядке по названиям товаров); • вывод на экран информации о товарах, стоимость которых превышает среднюю по магазину.
Описать структуру с именем ORDER, содержащую следующие поля: • расчетный счет плательщика; • расчетный счет получателя; • перечисляемая сумма в рублях. Написать программу, выполняющую следующие действия: • ввод с клавиатуры данных в массив, состоящий из восьми элементов типа ORDER (записи должны быть размещены в алфавитном порядке по расчетным счетам плательщиков); • вывод на экран информации о сумме, снятой с расчетного счета плательщика, введенного с клавиатуры (если такого расчетного счета нет, вывести соответствующее сообщение).
Описать структуру с именем WORKER, содержащую следующие поля: • фамилия и инициалы работника; • название занимаемой должности; • год поступления на работу. Написать программу, выполняющую следующие действия: • ввод с клавиатуры данных в массив, состоящий из десяти структур типа WORKER (записи должны быть упорядочены по алфавиту); • вывод на экран фамилий работников, стаж работы которых больше значения введенного с клавиатуры (если таких сотрудников нет, вывести соответствующее сообщение).
Описать структуру с именем NOTE, содержащую следующие поля: • фамилия, имя; • номер телефона; • дата постановки на учет (массив из трех чисел). Написать программу, выполняющую следующие действия: • ввод с клавиатуры данных в массив, состоящий из восьми элементов типа NOTE (записи должны быть размещены по дате постановки на учет); • вывод на экран информации о людях, вставших на учет позднее даты введенной с клавиатуры.
Описать структуру с именем ORDER, содержащую следующие поля: • расчетный счет плательщика; • расчетный счет получателя; • полученная сумма в рублях. Написать программу, выполняющую следующие действия: • ввод с клавиатуры данных в массив, состоящий из восьми элементов типа ORDER (записи должны быть размещены в алфавитном порядке по расчетным счетам плательщиков); • вывод на экран информации о сумме, полученной на расчетный счет получателя, введенного с клавиатуры (если такого расчетного счета нет, вывести соответствующее сообщение).
Описать структуру с именем TRAIN, содержащую следующие поля: • название пункта назначения; • номер поезда; • время отправления; • время в пути. Написать программу, выполняющую следующие действия: • ввод с клавиатуры данных в массив, состоящий из восьми элементов типа TRAIN (записи должны быть размещены в алфавитном порядке по названиям пунктов назначения); • вывод на экран информации о поездах, время в пути которых меньше среднего значения.
Описать структуру с именем WORKER, содержащую следующие поля: • фамилия и инициалы работника; • название занимаемой должности; • год поступления на работу. Написать программу, выполняющую следующие действия: • ввод с клавиатуры данных в массив, состоящий из десяти структур типа WORKER (записи должны быть упорядочены по алфавиту); • вывод на экран фамилий работников, стаж работы которых меньше среднего значения (молодые сотрудники).
Описать структуру с именем NOTE, содержащую следующие поля: • фамилия, имя; • номер телефона; • адрес. Ключевые поля: фамилия и имя. Написать программу, выполняющую следующие действия: • ввод с клавиатуры данных в массив, состоящий из восьми элементов типа NOTE (записи должны быть размещены по фамилии); • вывод на экран информации об адресе и телефоне по фамилии, введенной с клавиатуры.
Описать структуру с именем AER0FL0T, содержащую следующие поля: • название пункта назначения рейса; • номер рейса; • тип самолета. Написать программу, выполняющую следующие действия: • ввод с клавиатуры данных в массив, состоящий из семи элементов типа AER0FL0T (записи должны быть упорядочены по возрастанию номера рейса); • вывод на экран номеров рейсов и типов самолетов, вылетающих в пункт назначения, название которого совпало с названием, введенным с клавиатуры (если таких рейсов нет, вывести сообщение).

 

2.5.2.2. Пример выполнения работы для варианта 31

Описать структуру с именем NOTE, содержащую следующие поля:

• фамилия, имя;

• номер телефона;

• адрес.

Ключевые поля: фамилия и имя.

Написать программу, выполняющую следующие действия:

• ввод с клавиатуры данных в массив, состоящий из восьми элементов типа NOTE (записи должны быть размещены по фамилии);

• вывод на экран информации об адресе и телефоне по фамилии, введенной с клавиатуры.

 

2.5.2.3. Программа

Листинг программы:

#include<iostream.h>

#include<stdio.h>

#include<string.h>

struct note

{

char name[50];

char ln[50];

int phone;

char adress[50];

};

struct note nt[10];

main()

{

cout<<"Vvedite koli4estvo poley, kotoroe vy hotite dobavit' v BD"<<endl;

int k;

cin>>k;

for(int i=0;i<k;i++)

{

cout<<"Vvedite familiju "<<i+1<<"-go 4eloveka"<<endl;

scanf("%s", nt[i].ln);

cout<<"Vvedite imya "<<i+1<<"-go 4eloveka"<<endl;

scanf("%s", nt[i].name);

cout<<"Vvedite nomer telefona "<<i+1<<"-go 4eloveka"<<endl;

cin>>nt[i].phone;

cout<<"Vvedite adress "<<i+1<<"-go 4eloveka"<<endl;

scanf("%s", nt[i].adress);

}

cout<<"vvedite familiju dlya poiska"<<endl;

char s[50];

scanf("%s",s);

cout<<"Najdennye sovpadenija:"<<endl;

for(i=0;i<k;i++)

{

if(strcmp(s,nt[i].ln)==0)

{

cout<<nt[i].phone<<' '<<nt[i].adress<<endl;

}

}

return 0;

}

 

2.5.2.4. Тестирование

 

Тест Ожидаемый результат Полученный результат
ivanov ivan 2535252 GORS petrov petr 2230252 GD   sidorov    
ivanov ivan 2535252 GORS petrov petr 2230252 GD sergeev igor 2434355 GB ivanov urij 2131353 GD ivanov alexey 2414111 TK   ivanov 2535252 GORS 2131353 GD 2414111 TK 2535252 GORS 2131353 GD 2414111 TK
timofeev tima 927442 ufa timofeev dima 917234 smolen timofeev arsen 961593 moskv   timofeev 927442 ufa 917234 smolen 961593 moskv 927442 ufa 917234 smolen 961593 moskv

 

3. ВЫВОДЫ

 

Выполнение этой лабораторной работы должно показать Вам средства языка C++, необходимые программисту для реализации программ с одномерными массивами. Вы должны освоить операторы языка С++, реализующие работу с массивами в программах.

Во время выполнения этой и других работ Вы познакомитесь с другими возможностями языка С++ и выберете для себя некоторый стиль написания программ на языке С++.

Чем активнее Вы будете овладевать возможностями системы программирования на языке С++, тем более легким и эффективным будет для Вас выполнение всего лабораторного практикума.

 

4. ТРЕБОВАНИЕ К ОТЧЕТУ

В отчете должны быть отображены следующие пункты:

1. Название работы.

2. Цель работы

3. Задание.

4. Краткие теоретические сведения.

5. Листинги семи программ.

6. Таблицы выбора идентификаторов (таблицы кодирования переменных).

7. Результаты выполнения трех программ (скриншоты).

8. Выводы.

 

5. ВОПРОСЫ ДЛЯ САМОКОНТРОЛЯ

 

1. Что такое файл?

2. К какой группе структур данных относятся файлы?

3. Какие действия необходимо выполнить для работы с файлом?

4. Различаются ли файлы по типам?

5. Как в программах устанавливается связь с файлами?

6. Какие способы организации связи с файлами вам известны?

7. Какие операции можно выполнять над файлами?

8. Как открыть файл для записи?

9. Как открыть файл для считывания?

10. Какая функция позволяет узнать длину файла?

11. Как проверить, можно ли произвести запись в выбранный файл?

12. Можно ли считать данные из произвольного места в файле? Если да, то как это сделать?

13. Можно ли перемещаться по файлу? Если да, то с помощью какой функции?

14. Чем отличается запись действительных чисел в текстовый и двоичный файлы?

15. Как обеспечить связь между файлами и функциями?

16. Перечислите и объясните характеристики (атрибуты) файла.

17. Понятие логического устройства?

18. Понятие потока?

19. Стандартные библиотеки работы с потоками?

20. Объявление файла в программе?

21. Этапы работы с файлами?

22. Функция открытия файла?

23. Режимы открытия файла?

24. Закрытие файла?

25. Удаление файла?

26. Переименование файла.

27. Функция получения текущего положения указателя файла?

28. Функция задания положения указателя файла?

29. Функция чтения потока байтов?

30. Функц





©2015 www.megapredmet.ru Все права принадлежат авторам размещенных материалов.