Логин: Пароль:    Регистрация Всеми возможностями сайта можно пользоваться
только после авторизации.
   Забыли пароль?

Поиск
L



Статистика
u
Пользователи онлайн: нет
Гостей онлайн: 9
Всего онлайн: 9
Зарегистрировано юзеров: 7432
Комментариев на сайте: 665
Новый юзер: puskkk



Последние комментарии
c
Ginaneula прокомментировал "Урок 3 - Конструкция IF...THEN...ELSE":
[img]https://kapsuly-lipocarnit.ru/files/lipocarnit_1/img/product-head1.png[/img] [url=https://kapsuly-lipocarnit.ru/][img]https://karga.info/wp-content/uploads/2019/02/orig.jpg[/img][/url] Купить Липокарнит в Могилёве (Беларусь) через интернет-аптеку Функции Производитель: ООО "КоролевФарм" Форма выпуска: капсул Упаковка: полимер Объем: 72 г Срок действия: 2 года Доставка: почтой, курьером Оплата : наличными, карта Фотографии продукции Чтобы заказать Липокарнит, оставьте свои контактные данные в форме ниже, и мы свяжемся с вами как можно скорее. [url=https://kapsuly-lipocarnit.ru/]lipocarnit отзывы реальные[/url] - Мы обещаем полную анонимность. Ваши данные не будут переданы 3 людям. Внимание: внимательно проверьте введенный номер и не забудьте включить телефон, чтобы наш оператор мог с вами связаться. Левокарнитин для похудения Городская суета стимулирует постоянный стресс. Большинство людей не справляются с ними, они начинают компенсировать отвратительное настроение избытком соленой и высококалорийной пищи, что приводит к увеличению веса. Ожирение является предпосылкой других приобретенных заболеваний, таких как диабет, гипертония, склероз сосудистого русла, болезни сердца. Чтобы сохранить здоровье на долгие годы, вы должны иметь нормальный вес. Для этого есть комплекс Липокарнит. Что это за продукт Липокарнит - фармацевтический продукт, созданный российскими и швейцарскими учеными специально для лечения ожирения у пациентов с избыточным весом. Преимуществом продукта является стопроцентная натуральная композиция растительного происхождения, которая не подвергает организм чрезмерным нагрузкам при метаболизме его компонентов. Биологически активная добавка к пище доступна в форме капсул от производителя. Обмана нет Перед выпуском лечебного средства для продажи производитель выполнил медицинские тесты. Была взята контрольная группа клиентов, которые худели с помощью ежедневных физических нагрузок, правильного питания, различных органических добавок. Исследуемая группа не изменила привычного распорядка дня и образа жизни. Он просто воспринимал продукт Липокарнит. Динамика снижения веса один раз в день регистрировалась в дневнике. Данные контрольной группы были значительно ниже, чем в исследовании. Испытания и противопоказания для введения фармацевтического продукта По крайней мере, некоторые продукты имеют свои собственные ограничения на потребление. Пищевая добавка Липокарнит характеризуется небольшим перечнем противопоказаний. Отзывы Противопоказания Любая степень ожирения беременность; лактация; отвратительная переносимость фармацевтического продукта; аллергическая реакция на активные или вспомогательные компоненты препарата; Дефицит лактазы. Медицинские исследования не выявили побочных эффектов при введении биодобавки. Влияние [url=https://kapsuly-lipocarnit.ru/]липокарнит купить в могилеве[/url]а на организм Продукт положительно влияет на работу всех органов и систем пациента. Нормализует работу печени, восстанавливает ее клетки. Помогает очистить кишечный тракт, средство удаления накопившихся токсических веществ. Оказывает разрушительное действие на атеросклеротические бляшки артерий, что увеличивает их внутренний просвет. Благодаря этому эффекту улучшается питание органов и тканей, снижается риск инфаркта миокарда и инфаркта миокарда. Липокарнит снижает уровень холестерина и уровень сахара в крови. Биокомплекс повышает активность клеток мозговой ткани, ускоряет проведение нервных импульсов, улучшает память и общее самочувствие. Биоактивная добавка ускоряет клеточный метаболизм за счет истончения подкожного жира. В дополнение к этим эффектам липокарнит способен нормализовать гормональный фон организма человека. Препарат устраняет нарушение функции щитовидной железы. Многие женщины с историей гипотиреоза заметили улучшение своего общего состояния, укрепление ногтей, волос, нормализацию менструального цикла и отсутствие ночного пота при приеме Липокарнита. Состав и характеристика фармацевтического препарата Биокомплекс содержит три активных элемента. К ним относятся: липоевая кислота; L-корнитин; пиколинат хрома Основные эффекты биологических компонентов активной добавки компоненты Воздействие на организм ускоряет обмен веществ в клетках; подавляет всасывание обычных углеводов; разрушает жировые клетки, направляет энергию, выделяемую для восстановления силы тела; оказывает омолаживающее действие на кожу. облагораживает познавательные способности человека; стимулирует физическую активность пациента; снимает синдром приобретенной усталости; Способ введения энергии от расщепления жиров в конструкцию молекул белкового соединения ускоряет рост мышц. удаляет токсичные соединения, свободные радикалы, способ их абсорбции в кишечнике; снижает уровень сахара в крови; восстанавливает клетки мышечной и костной ткани. В совокупности эти три вещества выполняют регенеративную функцию для всех тканей организма. Примечание о введении биоактивных добавок Фармацевтический препарат следует употреблять потребителям с ожирением и избыточным весом по 1-2 капсулы 2 раза в день во время еды утром и вечером, запивая большим количеством воды. Вступительный курс составляет 1 месяц. Если результат не был достигнут, потребление Lipocarnitum может быть продолжено после 2-месячного перерыва. Перед введением препарата проконсультируйтесь с врачом. Не принимайте биологический комплекс самостоятельно. Где я могу найти Липокарнит Товар эксклюзивный, аналогов не имеет. В аптеке пт нет. Липокарнит можно приобрести только на нашем официальном сайте. Сейчас идет акция: фармацевтический продукт можно получить со скидкой 50% для всех посетителей. Рекламная продукция ограничена (осталось 60 упаковок). Поставщик имеет все необходимые лицензии и сертификаты для внедрения продукта. Посетите сайт производителя, закажите отличный продукт для похудения. Чтобы не покупать поддельный фармацевтический продукт, не покупайте биокомплекс в магазинах и других местах. Каждый пакет имеет свой уникальный код безопасности. Он может быть размещен на сайте производителя для проверки подлинности лечебного средства. Сколько стоит диетический продукт Общая стоимость липокарнита - 1980 руб. Цена лечебного средства со скидкой 50% составляет 990 рублей. Количество товара ограничено. Возьми комплекс по хорошей цене, сожги лишние килограммы, наслаждайся своей безупречной фигурой. Мы стараемся сделать все, чтобы вы не спали и были красивыми.
AshleyDuh прокомментировал "Урок 3 - Конструкция IF...THEN...ELSE":
[img]https://kapsuly-lipocarnit.ru/files/lipocarnit_1/img/product-head1.png[/img] [url=https://kapsuly-lipocarnit.ru/][img]https://karga.info/wp-content/uploads/2019/02/orig.jpg[/img][/url] Липокарнит в Казани Аптека 24 г. [url=https://kapsuly-lipocarnit.ru/]липокарнит для похудения[/url] - Казань, ул. Энергетиков, 3, 7 (843) 205–57–99 Таттехмедфарм г. Казань, ул. Охранники, 31/42, 7 (843) 222–00–03 Сакура, аптека № 1 г. Казань, ул. Адоратского, 1а, 7 (843) 527–61–72 Приусадебный участок г. Казань, ул. Ричард Зорге, 57, 7 (843) 204–05–60 Вита Казань, ул. Декабристы, 131, 7 (843) 239–15–20 Аккуратная аптека Казань, Сибирский тракт, 22, 7 (843) 279–50–35 Последняя покупка: просто Сейчас 99 человек смотрят этот продукт Последняя покупка: просто Сейчас 99 человек смотрят этот продукт Приготовление натуральных ингредиентов Это не лекарство и пищевая добавка Доставка : от 99 руб. укажите оператор Платеж : наличные / карта при получении Липокарнит - правильный курс для естественной потери веса до 10 кг на курс Для 90% людей с великолепными формами похудение сравнимо с изощренными пытками инквизиции. Отказ от любимых блюд, строгий контроль аппетита, ежедневные изнурительные нагрузки и постоянное нервное напряжение до следующего взвешивания. До недавнего времени через него проходили все, кто осмелился избавиться от лишнего веса в виде жира на боку, животе, бедрах и других частях тела. Но такие методы помогают только 40% людей с избыточным весом, потому что очень часто причиной его набора является не недостаточная активность или переедание, а замедление метаболических процессов. Чтобы стать победителем в борьбе за гармонию, диетологи рекомендуют покупать Липокарнит - в Казани нет других средств для похудения, которые могут деликатно и безопасно разгонять обменные процессы и сжигать жировые отложения без потери здоровья. Что такое Липокарнит, состав продукта Препарат Липокарнит - это 100% органический продукт, состоящий из активных аминокислот, способствующих расщеплению жировых клеток. Выпускается в виде желатиновых капсул, внутри которых находится белый порошок. Их удобно принимать, а активные вещества всасываются в кишечнике, отвечают за всасывание органических аминокислот. Благодаря этому активные ингредиенты полностью усваиваются. В состав препарата входит: Липоевая кислота - это органическое вещество, участвующее в переработке глюкозы и других сахаров. При ее участии утилизируются метаболиты, потенциально опасные для клеток печени, а жировые ткани превращаются в энергию и воду.Липоевая кислота показана для использования профессиональными спортсменами для улучшения метаболических процессов и поддержания физической формы. Пиколинат хрома - органическое производное триптофана, способствует образованию мышечной массы и расщеплению жира. Полезным свойством соединения при похудении является ослабление аппетита. [img]https://kapsuly-lipocarnit.ru/files/lipocarnit_1/img/review-3.jpg[/img] L-карнитин - это органическая аминокислота, которая превращает жировую ткань в энергию и воду. Дополнительным полезным свойством этого вещества является снижение уровня холестерина в крови. Аминокислота подавляет всасывание жиров в кишечнике. Средство оказывает комплексное воздействие на организм: помогает уменьшить количество жира в организме и предотвращает его повторное накопление. Как работает [url=https://kapsuly-lipocarnit.ru/]липокарнит в аптеках казани[/url] Действие препарата сильно отличается от других препаратов для похудения. Препарат не создает чувства сытости, не изменяет процесс пищеварения, но в то же время помогает избавиться от жировых отложений. Это стало возможным благодаря уникальной способности Lipocarnitum перепрограммировать обмен энергии и обмен веществ в организме. Активные вещества сами по себе не влияют на жировые клетки. Они заставляют организм активизировать свои собственные ресурсы. Результат: разрушение мембран жировых клеток; Расщепление жира - энергия и вода высвобождаются; Энергия, получаемая от сжигания жира, направляется в жизненно важные органы. Эта короткая схема содержит естественный процесс, представленный природой, но по какой-то причине нарушенный. Возвращение в состояние, естественное для здорового организма, не проходит бесследно. На фоне снижения веса нормализуются артериальное давление, уровень глюкозы в крови и холестерина. Общее состояние организма улучшается, энергия увеличивается. При использовании Липокарнита нет необходимости менять привычки питания. Тренировки в тренажерном зале также необязательны. После недели приема препарата прилив энергии будет таким, что сам организм потребует повышенной активности. С курсом приема препарат не вызывает привыкания. Тело, настроившись на режим, необходимый для похудения, продолжает бороться с лишним весом самостоятельно. Эффект длится 60 дней. Как взять Несмотря на то, что Липокарнит не продается в аптеке в Казани, применение препарата следует проводить строго по инструкции. Нарушение описанных в нем правил потенциально опасно для здоровья. Липокарнит на завтрак и ужин принимайте по 1 или 2 капсуле в зависимости от исходного веса. Курс похудения длится 30 дней. За это время наблюдается потеря веса не менее 2 кг (при небольшом лишнем весе). У тучных людей с высокой степенью ожирения потеря веса достигает до 20 кг в месяц. При необходимости дальнейшего похудения курс повторяют через 60 дней, когда предыдущий теряет силу. Побочные эффекты и противопоказания При использовании в соответствии с инструкцией побочные эффекты после приема Липокарнита не возникают. Ему также не хватает серьезных противопоказаний. Препарат подходит для похудения у диабетиков и тех, кто испытал гормональные изменения. Единственная категория людей, которым противопоказано применение препарата - это беременные и кормящие женщины. В редких случаях после применения капсул индивидуальные реакции непереносимости возникают в виде: дискомфорт в кишечнике; сыпь на коже; n; [img]https://kapsuly-lipocarnit.ru/files/lipocarnit_1/img/review-2.jpg[/img] заложенность носа. При появлении симптоматических препаратов, назначенных лечащим врачом, это поможет. Купить Липокарнит Не рекомендуется приобретать капсулы для похудения данной марки в магазинах товаров для здоровья. Производитель не поставляет препарат в розничные сети. Вы можете заказать его только у официальных представителей в интернете.Это позволило гарантировать, что цена на Липокарнит в Казани соответствует заявленной производителем, поскольку нет торговых наценок. Кроме того, при покупке у дистрибьюторов, к которым относится Аптека-5, предоставляется 100% гарантия качества и подлинности товара. В Аптеке-5 вы можете заказать Липокарнит со скидкой, пока действует акция. Постоянным клиентам предоставляются дополнительные бонусы. Вы можете совершить покупку через корзину без регистрации или заказав обратный звонок менеджера. Инструкция по применению Прием препарата Липокарнит рекомендуется в течение 30 дней. Пить по 1 или 2 капсулы в день на завтрак и ужин. При необходимости курс повторяют через 2 месяца после окончания предыдущего.

Программирование математических приложений

Введение

В данной статье рассматриваются основные аспекты программирования пользовательских математических приложений. Будут описаны общие принципы и приближенный алгоритм действий по распознаванию формулы, построению 3D графиков и нахождению производной формулы. Прежде, чем вы начнете читать статью, посмотрите программу Математика v0.5 (автор программы Дьяченко Евгений), чтобы иметь представление как все должно выглядеть. Статья состоит из трех самостоятельных частей, которые можно читать в отдельности друг от друга.

1. Распознавание формулы из строки

Главная проблема, которая встает перед программистом, это написать программу так, чтобы для каждой новой формулы не приходилось ее перекомпилировать. Программа должна считывать формулу из какой-либо строки (например, form1.edit1.text) и затем ее обрабатывать. Для того, что бы рассчитывать строку необходимо также иметь массив значений переменных величин, которые будут использоваться в процессе распознавания. При записи формулы пользователь должен иметь возможность использовать стандартные математические функции Delphi, с их стандартными обозначениями. Формула может состоять из любых комбинаций функций и арифметических действий, включая вложенные функции, если это позволяют законы математики.

Итак, опишем процесс распознавания. Вначале, в целях повышения быстродействия программы, необходимо укоротить строку. Для этого заменим все стандартные обозначения математических функций, другими обозначениями, состоящими из одного символа (например, cos на С, sin на S). Важно проследить, чтобы обозначения не дублировались. Также можно вырезать из строки все пробелы.

