РЕЗУЛЬТАТЫ ТЕСТИРОВАНИЯ И ИНСТРУКЦИЯ ПОЛЬЗОВАТЕЛЯ
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ, МОЛОДЕЖИ И СПОРТА УКРАИНЫ
ЧЕРНИГНОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ
Кафедра электрических систем и сетей
КУРСОВАЯ РАБОТА
По дисциплине «Вычислительная техника, алгоритмические языки и программное обеспечение»
Вариант № 1
Выполнил:
Студент группы ЗEM-111 ____________ Шакало С.Н.
Проверил:
Ст.преподователь ____________ \ Красножон А.В.
Чернигов ЧГТУ 2013
СОДЕРЖАНИЕ
1 ВВЕДЕНИЕ. 4
2 АЛГОРИТМ.. 5
3 ПРОГРАММА.. 6
3.1..... Интерфейс программы 6
3.2..... Текст программы 7
3.3..... Описание текста программы 31
4 РЕЗУЛЬТАТЫ ТЕСТИРОВАНИЯ И ИНСТРУКЦИЯ ПОЛЬЗОВАТЕЛЯ.. 33
4.1..... Результаты тестирования 33
4.2..... Инструкция пользователя 34
5 ВЫВОДЫ.. 36
6 ИСПОЛЬЗОВАННАЯ ЛИТЕРАТУРА.. 37
ВВЕДЕНИЕ
Программы, работающие на компьютере, можно разделить на три категории:
1. Прикладные программы, непосредственно обеспечивающие выполнение необходимых пользователям работ: редактирование текстов, рисование, обработку информационных массивов и т.д.
2.Системные программы, выполняющие различные вспомогательные функции, например диагностика компьютера или резервное копирование информации.
3.Инструментальные системы (системы программирования), обеспечивающие создание новых программ.
Данные категории программ в свою очередь так – же разделяются на несколько разделов. Например, прикладные программы можно разделить по уровню сложности обработки информации и результатов. Для математических вычислений существует множество различных программных продуктов. Это известные всем пакеты MathCad, MathLab, Mathematika, Axum. Есть и более простые: всевозможные программы – калькуляторы (имитирующие работу обычного калькулятора). В среде Windows есть такая программа (Calc.exe), по аналогии с ней было сделано данное задание[1],[2].
АЛГОРИТМ
На рисунке 2.1 показана блок-схема работы калькулятора, с кратким описанием каждого блока.
Рисунок 2.1 – Блок-схема работы калькулятора
ПРОГРАММА
Интерфейс программы
На рисунке 3.1 показан конструктор формы, с компонентами ввода чисел, функций, операций с памятью и меню калькулятора.
Рисунок 3.1 – Интерфейс калькулятора
При нажатии пункта меню калькулятора «Справка» видим окно «About» с названием приложения, вариантом и именем автора – рисунок 3.2
Рисунок 3.2 – О программе
Текст программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls, ExtCtrls,Math,clipbrd,UnitAbout;
type
TJournal=record
x,y,z:real;
cod:char;
end;
TForm1 = class(TForm)
bmod: TButton;
open_brace: TButton;
close_brace: TButton;
Button12: TButton;
Button13: TButton;
Button14: TButton;
Button15: TButton;
Button16: TButton;
Button17: TButton;
Button18: TButton;
Button6: TButton;
B7: TButton;
B8: TButton;
B9: TButton;
B4: TButton;
B5: TButton;
B6: TButton;
B3: TButton;
B2: TButton;
B1: TButton;
B0: TButton;
Button24: TButton;
Button25: TButton;
Button26: TButton;
Button27: TButton;
Button28: TButton;
Button_Calculate: TButton;
Button30: TButton;
BSqrt: TButton;
Button1: TButton;
Edit1: TEdit;
RadioGroup1: TRadioGroup;
MainMenu1: TMainMenu;
N2: TMenuItem;
CtrlC1: TMenuItem;
CtrlV1: TMenuItem;
N_Spravka: TMenuItem;
N_invokespravka: TMenuItem;
N7: TMenuItem;
N_aboutprogram: TMenuItem;
N8: TMenuItem;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button7: TButton;
Button8: TButton;
Button9: TButton;
Button10: TButton;
Button11: TButton;
Button22: TButton;
Button23: TButton;
ListBox1: TListBox;
Button19: TButton;
procedure B9Click(Sender: TObject); //процедуры ввода данных
procedure Button24Click(Sender: TObject);
procedure Button25Click(Sender: TObject);
procedure Button26Click(Sender: TObject);
procedure Button27Click(Sender: TObject);
procedure Button28Click(Sender: TObject);
procedure Button_CalculateClick(Sender: TObject);
procedure Button30Click(Sender: TObject);
procedure BSqrtClick(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure B0Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button18Click(Sender: TObject);
procedure Button17Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure open_braceClick(Sender: TObject);
procedure Button13Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure B1Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure Button14Click(Sender: TObject);
procedure Button9Click(Sender: TObject);
procedure Button10Click(Sender: TObject);
procedure Button11Click(Sender: TObject);
procedure Button19Click(Sender: TObject);
procedure Button20Click(Sender: TObject);
procedure close_braceClick(Sender: TObject);
procedure B2Click(Sender: TObject);
procedure Button21Click(Sender: TObject);
procedure Button22Click(Sender: TObject);
procedure Button12Click(Sender: TObject);
procedure Button23Click(Sender: TObject);
procedure B3Click(Sender: TObject);
procedure B4Click(Sender: TObject);
procedure B5Click(Sender: TObject);
procedure B6Click(Sender: TObject);
procedure B7Click(Sender: TObject);
procedure B8Click(Sender: TObject);
procedure CtrlC1Click(Sender: TObject);
procedure CtrlV1Click(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure N_invokespravkaClick(Sender: TObject);
procedure N_aboutprogramClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
const
journal_max=1000;
var
Form1: TForm1;
code : char;
op1, y, z : real;
x1, y1, z1 : Integer;
mem_str,journal_str:String;
journal_array:array[1..journal_max] of TJournal;
ji:Integer;
implementation
{$R *.dfm}
procedure TForm1.B9Click(Sender: TObject); //ввод данных
begin
Edit1.Text:=Edit1.Text+'9';
end;
procedure TForm1.Button24Click(Sender: TObject); //ввод запятой
begin
Edit1.Text:=Edit1.Text+',';
end;
procedure TForm1.Button25Click(Sender: TObject);
begin
if edit1.Text<>'' then op1:=strtofloat(edit1.text);
code := '+';
Edit1.Clear;
end;
procedure TForm1.Button26Click(Sender: TObject);
begin
if edit1.Text<>'' then op1:=strtofloat(edit1.text);
code := '-';
Edit1.Clear;
end;
procedure TForm1.Button27Click(Sender: TObject);
begin
if edit1.Text<>'' then op1:=strtofloat(edit1.text);
code := '*';
Edit1.Clear;
end;
procedure TForm1.Button28Click(Sender: TObject);
begin
if edit1.Text<>'' then op1:=strtofloat(edit1.text);
code := '/';
Edit1.Clear;
end;
procedure TForm1.Button_CalculateClick(Sender: TObject); //рассчет данных и вывод в журнал событий
begin
if edit1.Text<>'' then y:=strtofloat(edit1.text);
journal_array[ji].x:=op1;
journal_array[ji].y:=y;
journal_array[ji].cod:=code;
journal_str:=FloatToStr(op1);
journal_str:=journal_str+ code + FloatToStr(y);
ListBox1.Items.Add(journal_str);
case code of
'+': z:=op1+y;
'-': z:=op1-y;
'*': z:=op1*y;
'/': z:=op1/y;
'^': z:=Power(op1,y);
'[': z:=Trunc(op1) Mod Trunc(y);
']': z:=Trunc(op1) Div Trunc(y);
'{': z:=Power(op1,1/y);
end;
edit1.Text:=floattostr(z); // вывод в поле Edit1 значение переменной z
journal_array[ji].z:=z;
Inc(ji);
if ji=journal_max then ji:=1;
end;
procedure TForm1.Button30Click(Sender: TObject); //расчет обратного числа
begin
op1:= strtofloat(edit1.text);
z:=1/op1;
edit1.Clear; //очищаем поле
edit1.Text:=floattostr(z);
end;
procedure TForm1.BSqrtClick(Sender: TObject); //вычисление квадратного корня
begin
op1:= strtofloat(edit1.text);
z:=Power(op1,1/2);
edit1.Clear;
edit1.Text:=floattostr(z);
end; //завершение процедуры
procedure TForm1.Button2Click(Sender: TObject); //ввод данных
begin
op1:= strtofloat(edit1.text);
z:=(op1*(-1));
edit1.Clear;
edit1.Text:=floattostr(z);
end;
procedure TForm1.B0Click(Sender: TObject); //ввод данных
begin
Edit1.Text:=Edit1.Text+'0';
end;
procedure TForm1.Button6Click(Sender: TObject); //стирание всех данных,
op1:=0; // не занесенных в память
begin
y:=0;
z:=0;
Edit1.Clear;
end;
procedure TForm1.Button18Click(Sender: TObject); //стирание последнего
begin //введенного числа
Edit1.Text:='';
end;
procedure TForm1.Button17Click(Sender: TObject); //стирание знаков
var
st:string;
begin
st:=Edit1.Text;
delete(st,length(st),1);
Edit1.Text:=st;
if Edit1.Text='' then begin
Edit1.Text:='';
end;
end;
procedure TForm1.Button3Click(Sender: TObject); //вычисление котангенса
begin
if RadioGroup1.ItemIndex=0 then begin
op1:=(strtofloat(edit1.text)*3.141592653589793)/180;
z:=cos(op1)/sin(op1);
edit1.Clear;
edit1.Text:=floattostr(z);
end;
if RadioGroup1.ItemIndex=1 then begin
op1:=strtofloat(edit1.text);
z:=cos(op1)/sin(op1);
edit1.Clear;
edit1.Text:=floattostr(z);
end;
if RadioGroup1.ItemIndex=2 then begin
op1:=strtofloat(edit1.text);
z:=cos(gradtorad(op1))/sin(gradtorad(op1));
edit1.Clear;
edit1.Text:=floattostr(z);
end;
end;
procedure TForm1.Button4Click(Sender: TObject); //возведение в квадрат числа
begin
op1:= strtofloat(edit1.text);
z:=Power(op1,2);
edit1.Clear;
edit1.Text:=floattostr(z);
end;
procedure TForm1.Button1Click(Sender: TObject); //возведение в степень числа
begin
op1:= strtofloat(edit1.text);
code := '^';
edit1.Clear;
end;
procedure TForm1.open_braceClick(Sender: TObject);//открытие скобок
begin
op1:= strtofloat(edit1.text);
code := '{';
edit1.Clear;
end;
procedure TForm1.Button13Click(Sender: TObject); // вызов числа из памяти
begin
mem_str:='';
mem_str:=Edit1.Text;
end;
procedure TForm1.Button5Click(Sender: TObject); //регистр последнего результата
i:Integer; //вычеслений
result:Real;
begin
result:=1;
op1:=strtofloat(edit1.text);
if (Trunc(op1) < 0) then begin
Edit1.Text:='Недопустимый ввод';
end
else if (Trunc(op1) = 0) then begin
Edit1.Text:='1';
end
else begin
for i:= 1 to Trunc(op1) do begin
result:= result * i;
end;
Edit1.Text:=FloatToStr(result);
end;
end;
procedure TForm1.Button7Click(Sender: TObject); //вычисление десятичного
begin //логарифма
op1:= strtofloat(edit1.text);
z:=log10(op1);
edit1.Clear;
edit1.Text:=floattostr(z);
end;
procedure TForm1.B1Click(Sender: TObject);
begin
Edit1.Text:=Edit1.Text+'1';
end;
procedure TForm1.Button8Click(Sender: TObject);//вычисление натурального
begin //логарифма
op1:=strtofloat(edit1.text);
z:=ln(op1);
edit1.Clear;
edit1.Text:=floattostr(z);
end;
procedure TForm1.Button14Click(Sender: TObject); //занести отображаемое
begin //число в память
if (mem_str<>'') then Edit1.Text:=mem_str else Edit1.Text:='';
end;
procedure TForm1.Button9Click(Sender: TObject); // вывод числа Pi
begin
edit1.Text:='3,141592653589793';
end;
procedure TForm1.Button10Click(Sender: TObject); //вычисление синуса
Var
rcs:Real;
begin
if RadioGroup1.ItemIndex=0 then begin
op1:=(strtofloat(edit1.text)*3.141592653589793)/180;
z:=sin(op1);
edit1.Clear;
edit1.Text:=floattostr(z);
end;
if RadioGroup1.ItemIndex=1 then begin
op1:=strtofloat(edit1.text);
z:=sin(op1);
edit1.Clear;
edit1.Text:=floattostr(z);
end;
if RadioGroup1.ItemIndex=2 then begin
op1:=strtofloat(edit1.text);
z:=sin(gradtorad(op1));
edit1.Clear;
edit1.Text:=floattostr(z);
end;
journal_array[ji].x:=op1;
journal_array[ji].y:=0;
journal_array[ji].cod:='0';
journal_array[ji].z:=z;
journal_str:=FloatToStr(op1);
journal_str:='sin('+journal_str+')';
ListBox1.Items.Add(journal_str);
Inc(ji);
if ji=journal_max then ji:=1;
end;
procedure TForm1.Button11Click(Sender: TObject); //вычисление косинуса
begin
if RadioGroup1.ItemIndex=0 then begin
op1:=(strtofloat(edit1.text)*3.141592653589793)/180;
z:=cos(op1);
edit1.Clear;
edit1.Text:=floattostr(z);
end;
if RadioGroup1.ItemIndex=1 then begin
op1:=strtofloat(edit1.text);
z:=cos(op1);
edit1.Clear;
edit1.Text:=floattostr(z);
end;
if RadioGroup1.ItemIndex=2 then begin
op1:=strtofloat(edit1.text);
z:=cos(gradtorad(op1));
edit1.Clear;
edit1.Text:=floattostr(z);
end;
journal_array[ji].x:=op1;
journal_array[ji].y:=0;
journal_array[ji].cod:='0';
journal_array[ji].z:=z;
journal_str:=FloatToStr(op1);
journal_str:='cos('+journal_str+')';
ListBox1.Items.Add(journal_str);
Inc(ji);
if ji=journal_max then ji:=1;
end;
procedure TForm1.Button19Click(Sender: TObject); // вычисление тангенса
begin
if RadioGroup1.ItemIndex=0 then begin
op1:=(strtofloat(edit1.text)*3.141592653589793)/180;
z:=sin(op1)/cos(op1);
edit1.Clear;
edit1.Text:=floattostr(z);
end;
if RadioGroup1.ItemIndex=1 then begin
op1:=strtofloat(edit1.text);
z:=sin(op1)/cos(op1);
edit1.Clear;
edit1.Text:=floattostr(z);
end;
if RadioGroup1.ItemIndex=2 then begin
op1:=strtofloat(edit1.text);
z:=sin(gradtorad(op1))/cos(gradtorad(op1));
edit1.Clear;
edit1.Text:=floattostr(z);
end;
journal_array[ji].x:=op1;
journal_array[ji].y:=0;
journal_array[ji].cod:='0';
journal_array[ji].z:=z;
journal_str:=FloatToStr(op1);
journal_str:='tan('+journal_str+')';
ListBox1.Items.Add(journal_str);
Inc(ji);
if ji=journal_max then ji:=1;
end;
procedure TForm1.close_braceClick(Sender: TObject); //закрытие скобок
begin
op1:= strtofloat(edit1.text);
code := '}';
edit1.Clear;
end;
procedure TForm1.B2Click(Sender: TObject); //ввод числа 2
begin
Edit1.Text:=Edit1.Text+'2';
end;
procedure TForm1.Button21Click(Sender: TObject); //вывод числа Эйлера
Var
e:Real;
begin
e:=2.7182818284;
op1:= strtofloat(edit1.text);
z:=Power(e,op1);
edit1.Clear;
edit1.Text:=floattostr(z);
end;
procedure TForm1.Button22Click(Sender: TObject); //Возведение в степень по основанию 10
begin
op1:= strtofloat(edit1.text);
z:=Power(10,op1);
edit1.Clear;
edit1.Text:=floattostr(z);
end;
procedure TForm1.Button12Click(Sender: TObject); //очистить память
begin
mem_str:='';
end;
procedure TForm1.Button23Click(Sender: TObject); //возвращает дробную часть числа
с плавающей запятой
begin
op1:= strtofloat(edit1.text);
z:=Frac(op1);
edit1.Clear;
edit1.Text:=floattostr(z);
end;
procedure TForm1.B3Click(Sender: TObject); //ввод числа 3
begin
Edit1.Text:=Edit1.Text+'3';
end;
procedure TForm1.B4Click(Sender: TObject); //ввод числа 4
begin
Edit1.Text:=Edit1.Text+'4';
end;
procedure TForm1.B5Click(Sender: TObject); //ввод числа 5
begin
Edit1.Text:=Edit1.Text+'5';
end;
procedure TForm1.B6Click(Sender: TObject);
begin
Edit1.Text:=Edit1.Text+'6';
end;
procedure TForm1.B7Click(Sender: TObject);
begin
Edit1.Text:=Edit1.Text+'7';
end;
procedure TForm1.B8Click(Sender: TObject);
begin
Edit1.Text:=Edit1.Text+'8';
end;
procedure TForm1.CtrlC1Click(Sender: TObject); //копировать
begin
Edit1.SelectAll;
Edit1.CopyToClipboard;
end;
procedure TForm1.CtrlV1Click(Sender: TObject); //вставить
begin
Edit1.SelectAll;
Edit1.PasteFromClipboard;
end;
procedure TForm1.N8Click(Sender: TObject); //выход из приложения
begin
Form1.Close;
end;
procedure TForm1.N_invokespravkaClick(Sender: TObject); //вызов справки
begin
WinExec('hh.exe calc.htm',SW_SHOW);
end;
procedure TForm1.N_aboutprogramClick(Sender: TObject); //вывод окна про
программу
begin
AboutBox.Show;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ji:=1;
end;
procedure TForm1.ListBox1Click(Sender: TObject); //журнал событий
var
ind:Integer;
begin
ind:=(ListBox1.ItemIndex);
Inc(ind);
z:=journal_array[ind].z;
Edit1.Text:=FloatToStr(z);
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); //ввод с клавиату
begin
if key='+' then begin Button25Click(Sender);Edit1.Clear; end;
if key='-' then begin Button26Click(Sender);Edit1.Clear; end;
if key='*' then begin Button27Click(Sender);Edit1.Clear; end;
if key='/' then begin Button28Click(Sender);Edit1.Clear; end;
if key='=' then Button_CalculateClick(Sender);
end;
end.
Описание текста программы
Список переменных использованных в программе с кратким описанием:
code : char; Тип операции
op1, y, z : real; Первый и второй операнд, и результат.
type
TJournal=record
x,y,z:real;
cod:char;
end; Тип записи журнала событий
mem_str,journal_str:String; Строка записываемая в журнал событий
journal_array:array[1..journal_max] of TJournal; Массив куда записываются ход
вычислений.
ji:Integer; Индекс в массиве журнала.
Список процедур и функций, использованных в программе с кратким
описанием:Были использованы обработчики событий визуальных компонент и
стандартные функции с модулей Math и clipbrd.
При каждом вычислении результат сохраняется в структуре массива
journal_array и в ListBox появляется новая запись при щелчке на запись в
журнале событий в поле ввода появляется результат предыдущих вычислений.
При нажатии на кнопку MR перезаписывается содержимое переменной m, и
устанавливается M в Panel1. При нажатии на кнопку MC обнуляется
содержимое переменной m и сбрасывается содержимое Panel1.caption.
При нажатии F1 или выбора с меню справка -> вызов справки вызывается
справка в формате chm созданной с помощю программы HTML HELP
Workshop.
На рисунке 3.3 показано окно вызова справки.
Рисунок 3.3 – Справка калькулятора
РЕЗУЛЬТАТЫ ТЕСТИРОВАНИЯ И ИНСТРУКЦИЯ ПОЛЬЗОВАТЕЛЯ
Результаты тестирования
На рисунке 4.1 показано результаты тестирования с показом журнала записей и результатом.
Введем 35, умножим на 50, получаем 1750.
Делим на 105, получаем 16,6
Вычисляем синус в радианах, получаем -0,818.
Вычитаем 100, получаем -100,818447253158
Рисунок 4.1 – Результаты тестирования
Инструкция пользователя
Данная программа предназначена для выполнения тех же действий, что и обычный калькулятор. Она выполняетосновные арифметические действия, такие, как сложение и вычитание, плюс функции научного калькулятора, такие как тригонометрические функции, логарифмы, степени ит. Также есть возможность записи хода вычислений в журнал событий. Нажимая на каждое событие в ListBox, мы получаем результаты предыдущих вычислений.
Можно производить вычисления, нажимая на кнопки калькулятора.Или вводя символы с клавиатуры. Кроме того, доступен ввод цифр и действий с цифровой клавиатуры, когда нажата клавиша NUMLOCK.
Выполнение простых вычислений:
Введите первое число;
Нажмите кнопку + (сложение), - (вычитание), * (умножение) или / (деление);
Введите следующее число;
Введите необходимый оператор;
Введите остальные числа и операторы;
Нажмите кнопку =.
Работа с памятью
Чтобы занести отображаемое число в память, нажмите кнопку MS.
Чтобы вызвать число из памяти, нажмите кнопку MR.
Чтобы очистить память, нажмите кнопку MC.
Чтобы сложить отображаемое число с числом, хранящимся в памяти, нажмите
кнопку M+. Чтобы вызвать результат, нажмите кнопку MR.
После сохранения числа над кнопками памяти на панели калькулятора появится индикатор M. Каждое новое число, занесенное в память, заменяет предыдущее.
Горячие клавиши:
1. F1 – Вызов справки
2. F10 – Выход из программы
ВЫВОДЫ
Был написан калькулятор, выполняющий действия, что и обычный калькулятор только с возможностью записи в журнал событий, была написана справка помощь для калькулятора. Отработаны и закреплены на практике навыки работы в среде программирования Delphi. Простота, скорость и эффективность Delphi объясняют ее популярность. Delphi имеет один из самых быстрых компиляторов, порождающий, тем не менее, весьма и весьма неплохой объектный код. Есть и другие достоинства: простота изучения Object Pascal; облегчающие жизнь нововведения - вроде свойств (properties); программы, написанные на Delphi, не требуется снабжать дополнительными библиотеками (в отличие от связки C++/MFC) [3]. В самом деле, VCL предоставляет удобный, легко расширяемый объектно-ориентированный интерфейс к Windows, что ни в коей мере не мешает программисту опускаться в самые глубины Windows API. Создателям оригинальных компонентов это приходится делать довольно часто, в отличие от "просто программистов". Как было сказано выше, модель программирования в Delphi - компонентная, что позволяет пользоваться компонентами, написанными другими разработчиками, даже не имея их исходного кода и уж подавно не изучая его. В Интернете есть огромное количество компонентов, значительная часть которых распространяется бесплатно. Применение компонентной модели приводит к тому, что довольно многое в поведении объектов программировать не нужно вообще, и многое, на что в других средах ушли бы недели, можно сделать за часы или даже минуты. Оно и понятно - это ведь RAD-среда. К достоинствам можно отнести очень быстрый браузер классов и мгновенный вывод подсказки автозавершения кода (code completion) [4]. Если кратко - может все. Конечно, Object Pascal накладывает определенные ограничения, но для тех вещей, для которых ее писали, Delphi подходит практически оптимально.
ИСПОЛЬЗОВАННАЯ ЛИТЕРАТУРА
1. Культин Н. Delphi 6. Программирование на Object Pascal. – СПб.:БХВ-Петербург,2002., – 356с.
2. Фаранов В.В. Delphi 6. Учебный курс. –М.: «Издательство Молгачева С.В.», 2001., – 150с.
3. Культин Н. Основы программирования в Delphi 7: Самоучитель. - СПб.:БХВ-Петербург,2003., – 231с.
4. Бакнелл Д.М. Фундаментальные алгоритмы и структуры данных в Delphi. СПб.: Диасофт ЮП. 2003., – 566с.