You are on page 1of 9

Capitulo 4

4- La divisin PROCEDURE. Introduccin.


La DIVISIN DE PROCEDIMIENTOS indica la secuencia de operaciones necesarias, sentencias COBOL, para resolver un pro le!a dado" El #or!ato $eneral para esta divisi%n es el si$uiente& 'SIN( PROCED'RE DIVISION C)*ININ( -DECL*R*TIVES" 0No! re de Secci%n SECTION -nu!ero+se$!ento/"-sentencia 'SE/" -No! re de p1rra#o" -sentencia/ """/"""2""" END DECL*R*TIV*S" / 0No! re de Secci%n SECTION -nu!ero+se$!ento/"-sentencia 'SE/" -No! re de p1rra#o" -sentencia/ """/"""2""" La cl1usula 'SIN( se especi#ica sola!ente en pro$ra!as 3ue lue$o son lla!ados 4C*LL5 o enla6ados 4C)*IN5" La sentencia 'SE cuando es e7ecutada la secci%n" Co!o las otras divisiones, la PROCED'RE DIVISION, puede ser dividida en secciones 8 estas a su ve6 en p1rra#os" Cada p1rra#o $eneral!ente a$rupar1 varias sentencias" La divisi%n en secciones es opcional 8 es poco utili6ada, en ca! io la divisi%n en p1rra#os es #recuente" Opcional!ente la PROCED'RE DIVISION puede contener secciones DECL*R*TIV*S" En caso de utili6arlas, estas de en ser las pri!eras en de#inirse" Su #inalidad es el trata!iento de errores" no! re de dato+, -no! re de dato+./"""/"

Sentencias bsicas
Visuali ar datos. DISPL!". Esta secuencia per!ite visuali6ar datos por pantalla o i!pri!irlos directa!ente en la i!presora" Su #or!ato es el si$uiente& 9or!ato ,& no! re de datos DISPL*: literal -;IT) NO *DV*NCIN(/ El no! re !ne!%nico de e ser un no! re asociado a un no! re de #unci%n, no! re reconocido por el co!pilador en el p1rra#o SPECI*L+N*MES" El literal puede ser una constante #i$urativa, e<cepto *LL, una constante de caracteres o un literal nu!=rico" La opci%n NO *DV*NCIN( >ace 3ue el cursor no avance de l?nea, una ve6 3ue se >a e7ecutado la sentencia DISPL*:" literal no! re de datos 'PON no! re de #unci%n no! re ne!onico

,H

Cuando utili6a!os la cl1usula 'PON, el no! re si! %lico de e declararse en el p1rra#o SPECI*L+N*MES" Si en lu$ar de utili6ar un no! re !ne!%nico utili6a!os un no! re de #unci%n el resultado es el !is!o" 9or!ato .&
no! re de datos+, DISPL*: literal+, *T LINE N'MBER entero+, COL no! re de datos+. COL'MN N'MBER entero+. no! re de datos+A

- 'PON CRT / - MODE IS BLOC@ / - ;IT) opciones /

Los ca!pos ele!entales de en tener co!o 'S*(E, DISPL*:" La cl1usula *T da la posici%n de pantalla donde va a co!en6ar la operaci%n de escritura" pantalla" La #rase 'PON CRT, es la opci%n por de#ecto e indica visuali6ar los datos indicados por

La #rase MODE IS BLOC@ >a8 3ue especi#icarla cuando no! re de datos+, corresponde a un ca!po co!puesto 8 para 3ue los datos ele!entales no! rados con 9ILLER sean tenidos en cuenta" Esto es, no! re de datos+, es considerado co!o un ca!po ele!ental" Si no se especi#ica no! re de datos+, o literal+,, DISPL*:, sin !as !ueve el cursor a la posici%n indicada" Si no! re de datos+, es una constante #i$urativa, tiene un e#ecto especial 3ue indica!os a continuaci%n& SP*CE Li!pia la pantalla desde la posici%n del cursor especi#icada, >asta el #inal de la !is!a" LO;+V*L'E Mueve el cursor a la posici%n especi#icada" *LL BCD,C Li!pia desde la posici%n del cursor especi#icada, >asta el #inal de la l?nea" *LL BCD.C Li!pia toda la pantalla" *LL BCDEC Suena, env?a un pitido" Opciones. BELL o BEEP BLIN@ )I()LI(T) REVERSE+VIDEO
No! re de datos SIFE IS entero

