Для примера рассмотрим пример заполнения матрицы-вектора в автоматическом режиме. Предположим, что нам нужно заполнить матрицу случайными числами. Размер матрицы 10 элементов. Заполнение в ручную такой матрицы безусловно отнимет массу времени
В свободном поле mathcad введите имя вашей будущей матрицы M. Поставте знак присвоить «: ]». В место привычного маркера возникнет вертикальная черная черта с двумя маркерами. Удерживая клавишу Alt введите еще несколько раз символ «]» так, чтобы увеличить число свободных маркеров. Можно также воспользоваться кнопкой «Add Line» на панели Programming. В этих маркерах записываются строки кода
Рис. 1. Подготовка к написанию кода
Поместите курсор в первый маркер и на панели Programming нажмите кнопку с надписью «for». Вы увидите заготовку для формирования цикла FOR с маркером для ввода «тела цикла», который несколько отстоит от основных маркеров
Рис. 2. Запись безусловного цикла FOR
Написание скриптов в MathCAD
Теперь нужно ввести переменную-счетчик (пусть это будет «i»), которая будет менять свое значение от 1 до 10. Диапазон от 1 до 10 задается с помощью ранжированной переменной, которую можно найти на панели Matrix
Рис. 3. Настройка параметров цикла for в mathcad 15
Цикл for в этом примере будет перебирать значения счетчика i от 1 до 10 c шагом 1. При каждом значении i элементу матрицы с соответсвующим индексом будет присваиваться случайное число с помощью стандартной функции rnd(m). Функция rnd присваивает переменной значение в диапазоне от 0 до «m»
Операция присваивания осуществляется при помощи операции Local difinition с панели Programming. Опрерация присваивания отображена в виде стрелочки «. Чтобы присвоить какое либо значение элементу матрицы нужно указать соответсвующий индекс матрицы. Это делается с помощью кнопки Subscript на панели Matrix.
Операция присваиваивания должна осуществляться в «теле цикла». То есть, все действия, которые должны повторяться по мере работы счетчика циклы, должны находиться в соответсвующих маркерах. После завершения работы цикла в последний маркер тела программы нужно ввести имя матрицы, над заполнением которой мы работали. В нашем случае это M. См. рисунок 4
Рис. 4. Синтаксис программы по заполнению матрицы-вектора случайными числами в mathcad 15
Теперь можно посмотреть на результат. Введем имя матрицы M и поставим знак равно » clear: both»>
Рис. 5. Результат работы программы в mathcad 15
Можно изменить программу таким образом, чтобы заполнить квадратную матрицу. Для этого нам нужно ввести еще один счетчик и еще один цикл for с индексом j. Таким образом один цикл будет выполняться внутри другого, формируя столбцы и строки матрицы
Рис. 6. Программа для заполнения квадратной матрицы в mathcad 15
Программы в mathcad могут использовать значения переменных, находящихся вне тела программы. Например, на рисунке ниже видно, как можно конечные значения счетчиков цикла связать со значениями переменных из вне
Анимация в MathCad
Рис. 7. Программа для заполнения квадратной матрицы в mathcad 15
Условные операторы «IF» в mathcad 15
Чтобы посмотреть, как работает условный оператор «if» в mathcad 15 рассмотрим простой пример. Заполним квадратную матрицу G размером 5 х 5 элементов случайными числами и затем обнулим все элементы, которые меньше 10
На рисунке 8 приведен уже знакомый код заполнения матрицы случайными числами
Рис. 8. Программа для заполнения квадратной матрицы случайными числами
Для обнуления элементов, значение которых меньше 10, запишем второй участок кода с использованием условного оператора «If». Для проверки каждого элемента на выполнение этого условия нам опять потребуется два вложенных цикла «for» с счетчиками i и j. См. рис. 9. Обратите внимание, в теле второго цикла оставлено два свободных маркера
Рис. 9. Заготовка для применения условного оператора
Результат работы программы для удобства будет записываться в матрицу P. Поместите курсор в первый свободный маркер и нажмите на кнопку с надписью «if» на панели Programming. Вы увидите заготовку для записи условного оператора
Рис. 10. Заготовка для условного оператора
В этой заготовке выполним обнуление элемента матрицы G если значение этого элемента менее 10. Присвоение элементу матрицы значение нуля осуществляется символом » . Буквально логика данной операции следующая: «присвоить элементу матрицы P с текущим индексом i и j значение 0 если елемент матрицы G с тем же индексом меньше 10»
Рис. 11. Ввод условного оператора в mathcad 15
Теперь запишем второе условие, по которому все элементы матрицы G, которые больше либо равны 10 попадают в матрицу P без изменеий на те же «мееста». Буквально логика данной операции следующая: «присвоить элементу матрицы P с текущим индексом i и j значение елемента матрицы G с тем же индексом если значение элемента больше либо равно 10». Сразу же после текста программы можно вывести результат. См. рис. 12.
Рис. 12. Ввод условного оператора в mathcad 15
Теперь можно наглядно увидеть, как изменилась матрица после ее обработки условными операторами
Рис. 13. Результат работы условного оператора
Цикл «WHILE» в mathcad 15
Цикл While является условным циклом. То есть повторение его тела осуществляется до тех пор пока верно условие.
Рассмотрим простой пример заполнения матрицы-столбца с использованием цикла while. В качестве условия работы цикла будем проверять верно ли равенство m
Рис. 14. Цикл WHILE в mathcad
В теле цикла могут находиться абсолютно любые команды и операторы: арифметические вычисления, открытие, анализ, обработка и запись данных в файл, запуск скриптов и приложений и т.д. Одним словом программирование это очень полезный и весьма универсальный инструмент, который позволяет реализовать любую идею в инженерной деятельности
Обратите внимание на то, что если в процессе выполнения программы условие запуска цикла «while» всегда оказывается верным, то цикл не завершится. Произойдет так называемое «зацикливание» программы и придется прерывать процесс счета вручную и искать ошибку
Donec eget ex magna. Interdum et malesuada fames ac ante ipsum primis in faucibus. Pellentesque venenatis dolor imperdiet dolor mattis sagittis. Praesent rutrum sem diam, vitae egestas enim auctor sit amet. Pellentesque leo mauris, consectetur id ipsum sit amet, fergiat. Pellentesque in mi eu massa lacinia malesuada et a elit. Donec urna ex, lacinia in purus ac, pretium pulvinar mauris.
Curabitur sapien risus, commodo eget turpis at, elementum convallis elit. Pellentesque enim turpis, hendrerit tristique.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis dapibus rutrum facilisis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Etiam tristique libero eu nibh porttitor fermentum. Nullam venenatis erat id vehicula viverra. Nunc ultrices eros ut ultricies condimentum. Mauris risus lacus, blandit sit amet venenatis non, bibendum vitae dolor. Nunc lorem mauris, fringilla in aliquam at, euismod in lectus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.
In non lorem sit amet elit placerat maximus. Pellentesque aliquam maximus risus, vel venenatis mauris vehicula hendrerit.
Interdum et malesuada fames ac ante ipsum primis in faucibus. Pellentesque venenatis dolor imperdiet dolor mattis sagittis. Praesent rutrum sem diam, vitae egestas enim auctor sit amet. Pellentesque leo mauris, consectetur id ipsum sit amet, fersapien risus, commodo eget turpis at, elementum convallis elit. Pellentesque enim turpis, hendrerit tristique lorem ipsum dolor.
Условные операторы (if, otherwise)
Лекция 6. Программирование в Mathcad
Для вставки программного кода в документы MathCAD имеется специальная панель инструментов Программирование. Большинство кнопок
этой панели выполнено в виде текстового представления операторов программирования, поэтому их смысл легко понятен.
Программирование имеет ряд преимуществ:
• возможность применения циклов и условных операторов;
• простота создания функций и переменных, требующих нескольких простых шагов;
• возможность создания функций, содержащих закрытый для остального документа код, включая преимущества использования локальных переменных и обработку ошибок.
Программный модуль обозначается в MathCAD вертикальной чертой, справа от которой последовательно записываются операторы языка программирования.
Чтобы создать программный модуль, надо:
1. ввести часть выражения, которая будет находиться слева от знака присваивания и сам знак присваивания, например, f(x).
2. нажать на панели Программирование кнопку Add Line (добавить строку программирования), если приблизительно известно, сколько строк будет содержать программа, можно многократным нажатием на эту кнопку ввести соответствующее количество строк. Вставить строку программного кода можно в любой момент с помощью той же кнопки Add Line.
3. в появившиеся местозаполнители ввести желаемый программный код, используя программные операторы.
После того как программный модуль полностью определен и ни один местозаполнитель не остался пустым, функция может использоваться обычным образом, как в численных, так и в символьных расчетах.
Имена программных операторов нельзя вводить с клавиатуры. Для их вставки можно применять панель инструментов или сочетания клавиш, которые приведены в тексте всплывающей подсказки.
Таким образом, программа MathCAD есть выражение, состоящее из последовательности операторов, каждый из которых является, в свою очередь, выражением.
Язык программирования не был бы эффективным, если бы не позволял создавать внутри программных модулей локальные переменные. Присваивание в пределах программ, в отличие от документов MathCAD, производится с помощью оператора Локальное присваивание (Local Definition), который вставляется с помощью кнопки с изображением стрелки«←». Ни оператор присваивания :=, ни оператор ввода = в пределах программы не применяются.
Пример 1. вычислить значение f(x), заданное выражением f(x):=z+5
Условные операторы (if, otherwise)
Действие условного оператора if состоит из двух частей. Сначала проверяется логическое выражение (условие) справа от него. Если оно истинно, выполняется выражение слева от оператора if. Если ложно, выполнение программы продолжается переходом к ее следующей строке.
Вставить условный оператор можно следующим образом:
• создайте новую строку программного кода, нажав кнопку Add Line,
• нажмите кнопку if и справа от него введите условие (панель Булевы),
• выражение, которое должно выполняться, если условие истинно, введите слева от оператора if,
Оператор otherwise используется совместно с одним или несколькими условными операторами if и указывает на выражение, которое будет выполнено, если ни одно из условий не оказалось истинным.
Рассмотрим использование оператора if для задания кусочно-гладкой функции.
Можно определить функцию непосредственно, при помощи встроенной функции if:
но это определение хотя и более краткое, но менее наглядное.
Эквивалентное, но намного более сложное, определение этой же функции:
Система уравнений с if в маткад
Кусочно-непрерывные функции полезны для управления ветвлениями и остановками вычислительных процессов. Имеются пять функций Mathcad, относящихся к этому классу. Функция if полезна для выбора одного из двух значений, определяемого условием. Ступенчатая функция Хэвисайда и символ Кронекера d (m, n) во многом аналогичны функции if.
Функция until используется, чтобы управлять процессом итераций. Это единственая из функций Mathcad, специально предназначенная для работы только с дискретным аргументом, она может остановить итерации при достижении некоторого заданного условия.
В Mathcad PLUS можно использовать возможности программирования для выполнения логических ветвлений и циклов в вычислениях. См. описание возможностей программирования Mathcad в Главе «Программирование».
Последняя функция — e , полностью антисимметричный тензор. Она возвращает 0, 1 или -1 в зависимости от перестановки аргументов. Хотя эта функция имеет ограниченную применимость, было бы трудно заменить её, используя комбинацию любых других функций Mathcad.
Функция if используется для определения функции, которая ведет себя по-разному слева и справа от некоторой точки. Эта точка разрыва определяется первым аргументом, cond. Другие два аргумента позволяют определить поведение функции по обе стороны от точки разрыва.
if (cond, tval, fval) | Возвращает значение tval, если cond отличен от 0 (истина) Возвращает значение fval, если cond равен 0 (ложь). |
Хотя аргумент cond может быть любым выражением, обычно удобнее использовать какое-либо булево выражение из таблицы, приведенной ниже. В этой таблице через x и y обозначены вещественные скаляры, а через w и z — комплексные скаляры.
Условие | Как ввести | Описание |
w = z | [Ctrl]= | Булево равенство возвращает 1, если операнды равны; иначе 0 |
x > y | > | Больше чем. |
x |
Обратите внимание, что булевы выражения, включая неравенства, не могут использоваться с комплексными числами, поскольку бессмысленно говорить относительно одного комплексного числа, что оно является большим или меньшим, чем другое.
Чтобы сохранить время, Mathcad вычисляет только те выражения, которые необходимо. Например, если cond есть ложь, нет нужды вычислять tval, так как его значение не будет возвращено. Из-за этого ошибки в невычисляемом выражении могут выпасть из поля зрения. Например, Mathcad никогда не обнаружит, что в выражении ниже ln(0) не определён:
if(|x| 0)
действует подобно логическому “и”, возвращающему 1, только если x заключено между 0 и 1. Аналогично, выражение
(x > 1)+(x 1, или x
until (x, z) | Возвращает z, пока выражение x не становится отрицательным; x должно содержать дискретный аргумент. |
Не используйте функции until в формулах с несколькими дискретными аргументами (например, в кратных суммах). Mathcad будет останавливать все вычисления по всем дискретным аргументам, как только первый аргумент until станет отрицателен. Это обычно не дает желаемого результата.
Рисунок 6: Использование функции until для остановки вычислений.
Функция until полезна в итерационных процессах с определенным условием сходимости. Например, Рисунок 6 показывает, как использовать функцию until, чтобы проверить итерационный процесс на сходимость. Вычисления по формуле для продолжаются, пока не попадет внутрь интервала полуширины err с центром в точке a.
Рисунок 6 также показывает, как использовать функцию last, чтобы обнаружить, когда вычисления были остановлены, и вычислить размер возникающего в результате массива. При использовании функции until убедитесь, что значение первого аргумента изменяется где-нибудь в процессе итерации. Иначе можно оказаться в бесконечном цикле. Если это случится, нажмите [Esc], чтобы прервать вычисления.
Импульсные и ступенчатые функции
Эти две функции используют функцию if. Cтупенчатая функция Хэвисайда эквивалентна следующей:
F (x) := if(x
Ф(x) | Cтупенчатая функция Хэвисайда. Возвращает 1, если x 0; иначе 0. |
d (m, n) | Символ Кронекера. Возвращает 1, если m=n; иначе 0. Оба аргумента должны быть целочисленными. |
Ступенчатая функция Хэвисайда может быть использована для создания импульса шириной w:
Можно определить также две полезные функции lowpass и highpass. Они обе являются фильтрами — умножение на них какого-либо сигнала вырезает из этого сигнала кусок вокруг точки x, имеющий ширину 2w. Разница состоит в том, что lowpass оставляет только вырезанный кусок, highpass — всё, кроме вырезанного куска.
lowpass(x,w):= pulse(x+w,2*w)
highpass(x,w):= 1 — pulse(x+w,2*w)
Рисунок 7 иллюстрирует использование ступенчатой функции Хэвисайда для создания фильтров.
Рисунок 7: Использование ступенчатой функции Хэвисайда для фильтрации.
e — функция
Аргументы этой функции — три целых числа между 0 и 2 включительно. Она определяет, сколько раз необходимо сделать перестановку двух аргументов, чтобы вернуться к последовательности [0, 1, 2] из той последовательности [i, j, k], которая передана ей в качестве аргументов.
Конкретно: e (i, j, k) = 1, если [i, j, k]— четная перестановка [0, 1, 2], и e (i, j, k) = -1, если [i, j, k]- нечетная перестановка . Это объясняет, почему e (0, 1, 2) = 1.
Например, e (2, 0, 1) = 1, поскольку, чтобы перейти из [2, 0, 1] обратно к [0, 1, 2], требуется дважды менять аргументы местами. С другой стороны, e (0, 2, 1) = -1, поскольку чтобы перейти из [0, 2, 1] обратно к [0, 1, 2], необходимо менять аргументы местами один раз. Если два аргумента одинаковы, например e (0, 1, 1), нельзя вернуться к [0, 1, 2], поэтому функция возвращает 0.
Хотя эта функция используется не очень часто, она незаменима, когда нужно посчитать перестановки. Очень трудно выполнить эту замысловатую операцию, используя комбинации любых других функций Mathcad.
e (i, j, k) | Полностью антисимметричный тензор ранга 3. i, j и k должны быть целыми числами между 0 и 2 включительно (или между ORIGIN и ORIGIN + 2 включительно, если ORIGIN 0). Результат 0, если любые два аргумента одинаковы, 1 для четных перестановок,-1 для нечетных перестановок. |
Исправляем ошибки: Нашли опечатку? Выделите ее мышкой и нажмите Ctrl+Enter
Источник: al-shell.ru
Иллюстрированный самоучитель по MathCAD 11
В ранних версиях Mathcad встроенного языка программирования не было. Чтобы применять привычные операции проверки условий и организовывать циклы, приходилось изобретать причудливую смесь из встроенных функций условия if (листинг 6 1) и until и комбинаций ранжированных переменных (листинг 6.2).
Язык программирования Mathcad. Что такое программа.
Для вставки программного кода в документы в Mathcad имеется специальная панель инструментов Programming (Программирование), которую можно вызвать на экран нажатием кнопки Programming Toolbar на панели Math (Математика), как показано на рис. 6.1.
Создание программы
Чтобы создать программный модуль (Add Line), например, представленный в предыдущем разделе (см. листинг 6.3): | Введите часть выражения, которая будет находиться слева от знака присваивания и сам знак присваивания. В нашем примере это имя функции f (х).
Разработка программы
Вставить строку программного кода в уже созданную программу можно в любой момент с помощью той же самой кнопки Add Line (Добавить линию). Для этого следует предварительно поместить на нужное место внутри программного модуля линии ввода.
Локальное присваивание. Условные операторы.
Язык программирования Mathcad не был бы эффективным, если бы не позволял создавать внутри программных модулей локальные переменные, которые «не видны» извне, из других частей документа.
Операторы цикла
Рассмотрим операторы цикла – for, while, break, continue. | В языке программирования Mathcad имеются два оператора цикла: for и while. Первый из них дает возможность организовать цикл по некоторой переменной, заставляя ее пробегать некоторый диапазон значений.
Возврат значения
Если для определения переменной или функции применяется программный модуль, то его строки исполняются последовательно при вычислении в документе этой переменной или функции. Соответственно, по мере выполнения программы рассчитываемый результат претерпевает изменения.
Перехват ошибок
Программирование в Mathcad позволяет осуществлять дополнительную обработку ошибок (on error). Если пользователь предполагает, что выполнение кода в каком-либо месте программного модуля способно вызвать ошибку (например деление на ноль), то эту ошибку можно перехватить с помощью оператора on error.
Примеры программирования
Рассмотрим два простых примера использования программных модулей в Mathcad для численных (листинг 6.16) и символьных (листинг 6.17) расчетов. В двух приведенных листингах используется большинство операторов, рассмотренных в данной главе.
Источник: samoychiteli.ru
Программирование в MathCAD.
Для написания программ служит панель математических инструментов Programming, которая может быть вызвана щелчком на соответствующей кнопке панели инструментов Math. После щелчка на любой кнопке панели инструментов Programming в программу вставляется тот или иной оператор.
Все операторы вставляются только щелчком на соответствующей кнопке и ни в коем случае не набираются с клавиатуры.
1. Создание программы.
Для того, чтобы превратить обычное однострочное выражение в многострочное (программу), достаточно щелкнуть на кнопке с надписью Add Line. Это приведет к тому, что в рабочей области документа появится вертикальная черта, а справа от нее 2 поля ввода, в которые можно ввести 2 строки программы. Если далее нужно будет добавить еще строки, то достаточно снова щелкнуть на кнопке Add Line.
Внутри программы можно использовать глобальные переменные, но лучше использовать локальные (доступ к которым можно осуществить только из самой программы). Для присваивания значения локальной переменной используется символ ←.
Любая программа должна возвращать некоторое значение, как результат вычислений: это может быть как число так и функция. Возвращаемое значение записывается в последней строке программы, либо с помощью оператора return.
2. Условный оператор.
Для проверки условий в MathCAD служит оператор if. Этот оператор имеет 2 поля ввода (справа и слева от слова if). В правое поле ввода вводится условие, а в левое поле ввода вводится команда или последовательность команд, которые следует выполнить в случае истинности условия. Если невыполнение условия должно привести к выполнению какого-либо другого программного кода, можно в строке, следующей за оператором if, вставить оператор otherwise. В поле ввода слева от этого оператора необходимо ввести строку программы, которая будет выполняться только в том случае, если не выполнилось условие, заданное в операторе if.
Если в программе введено подряд несколько строк с оператором if, то выражение слева от otherwise,будет выполнено только в том случае, если не выполняются условия, заданные во всех операторах if.
Рассмотрим, например, описание кусочно-заданной функции:
3. Цикл с условием ( while ).
Оператор while имеет 2 поля ввода (справа и снизу).
· В поле ввода справа от слова while следует ввести условие, при истинности которого выполняется цикл..
· В поле ввода ниже слова while следует ввести тело цикла – одна или несколько строк программы (для введения нескольких строк используется оператор Add Line), выполнение которых нужно повторить несколько раз.
Рассмотрим использование цикла while для вычисления приближенного значения квадратного корня (методом касательных):
4. Цикл с параметром ( for ).
Оператор for имеет три поля ввода:
· В поле ввода между словом for и знаком , следует указать имя переменной-счетчика.
· В поле ввода после знака следует указать диапазон значений, которые будет принимать переменная-счетчик (вместо диапазона можно указать имя массива, из которого должны браться значения переменной-счетчика).
· В поле ввода под словом for следует ввести тело цикла.
Рассмотрим функцию, вычисляющую факториал.
Для того, чтобы сделать программу рекурсивной, нужно организовать вызов ею самой себя внутри программы. Например, рассмотрим рекурсивную функцию, вычисляющую факториал:
Эта функция, в отличие от предыдущей не может работать для нецелых и отрицательных чисел.
6. Обработка ошибок.
Система MathCAD предоставляет пользователю возможность перенаправлять программу в случае возникновения ошибки (деление на 0, выход за пределы массива). Для этого существует оператор on error, который содержит 2 поля ввода (справа и слева):
— Справа вводится выражение, которое следует вычислить
— Слева вводится выражение, которое следует вычислить, если в правом выражении окажется ошибка.
Например, рекурсивная программа вычисления факториала выдает ошибку для вычисления факториала нецелых и отрицательных чисел. Изменим программу так, чтобы в таких случаях факториал был равен 0:
Иногда возникает обратная ситуация: система MathCAD не видит никакой стандартной ошибки, но необходимо, чтобы появлялась надпись об ошибке. Например, в нерекурсивной программе вычисления факториала выдается ответ для отрицательных значений, а хотелось бы, чтобы возникала ошибка. В таких случаях используется конструкция следующего вида:
error (“[текст ошибки]”) if [условие]
7. Программы, составленные из нескольких операторов.
MathCAD имеет возможность написания различных программ, содержащих несколько операторов, при этом операторы могут быть вложены друг в друга, если в какой-то оператор вложено несколько операторов, то их нужно объединять вертикальной линией (Add Line).
Рассмотрим программу, вычисляющую среднее арифметическое элементов произвольной матрицы.
Контрольные задания.
1. Построить график кусочно-заданной функции
2. Решить задачу, используя цикл while.
Варианты:
1. 8. Человек открыл счет в банке, вложив n руб. Через каждый месяц размер вклада увеличивается на p % от имеющейся суммы. Написать функцию, вычисляющую, какая сумма будет лежать у этого человека в банке через год.
2. 9. Человек открыл счет в банке, вложив n руб. Через каждый месяц размер вклада увеличивается на p % от имеющейся суммы. Написать функцию, определяющую, за какой месяц величина ежемесячного увеличения вклада превысит k руб.
3. 10. Человек открыл счет в банке, вложив n руб. Через каждый месяц размер вклада увеличивается на p % от имеющейся суммы. Написать функцию, вычисляющую, через, сколько месяцев размер вклада превысит k руб.
4. 11. Начав тренировки, лыжник в первый день пробежал n км. Каждый следующий день он увеличивал длину пробега на p % от пробега предыдущего дня. Написать функцию, вычисляющую, в какой день он пробежит больше k км.
5. 12. Начав тренировки, лыжник в первый день пробежал n км. Каждый следующий день он увеличивал длину пробега на p % от пробега предыдущего дня. Написать функцию, вычисляющую, в какой день суммарный пробег за все дни превысит k км.
6. 13. Один человек имеет n тыс.руб., он хочет купить машину за m тыс.руб., для этого кладет все свои деньги в банк под k % годовых, но в результате инфляции машина дорожает каждый год на p %. Написать функцию, вычисляющую, через сколько лет этот человек сможет купить машину?
7. 14. В некотором году (назовем его условно первым) на участке в n га средняя урожайность ячменя составила m центнеров с га. После этого каждый год площадь участка увеличивалась на p %, а средняя урожайность – на k %. Определить, в каком году общий урожай, собранный за все время, начиная с первого года, превысит s центнеров.
Лабораторная работа № 7.
Источник: poisk-ru.ru