Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Как создать свой сайт и заработать?" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Программирование с нуля - это совсем просто! 20) Стандартные функции и приоритеты арифметических операций
Информационный Канал Subscribe.Ru |
Программирование с нуля - это совсем просто!20) Стандартные функции и приоритеты арифметических операций
Ну программа есть конечно, только при ее написании я столкнулся с
некоторыми вопросами (которые собственно хотелось бы разъяснить), в
частности с невозможностью поставить знак степени "^" вместо
умножения. Ну вместо строки Да, это я перепутал с Бейсиком символ возведения в степень :) В Дельфи нет стандартного символа для такой операции. А как тогда надо? При решении различных задач разработчикам нередко приходится реализовывать достаточно сложные алгоритмы, связанные например с численными вычислениями. В таких случаях бывает необходимо обращаться к всевозможным тригонометрическим, степенным и других алгебраическим функциям. В Delphi имеется большой набор таких функций, который имеет общее название Math. Можно сказать, что это стандартный набор функций, входящий в язык Delphi. Так, для вычисления синуса числа 2 (обычно считается, что угол задается в радианах) достаточно записать Sin(2) Сначала указывается название функции, а затем в круглых скобках - значение, которое передается в данную функцию для какой-то его обработки. Такое значение, передаваемое в функцию для обработки, называется параметром (или аргументом) функции. Подобная запись представляет собой единый, целостный элемент, который можно использовать в арифметических выражениях наряду с числами и переменными. Он совершенно равноправен с ними и может указываться в любых местах выражений: X := (Sin(2) * 100) + 12; Важно! Тип значения, который формирует такая функция, практически всегда будет дробным (Real), поэтому следующая запись неверна:
var x: Integer; Переменная x хранит значения целого типа. А нам надо, чтобы могла хранить числа с плавающей запятой:
var x: Real; Конструкции языка, формирующие в результате своей работы некоторое значение (как Sin например), и в то же время не относящиеся к обычным арифметическим операциям, называются функции. Говорят, что функция в результате своей работы возвращает (в программу) рассчитанное значение. Стандартные наборы наподобие Math, предоставляющие разработчику множество типовых функций, называются также библиотеки . Данное название связано с историей развития языков программирования. Наборы стандартных функций объединялись в стандартные библиотеки , которые распространялись как самостоятельные файлы и могли подключаться к системам разработки. А вот в технологии .NET немало стандартных возможностей реализовано на уровне системной оболочки .NET Framework, в которую встроены всевозможные объекты. Доступ к ним происходит немного по другому - см. часть про Visual Basic :) Список важнейших и наиболее востребованных функций Delphi, входящих в библиотеку Math, приведен далее.
ArcTan Вычисляет арктангенс Эта библиотека Math к программе явно не подключена. Ее надо указать, чтобы компилятор знал, откуда брать ту или иную стандартную функцию. Кто Си изучает, помнит, что там есть специальная команда для подключения библиотек (include). В Delphi тоже такая есть. Мы ее уже видели однажды, когда создали проект с консольной программой, и в первых строчках был текст uses SysUtils; Помните? Команда uses (использовать) как раз и указывает, что в нашей программе будут задействованы функции (в данном случае из некоторой библиотеки SysUtils). Можно ее теперь так записать: uses Math, SysUtils; SysUtils можно оставить, можно удалить, я не помню, что за функции в ней хранятся. Кроме того, по умолчанию всегда считается, независимо от того, указано ли в команде uses или нет, что к программе подключена библиотека System с некоторым набором стандартных функций, которые часто бывают востребованы. Так, в нее входит функция Abs (возвращает абсолютное значение - модуль числа), Round (округляет число до ближайшего целого; соответственно, тип результата будет целым, Integer), Sqrt (вычисляет квадратный корень числа) и т. д. Для их использования вообще ничего подключать специально не надо :) Нужная нам функция возведения в степень запишется так: power(cifra,6) N в степени M всегда будет рассчитываться следующим образом: power(N,M) Например: power(2,10) (будет равно 1024). Только чтобы такая команда работала, в начале текста программы после слов program Project2; надо еще указать так: uses Math; Вот как программа после усовершенствования будет выглядеть:
Не могу не поделиться с вами своей гениальнейшей по тупости
программой.
Программа ваша мне очень понравилась - именно нестандартностью! :) Приоритеты арифметических операций Разработчику удобно записывать выражения с учетом старшинства операций, принятых в математике. Поэтому в Delphi существует понятие приоритета операций. Операции с более высоким приоритетом выполняются в первую очередь, операции с более низким - в последнюю. В первую очередь выполняются обращения к стандартным функциям, потом - *, / (умножение, деление), Div (целочисленное деление) и Mod (определение остатка), далее - +, - (сложение и вычитание). Если встречаются операции с одинаковым приоритетом, то они выполняются последовательно слева направо. В соответствии с приоритетами выражение 2 + power(3,4) * 5 - 600 / 4 * 7 / 12 будет иметь своим значением 319,5. Последовательность его вычисления показана с помощью круглых скобок: (2 + (power(3,4) * 5)) - (((600/4) * 7) / 12) Программист при желании может явно указать требуемый порядок вычисления с помощью круглых скобок. Все операции, которые мы только что рассмотрели, требуют двух значений, которые располагаются слева и справа от знака оператора (так называемые бинарные операции). Как уже говорилось, в Delphi существует операция, которая обходится одним значением (называется она унарная). Она применяется для изменения знака некоторой величины и записывается с помощью символа "-". В данном примере
x := 5; первый оператор записывает в переменную x значение 5, а следующий оператор присваивает переменной y значение, противоположное по знаку величине 5, хранимой в переменной x. То есть переменной y присваивается значение -5. В другом примере на противоположный будет изменен знак отрицательного числа: - (-10) Соответственно, значением такого выражения будет положительное число 10. А операции, у которых два параметра (как у знака сложения - слева и справа), называются бинарные. Теперь попробуем реализовать ранее описанный алгоритм расчета личной триграммы с помощью новых знаний о переменной. Результатом его является значение, отвечающее одной из цифр квадрата (одному из направлений света). Для реализации алгоритма заново его перепишем и дополним командами записи получающихся результатов в промежуточные переменные. 1. Записать в переменную Years значение, соответствующее году рождения человека (двум последним числам года). 2. Записать в переменную TriaNum значение, получающееся путем вычитания из ста значения, записанного в переменную Years. 3. Разделить значение TriaNum на 9, и остаток от того, что получится в результате деления, снова записать в эту же переменную TriaNum. 4. Вывести полученное число (содержимое переменной TriaNum) на экран. Пока этот алгоритм реализован только для мужчины. Он также не учитывает ситуацию, когда получившиеся число будет равно нулю (тогда его в соответствии с оригинальным алгоритмом требуется преобразовать в 9). Как это делается - как учитывать подобные условные отклонения в алгоритме, будет рассмотрено дальше. Ничего сложного в таком алгоритме нет. В принципе он не привязан к конкретному языку программирования, поэтому разработчик, владеющий несколькими языками, сможет быстро запрограммировать его в любой доступной системе. Хотя мы могли, конечно, составлять программу сразу на языке и в среде Delphi, все же желательно предварительно как можно более формально, точно и без двусмысленностей записать будущую последовательность команд в словесной форме на бумаге, а затем проверить ее правильность вручную, по шагам. Небольшие программы действительно легко создаются непосредственно за клавиатурой компьютера. Но когда объем программы становится более-менее большим, уже не удается удерживать в уме все взаимосвязи внутри нее. Поэтому для серьезных проектов крайне желателен предварительный этап проектирования. Перенесем этот алгоритм в редактор Delphi:
var Years, Tria: Integer; Не забудем, что используемые в программе переменные предварительно надо обязательно объявить с помощью команды Var. Последней командой программы стала команда ожидания нажатия на клавишу Enter. Если ее не указать, то окно программы сразу после вывода результата закроется, и мы не успеем увидеть результат. Запустим приложение - на экран будет выведено значение 2. Нажмем Enter - программа закроется и управление будет передано оболочке Delphi. Что означает первый оператор присваивания Years := 80; ? В нем мы задаем интересующую нас дату рождения, предназначенную для анализа. Как мы договаривались, она задается двумя последними цифрами года - если человек родился в 1980-м году, то берется число 80, если человек родился в 1917 году, то берется число 17. Задание. Модифицируйте данную программу так, чтобы значение даты для анализа не задавалось непосредственно в коде программы, а вводилось в нее с консоли. Используйте для этого в нужном месте команду ReadLn с соответствующим параметром. Это будет первая реальная программа, выполняющая некоторые полезные действия, которую можно записать на дискетку например и показывать и передавать знакомым! Находится она в каталоге, где сохранен проекте (например c:\program files\delphi\projects\test\). Ее название будет совпадать с названием проекта (например, Project1), а расширение соответственно будет .exe - Project1.exe. Это полноценная автономная программа, которая реализует наш алгоритм, представленный соответствующим исходным текстом на Пасале, но она уже не привязана к Delphi и может распространяться совершенно свободно и работать на других компьютерах. Но если выполнять задание лень :) то вот письмо Сергея, который программки уже сделал: Для Мужчин:
program fen_shyi_m; Для Женщин:
program fen_shyi_v;
Сложнее всего было определить остаток от деления.
Ви знаете очень легко дается начало, может потому когдато приходилось
учить Паскаль. Учитесь у человека! :) Во всех смыслах! :) Он вдобавок смоделировал действие операции Mod с помощью двух операторов присваивания, а кроме того, сделал ввод по нормальному - год можно четырьмя цифрами вводить. Попробуйте в этих программах самостоятельно разобраться. А вот схожий вариант Константина:
Var man_number,born,women_number:Integer,result:Real; Константин и на Си написал программу! Visual Basic .NET
Module Module1 Особого отличия от Дельфи и нету, правда? Математические функции записываются и вызываются практически по той же схеме, что и в Delphi, только для их использования даже и подключать ничего не надо! Если например функция Sin хранится в библиотеке Math, то обращение к ней просто запишется не Sin, а через точку - с предварительным префиксом - названием библиотеки Math: Math.Sin(2) X = Math.Sin(2) Borland C++ Builder Особого отличия и на Си++ не будет. Благодаря тому, что язык этот весьма компактные записи допускает, в нем имеется специальный символ для нахождения целого остатка от деления - "%".
#include <conio.h> Если математические функции нужны, то надо подключить библиотеку math.h в начале:
#include <conio.h> В ней есть и sin(), и много чего другого. Когда понадобятся нам эти функции на практике, тогда и доберемся до них. С моего любимого сайта "Сисадмин тоже человек" http://sysadmin.mail.ru/:
Установил вчера в бухгалтерии антивирус. Сосед рассказал (тоже админ), я просто плакал: звонит секретарша, вся в слезах, и говорит: "Я тут монитор протирала, тряпочкой, и один ярлык стёрла"...
Историй была масса, за почти 10-летний стаж :) Начать хотя бы с учетной
карточки модема, где наша бухша написала: "Момед"... Про серекс я
вообще молчу (это - ксерокс, определение для любого копира, как
производное, отксерить) - наверное во многих конторах такие дефаулты.
;)
Хочу рассказать историю, произошедшую с моим знакомым сисадмином.
Поручило ему как-то начальство обучить группу сотрудниц. Посадил он их
за компы, обучает. В один прекрасный момент он произносит фразу: "А
теперь все выходите". После этого все встали и вышли за дверь. Он
сначала не понял, почему они ушли (мало ли), посидел, подождал. Потом
выглянул за дверь: они там сидят и ждут приглашения. Он спрашивает: "А
чего это вы все ушли?". Они: "Так вы же сказали выйти". (c) 2004 Сергей Бобровский bobrovsky@russianenterprisesolutions.com
Школа программирования с нуля
Все предыдущие выпуски базового курса тут:
А перекачать их одним архивом можно отсюда: |
http://subscribe.ru/
http://subscribe.ru/feedback/ |
Подписан адрес: Код этой рассылки: comp.soft.prog.prognull |
Отписаться |
В избранное | ||