Динамические массивы: Методическое пособие к расчетному заданию по дисциплине «Основы информационных технологий и программирования»

Страницы работы

24 страницы (Word-файл)

Содержание работы

Расчетная работа № 1

ДИНАМИЧЕСКИЕ МАССИВЫ

Цель работы – закрепление навыков работы с подпрограммами-процедурами и текстовыми файлами данных;  изучение техники программирования с использованием динамических массивов.

ТРЕБОВАНИЯ К ВЫПОЛНЕНИЮ РАСЧЕТНОЙ РАБОТЫ

1.  Выполнить требуемые вычисления в виде консольного приложения с использованием среды программирования Delphi.

2.  Исходные данные расположить в текстовом файле.

3.  Для каждого пункта задания вычисления оформить в виде отдельной процедуры.

4.  Результаты расчетов вывести в другой текстовый файл.

5.  Пояснительная записка должна быть оформлена на листах формата А4 и переплетена (сшита).

6.  Текст оформить в текстовом процессоре Word.

7.  Формат текста (кроме титульного листа): шрифт TimesNewRoman, 12 пунктов, через 1 интервал. Шрифт текста программы – Arial, 10 пунктов.

8.  Страницы должны быть пронумерованы (вверху страницы, посередине).

9.  В верхний колонтитул включить ФИО, № группы автора и дату создания (справа).

10.  Пояснительная записка должна включать следующие разделы:

·  титульный лист;

·  введение (какие инструментальные и программные средства были использованы);

·  содержание пояснительной записки (оглавление разделов с указанием номеров страниц)

·  постановка задачи (вариант);

·  блок-схема расчетов (желательно);

·  листинг файла с исходными данными;

·  исходные тексты программы с указанием имен файлов;

·  листинг файла с выходными данными;

·  заключение (выводы на основе анализа результатов расчета);

·  список использованной литературы.

ПОСТАНОВКА ЗАДАЧИ:

1.  Выполнить задание с использованием процедур.

2.  Исходные данные (кроме размерности массивов) ввести из текстового файла, который представить вместе с листингом программы и результатами счета. Ввод данных оформить как процедуру.

3.  Решение задачи оформить в виде процедуры.

4.  Исходную матрицу и результаты вывести в другой текстовый файл. Вывод данных в файл оформить в виде процедуры.

5.  Весь обмен данными между основной программой и процедурами организовать через список формальных/фактических параметров.

ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ

Динамические  массивы

Динамические массивы не имеют фиксированной длины или размеров. Память для динамического массива распределяется в процессе присваивания или передачи в процедуру SetLength.

Тип динамического массива определяется конструкцией вида

    array of baseType

Например,

var MyFlexibleArray: array of Real;

объявляет одномерный динамический массив вещественных чисел типа Real. Объявление не выделяет памяти массиву MyFlexibleArray. Для создания массива в памяти надо вызвать SetLength. Напимер,

SetLength(MyFlexibleArray, 20);

распределяет в памяти 20 вещественных чисел, проиндексированных от 0 до 19. Динамические массивы всегда имеют целочисленную индексацию, всегда начинающуюся с 0.

Имена динамических массивов неявно являются указателями. Для освобождения памяти динамического массива надо присвоить имени nil или передать переменную процедуре Finalize. Динамические массивы автоматически освобождаются, если счетчик ссылок на них становится равен нулю. Динамические массивы длиной 0 имеют значения nil.

Если X и Y – переменные одного типа динамического массива, X:=Y устанавливает X на тот же массив, что и Y. (Нет необходимости распределять память для X перед выполнением операции) В отличие от статических массивов динамические массивы не копируются автоматически перед записью в них. Например, после выполнения кода,

var

  A, B: array of Integer;

begin

  SetLength(A, 1);

  A[0] := 1;

  B := A;

  B[0] := 2;

end;

значение элемента A[0] равно 2 (в случае статических массивов A и B, A[0] был бы равен 1).

Присваивание элементу динамического массива (например, MyFlexibleArray[2]:=7) не перераспределяет память для массива. Выход за пределы массива не выявляется во время компиляции.

Для создания независимой копии динамического массива используйте глобальную функцию Copy:

var

  A, B: array of Integer;

begin

  SetLength(A, 1);

  A[0] := 1;

  B := Copy(A);

  B[0] := 2;        { B[0] <> A[0] }

end;

Когда сравниваются переменные динамических массивов, сравниваются их ссылки а не значения элементов массивов:

var

  A, B: array of Integer;

begin

  SetLength(A, 1);

  SetLength(B, 1);

  A[0] := 2;

  B[0] := 2;

end;

A = B возвращает False, а A[0] = B[0] возвращает True.

Если динамический массив распределен, его можно передать стандартным функциям Length, High, and Low. Функция Length возвращает количество элементов в массиве, функция High возвращает максимальный индекс массива (т.е., Length - 1), и функция Low возвращает 0. В случае массива нулевой длины, функция High возвращает  -1.

Замечание.

В некоторых функциях и процедурах, параметры массивов представлены как массивы базового типа baseType без указания индексов. Например,

function CheckStrings(A: array of string): Boolean;

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

Похожие материалы

Информация о работе