Programación Interactiva

Documentos relacionados
GUÍA BÁSICA DE SCHEME v.4

Tema 3.- Predicados y sentencias condicionales

Estatutos de Control C# Estatutos de Decisión (Selección)

1.- Para cada uno de los siguientes problemas escribir el diagrama de flujo y el pseudocódigo de un programa que lo resuelva:

Programación en java. Estructuras algorítmicas

Estructura Selectiva Múltiple

$0 Representa al parámetro cero o nombre del programa $1 Representa al parámetro uno $2 Representa al parámetro dos

Valores Booleanos Interpretación #t Cierto #f Falso

2. EXPRESIONES 3. OPERADORES Y OPERANDOS 4. INDENTIFICADORES COMO LOCALIDADES DE MEMORIA

Lenguajes y Gramáticas

Manual de turbo pascal

Inicio del programa. Entrada de datos. Proceso de datos. Salida de datos. Fin del programa

Tema 2: La clase string

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

Estructuras de Control

Universidad Metropolitana Castro Carazo Prof. Ing. Patricia Vargas. Material de apoyo Semana #2 PROGRAMACIÓN II

CALENDARIO AÑO 2016 PICO Y PLACA AUTOMOVILES SERVICIO ESPECIAL PICO Y PLACA TAXIS

4.- Leer tres números y escribirlos en orden decreciente

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Manual de Lisp para IACS (Curso 91 92)

TEMA 4. ESTRUCTURAS DE CONTROL

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C

REFERENCIA DEL LENGUAJE

ESCUELA POLITÉCNICA SUPERIOR PRÁCTICA 2: EXPRESIONES, PRINTF Y SCANF

Lenguaje de programación C. Introducción

6 CARACTERES Y CADENAS. 6.1 Caracteres y cadenas

CALENDARIO AÑO 2016 PICO Y PLACA AUTOMOVILES SERVICIO ESPECIAL PICO Y PLACA TAXIS

MANUAL DE RUBY (PARTE I) Luis José Sánchez González

TECNICO SUPERIOR EN INFORMÁTICA EMPRESARIAL MÓDULO INTRUCCIONAL

Lenguajes de Inteligencia Artificial Segundo curso. Primer cuatrimestre

PHP: Lenguaje de programación

Aprender a programar con Turbo Pascal. Turbo pascal

PHP HypertextPreProcessor

Principios de Computadoras II

Datos y tipos de datos

Constante: Una constante es un dato numérico o alfanumérico que no cambia durante la ejecución del programa.

INTRODUCCIÓN A LA PROGRAMACIÓN EN FORTRAN. Métodos Numéricos Carlos Zotelo

Estructura If Esta sentencia, es considerada de alternativa doble (si se cumple condición entonces..., sino... / If... then... else... ).

Estructuras de control

Programación n Orientada a Objetos Sentencias Java Parte I. Ing. Julio Ernesto Carreño o Vargas MsC.

Guía práctica de estudio 05: Diagramas de flujo

Actividad colaborativa Ejercicios de programación Programación básica C++

Profesor(a): Ing. Miriam Cerón Brito

[ GUÍA DIDÁCTICA: DESARROLLO DE ALGORITMOS PSEINT] 11 de julio de 2013

Estructura de Datos y de la Información. Pilas y expresiones aritméticas

Práctica 3. Paso de parámetros entre subrutinas. 3. Consideraciones sobre el paso de parámetros

Sentencias o instrucciones en Visual BASIC

Semántica Denotacional

Programación Orientada a Objetos Sentencias Java Parte I Ing. Julio Ernesto Carreño Vargas MsC.

Funciones como Subprogramas en C++

Funciones mas importantes para el manejo de Caracteres

Hoja de ejercicios del Tema 3

Estructuras de Datos. La pila es un objeto dinámico en constante cambio.

Programación en Pascal

MANEJO DE EXPRESIONES REGULARES

Algoritmos. Intro. Prof. Raquel Torres Peralta / Gerardo Sanchez S. Unison

Programación de los problemas de Física en.

Computación Aplicada. Universidad de Las Américas. Aula virtual de Computación Aplicada. Módulo de Excel 2013 LIBRO 7

Universidad de Pamplona Materia: Programación 1 Docente: Ing. Lusbin Raúl Vargas LENGUAJE C ESTRUCTURA DE UN PROGRAMA EN C

Tema: Clases y Objetos en C#. Parte II.

Fundamentos de Programación. Flujo de Control I: Estructuras selectivas

Operadores aritméticos: suma (+), resta (-), producto (*), cociente (/) y potencia (**).

Base de datos relacional. Diccionario ABAP. Modelo Base de datos. Mundo real

Programación. Test Autoevaluación Tema 3

El concepto de función en programación se fundamenta en el concepto de función matemática 1

El lenguaje C. 1. Identificadores, constantes y variables

Caracteres y Cadenas Conversión de Datos Funciones y procedimientos Archivos cabecera. Fundamentos de programación

la solución a una ecuación cuadrática solicitando al usuario los términos de dicha ecuación.

8. Diseña una función que muestre el calendario para un mes en el siguiente formato: Lunes Martes Miércoles Jueves Viernes Sábado Domingo

CAPITULO 2. COMPRENDER LAS DEFINICIONES DE CLASE

Estructura de Datos: Archivos

Herramientas de Programación. M.C. Juan Carlos Olivares Rojas

FUNDAMENTOS DE INFORMÁTICA

Enteros. Son los números que no contienen componentes fraccionarios y, por tanto, no contienen punto decimal.

Formato para prácticas de laboratorio

Metodología y Tecnología de la Programación

Estructuras de control y DFDs

Computación II. Introducción a Visual Basic

5. Sentencias selectivas o condicionales

Academia técnica de computación A.T.C.

Elementos de un programa en C

LA ESTRUCTURA DE DATOS PILA EN JAVA. CLASE STACK DEL API JAVA. EJEMPLO Y EJERCICIOS RESUELTOS. (CU00923C)

LENGUAJE DE PROGRAMACION UNO.

Nota:Simule el programa paso a paso en su cuaderno para entender la lógica de ejecución. Clase Lenguaje de programación 1 Ing Eddy ruiz Largaespada.

Tema 7. El sistema de clases

Tema: FUNCIONES, PROCEDIMIENTOS Y RECURSIVIDAD.

Un identificador le da nombre único a un elemento en un programa (Variables, procedimientos, etc.). No puede contener operadores como + - * /

Algoritmos y Programación Clase 7

INSTITUTO TECNOLÓGICO METROPOLITANO DECANATURA DE CIENCIAS JEFATURA DE CIENCIAS BÁSICAS

Exterior del algoritmo. Entorno. Usuario. Procesador. Escribir. v1 v2 v3. Leer. <acción> {; <acción>}

XQuery. Jose Emilio Labra Gayo Departamento de Informática Universidad de Oviedo. XQuery

Lección 2 Introducción al lenguaje C

Ejercicio 1.- En las construcciones siguientes para qué valores de la variable RangoI se ejecutará la sentencia de asignación?

Scripting en el cliente: Javascript. Tecnologías Web

REESCRIBIR ECUACIONES CON MÚLTIPLES VARIABLES Ejemplo 2. Ejemplo 4

LEX. Las definiciones y subrutinas son opcionales. El segundo %% es opcional pero el primer %% indica el comienzo de las reglas.

Transcripción:

Capítulo 6 Programación Interactiva 6.1 Cadenas Una cadena es una secuencia de caracteres encerrados en comillas dobles. Scheme proporciona varios procedimientos para manipular cadenas: Procedimiento string? string-length string-append subtring symbol->string number->string string=? string-ci=? Significado Evalúa si un argumento es una cadena Proporciona la longitud de la cadena incluyendo espacios en blanco Concatena las cadenas proporcionadas Retornalaporción indicada de la cadena Convierte un símbolo a una cadena Convierte un número a una cadena Evalúa la igualdad de las cadenas(distingue entre mayúsculas y minúsculas) Evalúa la igualdad entre cadenas(no distingue entre mayúsculas y minúsculas) A continuación se presentan algunos ejemplos: > (string? Carlos ) #t > (string? Carlos) #f > (string-length Carlos Coello 13 > (string-append Carlos Coello ) 89

Carlos Coello > (string-append This isa longer concatenation. This is a longer concatenation. > (substring Carlos Coello 0 6) Carlos > (substring Carlos Coello 7 8) C > (symbol->string John) john > (number->string 5) 5 > (string=? Carlos Carlos ) #t > (string=? carlos Carlos ) #f > (string-ci=? carlos Carlos ) #t > (string-ci? CARLOS carlos ) #t > (equal? Carlos carlos ) #f > (equal? Carlos Carlos ) #t Advierta que substring retorna la parte de la cadena original que empieza con el índice dado inicio (definido por el primer entero proporcionado como argumento) cuya base es cero. Este procedimiento retorna pues todos los caracteres a partir de la posición indicada, pero sin incluir al correspondiente a la posicón final (el segundo entero proporcionado como argumento). 6.1.1 Problemas Resueltos 1. Defina un predicado substring? con dos parámetros, sstr y strng que evalúe si la cadena sstr es una subcadena de strng. Pruebe su predicado con los siguientes ejemplos: (substring? a es u Esta es una cadena. ) = #t 90

(substring? anillo Esta es una cadena. ) = #f (substring? Esta es una cadena ) = #t El procedimiento es el siguiente: (define substring? (lambda (sstr strng) (substring?-aux sstr strng (- (string-length strng) (string-length sstr))))) El procedimiento substring?-aux es el siguiente: (define substring?-aux (lambda (sstr strng acc) (cond ((zero? acc) #f) (else (or (string=? sstr (substring strng acc (+ acc (string-length sstr)))) (substring?-aux sstr strng (sub1 acc))))))) 2. Defina un procedimiento invierte-string que tome como argumento a una cadena y retorne dicha cadena con sus caracteres en orden reverso. El siguiente procedimiento podría serle de utilidad: (define substring-ref (lambda (strng n) (substring strng n (add1 n)))) Pruebe su procedimiento con: (invierte-string Jack y Jill ) = llij y kcaj (invierte-string padre y madre ) = erdam y erdap (invierte-string ) = Los procedimientos son los siguientes: 91

(define invierte-string (lambda (strng) (reverse-aux strng (string-length strng)))) (define reverse-aux (lambda (strng n) (cond ((zero? n) ) (else (string-append (substring-ref strng (sub1 n)) (reverse-aux strng (sub1 n))))))) 3. Una cadena es un palíndroma si su reverso es igual que la cadena original. Por ejemplo radar y oso son palíndromas. Defina un predicado palindroma? que evalúe si una cierta cadena dada es o no un palíndroma. Pruebe su predicado con: (palindroma? arroz daba abad zorra ) = #t (palindroma? radar y maiz ) = #f El procedimiento es el siguiente: (define palindrome? (lambda (strng) (string=? strng (string-reverse strng)))) 6.2 Begin Implícito El uso de begin nos permite evaluar varias expresiones de manera secuencial y retornar el valor de la última de ellas. Esto es útil si tenemos una expresión if que espera sólo una expresión en cada una de sus cláusulas. Hay ciertas formas especiales en Scheme que tienen un begin implícito construido dentro de su definición (p.ej., lambda, let, letrec y cond). Por ejemplo: (lambda (a b) (writeln a) (writeln b) (*ab)) 92

es lo mismo que (lambda (a b) (begin (writeln a) (writeln b) (*ab)) También, (let ((a 1) (b 4)) (writeln a) (writeln b) (* a b)) es lo mismo que (let ((a 1) (b 4)) (begin (writeln a) (writeln b) (*ab)) 6.3 Entrada y Salida Scheme tiene los siguientes procedimientos para entrada y salida: Procedimiento display newline write read Significado Imprime sin usar comillas dobles Mueveelcursoraliniciodelalínea siguiente Imprime con comillas dobles Se usa para introducir información a un programa El procedimiento read normalmente se usa como un procedimiento sin argumentos (llamado thunk en inglés) que se invoca encerrando entre paréntesis el nombre de la variable. 93

(define read-demo (lambda () (display Introduzca datos (escriba ACABE para terminar): ) (let ((response (read))) (cond ((eq? response ACABE) (display Gracias. Adios. )) (else (display Introdujo: ) (write response) (newline) (read-demo)))))) Ahora, veremos un procedimiento que determina si un cierto número se imprime o no. (define numeros-primos (lambda () (display Deme un numero: ) (let ((n (read))) (display (string-append Elnumero (number->string n))) (if (< n2)(display no es valido. ) (if (check-primo n 2) (display esunprimo. )(display no es un primo. ))) (newline) (display Deseas dar otro numero? ) (let ((response (read))) (if (eq? response si) (numeros-primos) (begin (display Eso es todo. ) (newline))))))) (define check-primo (lambda (n k) (cond ((= k n) #t) (else (and (not (zero? (remainder n k))) (check-primo n (add1 k))))))) 94

6.4 Problemas Propuestos 1. Defina un procedimiento acronimo que tome una cadena strng y regrese la siglas que corresponden al título dado. Para hacer el probema más interesante deberá ignorar las preposiciones at, the, in, of, and, for & with en la generación del acronimo. Evalúe su procedimiento con: (acronym The United States of America ) = USA (acronimo Association for Computing Machinery ) = ACM (acronimo Structure and Interpretation of Computer Programs ) = SICP (acronimo Tools with Artificial Intelligence ) = TAI (acronimo University of Alabama in Huntsville ) = UAH (acronimo University of California at Los Angeles ) = UCLA (acronimo Quod Erat Demonstrandum ) = QED 2. Escriba un programa que pida al usuario una cantidad de dinero. Por ejemplo: Para qué cantidad desea obtener cambio? $ El usuario deberá escribir una cantidad tal como 23.45. El programa dirá entonces cómo puede conformarse este monto en billetes de 100 pesos, de 20 pesos, de 10 pesos, de 5 pesos y de 1 pesos. Así mismo, considerará el uso de monedas de 25 centavos, de 10 centavos, de 5 centavos y de 1 centavo. La salida deberá decir algo como lo siguiente: Tu cambio es: 1 billete de 20 pesos 3 billetes de 1 peso 1 moneda de 25 centavos 2 monedas de 10 centavos El programa deberá preguntar al usuario si desea obtener cambio para otra cantidad. Si la respuesta es no, entonces deberá terminarla ejecución del programa. 95

3. Un tal reverendo Zeller desarrolló una fórmula para calcular el día de la semana para cualquier día dado del calendario Gregoriano. Las entradas del algoritmo se especifican de la siguiente manera: m es el mes del año, considerando a Marzo con m =1. Eneroy Febrero son los meses 11 y 12 del año anterior. d es el día del mes. y es el año del siglo. c es el siglo anterior. Por ejemplo, para el 4 de Julio de 1989, m =5,d =4,y = 89, y c = 19, mientras que el 25 de enero de 1989 se codifica como m = 11, d = 25, y = 88, y c = 19. El algoritmo para calcular el día de la semana es el siguiente: 1. Tomar la parte entera de (13m 1)/5. Llamar a esto a. 2. Tomar la parte entera de y/4. Llamar a esto b. 3. Tomar la parte entera de c/4. Llamar a esto e. 4. Calcular f = a + b + e + d + y 2c. 5. Hacer que r sea igual a f modulo 7. 6. r nos indica el día de la semana. Si r = 0, se trata de Domingo, si r = 1 se trata de Lunes y así sucesivamente. Escriba un programa llamado dia-semana que pida el mes, día y año. El mes debe introducirse de manera habitual: Enero es el mes 1 y Diciembre es el mes 12. El ao también debe ingresarse de manera normal (p.ej., 2001). El programa debe convertir estos datos en lo que necesite el algoritmo y calcular el día de la semana. La salida debe ser en el formato 14/12/2001 es un Viernes. El programa debe preguntar al usuario si desea ingresar otra fecha. Si el usuario responde que no, entonces el programa deberá terminar. (dia-semana) Introduzca el mes (1..12): 2 96

Introduzca el dia (1..31): 24 Introduzca el año: 2005 2/24/2005 es un Jueves Quieres dar otra fecha? si Introduzca el mes (1..12): 5 Introduzca el dia (1..31): 10 Introduzca el año: 1980 5/10/1980 es un Sabado Quieres dar otra fecha? si Introduzca el mes (1..12): 1 Introduzca el dia (1..31): 13 Introduzca el año: 1989 1/13/1989 es un Viernes Quieres dar otra fecha? si Introduzca el mes (1..12): 10 Introduzca el dia (1..31): 9 Introduzca el año: 1995 10/9/1995 es un Lunes Quieres dar otra fecha? no Eso es todo 4. Escriba un procedimiento interactivo llamado numero-perfecto que lea un número y determine si es perfecto o no. Un número es perfecto si la suma de todos sus factores, incluyéndose él mismo, genera el número mismo. La salida debe ser exactamente comose muestra a contiuación. (numero-perfecto) Dame un numero: 10 Los factores de 10 son: 1 2 5 El numero 10 no es perfecto. Quieres dar otro numero? si 97

Dame un numero: 6 Losfactoresde6son:123 Elnumero6esperfecto. Quieres dar otro numero? si Dame un numero: 28 Losfactoresde28son: 124714 El numero 28 es perfecto. Quieres dar otro numero? si Dame un numero: 496 Los factores de 496 son: 1 2 4 8 16 31 62 124 248 El numero 496 es perfecto. Quieres dar otro numero? no Bye, bye. 98