Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.72/75: Рейтинг темы: голосов - 75, средняя оценка - 4.72
171 / 104 / 25
Регистрация: 17.10.2010
Сообщений: 1,146
1

Математический маятник

08.09.2012, 22:36. Показов 14447. Ответов 26
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго время суток. Нужно написать программу. Математический маятник совершает колебания по закону https://www.cyberforum.ru/cgi-bin/latex.cgi?x(t) = A* sin(\omega *t + {\omega }_{0}). Частота https://www.cyberforum.ru/cgi-bin/latex.cgi?\omega маятника известна. В начальный момент координата x в k раз меньше амплитуды A. В какой момент времени T отклонение маятника максимально? Написать программу для определения параметра T при условии, что параметры https://www.cyberforum.ru/cgi-bin/latex.cgi?\omega и k вводятся пользователем. При составлении программы воспользоваться соотношениями https://www.cyberforum.ru/cgi-bin/latex.cgi?{\varphi }_{0}=\arcsin (1/k) и https://www.cyberforum.ru/cgi-bin/latex.cgi?T = (\pi /2 - {\varphi }_{0})/\omega. Вот код программы, но он работает не правильно:
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
#include <iostream>
#include <cmath>
#include <iostream> 
using namespace std;
int main()
{
       setlocale( LC_ALL,"Russian" );
        double omega, k; 
        double T, A, phi0, x;
        const double g = 9.78;
        const double PI = 3.1415;
       cout << "Введите частоту: ";
       cin >> omega;
       if( omega =0 ) // контроль введенных данных
    {
        cout<<"Такого момента времени не существует\n";
        system("pause");
        return 1;
    }
       cout << "Введите амплитуду: ";
       cin >> A;
       cout << "Введите k: ";
       cin >> k;
if( k=0 ) // контроль введенных данных
    {
        cout<<"Такого угла не существует\n";
        system("pause");
        return 1;
    }
 phi0 = asin(1/k);
T= ((PI/2) - phi0)/omega;
x = A*sin (((omega*T ) + phi0 )*PI/180);
cout << "phi0 =  "<<phi0<<"\n "; 
cout << "T =  "<<T<<"\n ";
cout << "x =  "<<x<<"\n ";   
 
 system("pause");
        return 0;
}
Подскажите пожалуйста как правильно написать программу???? заранее огромное спасибо!!!!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.09.2012, 22:36
Ответы с готовыми решениями:

математический маятник
какая длина математического маятника, если за время t он сделает n колебаний?

Математический маятник, open gl, изменение скорости маятника при нажатии кнопок
Есть задача, реализации математического маятника, и к ней есть условие: при нажатии кнопок &quot;+&quot; и...

Математический функции
Где можно прочитать про всякие математические функции в c++? Пользуюсь #include &lt;math.h&gt;...

Математический пример
Подскажите пожалуйста, как записать такой пример, только начал c++ изучать

26
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
08.09.2012, 23:02 2
isaak, элементарно же
x(t_max) = A =>
=>sin(omega*t + phi)== 1 =>
=>omega*t+phi = pi/2
=>t = (pi/2-phi)/omega
Так что с точки зрения теории все правильно.
бред, но может попробовать написать
C++
1
x = A*sin (((omega*T ) + phi0 )*PI/180.0);
0
171 / 104 / 25
Регистрация: 17.10.2010
Сообщений: 1,146
08.09.2012, 23:47  [ТС] 3
При вводе значений выводит следующий результат. Не понимаю в чем ошибка?????
Миниатюры
Математический маятник  
0
Комп_Оратор)
Эксперт по математике/физике
8949 / 4703 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
09.09.2012, 00:17 4
Хм... извините не вчитался сразу.
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
09.09.2012, 00:21 5
isaak, мб угол больше pi/2?
0
Комп_Оратор)
Эксперт по математике/физике
8949 / 4703 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
09.09.2012, 00:31 6
isaak, if(omega=0) и if(omega==0) разные вещи.
Забавно Ваша main реагирует на череду return'ов, не видел такого раньше. Есть же и другие способы организации ввода. )

