Gå till innehållet

Lösningsförslag till uppgift 6.21

Console.WriteLine("Detta menyprogram handlar om primtal");
string användarensVal = "";
while (användarensVal != "3")
{
    SkrivMeny();
    användarensVal = Console.ReadLine();
    Console.WriteLine();

    switch (användarensVal)
    {
        case "1":
            MenyÄrPrimtal();
            break;
        case "2":
            MenyAntalPrimtal();
            break;
        case "3":
            // Gör ingenting, programmet stängs av
            break;
        default:
            Console.WriteLine("Du valde ett ogiltigt alternativ");
            break;
    }
    Console.WriteLine();
}

/// <summary>
/// Skriver ut programmets meny
/// </summary>
void SkrivMeny()
{
    Console.WriteLine("Välj ett alternativ");
    Console.WriteLine("1. Är n ett primtal?");
    Console.WriteLine("2. Antal primtal mindre än n");
    Console.WriteLine("3. Avsluta programmet");
}

/// <summary>
/// Hanterar menyalternativet Är n ett primtal
/// </summary>
void MenyÄrPrimtal()
{
    Console.WriteLine("Skriv in ett heltal");
    int tal = int.Parse(Console.ReadLine());
    if (ÄrPrimtal(tal))
    {
        Console.WriteLine($"{tal} är ett primtal");
    }
    else
    {
        Console.WriteLine($"{tal} är inte ett primtal");
    }
}

/// <summary>
/// Hanterar menyalternativet Antal primtal mindre än n
/// </summary>
void MenyAntalPrimtal()
{
    Console.WriteLine("Skriv in ett heltal");
    int tal = int.Parse(Console.ReadLine());
    Console.WriteLine($"Antalet primtal mindre än {tal} är {AntalPrimtalMindreÄn(tal)}");
}

/// <summary>
/// Undersöker hur många primtal det finns som är mindre än det angivna talet
/// </summary>
/// <param name="gräns"></param>
/// <returns></returns>
int AntalPrimtalMindreÄn(int gräns)
{
    int antal = 0;

    for (int i = 2; i < gräns; i++)
    {
        if (ÄrPrimtal(i))
        {
            antal++;
        }
    }

    return antal;
}

/// <summary>
/// Undersöker om ett givet tal är ett primtal
/// </summary>
/// <param name="tal"></param>
/// <returns></returns>
bool ÄrPrimtal(int tal)
{

    for (int i = 2; i < tal; i++)
    {
        // Om vi hittar en delare till talet så är det inte ett primtal
        if (tal % i == 0)
        {
            return false;
        }
    }

    // Om ingen delare hittades så är talet ett primtal
    return true;
}