You are on page 1of 17

GOTO

INSTITUTO TEGNOLOGICO SUPERIOR COMPUSUR

INTEGRANTES:
JAVIER MACAS
MARJURIE CALLE
YAHAIRA ESCOBAR
DAVID TENELEMA
ALEXIS TIPAGUANO

GOTO

Saltar a: navegacin, bsqueda


Se pueden encontrar tambin variaciones de la instruccin GOTO. En
BASIC, la instruccin ON GOTO puede seleccionar de una lista de
diferentes puntos del programa a los que saltar. Podra ser interpretado
como un antecesor de la instruccin switch/case. Tambin, en FORTRAN
y algunas versiones de BASIC la lnea a la que saltar poda ser indicada
mediante una expresin aritmtica. Esto ltimo era evitado ya que el
cdigo se haca an ms ilegible teniendo en cuenta la necesidad de
hacer los clculos de la expresin de control para saber el destino del flujo
del programa.

Controversia sobre el uso de GOTO

A diferencia de la llamada a una funcin, no se requiere ningn tipo de preparacin o estructura de


cdigo para utilizar un GOTO. Como resultado, es ms sencillo obtener cdigo inconsistente,
incompleto o complicado de mantener. Justamente por ello en los aos 60 y 70, cuando surgi la
programacin estructurada, la comunidad informtica se expres a favor de otras instrucciones de
control (if bucles for y do/while) en lugar de GOTO.
Tal creencia est tan arraigada que el GOTO es muy criticado por los dedicados a la enseanza de
la programacin, que lo suelen desaconsejar. Por el otro lado, algunos que si bien admiten el uso
de un GOTO como una prctica desaconsejable, reconocen que ste es la mejor opcin para
algunas pocas tareas puntuales en algunos lenguajes de programacin (manejo de excepciones
por ejemplo). Adems, por lo general se programan macros o equivalentes para evitar la utilizacin
de GOTO.
Una crtica famosa a la instruccin en cuestin es una carta redactada por Edsger Dijkstra llamada
"Go To Statement Considered Harmful" (Instruccin Go To Considerada Daina). En ella Dijkstra
argumenta que el uso irrestricto de GOTO debera ser prohibido en lenguajes de alto nivel ya que
dificultan el anlisis y la verificacin de la correccin de los programas (especialmente aquellos que
contienen ciclos). Por el otro lado, Donald Knuth en su libro "Structured Programming with goto
Statements" (Programacin estructurada con instrucciones Goto), tiene en cuenta ciertas
situaciones en las que se utilizara GOTO. Por lo general, se trata de situaciones en las que una
estructura de programacin en particular no est disponible y GOTO puede simularla
eficientemente.

Interaccin de:
GOTO dentro de otras estructuras de control

La sentencia GOTO, no slo puede aparecer a lo largo del listado de


instrucciones de un programa, sino que incluso puede enviar el flujo
dentro de una estructura de control o fuera de la misma.
Es patente, la complejidad de entender un cdigo cuyas estructuras de
control lo estuvieran tambin cruzadas por sentencias GOTO. Si bien el
uso de GOTO puede hacer posible situaciones de las que un lenguaje
carece, el uso indiscriminado de stas haran a un cdigo muy difcil de
entender y mantener.
Esto deriva en circunstancias especiales que se consideran a
continuacin:

GOTO enva del flujo fuera de una


estructura 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.

GOTO enva el flujo dentro de una estructura de control


Sucede de otra forma cuando un salto por GOTO nos introduce dentro de una
estructura de control. Si hay instrucciones tras la etiqueta a la que se salta, stas se
ejecutan correctamente, pero al llegar a una instruccin del final, si la pila est vaca
(cuando la estructura de control requiere un puntero de retorno), ocurre un error que
segn el lenguaje vara, y si la pila no est vaca salta a la direccin que seala el ltimo
puntero en la pila, puede considerarse un error si no era lo que persegua el
programador, toda vez que dicho puntero no fue almacenado por dicha estructura
decontrol en la que se halla sino por la previa.
Esto slo sucede en aquellas estructuras de control que guardan algn puntero de
retorno en la pila, por ejemplo nunca ocurrir un error dentro de una estructura
IF...THEN, ni dentro de una estructura SELECT CASE (Switch), ni DO...LOOP ya que
dichas estructuras al no tener al final un punto de retorno, no necesitan almacenar en la
pila dicho punto de retorno.
Normalmente, es el caso que en los lenguajes, la ejecucin de la sentencia GOTO no
conlleva aparejado comprobar si salta dentro de una estructura de control, ya que en
principio no debe generar errores aunque tenga un puntero de retorno siempre que este
puntero est localizado en la sentencia de salida en vez de en la pila.
Se detallan, comentados 3 casos comunes:

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 )

LA PANTALLA DE C++, TIENE 24 RENGLONES Y 80


COLUMNAS, POR LO QUE LOS VALORES QUE LE
PONGAMOS A NUESTRO GOTOXY NO DEBERN PASAR
DE ESOS VALORES.

UN EJEMPLO DE ESTOS PODRIA SER:


GOTOXY(40,30)
EN NINGUN MOMENTO EL ARGUMENTO DE GOTOXY PUEDE SER
CERO.
NOTA: NO USE ESTA FUNCION PARA WIN325 O WIN32 O
APLICACIONES DE GUI.

GOTOXY (X;Y)
PARAMETRO

TIPO
NUMERICO
NUMERICO

DESCRIPCION
POSICION X(HORIZONTAL)
DEL CURSOR
POSICION Y (VERTICAL) DEL
CURSOR

GRACIAS

You might also like