Tableaux rotatifs de démonstration pour les débutants

Un tableau est une structure qui était à l'origine de la programmation. Mais, malgré le fait que les tableaux reçoivent une attention particulière dans chaque cours de leçons dans n'importe quel langage de programmation, beaucoup d'informations importantes liées à la logique d'interaction avec cette structure échappent encore aux débutants.





Le but de cet article est de collecter des informations sur les tableaux qui me manquaient autrefois. Post pour les débutants.





Qu'est-ce qu'un tableau?

Un tableau est une structure du même type de données située en mémoire dans un bloc insécable.





Emplacement d'un tableau unidimensionnel en mémoire
Emplacement d'un tableau unidimensionnel en mémoire





Les tableaux multidimensionnels sont stockés de la même manière.





Emplacement d'un tableau bidimensionnel en mémoire
Emplacement d'un tableau bidimensionnel en mémoire

Sachant cela nous permet d'accéder différemment aux éléments du tableau. Par exemple, nous avons un tableau à 2 dimensions de 9 éléments 3x3. Il existe donc au moins deux façons de l'afficher correctement:





1ère option (la plus simple):





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ème option (plus difficile):





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;
}
      
      



La formule pour accéder à un élément d'un tableau à 2 dimensions, où width est la largeur du tableau, col est la colonne dont nous avons besoin et row est la ligne dont nous avons besoin:





arr [largeur * col + ligne]

Connaissant la deuxième option, il n'est pas nécessaire de l'utiliser constamment, mais cela vaut toujours la peine de le savoir. Par exemple, cela peut être utile lorsque vous devez vous débarrasser des astérisques supplémentaires des pointeurs aux pointeurs aux pointeurs.





Et voici comment vous pouvez travailler avec un tableau en trois dimensions
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 [hauteur * largeur * profondeur + largeur * col + ligne]

.





, .





- , .





. , :





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 .





, , .





Exécution étape par étape de l'algorithme

, c .





Le graphique menant à la solution
,
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