lunes, noviembre 27, 2006

CLASE DESARROLLADA EL 29/11 CON 5TO. "C" COLEGIO CLARETIANO-TRUJILLO

C) ARCHIVOS SIN TIPO O NO TIPIFICADOS:
Los archivos sin tipo o no tipificados no tienen ningún formato especial y por tanto podemos leer de ellos los datos que queramos. Hay que tener en cuenta, que en ninguno de los tres tipos de archivos se hace ningún tipo de comprobación de los datos que se escriben o se leen.
De forma que si abrimos un archivo de un tipo determinado, por ejemplo de tipo LongInt, con un alias de tipo Byte los datos que leamos corresponderán a los bytes del LongInt.
Los archivos sin tipo o no tipificados no hacen suposiciones sobre la estructura de datos. Se pueden leer datos desde un archivo no tipificado con cualquier tipo de dato.
Ya que Free Pascal no hace suposiciones sobre la forma de los datos, la transferencia desde el disco a la estructura de datos es inmediata. Estos es porque los archivos no tipificados se utilizan para aplicaciones que requieren entradas y salidas a alta velocidad.
Las funciones Write y Read no se pueden emplear con archivos sin tipo. Es por este motivo que tenemos que emplear las funciones BlockWrite y BlockRead. Estas funciones leen o escriben un número n, o menos en caso de lectura, de bloques de tamaño b, en bytes, que conviene especificar en las funciones Rewrite y Reset. Si no especificamos el valor del bloque a Rewrite o Reset por defecto vale 128 bytes.-
Ejemplo 1:
Programa en el cual escribiremos datos de tipo String y Entero.

Program EscrituradatosArchivosintipo;
Uses Crt, SysUtils;
Const
Nomarch=’/root/datos.dat’;
Var
Datos: File;
Nombres:String[35];
Telef:String[10];
Email:String[25];
Edad:Integer;
Begin
Clrscr;
(*Asignaremos o relacionamos la variable de tipo archivo con el archivo de disco*)
Assign(Datos,Nomarch);
(*Abrimos y creamos el archivo, especificando 1 byte como tamaño del bloque por comodidad*)
Rewrite(Datos,1);
Write(‘Nombres y Apellidos: ´);Readln(Nombres);
Write(‘Nro. Telefonico: ´); Readln(Telef);
Write(‘Correo Electronico: ´);Readln(Email);
Write(‘Edad : ´);Readln(Edad);
(*Ahora escribiremos o guardaremos los datos en el disco*)
BlockWrite(Datos,Nombres,SizeOf(Nombres));
BlockWrite(Datos,Telef,SizeOf(Telef));
BlockWrite(Datos,Email,SizeOf(Email));
BlockWrite(Datos,Edad,SizeOf(Edad));
(*Ahora cerraremos el archivo*)
Close(Datos);
Readkey;
End.

Observese:

- Que especificamos el tamaño del registro en 1 ya que después necesitaremos especificar el tamaño de los datos que vamos a escribir. Para esto empleamos la función SizeOf que toma como parámetro cualquier tipo de variable y devuelve su tamaño en bytes. Si no hubieramos especificado el tamaño del bloque, se tomaría por defecto 128 bytes.
- La función BlockWrite admite cualquier tipo de variable como segundo parámetro.
- Para leer, la función BlockRead funciona de forma parecida a BlockWrite. En este caso el segundo parámetro también puede ser de cualquier tipo, pero no una constante.

Ejemplo 2:
Programa en el cual leeremos datos de tipo String y Entero escritos en el programa del ejemplo 1.

