Busqueda

Resultados

miércoles, 28 de octubre de 2009

Ejercicios sobre cadenas (string) turbo pascal

Saludos acá les dejo varios ejercicios tipo examen para que los desarrollen, practiquen y tomen fortalezas, adelante muchachos les invito a que los hagan todos y cada uno de ellos

  1. Desarrolle una función que devuelva una cadena con un caracter repetido n veces.
  2. Implemente una función que elimine los caracteres en blanco a la izquierda de una cadena y retorne esta sin los espacios en blanco a la izquierda.
  3. Realice una función que elimine los caracteres en blanco a la derecha de una cadena y retorne ésta sin los blancos a la derecha.
  4. Escriba una función que determine si una cadena esta vacia o no.
  5. Desarrolle una función que elimine los espacios en blanco a ambos extremos de la cadena.
  6. Implemente una función que devuelva una cadena invertida.
  7. Un palíndromo es una palabra que se lee igual hacia adelante que hacia atras. Desarrolle una función que determine si una palabra es palíndrome o no.
  8. Un número capicúo se refiere a cualquier número que se lee igual de izquierda a derecha y de derecha a izquierda. Escriba una función que determine si un número es capicúo o no.
  9. Escriba una función que determine la cantidad de minusculas en una cadena.
  10. Escriba una función que determine la cantidad de mayusculas en una cadena.
  11. Desarrolle una función que calcule la cantidad de veces que se repite un caracter dado en una cadena.
  12. Escriba una función que remplace un caracter por otro en una cadena.
  13. desarrolle una función que lea caracter a caracter, mostrandolo por pantalla, mediante el teclado y que valide que el caracter pertenezca a un conjunto valido de caracteres devolviendo la cadena resultante.
  14. Realice una función que compare dos cadenas y que devuelva 0 si cad1 es mayor que cad2, 1 si cad1 es igaul a cad2, y 2 si cad1 es mayor que cad2.
  15. Desarrolle una función que devuelva una cadena en minusculas.
  16. Elabore el conjunto de funciones necesarias para convertir de una base númerica a otra base. Es decir, decimal a binario, decimal a octal, decimal a hexadecimal, octal a binario, octal a hexadecimal, octal a decimal, hexadecimal a binario, hexadecimal a octal, hexadecimal a decimal, binario a decimal, binario a octal y binario a hexadecimal.
Si los desarrollan les aseguro que saldran bien..., les sugiero hacer el algoritmo primero y luego la implemtación

martes, 27 de octubre de 2009

STRING (Cadena de caracteres)

El tipo de datos STRING guarda información de texto. Una variable STRING puede tener de 1 a 255 caracteres de longitud, aunque ocupa un byte más que su longitud definida.

Por ejemplo, si se declara una variable STRING de 10 caracteres de longitud (cad:string[10];) la variable ocupa 11 bytes de memoria. Esto se debe a que el primer byte (byte de longitud) de cada variable STRING guarda la longitud de la cadena que en ese momento está contenida en la variable.

Si una variable STRING de 10 caracteres contiene la palabra "hola" el primer byte de memoria tendra el valor binario 4, indicando que la variable contiene cuatro caracteres. En ese caso, los últimos seis caracters de la variable son ignorados por los procedimientos de manipulación de cadenas de turbo pascal.

0 1 2 3 4 5 6 7 8 9 10
4 h o l a } # - X ¬ %

(00000100)Observe que el primer byte (el byte 0) no es el caracter "4", sino el número 4 en binario y que los últimos seis bytes contienen datos aleatorios.

Veamos algunos ejemplos visto en clases con manipulación de cadenas:

(* Funcion que devuelve la posición de un caracter en la cadena especificada *)
function poscar(cadena : string; cual : char) : byte;
var
pos, (* para devolver la posición de la cadena *)
i : byte; (* para recorrer cada caracter de la cadena *)
encontrado : boolean; (* para determinar si encontro el caracter buscado *)
begin
pos := 0;
encontrado := false;
i := 1;
(* ord(cadena[0]) devuelve la longitud de la cadena *)
while (not encontrado) and (i<ord(cadena[0])) do
begin
if (cadena[i]<>cual)
then begin
pos := i;
encontrado := true;
end
else i := i + 1;
end;
poscar := pos; (* retorna el valor de la funcion *)
end;

(* Funcion que cuenta cuantas veces se repite un caracter en una cadena*)
function contarcar(cadena : string; cual : char) : byte;
var
contador, (* para contar el caracter *)
i : byte; (* para recorrer cada caracter de la cadena *)
begin
contador := 0;
(* ord(cadena[0]) devuelve la longitud de la cadena *)
for i := 1 to ord(cadena[0]) do
begin
if (cadena[i]=cual)
then contador := contador + 1
else (* nada que hacer*);
end;
contarcar := contador; (* retorna el valor de la funcion *)
end;

