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

В процессе создания голосового морского боя через распознание речи System/Microsoft и озвучивание ходов компьютера, я предположил, что самой сложной частью окажется (1) лексика русского (на английском SR), (2) грамматика (порядок слов: “А-5” или “5-А”) и, возможно, (3) нюансы настройки микрофона. Оказалось, что в разных версиях и типах системы всё по-разному, включая отсутствие даже английского движка на русской локали в w8, не говоря о комплектации нужной “говорилки” (Text-to-Speech). Другими словами, фактически только на w10 появилась относительно нормальная оффлайн (без интернета) поддержка распознания голоса и говорилки на русском языке.

Есть ли сравнительно универсальные (или большинство версий от ХР до w10) примеры на stand-alone в PABC.NEТ или же это фичи предыдущих ОС, особо без вариантов?

Ну, я бы на вашем месте пытался бы сделать своё распознавание речи. Если я правильно понимаю как работают нейронные сети - из за того что вам нужно ловить только слова “один”…“восемь” и “A”…“Ж”, нейронная сеть натренированная распознавать только их (ну и + понимать когда вы говорите не_1_из_них) - будет на много точнее работать, и будет нуждаться в меньшем кол-ве нейронов.

Как вариант, хотя я застрял ещё на этапе выбора (Microsoft/System) SR и TTS, потому что есть одноязычные версии или где локаль (язык по умолчанию) жёстко ограничивает/отключает распознание или озвучку, не позволяя US/British или вне культуры

Здравствуйте ребята. Подскажите пожалуйста функцию округления. Например, Var x1:= …; x1:=int(x1*1000)/1000. Т.Е. округления с указанием количество десятичных разрядов. В этом примере 3.

System.Math.Round

Спасибо!

Round(Выражение, КоличествоЗнаковДробнойЧасти)

Без каких-либо System.Math.

Да, спасибо. В справочнике указано несколько функций округл. Я приму Ваше решения (sun_Serega, RAlex).

Можете объяснить почему так получилось?

begin
  var f: file of integer;
  var s := 'files\file48i.dat';
  Assign(f, s);
  Rewrite(f);
  foreach var x in Range(0, 9) do Write(f, x);
  FileSize(f).Println;//10
  Close(f);
  
  var f2: file of real;
  Assign(f2, s);
  Reset(f2);
  FileSize(f2).Println;//5 почему?
  Close(f2)
end.

И наоборот, если f: file of real;, а f2: file of integer; то FileSize(f2) в 2 раза больше компонент выдает. Почему нет ошибки при связывании разных типов?

Потому что real занимает 8 байт, а integer 4. Читайте справку.

А как вы себе представляете? Записывать в заголовок файл с каким типом можно его подключать? Так никто не делает.

Хорошо, есть файл fail.dat. Как узнать, что находится в файле, целые, действительные, что-то еще?

Ну вот есть бинарный файл. Как узнать, что там находится? Не в Паскале, вообще? Открываете и ищете в шестнадцатиричном коде знакомые сигнатуры. Потом пытаетесь понять что-то. Эвристика, так сказать. А больше никак. Если знаете, что файл типизированный - можете смоделировать эту эвристику программно.

1 лайк

Никак. Так же как в файле с иконками нельзя понять что там, если не знать что вам нужно достать из него иконки.

Зато если вы знаете что файл fail.dat создала ваша программа - вы знаете что там.

А если вам нужно записывать какую то доп. информацию, к примеру о типе - делайте свой собственный заголовок. Ну или используйте какую нибудь сериализацию, которая сохраняет данные о типах.

1 лайк

Помогите пож. как быть, чтобы в элементах управления textbox и masktexbox ввели только числовые данные (целые, действительные, положит. и отрицат, и т.д.)

{$reference system.windows.forms.dll}
{$reference System.Drawing.dll}

uses System.Windows.Forms;
uses System.Drawing;

begin
  var f := new Form;
  
  var tb := new TextBox;
  f.Controls.Add(tb);
  tb.KeyPress += (o,e)->
  begin
    e.Handled := not (
      e.KeyChar.IsDigit or//Цифры все разрешены
      ((e.KeyChar = '.') and not tb.Text.Contains('.')) or//Так же можно ставить точку, но только если это первая точка
      (e.KeyChar = #8)//И ещё можно стирать последний знак (#8 это знак бекспейса)
    );
  end;
  
  Application.Run(f);
  
end.

Я бы сразу всю строку:

procedure Main.TextBox_TextChanged(sender: Object; e: EventArgs);
begin
  var ix:real; //заглушка или целевая переменная
...
  if not TryStrToFloat(TextBox.Text, ix) then TextBox1.Text:=''; //сброс, вернуть ix или удалить последний символ и т.д.
...
end;

Нет, так нельзя. Если удалять последний знак когда введено что то не то - сбрасывается положение курсора. А ещё текст мигает.

Да, спасибо. похоже на Visual C#. А для отрицат. чисел добавил в фильтре поиска знак “-” begin e.Handled := not ( e.KeyChar.IsDigit or//Цифры все разрешены ((e.KeyChar = ‘.’) and not tb.Text.Contains(’.’)) or//Так же можно ставить точку, но только если это первая точка (e.KeyChar = #8)//И ещё можно стирать последний знак (#8 это знак бекспейса) or ((e.KeyChar = ‘-’) and not tb.Text.Contains(’-’))); end;

Для того чтоб код выглядел нормально - его надо выделять, вот так:

```
код
```

Тогда получается так:

код

Знак ` находится за Ё, в англ. раскладке.
Обратите внимание, на то что на строчках с ``` не должно быть ничего кроме их самих. Иначе выделение ломается. Ну, вы можете сами поэкспериментировать, благодаря предпросмотру справа.

Для того, чтобы выявить узкие места для оптимизации структур данных и алгоритмом, нужен модуль или аналог утилиты Profiler, который может подсчитывать какие процедуры/функции/переменные вызываются чаще всего. Есть ли така возможность для PABC.NEТ?