Program LeerdatosArchivosintipo;
Uses Crt, SysUtils;
Const
Nomarch=’/root/datos.dat’;
Var
Datos: File;
Nombres:String[35];
Telef:String[10];
Email:String[25];
Edad:Integer;
Begin
Clrscr;
(*Asignaremos o relacionamos la variable de tipo archivo con el archivo de disco*)
Assign(Datos,Nomarch);
(*Abrimos el archivo, especificando 1 byte como tamaño del bloque por comodidad*)
Reset(Datos,1);
(*Ahora leeremos todos los datos del Archivo*)
While Not Eof(Datos) do
Begin
BlockRead(Datos,Nombres,SizeOf(Nombres));
BlockRead(Datos,Telef,SizeOf(Telef));
BlockRead(Datos,Email,SizeOf(Email));
BlockRead(Datos,Edad,SizeOf(Edad));
Writeln(‘Registro # : ‘,filepos(datos));
Writeln(‘Nombres y Apellidos: ´,Nombres);
Writeln(‘Nro. Telefonico: ´,Telef);
Writeln(‘Correo Electronico: ´,Email);
Writeln(‘Edad : ´,Edad);
Writeln;
End;
(*Ahora cerraremos el archivo*)
Close(Datos);
Readkey;
End.

Nota: Otras funciones que podemos emplear para los archivos sin tipo incluyen: FileSize, FilePos y Seek. Todas estas tres funciones trabajan con el valor del bloque, el tamaño del cual hemos especificado en Reset o Rewrite. También podemos emplear EOF para detectar el fin de archivo.


GESTIÓN DE ARCHIVOS


A diferencia de cerrar archivos, escribir o leer datos también podemos realizar otras operaciones como pueden ser eliminar un archivo o cambiar el nombre.

A) Eliminar un Archivo: Función Erase
Eliminar es tan simple como emplear la función Erase y el alias del archivo.
Hay que tener en cuenta de que el archivo tiene que estar cerrado para evitar un error en tiempo de ejecución. Además, cerrar un archivo ya cerrado da error de ejecución. Para asegurarse de que un archivo está cerrado podemos abrirlo con Reset y cerrarlo con Close. Nuevas llamadas a Reset con un archivo ya abierto no dan error, simplemente sitúan el cursor del archivo al inicio. Una vez que el archivo está cerrado ya podemos llamar a Erase.

Sintaxis:
Erase(VarArchivo);
Ejemplo:
…..
Var Datos:File;
Begin
Assign(Datos,’Data.dat’);
Erase(Datos);
…..

B) Renombrar un Archivo: Función Rename
La función Rename permite renombarr un archivo. Hay que tener en cuenta de que el archivo también tiene que estar cerrado.

Sintaxis:
Rename(VarArchivo,’NuevoNombredelArchivo’);

Ejemplo:
…..
Var Datos:File;
Begin
Assign(Datos,’Data.dat’);
Rename(Datos,’Datanueva.Dat’);
…..
Ejemplo:
El siguiente programa proporciona un método simple para renombrar y borrar archivos. Cuando comience el programa se le presentarán tres opciones: renombrar un archivo, borrar un archivo o dejarlo.

Program RenombrarBorrar;
Uses Crt, SysUtils;
Var
F: File;
Nombre1,Nombre2:String;
Opcion:Char;
Begin
Repeat
Clrscr;
Write(‘[R]enombrar, [B]orrar, [S]alir : ‘);
Readln(opcion);
Case Upcase(opcion) Of
‘R’:Begin
Write(‘Nombre del archivo a renombrar: ‘);
Readln(Nombre1);
Write(‘Nuevo nombre para el archivo : ‘);
Readln(Nombre2);
Assign(F,Nombre1);
Rename(F,Nombre2);
End;
‘B’:Begin
Write(‘Nombre del archivo a borrar: ‘);
Readln(Nombre1);
Assign(F,Nombre1);
Erase(F);
End;
End;
Readkey;
End.


CAPTURAR ERRORES DE ARCHIVOS CON IOResult

Hasta ahora hemos operado con archivos suponiendo que el archivo existía o bien no había ningún error durante las operaciones de lectura o de escritura. Existe una forma muy sencilla de capturar los errores de las operaciones con archivos mediante la variable IOResult y la directiva de compilador {$I}. Una directiva de compilador es un comentario que justo después de la llave hay el símbolo de dólar $ y una o más letras. Las directivas modifican el comportamiento del compilador en tiempo de compilación. Después de una directiva el compilador puede modificar su comportamiento de muchas formas. Muchas veces van asociadas a la llamada compilación condicional, que veremos más adelante, en otras se refiere a como se estructuran los datos, etc.
En el caso de $I es una directiva de activación/desactivación. Por defecto $I está activada con lo cual los errores de entrada/salida de archivos provocan un error de ejecución (runtime error). Los errores runtime son irrecuperables, o sea, provocan la finalización inmediata y anormal del programa
Muy a menudo, el error puede ser debido al usuario con lo cual hay que procurar de no generar un error runtime ya que inmediatamente terminaría el programa. Podemos evitar estos errores con la desactivación de la directiva $I. Para activar una directiva en medio del código:
{$I+}
Para desactivarla:
{$I-}

Es importante reactivar la directiva $I cuando ya no sea necesaría. Cuando está desactivada podemos acceder a la variable IOResult. Esta variable tiene el valor de cero (0) si la operación con archivos se ha llevado a cabo con éxito. En caso contrario, almacenará un valor distinto de cero. Vamos aplicar esta técnica al programa de cambio de nombre:
…..
Var
Archivo:File;
Begin
Assign(archivo,’Dato.dat’);
{$I-} (*Desactivamos la directive*)
Rename(archive,’nuevadata.dat’);
If IOResult<>0 Then
Write(‘Archivo no existe, no podemos renombrarlo….’);
{$I+} (*Reactivamos la directiva *)
End.


LES DESEO UNA FELIZ NAVIDAD Y UN PROSPERO AÑO 2007 Y ROGANDO AL "TODO PODEROSO" PARA QUE ILUMINE SUS CAMINOS EN ESTA NUEVA ETAPA DE SUS VIDAS Y SE HAGAN REALIDAD TODAS SUS METAS TRAZADAS.



martes, noviembre 21, 2006

Tecnologia Voip

miércoles, noviembre 08, 2006

CLASE DESARROLLADA EL DIA: LUNES 13 DE NOVIEMBRE PARA 5TO. "C" SECUNDARIA-COLEGIO CLARETIANO-TRUJILLO


B. ARCHIVOS CON TIPO:
Los archivos con tipo o tipificados son archivos que contienen datos de un tipo particular, tales como enteros, reales registros, etc. Estos archivos valiosos pueden hacer más fácil y más eficiente su programación. De hecho, los archivos con tipo, proporcionan entradas y salidas mucho más rápidas de las que hacen los archivos de texto.
A diferencia de los archivos de texto que no son estructurados, los archivos tipificados tienen una estructura rígida que depende, y se define, según el tipo de datos que ellos mantienen.

b.1 ESTRUCTURA DEL ARCHIVO:
La diferencia entre un archivo tipo texto y uno con tipo, radica en que el primero está compuesto de líneas de caracteres y el segundo se acomoda en registros con estructuras fijas. La longitud de los registros esta determinada por la cantidad de byte que se necesitan para almacenar el tipo de datos que contendrá el registro.

b.2 DECLARACIÓN DE UN ARCHIVO CON TIPO:
Para declarar un archivo con tipo se realiza con las palabras reservadas FILE OF, su sintaxis es la siguiente:

Var VariableArchivo:FILE OF TipoElementos;

Por Ejemplo:

Var F: FILE OF Integer,

En esta declaración le indica a Free Pascal que su archivo utilizará para almacenar solamente números enteros.

Var March: FILE OF Real;

En esta declaración le indica a Free Pascal que su archivo utilizará para almacenar solamente números reales.


Normalmente no se desea crear archivos que puedan almacenar un solo tipo de datos ya que se requerirían varios archivos, por ejemplo para alguna base de datos: uno para los nombres, otro para los apellidos, otro para la edad, etc. Para evitar este inconveniente es posible usar registros del tipo RECORD, que permiten grabar en un solo registro un grupo de datos que pueden ser de diferentes tipos, uno de tipo INTEGER, uno de tipo STRING, etc.

