Файлы с расширением .h это заголовочные файлы C. А как известно язык C не объектно ориентированный.
Для создания классов надо использовать C++ и соответственно заголовочные файлы с расширением .hpp
Neizvest, пожалуйста. Но из-за того, что Вы наотрез отказываетесь хранить промежуточные данные не в специально созданных для этого переменных а храните их в виде строк в html тегах, решение получилось достаточно громоздким.
Также вынужден был добавить еще один html элемент с id=large для вывода в него окончательной информации.
По хорошему на клиент отдается страничка с разметкой блоков и скриптами, которые в свою очередь аяксом или вебсокетами получают данные от сервера, заполняют интерфейс на основании этих данных и отправляют серверу данные о действиях пользователя в интерфейсе
viktorleg, не обижайтесь на меня, просто я тут решил помочь немного человеку, мучаюсь с ним третий день, а он просто не понимает (а возможно даже не хочет понять) код который ему даю. Вот я и злюсь потихоньку :)
viktorleg, в любом случае, в данной постановке вопрос потребует слишкоммногобукаф от любого кто решит на него ответить, что непременно скажется на качестве ответов, которые к слову будут либо просто ссылкой на какое то "готовое" решение, не применимое к данной ситуации и требующее серьезной переделки серверной и клиентской части, либо будут говорить по делу но сильно сократив описательную часть, что превратит ответ в бесполезный для человека, который сам не умеет пока самостоятельно реализовывать такие вещи.
viktorleg, проблема тостера в людях, неправильно задающих неправильные вопросы.
На мой взгляд, данный вопрос надо было задать примерно так:
Заголовок: Реализуйте за меня клиентскую и серверную части такой контактной формы.
Но ясное дело при такой постановке вопроса:
- тостер предложит Вам поставить знак вопроса в конце вопроса
- пользователи пошлют Вас в грубой или мягкой форме на биржу фрилансеров.
А потому наиболее верным было бы спросить так:
- Подскажите готовые решения на php, на основе которых можно реализовать такую контактную форму?
И в зависимости от выбранного вами варианта ответа на этот вопрос задавать вопросы об используемых в нем технологиях по мере возникновения неясностей.
Neizvest, мне очень трудно читать хитросплетение вашего кода, так как вы смешали там все (логику расчетов, логику отображения, логику хранения). Я понятия не имею в каком виде у Вас получается строка нужная строка, из нашей переписки я понял следующее:
1. вы делаете 5 проходов
2. на каждом проходе вы:
2.1. генерируете 100 чисел от 0 до 9
2.2. считаете для каждого числа от 0 до 9 сколько оно было раз сгенерировано
2.3. определяете число, которое повторилось наибольшее число раз
2.4. добавляете его к строке final в виде "число:число повторений ;"
3. после прохождения всех проходов в финал имеем "число:количество ; число:количество ; число:количество; и т.д"
Если я все правильно понял, то строка в final уже в нужном виде, нужно только убрать ";" в конце строки. Это можно сделать так: final = final.replace(/\s*;\s*$/,"");
Так же возможно понадобится убрать теги. Это делается так: final = final.replace(/<.*?>/g,"");
/\s*;\s*/ - аналогично ';' но с любым количеством пробелов до и после ;
/\s*:\s*/ - аналогично ':' но с любым количеством пробелов до и после :
в данных регулярках:
\s - пробельный символ, считается аналогией пробелу, переходу на новую строчку и символу возврата каретки
* - квантификатор, указывает что предыдущий символ может присутствовать 0 и более раз подряд
а вообще, регулярки для некоторого рода задач просто незаменимы, ознакомится с синтаксисом и возможностями можно тут, а еще лучше тут (статья на хабре)
Neizvest, гхм, вы надомной издеваетесь?:) что может быть проще?
/\s*;\s*/ - регулярное выражение, совпадающее с точкой запятой обрамленной любым количеством пробелов с обеих сторон
Neizvest, самый сложный момент там использование метода Array.reduce(...) для поиска максимального значения. Этот метод бывает очень полезен для выполнения различных сложных преобразований массивов. Настоятельно рекомендую про него почитать.
Приеду домой скину вариант преобразования финальной строки в массив и поиск по нему максимального значения.
Почему? Если постоянно дергать да еще и в цикле getElementById - это не очень хорошо, можно сделать и дописывание, но вы мне для того чтобы я сделал это наиболее оптимальным образом распишите суть требований, почему нельзя перезаписывать, что именно и в каком порядке дописывать?
PS: я конечно сильно поменял изначальный код, но сделал это с целью максимально разнести вывод и логику, потому что если их смешивать, путается логика. Так же в Вашем варианте вы вроде как дописывали, но тут же в цикле заново перезаписывали блоки test0-test9, так что пользователь даже не успевал увидеть промежуточные результаты.
В идеале мне бы очень помогло описание алгоритма вывода.
Например такое:
1. обнуляем все блоки в которые производится вывод
2. после запуска функции производящей прогоны, на каждом прогоне выполняем:
2.1. записываем в блоки test1-test9 информацию о с генерированных числах в формате "число1:число его повторений, число2:число его повторений, и т.д."
2.2. дописываем в блок bla-bla информацию о максимальных значениях на текущем прогоне по форме "число:число его повторений"
3 после прохождения всех прогонов записываем в блок final информацию о максимальных значениях из числа максимальных значений полученных во время прогонов и записанных в блок bla-bla по форме "число:число его повторений"
Для создания классов надо использовать C++ и соответственно заголовочные файлы с расширением .hpp