13.07.2015 Views

Introducción a la Informática 2009 Tema Estructuras de ... - FaCENA

Introducción a la Informática 2009 Tema Estructuras de ... - FaCENA

Introducción a la Informática 2009 Tema Estructuras de ... - FaCENA

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Introducción</strong> a <strong>la</strong> <strong>Informática</strong> <strong>2009</strong><strong>Tema</strong>5El pseudocódigo <strong>de</strong> una estructura selectiva simple es <strong>la</strong> siguiente:SI ENTONCES< acción 1 >< acción 2 >< ... >< acción n >FIN-SIIF THEN< acción 1 >< acción 2< ... >< acción n >END-IFFormato Pascal:IF ( ) THENBEGIN< bloque_<strong>de</strong>_instrucciones_1 >END;Cabe resaltar <strong>la</strong> alineación en esta estructura. Nótese que <strong>la</strong>s líneas correspondientes a <strong>la</strong>sacciones se encuentran in<strong>de</strong>ntadas o sangradas respecto a <strong>la</strong>s pa<strong>la</strong>bras reservadas SI yFIN-SI. Es importante tenerlo en cuenta, dado que facilita <strong>la</strong> legibilidad <strong>de</strong>l código.Ejemplo: Dado el radio <strong>de</strong> una circunferencia, se<strong>de</strong>sea obtener su longitud y el área <strong>de</strong>l círculo que<strong>de</strong>termina, siempre que el radio sea mayor a 3.InicioALGORITMO LongitudAreaVARIABLESREAL: area = 0 // inicializaREAL: longitud = 0INICIOLEER radioSI radio > 3 ENTONCESarea = 3.141592 * radio * radiolongitud = 2 * (3.141592) * radioESCRIBIR radio, area, longitudFIN-SIFINradioradio > 3NOFinSIarea = 3.141592 * radio**2Longitud = 2 * 3.141592 * radioradio, area, longitudObsérvese que los cálculos correspondientes (conjunto <strong>de</strong> instrucciones), sólo se ejecutan sise cumple <strong>la</strong> condición, representada por <strong>la</strong> expresión lógica que incluye un operadormatemático.Licenciatura en Sistemas <strong>de</strong> Información –FACENA-UNNE Pág. 4


<strong>Introducción</strong> a <strong>la</strong> <strong>Informática</strong> <strong>2009</strong><strong>Tema</strong>5Alternativa DobleLa estructura condicional doble permite elegir entre dos opciones o alternativas posibles enfunción <strong>de</strong>l cumplimiento o no <strong>de</strong> una <strong>de</strong>terminada condición. Se representa <strong>de</strong> <strong>la</strong> siguienteforma:Diagrama <strong>de</strong> Flujo:NOCondiciónSITarea a realizar si<strong>la</strong> condición esfalsaTarea a realizar si<strong>la</strong> condición esverda<strong>de</strong>raPseudocódigo:SI ENTONCES< bloque_<strong>de</strong>_instrucciones_1 >SINO< bloque_<strong>de</strong>_instrucciones_2 >FIN-SIIF THEN< bloque_<strong>de</strong>_instrucciones_1 >ELSE< bloque_<strong>de</strong>_instrucciones_2 >END-IFFormato Pascal:IF ( ) THENBEGIN< bloque_<strong>de</strong>_instrucciones_1 >ENDELSEBEGIN< bloque_<strong>de</strong>_instrucciones_2 >END;A <strong>la</strong> <strong>de</strong> una instrucción alternativa doble también se le <strong>de</strong>nominacondición.Para que se ejecute elInicio, <strong>la</strong> condicióntiene que ser verda<strong>de</strong>ra. Por el contrario, si<strong>la</strong> condición es falsa, se ejecutará el.radioEn resumen, una instrucción alternativadoble (o simplemente alternativa doble)permite seleccionar, por medio <strong>de</strong> unacondición, el siguiente bloque <strong>de</strong>radio > 3SIinstrucciones a ejecutar, <strong>de</strong> entre dosNOposibles.area = 3.141592 * radio**2Nótese que, como en el caso <strong>de</strong> <strong>la</strong> estructuraalternativa simple, los bloques <strong>de</strong>instrucciones se encuentran in<strong>de</strong>ntados “Fuera <strong>de</strong> rango”respecto a <strong>la</strong>s pa<strong>la</strong>bras reservadas, dandoLongitud = 2 * 3.141592 * radiomayor c<strong>la</strong>ridad al código.Ejemplo: Dado el radio <strong>de</strong> unacircunferencia, se <strong>de</strong>sea obtener su longitudy el área <strong>de</strong>l círculo que <strong>de</strong>termina, siempreFinradio, area, longitudLicenciatura en Sistemas <strong>de</strong> Información –FACENA-UNNE Pág. 5


<strong>Introducción</strong> a <strong>la</strong> <strong>Informática</strong> <strong>2009</strong><strong>Tema</strong>5que el radio sea mayor a 3. Caso contrario, muestre en pantal<strong>la</strong> el mensaje “Fuera <strong>de</strong>rango”.ALGORITMO LongitudAreaVARIABLESREAL: area = 0REAL: longitud = 0INICIOLEER radioSI radio > 3 ENTONCESarea = 3.141592 * radio * radiolongitud = 2 * (3.141592) * radioESCRIBIR radio, area, longitudSINOESCRIBIR “Fuera <strong>de</strong> rango”FIN-SIFINAlternativa MúltipleCon frecuencia al diseñar un algoritmo ocurre que se necesitan más <strong>de</strong> dos alternativas. Sibien esta situación pue<strong>de</strong> resolverse con estructuras alternativas anidadas, como se verámás a<strong>de</strong><strong>la</strong>nte, esto resta legibilidad al código cuando <strong>la</strong>s alternativas son numerosas,a<strong>de</strong>más <strong>de</strong> ofrecer mayor posibilidad <strong>de</strong> cometer errores en <strong>la</strong> codificación.La estructura alternativa múltiple es una toma <strong>de</strong> <strong>de</strong>cisión especializada que permiteevaluar una expresión con n posibles resultados, y en base al resultado seleccionar elsiguiente bloque <strong>de</strong> instrucciones a ejecutar, <strong>de</strong> entre varios posibles.Las pa<strong>la</strong>bras reservadas(SWITCH, CASE, etc) utilizadaspara esta estructura, varía segúnel lenguaje <strong>de</strong> programación. Larepresentación es <strong>la</strong> siguiente:expresión SI-NODiagrama <strong>de</strong> Flujo:bloque <strong>de</strong>instrucciones-1bloque <strong>de</strong>instrucciones-2bloque <strong>de</strong>instrucciones-n+1Pseudocódigo:SEGUN-SEA : : ... : [ SINO : ]FIN-SEGUN-SEAFormato Pascal:CASE selector OF : ; : ;… : else END;Licenciatura en Sistemas <strong>de</strong> Información –FACENA-UNNE Pág. 6


<strong>Introducción</strong> a <strong>la</strong> <strong>Informática</strong> <strong>2009</strong><strong>Tema</strong>5Dependiendo <strong>de</strong>l valor obtenido al evaluar <strong>la</strong> expresión, se ejecutará un bloque <strong>de</strong>instrucciones u otro. En <strong>la</strong>s listas <strong>de</strong> valores se <strong>de</strong>ben escribir los valores que <strong>de</strong>terminan elbloque <strong>de</strong> instrucciones a ejecutar, teniendo en cuenta que un valor sólo pue<strong>de</strong> aparecer enuna lista <strong>de</strong> valores.Opcionalmente, se pue<strong>de</strong> escribir un <strong>de</strong>spués <strong>de</strong> SINO:.Este bloque <strong>de</strong> instrucciones se ejecutará en el caso <strong>de</strong> que el valor obtenido al evaluar <strong>la</strong>expresión, no se encuentre en ninguna <strong>de</strong> <strong>la</strong>s listas <strong>de</strong> valores especificadas.Funciona <strong>de</strong> <strong>la</strong> siguiente manera:• Se busca el valor <strong>de</strong> <strong>la</strong> expresión (también conocida como selector) en alguna <strong>de</strong> <strong>la</strong>slistas <strong>de</strong> valores• Si aparece, entonces se ejecuta <strong>la</strong> sentencia correspondiente• Si no aparece y hay una cláusu<strong>la</strong> ELSE entonces se ejecuta <strong>la</strong> sentencia que le sigue• Si no aparece y no hay ELSE entonces no se hace nadaEjemplo 1: Se quiere diseñar el algoritmo <strong>de</strong> un programa que pida por tec<strong>la</strong>do el número(dato entero) <strong>de</strong> un día <strong>de</strong> <strong>la</strong> semana, y luego muestre por pantal<strong>la</strong> el nombre (datoca<strong>de</strong>na) correspondiente a dicho día.Nota: Si el número <strong>de</strong> día introducido es menor que 1 ó mayor que 7, se mostrará elmensaje: "ERROR: Día incorrecto".En pantal<strong>la</strong> <strong>de</strong>be aparecer:Algoritmo propuesto:InicioDiaDia?1 2 3 SINO“Lunes”“Martes”“Miércoles”...“Error: DíaIncorrecto”FinLicenciatura en Sistemas <strong>de</strong> Información –FACENA-UNNE Pág. 7


