Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno C# pole matíc

Dobry den,

chcel by som nadeklarovat pole v C# napr 100. prvkov, pricom kazdy prvok by predstavoval maticu roznej velkosti (velkost matice zada uzivatel (napr. 5x4)), bolo by dobre keby si mozem pri kazdej matici pamataj aj jej nazov. Vedeli by ste mi prosim pomoct?

Dakujem

Předmět Autor Datum
Možná by to šlo udělat pomocí vícerozměrných polí: http://msdn.microsoft.com/en-us/library/2yd9wwz4(…
marekdrtic 11.07.2010 11:06
marekdrtic
Tak to je ještě větší šílenost, než to moje...:-D
MaSo 11.07.2010 11:22
MaSo
:-D, seš na krásném druhém místě v soutěži "Kdo vymyslí nejšílenější řešení"
marekdrtic 11.07.2010 11:24
marekdrtic
Nějaká taková šílenost: Dictionary <String, int[][]> matice = new Dictionary<String, int[][]>(); s…
MaSo 11.07.2010 11:13
MaSo
nešlo by to nejako takto? zadefinoval by som triedu Matice, potom by som vytvoril pole týchto matíc:…
nereg. 11.07.2010 11:26
nereg.
celkom to totiž nefunguje, viete ma opraviť?
nereg. 11.07.2010 11:26
nereg.
Nehází to náhou NullReference? Protože, nikde nevoláš konstruktor té třídy Matice. Matice [] pole =…
MaSo 11.07.2010 11:34
MaSo
dakujem, myslim, ze uz funguje :)
nereg. 11.07.2010 11:45
nereg.
Polia dlzka a sirka su zbytočné, pretože obidva rozmery vieš zistiť priamo z poľa. Prvý konštruktor…
los 11.07.2010 11:57
los
Pre maticu môžeš v C# použiť viacrozmerné pole (Multidimensional Arrays) namiesto "zubatého" poľa (J…
los 11.07.2010 11:34
los
Pole preto, aby som mohol priamo pristupovat k danej matici a nemusel prehladavat napriklad spojovy…
nereg. 11.07.2010 11:37
nereg.
Tak se podívej na to moje řešení s Dictionary, je to imho přesně to co chceš.
MaSo 11.07.2010 11:39
MaSo
Urcite pouzit dynamicku alokaciu z heap. Jak sa to robi v srandojazyku C# si nastuduj. V C++ zalezit…
MM.. 11.07.2010 14:54
MM..
... a slusne v style OOP (co by mal zvladat aj C#) by to malo byt tak ze sa naprogramuje trieda "Mat… poslední
MM.. 11.07.2010 15:01
MM..

Možná by to šlo udělat pomocí vícerozměrných polí:
http://msdn.microsoft.com/en-us/library/2yd9wwz4(V S.71).aspx

V praxi asi takto (je to takovej divnej zápis :-)):

pole = array { //hlavní pole, ve kterém budou matice

  [0] =>
  array { //začátek prvního dvojrozměrného pole = matice
    [0] =>array { //první řádek matice pole[0]
          3,2,1
          }
    [1] =>array { //druhý řádek matice pole[0]
          5,8,2
          }
    [2] =>array {
          3,1,4
          }
    [3] =>array {
          9,9,8
          }
  
  } // konec prvního dvojrozměrného pole

  ....... //tady budou další

} // konec hlavního pole

Potom bude mít každá matice jasný identifikátor pole[x], jednotlivé řádky matice pole[x][y] a buňky pole[x][y][z]. Je to defakto trojrozměrné pole, můžeš si to představit třeba jako rubikovu kostku.

Nějaká taková šílenost:

Dictionary <String, int[][]> matice = new Dictionary<String, int[][]>();

s tím, že klíč bude název matice.

Novou matici bys pak vytvořil třeba:

matice.Add("A", new int[5][5]);

PS: Možná tam mam syntaktické chyby, píšu z paměti.

nešlo by to nejako takto?
zadefinoval by som triedu Matice, potom by som vytvoril pole týchto matíc:

class Matice
{
    public string nazov;
    public int dlzka;
    public int sirka;
    public int[,] pole;

    public Matice()
    {
        int [,] pole = new int[dlzka, sirka];
    }

    public Matice(string nazov_hodnota, int dlzka_hodnota, int sirka_hodnota)
    {
        nazov = nazov_hodnota;
        dlzka = dlzka_hodnota;
        sirka = sirka_hodnota;
    }
}
Matice [] pole = new Matice [100];
pole[1].pole[1, 1] = 1;
...

Viete poradiť???

Polia dlzka a sirka su zbytočné, pretože obidva rozmery vieš zistiť priamo z poľa.

Prvý konštruktor je zrejme zbytočný, pretože ti vytvorí pole o rozmeroch nula krát nula, čo asi nie je to, čo chceš. Okrem toho, vytvorené pole neukladáš do členskej premennej, ale do lokálnej premennej (máš tam deklaráciu navyše), takže to robí niečo iné, ako očakávaš.

V druhom konštruktore zasa chýba vytvorenie samotného poľa podľa zadaných rozmerov.

A nakoniec si síce vytvoríš pole pre sto matíc, ale samotné matice už nikde nevytváraš. Chýba ti tam volanie konštruktora s požadovanými rozmermi matice, ktorú mimochodom ukladáš na druhé miesto v poli matíc (a nastavuješ jej hodnotu na pozícii 2, 2) - polia sú indexované od 0.

Pole preto, aby som mohol priamo pristupovat k danej matici a nemusel prehladavat napriklad spojovy zoznam. Pocet matic 100 je akousi hornou hranicou (asi sa nenajde nikto kto ich zada viac), meno pre maticu chcem preto, pretoze podla neho ju uzivatel identifikuje.

... a slusne v style OOP (co by mal zvladat aj C#) by to malo byt tak ze sa naprogramuje trieda "Matica" ktora bude alokovat pamaat a drzat si o sebe informacie (sirka, vyska, atd), a v programe urobis pole (alebo spojkovy zoznam ak je ich pocet dynamicky) objektov triedy "Matica".

Zpět do poradny Odpovědět na původní otázku Nahoru