Skip to content

Latest commit

 

History

History
150 lines (134 loc) · 6.11 KB

File metadata and controls

150 lines (134 loc) · 6.11 KB

Problema

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:

  1. Obter média dos valores no array
  2. Obter mediana dos valores no array
  3. Obter moda dos valores no array
  4. Obter máximo dos valores no array
  5. Obter mínimo dos valores no_array
  6. Sair

O programa deve funcionar em ciclo, realizando os pedidos efetuados, terminando apenas quando o utilizador selecionar a opção 6.

Soluções

Solução 1

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