Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2011, 02:32   #1
get2null
 
Регистрация: 22.05.2011
Сообщений: 3
По умолчанию Функция на C#

Столкнулся с такой функцией. Только начал изучать программирование, но есть острая надобность разобраться с функцией.


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


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

Следуя первому вопросу А=7, тогда получается
Код:
class zadacha
{
    static void Main()
    {

        int p = 2, v = 1, it = 0, a = 7;
        do
        {
            int m = a % p;
            a = (a - m) / p;
            it = it + m * v;
        } while (v > 0);

        if (a == 0)
            v=0
        else
            v = v * 10;

        Console.ReadLine();
    }
}
Создал в VisualStudio консольный файл и в конце вставил Read лайн, чтобы посмотреть на результат операций.

В итоге получается, что М и Ит мы узнаем, но какой от этого толк? Если А=7, то цикл не прекращается, а если менять П на 3,4,9 - меняется М, но результат Ит всегда равен 1.

Помогите, пожалуйста, определить зачем нужна эта функция! И правильно ли я понял, что в данном случае переменная Выход = В?

Последний раз редактировалось get2null; 22.05.2011 в 18:20.
get2null вне форума Ответить с цитированием
Старый 23.05.2011, 11:11   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

во-первых,
я бы рекомендовал всё таки оформить код отдельной функцией.

во-вторых, вы Вынесли изменение V за цикл (это неправильно. оно в исходном алгоритме внутри цикла).

в-третьих, не выводите результат (это переменная ИТ в алгоритме - смоти строчку: "Возврат (Ит);" )...

я бы предложил такой вариант
Код:
    class zadacha
    {
        static int Algoritm( int A)
        {
            int p = 2, v = 1, it = 0;

            while (v > 0)
            {
                int m = A % p;
                A = (A - m) / p;
                it = it + m * v;
                if (A == 0)
                   v = 0;
                else
                   v = v * 10;
            }
            return it;
        } 


        static void Main()
        {

        Console.WriteLine("Результат {0} ", Algoritm(7));
        Console.ReadLine();
        }
    }
p.s. алгоритм не очень оптимален. например, я бы крутил цикл пока A > 0, а не пока V > 0

p.p.s. Вы будете смеяться, но это алгоритм перевода числа в двоичную запись!
>Какую роль выполняет П , что произойдет если установить ее равной 3,4,9?
основание системы счисления, в которую переводится число.
будет соотвественно запись в троичной, четверичной, девятиричной системах счисления...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.05.2011, 12:12   #3
get2null
 
Регистрация: 22.05.2011
Сообщений: 3
По умолчанию

Serge_Bliznykov

Спасибо большое!
Еще один глупый вопрос - почему функция делает 3 прохода?
Ведь получается, что если А = 7, то оно никогда не будет равно 0, а значит и В не равно 0, следовательно цикл не прекращается.

[upd] Так, так, так
Получается, что функция делает 2 прохода, верно? После первого цикла все переменные меняют значение, а при третьем цикле А = 0, правильно?

Последний раз редактировалось get2null; 23.05.2011 в 12:46.
get2null вне форума Ответить с цитированием
Старый 23.05.2011, 13:25   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

при A = 7 получается три прохода (обратите внимание на it - сколько в нём цифр, столько и проходов).

а ещё никто не мешает Вам внутрь цикла вставить строчку, которая будет выдавать и номер прохода, и содержимое переменных...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.05.2011, 16:47   #5
get2null
 
Регистрация: 22.05.2011
Сообщений: 3
По умолчанию

то есть, если бы было не
it = it + m * v,
а, допустим, it = it + it + m *v было бы 4 прохода?

Прошу прощения, все никак не могу понять принцип работы

Последний раз редактировалось get2null; 23.05.2011 в 17:00.
get2null вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
функция Артл Помощь студентам 3 28.03.2011 03:03
функция golf Помощь студентам 4 14.11.2009 16:27
функция gets U-S Общие вопросы C/C++ 6 14.11.2009 13:49
функция Cpluser Общие вопросы C/C++ 2 28.02.2009 23:08
одна функция потока, а другая функция - член класса запускающего этот поток Дмитрий_Ч Общие вопросы C/C++ 2 27.09.2007 08:50