Contactos

Matriz estática: declaración, llenado, uso. Arreglos unidimensionales Ejemplo de arreglo unidimensional c

Una matriz es una estructura de datos representada como un grupo de celdas del mismo tipo, unidas bajo un solo nombre. Las matrices se utilizan para procesar grandes cantidades de datos del mismo tipo. El nombre de la matriz es lo que son los punteros, te lo contaré un poco más adelante. Una celda de datos individual de una matriz se denomina elemento de matriz. Los elementos de una matriz pueden ser datos de cualquier tipo. Las matrices pueden tener una o más de una dimensión. Dependiendo del número de dimensiones, las matrices se dividen en matrices unidimensionales, matrices bidimensionales, matrices tridimensionales, etc. hasta una matriz de n dimensiones. Las matrices unidimensionales y bidimensionales se utilizan con mayor frecuencia en programación, por lo que consideraremos solo estas matrices.

Matrices unidimensionales en C++

Una matriz unidimensional es una matriz con un parámetro que caracteriza el número de elementos de la matriz unidimensional. De hecho, una matriz unidimensional es una matriz que puede tener solo una fila y n columnas. Las columnas de una matriz unidimensional son los elementos de la matriz. La Figura 1 muestra la estructura de una matriz unidimensional de números enteros. a. El tamaño de esta matriz es de 16 celdas.

Figura 1: matrices en C++

Tenga en cuenta que el índice máximo de una matriz unidimensional a es 15, pero el tamaño de la matriz es de 16 celdas, porque la numeración de las celdas de la matriz siempre comienza desde 0. El índice de celda es un número entero no negativo mediante el cual puede acceder a cada celda de la matriz y realizar cualquier acción en ella ( celúla).

//sintaxis para declarar una matriz unidimensional en C++: /*tipo de datos*/ /*nombre de una matriz unidimensional*/; //un ejemplo de declaración de una matriz unidimensional que se muestra en la Figura 1: int a;

donde, int es un número entero;

A es el nombre de una matriz unidimensional;
16 es el tamaño de una matriz unidimensional, 16 celdas.

Siempre inmediatamente después del nombre de la matriz hay corchetes en los que se especifica el tamaño de la matriz unidimensional; esto es lo que distingue a la matriz de todas las demás variables.

//otra forma de declarar matrices unidimensionales int mas, a;

Se declaran dos matrices unidimensionales mas y a con tamaños 10 y 16, respectivamente. Además, en este método de declaración, todas las matrices tendrán el mismo tipo de datos, en nuestro caso, int.

// las matrices se pueden inicializar cuando se declaran: int a = ( 5, -12, -12, 9, 10, 0, -9, -12, -1, 23, 65, 64, 11, 43, 39, -15 ); // inicialización de una matriz unidimensional

La inicialización de una matriz unidimensional se realiza entre llaves después del signo. es igual, cada elemento de la matriz está separado del anterior por una coma.

Int a=(5,-12,-12,9,10,0,-9,-12,-1,23,65,64,11,43,39,-15); // inicializando la matriz sin determinar su tamaño.

En este caso, el propio compilador determinará el tamaño de la matriz unidimensional. El tamaño de una matriz solo se puede omitir al inicializarla; cuando se declara una matriz normalmente, se debe especificar el tamaño de la matriz. Desarrollemos un programa simple para procesar una matriz unidimensional.

// array.cpp: define el punto de entrada para la aplicación de consola. #incluye "stdafx.h" #incluye << "obrabotka massiva" << endl; int array1 = { 5, -12, -12, 9, 10, 0, -9, -12, -1, 23, 65, 64, 11, 43, 39, -15 }; // объявление и инициализация одномерного массива cout << "indeks" << "\t\t" << "element massiva" << endl; // печать заголовков for (int counter = 0; counter < 16; counter++) //начало цикла { //вывод на экран индекса ячейки массива, а затем содержимого этой ячейки, в нашем случае - это целое число cout << "array1[" << counter << "]" << "\t\t" << array1 << endl; } system("pause"); return 0; }

// código Código::Bloques

// código de desarrollo-C++

// array.cpp: define el punto de entrada para la aplicación de consola. #incluir usando el espacio de nombres estándar; int principal(int argc, char* argv) ( cout<< "obrabotka massiva" << endl; int array1 = { 5, -12, -12, 9, 10, 0, -9, -12, -1, 23, 65, 64, 11, 43, 39, -15 }; // объявление и инициализация одномерного массива cout << "indeks" << "\t\t" << "element massiva" << endl; // печать заголовков for (int counter = 0; counter < 16; counter++) //начало цикла { //вывод на экран индекса ячейки массива, а затем содержимого этой ячейки, в нашем случае - это целое число cout << "array1[" << counter << "]" << "\t\t" << array1 << endl; } return 0; }

EN líneas 10 - 11 Se ha declarado e inicializado una matriz unidimensional entera denominada matriz1, cuyo tamaño es de 16 celdas, es decir, dicha matriz puede almacenar 16 números. Cualquier procesamiento de matrices sólo es posible junto con bucles. Usted decide qué bucle elegir para procesar la matriz. Pero es el más adecuado para esta tarea. Usaremos la variable contador contador para acceder a los elementos de la matriz unidimensional array1. La condición para continuar el bucle for contiene un signo de desigualdad estricta, ya que no hay un índice decimosexto en la matriz unidimensional array1. Y como la numeración de celdas comienza desde cero, hay 16 elementos en la matriz. En el cuerpo del bucle for, el operador cout imprime los elementos de una matriz unidimensional (ver Figura 2).

Obrabotka índices masivos elemento masivo array1 5 array1 -12 array1 -12 array1 9 array1 10 array1 0 array1 -9 array1 -12 array1 -1 array1 23 array1 65 array1 64 array1 11 array1 43 array1 39 array1 -15 Para continuar, presione cualquier tecla. . .

Figura 2 - Matrices en C++

Desarrollemos otro programa para procesar una matriz unidimensional en C++. El programa debe leer secuencialmente diez números ingresados ​​desde el teclado. Todos los números ingresados ​​se suman y el resultado se muestra en la pantalla.

