> -- Илья Ермаков писал(а):
> Есть хороший пример демонстрации возможностей графического каркаса ББ.
Пример посмотрел…удобно, что он показан в развитии, но задача больно специфическая…
Пока вопрос об нужности снял тем, что готовим учителей информатики и КП в школе хорош хотя бы лучшим синтаксисом основных конструкций)

Продолжая разбираться со средой, возникли еще пара вопросов:
1 придумал следующий простой пример для студентов:
Модуль решения кВ. ур. И пара модулей интерфейсов к нему (с выводом в рабочий журнал и на формы[диалоговая форма по модулю строится автоматически])

MODULE StudKvur;
IMPORT  Math;

PROCEDURE ReshKvUr* (OUT m: ARRAY OF REAL; a,b,c: REAL): BOOLEAN;
VAR
i:INTEGER;
noerrors:BOOLEAN;
BEGIN
noerrors:=FALSE;

FOR  i := 0  TO LEN(m)-1   DO
m[i]:=0
END;

IF (LEN(m)>=3) & (a#0)   THEN
noerrors:=TRUE;
m[0]:=(b*b)-4*a*c;
IF m[0]=0 THEN
m[1]:=-b/(2*a);
m[2]:=-b/(2*a);
ELSIF m[0]>0 THEN
m[1]:=(-b+Math.Sqrt(m[0]))/(2*a);
m[2]:=(-b-Math.Sqrt(m[0]))/(2*a);
END;
END;

RETURN noerrors;
END ReshKvUr;

END StudKvur.

MODULE StudKvurEx;

IMPORT StdLog, StudKvur;

PROCEDURE Сказать*;
VAR
ar:ARRAY 3 OF REAL;
BEGIN
IF  StudKvur.ReshKvUr(ar,1,2,0) =TRUE THEN
StdLog.Ln();
IF  ar[0]<0  THEN
StdLog.String("Действительных корней нет");
ELSIF ar[0]=0 THEN
StdLog.String("Один действительный корнень: "); StdLog.Real(ar[1]);
ELSE
StdLog.String("Два действительных корненя: "); StdLog.Real(ar[1]);StdLog.String(' и ') ;StdLog.Real(ar[2]);
END;
ELSE
StdLog.String("Не удалось произвести вычисления!");
END;
StdLog.Ln();
END Сказать;

END StudKvurEx.

MODULE StudKvurExF;

IMPORT Dialog, StudKvur;
VAR
a*,b*,c*,x1-,x2-:REAL;
сообщение-:ARRAY 40 OF CHAR;

PROCEDURE Сказать*;
VAR
ar:ARRAY 3 OF REAL;
BEGIN
IF  StudKvur.ReshKvUr(ar,a,b,c) =TRUE THEN
IF  ar[0]<0  THEN
сообщение:="Действительных корней нет";
x1:=0;
x2:=0;
ELSIF ar[0]=0 THEN
сообщение:="Один действительный корень";
x1:=ar[1];
x2:=ar[1];
ELSE
сообщение:="Два действительных корня";
x1:=ar[1];
x2:=ar[2];
END;
ELSE
сообщение:="Не удалось произвести вычисления!";
x1:=0;
x2:=0;
END;
Dialog.UpdateReal(x1);
Dialog.UpdateReal(x2);
Dialog.UpdateString(сообщение);
END Сказать;

BEGIN

END StudKvurExF.


Идея показать, что сначала нужно разрабатывать решение задачи, а потом уже создавать реализацию интерфейса (хотя в процессе написания решения нужно будет проверять правильность логики…)[в пособии по Delphi у нас в основном примеры в которых больше кода уходит на взаимодействие с интерфейсом, и складывается впечатление, что мы строим интерфейс под задачу, а потом уже решаем саму задачу, причем получается решение интерфейсозависимое].
Если в StudKvur вместо OUT m: ARRAY OF REAL написать OUT m: ARRAY 3 OF REAL, то в StudKvurExF будет возникать ошибка: StudKvur.ReshKvUr(ar[тип не совпадает с типом формального VAR параметра],a,b,c)
Непонятно почему так нельзя…
Так же у одного из студентов возникло желание превратить это дело в exe фаил.
Пробовали так:
[кумандер]DevLinker.Link
ex1.exe := National Kernel$+ Files HostFiles Math StudKvur Dialog StudKvurExF
неработает))
чего добавить в модуль чтоб заработало непонятно…
2 начал разбираться с вьюшками (думаю с ними можно интересные примеры будет придумать), но тут столкнулся со следующим:
Часто в коде используется NEW, New
Почитав справку вот чего я понял:
Если мы просто создадим переменную, то она будет занимать место в памяти при запуске программы сразу, а если мы объявим указатель, то переменная будет размещена в памяти только если в программе будет выполнено NEW(имя указателя). Т.е. по большему счету это нужно для эффективности? Или есть еще какой смысл в них? (в курсе паскаля мы с указателями не работали…)
New же используется часто для создания экземпляра класса, стандартное название метода для таких ситуаций(?).
Получается, перед ООП нужно людей сначала познакомить с указателями? (тк  если смотреть конкретные реализации, то в них New фигурирует часто)