/*
Veidoja: Sofiia Kučerenko
Grupa: 110
Praktiskais darbs 7.
Izmantotais Compiler: www.onlinegdb.com
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

class PraktDarbs7
{

    // 1. uzd. Mēneša budžeta analīze un filtri (Math un continue)
    // 1.1. Ievades Metode
    
    static List<double> IevadietIzdevums()
    {
        List<double> saraksts = new List<double>();

        Console.WriteLine("Ievadiet izdevumu summu (vai 'gals'/tukšu rindu, lai pabeigtu): ");
        while (true)
        {
            string ievade = Console.ReadLine();
            if (ievade == "" || ievade == "gals")
                break;
            if (double.TryParse(ievade, out double izdevums))
                saraksts.Add(izdevums);
            else
                Console.WriteLine("Nederīga ievade");
        }
        return saraksts;
    }

    // 1.2. Filtrēšanas Metode (FiltretIzdevumus)
    
    static List<double> FiltretIzdevumus(List<double> izejasDati, double slieksnis)
    {
        List<double> filtracija = new List<double>();

        foreach (double izdevums in izejasDati)
        {
            if (izdevums < slieksnis)
                continue;
            filtracija.Add(izdevums);
        }

        return filtracija;
    }

    // 1.3. Matemātiskās Analīzes Metode (AprekinatMainibu)
    
    static double AprekinatMainibu(List<double> dati)
    {
        double max = dati.Max();
        double min = dati.Min();
        double diapazons = Math.Abs(max - min);
        return diapazons;
    }

    // 2. uzd. Preču meklētājs noliktavā (break un daudzdimensiju masīvs)
    // 2.1. Meklēšanas Metode (AtklatPreci)
    
    static string AtklatPreci(string[,] masivs, string kods)
    {
        int ejas = masivs.GetLength(0);
        int plaukti = masivs.GetLength(1);

        string rezultats = "Prece nav atrasta";
        bool atrasta = !true;

        for (int i = 0; i < ejas; i++)
        {
            for (int j = 0; j < plaukti; j++)
            {
                if (masivs[i, j] == kods)
                {
                    rezultats = "Prece atrasta Eja " + (i + 1) + ", Plaukts " + (j + 1);
                    atrasta = true;
                    break;
                }
            }
            if (atrasta)
                break;
        }

        return rezultats;
    }

    // 2.2. Pārlūkošanas Metode (AprekinatNeaizpilditas)
    
    static int AprekinatNeaizpilditas(string[,] masivs)
    {
        int ejas = masivs.GetLength(0);
        int plaukti = masivs.GetLength(1);
        int tuksi = 0;

        for (int i = 0; i < ejas; i++)
        {
            for (int j = 0; j < plaukti; j++)
            {
                if (string.IsNullOrEmpty(masivs[i, j]))
                    tuksi++;
            }
        }

        return tuksi;
    }

    // 3. uzd. Attāluma kalkulators plaknē (Math un metodes)
    // 3.1. Attāluma Aprēķins Plaknē (AprekinatPlaknesAttalumu)
    
    static double AprekinatPlaknesAttalumu(double x1, double y1, double x2, double y2)
    {
        double dx = x2 - x1;
        double dy = y2 - y1;
        double attalums = Math.Sqrt(Math.Pow(dx, 2) + Math.Pow(dy, 2));
        return attalums;
    }
    
    // 3.2. Leņķa pārvēršana (KonvertetRadianos)
    
    static double KonvertetRadianos(double gradi)
    {
        double radiani = gradi * Math.PI / 180;
        return radiani;
    }
    
    // Metodes

    static void Main(string[] args)
    {
        // 1. uzd.
        
        List<double> saraksts = IevadietIzdevums();

        Console.Write("Ievadiet slieksni: ");
        double slieksnis = double.Parse(Console.ReadLine());

        List<double> filtracija = FiltretIzdevumus(saraksts, slieksnis);

        if (filtracija.Count == 0)
            Console.WriteLine("Nav izdevumu virs sliekšņa.");
        else
            Console.WriteLine("Diapazons: " + AprekinatMainibu(filtracija));

        Console.WriteLine();

        // 2. uzd.
        
        string[,] noliktava = new string[4, 5]
        {
            { "P1", "P2", "", "P4", "P5" }, // P - prece
            { "P6", "", "P8", "P9", "" },
            { "", "P12", "P13", "", "P15" },
            { "P16", "P17", "", "", "P20" }
        };

        Console.Write("Ievadiet meklējamo preces kodu: ");
        string kods = Console.ReadLine();

        string atrasts = AtklatPreci(noliktava, kods);
        Console.WriteLine(atrasts);

        int tuksiPlaukti = AprekinatNeaizpilditas(noliktava);
        Console.WriteLine("Tukšo plauktu skaits: " + tuksiPlaukti);

        Console.WriteLine();
    
        // 3. uzd.

        Console.Write("Ievadiet x1: ");
        double x1 = double.Parse(Console.ReadLine());
        Console.Write("Ievadiet y1: ");
        double y1 = double.Parse(Console.ReadLine());
        Console.Write("Ievadiet x2: ");
        double x2 = double.Parse(Console.ReadLine());
        Console.Write("Ievadiet y2: ");
        double y2 = double.Parse(Console.ReadLine());

        double attalums = AprekinatPlaknesAttalumu(x1, y1, x2, y2);
        Console.WriteLine("Attālums starp punktiem: " + attalums);

        Console.Write("Ievadiet leņķi grādos, lai pārvērstu radiānos: ");
        double gradi = double.Parse(Console.ReadLine());
        double radiani = KonvertetRadianos(gradi);
        Console.WriteLine("Leņķis radiānos: " + radiani);
        
        Console.WriteLine();
    }
    
}