Следующим шагом будет поиск в строке переменных и замена переменных их значениями, которые берутся из вышеописанного массива значений переменных. Для этого вырезаем из строки название переменной и вставляем значение переменной, которое с помощью функции floattostr превратили в строку. Функция floattostr превращает число в строку, при этом в получившейся строке, число имеет очень много знаков, что замедляет процесс распознавания, т.к. увеличивает длину исходной строки. Чтобы этого избежать, можно использовать вместо floattostr функцию floattostrf, которая имеет дополнительные параметры для управления процессом преобразования числа в строку. Подробнее о функции читайте в хелпе Delphi.

Теперь нам необходимо в строке с формулой найти самую глубокую вложенную функцию. Оказывается, это легко осуществить, если проссматривать строку с конца циклом

	for i:=length(stroka) downto 1 do …
Первая попавшаяся функция и будет самой глубокой. Берем аргумент (он может содержать арифметические действия) этой функции и рассчитываем его специальной подпрограммой, которая рассчитывает формулы, не содержащие математических функций. Данная подпрограмма будет описана ниже. Вставляем вместо сложного аргумента нашей функции значение (число) этого аргумента. Сразу после этого заменяем функцию ее значением. Т.е. с помощью оператора
	case of
	
сравниваем название нашей функции с названиями всех известных математических функций, и, если есть совпадение названий, с помощью стандартной подпрограммы strtofloat переводим аргумент функции в число, рассчитываем соответствующую функцию от этого аргумента и заменяем обозначение функции в исходной строке ее значением. Далее продолжаем проссматривать строку все тем же циклом, при этом все функции будут автоматически правильно заменяться их значениями. В конце останется строка, не содержащая ни одной математической функции. Рассчитаем эту строку подпрограммой, которая упоминалась выше и будет описана в следующем абзаце.

Итак, нам необходима подпрограмма, которая заменяет строку, содержащую арифметические действия и приоритетные скобки, на результат расчета этой строки.

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

Теперь рассмотрим случай, когда в строке есть приоритетные скобки. Программа должна последовательно находить самые глубокие скобки и производить над ними то, что было описано абзацом выше. Этот алгоритм легче представить кодом:
	s1:='';
	for i:=length(a) downto 1 do //просматривает строку а с конца
	begin
	 if a[i]=')' then ni:=i; //запоминает положение последней )
	 if a[i]='(' then //если встречает (, значит это и есть самая глубокая ( )
	  begin
	   for j:=i+1 to ni-1 do s1:=s1+a[j];
	   delete(a,i,2+length(s1)); //удаляет исходную скобку…
	   insert(rasstr(s1),a,i); //… и вставляет вместо нее значение скобки
	   //возвращается выше на скобку и продолжает далее цикл
	   for j:=i to length(a) do 
	     if a[j]=')' then begin ni:=j; break; end;
	   s1:='';
	  end;
	end;
	a:=rasstr(a); //расчет конечного результата
	
Здесь rassrt – подпрограмма для решения строчек, в которых нет приоритетных скобок (только арифметические действия).

Последний раз rasstr применяется для решения конечной строки, из которой мы убрали все приоритетные скобки. Переводим строку в число, и получаем значение исходной строки с формулой, т.е. результат. Хочу предупредить о возможных проблемах:

