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

добавить ключ расширения (.myfile) в ветку реестра HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.myfile
там еще нужно в нужную подветку это засунуть, но это уже погуглить надо, их там несколько

Ок ну с расширением я так и думал что с реестром придётся заморочиться, но что насчёт чтения документа файлом? По идее оно должно как {$resource ‘…’} работать?

@admin, у паскаля то своё расширение есть, может сознаетесь как сделали? :slight_smile:

И ещё 1, можно ли запускать новые потоки из процедур с параметрами или ещё как то передавать им данные при запуске не прибегая к глобальным переменным и лямбдам? Я находил System.Threading.ParameterizedThreadStart но так и не понял как получить дескриптор процедуры.

Можно ли как то делать сложные константы, что то типа

{$reference System.Drawing.dll}
uses System.Drawing;

const
  p=PointF.create(0,0);

begin
end.

не создавая по функции на каждую константу? И является ли ошибкой, то что этот код не компилируется(ожидалось константное выражение)?

Есть ли какой то аналог unchecked в паскале?

Нет. А зачем Вам?

Думаю, нельзя делать сложные константы. Нет, ошибкой не является.

Непонятно, для чего может понадобиться сложная константа. Когда-то константы в программировании служили средством a) экономии памяти вследствие прямого заполнения соответствующих адресов бинарным кодом, б) защитой от “самих-себе-злобных-буратинок”, которые кривыми ручонками портили собственный код присваиванием. Сейчас осталось только б). Рассматривается именно такое назначение констант?

в pascale все unchecked. указатели (на размерные типы) можно использовать без всяких флажков.

  1. Константы не unchecked.
  2. Есть не мало случаев когда как раз надо checked, я его как само собой прилагающееся имел в виду. Ну а вообще можно написать функцию для этого и будет вполне вменяемо работать. Можете подсказать как оно работает, чтоб не изобретать велосипед?

В языках как C++ массивы передаются указателем на элемент, есть какой то аналог такому в паскале?

Насколько помню, в PascalABC.NET указатели с особеностями. Но вот вопрос: к чему они вообще в ссылочной модели? К чему они в системе, где сбором мусора управляет системная служба - чтобы висячими объектами с убитыми предками “от криворуких программистов” кушать память? Честно говоря, я вообще не могу представить, зачем в PascalABC.NET могут быть нужны указатели…

К сожелению криворукие не только программисты а и сборка мусора) К примеру 2 объекта ссылающиеся не соберутся с мусором. Ну это так себе пример, отследить такие случаи не сложно, но я вот сейчас у себя борюсь в программе чтоб они не жрала гигабайт оперативки на ровном месте, и знаете, как то не помогает то что за меня что то заранее продумали, всё равно приходится абсолютно всё изучать и много тестировать.

Это не так. Соберутся.

помогает. ибо надо думать о задаче, а не изобретать очередной неработающий велосипед.

Имеется код, написанный “злобным преподавателем”, считающим, что “все эти нововведения в стиле функционального программирования - зло”.

  type tMas=array[1..100] of integer;

  var
    N:integer;
    a:tMas:=(520,46904,58684,2215,83967,66560,96722,41600,16921,
        99150,1151,86738,63634,71238,13216,32406,49880,1558,75516,
        73929,7482,58804,47776,65890,47698,18548,26752,98776,82750,
        87389,23938,55437,86701,10204,93551,24241,16244,44138,25003,
        22798,83587,70257,65030,83983,81229,67478,78077,42619,73533,
        41772,49635,31721,77620,34630,63560,41716,99129,92794,54518,
        65419,39808,97947,58850,29532,75212,45715,37,53430,77687,
        88976,16163,5742,76556,52718,90343,37226,93774,63793,84661,
        80220,40472,84134,25243,40979,37755,92218,77818,52072,46645,
        51836,25112,23450,89621,59584,82991,85640,11407,35498,8771,35515);

  function In3(n:integer):boolean;
  begin
    var F:boolean:=False;
    while n<>0 do begin
      if n mod 10=3 then F:=True;
      n:=n div 10; 
      end;
    In3:=F;
  end;
  
begin
  var k:=1000000;
  N:=100;
  Milliseconds;
  loop k do begin
    var max:=-1;
    var p:=1;
    var Y:=False;
    for i:integer:=1 to N do
      if (a[i]>max) and (In3(a[i])) then begin
        max:=a[i]; p:=i; Y:=True;
      end;
    if Y then begin
      //writeln(max); 
      //writeln('i=',p);
      end
    else
      //writeln('Элементы, содержащие цифру 3 отсутствуют')
    end;
  var t:=MillisecondsDelta;
  Writeln(t/k);
end.

Имеется попытка показать, что функциональное программирование по крайней мере не хуже тридиционного для языка Паскаль:

