//Данная программа вычисляет детерминант матрицы //PascalABC.NET 3.2 сборка 1318
Var c:char; Reci:array of integer; ma:array of array of integer; n,nc,ip:integer; resf:real;
function minor(ip,i,n:integer; var reci:array of integer):real; Var ic,j,c,ipp,icc:integer; res:real; b:boolean; arf:array[1..4] of integer; begin b:=true; c:=0; reci[ip]:=i; ipp:=ip+1; if ipp=nc-1 then begin for ic:=1 to n do begin for j:=1 to ip do if ic=reci[j] then b:=false; if b=true then begin inc(c); arf[c]:=ma[ipp,ic]; end; b:=true; end; inc(ipp); for ic:=1 to n do begin for j:=1 to ip do if ic=reci[j] then b:=false; if b=true then begin inc(c); arf[c]:=ma[ipp,ic]; end; b:=true; end; minor:=arf[1]*arf[4]-arf[2]*arf[3]; end else begin for ic:=1 to n do begin for j:=1 to ip do if ic=reci[j] then b:=false; if b=true then res+=ma[ipp,ic]*power(-1,ipp+i)*minor(ipp,ic,n,reci); b:=true; end; minor:=res; end; end;
procedure start(); Var i,j:integer; begin write('Введите количество строк и столбцов:'); readln(n); ip:=1; nc:=n; setlength(Reci,n+1); setlength(ma,n+1); for i:=1 to n do setlength(ma[i],n+1); writeln('Введите матрицу:'); for i:=1 to n do for j:=1 to n do readln(ma[i][j]); for i:=1 to n do resf+=ma[ip][i]*power(-1,ip+i)*minor(ip,i,n,reci); writeln('Res:',resf); end;
begin repeat readln(c); until c in ['Z','z','Y','y']; if c in ['Y','y'] then halt else start(); end.
Пример работы программы: 3 //введено ни z, ни y, повторяем ввод z //продолжаем программу Введите количество строк и столбцов:3 Введите матрицу: 9 1 2 8 3 7 4 6 5 Res:-183
Чтобы было удобнее, располагаем перед собой алфавит:
и действуем по указанному правилу: берём букву из слова и по алфавиту смотрим, какая буква идёт третьей после нашей буквы если упёрлись в конец алфавита- продолжаем счёт с начала алфавита (движемся по кругу) чтобы это было удобнее, я запишу алфавит сразу с добавленными буквами в его конце:
такое действие выполняем для каждой буквы в слове
Итак, шифруем слова: ИНФОРМАЦИЯ => ЛРЧСУПГЩЛВ КОМПЬЮТЕР => НСПТБХЗУ ЧЕЛОВЕК => ЪЗОСЕЗН
А вообще, для человека такое преобразование не очень удобно делать, поэтому для большего объёма текста проще было бы составить программу, или таблицу в Экселе, которая бы выполняла нужные действия с текстом.
//PascalABC.NET 3.2 сборка 1318
Var
c:char;
Reci:array of integer;
ma:array of array of integer;
n,nc,ip:integer;
resf:real;
function minor(ip,i,n:integer; var reci:array of integer):real;
Var
ic,j,c,ipp,icc:integer;
res:real;
b:boolean;
arf:array[1..4] of integer;
begin
b:=true;
c:=0;
reci[ip]:=i;
ipp:=ip+1;
if ipp=nc-1 then
begin
for ic:=1 to n do
begin
for j:=1 to ip do
if ic=reci[j] then
b:=false;
if b=true then
begin
inc(c);
arf[c]:=ma[ipp,ic];
end;
b:=true;
end;
inc(ipp);
for ic:=1 to n do
begin
for j:=1 to ip do
if ic=reci[j] then
b:=false;
if b=true then
begin
inc(c);
arf[c]:=ma[ipp,ic];
end;
b:=true;
end;
minor:=arf[1]*arf[4]-arf[2]*arf[3];
end
else
begin
for ic:=1 to n do
begin
for j:=1 to ip do
if ic=reci[j] then b:=false;
if b=true then
res+=ma[ipp,ic]*power(-1,ipp+i)*minor(ipp,ic,n,reci);
b:=true;
end;
minor:=res;
end;
end;
procedure start();
Var
i,j:integer;
begin
write('Введите количество строк и столбцов:');
readln(n);
ip:=1;
nc:=n;
setlength(Reci,n+1);
setlength(ma,n+1);
for i:=1 to n do
setlength(ma[i],n+1);
writeln('Введите матрицу:');
for i:=1 to n do
for j:=1 to n do
readln(ma[i][j]);
for i:=1 to n do
resf+=ma[ip][i]*power(-1,ip+i)*minor(ip,i,n,reci);
writeln('Res:',resf);
end;
begin
repeat
readln(c);
until c in ['Z','z','Y','y'];
if c in ['Y','y'] then halt else start();
end.
Пример работы программы:
3 //введено ни z, ни y, повторяем ввод
z //продолжаем программу
Введите количество строк и столбцов:3
Введите матрицу:
9
1
2
8
3
7
4
6
5
Res:-183
и действуем по указанному правилу:
берём букву из слова и по алфавиту смотрим, какая буква идёт третьей после нашей буквы
если упёрлись в конец алфавита- продолжаем счёт с начала алфавита (движемся по кругу)
чтобы это было удобнее, я запишу алфавит сразу с добавленными буквами в его конце:
такое действие выполняем для каждой буквы в слове
Итак, шифруем слова:
ИНФОРМАЦИЯ => ЛРЧСУПГЩЛВ
КОМПЬЮТЕР => НСПТБХЗУ
ЧЕЛОВЕК => ЪЗОСЕЗН
А вообще, для человека такое преобразование не очень удобно делать, поэтому для большего объёма текста проще было бы составить программу, или таблицу в Экселе, которая бы выполняла нужные действия с текстом.