|
динамический #define
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev andron81 я вижу только то, что статично в скане надо подставить элементы массива в качестве параметров. а это можно сделать только или прописав их - значит их количество прописывается жестко, ну а 2 ой вариант динамический макрос который потерпел фиаско. Из интернета: Если длина массива известна на этапе компиляции, то можно упаковать его в struct и передать pass by value. А если длина массива не известна на этапе компиляции, то можно ли его pass by value? Что там интернет говорит про это? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 20:49 |
|
динамический #define
|
|||
---|---|---|---|
#18+
и так понятно, что можно ключевое слово __asm никто не отменял ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 21:00 |
|
динамический #define
|
|||
---|---|---|---|
#18+
Но вообще это даром не нужно, т.к. есть http://www.cplusplus.com/reference/cstdio/vsscanf/ ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 21:27 |
|
динамический #define
|
|||
---|---|---|---|
#18+
andron81проблем с формированием различных комбинаций шаблонов я не вижу. Не надо ничего формировать. Четыре шаблона я назвал, они жёсткие и фиксированные. Ничего дополнительного не нужно. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 22:02 |
|
динамический #define
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov andron81проблем с формированием различных комбинаций шаблонов я не вижу. Не надо ничего формировать. Четыре шаблона я назвал, они жёсткие и фиксированные. Ничего дополнительного не нужно. Ну можно было бы наверно примерять эти шаблоны последовательно, а "удачные" последовательности запоминать, а в случае неудачи откатывать поток в начало. Потом вспоминать все верные последовптелтности доходя до точки неудачи и примерить другой шаблон и тд... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 23:15 |
|
динамический #define
|
|||
---|---|---|---|
#18+
andron81, Вернее немного не так. Примеряем при помощи sscanf эти шаблоны последовательно. Если какой-то из шаблонов сработал, тогда заносим данные в стек, а строку режем и опять применяем алгоритм... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 23:57 |
|
динамический #define
|
|||
---|---|---|---|
#18+
если уже есть написанная программа для польского калькулятора с постфиксными выражениями, и по заданию парсить нужно с помощью scanf, то изменений там будет по минимуму. парсинг как был так и остается character by character вот как это должно происходить: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2020, 01:19 |
|
динамический #define
|
|||
---|---|---|---|
#18+
mini.weblab если уже есть написанная программа для польского калькулятора с постфиксными выражениями, и по заданию парсить нужно с помощью scanf, то изменений там будет по минимуму. парсинг как был так и остается character by character вот как это должно происходить: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
это не круто совсем вырезать посимвольно при помощи scanf. для этого scanf и не нужен вовсе. scanf умеет вырезать целыми словами исходя из шаблона. как минимум надо решать вырезая по одному "слову" (слово это набор символов заключенных между пробелов) как предлагалось выше. но так тоже не сильно прикольно :) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2020, 08:40 |
|
динамический #define
|
|||
---|---|---|---|
#18+
Попсовая задача этот калькулятор. Надо-бы его где-то отдельно опубликовать. Без этих scanf а в концептуальном виде. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2020, 11:29 |
|
динамический #define
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev Но вообще это даром не нужно, т.к. есть http://www.cplusplus.com/reference/cstdio/vsscanf/ вот это я бы назвал решением с полноценным использованием scanf с учетом подсказок Сибирякова. Пусть у калькулятора есть 2 команды push и execute ну и pop которая используется в execute (эти функции описаны и интереса не представляют), которые выполняются исходя из "природы" поступаемых слов(слово это либо число, либо + * - /), тогда решение я считаю должно выглядеть примерно вот так : Код: 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. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51.
вместо printf можно подставить команды push и execute ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2020, 11:38 |
|
динамический #define
|
|||
---|---|---|---|
#18+
andron81вот это я бы назвал решением Я бы назвал это фигнёй, которая упадёт на первом отрицательном операнде. Надо таки использовать %n. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2020, 13:18 |
|
динамический #define
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Успокойтесь. Вещественные числа тоже провалятся если подходить строго. Я ограничился урезвнными возможностями. В книге калькулятор тоже не рубил отрицательные(работе с отрицательными надо было научить программу в упражнении), правда с вещественными он справлялся. Так или иначе это не так уже важно ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2020, 13:44 |
|
динамический #define
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov andron81вот это я бы назвал решением Я бы назвал это фигнёй, которая упадёт на первом отрицательном операнде. Надо таки использовать %n. Код: 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. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2020, 14:36 |
|
динамический #define
|
|||
---|---|---|---|
#18+
1) Отрицательные числа в польской записи выглядят так: 0 10 - 2) в польской постфикс записи используется один единственный шаблон: число число оператор ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2020, 15:50 |
|
динамический #define
|
|||
---|---|---|---|
#18+
mini.weblab 1) Отрицательные числа в польской записи выглядят так: 0 10 - 2) в польской постфикс записи используется один единственный шаблон: число число оператор 1) неважно, уже научили работать с отрицательными 2) а как же классический пример ? ? 2 6 + 3 8 - * ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2020, 16:09 |
|
динамический #define
|
|||
---|---|---|---|
#18+
andron81 это не круто совсем вырезать посимвольно при помощи scanf. для этого scanf и не нужен вовсе. scanf умеет вырезать целыми словами исходя из шаблона. как минимум надо решать вырезая по одному "слову" (слово это набор символов заключенных между пробелов) как предлагалось выше. но так тоже не сильно прикольно :) я согласна, но это самое простое решение с минимальной модификацией уже написанного кода. из предложенных вариантов, я бы рассмотрела токены и комбинацию scanf("%d"), scanf("%c"). с шаблонами можно сделать прикольное решение через рекурсию, но придется заморачиваться со строками, и, приняв во внимание весь оверхед, это уже не выглядит так уж круто. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2020, 16:10 |
|
динамический #define
|
|||
---|---|---|---|
#18+
andron81, я не углублялась в изучение польской записи, поэтому про классический пример ничего сказать не могу. просто вместо того, чтобы делать костыли, лучше объявить, что наш калькулятор с отрицательными числами работает так -10 = 0 10 - :) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2020, 16:14 |
|
динамический #define
|
|||
---|---|---|---|
#18+
mini.weblab, Короче можно закрывать. Решено хоть от главного вопроса отошли - такие костыли не потребовались. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2020, 16:18 |
|
динамический #define
|
|||
---|---|---|---|
#18+
andron81, в любом случае, в постфикс польской записи, шаблон будет один, и это (число число оператор) (число может быть отрицательным и положительным) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2020, 16:25 |
|
динамический #define
|
|||
---|---|---|---|
#18+
поясню: mini.weblab -10 = 0 10 - имеется ввиду, что при начальном вводе данных можно записывать математическое выражение из целых неотрицательных чисел, дальше, уже в числовом стеке, 0 10 - будет записано как -10 мотивация: если используется польский постфикс (machine oriented approach), то почему бы не записать отрицательное число в удобной нам форме? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2020, 16:51 |
|
динамический #define
|
|||
---|---|---|---|
#18+
mini.weblab andron81, в любом случае, в постфикс польской записи, шаблон будет один, и это (число число оператор) (число может быть отрицательным и положительным) Я к тому, что классический пример польской записи(а надо немного углубиться :)) с вашим шаблоном не дружит. Здесь 2 раза выйдет применить ваш шаблон, а потм уткнемся в * 1 2 + 3 4 - * С отрицательными числами вас думаю все пончли. Но не велика проблема. Решается легко. Либо дейсвительно вашим способом, либо немного усовершенствовав код. Разве моя реализация с шаблонами уж очень сложна?и рекурсия как вы любите:) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2020, 17:02 |
|
динамический #define
|
|||
---|---|---|---|
#18+
andron81, а давайте я все-таки попробую: 1 2 + 3 4 - * = 3 3 4 - * = 3 -1 * = -3 вот работа постфикса ( в данном случае не обсуждаем, как это запрограммировать на С :) ): поиск шаблона -> нашли -> посчитали -> записали результат: повторяем пока не останется одно единственное число ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2020, 17:16 |
|
динамический #define
|
|||
---|---|---|---|
#18+
mini.weblab, Я понял. У вас подход другой. Но такие страсти не требуются. Калькулятор реализованный в k&r работает иначе чем вы думаете. В результате все проще. P. S. Вы таким образом описали реализацию самого калькулятора работающего по другому алгоритму отличного от того что у k&r :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2020, 17:38 |
|
динамический #define
|
|||
---|---|---|---|
#18+
вот что в итоге получилось, правда, со стэком я немного схалтурила :-) Код: 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. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2020, 02:13 |
|
|
start [/forum/topic.php?fid=57&msg=39987781&tid=2017363]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
37ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
others: | 10ms |
total: | 150ms |
0 / 0 |