PascalABC 10 лет как снят с поддержки. Тут PascalABC.NЕТ.
Кстати, loop в PascalABc не поддерживается.
А для отладки и понимания файл надо прикрепить Ваш текстовый
Под PascalABC я имел ввиду PascalABC.NЕТ, всё правильно. Вот файл, откуда скачивал.
http://blog.harrix.org/wp-content/uploads/2015/08/word_rus.zip - обычный .txt в архиве. word_rus.txt (700,3 КБ). Возможно, знаете такую игру, в которой есть длинное слово, и из его букв нужно составлять другие маленькие. Для этого решения стало интересно сделать программу. main.pas (679 Байты) Это пока алгоритм продумал. Теперь хочу, что бы с текстового файла слова брал и анализировал.
Сделал со свои файлом, всё хорошо. Здесь какие-то проблемы в кодировке символов
Проблема тут так-то одна. Когда создавалось это API в составе большинства версий Паскаля, о том, что могут появиться самые разные кодировки, никто не знал, и не думал. Этот код безнадежно, безжалостно устарел, и более не отвечает никаким требованиям.
Решением было бы добавить кодировку файла перегрузкой assign с тремя параметрами, где третий - строка с именем кодировки. По умолчанию - кодировка принятой в системе локали. Или, к примеру, вызов вроде setEncoding(f, ‘name’).
begin
ReadLines('word_rus.txt', Encoding.UTF8).Take(100).PrintLines
end.
Если запускаете из-под среды Паскаля, то по умолчанию файлы ищутся в той же директории, где создаются скомпилированные .exe. У меня это C:\PABCWork.NET\Output
Понимаю, что вопрос не относится напрямую к PascalABC.NET, но всё же задам его здесь. Я решил собрать компьютер на Intel Xeon. В описании сказано, что поддерживается до 64 ГБ оперативной памяти. Собственно, сможет ли .NET работать с такой оперативкой? Как-то раз программа выплюнула ошибку, что массивы более 2 ГБ не поддерживаются. Ставить планирую Win7 x64.
2.1 Гб - это порог адресации при счетчике длиной 4 байта. Он используется обычно в массивах, строках и т.п. Так что за 2 миллиарда элементов массива Вы не перейдете.
Ну какое отношение указатель имеет к счетчику элементов? Я не знаю, как там все внутри устроено, да и неважно это, если говорится о технических ограничениях - изменить мы их все равно не можем. Но большинство программных средств под Windows имеют ограничения в 1-2-4 миллиарда неважно чего - элементов, отводимой памяти и т.п. Это зависит от количества выделяемых служебных битов или байтов.
Какой способ лучше использовать для удаления (вставки) строк (столбцов) в динамических матрицах? Если например взять удаление строки и сдвинуть столбцы на 1 элемент а потом SetLength(a,m-1,n,) выделить новую память вроде так можно технически, но это даже хуже, чем со статической матрицей, которой всего то нужно уменьшить число строк и не нужно переопределять новую память. Есть ли какие-то другие способы для динамических матриц? Такие, как если бы был такой расширяемый тип матриц у которой строки и стобцы были бы типами List? Если в строки еще можно вставить те же списки (List), например, определив массив списков, и потом можно удалять столбцы и даже несколько столбцов методами для List, то вот со строками не понятно получается, да и как удалить элемент массива списков - список, чтобы не выделять потом новую память? Или для таких задач лучше пользоваться статическими матрицами?
Всё, понял. Нет, так не получится сделать. Даже List построен на базе динамического массива, поэтому удаление элемента с последующим смещением так же потребует память.
Да, как-то не очень понятно, наверное написал, но как уж получилось. Пример, удаление k-й строки в динамической матрице:
begin
var m := 5;
var n := 6;
var a := MatrRandom(m, n, 0, 100); a.Println;
var k := 0;
for var i := k to m - 2 do
for var j := 0 to n - 1 do
a[i, j] := a[i + 1, j];
SetLength(a, m - 1, n);
Println;
a.Println;
end.
Мне не нравится, что нужно выделять новую память после удаления строки, какие есть еще способы?