Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Эмулятор электронной таблицы
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Мне нужно реализовать что то на подобе таблицы в Excel. Проблема как вычеслить ссылочные поля. Подскажите как это можно реализовать или может есть какой - то готовый алгоритм? Благодарю! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2005, 11:20 |
|
||
|
Эмулятор электронной таблицы
|
|||
|---|---|---|---|
|
#18+
Забыл добавить пример, Например нужно вычеслить с1, ссылка же тоже может ссылаться на другую ячейку та на третию и т.д A B C 1 5 8 A1*b2+c2 2 3 b1 a1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2005, 11:24 |
|
||
|
Эмулятор электронной таблицы
|
|||
|---|---|---|---|
|
#18+
Я делал так: Иду по порядку по всем полям и считаю если удалось посчитать то хорошо, если нет(есть ссылка на еще не посчитанное поле) то заношу в очередь ожидания и считаю дальше, когда дохожу до конца, то перехожу на очередь ожидания и теперь по ней циркулирую пока все ссылки не разрешатся... Естественно надо добавить обработку cross cell reference... Если не понятно расскажу подробнее... _______________________________________________________________ @Мы медленно запрягаем, быстро ездим, и сильно тормозим.@ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2005, 11:49 |
|
||
|
Эмулятор электронной таблицы
|
|||
|---|---|---|---|
|
#18+
Если не секрет, то это случайно не тестовые задания для устройства на работу, а то мне приходилось решать такую тестовую задачку когда я устраивался в одну контору... _______________________________________________________________ @Мы медленно запрягаем, быстро ездим, и сильно тормозим.@ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2005, 11:50 |
|
||
|
Эмулятор электронной таблицы
|
|||
|---|---|---|---|
|
#18+
А не осталось исходников, может дашь глянуть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2005, 11:55 |
|
||
|
Эмулятор электронной таблицы
|
|||
|---|---|---|---|
|
#18+
Guest wrote: > Здравствуйте! > Мне нужно реализовать что то на подобе таблицы в Excel. Проблема как > вычеслить ссылочные поля. Подскажите как это можно реализовать или может > есть какой - то готовый алгоритм? Насколько я знаю, в Excel для определения порядка вычисления используется алгоритм топологической сортировки. Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2005, 11:56 |
|
||
|
Эмулятор электронной таблицы
|
|||
|---|---|---|---|
|
#18+
synapseЯ делал так: Иду по порядку по всем полям и считаю если удалось посчитать то хорошо, если нет(есть ссылка на еще не посчитанное поле) то заношу в очередь ожидания и считаю дальше, когда дохожу до конца, то перехожу на очередь ожидания и теперь по ней циркулирую пока все ссылки не разрешатся... Естественно надо добавить обработку cross cell reference... Если не понятно расскажу подробнее... _______________________________________________________________ @Мы медленно запрягаем, быстро ездим, и сильно тормозим.@ Не совсем понятно по поводу очереди ожидания, ведь ячейка может содержать не просто ссылку а выражение типа A2*B3+C1-B2 и т.д ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2005, 12:51 |
|
||
|
Эмулятор электронной таблицы
|
|||
|---|---|---|---|
|
#18+
Так начинаем по порядку. У нас есть таблица. Представим ее как двумерный массив объектов Cell. т.к. каждая ячейка имеет аддресс типа A1,A2, то все это легко представить как двумерный массив(A->1;B->2). Получается ячейка с адресом A1 ,будет иметь индекс в массиве array[0][0], A2->array[0][1].... class Cell { public: double res;//результат вычислений char *value; //выражение } Дальше идем по этому массиву строчка за строчкой и считаем, если встречаем ссылку на поле то проверяем по индексу рассчитана ли она, если рассчитана то берем результат. Если в выражении нет не рассчитанных полей то вычисляем и заносим в результат. Идем дальше... Если встречается хоть одна ссылка без результата то заносим указатель на эту ячейку в очередь ожидания. После окончания прохода таблицы возвращаемся к очереди ожидания. Пробуем вычислить снова, если снова неудача, заносим ее опять в конец очереди(ждем, значит на этот есть ссылки на не расчитанные ячейки из очереди ожидания, которые должны разрешиться с учетом уже рассчитанных ячеек.) И так вот циркулием по этой очереди пока не разрешаться все ссылки... Еще кстати как расширение можно перед началом проходов упорядочить таблицу определенным образом, чтоб очередь меньше оказалась.... _______________________________________________________________ @Мы медленно запрягаем, быстро ездим, и сильно тормозим.@ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2005, 13:26 |
|
||
|
Эмулятор электронной таблицы
|
|||
|---|---|---|---|
|
#18+
Guest synapseЯ делал так: Иду по порядку по всем полям и считаю если удалось посчитать то хорошо, если нет(есть ссылка на еще не посчитанное поле) то заношу в очередь ожидания и считаю дальше, когда дохожу до конца, то перехожу на очередь ожидания и теперь по ней циркулирую пока все ссылки не разрешатся... Естественно надо добавить обработку cross cell reference... Если не понятно расскажу подробнее... _______________________________________________________________ @Мы медленно запрягаем, быстро ездим, и сильно тормозим.@ Не совсем понятно по поводу очереди ожидания, ведь ячейка может содержать не просто ссылку а выражение типа A2*B3+C1-B2 и т.д А для расчета самого выражения и определения в нем ссылок на ячейки его предварительно нужно разложить на кирпичики... Здесь уже синтаксическим анализатором представляешь все это в постфиксной форме(венгерской нотации) и вперед... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2005, 13:29 |
|
||
|
Эмулятор электронной таблицы
|
|||
|---|---|---|---|
|
#18+
Типа на PERL Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2005, 13:33 |
|
||
|
Эмулятор электронной таблицы
|
|||
|---|---|---|---|
|
#18+
Спасибо, то что нужно, Ещё вопрос помогите составить регулярное выражение, что бы оно сопоставлялось строкам типа : Например : просто число 5 или формула 5*8 или А1 * 5 + С2 Но не проходили строки "неправельные выражения" типа A1+ или +А1 и т.д ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2005, 14:33 |
|
||
|
Эмулятор электронной таблицы
|
|||
|---|---|---|---|
|
#18+
GuestСпасибо, то что нужно, Ещё вопрос помогите составить регулярное выражение, что бы оно сопоставлялось строкам типа : Например : просто число 5 или формула 5*8 или А1 * 5 + С2 Но не проходили строки "неправельные выражения" типа A1+ или +А1 и т.д Нифига, регекспы здесь слегка не в тему. нужен парсер алгебраических выражений (хотя бы примитивный). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2005, 14:37 |
|
||
|
Эмулятор электронной таблицы
|
|||
|---|---|---|---|
|
#18+
дураг с инецеативой Guest Нифига, регекспы здесь слегка не в тему. нужен парсер алгебраических выражений (хотя бы примитивный). Для вычесления выражения да согласен, а мне нужно допустим просто узнать является ли данная строка "правельным" выражением ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2005, 15:00 |
|
||
|
Эмулятор электронной таблицы
|
|||
|---|---|---|---|
|
#18+
Guest Для вычесления выражения да согласен, а мне нужно допустим просто узнать является ли данная строка "правельным" выражением Нифига, парсер все равно нужен, т.к. иначе хрен проверишь даже такую примитивную грамматику простых алгебр выражений: Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2005, 15:11 |
|
||
|
Эмулятор электронной таблицы
|
|||
|---|---|---|---|
|
#18+
А если есть условие, только положительные целые числа , ссылки(A1) и знаки +, -, *, /. Всё остальное не нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2005, 15:47 |
|
||
|
Эмулятор электронной таблицы
|
|||
|---|---|---|---|
|
#18+
GuestА если есть условие, только положительные целые числа , ссылки(A1) и знаки +, -, *, /. Всё остальное не нужно. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2005, 15:58 |
|
||
|
Эмулятор электронной таблицы
|
|||
|---|---|---|---|
|
#18+
дураг с инецеативой GuestА если есть условие, только положительные целые числа , ссылки(A1) и знаки +, -, *, /. Всё остальное не нужно. Код: plaintext Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2005, 15:59 |
|
||
|
Эмулятор электронной таблицы
|
|||
|---|---|---|---|
|
#18+
synapse Еще кстати как расширение можно перед началом проходов упорядочить таблицу определенным образом, чтоб очередь меньше оказалась.... _______________________________________________________________ @Мы медленно запрягаем, быстро ездим, и сильно тормозим.@ Можно подробнее как упорядочить таблицу опредлённым образом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2005, 16:25 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=33204407&tid=1347521]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
75ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
| others: | 293ms |
| total: | 468ms |

| 0 / 0 |
