Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы алгоритмизации №2 .doc
Скачиваний:
2
Добавлен:
14.11.2019
Размер:
354.3 Кб
Скачать

11 Назначение и свойства компонентов страницы Samples

Рисунок 5– Вид страницы Samples

Gauge – отображение хода процесса

И спользуется для создания индикатора хода процесса в виде линейки, круговой диаграммы или текста. Аналог компонента ProgressBar.

SpinEdit – поле со счетчиком.

С войства компонента похожи на UpDown, только имеют другие имена: MinValue, MaxValue, Value. Компонент SpinEdit во многих отношениях удобнее, если не требуются такие возможности возможностей UpDown как нестандартное расположение кнопок, «закольцовывание» изменений и т.п.

Calendar –календарь на указанный месяц

О тображение календаря на указанный месяц. Основные свойства: Year, Month, Day.

12 Обработка файлов

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

Эта процедура имеет синтаксис:

procedure AssignFile(var F: File, S: string);

где F — файловая переменная любого типа, S — строка, содержащая имя файла.

Открытие существующего файла осуществляется процедурой Reset, формат которой (кроме нетипизированных файлов) следующий:

procedure Reset(var F: File);

Файловая переменная F перед обращением к этой процедуре должна быть связана с файлом. Создание и открытие нового файла осуществляется процедурой Rewrite, формат которой (кроме нетипизированных файлов — см. разд. 14.14.2.3) следующий:

procedure Rewrite(var F: File);

После выполнения различных операций чтения и записи файл должен быть закрыт процедурой CloseFile:

procedure CloseFile(var F: File);

При работе с файлами, при чтении и записи в них каких-то данных возможны различные ошибки. Если не принять соответствующих мер, то эти ошибки приведут к прерыванию работы программы. Предотвратить это можно двумя путями.

Первый предполагает обработку исключений InOutError, поле errorcode которых содержит информацию о конкретном виде ошибки. Второй предполагает применение опции {$I-}, отключающей генерацию исключений ошибок ввода/вывода, и дальнейшее обращение к функции IOResull, возвращающей код ошибки и сбрасывающей его в 0 (так что повторное обращение к IOResuIt бессмысленно). После обработки операции ввода/вывода контроль ошибок можно снова включить опцией {$I+}. В этом случае общая организация работы с файлами строится примерно по такой схеме:

AssignFile (F, OpenDialogl.FileName);

{SI-}

Reset(F);

{SI+}

I:=IOResult;

if I <> 0 then <операторы обработки кода ошибки>

else ...

{SI+}

<операторы чтения или записи>

{SI-}

I:=IOResult;

if I <> 0 then <операторы обработки кода ошибки>

CloseFile(var F: File);

При операциях ввода/вывода проверять окончание файла можно функцией Eof(F: File), возвращающей true при достижении конца файла.

Различают файлы трех видов: текстовые, файлы, типизированные файлы и нетипизированные файлы.

Текстовые файлы состоят из последовательностей символов, разбитых на строки. В Object Pascal предопределен тип TextFile, соответствующий текстовому файлу. Таким образом, объявление файловой переменной может иметь вид:

var <Имя файловой переменной>: TextFile;

Запись данных в текстовый файл осуществляется процедурой

procedure Write(var F: TextFile; <список выражений>);

Выражения могут быть типов Char, Integer, Real, string, упакованных строк, Boolean. При этом может использоваться форматирование.

Например:

Write(F, 'Baм ', I, ' лет);

Аналогичная процедура Writeln отличается от Write только тем, что после записи пишет символ перехода на новую строку, т.е. Writeln формирует одну строку.

Чтение данных из текстового файла осуществляется последовательно от его начала процедурой

procedure Read(var F: TextFile; <список переменных>);

где в списке перечисляются переменные, в которые читаются данные из файла.

Read(F, S1, I, S2]; даст значение S1, равное «Вам», значение I равное записанному числу лет, и значение S2, равное «лет».

Аналогичная процедура Readln отличается от Read только тем, что после чтения переводит текущую позицию в файле на новую строку. Если в процедуре Readln не задан список переменных, то она просто пропускает текущую строку и переходит к следующей.

Типизированные файлы

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

var <имя файловой переменной;»: file of <тип данных>;

Тип данных может быть не только простым типом, но и, например, типом записей. Так операторы:

type

PhoneEntry = record

Fans, Nam: string[20];

PhoneNumber: string[15];

Listed: Boolean;

end;

PhorieList = file of PhoneEntry;

объявляет типизированный файл, содержащий записи телефонных номеров.

Процедуры чтения и записи Read и Write не отличаются от рассмотренных ранее для текстовых файлов. Только типы выражений при записи и переменных при чтении должны соответство-вать объявленному типу данных файла. Процедур, аналогичных Readln и Writeln для типизированных файлов нет. Зато есть процедура Seek, позволяющая перемещаться по файлу не только последовательно, как в текстовых файлах, но сразу переходить к требуемому элементу. Ее синтаксис:

procedure Seek(var F: File, N: Longint);

где N — номер элемента. Эта процедура перемещает текущую позицию в файле на нужный элемент.

Имеется также функция FilePos: function FilePos(var F ) : Longint; которая возвращает теку-щую позицию в файле.

Пример выполнения практического задания

Задание №

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

Для решения задачи необходимо создать форму и разместить на ней два компонента Edit, три Button, три Label, один MainMenu. В инспекторе объектов надо изменить их свойства:

У компонентов Label в свойстве Caption задать необходимую подпись.

У компонентов Edit в свойстве Text удалить все.

У компонентов Button в свойстве Caption задать необходимую подпись – Считать, Очистить, Закрыть.

Двойным щелчком по компоненту MainMenu был вызван редактор меню и в нем создан пункт Файл, а в нем три пункта: Считать, Очистить, Закрыть.

Для того чтобы в Edit2 могли внести только одну букву надо выделить компонент и в инспекторе объектов на закладке Events для события KeyUp (отпускание нажатой клавиши) написать код:

procedure TForm1.Edit2KeyUp(Sender: TObject; var Key: Word;

Shift: TShiftState);

var s:string;

begin

s:=Edit2.Text; //считываем имеющийся текст

if Length(s)>1 then //если его длин больше 1 символа

s:=s[length(s)];//все заменяем последним символом

Edit2.Text:=s;//заносим в Edit символ

end;

Двойным щелчком по компоненту Button1 был вызван редактор кода, в нем написан следующий код для решения задачи:

procedure TForm1.Button1Click(Sender: TObject);

var s,s2:string;

i,n:integer;

begin

s:=Edit2.Text;//Запоминаем символ

s2:=Edit1.Text; Запоминаем текст

n:=0;//Обнуляем счетчик символов

for i:=1 to Length(s2) do//перебираем номера символов в строке

if s[1]=s2[i] then n:=n+1; //Если текущий символ равен искомому то увеличиваем счетчик

Label1.Caption:='Символ ' + s[1]+ ' встречается '+inttostr(n)+ ' раз';//вывод результата

end;

Двойным щелчком по компоненту Button2 был вызван редактор кода, в нем написан следующий код для очистки:

procedure TForm1.Button3Click(Sender: TObject);

begin

Edit2.Text:='';

Edit1.Text:='';

Label1.Caption:='';

end;

Для выхода:

procedure TForm1.Button2Click(Sender: TObject);

begin

form1.Close;

end;

Двойным щелчком по компоненту MainMemu1 был вызван редактор меню, в нем выделен первый пункт и в инспекторе объектов на закладке Events для события onClick выбран Button1Click. Аналогично для остальных.

Работающая форма с результатами представлена ниже:

Таблица вариантов домашней контрольной работы № 2 по дисциплине «Основы алгоритмизации и

программирования»

Предпоследняя цифра шифра

Последняя цифра шифра

0

1

2

3

4

5

6

7

8

9

0

27, 57, 65, 117, 127

26, 44, 79, 100, 132

18, 49, 63, 111, 137

17, 48, 69, 106, 137

22, 60, 70, 113, 131

7, 55, 83, 92, 127

19, 41, 77, 106, 141

24, 53, 88, 100, 137

23, 38, 76, 112, 140

19, 51, 87, 91, 121

1

8, 59, 83, 97, 135

13, 52, 75, 107, 128

20, 35, 90, 113, 139

14, 59, 75, 116, 147

2, 50, 64, 101, 126

26, 39, 79, 102, 139

16, 32, 72, 117, 134

30, 54, 70, 94, 143

22, 59, 86, 104, 125

28, 55, 65, 109, 146

2

12, 56, 76, 98, 149

22, 31, 86, 96, 130

19, 40, 88, 115, 121

13, 40, 84, 112, 134

11, 47, 73, 120, 129

23, 36, 74, 115, 150

18, 58, 67, 105, 136

21, 57, 90, 114, 139

3, 40, 89, 95, 133

30, 53, 80, 102, 143

3

30, 58, 64,105,

136

5, 43, 77, 91, 138

25, 47, 62,106,

123

25, 58, 61, 96, 122

16, 32, 85,114,

145

1, 43, 72, 95, 125

6, 52, 75, 99, 122

7, 37, 71, 120, 148

28, 1,

62, 98,

142

23, 40, 84, 94, 131

4

15, 53, 72, 99, 142

21, 50, 66,118,

144

29, 45, 87, 95, 122

29, 42, 89,119,

142

12, 31, 88,100,

133

27, 57, 82,118,

123

4, 47, 78, 108, 124

10, 46, 63,111,

123

11,33,

61, 110, 131

10, 60, 75, 99, 127

5

4, 36, 71,116,

140

2, 39, 74,102,

150

23, 51, 81,110,

124

19, 35, 80,104,

130

6, 53, 71,103,

146

20, 37, 81, 91, 128

13, 43, 85, 93, 145

14, 34, 79,101,

130

9, 51, 74,116,

127

20, 44, 72, 95, 135

Продолжение таблицы вариантов

6

10,33,

89,119,

134

24, 48, 78,120,

148

14, 60, 85,93,

147

30, 41, 62,98,

149

5, 38, 63,93,

143

9, 44, 66,91,

148

5, 55,

87,102,

126

29,42,

64,107,

146

1, 45, 73,97, 138

1, 45, 71,107,

148

7

1, 54, 80,101,

131

11, 32, 73,103,

146

3, 38, 61,114,

143

24, 51, 77,110,

138

21, 49, 86,117,

132

8, 46, 65,108,

140

15, 36, 83,103,

149

26, 56, 65,92,

150

25, 50, 81, 91, 147

26, 48, 76,110,

141

8

6, 41, 70,109,

145

17, 55, 69,92,

141

16, 37, 82,108,

126

18, 33, 68,94,

135

3,34,

76,107,

136

15, 54, 67,109,

144

17, 48, 66,118,

132

12, 49, 69,113,

121

20, 39, 82,96, 129

12, 34, 86,111,

150

9

7,34,

68,104,

133

28, 42, 67,112,

129

9, 46, 84,94, 125

28, 56, 87,105,

141

4, 52, 90,99,

124

10, 45, 78,110,

121

2, 60, 84,109,

128

27, 35, 80,119,

144

8, 44, 68,115,

135

2, 38, 81,112,

149

48