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

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

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

Студворк — интернет-сервис помощи студентам
Доброго время суток. Нужно написать программу. Математический маятник совершает колебания по закону 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)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.09.2012, 22:36
Ответы с готовыми решениями:

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

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

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

26
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
08.09.2012, 23:02
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
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,329
08.09.2012, 23:47  [ТС]
При вводе значений выводит следующий результат. Не понимаю в чем ошибка?????
Миниатюры
Математический маятник  
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
09.09.2012, 00:17
Хм... извините не вчитался сразу.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
09.09.2012, 00:21
isaak, мб угол больше pi/2?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
09.09.2012, 00:31
isaak, if(omega=0) и if(omega==0) разные вещи.
Забавно Ваша main реагирует на череду return'ов, не видел такого раньше. Есть же и другие способы организации ввода. )

Не по теме:

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

0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
09.09.2012, 00:36
C++
1
2
3
4
5
6
if(!omega) // контроль введенных данных
    {
        cout<<"Такого момента времени не существует\n";
        system("pause");
        return 1;
    }
так попробуй
1
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,329
09.09.2012, 13:42  [ТС]
Цитата Сообщение от 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
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
09.09.2012, 14:12
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
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
09.09.2012, 14:14
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
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,329
09.09.2012, 14:23  [ТС]
Psilon спасибо огромное!!!! У меня компилятор Visual Studio 2010. Скорей всего вы правы, чтобы T > 0 нужно брать абсолютное значение выражения.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
09.09.2012, 14:25
isaak, всегда пожалуйста
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
10.09.2012, 12:46
Цитата Сообщение от 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
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
10.09.2012, 15:39
-=ЮрА=-, вы смотрите вообще? У него в выложенных исходниках и так формула присутствует
C++
1
T= ((PI/2) - phi0)/omega;
Проблема была немного в другом (потрудились бы посмотреть код прежде чем срывать покровы )
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
10.09.2012, 18:12
Psilon, я что-то недопонял тебя,кто что срывал и с кого?Ты вобще знаком с понятием производная?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
10.09.2012, 18:59
-=ЮрА=-, Оу, мы уже на ты. Ну ладно. Вы советуете выразить автору формулу, которая у него уже присутствует в коде, значит ты вообще не глядя "сказанул". Круто че
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
10.09.2012, 19:39
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

Не по теме:

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

0
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,329
11.09.2012, 21:32  [ТС]
-=ЮрА=- от души огромное спасибо, все по полочкам разложил и про экстремум, производную и раскладка всех формул. А то в книге у автора ни хрена не понятно откуда че берется, у меня в голове каша была. Сейчас все стало проясняться.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
11.09.2012, 21:39
Лучший ответ Сообщение было отмечено как решение

Решение

isaak, всегда пожалуйста!Скажу, что книга та очень интересная в плане задачек и изложенного материала Просто излагать физику в книге по математике не принято, обычно подают готовые формулы с весьма и весьма лаконичным разъяснениями, я бы тебе советовал вооружится ещё учебником по физике с разделом механика и кинематика и тогда бы разбираться было бы легче
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.09.2012, 21:39
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
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