1. При умножении чисел часто возникает ситуация, когда второй множитель отрицательный – программа не должна путать его со знаком вычитания. Необходимо переносить минус в начало члена, т.е. изменять знак перед членом.

2. Числа в компьютере могут представляться в экспонентальном виде (например, 1Е-5, что равно 0.00001). Может возникнуть проблема с минусом в показателе. Необходимо или особо описать эту ситуацию в программе, или использовать для преобразования чисел в строку функцию FloatToStrF (о функции смотрите в справочнике Delphi). Первый путь предпочтительнее, так как он будет быстрее работать (в большинстве случаев).

3. В Delphi нет функции возведения произвольного числа в произвольную степень. Это решается следующим образом: a^b=exp(ln(a)*b).

2. Построение трехмерных графиков

Необходимо отметить, что графики в приведенном алгоритме рисуются стандартными процедурами LineTo и MoveTo, т.е. данный алгоритм вы можете реализовать в программе, не используя стандартные процедуры Delphi по работе с трехмерным пространством.

Прежде всего, опишу, как можно представить трехмерные графики в памяти компьютера. Допустим, нам надо построить какой-либо трехмерный график на диапазоне по Ox и Oy от -10 до 10 с точностью в 100 шагов на этом диапазоне. Возьмем двухмерный массив
	array [1..100,1..100] of real;
	
