Практическое занятие6

ТЕМА: Создание программ по обработке структур

ЦЕЛЬ РАБОТЫ: получить практические навыки по описанию и обработке структур в программах на С++

 

Ход работы

1. Объект книга описывается следующими свойствами: шифр, автор, название, издательство, год издания. Описать массив из N книг (количество книг в массиве ввести из клавиатуры);

2. Составить программу, которая выполняет следующие функции: 

        2.1. Организовать ввод информации о книгах; 

        2.2. Подсчитать, сколько книг издано в заданном году; 

        2.3. Вывести на экран автора и названия книг с заданным издательством (вводить можно произвольное количество первых символов издательства); 

        2.4. Вывести на экран названия новейших книг (максимальный год издания). Если таких книг несколько, то вывести все;

Выполнение работы

//подключаем заголовочные файлы

#include <iostream.h>

#include <string.h>

 

//описываем структуру "книга"

struct book

{

    //поля шифр и год издания

    int shifr,god;

    //поля автор, название, издательство

    char autor[20], nazv[50], izdat[15];

};

 

//начало главной программы

int main()

{

    //подключаем русский язык

    system("chcp 1251>nul");

 

    //описываем массив из 30 книг

    book mas[30];

    //описываем вспомогательные переменные

    int i,n,kol,max,god;

    char izdat[15];

 

    //вводим количество книг

    cout<<"Введите количество книг: ";

    cin>>n;

    //вводим данные об n книгах

    cout<<"Введите данные о книгах\n";

    for (i=0;i<=n-1;i++)

    {

        cout<<i+1<<"-я книга:\n";

        cout<<"-шифр:"; cin>>mas[i].shifr; cin.get();

        cout<<"-автор: "; cin.getline(mas[i].autor,20);

        cout<<"-название: "; cin.getline(mas[i].nazv,50);

        cout<<"-издательство: "; cin.getline(mas[i].izdat,15);

        cout<<"-год издания: "; cin>>mas[i].god; cin.get();

    }

 

    //вводим год издания для поиска

    cout<<"\nВведите год издания для поиска: ";

    cin>>god; cin.get();

    //запускаем цикл по всему массиву книг

    for (kol=0,i=0;i<=n-1;i++)

        //если год издания книги равен введенному году

        if (mas[i].god==god)

            //то количество увеличиваем на 1

            kol++;

    //выдаем найденное количество на экран

    cout<<"Книг, изданных в "<<god<<" году, имеется "<<kol<<" шт.\n";

 

    //вводим издательство для поиска книг

    cout<<"\nВведите издательство для поиска: ";

    cin.getline(izdat,15);

    cout<<"Список книг, изданных в заданном издательстве:\n";

    //запускаем цикл по всему массиву книг

    for (i=0;i<=n-1;i++)

        //если издательство книги равно введенному издательству

        if (strnicmp(mas[i].izdat,izdat,strlen(izdat))==0)

            //выводим на экран автора и название книги

            cout<<mas[i].autor<<" "<<mas[i].nazv<<"\n";

 

    //находим максимальный год издания книг

    //запускаем цикл по всему массиву книг

    for (max=mas[0].god,i=0;i<=n-1;i++)

        //если очередной элемент больше максимального

        if (max<mas[i].god)

            //запоминаем найденное значение как максимальное

            max=mas[i].god;

 

    //выводим найденное максимальное значение

    cout<<"\nМаксимальный год издания равен: "<<max<<"\n";

    cout<<"Список книг, изданных в этом году:\n";

 

    //запускаем цикл по всему массиву книг

    for (i=0;i<=n-1;i++)

        //если год издания книги равен максимальному значению

        if (mas[i].god==max)

            //выводим на экран название этой книги

            cout<<mas[i].nazv<<"\n";

 

      system("pause");

      return 0;

}

 

Решить самостоятельно:

 

Задача 1.

Имеются данные о сотрудниках фирмы: фамилия, адрес, возраст, зарплата.

1. Составить программу, которая по заданной части адреса выводит на экран фамилии сотрудников. Если данных нет, то выдать соответствующее сообщение.

2. Выдать на экран фамилии сотрудников, у которых зарплата меньше среднего значения по фирме.

3. Вывести на экран данные о сотрудниках, возраст которых больше 20 и меньше 35.

4. Составить программу, которая по первой букве фамилии выводит на экран фамилии сотрудников и зарплату. Если данных нет, то выдать соответствующее сообщение.

5. Добавьте к структуре поле «пол». Подсчитайте максимальную, минимальную и среднюю зарплату для мужчин и женщин отдельно, выведите результаты с поясняющим текстом. Найдите разницу между минимальными и максимальными значениями по зарплате у мужчин и женщин.

6. Выполните сортировку массива по полю зарплата.

 

Задача 2.

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