Publicado el 17 de Agosto del 2019
1.499 visualizaciones desde el 17 de Agosto del 2019
29,6 MB
34 paginas
Creado hace 6a (01/01/2018)
Evaluación
Primer cuatrimestre (40% de la nota final)
FECHAS EXÁMENES PARCIALES:
18-OCTUBRE-2018
13-DICIEMBRE-2018
HORARIO DE CLASE – AULA ¿?
HORARIO DE CLASE – AULA ¿?
ES OBLIGATORIO APROBAR EL PRIMER CUATRIMESTRE PARA
CONTINUAR CON LA EVALUACIÓN CONTINUA.
Evaluación
Teoría
Presentaciones 1
Presentaciones 2
6Septiembre Introducción
13Septiembre Datos y Operadores
20Septiembre Control de flujo I
27Septiembre Control de flujo II
4Octubre
11Octubre
18Octubre
25Octubre
8Noviembre Formato lectura escritura
15Noviembre Programación modular I
22Noviembre Programación modular II HISTORIA LENG
29Noviembre Tipos derivados
13Diciembre
Arrays I
Arrays II
EXAMEN PARCIAL
Intrínsecas
EXAMEN PARCIAL
CPU
DISCO DURO
FPGA
CLUSTER
RAM
GPU
XEON PHI
RASPBERRY PI
FUTURO LENG
20Diciembre
Programación avanzada
SISTEMAS OPERATIVOS LEY DE MOORE
FIN DE ELECCIÓN DE PRESENTACIÓN 07/10/18
• Tipos de datos: Intrínsecos
• Numéricos: (integer, real, complex)
• Lógicos: (logical)
• Carácter: (character)
• Tipos de datos: Derivados
• Arrays
• Vectores Clase de hoy
• Matrices
• Estructuras
Antes:
• Dudas práctica jueves pasado:
• Ejercicio números primos: ¿?
•
Sumatorios: ¿Dudas?
Antes:
• Estilo de programación:
program main
implicit none
integer, parameter:: n = 100
integer:: s
integer:: i, j
!---Fin declaracion-------------------
s = 0
do i=1,n
do j=1,n
if (i <= j) then
endif
s = s + i + j
enddo
enddo
end program main
Antes:
• Uso de las condicionales: I.- if… else… end if
if ((n-(n/2)*2) == 0) then
else Bien!!
endif
...
...
if((n-(n/2)*2) == 0) then
elseif((n-(n/2)*2) /= 0) then
end if
...
...
...
if((n-(n/2)*2) == 0) then
endif
if((n-(n/2)*2) /= 0) then
end if
...
Regular à Mal
Antes:
• Uso de las condicionales: II.- if… elseif… else… endif
IF(x > 0) THEN
WRITE(*,*) '+'
ELSEIF(x == 0) THEN
WRITE(*,*) '0'
ELSE
ENDIF
WRITE(*,*) '-'
Cálculo número de divisores primos
integer:: n,i
n = 7
i = 2
write(*,*) n – ( (n/i) * i )
n = 6
i = 2
write(*,*) n – ( (n/i) * i)
!Y si probara a dividir el número por todos los que son
menores que él...
!6–INT(6/2)*2=0
!7–INT(7/2)*2=1
Arrays: Vectores y Matrices
Arrays: Vectores y Matrices: Declaración
U:
A:
U(1) U(2) U(3) U(4) U(5)
A(1,1)
A(2,1)
A(1,2)
A(2,2)
A(1,3)
A(2,3)
T:
T(0,-1)
T(1,-1)
T(2,-1)
T(0,0)
T(1,0)
T(2,0)
Arrays: Vectores y Matrices: Declaración
Vectores y Matrices: Almacenamiento en memoria
integer :: U(5)
integer :: B(5,3)
u(1)
u(2)
u(3)
u(4)
u(5)
b(1,1)
b(2,1)
b(3,1)
b(4,1)
b(5,1)
b(1,2)
b(2,2)
b(3,2)
b(4,2)
b(5,2)
b(1,3)
b(2,3)
b(3,3)
b(4,3)
b(5,3)
• Velocidad de cálculo en grandes códigos
Arrays: Vectores y Matrices: Asignación
program asignacion
integer :: U(4)
U = 10
end program asignacion
program asignacion
integer :: U(4)
U = (/0,2,-1,3/)
end program asignacion
U:
10
10
10
10
U:
0
2
-1
3
Arrays: Vectores y Matrices: Asignación
program asignacion
integer :: U(4)
U(2) = 0
U(3) = -1
U(1) = 3
U(4) = 2
end program asignacion
U:
3
0
-1
2
Arrays: Vectores y Matrices: Asignación
A:
10
10
10
10
10
10
program asignacion
integer :: A(2,3)
A = 10
end program asignacion
program asignacion
integer :: A(2,3)
A = reshape((/1, 0, -2, 3, 5, 8/), (/2,3/))
end program asignacion
A:
1
0
-2
3
5
8
OJO!!
Arrays: Vectores y Matrices: Asignación
program asignacion
integer :: A(2,3)
A(1,3) = 2
A(1,1) = 10
A(2,1) = -1
A(2,2) = 14
A(1,2) = 3
A(2,3) = -5
end program asignacion
A:
10
-1
3
14
2
-5
Arrays: Vectores y Matrices: Declaración II
• Parámetro
• Dinámica
program declaracion
program declaracion
integer, parameter :: n = 2
integer, parameter :: m = 3
integer, parameter :: Linf = 0
integer, parameter :: Lsup = 10
integer :: U(n)
real :: V(n*m)
real :: A(n,m)
real :: T(Linf:Lsup, Linf:Lsup)
end program declaracion
integer :: n
Integer :: m
integer, allocatable :: U(:)
real, allocatable :: A(:,:)
end program declaracion
Arrays: Vectores y Matrices: Declaración II
• Parámetro
• Dinámica
program declaracion
program declaracion
integer, parameter :: n = 2
integer, parameter :: m = 3
integer, parameter :: Linf = 0
integer, parameter :: Lsup = 10
integer :: U(n)
real :: V(n*m)
real :: A(n,m)
real :: T(Linf:Lsup, Linf:Lsup)
end program declaracion
integer :: n
Integer :: m
integer, allocatable :: U(:)
real, allocatable :: A(:,:)
end program declaracion
U(:) es un vector y A(:,:) una
matriz de tamaño desconocidos al
principio del programa
Arrays: Vectores y Matrices: Asignación II
• Parámetro
• Dinámica
program declaracion
program declaracion
integer, parameter :: n = 2
integer, parameter :: m = 3
integer :: n
Integer :: m
integer :: U(n)
real :: A(n,m)
integer, allocatable :: U(:)
real, allocatable :: A(:,:)
A = 0.d0
U = 0.d0
•
Igual que antes
end program declaracion
! Cuerpo de programa
n = 2
m = 3
allocate(U(n))
allocate(A(n,m))
A = 0.d0
U = 0.d0
end program declaracion
Arrays: Vectores y Matrices: Asignación II
• Parámetro
• Dinámica
program declaracion
program declaracion
integer, parameter :: n = 2
integer, parameter :: m = 3
integer :: n
Integer :: m
integer :: U(n)
real :: A(n,m)
A = 0.d0
U = 0.d0
•
Igual que antes
end program declaracion
integer, allocatable :: U(:)
real, allocatable :: A(:,:)
! Cuerpo de programa
n = 2
m = 3
allocate(U(n))
allocate(A(n,m))
Reserva dinámica
de memoria para
U(:)y A(:,:)
A = 0.d0
U = 0.d0
end program declaracion
Arrays: Vectores y Matrices: Asignación III
• Asignación por bucle
program asignacion
integer, parameter :: n = 10
integer :: U(n)
integer :: i
!--- Fin declaracion -------------------
do i=1,n
end do
U(i) = i*i
write(*,*) U
do i=1,n
end do
write(*,*) U(i)
end program asignacion
Arrays: Vectores y Matrices: Asignación III
Escribir un programa que defina la matriz identidad con n = 5
23
Arrays: Vectores y Matrices: Asignación III
Escribir un programa que defina la matriz identidad con n = 5
Arrays: Vectores y Matrices: Asignación III
Escribir un programa que defina la matriz Anxn con n = 100
Arrays: Vectores y Matrices: Asignación III
Escribir un programa que defina la matriz Anxn con n = 100
program main
integer, parameter :: n = 100
integer :: A(n,n)
integer :: i, j
!--- Fin declaracion -------------------
do i=1,n
do j=1,n
else
end if
end do
end do
end program main
if (i <= j) then
A(i,j) = i + j
A(i,j) = 0
Arrays: Vectores y Matrices: Asignación III
Escribir un programa que defina la matriz Anxn con n = 100
program main
integer, parameter :: n = 100
integer :: A(n,n)
integer :: i, j
!--- Fin declaracion -------------------
A = 0
do i=1,n
do j=1,n
if (i <= j) A(i,j) = i + j
end do
end do
end program main
Arrays: Vectores y Matrices: Asignación III
Escribir un programa que defina la matriz Anxn con n = 100
program main
integer, parameter :: n = 100
integer :: A(n,n)
integer :: i, j
!--- Fin declaracion -------------------
A = 0
do i=1,n
end do
end do
end program main
do j=i,n
A(i,j) = i + j
Asignación Dinámica
program declaracion
integer :: n
Integer :: m
integer, allocatable :: U(:)
real, allocatable :: A(:,:)
! Cuerpo de programa
allocate(U(n))
allocate(A(n,m))
A = 0.d0
U = 0.d0
end program declaracion
Asignación Dinámica
program declaracion
integer :: n,info
integer, allocatable :: U(:)
! Cuerpo de programa
n = 5
allocate(U(n), stat=info)
if (info > 0) stop ‘** No hay memoria &
& suficiente para U**’
Declaración de U como array dinámico
Reserva de memoria, con control de error
Si la asignación es correcta stat = 0.
En caso contrario stat > 0
U = 0.d0
deallocate(U, stat=info)
end program declaracion
if (info > 0) stop ‘** U no tenía&
& memoria reservada**’
Libera la memoria previamente reservada,
con control de error
Arrays: Vectores y Matrices: Asignación III
• Trabajo para casa: (subid a Moodle antes del 13 de Noviembre)
• El objetivo de esta práctica es escribir un programa que calcule números
primos.
• Se proponen tres estructuras de programa: versión básica, media y
avanzada. Dependiendo de la opción elegida, la pareja optará a tres
notas distintas: aprobado, notable o sobresaliente.
• En todo caso, se valorará la limpieza del programa (e.g., indentación
correcta) así como el uso de comentarios explicativos.
La entrega se realizará a través de Moodle.
•
• Solo uno de los miembros de la pareja realizará la entrega.
• El nombre del fichero será DNI1_DNI2.f90.
• Un comentario en la parte superior del código especificará si se entrega
la versión básica, media o avanzada.
Arrays: Vectores y Matrices: Asignación III
• Trabajo para casa: (subid a Moodle antes del 13 de Noviembre)
TRABAJO NÚMEROS PRIMOS: VERSIÓN BÁSICA
APROBADO
1.- El programa pide al usuario que introduzca un número entero
mayor que cero, n.
2.- El programa comprueba que el valor introducido es correcto (es
mayor que cero). En caso contrario, el programa finaliza.
3.- El programa creará un vector de tamaño n.
3.- El programa calcula los números primos menores o iguales a n
y los almacena en el vector creado.
4.- El programa escribirá por pantalla el contenido del vector.
5.- El programa liberará la memoria del vector.
Arrays: Vectores y Matrices: Asignación III
• Trabajo para casa: (subid a Moodle antes del 13 de Noviembre)
TRABAJO NÚMEROS PRIMOS: VERSIÓN MEDIA
NOTABLE
1.- El programa pide al usuario que introduzca un número entero
mayor que cero, n.
2.- El programa comprueba que el valor introducido es correcto (es
mayor que cero). En caso contrario, le pide al usuario que
introduzca de nuevo otro número.
3.- El programa calcula los números primos menores o iguales a n.
4.- El programa creará un vector de tamaño el número de números
primos menores o iguales a n.
5.- El programa almacenará los números primos menores o iguales
a n en el vector creado.
6.- El programa
Comentarios de: Arrays: Vectores y Matrices (0)
No hay comentarios