Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 06.07.2017
Сообщений: 4

Индекс находился вне границ массива

06.07.2017, 19:14. Показов 2575. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
program MGauss;
{Решение систем линейных уравнений методом Гаусса}
Uses Crt;
const
  FileInp = 'gauss-p.txt';
  FileOut = 'gauss-s.txt';
 
type
  IntType = Byte;
  RealType = Extended;
  VecType = Array [1..3] of RealType;
  MatrixType = Array [1..3, 1..3] of RealType;
 
var
  a: MatrixType;
  x, b: VecType;
  I, j, k, k1, N: IntType;
  fi, fo: Text;
 
 
procedure Gauss(N: IntType; A: MatrixType; B: VecType; var X: VecType);
{Классический метод Гаусса}
var
  i, j, k: IntType;
  h: RealType;
begin
  {Прямой ход}
  for k := 1 to N do
    for i := k + 1 to N do
      if i <> k Then
      begin
        h := -A[i, k] / A[k, k];
        for j := 1 to N do
          if j = k Then A[i, j] := 0
          else
            A[i, j] := A[i, j] + h * A[k, j];
        B[i] := B[i] + h * B[k];
      end
      else Continue;
  
  {Обратный ход}
  X[N] := B[N] / A[N,N];
  for i := N - 1 downto 1 do
  begin
    h := B[i];
    for j := i + 1 to N do h := h - X[j] * A[i, j];
    X[i] := h / A[i, i];
  end;
end;{Gauss}
 
begin
  {Очищает экран, модуль Crt}
  ClrScr;
  Assign(fi, FileInp);
  Reset(fi);
  
  {Чтение исходной СЛАУ из файла}
  ReadLn(fi);
  for i := 1 to N do
  begin
    for j := 1 to N do Read(fi, a[i, j]);
    ReadLn(fi);
  end;
  for i := 1 to N do Read(fi, b[i]);
  Close(fi);
  Assign(fo, FileOut);
  Rewrite(fo);
  WriteLn(fo, 'СИСТЕМА ЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ:');
  {Запись исходной СЛАУ в выходной файл}
  for i := 1 to N do
  begin
    for j := 1 to N do
    begin
      Write(' ', a[i, j]:5:2);
      Write(fo, ' ', a[i, j]:5:2);
    end;
    WriteLn(' ', b[i]:5:2);
    WriteLn(fo, ' ', b[i]:5:2);
  end;
  Gauss(N, a, b, x);
  
  {Корни}
  WriteLn(' ');
  WriteLn('РЕЗУЛЬТАТЫ ');
  for i := 1 to N do WriteLn('x[', I:2, ']= ', x[i]:7:3);
  WriteLn(fo, ' ');
  WriteLn(fo, 'РЕЗУЛЬТАТЫ ');
  for i := 1 to N do WriteLn(fo, 'x[', I:2, ']= ', x[i]:7:3);
  Close(fo);
  WriteLn('KeyPressed');
  repeat until KeyPressed; {Ожидает нажатия любой клавиши, модуль Crt}
end.
В ProgrammRunner выдаёт:
Unhandled Exception: System.IndexOutOfRangeException: Индекс находился вне границ массива.
в MGauss.MGauss.Gauss(Byte N, MatrixType A, VecType B, VecType& X) в C:\Users\OneOfTheBeatles\Desktop\MGauss. pas:строка 42
в MGauss.MGauss.$Main() в C:\Users\OneOfTheBeatles\Desktop\MGauss. pas:строка 80
в MGauss.Program.Main()Программа завершена, нажмите любую клавишу . . .

42 строка: X[N] := B[N] / A[N,N];

80 строка: Gauss(N, a, b, x);

В исходном txt-файле:
3.430 3.380 3.090 4.170 4.000 3.650 4.300 4.100 3.670
5.520 6.930 7.290

Спасибо за любую помощь или её попытку!

Добавлено через 8 минут
Да, до этого я изменил 58 строку:
ReadLn(fi, N);

на
ReadLn(fi)
так как в командной строке выдавал:
Unhandled Exception: System.FormatException: Входная строка имела неверный формат.
в PABCSystem.PABCSystem.Read(Text f, Byte& x) в C:\Program Files (x86)\PascalABC.NET\LibSource\PABCSystem .pas:строка 4789
в MGauss.MGauss.$Main() в C:\Users\OneOfTheBeatles\Desktop\MGauss. pas:строка 58
в MGauss.Program.Main()Программа завершена, нажмите любую клавишу . . .

И только сейчас я подумал, что может я просто глупо одну ошибку переделал на другую.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.07.2017, 19:14
Ответы с готовыми решениями:

Индекс находился вне границ массива
Программа на процедуры program lab; type mas=array of integer; var b,x:mas; procedure vvod(j:integer; var x:mas; Q:char); var...

Индекс находился вне границ массива
Уважаемые! вот подскажите мне почему не запускается вторая программа? program Searcher; uses crt; procedure XYZ; var...

Индекс находился вне границ массива
Здравствуйте. Вот решил написать функцию length. При компиляции выдаёт ошибку с строчке while s&lt;&gt;'' do begin И пишет, что...