// array_sum.cpp: define el punto de entrada para la aplicación de consola. #incluye "stdafx.h" #incluye << "Enter elementi massiva: " << endl; int sum = 0; for (int counter = 0; counter < 10; counter++) // цикл для считывания чисел cin >> << "array1 = {"; for (int counter = 0; counter < 10; counter++) // цикл для вывода элементов массива cout << array1 << " "; // выводим элементы массива на стандартное устройство вывода for (int counter = 0; counter < 10; counter++) // цикл для суммирования чисел массива sum += array1; // суммируем элементы массива cout << "}\nsum = " << sum << endl; system("pause"); return 0; }

// código Código::Bloques

// código de desarrollo-C++

// array_sum.cpp: define el punto de entrada para la aplicación de consola. #incluir usando el espacio de nombres estándar; int main(int argc, char* argv) ( int array1; // declara una matriz de enteros cout<< "Enter elementi massiva: " << endl; int sum = 0; for (int counter = 0; counter < 10; counter++) // цикл для считывания чисел cin >>matriz1; // lee los números ingresados ​​desde el teclado cout<< "array1 = {"; for (int counter = 0; counter < 10; counter++) // цикл для вывода элементов массива cout << array1 << " "; // выводим элементы массива на стандартное устройство вывода for (int counter = 0; counter < 10; counter++) // цикл для суммирования чисел массива sum += array1; // суммируем элементы массива cout << "}\nsum = " << sum << endl; return 0; }

Antes de procesar una matriz, se debe declarar y el tamaño de una matriz unidimensional es 10, ya que así lo estipula la condición de la tarea. En la variable suma acumularemos la suma de los elementos de una matriz unidimensional. El primer bucle for llena la matriz unidimensional declarada con números ingresados ​​desde el teclado, líneas 12 - 13. La variable contador se utiliza para acceder secuencialmente a los elementos de la matriz unidimensional array1, comenzando desde el índice 0 y hasta el 9º inclusive. El segundo bucle for muestra los elementos de la matriz, líneas 15 - 16. El tercer bucle for lee secuencialmente los elementos de una matriz unidimensional y los suma, la suma se acumula en la variable de suma. líneas 17 - 18. El resultado del programa se muestra en la Figura 3.

Ingrese elementos masivos: 0 1 2 3 4 5 6 7 8 9 array1 = (0 1 2 3 4 5 6 7 8 9 ) sum = 45 Para continuar, presione cualquier tecla. . .

Figura 3 - Matrices en C++

Primero, los 10 números se ingresaron secuencialmente, después de lo cual se mostró una matriz unidimensional y se imprimió la suma de los números en la matriz.

Matrices bidimensionales en C++

Hasta este punto, hemos considerado matrices unidimensionales, a las que no siempre se puede limitar. Digamos que necesita procesar algunos datos de una tabla. Una tabla tiene dos características: el número de filas y el número de columnas. También en una matriz bidimensional, además del número de elementos de la matriz, existen características tales como el número de filas y el número de columnas de una matriz bidimensional. Es decir, visualmente, una matriz bidimensional es una tabla normal, con filas y columnas. De hecho, una matriz bidimensional es una matriz unidimensional de matrices unidimensionales. A continuación se muestra la estructura de una matriz bidimensional, denominada a, de tamaño m por n (ver Figura 4).

Figura 4 - Matrices en C++

donde m es el número de filas de una matriz bidimensional;
n es el número de columnas de una matriz bidimensional;
m * n — número de elementos de la matriz.

// sintaxis para declarar una matriz bidimensional /*tipo de datos*/ /*nombre de la matriz*/;

Al declarar una matriz bidimensional, así como al declarar una matriz unidimensional, en primer lugar, debe especificar:

  • tipo de datos;
  • nombre de la matriz.

Después de eso, los primeros corchetes indican el número de filas de la matriz bidimensional y los segundos corchetes indican el número de columnas de la matriz bidimensional. Una matriz bidimensional se distingue visualmente de una matriz unidimensional mediante un segundo par de corchetes. Veamos un ejemplo de declaración de una matriz bidimensional. Digamos que necesitamos declarar una matriz bidimensional con una cantidad de elementos igual a 15. En este caso, una matriz bidimensional puede tener tres filas y cinco columnas o cinco filas y tres columnas.

// ejemplo de declaración de una matriz bidimensional: int a;

  • a es el nombre de la matriz de enteros
  • el número entre los primeros corchetes indica el número de filas de la matriz bidimensional, en este caso son 5;
  • el número en el segundo corchete indica el número de columnas de la matriz bidimensional, en este caso son 3.

// inicialización de una matriz bidimensional: int a = ( (4, 7, 8), (9, 66, -1), (5, -5, 0), (3, -3, 30), ( 1, 1, 1) );

Esta matriz tiene 5 filas, 3 columnas. después del signo de asignación, se colocan llaves generales, dentro de las cuales se colocan tantos pares de llaves como líneas debe haber en una matriz bidimensional, y estos corchetes están separados por comas. En cada par de llaves, escriba los elementos de una matriz bidimensional separados por comas. En todas las llaves, el número de elementos debe ser el mismo. Dado que hay cinco líneas en la matriz, también hay cinco pares internos de corchetes. Entre paréntesis interiores se escriben tres elementos, ya que el número de columnas es tres. Gráficamente, nuestra matriz se verá como una tabla bidimensional (ver Figura 5).

Figura 5 - Matrices en C++

En cada celda de una matriz bidimensional a Se muestra el valor, la dirección de esta celda se muestra en la esquina inferior derecha. La dirección de celda de una matriz bidimensional es el nombre de la matriz, el número de fila y el número de columna.

Desarrollemos un programa simple para procesar una matriz bidimensional, llamado "Laberinto". El laberinto debe construirse sobre la base de una matriz bidimensional. Elegiremos el tamaño del laberinto a nuestro criterio.

