Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.63/64: Рейтинг темы: голосов - 64, средняя оценка - 4.63
2 / 2 / 0
Регистрация: 13.10.2011
Сообщений: 81

Вычисление значения функции по графику

13.10.2011, 12:02. Показов 13388. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем приветик!) Пожалуйста помогите вычислить значения функции...
Во вложенном файле, график номер 2
Заранее спасибо)
Вложения
Тип файла: pdf Лабораторная работа4.pdf (84.6 Кб, 549 просмотров)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.10.2011, 12:02
Ответы с готовыми решениями:

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

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

Вычисление функции по графику
Добрый день! Помогите решить задание: "Вычислить значение функции y=F(x), заданной графически, по заданному значению аргумента х...

26
 Аватар для Ereona
374 / 135 / 19
Регистрация: 16.07.2010
Сообщений: 342
13.10.2011, 12:44
C#
1
2
3
4
5
6
7
8
9
10
11
12
        double F(double x, double R)
        {
            if (x < -8)
                return -R;
            if (x < -R)
                return (R * x + 1) / (8 - R);
            if (x < R)
                return -Math.Sqrt(R * R - x * x);
            if (x < 5)
                return 2 * (x - 1 / R) / (5 - R);
            return 3;
        }
0
0 / 0 / 0
Регистрация: 20.09.2011
Сообщений: 22
13.10.2011, 17:33
а можно поеснить ход
 Комментарий модератора 
Создавайте свою тему.
Вложения
Тип файла: docx Документ Microsoft Office Word.docx (33.0 Кб, 156 просмотров)
0
98 / 81 / 16
Регистрация: 14.01.2011
Сообщений: 438
13.10.2011, 18:12
Цитата Сообщение от nikzaks Посмотреть сообщение
поеснить ход
Что что?
0
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 39
13.10.2011, 20:55
А можно по первому графику
0
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 39
13.10.2011, 21:14
Можно и эти задания решить пожалуйста
Вложения
Тип файла: rar Doc1.rar (959.1 Кб, 128 просмотров)
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
14.10.2011, 00:25
vendn
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
double lowerLimit = -( r + 7 );
double upperLimit = r + 5;
 
if (x < lowerLimit || x > upperLimit)
    throw new ArgumentOutOfRangeException(string.Format("F(x, r) is not defined for x = {0} and r = {1}", x, r));
 
if (x < -( r + 5 ))
    return -3.0;
 
if (x < -r)
    return (x+r) * 0.6;
 
if (x < r)
    return -Math.Sqrt(r * r - x * x);
 
if (x < r + 2)
    return x - r;
 
return 3.0;
Ereona, у вас не учитывается изменяемый параметр R, плюс параметр R не влияет на возвращаемое значение на промежутке [-8;-10]. На остальных промежутках тоже как-то странно получается.

Senya1989
Задание первое:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public double F1(double x, double r)
{
    double lowerLimit = -r * 2 + 3, 2;
    double upperLimit = 9.0;
 
    if (x < lowerLimit || x > upperLimit)
        throw new ArgumentOutOfRangeException(string.Format("F(x, r) is not defined for x = {0} and r = {1}", x, r));
    if (x == 0)
        return r;
    if (x == lowerLimit || x == -r || x == 3)
        return 0;
    if (x < -( r + 3 ))
        return -Math.Sqrt(Math.Pow(r, 2) - Math.Pow(x + ( r + 3 ), 2));
    if (x < -r)
        return (x + r) * ( r / 3.0 );
    if (x < 0)
        return Math.Sqrt(Math.Pow(r, 2) - Math.Pow(x, 2));
    if (x < 3)
        return (3 - x) * ( r / 3.0 );
    return ( x - 3 ) * 0.5;
}
Функцию вызывайте в цикле с разными значениями x.

Ответ на второе задание дан в этой теме: https://www.cyberforum.ru/csha... 56386.html
Смотрите мой пост.

Едигственное изменение, которое там потребуется - переменная r задается параметром в метод
2
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
14.10.2011, 01:33
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от nikzaks Посмотреть сообщение
а можно поеснить ход
Можно.
Поесняю.

