Professional Documents
Culture Documents
INTEGRANTES:
JAVIER MACAS
MARJURIE CALLE
YAHAIRA ESCOBAR
DAVID TENELEMA
ALEXIS TIPAGUANO
GOTO
Interaccin de:
GOTO dentro de otras estructuras de control
De modo general GOTO tiene otro enemigo, y es que cuando opera dentro de otra estructura
de control que guarda punteros en la pila, si hay una sentencia GOTO que sale de la
estructura de control, fuerza a que se vace la pila con los punteros de retorno que mantena
la estructura. Esto requiere un chequeo constante de la sentencia GOTO en busca de si
aparece o no dentro de una estructura de control (Vase la seccin donde se compara
GOTO con otras estructuras de control, ms adelante en este mismo artculo), para
determinar si debe o no retirar de la pila un puntero al que aparentemente no se retornar ya.
Una razn para salir de una estructura de control usando GOTO, es que dicha estructura no
provea otro mecanismo de salida que llegar al final del bloque de sentencias que contiene la
estructura, por lo que los diversos lenguajes han provisto una salida alternativa que
solucione la operacin que realiza GOTO en dichos casos y a su vez no requiere la
verificacin que se haca precisa para cada GOTO, tpicamente las sentencias de escape
alternativas se han dado en llamar:
Para las estructura de control que no requieren punto de retorno. Exit flujo donde flujo es la
estructura de control, tales como DO, FOR, etc...
Para la estructuras de control que requieren un punto de retorno, RETURN, tales como
GOSUB, FUNCTION, etc..
Las sentencias EXIT, todava estn limitadas respecto de GOTO, pues EXIT siempre devuelve a la siguiente
instruccin al final de la estructura de control.
Puede darse el caso en algunos lenguajes, que la ejecucin de la sentencia GOTO no conlleve aparejado
comprobar si salta fuera de una estructura de control y consecuentemente no elimine de la pila el puntero de
retorno que se coloc al entrar a la rutina en dicho caso, a efectos del programa el control sigue dentro de dicha
estructura y sigue esperando que alcance el final para volver al punto de retorno y vaciar la pila del valor de
retorno, como esto ya no va a ocurrir, se est perdiendo espacio de pila con cada situacin de este tipo. Tambin
podra darse el caso si algn lenguaje olvida aportar solucin que al ir entregando desde la pila los sucsivos
retornos, se apunte a un lugar diferente de la que el programador esperaba, por la cascada de entradas fue una
y la cascada de salidas debiendo ser en orden inversa conserva una salida que nunca se va a producir,
falsificando con ello todas las devoluciones anteriores a esa que se ha quedado perdida por la instruccin goto.
Un modo en que algunos lenguajes solventan este problema es utilizando una pila exclusivamente local y
eliminarla cuando se sale del procedimiento local, en dicho caso la direccin de retorno se guarda en una pila de
mbito mayor. Si hay punteros remanentes en la pila local no devueltos no producirn errores en cascada hacia
atrs.
En situaciones as es difcil seguir la pista de saltos esperada respecto de la que el programador pretendiera
hacer si no se comporta como l esperaba. Tambin de este modo es posible hacer que el cdigo se comporte
de una forma que el lenguaje no tena previsto en su diseo y aprovechar con ello una posible situacin
eficiente, para realizar determinadas tareas.
Adicionalmente para solventar los posibles problemas que el inadecuado uso de GOTO pueda originar, los
lenguajes de alto nivel y que utilizan programacin mediante bloques y mdulos bien definidos y aislados, no
permiten sobre GOTO ms que operar dentro del bloque o mdulo donde se aloja. Un caso tpico son las
modernas funciones FUNCTION, PROPERTY, etc... donde si bien un GOTO puede aparecer, no puede
direccionar a un punto dentro de otra FUNCTION. No confundir este aislamiento con encapsulamiento, aunque
la idea es la misma.
Caso de estructura de control donde el puntero de retorno se almacena en la sentencia final: este
suele ser DO...LOOP, loop es equivalente a un GOTO DO. En una seccin del artculo ms adelante,
se provee una implementacin de la estructura de control DO...LOOP usando GOTO, que ayudar
a entender este caso. En este caso por tanto saltar dentro de un estructura DO..LOOP no
proporcionar un error si se llega a la sentencia final. (ver seccin anterior). El puntero de retorno
de esta estructura siempre apunta al principio de la estructura, es por esto que no necesita
mantenerlo en la pila t resulta suficiente con dejarlo en la sentencia final.
Otro caso de estructura de control que el puntero de retorno se almacena en la sentecia final, pero
que si da errores: un caso de este tipo suele ser FOR...NEXT. La estructura FOR se compone de 3
secciones operativas, en la primera se inicializan los valores del bucle, en la 2 se produce el
incremento de los valores que controlan el bucle y en la 3 seccin est el bloque de sentencias
que se ha de repetir. Si una sentencia GOTO lleva el flujo dentro de un bucle FOR, cuando se
alcanza la sentencia NEXT esta sabe localizar el retorno hacia la 2 seccin (en este sentido se
comporta como DO...LOOP, (NEXT equivale a GOTO 2 Seccion) pero al tratar de incrementar el
bucle descubre que las variables que necesita el bucle no han sido inicializadas, por lo que
produce un error de forma indirecta. Un bucle FOR utiliza 4 variables internamente para su propio
control, una variable contador que es la que se ir incrementando, 3 variables o constantes que
asigna el valor inicial,final y cantidad de incremento respectivamente.
Caso de estructura de control que el puntero de retorno se almacena en la pila: El caso de este tipo
suele ser GOSUB. Cada vez que se ejecuta una sentencia GOSUB (FUNCTION, etc...) se guarda
en la pila la direccin de origen, y cada vez que se ejecuta la sentencia RETURN, se salta a la
ltima direccin contenida en la pila, es decir no existe un par asociado GOSUB...RETURN.
GOTO enva el flujo desde dentro de una estructura de control a otro punto dentro
En cualquier caso puede haber innumerables sentencias GOTO dentro de una
estructura de control, y recorrerla de forma arbitraria, sin que genere ningn error
excepto que se alcance (ejecute su turno) una sentencia de retorno que requiera un
puntero de retorno en la pila que no exista. como ya se coment, si existen valores en la
pila puede darse errores o no en base a si esa es la idea que persegua el programador
o no, ya que retornar el ltimo puntero que contenga la pila.
Comparacin entre GOTO y otras instrucciones de control del flujo
GOTO es incondicional, es decir ordena el salto de ejecucin del programa a una
direccin concreta. El salto se solicita porque se requiere que la ejecucin contine
desde all. La problemtica de esto resulta en que no resulta evidente el orden de
ejecucin.
Como se podr apreciar en las sucesivas comparaciones, GOTO puede implementar
todas las estructuras de control, su controversia no se deduce de su versatilidad, si no
de la enajenacin de claridad en que resulta su uso. Las estructuras de control de
lenguajes de alto nivel estn realizadas usando GOTO (tpicamente JMP, y sus
variantes en ensamblador).
GOTOXY
POSICIONA EL CURSOR EN LA VENTANA DEL TEXTO.
GOTOXY MUEVE EL CURSOR A LA POSICION DADA EN LA VENTANA DEL
TEXTO ACTUAL SI LAS CORDENADAS NO SON VALIDAS ENTONCES
LA FUNCION GOTOXY NO FUNCIONA
EL GOTOXY POSICIONA EL CURSOR EN AS CORDENADAS (X,Y)
OSEA:
X
Y
(COLUMNA ) (RENGLON)
(X HORIZONTAL ,Y VERTICAL )
GOTOXY (X;Y)
PARAMETRO
TIPO
NUMERICO
NUMERICO
DESCRIPCION
POSICION X(HORIZONTAL)
DEL CURSOR
POSICION Y (VERTICAL) DEL
CURSOR
GRACIAS