Не по теме:

А сейчас бокс! Кличко vs Чар! Что-то волнуюсь...:)

0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
09.09.2012, 00:36 7
C++
1
2
3
4
5
6
if(!omega) // контроль введенных данных
    {
        cout<<"Такого момента времени не существует\n";
        system("pause");
        return 1;
    }
так попробуй
1
171 / 104 / 25
Регистрация: 17.10.2010
Сообщений: 1,146
09.09.2012, 13:42  [ТС] 8
Цитата Сообщение от Psilon Посмотреть сообщение
isaak, мб угол больше pi/2?
Psilon спасибо за подсказку угол не может быть больше PI/2 так как из выражения T = (PI/2-phi0)/omega получается, что T < 0 - время не может быть отрицательным!!!! Но мне пока ни как не удается, это правильно реализовать
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
45
46
47
48
49
#include <iostream>
#include <cmath>
#include <iostream> 
using namespace std;
int main()
{
       setlocale( LC_ALL,"Russian" );
        double omega, k; 
        double T, A, phi0, x;
        const double g = 9.78;
        const double PI = 3.1415;
       cout << "Введите частоту: ";
       cin >> omega;
      if(!omega) // контроль введенных данных
    {
        cout<<"Такого момента времени не существует\n";
        system("pause");
        return 1;
    }
       
       cout << "Введите амплитуду: ";
       cin >> A;
       cout << "Введите k: ";
       cin >> k;
if( k=0 ) // контроль введенных данных
    {
        cout<<"Такого угла не существует\n";
        system("pause");
        return 1;
    }
 phi0 = asin(1/k);
 
 if(phi0 > (PI/2)) // контроль введенных данных
    {
        cout<<"Такого момента времени не существует\n";
 }
 else
 {
     T= ((PI/2) - phi0)/omega;
    }
 
x = A*sin (((omega*T ) + phi0 )*PI/180.0);
cout << "phi0 =  "<<phi0<<"\n "; 
cout << "T =  "<<T<<"\n ";
cout << "x =  "<<x<<"\n ";   
 
 system("pause");
        return 0;
}
???????? Помогите пожалуйста!!!! Заранее огромное спасибо!!!!
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
09.09.2012, 14:12 9
isaak, а вы в каком компиляторе работаете?

Добавлено через 5 минут
Ну мне кажется как-то так
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
#include <iostream>
using namespace std;
int main()
{
       setlocale( LC_ALL,"Russian" );
        double omega, k;
        double T, A, phi0, x;
        const double g = 9.78;
        const double PI = 3.1415;
       cout << "Введите частоту: ";
       cin >> omega;
      if(!omega) // контроль введенных данных
    {
        cout<<"Такого момента времени не существует\n";
        system("pause");
        return 1;
    }
 
       cout << "Введите амплитуду: ";
       cin >> A;
       cout << "Введите k: ";
       cin >> k;
    if(!k) // контроль введенных данных
    {
        cout<<"Такого угла не существует\n";
        system("pause");
        return 1;
    }
phi0 = asin(1/k);
T= abs((PI/2) - phi0)/omega;
x = A*sin ((omega*T ) + phi0 );
cout << "phi0 =  "<<phi0<<"\n ";
cout << "T =  "<<T<<"\n ";
cout << "x =  "<<x<<"\n ";
 
 system("pause");
        return 0;
}
Кстати, вот эта строчка была совершенно зря
x = A*sin (((omega*T ) + phi0 )*PI/180.0);
там и так все в радианах.

p.s. займитесь на досуге форматированием исходных текстов
2
Комп_Оратор)
Эксперт по математике/физике
8949 / 4703 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
09.09.2012, 14:14 10
C++
1
2
3
4
5
6
7
8
9
10
if( k=0 ) // k=0 возвращеет k(целое 0 )  в if() преобразуется к false поэтому тело if не выполнятся (слава богу) 
    {
        cout<<"Такого угла не существует\n";
        system("pause");
        return 1;
 
//*************************************
phi0 = asin(1/k); //тут должно быть деление на ноль. Почему не вылетает? :pardon:
    }
