sábado, 31 de mayo de 2008

unidad VII

UNIDAD VII. ARREGLOS


7.1 ARREGLO UNIDIMENSIONALES
Un arreglo unidimensional es un tipo de datos estructurado que está formado de una colección finita y ordenada de datos del mismo tipo. Es la estructura natural para modelar listas de elementos iguales.
El tipo de acceso a los arreglos unidimensionales es el acceso directo, es decir, podemos acceder a cualquier elemento del arreglo sin tener que consultar a elementos anteriores o posteriores, esto mediante el uso de un índice para cada elemento del arreglo que nos da su posición relativa.
Para implementar arreglos unidimensionales se debe reservar espacio en memoria, y se debe proporcionar la dirección base del arreglo, la cota superior y la inferior.
REPRESENTACION EN MEMORIA
Los arreglos se representan en memoria de la forma siguiente:
x : array[1..5] of integer
Para establecer el rango del arreglo (número total de elementos) que componen el arreglo se utiliza la siguiente formula:
RANGO = Ls - (Li+1)
donde:
ls = Límite superior del arreglo
li = Límite inferior del arreglo
Para calcular la dirección de memoria de un elemento dentro de un arreglo se usa la siguiente formula:
A[i] = base(A) + [(i-li) * w]
donde :
A = Identificador único del arreglo
i = Indice del elemento
li = Límite inferior
w = Número de bytes tipo componente


Si el arreglo en el cual estamos trabajando tiene un índice numerativo utilizaremos las siguientes fórmulas:
RANGO = ord (ls) - (ord (li)+1)
A[i] = base (A) + [ord (i) - ord (li) * w]

7.1.1 CONCEPTOS BÁSICOS

Un arreglo unidimensional tiene una sola dimensión. En C#, la dimensión se maneja por medio de un par de corchetes.
A los arreglos de una dimensión también se les llama listas.



7.1.2 OPERACIONES ,APLICACIONES
OPERACIONES
Para manejar un arreglo, las operaciones a efectuarse son:
Declaración del arreglo,
Creación del arreglo,
Inicialización de de los elementos del arreglo, y
Acceso a los elementos del arreglo.
A continuación describiremos cada una de estas operaciones, en C#.
Declaración.
La declaración de un arreglo unidimensional consiste en establecer las características del arreglo y sus elementos, por medio de la siguiente sintaxis:
[ ] <> ;
Donde:
Tipo. indica el tipo correspondiente a los elementos del arreglo ,
Identificador. es el nombre del arreglo, y
el par de corchetes, [ ], representa la dimensión del arreglo y encierra un número entero que corresponde al número de elementos del arreglo.
Ejemplos:
int [ ] a ;
float [ ] distancia ;
Artículo [ ] art = new Artículo[ 3];
Observe que, en la declaración, el espacio entre los corchetes está vacío. Esto se debe a que, durante dicha operación, no se reserva espacio en la memoria.
Creación.
La creación de un arreglo unidimensional consiste en reservar espacio de memoria para todos sus elementos, utilizando la siguiente sintaxis:
<> = new [ tamaño ] ;
Donde:
New. es el operador para gestionar espacio de memoria, en tiempo de ejecución,
Tamaño. es un número entero que representa el número de elementos del arreglo.

Ejemplos:
a = new int [10] ; // Se crea el arreglo a , con 10 elementos de tipo entero.
distancia = new float[ 5] ; // Se crea el arreglo distancia , con 5 elementos de punto flotante y precisión sencilla .Artículo [] art = new Artículo[3];
Artículo [ ] art = new Artículo[ 3]; // Se crean 3 referencias a objetos de la clase Artículo
art[0]= new Artículo(); // Se crea el primer objeto del arreglo art
art[1]= new Artículo(); // Se crea el segundo objeto del arreglo art
art[2]= new Artículo(); // Se crea el tercer objeto del arreglo art

Las dos primeras operaciones de declaración y creación anteriores se pueden agrupar en una sola instrucción, como se muestra enseguida:
int [ ] a = new int [10] ;
float [ ] distancia = new float[5] ;

Inicialización.
Un arreglo es un objeto que,cuando es creado por el compilador, se le asignan automáticamente valores iniciales predeterminados a cada uno de sus elementos, de acuerdo a los siguientes criterios:
Si el tipo del arreglo es numérico, a sus elementos se les asigna el valor cero.
Si el tipo del arreglo es char, a sus elementos se les asigna el valor '\u0000'.
Si el tipo del arreglo es bool, a sus elementos se les asigna el valor false.
Si el tipo del arreglo es una clase, a sus elementos se les asigna el valor null.
Cuando se requiere asignar valores iniciales diferentes de los predeterminados, es posible agrupar las operaciones de declaración, creación e inicialización en una sola instrucción, por ejemplo:
int [ ] a = { 1, 0,4,-6, 2,9, 23,455, 90,35 };
float [ ] distancia = { 2.50F, 286.45F, 46.75F, 30.62F, 93.00F };
string [ ] pato = { "Hugo", "Paco", "Luís" };

Acceso.
Se puede acceder a los valores de los elementos de un arreglo a través del nombre del arreglo y un subíndice. El subíndice debe escribirse entre corchetes y representa la posición del elemento en el arreglo. Así, podemos referirnos a un elemento del arreglo escribiendo el nombre del arreglo y el subíndice del elemento entre corchetes. Los valores de los subíndices empiezan en cero para el primer elemento, hasta el tamaño del arreglo menos uno.
Ejemplo:
float [ ] distancia = new float[5] ; // Crea el arreglo distancia con 5 elementos. float x = 25F, y = 10F ; // Crea dos variables de punto flotante y precisión sencilla. distancia[0] = x + y ; // El valor asignado al primer elemento es 35. distancia[1] = ++distancia[0] ; // Asigna 36 al segundo elemento. distancia[2] = distancia[1] - distancia[0] + 4 ; // Asigna 5 al tercer elemento. distancia[3] = distancia[2]-- ; // Asigna 5 al cuarto elemento
// y disminuye en 1 el valor del tercero.
distancia[4] = distancia[3] * distancia[2] ; // Asigna 20 al quinto elemento. y = distancia[4] ; // Asigna a y el valor almacenado en el quinto elemento.

APLICACIONEAS
Listas.
Resolvamos el problema de manejar dos listas: una con los nombres de un grupo de alumnos y otra con una calificación para cada uno de los alumnos. Primero se deberán leer los nombres de los alumnos y la calificación que corresponde a cada uno de ellos y después habrá que desplegar dos columnas: una con los nombres de los alumnos y la otra con sus respectivas calificaciones.


La lectura debe lucir de manera similar a la siguiente:
Número de alumnos: 30
Nombre [0] : Calificación[0] :
Nombre [1] : Calificación[1] :
Nombre [2] : Calificación[2] :
......
Nombre [29] : Calificación[29] :
El despliegue en el monitor luciría así:
No.
Nombre
Calif.
1
Hugo
100
2
Paco
90
3
Luís
95
...

...
30
Donald
70
El siguiente código corresponde a un programa que resuelve el problema.
// Lista.cs : Lee una lista de nombres y calificaciones correspondientes a un grupo de
// alumnos de una materia.
using System;using C = System.Console;
public class Lista{
public static void Main()
{
int nAlumnos;
C.Write("Número de alumnos: ");
nAlumnos = Convert.ToInt32(C.ReadLine());
string [ ] alumnos = new string[nAlumnos]; //Crea el arreglo de
//alumnos.
int [ ] calif = new int [nAlumnos]; // Crea el arreglo de calificaciones.
// Lee los elementos de los dos arreglos.
for(int i = 0; i < nAlumnos ; i++){
C.Write("Nombre del alumno [" + i + "] : ");alumnos[i] = C.ReadLine( );
C.Write("Calificación [" + i + "] : ");calif[i] = Convert.ToInt32(C.ReadLine( ));
}
// Despliega los valores de los dos arreglos.
C.WriteLine("No. Nombre Calif.");
for(int i = 0 ; i < nAlumnos ; i++){
C.Write(" " + (i+1) + ".- " + alumnos[ i] );C.WriteLine(" " + calif[i] );
}
}
}

Vectores.
Otra de las aplicaciones de los arreglos es el manejo de vectores. En Física, los vectores sirven para representar velocidades, aceleraciones, etc.
Podemos representar a un vector como un segmento de recta dirigida que tiene magnitud, orientación y sentido.
En un espacio tridimensional, un vector puede expresarse por medio de tres componentes sobre los ejes cartesianos. Cada componente puede, a su vez, expresarse en función de los vectores unitarios i, j, k ,que se ubican en los ejes x, y, z, respectivamente.
Por ejemplo , un vector v1 puede representarse en función de sus componentes como:
v1 = 20i + 15j + 35k
Si tenemos otro vector,
v2 = -5i + 40j + 25k

La suma de los dos vectores sería:
s = v1+v2 = (20-5)i +(15+40)j+(35+25)k
s = 15i + 55j + 60k
Un segmento del programa para este ejemplo sería:
double v1[ ] = new double[3];double v2[ ] = new double[3];double s[ ] = new double[3];
v1[0] = 20;v1[1] = 15;v1[2] = 35;
v2[0] = -5;v2[1] = 40;v2[2] = 25;
for(int i=0; i < 3 ; i++){
s[ i ] = v1[ i ] + v2[ i ] ;
}
7.2 ARREGLO BIDIMENSIONALES

Este tipo de arreglos al igual que los anteriores es un tipo de dato estructurado, finito ordenado y homogéneo. El acceso a ellos también es en forma directa por medio de un par de índices.
Los arreglos bidimensionales se usan para representar datos que pueden verse como una tabla con filas y columnas. La primera dimensión del arreglo representa las columnas, cada elemento contiene un valor y cada dimensión representa una relación
La representación en memoria se realiza de dos formas : almacenamiento por columnas o por renglones.
Para determinar el número total de elementos en un arreglo bidimensional usaremos las siguientes fórmulas:
RANGO DE RENGLONES (R1) = Ls1 - (Li1+1)
RANGO DE COLUMNAS (R2) = Ls2 - (Li2+1)
No. TOTAL DE COMPONENTES = R1 * R2
REPRESENTACION EN MEMORIA POR COLUMNAS
x : array [1..5,1..7] of integer
Para calcular la dirección de memoria de un elemento se usan la siguiente formula:
A[i,j] = base (A) + [((j - li2) R1 + (i + li1))*w]
REPRESENTACION EN MEMORIA POR RENGLONES
x : array [1..5,1..7] of integer
Para calcular la dirección de memoria de un elemento se usan la siguiente formula:
A[i,j] = base (A) + [((i - li1) R2 + (j + li2))*w]
donde:
i = Indice del renglón a calcular
j = Indice de la columna a calcular
li1 = Límite inferior de renglones
li2 = Límite inferior de columnas
w = Número de bytes tipo componente



7.3 CONCEPTOS BÁSICOS

Un arreglo bidimensional tiene dos dimensiones y es un caso particular de los arreglos multidimensionales. En C#, las dimensiones se manejan por medio de un par de corchetes, dentro de los que se escriben, separados por comas, los valores de las dos dimensiones.



7.4 OPERACIONES

Para manejar un arreglo, las operaciones a efectuarse son:

Declaración del arreglo,
Creación del arreglo,
Inicialización de de los elementos del arreglo, y
Acceso a los elementos del arreglo.

A continuación describiremos cada una de estas operaciones, en C#.

Declaración.
La declaración de un arreglo consiste en establecer las características del arreglo y sus elementos, por medio de la siguiente sintaxis:
[ , ] <> ;
Donde:
tipo indica el tipo correspondiente a los elementos del arreglo ,
identificador es el nombre del arreglo, y
el par de corchetes y la coma, [ , ], representan las dimensiones del arreglo y encierra dos números enteros, cuyo producto corresponde al número de elementos del arreglo.
Ejemplos:
double [ , ] matriz ;
int [ , ] ubicación ;
Rama [ , ] árbol; // Rama es una clase.
Observe que, en la declaración, el espacio entre los corchetes está vacío. Esto se debe a que, durante dicha operación, no se reserva espacio en la memoria.

Creación.
La creación de un arreglo bidimensional consiste en reservar espacio en la memoria para todos sus elementos, utilizando la siguiente sintaxis:
<> = new [ dim1, dim2 ] ;
Donde:
new es el operador para gestionar espacio de memoria, en tiempo de ejecución,
dim1 y dim2 son valores enteros que representan las dimensioes del arreglo.
El tamaño del arreglo es el resultado de multiplicar los valores de las dimensiones y representa el número de elementos del arreglo.
Ejemplos:
matriz = new double [2, 3] ; // Se crea el arreglo matriz, con 6 elementos de tipo
//punto flotante y precición doble .
ubicación = new int[ 4,2] ; // Se crea el arreglo ubicación, con 8 elementos de
//tipo entero de 32 bits .
árbol = new Rama[5,2] ; // Se crea el arreglo arbol, con 10 objetos
//de la clase Rama.
Las operaciones de declaración y creación anteriores se pueden agrupar en una sola instrucción, como se muestra enseguida:
double [ , ] matriz = new double [2,3] ;
int [ , ] ubicación = new int[4, 2] ;
Rama [ , ] alumno = new Rama[5,2] ;


Inicialización.
Un arreglo es un objeto que,cuando es creado por el compilador, se le asignan automáticamente valores iniciales predeterminados a cada uno de sus elementos, de acuerdo a los siguientes criterios:
Si el tipo del arreglo es numérico, a sus elementos se les asigna el valor cero.
Si el tipo del arreglo es char, a sus elementos se les asigna el valor '\u0000'.
Si el tipo del arreglo es bool, a sus elementos se les asigna el valor false.
Si el tipo del arreglo es una clase, a sus elementos se les asigna el valor null.
Cuando se requiere asignar valores iniciales diferentes de los predeterminados, es posible agrupar las operaciones de declaración, creación e inicialización en una sola instrucción, por ejemplo:

double [ , ] matriz = { {1.5, 0, 4, -6.5, 2 } , {2.3, 9, 3.5, 4.8, 6.2} };
int [ , ] ubicación = { {2, 4} , {6, 8} , {9, 10}, {5 , 1}};
string [ , ] funcionario = { {"Hugo", "jefe"} ,
{ "Paco", "operador "},
{ "Luís","ayudante"} };

Acceso.
Se puede acceder a los valores de los elementos de un arreglo bidimensional a través del nombre del arreglo y dos subíndices. Los subíndices deben escribirse entre corchetes y representa la posición del elemento en el arreglo. Así, podemos referirnos a un elemento del arreglo escribiendo el nombre del arreglo y los subíndices del elemento entre corchetes. Los valores de los subíndices empiezan en cero para el primer elemento, hasta el tamaño del arreglo menos uno.
Ejemplo:
int [ , ] posición = new int[5, 10] ; // Crea el arreglo posición , con 50 elementos de tipo entero.
int x;posición[ 3, 5] = 3 ;
x = posición[ 3, 5] ;



7.5 APLICACIONES


Matrices.
Una matriz es un arreglo rectangular de dos dimensiones, donde el acomodo de los elementos está dispuesto en renglones y columnas.
Ejemplo 1:
Se debe controlar la ubicación de los asistentes a una sala de conferencias por medio de un gafete que tiene escrito el nombre del asistente, la fila y la columna donde se ubica su asiento.
El siguiente segmento de código muestra la solución con arreglos bidimensionales.
string [ , ] asistente = new string[10,12] ;
// Inicializa los valores de los nombres con cadenas vacías.
for(int i=0 ; i < 10 ; i++ ) // Controla la fila.
for(int j=0 ; j < 12 ; j++ ) // Controla la columna.
asistente[ i , j ] = " " ;
// Captura los nombres de todos los asistentes y les asigna sus asientos,
// en el orden en que van llegando.
for(int i=0 ; i < 10 ; i++ ) // Controla la fila.
for(int j=0 ; j < 12 ; j++ ) // Controla la columna.
asistente[ i , j ] = System.Console.ReadLine( );
// Despliega los nombres de todos los asistentes.
for(int i=0 ; i < 10 ; i++ ) // Controla la fila.
for(int j=0 ; j < 12 ; j++ ) // Controla la columna.
System.Console.WriteLine( asistente[ i , j ] );


Ejemplo 2 :
Dadas la matriz A :
10
8
29
15
62
43
16
13
21
78
57
25
30
44
17
y la matriz B :
20
66
31
42
50
92
85
74
69
45
35
61
15
54
12
Elaborar un programa en C# para obtener la suma de ambas matrices:
S = A + B

// SumMatrices.cs : Suma dos matrices de 3 renglones y 5 columnas.

