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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.12.2011, 00:04   #1
Winterfox
 
Регистрация: 04.12.2011
Сообщений: 9
Печаль Никак не разберусь с ошибкой выхода за границы диапазона.

Выскакивает ошибка 256 - ошибка диапазона изменения индекса 0..225.
В этой части программы нам нужно найти в тексте заданное слово - 'if'. Помогите, пожалуйста, понять в чём ошибка.

Код:
var
   s,s1,s2:string;
   File1,File2: text;
   i,k,p: integer;
   slova:array[1..51] of string;
begin
   slova[1]:='if'; {требуемое слово}

   Assign (File2, 'File2.pas'); Rewrite (File2);
   Assign (FIle1, 'File1.pas'); Reset(File1);
   while not eof(File1) do begin {пока не конец файла делаем}
      read(File1,s); {читаем первую строку файла}
      i:=1;
      while i<=length(s) do begin {пока не дошли до конца строки делаем}
         if (s[i]<>' ') and ((s[i-1]=' ')or(i=1)) then begin
         {если мы на первой букве в слове или в самом начале строки}
            k:=i;
            while ((s[k]<>' ') or (s[k]<>';') or (s[k]<>'.') or (s[k]<>',') or (s[k]<>'(')) do begin
{пока не встретили символ, означающий конец слова, записываем слово}
               s1:=s1+s[k];
               k:=k+1;
            end;
            if (s1=slova[1]) then {если слово равно заданному}
            p:=p+1; {считаем его количество повторений}
         end;
         if p<>0 then begin  {если слово есть в тексте, то выводим его и количество повторений}
            writeln(s1,p); p:=0;
         end;
      s1:='';
      i:=i+1;
      end;
      readln(File1,s);
   end;
   close(File2);
   close(File1);
end.


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 06.12.2011 в 08:42.
Winterfox вне форума Ответить с цитированием
Старый 06.12.2011, 00:07   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

ошибка та же, ответ тот же
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 06.12.2011, 00:40   #3
Winterfox
 
Регистрация: 04.12.2011
Сообщений: 9
По умолчанию

ну так даже если я вместо i попробую поставить 2. Всё равно такая же ошибка выходит.
Winterfox вне форума Ответить с цитированием
Старый 06.12.2011, 00:58   #4
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

ну ок, а кто сказал, что все строки обязательно заканчиваются этими символами?

Код:
            while ((s[k]<>' ') or (s[k]<>';') or (s[k]<>'.') or (s[k]<>',') or (s[k]<>'(')) do begin
{пока не встретили символ, означающий конец слова, записываем слово}
               s1:=s1+s[k];
               k:=k+1;
            end;
k безконтрольно выходит за длину s
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 06.12.2011, 21:37   #5
Winterfox
 
Регистрация: 04.12.2011
Сообщений: 9
По умолчанию

Изменил условие окончания слова на:
Цитата:
while ((s[k]<>' ') or (s[k]<>';') or (s[k]<>'.') or (s[k]<>',') or (s[k]<>'(') or (k<=length(s))) do begin
Ошибка где-то в нём. Когда я оставляю одно условие - никакого переполнения нету. Значит я неправильно записал условие цикла. Каак следует оформить условие, чтобы устранить ошибку?
Winterfox вне форума Ответить с цитированием
Старый 06.12.2011, 21:52   #6
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

например, так:

Код:
while ( (k <= length(s)) and not (s[k] in [' ', ';', '.', ','. '(']) ) do
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 06.12.2011, 22:01   #7
Winterfox
 
Регистрация: 04.12.2011
Сообщений: 9
По умолчанию

Благодарю.
Winterfox вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль. Выдёт ошибку "выход за границы диапазона" Winterfox Помощь студентам 1 04.12.2011 14:13
Не разберусь с CopyRect Николая Ленин Общие вопросы Delphi 5 30.05.2011 22:54
Получить границы диапазона через InputBox kipish_lp Microsoft Office Excel 4 18.08.2010 14:14
Ошибка "выход за границы диапазона" Luuun Помощь студентам 6 28.01.2010 22:39
Никак не разберусь почему не работает.. CodeExpert Помощь студентам 11 21.12.2009 02:10