Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Конечные Автоматы (специально для elan)

3
18 мая 2007 года
Green
4.8K / / 20.01.2000
Чтоб не разводить флейм в посте Gloms будем разводить его здесь.

Цитата: elan
Что тебя так расстроило? Успокойся. Дышы глубже. :)


Меня расстраивает нагромождение нерационального кода, решение простых задач сложными, дико неэффективными способами.

Цитата: elan

Какой каток? В данный момент работаю над программой в которой КА с 43557 состояний и еще пару тысяч состояний добавится. В той КА только два состояния. Ну может кому то он каток...:)


А зачем вообще тут конечный автомат? Зачем?
Практически любую задачу программирования можно решить с помощью конечных автоматов, но это не значит, что любую задачу надо решать с помощью конечных автоматов.
Что касается 43557 состояний, ты этот автомат тоже оформил с помощью switch ? Тогда прими мои соболезнования!
Нагромождение и усложнение простых вещей - не признак профессиональности, а наоборот. Здорово, что ты научился строить автоматы, но не стоит их приспосабливать к чему не попадя.

Цитата: elan

[QUOTE=Green]
2) задача решается за O(n log n), а не за те O(n^2), которые ты предлагаешь;


Не исключено, что программы будут переводиться в Fortran, и они писались таким образом, чтоб перевод был как можно более простой, напр. я поэтому не использовал динамические переменные. Не знаю есть ли в Fortran-e ф-ия qsort(вроде вопрос топика как сортировать строки), поэтому я написал тот модуль без сортировки.
[/QUOTE]
А при чем тут О-большое и язык программирования, динамические переменные?
Что касается сортировки, то если писать программу структурированно, а не лепить всё в одну кучу, то у тебя был бы просто метод sort, а уж что там у него внутри (реализация) не так важно. Незнание того есть ли Fortran сортировка или нет, не меняет сути алгоритма: "сортируем, сравниваем соседей". Не имел дело с фортраном, но уверен, что уже есть реализованные алгоритмы сортировок. А если даже и нет, то никто не мешает реализовать такой алгоритм, но будет он идти отдельной функцией, а не вкраплением в монолитный код.

Цитата: elan

Может быть 2, 3 макс. 10 слов. На теперешних компах разница в программе с сортировкой и без сортировки будет незаметна.


М-да... кто тебя такому научил? Можешь плюнуть ему в лицо.
Давай найдем повторы в выборке из тысячи слов.
Твоему алгоритму потребуется миллион итераций!
А по идее нужно всего то 10 тысяч, т.е. можно в 100 раз быстрее!

Цитата: elan

Из того что ты не можешь прочитать еще не следует, что код вообще нечитаем. Ты хоть в своем коде можешь разобраться?


Я могу читать код различной степени ЗАПУТАННОСТИ и НАГРОМАЖДЕННОСТИ, но это не значит, что мне приятно и удобно его читать. У удобство - основной показатель в программировании, иначе программы писались бы вообще в машинных кодах, а не на языках программирования.
Почему бы тебе было не привести свою программу в таком виде?

Код:
57 89 1E 89 7E 04 89 4E │ 08 89 46 18 89 46 14 E8
5C 04 00 00 83 C4 08 89 │ 46 0C 85 C0 75 17 8B 15
BC 05 4E 00 56 52 E8 45 │ 03 00 00 83 C4 08 33 C0
5F 5E 5B 5D C3 53 57 E8 │ 34 04 00 00 83 C4 08 89
46 10 85 C0 75 20 8B 46 │ 0C 50 E8 41 04 00 00 8B
0D BC 05 4E 00 56 51 E8 │ 14 03 00 00 83 C4 0C 33
C0 5F 5E 5B 5D C3 8B C6 │ 5F 5E 5B 5D C3 6A 05 6A
7D 68 90 26 4C 00 E8 75 │ F7 FF FF 83 C4 0C 85 C0
74 01 CC 5F 5E 33 C0 5B │ 5D C3 90 90 90 90 90 90
55 8B EC 56 57 8B 7D 08 │ 85 FF 75 1F 6A 05 68 BF
00 00 00 68 90 26 4C 00 │ E8 43 F7 FF FF 83 C4 0C
85 C0 74 01 CC 5F 5E 33 │ C0 5D C3 8B F7 8B 56 04
33 C0 85 D2 7E 10 8B 4E │ 0C 83 39 00 7F 43 40 83
C1 04 3B C2 7C F3 8B 76 │ 14 85 F6 75 E0 8B F7 8B
7F 14 8B 46 0C 50 E8 A5 │ 03 00 00 8B 4E 10 51 E8
9C 03 00 00 8B 15 BC 05 │ 4E 00 56 52 E8 6F 02 00
00 83 C4 10 85 FF 75 D5 │ 5F 5E B8 01 00 00 00 5D
C3 6A 05 68 C8 00 00 00 │ 68 90 26 4C 00 E8 CE F6
FF FF 83 C4 0C 85 C0 74 │ 01 CC 5F 5E 33 C0 5D C3

Кому надо тот поймет... :)

Цитата: elan

Несколько раз мне пришлесь менять программу, написанную другим программистом, который был подобно комментирован. Перед тем как разобраться в коде я сперва удалил комментарии. Но в данном случае у тех комментарий 2 цели. 1.проще перевести код в фортран. 2. Их можно записать один к одному в блок-схему.


Если бы ты разбил свою программу на логические блоки, правильно бы их оформил и назвал, дал переменным внятные имена, комментарии были бы не нужны, тем более для такой элементарной задачи. Ты же не читаешь комментарии и инструкцию по использованию обычной чайной кружки или ложки? Зачем, и так всё понятно. Даже инструкцию для магнитофона не обязательно изучать, чтоб включить музыку.

А твои комментарии, даже при сущуствующем виде твоей программы, излишни и лишь загромождают текст программы.

Цитата: elan

Можно по комментариям понять как работает программа и самому написать код.


Понимать, как работает программа нужно по тексту программы, а не по комментариям. Для чего вообще тогда нужны языки программирования? Машина языков не понимает, ей нужен скомпилированный код.
Если ты пишешь так, что и человек не понимает кода, а может разобраться только с помощью комментариев к этому коду, то почему бы тебе не писать сразу в машинных кодах? Так хоть компилировать не придется...

Цитата: elan

Если тебя это успокоит, то ты прав, я совершенно не умею пользоваться этим языком


Да мне то в принципе всё равно. Я пытаюсь до тебя донести, что ты не только не знаешь язык (бог с ним с языком, он не так важен), но и не умеешь мыслить структурировано.

Цитата: elan

я хотел показать как просто решаются такие задачи с использованием КА. Для этого и привел все 5 программ.


Да не нужен здесь конечный автомат. Ты лишь усложнил решение простой задачи.

Цитата: elan

Конечно не спорю. С использованием STL программа была бы намного меньше и проще, но ту программу уже точно не переведешь на Fortran.


А при чем тут STL?
Эти задачи можно просто решить и без STL, но так же и без конечного автомата. И решение будет простым и понятным.

Цитата: elan

Но кто-то договорился до того, что я не умею называть переменные (imho называю как хочу) и не умею пользоваться Си++.


Если ты пишешь программу и не собираешься даже сам её когда-либо потом даже просматривать, а не то что выкладывать на всеобщее обозрение, то можешь писать, как хочешь. Но раз уж ты показываешь свою программу, да ещё и в качестве примера, то будь добр сделать её ЧИТАБЕЛЬНОЙ.

622
18 мая 2007 года
nilbog
507 / / 19.12.2006
ох - стоит ли спорить вообще
автоматы красивая штука ))
только стоит ли усложнять решения элементарных задач
63
18 мая 2007 года
Zorkus
2.6K / / 04.11.2006
Цитата: Green

А при чем тут STL?
Эти задачи можно просто решить и без STL, но так же и без конечного автомата. И решение будет простым и понятным.


На самом деле, использование элементов STL для C++ кода предложил я, просто потому, что в моем сознании она связана с современным С++ неразрывно. И для прикладных задач использовать char * - имхо, смешно:)
Думаю, ты не считаешь это нерациональным усложнением кода.

242
18 мая 2007 года
Оlga
2.2K / / 04.02.2006
Цитата:
На самом деле, использование элементов STL для C++ кода предложил я, просто потому, что в моем сознании она связана с современным С++ неразрывно.


Если я не ошибаюсь, elan писал не на С++, a на С :). Что меня "радует" в разделе Студентам, это когда просят решить задачу на С, им решают на С++ и все довольны :) :) :) А для меня это абсолютно разные языки.

622
18 мая 2007 года
nilbog
507 / / 19.12.2006
чем хорош раздел студенты что когда просят решить простую задачу на фортране то пишут КА на C причем думают что это С++ или наоборот кто-то думает в общем - тема для флуда
3
18 мая 2007 года
Green
4.8K / / 20.01.2000
Цитата: Zorkus

Думаю, ты не считаешь это нерациональным усложнением кода.


Да нет, конечно.
Хотя нам и приходится писать на C++ но без STL. Но это не мешает "рисовать" свои строковые классы.

Цитата: OlgaKr
Если я не ошибаюсь, elan писал не на С++, a на С :). Что меня "радует" в разделе Студентам, это когда просят решить задачу на С, им решают на С++ и все довольны А для меня это абсолютно разные языки.


Ты совершенно права, это разные языки. Но даже на С никто функции не отменял. :)

Цитата: nilbog
ох - стоит ли спорить вообще
автоматы красивая штука
только стоит ли усложнять решения элементарных задач


Красивая только там, где она действительно красивая... :)
А в данном случае, из пушки по воробьям.

320
19 мая 2007 года
m_Valery
1.0K / / 08.01.2007
Не знаю,что так задело elan.Вполне разумные и полезные советы.
Мне кажется если человек выложил 10 фрагметов кода на С/С++ для студенческой задачи по Фортрану,то у него должна быть на это какая то веская причина ? По крайней мере сам код можно обсуждать то ?
Если нет - тогда вопрос : зачем он его выкладывал ? Чтоб помочь Gloms ? :)
Замечания Green по поводу читаемости кода- справедливы. "Программа должна быть написана для человека, который будет ее читать и только попутно - для машины,которая будет ее
выполнять
"( Harold Abelson && Gerald Jay Sussman )
Цитата: Green
...
3) ты когда-нибудь слышал о разбиении программы на логические блоки, функции? Твой код невозможно
читать!.


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

Цитата: Green
...
4) переменным надо давать ясные имена, а не те невероятные сокращения, перемешенные регистры букв и непонятные "magic numbers";


Опять же абсолютно верно.Чего обижаться то ? Стоит использовать непротиворечивые и значимые имена и следовать принятым соглашениям об именовании."Если вы не можете сами разработать соглашение об
именовании воспользуйтесь следующим:имена классов,ф-ий и перечислений выглядят как LikeThis,имена переменных - ikeThis,имена закрытых членов - likeThis_,имена макросов - LIKE_THIS
"( Герб Саттер ). В любом случае в именовании должен быть хоть какой-то порядок.
P.S.По поводу С и С++.Где то читал,что есть такая старая шутка,которая гласит примерно следующее:
Язык называется С++ , а не ++С потому что язык был улучшен(на что и указывает инкремент),но многие программисты
продолжают использовать его как С( как предыдущее значение до инкремента).

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог