0% encontró este documento útil (0 votos)
13 vistas9 páginas

Estructura Vector

El documento aborda la Programación Estructurada y la importancia de evitar el uso de la instrucción GOTO para mantener un código claro y comprensible. Se introduce el concepto de abstracción funcional y de datos, destacando la creación de tipos de datos abstractos (TDA) que permiten a los programadores definir estructuras de datos complejas. Además, se explica el uso de arrays unidimensionales, su indexación y cómo se pueden manipular en Python para almacenar y procesar información.

Cargado por

LOMY1984
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
13 vistas9 páginas

Estructura Vector

El documento aborda la Programación Estructurada y la importancia de evitar el uso de la instrucción GOTO para mantener un código claro y comprensible. Se introduce el concepto de abstracción funcional y de datos, destacando la creación de tipos de datos abstractos (TDA) que permiten a los programadores definir estructuras de datos complejas. Además, se explica el uso de arrays unidimensionales, su indexación y cómo se pueden manipular en Python para almacenar y procesar información.

Cargado por

LOMY1984
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 9

Vector - Array Unidimensional

La Programación Estructurada cumple con el teorema estructural o teorema


fundamental1, el cual afirma que cualquier programa sin importa el tipo de trabajo a
realizar puede ser elaborado utilizando únicamente las tres estructuras básicas
(secuencia, selección, iteración). Evitando la innecesaria y contraproducente instrucción
de transferencia incondicional (GOTO), la cual tiende a producir errores de
programación y conduce al código espagueti difícil de entender, seguirlo y mantenerlo.
En la construcción de programas estructurados es suficiente conocer el objetivo de
una función o procedimiento y cómo es posible comunicarse con ella, evitando saber
cómo se realizan las acciones para alcanzar el objetivo planteado. Esta propiedad es
conocida como abstracción funcional.
Con la llegada de la abstracción del diseño estructurado, la sentencia GOTO quedó en
desuso y el código repetido se simplificó. Su finalidad es utilizada para escribir un
procedimiento una sola vez y cada vez que se quiera utilizar se usa un mensaje
(interfaz) que hace referencia a este. De esta manera se logra simplificar el código y
más comprensible
De la misma manera también es aceptable la abstracción de los datos, los datos
existen para dar soporte a las acciones realizadas por los programas. La importancia de
las computadoras radica fundamentalmente en su capacidad y velocidad para procesar
información. Esta característica les permite realizar actividades que antes sólo las
realizaban los humanos.
Los datos son el soporte de la información y esta a su vez es necesaria para el
procesamiento de datos del programa.
La abstracción de datos puede ser comprendida como el conjunto de varias piezas de
datos empaquetados y con operaciones que afectan a esos datos. Significa en términos
informáticos la combinación de la estructura de datos y las operaciones para manipular a
dicha estructura definiendo así un tipo de dato abstracto (TDA)2.
Un tipo de dato abstracto, tipo de objeto, se comporta como los tipos de datos
primitivos (char, int, float, etc.) incorporados en los lenguajes computacionales, con la
única excepción de que no son parte de la definición del lenguaje sino son especificados
y creado por el programador.
Por lo general la mayoría de los lenguajes de programación brindan unos cuantos
tipos de datos simples, y no es tarea fácil para los programadores crear sus propios
tipos.

1
Böhm y Jacopini, Paper Flow diagrams, Turing Machines and Languages with only Two Formation Rules.
Diagramas de flujo, máquinas de Turing e idiomas con solo dos reglas de formación 1966.
2
Barbara Liskov, TDA propuso su uso en el lenguaje CLU 1975.
Página 1 de 9
Vector - Array Unidimensional
Un tipo de dato informático es un atributo de datos utilizado para indicar al
ordenador sobre la clase de datos a ser manipulado. Se trata de un ente abstracto para
permitir separar los diferentes componentes de un programa, simplificando así su
elaboración, depuración, y posteriores mejoras. Los objetos integran tanto los
procedimientos como las variables y datos referentes al objeto.

Diseño del TDA

Programación del Tipo


Usuario

Especificación Especificación

Valores Operaciones Representación Implementación de


(Sintaxis y Semántica) del tipo de dato las operaciones del
tipo de dato

Como usuario de esa clase no sabrá que ocurre cuando se declara y utiliza el tipo de
dato o como actúa la variable internamente. Como ser la funcionalidad de un tipo de
dato incorporado al compilador, un ejemplo típico es el número flotante el cual se
compone de un (exponente, mantisa “parte decimal”, y un bit de signo) inicializados
adecuadamente. Para prevenir errores, no se permite tener control explícito sobre estos
datos únicamente se manipulan mediante funciones especiales llamadas por el
compilador.

