Skip to content

Commit 5c01bfa

Browse files
authored
Merge branch 'mouredev:main' into main
2 parents b3029c1 + e2ec5b5 commit 5c01bfa

File tree

3 files changed

+358
-0
lines changed

3 files changed

+358
-0
lines changed
Lines changed: 179 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,179 @@
1+
program miguelex;
2+
3+
var
4+
num1V, num2V, num3V, num4V: integer; // Variables para el ejemplo por valor
5+
num1R, num2R, num3R, num4R: ^integer; // Variables para el ejemplo por referencia
6+
7+
{ Funcion con paso por valor }
8+
9+
procedure incValor(a, b: integer);
10+
begin
11+
writeLn('El valor de a es: ', a + 1);
12+
writeLn('El valor de b es: ', b + 1);
13+
end;
14+
15+
procedure incReferencia(var a, b: integer);
16+
begin
17+
a := a + 1;
18+
b := b + 1;
19+
end;
20+
21+
procedure byValor (a, b: integer);
22+
var
23+
aux: integer;
24+
begin
25+
aux := a;
26+
a := b;
27+
b := aux;
28+
writeln ('En la funcion byValor, a = ', a, ' y b = ', b);
29+
end;
30+
31+
procedure byReferencia (var a, b: integer);
32+
var
33+
aux: integer;
34+
begin
35+
aux := a;
36+
a := b;
37+
b := aux;
38+
writeln ('En la funcion byReferencia, a = ', a, ' y b = ', b);
39+
end;
40+
41+
{ Funcion con paso por referencia }
42+
43+
Begin
44+
45+
writeln('Variables por valor');
46+
writeln();
47+
48+
num1V := 10;
49+
num2V := 20;
50+
51+
num3V := num1V;
52+
num4V := num2V;
53+
54+
writeln('El valor de num1 es: ', num1V);
55+
writeln('El valor de num2 es: ', num2V);
56+
writeln('El valor de num3 es: ', num3V);
57+
writeln('El valor de num4 es: ', num4V);
58+
59+
writeln('A continuación vamos a cambiar el valor de num1 y num2');
60+
writeln();
61+
62+
num1V := 30;
63+
num2V := 40;
64+
65+
writeln('El valor de num1 es: ', num1V);
66+
writeln('El valor de num2 es: ', num2V);
67+
writeln('El valor de num3 es: ', num3V);
68+
writeln('El valor de num4 es: ', num4V);
69+
writeln();
70+
71+
writeln('Variables por referencia');
72+
writeln();
73+
{ Por referencia }
74+
GetMem(num1R, SizeOf(integer));
75+
GetMem(num2R, SizeOf(integer));
76+
num3R := num1R;
77+
num4R := num2R;
78+
79+
num1R^ := 10;
80+
num2R^ := 20;
81+
82+
writeln('El valor de num1 es: ', num1R^);
83+
writeln('El valor de num2 es: ', num2R^);
84+
writeln('El valor de num3 es: ', num3R^);
85+
writeln('El valor de num4 es: ', num4R^);
86+
writeln();
87+
88+
writeln('A continuación vamos a cambiar el valor de num1 y num2');
89+
writeln();
90+
num1R^ := 30;
91+
num2R^ := 40;
92+
93+
writeln('El valor de num1 es: ', num1R^);
94+
writeln('El valor de num2 es: ', num2R^);
95+
writeln('El valor de num3 es: ', num3R^);
96+
writeln('El valor de num4 es: ', num4R^);
97+
98+
writeln('Como podemos ver, el valor de num3 y num4 cambió, ya que son referencias a las variables originales');
99+
writeln();
100+
FreeMem(num1R);
101+
FreeMem(num2R);
102+
103+
{ Ejemplo de funcion con paso por valor }
104+
105+
writeln('Ejemplo de función con paso por valor');
106+
writeln();
107+
108+
num1V := 1;
109+
num2V := 2;
110+
111+
writeln('Valores de num1 y num2 antes de llamar a la función incValor');
112+
writeln('Num1 = ', num1V);
113+
writeln('Num2 = ', num2V);
114+
writeln();
115+
116+
incValor(num1V, num2V);
117+
writeln();
118+
119+
writeln('Valores de num1 y num2 después de llamar a la función incValor');
120+
writeln('Num1 = ', num1V);
121+
writeln('Num2 = ', num2V);
122+
writeln();
123+
124+
writeln('Ejemplo de función con paso por valor');
125+
writeln();
126+
127+
num1V := 1;
128+
num2V := 2;
129+
130+
writeln('Valores de num1 y num2 antes de llamar a la función incReferencia');
131+
writeln('Num1 = ', num1V);
132+
writeln('Num2 = ', num2V);
133+
writeln();
134+
135+
incReferencia(num1V, num2V);
136+
137+
writeln('Valores de num1 y num2 después de llamar a la función incReferencia');
138+
writeln('Num1 = ', num1V);
139+
writeln('Num2 = ', num2V);
140+
writeln();
141+
142+
{ Extra }
143+
144+
writeln('Ejemplo de función extra con paso por valor');
145+
writeln();
146+
147+
num1V := 5;
148+
num2V := 10;
149+
150+
writeln('Valores de num1 y num2 antes de llamar a la función byValor');
151+
writeln('Num1 = ', num1V);
152+
writeln('Num2 = ', num2V);
153+
writeln();
154+
155+
byValor(num1V, num2V);
156+
writeln();
157+
158+
writeln('Valores de num1 y num2 después de llamar a la función byValor');
159+
writeln('Num1 = ', num1V);
160+
writeln('Num2 = ', num2V);
161+
writeln();
162+
163+
writeln('Ejemplo de función extra con paso por referencia');
164+
writeln();
165+
166+
writeln('Valores de num1 y num2 antes de llamar a la función byReferencia');
167+
writeln('Num1 = ', num1V);
168+
writeln('Num2 = ', num2V);
169+
writeln();
170+
171+
byReferencia(num1V, num2V);
172+
writeln();
173+
174+
writeln('Valores de num1 y num2 después de llamar a la función byReferencia');
175+
writeln('Num1 = ', num1V);
176+
writeln('Num2 = ', num2V);
177+
writeln();
178+
179+
end.
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
"""
2+
05 - VALOR Y REFERENCIA
3+
Autor de la solución: Oriaj3
4+
5+
Teoría:
6+
En Python, las variables pueden ser asignadas por valor o por referencia, dependiendo del tipo de dato que almacenan.
7+
- Asignación por valor: Cada variable tiene su propio valor independiente. Esto sucede con tipos de datos primitivos como enteros, flotantes y cadenas.
8+
- Asignación por referencia: Se comparte la referencia al objeto en la memoria. Esto sucede con tipos de datos mutables como listas y diccionarios. Modificar un objeto afecta a todas las variables que hacen referencia a él.
9+
- Dentro de una clase, las variables de instancia se pasan por referencia, mientras que las variables de clase se pasan por valor.
10+
"""
11+
12+
# EJERCICIOS
13+
# Muestra ejemplos de asignación de variables "por valor" y "por referencia", según su tipo de dato.
14+
# Muestra ejemplos de funciones con variables que se les pasan "por valor" y "por referencia", y cómo se comportan en cada caso en el momento de ser modificadas.
15+
# (Entender estos conceptos es algo esencial en la gran mayoría de lenguajes)
16+
17+
18+
# Asignación de variables "por valor" y "por referencia"
19+
# Por valor (tipos primitivos)
20+
a = 5
21+
b = a # a y b son independientes
22+
b = 10
23+
print(a) # a sigue siendo 5
24+
print(b) # b es 10
25+
26+
# Por referencia (tipos compuestos)
27+
list_1 = [1, 2, 3]
28+
list_2 = list_1 # list_2 apunta al mismo objeto que list_1
29+
list_2.append(4)
30+
print(list_1) # list_1 se ve afectada, [1, 2, 3, 4]
31+
print(list_2) # list_2 es [1, 2, 3, 4]
32+
33+
# Funciones con parámetros "por valor" y "por referencia"
34+
# Por valor
35+
def modify_value(value):
36+
value = 10
37+
return value
38+
39+
# Ejemplo de uso
40+
a = 5
41+
print(modify_value(a)) # 10
42+
print(a) # 5
43+
44+
# Por referencia
45+
def modify_reference(list):
46+
list.append(4)
47+
return list
48+
49+
# Ejemplo de uso
50+
list_1 = [1, 2, 3]
51+
print(modify_reference(list_1)) # [1, 2, 3, 4]
52+
print(list_1) # [1, 2, 3, 4]
53+
54+
55+
# DIFICULTAD EXTRA (opcional):
56+
# Crea dos programas que reciban dos parámetros (cada uno) definidos como variables anteriormente.
57+
# - Cada programa recibe, en un caso, dos parámetros por valor, y en otro caso, por referencia.
58+
# Estos parámetros los intercambia entre ellos en su interior, los retorna, y su retorno
59+
# se asigna a dos variables diferentes a las originales. A continuación, imprime el valor de las
60+
# variables originales y las nuevas, comprobando que se ha invertido su valor en las segundas.
61+
# Comprueba también que se ha conservado el valor original en las primeras.
62+
63+
# Programa 1: Intercambio de parámetros por valor
64+
def exchange_values(value_1, value_2):
65+
tmp = value_1
66+
value_1 = value_2
67+
value_2 = tmp
68+
return value_1, value_2
69+
70+
# Ejemplo de uso
71+
original_value_1 = 'Hola'
72+
original_value_2 = 'Mundo'
73+
74+
new_value_1, new_value_2 = exchange_values(original_value_1, original_value_2)
75+
76+
print(f"Original Values: {original_value_1}, {original_value_2}") # Original Values: Hola, Mundo
77+
print(f"New Values: {new_value_1}, {new_value_2}") # New Values: Mundo, Hola
78+
79+
# Programa 2: Intercambio de parámetros por referencia
80+
# En este caso, se intercambiará el primer elemento de cada lista entre sí (siendo un seudo-puntero).
81+
def exchange_references(puntero_1, puntero_2):
82+
puntero_1[0], puntero_2[0] = puntero_2[0], puntero_1[0]
83+
return puntero_1, puntero_2
84+
85+
# Ejemplo de uso
86+
original_list_1 = ['Hola']
87+
original_list_2 = ['Python']
88+
89+
new_list_1, new_list_2 = exchange_references(original_list_1, original_list_2)
90+
91+
print(f"Original Lists: [{original_list_1[0]}], [{original_list_2[0]}]") # Original Lists: [Python], [Hola]
92+
print(f"New Lists: [{new_list_1[0]}], [{new_list_2[0]}]") # New Lists: [Python], [Hola]
93+
94+
# Programa 2: Intercambio de parámetros por referencia (con listas)
95+
# En este caso, se intercambiara todo el contenido de las listas entre sí.
96+
def exchange_references(list_1, list_2):
97+
if len(list_1) != len(list_2):
98+
return None
99+
for i in range(len(list_1)):
100+
list_1[i], list_2[i] = list_2[i], list_1[i]
101+
return list_1, list_2
102+
103+
# Ejemplo de uso
104+
original_list_1 = ['Lista 1 Elemento 0', 'Lista 1 Elemento 1']
105+
original_list_2 = ['Lista 2 Elemento 0', 'Lista 2 Elemento 1']
106+
107+
new_list_1, new_list_2 = exchange_references(original_list_1, original_list_2)
108+
109+
print(f"Original Lists: {original_list_1}, {original_list_2}") # Original Lists: ['Hola', 'Mundo'], ['Python', '3.10.11']
110+
print(f"New Lists: {new_list_1}, {new_list_2}") # New Lists: ['Python', '3.10.11'], ['Hola', 'Mundo']
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
'''
2+
Muestra ejemplos de asignación de variables "por valor" y "por referencia", según
3+
su tipo de dato.
4+
'''
5+
# asignacion por valor
6+
7+
from ast import Return
8+
9+
10+
my_variable = "hola"
11+
my_new_variable = my_variable
12+
my_new_variable = "mundo"
13+
14+
print(my_variable)
15+
print(my_new_variable)
16+
17+
#asignacion por referencia
18+
19+
my_list = [3,4,67,10]
20+
my_new_list = my_list
21+
my_new_list [3] = "hello"
22+
23+
print(my_list) #salida: my_list =[3,4,67"hello"]
24+
print(my_new_list) #salida: my_new_list =[3,4,67"hello"]
25+
26+
'''
27+
Muestra ejemplos de funciones con variables que se les pasan "por valor" y
28+
"por referencia", y cómo se comportan en cada caso en el momento de ser modificadas
29+
'''
30+
# funcion con variable por valor
31+
32+
def my_function (my_variable):
33+
print(my_variable) # variable original no se ve afectada
34+
35+
# funcion con variable por referencia
36+
37+
def variable_referencia(my_list):
38+
my_list.append(5)
39+
print(my_list) # variable original si ve afectada
40+
41+
'''
42+
DIFICULTAD EXTRA (opcional):
43+
* Crea dos programas que reciban dos parámetros (cada uno) definidos como variables anteriormente.
44+
* - Cada programa recibe, en un caso, dos parámetros por valor, y en otro caso, por referencia.
45+
* Estos parámetros los intercambia entre ellos en su interior, los retorna, y su retorno
46+
* se asigna a dos variables diferentes a las originales. A continuación, imprime el valor de las
47+
* variables originales y las nuevas, comprobando que se ha invertido su valor en las segundas.
48+
* Comprueba también que se ha conservado el valor original en las primeras.
49+
'''
50+
51+
def intercambio_valor(value1,value2):
52+
53+
value_temp = value1
54+
value1 = value2
55+
value2 = value_temp
56+
57+
return value1, value2
58+
59+
# variables originales
60+
valor1 = 34
61+
valor2 = 15
62+
63+
# llamado de la funcion y asignacion a los nuevas variables los valores
64+
valor_new1, valor_new2 = intercambio_valor(valor1,valor2)
65+
66+
print('valores orginales: ',valor1,valor2)
67+
print('\nvalores intercambiados: ',valor_new1,valor_new2)
68+
69+

0 commit comments

Comments
 (0)