Другие языки программирования и технологии

Помогите понять некоторые детали в программе на паскале

var
i: integer;
s: string;
g: boolean;
x: integer;
begin
readln(s);
i:=length(s);
g:=false;
x:=0;
while ( i >=1) and (not g) do
begin
g:=not (s[i] in ['0'..'9'b]); //что означает i в квадратных скобках перед s, что значит in и это что значит ['0'..'9']?
if not g then x:=x*10+ord(s[i]) -48;//зачем тут ord и опять же i перед s
i:=i-1;
end ;
writeln(x);
end.
1. s[i] - символ строки s с индексом i. Строка - это символьный массив с индексами от 1 до length(s).

2. ['0'..'9'] - множество, содержащее символы от '0' до '9' включительно (т. е. изображения всех десятичных цифр).

3. in - операция проверки того, что значение, находящееся слева от in присутствует в множестве, находящемся справа от in. s[i] in ['0'..'9'] проверяет, что символ строки s с индексом i является изображением цифры.

4. ord преобразует значение любого перечислимого типа в его порядковый номер внутри своего типа. Так символ преобразуется в целочисленный код символа в кодировке ASCII. А 48 - это код символа '0' в данной кодировке. Можно было бы записать x := x * 10 + ord(s[i]) - ord('0') - стало бы понятнее. Конструкция ord(s[i]) - ord('0') преобразует ИЗОБРАЖЕНИЕ цифры в символе s[i] в ЦЕЛОЕ ЧИСЛО, равное этой цифре.

А, например, ord(false) = 0 и ord(true) = 1.

P.S. Где ты этот говнокод откопал?
МП
Микола Павлв
66 147
Лучший ответ
Илья ********* но ведь - 48 стоит после орда
Илья ********* почему тогда он под аски подстраивается?
Всё коряво… Но работает!
тип string в паскале не только строка но и символьный массив.
Оператор in проверяет вхождение символов множества. Проще говоря не цифра ли символ №i в переменной s
Илья ********* сколько бы я не ввёл символов он выводит 0
s - строка, т. е. массив символов. s[i] - означает символ с номером i в строке s. Например, строка s равна 'sometext', тогда если i = 3, то s[i] = 'm'.

['0'..'9'] - это множество символов '0', '1', '2' и так далее до '9'.
in - проверяет, есть ли s[i] в множестве ['0'..'9'], короче говоря, это проверка - есть ли символ s[i] в множестве ['0'..'9']. Таким образом проверяется, является ли символ s[i] - цифрой.

ord - получает целочисленный код символа (символы текста кодируются целыми числами, например символу '*' соответсвует код 10. Тогда ord('*') будет = 10).
Олег Эрмиш
Олег Эрмиш
262