Радиотехника / ФЗО ОАИП контрольная работа №1 11 вариант
.docx
Контрольная работа № 1
по ОАиП
студента 1 курса ФЗО БГУИР
специальности Радиотехника
-
Вычислить выражение, при заданных исходных данных. Сравнить полу-
ченное значение с укаханным правильным результатом.

#include <iostream>
#include <cmath>
using namespace std;
int main() //visual c++ 2010
{
double x,y,z,a,b,c,d,s;
cout << "Vvedite x: ";
cin >> x;
cout << "Vvedite y: ";
cin >> y;
cout << "Vvedite z: ";
cin >> z;
a=pow(y,pow(fabs(x),1/3.));
b=pow(cos(y),3);
c=fabs(x-y)*(1 + pow(sin(z),2));
d=exp(fabs(x-y))+x/2;
s=a+b*(c/d);
cout << "Result s= " << s << endl;
system("pause");
return 0;
}
Ответ: 0.712201
2. При выполнении задания предусмотреть выбор вида функции f(x): sh(x), x2
или ex. Предусмотрите вывод информации, показывающий, по какой ветви про-
изводились вычисления.

int main() //visual c++ 2010
{
double x,y,a,f,s;
int k;
cout << "Vvedite x: "; cin >> x;
cout << "Vvedite y: "; cin >> y;
cout << "Vuiberite f: 1 - sh(x), 2 - x^2, 3 - e^x : "; cin >> k;
switch(k)
{
case 1: f=sinh(x); break;
case 2: f=pow(x,2); break;
case 3: f=exp(x); break;
default: cout << "Ne vuibrana funkciya ";
system("pause"); return 1;
}
a = x*y;
if (x=0) s = pow(f,2) + sin(pow(y,2));
else if (a<0) s = log10(pow(f,2)*y);
else if (a>0) s = tan(f)+x/pow(y,1/3.);
cout << "RESULT = " << s << endl;
system("pause");
return 0;
}
-
Вывести на экран таблицу значений функции Y(x) и ее разложения в ряд
S(x) для x, изменяющегося от a до b с шагом h=(b-a)/10.

