Процедуры/функции

  • Автор темы crewww
  • Дата начала
C

crewww

#1
условие
Три фрагмента нижеприведенной программы, выделенные жирным курсивом, представляют собой решение одной и той же подзадачи для различных исходных данных – параметров этой подзадачи. Для подходящей подзадачи опишите процедуру (функцию) с параметрами и без глобальных переменных. Перепишите нижеприведенную программу в более компактной форме, используя операторы (этой) процедуры (вызовы функции) для реализации выделенных фрагментов

C++:
int main()
{
int i,j; double u,v,w,z,x,y,p,q,r,s,a[100],b[100],c[200],f[200];
//ввод (p,q,r,a,b,c)
for (j=0;j<200; j+=2)
{
s=r;
// фрагмент выделен жирным курсивом (начало 1 фрагмента)
x=p;y=cos(c[j]);
u=x+y;
for (i=0;i<100;i++)
{
z=(x-cos(c[j])); w=(sin(s)-y);
u=u+(a[i]*q-z/a[i])*(p-b[i]*w);
x=(y-x)*(p-u); y=(y-c[j+1])*cos(c[j]);
}
//конец 1 фрагмента выделенного жирным курсивом
if (sin(u)>cos(u))
{
//начало 2 фрагмента выделенного жирным курсивом
y=q; z=sin(c[j+1]); f[j]=y+z;
for (i=0;i<100;i++)
{
x=(y-sin(c[j+1])); b=(log(s)-z);
f[j]=f[j]+(b[i]*p-x/a[i])*(p-a[i]*v); y=(z-y)*(q-f[j]);
z=(z-c[j])*sin(c[j+1]);
}
//конец 2 фрагмента выделенного жирным курсивом
s=cos(s-u);
//начало 3 фрагмента выделенного жирным курсивом
z=p;x=log(c[j]);f[j+1]=z+x;
for (i=0;i<100;i++)
{
y=(z-log(c[j])); w=(cos(s)-x);
f[j+1]=f[j+1]+(a[i]*p-y/b[i])*(q-a[i]*w); z=(x-z)*(p-f[j+1]);
x=(x-c[j]*c[j+1])*log(c[j]);
}
//конец 3 фрагмента выделенного жирным курсивом
}
else
{
f[j]=sin(u-c[j]); f[j+1]=sin(u*c[j+1]);
}
}
//вывод (f)
return 0;
}
проверьте мое решение:
C++:
void pro(double a1, double a2,double a3[100],double a4,double a5[100], double a6,double a7[100], double a8,double a9,double &res)
{int i; double x,y,z,w; 
x=a8; 
y=a1; 
res=x+y;
for (i=0; i<100;i++)
{
z=x-a1; 
w=a2-y;
res=res+(a3[i]*a4-z/a5[i])*(a6-a7[i]*w);
x=(y-x)*(a8-res);
y=(y-a9)*a1;
}
}

int main() 
{
int i,j; double u,v,w,z,x,y,p,q,r,s,a[100],b[100],c[200],f[200];
//ввод (p,q,r,a,b,c)
for (j=0;j<200; j+=2) 
{
s=r;
pro(cos(c[j]),sin(s),a,q,a,p,b,p,c[j+1],u);
if (sin(u)>cos(u)) 
{
pro(sin(c[j+1]),log(s),b,p,a,p,a,q,c[j],f[j]);
s=cos(s-u);
pro(log(c[j]),cos(s),a,p,b,q,a,p,c[j]*c[j+1],f[j+1]);
}
else	{
f[j]=sin(u-c[j]); f[j+1]=sin(u*c[j+1]); 
}
}
//вывод (f)
return 0;
}