4531
Комментарий:
|
← Версия 4 от 2011-05-18 15:32:56 ⇥
4659
|
Удаления помечены так. | Добавления помечены так. |
Строка 1: | Строка 1: |
= Динамическая память. Работа с матрицами. = | |
Строка 13: | Строка 14: |
23.0.2. Динамическая память. realloc. Хранение массива неизвестной заранее длины. | 23.0.2. Динамическая память. realloc. Хранение массива неизвестной заранее длины. [[attachment:23.0.2.c]] |
Строка 15: | Строка 16: |
23.0.3. Работа с матрицами. Формулы для вычисления смещений. Краткая форма записи. | 23.0.3. Работа с матрицами. Формулы для вычисления смещений. Краткая форма записи. [[attachment:23.0.3.c]] |
Динамическая память. Работа с матрицами.
ВАЖНЫЕ замечания
Решение каждой задачи предполагает написание полной программы на Си. Эта программа должна читать входные данные из стандартного входного файла, а затем выдавать ответ в стандартный выходной файл. При запуске с терминала это будет означать ввод с клавиатуры и вывод на экран.
Для успешного решения задачи пока достаточно, чтобы программа правильно работала на правильных входных данных.
Обязательно сохраняйте файлы под именами, соответствующими задачам, например:
- 24.1.c
Задачи для разбора с демонстрацией
23.0.2. Динамическая память. realloc. Хранение массива неизвестной заранее длины. 23.0.2.c
23.0.3. Работа с матрицами. Формулы для вычисления смещений. Краткая форма записи. 23.0.3.c
Задачи для решения в машинном зале
24.1. С клавиатуры вводится последовательность целых чисел неизвестной длины, которая оканчивается числом 0 (сам 0 в последовательность не входит). Напечатать ее в обратном порядке.
24.3. С клавиатуры вводится целое число N > 0, затем последовательность из N целых чисел. Завести динамический массив P длины N из указателей на int (int **), заполнить его так, чтобы для каждого 0 <= i < N выполнялось следующее:
если i-й элемент последовательности неотрицательный, то в P[i] записан указатель на ячейку типа int, где лежит это число
если i-й элемент последовательности отрицательный, то в P[i] записан NULL.
Распечатать все элементы массива (как значение ячейки или как слово NULL).
Корректно освободить память перед окончанием работы.
Домашнее задание
24.10. Модифицировать 24.1 так, чтобы запросы к ОС за памятью происходили не слишком часто (т.е., все-таки, не N раз для N элементов).
24.11. Ввести с клавиатуры целые числа N, M -- количество строк и столбцов в матрице. Далее ввести элементы этой матрицы по строкам. Напечатать
- введенную матрицу в красивом виде
- все ее диагональные элементы (такие, у которых номер столбца совпадает с номером строки) по порядку.
- матрицу, полученную из исходной перестановкой строк в обратном порядке.
Для хранения матрицы использовать обычный указатель int *, по которому выделить и освободить нужное количество памяти.
24.12. Дополнить 24.11 выводом транспонированной матрицы (при необходимости, погуглить, что это такое).
24.13. Решить задачу 24.3, но с тройным уровнем адресации (массив указателей на указатели на int). Грамотно выделить и освободить память (вначале для массива, затем для нужных указателей на указатели, затем для самих ячеек типа int, освободить в обратном порядке).