Выкладываю отдельным постом, поскольку предыдущий пост пока не могу отредактировать.
Пример (2) программы к пункту 3:
{$reference NETMouse for NET.dll}
uses NETMouse.Utils;
uses NETMouse.Extensions;
begin
'Матрица, прочитанная по столбцам:'.PrintLine();
MatricesUtils.ReadIntMatrix(2, 2, false).PrintAsMatrix();
end.
Для чтение матрицы по строкам можно: либо опустить явное значение третьего параметра, либо явно указать вместо него true. Есть идея сделать чтение матрицы в произвольном порядке: следующий читаемый элемент (точнее, его пара индексов) будет определять некоторая функция.
Если Вам хочется что-то “забавное” сделать для матриц, эффективно реализуйте то, чего [пока?] нет в PascalABC.NЕТ: вычеркивание строки/столбца, вычеркивание строки и столбца одновременно. И пресловутые сечения они же - срезы), о которых речь идет страшусь сказать сколько времени. Ну а если сумеете сделать полный их (сечений) функционал, как в Фортране 90, например, с матрицами станет работать намного удобнее. Хотя… наверно нет, не сделаете полный: там придется синтаксис раскручивать. Там ведь еще и векторные индексы есть, и reshape - это вообще бомбы.
Они есть. Метод Slice. Пример: matrix.Slice((fromRow, toRow, rowsStep), (fromCol, toCol, colsStep)). Преобразование между кортежами и типом SliceSpan здесь неявное и сделано для краткости записи срезов. Также это облегчает чтение кода: a.Slice((0, 9, 2), (0, 9, 2)) легче прочесть, чем множество однотипных и несгруппированных значений параметров: a.Slice(0, 9, 2, 0, 9, 2). Я бы сделал следующий синтаксис для использования срезов:
Он понятен, особенно если сделать в каждом трейте последний параметр по умолчанию равным 1. Но все же он существенно недотягивает до синтаксиса с двоеточиями, потому что не позволяет писать вещи типа a[::3,], что означает целые строки 0, 3, 6, …
А Вы подумайте над векторными индексами. Хотя бы с тем, чтобы задавать их массивом. Это может очень многое решить. Т.е. если сформировать, к примеру, массивы
var ai := Arr(3, 7, 0, 4, 7, 2);
var aj := Arr(2, 6, 3);
var r := XXXX(Matr, ai, aj);
то XXXX из матрицы Matr должен вырезать строки 7, 0, 4, 7, 2 с колонками 2, 6, 3 и сформировать матрицу размером 5x3. Хорошо бы кроме Arr еще и Seq понимать.
В версии NETSquirrel 1.0 ожидается следующий функционал:
Возможность указывать форматные строки-подсказки для ввода кортежей, массивов и матриц функцией типа Func<int, string>, на вход которой подаётся индекс вводимого элемента. Парные методы с возможностью обработки ошибок.
Print/PrintLine/PrintLines с модифицирующей входные данные проекцией. Парные методы-расширения с поддержкой входного параметра индекса.
PrintAsMatrix с входными параметрами-индексами элемента. Остальные методы-расширения для матриц также с входным параметром-индексом.
Методы SkipRow и SkipRowOrEmpty, SkipColumn и SkipColumnOrEmpty для матриц.
Модуль с примерами выложен на GitHub. Если имеются пожелания или предложения - пишите в Issue. Желательно, перед созданием Issue обсуждать нововведения здесь. Issue по поводу Wiki раздела также допускаются.
4.0 это только для компов с XP. Паскаль их поддерживает потому что в большинстве школ компы отсталые.
Ну, раз в этой библиотеке используются ValueTuple - некоторые функции уже будут падать на XP.
Если переформулировать вопрос, то он такой: стоит ли на большинство школ ориентироваться или же считать, что это их проблемы (разумеется, в этом случае сделать пометку на GitHub, например, или на сайте о том, что не весь функционал на Windows XP работает)?
Подавляющая часть PascalABC.NET в школах — 1.8. Шанс, что твои библиотека и модуль будут работать на столь старой версии близится к нулю.
Оставшаяся часть — обновлённые самими учениками паскали (я в шк обновлял только на тех компах, за которыми сам сидел). Последняя версия так и так требует 4.7.1 фреймворк и Win7 для стабильной работы.
Исходя из всего выше написанного, использование NETSquirrel в школах практически исключено. А значит, нет и смысла поддерживать устаревшую Windows XP. А те, кто на своём домашнем ПК до сих сидит на хрюне… Ну, можно только им посочувствовать.
Кстати, у нас в школе WinXP последний раз были когда я учился классе в 7-ом (2014/2015 год). После этого два года был Linux, а потом везде поставили Windows 7.
Откуда такая информация? Я понимаю, что Вы еще молоды, но нельзя же такой юношеский максимализм в утверждениях проявлять!
Инженер подозревает, что все нечётные числа простые. Во всяком случае, 1 можно рассматривать как простое число, доказывает он. Затем идут 3, 5 и 7, все, несомненно, простые. Затем идёт 9 — досадный случай; по видимому, 9 не является простым числом, но 11 и 13, конечно, простые. Возвратимся к 9, — говорит он, — я заключаю, что 9 должно быть ошибкой эксперимента.
Из книги Д. Пойа. Математика и правдоподобные рассуждения, ИЛ, 1957.
Ну, во-первых, я говорю исходя из своего опыта. В ППЭ на ОГЭ, в нашей школе, в одной школе где я проходил одну олимпиаду — везде стояли 1.8. На одном компе стояло что-то вроде 2.2.
Во-вторых, да, пожалуй, я допускаю то, что в других школах, менее продвинутых, может быть версия древнее или вовсе PascalABC. Пока был линух, мы писали Free Pascal в Geany.
В-третьих, я учился в гимназии, которая, незадолго до моего выпуска, благодаря выиграным грантам, обновила полностью компьютерные классы и даже после этого на них поставили PascalABC.NET 1.8.
Я думаю, этого уже достаточно для того, чтобы считать, что подавляющая (но не абсолютная) часть паскалей в школах — 1.8. Если в Ростове, хотя бы в тех школах, что сотрудничают с ЮФУ, стоят 3.0+, то я крайне этому рад.
Но в конечном счёте это всё равно не важно. Пока детей будут обучать древнепаскальскому из семидесятых, какая конкретно версия IDE PascalABC.NET стоит — вообще не имеет значения. Это, кстати, тем более исключает использование NETSquirrel в школах. Вот вы, например, предположите, сколько школьников будут пользоваться этой вещью, даже если включить её в дистрибутив? Хех.