Итак, у нас есть некий график (прикреплен к посту), по которому нужно определить функцию.
Фактически, нам нужно определить значение Y на разных промежутках.

Перво-наперво нужно определиться со значением R, так как с его увеличением или уменьшением будут меняться промежутки.
У нас на графике имеются два соприкасающиеся полукруга с определенными координатами центров (-2 и 1 соответственно). Из этого следует, что сумма их радиусов не должна превышать 3. В противном случае окружности "налезут" друг на друга и для одного значения X может быть два значения Y. То есть функция перестает быть функцией.
Исходя из этого, подбираем значения R1 и R2 так, чтобы сумма их радиусов не была выше 3.
Предположим, что R1 является приоритетным (все-таки единичка). Значит, если параметр R равен, скажем, двум, то R1 = 2, R2 = 1. Если же значение R = 3, то R1 = 3, R2 = 0. При R = 0, R1 = 0, R2 = 3.
При R < 0 или R > 3 функция не действительна, т.к. один из радиусов в этом случае должен быть отрицательным.

Дальше я буду приводить примеры расчетов, предполагая, что параметр R = 1, то есть R1 = 1, R2 = 2 (как показано на изображении).

Разобравшись с радиусами, начинаем смотреть на промежутки. Пойдем слева направо для R = 1.
На промежутке x < -7 функция не определена.
На промежутке https://www.cyberforum.ru/cgi-bin/latex.cgi?x\epsilon [-7;-6] значение функции равно единице.
На промежутке https://www.cyberforum.ru/cgi-bin/latex.cgi?x\epsilon (-6;-4] у нас диагональная убывающая до нуля линия.
Если тут мысленно провести вертикальную линию до оси Х, то получившаяся фигура образует прямоугольный треугольник, где диагональ является гипотенузой. По сути, для нахождения У на этом промежутке, нам нужно найти длину противолежащего катета для заданной Х. В принципе для этого можно воспользоваться теоремой Пифагора: сумма квадратов катетов равна квадрату гипотенузы:
https://www.cyberforum.ru/cgi-bin/latex.cgi?{c}_{2} = {a}^{2} + {b}^{2} \Rightarrow c = \sqrt{{a}_{2} + {b}^{2}}
Однако нам известна только длина прилежащего катета, а длина гипотенузы и противолежащего катета неизвестны (например, при х = -5). В этом случае мы можем найти длину противолежащего катета, используя свойства прямоугольных треугольников: https://www.cyberforum.ru/cgi-bin/latex.cgi?\tan(\alpha) = \frac{a}{b}, где а - противолежащий катет, b - прилежащий катет, альфа - угол между гипотенузой и прилежащим катетом. Для нашего "изначального" треугольника а = 1, b = 2, следовательно тангенс угла альфа равен 1/2 или 0.5. Имея это значение, мы можем найти длину противолежащего катета, помножив полученный тангенс на длину прилежащего катета.
Результат: на промежутке от -6 до -4 значение У будет равно (x + 4) * 0.5, то есть при х = -6, у = 1; при х = -5, у = 0.5, при х = -4, у = 0. Смотрим на график: верно? Верно.
Четверку мы прибавляем для того, чтобы вычислить длину катета для треугольника, который начинается от х = -4.

На следующем промежутке https://www.cyberforum.ru/cgi-bin/latex.cgi?x\epsilon (-4;0] нужно найти точку на окружности, соответствующую заданной Х. Здесь можно воспользоваться свойством окружностей, которое следует из той же теоремы Пифагора: квадрат радиуса равен квадрату расстояния от точки до центра окружности:
https://www.cyberforum.ru/cgi-bin/latex.cgi?{r}^{2} = {(x-a)}^{2} - {(y-b)}^{2} \Rightarrow r = \sqrt{{(x-a)}^{2} - {(y-b)}^{2}}
где r - радиус окружности, a - центр окружности по оси Х, b - центр окружности по оси У.
Для нахождения значения У, соответсвенно, формула будет выглядеть так:
https://www.cyberforum.ru/cgi-bin/latex.cgi?y - b = \sqrt{{r}^{2} - {(x-a)}^{2}}

