Skip to content

28.09.2011

6. Функции

1.      Объявите функцию, которая вычисляет значение n!

2.      Объявите функцию, которая вычисляет значение n-го члена ряда Фибоначчи.

3.      Объявите функцию, которая делает младший разряд целого числа самым старшим  (12345 -> 51234).

4.      Объявите функцию, которая вычисляет знакопеременную сумму всех цифр целого числа (12345 -> +1-2+3-4+5 = 3). Знак плюс всегда должен стоять перед старшей цифрой.


Пока мысли заняты 3 задачей проекта Эйлера можно решить д\з к 6 лекции. Уже можно кодить на с#, так что вперед.

 

1.      Объявите функцию, которая вычисляет значение n!

       static int fact(int n)
       {
         int f = 1;
         for (int i = 2; i <= n; i++)
         {
           f = f * i;
         }
         return f;
        }

2.      Объявите функцию, которая вычисляет значение n-го члена ряда Фибоначчи.
Но я вспомнил где я уже писал функции для ряда Фибоначчи.

 

3.      Объявите функцию, которая делает младший разряд целого числа самым старшим  (12345 -> 51234).

        static int pervaya(int n)
        {
            int s = n;
            int i;
            for ( i = 1; s > 0; ++i )
            {
                s = (s - s % 10) / 10; // или s /= 10, так x - целое число (integer)
            }
            return (n -n%10)/ 10 + n%10*Convert.ToInt32(Math.Pow(10, (i-1)));
        }

Переменная i инициализирована вне цикла так как ее значение будет количеством разрядов числа ( для 1234 i  == 4). После того, как разряды посчитаны берем все разряды числа кроме последнего | (n — n%10)/10 = (1234-4)/10 =  123|. Осталось поместить в старший разряд последнюю цифру n. Второе слагаемое это и делает. Функция Math.Pow(10, i-1) возводит 10 в степень i-1. Но возвращает эта функция значение double, поэтому переводим в int функцией Convert.ToInt32. В итоге получаем для 1234 : (1234 — 4)/10 + 4*10i-1 = 4123.

4.      Объявите функцию, которая вычисляет знакопеременную сумму всех цифр целого числа (12345 -> +1-2+3-4+5 = 3). Знак плюс всегда должен стоять перед старшей цифрой.

Сначала переведем число 12345 в 54321. А потом полученное число разложим на цифры:

        static int summa(int n)
        {
            int n2 = 0;
            int sum = 0;
            int zn = -1;
            while (n > 0)
            {
                n2 = n2 * 10 + n % 10;
                n = (n - n % 10) / 10; // можно записать n /= 10, так как n содержит целое число
            }
            while (n2 > 0)
            {
                zn = -zn;
                sum += zn * n2 % 10;
                n2 = (n2 - n2 % 10) / 10; // или n2 /= 10;
            }
            return sum;

        }

Переменная zn служит для хранения знака. В цикле она равна то 1 то -1, что и дает ряд +1-2+3-4+5. Все!

Share your thoughts, post a comment.

(required)
(required)

Note: HTML is allowed. Your email address will never be published.

Subscribe to comments