Обозначим первую координату массива за переменную х, второю за y, значение ячейки [x,y] будет значением переменной z. Разделим диапазон на 100 шагов, для каждого шага будем рассчитывать z=f(x,y), и заносить значение z в ячейку массива [<номер шага по х>,<номер шага по y>]. Т.е. двумя циклами (второй цикл вложенный) просматриваем все комбинации переменных x и y с определенным шагом, и для каждой комбинации заполняем соответствующую ячейку массива. Для вращения графика используется изменение трех переменных: alf – поворот вокруг оси Oz, bet – поворот вокруг оси Oy, gam – поворот вокруг оси Ox. При вращении графика наш массив, содержащий график остается неизменным, мы просто под другими углами проецируем его на поверхность экрана.

Переменные alf, bet, gam изменяются при нажатии на поле рисования и передвижения мыши. Это происходит следующим образом:
	procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
	 Shift: TShiftState; X, Y: Integer);
	begin 
	 md:=true; xa:=x; ya:=y; 
	end;

	procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
	 Shift: TShiftState; X, Y: Integer);
	begin 
	 md:=false; xa:=x; ya:=y; 
	end;

	procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
	 Y: Integer);
	begin
	 if md then 
	 begin 
	  alf:=alf-(x-xa)*2*pi/300; //число 300 означает, на сколько пикселей надо
	  bet:=bet-(y-ya)*2*pi/300; //передвинуть мышь для поворота графика на 360 градусов
	  xa:=x; ya:=y;
	  risovanie; // процедура для перерисовки графика, с новыми значениями углов.
	 end;
	end;
	
В процедуре, которую мы назвали risovanie, строятся линии специальными подпрограммами LineToXYX и MoveToXYZ, которые будут описаны ниже. Для этого двумя циклами (второй вложенный) просматриваются все ячейки массива и аргументам функций LineToXYX и MoveToXYZ присваиваются значения (<начало диапазона х>+<длина диапазона х>*<номер текущего шага по х>/<количество шагов по х>, <тоже самое по у>, <значение массива в точке [<шаг по х>, <шаг по у>]>). Сначала строится одна половина решетки, потом другая. Это делается двумя последовательными циклами.

Создадим две процедуры MoveToXYZ и LineToXYZ для проецирования линий из трехмерного пространства на поверхность экрана.
	procedure LineToXYZ(x,y,z:real);
	begin
	 form1.image1.canvas.lineto(trunc(((y*cos(alf)-x*sin(alf))*cos(gam)+(z*cos(bet)
	  +(x*cos(alf)+y*sin(alf))*sin(bet))*sin(gam))*zum+form1.image1.Width/2),
	  trunc(-((z*cos(bet)+(x*cos(alf)+y*sin(alf))*sin(bet))*cos(gam)-(y*cos(alf)-
	  x*sin(alf))*sin(gam))*zum+form1.Image1.Height/2));
	end;

	procedure MoveToXYZ(x,y,z:real);
	begin
	 form1.image1.canvas.moveto(trunc(((y*cos(alf)-x*sin(alf))*cos(gam)+(z*cos(bet)
	  +(x*cos(alf)+y*sin(alf))*sin(bet))*sin(gam))*zum+form1.image1.Width/2),
	  trunc (-((z*cos(bet)+(x*cos(alf)+y*sin(alf))*sin(bet))*cos(gam)-(y*cos(alf)-
	  x*sin(alf))*sin(gam))*zum+form1.Image1.Height/2));
	end;
	
Переменные alf, bet, gam - глобальные, zum – переменная, которая определяет коэффициент увеличения графика, тоже глобальная. Trunc – стандартная функция, возвращает значение целой части аргумента и имеет значение типа Integer. График рисуется относительно центра поля рисования.

