Koda v razredu Funkcije:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace funkcije
{
public class FunkcijeProjektorji
{
/// <summary>
/// Funkcija generira naključne podatke in jih shrani v datoteko
/// </summary>
/// <param name="imeDatoteke"></param>
static public void nakljucnaDatoteka(string imeDatoteke)
{
//pot datoteke
imeDatoteke = Environment.CurrentDirectory + "\\" + imeDatoteke;
Random gen = new Random();
//pisanje na datoteko
using (StreamWriter sw = new StreamWriter(imeDatoteke))
{
for (int i = 1; i < 8; i++)
{
for (int j = 1; j < 13; j++)
{
int projektor = gen.Next(gen.Next(10));
if (projektor == 1)
{
sw.WriteLine("" + i + ":" + j);
}
}
}
}
}
/// <summary>
/// Metoda izpiše v konzolo koliko projektorjev je potrebnih, kje jih potrebujejo in kdaj jih potrebujejo
/// </summary>
/// <param name="imeDatoteke"></param>
static public void izpisProjektorjev(string imeDatoteke)
{
imeDatoteke = Environment.CurrentDirectory + "\\" + imeDatoteke;
//seznam, ki bo vseboval vsako vrstico kot en element, ki bo seznam dolžine 2
List<string[]> vrstice = new List<string[]>();
//List<string> projektorji = new List<string>();
//branje iz datoteke
using (StreamReader r = new StreamReader(imeDatoteke))
{
int StProjektorjev = 0;
int pomozni = 0;
string line;
//list "vrstice" napolni z vrsticami
while ((line = r.ReadLine()) != null)
{
vrstice.Add(line.Split(':'));
}
//število projektorjev
for (int i = 1; i < 13; i++)
{
pomozni = 0;
foreach (var item in vrstice)
{
if (int.Parse(item[1]) == i)
{
pomozni++;
}
}
if (pomozni > StProjektorjev)
{
StProjektorjev = pomozni;
}
}
//seznam seznamov projektorjev
string[][] seznamProjektorjev = new string[StProjektorjev][];
for (int i = 0; i < seznamProjektorjev.Length; i++)
{
//vsak podseznam ima dolžino 12, kar predstavlja ure, ko se rabi projektor
seznamProjektorjev[i] = new string[12];
//seznam se napolni s stringi "0:0"
for (int j = 0; j < 12; j++)
{
seznamProjektorjev[i][j] = "0:0";
}
}
//za vsako vrstico, gre čez seznam vseh seznamov v "seznamProjektorjev"
foreach (var item in vrstice)
{
foreach (var j in seznamProjektorjev)
{
//position
bool znotraj = false;
//gre čez vse ure
for (int i = 0; i < 12; i++)
{
//vstavi v seznamprojektorjev stringe oblike n:m
if (j[int.Parse(item[1]) - 1] == "0:0")
{
j[int.Parse(item[1]) - 1] = "" + item[0] + ":" +item[1];
znotraj = true;
break;
}
}
if (znotraj == true)
{
znotraj = false;
break;
}
}
}
//izpis za število projektorjev
switch (StProjektorjev)
{
case 1:
Console.WriteLine("Potrebujemo " + StProjektorjev + " projektor.");
break;
case 2:
Console.WriteLine("Potrebujemo " + StProjektorjev + " projektorja.");
break;
case 3:
Console.WriteLine("Potrebujemo " + StProjektorjev + " projektorje.");
break;
case 4:
Console.WriteLine("Potrebujemo " + StProjektorjev + " projektorje.");
break;
default:
Console.WriteLine("Potrebujemo " + StProjektorjev + " projektorjev.");
break;
}
for (int i = 0; i < seznamProjektorjev.Length; i++)
{
//v tabeli je vrednost elementa predavalnica in indeks je ura
int[] tab = new int[12];
//izpis tekočega projektorja
Console.WriteLine("" + (i+1) + ". projektor:");
//tabela tab se polni z ustreznimi številkami, ki pomenijo predavalnice
for (int j = 0; j < seznamProjektorjev[i].Length; j++)
{
if (seznamProjektorjev[i][j] == "0:0")
{
tab[j] = 0;
}
else
{
tab[j] = int.Parse(seznamProjektorjev[i][j].Split(':')[0]);
}
}
//za vsako dvorano
for (int l = 1; l < 7; l++)
{
//v seznamu so indeksi ure in vrednosti so dvorane
int[] seznam = new int[12];
for (int m = 0; m < tab.Length; m++)
{
if (l == tab[m])
{
seznam[m] = l;
}
}
//lista "test" se napolni z indeksi, ki pomenijo ure
List<int> test = new List<int>();
//samo izpis
for (int z = 0; z < seznam.Length; z++)
{
if (seznam[z] != 0)
{
test.Add(z+1);
}
}
if (test.Count > 0)
{
//izpis zaporedne dvorane, če ima kakšno uro, kadar rabi projetor
Console.WriteLine("Dvorana " + l + ": ");
//ustrezen izpis
string izpis = "";
for (int j = 0; j < test.Count; j++)
{
//če je prvi element, ga doda k izpisu
if (j == 0)
{
izpis += test[j];
//če je dolžina 1, se zanka konča takoj
if (test.Count == 1)
{
break;
}
//če je drugi element za eno večji od prvega, se k izpisu doda "-"
if (test[0] + 1 == test[1])
{
izpis += "-";
}
//drugače se doda vejica
else
{
izpis += ",";
}
}
//če element ni prvi in zadnji
if (j > 0 && j < test.Count -1)
{
//če je zadnji znak v izpisu vejica, se število pripiše in glede na naslednji element se doda "," ali "-"
if (izpis[izpis.Length - 1] == ',')
{
izpis += test[j];
if (test[j + 1] == test[j] + 1)
{
izpis += "-";
}
else
{
izpis += ",";
}
}
//če je zadnji znak "-" in naslednji ni za eno večji, se dopiše in doda vejica
else if (izpis[izpis.Length - 1] == '-' && test[j] + 1 != test[j + 1])
{
izpis += test[j] + ",";
}
}
//če je zadnji element se ga doda
if (j == test.Count -1 && test.Count > 1)
{
izpis += test[j];
break;
}
}
//izpis za tekočo dvorano
Console.WriteLine(izpis);
}
}
}
}
}
}
}
Koda v glavnem programu:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using funkcije;
namespace projektorji
{
class Program
{
static void Main(string[] args)
{
FunkcijeProjektorji.nakljucnaDatoteka("podatki.txt");
FunkcijeProjektorji.izpisProjektorjev("podatki.txt");
Console.ReadKey();
}
}
}