Пользователь
Регистрация: 27.03.2009
Сообщений: 14
|
Си++.Глобальные,локальные параметры.
Здравствуйте.Намудрила что-то в програмке в локальных, глоб параметрах в int main,только вот что понять не могу...
Код:
#include <math.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
#define tn 0.0
#define tk 2*M_PI
#define Nmax 600
using namespace std;
void formvrem(int ,float []);
void formvxoda(int ,float [],float []);
void formvixoda(int ,float [],float []);
void table(int ,float [],float [],float []);
float Raznost(int ,float [],float []);
void write(int , float [], float [], float []);
void zastavka();
void zastavka()
{
FILE *f;
int ch;
f=fopen("zastavka.txt","r");
while (!feof(f))
{
ch=getc(f);
printf("%c",ch);
if(ch==10) printf("\n \n");
}
fclose(f);
getch();
return ;
}
void formvrem(int n,float t[])
{float dt;
int i;
dt=fabs(tk-tn)/(n-1);
for(i=0;i<n;i++)
{
t[i]=tn+i*dt;
}
return ;
}
void formvxoda(int n,float t[],float Uvh[])
{int i;
float U=50.0,a=0.5;
for(i=0;i<n;i++)
{
Uvh[i]=U*exp(-a*t[i])*sin(t[i]);
}
return ;
}
void formvixoda(int n,float Uvh[],float Uvih[])
{int i;
float a1=0.5,a2=0.5,a3=0.5,Uvh1=10.0,Uvh2=50.0,b1=10.0,b2=10.0,b3=60.0;
for(i=0;i<n;i++)
{
if(Uvh[i]<=Uvh1) Uvih[i]=a1*Uvh[i]+b1;
if(Uvh[i]<=Uvh2&&Uvh[i]>Uvh1) Uvih[i]=a2*Uvh[i]+b2;
if(Uvh[i]>Uvh2) Uvih[i]=a3*Uvh[i]+b3;
}
return ;
}
void table(int n,float t[],float Uvh[],float Uvih[])
{
int i;
printf("\n\n i | t[i] | Uvh[i] | Uvih[i]\n");
printf("---------------------------------------- \n");
for(i=0;i<n;i++)
{
printf("%2d | %6.3f | %7.3f | %4.3f\n",i+1,t[i],Uvh[i],Uvih[i]);
}
return ;
}
float Raznost(int n,float Uvih[],float t[])
{
float Umax,Umin,R;
int i;
Umax = Uvih[0];
for(i=0;i<n;i++)
{if(Uvih[i]>Umax) Umax=Uvih[i];}
printf("\n Umax=%.3f",Umax);
Umin = Uvih[0];
for(i=1;i<n;i++)
{if(Uvih[i]<Umin) Umin=Uvih[i];}
printf("\n Umin=%.3f",Umin);
R=Umax-Umin;
return(R);
}
void write(int n, float t[], float Uvh[], float Uvih[])
{int i;
FILE *f1, *f2, *f3;
f1=fopen ("d1.txt","w");
if (f1==NULL)
{
printf("\n owibka");
exit(1);
}
f2=fopen ("d2.txt","w");
if (f2==NULL)
{
printf("\n owibka");
exit(1);
}
f3=fopen ("d3.txt","w");
if (f3==NULL)
{
printf("\n owibka");
exit(1);
}
for (i=0;i<n;i++)
{
fprintf (f1,"\n%.3f",t[i]);
fprintf (f2,"\n%.3f",Uvh[i]);
fprintf (f3,"\n%.3f",Uvih[i]);
}
fclose(f1);fclose(f2);fclose(f3);
return ;
}
int main()
{
//мне нужно на каком отсчете точность расчета достигается 0.02..а выводит все время 11 или 22...уже все по 10 раз заменяла,достигала этой точности на 512 отсчете,но тогда везде писала Nmax и не присваивала N(n)=11
int i,N,n=11;
float t[Nmax],Uvh[Nmax],Uvih[Nmax],dt,eps=0.02,w,v=1000000,p=1.0;
zastavka();
formvrem(n,t);
formvxoda(n,t,Uvh);
formvixoda(n,Uvh,Uvih);
table(n,t,Uvh,Uvih);
write(n,t,Uvh,Uvih);
w=Raznost(n,Uvih,t);
printf("\n w=%.3f",w=Raznost(n,Uvih,t));
N=n;
for(i=0;i<Nmax;i++)
{
do
{ formvrem(N,t);
formvxoda(N,t,Uvh);
formvixoda(N,Uvh,Uvih);
write(N,t,Uvh,Uvih);
v=w;
p=fabs(w-v);
N=N*2;
}
while(p>eps);
}
printf("\n w=%.3f",w=Raznost(N,Uvih,t));
printf("\n pogrewnost eps=%.3f",eps);
printf("\n trebyema9 to4nost dostignyta pri n=%d",N);
getch();
return (1);
}
или вообще не в этом проблема у меня???
Последний раз редактировалось Медина; 02.06.2009 в 22:10.
|