Перейти к содержимому

Фотография

Разработка для OS X и iOSОбмен опытом


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 179

#41
fibe

fibe
  • В доску свой
  • 2 405 сообщений

Спасибо. Правда не совсем понимаю чем Я могу Вам быть полезен в этом ))) Я ведь не имеют опыта в разработке. На С. Знания только в области Веб разработки... php html css mysql

На сколько я вас понял, то вам было интересно попробовать программировать на C, я кстати, тоже опыта не имел, когда то в университете проходили Pascal, потом руки до программирования не доходили, но всегда хотелось этим заниматься. Зимой появилась необходимость в этом разобраться, создал эту тему, затем вновь пришлось отложить.

Сейчас время есть. 

Так что подключайтесь, если интересно, на данном этапе вообще не принципиально на каком языке писать, можно и словами описывать.


  • 0

#42
Зул

Зул
  • Свой человек
  • 620 сообщений

Приглашаю вас и всех желающих принять участие в написании программы. Вместе пройти путь от идеи до размещения в App Store.
 
P.S. Желающие могут подключиться на любом из этапов разработки.

Вам на мой взгляд рановато звать желающих. Алгоритм поиска пути у вас какой-то странный, и очень неоптимальный, почитайте про A*.

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

Но в целом стремление похвально, главное есть куда развиваться :)

Сообщение отредактировал Зул: 05.08.2013, 16:04:45

  • 0

#43
fibe

fibe
  • В доску свой
  • 2 405 сообщений
Вам на мой взгляд рановато звать желающих. Алгоритм поиска пути у вас какой-то странный, и очень неоптимальный, почитайте про A*. Ну и сам код - вложенные циклы gj i, j, захардкоженные константы, флаги, неумение разбивать на функции (функция не должна быть более 15-20 строк никогда) - это уровень студенческой лабы, без обид.

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

 

P.S. Возможно не оптимальный, но рабочий, кто то предложит более оптимальный.


Сообщение отредактировал fibe: 05.08.2013, 16:05:34

  • 0

#44
fibe

fibe
  • В доску свой
  • 2 405 сообщений
Вам на мой взгляд рановато звать желающих.

 

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

 

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

 

Еще раз пересмотрел код makeWaysFromI, не совсем понял про 

 

 

вложенные циклы по i, j

 

А как иначе перебрать массив? Вроде логичный способ.

 

 

 

захардкоженные константы

А что значит захардкоженные? и про флаги не понятно. 


Сообщение отредактировал fibe: 05.08.2013, 19:15:33

  • 0

#45
ТатлиК

ТатлиК
  • В доску свой
  • 1 792 сообщений

Мне стало интересно... почему функция не должна быть более 15-20 строк ? :spy:


  • 0

#46
Зул

Зул
  • Свой человек
  • 620 сообщений

Это ведь влияет только на читабельность программы?

Как говорил Фаулер - "Любой дурак может написать код, понятный компьютеру. Хорошие программисты пишут код, понятный людям."
 

А как иначе перебрать массив? Вроде логичный способ.

А его в 99% случаев не надо перебирать вообще.
Вот это - (testCells[i][j]==93)&&((testCells[i][j+1]==k)||(testCells[i+1][j]==k)||(testCells[i][j-1]==k)||(testCells[i-1][j]==k)) - абсолютно нечитаемо, ошибки тут можно искать до посинения. Что вот этот код считает? Абсолютно непонятно. Вынеси это условие хотя бы в функцию с названием вроде isTestCellHasBorders - если я правильно понял что это такое.

Вот это -
for (i=0;i<9;i++) {
        for (j=0; j<9; j++) {
            if (cells[i][j]) {
                testCells[i+1][j+1]=92;
            } else {
                testCells[i+1][j+1]=93;
            }
        }
    }
 
Нахер например тут не нужно, а заменяется на что-то вроде


const BUSY_CELL = 92;
const FREE_CELL = 92;
function getTestCellValue(i, j) {
   return cells[i-1][j-1] ? BUSY_CELL : FREE_CELL
}
Из этого куска кода сразу очевидно, как считать занятость тестовой ячейки. В твоем коде во первых считается для тех, что нахер не нужны, во вторых постоянно путаться что такое 92 и 93. Не говорю про то, что смешивать расстояние до ячейки и флаг занятости это глупо. Заведи отдельную структуру, где будет флаг занятости и расстояние в разных полях.

 

А что значит захардкоженные? и про флаги не понятно.

