begin
var l,m,n:integer;
(l,m,n):=(3,5,2);
var A:=MatrRandom(l,m,1,50); A.Println(5); Writeln;
var B:=MatrRandom(m,n,1,50); B.Println(5); Writeln;
var C:=MatrFill(l,n,0);
foreach var Ra in A.Rows.Numerate(0) do
foreach var Cb in B.Cols.Numerate(0) do
C[Ra[0],Cb[0]] := Ra[1].Zip(Cb[1],(x,y)->x*y).Sum;
C.Println(5);
end.
Про это забудьте - в программировании матрица - это таблица значений, а не математический объект. Внешний модуль алгебраических операций с матрицами и векторами - если реализуете - будем признательны. Можно поискать подобный реализованный на C#.
Да, я понимаю. Как сделать это хорошо - не знаю. Заменять строку или столбец вектором с непонятной длиной (то ли короче то ли длиннее) - не хочу - такая функция не должна быть в стандартной библиотеке - она слишком частная и с кучей условий.
Жутковато. Школьникам этого монстра не объяснить. Рядом с ним старые добрые циклы выглядят этакими милашками. Скорее, антипример получается.
Но что-то ведь надо сделать все равно. И проверять совместимость длины придется, хотя бы статически. Не будет - народ в массе своей останется на традиционных циклах.
И я не услышал Вашего мнения о сортировках…
Что до реализации подключаемой библиотеки для векторов и матриц - возможно, она жутко хороша для С#, но у меня очень слабая надежда, что я смогу её в исходниках перелопатить под PascalABC.Net. По-моему, это как раз тот случай, когда проще с нуля написать. Тем более, что основа есть: в свое время под редакцией М.Агеева выходила “Библиотека алгоритмов” на языке Алгол-60, который мне изучать не надо - это был один из первых моих алгоязыков и я частенько беру оттуда алгоритмы. Если бы Вы написали пример оформления модуля для такой библиотеки, скажем, для того же умножения матриц, чтобы посмотреть интерфейс, можно было бы на его основе попробовать наполнить библиотеку. Кстати, там алгоритмы превосходные: тогда умели и память машин экономить, и быстродействия добиваться.
Наткнулся на, казалось бы, очевидное. Нет ReadMatrXXX по аналогии с ReadArrXXX.
Школьная простая задачка.
Известна успеваемость 13 учеников класса по 10 предметам. Написать программу для
определения количества хорошистов в классе.
Вводить руками 130 комбинаций оценок 3,4,5 весьма малоприятно. Но… сгенерировать случайным образом матрицу не получается: заполнение от ДСЧ из интервала [3;5] приводит к отсутствию хорошистов, как таковых. Вот и остается работать с традиционными циклами for для ввода.
Предлагаю в новую версию PascalABC.NET добавить возможность разбивать целочисленные литералы на тысячи (а лучше — произвольным образом), чтобы код вроде такого:
Именно литералы? А зачем? Я ни разу не встречал программ, в которых были бы в явном виде (const, var) написаны подобные константы. А когда надо считать (при отладке) позиции символов в строках, я пишу так
var s:='w4iu547me87454ym587trd3894tmd7s3xw4'
// 1234+6789*1234+6789*1234+6789*1234+ =35
```
Ну вот а гитхаб для одного только литерала 1_000_000находит 92 тысячи употреблений. При этом, там же, существует порядка 13 тысяч вхождений литерала 1000000 в программы на паскале.
Разделитель групп разрядов сейчас, кажется, во все мейнстримовые языки пришел и, по всей видимости, это кому-то да нужно.
Я понимаю, когда это разделитель при выводе результатов. Но чтобы внутри программы для записи констант… Впрочем, по большому счету мне все равно. Лишь бы это не поломало форматы ввода-вывода и не внесло сумятицы в идентификаторы, в которые тоже можно вставлять символ подчеркивания.
По-моему еще столько можно всего интересного в язык вводить… вопрос только один: ЗАЧЕМ? Какая у этого языка, кроме научной разработки, цель? Дать в руки обучающимся удобный инструмент с тем, чтобы они могли заниматься, не отвлекаясь на мелочи? Тогда надо продолжать насыщать его часто встречающимися примитивами, такими как циклические сдвиги последовательности на n позиций, добавить ReadMatrInteger и ReadMatrReal, решить вопрос о вставке, удалении и замене строки или столбца матрицы, как мы это делаем для элемента в последовательности или в одномерном динамическом массиве. А то у нас возможность добывать из матрицы строки и столбцы есть, а назад их загонять - увы…
А когда все это будет, можно и над разбивкой числа в записи думать, поскольку ну вот как-то не тяготит оно на самом деле… по крайней мере, это всего лишь вопрос эстетики.
довольно древняя проблема, если горизонтальный ползунок стоит не на пределе слева и нажать стрелку вверх или вниз - курсор перескакивает ещё и горизонтально вправо
откройте это что скопировать текст в котором можно это потестить
begin
//aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
//aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
//aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
//aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
end.
так же тут выше писали про эту штуку, но это было давно и с ней ничего не сделали
если его оттянуть вправо а потом передвигать курсор стрелками - при нажатии кнопок вниз или вверх на клавиатуре курсор прыгает вправо
прога с ааа это то что можно выделить и скопировать в паскаль чтоб потестить пункт 1
спойлером я называю фигню которую можно сворачивать, у вас она под шестерёнкой -> Hide Details
и она не сработала, хотя когда я открываю редактировать то сообщение и смотрю в предпросмотр справа - прога с ааа находиться под спойлером(убирается, когда спойлер свёрнут)
про штуку см. скрин, там обведено красным вертикальная серая палка, которая там нафиг не нужна
Можно ли доработать препроцессор, чтобы действие {$OMP ...} распространялось до ближайшего for (или блока вложенных for) не взирая на {$endif}?
Например, чтобы можно было просто написать
{$ifdef OpenMP}
{$omp parallel for}
{$endif}
for var i := 0 to 1000 do
for var j := 0 to 2000 do
for var k := 0 to 3000 do
begin
//тело цикла
end;
без полного дублирования заголовков циклов, как сейчас:
{$ifdef OpenMP}
{$omp parallel for}
for var i := 0 to 1000 do
for var j := 0 to 2000 do
for var k := 0 to 3000 do
{$else}
for var i := 0 to 1000 do
for var j := 0 to 2000 do
for var k := 0 to 3000 do
{$endif}
begin
//тело цикла
end;
автоформатирование в последнем “длинном” примере с {$omp ...} приводит код вот к такому странному виду:
{$ifdef OpenMP}
{$omp parallel for}
for var i := 0 to 1000 do
for var j := 0 to 2000 do
for var k := 0 to 3000 do
{$else}
for var i := 0 to 1000 do
for var j := 0 to 2000 do
for var k := 0 to 3000 do
{$endif}
begin
//тело цикла
end;
Директивы компилятора (любые) невозможно “подавить” с помощью комментариев (да еще родная подсветка синтаксиса при этом вводит нас в заблуждение):
//{$define ZZZ} или {{$reference ABC.dll}} или (*{$omp parallel for}*) – продолжают работать как ни в чем не бывало…