Лабораторная работа 3
РАБОТЫ СО СТРУКТУРАМИ
Цель работы: Закрепление знаний о структурах, составление программ с применением структур.
Теоретическое обоснование
Работа со строками
Строки в языке С++ представляются массивами символов. Признаком конца строки является ноль.
Для объявления строки длиной N символов, необходимо объявить массив char размером N+1 символ, т. к. последний символ строки является нулем:
char[5]=”word”; //правильно, 4 буквы, последний символ 0.
char[5]=”слово”; //неправильно, не хватает одного символа.
Для работы со строками в языке С++ используются стандартные функции, которые описаны в библиотечном файле string.h. Рассмотрим эти функции.
Функция определения длины строки strlen (s). Определяет длину строки s.
Функция копирование строки strcpy (s1, s2). Копирует содержимое строки s2 в строку s1. Массив s1 должен быть достаточно вместительным. Если при копировании места не хватает, то компилятор не выдает сообщение об ошибке и программа может работать, но неправильно.
Функция сцепления строк strcat (s1, s2). Присоединяет строку s2 к строке s1 и помещает новую строку s1. Строка s2 не изменяется. При этом, как и в предшествующем случае, нет никакого контроля. Нулевой байт строки s1 заменяется первым символом строки s2. Новая строка автоматически завершается нулевым байтом.
Функция сравнения строк strcmp (s1, s2). Результат: минус 1 –первая строка меньше второй; 1 – первая строка больше второй; 0 – строки равны.
Функция поиска подстроки в строке strstr (s1, s2). Поиск в строке s1 строки s2. Результат: 0 – строка не найдена; не 0 – номер позиции с которой строка s2 входит в строку s1.
Функция поиска символа в строке strchr (s, smb). Поиск символа smb в строке s. Результат: 0 – символ не найден; не 0 – номер позиции найденного символа в строке.
Функция strupr (s) делает все буквы строки s прописными (заглавными).
Функция strlwr (s) делает все буквы строки s строчными.
Пример 6.1. Программа, в которой к одной строке прибавляется другая строка, а потом в конец второй строки ставит восклицательный знак.
#include <string.h>
#include <iostream.h>
int main(){
char one[4]="ura"; //описание первой строки
char two[6]=""; // описание второй пустой строки
strcat(two,one); //добавление ко второй строке первой
cout<<two<<"\n";
strcat(two,"!"); // добавление ко к второй строке восклицательного знака
cout<<two<<"\n";
return 0;}
Пример 5.2. Дан массив из трех строк. Программа выводит на экран строки из массива в которых есть буква «а».
#include <string.h>
#include <iostream.h>
int main(){
char s[3][5]={"ghaj","rtrd","fgah"}; //описание массива из трех строк
for (int n=0;n<3;n++) //задаем цикл по строкам
if(strchr(s[n],'a')) //проверка наличия символа «а» в текущей строке
cout<<s[n]<<"\n";
return 0;}
Структуры
В массивах все элементы имеют одинаковый тип, если необходимо использовать составной тип данных, содержащий элементы различных типов используют структурированный тип данных.
Структура в языке Си++ состоит из фиксированного числа элементов одного или нескольких типов. Формат описания структуры:
struct имя_структуры
{ тип_поля_1 имя_поля_1;
тип_поля_2 имя_поля_2;
…
тип_поля_N имя_ поля_N;};
Элементами или полями структуры могут быть переменные, массивы, ранее определенные структуры. Обращения к какому-либо элементу структуры имеет следующий формат: имя_структуры. имя_поля.
Пример 6.3. Структура содержит сведения о студентах: ФИО студента, курс, возраст.
struct student
{ char name[50];
int kurs;
int age; };
Чтобы использовать структуру необходимо объявить переменные типа struct student:
struct student s1, s2;
Переменные s1 и s2 являются переменными типа struct student. Компилятор автоматически выделит память под эти переменные. Обращение к полям структуры:
s1.kurs=3;
s1.age=20;
Для переменных s1 и s2 возможно присваивание s1=s2.
Структуры могут быть объединены в массивы структур. Объявление массива структур делается аналогично объявлению массива переменных. Например, если нужно хранить информацию о 10 студентах, то объявление массива будет следующим
struct student stud1[10];
Здесь stud1 – имя массива структур, а stud1[0] – это первая структура, stud1[1] – вторая... stud1[9] – десятая структура. Чтобы получить доступ к полю age пятой структуры нужно написать
stud1[4].age
Чтобы получить доступ к полю kurs первой структуры нужно написать
stud1[0].kurs
Методика и порядок выполнения работы
1. Изучите теоретическое обоснование.
2. Проанализируйте, введите и выполните примеры 6.1 и 6.2.
3. Составьте блок-схемы и выполните программы работы со строками согласно вариантам (таблица 6.1), введите исходные данные, проанализируйте полученные результаты.
4. Проанализируйте, введите и выполните приведенный пример.
Дана информация о пяти товарах. Структура tovar содержит поля: наименование товара namе[20]; количество товара kol; цена товара cena. Определить суммарное количество товара.
//struct.c работа со структурами
#include <iostream.h>
struct tovar{char name[20]; int kol; float cena;} t[5];
int SumKol, N=5; //суммарное количество товаров
int main() {
for (i=0; i<N; i++){
cout<< "\n Введите наименование товара ";
cin >> t[i].name;
cout<< "\n Введите количество товара, шт";
cin >> t[i].kol);
cout<< "\n Введите цену товара, руб/кг ");
cin >> t[i]1.cena);}
SumKol=0;
for (i=0; i<N; i++) SumKol+= t[i].kol;
cout<< "Суммарное количество товара ", SumKol, " шт\n");
return 0;}
5. Составьте блок-схему и выполните программу работы со структурами согласно вариантам (таблица 6.2), введите исходные данные, проанализируйте полученный результат.
Таблица 6.1– Варианты заданий
№ вар. |
Условия заданий |
1 |
2 |
1 |
Дан массив из N структур. Структура содержит поля: фамилия работника, его должность и стаж работы; и вывести общее число человек, работающих на предприятии менее 5 лет. |
2 |
Дан массив из N структур. Структура содержит поля: фамилия, количество вещей, общий вес, рейс. Вывести на экран сведения о багаже, общий вес которого больше 20 кг. |
|
|
|
Продолжение таблицы 6.1 |
1 |
2 |
3 |
Дан массив из N структур. Структура содержит поля: название поставщика, наименование товара, количество. Вывести информацию о товарах, поставляемых заданным поставщиком. |
4 |
Дан массив из N структур. Структура содержит поля: название газеты или журнала, стоимость одного экземпляра, количество экземпляров в год. Вывести информацию об изданиях стоимостью меньше средней. |
5 |
Дан массив из N структур. Структура содержит поля: фамилия, имя, пол, год рождения, месяц рождения. Вывести на экран дисплея фамилии и имена студентов мужского пола, родившихся весной. |
6 |
Дан массив из N структур. Структура содержит поля: номер поезда, станция назначения, время отправления, время в пути. С экрана вводится интересующая станция. Вывести информацию о поездах, идущих к данной станции. |
7 |
Дан массив из N структур. Структура содержит поля: фамилия, имя, номер автомобиля, марка автомобиля, цвет. С клавиатуры вводится интересующая марка автомобиля. Вывести сведения о владельце. |
8 |
Дан массив из N структур. Структура содержит поля: название газеты или журнала, стоимость одного экземпляра, количество экземпляров в год. Вывести информацию об изданиях стоимостью больше средней. |
9 |
Дан массив из N структур. Структура содержит поля: вид спорта, количество секций, количество спортсменов в секции. Вывести общее число спортсменов. |
10 |
Дан массив из N структур. Структура содержит поля: марка автобуса, скорость, вместимость. Вывести общую вместимость автобусов со скоростью не ниже 80 км/ч. |
11 |
Дан массив из N структур. Структура содержит поля: наименование фабрики, год основания, число работающих. Вывести общее число работающих на фабриках основания до 2010 года. |
12 |
Дан массив из N структур. Структура содержит поля: фамилия, группа, успеваемость. Вывести количество отличников. |
|
|
|
Продолжение таблицы 6.1 |
|
2 |
13 |
Дан массив из N структур. Структура содержит поля: фамилия работника, его должность и стаж работы. Вывести общее число человек, работающих на предприятии более 10 лет. |
14 |
Дан массив из N структур. Структура содержит поля: название пункта назначения, номер поезда, цена билета. Вывести количество поездов, на которые цена билета меньше 500 рублей. |
15 |
Дан массив из N структур. Структура содержит поля: автор, название, год издания. Найти среднеарифметический год издания. Вывести названия книг, год издания которых меньше среднеарифметического года. |
16 |
Дана информация о абитуриентах. Структура имеет вид: ФИО, оценки по трем вступительным экзаменам. Вывести информацию о тех абитуриентах, которые имеют средний балл больше, введенного с клавиатуры. |
17 |
Дана информация о вкладчиках в сберкассы. Структура имеет вид: № счета, фамилия, социальное положение, величина вклада. Вывести данные о том, сколько среди вкладчиков служащих, рабочих и колхозников. |
18 |
Дана информация о больных. Структура имеет вид: фамилия, возраст, пол, давление. Вывести данные о больных женского пола с повышенным давлением (больше 140), затем о мужчинах с пониженным давлением. |
19 |
Дана информация о студентах. Структура имеет вид: фамилия, год рождения, место рождения, факультет. Вывести данные о старших по возрасту студентах, предполагая, что год рождения может быть одинаков. |
20 |
Дана информация о студентах. Структура имеет вид: № зачетки, фамилия, год рождения, факультет. Вывести данные о студентах по факультетам и определить, где их больше всего. |
21 |
Дана информация о комнатах в общежитии. Структура имеет вид: фамилии, номер комнаты, площадь. Вывести данные о комнате, в которой наименьшая площадь (возможно размер площади повторяется). |
22 |
Дана информация о квартирах. Структура имеет вид: фамилия владельца, площадь, число комнат, этаж. Вывести данные о квартирах с самой большой площадью и самой маленькой. |
23 |
Дана информация о клиентах фирмы и договорах, заключенных с ними в виде: фамилия клиента, месяц истечения договора, год истечения договора. Вывести на экран список клиентов, договор с которыми истекает в августе 2008 года. |
24 |
Дана информация об автомобилях: марка автомобиля, страна изготовитель, стоимость. Вывести на экран сведения об автомобилях марка которых вводится с клавиатуры, а стоимость находится в интервале от 70 до 520 тыс.руб |
25 |
Дана информация о протоколе лыжных гонок. Для каждого участника вводится фамилия, время старта (часы, минуты), время финиша (часы, минуты). Вывести на экран дисплея фамилии участков, выполнивших норму ГТО, которая вводится в минутах с клавиатуры. |
26 |
Дана информация о школах. Структура имеет вид: номер школы, год, количество выпускников, число поступивших в ВУЗы. Вывести данные о школе с самым большим отношением числа поступивших к числу выпускников. |
27 |
Дана информация о поездах, отправляющихся с Ленинградского вокзала г.Москвы: номер поезда, станция назначения, время отправления, время в пути. Вывести на экран информацию о поездах, следующих в Санкт-Петербург и находящихся в пути менее 8 часов. Посчитать среднее время в пути. |
28 |
Дана информация о магазинах, продающих компьютеры. Структура имеет вид: фирма-производитель, цена, количество. Вводится сумма имеющихся в наличии денег. Вывести данные о компьютерах, которые можно купить на эту сумму по максимуму. |
29 |
Дана информация о кондитерском магазине: наименование торта, цена, количество, срок годности, калорийность. Вывести на экран информацию о тортах, с истекающим сроком годности, посчитать сумму убытка. |
30 |
В чемпионате по волейболу принимают участие 5 команд. Дана информация: название команды, игра1, игра2, игра3 (где выигрыш -2очка, проигрыш -0, ничья-1). Каждая команда сыграла по 3 игры. Вывести на экран названия трех победителей (по числу очков) и количество побед каждой команды. |