Небольшая программа по решению уравнений - C (СИ)
Формулировка задачи:
Здравствуйте.
Недавно начал изучать с++ , опыт в программировании только на паскале.
Вот написал прогу ,что смог исправил ,столкнулся с проблемой при возведении в степень - pow ,как исправить?
по паскалевски там должно быть так q=q0*e^(-r^2/r0^2)
h= (2*B*Tm*u/Ta)^(1/2)*e^(-Ta/2*Tm^2)
Может есть другой более легкий способ возведения в степень \извлечение корня.
Вот ошибки кот выдает Visual C++:
warning C4627: #include <stdio.h>: пропущен при поиске использования предкомпилированного заголовка
Добавление директивы в "stdafx.h" или перестройка предкомпилированного заголовка
warning C4627: #include <math.h>: пропущен при поиске использования предкомпилированного заголовка
Добавление директивы в "stdafx.h" или перестройка предкомпилированного заголовка
error C2064: результатом вычисления фрагмента не является функция, принимающая 2 аргументов ( это про pow )
error C2064: результатом вычисления фрагмента не является функция, принимающая 2 аргументов...
Заранее спасибо
#include <stdio.h>
#include <math.h>
#include "stdafx.h"
int main()
{
double q=1,q0=2,e=3,r=4,r0=5;
double A=0.5,t=2,p=1,c=2,h=3, Tn=4,Tm=5;
double B=3,T=2,u=1,Ta=2;
int i=0;
while (i!=10)
{
q=q0*(pow (e,(-pow(r,2)/pow(r0,2))));
Tm=(A*q*t)/(p*c*h)+Tn ;
h=pow ( ( 2*B*Tm*u/Ta*pow(e,-Ta/2*pow(T,2)) ) , (1*1.0/2) );
A=A+B*h;
++i;
printf("Posle %d umpulsa\n", i);
printf("Tolshina plenku = %f\n",h);
printf("nogloshatelnaya sposobnostb=%f\n",A);
}
return 0;
}Решение задачи: «Небольшая программа по решению уравнений»
textual
Листинг программы
#include "stdafx.h"
#include <stdio.h>
#include "cmath"
int main()
{
double q,q0=37000000000,e=2.718,r=0,r0=0.0000002;
double A=0.5,t=0.00000001,p=7190,c=425,h0=0.00000006, Tn=293,Tm,b=80000000;
double B=0.00003,u=0.00000001,Ta=32500;
long double h;
int i=0;
while (r!=0.00004)
{
printf(" r=%d\n ", r);
printf ("+---|----------------|----------+\n") ;
printf (" | n | h | A |\n") ;
printf (" |---|----------------|----------|\n") ;
while (i!=10)
{
q=q0*(pow (e,(-pow(r,2)/pow(r0,2))));
Tm=(A*q*t)/(p*c*h0)+Tn ;
h=pow((2*B*Tm*u/Ta),(1*1.0/2))*pow(e,(-1*Ta/(2*Tm))) ;
A=A+b*h;
++i;
printf(" | %d ", i);
printf("| %+E",h);
printf(" | %f |\n",A);
}
printf (" +----|----------------|----------+\n") ;
r=r+0.000005;
}
scanf("%d",&q);
return 0;
}
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы
- Объявляются переменные: q, q0, e, r, r0, A, t, p, c, h0, Tn, Tm, b, B, u, Ta
- Объявляется переменная h типа long double
- Объявляется переменная i типа int
- Задаются начальные значения переменных
- В цикле while выполняется условие, пока значение переменной r не станет равным 0.00004
- В цикле while выполняется условие, пока значение переменной i не станет равным 10
- Вычисляется значение переменной q
- Вычисляется значение переменной Tm
- Вычисляется значение переменной h
- Вычисляется значение переменной A
- Выводится значение переменной h, значение переменной A и номер i
- Увеличивается значение переменной i на 1
- Увеличивается значение переменной r на 0.000005
- Если значение переменной i равно 10, то выполнение программы завершается и выводится сообщение об ошибке
- Вводится значение переменной q с клавиатуры
- Программа возвращает 0, что означает успешное завершение работы программы