Tehetséggondozás az informatikában
Fej vagy írás? (inf_e_20151016_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 fejvagyiras
{
class Program
{
static Random veletlen = new Random();
static string dob()
{
string dob = "";
if (veletlen.Next(0, 2) == 0)
dob = "F";
else
dob = "I";
return dob;
}
static void Main(string[] args)
{
Console.WriteLine("1. feladat");
string dobas = dob();
Console.WriteLine("A pénzfeldobás eredménye: {0}", dobas);
Console.WriteLine("2. feladat");
Console.Write("Tippeljen! (F/I)= ");
string tipp = Console.ReadLine();
dobas = dob();
Console.WriteLine("A tipp {0}, a dobás eredménye {1} volt.", tipp, dobas);
if (tipp == dobas)
Console.WriteLine("Ön eltalálta.");
else
Console.WriteLine("Ön nem találta el.");
FileStream be = new FileStream("kiserlet.txt", FileMode.Open);
StreamReader olvaso = new StreamReader(be);
Int32 n = 0;
bool egyfej = false;
bool ketfej = false;
bool tobbfej = false;
int fejek = 0;
int fejdb = 0;
int duplafej = 0;
int maxfej = 0;
int fejkezd=0, maxhely=0;
while (!olvaso.EndOfStream)
{
dobas = olvaso.ReadLine();
n++;
if (dobas == "F")
{
fejek++;
fejdb++;
if (egyfej)
{
egyfej = false;
ketfej = true;
}
else if (ketfej)
{
ketfej = false;
tobbfej = true;
}
else if (!tobbfej)
{
egyfej = true;
fejkezd = n;
}
}
else
{
if (ketfej) duplafej++;
egyfej = false;
ketfej = false;
tobbfej = false;
if (fejdb > maxfej)
{
maxfej = fejdb;
maxhely = fejkezd;
}
fejdb = 0;
}
}
if (ketfej) duplafej++;
if (fejdb > maxfej)
{
maxfej = fejdb;
maxhely = fejkezd;
}
olvaso.Close();
be.Close();
Console.WriteLine("3. feladat");
Console.WriteLine("A kísérlet {0} dobásból állt.", n);
Console.WriteLine("4. feladat");
double relgyak = 100.0 * fejek / n;
Console.WriteLine("A kísérlet során a fej relatív gyakorisága {0:F2}% volt.", relgyak);
Console.WriteLine("5. feladat");
Console.WriteLine("A kísérlet során {0} alkalommal dobtak pontosan két fejet egymás után.", duplafej);
Console.WriteLine("6. feladat");
Console.WriteLine("A leghosszabb tisztafej sorozat {0} tagból áll, kezdete a(z) {1}. dobás.", maxfej, maxhely);
Console.WriteLine("7. feladat");
int ffff = 0;
int fffi = 0;
string[] dobassor = new string[1001];
for (int i = 1; i <= 1000; i++)
{
dobassor[i] = dob() + dob() + dob() + dob();
if (dobassor[i] == "FFFF") ffff++;
if (dobassor[i] == "FFFI") fffi++;
}
FileStream ki = new FileStream("dobasok.txt", FileMode.Create);
StreamWriter iro = new StreamWriter(ki);
iro.WriteLine("FFFF: {0}, FFFI: {1}", ffff, fffi);
for (int i = 1; i <= 1000; i++)
iro.Write(dobassor[i] + ' ');
iro.WriteLine();
iro.Close();
ki.Close();
Console.ReadKey();
}
}
}
A feladat megoldása Excel-ben:
fejvagyiras.xlsx.
A beolvasott szövegfájl tartalma az A oszlopban az A2 cellától kezdve
található.
A feladatok megoldását megadó függvények a következők:
1. feladat: A pénzfeldobás eredménye
D3 cellában: =HA(VÉLETLEN.KÖZÖTT(0;1)=0;"F";"I")
2. feladat:
A tipp:
D6 cellába: F vagy I beírása
A dobás eredménye:
D7 cellában: =HA(VÉLETLEN.KÖZÖTT(0;1)=0;"F";"I")
E7 cellában: =HA(D7=D6;"Ön eltalálta";"Ön nem találta el")
3. feladat: A dobások száma
D10 cellában: =DARAB2(A:A)-1
4. feladat: A fej relatív gyakorisága
D13 cellában: =DARABTELI(A2:A4322;"F")/D10
5. feladat: Két fej egymás után
G segédoszlopban a két egymás utáni fej esetén (a második fejnél) 1, különben 0 szerepel, ennek másolható képlete a G3 cellában: =HA(ÉS(A3="F";A2="F";A1<>"F";A4<>"F");1;0)
D16 cellában: =SZUM(G3:G4322)
6. feladat: A leghosszabb tisztafej sorozat
I segédoszlopban a dobás sorszáma, a J segédoszlopban a fej sorszáma szerepel az egymás után dobott fejek esetén, különben 0,
J2 cellában: =HA(A2="F";1;0), J3 cellában (amit lefelé másolunk: =HA(A3="F";J2+1;0)
D19 cellában: =MAX(J2:J4322)
D20 cellában a tisztafej-sorozat kezdete: =INDEX(I2:I4322;HOL.VAN(D19;J2:J4322;0))-D19+1
7. feladat: a 4-es dobások előállítása az L, M, N, O segédoszlopban L2:O1001-ig a következő függvénnyel: =HA(VÉLETLEN.KÖZÖTT(0;1)=0;"F";"I")
Q segédoszlopban 1 van az FFFF dobások esetén, különben 0, Q2 cellában: =HA(ÉS(L2="F";M2="F";N2="F";O2="F");1;0)
R segédoszlopban 1 van az FFFI dobások esetén, különben 0, R2 cellában: =HA(ÉS(L2="F";M2="F";N2="F";O2="I");1;0)
az FFFF dobások száma au U1 cellában: =SZUM(Q2:Q1001)
az FFFI dobások száma a W1 cellában: =SZUM(R2:R1001)
A megoldás képernyőképe: