Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Archivos binarios:
o De imagen: .jpg, .gif, .tiff, .bmp (Portable bitmap), .wmf (Windows Meta File),
.png (Portable Network Graphics), .pcx (Paintbrush); entre muchos otros
o De video: .mpg, .mov, .avi, .gif
o Comprimidos o empaquetados: .zip, .Z, .gz, .tar, .lhz
o Ejecutables o compilados: .exe, .com, .cgi, .o, .a
o Procesadores de palabras: .doc
Archivos ascii
o Archivos fuente: .f, .c, .p
o Formatos de texto: .tex, .txt, .html
o Formatos de intercambio: .rtf, .ps, .uu
Asignacin no contigua:
o Son esquemas de almacenamiento ms dinmicos, destacndose los
siguientes:
o Asignacin encadenada orientada hacia el sector:
El disco se considera compuesto de sectores individuales.
Los archivos constan de varios sectores que pueden estar dispersos por todo el
disco.
Los sectores que pertenecen a un archivo comn contienen apuntadores de uno
a otro formando una lista encadenada.
Una lista de espacio libre contiene entradas para todos los sectores libres del
disco.
Las ampliaciones o reducciones en el tamao de los archivos se resuelven
actualizando la lista de espacio libre y no hay necesidad de condensacin.
Las principales desventajas son:
Debido a la posible dispersin en el disco, la recuperacin de registros
lgicamente contiguos puede significar largas bsquedas.
El mantenimiento de la estructura de listas encadenadas significa una
sobrecarga en tiempo de ejecucin.
Los apuntadores de la estructura de lista consumen espacio en disco.
o Asignacin por bloques:
Es ms eficiente y reduce la sobrecarga en ejecucin.
Es una mezcla de los mtodos de asignacin contigua y no contigua.
Se asignan bloques de sectores contiguos en vez de sectores individuales.
El sistema trata de asignar nuevos bloques a un archivo eligiendo bloques libres
lo ms prximos posible a los bloques del archivo existentes.
Las formas ms comunes de implementar la asignacin por bloques son:
Encadenamiento de bloques.
Encadenamiento de bloques de ndice.
Transformacin de archivos orientada hacia bloques.
o Encadenamiento de bloques o lista ligada:
Las entradas en el directorio de usuarios apuntan al primer bloque de cada
archivo.
Cada uno de los bloques de longitud fija que forman un archivo contiene dos
partes:
Un bloque de datos.
Un apuntador al bloque siguiente.
Cada bloque contiene varios sectores.
Frecuentemente el tamao de un bloque se corresponde con el de una pista
completa del disco.
Localizar un registro determinado requiere:
Buscar en la cadena de bloques hasta encontrar el bloque apropiado.
Buscar en el bloque hasta encontrar el registro.
El examen de la cadena desde el principio puede ser lento ya que debe
realizarse de bloque en bloque, y pueden estar dispersos por todo el disco.
La insercin y el retiro son inmediatos, dado que se deben modificar los
apuntadores del bloque precedente.
1.3. Campo.
Espacio para el almacenamiento de un dato en particular.
Los campos suelen tener asociados un tipo de dato que permiten almacenar, es
decir, si el campo debe ser un nmero entero, una fecha, un texto, etc. El tipo de
dato permite determinar el tamao del campo, que puede ser fijo o variable.
Campo en informtica puede significar:
- En las bases de datos, un campo es la mnima unidad de almacenamiento de
informacin accesible. Un registro est compuesto de uno o ms campos.
- En las hojas de clculos, los campos son llamados celdas.
- En programacin orientada a objeto, el campo es el dato encapsulado dentro de
una clase o un objeto. En caso de un campo tpico (tambin llamado variable de
instancia), por cada instancia del objeto hay una variable de instancia. Por
ejemplo, la clase Empleado tiene un campo Nombre, entonces hay un nombre
distinto por empleado. En tanto un campo esttico (tambin llamado variable de
clase) es una variable compartida por todas las instancias.
1.4. Registro.
1.5. ARCHIVO.
Un archivo o fichero informtico es un conjunto de bits que son almacenados en un dispositivo.
Un archivo es identificado por un nombre y la descripcin de la carpeta o directorio que lo
contiene. A los archivos informticos se les llama as porque son los equivalentes digitales de los
archivos escritos en expedientes, tarjetas, libretas, papel o microfichas del entorno de oficina
tradicional.
Creacin de un archivo.
El objetivo de esta operacin es permitir a los usuarios la creacin de nuevos archivos. Mediante
esta operacin se indican las propiedades y las caractersticas del archivo para que el sistema de
archivos pueda reconocerlo y procesarlo. En el proceso de creacin del archivo debe registrarse la
informacin necesaria para que el sistema pueda localizar el archivo y manipular sus registros
lgicos. Para ello, el mtodo de acceso debe obtener informacin sobre el formato y el tamao de
los registros lgicos y fsicos, la identificacin del archivo, la fecha de creacin, su posible tamao,
su organizacin, aspectos de seguridad, etc.
Apertura de un archivo.
Cierre de un archivo.
Esta operacin se utiliza para indicar que se va a dejar de utilizar un archivo
determinado. Mediante esta operacin el mtodo de acceso se encarga de
"romper" la conexin entre el programa de usuario y el archivo, garantizando la
integridad de los registros. Al ejecutar esta operacin, el sistema se encarga de
escribir en el dispositivo de almacenamiento aquella informacin que contienen los
bfer asociados al archivo y se llevan a cabo las operaciones de limpieza
necesarias. Tras cerrar el archivo, sus atributos dejan de ser accesibles para el
mtodo de acceso. El nico parmetro necesario para realizar esta operacin es el
identificador del archivo devuelto por el mtodo de acceso al crear o abrir el
archivo. Los errores que se pueden producir al cerrar un archivo son los
siguientes:
El archivo no est abierto.
No se ha podido escribir en el dispositivo toda la informacin del archivo, debido a
fallos en el hardware.
No se ha podido escribir en el dispositivo toda la informacin del archivo por falta
de espacio en el dispositivo de almacenamiento.
Proteccin de archivos.
Muchos sistemas informticos modernos proporcionan mtodos para proteger los
archivos frente a daos accidentales o intencionados. Las computadoras que
permiten varios usuarios implementan permisos sobre archivos para controlar
quin puede o no leer, 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 tambin se
pueden usar para permitir que solamente ciertos usuarios vean el contenido de un
archivo o carpeta. Los permisos protegen de la manipulacin no autorizada o
destruccin de la informacin de los archivos, y mantienen la informacin privada
confidencial impidiendo que los usuarios no autorizados vean ciertos archivos.
Almacenamiento de archivos.
En trminos fsicos, la mayora de los archivos informticos se almacenan en
discos duros, discos magnticos que giran dentro de una computadora que
pueden registrar informacin indefinidamente. Estos discos permiten acceso casi
instantneo a los archivos informticos.
Hace unos aos solan usarse cintas magnticas para realizar copias de
seguridad. Tambin se usaban otros medios de almacenamiento como discos
compactos grabables, unidades Zip, etctera.
Respaldo de archivos.
Cuando los archivos informticos contienen informacin que es extremadamente
importante, se usa un proceso de respaldo (back-up) para protegerse contra
desastres que podran destruir los archivos. Hacer copias de respaldo de archivos
significa simplemente hacer copias de los archivos en una ubicacin separada de
modo que se puedan restaurar si le pasara algo a la computadora, o si fueran
borrados accidentalmente.
mSQL
SQL Server 11
1.7. Concepto de organizacin.
Una organizacin de datos es una estructura fsica-lgica que permite realizar operaciones
computacionales (editar, guardar, actualizar, etc.) sobre un contenido de informacin.
Estructura fsica; describe la manera fsica (bytes) de almacenar los datos en un soporte
(como se almacenan los datos en el soporte).
Estructura lgica; describe la manera lgica de representar la informacin a los usuarios
(como ve el usuario la informacin).
1.8. Tipos de organizacin.
Organizacin no estructurada
Utiliza informacin no estructurada contenida en libros, artculos informes.
Es tan grande la variedad de informacin que es muy difcil saber que es lo que nos va a
interesar en el caso de una bsqueda y seria imposible determinar un campo por cada tema.
Organizacin estructurada
Utiliza informacin estructurada o datos definidos (facturas, recibos de clientes, etc.).
El diseo de una buena base de datos deber reconocer con mtodo y exactitud los datos que
se van a utilizar, antes de su implementacin.
Esta organizada mediante campos.
Tratamiento de datos formateados (organizados).
Sistemas orientados a proceso.
Sistemas orientados a datos.
Sistema de Gestin de Datos Relacionales.
Tratamiento de datos no formateados (No organizados)
Documentos.
Sistemas de Recuperacin de Informacin.
Sistemas de Gestin de Bases de Datos Documentales.
1.8. Concepto de Acceso.
El servidor comparara los datos ingresados con los de la base de datos generalmente con el
lenguaje SQL, si los datos coinciden, el servidor guardara una cookie de sesin en el cliente y
permitir que este pueda ver y editar informacin dependiendo de los privilegios que este
usuario tenga.
Un ejemplo de la comparacin de datos ingresados con los de la base de datos en un
pseudocdigo:
En este caso el atacante exploto una vulnerabilidad para lograr obtener un acceso no
autorizado y poder subir su archivo.
Monitoreo de Servidores y redes informticas.
Un administrador las 24 horas en un servidor o red puede controlar todos los accesos en todas
las zonas y tiene los permisos suficientes para desconectar y bloquear a cualquier intruso.
Ban.
Un ban es una poltica muy til para impedir accesos no autorizados, este bloquea el acceso de
un usuario parcialmente o totalmente por un periodo de tiempo definido o indefinido este
puede aplicarse manualmente (por un administrador) o automticamente (por un bot o el
mismo sistema operativo).
Bans manuales.
Son aquellos dados por administrador cundo este ve un comportamiento extrao en el usuario
autentificado.
Bans automticos.
Son aquellos dados por un bot o el sistema operativo cundo detectan (basndose en
inteligencia artificial) un comportamiento extrao en el usuario autentificado o hay una
cantidad determinada de intentos fallidos en una autentificacin.
Ventajas:
No es necesario definir la secuencia de pasos exacta para resolver el problema.
Soluciones simples, claras.
Soluciones elegantes.
Soluciones a problemas complejos.
Desventajas:
Podra ser menos eficiente.
Sobrecarga asociada con las llamadas a subalgoritmos
Una simple llamada puede generar un gran nmero de llamadas Recursivas. (Fact(n) genera
n llamadas recursivas)
El valor de la recursividad reside en el hecho de que se puede usar para resolver problemas
sin fcil solucin iterativa.
La ineficiencia inherente de algunos algoritmos recursivos.
#include <iostream>
using namespace std;
int SumaDigitos(int);
int main() {
cout << 32890123 << ": " << SumaDigitos(32890123) << endl;
return 0;
}
int SumaDigitos(int n) {
if(n < 10) return n;
return n%10+SumaDigitos(n/10);
}
2. // El producto de forma recursiva
#include <iostream>
using namespace std;
int producto(int a, int b){
if (b==0)
return 0;
else
return a+producto(a,b-1);
}
3. // Suma recursiva de los elementos de un vector
#include <iostream>
using namespace std;
int SumaV (int *V, int n){
if (n==0)
return V[0];
else
return V[n]+sumaV(V,n-1);
}
A(2)
A(3)
A(4)
A(5)
A(6)
A(7)
A(8)
50
15
56
14
35
12
algoritmo intercambio
inicio
desde I=1 desde N hacer
leer X(I)
fin-desde
desde I=1 hasta N-1 hacer
desde J=1 hasta N-I hacer
si X(J) >X(J+1) entonces
AUX <- X(J)
X(J) <- X(J+1)
X(J+1) <- AUX
fin-si
fin-desde
fin-desde
desde J = 1 hasta N hacer
escribir X(J)
fin-desde
fin
2.3. BURBUJA.
Primera ordenacin.
Ejemplo de ordenacin por burbuja para encontrar el primer elemento.
1
Vect
2 Compara 3 Compara 4 Compara 5 Compara
Comparac
or
cin
cin
cin
cin
in
V[
1]
V[
2]
V[
3]
V[
4]
V[
5]
V[
6]
34
34
34
34
34
34
53
53
53
53
15
15
15
15
15
15
53
53
34
34
34
34
15
15
53
15
15
15
34
15
34
53
53
53
53
53
#include <vcl.h>
#include <iostream.h>
#include <conio.h>
#pragma hdrstop
//-------------------------------------------------------------------------#pragma argsused
int main(int argc, char* argv[]){
// Variables
int v[]={3, 34, 1, 53, 15, 6};
int j, aux;
int i = 0;
bool ord = false;
// Visualizar el vector
for(int n=0; n<6; n++){
cout << v[n] << " ";
}
// Ordenaciones
while(!ord){
// Comparaciones
ord=true;
for(j=0;j<5-i;j++){
if(v[j]>v[j+1]){
// Intercambiar los elementos
aux=v[j];
v[j]=v[j+1];
v[j+1]=aux;
ord = false; //
Indicador
ordenado
}
de
vector
}
i++;
}
// Visualizar el vector ordenado
cout << endl;
for(int n=0; n<6; n++){
cout << v[n] << " ";
}
getch();
return 0;
}
//-------------------------------------------------------------------------2.4. QUICKSHORT.
El algoritmo usa la tcnica divide y vencers que bsicamente se basa en dividir un problema en
subproblemas y luego juntar las respuestas de estos subproblemas para obtener la solucin al
problema central.
Empezamos creando o generando un array de n elementos, por ejemplo yo use la funcin rand()
de C++ para generar aleatorios del 1 al 15, mi arreglo qued as:
array[] = {8, 1, 5, 14, 4, 15, 12, 6, 2, 11, 10, 7, 9};
left
right
0 1 2 3
4 5
6
7 8 9
10 11 12
8 1 5 14 4 15 12 6 2 11 10 7
9
Tomamos como pibote el 8 y usamos 2 ndices que me indiquen la posicin del array:
Uno que vaya de izquierda a derecha buscando los elementos mayores al pibote. array[left]
Y un ndice que busque de derecha a izquierda los elementos menores al pibote. array[right]
El ndice izquierdo ir aumentando en 1 mientras el array en la posicin izquierda sea menor o
igual al pibote.
El ndice derecho ir reducindose en 1 mientras el array en la posicin derecha sea mayor al
pibote.
Si al final de estas 2 operaciones, el ndice izquierdo es menor al derecho se intercambian las
posiciones array[left] con array[right] usando una variable temporal:
En este caso, en la primer recorrido el ndice izquierdo encuentra al 14 (mayor al pibote) y el ndice
derecho al 7 (menor al pibote), y se intercambian los ndices:
8 1 5 14 4 15 12 6 2 11 10 7
9
8 1 5 7
4 15 12 6 2 11 10 14 9
Segundo recorrido: El ndice izquierdo encuentra al 15 (mayor al
pibote) y el ndice derecho al 2 (menor al pibote), se intercambian:
8 1 5 7 4 15 12 6 2
11 10 14 9
8 1 5 7 4 2
12 6 15 11 10 14 9
Tercer recorrido: El ndice izquierdo encuentra al 12 (mayor al pibote) y el ndice derecho al 6
(menor al pibote), se intercambian:
8 1 5 7 4 2 12 6
15 11 10 14 9
8 1 5 7 4 2 6
12 15 11 10 14 9
Cuando los ndices se juntan o se cruzan ponemos el pibote en el lugar que le corresponde en el
array.
Se intercambian el 8 con el 6 y el array quedara as:
6 1 5 7 4 2 8 12 15 11 10 14 9
Ahora la funcin quicksort se llamara 2 veces recursivamente para los 2 subarray que tenemos.
El pibote es 6, se encuentra por la izquierda al 7 y por la derecha al 2. Se intercambian y como se
cruzaron los ndices movemos el pibote a su lugar:
6 1 5 7 4 2
6 1 5 2 4 7
4 1 5 2 6 7
Otra vez tenemos 2 subarrays.
El mismo proceso. Se ejecutar quicksort (array, 0, 3). El pibote ahora es 4, se encuentra por el
ndice izquierdo al 5 y por el derecho a 2. Se intercambian y como se juntaron los ndices se
mueve el pivote a su lugar.
4 1 5 2
4 1 2 5
2 1 4 5
Cuando se ejecuta quicksort (array, 0, 1) se intercambia los ndices otra vez.
2 1
1 2
Ahora se llamara a quicksort(array, 0, 0), se divide en 2 elementos el subarray y no hay nada
ms que hacer por que solo tienen 1 elemento.
Ahora se ejecuta el mismo proceso con el segundo subarray del array original. Quicksort (a, 7, 12)
Se encuentra el 15 y el 9, se intercambian y como luego se juntan los ndices, se coloca el pibote a
su lugar:
12 15 11 10
12 9
11 10
10 9
11 12
Tenemos otros 2 subarrays
14 9
14 15
14 15
y se vuelve a llamar la funcin quicksort.
Se intercambian los ndices y nos quedan otros 2 subarrays de 1 solo elemento entonces no se
ejecuta nada.
10 9
11
9
10 11
Con el anterior subarray (14, 15) se llama a quicksort(array, 11, 12).
14
15
Se divide en 2 elementos este subarray y no hay nada ms que hacer por que los array que
contienen al 14 y al 15 solo tienen 1 elemento.
De manera que el rbol recursivo de ordenacin queda ms o menos as:
Quick Sort
Complejidad computacional del Quicksort:
En el mejor de los casos tiene un costo de O(n*log (n)). Que es cuando el pibote siempre queda al
medio del arreglo.
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<iostream>
<stdio.h>
<stdlib.h>
"quicksort.cpp"
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
// Para que el rand no genere siempre los mismos nmeros, utilizando la hora del
sistema
srand(time(0));
// Para generar enteros aleatorios usamos rand()
for (int i = 0; i < arraySize; i++) {
a[i] = rand() % MAX;
}
cout << "Array antes de ordenarse: " << endl;
for (int i = 0; i < arraySize; i++) {
cout << a[i] << " ";
}
cout << endl << endl;
quicksort(a, 0, arraySize - 1);
final_time = clock();
total_time = ((double)(final_time - start_time)) / CLOCKS_PER_SEC;
printf("Tiempo de ejecucin : %lf segundos \n", total_time);
cout << "Array ordenado " << endl;
for (int i = 0; i < arraySize; i++ ){
cout << a[i] << "-";
}
cout << endl << endl;
return 0;
}
2.5.
2.6. SELECCIN DIRECTA.
Es un algoritmo sencillo y uno de los ms sencillos de recordar e implementar. No es el mejor
algoritmo de ordenacin ya que realiza una gran cantidad de comparaciones, pero, por el contrario,
realiza muy pocos intercambios.
El algoritmo consiste en realizar varias pasadas sobre el vector, de tal manera que el elemento de
menor peso se coloque al principio del vector en un solo intercambio. En cada pasada se recorre la
parte no ordenada del vector buscando el elemento de menor peso y cuando se localiza se
intercambia con el primer elemento de la parte no ordenada del vector.
2.8. INSERCION.
Consiste en colocar un elemento en el vector, en una parte ya ordenada del mismo y comenzar
de nuevo con los elementos restantes; fijarse que de hecho este mtodo es el que utilizamos
cuando se ordena un mazo de cartas, por lo que tambin es conocido como mtodo de la baraja.
Ejemplo:
En un vector, parcialmente ordenado en sus primeros siete elementos y hagamos la insercin
del octavo (45) en su lugar correspondiente:
5
14
24
39
43
65
84
45
Para insertar el elemento 45, que es el siguiente en la ordenacin, habr que insertarlo entre 43
y 65, lo que supone desplazar a la derecha todos los elementos de valor superior a 45, el
algoritmo se ejecutara en base a las comparaciones y desplazamientos sucesivos.
algoritmo ord_insercin
inicio
desde J=2 hasta N hacer
AUX <- X(J)
K <- J-1
mientras AUX < X(K) hacer
X(K+1) <- x(K)
K <- K 1
fin_mientras
X(K + 1) <- AUX
fin_desde
fin
#include "stdafx.h"
#include <iostream>
#include <time.h>
#include <conio.h>
#define LARGOCADENA 20
#define NUMCADENAS 30000
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int i,j,opc,a,intercambios=0,comparacion=0;
char cadena[LARGOCADENA];
clock_t generacion,orden;
//declaracion estructura
struct cadenita
{
char cadenota[LARGOCADENA];
};
//Arreglo de estructuras
struct cadenita cadenon[NUMCADENAS];
srand(time(NULL));
do
{
system("cls");
cout<<"Como desea ordenar los numeros:"<<endl;
cout<<"1. Menor a Mayor"<<endl;
cout<<"2. Mayor a Menor"<<endl;
cin>>opc;
if(opc!=1&&opc!=2)
{
cout<<"Seleccione una opcion valida"<<endl;
getch();
}
}
while(opc!=1&&opc!=2);
if(opc==1)
a=1;
else
a=-1;
/*creacion de numeros desordenados*/
generacion=clock();
for(j=0;j<NUMCADENAS;j++)
{
for(i=0; i<LARGOCADENA-1; i++)
{
cadena[i] = '0'+ ( rand() % ('0' - '9') );
}
cadena[i] = '\0';
strcpy(cadenon[j].cadenota,cadena);
cout<<cadenon[j].cadenota<<endl;
}
printf( "Numero de segundos transcurridos desde el comienzo
del programa: %f s\n", (clock()-generacion)/(double)CLOCKS_PER_SEC );
/*ordenarlos*/
orden=clock();
for(i=0;i<NUMCADENAS-1;i++)
{
j=i;
while(a==(strcmp(cadenon[j].cadenota,cadenon[j+1].cadenota))/*
,comparacion++*/)
{
strcpy(cadena,cadenon[j].cadenota);
strcpy(cadenon[j].cadenota,cadenon[j+1].cadenota);
strcpy(cadenon[j+1].cadenota,cadena);
intercambios++;
if(j!=0)
j--;
}
}
/*Mostrar datos ordenados*/
for(j=0;j<NUMCADENAS;j++)
{
cout<<cadenon[j].cadenota<<endl;
}
cout<<"El numero de intercambios fue "<<intercambios<<endl;
printf( "Numero de segundos transcurridos durante el
ordenamiento: %f s\n", (clock()(generacion+orden))/(double)CLOCKS_PER_SEC );
getch();
return 0;
}
2.9. Insercin Directa.
//Insercin Directa
//Codificado por sAfOrAs
#include<iostream>
#include"leearreglo.h"
using namespace std;
#define largo 50
void insercionDirecta(int A[],int n)
{
int i,j,v;
A[j + 1] = v;
}
}
void main ()
{
int A[largo],n;
do{
}while(n<=0||n>largo);
leeCadena(n,A);
insercionDirecta(A,n);
muestraCadena(n,A);
#include<iostream>
3
4
for(i=0;i<cant;i++)
cin>>n[i];
}
9
10
11
12
13
14
int i;
15
for(i=0;i<cant;i++)
16
17
cout<<n[i]<<endl;
}
18
19
20
21
2.10. SHELL
El mtodo de insercin como el mtodo de burbuja son de orden cuadrtico y en consecuencia
su tiempo de ejecucin se dispara cuando el nmero de elementos a ordenar es grande. Con el
objetivo de mejorar ambas aproximaciones Donald Shell propuso un nuevo mtodo que lleva
su nombre y que, sin mejorar la complejidad en el peor caso, se comporta de forma
sensiblemente ms eficaz en la gran mayora de los casos.
Se basa en tomar como salto inicial el valor N/2 (N = Nmero de elementos) y luego se va
reduciendo a la mitad en cada repeticin hasta que el salto o distancia se reduce a 1. Por tanto
habr que manejar la variable salto, de forma que los recorridos no sern los mismos en cada
iteracin.
Sea un vector: X(1), X(2), X(3),,X(N). El primer salto a dar que tendr un valor de:
1+N
-----2
algoritmo Shell
inicio
E <- N+1
mientras E > 1
E<- ent(E/2)
repetir
ID <- verdadero
I <- 1
desde I = 1 hasta N-E
si X(I) > X(I+E) entonces
AUX <- X(I)
X(I) <- X(I+E)
X(I+E) <- AUX
ID <- falso
Fin-si
fin-desde
hasta-que (ID = Verdadero)
fin-mientras
fin