Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

01) Introduccion Estructuras de Datos

Descargar como pptx, pdf o txt
Descargar como pptx, pdf o txt
Está en la página 1de 29

INTRODUCCIÓN A LAS

ESTRUCTURAS DE DATOS
INTRODUCCIÓN A LAS
ESTRUCTURAS DE DATOS
En esta presentación . . .
• Concepto de tipos de datos y estructuras de datos
• Rango para tipos enteros
• Estándar para punto flotante
• Codificación de almacenamiento
• El tipo string y métodos
• El tipo char y funciones
• Entrada de datos de usario
• Conversiones de tipos
Tipos de datos
Un tipo de dato es un espacio de memoria, al cual se le imponen restricciones
tales como
• El tipo de valor que puede tomar
• Las operaciones que se pueden realizar con este
Tipos de datos atómicos (primitivo o elemental)
Son los datos que son indivisibles (son nativos del compilador y no se
componen de otros tipos de datos) – En C++ son.
short int long double
unsigned short unsigned int char
long float unsigned char
unsigned long double void
Nota: En C++ bool no es un dato atómico ya que se define a partir de sentencia
enum
Tipos de datos
Clasificación

Las estructuras de datos son formas en


como está organizada la información con
el objetivo de adaptarlos a metodologías
y técnicas (algoritmos) para que el
manejo de la información sea eficiente.
Cálculo del rango para tipos enteros
A cada tipo de dato entero se le asigna cierta cantidad de bytes en memoria y la
cantidad de valores que se puede obtener es la cantidad de combinaciones que
se puede hacer en ese espacio
Ejemplo
Para un short se le asignan 2 bytes en memoria, lo que significa un espacio de
16 bits

Si en cada espacio se puede colocar un 1 o un 0, entonces la cantidad de


combinaciones resulta en 216 = 65536
Cálculo del rango para tipos enteros
Como se deben considerar los valores negativos, entonces un tipo short puede
contener los valores de -32768 a 32767

El operador unsigned corre los valores de modo que se eliminen los negativos
lo que resulta en una ampliación en la capacidad de valores positivos

Así unsigned short tendrá un rango desde 0 a 65535

Para calcular el valor máximo en función del espacio en bytes se


 

utiliza la siguiente fórmula


Práctica
En C++ se utiliza el operador sizeof para obtener la cantidad de bytes que
utiliza algún tipo de datos

Salida del
programa

Lo que significa que el tipo


int utiliza 4 bytes de
memoria
¿Cuál es el rango de un int?
¿Explique cuál sería la salida del siguiente programa?

En una variable cuando el valor se desborda vuelve de nuevo al inicio


¿Pasaría algo extraño con este código, por qué?
LOS VALORES REALES (PUNTO FLOTANTES)
En C++ existen float (32 bits) y double(64 bits), que se rigen por el estándar IEEE
754
Para el caso de 32 bits el formato corresponde a lo siguiente

8 bits
Para el exponente 23 bits
Para la mantisa
1 bit (para el signo) Lo que significa que un número flotante es un
0 significa (+) formato de notación científica pero en binario
1 significa (-)
LOS VALORES REALES (PUNTO FLOTANTES)
¿Cómo convertir un flotante a binario?
A continuación se explicará con un ejemplo, digamos que a partir del estándar
IEEE 754 se desea saber a qué corresponde el número
49,3125 a binario

R/ Paso 1 : Convertimos la parte entera en binario


49D = 110001B
Paso 2 : Se elimina el primer dígito binario y a la cantidad de dígitos resultante le
sumamos 127

5 dígitos 5 +127 = 132


110001
LOS VALORES REALES (PUNTO FLOTANTES)
Paso 3 : Al resultado anterior lo convertimos en binario y por ahora ya tenemos los
8 bits de la parte exponencial

132D = 10000100B
Paso 4 : La parte decimal la convertimos en binario

0101 El método consiste en ir


multiplicando por 2
0,3125 x 2 =0,625 • Menor que 1 implica 0
• Mayor igual que 1 implica 1
0,625 x 2 = 1,25 • En cada línea siguiente solo se
0,25 x 2 = 0,5 usa la parte decimal del
anterior resultado
0,5 x 2 = 1
LOS VALORES REALES (PUNTO FLOTANTES)
Paso 5 : Se concatena la parte entera (sin el primer dígito por que había sido
eliminado) con la parte decimal y ya tenemos los primeros bits de la
mantisa

10001 0101

Dígitos del paso Dígitos del paso 4


2 (parte entera) (parte decimal)
Paso 6 : Unimos todo Signo + Exponente + Mantisa + Resto se rellena de ceros

0 10000100 10001010100000000000000
Actividad
Utilizando la función sizeof, y efectuando los cálculos correspondientes
complete la siguiente tabla
Codificación de almacenamiento
Entendemos que el computador almacena todo en bits (1 y 0), sin embargo el
hardware informático se diseña para que las lecturas o escrituras que hagamos
sea en múltiplos de bytes (1 byte = 8 bits)

A cada byte se le asigna un carácter (código ASCII), de modo que cuando se


almacena un tipo de datos “lo podemos ver” en este tipo de codificación

www.elcodigoascii.com.ar
Codificación de almacenamiento
Actividad 1) Pruebe el siguiente código que almacena un unsigned short
en un archivo
#include <iostream> 2) Busque el archivo creado “miArchivo.txt” y
#include <fstream>
using namespace std;
ábralo con el bloc de notas
int main () {
ofstream miArchivo ("miArchivo.txt",ios::binary);
short Numero=35+256*61;

miArchivo.write(reinterpret_cast<char *>(&Numero), sizeof(Numero));

miArchivo.close();
cout <<"LISTO ! " <<endl;
system("pause"); 3) Analice y explique el resultado basándose en la
return 0;
}
tabla ASCII
Una explicación sobre el tipo bool
Al comienzo de esta presentación se mencionó que en C++ el tipo bool no se
considera un tipo de dato atómico, debido a que está definido con base a la
sentencia enum.
enum bool {false, true};
Por ejemplo, suponga que
usted quiere definir su propio
booleano pero ahora lo llamará
LOGICO, podría ser así
El tipo string
En realidad string no es una variable, sino que una clase, es decir incluye métodos
y propiedades

Método susbstr Extrae una parte de la cadena

Método find Devuelve la posición de una palabra buscada

Método length Devuelve el número de caracteres del string


El tipo string
Repasemos las operaciones que se pueden hacer con string.

Concatenar Se utiliza el operador +

Extraer un carácter Se utilizan los corchetes [ ]

El tipo string solo se define en C++ (no en C puro)


El tipo char
Este tipo se define en C puro y por lo tanto también en C++.
Originalmente en lugar de un tipo string se utilizaba un vector de char
Ejemplo de declaración e inicialización
char frase[43] = "Mátate estudiando y serás un cadáver culto";

El valor entre Algunas funciones que se utilizan para manipular


corchetes se vectores char son:
puede omitir
Función strcpy
Para asignar una cadena a un vector char
char palabra[30];
strcpy(palabra,"HOLA");
El tipo char
Función strcat
Para concatenar una cadena a un vector char
char palabra[100]="Al que a buen palo se arrima ";
strcat(palabra,"llega un perro y se le orina");
cout<< palabra << endl;

Función strlen
Para averiguar la longitud de una cadena de caracteres
char palabra[50]="El barquito no podía navegar";
cout<< strlen(palabra) << endl;
El tipo char
Función strcmp
Para comparar el contenido de 2 cadenas de caracteres (para usar en las
sentencias condicionales)
• Observe que se usa
#include<iostream> strcmp para comparar 2
using namespace std; cadenas
main(){
char x[15]="Hola mundo"; • No se puede comparar así:
char z[20]="Hola mundo"; x==z como sucede con el
if(strcmp(x,z)==0){ tipo string
cout<< "Son igualititas";
cout<< endl; También se pueden usar los
} operadores < y > para
} ordenar alfabéticamente
Entradas de datos por el usuario
Todas las variables atómicas pueden recibir valores desde el teclado, con
la instrucción cin, como en el siguiente ejemplo.
Pequeño
problema Para el tipo string solo
con cin permite ingresar
palabras sin espacios
Entradas de datos recomendada para un string
Si se usa cin para un tipo string, tendrá el problema de que corta la
palabra ingresada desde el primer espacio, por eso se recomienda
utilizar getline, del siguiente modo.

Modo
recomendado
Entradas de datos para un vector char
En el caso de un vector char, se usa la siguiente variante de cin
char nombre[40];
cin.getline(nombre,40);

EN RESUMEN ! Para variable


simple
cin << miVariable;
Para string
getline(cin,miVariable);

Para vector char


cin.getline(miVariable,40);
CONVERSIONES DE TIPOS
Para convertir un vector char a string
char palabra[50]="Elba Silón";
string myCad;
myCad=(string)palabra;

Para convertir un string a vector char Se utiliza el


string myCad="Esteban Dido"; método .c_str() del
char palabra[50]; objeto string
strcpy(palabra,myCad.c_str());

Para convertir un vector char a numérico (atoi o atof)


Entero=atoi(miStr.c_str())
;
Doble=atof(miStr.c_str());
CONVERSIONES DE TIPOS
Para convertir entero a vector char (se utiliza itoa)
#include<iostream>
using namespace std; El argumento 10
int main(){ indica la base, si se
char myCad[10]; pone un 2
int numero=80; devolvería la
itoa(numero,myCad,10); expresión en binario
cout<< myCad << endl; y se le coloca 16
system("pause"); devuelve
return 0; hexadecimal
}
CONVERSIONES DE TIPOS
Para convertir float a vector char (se utiliza sprinf)
#include<iostream> En realidad sprintf es
using namespace std; una función de
int main(){ formateo, pero sirve
char myCad[10]; para convertir
float Numero=34.27; numéricos a vectores
sprintf(myCad,"%0.3f",Numero); char.
cout<< myCad << endl;
system("pause"); También se puede
return 0; convertir a enteros
} como lo hace itoa.

Para convertir enteros se usa el operador "%d".


CONVERSIONES ENTRE TIPOS NUMÉRICOS
Entre tipos numéricos simplemente se antepone el operador de conversión que
consiste en escribir el tipo entre paréntesis

Ejemplo: Conversión de float a int

miEntero=(int)3.45;

Ejemplo: Conversión de int a float

miFloat=(float)miEntero;

miFloat=(float)miEntero/5;

También podría gustarte