ЗАДАНИЕ НА КУРСОВУЮ РАБОТУ
Исходным файлом для проверки является текст программы на языке C++. Проверить правильность написания в программе инструкций безусловного перехода. Программа должна быть разработана на языке Borland Object Pascal (Ide Borland Delphi).
СОДЕРЖАНИЕ
1.ВВЕДЕНИЕ
2.ВЫПОЛНЕНИЕ ЗАДАНИЯ
2.1.Подготовка исходного файла
2.2.Разработка программы
2.3.Листинг программы
2.4.Запуск приложения
ПРИЛОЖЕНИЯ
1. ВВЕДЕНИЕ
Система программирования Турбо Паскаль, разработанная американской корпорацией Воrland, остается одной из самых популярных систем программирования в мире. Придуманный швейцарским ученым Никласом Виртом как средство для обучения студентов программированию, язык Паскаль стараниями А. Хейлсберга превратился в мощную современную профессиональную систему программирования, которой по плечу любые задачи – от создания простых программ, предназначенных для решения несложных вычислительных задач, до разработки сложнейших реляционных систем управления базами данных. Появление Windows и инструментальных средств Borland Pascal with Objects и Delphi для разработки программ в среде Windows лишний раз показало, какие поистине неисчерпаемые возможности таит он в себе: и Borland Pascal, и используемый в Delphi язык Object Pascal основываются на Турбо Паскале и развивают его идеи.
Основная цель курсовой работы – закрепление и обобщение знаний полученных при изучении дисциплины «Программирование».
В результате выполнения курсовой работы должны быть получены навыки анализа поставленной задачи, выбора наиболее оптимального алгоритма решения задачи, разработки интерфейса, отладки и тестирования программ большого объема.
2. ВЫПОЛНЕНИЕ ЗАДАНИЯ
2.1 Подготовка исходного файла
Сформируем текстовый документ с именем goto.cpp. Содержимое документа возьмем из русифицируемой справки MSDN по оператору безусловного перехода.
int i, j;
for(i = 0; i < 10; i++)
{
// ...
if(condition1)
{
j = 4;
goto label1;
}
// ...
for(j = 0; j < 10; j++)
{
// ...
label1:
// ...
if(condition2)
{
i = 6;
goto label2;
}
}
// ...
label2:
// ...
}
2.2 Разработка программы
В среде программирования Borland Delphi создадим новое приложение (пункт меню File \ New \ Application). Свойству формы Caption присвоим значение «Проверка Goto». Разместим на форме визуальные и невизуальные компоненты.
Невизуальный компонент – это диалоговое окно выбора файла для открытия. Компонент класса TOpenDialog становится видимым только в режиме запущенного приложения после вызова метода Execute. Присвоим компоненту имя odFile.
Размещаем на форме три компонента класса TButton с именами buOpen, buProverka buClose. Обработчик нажатия на кнопку buOpen открывает исходный файл (строки 33 - 41) и отображает его содержимое на компоненте Memo1 класса TMemo. Свойство Lines этого компонента содержит набор строк исходного файла.
Кнопка buProverka выполняет непосредственную проверку правильности использования безусловного оператора (строки 43 - 94). На первом шаге происходит запись содержимого файла в строковую переменную sFile (строка 48). Затем, при условии что файл не пустой (строка 49), происходит циклический поиск подстроки “goto” в переменной sFile (строки 52-54). Удаляется содержимое проверяемого файла до слова “goto” и выделяется имя метки перехода (строка 55). Имя метки должно удовлетворять требованию задания имени идентификатора. Для этой проверки используются строки 56-77. Затем ищется имя метки и символ «:» - это непосредственный переход на метку. В случае отсутствия такой подстроки выдается сообщение об ошибке (строки 78 - 84). В случаи успешной проверки использования одного безусловного перехода происходит инкрементирование счетчика и новый поиск конструкции goto (строки 85-86). По окончании проверки (в случае отсутствия ошибок) выдается число найденный инструкций безусловного перехода (строки 88-92).
Рис.1 - Форма в режиме Design
Кнопка buClose (строки 96 - 99) выполняет закрытие программы.
2.3 Листинг программы
1 | unit Unit1; |
2 | |
3 | interface |
4 | |
5 | uses |
6 | Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, |
7 | Dialogs, StdCtrls; |
8 | |
9 | type |
10 | TForm1 = class(TForm) |
11 | Memo1: TMemo; |
12 | buOpen: TButton; |
13 | buProverka: TButton; |
14 | lbRezultat: TLabel; |
15 | odFile: TOpenDialog; |
16 | buClose: TButton; |
17 | procedure buOpenClick(Sender: TObject); |
18 | procedure buProverkaClick(Sender: TObject); |
19 | procedure buCloseClick(Sender: TObject); |
20 | private |
21 | { Private declarations } |
22 | public |
23 | { Public declarations } |
24 | end; |
25 | |
26 | var |
27 | Form1: TForm1; |
28 | |
29 | implementation |
30 | |
31 | {$R *.dfm} |
32 | |
33 | procedure TForm1.buOpenClick(Sender: TObject); |
34 | begin |
35 | if odFile.Execute then |
36 | begin |
37 | Memo1.Lines.Clear; |
38 | Memo1.Lines.LoadFromFile(odFile.FileName); |
39 | lbRezultat.Caption:= ''; |
40 | end; |
41 | end; |
42 | |
43 | procedure TForm1.buProverkaClick(Sender: TObject); |
44 | var |
45 | sFile, sLabelName: string; |
46 | i, iKol, j: integer; |
47 | begin |
48 | sFile:= Memo1.Lines.Text; |
49 | if sFile<>'' then |
50 | begin |
51 | iKol:= 0; |
52 | i:= pos('goto ', sFile); |
53 | while i<>0 do |
54 | begin |
55 | delete(sFile, 1, i+4); |
56 | i:= pos(';', sFile); |
57 | j:= pos(#13, sFile); |
58 | if ((j<>0)and(j<i))or(i=0) then |
59 | begin |
60 | lbRezultat.Caption:= 'Ошибка: Отсутствует ;'; |
61 | lbRezultat.Font.Color:= clRed; |
62 | Exit; |
63 | end; |
64 | sLabelName:= copy(sFile, 1, i-1); |
65 | if not (sLabelName[1] in ['A'..'Z', 'a'..'z'])then |
66 | Begin |
67 | lbRezultat.Caption:= 'Ошибка: Неверное имя метки '+ sLabelName; |
68 | lbRezultat.Font.Color:= clRed; |
69 | Exit; |
70 | end; |
71 | for i:= 2 to length(sLabelName) do |
72 | if not(sLabelName[i] in ['0'..'9', 'A'..'Z', 'a'..'z']) then |
73 | begin |
74 | lbRezultat.Caption:= 'Ошибка: Неверное имя метки '+ sLabelName; |
75 | lbRezultat.Font.Color:= clRed; |
76 | Exit; |
77 | end; |
78 | i:= pos(sLabelName+':' ,sFile); |
79 | if i=0 then |
80 | begin |
81 | lbRezultat.Caption:= 'Ошибка: Отсутсвует переход на метку '+ sLabelName; |
82 | lbRezultat.Font.Color:= clRed; |
83 | Exit; |
84 | end; |
85 | inc(iKol); |
86 | i:= pos('goto ', sFile); |
87 | end; |
88 | if lbRezultat.Caption='' then |
89 | begin |
90 | lbRezultat.Caption:= 'Правильное задание '+ IntToStr(iKol)+ ' инструкций безусловного перехода'; |
91 | lbRezultat.Font.Color:= clNavy; |
92 | end; |
93 | end; |
94 | end; |
95 | |
96 | procedure TForm1.buCloseClick(Sender: TObject); |
97 | begin |
98 | Close; |
99 | end; |
100 | |
101 | end. |
2.4 Запуск приложения
Выполняется нажатием клавиши F9. После компиляции запускается программа на выполнение. Окно программы с результатами работы представлены на рис.2-5.
Рис.2 – Окно открытия файла
Рис.3 – Проверка файла
Рис.4 – Проверка файла