|
Программирование >> Динамические структуры данных
Вариант 2 Дана целочисленная прямоугольная матрица. Определить количество столбцов, не содержащих ни одного нулевого элемента. Характеристикой строки целочисленной матрицы назовем сумму ее положительных четных элементов. Переставляя строки заданной матрицы, расположить их в соответствии с ростом характеристик. Вариант 3 Дана целочисленная прямоугольная матрица. Определить: 1) количество столбцов, содержащих хотя бы один нулевой элемент; 2) номер строки, в которой находится самая длинная серия одинаковых элементов. Вариант 4 Дана целочисленная квадратная матрица. Определить: 1) произведение элементов в тех строках, которые не содержат отрицательных элементов; 2) максимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы. Вариант 5 Дана целочисленная квадратная матрица Определить: 1) сумму элементов в тех столбцах, которые не содержат отрицательных элементов; 2) минимум среди сумм модулей элементов диагоналей, параллельных побочной диагонали матрицы. Вариант 6 Дана целочисленная прямоугольная матрица. Определить: 1) сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент; 2) номера строк и столбцов всех седловых точек матрицы. Примечание. Матрица А имеет седловую точку А, если А;, является минимальным элементом в i-й строке и максимальным в j-м столбце. Вариант 7 Для заданной матрицы размером 8 на 8 найти такие к, что к-я строка матрицы совпадает с к-м столбцом. Найти сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент. Вариант 8 Характеристикой столбца целочисленной матрицы назовем сумму модулей его отрицательных нечетных элементов. Переставляя столбцы заданной матрицы, расположить их в соответствии с ростом характеристик. Найти сумму элементов в тех столбцах, которые содержат хотя бы один отрицательный элемент. Вариант 9 Соседями элемента Ajj в матрице назовем элементы А, ci-lki+l,j-l<l< j+1, (к, 1) (i, j). Операция сглаживания матрицы дает новую матрицу того же размера, каждый элемент которой получается как среднее арифметическое имеющихся соседей соответствующего элемента исходной матрицы. Построить результат сглаживания заданной вещественной матрицы размером 10 на 10. В сглаженной матрице найти сумму модулей элементов, расположенных ниже главной диагонали. Вариант 10 Элемент матрицы называется локальным минимумом, если он строго меньше всех имеющихся у него соседей. Подсчитать количество локальных минимумов заданной матрицы размером 10 на 10. Найти сумму модулей элементов, расположенных выше главной диагонали. Вариант 11 Коэффициенты системы линейных уравнений заданы в виде прямоугольной матрицы. С помощью допустимых преобразований привести систему к треугольному виду. Найти количество строк, среднее арифметическое элементов которых меньше заданной величины. Вариант 12 Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями. Найти номер первой из строк, содержащих хотя бы один положительный элемент. Вариант 13 Осуществить циклический сдвиг элементов прямоугольной матрицы на п элементов вправо или вниз (в зависимости от введенного режима), п может быть больше количества элементов в строке или столбце. Вариант 14 Осуществить циклический сдвиг элементов квадратной матрицы размерности М X N вправо на к элементов таким образом: элементы 1-й строки сдвигаются в последний столбец сверху вниз, из него - в последнюю строку справа налево, из нее - в первый столбец снизу вверх, из него - в первую строку; для остальных элементов - аналогично. Вариант 15 Дана целочисленная прямоугольная матрица. Определить номер первого из столбцов, содержащих хотя бы один нулевой элемент. Характеристикой строки целочисленной матрицы назовем сумму ее отрицательных четных элементов. Переставляя строки заданной матрицы, расположить их в соответствии с убыванием характеристик. Вариант 16 Упорядочить строки целочисленной прямоугольной матрицы по возрастанию количества одинаковых элементов в каждой строке. Найти номер первого из столбцов, не содержащих ни одного отрицательного элемента. Вариант 17 Путем перестановки элементов квадратной вещественной матрицы добиться того, чтобы ее максимальный элемент находился в левом верхнем углу, следующий по величине - в позиции (2,2), следующий по величине - в позиции (3,3) и т. д., заполнив таким образом всю главную диагональ. Найти номер первой из строк, не содержащих ни одного положительного элемента. Вариант 18 Дана целочисленная прямоугольная матрица. Определить: 1) количество строк, содержащих хотя бы один нулевой элемент; 2) номер столбца, в котором находится самая длинная серия одинаковых элементов. Вариант 19 Дана целочисленная квадратная матрица. Определить: 1) сумму элементов в тех строках, которые не содержат отрицательных элементов; 2) минимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы. Вариант 20 Дана целочисленная прямоугольная матрица. Определить: 1) количество отрицательных элементов в тех строках, которые содержат хотя бы один нулевой элемент; 2) номера строк и столбцов всех седловых точек матрицы. Примечание. Матрица А имеет седловую точку А., если Aj является минимальным элементом в i-й строке и максимальным в j-м столбце. СЕМИНАР 5 Строки и файлы Теоретический материал: с. 63-65,89-93,411-414. В С++ есть два вида строк: С-строки и класс стандартной библиотеки С++ stri ng. С-строка представляет собой массив символов, завершающийся символом с кодом О. Класс string более безопасен в использовании, чем С-строки, но и более ресурсоемок. Для грамотного использования этого класса требуется знание объектно-ориентированного программирования, поэтому мы рассмотрим его во второй части практикума, а на этом семинаре ограничимся рассмотрением С-строк. Описание строк Память под строки, как и под другие массивы, может выделяться как компилятором, так и непосредственно в программе. Длина динамической строки может задаваться выражением, длина не-динамической строки должна быть только константным выражением. Чаще всего длина строки задается частным случаем константного выражения - константой. Удобно задавать длину с помощью именованной константы, поскольку такой вариант, во-первых, лучше читается, а во-вторых, при возможном изменении длины строки потребуется изменить программу только в одном месте: const int len str - 80; char str[len str]: При задании длины необходимо учитывать завершающий нуль-символ. Например, в строке, приведенной выше, можно хранить не 80 символов, а только 79. Строки можно при описании инициализировать строковыми константами, при этом нуль-символ в позиции, следующей за последним заданным символом, формируется автоматически: char а[100] Never trouble trouble : Этот вид строк, как вы догадались, пришел в С++ из язьиса С. Если строка при определении инициализируется, ее размерность можно опускать (компилятор сам выделит память, достаточную для размещения всех символов строки и завершающего нуля): char а[] = Never trouble trouble : 22 символа Для размещения строки в динамической памяти надо описать указатель на char, а затем вьщелить память с помощью new или mal 1 ос (первый способ предпочтительнее): char *р new char [m]: char *q = (char *)malloc( m * sizeof(char)): Естественно, что в этом случае длина строки может быть переменной и задаваться на этапе выполнения программы. Динамические строки, как и другие динамические массивы, нельзя инициализировать при создании. Оператор char *str Never trouble trouble создает не строковую переменную, а указатель на строковую константу, изменить которую невозможно. Ввод-вывод строк Для ввода-вывода строк используются как уже известные нам объекты cin и cout, так и функции, унаследованные из библиотеки С. Рассмотрим сначала первый способ: #include <iostream.h> int main(){ const int n 80: char s[n]: cin s: CQut s endl: return 0: Как видите, строка вводится точно так же, как и переменные известных нам типов. Запустите программу и введите строку, состоящую из одного слова. Запустите программу повторно и введите строку из нескольких слов. Во втором случае выводится только первое слово. Это связано с тем, что ввод выполняется до первого пробельного символа (то есть пробела, знака табуляции или символа перевода строки \пУ. Можно ввести слова входной строки в отдельные строковые переменные: #include <iostream.h> int main{){ const int n - 80: char s[n]. t[n]. r[n]: cin s t r: cout s endl t endl r endl: return 0: } Если BO вводимой строке больше символов, чем может вместить выделенная для ее хранения область, поведение программы не определено. Скорее всего, она завершится аварийно. Если требуется ввести строку, состоящую из нескольких слов, в одну строковую переменную, используются методы getl i ne или get класса i stream, объектом которого является ci п. Во второй части практикума мы изучим, что такое методы класса*, а пока можно пользоваться ими как волшебным заклинанием, не вдумываясь в смысл. Единственное, что нам пока нужно знать, это синтаксис вызова метода - после имени объекта ставится точка, а затем пишется имя метода: finclude <iostream.h> int main(){ const int n = 80: char s[n]: cin.getline(s. n): cout s endl: cin.get(s. n): cout s endl: return 0: Метод getl i ne считывает из входного потока n - 1 символов или менее (если символ перевода строки встретится раньше) и записывает их в строковую переменную S. Символ перевода строки также считывается (удаляется) из входного потока, но не записывается в строковую переменную, вместо него размещается завершающий 0. Если в строке исходных данных более п - 1 символов, следующий ввод будет выполняться из той же строки, начиная с первого несчитанного символа. Метод get работает аналогично, но оставляет в потоке символ перевода строки. В строковую переменную добавляется завершающий 0. Никогда не обращайтесь к разновидности метода get с двумя аргументами два раза подряд, не удалив \п из входного потока. Например: cin.get(s. п): i - считывание строки 2 - вывод строки 3 - считывание строки 4 - вывод строки 5 - считывание строки 6 - вывод строки cout S endl cin.get(s. n): cout s . endl cin.get(s. n): cout s endl cout Конец - делу венец endl: При выполнении этого фрагмента вы увидите на экране первую строку, выведенную оператором 2, а затем завершающее сообщение, выведенное оператором 7. Какие бы прекрасные строки вы ни ввели с клавиатуры в надежде, что они будут прочитаны операторами 3 и 5, метод get в данном случае уткнется в символ \п. оставленный во входном потоке от первого вызова этого метода (оператор 1). В результате будут считаны и, соответственно, выведены на экран пустые строки (строки, содержащие О символов). А символ \п так и останется торчать во входном потоке. Возможное решение этой проблемы - удалить символ \п из входного потока путем вызова метода get без параметров, то есть после операторов 1 и 3 нужно вставить вызов ci п.get{). Синонимом термина метод является функция-член класса . 2 Символ перевода строки \п появляется во входном потоке, когда вы нажимаете клавишу Enter.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |