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 (в зависимости от мощности компьютера). Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти