ЗАВДАННЯ НА КУРСОВУ РОБОТУ
Вихідним файлом для перевірки є текст програми на мові C + +. Перевірити правильність написання у програмі інструкцій безумовного переходу. Програма повинна бути розроблена на мові Borland Object Pascal (Ide Borland Delphi).
ЗМІСТ
1.Вступ
2.Виконання ЗАВДАННЯ
2.1.Подготовка вихідного файлу
2.2.Разработка програми
2.3.Лістінг програми
2.4. Запуск програми
ПЕРЕЛІК ПОСИЛАНЬ
ДОДАТКИ
ВСТУП
Система програмування Турбо Паскаль, розроблена американською корпорацією Воrland, залишається однією з найпопулярніших систем програмування в світі. Придуманий швейцарським вченим Нікласом Віртом як засіб для навчання студентів програмуванню, мова Паскаль стараннями О. Хейлсберг перетворився на потужну сучасну професійну систему програмування, якій до снаги будь-які завдання - від створення простих програм, призначених для рішення нескладних обчислювальних завдань, до розробки найскладніших реляційних систем управління базами даних. Поява Windows та інструментальних засобів Borland Pascal with Objects і Delphi для розробки програм в середовищі Windows зайвий раз показало, які воістину невичерпні можливості таїть він в собі: і Borland Pascal, і який використовується в Delphi мову Object Pascal грунтуються на Турбо Паскалі та розвивають його ідеї.
Основна мета курсової роботи - закріплення і узагальнення знань отриманих при вивченні дисципліни «Програмування».
В результаті виконання курсової роботи повинні бути отримані навички аналізу поставленої задачі, вибору найбільш оптимального алгоритму розв'язання задачі, розробки інтерфейсу, налагодження і тестування програм великого обсягу.
ВИКОНАННЯ ЗАВДАННЯ
Підготовка вихідного файлу
Сформуємо текстовий документ з ім'ям 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:
/ / ...
}
Розробка програми
У середовищі програмування Borland Delphi створимо новий додаток (пункт меню File \ New \ Application). Властивості форми Caption привласнимо значення «Перевірка Goto». Розмістимо на формі візуальні і невізуальні компоненти.
Невізуальний компонент - це діалогове вікно вибору файлу для відкриття. Компонент класу TOpenDialog стає видимим тільки в режимі запущеного додатка після виклику методу Execute. Привласнимо компоненту ім'я odFile.
Розміщуємо на формі три компоненти класу TButton з іменами buOpen, buProverka buClose. Оброблювач натискання на кнопку buOpen відкриває вихідний файл (рядки 33 - 41) і відображає його вміст на компоненті Memo 1 класу 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) виконує закриття програми.
Лістинг програми
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. |
Запуск програми
Це досягається натисненням клавіші F 9. Після компіляції запускається програма на виконання. Вікно програми з результатами роботи представлені на рис.2-5.
Рис.2 - Вікно відкриття файлу
Рис.3 - Перевірка файлу
Рис.4 - Перевірка файлу
Рис.5 - Перевірка файлу
ПЕРЕЛІК ПОСИЛАНЬ
Абрамов В.Г., Трифонов Н.П., Трифонова Г.М. Введення в мову Паскаль. - М.: Наука, 1988.
Довгаль С.І., Литвинов Б.Ю., Сбітнєв А.. І. Персональні ЕОМ: Турбо Паскаль V 7.0, об'єктне програмування, локальні мережі. - Київ: Інформсісітема сервіс, 1993.
Епанешников А.М., Епанешнікова В.А. Програмування в середовищі Turbo Pascal 7.0.-М.: Діалог-МІФІ, 1999.
Зуєв Є.А. Програмування на мові Turbo Pascal 6.0,7.0. - М.: Радіо і зв'язок, Веста, 1993.
Кандзюба С.П., Громов В. М. Delphi 7. Бази даних та програми. Лекції і вправи. - К.: Видавництво "ДіаСофт", 2001.
Клімова Л. М. Pascal 7.0. Практичне програмування. Рішення типових завдань. -М.: КУДІУ ОБРАЗ, 2000.
Марченко А. І., Марченко Л.А.. Програмування в середовищі Turbo Pascal 7.0.-К.: Століття +, 1999.
Фаронов В. В. Turbo Pascal 7.0. Початковий курс. - М.: Нолидж, 2000.
ДОДАТКИ
Додаток А
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;
}
}
Додаток Б
- $ 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 Studio \ SKSMiK \ ZarPlata \ units \ UData.pas', 0,1,545,15,558,1,0
File_1 = SourceModule, 'D: \ Projects \ Delphi Studio \ SKSMiK \ ZarPlata \ units \ UTablNU.pas', 0,1,681,50,698,1,0
File_2 = SourceModule, 'D: \ Projects \ Delphi Studio \ SKSMiK \ ZarPlata \ units \ UMain.pas', 0,1,148,31,155,1,0
File_3 = SourceModule, 'D: \ Projects \ Delphi Studio \ SKSMiK \ ZarPlata \ units \ UPerson.pas', 0,1,99,34,116,1,0
File_4 = SourceModule, 'D: \ Projects \ Delphi Studio \ SKSMiK \ ZarPlata \ units \ UFunction.pas', 0,1,479,1,492,0,0
File_5 = SourceModule, 'D: \ Projects \ Delphi Studio \ SKSMiK \ ZarPlata \ units \ UEtalon.pas', 0,1,800,40,825,0,0
File_6 = SourceModule, 'D: \ Projects \ Delphi Studio \ SKSMiK \ ZarPlata \ units \ UCreateAllReport.pas', 0,1,406,51,407,0,0
File_7 = SourceModule, 'D: \ Projects \ Delphi Studio \ SKSMiK \ ZarPlata \ units \ USprNa.pas', 0,1,1,17,9,1,0
File_8 = SourceModule, 'D: \ Projects \ Delphi Studio \ SKSMiK \ ZarPlata \ units \ USprUd.pas', 0,1,305,1,308,1,0
File_9 = SourceModule, 'D: \ Projects \ Delphi Studio \ SKSMiK \ ZarPlata \ units \ USprOtdel.pas', 0,1,1,1,1,1,0
[Modules]
Module0 = D: \ Projects \ Delphi \ sti \ check_goto \ Unit1.pas
Count = 1
EditWindowCount = 1
[D: \ Projects \ Delphi \ sti \ check_goto \ Unit1.pas]
ModuleType = SourceModule
FormState = 1
FormOnTop = 0
[C: \ Program Files \ Borland \ Delphi7 \ Projects \ ProjectGroup1.bpg]
FormState = 0
FormOnTop = 0
[D: \ Projects \ Delphi \ sti \ check_goto \ 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 = 868
Height = 505
MaxLeft =- 4
MaxTop = 108
MaxWidth = 1288
MaxHeight = 666
ClientWidth = 1280
ClientHeight = 632
LeftPanelSize = 0
LeftPanelClients = CodeExplorer @ EditWindow0
LeftPanelData =
RightPanelSize = 0
BottomPanelSize = 0
BottomPanelClients = MessageView @ EditWindow0
BottomPanelData =
[View0]
Module = D: \ Projects \ Delphi \ sti \ check_goto \ Unit1.pas
CursorX = 13
CursorY = 57
TopLine = 64
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 = 0
[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 = Name
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 =- 100
Top =- 534
Width = 443
Height = 85
MaxLeft =- 1
MaxTop =- 1
ClientWidth = 443
ClientHeight = 85
TBDockHeight = 85
LRDockWidth = 443
Dockable = 1
[DockHosts]
DockHostCount = 0
Додаток До
object Form1: TForm1
Left = 320
Top = 139
Width = 520
Height = 500
Caption = # 1055 # 1088 # 1086 # 1074 # 1077 # 1088 # 1082 # 1072 'Goto'
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 = 210
Top = 424
Width = 52
Height = 13
Caption = # 1056 # 1077 # 1079 # 1091 # 1083 # 1100 # 1090 # 1072 # 1090
end
object Memo1: TMemo
Left = 8
Top = 48
Width = 497
Height = 353
ScrollBars = ssBoth
TabOrder = 0
end
object buOpen: TButton
Left = 16
Top = 8
Width = 169
Height = 33
Caption = # 1054 # 1090 # 1082 # 1088 # 1099 # 1090 # 1100 '' # 1092 # 1072 # 1081 # 1083
TabOrder = 1
OnClick = buOpenClick
end
object buProverka: TButton
Left = 16
Top = 416
Width = 185
Height = 33
Caption = # 1055 # 1088 # 1086 # 1074 # 1077 # 1088 # 1082 # 1072 'Goto'
TabOrder = 2
OnClick = buProverkaClick
end
object buClose: TButton
Left = 365
Top = 8
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;
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, sLabelName: string;
i, iKol, j: integer;
begin
sFile: = Memo1.Lines.Text;
if sFile <>''then
begin
iKol: = 0;
i: = pos ('goto', sFile);
while i <> 0 do
begin
delete (sFile, 1, i +4);
i: = pos (';', sFile);
j: = pos (# 13, sFile);
if ((j <> 0) and (j <i)) or (i = 0) then
begin
lbRezultat.Caption: = 'Помилка: відсутність;';
lbRezultat.Font.Color: = clRed;
Exit;
end;
sLabelName: = copy (sFile, 1, i-1);
if not (sLabelName [1] in ['A' .. 'Z', 'a' .. 'z']) then
begin
lbRezultat.Caption: = 'Помилка: Напевне ім'я мітки '+ sLabelName;
lbRezultat.Font.Color: = clRed;
Exit;
end;
for i: = 2 to length (sLabelName) do
if not (sLabelName [i] in ['0 '.. '9', 'A' .. 'Z', 'a' .. 'z']) then
begin
lbRezultat.Caption: = 'Помилка: Напевне ім'я мітки '+ sLabelName;
lbRezultat.Font.Color: = clRed;
Exit;
end;
i: = pos (sLabelName + ':', sFile);
if i = 0 then
begin
lbRezultat.Caption: = 'Помилка: Відсутній перехід на мітку '+ sLabelName;
lbRezultat.Font.Color: = clRed;
Exit;
end;
inc (iKol);
i: = pos ('goto', sFile);
end;
if lbRezultat.Caption =''then
begin
lbRezultat.Caption: = 'Правильне завдання '+ IntToStr (iKol) +' інструкцій безумовного переходу ';
lbRezultat.Font.Color: = clNavy;
end;
end;
end;
procedure TForm1.buCloseClick (Sender: TObject);
begin
Close;
end;
end.