Differences between revisions 1 and 2
Revision 1 as of 2011-02-08 14:13:28
Size: 1139
Editor: PavelSutyrin
Comment:
Revision 2 as of 2011-02-15 13:15:09
Size: 4531
Editor: PavelSutyrin
Comment:
Deletions are marked like this. Additions are marked like this.
Line 13: Line 13:
24.0.1. 23.0.2. Динамическая память. realloc. Хранение массива неизвестной заранее длины.

23.0.3. Работа с матрицами. Формулы для вычисления смещений. Краткая форма записи.
Line 17: Line 19:
24.1.
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).

Корректно освободить память перед окончанием работы.
Line 21: Line 32:
24.10. 24.10. Модифицировать 24.1 так, чтобы запросы к ОС за памятью происходили не слишком часто (т.е., все-таки, не N раз для N элементов).

24.11. Ввести с клавиатуры целые числа N, M -- количество строк и столбцов в матрице. Далее ввести элементы этой матрицы по строкам. Напечатать
  1. введенную матрицу в красивом виде
  1. все ее диагональные элементы (такие, у которых номер столбца совпадает с номером строки) по порядку.
  1. матрицу, полученную из исходной перестановкой строк в обратном порядке.

Для хранения матрицы использовать обычный указатель {{{int *}}}, по которому выделить и освободить нужное количество памяти.

24.12. Дополнить 24.11 выводом транспонированной матрицы (при необходимости, погуглить, что это такое).

24.13. Решить задачу 24.3, но с тройным уровнем адресации (массив указателей на указатели на {{{int}}}). Грамотно выделить и освободить память (вначале для массива, затем для нужных указателей на указатели, затем для самих ячеек типа {{{int}}}, освободить в обратном порядке).

ВАЖНЫЕ замечания

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

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

Обязательно сохраняйте файлы под именами, соответствующими задачам, например:

  • 24.1.c

Задачи для разбора с демонстрацией

23.0.2. Динамическая память. realloc. Хранение массива неизвестной заранее длины.

23.0.3. Работа с матрицами. Формулы для вычисления смещений. Краткая форма записи.

Задачи для решения в машинном зале

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 -- количество строк и столбцов в матрице. Далее ввести элементы этой матрицы по строкам. Напечатать

  1. введенную матрицу в красивом виде
  2. все ее диагональные элементы (такие, у которых номер столбца совпадает с номером строки) по порядку.
  3. матрицу, полученную из исходной перестановкой строк в обратном порядке.

Для хранения матрицы использовать обычный указатель int *, по которому выделить и освободить нужное количество памяти.

24.12. Дополнить 24.11 выводом транспонированной матрицы (при необходимости, погуглить, что это такое).

24.13. Решить задачу 24.3, но с тройным уровнем адресации (массив указателей на указатели на int). Грамотно выделить и освободить память (вначале для массива, затем для нужных указателей на указатели, затем для самих ячеек типа int, освободить в обратном порядке).

LecturesVMSH/C/2011-02-15 (last edited 2011-05-18 12:32:56 by PavelSutyrin)