3
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
06.07.2017, 19:38
Лучший ответ Сообщение было отмечено OneOfTheBeatles как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
program MGauss;
{Решение систем линейных уравнений методом Гаусса}
Uses Crt;
const
  FileInp = 'gauss-p.txt';
  FileOut = 'gauss-s.txt';
  N=3;
type
  IntType = Byte;
  RealType = real;
  VecType = Array [1..N] of RealType;
  MatrixType = Array [1..N, 1..N] of RealType;
 
var
  a: MatrixType;
  x, b: VecType;
  fi, fo: Text;
 
 
procedure Gauss(N: IntType; A: MatrixType; B: VecType; var X: VecType);
{Классический метод Гаусса}
var h: RealType;
begin
  {Прямой ход}
  for var k := 1 to N do
    for var i := k + 1 to N do
      if i <> k Then
      begin
        h := -A[i, k] / A[k, k];
        for var j := 1 to N do
          if j = k Then A[i, j] := 0
          else
            A[i, j] := A[i, j] + h * A[k, j];
        B[i] := B[i] + h * B[k];
      end
      else Continue;
  
  {Обратный ход}
  X[N] := B[N] / A[N,N];
  for var i := N - 1 downto 1 do
  begin
    h := B[i];
    for var j := i + 1 to N do h := h - X[j] * A[i, j];
    X[i] := h / A[i, i];
  end;
end;{Gauss}
 
begin
  {Очищает экран, модуль Crt}
  ClrScr;
  Assign(fi, FileInp);
  Reset(fi);
  {Чтение исходной СЛАУ из файла}
  for var i := 1 to N do
  for var j := 1 to N do 
  Read(fi, a[i, j]);
  for var i := 1 to N do 
  Read(fi, b[i]);
  Close(fi);
  Assign(fo, FileOut);
  Rewrite(fo);
  WriteLn(fo, 'СИСТЕМА ЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ:');
  {Запись исходной СЛАУ в выходной файл}
  for var i := 1 to N do
  begin
    for var j := 1 to N do
    begin
      Write(' ', a[i, j]:5:2);
      Write(fo, ' ', a[i, j]:5:2);
    end;
    WriteLn(' ', b[i]:5:2);
    WriteLn(fo, ' ', b[i]:5:2);
  end;
  Gauss(N, a, b, x);
  
  {Корни}
  WriteLn(' ');
  WriteLn('РЕЗУЛЬТАТЫ ');
  for var i := 1 to N do WriteLn('x[', I:2, ']= ', x[i]:7:3);
  WriteLn(fo, ' ');
  WriteLn(fo, 'РЕЗУЛЬТАТЫ ');
  for var i := 1 to N do WriteLn(fo, 'x[', I:2, ']= ', x[i]:7:3);
  Close(fo);
  WriteLn('KeyPressed');
  ReadKey; {Ожидает нажатия любой клавиши, модуль Crt}
end.
1
0 / 0 / 0
Регистрация: 06.07.2017
Сообщений: 4
06.07.2017, 20:29  [ТС]
Спасибо большое!
Цитата Сообщение от Puporev Посмотреть сообщение
VecType = Array [1..N] of RealType; MatrixType = Array [1..N, 1..N] of RealType
Если вам не трудно ответить, просто мне интересно, в этом была основная ошибка? Я вижу ещё 'extended' на 'real' было изменено (в методичке, по которой я делал просто было так, но у меня не работало, думал, у меня одного), добавлены var перед упоминаниями i и j, убраны неиспользующиеся переменные (а ведь Pascal предупреждал) и Repeat Until KeyPressed заменено на лаконичное ReadKey. Надеюсь ничего не упустил, просто хочется разобраться. Спасибо, если ответите. Даже если не ответите, всё равно спасибо за программу!
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
06.07.2017, 20:37
Основные ошибки
Pascal
1
2
3
4
5
 ReadLn(fi);//это зачем?
  for i := 1 to N do
  begin
    for j := 1 to N do Read(fi, a[i, j]);
    ReadLn(fi);/и это
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.07.2017, 20:37
Помогаю со студенческими работами здесь

Индекс находился вне границ массива
Помогите пожалуйста,рисует ошибочку: &quot;Индекс находился вне границ массива&quot;. :( Программа сама по себе работает,но в конце выдает...

Индекс находился вне границ массива
Нужно составить программу, которая выводит имена отличников и сколько процентов они составляют от всего числа учеников. Почему в 18...

Записи: Индекс находился вне границ массива
const n=2; type anketa=record fio:string; data:string; adres:string; zp:integer; end; var mas:array of anketa; ...

Ошибка времени выполнения: Индекс находился вне границ массива
Всем доброго времени суток! Есть задача.В строчке tip:=s; выдает ошибку &quot;B3.pas(28) : Ошибка времени выполнения: Индекс находился вне...

Ошибка времени выполнения: Индекс находился вне границ массива
program TAB3; var i:integer; A:array of real; B:array of real; begin i:=0; while i&lt;=3 do begin B:=A+1;B:=A; i:=i+1;


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru