28 - Escreve um programa que aceite dois ou mais números inteiros como
parâmetros na linha de comandos, coloque esses números num array de ints
e
apresente ao utilizador um menu com as seguintes opções:
- Obter média dos valores no array
- Obter mediana dos valores no array
- Obter moda dos valores no array
- Obter máximo dos valores no array
- Obter mínimo dos valores no_array
- Sair
O programa deve funcionar em ciclo, realizando os pedidos efetuados, terminando apenas quando o utilizador selecionar a opção 6.
using System;
using System.Collections.Generic;
namespace _28_bases_cs
{
class Program
{
static void Main(string[] args)
{
string menu;
bool cycle = true;
int avg, median, midNum1, midNum2, mx, mn;
int sum = 0;
int mode = default(int);
int[] elements = new int[args.Length];
if (args.Length >= 2)
{
for (int i = 0; i < args.Length; i++)
{
elements[i] = Int32.Parse(args[i]);
}
while (cycle) // While loop to keep the program going until 6 is selected
{
Console.WriteLine("------------------Menu------------------");
Console.WriteLine("1 - Obter media dos valores no array" +
"\n2 - Obter mediana dos valores no array" +
"\n3 - Obter moda dos valores no array" +
"\n4 - Obter maximo dos valores no array" +
"\n5 - Obter minimo dos valores no_array" +
"\n6 - Sair");
menu = Console.ReadLine();
switch (menu) // Menu Options
{
case "1": // Total Average
// Sum of all array elements
for (int i = 0; i < elements.Length; i++)
sum += elements[i];
/* Total sum of the elements divided by the number of
array elements*/
avg = sum / elements.Length;
Console.WriteLine("Valor da media: {0}", avg);
break;
case "2": // Median
Array.Sort(elements); // Order elements of the array
midNum1 = elements[elements.Length / 2];
midNum2 = elements[(elements.Length / 2) - 1];
if (elements.Length % 2 == 0) // When is even
median = (midNum1 + midNum2) / 2;
else // When is odd
median = midNum1;
Console.WriteLine("Valor da mediana: {0}", median);
break;
case "3": // Mode
/* We create a dictionary and put the array elements
in the dictionary*/
Dictionary<int, int> counts = new Dictionary<int, int>();
foreach (int i in elements)
{
if (counts.ContainsKey(i))
counts[i]++;
else
counts[i] = 1;
}
// Check the most recurrent number in the dictionary
int max = 0;
foreach (int key in counts.Keys)
{
if (counts[key] > max)
{
mode = key;
max = counts[key];
}
}
Console.WriteLine("Valor da moda: {0}", mode);
break;
case "4": // Max
// Defines the first member of the array as max
mx = elements[0];
/* Checks if the array has a bigger number than the
first, if so changes the mx value to the new one*/
for (int i = 0; i < elements.Length; i++)
{
if (elements[i] > mx)
{
mx = elements[i];
}
}
Console.WriteLine("Valor do maximo: {0}", mx);
break;
case "5": // Min
// Defines the first member of the array as min
mn = elements[0];
/* Checks if the array has a lower number than the
first, if so changes the mn value to the new one*/
for (int i = 0; i < elements.Length; i++)
{
if (elements[i] < mn)
{
mn = elements[i];
}
}
Console.WriteLine("Valor do minimo: {0}", mn);
break;
case "6": // End
cycle = false;
break;
default: // If none of the above is selected
Console.WriteLine("Escolhe uma das opçoes do menu" +
" inserindo os numeros do menu.");
break;
}
}
}
else // If the user doesn't input at least 2 args
Console.WriteLine("Insere pelo menos 2 argumentos.");
}
}
}
Por Diogo Henriques