{ Вам следовало бы более точно описать, что вам нужно. Непонятно, что это за условие со следованием. В примере 21106 за цифрой 2 следует 11, но за 11 не следует ничего из перечисленного. Ну или в нем 10 следует за 1, но тогда зачем условия следования для 10..12? + ничего не сказано про случайное распределение этих чисел. Так-то программа, которая все время выводит "1", тоже подходит под эти условия }
// PascalABC.NET 3.2, сборка 1449 от 23.05.2017 // Внимание! Если программа не работает, обновите версию!
begin var f:real->real:= x->cos(0.75*Power(x,0.25)-0.5*Power(x,0.5)+0.25*Power(x,0.75)); var a:=MatrGen(10,10,(i,j)->f(5+(10*i+j)*0.75)); Writeln('*** Исходный массив ***'); a.Println(7,3); Writeln(70*'-'); var fo:=OpenWrite('output.txt'); Writeln(fo,'*** Исходный массив ***'); for var i:=0 to 9 do begin for var j:=0 to 9 do Write(fo,a[i,j]:7:3); Writeln(fo) end; Writeln(fo,70*'-'); Write('Сформированный массив: '); Write(fo,'Сформированный массив: '); var b:=a.ElementsWithIndexes.Where(x->(x[0]=x[1]) or (x[0]=9-x[1])) .Select(x->x[2]).ToArray; b.ForEach(x->Write(x:7:3)); Writeln; b.ForEach(x->Write(fo,x:7:3)); Writeln(fo); Write('Отсортированный массив:'); Write(fo,'Отсортированный массив:'); // пузырьковая сортировка for var i:=0 to 18 do for var j:=0 to 18-i do if b[j]>b[j+1] then Swap(b[j],b[j+1]); b.ForEach(x->Write(x:7:3)); Writeln; b.ForEach(x->Write(fo,x:7:3)); Writeln(fo); fo.Close end.
begin var f:real->real:= x->cos(0.75*Power(x,0.25)-0.5*Power(x,0.5)+0.25*Power(x,0.75)); var a:=MatrGen(10,10,(i,j)->f(5+(10*i+j)*0.75)); Writeln('*** Исходный массив ***'); a.Println(7,3); Writeln(70*'-'); var fo:=OpenWrite('output.txt'); Writeln(fo,'*** Исходный массив ***'); for var i:=0 to 9 do begin for var j:=0 to 9 do Write(fo,a[i,j]:7:3); Writeln(fo) end; Writeln(fo,70*'-'); Write('Сформированный массив: '); Write(fo,'Сформированный массив: '); var b:=a.ElementsWithIndexes.Where(x->(x[0]=x[1]) or (x[0]=9-x[1])) .Select(x->x[2]).ToArray; b.ForEach(x->Write(x:7:3)); Writeln; b.ForEach(x->Write(fo,x:7:3)); Writeln(fo); Write('Отсортированный массив:'); Write(fo,'Отсортированный массив:'); b.Sort; // вместо пузырьковой сортировки b.ForEach(x->Write(x:7:3)); Writeln; b.ForEach(x->Write(fo,x:7:3)); Writeln(fo); fo.Close end.
Вам следовало бы более точно описать, что вам нужно.
Непонятно, что это за условие со следованием. В примере 21106 за цифрой 2 следует 11, но за 11 не следует ничего из перечисленного. Ну или в нем 10 следует за 1, но тогда зачем условия следования для 10..12?
+ ничего не сказано про случайное распределение этих чисел. Так-то программа, которая все время выводит "1", тоже подходит под эти условия
}
const
R: array[1..12,1..5] of integer = (
(4,5,7,9,10), //1
(5,6,8,10,11), //2
(6,7,9,11,12), //3
(1,7,8,10,12), //4
(1,2,8,9,11), //5
(2,3,9,10,12), //6
(1,3,4,10,11), //7
(2,4,5,11,12), //8
(1,3,5,6,12), //9
(1,2,4,6,7), //10
(2,3,5,7,8), //11
(3,4,6,8,9) //12
);
var i,k:integer;
begin
k := 1 + random(12);
for i := 1 to 1 + random(3) do
begin
write(k);
k := R[k,1 + random(5)];
end;
end.
// Внимание! Если программа не работает, обновите версию!
begin
var f:real->real:=
x->cos(0.75*Power(x,0.25)-0.5*Power(x,0.5)+0.25*Power(x,0.75));
var a:=MatrGen(10,10,(i,j)->f(5+(10*i+j)*0.75));
Writeln('*** Исходный массив ***'); a.Println(7,3); Writeln(70*'-');
var fo:=OpenWrite('output.txt');
Writeln(fo,'*** Исходный массив ***');
for var i:=0 to 9 do begin
for var j:=0 to 9 do Write(fo,a[i,j]:7:3);
Writeln(fo)
end;
Writeln(fo,70*'-');
Write('Сформированный массив: ');
Write(fo,'Сформированный массив: ');
var b:=a.ElementsWithIndexes.Where(x->(x[0]=x[1]) or (x[0]=9-x[1]))
.Select(x->x[2]).ToArray;
b.ForEach(x->Write(x:7:3)); Writeln;
b.ForEach(x->Write(fo,x:7:3)); Writeln(fo);
Write('Отсортированный массив:');
Write(fo,'Отсортированный массив:');
// пузырьковая сортировка
for var i:=0 to 18 do
for var j:=0 to 18-i do
if b[j]>b[j+1] then Swap(b[j],b[j+1]);
b.ForEach(x->Write(x:7:3)); Writeln;
b.ForEach(x->Write(fo,x:7:3)); Writeln(fo);
fo.Close
end.
Результат
*** Исходный массив ***
0.668 0.629 0.589 0.550 0.509 0.469 0.428 0.387 0.346 0.305
0.263 0.222 0.180 0.139 0.098 0.057 0.016 -0.024 -0.064 -0.104
-0.143 -0.182 -0.220 -0.258 -0.295 -0.331 -0.367 -0.402 -0.437 -0.470
-0.503 -0.535 -0.566 -0.596 -0.625 -0.653 -0.680 -0.706 -0.732 -0.756
-0.779 -0.801 -0.822 -0.841 -0.860 -0.878 -0.894 -0.909 -0.923 -0.936
-0.948 -0.958 -0.968 -0.976 -0.983 -0.988 -0.993 -0.996 -0.999 -1.000
-1.000 -0.999 -0.996 -0.993 -0.988 -0.983 -0.976 -0.968 -0.959 -0.949
-0.939 -0.927 -0.914 -0.900 -0.885 -0.869 -0.853 -0.835 -0.817 -0.798
-0.778 -0.757 -0.735 -0.713 -0.690 -0.667 -0.642 -0.617 -0.592 -0.566
-0.539 -0.512 -0.485 -0.457 -0.429 -0.400 -0.371 -0.341 -0.312 -0.282
Сформированный массив: 0.668 0.305 0.222 -0.064 -0.220 -0.402 -0.596 -0.680 -0.860 -0.878 -0.983 -0.988 -0.993 -0.976 -0.914 -0.835 -0.757 -0.592 -0.539 -0.282
Отсортированный массив: -0.993 -0.988 -0.983 -0.976 -0.914 -0.878 -0.860 -0.835 -0.757 -0.680 -0.596 -0.592 -0.539 -0.402 -0.282 -0.220 -0.064 0.222 0.305 0.668
Вариант без пузырьковой сортировки
begin
var f:real->real:=
x->cos(0.75*Power(x,0.25)-0.5*Power(x,0.5)+0.25*Power(x,0.75));
var a:=MatrGen(10,10,(i,j)->f(5+(10*i+j)*0.75));
Writeln('*** Исходный массив ***'); a.Println(7,3); Writeln(70*'-');
var fo:=OpenWrite('output.txt');
Writeln(fo,'*** Исходный массив ***');
for var i:=0 to 9 do begin
for var j:=0 to 9 do Write(fo,a[i,j]:7:3);
Writeln(fo)
end;
Writeln(fo,70*'-');
Write('Сформированный массив: ');
Write(fo,'Сформированный массив: ');
var b:=a.ElementsWithIndexes.Where(x->(x[0]=x[1]) or (x[0]=9-x[1]))
.Select(x->x[2]).ToArray;
b.ForEach(x->Write(x:7:3)); Writeln;
b.ForEach(x->Write(fo,x:7:3)); Writeln(fo);
Write('Отсортированный массив:');
Write(fo,'Отсортированный массив:');
b.Sort; // вместо пузырьковой сортировки
b.ForEach(x->Write(x:7:3)); Writeln;
b.ForEach(x->Write(fo,x:7:3)); Writeln(fo);
fo.Close
end.