Вот эти все десятки, 92, 93 и иже с ними. Если завтра сменится размер поля? - блин, такие вещи выносить в константы учат первым делом,еще в школе. Любой нормально настроенный CI сервер коммит с любым числом в коде, не вынесенным в константу должен откатывать. Что такое 92 из предыдущего куска кода? Нихера ведь непонятно.
 

Мне стало интересно... почему функция не должна быть более 15-20 строк ? :spy:

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

Сообщение отредактировал Зул: 06.08.2013, 00:09:45

  • 0

#47
fibe

fibe
  • В доску свой
  • 2 405 сообщений
Нахер например тут не нужно, а заменяется на что-то вроде

Согласен, тут сказывается недостаток знания C++, и не только здесь, например int nextBalls[3][3] более удобней было бы определить тип переменной, где с - цвет, i и j координаты

 

P.S. т.е. на данном этапе я подстраховываюсь, выбираю варианты, в которых я более уверен в конечном результате

 

 

Вот эти все десятки, 92, 93 и иже с ними. Если завтра сменится размер поля?

 

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

 

P.S. в школе мы программирование не изучали, а в универе... учили математике, а программирование - раз в неделю... эх...


Сообщение отредактировал fibe: 06.08.2013, 00:37:59

  • 0

#48
fibe

fibe
  • В доску свой
  • 2 405 сообщений

Кстати, ТатлиК, вы написали что хотели бы определить, потяните ли вы разработку, я поймал себя на мысли, что мне сейчас необходимо то же самое. Да, я отдаю себе отчет, что код программы не самый оптимальный, что я еще не представляю всего пути от идеи до размещения в App Store, что я еще не представляю на чем здесь можно заработать, на платной программе, на рекламных банерах, встраеваемых в программу, на индивидуальных заказах или на чем то еще.

 

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

 

В теме Web-mastering, была тема про то что предлагали собраться начинающим разработчикам, для того чтоб совместно учиться, но похоже там движений нет.

 

Оценив все это... а... что нам терять, пусть это будет монолог, ну а чем черт не шутит, глядишь люди подтянутся, вместе веселее....

Когда в чем то пытаешься разобраться, очень не хватает собеседника, который пусть даже молча, но слушает, потому, что когда пытаешься что то объяснить, что именно тебе не понятно, почти 100%, то что ты разберешься раньше, чем закончишь объяснять...

А когда это еще обсуждается, то вообще супер! Самое интересное еще впереди. Так, что, всем кому интересно, подключайтесь, хорошо или плохо, но что-нибудь у нас получится.

 

Зул, спасибо вам за ценные советы, в плане кода, я с вами согласен, тут работать и работать, а в плане алгоритма 

 

Алгоритм поиска пути у вас какой-то странный, и очень неоптимальный, почитайте про A*.

 

 

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

И что значит "прочитайте про А*"?


Сообщение отредактировал fibe: 06.08.2013, 01:44:56

  • 0

#49
fibe

fibe
  • В доску свой
  • 2 405 сообщений
Как говорил Фаулер - "Любой дурак может написать код, понятный компьютеру. Хорошие программисты пишут код, понятный людям."

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

По сути мой цикл с явной проверкой и цикл с вызовом getTestCellValue, читается по разному, но выполняет один и тот же объем работ (если не меньший в моем случае)


Сообщение отредактировал fibe: 06.08.2013, 01:33:41

  • 0

#50
Зул

Зул
  • Свой человек
  • 620 сообщений

Кстати, спорное утверждение, в конечном итоге нам не так важно на сколько наш код будет читабелен, нам более важно, чтоб программа работала, не тормозила, в конечном итоге он переведется в машинный код, и строк получится на много больше. 
По сути мой цикл с явной проверкой и цикл с вызовом getTestCellValue,

Не позорься. И не рассуждай с умным видом о том, в чем ты ни зуб ногой. Почитай что-нибудь серьезное, да устройся джуном в какую-нибудь серьезную контору, правда в алмате мне таковые неизвестны, разве что Казком и его дочки из всего что я работал выглядят адекватно, ну тем не менее.

читается по разному, но выполняет один и тот же объем работ (если не меньший в моем случае)

В твоем случае - больший.
  • 0

#51
fibe

fibe
  • В доску свой
  • 2 405 сообщений

В твоем случае - больший.
 

Почему? В вашем случае происходит вызов подпрограммы, передаются переменные, в моем все явно


  • 0

#52
Зул

Зул
  • Свой человек
  • 620 сообщений

Мне кажется это самым оптимальным, с точки зрения математики,