// array2.cpp: define el punto de entrada para la aplicación de consola. #incluye "stdafx.h" #incluye < 33; i++) //переключение по строкам { for (int j = 0; j < 20; j++)// переключение по столбцам if (mas[i][j] == 1) { // вывести два раза символ (номер которого 176 в таблице аски) в консоль cout << static_cast(176); corte<< static_cast(176); ) más cout<< " "; // вывести два пробела cout << endl; } system("pause"); return 0; }

// código Código::Bloques

// código de desarrollo-C++

// array2.cpp: define el punto de entrada para la aplicación de consola. #incluir usando el espacio de nombres estándar; int main(int argc, char* argv) ( // 1-condicionalmente “paredes del laberinto” // 2-“camino correcto, salida del laberinto” // 0-“camino falso” int mas = ( (1, 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,), // inicialización de una matriz bidimensional ( 1,2,1,0 ,0,1,0,1,2,2,2,1,1,1,1,0,0,0,0,1,), (1,2,1,1 ,0,1,0, 1,2,1,2,2,2,2,1,0,1,1,0,1,), (1,2,2,2,2,2,2, 1,2,1,1 ,1,1,2,1,0,0,1,0,1,), (1,1,1,1,1,1,2,1,2,1,0 ,0,1,2, 1,1,0,1,0,1,), (1,0,0,1,0,0,2,2,2,1,1,0,0,2, 0,0,0,1 ,0,1,), (1,0,1,1,0,1,1,1,1,1,0,0,1,2,1,1,1,1 ,0,1,), (1,0,0,0,0,0,0,0,0,1,1,1,1,2,1,0,0,0,0,1,), (1,1,1, 1,1,1,0,1,1,1,2,2,2,2,1,0,1,1,1,1,), (1,1,0, 0,0,1,0 ,0,1,1,2,1,1,1,1,0,0,0,0,1,), (1,0,0,1,0,0,0 ,0,0,1, 2,2,2,2,1,1,1,1,0,1,), (1,1,1,1,1,1,1,1,1,1, 1,1,1,2 ,1,0,0,0,0,1,), (1,2,2,2,2,2,2,2,2,2,2,2,2,2 ,1,0,1, 1,1,1,), (1,2,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0, 0,0,1,) , (1,2,1,0,0,0,1,2,2,2,1,0,0,0,0,0,1,1,0,1,) , (1,2,1 ,1,1,1,1,2,1,2,1,1,1,0,1,0,0,0,0,1,), (1,2,1 ,2,2,2, 1,2,1,2,2,2,1,1,1,1,1,1,1,1,), (1,2,1,2,1,2, 1,2,1,0 ,1,2,2,2,2,2,2,2,2,2,1,), (1,2,1,2,1,2,1,2,1,0 ,1,1,1, 1,1,1,1,1,2,1,), (1,2,1,2,1,2,1,2,1,0,0,0,0, 0,0,0,0 ,0,2,1,), (1,2,1,2,1,2,2,2,1,0,1,1,1,1,1,1,0 ,1,2,1, ), (1,2,1,2,1,1,1,1,1,0,0,0,1,0,1,0,0,1,2,1, ), (1,2, 1,2,2,1,0,0,1,1,1,0,0,0,1,0,1,1,2,1,), (1,2, 1,1,2,1 ,1,0,0,0,0,0,1,0,1,0,0,1,2,1,), (1,2,1,1,2,1 ,0,0,1, 1,1,1,1,1,1,1,1,1,1,2,1,), (1,2,1,1,2,1,1,0,1, 2,2,2,2 ,2,2,2,2,2,2,1,), (1,2,1,1,2,1,0,0,1,2,1,1,1 ,1,1,1, 1,1,1,1,), (1,2,1,1,2,1,0,1,1,2,1,1,1,1,1,1, 1,1,2,2 ,), (1,2,1,1,2,1,0,0,1,2,1,1,2,2,2,2,2,2,2,1 ,), (1,2 ,1,1,2,1,0,1,1,2,1,1,2,1,1,1,1,1,1,1,), (1,2 ,1,1,2, 1,0,0,1,2,1,1,2,1,0,0,0,1,0,1,), (1,2,2,2,2, 1,0,1,1 ,2,2,2,2,0,0,1,0,0,0,1,), (1,1,1,1,1,1,1,1,1 ,1,1,1, 1,1,1,1,1,1,1,1,) ); // dos bucles: interno y externo, accediendo a cada elemento de la matriz for (int i = 0; i< 33; i++) //переключение по строкам { for (int j = 0; j < 20; j++)// переключение по столбцам if (mas[i][j] == 1) { // вывести два раза символ (номер которого 176 в таблице аски) в консоль cout << static_cast(176); corte<< static_cast(176); ) más cout<< " "; // вывести два пробела cout << endl; } return 0; }

Las rutas correcta y falsa se pueden indicar con el mismo número, por ejemplo, cero, pero para mayor claridad, la ruta correcta se indica con el número 2. La matriz se inicializó manualmente, solo para simplificar el programa. Dado que el programa procesa una matriz bidimensional, se necesitan dos bucles para cambiar entre elementos de la matriz bidimensional. El primer bucle for cambia entre filas de una matriz bidimensional. Dado que hay 33 filas en una matriz bidimensional, la variable de contador i se incrementa de 0 a 33, línea 46. Dentro del primer bucle hay un bucle for que recorre los elementos de fila de una matriz bidimensional. En el cuerpo del segundo bucle for, se realiza una operación de conversión de tipo de datos unario: static_cast<>(), que imprime el carácter número 176. La operación de conversión del tipo de datos se duplica para aumentar el ancho del laberinto. El resultado del programa (ver Figura 6).

Figura 6 - Matrices en C++

Al resolver problemas con una gran cantidad de datos del mismo tipo, el uso de variables con diferentes nombres que no están ordenados por direcciones de memoria dificulta la programación. En tales casos, el lenguaje C utiliza objetos llamados matrices.

es una pieza de memoria contigua que contiene una secuencia de objetos del mismo tipo, indicados por un nombre.

La matriz se caracteriza por los siguientes conceptos básicos:

