Demonstrativ rotierende Arrays für Anfänger

Ein Array ist eine Struktur, die den Ursprung der Programmierung hatte. Trotz der Tatsache, dass Arrays in jedem Unterricht in jeder Programmiersprache berücksichtigt werden, entgehen Anfängern immer noch viele wichtige Informationen in Bezug auf die Logik der Interaktion mit dieser Struktur.





Der Zweck dieses Beitrags ist es, einige Informationen über Arrays zu sammeln, die mir einmal fehlten. Post für Anfänger.





Was ist ein Array?

Ein Array ist eine Struktur desselben Datentyps, der sich in einem nicht unterbrechenden Block im Speicher befindet.





Position eines eindimensionalen Arrays im Speicher
Position eines eindimensionalen Arrays im Speicher





Mehrdimensionale Arrays werden auf die gleiche Weise gespeichert.





Position eines zweidimensionalen Arrays im Speicher
Position eines zweidimensionalen Arrays im Speicher

Wenn wir dies wissen, können wir anders auf Array-Elemente zugreifen. Zum Beispiel haben wir ein zweidimensionales Array von 9 3x3-Elementen. Es gibt also mindestens zwei Möglichkeiten, es korrekt anzuzeigen:





1. Option (am einfachsten):





int arr[3][3] {1, 2, 3, 4, 5, 6, 7, 8, 9};
int y = 3, x = 3;
for (int i = 0; i < y, ++i) {
	for (int j = 0; j < x; ++j) {
  	std::cout << arr[i][j];
  }
  std::cout << std::endl;
}
      
      



2. Option (schwieriger):





int arr [9] {1,2,3,4,5,6,7,8,9};
int x = 3, y = 3;
for (int i = 0; i < y; ++i) {
  for (int j = 0; j < x; ++j) {
		std::cout << arr[x * i + j]; // x -  
    }
  std::cout << std::endl;
}
      
      



Die Formel für den Zugriff auf ein Element eines zweidimensionalen Arrays, wobei width die Breite des Arrays ist, col die Spalte ist, die wir benötigen, und row die Zeile ist, die wir benötigen:





arr [width * col + row]

Wenn Sie die zweite Option kennen, müssen Sie sie nicht immer verwenden, aber es lohnt sich zu wissen. Dies kann beispielsweise nützlich sein, wenn Sie zusätzliche Sternchen von Zeigern zu Zeigern zu Zeigern entfernen müssen.





Und so können Sie mit einem dreidimensionalen Array arbeiten
int arr[8] {1,2,3,4,5,6,7,8};
int x = 2, y = 2, z = 2;
for (int i = 0; i < x; ++i) {
	for (int j = 0; j < y; ++j) {
  	for (int k = 0; k < z; ++z) {
    	std::cout << arr[x * y * i + y * j + k];
    }
    std::cout << std::endl;
  }
  std::cout << std::endl;
} 
      
      



, .





, height - , width - , depth - ( ), col - , row - :





arr [Höhe * Breite * Tiefe + Breite * Spalte + Reihe]

.





, .





- , .





. , :





1) .





, .





int data[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
int newArray[3][4];
int height = 3, width = 4;
for (int i = 0; i < height; ++i) {
	for (int j = 0; j < width; ++j) {
  	newArray[i][j] = data[i][width - j - 1];
  }
}
      
      



.





int data[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
int newArray[3][4];
int height = 3, width = 4;
for (int i = 0; i < height; ++i) {
	for (int j = 0; j < width; ++j) {
  	newArray[i][j] = data[height - i - 1][j];
  }
}
      
      



2) 90 .





, , .





Schrittweise Ausführung des Algorithmus

, c .





Das Diagramm, das zur Lösung führt
,
int data[3][2] = {1,2,3,4,5,6};							
int newArray[2][3];					
int height = 3, width = 2; 	//   ()
int newHeight = width, newWidth = height;

//  
for (int i = 0; i < newHeight; ++i) {
	for (int j = 0; j < newWidth; ++j) {
  	newArray[i][j] = data[j][i];			// data -  
  }
}

//     
for (int i = 0; i < newHeight; ++i) {
	for (int j = 0; j < newWidth/2; ++j) {
  	int temp = newArray[i][j];
    newArray[i][j] = newArray[i][newWidth - j - 1];
    newArray[i][newWidth - j - 1] = temp;
  }
}

      
      



, . , .





: . new.





, IT.





, , . , , , — , . .





, , .








All Articles