|
| 1 | +(* |
| 2 | + * EJERCICIO: |
| 3 | + * Muestra ejemplos de todas las operaciones que puedes realizar con cadenas de caracteres |
| 4 | + * en tu lenguaje. Algunas de esas operaciones podrían ser (busca todas las que puedas): |
| 5 | + * - Acceso a caracteres específicos, subcadenas, longitud, concatenación, repetición, |
| 6 | + * recorrido, conversión a mayúsculas y minúsculas, reemplazo, división, unión, |
| 7 | + * interpolación, verificación... |
| 8 | + * |
| 9 | + * DIFICULTAD EXTRA (opcional): |
| 10 | + * Crea un programa que analice dos palabras diferentes y realice comprobaciones |
| 11 | + * para descubrir si son: |
| 12 | + * - Palíndromos |
| 13 | + * - Anagramas |
| 14 | + * - Isogramas |
| 15 | + *) |
| 16 | + |
| 17 | +program fduron; |
| 18 | + |
| 19 | +{$APPTYPE CONSOLE} |
| 20 | + |
| 21 | +{$R *.res} |
| 22 | + |
| 23 | +uses |
| 24 | + System.SysUtils; |
| 25 | + |
| 26 | +//Palabras o frases que se leen igual al derecho y al reves |
| 27 | +function EsPalindromo(const Palabra1, Palabra2: String): Boolean; |
| 28 | +begin |
| 29 | + Result := True; |
| 30 | + var P := Palabra1 + Palabra2; |
| 31 | + P := P.Replace(' ', '').ToUpper; //Eliminar los espacios |
| 32 | + var Centro := P.Length div 2; |
| 33 | + for var C := 1 to Centro do |
| 34 | + if P[C] <> P[P.Length - C + 1] then |
| 35 | + Exit(False); |
| 36 | +end; |
| 37 | + |
| 38 | +//Palabra o frase formada a partir de una primera palabra o frase |
| 39 | +function EsAnagrama(const Palabra1, Palabra2: String): Boolean; |
| 40 | +var |
| 41 | + Idx: Integer; |
| 42 | +begin |
| 43 | + Result := True; |
| 44 | + var P1 := Palabra1.Replace(' ', '').ToUpper; //Eliminar los espacios |
| 45 | + var P2 := Palabra2.Replace(' ', '').ToUpper; //Eliminar los espacios |
| 46 | + |
| 47 | + if (P1.Length <> P2.Length) or (P1.Equals(P2)) then |
| 48 | + Exit(False); |
| 49 | + |
| 50 | + for var C := 1 to P1.Length do |
| 51 | + begin |
| 52 | + Idx := P2.IndexOf(P1[C]); |
| 53 | + P2 := P2.Remove(Idx, 1); |
| 54 | + end; |
| 55 | + |
| 56 | + Result := P2.IsEmpty; |
| 57 | +end; |
| 58 | + |
| 59 | +//Palabras o frases donde no se repite ninguna letra |
| 60 | +function EsIsograma(const Palabra: String): Boolean; |
| 61 | +var |
| 62 | + Idx: Integer; |
| 63 | +begin |
| 64 | + Result := True; |
| 65 | + var P1 := Palabra.Replace(' ', '').ToUpper; //Eliminar los espacios |
| 66 | + |
| 67 | + for var C := 1 to P1.Length do |
| 68 | + if P1.CountChar(P1[C]) > 1 then |
| 69 | + Exit(False); |
| 70 | +end; |
| 71 | + |
| 72 | +procedure DificultadExtra; |
| 73 | + |
| 74 | + procedure EvaluarPalabras(const Palabra1, Palabra2: String); |
| 75 | + begin |
| 76 | + if EsPalindromo(Palabra1, Palabra2) then |
| 77 | + WriteLn('>>Las palabras forman un palíndromo') |
| 78 | + else |
| 79 | + WriteLn('>>Las palabras NO forman un palíndromo'); |
| 80 | + |
| 81 | + if EsAnagrama(Palabra1, Palabra2) then |
| 82 | + WriteLn('>>Las palabras forman un anagrama') |
| 83 | + else |
| 84 | + WriteLn('>>Las palabras NO forman un anagrama'); |
| 85 | + |
| 86 | + if EsIsograma(Palabra1) then |
| 87 | + WriteLn('>>La primera palabra es un isograma') |
| 88 | + else |
| 89 | + WriteLn('>>La primera palabra NO es un isograma'); |
| 90 | + |
| 91 | + if EsIsograma(Palabra2) then |
| 92 | + WriteLn('>>La primera palabra es un isograma') |
| 93 | + else |
| 94 | + WriteLn('>>La primera palabra NO es un isograma'); |
| 95 | + end; |
| 96 | + |
| 97 | +var |
| 98 | + PrimeraPalabra: String; |
| 99 | + SegundaPalabra: String; |
| 100 | + Continua: Char; |
| 101 | +begin |
| 102 | + WriteLn; |
| 103 | + WriteLn('************************************************'); |
| 104 | + WriteLn(' DIFICULTAD EXTRA'); |
| 105 | + WriteLn(' Escribe dos palabras o frases para analizarlas'); |
| 106 | + WriteLn('************************************************'); |
| 107 | + WriteLn; |
| 108 | + repeat |
| 109 | + Write('Escribe la primera palabra o frase: '); |
| 110 | + ReadLn(PrimeraPalabra); |
| 111 | + Write('Escribe la segunda palabra o frase: '); |
| 112 | + ReadLn(SegundaPalabra); |
| 113 | + |
| 114 | + EvaluarPalabras(PrimeraPalabra, SegundaPalabra); |
| 115 | + |
| 116 | + WriteLn; |
| 117 | + Write('¿Deseas intentar otra vez? (S/N): '); |
| 118 | + ReadLn(Continua); |
| 119 | + until UpperCase(Continua) = 'N'; |
| 120 | +end; |
| 121 | + |
| 122 | +var |
| 123 | + Cadena1, Cadena2, Cad1EntreComillas: String; |
| 124 | + Resultado: Integer; |
| 125 | +begin |
| 126 | + Cadena1 := 'Cadena A'; |
| 127 | + Cadena2 := 'Cadena B'; |
| 128 | + |
| 129 | + //Existen varias versiones del método Compare, a continuación tres ejemplos: |
| 130 | + //Comparar dos cadenas: |
| 131 | + Resultado := String.Compare(Cadena1, Cadena2); |
| 132 | + //Comparar un substring de 6 caracteres iniciando en la posicion 0: |
| 133 | + Resultado := String.Compare(Cadena1, 0, Cadena2, 0, 6); |
| 134 | + //Comparar utilizando la cadena inicial como base: |
| 135 | + Resultado := Cadena1.CompareTo(Cadena2); |
| 136 | + //Resultado será < 0 cuando Cadena1 se encuentre antes de Cadena2 |
| 137 | + //Resultado será = 0 cuando ambas cadenas sean iguales |
| 138 | + //Resultado será > 0 cuando Cadena1 se encuentre después de Cadena2 |
| 139 | + |
| 140 | + if Resultado < 0 then |
| 141 | + WriteLn(Cadena1 , ' se ordena antes de ', Cadena2) |
| 142 | + else |
| 143 | + if Resultado > 0 then |
| 144 | + WriteLn(Cadena1, ' se ordena después de ', Cadena2) |
| 145 | + else |
| 146 | + WriteLn(Cadena1, ' y ', Cadena2, ' son iguales'); |
| 147 | + |
| 148 | + Cad1EntreComillas := Cadena1.QuotedString('"'); |
| 149 | + WriteLn(Cad1EntreComillas, ' en minusculas: ', Cadena1.ToLower); |
| 150 | + WriteLn(Cad1EntreComillas, ' contiene ', Cadena1.CountChar('a'), ' letras "a" '); |
| 151 | + WriteLn(Cad1EntreComillas, ' en Mayusculas: ', Cadena1.ToUpper); |
| 152 | + WriteLn(Cad1EntreComillas, ' contiene "ad": ', Cadena1.Contains('ad')); |
| 153 | + WriteLn(Cad1EntreComillas, ' sin comillas: ', Cad1EntreComillas.DeQuotedString('"') ); |
| 154 | + WriteLn(Cad1EntreComillas, ' termina con "A": ', Cadena1.EndsWith('A')); |
| 155 | + WriteLn(Cad1EntreComillas, ' inicia con "Cad": ', Cadena1.EndsWith('Cad')); |
| 156 | + WriteLn(Cad1EntreComillas, ' posición de "A": ', Cadena1.IndexOf('A') ); |
| 157 | + WriteLn(Cad1EntreComillas, ' posición de "A", "B" o "C": ', |
| 158 | + Cadena1.IndexOfAny(['A', 'B', 'C']) ); |
| 159 | + WriteLn(Cad1EntreComillas, ' en la posición 0 es el delimitador " : ', |
| 160 | + Cad1EntreComillas.IsDelimiter('"', 0) ); |
| 161 | + WriteLn(Cad1EntreComillas, ' está vacio: ', Cad1EntreComillas.IsEmpty); |
| 162 | + //Cadena1.IsNullOrEmpty |
| 163 | + //Cadena1.IsNullOrWhiteSpace |
| 164 | + WriteLn(Cad1EntreComillas, ' uniendo cadenas separadas con | : ', |
| 165 | + String.Join('|', [Cadena1, Cadena2, Cadena1]) |
| 166 | + ); |
| 167 | + WriteLn(Cad1EntreComillas, ' posición del último delimitador ["]: ', |
| 168 | + Cad1EntreComillas.LastDelimiter('"') |
| 169 | + ); |
| 170 | + WriteLn(Cad1EntreComillas, ' última posición de "na": ', |
| 171 | + Cad1EntreComillas.LastIndexOf('na') |
| 172 | + ); |
| 173 | + WriteLn(Cad1EntreComillas, ' removiendo 2 caracteres texto a partir de la posicion 3: ', |
| 174 | + Cad1EntreComillas.Remove(3, 2)); |
| 175 | + WriteLn(Cad1EntreComillas, ' En tamaño 15, rellenando con # a la izquierda: ', |
| 176 | + Cadena1.PadLeft(15, '#') ); |
| 177 | + WriteLn(Cad1EntreComillas, ' En tamaño 15, rellenando con # a la derecha: ', |
| 178 | + Cadena1.PadRight(15, '#') ); |
| 179 | + WriteLn(Cad1EntreComillas, ' reemplazando a por 4: ', Cadena1.Replace('a', '4') ); |
| 180 | + WriteLn('Separando ', Cad1EntreComillas, ' en elementos delimitados por ''a'' :'); |
| 181 | + var Splits := Cadena1.Split(['a']); |
| 182 | + for var Elemento in Splits do |
| 183 | + WriteLn(Elemento); |
| 184 | + |
| 185 | + WriteLn('Tamaño de ', Cadena1, ': ', Cadena1.Length); |
| 186 | + |
| 187 | + //Concatenación |
| 188 | + Cadena1 := ' ' + Cadena1 + Cadena2 + ' '; |
| 189 | + WriteLn('Cadena1 ahora es: ', Cadena1.QuotedString); |
| 190 | + WriteLn(Cadena1.QuotedString, ' sin espacios a la izquierda: ', |
| 191 | + Cadena1.TrimLeft.QuotedString); |
| 192 | + WriteLn(Cadena1.QuotedString, ' sin espacios a la derecha: ', |
| 193 | + Cadena1.TrimRight.QuotedString ); |
| 194 | + |
| 195 | + DificultadExtra; |
| 196 | + |
| 197 | +end. |
0 commit comments