#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{
double a,b,h,x,y,s,p;
int n,i;
//cout << "Vvedite a,b,h,n" << endl;
//cin>>a>>b>>h>>n;
a=0.1; b=1; h=(b-a)/10; n=100;
x=a;
do
{
p=s=1;
for (i=1;i<=n;i++)
{
p*=(3/2)*pow(x,2);
s-=p;
}
y=(1-pow(x,2)/2)*cos(x)-x/2*sin(x);
cout << setw(15) << x << setw(15) << y << setw(15) << s << endl;
x+=h;
}
while (x<=b+h/2);
cout << endl;
system("pause");
return 0;
}
4. Даны два массива. Найти наименьшие среди тех элементов первого
массива, которые не входят во второй массив.
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int a[]={5,1,6,3};
int b[]={11,18,5,8};
int n;
for(int i=0; i<4; i++)
{
for(int j=0; j<4; j++)
{
if( a[i] == b[j])
{
n = a[i];
for(int i=0; i<4; i++)
{
if(a[i]<n){cout << a[i];cout << "\n";}
}
}
}
}
system("pause");
return 0;
}
Ответ: 1,3
5. Для матрицы размером NxM вывести на экран все ее седловые точки.
Элемент матрицы называется седловой точкой, если он является наименьшим в
своей строке и одновременно наибольшим в своем столбце, или наоборот.
В работе память для массива должна выделятся динамически.
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main() //visual c++ 10.0
{
int i,j,N,M;
cout << "Vvedite razmer matrici N x M" << endl;
cin >> N;
cout << "x" << endl;
cin >> M;
double **umas2;
umas2=new double*[N];
for(i=0; i<N; i++)
umas2[i]=new double[M];
//Заполнение матрицы
for(i=0; i<N; i++)
for(j=0; j<M; j++)
{
cout<<"umas2["<< i <<"]["<< j <<"]->";
cin>>umas2[i][j];
}
//Вывод
cout << "Matrica" << endl;
for(i = 0; i < N; i++)
{
for(j = 0; j < M; j++)
cout << setw(5) << umas2[i][j];
cout << endl;
}
double vmin[10],vmax[10],gmin[10],gmax[10];
int x,y,z,k;
for (x=0; x<M; x++){
for (i=0; i<N; i++){
for (j=0; j<N; j++)
{
double min=umas2[0][x];
if (umas2[i][x]<=min){
vmin[x] = umas2[i][x];
z=i;
}
double max=umas2[0][x];
if (umas2[j][x]>=max){
vmax[x] = umas2[j][x];
}
}
}
}
for (y=0; y<N; y++){
for (i=0; i<M; i++){
double min=umas2[y][0];
if (umas2[y][i]<=min){
gmin[y] = umas2[y][i];
}
}
double max=umas2[y][0];
for (j=0; j<M; j++)
{
if (umas2[y][j]>=max)
{
gmax[y] = umas2[y][j];
k=j;
}
}
}
for (i=0; i<N; i++)
for (j=0; j<M; j++)
{
if(gmin[j]==vmax[i] && gmax[j]!=gmin[j] ){
cout << gmin[j] << "[" << z << "]" << "[" << j << "]" << endl;
}else if(gmax[j]==vmin[i] && vmin[i]!=vmax[i]){
cout << gmax[j] << "[" << j << "]" << "[" << k << "]" << endl;
}
}
for(i=0; i<N; i++)
delete []umas2[i];
delete []umas2;
umas2=NULL;
system("pause");
return 0;
}
6. Дана строка символов, состоящая из произвольного текста на английском
языке, слова разделены пробелами. Вывести на экран слова этого текста в по-
рядке, соответствующем латинскому алфавиту.
#include <iostream>
#include <string>
using namespace std;
char text[] = "There are two types of standard transistors, NPN and PNP, with different circuit symbols. The letters refer to the layers of semiconductor material used to make the transistor. Most transistors used today are NPN because this is the easiest type to make from silicon. If you are new to electronics it is best to start by learning how to use NPN transistors.";
char *stext = strlwr(text);
char seps[] = " ,\t\n.";
char *result,*resul[200];
int main() //visual c++ 10.0
{
int t = 0;
result = strtok( stext, seps );
while( result )
{
resul[t++] = result;
result = strtok( NULL, seps );
}
t = 0;
while(resul[++t]){t;
}
char* x;
for( int i=0; i < t; i++) {
for( int j = t-1; j > i; j-- ) {
if (strcmp(resul[j-1],resul[j])>0){
x=resul[j-1];
resul[j-1]=resul[j];
resul[j]=x;
}
}
}
for(int y = 0; y<t; y++)
{cout << resul[y] << endl;}
system("pause");
return 0;
}
7. Ведомость абитуриентов, сдавших вступительные экзамены в универ-
ситет, содержит: Ф.И.О., адрес, оценки. Определить количество абитуриентов,
проживающих в г.Минске и сдавших экзамены со средним баллом не ниже 4.5,
вывести их фамилии в алфавитном порядке.
#include <iostream>
#include <string>
using namespace std;
int main () //visual c++ 2010
{
struct strc{
char fio[80];
char adr[40];
int otc[7];
double sb;
} mstud[100];
int nst, i, j;
cout << "Vvedite kol-vo stud" << endl;
cin >> nst;
for (i=0; i < nst; i++)
{
cout << "Vvedite FIO ";
cin >> mstud[i].fio;
cout << "Vvedite adress(City) ";
cin >> mstud[i].adr;
cout << "Vvedite otcenki (7) " << endl;
mstud[i].sb=0;
for (j=0; j<7; j++)
{
cin >> mstud[i].otc[j];
mstud[i].sb+=mstud[i].otc[j]/7.;
}
}
strc stemp;
for (i=0; i < nst; i++)
for( j = nst-1; j > i; j-- )
{
if (strcmp(mstud[j-1].fio,mstud[j].fio) > 0){
stemp=mstud[j-1];
mstud[j-1]=mstud[j];
mstud[j]=stemp;
}
}
cout << "FIO sredn.ocenka" << endl;
for (i=0; i < nst; i++)
{
if(strstr(mstud[i].adr,"minsk") && mstud[i].sb>4.5)
cout << mstud[i].fio << " " <<mstud[i].sb << endl;
}
system("pause");
return 0;
}
8. В вывести на экран таблицу значений функции Y(x) и ее разложения в ряд
S(x) с точностью ε. Вывести число итераций, необходимое, для достижения за-
данной точности. Вычисление S(x) и Y(x) оформить в виде функций.

#include <iostream>
#include <math.h>
#include <iomanip>
using namespace std;
typedef double (*uf)(double, double, int &);
void tabl(double, double, double, double, uf);
double y(double, double, int &);
double s(double, double, int &);
int main () //visual c++ 2010
{
cout << setw(8) <<"x"<< setw(15) <<"y(x)"<< setw(10) << "k" << endl;
tabl(-1,1.3,0.1,0.00001,y);
cout << endl;
cout << setw(8) <<"x"<< setw(15) <<"s(x)"<< setw(10) << "k" <<endl ;
tabl(-1,1.3,0.1,0.00001,s);
system("pause");
return 0;
}
void tabl(double a, double b, double h, double eps, uf fun)
{
int k=0;
double sum;
for (double x=a; x<b+h/2; x+=h)
{
sum=fun(x,eps,k);
cout << setw(8) << x << setw(15) << sum << setw(10) << k << endl;
}
}
double y(double x, double eps, int &k)
{
return (2*x*sin(x)-2+cos(x))/4;
}
double s(double x, double eps, int &k)
{
double c,sum;
sum=c=x;
k=2;
while (fabs(c)>eps)
{
c=pow(double(-1),k)*((cos(k*x))/(pow(double(k),2)-1));
sum+=c;
k++;
}
return sum;
}