Los registros del tipo record deben ser declarados antes de las variables en una sección llamada TYPE.
La sección TYPE se escribe antes de la declaración de las variables.
Para crear la tabla de Personal, quedaría así:



Type
Personal=Record
Nombre:String[30];
Direccion:String[30];
Telefono:String[10];
Edad:Integer;
Area:String[12];
Sueldo:Real;
End;

El siguiente paso sería declarar un archive del tipo de Personal, así como una variable del mismo tipo de los que se utilizarán en el archivo.

VAR
Archivo: FILE OF Personal;
DatosPersonal: Personal;

b.3 ASIGNACIÓN DE UN ARCHIVO:
Sintaxis:
Assign (Archivo, ‘Nombre.ext’);

Nombre.ext puede ser una constante, una variable o estar escrita directamente en el programa. Naturalmente debe cumplir con todas las reglas para nombrar un archivo.

b.4 ABRIR ARCHIVOS:

En este caso de querer abrir un archivo, se pueden utilizar las funciones:
Reset: Permite abrir un archivo ya existente en el disco. En este tipo de archivos, esta función permite la lectura y la escritura.
Rewrite: Se comporta igual que con los archivos de texto. Si el archivo asignado ya existe se eliminará del disco toda la información y se creará uno nuevo.
Nota:
En estos tipos de archivos no se utiliza Append.

b.5 REGISTRO ACTUAL Y TAMAÑO DE UN ARCHIVO:
La función FILESIZE regresa el tamaño de un archivo, o mejor dicho devuelve el número de registros contenidos en éste. Al momento de abrir un archivo nuevo la función FILESIZE regresa el valor de 0, lo que significa que el archivo no tiene datos guardados en él.

Sintaxis:

FileSize(VariableArchivo);

b.6 POSICIONAMIENTO EN UN REGISTRO DETERMINADO:
Cada uno de los registros de un archivo esta referenciado por un número específico comenzando desde el registro 0 y aumentando de 1 en 1.
La función FILEPOS devuelve el número del registro actual.

Sintaxis:
FILEPOS(VariableArchivo);

Entre otras funciones útiles tenemos:

Función Seek:
Se utiliza para moverse a un registro determinado con la siguiente sintaxis:

Seek(VariableArchivo,FileSize(VariableArchivo));

Cuando se avanza en un archivo registro por registro se utiliza la función EOF( ) para determinar si ya se llegó al final del archivo.

b.7 LECTURA Y ESCRITURA DE ARCHIVOS:

Para lectura y escritura en un archivo con tipo se utilizan los procedimientos Read y Write. Después de cada operación de lectura o escritura el puntero se posiciona en el siguiente registro. Para estar seguros de que se leerá el registro que se desea se debe emplear el procedimiento Seek antes de cualquier procedimiento de lectura o escritura.

b.8 CERRAR UN ARCHIVO:

Para cerrar los archivos abiertos se procede igual que en uni de tipo texto, utilizando el procedimiento CLOSE.
Sintaxis:

CLOSE(VariableArchivo);

Ejemplo 1: Escribe los datos de un registro en un archivo.

