Skip to content

Commit 6fbf85e

Browse files
fduron@qualit.com.mxfduron@qualit.com.mx
authored andcommitted
#4 - Delphi
1 parent d22519e commit 6fbf85e

File tree

1 file changed

+197
-0
lines changed
  • Roadmap/04 - CADENAS DE CARACTERES/delphi

1 file changed

+197
-0
lines changed
Lines changed: 197 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,197 @@
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

Comments
 (0)