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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.01.2017, 11:19   #1
Anton19901505
Пользователь
 
Регистрация: 08.01.2017
Сообщений: 26
По умолчанию ошибка времени выполнения. индекс выходит за границы массива

CONST
N = 3;
inf = 1 shl 30;
TYPE
myArray = array[1..N, 1..N] of char;
myArray2 = array[1..N - 1, 1..N] of char;
var
m1, m2, m3: myArray;
m11, m22, m33: myArray2;
i, j, code, dig, str, k: integer;
temp: char;

procedure ReadM(var m: myArray);
Var i,j:integer;
begin
for i := 1 to N do
for j := 1 to N do readln(m[i, j]);
end;

function vowel(m: myArray): boolean;
Var i,j:integer;
begin
result := false;
for i := 1 to N do
for j := 1 to N do
if(m[i, j] in ['a', 'e', 'u', 'i', 'o', 'E', 'U', 'I', 'O', 'A']) then begin
result := true;
break;
end;
end;

procedure transp(var m: myArray);
Var i,j:integer;
begin
for i:= 1 to N do
for j := i + 1 to N do begin
temp := m[i, j];
m[i, j] := m[j, i];
m[j, i] := temp;
end;
end;

function digits(m: myArray; var ind: integer): boolean;
Var i,j:integer;
begin
dig := inf;
result := false;
for i := 1 to N do begin
code := ord(m[i, j]) - 48;
if((code >= 0) and (code < 10)) then begin
result := true;
if(dig > code) then begin
dig := code;
ind := i;
end;
end;
end;
end;

procedure moveMatr(m1: myArray; var m2: myArray2; ind: integer);
Var i,j:integer;
begin
k := 0;
for i := 1 to N do
if(i <> ind) then begin
inc(k);
for j := 1 to N do m2[k, j] := m1[i, j];
end;
end;

begin
ReadM(m1);
ReadM(m2);
ReadM(m3);
if(vowel(m1)) then transp(m1);
if(vowel(m2)) then transp(m2);
if(vowel(m3)) then transp(m3);

if(digits(m1, str)) then begin
moveMatr(m1, m11, str);
for i := 1 to N - 1 do begin
for j := 1 to N do write(m11[i, j], ' ');
writeln('');
end;
end else begin
for i := 1 to N do begin
for j := 1 to N do write(m1[i, j], ' ');
writeln('');
end;
end;
writeln('');
if(digits(m2, str)) then begin
moveMatr(m2, m22, str);
for i := 1 to N - 1 do begin
for j := 1 to N do write(m22[i, j], ' ');
writeln('');
end;
end else begin
for i := 1 to N do begin
for j := 1 to N do write(m2[i, j], ' ');
writeln('');
end;
end;
writeln('');
if(digits(m3, str)) then begin
moveMatr(m3, m33, str);
for i := 1 to N - 1 do begin
for j := 1 to N do write(m33[i, j], ' ');
writeln('');
end;
end else begin
for i := 1 to N do begin
for j := 1 to N do write(m3[i, j], ' ');
writeln('');
end;
end;
writeln('');
readln();
end.

Антон1990 на форуме Сообщить модератору о нарушении Мультицитирование этого сообщения
Anton19901505 вне форума Ответить с цитированием
Старый 08.01.2017, 11:42   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

паскаль, обычно, номер строки с ошибкой выдает.
в moveMatr 2 цикла идут к N.

з.ы.
неплохо научиться тегом [code] пользоваться
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка индекс находился вне границ массива stopping Помощь студентам 1 03.11.2016 19:33
Программа не выходит после выполнения (Язык С) RaccoonRocket Помощь студентам 2 08.02.2016 14:13
Таблица выходит за границы сайта Glowworm HTML и CSS 9 21.04.2014 11:19
Ошибка времени выполнения: Индекс находился вне границ массива (pascal) dijetol Помощь студентам 2 10.04.2014 16:16
Ошибка: Индекс находился вне границ массива archi-boy C# (си шарп) 11 15.11.2013 12:45