Информатика: Методические указания к лабораторным работам № 1-5. Функции. Обработка символьных данных. Организация работы с файлами, страница 16

Вариант 17

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

Вариант 18

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

Вариант 19

Сформировать и заполнить случайными числами прямоугольную матрицу размером  n×m  (n и m ввести с клавиатуры). Вычислить суммы элементов в столбцах до  k-й  строки. Полученные суммы вставить как строку перед  k-й  строкой. Создать перегруженную функцию вставки строки в матрицу с произвольным типом эле-ментов.

Вариант 20

Добавить в двумерный динамический массив строку из одних нулей после каждой строки, сумма элементов которой больше заданного числа  S.

Контрольные вопросы

1.  Перечислите основные элементы  STL.

2.  В чем преимущества контейнераvectorперед обычными дина-мическими массивами?

3.  Что такое итератор?

4.  Как объявить и инициализировать вектор?

5.  Что возвращает функция  size()  и функция  capacity()?

6.  В чем разница в операциях  v[index]  и  v.at(index)?

7.  Как правильно передать одномерный вектор в функцию? Напи-шите прототип такой функции.

8.  Как правильно передать двумерный вектор в функцию? Напи-шите прототип такой функции.

9.  Как определить, сколько раз произошло перераспределение па-мяти при заполнении массива?

10.  Как найти сумму и произведение элементов вектора, не исполь-зуя операторы цикла?

 



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

ОБРАБОТКА СИМВОЛЬНЫХ ДАННЫХ

Цель работы

Знакомство с функциями класса string для создания строк, их модификации и поиска. Получение на их основе навыков обработки символьной информации текстов.

Пояснения к работе

При работе со строками часто возникают недорозумения. Как пра-вило, это происходит из-за того, что термин «строка» может означать совершенно разные вещи – обычный символьный массив типа char* и экземпляр класса string. Обычно термином «строка»обозначают объект строкового типа стандартной библиотеки С++ (string).«Тра-диционные» же строки типа char*называют С-строками.

Строки типа stringзначительно удобнее для работы, чем С-строки. Это выражается в следующем.

1.  Так как строка string – это последовательный контейнер с символами(vector<char>), то при изменении ее размеров происходит автоматическое выделение памяти, что исключает ошибки c распределением памяти, характерные для строк типа char*.

2.  Класс stringсодержит почти все методы, изложенные в работе № 2, по отношению к векторам. Кроме того, в этом классе можно использовать множество других полезных методов, например substr, findи др.

3.  Класс string позволяет работать со строками как с обычными типами, не создающими проблем для пользователей. Это означает, что строки можно копировать, присваивать и сравнивать как базовые типы (int, floatи т. д.), не беспокоясь о возможной нехватке памяти или раз-мере внутреннего блока, предназначенного для хранения символов.

Строки типа string, в отличие от строк char*, не требуют завер-шающего нулевого символа. К отдельным сиволом строки можно по-лучит доступ операцией [ind] (см. табл. 4 в работе 2 и замечание к ней).

Создание и инициализация строк

Приведенный ниже пример (пример 1) демонстрирует способы инициализации строк.

Пример 1

stringstr1;// Пустая строка

stringstr2(«Люблю грозу в начале мая…»);// Инициализация через

// конструктор

stringstr3 = «Разделяй и властвуй» ;

stringstr4(str3);// Строка str4инициализируется строкой str3