Заменяет в строке var s : string; i, lim : integer; begin readln (s); i := 1; lim := length (s); while (i <= lim) do begin if s[i] in ['1'..'9'] then begin if (s[i] = '1') and (i <> length (s)) and (s[i+1] ='0') then begin write ('ten'); inc (i); end else case s[i] of '1' : write ('one'); '2' : write ('two'); '3' : write ('three'); '4' : write ('four'); '5' : write ('five'); '6' : write ('six'); '7' : write ('seven'); '8' : write ('eight'); '9' : write ('nine'); end; end else write (s[i]); inc (i); end; end.
Ну смотри: есть число. Допустим это 25 для того, чтобы записать любое число у нас есть 10 цифр (0-9). А теперь представим, что цифр только 2(0 и 1).
Но число должно быть записано.
Для числа 0(в десятичной системе) у нас есть число 0 в двоичной.
Для числа 1(в десятичной системе) у нас есть число 1 в двоичной.
Пока все хорошо, но для числа 2 в десятичной у нас нет цифры 2 в двоичной (у нас только 1 и 0)
Так что же делать? Ровно то, что мы делаем, когда кончаются цифры в десятичной системе, переходим на следующей разряд:
2 в десятичной равно 10 в двоичной.
3 в десятичной - 11 в двоичной
4 в десятичной - 100 в двоичной и так далее.
Законы на это действуют такие же, как и на десятичную систему счисления, просто законы эти для нас так очевидны, что мы их не замечаем.
Далее. Ну цифры, ну и что? Да всё. Мы живём в цифровую эпоху и называется она не просто так. Каждый символ набранный на компе или на телефоне - это просто некое число, которому соответствует какая-то картинка(сам символ). Но для того, что бы интерпретировать символы однозначно, нам нужно, что бы каждый символ занимал определенное количество разрядов. Чаще всего на один символ уходит 8 разрядов. С десятичных разрядов можно закодировать числа от 00000000 до 99999999, т.е. 100000000 значений.
Но в двоичной системе она может занимать диапазон от 00000000 до 11111111 и все это в двоичной системе и это 256 значений. Кароче, символов, которыми мы располагаем 256. Это мощность алфавита, т.е. то сколько символов мы можем использовать. Так, например, мощность русского алфавита - 33 символа строчных, 33 заглавных и пробел, т.е. 67 символов. Иногда 256 символов катастрофически не хватает. Например для китайских иероглифов или арабской вязи. Да плюс это все ещё нужно совмещать. Так что умные люди придумали другие стандарты, например utf-8, который, в зависимости от обстоятельств, может занимать от 8 бит (двоичных разрядов) , до 64 бит (для эмодзи и т.п)
Как же вычислить, мощность алфавита?
Она вычисляется так: 2 возводим в степень числа бит. Так для 2^8= 256.
Таким же образом кодируется не только текст, но и изображения.
Есть изображение 512 на 256 px. Px - это что-то вроде буквы в тексте. Всего этих букв 256 в строке, а строк 512. Каждая буква в этом "тексте" - цвет. Если на цвет выделить 1 бит, то цветов будет только 2, ведь 2^1=2. Изображение будет черно-белым. Но если на пиксель выделить 3 бита, цветов может быть 8.
Примерно тоже самое со звуком. Но тут немного сложнее. При записи звука происходят измерения его громкости раз в какой-то момент времени. Обычно (для задач) таких измерений около 50000 в секунду. На каждое измерение в свою очередь тоже тратятся разряды. Обычно они кратны 8. Итак, допустим, что произвели запись 2 секунды звука с частотой дискретизации 50000 гц (измерений в секунду) и на каждое измерение потратили 24 бита. Сколько данных будет занимать такой файл? 2*50000 это число измерений произошедших за 2 секунды. Каждое измерение заняло 24 бита, а значит весь этот файл будет "весить" 2*50000*24 бита.
Если вспомнить, что 8 бит - 1 байт, можно перевести все в байты. А если вспомнить, что в 1 кбайте 1024 байт, то можно продолжить дальше.
var
s : string;
i, lim : integer;
begin
readln (s);
i := 1;
lim := length (s);
while (i <= lim) do
begin
if s[i] in ['1'..'9'] then
begin
if (s[i] = '1') and (i <> length (s)) and (s[i+1] ='0') then
begin
write ('ten');
inc (i);
end
else
case s[i] of
'1' : write ('one');
'2' : write ('two');
'3' : write ('three');
'4' : write ('four');
'5' : write ('five');
'6' : write ('six');
'7' : write ('seven');
'8' : write ('eight');
'9' : write ('nine');
end;
end
else write (s[i]);
inc (i);
end;
end.
Ну смотри: есть число. Допустим это 25 для того, чтобы записать любое число у нас есть 10 цифр (0-9). А теперь представим, что цифр только 2(0 и 1).
Но число должно быть записано.
Для числа 0(в десятичной системе) у нас есть число 0 в двоичной.
Для числа 1(в десятичной системе) у нас есть число 1 в двоичной.
Пока все хорошо, но для числа 2 в десятичной у нас нет цифры 2 в двоичной (у нас только 1 и 0)
Так что же делать? Ровно то, что мы делаем, когда кончаются цифры в десятичной системе, переходим на следующей разряд:
2 в десятичной равно 10 в двоичной.
3 в десятичной - 11 в двоичной
4 в десятичной - 100 в двоичной и так далее.
Законы на это действуют такие же, как и на десятичную систему счисления, просто законы эти для нас так очевидны, что мы их не замечаем.
Далее. Ну цифры, ну и что? Да всё. Мы живём в цифровую эпоху и называется она не просто так. Каждый символ набранный на компе или на телефоне - это просто некое число, которому соответствует какая-то картинка(сам символ). Но для того, что бы интерпретировать символы однозначно, нам нужно, что бы каждый символ занимал определенное количество разрядов. Чаще всего на один символ уходит 8 разрядов. С десятичных разрядов можно закодировать числа от 00000000 до 99999999, т.е. 100000000 значений.
Но в двоичной системе она может занимать диапазон от 00000000 до 11111111 и все это в двоичной системе и это 256 значений. Кароче, символов, которыми мы располагаем 256. Это мощность алфавита, т.е. то сколько символов мы можем использовать. Так, например, мощность русского алфавита - 33 символа строчных, 33 заглавных и пробел, т.е. 67 символов. Иногда 256 символов катастрофически не хватает. Например для китайских иероглифов или арабской вязи. Да плюс это все ещё нужно совмещать. Так что умные люди придумали другие стандарты, например utf-8, который, в зависимости от обстоятельств, может занимать от 8 бит (двоичных разрядов) , до 64 бит (для эмодзи и т.п)
Как же вычислить, мощность алфавита?
Она вычисляется так: 2 возводим в степень числа бит. Так для 2^8= 256.
Таким же образом кодируется не только текст, но и изображения.
Есть изображение 512 на 256 px. Px - это что-то вроде буквы в тексте. Всего этих букв 256 в строке, а строк 512. Каждая буква в этом "тексте" - цвет. Если на цвет выделить 1 бит, то цветов будет только 2, ведь 2^1=2. Изображение будет черно-белым. Но если на пиксель выделить 3 бита, цветов может быть 8.
Примерно тоже самое со звуком. Но тут немного сложнее. При записи звука происходят измерения его громкости раз в какой-то момент времени. Обычно (для задач) таких измерений около 50000 в секунду. На каждое измерение в свою очередь тоже тратятся разряды. Обычно они кратны 8. Итак, допустим, что произвели запись 2 секунды звука с частотой дискретизации 50000 гц (измерений в секунду) и на каждое измерение потратили 24 бита. Сколько данных будет занимать такой файл? 2*50000 это число измерений произошедших за 2 секунды. Каждое измерение заняло 24 бита, а значит весь этот файл будет "весить" 2*50000*24 бита.
Если вспомнить, что 8 бит - 1 байт, можно перевести все в байты. А если вспомнить, что в 1 кбайте 1024 байт, то можно продолжить дальше.