using System;
class Matriz{ public static void Main( ) { double [ , ] A = new double [3,5] ; double [ , ] B = new double [3, 5] ; double [ , ] S = new double [3, 5] ; int i, j ; // Lectura de valores para los elementos de A. for( i = 0 ; i < 3 ; i++ ) for( j = 0 ; j < 5 ; j++) A[ i , j ] = Convert.ToDouble(Console.ReadLine( ));
// Lectura de valores para los elementos de B. for( i = 0 ; i < 3 ; i++ ) for( j = 0 ; j < 5 ; j++) B[ i , j ] = Convert.ToDouble(Console.ReadLine( )) ;

// Suma y despliegue de la matriz resultado. for( i = 0 ; i < 3 ; i++ ) { for( j = 0 ; j < 5 ; j++) { S[ i , j ] = A[ i , j ] + B[ i , j ] ; Console.Write(" " + S[ i , j ] ) ; } Console.WriteLine( ) ; } }
}


7.6 REGISTROS


Los registros del procesador se emplean para controlar instrucciones en ejecución, manejar direccionamiento de memoria y proporcionar capacidad aritmética. Los registros son espacios físicos dentro del microprocesador con capacidad de 4 bits hasta 64 bits dependiendo del microprocesador que se emplee. Los registros son direccionables por medio de una viñeta, que es una dirección de memoria. Los bits, por conveniencia, se numeran de derecha a izquierda (15,14,13…. 3,2,1,0), los registros están divididos en seis grupos los cuales tienen un fin especifico. Los registros se dividen en:

Registros de segmento
Registros de apuntadores de instrucciones
Registros apuntadores
Registros de propósitos generales
Registro índice
Registro de bandera.

REGISTROS DE SEGMENTO.
Un registro de segmento se utiliza para alinear en un limite de párrafo o dicho de otra forma codifica la dirección de inicio de cada segmento y su dirección en un registro de segmento supone cuatro bits 0 a su derecha. Un registro de segmento tiene 16 bits de longitud y facilita un área de memoria para direccionamientos conocidos como el segmento actual. Los registros de segmento son:

Registro CS
Registro DS
Registro SS
Registro ES
Registro FS y GS

Registro CS.
El DOS almacena la dirección inicial del segmento de código de un programa en el registro CS. Esta dirección de segmento, mas un valor de desplazamiento en el registro de apuntado de instrucción (IP), indica la dirección de una instrucción que es buscada para sí ejecución. Para propósito de programación normal, no e necesita referenciar el registro CS.

Registro DS.

La dirección inicial de un segmento de datos de programa es almacenada en el registro DS. En términos sencillos, esta dirección, mas un valor de desplazamiento en una instrucción, genera una referencia a la localidad de un bytes especifico en el segmento de datos.

Registro SS.
El registro SS permite la colocación en memoria de una pila, para almacenamiento temporal de direcciones y datos. El DOS almacena la dirección de inicio del segmento de pila de un programa en el registro SS. Esta dirección de segmento, más un valor de desplazamiento en el registro del apuntador de la pila (SP), indica la palabra actual en la pila que está siendo direccionada. Para propósitos de programación normal, no se necesita referenciar el registro SS.

Registro ES
Algunas operaciones con cadenas de caracteres (datos de caracteres) utilizan el registro esta de segmento para manejar el direccionamiento de memoria. En este contexto, el registro ES esta asociado con el registro DI (índice). Un programa que requiere el uso del registro ES puede inicializarlo con una dirección apropiada.
Registros FS y GS.
Son registros extra de segmento en los procesadores 80386y posteriores a estos procesadores.

REGISTRO APUNTADOR DE INSTRUCCIONES (IP)
El registro apuntador de instrucciones (IP) de 16 bits contiene el desplazamiento de dirección de la siguiente instrucción que se ejecuta. El registro IP esta asociado con el registro CS en el sentido de que el IP indica la instrucción actual dentro del segmento de código que se esta ejecutando actualmente.En el ejemplo siguiente, el registro CS contiene 25A4[0]H y el IP contiene 412H. Para encontrar la siguiente instrucción que será ejecutada el procesados combina las direcciones en el CS y el IP así:Segmento de dirección en el registro CS: 25A40H Desplazamiento de dirección en el registro IP: + 412HDirección de la siguiente instrucción: 25E52H

REGISTROS APUNTADORES.

Los registros apuntadores están asociados con el registro SS y permiten al procesador accesar datos en el segmento de pila los registros apuntadores son dos:
El registro SP
El registro BP

Registro SP.
El apuntador de pila IP de 16 bits esta asociado con el registro SS y proporciona un valor de desplazamiento que se refiere a la palabra actual que esta siendo procesada en la pila.El ejemplo siguiente el registro SS contiene la dirección de segmento 27B3[0]H y el SP el desplazamiento 312H Para encontrar la palabra actual que esta siendo procesada en la pila el microprocesador combina las direcciones en el SS y el PP:Dirección de segmento en el registro SS: 27B30HDesplazamiento en el registro SP: + 312HDirección en la Pila: 27E42H
27B3[0]H 312HDirección del segmento SS Desplazamiento del SP

Registro BP.

El registro BP de 16 bits facilita la referencia de parámetros, los cuales son datos y direcciones transmitidos vía lapida.

REGISTROS DE PROPÓSITOS GENERALES.
Los registros de propósitos generales AX, BX, CX y DX son los caballos de batalla o las herramientas del sistema. Son los únicos en el sentido de que se puede direccionarlos como una palabra o como una parte de un byte. El ultimo byte de la izquierda es la parte "alta", y el ultimo byte de la derecha es la parte "baja" por ejemplo, el registro CX consta de una parte CH (alta) y una parte CL (baja), y usted puede referirse a cualquier parte por si nombre. Ñas instrucciones siguientes mueven ceros a los registros CX, CH y CL respectivamente.
Mov CX, 00Mov CH, 00Mov CL, 00
Los procesadores 80386 y posteriores permiten el uso de todos registros de propósito general, mas versiones de 32 bits; EAX, EBX y EDCX.

Registros AX.
El registro AX, el acumulador principal, es utilizado para operaciones que implican entrada/salida y la mayor parte de la aritmética. Por ejemplo, las instrucciones para multiplicar, dividir y traducir suponen el uso del AX. También, algunas operaciones generan código más eficientes si se refiere al AX en lugar de los otros registros.

Registro BX.
El BX es conocido como el registro base ya que es el único registro de propósitos generales que pueden ser unos índices para direccionamiento indexado. También es común emplear al BX para cálculos.

Registro CX.
El CX es conocido como el registro contador. Puede contener un valor para controlar el número de veces que un ciclo se repite o un valor para corrimiento de bits, hacia la derecha o hacia la izquierda. El CX también es usado para muchos cálculos.

Registro DX.
El DX es conocido como el registro de datos. Algunas operaciones de entrada/salida requieren su uso, y las operaciones de multiplicación y división con cifras grandes suponen al DX y al AX trabajando juntos. Puede usar los registros de propósitos para suma y resta de cifras de 8, 16, 32 bits.

REGISTRO ÍNDICE.
Los registros SI y DI están disponibles para direccionamientos indexados y para sumas y restas. Que son la operaciones de punta.

Registro SI
El registro índice de 16 bits es requerido por algunas operaciones con cadenas (de caracteres). En este contexto, el SI está asociado con el registro DS. Los procesadores 80386 y posteriores permiten el uso de un registro ampliado a 32 bits, el ESI.

Registro DI.
El registro índice destino también es requerido por algunas operaciones con cadenas de caracteres. En este contexto, el Di está asociado con el registro ES. Los procesadores 80386 y posteriores permiten el uso de un registro ampliado a 32 bits, el EDI.

REGISTRO DE BANDERA.
Los registros de banderas sirven parar indicar el estado actual de la maquina y el resultado del procesamiento, Cuando algunas instrucciones piden comparaciones o cálculos aritméticos cambian el estado de las banderas.Las banderas están en el registro de banderas en las siguientes posiciones:bits 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1

Bandera

Las banderas mas comunes son las siguientes:
OF (Over flow flag, desbordamiento).
Indica el desbordamiento de un bit de orden alto (mas a la izquierda) después de una operación aritmética.
DF (Direction flag, Direccion).
Designa la dirección hacia la izquierda o hacia la derecha para mover o comparar cadenas de caracteres.
IF (Interruption flag, Interrupcion).
Indica que una interrupción externa, como la entrada desde el teclado sea procesada o ignorada.
TF (Trap flag, Trampa).
Examina el efecto de una instrucción sobre los registros y la memoria. Los programas depuradores como DEBUG, activan esta bandera de manera que pueda avanzar en la ejecución de una sola interrupción a un tiempo.
SF (Sign flag, Signo).
Contiene el signo resultante de una operación aritmética (0=positivo y 1= negativo).ZF (Zero flag, Zero).
Indica el resultado de una operación aritmética o de comparación (0= resultado diferente de cero y 1=resultado igual a cero).
AF (Auxiliary carry flag, Acarreo auxiliar).
Contiene un acarreo externo del bit 3 en un dato de 8 bits, para aritmética especializada
PF (Parity flag, Paridad).
Indica paridad par o impar de una operación en datos de ocho bits de bajo orden (mas a la derecha).
CF (Carry flag, Acarreo).
Contiene el acarreo de orden mas alto (mas a la izquierda) después de una operación aritmética; también lleva el contenido del ultimo bit en una operación de corrimiento o rotación.


7.7 ARCHIVOS

Un archivo informático es un conjunto de información que se almacena en algún medio de escritura que permita ser leído o accedido por una computadora. Un archivo es identificado por un nombre y la descripción de la carpeta o directorio que lo contiene. Los archivos informáticos se llaman así porque son los equivalentes digitales de los archivos en tarjetas, papel o microfichas del entorno de oficina tradicional. Los archivos informáticos facilitan una manera de organizar los recursos usados para almacenar permanentemente información dentro de un computador.


CONTENIDO DE LOS ARCHIVOS

En lo que concierne al sistema operativo, un archivo es, en la mayoría de los casos, simplemente un flujo unidimensional de bytes (números enteros en el intervalo de 0 a 255), que es tratado por el sistema operativo como una única unidad lógica. Un archivo de datos informático normalmente tiene un tamaño, que generalmente se expresa en bytes; en todos los sistemas operativos modernos, el tamaño puede ser cualquier número entero no negativo de bytes hasta un máximo dependiente del sistema. Depende del software que se ejecuta en la computadora el interpretar esta simplísima estructura básica como por ejemplo un programa, un texto o una imagen, basándose en su nombre y contenido. Los tipos especiales de archivos, como los nodos de dispositivo que representan simbólicamente partes del hardware, no consisten en un flujo de bytes y no tienen tamaño de archivo.
La información de un archivo informático normalmente consiste de paquetes más pequeños de información (a menudo llamados registros o líneas) que son individualmente diferentes pero que comparten algún rasgo en común. Por ejemplo, un archivo de nóminas puede contener información sobre todos los empleados de una empresa y los detalles de su nómina; cada registro del archivo de nóminas se refiere únicamente a un empleado, y todos los registros tienen la característica común de estar relacionados con las nóminas-esto es muy similar a colocar toda la información sobre nóminas en un archivador concreto en una oficina que no tenga ninguna computadora. Un archivo de texto puede contener líneas de texto, correspondientes a líneas impresas en una hoja de papel.
La manera en que se agrupa la información en un archivo depende completamente de la persona que diseñe el archivo. Esto ha conducido a una plétora de estructuras de archivo más o menos estandarizadas para todos los propósitos imaginables, desde los más simples a los más complejos. La mayoría de los archivos informáticos son usados por programas de computadora. Estos programas crean, modifican y borran archivos para su propio uso bajo demanda. Los programadores que crean los programas deciden qué archivos necesitan, cómo se van a usar, y (a menudo) sus nombres.
En algunos casos, los programas de computadora manipulan los archivos que se hacen visibles al usuario de la computadora. Por ejemplo, en un programa de procesamiento de texto, el usuario manipula archivos-documento a los que él mismo da nombre. El contenido del archivo-documento está organizado de una manera que el programa de procesamiento de texto entiende, pero el usuario elige el nombre y la ubicación del archivo, y proporciona la información (como palabras y texto) que se almacenará en el archivo.
Muchas aplicaciones empaquetan todos sus archivos de datos en un único archivo, usando marcadores internos para discernir los diferentes tipo de información que contienen. Los archivos de datos usados por juegos como Doom y Quake son ejemplos de esto.
Los archivos de una computadora se pueden crear, mover, modificar, aumentar, reducir y borrar. En la mayoría de los casos, los programas de computadora que se ejecutan en la computadora se encargan de estas operaciones, pero el usuario de una computadora también puede manipular los archivos si es necesario. Por ejemplo, los archivos de Microsoft Office Word son normalmente creados y modificados por el programa Microsoft Word en respuesta a las órdenes del usuario, pero el usuario también puede mover, renombrar o borrar estos archivos directamente usando un programa gestor de archivos como Windows Explorer (en computadoras con sistema operativo Windows).


IDENTIFICACIÓN Y ORGANIZACIÓN DE ARCHIVOS

Los archivos y carpetas se organizan jerárquicamente. En los sistemas informáticos modernos, los archivos siempre tienen nombres. Los archivos se ubican en directorios. El nombre de un archivo debe ser único en ese directorio. En otras palabras, no puede haber dos archivos con el mismo nombre en el mismo directorio.
El nombre de un archivo y la ruta al directorio del archivo lo identifica de manera unívoca entre todos los demás archivos del sistema informático -no puede haber dos archivos con el mismo nombre y ruta-. El aspecto del nombre depende del tipo de sistema informático que se use. Las primeras computadoras sólo permitían unas pocas letras o dígitos en el nombre de un archivo, pero las computadoras modernas permiten nombres largos que contengan casi cualquier combinación de letras unicode y dígitos unicode, haciendo más fácil entender el propósito de un archivo de un vistazo. Algunos sistemas informáticos permiten nombres de archivo que contengan espacios; otros no. La distinción entre mayúsculas y minúsculas en los nombres de archivo está determinada por el sistemas de archivos. Los sistemas de archivos Unix distinguen normalmente entre mayúsculas y minúsculas, y permiten a las aplicaciones a nivel de usuario crear archivos cuyos nombres difieran solamente en si los caracteres están en mayúsculas o minúsculas. Microsoft Windows reconoce varios sistemas de archivos, cada uno con diferentes políticas en cuanto a la distinción entre mayúsculas y minúsculas. El popular antiguo sistema de archivos FAT puede tener varios archivos cuyos nombres difieran únicamente en las mayúsculas y minúsculas si el usuario utiliza un editor de discos para editar los nombres de archivo en las entradas de directorio. Las aplicaciones de usuario, sin embargo, normalmente no permitirán al usuario crear varios archivos con el mismo nombre pero con diferentes letras en mayúsculas y minúsculas.
La mayoría de las computadoras organizan los archivos en jerarquías llamadas carpetas, directorios o catálogos. (El concepto es el mismo independientemente de la terminología usada.) Cada carpeta puede contener un número arbitrario de archivos, y también puede contener otras carpetas. Las otras carpetas pueden contener todavía más archivos y carpetas, y así sucesivamente, construyéndose un estructura en árbol en la que una «carpeta raíz» (el nombre varía de una computadora a otra) puede contener cualquier número de niveles de otras carpetas y archivos. A las carpetas se les puede dar nombre exactamente igual que a los archivos (excepto para la carpeta raíz, que a menudo no tiene nombre). El uso de carpetas hace más fácil organizar los archivos de una manera lógica.
Cuando una computadora permite el uso de carpetas, cada archivo y carpeta no sólo tiene un nombre propio, sino también una ruta, que identifica la carpeta o carpetas en las que reside un archivo o carpeta. En la ruta, se emplea algún tipo de carácter especial -como una barra- para separar los nombres de los archivos y carpetas. Por ejemplo, en la ilustración mostrada en este artículo, la ruta /Payroll/Salaries/Managers identifica unívocamente un archivo llamado Managers que está en una carpeta llamada Salaries que a su vez está contenida en una carpeta llamada Payroll. En este ejemplo, los nombres de las carpetas y archivos están separados por barras; la superior o carpeta raíz no tiene nombre, y por ello la ruta comienza con una barra (si la carpeta raíz tuviera nombre, precedería a esta primera barra).
Muchos (pero no todos) sistemas informáticos usan extensiones en los nombres de archivo para ayudar a identificar qué contienen. En computadoras Windows, las extensiones consisten en un punto al final del nombre del archivo, seguido de unas pocas letras para identificar el tipo de archivo. Una extensión .txt identifica un archivo de texto; la extensión .doc identifica cualquier tipo de documento o documentación, comúnmente en el formato de archivo de Microsoft Office Word; etc. Incluso cuando se utilizan extensiones en un sistema informático, el grado con el que un sistema informático los reconoce y trata puede variar; en algunos sistemas son obligatorios, mientras que en otros sistemas se ignoran completamente si están presentes.

PROTECCIÓN DE ARCHIVOS

Muchos sistemas informáticos modernos proporcionan métodos para proteger los archivos frente a daños accidentales o intencionados. Las computadoras que permiten varios usuarios implementan permisos sobre archivos para controlar quién puede o no modificar, borrar o crear archivos y carpetas. A un usuario dado se le puede conceder solamente permiso para modificar un archivo o carpeta, pero no para borrarlo; o a un usuario se le puede conceder permiso para crear archivos o carpetas, pero no para borrarlos. Los permisos también se pueden usar para permitir que solamente ciertos usuarios vean el contenido de un archivo o carpeta. Los permisos protegen de la manipulación no autorizada o destrucción de la información de los archivos, y mantienen la información privada confidencial impidiendo que los usuarios no autorizados vean ciertos archivos.
Otro mecanismo de protección implementado en muchas computadoras es una marca de sólo lectura. Cuando esta marca está activada en un archivo (lo que puede ser realizado por un programa de computadora o por un usuario humano), el archivo puede ser examinado, pero no puede ser modificado. Esta marca es útil para información crítica que no debe ser modificada o borrada, como archivos especiales que son usados solamente por partes internas del sistema informático. Algunos sistemas incluyen también una marca oculta para hacer que ciertos archivos sean invisibles; esta marca la usa el sistema informático para ocultar archivos de sistema esenciales que los usuarios nunca deben modificar.

PROTECCIÓN LEGAL DE DATOS DE ARCHIVOS

La protección de datos personales y velar por la privacidad de la información es un tema de suma importancia a nivel de empresas y de países. El mal uso de información personal puede constituir un delito.
Algunos países han creado organismos que se encargan del tema y de legislar respecto del acceso, uso y confidencialidad de los datos.

ALMACENAMIENTO DE ARCHIVOS

En términos físicos, la mayoría de los archivos informáticos se almacenan en discos duros -discos magnéticos que giran dentro de una computadora que pueden registrar información indefinidamente-. Los discos duros permiten acceso casi instantáneo a los archivos informáticos.
En computadoras muy grandes, algunos archivos informáticos pueden almacenarse en cinta magnética. Los archivos también se pueden almacenar en otros medios en algunos casos, como discos compactos grabables, unidades Zip, memorias transportables USB, etc.

RESPALDO DE ARCHIVOS

Cuando los archivos informáticos contienen información que es extremadamente importante, se usa un proceso de respaldo (back-up) para protegerse contra desastres que podrían destruir los archivos. Hacer copias de respaldo de archivos significa simplemente hacer copias de los archivos en una ubicación separada de modo que se puedan restaurar si le pasara algo a la computadora, o si fueran borrados accidentalmente.
Hay muchas maneras de hacer copias de respaldo de archivos. La mayoría de los sistemas informáticos proporcionan utilidades para ayudar en el proceso de respaldo, que puede llegar a consumir mucho tiempo si hay muchos archivos a salvaguardar. Copiar los archivos a otro disco duro en la misma computadora protege contra el fallo de un disco, pero si es necesario protegerse contra el fallo o destrucción de la computadora entera, entonces de deben hacer copias de los archivos en otro medio que puede sacarse de la computadora y almacenarse en una ubicación distante y segura.


SISTEMAS DE ARCHIVOS Y GESTORES DE ARCHIVOS

Artículo principal: Sistema de archivos
La manera en que una computadora organiza, da nombre, almacena y manipula los archivos se denomina globalmente como su sistema de archivos. Todas las computadoras tienen al menos un sistema de archivos; algunas computadoras permiten usar varios sistemas de archivos diferentes. Por ejemplo, en las computadoras Windows más recientes, se reconocen los antiguos sistemas de archivos FAT y FAT32 de las versiones antiguas de Windows, además del sistema de archivos NTFS que es el sistema de archivos normal en las versiones recientes de Windows. NTFS no es más moderno que FAT32; ha existido desde que Windows NT se publicó en 1993.
Cada sistema de archivos tiene sus propias ventajas y desventajas. La FAT estándar solamente permite nombres de archivo de ocho bytes (o ocho caracteres de solo 1 byte) (más una extensión de tres bytes/caracteres) sin espacios, por ejemplo, mientras que NTFS permite nombres mucho más largos que pueden contener espacios, y tener varias letras unicode. Puede llamar a un archivo Registros de nóminas en NTFS, mientras que en FAT estaría limitado a algo como nominas.dat (salvo que estuviera usando VFAT, una extensión de FAT que permite nombres de archivo largos).
Los programas gestores o administradores de archivos son utilidades que le permiten manipular archivos directamente. Le permiten mover, crear, borrar y renombrar archivos y carpetas, aunque no le permiten realmente leer el contenido de un archivo o almacenar información en él. Cada sistema informático proporciona al menos un programa gestor de archivos para su sistema de archivos nativo. En Windows, el gestor de archivos usado más comúnmente es Windows Explorer.

No hay comentarios: