Задача: Дано натуральное число. Определить: а) количество цифр в нем; б) сумму его цифр; в) произведение его цифр; г) среднее арифметическое его цифр; д) сумму квадратов его цифр; е) сумму кубов его цифр; ж) его первую цифру; з) сумму его первой и последней цифр.
Для решения этой лабораторной работы нам потребуются знания по основным арифметическим операциям в C#, математическим операциям с использованием статического класса Math, работе со строками, а также по конвертации типов C#, например, с использованием класса Convert.
Анализ задачи
Посмотрите на задачи, которые необходимо решить. Все они касаются, по сути, одного типа операций — работе с цифрами числа. Например, задача «определить количество цифр». Возьмем число 19951. Число состоит из пяти цифр. Теперь посчитаем сумму цифр: 1 + 9 + 9 + 5 + 1 = 25. Аналогичным образом, зная все цифры числа, мы можем решить и другие задачи лабораторной работы.
Как легче всего получить каждую цифру числа? Конвертировать число в строку. А так как строка — это последовательность символов, то и работать со строкой мы сможем, используя, например, циклы.
Алгоритм решения
Таким образом, исходя из анализа задачи, мы можем составить следующий алгоритм решения лабораторной работы:
- Запрашиваем у пользователя число
- Считываем ввод пользователя.
- Пытаемся конвертировать строку, введенную пользователем, в число.
- Если пользователь ввел не число, то выводим сообщение об ошибке и заканчиваем работу
- Выводим решение задачи по пунктам а), ж) и з)
- Запускаем любой цикл по символам строки и на каждой итерации цикла считаем задачи с б) по ж)
Реализуем этот алгоритм на практике.
Решение лабораторной работы (исходный код)
Ниже представлен исходный код 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) и работать со строками символов как с последовательностями — рассчитывать сумму цифр числа, произведение цифр и т.д.