Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Динамическое размещение данных
Если заранее неизвестно количество объектов, удобно использовать динамическое размещение данных, описав объект указателем. В С++ введены операции: захват памяти - new, освобождение, захваченной ранее памяти - delete. Операции new и delete для массивов: указатель = new тип [ количество ]; Результат операции – адрес начала области памяти для размещения данных, указанного количества и типа, при нехватке памяти – результат NULL. Операция освобождения памяти: delete [ ] указатель; Пример создания одномерного динамического массива: ... double *x; int i, n; ... puts(" Введите размер массива: "); scanf(“%d”, &n); x = new double [n]; if (x == NULL) { puts(" Предел размерности! "); return; } for (i=0; i<n; i++) // Ввод элементов массива scanf(“%lf”, &x[i]); ... delete [ ]x; // Освобождение памяти ...
Пример создания двуxмерного динамического массива: ... double **x; int n, m, i, j; puts(" Введите размеры n, m: "); scanf(“%d%d”, &n, &m); x = new double* [n]; // Захват памяти для указателей for (i=0; i<n; i++) // Захват памяти для элементов x[i] = new double [m]; ... for (i=0; i<n; i++) for (j=0; j<m; j++) x[i] [j] = i+j; // *(*(x+i)+j) = i+j; ... for (i=0; i<n; i++) // Освобождение памяти delete [ ] x[i]; delete [ ] x; ...
Варианты заданий Во всех заданиях предусмотреть динамический захват памяти, решение оформить в виде отдельной функции. На печать в виде таблиц вывести исходную и преобразованную матрицы (двухмерные динамические массивы). Исходная матрица формируется с клавиатуры 1. В вещественной матрице размером NxN найти максимальный и минимальный элементы. Переставить строки, в которых они находятся. Если они находятся в одной строке, выдать об этом сообщение. 2. Квадратную вещественную матрицу А размером N возвести в K-ю степень, т.е. вычислить: А1=А, А2=А·А, А3=А2·А и т.д. 3. Дана вещественная матрица размером NxM. Переставляя ее строки и столбцы, добиться того, чтобы наибольший элемент (один из них) оказался в верхнем левом углу. 4. Дана вещественная матрица размером NxM. Упорядочить ее строки по возрастанию наибольших элементов в строках матрицы.
5. Задан массив размером NxN, состоящий из 0 и 1. Повернуть элементы массива на 900 по часовой стрелке. 6. Элемент матрицы назовем седловой точкой, если он наименьший в своей строке и наибольший (одновременно) в своем столбце (или наоборот, наибольший в своей строке и наименьший в своем столбце). Для заданной целочисленной матрицы размером NxM напечатать индексы всех ее седловых точек. 7. Дана вещественная матрица размером N, все элементы которой различны. Найти скалярное произведение строки, в которой находится наибольший элемент матрицы, на столбец с наименьшим элементом. 8. Определить, является ли заданная целочисленная квадратная матрица размером N ортонормированной, т.е. такой, в которой скалярное произведение каждой пары различных строк равно 0, а скалярное произведение каждой строки на себя равно 1. 9. Определить, является ли заданная матрица N-го порядка магическим квадратом, т.е. такой, в которой сумма элементов во всех строках и столбцах одинакова. 10. Дана целочисленная матрица размером N. Найти сумму наименьших элементов ее нечетных строк и наибольших элементов ее четных строк. 11. Дана действительная квадратная матрица порядка N. Рассмотрим те элементы, которые расположены в строках, начинающихся с отрицательного элемента. Найти сумму тех из них, которые расположены соответственно ниже, выше и на главной диагонали матрицы. 12. Дана вещественная квадратная матрица порядка N. Получить целочисленную квадратную матрицу, в которой элемент равен 1, если соответствующий ему элемент исходной матрицы больше элемента, расположенного на главной диагонали. и равен 0 в противном случае. 13. Дана квадратная целочисленная матрица порядка N. Упорядочить элементы в строках по возрастанию. 14. Дана действительная квадратная матрица порядка N. Найти сумму и произведение элементов, расположенных ниже главной диагонали. 15. Дана действительная квадратная матрица порядка N. Найти сумму и произведение элементов, расположенных выше главной диагонали. 16. Получить целочисленную квадратную матрицу порядка N, элементами которой являются числа 1, 2, 3, …, расположенные в ней по спирали.
Контрольные вопросы 1. Укажите способы декларирования двухмерных массивов. 2. Формы (способы) работы с элементами двухмерного массива. 3. Что такое указатель на указатель? 4. Как связан указатель с двухмерным массивом? 5. Как создаются динамические массивы? ЗАДАНИЕ 7. Строки и массивы указателей
Цель работы: изучить особенности работы со строковыми объектами как одномерными символьными массивами, научиться использовать массивы указателей.
|
||||||
Последнее изменение этой страницы: 2020-11-28; просмотров: 107; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.218.55.14 (0.009 с.) |