b в нашем случае всегда равно нулю, потому его опускаем:
https://www.cyberforum.ru/cgi-bin/latex.cgi?y = \sqrt{{r}^{2} - {(x-a)}^{2}}

Центр полуокружности нам известен, потому финальная формула выглядит так:
https://www.cyberforum.ru/cgi-bin/latex.cgi?y = \sqrt{{r}^{2} - {(x+2)}^{2}}

На промежутке https://www.cyberforum.ru/cgi-bin/latex.cgi?x\epsilon (0;2] то же самое, только со знаком минус. Ну и координата центра по У равна единице, а не двум:
https://www.cyberforum.ru/cgi-bin/latex.cgi?y = \sqrt{{r}^{2} - {(x-2)}^{2}}

На последнем промежутке от двух до трех та же байда с треугольниками. Только тут сразу видно, что оба катета равны единице, значит значение У для заданной Х будет таким же, за вычетом расстояния от начала координат до начала треугольника:
y = 2 - x

Теперь перекладываем полученные знания в код:
C#
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public double F(double x, double r)
{
    // Проверка на значение радиуса
    if (r > 3 || r < 0)
        throw new ArgumentOutOfRangeException("Radius must be between 0 and 3");
 
    // R2
    double r2 = 3 - r;
 
    // Пределы функции
    double lowerLimit = -r2 - 5;
    double upperLimit = r + 2;
 
    // Проверка на принадлежность Х допустимому интервалу значений
    if (x < lowerLimit || x > upperLimit)
        throw new ArgumentOutOfRangeException(string.Format("Function is undefined for x belonging to [{0};{1}]", lowerLimit, upperLimit));
 
    // Пределы промежутков. Для удобства.
    double lim1 = -2 - r2;
    double lim2 = 1 - r;
    double lim3 = 1 + r;
 
    // Точки, в которых У всегда равна нулю
    if (x == lim1 || x == lim2 || x == lim3)
        return 0;
 
    // Первый промежуток. Всегда единица
    if (x >= lowerLimit && x <= lowerLimit + 1)
        return 1;
 
    // Второй промежуток. Длина противолежащего катета равна длине прилежащего, помноженного на тангенс угла прилежащего катета и гипотенузы.
    if (x > lowerLimit + 1 && x < lim1)
        return (lim1 - x) * 0.5;
 
    // Второй и третий промежутки. По уравнению окружностей.
    if (x > lim1 && x < lim2)
        return Math.Sqrt(Math.Pow(r2, 2) - Math.Pow(x + 2, 2));
 
    if (x >= lim2 && x < lim3)
        return -Math.Sqrt(Math.Pow(r, 2) - Math.Pow(x - 1, 2));
 
    // Последний промежуток.
    return r + 1 - x;
}
В общем-то, все. Для схожих заданий алгоритм тот же:
1. Определяем зависимость параметра R на вид графика
2. Определяем формулы для вычисления У на разных промежутках.
3. Пишем код.
Миниатюры
Вычисление значения функции по графику  
4
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
14.10.2011, 02:00
В качестве проверки вызываем функцию на промежутке от -8 до 3 с шагом 0.01 и строим график из получившихся точек.

Совпадает с оригиналом? По-моему, да.
Миниатюры
Вычисление значения функции по графику  
2
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 39
15.10.2011, 11:43
Можете кто-нибудь сделать первый график по 1 лабе, а то немогу никак
Вложения
Тип файла: rar Безымянный23.rar (113.3 Кб, 56 просмотров)
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
15.10.2011, 11:54
Senya1989, прокрутите выше - я же вам там код выложил.
1
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 39
15.10.2011, 16:16
Вот написал, наверное что-то неправильно сделал подскажите

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication5
{
class Program
{
static void Main(string[] args)

public double F1(double x, double r)
{

double lowerLimit = -r * 2 + 3,2;
double upperLimit = 9.0;

if (x < lowerLimit || x > upperLimit)
throw new ArgumentOutOfRangeException(string.Forma t("F(x, r) is not defined for x = {0} and r = {1}", x, r));
if (x == 0)
return r;
if (x == lowerLimit || x == -r || x == 3)
return 0;
if (x < -( r + 3 ))
return -Math.Sqrt(Math.Pow(r, 2) - Math.Pow(x + ( r + 3 ), 2));
if (x < -r)
return (x + r) * ( r / 3.0 );
if (x < 0)
return Math.Sqrt(Math.Pow(r, 2) - Math.Pow(x, 2));
if (x < 3)
return (3 - x) * ( r / 3.0 );
return ( x - 3 ) * 0.5;
}
}
}
Добавлено через 49 секунд
мне надо в консольном для начала ну ещё для Windows Forms
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
15.10.2011, 16:50
C#
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
26
27
28
29
30
31
32
33
34
static void Main(string[] args)
{
   Console.Write("x = ");
   double x = Convert.ToDouble(Console.ReadLine());
   
   Console.Write("r = ");
   double r = Convert.ToDouble(Console.ReadLine());
   
   Console.WriteLine("F({0},{1}) = {2}", x, r, F1(x, r));
   Console.ReadKey();
}
 
