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;
}