Tema2 datossimples - Introduccion a los datos simpres en la POO PDF

Title Tema2 datossimples - Introduccion a los datos simpres en la POO
Course Fundamentos De Programacion Ii
Institution Universidad de Castilla La Mancha
Pages 10
File Size 328.3 KB
File Type PDF
Total Downloads 61
Total Views 160

Summary

Introduccion a los datos simpres en la POO...


Description

FundamentosDeProgramaciónI___________________________________________1

Tema 2 Representación de datos simples en Memoria 1. Introducción Toda la información que va a ser tratada mediante un programa informático la llamaremos “dato”. Estos datos deben estar almacenados en la memoria del ordenador para lo cual, al inicio de cada programa, deberemos indicar para cada uno de los datos unas caracteristicas que posteriormente nos faciliten su manejo. Entre estas características tendremos las que el programador definirá, como son identificador, tipo, y valor, y las que son asignadas por el simple hecho de hacer la declaración de esos datos, como son la dirección de memoria, el ambito de utilización y la duración de las mismas. En los siguientes apartados descriremos cada una de estas caracteristicas.

2. Identificador Es una etiqueta o nombre que el programador asignará a cada uno de los datos para posteriormente poder hacer referencia a ese dato. A la hora de definir estos identificadores para los datos se deben seguir unas reglas generales definidas para todos los lenguajes de programación como son:  Solo pueden utilizarse letras, números y el carácter subrayado (_).  No puede contener blancos ni caracteres como . ; * : - + etc.  El primer carácter no puede ser un número.  Los identificadores tendrán una longitud máxima de caracteres.  No pueden coincidir con palabras clave del lenguaje Junto a estas reglas generales, cada uno de los lenguajes de programación pueden añadir alguna regla adicional o restrigir las anteriores. El lenguaje C, que será el que utilizaremos en esta asignatura, además de las reglas anteriores impone la siguiente regla  Las letras mayusculas y minusculas son diferentes. Esta regla hará que tengamos que ser sumamente cuidadosos a la hora de escribir nuestros identificadores. Ejemplo Identificadores correctos: tiempo, dista1, caso_A, PI Identificadores no válidos: 1_dedo, parte-2, peset@,

2 ______

Juan J. Pardo, Ana A. González

3. Tipos de datos Esta característica proviene del proceso de abstracción del concepto de dato. De este modo, cuando a un dato le asignamos un tipo de datos específico estaremos indicando de forma implicita tres características importantes.  El espacio en memoria que se utilizará para almacenar ese dato.  El conjunto de valores que ese dato puede tomar. Este conjunto de valores dependerá de la cantidad de memoria que se utilizará para almacenar esa variable.  El conjunto de operadores que se podrán aplicar sobre ese dato. Todos los lenguajes de programación definen un conjunto de tipos de datos básicos y unos mecanismos para la definición de nuevos tipos mediante la agregación de tipos simples. A este tipo de datos definidos se les denomina tipos de datos complejos o tipos definidos por el usuario. En la Ilustración 1 podemos ver los tipos de datos más comunes en todos los lenguajes de programación. Tipos de datos

Simples

Enteros

Flotantes

Caracter

Compuestos

Booleano

Puntero

Homogeneos

Vectores

Heterogeneos

Estructuras o registros

Matrices

Cadenas

Ilustración 1Clasificación de los tipos de texto A continuación haremos una breve descripción de cada uno de los tipos basicos, dejando para temas posteriores los tipos compuestos y los mecanismos para su creación.  Caracter.- Este tipo de datos permite almacenar un único carácter que internamente será almacenado mediante su código ascii. La cantidad de memoria necesaria para el almacenamiento de un carácter será de un byte. Los operadores que podremos aplicar sobre variables de este tipo serán los operadores relacionales también llamados de comparación y los operadores de suma y resta de un número entero, que nos permitirá cambiar de carácter. Los valores de este tipo se representarán mediante un carácter encerrado entre comillas simples.

FundamentosDeProgramaciónI___________________________________________3 Ejemplo El carácter a será representado como ‘a’ y el carácter numérico 1 como ‘1’ . Si queremos escribir una cadena con varios caracteres deberemos encerrarla entre comillas dobles “”. 

Enteros.- Este tipo nos permite almacenar datos de tipo entero, es decir, sin decimales. El rango de valores permitido para este tipo dependerá del compilador que se este utilizando, de modo que en compiladores donde se utilice 2 bytes para el almacenamiento de estas variables el rango de valores sera de -32.768 a 32767. Sobre estas variables podremos aplicar los operadores relacionales y operadores aritmeticos. Los valores de este tipo se representarán mediante una sucesion de digitos numéricos. Ejemplo. Un numero será escrito como 1234