:wall::cry:???????? Помогите пожалуйста!!!! Заранее огромное спасибо!!!!
0
171 / 104 / 25
Регистрация: 17.10.2010
Сообщений: 1,146
09.09.2012, 14:23  [ТС] 11
Psilon спасибо огромное!!!! У меня компилятор Visual Studio 2010. Скорей всего вы правы, чтобы T > 0 нужно брать абсолютное значение выражения.
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
09.09.2012, 14:25 12
isaak, всегда пожалуйста
0
Заблокирован
Автор FAQ
10.09.2012, 12:46 13
Цитата Сообщение от isaak Посмотреть сообщение
какой момент времени T отклонение маятника максимально?
https://www.cyberforum.ru/cgi-bin/latex.cgi?x(t) = A*sin(\omega *t + {\varphi }_{0})
https://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{d}{dt}x(t) = A*\omega*cos(\omega *t + {\varphi }_{0})
Определяем экстремум функции т.е x'(t) = 0
https://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{d}{dt}x(t) = 0 = cos(\omega *t + {\varphi }_{0})
https://www.cyberforum.ru/cgi-bin/latex.cgi?\omega *t + {\varphi }_{0} = arccos(0) =\frac{ \pi }{2}
https://www.cyberforum.ru/cgi-bin/latex.cgi?t = \frac{\frac{ \pi }{2} - {\varphi }_{0}}{\omega }
Ответ : максимальное отклонение маятника соответсвует моменту времени https://www.cyberforum.ru/cgi-bin/latex.cgi?t = \frac{\frac{ \pi }{2} - {\varphi }_{0}}{\omega }
1
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
10.09.2012, 15:39 14
-=ЮрА=-, вы смотрите вообще? У него в выложенных исходниках и так формула присутствует
C++
1
T= ((PI/2) - phi0)/omega;
Проблема была немного в другом (потрудились бы посмотреть код прежде чем срывать покровы )
0
Заблокирован
Автор FAQ
10.09.2012, 18:12 15
Psilon, я что-то недопонял тебя,кто что срывал и с кого?Ты вобще знаком с понятием производная?
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
10.09.2012, 18:59 16
-=ЮрА=-, Оу, мы уже на ты. Ну ладно. Вы советуете выразить автору формулу, которая у него уже присутствует в коде, значит ты вообще не глядя "сказанул". Круто че
0
Заблокирован
Автор FAQ
10.09.2012, 19:39 17
isaak, ниже по твоей просьбе привожу решение (я дам расклад всех формул из условия чтобы было ясно откуда они взялись)
https://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{cases}  <br />
x(t) = A*sin(\omega *t + {\varphi }_{0})  \\   <br />
x(T) = A*sin(\omega *T + {\varphi }_{0})  \\  <br />
\frac{x(T)}{x(t)} = k \end{cases}
Теперь как я показал выше да и в условии сказано период колебаний составляет:
https://www.cyberforum.ru/cgi-bin/latex.cgi?T = \frac{\frac{\pi}{2} -{ \varphi }_{0}}{\omega}
Таким образом наша система преобразуется к виду:
https://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{cases}   <br />
x(t) = A*sin(\omega *t + {\varphi }_{0})  \\    <br />
x(T) = A*sin(\omega *(\frac{\frac{\pi}{2} -{ \varphi }_{0}}{\omega}) + {\varphi }_{0}) = A \\   \frac{x(T)}{x(t)} = k \end{cases}
В принципе преобразования можно было и не делать, ведь и так ясно что x(t) = A но я показал для наглядности что это так и есть
Так вот имеем
https://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{cases}   <br />
x(t) = A*sin(\omega *t + {\varphi }_{0})  \\    <br />
x(T) = A \\   <br />
\frac{x(T)}{x(t)} = k \end{cases}
Т.е получаем https://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{1}{k}  = sin(\omega *t + {\varphi }_{0})
Откуда легко получить уже известное нам соотношение для начальной фазы колебаний (правда в условии автор с целью упрощения подал arcsin(1/k) как соотношение для начальной фазы колебаний, хотя это соотношение для полной фазы которая связана с начальной вот таким соотношением https://www.cyberforum.ru/cgi-bin/latex.cgi?\varphi = \omega *t +{ \varphi }_{0})

Ну а теперь касательно основного задания программы:
Цитата Сообщение от isaak Посмотреть сообщение
Написать программу для определения параметра T при условии, что параметры и k вводятся пользователем.
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
#include <cmath>
#include <iostream>
using namespace std;
 
int main()
{
    double k = 0;
    double w = 0;
    double phi0 = 0;
    double pi_2 = asin(1.0);//arcsin(1) = Пи/2
    double t    = 0;
    setlocale(LC_ALL,"RUS");
    while(true)
    {
        cout<<"k = ";cin>>k;
        cout<<"w = ";cin>>w;
        if(w == 0)
            cout<<"Некорректный ввод пользователя (w == 0) - тело покоится\n";
        else
        if(k < 1)
            cout<<"Отклонение не может иметь отношение больше амплитудного\n";
        else
        if(pi_2 < (phi0 = asin(1/k)) - 1E-12)//1E-12 - та фишка с даблами о которой рассказывал
            //у чисел с плавающей точкой всегда есть погрешность
            cout<<"Данное отношение 1/k недопустимо\n";
        else
        if((t = (pi_2 - phi0)/w) == 0)
            cout<<"Маятник уже досиг амплитудного отклонения\n";
        else
            cout<<"Маятник досигнет амплитудного отклонения через :"<<t<<" сек\n";
    }
    return 0;
}
PS:Psilon вот скажи я тебя трогаю?!Мало того что твоё решение негодится, так ты ещё грубишь!

Не по теме:

Ты лучше бы глаза разул и увидел что автор той книги из которой задача ввёл упрошение дляначальной фазы подразумевая под ней полную фазу:-|

Миниатюры
Математический маятник  
Вложения
Тип файла: rar CalcTime.exe.rar (72.4 Кб, 35 просмотров)
2
-=ЮрА=-
10.09.2012, 19:43
  #18

Не по теме:

Цитата Сообщение от Psilon Посмотреть сообщение
Оу, мы уже на ты.
- хороше вам за 30-гик?Если нет то нечего вообще тут просить меня выкать - я сам как бы не маленький (уже детей воспитываю), ещё выкать кому то буду, кто кому ещё вы должен говорить!

0
171 / 104 / 25
Регистрация: 17.10.2010
Сообщений: 1,146
11.09.2012, 21:32  [ТС] 19
-=ЮрА=- от души огромное спасибо, все по полочкам разложил и про экстремум, производную и раскладка всех формул. А то в книге у автора ни хрена не понятно откуда че берется, у меня в голове каша была. Сейчас все стало проясняться.
0
Заблокирован
Автор FAQ
11.09.2012, 21:39 20
Лучший ответ Сообщение было отмечено как решение

Решение

isaak, всегда пожалуйста!Скажу, что книга та очень интересная в плане задачек и изложенного материала Просто излагать физику в книге по математике не принято, обычно подают готовые формулы с весьма и весьма лаконичным разъяснениями, я бы тебе советовал вооружится ещё учебником по физике с разделом механика и кинематика и тогда бы разбираться было бы легче
3
11.09.2012, 21:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.09.2012, 21:39
Помогаю со студенческими работами здесь

Математический пример.как?
Ребят помогите пожалуйста, кому несложно. Нужно написать код с++ для вот этого чуда. Я пробовал не...

Неправильный математический расчёт
int tempInt = 0; int temp23 = (250*sizeof(char))+(sizeof(int)*5); tempInt = (0 / temp23); ...

Как написать математический пример
Как написать этот пример на С++ ? n П X1=2; i=1 Xi=0.5*Xi-1 Вот что...

Записать математический пример программно
Ребят, дело пустяковое, но я не понимаю в чем у меня ошибка. Вот этот пример - функция. Как мне...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru