portafolio de evidencia interpretes jesus

40
Universidad del Desarrollo Profesional. Unidad: Ciudad Obregón, Sonora, Centro. Ingeniería En Sistemas Computacionales. Elaborado: Jesús Isidro González Espinoza. Maestro: Dr. Benito Franco Urrea. Matricula: 25113224 Materia: Interpretes. Ciclo: 2014-1 Modulo: 1

Upload: jesus-gonzalez-espinoza

Post on 13-Mar-2016

233 views

Category:

Documents


4 download

DESCRIPTION

 

TRANSCRIPT

Universidad del Desarrollo Profesional.

Unidad: Ciudad Obregón, Sonora, Centro.

Ingeniería En Sistemas Computacionales.

Elaborado:Jesús Isidro González Espinoza.

Maestro:Dr. Benito Franco Urrea.

Matricula: 25113224

Materia: Interpretes.

Ciclo: 2014-1

Modulo: 1

Información escolar Introducción Definición de intérprete Estructura de un intérprete Ventajas y desventajas de los interpretes Aplicación de los sistemas basados en intérpretes Tipos de intérpretes Introducción a los análisis sintácticos Tareas 1.- investigación de conceptos. DEPURACIÓN, errores sintácticos, errores

semánticos, errores en tiempo de ejecución. 2.- Programación imperativa, funcional, aspecto, arboles sintácticos 3.- Matriz de transición de estado

Prácticas de clase Modo consola en python Resolución de ejercicios en SharpDevelop

INFORMACION INSTITUCIONAL

MISION.

La misión de UNIDEP es formar profesionales de éxito que cuenten con

actitudes, habilidades y conocimientos que demanda el sector productivo de la

región.

VISION.

La Universidad del Desarrollo Profesional es una institución de educación

superior de calidad, que ofrece programas presénciales y semipresenciales de

bachillerato, profesional asociado, licenciatura, postgrado, diplomados y cursos

en México y en el extranjero.

Se distingue por facilitar a sus egresados la incorporación al mercado de

trabajo, apoyada en una estrecha vinculación con el sector productivo y en

planes de estudios pertinentes y dinámicos.

Es reconocida por su modelo educativo profesionalizante, por la flexibilidad de

su oferta académica impartida en ciclos continuos y por horarios y cuotas

accesibles, acordes a la disponibilidad de tiempo y recursos económicos del

alumno.

Cuenta con profesores de amplia experiencia profesional y educativa. Sus

instalaciones dentro de la ciudad permiten el fácil acceso.

Cuenta con un modelo de administración sistematizado, participativo, operado

por personal que es recompensado por su desempeño efectivo que le permite

maximizar las aportaciones de sus socios y mantener finanzas sanas.

VALORES Y ACTITUDES UNIDEP

Lealtad._ Los Integrantes de la comunidad Universitaria consideramos la fidelidad

como un valor excelso que enaltecemos en nuestro quehacer diario.

Justicia._ Los integrantes de la comunidad Universitaria actuamos con la

constante y perpetua voluntad de dar a cada cual lo que le corresponde

conforme a sus méritos o actos.

Honestidad._ Los integrantes de la comunidad universitaria actuamos con

sinceridad y honradez en nuestras tareas y en congruencia entre los

pensamientos, palabras y acciones.

Responsabilidad._ Los integrantes de la comunidad universitaria llevamos a cabo

nuestras actividades con integridad, con sentido del propósito y apegados a

los objetivos institucionales.

Esfuerzo._ Los integrantes de la comunidad universitaria usamos nuestra máxima

energía para cumplir con los objetivos trazados.

Creatividad._ Los integrantes de la comunidad universitaria resolvemos los

problemas con imaginación, conocimientos y con un espíritu de mejora

continua.

En este presente trabajo se detallan los acontecimientos vistosen clase que son de suma importancia.Se observara la misión y visión de la escuela, como el perfildescriptivo de la materia entre otras cosas que son deimportancia para la materia de Intérpretes.Se verán los ejercicios realizados de lo aprendido del lenguaje dealto nivel python y en una interfaz gráfica llamada shardevelop.

Un interpretador es un programa informático capaz de analizar y ejecutar otros programas,escritos en un lenguaje de alto nivel. Los intérpretes se diferencian de los compiladores en quemientras estos traducen un programa desde su descripción en un lenguaje de programación alcódigo de máquina del sistema, los intérpretes sólo realizan la traducción a medida que seanecesaria, típicamente, instrucción por instrucción, y normalmente no guardan el resultado dedicha traducción.

Interpretar: ejecutar un programa escrito en un lenguaje de alto nivel traduciéndolo línea porlínea.

Compilar: traducir un programa escrito en un lenguaje de alto nivel a un lenguaje de bajo nivelde una vez, en preparación para la ejecución posterior.

Los intérpretes son a menudo usados para construir máquinas virtuales que enlazan lamáquina de computación esperada por la semántica y la máquina de computación disponibleen el hardware.

A la hora de construir un intérprete es conveniente utilizar una Representación Interna (RI) dellenguaje fuente a analizar. De esta forma, la organización interna de la mayoría de losintérpretes se descompone en los módulos: 1. Traductor a Representación Interna: Tomacomo entrada el código del programa P en Lenguaje Fuente, lo analiza y lo transforma a larepresentación interna correspondiente a dicho programa P.

Representación Interna (P/RI): La representación interna debe ser consistente con el programaoriginal. Entre los tipos de representación interna, los árboles sintácticos son los más utilizadosy, si las características del lenguaje lo permiten, pueden utilizarse estructuras de pila para unamayor eficiencia.

Tabla de símbolos: Durante el proceso de traducción, es conveniente ir creando una tabla coninformación relativa a los símbolos que aparecen. La información a almacenar en dicha tablade símbolos depende de la complejidad del lenguaje fuente. Se pueden almacenar etiquetaspara instrucciones de salto, información sobre identificadores (nombre, tipo, línea en la queaparecen, etc.) o cualquier otro tipo de información que se necesite en la etapa de evaluación.

Evaluador de Representación Interna: A partir de la Representación Interna anterior y de losdatos de entrada, se llevan a cabo las acciones indicadas para obtener los resultados. Duranteel proceso de evaluación es necesario contemplar la aparición de errores.

Tratamiento de errores: Durante el proceso de evaluación pueden aparecer diversos errorescomo desbordamiento de la pila, divisiones por cero, etc. que el intérprete debe contemplar.

Ventajas de un intérprete

Flexibilidad: permite realizar acciones complejas, imposibles o muy difíciles con uncompilador, como las siguientes:

Ejecución de cadenas de caracteres mediante operadores como "execute","interprete" o "evalquote".

Modificar sobre la marcha el significado de los símbolos e incluso prescindir porcompleto de las declaraciones.

Obtener un ligamiento dinámico completo en los sistemas orientados a objetos. Simplificar la gestión de memoria en los programas fuente. Facilidad de depuración de programas: la interpretación puede interrumpirse en

cualquier momento para examinar o modificar los valores de las variables o lasituación en la ejecución. La tabla de símbolos está disponible. Se pueden corregir loserrores y continuar. Trazas y paradas programadas. Saltos en el programa. Abandonosde subrutinas.

Rapidez en el desarrollo.

Desventajas de un intérprete

