• Jueves 18 de Abril de 2024, 05:39

Autor Tema:  Array De Caracteres  (Leído 3108 veces)

.:Kioon:.

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Array De Caracteres
« en: Viernes 10 de Diciembre de 2004, 11:06 »
0
Hola a tod@s.

  Desde hace dias, estoy metido en un bucle  :huh: que hace que no pueda salir. Tengo que hacer un ejercicio y no sigo adelante. Imaginaros, tenermos un array de caracteres y me piden que tengo que poner en mayusculas y centrarlo (tb subrayarlo) el titulo que como podemos ver a continuación esta entre &&. Pues cuando utilizo un FOR parece que no me deja, dice expresion no valida. Agradeceria a todo el mundo que me pueda ayudar!!!!!

PROGRAM arrCaracteres;

USES crt;

CONST

bajo=1;
alto=499;

TYPE

    intervalo=bajo..alto;

VAR    cadena:ARRAY [intervalo] OF CHAR;


VAR

    i,n     :   INTEGER;
    index   :   intervalo;
    longitudCadena,posiciona:BYTE;
    carac   :   CHAR;


BEGIN

    cadena:=('&colof¢n&Luz...$Cuando mis l grimas te alcancen$la fusi¢n de mis ojos$ya no ser  llorar$sino ver.$&abrojos&A un tal q asesin¢ a diez$y era la imagen del vicio,$muerto,el Soberano Juez$le salv¢ del sacrificio');
    longitudCadena:=LENGTH(cadena);
    carac:='&';
    clrscr;
    WRITELN ('');
    WRITELN (' ========================');
    WRITELN (' POESIAS');
    WRITELN (' ========================');
    WRITELN ('');
    WRITELN ('');

    FOR i:=LOW(cadena) TO longitudcadena DO

        FOR cadena='&' TO '&' DO <<<<<<<<<<<<<NO ME DEJA

SALUDOS
JESÚS

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Array De Caracteres
« Respuesta #1 en: Viernes 10 de Diciembre de 2004, 15:29 »
0
Tenes que tener en cuenta que ne le lenguaje Pascal las cadenas son esto:
Código: Text
  1.  
  2. type
  3.    String = packed array[1..255] of char;
  4.  
  5.  

"packed"  es para que no malgaste memoria.