Elemento de matriz (valor del elemento de matriz)– un valor almacenado en una celda de memoria específica ubicada dentro de la matriz, así como la dirección de esta celda de memoria.
Cada elemento de la matriz se caracteriza por tres valores:

  • dirección del elemento: la dirección de la celda de memoria inicial en la que se encuentra este elemento;
  • índice del elemento (número ordinal del elemento en la matriz);
  • valor del elemento.

Dirección de matriz: la dirección del elemento inicial de la matriz.

El nombre de la matriz es un identificador que se utiliza para hacer referencia a los elementos de la matriz.

Tamaño de la matriz: número de elementos de la matriz

El tamaño del elemento es el número de bytes ocupados por un elemento de la matriz.

Gráficamente, la ubicación de la matriz en la memoria de la computadora se puede representar como una franja continua de direcciones.

La matriz que se muestra en la figura contiene q elementos con índices de 0 a q-1. Cada elemento ocupa k bytes en la memoria de la computadora y la disposición de los elementos en la memoria es secuencial.

Las direcciones del i-ésimo elemento de la matriz son

La dirección de la matriz es la dirección del elemento inicial (cero) de la matriz. Para acceder a los elementos de la matriz, se utiliza el número de serie (índice) del elemento, cuyo valor inicial es 0. Entonces, si una matriz contiene q elementos, entonces los índices de los elementos de la matriz varían de 0 a q-1.

La longitud de la matriz es la cantidad de bytes asignados en la memoria para almacenar todos los elementos de la matriz.

Longitud de la matriz = Tamaño del elemento * Número de elementos

La función se puede utilizar para determinar el tamaño de un elemento de matriz.

int tamaño de (tipo);

Por ejemplo,

tamaño de (carácter) = 1;
tamaño de (int) = 4;
tamaño de (flotante) = 4;
tamaño de (doble) = 8;

Declarar e inicializar matrices

Para declarar una matriz en C, se utiliza la siguiente sintaxis:

escriba nombre[dimensión]=(init);

La inicialización es un conjunto de valores iniciales de los elementos de la matriz, especificados entre llaves, separados por comas.

int a = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9); // matriz a de 10 enteros

Si el número de valores de inicialización especificados entre llaves es menor que el número de elementos de la matriz especificados entre corchetes, entonces todos los elementos restantes de la matriz (para los cuales no había suficientes valores de inicialización) serán cero. Esta propiedad es conveniente para establecer todos los elementos de una matriz en valores cero.

int b = (0); // matriz b de 10 elementos inicializada a 0


Si la matriz se inicializa cuando se declara, entonces los valores iniciales constantes de sus elementos se indican separados por comas entre llaves. En este caso, se puede omitir el número de elementos entre corchetes.

int a = (1, 2, 3, 4, 5, 6, 7, 8, 9);

Al acceder a los elementos de la matriz, el índice del elemento requerido se indica entre corchetes.

Ejemplo en C

1
2
3
4
5
6
7
8

#incluir
int principal()
{
int a = (5, 4, 3, 2, 1); // la matriz a contiene 5 elementos
printf("%d %d %d %d %d\n" , a, a, a, a, a);
getchar();
devolver 0;
}

Resultado de la ejecución del programa:

Sin embargo, a menudo es necesario establecer los valores de los elementos de la matriz durante la ejecución del programa. Esto utiliza una declaración de matriz sin inicialización. En este caso es obligatorio indicar el número de elementos entre corchetes.

ent a;

Para establecer los valores iniciales de los elementos de la matriz, se utiliza muy a menudo un bucle paramétrico:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18


#incluir
int principal()
{
ent a;
ent i;
// Ingresando elementos de la matriz
para (yo = 0; yo<5; i++)
{
printf("a[%d] = ", i);
scanf("%d", &a[i]);
}
// elementos de la matriz de salida
para (yo = 0; yo<5; i++)
printf("%d ", a[i]); // se requiere espacio en el formato de impresión
getchar(); getchar();
devolver 0;
}

Resultado de la ejecución del programa.

matrices multidimensionales

Las matrices multidimensionales también se pueden declarar en C. La diferencia entre una matriz multidimensional y unidimensional es que en una matriz unidimensional la posición de un elemento está determinada por un índice, y en una matriz multidimensional, por varios. Un ejemplo de matriz multidimensional es una matriz.

Forma general de declarar una matriz multidimensional.

escriba nombre[dimensión1][dimensión2]...[dimensiónm];

Los elementos de una matriz multidimensional están ubicados en sucesivas celdas RAM en orden ascendente de direcciones. En la memoria de la computadora, los elementos de una matriz multidimensional están dispuestos en una fila, por ejemplo una matriz con 2 filas y 3 columnas,

ent a;


se ubicará en la memoria de la siguiente manera

El número total de elementos en la matriz bidimensional dada se determina como

Número de filas * Número de columnas = 2 * 3 = 6.

El número de bytes de memoria necesarios para acomodar la matriz está dado por

Número de elementos * Tamaño del elemento = 6 * 4 = 24 bytes.

Inicializando matrices multidimensionales

Los valores de los elementos de una matriz multidimensional, como en el caso unidimensional, se pueden especificar mediante valores constantes cuando se declaran, entre llaves (). Sin embargo, en este caso, el número de elementos en filas y columnas debe indicarse entre corchetes.

Ejemplo en C

1
2
3
4
5
6
7
8
9

#incluir
int principal()
{
int a = (1, 2, 3, 4, 5, 6);
printf("%d %d %d\n" , a, a, a);
getchar();
devolver 0;
}



Sin embargo, con mayor frecuencia es necesario ingresar los valores de los elementos de una matriz multidimensional durante la ejecución del programa. Para ello, es conveniente utilizar un bucle paramétrico anidado.

Ejemplo en C

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

#definir _CRT_SECURE_NO_WARNINGS
#incluir
int principal()
{
ent a; // matriz de 2 filas y 3 columnas
int i, j;
// Ingresando elementos de la matriz
para (yo = 0; yo<2; i++) // recorrer las líneas
{
para (j = 0; j<3; j++) // recorrer las columnas
{
printf("a[%d][%d] = ", i, j);
scanf("%d", &a[i][j]);
}
}
// elementos de la matriz de salida
para (yo = 0; yo<2; i++) // recorrer las líneas
{
para (j = 0; j<3; j++) // recorrer las columnas
{
printf("%d ", a[i][j]);
}
printf("\n"); // nueva línea
}
getchar(); getchar();
devolver 0;
}



Pasar una matriz a una función

El procesamiento de matrices se puede organizar cómodamente mediante funciones especiales. Para procesar un array, debes pasar como argumentos a la función

  • dirección de matriz,
  • tamaño de la matriz.

La excepción son las funciones de procesamiento de cadenas, a las que basta con pasarles sólo la dirección.

Cuando se pasan variables como argumentos a una función, los datos se pasan como copias. Esto significa que si el valor de un parámetro cambia dentro de una función, esto no afectará su valor dentro de la función que llama.

Si se pasa una dirección de variable (o dirección de matriz) a una función, entonces todas las operaciones realizadas en la función en datos dentro del alcance de la dirección especificada se realizan en los datos originales, por lo que la matriz original (o valor de variable) se puede cambiar por la función llamada.

Ejemplo en C Dan matriz de 10 elementos. Intercambie los elementos más grandes y iniciales de la matriz. Para operaciones máximas de búsqueda e intercambio de elementos, utilice la función.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

#definir _CRT_SECURE_NO_WARNINGS
#incluir
// función de intercambio
cambio vacío (int *x, int n)
{
// x - puntero a la matriz (dirección de la matriz)
// n - tamaño de la matriz
ent i;
int máx, índice;
máx = x;
índice = 0;
//Encontrar el elemento máximo
para (yo = 1; yo {
si (x[i]>máx)
{
máx = x[i];
índice = i;
}
}
// Intercambio
x = x;
x = máximo;
}
// Función principal
int principal()
{
ent a;
ent i;
para (yo = 0; yo<10; i++)
{
printf("a[%d] = ", i);
scanf("%d", &a[i]);
}
cambio(a, 10); // llama a la función de intercambio
// elementos de la matriz de salida
para (yo = 0; yo<10; i++)
printf("%d ", a[i]);
getchar();
getchar();
devolver
p = p * x[i];
}
devolver p;
}
// Función principal
int principal()
{
ent a; // matriz declarada de 5 elementos
ent i;
int pr;
// Ingresando elementos de la matriz
para (yo = 0; yo<5; i++)
{
printf("a[%d] = ", i);
scanf("%d", &a[i]); // &a[i] - dirección del i-ésimo elemento de la matriz
}
pr = func(a, 5); //calcular el producto
printf("\n pr = %d", pr); // genera el producto de elementos pares
getchar(); getchar();
devolver 0;
}



Suspenda AdBlock en este sitio.

Una matriz es el tipo de datos compuestos más simple. Cuando hablamos de variables, tuvimos una buena analogía con una caja. Volvamos a ello. Si una variable es un cuadro, entonces una matriz consta de varios cuadros idénticos numerados que tienen el mismo nombre y se diferencian sólo en su número de serie.

Fig.1 Variables y matrices. Analogía con las cajas.

La imagen de arriba muestra tres matrices:

  • una matriz de enteros de 8 elementos llamada arr_int
  • matriz flotante de 11 elementos llamada arr_float
  • una matriz de caracteres de 6 elementos llamada arr_char

Una matriz, al igual que una variable, tiene su propio nombre y tipo de datos. Además, la matriz tiene una característica adicional: el tamaño de la matriz. El tamaño de una matriz es la cantidad de elementos que se pueden almacenar en ella. En nuestra analogía con las cajas, este es el número de cajas.

¡Nota!

La numeración de los elementos de la matriz comienza desde cero, no desde uno.

Declarar e inicializar una matriz

Declarar una matriz es muy similar a declarar una variable. La única diferencia es que además debes indicar el tamaño de la matriz entre corchetes. Aquí hay unos ejemplos:

Listado 1.

Intarr_int; doble arr_float; número flotante;

El nombre de la matriz está sujeto a restricciones similares a las impuestas al nombre de la variable.

Regla de nomenclatura de matrices

Un nombre de matriz es cualquier secuencia de caracteres, números y el guión bajo "_" que comienza con una letra. Las letras mayúsculas son importantes.

A continuación se muestran algunos ejemplos más de declaraciones de matrices:

Listado 2.

Grados internacionales, orden; precios dobles;

A una matriz, como a cualquier variable, se le pueden asignar valores iniciales cuando se declara. Si a los elementos de la matriz no se les asigna ningún valor, almacenarán basura, al igual que las variables normales.

Listado 3.

Int arr_int = (2, 5, 5, 3, 4); doble arr_float = (1,2, -2,3, 4,5, 3,83, 0,01, -0,12, 44,2, 123,7, 23,44, -3,7, 7);

Si necesitas asignar valores cero a todos los elementos de una matriz, puedes hacerlo así:

Listado 4.

Arr doble = (0);

Trabajar con elementos de matriz individuales

Para hacer referencia a un elemento de matriz individual, debe escribir su nombre y número de serie entre corchetes. No olvides que la numeración empieza desde cero, no desde uno.

Por ejemplo, mostremos los elementos de una matriz de cinco elementos en la pantalla.

Listado 5.

#incluir int main(void)( int arr = (2, 4, 3, 5, 5); printf("%d %d %d %d %d\n",arr, arr, arr, arr, arr); return (0);

Por supuesto, si la matriz es muy grande, generarla elemento por elemento de esta manera sigue siendo un placer. Y nadie hace esto con matrices pequeñas. Es mejor y más correcto utilizar bucles. Por ejemplo:

Listado 6.

#incluir int principal(vacío)( int arr = (0); para(int i = 0; i< 100; i = i + 1){ arr[i] = 2*i; } for(int i = 0; i < 100; i = i + 1){ printf("%d\t",arr[i]); } return(0); }

El programa en el primer ciclo guarda los primeros cien números pares en una matriz y en el segundo ciclo los muestra en la pantalla.

