Array/es: what changed
Revision 2 to 3. Removed lines have a minus sign; added lines have a plus sign.
| Old | New | Line | |
|---|---|---|---|
| 1 | 1 | Un **array** es un tipo (type) que agrupa un número de [[Variable|variables]] del mismo tipo. Se los llama vectores, arreglos o matrices (unidimensionales). Ejemplos son un array of [[Char/es|char]], un array of [[Integer|integer]], y un array of [[Real|real]]. De hecho, cualquier tipo, incluyendo tipos definidos por el usuario, se pueden usar en un vector. De todos modos, los elementos de un vector son siempre del mismo tipo. No se pueden agrupar en un vector diferentes tipos. Para ese propósito ver [[Record/es|records]]. | |
| 2 | 2 | ||
| 3 | 3 | Los arrays reflejan el concepto matemático de | |
| 4 | 4 | ||
| 5 | 5 | - vectores (una matriz unidimensional) y | |
| 6 | 6 | - matrices (matriz de dos o más dimensiones)) | |
| 7 | 7 | ||
| 8 | 8 | ## Vectores estáticos | |
| 9 | 9 | ||
| 10 | 10 | La declaración funciona de forma similar a la de los tipos simples, pero es necesario agregar el número de elementos a través de un intervalo de índices, así como el tipo de elemento del vector o matriz. | |
| 11 | 11 | ||
| 12 | 12 | ``` pascal | |
| 13 | 13 | program | |
| 14 | 14 | ... | |
| 15 | 15 | var | |
| 16 | 16 | nombredelavariable : array [indiceinicial..indicefinal] of type; | |
| 17 | 17 | begin | |
| 18 | 18 | ... | |
| 19 | 19 | ``` | |
| 20 | 20 | ||
| 21 | 21 | **indiceinicial** debe ser menor o igual a **indicefinal**, y ambos deben resolverse a una constante de enteros, ya sea un valor entero o un valor [[Const/es|const]] que sea un entero. Cualquiera o ambos números pueden ser negativos o cero. | |
| 22 | 22 | ||
| 23 | 23 | ### Vector o matriz de una dimensión | |
| 24 | 24 | ||
| 25 | 25 | Ejemplo de vector unidimensional: | |
| 26 | 26 | ||
| 27 | 27 | ``` pascal | |
| 28 | 28 | type | |
| 29 | 29 | vector_de_enteros = array [1..10] of integer; | |
| 30 | 30 | ||
| 31 | 31 | var | |
| 32 | 32 | Numeros: vector_de_enteros; | |
| 33 | 33 | ``` | |
| 34 | 34 | ||
| 35 | 35 | ### Vectores multidimencionales o matrices | |
| 36 | 36 | ||
| 37 | 37 | Se admiten [[Basic Pascal Tutorial/Chapter 5/Multidimensional arrays/es|Multidimensional arrays]] como \[x..y, z..t\] y así sucesivamente. | |
| 38 | 38 | ||
| 39 | 39 | Ejemplo de matriz: | |
| 40 | 40 | ||
| 41 | 41 | ``` pascal | |
| 42 | 42 | type | |
| 43 | 43 | matriz = array [0..5, 1..3] of extended; | |
| 44 | 44 | ||
| 45 | 45 | var | |
| 46 | 46 | matriz_dos_dimensiones: matriz; | |
| 47 | 47 | ``` | |
| 48 | 48 | ||
| 49 | 49 | ## Vectores dinámicos | |
| 50 | 50 | ||
| 51 | 51 | Si no es posible conocer el número exacto de elementos necesarios del vector o matriz en tiempo de diseño, se puede utilizar el tipo [[Dynamic array/es|dynamic array]]. Una matriz dinámica puede crecer o reducirse en tamaño durante la ejecución del programa. | |
| 52 | 52 | ||
| 53 | 53 | ## Acceso a los elementos | |
| 54 | 54 | ||
| 55 | 55 | Para acceder al elemento de un vector debe indicarse el índice entre corchetes \[\] después del nombre de la variable del tipo array. Luego ese elemento puede utilizarce como una variable común. | |
| 56 | 56 | ||
| 57 | 57 | ``` pascal | |
| 58 | 58 | Var | |
| 59 | 59 | vector : array [1..3] of Integer; | |
| 60 | 60 | matriz : array[1..5,1..5] of Integer; | |
| 61 | 61 | unvalor : Integer; | |
| 62 | 62 | ... | |
| 63 | 63 | begin | |
| 64 | 64 | vector[2] := 4 + 2; | |
| 65 | 65 | matriz[2,3] := 7; | |
| 66 | 66 | ... | |
| 67 | 67 | unvalor := vector[2]; // 6 | |
| 68 | 68 | unvalor := matriz[2,3]; // 7 | |
| 69 | 69 | end. | |
| 70 | 70 | ``` | |
| 71 | 71 | ||
| 72 | 72 | ## Vectores literales | |
| 73 | 73 | ||
| 74 | 74 | Hay dos formatos que se utilizan para vectores o arreglos literales, dependiendo del lugar donde se utilicen. En la sección de declaración de variables, se puede inicializar un vector estático (no es posible hacerlo con [[Dynamic array/es|dynamic arrays]]) con una serie de valores entre *paréntesis*. En un bloque instrucciones es posible crear un vector anónimo con una serie de valores entre *corchetes*. Por ejemplo: | |
| 75 | 75 | ||
| 76 | 76 | ``` pascal | |
| 77 | 77 | Var | |
| 78 | 78 | // inicializar un vector estático de enteros vía vector literal | |
| 79 | 79 | Numeros : array [1..3] of Integer = (1, 2, 3); | |
| 80 | 80 | ||
| 81 | 81 | procedure ImprimirVector(entrada : array of String); | |
| 82 | 82 | var | |
| 83 | 83 | i : integer; | |
| 84 | 84 | begin | |
| 85 | 85 | for i := 0 to length(entrada)-1 do | |
| 86 | 86 | write(entrada[i],' '); | |
| 87 | 87 | writeln; | |
| 88 | 88 | end; | |
| 89 | 89 | ||
| 90 | 90 | begin | |
| 91 | 91 | Writeln( Numeros[2] ); // 2 | |
| 92 | 92 | // crear tres elementos de vector de cadenas anónimas mediante un vector literal | |
| 93 | 93 | ImprimirVector( ['uno', 'dos', 'tres'] ); | |
| 94 | 94 | end. | |
| 95 | 95 | ``` | |
| 96 | 96 | ||
| 97 | 97 | Resultados: | |
| 98 | 98 | ||
| 99 | - | ||
| 99 | + | ```text | |
| 100 | 100 | 2 | |
| 101 | 101 | uno dos tres | |
| 102 | 102 | ``` | |
| 103 | 103 | ||
| 104 | 104 | --- | |
| 105 | 105 | *From the Free Pascal wiki, page "Array/es", as it stood on 2023-01-25 after a change by Kai Burghardt, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).* |
