- •Программа дисциплины,
- •Задания на домашнюю контрольную работу №2 и
- •Методические указания по их выполнению
- •Для учащихся заочного отделения
- •Раздел 6 Элементы системного программирования на Паскале
- •Тема 6.1 Доступ к системным ресурсам
- •2 Выполните задание, добавив, если необходимо, защиту от неправильного ввода данных. Форма обязательно должна содержать кнопку для закрытия приложения:
- •1 Состав проекта
- •2 Работа с проектом
- •3 Назначение и свойства компонентов страницы Standard
- •4 Обработка массивов при помощи компонентов страницы Standard
- •5 Назначение и свойства компонентов страницы Additional
- •Image – изображение
- •6 Назначение и свойства компонентов страницы Win 32
- •7 Ввод и вывод даты и времени
- •8 Назначение и свойства компонентов страницы Standard
- •9 Динамический обмен данными — dde
- •10 Назначение и свойства компонентов страницы Dialogs
- •11 Назначение и свойства компонентов страницы Samples
- •12 Обработка файлов
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 |