Armados con nuestras nuevas herramientas, reescribamos nuestro programa desde el comienzo de la lección para que use una matriz para almacenar estadísticas de números aleatorios.

Listado 7.

#incluir #incluir #incluir int main(void) ( srand(time(NULL)); int count = (0); int rand_number; for (int i = 0; i< 100000; i = i + 1){ rand_number = rand()%3; count = count + 1; } for(int i = 0; i < 3; i = i + 1){ printf("%d - %d\n", i, count[i]); } return 0; }

Preste atención a la técnica utilizada en este programa.
El elemento cero de la matriz almacena el número de apariciones del número 0, el primer elemento, el número de apariciones del número 1, el segundo elemento, el número 2. Es decir, el número generado en sí le permite determinar a qué elemento de la matriz necesita agregar uno. Por lo tanto, no hay necesidad de una declaración de selección de cambio. Conveniente, ¿no?

Las matrices son un tema extremadamente importante en C++. Se utilizan con mucha frecuencia en programas y es necesario comprender este tema a fondo. Te haré feliz de inmediato: comprender y aprender a usar matrices es bastante simple incluso para un principiante.

Entonces, ¿por qué se necesitan matrices y qué son? Ahora ya sabes que los datos del programa se almacenan en formato . Pero sucede que un programa necesita almacenar cientos (o incluso más) de variables del mismo tipo de datos y también necesita trabajar con ellas: asignar valores, cambiarlos, etc.

Por ejemplo, necesita almacenar los números de serie de las líneas. De acuerdo: cualquiera se asustaría con la idea de crear quinientas variables de tipo int, dándole a cada una un nombre único y asignando un valor de 1 a 500. (Ya tengo miedo :) En este caso, las matrices simplemente nos salvarán.

Notemos los puntos principales y pasemos a un ejemplo práctico:

  • Una matriz en C++ es una colección de una cierta cantidad de variables del mismo tipo que tienen el mismo nombre. P.ej, matriz entera;. Esta entrada significa que hemos declarado una matriz llamada formación, cual contiene 3 variables de tipo En t ;
  • las variables de matriz se llaman elementos;
  • Cada elemento tiene su propio índice único: su propio número de serie. Usando un índice podemos acceder a un elemento específico. IMPORTANTE - la indexación de elementos de la matriz comienza desde 0 . Entonces en la matriz matriz entera el primer elemento tiene un índice 0 , y el último es 2 . Para acceder, por ejemplo, al elemento cero de una matriz y cambiar su valor, debe especificar el nombre de la matriz e indicar el índice del elemento entre corchetes: matriz = 33 .

Veamos un ejemplo:

matrices C ++

// en este programa creamos una matriz con tamaño size, // usando un bucle for ingresamos datos en todas las celdas // de la matriz y mostramos su contenido en la pantalla #include usando el espacio de nombres estándar; int main() ( setlocale(LC_ALL, "rus"); const int TAMAÑO = 10; //declarar una constante int firstArray; //declarar una matriz con el número de elementos TAMAÑO para (int i = 0; i< SIZE ; i++) //заполняем и отображаем значения на экран { firstArray[i] = i + 1; // на первом шаге цикла firstArray присвоить 1 (0 + 1) cout << i << "-я ячейка хранит число " << firstArray[i] << endl; } cout << endl; return 0; }

// en este programa creamos una matriz con tamaño tamaño,

// usa un bucle for para ingresar datos en todas las celdas

// forma y muestra su contenido en la pantalla

#incluir

usando el espacio de nombres estándar;

int principal()

setlocale(LC_ALL, "rus");

constante int TAMAÑO = 10; //declarar una constante

int primera matriz[TAMAÑO]; //declaramos una matriz con el número de elementos TAMAÑO

para (int i = 0 ; i< SIZE ; i ++ ) //completar y mostrar los valores en la pantalla

primeramatriz[i] = i+1; // en el primer paso del ciclo asignamos firstArray 1 (0 + 1)

corte<< i << "-ésima celda almacena el número"<< firstArray [ i ] << endl ;

corte<< endl ;

devolver 0;

En la línea 12 definimos una constante entera TAMAÑO, que almacenará el tamaño de la matriz (definido por nosotros, el número de sus elementos). En la línea 13 declaramos una matriz: indicamos el tipo de datos que se almacenarán en las celdas de la matriz, le damos un nombre e indicamos el tamaño entre corchetes.

Es importante que solo podamos escribir valores enteros constantes entre corchetes. Debe ingresar inmediatamente un número entero entre corchetes al declarar una matriz ( int primera matriz;), o defina una constante entera antes de declarar la matriz e ingrese el nombre de esta constante entre corchetes (como en nuestro ejemplo).

Es preferible utilizar el segundo método si durante el transcurso del programa tendrá que acceder a la matriz varias veces a través de un bucle. Esto se explica por el hecho de que cuando declaramos un bucle, podemos especificar en él la condición para cambiar el contador al valor TAMAÑO .

Imagínese que necesitamos cambiar el tamaño de la matriz de 10 elementos a 200. En este caso, todo lo que tenemos que hacer es cambiar el valor de la constante entera, y así sustituiremos automáticamente nuevos valores de tamaño tanto en el matriz y en todos los bucles del programa.

En nuestro ejemplo, puedes intentar sumar cualquier otro número a la constante TAMAÑO. Y verá que el programa funcionará muy bien: creará una matriz con tantos elementos como usted especifique, ingresará los datos y los mostrará en la pantalla.

Y si el array es muy pequeño, por ejemplo con 5 elementos, puedes inicializarlo inmediatamente al declararlo:

Entonces, para un elemento con índice 0 – primera matriz– se le asignará un valor 11 , y el último elemento de la matriz. primera matriz- significado 1 5 . Existe tal truco: no puede indicar el tamaño de la matriz entre corchetes y escribir esto:

La entrada anterior es equivalente a esta. Solo en el segundo caso el compilador calculará automáticamente el tamaño de la matriz en función de la cantidad de datos entre llaves.

Además, durante la inicialización de los elementos de la matriz, cuando es necesario limpiar la matriz de "basura" (datos residuales de otros programas en la memoria), es mejor asignar inmediatamente un valor a todos los elementos. 0 . Se parece a esto:

