Está en la página 1de 26

Programacin

Juan Ignacio Rodrguez Hernndez


Escuela Superior de Fsica y Matemticas Instituto Politcnico Nacional

Mayo !"

Operaciones sobre arreglos completos


n i =" n n i= " n

y xi xi y i m= xi i =" x xi
i= "

suma# $ !%! suma# $ !%! sumay $ !%! suma#y $ !%! do i$"&n suma# $ suma# ' #(i) sumay $ sumay ' y(i) suma# $ suma# ' #(i)** suma#y $ suma#y ' #(i)*y(i) end do #p $ suma#+real(n) yp $ sumay+real(n) m $ (suma#y , yp*suma#)+(suma# , #p*suma#)

#p $ S.M(#)+real(n) yp $ S.M(y)+real(n) m $ (S.M(#*y) / yp*S.M(#))+ (S.M(#** ) , #p*S.M(#))

Operaciones sobre arreglos completos


n i =" n n i= " n

y xi xi y i m= xi i =" x xi
i= "

#p $ S.M(#)+real(n) yp $ S.M(y)+real(n) m $ (S.M(#*y) / yp*S.M(#))+ (S.M(#** ) , #p*S.M(#))

m $ (S.M(#*y) / S.M(y)*S.M(#)+real(n))+(S.M(#** ) , (S.M(#)** )+real(n))

Operaciones sobre arreglos completos


suma# $ !%! suma# $ !%! sumay $ !%! suma#y $ !%! do i$"&n suma# $ suma# ' #(i) sumay $ sumay ' y(i) suma# $ suma# ' #(i)** suma#y $ suma#y ' #(i)*y(i) end do #p $ suma#+real(n) yp $ sumay+real(n) m $ (suma#y , yp*suma#)+(suma# , #p*suma#)

m $ (S.M(#*y) / S.M(y)*S.M(#)+real(n))+(S.M(#** ) , (S.M(#)** )+real(n)) .N0 S120 2INE0 3E 413I51 666

De ahora en adelante...usaremos
"%, 0rreglos de memoria dinmica%%% %, 1peraciones so7re arreglos completos 8 8 90N91 41M1 SE0 P1SI:2E 66

Subprogramas: FUNCIONES SU!"U#IN$S


1) 2os S.:PR15R0M0S o ;programas unidad< son programas IN3EPEN3IEN9ES =ue son utilizados dentro de otro programa (;programa principal< o ;dri>er<) para lle>ar a ca7o tareas espec?icas% 2) Estos su7programas se compiln y prue7an por separado& ?acilitando as el mantenimiento de programas muy grandes% 3) E#istencia de ;7ancos de su7programas< (7i7liotecas)%

2os su7programas se utilizan para programar procesos repetiti>os& por eBemplo& en el caso de =ue se necesitara e>aluar la siguiente ?unciCn g& es recomenda7le crea un su7programa para la ?unciCn f(x,y)D
N N

Subprogramas: %Cu&ndo utili'arlos(

g = f x i , y j
i=" j="

x i= N i y j= N B
si si si si x ! - y ! x ! - y ! x ! - y ! x ! - y !

x y @ x y f x, y = x yA @ x y

Para programar procesos estndar como algunos mtodos numrico (soluciCn de sistemas de ecuaciones lineales& integraciCn numrica& etc%) =u son utilizados una y otra >ez en >arios programasD Solucion de sistemas de > ecuaciones lineales
suma# $ !%! suma# $ !%! sumay $ !%! suma#y $ !%! do i$"&n suma# $ suma# ' #(i) sumay $ sumay ' y(i) suma# $ suma# ' #(i)** suma#y $ suma#y ' #(i)*y(i) end do #p $ suma#+real(n) yp $ sumay+real(n) m $ (suma#y , yp*suma#)+(suma# , #p*suma#) suma# $ !%! suma# $ !%! sumay $ !%! suma#y $ !%! do i$"&n suma# $ suma# ' #(i) sumay $ sumay ' y(i) suma# $ suma# ' #(i)** suma#y $ suma#y ' #(i)*y(i) end do #p $ suma#+real(n) yp $ sumay+real(n) m $ (suma#y , yp*suma#)+(suma# , #p*suma#) suma# $ !%! sumay $ !%! suma#y $ !%! do i$"&n suma# $ suma# ' #(i) sumay $ sumay ' y(i) suma# $ suma# ' #(i)** suma#y $ suma#y ' #(i)*y(i) end do #p $ suma#+real(n) yp $ sumay+real(n) m $ (suma#y , yp*suma#)+(suma# , #p*suma#)

Subprogramas: %Cu&ndo utili'arlos(

>

Solucion de sistemas de ecuaciones lineales

Subprogramas:
Entonces& los S.:PR15R0M0S se recomiendan para cu7rir o resol>er algunos de las tareas siguientesD

Para programar procesos o tareas =ue se repiten en un mismo programa Para programar mtodos numricos estndar (soluciCn de sistemas de ecuaciones lineales& aBuste de datos& interpolaciCn& integraciCn numrica& lectura de datos& etc%)% Estos su7programas son ;reusa7les<% 4onstrucciCn de ;7ancos de su7programas< or ;repositorios< o ;7i7liotecas<& para (re)usarse en programas con ciertas aplicaciones%

Subprogramas en

FO"#"$N F.N4I1NES
SUBPROGRAMAS

S.:R.9IN0S

Subprogramas: FUNCIONES
2as funciones son su7programas =ue aceptan .N1 o M0S argumentos de entrada (lo e=ui>alente a ;>aria7les independientes<) y .N y S121 .N >alor de salida& el cuales el >alor de la ?unciCn misma (;>aria7le independiente<)% .na ?unciCn en ?ortran tiene la siguiente estructura (M0E.S4.20S es 413I51 FR19R0N)D nom7re?unc puede ser FUNCTION nombrefunc( r!1" r!2"###" r!n) cual=uier nom7re IMP$ICIT NON% de?inido por el usuario &i'o ( ( nombrefunc (con no ms de A" &i'o ( ( r!1" r!2 caractres) &i'o ( ( r!3 tipo especi?ica el tipo de # >aria7le (real& integer& &i'o ( ( r!n logical& cFaracter)
cuer'o )e* 'ro!r m Nombrefunc + , %N- FUNCTION nombrefunc

2ista de argumentos

E)emplo: FUNCION F$C#O"I$*


3eclaraciCn de inicio de la ?unciCn
F.N49I1N ?actBuan(n) implicit none integer DD n& ?actBuan integer DD i ?actBuan $ " do i$"&n ?actBuan $ ?actBuan*i end do EN3 F.N49I1N ?actBuan

Nom7re de la ?unciCn

4uerpo del programa

3eclaraciCn de termino de la ?unciCn

Compilando + e)ecutando una ,uncin -subprograma.