'NDERLINE 9ORE(RO'ND+COLOR IS entero B*C@(RO'ND+COLOR IS entero BL*N@ SCREEN BL*N@ LINE

Esta cl1usula e!ite un sonido cada ve6 3ue DISPL*: es e7ecutado" Esta cl1usula >ace parpadear el ele!ento visuali6ado" Esta cl1usula >ace 3ue el ele!ento visuali6ado apare6ca en alta intensidad Esta cl1usula >ace 3ue el ele!ento visuali6ado apare6ca en v?deo inverso" Esta cl1usula se utili6a con ca!pos ele!entales 8 especi#ica el ta!aGo del ca!po" Si el ta!aGo especi#icado es !enor 3ue el especi#icado en la cl1usula PIC, sola!ente aparecer1 la porci%n de la parte i63uierda 8 si el ta!aGo especi#icado es !as $rande se rellena con lancos" Esta cl1usula >ace 3ue el ele!ento visuali6ado apare6ca su ra8ado" Esta cl1usula especi#ica el color en el 3ue es visuali6ado el ele!ento" Entero es un valor entre D 8 E" Esta cl1usula especi#ica el color de #ondo so re el 3ue es visuali6ado el ele!ento" Entero es un valor entre D 8 E" Borra la pantalla" Borra una l?nea"

,I

Leer datos del teclado. !CCEP#. Esta sentencia per!ite asi$nar a uno o !as ca!pos de datos" Valores desde el teclado" Su #or!ato es el si$uiente& *CCEPT no! re de datos 9ROM D*TE D*: TIME

TIME"

Esta sentencia per!ite asi$nar a nombre de datos el valor de las constantes D*TE, D*: 8 El contenido de estas constantes es&

D*TE es una constante de seis ci#ras de la #or!a **MMDD, donde ** son las dos ulti!as ci#ras del aGo, MM es el !es 8 DD es el d?a" D*: es una constante de cinco ci#ras de la #or!a **NNN, donde ** son las dos ulti!as del aGo 8 NNN es el d?a del aGo" TIME es una constante de H ci#ras ))MMSSCC, donde )) es la >ora 4DD"".A5, MM son los !inutos, SS son los se$undos 8 CC son las cent=si!as de se$undo" 9or!ato .& no! re+ne!onico *CCEPT no! re de datos 9ROM no! re de #uncion El nombre mnemnico de e ser un no! re asociado a un nombre de funcin , no! re reconocido por el co!pilador, en el p1rra#o SPECI*L+N*MES" 9or!ato A&
no! re de datos+. *CCEPT no! re de datos+, *T LINE N'MBER entero+, EBCEPTION -9ROM CRT/ -MODE IS BLOC@/ -;IT)opciones/ EBCEPTION NOT ON ESC*PE sentencia+. -END+*CCEPT/ ON ESC*PE sentencia+, COL COL'MN N'MBER entero+. no! re de datos+A

'na sentencia *CCEPT es tratada a7o este #or!ato si va se$uida de al$una de las cl1usulas *T, 'PON, MODE o ;IT), sin es considerada co!o una sentencia *CCEPT est1ndar 4*NSI5 vista anterior!ente" Los ca!pos ele!entales en nombre de datos-1 de en tener una 'S*(E DISPL*:" La cl1usula *T da la posici%n de pantalla donde va a co!en6ar la operaci%n de lectura" Si no se especi#ica, se supone la l?nea ,, colu!na ," Las cl1usulas LINE 8 COL pueden aparecer en cual3uier orden 8 sirven para especi#icar la l?nea 8 la colu!na respectiva!ente, donde va a co!en6ar la lectura" El nu!ero de l?nea viene especi#icado por nombre de datos-2 o por entero-1 8 el nu!ero de colu!na por nombre de datos-3 o por entero-3. La #rase 'PON CRT, es la opci%n por de#ecto e indica aceptar el dato indicado por la consola" Si nombre de datos-1 corresponde a un ca!po co!puesto, 8 la #rase MODE IS BLOC@ no se >a especi#icado, entonces los ca!pos ele!entales correspondientes 3ue no sean 9ILLER son aceptados en el orden 3ue est1n especi#icados 8 separados por un nu!ero de espacios en lanco i$ual a la lon$itud

