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

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

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

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

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

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

Вот часть программы, в которой выдаёт ошибку. Нужно в текстовом файле найти все слова "begin", "end" и вывести их на экран. Выдаёт ошибку - выход за границы диапазона, не могу понять где она.
Код:
var
    s,slv,s1,s2:string;
    n,i,j,k,p:integer;
    slova:array[1..2] of string;
    File1,File2: text;
begin
   slova[1]:='begin';slova[2]:='end';
   Assign (File2, 'File2.pas'); Rewrite (File2);
   Assign (FIle1, 'File1.pas'); Reset(File1);
   while not eof(File1)
   do begin
   i:=1;
      while not eoln(File1) do begin 
{пока не конец строки}
         read (File1,s);
         while i<=length(s) do begin
         if (s[i]<>' ')and ((s[i-1]=' ')or(i=1)) then 
{если мы на первой букву в слове}
         begin
            k:=i;s1:='';
            while (s[k]<>' ')or (s[k]<>';') or (s[k]<>'.') or(k<=length(s))do 
{пока не уонец слова}
            begin
               s1:=s1+s[k];
               k:=k+1;
            end;
         end;
         if (s1=slova[1]) or (s1=slova[2]) then 
{если слово равно заданному}
         writeln(s1);
         i:=i+1;
         end;
      end;
      readln(File1);
   end;
close(File2);
close(File1);
readln;
end.

Последний раз редактировалось Stilet; 04.12.2011 в 14:10.
Winterfox вне форума Ответить с цитированием
Старый 04.12.2011, 14:13   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вот здесь скорее всего:
Код:
   i:=1;
      while not eoln(File1) do begin 
{пока не конец строки}
         read (File1,s);
         while i<=length(s) do begin
         if (s[i]<>' ')and ((s[i-1]=' ')or(i=1)) then
Ты на первой же итерации требуешь нулевой элемент строки. Не то чтобы это было невозможно, но паскаль скорее всего настроен на проверку такого.
Поэтому либо смени стратегию либо i:=2 изначально выставь
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
на вход подаются сведения об учениках и оценках. Найти тех, кто сдал на "4" и "5" ( Паскаль ) weech Помощь студентам 1 18.11.2011 13:57
Ошибка "выход за границы диапазона" Luuun Помощь студентам 6 28.01.2010 22:39
Паскаль.Программа "Верификация", "Кака бригадиру разделить заработанные деньги?".Сложные Valik102 Паскаль, Turbo Pascal, PascalABC.NET 3 23.06.2009 09:11
Паскаль. 2 задачи (Программа "Верификация","КАК БРИГАДИРУ РАЗДЕЛИТЬ ЗАРОБОТАННЫЕ ДЕНЬГИ") Valik102 Помощь студентам 3 20.05.2009 20:42