В массива задана статистика покупок в магазине. Вывести различные отчеты - 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}");
            }
        }
    }
}

Оцени полезность:

8   голосов , оценка 4 из 5
Похожие ответы