Tipos de datos integrados Operaciones


Números enteros + , - , * , / , % , = , == , != , < , <= , > , >= ,
sizeof , y operaciones con bits
Números de punto flotante + , - , * , / , % , = , == , != , < , <= , > , >= , sizeof

Tabla definida en el libro de Gary J Bronson


Los programadores pueden crear variables con valores cuyo rango está en el conjunto
de valores legales y pueden operar sobre esos valores las operaciones definidas
dependiendo del tipo de dato. Un objeto es simplemente un tipo abstracto de dato
instanciado ocupando espacio en la memoria RAM según su definición y obteniendo una
identidad en el cual comienza su posición en dicha memoria.

Página 2 de 9
Vector - Array Unidimensional
Para poder procesar la información se requiere que ésta se almacene en la memoria
de la computadora de acuerdo con la forma en que los datos se organizan y se clasifican
en:

 Tipos de datos simples.

 Tipos de datos estructurados.

Dato Simple Dato Estructurado

Identificador Identificador

La principal característica de los tipos de datos simples consiste en que ocupan sólo
una casilla de memoria, por lo tanto, una variable simple hace referencia a un único
valor a la vez. En esta clasificación de datos se encuentran: números enteros, reales,
caracteres, booleanos, enumerados y subrangos. Cabe señalar que los dos últimos no
existen en algunos lenguajes de programación.
Por otra parte, los tipos de datos estructurados se caracterizan por el hecho de
poseer un nombre, -identificador de variable estructurada-, y se hace referencia a un
grupo de casillas de memoria. Es decir, un tipo de dato estructurado tiene varios
componentes cada uno de éstos elementos pueden ser un tipo de dato simple o
estructurado. Sin embargo, los componentes básicos del nivel más bajo de cualquier tipo
de datos estructurado son siempre tipos de datos simples.

Tipos de datos complejos, modelando el mundo.

Como vimos anteriormente, los tipos de datos base de Python, nos permiten definir y
por lo tanto modelar objetos de la vida real. Como en el caso de los números enteros,
disponemos de los tipos de datos “int” y sus variantes, los nombres de las personas
podrían ser modelados mediante cadenas de caracteres “string”, etc.

Si bien esto nos da las primeras herramientas para que nuestras aplicaciones sean
capaces de simular una situación del mundo, necesitaremos facilidades para relacionar
estos objetos simples y modelarlos entidades más complejas.

Página 3 de 9
Vector - Array Unidimensional

Habitualmente los sistemas de información son responsables de gestionar


información compleja, donde se establecen diferentes relaciones entre entidades
básicas para formar un modelo de datos capaz de representar la situación deseada de
forma consistente.

Existen diferentes formas de agrupar información, por ejemplo, esta información


puede estar relacionada en forma de listas o registros. Posteriormente, analizaremos
estas posibilidades dejando una sección de relaciones más complejas.

Los arrays unidimensionales o vector o arreglo o alineación determinan un conjunto o


agrupación de variables del mismo tipo cuyo acceso se realiza a través de índices.

Los índices permiten acceder al valor de una posición determinada dentro del vector,
generalmente es numérico, empezando desde cero hasta el número de elementos – 1.
En el caso de un vector de 5 (cinco) elementos el primer elemento sería el de índice 0,
mientras que el último tendría como índice el 4. En algunos ámbitos matemáticos se
comienza a numerar los vectores desde el 1 en lugar de desde el 0.

Existen tres tipos de indexación (base cero, base 1 y base n), el primero su primer
elemento comienza con “0” cero hasta “n-1”, el segundo su primer elemento comienza
con “1” hasta “n”, y el tercero su primer elemento puede ser elegido libremente, en
algunos lenguajes de programación se permite que los índices puedan ser negativos.

Por ejemplo, sí debemos diseñar una aplicación capaz de gestionar los registros
máximos de temperaturas a lo largo de un mes. Hay que utilizar un conjunto de
información para representar las características de todos los elementos del conjunto
que son del mismo tipo, información numérica, con un rango aproximado de -60 a 60
centígrados. Por lo tanto, podemos representar a este conjunto de datos por medio de
un conjunto finito y cuyos elementos son de tipo “int”.

Python, nos brinda arrays por medio de los cuales podremos modelar este conjunto
de datos. Un array es una variable, como las estudiadas con anterioridad, cuya
particularidad es la posibilidad de almacenar más de un dato simultáneamente. Dentro
de este array, cada elemento ocupa una posición determinada. Estas posiciones son
numeradas desde “0 a n-1”, siendo “n” la cantidad total de elementos que nos
permitirán acceder a valores precisos dentro de este array.

Página 4 de 9
Vector - Array Unidimensional

La definición de un array unidimensional de este tipo, también denominado vector,


es extremadamente simple sólo nos bastará colocar a continuación del nombre de la
variable la cantidad de elementos capaz de contener. Para ello utilizaremos la
siguiente sintaxis:
...
temp = []

for i in range(5):
temp.append(0)

for i in range(5):
print(f"Celda[{i}]: ", temp[i])
...

En Python primero se debe crear una referencia, en la memoria RAM, y


posteriormente se debe capturar memoria, en la memoria Montículo, con la cantidad
deseada de espacio a ocupar.

Con esta simple definición habremos creado un array, llamado temp, el cual es capaz
de contener simultáneamente 31 (treinta y un) valores enteros. Nótese que la cantidad
de elementos se coloca encerrada entre corchetes “[ y ]”. La siguiente figura
esquematiza la asignación de memoria utilizada por los vectores de una dimensión.

temp = [0 for i in range(31)]

for i in range(10):

print("Celda[", i,"]: ", temp[i]);

Inicialización de vectores

Al igual que las variables analizadas en secciones anteriores, los vectores pueden
recibir valores iniciales en el momento de la definición. Para tal efecto, podemos
emplear diferentes alternativas de sintaxis:

vector = [0 for i in range(10)]

for i in range(10):

print("Celda[", i,"]: ", vector[i]);

La lista que se encierra entre corchetes “[ y ]” conteniendo los valores con los que se
inicializará el vector, dichos valores deben ser separados por comas. La cantidad de
elementos en la lista de debe ser igual a la dimensión del vector definido. P.e. si
quisiéramos inicializar el contenido de nuestro vector temp escribiríamos:

Página 5 de 9
Vector - Array Unidimensional
...
temp = [15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15 ]

Otra forma distintas


...
temp = [15 for i in range(31)]

Los elementos días del vector de temperatura de un mes temp serán


automáticamente inicializados con el valor de 15 (quince).
vector = []

vector = [0] * 20

print(vector)

Se define una referencia denominada vector, luego se asignan veinte elementos


inicializados con cero, y se imprime el vector resultado.

Utilización del vector

Una vez que el vector ha sido definido comenzaremos a almacenar y extraer


información de ellos, la metodología utilizada para el manejo de elementos de un
vector es similar al de una variable solo es posible observar una particularidad. Dado
que los vectores pueden almacenar varios elementos, es necesario, al momento de
utilizarlos indicar cual es el de nuestro interés. Esto es logrado colocando entre
corchetes “[ y ]” el número de elemento.

Este número de elemento es denominado índice. En Python, los índices comienzan a


numerarse por el número “0” (cero), por lo tanto el primer elemento de nuestro array
es temp[0], mientras que el último, temp[30].

Un vector posee el comportamiento de una variable normal, por ejemplo, para


asignar un valor a un elemento utilizaremos el operador “=”, esta situación es reflejada
en el siguiente ejemplo:
...
temp[23]= -10; /* El valor -10 es asignado al elemento número 24 del vector */
...
De igual modo el elemento de un vector puede ser utilizado dentro de cualquier
expresión, sea esta aritmética o lógica. Debemos recordar que una expresión es un
conjunto de elementos (variables o constantes) relacionados por medio de operadores
del cual podremos extraer un único valor. Por lo tanto, las siguientes expresiones son
correctas:

Página 6 de 9
Vector - Array Unidimensional
...
c= temp[0] + tmp[15] + temp[30];
temp[4]= temp[4] + 10;
temp[4]+= 10; /* Esta sentencia cumple la misma función a la anterior, pero,
expresada de forma compacta gracias a los potentes operadores de
Python.*/
...
Supongamos ahora, que debemos escribir un algoritmo que calcule el promedio de
temperaturas registradas en el vector temp. Nuestro algoritmo debe recorrer el array
desde su primer elemento hasta el último para obtener la suma y luego dividirlo por la
cantidad de días correspondientes, para simplificar el ejemplo, nuestros meses siempre
tendrán 31 días.

Existen varias formas para llegar a este resultado, para ello, utilizaremos las
estructuras de control que analizamos en la sección anterior. Los dos siguientes casos
son dos formas alternativas para llegar al mismo resultado:
CASO 1 CASO 2

... ...
DIAS = 31 DIAS = 31
sumar = 0 sumar = 0
float promedio = 0.0 float promedio= 0.0
temp = [0 for i in range(31)] temp = [0 for i in range(31)]
... ...
i= 0 for i in range(DIAS)):
while i < DIAS: sumar += temp[i]
sumar += temp[i] promedio = sumar / DIAS
i++ …
promedio = sumar / DIAS
...

