Разработка программы на языке Borland Object Pascal
История разработки и особенности построения языка программирования С++. Программа проверки объявления и использования функций в среде программирования Borland Object Pascal (IDE Borland Delphi), методика ее разработки, листинг, запуск и проверка работы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 10.12.2009 |
Размер файла | 620,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
53
Задание на курсовую работу
Исходным файлом для проверки является текст программы на языке С++.
Проверить правильность объявления и использования в программе указателей на функцию.
Программа должна быть разработана на языке Borland Object Pascal (IDE Borland Delphi).
Содержание
Введение
1 Подготовка исходного файла
2 Разработка программы
3 Листинг программы
4 Запуск приложения
Перечень ссылок
Приложения
Введение
В начале 80-х годов сотрудник фирмы AT&T Bell Laboratories Бьярн Страуструп (Bjarne Siroustrup) разработал язык программирования С++. Этот язык был построен на базе языка программирования С и включал объектно-ориентированные конструкции, такие как классы, производные классы и виртуальные функции, заимствованные из языка simula67. Целью разработки С++ было «ускорить написание хороших программ и сделать этот процесс более приятным для каждого отдельно взятого программиста» (Б. Страус труп. «Язык программирования С++». -М., Наука, 1991).
Название С++, которое придумал Рик Маскити (Rick Mascitti) в 1983 году, отражает факт происхождения этого языка от С (вначале он назывался «С с классами»). С момента своего появления С++ получил широкое распространение и завоевал признание многих тысяч профессиональных программистов. В 1989 году Бьярн Страуструп опубликовал вместе с Маргарет Эллис «Справочное руководство но языку С++», послужившее основой для разработки проекта стандарта ANSI С++, разработанного комитетом ANSI X3J16. В начале 90-х годов к работе этого комитета подключился комитет WG21 Международной организации по стандартизации (ISO), и была начата работа по созданию единого стандарта ANSI/ISO С++. Результатом этой работы стал стандарт International Standard for Information Systems -Programming Language С++ (ISO/IEC JTC1/SC22/WG21), опубликованный в начале 1998 года. Большинство новейших компиляторов С++ сейчас в большей или меньшей мере соответствуют этому стандарту. И нет сомнения в том, что в ближайшее время все компиляторы этого языка будут приведены в соответствие стандарту.
Основная цель курсовой работы - закрепление и обобщение знаний полученных при изучении дисциплины «Программирование».
1 Подготовка исходного файла
Сформируем текстовый документ с именем function.cpp.
Содержимое документа возьмем из интернет-документации по описанию функций.
void swap(int i, int j)
{
int temp = i;
i = j;
j = temp;
}
int main()
{
int a = 10, b = 3;
swap(a, b);
cout << "а = " << a << " and b = " << b;
return 0;
}
2. Разработка программы
В среде программирования Borland Delphi создадим новое приложение (пункт меню File \ New \ Application). Свойству формы Caption присвоим значение «Проверка объявления и использования функций». Разместим на форме визуальные и невизуальные компоненты.
Невизуальный компонент - это диалоговое окно выбора файла для открытия. Компонент класса TOpenDialog становится видимым только в режиме запущенного приложения после вызова метода Execute. Присвоим компоненту имя odFile.
Размещаем на форме три компонента класса TButton с именами buOpen, buProverka buClose. Обработчик нажатия на кнопку buOpen открывает исходный файл (строки 33 - 41) и отображает его содержимое на компоненте Memo1 класса TMemo. Свойство Lines этого компонента содержит набор строк исходного файла.
Кнопка buProverka выполняет непосредственную проверку правильности использования безусловного оператора (строки 59 - 207). На первом шаге происходит запись содержимого файла в строковую переменную sFile (строка 62). Затем, при условии, что файл не пустой (строка 63), происходит инициализация переменный (строки 65-68). Далее происходит поиск самого первого описания переменной или функции, т.е. поиск типа переменных (строка 69-86). Далее выделяется имя переменной или функции (строки 87-109). Если после этого скобка не найдена, то значит мы нашли описание переменной а не функции, а противном случае ищется закрывающая скобка и подсчитывается число передаваемых параметров (строки 110-129). Имя функции и число параметров заносится с отдельные строковые массивы. Затем удаляется тело функции (строки 130 - 145). Далее проверка продолжается циклически, пока находится ссылка на тип переменной или функции. Если в ходе описания функция была найдена ошибка, то дальнейшая проверка не выполняется (строки 146 - 154). Если ошибок описания не было то происходит циклическое выделение в теле программы имен функции (поочередно) и подсчитывается количество вхождений. Первое вхождение имени функции - при ее описании, а все дальнейшие - вызовы функции (строки 161 - 164). При вызове функции подсчитывается число передаваемых параметров и вывод сообщение при несоответствии с описанием функции (строки 183 - 198). По окончании проверки выдается сообщение о количестве вызова описанных функций (строки 202 - 203).
Кнопка buClose (строки 209-212) выполняет закрытие программы.
Рис.1 - Форма в режиме Design
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 |
msTypePosition: array [1..5]of integer; |
|
29 |
msFunctionName: array of string; |
|
30 |
msFunctionKolParam: array of integer; |
|
31 |
iFunctionKol: integer; |
|
32 |
||
33 |
const |
|
34 |
msType: array [1..5] of string= ('void', 'int', 'double', 'char', 'bool'); |
|
35 |
msError: array[1..6]of string= ('Ошибка!!! Отсутсвует задание функции', |
|
36 |
'Ошибка!!! Некоректное задание функции', |
|
37 |
'Ошибка!!! Отсутсвует тело функции', |
|
38 |
'Ошибка!!! Некоректное задание тела функции', |
|
39 |
'Ошибка!!! Некоректный вызов функции', |
|
40 |
'Ошибка!!! Некоректное задание параметров'); |
|
41 |
||
42 |
implementation |
|
43 |
||
44 |
{$R *.dfm} |
|
45 |
||
46 |
procedure TForm1.buOpenClick(Sender: TObject); |
|
47 |
begin |
|
48 |
if odFile.Execute then |
|
49 |
begin |
|
50 |
Memo1.Lines.Clear; |
|
51 |
Memo1.Lines.LoadFromFile(odFile.FileName); |
|
52 |
lbRezultat.Caption:= ''; |
|
53 |
end; |
|
54 |
end; |
|
55 |
||
56 |
procedure TForm1.buProverkaClick(Sender: TObject); |
|
57 |
var |
|
58 |
sFile, sFunctionName, sFunctionParam: string; |
|
59 |
i, iKol, j, iminPos, iminNom, iKodError, iKolParam: integer; |
|
60 |
flagFunction: boolean; |
|
61 |
begin |
|
62 |
sFile:= Memo1.Lines.Text; |
|
63 |
if sFile<>'' then |
|
64 |
begin |
|
65 |
iFunctionKol:= 0; |
|
66 |
iKodError:= 0; |
|
67 |
SetLength(msFunctionName, iFunctionKol+1); |
|
68 |
SetLength(msFunctionKolParam, iFunctionKol+1); |
|
69 |
// поиск задания типа функции |
|
70 |
iminPos:= 10000; |
|
71 |
while iminPos<>0 do |
|
72 |
begin |
|
73 |
for i:= 1 to 5 do msTypePosition[i]:= 10000; |
|
74 |
iminPos:= 1000; |
|
75 |
iminNom:= 0; |
|
76 |
for i:= 1 to 5 do |
|
77 |
begin |
|
78 |
msTypePosition[i]:= pos(msType[i], sFile); |
|
79 |
if (msTypePosition[i]<>0)and(msTypePosition[i]<iminPos) then |
|
80 |
begin |
|
81 |
iminPos:= msTypePosition[i]; |
|
82 |
iminNom:= i; |
|
83 |
end; |
|
84 |
end; |
|
85 |
if iminNom=0 then break; |
|
86 |
delete(sFile, 1, iminPos+ length(msType[iminNom])); |
|
87 |
// Выделение имени функции до скобки |
|
88 |
i:= pos('(', sFile); |
|
89 |
if i=0 then |
|
90 |
begin |
|
91 |
if iFunctionKol=0 then |
|
92 |
begin |
|
93 |
iKodError:= 1; |
|
94 |
Break; |
|
95 |
end |
|
96 |
else |
|
97 |
Continue; |
|
98 |
end; |
|
99 |
sFunctionName:= copy(sFile, 1, i-1); |
|
100 |
delete(sFile, 1, i); |
|
101 |
flagFunction:= true; |
|
102 |
for i:=1 to length(sFunctionName) do |
|
103 |
if not(sFunctionName[i] in ['A'..'Z', 'a'..'z', '0'..'9'])then flagFunction:= false; |
|
104 |
if not flagFunction then Continue; // выход если нашли задание переменной а не функции |
|
105 |
inc(iFunctionKol); |
|
106 |
SetLength(msFunctionName, iFunctionKol+1); |
|
107 |
SetLength(msFunctionKolParam, iFunctionKol+1); |
|
108 |
msFunctionName[iFunctionKol]:= sFunctionName; |
|
109 |
msFunctionKolParam[iFunctionKol]:= 0; |
|
110 |
// выделение параметров передоваемых в функцию |
|
111 |
i:= pos(')', sFile); |
|
112 |
if i=0 then |
|
113 |
begin |
|
114 |
iKodError:= 2; |
|
115 |
Break; |
|
116 |
end; |
|
117 |
sFunctionParam:= copy(sFile, 1, i-1); |
|
118 |
delete(sFile, 1, i); |
|
119 |
i:= pos(',', sFunctionParam); |
|
120 |
//подсчет числа запятых |
|
121 |
while i<>0 do |
|
122 |
begin |
|
123 |
msFunctionKolParam[iFunctionKol]:= msFunctionKolParam[iFunctionKol]+1; |
|
124 |
delete(sFunctionParam, 1, i); |
|
125 |
i:= pos(',', sFunctionParam); |
|
126 |
end; |
|
127 |
// число параметров на 1 больше числа запятых |
|
128 |
if msFunctionKolParam[iFunctionKol]<>0 then |
|
129 |
msFunctionKolParam[iFunctionKol]:= msFunctionKolParam[iFunctionKol]+1; |
|
130 |
// удаление тела функции |
|
131 |
i:= pos('{', sFile); |
|
132 |
if i=0 then |
|
133 |
begin |
|
134 |
iKodError:= 3; |
|
135 |
Break; |
|
136 |
end; |
|
137 |
delete(sFile, 1, i); |
|
138 |
i:= pos('}', sFile); |
|
139 |
if i=0 then |
|
140 |
begin |
|
141 |
iKodError:= 4; |
|
142 |
Break; |
|
143 |
end; |
|
144 |
delete(sFile, 1, i) |
|
145 |
end; |
|
146 |
// выход при ошибке задания функции |
|
147 |
if iKodError<>0 then |
|
148 |
begin |
|
149 |
lbRezultat.Font.Color:= clRed; |
|
150 |
lbRezultat.Caption:= msError[iKodError]; |
|
151 |
exit; |
|
152 |
end; |
|
153 |
lbRezultat.Font.Color:= clBlack; |
|
154 |
lbRezultat.Caption:= 'Правильно заданы функции: '; |
|
155 |
for i:= 1 to iFunctionKol do |
|
156 |
lbRezultat.Caption:= lbRezultat.Caption+' '+ msFunctionName[i]; |
|
157 |
lbRezultat.Caption:= lbRezultat.Caption+#13; |
|
158 |
// проверка на правильный вызов описанных функций |
|
159 |
for i:= 1 to iFunctionKol do |
|
160 |
begin |
|
161 |
sFile:= Memo1.Lines.Text; |
|
162 |
j:= pos(msFunctionName[i], sFile);// поиск описания функции в теле программы |
|
163 |
delete(sFile, 1, j+length(msFunctionName[i])); |
|
164 |
j:= pos(msFunctionName[i], sFile);// поиск вызова функции в теле программы |
|
165 |
iKol:= 0; |
|
166 |
while j<>0 do |
|
167 |
begin |
|
168 |
Inc(iKol); |
|
169 |
delete(sFile, 1, j+length(msFunctionName[i])-1); |
|
170 |
if sFile[1]<>'(' then |
|
171 |
begin |
|
172 |
lbRezultat.Font.Color:= clRed; |
|
173 |
lbRezultat.Caption:= lbRezultat.Caption+#13+ msError[5]+' '+msFunctionName[i]; |
|
174 |
Exit; |
|
175 |
end; |
|
176 |
j:= pos(')', sFile); |
|
177 |
if j=0 then |
|
178 |
begin |
|
179 |
lbRezultat.Font.Color:= clRed; |
|
180 |
lbRezultat.Caption:= lbRezultat.Caption+#13+msError[5]+' '+msFunctionName[i]; |
|
181 |
Exit; |
|
182 |
end; |
|
183 |
sFunctionParam:= copy(sFile, 1, j); |
|
184 |
iKolParam:= 0; |
|
185 |
j:= pos(',', sFunctionParam); |
|
186 |
while j<>0 do |
|
187 |
begin |
|
188 |
Inc(iKolParam); |
|
189 |
delete(sFunctionParam, 1, j); |
|
190 |
j:= pos(',', sFunctionParam); |
|
191 |
end; |
|
192 |
if iKolParam<>0 then iKolParam:= iKolParam+1;// если запятые найдены, то число параметров на 1 больше |
|
193 |
if iKolParam<> msFunctionKolParam[i] then |
|
194 |
begin |
|
195 |
lbRezultat.Font.Color:= clRed; |
|
196 |
lbRezultat.Caption:= lbRezultat.Caption+#13+msError[6]+' '+msFunctionName[i]; |
|
197 |
Exit; |
|
198 |
end; |
|
199 |
delete(sFile, 1, j); |
|
200 |
j:= pos(msFunctionName[i], sFile);// поиск очередного вызова функции в теле программы |
|
201 |
end; |
|
202 |
lbRezultat.Caption:= lbRezultat.Caption+'Функция'+ msFunctionName[i]+ ' вызвана '+ |
|
203 |
IntToStr(iKol)+' раз(а,ов)'+#13; |
|
204 |
end; |
|
205 |
||
206 |
end; |
|
207 |
end; |
|
208 |
||
209 |
procedure TForm1.buCloseClick(Sender: TObject); |
|
210 |
begin |
|
211 |
Close; |
|
212 |
end; |
|
213 |
||
214 |
end. |
|
4 Запуск приложения
Выполняется нажатием клавиши F9. После компиляции запускается программа на выполнение. Окно программы с результатами работы представлены на рис.2-7.
Рис.2 - Окно программы
Рис.3 - Окно открытия файла
Рис.4 - Проверка файла
Рис.6 - Проверка файла
Рис.7 - Проверка файла
Перечень ссылок
1. Абрамов В.Г., Трифонов Н.П., Трифонова Г.Н. Введение в язык Паскаль. - М.: Наука, 1988.
2. Довгаль С.И., Литвинов Б.Ю., Сбитнев А..И. Персональные ЭВМ : Турбо Паскаль V7.0, объектное программирование, локальные сети. - Киев: Информсиситема сервис, 1993.
3. Епанешников А.М., Епанешникова В.А. Программирование в среде Turbo Pascal 7.0.-М.: Диалог -МИФИ,1999.
4. Зуев Е.А. Программирование на языке Turbo Pascal 6.0,7.0. - М.: Радио и связь, Веста,1993.
5. Кандзюба С.П., Громов В.Н. Delphi 7.Базы данных и приложения. Лекции и упражнения. - К.: Издательство "ДиаСофт", 2001.
6. Климова Л.М. Pascal 7.0. Практическое программирование. Решение типовых задач. -М.:КУДИУ ОБРАЗ, 2000.
7. Марченко А. И., Марченко Л.А.. Программирование в среде Turbo Pascal 7.0.-К.: Век+,1999.
8. Фаронов В.В. Turbo Pascal 7.0. Начальный курс. - М.: Нолидж, 2000.
9. Глушаков С.В., Коваль А.В., Смирнов С.В. Практикум по С++- Х., Фолио, 2006 - 525 с.
10. Методические указания к выполнению курсовой работы по дисциплине "Программирование" для студентов специальностей 7.091501 "Компьютерные системы и сети" и 7.091502 «Системное программирование» дневной и заочной форм обучения. /Сост.: Н.С. Семенова, С.А. Сафонова - Северодонецк: Изд-во СТИ ВНУ, 2006. - 37с.
Приложение А
// Исходным файлом для проверки является текст программы на языке С++.
// Проверить правильность объявления и использования в программе указателей на функцию.
// Программа должна быть разработана на языке Borland Object Pascal (IDE Borland Delphi).
void swap(int i, int j)
{
int temp = i;
i = j;
j = temp;
}
int main()
{
int a = 10, b = 3;
swap(a, b);
cout << "а = " << a << " and b = " << b;
return 0;
}
Приложение Б
-$A8
-$B-
-$C+
-$D+
-$E-
-$F-
-$G+
-$H+
-$I+
-$J-
-$K-
-$L+
-$M-
-$N+
-$O+
-$P+
-$Q-
-$R-
-$S-
-$T-
-$U-
-$V+
-$W-
-$X+
-$YD
-$Z1
-cg
-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
-H+
-W+
-M
-$M16384,1048576
-K$00400000
-LE"c:\program files\borland\delphi7\Projects\Bpl"
-LN"c:\program files\borland\delphi7\Projects\Bpl"
-w-UNSAFE_TYPE
-w-UNSAFE_CODE
-w-UNSAFE_CAST
Приложение В
[FileVersion]
Version=7.0
[Compiler]
A=8
B=0
C=1
D=1
E=0
F=0
G=1
H=1
I=1
J=0
K=0
L=1
M=0
N=1
O=1
P=1
Q=0
R=0
S=0
T=0
U=0
V=1
W=0
X=1
Y=1
Z=1
ShowHints=1
ShowWarnings=1
UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
NamespacePrefix=
SymbolDeprecated=1
SymbolLibrary=1
SymbolPlatform=1
UnitLibrary=1
UnitPlatform=1
UnitDeprecated=1
HResultCompat=1
HidingMember=1
HiddenVirtual=1
Garbage=1
BoundsError=1
ZeroNilCompat=1
StringConstTruncated=1
ForLoopVarVarPar=1
TypedConstVarPar=1
AsgToTypedConst=1
CaseLabelRange=1
ForVariable=1
ConstructingAbstract=1
ComparisonFalse=1
ComparisonTrue=1
ComparingSignedUnsigned=1
CombiningSignedUnsigned=1
UnsupportedConstruct=1
FileOpen=1
FileOpenUnitSrc=1
BadGlobalSymbol=1
DuplicateConstructorDestructor=1
InvalidDirective=1
PackageNoLink=1
PackageThreadVar=1
ImplicitImport=1
HPPEMITIgnored=1
NoRetVal=1
UseBeforeDef=1
ForLoopVarUndef=1
UnitNameMismatch=1
NoCFGFileFound=1
MessageDirective=1
ImplicitVariants=1
UnicodeToLocale=1
LocaleToUnicode=1
ImagebaseMultiple=1
SuspiciousTypecast=1
PrivatePropAccessor=1
UnsafeType=0
UnsafeCode=0
UnsafeCast=0
[Linker]
MapFile=0
OutputObjs=0
ConsoleApp=1
DebugInfo=0
RemoteSymbols=0
MinStackSize=16384
MaxStackSize=1048576
ImageBase=4194304
ExeDescription=
[Directories]
OutputDir=
UnitOutputDir=
PackageDLLOutputDir=
PackageDCPOutputDir=
SearchPath=
Packages=
Conditionals=
DebugSourceDirs=
UsePackages=0
[Parameters]
RunParams=
HostApplication=
Launcher=
UseLauncher=0
DebugCWD=
[Language]
ActiveLang=
ProjectLang=
RootDir=
[Version Info]
IncludeVerInfo=0
AutoIncBuild=0
MajorVer=1
MinorVer=0
Release=0
Build=0
Debug=0
PreRelease=0
Special=0
Private=0
DLL=0
Locale=1049
CodePage=1251
[Version Info Keys]
CompanyName=
FileDescription=
FileVersion=1.0.0.0
InternalName=
LegalCopyright=
LegalTrademarks=
OriginalFilename=
ProductName=
ProductVersion=1.0.0.0
Comments=
Приложение Д
program proverka;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Приложение Ж
[Closed Files]
File_0=SourceModule,'D:\Projects\Delphi\sti\check_goto\Unit1.pas',0,1,64,1,55,1,0
File_1=SourceModule,'D:\Projects\Delphi Studio\SKSMiK\ZarPlata\units\UData.pas',0,1,545,15,558,1,0
File_2=SourceModule,'D:\Projects\Delphi Studio\SKSMiK\ZarPlata\units\UTablNU.pas',0,1,681,50,698,1,0
File_3=SourceModule,'D:\Projects\Delphi Studio\SKSMiK\ZarPlata\units\UMain.pas',0,1,148,31,155,1,0
File_4=SourceModule,'D:\Projects\Delphi Studio\SKSMiK\ZarPlata\units\UPerson.pas',0,1,99,34,116,1,0
File_5=SourceModule,'D:\Projects\Delphi Studio\SKSMiK\ZarPlata\units\UFunction.pas',0,1,479,1,492,0,0
File_6=SourceModule,'D:\Projects\Delphi Studio\SKSMiK\ZarPlata\units\UEtalon.pas',0,1,800,40,825,0,0
File_7=SourceModule,'D:\Projects\Delphi Studio\SKSMiK\ZarPlata\units\UCreateAllReport.pas',0,1,406,51,407,0,0
File_8=SourceModule,'D:\Projects\Delphi Studio\SKSMiK\ZarPlata\units\USprNa.pas',0,1,1,17,9,1,0
File_9=SourceModule,'D:\Projects\Delphi Studio\SKSMiK\ZarPlata\units\USprUd.pas',0,1,305,1,308,1,0
[Modules]
Module0=D:\Projects\Delphi\sti\check_function\Unit1.pas
Count=1
EditWindowCount=1
[D:\Projects\Delphi\sti\check_function\Unit1.pas]
ModuleType=SourceModule
FormState=1
FormOnTop=1
[C:\Program Files\Borland\Delphi7\Projects\ProjectGroup1.bpg]
FormState=0
FormOnTop=0
[D:\Projects\Delphi\sti\check_function\proverka.dpr]
FormState=0
FormOnTop=0
[EditWindow0]
ViewCount=1
CurrentView=0
View0=0
CodeExplorer=CodeExplorer@EditWindow0
MessageView=MessageView@EditWindow0
Create=1
Visible=1
State=2
Left=294
Top=140
Width=986
Height=505
MaxLeft=-4
MaxTop=108
MaxWidth=1288
MaxHeight=666
ClientWidth=1280
ClientHeight=632
LeftPanelSize=0
LeftPanelClients=CodeExplorer@EditWindow0
LeftPanelData=00000400010000000C000000436F64654578706C6F726572000000000000000000000000000000000001000000000000000000000000FFFFFFFF
RightPanelSize=0
BottomPanelSize=0
BottomPanelClients=MessageView@EditWindow0
BottomPanelData=00000400010000000B0000004D657373616765566965770005000000000000025500000000000000010000000000000000000000000100000000000500000B0000004D65737361676556696577FFFFFFFF
[View0]
Module=D:\Projects\Delphi\sti\check_function\Unit1.pas
CursorX=53
CursorY=106
TopLine=184
LeftCol=1
[Watches]
Count=0
[WatchWindow]
WatchColumnWidth=100
WatchShowColumnHeaders=1
Create=1
Visible=0
State=0
Left=0
Top=138
Width=265
Height=638
MaxLeft=-1
MaxTop=-1
ClientWidth=257
ClientHeight=612
TBDockHeight=612
LRDockWidth=257
Dockable=1
[Breakpoints]
Count=1
Breakpoint0='D:\Projects\Delphi\sti\check_goto\Unit1.pas',102,'',0,1,'',1,0,0,'',1,'','',''
[AddressBreakpoints]
Count=0
[Main Window]
Create=1
Visible=1
State=0
Left=0
Top=0
Width=1280
Height=112
MaxLeft=-1
MaxTop=-1
ClientWidth=1272
ClientHeight=78
[ProjectManager]
Create=1
Visible=0
State=0
Left=369
Top=372
Width=438
Height=303
MaxLeft=-1
MaxTop=-1
ClientWidth=430
ClientHeight=277
TBDockHeight=303
LRDockWidth=438
Dockable=1
[CPUWindow]
Create=1
Visible=0
State=0
Left=96
Top=114
Width=959
Height=635
MaxLeft=-1
MaxTop=-1
ClientWidth=951
ClientHeight=601
DumpPane=79
DisassemblyPane=187
RegisterPane=231
FlagPane=64
[AlignmentPalette]
Create=1
Visible=0
State=0
Left=200
Top=107
Width=156
Height=84
MaxLeft=-1
MaxTop=-1
ClientWidth=150
ClientHeight=60
[PropertyInspector]
Create=1
Visible=1
State=0
Left=9
Top=203
Width=274
Height=559
MaxLeft=-1
MaxTop=-1
ClientWidth=266
ClientHeight=533
TBDockHeight=429
LRDockWidth=190
Dockable=1
SplitPos=144
ArrangeBy=Name
SelectedItem=Caption
ExpandedItems=
HiddenCategories=
[ObjectTree]
Create=1
Visible=0
State=0
Left=958
Top=125
Width=190
Height=669
MaxLeft=-1
MaxTop=-1
ClientWidth=182
ClientHeight=643
TBDockHeight=290
LRDockWidth=190
Dockable=1
[CodeExplorer@EditWindow0]
Create=1
Visible=0
State=0
Left=0
Top=12
Width=140
Height=459
MaxLeft=-1
MaxTop=-1
ClientWidth=140
ClientHeight=459
TBDockHeight=305
LRDockWidth=140
Dockable=1
[MessageView@EditWindow0]
Create=1
Visible=0
State=0
Left=12
Top=0
Width=1268
Height=85
MaxLeft=-1
MaxTop=-1
ClientWidth=1268
ClientHeight=85
TBDockHeight=85
LRDockWidth=443
Dockable=1
[DockHosts]
DockHostCount=0
Приложение З
яя яя и_ яя_ яя_ ____ ( @ _ _ _ Ђ Ђ ЂЂ Ђ Ђ Ђ ЂЂ ЂЂЂ ААА я я яя я я я яя яяя 1______ ?33331_ _??3333_ 33333_ ?????? 33331 _DD ??і? _FvvD ??і1 Gggfv@ ??і1_&vvggd ?і1_wwgbvt ?і1wwwr"gf@ _??1wwwr"vv@ ??3_wr""gf@ ??3_wr""&f@ ??і_ww"w""@ _?і1Џwr'""@ _?і1?чw""$ _??1rwr"ы_ ??3_'w"/? ??3_"ww$? _?і__"" ? _?і1 ? ??1 ?? ??3_ ???p ?31 ?? і3333;?31 ?? ?33333?і3 ??? ?і333???3 ?? ????????і ??ё????????і ???????????? ? ? Ђ_яяЂ_яяЂ_яяА_яяА_яяр_ѓяр_ яр
р_ ?ш_ ?ш _ш _ь _ь _ь _ю _ю ?ю ?я ?я _яЃѓЏяЂяЗяАь_яА~_яа>_ ?_ ?_ ?Ѓ ?А ?Б ?гяяяч_ 0 яя_ M A I N I C O N ____ _ _ _ _ _ и_ _
Приложение К
Я _ћ# Bљ†;Ѓ^с _- <pUnit1.pas1љ†; rUnit1.dfm_u„;_d_StdCtrlsИCТп f_TMemoй ЪMf_TButton7кИef_TLabel-‡r»g_.TMemoР®L0g_.TButton_x;Hg_.TLabel__еќcd_DialogsИCТп f TOpenDialogЖвЇРg
.TOpenDialogp"іg_TOpenDialog.GetFileNameЗҐќфcd_FormsИCТп f_TForm_и±Ig_.TFormпu$,g_TCustomForm.AlignControlsmgaИg_TCustomForm.CreateParamspgaИg_TCustomForm.CreateWindowHandleqgaИg_TCustomForm.CreateWndrgaИg_TCustomForm.DefinePropertiestgaИg_TCustomForm.DestroyWindowHandleugaИg_TCustomForm.DoCreatewgaИg_TCustomForm.DoDestroyxgaИg_TCustomForm.GetClientRect{gaИg_TCustomForm.GetFloating}gaИg_TCustomForm.LoadedgaИg_TCustomForm.NotificationЂgaИg_TCustomForm.PaintWindow‚gaИg_TCustomForm.QueryInterface„gaИg_TCustomForm.ReadState…gaИg_TCustomForm.SetParentBiDiMode€gaИg_TCustomForm.SetParentЉgaИg_TCustomForm.UpdateActions‹gaИg_TCustomForm.ValidateRenameЌgaИg_TCustomForm.WndProcЏgaИg_TCustomForm.ResizingђgaИg_TCustomForm.CreateЗgaИg_TCustomForm.CreateNewИgaИg_TCustomForm.DestroyЙgaИg_TCustomForm.AfterConstructionКgaИg_TCustomForm.BeforeDestructionЛgaИg_TCustomForm.CloseQueryНgaИg_TCustomForm.DefaultHandlerОgaИg_TCustomForm.SetFocusЪgaИg_TCustomForm.SetFocusedControlЫgaИg_TCustomForm.ShowModalЭgaИg_TCustomForm.WantChildKeyЮgaИg%TScrollingWinControl.AdjustClientRectё(_#g&TScrollingWinControl.AutoScrollEnabledє(_#g%TScrollingWinControl.AutoScrollInView»(_#g_TCustomForm.CloseМgaИcd_ControlsИCТп g_TWinControl.AssignToЏк.Їg_TWinControl.CanAutoSize“к.Їg_TWinControl.CanResize”к.Їg_TWinControl.ConstrainedResize-к.Їg_TWinControl.CreateHandle™к.Їg#TWinControl.CustomAlignInsertBeforeћк.Їg_TWinControl.CustomAlignPositionџк.Їg_TWinControl.DestroyWndЈк.Їg_TWinControl.GetClientOriginік.Їg_TWinControl.GetControlExtentsµк.Їg_TWinControl.GetDeviceContext¶к.Їg_TWinControl.SetParentBackgroundПк.Їg_TWinControl.ShowControlСк.Їg_TWinControl.Invalidate_л.Їg_TWinControl.Repaint_л.Їg_TWinControl.SetBounds л.Їg_TWinControl.Update
л.Їg_TControl.GetAction6†`)g_TControl.GetDragImages<†`)g_TControl.GetEnabled=†`)g!TControl.GetFloatingDockSiteClass?†`)g_TControl.SetAutoSizeN†`)g_TControl.SetDragModeO†`)g_TControl.SetEnabledP†`)g_TControl.SetNameQ†`)g_TControl.SetBiDiModeU†`)g_TControl.InitiateAction”†`)g_TControl.SetTextс…`)g_TControl.GetTextК…`)cd_GraphicsИCТп g_TFont.SetColork_ЅЬg_clRedъ«Zеg_clBlackыЄZеcd_ClassesИCТп g_TComponent.UpdateRegistryЋЋтмg_TComponent.WriteState'Ћтмg_TComponent.SafeCallExceptionЄЋтмg_TPersistent.Assign§N_`cd_VariantsИCТп cd_SysUtilsИCТп g_IntToStr_i5Ћcd_MessagesИCТп cd_WindowsИCТп cd_SysInitИCТп cd_SystemИCТп f_TObjectј„©_g_TObject.DispatchАG--ѓg_TObject.NewInstanceВG--ѓg_TObject.FreeInstanceГG--ѓf_Integer¶Ё§
f
AnsiStringФяЧf_StringФяЧg_@LStrClrСЁ}µg_@HandleFinallyEуa‚f_BooleanW_~8gSetLength g_Pos g_@LStrPosEуa‚g_Break g_Delete g_Length g_@LStrLen‹_М_g @LStrDeleteEуa‚g_Continue g_Copy g@LStrCopyEуa‚g_True°№таg_FalseЇ№таg_Inc g_Exit g_@DynArraySetLengthEуa‚g_@LStrAsgѓ4_µg@LStrCatNEуa‚g_@LStrCatEуa‚g
@LStrArrayClrzYњґg_@FinalizeArrayBBґјg_@DynArrayClearxB)Іc4_Unit1Ђiif@_c4_Windows ѕc4_Messages јc4_SysUtils ёc4_Variants ¶c4_Classes ¬c4_Graphics ¤c4_Controls hc4_Forms _c4_Dialogs _c4_StdCtrls _c&_.TForm1Ђ>›Љ _ *_TForm1€W
_)_ _Form1жes1)_6 _msTypePositionжaW,1_8 _msFunctionNameжLV§,_:*_.2Ђяяяя_ _msFunctionKolParamжѓ*Ob_<*_.3Ђяяяя_
iFunctionKolжД_Б
_>*_.4Ђяяяя '_msTypeвBоЈ_ Ѓ( _ *_.5Ђяяяя"'_msErrorвссЈ_"Q ( _ Ѓ_ _.6f$ (_TForm1.buOpenClickЂMР_M ___&!_Self___!_Sender_
_c(_TForm1.buProverkaClickЂNР_M !__&!_Selff_ш!_Sender_
_ _sFilef_р
sFunctionNamef_и _sFunctionParamf_а _i___ _iKolf_Ш _j___ _iminPosf_Р _iminNomf_И iKodErrorf_А iKolParam__
flagFunctionf_ѕc(_TForm1.buCloseClickЂOР_M
_&!_Self__ !_Sender_
_c(
FinalizationЂEуa‚ ф! &cћ_(_Unit1Ђ _!_&cћюG _ _Й_F<_9_
A
5_z©юј& ,_Memo1__б ,_buOpen__с ,
buProverka___
lbRezultat___
,_odFile__!
,_buClose__1
- buOpenClick_оu__-_buProverkaClick_оЃ__-
buCloseClick_о№__cL ( _(_E<_I_*E<_Q_,L((Y__._L(0e__0_D _ $_ Ђ_яяяP@ D _ $_
яL ю _2_L ю _4_D _ $_
яD _ $_
яD _ $ юPD _ $ юPl‰3L _ @_ њ_ Щ_ __ _ а_ ш_ _Memo1ь_ _ _buOpen _ _
buProverka__ _
lbRezultat__ _ _odFile
_ _ _buClose_ _ buOpenClick_ _buProverkaClick_
buCloseClick_TForm1_ _ __TForm1L ^ _Unit1 _ __.2_ H _Unit1_ __.3_ _ _Unit1_
_.4_ _ _ _ $ 4 D яяяя_ void яяяя_ int яяяя_ double яяяя_ char яяяя_ bool _
_.5_ _ _ 8 h ” И ф яяяя% Ошибка!!! Отсутствует задание функции яяяя% Ошибка!!! Некоректное задание функции яяяя" Ошибка!!! Отсутствует тело функции яяяя* Ошибка!!! Некоректное задание тела функции яяяя# Ошибка!!! Некоректный вызов функции яяяя( Ошибка!!! Некоректное задание параметров U‹мj S‹Ш3АUh{ dя0d‰ ‹ѓ__ ‹_яR<„Аt@‹ѓш_ ‹Ђ _ ‹_яRDЌUь‹ѓ__ и ‹Uь‹ѓш_ ‹Ђ _ ‹_яQh3Т‹ѓ__ и 3АZYYd‰_h‚ ЌEьи Гй лр[Y]ГU‹м№ j j IuщQSVW‰Eь3АUh__ dя0d‰ ЌUш‹Eь‹Ђш_ ‹Ђ _ ‹_яQ_ѓ}ш _„ђ_ 3АЈ 3А‰EаЎ @Pё №_ ‹_ и ѓД_Ў @Pё №_ ‹_ и ѓД_ЗEи_' ѓ}и _„ђ_ ѕ_ ї З__' ѓЗ_NuфЗEии_ 3А‰Eдѕ_ ЗEФ » ‹EФ‹ ‹Uши ‰_ѓ; t_‹_;Eи}_‹_‰Eи‰uдFѓГ_ѓEФ_ѓю_uРѓ}д _„#_ ‹Eд‹_…ьяяяи ‹И_MиЌEшє_ и ‹Uшё__ и ‹р…цu_ѓ= _…Ш_ ЗEа_ йЦ_ ЌEфP‹ОIє_ ‹Eши ЌEш‹Оє_ и ЖEЯ_‹Eфи …А~+‰EШѕ_ ‹EфЉD0я_Р,
r__щ,_r
_ъ,_r_ЖEЯ FяMШuЭЂ}Я _„d_ я_ Ў @Pё №_ ‹_ и ѓД_Ў @Pё №_ ‹_ и ѓД_Ў ‹_ Ќ_ђ‹Uфи Ў ‹_ 3Й‰
ђ‹Uшё(_ и ‹р…цu
ЗEа_ йе ЌEрP‹ОIє_ ‹Eши ЌEш‹Оє_ и ‹Uрё4_ и ‹р…цt0Ў ‹_ я_ђЌEр‹Оє_ и ‹Uрё4_ и ‹р…цuРЎ ‹_ ѓ<ђ t_Ў ‹_ я_ђ‹Uшё@_ и ‹р…цuЗEа_ лDЌEш‹Оє_ и ‹UшёL_ и ‹р…цuЗEа_ л_ЌEш‹Оє_ и ѓ}и _…pэяяѓ}а t3‹Eь‹Ђ__ ‹@hєя и ‹Eа‹_…ьяяя‹Eь‹Ђ__ и йl_ ‹Eь‹Ђ__ ‹@h3Ти ‹Eь‹Ђ__ єX_ и Ў …А~H‰EШѕ_ ЌUМ‹Eь‹__ ‹Ги яuМh|_ Ў я4°ЌEРє_ и ‹UР‹Ги FяMШuАЌUИ‹Eь‹__ ‹Ги ЌEИє€_ и ‹UИ‹Ги Ў …А_Ћѕ_ ‰EШѕ_ ЌUш‹Eь‹Ђш_ ‹Ђ _ ‹_яQ_Ў ‹_°‹Uши ‹ШЎ ‹_°и ‹И_ЛЌEшє_ и Ў ‹_°‹Uши ‹Ш3А‰Eм…Ы_„п_ яEмЎ ‹_°и ‹И_ЛIЌEшє_ и ‹EшЂ8(te‹Eь‹Ђ__ ‹@hєя и ЌUА‹Eь‹Ђ__ и яuАh€_ я5_ h|_ Ў я4°ЌEДє_ и ‹UД‹Eь‹Ђ__ и йБ_ ‹Uшё(_ и ‹Ш…Ыue‹Eь‹Ђ__ ‹@hєя и ЌUё‹Eь‹Ђ__ и яuёh€_ я5_ h|_ Ў я4°ЌEјє_ и ‹Uј‹Eь‹Ђ__ и йI_ ЌEрP‹Лє_ ‹Eши 3я‹Uрё4_ и ‹Ш…Ыt#GЌEр‹Лє_ и ‹Uрё4_ и ‹Ш…ЫuЭ…яt_GЎ ;<°te‹Eь‹Ђ__ ‹@hєя и ЌU°‹Eь‹Ђ__ и яu°h€_ я5_ h|_ Ў я4°ЌEґє_ и ‹Uґ‹Eь‹Ђ__ и йЉ ЌEш‹Лє_ и Ў ‹_°‹Uши ‹Ш…Ы_…_юяяЌUЁ‹Eь‹__ ‹Ги яuЁh”_ Ў я4°hЁ_ ЌU¤‹Eми яu¤hј_ h€_ ЌE¬є_ и ‹U¬‹Ги FяMШ_…Jэяя3АZYYd‰_h
_ ЌE¤и ЌEЁє и ЌEрє_ и Гй лЦ_^[‹е]Г яяяя_ ( яяяя_ ) яяяя_ , яяяя_ { яяяя_ } яяяя_ Правильно заданы функции: яяяя_ яяяя_
яяяя_ Функция яяяя вызвана яяяя раз(a, ов) и ГU‹м3АUhq dя0d‰ я_ uJё №_ ‹_ и ё №_ ‹_ и ё ‹_ и ё ‹_ и 3АZYYd‰_hx Гй лш]Гѓ- _Гme_ _5_ _5_ _9___5___5___5______І__P__R__Ж__V__И__К__N__j__(__ґ__4__6__<__љ__®__D__°__:__J__n__l__p__Њ__z__0__~__Ћ__ђ__2__'__”__-____@__>__њ__F__ћ__„__†__€__Љ__`__ __r__"__$__&__t__v__*__x__|__8__Ђ__‚__X__b__d__H__,__.__B__L__T__Z__\__^
_5_ј_u_$_Ѓ_,_№_4____________9_ _9___5______I_ _I___Р__Р__Q_ _Q_(_М__Y_ _Y_ _Р__]_ _a___a___a___a___a___a__e_ _e_ _Р__i_ _m___m___m___m___m___m___m_Ѓ__u___u_h__B_ __u___Т
_Ф__Ѓ_4_Ѓ_\_U___U___E___I_
_ц__U___M___Q_
_ц<_A_H_]_
_A___Ьn_]_
_д$_ж__Ѓ_
_Ь__U_N_м__ж__д~_U_
_U___E___I_
_ц__U___M___Q_
_ц__E_
_U___ш
_M_
_U___Ѓ_
_ЬL_м__ж__Ѓ_
_Ь__M_
_U_$_ж__Ѓ_
_Ь__M
_U___M_
_U___Ѓ_
_Ь<_ж__Ѓ_
_Ь<_жL_¦__i___ 0_¦__Ѓ_
_
_U_>_ў__Ѓ_
_E_ _ъ__ 2_ў__Ѓ_
_ь__
_U_X_E___Ь__E___д"_ж
_E___Ь._E___д$_ж<_¦"_ў__Ѓ_
_i_
_Ѓ_
_E_ _ъ"_ __Ѓ_
_Ь8_¦"_ў__Ѓ_
_i_
_Ѓ_
_E_ _ъ"_ 0_м__Ѓ_
_Ь,_ж__Ѓ_
_Ь _M_6_¦"_ў__Ѓ_
_i_
_Ѓ_
_E_ _ъ"_ (_ж
_E___Ь:_ў__Ѓ_
_E___Ѓ___є__Ѓ_
_Ѓ___ъ__?._Ѓ___Т__ю__ю
_Ф__?___f
_Е___Е___q___i___Р
___
_]___Р
___
_M_
_Q_
___
_E_
_I_
_____Е_
_Ф_____q_
__ђт^1__,___"_D_T___H_._____
_>_>_____,___
_"_____
__р__
___B________
_(_____(ю<_
_>_>_,_ _______
_(__________ш____"____________________Эю_1___
_,_0_
_&_&_"юv_
_T_*_._$_<_$_
_____>___,_?_
_____,_?_
_&__________ш_
___,_?_
__ј$H__??_`Ђ_с__
_ц _?__]_ ?__ __?NZ_ _ _9_ _ _9___ _9___ _9___ _9___ _9_
_ _9_
_ u_ __$"\9___ "Ѓ_ __&$p9___ $?_ __(&E_9___ &=_ _ 6A_ _ 8E_ _ :M_ _ <U_ _ >]_ _ Di_ _ Fy_ _ Јі_}_ _ \?_ _ ___?_ _ pЌ_ _ t?_ _ t?_ _ t?_ _ vќ_ _ vЎ_ _ vҐ_ _ v?_ _ v?_ _ v?_ _ vµ_ _ xЅ_ _ Јz_Б_ _ E_Е_ _ Y_??u_@_ __y_,_y__юЃ_Б_ё p_?_M__?_
_ю?_х__?___ю?_i__?_х_ю?_U__?_б_ю?_н__?_э_ю?_-_?_?ю?_х_?_y
ю?_µ
_?_Е
ю?_} _?_Ќ ю?_? _?_н ю?_)
_?_9
ю?_]
_?_?
ю?_Ѓ__?_Ѓ_ю?_}__Ў_!__Ў_?_юЎ_б__Ў_ќ_ю?_=_ю?_Q__Ў_Ќ__Ў_ќ_ю?___юЎ_1__?_1__Ў_}_ю?_?_
Ў_Б__Ў___юЎ_M__Ў_?_ю?_?_ю?___юЎ_-__?_-__Ў_i_юЎ_?__Ў_С_ю?_1_ю?_@ Ѕ_ Ѕ_
юЕ_ __ a
Приложение Л
__DELPHI.DIAGRAM.PORTFOLIO_ а@___Untitled1_ _ _
Приложение М
object Form1: TForm1
Left = 320
Top = 139
Width = 520
Height = 572
Caption = #1055#1088#1086#1074#1077#1088#1082#1072' '#1086#1073#1098#1103#1074#1083#1077#1085#1080#1103' '#1080' '#1080#1089#1087#1086#1083#1100#1079#1086#1074#1072#1085#1080#1103' '#1092#1091#1085#1082#1094#1080#1081
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object lbRezultat: TLabel
Left = 154
Top = 464
Width = 52
Height = 13
Caption = #1056#1077#1079#1091#1083#1100#1090#1072#1090
end
object Memo1: TMemo
Left = 8
Top = 8
Width = 497
Height = 393
ScrollBars = ssBoth
TabOrder = 0
end
object buOpen: TButton
Left = 8
Top = 408
Width = 137
Height = 33
Caption = #1054#1090#1082#1088#1099#1090#1100' '#1092#1072#1081#1083
TabOrder = 1
OnClick = buOpenClick
end
object buProverka: TButton
Left = 8
Top = 448
Width = 137
Height = 33
Caption = #1042#1099#1087#1086#1083#1085#1080#1090#1100' '#1087#1088#1086#1074#1077#1088#1082#1091
TabOrder = 2
OnClick = buProverkaClick
end
object buClose: TButton
Left = 8
Top = 496
Width = 137
Height = 33
Caption = #1042#1099#1093#1086#1076
TabOrder = 3
OnClick = buCloseClick
end
object odFile: TOpenDialog
Filter = 'C++ '#1092#1072#1081#1083'|*.cpp'
Left = 208
Top = 16
end
end
Приложение Н
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
buOpen: TButton;
buProverka: TButton;
lbRezultat: TLabel;
odFile: TOpenDialog;
buClose: TButton;
procedure buOpenClick(Sender: TObject);
procedure buProverkaClick(Sender: TObject);
procedure buCloseClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
msTypePosition: array [1..5]of integer;
msFunctionName: array of string;
msFunctionKolParam: array of integer;
iFunctionKol: integer;
const
msType: array [1..5] of string= ('void', 'int', 'double', 'char', 'bool');
msError: array[1..6]of string= ('Ошибка!!! Отсутствует задание функции',
'Ошибка!!! Некоректное задание функции',
'Ошибка!!! Отсутствует тело функции',
'Ошибка!!! Некоректное задание тела функции',
'Ошибка!!! Некоректный вызов функции',
'Ошибка!!! Некоректное задание параметров');
implementation
{$R *.dfm}
procedure TForm1.buOpenClick(Sender: TObject);
begin
if odFile.Execute then
begin
Memo1.Lines.Clear;
Memo1.Lines.LoadFromFile(odFile.FileName);
lbRezultat.Caption:= '';
end;
end;
procedure TForm1.buProverkaClick(Sender: TObject);
var
sFile, sFunctionName, sFunctionParam: string;
i, iKol, j, iminPos, iminNom, iKodError, iKolParam: integer;
flagFunction: boolean;
begin
sFile:= Memo1.Lines.Text;
if sFile<>'' then
begin
iFunctionKol:= 0;
iKodError:= 0;
SetLength(msFunctionName, iFunctionKol+1);
SetLength(msFunctionKolParam, iFunctionKol+1);
// поиск задания типа функции
iminPos:= 10000;
while iminPos<>0 do
begin
for i:= 1 to 5 do msTypePosition[i]:= 10000;
iminPos:= 1000;
iminNom:= 0;
for i:= 1 to 5 do
begin
msTypePosition[i]:= pos(msType[i], sFile);
if (msTypePosition[i]<>0)and(msTypePosition[i]<iminPos) then
begin
iminPos:= msTypePosition[i];
iminNom:= i;
end;
end;
if iminNom=0 then break;
delete(sFile, 1, iminPos+ length(msType[iminNom]));
// выделение имени функции до скобки
i:= pos('(', sFile);
if i=0 then
begin
if iFunctionKol=0 then
begin
iKodError:= 1;
Break;
end
else
Continue;
end;
sFunctionName:= copy(sFile, 1, i-1);
delete(sFile, 1, i);
flagFunction:= true;
for i:=1 to length(sFunctionName) do
if not(sFunctionName[i] in ['A'..'Z', 'a'..'z', '0'..'9'])then flagFunction:= false;
if not flagFunction then Continue; // выход если нашли не функцию а задание переменной
inc(iFunctionKol);
SetLength(msFunctionName, iFunctionKol+1);
SetLength(msFunctionKolParam, iFunctionKol+1);
msFunctionName[iFunctionKol]:= sFunctionName;
msFunctionKolParam[iFunctionKol]:= 0;
// выделение параметров передоваемых в функцию
i:= pos(')', sFile);
if i=0 then
begin
iKodError:= 2;
Break;
end;
sFunctionParam:= copy(sFile, 1, i-1);
delete(sFile, 1, i);
i:= pos(',', sFunctionParam);
// подсчет числа запятых
while i<>0 do
begin
msFunctionKolParam[iFunctionKol]:= msFunctionKolParam[iFunctionKol]+1;
delete(sFunctionParam, 1, i);
i:= pos(',', sFunctionParam);
end;
// число параметров на 1 больше числа запятых
if msFunctionKolParam[iFunctionKol]<>0 then
msFunctionKolParam[iFunctionKol]:= msFunctionKolParam[iFunctionKol]+1;
// удаление тела функции
i:= pos('{', sFile);
if i=0 then
begin
iKodError:= 3;
Break;
end;
delete(sFile, 1, i);
i:= pos('}', sFile);
if i=0 then
begin
iKodError:= 4;
Break;
end;
delete(sFile, 1, i)
end;
// выход при ошибке задания функции
if iKodError<>0 then
begin
lbRezultat.Font.Color:= clRed;
lbRezultat.Caption:= msError[iKodError];
exit;
end;
lbRezultat.Font.Color:= clBlack;
lbRezultat.Caption:= 'Правильно заданы функции: ';
for i:= 1 to iFunctionKol do
lbRezultat.Caption:= lbRezultat.Caption+' '+ msFunctionName[i];
lbRezultat.Caption:= lbRezultat.Caption+#13;
// проверка на правильный вызод описанных функций
for i:= 1 to iFunctionKol do
begin
sFile:= Memo1.Lines.Text;
j:= pos(msFunctionName[i], sFile);// поиск описания функции в теле программы
delete(sFile, 1, j+length(msFunctionName[i]));
j:= pos(msFunctionName[i], sFile);// поиск вызова функции в теле программы
iKol:= 0;
while j<>0 do
begin
Inc(iKol);
delete(sFile, 1, j+length(msFunctionName[i])-1);
if sFile[1]<>'(' then
begin
lbRezultat.Font.Color:= clRed;
lbRezultat.Caption:= lbRezultat.Caption+#13+ msError[5]+' '+msFunctionName[i];
Exit;
end;
j:= pos(')', sFile);
if j=0 then
begin
lbRezultat.Font.Color:= clRed;
lbRezultat.Caption:= lbRezultat.Caption+#13+msError[5]+' '+msFunctionName[i];
Exit;
end;
sFunctionParam:= copy(sFile, 1, j);
iKolParam:= 0;
j:= pos(',', sFunctionParam);
while j<>0 do
begin
Inc(iKolParam);
delete(sFunctionParam, 1, j);
j:= pos(',', sFunctionParam);
end;
if iKolParam<>0 then iKolParam:= iKolParam+1;// если запятые найдены, то на один больше число параметров
if iKolParam<> msFunctionKolParam[i] then
begin
lbRezultat.Font.Color:= clRed;
lbRezultat.Caption:= lbRezultat.Caption+#13+msError[6]+' '+msFunctionName[i];
Exit;
end;
delete(sFile, 1, j);
j:= pos(msFunctionName[i], sFile);// поиск вызова функции в теле программы
end;
lbRezultat.Caption:= lbRezultat.Caption+'Функция '+ msFunctionName[i]+ ' вызвана '+
IntToStr(iKol)+' раз(a, ов)'+#13;
end;
end;
end;
procedure TForm1.buCloseClick(Sender: TObject);
begin
Close;
end;
end.
Подобные документы
Методы грамматического разбора. Разработка структуры учебного транслятора на базовом языке программирования Object Pascal в среде объектно-ориентированного визуального программирования Borland DELPHI 6.0 с использованием операционной системы Windows XP.
курсовая работа [493,8 K], добавлен 12.05.2013Разработка программы в среде программирования Borland Pascal, которая является электронным тестирующим пособием в области химии для 8-10 классов. Написание алгоритма решения задачи, определение необходимых функций, процедур, модулей, файловых переменных.
контрольная работа [389,3 K], добавлен 19.09.2010Free Pascal как свободная реализация языка Паскаль, совместимая с Borland Pascal и Object Pascal - Delphi, но при этом обладающая и некоторыми дополнительными возможностями. Основы алгоритмизации и программирования, создание визуальных приложений.
учебное пособие [4,2 M], добавлен 13.12.2011Формирование текстового документа с именем goto.cpp., содержимое которого взято из русифицируемой справки MSDN по оператору безусловного перехода. Выбор оптимального алгоритма решения задачи, разработка интерфейса, отладка и тестирование программы.
курсовая работа [499,8 K], добавлен 10.11.2009Реализация алгоритма Гомори на языке программирования Object Pascal при использовании среды разработки Borland Delphi 7. Рассмотрение основных способов компьютерного осуществления решения задач целочисленного программирования симплексным методом.
курсовая работа [1,8 M], добавлен 28.03.2013Borland Delphi 7 как универсальный инструмент разработки, применяемый во многих областях программирования, функции: добавление информации об абитуриентах в базу данных, формирование отчетов. Рассмотрение и характеристика основных компонентов Delphi.
контрольная работа [3,6 M], добавлен 18.10.2012Основные понятия и структура обработчика на языке Pascal. Элективные курсы по информатике в системе профильного обучения. Элективный курс "Программирование в среде Delphi". Методические материалы по изучению программирования на языке Object Pascal.
методичка [55,4 K], добавлен 08.12.2010История программных продуктов "Borland Software Corporation". Языки программирования Turbo-Pascal, Delphi, CaliberRM, Turbo C++ и основные их принципы работы. Развитие их совместимости с Windows. Создание корпоративных систем на основе Веб-технологий.
реферат [20,9 K], добавлен 02.04.2010Характеристика вычислительной системы и инструментов разработки. Программирование на языке Pascal в среде Turbo Pascal и на языке Object Pascal в среде Delphi. Использование процедур, функций, массивов, бинарного поиска. Создание базы данных в виде файла.
отчет по практике [2,1 M], добавлен 02.05.2014Проектирование программного модуля в среде программирования Borland Delphi 7.0. Схемы алгоритмов решения задач по темам "Символьные переменные и строки", "Массивы", "Работа с файлами", "Создание анимации". Реализация программного модуля, код программы.
отчет по практике [961,6 K], добавлен 21.04.2012