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

27 comentarios:

  1. Aquí les dejo la solución del primero

    function rellenar_car(cual : char; cuantos : byte) : string;
    var
          cad : string;
          i : byte;
    begin
          cad := ''; (* cadena nula no tiene ningún caracter*)
          for i := 1 to cuantos do
          begin
                cad := cad + cual;
          end;
          rellenar_car := cad;
    end;

    ResponderEliminar
  2. 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.

    function limpiar_blancos_izq(cad : string) string;
    Begin
          if (pos(' ',cad) = 1)
          then while (pos(' ',cad) = 1) do
                      delete(cad, 1, 1)
          else (* nada que hacer *);
          limpiar_blancos_izq := cad;
    End;

    ResponderEliminar
    Respuestas
    1. una pregunta a que se refiere al decir que if (pos(' ',cad) = 1)
      el =1 ? y en el delete(cad, 1, 1) . muchas gracias .

      Eliminar
  3. 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.

    function limpiar_blancos_der(cad : string) string;
    Begin
          if (cad[ length(cad) ] = ' ')
                then while (cad[ length(cad) ] = ' ') do
                             delete(cad, length(cad), 1)
                else (* nada que hacer *);
    limpiar_blancos_der := cad;
    End;

    ResponderEliminar
  4. 4. Escriba una función que determine si una cadena esta vacia o no.

    Function cadena_vacia(cad : string) : boolean;
    Begin
          cadena_vacia := (ord(cad[0]) = 0);
          (* otra forma valida cadena_vacia := (length(cad) = 0); *)
    End;

    ResponderEliminar
  5. Fé de erratas;

    En los ejercicios 2 y 3, en la declaración de cabecera de las funciones se omitio accidentalmente el signo ":" para establecer el tipo de la función

    Así fué como quedaron declaradas, pero al emplearlas les daria un error de comiplación donde se les indicaria que se esperaba el signo ":"

    function limpiar_blancos_izq(cad : string) string;
    begin
    ...
    end;

    function limpiar_blancos_der(cad : string) string;
    begin
    ...
    end;

    Estas deben quedar realmente así:

    function limpiar_blancos_izq(cad : string) : string;
    begin
    ...
    end;

    function limpiar_blancos_der(cad : string) : string;
    begin
    ...
    end;

    ResponderEliminar
  6. 5. Desarrolle una función que elimine los espacios en blanco a ambos extremos de la cadena.

    function limpiar_blancos_extremos( cad : string) : string;
    begin
          if (pos(' ',cad) = 1)
                then while (pos(' ',cad) = 1) do
                      delete(cad,1,1)
                else (* Nada que hacer *);
          if (cad[length(cad)] = ' ')
                then while (cad[length(cad)] = ' ') do
                      delete(cad,length(cad),1)
                else (* Nada que hacer*);
          limpiar_blancos_extremos := cad;
    end;

    ResponderEliminar
  7. 6. Implemente una función que devuelva una cadena invertida.

    function invertir_cadena( s : string) : string;
    var
          c : string;
          i : byte;
    begin
          c := ''; (*se inicializa cadena nula *)
          for i := length(s) downto 1 do
                c := c + s[i];
          invertir_cadena := c;
    end;

    ResponderEliminar
  8. 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.

    function espalindrome(s : string) : boolean;
    var
          inv : string;
          i : byte;
    begin
          inv := ''; (* inicializar cadena nula*)
          for i := length(s) downto 1 do
                inv := inv + s[i];
          espalindrome := (s = inv);
    end;

    ResponderEliminar
  9. 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.

    function escapicuo(n : longint) : boolean;
    var
          s : string;
          inv : string;
          i : byte;
    begin
          inv := ''; (*inicializar en cadena nula*)
          str(n,s);
          for i := length(s) downto 1 do
                inv := inv + s[i];
          escapicuo := (s=inv);
    end;

    ResponderEliminar
  10. Carlos Prado exp 22405
    Las cadenas de caracteres o string Consiste en una serie de secuencias de caracteres cuyo numero de longitud (longinth) puede estar entre 0 y 255 caracteres.
    Se puede definir un longitud de cadena poniéndoles string[n] donde n esta entre 0 y 255.
    Su longitud pueder ser tanto física como lógica, la fsica corresponde al máximo numero de carcteres que pueda almacenar y la lógica al numero de caracteres que tiene en un instante determinado.
    Concatenar
    Operador para concatenar es: (+) , el cual se utiliza para unir varias cadenas en una sola
    Ejemplo:
    Cade1:=(‘esto es un ejemplo’);
    Cade2:=(‘de concatenación de cadenas’);
    cadR:=cad1+ cad2;
    la función concat realiza la misma función que el operador
    Ejemplo
    Funtion concat(cad1,cad2…,):string;

    ResponderEliminar
  11. cadena en ingles la llamamos (string) el concepto que tenemos hacerca de ella es una secuencia de conjuntamente ordenadas de una longitud arbitraria, la cual la conforman elementos que pertenecen a un lenguaje o un alfabeto y esta esta conformada por letras, signos, simbolos u otros signos

    ResponderEliminar
  12. String: Turbo Pascal tiene el tipo de dato string que almacena información de texto. Este dato se puede almacenar en constantes y en variables de cadena. Una variable de cadena está declarada para la palabra string seguida de la longitud máxima de la cadena encerrada entre corchetes.

    ResponderEliminar
  13. los string son como archivo de carcteres cuya
    funcion ,son diversa o puede ser conbinada con otro tipo de herramienta, en pascal
    ejemplo
    funtion nombre(cad:=string):strg;
    var
    m:byte;nomb:string
    begin
    nomb:=''.
    for n:=length(caddown 1do
    nomb:=concat(inv,cad[n];
    nomb:=nomb
    end;
    begin
    clrcr;
    write('cadena:');
    readln(n);
    write('nombre:',nombre(n));
    readkay;
    end:

    ResponderEliminar
  14. Algunos Tips de interes...

    Para definir un conjunto de char podemos hacer la siguiente declaración:

    Type
          Tconjunto_ch = set of char;

    Para declarar una variable del tipo conjunto de char
    var
          conjuntovalido : Tconjunto_ch;

    Asignar un conjunto de char a la variable del tipo conjunto:
          conjuntovalido := ['a'..'z'];

    Verificar que un caracter leido este dentro de un conjunto valido

          ch := readkey;
          if ch in conjuntovalido then begin
                                                        ...(* Hacer lo necesario ya que se cumple *)
                                                        end
                                                 else begin
                                                        ...(* Hacer lo necesario si no se cumple *)
                                                        end;

    validar que se mantenga en un ciclo mientras la tecla no este en un conjunto valido de salida

    var
         conjunto_salida : Tconjunto_ch;
         ch : char;
    begin
         conjunto_salida := [#13,#27]; (* Tecla Enter y Tecla escape respectivamente *)

    repeat
         ch := readkey;
        ... (* Aqui va el codigo necesario ara hacer lo que tenga que hacerse *)
    until ch in conjunto_salida;
    end.


    Estos son los codigo de algunas teclas importantes

    Const
    Especial = #0;
    Enter = #13;
    Escape = #27;
    ArrowLeft = #75;
    ArrowRigh = #77;
    ArrowUpper = #72;
    ArrowDown = #80;
    Inicio = #71;
    Fin = #79;
    Insertar = #82;
    Suprimir = #83;
    Retroceso = #8;
    F1 = #59;
    F2 = #60;

    Las teclas especiales como las de dirección arriba, abajo, izquierda, derecha, F1, F2 entre otras se leen en dos partes la primera debe ser al hacer un readkey #0 que indica que es una tecla especial, luego se hace otro readkey para leer la segunda parte de la tecla, vean arriba unas constantes definidas para ello.

    para borrar un caracter en la pantallay dejar el curso en esa posición en espera de una tecla se puede hacer así:

    write(#8#32#8); (* retroceso o backspace, barra espaciadora o espacio en blanco, backspace o retroceso, respectivamente *)

    Habla AMIGO y se te abriran las puertas

    ResponderEliminar
  15. Una interesante función para hayar la potecia de un número:

    function potencia(base, exp : integer) : longint;
    var
          p : longint;
          i : integer;

    begin
          if (exponente=0)
          then p := 1
          else begin
                    p := base;
                    for i := 2 to exponente do
                           p := p*base;
                  end;
          potencia := p;
    end;

    ResponderEliminar
  16. Una manera de llevar un numero decimal a base binaria
    ...
    if (n=0)

    then cbin := '0'

    else while (n>0) do

    begin

    resto := n mod 2;
    (* se determina el resto de la divición entera entre 2*)
    str(resto,nb);
    (* obtengo el digito binario *)
    cbin := concat(nb, cbin);
    (* construyo el numero binario*)
    n := n div 2;
    (* realizo la divición entera*)
    end;
    dec2bin := cbin; (* retorna la cadena con el numero binario *)
    ...

    ResponderEliminar
  17. Para las otras conversiones de decimal a otra base es de forma análoga, la variación esta de decimal a hexadecimal dado que los números 10, 11, 12, 13, 14, 15 y 16 son en base hexadecimal A, B, C, D, E y F respectivamente

    se debe agregar una comprobación luego de haber obtenido el resto de la división entera por 16, parecida a esta:

    ...
    case resto of
                0..9 : str(resto,nh);
                10..15 : nh := chr(55+resto); (* Ord('A')=65,...Ord('F')=70 *)
    end;
    ...

    la variable nh se le asigna el dígito de la cadena hexadecimal resultante del resto de la división entera por 16

    ResponderEliminar
  18. una manera de llevar de binario a decimal

    ...
    acum := 0;

    p := length(nbin);
    (* longitud de la cadena binaria*)

    for i := p downto 1 do
    begin

    b := ord(nbin[i])-48;
    (* Ord('0')=48 y Ord('1')=49 *)
    if b=1 then acum := acum + (b*potencia(2,p-i))
    else; (*
    nada que hacer *)
    end;

    bin2dec := acum;
    ...

    ResponderEliminar
  19. De manera análoga se haría para la conversión de otra base a decimal, considerando los casos particulares como por ejemplo de base hexdecimal a decimal

    Deseo que les sirvan todos estos tips de ayuda, y sobre todo que sus comentarios hagan crecer este blog....

    habla AMIGO y se te abrirán las puertas...

    ResponderEliminar
  20. estoy haciendo un programa que tengo que por ejemplo introducir un nombre completo y de ahi que salga en ascii despues el primer nombre en binario el segundo en octal el primer apellido en decimal y el segundo apellido en hexadecimal ya tengo los primeros dos me falta el de octal,decimal,hexadecimal alguna idea o alguien que me ayude

    ResponderEliminar
    Respuestas
    1. Hola, debes obterner el codigo ascci de cada caracter que conforma el nombre. el codigo ASCII de la letra "A" es 65, al tener este numero lo conviertes a la base numerica que necesistes, tomando en cuenta que debes concatenar los carecteres resuktante si fuera el caso.

      Eliminar
  21. Hola alguien me puede ayudar con algunos ejercicios en diagrama de flujo

    ResponderEliminar
  22. hola oye me podrias ayudar con un programa de cadenas con caracteres?

    ResponderEliminar
  23. Hola me podrian ayudar en como realizar una funcion que muestra la palabra mas larga de una cedena?

    ResponderEliminar