Diskuze: Polia zoradenie,porovnanie
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 10 zpráv z 10.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
obávám se, že si budeš muset napsat vlastní algoritmus.
podívej se sem, najdeš tam inspiraci: http://stackoverflow.com/…l-array-in-c
1. Spoj to do jednoho pole, seřaď a znovu ulož do 2d pole
Pokud bys chtěl seřadit všechny prvky v tom poli A, tak bys musel udělat
něco na způsob toho, co psal Posix. Pokud bys chtěl ale seřadit hodnoty v
jednotlivých řádcích, tak jedna z možností je načítat jednotlivé
řádky, které postupně budeš řadit a ukládat do nového dvourozměrného
pole, a potom ho vrátíš.
Něco jako toto:
//poleA.Sort(out poleA);
public static void Sort(this int[,] data, out int[,] output)
{
int xLength = data.GetLength(0);
int yLength = data.GetLength(1);
int[,] twoDimension = new int[xLength, yLength];
for (int x = 0; x < xLength; x++)
{
int[] array = new int[yLength];
for (int y = 0; y < yLength; y++)
{
array[y] = data[x, y];
}
Array.Sort(array);
for (int y = 0; y < yLength; y++)
{
twoDimension[x, y] = array[y];
}
}
output = twoDimension;
}
U sloupců by sis musel udělat vlastní funkci (tady nemáš Array.Sort), která ti bude porovnávat hodnoty na stejné pozici x, akorát si musíš uvědomit, které hodnoty ve kterém řádku můžeš porovnávat, abys pak náhodou neprohodil { 2, 3, 4 } a {3, 2, 4} jen na základě toho, že ve druhém řádku (poli) je na 2. pozici X - 2 a v prvním 3.
Ještě k tomu, co jsem psal. Vlastně si ani nemusíš to nové dvourozměrné pole vytvářet, jen bys přepsal ty hodnoty v původním poli.
1. No ja som vytvoril niečo takéto ;D, potreboval som aby sa každý riadok (v ktorom je 5 čísiel) zoradil zvlášť , Antonin ten cod co si poslal je ešte na mňa moc,ale zajtra ho preskúmam , Ďakujem za riešenia
int[] pole1 = new int[5];
int[,] pole2 = new int[2,5];
// Zoradovanie
for (int a = 0; a != 2; a++)
{
for (int b = 0; b != 5; b++)
{
pole1[w] = generacnePole[a, b];
w++;
z++;
if (z == 5)
{
Array.Sort(pole1);
w = 0;
for (int x = 0; x != 1; x++)
{
for (int y = 0; y != 5; y++)
{
pole2[x, y] = pole1[w];
w++;
}
}
w = 0;
}
if (z == 10)
{
Array.Sort(pole1);
w = 0;
for (int x = 1; x != 2; x++)
{
for (int y = 0; y != 5; y++)
{
pole2[x, y] = pole1[w];
w++;
}
}
z = 0;
w = 0;
}
}
}
w = 0;
generacnePole = pole2;
Tady jsem ti to popsal:
public static void Sort(this int[,] data, out int[,] output)
{
//i značí číslo řádku
//a značí číslo položky v řádku
int iLength = data.GetLength(0); //Zde získáš délku pole (počet řádku) pomocí metody GetLength(0) s parametrem 0, který označuje 1. pole. Pokud máš tedy int[3,5], tak dostaneš 3 (řádky)
int aLength = data.GetLength(1); //1 označuje 2. pole (počet položek v řádku)
for (int i = 0; i < iLength; i++) //Zde procházíš 1. pole (řádky)
{
int[] array = new int[aLength]; //Vytvoření pole, jehož délka je rovna počtu položek v řádku
for (int a = 0; a < aLength; a++) //Zde procházíš každou položku v tom řádku
{
array[a] = data[i, a]; //Zde si na danou pozici v poli array nastavíš hodnotu z řádku, která je na stejné pozici
}
Array.Sort(array); //Zde máš metodu na seřazení hodnot
for (int a = 0; a < aLength; a++) //Po seřazení znovu projedeš řádek a na dané pozice dvourozměrného pole zapíšeš nové hodnoty
{
data[i, a] = array[a];
}
}
output = data; //Zde vracíš upravené pole
}
Proč používáš v parametrech zbytečně out a komplikuješ to když je
začátečník. Měl jsi použít metodu s návratovým typem int[,] místo
prázdného.
public static int[,] Sort(int[,] data)
{
//Tvůj kód
int iLength = data.GetLength(0); //Zde získáš délku pole (počet řádku)
pomocí metody GetLength(0) s parametrem 0, který označuje 1. pole. Pokud
máš tedy int[3,5], tak dostaneš 3 (řádky)
int aLength = data.GetLength(1); //1 označuje 2. pole (počet položek v
řádku)
for (int i = 0; i < iLength; i++) //Zde procházíš 1. pole (řádky)
{
int[] array = new int[aLength]; //Vytvoření pole, jehož délka je rovna
počtu položek v řádku
for (int a = 0; a < aLength; a++) //Zde procházíš každou položku v tom
řádku
{
array[a] = data[i, a]; //Zde si na danou pozici v poli array nastavíš hodnotu
z řádku, která je na stejné pozici
}
Array.Sort(array); //Zde máš metodu na seřazení hodnot
for (int a = 0; a < aLength; a++) //Po seřazení znovu projedeš řádek a
na dané pozice dvourozměrného pole zapíšeš nové hodnoty
{
data[i, a] = array[a];
}
}
return data;
}
Tak to porovnávanie som nakoniec doriešil predsa len cez for cyklus,, ale ak by mal niekto lepšie riešenie nech napíše
public void Porovnanie()
{
int number = 0;
for (int x = 0; x < 5; x++)
{
for (int y = 0; y < 2; y++)
{
if (generacnePole[x, y] == zasobnik[x, y])
{
number++;
}
}
}
if (number == 10)
{
Console.WriteLine("zhoda");
rovnost = false;
}
}
Zobrazeno 10 zpráv z 10.