function Has3(n:Integer):boolean;
begin
  while n<>0 do begin
    if n mod 10=3 then begin Result:=True; Exit end;
    n:=n div 10; 
    end;
  Result:=False
end;

begin
  var a:=Arr(520,46904,58684,2215,83967,66560,96722,41600,16921,
        99150,1151,86738,63634,71238,13216,32406,49880,1558,75516,
        73929,7482,58804,47776,65890,47698,18548,26752,98776,82750,
        87389,23938,55437,86701,10204,93551,24241,16244,44138,25003,
        22798,83587,70257,65030,83983,81229,67478,78077,42619,73533,
        41772,49635,31721,77620,34630,63560,41716,99129,92794,54518,
        65419,39808,97947,58850,29532,75212,45715,37,53430,77687,
        88976,16163,5742,76556,52718,90343,37226,93774,63793,84661,
        80220,40472,84134,25243,40979,37755,92218,77818,52072,46645,
        51836,25112,23450,89621,59584,82991,85640,11407,35498,8771,35515);
  var k:=1000000;
  Milliseconds;
  loop k do begin
    var b:=a.Where(t->Has3(t)).ToArray;
    if b.Length>0 then begin
      var max:=b.Max; 
      var kk:=a.IndexOf(max); 
      //writeln('a[',kk+1,']=',max);
      end
    else
      writeln('Элементы, содержащие цифру 3 отсутствуют');
    end;
  var t:=MillisecondsDelta;  
  Writeln(t/k);
end.

Увы, но время выполнения данного кода в пять (!) раз больше, чем у традиционного. Можно ли тут что-то сделать, сохранив прозрачность алгоритма?

Ну, существенно не ускоришь. В задачах поиска индекса последовательности не так эффективны - нужны массивы.

И конечно основное время съедает запрос a.Where(Has3).Max

Давайте ещё раз: последовательности - не для всех задач, и не для всех задач они одинаково эффективны. Последовательности позволяют хорошо масштабировать некоторые задачи средней сложности где ручные алгоритмы плохо справляются .

Вас погубило создание массива b. Я попытался заменить массив на список, задавая ему изначальную длину =a.Length но это едва ли помогло(0.009->0.007). Вообще в производительности разумеется будет выигрывать написанное методами, которые делают только самое необходимое и ничего лишнего. А преимущество у функционального программирования только 1:[quote=“ibond, post:240, topic:263”] ибо надо думать о задаче [/quote] Вряд ли удастся переубедить человека который привык что эта программа выполняется не пол секунды а пол минуты ;).

Кстати я вроде всё старался прочитать, но не помню примера когда последовательности оказываются лучше чем ручной алгоритм. Вы только показали как с ними можно сделать красивый код вроде такого:

uses GraphABC;

function RandomPoints: sequence of Point;
begin
  while True do
    yield Pnt(Random(Window.Width),Random(Window.Height));
end;

begin
  RandomPoints.ForEach(p->Circle(p.x,p.y,Random(3,6)));
end.

Здравствуйте! Прежде всего позвольте мне выразить восхищение вашей работой (ABCPascal). Меня интересует несколько вопросов.

  1. Вы позиционируете свое творение как платформу (или язык?) для .NET программирования. Возможности вашей IDE - это подключение .Net классов и создание .Net класса я правильно понял? Т.е. .NET проекты IDE не создает. Все ограничивается WinForm, Concole и DLL.
  2. “Близким по идеологии к PascalABC.NET является язык RemObjects Oxygene”… К сожалению я так и не нашел НОРМАЛЬНОЙ и ПОЛНОЙ документации по этому языку. Даже на сайте RemObject (возможно, подскажите где ее найти?), но копаясь в этой теме наткнулся на пару интересных моментов. а) В превый раз Oxygene упоминается в DELPHI PRIZM (2009) как язык схожий с DELPHI для .NET Начиная с X6 версии RAD studio (embarcadero) мне не удалось найти в ее составе Prizm, возможно ее нет и в более ранних версиях (Этот вопрос сейчас уточняется мной у embarcadero как и вопрос о том поддерживают ли они .NET программирование). Я пока не знаю ответа, но если поддержки .net нету, то боюсь Pascal (Delphi) отойдет в небытие. б) Как ОБУЧАЮЩИЙ язык ABCPascal хорош. Правда…TP -> ABCPascal -> C++ Изумительная лестница от простого к сложному. Учитывая что в ABCPascal есть ну почти все что и в С++. Для меня не совсем понятно зачем ABCPascal связали с .net… Но это субъективный взгляд. —Под какую версию .Net Framework заточен ABCPascal??? p.s. Извиняюсь за несвязность изложенного, начинающий программист. От себя добавлю - хорошие библиотеки. Мне нравится ваш проект. Удачи в развитии.