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