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


#2058

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


#2059

В поиске автоматического нажатия кнопки по истечении заданного времени (тамаут) нашёл примеры как с ручным, так и автоматическим подсчётом через 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 ?

Спасибо.


#2060

Лучше через 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 .


#2061

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

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

#2062

Спасибо, Александр. Я как раз распечатал Часть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.

Спасибо.


#2063

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

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. Поскольку в Паскале операция присваивания не возвращает результата, она не может быть операндом выражения, как например в С++.


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

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

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

#2065

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

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

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

#2066

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


#2067

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


#2068

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


#2069

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


#2070

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


#2071

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


#2072

Я про MS Forms )))


#2073

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


#2074

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


#2075

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


#2076

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


#2077

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