Velocidad: usualmente un orden de magnitud menor que la de un programacompilado.

Tamaño del programa objeto, que exige añadir el intérprete al programa propiamentedicho.

Los sistemas interpretados han tenido una gran importancia desde la aparición de los primerosordenadores. En la actualidad, la evolución del hardware abre nuevas posibilidades a lossistemas interpretados. La preocupación ya no es tanto la eficiencia como la capacidad dedesarrollo rápido de nuevas aplicaciones. Las principales aplicaciones podrían resumirse en:

Intérpretes de Comandos: Los sistemas operativos cuentan con intérpretes de comandos comoel Korn-Shell, C-Shell, JCL, etc. Estos intérpretes toman un lenguaje fuente que puede incluirsentencias de control (bucles, condiciones, asignaciones, etc.) y ejecutan los diferentescomandos a medida que aparecen en el lenguaje.

Lenguajes basados en Escritos (Scripting Languages), diseñados como herramientas que sirvande enlace entre diferentes sistemas o aplicaciones. Suelen ser interpretados con el fin deadmitir una mayor flexibilidad a la hora de afrontar las peculiaridades de cada sistema.Podrían destacarse Perl, Tcl/Tk, JavaScript, WordBasic [Ousterhout 97]

Entornos de Programación: Existen ciertos lenguajes que contienen características queimpiden su compilación o cuya compilación no es efectiva. Estos lenguajes suelen disponer deun Complejo entorno de desarrollo interactivo con facilidades para la depuración deprogramas. Entre estos sistemas pueden destacarse los entornos de desarrollo para Lisp,Visual Basic, Smalltalk, etc.

Lenguajes de Propósito Específico: Ciertos lenguajes incluyen sentencias que realizan tareascomplejas en contextos específicos. Existe una gran variedad de aplicaciones en las que seutilizan este tipo de lenguajes como consultas de Bases de Datos, simulación, descripción dehardware, robótica, CAD/CAM, música, etc.

Sistemas en Tiempo Real: Entornos que permiten modificar el código de una aplicación entiempo de ejecución de forma interactiva.

Intérprete de Código Intermedio: Una tendencia tradicional en el diseño de compiladores es lageneración de un código intermedio para una máquina abstracta, por ejemplo, el P-Code dePascal o los bytecodes de Java. El siguiente paso puede ser: generación del código objeto apartir del código intermedio para una máquina concreta, finalizando el proceso decompilación o interpretar dicho código intermedio en una máquina concreta. La tendenciahabitual es definir un lenguaje intermedio independiente de una máquina concreta. Para ello,suele definirse una máquina virtual que contenga las instrucciones definidas por el lenguajeintermedio, permitiendo una mayor portabilidad. Un ejemplo sería la Máquina Virtual de Java,que es simulada en la mayoría de los visualizadores Web.

En función de la estructura inter del intérprete se pueden distinguir:

Intérpretes puros. Interpretes avanzados. Interpretes incrementales. Evaluadores parciales. Compiladores “Just in Time”. Compiladores continúas.

Intérpretes puros: son los que analizan y ejecutan sentencia a sentencia todo el programafuente. Siguen el modelo de interpretación iterativa y, por tanto, se utilizan principalmentepara lenguajes sencillos.

Intérpretes avanzados o normales: incorporan un paso previo de análisis de todo el programafuente. Generando posteriormente un lenguaje intermedio que es ejecutado por ellos mismos.Permiten realizar un análisis más detallado del programa fuente (comprobación de tipos,optimización de instrucciones, etc.)

Interpretes incrementales: Existen ciertos lenguajes que, por sus características, no se puedencompilar directamente. La razón es que pueden manejar objetos o funciones que no sonconocidos en tiempo de compilación, ya que se crean dinámicamente en tiempo en ejecución.La idea es compilar aquellas partes estáticas del programa en lenguaje fuente, marcando comodinámicas las que no puedan compilarse. Posteriormente, en tiempo de ejecución, el sistemapodrá compilar algunas partes dinámicas o recompilar partes dinámicas que hayan sidomodificadas.

Evaluadores parciales: La utilización de evaluadores parciales o especializadores surge alconsiderar que muchos programas contienen dos tipos de datos de entrada.

Compiladores “Just in time”: surgen con la necesidad de distribuir programas independientesde la máquina, para evitar la interpretación los códigos bytes se transforman en código nativo,el código es compilado a código nativo justo en el momento que lo necesita el programa.

Compilación continúa: Mejora de “just in time”, mezcla compilación con el código nativo con lainterpretación.

Dispone de dos módulos: intérprete de código de bytes, un compilador de código debytes a código nativo.

El código es mezcla de código fuente y nativo: al principio está todo sin compilar, amedida que el programa es ejecutado el compilador va generando traducciones acódigo nativo.

También conocido como Análisis Sintáctico por Desplazamiento y Reducción; sus principalesoperaciones son como su nombre lo dice, desplazar y reducir. Aunque existen en realidadcuatro acciones posibles que puede realizar un analizador LR: desplazar, reducir, aceptar yerror.

El análisis sintáctico LR, tiene un conjunto más amplio de gramáticas que el análisis sintácticoLL, además dichas gramáticas son un supraconjunto de los clases de gramáticas que se puedenanalizar con analizadores sintáctico predictivos y se pueden generar expresiones más sencillas.

También debido a su sencillez y a su capacidad de análisis para una gran variedad de lenguajes,la técnica de análisis LR es elegida para los generadores automáticos de analizadoressintácticos; ya que con ellos se puede reconocer prácticamente todas las construcciones de loslenguajes de programación y así escribir gramáticas independientes de contexto.

Debido a estas razones y a que el desarrollo de la tabla y la aplicación del algoritmo fueronsencillo, opte por elegir este método de LR sobre el de LL, que considere más complicado en sudesarrollo.

ANALISIS SINTACTICO LR

Los códigos de las acciones son:

1. di significa desplazar y meter en la pila el estado i,2. rj significa reducir por la producción con número j,3. Ok significa aceptr,4. el espacio en blanco significa error.

apuntar ae al primer símbolo de w$;repeat forever beginsea s el estado en la cima de la pila y a el símbolo apuntado por ae;if acción [s,a] = desplazar s then beginmeter a y después s en la cima de la pila; avanzar ae al siguiente símbolo de entradaendelse if acción[s,a] = reducir A then beginsacar 2*símbolos de la pila; sea s el estado que ahora está en la cima de la pila; meter A ydespués ir_a [s,A] en la cima de la pila; emitir la producción Aendelse if acción[s,a] = aceptar thenreturn

else error( )end

GRAMATICA DEL LENGUAJE

P D Inicio C FinD (nume dato) id VV ,id ;C I L A SA id = id ( id const E )E E + T E - T TT T * F T / F FF ( E ) id constS S && G S || G | GG G == O G != O | OO O < P O P O >= P PP !Q | QQ ( S ) id constZ ( X ) id constS Si ( X Y ) { C W } RW

C R Si_no { C } I Impr( id ) Impr(“mensaje”) Impr(“mensaje”, id)L Leer( id )

PARA LA TABLA DE OPERADORES ARITMETICOS

I:E’ EE E + TE E - TE TT T * FT T / FT FF ( E )F idF const