Hay que recordar que dicha inicialización sólo es posible rellenando con ceros. Si necesita llenar los elementos de la matriz con otros números, es mejor usar un bucle. En C++ 11 (estándar de codificación), cuando se utiliza la inicialización de lista (inicialización con llaves), incluso se le permite descartar el signo = .

Me gustaría mostrar una técnica de inicialización más al crear una matriz. Por ejemplo, para una matriz de 30 elementos necesitamos ingresar los valores 33 Y 44 solo a celdas con un índice 0 Y 1 en consecuencia, y complete el resto con ceros. Luego hacemos esto:

estos datos se ingresarán en las celdas cero y primera, y el resto tomará automáticamente el valor 0 .

También puedes organizar el llenado de una matriz usando el operador cin:

para (int i = 0; i< size; i++) //заполняем и выводим значения на экран { cout << "Введите значение в ячейку №" << i << " :"; cin >> primeramatriz[i]; )

para (int i = 0 ; i< size ; i ++ ) //completar y mostrar los valores en la pantalla

Supongamos que necesitamos trabajar con una gran cantidad de datos del mismo tipo. Por ejemplo, tenemos mil medidas de las coordenadas de un péndulo con algún paso de tiempo. Crear 1000 variables para almacenar todos los valores es muy... engorroso. En cambio, muchos datos del mismo tipo se pueden combinar bajo un solo nombre y se puede acceder a cada elemento específico mediante su número de serie.
Una matriz en C se define de la siguiente manera
<тип> <имя массива>[<размер>];
Por ejemplo,
ent a;
Recibiremos una matriz llamada a, que contiene cien elementos de tipo En t. Al igual que con las variables, la matriz contiene basura.
Para acceder al primer elemento, escriba su número (índice) entre corchetes. Por ejemplo

#incluir #incluir void main() ( int a; a = 10; a = 333; a = 234; printf("%d %d %d", a, a, a); getch(); )

El primer elemento tiene el número de índice 0. Es importante entender por qué. A continuación representaremos la memoria de la computadora como una cinta. El nombre de la matriz es un puntero a la dirección de memoria donde se encuentran los elementos de la matriz.

Arroz. 1 La matriz almacena la dirección del primer elemento. El índice del elemento i es un desplazamiento de i*sizeof(type) bytes desde el principio

El índice de la matriz indica cuántos bytes se deben desplazar desde el principio de la matriz para acceder al elemento deseado. Por ejemplo, si la matriz A tiene tipo En t, entonces A significa que hemos movido 10*sizeof(int) bytes con respecto al principio. El primer elemento está al principio y tiene un desplazamiento de 0*sizeof(int) .
En C, una matriz no almacena su tamaño y no verifica que el índice de la matriz sea correcto. Esto significa que puede salir de la matriz y acceder a la memoria que está más lejos que el último elemento de la matriz (o más cerca).

Inicialización inicial de la matriz.

Escribamos un programa simple. Creemos una matriz y luego encontremos su elemento máximo.

#incluir #incluir void main() ( int a = (1, 2, 5, 3, 9, 6, 7, 7, 2, 4); sin signo i; int max; max = a; para (i = 1; i<10; i++) { if (a[i] >

Veamos un ejemplo. Primero creamos la matriz y la inicializamos al momento de la creación. Después de esto, asignamos al elemento máximo encontrado el valor del primer elemento de la matriz.

Máx = a;

Luego revisamos la matriz. Como ya hemos visto el primer elemento (tiene índice 1), no tiene sentido volver a mirarlo.
Mismo ejemplo, solo que ahora el usuario ingresa valores.

#incluir #incluir void main() ( int a; unsigned i; int max; printf("Ingrese 10 números\n"); for (i = 0; i<10; i++) { printf("%d. ", i); scanf("%d", &a[i]); } max = a; for (i = 1; i<10; i++) { if (a[i] >max) ( max = a[i]; ) ) printf("el elemento máximo es %d", max); obtener(); )

Si durante la inicialización se especifican menos valores que el tamaño de la matriz, los elementos restantes se rellenan con ceros.

#incluir #incluir void main() ( int a = (1,2,3); sin signo i; para (i = 0; i<10; i++) { printf("%d ", a[i]); } getch(); }

Si necesita llenar toda la matriz con ceros, escriba

Int a = (0);

No es necesario establecer explícitamente el tamaño de la matriz, por ejemplo

Int a = (1, 2, 3);

la matriz tendrá tamaño 3

Tamaño de la matriz

Una matriz en C debe tener un tamaño constante. Esto significa que es imposible, por ejemplo, pedirle al usuario un tamaño y luego establecer este tamaño en una matriz.

Printf("Ingrese la longitud de la matriz "); scanf("%d", &longitud); ( flotador x; )

La creación de matrices dinámicas se analizará más a fondo cuando se trabaje con punteros y memoria.
En algunos casos, puede averiguar el tamaño de la matriz utilizando la función tamaño de.

#incluir #incluir void main() ( int A; //sizeof devuelve el tamaño de toda la matriz en bytes //Para determinar el número de elementos, //divide el tamaño de la matriz por el tamaño de su elemento int size = sizeof(A) / sizeof(int); printf("El tamaño de la matriz es igual a %d", getch());

Pero es poco probable que esto resulte útil. Al pasar una matriz como argumento a una función, se pasará un puntero, por lo que no se conocerá el tamaño de la matriz.
Las matrices estáticas son útiles cuando se conoce de antemano el número de elementos. Proporcionan un acceso rápido pero inseguro a los elementos.

Desbordamiento de matriz

Esperemos que tengas este código.

Int A; ent i; para (i=0; yo<=10; i++) { A[i] = 1; }

Aquí hay un bucle para especificado con un error. En algunas versiones anteriores de compiladores, este código se repetiría. El caso es que la variable i se ubicó durante la compilación inmediatamente después de la matriz A. Cuando la matriz superó los límites, el contador se estableció en 1.
Las matrices no son seguras, ya que el trabajo incorrecto con el índice puede conducir al acceso a una porción arbitraria de la memoria (en teoría, los propios compiladores modernos se aseguran de que usted no profundice en la memoria de otra persona).
Si trabaja con matrices, debe asegurarse de que el contador no exceda el tamaño de la matriz y no sea negativo. Para ello, como mínimo,

  • 1. Utilice el tipo size_t para indexar. Te protegerá de valores negativos y siempre será suficiente para una matriz de cualquier tamaño.
  • 2. Recuerda que la matriz comienza desde cero.
  • 3. El último elemento de la matriz tiene un índice (el tamaño de la matriz es 1)
No existen métodos completos para comprobar si hemos superado los límites de la matriz o no. Por lo tanto, o conocemos su tamaño exactamente o lo almacenamos en una variable y lo leemos cuando sea necesario.

Ejemplos

Ahora aquí hay algunos ejemplos típicos de trabajo con matrices.
1. Invierta la matriz.

#incluir #incluir //Esta es una macro. TAMAÑO en el código será reemplazado por 10u #define TAMAÑO 10u void main() ( int A = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9); unsigned i, j; // contadores unsigned half; //medio de la matriz unsigned tmp; //variable temporal para intercambiar valores half = TAMAÑO / 2 //Un contador va de izquierda a derecha, el otro de derecha a izquierda para (i = 0, j = TAMAÑO - 1;< half; i++, j--) { tmp = A[i]; A[i] = A[j]; A[j] = tmp; } for (i = 0; i < SIZE; i++) { printf("%d ", A[i]); } getch(); }

Aquí tienes un diseño que no te resulta familiar.

#definir TAMAÑO 10u

macro. A lo largo del código, el preprocesador reemplazará automáticamente todas las apariciones de TAMAÑO con 10u.
2. Eliminar un elemento seleccionado por el usuario.

#incluir #incluir #define TAMAÑO 10u void main() ( int A = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9); unsigned i; //counter int index; //índice ingresado por el usuario //Matriz de salida para (i = 0; i< SIZE; i++) { printf("(%d)=%d ", i, A[i]); } //Просим пользователя ввести валидный индекс while (1) { printf("\nEnter index of element to delete "); scanf("%d", &index); if (index >0 && índice< SIZE) { break; } } //Копируем следующий элемент массива на место удаляемого //и так до конца for (i = index; i < SIZE-1; i++) { A[i] = A; } //Выводим результат for (i = 0; i < SIZE-1; i++) { printf("(%d)=%d ", i, A[i]); } getch(); }

En este caso, por supuesto, el elemento no se elimina. La matriz sigue teniendo el mismo tamaño que antes. Simplemente sobrescribimos el elemento que se elimina con el siguiente y generamos elementos de TAMAÑO-1.
3. El usuario ingresa valores en la matriz. Después de eso, imprima todos los valores diferentes que ingresó.
Deje que el usuario ingrese un número finito de elementos, digamos 10. Entonces se sabe de antemano que no habrá más de 10 valores diferentes en total. Cada vez que el usuario ingresa un número, revisaremos la matriz y verificaremos. si se introdujo dicho número.

#incluir #incluir #define TAMAÑO 10u void main() ( int A = (0); unsigned i, j; int counter = 1; //cuántos números diferentes se ingresan. Al menos uno. int input; int wasntFound; //marca que el el número ingresado no fue encontrado //Ingrese el primer número. Aún no se ha encontrado printf("0.");< SIZE; i++) { printf("%d. ", i); scanf("%d", &input); wasntFound = 1; //Проверяем, встречалось ли такое число. Если да, //то выставляем флаг и выходим из цикла for (j = 0; j <= counter; j++) { if (input == A[j]) { wasntFound = 0; break; } } //Если флаг был поднят, то заносим число в массив if (wasntFound) { A = input; counter++; } } for (i = 0; i < counter; i++) { printf("%d ", A[i]); } getch(); }

4. El usuario ingresa un número: el número de mediciones (de 2 a 10). Después de esto, ingresa todas las medidas. El programa muestra el valor promedio, la varianza y el error.

#incluir #incluir #incluir #define TAMAÑO 20u void main() ( // Los coeficientes de Student comienzan desde dos dimensiones const float Student = (12.7, 4.3, 3.2, 2.8, 2.6, 2.4, 2.4, 2.3, 2.3); float A; unsigned i; unsigned limit; suma flotante = .0f; float disp; float relError; do (printf("Ingrese el número de mediciones "); scanf("%u", &limit); if (límite > 1 && límite< 11) { break; } } while(1); for (i = 0; i < limit; i++) { printf("#%d: ", i); scanf("%f", &A[i]); sum += A[i]; } mean = sum / (float)limit; sum = .0f; for (i = 0; i < limit; i++) { tmp = A[i] - mean; sum += tmp * tmp; } disp = sum / (float)limit; absError = student * sqrt(sum / (float)(limit - 1)); relError = absError / mean * 100; printf("Mean = %.6f\n", mean); printf("Dispertion = %.6f\n", disp); printf("Abs. Error = %.6f\n", absError); printf("Rel. Error = %.4f%", relError); getch(); }

5. Clasificación de burbujas de matriz

#incluir #incluir #definir TAMAÑO 10 #definir falso 0 #definir verdadero!falso void main() ( float a = (1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 0.0 f); float tmp; unsigned i, j; char flag; //Matriz de salida para (i = 0; i)< SIZE; i++) { printf("%.3f ", a[i]); } printf("\n"); //Пока массив не отсортирован do { flag = false; //Проходим по массиву. Если следующий элемент больше предыдущего, то //меняем их местами и по новой проверяем массив for (i = 1; i < SIZE; i++) { if (a[i] >a) ( tmp = a[i]; a[i] = a; a = tmp; bandera = verdadero; ) ) ) while(bandera == verdadero); // Genera la matriz ordenada para (i = 0; i< SIZE; i++) { printf("%.3f ", a[i]); } getch(); }

6. Mezcle la matriz. Usemos el algoritmo para esto.



¿Te gustó el artículo? Compártelo