Skip to content

Commit 973afbd

Browse files
authored
Merge pull request mouredev#7512 from LeandroCFD/RoadMapFortran
#8 - Fortran
2 parents e885a3f + 337a00f commit 973afbd

File tree

1 file changed

+164
-0
lines changed

1 file changed

+164
-0
lines changed
+164
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
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

Comments
 (0)