Цитата:
Сообщение от Asya_inter
Vladimir_S, спасибо!
|
Всегда пожалуйста!
Цитата:
Сообщение от Asya_inter
А вы можете пояснить
|
Могу.
Цитата:
Сообщение от Asya_inter
почему там после Writeln '+St+' пишется с плюсами?
|
Это один из способов вывода цепочки строковых переменных. Например, если Вам нужно вывести подряд строки S1, 'Vasya', 'and', 'Asya', то это можно сделать так: Writeln(S1+'Vasya'+'and'+'Asya') ;
Цитата:
Сообщение от Asya_inter
в первой процедуре переводим числа в строковый тип;
|
Правильно. Только там не процедура, а функция. И не просто в строковый тип, а в двоичную форму. Например, если на входе будет 7, то на выходе - '111'.
Цитата:
Сообщение от Asya_inter
Во второй процедуре обратно.
|
А вот это - абсолютно неверно! Вторая процедура, точнее, функция считает количество единиц в двоичной записи числа. Если на входе строка '111', то на выходе будет число 3. А если '1101', то тоже 3.
Цитата:
Сообщение от Asya_inter
А как мы узнаём в каком числе больше единиц?
|
Преобразуем с помощью первой процедуры каждое из чисел в двоичную форму, потом с помощью второй процедуры посчитаем количество единиц и сохраним как число, так и количество единиц в его двоичной записи при условии, что это количество - наибольшее из всех введенных чисел. Так эта программа и работает.
Цитата:
Сообщение от Asya_inter
И можно ли сделать, чтобы выводилось это число в десятичном виде?
|
Так это так и делается.
Вообще мой Вам совет - оттранслируйте и запустите программу. Тогда многое прояснится.
Кстати, сейчас увидел, что вторую функцию можно и попроще сделать, без преобразования каждого символа строки в число. Вот так:
Код:
Function Ones(S:String):Byte;
var
i,L,P:Byte;
begin
P:=0;
L:=Length(S);
for i:=1 to L do
if S[i]='1' then Inc(P);
Ones:=P;
end;
А то я там малость перемудрил. Нет, можно и как в первом варианте, ошибок нет, но так проще.