Hay dos ?ormas para compilar y usar+eBecutar una ?unciCn+su7programaD 1) $ funci.n(sub'ro!r m ) se escribe/ ne0 * fin * )e* 'ro!r m 'rinci' * (1)ri2er3) 4ue llama * funci.n# %n es&e c so * funci.n (sub'ro!r m ) form ' r&e )e* mismo rc5i2o 4ue con&iene e* 'ro!r m 'rinci' *# %* 'ro!r m 'rinci' * se com'i* 6 e7ecu& como cu *4uier 'ro!r m # 2) $ funci.n (sub'ro!r m ) se escribe en un rc5i2o in)e'en)ien&e * rc5i2o )e* 'ro!r m 'rinci' *# $ form )e com'i* r 6 e7ecu& r en es&e c so se mues&r m8s )e* n&e#

Opcin /: Programa coe,iciente binomial


'ro!r m coefbi im'*ici& none in&e!er (( n"r"c in&e!er (( f c&7u n 9 -ec* r n)o * funcion n + 1: r+; c + f c&7u n(n)/(f c&7u n(n<r)=f c&7u n(r)) >ri&e(="=)?%* coeficien&e binomi * (?"n"?"?"r"?)+?"c en) 'ro!r m coefbi 9++++++++++++++++++++++++++++++++++ FUNCTION f c&7u n(n) im'*ici& none in&e!er (( n 9 r!umen&o )e en&r ) in&e!er (( f c&7u n 9 2 ri b*e/nombre )e * funcion in&e!er (( i 9@ ri b*e u0i*i r f c&7u n + 1 )o i+1"n f c&7u n + f c&7u n=i en) )o %N- FUNCTION f c&7u n

2a ?unciCn ;?actBuan< ?orma parte del mismo arcFi>o del programa principal (;coe?7i<)

program prue7aA implicit none integer DD i&B&G&c integer DD ?actBuan&coe?Buan G$ ?actBuan("A) Hrite(*&*)IG$I&G c $ coe?Buan("A&@) Hrite(*&*)Ic$I&c

%7em'*o 2

end program prue7aA 6 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ F.N49I1N coe?Buan(n&r) implicit none integer DD coe?Buan integer DD n&r integer DD ?actBuan coe?Buan $ ?actBuan(n)+(?actBuan(n,r)*?actBuan(r)) EN3 F.N49I1N coe?Buan 6$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ F.N49I1N ?actBuan(n) implicit none integer DD n& ?actBuan integer DD i ?actBuan $ " do i$"&n ?actBuan $ ?actBuan*i end do EN3 F.N49I1N ?actBuan

2a 2IS90 3E 0R5.MEN91S de7e coincidir en 1R3EN y 9IP1 de >aria7les

0ariables *ocales
0 las >aria7les =ue son declaradas en un su7programa (SP) y el programa principal (PP) no tiene accesos a ellas se les llama J0RI0:2ES 21402ES% 0nlogamente& un su7programa solo tiene acceso (y puede modi?icar) las >aria7les del PP =ue ?orman 2IS90 3E 0R5.MEN91S% NOTAD las >aria7les =ue ?orman la lista de argumentos son un tipo de ;J0RI0:2ES M.30S< pues los su7programas no asignan memoria a estas >aria7les (esta memoria es asignada en el PP)%

0ariables *ocales

NOTAD o7ser>emos =ue 4.02K.IER0 de las >aria7les =ue ?orman la lista de argumentos puede ser modi?icada (algunas >eces por accidente)% Para e>itar esto se usa la declaraciCn+atri7uto INTENT

*a declaracin1atributo INTENT
%* &ribu&o INTENT al declarar el tipo de >aria7les en la secciCn de declaraciCn (A atri7utos distintos)D tipo& intent(in) DD arg"& arg
2os argumentos N1 P.E3EN ser modi?icados por el SP (argumentos de entrada)%
2as >aria7les SI P.E3EN ser modi?icadas por el SP (argumentos de salida) 2as >aria7les SI P.E3EN ser modi?icadas por el SP (argumentos de entrada, salida)

tipo& intent(out) DD argA& arg@

tipo& intent(inout) DDargL& argM

%7em'*o 2
F.N49I1N coe?Buan(n&r) implicit none integer& intent(in) DD n&r integer DD coe?Buan integer DD ?actBuan coe?Buan $ ?actBuan(n)+ (?actBuan(n,r)*?actBuan(r)) EN3 F.N49I1N coe?Buan 0tri7uto intent(in) usado para indicar =ue los argumentos n - r (argumentos deentrada)no pueden ser modi?icados por el su7programa

Pasando arreglos como argumentos


0rreglos pueden ser pasados a su7programas (?unciones o su7rutinas) en dos distintas manerasD "%, Forma e#plcita% En este la forma (dimensiCn y e#tensiCn) de cada arreglo,argumento es pasado e#plcitamenteD FUNCTION funcion1(n"m"*"0"6) IMP$ICIT NON% in&e!er" in&en&(in) (( n"m"* re *" in&en&(in) (( 0(n"m)"6(m)

Pasando arreglos como argumentos


%, Forma implcita% En este la ?orma (dimensiCn y e#tensiCn) de cada arreglo,argumento es pasado implcitamente usando ;dos puntos D< para especi?icar dimensiCn pero sin especi?icar e#tensiCnD FUNCTION funcion1(n"0"6) IMP$ICIT NON% in&e!er" in&en&(in) (( n"m"* re *" in&en&(in) (( 0(("()"6(()
Sin em7argo& esta manera de ;?orma e#plcita< es usada solamente en el caso en =ue la ?unciCn (su7programa) tenga una inter?ase e#plcita% Esto se logra ;poniendo< el su7programa dentro de un mCdulo (lo cual >eremos ms adelante)%

Subprogramas: SU!"U#IN$S
2as S.:R.9IN0S son su7programas =ue tienen las siguientes caractersticasD

0ceptan NIN5.N1& .N1 1 M0S argumentos (e#plcitos) de entrada% Regresan NIN5.N1& .N1 o M0S argumentos (e#plcitos) de salida% 2os argumentos pueden ser de cual=uier tipo (real& entero& cFaracter o lCgico)% 2os argumentos pueden ser ;escalares<& arreglos& ?unciones e incluso su7rutinas% Se compilan y usan de manera independiente%

Subprogramas: SU!"U#IN$S
2as S.:R.9IN0S tienen la siguiente estructura general (M0E.S4.20S son 413I51 F1R9R0N)D
nomSu7 puede ser SUBROUTIN% nomSub( r!:" r!1" r!2"###" r!n) cual=uier nom7re IMP$ICIT NON% de?inido por el usuario &i'o" INT%NT(IN) ( ( r!:c (con no ms de A" &i'o" INT%NT(OUT) ( ( r!1" r!2 &i'o" INT%NT(INOUT) ( ( r!3" r!;"###" r!n caractres) # tipo especi?ica el tipo de &i'o ( ( 2 r2" 2 r2" 2 r3 >aria7le (real& integer& logical& cFaracter) cuer'o )e* 'ro!r m %N- SUBROUTIN% nomSub

2ista de argumentos

Subprogramas: SU!"U#IN$S
2os conceptos usados para las ?unciones son aplica7les para las S.:R.9IN0SD

2as Nnicas >aria7les del PP =ue una su7rutina puede modi?icar son a=ullos de la lista de argumentos =ue tienen el atri7uto para ello% 2as lista de argumentos son ;>aria7les mudas< a las cuales el su7programa no se les asigna memoria% 2os arreglos se pasan de las dos maneras distintas conocidasD ?orma e#plcita y ?orma implcita%

E)emplo: 23todo de 4auss


S.:R1.9INE metodoOgauss(0&:&n&m) IMP2I4I9 N1NE IN9E5ER& IN9EN9(in) DD n&m RE02& IN9EN9(inout) DD 0(n&n) RE02& IN9EN9(inout) DD :(n&m'") 6 Jaria7les au#iliares RE02 DD a>(n)&s>(n) IN9E5ER DD i&B&G RE02 DD #is&errprom Cuerpo del programa EN3 S.:R1.9INE metodoOgauss

3eclaraciCn de inicio de la su7rutina

Nom7re de la su7rutina

4uerpo del programa

3eclaraciCn de termino de la su7rutina

llamando a una subrutina


Para ;llamar< una su7rutina se utiliza la declaraciCn 4022& por eBemplo el siguiente PP (dri>er) llama a la su7rutina metodoOgauss Program dri>er IMP2I4I9 N1NE % % % 4022 metodoOgauss(4&3&n&m) % % % End program dri>er

2a lista de argumentos en el programa =ue llama (dri>er) de7e coincidir en orden y tipo con la lista de argumentos de la su7rutina llamada (metodoOgauss)

También podría gustarte