Хочу отметить, что поворот вокруг оси Ox не добавляет наглядности графику. Если его исключить, формула сократиться вдвое, следовательно, повыситься скорость работы. Вот как выглядят сокращенные процедуры:
	procedure LineToXYZ(x,y,z:real);
	begin
	 form1.image1.canvas.lineto(trunc((y*cos(alf)-x*sin(alf))*zum+form1.Image1.width/2),
	  trunc(-(z*cos(bet)+(x*cos(alf)+y*sin(alf))*sin(bet))*zum+form1.image1.height/2));
	end;

	procedure MoveToXYZ(x,y,z:real);
	begin
	 form1.image1.canvas.moveto(trunc((y*cos(alf)-x*sin(alf))*zum+form1.Image1.width/2),
	  trunc(-(z*cos(bet)+(x*cos(alf)+y*sin(alf))*sin(bet))*zum+form1.image1.height/2));
	end;
3. Нахождение производной аналитическим методом

Эта задача не очень сложная (впрочем, как и все остальные), но достаточно трудоемкая. Приведу словесный алгоритм выполнения этой операции.

1. Замена стандартных обозначений функций их краткими служебными названиями для ускорения работы программы.
2. Повторять замену производных суммы (разности) и произведения (частного) по соответствующим формулам, пока не останется ни одной производной суммы (разности) и произведения (частного). При этом каждый раз необходимо раскрывать скобки.
3. Замена всех производных их табличными значениями.
4. Повторять пункты 2 и 3, пока не останется ни одной производной.
5. Упростить полученное выражение: выкинуть из произведения все единицы, выкинуть все члены, в которых встречаются нули и т.п.
После каждой замены необходимо производить раскрытие скобок, без этого программа не будет работать. Код, который демонстрирует словесный алгоритм:
	function proizvod(a:string):string; //общая производная
	var a:string;
	begin
	 repeat
	   repeat
	     zamen:=false;
	     a:=psum(a); //производная суммы и разности
	     a:=pproi(a); //производная поизведения и частного
	   until zamen=false;
	  a:=ptab(a); //производная табличных величин
	 until zamen=false;
	 a:=pupro(a); //упрощение внешнего вида формулы
	 proizvod:=a;
	end;
	
Переменной zamen (типа Boolean) после любой замены, произошедшей в формуле, присваивается значение true.

Для замены производной суммы, разности, произведения и частного подпрограммы очень похожи, поэтому я объединю их описание. В строке производится поиск всех производных. Как только находиться какая-нибудь производная, она проверяется на наличие внутри символов арифметических действий. Если они есть, то производная раскладывается по соответствующей формуле, и переменной zamen, о которой говорилось выше, присваивается значение true. Далее продолжается поиск в строке других производных. По завершению поиска необходимо произвести раскрытие приоритетных скобок. Алгоритм будет быстрее работать, начать поиск в строке с конца. При каждой замене строка удлиняется, если производить поиск с конца, программа не будет заново просматривать то, что она только что вставила в строку.

Замена производных табличных величин происходит аналогично. Это сделать очень легко, т.к. известно, что в производных нет знаков арифметических действий.

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

Заключение В заключении, хочу отметить, что приведенный алгоритм является не совсем полным. Он будет работать с определенными ограничениями. Для того, что бы программа умела работать с абсолютно любыми формулами, необходимо решить огромное количество мелких и достаточно простых проблем, их можно назвать предельными случаями, которые требуют отдельного описания в программе. Основные проблемы возникают со знаком минуса и раскрытием скобок. В процессе написания программы эти проблемы быстро решаются, если их обнаружить, что не всегда легко. Поэтому, советую использовать систему автоматического тестирования программы на выполнение математических операций (функций, действий, историй). Тесты должны запускаться после каждого изменения в программе. В них необходимо описать общие случаи и предельные, для которых заранее известен результат.

Вот и всё, Удачи!

Источник: www.thedelphi.ru
Автор: Савельев Александр
Опубликовано: 15 Марта 2015
Просмотров:


Зарегистрируйтесь или авторизуйтесь, чтобы добавлять комментарии.