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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2011, 19:37   #1
Broken Angel
Пользователь
 
Регистрация: 31.12.2010
Сообщений: 14
Восклицание "Индекс вне границ массива". Строки. (Проблема еще не решена)

Пожалуйста, поясните, что означает "Индекс вне границ массива" и как этого избежать! (По возможности переделайте программу)
У меня прога такая:
Код:
uses crt;
const
M=[' ',',','.',';',':','-','=','+'];
var
 ir, ir1:integer;
 str,max,temp:string;
 Kol_Slov:Byte;
 Max_kol_slov:Byte;
begin
 writeln('Введите строку:');
 readln(str);
  temp:='';
  max:='';
  Kol_slov:=0;
  Max_Kol_slov:=0;
  {пробегаем всю строку посимвольно}
  for ir:=1 to length(str)+1 do
  begin
   ir1:=ir;
   if  (not (str[ir1] in M)) and (str[ir1] <> ' ') and (ir1 <> Length(str)+1) then
      temp:=temp+str[ir1]
   Else
   if (str[ir1] in M)  or (str[ir1] = '') or (ir1 = Length(str)+1) then
   begin
     Inc(Kol_slov);
     if length(temp)>length(max) then
     Begin
       Max_Kol_slov:=Kol_slov-1;
       max:=temp;
     End;
     temp:='';
   end;
   end;
   textcolor(red);
  writeln('Слово максимальной длины: ',max,'.');
  writeln('Количество слов до него: ', Max_Kol_slov,'.');
  Readln;
  end.
Задание - вывод слов, стоящих до самого длинного слова. Помогите, очень надо сегодня!

Последний раз редактировалось Broken Angel; 17.01.2011 в 21:19.
Broken Angel вне форума Ответить с цитированием
Старый 17.01.2011, 20:01   #2
GetMax
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 588
По умолчанию

Проверил программу. Вроде все работает. Приведите что ли пример строки, при вводе которой возникает ошибка
Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
Для благодарностей WMR R145235935681
GetMax вне форума Ответить с цитированием
Старый 17.01.2011, 20:51   #3
Broken Angel
Пользователь
 
Регистрация: 31.12.2010
Сообщений: 14
Сообщение

Ошибка указывает на эти две строки из программы.
1)
Код:
 if  (not (str[ir1] in M)) and (str[ir1] <> ' ') and (ir1 <> Length(str)+1) then
2)
Код:
 if (str[ir1] in M)  or (str[ir1] = '') or (ir1 = Length(str)+1) then
Не работает в нэтовской ABC (хотя компилируется без проблем). В обычной ABC она, несомненно, работает.

Последний раз редактировалось Broken Angel; 17.01.2011 в 20:58.
Broken Angel вне форума Ответить с цитированием
Старый 18.01.2011, 10:50   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Код:
length(str)+1
У вас нету
Код:
str[ir1]
. О чем и говорит компилятор.
p51x вне форума Ответить с цитированием
Старый 18.01.2011, 21:16   #5
Broken Angel
Пользователь
 
Регистрация: 31.12.2010
Сообщений: 14
Восклицание

Где не хватает?
Broken Angel вне форума Ответить с цитированием
Старый 18.01.2011, 21:33   #6
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

У тебя написано
for ir:=1 to length(str)+1 do
...
на последней итерации программа пытается обратиться к символу str[length(str)+1]. Очевидно, что такого символа нет -> получаем выход за границы массива.
Son Of Pain вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как обойти "преобразование типа из "string" в "float" невозможно" lexluter1988 Помощь студентам 1 07.08.2010 12:23
Процедура поиска НЕ ищет файлы вне "своей" папки Человек_Борща Общие вопросы Delphi 10 07.06.2010 15:02
C# ошибка:"Индекс находился вне границ массива" potap88 Помощь студентам 16 18.04.2010 15:50
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04