ИМХО причина обсуждаемой ошибки: естественное желание сделать лаконичный код. Классическое решение согласно принципам защитного программирования: избыточность.
case doctype of
1: case clienttype of
1: do_something1;
2: do_something2;
3: do_something3;
else error (unknownClienttype, clienttype);
end;
2: case clienttype of
1: …
2: …
3: …
else error (unknownClienttype, clienttype);
end;
3: case clienttype of
1: …
2: …
3: …
else error (unknownClienttype, clienttype);
end;
else error (unknownDoctype, doctype);
end;
Фактически это та же матрица сочетаний, но развернутая в линию кода программы. Функция error выводит характер ошибки и значение переменной, ее вызвавшее. В случае необходимости нетрудно написать генератор, который сделает шаблон подобного кода.
Для лучшей ориентации в коде значения нужно заменить на константы с осмысленными именами:
const ORGANIZATION = 1;
…
case clienttype of
ORGANIZATION: do_something1;
Вместо многоточий стоит поставить комментарии:
{ToDo}
При возможности лучше сразу писать целевой код, а не создавать внекодовую матрицу, т.к. при переносе из нее в код возможны опечатки. А для тестирования и документации этот код автоматически с помощью несложного конвертора можно превратить в матрицу, нпр., в Excel.
О да, ссылка на одну из многочисленных статей из серии «Давайте изобретать велосипед» и «Прем против фактов: чем смелее — тем больше просмотров». А факты таковы, что практически ни одна программа не делается с нуля… Больше про данную «теорию» ИМХО говорить не стоит.
PS Кажется до меня дошло: под повторным использованием кода Вы понимаете использование без внесения изменений. А я свой код часто модифицирую под конкретную задачу. Это не универсальная библиотека на все случаи жизни.
да сам Питон относительно медленный, но в создании кода, пожалуй самый быстрый.
Если использовать дистрибутив Питона от Интел (он абсолютно бесплатный), то за счет как раз таки околокомпиляторной магии скорость вычислений может возрасти от нескольких раз до нескольких порядков раз.
«Магия» — очень интересное слово в данном контексте, как и «может возрасти» — а может и не возрасти. Чем то сказочным повеяло. BTW не все пакеты Интела способствую скорости — нпр., TBB.
Причем для получения такой скорости мне не нужно знать ни Паскаль ни Фортран. Мне даже не нужны глубокие познания в Питоне для этого. Причем весь этот оптимизированный код можно прикрутить и к GPU, опять же даже не вникая в CUDA и OpenCL.
А это как?: прикрутить к GPU не вникая в CUDA?
тем более, если есть планы публикации в серьезном издании
Для публикации нет ничего лучше Pascal и Pascal-like псевдокода. Ни разу не слышал от читателей «я не знаю этот язык».
Если это игровой бот, и использование компьютерного зрения не является принципиальным моментом, то слепить симуляцию в PyGame не составит никакого особого труда.
А если использование компьютерного зрения является принципиальным моментом? Странное ограничение для языка ИИ.
Фактически, используя Питон, вы не используете его для вычислений. Вы повторно используете чужой (не Питоновский) код
Это вроде как пишу файл мояПрога.bat: calc
notepad
и потом мне остается только пощелкать по этому файлу? Меня больше волнуют объемные части для вычислений, а не скрипты использующие эти части. Для скриптов есть много инструментов. Нпр., для установки программ я использую Inno Setup.
Если вам действительно жалко времени, то Питон — лучший выход. Конечно не для рабочего кода, который логичнее и проще использовать повторно, а для вашего хобби и открытого проекта.
Для хобби (для проекта) я повторно использую код.
Очень странный разговор. Есть работающий код (я про проект), но мне говорят, а давай перепиши его на другой язык. Зачем? Меня устраивает язык, на котором написан этот код.
в комментариях говорите, что вам не нужна система контроля версий. Тогда ей не понятно как писать код вместе.
Пока всем было понятно, кроме Вас. И пока нечего контролировать. Как писать код вместе было известно и до гита. Автоматические системы контроля версий очень далеки от идеала, особенно асинхронные системы. Нпр., Википедия. Другое дело, что Википедия слишком объемный проект и там без такой системы не обойтись. У меня проекты сильно меньше. Но Вы все время переводите разговор на какие-то второстепенные технологии. Неужели Вам действительно кажется, что язык или технология может мистическим образом продвинуть сложный проект? У Вас есть опыт сложных проектов?
Я же физически не успеваю отвечать везде, простите.
И Вы меня простите, но просто интересно, где Вы не успеваете отвечать? Судя по списку Ваших комментов — не на Хабре. И не на официальном сайте чемпионата: там по багам в Паскалевом пакете, только такие же участники, как я, догадки высказывают. А организаторы молчат, как партизаны на допросе. М.б. организаторы не рассчитали свои силы? Тогда стоит сдвинуть сроки. Хотя бы внятный мануал сделать и информативный раннер. А то ведь сплошные ребусы.
Если бы в паре километров от моего дома стояла атомная электростанция, то я бы чувствовал себя гораздо спокойнее, если бы вся ее инфраструктура управлялась ПО на Паскале или еще лучше на Аде. Но никак не на Питоне.
Я не пишу ПО для АС, но и моё ПО должно быть достаточно надежным.
Предлагаете перевести интерпретатор P5 на Питон? Серьезно? Видели объем кода? А скрипты на Паскале писать? Извините, но удивили.
Гит пока совершенно не нужен.
Абсолютно не зная Питона, на нем у вас получится добиться успеха быстрее
Во-первых. Знаете что такое повторное использование кода? У меня его столько, что даже перепечатка (не перевод) 1 в 1 займет очень много времени, хоть и печатаю я быстро, не как Ваши школьники :)
Во-вторых. Я и так добился успеха. Проекты, которые публикую здесь, для меня хобби. Для рабочих проектов, кроме повторного использования кода, бывает нужна еще и высокая производительность. Питон будет слишком медленным для многих из них.
В-третьих. В ПБ-боте дело не в языке. Забуксовали на алгоритмах. И в целом м.б. неверный подход — слишком высокая автономность, роджерийский бот получился удачным потому, что там автономность сильно меньше (я про это писал).
А если говорить обо мне, то я слежу за тенденциями в развитии ЯП, и компиляторы изнутри меня интересуют, т.к. когда-то участвовал в большом проекте по созданию IDE. Но следить за тенденциями не значит знать в деталях каждый язык. Просто учить новый язык — жалко тратить время. Я учу, когда нужно под задачу. Сейчас возникла идея, в которой, возможно, будет полезна Unity, значит, вспомню и подучу C#, когда-то делал на нем небольшую задачу, а сейчас смотрю, что много нужных книг по Unity с использованием C#.
Спасибо. Обругало старую версию, но встало. Странно, что от автора публикации не последовало ответа — хотелось бы иногда слышать официальные комментарии организаторов соревнований. Или отрекламировали, а отвечать не обязательно?
Не 100%: факт, что некоторые дети в мат.школы идут. И Ваши 95% явно субъективны, но какому-то проценту в жизни теоремы действительно будут не нужны. Вопрос только в том: какой процент от этого процента заранее уже в 1 классе знает, что ему теоремы будут не нужны?
Прежде чем решать СЛАУ, нужно ввести понятие ранга матрицы и дать правила, когда решение есть, когда единственное и т.д. Далее изучают разные методы: можно решать Гауссом, а можно определителем. Обычно это описано в учебниках под заголовком Линейная алгебра. Где это изучать до численных упражнений в Excel? На математике или на информатике?
Выгнать студента — крайняя мера. Всегда и везде на нее не охотно идут, чаще студент сам осознает, что учится не там, где ему нужно.
Если только с привязкой, то можно и теорию множеств давать не на математике, а на информатике. А не слабо весь матан на информатику перетащить? Линейку и прочие терверы? В начале 20 века химия и физика были в одном учебнике:
— В общем, скажите, из какого класса гимназии вас вытурили за неуспешность? Из шестого?
— Из пятого, — ответил Лоханкин.
— Золотой класс. Значит, до физики Краевича вы не дошли? (Золотой телёнок)
Правда химии в учебнике Краевича была посвящена всего одна глава-прибавление. Все же математика, информатика, физика, химия — разные предметы со своей спецификой, хоть и пересекаются.
Я не категоричен. Просто школьника никто не может выгнать, и он обязан учиться, а студент не обязан, но его можно выгнать. Большинство студентов это понимают (при этом далеко не все из них зубрилы), но бывают отсталые в развитии на уровне школьника. Надеюсь, что большинство студентов сообразит, что сказать про отличие И от ИЛИ. Хотя бывают «рекордсмены», так Арнольд описывает американского студента, который написал 1/2+1/3=(1+1)/(2+3)=2/5.
OpenCV [...] Реализована на C/C++, также разрабатывается для Python, Java, Ruby, Matlab, Lua и других языков (Вики)
CUDA SDK позволяет программистам реализовывать на специальном упрощённом диалекте языка программирования Си алгоритмы, выполнимые на графических процессорах Nvidia, и включать специальные функции в текст программы на Си. (Вики)
Тут стоит сделать поправку из англовики:
The CUDA platform is designed to work with programming languages such as C, C++, and Fortran.
Я и Delphi интерфейс для CUDA нашел, но уж больно путанный.
В «Алгоритмах на С++» другая тема — тема классических алгоритмов и некоторых их вариаций. Поэтому и супер-интересно. И там объем кода помогает понять нетривиальную суть, а не вгоняет в тоску.
Именно это я имел ввиду. Школьник сдает учителю такой код, далее учитель должен сказать, что сказали Вы. Пример можно усложнить, но дело в принципе: Булеву алгебру необходимо знать.
Фактически это та же матрица сочетаний, но развернутая в линию кода программы. Функция error выводит характер ошибки и значение переменной, ее вызвавшее. В случае необходимости нетрудно написать генератор, который сделает шаблон подобного кода.
Для лучшей ориентации в коде значения нужно заменить на константы с осмысленными именами:
Вместо многоточий стоит поставить комментарии:
При возможности лучше сразу писать целевой код, а не создавать внекодовую матрицу, т.к. при переносе из нее в код возможны опечатки. А для тестирования и документации этот код автоматически с помощью несложного конвертора можно превратить в матрицу, нпр., в Excel.
«Магия» — очень интересное слово в данном контексте, как и «может возрасти» — а может и не возрасти. Чем то сказочным повеяло. BTW не все пакеты Интела способствую скорости — нпр., TBB.
А это как?: прикрутить к GPU не вникая в CUDA?
Для публикации нет ничего лучше Pascal и Pascal-like псевдокода. Ни разу не слышал от читателей «я не знаю этот язык».
А если использование компьютерного зрения является принципиальным моментом? Странное ограничение для языка ИИ.
Это вроде как пишу файл мояПрога.bat:
calcnotepad
и потом мне остается только пощелкать по этому файлу? Меня больше волнуют объемные части для вычислений, а не скрипты использующие эти части. Для скриптов есть много инструментов. Нпр., для установки программ я использую Inno Setup.
Для хобби (для проекта) я повторно использую код.
Очень странный разговор. Есть работающий код (я про проект), но мне говорят, а давай перепиши его на другой язык. Зачем? Меня устраивает язык, на котором написан этот код.
Пока всем было понятно, кроме Вас. И пока нечего контролировать. Как писать код вместе было известно и до гита. Автоматические системы контроля версий очень далеки от идеала, особенно асинхронные системы. Нпр., Википедия. Другое дело, что Википедия слишком объемный проект и там без такой системы не обойтись. У меня проекты сильно меньше. Но Вы все время переводите разговор на какие-то второстепенные технологии. Неужели Вам действительно кажется, что язык или технология может мистическим образом продвинуть сложный проект? У Вас есть опыт сложных проектов?
Я не пишу ПО для АС, но и моё ПО должно быть достаточно надежным.
Гит пока совершенно не нужен.
Во-первых. Знаете что такое повторное использование кода? У меня его столько, что даже перепечатка (не перевод) 1 в 1 займет очень много времени, хоть и печатаю я быстро, не как Ваши школьники :)
Во-вторых. Я и так добился успеха. Проекты, которые публикую здесь, для меня хобби. Для рабочих проектов, кроме повторного использования кода, бывает нужна еще и высокая производительность. Питон будет слишком медленным для многих из них.
В-третьих. В ПБ-боте дело не в языке. Забуксовали на алгоритмах. И в целом м.б. неверный подход — слишком высокая автономность, роджерийский бот получился удачным потому, что там автономность сильно меньше (я про это писал).
Выгнать студента — крайняя мера. Всегда и везде на нее не охотно идут, чаще студент сам осознает, что учится не там, где ему нужно.
Правда химии в учебнике Краевича была посвящена всего одна глава-прибавление. Все же математика, информатика, физика, химия — разные предметы со своей спецификой, хоть и пересекаются.
Я не категоричен. Просто школьника никто не может выгнать, и он обязан учиться, а студент не обязан, но его можно выгнать. Большинство студентов это понимают (при этом далеко не все из них зубрилы), но бывают отсталые в развитии на уровне школьника. Надеюсь, что большинство студентов сообразит, что сказать про отличие И от ИЛИ. Хотя бывают «рекордсмены», так Арнольд описывает американского студента, который написал 1/2+1/3=(1+1)/(2+3)=2/5.
Привязку даст информатика, пятиклассник, знающий отличие И от ИЛИ, поймет.
По конкретным инструментам:
Тут стоит сделать поправку из англовики:
Я и Delphi интерфейс для CUDA нашел, но уж больно путанный.