Función Length

Para conocer la longitud de una cadena utilizamos la función Length, la longitud es la cantidad de caracteres que contiene la cadena en un momento determinado.

Su sintaxis es: Length (cadena);

La función regresa un valor entero.


Función Concat

La función concat produce los mismos resultados que la concatenación, es posible incluir cualquier número de cadenas que se necesiten concatenar.

La suma de las cadenas no deberá sobrepasar la longitud que la variable, a la cual se asignará dicha suma, puede manejar. Ejemplo:

Cadena := Concat (Cad1, cad2, cad3);


Función Pos

La función Pos nos sirve para localizar una determinada cadena dentro de otra, en otras palabras para verificar si una cadena es subcadena de otra segunda.

Los parámetros que requiere son: la cadena que se buscará y la cadena donde se buscará la primera:

Pos (Cadena1, Cadena2);

Ejemplo:
Cadena := 'Domingo Lunes Martes Miercoles Jueves Viernes Sabado';
WriteLn(Cadena);
WriteLn(Pos('Lunes', Cadena)); {Muestra 9}
WriteLn(Pos('Jueves', Cadena)); {Muestra 32}
WriteLn(Pos('Ayer', Cadena)); {Muestra 0}

Función Copy

La función copy regresa una subcadena de una variable o constante dada como parámetro. Su sintaxis es:

Copy (Cadena, Inicio, Cantidad);

Donde Cadena es la fuente de la subcadena, Inicio es la posición desde la cual se obtendrá la subcadena y Cantidad es el número de caracteres que se extraerán.

Los valores de Inicio y Cantidad deben ser de tipo entero.

Ejemplo:
Cadena := "Nuevos horizontes";
WriteLn (Copy(Cadena, 8, 10)); {Visualiza: horizontes}

Fución Insert

El procedimiento Insert sirve para insertar una cadena dentro de otra en alguna posición determinada. Sintaxis:

Insert (Cadena1, Cadena2, Posición)

Donde Cadena1 es la que se insertará, Cadena2 es donde se insertará y Posición es el lugar donde se insertará. El parámetro Posición debe ser de tipo entero.

Procedimiento Delete

Este procedimiento elimina un determinado número de caracteres de una cadena. Su sintaxis es:

Delete (Cadena, Inicio, Número)

Cadena es la variable en la cual se eliminarán los caracteres, Inicio es la posición del primer caracter a eliminar y Número es la cantidad de caracteres que se borrarán.

Fución UpCase

La función UpCase regresa la letra mayuscula correspondiente al caracter dado como parámetro. Es muy común trabajando con cadenas que se quiera convertir una que contiene un número a su valor numérico, para poder utilizarlo en operaciones matemáticas, así como convertir un número a su equivalente en una cadena.

Procedimiento Str

El procedimiento Str obtiene una cadena a partir de un valor numérico. Su sintaxis es:

Str(Valor, Cadena)

Donde valor es el número a convertir y Cadena es la variable donde se almacenará la cadena ya convertida.

Procedimiento Val

Este procedimiento convierte una cadena en un valor de tipo numérico, el problema con esta función es que si la cadena no esta formada exclusivamente de números siguiendo las reglas para el tipo de datos que se vallan a obtener se generará un error. Sintaxis:

Val (Cad, Num, Código)

Cadena contiene la cadena que será procesada, Num es la variable de tipo numérico donde se guardará el valor de la cadena y Código es una variable de tipo entero (Integer) que contendrá el valor de 0 si no hubo errores y un valor diferente en caso de que no se haya podido convertir la cadena, el valor de Código representa la posición de la cadena donde ocurrio el error.

miércoles, 14 de octubre de 2009

Archivos

Muchas de las aplicaciones que ustedes han programado se hicieron usando la memoria principal o memoria RAM como único medio de almacenamiento (usando variables, arreglos, registros o estructuras de datos mas complejas, las recuerdan ¿verdad?) , con los problemas que esto representa: la volatilidad de la memoria RAM; es decir, si se apaga la computadora se pierden los datos. De ahí surge la necesidad de almacenar dichos datos de forma permanente que permita retenerlos en ciertos dispositivos de almacenamiento secundario por un período de tiempo largo sin necesidad de suministrarles energía, de tal forma que permitan transportarlos y utilizarlos en otro equipo.

El procesamiento que realiza una computadora es tarea absoluta del microprocesador en conjunción con la memoria principal; es decir, los dispositivos de almacenamiento secundario (diskettes, discos duros, CDs, flash drives, etc.) no procesan datos, sólo los almacenan.

Esto repercute de manera significativa al momento de programar archivos, ya que para hacerle modificaciones a los datos de un registro previamente almacenado es necesario primero “cargarlo” en la memoria principal, es decir, localizar el registro en el archivo y leerlo para colocar sus datos en la memoria RAM, ahí modificarlo y posteriormente grabarlo en la misma posición en la que se encontraba.

Recordemos algunas definiciones vistas en clases:

Campo: características de ciertos objetos de estudio o condiciones particulares de situaciones dadas. Por ejemplo un producto tiene los siguientes campos: codigo, marca, peso, presentación, fecha de elaboración y fecha de vencimiento. Cada campo es definido por un tipo de dato.
Registro: una combinación de otros tipos de datos en un nuevo tipo de datos. Se puede decir además que es el conjunto completo de datos relacionados pertenecientes a una entrada.

sigamos recordando
Type
Tipo_registro = Record
no_prod : integer;
descrip : string[30];
cantidad: integer;
precio : real;
garantia: char;
End;

Var
Registro : Tipo_registro;

Así pues tenemos que un archivo en términos informáticos es una colección de datos que tiene un nombre y se guardan en dispositivos de almacenamiento secundario, los cuales pueden ser magnéticos, ópticos, electrónicos, etc. P. ejem. Diskettes, discos duros, CD´s, ZIP drives, flash drives, memory sticks, entre otros.

Clasificación por tipo de contenido:
Existen muchas clasificaciones de archivos de acuerdo a diferentes criterios o aplicaciones. Aquí se presenta una muy importante: de acuerdo al contenido de Texto y Binario.

Archivos de texto : Son aquellos que pueden contener cualquier clase de datos y de tal maneraque son “entendibles” por la gente. Los datos en un archivo de texto se almacenan usando el código ASCII, en el cual cada carácter es representado por un simple byte. Debido a que los archivos de texto utilizan el código ASCII, se pueden desplegar o imprimir. En este tipo de archivos, todos sus datos se almacenan como cadenas de caracteres, es decir, los números se almacenan con su representación ASCII y no su representación numérica.

Archivos binarios: En este tipo de archivos también se pueden almacenar diferentes tipos de datos incluyendo datos numéricos; sin embargo, cabe destacar que los datos numéricos se graban con su representación binaria (no con su representación ASCII), por tal razón, cuando se despliegan con un editor de textos o por medio de comandos del sistema operativo, aparecen caracteres raros que no se interpretan.

Clasificacion por tipo de acceso:

Archivos secuenciales: Como su nombre lo indica, en este tipo de archivos los registros se graban en secuencia o consecutivamente y deben accesarse de ese mismo modo, es decir, conforme se van insertando nuevos registros, éstos se almacenan al final del último registro almacenado; por lo tanto, cuando se desea consultar un registro almacenado es necesario recorrer completamente el archivo leyendo cada registro y comparándolo con el que se busca. En este tipo de archivo se utiliza una marca invisible que el sistema operativo coloca al final de los archivos: EOF (End of File), la cual sirve para identificar dónde termina el archivo.

Archivos directos : A diferencia de los archivos secuenciales, en los archivos directos no esnecesario recorrerlo completamente para acceder un registro en particular, sino se puede colocar el apuntador interno del archivo directamente en el registro deseado, permitiendo con esto mayor rapidez de acceso. Cabe destacar que para reposicionar este apuntador se utiliza el comando SEEK indicándole la dirección del registro que se desea.

Enlace de ínteres:
Manejo de archivos es pascal

viernes, 9 de octubre de 2009

Sesión de nivelación

Saludos chicos;

Para los dias Lunes 19, Lunes 26 de octubre y Lunes 02 de noviembre luego de nuestra sesión de clases normal, se haran unas sesiones para nivelar sus conocimientos en algoritmica.

En este sentido les extiendo la invitación a participar en estas actividades y asi reforzar sus conocimientos, aclarar dudas y practicar un poco más.

Así que apunten sus comentarios y opiniones para esta idea.

NOTA: envien por correo la practica sobre arreglo de registros de la torrefactora, recuerden que deben indetificarla con sus nombre y apellidos, así como con número de expediente y cédula. deben hacerlo antes del día 12 de octubre del 2009.
mi correo es: tomzambrano@gmail.com

Atte Tom Zambrano

"El hombre inteligente no es aquel que lo sabe todo, sino aquel que sabe aplicar lo poco que sabe"
Zilver sTone