Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
for i:=0 to High(r)-1 do
r[i]:=i*i;
SetLength(r,20); for i:=10 to High(r)-1 do r[i]:=i*i;
for i:=0 to High(r) do ListBox1.Items.Add(IntToStr(i)+' в квадрате ='+IntToStr(r[i]));
Эта процедура выполняет похожие действия, но с небольшими особенностями. В начале я объявляю новый тип: TDynArr=array of integer. После этого конструкция r:TDynArr; будет означать, что r относится к типу TDynArr, а тот относится к array of integer;. Это тоже самое, что мы писали в первой процедуре r:array of integer;, только такая конструкция удобней, если ты захочешь объявить несколько динамических массивов. Тебе не приходится сто раз писать громоздкую строку r:array of integer;, ты объявляешь новый массив как TDynArr.
Далее идёт всё та же очистка строк и выделение памяти под массив.
for i:=0 to High(r)-1 do r[i]:=i*i;
Эта конструкция заполняет десять элементов квадратами числа i. После этого я снова вызываю функцию SetLength(r,20);, в которой говорю, что массив теперь будет состоять из 20-и элементов. Таким способом можно как увеличивать количество элементов, так и уменьшать.
for i:=10 to High(r)-1 do r[i]:=i*i;
Здесь я заполняю квадратами числа i элементы начиная с 10 по последний. И в конце я снова заполняю ListBox1 значениями элементов массива.
На компакт диске, в директории \Примеры\Глава 10\DynArrays ты можеш ь увидеть приме р это й программы.
10.2 Многомерные массивы.
ы уже разобрались с массивами, но пока это только одномерные массивы, в которых данные располагаются в виде строки. Для Delphi это не предел и он может работать и с несколькими измерениями массива.
Например, допустим, что тебе надо держать таблицу из данных. Таблица будет состоять из пяти колонок и четырёх строк. В этом случае ты можешь завести четыре массива, в каждом из которых будут храниться по 5 элементов. Но это же не солидно!!! Вот тут на встречу приходят многомерные массивы.
Объявляются такие массивы практически так же как и одномерные, разница только в том, что когда ты в квадратных скобках указываешь длину массива, нужно указывать размеры строк и столбцов данных.
Рассмотрим пример объявления двухмерного массива из четырёх строк и пяти столбцов:
var t:array[0..3, 0..4] of integer;
Как видишь, в квадратных скобках перечислены через запятую размеры строк и столбцов. Заметь, что я объявил массив от 0 до 3 – это будет четыре элемента и от 0 до 4, что будет 5 элементов.
Работа с таким массивом тоже достаточно простая:
var t:array[0..3, 0..4] of integer;
begin t[0][0]:=1; t[1][0]:=2; t[2][0]:=3; t[3][0]:=4; t[1][1]:=5;
End;
После выполнения этого примера наша таблица будет иметь вид:
1 5 0 0 0
2 0 0 0 0
3 0 0 0 0
4 0 0 0 0
Двухмерность не предел и ты можешь создавать и 3-х мерные массивы. Давай молча посмотрим на следующий пример:
var t:array[0..3, 0..4, 0..2] of integer;
begin t[0][0][0]:=1; t[1][0][0]:=2; t[2][0][0]:=3; t[3][0][0]:=4; t[1][1][0]:=5;
End;
10.3 Работа с файлами.
этой части я познакомлю тебя, как можно работать с файлами. Мы научимся открывать их, записывать и читать из них данные, ну и, конечно же, закрывать.
Для работы с файлами многие предпочитают использовать WinAPI. Не пугайся этого слова, потому что работа с WinAPI в Delphi очень даже прозрачна и ты не ощутишь никаких проблем. Я тоже любил так работать, пока не нарвался на одну неприятность. В самых первых окнах для чтения из файла использовалась функция _lread. В Windows 95 появилась ReadFile. А сейчас рекомендуют использовать ReadFileEx, которая может работать с файлами большего размера. После каждого изменения функций WinAPI приходится переделывать весь код проги, потому что нет гарантии, что старые функции будут работать в новых версиях Windows.
Вот поэтому я стал использовать специализированный в Delphi объект TFileStream. Я и тебе советую делать это, потому что если Microsoft снова введёт какие-то нововведения, то Borland учтёт их в объекте и тебе нужно будет только перекомпилировать свои проги. Никаких изменений в код вносить не надо. Ты один раз изменяешь объект (или это делает Borland) и компилируешь все свои проги с новыми возможностями. И в любом случае, использование объекта намного проще.
Итак, давай взглянём на объект TFileStream. Для работы с ним, ты должен объявить какую-нибудь переменную типа TFileStream.
Var
f: TFileStream;
Вот так я объявил переменную f типа объекта TFileStream. Теперь можно проинициализировать переменную.
Инициализация – выделение памяти и установка значений по умолчанию.
За инициализацию в любом объекте отвечает метод Create. Нужно просто вызвать его и результат выполнения присвоить переменной. Например, в нашем случае нужно вызвать TFileStream.Create(какие-то параметры) и результат записать в переменную f.
f:= TFileStream.Create(параметры);
Давай разберёмся, какие параметры могут быть при инициализации объекта TFileStream. У этого метода Create может быть три параметра, причём последний можно не указывать:
1. 1. Имя файла (или полный путь к файлу) который надо открыть. Этот параметр – простая строка.
.2. Режим открытия. Здесь ты можешь указать один из следующих флагов:
.a. fmCreate – создать файл с указанным в первом параметре именем. Если файл уже существует, то он откроется в режиме для записи.
.b. fmOpenRead – открыть файл только для чтения. Если файл не существует, то произойдёт ошибка. Запись в файл в этом случае не возможна.
. c. fmOpenWrite – открыть файл для запись. При этом, во время записи текущее содержимое уничтожается.
. d. fmOpenReadWrite – открыть файл для редактирования (чтения и записи).
3. Права, с которыми будет открыт файл. Тут опять ты можешь указать одно из следующих значений (а можешь вообще ничего не указывать):
. a. fmShareCompat – при этих правах, другие приложения тоже имеют права работать с открытым файлом.
. b. fmShareExclusive – при этом режиме другие приложения вообще не смогут открыть файл.
. c. fmShareDenyWrite – при данном режиме другие приложения не смогут открывать этот файл для записи. Файл может быть открыт только для чтения.
. d. fmShareDenyRead – при данном режиме другие приложения не смогут открывать этот файл для чтения. Файл может быть открыт только для записи.
. e. fmShareDenyNone -вообще не мешать другим приложениям работать с файлом.
С первыми двумя параметрами всё ясно. Но зачем же нужны права доступа к файлам. Допустим, что ты открыл файл для записи. Потом его открыло другое приложение и тоже для записи. Вы оба записали какие-то данные. После этого твоё приложение закрыло файл и сохранило все изменения. Тут же другое приложение перезаписывает твои изменения, даже не подозревая о том, что они прошли. Вот так твоя инфа пропадает из файла.
Если ты пишешь однопользовательскую прогу и к файлу будет иметь доступ только одно приложение, то про права можно забыть и даже не указывать.
После того, как ты поработал с файлом, достаточно вызвать метод Free, чтобы закрыть файл.
Дата публикования: 2014-11-04; Прочитано: 475 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!