Eksamen: REA3049-CS | Semester: Vår 2024 | Varighet: 5 timer
static Dictionary<char, int> TellTegn(string tekst)
{
var teller = new Dictionary<char, int>();
foreach (char c in tekst.ToLower())
{
if (char.IsLetter(c))
{
if (teller.ContainsKey(c))
teller[c]++;
else
teller[c] = 1;
}
}
return teller;
}
var resultat = TellTegn("Anna");
// Resultat: { 'a': 2, 'n': 2 }
class Spiller
{
public string Navn { get; set; }
public string Posisjon { get; set; }
public int Maal { get; private set; }
public Spiller(string navn, string posisjon)
{
Navn = navn;
Posisjon = posisjon;
Maal = 0;
}
public void ScoreMaal() => Maal++;
public override string ToString()
=> $"{Navn} ({Posisjon}) – {Maal} mål";
}
class Lag
{
public string Navn { get; set; }
public int MaxSpillere { get; set; }
public List<Spiller> Spillere { get; set; }
public Lag(string navn, int maxSpillere = 11)
{
Navn = navn;
MaxSpillere = maxSpillere;
Spillere = new List<Spiller>();
}
public void LeggTilSpiller(Spiller spiller)
{
if (Spillere.Count >= MaxSpillere)
throw new InvalidOperationException($"Laget {Navn} er fullt.");
Spillere.Add(spiller);
}
public int TotaltMaal() => Spillere.Sum(s => s.Maal);
public Spiller Toppscorer()
=> Spillere.OrderByDescending(s => s.Maal).FirstOrDefault();
public override string ToString()
=> $"{Navn}: {Spillere.Count} spillere, {TotaltMaal()} mål totalt";
}
// Test
var lag = new Lag("Lyn");
var s1 = new Spiller("Ada", "angrep");
lag.LeggTilSpiller(s1);
s1.ScoreMaal();
s1.ScoreMaal();
Console.WriteLine(lag); // Lyn: 1 spillere, 2 mål totalt
using System.IO;
using System.Linq;
static List<Dictionary<string, string>> LesCsv(string fil)
{
var linjer = File.ReadAllLines(fil);
var header = linjer[0].Split(';');
return linjer.Skip(1).Select(linje =>
{
var v = linje.Split(';');
var rad = new Dictionary<string, string>();
for (int i = 0; i < header.Length; i++)
rad[header[i]] = v[i];
return rad;
}).ToList();
}
// Eksempel: Finn gjennomsnitt per gruppe
var data = LesCsv("data.csv");
var perGruppe = data
.GroupBy(r => r["Kategori"])
.Select(g => new
{
Kategori = g.Key,
Snitt = g.Average(r => double.Parse(r["Verdi"]))
})
.OrderByDescending(x => x.Snitt);
foreach (var g in perGruppe)
Console.WriteLine($"{g.Kategori,-20} {g.Snitt,10:F1}");
class Person
{
public string Navn { get; set; }
public string Epost { get; set; }
public Person(string navn, string epost)
{
Navn = navn;
Epost = epost;
}
public override string ToString()
=> $"{Navn} ({Epost})";
}
class Student : Person
{
public string Studentnr { get; set; }
public Dictionary<string, int> Karakterer { get; set; }
public Student(string navn, string epost, string studentnr)
: base(navn, epost)
{
Studentnr = studentnr;
Karakterer = new Dictionary<string, int>();
}
public void LeggTilKarakter(string fag, int karakter)
=> Karakterer[fag] = karakter;
public double Snitt()
=> Karakterer.Count == 0 ? 0 : Karakterer.Values.Average();
public override string ToString()
=> $"{base.ToString()} – Student {Studentnr}, snitt: {Snitt():F1}";
}
// Test
var s = new Student("Lina", "lina@skole.no", "S1001");
s.LeggTilKarakter("IT2", 5);
s.LeggTilKarakter("Matte", 4);
Console.WriteLine(s); // Lina (lina@skole.no) – Student S1001, snitt: 4.5
ToString() for lesbar utskrift.try/catch for feilhåndtering.