Все файлы одним архивом: zadan.zip 2.5 кБ
Задание 1
Для примера была выбрано следующее составное арифметическое выражение:
func=2*x+3*y при x func=10*x+10*y при x func=x+y+10 при x1
func=x-2*y при x=2 y1
func=x-y при x>2 y2 y=1
func=x+10 при x>2 y>1
func=x-2*y при x=2 y1
func=x-y при x>2 y2 y=1
func=x+10 при x>2 y>1
Параметры циклов подобраны так:
По x начало 0, конец 4, шаг 1
По y начало 0, конец 2, шаг 2
#include
#define y0 1.
#define x0 2.
// функция для составного арифметического выражения
double function( double x, double y, char** vetv, char** funcname) {
if(yif(x*funcname="2*x+3*y";
*vetv="xx0 y return x-y;
}
}
else if(y==y0) {
if(x *funcname="10*x+10*y";
*vetv="xx0 y=y0";
return 2*x-y;
}
}
else { //y>y0
if(x *funcname="x+y+10";
*vetv="xy0";
return 10*x+10*y;
}
else if(x==x0) {
*funcname="3*x-3*y-3";
*vetv="x=x0 y>y0";
return 3*x-3*y-3;
}
else { // x>x0
*funcname="x+10";
*vetv="x>x0 y>y0";
return x+10;
}
}
}
void main() {
char* vetv_out;
char* funcname_out;
double x,y,func;
double first_x,last_x,step_x;
double first_y,last_y,step_y;
printf("Input first value of x:");
scanf("%lf",&first_x);
printf("Input last value of x:");
scanf("%lf",&last_x);
printf("Input step of x:");
scanf("%lf",&step_x);
printf("\nInput first value of y:");
scanf("%lf",&first_y);
printf("Input last value of y:");
scanf("%lf",&last_y);
printf("Input step of y:");
scanf("%lf",&step_y);
printf("\nResults: x0=%.0f y0=%.0f",x0,y0);
for(x=first_x; xfor(y=first_y; y
func=function(x,y,&vetv_out,&funcname_out);
printf("\nx=%.0f y=%.0f func=%-9s func=%3.0f %7s",x,y,funcname_out,func,vetv_out);
}
}
}
#define y0 1.
#define x0 2.
// функция для составного арифметического выражения
double function( double x, double y, char** vetv, char** funcname) {
if(yif(x*funcname="2*x+3*y";
*vetv="xx0 y return x-y;
}
}
else if(y==y0) {
if(x *funcname="10*x+10*y";
*vetv="xx0 y=y0";
return 2*x-y;
}
}
else { //y>y0
if(x *funcname="x+y+10";
*vetv="xy0";
return 10*x+10*y;
}
else if(x==x0) {
*funcname="3*x-3*y-3";
*vetv="x=x0 y>y0";
return 3*x-3*y-3;
}
else { // x>x0
*funcname="x+10";
*vetv="x>x0 y>y0";
return x+10;
}
}
}
void main() {
char* vetv_out;
char* funcname_out;
double x,y,func;
double first_x,last_x,step_x;
double first_y,last_y,step_y;
printf("Input first value of x:");
scanf("%lf",&first_x);
printf("Input last value of x:");
scanf("%lf",&last_x);
printf("Input step of x:");
scanf("%lf",&step_x);
printf("\nInput first value of y:");
scanf("%lf",&first_y);
printf("Input last value of y:");
scanf("%lf",&last_y);
printf("Input step of y:");
scanf("%lf",&step_y);
printf("\nResults: x0=%.0f y0=%.0f",x0,y0);
for(x=first_x; xfor(y=first_y; y
func=function(x,y,&vetv_out,&funcname_out);
printf("\nx=%.0f y=%.0f func=%-9s func=%3.0f %7s",x,y,funcname_out,func,vetv_out);
}
}
}
Результат работы программы
Input first value of x:0
Input last value of x:4
Input step of x:2
Input first value of y:0
Input last value of y:2
Input step of y:1
Results: x0=2 y0=1
x=0 y=0 func=2*x+3*y func= 0 x x=0 y=1 func=10*x+10*y func= 10 x x=0 y=2 func=x+y+10 func= 20 xy0
x=2 y=0 func=x-2*y func= 2 x=x0 yy0
x=4 y=0 func=x-y func= 4 x>x0 yx0 y=y0
x=4 y=2 func=x+10 func= 14 x>x0 y>y0
Input last value of x:4
Input step of x:2
Input first value of y:0
Input last value of y:2
Input step of y:1
Results: x0=2 y0=1
x=0 y=0 func=2*x+3*y func= 0 x x=0 y=1 func=10*x+10*y func= 10 x x=0 y=2 func=x+y+10 func= 20 xy0
x=2 y=0 func=x-2*y func= 2 x=x0 yy0
x=4 y=0 func=x-y func= 4 x>x0 yx0 y=y0
x=4 y=2 func=x+10 func= 14 x>x0 y>y0
Задание 2
#include
void main() {
double multiplier=1.;
int negative_counter=0;
int max_index_i,max_index_j;
double max_value=-1.79769e+308; // минимальное значение для double
double a[6][4];
FILE* f=fopen("mass.txt","r");
for(int i=0; ifor(int j=0; jfscanf(f,"%lf",&a[i][j]);
}
}
fclose(f);
for(int i=0; ifor(int j=0; jprintf("%5.1f ",a[i][j]);
}
printf("\n");
}
for(int i=0; ifor(int j=0; j2) multiplier*=a[i][j];
if(a[i][j]max_value) {
max_value=a[i][j];
max_index_i=i;
max_index_j=j;
}
}
}
printf("(a) Product of elements, which modulus > 2: %.2f\n",multiplier);
printf("(b) Number of negative elements: %d\n",negative_counter);
printf("(c) Indexes of the greatest elements: %d,%d\n",max_index_i,max_index_j);
}
void main() {
double multiplier=1.;
int negative_counter=0;
int max_index_i,max_index_j;
double max_value=-1.79769e+308; // минимальное значение для double
double a[6][4];
FILE* f=fopen("mass.txt","r");
for(int i=0; ifor(int j=0; jfscanf(f,"%lf",&a[i][j]);
}
}
fclose(f);
for(int i=0; ifor(int j=0; jprintf("%5.1f ",a[i][j]);
}
printf("\n");
}
for(int i=0; ifor(int j=0; j2) multiplier*=a[i][j];
if(a[i][j]max_value) {
max_value=a[i][j];
max_index_i=i;
max_index_j=j;
}
}
}
printf("(a) Product of elements, which modulus > 2: %.2f\n",multiplier);
printf("(b) Number of negative elements: %d\n",negative_counter);
printf("(c) Indexes of the greatest elements: %d,%d\n",max_index_i,max_index_j);
}
Исходный файл с матрицей mass.txt
1.3 5.4 2.5 0.3
-3.7 1.7 8.8 0.2
-1.5 0.3 2.6 0.2
4.7 0.4 1.6 1.1
0.1 -3.0 0.7 1.2
1.8 1.2 1.5 2.9
-3.7 1.7 8.8 0.2
-1.5 0.3 2.6 0.2
4.7 0.4 1.6 1.1
0.1 -3.0 0.7 1.2
1.8 1.2 1.5 2.9
Результат работы программы
1.3 5.4 2.5 0.3
-3.7 1.7 8.8 0.2
-1.5 0.3 2.6 0.2
4.7 0.4 1.6 1.1
0.1 -3.0 0.7 1.2
1.8 1.2 1.5 2.9
(a) Product of elements, which modulus > 2: 46731.38
(b) Number of negative elements: 3
(c) Indexes of the greatest elements: 1,2
-3.7 1.7 8.8 0.2
-1.5 0.3 2.6 0.2
4.7 0.4 1.6 1.1
0.1 -3.0 0.7 1.2
1.8 1.2 1.5 2.9
(a) Product of elements, which modulus > 2: 46731.38
(b) Number of negative elements: 3
(c) Indexes of the greatest elements: 1,2
Задание 3
#include
#include
typedef struct { double x,y; } point;
typedef struct { double a,b,c; } line;
line make_line( point A, point B) {
line m;
m.a=B.y-A.y;
m.b=A.x-B.x;
m.c=A.y*(B.x-A.x)-A.x*(B.y-A.y);
return m;
}
void print_line( line m ) {
printf("%.2lf*x%+.2lf*y%+.2lf=0\n",m.a,m.b,m.c);
}
void print_line_in_segments( line m ) {
double div_x=-m.c/m.a;
double div_y=-m.c/m.b;
char sign_x=' ';
if(div_x char sign_y='+';
if(div_y
printf("%cx/%.2lf%cy/%.2lf=1\n",sign_x,fabs(div_x),sign_y,fabs(div_y));
}
point centre_of_gravity(line m) {
point p;
p.x=-m.c/m.a/3.; // центр тяжести с координатами 1/3 от стороны треугольника
p.y=-m.c/m.b/3.;
return p;
}
double distance(point p, line m){
return fabs(m.a*p.x+m.b*p.y+m.c)/sqrt(m.a*m.a+m.b*m.b);
}
void main() {
point P={1,3};
// тут нужно поставить координаты точек в соответствии с вариантом 3
// у меня просто три пары произвольных точек
point A1={-1,-4}, B1={-3.1,-0.9};
point A2={0.5,2.5}, B2={1.5,1.1};
point A3={-0.7,14}, B3={7,-1.4};
line m1=make_line(A1,B1);
line m2=make_line(A2,B2);
line m3=make_line(A3,B3);
point centre1=centre_of_gravity(m1);
point centre2=centre_of_gravity(m2);
point centre3=centre_of_gravity(m3);
printf("Equations of line\n");
print_line(m1);
print_line(m2);
print_line(m3);
printf("\n(a) Equations of line in segments\n");
print_line_in_segments(m1);
print_line_in_segments(m2);
print_line_in_segments(m3);
printf("\n(b) Distance from point (1,3) to line\n");
printf("%lf\n",distance(P,m1));
printf("%lf\n",distance(P,m2));
printf("%lf\n",distance(P,m3));
printf("\n(c) Coordinates of centre of gravity\n");
printf("{%lf,%lf}\n",centre1.x,centre1.y);
printf("{%lf,%lf}\n",centre2.x,centre2.y);
printf("{%lf,%lf}\n",centre3.x,centre3.y);
}
#include
typedef struct { double x,y; } point;
typedef struct { double a,b,c; } line;
line make_line( point A, point B) {
line m;
m.a=B.y-A.y;
m.b=A.x-B.x;
m.c=A.y*(B.x-A.x)-A.x*(B.y-A.y);
return m;
}
void print_line( line m ) {
printf("%.2lf*x%+.2lf*y%+.2lf=0\n",m.a,m.b,m.c);
}
void print_line_in_segments( line m ) {
double div_x=-m.c/m.a;
double div_y=-m.c/m.b;
char sign_x=' ';
if(div_x char sign_y='+';
if(div_y
printf("%cx/%.2lf%cy/%.2lf=1\n",sign_x,fabs(div_x),sign_y,fabs(div_y));
}
point centre_of_gravity(line m) {
point p;
p.x=-m.c/m.a/3.; // центр тяжести с координатами 1/3 от стороны треугольника
p.y=-m.c/m.b/3.;
return p;
}
double distance(point p, line m){
return fabs(m.a*p.x+m.b*p.y+m.c)/sqrt(m.a*m.a+m.b*m.b);
}
void main() {
point P={1,3};
// тут нужно поставить координаты точек в соответствии с вариантом 3
// у меня просто три пары произвольных точек
point A1={-1,-4}, B1={-3.1,-0.9};
point A2={0.5,2.5}, B2={1.5,1.1};
point A3={-0.7,14}, B3={7,-1.4};
line m1=make_line(A1,B1);
line m2=make_line(A2,B2);
line m3=make_line(A3,B3);
point centre1=centre_of_gravity(m1);
point centre2=centre_of_gravity(m2);
point centre3=centre_of_gravity(m3);
printf("Equations of line\n");
print_line(m1);
print_line(m2);
print_line(m3);
printf("\n(a) Equations of line in segments\n");
print_line_in_segments(m1);
print_line_in_segments(m2);
print_line_in_segments(m3);
printf("\n(b) Distance from point (1,3) to line\n");
printf("%lf\n",distance(P,m1));
printf("%lf\n",distance(P,m2));
printf("%lf\n",distance(P,m3));
printf("\n(c) Coordinates of centre of gravity\n");
printf("{%lf,%lf}\n",centre1.x,centre1.y);
printf("{%lf,%lf}\n",centre2.x,centre2.y);
printf("{%lf,%lf}\n",centre3.x,centre3.y);
}
Результат работы программы
Equations of line
3.10*x+2.10*y+11.50=0
-1.40*x-1.00*y+3.20=0
-15.40*x-7.70*y+97.02=0
(a) Equations of line in segments
-x/3.71-y/5.48=1
x/2.29+y/3.20=1
x/6.30+y/12.60=1
(b) Distance from point (1,3) to line
5.581774
0.697486
3.398823
(c) Coordinates of centre of gravity
{-1.236559,-1.825397}
{0.761905,1.066667}
{2.100000,4.200000}
3.10*x+2.10*y+11.50=0
-1.40*x-1.00*y+3.20=0
-15.40*x-7.70*y+97.02=0
(a) Equations of line in segments
-x/3.71-y/5.48=1
x/2.29+y/3.20=1
x/6.30+y/12.60=1
(b) Distance from point (1,3) to line
5.581774
0.697486
3.398823
(c) Coordinates of centre of gravity
{-1.236559,-1.825397}
{0.761905,1.066667}
{2.100000,4.200000}
Все файлы одним архивом: zadan.zip 2.5 кБ