Дистанционная подготовка: Паскаль берет цифры из ниоткуда.
Паскаль берет цифры из ниоткуда.
от Никита Пушкин - Пятница 24 Октябрь 2014, 20:21
112037. Список школ
  Написал программу, в целом она работает, но у меня возникла одна проблема: при счете некоторых строк и поиске в них цифр, программа иногда берет цифры абсолютно с потолка и приписывает их, в результате чего номер школы получается совершенно иной. Причем у меня возникает ощущение, что эти цифры он берет из номеров предыдущих школ. Приведу пример. У меня есть две строки с содержанием a21 и b9, идущими друг после друга. После счета строки с b9(счет абсолютно верен, в переменную s считалось значение "b9") и поиска числа в этой строке переменная snum, отвечающая за это самое число, содержит значение "921". Вопрос: что это за фигня? Может, в моем Паскале реально завелся призрак?
Вот код части программы, отвечающей за считывание данных и поиск чисел в строках:

for i:=1 to n do     
begin               
  readln(s);
  j:=0;
  bo:=false;
  while (bo=false) and (j<=100) do
  begin
    snum:='';
    num:=0;
    inc(j);
    if s[j] in ['0'..'9'] then
    begin
      bo:=true;
      while (j<=100) do
      begin
        if (s[j] in ['0'..'9']) then
        snum:=snum+s[j];
        inc(j);
      end;
      val(snum,num);
      inc(a[num]);
      if num>max then max:=num;
    end;
  end;
end;
Re: Паскаль берет цифры из ниоткуда.
от Никита Пушкин - Пятница 24 Октябрь 2014, 20:48
  Кстати говоря, я смог найти некоторую закономерность в распределении этих "магических" цифр. Если у нас в одной строке была школа с двузначным номером, а в следующей строке школа с однозначным номером, то вторая строка будет обработана неверно. Проходил по программе с включенными тестами, и цифры действительно берутся из ниоткуда, строка-то сама правильно считывается.