Lenguajes de Programación Capítulo 2. Valores y Tipos

Tamaño: px
Comenzar la demostración a partir de la página:

Download "Lenguajes de Programación Capítulo 2. Valores y Tipos"

Transcripción

1 Lenguajes de Programación Capítulo 2. Valores y Tipos Carlos Ureña Almagro Curso Contents 1 Introducción 2 2 Tipos Primitivos Tipo Lógico Caracteres Naturales y Enteros Reales Tipos enumerados Tipos Compuestos Producto Cartesiano Unión y unión disjunta Aplicaciones Tipos recursivos Listas Árboles Equivalencia de tipos 34 1

2 6 El principio de completitud de tipos 35 creado October 10, 2011 página 2.2 / 35

3 1 Introducción El concepto de Valor. Un valor es una entidad que: Obtenemos como resultado de evaluar una expresión, o Podamos almacenar, o Incorporar a una estructura de datos, o Pasar como argumento a subprogramas, o Obtener como resultado de una función El concepto de Valor. En definitiva, un valor es cualquier entidad que pueda ser procesada de alguna manera mediante las instrucciones que cada lenguajes de programación incorpore. Ejemplos. Valores en Pascal (1) Valores primitivos (lógicos, caracteres, enumerados, enteros y reales) Valores compuestos (registros, arrays, conjuntos y ficheros) Punteros Ejemplos. Valores en Pascal (2) Referencias a variables (únicamente como parámetros a subprogramas) Subprogramas (procedimientos y funciones) Ejemplos. Valores en C. Valores primitivos (caracteres, enumerados, enteros y reales) Valores compuestos (registros, arrays) Punteros Subprogramas (funciones) creado October 10, 2011 página 2.3 / 35

4 El concepto de tipo Para hacer más tratable el conjunto de todos los valores posibles en cada lenguaje, clasificamos los valores en tipos. En principio, un tipo es, por tanto, un conjunto de valores. Sin embargo, y como veremos, un tipo es algo más. El concepto de tipo Normalmente, la agrupación de valores para formar tipos se hace teniendo en cuenta: un modelo matemático común la existencia de un conjunto común de operaciones aplicables a todos los valores del tipo. la existencia de un método común para asociar una representación como secuencia de bits a cada elemento del conjunto. Elementos de un tipo Un tipo es un conjunto de valores con: un modelo matemático asociado (un conjunto S) un conjunto de operaciones bien definido, cada una de ellas con un modelo matemático asociado (una función) un conjunto de algoritmos que operan sobre las secuencias e implementan las operaciones anteriores. una función (matemática) de representación que asocia secuencias de bits a los valores del conjunto S Representación de valores Para cada tipo A existirá una función matemática, biunívoca, bien definida, que asocia, a cada valor posible, su representación como una única secuencia finita de dígitos binarios. Representación de valores A la función se le llamará repr A, al conjunto de representaciones posibles se le llamará R A La función es biyectiva entre A y R A creado October 10, 2011 página 2.4 / 35

5 Representaciones ambigüas Cada valor de A tiene asociado un único valor de R A Una representación que no cumple esto es ambigua, ya que existirá algún valor con un conjunto de representaciones posibles. Representación de valores Valores distintos deben tener representaciones distintas: x = y = repr A (x) = repr A (y) Esto implica que existe la función repr 1 A es un único valor de A., es decir, que la interpretación de cada secuencia de bits en R A Ejemplo de representación Números naturales del 0 al 7: Cada uno se puede representar como una secuencia de tres bits, el más significativo primero. Ejemplo de Representación. Números naturales del 0 al 7 (A), y sus correspondientes representaciones (R A ) Número de elementos y tamaño Sea A un conjunto cualquiera: El número de valores distintos en A se nota como car(a) (por cardinalidad) Si las representaciones son todas del mismo tamaño, el número de bytes que tiene cada representación se nota como tam(a). creado October 10, 2011 página 2.5 / 35

6 Operaciones sobre los valores y su implementación Para cada tipo, existirá un conjunto de operaciones matemáticas (funciones) bien definidas, que actúan sobre dichos valores. Cada operación definida sobre los valores se corresponde (biunívocamente) con una operación equivalente definida sobre las representaciones de los valores. Ejemplo de Operación (sumar 1) y su implementación Ejemplo de operación (sumar 1). f : A A i f (i) = (i + 1) mod 8 donde: g : R A R A (a, b, c) g(a, b, c) = (a, b, c ) a = a xor (b and c) b = b xor c c = no(c) Implementación válida creado October 10, 2011 página 2.6 / 35

7 Dada una operación f : A A cualquiera, g será una implementación válida de f, si y solo si para todo valor x en A se cumple que: repr A ( f (x)) = g(repr A (x)) Clasificación de los tipos Tipos primitivos: lógicos, caracteres, naturales y enteros, reales, tipos enumerados Tipos compuestos: producto cartesiano, unión, aplicaciones, conjuntos de partes Tipos recursivos Descriptores de tipo Un descriptor de tipo es una frase (un trozo de texto) del lenguaje que describe un tipo de datos Hay descriptores de una sola palabra (tipos simples) hasta descriptores de cientos o miles de líneas (por ejemplo, la definición de clases) 2 Tipos Primitivos Tipos Primitivos Son los tipos más simples, en el sentido que contienen valores que no se pueden descomponer Lo anterior implica que cada valor de uno de estos tipos es tratado como un todo, no se puede acceder a una de sus partes independientemente de las otras. 2.1 Tipo Lógico Tipo Lógico Es el más sencillo de los tipos simples. Es el tipo formado por los dos valores true y false creado October 10, 2011 página 2.7 / 35

