se ti va di leggere in c# ti posto una soluzione. non ho capito se ti serve una soluzione "algoritmica" o "pratica". Questa è piu algoritmica ma ha come limitazione quella di dover allocare un array sufficientemente grande per gestire i risultati in quanto gli array puri come ha detto Oregon non si possono dimensonare a runtime.
cosi la testicodice:private static int[,] Riduci(int[,] originale, int[] indici) { int[,] ridotto = new int[10, 10]; //uno sufficientemente grande. int count = 0; for (int i = 0; i < originale.GetLength(0); i++) for (int j = 0; j < originale.GetLength(1); j++) if (!indici.Contains(i) && !indici.Contains(j)) { int ri = count / (originale.GetLength(1) - indici.GetLength(0)); int rj = count % (originale.GetLength(1) - indici.GetLength(0)); ridotto[ri, rj] = originale[i, j]; count++; } return ridotto; }
codice:int[,] originale = new int[5, 8]; //inizializzo sequenzialmente for (int i = 0; i < originale.GetLength(0); i++) { for (int j = 0; j < originale.GetLength(1); j++) { originale[i, j] = (i * originale.GetLength(1)) + j; Console.Write(originale[i, j] + " - "); } Console.WriteLine(); } int[] indici = { 0, 2, 4 }; //elenco indici da eliminare int[,] ridotto = Riduci(originale, indici); //output Console.WriteLine("Output matrice ridotta"); for (int i = 0; i < originale.GetLength(0) - indici.GetLength(0); i++) { for (int j = 0; j < originale.GetLength(1) - indici.GetLength(0); j++) { Console.Write(ridotto[i, j] + " - "); } Console.WriteLine(); }

Rispondi quotando