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

Главное, что все работает, а вот как работает - волновать должно только меня и человека попросившего код для “посмотреть”))

В поиске автоматического нажатия кнопки по истечении заданного времени (тамаут) нашёл примеры как с ручным, так и автоматическим подсчётом через timer.Tick += new EventHandler(timer_Tick); а также:

private async void button1_Click(object sender, EventArgs e)
{
 button1.Text = "Stop";
 
 await Task.Delay(5000);
 
 button1.Text = "Start";
}

Удобнее сразу отображать таймер (“Yes (29)”), хотя главное, чтобы после нажатия пользователя тригер повторно не срабатывал, так что оба варианта подходят, а вот третьего (и кажется более простого) в Справке пока нет.

Вопрос: как можно вынести обработчик для всех таких кнопок с автозавершением по таймауту, чтобы не дублировать код десятки раз?

Кроме того, не понял момент с примером через побитовое округление, как подобное реализуется на Pascal Abc . Net ?

Спасибо.

Лучше через enumerate или как ещё можно упростить задачу поиска и удаления дубликатов по размеру файлов в текущем каталоге?

uses System.IO;

begin
  var xList := new HashSet<cardinal>; //список размеров
  var sz: cardinal := 0; //размер текущего файла
  
  foreach var xfile in Directory.GetFiles(Directory.GetCurrentDirectory, '*.xls', SearchOption.TopDirectoryOnly) do 
  begin
    //writeln(xfile);
    var xpointer := new FileInfo(xfile);//обрабатываемый файл
    sz := xpointer.Length;//размер
    if xList.contains(sz) then xpointer.delete else xList.add(sz)
    //удалить дубликат или запомнить новый размер
  end;
  //xlist := nil;
  Write('.'); Readln;
end.

Или уже нормально?

Верно ли я понял, что в задаче о зёрнах на шахматной доске генерация последовательности будет занимать N элементов типа BigInteger ? Как правильно задать прогрессию и какие преимущества перед традиционными циклами?

Спасибо.

Вероятно, уже знаете, что иногда контекстная справка по F1 кидает на несуществующую страницу Msdn .

Какой прогрессии, какими циклами?

begin
  Println(BigInteger(2) ** 64 - 1) //18446744073709551615 
end.

Спасибо, Александр. Я как раз распечатал Часть5, но снова забыл, что в Pascal Abc . Net есть нормальная степень.

Понятно, что в последовательностях хранится только “формула”, которая рассчитывается лишь при итоговом вызове, а вот какие преимущества SeqGen(64, BigInteger(1), x -> x *2) и можно ли сразу удваивать и складывать результат как по классике:

begin
  var t: BigInteger := 1; //общая сумма
  var x: BigInteger := 1; //текущее удвоение
  loop 63 do // for var n := 2 to 64 do
  begin
    x := x * 2;
    t := t + x;
    Println('+', x, '=', t)
  end;
  //Println(BigInteger(2) ** 64 - 1)
 end.

Спасибо.

Можете вот так написать, если хотите использовать последовательность:

begin
  var t: BigInteger := 0; //общая сумма
  foreach var x in SeqGen(64, BigInteger(1), x -> x * 2) do
  begin
    t += x;
    Println('+', x, '=', t)
  end
end.

Преимуществ каких-то тут я не вижу. Если говорить об использовании последовательности, в данном случае она не улучшает наглядности алгоритма и не упрощает его. Если бы для BigInteger была определена операция Sum и не был нужен промежуточный вывод, отпала необходимость в цикле и последовательность дала бы большую наглядность. Но в любом случае налицо сумма прогрессии и правильнее воспользоваться формулой суммы, если не нужны промежуточные результаты.

Я не понял, в какой “классике” можно сразу удваивать и складывать? У Вас в алгоритме два явных присваивания: для x и t. Поскольку в Паскале операция присваивания не возвращает результата, она не может быть операндом выражения, как например в С++.

  1. Как в проекте вывод progressBar1 привязать к индикации на Панели задач Windows 7 и новее?

  2. Как исправить ошибку:

procedure Form1.button1_Click(sender: Object; e: EventArgs);
begin
   progressBar1.Value:=int(random(100)); 
// Невозможно явно преобразовать тип integer к типу System.Random
end;

Это классика :slight_smile:

Напишите так:

progressBar1.Value:=int(PABCSystem.random(100)); 

PABCSystem. - это зачем?

Почему-то в оконных приложениях не виден random. Только с указанием модуля работает.

Во гад! В своих пуляет! А если в uses явно указать - тоже не видит?

Требует обращения по имени и отчеству!

Мож эта… фтопку?

Да куда ж мы без рандома в 21 веке?

Я про MS Forms )))

Так пока хорошей альтернативы в PascalABC.NET нет… А, скажем, детям нужно проектик сделать, чтобы не в текстовом виде.

Дело не в WinForms, а в строке uses System. В текущем пространстве имен оказывается два Random.

А эффект матрешки пока еще в issures. Понял.

Не понял. Какой эффект матрёшки? В каких issures?

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