Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Begin ListBox1.Items.Clear; SetLength(r,10);



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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...