1
+ ! Fortran propiamente no tiene clases, pero se pueden simular con variables de tipo derivado y modulos
2
+
3
+ module Modulo_Clase ! Se define un modulo que contiene la definición de las clases Alumno, Pila y Cola
4
+ implicit none
5
+
6
+ type :: Alumno ! Se define el tipo derivado Alumno
7
+ real :: nota ! Atributos de la clase
8
+ integer :: edad
9
+ character (len= 20 ) :: nombre
10
+ contains
11
+ procedure :: MostrarDatos ! Método de la clase
12
+ end type Alumno
13
+
14
+ type :: Pila
15
+ integer :: tope
16
+ integer , dimension (100 ) :: elementos
17
+ contains
18
+ procedure :: Apilar
19
+ procedure :: Desapilar
20
+ procedure , nopass :: MostrarElementos
21
+ procedure , nopass :: NumeroElementos
22
+ end type Pila
23
+
24
+ type :: Cola
25
+ integer :: frente
26
+ integer :: final
27
+ integer , dimension (100 ) :: elementos
28
+ contains
29
+ procedure :: Encolar
30
+ procedure :: Desencolar
31
+ procedure , nopass :: MostrarElementos
32
+ procedure , nopass :: NumeroElementos
33
+ end type Cola
34
+
35
+ contains
36
+ subroutine MostrarDatos (this ) ! Implementación del método MostrarDatos
37
+ class(Alumno), intent (in ) :: this ! Se pasa la instancia de la clase como argumento
38
+ print * , ' Nombre: ' , this% nombre
39
+ print * , ' Edad: ' , this% edad
40
+ print * , ' Nota: ' , this% nota
41
+ end subroutine MostrarDatos
42
+
43
+ subroutine Apilar (this , elemento ) ! Implementación del método Apilar
44
+ class(Pila), intent (inout ) :: this
45
+ integer , intent (in ) :: elemento
46
+ this% tope = this% tope + 1 ! Se incrementa el tope de la pila
47
+ this% elementos(this% tope) = elemento ! Se añade el elemento a la pila
48
+ end subroutine Apilar
49
+
50
+ subroutine Desapilar (this ) ! Implementación del método Desapilar
51
+ class(Pila), intent (inout ) :: this
52
+ if ( this% tope <0 ) then ! Se verifica que haya elementos en la pila
53
+ print * , " No hay elementos para desapilar"
54
+ return
55
+ end if
56
+ this% elementos(this% tope)= 0 ! Se elimina el elemento
57
+ this% tope = this% tope - 1 ! Se decrementa el tope
58
+ end subroutine Desapilar
59
+
60
+ subroutine Encolar (this , elemento ) ! Implementación del método Encolar
61
+ class(Cola), intent (inout ) :: this
62
+ integer , intent (in ) :: elemento
63
+ this% final = this% final + 1 ! Se incrementa el final de la cola
64
+ this% elementos(this% final) = elemento ! Se añade el elemento a la cola
65
+ end subroutine Encolar
66
+
67
+ subroutine Desencolar (this ) ! Implementación del método Desencolar
68
+ class(Cola), intent (inout ) :: this
69
+ if ( this% final- this% frente <0 ) then ! Se verifica que haya elementos en la cola
70
+ print * , " No hay elementos para desencolar"
71
+ return
72
+ end if
73
+ this% elementos(this% frente)= 0 ! Se elimina el elemento
74
+ this% frente = this% frente + 1 ! Se incrementa el frente
75
+ end subroutine Desencolar
76
+
77
+ subroutine MostrarElementos (this ) ! Implementación del método MostrarElementos
78
+ class(* ), intent (in ) :: this
79
+ integer :: i
80
+ select type (this) ! Se selecciona el tipo de la instancia
81
+ type is (Pila) ! Si es de tipo Pila
82
+ print * ," Lista de elementos (Pila):"
83
+ do i = 0 , this% tope-1
84
+ print * , this% elementos(this% tope- i)
85
+ end do
86
+ type is (Cola) ! Si es de tipo Cola
87
+ print * ," Lista de elementos (Cola):"
88
+ do i = this% frente, this% final
89
+ print * , this% elementos(i)
90
+ end do
91
+ end select
92
+ end subroutine MostrarElementos
93
+
94
+ subroutine NumeroElementos (this ) ! Implementación del método NumeroElementos
95
+ class(* ), intent (in ) :: this
96
+ select type (this)
97
+ type is (Pila)
98
+ print * ," Numero de elementos (Pila):" , this% tope
99
+ type is (Cola)
100
+ print * ," Numero de elementos (Cola):" , this% final- this% frente+1
101
+ end select
102
+ end subroutine NumeroElementos
103
+
104
+ end module Modulo_Clase
105
+
106
+ program CLASES
107
+ use Modulo_Clase ! Se importa el modulo que contiene la definición de la clase
108
+
109
+ implicit none
110
+
111
+ type (Alumno) :: Alumno1, Alumno2 ! Se definen dos instancias "Variables" de la clase Alumno
112
+ type (Pila) :: Mipila ! Se define una instancia de la clase Pila
113
+ type (Cola) :: Micola ! Se define una instancia de la clase Cola
114
+
115
+ Alumno1% nota = 10.0 ! Inicialización de los datos de Alumno1
116
+ Alumno1% edad = 20
117
+ Alumno1% nombre = ' Juan'
118
+
119
+ Alumno2% nota = 8.0 ! Inicialización de los datos de Alumno2
120
+ Alumno2% edad = 21
121
+ Alumno2% nombre = ' Pedro'
122
+
123
+ call Alumno1% MostrarDatos() ! Llamada a los métodos MostrarDatos
124
+ call Alumno2% MostrarDatos()
125
+
126
+ Alumno1% nombre= ' Carlos'
127
+ Alumno1% edad= 22
128
+ Alumno1% nota= 6.5
129
+
130
+ call Alumno1% MostrarDatos()
131
+
132
+ ! DIFICULTAD EXTRA
133
+ Mipila% tope = 0
134
+ call Mipila% Apilar(5 ) ! Se apilan elementos
135
+ call Mipila% Apilar(2 )
136
+ call Mipila% Apilar(10 )
137
+ call Mipila% Apilar(22 )
138
+ call Mipila% Apilar(50 )
139
+
140
+ call Mipila% MostrarElementos(Mipila) ! Se muestran los elementos de la pila
141
+ call Mipila% NumeroElementos(Mipila) ! Se muestra el número de elementos de la pila
142
+ call Mipila% Desapilar() ! Se desapila un elemento
143
+ call Mipila% MostrarElementos(Mipila)
144
+ call Mipila% NumeroElementos(Mipila)
145
+
146
+ Micola% frente = 1
147
+ Micola% final = 0
148
+
149
+ call Micola% Encolar(1 ) ! Se encolan elementos
150
+ call Micola% Encolar(3 )
151
+ call Micola% Encolar(10 )
152
+ call Micola% Encolar(50 )
153
+ call Micola% Encolar(98 )
154
+
155
+ call Micola% MostrarElementos(Micola) ! Se muestran los elementos de la cola
156
+ call Micola% NumeroElementos(Micola) ! Se muestra el número de elementos de la cola
157
+ call Micola% Desencolar() ! Se desencola un elemento
158
+ call Micola% Desencolar()
159
+ call Micola% Desencolar()
160
+ call Micola% Desencolar()
161
+ call Micola% MostrarElementos(Micola) ! Se muestran los elementos de la cola
162
+ call Micola% NumeroElementos(Micola) ! Se muestra el número de elementos de la cola
163
+
164
+ end program CLASES
0 commit comments