Показать сообщение отдельно
Старый 22.05.2015, 22:32   #6 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от 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;
А то я там малость перемудрил. Нет, можно и как в первом варианте, ошибок нет, но так проще.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070