Reales.- Los datos de este tipo almacenan números reales aunque su comportamiento será algo diferente al de los numeros reales en matematicas debido a la limitación que introduce la cantidad de memoria que se utiliza para su almacenamiento. Habitualmente se utilizan 4 bytes para su almacenamiento lo que hará que el rango de valores sea bastante grande. Como con todos los números las operaciones que se podrán aplicar son las relacionales y las aritméticas a excepción del operador resto de la división. Algunos de los lenguajes de programación este tipo de datos lo dividen en dos de modo que el segundo de ellos incremente la precisión del primero. Los valores de este tipo vendrán definidos por un conjunto de digitos entre los que aparece el carácter punto (.) o bien la letra e si los expresamos en formato cientifico. Ejemplo Para escribir los numeros reales o flotantes podemos utilizar la notación decimal habitual, y entonces los escribiremos así 123.56, o la notación científica y entonces se escribirá así 12356 e-2.



Booleanos.- Los valores permitidos para los datos de este tipo son solamente dos, CIERTO y FALSO, por lo que se necesita poco espacio para su almacenamiento. Sobre los datos de este tipo solamente se podrán aplicar los operadores booleanos (AND, OR y NOT).



Punteros.- Las datos del tipo puntero nos permitirán almacenar direcciones de memoria en las que tengamos almacenados algunos datos.

4 ______

3.1.

Juan J. Pardo, Ana A. González Conversión de tipos

Con este nombre definiremos la operación de forzar a que un dato definido de un tipo concreto en determinados casos se comporte como un dato de otro tipo. Esta operación conllevará el cambio de los valroes posibles y del conjunto de operaciones que se le van a aplicar, por lo que es muy probable que en determinados casos no sea posible hacer una conversión. En aquelos casos que si que sea posible tendremos dos tipos de conversión Implicitas.- Las realizará el compilador automáticamente cuando en una expresión se mezclan variables de tipos diferentes. El tipo de datos del resultado final de la expresión será el tipo mayor de todos los que intervienen. En una asignación el tipo final vendrá dado por el tipo de dato en el que se va a almacenar el resultado (la variable que aparece en la parte izquierda de la asignación.) Ejemplo Si tenemos una expresión como entero  real el dato entero se convierte a real y el resutlado tendrá un tipo real. Si la expresión es entero = real * 2 el resultado del producto, que será real, se convierte a entero con lo que se perderá información. Explicitas .- Son realizadas por el programador anteponiendo a la expresión que se desea convertir el tipo deseado encerrado entre paréntesis. Ejemplo zz = (int )1,56  (int )rr .-Al realizar la suma el numero 1.56 y el valor de rr se manejan como enteros.

4. Clases de datos A la hora de definir los datos que nuestro programa va a manejar nos encontramos con dos clases diferentes de datos, constantes y variables, cuyo comportamiento será muy diferente.

4.1.

Constantes

Son datos que se definen en un punto determinado del programa y cuyo valor no podrá modificarse en el resto del programa por lo que debe asignarsele un valor en el momento de su definición. La definición de una constante tendrá la siguiente sintaxis CONST tipodedato nombre=valor ; Ejemplo const flotante Pi=3.141592; El uso de las constante está justificado cuando tenemos que utilizar en varios lugares de nuestro programa, un valor que no va a cambiar. Si en algún momento queremos

FundamentosDeProgramaciónI___________________________________________5 reemplazar dicho valor por otro no tendremos que remplazarlo en todos los puntos del codigo sino solo en la declaración de la constante.

4.2.

Variables

Van a ser los tipos de datos mas utilizados en nuestros programas ya que su valor puede ser modificado tantas veces como se desee a lo largo del programa. Definiremos una variable como una zona de memoria utilizada para almacenar un dato de un determinado tipo a la que se accede mediante un nombre que se le ha asignado en su declaración. En esta declaración podemos indicar tambien el valor que inicialmente se almacenará en la zona de memoria asignada a esa variable. La declaración de una variable la realizaremos siguiendo la siguiente sintaxis tipodedatos nombredevariable=valorinicial. Ejemplo Diferentes declaraciones de variables correctas serian: Entero edad; Flotante salario, precio,ganancia Entero edad=23; Flotante sueldo=200.32; Si la variable que vamos a declarar es de tipo puntero la sintaxis de la declaración variará un poquito y ésta será la sguiente tipodedatos * nombredevariable Como puede observarse introduciremos el signo * para indicar que la variable será un puntero.

5. Operadores Son determinados signos especiales que representan diferentes operaciones a realizar sobre variables y constantes. Estos operadores los podemos clasificar en diferentes grupos, que comentamos a continuación brevemente.

5.1.

Asignación

Se representa mediante el signo igual (=) y la forma general de uso es n_variable = expresion donde la parte izquierda SIEMPRE es una variable y la parte derecha es una expresión en la que se combinan operadores, variables, constantes y literales.

6 ______

Juan J. Pardo, Ana A. González

Ejemplo 13 entero x, z; z=6; x=x+z; Cuando en una asignación el tipo de la expresión derecha es distinta a la de la variable izquierda, se produce una conversión de tipos implicita, de modo que la parte derecha de la asignación se convierte al tipo del lado izquierdo.

5.2.

Operadores Aritméticos

Estos operadores se encuentran definidos en la mayoría de los lenguajes y representan las operaciones matemáticas básicas. Operador Significado Resta y signo negativo + Suma * Multiplicación / División % Resto de la división entera -Decremento ++ Incremento Tabla 1. Operadores Aritméticos Los operadores de incremento y decremento pueden entenderse como un método abreviado de escribir una expresión de suma o resta de 1 a una variable. Ejemplo 13 Dada una variable definida así entero x; Las expresinoes x=x+1 y x++ representan lo mismo Los operadores de incremento y decremento pueden escribirse antes o después de la variable que modifican. Esta posición del operador, cuando el mismo se combine con otros en una expresión hára que su comportamiento sea diferente. Veamos un ejemplo para clarificar el tema Ejemplo 13 Consideremos el siguiente trozo de código entero x,z,y; x=5; z=x++; En la expresión de asignación a z, como el operador está escrito detrás de la variable lo que estamos indicando es que primero se realizará la asignación del valor de x a z y luego se incrementa el valor de x. Por tanto el valor que se asignará a z será 5 y después se incrementará el valor de x que pasará a ser 6. Si cambiamos el orden la instrucción que tendremos será z=++x. En este caso, primero se incrementará el valor de x pasando a ser 6, y posteriormente se realizará la asignación a z por lo que se le asignaría el valor 6.

FundamentosDeProgramaciónI___________________________________________7 5.3.

Operadores Relacionales

Son operadores que establecen la relación existente entre dos expresiones. El resultado de estos operadores es siempre un valor booleano (true o false). Los operadores relacionales son los mostrados en la Tabla 2 Operador ==

Significado Igual Menor < Mayor > Menor o igual = Distinto != Tabla 2. Operadores Relacionales

OJO No debe confundirse el operador de comparación con el de asignación.

5.4.

Operadores booleanos o lógicos.

Son un tipo especial de operadores relacionales, que relacionan siempre expresiones booleanas, para devolver un valor booleano. Los operadores lógicos son los mostrados en la Tabla 3. La evaluación de estos operadores se realiza, en el llamado modo cortocircuito, es decir, si al evaluar la primera expresión ya se puede determinar el valor de la expresión total, no se evalúa la siguiente expresión. Operador &&

Significado AND

| |

OR

!

NOT

5.5.

Valor Cierto si ambas expresiones son ciertas, falso en caso contrario Falso si ambas expresiones son falsas, cierto en caso contrario Cierto si la expresión es falsa. Tabla 3. Operadores Lógicos

Operadores con punteros

Los punteros por su característica especial tendrán un conjunto de operadores especiales para poder trabajar con ellos. A continuación describiremos cada uno de ellos.  Operador & Es un operador que se aplica sobre variables de cualquier tipo basico o compuesto y nos devuelve la dirección de memoria en la que ha sido almacenada esa variable. Ejemplo 1 int *m,dat; dat=199; m=&dat; Este trozo de código almacena en la variable m la dirección de memoria en la que esta almacenada la variable dat.

8 ______



Juan J. Pardo, Ana A. González

Operador *

Es un operador monario que aplicaremos sobre variables del tipo puntero. Este operador devuelverá el valor almacenado en la dirección apuntada por la variable operando. Ejemplo 2 Siguiendo con el ejemplo anterior, la expresión *m devolvería el valor 199.  Asignación dinámica de memoria Aunque, con el operador & podemos obtener la dirección de variables definidas en un programa y a partir de ese momento trabajar con esa variable mediante un puntero, lo más habitual, y una de las finalidades fundamentales de los punteros, es la de gestionar la memoria de forma dinámica sin necesidad de definir variables para reservar la memoria y después obtener su dirección. El operador que nos permitirá reservar la memoria será el siguiente malloc(cantidad) A este operador se le pasa la cantidad de memoria que queremos reservar y el nos devolverá la dirección de memoria en la que se ha reservado esa memoria . Ejemplo 5 El siguiente trozo de código reserva 5 kb de memoria devolviendo en la variable p la dirección en la que empieza esa memoria int *p; p=malloc(50* sizeof(int));

 Liberación de la memoria Una vez que deja de usarse una zona de memoria reservada dinamicamente la buena practica en programación nos exige que sea liberada, para asi evitar los problemas de agotamiento de la memoria. Para ello utilizaremos la instrucción free (puntero) Ejemplo 6 Con la siguiente linea se liberaría la memoria reservada en el ejemplo anterior. free(p);  Asignación de punteros Al igual que con otro tipo de variables puede hacerse la asignación y la comparación de dos variables punteros siempre y cuando estas dos variables sean punteros del mismo tipo. Ejemplo 3 El siguiente trozo de código reserva memoria para almacenar un entero y guarda la dirección de la misma en el puntero p. Después asigna esa dirección al puntero q. A partir de ese momento ambos punteros apuntarán a la misma dirección de memoria.

FundamentosDeProgramaciónI___________________________________________9 int *p,*q; p=malloc(sizeof(int)); q=p;  Inicialización de punteros Uno de los mayores problemas que plantean los punteros es la utilización de los mismos sin haber sido inicializados. Para evitar problemas será conveniente que tras la declaración de una variable puntero esta sea inicializada con una dirección de memoria bien mediante memoria dinamica o con la dirección de una variable ya existente mediante el operador &.

6. Expresiones Una expresión es una combinación valida de variables, constantes y operadores. Una vez construida una expresión cuando va a ser ejecutada, si existen operadores de diferentes tipos, entonces se convierten todos al mayor de todos ellos siendo el resultado de ese tipo. Aunque cuando se construye una expresión no se indica el orden en que se realizará su evaluación, los lenguajes de programación establecen las siguientes reglas de precedencia que establecen el orden en el que serán evaluados los operadores de las expresiones

(),[],  > ,. !, ++, - -, -, *, &, sizeof *, /, % +, = ==, != && , | | Menor prioridad = Tabla 4. Prioridad de los operadores Mayor prioridad

7. Lenguaje C. Todos los conceptos y definiciones dados anteriormente son particularizados por cada uno de los lenguajes de programación añadiendo su sintaxis particular. Asi si nos centramos en el lenguaje C ests adecuación es la siguiente 

Tipos de datos en C. Los tipos de datos indicados anteriormente en C reciben estos nombres: o Entero-- int o Flotante float o double o Carácter  char o Booleano no existe y se representa como int donde 0 significa falso y otro numero significa cierto.

10 ______

Juan J. Pardo, Ana A. González

Con el objetivo de optimizar la representación de los datos en memoria el lenguaje C permite aplicar ciertos modificadores a los tipos anteriormente definidos de modo que varie el rango de valores permitido para estos datos. Los modificadores signed y unsigned indicarán si el dato almacenado es con signo o sin signo y los modificadores short y long ndicarán diferentes longitudes, aunque esto no siempre supone un aumento o disminución del rango de un tipo.  Declaración de constantes C además de definir las constantes como se indicaba anteriormente también nos permite definir constantes simbólicas. Esta declaración se hará al principio del programa, despues de la declaración de librerias y la sintaxis que utilizaremos será #define nombreconstante valor. Literales caracteres Otra de las particularidades que tiene el lenguaje C es que nos permite manejar ciertos caracteres que no son representables gráficamente y que no aparecen en el teclado de un ordenador. Para representarlos se utilizan lo que se denomina secuencias de escape, las cuales se muestran en la Tabla 5 .Cualquier carácter ASCII puede ser representado como una secuencia de escape usando su código octal. 

Secuencia Significado Nueva linea \n retorno de carro \r tabulación \t tabulación vertical \v pitido \a \b retroceso de espacio avance de página \f carácter nulo \0 Barra inclinada \\ \' Comilla simple \ '' Comilla doble Interrogación \? Número octal \ 000 Número hexadecimal \ xhh Tabla 5. Secuencias de escape...


Similar Free PDFs