public static (T hiba, int k, int l) Részhalmaz_Első_Hibával(Multihalmaz <T> A, Multihalmaz <T> B) { foreach (T item in A.szótár.Keys) { if (!(item < B)) { return(item, A.szótár[item], 0); } if (A.szótár[item] > B.szótár[item]) { return(item, A.szótár[item], B.szótár[item]); } } return(default(T), 0, 0); }
public static bool operator ==(Válasz v, Válasz m) { string hiba; if (v.tábla[0, 0].StartsWith("HIÁNYZIK")) { hiba = $"[red]{{Hiányzási hiba a [green]{{{v.tulajdonos.név}}} tanuló [blue]{{{v.teszt.név}}} tesztjének [blue]{{{v.lekérdezés}}} válaszában: {{{v.tábla[0, 0]}}}"; Színes.WriteLine(hiba); v.tulajdonos.hibalista.Add(hiba); return(false); } if (v.tábla[0, 0] == nemválaszolt) { hiba = $"[red]{{Nem válaszolt}}: [green]{{{v.tulajdonos.név}}} tanuló [blue]{{{v.teszt.név}}} tesztjének [blue]{{{v.lekérdezés}}} kérdésére nem válaszolt."; Színes.WriteLine(hiba); v.tulajdonos.hibalista.Add(hiba); return(false); } if (v.Size[0] < m.Size[0]) // precautions { hiba = $"[red]{{Mérethiba (X<):}} [green]{{{v.tulajdonos.név}}} tanuló [blue]{{{v.teszt.név}}} tesztjének [blue]{{{v.lekérdezés}}} válaszában hiányzik [blue]{{{(m.Size[0] - v.Size[0]).ToString()}}} db sor.\n"; Színes.WriteLine(hiba); v.tulajdonos.hibalista.Add(hiba); return(false); } if (v.Size[0] > m.Size[0]) // precautions { hiba = $"[red]{{Mérethiba (X>):}} [green]{{{v.tulajdonos.név}}} tanuló [blue]{{{v.teszt.név}}} tesztjének [blue]{{{v.lekérdezés}}} válaszában több ([blue]{{{(v.Size[0] - m.Size[0]).ToString()}}} db) sor van a kelleténél.\n"; Színes.WriteLine(hiba); v.tulajdonos.hibalista.Add(hiba); return(false); } if (v.Size[1] < m.Size[1]) // precautions { hiba = $"[red]{{Mérethiba (Y<):}} [green]{{{v.tulajdonos.név}}} tanuló [blue]{{{v.teszt.név}}} tesztjének [blue]{{{v.lekérdezés}}} válaszában hiányzik [blue]{{{(m.Size[1] - v.Size[1]).ToString()}}} db oszlop.\n"; Színes.WriteLine(hiba); v.tulajdonos.hibalista.Add(hiba); return(false); } if (v.Size[1] > m.Size[1]) // precautions { hiba = $"[red]{{Mérethiba (Y>):}} [green]{{{v.tulajdonos.név}}} tanuló [blue]{{{v.teszt.név}}} tesztjének [blue]{{{v.lekérdezés}}} válaszában több ([blue]{{{(v.Size[1] - m.Size[1]).ToString()}}} db) sor van a kelleténél.\n"; Színes.WriteLine(hiba); v.tulajdonos.hibalista.Add(hiba); return(false); } string típus = ALT.szótár[v.lekérdezés].tipus; if (Regex.IsMatch(típus, @"^szám-\d*$")) { double mx = 0, vx = 0; int pontosság = int.Parse(típus.Split('-')[1]); if (v.tábla[0, 0] == m.tábla[0, 0]) { return(true); // erre csak azért van szükség, hogy ha pl. a keresés esetében "nincs a listában" lenne a válasz, akkor ne húzza ki az ilyen válaszokat. } try { vx = Math.Round(double.Parse(v.tábla[0, 0]), pontosság); mx = Math.Round(double.Parse(m.tábla[0, 0]), pontosság); } catch (Exception) { hiba = $"[red]{{Típuseltérési hiba}}: [green]{{{v.tulajdonos.név}}} tanuló [blue]{{{v.teszt.név}}} tesztjének [blue]{{{v.lekérdezés}}} válaszában nem számmal válaszolt."; Színes.WriteLine(hiba); v.tulajdonos.hibalista.Add(hiba); return(false); } if (mx != vx) { hiba = $"[red]{{rossz számérték}}: [green]{{{v.tulajdonos.név}}} tanuló [blue]{{{v.teszt.név}}} tesztjének [blue]{{{v.lekérdezés}}} válaszában rosszul számolt."; Színes.WriteLine(hiba); v.tulajdonos.hibalista.Add(hiba); return(false); } } if (típus == "logikai") { if ((m.tábla[0, 0] != v.tábla[0, 0])) { hiba = $"[red]{{rossz logikai érték}}: [green]{{{v.tulajdonos.név}}} tanuló [blue]{{{v.teszt.név}}} tesztjének [blue]{{{v.lekérdezés}}} válaszában rosszul döntött."; Színes.WriteLine(hiba); v.tulajdonos.hibalista.Add(hiba); return(false); } } if (típus == "rendezett halmaz") { for (int i = 0; i < v.Size[0]; i++) { for (int j = 0; j < v.Size[1]; j++) { if (v.tábla[i, j] != m.tábla[i, j]) { hiba = $"[red]{{Rekord- vagy sorrendhiba:}} " + $"[green]{{{v.tulajdonos.név}}} tanuló a " + $"[blue]{{{v.teszt.név}}} teszt " + $"[blue]{{{v.lekérdezés}}} feladatában a(z) " + $"[blue]{{{i.ToString()}}}.sor " + $"[blue]{{{j.ToString()}}}.oszlopában: " + $"[green]{{{m.tábla[i, j]}}} helyett " + $"[red]{{{v.tábla[i, j]}}} szerepel.\n"; Színes.WriteLine(hiba); v.tulajdonos.hibalista.Add(hiba); return(false); } } } } if (típus == "multihalmaz" || típus == "halmaz") { if (v.halmaz == m.halmaz) { return(true); } if (v.halmaz < m.halmaz || v.halmaz > m.halmaz) { (string hibácska, int k, int l) = Multihalmaz <string> .Részhalmaz_Első_Hibával(v.halmaz, m.halmaz); hiba = $"[red]{{Rekordhiba (multiplicitás):}} " + $"[green]{{{v.tulajdonos.név}}} tanuló " + $"[blue]{{{v.teszt.név}}} tesztre adott " + $"[blue]{{{v.lekérdezés}}} válaszában a " + $"[red]{{{hibácska}}} csak " + $"[red]{{{k}}} alkalommal szerepel " + $"[blue]{{{l}}} helyett.\n"; Színes.WriteLine(hiba); v.tulajdonos.hibalista.Add(hiba); return(false); } hiba = $"[red]{{Rekordhiba (részhalmaz):}} " + $"[green]{{{v.tulajdonos.név}}} tanuló " + $"[blue]{{{v.teszt.név}}} tesztre adott " + $"[blue]{{{v.lekérdezés}}} válasza " + "és a megoldókulcs válasza közül egyik sem részhalmaza a másiknak.\n"; Színes.WriteLine(hiba); v.tulajdonos.hibalista.Add(hiba); return(false); } return(true); }