bioshark Опубликовано 26 апреля, 2010 Жалоба Поделиться Опубликовано 26 апреля, 2010 Помогите пожалуста необходимо переделать прогаму из паскаля на С++. Вдолгу неостанусь. Вот код Procedure Effect( Var z:Vector; n:Integer ); Const k :LongInt=0; {Количество перестановок} Var p,d :Vector; pm, dm,zpm : Integer; i,m,w : Integer; begin; for i:=1 to n do begin z:=i; p:=i; d:=-1; end; d[1]:=0; m:=n+1; z[0]:=m; z[n+1]:=m; while m<>1 do begin { Печать перестановки } k:=k+1; Write(f,k,' ) `); for i:=l to n do Write(f,z,' `); WriteLn(f); m: =n ; while z [p [m] +d [m] ] >m do begin d[m]:=-d[m]; m:=m-l; end; pm:=p[m]; dm:=pm+d[m]; w:=z[pm]; z [pm] : =z [dm] ; z[dm]:=w; zpm:=z[pm]; w:=p[zpm]; p[zpm]:=pm; p[m]:=w; end; end;{Effect} Var {Main} z :Vector; n :Integer; {Длина перестановки} Hour,Minute,Second,SeclOO :Word; rHour,rMinute,rSecond,rSec100 :Word; delta :LongInt; begin Assign(f,'Effect.in' ) ; Reset(f); {Файл открыт для чтения} ReadLn(f,n); {Чтение длины перестановки} Close(f); Assign(f,'Effect.out' ) ; Rewrite(f); {Файл открыт для записи} GetTime(Hour,Minute,Second,Sec100); Effect(z,n); GetTime(rHour,rMinute,rSecond,rSec1 00); delta:=rHour-Hour; delta:=delta*60+rMinute-Minute; delta:=delta*60+rSecond-Second; delta:=delta*100+rSec100-Sec100; WriteLn(f,'Время счета=',delta div 100,'.', delta mod 100,' сек') ; Close(f); end. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 27 апреля, 2010 Жалоба Поделиться Опубликовано 27 апреля, 2010 bioshark: #include<iostream>#include<fstream> #include<ctime>using namespace std;ifstream infile("effect.in");ofstream outfile("effect.out", ios_base::out); void effect(int z[],int n){long k=0; int *p=new int[30],*d=new int[30]; int pm,dm,zpm,i,m,w; for(i=1;i<=n;i++)d[z[i]=p[i]=i]=-1; d[1]=0; z[0]=z[n+1]=m=n+1; while(m!=1){ k++; outfile<<k<<" ) "; for(i=1;i<=n;i++)outfile<<z[i]<<" "; outfile<<endl; m=n; while(z[p[m]+d[m]]>m){d[m]=-d[m];m--;} pm=p[m]; dm=pm+d[m]; swap(z[pm],z[dm]);zpm=z[pm]; w=p[zpm]; p[zpm]=pm; p[m]=w;}delete[]p; delete[]d; }main(){int n; int *z=new int[30]; float start=clock(); if(!infile){cout<<"Error of opening the file!"; getchar(); exit(1);} infile>>n; infile.close(); effect(z,n); delete[]z; float end=clock(); cout<<(end-start)/CLOCKS_PER_SEC<<endl; getchar();} В файл effect.in для пробы советую для времени работы в несколько секунд записать число 9 или 10 (в зависимости от мощности компьютера). Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.