static double F1(double x, double r)
{
 
    double lowerLimit = -r * 2 + 3;
    double upperLimit = 9.0;
 
    if (x < lowerLimit || x > upperLimit)
        throw new ArgumentOutOfRangeException(string.Format("F(x, r) is not defined for x = {0} and r = {1}", x, r));
    if (x == 0)
        return r;
    if (x == lowerLimit || x == -r || x == 3)
        return 0;
    if (x < -(r + 3))
        return -Math.Sqrt(Math.Pow(r, 2) - Math.Pow(x + (r + 3), 2));
    if (x < -r)
        return (x + r) * (r / 3.0);
    if (x < 0)
        return Math.Sqrt(Math.Pow(r, 2) - Math.Pow(x, 2));
    if (x < 3)
        return (3 - x) * (r / 3.0);
    return (x - 3) * 0.5;
}
2
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 39
15.10.2011, 17:53
Я вот это ещё задание не понял, больше просить ничего не буду
Вложения
Тип файла: rar Безымянный32.rar (156.3 Кб, 46 просмотров)
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
15.10.2011, 18:09
Да там же вообще просто:
Попадает, если верны эти условия:

1. https://www.cyberforum.ru/cgi-bin/latex.cgi?{x}^{2} + {y}^{2} \leq {R}^{2}
2. y > x при x > 0
3. y < x при x < 0
1
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 39
15.10.2011, 18:15
А можешь код расписать полностью
пожалуйста
я помню что просто, на парах недавно делали, а вот щас чего-то в ступор вошел, я кстати ещё в первом main(args) добавил чтобы продолжать вводить числа для x и r
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
15.10.2011, 23:51
Да вы что, там же метод на 4 строчки:

C#
1
2
3
4
5
6
bool IsBlack(double x, double y, double R)
  if (x*x + y*y <= R*R)
     if (x > 0) return y >= x;
     else return y <= x;
  else return false;
}
2
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 39
16.10.2011, 15:12
Мне стыдно конечно, но можно полностью написать код с самого начала чтобы приложение работало, чтобы я окончательно уже понял

Добавлено через 2 часа 53 минуты
Можно полностью код выложить чтобы работало в консоли
0
0 / 0 / 0
Регистрация: 20.09.2011
Сообщений: 22
18.10.2011, 20:56
Цитата Сообщение от kolorotur Посмотреть сообщение
bool IsBlack
что значит это строчка?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
18.10.2011, 22:06
Цитата Сообщение от nikzaks Посмотреть сообщение
что значит это строчка?
Метод IsBlack, возвращающий да/нет.
Black - это по-английски "черный".
Is перед словом - вопрос.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.10.2011, 22:06
Помогаю со студенческими работами здесь

Вычисление значения аргумента по графику
Задание. Написать программу, которая по введенному значению аргумента вычисляет значение функции, заданной в виде графика. Параметр R...

Вычисление y по графику функции
Правильно ли я сделал ?Нужно по введенному x вычислить значение y исходя из графика Program Variant_9; Uses graphABC; Var x, y:...

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

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

По графику функции составить программу для вычисления ее значения по введенному аргументу
Мне задали задачу по методичке. В принципе чепуховое задание. По графику функции составить программу для вычисления ее значения по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru