GAECHKA
Твоя помощница в решении задач

Исправьте ошибку в лабораторной работе

Var
hx,x,x0,p,x1,F,i,n:real;
k,n:integer;
begin
Write('Введите x0='); //1
Read(x0);
Write('Введите hx='); //1
Read(hx);
Write('Введите xn='); //4
Read(xn);
Writeln('x0=',x0,' hx=',hx,' xn=',xn);
x:=x0;
repeat
p:=0;
x1:=1;
t:=0;
while xdo
begin
if x1 mod 2=0 then begin
P:=(x*1.5);
F:=P; 
for i:=2 to P do
begin
F:=F*i;
P:=F;
Writeln ('P='',F,');
end;
x:=x+hx;
end
else
begin
P:=(x*2);
F:=P;
begin 
for i:=2 to P do
F:=F*i;
P:=F;
Writeln ('P='',F,');
end;
x:=x+hx;
end;
end;
end.
Вообщем , выдает ошибку в 43 строчке " Встречено 'end', а ожидалось ';' " , пробовал сидеть и думать - не помогло. Решил обратиться на форум. Помогите бестолковому студенту , пожалуйста.
Само задание:
Исправьте ошибку в лабораторной работе

Также , если не сложно проинформируйте , в правильном векторе ли я пытаюсь выполнить задачу?
0
вопрос задан

Источник


42 ответа
Решение
Skeezmo, у вас есть
repeat
но нет
until
Решение
Skeezmo, из форума взял
procedure opr(n:integer;var a:Tmatr;var det:real);//собственно определитель
var k,i,j,p:integer;
    r:real;
begin
det:=1;
for k:=1 to n do  //считаем по алгоритму, который во всех учебниках 
   begin
     if a[k,k]=0 then per(k,n,a,p);//если главный элемент=0, делаем перестановку
     det:=det*a[k,k]; //меняем знак определителя
     for j:=k+1 to n do  //делаем преобразования
       begin
         r:=a[j,k]/a[k,k];
         for i:=k to n do
           begin
             a[j,i]:=a[j,i]-r*a[k,i];
           end;
       end;
   end;
   det:=znak(p)*det;
end;
program opred;
uses crt;
const n=3;
type
   Tmatr=array [1..n,1..n] of real;
var a:Tmatr;
    det:real;//определитель
//процедура перестановки строк, чтобы главный элемент не оказался 
//нолем или близким к нулю значением
procedure Per(k,n:integer;var a:Tmatr; var p:integer);
var i,j:integer;z:real;
begin
   z:=a[k,k];i:=k;p:=0; //после каждого преобразования
   for j:=k+1 to n do   //ищем по оставшимся строкам
     begin
       if abs(a[j,k])>z then //максимальный по модулю элемент
          begin
            z:=abs(a[j,k]);i:=j; //запоминаем номер строки
            p:=p+1;//считаем количество перестановок, т.к. при каждой 
                    //перестановке меняется знак определителя
          end;
     end;
   if i>k then  //если эта строка ниже данной
   for j:=k to n do
     begin
       z:=a[i,j];a[i,j]:=a[k,j];a[k,j]:=z;//перестановка
     end;
end;
function znak(p:integer):integer;//ф-я определения знака определителя
begin
if p mod 2=0 then //если четное количество перестановок, "+" , если нет "-"
znak:=1 else znak:=-1;
end;
procedure opr(n:integer;var a:Tmatr;var det:real);//собственно определитель
var k,i,j,p:integer;
    r:real;
begin
det:=1;
for k:=1 to n do  //считаем по алгоритму, который во всех учебниках 
   begin
     if a[k,k]=0 then per(k,n,a,p);//если главный элемент=0, делаем перестановку
     det:=znak(p)*det*a[k,k]; //меняем знак определителя
     for j:=k+1 to n do  //делаем преобразования
       begin
         r:=a[j,k]/a[k,k];
         for i:=k to n do
           begin
             a[j,i]:=a[j,i]-r*a[k,i];
           end;
       end;
   end;
end;
begin  //основная программа
clrscr;
//здесь напишете ввод как Вам больше нравится
opr(n,a,det);
write('opr=',det:4:0);
readln
end.
Решение
Skeezmo )
Skeezmo, вот из-за этого и не буду вставлять)
(Вставь в прогу , скину 100 рублей,Насильно)
Добавлено через 1 минуту
Skeezmo, кстати,хочешь совет,сделай сразу матрицу типа real тогда и лишних процедур не понадобится
Skeezmo,
(Скинь киви , сбер)
Нет,я ничего такого не сделал)


Я вообще не понимаю что происходит)))
я тоже)может и я что нибудь попробую сделать)
Задание звучит так:
Используя метод нисходящего проектирования, разработать схему алгоритма и составить
программу вычисления функции при заданных значениях аргументов.
Уже сам разобрался. Но все равно спасибо дружище.

Добавлено через 1 минуту
Procedure determinante(n:integer; var a:RealMassive; var det:real);
var k,i,j,p:integer;
    r:real;
begin
det:=1;
for k:=1 to n do     
begin
     if a[k,k]=0 then
       per(k,n,a,p);
     det:=znak(p)*det*a[k,k]; 
     for j:=k+1 to n do  
       begin
       r:=a[j,k]/a[k,k];
         for i:=k to n do
           a[j,i]:=a[j,i]-r*a[k,i];
       end;
   end;
end; 
    
procedure _Real_Massive(mas: massive); 
var Real_Massive: array [1..100,1..100] of real;
    i,k: integer;
  begin
    for i:= 1 to n do
      begin
        for k:= 1 to n do
          begin
            Real_Massive[i,k]:= mas[i,k]/1;
          end;
      end;
      
      end;
У меня тут другая проблема. Ошибка в процедурах , не хочет определитель вытаскивать на экран. Может знаешь в чем проблема?
Skeezmo, ну у тебя там косяков выше крыши)

Добавлено через 1 минуту
Skeezmo, а куда мне данную процедуру вставить?
Дружище , думаю ошибка вот здесь.
procedure _Real_Massive(mas: massive); 
var Real_Massive: array [1..100,1..100] of real;
    i,k: integer;
  begin
    for i:= 1 to n do
      begin
        for k:= 1 to n do
          begin
            Real_Massive[i,k]:= mas[i,k]/1;
          end;
      end;
      writeln();
      end;
У меня тут есть врайтлн пустой , а что в него написать я вообще не понимаю.

Добавлено через 1 минуту
Щас скину полностью прогу.
program project1;
type
massive = array [1..100,1..100] of integer;
RealMassive = array [1..100,1..100] of real;
var i,j,n,Ex_Pr: integer;
det: real;
Mas: massive;
File_Matrix: text;
procedure WriteInFile(mas: massive; Zagolovok: string); {Запись результата в файл}
var k,i: integer;
begin
append(File_Matrix);
writeln(File_Matrix);
writeln(File_Matrix, Zagolovok);
for i:= 1 to n do
begin
for k:= 1 to n do
begin
write(File_Matrix, mas[i,k]);
end;
writeln(File_Matrix);
end;
close(File_Matrix);
end;
 
procedure SumEL(j,f: integer);{Сумма элементов 2}
var m,i,Sum: integer;
begin
append(File_Matrix);
for m:= 1 to n do
begin
Sum:= mas[j,m] + mas[m,f];
writeln(mas[j,m],'+',mas[m,f],'=',Sum);
writeln(File_Matrix);
write(File_Matrix,'sum= ',mas[j,m],'+',mas[m,f],'=',Sum);
end;
writeln(File_Matrix);
close(file_matrix);
end;
 
Procedure SumElement; {сумма элементов}
var i,j,k,f : integer;
begin
for i:= 1 to n do
begin
for k:= 1 to n do
begin
write(mas[i,k],' ');
end;
writeln();
end;
writeln('Enter string number');
readln(j);
writeln('Enter coloumn number');
readln(f);
SumEl(j,f);
end;
 
Procedure SpinMatrix; {Вращение матрицы}
var i,k,f: integer;
New_Mas: massive;
begin
f:= n;
for i:= 1 to n do {Цикл вращения матрицы}
begin
for k:= 1 to n do
begin
New_Mas[k,f]:= mas[i,k];
end;
dec(f);
end; {/Цикл вращения матрицы}
for i:= 1 to n do {Вывод матрицы (Перевернутой)}
begin
for k:= 1 to n do
begin
write(New_Mas[i,k],' ');
end;
writeln();
end;
WriteInFile(New_Mas,'Rotation');
end; {/Вывод матрицы (Перевернутой)}
 
Procedure Transpose; {Транспонирование}
var i,k: integer;
New_Mas: massive;
begin
for i:= 1 to n do
begin
for k:= 1 to n do
begin
if i  k then
New_Mas[i,k]:= mas[k,i]
else
New_Mas[i,k]:= Mas[i,k];
write(New_Mas[i,k],' ');
end;
writeln();
end;
WriteInFile(New_Mas, 'Transpose');
end;
procedure Per(k,n:integer;var a:RealMassive; var p:integer);
var i,j:integer;z:real;
begin
z:=a[k,k];
i:=k;
p:=0; //после каждого преобразования
for j:=k+1 to n do //ищем по оставшимся строкам
begin
if abs(a[j,k])>z then //максимальный по модулю элемент
begin
z:=abs(a[j,k]);
i:=j; //запоминаем номер строки
p:=p+1;//считаем количество перестановок, т.к. при каждой
//перестановке меняется знак определителя
end;
end;
if i>k then //если эта строка ниже данной
for j:=k to n do
begin
z:=a[i,j];
a[i,j]:=a[k,j];
a[k,j]:=z;//перестановка
end;
end;
function znak(p:integer):integer;//ф-я определения знака определителя
begin
if (p mod 2  0) then //если четное количество перестановок, "+" , если нет "-"
znak:=1
else
znak:=-1;
end;
Procedure determinante(n:integer; var a:RealMassive; var det:real);
var k,i,j,p:integer;
    r:real;
begin
det:=1;
for k:=1 to n do     
begin
     if a[k,k]=0 then
       per(k,n,a,p);
     det:=znak(p)*det*a[k,k]; 
     for j:=k+1 to n do  
       begin
       r:=a[j,k]/a[k,k];
         for i:=k to n do
           a[j,i]:=a[j,i]-r*a[k,i];
       end;
   end;
end; 
    
procedure _Real_Massive(mas: massive); 
var Real_Massive: array [1..100,1..100] of real;
    i,k: integer;
  begin
    for i:= 1 to n do
      begin
        for k:= 1 to n do
          begin
            Real_Massive[i,k]:= mas[i,k]/1;
          end;
      end;
      writeln();
      end;
procedure MainMenu; {Главное меню}
var task: integer;
begin
writeln(' ** Main Menu ** ');
writeln;
writeln('Enter task number');
writeln('1. Sum Elements');
writeln('2. Matrix Rotation');
writeln('3. Matrix Transpose');
writeln('4. Determinant');
writeln('5. Exit from the program');
readln(task);
case task of
1: SumElement;
2: SpinMatrix;
3: Transpose;
4: _Real_Massive(mas);
5: Ex_Pr:= 1;
end;
end;
 
