Sortowanie bąbelkowe

0

Witam
Mam problem z sortowaniem bąbelkowym. Program ma utworzyć dowolnie wielką tablice której rozmiar deklarujemy za pomocą suwaków, do komórek tablicy przypisuje losową wartość. Następnie program ma posortować watości i w tym momencie pojawia się probelm ponieważ podczas sortowania wyświetla się komunikat: An unhandled exception of type 'System.ArgumentOutOfRangeException' occurred in mscorlib.dll Additional information: Indeks jest spoza zakresu. Musi mieć wartość nieujemną i mniejszą niż rozmiar kolekcji. Dodam jeszcze że dodawanie losowej wartości działa prawidłowo.

Dołączam kod źródłowy programu:

#pragma endregion
	private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) 
			 {
				 int Row,Col;
				 Row=hScrollBar2->Value;
				 Col=hScrollBar1->Value;
						dataGridView1->RowCount=Row;
						dataGridView1->ColumnCount=Col;
     
						 for (int j=0; j<Row;j++)
						 for (int i=0; i<Col;i++)
				 dataGridView1->Rows[j]->Cells[i]->Value= (unsigned char)rand();

				 
			 }
private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) 
		 {
			 int Row,Col;
					Row=hScrollBar2->Value;
					 Col=hScrollBar1->Value;

			 long int tablicahlp[1000],tmp;
    for(int k=0;k<Row;k++)
     for(int l=0;l<Col;l++)
     tablicahlp[k*Col+l]= Convert::ToInt16(dataGridView1[k,l]->Value);
    
    bool changes = true;
    while(changes)
    {
     changes = false;
     for (int j=0;j<Row*Col-1;j++)  //sortowanie
     if(tablicahlp[j+1]>tablicahlp[j])
     {
      tmp=tablicahlp[j+1];
      tablicahlp[j+1]=tablicahlp[j];
      tablicahlp[j]=tmp;
      changes = true;
     }

     }

    
        for(int k=0;k<Row;k++)
     for(int l=0;l<Col;l++)
     dataGridView1[k,l]->Value=tablicahlp[k*Col+l];
		 }
};
} 
0

Tak jak mówi komunikat błędu odwołujesz się do miejsca w tablicy które nie istnieje, albo podczas sortowania albo podczas wstawiania do dataGridView, to zależy której linii masz błąd.

Edit: a poza tym mówisz że wielkość zależy od suwaków, a tablice deklarujesz 1000 wymiarową. A co jeżeli suwakiem ustawie 1200 ?

0

No deklarowałem ja pierwotnej wersji tak: tablicahlp[ColRow] lecz wywalało błąd tablicahlp unknow size. Więc ustawiłem suwaki od 1 do 100, a rozmiar tablicy wprowadziłem ręcznie 100100. Widzisz może gdzie jest błąd? Bo nie umiem znaleźć co jest źle, próbowałem już zmieniać wszystko.

0

Która linia dokładnie zwraca błąd ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1