<strong>Introducción</strong> a <strong>la</strong> <strong>Informática</strong> <strong>2009</strong><strong>Tema</strong>5ALGORITMO DiaDeLaSemanaVARIABLESENTERO: diaINICIOESCRIBIR "Introduzca día <strong>de</strong> <strong>la</strong> semana: "LEER diaSEGUN_SEA dia1 : ESCRIBIR "Lunes"2 : ESCRIBIR "Martes"3 : ESCRIBIR "Miércoles"4 : ESCRIBIR "Jueves"5 : ESCRIBIR "Viernes"6 : ESCRIBIR "Sábado"7 : ESCRIBIR "Domingo"SINO : ESCRIBIR "ERROR: Día incorrecto"FIN-SEGUN-SEAFIN<strong>Estructuras</strong> <strong>de</strong> <strong>de</strong>cisión anidadasSegún lo expresado, <strong>la</strong>s estructuras <strong>de</strong> <strong>de</strong>cisión simple y doble permiten seleccionar entredos alternativas posibles. Sin embargo, <strong>la</strong> instrucción SI-ENTONCES pue<strong>de</strong> ser utilizadatambién en casos <strong>de</strong> selección <strong>de</strong> más <strong>de</strong> dos alternativas. Esto es posible anidando estasinstrucciones. Es <strong>de</strong>cir, una estructura SI-ENTONCES pue<strong>de</strong> contener a otra, y esta a su veza otra. La representación en pseudocódigo es <strong>la</strong> siguiente:SI ENTONCES< sentencias_1 >SINOSI ENTONCES< sentencias_2 >SINOSI ENTONCES< sentencias_3 >SINO..FIN-SIFIN-SIFIN-SIIF THEN< sentencias_1 >ELSEIF THEN< sentencias_2 >ELSEIF THEN< sentencias_3 >ELSE..END-IFEND-IFEND-IFComo se pue<strong>de</strong> observar, el anidamiento <strong>de</strong> instrucciones alternativas permite ir<strong>de</strong>scartando valores hasta llegar al bloque <strong>de</strong> instrucciones que se <strong>de</strong>be ejecutar.En <strong>la</strong>s instrucciones IF anidadas, <strong>la</strong>s instrucciones ELSE y END-IF se aplicanautomáticamente a <strong>la</strong> instrucción IF anterior más próxima.A fin <strong>de</strong> que <strong>la</strong>s estructuras anidadas sean más fáciles <strong>de</strong> leer, es práctica habitual aplicarsangría al cuerpo <strong>de</strong> cada una.Ejemplo: Un sensor toma (lee) <strong>la</strong> temperatura ambiente y <strong>de</strong> acuerdo al rango en que seencuentre, <strong>de</strong>be emitir un mensaje. La esca<strong>la</strong> es <strong>la</strong> siguiente:Licenciatura en Sistemas <strong>de</strong> Información –FACENA-UNNE Pág. 8


<strong>Introducción</strong> a <strong>la</strong> <strong>Informática</strong> <strong>2009</strong><strong>Tema</strong>5Mayor que 100 “Temperatura muy alta – Malfuncionamiento”Entre 91 y 100 “Rango normal”Entre 51 y 90 “Bajo el rango normal”Menor que 50 “Muy frío – Apague el equipo”ALGORITMO SensorINICIOLEER temperaturaSI temperatura > 100 ENTONCESESCRIBIR “Temperatura muy alta – Malfuncionamiento”SINOSI temperatura > 90 ENTONCESESCRIBIR “Rango normal”SINOSI temperatura > 50 ENTONCESESCRIBIR “Bajo el rango normal”SINOESCRIBIR “Muy frío – Apague equipo”FIN-SIFIN-SIFIN-SIFINLa sentencia IR-A (go to)InicioTemperaturaTemperatura>100NOTemperatura>90NOTemperatura>50NO“Muy frío – apague elequipo”FinSISISI“Temperatura muyalta-Malfuncionamiento”“Rango normal”“Bajo el rango normal”La sentencia GO TO pertenece a un grupo <strong>de</strong> sentencias conocidas como sentencias <strong>de</strong>salto (jump). La característica <strong>de</strong> este grupo es hacer que el flujo <strong>de</strong> control salte a otraparte <strong>de</strong>l programa. Otras sentencias <strong>de</strong> este grupo son interrumpir o romper (BREAK),continuar (CONTINUE), volver (RETURN), <strong>la</strong>nzar (THROW). Las dos primeras se utilizangeneralmente con sentencias <strong>de</strong> alternativa múltiple. Para retornar <strong>de</strong> <strong>la</strong> ejecución <strong>de</strong>funciones o métodos se usa RETURN. La sentencia THROW se utiliza en los lenguajes <strong>de</strong>programación que poseen mecanismos <strong>de</strong> manipu<strong>la</strong>ción <strong>de</strong> excepciones, como Java, C++ yC#.La sentencia GO TO se utilizaba mucho en los primeros lenguajes <strong>de</strong> programación porqueera <strong>la</strong> única manera <strong>de</strong> saltar <strong>de</strong> una instrucción <strong>de</strong>l programa a otra.Esta instrucción consta <strong>de</strong> una sentencia IR_A y una sentencia asociada con una etiqueta.Cuando se ejecuta esta instrucción, se transfiere el control <strong>de</strong>l programa a <strong>la</strong> etiquetaasociada.La representación en pseudocódigo es <strong>la</strong> siguiente:INICIOBEGIN....IR_A etiqueta_1GOTO etiqueta_1....FINENDetiqueta_1:. // El flujo salta aquí.etiqueta_1:. // El flujo salta aquí.Licenciatura en Sistemas <strong>de</strong> Información –FACENA-UNNE Pág. 9


