Вы решили эффективно закодировать сообщение на латинице следующим образом: Каждой букве вы поставили в соответствие число от 1 до 26 в порядке возрастания. Каждому слову должно соответствовать число в 27-ричной системе счисления. Например, словy CAT должно соответствовать число 2234 = 3*272+1*271+20, поскольку 3, 1 и 20 – коды букв С, А и Т соответственно. Но вот незадача, вы подцепили вирус на компьютер, который, как выяснилось позже, поменял какие-то две буквы в таблице местами. И при дешифрации вы получили текст с ошибками. В алфавитном порядке без разделителей укажите, какие две буквы были поменяны местами в таблице, если слово со следующим кодом содержит обе ошибочные буквы: 8743276. Подсказка: код соответствует слову, которое переводится на русский, как «самолет». ответ запишите без пробелов и запятых на латинице.
Procedure GetWord(s:string; var p:integer; var w:string; delim:string:=' '); { Получает в w слово из строки s, которое начинается не ранее позиции p. Возвращает новое значение p, указывающее на первый разделитель delim, который следует за найденным словом или 0, если такой разделитель не найден. По умолчанию слова разделяются не менее чем одним пробелом } var i,n:integer; fBreak:boolean; { флажок для прерывания циклов } begin n:=Length(s); fBreak:=False; {ищем первый символ, отличный от разделителя - начало слова } while ((p<=n) and (not fBreak)) do if (p=n) or (s[p]<>delim) then fBreak:=True else Inc(p); { ищем очередной разделитель - конец слова } if p<n then begin i:=p; Inc(p); fBreak:=False; while (p<=n) and (not fBreak) do begin if (p=n) or (s[p]=' ') then fBreak:=True else Inc(p) end; { теперь слово находится между позициями i и p } w:=Copy(s,i,p-i) end; if p>=n then p:=0 end;
function CountG(w:string):integer; { возвращает количество гласных в слове w} var i,k:integer; begin k:=0; for i:=1 to length(w) do if w[i] in ['а','е','ё','и','о','у','ы','э','ю','я'] then Inc(k); CountG:=k end;
var s,w,wmax:string; p,k,gmax:integer; begin Writeln('Введите текст, разделяя слова пробелами'); Readln(s); s:=LowerCase(s); p:=1; gmax:=0; while p>0 do begin GetWord(s,p,w); k:=CountG(w);; if gmax<k then begin gmax:=k; wmax:=w end end; if gmax>0 then Writeln('В слове "',wmax,'" максимум гласных, равный ',gmax) else Writeln('Во введенной строке гласных букв не найдено') end.
3542816 (из 10 в 2 систему исчисления) схема проста делим число на два до тех пор пока не останется 1(т.е. поделили, затем еще раз, и еще раз, и еще) надеюсь что такое остаток от деления ясно, так вот остатки от деления это и есть двоичная система, но записывать число необходимо справа налево результат 3542816(10) = 1101100000111100100000(2) 110011101 (из 2 в 10) умножаем на 2 в степени числа, степень числа считается справа налево начиная с 0., т.е 1*2:0+0*2^1+1*2^2+ 1*2^3+ 1*2^4 результат 110011101(2) = 413(10) 11010111 (из 2 в 8) там должна быть таблица, уверен вы ее записывали, смысл в том чтобы по три цифры (справа считая) переводим в 8чную систему справа налево-111-010-011 результат 11010111(2) = 327(8) 152FC4 (з 16 в 10, из 10 в 2) так же как и из двоичной в десятичную но теперь числа умножаем не на 2 а на 16, т.е 4*16^0+12*16^1? а как из десятичной в двоичную уже рассказывал, результат 152FC4(16) = 1388484(10) 1388484(10) = 101010010111111000100(2)
{
Получает в w слово из строки s, которое начинается не ранее позиции p.
Возвращает новое значение p, указывающее на первый разделитель delim,
который следует за найденным словом или 0, если такой разделитель не найден.
По умолчанию слова разделяются не менее чем одним пробелом
}
var
i,n:integer;
fBreak:boolean; { флажок для прерывания циклов }
begin
n:=Length(s); fBreak:=False;
{ищем первый символ, отличный от разделителя - начало слова }
while ((p<=n) and (not fBreak)) do
if (p=n) or (s[p]<>delim) then fBreak:=True
else Inc(p);
{ ищем очередной разделитель - конец слова }
if p<n then begin
i:=p; Inc(p); fBreak:=False;
while (p<=n) and (not fBreak) do begin
if (p=n) or (s[p]=' ') then fBreak:=True else Inc(p)
end;
{ теперь слово находится между позициями i и p }
w:=Copy(s,i,p-i)
end;
if p>=n then p:=0
end;
function CountG(w:string):integer;
{ возвращает количество гласных в слове w}
var
i,k:integer;
begin
k:=0;
for i:=1 to length(w) do
if w[i] in ['а','е','ё','и','о','у','ы','э','ю','я'] then Inc(k);
CountG:=k
end;
var
s,w,wmax:string;
p,k,gmax:integer;
begin
Writeln('Введите текст, разделяя слова пробелами');
Readln(s);
s:=LowerCase(s);
p:=1; gmax:=0;
while p>0 do begin
GetWord(s,p,w);
k:=CountG(w);;
if gmax<k then begin gmax:=k; wmax:=w end
end;
if gmax>0 then Writeln('В слове "',wmax,'" максимум гласных, равный ',gmax)
else Writeln('Во введенной строке гласных букв не найдено')
end.
результат 3542816(10) = 1101100000111100100000(2)
110011101 (из 2 в 10) умножаем на 2 в степени числа, степень числа считается справа налево начиная с 0., т.е 1*2:0+0*2^1+1*2^2+ 1*2^3+ 1*2^4
результат 110011101(2) = 413(10)
11010111 (из 2 в 8) там должна быть таблица, уверен вы ее записывали, смысл в том чтобы по три цифры (справа считая) переводим в 8чную систему справа налево-111-010-011
результат 11010111(2) = 327(8)
152FC4 (з 16 в 10, из 10 в 2) так же как и из двоичной в десятичную но теперь числа умножаем не на 2 а на 16, т.е 4*16^0+12*16^1? а как из десятичной в двоичную уже рассказывал,
результат 152FC4(16) = 1388484(10) 1388484(10) = 101010010111111000100(2)