Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.01.2018, 12:25   #1
Dormammu
 
Регистрация: 19.06.2015
Сообщений: 8
По умолчанию Помогите найти ошибку

Здравствуйте. Выдает ошибку в 16 строке:"ChM_KR.pas(16) : Ожидалось имя процедуры или функции". Что не так?

Код:
program ChM_KR;
const n=4;
type RMATR=array[1..n,1..n] of real;
IVECT=array[1..n] of integer;
RVECT = array [1..n] of real;

Procedure DECOMP(n:integer; var A:rmatr; var eps: real; var ip:ivect;
var det:real; 
var ifsolve: Boolean);
Label  10;
Var I, j, k, km, ipm : integer;
S, norm, am : real;
Begin 
Ifsolve := true;
Det := 1.0;
For I :=1 to n do ip(i):=I;


Norm:=0.0;
For it:=1 to n do
Begin s := 0.0;
For j := 1 to n do s:= s+abs
(A[i, j]);
If norm<s then norm:=s
End;
Eps := eps*norm;
For k:= 1 to n=1 do
Begin 
Am := abs(A[k, k]); km:=k;
For I := k+1 to n do
If abs (A[I, k])>am then
Begin am := abs(A[I, k]); km:=I end;
If km<>k then 
Begin 
Det := -det; ipm := ip(km);
Ip (km) := ip(k); ip (k):= ipm;
For j:= 1 to n do 
Begin am:= A[km, j];
A[km, j]:= A[k, j];
A[k, j]:= am
End
End;
If abs (A[k, k])< eps then 
Begin ifsolve := false; goto10 end;
For it:=1 to n do 
Begin am := A[I, k] / A[k, k] ; A[It, k]:= am;
For j:=1 to n do A[I, j] := A[I, j] - am * A[k, j];
End;
End;
10: if ifsolve and (abs(A[n, n])>=eps) then
For k := 1 to n do det := det * A[k, k]
Else
Det := 0.0
End;

Procedure SOLVE ( n:integer; var A:rmatr; var ip:ivect; var s:rvect);
Var I, j, k:integer;
S:real;
Y:rvect;
Begin 
For k :=1 to n do y[k] :=s(ip[k]);
For k:= n downto 2 do 
Begin 
S:=Y[k];
For j := 1 to k-1 do 
s:= s-A[k, j] * Y[ j];
Y[k]:=s;
end;
S[n] := y[n] / A[n, n];
For k:= n-1 downto i do
Begin 
S:= Y[k];
For j := k+1 to n do
S:= (S - A[k, j]) * S[j];
S[k] := s / A[k, k]
End;end;

begin

end.
Dormammu вне форума Ответить с цитированием
Старый 04.01.2018, 12:55   #2
gantzboss
Пользователь
 
Регистрация: 02.11.2017
Сообщений: 31
По умолчанию

Цитата:
Сообщение от Dormammu Посмотреть сообщение
ip(i):=I
Что это? Может тут массив
gantzboss вне форума Ответить с цитированием
Старый 04.01.2018, 12:59   #3
Dormammu
 
Регистрация: 19.06.2015
Сообщений: 8
По умолчанию

Это массив типа integer. Объявлен. IVECT=array[1..n] of integer;
Dormammu вне форума Ответить с цитированием
Старый 04.01.2018, 13:03   #4
gantzboss
Пользователь
 
Регистрация: 02.11.2017
Сообщений: 31
По умолчанию

Цитата:
Сообщение от Dormammu Посмотреть сообщение
Это массив типа integer. Объявлен. IVECT=array[1..n] of integer;
так как к массиву обращаться надо?
так ip(i):=I
или так ip[i]:=I

я правлю ваш код поверьте у вас десяток ошибок

так он хотя бы компилиться
Код:
program ChM_KR;
const n=4;
type RMATR=array[1..n,1..n] of real;
  IVECT=array[1..n] of integer;
  RVECT = array [1..n] of real;

Procedure DECOMP(n:integer; var A:rmatr; var eps: real; var ip:ivect; var det:real; var ifsolve: Boolean);
Label  10;
Var I, j, k, km, ipm : integer;
  S, norm, am : real;
Begin
  Ifsolve := true;
  Det := 1.0;
  For I :=1 to n do ip[i]:=I;
  Norm:=0.0;
  For i:=1 to n do
  Begin s := 0.0;
    For j := 1 to n do s:= s+abs(A[i, j]);
    If norm<s then norm:=s
  End;
  Eps := eps*norm;
  For k:= 1 to n+1 do
  Begin
    Am := abs(A[k, k]); km:=k;
    For I := k+1 to n do
      If abs (A[I, k])>am then
      Begin am := abs(A[I, k]); km:=I end;
    If km<>k then
    Begin
      Det := -det; ipm := ip[km];
      Ip [km] := ip[k]; ip[k]:= ipm;
      For j:= 1 to n do
      Begin am:= A[km, j];
        A[km, j]:= A[k, j];
        A[k, j]:= am
      End;
    End;
    If abs (A[k, k])< eps then
    Begin ifsolve := false; goto 10 end;
    For i:=1 to n do
    Begin am := A[I, k] / A[k, k] ; A[I, k]:= am;
      For j:=1 to n do A[I, j] := A[I, j] - am * A[k, j];
    End;
  End;
  10: if ifsolve and (abs(A[n, n])>=eps) then
    For k := 1 to n do det := det * A[k, k]
    Else
      Det := 0.0
End;

Procedure SOLVE ( n:integer; var A:rmatr; var ip:ivect; var s1:rvect);
Var I, j, k:integer;
  S:real;
  Y:rvect;
Begin
  For k :=1 to n do y[k] :=s1[ip[k]];
  For k:= n downto 2 do
  Begin
    S:=Y[k];
    For j := 1 to k-1 do
      s:= s-A[k, j] * Y[ j];
    Y[k]:=s;
  end;
  S1[n] := y[n] / A[n, n];
  For k:= n-1 downto i do
  Begin
    S:= Y[k];
    For j := k+1 to n do
      S:= (S - A[k, j]) * S1[j];
    S1[k] := s / A[k, k]
  End;
end;

begin

end.

Последний раз редактировалось gantzboss; 04.01.2018 в 13:26.
gantzboss вне форума Ответить с цитированием
Старый 04.01.2018, 14:21   #5
Dormammu
 
Регистрация: 19.06.2015
Сообщений: 8
По умолчанию

Большое спасибо за помощь.
Dormammu вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите, пожалуйста, найти ошибку в коде (найти сумму факториалов чётных чисел в заданном диапазоне) kris14 Паскаль, Turbo Pascal, PascalABC.NET 8 25.10.2017 15:42
[Язык C]: В массиве числа образуют неубывающую последовательность. Найти количество различных чисел в массиве. Помогите найти ошибку. Yulia24* Помощь студентам 0 18.10.2016 20:41
Дан массив а(n) типа SWORD. найти сумму всех отрицательных элементов массива.помогите найти ошибку Юлия123456 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 07.09.2016 06:12
Найти седловые точки в матрице(помогите найти ошибку) - pascal tdsotm Помощь студентам 0 20.11.2014 18:57
Помогите найти ошибку - StrToFloat выдаёт ошибку EConvertError для ячеек StringGrid (Delphi) Artsiom Помощь студентам 10 18.12.2013 14:10