воскресенье, 20 сентября 2009 г.

Арифметика. Калькулятор.

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

Компоненты для арифметический действий находятся на вкладке "Логика" панели компонентов. Пока что нам понадобится только самый первый компонент - Math. Он способен выполнять множество математический операций.

Но сначала мы сделаем интерфейс программы. Конечно, нам нужно будет поле (даже целых три) и кнопки.



В первое поле мы вводим первое число, во второе - второе. Ну а при нажатии кнопки операции в третьем поле появляется результат. А разделитель между вторым и третьим полем - это обычныя панель, только сильно суженная.
У формы изменён заголовок (параметр Cation) и параметр BorderStyle.

Конечно, пока программ ничего не считает, но мы её сейчас этому "научим".



Вот теперь программа уже считает. У компонента Math есть параметр OpType, который и задаёт арифметическую операцию. Параметры Op1 и Op2 - это операнды, т.е. числа для операций. Но мы их берём из верхних точек. А ResultType определяет, может ли число быть дробным (Real - может, integer - только целое). Кстати, у нас и в поля можно ввести только числа (параметр DataType поля ввода).

Теперь следует сказать о соединениях компонентов. Вы наверняка заметили, что первое и второе поля несколько раз поставляют свои данные: на каждую из 4 операций. А свойство, содержащее текст, у каждого поля только одно. Значит, нужен разветвитель, и он как раз есть. Это тоже компонент, только он практически незаметен из-за своих малых размеров.

Каждый разветвитель типа "данные-свойства" имеет 4 точки: одну верхнюю и три нижних. Верхних точек достаточно: любая точка данных может брать информацию только из одного свойства. А вот любая точка свойства может передавать информацию любому числу точек данных. Конечно, три точки для соединения с точками данных - это маловато, но зато удобно и меньше заметно. Всегда можно поставить ещё несколько таких компонентов.
Чтобы поставить такой компонент, нужно подвести связь от точки данных к линии связи между точкой данных и свойств. Потренируйтесь делать это.


Мы рассмотрели простейшие математические операции: сложение, вычитание. деление и умножение. В компоненте Math их значительно больше. Если вам интересно - поэкспериментируйте. А я сейчас расскажу и более интересном компоненте, который незаменим при сложных вычислениях. Это MathParse. Он - 4-ый на вкладке "Логика".

В этот компонент можно писать целые формулы, а аргументы для них передавать через верхние точки. По умолчанию точек всего две, но их число задаётся в параметре DataCount. Всего можно задать до 100 точек. А формула задаётся в параметре MathStr. Она задаётся обычным способом - с помощью знаков, скобок и функций типа sin, cos и т. д. Чтобы использовать операнд (т.е. данные с верхних точек), нужно в этом параметре употребить служебный символ % и номер точки данных, например %1.



Рассмотрите внимательно параметр MathStr и поймите формулу. А затем запустите программу и рассчитайте что-нибудь. Помните только, что при расчёте косинуса аргумент берётся в градусах. А чтобы брался в радианах, надо изменить параметр AngleMode компонента MathParse.

16 комментариев:

  1. В видеоуроке схемы попроще, зато без опечаток... ;0)

    ОтветитьУдалить
  2. есть ли возможность В поле ввода при введении запятой в числах, заменой на точку,что бы правильно подсчитывал калькулятор?

    ОтветитьУдалить
  3. Если DataType поля ввода выставить в FloatNumber, то как раз можно будет вводить только цифры, точку и +/-.
    Без замены DataType можно сделать так

    ОтветитьУдалить
    Ответы
    1. Скажите как можно регулировать количество знаков после точки в дробных числах(результат)

      Удалить
    2. Простенькое выражение в MathParse: round(3/55*10000)/10000. 10000 означает, что округлять нужно до 4- знаков после запятой, 1000 - до 3-х, 100 - до 2-х и т. д.

      Удалить
    3. Подскажите куда именно мне поместить выражение round(3/55*10000)/10000 если у меня в MathParse уже используеться формула %1*(10/100))+%1 ? и мне нужно что б результат округлялся до 2-х знаков после запятой.

      Удалить
    4. (%1*(10/100))+%1) нужно подставить вместо 3/55, причём (%1*(10/100))+%1) - обязательно в скобках.

      Удалить
    5. Огромное спасибо!))) Подставила - все получилось. (ответ на Админ 26 июня 2013 г., 23:36)

      Удалить
  4. Спасибо,в принципе сделал уже, как Вы и говорили по другому
    Add(MathParse,9049156,364,455)
    {
    MathStr="%1+%2"
    AngleMode=1
    link(onResult,15023078:doText,[])
    link(X1,4215504:Text,[(370,289)(160,289)])
    link(X2,12695416:Text,[(377,411)(482,411)])
    }
    Add(Edit,4215504,154,238)
    {
    Left=5
    Top=5
    Text=""
    }
    Add(Edit,12695416,476,336)
    {
    Left=60
    Top=5
    Text=""
    link(onChange,13299852:doReplace,[(520,342)(520,346)(394,346)(394,349)])
    }
    Add(Button,5818760,189,455)
    {
    Left=5
    Top=30
    Caption="Считать!"
    link(onClick,9049156:doCalc,[])
    }
    Add(Label,15023078,469,455)
    {
    Left=65
    Top=35
    }
    Add(MainForm,2953706,70,259)
    {
    Width=657
    Height=412
    }
    Add(Replace,13299852,406,343)
    {
    SubStr=","
    DestStr="."
    link(onReplace,12695416:doText2,[])
    }

    ОтветитьУдалить
  5. С заменой запятой на точку, куда практичнее, спасибо.Просто зачастую по инерции набирается в поле запятая вместо точки, а теперь это не отвлекает. Спасибо.

    ОтветитьУдалить
  6. А, не подскажите-ли, как использовать при вводе в калькулятор значений имеющийся список (например в файле-блокноте), т.е. не ручками вводить значения а выбирать из уже имеющегося списка.

    ОтветитьУдалить
    Ответы
    1. Ну, есть же компонент ComboBox, его значения можно сохранять в файле и загружать. И конечно, использовать в программе.

      Удалить
  7. Что-то Касперский сильно ругается на Ваши файлы с примерами (как то гестапо из анекдота)...

    ОтветитьУдалить
    Ответы
    1. Просто воткните между какой-нибудь связью компонент DoData, например. Главное, чтобы для логики программы он ничего не значил (не менял), а вот на антивирус часто влияет. Или можно поменять где-то связи, компоненты. А вообще, последовательным удалением частей схемы выясните, на какой участок ругается, и с ним работайте.

      Удалить
  8. Я новичок. Подскажите - какую стабильную версию сейчас можно установить. При попытке качать с сайта www.hiasm.com получаю:
    Сайт содержит нежелательное ПО!!!
    То же самое на hiasm.net
    Где реальный домен???

    ОтветитьУдалить
    Ответы
    1. Я бы эти сообщения выдавал при посещении сайтов браузеров, которые выдают такое на сайт hiasm >:(

      hiasm.com и hiasm.net - это реальные домены, а на глупое сообщение не стоит обращать внимание.

      Скачивать рекомендую AltBuild (http://forum.hiasm.net/forum.html?q=3&p=210696#p210696).

      Удалить