Замечания и предложения

Взял компилятор с сайта.

Учебная задача: построить таблицу значений y = x^2, интервал значения x и шаг параметра ввести с клавиатуры. В итоге программа работает, но табличка отрисовывается странно. Например, шапка вида

---------------------------------
|   №   |     x     |     y     |
---------------------------------

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

При этом если символ № заменить на символ # , то всё работает нормально. Оно так и надо или это всё-таки баг?

Сильно сокращённый вариант программы

Program YX2;
Begin
  Writeln('y=x^2');
  Writeln('--------','-','-----------','-','------------');
  Writeln('|   №   ','|','     x     ','|','     y     |');
  Writeln('--------','-','-----------','-','------------');

Readln;
End.

Примеры:

2 лайка

С большой вероятностью вас попросят привести код программы и скриншоты.

1 лайк

в семерке вроде проблема не наблюдается. какие-то баги мертвой XP

Проверил на XP. Тоже все работает.

А мне удалось воспроизвести ошибку, я взял таблицу символов и скопировал первый попавшийся китайский (?) иероглиф из шрифта Arial Unicode MS.

После копирования текста из окна вывода в Word выясняется, что начиная с этого иероглифа идет другой шрифт (SimSun в моем случае).

Может Windows пытается использовать другой шрифт, если символа нет в шрифте?

Попробовал работу с динамическими матрицами. На деле они мало что дают, поскольку очень существенно проигрывают в гибкости описанию в стиле array of array. Крайне не хватает сечений матрицы, т.е. возможности представлять строку или столбец как элемент соответствующей коллекции Matrix.Rows или Matrix.Columns. Это дало бы возможность применять к строке/столбцу все то богатство процедур и методов, которые имеются для одномерных массивов. А сейчас даже, к примеру, максимальный элемент матрицы в стиле MyMatrix.Max нельзя найти.

А подтягивание во всплывающие подсказки документирующих комментариев для элементов перечислимого типа не предусмотрено?

type
  ///Документирующий комментарий описания типа.
  EnumType= (
  ///Документирующий комментарий первого элемента.
  EnumElement1,
  ///Документирующий комментарий второго элемента.
  EnumElement2);

при наведении например на EnumElement1 в подсказке все равно стандартное UnitNamespace.EnumElement1 = EnumElement1; Насколько это трудновыполнимо?

Дополню, вдруг кому пригодится. если пользоваться атрибутами (в моем случае это DataMember и DataContract - для полноценной XML сериализации экземпляров класса) документирующий комментарий должен быть между атрибутом и комментируемым субъектом кода:

  [DataMember]
  ///Документирующий комментарий - будет виден при наведении мышью.
  SomeClassField: integer;
  ///Документирующий комментарий - НЕ БУДЕТ виден при наведении мышью.
  [DataMember]
  OtherClassField: integer;

Атрибуты (по крайней мере эти) корректно отрабатывают в обоих случаях.

Уважаемые разработчики, подскажите, почему не работает такая программа

program sss;
uses GraphABC;
var s:string;
begin
  read(s);
  read(s);
end. 

Я ожидал от неё сначала, чтобы запросила первую строчку и потом вторую. А на деле второй read она просто пропускает и ничего не делает.

Замените первый read на readln.

Благодарю. Действительно работает

Подскажите еще, почему выдаётся ошибка в программе? Ошибка: “System.Threading.ThreadStateException: Поток не выполняется; его нельзя приостановить. в PABCSystem.PABCSystem.Read(String& x)”

program sss;
uses GraphABC;

procedure MouseDown(x, y, mb: integer);
var s:string;
begin
  readln(s);
end;
    
begin
  OnMouseDown := MouseDown;
end.

array[,] это не замена array of array. и в чем они проигрывают в гибкости, мне непонятно.

Вот и печально, что не замена. Возможно я чего-то не понимаю, но пока не вижу для [,] иного применения. кроме как в показанных на демонстрации инициализации от ДСЧ и передачи в процедуры. Если векторы имеют богатый набор расширений для динамических массивов, а также неплохие процедуры и функции, то у матриц [,] все крайне ограниченно.

Хочу для A[,] метод типа A,Row(), чтобы писать нечто вроде

var r:=A.Row(i).Where(x->x mod 2 =0).Sorted

И метод A.Column() тоже хочу!

Ну, в принципе, эта идея - не дикая. Можно написать методы расширения для двумерных массивов. Они каши не просят. Пишите список.

Только - надо понимать следующее - что A.Row(i) будет содержать копию, и его изменение менять оригинал не будет.

Отлично, я попытаюсь продумать набор хотелок так, чтобы он образовал более-менее стройную систему. Понятно, что выборка не будет иметь связи с оригиналом, а как иначе, если это базируется на LINQ?

В настройках Intellisense приходится убирать галочку с “подсказка по нажатию клавиш”.

  • Не видит объявленные динамически переменные в foreach var <переменная>
  • Выбирает пункт по вводу любого разделителя (очень раздражает - нужно только по enter)
  • Становится не на первое найденное в списке, а на часто используемое, в купе со вторым пунктом взрывает мозг.
3 лайка

В большинстве текстовых редакторов для кода эта проблема решается так: в настройках указывается после скольких набранных символов выскакивает подсказка. Обычно выставляю 2-3 символа, что решает много проблем.

Так же хотелось бы еще возможность самостоятельно настраивать расцветку кода и правила форматирования

1 лайк

При обновлении всегда хочет установиться в путь по умолчанию: «C:\Program Files\PascalABC.NET» и «C:\PABCWork.NET»…

Но у меня другие пути, которые постоянно приходится устанавливать вручную, что немного напрягает!

1 лайк

У меня рабочую папку правильно подхватывает, насчёт самой программы не знаю, у меня по стандартному пути стоит.

Кстати, на сайте указана последняя сборка 1196, а ставится 1195.