Составить программу вычисления таблицы значений функции f(x) для N значений аргумента X, равномерно распределенных на отрезке [A,B].
#include <iostream> #include <cmath> using namespace std; int main ()
{
const double PI=3.14; double n,x,y,t,A,B,N; cout<<"\nVvedite A,B,N:"; cin>>A>>B>>N;
x=A;
t=0;
for (n=1; n<=N; n++) { x=x+t;
if (x==(1/3)) {
cout<<"\tn=" << n << "\tx=" << x << "\ty net" << endl;
}
else { y=log(sqrt(PI+abs(2-x)))/(3-1/x)+pow(x,1.5)*sin(1.4*x); cout<<"\tn=" << n << "\tx=" << x << "\ty=" << y << endl;
}
t=abs(B-A)/(N-1);
}
}
1.3.2 Накопление сумм и произведений.
Составить программу для вычисления результата по формуле. Для проверки программы задать
X=0,5; n=20.
#include <iostream> #include <cmath> using namespace std; int main()
{
float x,y,s,i; int k,n;
cout<<"Vvedite n,x:\n"; cin>>n>>x;
s=0;
for (k=1; k<=n; k++) { y=log(fabs(x+k))*log(fabs(x+k))*cos((k*k+x)/n); s=s+y;
}
i=exp(0.5*x)*s/3;
cout<<"itog="<<i;
system("pause");
}
1.4.2 Обработка одномерных массивов с использований ветвлений в теле цикла.
Разработать программу обработки одномерных массивов, используя единственный цикл.
Найти среднее арифметическое не равных нулю элементов заданного массива X1,X2,...,Xn и подсчитать число элементов с неотрицательными значениями (включая и равные нулю).
Первый вариант решения:
1
#include <iostream> using namespace std; int main ()
{
float X[50]; float s,sr; int k,i,n,N;
cout<<"Vvedite N\n";
cin>>N;
cout<<"\nVvedite massiv X iz N elementov\n"; s=0;
i=0;
k=0;
for (n=0; n<N; n++) { cin>>X[n];
if (X[n]>=0) k=k+1;
if (X[n]!=0)
{
s=s+X[n];
i=i+1;
}
}
sr=s/i;
cout<<"srednee ar="<<sr<<" chislo neotr="<<k; system ("pause");
return 0;
}
Второй вариант решения (с использованием указателей):
#include <iostream> using namespace std; int main ()
{
float X[50]; float s,sr; int k,i,n,N;
cout<<"Vvedite N\n";
cin>>N;
cout<<"\nVvedite massiv X iz N elementov\n"; s=0;
i=0;
k=0;
for (n=0; n<N; n++) cin>>*(X+n);
for (n=0; n<N; n++) { if (*(X+n)>=0) k=k+1;
if (*(X+n)!=0)
{
s=s+*(X+n);
i=i+1;
}
}
sr=s/i;
cout<<"srednee ar="<<sr<<" chislo neotr="<<k; system ("pause");
}
1.4.3 Нахождение экстремальных элементов в одномерных массивах.
Составить программу нахождения заданного экстремального элемента или его порядкового номера при заданном одномерном массиве А из n элементов.
Определить номер наибольшего из значений:
2
Первый вариант решения:
#include <iostream> #include <cmath> using namespace std; int main ()
{
float A[50]; float y,ymax; int i,N,nmax;
cout<<"Vvedite N\n";
cin>>N;
cout<<"\nVvedite N elementov massiva A\n"; for (i=0; i<N; i++)
cin>>A[i]; ymax=sqrt(exp(A[0]))-A[0]*A[0]; nmax=0;
for (i=1; i<N; i++)
{ y=sqrt(exp(A[i]))-A[i]*A[i]; if (ymax<y)
{
ymax=y;
nmax=i;
}
}
cout<<"nmax="<<nmax; system ("pause");
}
Второй вариант решения (с использованием указателей):
#include <iostream> #include <cmath> using namespace std; int main ()
{
float *A; float y,ymax; int i,N,nmax;
cout<<"Vvedite N\n";
cin>>N;
A=new float [N];
cout<<"\nVvedite N elementov massiva A\n"; for (i=0; i<N; i++)
cin>>*(A+i); ymax=sqrt(exp(*A))-(*A)*(*A); nmax=0;
for (i=1; i<N; i++)
{
y=sqrt(exp(*(A+i)))-(*(A+i))*(*(A+i)); if (ymax<y)
{
ymax=y;
nmax=i;
}
}
cout<<"nmax="<<nmax; delete [] A;
system ("pause");
}
1.5 Вычисление функции разложением ее в ряд.
3
Составить программу нахождения суммы ряда с заданной точностью E. Использовать рекуррентные соотношения при вычислении очередного элемента ряда. Для оценки правильности результата предусмотреть вычисление по контрольной формуле.
Вычисление суммы заканчивается, если модуль очередного слагаемого оказывается меньше заданного значения допустимой погрешности E, причем для этих рядов (при |X|< 1), абсолютная величина суммы всех отброшенных членов ряда при этом оказывается меньше E.
#include <iostream> #include <cmath> using namespace std; int main ()
{
float x,eps,fx,fx1,t; int i;
cout<<"Vvedite x, eps: \n"; cin>>x>>eps;
fx=0;
i=1;
t=x*x;
while (fabs(t)>eps)
{
fx=fx+t;
i=i+1; t=-t*x*(2*i-3)/(2*i+2);
}
fx1=8*(sqrt(pow(1+x,3))-1)/3-4*x; cout<<"fx="<<fx<<" fx1="<<fx1; system ("pause");
}
Составить программу вычисления N значений функции Y для X, изменяющегося от X1 с шагом dX. Для проверки правильности программы задать значения для A, X1 и dX из таблицы.
#include <iostream> #include <cmath> using namespace std; int main()
{
float x1,A,x,dx,y; int N,i;
cout<<"Vvedite A,N= "; cin>>A>>N;
x1=0;
dx=A/2;
cout<<"Argument x Function y\n"; x=x1;
4
for (i=1; i<=N; i++) { if (x<(4*A))
y=sqrt(16*A*A-(x-4*A)*(x-4*A));
else y=8*A*A*A/fabs((x-4*A)*(x-4*A)+4*A*A); cout<<fixed<<x<<" "<<y<<'\n';
x=x+dx;
}
system("pause");
}
2.1 Табулирование функции двух переменных.
Составить программу для вычисления таблицы значений заданной функции для N значений X, меняющихся от Xнач с заданным шагом HX, и M значений Z, меняющихся от Zнач с шагом HZ.
#include <iostream> #include <cmath> using namespace std; int main()
{
float x1,z1,x,hx,z,hz,y; int N,i,M,j;
cout<<"Vvedite x1,hx,N: "; cin>>x1>>hx>>N; cout<<"Vvedite z1,hz,M: "; cin>>z1>>hz>>M;
cout<<"Argument x Argument z Function y\n"; x=x1;
for (i=1; i<=N; i++) { z=z1;
for (j=1; j<=M; j++)
{
y=(pow(log(z),(2/3))+tan(sqrt(x*z)))*fabs(log(z/5)+1/3); cout<<fixed<<x<<" "<<z<<" "<<y<<'\n';
z=z+hz;
}
x=x+hx;
}
system("pause");
}
2.5.1 Обработка матриц с небольшим количеством строк или столбцов.
Составить программу для решения задачи с использованием двумерных массивов (матриц).
Дана матрица из 2 столбцов и 10 строк. Первый элемент каждой строки представляет диаметр внутренней, а второй - диаметр внешней окружности кольца. Отпечатать внешние диаметры тех колец, площадь которых больше площади прямоугольника с заданными сторонами, и число таких колец.
#include <iostream> #include <cmath> using namespace std; int main ()
{
float A[10][2]; float a,b,d; int i,j,s;
cout<<"Vvedite a,b\n"; cin>>a>>b;
cout<<"\nVvedite 10*2 elementov matricy A\n"; for (i=0; i<10; i++)
for (j=0; j<2; j++) cin>>A[i][j]; s=0;
5