Лабораторная работа по C#. Работа с числами и строками

Задача: Дано натуральное число. Определить: а) количество цифр в нем; б) сумму его цифр; в) произведение его цифр; г) среднее арифметическое его цифр; д) сумму квадратов его цифр; е) сумму кубов его цифр; ж) его первую цифру; з) сумму его первой и последней цифр.

Для решения этой лабораторной работы нам потребуются знания по основным арифметическим операциям в C#, математическим операциям с использованием статического класса Math, работе со строками, а также по конвертации типов C#, например, с использованием класса Convert.

Анализ задачи

Посмотрите на задачи, которые необходимо решить. Все они касаются, по сути, одного типа операций — работе с цифрами числа. Например, задача «определить количество цифр». Возьмем число 19951. Число состоит из пяти цифр. Теперь посчитаем сумму цифр: 1 + 9 + 9 + 5 + 1 = 25. Аналогичным образом, зная все цифры числа, мы можем решить и другие задачи лабораторной работы.

Как легче всего получить каждую цифру числа? Конвертировать число в строку. А так как строка — это последовательность символов, то и работать со строкой мы сможем, используя, например, циклы.

Алгоритм решения

Таким образом, исходя из анализа задачи, мы можем составить следующий алгоритм решения лабораторной работы:

  1. Запрашиваем у пользователя число
  2. Считываем ввод пользователя.
  3. Пытаемся конвертировать строку, введенную пользователем, в число.
  4. Если пользователь ввел не число, то выводим сообщение об ошибке и заканчиваем работу
  5. Выводим решение задачи по пунктам а), ж) и з)
  6. Запускаем любой цикл по символам строки и на каждой итерации цикла считаем задачи с б) по ж)

Реализуем этот алгоритм на практике.

Решение лабораторной работы (исходный код)

Ниже представлен исходный код C# с решением лабораторной работы:

Console.WriteLine("Введите любое целое число");
Console.Write("N = ");
string n = Console.ReadLine();
if (int.TryParse(n, out int number) == false)
{
    Console.WriteLine("Вы ввели не целое число!");
}
else
{
    Console.WriteLine($"Количество цифр {n.Length}"); //n.Length - выводит длину строки (колчество цифр)
    Console.WriteLine($"Первая цифра числа {n[0]}"); //n[0] - первый символ в строке (первая цифра)
    //Convert.ToInt32(n[0]) - конвертируем первый символ в целое число
    //Convert.ToInt32(n[n.Length-1]) - первый символ строки имеет индекс 0, последний - Length-1. Конвертируем последний символ строки в число
    if (n.Length == 1)
    {
        int data = Convert.ToInt32(n[0].ToString());
        Console.WriteLine($"Сумма первой и последней цифры {data}");
        Console.WriteLine($"Среднее арифметическое цифр {data}");
        Console.WriteLine($"Произведение цифр {data}");
        Console.WriteLine($"Сумма квадратов {data * data}");
        Console.WriteLine($"Сумма кубов {data * data * data}");
    }
    else
    {
        int firstLastSum = Convert.ToInt32(n[0].ToString()) + Convert.ToInt32(n[n.Length - 1].ToString());
        Console.WriteLine($"Сумма первой и последней цифры {firstLastSum}");
        //перебираем все символы строки
        int sum = 0; //сумма цифр
        int productOfNumbers = 1; //произведение цифр
        double sumOfSquares = 0; //сумма квадратов
        double sumOfCubes = 0;//сумма кубов
        foreach (char c in n)
        {
            int data = Convert.ToInt32(c.ToString());
            //б) сумму его цифр;
            sum += data;
            //в) произведение его цифр;
            productOfNumbers *= data;
            //д) сумму квадратов его цифр;
            sumOfSquares += Math.Pow(data, 2);
            //е) сумму кубов его цифр;
            sumOfCubes += Math.Pow(data, 3);
        }
        //г) среднее арифметическое его цифр;
        Console.WriteLine($"Среднее арифметическое цифр {sum / n.Length}");
        Console.WriteLine($"Произведение цифр {productOfNumbers}");
        Console.WriteLine($"Сумма квадратов {sumOfSquares}");
        Console.WriteLine($"Сумма кубов {sumOfCubes}");
    }    
}

Стоит обратить внимание на следующий фрагмент кода:

if (n.Length == 1)
{
    int data = Convert.ToInt32(n[0].ToString());
    Console.WriteLine($"Сумма первой и последней цифры {data}");
    Console.WriteLine($"Среднее арифметическое цифр {data}");
    Console.WriteLine($"Произведение цифр {data}");
    Console.WriteLine($"Сумма квадратов {data * data}");
    Console.WriteLine($"Сумма кубов {data * data * data}");
}

Дело в том, что пользователь может ввести число, состоящее из одной цифры и тогда, если не добавить этот фрагмент кода, то, например, для числа 5 наша программа выдаст сумму цифр — 10 (первый и последний символы в строке будут одни и те же), что неправильно.

Также обратите внимание на то, как символ (char) конвертируется в целое число:

int data = Convert.ToInt32(c.ToString());

вначале мы получаем строку (string)

c.ToString()

и только затем получаем из строки число:

int data = Convert.ToInt32(c.ToString());

если не произвести первого преобразования из char в string, то метод Convert.ToInt32() будет возвращать нам код символа и, например, для числа 1 мы получим сумму цифр не 1, как это должно быть, а 49 (код символа 1).

Проверим работу нашего приложения:

Введите любое целое число
N = 1
Количество цифр 1
Первая цифра числа 1
Сумма первой и последней цифры 1
Среднее арифметическое цифр 1
Произведение цифр 1
Сумма квадратов 1
Сумма кубов 1

или так:

Введите любое целое число
N = 123
Количество цифр 3
Первая цифра числа 1
Сумма первой и последней цифры 4
Среднее арифметическое цифр 2
Произведение цифр 6
Сумма квадратов 14
Сумма кубов 36

Итого

В этой лабораторной работе мы научились конвертировать типы данных C# (из char в string, из string в int) и работать со строками символов как с последовательностями — рассчитывать сумму цифр числа, произведение цифр и т.д.

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии