Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Теоретические вопросы _ Помогите расшифровать фрагмент c chr и ord

Автор: Alexey 11.10.2007 2:09

Подскажите, пожалуйста, что делают данные строки:

Код
case c of
'а'..'п':stmp:=stmp+chr(ord(c)-32);
'р'..'я':stmp:=stmp+chr(ord(c)-80);
else stmp:=stmp+upcase(c);
end;

stmp - переменная типа line...
Не могу врубиться.

Автор: volvo 11.10.2007 2:17

Цитата
что делают данные строки:

Ну, наверное, то же самое, что и вот эти: http://forum.pascal.net.ru/index.php?s=&showtopic=3228&view=findpost&p=29033
только работают со строкой...
smile.gif

Автор: Alexey 11.10.2007 2:23

Т.е. если с = от а до п, или от р до я, ей присваивается соответствующее значение в латинском алфавите?
а если с - буква лат.алфавита, то в переменную stmp добавляется эта же буква, но большая?..

Автор: volvo 11.10.2007 2:37

Нет... Ты же не привел фрагмент полностью... Скорее всего, там идет цикл по всем символам строки... И каждый символ переводится в верхний регистр... Чтобы перевести в верхний регистр строчные русские буквы 'а' .. 'п' достаточно из кода буквы вычесть 32, для букв 'р' .. 'я' - вычитается 80, все остальные символы нормально переводятся встроенной функцией Upcase... Ну, и поскольку строка - то переведенный символ добавляется в конец строки-результата...

Итого: скорее всего имеется функция получающая на вход строку символов (любых - русских или латинских), и возвращающая эту же строку переведенную в верхний регистр...

Автор: Alexey 11.10.2007 2:40

Вот сама функция:

Код
function stupcase(s:line):line;
      var
         stmp:line;
         i:byte;
         c:char;
      begin
       stmp:='';
             for i:=1 to length(s) do
                 begin
                  c:=s[i];
                   case c of
                    ' '..'Ї':stmp:=stmp+chr(ord(c)-32);
                    'а'..'п':stmp:=stmp+chr(ord(c)-80);
                    else stmp:=stmp+upcase(c);
                 end;
      end;
      stupcase:=stmp;
end;

Так оно и есть (вроде), спасибо...
А то не думается об информатике в 12 часов ночи)))