por esa razon, si quieres recorer una cadena caracter por caracter tienes que hacer:
Código: Text
  1.  
  2. var
  3.   Cadena: string[255];  {la m'axima longitud permitida]
  4.    i : integer;
  5. begin
  6.   Cadena := 'Algo escrito por aqui jfjfiejdifjfusdafjsadfi';
  7.    for i := 1 to Length(Cadena) do
  8.    begin
  9.        Cadena[i] := upCase(Cadena[i]); {esto lo pasa a mayusculas}
  10.     end;
  11. end.
  12.  
  13.  
  14.  

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Array De Caracteres
« Respuesta #2 en: Viernes 10 de Diciembre de 2004, 15:38 »
0
Para centrar la cadena tienes que saber su longitud con Length().
Esta longitud tiene que ser menor a 80 (sino no entra en una linea de la pantalla)
Para calcular el espacio a dejar al pricipio(tiene que ser simetrico con el final) haces:
 
Código: Text
  1.  
  2. EspasioLibre := 80 - Length(cadena) div 2;  
  3. {DIV es '/' de enteros, }
  4. for i := 1 to EspacioLibre do  Write(' ');
  5. Write(cadena);{se escribe luego de dejar espacios necesarios}
  6.  
  7.  

.:Kioon:.

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Array De Caracteres
« Respuesta #3 en: Viernes 10 de Diciembre de 2004, 19:12 »
0
Hola a todos.

   Ante todo.. Muchas Gracias!! La verdad es que no poseo mucha experiencia en PASCAL, por lo que tengo unas duditas.

var
 Cadena: string[255];  {la m'axima longitud permitida]
  i : integer;
begin
 Cadena := 'Algo escrito por aqui jfjfiejdifjfusdafjsadfi';
  for i := 1 to Length(Cadena) do     <<----- Me dice que tome valor la i de 1 hasta la longitud de la cadena
  begin
      Cadena := upCase(Cadena); {esto lo pasa a mayusculas}
   end;
end.

  Pero si yo quiero que de la cadena escrita 'Algo escrito por aqui jfjfiejdifjfusdafjsadfi' me ponga en mayusculas de la primera e hasta la o de "por" y el resto lo deje IGUAL ¿Cómo lo hago?

GRACIAS por todo!!
Jesús  :D

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Array De Caracteres
« Respuesta #4 en: Sábado 11 de Diciembre de 2004, 01:45 »
0
Citar
Pero si yo quiero que de la cadena escrita 'Algo escrito por aqui jfjfiejdifjfusdafjsadfi' me ponga en mayusculas de la primera e hasta la o de "por" y el resto lo deje IGUAL ¿Cómo lo hago?
Código: Text
  1.  
  2.  while i &#60;= Length(Cadena) do &#60;&#60;----- Me dice que tome valor la i de 1 hasta la longitud de la cadena
  3. begin
  4.    if  Cadena[i] = 'e' then
  5.     begin
  6.       while Cadena[i] &#60;&#62; 'o' do
  7.        begin
  8.            Cadena[i] := upCase(Cadena[i]); {esto lo pasa a mayusculas}
  9.             i:=i+1;
  10.         end;
  11.      end
  12.     else i:=i+1;
  13. end;
  14.  
  15.  

Empiesa desde el principio de la cadena, si encuentra la letra 'e' empieza pasar todo a mayuscula hasta que se encuentra con la letra 'o'.


Citar
hasta la o de "por"

Esta o es la segunda
Código: Text
  1.  
  2. Algo escrito por aqui jfjfiejdifjfusdafjsadfi
  3. -------c----1---2
  4.  
  5.  

Como es la segunda, no tenes manera de darte cuenta. Tendras que utilizar caracteres menos repetidos como:"$", "@" u otros.

.:Kioon:.

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Array De Caracteres
« Respuesta #5 en: Sábado 11 de Diciembre de 2004, 21:01 »
0
Hola Eugenio!

       Muchas Gracias por todo lo que me estás ayudando. Por favor, te dejo mi dirección de correo ya que me apetece mandarte un correo con lo que me sale y me ayudes si quieres y no sé tu e-mail. El mio es jgarrid2@hotmail.com

Saludos y Gracias
Jesús :huh:

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Array De Caracteres
« Respuesta #6 en: Sábado 11 de Diciembre de 2004, 23:13 »
0
Citar
Muchas Gracias por todo lo que me estás ayudando
De nada, para esto está el foro

Citar
no sé tu e-mail.
En mi perfil están las direcciones. (hacé click en mi nick para ver el perfil)

Citar
mandarte un correo con lo que me sale
No veo cual es el problema de postearlo aqui (por supuesto usando el boton  CODE para que se vea mejor, está arriba del cuedro en donde escribes el mensaje )

 :hola:

.:Kioon:.

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Array De Caracteres
« Respuesta #7 en: Domingo 12 de Diciembre de 2004, 10:47 »
0
Hola a tod@s.

      Bueno.. os explico que me pasa. Después de las modificaciones que he estado realizando, cuando se ejecuta el programa (si quereis lo podeís comprobar) la cadena, queda tal y como está sin cambiar las letras  :blink:

Código: Text
  1.  
  2. PROGRAM arrPosicion;
  3.  
  4. USES crt;
  5.  
  6. CONST
  7.  
  8. bajo=1;
  9. alto=499;
  10.  
  11. TYPE
  12.  
  13.     intervalo=bajo..alto;
  14.  
  15. VAR    cadena:ARRAY [intervalo] OF CHAR;
  16.  
  17.  
  18. VAR
  19.  
  20.     i,n     :   INTEGER;
  21.     index   :   intervalo;
  22.     longitudCadena,posiciona:BYTE;
  23.     carac   :   CHAR;
  24.  
  25.  
  26. BEGIN
  27.  
  28.     cadena:=('&colof¢n&Luz...&#036;Cuando mis l grimas te alcancen&#036;la fusi¢n de mis ojos&#036;ya no ser  llorar&#036;sino ver.&#036;&abrojos&A un tal q asesin¢ a diez&#036;y era la imagen del vicio,&#036;muerto,el Soberano Juez&#036;le salv¢ del sacrificio');
  29.     longitudCadena:=LENGTH(cadena);
  30.  
  31.     clrscr;
  32.     WRITELN ('');
  33.     WRITELN (' ========================');
  34.     WRITELN (' POESIAS');
  35.     WRITELN (' ========================');
  36.     WRITELN ('');
  37.     WRITELN ('');
  38.  
  39.      FOR i:=1 TO longitudCadena DO
  40.  
  41.         BEGIN
  42.  
  43.             IF cadena[i] = '&' THEN
  44.  
  45.               BEGIN
  46.  
  47.              WHILE cadena[i] &#60;&#62; '&' DO
  48.  
  49.                     BEGIN
  50.  
  51.                     cadena[i] := upCase(cadena[i]); {esto lo pasa a mayusculas}
  52.  
  53.                 i:=i+1;
  54.  
  55.                     END;
  56.  
  57.             END
  58.  
  59.  
  60.              ELSE i:=i+1;
  61.  
  62.      END;
  63.  
  64.      WRITELN (cadena);
  65.  
  66. END.
  67.  
  68.  
  69.  

          Agredecería mucho a quien me ayudase.

Saludos
Jesús  :hola:

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Array De Caracteres
« Respuesta #8 en: Lunes 13 de Diciembre de 2004, 14:26 »
0
Despues de ver un poco tu código está esto:
Código: Text
  1.  
  2.  FOR i:=1 TO longitudCadena DO  *****{esto tiene que ser un while i &#60;=  longitud}
  3.        BEGIN
  4.            IF cadena[i] = '&' THEN
  5.               BEGIN
  6.                I := I+1; ****se ejecuta una vez sola avanzando en la cadena para que
  7.                                      la condicion siguiente pueda ser cierta alguna vez.
  8.             WHILE cadena[i] &#60;&#62; '&' DO *** sin el I+1 esto siempre era falso....
  9.                    BEGIN
  10.                    cadena[i] := upCase(cadena[i]); {esto lo pasa a mayusculas}
  11.                     I := I+1;  
  12.                    END;
  13.            END
  14.             ELSE i:=i+1;
  15.     END;
  16.  
  17.  

Otra cosa más....

Si lo que quieres hacer es pasar a mayusculas partes de la cadena, el proncipio y el final tendrian que ser marcados con distintos simbolos o sea :
principio-final
[-]
{-}
(-)
&-%
etc  
Sino el final de una, marca el principio de otra.....

Segun veo utilizas el FREE PASCAL que yo dezconozco sus sosillas.....

Lo que te paso a continucacion es un prog qeu toma una cadena y pasa a mayusculas    todo lo que este entr llaves {}...

Tambien lo probé en Free Pascal y anduvo bien.

<!--xc1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>XCODE </td></tr><tr><td id='XCODE'><!--exc1-->

program mensaje;
uses CRT;
var
 i: integer;
 s: string;  {esta es la cadena proncipal en la cual entran 255 caracteres}
             {si necesitas m'as de 255 caracteres tendras qeu usar m'as de una}
begin
 s := '{estara en mayusculas}no Se AlTeRa{se pasa a Mayusculas} queda IgUaL{adivina}';
 ClrScr;
 WriteLn('Cadena antes: ', s);
 while i<= Length(s) do
 {recorre toda la cadena}
 begin
   if S[i] = '{' then {Hay que pasar todo ma mayusculas
   hasta que se encuentra con la llave de cerrar}

   begin
     while s[i] <> '}' do
     begin
       s[i] := upCase(s[i]);
       i := i + 1;
     end;
   end
   else
     i := i + 1; {sigue avanzando por si no encuentra nada}
 end; {del While i<length}
 WriteLn('Cadena despues: ', s);
 Readln;
end.
<!--xc2--></td></tr></table><div class='postcolor'><!--exc2-->