Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Интересные и занимательные задачи по программированию > алгоритм для функции


Автор: zoom27 27.6.2010, 20:40
Друзья,нужна помощь в решении нижеприведенной задачки.Заранее спасибо!

оператор % возвращает остаток от деления т.е. 7%3=1, и 19%20=19
Функция Алгоритм(А)
П=2
В=1
Ит=0
Пока В>0 цикл
М=А%П;
А=(А-М)/П;
Ит=Ит+И*B;
Если А=0, тогда 
В=0;
иначе 
В=В*10;
Конец Если;
Конец Цикла;
Возврат (Ит);
Конец функции

Чему равна переменная Выход=Алгоритм(9)
Что делает приведенная функция?
Какую роль выполняет П?
Что произойдет, если установить ее равной 3,4,9 ?



Автор: oleg_in62 13.8.2010, 13:35
вобщем, может ответ и запоздалый но, все же, эта функция выполняет преобразование из десятичной системы исчисления в любую другую с основой П(но не ту в которой есть буквы, как например шестнадцатиричная).
а теперь ответы попорядку
1) Выход=Алгоритм(9) = 1001 то есть 9 в двоичной системе исчисления
2) функция выполняет преобразование из десятичной системы исчисления в любую другую с основой П(но не ту в которой есть буквы, как например шестнадцатиричная).
3) П это основание системы исчисления
4) если П установить равной 3 то аргумент А передаваемый в функцию будет преобразован в А только в троичной системе исчисления и т.д.

НО!!!! в этой функции есть баг, эсли Аргумент, передаваемый в функцию, является квадратом основания(А*А=П) то функция работает не коректно, возвращаемое число будет равно 100!

пример кода на С#
Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        public int func(int a)
        {
            int p = 2;
            int b = 1;
            int It = 0;
            int m;
            while (b > 0)
            {
                m = a % p;
                a = (a - m) / p;
                It = It + m * b;
                //Console.WriteLine("{0}, {1}, {2}",a,p,m);
                if (a == 0)
                {
                    b = 0;
                }
                else
                {
                    b = b * 10;
                }

            }
            return It;
        }
        static void Main(string[] args)
        {
            int param = 9;
            Program pr=new Program();
            Console.WriteLine(pr.func(param));
        }
    }
}
 

Автор: topwellwrite 21.12.2020, 05:59
Модератор: Сообщение скрыто.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)