Болталка PascalABC.NET

И правильно говорит.

В школьных задачах никогда не ставится вопрос об экономии памяти в матричных операциях. Это делают только озабоченные дяди в конкурсных задачах, чтобы отсеять тех, кто пишет не на С++

Он говорит совершенно справедливо, только нужно слушать тему, а не вырывать фразу из контекста. Речь о том, что если алгоритм решения задачи требует множественных вставок и/или удалений элементов, то правильнее использовать не массив, а списковую структуру. Т.е. односвязный или двусвязный список в зависимости о того, что и как планируется делать с данными.

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

ну, если школьная - то там так и имеется в виду, по 1 элементу копировать. Но если решать её более продвинуто - то или списки, или неуправляемая память.

SetLength создаёт новый массив и копирует в него содержимое старого. List тоже это делает, но только если объёма во внутреннем массиве не хватило (или если изменили свойство Capacity). А раз он делает это не каждый раз - он быстрее.

1 лайк

А что мешает писать на Паскале в стиле C++, кроме недовольных комментаторов?

В Паскале (классическом) работа с памятью крайне неудобно реализована и семь потов сойдет, пока правильно и эффективно все сделаешь. Вирт страшно С не любил в плане языка для обучения и наполнял его по мере возможности только высокоуровневыми конструкциями.

Вот что писал Н.Вирт по поводу компилятора: “«Наш первый компилятор Паскаля был реализован на семействе компьютеров CDC-6000 и написан на самом Паскале.”. Это с учетом того, что C давно уже существовал.

2 лайка

@Bronislav вот ещё, если хотите закопаться в код - исходники списка. Я, кстати, таки напутал с константами. Изначально 0, при добавлении первого элемента - 16, а потом *=2, каждый раз когда не хватает обёма.

Вот именно. А в ABC.NET уже лучше.

Это как?

Мы уже обсуждали, что на олимпиадах и конкурсах пока что мало где позволяют писать на PascalABC.NET. Чтобы не отсеять тех, кто на C++ пишут.

2 лайка

Так… Pascal СDС-6000 позволял вставлять фрагменты на ассемблере и обращаться к фортрановским модулям.

Не знаю даже, хорошо это, или плохо. С одной стороны - плохо, язык хороший не допускают. С другой - хорошо, не допускают ведь потому, что он хороший соперник C++. :slight_smile:

У С++ (кстати, как и и Питона) огромное лобби “наверху”. Но здесь не место для обсуждения подобных вещей.

Он ни разу не соперник. У них ниши совершенно различные. Но если С++ не проталкивать в школы на углубленку хотя бы, кое-кто лишится кормушки.

1 лайк

Если Вирт писал Паскаль на Паскале, то кто разработал Паскаль?

Он разработал язык и реализовал компилятор напару с Йенсеном. Вам что, в школе на информатике не давали историю языков программирования?

Представьте себе, нет. Давали что-то типа того, что Паскаль разработал Вирт в 1968 году…

Вот и я о том. Зачем же спрашивать, кто разработал Паскаль?

Да это я и так знал. Вашу формулировку просто не понял.

Это не моя формулировка, это прямые слова Н.Вирта (в переводе, конечно).

@Gleb по моему в этот раз вы перестарались. Есть конечно и сообщения не по делу, но зачем сразу всё выкидывать.

Болталку тоже читают. А в помощи новичкам этому не место.