Elemezzük a feladatot és egy lehetséges megoldást, valamint nézzünk néhány alternatívát a megoldást az egyes részfeladatokhoz!
using System;
using System.IO;
class Jelado
{
// 3. feladat
// Meghatározza két időpont között az eltelt másodpercek számát
static int Eltelt(int o1, int p1, int m1, int o2, int p2, int m2)
{
return (o2 - o1) * 3600 + (p2 - p1) * 60 + (m2 - m1);
}
static void Main()
{
// 1. feladat – adatok beolvasása fájlból
string[] sorok = File.ReadAllLines("d://jel.txt");
int n = sorok.Length;
// Adatok tárolása tömbökben
int[] ora = new int[n];
int[] perc = new int[n];
int[] mp = new int[n];
int[] x = new int[n];
int[] y = new int[n];
// Sorok feldolgozása
for (int i = 0; i < n; i++)
{
string[] sor = sorok[i].Split(' ');
ora[i] = int.Parse(sor[0]);
perc[i] = int.Parse(sor[1]);
mp[i] = int.Parse(sor[2]);
x[i] = int.Parse(sor[3]);
y[i] = int.Parse(sor[4]);
}
// 2. feladat – egy adott jel koordinátáinak kiírása
Console.WriteLine("2. feladat");
Console.Write("Adja meg a jel sorszamat! ");
int k = int.Parse(Console.ReadLine()) - 1;
Console.WriteLine("x=" + x[k] + " y=" + y[k]);
// 4. feladat – eltelt idő az első és utolsó jel között
Console.WriteLine("4. feladat");
int ido = Eltelt(
ora[0], perc[0], mp[0],
ora[n - 1], perc[n - 1], mp[n - 1]
);
int h = ido / 3600;
int m = (ido % 3600) / 60;
int s = ido % 60;
Console.WriteLine(
"Idotartam: {0:D2}:{1:D2}:{2:D2}", h, m, s
);
// 5. feladat – befoglaló téglalap meghatározása
Console.WriteLine("5. feladat");
int minX = x[0], maxX = x[0];
int minY = y[0], maxY = y[0];
for (int i = 1; i < n; i++)
{
if (x[i] < minX) minX = x[i];
if (x[i] > maxX) maxX = x[i];
if (y[i] < minY) minY = y[i];
if (y[i] > maxY) maxY = y[i];
}
Console.WriteLine(
"Bal also: {0} {1}, jobb felso: {2} {3}",
minX, minY, maxX, maxY
);
// 6. feladat – elmozdulások összegének kiszámítása
Console.WriteLine("6. feladat");
double ossz = 0;
for (int i = 0; i < n - 1; i++)
{
int dx = x[i] - x[i + 1];
int dy = y[i] - y[i + 1];
ossz += Math.Sqrt(dx * dx + dy * dy);
}
Console.WriteLine("Elmozdulas: {0:0.000} egyseg", ossz);
// 7. feladat – kimaradt jelek naplózása
StreamWriter sw = new StreamWriter("d://kimaradt.txt");
for (int i = 1; i < n; i++)
{
// Időkülönbség kiszámítása az előzőleg megírt függvénnyel
int dt = Eltelt(ora[i - 1], perc[i - 1], mp[i - 1], ora[i], perc[i], mp[i]);
// Időeltérésből adódó kimaradás (300 mp-enként küld jelet)
int idoKimaradt = (dt - 1) / 300;
// Koordináta-eltérésből adódó kimaradás (10 egységenként küld jelet)
int dx = Math.Abs(x[i] - x[i - 1]);
int dy = Math.Abs(y[i] - y[i - 1]);
int maxDiff = Math.Max(dx, dy);
int coordKimaradt = (maxDiff - 1) / 10;
// Csak akkor írunk, ha van tényleges kimaradás
if (idoKimaradt > 0 || coordKimaradt > 0)
{
if (idoKimaradt >= coordKimaradt)
{
// Az időeltérés alapján határozzuk meg a hiányt
sw.WriteLine("{0} {1} {2} idoelteres {3}",
ora[i], perc[i], mp[i], idoKimaradt);
}
else
{
// A koordináta-eltérés alapján határozzuk meg a hiányt
sw.WriteLine("{0} {1} {2} koordinata-elteres {3}",
ora[i], perc[i], mp[i], coordKimaradt);
}
}
}
sw.Close();
}
}