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