Алгоритмы для вычисления корней системы на языке Паскаль
Паскаль — один из наиболее перспективных языков программирования. Он разработан в 1971 году математиком Никлаусом Виртом, профессором Института информатики Швейцарской высшей политехнической школы в Цюрихе. Язык получил наименование в честь знаменитого математика и философа Блеза Паскаля (1623−1662), который один из первых изобрел в 1641 году калькулятор (суммирующую машину). Интегрированность… Читать ещё >
Алгоритмы для вычисления корней системы на языке Паскаль (реферат, курсовая, диплом, контрольная)
Министерство образования Республики Беларусь Белорусский национальный технический университет Кафедра «Тепловые электрические станции»
КУРСОВАЯ РАБОТА ПО ИНФОРМАТИКЕ Исполнитель: Стражникова Е. В.
Гр. 106 422
Руководитель: Тарасевич Л.А.
Минск 2003 г.
1. Постановка задачи
Показанный на рисунке кривошипно-шатунный механизм описывается уравнением К1•S1•cos (цi)+K2•sin (цi)-K3=SiІ
при =1,2,3, где А1=К½;
А2=vА1І+А3І-К3 ;
А3=К2/2•А1;
Механизм должен удовлетворять следующим условиям:
i | Si | цi | |
1.0 | 20° | ||
1.2 | 45° | ||
2.0 | 60° | ||
Спроектировать устройство, отвечающее всем трем указанным условиям. Для этого записать трижды уравнение, описывающее работу механизма, и найти Кi, какие значения А1, А2, А3 соответствуют искомому решению?
2. Краткое описание Pascal
Язык программирования Язык — это средство общения между людьми, человеком и машиной и между машинами. Языки могут быть естественные и искусственные, или формальные. Естественным языкам присуща неопределенность и неточность. Искусственные языки, предназначенные для записи программ, называют алгоритмическими или языками программирования.
Алгоритмический язык — это набор символов, являющихся алфавитом языка, система правил связи символов для образования «слов» и «предложений» (синтаксис языка), с помощью которых представляются компоненты языка, и система правил их истолкования (семантика).
Паскаль — один из наиболее перспективных языков программирования. Он разработан в 1971 году математиком Никлаусом Виртом, профессором Института информатики Швейцарской высшей политехнической школы в Цюрихе. Язык получил наименование в честь знаменитого математика и философа Блеза Паскаля (1623−1662), который один из первых изобрел в 1641 году калькулятор (суммирующую машину).
Язык удовлетворяет требованиям структурного программирования: он имеет операторы для реализации управляющих структур программирования. Хороший выбор структур данных позволяет разрабатывать на языке Паскаль простые и эффективные алгоритмы. В 1979 году принят стандарт Паскаля. Основной целью разработки Паскаля было дать язык, пригодный для обучения программированию как систематической дисциплине. Достоинства Паскаля:
ь он ориентирован на структурное программирование, имеет развитые средства контроля и достаточно прост в изучении;
ь язык имеет хороший состав типов и структур данных;
ь трансляторы есть во всех распространенных ПК;
ь конкретные реализации языка дают возможность использовать все аппаратные средства ПК;
ь на основе языка Паскаль разработан Delphi — одна из современных систем визуального программирования.
Недостатки языка Паскаль: в нем нет операции возведения в степень.
Интегрированная среда TURBO PASKAL
Система программирования TURBO PASKAL представляет собой интегрированную среду, включающую в себя экранный редактор, компилятор, редактор связей, отладчик.
Интегрированность среды проявляется не только в единой идеологии построения компонент, но и в связи их друг с другом: при возникновении ошибки TURBO автоматически переходит в режим экранного редактирования и позиционирует курсор в точку возникновения ошибки. Аналогичные действия выполняются и отладчиком при возникновении ошибки во время выполнения программы.
Структура языка Паскаль Структура различных языков программирования однотипна. Они должны иметь средства для:
ь определения свойств объектов программы (ее данных);
ь определения обработки, т. е. получения новых значений объектов;
ь организации процесса обработки данных (разветвлений процесса обработки данных и циклической обработки);
ь ввода-вывода данных, т. е. обмена данными между ОП и внешними устройствами (магнитными дисками, портами, принтером);
ь формирования и использования модулей (программ, процедур и функций) и библиотек модулей (системных и пользовательских, разработанных программистом).
Схематичная структура языка Паскаль
Рис. 2.1 Структура языка Паскаль Классификация операторов Программа на языке Паскаль состоит из операторов. Операторы — это единицы действия языка. Синонимы операторов: предложения, утверждения, инструкции, Statement. Операторы могут быть выполняемые и невыполняемые Выполняемые производят вычисления или управляют процессом вычислений. Невыполняемые содержат сведения о структуре и организации данных, их свойствах и размещении данных в памяти. Почти все операторы начинаются ключевым словом.
Все операторы языка Паскаль можно разбить на ряд групп. Классификация операторов и типов выражений на языке Паскаль дана на рис 2.2.
Встроенные процедуры и функции языка Паскаль В языке Паскаль можно использовать как подпрограммы (процедуры и функции), разработанные программистом, так и встроенные (стандартные) подпрограммы, расположенные в его модулях (библиотеках). Паскаль содержит 8 стандартных модулей, в том числе: System, Crt, DOS, Graph, Overlay. Для использования их процедур и функций надо после оператора PROGRAM записать оператор
Uses список-имен-используемых-модулей.
Подключение модуля System производится по умолчанию, без указания его имени в списке Uses. В модуле System располагаются наиболее часто используемые процедуры и функции языка. Основная группа процедур и функций модуля System:
ь процедуры управления выполнения программы;
ь функции преобразования типов;
ь процедуры и функции для переменных ординального типа;
ь математические функции;
ь процедуры и функции для работы со строками;
ь процедуры и функции управления динамической памятью;
ь процедуры ввода-вывода и работы с файлами и каталогами.
Процедуры и функции модуля Crt предназначены для работы с экраном: его очистки, управления движением курсора на экране, управление клавиатурой, определения цветов фонов и символов, управления звуком и окнами экрана.
Процедуры и функции модуля Graph предоставляют пользователю графические возможности языка. Процедуры и функции модуля Overlay позволяют организацию работы с программами оверлейной структуры.
Процедуры и функции DOS предназначены для обслуживания прерываний, проверки состояния диска, обработки файлов, управления процессами и операционной средой.
Рис. 2.2 Структура программы на языке Паскаль Программа на языке Паскаль состоит из заголовка программы и блока (тела программы). Заголовок программы или подпрограммы — это один из операторов:
PROGRAM — для программы;
PROCEDURE — для процедуры;
FUNKTION — для функции.
Процедуры и функции могут иметь ряд уровней вложенности, т. е. могут быть вложены в другие процедуры или функции.
Блок программы и подпрограммы на языке Паскаль состоит из двух частей:
1. декларативной — описание (объявления) данных программы и текстов подпрограмм (разделы описаний);
2. выполнимой — описания действий, которые надо выполнить над данными (раздел операторов).
Блок включает все, кроме заголовка программы или подпрограммы. В общем случае блок может состоять из шести разделов различных типов. Все они, кроме раздела операторов, необязательны. Каждый раздел описаний начинается ключевым словам:
LABEL — для определения меток;
CONST — для определения констант;
TYPE — для определения типов данных;
VAR — для определения переменных;
PROCEDURE и FUNKTION — для определения процедур и функций;
BEGIN — определяет начало раздела операторов программы.
Оператор PROGRAM должен быть первым в программе, раздел операторов программы — вторым. А между ними может быть сколько угодно разделов описаний в любом порядке. Типы и константы могут использоваться в последующих описаниях типов и переменных и программ.
Последовательность разделов описания объектов (LABEL, CONST, TYPE, VAR и др.) программы может быть произвольной. В случае необходимости типы разделов могут повторяться. Умолчаний в Паскале нет. Все, что используется в программе: константы, переменные, метки, — должно быть объявлено явно. Каждый объект программы должен быть описан и только один раз для данной области действия, объекты программы имеют областью их действия блок, в котором они объявлены, и все вложенные в него блоки, процедуры и функции, в которых они не переобъявлены. Поэтому одни и те же идентификаторы можно использовать в различных подпрограммах (процедурах и функциях) программы в разных смыслах.
паскаль алгоритм уравнение итерация
3. Математическая модель Метод Гаусса Этот метод представляет собой конечный алгоритм для вычисления корней системы.
За основу метода принята идея последовательного исключения неизвестных и приведение СЛАУ к «треугольному» виду.
Алгоритм решения СЛАУ:
А11Х1+А12Х2+А13Х3=В1; (1)
А21Х1+А22Х2+А23Х3=В2 (2)
А31Х1+А32Х2+А33Х3=В3 (3)
1. если А11?0 (т.е. система не является вырожденной) делим первое уравнение на А11
2. исключим из уравнения (2) Х1, для этого умножим уравнение (1) на коэффициент А21 и вычтем из уравнения 2 А21Х1
3. исключим из уравнения (3) Х1, для этого умножим уравнение (1) на коэффициент А31 и вычтем из уравнения (1) уравнение (3), т. е. исключаем из уравнения (3) А31Х1, исходное СЛАУ примет вид А11Х1+А12*Х2+А13*Х3=В1* (1)
А22*Х2+А23*Х3=В2* (2)
А32*Х2+А33*Х3=В3* (3)
4. разделим уравнение (2) на коэффициент А22*
5. исключим из уравнения (3) Х2, для этого умножим уравнение (2) на коэффициент А32* и вычтем из уравнения (2) уравнение (3), т. е. исключаем из уравнения (3) А32*Х2, исходное СЛАУ примет вид А11Х1+А12**Х2+А13**Х3=В1** (1)
А22**Х2+А23**Х3=В2** (2)
А33**Х3=В3** (3)
т.о. исходное СЛАУ приводится к эквивалентной системе с треугольной матрицей. Процедура нахождения неизвестной из полученной треугольной СЛАУ осуществляется обратным ходом.
Метод итерации Метод итерации — итерационный метод, позволяющий получать корни системы с заданной точностью, путем сходящихся бесконечных процессов.
Алгоритм решения СЛАУ А11Х1+А12Х2+А13Х3=В1 (1)
А21Х1+А22Х2+А23Х3=В2 (2)
А31Х1+А32Х2+А33Х3=В3 (3)
Пусть
¦ А11 А12 А13 ¦ ¦В1¦ ¦Х1¦
А=¦ А21 А22 А23 ¦ В=¦В2¦ Х=¦Х2¦
¦ А31 А32 А33 ¦ ¦В3¦ ¦Х3¦
тогда АХ=В Предполагая, что Аii?0 i€[1,3], разрешим уравнение (1) относительно Х1, уравнение (2) относительно Х2, уравнение (3) относительно Х3.
Х1=в1+Ь12Х2+ Ь13Х3 (1)
Х2=в2+Ь21Х2+ Ь23Х3 (1)
Х3=в3+Ь31Х2+ Ь32Х3 (1)
где вi=вi/Ьii; Ьij=-Ьij/Ьii
¦ Ь11 Ь12 Ь13 ¦ ¦в1¦ ¦Х1¦
Ь=¦ Ь21 Ь22 Ь23 ¦ в=¦в2¦ Х=¦Х2¦
¦Ь31 Ь32 Ь33¦ ¦в3¦ ¦Х3¦
исходная СЛАУ примет вид Х=в+ўХ.
Далее решаем методом последовательных приближений. За начальное приближение принимаем столбец свободных членов:
Х1°=в1; Х2°=в2; Х3°=в3
Алгоритм нахождения корней системы следующий:
Х1№=в1+ЬХ1°;
Х2№=в2+ЬХ2°;
Х3№=в3+ЬХ3°.
Вычисления заканчиваются тогда, когда разность между двумя ближайшими итерациями значения корня будет меньше о т. е.
¦Х1?-Х1?О№¦<=о;
¦Х2?-Х2?О№¦<=о;
¦Х3?-Х3?О№¦<=о.
Метод Зейделя
Этот метод представляет собой некоторую модификацию метода итерации. Основная идея заключается в том, что при вычислении n-ого приближения неизвестной Хi учитываются уже вычисленные (n-1)-ые значения переменных Х1, Х2, Х3.
Пусть дана СЛАУ А11Х1+А12Х2+А13Х3=В1 (1)
А21Х1+А22Х2+А23Х3=В2 (2)
А31Х1+А32Х2+А33Х3=В3 (3)
Разрешим каждое из уравнений относительно Х1, Х2, Х3.
Приведенная система имеет вид: Хi = вi +? Ьij Хi;
Выберем произвольное начальное приближение Х1°, Х2°, Х3°.
Далее предполагая, что (n-1)-ое приближение корней Хi? О№ корней известно, будем строить n-ое приближение корней по методу Зейделя по следующим формулам:
Х1?=в1+?Ь1jХj?О№;
Х2?=в2+?Ь2jХj?О№+Ь2jX1?;
Х3?=в3+?Ь3jХj?О№+Ь3jX1?.
Обычно метод Зейделя дает лучшую сходимость, чем метод итерации, но приводит к более громоздким вычислениям. Процесс вычисления заканчивается тогда, когда выполняется условие ¦Хi?-Хi?О№¦<=о, т. е. разность приближений корня в соседних итерациях меньше или равна заданной точности
4. Блок-схемы Основная программа
Метод Гауса
Метод итераций
Метод Зейделя
6. Текст программы
PROGRAM kyrsach;
Uses crt;
Var
s, fi, x: array [1.3] of real;
a: array [1.3,1.4] of real;
i, j: integer;
K1, K2, K3, A1, A2, A3: real;
regime: byte;
ch: char;
Type dlina = string [22];
********формирование рамки********
Procedure frame (x1, y1, x2, y2: byte);
Const
a = #186; b = #187; c = #188;
d = #200; e = #201; f = #205;
Begin
gotoxy (x1, y1);
write (e);
for i:= (x1+1) to (x2−1) do write (f);
write (b);
for i:= (y1+1) to (y2−1) do begin
gotoxy (x1, i);
write (a);
gotoxy (x2, i);
write (a);
end;
gotoxy (x1, y2);
write (d);
for i:= (x1+1) to (x2−1) do write (f);
write (c);
End;
********выбор цвета********
Procedure cf (c, f: byte);
Begin
textcolor (c);
textbackground (f);
End;
********процедура задержки********
Procedure payza (n: byte);
Begin
for i:= 1 to n do
delay (10 000);
end;
********формирование титульного листа********
Procedure zastavka;
Var ch: char;
Begin
clrscr;
window (1, 1, 80, 25);
cf (14, 0);
clrscr;
frame (3, 3, 78, 24);
payza (5);
gotoxy (36, 4); write ('БНТУ');
payza (5);
gotoxy (35, 6); write ('МНО РБ');
payza (5);
gotoxy (25, 9); write (`Курсовой проект по информатике');
payza (5);
gotoxy (45, 14); write ('Исполнила: Стражникова Е. В.');
gotoxy (45, 15); write ('Проверил: Тарасевич Л. А.');
payza (5);
gotoxy (35, 22); write ('Минск 2003');
readkey;
clrscr;
End;
********звуковай сигнал********
Procedure beep;
Begin
sound (800);
payza (1);
nosound;
End;
********формирование меню********
Procedure menu (q1, q2, q3: byte;
ss1, ss2, ss3, ss4, ss5, ss6, ss7, ss8: dlina;
var result: byte);
Label met, men;
Const kr = 8;
Var m: array [1.kr] of string [48];
i, t: byte;
pp: array [1.kr] of byte;
f1: boolean;
Begin
f1:= true;
m[1]: = ss1; m[2]: = ss2; m[3]: = ss3; m[4]: = ss4;
m[5]: = ss5; m[6]: = ss6; m[7]: = ss7; m[8]: = ss8;
t:= length (m[1]);
for i:= 2 to q3 do
if length (m[i])>t then t:= length (m[i]);
frame (q1−1, q2, q1+t+5, q2+q3+1);
for i:= 1 to q3 do begin
if i = 1 then cf (0,10)
else cf (10,0);
gotoxy (q1, q2+1);
write (m[i]);
end;
gotoxy (14, 3);
cf (15+128, 1);
write ('С помощью ', chr (25), ' или ', chr (24),
укажите режим и нажмите', «Enter» ');
cf (7, 0);
men: i:= 1;
while f1 = true do begin
ch:= readkey;
if ch = #13 then f1:= false;
if (ch = #0) and keypressed then begin
ch:= readkey;
case ch of
#80: begin
beep;
gotoxy (q1, q2+i);
cf (10, 0);
write (m[i]);
i:= i+1;
if I = (q3+1) then begin
i:= 1;
cf (10, 0);
gotoxy (q1, q2+1);
cf (0, 10);
write (m[i]);
cf (10, 0);
goto met;
end;
gotoxy (q1, q2+i);
cf (0, 10);
write (m[i]);
cf (10, 0);
end;
#72: begin
if i = 1 then goto met;
gotoxy (q1, q2+i);
beep;
cf (10, 0);
write (m[i]);
i:= i-1;
gotoxy (q1, q2+i);
cf (0, 10);
write (m[i]);
end;
end;
met:
end;
end;
result:= i;
cf (10, 0);
End;
********формирование надписей********
Procedure menu1;
Begin
ch:= readkey;
if ch = #13 then begin
clrscr;
menu (27, 9, 8, ' М е н ю. ',
' ',
' Метод Гаусса. ',
' Метод итераций. ',
' Метод Зейделя. ',
' ',
' Выход ',
' ', regime);
end;
End;
********ввод исходных данных********
Procedure text;
Begin
clrscr;
writeln ('Введите исходные данные');
for i:= 1 to 3 do begin
write ('S', i,'='); readln (S[i]);
write ('FI', i,'='); readln (FI[i]); end;
clrscr;
cf (9, 0);
writeln (' И С Х О Д Н Ы Е Д, А Н Н Ы Е `);
cf (10, 0);
writeln;
writeln ('—————————');
writeln (' i | Si | FIi ');
writeln ('—————————');
for i:= 1 to 3 do
writeln ('| ', i,' | ', s[i]: 0:1,' | ', fi[i]: 0:1,' |');
writeln ('—————————');
writeln;
payza (10);
writeln ('K1*Si*cos (FIi)+K2*sin (FIi)-K3=Si2');
writeln;
cf (9, 0);
writeln ('Система уравнений');
writeln;
cf (10, 0);
for i:= 1 to 3 do
writeln ('K1*', S[i]: 0:1,'*cos (', FI[i]:0:1,')*K2*sin (', FI[i]:0:1,')-K3=', S[i]:0:1,'^2');
writeln;
payza (10);
for i:= 1 to 3 do
FI[i]: = pi/180*FI[i];
for i:= 1 to 3 do begin
a[i, 1]: = S[i]*cos (FI[i]);
a[i, 2]: = sin (FI[i]);
a[i, 3]: = -1; a[i, 4]: = sqr (S[i]);
end;
end;
********метод Гауса********
Procedure gays;
Var n, k, m: real;
Begin
n:= a[1, 1]; k:= a[2, 1]; m:= a[3, 1];
if a[1, 1] = 0 then writeln ('Система является вырожденной');
for j:= 1 to 4 do begin
a[1, j]: = a[1, j]/n;
a[2, j]: = a[1, j]*k — a[2, j];
a[3, j]: = a[1, j]*m — a[3, j]; end;
n:= a[2, 2]; k:= a[3, 2];
for j:= 1 to 4 do begin
a[2, j]: = a[2, j]/n;
a[3, j]: = a[2, j]*k — a[3, j];
end;
K3:= a[3, 4]/a[3, 3];
K2:= a[2, 4]-a[2, 3]*K3;
K1:= a[1, 4]-a[1, 3]*K3 — a[1, 2]*K2;
writeln;
cf (9, 0);
writeln (`Решение системы');
writeln;
cf (13, 0);
writeln ('K1=', K1:0:5);
writeln ('K2=', K2:0:5);
writeln ('K3=', K3:0:5);
payza (10);
writeln;
End;
********метод Зейделя********
Procedure zeydel;
Label z;
Var e, k11, k22, k33: real;
Begin
writeln ('Введите требуемую точность вычислений');
write ('e=');
readln (e);
K11:= a[1, 4]/a[1, 1]; K22:= 0; K33:= 0;
K1:= 0; K2:= 0; K3:= 0;
z: K1:= (a[1, 4]-a[1, 2]*K22 — a[1, 3]*K33)/a[1, 1];
K2:= (a[2, 4]-a[2, 1]*K1 — a[2, 3]*K33)/a[2, 2];
K3:= (a[3, 4]-a[3, 1]*K1 — a[3, 2]*K2)/a[3, 3];
if (abs (K1 — K11) >= e) and (abs (K2 — K22) >= e) and (abs (K3 — K33) >= e)
then begin
K11:= K1; K22:= K2; K33:= K3;
goto z;
end
else begin
cf (9, 0);
writeln ('Решение системы.');
writeln;
cf (13, 0);
writeln ('K1=', k1:0:5);
writeln ('K2=', k2:0:5);
writeln ('K3=', k3:0:5);
end;
End;
********метод итераций********
Procedure iter;
Label z;
Var e, k11, k22, k33: real;
Begin
writeln ('Введите требуемую точность вычислений');
write ('e=');
readln (e);
K11:= a[1, 4]/a[1, 1]; K22:= a[2,4]/a[2, 2]; K33:= a[3,4]/a[3, 3];
K1:= 0; K2:= 0; K3:= 0;
z: K1:= (a[1, 4]-a[1, 2]*K22 — a[1, 3]*K33)/a[1, 1];
K2:= (a[2, 4] - a[2, 1]*K11 — a[2, 3]*K33)/a[2, 2];
K3:= (a[3, 4] - a[3, 1]*K11 — a[3, 2]*K22)/a[3, 3];
if (abs (K1 — K11) >= e) and (abs (K2 — K22) >= e) and (abs (K3 — K33) >= e)
then begin
K11:= K1; K22:= K2; K33:= K3;
goto z;
end
else begin
cf (9, 0);
writeln (`Решение системы');
writeln;
cf (13, 0);
writeln ('K1=', k1:0:5);
writeln ('K2=', k2:0:5);
writeln ('K3=', k3:0:5);
end;
End;
********проверка решения системы********
Procedure prov;
Begin
cf (9, 0);
writeln ('Проверка. ');
writeln;
cf (10, 0);
for i:= 1 to 3 do begin
a[i, 1]: = S[i]*cos (FI[i]);
a[i, 2]: = sin (FI[i]);
a[i, 3]: = -1; a[i, 4]: = sqr (S[i]);
end;
writeln ('K1*Si*cos (FIi)+K2*sin (FIi)-K3=Si2');
writeln;
for i:= 1 to 3 do begin
write (K1:0:1,'*', S[i]: 0:1,'*cos (', FI[i]:0:1,')+', K2:0:1,'*sin (', FI[i]:0:1,')',-K3:0:1,'=');
x[i]:= a[i, 1]*K1+a[i, 2]*K2-K3;
writeln (x[i]: 0:2,'=(S', i,')^2');end;
if (x[1] = 1.00) and (x[2] = 1.44) and (x[3] = 4.00)
then writeln ('Система решена верно.');
writeln;
End;
********нахождение значений********
Procedure yrav;
Begin
A1:= K½; A3:= K2/(2*A1);
A2:= sqrt (sqr (A1) + sqr (A3)-K3);
payza (10);
cf (9, 0);
writeln ('Коффициенты');
cf (13, 0);
writeln;
writeln ('A1=', A1:0:5);
writeln ('A2=', A2:0:5);
writeln ('A3=', A3:0:5);
cf (10, 0);
menu1;
readkey;
End;
********формирование пустого окна********
Procedure pusto;
Begin
gotoxy (10, 14);
write ('О Ш И Б К, А П Р И В Ы Б О Р Е О П Е Р, А Т О Р А');
sound (330); delay (32 000); nosound;
sound (330); delay (32 000); nosound;
sound (330); delay (32 000); nosound;
sound (262); delay (55 000);
sound (294); delay (32 000); nosound;
sound (294); delay (32 000); nosound;
sound (294); delay (32 000); nosound;
sound (247); delay (55 000); nosound;
menu1;
End;
********тело основной программы********
BEGIN
clrscr;
zastavka;
clrscr;
menu1;
clrscr;
case regime of
1, 2, 6, 8: pusto;
3: begin
text;
gays;
prov;
yrav;
end;
4: begin
text;
iter;
prov;
yrav;
end;
5: begin
text;
zeydel;
prov;
yrav;
end;
7: begin clrscr; halt; end;
end;
readkey;
END.
7. Результаты счета
Где
i | Si | цi | |
1.0 | 20° | ||
1.2 | 45° | ||
2.0 | 60° | ||
8. Список используемой литературы.
Ю.С. Бородич, А. Н. Васильев А.И. Кузьмич «Паскаль для персональных компьютеров». Минск — 1991 вышэйшая школа С. В. Мизрохи «TURBO PASKAL и объектно-ориентировочное программирование» Москва — 1992 «финансы и статистика».
Я. Янсон (перевод с немецкого Н.С.Сойфер) «Турбо-Паскаль в сжатом изложении». Москва — 1991 «мир».