Постановка задания

Задание для всех вариантов звучит так (или, возможно, немного изменено, так как могут быть разные издания учебного пособия):

Задана функция на отрезке в виде графика. Задаются произвольный отрезок [a; b] и число табулирования n > 100.

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

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

Варианты заданий

ВариантГрафически заданная функция
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

Лабораторная работа $№2$ предполагает написание программы на языке Си. При заказе работы своего варианта вы получите качественно написанную и хорошо прокомментированную программу.

Дополнительно заказав алгоритм решения вашей задачи (мы крайне рекомендуем это сделать), получите аккуратно оформленный отчет-алгоритм, поясняющий все тонкости решения поставленной задачи.

Образец выполнения (вариант №1)

Условие задания

Алгоритм решения задачи

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

➡ Существует несколько способов решения данной задачи. Мы выделили $2$ основных:

  1. Используя математическую параметризацию.
  2. Используя математическое проецирование.

Нам показалось, что решать данную задачу через математическое проецирование удобнее и нагляднее, чем через параметризацию, поэтому ниже будет рассмотрен именно $2$-ой способ решения.

Давайте предельно внимательно посмотрим на график заданной функции и сделаем следующие выводы:

  • График задан на отрезке $[0; \ 12]$, но это не означает, что мы должны ограничиваться именно этим отрезком. Будем решать в общем виде, то есть рассматривать всю область определения заданной функции: $(-\infty; \ \infty)$.
  • Рассматриваемая функция является периодической. Это очень четко прослеживается при тщательном анализе заданного графика функции.

Периодическая фу́нкция ― функция, повторяющая свои значения через некоторый регулярный интервал аргумента, то есть не меняющая своего значения при добавлении к аргументу некоторого фиксированного ненулевого числа (периода функции) на всей области определения.

  • Рассматриваемая функция является четной.

Функция $f(x)$ называется четной, если ее область определения симметрична относительно нуля, и для любого $x$ из области определения выполняется условие: $f(-x) = f(x)$.

  • График заданной функции состоит из неразрывно чередующихся геометрических примитивов: горизонтальной линии и полуокружности.

💡 Основная идея математического проецирования применительно к нашей задаче — спроецировать любую точку функции в самый первый (левый) положительный период графика.

Давайте рассмотрим самый левый положительный период графика функции более внимательно.

Лабораторная работа №2. Вариант №1. Степанов. Си. Программирование. МГТУ им.Баумана. Минимальный период заданного графика функции

Какие выводы можно сделать после анализа этого фрагмента?

  1. Длина периода составляет $4$-ре единицы. Другими словами: период состоит из $4$-рех участков.
  2. Первый и последний участки математически описываются одинаково и представляют собой горизонтальную линию.
  3. Второй и третий участки также математически описываются одинаково и представляют собой полуокружность (нижнюю часть полноценной окружности).

➡ Давайте запишем уравнения горизонтальной линии и полуокружности.

$f(x) = 2$ — уравнение горизонтальной линии.
$x^2 + y^2 = R^2$ — уравнение окружности с центром в начале координат и радиусом R. Но в нашем примере центр окружности не совпадает с центром начала координат, а имеет смещение на $2$ единицы по оси $Ох$ и на $1$ единицу по оси $Oy$.

Следовательно, для нашей задачи будет актуально следующее уравнение: $(x — 2)^2 + (y — 1)^2 = 1^2$. Но также обязательно нужно учесть, что нас интересует лишь нижняя часть окружности.

➡ Как получать значения нижней полуокружности?
$(x — 2)^2 + (y — 1)^2 = 1^2$
$(y — 1)^2 = 1 — (x — 2)^2$
$y — 1 = \pm\sqrt{1 — (x — 2)^2}$
$y = \pm\sqrt{1 — (x — 2)^2} + 1$
И вот настал момент истинны! Нам необходимо отбирать значения функции, для которых перед корнем стоит знак «$-$». Почему? Да потому что значения из нижней полуокружности меньше значений из верхней полуокружности.

В итоге получаем формульную зависимость для нахождения значений заданной функции, когда подаваемый $x$ попадает во второй или третий участок периода:

$y = -\sqrt{1 — (x — 2)^2} + 1$

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

Пример №1.
Подставляется $x = 7.5$. Наша цель перенести это значение в первый период, значит $x$ после проецирования будет равен $3.5$.

Пример №2.
Подставляется $x = -2.125$. Так как заданная функция является четной, то мы отбрасываем знак «$-$», получая значение $x = 2.125$, а после этого переносим в первый период. Но это значение итак попадает в первый период изначально, поэтому никаких изменений не происходит.

Пример №3.
Подставляется $x = 173.0625$. Телепортируем $x$ в первый период и получаем значение $x = 1.0625$.

Необходимые программные функции для кодирования

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

Название функции
Назначение функции
1FCircleВычисляет «меньшую» ординату уравнения окружности $(x — 2)^2 + (y — 1)^2 = 1^2$.
2FLineПолучение значения функции $f(x) = 2$.
3GetMinFunctionValueПоиск минимального значения заданной функции на заданном отрезке $[a; b]$.
4GetMaxFunctionValueПоиск максимального значения заданной функции на заданном отрезке $[a; b]$.
5FПроисходит проецирование текущего значения $x$ в новое значение, попадающее в первый период заданной функции. В качестве ответа возвращается значение заданной функции.
6GetValueFromKeyboardВвод какого-либо числа вводом с клавиатуры с ограничением на множество допустимых значений.
7PrintTopTableВывод «шапки» таблицы результатов на экран.
8TabFunctionПроисходит табулирование заданной функции на заданном отрезке $[a; b]$ при заданном количество разбиений $n$.
9mainГлавная функция программы (точка входа).

Итого получилось $9$ функций. Каждая из этих функций выполняет строго одно действие и это важнейший момент правильного программирования.

Реализация задачи на языке С

Результаты работы программы

Лабораторная работа №2. Вариант №1. Степанов. Си. Программирование. МГТУ им.Баумана. Тестирование программы

Стоимость заказа работы

➡ Стоимость программы из любого варианта составляет $250$ рублей.
➡ Стоимость детального алгоритма из любого варианта составляет $300$ рублей (заказывается опционально на ваше усмотрение, чтобы детально разобраться с решением лабораторной работы, например, не прибегая к консультации репетитора).

Также дополнительно вы можете заказать у нас:

  • Построение аккуратной ГОСТовой блок-схемы. Ориентировочная стоимость $250$ рублей.
  • Отчет о проделанной работе (иногда в вузах есть требование — предоставить отчет к лабораторной работе). Ориентировочная стоимость $200$ рублей.

Для оформления заказа пишите на почту: proglabs@mail.ru.
Время нашего ответа обычно составляет не более $10$ минут.