На форуме одного весьма далекого от спортивного программирования сайта увидел замечание: "Известно, что 90% участников всероссийской олимпиады по информатике пишут на Pascal, а среди её победителей их доля равна 95%".
Чтобы аргументировано опровергнуть, посчитал статистику использования языков программирования на РОИ-2011. Думаю, что результат может кого-то заинтересовать.
Анализировался архив всех решений всех участников заключительного этапа Всероссийской олимпиады школьников 2011 года. Для каждого участника бралось только последнее решение этого участника по каждой задаче и считалась статистика по языкам программирования.
Всего участников было 225. 218 участников использовали только один язык программирования. 7 участников использовало Паскаль и C++ одновременно (их я посчитал по тому языку, который они использовали для решения большего числа задач).
Вот результат:
C++: 120 (53%)
Паскаль: 104 (46%)
Visual Basic: 1 (меньше 0.5%)
Теперь данные только по победителям олимпиады (16 человек):
C++: 13 (81%)
Паскаль: 3 (19%)
Теперь данные только по призерам олимпиады, которые не стали победителями (85 человек):
C++: 52 (61%)
Паскаль: 33 (39%)
Напомню, что в будущем году обещают большие изменения относительно языков программирования на РОИ.
Я же правильно понимаю, pascal/delphi хотят запретить?
Имхо, начинать изучать программирование с C++ или Java - весьма сурово.
Лично я изучал языки в таком порядке: basic, pascal, c++, java. И самым тяжелым для меня был "скачок" на c++: имхо минимальная планка знаний, необходимая для написания даже простых задач, существенно выше. Примеры - ввод-вывод; string/char[]; массивы/контейнеры. Соответственно, значительно вырастает и планка требований к учителям.
И вообще, зачем запрещать Паскаль? Есть же вполне современная Delphi, и язык развивается вместе с ней.
Так разрешать - не запрещать, в чём тогда проблема? :)
Delphi - разве у неё нет бесплатной версии или бесплатного клона? Мне кажется, у нас в школе именно бесплатная, хотя я не 100% уверен.
Что-то не могу придумать ни одной задачи уровня "для новичков", в которой статическая типизация сковывает.
return(make_pair(??,??));
Где же тут удобство? Вместо return 0, надо писать return make_pair("",0)
============================
Если тип левый, я резервирую какое-нибудь значение переменной под неопределенность. Например, когда я пересечение прямых пишу и возвращаю point (пару x, y), то (inf, inf) значит, что прямые параллельны, (inf, -inf) - совпадают. Согласен, не идеал, но если на это сделать дефайны, то проверяется без труда.
typedef long myarray[maxn];
передаю void do_something (myarray & a) {}
Про функцию: pair <int,int> p= func(????); (a - это p.first; b - это p.second). Но обычно удобно продолжать хранить пару (a,b), а не раздельно a и b
Получается, что 107 (225 - 118) участников использовали более одного языка программирования, при этом всего 7 человек использовали одновременно С++ и паскаль.
На каких же двух языках писали остальные 100 человек?
Ну примерно вот так. Скрипт нужно запускать на архиве, скачанном c neerc, предварительно его обработав (попереименовав каталоги, удалив каталоги sources переместив файл из него в родительский каталог, изучив все возможные расширения, которые бывают у файлов - именно по ним определяется язык, удалив всякий мусор).
В результате получается каталог примерно такого вида:
105.7.8.03288/main.cpp
105.7.9.03313/main.cpp
106.1.1.00030/A.dpr
106.1.2.00045/A.dpr
106.2.1.00537/B.dpr
и т.д.
Вот на нем и запускается скрипт.
Извините, но какая-то очень странная фраза "Получается, что это уже элементы динамической типизации - "я не хочу думать какой тип у этой переменной, пусть компилятор это сам поймет"".
Вы действительно считаете, что тип переменной будет определять компилятор?
А можно тогда для меня ликбез, может я тогда обсуждаю то, что не понимаю.
Я под "динамической типизацией" понимал, что переменные можно не описывать, и, если написать
a = 1
или
a = «abc»
то тип переменной будет определен автоматически, исходя из типа присваиваемого значения (или примененного к переменной оператора).
Но, тогда тип не может быть определен компилятором в случае
if (x < y)
a = 1;
else
a = «abc»;
Можно только динамически в процессе выполнения программы определять тип. Отсюда, более чем естественные тормоза в процессе выполнения программы.
Я вообще правильно понимаю о чем речь?
Ну вот, и тогда Вы очень вовремя заменили слово "компилятор" на "интерпретатор".
Естественно, компилятор этого не может, но может интерпретатор. Но разницу в производительности готовой программы в этих случаях, думаю, обсуждать не надо.
ух ты
"Ну вы же сами прекрасно понимаете"
затрудние С++ делающее эго неудобным для обучения что разные вещи имеют одно и тоже синтаксичски имя и различаются контекстом
насколько попню си auto говорит о хранении переменой по возможности в регистрах
Про pair есть такой трюк: pair<int,pair<int,int> >.
Речь идет о Питон vs Дельфи, и мне трудно поверить, что может быть "противно писать на Дельфи". Так же как не верю, что может быть противно писать на С++ Builder. Если сравнивать с Питоном, то ведь суть утверждения одна.
То, что делается на питоне/php в три строки (считали, распарсили/посчитали, вывели ответ), на этих языках требуется обернуть в public static void main(String[] args) throws Exception, либо писать кучу рутины руками и нигде не набажить. Впрочем, иногда этим занимаюсь для поддержания прямизны рук.
А вот громоздкие скоростные задачи мне пока привычнее писать на C++. Просто потому что там всё более строго, чем на питоне и у меня возникает меньше вопросов в компилятору.
К тому же на PHP я пишу почти постоянно, в отличие от Perl.
А уж с какой радостью я с паскаля на плюсы сбегал так вообще не передать.