В массива задана статистика покупок в магазине. Вывести различные отчеты - C#
Формулировка задачи:
Учусь в инсте, сейчас выполняю практику по программированию на платформе .NET Framework.
Теоретического материала не предоставлено вообще, ищу по форумам и справочникам майкрософта.
Столкнулся с задачей:
"1. С помощью массива задать статистику посещения магазина. Магазин работал 10 недель, на каждой неделе было от 4 до 7 рабочих дней. Часть покупателей совершала покупки используя наличные деньги, часть покупателей расплачивалась с помощью пластиковой карты.
Посчитать:
• общее число покупателей
• сколько покупателей расплатились наличными
• сколько покупателей расплатились с помощью пластиковой карты
• в какие недели была ситуация, когда наличными платили больше, чем картой."
Сначала немного был ошарашен, ведь входных данных практически нет, но потом вспомнил, что это не математическая задача, а программирование и она вполне решаема.
Как я вижу решение:
1 - Нужно объявить массив массивов размерностью 10 строк на 7 столбцов (основной массив) .
2 - Ячейки основного массива заполнены одномерным массивом (матрицей-строкой) из двух элементов каждый (нал - безнал), который задан рандомом.
3 - Некоторые ячеки основного массива должны быть равны [0 0] (не более 3-х в строке), поскольку на каждой неделе от 4 до 7 рабочих дней. - Как вообще реализовать этот пункт?
4 - общее число покупателей это просто сумма всех элементов итогового массава
5 - сколько расплатились картами - сумма, предположим, всех первых ячеек массивов массива.
6 - соответственно, просто разница между вышеперечисленными суммами
7 - ситуация, когда наличными платили больше, чем картой это выборка сумм элементов построчно?
Помогите новичку разобраться и укажите на недочёты в предложенном мной решении.
Решение задачи: «В массива задана статистика покупок в магазине. Вывести различные отчеты»
textual
Листинг программы
- using System;
- using System.Linq;
- namespace Example
- {
- internal static class Program
- {
- private static void Main()
- {
- var payments = Create(10, 4);
- Print(ref payments);
- Console.WriteLine($"Общее число покупателей: {CountAll(ref payments)}");
- Console.WriteLine($"Расплатились наличными: {CountCash(ref payments)}");
- Console.WriteLine($"Расплатились картами: {CountCard(ref payments)}");
- Info(ref payments);
- Console.ReadKey();
- }
- private struct Payment
- {
- public int Cash;
- public int Card;
- public override string ToString() { return Cash.ToString() + " : " + Card.ToString(); }
- }
- private static void Print(ref Payment[] payments) { foreach (var payment in payments) Console.Write(payment + " | "); }
- private static void Print(ref Payment[][] payments)
- {
- var line = new string('-', 55);
- for (var i = 0; i != payments.Length; ++i)
- {
- Print(ref payments[i]);
- Console.WriteLine("\n" + line);
- }
- }
- private static Payment[][] Create(int week, int day, int min = 4, int max = 9)
- {
- var payments = new Payment[week][];
- var rand = new Random();
- const int n = 7;
- for (var i = 0; i != week; ++i)
- {
- var limit = rand.Next(day, n + 1);
- payments[i] = new Payment[n];
- var j = 0;
- Payment payment;
- while (j < limit)
- {
- payment.Cash = rand.Next(min, max);
- payment.Card = rand.Next(min, max);
- payments[i][j] = payment;
- ++j;
- }
- while (j < n)
- {
- payment.Cash = payment.Card = 0;
- payments[i][j] = payment;
- ++j;
- }
- }
- return payments;
- }
- private static int CountCash(ref Payment[] payments) { return payments.Sum(n => n.Cash); }
- private static int CountCash(ref Payment[][] payments) { return payments.Sum(n => CountCash(ref n)); }
- private static int CountCard(ref Payment[] payments) { return payments.Sum(n => n.Card); }
- private static int CountCard(ref Payment[][] payments) { return payments.Sum(n => CountCard(ref n)); }
- private static int CountAll(ref Payment[] payments) { return CountCash(ref payments) + CountCard(ref payments); }
- private static int CountAll(ref Payment[][] payments) { return payments.Sum(n => CountAll(ref n)); }
- private static bool MainlyInCash(ref Payment[] payments) { return CountCash(ref payments) > CountCard(ref payments); }
- private static void Info(ref Payment[][] payments)
- {
- for (var i = 0; i != payments.Length; ++i)
- {
- var result = MainlyInCash(ref payments[i]) ? "Наличными" : "Картой";
- Console.WriteLine($"{i + 1}. {result}");
- }
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д