Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

код_к_лабораторным

.pdf
Скачиваний:
124
Добавлен:
05.07.2020
Размер:
182.62 Кб
Скачать

1.2. Вычисление таблицы значений функции одного аргумента.

Составить программу вычисления таблицы значений функции 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");

}

1.6. Вычисление таблицы значений функции одного аргумента с выбором формулы.

Составить программу вычисления 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

for (i=0; i<10; i++)

{if (M_PI*A[i][1]*A[i][1]/4-M_PI*A[i][0]*A[i][0]/4>a*b) {d=A[i][1];

cout<<"d="<<d<<'\n';

s=s+1;

}

}

cout<<"\ns="<<s; return 0;

system ("pause");

}

2.5.2 Обработка массивов переменной длины.

Дана матрица, состоящая из n строк и n столбцов или одномерные массивы из n элементов каждый. Составить программу для получения и вывода указанных в условии результатов и самих массивов, если изменялись какие-либо их элементы. Алгоритм любой задачи может быть составлен с использованием единственного двукратного цикла.

Заменить в матрице на 1 каждый положительный элемент, на 0 - каждый отрицательный. Для каждого столбца найти среднее арифметическое исходных значений элементов.

#include <iostream> using namespace std; int main ()

{

float A[50][50]; float sum,srednee; int i,j,n;

cout<<"Vvedite n\n";

cin>>n;

cout<<"\nVvedite n*n elementov matricy A\n"; for (i=0; i<n; i++)

for (j=0; j<n; j++) cin>>A[i][j];

for (j=0; j<n; j++)

{

sum=0;

for (i=0; i<n; i++)

{

sum=sum+A[i][j]; if (A[i][j]>0) A[i][j]=1;

else

if (A[i][j]<0) A[i][j]=0;

}

srednee=sum/n;

cout<<"srednee stolbca="<<srednee<<'\n';

}

for (i=0; i<n; i++)

6

{

for (j=0; j<n; j++) cout<<A[i][j]<<" "; cout<<'\n';

}

system ("pause");

}

2.5.3 Разработка алгоритмов и программ нисходящим способом.

Разработать программу нисходящим способом, предполагая заданной матрицу A из 5 строк и 5 столбцов или одномерные массивы указанной длины.

Кроме матрицы A, даны элементы C1,C2,...,C5. Если значения всех этих элементов заключены между заданными значениями P и T, получить значения элементов X1,X2,..., X5 по формуле:

#include <iostream> using namespace std; int main ()

{

float A[5][5],C[5],X[5]; float P,T;

int istina,i,k;

cout<<"Vvedite posledovatelnost C\n"; for (i=0; i<5; i++)

cin>>C[i]; cout<<"Vvedite P,T\n"; cin>>P>>T;

cout<<"\nVvedite 5*5 elementov matricy A\n"; for (i=0; i<5; i++)

for (k=0; k<5; k++) cin>>A[i][k]; istina=0;

for (i=0; i<5; i++) if (P<C[i])

if (C[i]<T) istina=istina+1; if (istina==5)

for (i=0; i<5; i++)

{

X[i]=0;

for (k=0; k<5; k++) X[i]=X[i]+A[i][k]; cout<<"X["<<i<<"]="<<X[i]<<'\n';

7

}

return 0;

system ("pause");

}

4.2.3 Использование имени массива как параметра функции.

Для получения результата составить функцию, входными параметрами которой являются два массива X1,X2, ...,Xn и Y1,Y2,...,Yn с заданным числом n элементов (или один из них) или матрица А из n строк и n столбцов. Кроме этого, разработать основную программу для отладки составленной функции.

Общее количество нулей в i-й и последней строке, i-м и последнем столбце матрицы A.

#include <iostream> using namespace std;

float FunctionNuli(float A[10][10], int i, int n)

{

int j,strokai,stolbeci,strokan,stolbecn,summa; strokai=0;

for (j=0; j<n; j++) if (A[i][j]==0) strokai++; stolbeci=0;

for (j=0; j<n; j++) if (A[j][i]==0) stolbeci++; strokan=0;

for (j=0; j<n; j++) if (A[n-1][j]==0) strokan++; stolbecn=0;

for (j=0; j<n; j++) if (A[j][n-1]==0) stolbecn++;

summa=strokai+stolbeci+strokan+stolbecn; if (A[i][i]==0)

summa--;

if (A[n-1][n-1]==0) summa--;

if (A[i][n-1]==0) summa--;

if (A[n-1][i]==0) summa--; return summa;

}

int main ()

{

float X[10][10],Y[10][10];

int x,y,i,j,summaX,summaY,g1,g2; cout<<"Vvedite nomer stroki g1\n"; cin>>g1;

cout<<"Vvedite x\n"; cin>>x;

cout<<"\nVvedite x*x elementov matricy X\n"; for (i=0; i<x; i++)

for (j=0; j<x; j++) cin>>X[i][j];

cout<<"Vvedite nomer stroki g2\n"; cin>>g2;

cout<<"Vvedite y\n"; cin>>y;

cout<<"\nVvedite y*y elementov matricy X\n"; for (i=0; i<y; i++)

8

for (j=0; j<y; j++) cin>>Y[i][j];

summaX=FunctionNuli(X,g1,x);

summaY=FunctionNuli(Y,g2,y);

cout<<"summaX="<<summaX<<'\n';

cout<<"summaY="<<summaY<<'\n'; system ("pause");

}

4.2.4 Использование формальных массивов в процедурах.

Составить процедуру, входными параметрами которой является матрица А из n строк и n столбцов, либо два массива B1,B2,...,Вn; C1,C2,...,Cm, либо один из них. Для проверки составленной процедуры разработать основную программу.

Значения наименьших элементов строк матрицы A. #include <iostream>

using namespace std;

void Naim(float A[10][10], int n, float Naim[10])

{float Q; int i,j;

for (i=1;i<n;i++)

{Q=A[i][0];

for (j=1;j<n;j++) if (A[i][j]<Q) Q=A[i][j]; Naim[i]=Q;

}

}

int main ()

{ float B[10][10],C[10][10],Q1[10],Q2[10]; int b,c,i,j;

cout<<"Vvedite b\n"; cin>>b;

cout<<"\nVvedite b*b elementov matricy B\n"; for (i=0; i<b; i++)

for (j=0; j<b; j++) cin>>B[i][j]; cout<<"Vvedite c\n"; cin>>c;

cout<<"\nVvedite c*c elementov matricy C\n"; for (i=0;i<c;i++)

for (j=0; j<c; j++) cin>>C[i][j]; Naim(B,b,Q1); cout<<"Q1"<<'\n'; for (i=0; i<b; i++) cout<<Q1[i]<<'\n';

9

Naim(C,c,Q2);

cout<<"Q2"<<'\n'; for (i=0; i<c; i++) cout<<Q2[i]<<'\n'; system ("pause");

}

4.2.5 Разработка подпрограммы с дальнейшим использованием ее по заданию.

Разработайте программу, создав предварительно подпрограмму (функцию или процедуру) с учетом условия задачи. Приведенные числа используйте для задания типов элементов и размеров массивов. Составить подпрограмму для определения минимального элемента матрицы. Используя данную подпрограмму, определить значение минимального элемента заданной матрицы Q и, если оно отлично от нуля, увеличить каждый элемент главной диагонали матрицы на модуль этого значения. В противном случае вывести сообщение “Элемент не равен нулю”.

#include <iostream> #include <cmath> using namespace std;

float Naim(float A[15][15], int n) { float naim;

int i,j; naim=A[0][0]; for (i=0;i<n;i++) for (j=0;j<n;j++) if (A[i][j]<naim) naim=A[i][j]; return naim;

}

int main ()

{

float Q[15][15]; float naim;

int x,i,j; cout<<"Vvedite x\n"; cin>>x;

cout<<"\nVvedite x*x elementov matricy Q\n"; for (i=0; i<x; i++)

for (j=0; j<x; j++) cin>>Q[i][j]; naim=Naim(Q,x); cout<<"naim="<<naim<<'\n'; if (naim==0)

10