CC 1002: Introducción a la Programación Datos compuestos

Slides:



Advertisements
Presentaciones similares
Variables Prof. Gonzalo Pastor.
Advertisements

Encapsulamiento y Abstracción
Programación Orientada a Objetos usando C++
Tema 2: Los tipos de datos
Funciones1 PROGRAMACIÓN ESTRUCTURADA EN PSEUDÓCODIGO Profr. Miguel Rodríguez Hernández PROGRAMACIÓN MODULAR O FUNCIONAL.
Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.
FUNCIONES Conceptos básicos. Retorno de una función Clases de funciones. Paso de parámetros. Funciones y arrays.
Recursividad (2 clases) 1. Nivelación Funciones Menú Vectores String
Representación de reales y caracteres Mariano M. Moscato Organización del computador I verano 2008.
UNIDAD 7.
 Un lenguaje se puede definir como un conjunto de palabras y formas de expresión por medio de las cuales se comunican y relacionan miembros de una comunidad.
.a a 1 + Q Sean m y n números fraccionarios, [a;b] un representante de m y [c;d] un representante de n. Decimos m + n es la suma de m y n,
Tipos de datos básicos en Java
 El producto de dos fracciones es otra fracción cuyo numerador es el producto de los numeradores, y cuyo denominador es el producto de los denominadores,
PPTCES025MT21-A16V1 Clase Transformación algebraica MT-21.
Divisibilidad Nivel: 1º ESO Autor: Francisco José Sarrión Gavilán.
@ Angel Prieto BenitoApuntes Matemáticas 2º ESO1 U.D. 2 * 2º ESO FRACCIONES.
INSTITUCION EDUCATIVA LAS FLORES LIC. RAÚL EMIRO PINO S. GRADO SEXTO CODAZZI-CESAR
Números racionales Introducción Tipos de fracciones Fracción propiaNumerador < denominador Fracción impropiaNumerador > denominador Fracción igual a.
Números enteros y Racionales
Representación de números en binario
NÚMEROS REALES U. D. 1 * 4º ESO E. Angel Prieto Benito
Apuntes de Matemáticas 3º ESO
CLASE 18 SIMPLIFICACIÓN DE RADICALES.
Tema 6: Elementos de programación adicionales
¿Cómo almacenar datos dentro del computador?
Apuntes Matemáticas 2º ESO
Números Los números los podemos clasificar a partir de distintos conjuntos. Los números naturales: este conjunto se designa por IN y está formado por:
Apuntes Matemáticas 2º ESO
Todo archivo se guarda en el disco duro con extensión .py
LA ESCALA.
Tema 4 Elementos para el Desarrollo de Algoritmos
MULTIPLICAR Y DIVIDIR FRACCIONES.
Los Números Racionales
Apuntes de Matemáticas 3º ESO
Apuntes de Matemáticas 3º ESO
POTENCIAS Y RAÍCES.
Apuntes de Matemáticas 3º ESO
Clase7: Objetos y Clases
Apuntes de Matemáticas 3º ESO
Tema 6. Conceptos básicos de programación (Clase 2)
TUTORIAL PSeint.
print “Calcular área y perímetro de círculo”
MT-21 PPTCANMTALA07001V1 Clase Números.
LÓGICA DE PROGRAMACIÓN
POTENCIAS Y RADICALES U. D. 2 * 4º ESO E. Angel Prieto Benito
Unidad 3. Introducción a la programación
Operaciones con racionales
TEMA Nº 1 Conjuntos numéricos. Aprendizajes esperados: Utilizar y clasificar los distintos conjuntos numéricos en sus diversas formas de expresión, tanto.
Conjuntos numéricos. objetivos: Utilizar y clasificar los distintos conjuntos numéricos en sus diversas formas de expresión. recordar la operatoria básica.
Dra. Noemí L. Ruiz © Derechos Reservados Dra. Noemí L. Ruiz © Derechos Reservados Números Reales.
LOS NUMEROS. NUMEROS ENTEROS Por muchos, muchos años en tiempos pasados, hasta los más famosos matemáticos en Europa se negaron a aceptar la existencia.
Conjuntos numéricos: N, Z y Q
Apuntes de Matemáticas 3º ESO
1 Conjuntos numéricos Índice del libro Números naturales
Punto Flotante Además de los enteros, existen problemas que se desea modelar en la computadora que requieren de números fraccionarios, que en matemática.
Propiedades de los logaritmos
FRACCIONES: Interpretación
Arreglos en Java.
PUNTO FIJO - PUNTO FLOTANE
LOS NUMEROS. NUMEROS ENTEROS Por muchos, muchos años en tiempos pasados, hasta los más famosos matemáticos en Europa se negaron a aceptar la existencia.
Tema 6. Conceptos básicos de programación (Clase 2)
TEMA Nº 1 Conjuntos numéricos. Aprendizajes esperados: Utilizar y clasificar los distintos conjuntos numéricos en sus diversas formas de expresión, tanto.
CC 1002: Introducción a la Programación Clase 15: Estructuras mutables
Unidad 1 Lección 3: Números Enteros Lección 4: Fracciones
EXPRESIONES ALGEBRAICAS
Contenidos Potencias. Propiedades de las Potencias. Raíz y raíz cuadrada. Propiedades de las raíces. Orden en las operatorias (PAPOMUDAS)
Números Reales. Objetivos de la lección 1.Conocer los distintos subconjuntos de los números Reales 2.Identificar a qué conjuntos de los Reales pertenece.
Profesor del curso: UNIVERSIDAD NACIONAL DEL CENTRO DEL PERU 2019-I Facultad de Ingeniería de Sistemas 1.
SISTEMAS NUMERICOS “Introducción a la Programación” Rolando Montero.
Transcripción de la presentación:

CC 1002: Introducción a la Programación Datos compuestos Nelson Baloian, José A. Pino

Representación interna de valores float Los números “reales” se almacenan internamente en el computador con dos partes: Mantisa: parte con dígitos. Ejemplo con 4 bits: 1001 representa en realidad 0.1001 en binario, que equivale en decimal a 1x2-1 + 0x2-2 + 0x2-3 +1x2-4 , o sea 1x0.5 + 0x0.25 + 0x 0.125 + 1x0.0625 = 0.5625 (en decimal) En computadores usuales, la mantisa contiene 24 bits Exponente: un número entero con signo. La mantisa se debe multiplicar por 10 elevado al exponente. Por ejemplo, si el exponente es +5, la mantisa debe multiplicarse por 105

Representación interna de valores float En resumen, un número float se representa entonces con dos elementos: Con una mantisa aproximando la parte fraccionaria Con un exponente que da la “escala”. Ejemplo: 335.26 se representa con una mantisa binaria aproximando el decimal 0.33526, y un exponente +3 Otro ejemplo: 0.0000987 se representa con una mantisa binaria aproximando el decimal 0.987, y un exponente -4 → Los float son una aproximación a valores reales

Fracciones # sumaFracciones : int int int int -> float Escribir una función que sume dos fracciones: a/b con c/d # sumaFracciones : int int int int -> float # calcula suma de dos fracciones a/b y c/d # ej.: sumaFracciones(1,2,3,4) devuelve 1.25 def sumaFracciones (a,b,c,d): return (a*d + b*c) * 1.0 / b*d # Test epsilon = 0.000001 assert cerca(sumaFracciones(1,2,3,4),1.25, \ epsilon)

No es una buena solución Resultado no es una fracción Nos gustaría manejar fracciones como tales en python… Pero no existe un tipo de datos “fracción”… ¿Qué podemos hacer entonces?

Estructuras Struct: tipo de datos para encapsular un conjunto fijo de valores para constituir un valor único compuesto Los valores pueden ser de uno o más tipos Los valores están representados por atributos Ej.: Fracción: numerador y denominador

Otros ejemplos Número complejo: parte real y parte imaginaria Persona: Nombre de pila, apellido paterno, apellido materno, género, edad 

Usando structs import estructura estructura.crear("nombre", \ "atributo1 atributo2... atributoN") En nuestro caso: estructura.crear("fraccion","numerador denominador")

Una vez creada “fraccion” >>> f = fraccion (5, 3) --> fraccion(numerador=5, denominador=3) >>> f.numerador --> 5 >>> f.denominador --> 3

Receta de diseño Diseñar estructuras Plantilla que especifique las combinaciones de atributos a operar Cuerpo de la función

Diseño de estructuras import estructura # Disenno de la estructura # fraccion: numerador (int) denominador (int) estructura.crear("fraccion","numerador denominador") # Contrato # sumaFracciones: fraccion fraccion -> fraccion # Proposito # crear nueva fraccion que corresponda a la suma # de dos fracciones f1 y f2 # Ejemplo: # sumaFracciones(fraccion(1, 2), fraccion(3, 4)) # devuelve fraccion(10, 8)

Plantilla “Comentario” que lista todas las posibles combinaciones con las entradas de una función No se dice nada sobre las salidas La plantilla se puede usar para todas las funciones que tengan mismo tipo de parámetros

Plantilla de fracciones # Plantilla # def funcionConFracciones(fraccion1, fraccion2): # ...fraccion1.numerador...fraccion2.numerador ... # ...fraccion1.numerador...fraccion2.denominador # ...fraccion1.denominador...fraccion2.numerador #...fraccion1.denominador... fraccion2.denominador

Cuerpo def sumaFracciones(f1,f2): num = f1.numerador * f2.denominador \ + f1.denominador * f2.numerador den = f1.denominador * f2.denominador return fraccion(num, den) # Tests f12 = fraccion(1, 2) f34 = fraccion(3, 4) assert sumaFracciones(f12,f34) == fraccion(10,8)

Otro ejemplo: producto # Contrato #productoFracciones: fraccion fraccion -> fraccion # Proposito # generar fraccion que es resultado de multiplicar # dos fracciones f1 y f2 # Ejemplo # productoFracciones(fraccion(1,2),fraccion(3,4)) # devuelve fraccion(3,8)

Cuerpo de productoFracciones def productoFracciones(f1,f2): num = f1.numerador*f2.numerador den = f1.denominador*f2.denominador return fraccion(num,den) # Tests f12 = fraccion (1,2) f34 = fraccion (3,4) assert productoFracciones(f12,f34)==fraccion(3,8)

Otro ejemplo # Contrato # esMayorQue: fraccion fraccion -> bool # Proposito #generar True si primera fraccion es mayor que # la segunda # Ejemplo # esMayorQue(fraccion(1,2),fraccion(4,9)) # devuelve True

Cuerpo de esMayorQue def esMayorQue(f1,f2): return f1.numerador*f2.denominador > \ f1.denominador*f2.numerador # Tests f12 = fraccion (1,2) f49 = fraccion (4,9) assert esMayorQue(f12,f49)

Ejercicio para la casa Programar restaFracciones(f1,f2) Programar divisionFracciones(f1,f2) Programar mcd(i,j), que retorna el máximo común divisor de los enteros i y j. Programar simple(f), que simplifica la fracción f (sugerencia: use mcd() )

Leer capítulo 9 del apunte, secciones 9.1, 9.2, 9.3 Para la próxima clase (jueves) Leer capítulo 9 del apunte, secciones 9.1, 9.2, 9.3