Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Pascal Ошибка времени выполнения: Индекс находился вне границ массива. / 9 сообщений из 9, страница 1 из 1
11.11.2013, 08:55
    #38459838
Allllllllllex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pascal Ошибка времени выполнения: Индекс находился вне границ массива.
Pascal Ошибка времени выполнения: Индекс находился вне границ массива.
Цикл с предусловием и изменение условия until i>length(s); не помогает, Не подскажете, почему?

Код: 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.
program ;
 
procedure alg(var f1,f2:text);
var sl,s:string; i,k:integer;
begin
readln(f1,s);
i:=0;
writeln(s);
repeat
if (s[i]=' ')
then begin if sl[1]=sl[length(sl)] then write(f2,sl+' ');
sl:='';
end
else sl:=sl+s[i];
i:=i+1
until i>length(s);
writeln (f2);
s:='';
end;
 
Procedure FileToFile (var f1, f2: text);
begin
     reset(f1);
     rewrite(f2);
    while not eof(f1) do
begin
alg (f1,f2);
     end;
     end;
 
var  s,fname1,fname2 :string;
     var f1,f2:text;
begin
writeln ('печать для каждой строки б в результирующий файл слова, начинающиеся и заканчивающиеся одной и той же буквой.');
writeln ('введите имя файла');
readln (fname1);
if FileExists(fname1+'.txt') then begin
   writeln ('Введите имя рeзультирующего файла');
   readln(fname2);
   assign(f1,fname1+'.txt');
   assign(f2,fname2+'.txt');
   FileToFile(f1,f2);
   end;
writeln ('Результат - в результирующий файл');
close(f1);
close(f2);
end.
...
Рейтинг: 0 / 0
11.11.2013, 10:16
    #38459909
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pascal Ошибка времени выполнения: Индекс находился вне границ массива.
Allllllllllex,

1)это в форум по дельфи, наверное
2)вы объявили sl:string
там изначально пустая строка (длины 0)
а вы пытаетесь из пустой строки достать первый символ
то есть из "массива" "нулевой" длины достать "первый" элемент
вроде так
...
Рейтинг: 0 / 0
11.11.2013, 10:20
    #38459914
акуз-лингвист
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pascal Ошибка времени выполнения: Индекс находился вне границ массива.
Allllllllllex
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
var sl,s:string;
...
i:=0;
...
repeat
if (s[i]=' ')
...
until i>length(s);


1. в стринге обращение к нулевому символу - это чтение длины строки.
2.
Allllllllllex
Код: pascal
1.
if sl[1]

а он есть вообще, этот [1]?
...
Рейтинг: 0 / 0
11.11.2013, 10:43
    #38459941
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pascal Ошибка времени выполнения: Индекс находился вне границ массива.
акуз-лингвиста он есть вообще, этот [1]?ну, на первом проходе цикла его точно нет :)
...
Рейтинг: 0 / 0
11.11.2013, 11:04
    #38459960
Allllllllllex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pascal Ошибка времени выполнения: Индекс находился вне границ массива.
Исправил for i:=1 вместо 0

for i:=1 to ((length(s))) do
begin
if (s[i]=' ') // Если очередной символ - пробел
then begin if sl[1]=sl[length(sl)] then write(f2,sl+' ');

так теперь тоже для следующей строки пишет: для then begin if sl[1]=sl[length(sl)] then write(f2,sl+' ');
...
Рейтинг: 0 / 0
11.11.2013, 11:19
    #38459977
акуз-лингвист
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pascal Ошибка времени выполнения: Индекс находился вне границ массива.
Allllllllllexтак теперь тоже для следующей строки пишет: для then begin if sl[1]=sl[length(sl)] then write(f2,sl+' '); begin if sl[1]=sl[length(sl)]
заменить на
begin if length(sl)>0 then if sl[1]=sl[length(sl)]
...
Рейтинг: 0 / 0
11.11.2013, 14:50
    #38460467
Allllllllllex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pascal Ошибка времени выполнения: Индекс находился вне границ массива.
Спасибо огромное! После этой замены и замены цикла на цикл с предусловием что-то как-то заработало.
...
Рейтинг: 0 / 0
05.08.2014, 09:03
    #38712711
наталья1982
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pascal Ошибка времени выполнения: Индекс находился вне границ массива.
PEX: System.IndexOutOfRangeException: Индекс находился вне границ массива.
в q.a(Byte[] a, Int32 A, Int32 b, Byte[] B, Int32 c)
в N.a(o a)
в l.a(Packet a) ВОТ ТАКАЯ ОШИБКА ВЫЛАЗИТ В ТЕКСТОВОМ ФОРМАТЕ НА РАБОЧИЙ СТОЛ ! ПОДСКАЖИТЕ ПОЖАЛУЙСТА ЧТО ЭТО МОЖЕТ БЫТЬ И ЧТО ЭТО ВООБЩЕ???
...
Рейтинг: 0 / 0
05.08.2014, 09:26
    #38712726
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pascal Ошибка времени выполнения: Индекс находился вне границ массива.
наталья1982,

Это попытка доступа к элементу массива за его пределами. Может возникать для список (xxxxxxList,строк,массивов)... Погасить/исправить без исходных текстов - только хаком бинарника.

P.S. Чукча не читатель?
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Pascal Ошибка времени выполнения: Индекс находился вне границ массива. / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]