Emelt érettségi feladat megoldás C# -ban. Vélemények? Tanácsok? Többi lent
Elég kezdő vagyok még programozásban. Esetleges hibákat, tanácsokat, egyszerűbb megoldásokat és tanácsokat szeretnék. Kicsit hosszúnak érzem a kódot ezért kérem a segítségeteket, mert így kicsit több időbe telik, mmint amenniy időm van rá érettségin. Előre is köszönök minden választ. Megy a zöld.
using System;
using System.Collections.Generic;
using System.IO;
namespace jaror
{
class Program
{
static string fileNev = "jarmu.txt";
static public List<Ellenorzes> ellenorzesek = new List<Ellenorzes>();
static void Main(string[] args)
{
StreamReader olvaso = new StreamReader(File.OpenRead(fileNev));
string[] sep = { " " };
int beolvasva = 0;
for (int i = 0; ; i++)
{
string[] temp = new string[4];
temp[0] = olvaso.ReadLine();
if (temp[0] == null) { break; }
temp = temp[0].Split(sep, StringSplitOptions.RemoveEmptyEntries);
ellenorzesek.Add(new Ellenorzes(Convert.ToInt32(temp[0]), Convert.ToInt32(temp[1]), Convert.ToInt32(temp[2]), temp[3]));
beolvasva++;
}
olvaso.Dispose();
Console.WriteLine("1. feladat: {0} sor sikeresen beolvasva a(z) {1} állományból.", beolvasva, fileNev);
Feladat2();
Feladat3();
Feladat4();
Feladat5();
Feladat6();
Feladat7();
Console.ReadKey();
}
static void Feladat2()
{
Console.WriteLine("2. feladat: Legalább {0} órát dolgoztak.", ellenorzesek[ellenorzesek.Count - 1].ora - ellenorzesek[0].ora + 1);
}
static void Feladat3()
{
Console.WriteLine("3. feladat:");
for (int i = ellenorzesek[0].ora; i <= ellenorzesek[ellenorzesek.Count - 1].ora; i++)
{
foreach (Ellenorzes e in ellenorzesek)
{
if (e.ora == i) { Console.WriteLine("{0} óra: {1}", e.ora, e.rendszam); break; }
}
}
}
static void Feladat4()
{
Console.WriteLine("4. feladat:");
int b = 0, k = 0, m = 0;
foreach (Ellenorzes e in ellenorzesek)
{
switch (e.rendszam.Substring(0, 1))
{
case "B": b++; break;
case "K": k++; break;
case "M": m++; break;
}
}
Console.WriteLine("{0}db autóbusz", b);
Console.WriteLine("{0}db kamion", k);
Console.WriteLine("{0}db motor", m);
}
static void Feladat5()
{
int leghoszabbIdo = 0;
for (int i = 0; i < ellenorzesek.Count - 1; i++)
{
if (mperc(ellenorzesek[i + 1].ora, ellenorzesek[i + 1].perc, ellenorzesek[i + 1].mperc) - mperc(ellenorzesek[i].ora, ellenorzesek[i].perc, ellenorzesek[i].mperc) > leghoszabbIdo)
{
leghoszabbIdo = mperc(ellenorzesek[i + 1].ora, ellenorzesek[i + 1].perc, ellenorzesek[i + 1].mperc) - mperc(ellenorzesek[i].ora, ellenorzesek[i].perc, ellenorzesek[i].mperc);
}
}
for (int i = 0; i < ellenorzesek.Count - 1; i++)
{
if (mperc(ellenorzesek[i + 1].ora, ellenorzesek[i + 1].perc, ellenorzesek[i + 1].mperc) - mperc(ellenorzesek[i].ora, ellenorzesek[i].perc, ellenorzesek[i].mperc) == leghoszabbIdo)
{
Console.WriteLine("{0}:{1}:{2} - {3}:{4}:{5}", ellenorzesek[i].ora, ellenorzesek[i].perc, ellenorzesek[i].mperc, ellenorzesek[i + 1].ora, ellenorzesek[i + 1].perc, ellenorzesek[i + 1].mperc);
}
}
Console.WriteLine("5. feladat:");
}
static void Feladat6()
{
Console.Write("6. feladat: Kérem adjon meg egy rendszámot: ");
string beolvasas = Console.ReadLine();
char[] temp = beolvasas.ToCharArray();
foreach (Ellenorzes e in ellenorzesek)
{
if ((e.rendszam[0] == temp[0] || temp[0] == '*')
&& (e.rendszam[1] == temp[1] || temp[1] == '*')
&& (e.rendszam[2] == temp[2] || temp[2] == '*')
&& (e.rendszam[3] == temp[3] || temp[3] == '*')
&& (e.rendszam[4] == temp[4] || temp[4] == '*')
&& (e.rendszam[5] == temp[5] || temp[5] == '*')
&& (e.rendszam[6] == temp[6] || temp[6] == '*'))
{
Console.WriteLine(e.rendszam);
}
}
}
static void Feladat7()
{
Console.Write("7. feladat:");
StreamWriter iro = new StreamWriter(File.Create("vizsgalt.txt"));
int ido = mperc(ellenorzesek[0].ora, ellenorzesek[0].ora, ellenorzesek[0].ora);
foreach (Ellenorzes e in ellenorzesek)
{
if (mperc(e.ora, e.perc, e.mperc) >= ido)
{
iro.WriteLine(((Convert.ToString(e.ora).Length == 1) ? ("0" + Convert.ToString(e.ora)) : Convert.ToString(e.ora)) + " " + ((Convert.ToString(e.perc).Length == 1) ? ("0" + Convert.ToString(e.perc)) : Convert.ToString(e.perc)) + " " + ((Convert.ToString(e.mperc).Length == 1) ? ("0" + Convert.ToString(e.mperc)) : Convert.ToString(e.mperc)) + " " + e.rendszam);
ido += 5 * 60;
}
}
Console.WriteLine("'vizsgalt.txt' állomány sikeren létrehozva.");
}
static int mperc(int ora, int perc, int mperc)
{
return (ora * 60 * 60) + (perc * 60) + mperc;
}
}
public class Ellenorzes
{
public Ellenorzes(int ora, int perc, int mperc, string rendszam)
{
this.ora = ora;
this.perc = perc;
this.mperc = mperc;
this.rendszam = rendszam;
}
public int ora, perc, mperc;
public string rendszam;
}
}
string[] sep = { " " };
int beolvasva = 0;
for (int i = 0; ; i++)
{
string[] temp = new string[4];
temp[0] = olvaso.ReadLine();
if (temp[0] == null) { break; }
temp = temp[0].Split(sep, StringSplitOptions.RemoveEmptyEntries);
Eddig olvastam.
- a sep változó felesleges, csak egyszer használod - íme egy rövidítés
- a for ciklus igen ronda kilépési feltétel nélkül, próbáld meg átszervezni a ciklust, hogy ne kelljen break-elni
- a ciklusváltozót nem is használod, tehát ez nem for ciklusos feladat, ismerkedj meg az elöl- és hátultesztelős ciklusokkal
Én is javasolnám, hogy dobd fel valami kódmegosztóra, Pastebin vagy Gist, itt elég kényelmetlen olvasni.
#4 vagyok
Továbbá ez 3x szerepel a kódodban:
ellenorzesek[i + 1].ora, ellenorzesek[i + 1].perc, ellenorzesek[i + 1].mperc) - mperc(ellenorzesek[i].ora, ellenorzesek[i].perc, ellenorzesek[i].mperc
A saját életed könnyíted meg, ha ezt leredukálod 1 előfordulásra, pl. függvényt írsz rá, illetve ahol 2x szerepel egy cikluson belül, ott tárold el egy változóban, mert felesleges 2x kiszámolni.
"a sep változó felesleges, csak egyszer használod"
Egyáltalán nem felesleges, mondjuk lehetne konstans, de akkor sem.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!