Si bien los dos casos permiten resolver el problema, el caso 2, lo resuelve de una
forma más compacta y elegante. En ambos casos, utilizamos una variable “i” cuyo
valor evoluciona desde “0 hasta 31”, el valor 31 es utilizado como centinela para
finalizar el ciclo en ambos casos. Mediante esta variable recorreremos el vector en
busca de la suma total. Una vez calculada el algoritmo procede a dividirla por el total
de valores y obtener el promedio.

Página 7 de 9
Vector - Array Unidimensional

Desborde de un vector

Cuando se declara un vector se determina la cantidad de elementos contenida en el


mismo, y para realizar la manipulación del vector se accede a cada elemento por medio
de la indización. En el lenguaje el nombre del array contiene la dirección de la memoria
donde comienza alocarse sus contenidos, cuando se intenta obtener el contenido de una
elemento en particular “vector[2]” se ejecuta la internamente la operación de tomar la
dirección de comienzo y sumarle el tamaño de cada elemento multiplicarlo por el
índice especificado.

vector = [20, 41, 6, 18, 23]

print(vector)
...
if ( vector[2] == 6 )
{
...
}

Supongamos que el array comienza en la dirección “0x435D73EA” al intentar acceder


al tercer elemento del mismo se le suma a dicha posición 4 (cuatro) bytes un int, en
una máquina con procesador de 32 bit, multiplicados por 2 (dos) y se obtiene de esta
manera la cantidad total de bytes que se debe desplazar para acceder al elemento
deseado. En este caso 8 (ocho) bytes y el tercer elemento del vector comienza en la
posición “0x435D73F2”.

Para una facilidad de simulación de la memoria RAM se toma los dos últimos bytes en
hexadecimal y se suman 4 bytes en win32-

Se produce un desbordamiento cuando se intenta acceder a un elemento fuera del rango


especificado en su declaración. En nuestro ejemplo si intentamos acceder a la sexta o más
posición del vector ocurre un desborde, es decir “vector[5]”, debemos recordar que en se
la indización de sus elementos comienza con el valor de “0” (cero) por el propio
algoritmo de acceso a cada elemento sus valores posibles son (0, 1, 2, 3, 4) de los
elementos de nuestro vector.
vector = [20, 41, 6, 18, 23]
print("Recorriendo los elementos")
for celda in vector:
print(celda)

print("Accediendo incorrectamente a un índice del vector")


print(vector[5])

Página 8 de 9
Vector - Array Unidimensional

Al intentar acceder al elemento “vector[5]” se esta invadiendo una posición de


memoria no perteneciente al vector produciendo el error de desbordamiento, en
Python ocurrirá una excepción.

Copia de vectores

Si se desea copiar un vector origen a otro vector destino debemos contemplar


primero que el segundo vector haya sido declarado con el mismo tamaño o superior al
primero y posteriormente podemos utilizar la Array estándar del lenguaje C# y su
método estático “Copy”.

Esta función recibe dos vectores y copia la cantidad de elementos del vector origen
al vector destino. Se detalla el siguiente ejemplo:
vectorOrigen = [20, 41, 6, 18, 23]
vectorDestino = [0 for i in range(10)]
...
vectorDestino = vectorOrigen.copy()
...

Elemento máximo y mínimo de un vector

Cuando se desea obtener el máximo elemento de un vector se asigna a una variable


auxiliar el primer elemento del vector y se realiza el recorrido del vector a partir del
segundo elemento comparándose cada elemento con este valor máximo auxiliar, si la
comparación del elemento es mayor se asigna su contenido a esta variable y cuando
finalice el recorrido esta variable contendrá el mayor valor del vector.

Para obtener el mínimo elemento de un vector se asigna a una variable auxiliar el


primer elemento del vector y se realiza el recorrido del vector a partir del segundo
elemento comparándose cada elemento con este valor mínimo auxiliar, si la
comparación del elemento es menor se asigna su contenido a esta variable y cuando
finalice el recorrido esta variable contendrá el menor valor del vector.
vector = [20, 41, 6, 18, 23]
maximo = vector[0]
for i in range(1, 5):
if vector[i] > maximo:
maximo = vector[i]
print(f"El valor máximo del vector es: {maximo}")
minimo = vector[0]
for i in range(1, 5):
if vector[i] < minimo:
minimo = vector[i]
print(f"El valor mínimo del vector es: {minimo}")

Página 9 de 9

También podría gustarte