/*
    Veidotaja: Rolands Zviedris
    Grupa: 110
    Praktiskais darbs 6.3
    Izmantotais compiler: https://www.onlinegdb.com/online_csharp_compiler
*/
using System;
using System.Collections.Generic;
using System.Linq;
class HelloWorld
{
	static void Main()
	{
		bool task = true;
		while(task == true)
		{
            Console.WriteLine("Izvelaties uzdevumu");
            switch(Int32.Parse(Console.ReadLine()))
            {
                case 1:
                    uzdevums1();
                    break;
                case 2:
                    uzdevums2();
                    break;
                case 3:
                    uzdevums3();
                    break;
                case 4:
                    Console.WriteLine("Cikls beigts");
                    task = false;
                    break;
            }
		}
	}
	// 1 uzdevuma kods
	static void uzdevums1()
	{
	    List<double> a = new List<double>();
		List<double> izejasDati = new List<double>();
		Console.WriteLine("Ievadi minimalo izdevumu slieksni");
		double slieksnis = double.Parse(Console.ReadLine());
		bool turpina = true;
		while(turpina == true)
		{
			Console.WriteLine("1. Izdevumu ievadisana;\n2. Izdevumu filtresana\n3. Apreikinat mainibu\n4. Atgriezties uzdevumu izvele");
			switch(Int32.Parse(Console.ReadLine()))
			{
                case 1:
                    IevadietIzdevumus(a);
                    break;
                case 2:
                    FiltretIzdevumus(izejasDati, a, slieksnis);
                    foreach(double i in izejasDati)
                    {
                        Console.WriteLine(i);
                    }
                    break;
                case 3:
                    double diapazons = AprekinatMainibu(izejasDati, slieksnis);
                    Console.WriteLine("Ievades datu diapazons ir " + diapazons);
                    break;
                case 4:
                    turpina = false;
                    break;
			}
		}
	}
	// metode prieks diapazona apreikinasanas
	static double AprekinatMainibu(List<double> izejasDati,double slieksnis)
	{
        double minimal = izejasDati.Min();
        double maximum = izejasDati.Max();
        double diapazons = Math.Abs(maximum - minimal);
        return diapazons;
	}
	// metode izfiltresanai
	static void FiltretIzdevumus(List<double> izejasDati, List<double> b, double slieksnis)
	{
        foreach(double i in b)
        {
            if(i<slieksnis)
            {
                continue;
            }
            izejasDati.Add(i);
        }
	}
	//metode kura prasa ievadit datus
	static void IevadietIzdevumus(List<double> b)
	{
		bool fair = true;
		while(fair == true)
		{
			string test = Console.ReadLine();
			if(test == "gals" || test == "")
			{
				fair = false;
			}
			else
			{
				b.Add(Convert.ToDouble(test));
			}
		}
	}
	// 2. uzdevuma kods
	static void uzdevums2()
	{
        string[,] galv = 
        {
            {"w", "q", "k", "a", ""},
            {"e", "d", "l", "u", "r"},
            {"", "b", "c", "", "p"},
            {"", "s", "", "i", "o"}
        };
        for(int a =0; a<4; a++)
        {
            for(int b=0; b<5; b++)
            {
                Console.Write(galv[a, b] + "\t");
            }
            Console.Write("\n");
        }
        Console.WriteLine("Ieraksti ko gribi atrast");
        string meklejamais = Console.ReadLine();
        string vieta = AtklatPreci(galv, meklejamais);
        Console.WriteLine(vieta);
        Console.Write("Vai apreikinat tuksos plauktus?(y/n)");
        char nezin = Char.Parse(Console.ReadLine());
        if(nezin == 'y')
        {
            int tuks = AprekinatNeaizpilditas(galv);
            Console.WriteLine($"Tuksi ir {tuks} plaukti");
        }
	}
	static int AprekinatNeaizpilditas(string[,] galv)
	{
        int n = 0;
        for(int a =0; a<galv.GetLength(0); a++)
        {
            for(int b=0; b<galv.GetLength(1); b++)
            {
                if(galv[a, b] == "")
                {
                    n+=1;
                }
            }
        }
        return n;
	}
	static string AtklatPreci(string[,] galv, string meklejamais)
	{
        for(int a =0; a<galv.GetLength(0); a++)
        {
            for(int b=0; b<galv.GetLength(1); b++)
            {
                if(galv[a, b] == meklejamais)
                {
                    int x = a;
                    int y = b;
                    return $"{x+1} eja {y+1} plaukts";
                }
            }
        }
        return "Prece nav atrasta";
	}
	// 3. uzdevuma kods
	static void uzdevums3()
    {
        Console.WriteLine("Ievadi 1. punkta kordinates x un y");
        int x1 = Int32.Parse(Console.ReadLine());
        int y1 = Int32.Parse(Console.ReadLine());
        Console.WriteLine("Ievadi 2. punkta kordinates x un y");
        int x2 = Int32.Parse(Console.ReadLine());
        int y2 = Int32.Parse(Console.ReadLine());
        double linija = attalums(x1, x2, y1, y2);
        Console.WriteLine($"Attalums starp punktiem = {linija}");
        Console.WriteLine("\nIevadi Lenka lielumu grados.");
        double gradi = double.Parse(Console.ReadLine());
        double radiani = KonvertetRadianos(gradi);
        Console.WriteLine($"Dotais lenkis radianos = "+ radiani);
    }
    static double KonvertetRadianos(double gradi)
    {
        return gradi*(Math.PI/180);
    }
    static double attalums(int x1, int x2, int y1, int y2)
    {
        double xsquare = Math.Pow((x2-x1), 2);
        double ysquare = Math.Pow((y2-y1), 2);
        return Math.Sqrt((xsquare+ysquare));
    }
}