.D del ca!po 9ILLER correspondiente" Si esta #rase se especi#ica entonces nombre de datos-1 es considerado co!o un ca!po ele!ental" Opciones: BELL o BEEP BLIN@ )I()LI()T REVERSE+VIDEO
no! re de datos SIFE IS entero

'NDERLINE 9ORE(RO'ND+COLOR IS entero B*C@(RO'ND+COLOR IS entero


no! re de datos PROMPT C)*R*CTER IS literal

*'TO 9'LL o LEN(T)+C)EC@ REJ'IRED o EMPT:+C)EC@ SEC'RE o NO+EC)O 'PD*TE RI()T+K'STI9:

esta cl1usula e!ite un sonido cada ve6 3ue *CCEPT es e7ecutado" Esta cl1usula >ace parpadear el ele!ento aceptado" Esta cl1usula >ace 3ue el ele!ento aceptado apare6ca en alta intensidad" Esta cl1usula >ace 3ue el ele!ento aceptado apare6ca en v?deo inverso" Esta cl1usula se utili6a con ca!pos ele!entales 8 especi#ica el ta!aGo del ca!po" Si el ta!aGo especi#icado es !enor 3ue el especi#icado en la cl1usula PIC, prevalece el ta!aGo especi#icado por la cl1usula SIFE 8 si el ta!aGo es !as $rande prevalece el especi#icado por la cl1usula PIC" Esta cl1usula >ace 3ue el ele!ento aceptado apare6ca su ra8ado" Especi#ica el color en el 3ue se escri e el ele!ento aceptado" Especi#ica el color de #ondo so re el 3ue se escri e el ele!ento aceptado Esta cl1usula !arca so re la pantalla con el car1cter especi#icado, los posiciones vac?as !ientras se e7ecuta la operaci%n *CCEPT" PROMPT sin car1cter utili6a el car1cter por de#ecto 4car1cter de su ra8ado5" Esta cl1usula ter!ina auto!1tica!ente un operaci%n *CCEPT cuando se tecla el ulti!o car1cter" Esta cl1usula o li$a a de7ar el ca!po co!pleta!ente vac?o o co!pleta!ente lleno" Esta cl1usula o li$a a no de7ar el ca!po co!pleta!ente vac?o" Esta cl1usula i!pide 3ue los caracteres tecleados apare6can en la pantalla" Esta cl1usula per!ite visuali6ar el contenido del ca!po antes de e#ectuar la entrada" Esta cl1usula a7usta el contenido de un ca!po nu!=rico editado o no editado, a la derec>a una ve6 3ue se #inali6a *CCEPT" Para ello es necesario 3ue se especi#i3ue si!ult1nea!ente la cl1usula SIFE"

Si se especi#ica la #rase ON EBCEPTION 8 la operaci%n *CCEPT no ter!ina satis#actoria!ente, se e7ecuta sentencia+,, 3ue es una sentencia i!perativa 4no condicional5" Si se especi#ica la #rase NOT ON EBCEPTION 8 la operaci%n *CCEPT ter!ina satis#actoria!ente, se e7ecuta la sentencia+., 3ue es ta! i=n una sentencia i!perativa" Opcional!ente se puede utili6ar la #rase END+*CCEPT la cual deli!ita el 1! ito del *CCEPT" $ovi%ientos de datos. $OVE& Esta sentencia per!ite trans#erir datos de un ca!po de !e!oria a otro o a otros" Su #or!ato es el 3ue si$ue& 9or!ato ,& no! re dato+, MOVE TO no! re dato+. -no! re dato+A/ literal Los datos contenidos en el ca!po no! re dato+, o en el literal son !ovidos al ca!po no! re datos+." Despu=s de reali6arse esta operaci%n de !over, los dos ca!pos contendr1n los !is!os datos"