А мне не кажется. И вообще, когда кажется - креститься надо. Мы не на конкурсе экстрасенсов же. Есть конкретные математические параметры вычислительной сложности алгоритмов. У тебя - O(n^2) - это дохера
 

так как наикратчайший путь получается по построению, в начале мы находим все клетки на которые можно перейти за один шаг, затем за 2, и т.д. в чем неоптимальность?

В том, что ты два раза перебираешь массив да еще вложенными циклами
 

И что значит "прочитайте про А*"?

http://en.wikipedia.org/wiki/A*_search_algorithm - первая ссылка в гугле. То и значит.


  • 0

#53
fibe

fibe
  • В доску свой
  • 2 405 сообщений

Вот это - (testCells[i][j]==93)&&((testCells[i][j+1]==k)||(testCells[i+1][j]==k)||(testCells[i][j-1]==k)||(testCells[i-1][j]==k)) - абсолютно нечитаемо

А как вычисляется значение выражения (A&&(B||C||D||E)), если A=FALSE, будет ли он вычислять (B||C||D||E)? 


  • 0

#54
Зул

Зул
  • Свой человек
  • 620 сообщений

Почему? В вашем случае происходит вызов подпрограммы, передаются переменные, в моем все явно

Потому что вызов подпрограммы ничего не стоит, она заинлайнится скорее всего. Потому что мой код более читаем и сопровождаем, потому что код должен быть в первую очередь читаем. Потому что "оптимизировать" так нельзя - надо оптимизировать когда код хорошо написан и читаем, и не потому что "кажется", а по результатам лога профайлера.
  • 0

#55
Зул

Зул
  • Свой человек
  • 620 сообщений

А как вычисляется значение выражения (A&&(B||C||D||E)), если A=FALSE, будет ли он вычислять (B||C||D||E)?

А ты проверь. И увидишь что нет, это называется сокращенное вычисление буленовских выражений.
  • 0

#56
fibe

fibe
  • В доску свой
  • 2 405 сообщений

Не позорься.
В моем возрасте, по этому поводу не заморачиваются 
  • 0

#57
fibe

fibe
  • В доску свой
  • 2 405 сообщений

 

А как вычисляется значение выражения (A&&(B||C||D||E)), если A=FALSE, будет ли он вычислять (B||C||D||E)?

А ты проверь. И увидишь что нет, это называется сокращенное вычисление буленовских выражений.

 

 Ну я примерно так и предполагал, просто думал подстраховаться и несколько вложенных условий создать.


  • 0

#58
fibe

fibe
  • В доску свой
  • 2 405 сообщений
да устройся джуном в какую-нибудь серьезную контору

Зачем? Мне это не надо, а вот App Store, мне интересен 

 

P.S. Кстати, я не знаю кто такой джун, но очень оценил ваш совет, я так же начинал, я сообразил, чтоб чему-нибудь научиться - лучше устроиться на работу, где тебя подтянут за уши и чему нибудь научат.


Сообщение отредактировал fibe: 06.08.2013, 02:20:05

  • 0

#59
fibe

fibe
  • В доску свой
  • 2 405 сообщений

В том, что ты два раза перебираешь массив да еще вложенными циклами

Т.е. сам алгоритм оптимальный, реализация вложенными циклами подводит... это другое дело. 


  • 0

#60
Зул

Зул
  • Свой человек
  • 620 сообщений

Зачем? Мне это не надо, а вот App Store, мне интересен

ну не знаю. На апсторе твоя игра даже если чудом попадет, денег не принесет все равно, я немного в теме. А работая джуном - глядишь что-то бы и заработал.
 

Т.е. сам алгоритм оптимальный, реализация вложенными циклами подводит... это другое дело.

Нет. Алгоритм перебором будет давать O(n^2) как ты его не переписывай, хотя и константную память. Возможно для мелких и подойдет, все равно ты вряд ли что-то более сложное напишешь в ближайшее время (это не оскорбление, а констатация факта, ты сам сказал что опыта у тебя нет, теоретические знания как я вижу тоже по нулям)

+Впрочем,  на фоне местных специалистов, подключающих субд для вычисления 2+2 - очень даже неплохо, стоит признать.


Сообщение отредактировал Зул: 06.08.2013, 02:28:33

  • 0


Количество пользователей, читающих эту тему: 1

пользователей: 0, неизвестных прохожих: 1, скрытых пользователей: 0

Размещение рекламы на сайте     Предложения о сотрудничестве     Служба поддержки пользователей

© 2011-2022 vse.kz. При любом использовании материалов Форума ссылка на vse.kz обязательна.