Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Motlja
Člen
Avatar
Motlja:29.7.2014 23:08

Zdravím přátelé mám problém s rychlostí programu po kliknutí se provádí

void tb_Click(object sender, EventArgs e)
        {
            Ciselnik c = new Ciselnik((sender as Policko).x, (sender as Policko).y, (sender as Policko).c);
            c.Show();
        }
public partial class Ciselnik : Form
    {
        int x = 0;
        int y = 0;
        int[,] s;
        public Ciselnik(int xi, int yi, int[,] c)
        {
            InitializeComponent();
            x = xi;
            y = yi;
            s = c;
        }

        private void Ciselnik_Load(object sender, EventArgs e)
        {
            Cislo c = new Cislo(Form1.pole);

a ve třídě cislo

class Cislo
    {
        int[,] poleHraci = new int[9, 9];
        bool[] poleObsazenych = new bool[10];


        public Cislo(Policko[,] pole)
        {
            for(int i = 0; i < 9; i++)
            {
                for(int j = 0; j < 9; j++)
                {
                    try
                    {
                        poleHraci[i, j] = Convert.ToInt32(pole[i, j].Text);
                    }
                    catch
                    {
                        poleHraci[i, j] = 0;
                    }

                }
            }
        }

        public bool[] VratVolne(int x, int y, int[,] c)
        {
            ObsazeneRadekSloupec(y,x);


            //ObsazeneOblast(x, y);
            int[,] r = c;
            for (int i = r[0, 0]; i <= r[0, 1]; i++)
            {
                for (int j = r[1, 0]; j <= r[1, 1]; j++)
                {
                    for (int k = 0; k < 10; k++)
                    {
                        if (k == poleHraci[i, j])
                        {
                            poleObsazenych[k] = true;
                        }
                    }
                }
            }
            //

            bool[] poleVolnych = new bool[10];
            for (int i = 0; i < 10; i++)
            {
                if(poleObsazenych[i])
                {
                    poleVolnych[i] = false;
                }
                else
                {
                    poleVolnych[i] = true;
                }
            }
                return poleVolnych;
        }
        void ObsazeneRadekSloupec(int y, int x)
        {
            for(int i = 0; i < 9; i++)
            {
                for (int j = 0; j < 10; j++)
                {
                    //radek
                    if (j == poleHraci[i, y])
                    {
                        poleObsazenych[j] = true;
                    }
                    //sloupec
                    if (j == poleHraci[x, i])
                    {
                        poleObsazenych[j] = true;
                    }
                }
            }
        }


        void ObsazeneOblast(int x, int y, int[,] c)
        {
            int[,] r = c;
            for (int i = r[0,0]; i <= r[0,1]; i++)
            {
                for (int j = r[1, 0]; j <= r[1, 1]; j++)
                {
                    for (int k = 0; k < 10; k++)
                    {
                        if (k == poleHraci[i, j])
                        {
                            poleObsazenych[k] = true;
                        }
                    }
                }
            }
        }

    }
}

Lámu si s tím hlavu ale bez výsledků. Máte nějaké tipy?

Editováno 29.7.2014 23:08
Odpovědět
29.7.2014 23:08
Umím a učím se to co chci, to co mě baví a zajímá!!
Avatar
sadlomaslox25:30.7.2014 3:07

a co ze ten program ma delat? mne to prijde nejaky zmateny kod. a hlavne podle toho cos napsal tak to muze byt asi tak 2x kratsi.

 
Nahoru Odpovědět
30.7.2014 3:07
Avatar
Milan Křepelka
Tvůrce
Avatar
Milan Křepelka:30.7.2014 12:07

Co to znamená problém? Je to pomalý? No tak to změř. Dej si tam časový značky a podle nich poznáš co je pomalý.

 
Nahoru Odpovědět
30.7.2014 12:07
Avatar
Motlja
Člen
Avatar
Motlja:30.7.2014 22:43

Program jako celkový má řešit sudoku. Tato část prohledává okolní pole řádek a sloupec. cicobasket díky za tip netušil jsem že něco takového tam je.

Nahoru Odpovědět
30.7.2014 22:43
Umím a učím se to co chci, to co mě baví a zajímá!!
Avatar
Odpovídá na Motlja
sadlomaslox25:30.7.2014 23:47

neda se nahodou vetsina toho tveho kodu zredukovat nejak takhle ? :D

public class Cislo
{
    int[,] poleHraci = new int[9, 9];

    bool[] VratVolne(int x, int y)
    {
        var obsazene = new bool[10];

        int baseX = (x/3)*3;
        int baseY = (y/3)*3;

        for (int i = 0; i < 9; i++)
        {
            //radky
            obsazene[poleHraci[x, i]] = true;
            //sloupce
            obsazene[poleHraci[i, y]] = true;
            //bunka
            obsazene[poleHraci[baseX + i % 3, baseY + i / 3]] = true;
        }

        return obsazene.Select(o => !o).ToArray();
    }

    void MereniFunkce()
    {
        Stopwatch sw = new Stopwatch();
        sw.Restart();
        VratVolne(3, 4);
        sw.Stop();
        Console.WriteLine("Volani funkce VratVolne trva "+sw.Elapsed.TotalMilliseconds+" ms.");
    }
}

jinak na mereni casu krome system.diagnos­tic.stopwatch pokud mas visual studio v ultimate edici tak je k dispozici i profiler ale je mozne ze to uz bude trosku prisnejsi pro zacatecniky xD

 
Nahoru Odpovědět
30.7.2014 23:47
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.