begin {Основная программа}
randomize;
assign(File_Matrix,'Matrix.txt');
Ex_Pr:= 0;
writeln('enter elements quantity of matrix, );
readln(n);
rewrite(File_Matrix);
writeln(File_Matrix,'Matrix');
for i:=1 to n do
begin
for j:= 1 to n do
begin
Mas[i,j]:= random(10);
write(File_Matrix,mas[i,j]);
write(mas[i,j],' ');
end;
writeln;
writeln(File_Matrix);
end;
close(File_Matrix);
while Ex_Pr  1 do
MainMenu;
end.
Все функции работают , кроме определителя (4 номер функции)
procedure _Real_Massive(mas: massive); 
var Real_Massive: array [1..100,1..100] of real;
    i,k: integer;
  begin
    for i:= 1 to n do
      begin
        for k:= 1 to n do
          begin
            Real_Massive[i,k]:= mas[i,k]/1;
             writeln(Real_Massive[i,k]);
          end;
      end;
      end;
а если так?
Попробуй запусти , просто пустое место ,будет.

Добавлено через 1 минуту
Бесконечно печает числа из массива , а мне определитель нужен.
Skeezmo, нет,у меня работает
хмм , щас еще раз посмотрю.
Skeezmo, так у вас просто алгоритм не верный,сейчас попробую исправить
Помойму он пишет первое число из массива , но и так сойдет думаю. Врятли это проверять так жестко будет. Главное чтобы писало нормально.
Skeezmo, стоп,вы меня запутали)
Как же ты мне помогаешь )))) Дружище могу 100 рубасов тебе перекинуть , если действительно все верно будет.
Skeezmo,
procedure _Real_Massive(mas: massive);
это же не та процедура,которая определитель находит
ой,та)
Если можно исправить , то исправьте пожалуйста.

Добавлено через 54 секунды
Если честно , я вообще не пойму что там происходит. Это курсач подруги , пытаюсь исправить мол ТЫЖПРОГРАМИСТ (А на самом деле я 0 в паскале)

Добавлено через 1 минуту
Думаю так и есть , но я не пойму как оно работает. Вообщем если исправите и все норм будет работать. Как и обещал скину копеечку за помощь.
Skeezmo, что делает эта процедура??
procedure _Real_Massive(mas: massive);
Добавлено через 1 минуту
Skeezmo, я не за деньги тут помогаю)
Для расчета определителя необходимо работать с матрицей вещественного типа, в связи с этим преобразуем исходную матрицу целочисленного типа в вещественный, путем деления каждого элемента матрицы на единицу.
procedure _Real_Massive(mas: massive);
var Real_Massive: array [1..100,1..100] of real;
i,k: integer;
begin
for i:= 1 to n do
begin
for k:= 1 to n do
begin
Real_Massive[i,k]:= mas[i,k]/1;
end;
writeln();
end;
Процедура, вычисляющая определитель начинается с цикла, в котором идет проверка условия наличия нулей на главной диагонали. В случае верности данного условия, управление передается процедуре, осуществляющей перестановку строк в матрице.
Если преобразование прошло или в нем не было необходимости, переменной det становится равной предыдущему значению det,умноженному на функцию znak и элемент главной диагонали.
В процессе расчета определителя, матрица претерпевает изменения, которые обусловлены применением элементарных преобразований над ней.
Procedure determinante(n:integer; var a:RealMassive; var det:real);
var k,i,j,p:integer;
r:real;
begin
det:=1;
for k:=1 to n do
begin
if a[k,k]=0 then
per(k,n,a,p);
det:=znak(p)*det*a[k,k];
for j:=k+1 to n do
begin
r:=a[j,k]/a[k,k];
for i:=k to n do
a[j,i]:=a[j,i]-r*a[k,i];
end;
end;
end;

Добавлено через 33 секунды
Спасибо большое добрый ты человек , вот из курсача статья.
Skeezmo, давай так,я попробую написать процедуру,нахождения определителя матрицы,а ты как нибудь его в свою программу впишешь?)
Ну , давай попробую.
Щас буду пробовать вставить , но чет мне кажется щас все опять полетит. Спасибо за помощь друг мой. (Вставь в прогу , скину 100 рублей,Насильно)

Добавлено через 29 секунд
Даже если отнекиваться будешь)
Ладно , спасибо большое (Скинь киви , сбер)

Добавлено через 44 секунды
Я вообще не понимаю что происходит)))0 Я тут щас через пень колоду буду пытаться это сделать.

