Skip to content

Commit 60b2b4b

Browse files
authored
Merge pull request mouredev#6719 from fduron/main
#5 - Delphi
2 parents 19cb901 + 0e8686a commit 60b2b4b

File tree

1 file changed

+133
-0
lines changed

1 file changed

+133
-0
lines changed
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
(*
2+
* EJERCICIO:
3+
* - Muestra ejemplos de asignación de variables "por valor" y "por referencia", según
4+
* su tipo de dato.
5+
* - Muestra ejemplos de funciones con variables que se les pasan "por valor" y
6+
* "por referencia", y cómo se comportan en cada caso en el momento de ser modificadas.
7+
* (Entender estos conceptos es algo esencial en la gran mayoría de lenguajes)
8+
*
9+
* DIFICULTAD EXTRA (opcional):
10+
* Crea dos programas que reciban dos parámetros (cada uno) definidos como
11+
* variables anteriormente.
12+
* - Cada programa recibe, en un caso, dos parámetros por valor, y en otro caso, por referencia.
13+
* Estos parámetros los intercambia entre ellos en su interior, los retorna, y su retorno
14+
* se asigna a dos variables diferentes a las originales. A continuación, imprime
15+
* el valor de las variables originales y las nuevas, comprobando que se ha invertido
16+
* su valor en las segundas.
17+
* Comprueba también que se ha conservado el valor original en las primeras.
18+
*)
19+
program fduron;
20+
21+
{$APPTYPE CONSOLE}
22+
23+
{$R *.res}
24+
25+
uses
26+
System.SysUtils;
27+
28+
procedure SumarPorReferencia(ValorBase: Integer; var Valor1: Integer; var Valor2: Integer);
29+
begin
30+
{ Los parámetros por referencia son modificados dentro del contexto del
31+
procedimiento o función que los manda llamar }
32+
Valor1 := ValorBase + Valor1;
33+
Valor2 := ValorBase + Valor2;
34+
end;
35+
36+
procedure ConcatenarPorReferencia(var Cadena1: String; Cadena2: String);
37+
begin
38+
{ El resultado de la concatenación se almacena en la variable Cadena1, que es
39+
un parámetro por referencia }
40+
Cadena1 := Cadena1 + '+' + Cadena2;
41+
end;
42+
43+
function ConcatenarPorValor(Cadena1, Cadena2: String): String;
44+
begin
45+
{ El resultado de la concatenación se regresa en el resultado de la función
46+
ya que ambos parámetros son por valor }
47+
48+
// Los parámetros pueden cambiar su valor en el contexto de esta función
49+
Cadena1 := Cadena1+ '+';
50+
Result := Cadena1 + Cadena2;
51+
end;
52+
53+
procedure SumarPorValor(ValorBase, Valor1, Valor2: Integer);
54+
begin
55+
Valor1 := ValorBase + Valor1;
56+
Valor2 := ValorBase + Valor2;
57+
WriteLn('"SumaPorValor"');
58+
WriteLn('Valor1: ', Valor1);
59+
WriteLn('Valor2: ', Valor2);
60+
end;
61+
62+
procedure DificultadExtraPorValor(ParametroUno, ParametroDos: String);
63+
var
64+
VariableTemporal: String;
65+
begin
66+
VariableTemporal := ParametroUno;
67+
ParametroUno := ParametroDos;
68+
ParametroDos := VariableTemporal;
69+
end;
70+
71+
procedure DificultadExtraPorReferencia(var ParametroUno, ParametroDos: String);
72+
var
73+
VariableTemporal: String;
74+
begin
75+
VariableTemporal := ParametroUno;
76+
ParametroUno := ParametroDos;
77+
ParametroDos := VariableTemporal;
78+
end;
79+
80+
Var
81+
VarEjemplo1, VarEjemplo2: Integer;
82+
CadenaUno, CadenaDos: String;
83+
OriginalUno, OriginalDos, NuevaUno, NuevaDos: String;
84+
85+
begin
86+
VarEjemplo1 := 15;
87+
VarEjemplo2 := 23;
88+
CadenaUno := 'quince';
89+
CadenaDos := 'veintitrés';
90+
91+
SumarPorReferencia(10, VarEjemplo1, VarEjemplo2);
92+
WriteLn('los valores + 10 son: ', VarEjemplo1, ' ', VarEjemplo2);
93+
94+
CadenaUno := 'quince';
95+
CadenaDos := 'veintitrés';
96+
ConcatenarPorReferencia(CadenaUno, CadenaDos);
97+
WriteLn('Concatenar texto usando un procedimiento con parámetros por referencia: ',
98+
CadenaUno);
99+
100+
CadenaUno := 'quince';
101+
CadenaDos := 'veintitrés';
102+
WriteLn('Concatenar texto usando una función con parámetros por valor: ',
103+
ConcatenarPorValor(CadenaUno, CadenaDos) );
104+
105+
SumarPorValor(10, 27, 16);
106+
107+
WriteLn;
108+
WriteLn('************************************************');
109+
WriteLn(' DIFICULTAD EXTRA');
110+
WriteLn('************************************************');
111+
WriteLn;
112+
113+
OriginalUno := '*Texto número uno*';
114+
OriginalDos := '-TEXTO NÚMERO DOS-';
115+
NuevaUno := OriginalUno;
116+
NuevaDos := OriginalDos;
117+
118+
DificultadExtraPorValor(NuevaUno, NuevaDos);
119+
WriteLn('Ejemplo "Por valor"');
120+
WriteLn('Varialbes originales: ', OriginalUno, ' ', OriginalDos);
121+
WriteLn('Varialbes nuevas: ', NuevaUno, ' ', NuevaDos);
122+
WriteLn;
123+
124+
OriginalUno := '*Texto número uno*';
125+
OriginalDos := '-TEXTO NÚMERO DOS-';
126+
NuevaUno := OriginalUno;
127+
NuevaDos := OriginalDos;
128+
DificultadExtraPorReferencia(NuevaUno, NuevaDos);
129+
WriteLn('Ejemplo "Por referencia"');
130+
WriteLn('Varialbes originales: ', OriginalUno, ' ', OriginalDos);
131+
WriteLn('Varialbes nuevas: ', NuevaUno, ' ', NuevaDos);
132+
ReadLn;
133+
end.

0 commit comments

Comments
 (0)