You are on page 1of 104

12/1/2015

https://translate.googleusercontent.com/translate_f

xmlMicrosoftWordcapitulosFortran_95VAIO20150112T04:38:2406:00Pscript5.dllVersin
5.2.220150112T04:38:2406:00AcrobatDistiller10.0.0(Windows)uuid:fd994cf33bed4130
be920a4fa67bb8bauuid:3064f8f772e7402c9ff3d4fdd2dd7b9b
eChapman:Fortran95/20034.BuclesyCarcterTextoTheMcGrawHill
paracientficosyManipulacinEmpresas.2008
Ingenieros,terceraedicin

BuclesyManipulacindecaracteres
OBJETIVOS
Sepacmocrearyutilizarbucleswhile.
Sepacmocrearyutilizarbuclesdeconteo.
Sepacundosedebeutilizarbucleswhileycuandodeberautilizarelconteo
ConocerelpropsitodeElCONTINUARydeclaracionesEXITycmousarlos.
Comprenderlosnombresdebucleyporquseutilizan.
Aprendemosacercadelasasignacionesdecaracteresyoperadoresdecaracteres.
Aprendemosacercasubstnngsymampulatwnsstnng.
Enelcaptuloanterior,hemosintroducidoestructurasramificadas,loquepermitiunprogramapara
seleccionaryejecutarunodevariosconjuntosposiblesdelosestados,enfuncindelvalordesorne
controlanlaexpresin.Enestecaptulo,vamosaintroducirbucles,quecausandeterminadassecciones
delcdigoqueserepitan.
Tambinvamosaaprendemosmssobrecmomanipularlasvariablesdecaracteresenestecaptulo.
Muchasdelasmanipulacionesimplicarbucles,yvamosautilizarlasmanipulacionesdecarctercomo
laprcticaenelusodebucles
CONTROLDECONSTRUYE:LOOPS
LosbuclessonconstmctsFortranquenospermitenejecutarunasecuenciadedeclaracionesmsdeuna
vez.Haydosformasbsicasdeconstruccionesdebucle:whileybuclesiterativos(ocontarloops)La
diferenciamajarhetweenestosdostiposdebucleesencmosecontrolalarepeticin.Elcdigoenun
buclewhileserepiteunnmeroindefinidodeveceshastasornecondicinespecificadausuarioest
satisfecho.Porelcontrario,cedeTBEenunbucleiterativoserepiteunnmerodevecesespecificado,y
elnmeroderepeticionestio11sseconocebefmequecomienceelbucle.
fChapman:Fortran95/20034.LoopsyCarcterlTextoTheMcGrawHillparaCientficosy
ManipulacinCompan1es,2008Ingenieros,terceraedicin
BuclesyManipulacindecaracteres
129
4.1.1ElbucleWhile
Unbuclewhileesunbloquedesentenciasqueserepitenindefinidamentemientrassornecondicinse
https://translate.googleusercontent.com/translate_f

1/104

12/1/2015

https://translate.googleusercontent.com/translate_f

cumple.LaformageneraldeunbuclewhileenFortran95/2003es
HACER
IF(logical_expr)SALIDA}CdigoBloquear
FINDO
cinseejecuta,elcontrolsetransfierealaprimeradeclaracindespusdelaENDDO.
Unbuclewhilepuedecontenerdeclaracionesa01mmeEXUnetutenninatesuejecucin.Cada
declaracinEXITsueleserunapartedeunainstruccinIFobloquedeconstruccin.Siel1og7ca
l_exprm1sSiesfalsocuandolosbenesentenciaejecutada,loscontmuesbucleseejecute.Siel1ogica
l_exprenelSIesciertocuandoseejecutalasentencia,elcontrolsetransfiereinmediatamenteala
primeradeclaracindespusdelaENDDO.Silaexpresinlgicaesciertolaprimeravezquellegaal
buclemientrasquelosestadosenellazodebajodelSInuncaseejecutarnenabsoluto!
Elpseudocdigocorrespondienteaunbuclewhilees
MIENTRAS
SIlogical_exprSALIDA
FindeMIENTRAS
yeldiagramadeflujoparaesteconstructosemuestraenlaFigura41.
Enunbuenprogramaestructurado,cadabuclewhiledebetenerunnicopuntodeentradaAndasolo
puntodesalida.ElpuntodeentradadeunbuclewhileeslasentenciaDO,yelpuntodesalidaesla
declaracindeTIEXTenerunnicopuntodesalidadeunbucledeayudaa11)paraconfirmarqueel
bucleoperacorrectamenteentodaslascircunstancias.Porlotanto,cadabuclewhilejadebeveofll)ofle
statemefltSALIR.
BuenasPrcticasdeProgramacin
CadabuclewhiledebecontenerslounadeclaracinEXTI.
Ahoravamosamostrarunejemploprogramadeanlisisestadsticoqueseimplementaporusinun
retretetiempo.
EjemplodeAnlisisEstadstico:
Esmuycomnenlacienciaylaingenieraparatrabajarcongrandesconjuntosdenmeros,cadaunode
loscualesesunufufmeasmementsumepruticularpwpertyquerueinteresa.
[Chapman:Fortran95/20034.Buclesycarcter!TextoTheMcGrawHillparaCientficosy
Manipulacinempresas.2008Ingenieros,TerceraEdicin
130CAPTULO4:LoopsyManipulacindecaracteres
DeclaracinDeclaracin.TRUEDeclaracin.DeclaracinDeclaracin
https://translate.googleusercontent.com/translate_f

2/104

12/1/2015

https://translate.googleusercontent.com/translate_f

FIGURA41
Unejemplosencilloseralascalificacionesenlaprimerapruebaenestecurso.Cadagradoserauna
medidadelaMuehunestudiantepartieularhaaprendidoeneleoursehastalafecha.
Granpartedeltiempo,noestamosinteresados
enmirardecercacadaunadelasmedicionesque

hacemos.Ensulugar,queremosresumirlosresultadosdeunconjuntodemedidasconunosnmerosque
nosdicenmuchosobreelconjuntodedatosengeneral.Dosdetalesnmerossonlamedia(omedia
aritmtica)yladesviacinestndardelaseriedemediciones.Lamediaaritmticadelamediaoun
conjuntodenmerossedefinecomo
41
dondexeslamuestraideNmuestras.Ladesviacinestndardeunconjuntodenmeroses
(42)
fChapman:Fortran95/20034.LoopsyCarcterlTextoTheMcGrawHillparaCientficosy
ManipulacinCompan1es,2008Ingenieros,terceraedicin
BuclesyManipulacindecaracteres
131
Ladesviacinestndaresunamedidadelacantidaddedispersinenlasmedicionescuantomayoresla
desviacinestndar,losmsdispersoslospuntosenelconjuntodedatossonImplementarunalgoritmo
queleeenunconjuntodemedicionesycalculalamediayladesviacinestndardelconjuntodedatos
deentrada.
Esteprogramadebesercapazdeleerenunnmeroarbitrariodelasmedicionesy,acontinuacin,
calcularlamediayladesviacinestndardelasmediciones.Vamosautilizarunbuclewhilepara
acumularlasmedidasdeentradaBEFARerealizarlosclculos.
medicionesdelaNRR,orllmquenohaymsdatosparaentrar.Paraponermedidassonpositivosocero,
yvamosautilizarunvalordeentradanegativocomounabanderaparaindicarquenohaymsdatos
toreadSiseintroduceunvalornegativo,elprogramasedetendrlecturadelosvaloresdeentraday
calcularlamediayestndardesviacindelconjuntodedatos.
l.Indiqueelproblema.
Puestoquesuponemosquelosnmerosdeentradadebenserpositivoocero,unadeclaracinapropiada
deesteprohlemseracalcularelpromedioylosofmeasurementsconjuntoOFAdesviacin5tandard,
suponiendoquetododeElmedicionessonpositivosocero,ysuponiendoquenolohacemossabende
antemanocmoseincluyenmuchasmedidasenelconjuntodedatos.Unvalordeentradanegativo
marcarelfinaldeElofmeasurementsestablecidos.
2.Definirlasentradasysalidas.
Losinsumosrequeridosporestaprogramareunnmerodesconocidode(encomaflotante)nmeros
positivosoceroreales.Losresultadosdeesteprogramasonunacopiaimpresadelamediayla
desviacinestndardelconjuntodedatosdeentrada.Adems,vamosaimprimirelnmerodepuntosde
https://translate.googleusercontent.com/translate_f

3/104

12/1/2015

https://translate.googleusercontent.com/translate_f

datosdeentradaparaelprograma,yaquesetratadeuneficazcontroldequelaentrada
3.Desi2J1laal2orithm.
EsteprogramasepuededividirentresetapasMajar:
Acumulalosdatosdeentrada
Calcularlamediayladesviacinestndar
EscribaTNEmedia,dev1ationestndar,yelnmerodepuntos
Elprimerpasoimportantedelprogramaesacumularlosdatosdeentrada.Paraello,tendremosquepedir
alusuarioqueintroduzcalosnmerosdeseados.Cuandoseintroducenlosnmeros,vamosatenerque
seguiruackdelnmerodevaloresintroducidos,mslasumaylasumadeloscuadradosdelosvalores.
Elpseudocdigodeestospasoses:
Inicialicen,sum_xysum_x2demasiado
PreguntaralusuarioparaelprximonumberReadenlaprximax
Six<0.SALIDA
n,_n+1sum_x<sum_x+xsum_x2,_sum_x2+x**2
[Chapman:Fortran95/20034.Buclesycarcter!TextoTheMcGrawHill
paracientficosyManipulacinempresas.2008
Ingenieros,terceraedicin
132CAPTULO4:LoopsyManipulacindecaracteres
NotequehemosToreadenelprimervalorantesdela()pruebaSALIRSIparaqueelbuclewhilepuede
tenerunvalorapruebalaprimeravezqueseejecutaLuego,debemoscalcularlamediayladesviacin
estndar.ElpseudocdigoparaestepasoisjustlasversionesofEqsFortran.(41)y(42).
x_barsum_x1Real(n)
std_devSQRT((REAL(n)*sum_x2sum_x**2)(REAL(n)*Real(n1)))
Porltimo,hayqueescribirlosresultados.
EscribaelvalormedioWr1teelstaneviationstEscribaelnmerodedatosdeentradaEl
diagramadeflujoparaesteprogramasemuestraenlaFigura42.evntsn
Tn'ti,l,l10e:
nfo
Comienzo
sumaxfO.
https://translate.googleusercontent.com/translate_f

4/104

12/1/2015

https://translate.googleusercontent.com/translate_f

sumax2fo.
LEERX1i/.TRUE..FALSE..nfn+lSUMX,,fsum,.x,+X,,)UIII_,L'C:.,uiii_
/\L/\L1Calcularx_oar,sta_aev
11
WRIIx_bar,1
1std_(j_ev,n
FIGURA42
DiagramadeflujoparaelprogramadeanlisisestadsticodelEjemplo41.
fChapman:Fortran95/20034.LoopsyCarcterlTextoTheMcGrawHillparaCientficosy
ManipulacinCompan1es,2008Ingenieros,terceraedicin
BuclesyManipulacindecaracteres
133
4.ThrnelalgoritmoendeclaracionesFortran.ElprogramaFortranfinalsemuestraJnFigura43
FIGURA43
Programaparaelclculodelamediayladesviacinestndardeunconjuntodenmerosrealesno
negativos.
PROGRAMAPropsitostats_l:conjuntodedatosquecontieneunnmeroarbitrariodevaloresde
entrada.Registroderevisiones:
IMPLICITNONE
!Diccionariodedatos:declararlostiposdevariables,definicionesyunidadesINIEGER::nOnmero
lfledemuestras1nput.StdVERDADEROdev=O.Ladesviacinestndardelasmuestrasdeentrada.
VERDADEROsum_xO.Lasumadelosvaloresdeentrada.Sum_x2Inmobiliarias=O.Lasumadelos
cuadradosdelosvaloresdeentrada.
XautnticobarLamediadelasmuestrasdeentrada.
!WhileLoopparaleerlosvaloresdeentrada.
HACER!LeaenlaprximaWRITEvalor(*,*)'Introduzcaelnmerode:LEA*,*)xWRITE(*,*)'
Elnmeroesx
!Pruebaparalasalidadebucle
!Calculalamediayladesviacinestndarx_arsum_x
std_dev=sqrt(sum_x2sum_x**2)(real(n)*real(n1)))!Dileusuario.

https://translate.googleusercontent.com/translate_f

5/104

12/1/2015

https://translate.googleusercontent.com/translate_f

WRITE(*,*)'Ladesviacinestndares:stddev
EstadsticasPROGRAMADEFIN
O[Chapman:Fortran95/20034.Loopsycarcter!TextoTheMcGrawHillparaCientficosy
Manipulacinempresas.2008Ingenieros,TerceraEdicin
134CAPTULO4:LoopsyManipulacindecaracteres
5.Pruebeelprograma.
Paraprobaresteprograma,WMcalcularlasrespuestasamanoparaunconjuntodedatossimple,yluego
compararlasrespuestasdelosresultadosdelprograma.Siutilizamostresvaloresdeentrada:3,4,y5,a
continuacin,lamediayladesviacinestndarsera
1N1

:X=Ix=12=4Ni=l3
\Vhenestosvaloresseintroducenenelprograma,losresultadosson
C:\libro\chap4>stats_lIntroducirelnmero:
Elnmeroes3.000000Ingreseelnmero:
4.
Elnmeroes4.000000Ingreseelnmero:
5.
Elnmeroes1.000000
Ladesviacinestndares:1.000000
Elprogramadeelasticidad)llamwer)lcorrectaforteONR)dedatoslt)dej.
Enelejemploanterior,peronohemospodidoseguirelprocesodediseocompleto.EstefaihmhasTDR
programavlithunerrorfatal!Tehacontadoeso?
Hemosfracasadoporquenocompletaron/yprobarelprogramfortodoslostiposposiblesdeinpu1s.
Miraelejemplounavezms.Sienleteithetnohaynmerososlounnmero,entoncesestaremos
dividiendoporceroenlosequatwnsanteriores!IFIEd1v1s10nporceroerrorwlllcausatfieprograma
paraabortar.Tenemosquemodificarelprogramaparadetectaresteproblema,informaralusuariodela
misma,y
dejarde

congracia.
Unaversinmodificadadelprogramallamadostats2semuestraenlaFigura44,conloscambiosque
aparecenennegrita.Aqu,vamosaconsultarparaversihaysuficientevalorinpnt)lantesperfurminglos
clculosSino,elprogramaimprimirunmensajedeerrorinteligenteydejardefumar.Pruebeel
programamodificadoportimismo.
https://translate.googleusercontent.com/translate_f

6/104

12/1/2015

https://translate.googleusercontent.com/translate_f

fChapman:Fortran95/20034.LoopsyCarcterlTextoTheMcGrawHillparaCientficosy
ManipulacinCompan1es,2008Ingenieros,terceraedicin
BuclesyManipulacindecaracteres
135
FIGURA44
Unprogramamodificadoanlisisestadsticoqueevitalosproblemasdedivisinporceroinherentesa
stats_lprograma.
PROGRAMA
Paracalcularlamediayladesviacinestndardeunconjuntodedatosdeentradaquecontieneun
nmeroarbitrariodevaloresdeentrada.
Programadordecambiol.11/12/05nS.J.Chapman
!Diccionariodedatos:declararvariables,definiciones,yunidadesINTEGER..n=OElnmerodenput
samples.VERDADEROdevstd=O.Ladesviacinestndardelasmuestrasdeentrada.VERDADERO
sum_xO.Lasumadelosvaloresdeentrada.REAL..sum_x2O.Lasumadeloscuadradosdelos
valoresdeentrada.REAL..xO.Unvalordedatosdeentrada.XautnticobarLamediadelasmuestras
deentrada.
WhileLoopparaleerlosvaloresdeentrada.
!LeerenelprximoWRITEvalor(**)'Entreelnmero:"READ(*,*)xWRITE(*,*)'Elnmeroesx
!Pruebaparalasalidadebucle
nn+1
+X
sumax2+x**2
!Reviseparaversitenemossuficienteentradadata.IF(r1<2)thei!Informacininsuficiente
WRITE(*,*)'valoresAlmenos2debenintroducirse!'
ElSErIhereesjntormationeno11gh,as!calcularlamediayladesviacinestndar
x_barsum_x/realdesqrt(n)stddev((real(n)*sum_x2sum_x**2)1(real(n)*real(n1)))
!Dileusuario.
(Continuacin)
O[Chapman:Fortran95/20034.Loopsycarcter!TextoTheMcGrawHillparaCientficosy
Manipulacinempresas.2008Ingenieros,TerceraEdicin
136CAPTULO4:LoopsyManipulacindecaracteres
https://translate.googleusercontent.com/translate_f

7/104

12/1/2015

https://translate.googleusercontent.com/translate_f

(Conclusin)
Write(*,*)'Los1sestndardev1at1on:,ESCRIBAdevstd(*,*)'Elnmerodepuntosdedatoses:',n
ENDIF
NOstaPROGRAMA
bucle.LaconstruccinDOWHILEtienelaforma
}
HACERMIENTRAS(logical_expr)Declaracin1Declaracin2
DeclaracinnFINHACER
Silaexpresinlgicaescierto,lasdeclaracionesdela1alanseejecutarn,yluegosecontrolanretomo
alasentenciaDOWHILE.Silaexpresinlgicaesantme,lasdeclaracionessernejecutadasde
nuevo.Esteprocesoserepitehastaquelaexpresinlgicaseconvierteenfalsa.Wdecontrolgallina
vuelvea!Que00declaracinWHILEylaexpresinlgicaesfalsa,elprogramaseejecutarlaprimera
declaracindespusdelaENDDO.
Esteconstmctesuncasoespecialdelamsgeneralmientrasqueelbucle,enelquelapruebadesalida
siempredebeocurrirenlapartesuperiordelbucle.Nohayningunaraznparautilizarcadavez,yaque
lageneral,mientrasquebuclehaceelmismotrabajoconunamayorflexibilidad.
.n.0.4nnil...r.JDNoutiliceDOWHILEbuclesennuevosprogramas.Utiliceelms
generalwhile"""""""""""""""""""""""""""""""""""""
4.1.3ElLooplterativeoCounting
EnelFortranlangnageunbuclequeexecntesunbloquedeinstruccionesunnumherdeterminadode
vecesseleconocecomoorabuclebucleiterativodeconteoDO.Elconstmctbucledeconteo
HACERindex=IENDistartDeclaracinincr1}CodeBiock
DeclaracinnFINHACER
dondeelndiceesunavariableenterautilizadocomoelcontadordelbucle(tambinconocidocomoel
ndicedebucle).Losqnantitiesintegetesta1t,esdecir,Ad,yenusonlapalmaditaametetsdel
fChapman:Fortran95/20034.LoopsyCarcterlTextoTheMcGrawHillparaCientficosy
ManipulacinCompan1es,2008Ingenieros,terceraedicin
BuclesyManipulacindecaracteres
137
contandobuclecontrolanlosvaloresdelasvariablesxindedurantelaejecucin.Elincrparmetroes
opcionalsiesmIssing,quesesuponequees1LasdeclaracionesentrelasentenciaDOyelFIN
HACERdeclaracinqueseconocecomoelcuerpodelbucle.Seejecutanvariasvecesdurantecadapaso
delbucleDO.Elbucledeconteoconstruirfuncionesdelasiguientemanera:
https://translate.googleusercontent.com/translate_f

8/104

12/1/2015

https://translate.googleusercontent.com/translate_f

l.CadaunodelostresparmetrosdebucleDOestata,IEND,yinerpuedehaberuna,unavariable,la
expresinOranconstante.Sisonvariablesoexpresiones,acontinuacin,susvaloressecalculanantes
deliniciodelbucle,ylosvaloresresultantesseutilizanpara
2.AlcomienzodelaejecucindelbucleDO,elprogramaasignaelvalor
ecuteslasdeclaracionesdentrodelcuerpodelbucle.
3.Unavezsehanejecutadolassentenciasenelcuerpodelbucle,lavariabledecontrolsevuelvea
calcularcomo
ndiceindex+incrSiindex*enersigueIEND*ener,elprogramaejecutalassentenciasdentro
4.Paso2serepiteunayotravez,siempreycuandoelndice*IENDiner*iner.Cuandoestacondicin
yanoesverdadera,laejecucinsaltaalaprimeradeclaracindespusdelafinaldelbucleDO.
ElnmerodeiteracionesarealizarporelbucleDOpuedecalcularseporelfol
iter=(43)
iner
Veamosatanmerodeejemplosconcretosparaquelaoperacindelbucledeconteomsclara.En
primerlugar,consideremoselsiguienteejemplo:
DOi1,1O
Declaracin
n
Enestecaso,lasdeclaraciones1atravsdenseejecutarn1Oveces.Lavariablendiceiser1enel
primertiempo,2enelsegundotiempo,yassucesivamente.Lavariablendiceserde10enelltimo
paseatravsdelasdeclaraciones.CuandosedevuelveelcontrolalasentenciaDOdespusdeldcimo
pase,lavariabledendiceiwillaumentarsea11.Desdeel11X1>10X1,elcontrolsetransferirala
primeradeclaracindespusdelaENDDOcomunicado.
Ensegundolugar,consideremoselsiguienteejemplo:
Declaracinn
O[Chapman:Fortran95/20034.Loopsycarcter!TextoTheMcGrawHillparaCientficosy
Manipulacinempresas.2008Ingenieros,TerceraEdicin
138CAPTULO4:LoopsyManipulacindecaracteres
Enestecaso,lasdeclaraciones1atravsdenseejecutarncincoveces.Lavariablendiceiwmsea1en
elprimertiempo,3enelsegundotiempo,yassucesivamenteLavariablendicewmsea9enelquintoy
ltimopaseatravsdelasdeclaraciones.CuandosedevuelveelcontrolalasentenciaDOdespusdel
quintopaso,lavariabledendiceiwillaumentarsea11.Desdeel11X2>1OX2,elcontrolse
transferiralaprimeradeclaracindespusdeladeclaracinENOOO.
Entercerlugar,consideremoselsiguienteejemplo:
https://translate.googleusercontent.com/translate_f

9/104

12/1/2015

https://translate.googleusercontent.com/translate_f

Cmopuedo1.1O,Declaracin1
ECLARACINnFINHACER
Aqu,lasdeclaracionesdela1alannuncaseejecutarn,yaNDICE*iNCR>iend*iNCRenel
momentofhstvetyqueseIeachedlasentenciaDO.Ensulugar,seconuolttansfettuprimeradeclaracin
despusdelaENDDOcomunicado.
Fmaily,conslderejemploFFIE:
HACERi=3,3,2Declaracin1
DeclaracinnFINHACER
Enestecaso,lasdeclaraciones1aNseejecutancuatroveces.Lavariablendiceiserel3deRHE
primeravez,1enelsegundotiempo,1enlaterceravez,y3enelcuartotiempo.Cuandosedevuelveel
controlalasentenciaDOdespusdelacuartapasada,lavariabledendiceisereducira5.Desde52
X>X32,elcontrolsetransferiralaprimeradeclaracindespusdeladeclaracinENOOO.
Elpseudocdigocorrespondienteaunbucledeconteoes
Declaracin
Declaracinn
yeldiagramadeflujoparaesteconstructosemuestraenlaFigura45.
EjemploLafuncinfactorial:
Parailustrarelfuncionamientodeunbucledeconteo,vamosautilizarunbucleDOparacalcularla
funcinfactorial.Lafuncinfactorialsedefinecomo
NO
N
ElCEDEFortranparacalcularNfactorialparaelvalorpositivodevouldser
ctorial*
fChapman:Fortran95/20034.LoopsyCarcterlTextoTheMcGrawHillparaCientficosy
ManipulacinCompan1es,2008Ingenieros,terceraedicin
BuclesyManipulacindecaracteres
139
.FALSE.ndiceincr.TRUE.:::IEND*Declaracinincr1Declaracin2
FIGURE45
DiagramadeflujoForadoconstructordebucle.
https://translate.googleusercontent.com/translate_f

10/104

12/1/2015

https://translate.googleusercontent.com/translate_f

Supongamosquequeremoscalcularelvalorde5!.Sines5,elbucleDOparameterswillbeistart=1,
IEND=5,andincr=l.Thisloopwillbeexecutedcincoveces),conlavariableiteniendoenvalne)lde1,
2,3,4,y5enel)l'JCcessivebucles.Elvalorresultantedenfaetorialser1X2X3XX4
EjemploCalcularelDadeAo:
43
Elofyeardaeselnmerodedas(incluyendoeldaactual)quehantranscurridodesdeelcomienzode
unaodeterminado.Esunnmeroenelrangode1a365paraaosordinarios,y1366paraaos
bisiestos.EscribaunprogramaFortranqueaceptaunda,mesyao,ycalculaeldadeao
correspondienteaesafecha
OLUCINParadeterminareldadelao,esteprogramatendrqueresumirelnmerodedas
cadamesanterioralmesencurso,mselnmerodedastranscurridosenelmescuralquiler.Unbucle
DOserutilizadapararealizarestasuma.Dadoqueelnmerodedasdecadamesvara,esnecesario
determinarelnmerocorrectodedasaaadirporcadamesASE!ECICASOconstnwtseleutilizapara
determinarlanumherpmperdedasaaadirporcadames.
Duranteunaobisiesto,undaadicionalsedebeagregaralajornadadelaoparacualquiermesdespus
defebrero.Estorepresentaeldaextraporlapresenciade29defebrerodelaobisiesto.Therefme,tu
perfonnelclculodelaoufdaconectly,debemosdeterminar
O[Chapman:Fortran95/20034.Loopsycarcter!TextoTheMcGrawHillparaCientficosy
Manipulacinempresas.2008Ingenieros,TerceraEdicin
140CAPTULO4:LoopsyManipulacindecaracteresqueaossonaosbisiestos.Enelcalendario
gregoriano,losaosbisiestossedeterminanporel
l.Aosdivisiblesentre400sonbisiestos.
2.Aosdivisiblepor100,peronopor400nosonaosbisiestos.
3.TodoYeanibleDHDpor4bntrWTpor100rueaobisiesto)l.
4.Todoslosotrosaosnosesaltanaos.VamosautilizarlafuncinMOD(pormdulo)para
determinarsinotaaoes
aoesdivisible.
gramoresumeelnmerodedasdecadamesantesdelmesencurso,yqueutilizaunSELECTCASE
construirparadeterminarlanumbetdeldasencadames.
FIGURE46
Unprograrnparacalculareldaequivalentedeaosdeunda,mesyao.
Propsito:Esteprogramacalculaeldadeaocorrespondienteaunafechadeterminada.Seilustraeluso
debuclesdeconteo
RegistrodeisionsreFechaProgramadorDescriionesdecambio
11113/06SJChapmanCdigooriginal
https://translate.googleusercontent.com/translate_f

11/104

12/1/2015

https://translate.googleusercontent.com/translate_f

!Diccionariodedatos:declararlostiposdevariables.definiciones,unidadesyINTEGERdada(dd)
VariableIndiceNTEGER
Mesmesentero(mm)
RamWRITEcalculaeldadeaodadala'fechadeescritura.Ingresemesencurso(1de12),das(131),
'write(*,*)'yelaoenquearder:READ(*,*)mes,da,ao
Compruebeaobisiesto,yaadedaextrainecesaria
por400sonbisiestos
siglosnosonaosbisiestos
(Continuacin)
fChapman:Fortran95/20034.LoopsyCarcterlTextoTheMcGrawHillparaCientficosy
ManipulacinCompan1es,2008Ingenieros,terceraedicin
BuclesyManipulacindecaracteres
141
(Conclusin)
leap_dayOtherw1secada4aos1sunsaltoyearELSEleap_dayOOtrosaosnosonaosbisiestos
ENDIF
!Calculardadedaday_of_yearaosDO1,1mes
entreeneroyelmespasado
+31
day_of_yearday_of_year+30rday_of_year+28+leap_day
FINDO
!DileWRITEusuario(*,*)'DadayWRITE(*,*)'Mesmeses
FINPROGRAMAdoy
Noswlllutilizamoslosresultadoskllownfollowmgparaprobarelprograma:
l.Ao1999noesunaobisiesto.01deenerodebeserdadelao1,y31dediciembretienequeserel
dadelao365.
2.Yeat2000esunyeatsalto.Jatmary1debeserdaufao1,y31dediciembretienequesereldadel
ao366.
3.Ao2Ullsnotaaobisiesto.01demarzodebeserdadelao60,SMCEenerotiene31das,
febrerotiene28das,yesteeselprimerdademarzo.
https://translate.googleusercontent.com/translate_f

12/104

12/1/2015

https://translate.googleusercontent.com/translate_f

Siesteprogramasecompila,yluegonmcincovecesconlasfechasanteriores,losresultadosson
C:\libro\chap4>doy
programal1scalculaTNEdasdelaog1venTNEfechaactual.Ingresemesencurso(1de12),das(1
31),
DMes1Ao1999dadelaorejay
oy
EsteprogrmaClcultesladydeyerdadala
(Continuacin)
!O[Chapman:Fortran95/20034.LoopsandCharacterTextoTheMcGrawHillparaCientficosy
Manipulacinempresas.2008Ingenieros,TerceraEdicin
142CAPTULO4:LoopsyManipulacindecaracteres
(Conclusin)
fechaactual.Introduzcamanthactual(112),das(131),yelaoenardersombrero:12311999
31
AoAo1999dasaf365
mantactualnterenqueArder:112000
Da
AoAo2000dasaf1
Estepragramcalculaeldaafyearivenlafechaactual.Introduzcamanthactual(1),das(131),yelao
enquearder:12312000
31
2000
Thi<::programacalcJateseldadeaodadala
fechaactual.Introduzcamanthactual(1de12),das(131).yelodoenqueArder:312001
Da
Mant
Ao2001
Elprogramada:launaregla)wer:paranuestrote:tfecha:entodocadecincopruebas:es
https://translate.googleusercontent.com/translate_f

13/104

12/1/2015

https://translate.googleusercontent.com/translate_f

EXAJ:\AnlisisestadsticoIPLE.44
AlgmithmImplementanqueTeadsenunconjuntodemeasmementsyealeulateslamediayladesviacin
estndardelconjuntodedatosdeentrada,cuandocualquiervalorenelconjuntodedatospuedeser
posmve,neganve,ocero.
fChapman:Fortran95/20034.LoopsyCarcterlTextoTheMcGrawHillparaCientficosy
ManipulacinCompan1es,2008Ingenieros,terceraedicin
BuclesyManipulacindecaracteres
143
SoLunoN
Ibisprogramadebesercapaztoreadenunnmeroarbitrariodemeasnrements,yluegocalcularlamedia
yladesviacinestndardelasmediciones.Cadamedicinpuedeserpositivo,negativoocero.
Yaquenopodemosusarunvalordedatoscomounabanderaenestaocasin,lepediremosalusuarioel
nmerodevaloresdeentrada,yluegousarunbucle00paraleerenesosvalores.Undiagramadeflujo
paraesteprogramasemuestraenlaFigura47.Tengaencuentaqueelbuclewhilehasidosustituidopor
una
T1.lLeuu"''''
n=O
(InicioJ
Jm)(n
sumax2=o.
t
1
LEAn
1
.FALSE..TRUE.
11"n>2/1iFALSO=l\VERDADERO::,rrr\i=i+ljwRITE'Almenos2/Vd1Uc:
OIIIU:OLUeentr.'tLarcurate:0UIII_A:0UIII_AUnasumax2sumax2+x**2t1
LEERx11x_bar,std_devt1WRITEx_bar,1stddevn111
J.
(Detngase)
'/
https://translate.googleusercontent.com/translate_f

14/104

12/1/2015

https://translate.googleusercontent.com/translate_f

FIGURA47
Diagramadeflujoparaelprogramaanalys1sstattsticalmodlftedUSMGunbucleDO.
[Chapman:Fortran95/20034.Buclesycarcter!TextoTheMcGrawHillparaCientficosy
Manipulacinempresas.2008Ingenieros,TerceraEdicin
144CAPTULO4:LoopsyManipulacindecaracteres
contandobucle.Elprogramamodificadoquepermiteelusodecualquiervalordeentradasemuestraen
laFigura48comprobarsufuncionamientoforyourselfbyencontrarlamediayladesviacinestndarde
lossiguientescincovaloresdeentrada:3.,l,0,1.,y..2.
FIGURA48
Modificadoprogramadeanlisisestadsticoquetrabajaconambosvaloresdeentradapositivosy
negativos.
PROGRAMAPropsitostats_3:
Registroderevisiones:
FechaProgramadordecambio
apman
NOIMPLICITO
!Diccionariodedatos:declararlostiposdevariables.definiciones,unidadesyINTEGER::i!INTEGER
ndiceLoop::nOElnmerodemuestrasdeentrada.StddevREALESLadesviacinestndardelas
muestrasdeentrada.Sumarealx=0.Lasumadelosvaloresdeentrada.Sum_x2VERDADEROO.La
sumadeloscuadradosdelosvaloresdeentrada.XVERDADERO0.Unvalordedatosdeentrada.
VERDADEROxmediabarralheotlasmuestras1nput.
WRITE(*,*)'Entreelnmerodepuntos:'
SI(n<2)ENTONCES!Datosinsuficientes
WRITE(*,*)'valoresAlmenos2debenintroducirse.
ELSE!quew111tienensuficientesdatos,demodo1etget1t's.
HACERLeervalores
READ(*,*)xWRITE(*,*)'Elnmeroesx
!Acumulasumas.sum_xsum_x+xsumasumax2x2+x**2
FINDO
fChapman:Fortran95/20034.LoopsyCarcterlTextoTheMcGrawHillparaCientficosy
ManipulacinCompan1es,2008Ingenieros,terceraedicin
https://translate.googleusercontent.com/translate_f

15/104

12/1/2015

https://translate.googleusercontent.com/translate_f

BuclesyManipulacindecaracteres
145
(Conclusin)
yo
x_bar=sum_x1real(n)sqrtstd_dev((real(n)*sum_x2sum_x**2)1(real(n)*real(n1)))
WRITE(*,*)'Lamediadeesteconjuntodedatoses:',ESCRIBANx_bar(*,*)'Ladesviacinestndar
es:,WRITE(*,*)'Elnmerodepuntosdedatoses:',n
ENDIF
DetallesdelaOperacin
AhoraquehemosvistoejemplosdeunconteoHACERbucleenfuncionamiento,examinaremos
sornedelosdetallesimportantesqueserequierenparautilizarbuclesdocorrectamente.
l.NoesnecesariosangrarelcuerpodelbucleDOcomohemosmostradoanteriormente.Elcompilador
Fortranreconocerelbucleinclusosicadadeclaracinenlaqueseiniciaenlacolumnal.Sinembargo,
los1scdigomuchomslegibles1felcuerpodelos1sbucledosangra,loquesiempredebesangrarlos
cuerposdesuDObucles.
UnabuenaprogramacinPrcticaLlhu<LucinrlPntTHPhnrJ,,nf'>nnJnnnhuhunnr
rnnrPCt'\<lt'PCtnTHPTP<lrl_..'T''.J't'capacidadydelcdigo.
2.LavariablendicedeunbucleDOnodebesermodificadoencualquierlugardentrodelbucleDO.
DadoqueeluariablendiceseutilizaparacontrolarlasrepeticionesenelbucleDO,cambiandopodra
producirresultadosinesperados.Enelpeordeloscasos,lamodificacindelavariablendiceeould
pwdueeunbucleinfinitoquenevacompleta.Considereelsiguienteejemplo.
PROGRAMAmalo1INTEGER::i
HACERi=1,4
1
FINDO
Sijseponea2cadavezquetbrougbelbucle,elbuclesinfinwm,hecauselavariabledendicenunca
puedesermayorque4!Estebucleseejecutarsiempreamenosqueseeliminelprogramaquelo
contiene.CasitodosloscompiladoresdeFortran.,Enfermosreconocentllisproblema,y
generarun

errorentiempodecompilacinsiunprogramaintentamodificarunavariablendicedentrodeunbucle.
!O[Chapman:Fortran95/20034.LoopsandCharacterTextoTheMcGrawHillparaCientficosy
Manipulacinempresas.2008Ingenieros,TerceraEdicin
146CAPTULO4:LoopsyManipulacindecaracteres

https://translate.googleusercontent.com/translate_f

16/104

12/1/2015

https://translate.googleusercontent.com/translate_f

Trampas
NuncamodifiqueelvalordeunavariablendicedelbucleDOmientrasquedentrodelbucle.
3.Sielnmerodeiteracionescalculadosapartirdelaecuacin43esmenoroigualacero,las
declaracionesprospectivasdentrodelbucleDOnoseejecutannuncaenabsoluto.Porejemplo,nuncase
ejecutarnlassentenciasenelsiguientebucleDO
IENDistart+incr2
3+1=o
iter=
incr1
4.EsposibledisearconteoHACERbuclesquecuentanabajo,ascomoarriba.ElsiguientebucleDO
ejecutatresvecesconisiendo3,2,1yenlosbuclessucesivos.
Haceryo
FINDO
5.LosparmetrosvariablesdendiceydecontroldeunbucleDOsiempredebenserdetipoentero.El
usodevariablesrealescomondicesdebuclehacenyparmetrosdecontroldebuclesolaseruna
caractersticalegal,peronodeseabledeFortran.FuedeclaradoobsoletoenFortran90,yhasido
completamenteborradodeFortran95.
6TtesposihleahranchdeunbucleDOencualquiermomentomientraselbucleseejecutalaejecucin
delprogramaTfhaceramadeunbucleDOantesquedeotromodoterminar,lavariablendicedelbucle
mantieneelvalorquetenagallinalaramaocurrido.Considereelsiguienteejemplo.
YoNTEGER
EDO
WRITE(*,*)i
LaejecucinseramificandelbucleDOyvayaaladeclaracindelaIRGTEenla
tercerpasotbroughelbucleCuandolaejecucinllegaalavariabledeclaracinIRITE
iwillcontieneunvalorde3.
7.SiunbucleDOsecompletaconnormalidad,la',HJteindaojtlww:triahleesindefinidocuandose
terminaelbucle.Enelejemplosiguiente,elvalorescritoporelestadoWRITEnoestdefinidoenla
standmdFmtian.
fChapman:Fortran95/20034.LoopsyCarcterlTextoTheMcGrawHillparaCientficosy
ManipulacinCompan1es,2008Ingenieros,terceraedicin
LoopsyCarcterManipulacin147
https://translate.googleusercontent.com/translate_f

17/104

12/1/2015

https://translate.googleusercontent.com/translate_f

INTEGER::IDoi=1.5
FINNOESCRIBA(*,*)
Enmuchosequipos,despusdequeelbuclesehacompletado,lavariabledendiceicontendrelprimer
valordelavariablendiceafallareneldex*enresiend*enlapruebaer.Enelcdigoanterior,el
resultadoseraporlogeneralcontienenun6despusdequeelbuclesetermina.Sinembargo,nocontar
conella!Dadoqueelvaloresoficialmente
programalsuterscom1s.
BuenasPrcticasdeProgramacin
NuncadependadeunavariablendicepararetenerunvalorespecficodespusdeunbucleDOse
completaconnormalidad.
4.1.4LasdeclaracionesCICLOyEXIT
Haydosestadosadicionalesquesepuedenutilizarparacontrolarelfuncionamientodelosbucleswhiley
contandobuclesdo:CYeLEyEXIT.
SiladeclaracineYEleesejecutadoenelcuerpodeunbucleDO,laejecucindelaiteracinactualdel
buclesedetendrycontrolarwmregresalapartesuperiordelbucle.Elndicedebucleseincrementa,y
laejecucinsereanudadenuevosielndicenohaalcanzadosulmite.UnejemplodeladeclaracineY
eLEenunconteodeDOsemuestralazoabajo.
PROGRAMAle
INTEGERi
HACERi1,5
SI(i==3ciclodeescritura(*,*)ENDDO
PROGRAMADEFIN
EldiagramadeflujoparaestebuclesemuestraenlaFigura49a.Cuandoseejecutaesteprograma,
C:\libro\cha4>ciclodepruebas
12
5
e1Chapman:Fortran95/20034.LoopsyCarcterTextoTheMcGrawHillparaCientficosy
Manipulacinempresas.2008
Ingenieros,terceraedicin
148CAPTULO4:LoopsyManipulacindecaracteres
TengaencuentaqueladeclaracineyeLEfueejecutadoenlaiteracincuandoiwas3,yelcontrol
https://translate.googleusercontent.com/translate_f

18/104

12/1/2015

https://translate.googleusercontent.com/translate_f

devueltoalapartesuperiordelbuclesinejecutarla\,!DeclaracinRTIEDespusdecontrolse
retumedalapartesuperiordelbucle,elndicedebucleseincrementayelbuclecontinulaejecucin.
SiladeclaracinEXITseejecutaenelcuerpodeunbucle,laejecucindelbuclesedetendryel
controlsetransfierealaprimerainstruccinejecutabledespusdelbucle.Unejemplodeladeclaracin
EXITenunbucleDOsemuestraacontinuacin.
WRITE(*.*)ENDiescribo(*,*)'Findelbucle!'PROGRAMADEFINt
EldiagramadeflujoparaestebuclesemuestraenlaFigura49b.Cuandoseejecutaesteprograma,la
salidaes:
1
2
Findelbucle!
TengaencuentaqueladeclaracinEXTIfueejecutadoenlaiteracincuandoyotena3aos,yel
controltransferidoalaprimerasentenciaejecutabledespusdelbuclesinejecutarlaIRGTE
comunicado.
TantoloseYeLEyEXITsentenciasfuncionanconambosbucleswhileycontandoHACENbucles.
4.1.5LoovsNamed
Esposibleasignarunnombredetumaunbucle.Elfunngenetalufunbuclewhileconattachedisnanre
DeclaracinDeclaracin
SI(1ogil_exprcaCICLO
IF(logical_exprSALIR[nombre]
FINDO
ylaformageneraldeunbuclederecuentoconunnombreadjuntoes
:]DOistartndice,iend,DeclaracinDeclaracinincr
I(logical_expr)CICLO
FINDO
y1\.FALSE.11\.TRUE.1/I"1i:S5\1/Staemets.TRUE/Vl==3>/ALSStaeme
tsla)IIGUE49(a)Flcwcha1ofaDOloopeOntaiing!..unstatpmenCYCLE(b)oa
RowchartHACEN.:..,\0
TlFALSO.VERDADERO.11\i:S5\1!Declaraciones.TRUE.DeclaracionesE.!1
conta(b)bucleningunEXSt3temert.
https://translate.googleusercontent.com/translate_f

19/104

12/1/2015

https://translate.googleusercontent.com/translate_f

::D)Cf
yo
3
.,.,..
y2.
!
P.=..
,.,Q.=
g'8
=
...S,.
..:
O
......
5...
.
oP.
=
!!.
.
'
::S.
"@
d
1l(D
26
G)
https://translate.googleusercontent.com/translate_f

20/104

12/1/2015

https://translate.googleusercontent.com/translate_f

ro
1
ro
e
O[Chapman:Fortran95/20034.Loopsycarcter!TextoTheMcGrawHillparaCientficosy
Manipulacinempresas.2008Ingenieros,TerceraEdicin
150CAPTULO4:LoopsyManipulacindecaracteres
dondenombrepuedetenerhasta31caracteresalfanumricos,quecomienzaconunaletra.
ElnombredadoalbucledebesernicodentrodecadaunidaddeprogramaSiunnombrees
bucletoaasignado,entonceselmismonombredebeaparecerenelextremoasociadoHACER.Nombres
sonopcionalesencualquiereYeLEydeclaracionesXITEasociadosconelbucle,perosison
usados,debenserelmismoqueelnombreenlasentenciaDO.
Porqubamosaquerernombrarunbucle'?Porejemplossencilloscomolosquehemosvistohasta
ahora,nohayningunaraznparticularparahacerlo.Laraznprincipalparaelusodenombresesayudar
anosotros(yelcompilador)mantenemoslazosdirectamenteennuestrasmentescuandolicated.Pors
quetenemosunaqueescientosdelargascolas,queabarcamuchaspginasdeanuncios.Puedehaber
muchos
entoncespodemosdecir
vistaataqueconstruirunfinparticularHACER,CYeLEodeclaracinEXIpertenecete.Ellosmah
nuestrasintencionesexplcitamenteclaro.Adems,losnombresdelosconstructospuedenayudarala
banderacompiladordelaubicacinespecficadeunerrorcuandouno
nrPfJCnnil.........EAsignarunnombrealosbuclesgrandesycomplicadosensu
programaparaayudarleamantenerlaspartesdelconstmctasociadojuntosensupropia
mente.'0'0'0'0'0'0'0'0
4.1.6delajerarquizacinLoopsybloqueIFconstructos
Joopslajerarquizacin
Esposiblequeunbucleparasercompletamentedentrodeotrobucle.Siunbucleestcompletamente
dentrodeotroune,losdosbuclescomieronllamadosbuclesanidados.Elsiguienteejemplomuestrados
HACERbuclesanidadosutilizadosparacalcularyescribirelproductodedos
mtegers.
INTEGERDOl.3
*.
https://translate.googleusercontent.com/translate_f

21/104

12/1/2015

https://translate.googleusercontent.com/translate_f

WRITE(*.*)I,'*',j,producto
FINHACERFINPROGRAMAanidadoloos
Enesteejemplo,elbucleexteriorDOasignarunvalorde1alavariabledendicei,yentoncesse
ejecutarelbucleDOinterior.ElbucleDOinteriorseejecutartresvecesconndicesvariables0.1con
valores1,2,y3Cuandotodoelinteriorsinlazosehacompletado,elexteriorDObucleasignarunvalor
de2alavariablendicei,yla
fChapman:Fortran95/20034.LoopsyCarcterlTextoTheMcGrawHillparaCientficosy
ManipulacinCompan1es,2008Ingenieros,terceraedicin
BuclesyManipulacindecaracteres
151
bucleDOinteriorseejecutardenuevo.EsteprocesoserepitehastaqueelexteriorHACERbucleha
ejecutadotresveces,ylasalidaresultantees
1*11
1*1*2233
2*1*22242*3*3613
3*39
TengaencuentaqueelbucleDOinteriorejecutacompletamenteBEFARelavariablendicedelexterior
HACERbucleseincrementa.
CuandouncompiladorFortranencuentraunFINHACERdeclaracin,asociaesadeclaracinconlams
internaactualmenteenlazoabierto.Porlotanto,elfinRhCTHACERdeclaracinanteriorclasesel
bucle"DOj=1,3",ylasegundaFINHACERdeclaracinanteriorCLASESla"i=1,DO3"bucle.Este
hechopuedeproducirdifcilesdeencontrarerroressiunENDDOdeclaracinseelimina
accidentalmenteenalgnlugardentrodeunconstmctbucleanidadoSicadaunodelosbuclesanidados
sellama,entonceselerrorsermuchomsfcildeencontrar.
Parailustraresteproblema,vamosa"accidentalmente"eliminarelextremointeriorDOcindelestado
enelejemploanterior,ycompilarelprogramaconelVisualFortranIntel

INTEGER..j,producto
HACERj1,3roduct=i*
WRITE(*,*)i,'*',j,FINproductoHACERFINPROGRAMAbad_nested_loops_1
Salida1HEdetfie1scompuer:
C:\libro\chap4>lfortbad_nested_loops_I.f90Intel(R)FortranCompilerparaaplicacionesde32bits,
Versin9.1Build20060706ZPacRageID:W_FC_C_9.1.028
https://translate.googleusercontent.com/translate_f

22/104

12/1/2015

https://translate.googleusercontent.com/translate_f

Derechosdeautor(Cl19852006IntelCorporation.Todoslosderechosreservados.
oops_1.f90(3):Error:hayunbloquesinterminar.compilacinabortadopormalaanidadabuclesl.f90
(1lcdigo
Elcompiladorinformadequehayunproblemaconelconstructodebucle,peronopuede
detectarelproblemahastaquesealcanceladeclaracinPROGRAMAFIN,ynopuededecirdndese
produjoelproblema.Sielprogramaesmuygrande,nosencontraramosanteunatareadifcilcuando
tratamosdelocalizarelproblema.
[Chapman:Fortran95/20034.Buclesycarcter!TextoTheMcGrawHillparaCientficosy
Manipulacinempresas.2008Ingenieros,TerceraEdicin
152CAPTULO4:LoopsyManipulacindecaracteres
Ahoravamosanombrarcadabucley"accidentalmente"eliminarelextremointeriorHACER
comunicado.
WRITE(*,*)i,'*',j,FINproductoterminanexteriorPROGRAMAbad_nested_loops_2
programaw11ssalidaFortran:
Intel(R)FortranCompilerparaaplicacionesde32bits,Versin9.1Build
ID:WFCC9.1.028
bad_nested_loops_2.f90(7):rror:Elbloquedeconstruccindenombresdebencoincidir,ynolohacen.
OUTERJNODOexterior
bad_nested_loops_2.t90(3)Error:Unex1stsbloqueunterm1nated.exterior:DOi=1,3
Elcompiladorinformadequehayunproblemaconlaconstruccindebucle,yseinformadequelos
buclesestuvieroninvolucradosenelproblemaIbispuedeserunaayudaimportanteenladepuracindel
programa.
Asignarnombresatodoslosbuclesanidadosparaqueseanmsfcilesdeentenderyde
depuracin.
IFDObuclesestnanidadas,debentenervariablesdendiceindependientes.Recuerdequeuno1S
poss1blecambiarunavanableMDEXwlthmelcuerpodeunbucleDO.Porlotanto,noesposible
utilizarlamismavariabledendiceparadosanidadabuclesdo,yaqueelinterior
bucleseraintentarcambiarlavariabledendicedellazoexternodentrodelcuerpodelbucleexterior.
Adems,sidosbuclessonparaanidar,unodeellosdeberecaercompletamenteenelotrolossiguientes
NObuclesestnanidadosincorrectamenteyunerrorentiempodecompilacinsegeneraparaeste
cdigo.
exterior:DO1,3
1nner:D
https://translate.googleusercontent.com/translate_f

23/104

12/1/2015

https://translate.googleusercontent.com/translate_f

fChapman:Fortran95/20034.LoopsyCarcterlTextoTheMcGrawHillparaCientficosy
ManipulacinCompan1es,2008Ingenieros,terceraedicin
BuclesyManipulacindecaracteres
153
LasdeclaracionesCICLOyEXITenbuclesanidados
SiuncorreoeYLEmE)(declaracindeTIparecensdentrodeunconjuntowmameddebucles
anidados,entoncesladeclaracinCYeLEoEXserefierealamsinteriordelosbuclesquelo
contienen.Porejemplo,considereelsiguienteprograma
INTEGER::i,j,producto
HACERi1,3
HACERj=1,3productosILE=i*jWRITE(*,*)i,'*',j,producto
FINDO
SielUMERbuclecontadorji:eqnala2,entoncesseejecutarlaCYCLEECLARACIN.Esto
harqueelrestodelbloquedecdigodelaDOmsinternadebucleseomiten,ylaejecucindelbucle
msinteriorserempezardenuevoconjaumentadoenl.Losvaloresdesalidaresultantesson
1*1*11332*12
3*133*39
Cadavezquelavariabledebucleinteriortenaelvalor2,laejecucindelbucleinteriorestaba
TambinesposiblehacerquelaeyeLEoladeclaracinEXITserefierenalbucleexteriordeun
constmctanidadadenombreIoopsporspeclfymgunnombredebuclemelcomunicado.Enelsiguiente
ejemplo,cuandoelcontadordebucleinternojesiguala2,ladireccinYeLEcaboestadoer
cinseejecutar.EstoharqueelrestodelbloquedecdigodelbucleexternoDOasaltar.yla
ejecucindelbucleexternoserempezardenuevoconaumentpor
l.
PROGRAMAENTEROtest_cycle_2::
1,3*j'*'
i,j,ouproducto
FINHACERFINinteriorPROGRAMAtest_cycle_2
Valoresdesalidaresultmg1HEson
[Chapman:Fortran95/20034.Buclesycarcter!TextoTheMcGrawHillparaCientficosy
Manipulacinempresas.2008Ingenieros,TerceraEdicin
https://translate.googleusercontent.com/translate_f

24/104

12/1/2015

https://translate.googleusercontent.com/translate_f

154CAPTULO4:LoopsyManipulacindecaracteres
SiempredebeusarnombresdebucleconCYCLEodeclaracionesEXTIenbuclesanidadospara
asegurarsedequeelbucleadecuadoseveafectadaporlasdeclaraciones
BuenasPrcticasdeProgramacin
e
BuclesdeanidacindentroSIconstruccionesyviceversa
EsposibleanidarbuclesdentrodelbloqueSIconstructosobloqueIFconstmctsdentrodebucles.Siun
bucleestanidadodentrodeunbloqueIFconstmct.laloovdebeestartotalmenteenunsolobloquede
cdigodelaconstruccinIF.Porejemplo,lassiguientesafirmacionessonilegalesyaquelostramosde
bucleentreelSIylosbloquesdecdigoELSEdelaconstmctSI.
exterior:SI(a<b)ENTONCES
interior:DOi1,3
LSEFINHACERinterior
FINyoexterior
Porelcontrario,lasdeclaracionestfiefollowmgsonlegales,hesbucletfieSMCEentuelyw1tfimunsolo
bloquedecdigodelaconstruccinif.
exterior:SI(a<b)ENTONCES
interior:DO1,3
FINHACERinterior
ELSE
introdujoenlaSeccin4.1.Sitieneproblemasconelcuestionario,vuelvaaleerlaseccin,
pidaconcursoseencuentranenlaparteposteriordellibro.ExaminelossiguientesNO
buclesydeterminarcuntasvecessercadabucle
fChapman:Fortran95/20034.LoopsyCarcterlTextoTheMcGrawHillparaCientficosy
ManipulacinCompan1es,2008Ingenieros,terceraedicin
BuclesyManipulacindecaracteres
(,1)
l.HACERindex=5,10
2.HACERj=7,10,1
3.HACERindex=1,10'10
4.HACERloop_counter=2,10,2::.NntmnhV.1nv,1
V
https://translate.googleusercontent.com/translate_f

25/104

12/1/2015

https://translate.googleusercontent.com/translate_f

6.i=1073
ExaminelossiguientesbuclesydeterminarelvaloreniresalfinaldecadaIOlosJoops.i\"'mmPque1
res,1ncr,aHmdexam1vson
7IRP=n
HACERndice1,10ires=ires+1
FINDO
v.V
o'""
=
HACERndice1,10
iresires+ndice
FINDO
':J.HesuIndicede1'10
11\LLT:0UI)\oi\..,LC
sires+ndice
r:rnnn
10.ires=S
uu1ndex1=1UlHACERindex21,10
1re:o11e:o1
FINDO
rrnnn
LIUUV
11.iresOuuindexllLu
HACERDEX1EX2,10n\1noeuoJtx.llresisi+1
rrnnn
LIUUV
FINDO
https://translate.googleusercontent.com/translate_f

26/104

12/1/2015

https://translate.googleusercontent.com/translate_f

ExaminelassiguientesafirmacionesFortranydecirsisononosonvlidos.THEVTfnosonvlidos.
laraznwhvTHEVsoninv::LIRL
12.loopl:haceryo=0.1.10
INDNRLUU1UI
loop3:DOi=i.j
FINHACERLoop3
(,
[Chapman:Fortran95/20034.Buclesycarcter!TextoTheMcGrawHillparaCientficosy
Manipulacinempresas.2008Ingenieros,TerceraEdicin
156CAPTULO4:LoopsyManipulacindecaracteres
13.FINHACERloop2ENDDOloopljFINHACERloop3FINHACERlooplFIN
HACERloopy
ASIGNACIONESDECARCTERYMANIPULACIONESDECARACTERES
DatosdeCarcterpuedensermanipuladosporelusodeexpresionesdecaracteresUnaexpresinde
caracterespuedensercualquiercombinacindelasconstantesdecaracteresvlidos,variablesde
carcter,operadorescharactcr,fuHctioHscarcterAHD.Unoperadordereputacionesoperadorahoh
datosdecaracteresqueseobtieneunresultadodecarcter.Haydostiposbsicosdelosoperadoresde
caracteres:especificacionesdesubcadenasyconcatenacin.Funcionesdeloscaracteressonfunciones
queproducenunresultadocarcter.
4.2.1AsignacindeChataclet
Unexpress10ncarcterpuedeserass1gnedaunavariabledecarcterw1thunadeclaracinass1gnment.
Silaexpresindecaracteresesmscortaquelalongituddelcarctervariable
capazdequeseleasigna,acontinuacin,elrestodelavariableserellenaconespaciosenblanco.Por
ejemplolosestados
CARCTER(len=3)::file_ext
>:Tonthv:1l11'ftiV\'enelarchivoextvariable(bdenotan>:uncarcterhlank)Tfexpresinde
caracteresesmslargaquelalongituddelavariabledecaracteresalqueseleasigna,acontinuacin,el
excesodeportiendelavariabledecarctersedescarta.Porejemplo,losestados
CARCTER(len=3)::file_ext_2fil='FILEOl'
almacenarelvalor'FIL'enlavariablefile_ext_2,y'EOL'lospersonajesson
fChapman:Fortran95/20034.LoopsyCarcterlTextoTheMcGrawHillparaCientficosy
ManipulacinCompan1es,2008Ingenieros,terceraedicin
BuclesyManipulacindecaracteres
https://translate.googleusercontent.com/translate_f

27/104

12/1/2015

https://translate.googleusercontent.com/translate_f

157
4.2.2subcadenaEspecificaciones
Unaespecificacinsubcadenaseleccionaunaportiandeunavariabledecarcter,ytratadequeportian
comosifueraunavariabledecarcterindependiente.Porejemplo,sielcad1variableesunavariablede
seiscaracteresquecontienelacadena'123456',entonceslasubcadenastr1(2:4)seraBeadetres
caracterescontammgthestnngvanable234.Elsubcadenastr1(2:4)enrealidadserefierealasmismas
posicionesdememoriacomocaracteres2a4destr1,porloquesielcontenidodestr1(2:4)se
cambian,lospersonajesdelamitadde
tr1variabledestambinser
Unasubcadenadecaracteressedenotamediantelacolocacindevaloresenterosquerepresentanel
inicio
nombredelavariable.Sielnmerodecaracteresfinalesmenorqueelnmerodepartida,uncero
cadenadecaracteresdelongitud.,illbeproducido.Elsiguienteejemploilustraelusodesubcadenas.
EjemploCulserelcontenidodelasvariablesa,b,yeestaralfinaldelsiguienteprograma?
4.5
CARCTERrlPROGRAMA(len=8)::a,b,e'ABCDEFGHIJ'
charlprueba
SoLunoN
Lasmanipulacionesdecarcterenesteprogramason:
l.Lnea3asignaelstting'AEFBCD611IJ'aunbotslolosaptosstochotrosaccionesCharseguardan,
yaqueunaessloochocaracteresdelongitud.Porlotanto,uncontendr
2.Lnea4declaracinassiGNSlacadena'12345678'ab.
3.Lnea5asignaelcarcterdesubcadenaun(5:7)ac.Desdecorreoesdeochocaracteresde
longitud,cincoespaciosenblancoserellenarnenlavariablee,yecontendrn
'EFGbbbbb'.
41ine6cesionariossubcadenasun(26)parasubcadenab(78)Dadoqueb(78)estaslodos
caracteresdelargo,slolosdosprimeroscaracteresdeun(2:6)seutilizar.Porlotanto,lavariableb
vvillcontiene'123456antesdeCristo'.
4.2.3Laconcatenacin(!!)Operador
Esposiblecombinardosomscadenasosubcadenasenunasolacadenagrande.Estaoperacinse
conocecomoroncatenation.ElopetatmconcatenacinenFoittanesuna
CD[Chapman:Fortran95/20034.Loopsycarcter!TextoTheMcGrawHillparaCientficosy
https://translate.googleusercontent.com/translate_f

28/104

12/1/2015

https://translate.googleusercontent.com/translate_f

Manipulacinempresas.2008Ingenieros,TerceraEdicin
158CAPTULO4:LoopsyManipulacindecaracteresdoblebarraconningnespacioentrelasbarras
(//).Porejemplo,despusdelasiguiente
Har2PROGRAMADECARCTER(len=lO)::unpersonaje(len=Bl::b,EAB'12345678'ea(l=3)
//b(4:5)//un(6:8)
FINPROGRAMAr2
variablesecontendrlacadena'ABC45FGH'.
4.2.4OperadoresRelatiooalconCarcterdeDatos
CuerdasCHARACTETpuedencompmedexptessionsinlogicalutilizandolasopetatorsrelacionales==,/
=,<,<=,>y>=.Elresultadodelacomparacinesunvalorlgicoqueesverdaderoofalso.Porejemplo,
laexpresin123'=='123'esverdadero,mientrasquelaexpresin'123'=='1234'esfalsa.En
estndarFortran,cadenasdecaracterespuedenser
compararonconcadenasdecaracteres,ylosnmerospuedensercomparadosconlosnmeros,pero
cadenasdecaracteresnopuedencompararsealosnmeros.
Cmosondospersonajescomparanparadeterminarsiunoesmayorquelaotra?Lacomparacinse
basaenelordendeclasificacindelospersonajesenelequipodondeseestejecutandoelprograma.El
ordendeclasificacindelospersonajeseselordenenelwhieh:yoeeurdentrodeunconjuntoeharaetet
speeifie.Porejemplo,elreputacion
"A"eselnmerodecaracteres65eneljuegodecaracteresASCII,mientrasqueelcarcter'B'esel
nmerocarcter66enelser(verApndiceA).Porlotanto,laexpresinlgica'A'<
'B'esciertoeneljuegodecaracteresASCII.Porotraparte,elcarcter'a'eselnmerodecaracteres97en
elconjuntoASCII,asque'a'<'A'esfalsaeneljuegodecaracteresASCII.Tengaencuentaquedurante
lascomparacionesdecaracteres,unaletraminsculaesdiferentedelaletramaysculacorrespondiente.
Cmosecomparandoscadenasparadeterminarsiunoesmayorquelaotra?Lacomparacincomienza
conelprimercarcterdecadacadena.Sisoniguales,entonceslossegundoschamctersHVOse
comparan.Esteprocesocontinahastaqueseencuentralaprimeradiferenciaentrelascuerdas.Por
ejemplo,'AAAAAB'>'AAAAAA'.
Qusucedesilossningscomierondiferenteslongitudes?Lacomparacinseiniciaconlaprimeraletra
decadacadena,yprogresaatravsdecadacartahastaqueseencuentraunadiferencia.Silosdosstnngs
sonelmismotodoelcaminohastaelfinaldeunodeellos,entonceslaotracadenaesconsideradoelms
grandedelosdos.Porlotanto,
'AB'>'AAAA'y'AAAAA'>'AAAA'
4.2.5FuncioneslntrinsicCarcter
UnasfuncionesintrnsecasdecaracterescomunesseenumeranenlaTabla41.FuncinIACHAR(e)
aceptaunsolocarctere,yretornoselnmeroenteroconespondingtusuposicinenel
https://translate.googleusercontent.com/translate_f

29/104

12/1/2015

https://translate.googleusercontent.com/translate_f

fChapman:Fortran95/20034.LoopsyCarcterlTextoTheMcGrawHillparaCientficosy
ManipulacinCompan1es,2008Ingenieros,terceraedicin
BuclesyManipulacindecaracteres
TABLA41SorneNombredelpersonajecomnfnnctionsintrnsecas
Funcinyargumento(s)TipodeargumentoTipoderesultadoACHAR
(IVAL)INTCHAR

159
ComentariosDevuelveel
carctercorrespondientea
IValen

lasecuenciadeclasificacinASCIIIACHAR(char)CHARINTDevuelveelenterocorrespondienteeh
arenlasecuenciadeclasificacinASCIILEN(strllCHARINTDevuelvelalongituddestr1en
caracteres.Sinespacios.
ConjuntodecaracteresASCII.Porejemplo,elIACHARfuncin('A')devuelveelentero65,porque"A"
eselcarcternmero65eneljuegodecaracteresASCII.
FuncinACHAR(i)aceptaunvalorenteroi,ydevuelveelcarcterenesaposicinenelconjuntode
caracteresASCIIPorejemplolafuncinACHAR(65)devuelveelcarcter'A',porque'A'eselcarcter
nmero65enelASCIIConjuntodecaracteres.
FuncinLEN(str)eIM(str)devuelvenlalongituddelacadenadecaracteresespecificada.FuncinLE
N(str)devuelvelalongitud,incluyendolosblancosdecola,mientrasquelafuncinLErLTRIH(sL1)
Ietmnslastiingconespaciosenblancotiailingsttippedapagado.
FuncinTRIM(str)aceptaunacadenadecaracteresydevuelvelacadenaconlosespaciosenblanco
trmhngstnppedapagado.
introdujoenlaSeccin4.2.Sitieneproblemasconelcuestionario,vuelvaaleerlassecciones,
pregunteconcursoseencuentranenlaparteposteriordellibro.
l.SupongamosqueunequipoutilizaeljuegodecaracteresASCII.Estcadaunodelossiguien
resultadoser?(Tengaencuentaquel'denotauncarcterenblanco.)(B)'La'<'Al'(d)TRIM
('Hellobbl''l//"ah"
2.SupongamosquelasvariablesdecarcterSTRL,str2,ystr3contienenlosvalores
M(str3)TRIM(STRL)//TRIM(str2)(*,*)LEN(str3l(*,*)LEN_TRIM(str3)
[Chapman:Fortran95/20034.Loopsycarcter!TextoTheMcGrawHillparaCientficosy
ManipulacinEmpresas.2008Ingenieros,TerceraEdicin
CAPTULO4:LoopsyCarcterManipulacin
Conjuntodecaracteres.Escadaunadelassiguientesexpresioneslegaloilegal?Siunaexpresines
legal,culsersuresultado?
str2(2:4)
(B)str3//str2(4:4)
(E)STRL>str2
(D)STRL>str3
11)
https://translate.googleusercontent.com/translate_f

30/104

12/1/2015

https://translate.googleusercontent.com/translate_f

(F)IACHAR(C67
CARCTER(len=lO)cad2worldlCARCTER(len=20)str3str3=STRL//cad2
EjemploShijtingCuerdasdeMaysculas:
6.4
Comohemosaprendidoenestecaptulo,lasletrasmaysculasyminsculassondiferentescuerdas
dentro.Estadiferenciaentreletrasmaysculasyminsculas,puedecausarunproblema
1STRIGN1
cuandoestamostratandodeigualarocomparardoscadenasdecaracteres,yaquenoeslomismoque1s
tring1o1String1Siqueremoscomparardoscadenasparaversicontenanlasmismaspalabras,no
podramosconseguirelrespuestacorrectasielusodemaysculasdelasofdswdiffefed.
Alhacercomparaciones,amenudoesdeseablecambiartodosloscaracteresenmaysculas,demodoque
cadenasidnticassiemprecoincidirn.Wunprogramaritoqueaceptadoscadenasdeunusuario,ylas
comparaparadeterminarsisonigualesignorandocaso.Parahacerlacomparacin,convertirunacopia
decadacadenaamaysculas,ycompararlascopias.Dgalealusuariosilasdoscadenassoniguales.
VamosasuponerqueelequipodeejecutarelprogramautilizaeljuegodecaracteresASCII.
1\pndiceAmuestrala1\:secuenciadeclasificacinSCII.SinosfijamosenelApndice/'",podemos
verquehayafixeddesplazamientode32caracteresentreletrasmaysculasylaletletloweicase
conespondingencadasecuenciadeclasificacin.Allletteismenmdei,ynohaycaracteresno
alfabticosmezcladosenelmediodeelalfabeto.
fChapman:Fortran95/20034.LoopsyCarcterlTextoTheMcGrawHillparaCientficosy
ManipulacinCompan1es,2008Ingenieros,terceraedicin
BuclesyManipulacindecaracteres
161
l.Indiqueelproblema.
Escribirunprogramaqueleadoscadenasdecaracteres,conviertetodaslasletrasminsculasenuna
copiadecadacadenadecaracteresamaysculas,ycomparalascuerdasporlaigualdad.Elprocesode
conversinnodebeafectaraloscaracteresnumricosyespeciales.Elprogramadebeescribirunmensaje
indicandosilasdoscadenassonigualesono,ignorandomaysculasyminsculas.
2.Definirlasentradasysalidas.Lasentradasalprogramasondoscuerdasstr1ystr2.Lasalidadela
pro
3.DescribirlaMirandolatablaASCIIenelApndiceA,observamosquelasletras
maysculassean
ginebraensecuencianumher65mientrasquelasletrasminsculasheginensecuencianumher97Hay
exactamente32nmerosentrecadaletramaysculaysuequivalenteenminsculas.Adems,nohay
otrossmbolosmezcladosenelmediodelalfabeto.
https://translate.googleusercontent.com/translate_f

31/104

12/1/2015

https://translate.googleusercontent.com/translate_f

Estoshechosnosdannuestroalgoritmobsicoparalascadenasamaysculascambiando.Vamosa
determinarsiunpersonajeconunaletraminsculapordecidirsiestentre"a"y"z"eneljuegode
caracteresASCII.Siesas,entoncesvamosarestar32desdesunmerodesecuenciaparaconvertir1ta
maysculas,USMGlosfunctlonsAeHARy1AeHAR.1HEpseudocdigo1mt1alparaestealgoritmo
es
SolicitarSTRLystr2
HagaunacopiadeSTRLystr2enstrlaystr2a
DOparacadacarcterenSTRL
Determinarsielpersonajeesminscula.Siesas,
Convertiraenteroforma
Restar32desdeelnmeroentero
orm
DOparacadacarcterencad2
Convertiraenteroforma
ConvertirdenuevoalaformadelcarcterdefindeSIFINDO
CompararstringsWritefueradesplazadoresultados
Elpseudocdigofinalparaesteprogramaes
SolicitarSTRLystr2READSTRLcad2
(Continuacin)
[Chapman:Fortran95/20034.Buclesycarcter!TextoTheMcGrawHillparaCientficosy
ManipulacinEmpresas.2008Ingenieros,TerceraEdicin
162CAPTULO4:LoopsyManipulacindecaracteres
(Conclusin)
SIstrla(i:i)>='a'.ANO.strla(i:i)<'z'=ENTONCESstrla(i:il<ACHAR(IACHAR(strla(i:il32l
FINSIFINDO
SIstr2a(i:i)>='a'.ANO.str2a(i:i)<'z'=ENTONCESstr2a(i:i).ACHAR(IACHAR(str2a(i:i)32)
FINSI
str2aquelascadenassoniguales
str1ngsnosonecuaciones
ENDIF
https://translate.googleusercontent.com/translate_f

32/104

12/1/2015

https://translate.googleusercontent.com/translate_f

dondelengeslalongituddelacadenadecaracteresdeentrada.
4.ThrnelalgoritmoendeclaracionesFortran.
ElprogramadeFortranresultantesemuestraenlaFigura41O.
FIGURA410
CamparePrograma.
Purose:Comparardoscadenasparaversisonequivalentes,ignorandomaysculasyminsculas.
Registroderevisiones:
E
declararvariablestipos,definicionesyunidades
LoopndiceSTRLPrimeracadenaacomparestrlaCopiadestr1ngprimeraf1paracomparestr2segunda
cadenaacomparar
3t12aCopiade3t'COI1d3TLi11gaeo111pa1t'
ED
WRITE(*,*)'Enterprimeracadenaacomparar:'
1
WRITE(*,*)'Entersegundacadenaacomparar:"READ(*,*)cad2
demodoquelascadenasoriginalesnosemodifican
fChapman:Fortran95/20034.LoopsyCarcterlTextoTheMcGrawHillparaCientficosy
ManipulacinCompan1es,2008Ingenieros,terceraedicin
BuclesyManipulacindecaracteres
163
(Conclusin)
lAhoracambiarlasletrasminsculasamaysculas.HACERi1,LEN(strla)IF(strla(i:i)>='a'.ANO
strla(i:.I)<'z'=)ENTONCESstrla(i:i)ACHAR(IACHAR(strla(i:i))32)
FINQuhacenlosi=l.LEN(str2a)IF(str2a(i:i)>='a'.ANOstr2a(i:.I)<'z'=)ENTONCES
ENDIFEODO
CompararcuerdasyescribirelresultadoIF(str2astrla)luegoescribir(*,*)STRL,str2,"'ignorando
maysculasyminsculas."
WRITE(*,*)STRL,/="',str2","ignorandomaysculasyminsculas."ENDIF
https://translate.googleusercontent.com/translate_f

33/104

12/1/2015

https://translate.googleusercontent.com/translate_f

5.ProbarelprogramaFortranresultante.
Vamosaprobaresteprogramapasndolodosparesdecuerdasparacomparar.Unpar1s1denflcal
exceptoparaelcaso,ylosotros1spmrno.Resultados1HEdelprogramapordosconjuntosdecadenas
deentradason:
C:Librochap4\>comparar
'Estaesunaprueba."
"ESTOESUNAPRUEBA.
C:\libro\cha
Introduzcaprimeracadenaacomparar:".EstaesunapruebaIntroduzcasegundacadenaacomparar:'.
Estaesotraprueba'
lh1s1sunaprueba.lh1s1scasootraprueba1gnor1ng.
Elprogramapareceserwrabajocorrectamente.
EjemploFsicaElvuelodeunabola:
SiasumimoslafriccindelaireinsignificanteeignoramoslacurvaturadelaTierra,unabolaquese
lanzaalairedesdecualquierpuntodelasuperficiedelatierrasseguirunftightparablica
e1Chapman:Fortran95/20034.Buclesycaracteres!TextoTheMcGrawHill
ManipulacinEmpresas.2008
paraCientficoseIngenieros,terceraedicin
164CAPTULO4:LoopsytrayectoriaManipulacindecaracteres(verFigura411a).Sedalaalturade
lapelotaencualquiertiempotdespusdequeselanza
1
2
y(t)=Yo+VY0t+LGT(44)
dondeyoeslaalturainicialdelobjetosobreelsuelo,veslavelocidadverticalinicialdelobjeto,ygisla
aceleracinduetogravedaddelaTierra.Ladistanciahorizontal(rango)viajporlabolacomouna
funcindeltiempodespusdequeselanzaesdado
45:x(t)=X+Vxot(45)
0
dondeXeslaposicinhorizontalinicialdelapelotaenelsuelo,yVXOeslainicial
0
https://translate.googleusercontent.com/translate_f

34/104

12/1/2015

https://translate.googleusercontent.com/translate_f

velocidadhorizontaldelapelota.
Silapelotaeslanzadaconsornevovelocidadinicialenunngulodecorreosgradosconrespectotu
rostrosmdelXX,elhminicialcomerhoriyverticalcumpunentsufvelocidadser
vw=cosvo()(46)
y
OrigenImpactoX
(A)
YA
1

"'
X
VX
FIGURA411
(A)Cuandounabolasetlnownhaciaarriba,sigueuntiajectoryparablico.(B)Elhmizontalylos
componentesverticalesdeunvectordevelocidadvenuncorreonguloconrespectoalahorizontal.
fChapman:Fortran95/20034.LoopsyCarcterlTextoTheMcGrawHillparaCientficosy
ManipulacinCompan1es,2008Ingenieros,terceraedicin
BuclesyManipulacindecaracteres
165
(47)
Supongamosquelapelotaeslanzadainicialmentedesdelaposicin(x0,y,)=(0,O)conunavelocidad
inicialvde20metrosporsegundoenunnguloinicialdecorreosgrados.Diseo,escribiryprobarun
programaquevaadeterminarladistanciahorizontalrecorridaporlapelotadesdeelmomentoenquefue
lanzadahastaquetoqueelsuelootravez.Elprogramadebehacerestoparatodoslosngulosdecorreo
deOa90en1opasos.Determinarelnguloequemaximizalagamadelapelota.
pelotalanzada.Podemoshacerestoprimeroencontrareltiempoquelapelotaquedaenelaire,yluego
encontrarladistanciahorizontalquelapelotapuedeviajarduranteesetiempo.
Eltiempoquelapelotapermanecerenelairedespusdequeselanzapuedecalcularseapartirdela
Ecuacin44.Lapelotatoqueelsueloenelmomentotparalosquey(t)=O.Recordandoquelabolase
iniciardesdeelniveldelsuelo(y(O)=0),ydespejandot,obtenemos:
2
https://translate.googleusercontent.com/translate_f

35/104

12/1/2015

https://translate.googleusercontent.com/translate_f

y(t)+YoVyot+21gt(44)
O=O+v
O=
paraquelapelotaestarenelniveldelsueloeneltiempot1=O(cuandonostiramos),yenelmomento
Y2=
Ladistanciahmiwntalquelapelotatiaveleneltiempot2seencuentraFWMEcuacin45.
(45)
RangodeU+VXOf2'0J
2vv.
ange
g
e1Chapman:Fortran95/20034.BuclesyCarcterTextoTheMcGrawHillCompanies.2008
ParaloscientficosyManipulacinIngenieros,terceraedicin
166CAPTULO4:LoopsyManipulacindecaracteres
Podemossustituirlasecuaciones46y47paraVXOyvyoenlaecuacin48paraobtenerunaeqnation
expresaentrminosdelavelocidadvinicialynguloinicial()
2(vocosO)(vapecadoO)
Rango=2v2
Rango=acosOpecadoO(49)g
Ensegundo,yqueelbalnserlanzadoentodoslosngulosde0a90en1opasos.Finalmente,
cualquier
es9.81metrosporsegundoalcuadrado.Ahoravamosaaplicarnuestrostechmquedes1gnath1s
problema.
Problematbe1.Estado
Unadeclaracinapropiadadeesteproblemasera:Calcularelrangoqueunasalaviajaracuandoselanza
conunavelocidadinicialdeVatannguloinicialO.Cal
0
culardeesterangoporavde20metrosporsegundoytodoslosnguloshetweenoOy90,m19
mcrements.Deter/:RMEelngulo(JquewzllresultansoyelmaxzmumrangeforlasalaSupongamos
quenohayfriccindelaire..
https://translate.googleusercontent.com/translate_f

36/104

12/1/2015

https://translate.googleusercontent.com/translate_f

2.Definirlasentradasysalidas.
AmedidaqueelproblemasedefineABOve,noserequiereninpnts.\Vesaberdesdeelplanteamiento
delproblemaloqueserVAndo,
porloquenohaynecesidaddeellosToread.Lassalidas

0
deesteprogramaserinflablequemuestraelrangodelabolaparacadangulo(J,yelnguloOparalos
queelrangoesmxima.
3.Disearelalgoritmo.EsteprogramasepuederomperdovmenelFolloingpasosMajar
DOparatheta=Oa90derees
Calculaelrangodelapelotaparacadangulotheta
Determinarsiestathetaproduceelrangomximohastaelmomento
Escribirelrangocomounafuncindetheta
FINDO
Escribaalcancemximodelatetayield1ng
Unbucleiterativon00esapropiadoparaestealgoritmo,yaqueestamoscalcalatinglagamadelapelota
duranteundeterminadonmerodengulos.VamosacalcularelrangoparacadavalordeO,ycompate
cadatangeconelmaximumtangeencontrtangordoparadeterminarqunguloseobtieneelalcance
mximo.TengaencuentaquelasfuncionestrigonomtricastrabajodeMrad1ans,porloquelosngulos
mgradosdebenserconvertidosarad1ansBEFARelos1srangocalculado.Elpseudocdigodetalladade
estealgoritmoes
Inicialicemax_rangeymax_degreesdemasiado
DOparatheta=Oa90gradosdegreesradiantheta*2rad(Convertirgradosenradianes)ngulo(2.*v0
**21gravi)*sin(radian)*cos(radianes)Escribathetaycorrierone
fChapman:Fortran95/20034.LoopsyCarcterlTextoTheMcGrawHillparaCientficosy
ManipulacinCompan1es,2008Ingenieros,terceraedicin
BuclesyManipulacindecaracteres
167
(Inicio)
1ou1max_rangeO.max_degreesOvO<?O.FALSE.theta=O+heta<9UE.\H11l
Calculcomigama'f1'f)TTC1ranLge::1<::::e.gamax_rangemarimri<=>nr<=>
<=>c:<=>triJ11
1
/'NTTr1
https://translate.googleusercontent.com/translate_f

37/104

12/1/2015

https://translate.googleusercontent.com/translate_f

1'"L'"uu"1
max_degrees
...
(Detngase)
/
FIGURA412'
DiagramadeflujoparaunprogramaparadeterminarelngulofJalaqueunapelotalanzadaconuna
velocidadVinicialde20m/sviajarmslejos.
0
max_rangerange
FINSI
Escribamax_degrees,max_range
1HEdiagramadeflujoparath1s1sprogramamostradomFigura412.
4.GireelalgoritmoendeclaracionesFortran.ElprogramadeFortranfinalsemuestraenlafigura413.
eChapman:Fortran95/20034.LoopsandCharacterTextoTheMcGrawHill
1
paracientficosyManipulacinempresas.2008
Ingenieros,terceraedicin
168CAPTULO4:LoopsyManipulacindecaracteres
Figura413ProgramahaJlparadeterminarelnguloquemaximizaelrangodeunasaladethmwn
BolaPROGRAMA
Propsito:
Tat1distanciaealculateaveledporunabolatli1Ovvilaundeterminado
unleTHETAyenunaifiedsuVOvelocidadapartirdeunpuntodeladelatierra,gnoringlosefectosde
lafriccindelaireylacurvaturadelatierra.
Registroderevisiones:FechaPropisn
11/14/06SJChapmanCdigooriginalNOIMPLICITO
!Diccionariodedatos:declararconstantes
https://translate.googleusercontent.com/translate_f

38/104

12/1/2015

https://translate.googleusercontent.com/translate_f

REAL,0.01745329DEGREPARMETROS==>convrad.
REALPARMETRO::GRAVEDAD9.81!Accel.debidoaTygravi(m/s)
!Diccionariodedatos:declararlostiposdevariables,definicionesyunidadesINTEGER::max_degrees!
nguloenelqueelmximoseproducerng(grados)max_rangeVERDADEROramximadelapelota
envelVO(metros)venta::Gamagamadepelotaenunnguloparticular(metros)real::radianngulo
enelqueselanzlabola(enradianes)dengulothetaINTEGERenelqueselanzlabola(engrados)
max_rangeO.
vO=20.
!Loopsobretodoslosngulosespecificados.bucle:DOtheta=O,90
real(theta)*DEGRE
!Calcularrangoenmetros.1ange(2.*v0**2GRAVEDAD)*SIN(1adia11)*COS(Iadian)
GamaRange,y
Compareelrangodelaescalamximaanterior.Siesterangoesmsgrande,guardarloyelnguloenque
seprodujo.(Rango>max_range)ENTONCES
gamamax_range
max_degrees=theta
fChapman:Fortran95/20034.LoopsyCarcterlTextoTheMcGrawHillparaCientficosy
ManipulacinCompan1es,2008Ingenieros,terceraedicin
LoopsyCarcterManipulacin169
(Conclusin)
ENDIF
BucleFINDO
!Saltarunalnea,yluegoescribirelalcancemximoyelngulo!enqueseprodujo.WRITE(*,*)
escribe(*.*)"GamaMax='max_range,'a','max_degreesRees
dadounnombreusandoelatributodeparmetro,ytodaslasreferenciasalaconstanteenelusodel
programaquedannombrea1\ssesealanteriormente,laaceleracindebidaalagravedaden:ea
nivelsepuedeencontrarencualquiertextodefsica.Setratade9,81m/s2,dirigidahaciaabajo.
5.Pruebeelprograma.
Paraprobaresteprograma,vamosacalcularlasrespuestasporpartedealgunosdelosngulos,y
compararlosresultadosconlasalidadelprograma.
2
https://translate.googleusercontent.com/translate_f

39/104

12/1/2015

https://translate.googleusercontent.com/translate_f

2(20).
()=Oo:Rango=cosSsmO=Ometros
9.81
2
Range=2(20c)os(js.M(51fj=7.080metros
51f
9,81180180
RangoCOSSlll9.8118018040,71metros
()=40:(j45.
Cuandoseejecutallbaprograma,seproduceunamesa90delneadengulosyrangos.Paraahorrar
espacio,slounaportiandelatablasereproduceacontinuacin.
C:\libro\chap4>bola
1
fletaogrados:RangoO.OOOOOOE+OOmetrostheta1gradosRango1.423017metrosTheta3
gradosRango4.262118metrosTheta5gradosRango7.080455metros
ThetaThetaThetaThetaThetaThetaTheta40reesRangode41grados:Rangode42gradosRangode
43grados:Rango
44gradosRange
45grados:Rangode46gradosRango40.155260metros40.37790040.551350metrosmetros
40.675390metros
40.749880metros
40.77472040.749880metros111eters
grados
Lasalidadelprogramacoincideconnuestroclculomanualparalosnguloscalculadosanteriormentea
laexactitudde4dlgltdelcaiculatwnmano.Tengaencuentaquelagamamax1mumseprodujoenun
ngulode45.
4.3DEPURACINFORTRANLOOPS
Elmejorenfoqueparalalocalizacindeunerrorenunprogramaquecontienebuclesesutilizarun
depuradorsimblico,siunesesuministraconcompiletyom.Debesolicitaryominstructm01persona
consulteconmanualesdesusistemaparadeterminarcmoutilizareldepuradorsimblicosupphedw1th
sucompllerparticularyequipo.
https://translate.googleusercontent.com/translate_f

40/104

12/1/2015

https://translate.googleusercontent.com/translate_f

UnenfoquealternativoparalocalizarelerroresinsertardeclaracionesWRITEenelcdigopara
imprimirvariablesimportantesenlospuntosclaveenelprograma.Cuandoelprogramaesnm,las
declaracionesdelaIRGTEseimprimenlosvaloresdelasvariablesclaveEstosvalorespuedenser
comparadosconlosquesepuedenesperar,yloslugaresdondeelValumrealylaprevistadiferirvlill
servircomounapistaparaayudarleaLOCAREelproblema.FDRejemplo,paraverificarel
funcionamientodeunbuclederecuento,lassiguientesafirmacionesWRITEpodraseraadidoala
WRITE(*,*)'Enloop1:ist,ien,inc=',ist,ien,inc
loopl:haceryoTSI,ien,inc
ESCRIBIR(*,*)'Enloop1:i
FINHACERloop1
Cuandoseejecutaelprograma,sulistadesalidacontendrinformacindetalladaacercadelasvariables
decontroldelbucleDOycuntasveceselbucleera
Unavezquehayalocalizadoelportiandelcdigoenelqueseproduceelerror,puedeecharunvistazoa
lasdeclaracionesspeeifieenesazonaparaloeateelproblema.Unalistadeloserroreseommonsigue.
Asegresederevisarporellosenelcdigo.
O[Chapman:Fortran95/20034.Loopsycarcter!TextoparaCientficoseIngenierosdemanipulacin,
terceraedicin
170CAPTULO4:
ThetaRango47Theta48gradosAlcance
ThetaTheta
Theta
Maxcorrie
49gradosAlcance50reesAlcance
85gradosAlcance
40.774720en
TheMcGrawHillCompanies.2008
BuclesyManipulacindecaracteres
40.67539040.551350metrosmetros
40.37790040.155260metrosmetros
7.080470metros
45derees
https://translate.googleusercontent.com/translate_f

41/104

12/1/2015

https://translate.googleusercontent.com/translate_f

fChapman:Fortran95/20034.LoopsyCarcterlTextoTheMcGrawHillparaCientficosy
ManipulacinCompan1es,2008Ingenieros,terceraedicin
LoopsyCarcterManipulacin171
l.Lamayoradeloserroresenelconteobuclesdoimplicanerroresconlosparmetrosdebucle.Tf
agregadeclaracionesmsaltas/RUFalbucleDOcomoseindicaanteriormente,elproblemadebera
estarbastanteclaro.ComenzelbucleDOconelvalorcorrecto?Terminconelvalorcorrecto?Se
incrementaenelpasocorrecto?Sino,revisedecercalosparmetrosdelbucleDO.Ustedprobablemente
sedarcuentadeunerrorenlosresParamecontrol.
2.Loserroresenlosbucleswhilesuelenestarrelacionadosconerroresenlaexpresinlgicautilizada
paracontrolarsufuncin.Estoserrorespuedenserdetectadosporejem
elSI(loicalr)sentenciaEXITdeElmientrasquecondeclaracionesdeescritura.
RESUMEN
Enelcaptulo4hemospresentadolostiposbsicosdeFortranbucles,ademsSORNEdetalles
adicionalesacercadelamanipulacindedatosdecarcter.
Hayt'vvotiposbsicosdebuclesenFortran,lavhilebucleylaiterativcorreooconteoHACENbucle.
Elbuclewhileseutilizapararepetirunaseccindecdigoenloscasosenquenosabemosdeantemano
cuntasvecessedeberepetirelbucle.ElconteoDObucleseutilizapararepetirunaseccindecdigo
enloscasosenlosquesabemosdeantemanocuntasvecessedeberepetirelbucle.
EsposiblesalirdeunbucleencualquiermomentomediantelasentenciaEXTI.Tambinesposiblesaltar
denuevoalapartesuperiordeunbucleutilizandoladireccindeclaracinYEl.Sibuclesseanidan
unasalidaodeclaracincicloserefierepordefanltalbuclemsinterno
4.4.1SurnrnarydeBuenaPrcticaPrograrnrning
Lassiguientespautasdebenserrespetadoscuandoseprogramaconsucursalesobucleconstrucciones.
Porfoiiowmgtfiemcons1stently,sucdigowulcontammenoserrores,sernmsfcilesdedepurar,y
sermscomprensiblealosdemsquepuedennecesitar
trabajarconlenelfuturo.
l.Siemprebloquesdecdigodesangraenbuclesdotuleshacenmmeteadable.
2.Utiliceunbuclewhilepararepetirseccionesdecdigocuandonosesabedeantemanoqu
frecuenciawlllseejecutarelbucle.
3.Asegresedequeslohayunasalidadeunbuclewhile.
4.UtiliceunconteoHACERbuclepararepetirseccionesdecdigocuandosesabedeantemanocon
qufrecuenciaseejecutarelbucle.
5.NuncaintentemodificarlosvaloresdendicedebucleDOmientrasquedentrodelbucle.
6.Alosnombresssignabuclesgrandesycomplicadasosilasconstrucciones,especialmentesise
anidan.
7.UtilicenanresbucleconeYeLEyEXITdeclaracionesenbuclesanidadosparahacercetTainque
elbucleadecuadoseveafectadaporlaaccindeladireccinYeleodeclaracindeenseanzaXIT.
e1Chapman:Fortran95/20034.Buclesycaracteres!TextoTheMcGrawHillCompanies
https://translate.googleusercontent.com/translate_f

42/104

12/1/2015

https://translate.googleusercontent.com/translate_f

Manipulacin.2008
paraCientficoseIngenieros,terceraedicin
172CAPTULO4:LoopsyManipulacindecaracteres
4.4.2ResumendelasdeclaracionesdeFortranyconstrucciones
ElsiguienteresumendescribeelFortran95/2003declaracionesyconstruccionesintroducidaseneste
captulo.
DeclaracinCYCLE:
CICLO
Ejemplo:
CICLOinterior
Descripcin:
LadeclaracinCICLOm
Cuandoseejecutalasentencia,todaslasdeclaraciones
alapartesuperiordelbucle.Encicloswhile,laejecucin
iniciaapartirdela
Encounti
ndiceseincrementa,ysielndiceestodava
DeclaracinSALIR:
SALIDA
Ejemplo:
vvoCVTTl0,1L' (Continuacin)
menosdesulmite,laejecucinsereanudadesdelapartesuperiordelbucle.
UnadeclaracinCICLOsinnombresiemprehacequeelbuclemsinteriorquecontienelasentenciade
ciclo.UnadeclaracinCYELEllamadohacequeelbuclellamadociclo,inclusosinoeselbuclems
interior.
[)V,....,
()......,,..
[Nombre:J=Indicedeistart,iend,incr
END.DO[nombre]
Ejemplo:
bucle:DOindex=1,last_value,3
...
tlwuu1oop
ElbucleiterativoDOseutilizapararepetirunbloquedecdigounnmeroconocidodeveces.Durante
laprimeraItera
tinnnf<>nnlnnn,TH<>INRIA."'"'ttn<>11>111<>rtictonriav.,h\JiNRRen<>!>l"h
https://translate.googleusercontent.com/translate_f

43/104

12/1/2015

https://translate.googleusercontent.com/translate_f

buclesucesivohastaquesundice*incr>itermina*iNCR,momentoenelqueelbucletermina.El
nombredelpuntoes"..nn
r.1nnn
""'."OUV
0O<"OLOUT'"''!"
IndexescapazincrementanyprobadosBEFARecadabucle,porloqueelcdigodebucleDOnuncase
ejecutarnenabsoluto
11caeILt:IIUIG,
fChapman:Fortran95/20034.LoopsyCarcterlTextoTheMcGrawHillparaCientficosy
ManipulacinCompan1es,2008Ingenieros,terceraedicin
BuclesyManipulacindecaracteres
173
(,0.1.,\
''Descripcin:LadeclaracinEXlTpuedeaparecerencualquierDObucle.Cuandoseencuentrauna
declaracinEXlT,elprogramasedetienelaejecucindelbucleysaltaalaprimerasentenciaejecutable
despusdelaENDDO.Unannimodeclaracinex11siemprehacequeelbuclemnermostcontammg
ladeclaracinaex1t.UnadeclaracinEXlTllamadohacequeelbucledellamadaparasalir,inclusosi
noeselbuclemsinterior.
WHILEconstruccindelazo:
FINDO
Descripcin:
loopl:DO
IF(istatus/=O)SALIRlooplFINHACERloopl
Eltiempodeunbloquedecdigohastaarsehacerealidad.repetirsedifiereLT.ala
siguiente
debernfigurarenelFINHACERcomunicado.ElnombredeladeclaracinEXTIesopcionalsepuede
dejarfueraincluso
4.4.3Ejercicios
41CuldelasexpresionesfollmuingsonlegalesenFortran?Siunaexpresineslegal,eualucomi.
AsumirlasecuenciadeclasificacinASCII.
(A)'123'>'abe'
https://translate.googleusercontent.com/translate_f

44/104

12/1/2015

https://translate.googleusercontent.com/translate_f

(E)ACHAR(65)//ACHAR(95)//ACHAR(72)
(D)ACHAR(IACHAR('j')+5)
42.EscribelasdeclaracionesFortrannecesariosparacalculareimprimirloscuadradosdetodoslos
enterospareshetweenOy50
OfChapman:Fortran95/20034.Loopsycarcter!TextoTheMcGrawHillparaCientficosy
ManipulacinEmpresas.2008Ingenieros,TerceraEdicin
174CAPTULO4:LoopsyManipulacindecaracteres
2
43.EscribirunprogramaFortranparaevaluarlaecuaciny(x)=x3x+2paratodoslosvaloresdex
entrely3enpasosde0,1.
44.EscribirlasdeclaracionesFortranquecalculary(t)delaecuacin
{3>251>0
y(t)=
3T25t<o
45.EscribeunaFortranparacalcularelfactorialcomosedefineenEx42.
AsegresedemanejarloscasosespecialesdeO!ydelosvaloresdeentradailegales.
47.Modificarelprogramadestats_2utilizarlaDOWHILEconSU'uctenlugardelaconstruccin,
mientrasquecunentlyenelprograma.
48.Examinelassiguientesfrasesydeterminarcuntasvecesseejecutarcadabucle.(Supongaque
allloopvariablesdendicesonenteros.)
3276832767
(B)DO100,1,10
(E)HACERKount2.3,4
(F)DO2,o
(G)HACER
49.Examinelasiguienteiterativobuclesdoydeterminarelvalordeiresalfinaldecadaunodelos
buclesytambinelnmerodevecesquecadabucleseejecuta.Supongaquetodaslasvariablesson
enteros.
FINDO
(B)iresOloo1:DOindex1=1,20,5
IF(index1<=10)CICLOloop2:DOindex2index1,20,5
https://translate.googleusercontent.com/translate_f

45/104

12/1/2015

https://translate.googleusercontent.com/translate_f

1cosa1res+1nexENDDOloop2
eiresO
loop1:DOindex1=10,4,2loo2:HACERindex2=2index12SI(index2>6)EXITLOOP2iresires+
index2
fChapman:Fortran95/20034.LoopsyCarcterlTextoTheMcGrawHillparaCientficosy
ManipulacinCompan1es,2008Ingenieros,terceraedicin
BuclesyManipulacindecaracteres
175
FINHACERFINloop2HACERloop1
(D)ires=O
loop1:DOindex1=10,4,2loop2:DOindex22,indexl,2
iresiresFINHACERloop2FINHACERloop1
410.
nmerosenteros.
Examinelasiguientebucleswhileydeterminarelvalordeiresalfinaldecada
(A
1resloop1:DOiresires+1IF((ires110)*10ires)EXITENDDOloop1
ires=2
loop2:DO
ires=ires**2
SI(ires>200)SALIDA
FINdoloo2
(E)IRES=2
iresires**2
411.ModificarprogramaballdelEjemplo47aleerenlaaceleracindelagravedadenunlugar
determinado,yparacalcularladistanciamximadelapelotaparaquelaaceleracin.Despusde
modificarelprograma,ejecutarloconaceleracionesde98m/s2,97m/s2,y9,6m/s2Qu
efectotienelareduccindelaatraccingravitatoriatieneenlagamadelasala?Quefectotienela
reduccindegravitationa]atraccintieneelngulomshesttbefJalaquelanzarlapelota?
412.Modificarllbaprogramadelejemplo47Toreadenlavelocidadinicialconlaqueselanzala
https://translate.googleusercontent.com/translate_f

46/104

12/1/2015

https://translate.googleusercontent.com/translate_f

pelota.Despusdemodificarelprograma,ejecutarloconvelocidadesinicialesde10m/s,20
m/s,y30m/s.QuefectotieneelcambiodelavelocidadinicialVtieneenlagamade
0
lapelota?QuefectotieneenelmejorngulofJalaquelanzarlabola?
413.DoyProgramaenelEjemplo43calculaelofyeardasasociadoacualquiermes,dayao.Como
wntten,tfi1sprogramanocompruebaparaversitfiedatosintroducidosportfieusuarioesvlida.Se
aceptarvaloressinsentidodurantemesesydas,yhacerclculoscontfiemparaproducirresultados
meamngless.ProgramatfieModlfytantfiat1tcfieckstfievaloresdeentradaparasuvalidezantesde
usarlos.Silasentradasnosonvlidas,elprogramadeberadecirlealusuarioloqueestmal,yQMT.Ihe
aodebeserunnmeromayorquecero,elmesdebeserunnmeroentre1y12,yeldadebeserun
nmeroentre1yunmximoquedependedelmes.utilizarunSELEconstruccine1eASEpara
implementarlascomprobacindelmitesperfonnedenelda.

01'
F
iD=la .,........EkT1 (410)
donde
[Chapman:Fortran95/2003para 4.LoopsyCarcter !Texto TheMcGrawHill
Loscientficosylosingenieros, Manipulacin
Empresas.2008
Terceraedicin
176CAPTULO4:LoopsyManipulacindecaracteres414.EscribaunprogramaFortranparaevaluar
lafuncin
1
y(x)=LN
1x
paracualquiervalorspeeifiedusuariodex,dondeAeselnaturallogatithm(logatithmMnlabasee).
Escribaelprogramaconunbuclewhile,paraqueelprogramaserepiteelclculoparacadavalorjurdico
dexentradoenelprograma.Cuandoseintroduceunvalorilegaldex,terminarelprograma.
415.EscribaunprogramaFortranparatodosloscaracteresenmaysculasparabajarely
us1cr:suJpl:carcter1EDenlacadena.Supongaquesuequipoutilizalasecuenciade
clasificacinASCII.
416.CaleulatingOtbitsVlhenunmsatlitelosbitsdelaTierra,larbitadelsatliteseFoununaelipse
conlaTierraubicadaenunodelospuntosfocalesdelaelipse.Larbitadelsatlitesepuedeexpresaren
eomdinatespolatcomo
r='(49)18cosf)
donderyFJsonladistanciayelngulodelsatlitedesdeelcentrodelaTierra,pesunparmetroque
especificaeltamaodelarbita,y8esunparmetroquerepresentalaexcentricidaddelarbita.Una
rbitacirculartieneunaexcentricidadedeO.UnarbitaelpticatieneunaexcentricidaddeO::8::l.
https://translate.googleusercontent.com/translate_f

47/104

12/1/2015

https://translate.googleusercontent.com/translate_f

Sie>1,elsatlitesigueunatrayectoriahiperblicayescapadelcampogravitatoriodelaTierra.
CONSIDERAsatliteconunparmetrodetamaop1200kilmetros.Escribaunprogramaquecalen
lateladistanciadelsatlitedesdeelcentrodelatierraenfuncindefJsielsatlitetieneuna
excentricidadde(a)8O(B)80,25(E)80.5.EscribirunprogramanicoenelqueRy8sondos
valoresdeentrada.
QutancercatienecadarbitaCOMETOlaTierra?Aqudistanciatienecadarbitallegardesdela
Tierra?
417.Escribaunpseaprogramaqueleeenunacadenadecaracteres,buscatodaslaspalabraswitllin
cadenaLCT,ycapitalizssSl!PrimeralStt!SrdeSacllpalabra,wllil!SslliftingTBISdermmainde
lapalabraenminsculas.SupongaquetodosloscaracteresalfabticosynumricospuedenmarcarTLL!
SbonndariSsdeunVMRDwitllinTLL!SvariablSrcllaract!S(porSxampl!S,p!Sriods,comas)
caracteresalfabticossedebedejarsincambios
418.ActualatravsdeundiodoLacorrientequefluyeatravsdeldiodosemiconductorsemuestraen
lafigura414sedaporlaecuacin
lin
...
+
vn\7
Vd=latensinenlosdwde,mvoltios
FIGURA414
f,SISffiCOndHCiDtll!ScHFmntt1owtllrougllTh!Sdiooo,enampSrSstordiodo.
1=lacorrientedefugadeldiodo,enamperios
0
fChapman:Fortran95/20034.LoopsyCarcterlTextoTheMcGrawHillparaCientficosy
ManipulacinCompan1es,2008Ingenieros,terceraedicin
LoopsyCarcterManipulacin177
q=lacargadeunelectrn,1,602X1019culombios
kBultzmann'scunstant,1.38X1023juule/kelvin
T=temperatura,engradosKelvin(K)
Lacorrientedefuga/udeldiodoesde2,0FLA.Escribaunprogramainformticoparacalculartfie
actualtfirougfiTFIISd10deflowmgparatodaslastensionesde1,0va0,6v,m0.1vpasos.Repitaeste
procesoparalassiguientestemperaturas:75F,100Fy125F.Utiliceelprogramadelejemplo2.3
paraconvertirlastemperaturasdeFagradosKelvin.
https://translate.googleusercontent.com/translate_f

48/104

12/1/2015

https://translate.googleusercontent.com/translate_f

elnmerobinariodeentradaenunnmerodecimal,ymostrareldecimalcorrespondiente
Esteprogramadebesercapazdemanejarlosnmeros0000000000a1111111111,en,dosificandola
tfiementfieeqtlvalentdeeimalvalttesOto1023.Tambinsfiottlddetectarsiexistenymanejarunvalor
novlidoentreloscaracteresdeentrada(unaletra,smbolo,nmerooramayorque1).Ponapruebatu
programaconlossiguientesnmerosbinarios.
(A)001001001O
(B)1111111111
(E)10000000001
420.DecimalabinarioConversinEscribaunprogramaquesolicitaalusuariounaTegerindecimalen
elrangodeOa1023yconvierteelnmeroenelnmerobinarioequivalente.Elnmerobinariodebe
consistirenOsy1senunacadenadecaracteres.Elprogramadebemostrarelnmerobinario
correspondientealusuario.Ponapruebatuprogramaconlosnmerosdecimalessiguientescaracteres.
(A)256
(B)63
(D)768
421.OctaladecimalConversinEscribaunprogramaquesolicitaalusuariounnmerooctalqueser
enteiedcomostiing7sovnisTuenunvruiablechruactei.Porejemplo,elusuariopuedeintroducir377
comounacadenadecaracteres.ElprogramadeberconvertirelnmerooctalentradaINTUunnmero
decimal,ru1dcunespundingneumticodelindicadordecimalnurnbertuusuario.Disearelprograma
paramanejarhastacincodgitosoctales.(Sugerencia:.Estopodraserungranlugarparaunaestructura
CASOSELEC1)IESTsuprogramawitfitfiefollowmgnmerosbmary.
(A)377e70000
(D)77777
e1Chapman:Fortran95/20034.Buclesycaracteres!TextoTheMcGrawHill
ManipulacinEmpresas.2008
paraCientficoseIngenieros,terceraedicin
178CAPTULO4:LoopsyManipulacindecaracteres
422.LatensinenuncableUnobjetode200kilogramosesparasercolgadodelextremodeunade3
metrosrgidopostehorizontaldepesodespreciable.comosemuestraenlafigura415.Elpolose
adjuntaparedtoaporunpivoteyelapoyodeuncablede3metros,queseadjuntaalaparedatamayor
punto.Latensinenestecableestdadaporlaecuacin
wl.L
423.Silatensinmximaenlacahleenelejercicioanterioresde350,enquintervalodedistanciasd
Esseguroparaconectarelcablealpolo?
424.Lasbacterias!CrecimientoSupongamosqueunbilogollevaacabounexperimentoenelquemea
PYMESLavelocidadalawhiehuntipospeeifiedebaeteriumreproduceasexualmenteendiferentes
mediosdeEultura.ElexperimentomuestraqueenMedioAlasbacteriassereproducenunavezcada90
minutos,yenelmedioBlasbacteriassereproducenunavezcada120minutos.Supongamosqueuna
https://translate.googleusercontent.com/translate_f

49/104

12/1/2015

https://translate.googleusercontent.com/translate_f

solabacteriasecolocaencadamediodecultivoalcomienzodelexperimento.Escribirunprograma
Fmtranquecafculatesywrileselnmerodebacteriaspresentesencadacultivoaintervalosde6horas
desdeelcomienzodelexperimentohastaquehayantranscurrido24horas.Cmouflosnmerosde
bacteriascompmeONUlosdosmediosdecomunicacindespusde24horas?
.
"0"e
"
pJW
d
w200kgLj)Unpesode200kilogramossuspendidodeunabarrargidasoportadaporuncable.

f!?1
fChapman:Fortran95/20034.LoopsyCarcterlTextoTheMcGrawHillparaCientficosy
ManipulacinCompan1es,2008Ingenieros,terceraedicin
BuclesyManipulacindecaracteres
179
425.DecibeliosLosingenierosamenudomidenlaproporcindedosmedidasdepotenciaendecibelios,
odB.Laecuacinparalarelacindedosmedicionesdepotenciaendecibelioses
dB=logR=(412)
10P,
dondeP2eselpoderIevelbemgmide,yP1espotenciadereferenciasorneIevel.Assumequeelnivel
depotenciadereferenciaP1eslvatios,yescribirunprogramaquecalculaeldecibellevel
correspondientesalosnivelesdepoderentrely20vatios,enpasosde0,5W.
paraevaluarelsenodeunnmeroes
.x3xsx7x9
SMX=x+++...(413a)35!7!9!
o
2n1l)n1X
senx(413b)
n=l(2n1)!
https://translate.googleusercontent.com/translate_f

50/104

12/1/2015

https://translate.googleusercontent.com/translate_f

dondexestenunidadesderadianes.
DesdeunatuercacuotasCumputertieneenuughtiempotuaadirunnmeroinfinitouftrminospara
cadasinequesecalcula,laserieinfinitasetruncadespusdeunnmerofinitodeLeiiiiS.Elnmerouf
Leimsquedebemantenerseenlaserieessloenuuglrtucalealatelafuncindelaprecisindelos
nmerosdepuntoflotanteenelequipoenelquelafuncinsealuatedserev.Laserieinfinitatruncado
porelpecadoxes
N
senx=L(I)nl(414)n=l(2nl)!
dondeNeselnmerodetrminospararetenerenlaserie.WNTEunprogramaFortranqueleevalorma
paragradosxm,yluegocaiculates
elsenodexmediantelafuncinintrnsecasinusoidal.Acontinuacin,calcularelsenodexutilizandola
ecuacin413,conNl,2,3,...,10.Compareelvalortmedesmxconlosvalorescaiculatedmedianteel
usodelaserieinfinitatruncado.Cuntostrminossonnecesariosparacalcularsenxparalamxima
precisinotsucomputadora?
427.LamediageomtricaLamediageomtricadeunconjuntodenmerosx1axnsedefinecomola
razensimadelproductodelosnmeros:
(415)
EscribaunprogramaFortranqueacepteunnmeroarbitrariodevaloresdeentradapositivosycaiculate
6othlamediaaritmtica(Le.,Lamedia)ylamediageomtricadelosnmeros.Utiliceunbuclewhile
paraobtenerlosvaloresdeentrada,yponerfinalasentradasdeunusuariointroduceunnmero
negativo.IESTsuprogramaporcalculatmglamediamediaygeometncdeloscuatronmerosdeDC,5,
4y5.
eChapman:Fortran95/20034.Loopsycarcter!TextoTheMcGrawHill
1
paraCientficose
Ingenieros,Tercera
E
180

Manipulacin
condicin
Empresas.2008
CAPTULO4:LoopsyManipulatioTheCarcterraz
428.RMSPromedio cuadradamedia(RMS)promedioesotraformade
calcular

n
/
a

significarparaunconjuntodenmeros.Elvaloreficazpromediodeunaseriedenmeroseslaraz
cuadradadelamediaaritmticadeloscuadradosdelosnmeros:(416)EscribaunprogramaFortran
queacepteunnmeroarbitrariodevaloresdeentradapositivosy
entr,yelusodeunbucleDOToreadenlosnmeros.Ponapruebatuprogramamedianteelclculode
la
429.HarmanieMeanTfiemeenhermenices)etaRotfiervvaydeeale1:salirconunMearporun
conjuntodenmeros.Lamediaarmnicadeunconjuntodenmerosestdadaporlaecuacin:
https://translate.googleusercontent.com/translate_f

51/104

12/1/2015

https://translate.googleusercontent.com/translate_f

Mediaarmnica=N(417)
11
++...
1
+
X]XNX2
EscribaunprogramaFortranqueleerenunnmeroarbitrariodevaloresdeentradapositivosycalcular
lamediaarmnicadelosnmeros.Usecualquiermtodoqueusteddesealeerenlosvaloresdeentrada.
Ponapruebatuprogramamedianteelclculodelamediaarmnicadeloscuatro
nmeros10,5,4,y5.
430.EscribeunsoloprogramaFortranquecalculalamediaaritmtica(promedio),RMSpromedio,
mediageomtricaymediaarmnicadeunconjuntodenmerospositivos.Usecualquiermtodoque
usteddesealeerenlosvaloresdeentrada.Compareestosvaloresparacadaunodelosconjuntosde
nmerossiguientescaracteres:
(A)4,4,4,4,4,4,4
(B)5,2,3,6,3,2,6
(D)1,2,3,4,5,6,7
431.TiempomedioentreclculosdefallaLafiabilidaddeunapiezadeequipoelectrnicosemideen
trminosdetiempomedioentrefallos(MTBF),dondeMTBFeseltiempopromedioquelapiezade
equipopuedeoperarantesdequeocurraunafallaenella.Parasistemasgrandesquecontienenmuchas
piezasdeequipoelectrnico,eshabitualparadeterminarlosMTBFdecadacomponenteyparacalcular
elMTBFgeneraldelsistemadelastasasdefallodeloscomponentesindividuales.Sielsistemaest
estructuradocomoelquesemuestraenlafigura416cadacomponentedebetrabajarenarderparatodo
elsistemafuncione,yelMTBFgeneraldelsistemapuedecalcularsecomo
(418)
MTBF1MTBF2MTBFn
fChapman:Fortran95/20034.LoopsyCarcterlTextoTheMcGrawHillparaCientficosy
ManipulacinCompan1es,2008Ingenieros,terceraedicin
LoopsyCarcterManipulacin181
11111111113Subsistema1ltvllor1lVllOrLtvuo'
FIGURA416
EscribaunprogramaqueleeenelnmerodecomponentesdelaserieenunsistemaylosMTBFdecada
componente,yluegocalculaelMTBFgeneralparaelsistema.A
comprobarelprograma,determinarelMTBFdeunsistemaderadarqueconsisteenunsubsistemade
https://translate.googleusercontent.com/translate_f

52/104

12/1/2015

https://translate.googleusercontent.com/translate_f

antenaconunMTBFde2.000horas,untransmisorconunMTBFde800horas,unreceptorconun
MTBFde3.000horas,yunordenadorconunMTBFde5.000horas.
432.LeydelGasIdealUngasidealesuneenlaquetodaslascolisionesentrelasmolculasson
perfectamenteelsticas.Esposiblepensarenlasmolculasdeungasidealcomobolasdebillar
perfectamentedurosquechocanyrebotanentressinIosingenergacintica.Talgaspuede
caracterizarseportrescantidades:presinabsoluta(P),elvolumen(VJytemperaturaabsoluta(T)La
relacinentrecantidadesDieseenungasidealesconocidacomolaleydelgasideal.:
PV=nRT(419)
dondePeslapresindelgasenkilopascales(kPa),Viselvolumendelgasenlitros(T),Neselmmber
demolculasdelgasentJPtSdemoles(mol),Reslaconstanteuniversaldelosgases(8,314LkPa/
molK),yTeslatemperaturaabsolutaengradosKelvin(K).("FOW1mol602x1023molculas)
Supongamosqueunamuestradeungasidealcontienelmoldemolculasaunatemperaturade273K,y
respondealassiguientesq11estions
(A)EscribaunprogramaparacalculareimprimirelvolumendeestegascomosupresinVarres1
1001kPamincrementosde100kPa.
(H)SupongamosTbatlatemperaturadelgasseincrementaa300KCmoelvolumendeestegas
varaconlapresinsobreelmismorangodeahora?
433.Supongamosqueelvolumende1moldeungasidealtieneunvolumenfijode10L,ycalculare
imprimirlapresindelgascomounafuncindelatemperaturacomolatemperaturade
secambiadesde250hasta400K.
434.ElLevetLapalanca(Figura417)eslamquinamssencillaposible.Seutilizamalevantarla
cargaquedeotromodoserademasiadopesadoparalevantarlo.Sinohayfriccin,larelacinentrela
fuerzaaplicadaalamatrizchepalancayelpesodeDMTsepuedelevantarestdadaporlaecuacin
FAPPXd=pesoXd2(420)
OfChapman:Fortran95/20034.Loopsycarcter!TextoTheMcGrawHill
paracientficosyManipulacinEmpresas.2008
Ingenieros,terceraedicin
182CAPTULO4:LoopsyManipulacindecaracteres

Peso
FIGURA417
Unapalanca.
Supongamosquelafuerzaaplicadasecomponedepesosquesepuedenapilarenunextremo
delapalanca.Escribaunprogramaquecalculerequeridaparalevantarunacargade600kgsiladistancia
https://translate.googleusercontent.com/translate_f

53/104

12/1/2015

https://translate.googleusercontent.com/translate_f

d2desdeelpuntodeapoyoparalaubicacindelacargasefijaelpesoa1m,yla
d1distanciadelpuntodeapoyohastaelpuntodondelasponderacionesseaplicanvarade0,5a3,0men
0,1mpasos.Suponiendoqueslotenemos400kgdepesodisponibles,culesladistanciamscortad1
quesepodrautilizarenestapalanca?
fChapman:Fortran95/20036.lntroductionalasmatricesdelTextoTheMcGrawHillpara
CientficosyCompan1es,2008Ingenieros,terceraedicin
6

Introduccinalasmatrices
OBJETIVOS
Conozcacmodefinir,inicializaryutilizarmatrices.
Saberutilizarlasoperacionesdematrizenterosparaoperarenmatricesenterasdedatosenunasola
sentencia.
SepacmousartuAnaysecciones.
Aprendacmoleeryescribirarraysyseccionesdelamatriz.
Unamatrizesungrupodevariablesoconstantestodosdelmismotipo,queseconocenporunsolo
narne.Losvaloresdelgrupoocupanposicionesconsecutivasenlamemoriadelcomputer(verFigura6
1).Unvalornindividuovthinlamatrizsellamaunelementodematrizseidentificaporelnombrede
lamatrizjuntoconunsubndicequeapuntaalapa:rticulatubicacindentrodelaanay.Fotejemplo,el
vatiablefitstsemuestraenlaFigme61serefierecomoun(1),yelquintovariablemostradaenlafigura
serefierecomoun(5).1HEsubscnptdeun1sarraydetipo111EGEconstantesR.Unaovanables
puedeutilizarseparalossubndicesdematriz.
Comoveremos,lasmatricespuedenserherramientasmuypoderosas.Ellosnospermitenaplicarelmismo
algoritmoyotravezamuchoselementosdedatosdiferentesconunsimplebucleDO.Porejemplo,
supongamosquetenemosquetomarlarazcuadradade100nmerosrealesdiferentesTflosnmerosse
almacenancomoelementosdeunamatrizqueconsisteenun100valoresreales,luegoelcdigo
un(i)SQRT(a(i))
sellevaralarazcuadradadecadanmeroreal,yalmacenardenuevoenlocacindelamemoriaque
deCarne.Siqueramostomarlarazcuadradade100nmerosrealeswithontnsingmatrices,tendramos
queescribir
[Chapman:Fortran95/2003para6.lntroductionalasmatricesdetextoTheMcGrawHill!
Loscientficosylosingenieros,empresas.2008Terceraedicin
252CAPTULO6:Introduccinalasmatrices
una(l)
un(2)
Lamemoriadecomputadora

Coleccin un
un(4)

https://translate.googleusercontent.com/translate_f

54/104

12/1/2015

https://translate.googleusercontent.com/translate_f

un(5)
FIGURE61
Loselementosdeunamatrizocupanposicionessucesivasenlamemoriadeunordenador.
como100declaracionesporseparado!Lasmatricesson,obviamente,deunamaneramuchomslimpiay
mscortoparamanejaroperacionessimilaresrepetidas.
SdematrizsonherramientaserfulverypovvparalamanipulacindedatosenFortran.Comovvever,
esposiblemanipulareyrealizarclculosconelementosindividualesdearraysunoporuno,conmatrices
deenterosalavez,ocondiversossubconjuntosdearrays.Primerovamosaaprendercmodeclarar
matricesenlosprogramasdeFortran.Luego,willlearncmoutilizarloselementosdematriz
individualesendeclaracionesFortran,ydespusnoswilllearnutilizarmatricesenterasosubconjuntosde
lamatrizenlasdeclaracionesdeFortran.
Declarararrays
BefmeunAnaypuedeAsed,sutipoyloselementosufnumbetquecontienemstilserdeclaradasparael
compiladorenuncomunicadodeclaracindetipo,porloqueelcompiladorsabrqutipode1sdedatos
quesealmacenamdelamatriz,ylacantidaddememoria1sreqmredparasostenerlo.Porejemplo,un
volumenconjuntodebienestajecontiene16elementospodraserdeclarada
comosiguiente1
ElatributoDIME1SID1enladeclaracindetipo)declararECLARACIN)la)li:zedelamatrizque
seestdefiniendo.Loselementosdelamatrizvoltajesetratarancomovoltaje(1),
1Unaformaalternativadedeclararunamatrizesunirlainformacindimensindirectamentealnombre
delamatriz:
Real::vol(16)
lh1sestilodeclarauonSEprov1dedparacompanbiinyatrsWNHearhervers10nsdeFortran.It1s
plenamenteequivalentesaladeclaracindematrizsemuestraarriba.
fChapman:Fortran95/20036.lntroductionalasmatricesdelTextoTheMcGrawHillpara
CientficosyCompan1es,2008Ingenieros,terceraedicin
Introduccinalasmatrices
253
Tagevol(2),etc.,hastaTagevol(16).Delmismomodo,unaseriedecincuentavariablesde20
caracteresdelargopodraserdeclaradocomosigue
CARCTER(len=20),DIMENSIDN(50)::apellidos
Cadaunodeloselementosdematrizlcomount_nmegustaraserunavariablede20caracteresde
largo,yloselementosseabordarancomolast_na111e(1),last_name(2),etc.
Lasmatricespuedenserdeclaradosconmsdeunsubndice,porloquesepuedenorganizarendoso
https://translate.googleusercontent.com/translate_f

55/104

12/1/2015

https://translate.googleusercontent.com/translate_f

msdimensiones.Estasmatricessonconvenientespararepresentardatosqueseorganizanormalmente
enmltiplesdimensiones,comolainformacindelmapa,lasmedicionesdetemperaturasobreuna
superficieplana,yassucesivamente.Elnmerodesubndicesdeclaradasparaunarradadoysellamael
rangooftbearrayBotbarrayvOltageyilarracomotnamsonderango1arrays,yaqueslotienenun
subndice.Veremoslasmatricesmscomplejas
Elnmerodeelementosenunadimensindadadeunamatrizsedenominalaextensinde
un
GEes20,ylaextensindelaprimera(ynica)subndicedelamatrizlcomot_nunmees50.Laforma
deunamatrizsedefinecomolacombinacindesurangoylaextensindelamatrizencadadimensin.
Porlotanto,dosmatricestienenlamismaformasitienenelmismovaloryenlamismamedidaencada
dimensin.Porltimo,eltamaodeunamatrizeselnmerototaldeelementosdeclaradosendicha
matriz.Parasimplesrango1arrays,eltamaodelamatrizeselmismoqueelalcancedesunico
subndice.Porlotanto,eltamaodelamatrizvoltagees20,yeltamaodelamatrizliltnilrnees
50.
Constantesdematriztambinpuedenserdefinidos.Unaconstantedematrizesunamatrizqueconsiste
ensutotalidaddeen:constante:s.Sei:sdefinidoporplaeingen:valorconstante:sbetvveen
delimitadoresespeciales,llamadosconstructoresdematriz.EldelimitadordeiniciodeunFortran
constmctor95matrizes(1,yeldelimitadorfinaldeunconstmctormatrizes1).Porejemplo,la
expresinsemuestraacontinuacindefineunaconstantedematrizquecontienecinco
elementosenteros:
ejemplo,laexpresinsemuestraacontinuacindefineunFortrancontencinconstantedematriz2003
SOLAMENTE
.
..
[12345J
USOelementosdematrizenDECLARACIONESFORTRAN
Estaseccincontienesornedelapractica!Detallesinvolucradosenelusodematricesenlosprogramas
deFortran.
6.2.1ElementosdematrizsonvariablesSloordinarias
CadaelementodeunamatrizesunavariablesloLILR<c@cualquierotravariable,yunaserieelecin
puedeserutilizadoencualquierlugardondeunavariableordinariadelmismotiposepueden
[6.lntroduccinaarrays!TextoTheMcGrawHillChapman:Fortran95/2003porcientficosy
empresas.2008
Ingenieros,terceraedicin
254CAPTULO6:Introduccinalasmatrices
https://translate.googleusercontent.com/translate_f

56/104

12/1/2015

https://translate.googleusercontent.com/translate_f

utilizado.Loselementosdematrizpuedenserincluidosenlasexpresionesaritmticasylgicas,yla
resultadosdeunaexpresinsepuedenasignaraunelementodematrizejemploF'or,asumen
queelndicedematricesylatemperaturasedeclarancomo:
INTEGER,DIMENSION(l0)::VERDADEROndice,DIMENSION(3)::temp
EntonceslassiguientesafirmacionesFortransonperfectamentevlidas:
ndice(l)
ndice(l)
Bajocucumstancescertam,arraysentlreosubconjuntosdelasmatricessepuedenutilizarm
expresionesysentenciasdeasignacin.Estascircunstanciasseexplicarnen
Seccin6.3acontinuacin.
6.2.2Inicializacindeelementosdematriz
Aligualqueconlasvariablesnormales,losvaloresdeunarraydebeninicializarBEFAReuso.Siun
arraynoestinicializado,elcontenidodeloselementosdelamatriznoestndefinidos.Enlassiguientes
declaracionesFortran,arrayjesunejemplodeunamatrizsininicializar.
INTEGER,DIMENSION(lO)::jWRITE(*,*)'j(l)',j(l)
ElAnayjhadeelaredporladeclaracindetipodedeclaracion,peronovaloressehancolocadoenella
todava.Dadoqueelcontenidodeunamatrizsininicializarsondesconocidosypuedenvariardeun
equipoaotro,loselementosdelamatriznuncadebenserutilizadoshastaqueseinicializanconvalores
conocidos.
...'""'TI<.\.JUUU0.1.111r1.u.J6.LSiempreinicializanloselementosdeunamatriz
BEFARequeseutilizan.
Loselementosdeunamatrizsepuedeninicializarporunadetrestcnicas:
l.Lasmatricessepuedeninicializarmedianteelusodesentenciasdeasignacin.
2.Lasmatricessepuedeninicializarenstarementstipodedeclaracinentiempodecompilacin.
3.Lasmatricessepuedeninicializarmedianteelusodedeclaracionesdelectura.
Lainicializacindearraysconinstruccionesdeasignacin
VaiuesImtllpuedenass1gnedatfiematrizporUSMGdeclaracionesass1gnment,e1tfierelementopor
elementoenunbucleDOotodosalavezconunconstructordematrices.Porejemplo,
elsiguienteDOloopwillinitializeloselementosdelarrayarto0.0,2.0,3.0ray1,etc.unelementoalavez:
REALDIMENSION(lO)::arrayl
fChapman:Fortran95/20036.lntroductionalasmatricesdelTextoElCDMcGrawHillpara
https://translate.googleusercontent.com/translate_f

57/104

12/1/2015

https://translate.googleusercontent.com/translate_f

CientficosyCompan1es,2008Ingenieros,terceraedicin
Introduccinalasmatrices

255
array1(i)FINHACER yo)

Lasiguienteinstruccindeasignacinrealizalamismafuncinalavez,usandounconstructorde
matrices:
D1MENSIONVERDADERO(10)::arra1arrayl(/1.,2.,3.,4.,5.,6.,7.,8.,9.,10./)
Tambinesposibleinicializartodosloselementosdeunamatrizaunsolovalorconunainstruccinde
asignacinsimple.Porejemplo,lasiguientesentenciainicializatodostfieelementosdearraylacero:
ElsencilloprogramaquesemuestraenlaFigura62calcularesloscuadradosdelosnmerosen
nmerodematriz,yluegoimprimelosnmerosysusplazas.Tengaencuentaquelos
valoresdelafigura62
Unprogramaparacalcularloscuadradosdelosnmerosenterosde1a10,elusodesentenciasde
asignacinparainicializarlosvaloresdelamatriznuMBEr.CuadradosPROGRAMANINGUNO
IMPLICITO
INTEGER::i
!Nmero1nitializeycalcularcuadrado.DOi1,10
nmero(i)Inicializarnmero
aristaviva(i)nmero(il**2CalcularFINplazaHACER
Escribecadanmeroysucuadrado.
WR1TE(*,100)nmero(i),cuadrada(i)
100FORMATO(1X,'Number=',16,'Suare',16)FINHACER
Lainicializacindearraysenty:PEdeclaracionesdeelaratian
Losvaloresinicialespuedensercargadosenunamatrizentiempodecompilacin,aldeclararsusvalores
enuncomunicadodeclaracindetipo.Parainicializarunamatrizenuncomunicadodeclaracindetipo,
usamosunconstructordematricesparadeclararsusvaloresinicialesenesadeclaracin.Porejemplo,la
siguientesentenciadeclarauncincoelementosmatrizenteraarray2,y
inicializaloselementosdeunrray2a1234ys
1NTEGER,D1MENSION(5)::array2=(!1,2,3,4,5!)
Laconstantedematrizdecincoelementos(11,2,3,4,51)seutilizaparainicializarelanayfiveelemellt
un1ay12.Engeneral,elnmeroufeiememsenconszanzzhedebencoincidir
6.lntroduccinalasmatrices!TextoLoscientficosMcGrawHillyEmpresas.2008Ingenieros,
TerceraEdicin
https://translate.googleusercontent.com/translate_f

58/104

12/1/2015

https://translate.googleusercontent.com/translate_f

[Chapman:Fortran95/2003para
256CAPTULO6:Introduccinalasmatrices
seinicializaelnmerodeelementosenelarray.CualquierademuypocosodemasiadoselementosWJL!
darlugaraunerrordelcompilador
Estemtodofuncionabienparainicializararreglospequeos,peroquvamosahacersilamatriztiene
100(oincluso1000)elementos?Escribirlosvaloresinicialesparaunamatrizde100elementoseramuy
tediosoyrepetitivo.Parainicializarmatricesmsgrandes,podemosutilizarunbucleDOimplcita.Un
bucleDOimplcitatienelaformageneral
(Argl,arg2,...index=istartIEND..Incr)
dondeunRG1,RG2una.etc.,sonvaloresevaluadoscadavezqueseejecutaelbucle,yelndice,istart.
IEND,ylafuncinincrexactamentedelamismamaneracomolohacenpara
ordinarioconteoHACERJoopsPorejemplo,elTBEunahovedeclaracinrray2poda
escritoporelusodeunbucleDOimplcitacomo:
INTEGER,DIMENSION(5)::array2=(/(i,i=1,5)/)
unbucleimplcitohagalosiguiente:INTEGER,DIMENSION(1000)::array3=(/(i,i=1,1000)!)
HACERbuclesimplcitaspuedenanidaromixtaconconstantesparaproducirpatronescomplejos.Por
ejemplo,lassiguientesafirmacionesinicializarloselementosdearray4acerosinosondivisiblespor5,
yconelnmerodeelementosisondivisiblespor5.
INTEGER,DIMENSION(25)::array4(!((0,i1,4),5*j,j1,5)!)
ElbucleDOinterior(O,i1,4)exeeutceompletelyparaeadapasodelouteiHACERbucle,porloque
paracadavalordelndicedebucleexternoj,vamosatenercuatroceros(delbucleinterno),seguidopor
elnmero5*j.Elpatrnresultantedevaloresproducidosporestosbuclesanidadoses:
O,O,O,O,5,O,O.O,O,10,O,O,O,O,15,...
Porltimo,todosloselementosdeunarraysepuedeinicializaraunnicovalorconstantesimplemente
incluyendolaconstanteenlasentenciadedeclaracindetipoEnelsiguienteejemplo,todoslos
elementosdearray5seinicializana1,0:
REALDIMENSION(100)::array5=1.0
ElpwgtamenFigme63illusnateslasdeclaracionestipodeclatationusouftuinicializarlosvaloresde
unamatriz.Calculalasracescuadradasdelosnmerosdeserievaue,yluegopnntslosnmerosythe1r
racescuadradas.
1
FIGURE63
UnprogramaparaealettlatetlleracessqttaredelosiRtegersde1a10,tlSiRguntipodedeclaracin
deelaratioRparainicializarlosvaloresdelamatrizvalue.
https://translate.googleusercontent.com/translate_f

59/104

12/1/2015

https://translate.googleusercontent.com/translate_f

SquaPROGRAMA
IMPLICITNONE
(Continuacin)
fChapman:Fortran95/20036.lntroductionalasmatricesdelTextoTheMcGrawHillpara
CientficosyCompan1es,2008Ingenieros,terceraedicin
Introduccinalasmatrices
257
(Conclusin)
REAL,DIMENSIOIH10)Elvalor(i,i1,10)!)
REALDIMENSION(lO)Raiz_cuadrada
!Clculatelasracescuadradasdelosnmeros.
SQRT(valorde(i))
Escribecadanmeroysurazcuadrada.
1'
WRITE(*,100)valor(i),Raiz_cuadrada(i)100FORMATO(lX,valor,F5.1,.n0.4RazCuadrada)
ENDDO
Square_rootsPROGRAMADEFIN
LainicializacindearrayscondeclaracionesREAD
LasmatricestambinsepuedeninicializarcondeclaracionesLEA.ElusodematricesenI/0
declaracionessedescribirendetalleenlaseccin6.4.
6.2.3Cambiodelrangosubndicedeunamatriz
LoselementosdeunamatrizNelementosenonnalmentedireccionarseutilizandolossubseripts1,2,...,
n.As,loselementosdelamatrizarrdeclaranconladeclaracin
REALDIMENSION(5)::arr
setratarancomoarr(1),arr(2l,arr(3),arr(4),yarr(5).EnlosproblemasSORNE,sinembargo,esms
convenienteparaabordarloselementosdelamatrizconotrossubndices.Porejemplo,lasposibles
calificacionesenunexamenpodranvariardesdeOa1OO.Siquisiramosacumularestadsticassobrela
numherdelaspersonasquecalificancualquiergradodadoqueseraconvenientecontarconunamatriz
101elementocuyasubndicesosciladoentreOte100envezef1te101.Silossubndicesoscilaronfrem
Ote100,notadelexamendecadaestudiantepodraserutilizadodirectamentecomounndiceenla
matriz.
Fmtalespwblems,Fmtranp10videsmaneratuespecificarlosnunrbeisIangeufqueseutilizarnpara
https://translate.googleusercontent.com/translate_f

60/104

12/1/2015

https://translate.googleusercontent.com/translate_f

hacerfrentealoselementosdeunamatriz.Paraespecificarelrangosubndice,quemcludelastartmgy
nmerossubscnptendmgmladeclaracindeclaratwn,w1thlosdosnmerosseparadospordospuntos.
REALDIMENSION(LOWER_BOUND:upper_bound)::array
Porejemplo,lastresagrupacionessiguientestodasconstandecincoelementos:
REALDIMENSION(5)::al
REALDIMENSION(2:2)::bl
MatrizALesabordadovlithsabscripts1throagh5,arrayb1sedirige\scriptsVithsab2hastael2,yla
matrize1esabordadoconsubndices5a9.Lostresanaystienenlaformasume,yaquetienenelmismo
numbeidedimensionesyla
mismamedidaencadadimensin.
e1Chapman:Fortran95/20036.lntroductionalasmatrices!TextoTheMcGrawHillparacientficosy
Empresas.2008Ingenieros,TerceraEdicin
258CAPTULO6:IntroduccinalasmatricesEngeneral,elnmerodeelementosenunadimensin
dadadeunamatrizsepuedeencontrar
grado=upper_boundLOWER_BOUND+1(61)
Elsencilloprogramasquares_2muestraenlaFigura64calculaloscuadradosdelosnmerosdeserie
nUMBEry,acontinuacin,imprimelosnmerosysusplazas.Losarreglosdeesteejemplocontienen
11elementos,abordadosporlossubndices5,4,...,O,...,4,5.
FIGURE64
f.programparacalcularelmresdelosenteros55,utilizandoAnayelementosabordadospor
subndices5a5.
Squares_2PROGRAMA
INTEGER::i
INTEGER,DIMENSION(5:5)::nmero,plaza
!Inicialicenmeroycalcularcuadrado.
HACERi=5,5nmero(i)iInicializacinnmerocuadrado(i)nmero(i)**2Calcularcuadrado
HACER
100formal(1X,"Nmero",I6,'Plaza=',I6)
Squares_2PROGRAMADEFIN
Cuandoseejecutares_2squaprograma,losresultadosson
https://translate.googleusercontent.com/translate_f

61/104

12/1/2015

https://translate.googleusercontent.com/translate_f

Cuadrado
25
Nmero
3Plaza 9
Nmero
NmeroNmeroNmeroNmeroNumer 12345
6.2.4Fueradelmitesdematrizsubndices
Cadaelementodeunamatrizseabordamedianteunsubndiceentero.Lagamadegersintequese
puedenAseddelteelementosdelamatrizdedireccionesdependeenlamedidadeclaradaeflamatriz.
Paraunamatrizreal,declaradocomo
fChapman:Fortran95/20036.lntroductionalasmatricesdelTextoTheMcGrawHillpara
CientficosyCompan1es,2008Ingenieros,terceraedicin
Introduccinalasmatrices
259
REALDIMENSION(5)::a
elenterosubndices1a5elementosdeladireccindelamatriz.Cualquierotroenteros(menosde1o
mayorque5)nopodranserutilizadoscomosubndices,yaquerespondennocorrespondientea
posicionesdememoriaasignados.Estossubndicesenterossedicequesonfueradeloslmitesdela
matriz.Pero,qupasarasicometemosunerrorytratardeaccederalelementodesalidadelacanchaa
(6)enunprograma?
Larespuestaaestapreguntaesmuycomplicada,yaquevaradesdeelprocesadoraprocesador.En
procesadoresSORNE,unprogramaFortrannmningcomprobarcadasubndiceutilizarontereferenciaa
unamatrizteversiseencuentraenloslmites.Sisedetectaunfueradelmitessubndice,elprograma
emitirunmensajedeerrorinformativoyparar.Desafortunadamente,talesboondsclteckingIeques
muchoufcompuleitiempo,yelpwgmmseejecutarconlentitud.Paraquelosprogramasseejecuten
msrpido,lamayoradeloscompiladoresdeFortranhacencomprobacindelmitesoptwnal.Si1t1s
encendidos,losprogramasseejecutanmslento,peroqueestnprotegidosdefueradelaredreferencias
grada.Siestapagado,seejecutarmuchomsrpido,perofueradelacancha
Nosecompruebanlasreferencias.SisucompiladorFortrantieneunaopcindecomprobacindelmites,
siempredebeencenderloduranteladepuracinparaayudaradetectarerroresdeprogramacin.Unavez
queelprogramahasidodepurado,lacomprobacindelmitessepuededesactivarsiesnecesariopara
aumentarlavelocidaddeejecucindelprograrnfinal.
BuenasPrcticasdeProgramacin
formasenciendenteounseecngopt10nensuercomp1Fortranunngpro
programadedesarrolloydepuracinparaayudarleadetectarerroresdeprogramacinqueproducen
fueradeloslmitesreferencias.Laopcindeloslmitesdecomprobacinpuededesactivarsesinecesfr
inhfinlrrm
https://translate.googleusercontent.com/translate_f

62/104

12/1/2015

https://translate.googleusercontent.com/translate_f

Qupasaenunprogramasiseproduceunareferenciafueradeloslmitesyloslmitescheckmg1s
opt10nnoenciende!Somettmes,elprogramawlllabortar.Granpartedeltiempo,sinembargo,elequipo
simplementevayaalaubicacinenlamemoriaenlaqueelelementodelamatrizdereferenciahabra
sidosihubierasidoasignado,yutilizaresaposicindememoria(consultelaFigura65).Porejemplo.la
matrizdeunmencionadastienecincoelementosenlosmismos.Siun(6)seutilizaronenunprograma,el
ordenadorpodraaccederalaprimerapalabramsalldelfinaldelamatrizil.Desdeesaposicinde
memoriaseasignaparaunpropsitototalmentediferente,elprogramapuedefallardeformasutily
extraasquepuedensercasiimposibletraekabajo.Searefulconsubseriptsmatrizyom,ysiempre
utilizarelcorrectorlmitescuandoestdepurando!
Elprogramamostradoenlafigura66ilustraelcomportamientodeunprogramadeFortranquecontiene
lasreferenciasdematrizincorrectosconysincomprobacindeloslmitesencendido.Estesencillo
programadeclaraunelementodelamatrizdecincorealesayunagamadebienesdecincoelementos
b.Lamatrizaseinicializaconlosvalores1.,2.,3.,4.y5.,yserieBestinicializadoconlosvalores10.,
20.,30.,40.y50.MuchoscompiladoresdeFortranseasignarlamemoriaparalamatrizb
inmediatamentedespusdelamemoriaparaunarraycomosemuestraenlaFigura65
Elprogramadelafigura66utilizaunbucleDOparaescribirlosvaloresenloselementos1a6dela
matriza,apesardelhechodequeunarrayslotienecincoelementos.Porlotanto,intentaraccederal
elementodelamatrizfueradelmitesa(6).
6.lntroduccinalasmatrices!TextoTheMcGrawHill
Loscientficosylosingenieros,empresas.2008Terceraedicin
[Chapman:Fortran95/2003para
CAPTULO6:Introduccinalasmatrices
260
una(l)
Computadora a(3) Arraya
memoria
b(2)
ArrayB
b(3)b(5)
FIGURE65
Unamemoriacompntermostrandoen]veelementodelamatrizunseguidoinmediatamenteporun
perododecincoelementodelamatrizb.Silacomprobacindelmitesestapagado,procesadores
SORNEnopuedenreconocerelfinaldelaseries,amlpuedetratarTLLubicacinmSmorypopaSrt:
hSileldescomos(6).
Unprogramasimpleparailustrarelefectodelasreferenciasdematrizfueradelmitesconysin
LmitesPROGRAMA
https://translate.googleusercontent.com/translate_f

63/104

12/1/2015

https://translate.googleusercontent.com/translate_f

Propsito:Parailustrarelefectodeaccederaunelementodeboundsarray.
Registroderevisiones:
fChapman:Fortran95/20036.lntroductionalasmatricesdelTextoTheMcGrawHillpara
CientficosyCompan1es,2008Ingenieros,terceraedicin
Introduccinalasmatrices261
(Conclusin)
ldeclarareinicializarlasvariablesutilizadasenesteprograma.INTEGER::ilLoopVERDADERO
ndice,DIMENSION(5)a(!1.,2.,3..4.,5.1)REALDIMENSION(5)b(/10.,20.,30.,40.,50.1)
lEscribalosvaloresdelamatrizahaceryo1,6WRITE(*,100)i,a(i)
FINDO
FINPR
SiestopwgramsecompilaconelLaheyFoittan90compiladorONUunPCcompatibleconla
comprobacindelmitesactivado,elresultadoes
C:\libros\CAP6>lmites
Subndicedematrizsuperareaasignada(ver"matrices"enlaLaheyFortran90LanuaeReferencia)
.Errorocurrienbounds.f90enlalnea26.
ProgramaIhecompruebacadareferenciadematriz,yabortadocuandoseencontrconunfuerade
lmitesexpresin.Tengaencuentaqueelmensajedeerrornosdiceloqueestmal,
einclusoelnmerodelneaenlaqueseprodujo.Silacomprobacindelmitessetumedfuera,el
resultadoes
C:\libros\CAP6>lmites
Cuandoelprogramatratdeescribiruna(6lescribielcontenidodelaprimeraposicindelamemoria
despusdelafinaldelamatriz.Estaubicacinslopasaserelprimerelemento
6.2.5Elusodeconstantesconnombre,conlasdeclaracionesdematrices
EnmuchosprogramasdeFortran,lasmatricesseutilizanparaalmacenargrandescantidadesde
informacin.LacantidadufinformacinqueunpwgrampuedeprocesardependedelaONUeltamao
uflosanays
[

Chapman:Fortran95/2003paraCientficose
Ingenieros,terceraedicin6.lntroduccina
arrays

262

!Texto

TheMcGraw
HillCompanies.
2008
CAPTULO6:

Introduccin
alas
matrices

quecontiene. sonrelativamente
https://translate.googleusercontent.com/translate_f

64/104

12/1/2015

https://translate.googleusercontent.com/translate_f

Silas
matrices

pequeas,el
programa

serpequeo
ynolohar

requerirlacantidaddememoriaparanm,perowmsercapazdemanejarslounapequeaamQlmtde
datos.Porotrolado,silasmatricessongrandes,elprogramasercapazdemanejarunagrancantidadde
informacin,peroserequerirunagrancantidaddememoriaparafuncionar.Lostamaosdematrizen
unprogramadeestetiposecambianconfrecuenciaparaqueseamejornmparadiferentesproblemaso
endiferentesprocesadores.
Esunabuenaprcticadeclararsiemprelostamaosdematrizmedianteelusodeconstantesconnombre.
LasconstantesconnombrequeseafcildecambiareltamaodelasmatricesenunprogramaFortran.
Enelcdigosiguiente,lostamaosdetodaslasmatricessepuedencambiarsimplementecambiandola
nicaconstantellamadaMAX_SIZE.
INTEGER,PARMETROS::tvJAX_SIZE1000
ArraylVERDADERO(MAX_SIZE)
RACES
Estopuedeparecercomounpequeopunto,peroesmuyimportanteparaelmantenimientoadecuadode
losgrandesprogramasdeFortran.Sitodoslostamaosdematrizrelacionadasenunprogramase
declaranmedianteelusodeconstantesconnombre,ysiesasmismasconstantesconnombreseutilizan
enlaspruebasdecualquiertamaoenelprograma,entonces1twlllsermuchos1mpleramodlfyel
programaIater.Iiriagmewfiatqueseracomositienequelocalizarycambiartodaslasreferenciasalos
tamaosdematrizdentrodeunprograma50000line!Elprocesopodratomarsemanasparacompletary
depurar.Porcontraste.eltamaodeunprogramabiendiseadopodramodificarseen5minutos,
cambiandoslounadeclaracinenelcdigo.
BuenasPrcticasdeProgramacin
SiempredeclararlostamaosdelasmatricesenunprogramaFortranusandoparmetrosparahacerlos
easachane.
EJEMPLOHallarlosvaloresmayorymenorenunconjuntodedatos:
Parailustrarelusodematrices,escribiremosunsencilloprogramaqueleeenlosvaloresdedatos,y
encuentralosnmerosmayorymenorenelconjuntodedatos.Elprogramaluegoescribirlosvalores,
conlapalabra'GRANDE'impresoporelvalormsgrandeylapalabra
'MSPEQUEO'impresosporelmenorvalorenelconjuntodedatos.
Solucin
Esteprogramadebepreguntaralusuarioporelnmerodevaloresdeleer,yluegolealosvaloresde
entradaenunamatriz.Unavezquelosvaloressondelectura,tienequeiratravsdelosdatospara
encontrarlosvaloresmayorymenorenelconjuntodedatos.Porltimo,sedebeimprimirlosvalores,
conlasanotacionescorrespondientesalladodelosvaloresmayorymenorenelconjuntodedatos.
fChapman:Fortran95/20036.lntroductionalasmatricesdelTextoTheMcGrawHillpara
CientficosyCompan1es,2008Ingenieros,terceraedicin
https://translate.googleusercontent.com/translate_f

65/104

12/1/2015

https://translate.googleusercontent.com/translate_f

Introduccinalasmatrices
263
l.Indiqueelproblema.
TodavanohemosespecificadoeltipodedatosaprocesarTfestamosprocesandodatosenteros,entonces
elproblemapuedeenunciarsecomosigue:
Desarrollarunprogramaparaleerunnmeroespecificadoporelusuariodelosvaloresenterosdesdeel
dispositivodeentradaestndarlocalizarlosvaloresmayorymenorenelconjuntodedatos,yescribir
todoslosvaloresconlaspalabras'LARGEST'y'SMALLEST'impresaporlosvaloresmayorymenor
enelconjuntodedatos.
2.Definirlasentradasysalidas.Haydostiposdeentradasaesteprograma:
(A)Unenteroquecontienet:lnmerodeenterovaloresdeleer.Estevalor.vmalvienedel
dispositivodeentradaestndar.
(B)Losvaloresmtegermdelconjuntodedatos.Estosvalorestambinwlllvienendesdeeldispositivo
estndar.
Losresultadosdeesteprogramarelosvaloresenelconjuntodedatos,conlapalabra'LARGEST'
impresoporelvalormsgrande,ylapalabra"PEQUEO"impresoporelmenorvalor.
3.Describirelalgoritmo.ElprogramapuedeserdivididoencuatropasosMajar
Obtenerelnmerodevaloresparaleer
Encuentrelosvaloresmayorymenordelamatriz
1.1ritolosdatos11ithlos110rds'GRANDE''91ALLEST'Aadenel
lugaresapropiados
LosdosprimerospasosMajardelprogramasonparaobtenerelnmerodevaloresaleeryleerlos
valoresenunamatrizdeentrada.Debemossolicitaralusuarioelnmerodevaloresparaleer.Siese
nmeroesmenoroigualqueeltamaodelamatrizdeentrada,entoncesdeberamosleerenlosvalores
delosdatosOtberwisedebemosWAMusuarioTBEydejardeTbepseudocdigodetalladodeestos
pasoseslasiguiente:
SolicitaralusuarioelnmerodevaloresdeentradanvalsReadennvalsSInvals<=max_sizeentonces
DOparaj=1anvals
(Elprocesamientoadicionalaqu)
LSE
Diga11serquehaydemasiadosval11esparatamaodelamatriz
FindelaSI
PROGRAMADEFIN
https://translate.googleusercontent.com/translate_f

66/104

12/1/2015

https://translate.googleusercontent.com/translate_f

Acontinuacindebemoslocalizarlosvaloresmayorymenorenelconjuntodedatos.Vamosautilizar
variablesde11argey1sma11comopomtersatfieelementosdelamatrizfiavmgtfieIargestyvalores
mspequeos.Elpseudocdigoparaencontrarlosmayoresymenoresvaloreses:
e1Chapman:Fortran95/20036.lntroductionalasmatrices!TextoTheMcGrawHill
Empresas.2008
paracientficosy
Ingenieros,terceraedicin
264CAPTULO6:Introduccinalasmatrices
ndlatempvalor,_deentrada(1)ilarge,_1DOparaj=2anvals
SIentrada(j)
>Luegoemp,_enut(j
FindeSIFindeDO
temp,_deentrada(1)ismall,_1DOparaj=2anvals
SIentrada(j)<templuegotemp,_lnput(J)ismall,_j
FindelaDO
Elltimopasoesescribirlosvaloresconlosmsgrandesylosnmerosmspequeos
DOparaj1anvalsSIismall==jluegoEscribaentrada(j)y'SMALLEST'1argeJenEscribirentrada(j)
y'GRANDE'
Escribeentrada(j)
FindelaDO
4.GireelalgoritmoendeclaracionesFortran.
ElprogramadeFortranresultanteseshmvnenlafigura67.
FIGURE67
Unprogramaparaleerenunconjuntodedispositivodeentradaestndardedatos,encontrarlosvalores
mayorymenor,eimprimirlosvaloresconlosmsgrandesymspequeoslosvaloresetiquetados.
PROGRAMAextremos
Propsito:
Paraencontrarlosmsgrandesymspequeosval11esinconjuntodedatos,
yparaimprimirlosdatosestablecidosconelLAymenoresvaloresetiquetados.
https://translate.googleusercontent.com/translate_f

67/104

12/1/2015

https://translate.googleusercontent.com/translate_f

Registroderevisiones:
FechaProgramadorDescripcindelcambio
apman
fChapman:Fortran95/20036.lntroductionalasmatricesdelTextoTheMcGrawHillpara
CientficosyCompan1es,2008Ingenieros,terceraedicin
Introduccinalasmatrices
265
(Continuacin)
!Diccionariodedatos:declararconstantsINTEGER,PARMETROS::MAX_SIZ10!Tamaomximo
delconjuntodedatos
!Diccionariodedatos:declararlostiposdevariables,definicionesyunidadesINTEGER,DH1ENSION
(MAX_SIZE)::entrada!ValoresdeentradaINTEGERilaPointervalortolaismaenteroLPunteroa
smaestvalorINTEGERHACERINTEGERndiceloonvalsNmerodevalsenconjuntoINTEGER
variabletemporaltempdatos
!ObtenerelnmerodevaloresenelconjuntodedatosWRITE(*,*)'Introduzcaelnmerodevaloresde
conjuntodedatos:
READ(*,*)nvals
!Eselnmero<=MAX_SIZE?tamao:SInvals<=MAXTAM)ENTONCES
en:1,nvalsWRITE(*,100)'Entervalor'.j100FORMATO('',A,I3,':')READ(*,*)entrada(j)
deentrada(1)
grande:DOj=2,nvals
temp=input(j)ilare=ENDIFENDDOgrande
elvalormspequeo.
IF(inpu(j)<.temp)ENTONCES
!Escribalista.ESCRIBIR
ATe
(*,110)Salida:DOJ=1,nvalsWRITE(*,'(1X,I6,2X,A)')deentrada(j),'GRANDE'
e1Chapman:Fortran95/20036.lntroductionalasmatrices!TextoTheMcGrawHillparacientficosy
Empresas.2008Ingenieros,TerceraEdicin
266CAPTULO6:Introduccinalasmatrices
https://translate.googleusercontent.com/translate_f

68/104

12/1/2015

https://translate.googleusercontent.com/translate_f

(Conclusin)
WRITE(*,'(1X,I6,2X,A)')deentrada(j),"PEQUEO"WRITEELSE(*'(1X,I6)')deentrada(j)END
IFENDDOcabo
TamaoLSE
nvasmax_s1ze.WRITE(*,120)nvals,120Fort,IAT(LX,'Demasiadorllor
_
iYitrputvalores.16,'>'16)
5.Pruebeelprograma.Valaes.Rmmingesteprogramacon6Valaesarrojalossiguientesres
oJlt:
Paraprobaresteprograma,vamosautilizardosconjuntosdedatos,unocon6valoresyunocon12
C:\libro\CAP6>extremosIngresenmerodevaloresenconjuntodedatos:
6
511
16Entreelvalor5:
9
Introducirelvalorde6:
o
uesson:
11MSPEQUEO
9
Elprogramadeetiquetadocorrectamentelosvaloresmayorymenorenelconjuntodedatos.Correr
esteprogramacon12valoresseobtieneelsiguienteresultado:
C:\libro\CAP6>extremesEnternmerodevaloresenconjuntodedatos:12Demasiadosvaloresde
entrada:12>10
fChapman:Fortran95/20036.lntroductionalasmatricesdelTextoTheMcGrawHillpara
CientficosyCompan1es,2008Ingenieros,terceraedicin
Introduccinalasmatrices
267
Elprogramareconocequehaydemasiadosvaloresdeentrada,ydejardefumar.Deestemodo,el
https://translate.googleusercontent.com/translate_f

69/104

12/1/2015

https://translate.googleusercontent.com/translate_f

programadalasrespuestascorrectasparanuestrasdosconjuntosdedatosdeprueba
EsteprogramautilizalaIZEIVIAX_3constantellamadoadeclarareltamaodelamatriz,ytambinen
todaslascomparacionesrelacionadasconlamatriz.Comoresultado,podramoscambiaresteprograma
deprocesarhasta1.000valores,simplementecambiandoelvalordeMAX_SIZEde10a1.000.
UtilizandoconjuntosysubconjuntosENTEROSmatrizen
DECLARACIONESFORTRAN
AmbasmatricesdeenterosysubconjuntosdematrizsepuedenusarenlosestadosdeFortran.Cuandolo
son,lasoperacionesserealizanentodosloselementosdelamatrizespecificadossimultneamente.En
estaseccinnosenseacmoutilizartodamatricesysubconjuntosdelamatrizenFortran
6.3.1Operacionesdematricesenteros
Bajociertascircunstancias,lasmatricesenteraspuedenusarseenclculosaritmticos
comosifueranvariablesnormales.Sidosmatricestienenlamismaforma,entoncespuedenserutilizados
enoperacionesaritmticasordinarias,ylaoperacinseaplicarnsobreunabaseelementoaelemento
(vaselaFigura68).Considereelprogramadeejemploenlafigura69Aqu,lasmatricesa,b,e,yd
sonloscuatroelementoslargaelementoFachenserieesecalculacomolasumadeloselementos
correspondientesdelasmatricesAyB,utilizandounbucleDO.MatrizdsecalctdatedcomoSTLMde
samatrizybenunasolasentenciadeasignacin.
una(l) l. b(l) 5. d(1)
un(2) 2. b(2) 6. d(2)

6.
8.

a(3)

3. b(3) 7. d(3) 1o.


rHLl) 1/
El(Ll)
h(Ll) x
a+
FIGURA68
Cuandoseaplicaunaoperacinparadosmatricesdelamismaforma,sellevaacabolaoperacinenlas
matricessobreunabasedeelementoporelemento.
e1Chapman:Fortran95/20036.lntroductionalasmatrices!TextoTheMcGrawHill
Empresas.2008Ingenieros,Terceraedicindecientficosy
268CAPTULO6:Introduccinalasmatrices
FIGURA69Aillustprograma:ratingtantoAdemselementoporelementoytodaadicinmatriz.
Add_arraysPROGRAMA
INTEGER::i
REALDIMENSION(4)(/1.,2.,3.,4./)REALDIMENSION(4)(/5.,6.,7.,8./l
https://translate.googleusercontent.com/translate_f

70/104

12/1/2015

https://translate.googleusercontent.com/translate_f

FINHACERHACER
WholeAdemsvariedadd=a+b
Escribaresultados
vJRITE(*,100)'e',
eWRITE(*,100)'d',d100FORMATO('',A'',5(F6.1,1X))

ProgramatbisWBENeseJ<ecuted,losresultadossonexactamenteTBETBEmismoparalosclculos
botb:
e6,08,010,012,0d6,0
8,010,012,0

Dosmatricessepuedenutilizarcomooperandosenunaoperacinintrnseca(adicinetc.)siyslosi
tienenlamismaforma.Estosignificaquedebentenerlosmismosofdimensionsnmero(elmismo
rango)ylosmismosofelementsnmeroencadadimensin(enlamismamedida).Dosmatricesdela
mismaformasedicequesonconformable.Tengaencuentaqueelmstilalthoaghdosmatricestenerla
mismaforma,ellosrwttienequetenerelmismorangodesubndiceencadadimensin.Lassiguientes
matricespuedenaadirlibremente,apesardequelosrangossubndicesusados
paraaddtesssus

elementossondiferentes.
REALDIMENSION(1:4)::a(/l..2..3..4/)
REALDIMENSION(101:104)::e
Sidosmatricesnosonconformable,entoncescualquierintentoderealizaroperacionesaritmticascon
ellosproducirunerrordetiempodecompilacin.
ValoresescalarestambinsoncoarrayswitbconformablesEneseca:e,la:>valorcalari:aplica
porigualatodosloselementosdelamatriz.Porejemplo,despusdequeseexeeutedelsiguiente
fragmentoofeode,ensayeesereontainlosvalores[10.,20.,30.,40.].
fChapman:Fortran95/20036.lntroductionalasmatricesdelTextoTheMcGrawHillpara
CientficosyCompan1es,2008Ingenieros,terceraedicin
Introduccinalasmatrices
269
REALDIMENSION(4)a(!1.,2.,3.,4.1),correoreal::b=10ea*b
MuchosFortran95/2003funcionesintrnsecasqueseutilizanconvaloresescalarestambinaceptar
matricescomoargumentosdeentrada,yvolvermatricescomoresultados.Losarraysdevueltossern
contamelresultadodeapplymglafunctwnalamatrizmputbasadoenelementoporelemento.Estas
funcionessedenominanfuncionesintrnsecaselementales,yaqueoperanenarraysdeformaelemento
porelemento.Lamayoradelasfuncionescomunessonelementales,incluyendoABS,SIN,COS,EXP,
LOG,etc.UnalistacompletadelasfuncioneselementalesfiguraenelApndiceB.Porejemplo,
considereunconjuntodefinidocomoun
EntonceslafuncinABS(a)retomovould[l.,2.,3.,4.].
Yahemosvistoqueesposibleutilizarcualquieradeelementosdelamatrizomatricesenterasen
https://translate.googleusercontent.com/translate_f

71/104

12/1/2015

https://translate.googleusercontent.com/translate_f

calculatiom:.Adems,esposibleutilizarsubconjuntosdearraysenlosclculos.Unsubconjuntodeuna
matrizsellamaunaseccindematriz.Seespecificamediantelasustitucindeunsubndicedematriz
conuntripletesubndiceovectorsubndice.
Untripletesubndicetienelaformageneral
subscrfpt_l:suscr:zancada
dondeSersubipt_leselprimersubndiceparaserincluidoenelsubconjuntoarray,subseript2esel
ltimosubndiceparaserincluidoenelsubconjuntodematriz,ylazancadaeselincrementosubndicea
travsdelconjuntodedatos.FuncionacomounbucleDOimplcita.Untripletesuhscriptespecificael
conjuntodetodoslosorcleredsuhscriptsmatrizapartirsubseryterminandoconsubseript_2,que
avanzabantasaatadezancadaentrelosvalores.Porejemplo,vamosadefinirunaseriedeRRaycomo
INTEGER.DIMENSION(l0)::=array(/1.2.3.4.567.8.9.10/)
Entonceselrayogamasubconjuntoar(1:1O:2)seraunamatrizquecontienesloelementosarray(1),
yunrra(3J,array(5J,array(7l,yrayosar(9).
Cualquieraotodosloscomponentesdeuntripletesubndicepodrserdescalificado.Siptsubseri1no
esteneltriplete,tomapordefectoelsubndicedelprimerelementodelamatriz.SiSubSeript2no
apareceeneltriplete,quedefanltsalsnbscriptdelltimoelementodelamatriz.Sistridefaltaenel
triplete,elvalorpredeterminadoesuno.Todaslassiguientesposibilidadessonejemplosdetrillizos
legales:
t2:zancada
subscript_2subscri
:Calma
OfChapman:Fortran95/20036.lntroductionaarrays!TextoTheMcGrawHillparaCientficosy
Empresas.2008Ingenieros,TerceraEdicin
270CAPTULO6:Introduccinalasmatrices
EXi\.MPLEEspecificacin4rraySectmsconsubndicesTriptets:62
Asumirlassiguientesinstruccionesdedeclaracindetipo:
Determinarelnmerodeelementosenyloscontenidosdelasseccionesdematrizespecificadoporcada
unodelossiguientestripletessubndice:
(A)
(B)
(D)
(F)una(:jl
(G)una(::i)
Solucin
https://translate.googleusercontent.com/translate_f

72/104

12/1/2015

https://translate.googleusercontent.com/translate_f

(A)un(:)esidnticaalamatrizoriginal:[.....l,2.,3,4.,5,6.,7,8.,9,10.]
(B)a(i:j)eselsubconjuntomatrizapartirdelelemento3yterminandoenelelemento7,conun
STNDEpredeterminadode1:[.3.,=4,5.,6,7..]
(E)a(i:j:i)eselsubconjuntomatrizapartirdelelemento3yterminandoenelelemento7,conun
pasode3:[.3.,6]
(D)un(i:j:j)eselsubconjuntomatrizapartirdelelemento3yterminandoenelelemento7,conun
pasode7:[3.]
(E)s(i:)eselsubconjuntomatrizapartirdelelemento3ypordefectoqueterminaenelelemento10
(elfinaldelamatriz),conunpasopredeterminadode1:[3,4,5,6,...7.,
(F)a(j)eselsubconjuntoarraycomenzandopordefectoenelelemento1yterminandoenmentele/,
w1thunSTNDEdefectodel:...[l,2,3,=4,5.,6.,/.]
(G)una(::i)eselsubconjuntoarraycomenzandopordefectoenelelemento1yterminandoporde
criticaralelemento10,conunpasode3:[.l,4,7,10..]
TrillizosSubndiceseleccionarsubconjuntosdeelementosdelamatrizparasuusoenclculos
ordenados.Encontraste,'subseriptseetorallo"arbitral)combinacionesdeelementosdelamatrizaser
seleccionadosparasuusoenunaoperacin.Unsubndicevectoresunamatrizdeenterosunidimensional
speci.fyingloselementosdelamatrizparaserutilizadoenunclculo.Loselementosdelamatrizpuede
debeespecificarseencualquierarder,yelementosdelamatrizsepuedenespecificarmsdeunavezLa
matrizresultantecontendrunelementoporcadasubndiceseespecificaenelvectorPorejemplo,
considerelassiguientessentenciasdedeclaracindetipo..:
INTEGER.DIMENSION(5)::vec=(/1,6,4,1,9/)
REAL,DitiENSIOIHlO)..un(/1.,2.,3.,4.,5.,6.,7.,8.,9.,10./)
fChapman:Fortran95/20036.lntroductionalasmatricesdelTextoTheMcGrawHillpara
CientficosyCompan1es,2008Ingenieros,terceraedicin
Introduccinalasmatrices271
Conestasdefiniciones,un(uve)seralamatriz[l.,6.,4.,1.,9.].
Tfunsubndicevectorincluyecualquierelementodelamatrizmsdeunavez,entonceslaseccinde
matrizresultantesellamaunaseccindematrizdemuchosauno.Talseccindematriznosepuede
utilizarenelladoizquierdodeunainstruccindeasignacin,porqueseraespecificarquedosoms
diferentesvaloresdebenserasignadosalmismoelementodelamatrizalmismotiempo!Porejemplo,
considerelassiguientesafirmacionesFortran:
INTEGER,DIMENSION(5)::vec=(/1,2,1!)
ELOI2
REALDIMENSION(10)::a(110,20.,30.1)
b(vec)
Ladeclaracinass1gnmentintentaass1gntantoelvaloryelvalor10.30.aelementodelamatrizB(1),
locualesimposible.
6.4ENTRADAYSALIDA
https://translate.googleusercontent.com/translate_f

73/104

12/1/2015

https://translate.googleusercontent.com/translate_f

Seposs1ble1sapertorml/0operat10nsene1tfierelementosdelamatrizomatricesmdlVlduaientlre.
Ambostiposde110operacionessedescribenenestaseccin.
6.4.1Entradaysalidadeelementosdematriz
Anteriormenteafirmamosqueunelementodelamatrizesunavariablealigualquecualquierotra
variable,yqueunaa:elementoRRaypuedeNSEDencualquierlugarenelquesepuedeutilizaruna
variablemdinarydelmismotipo.Porlotanto,lasdeclaracioneseLeayWRIcontienenelementosdela
matrizsonslodeclaraciones1EhkeREADyWRIparacualquierotrovanables.ParaWNTEcabo
elementosspec1f1cdeunamatriz,slolesnombreenlalistadeargumentosdeladeclaracindelaIRG
TE.Porejemplo,elsiguientecdigoescribelosprimeroscincoelementosdelamatrizdebienesa.
.''
100FORMATO(lX,'a=',5Fl0.2)
6.4.2LaDOLoopImplcito
TambinsepermiteelbucleDOimplcitoen110declaraciones.Permiteunalistadeargumentosquese
escribamuchasvecescomounafuncindeunavariabledendice.Cadaargumentoenlalistade
argumentosseescribeunavezparacadavalordelavariabledendiceenelbucleDOimplcita.Conun
bucleDOimplcita,loshecomesdeclaracinanterior
Lalistadeargumentosenestecasocontieneunsoloelemento:a.(IlEstalistaserepiteunavezporcada
valordelndiceitakesi.Sincevariablesenlosvaloresde1a5,loselementosdelamatrizdeun(1),a(2
l,a(3),a(4),yuna(5)sebewtitten.
e1Chapman:Fortran95/20036.lntroductionalasmatrices!TextoTheMcGrawHill
Empresas.2008
paracientficosy
Ingenieros,terceraedicin
272CAPTULO6:Introduccinalasmatrices
LaformageneraldeunWRITEodeclaracinledaconunbucleDOimplcitoes:
WRITE(unidad,formatl(argl,arg2,...,1ndex1Arranque.1end,incr)LEER(unidad,elformato)(argl,
arg2,...,istartndice,incr)
dondeargl,unrg2,etc.,sonlosvaloresquesedebeescribirnileer.LavariableiNDICEeselndicedel
bucleOO,yrtista,ienc1,yenuarerespectivElyelvalnepartida,valorfinal,yelincrementodela
variablendicedelbucle.ElndiceytodoslosparmetrosdecontroldebucledebenserdetipoI
NTEGER.
ParaunasentenciaWRITEquecontieneunbucleDOimplcita,cadaargumentoenlalistade
argumentosseescribeunavezcadavezqueseejecutaelbucle.Porlotanto,unadeclaracincomo
,,
https://translate.googleusercontent.com/translate_f

74/104

12/1/2015

https://translate.googleusercontent.com/translate_f

1000FORMATO(1X,9I6)
escribiracabonuevevaloresenunasolalnea:
AhoraechemosunvistazoaunejemplounpocomscomplicadousandomatricesconunbucleDO
implcita.Figura61OmuestraunprogramaquecalculalarazcuadradaycbicaIOutufufunconjunto
numbetsypintsunamesaufsquateyCabeIOuts.Elptogtamcalcularacescuadradasyracescbicas
paratodoslosnmerosentre1yMAX_SIZE,dondeMAX_SIZEesunparmetro.Culserlasalida
deesteprogramaparece?
FIGURA610
Unprogramaquecalculalasracescuadradasycbicasdeunconjuntodenmero,ylasescribeacabo,
utilizandounbucleDOimplcita.
PROGRAMAsuareycbicasraces
Propsito:Paracalcularatabledenmeros,racescuadradas,yelcuborootsusingunbucleDOimplcita
alasalidadelamesa.
Registroderevisiones:
!Diccionariodedatos:declararconstantesINTEGER,PARMETROS::MAX_SIZE=10valores
mximosenlamatriz
!D1ct1onarydatos:declarartiposvar1able,def1n1t1ons,yun1tsINTEGER::j!LoopndiceREAL
DIMENSION(MAX_SIZE)..valor!ArrayufIIUIIIberSREALDIMENSION(MAX_SIZ)
square_rootArrayderootsREALcuadrado,DIMENSION(MAX_SIZE)CUbC_I"OOTArra)deraces
cbicas
fChapman:Fortran95/20036.lntroductionalasmatricesdelTextoTheMcGrawHillpara
CientficoseCompan1es.2008Ingenieros,TerceraEdicin
Introduccinalasmatrices
273
(Conclusin)
!Caleulcomi:tlie:3quale:1oot3&eube:1oot3oFtlie:ltUittbe:t3.
HACERj1,valorMAX_SIZE(j)=real(j)Raiz_cuadrada(j)sqrt(valor(j))
..**FINHACER
!Escribecadanmero,surazcuadrada,ysurazcbica.WRITE(*,100)IDOformal('0',20X,'Tabla
otcuadradasycbicasRoots',/,y
4X,'NmeroaristavivaRootCubeRoot',y
WRITE(*,110)(valor(j),Raiz_cuadrada(j),cube_root(j),jl.MAXTAMAO)
Square_and_cube_rootsPROGRAMADEFIN
https://translate.googleusercontent.com/translate_f

75/104

12/1/2015

https://translate.googleusercontent.com/translate_f

ElbucleDOimplcitaenesteejemploseejecutar10veces,conjteniendoenelvalordeeryevbehveen
1y1O(elincrementodebucleestpordefectoen1aqu).Durantecadaiteracindelbucle,latotalidad
delalistadeargumentossegrabar.Porlotanto,estadeclaracindelaIRGTEescribir30valores,seis
porlnea.Lasalidaresultantees
Tabladeracescuadradasycbicas
Nmero Razcuadrada CubeNmeroRootSquaRootre CRootube
l.
l.0000
1.00002.1.4142
1.2599
5.
2.2361
1,71002,44956.
1.8171
9.
3.0000
2.080110.3.1623
2.1544
AnidadoimplcitaHACERbucles
ComoordinarioDObucles,implcitasNObuclespuedenanidarse.Siellosestnanidados,elbucle
internoseejecutarcompletamenteparacadapasoenelbucleexterno.ComosimplesejempIo,considere
lassiguientesafirmaciones
,1,J.J=
100FORMATO(1X,I5,1X,I5)
HaydosbuclesDOimplcitosenestadeclaracindelaIRGTE.Lavariabledendicedelaljibucle
interior),ylavariabledendicedelbucleonterii.CuandoseejecutaelECLARACIN1,1ITE,la
variablejseenfrentaralosvalores1,2y3mientrasIIS1,yluego1,2y3,mientrasiL2.Elontpntde
estadeclaracinser
23
22
6.lntroduccinalasmatrices!TextoLoscientficosMcGrawHillyEmpresas.2008Ingenieros,
TerceraEdicin
[Chapman:Fortran95/2003para
274CAPTULO6:Introduccinalasmatrices
AnidarseimplicabanHACERbuclessonimportanteseneltrabajoconmatricesquetienendosoms
dimensiones,comoveremosmsadelanteenelcaptulo8
Ladiferenciaentre1/0alanormaDObuclesy1/0con
implcitabuclesdo
DeentradaydesalidadematricessepuedenrealizarconunestndardeDObuclequecontieneI/0
declaracionesoconunbucleDOimplcita.Sinembargo,existendiferenciassutilesentrelosdostiposde
bucles.Paraentendermejorestasdiferencias,vamosacompararlamismadeclaracinproduccinescrita
conambostiposdebucles.Vamosasuponerqueinte
gerarrayarrseinicializadelasiguientemanera
https://translate.googleusercontent.com/translate_f

76/104

12/1/2015

https://translate.googleusercontent.com/translate_f

::Arr=
ycompararsalidaparaunRugularHACERsalida'NithbucleparaunbucleDOimplcita.A
continuacinsemuestraunadeclaracinhaciafuerapuestoutilizandounbucleordinarioDO.
HACERi=1,5WRITE(*,1000)arr(i),2.*arr(i).3*arr(i)1000FORMATO(1X,6l6)
FINDO
Enestebucle,ladeclaracinWRITEseejecutacincoveces.Dehecho,estebucleesequivalentealas
siguientesafirmaciones:
WRITE(*,1000)arr(2),2.*arr(2).3*arr(2)(*1000)arr(3)2.*arr(3l.3*arr(WRITE3l(*,1000)
arr(4),2.*arr(4).3*arr(4)WRITE(*,1000)arr(5),2.*arr(5).3*arr(5)1000FORMATO(1X,
6l6)
AcontinuacinsemuestraunadeclaracindesalidausandounbucleDOimplcita.
1000FORMATO(1X,6I6)
Aqu,tfiere1sslounowdeclaracinR11E,perotfiewR1declaracin1Etiene15argumentos.De
hecho,ladeclaracindeWRITEconelbucleDOimplcitaesequivalentea
WRITE(*,1000)arr(1).2.*arr(1).3*arr(1),y
arr(3),2.*arr(3).3*arr(3),y
2.*arr(5).3*arr(5)1000FORMATO
LaprincipaldiferenciaentretenermuchasdeclaracionesWRITEconpocosargumentosyunaW
declaracinRITEconmuchosargumentosesenelcomportamientodesuformatoasociado.Rememher
queeadadeclaracinWRITEcomienzaalprincipiodelformatoPorlotanto,cadaofthefiveW
declaracionesRIdeTEenlanormaDObuclecomenzardenuevoalcomienzodelastarement
FORMAT,ysloelprimerodelosseisthrueI6descriptoresseserutilizado.Lasalidadelbucle
estndarnoser
fChapman:Fortran95/20036.lntroductionalasmatricesdelTextoTheMcGrawHi\1para
CientficosyCompan1es,2008Ingenieros,terceraedicin
36 9
4 8 12
5 10 15
UhotroHahd,elbucleOOimplcitaproduceunasiHgle0.1RITEstatemeHtvlith15argumentos,por
loqueelformatoasociadoserutilizadacompletamentetiempos2yz.LasalidadelbucleDOimplcita
ser
123246
369481251o15
ElmismoconceptoseaplicacomparacintoadedeclaracionesleenutilizandoestndarDObuclesVth
https://translate.googleusercontent.com/translate_f

77/104

12/1/2015

https://translate.googleusercontent.com/translate_f

LEAdeclaracionesusandobuclesdoimplcitas.(Vaseelejercicio69alfinaldelcaptulo.)
6.4.3EntradaysalidadematricesenterosymatricesSecciones
ArraysenterososeccionesdelamatriztambinpuedeserledoovrenonconREADy1,1mentos
estatalesRITE.SiunnombredematrizsemencionasinsubndicesenunadeclaracinFortranI/0,
entonceselcompiladorasumequecadaelementodelamatrizsehadeleerenoenescrito.Siunaseccin
dematrizsemencionaenunadeclaracinFortranI/0,entonceselcompiladorasumequeelent1re
sectwn1sparaserledomownttenacabo.Figura611muestraunejemplosencillodeutilizaruna
matrizydosseccionesdematrizenI/0declaraciones.
UnejemploqueilustraelprogramaconjuntodeI/0.
Array_ioPROGRAMA
1
Propsito:IlustrararraI/0.
Registroderevisiones:FechaProgramadorDescripcindelcambio
apman
!Dictiollalydedatos.decla1evaltiposiableydefi11itio11SREALDIMENSION(5)::a=
(/1.,2.,3.,20.,10./)!5elementodelamatrizdeprueba
INTEGER,DIMENSION(1)vec(/1,3,4,5/)!vectorsubndice
WRITE(*,100)unformato100(2X5F8.3)
Introduccinalasmatrices

275
123
246

6.lntroduccinalasmatrices!TextoTheMcGrawHill
Loscientficosylosingenieros,empresas.2008Terceraedicin
[Chapman:Fortran95/2003para
276

CAPTULO6:
Introduccinalasmatrices
(Conclusin)
WRITE(*,100)a(2::2)
!Seccinmatrizdesalidaseleccionado* porunsubndicevector.
FINPROGRAMAarray_io
Lasalidadeesteprogramaes:
l.000
2,000
3,000 20.000 10.000
20.000
3,000
20.000 10.000
Esteconcursoofreceunacomprobacinrpidaparaversihaentendidolosconceptosen

https://translate.googleusercontent.com/translate_f

78/104

12/1/2015

https://translate.googleusercontent.com/translate_f

prcticadistintasiniciativasenlasSecciones6.16.4.Sitieneproblemasconlosreleerlas
secciones,pregunteasuinstructor,odiscutirelmaterialconuncompaerodeestudios.Las
respuestasaestecuestionarioseencuentranenlaparteposteriordellibro.Paralaspreguntas
1a3,determinarlalongituddelamatrizespecificadaporcadaunode2.PruebaLGICO
(0:255)3.INTEGER,PARMETROS::Il=20INTEGER,PARMETROS::121
REAL,DltvJENSION(I1:Il*l2)::uncomunicado,especifiquequvaapasarenel
programa.Supongamosescriturapredeterminadopara3.3.3.2.1.,o/)6.INTEGER::
datos1(256)8.INTEGER::i,jINTEGER,DIMENSION(0:9.)::sub2
fChapman:Fortran95/20036.lntroductionalasmatricesdelTextoTheMcGrawHillpara
CientficosyCompan1es,2008Ingenieros,terceraedicin
Introduccinalasmatrices
277
INTEGER.DIMENSION(100)::en=&(/((0,i=1,9),j*10,10)/)sub1=en(10:100:10)
WRITE(*,100)sub1*sub2100FORMATO(1X,10l8)
9.
10.INTEGER,PARMETROS::MAX10
INTEGER,DIMENSION(MAX)ivec1(/(I'i=l,10)!)INTEGER,DIMENSION(MAX)ivec2(!(I,i=
10,1,1)1)REALDIMENSION(MAX)::datos1
WRITE(*,500)datos1(ivec2)500FORMATO(1X,'Salida=',/,5(3X,F7.1))
11.1o
FINDO
6.5
EXAMflLEflROBLEMS
Ahorawlllexammedosproblemasdeejemploquelllustrateelusodearrays.
Ejemploordenardatos:
63
Enmuchasaplicacionescientficasydeingeniera,esnecesariotenerunconjuntodedatosdeentradaal
azarfijaryordenardemaneraquelosnmerosenelconjuntodedatossonobientodoenorden
ascendente(demenoramayor)otodoenordendescendente(demayoramenor).Porejemplo,suponga
queustederaunzologoestudiandounagranpoblacindeanimales,yquequeraidentificarelmayor
del5porcientodelosanimalesenlapoblacin.Lamaneramsdirectadeacercarseaesteprohlemibaa
ordenarlostamaosdetodoslosanimalesdelapoblacinenascendentearder,ytomarel5porcientode
losvalores.
Ordenacindedatosenordenascendenteodescendentepareceteseruneasyjob.i\Jtertodo,lohacemos
https://translate.googleusercontent.com/translate_f

79/104

12/1/2015

https://translate.googleusercontent.com/translate_f

todoeltiempo.Esunasuntosencilloparanosotrosparaordenarlosdatos(10,3,6,4,9)enelMDER(3,
4,6,9,10).Cmolohacemos?Vveprimeraseanlalistadedatosdeentrada(10,3,6,4,9)
e1Chapman:Fortran95/20036.lntroductionalasmatrices!TextoTheMcGrawHill
Empresas.2008
paracientficosy
Ingenieros,terceraedicin
278CAPTULO6:Introduccinalasmatrices
parabuscarelvalormspequeodelalista(3),yluegoseanlosdatosrestantesdeentrada(10,6,4,9)
paraencontrarelvalorAllestprximosm(4),etc,1mtillalistacompletaestordenada
Dehecho,laclasificacinpuedeseruntrabajomuydifcil.Amedidaqueelnmerodevaloresa
clasificaraumenta,eltiemponecesariopararealizareltiposimpledescritoanteriormenteaumenta
rpidamente,yaquedebemosseanlosdatosdeentradafijadodeunavezporcadavalorclasificado.
Paralosconjuntosdedatosmuygrandes,estatcnicaslosenecesitademasiadotiempoparaser
prctico.Peoran,cmopodramosordenarlosdatossihabademasiadosnmerosparacaberenla
memoriaprincipaldelacomputadora?Eldesarrollodetcnicasdeseleccineficientesparagrandes
conjuntosdedatosesunreaactivadeinvestigacin,yesobjetodecursoscompletosporsmismo.
Enesteejemplo,vamosalimitarnosalalgoritmomssimpleposibleparailustrarelconceptodela
clasificacinIbisalgoritmomssimplesellamatbeseleccinespecieEsslounaaplicacininformtica
delclculomentaldescritoanteriormente.Elalgoritmobsicoparalaseleccinesungnero:
l.Seanlalistadenmerosaclasificarparalocalizarelvalormspequeodelalista.Lugarque
lista1tswappmg.Sielvalorenlapartedelanteradelalistayaeselvalormspequeo,entoncesno
hacernada.
2.Seanlalistadenmerosdeposicin2hastaelfinalparalocalizarelsiguientevalormspequeode
lalista.Coloqueesevalorenlaposicin2uflalistamedianteelcanjeconelvaloractualmenteenesa
posicin.Sielvalorenlaposicin2esyaelsiguientevalormicrocticoEste,luegonohacernada.
3.Seanlalistadenmerosdeposicinde3afinalesdelocalizareltercervalormspequeodela
lista.Coloqueesevalorenlaposicin3delalistamedianteelcanjeconelvaloreurrentlyenesa
posicin.Sielvalorenlaposicin3esyaelsmaHestvalorthiid,luegonohacernada.
4.Repitaesteprocesohastaquesealcancelaposicinsiguientealltimodelalista.Despusdela
prximaalaposicinJastenlalistahasidoprocesada,tbeespecieescompleta
TengaencuentaquesiestamosordenandoNvalores,estealgoritmodeordenacinrequiereN1atravs
delosdatosescaneadosaaccomphshlaespecie.Esteprocesoseilustraenlafigura612.Puestoquehay
cincovaloresenelconjuntodedatos
queserresuelto,vamosahacercuatroexploracionesatravsdelosdatos.Duranteelprimerpasoatravs
detodoelconjuntodedatos,elvalormnimoesdetres,asquelostresseintercambiaconlosdiezque
seencontrabaenlaposicinuno.Pasardosbsquedasparaelvalormnimoenpuestosdeldosalcinco
Esomnimaesdecuatro,asqueloscuatroseintercambiaconladiezenlaposicindedospasadastres
bsquedasparaelvalormnimoenposicionesdeltresalcinco.Esamnimaesdeseis,queyaesten
posicinthrce,loquenorequiereelintercambio.Porltimo,pasarcuatrobsquedasparaelvalor
https://translate.googleusercontent.com/translate_f

80/104

12/1/2015

https://translate.googleusercontent.com/translate_f

mnimoenpuestoscuatroalcinco.Estemnimoesdenueve,porloqueelnueveseintercambiaconla
diezencuatroposiciones,yelhijosehacompletado.
ProgramacinTrampascomutationall
Elalgoritmodeordenacinporseleccineselalgoritmomsfcillaclasificacindeentender,peroes
ineficiente.Nuncadebeserunmintieronparaordenarreal!conjuntosdedatoslare(porejemplo,define
conmsde1.000elementos).Conlosaos,losinformticostienen
algoritmo(algoritmoheapsort)enelEjercicio735.
fChapman:Fortran95/20036.lntroductionalasmatricesdelTextoTheMcGrawHillpara
CientficosyCompan1es,2008Ingenieros,terceraedicin
Introduccinalasmatrices
279
10
3FC
10 4
FC FC
4
4 10

V
4 4
FC FC
V

>

1>

10 9

y V y V IU

ffff
SwaIntercambioNoSWAIntercambio
FIGURA612
Unproblemadeejemploquedemuestraelalgoritmodeordenamientoporseleccin.
AhoravamosadesarrollarunprogramaToreadenundato:setdeunarchivo,:ordenaenuna:sorden
ascendente,ymostrarelconjuntodedatosordenados.
SoLunoNEsteprogramadebesercapaztupidaalfmusetelnombreufelarchivosesmtedtu,Upenese
archivo,leerlosdatosdeentrada,ordenarlosdatos,yescribirlosdatosclasificados.Elprocesodediseo
parath1s1sproblemadadoacontinuacin.
l.Indiqueelproblema.
Todavanohemosespecificadoeltipodedatosquesevanaordenar.Silosdatossonreales,entoncesel
problemapuedeenunciarsecomosigue:
DesarrollarunprogtamToreadunnnmberarbitrariadevaloresdedatosdeentradarealapartirdeun
archivosuministradoporelusuario,ordenarlosdatosenordenascendente,yescribirlosdatos
clasificadosaladev1cesalidaestndar.
https://translate.googleusercontent.com/translate_f

81/104

12/1/2015

https://translate.googleusercontent.com/translate_f

2.Definirlosinmtseutputsami.Haydostiposdeentradasaesteprograma:
(A)Unstnngcontammgtfienombrecfiaracterhledetfiehledatosmput.1fi1sstnngprovendrndel
dispositivodeentradaestndar.
(B)Losdatosrealesvaloresenelarchivo.
Losresultadosdeesteprogramasonlosdatosrealesordenados,aloresvrenonaldispositivodesalidade
lastandard.
3.Describirelalgoritmo.Esteprogramasepuededividirencincograndesteps
unamatriz
Escribelosdatosordenados
eChapman:Fortran95/20036.lntroductionalasmatrices!TextoTheMcGrawHill
1paracientficosyempresas.2008Ingenieros,TerceraEdicin
280CAPTULO6:IntroduccinalasmatricesSolicitarnombredearchivo
t
LEERnombredearchivo
Abrirarchivo"filename"
.L
f="lllq
eOPEN7
'T.TRUE.1LEERtemp1Ikut.nvalsnvals+1(\uUvv"'t'1t
(\''"E'f/VC\JJ'.:!
1
.,L.
(Salida)
Diagramadeflujoparavaloresdelecturaparaordenarapartirdeunarchivodeentrada.
LostresprimerospasosMajardelprogramasonparaobtenerelnombredelarchivodeentrada,paraabrir
elarchivoyleerenlosdatos.Debemossolicitaralusuarioelnombredelarchivodeentrada,leerenel
nombre,yabrirelarchivo.Silaaperturadearchivosserealizacorrectamente,debemosleerlosdatos,el
seguimientodelacantidaddevaloresquesehanledo.DadoquenosabemoscuntosdatosValores
esperartu,unbuclewhileesfmappwptiateelREAD.Unflowchalldeestospasossemuestraenla
Figura613,yelpseudocdigodetalladosemuestraacontinuacin:
Solicitaralusuarioelnombredelarchivodeentrada"nombredearchivo"Leerelnombredelarchivo
https://translate.googleusercontent.com/translate_f

82/104

12/1/2015

https://translate.googleusercontent.com/translate_f

"nombredearchivo""nombredearchivo"archivoabiertoabrotienexito,
MIENTRASLeervalorentemp
fChapman:Fortran95/20036.lntroductionalasmatricesdelTextoTheMcGrawHillpara
CientficosyCompan1es,2008Ingenieros,terceraedicin
Introduccinalasmatrices
a(nvals),_
FindeMIENTRAS

281

(Lnserteclasificacin aqu)
(Escrituralnserte
aqu)
FindelaSI
Acontinuacintenemosqueordenarlosdatos.Tendremosquehacernvals1pasaatravsdelosdatos,
encontrarelvalorrestantemspequeacadavez.Vamosautilizarunpunteroparalocalizarelvalorms
pequeoencadapase.Unavezencontradoelvalormspequeo,seswAppedalacimadelalistadelos
quenoseaireadyall.Ungrficodeflo"paraestospasossemuestraenlafigura614,yel
pseudocdigodetalladasemuestraacontinuacin:
J.
u/.FALSE.1i=1\.TRUE.1::::,VO
1:0.L\i=i+1iotr(iFALSO/1\j=j+11\J

".TRUE<a(IL7YRUE....FPR(j11AFA1F0PR*iFALSOFT1p(a(i)un\lJ(
un\LPTR..un(FPR)(emp
Diagramadeflujoparalaclasificacindevaloresconunaseleccinespecie.
6.lntroduccinalasmatrices!TextoTheMcGrawHill[Chapman:Fortran95/2003para
Loscientficosyempresas.2008
Ingenieros,terceraedicin
282CAPTULO6:Introduccinalasmatrices
DOparai1tonvals
!Encuentreelvalormnimodeuna(i)atravsdeuna(nvals)FPR,_HACERparaji+lparanvals
SIa(j)<(FPR)ENTONCES
FINSIFINDO!FPRpuntosmoelvalormin,porloquecambiaruna(FPR)con
1
SIi/=IPTRENTONCEStem,_a(i)a(i),_un(FPR)enun(FPR),_temp
FINSIFINDO
Elltimopasoesescribirlosvaloresordenados.Noserequiereunrefinamientodelapseudocdigopara
https://translate.googleusercontent.com/translate_f

83/104

12/1/2015

https://translate.googleusercontent.com/translate_f

esepaso.Elpseudocdigofinaleslacombinacindelalectura,clasificacinyescribirpasos.
4.GireelalgoritmoendeclaracionesFortran.ElprogramadeFortranresultantesemuestraenlafigura
615.
Unprogramaparaleerlosvaloresdeunarchivodedatosdeentrada,yordenarlosenordenascendente.
SortlPROGRAMA
Propsito:Paraleerenunconjuntodedatosdeentradareal.especieennqAscendiarderutilizandoel
algoritmodeordenacindeseleccin,yparaescribirelsorteddataaldispositivodesalidaestndar.
Registroderevisiones:
!Entradamximatamaodelconjuntodedatos
!Diccionariodedatos:declarartiposydefinicionesdevariablesREALDIMENSION(MAX_SIZE)::
unamatrizdedatosparaordenarCHARAC1ER(1en20)::Losdatosdeentradafllenamefl1enombre
ENTEROLOndiceP?
YoNTEGERjLoopindexINTEGERnvalsONmerodevaloresdedatosTEtipoINTEGERestadodeE
/0status:Oparaelxito
fChapman:Fortran95/20036.lntroductionalasmatricesdelTextoTheMcGrawHillpara
CientficosyCompan1es,2008Ingenieros,terceraedicin
Introduccinalasmatrices
283
(Continuacin)
lObtenerelnombredelarchivoquecontienelosdatosdeentrada.WRITE(*,1000)1000FORMATO
(1X'Introduzcaelnombredelarchivoconlosdatosqueseordenan:')READ(*'(A20)')denombrede
archivo
larchivodedatosdeentradaabierta.Estadoesviejoporquelosdatosdeentradadebe
yalexist.OPEN(DNII9,f1ienameFILE,SIAIOS
IOSTAT=estado)
lFueelOPENxito?
fileraabrir:

VIEJO, ACIION LEER,

IF(

estado

Y
)
Abrir
l
HLEN xito

ldeella,ordenarlosdatos.yescribirlosresultados.lPrimeraleerenlosdatos.HACER
LEER(9,*,IOSTAT=estado)TempvalorGetIF(estado/O)SalirSalirenfindelosdatosnvalsnvals
+1Bumpcounta(nvals)Guardarvalorenconjunto
FINDO
Ahora,ordenarlosdatos.
https://translate.googleusercontent.com/translate_f

84/104

12/1/2015

https://translate.googleusercontent.com/translate_f

iPTR=
valmn:SI(a(j)<a(FPR))ENTONCESitr=ENDIFENDvalmnHACERinterior
FPR
lalvalormnimo,porloqueintercambiarun(FPR)con)ENTONCES
ENDIFSlvap
FINHACERexterior
escribirlosdatosordenados.(*'(LX,A)')'Lasalidaordenada
sonlossiguientes:'
6.lntroduccinalasmatrices!TextoLoscientficosMcGrawHillyEmpresas.2008Ingenieros,
TerceraEdicin
[Chapman:Fortran95/2003para
284CAPTULO6:Introduccinalasmatrices
(Conclusin)
WRITE(*,1050)Estadode1050FORMATO(1X,'AbrirarchivoI6estadofallido)ENDIFFILEOPEN
NOSORT1PROGRAMA
5.Pruebeelprograma.Paraprobaresteprograma,vamosacrearunarchivodedatosdeentraday
ejecutarelprogramaconella.
Elconjuntodedatoscontendrunamezcladenmerospositivosynegativos,ascomoalmenosunvalor
duplicadoparaversielprogramafuncionacorrectamenteenesascondiciones.Elsiguienteconjuntode
datossercolocadoenarchivoqueheNPUT2:
13.3
12.
o.
4.0
6.6
6.
Alejecutarestearchivoatravsdelprogramaseobtieneelsiguienteresultado:
C:\libro\CAP6>sortlIntroduzcaelnombredelarchivoquecontienelosdatosqueseordenan:input2
Elsolucionadovaloresdedatosutson:
6.0000
https://translate.googleusercontent.com/translate_f

85/104

12/1/2015

https://translate.googleusercontent.com/translate_f

3.0000
4.0000
6.600013.3000
Elprogramadalasrespuestascorrectasparanuestroconjuntodedatosdeprueba.Tengaencuentaque
funcionatantoparalosnmerospositivosynegativos,ascomoparalosnmerosrepetidos
Paraestarsegurosdequenuestroprogramafuncionecorrectamente,debemosprobarqueparacadatipo
posiblededatosdeentrada.Esteprogramafuncioncorrectamenteparaelconjuntodedatosdeentrada
deprueba,perofuncionarparatodoslosconjuntosdedatosdeentrada?Estudiarelcdigoahorayver
sipuededetectarcualquierdefectoBEFARedecontinuarconelsiguienteprrafo
Elprogramatieneundefectomajarquedebesercorregido.Sihaymsde10,aloresenelarchivode
datosdeentrada,esteprogramavlillintentanalmacenardatosdeentradaenlasubicacionesdememoriaa
(11),a(12),etc.,quenohansidoasignadosenelprograma(estoesunafueradelacanchacondicinde
desbordamiento01array).SilacomprobacindelmitesesONUtumed,la
fChapman:Fortran95/20036.lntroductionalasmatricesdelTextoTheMcGrawHillpara
CientficosyCompan1es,2008Ingenieros,terceraedicin
Introduccinalasmatrices
programaabortarcuandotratamosdeescribirenun(11).Silacomprobacindelmitesnoest
activada,losresultadossonimpredeciblesyvarandeunordenadorconelprogramaIbisequipodebeser
reescritoparaevitarqueseintentaescribirenlugaresmsalldelfinaldelamatrizasignado.Estose
puedehacermediantelacomprobacinparaversielnmerodevaloresexcedemax_sizeBEFARe
almacenarcadanmeroenunarray.Eldiagramadeflujocorregidoparalalecturaenlosdatosse
muestraenlafigura616,yelprogramacorregidasemuestraenlafigura617.
J
rC'r
eLJL
eOpen
....TRUE.1templeer111.TRUE.u/l1ALtnvalsfnvals+1.FALSE.<MAX
TAMAO?Fa(nvalsJftempexcedaf.11\Ut111
t
\uLr1erpressoe1r1yJ
'F
(Exit)Corregidodiagramadeflujoparalalecturadelosvaloresparaordenarapartirdeunabaldosade
entradasincausarunamatriz
sobreujo.
https://translate.googleusercontent.com/translate_f

86/104

12/1/2015

https://translate.googleusercontent.com/translate_f

e1Chapman:Fortran95/20036.lntroductionalasmatrices!TextoTheMcGrawHill
Empresas.2008
paracientficosy
Ingenieros,terceraedicin
286CAPTULO6:Introduccinalasmatrices
FIGURA617
Unaversincorregidadelprogramadeclasequedetectaovertlowsmatriz.
Sort2PROGRAMA
Propsito:
T61eadi11un1eali11putconjuntodedatos,561tquei11t5asee11di11g61de1
usandoelalgoritmodeordenacindeseleccin,yparaescribirelsorteddataaldispositivodesalida
estndar.
FechaProgramadorDescripcindelcambio
11115/06SJChapmanCdigooriginal
l.16/11/06SJChapmanModificadoparaprotegercontralamatrizsobreujo.
ldiccionariodedatos:declararconstantsINTEGER,PARMETROS::MAX_SIZE10conjuntode
datosdetamaolDiccionariodedatosdeentradamxima:declararlostiposdevariablesydefiniciones
REALDIMENSION(MAX_SIZE)::unamatrizdedatosparaordenarLGICO::superar=.FALSE.
IndicandoLgicoesamatriz
seexcedenloslmites.ArchivoCARCTERdatos(len=20)::filenameInputNameiNTEGERiLoop
indexINIEGER1ptrPo1nteramenorvalorqueNTEGERndiceLoopj
YoNTEGERestadodeE/0status:Oparaelxito
Obtenerelmendelcontarchivonandolainp8tdta.WRITE(*,1000)1000FORMATO(JX'Fntprel
nombredelarchivoconlosdatosquesesortpd')READ(*'(A20)'lnombredearchivo
larchivodedatosdeentradaabierta.EstadoesVIEJOporquelaentradaobligadadatoslyaexiste.
OPEN(UNIT=9,FILE=nombredearchivo,STATUS='OLD',ACTION="leer",y
IOSTAT=estado)
lFueelOPENxito?f11eraabrir:SIestadoOIhenAbrirsuccesstul
Elarchivoseabriexitosoy,porloleenlosdatosdetusort
deella,ordenarlosdatos,yescribirlosresultados.
https://translate.googleusercontent.com/translate_f

87/104

12/1/2015

https://translate.googleusercontent.com/translate_f

HACER
(Continuacin)
fChapman:Fortran95/20036.lntroductionalasmatricesdelTextoTheMcGrawHillpara
CientficosyCompan1es,2008Ingenieros,terceraedicin
Introduccinalasmatrices
287
(Conclusin)
SI(estado/=O)EXITSaledefinaldedatosnvals=nvals+1Bumpcountsize:if(nvals<=MAX
TAMAO)entoncestambinmanyvalues?
a(nvals)=tempNohaySavevalorenconjuntosuperanELSE=.TRUE.S:desbordamientodematriz
EndIftamaoFINHACER
as,dgaleusuarioydejardefumar.
Write(*,1010)nvals,MAX_SIZE
1010FORt1AT('t1aximumtamaoaya11exeeeded.'IG,'>'IG)
ToobigELSE
!Lmitenosuperado:ordenarlosdatos.exterior:DO1,nVals1
!Encuentreelvalormnimodeuna(i)atravsdeuna(nvals)rl)LUEGO
!FPRahoraapuntaalvalormnimo,porloqueintercambiarun(FPR)con.unr111p.
swap:SI
/=FPR)ENTONCES
ENDIFintercambio
FINHACERexterior
WRITE(*,'(A)')'Losvaloresdelosdatosdesalidaordenadosson:'
ELSEfileoen
!Archivooenotrofracasado.Dileusuario.WRITE(*,1050)Estadode1050PARALAT(lX,Abrir
archivoI6estadodeerror)
EndIfFILEOPEN
Sort2PROGRAMADEFIN
e1Chapman:Fortran95/20036.lntroductionalasmatrices!TextoTheMcGrawHill
https://translate.googleusercontent.com/translate_f

88/104

12/1/2015

https://translate.googleusercontent.com/translate_f

Empresas.2008
paracientficosy
Ingenieros,terceraedicin
288CAPTULO6:Introduccinalasmatrices
Enlapruebaparalascondicionesdedesbordamientodematriz,hemosutilizadounavariablelgica
exceda.TfelsiguientevalorparaserledoenlamatrizsetraduciraenunaserieoverOow,entoncesexe
eedseestableceenTrae,ylauevalnosealmacena.Cuandotodoslosvaloressehanledodesdeel
archivodeentrada,elprogramacompruebasisehubierasuperadoeltamaodelamatriz.Siesas,se
escribeunmensajedeerrorysecierra.Sino,seleeeneltipoy
resnume.
Esteprogramatambinilustraelusoapropiadodeconstantesconnombreparapermitirqueeltamaode
unprogramaparasercambiadofcilmente.EltamaodelarrayalofijaelparmetroMAX_SIZE,yla
pruebadedesbordamientodematrizdentrodelcdigotambinutilizaelparmetroMAXSIZE.La
mximacapacidaddeclasificacindeesteprogramapodrasercambiadode10a1000contansolo
modificarladefinicindelaconstantellamadaMAXSIZEenTBEpartesuperiordelprograma.
EjemploLaMediana:
Enelcaptulo4seexaminarondosmedidascomunesestadsticosdedatos:unpromedio(omedios)ylas
desviacionesestndar.Otramedidaestadsticacomndelosdatoseslamediana.Lamedianadeun
conjuntodedatoseselvalortalquelamitaddelosnmerosenelconjuntodedatosesmayorqueel
valormedioylaufnmnbersenelconjuntodedatossonmspequeosqueelvalor.Sihayunnmero
pardevaloresenelconjuntodedatos,entoncesnopuedehaberunvalormexactamenteelm1ddle.En
esecaso,los1smed1angeneralmentedefmedcomoelpromediodelosdoselementosenelmedio.El
valordelamedianadeunconjuntodedatosesamenudoalaclase
valormediodelconjuntodedatos,peronosiempre.Porejemplo,considereelsiguienteconjuntode
datos
23
lOO
Elpromedioomediadeesteconjuntodedatoses22,mientrasquelamedianadeesteconjuntodedatos
esde3!
Unamanerafcildecalcularlamedianatuufunconjuntodedatosestuordenarenordenascendente,y
luegoparaseleccionarelvalorenelmediodelaseriededatoscomolamediana.Sihayunnmeropar
devaiuesmelconjuntodedatos,entonceselpromediodelosdosvaloresm1ddleparaobtenerla
mediana.
Escribaunprogramaparacalcularlamedia,lamedianayladesviacinestndardeunconjuntodedatos
deentradaqueseleedeunarchivoespecificadoporelusuario.
OLUCINEsteprogramadebesercapazdeleerenunnmeroarbitrariodelasmedicionesdeun
archivo,yluegocalcularlamediayladesviacinestndardeesasmediciones.
https://translate.googleusercontent.com/translate_f

89/104

12/1/2015

https://translate.googleusercontent.com/translate_f

fChapman:Fortran95/20036.lntroductionalasmatricesdelTextoTheMcGrawHillpara
CientficosyCompan1es,2008Ingenieros,terceraedicin
Introduccinalasmatrices
289
l.Indiqueelproblema.
Calen!Comilamedia,lamedianayladesviacinestndardeunconjuntodemedidasqueseleedeun
archivodeentradaespecificadoporelusuario,yescribiresosvaloresfueradeldispositivodesalidastan
dard.
2.Definirlasentradasysalidas.Haydostiposdeentradasaesteprograma:
(A)Unacadenadecaracteresquecontieneelnombredearchivodelarchivodedatosdeentrada.Esta
cadenavendrdeldispositivodeentradaestndar.
(B)Losdatosrealesvaloresenelarchivo.
LassalidasFWMestepwgramsonlaavetage,lamedianayladesviacinestndarufelconjuntode
datosdeentrada.Ellosseescribeneneldispositivodesalidaestndar.
3.Describirelalgoritmo.
Obtenerelnombredearchivodeentrada
Abraelarchivodeentrada
Leerlosdatosdeentradaenunamatriz
oEAA1naseen1ngorer
Calculalamedia,lamediayladesviacinestndar
Escribe,lamedianayladesviacinestndarmedia
Elpseudocdigodetalladoparalosprimeroscuatropasosessimilaraladelejemploanterior:
Nombredearchivo"filename"
MIENTRAS
SIleernotienexitoSALIDA
+
SInvals<=max_sizeentoncesa(nvals),_temexcedenELSE,_.TRU.EndeSIFindeMIENTRAS
Notificaralusuariosieltamaodelarreglosuper.tamaodelamatrizexceeeenEscribamensajeal
usuario
!Clasificarlosdatos
https://translate.googleusercontent.com/translate_f

90/104

12/1/2015

https://translate.googleusercontent.com/translate_f

1Busqueelminim11mval11Penunil!Thro!Arnvalsllgh
r,_
6.lntroduccinalasmatrices!TextoTheMcGrawHill
[Chapman:Fortran95/2003para
Loscientficosyempresas.2008
Ingenieros,terceraedicin
290CAPTULO6:Introduccinalasmatrices
DOparaji+lparanvalsSIa(j)<a(FPR)ENTONCESIPTR<jENDdeSIFINDO(paraji+Lpara
nvals)
1ptrahorapo1ntsalvalorM1N,asintercambiarA(LPTR)
conun(i)siir/=i.i/=iptrtemp,_un(i_)
un(FPR)<temp
FIN
1anvals1)
(Agregacdigoaqu)
FindeSIsuperado(tamaodelamatriz
FindeIF(apeoxito...
Elquintopasoescalcularlamedia,lamedianayladesviacinestndarrequerido.Paraello,primero
debemosacumularestadsticasSORNEenlosdatos(2:xy2:x2),yluegoaplicarlasdefinicionesdela
media,lamedianayladesviacinestndardadaanteriormente.Elpseudocdigoparaestaetapaes:
DOparai=1anvalssum_x<sum_x+a(i)sum_x2<sum_x2+a(i)**2
Findehacersinvals>=2,entoncesx_bar,_sum_x1real(nvals)<sqrt((reales(valos)*
sum_x2sum_x**2)1(reales(valos)*real(ovaladas1)))IFnvalsesunnmeroparENTONCES
mediana,_(a(nvals/2)+a(nvals/2+1))12.ELSmediana,_un(nvals/2+1)FINSIFINSI
DecidiremossisovaladaesunnmeroparutilizandolafuncinMODmdulo(valos2)nvalsTfespar,
estafuncindevolverunOsivalosesextrao,volveral.Porltimo,hayqueescribirlosresultados.
Escribamedia,mediana,desviacinestndar,yno.depuntos
4.ThrnelalgoritmoendeclaracionesFortran.1HEresultmg1sprogramaFortranmostradosmFigura6
18.
fChapman:Fortran95/20036.lntroductionalasmatricesdelTextoTheMcGrawHillpara
CientficosyCompan1es,2008Ingenieros,terceraedicin
https://translate.googleusercontent.com/translate_f

91/104

12/1/2015

https://translate.googleusercontent.com/translate_f

Introduccinalasmatrices291
FIGURA618UnprogramaToreadenvaloresdeunarchivodedatosdeentrada,ycalcularsumedia
mediayladesviacinestndar.
PROGRAMAs
Propsito:Paracalcularlamedia,lamedianayladesviacinestndardeunconjuntoInputDataleer
desdeunarchivo.
revlSlOnS:
ProgramadorDescripcindelcambio11/17/06SJcdigoChapmanoriginal
IMPLICITNONE
!Diccionariodedatos:declararconstantsINTEGER,PARMETROS::MAX_SIZ100!Tamao
mximodedatos
1
DdictiongryltgrideclilrebletiposKDefinicionesreales,DIMENSION(MAX_SIZE)::a!
MatrizdedatosasortLOGICAL::exceda=.FALSE.Lgicoindicatiesamatriz
limitssonC/\\,CARCTERCCUCU(len=20)::filenameInputarchivodedatosnameINTEGERi
LoopindexINTEGER::IPTR
Punteroalvalormspequeo
::Joop1nexREAL::medianaLamedianadelaentradasamplesIIHE6ER,ues11ValSoNUiiiberoF
valdatosaSortINTEGER::estadodeE/0status:.OparadevxitostdVERDADEROdesviacin
estndardemuestrasdeentradasum_xInmobiliarias=O.Sumadevaloresdeentrada
VariablestempTemporaryREALswappingREALxbarAveraedeenvaloresut
1ObtengaelnombredelarchivoquecontienelaESCRIBAdatosinp11t(*,1000)JODOFORMATO
CJX'Fnterelnombredelarchivoconlosdatosqueseordena'l
READ(*'(A20)')denombredearchivo

!Abrirarchivodedatosdeentrada.Estadoesviejoporquelosdatosdeentradadebe!yaexisten.OPEN
(Onii9,FILEfllename,SIAIOS'OLD',ACIION'READ',y
IOSTAT=estado)
!FueelOPENxito?FILEOPEN:SI(estadoO)theiOperrxitoful
6.lntroduccinalasmatrices!TextoTheMcGrawHill[Chapman:Fortran95/2003para
Loscientficosyempresas.2008
Ingenieros,terceraedicin
292CAPTULO6:Introduccinalasmatrices
https://translate.googleusercontent.com/translate_f

92/104

12/1/2015

https://translate.googleusercontent.com/translate_f

(Continuacin)
Tlle:Archivo:opeWa3:11t::d:5uect::53Totalmente,3ll1e:adl:datosa301t!deella,ordenarlos
datos,yescribirlosresultados.!Primeroleerlosdatos.HACER
SI(estado/=O)EXITSaledefinaldedatosnvals=nvals+1Bumpcountsize:if(nvals<=MAX
SIZE),entoncesDemasiadosvalores?
a(nvals)=tempNo:Guardaelvalorenconjunto
superar=.TRUE.S:desbordamientodematriz
FINDO
Sehasuperadoeltamaodelamatriz?Siesas,dgaleusuarioydejardefumar.
Write(*,1010)nvals,MAX_SIZE
1010FORMATO('Tamaomximoconjuntosuper:'I6,'>'I6)ELSE
!Lmitenosuperado:ordenarlosdatos.exterior:DO1,nVals1
1EindlosmjnjmmvaliiPjoun(arnvalsthrOIIQhil)
interior
)ENTONCES
alvalormnimo,porloquecambiarA(FPR)
.wi
)ENTONCES
!iPTRintercambiono1:SI
ENDIFintercambio
FINHACERexterior
!Losdatosestnahoraordenadas.Acumulasumasparacalcularsumas:DO1,nvals
(Continuacin)
fChapman:Fortran95/20036.lntroduccinalasmatricesdelTextoTheMcGrawHillpara
CientficosyCompan1es,2008Ingenieros,terceraedicin
Introduccinalasmatrices
293
(Conclusin)
https://translate.googleusercontent.com/translate_f

93/104

12/1/2015

https://translate.googleusercontent.com/translate_f

Datosinsuficientes.WRITE(*,*)'valoresAlmenos2debenintroducirse.
!Calculelamedia,lamedianayladesviacinestndarx_bar=sum_x1real(nvals)stddev=sqrtr(real
(nvalsl*x2StJmsumx**2ly
1(reales(nvals)*reales(nvals1)))
mediana(a(nvals/2)+a(nvals/2+1))12.
un(nvals/2+1)
Dileusuario.WRITE(*,*)'Lamediadeesteconjuntodedatoses:xbarWRITE(*,*)'Lamedianade
esteconjuntodedatoses:'WRITEmediana(*,*)'Ladev1at1onestndares:std_devWRITE(*,*)"El
nmerodepuntosdedatoses:nvals
ENDIFsuficiente
ENDIFtoobig
Archivooenotrofracasado.Dileusuario.WRITE(*,1050)Estadode1050FORMATO(1X,Abrir
archivofracasadoI6deestado)
EndIfFILEOPEN
PROGRAMADEFIN
5.Pruebeelprograma.
Paraprobaresteprograma,vamosacalcularelasrespuestasporpartedeunconjuntodedatossimple,y
luegocompararlasrespuestasdelosresultadosdelprograma.Siutilizamoscincovaloresdeentrada:5,
3,4,1y9,acontinuacin,lamediayladesviacinestndarsera
N_11
X=IX=22=4,4
Ni=l5
s=i=IN(N_:=2,966
Lamediana=4
6.lntroduccinalasmatrices!TextoTheMcGrawHill[Chapman:Fortran95/2003para
Loscientficosyempresas.2008
Ingenieros,terceraedicin
294CAPTULO6:Introduccinalasmatrices
SisecolocanestosvaloresenlaINPUT4archivoyelprogramaseejecutaconesearchivocomoun
C:\libro\CAP6>stats_4Enterelnombredelarchivoquecontienelosdatosdeentrada:INPUT4
https://translate.googleusercontent.com/translate_f

94/104

12/1/2015

https://translate.googleusercontent.com/translate_f

ees:
Lamedianadeesteconjuntodedatoses:4.000000Ladesviacinestndares:2.966479Elnmerode
puntosdedatoses:5
Elprogramadalasrespuestascorrectasparanuestroconjuntodedatosdeprueba.
nosayudaramantenerloslazosyramasrectas.Estosehacemsymsimportantecomoprograrnsse
hacenmsgrandes.Inclusoenestesencilloprograma,lazosyramasseanidancuatrodeprofundidaden
lospuntosSORNE!
6.6Cundosedebeutilizarunamatriz?
AhorahemosleamedcmoutilizarmatricesennuestrosprogramasdeFortran,perotodavanohemos
aprendidocundousarlos.EnestepuntodeuncursotpicoFortran,muchosestudiantessevententadosa
utilizarmatricesparatranquilizarprohlemssitbeysonnecesariosono,slohecausesabencmohacerlo.
Cmopodemosdecidirsiesonotienesentidoutilizarunamatrizenunproblemaparticular?
Engeneral,simuchootododelosdatosdeentradadebeestarenlamemoriaalmismotiempoconelfin
deresolverunproblemademaneraeficiente,acontinuacin,elusodearraysparaalmacenardatosque
esapropiadoparaeseproblema.Delocontrario,nosenecesitanarreglos.Porejemplo,vamosa
contrastarlosprogramasstatlst1csquehemoswnttenmEjemplos41y64.Ejemplo41calculala
mediayladesviacinestndardeunconjuntodedatos,mientrasqueelEjemplo64calculalamedia,la
medianayladesviacinestndardeunconjuntodedatos.
Recordemosquelasecuacionesparalamediayladesviacinestndardeunconjuntodedatosson
1N
XX
Ni=l
y

Nixr
i=]_r=lX_
(42)
N(N1)
F Chapman:Fortran95/2003 6.lntroduccinalasmatrices ltexto TheMcGrawHill
paracientficosy
Compan1es,2008
Ingenieros,terceraedicin
Introduccinalasmatrices
295
https://translate.googleusercontent.com/translate_f

95/104

12/1/2015

https://translate.googleusercontent.com/translate_f

Lassumasenlasecuaciones41y42queserequierenparaencontrarlamediayladesviacinestndar
sepuedenfo011edfcilmentecomovaloresdedatosseleenunoaunoNohaynecesidaddeesperar
hastaquetodoslosdatosqueseleeBEFAReempezandoaconstruirlassumas.Porlotanto,unprograma
paracalcularlamediayladesviacinestndardeunconjuntodedatosnonecesitautilizarmatrices.
UstedpodrautilizarunamatrizparacontenertodoslosvaloresdeentradaBEFARecalcularlamediay
ladesviacinestndar,peroyaquelamatriznoesnecesario,nodebehacerlo.Ejemplo41funciona
bien,yestconstruidoensutotalidadysinarreglos.
Porotrolado,labsquedadelamedianadeunconjuntodedatosrequierequelosdatosseordenanen
ordenascendentearder.Desdeclasificacinrequierequetodoslosdatosestnenlamemoria,un
programaTbatcalculalamedianadebeutilizarunamatrizparanegritaal!delaentradadedatos
BEFARelosclculoscomienzan.Porlotanto,elEjemplo64utilizaunamatrizparacelebrarsuentrada
Quhaydemaloenusarunamatrizdentrodeunprograma,inclusosinoesnecesario?YaEst
l.Arraysinnecesariosdesperdicianmemoria.Arreglosinnecesariospuedencomerunagrancantidadde
memoria,porloqueunprogramamsampliodeloquedebeser.Ungranprogramarequierems
memoriaparaejecutarlo,vilchhacequeelequipoqueseejecutaenmsexpensi,e.EncasosSORNE,
eltamaoextrapuedehacerqueseaimposibleejecutarenunequipodeterminadoenabsoluto.
2.Lji'!I'!Arraysgcgssaryrgstrictprogramacapacidades.Paraentenderestepunto,vamosaconsiderar
unprogramadeejemploquecalculalamediayladesviacinestndardeunconjuntodedatos.Siel
programaestdiseadoconunamatrizdeentradaStatie1000elemento,entoncestodofuncionarslo
paraconjuntosdedatosconunmximode1.000elementos.SinosencontramosconunSerdedatoscon
msde1000elementos,elprogramatendraquevolveracompilaryvuelvanavincularconuntamao
mayorvariedad.Porotraparte,unprogramaquecalculalamediayladesviacinestndardeunconjunto
comolosvaloresdelosdatossondeentradatieneunlmitesuperioreneltamaodelconjuntodedatos.
BuenasPrcticasdeProgramacin
Enelcaptulo6,"NepresentunaintroductienmatricesdelteyTesuusoenprogramasdeFortran.Una
matrizesungrupodevariables,todasdelmismotipo,queseconocenporunsolonombre.Unvmiable
individualdentrodelAnaysellamaunelementoaiiay.Elementosdelamatrizindividualesseenfocan
pormediodeunooms(hastasiete)subndices.
CDfChapman:Fortran95/20036.lntroductionalasmatrices!TextoTheMcGrawHillpara
CientficosyEmpresas.2008Ingenieros,TerceraEdicin
296CAPTULO6:Introduccinalasmatrices
Arraysconunsubndice(rango1arrays)sediscutieronenestecaptulo.Lasmatricesconmsdeuna
piezacompletasubndicesediscnssedenelcaptulo8
Unamatrizsedeclaraconunasentenciadedeclaracindetiponombrandolamatrizyespecificandoel
mximo(y,opcionalmente,elmnimo)lossubndicesconelatributoDIHOMBRESENSI.El
compiladorutilizalosrangossubndicedeclaradosareservarespacioenlamemoriadelacomputadoras
paramantenerlamatriz.
Aligualqueconcualquiervariable,unarraydebeinicializarBEFAReuso.Unamatrizpuedeser
inicializadoentiempodecompilacinusandoconstmctorsmatrizenlassentenciasdedeclaracinde
tipo,oentiempodeejecucinutilizandoconstructoresmatriz,realicebucles,oFortranlee.
https://translate.googleusercontent.com/translate_f

96/104

12/1/2015

https://translate.googleusercontent.com/translate_f

ElementosdelamatrizindividualespuedenserutilizadaslibrementeenunprogramaFortrancomo
cualquierotberTbeyvariablespuedenaparecerendeclaracionesdeasignacinenlaeitberladodeTBE
signoigual.Arraysenterasyseccionesdematriztambinsepuedenusarenlosclculosystaterrumtsde
asignacinsiemprequelasmatricessonconformableVATHcadaOTHy.A.rraysamconforrncapazsi
tienenelmismonmerodedimensiones(rango)yenlamismamedidaencada
matricesconformablesserealizasobreunabaseelementoporelemento.Valoresescalarestambinson
conformesconlasmatrices.
Lasmatricessonespecialmentetilesparaalmacenarvaloresdedatosquecambianenfuncin
delavariablesorne(hora,lugar,etc.).Unavezquelosvaloresdelosdatossealmacenanenunamatriz,
quepuedensermanipuladosfcilmenteparaderivarestadsticasuotrainformacinquesedesee.
671SnmmarydeBuenasPrcticasdeProgramacin
Lasdirectricesfollmvingdebenrespetarsetevgallinavwrkingarraysvlith.
l.BEFAReescribirunprogramaqueutilizamatrices,sedebeelegirentreunagranvariedadesrealmente
necesarioparasalveelproblemaono.Sinosenecesitanarrays,noutilice
'
2.Todoslostamaosdematrizsedebendeclararutilizandoconstantesconnombre.Silostamaosse
declaranmedianteelusodeconstantesconnombre,ysiesosmismosconstantesconnombreseutilizan
enlaspruebasdecualquiertamaodentrodelprogramaentoncessermuyfcildemodificarla
capacidadmximadelprogramaenunmomentoposterior.
3.TodoslosarreglosdebenserinicializadosusoBEFARe.Losresultadosdelusodeunamatrizno
inicializadasonimpredeciblesyvarandeprocesadoraprocesador.
4.ElproblemamscomnenlaprogramacinconmatricesesttratandodeleeroWNTEpara
locatwnsouts1deloslmitesdelamatriz.heaquadetectarestosproblemas,loslmitesopcindesu
compiladordechequessiempredebenestarencendidos
durantelaspruebasdelprogramayladepuracin.Debidoalacomprobacindelmitesralentizala
ejecucindeunprograma,loslmitesopcindechequespuedenserapagadosunavezsehaya
completadoladepuracin.
fChapman:Fortran95/20036.lntroductionalasmatricesdelTextoTheMcGrawHillpara
CientficosyCompan1es,2008Ingenieros,terceraedicin
Introduccinalasmatrices
297
6.7.2ResumenofFortrandeclaracionesyconstructos
Escribainstruccionesdedeclaracinconmatrices:
,DIMENSION([il:i2)::
REALDIMENSION(100)array
https://translate.googleusercontent.com/translate_f

97/104

12/1/2015

https://translate.googleusercontent.com/translate_f

::1
Estassentenciasdedeclaracindetipodeclarantantoeltipoyeltamaodeunamatriz.
lmpliedHACERestructuradebucle:
Rr:Un(mitfnrmtJ1RN7rn?,'PNIR)(=ic:trtiPnrl,NRR)
WRITE(desformatol.)(Argl,un...index=istart.IEND,incr)(!(Ara2Aral..index=istartIENDincrl
ll
Ejemplos:
ESCRIBIR(*.*)(Array(i),i1.10)
TTI::::DnTMr:Tnr1nn1,OLN
..
valores(!(i.i=1,100)!)
Descripcin:ElbucleDOimplcitoseutilizapararepetirlosvaloresdeunaListaarQumentnmerode
vecesconocido.Losvaloresenlalistadeargumentospuedenserfuncionesdelavariablendicedel
bucleDO.DurantelaprimeraiteracindelbucleDO,elndicevariableseestableceenelvalorrtista.
ndiceseincrementaincrbvencadalooosucesiva
hastaquesuvalorexcedeIEND,encuyomomentoelbucletermina.
6.7.3Exerc1ses
61.Cmosepuedendeclararmatrices?
62.Culesladiferenciaentreunamatrizyunelementodelamatriz?
eChapman:Fortran95/20036.lntroductionalasmatrices!TextoTheMcGrawHill
1
decientficosyempresas.2008Ingenieros,TerceraEdicin
298CAPTULO6:Introduccinalasmatrices
63.EjecuteelsiguienteprogramaFortranenelequipoconambascomprobacindelmitesencendidosy
comprobacindeloslmitesapagados.Qusucedeencadacaso?
PROGRAMAlimitaIMPLICITNONE
REALDIMENSION(5)INTEGERTestl::IDoi=1,6
WRITEes(*,100)'SQRT(',prueba(i),')Testl(i)
100FORMATO(1X,A,F6.3,A,F14.4)FINHACER
https://translate.googleusercontent.com/translate_f

98/104

12/1/2015

https://translate.googleusercontent.com/translate_f

GradaFINDELPROGRAMA
64.Determinarlaformaytamaodelosanaysespecificadosporlassiguientesinstruccionesde
declaracin,ylagamasubndicevlidoparacadadimensindecadaAnay.
(A)personaje(len=80),DIMENSION(60)::line
(B)INTEGER,PARMETROS::ISTART=32INTEGER,PARMETROS::ISTOP=256
INTEGER,DIMENSION(ISTART:ISTOP)Char
LGICO,DIMENSION(NUM_STUDENT,NUM_CLASS)::pasarfail
65.DetermineculdelossiguientesfragmentosdeprogramasdeFortransonvlidos.Paracada
declaracinvlida,speclfyloquefiappenmelprograma.(Supongatypmgdefectoparacualquier
variablequenoseescribenexplcitamentedentrodelosfragmentosdeprograma.)
(INTEGER,DIMENSION(100)::contadori,jcount
contadori(/(i,i=1,100)/)
jcountICOUNT+1
(B)REALDIMENSION(10)ValorValor(l:10:2)(!.!5.4.3.2.,l)
valor(!10,9.8.7.6.)(2::112)
ESCRIBIR
',/,(F10.2))
(E)INTEGER,DIMENSION(6)::a
WRITE(*,*)a>b
fChapman:Fortran95/20036.lntroductionalasmatricesdelTextoTheMcGrawHillpara
CientficosyCompan1es,2008Ingenieros,terceraedicin
Introduccinalasmatrices
299
66.Quseentiendeporcadaunodelossiguientestrminosdematriz?(A)eltamao,(b)laforma,(e)
medida,
(D)elrango.(E)conformable.
67.Dadounrayogamamy_ardefinidocomoyquecontienelosvaloresquesemuestranacontinuacin,
determinarsicadaunadelassiguientesseccionesdelamatrizesvlida.Especifiquelaformayel
contenidodecadaseccindematrizvlida.
REALDIMENSION(2:7)::my_array(a)RRaymy_array(3,3)(e)my_a(1:
1o123456]
(/ 2,
5:2)(d)INTEGER.DIMENSION(5)Lista
1,2,4,2!)
https://translate.googleusercontent.com/translate_f

99/104

12/1/2015

https://translate.googleusercontent.com/translate_f

Porqueslasalidadelasdosdeclaracionesdiferentes?
Test_outputPROGRAMA
Yo1PLICITNINGUNO
INTEGER,DIMENSION(0:7)(!...!1,23,4,5,678)::INTEGERmy_data::i,j=my_data
HACERi=0,1
100FORMATO(6(1X,I4ll
WRITE(*,100)((my_data(4*il.J=0,3),i=0,1)
PROGRAMADEFINtest_output69.UnarchivodedatosdeentradaIrPUTleontainslosvalttes
foHowing.27171086
1113111221
SupongamosqueesearchivoINPUTlsehaabiertoenlaunidadI/O8,yesamatrizva1uesesun16
elementodematrizdeenteros,cuyoselementossehaninicializadoacero.Culserelcontenidodel
arrayvalUesdespusdecadaunadelassiguientesafirmacionesREADsehaejecutado?
LEER(8'*)(valores(4*(i1)'j1.4)
(H)READ(8*)(val11Psr(4*(i1+l=1JLJ4)=14)
(E)READ(8',(416)')((valores(4*(i1)'j=1,4).I=1,4)
6.lntroduccinalasmatrices!TextoTheMcGrawHill[Chapman:Fortran95/2003para
Loscientficosyempresas.2008
Ingenieros,terceraedicin
300CAPTULO6:Introduccinalasmatrices
610.PolaraRectangularconversinUnacantidadescalaresunacantidadquepuedeserrepresentado
porunsolonmero.Porejemplo.latemperaturaatalocalizacindadaesunescalar.Encontraste,un
vectoresunacantidadquetieneunamagnitudyunadireccinasociadaconl.Porejemplo,lavelocidad
deunautomvilesunvector,yaquetienetantounadireccinAndamagnitud.
Losvectorespuedenserdefinidosporunamagnitudyunadireccinoporloscomponentesdelvector
proyectadoalolargodelosejesdeunrectangulardecoordenadassystem.Lasdosrepresentacionesson
equivalentes.Paralosvectoresdedosdimensiones,podemosconvertirdeidayvueltaentrelas
representacionesutilizandolasiguiente
Vx=VcosfJ
Vy=fJVpecado
dondeiandjsonlosvectoresunitariosenlasdireccionesXeY,respectivamente.Larepresentacindel
vectorenlaFigura619entrminosdemagnitudyelnguloseconocecomocoordenadaspolares,yla
https://translate.googleusercontent.com/translate_f

100/104

12/1/2015

https://translate.googleusercontent.com/translate_f

representacindelvectorentrminosdecomponentesalolargodelosejesdecoordenadasseconoce
comorectangulares.
Escribirunprogramaquelealascoordenadaspolares(magnitudyngulo)deunvectordedos
dimensionesenunamatrizderango1polar(polar(1)contendrellarmagnitudVypo(2)contendrel
ngulofJengrados),yconvierteelvectordepolaralaformarectangular,almacenandoelresultadoen
unamatrizderangorect1.Elprimerelementoderectdebecontenerelcomponentexdelvector.yel
segundoele
cindebecontenerlacomponenteydelvector.Despusdelaconversin,mostrarla
FIGURA619
Representaciones
deunvector.
y
'/1
/
11
V
X
fChapman:Fortran95/20036.lntroductionalasmatricesdelTextoTheMcGrawHillpara
CientficosyCompan1es,2008Ingenieros,terceraedicin
Introduccinalasmatrices301
contenidodelarrayrect.Pruebesuprogramamediantelaconversindelossiguientesvectorespolares
paraRectanformaular:
(A)5L36.87
(B)lOL45
(E)25L233.13
611.RectangularaPolarConversinEscribirunprogramaquelealascomponentesrectangularesdeun
vectordedosdimensionesenunrangor1serieect(rect(1)contendrelcomponenteV,yrect(2)
contendrelcomponenteV),yconvierteelvectorderectangularalaformapolar,almacenandoel
resultadoenunamatrizrank1polar.Elprimerelementodepolardebecontenerlamagnituddelvector,y
elsegundoelemento
debecontenerelngulodelvectorengrados.Despusdelaconversin,mostrarelcontenidodematriz
polar.(Sugerencia:BusquefuncinATAN2enelApndiceB.)Ponapruebatuprogramadelos
vectoresdeseguimientoparaformar:
(A)3i4j
(B)5i+5j
https://translate.googleusercontent.com/translate_f

101/104

12/1/2015

https://translate.googleusercontent.com/translate_f

612.Supongamosquelosuesvalesunamatrizde101elementosquecontieneunalistademedidasde
unexperimentocientfico,quehasidodeclaradaporlasentencia
REALDIMENSION(50:50)::valores
EscribelasdeclaracionesFortranquecontarelnmerodevalorespositivos,valoresnegativosyvalores
ceroenlamatriz,yescribirunmensajequeresumecmoseencontraronmuchosdelosvaloresdecada
tipo.
613.EscribedeclaracionesFortranqueimprimircadaquintovalorenlosluesgamavadescritosenel
ejercicio12/06.Lasalidadeberaadoptarlaforma
valores(
50)xxx.xxxxva
xxx.xxxx
V
614.Productoescalar,A,Ulf!SISatenuarSBsioBalvsctorcochebismpmswredIFLmctaRgular
coordiBat!Sscomo
dondeV,eselcomponentedelvectorVenladireccinx,VYeselcomponentedelvectorVenla
direcciny,yVeselcomponentedelvectorVenel'7direccinTalvectorpuedeseralmacenadoenun
rango1lmayquecontienetreselementos,yaquehaytresdimensionesenelsistemadecoordenadasLa
mismaideaseaplicaaunvectordendimensionalUnvectordendimensionalpuedeseralmacenadoen
unamatrizderango1quecontienenelementos.EstaeslaraznWBYrango1matricessonaveces
llamadosvectores
6.lntroduccinalasmatrices!TextoLoscientficosMcGrawHillyEmpresas.2008Ingenieros,
TerceraEdicin
[Chapman:Fortran95/2003para
302CAPTULO6:Introduccinalasmatrices
Unaoperacinmatemticacomnentredosvectoreseselproductoescalar.Elproductoescalardedos
vectoresV1j+V,1kyV2j+Vskes
=V,2i+V52
=V"i+V51
unacantidadescalardefinidaporlaecuacin
EscribaunprogramaFortranqueleerdosvectoresV1yV2endosanaysunidimensionalesenla
memoriadelordenador,yluegocalcularsuproductoescalardeacuerdoconlaecuacindada
anteriormente.PonapruebatuprogramacalculandoelproductoescalardelosvectoresV1=Si3j
+2kANDV=2i+3+4k.
615.CorrientequesesuministraToanobjetoSiunobjetoestsiendoempujadoporunavelocidadata
https://translate.googleusercontent.com/translate_f

102/104

12/1/2015

https://translate.googleusercontent.com/translate_f

fuerzaFv(Figura620),entonceselpodersupphedalobjetoporlafuerzaestdadaportfieequatwn
porsegundo,yelpoderPissemideenvatios.UtiliceelprogramaFortranescritoenelejercicio06.14
paracalcularlapotenciasuministradaporunafuerzaOFF=4i+3j2Knewtonsaunobjetoquese
mueveconunavelocidaddev=4i2j+1kmetrosporsegundo.
616.CruzProductoOtraoperacinmatemticacomnentredosvectoreseselproductovectorial.El
productovectorialdedosvectoresVI=VXLi+j+vyjVkyv2=vx2i+vl2j+v2kesunacantidad
vectorialdefinidaporlaecuacin.
EscribaunprogramaFortranqueleerdosvectoresV1yV2enmatricesenlamemoriadelordenador.y
luegocalcularsuproductotransversaldeacuerdoconlaecuacindadaanteriormente.Ponapruebatu
programamedianteelclculodelproductovectorialdelosvectoresV1=Si3j+2ky
=2i+3j+4k.
V2
617.VelocnydeunOrbnmgObjetoLavelocidadangularwvectordeunobjetoquesemueveconuna
velocidadvatadistanciardesdeelorigendelsistemadecoordenadas(Figura621)es
vRXW
dondereselmmetrosd1stance,Westfieangularveloc1tymradianesporsegundo,yelVISla
velocidadenmetrosporsegundo.SiladistanciadesdeelcentrodelaToantierrarbitamgsatelhteesR
300.000+400.000j+50,000kmetros,yveloc1tytfieangularde
UnafuerzaFaplicadaToanobjetoquesemueveconvelocidadv.
fChapman:Fortran95/20036.lntroductionalasmatricesdelTextoTheMcGrawHillpara
CientficosyCompan1es,2008Ingenieros,terceraedicin
Introduccinalasmatrices
303
FIGURA621
Velocidaddeunobjetoenrbita
elsatliteesr.>=6XJ03+2XJQ3j9XJ04kradianesporsegundoloisthevelocidaddelsatlite
enmetrosporsegundo?Utiliceelprogramaescritoenelanterior
618.ProgramadesenelEjemplo64secomportarincorrectamentesiunusuariointroduceunvalorno
vlidoenelconjuntodedatosdeentrada.Porejemplo,sielusuariointroduceloscaracteres1.oenvezde
1.Oenunalnea,entoncesladeclaracinLEERdevolverunestadodistintodeceroparaesalnea.Esto
nonulo
estadosermalinterpretadocomoelfinaldelconjuntodedatos,yseprocesanslounapartedelosdatos
deentrada.Modifiqueelprogramaparaprotegercontralosvaloresnovlidosenelarchivodedatosde
entrada.Sielvalorabadseencuentraenelarchivodedatosdeentrada,elprogramadebemostrarel
nmerodelalneaquecontieneelmaldeprecio,ysaltar.Elprogramadebeprocesartodos
https://translate.googleusercontent.com/translate_f

103/104

12/1/2015

https://translate.googleusercontent.com/translate_f

losbuenosvaloresenelarchivo,inclusolosquedespusdevalorAbad.
619.Enconjuntod1eury,D1EUNIUNufTWUconjuntoseslistacheuftodosloselementosque
apareceneneizher(oambos)delosconjuntos,ylainterseccindelosdosconjuntoseslalistadetodos
loselementosqueaparecenenslodossets.Porejemplo,siunoSerAconsistedeloselementos
yunsegundoconjuntoBsecomponedeloselementos
SER{120589]
entonceslaunindelosdosconjuntossera
AUBE{1o2356789}
ylainterseccindelosdosconjuntossera
AnBE{25}
Escribirunprogramaqueleaendosseriesdenmerosenterosquerepresentanloselementosdedos
conjuntosdedosfllesmputespecificadosporelusuariodlfferent,ycalcularUmontfie6othytfie
111tersectiondelosdosconjuntos.Utilizarmatricesparacontenerlosconjuntosdeentrada,ytambin
paraconstruirtantolaUmonyla111tersect10n.Notatfiatlosconjuntos111putnopuedenserordenados
111orden,porloquesualgoritmodebetrabajarindependientementedelordenenelqueestablecenlos
elementosseintroducen.
OfChapman:Fortran95/20036.lntroductionaarrays!TextoTheMcGrawHillparaCientficosy
Empresas.2008Ingenieros,TerceraEdicin
304CAPTULO6:Introduccinalasmatrices
PonapruebatuprogramaendosarchivosdenominadosenPuta.datyen.dat,quecontienelossiguientes
caracteresdosconjuntos:
InputAarchivo.dat:O,1,3,5,11,6,8,11,17,15ArchivoenputB.dat:O,1,3,7,6,16,5,12,21
620.LaubicacindecualquierpuntoPenunespaciodetresdimensionespuedeserrepresentadoporun
conjuntode
tresvalores(x,y,z),dondexesladistanciaalolargodelejexhastaelpunto,yesladistanciaalolargo
delejeyhastaelpunto,yzesladistanciaalolargodelejezalpunto.As,unpuntopuedeser
representadoporunvectordetreselememquecontienelosvaloresx,y,yz.SidospuntosP1yP2estn
representadosporlosvalores(xl'Ypz1)y(x2,y2,z2),entoncesladistanciaentrelospuntosP1yP2
puedecalcularseapartirdelaecuacin
distancia=J(x2x)2+(yY2)2+(zZ2)2
EscribaunprogramaFortranToreadendospuntos(x1,il'z1)y(x2,y2,z2),yparacalcularladistancia
entreellos.Ponapruebatuprogramamedianteelclculodeladistanciaentrelospuntos(1,4,6)y(1,5
2,).

https://translate.googleusercontent.com/translate_f

104/104

You might also like