Program EscribirunArchivoConTipo;
Uses Crt, SysUtils;
Const
NomArchivo=’/root/agenda.dat’;
Type
TAgenda=Record
Nombre:String[30];
Direc:String[30];
Telef:String[12];
Email:String[30];
Edad:Integer;
End;
Var
ArchAgenda: File Of TAgenda;
DatAgenda:Tagenda;
Num,i:Integer;
Begin
Assign(ArchAgenda,NomArchivo);
If not FileExists(NomArchivo) Then
Rewrite(ArchAgenda)
Else
Reset(ArchAgenda);
Write(‘Cuantos registros desea ingresar a la agenda: ‘);
Readln(Num);
For I:=1 to Num Do
Begin
Write(‘Introduzca el Nombre: ‘);Readln(DatAgenda.Nombre);
Write(‘Introduzca la Dirección: ‘);Readln(DatAgenda.Direc);
Write(‘Introduzca el Telefono: ‘);Readln(DatAgenda.Telef);
Write(‘Introduzca su dirección electronica: ‘);Readln(DatAgenda.Email);
Write(‘Introduzca su Edad: ‘);Readln(DatAgenda.Edad);
Write(ArchAgenda,DatAgenda);
Writeln;
End;
Close(ArchAgenda);
Readkey
End.

Ejemplo 2: Lectura de los datos del archive del ejemplo 1

Program LeerunArchivoConTipo;
Uses Crt, SysUtils;
Const
NomArchivo=’/root/agenda.dat’;
Type
TAgenda=Record
Nombre:String[30];
Direc:String[30];
Telef:String[12];
Email:String[30];
Edad:Integer;
End;
Var
ArchAgenda:File Of TAgenda;
DatAgenda:Tagenda;
i:Integer;
Begin
Assign(ArchAgenda,NomArchivo);
If not FileExists(NomArchivo) Then
Writeln(‘El Archivo ‘,NomArchivo,’ No existe’)
Else
Begin
Reset(ArchAgenda);
For I:=1 to FileSize(ArchAgenda) Do
Begin
Read(ArchAgenda,DatAgenda);
Writeln(‘Nombre: ‘,DatAgenda.Nombre);
Writeln(‘ Dirección: ‘,DatAgenda.Direc);
Writeln(‘Telefono: ‘,DatAgenda.Telef);
Writeln(‘Email: ‘,DatAgenda.Email);
Writeln(‘Edad: ‘, DatAgenda.Edad);
Writeln;
End;
Close(ArchAgenda);
End;
Readkey
End.

Ejemplo: 3: Para leer el archive en sentido inverso al habitual, puesto que Read adelanta el cursor de lectura automáticamente que vamos leyendo, necesitamos la función SEEK.


Program LeerunArchivoConTipoAlreves;
Uses Crt, SysUtils;
Const
NomArchivo=’/root/agenda.dat’;
Type
TAgenda=Record
Nombre:String[30];
Direc:String[30];
Telef:String[12];
Email:String[30];
Edad:Integer;
End;
Var
ArchAgenda:File Of TAgenda;
DatAgenda:Tagenda;
i:Integer;
Begin
Assign(ArchAgenda,NomArchivo);
If not FileExists(NomArchivo) Then
Writeln(‘El Archivo ‘,NomArchivo,’ No existe’)
Else
Begin
Reset(ArchAgenda);
For I:=1 to FileSize(ArchAgenda)-1 downto 0 Do
Begin
Seek(Agenda,i);
Read(ArchAgenda,DatAgenda);
Writeln(‘Nombre: ‘,DatAgenda.Nombre);
Writeln(‘ Dirección: ‘,DatAgenda.Direc);
Writeln(‘Telefono: ‘,DatAgenda.Telef);
Writeln(‘Email: ‘,DatAgenda.Email);
Writeln(‘Edad: ‘, DatAgenda.Edad);
Writeln;
End;
Close(ArchAgenda);
End;
Readkey
End.












lunes, noviembre 06, 2006

INTRODUCCION A LOS BLOGUERS

¿Qué son las bitácoras y por qué deberían importarnos?