<strong>Introducción</strong> a <strong>la</strong> <strong>Informática</strong> <strong>2009</strong><strong>Tema</strong>5El efecto <strong>de</strong> esta instrucción es transferir sin condiciones el control <strong>de</strong>l programa a <strong>la</strong>etiqueta especificada. Es una <strong>de</strong> <strong>la</strong>s operaciones más primitivas para traspasar el control <strong>de</strong>una parte <strong>de</strong>l programa a otra. Sin embargo, su uso produce código inconsistente,incompleto o complicado <strong>de</strong> mantener. Justamente por ello en los años 60 y 70, cuandosurgió <strong>la</strong> programación estructurada, <strong>la</strong> comunidad informática se expresó a favor <strong>de</strong> otrassentencias <strong>de</strong> control (IF ó bucles FOR y DO-WHILE) en lugar <strong>de</strong>l GOTO.Tal creencia está tan arraigada que el GOTO es muy criticado y <strong>de</strong>saconsejado por todos losque se <strong>de</strong>dican a <strong>la</strong> enseñanza <strong>de</strong> <strong>la</strong> programación. Una crítica famosa a <strong>la</strong> sentencia encuestión es una carta redactada por Edsger Dijkstra 1 l<strong>la</strong>mada "Go To Statement Consi<strong>de</strong>redHarmful" (Sentencia Go To Consi<strong>de</strong>rada Dañina). En el<strong>la</strong> Dijkstra argumenta que el usoirrestricto <strong>de</strong>l GOTO <strong>de</strong>bería ser prohibido en lenguajes <strong>de</strong> alto nivel ya que dificultan e<strong>la</strong>nálisis y <strong>la</strong> verificación <strong>de</strong> <strong>la</strong> corrección <strong>de</strong> los programas.Si bien <strong>la</strong> instrucción GOTO pue<strong>de</strong> parecer útil y muy flexible, es precisamente en esaflexibilidad don<strong>de</strong> radica su peligro y los motivos <strong>de</strong> su obsolescencia. Si se piensa quecualquier programa minimamente complejo tendrá miles y miles <strong>de</strong> líneas <strong>de</strong> código fuente,con millones <strong>de</strong> flujos <strong>de</strong> programa posibles diferentes. Si se altera dicho flujo con <strong>la</strong>sentencia GOTO <strong>de</strong> un modo incontro<strong>la</strong>do, el código se volverá totalmente caótico, y portanto muy difícil <strong>de</strong> contro<strong>la</strong>r, <strong>de</strong>purar, mejorar o enten<strong>de</strong>r, lo que llevará, inevitablemente,a programas <strong>de</strong> escasa calidad.1 Reconocido investigador <strong>de</strong> <strong>la</strong> Burroughs Corporation a principios <strong>de</strong> los años ‘70. Entre suscontribuciones a <strong>la</strong> informática está el algoritmo <strong>de</strong> caminos mínimos; también conocido comoAlgoritmo <strong>de</strong> Dijkstra. Recibió el Premio Turing en 1972. Era conocido por su baja opinión <strong>de</strong> <strong>la</strong>sentencia GOTO en programación. Su principal interés fue <strong>la</strong> verificación formal <strong>de</strong> los programas.Licenciatura en Sistemas <strong>de</strong> Información –FACENA-UNNE Pág. 10

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!