Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.85
isaak
103 / 40 / 9
Регистрация: 17.10.2010
Сообщений: 670
#1

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

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

Доброго время суток. Нужно написать программу. Математический маятник совершает колебания по закону http://www.cyberforum.ru/cgi-bin/latex.cgi?x(t) = A* sin(\omega *t + {\omega }_{0}). Частота http://www.cyberforum.ru/cgi-bin/latex.cgi?\omega маятника известна. В начальный момент координата x в k раз меньше амплитуды A. В какой момент времени T отклонение маятника максимально? Написать программу для определения параметра T при условии, что параметры http://www.cyberforum.ru/cgi-bin/latex.cgi?\omega и k вводятся пользователем. При составлении программы воспользоваться соотношениями http://www.cyberforum.ru/cgi-bin/latex.cgi?{\varphi }_{0}=\arcsin (1/k) и http://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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.09.2012, 22:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Математический маятник (C++):

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

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

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

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

Математический пример, используем if, switch - C++
Задание: x*x Если 0&lt;=x&lt;=3 f(x)= { 4 В противном случае #include &quot;stdafx.h&quot; #include...

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

26
Psilon
Master of Orion
Эксперт .NET
5913 / 4810 / 634
Регистрация: 10.07.2011
Сообщений: 14,409
Записей в блоге: 5
Завершенные тесты: 4
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
isaak
103 / 40 / 9
Регистрация: 17.10.2010
Сообщений: 670
08.09.2012, 23:47  [ТС] #3
При вводе значений выводит следующий результат. Не понимаю в чем ошибка?????
0
Миниатюры
Математический маятник  
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6512 / 3149 / 309
Регистрация: 04.12.2011
Сообщений: 8,719
Записей в блоге: 5
09.09.2012, 00:17 #4
Хм... извините не вчитался сразу.
0
Psilon
Master of Orion
Эксперт .NET
5913 / 4810 / 634
Регистрация: 10.07.2011
Сообщений: 14,409
Записей в блоге: 5
Завершенные тесты: 4
09.09.2012, 00:21 #5
isaak, мб угол больше pi/2?
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6512 / 3149 / 309
Регистрация: 04.12.2011
Сообщений: 8,719
Записей в блоге: 5
09.09.2012, 00:31 #6
isaak, if(omega=0) и if(omega==0) разные вещи.
Забавно Ваша main реагирует на череду return'ов, не видел такого раньше. Есть же и другие способы организации ввода. )

Не по теме:

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

0
Psilon
Master of Orion
Эксперт .NET
5913 / 4810 / 634
Регистрация: 10.07.2011
Сообщений: 14,409
Записей в блоге: 5
Завершенные тесты: 4
09.09.2012, 00:36 #7
C++
1
2
3
4
5
6
if(!omega) // контроль введенных данных
    {
        cout<<"Такого момента времени не существует\n";
        system("pause");
        return 1;
    }
так попробуй
1
isaak
103 / 40 / 9
Регистрация: 17.10.2010
Сообщений: 670
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
Psilon
Master of Orion
Эксперт .NET
5913 / 4810 / 634
Регистрация: 10.07.2011
Сообщений: 14,409
Записей в блоге: 5
Завершенные тесты: 4
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
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6512 / 3149 / 309
Регистрация: 04.12.2011
Сообщений: 8,719
Записей в блоге: 5
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
isaak
103 / 40 / 9
Регистрация: 17.10.2010
Сообщений: 670
09.09.2012, 14:23  [ТС] #11
Psilon спасибо огромное!!!! У меня компилятор Visual Studio 2010. Скорей всего вы правы, чтобы T > 0 нужно брать абсолютное значение выражения.
0
Psilon
Master of Orion
Эксперт .NET
5913 / 4810 / 634
Регистрация: 10.07.2011
Сообщений: 14,409
Записей в блоге: 5
Завершенные тесты: 4
09.09.2012, 14:25 #12
isaak, всегда пожалуйста
0
-=ЮрА=-
Заблокирован
Автор FAQ
10.09.2012, 12:46 #13
Цитата Сообщение от isaak Посмотреть сообщение
какой момент времени T отклонение маятника максимально?
http://www.cyberforum.ru/cgi-bin/latex.cgi?x(t) = A*sin(\omega *t + {\varphi }_{0})
http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{d}{dt}x(t) = A*\omega*cos(\omega *t + {\varphi }_{0})
Определяем экстремум функции т.е x'(t) = 0
http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{d}{dt}x(t) = 0 = cos(\omega *t + {\varphi }_{0})
http://www.cyberforum.ru/cgi-bin/latex.cgi?\omega *t + {\varphi }_{0} = arccos(0) =\frac{ \pi }{2}
http://www.cyberforum.ru/cgi-bin/latex.cgi?t = \frac{\frac{ \pi }{2} - {\varphi }_{0}}{\omega }
Ответ : максимальное отклонение маятника соответсвует моменту времени http://www.cyberforum.ru/cgi-bin/latex.cgi?t = \frac{\frac{ \pi }{2} - {\varphi }_{0}}{\omega }
1
Psilon
Master of Orion
Эксперт .NET
5913 / 4810 / 634
Регистрация: 10.07.2011
Сообщений: 14,409
Записей в блоге: 5
Завершенные тесты: 4
10.09.2012, 15:39 #14
-=ЮрА=-, вы смотрите вообще? У него в выложенных исходниках и так формула присутствует
C++
1
T= ((PI/2) - phi0)/omega;
Проблема была немного в другом (потрудились бы посмотреть код прежде чем срывать покровы )
0
-=ЮрА=-
Заблокирован
Автор FAQ
10.09.2012, 18:12 #15
Psilon, я что-то недопонял тебя,кто что срывал и с кого?Ты вобще знаком с понятием производная?
0
10.09.2012, 18:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.09.2012, 18:12
Привет! Вот еще темы с ответами:

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

Что сделать, чтобы математический парсер заработал? - C++
#include &quot;stdafx.h&quot; #ifndef PARSER_H_INCLUDED #define PARSER_H_INCLUDED #include &lt;stdio.h&gt; #include &lt;string.h&gt; #include...

Элементарный математический код, но почему то всегда равно 0,0000 - C++
Элементарный математический код, но почему то всегда равно 0,0000. Тут я еще использую старые функции ввода-вывода, потому что так надо на...

Математический анализ кода программы. Как работает rand()? - C++
Помогите, пожалуйста, с математическим анализом кода программы. #include &lt;iostream&gt; #include &lt;cstring&gt; #include &lt;ctime&gt; ...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.