Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторные и контрольные работы ОАиП (6 вариант) - 1 семестр

.pdf
Скачиваний:
6
Добавлен:
15.11.2023
Размер:
693.02 Кб
Скачать
Задание 2. Дана последовательность действительных чисел. Необходимо сформировать новую последовательность по некоторому правилу. Для представления исходной и результирующей последовательности используйте библиотечный шаблон vector.
Новая последовательность сначала должна содержать все элементы исходной, значение которых по модулю меньше 1, затем - все остальные (с сохранением исходного относительного порядка).
Пример. Ввод-вывод вектора из дробных чисел.
21
}
cout << "count = " << count << endl; return 0;
20:
21:
22:
23:
24:
25:
26: 27: }
// перебираем (почти) все символы строки for(unsigned i=1;i<s.size();i++) {
// нашли конец слова?
if (s.at(i-1)!=' ' && s.at(i)==' ') count++;
Лабораторная работа №17
Задание 1. Выполните задания с использованием библиотечного класса string.
Дана строка S. Требуется удалить из строки S текст, заключенный в скобки (вместе со скобками). Если такового нет, то строку S изменять не требуется. (Например, "Бегемот (гиппопотам) живет в Африке" → "Бегемот живет в Африке").
Пример. Подсчитать количество слов в строке.
1: #include <iostream> 2: #include <string>
3: using namespace std;
4:
5: int main(int argc, char* argv[])
6: {
7: // ввод массива символов с клавиатуры
8: char str[100];
9: cin.getline(str,sizeof(str));
10:
11: // создание объекта-строки на основе массива символов
12: string s(str);
13:
14: // приклеить пробел в конец строки
15: s+=' ';
16:
17: // счетчик
18: unsigned count=0;
19:

28:#include <iostream>

29:#include <vector>

30:using namespace std;

31:

32:int main(int argc, char* argv[])

33:{

34:unsigned N=5;

35:

36:// объявление вектора дробных чисел

37:vector<double> a;

38:

39:for(unsigned i=0;i<N;i++) {

40:double x;

41:// считываем дробное число с клавиатуры

42:cout << "a[" << i << "] = ";

43:cin >> x;

44:// и добавляем его в конец вектора

45:a.push_back(x);

46:}

47:

48:// вывод вектора на экран

49:for(unsigned i=0;i<a.size();i++) {

50:cout << "a[" << i << "] = " << a[i] << endl;

51:}

52:return 0;

53:}

22

Лабораторная работа №18

Задание 1. Дана последовательность действительных чисел. Необходимо вычислить: сумму элементов последовательности от начала до последнего положительного элемента (включительно).

Задание 2. Дана последовательность действительных чисел. Необходимо используя алгоритм сортировки вставками сформировать новую последовательность, упорядоченную: а) по возрастанию; б) по убыванию.

Указания.

1.Для представления последовательности необходимо использовать библиотечный шаблон vector.

2.Для доступа к элементам последовательности необходимо использовать

итераторы.

3.Ввод, вывод и обработку последовательностей реализуйте в отдельных функциях.

Пример. Ввод-вывод вектора из дробных чисел с помощью итераторов.

23

54: #include <iostream> 55: #include <vector> 56: #include <iterator> 57: #include <windows.h> 58: using namespace std;

59:

60: int main(int argc, char* argv[]) { 61: SetConsoleCP(1251);

62: SetConsoleOutputCP(1251);

63:

64: // объявление вектора дробных чисел

65: vector<double> v;

66:

67: /*******************************************************************

68: * считывание вектора из потока с помощью итераторов *

69: *******************************************************************/

70:

71: cout<<"Введите последовательность дробных чисел (конец ввода - Ctrl+Z)\n";

72:

73: // объявление итератора для чтения дробных чисел из потока (cin)

74: istream_iterator<double> cin_iter(cin);

75: // итератор - конец потока (любого) дробных чисел

76: istream_iterator<double> cin_end;

77:

78: while(cin_iter!=cin_end) { // дошли до конца потока?

79: double x=*cin_iter; // взять текущий элемент из потока 80: v.push_back(x); // добавить его в вектор

81: cin_iter++; // перейти к следующему элементу потока

82: }

83:

84: /*******************************************************************

85: * вывод вектора в поток с помощью итераторов *

86: *******************************************************************/

87:

88: cout<<"Последовательность дробных чисел:\n";

89:

90: // объявление итератора - указателя на элемент вектора

91: vector<double>::iterator iter;

92:

93: iter=v.begin(); // начинаем с начала вектора

94: while(iter<v.end()) { // дошли до конца вектора?

95: cout << *iter << endl; // обработка текущего элемента

96: iter++; // перейти к следующему элементу вектора

97: }

98:

99: system("pause");

100:

101: return 0;

102: }

24

Лабораторная работа №19

Задание 1. Изучите реализации информационной системы на основе стандартных контейнеров и алгоритмов.

Задание 2. Разработайте информационную систему в соответствии с вариантом задания. Реализуйте функции для ввода, вывода данных, упорядочения по некоторому признаку, формирования нового списка.

Ящик электронной ПОЧТЫ: отправитель СООБЩЕНИЯ, текст сообщения, даты отправления. Упорядочьте по убыванию даты отправления. Сформируйте все сообщения указанного отправителя.

25

Лабораторная работа №20

Создать консольное приложение, удовлетворяющее следующим требованиям:

1.Использовать возможности ООП: классы, наследование, полиморфизм, инкапсуляция, абстракцию. Обязательно создать абстрактный класс!!!!

2.Каждый класс должен иметь исчерпывающее смысл название и информативный состав.

3.Работа с консолью или консольное меню должно быть минимальным.

4.Для хранения параметров инициализации использовать файлы.

Камни. Определить иерархию драгоценных и полудрагоценных камней. Отобрать камни для ожерелья. Посчитать общий вес (в каратах) и стоимость. Провести сортировку камней ожерелья на основе ценности. Найти камни в ожерелье, соответствующие заданному диапазону параметров прозрачности.

26

Лабораторная работа №21

1. Написать программу «Англо-русский и русско-английский словарь».

«База данных» словаря должна содержать синонимичные варианты перевода слов.

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

Загрузка «базы данных» словаря (из файла).

Выбор режима работы: англо-русский, русско-английский.

Вывод вариантов перевода заданного английского слова.

Вывод вариантов перевода заданного русского слова.

Базу данных словаря реализовать в виде двух контейнеров типа set

2.Написать программу «Автоматизированная информационная система на железнодорожном вокзале».

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

– первоначальный ввод данных в информационную систему (с клавиатуры или из файла);

– вывод сведений по всем поездам;

– вывод сведений по поезду с запрошенным номером;

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

Хранение данных организовать с применением контейнерного класса set.

3.Написать программу учета заявок на обмен квартир и поиска вариантов обмена.

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

– ввод заявки на обмен;

– поиск в картотеке подходящего варианта: при совпадении требований и предложений по количеству комнат и этажности, и различии по показателю «площадь» в пределах 10% выводится соответствующая карточка и удаляется из списка, в противном случае поступившая заявка включается в картотеку;

– вывод всей картотеки.

Хранение данных организовать с применением контейнерного класса set.

4.Написать программу «Моя записная книжка».

Предусмотреть возможность работы с произвольным числом записей, поиска записи по какому-либо признаку (например, по фамилии, дате рождения или

27

номеру телефона), добавления и удаления записей, сортировки по разным полям. Хранение данных организовать с применением контейнерного класса set.

5. Составить программу учета заявок на авиабилеты.

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

добавление заявок в список;

удаление заявок;

вывод заявок по заданному номеру рейса и дате вылета;

вывод всех заявок, упорядоченных по пунктам назначения;

вывод всех заявок, упорядоченных по датам вылета.

Хранение данных организовать с применением контейнерного класса multlmap, в качестве ключа использовать «пункт назначения».

6.Составить программу моделирования работы автобусного парка.

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

– начальное формирование данных о всех автобусах в парке в виде списка (ввод с клавиатуры или из файла);

– имитация выезда автобуса из парка: вводится номер автобуса; программа удаляет данные об этом автобусе из списка автобусов, находящихся

в парке, и записывает эти данные в список автобусов, находящихся на маршруте;

– имитация въезда автобуса в парк: вводится номер автобуса; программа удаляет данные об этом автобусе из списка автобусов, находящихся на маршруте, и записывает эти данные в список автобусов, находящихся в парке;

– вывод сведений об автобусах, находящихся в парке, и об автобусах, находящихся на маршруте, упорядоченных по номерам автобусов;

– вывод сведений об автобусах, находящихся в парке, и об автобусах, находящихся на маршруте, упорядоченных по номерам маршрутов. Хранение всех необходимых списков организовать с применением контейнерного класса mар, в качестве ключа использовать «номер автобуса».

7.Написать программу «Англо-русский и русско-английский словарь». «База данных» словаря должна содержать синонимичные варианты перевода слов. Программа должна обеспечивать выбор с помощью меню и выполнение одной из следующих функций:

– Загрузка «базы данных» словаря (из файла).

– Выбор режима работы: англо-русский, русско-английский.

– Вывод вариантов перевода заданного английского слова.

28

– Вывод вариантов перевода заданного русского слова.

Базу данных словаря реализовать в виде двух контейнеров типа mар.

8. Написать программу «Моя записная книжка».

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

9. Написать программу учета книг в библиотеке.

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

добавление данных о книгах, вновь поступающих в библиотеку;

удаление данных о списываемых книгах;

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

выдача сведений о всех книгах, упорядоченных по годам издания. Хранение данных организовать с применением контейнерного класса multimap, в качестве ключа использовать «фамилию и инициалы автора».

29