22. tétel: Eltelt napok számolása
Feladat: Írjon egy programot szöveges környezetben, mely beolvas a VERCUKOR.TXT fájlból adatsorokat. 1 adatsor 1 sorból olvasható. Minden adatsor a következőket tartalmazza: mérés dátuma, a hét napja, napszak, mért érték (ponttal elválasztva). Az egyes adatok üres hellyel vannak elválasztva.
Írja ki a képernyőre, hogy hány mérés történt! Számolja meg, hogy hány nap telt el az egyes mérések között és írja is ki a képernyőre, majd az eltelt napok átlagát is – két tizedesjegyre kerekítve!
Feltételezheti, hogy a fájl létezik, legalább 2 sor van benne, maximum 100 adatsor várható. Az adatok valódiságát nem kell ellenőriznie. A működő programot és a kódot mutassa be tanárának!
Egy lehetséges megoldás Visual C# nyelven:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; //Ez kell a fájlműveletekhez namespace 22tetel { class Program { struct meres //Így könnyebb lesz eltárolni a beolvasott adatokat { public string datum; public string hetnapja; public string napszak; public DateTime datumom; } static void Main(string[] args) { // 22. tétel: Eltelt napok számolása StreamReader bevisz = new StreamReader("VERCUKOR.TXT"); meres[] adat = new meres[100]; string s; //Beolvasáshoz segédváltozó int szamol = 0; //Adatsorokat számolja meg. string[] reszek = new string[6]; //Tördeléshez ideális segítség do { szamol++; s = bevisz.ReadLine(); reszek = s.Split(' '); adat[szamol].datum = reszek[0]; adat[szamol].hetnapja = reszek[1]; adat[szamol].napszak = reszek[2]; adat[szamol].datumom = DateTime.Parse(adat[szamol].datum); //Átkonvertálás dátumra } while (!bevisz.EndOfStream); bevisz.Close(); Console.WriteLine("\nBeolvasott mérések száma: {0}", szamol); Console.WriteLine("\nMérések között eltelt napok:"); double eltelt; double ossz = 0; //Összesítéshez segédváltozó for (int i = 2; i <= szamol; i++) { eltelt = (adat[i].datumom - adat[i - 1].datumom).TotalDays; //Eltelt napok számolása Console.Write("{0} ", eltelt); ossz += eltelt; } Console.WriteLine("\nKét mérés között eltelt átlagos idő: {0,5:.00}",ossz/(szamol-1)); Console.WriteLine("\n\nA program futása véget ért!"); } } }
A VERCUKOR.TXT fájl egy lehetséges tartalma:
Lásd a 18. tételnél!