8 El conjunto está dotado de las operadores lógicos and, or, not Presente en la mayoría de los lenguajes (Pascal, Ada, C++, Java,C#, python) Representación ambigua de valores lógicos en C El lenguaje C no contempla este tipo Es usual en C el recurrir a otros tipos (enteros), para representar los valores lógicos. La representación basada en enteros es ambigua, lo cual hace fácil cometer errores. Representación ambigua de valores lógicos en C Existe valores que no son ni true ni false. t ypedef i n t l o g i c o ; c o n s t l o g i c o t r u e = 1 ; c o n s t l o g i c o f a l s e = 0 ; l o g i c o a = 5 ;.... i f ( a!= t r u e ) p r i n t f ( " a es f a l s e " ) ; El tipo lógico en varios lenguajes: Leng. Nombre Valores Ada Boolean True, False C++ bool true, false Java boolean true, false C# bool true, false Python bool True, False 2.2 Caracteres Caracteres Los valores de este tipo son el conjunto de caracteres imprimibles en pantalla, impresora, o cualquier dispositivo de salida. creado October 10, 2011 página 2.8 / 35

9 Usualmente se recurre al código ASCII, que define un conjunto de 128 caracteres básicos, y su forma de representarlos en 1 byte. Los lenguajes Ada, Pascal, C usan el código ASCII Códigos ASCII y Unicode El código ASCII esta limitado: solo contiene caracteres occidentales. Además, hay 128 códigos (del 128 al 255) con varias interpretaciones posibles, según el contexto. Los lenguajes modernos (Java, C#) recurren a la representación por el estándar UNICODE, de 2 bytes por carácter, y con caracteres arábigos, chinos, cirílicos, etc.. El tipo carácter en varios lenguajes Leng. Nombre Ada Character C++ char Java char C# char (en python no existe este tipo) 2.3 Naturales y Enteros Naturales y Enteros Estos tipos son subconjuntos finitos de los enteros y naturales. Estos subconjuntos contienen rangos de valores consecutivos, normalmente incluyendo al cero. La representación suele ser simplemente en binario (naturales) o en complemento a dos (enteros). Longitud predeterminada Algunos lenguajes fijan la longitud (en bits) de la representación de estos tipos Se prima ante todo la portabilidad, se pierde eficiencia. Longitud predeterminada En estos lenguajes, los rangos de valores de los tipos de datos enteros son conocidos a priori y fijos, determinados en la especificación del lenguaje. creado October 10, 2011 página 2.9 / 35

10 Longitud dependiente de la implementación Otros lenguajes no predeterminan la longitud de la representación (se permite que dependa de la implementación, S.O., hardware, etc?) Se permite mejorar la eficiencia, a costa de más complicado lograr portabilidad. Longitud dependiente de la implementación En estos casos, para lograr portabilidad deben de existir construcciones del lenguaje que permiten averiguar el rango de valores asociado a cada tipo. (normalmente esto ocurre en tiempo de compilación) Longitud y formato de la representación: Los lenguajes Ada, C y C++ no fijan la longitud (aunque se establecen algunas restricciones) Los lenguajes modernos (Java y C#) fijan la longitud. Tipos enteros en C/C++ Nombre R. (C) R.mín. signed char SCHAR_MIN - SCHAR_MAX ( 2 7, 2 7 ) [signed] short [int] SHRT_MIN - SHRT_MAX ( 2 15, 2 15 ) [signed] int INT_MIN - INT_MAX ( 2 15, 2 15 ) [signed] long [int] LONG_MIN - LONG_MAX ( 2 31, 2 31 ) El número de bits de la representación debe ser no decreciente El rango de valores debe contener al rango mínimo indicado Tipos naturales en C/C++ Nombre R. (C) R.mín. unsigned char 0 - UCHAR_MAX [0, 2 8 ) unsigned short [int] 0 - USHRT_MAX [0, 2 16 ) unsigned [int] 0 - UINT_MAX [0, 2 16 ) unsigned long [int] 0 - ULONG_MAX [0, 2 31 ) El número de bits de la representación debe ser no decreciente El rango de valores debe contener al rango mínimo indicado creado October 10, 2011 página 2.10 / 35

11 Tipos enteros y naturales en C/C++ char puede ser equivalente a unsigned char o a signed char, dependiendo de la implementación El valor mínimo y máximo indicado son constantes definidas en limits.h. En C++, se puede acceder mediante funciones a los valores mínimo y máximo: std::numeric_limits<t>.min() std::numeric_limits<t>.max() donde T es uno de los nombres de tipo indicados más arriba. (estas funciones están definidas en el archivo limits) Tipos enteros en Ada Nombre Short_Integer Integer Long_Integer Disponible opcionalmente siempre opcionalmente Los longitudes en bits de cada tipo no están fijas, pero deben ser no decrecientes. Los rangos deben de estar centrados en cero. El valor mínimo y máximo se puede acceder con T First y T Last, donde T designa el nombre de cualquiera de estos tipos. Tipos naturales en Ada Nombre Natural Positive Rango 0 - Integer Last 1 - Integer Last Como se observa, el rango de valores está ligado al rango de valores de los enteros. Tipos enteros en Java Nombre Rango byte [ 2 7, 2 7 ) short [ 2 15, 2 15 ) int [ 2 31, 2 31 ) long [ 2 63, 2 63 ) creado October 10, 2011 página 2.11 / 35

12 El numero de bits esta fijado por los rangos indicados. La representación debe ser en complemento a dos. Tipos enteros en C# Nombre Rango sbyte [ 2 7, 2 7 ) short [ 2 15, 2 15 ) int [ 2 31, 2 31 ) long [ 2 63, 2 63 ) El numero de bits esta fijado por los rangos indicados. Los valores minimo y máximo se pueden acceder como T MinValue y T MaxValue, donde T designa el nombre de cualquiera de estos tipos. Tipos naturales en C# Nombre Rango byte [0, 2 8 ) ushort [0, 2 16 ) uint [0, 2 32 ) ulong [0, 2 64 ) El numero de bits esta fijado por los rangos indicados. Los valores mínimo y máximo se pueden acceder como T.MinValue y T.MaxValue, donde T designa el nombre de cualquiera de estos tipos. Tipos enteros en Python No hay naturales, y hay dos tipos de enteros: Enteros (plain integers): coinciden con los long int de C, y por lo tanto, el rango asociado debe ser, como mínimo, desde hasta Enteros largos (long integers): de rango ilimitado (representados en memoria como una secuencia de dígitos de longitud suficiente para representar un número) (en este lenguaje no existe descriptores de tipos pues no hay declaración de variables) creado October 10, 2011 página 2.12 / 35

13 2.4 Reales Números reales Estos tipos representan subconjuntos finitos del conjunto de los números reales. Se suele usar la representación en coma flotante, por tanto con precisión adaptativa (mayor en el entorno de 1.0, decreciente al crecer el valor absoluto de los números). Números Reales Al igual que ocurre con los enteros, la representación puede estar preestablecida en el lenguaje (Java, C#), o no (Ada, C/C++). Si no está preestablecida, se usa la que mejor se adapta a la FPU de la CPU (en la actualidad suele ser el formato IEEE-754) Reales en C/C++ Se contemplan: float, double, long double La representaciones concretas no están especificadas, pero deben ser de precisión y rango no decrecientes. Reales en Ada Se contemplan: Float, (y, opcionalmente: Short_Float, Long_Float) La representaciones concretas no están especificadas, pero deben ser de precisión y rango no decrecientes. Reales en Java y en C# Ambos lenguajes adoptan el mismo convenio: El formato obligado es el establecido en la norma IEEE 754. Se contemplan: float (32 bits) double (64 bits). creado October 10, 2011 página 2.13 / 35

14 Reales en Python En este lenguaje solo hay un tipo para los números reales, cuya precisión y rango está dictado por el tipo flotante de máxima precisión que este directamente soportado por el hardware donde se ejecutan los programas. En la práctica lo anterior implica que el tipo tiene la precisión y rango de los double de C (en implementaciones del lenguaje basadas en C, que es lo más frecuente). 2.5 Tipos enumerados Tipos enumerados En el programa se incluye, asociado cada tipo enumerado, una secuencia de identificadores distintos. Cada identificador está biunivocamente asociado a un valor del tipo (representa el valor) Tipos enumerados Un tipo enumerado se pueden implementar en un programa como un conjunto de identificadores asociados a constantes de tipo enteros. Esta solución plantea problemas de ambigüedad de la representación y/o de la interpretación de los valores enteros Representación de tipos enumerados La representación de los tipos enumerados suele estar basada en los tipos naturales o enteros La selección de la representación se realiza automáticamente en tiempo de compilación, en función sobre todo del número de valores del tipo. Tipos enumerados en varios lenguajes C (ANSI +) y C++ typedef enum { id 1, id 2,...,id n } id tipo ; Ada type id tipo is { id 1,id 2,...,id n } ; creado October 10, 2011 página 2.14 / 35

15 Java (JDK 1.5 +) enum id tipo { id 1,id 2,...,id n } ; C# Enum id tipo { id 1,id 2,..., id n } ; Python: no está incorporado (se rechazó una propuesta de hacerlo) 3 Tipos Compuestos Tipos compuestos y álgebra de conjuntos Los tipos compuestos se obtienen al aplicar varios operadores del álgebra de conjuntos a otros tipos. 1. Producto cartesiano: (conjunto de pares construido a partir de dos conjuntos) 2. Unión y unión disjunta: (conjunto unión de otros dos conjuntos) 3. Aplicaciones: (conjunto de aplicaciones de un conjunto en otro) 3.1 Producto Cartesiano Si A y B son dos tipos (conjuntos) cualquiera, entonces podemos definir el tipo C como: C = A B En concreto, los valores de C son pares: C = { (a, b) t.q. a A y b B } El producto cartesiano es asociativo, lo cual implica que puede extenderse de forma natural a secuencias de conjuntos: C = A 1 A 2 A n (n > 1) Los elementos de C son ahora tuplas: C = { (a 1, a 2,..., a n ) t.q. a i A i ( i = 1... n) } El producto cartesiano es una construcción fundamental para la creación de tipos. Esta contemplado, de una forma u otra, en todos los lenguajes de programación. creado October 10, 2011 página 2.15 / 35

16 Operaciones sobre tuplas La operación fundamental sobre las tuplas es la consulta del i-ésimo elemento (C i ) (existe una función distinta C i para cada valor distinto de i, con i {1... n} C i A 1 A 2 A n A i (a 1, a 2,..., a n ) a i Esta operación se corresponde con lo que en matemáticas se conoce como una función de proyección Representación de las tuplas La forma de representar un tupla es concatenar las representaciones de sus elementos. Supongamos que a A y b B, y que repr A (a) = r a y repr B (b) = r b. En estas condiciones: repr A B ((a, b)) = r a r b (aquí, es un operador que actua sobre dos secuencias de bits y produce otra secuencia que es la concatenación de las originales). Cardinalidad y tamaño del producto cartesiano En el caso del producto cartesiano, dados dos conjuntos cualesquiera A y B, se cumple que: car(a B) = car(a) car(b) tam(a B) = tam(a) + tam(b) Conjuntos de tuplas en ML En algunos lenguajes se implementa el producto cartesiano tal cual: type A = i n t r e a l ; type C = i n t r e a l char i n t ; El problema es acceder a los elementos individuales de las tuplas (se accede con un índice numérico) Tuplas en Python Las tuplas están directamente soportadas en este lenguaje, sus elementos son accesibles usando un valor numérico que comienza en cero. Se incluye la tupla vacía Las tuplas homogéneas pueden verse como arrays creado October 10, 2011 página 2.16 / 35

17 Registros y estructuras Lo más usual es etiquetar cada componente de las tuplas con un identificador: Facilita las referencias a los elementos individuales de una tupla, independientemente de su posición, por tanto, mejora la facilidad de escritura y legibilidad de código, así como su fiabilidad. Las etiquetas forman parte del tipo: facilita la comprobación de tipos. Tuplas semejantes con etiquetas distintas forman tipos distintos. Registros y estructuras en Ada type C i s record edad : I n t e g e r ; peso : F l o a t ; end record ; Aquí, C = Integer Float. En este caso, las etiquetas asociadas a las dos componentes de las tuplas son edad y peso, respectivamente Registros y estructuras en C La estructura similar a la anterior sería como sigue: s t r u c t C { i n t edad ; f l o a t peso ; } ; Nota: el nombre del tipo es struct C Registros y estructuras en C ANSI /C++ En estos lenguajes una estructura se puede declarar como sigue: t ypedef s t r u c t { i n t edad ; f l o a t peso ; } C ; creado October 10, 2011 página 2.17 / 35

18 Registros y estructuras C++ Adicionalemtne, en C++, se puede usar una forma de declaración de clase que equivale a una struct: c l a s s C { p u b l i c : i n t edad ; f l o a t peso ; } ; Registros y estructuras en Java c l a s s C { p u b l i c i n t edad ; p u b l i c f l o a t peso ; } ; En este lenguaje se usa el mecanismo de definición de clases. Registros y estructuras en C# s t r u c t C { p u b l i c i n t edad ; p u b l i c f l o a t peso ; } ; Registros y estructuras en Python Este tipo de datos no está soportado directamente en el lenguaje (ocurre lo mismo en otros lenguajes parecidos) En las últimas versiones de Python, se puede usar el mecanismo de las clases, aunque hay que tener en cuenta que existe un único tipo (de nombre class) que comprende todas las estructuras posibles con cualquier conjunto de componentes. creado October 10, 2011 página 2.18 / 35

19 Ejemplo de clase como estructura en Python c l a s s Persona : edad = 0 peso = 0. 0 nombre = " " a l g u i e n = Persona ( ) a l g u i e n. nombre = " J o s e Perez " a l g u i e n. edad = 45 a l g u i e n. peso = p r i n t a l g u i e n. peso Unión y unión disjunta Unión y unión disjunta Estas construcciones son útiles cuando queremos considerar un valor que puede ser de un tipo entre varios. Es útil cuando se busca eficiencia en uso de memoria. Los lenguajes más modernos (Java, C#) no contemplan esto. En Python y otros lenguajes, el sistema de tipos permite en la práctica uniones disjuntas de forma implícita aunque no haya un mecanismo explícito. Unión Si A y B son dos tipos (conjuntos) cualquiera, entonces podemos definir el conjunto C como la unión de ambos: C = A B En concreto, los valores de C son los siguientes: C = { x t.q. x A x B } Una implementación bastante obvia de la unión consiste en representar cada elemento de la unión usando C usando alguna la representación repr A o repr B que corresponda. creado October 10, 2011 página 2.19 / 35

20 Unión: ambigüedad en la representación Si A y B no son disjuntos, puede ocurrir ambigüedad en la representación. Si x A B, entonces podemos usar tanto repr A como repr B para representarlo. En el lenguaje C/C++, esto no ocurre pues toda expresión tiene un tipo fijo conocido en tiempo de compilación (que determina la representación) luego todo valor producido al evaluar una expresión es de un tipo determinado. Unión: ambigüedad en la interpretación Puede ocurrir ambigüedad en la interpretación cuando los dos conjuntos R A y R B no son disjuntos. Ocurre cuando existe alguna secuencia de bits que puede ser interpretable como representación de un A o un B. En el lenguaje C/C++, este problema si puede darse Ambigüedad en la representación: esquema x A B repr A (x) = repr B (x) creado October 10, 2011 página 2.20 / 35

21 Unión. Ambigüedad en la interpretación. s R A R B a = repr 1 A (s) = repr 1 B (s) = b Unión en C En el lenguaje C se contempla la unión: union C { i n t edad ; f l o a t peso ; } ; Por si sola, esta construcción no es útil, esencialmente por los problemas de ambigüedad de la interpretación. Unión Disjunta Si A y B son dos tipos (conjuntos) cualquiera, entonces podemos definir el conjunto C como la unión disjunta de ambos: C = A + B = ({ f alse} A) ({true} B) es decir: C = { (b, x) t.q. (b = f alse x A) (b = true x B) } creado October 10, 2011 página 2.21 / 35

22 Unión disjunta de varios conjuntos (1) Los valores true y false actúan como etiquetas, que informan acerca de a que subconjunto de A + B (A ó B) pertenece cada valor. Los conjuntos de etiquetas pueden tener un número arbitrario de valores, y por tanto la unión disjunta se puede extender a una serie de conjuntos. Unión disjunta de varios conjuntos (2) Supongamos, por ejemplo, que A = {1, 2} y B = {2, 3}. En este caso, el conjunto A + B es: {( f alse, 1), ( f alse, 2), (true, 2), (true, 3)} Unión disjunta de varios conjuntos (2) Podemos definir la unión disjunta de n conjuntos: A 1 + A A n = ({e 1 } A 1 ) ({e 2 } A 2 ) ({e n } A n ) donde E = {e 1, e 2,..., e n } es un conjunto cualquiera de n valores, que se usan como etiquetas (todos estos valores han de ser del mismo tipo) Representación de la unión disjunta. Cada valor de la forma (e i, a) ( con a A i y e i E), perteneciente a una unión disjunta, se representa como una secuencia de bits obtenida al concatenar tres secuencias de bits: 1. La representación de e i 2. La representación de a 3. Una secuencia arbitraria de bits de relleno Representación de la unión disjunta Supongamos que U = A 1 + A A n (siendo el conjunto de etiquetas E = {e 1, e 2,..., e n } ), sea a A i. En estas condiciones: repr U (e i, a) = repr E (e i ) repr Ai (a) 0 }. {{.. 0 } n bits creado October 10, 2011 página 2.22 / 35

23 Donde n es el número de bits de relleno n = max(tam(a 1 ), tam(a 2 ),..., tam(a n )) tam(a i ) que hace que el tamaño de la representación sea fijo Cardinalidad y tamaño de la unión disjunta Respecto al tamaño y el número de elementos, se cumple que: car(a A n ) = car(a 1 ) + + car(a n ) tam(a A n ) = tam(e) + max(tam(a 1 ),..., tam(a n )) Operaciones de la unión disjunta Es posible consular la etiqueta o el valor asociado (proporcionando un entero i que identifica el componente que queremos), de forma independiente: C etiq A A n E (d, x) d C i A A n { A i x si ei = d (d, x) error en otro caso Implementación de la unión disjunta En lenguajes sin unión disjunta, podemos implementarla combinando unión y producto cartesiano: A A n (E A 1 ) (E A 2 ) (E A n ) = E (A 1 A 2 A n ) nótese que este conjunto incluye pares donde el valor de la etiqueta no se corresponde con el tipo del dato. Unión disjunta: posibles problemas (1/3) El esquema anterior puede presentar problemas: Las etiquetas permiten al programador resolver la ambigüedad en la interpretación de las representaciones, pero esto debe llevarse a cabo explícitamente en el programa, y por tanto puede hacerse erróneamente. creado October 10, 2011 página 2.23 / 35

24 Unión disjunta: posibles problemas (1/3) Es posible producir (por error) alguno de los valores del conjunto anterior que no están en la unión disjunta. Las representaciones de estos valores se interpretan erróneamente. Unión disjunta: posibles problemas (1/3) El conjunto de etiquetas puede tener un número de valores distinto del número de conjuntos que intervienen Unión disjunta en C/C++ Se debe combinar una struct y una union struct id tipo { E id etiqueta ; union { A 1 id 1 ; A 2 id 2 ; A n id n ; } ; } ; Ejemplo de unión disjunta en C s t r u c t T { i n t e t i q ; union { f l o a t f ; / e t i q == 1 / char c ; / e t i q == 2 / } ; } ; Implementación de la unión disjunta en Pascal Se establece una correspondencia entre valores de las etiquetas y tipos (no se comprueba en tiempo de ejecución) creado October 10, 2011 página 2.24 / 35

25 type id tipo = case id etiqueta : E of begin e 1 : ( id1 : A 1 ) ; e 2 : ( id2 : A 2 ) ; e n : ( idn : A n ) end Ejemplo de unión disjunta en Pascal type T = case e t i q : I n t e g e r o f begin 1 : ( f : Real ) ; 2 : ( c : Char ) end Implementación de la unión disjunta en Ada Este lenguaje contempla explícitamente la unión disjunta, asegurando que en tiempo de ejecución nunca se producen los problemas que aparecen en C o Pascal. Implementación de la unión disjunta en Ada type id tipo ( id etiq : E [ := expr ] ) is record case id etiq is when e 1 ==> id 1 : A 1 ; when e 2 ==> id 2 : A 2 ; when e n 1 ==> id n 1 : A n 1 ; [ when others ==> id n : A n ; ] end case end record Ejemplo de unión disjunta en Ada creado October 10, 2011 página 2.25 / 35

26 type T ( e t i q : I n t e g e r ) i s record case e t i q i s when 1 ==> f : Real ; when 2 ==> c : Char ; when o t h e r s ==> i : I n t e g e r ; end case end record 3.3 Aplicaciones Aplicaciones Si A y B son dos tipos (conjuntos) cualquiera, entonces podemos definir el tipo C como el conjunto de todas las aplicaciones de A en B C = A B En concreto, los valores de C son aplicaciones que tienen como dominio A, y como rango B Cardinalidad de A B El número de aplicaciones posibles de A en B es car(a B) = car(b) car(a) (al primer elemento de A se le puede asignar cualquiera de los car(b) elementos de B, igual para el segundo elemento de A, el tercero, y así sucesivamente hasta car(a) veces) Operaciones sobre las aplicaciones La operación esencial es la consulta de la imagen de un elemento del conjunto índice. C : (A B) A B (g, a) g(a) Representación de aplicaciones En un programa, una aplicación f A B se puede representar como: Un subprograma que acepta un parámetro de tipo A y devuelve un resultado de tipo B. (una función) Una tupla de tantos elementos como valores tenga A. Cada elemento de la tupla tiene la imagen por f de un elemento de A. (un array, o formación, o vector, o matriz) creado October 10, 2011 página 2.26 / 35

27 Las aplicaciones como arrays (formaciones) Cuando se usan formaciones como medio de representación: Al conjunto A se le suele llamar conjunto de índices, y a sus valores índices. Este conjunto debe ser numerable, es decir, podemos escribir sus elementos como A = {a 1, a 2,..., a n } donde n = car(a) (por ejemplo, esto implica que no pueden ser números reales). Las aplicaciones como arrays La representación de una aplicación f A B es la concatenación de las representaciones de las imágenes por f de cada uno de los elementos de A repr A B ( f ) = repr B ( f (a 1 )) repr B ( f (a 2 )) repr B ( f (a n )) Por tanto, se cumple que: tam(a B) = tam(b)tam(a) Posibles conjuntos de índices: El conjunto índice puede ser un rango de enteros, naturales, caracteres o un tipo enumerado En estos casos se les suele llamar vectores, o arrays unidimensionales. Arrays en C/C++ En estos lenguajes, el conjunto de índices es un rango de naturales que comienza en cero (incluido) i n t a [ 3 4 ] ; / / array de enteros, / / i n d i c e s del 0 a l 33 char b [ 2 0 ] ; / / array de 20 c a r a c t e r e s los arrays se representan en memoria como una secuencia entradas consecutivas en posiciones consecutivas de memoria. creado October 10, 2011 página 2.27 / 35

28 Arrays en Java y C# En estos lenguajes, los arrays son tipos-referencia, lo cual (en este contexto) quiere decir que un array se representa como una referencia (posiblemente nula) a una zona de memoria donde se almacena el numero de entradas y a continuación las entradas consecutivas. i n t [ ] a = new i n t [ 3 4 ] ; / / array de enteros, / / i n d i c e s del 0 a l 33 char [ ] b = new i n t [ 2 0 ] ; / / array de 20 c a r a c t e r e s Arrays en Ada El conjunto de índices puede ser un rango de valores de un tipo primitivo numerable (naturales, enteros, caracteres, lógicos, enumerados) type t 1 i s array ( ) o f C h a r a c t e r ; type t 2 i s array ( ) o f Persona ; type t 3 i s array ( a.. z ) o f F l o at ; type DiasSem i s ( lunes, martes, m i e r c o l e s, j u e v e s, v i e r n e s, sabado, domingo ) ; type t 3 i s Array ( DiasSem ) o f I n t e g e r ; type t 4 i s Array ( l u n e s.. v i e r n e s ) o f I n t e g e r ; se representan en memoria almacenando el tamaño seguido de la secuencia de entradas, almacenadas consecutivas. Arrays multidimensionales El conjunto índice puede ser el producto cartesiano de n rangos de entre los citados en la transparencia anterior, posiblemente rango distintos de tipos distintos. Cada índice es por tanto una tupla. Se les llama: matrices o arrays n-dimensionales. Se les puede ver también como arrays cuyo conjunto rango es a su vez un array (arrays de arrays), ya que se cumple que: (A B) C = A (B C) La representación es la que se deduce de la igualdad anterior Arrays multidimensionales en C/C++ En estos lenguajes, un array multidimensional se debe implementar como un array de arrays creado October 10, 2011 página 2.28 / 35

29 i n t a r r [ 5 ] [ 1 0 ] ; aquí arr es una variable de tipo array con 10 entradas: cada una de ellas es un array de 5 enteros. Todos los datos se almacenan de forma consecutiva en memoria. Arrays multidimensionales en Ada Se pueden tener arrays de arrays, o bien usar una construcción mas simple en el cual se expresa que los subíndices son tuplas. type Array5 i s Array ( ) o f I n t e g e r ; type ArrMultidim1 i s Array ( ) o f Array5 ; type ArrMultidim2 i s Array ( 0.. 9, ) o f I n t e g e r ; estos tipos denotan arrays con 10 entradas: cada una de ellas es un array de 5 enteros. Arrays multidimensionales en Java y C# Se pueden declarar como arrays de arrays de la siguiente forma: i n t [ ] [ ] a = new i n t [ 1 0 ] [ 5 ] ; / / Java y C# este descriptor de tipo corresponde al tipo de los arrays con 10 entradas, siendo cada una de ellas un array de 5 enteros (nótese que los tamaños van al revés que en C) Arrays dinámicos En algunos casos, el conjunto de índices es heterogéneo, por ejemplo, podemos considerar todos los arrays unidimensionales con índices enteros ({0, 1,..., n 1} B) n=1 es decir, este tipo son todos los arrays de 0 elementos, o de 1 elementos, o de 2 elementos, etc... Arrays dinámicos En estos casos, el tamaño de la representación no es igual para todas los arrays. Se les suele llamar arrays dinámicos La representación incluye una componente que proporcione información sobre que valores son índices correctos (es decir, cual es la longitud del array). En caso contrario, ocurrirá una ambigüedad en la interpretación. creado October 10, 2011 página 2.29 / 35

30 Para que una secuencia de este tipo pueda ser interpretada correctamente y de forma eficiente, su parte inicial debe codificar la longitud. Existe una operación que consiste en consultar el número de elementos de un array Arrays dinámicos en C/C++ En los lenguajes C/C++, estos arrays se representan como punteros a la secuencia de elementos. No están dotados con información sobre la longitud, que debe de almacenarse por separado y ser tenida en cuenta Esto provoca muchos problemas de fiabilidad por accesos fuera de los límites de los arrays Existen librerías (como la STL) que si proporcionan arrays fiables Arrays dinámicos en Ada Un ejemplo de descriptor de tipo para arrays dinámicos de índices enteros y elementos de tipo carácter es este: type ArrDin i s Array ( I n t e g e r range <>) o f C h a r a c t e r ; Se indica que el tipo comprende todos los arrays de caracteres cuyos índices son rangos finitos de enteros. Al igual que los arrays normales, se pueden usar otros tipos como tipo índice. Arrays dinámicos en Java/C# Todos los arrays en Java y C# (al ser de tipos-referencia) pueden considerarse como dinámicos : char [ ] a ; a = new i n t [ 2 0 ] ; a = new i n t [ 3 0 ] ; / / e l array a ha cambiado de tamaño Arrays dinámicos dentados en Java y C# En estos lenguajes podemos tener arrays de arrays dinámicos en estos casos, los (sub-)arrays que forman el array global pueden tener distinta longitud (incluyendo longitud 0), se denominan arrays dentados (jagged arrays) char [ ] [ ] a ; / / array que c o n t i e n e 20 a r r a y s dinámicos de c a r a c t e r e s a [ 0 ] = new i n t [ 1 0 ] ; a [ 1 ] = new i n t [ 2 0 ] ; creado October 10, 2011 página 2.30 / 35

31 Arrays rectangulares en C# Este lenguaje incorpora una forma especifica de indicar que un array es multidimensional (al igual que los arrays multidimensionales de Ada o C++) en lugar de un array de arrays posiblemente dentado. char [, ] a ; / / array r e c t a n g u l a r a = new i n t [ 1 0, 2 0 ] ; a = new i n t [ 2 0, 1 ] ; se puede generalizar a mas de dos subindices. Las aplicaciones como diccionarios Existen otras posibilidades para el conjunto índice, como las cadenas de caracteres (p.ej. en Perl). En Python se pueden usar como conjunto de índices conjuntos heterogéneos de enteros, flotantes, cadenas o tuplas. En estos casos no se usa la representación con arrays (dado que el conjunto de índices posibles tiene una cardinalidad elevada, y no todos ellos tienen asociada una imagen). La representación no tiene longitud fija. A estas aplicaciones se les suele llamar diccionarios 4 Tipos recursivos Los tipos recursivos son los basados en listas y árboles. Tienen una representación con un tamaño que no es igual para todos los valores posibles. Se les suele llamar estructuras de datos dinámicas 4.1 Listas El tipo recursivo más sencillo son las listas homogéneas de elementos. Si A es un tipo cualquiera, el conjunto de las listas de A es el menor conjunto L que cumple: L = {null} + (A L) Donde null es un valor especial, arbitrario, y donde menor se refiere a menor en el sentido de la inclusión de conjuntos. Si se cumple esto, decimos que: L = listas(a) La anterior definición de las listas implica que, si l listas(a), entonces una (y solo una) de estas dos condiciones se deben cumplir: creado October 10, 2011 página 2.31 / 35

32 l = ( f alse, null) en este caso decimos que l es la lista vacía l = (true, (a, l )), donde a A y l listas(a) en este caso, decimos que: a es la cabecera de l l es el resto de l Operaciones sobre listas Una de las operaciones más frecuentes sobre las listas es la consulta sobre si la lista es la lista vacía o no vacia listas(a) { f alse, true} (b, x) not(b) Operaciones sobre listas Otras operaciones son la consulta de la cabecera y del resto: cab listas(a) {null} A (true, (a, l)) a resto listas(a) {null} A (true, (a, l)) l Listas en varios lenguajes En C++, Java y C# 1. En C++, la libreria STL incluye las plantillas para clases list, que es un tipo de contenedor (container class) que contiene una secuencia de valores arbitrarios. 2. En Java, existe la clase List como un tipo de colección (implementaciones del interfaz AbstractCollection en java.util), en concreto constituye una secuencia de referencias a instancias de cualquier clase. 3. En C#, existe la plantilla para clases List (en el namespace System.Collections.Generic) Listas en Python Este lenguaje incorpora las listas como tipo de datos, y permite expresiones de tipo lista. Las listas son heterogéneas: sus elementos pueden ser de tipos distintos y arbitrarios creado October 10, 2011 página 2.32 / 35

33 Las listas son accesibles con un índice numérico, que comienza en cero para el primer elemento. Esto le proporciona la posibilidad de ser usadas como arrays a todos los efectos. Las expresiones de tipo lista se escriben usando corchetes que encierran secuencias de expresiones separadas por comas. Listas en Python Incorpora bastantes operaciones: 1. acceso de lectura/escritura a elementos arbitrarios 2. extracción de sub-listas (slices) 3. concatenación de listas para formar otras 4. inserción de elementos o listas en listas 4.2 Árboles Árboles binarios Sea A un conjunto cualquiera, el conjunto de los árboles binarios con elementos de tipo A, es el menor conjunto T que cumple: T = {null} + (A T T) En este caso, se escribe: L = arboles-bin(a) Árboles binarios Según la definición anterior, si t es un árbol binario con elementos de tipo A, solo una de estas dos condiciones se cumple: t = ( f alse, null) decimos que t es el árbol vacío t = (true, (a, t izq, t der )) decimos que: a es la raíz de t, t izq es el subárbol izquierdo de t t der es el subárbol derecho de t creado October 10, 2011 página 2.33 / 35

34 Árboles n-arios Un árbol binario, si no está vacío, tiene dos subárboles. Esta definición puede generalizarse a árboles con n subárboles (árboles n-arios). T = {null} + (A } T T {{ T } ) n Finalmente, podemos considerar árboles donde el número de subárboles no es fijo T = {null} + (A listas(t)) Operaciones sobre árboles Las operaciones básicas más frecuentes son: Consulta sobre si un árbol está vacío o no Consulta del elemento de A en la raíz de un árbol (si no está vacío) Consulta del i-ésimo subarbol de un árbol (si no está vacío) Representación de tipos recursivos: Hay dos opciones: Usando secuencias contiguas de bits, de tamaño no fijo. La representación en memoria suele hacerse por bloques de bits no contiguos, para mejorar la eficiencia en tiempo de las actualizaciones. (se verá más adelante) Tipos recursivos en los lenguajes de programación Los lenguajes imperativos no contemplan estos tipos (aunque se pueden y suelen implementar usando tipos definidos por el usuario y/o clases, a partir TADs) Los lenguajes funcionales suelen incorporar construcciones explícitas para listas y árboles. Tipos recursivos en los lenguajes de progr. Ejemplo en ML Supongamos que queremos designar con arbol a los árboles binarios de enteros (int). Se declararía en ML como: creado October 10, 2011 página 2.34 / 35

35 datatype a r b o l = v a c i o n o v a c i o o f ( i n t a r b o l a r b o l ) ; 5 Equivalencia de tipos En los lenguajes de programación es necesario saber cuando dos valores pertenecen a tipos equivalentes o no La forma de determinar si dos tipos son equivalentes constituye el mecanismo de equivalencia de tipos de un lenguaje. Equivalencia estructural. Dos tipos A y B son equivalentes estructuralmente si contienen los mismos valores (es decir A = B) o bien existe una correspondencia biunívoca trivial entre ambos conjuntos de valores En estos casos escribimos A B Equivalencia estructural. Existirá una correspondencia trivial cuando: Ambos tipos son primitivos, y contienen los mismos valores Ambos tipos son compuestos o recursivos, y están definidos con el mismo operador de conjuntos, aplicado a conjuntos que a su vez son estructuralmente equivalentes entre ellos. Equivalencia estructural Tipos compuestos y recursivos Dados cuatro tipos arbitrarios A,B,A,B, en donde A A y B B, entonces: se cumple que: A B A B A + B A + B A B A B listas(a) listas(a ) arboles(a) arboles(a ) creado October 10, 2011 página 2.35 / 35

36 Equivalencia nominal Cada valor manejado en un programa tiene asociado a un tipo. Este tipo puede: Tener asociado un identificador (su nombre), se dice que es un tipo con nombre. No tener asociado un identificador, pero si una declaración donde se especifica su estructura (es un tipo anónimo) Equivalencia nominal Dos tipos con nombre son equivalentes nominalmente si sus nombres coinciden. Dos tipos anónimos son equivalentes nominalmente si su estructura se define en la misma declaración (la equivalencia nominal implica equivalencia estructural). Valoracion de las formas de equivalencia de tipos La equivalencia nominal es más fácil de implementar, y además produce programas más fáciles de comprender y menos sujetos a errores. La mayoría de los lenguajes modernos usan equivalencia nominal en la mayoría de los casos. En algunos casos concretos se usa equivalencia estructural (por ejemplo, en el paso a subprogramas de parámetros por referencia de tipo array). Tiene la ventaja de que el programa es más conciso. Equivalencia de tipos en varios lenguajes. C/C++ equivalencia estructural (excepto clases en C++, con equivalencia nominal). Ada equivalencia nominal Jaca, C#: equivalencia nominal Hay excepciones puntuales. 6 El principio de completitud de tipos El principio de completitud de tipos debería ser seguido en cualquier lenguaje. Establece que: Ninguna operación debería ser prohibida (arbitrariamente) a valores de un tipo determinado. Un ejemplo en el que no se cumple: Una función en C puede devolver un valor de cualquier tipo, excepto el tipo array. creado October 10, 2011 página 2.36 / 35

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial. Tipos de Datos Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial. Entrada de datos Procesamientos de datos Salida de resultados Los

Más detalles

Definición de Memoria

Definición de Memoria Arquitectura de Ordenadores Representación de Datos en Memoria Abelardo Pardo abel@it.uc3m.es Universidad Carlos III de Madrid Departamento de Ingeniería Telemática Definición de Memoria DRM-1 La memoria

Más detalles

Elementos de un programa en C

Elementos de un programa en C Elementos de un programa en C Un programa en C consta de uno o más archivos. Un archivo es traducido en diferentes fases. La primera fase es el preprocesado, que realiza la inclusión de archivos y la sustitución

Más detalles

Principios de Computadoras II

Principios de Computadoras II Departamento de Ingeniería Electrónica y Computadoras Operadores y Expresiones rcoppo@uns.edu.ar Primer programa en Java 2 Comentarios en Java Comentario tradicional (multi-línea) Comentario de línea Comentario

Más detalles

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

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Unidad Didáctica 2 Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 1.0.3 Índice

Más detalles

TIPO DE DATO ABSTRACTO (TDA)

TIPO DE DATO ABSTRACTO (TDA) TIPO DE DATO ABSTRACTO (TDA) Ing. Eduard Antonio Lozano Córdoba Nota: Toda la información fue copiada de: Libros físicos e Internet Actividad Extra Clases #include #include int binario(int

Más detalles

Expresiones y sentencias

Expresiones y sentencias Expresiones y sentencias Expresión Construcción (combinación de tokens) que se evalúa para devolver un valor. Sentencia Representación de una acción o una secuencia de acciones. En Java, todas las sentencias

Más detalles

Capítulo 6. Asociaciones y Declaraciones.

Capítulo 6. Asociaciones y Declaraciones. Capítulo 6. Asociaciones y Declaraciones. Lenguajes de Programación Carlos Ureña Almagro Curso 2011-12 Contents 1 Asociaciones, entornos y ámbitos 2 2 Declaraciones y definiciones 6 3 Definiciones de valores,

Más detalles

FUNDAMENTOS DE INFORMÁTICA

FUNDAMENTOS DE INFORMÁTICA FUNDAMENTOS DE INFORMÁTICA Tema 1 Introducción a la Programación en Visual Basic Departamento de Ingeniería de Sistemas y Automática Universidad de Vigo undamentos de Informática. Departamento de Ingeniería

Más detalles

Estructura de Datos: Archivos

Estructura de Datos: Archivos Estructura de Datos: Archivos Registros (record) Un registro es una estructura que consiste de un número fijo de componentes llamados campos. Los campos pueden ser de diferentes tipos y deben tener un

Más detalles

4. Operadores Operador asignación

4. Operadores Operador asignación Programación orientada a objetos con Java 43 4. Operadores Objetivos: a) Describir los operadores (aritméticos, incrementales, de relación, lógicos y de asignación) y los tipos de dato primitivos sobre

Más detalles

Tipos de Datos Estructurados

Tipos de Datos Estructurados - Unidad 3 Tipos de Datos Estructurados 1 Tipos de Datos Compuestos en C 2 Arreglos (1) Un arreglo (array) una colección homogénea de datos simples ó compuestos, que se referencian con un nombre comú,

Más detalles

TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS

TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS Una vez que ya sabes crear tus propios programas, vamos a analizar los fundamentos del lenguaje de programación C. Este capítulo incluye además los siguientes temas:

Más detalles

Manual de turbo pascal

Manual de turbo pascal Universidad Nacional Experimental De Los Llanos Occidentales Ezequiel Zamora UNELLEZ-Barinas Manual de turbo pascal Bachilleres: Martinez Ninibeth C.I:20.867.002 Mora Yaco C.I:17.205.073 Estructura de

Más detalles

Tema 2. El lenguaje JAVA

Tema 2. El lenguaje JAVA Tema 2. El lenguaje JAVA Nomenclatura habitual Variables Tipos de variables Tipos primitivos Referencias Arrays Operadores Operadores de Java Precedencia de operadores Sentencias de control Sentencias

Más detalles

Datos y tipos de datos

Datos y tipos de datos Datos y tipos de datos Dato Representación formal de hechos, conceptos o instrucciones adecuada para su comunicación, interpretación y procesamiento por seres humanos o medios automáticos. Tipo de dato

Más detalles

Constantes. Las constantes no cambian durante la ejecucion de un programa en C++, en C++ existen 4 tipos de constantes:

Constantes. Las constantes no cambian durante la ejecucion de un programa en C++, en C++ existen 4 tipos de constantes: Constantes Las constantes se pueden declarar con la palabra reservada const y se le asigna un valor en el momento de la declaracion, este valor no se puede modificar durante el programa y cualquier intento

Más detalles

2.2 Nombres, Ligado y Ámbito

2.2 Nombres, Ligado y Ámbito 2.2 Nombres, Ligado y Ámbito Ligado estático y dinámico, reglas de ámbito y prueba de tipos. Conceptos Nombres e Identificadores Variables Tipos Ámbito Constantes Nombres Identificador que designa en el

Más detalles

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

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo Algoritmos En general, no hay una definición formal de algoritmo. Muchos autores los señalan como listas de instrucciones para resolver un problema abstracto, es decir, que un número finito de pasos convierten

Más detalles

Lección 2 Introducción al lenguaje C

Lección 2 Introducción al lenguaje C Lección Introducción al lenguaje C Decimal Binario Hexadecimal A B C D E F Octal Equivalencia entre decimal, binario, hexadecimal y octal. Código ASCII (American Standard Code for Information Interchange)

Más detalles

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA APUNTES DE JAVA FUNCIONAMIENTO DE UN PROGRAMA Assembler Ensamblador Ejecuta Programador Programa fuente BASIC Interprete Ejecuta C, C++, Pascal Compilador Compila Ejecuta Programa fuente Programa Objeto

Más detalles

SISTEMAS INFORMÁTICOS PROGRAMACION I - Contenidos Analíticos Ing. Alejandro Guzmán M. TEMA 2. Diseño de Algoritmos

SISTEMAS INFORMÁTICOS PROGRAMACION I - Contenidos Analíticos Ing. Alejandro Guzmán M. TEMA 2. Diseño de Algoritmos TEMA 2 Diseño de Algoritmos 7 2. DISEÑO DE ALGORITMOS 2.1. Concepto de Algoritmo En matemáticas, ciencias de la computación y disciplinas relacionadas, un algoritmo (del griego y latín, dixit algorithmus

Más detalles

El lenguaje C. 1. Identificadores, constantes y variables

El lenguaje C. 1. Identificadores, constantes y variables Principios de Programación El lenguaje C 1. Identificadores, constantes y variables 1.1. Conceptos de memoria Los nombres de variable como x, y, suma corresponden a localizaciones o posiciones en la memoria

Más detalles

Laboratorio de Arquitectura de Redes. Punteros en lenguaje C

Laboratorio de Arquitectura de Redes. Punteros en lenguaje C Laboratorio de Arquitectura de Redes Punteros en lenguaje C Punteros en lenguaje C Definición Declaración e inicialización de punteros Operadores de punteros: «*» y «&» Operaciones con punteros Operaciones

Más detalles

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

Práctica 3. Paso de parámetros entre subrutinas. 3. Consideraciones sobre el paso de parámetros Práctica 3. Paso de parámetros entre subrutinas 1. Objetivo de la práctica El objetivo de esta práctica es que el estudiante se familiarice con la programación en ensamblador y el convenio de paso de parámetros

Más detalles

Tipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos

Tipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos Algoritmos y Estructuras de Datos I 1 cuatrimestre de 009 Departamento de Computación - FCEyN - UBA Programación funcional - clase Tipos algebraicos Tipos algebraicos y abstractos ya vimos los tipos básicos

Más detalles

Informática Ingeniería en Electrónica y Automática Industrial

Informática Ingeniería en Electrónica y Automática Industrial Informática Ingeniería en Electrónica y Automática Industrial Entrada y salida estándar V1.3 Autores Entrada y salida estándar Entradas y salidas Salida con formato: printf() Entrada de datos con formato:

Más detalles

Laboratorio de Arquitectura de Redes. Entrada y salida estándar

Laboratorio de Arquitectura de Redes. Entrada y salida estándar Laboratorio de Arquitectura de Redes Entrada y salida estándar Entrada y salida estándar Entradas y salidas Salida con formato: printf() Entrada de datos con formato: scanf() El buffer de teclado Entrada

Más detalles

Algoritmos y programas. Algoritmos y Estructuras de Datos I

Algoritmos y programas. Algoritmos y Estructuras de Datos I Algoritmos y programas Algoritmos y Estructuras de Datos I Primer cuatrimestre de 2012 Departamento de Computación - FCEyN - UBA Programación funcional - clase 1 Funciones Simples - Recursión - Tipos de

Más detalles

Ficha de Aprendizaje N 13

Ficha de Aprendizaje N 13 Ficha de Aprendizaje N 13 Curso: Lógica y lenguaje de programación Tema: Fundamentos de programación Duración: 2 horas pedagógicas Logros de aprendizaje Identifica los diferentes tipos de operadores que

Más detalles

Programación. Test Autoevaluación Tema 3

Programación. Test Autoevaluación Tema 3 Programación Test Autoevaluación Tema 3 Autores: M. Paz Sesmero Lorente Paula de Toledo Heras Fco. Javier Ordoñez Morales Juan Gómez Romero José A. Iglesias Martínez José Luis Mira Peidro SOLUCIONES 1.

Más detalles

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 2 - Introducción al lenguaje Java, identificadores y comentarios. Carlos Montenegro Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 1. Introducción: Java tiene como todos

Más detalles

Curso de Programación Avanzada en C

Curso de Programación Avanzada en C Curso de Programación Avanzada en C Copyright, 1996 Universidad Sim on Bol ivar 1 Prof. Mariela J. Curiel Contenido del Curso Conceptos BásicosB Estructuras de Control Arreglos Otros tipos de datos derivados

Más detalles

Instituto Tecnológico de Celaya

Instituto Tecnológico de Celaya CADENAS DE CARACTERES Hasta ahora se han manejado variables de tipo caracter cuyo valor es un sólo caracter. En algunos casos, sin embargo, es necesario usar variables cuyos valores sean un conjunto (cadena)

Más detalles

1. (F, +) es un grupo abeliano, denominado el grupo aditivo del campo.

1. (F, +) es un grupo abeliano, denominado el grupo aditivo del campo. Capítulo 5 Campos finitos 5.1. Introducción Presentaremos algunos conceptos básicos de la teoría de los campos finitos. Para mayor información, consultar el texto de McEliece [61] o el de Lidl y Niederreiter

Más detalles

Fundamentos de JAVA. Angel Kuri Enero, /2/2006

Fundamentos de JAVA. Angel Kuri Enero, /2/2006 Fundamentos de JAVA Angel Kuri Enero, 2006 Enunciados y Expresiones Los siguientes son enunciados sencillos: int i = 1 import java.awt.font System.out.println( Esta moto es una + color + + marca); m.enginestate

Más detalles

UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO.

UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO. UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO. TRUJILLO 1.- Resumen de Prog1 Comentarios es C++ Declaraciones de variables.

Más detalles

APUNTADORES. Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable.

APUNTADORES. Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable. APUNTADORES Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable. No hay que confundir una dirección de memoria con el contenido

Más detalles

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta Centro Asociado Palma de Mallorca Antonio Rivero Cuesta La Sintaxis de Java I... 5 Tipos de datos... 6 Tipos de datos simples... 7 Operadores... 11 Operadores Aritméticos... 12 Operadores relacionales...

Más detalles

Estructuras de Datos Declaraciones Tipos de Datos

Estructuras de Datos Declaraciones Tipos de Datos Departamento de Informática Universidad Técnica Federico Santa María Estructuras de Datos Declaraciones Tipos de Datos Temas: 2-3-4 IWI-131, paralelo 01 Profesor: Teddy Alfaro O. Lenguaje de Programación

Más detalles

TEMA 7: Ficheros. TEMA 7: Ficheros. 7.1.-Concepto de fichero

TEMA 7: Ficheros. TEMA 7: Ficheros. 7.1.-Concepto de fichero TEMA 7: Ficheros 7.1.-Concepto de fichero Todas las estructuras de datos que hemos visto hasta ahora utilizan memoria principal. Esto tiene dos limitaciones importantes: 1. Los datos desaparecen cuando

Más detalles

Tema 3. Tipos de datos simples

Tema 3. Tipos de datos simples Tema 3. Tipos de datos simples Contenido del tema: Concepto de tipo. Tipos simples. Operadores. Expresiones. Semántica. Tipos y expresiones en lenguaje C++ Francisco J. Veredas Dpto. Lenguajes y Ciencias

Más detalles

DOCUMENTACIÓN PARA EL TRABAJO CON LA PLATAFORMA GUADALBOT

DOCUMENTACIÓN PARA EL TRABAJO CON LA PLATAFORMA GUADALBOT DOCUMENTACIÓN PARA EL TRABAJO CON LA PLATAFORMA GUADALBOT I.E.S VIRGEN DE LAS NIEVES Programación C para microcontroladores La función printf Índice de contenidos Introducción...2 La función printf...2

Más detalles

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main. LENGUAJE C CARACTERISTICAS DEL LENGUAJE 'C' El lenguaje 'C' se conoce como un lenguaje compilado. Existen dos tipos de lenguaje: interpretados y compilados. Los interpretados son aquellos que necesitan

Más detalles

TUTORIAL PSEINT. Ing. Ronald Rentería Ayquipa. Fundamentos de Programación

TUTORIAL PSEINT. Ing. Ronald Rentería Ayquipa. Fundamentos de Programación TUTORIAL PSEINT Ing. Ronald Rentería Ayquipa Fundamentos de Programación PSEINT Página Oficial: http://pseint.sourceforge.net/ Es un software que interpreta pseudocódigo. Permite la generación de diagramas

Más detalles

En matemáticas el concepto de conjunto es considerado primitivo y no se da una definición de este, por lo tanto la palabra CONJUNTO debe aceptarse

En matemáticas el concepto de conjunto es considerado primitivo y no se da una definición de este, por lo tanto la palabra CONJUNTO debe aceptarse En matemáticas el concepto de conjunto es considerado primitivo y no se da una definición de este, por lo tanto la palabra CONJUNTO debe aceptarse lógicamente como un término no definido. Un conjunto se

Más detalles

Aritmética de Enteros

Aritmética de Enteros Aritmética de Enteros La aritmética de los computadores difiere de la aritmética usada por nosotros. La diferencia más importante es que los computadores realizan operaciones con números cuya precisión

Más detalles

Tema 10: Tipos de datos definidos por el usuario

Tema 10: Tipos de datos definidos por el usuario Tema 10: Tipos de datos definidos por el usuario Indice 1. Introducción 2. Registros 2.1. Elementos de un registro 2.2 Arrays de registros 2.3. Registros con arrays 2.4. Registros con registros 2.5. Paso

Más detalles

Objetivos de la sesión. Aplicación de consola 7/30/11. Código con que se inicia un programa en Visual C# (aplicación de consola)

Objetivos de la sesión. Aplicación de consola 7/30/11. Código con que se inicia un programa en Visual C# (aplicación de consola) Objetivos de la sesión Entender el tipo de programas que se pueden realizar con aplicaciones de consola. Conocer el concepto de variable, la forma en que se declaran y su utilización. Conocer la forma

Más detalles

Java para programadores

Java para programadores Java para programadores Java y Servicios Web I Master en Ingeniería Matemática Manuel Montenegro Dpto. Sistemas Informáticos y Computación Desp. 467 (Mat) montenegro@fdi.ucm.es Contenidos Variables. Tipos

Más detalles

Capítulo 4. Lógica matemática. Continuar

Capítulo 4. Lógica matemática. Continuar Capítulo 4. Lógica matemática Continuar Introducción La lógica estudia la forma del razonamiento, es una disciplina que por medio de reglas y técnicas determina si un teorema es falso o verdadero, además

Más detalles

Programación en Visual Basic Ricardo Rodríguez García

Programación en Visual Basic Ricardo Rodríguez García Manual Básico de Programación en Visual Basic 1.- Estructura de un proyecto Visual Basic Los programas o aplicaciones desarrolladas en Visual Basic van a constituir un único paquete que denominaremos proyecto.

Más detalles

Isabelle como un lenguaje funcional

Isabelle como un lenguaje funcional Capítulo 1 Isabelle como un lenguaje funcional 1.1 Introducción Nota 1.1.1. Esta notas son una introducción a la demostración asistida utilizando el sistema Isabelle/HOL/Isar. La versión de Isabelle utilizada

Más detalles

TEMA 2. CODIFICACIÓN DE LA INFORMACIÓN

TEMA 2. CODIFICACIÓN DE LA INFORMACIÓN TEMA 2. CODIFICACIÓN DE LA INFORMACIÓN 1. INTRODUCCIÓN. SISTEMAS DE NUMERACIÓN EN. Sistema binario. Sistema octal. Sistema hexadecimal. 2. REPRESENTACIÓN DE TEXTOS.. Números naturales. Números enteros.

Más detalles

LENGUAJE. Tema 2 Elementos de un programa

LENGUAJE. Tema 2 Elementos de un programa LENGUAJE Tema 2 Elementos de un programa ELEMENTOS DE UN PROGRAMA Comentarios. Identificadores. Constantes. Variables. Operadores. Sentencias o instrucciones. COMENTARIOS Los comentarios en C pueden ocupar

Más detalles

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez Elementos de lenguaje: Identificadores Tipos de datos 2 Tipos de datos primitivos 3 Tipos de datos referenciados Clases Interfaces Arrays

Más detalles

Fundamentos de programación JAVA

Fundamentos de programación JAVA Pág. N. 1 Fundamentos de programación JAVA Familia: Editorial: Autor: Computación e informática Macro Ricardo Walter Marcelo Villalobos ISBN: 978-612-304-238-7 N. de páginas: 296 Edición: 2. a 2014 Medida:

Más detalles

TIPOS DE DATOS BASICOS EN LENGUAJE C

TIPOS DE DATOS BASICOS EN LENGUAJE C TIPOS DE DATOS BASICOS EN LENGUAJE C TIPO char int float double void ANCHO EN BIT 64 0 TIPOS DE DATOS RANGO EN PC -12 a 127 3.4E-3 a 3.4E+3 1.7E-30 a 1.7E+30 sin valores TIPO ANCHO EN BIT RANGO EN PC char

Más detalles

Datos y tipos de datos

Datos y tipos de datos Datos y tipos de datos Dato Representación formal de hechos, conceptos o instrucciones adecuada para su comunicación, interpretación y procesamiento por seres humanos o medios automáticos. Tipo de dato

Más detalles

Representación de datos y aritmética básica en sistemas digitales

Representación de datos y aritmética básica en sistemas digitales Representación de datos y aritmética básica en sistemas digitales DIGITAL II - ECA Departamento de Sistemas e Informática Escuela de Ingeniería Electrónica Rosa Corti 1 Sistemas de Numeración: Alfabeto:

Más detalles

Tema 14: Arreglos estáticos en C

Tema 14: Arreglos estáticos en C Tema 14: Arreglos estáticos en C Solicitado: Ejercicios 05: Ejercicios con arreglos estáticos unidimensionales M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom

Más detalles

Operadores. Javier Fernández Rivera -

Operadores. Javier Fernández Rivera - Programación en C Operadores Javier Fernández Rivera - www.aurea.es Los operadores Son los elementos o caracteres gráficos encargados de manipular los datos, que pueden ser dados por números, caracteres,

Más detalles

Algoritmos y Programación I

Algoritmos y Programación I Algoritmos y Programación I ARREGLOS Y ESTRUCTURAS EN C Arreglos Un arreglo o vector es un conjunto de datos del mismo tipo, almacenados de forma contigua (es decir uno al lado del otro) en memoria principal.

Más detalles

Operadores lógicos y de comparación en programación. Not, and, or Ejemplos. (CU00132A)

Operadores lógicos y de comparación en programación. Not, and, or Ejemplos. (CU00132A) aprenderaprogramar.com Operadores lógicos y de comparación en programación. Not, and, or Ejemplos. (CU00132A) Sección: Cursos Categoría: Curso Bases de la programación Nivel I Fecha revisión: 2024 Autor:

Más detalles

Representación de la información

Representación de la información Laboratorio de Introducción a las Ciencias de la Computación Página 1 UNIERSIDAD CATÓLICA DE SANTA MARÍA PROGRAMA PROESIONAL DE INGENIERÍA DE SISTEMAS SESIÓN 2: Representación de la información OBJETIOS

Más detalles

Arrays unidimensionales. Dim.Option Base. Erase. Ejemplos en Visual Basic (CU00311A)

Arrays unidimensionales. Dim.Option Base. Erase. Ejemplos en Visual Basic (CU00311A) aprenderaprogramar.com Arrays unidimensionales. Dim.Option Base. Erase. Ejemplos en Visual Basic (CU00311A) Sección: Cursos Categoría: Curso Visual Basic Nivel I Fecha revisión: 2029 Autor: Mario R. Rancel

Más detalles

Tema: Tipos de datos y conversiones

Tema: Tipos de datos y conversiones Tema: Tipos de datos y conversiones Objetivos: El propósito de este tema es que el alumno se familiarice con el entorno de desarrollo de Visual C# Express y realice diversos programas en el entorno Consola,

Más detalles

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs. Variables Una variable no es más que un nombre simbólico que identifica una dirección de memoria: Suma el contenido de la posición 3001 y la 3002 y lo almacenas en la posición 3003 vs. total = cantidad1

Más detalles

Lección 2: Creando una Aplicación en Java. 1. Estructura del archivo de una clase. 3. Definiendo clases fundamentos

Lección 2: Creando una Aplicación en Java. 1. Estructura del archivo de una clase. 3. Definiendo clases fundamentos Lección 2: Creando una Aplicación en Java 1. Estructura del archivo de una clase 2. Usando una clase 3. Definiendo clases fundamentos Objetivos Conocer: La forma en la cual está se está estructurado el

Más detalles

Capítulo 2 Conjuntos. 2.1 Introducción. 2.2 Determinación de conjuntos. Definición:

Capítulo 2 Conjuntos. 2.1 Introducción. 2.2 Determinación de conjuntos. Definición: Capítulo 2 Conjuntos 2.1 Introducción El concepto de conjunto, de singular importancia en la ciencia matemática y objeto de estudio de una de sus disciplinas más recientes, está presente, aunque en forma

Más detalles

Cadenas y Caracteres. Universidad Católica de Honduras Nuestra Señora Reina de la Paz. Asignatura. Programación Científica. Tema de Exposición

Cadenas y Caracteres. Universidad Católica de Honduras Nuestra Señora Reina de la Paz. Asignatura. Programación Científica. Tema de Exposición Universidad Católica de Honduras Nuestra Señora Reina de la Paz Asignatura Programación Científica Tema de Exposición Caracteres y Cadenas Catedrático: Ing. Henry Pinto Tegucigalpa, M. D. C. del 2008 01

Más detalles

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

INTRODUCCIÓN A LA PROGRAMACIÓN EN FORTRAN. Métodos Numéricos Carlos Zotelo INTRODUCCIÓN A LA PROGRAMACIÓN EN FORTRAN Métodos Numéricos 2008 - Carlos Zotelo Introducción a Fortran 77 / 90 1. El lenguaje Fortran 77 / 90 2. Tipos de datos básicos 3. Constantes y variables 4. Entrada

Más detalles

TADs en C. Matías Bordese Algoritmos y Estructuras de Datos II - Laboratorio 2013

TADs en C. Matías Bordese Algoritmos y Estructuras de Datos II - Laboratorio 2013 TADs en C Matías Bordese Algoritmos y Estructuras de Datos II - Laboratorio 2013 1. Objetivos Definición de TADs en C Ocultación de la implementación del TAD Manejo básico de memoria dinámica 2. Usando

Más detalles

Estructura de datos Tema 2: Tipos Abstractos de Datos (TADs)

Estructura de datos Tema 2: Tipos Abstractos de Datos (TADs) Universidad de Valladolid Departamento de informática Campus de Segovia Estructura de datos Tema 2: Tipos Abstractos de Datos (TADs) Prof. Montserrat Serrano Montero ÍNDICE Tipos de datos El tipo abstracto

Más detalles

Vamos a profundizar un poco sobre los distintos tipos de datos que podemos introducir en las celdas de una hoja de cálculo

Vamos a profundizar un poco sobre los distintos tipos de datos que podemos introducir en las celdas de una hoja de cálculo Tipos de datos. Vamos a profundizar un poco sobre los distintos tipos de datos que podemos introducir en las celdas de una hoja de cálculo Valores Constantes: Es un dato que se introduce directamente en

Más detalles

Lenguaje C Elementos de un Programa. Ing. Hugo Fdo. Velasco Peña Universidad Nacional 2006

Lenguaje C Elementos de un Programa. Ing. Hugo Fdo. Velasco Peña Universidad Nacional 2006 Lenguaje C Elementos de un Programa Ing. Hugo Fdo. Velasco Peña Universidad Nacional 2006 Objetivos Conocer los elementos que conforman un programa en C 1. Elementos léxicos de un Programa Cuando el programa

Más detalles

PHP: Lenguaje de programación

PHP: Lenguaje de programación Francisco J. Martín Mateos Carmen Graciani Diaz Dpto. Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Tipos de datos Enteros Con base decimal: 45, -43 Con base octal: 043, -054

Más detalles

Tema 13: Apuntadores en C

Tema 13: Apuntadores en C Tema 13: Apuntadores en C M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom Estructuras de datos (Prof. Edgardo A. Franco) 1 Contenido Introducción

Más detalles

Programación 1 Tema 3. Información, datos, operaciones y expresiones

Programación 1 Tema 3. Información, datos, operaciones y expresiones Programación 1 Tema 3 Información, datos, operaciones y expresiones Índice Datos y tipos de datos Datos primitivos en C++ Expresiones e instrucción de asignación Datos y tipos de datos Problema información

Más detalles

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

LEX. Las definiciones y subrutinas son opcionales. El segundo %% es opcional pero el primer %% indica el comienzo de las reglas. LEX Estructura de un programa en LEX { definiciones { reglas { subrutinas del usuario Las definiciones y subrutinas son opcionales. El segundo es opcional pero el primer indica el comienzo de las reglas.

Más detalles

En este artículo vamos a conocer los tipos de datos que podemos manejar programando en C.

En este artículo vamos a conocer los tipos de datos que podemos manejar programando en C. El primer objetivo de un programa informático es el manejo de datos. Un dato es toda aquella información que se puede tratar en un programa informático. En este artículo vamos a conocer los tipos de datos

Más detalles

Métodos para escribir algoritmos: Diagramas de Flujo y pseudocódigo

Métodos para escribir algoritmos: Diagramas de Flujo y pseudocódigo TEMA 2: CONCEPTOS BÁSICOS DE ALGORÍTMICA 1. Definición de Algoritmo 1.1. Propiedades de los Algoritmos 2. Qué es un Programa? 2.1. Cómo se construye un Programa 3. Definición y uso de herramientas para

Más detalles

Procesadores de lenguaje Tema 6 La tabla de símbolos

Procesadores de lenguaje Tema 6 La tabla de símbolos Procesadores de lenguaje Tema 6 La tabla de símbolos Departamento de Ciencias de la Computación Universidad de Alcalá Resumen La tabla de símbolos. Requerimientos de información. Diseño de la tabla de

Más detalles

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación.

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación. Java Avanzado. Guía 1 Java Avanzado Facultad de Ingeniería. Escuela de computación. Java Avanzado. Guía 2 Introducción Este manual ha sido elaborado para orientar al estudiante de Java Avanzado en el desarrollo

Más detalles

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

Estatutos de Control C# Estatutos de Decisión (Selección) SELECCIÓN Estatutos de Control C# Estatutos de Decisión (Selección) IF Condición THEN Estatuto1 ELSE Estatuto2 Estatuto1 Statement Condición... Antes de ver esta presentación: Lee el Capítulo correspondiente

Más detalles

Tema 3: Tipos y clases

Tema 3: Tipos y clases Tema 3: Tipos y clases Programación declarativa (2009 10) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla Tema 3: Tipos y clases

Más detalles

6.1.- Introducción a las estructuras de datos Tipos de datos Arrays unidimensionales: los vectores Operaciones con vectores.

6.1.- Introducción a las estructuras de datos Tipos de datos Arrays unidimensionales: los vectores Operaciones con vectores. TEMA 6: ESTRUCTURAS DE DATOS (Arrays). CONTENIDO: 6.1.- Introducción a las estructuras de datos. 6.1.1.- Tipos de datos. 6.2.- Arrays unidimensionales: los vectores. 6.3.- Operaciones con vectores. 6.4.-

Más detalles

Operadores y Expresiones

Operadores y Expresiones Operadores y Expresiones Los programas Java constan de datos, sentencias de programas y expresiones. Una expresión es normalmente, una ecuación matemática, tal como 3 * x + 5 * z. En esta expresión, los

Más detalles

Computación II. Introducción a Visual Basic

Computación II. Introducción a Visual Basic Computación II Introducción a Visual Basic Introducción a Visual Basic Microsoft Visual Basic es un conjunto de herramientas que posibilitan el desarrollo de aplicaciones para Windows de una manera rápida

Más detalles

Tema 3: Tipos y clases

Tema 3: Tipos y clases Tema 3: Tipos y clases Programación declarativa (2010 11) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla Tema 3: Tipos y clases

Más detalles

INICIACIÓN A LA PROGRAMACIÓN II

INICIACIÓN A LA PROGRAMACIÓN II INICIACIÓN A LA PROGRAMACIÓN II 1. Caracteres... 2 2. Identificadores... 4 3. Palabras clave o reservadas... 5 4 Variables y constantes. Datos... 6 5 Arrays... 8 6. Comentarios... 9 7. Expresiones... 11

Más detalles

Apuntadores (Punteros)

Apuntadores (Punteros) Apuntadores (Punteros) x9ff10 X int 209 SESION 7 *ptr Definición Llamados también punteros. Un Apuntador es una variable que contiene una dirección de memoria, la cual corresponderá a un dato o a una variable

Más detalles

LABORATORIO DE PROCESADORES DE LENGUAJE Curso: Práctica 2: Analizador léxico/sintáctico/semántico con Flex y Bison

LABORATORIO DE PROCESADORES DE LENGUAJE Curso: Práctica 2: Analizador léxico/sintáctico/semántico con Flex y Bison LABORATORIO DE PROCESADORES DE LENGUAJE Curso: 2008-2009 Práctica 2: Analizador léxico/sintáctico/semántico con Flex y Bison Planteamiento del problema En esta práctica se trata de realizar, mediante el

Más detalles

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso 2013-2014. 1º Grado en Informática Práctica 1: Punteros Objetivos Se hará hincapié en la aritmética de punteros

Más detalles

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

Caracteres y Cadenas Conversión de Datos Funciones y procedimientos Archivos cabecera. Fundamentos de programación 1 Caracteres y Cadenas Conversión de Datos Funciones y procedimientos Archivos cabecera Fundamentos de programación Agenda Caracteres y Cadenas Conversión de Datos Introducción a las funciones y procedimientos

Más detalles

Introducción a los Sistemas Digitales. Conceptos básicos de matemática aplicada a los sistemas digitales

Introducción a los Sistemas Digitales. Conceptos básicos de matemática aplicada a los sistemas digitales Curso-0 1 Introducción a los Sistemas Digitales Conceptos básicos de matemática aplicada a los sistemas digitales 2 Contenidos Conjuntos numéricos Notación científica Redondeo Logaritmos Resumen 3 Conjuntos

Más detalles

1. Computadores y programación

1. Computadores y programación 1. Computadores y programación Informática y computadora (RAE) Informática (Ciencia de la computación) Conjunto de conocimientos científicos y técnicos que hacen posible el tratamiento automático de la

Más detalles

Pseudolenguaje. (1 byte) 0.. 255 (valores códigos ASCII) [CHAR_MIN.. CHAR_MAX] (Definida en <limits.h>) No hay. Dominio 0.. 2 n 1 [MIN(C)..

Pseudolenguaje. (1 byte) 0.. 255 (valores códigos ASCII) [CHAR_MIN.. CHAR_MAX] (Definida en <limits.h>) No hay. Dominio 0.. 2 n 1 [MIN(C).. Tipo C Dominio 0.. 2 n -1 [MIN(C).. MAX(C)] Operadores Aritméticos Otras funciones No hay CHR(...) CAP(...) ORD(...) E/S No Formateada: Leer (...) Escribir (...) char (1 byte) 0.. 255 (valores códigos

Más detalles

Tema 8 Vectores y Matrices

Tema 8 Vectores y Matrices Tema 8 Vectores y Matrices Contenidos 1. Vectores. 1.1. Declaración. 1.2. Inicialización. 1.3. Acceso a elementos. 1.4. Operaciones. 2. Cadenas de caracteres (vectores de caracteres). 2.1. Declaración,

Más detalles

TEMA 8: Gestión dinámica de memoria

TEMA 8: Gestión dinámica de memoria TEMA 8: Gestión dinámica de memoria 8.1.-Tipo de datos puntero Hasta ahora, los tipos de datos que hemos visto (a excepción de strings y ficheros) eran estructuras de datos estáticas, es decir, estructuras

Más detalles