Добавлено через 1 минуту
project1.pas(170) : Неверное количество параметров процедуры ((((ska
Попытайся вставить , если не сложно. Пожалуйста.
project1.pas(170) : Неверное количество параметров процедуры ((((ska
скинь эту строку,просто у меня в этой строке begin
case task of
1: SumElement;
2: SpinMatrix;
3: Transpose;
4: Determinate;
5: Ex_Pr:= 1;
end;
end;
Когда к процедуре обращаешься (4) он выдает ту ошибку.
Вот тебе вся прога
program project1;
type
massive = array [1..100,1..100] of integer;
RealMassive = array [1..100,1..100] of real;
var i,j,n,Ex_Pr: integer;
det: real;
Mas: massive;
File_Matrix: text;
procedure WriteInFile(mas: massive; Zagolovok: string); {Запись результата в файл}
var k,i: integer;
begin
append(File_Matrix);
writeln(File_Matrix);
writeln(File_Matrix, Zagolovok);
for i:= 1 to n do
begin
for k:= 1 to n do
begin
write(File_Matrix, mas[i,k]);
end;
writeln(File_Matrix);
end;
close(File_Matrix);
end;
 
procedure SumEL(j,f: integer);{Сумма элементов 2}
var m,i,Sum: integer;
begin
append(File_Matrix);
for m:= 1 to n do
begin
Sum:= mas[j,m] + mas[m,f];
writeln(mas[j,m],'+',mas[m,f],'=',Sum);
writeln(File_Matrix);
write(File_Matrix,'sum= ',mas[j,m],'+',mas[m,f],'=',Sum);
end;
writeln(File_Matrix);
close(file_matrix);
end;
 
Procedure SumElement; {сумма элементов}
var i,j,k,f : integer;
begin
for i:= 1 to n do
begin
for k:= 1 to n do
begin
write(mas[i,k],' ');
end;
writeln();
end;
writeln('Enter string number');
readln(j);
writeln('Enter coloumn number');
readln(f);
SumEl(j,f);
end;
 
Procedure SpinMatrix; {Вращение матрицы}
var i,k,f: integer;
New_Mas: massive;
begin
f:= n;
for i:= 1 to n do {Цикл вращения матрицы}
begin
for k:= 1 to n do
begin
New_Mas[k,f]:= mas[i,k];
end;
dec(f);
end; {/Цикл вращения матрицы}
for i:= 1 to n do {Вывод матрицы (Перевернутой)}
begin
for k:= 1 to n do
begin
write(New_Mas[i,k],' ');
end;
writeln();
end;
WriteInFile(New_Mas,'Rotation');
end; {/Вывод матрицы (Перевернутой)}
 
Procedure Transpose; {Транспонирование}
var i,k: integer;
New_Mas: massive;
begin
for i:= 1 to n do
begin
for k:= 1 to n do
begin
if i  k then
New_Mas[i,k]:= mas[k,i]
else
New_Mas[i,k]:= Mas[i,k];
write(New_Mas[i,k],' ');
end;
writeln();
end;
WriteInFile(New_Mas, 'Transpose');
end;
procedure Per(k,n:integer;var a:RealMassive; var p:integer);
var i,j:integer;z:real;
begin
z:=a[k,k];
i:=k;
p:=0; //после каждого преобразования
for j:=k+1 to n do //ищем по оставшимся строкам
begin
if abs(a[j,k])>z then //максимальный по модулю элемент
begin
z:=abs(a[j,k]);
i:=j; //запоминаем номер строки
p:=p+1;//считаем количество перестановок, т.к. при каждой
//перестановке меняется знак определителя
end;
end;
if i>k then //если эта строка ниже данной
for j:=k to n do
begin
z:=a[i,j];
a[i,j]:=a[k,j];
a[k,j]:=z;//перестановка
end;
end;
function znak(p:integer):integer;//ф-я определения знака определителя
begin
if (p mod 2  0) then //если четное количество перестановок, "+" , если нет "-"
znak:=1
else
znak:=-1;
end;
 
procedure determinate(n:integer;var a:Realmassive ;var det:real);//собственно определитель
var k,i,j,p:integer;
    r:real;
begin
det:=1;
for k:=1 to n do  //считаем по алгоритму, который во всех учебниках 
   begin
     if a[k,k]=0 then per(k,n,a,p);//если главный элемент=0, делаем перестановку
     det:=det*a[k,k]; //меняем знак определителя
     for j:=k+1 to n do  //делаем преобразования
       begin
         r:=a[j,k]/a[k,k];
         for i:=k to n do
           begin
             a[j,i]:=a[j,i]-r*a[k,i];
           end;
       end;
   end;
   det:=znak(p)*det;
end;
   
procedure MainMenu; {Главное меню}
var task: integer;
begin
writeln(' ** Main Menu ** ');
writeln;
writeln('Enter task number');
writeln('1. Sum Elements');
writeln('2. Matrix Rotation');
writeln('3. Matrix Transpose');
writeln('4. Determinant');
writeln('5. Exit from the program');
readln(task);
case task of
1: SumElement;
2: SpinMatrix;
3: Transpose;
4: Determinate;
5: Ex_Pr:= 1;
end;
end;
 
begin {Основная программа}
randomize;
assign(File_Matrix,'Matrix.txt');
Ex_Pr:= 0;
writeln('enter elements quantity of matrix, );
readln(n);
rewrite(File_Matrix);
writeln(File_Matrix,'Matrix');
for i:=1 to n do
begin
for j:= 1 to n do
begin
Mas[i,j]:= random(10);
write(File_Matrix,mas[i,j]);
write(mas[i,j],' ');
end;
writeln;
writeln(File_Matrix);
end;
close(File_Matrix);
while Ex_Pr  1 do
MainMenu;
end.
Skeezmo, ну конечно ошибка вылезает,у тебя в этой процедуре 3 параметра,а в вызове 0
И что это значит??? DDDD Как исправить?
Skeezmo, в этот код нужно вставить процедуру нахождения определителя?
Исправьте ошибку в лабораторной работе
Да , Которая Полная прога , если ты ее имеешь ввиду.
Skeezmo, я сделал,но есть одна проблема
Ага , что за проблема?
Skeezmo я вбиваю матрицу в онлайн калькулятор,по нему ответ 36
а по программе -36,знак не правильно считает
Нормально ) , Пусть моя подруга скажет что это тире
Skeezmo,все,и это теперь исправил))
program project1;
 
type
  massive = array [1..100, 1..100] of real;
 
var
  i, j, n, Ex_Pr: integer;
  det: real;
  Mas: massive;
  File_Matrix: text;
 
procedure WriteInFile(mas: massive; Zagolovok: string);{Запись результата в файл}
var
  k, i: integer;
begin
  append(File_Matrix);
  writeln(File_Matrix);
  writeln(File_Matrix, Zagolovok);
  for i := 1 to n do
  begin
    for k := 1 to n do
    begin
      write(File_Matrix, mas[i, k]);
    end;
    writeln(File_Matrix);
  end;
  close(File_Matrix);
end;
 
procedure SumEL(j, f: integer);{Сумма элементов 2}
var
  m, i: integer;
  Sum: real;
begin
  append(File_Matrix);
  for m := 1 to n do
  begin
    Sum := mas[j, m] + mas[m, f];
    writeln(mas[j, m], '+', mas[m, f], '=', Sum);
    writeln(File_Matrix);
    write(File_Matrix, 'sum= ', mas[j, m], '+', mas[m, f], '=', Sum);
  end;
  writeln(File_Matrix);
  close(file_matrix);
end;
 
procedure SumElement;{сумма элементов}
var
  i, j, k, f: integer;
begin
  for i := 1 to n do
  begin
    for k := 1 to n do
    begin
      write(mas[i, k], ' ');
    end;
    writeln();
  end;
  writeln('Enter string number');
  readln(j);
  writeln('Enter coloumn number');
  readln(f);
  SumEl(j, f);
end;
 
procedure SpinMatrix;{Вращение матрицы}
var
  i, k, f: integer;
  New_Mas: massive;
begin
  f := n;
  for i := 1 to n do {Цикл вращения матрицы}
  begin
    for k := 1 to n do
    begin
      New_Mas[k, f] := mas[i, k];
    end;
    dec(f);
  end; {/Цикл вращения матрицы}
  for i := 1 to n do {Вывод матрицы (Перевернутой)}
  begin
    for k := 1 to n do
    begin
      write(New_Mas[i, k], ' ');
    end;
    writeln();
  end;
  WriteInFile(New_Mas, 'Rotation');
end;{/Вывод матрицы (Перевернутой)}
 
procedure Transpose;{Транспонирование}
var
  i, k: integer;
  New_Mas: massive;
begin
  for i := 1 to n do
  begin
    for k := 1 to n do
    begin
      if i  k then
        New_Mas[i, k] := mas[k, i]
      else
        New_Mas[i, k] := Mas[i, k];
      write(New_Mas[i, k], ' ');
    end;
    writeln();
  end;
  WriteInFile(New_Mas, 'Transpose');
end;
 
procedure Per(k, n: integer; var a: Massive; var p: integer);
var
  i, j: integer;
  z: real;
begin
  z := a[k, k];
  i := k;
  p := 0; //после каждого преобразования
  for j := k + 1 to n do //ищем по оставшимся строкам
  begin
    if abs(a[j, k]) > z then //максимальный по модулю элемент
    begin
      z := abs(a[j, k]);
      i := j; //запоминаем номер строки
      p := p + 1;//считаем количество перестановок, т.к. при каждой
      //перестановке меняется знак определителя
    end;
  end;
  if i > k then //если эта строка ниже данной
    for j := k to n do
    begin
      z := a[i, j];
      a[i, j] := a[k, j];
      a[k, j] := z;//перестановка
    end;
end;
 
function znak(p: integer): integer;//ф-я определения знака определителя
begin
  if (p mod 2  0) then //если четное количество перестановок, "+" , если нет "-"
    znak := 1
  else
    znak := -1;
end;
 
procedure determinante(n: integer; var a: Massive; var det: real);
var
  k, i, j, p: integer;
  r: real;
begin
  det := -1;
  for k := 1 to n do     
  begin
    if a[k, k] = 0 then
      per(k, n, a, p);
    det := znak(p) * det * a[k, k]; 
    for j := k + 1 to n do  
    begin
      r := a[j, k] / a[k, k];
      for i := k to n do
        a[j, i] := a[j, i] - r * a[k, i];
    end; 
  end;
  writeln(det);
end;
 
procedure MainMenu;{Главное меню}
var
  task: integer;
begin
  writeln(' ** Main Menu ** ');
  writeln;
  writeln('Enter task number');
  writeln('1. Sum Elements');
  writeln('2. Matrix Rotation');
  writeln('3. Matrix Transpose');
  writeln('4. Determinant');
  writeln('5. Exit from the program');
  readln(task);
  writeln;
  case task of
    1: SumElement;
    2: SpinMatrix;
    3: Transpose;
    4: determinante(n, mas, det);
    5: Ex_Pr := 1;
  end;
end;
 
begin{Основная программа}
  randomize;
  assign(File_Matrix, 'Matrix.txt');
  Ex_Pr := 0;
  writeln('enter elements quantity of matrix, );
  readln(n);
  rewrite(File_Matrix);
  writeln(File_Matrix, 'Matrix');
  for i := 1 to n do
  begin
    for j := 1 to n do
    begin
      Mas[i, j] := random(10);
      write(File_Matrix, mas[i, j]);
      write(mas[i, j], ' ');
    end;
    writeln;
    writeln(File_Matrix);
  end;
  close(File_Matrix);
  while Ex_Pr  1 do
    MainMenu;
end.
СПАСИБО ТЕБЕ , СПАСИБО ОГРОМНОЕ). Мне плюс секс , а тебе + копейки , скидывай карту уже ))
Skeezmo,
Мне плюс секс
удачи там
а тебе + копейки , скидывай карту уже ))
это лишнее)
Ну как хочешь , во век не забуду.
Буст в доте нужен?) 5500 ммр какникак

Добавлено через 1 минуту
Ну все братикша , я пошел. Еще раз спасибо.
Skeezmo,
Буст в доте нужен?)
спасибо за предложение,я не играю в доту)

Ну все братикша , я пошел. Еще раз спасибо.
не за что))