На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Обязательно выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Этот раздел предназначен для вопросов, посвященных разработке компонентов, а также для тестирования собственных бесплатных компонентов с открытым исходным кодом.

Здесь запрещается:
1. Размещать ссылки на какие-либо коммерческие компоненты, реализующие требуемую функциональность.
2. Обсуждать и тестировать коммерческие компоненты или компоненты с закрытым кодом.
3. Давать ссылки на сайты с исходным кодом компонентов. Все тестируемые исходные коды должы быть размещены на сайте ИСХОДНИКИ.RU.
Модераторы: Rouse_, DimaBr
  
> PostfixCalc, протестируйте компонент
    Компонент PostfixCalc разбирает математические выражения и вычисляет их. Выражение может состоять из чисел, переменных, функций и арифметических операций. Все числа можно задавать в любых системах счисления (точнее от 2-й до 36-й).

    В архиве сам компонент и демо-калк для тестирования
    Сообщение отредактировано: Gaiver -

    Прикреплённый файлПрикреплённый файлPostfixCalc_v03.rar (10.38 Кбайт, скачиваний: 223)
      Из uses демки хорошо бы убрать "NkEdit". Все равно не используется, а с толку сбивает.

      И сразу общее замечание: у парсера слишком много ограничений. Для унарного минуса добавляется 0 спереди, удаляются пробелы перед парсингом — это не очень хороший стиль. Кроме того если несколько унарных минусов, то возникает ошибка, хотя это вполне корректная операция.
        Цитата
        Из uses демки хорошо бы убрать "NkEdit". Все равно не используется, а с толку сбивает.

        угу, просто забыл

        Цитата
        И сразу общее замечание: у парсера слишком много ограничений. Для унарного минуса добавляется 0 спереди, удаляются пробелы перед парсингом — это не очень хороший стиль. Кроме того если несколько унарных минусов, то возникает ошибка, хотя это вполне корректная операция.

        а насчет этого я подумаю
          Цитата
          Кроме того если несколько унарных минусов, то возникает ошибка, хотя это вполне корректная операция.

          исправил, заодно убрал добавление нулей перед унарным минусом.
            Не пойму, зачем закрепили тему. Компонент, типа, такой крутой, или для коллективной разработки? Я никак не против, просто не догоняю...
            Ладно, умеет ли компилировать выражения? Строить их деревья, например, для дифференцирования?
            Вообще, зачем компонент для невизуальных задач?

            Добавлено
            Всё-таки посмотрел исходник....
            Да, много вопросов отпало к сожалению.

            Нет поддержки $, 0x.
            Ненавижу писать/читать капснутые hex-числа, по мне так в нижнем регистре лучше всё распознаётся даже.
            Было бы удобнее иметь возможность указания rad или deg так же непосредственно после значения угла.
            Почему нет оператора факториала n!?
            Медленный код:
            Цитата
            for i := 1 to p-1 do
            s := s + str[i];

            Цитата
            if a in ['A'..'Z'] then result := 3 // именно 3, это не опечатка
            - думаю, самое место для использования перечисления.
            Кроме ShowErrors наверно полезнее было бы RaiseErrors - с ними-то при желании можно делать что угодно, хотя т.к. это компонент, то может и не очень.
            Ещё, раз уж компонент, то где Events и иконки нет....
            Ещё если бинарное число состоит только из нулывых цифр (например, 0000b), то ошибка, что пустая строка не есть floating-point value.

            Добавлено
            Ну зачем добавлять "scc" в конце при выводе результата, что я сам не знаю, какую систему установил... Как и думал, вещественный результат можно получить только в cc=10.

            Добавлено
            Опять, раз уж это компонент, то где настройки, например вообще отсутствуют настройки округления. А я хочу, чтобы округлялось до 3 знака после запятой к ближайшему чётному!
            Сообщение отредактировано: ors_archangel -
              Цитата
              Ненавижу писать/читать капснутые hex-числа, по мне так в нижнем регистре лучше всё распознаётся даже.

              нижний регистр занят под переменные

              Цитата
              Почему нет оператора факториала n!?

              уже добавил

              Цитата
              Было бы удобнее иметь возможность указания rad или deg так же непосредственно после значения угла.

              наверное сделаю.

              Цитата
              Медленный код:

              Цитата
              for i := 1 to p-1 do
              s := s + str[i];

              Заменил на result := copy(str, 1, p-1). Переменную s вообще выкинул.

              Цитата
              Ну зачем добавлять "scc" в конце при выводе результата, что я сам не знаю, какую систему установил...

              чтобы после получения ответа(если он выводится в тот же Едит, где задается выражение) было удобнее продолжать вычисления. Но это требуется не всегда, поэтому сделаю опционально.

              Цитата
              отсутствуют настройки округления. А я хочу, чтобы округлялось до 3 знака после запятой к ближайшему чётному!

              сделаю
                Цитата Gaiver @
                нижний регистр занят под переменные
                Ну почему мир так несправедлив к тем, кто хочет перемен? Чем они провинились, что мы считаем их ниже нас! Мы что, возомнили себя богами? О .NET, когда же это кончится?
                Цитата Gaiver @
                уже добавил
                Не верю
                Цитата Gaiver @
                наверное сделаю.
                Лучше забей, сделай компиляцию
                Цитата Gaiver @
                Заменил на result := copy(str, 1, p-1). Переменную s вообще выкинул.
                Т.е. ты хотел сказать result := str; setlength(result, p-1)? Я прввильно тебя понял?
                Цитата Gaiver @
                сделаю
                Не принимай всё так близко к сердцу, спроси себя: "Оно мне надо?", если да - делай, бог в помощь. Мне оно не надо лично. Вот когда введёшь оператор "'" (производная), вот будет интересно посмотреть. Ладно, я просто ухмыляюсь, хороший компонент, только зря он - компонент, лучше бы библиотека вычислителная, а компоненты уже могут её юзать на здоровье, имхо-имхо-имхо.

                Добавлено
                Кстати, а длинная арифметика поддерживается?
                  Цитата
                  Не верю

                  а теперь?

                  Цитата
                  Кстати, а длинная арифметика поддерживается?

                  нет
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script Execution time: 0,1052 ]   [ 18 queries used ]   [ Generated: 23.11.17, 11:28 GMT ]