program Lab7; uses crt; const nv=3; type tmas=array[1..1] of integer; pmas=^tmas; tmatrix=array[1..nv] of record qty:integer; mas:pmas; end; var indicator:byte; matrix:tmatrix; {Headline} Procedure Headline; Begin WriteLn('Moscow Goverment University' ); End; {Write Reference} Procedure Commands; Begin Writeln('Choose command:'); Writeln('1 - Select array'); Writeln('2 - Input array'); Writeln('3 - Output array'); Writeln('4 - Sorting array'); Writeln('5 - Array processing'); Writeln('6 - Clear array'); Writeln('7 - Exit'); End; {Select array} procedure Select_array; var a:byte; begin writeln('Enter number of desired array from 1 to 3'); readln(a); if (a>=1)and(a<=3) then indicator:=a else writeln('Not available number'); end; {Input array} procedure Input_array; type ms=array[1..30] of string; var i,n,k,h :byte; code :integer; s :string; mas2 :ms; yn :char; begin if (indicator>=1)and(indicator<=3) then begin if matrix[indicator].mas=nil then begin s:='_'; While h<>length(s) do begin h:=0; Writeln('Input array in string across comma'); readln(s); for i:=1 to length(s) do if (s[i]=',') or(ord(s[i])-ord('0') in [0..9]) then inc(h) else dec(h); end; k:=1; for i:=1 to length(s) do if (s[i]<>',') and (ord(s[i])-ord('0') in [0..9]) then mas2[k]:=mas2[k]+s[i] else inc(k); getmem(matrix[indicator].mas,k*2); for i:=1 to k do val(mas2[i],matrix[indicator].mas^[i],code); matrix[indicator].qty:=k; end else begin writeln('Do you really wanna destroy array, which you input early?(Y/N)'); readln(yn); if yn='Y' then begin freemem(matrix[indicator].mas,matrix[indicator].qty*2); s:='_'; While h<>length(s) do begin h:=0; Writeln('Input array in string across comma'); readln(s); for i:=1 to length(s) do if (s[i]=',') or(ord(s[i])-ord('0') in [0..9]) then inc(h) else dec(h); end; k:=1; for i:=1 to length(s) do if (s[i]<>',') and (ord(s[i])-ord('0') in [0..9]) then mas2[k]:=mas2[k]+s[i] else inc(k); getmem(matrix[indicator].mas,k*2); for i:=1 to k do val(mas2[i],matrix[indicator].mas^[i],code); matrix[indicator].qty:=k; end else writeln('Array has alredy input'); end end else writeln('No any selected array'); end; {Output array} procedure output; var i:integer; begin if matrix[indicator].mas<>nil then begin writeln('Vector =',indicator); For i:=1 to matrix[indicator].qty do write(matrix[indicator].mas^[i]:4); writeln; end else writeln('No any selected array'); end; {Sorting array} Procedure Sorting(mas:pmas; qty: Integer); Var i, j, T: Integer; Begin For i := 1 To qty do Begin T := mas^[i]; j := Pred(i); While (T < mas^[j]) and (j > 0) Do Begin mas^[Succ(j)] := mas^[j]; Dec(j); End; mas^[Succ(j)] := T; End; Output; End; {Array processing} procedure Array_processing(mas:pmas; qty: Integer); Var a:pmas; i,j,m:integer; f:boolean; Begin m:=0; for i:=1 to qty-1 do Begin f:=false; for j:=i+1 to qty do if mas^[j]=mas^[i] Then f:=true; if f then inc(m); End; GetMem(a,2*m); m:=0; For i:=1 to qty-1 do begin f:=false; For j:=i+1 to qty do if mas^[j]=mas^[i] Then f:=true; if f then begin inc(m); a^[m]:=mas^[i]; end; End; Sorting(a,m); For i:=1 To m Do Write(a^[i]:4); writeln; freemem(a,2*m); End; {Clear array} procedure clear; begin if matrix[indicator].mas<>nil then begin freemem(matrix[indicator].mas,matrix[indicator].qty*2); matrix[indicator].mas:=nil; end; end; {Close programm} procedure Close_program; var i:byte; begin for i:=1 to nv do if matrix[i].mas<>nil then freemem(matrix[i].mas,matrix[i].qty*2); halt; end; {Wait some command} procedure Wait; var a:byte; begin write('?'); readln(a); case a of 1:Select_array; 2:Input_array; 3:output; 4:Sorting(Matrix[indicator].mas,Matrix[indicator].qty); 5:Array_processing(Matrix[indicator].mas,Matrix[indicator].qty); 6:clear; 7:Close_program; else commands; end; end; {Initialization array} Procedure Init; var i:integer; begin indicator:=0; for i:=1 to nv do matrix[i].mas:=nil; Commands; end; begin clrscr; Headline; Init; While 1=1 Do Wait; end.