Согласно алгоритму из блок-схемы, пока не получен ноль, число надо делить на 2, если оно четное, и отнимать 1, если нечетное. Проделываем это:
500 (четное) -> 250 (четное) -> 125 (нечетное) -> 124 (четное) -> 62 (четное) -> 31 (нечетное) -> 30 (четное) -> 15 (нечетное) -> 14 (четное) -> 7 (нечетное) -> 6 (четное) -> 3 (нечетное) -> 2 (четное) -> 1 (нечетное) -> 0
Чтобы получить из нуля 500, нужно пойти в обратном порядке: 0 -> 1 -> 2 -> 3 -> 6 -> 7 -> 14 -> 15 -> 30 -> 31 -> 62 -> 124 -> 125 -> 250 -> 500
Для 1024 всё проще:
От 1024 до 0: 1024 -> 512 -> 256 -> 128 -> 64 -> 32 -> 16 -> 8 -> 4 -> 2 -> 1 -> 0 (на всех шагах кроме последнего число уменьшается в 2 раза, на последнем уменьшается на 1)
В обратную сторону 0 -> 1 -> 2 -> 4 -> ... -> 512 -> 1024 (на первом шаге число увеличивается на 1, затем 10 раз увеличивается в 2 раза)
<u>Хорошо, когда задают задачи с решением в одну строчку!</u>
// PascalABC.NET 3.1, сборка 1239 от 08.05.2016
begin
Writeln('Количество "МА" равно ',
ReadlnString('>').MatchValues('МА',RegexOptions.IgnoreCase).Count)
end.
<u><em>Тестовое решение</em></u>
> Мама мыла раму. Маша ела мандарины.
Количество "МА" равно 4
1 мегабайт = 1024 килобайта
1 килобайт = 1024 байт
512*1024*1024=536870912 однобайтовых ячеек
Нужно что-то присвоить функции для случая, когда (2*a+b-c)<0
Например, так:
function sqrt1 (a, b, c: real): real;
begin
if (2 * a + b - c) < 0 then
<span>begin writeln (' complex number '); sqrt1:=-1; end</span>
else sqrt1:= sqrt(2 * a + b - c);
<span>end;</span>