., Si a continuaci%n de la cl1usula TO especi#ica!os !as de un ca!po, el contenido del ca!po no! re dato+, se !ueva a todos ellos" 'or%as (ara su utili acin. En la trans#erencia de un ca!po ele!ental a otro ele!ental se pueden presentar los dos casos si$uientes" ,+ Movi!iento de un ca!po nu!=rico a otro nu!=rico 4no de edici%n o de edici%n5" En este caso los ca!pos ori$en 8 receptor se alinean por el punto deci!al" Si el ta!aGo del ca!po receptor es !enor 3ue el ta!aGo del ca!po e!isor, se produce un trunca!iento de la parte entera 8Lo deci!al" En caso contrario, se rellena con ceros no si$ni#icativos cual3uiera de las partes" En caso de 3ue el ca!po receptor sea de edici%n, se si$uen las !is!as re$las e<puestas para la cl1usula PICT'RE" .+ Movi!iento de un ca!po de cual3uier tipo a otro de tipo al#a =tico o al#anu!=rico" 4No de edici%n o de edici%n5" En este caso el contenido del ca!po e!isor se va colocando en el ca!po receptor de i63uierda a derec>a, e<cepto cuando en el ca!po receptor se >a8a declarado la cl1usula K'STI9IED RI(T), en cu8o caso, el contenido ser1 colocado de derec>a a i63uierda" Si el ta!aGo del ca!po receptor es !enor 3ue el ca!po e!isor se produce trunca!iento" En caso contrario se rellena con espacios en lanco" Si el ca!po receptor es de edici%n, se si$uen las !is!as re$las e<puestas para la cl1usula PICT'RE" En la trans#erencia de un ca!po co!puesto se puede reali6ar de dos #or!as& ,+ Co!o un ca!po ele!ental, cu8a lon$itud es la su!a de los ca!pos ele!entales 3ue lo #or!an" En este caso el ca!po receptor es considerado co!o un ca!po ele!ental al#anu!=rico" .+ Moviendo los ca!pos ele!entales uno a uno" 9or!ato .& MOVE CORRESPONDIN( CORR Cuando se utili6a esta cl1usula todos los ca!pos tienen 3ue ser co!puestos" 'tili6ando la cl1usula CORR con la sentencia MOVE, es posi le !over un nu!ero varia le de ca!pos ele!entales pertenecientes a no! re dato+, a no! re dato+. 3ue ten$an el !is!o no! re" Los ca!pos con i$ual no! re tienen 3ue ocupar la !is!a posici%n 7er1r3uica en a! os ca!pos co!puestos" Si los ca!pos ele!entales pertenecen a su $rupos del ca!po co!puesto, los no! res de estos su $rupos tienen ta! i=n 3ue coincidir en a! os ca!pos co!puestos" Sentencia de asi)nacin. CO$PU#E. Esta sentencia per!ite asi$nar a uno o !as ca!pos, el valor de un literal nu!=rico, de otro ca!po nu!=rico o de una e<presi%n arit!=tica" Su #or!ato es el si$uiente" COMP'TE no! re dato+, -RO'NDED/ -no! re dato+. -RO'NDED// M no! re dato+A literal nu!erico e<presion arit!etica no! re dato+, TO no! re dato+.

-ON SIFE ERROR sentencia+,/ -NOT ON SIFE ERROR sentencia+./ -END+COMP'TE/

..

Sentencia+, 8 sentencia+. son sentencias no condicionales 4sentencias i!perativas5" La #rase END+COMP'TE solo puede ser utili6ada con la #rase SIFE ERROR" Opcin ROUNDED. Esta opci%n, 3ue si$ue al no! re del ca!po 3ue de er1 contener el resultado, per!ite redondear dic>o resultado" Este redondeo consiste en aGadir una unidad en la ci#ra !enos si$ni#icativa al!acenada, si la pri!era deci!al truncada es N o !a8or de N" Opcin ON SIZE ERROR. Durante la e7ecuci%n, se puede dar un resultado cu8o nu!ero de ci#ras enteras supere el ta!aGo de la parte entera del ca!po receptor" Esto produce un trunca!iento de las ci#ras !as si$ni#icativas del resultado" La opci%n ON SIFE ERROR, per!ite to!ar una deter!inada acci%n, si se produce este caso, e7ecutando la sentencia i!perativa escrita a continuaci%n de la !is!a" De esta #or!a se controla cual3uier ano!al?a 3ue pueda ocurrir en la e7ecuci%n de una operaci%n arit!=tica" 'n e7e!plo t?pico es la divisi%n por cero" Por el contrario, la sentencia i!perativa 3ue si$ue a la #rase NOT ON SIFE ERROR, se e7ecuta, si durante la e7ecuci%n de una operaci%n arit!=tica no ocurre nin$una ano!al?a"

