Помощь новичкам

В сборке 1374 ИСПРАВЛЕНО!

Да, я с удивлением обнаружил, что стандартный System.Predicate имеет только один обобщённый параметр

Меня так вообще жаба душит: я не понимаю, где это может все понадобиться! )))))

var less: Predicate2<real,real> := (x,y) -> x<y;
Sort(a,less);
1 лайк

Вызвало ассоциацию:

var a:=2;
var b:=2;
var c:=1;
Writeln(a+b-c);

Хотя, если это less многократно, есть о чем задуматься, информативно!

Тут дело не в конкретном примере, а в том, что предикаты с двумя параметрами очень распространены. Например, это любые операции отношения. Вы можете написать лямбду в параметр, но это не поменяет того, что этот параметр будет типа Predicate2. Вы ж говорите про жабу, а я говорю, что жабы нет.

Так лямбда - она лямбда и есть, на лету пишется, как однократная. А если предопределить предикат из лямбды - это уже что-то такое… Больше напоминает заглядывание во внутреннюю кухню.

Можно ли в задаче о сдаче эффективно (с точки зрения записи программы) избавится от цикла?

begin
  var k:=Arr(1000,100,50,10); // массив с достоинствами купюр
  var s:=ReadInteger('Введите сумму:'); // сумма к оплате
  Writeln('Уплатить:');
  var i:=0;
  while s>0 do begin
    var p:=s div k[i];
    if p>0 then Writeln(p,' шт. достоинством ',k[i],' руб.');
    s:=s mod k[i]; i+=1
    end;
end.

Можно, но получится не сильно короче, хотя избавиться от индексов (i) это всегда хорошо.

begin
  var k:=Arr(1000,100,50,10); // массив с достоинствами купюр
  var s:= ReadInteger('Введите сумму:'); // сумма к оплате
  Writeln('Уплатить:');
  k.Aggregate(s, (t, n) -> 
  begin 
    var p := t div n;
    if p > 0 then Writeln(p,' шт. достоинством ',n,' руб.');
    result := t mod n;
  end);
end.
2 лайка

Ну до такой свёртки додуматься - это вообще нечто…"

Ничего особенного, если изучить свёртки в языке, созданном для такого стиля программирования (например, Haskell).

function GetNFiles(parth:string):array of string;
var 
   pfi:array of FileInfo;
   pi:FileInfo;
   i:integer;
   s:array of string;
begin
var a:=new DirectoryInfo(parth);
pfi:=a.GetFiles();
i:=-1;
repeat
if High(pfi)<> -1 then
begin
i+=1;
pi:=pfi[i];
s[i]:= pi.Name; \\Выдает ошибку System.NillReferenceExpection
Result:=s;
end;
until i = High(pfi);
end;

Помогите разобраться с ошибкой в коде указанном выше, проблемная строка прокомментированна! Заранее спасибо!

Нужно выделить память для вашего динамического массива. Это можно сделать с помощью процедуры SetLength: SetLength(s, pfi.Length);

Спасибо большое!Впредь буду знать!

А может так:

begin
  EnumerateFiles('.').Println(NewLine)
end.

?

Создается дочерняя форма form2:=unit2.form1.create; form2.owner:=self;

как в коде дочерней формы form2 обратиться к методам описанным мной в родительской форме owner? получается обращаться только к стандартным, реализованным в классе form (show,hide.close…)

Преобразуйте ее к типу form1:

var ff := form2.owner as ТипForm1

Создается дочерняя форма form2:=unit2.form1.create; form2.owner:=self;

как в коде дочерней формы form2 обратиться к методам описанным мной в родительской форме owner? получается обращаться только к стандартным, реализованным в классе form (show,hide.close…)

Создается дочерняя форма form2:=unit2.form1.create; form2.owner:=self;

как в коде дочерней формы form2 обратиться к методам описанным мной в родительской форме owner? получается обращаться только к стандартным, реализованным в классе form (show,hide.close…)

2 сообщения перенесены в тему Помощь новичкам