Ir_a ( I , E ) Ir_a ( I , T ) Ir_a ( I , F )I0: I1: I2: I3:E’ . E E’ E. E T. T F.

E . E + T E E. + T T T. * FE . E - T E E. - T T T. / FE . TT . T * FT . T / FT . FF . ( E )F . idF . const

Ir_a ( I , ( ) Ir_a ( I , id ) Ir_a ( I , const ) Ir_a ( I , + )I4: I5: I6: I7:F (. E ) F id . F const . E E + . T E . E + TE . E + T T . T * FE . E – T T . T / FE . T T . FT . T * F F . ( E )T . T / F F . idT . F F . constF . ( E ) F . idF . const

Ir_a ( I , - ) Ir_a ( I , * ) Ir_a ( I , / ) Ir_a ( I , E )I8: I9: I10: I11:E E - . T T T *. F T T /. F F ( E . )T . T * F F . ( E ) F . ( E ) E E . + TT . T / F F . id F . id E E . - TT . F F

1.- investigación de conceptos. Depuración, errores sintácticos, erroressemánticos, errores en tiempo de ejecución.

¿Qué es la depuración (debugging)?

Es el proceso de identificar y corregir errores de programación. En inglés se le conoce como debugging,es que se asemeja a la eliminación de bichos (bugs), manera en que se conoce informalmente a loserrores de programación. Se dice que el término bug proviene de la época de los ordenadores de válvulatermoiónica, en los cuales los problemas se generaban por los insectos que eran atraídos por las luces yestropeaban el equipo. Si bien existen técnicas para la revisión sistemática del código fuente y se cuentacon medios computacionales para la detección de errores (depuradores) y facilidades integradas en lossistemas lower CASE y en los ambientes de desarrollo integrado, sigue siendo en buena medida unaactividad manual, que desafía la paciencia, la imaginación y la intuición del programador.

¿Qué son los errores sintéticos?

Son aquellos que se produce en el momento de escribir el programa en el lenguaje deprogramación de alto nivel y que no cumplen las reglas gramaticales de dicho lenguaje deprogramación. Estos errores son generalmente detectados por el propio compilador, ya queeste solo traduce programas que estén bien escritos.

¿Qué son los errores en tiempo de ejecución?

Es un problema de hardware o software que impide que un programa funcione correctamente.Los errores en tiempo de ejecución pueden ocasionar la pérdida de información en el archivoen el que esté trabajando, causar errores en el archivo (dañándolo) de forma que no puedatrabajar con él o impedir que use una característica. Al contrario que los errores de detención,los errores en tiempo de ejecución no suelen ser la causa de que Windows o un programa dejede funcionar.

¿Qué son los errores semánticos?

Se produce cuando la sintaxis del código es correcta, pero la semántica o significado no es elque se pretendía. La construcción obedece las reglas del lenguaje, y por ello el compilador ointérprete no detectan los errores semánticos. Los compiladores e intérpretes sólo se ocupande la estructura del código que se escribe, y no de su significado. Un error semántico puedehacer que el programa termine de forma anormal, con o sin un mensaje de error. Hablando entérminos coloquiales, puede hacer que el equipo se quede "colgado".

¿Qué son los lenguajes formales y lenguajes naturales?

Un lenguaje formal es un lenguaje cuyos símbolos primitivos y reglas para unir esos símbolosestán formalmente especificados.1 2 Al conjunto de los símbolos primitivos se le llama elalfabeto (o vocabulario) del lenguaje, y al conjunto de las reglas se lo llama la gramática formal(o sintaxis). A una cadena de símbolos formada de acuerdo a la gramática se la llama unafórmula bien formada (o palabra) del lenguaje. Estrictamente hablando, un lenguaje formal es

idéntico al conjunto de todas sus fórmulas bien formadas. A diferencia de lo que ocurre con elalfabeto (que debe ser un conjunto finito) y con cada fórmula bien formada (que debe teneruna longitud también finita), un lenguaje formal puede estar compuesto por un númeroinfinito de fórmulas bien formadas.

2.- Programación imperativa, funcional, aspecto, arboles sintácticos.

Programación imperativa.

La programación imperativa es mucho más cercana a la arquitectura física del computador quela programación declarativa. La arquitectura que habitualmente se utiliza en los computadoresy que es la base de la gran mayoría de lenguajes de programación es la arquitectura tradicionalpropuesta por Von Newmann. En esta arquitectura los datos se almacenan en una memoria ala que se accede desde una unidad de control ejecutando instrucciones de forma secuencial.

El estilo de programación imperativo constituye la primera forma de programar ordenadores.El ensamblador y el código máquina que se utilizaban antes de desarrollarse los primeroslenguajes de programación tienen un enfoque totalmente imperativo. Los primeros lenguajesde programación de alto nivel (como el Fortran) eran abstracciones del lenguaje ensambladory mantenían este enfoque. Lenguajes más modernos como el BASIC o el C han continuado estaidea.

En los años 60 se introducen conceptos de programación procedural en los lenguajes deprogramación. La programación procedural es un tipo de programación imperativa en el quelos programas se descomponen procedimientos (también llamados subrutinas o funciones).Los cambios de estado se localizan en estos procedimientos y se restringen a valores pasadoscomo parámetros o a los valores devueltos por los procedimientos.

A finales de la década de los 60 Edsger W. Dijkstra, una de las figuras más importantes en lahistoria de la computación, publicó en la revista Communications of the ACM el importanteartículo GOTO statement considered harmful en el que propone que la sentencia GOTO seelimine de los futuros lenguajes de programación. Este artículo marca el inicio de una nuevatendencia de programación denominada programación estructurada que, manteniendo laprogramación imperativa, intenta conseguir lenguajes que promuevan programas correctos,modulares y mantenibles. Lenguajes representativos de la programación estructurada son elPascal, el ALGOL 68 o el Ada.

A finales de la década de los 70 la programación orientada a objetos extiende estos conceptosy, siguiendo con el enfoque imperativo, introduce otras características más avanzadas.

Características principales

Ya hablamos de la programación imperativa cuando la comparábamos al principio de curso conla programación declarativa. En programación imperativa la computación se realiza cambiandoel estado del programa por medio de sentencias que definen pasos de ejecución. Las doscaracterísticas principales del paradigma imperativo son, por tanto, la existencia de estadomodificable y la ejecución de sentencias de control del programa.

Estado de un programa

En la programación imperativa el estado del programa se mantiene en forma de datos en lamemoria del computador. Estos datos son modificables mediante sentencias de asignación.

Programación funcional.

Programación funciona se basa en el concepto de función (que no es más que una evoluciónde los predicados), de corte más matemático.

Históricamente, los ordenadores se han programado utilizando lenguajes muy cercanos a laspeculiaridades de la propia máquina: operaciones aritméticas simples, instrucciones de accesoa memoria, etc. Un programa escrito de esta manera puede ocultar totalmente su propósito ala comprensión de un ser humano, incluso uno entrenado. Hoy día, estos lenguajespertenecientes al paradigma de la Programación Imperativa han evolucionado de manera queya no son tan crípticos.

En el paradigma de la programación funcional, un programa se considera una funciónmatemática, la cual describe una relación entre una entrada y una salida y donde el conceptode estado o variable se elimina completamente. Sabemos que una función matemática es unaregla que asocia a cada x de un conjunto X de valores, un único y de otro conjunto Y devalores; se representa por: f:X → Y ó por y = f(x) Si ignoramos cómo un programa computa susdatos y nos fijamos sólo en qué computa, podemos ver al mismo como una funciónmatemática que dada una entrada, devuelve una salida; se representa por Programa : Input ->Output ó output = Programa(input). De aquí que la implementación de un lenguaje quepermita crear programas con el enfoque de una función matemática, debía ser basado en elrecurso función de los lenguajes de programación.. Ahora bien, entre la concepción de unafunción matemática y la de una función en los lenguajes de programación tradicionales,existían diferencias:

Lenguajes de programación: Hay distinción entre la definición de la función (descripción delo que va a hacer la función mediante los parámetros formales) y la aplicación de la misma

(llamada con los parámetros actuales). Las variables refieren una zona de memoria dondese almacena un valor

Matemáticas: La distinción no es clara, a menudo el término " variable independiente " seusa tanto para el parámetro formal como actual.

Ejemplo: Si se tiene la expresión "Sea x tal que f(x) = 2 “ , no se distingue con claridad si serefiere a la definición de la función constante de valor 2 o al punto x específico en el que unafunción f ya definida toma el valor 2. Las variables siempre se refieren a un valor y no a unalocalización de memoria. No hay concepto de localización de memoria y por tanto la expr.x=x+1 no tiene sentido.

La programación funcional debe por esto eliminar el concepto de variable excepto comonombre de un valor. Por lo anterior, se concibió que en la Programación Funcional laasignación no fuera permitida como instrucción.

En programación funcional pura no existen variables, sólo existen constantes, parámetros yvalores, aun cuando en la práctica la mayoría de los lenguajes de programación funcionales noson puros pues retienen algunas nociones de variables y asignaciones. Como no hay variablesni asignación, tampoco existen los ciclos al estilo de los de los lenguajes tradicionales ya quelos mismos trabajan con una variable de control que se va reasignando (decrementando oincrementando). Esto se logra en un lenguaje funcional mediante la recursión.

Características

Las características más generales de la programación funcional se resumen en:

Ausencia de efectos colaterales El valor de una expresión solo depende de los valores de sus subexpresiones, si las tiene.

Se dice que una función (f x y z) tiene un efecto colateral si los valores de x, y, y/o z cambian enel entorno de llamada durante la aplicación de la función a sus argumentos, o si alguna otraacción ocurre mientras se evalúa f.

Una función definida con todos los parámetros por valor y donde no se hacen asignaciones alas variables globales, no tiene efectos colaterales.

La mayoría de las implementaciones de LISP incorporan algunos efectos colaterales y tipos dedatos integrados. Éstos han sido incluidos para hacer más sencillo un código fácilmente legibley las implementaciones eficientes.

Semántica limpia

Algunas de las características que hacen que un lenguaje sea útil y confiable son en las cualesel lenguaje significa lo que dice -no es ambiguo- y los resultados de un programa puedenverificarse. En un lenguaje funcional f(3) siempre devolverá el mismo resultado, mientras queen un lenguaje imperativo, como Pascal, éste puede no ser el caso.

El manejo del almacenamiento de los datos es implícito, ciertas operaciones asignanalmacenamiento en el momento necesario y cuando se vuelve inaccesible o no

referenciado se libera automáticamente, con uso de recolección de basuras, código deprograma más simple y corto.

Las funciones son valores de primera clase. Eso significa que las funciones tienen la mismajerarquía que cualquier otro valor. Una función puede ser el valor de una expresión, puedepasarse como argumento y puede colocarse en una estructura de datos.

Programación Orientada a Aspectos (POA)

La Programación Orientada a Aspectos (POA) es un paradigma de programación relativamentereciente cuya intención es permitir una adecuada modularización de las aplicaciones yposibilitar una mejor separación de conceptos. Gracias a la POA se pueden capturar losdiferentes conceptos que componen una aplicación en entidades bien definidas, de maneraapropiada en cada uno de los casos y eliminando las dependencias inherentes entre cada unode los módulos. De esta forma se consigue razonar mejor sobre los conceptos, se elimina ladispersión del código y las implementaciones resultan más comprensibles, adaptables yreusables. Varias tecnologías con nombres diferentes se encaminan a la consecución de losmismos objetivos y así, el término POA es usado para referirse a varias tecnologíasrelacionadas como los métodos adaptivos, los filtros de composición, la programaciónorientada a sujetos o la separación multidimensional de competencias.

La programación orientada a objetos (POO) supuso un gran paso en la ingeniería del software,ya que presentaba un modelo de objetos que parecía encajar de manera adecuada con losproblemas reales. La cuestión era saber descomponer de la mejor manera el dominio delproblema al que nos enfrentáramos, encapsulando cada concepto en lo que se dicen llamarobjetos y haciéndoles interactuar entre ellos, habiéndoles dotado de una serie de propiedades.Surgieron así numerosas metodologías para ayudar en tal proceso de descomposición yaparecieron herramientas que incluso automatizaban parte del proceso. Esto no ha cambiadoy se sigue haciendo en el proceso de desarrollo del software. Sin embargo, frecuentemente larelación entre la complejidad de la solución y el problema resuelto hace pensar en la necesidadde un nuevo cambio. Así pues, nos encontramos con muchos problemas donde la POO no essuficiente para capturar de una manera clara todas las propiedades y comportamientos de loque queremos dotar nuestra aplicación. Así mismo, la programación procedural tampoco nossoluciona el problema. Por lo que ante tales problemas, se utiliza la POA.

Los conceptos y tecnologías reunidos bajo el nombre "programación orientada a aspectos"(AOP, por las siglas de Aspect-OrientedProgramming; o AOSD, por Aspect-Oriented SoftwareDevelopment) buscan resolver un problema identificado hace tiempo en el desarrollo desoftware. Se trata del problema de la separación de incumbencias (separation of concerns).AOP no es el único intento por solucionar este problema, del que se habla a continuación: hayvarias propuestas, muchas de las cuales se agrupan (junto con AOP) en el campo de estudiodenominado ASoC (Advanced Separationof Concerns).

La programación orientada a aspectos (POA) es una nueva metodología de programación queaspira a soportar la separación de competencias para los aspectos antes mencionados. Esdecir, que intenta separar los componentes y los aspectos unos de otros, proporcionandomecanismos que hagan posible abstraerlos y componerlos para formar todo el sistema. Endefinitiva, lo que se persigue es implementar una aplicación de forma eficiente y fácil deentender.

POA es un desarrollo que sigue al paradigma de la orientación a objetos, y como tal, soporta ladescomposición orientada a objetos, además de la procedimental y la descomposiciónfuncional. Pero, a pesar de esto, POA no se puede considerar como una extensión de la POO,ya que puede utilizarse con los diferentes estilos de programación ya mencionados.

Características.

De la consecución de estos objetivos se pueden obtener las siguientes ventajas:

Un código menos enmarañado, más natural y más reducido. Una mayor facilidad para razonar sobre las materias, ya que están separadas y tienen una

dependencia mínima. Más facilidad para depurar y hacer modificaciones en el código. Se consigue que un conjunto grande de modificaciones en la definición de una materia

tenga un impacto mínimo en las otras. Se tiene un código más reusable y que se puede acoplar y desacoplar cuando sea

necesario.

Arboles sintácticos.

Un árbol no es otra cosa que una forma de visualizar la estructura de una oración. Es unanotación puramente formal, sin sustancia alguna.

Precisamente por eso, queremos que sea lo más claro y representativo posible. Queremos quemuestre todas las relaciones relevantes en la oración sin confusión.

· Primero, hay que asegurarse de que las palabras están en sucesión lineal de izquierda aderecha, y en el mismo orden en que aparecen en la oración. Hay que evitar escribir unapalabra encima de la otra. Además, conviene subrayar las palabras, para que contrastenclaramente con los nudos categoriales del árbol.

· La idea es que debemos poder leer la oración de izquierda a derecha sin tener que volverlos ojos hacia la izquierda en ningún punto.

(1) ÁRBOL CORRECTO

(1) ÁRBOL INCORRECTO

- Cada nudo madre debe aparecer centrado entre sus nudos hijas.

· Las líneas que no se bifurquen deben ser verticales.

· Muy importante: los nudos hermanas deben escribirse en la misma línea, para hacer surelación lo más evidente posible (recuérdese que definimos nociones como complemento yadjunto en términos de cuáles son sus hermanas). No importa que los nudos terminales y laspalabras no aparezcan en la misma línea al fondo del árbol. Si éste se ha dibujadocorrectamente, la oración todavía se deberá poder leer de izquierda a derecha sin problemas.

3.- Matriz de transición de estado.

MATRIZ DE TRANSICION DE ESTADOS.

Esta es una matriz cuadrada, donde el número de renglones y de columnas será igual al de estadosque tenga la cadena de Markov, siendo cada elemento de la matriz, la probabilidad de transiciónrespectiva de pasar del estado que encabeza el renglón donde está ubicado el elemento hacia elestado encabezado por la columna.

Miremos el siguiente ejemplo:

Se observa que para el primer renglón las probabilidades de transición indican que habrá un 50% delos clientes fieles a la marca A, por su parte un 30% cambiara de A B y un 20% cambiara de A C.Obsérvese que la suma se probabilidades de cada renglón es igual a 1.

Una manera de visualizar mejor la tabla dada anteriormente es a través de un diagrama de estado.Aquí los estados se indican a través de círculos y las flechas que salen de ellos son lasprobabilidades de que sus clientes cambien a otro estado. Es decir, las flechas que regresan almismo estado del que salen, señalan las probabilidades de que los clientes sean retenidos por esamarca en particular.

CALCULO DE PROBABILIDADES DE LA MATRIZ DE TRANSICIÓN

Para hallar las probabilidades de los estados dentro de la matriz de transición en un periododeterminado procedemos de la siguiente manera como se muestra en el siguiente ejemplo:

Las granjas de cierta región se pueden clasificar con 3 tipos: agrícolas, pecuarias o mixtas.Actualmente 30% son agrícolas, 40% pecuarias y 30% son mixtas. La matriz de transición de un

año al siguiente es:

De acuerdo a la información dada, el Po es:

Para hallar el valor de las probabilidades en el año siguiente hacemos uso de la multiplicación de lasmatrices, como sigue

Para el estado A:

Por lo que el vector para el año siguiente es:

De igual manera calculamos el porcentaje para cada tipo de granja para el periodo 2, 3, 4 y 5

Obsérvese que el valor de la probabilidad de un estado n está dado por la siguiente expresión:

MATRIZ DE TRANSICIÓN EN ESTADO ESTABLE

Un estado es estable cuando ya no hay cambios en el sistema, es decir que se alcanza el equilibrio.Una manera posible de obtener las condiciones del sistema para el estado estable es repetiriterativamente los cálculos para cada periodo con el fin de hallar el periodo con aquellasprobabilidades que se mantienen constantes o no cambian.

Sin embargo también es posible utilizar los métodos para resolver sistemas de ecuaciones que nospermiten encontrar directamente estas probabilidades de estado estables.

Dado el ejemplo anterior acerca de los tipos de granjas, calcularemos los estados estables a través

de los métodos para sistemas de ecuaciones.

En primera medida lo que hacemos es hallar la traspuesta de la matriz de transición, es decir:

El sistema de ecuaciones quedaría así:

Esta última ecuación es agregada siguiendo la propiedad de que la sumatoria las probabilidades delos estados debe ser igual a 1.

Utilizando el método de eliminación, restamos las ecuaciones (1) y (2) eliminando z.

Ahora sumamos las ecuaciones (3) y (4), multiplicando la ecuación 4 por 0.2 con el fin de eliminar z

Despejando de la ecuación (6) y reemplazando en (5), tenemos:

Reemplazando x en (6)

Prácticas de clase Modo consola en python.

Variables, expresiones y sentenciasValores y tiposLos valores pertenecen a diferentes tipos: 2 es un entero, y "Hola, Mundo!" es una cadena, llamadaasí porque contiene una “cadena” de letras. Usted (y el intérprete) pueden identificar cadenasporque están encerradas entre comillas. La sentencia de impresión también trabaja con enteros.

>>> print 44Si no está seguro del tipo que un valor tiene, el intérprete le puede decir.>>> type("Hola, Mundo!")<type ’string’>>>> type(17)<type ’int’>>>> type(3.2)<type ’float’>

¿Qué ocurre con valores como "17" y "3.2"? Parecen números, pero están encerrados entre comillascomo las cadenas.>>> type("17")<type ’string’> Ellos son cadenas.>>> type("3.2")<type ’string’>

VariablesUna de las características más poderosas en un lenguaje de programación es la capacidad demanipular variables. Una variable es un nombre que se refiere a un valor.

La sentencia de asignación crea nuevas variables y les da valores:>>> mensaje = "¿Qué Onda?">>> n = 17>>> pi = 3.14159

La sentencia print también funciona con variables.>>> print mensajeQué Onda?>>> print n17>>> print pi3.14159

En cada caso el resultado es el valor de la variable. Las variables también tienen tipos; nuevamente,le podemos preguntar al intérprete cuales son.>>> type(mensaje)<type ’string’>>>> type(n)<type ’int’>>>> type(pi)<type ’float’>El tipo de una variable es el mismo del valor al que se refiere.

Nombres de variables y palabras reservadas

Los programadores, generalmente, escogen nombres significativos para sus variables —queespecifiquen para qué se usa la variable. Estos nombres pueden ser arbitrariamente largos. Puedencontener letras y números, pero tienen que empezar con una letra. Aunque es legal usar letrasmayúsculas, por convención no lo hacemos. Si usted lo hace, recuerde que la capitalización importa,Pedro y pedro son variables diferentes.El carácter subrayado ( _) puede aparecer en un nombre. A menudo se usa en nombres con múltiplespalabras, tales como mi_nombre o precio_del_café_en_china.Si usted le da un nombre ilegal a una variable obtendrá un error sintáctico:>>> 76trombones = "gran desfile"SyntaxError: invalid syntax

76trombones es ilegal porque no empieza con una letra.>>> mas$ = 1000000SyntaxError: invalid syntax

mas$ es ilegal porque contiene un carácter ilegal, el símbolo $.

>>> class = "introducción a la programación"SyntaxError: invalid syntax

¿Qué sucede con class?Resulta que class es una de las palabras reservadas (keywords) de Python. Las palabras reservadasdefinen las reglas del lenguaje y su estructura, y no pueden ser usadas como nombres de variables.Python tiene veintiocho palabras reservadas:and continue else for import notassert def except from in orbreak del exec global is passclass elif finally if lambda printraise return try while

Evaluando expresionesUna expresión es una combinación de valores, variables y operadores. Si usted digita una expresiónen la línea de comandos, el intérprete la avalúa y despliega su resultado:

>>> 1 + 12Un valor, por sí mismo, se considera como una expresión, lo mismo ocurre para las variables.>>> 1717

Aunque es un poco confuso, evaluar una expresión no es lo mismo que imprimir o desplegar unvalor.>>> mensaje = "Como le va, Doc?">>> mensaje"Como le va, Doc?">>> print mensaje

Como le va, Doc?Cuando Python muestra el valor de una expresión que ha evaluado, utiliza el mismoformato que se usaría para entrar un valor. En el caso de las cadenas, estoImplica que se incluyen las comillas. Cuando se usa la sentencia print, el efecto es distinto comousted ya lo ha evidenciado.

Operadores y operandosLos operadores son símbolos especiales que representan cómputos, como la suma y lamultiplicación. Los valores que el operador usa se denominan operandos.Los siguientes son expresiones validas en Python, cuyo significado es más o menos claro:

20+32 hora-1 hora*60+minuto

minuto/60 5**2 (5+9)*(15-7)

Los símbolos +, -, y /, y los paréntesis para agrupar, significan en Python lo mismo que en lamatemática. El asterisco (*) es el símbolo para la multiplicación, y ** es el símbolo para laexponenciación.Cuando el nombre de una variable aparece en lugar de un operando, se reemplazapor su valor antes de calcular la operaciónLa suma, resta, multiplicación y exponenciación realizan lo que usted esperaría, pero la divisiónpodría sorprenderlo. La siguiente operación tiene un resultado inesperado:>>> minuto = 59>>> minuto/600El valor de minuto es 59, y 59 dividido por 60 es 0.98333, no 0. La razón para esta discrepancia radicaen que Python est{a realizando división entera.Cuando los dos operandos son enteros el resultado también debe ser un entero; y, por convención,la división entera siempre redondea hacia abajo, incluso en casos donde el siguiente entero está muycerca.

Orden de las operaciones

Cuando hay más de un operador en una expresión, el orden de evaluación depende de las reglas deprecedencia. Python sigue las mismas reglas de precedencia a las que estamos acostumbrados parasus operadores matemáticos. El acrónimo PEMDAS es útil para recordar el orden de las operaciones:Los Paréntesis tienen la precedencia más alta y pueden usarse para forzar la evaluación de unaexpresión de la manera que usted desee. Ya que las expresiones en paréntesis se evalúan primero:2 * (3-1) es 4, y (1+1)**(5-2) es 8.

Usted también puede usar paréntesis para que una expresión quede más legible, como en (minuto *100) / 60, aunque esto no cambie el resultado.

La Exponenciación tiene la siguiente precedencia más alta, así que 2**1+1 es 3 y no 4, y 3*1**3 es 3y no 27.

La Multiplicación y la División tienen la misma precedencia, aunque es más alta que la de la Adición yla Sustracción, que también tienen la misma precedencia.

Así que 2*3-1 es 5 en lugar de 4, y 2/3-1 es -1, no 1 (recuerde que en división entera, 2/3=0).Los operadores con la misma precedencia se evalúan de izquierda a derecha.

Minuto=59, en la expresión minuto*100/60; la multiplicación se hace primero, resultando 5900/60,lo que a su vez da 98. Si las operaciones se hubieran evaluado de derecha a izquierda, el resultadosería 59/1, que es 59, y no es lo correcto.

Operaciones sobre cadenasEn general, usted no puede calcular operaciones matemáticas sobre cadenas, incluso si las cadenaslucen como números. Las siguientes operaciones son ilegales (asumiendo que mensaje tiene el tipocadena):

mensaje-1 "Hola"/123 mensaje*"Hola" "15"+2

Sin embargo, el operador + funciona con cadenas, aunque no calcula lo que usted esperaría. Para lascadenas, el operador + representa la concatenación, que significa unir los dos operandosenlazándolos en el orden en que aparecen. Por ejemplo:fruta = "banano"bienCocinada = " pan con nueces"

>>>print fruta + bienCocinada

La salida de este programa es:

banano pan con nueces.El espacio antes de la palabra pan es parte de la cadena y sirve para producir el espacio entre lascadenas concatenadas.El operador * también funciona con las cadenas; hace una repetición. Por ejemplo, ’Fun’*3 es’FunFunFun’. Uno de los operados tiene que ser una cadena, el otro tiene que ser un entero.

Estas interpretaciones de + y * tienen sentido por la analogía con la suma y la multiplicación. Asícomo 4*3 es equivalente a 4+4+4, esperamos que "Fun"*3 sea lo mismo que "Fun"+"Fun"+"Fun", ylo es.

Practica 2

ComposiciónHasta aquí hemos considerado a los elementos de un programa—variables, expresiones ysentencias—aisladamente, sin especificar como combinarlos.

Una de las características más útiles de los lenguajes de programación es su capacidad de tomarpequeños bloques para componer con ellos. Por ejemplo, ya que sabemos cómo sumar números ycómo imprimirlos; podemos hacer las dos cosas al mismo tiempo:>>> print 17 + 320De hecho, la suma tiene que calcularse antes que la impresión, así que las acciones no estánocurriendo realmente al mismo tiempo. El punto es que cualquier expresión que tenga números,cadenas y variables puede ser usada en una sentencia de impresión (print). Usted ha visto un

ejemplo de esto:>>>minuto=60>>>hora=60>>>print "Número de minutos desde media noche: ",hora*60+minuto

ComentariosA medida que los programas se hacen más grandes y complejos, se vuelven más difíciles de leer. Loslenguajes formales son densos; y, a menudo, es difícil mirar una sección de código y saber qué hace,o por qué lo hace.Por esta razón, es una muy buena idea a ˜nadir notas a sus programas para explicar, en lenguajenatural, lo que hacen. Estas notas se denominan comentarios y se marcan con el símbolo #:

>>># calcula el porcentaje de la hora que ha pasado>>>porcentaje = (minuto * 100) / 60En este caso, el comentario aparece en una línea completa. También pueden ir comentariosal final de una línea:>>># precaución: división enteraporcentaje = (minute * 100) / 60

GlosarioValor: un número o una cadena (u otra cosa que se introduzca más adelante) quepuede ser almacenado en una variable o calculado en una expresión.Tipo: conjunto de valores. El tipo del valor determina como se puede usar en expresiones. Hastaaquí, los tipos que usted ha visto son enteros (tipo int), números de punto flotante (tipo float) ycadenas (tipo string).Punto flotante: formato para representar números con parte decimal.Variable: nombre que se refiere a un valor.Sentencia: sección de código que representa un comando o acción. Hasta aquí las sentencias queusted ha visto son la de asignación y la de impresión.Asignación: corresponde a la sentencia que pone un valor en una variable.Palabra reservada: es una palabra usada por el compilador para analizar sintácticamente unprograma; usted no puede usar palabras reservadas como if, def, y while como nombres devariables.Operador: símbolo especial que representa un simple cálculo como una suma, multiplicación oconcatenación de cadenas.Operando: uno de los valores sobre el cual actúa un operador.Expresión: combinación de variables, operadores y valores que representa un único valor deresultado.Evaluar: simplificar una expresión ejecutando varias operaciones a fin de retornar un valor único.División entera: operación que divide un entero por otro y retorna un entero. La división enteraretorna el número de veces que el denominador cabe en el numerador y descarta el residuo.Reglas de precedencia: reglas que gobiernan el orden en que las expresiones que tienen múltiplesoperadores y operandos se evalúan.Concatenar: unir dos operandos en el orden en que aparecen.Composición: es la capacidad de combinar simples expresiones y sentencias dentro de sentencias yexpresiones compuestas para representar cálculos complejos concisamente.Comentario: información que se incluye en un programa para otro programador (o lector delcódigo fuente) que no tiene efecto en la ejecución.

Conversión de tiposPython proporciona una colección de funciones que convierten valores de un tipo a otro. La funciónint toma cualquier valor y lo convierte a un entero, si es posible, de lo contrario se queja:>>> int("32")32>>> int("Hola")ValueError: invalid literal for int(): Holaint también puede convertir valores de punto flotante a enteros, pero hay que tener en cuenta queva a eliminar la parte decimal:>>> int(3.99999)3>>> int(-2.3)-2

La función float convierte enteros y cadenas a número de punto flotante:>>> float(32)32.0>>> float("3.14159")3.14159Finalmente, la función str convierte al tipo cadena (string):>>> str(32)’32’>>> str(3.14149)’3.14149’

Coerción de tipos

Ahora que podemos convertir entre tipos, tenemos otra forma de esquivar a la división entera.Retomando el ejemplo del capítulo anterior, suponga que deseamos calcular la fracción de una horaque ha transcurrido. La expresión más obvia minuto/60, hace división entera, así que el resultadosiempre es 0, incluso cuando han transcurrido 59 minutos.Una solución es convertir minuto a punto flotante para realizar la división en punto flotante:>>> minuto = 59>>> float(minute)/60.00.983333333333Otra alternativa es sacar provecho de las reglas de conversión automática de tipos, que sedenominan coerción de tipos. Para los operadores matemáticos, si algún operando es un númeroflotante, el otro se convierte automáticamentea flotante:>>> minuto = 59>>> minuto / 60.00.983333333333Así que haciendo el denominador flotante, forzamos a Python a realizar división en punto flotante.

Practica 3

Operadores aritméticos

Operador Descripción Ejemplo

+ Suma r = 3 + 2 # r es 5

- Resta r = 4 - 7 # r es -3

Operador Descripción Ejemplo

- Negación r = -7 # r es -7

* Multiplicación r = 2 * 6 # r es 12

** Exponente r = 2 ** 6 # r es 64

/ División r = 3.5 / 2 # r es 1.75

// División entera r = 3.5 // 2 # r es 1.0

% Módulo r = 7 % 2 # r es 1

Booleanos

Una variable de tipo booleano sólo puede tener dos valores: True (cierto) y False (falso).

Estos son los distintos tipos de operadores con los que podemos trabajar con valores booleanos, losllamados operadores lógicos o condicionales:

Operador Descripción Ejemplo

and ¿Se cumple a y b? r = True and False # r es False

or ¿Se cumple a o b? r = True or False # r es True

not No a r = not True # r es False

Los valores booleanos son además el resultado de expresiones que utilizan operadores relacionales(comparaciones entre valores):

Operador Descripción Ejemplo

== ¿son iguales a y b? r = 5 == 3 # r es False

!= ¿son distintos a y b? r = 5 != 3 # r es True

< ¿es a menor que b? r = 5 < 3 # r es False

> ¿es a mayor que b? r = 5 > 3 # r es True

<= ¿es a menor o igual que b? r = 5 <= 5 # r es True

>= ¿es a mayor o igual que b? r = 5 >= 3 # r es True

Listas

La lista es un tipo de colección ordenada. Sería equivalente a lo que en otros lenguajes se conocepor arrays, o vectores.

Las listas pueden contener cualquier tipo de dato: números, cadenas, booleanos, … y también listas.

Crear una lista es tan sencillo como indicar entre corchetes, y separados por comas, los valores quequeremos incluir en la lista:

>>>a = [22, True, “una lista”, [1, 2]]

Podemos acceder a cada uno de los elementos de la lista escribiendo el nombre de la lista eindicando el índice del elemento entre corchetes.

NOTA: Ten en cuenta que el índice del primer elemento de la lista es 0, y no 1:

>>>a[2]

‘una lista’

>>>a[0]

22

Si queremos acceder a un elemento de una lista incluida dentro de otra lista.

>>> a = [22, True, “una lista”, [1, 2]]

Tendremos que utilizar dos veces este operador, primero para indicar a qué posición de la listaexterior queremos acceder, y el segundo para seleccionar el elemento de la lista interior:

si queremos el valor 1 de la sublista [1,2]

>>>a[3][0]

1

También podemos utilizar este operador para modificar un elemento de la lista si lo colocamos enla parte izquierda de una asignación:

>>> a = [22, True, “una lista”, [1, 2]]

>>>a[0]

22

>>>a[0] =99

>>>a[0]

99

Una curiosidad sobre el operador [] de Python es que podemos utilizar también números negativos.Si se utiliza un número negativo como índice, esto se traduce en que el índice empieza a contardesde el final, hacia la izquierda; es decir, con [-1] accederíamos al último elemento de la lista, con[-2] al penúltimo, con [-3], al antepenúltimo, y así sucesivamente.

>>>a = [22, True, “una lista”, [1, 2]]

>>>a[-1]

[1,2]

Sentencias condicionales

Aquí es donde cobran su importancia el tipo booleano y los operadores lógicos y relacionales queaprendimos en el capítulo sobre los tipos básicos de Python.

if

La forma más simple de un estamento condicional es un if (del inglés si) seguido de la condición a

evaluar, dos puntos (:) y en la siguiente línea e indentado, el código a ejecutar en caso de que secumpla dicha condición.

>>> valor=”programa”

>>> if valor == “programa” : print “Respuesta correcta”

if … else

>>> valor=”programa”

>>> if valor == “programa” : print “Respuesta correcta”

…else: print “respuesta incorrecta”

Respuesta correcta

if … elif … elif … else

elif es una contracción de else if, por lo tanto elif numero > 0 puede leerse como “si no, si numeroes mayor que 0”. Es decir, primero se evalúa la condición del if. Si es cierta, se ejecuta su código y secontinúa ejecutando el código posterior al condicional; si no se cumple, se evalúa la condición delelif. Si se cumple la condición del elif se ejecuta su código y se continua ejecutando el códigoposterior al condicional; si no se cumple y hay más de un elif se continúa con el siguiente en ordende aparición. Si no se cumple la condición del if ni de ninguno de los elif, se ejecuta el código delelse.

>>>numero=1

>>>if numero >0: print “número positivo”

…elif numero <0: print “número negativo”

…else: print “Cero”

número positivo

Practica 4Entrada estándar

La forma más sencilla de obtener información por parte del usuario es mediante la funciónraw_input. Esta función toma como parámetro una cadena a usar como prompt (es decir,como texto a mostrar al usuario pidiendo la entrada) y devuelve una cadena con los caracteresintroducidos por el usuario hasta que pulsó la tecla Enter. Veamos un pequeño ejemplo:

>>>nombre = raw_input(“dame tu nombre: “)

Definición de una Función

>>> def imprimedoble(dato):

… print dato dato

Esta función toma un argumento y lo asigna a un parámetro llamado dato. El valor delparámetro (en este momento no tenemos idea de lo que será) se imprime dos veces.

>>>imprimedoble(“azul”)

azul azul

>>>imprimedoble(“azul”*3)

azulazulazul azulazulazul

>>> def concatenarDoble(parte1, parte2):

… cat = parte1 + parte2

… imprimaDoble(cat)

>>>concatenarDoble(“uno”,”dos”)

unodos unodos

def conteo(n):

if n == 0:

print "Despegue!"

else:

print n

conteo(n-1)

Resolución de ejercicios en SharpDevelop

Crear y ejecutar en el editor SharpDevelop la siguiente función de Ironpython

def conteo(n):if n == 0:

print "Despegue!"else:

print n

conteo(n-1)

a=raw_input("presiona enter")conteo(10)

Crear y ejecutar en el editor SharpDevelop la siguiente lista de datos, y con la funciónlen() contar el número de letras de cada palabra en la lista de datos. Utilice lainstrucción for para revisar cada palabra de la lista.

palabras= ["windows","universidad","ingenieria de software","interpretes"]for i in palabras:

print (i, len(i))a=raw_input("presiona enter")

Crear y ejecutar en el editor SharpDevelop un programa que solicite la edad y nosindique cuantos días hemos vivido, además que se valide que se capturó un número yno una letra.

try:edad =raw_input("Cual es tu edad: ")dias=int(edad)*365print "Has vivido " + str(dias) + " dias"a=raw_input("presiona enter")

except ValueError:print "Eso no es un numero, verifica!"a=raw_input("presiona enter")

Operaciones básicas.

num1=raw_input("dame el primer numero")num2=raw_input("dame el segundo numero")suma=int(num1)+int(num2)print("el resultado de la suma es: ",suma)#a=raw_input("presione enter para continuar")resta=int(num1)-int(num2)print("el resultado de la resta es: ",resta)#a=raw_input("presione enter para continuar")multiplicacion=int(num1)*int(num2)print("el resultado de la multiplicacion es: ",multiplicacion)#a=raw_input("presione enter para continuar")elevar=int(num1)**int(num2)print("el resultado de la elevacion es: ",elevar)#a=raw_input("presione enter para continuar")if int(num2)!=0:

division=int(num1)/int(num2)print("el resultado de la division es: ",float(division))

a=raw_input("presione enter para continuar")

Arreglo de tres palabras y cambiar palabra.

a= raw_input ("Dame tres palabras: ")b= raw_input (", " )c= raw_input(", " )palabras = [a, b, c]print (palabras)p= raw_input ("desea cambiar una palabra?. Escriba SI o NO: " )if p == 'SI':

k= raw_input("que palabra desea cambiar? " )if k== a:

a= raw_input("Dame la nueva palabra: " )elif k== b:

b= raw_input ("Dame la nueva palabra: " )elif k== c:

c=raw_input ("Dame la nueva palabra: " )else:

print ("La palabra no es correcta")else:

print ("No se cambio ninguna palabra")palabras = [a, b, c]print (palabras)

elif o == '6':num1=raw_input("dame el primer numero: ")num2=raw_input("dame el segundo numero: ")elevar=int(num1)**int(num2)print("el resultado de la elevacion es: ",elevar)

elif o == '7':def conteo(n):

if n == 0:print "Despegue!"

else:print nconteo(n-1)

a=raw_input("presiona enter")conteo(10)

elif o == '8':ñ= raw_input("presione enter para salir")break

Menú de operaciones.

while True:print("1.suma")print("2.resta")print("3.division")print("4.multiplicacion")print("5.arreglo")print("6.elevar")print("7.Instr. for")print("8.Salir")o=raw_input("Seleccione la operación que desea hacer: " )while o > '8' or o == '0' or o >= '10':

print("¡Ha escrito un número incorrecto! Inténtelo de nuevo")o=raw_input("Seleccione la operación que desea hacer: " )

if o == '1':num1=raw_input("dame el primer numero: ")num2=raw_input("dame el segundo numero: ")suma=int(num1)+int(num2)print("el resultado de la suma es: ",suma)

elif o == '2':num1=raw_input("dame el primer numero: ")num2=raw_input("dame el segundo numero: ")resta=int(num1)-int(num2)print("el resultado de la resta es: ",resta)

elif o =='3':num1=raw_input("dame el primer numero: ")num2=raw_input("dame el segundo numero: ")if int(num2)!=0:

division=int(num1)/int(num2)print("el resultado de la division es: ",float(division))

else:print("No puede dividir entre 0")

elif o == '4':num1=raw_input("dame el primer numero: ")num2=raw_input("dame el segundo numero: ")multiplicacion=int(num1)*int(num2)print("el resultado de la multiplicacion es: ",multiplicacion)

elif o == '5':a= raw_input ("Dame tres palabras: ")b= raw_input (", " )c= raw_input(", " )palabras = [a, b, c]print (palabras)p= raw_input ("desea cambiar una palabra?. Escriba SI o NO: " )if p == 'SI':

k= raw_input("que palabra desea cambiar? " )if k== a:

a= raw_input("Dame la nueva palabra: " )elif k== b:

b= raw_input ("Dame la nueva palabra: " )elif k== c:

c=raw_input ("Dame la nueva palabra: " )else:

print ("La palabra no es correcta")else:

print ("No se cambio ninguna palabra")palabras = [a, b, c]print (palabras)

elif o == '6':num1=raw_input("dame el primer numero: ")num2=raw_input("dame el segundo numero: ")elevar=int(num1)**int(num2)print("el resultado de la elevacion es: ",elevar)

elif o == '7':def conteo(n):

if n == 0:print "Despegue!"

else:print nconteo(n-1)

a=raw_input("presiona enter")conteo(10)

elif o == '8':

ñ= raw_input("presione enter para salir")break

Tablas de multiplicar.

numero = raw_input("que tabla quieres?: ")print "tabla del",int(numero)for v in range(1,11):

print numero,"x",v,"=",int(numero) * variablea=raw_input("precione enter para salir")

Tablas de multiplicar (da la tabla del 1 hasta la tabla que pidas).while True:

numero = raw_input("que tabla quieres?: ")print "tabla del",int(numero)for v in range(1,int(numero) + 1):

for j in range(1,11):print v,"x",j,"=",v * j

a=raw_input("Desea otra operacion (S/N): ")if a == 'N':

break

Para concluir con el presente trabajo, se pude hacer referencia a laimportancia que tiene la materia de intérpretes, se puede decir que loaprendido es de suma importancia al igual que los temas vistos en esteportafolio, que nos servirá a lo largo de la carrera y así mismoprofesionalmente, ya que los interpretes es muy indispensable en lacarrera nos sirve como base para programar.