17
GOTO GOTO

Presentacion Goto

Embed Size (px)

DESCRIPTION

GOTO

Citation preview

Diapositiva 1

GOTO

GOTO1INSTITUTO TEGNOLOGICO SUPERIOR COMPUSUR

INTEGRANTES:

JAVIER MACAS MARJURIE CALLE YAHAIRA ESCOBAR DAVID TENELEMAALEXIS TIPAGUANO2Saltar 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. GOTO3A 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. Controversia sobre el uso de GOTO

4La 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:

Interaccin de: GOTO dentro de otras estructuras de control

5De 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..

GOTO enva del flujo fuera de una estructura de control

6Las 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.7GOTO enva el flujo dentro de una estructura de controlSucede 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:8Caso 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. 9GOTO enva el flujo desde dentro de una estructura de control a otro punto dentroEn 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 flujoGOTO 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).10GOTOXYPOSICIONA 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 FUNCIONAEL GOTOXY POSICIONA EL CURSOR EN AS CORDENADAS (X,Y)

OSEA:

X Y(COLUMNA ) (RENGLON)(X HORIZONTAL ,Y VERTICAL )11LA 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.

12UN 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 DESCRIPCIONX NUMERICO POSICION X(HORIZONTAL) DEL CURSORY NUMERICO POSICION Y (VERTICAL) DEL CURSOR

13

14

15

16GRACIAS17