Sentencia !DD Esta sentencia per!ite su!ar dos o !as operandos nu!=ricos 8 al!acenar el resultado en uno o varios ca!pos ele!entales" 9or!ato ,&
no! re dato+, *DD literal nu!erico -NOT ON SIFE ERROR sentencia+./ -END+*DD/ """ TO -no! re dato+. -RO'NDED// """ -ON SIFE ERROR sentencia+,/

Opcin TO. Esta opci%n >ace 3ue los valores de los operandos a su i63uierda sean aGadidos a los valores a su derec>a" Todos los operandos tienen 3ue ser nu!=ricos" La #rase END+*DD puede ser sola!ente utili6ada con la #rase SIFE ERROR" 9or!ato .&

.A

no! re dato+, *DD literal nu!erico

""" (IVIN(

-no! re dato+. -RO'NDED// """ -ON SIFE ERROR sentencia+,/

-NOT ON SIFE ERROR sentencia+./ -END+*DD/

Opcin GIVING. La su!a de los operandos 3ue preceden a la pala ra (IVIN(, pueden ser al!acenados en cada uno de los ca!pos 3ue si$uen a dic>a pala ra" Los ca!pos ele!entales 3ue est1n a continuaci%n de la pala ra (IVIN( pueden ser nu!=ricos o nu!=ricos editados" 9or!ato A&
CORRESPONDIN(

*DD

CORR

no! re dato+, TO no! re dato+. -RO'NDED/ -ON SIFE ERROR sentencia+,/

-NOT ON SIFE ERROR sentencia+./ -END+*DD/

Los ca!pos ele!entales de no! re dato+,, ser1n su!ados a los ca!pos de i$ual no! re de no! re dato+." El resultado 3ueda al!acenado en los ca!pos ele!entales de no! re dato+." Sentencia SU*#R!C#. La sentencia S'BTR*CT es utili6ada para restar un dato nu!=rico, o la su!a de dos o !as datos nu!=ricos, de uno o !as ca!pos de7ando el resultado en uno o !as ca!pos" 9or!ato ,& S'BTR*CT no! re dato+, literal -NOT ON SIFE ERROR sentencia+./ -END+S'BTR*CT/ Con este #or!ato, todos los operandos 3ue preceden a la pala ra 9ROM se su!an 8 el total es restado de no! re dato+., al!acenando el resultado en el !is!o ca!po, 8 repitiendo el proceso para el resto de los ca!pos 3ue si$uen a la pala ra 9ROM" 9or!ato .& S'BTR*CT no! re dato+, literal """ 9ROM no! re dato+. literal+. (IVIN( no! re dato+A -RO'NDED/ """ 9ROM -no! re dato+. RO'NDED/ -ON SIFE ERROR sentencia+,/

-ON SIFE ERROR sentencia+,/ -NOT ON SIFE ERROR sentencia+./ -END+S'BTR*CT/ Con este #or!ato, todos los operandos 3ue preceden a la pala ra 9ROM son su!ados 8 el total, es restado al valor actual de literal+. o de no! re dato+., al!acenando el resultado en los ca!pos 3ue si$uen a la pala ra (IVIN(" 9or!ato A& S'BTR*CT CORRESPONDIN( CORR -ON SIFE ERROR sentencia+,/ -NOT ON SIFE ERROR sentencia+./ -END+S'BTR*CT/ Cuando se utili6a este #or!ato los ca!pos ele!entales de no! re dato+, son restados de los correspondientes ca!pos ele!entales de no! re dato+." Sentencia $UL#IPL". no! re dato+, 9ROM no! re dato+. -RO'NDED/

.P La sentencia M'LTIPL: es utili6ada para !ultiplicar un dato nu!=rico por otro u otros datos nu!=ricos 8 de7ar el resultado en uno o !as ca!pos" 9or!ato ,& M'LTIPL: no! re dato+, literal -NOT ON SIFE ERROR sentencia+./ -END+M'LTIPL:/ Con este #or!ato, el operando 3ue precede a la pala ra B: se !ultiplica por el valor 3ue la si$ue, al!acenando el resultado en no! re dato+., 8 repitiendo el proceso para todos los ca!pos 3ue si$uen a B:" La #rase END+M'LTIPL: puede ser sola!ente utili6ada con la #rase SIFE ERROR" 9or!ato .& M'LTIPL: no! re dato+, literal B: no! re dato+. literal+. (IVIN( no! re dato+A -RO'NDED/ B: -no! re dato+. RO'NDED/ -ON SIFE ERROR sentencia+,/

-ON SIFE ERROR sentencia+,/ -NOT ON SIFE ERROR sentencia+./ -END+M'LTIPL:/ Con este #or!ato, el operando literal o no! re dato+, se !ultiplica por literal+. o no! re dato+ ., al!acenando los resultados en los ca!pos 3ue si$uen a la pala ra (IVIN(" Sentencia DIVIDE. La sentencia DIVIDE es utili6ada para dividir uno o !as datos nu!=ricos por otro 8 de7ar el resultado en uno o !as ca!pos" 9or!ato ,&
no! re dato+, DIVIDE literal INTO no! re dato+. -RO'NDED/ """ -ON SIFE ERROR sentencia+,/

-NOT ON SIFE ERROR sentencia+./ -END+DIVIDE/

Con este #or!ato, el operando 3ue precede a la pala ra INTO actOa co!o divisor del valor actual de no! re dato+., al!acenando el resultado en este !is!o ca!po, 8 repitiendo el proceso para el resto de los ca!pos 3ue si$uen a la pala ra INTO" La #rase END+DIVIDE puede ser utili6ada sola!ente en el caso de 3ue se especi#i3ue la #rase SIFE ERROR" 9or!ato .& no! re dato+, DIVIDE literal INTO literal+. no! re dato+. (IVIN( no! re dato+A -RO'NDED/

-ON SIFE ERROR sentencia+,/ -NOT ON SIFE ERROR sentencia+./ -END+DIVIDE/ Con este #or!ato el operando literal o no! re dato+, actOa co!o divisor de no! re dato+. o literal+., al!acenando el resultado en los ca!pos 3ue si$uen a la pala ra (IVIN(" 9or!ato A&

.N

no! re dato+, DIVIDE literal B:

no! re dato+. (IVIN( no! re dato+A literal+. -RO'NDED/

-ON SIFE ERROR sentencia+,/ -NOT ON SIFE ERROR sentencia+./ -END+DIVIDE/ Con este #or!ato el operando literal o no! re dato+, se dividen por el valor de literal+. o no! re dato+., al!acenando los resultados en los ca!pos 3ue si$uen a la pala ra (IVIN(" 9or!ato P& no! re dato+, DIVIDE literal INTO literal+. no! re dato+. (IVIN( no! re dato+A -RO'NDED/

REM*INDER no! re dato+P -ON SIFE ERROR sentencia+,/ -NOT ON SIFE ERROR sentencia+./ -END+DIVIDE/ Con este #or!ato el operando literal o no! re dato+, actOa co!o divisor de no! re dato+. o literal+., al!acenando el valor en los ca!pos 3ue si$uen a la pala ra (IVIN( 8 el resto de la divisi%n en el ca!po no! re dato+P" El resto puede ser entero o deci!al 8 se calcula restando del dividendo el producto del cociente por el divisor" El calculo del resto, no se tiene en cuenta el redondeo en caso de 3ue se >a8a especi#icado la cl1usula RO'NDED" 9or!ato N&
no! re dato+, DIVIDE literal B: literal+. no! re dato+. (IVIN( no! re dato+A -RO'NDED/ REM*INDER no! re dato+P

-ON SIFE ERROR sentencia+,/ -NOT ON SIFE ERROR sentencia+./ -END+DIVIDE/

Con este #or!ato el operando literal o no! re dato+, se divide por el valor actual de no! re dato+. o literal+., al!acenando el valor en los ca!pos 3ue si$uen a la pala ra (IVIN( 8 el resto de la divisi%n en el ca!po no! re dato+P" El resto puede ser entero o deci!al 8 se calcula restando del dividendo el producto del cociente por el divisor" El calculo del resto, no se tiene en cuenta el redondeo en caso de 3ue se >a8a especi#icado la cl1usula RO'NDED"