La blogósfera constituye uno de los espacios más dinámicos de la Red. Las bitácoras han dejado de ser exclusivamente diarios personales, se han convertido en nuevos medios de comunicación y pueden ser la nueva "next big thing" de la comunicación corporativa.
Las bitácoras, weblogs o blogs, son sitios web estructurados originalmente como diarios personales, basados en enlaces, noticias y opiniones que se actualizan de modo regular, escritos con un estilo informal y subjetivo.
Los bloguers, que constituyen una comunidad fuertemente autoreferencial, tienden a pensar que sólo se leen entre ellos, aunque lo cierto es que las bitácoras se han convertido en un sistema de alerta temprana, no sólo para los medios tradicionales, sino también para otros sectores empresariales, comenzando por la industria informática, lógicamente.
El más popular de los servidores de bitácoras, Blogger (www.blogger.com), lanzado en 1999 por la californiana Pyra, acaba de anunciar la existencia de un millón de usuarios registrados, a los que se suman los más de 50.000 de Radio UserLand (radio.userland.com) que crecen a un ritmo del 10% mensual, y los incontables usuarios de los sistemas independientes Greymatter (www.noahgrey.com/greysoft/) y Movable Type. (www.movabletype.org).
Los directorios y agrupaciones de bitácoras (webrings), revelan una creciente tendencia temática: hay 88 categorías de blogs en Eatonweb Portal (portal.eatonweb.com), así como una incipiente especialización por formatos (audioblogs, photoblogs y videoblogs). Los principales directorios hispanos muestran la vitalidad de este sistema de publicación en el entorno cultural iberoamericano: Bitácoras.net (bitácoras.net), Blogdir (blogdir.com) y Weblogs.com.ar (weblogs.com.ar), entre los principales.
La actualización regular, el carácter informativo, el dominio de los ámbitos temáticos y la mencionada autoreferencialidad (que se manifiesta en el blogroll, listado de bitácoras leídas a diario, el blogtracking, seguimiento de actualizaciones y enlaces cruzados, y la atención a las estadísticas de visitas) ha convertido a las bitácoras en un objetivo privilegiado de los buscadores, muy especialmente de Google (adorado por la comunidad blogui que le dedica bitácoras temáticas, como la imprescindible: google.dirson.com).
La blogósfera tiene, no obstante su propio buscador: Daypop (www.daypop.com), su conferencia académica. BlogTalk (blogtalk.net), su genealogía: BlogTree (www.blogtree.com), y los bloguers cuentan con su test de personalidad: BLOGinality (bloginality.love-productions.com), con su código: The Blogger Code (www.leatheregg.com/bloggercode/) y hasta con su juego del Amigo Invisible (www.awacate.com/amigo/), auténtico boom de visitas estas navidades.
Los bloguers españoles se han mostrado muy activos con motivo de la catástrofe del Prestige, tanto en la organización de la queja, mediante la puesta en marcha del mayor google bombing de la historia de Europa (www.librodenotas.com/mt/prestige.html), como en la gestión de la ayuda, que ha conducido al surgimiento de la ONG MundoActivo(www.mundoactivo.org). La industria informática, la comunidad educativa, los servicios de consultoría, las empresas de marketing, el sector editorial, hollywood, los medios de comunicación y los columnistas más prestigiosos, han comenzado a experimentar en la blogósfera las posibilidades de establecer nuevos vínculos con sus públicos y mercados.
Así es como nace la Blogonomía, entendida no solamente como el modo de convertir a las bitácoras en una fuente de ingresos, sino y sobre todo, como el estudio del impacto de este emergente medio de comunicación horizontal y universal, sobre la actividad económica y sobre la producción y difusión del conocimiento. Hoy, la clave de nuestra cultura y de nuestra economía.

viernes, noviembre 03, 2006

La Oreja De Van Gogh - La Playa

música que me recurda el primer día que conocí a mi amada esposa

Especial de Humor - Cluadio, Autori y el Chorri

Riete con los cómicos nacionales

Claudio Pizarro Comp.

Disfruta los éxitos de nuestro compatriota

Maradona - Ronaldihno- Zidane

LO Máximo del Fútbol Mundial

maradona the original

Lo mejor de Diego

jueves, noviembre 02, 2006

Ricardo Montaner - Castillo azul

Otro exito de Ricardo

Ricardo Montaner - Sera

Lo mejor de Ricardo