Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- namespace Quartiles
- {
- class Program
- {
- private static List<int> numbers = new List<int>();
- private static List<int> lowerQuartile = new List<int>();
- private static List<int> upperQuartile = new List<int>();
- private static string[] STDIN_Numbers;
- private static int numberOfElements = 0;
- static void Main(string[] args)
- {
- numberOfElements = Convert.ToInt32(Console.ReadLine()); // User input - number of elements
- STDIN_Numbers = Console.ReadLine().Split(' '); // User input - single spaced element list
- PrepareList();
- PrepareQuartiles();
- Console.WriteLine($"{IntMedian(lowerQuartile)}");
- Console.WriteLine($"{IntMedian(numbers)}");
- Console.WriteLine($"{IntMedian(upperQuartile)}");
- }
- private static void PrepareList() // Prepare main numbers list since user input is string type and list require int type
- {
- int outputNumber;
- for (int i = 0; i < STDIN_Numbers.Length; i++) // Populate numbers list from user input.
- {
- if(!int.TryParse(STDIN_Numbers[i], out outputNumber)) // Check if input is a number and convert it to int
- {
- Console.WriteLine("Error: Input parameter is not an integral number.");
- }
- numbers.Add(outputNumber); // Add converted and checked elements to list
- }
- numbers.Sort(); // Sort list ascending
- }
- private static void PrepareQuartiles() // Split main list into lower and upper quartile lists
- {
- // notEvenSection is used in not even amount of elements or as first element in even amount.
- // evenSection is used only for even amount of elements.
- int notEvenSection = numbers.Count / 2;
- int evenSection = (numbers.Count / 2) - 1;
- if (IsEven(numbers.Count)) // Check if element list is even
- {
- for (int i = 0; i <= evenSection; i++) // Populate lower quartile list
- {
- lowerQuartile.Add(numbers[i]);
- }
- for (int i = notEvenSection; i < numbers.Count; i++) // Populate upper quartile list
- {
- upperQuartile.Add(numbers[i]);
- }
- }
- else // Run if list in odd
- {
- for (int i = 0; i < notEvenSection; i++) // Populate lower quartile list
- {
- lowerQuartile.Add(numbers[i]);
- }
- for (int i = notEvenSection + 1; i < numbers.Count; i++) // Populate upper quartile list
- {
- upperQuartile.Add(numbers[i]);
- }
- }
- }
- private static int IntMedian(List<int> _list) // Calculate median in integral list
- {
- int firstSection = _list.Count / 2;
- int secondSection = (_list.Count / 2) - 1;
- if (IsEven(_list.Count)) // Return median from even list
- {
- return (_list.ElementAt(firstSection) + _list.ElementAt(secondSection)) / 2;
- }
- else // Return median from odd list
- {
- return _list.ElementAt(firstSection);
- }
- }
- private static bool IsEven(int _arg) // Check if number is even or odd, return true if even. General helper.
- {
- if (_arg % 2 == 0)
- return true;
- else
- return false;
- }
- }
- }
Add Comment
Please, Sign In to add comment