Tehetséggondozás az informatikában
Tesztverseny (inf_e_20170515_m_04)
A
feladat egy megoldása
C# nyelven:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace tesztverseny
{
class Program
{
struct versenyzo
{
public string kod;
public string megoldas;
public int pont;
}
static void Main(string[] args)
{
versenyzo[] v = new versenyzo[500];
Console.WriteLine("1. feladat: Az adatok beolvasása");
FileStream be = new FileStream("valaszok.txt", FileMode.Open);
StreamReader olvaso = new StreamReader(be);
string helyes = olvaso.ReadLine();
int n = 0;
while (!olvaso.EndOfStream)
{
string[] sor = olvaso.ReadLine().Split(' ');
n++;
v[n].kod = sor[0];
v[n].megoldas = sor[1];
}
olvaso.Close();
be.Close();
Console.WriteLine("2. feladat: A vetélkedőn {0} versenyző indult", n);
Console.Write("3. feladat: A versenyző azonosítója = ");
string az = Console.ReadLine();
string valasz = "";
for (int i = 1; i <= n; i++)
if (v[i].kod == az)
{
Console.WriteLine("{0} (a versenyző válasza)", v[i].megoldas);
valasz = v[i].megoldas;
}
Console.WriteLine("4. feladat");
Console.WriteLine("{0} (a helyes megoldás)", helyes);
string ert = "";
for (int j = 0; j <= 13; j++)
if (valasz[j] == helyes[j])
ert = ert + '+';
else ert = ert + ' ';
Console.WriteLine("{0} (a versenyző helyes válaszai)", ert);
Console.Write("5. feladat: A feladat sorszáma = ");
int fel = int.Parse(Console.ReadLine());
double db = 0;
for (int i = 1; i <= n; i++)
if (v[i].megoldas[fel - 1] == helyes[fel - 1]) db++;
double szazalek = db / n * 100;
Console.WriteLine("A feladatra {0} fő, a versenyzők {1:00.00}%-a adott helyes választ.",
db, szazalek);
Console.WriteLine("6. feladat: A versenyzők pontszámának meghatározása");
FileStream ki = new FileStream("pontok.txt", FileMode.Create);
StreamWriter iro = new StreamWriter(ki);
int[] pontok = new int[14] {3,3,3,3,3,4,4,4,4,4,5,5,5,6};
for (int i = 1; i <= n; i++)
{
for (int j = 0; j <= 13; j++)
if (v[i].megoldas[j] == helyes[j])
v[i].pont = v[i].pont + pontok[j];
iro.WriteLine("{0} {1}", v[i].kod, v[i].pont);
}
iro.Close();
ki.Close();
Console.WriteLine("7. feladat: A verseny legjobbjai:");
for (int i = 1; i <= n - 1; i++)
for (int j= i + 1; j <= n; j++)
if (v[i].pont < v[j].pont)
{
versenyzo x;
x = v[i];
v[i] = v[j];
v[j] = x;
}
int max = v[1].pont;
int k = 1;
while (v[k].pont == max)
{
Console.WriteLine("1. díj ({0} pont): {1}", max, v[k].kod);
k++;
}
int max2 = v[k].pont;
while (v[k].pont == max2)
{
Console.WriteLine("2. díj ({0} pont): {1}", max2, v[k].kod);
k++;
}
int max3 = v[k].pont;
while (v[k].pont == max3)
{
Console.WriteLine("3. díj ({0} pont): {1}", max3, v[k].kod);
k++;
}
Console.ReadKey();
}
}
}
A feladat megoldása Excel-ben:
tesztverseny.xlsx.
A beolvasott szövegfájl tartalma az A és B oszlopban a 2. sortól kezdve
található.
A feladatok megoldását megadó függvények a következők:
2. feladat: A versenyzők száma
E3 cellában: =DARAB2(A:A)-1
3. feladat:
A versenyző azonosítója
E6 cellába: a versenyző kódjának beírása
A versenyző válasza
E7 cellában: =INDEX(B3:B305;HOL.VAN(E6;A3:A305;0))
4. feladat:
A helyes megoldás:
E10 cellában: =A2
A versenyző helyes válaszai:
G10:T10 feltöltése 1..14-ig
G11:T11-ig a cellában + helyes megoldás esetén, különben üres, G11 cellában: =HA(KÖZÉP($E7;G10;1)=KÖZÉP($E10;G10;1);"+";" ")
A versenyző helyes válaszai:
E11 cellában: =ÖSSZEFŰZ(G11;H11;I11;J11;K11;L11;M11;N11;O11;P11;Q11;R11;S11;T11)
5. feladat:
A feladat sorszáma:
E14 cellába: a feladat sorszámának beírása
V segédoszlopban 1, ha a versenyző helyes megoldást adott a feladatra, különben 0, V3 cellában: =HA(KÖZÉP(B3;E$14;1)=KÖZÉP(E$10;E$14;1);1;0)
A helyes válaszok száma:
E15 cellában: =SZUM(V3:V305)
százaléka:
E16 cellában: =E15/E3
6. feladat: A versenyzők pontszáma
X1:AK305 segédoszlopokban:
az 1. sorban a feladatok sorszáma, a 2. sorban a feladatok pontszáma, a 3. sortól soronként az adott versenyző adott feladatokban elért pontszámai, X3-ban: =HA(KÖZÉP($B3;X$1;1)=KÖZÉP($E$10;X$1;1);X$2;0)
AL, AM oszlop adja a pontok.txt fájlba írandó adatokat,
AL3 cellában: =A3
AM3 cellában: =SZUM(X3:AK3)
7. feladat: A verseny legjobbjai
1. díj:
E24 cellában: =MAX(AM3:AM305)
az 1. helyezést elérő(k) kiválasztása irányított szűrővel, listatartomány: $X$2:$AM$305, szűrőtartomány: $E$23:$E$24, hova másolja: $F$23
2. díj:
E26 cellában: =NAGY(AM3:AM305;2)
a 2. helyezést elérő(k) kiválasztása irányított szűrővel, listatartomány: $X$2:$AM$305, szűrőtartomány: $E$25:$E$26, hova másolja: $F$25
3. díj:
E29 cellában: =NAGY(AM3:AM305;4) (mivel 2 második helyezettet adott az irányított szűrő)
a 3. helyezést elérő(k) kiválasztása irányított szűrővel, listatartomány: $X$2:$AM$305, szűrőtartomány: $E$28:$E$29, hova másolja: $F$28
A megoldás képernyőképe: