Escolar Documentos
Profissional Documentos
Cultura Documentos
CONTENIDO
Tema 1 ______________________________________________________________ 3
Introduccin__________________________________________________________ 3
1.1 Historia del lenguaje de programacin C y C++______________________________ 3
1.2 Programacin Orientada a Objetos ________________________________________ 4
1.3 Caractersticas de la POO ________________________________________________ 5
TEMA 2 _____________________________________________________________ 8
Tipos de Datos ________________________________________________________ 8
2.1 Tipos de datos bsicos en C _______________________________________________ 8
2.2 Tipo de dato char _____________________________________________________ 10
2.3 Tipo de dato int _____________________________________________________ 12
2.4 Tipo de dato long ____________________________________________________ 16
2.5 Tipo de dato float ____________________________________________________ 17
2.6 Tipo de dato double __________________________________________________ 16
2.7 Tipo de dato long double ______________________________________________ 16
2.8 Representacin en punto flotante _________________________________________ 17
2.9 Aritmtica de punto flotante _____________________________________________ 22
2.10 Representacin en formato estndar IEEE (short real) _____________________ 22
2.11 Pase de entero a short real IEEE ________________________________________ 23
2.12 Tipo de dato void ____________________________________________________ 24
Tema 3 _______________________________________ Error! Marcador no definido.
TIPOS DE DATOS DEFINIDOS POR EL USUARIO _________ Error! Marcador no definido.
3.1 Estructuras _____________________________________ Error! Marcador no definido.
3.2 Creacin de una estructura ________________________ Error! Marcador no definido.
3.3 Unin __________________________________________ Error! Marcador no definido.
Tema 4 _______________________________________ Error! Marcador no definido.
APUNTADORES (POINTERS) ________________________ Error! Marcador no definido.
4.1 Definicin ______________________________________ Error! Marcador no definido.
4.2 Operadores * y & en apuntadores __________________ Error! Marcador no definido.
4.3 Operaciones Aritmticas entre Apuntadores _________ Error! Marcador no definido.
TEMA 5 _____________________________________ Error! Marcador no definido.
CLASES _______________________________________ Error! Marcador no definido.
5.1 Definicin de una clase ___________________________ Error! Marcador no definido.
5.1 Definicin de una clase _______________________ Error! Marcador no definido.
1
TEMA 6 ______________________________________ Error! Marcador no definido.
ASIGNACIN DINMICA DE MEMORIA _______________ Error! Marcador no definido.
6.1 Uso de malloc y free ______________________________ Error! Marcador no definido.
Tema 7 _______________________________________ Error! Marcador no definido.
ESTRUCTURAS DINMICAS DE DATOS ________________ Error! Marcador no definido.
7.1 Listas simplemente enlazadas ______________________ Error! Marcador no definido.
7.2 Listas doblemente enlazadas _______________________ Error! Marcador no definido.
7.3 Estructura de datos llamada Pila _________________ Error! Marcador no definido.
7.4 Estructura de datos llamado Cola (Queue) _________ Error! Marcador no definido.
Tema 8 _______________________________________ Error! Marcador no definido.
RECURSIVIDAD _________________________________ Error! Marcador no definido.
8.1 Recursividad ____________________________________ Error! Marcador no definido.
8.2 Tipos de recursin _______________________________ Error! Marcador no definido.
Tema 9 _______________________________________ Error! Marcador no definido.
RBOLES BINARIOS ______________________________ Error! Marcador no definido.
9.1 rboles Binarios _________________________________ Error! Marcador no definido.
Tema 10 ______________________________________ Error! Marcador no definido.
ARCHIVOS Y CORRIENTES _________________________ Error! Marcador no definido.
10.1 Corrientes _____________________________________ Error! Marcador no definido.
10.2 Archivos ______________________________________ Error! Marcador no definido.
10.3 Apuntadores a archivos __________________________ Error! Marcador no definido.
10.4 Lectura y escritura de Bloques ____________________ Error! Marcador no definido.
2
Tema 1
INTRODUCCIN
Lenguaje C
El lenguaje C se dise en 1972 (Dennis Ritchie). Ms tarde, en 1983, se defini el
estndar ANSI C (que es el que aqu presentaremos). Ya ha quedado dicho que el
lenguaje C est creado para la programacin estructurada.
El lenguaje C tiene muy pocas reglas sintcticas, sencillas de aprender. Su lxico es
muy reducido: tan solo 32 palabras.
A menudo se le llama lenguaje de medio nivel, ms prximo al cdigo mquina que
muchos lenguajes de ms alto nivel. Y por eso mismo es un lenguaje muy eficiente.
Permite el uso del lenguaje ensamblador en partes del cdigo, trabaja a nivel de bit, y
permite modificar los datos con operadores que manipulan bit a bit la informacin.
Tambin se puede acceder a las diferentes posiciones de memoria conociendo su
direccin.
El lenguaje C permite con facilidad la programacin modular, creando unidades
independientes que pueden compilarse de forma independiente, que pueden
posteriormente enlazarse. As, se crean funciones o procedimientos, que se pueden
compilar y almacenar, creando as bibliotecas de cdigo ya editado y compilado que
resuelve distintas operaciones. Cada programador puede disear sus propias
bibliotecas, que simplifican luego considerablemente el trabajo futuro. El ANSI C posee
una amplia coleccin de bibliotecas de funciones estndar y normalizadas.
Lenguaje C++
En 1980 surge C++ de la mano de Bjarne Stroustrup (tambin de Laboratorios Bell de
AT&T). Disea este lenguaje con el objetivo de aadir a C nuevas caractersticas: clases
y funciones virtuales (de SIMULA67), tipos genricos y expresiones (de ADA), la
posibilidad de declarar variables en cualquier punto del programa (de ALGOL68), y
sobre todo, un autntico motor de objetos con herencia mltiple que permite combinar
la programacin imperativa de C con la programacin orientada a objetos. En 1985 se
realizan pruebas permitiendo el uso de este.
3
El nombre de C++ de debe a Rick Mascitti, significando el carcter evolutivo de las
transformaciones de C (++ es el operador de incremento de C).
C++ ha sido ampliamente revisado y refinado, lo que ha dado lugar a aadir nuevas
caractersticas, como herencia mltiple funciones miembro static y const, miembros
protected, tipos genricos de datos o plantillas y manipulacin de excepciones. Se han
revisado caractersticas como sobrecarga, enlace y manejo de memoria. Adems, se
realizaron cambios para as poder incrementar la compatibilidad con C y se aadieron
la identificacin de tipos durante la ejecucin y los espacios de nombres con el objetivo
de convertir a C++ en un lenguaje mas propicio para la escritura y utilizacin de
bibliotecas.
Apartir la estandarizacin publicada en 1998 llamada estndar ISO C++ (ISO/IEC
International Standardization Organization/ International Electrotechnical Commissin)
14882) se logro tener la biblioteca que actualmente incorpora C++ y que fue escrita con
la intencin de que el cdigo se pueda portar entre diferentes plataformas y de incluir
solo aquellas clases que realmente fueran utilizadas por la mayora de los
programadores. Las facilidades proporcionadas por esta biblioteca estndar las
podemos resumir en los siguientes puntos:
Soporte bsico, como por ejemplo identificacin del tipo de los objetos durante la
ejecucin y gestin de memoria.
Soporte proporcionado para la biblioteca de C (manipulacin de cadenas, archivos,
etc.).
La clase string para la manipulacin de cadenas de caracteres.
Clases para la entrada-salida
Clases contenedor como vectores, listas y mapas.
Algoritmo de bsqueda y de ordenacin.
Clases para trabajar con nmeros como son cmath, complex y cstdlib.
C++ es por lo tanto, un lenguaje hbrido que, por una parte, ha adoptado todas las
caractersticas de la programacin orientada a objetos (POO) que no perjudiquen su
efectividad; por ejemplo, funciones virtuales y la ligadura dinmica (dynamic binding), y
por otra parte, mejora sustancialmente las capacidades de C. Esto, junto con la
biblioteca de clases soportada, dota a C++ de una potencia, eficacia y flexibilidad que
lo convierten en un estndar dentro de los lenguajes de programacin orientados a
objetos.
4
POO. Que es una serie de normas de realizar las cosas de manera que otras personas
puedan utilizarlas y adelantar su trabajo, de manera que consigamos que el cdigo se
pueda reutilizar con el fin de disminuir el costo del software, aumentando la eficiencia
en la programacin y reduciendo el tiempo necesario para el desarrollo de una
aplicacin.
Todo objeto del mundo real tiene 2 componentes: caractersticas y comportamiento. Por
ejemplo, los automviles tienen caractersticas (marca, modelo, color, velocidad
mxima, etc.) y comportamiento (frenar, acelerar, retroceder, llenar combustible,
cambiar llantas, etc.).
Los Objetos de Software, al igual que los objetos del mundo real, tambin tienen
caractersticas y comportamientos. Un objeto de software mantiene sus caractersticas
en una o ms "variables", e implementa su comportamiento con "mtodos". Un mtodo
es una funcin o subrutina asociada a un objeto.
Para redondear estas ideas, imaginemos que tenemos estacionado en nuestra cochera
un Ford Focus color azul que corre hasta 200 km/h. Si pasamos ese objeto del mundo
real al mundo del software, tendremos un objeto Automvil con sus caractersticas
predeterminadas:
Marca = Ford
Modelo = Focus
Color = Azul
Velocidad Mxima = 200 km/h
Abstraccin:
Es la capacidad de separar los elementos (al menos mentalmente) para poder verlos de
forma singular. Como cuando describimos el cuerpo humano y decimos cabeza,
brazo(s), pierna(s), etc. Cada objeto en el sistema sirve como modelo de un "agente"
5
abstracto que puede realizar trabajo, informar y cambiar su estado, y "comunicarse" con
otros objetos en el sistema sin revelar cmo se implementan estas caractersticas.
Encapsulamiento:
Poliformismo:
Esta propiedad indica la posibilidad de definir varias operaciones con el mismo nombre,
diferencindolas nicamente en los parmetros de entrada. Dependiendo del objeto que
se introduzca como parmetro de entrada, se elegir automticamente cual de las
operaciones se va a realizar.
Ya est habituado al operador <<suma>> que est presente en todos los lenguajes de
programacin. Sin embargo, los operadores <<suma de fracciones>> y <<suma de
nmeros complejos>> no existen en casi ningn lenguaje de programacin.
Los lenguajes POO permiten definir un operador <<suma>> tal que reconozca que tipo
de objeto se le est aplicando, a travs de operaciones de objetos. Previamente deber
definir la fraccin y el nmero complejo como una clase y la operacin suma como una
operacin de una clase. Definiendo adecuadamente la operacin suma de fracciones y
suma de nmeros imaginarios, el operador suma devolver, en el caso que los
operandos sean fracciones, una fraccin y en el caso de los nmeros imaginarios, otro
nmero imaginario. Es posible extender el concepto e incluso definir operaciones como
suma de bases de datos.
6
Herencia:
La herencia es la capacidad que tiene una clase de derivar las propiedades y mtodos
de otra. Consiste en la propagacin de los atributos y las operaciones a travs de
distintas subclases definidas a partir de una clase comn. Nos permite crear estructuras
jerrquicas de clases donde es posible la creacin de subclases que incluyan nuevas
propiedades y atributos. Estas subclases admiten la definicin de nuevos atributos, as
como crear, modificar o inhabilitar propiedades.
Asociemos a este tipo bsico una clase cuyos atributos representen las piezas que
componen el coche. Las subclases aportarn sus propios atributos (en el caso de
vehculos con aire acondicionado, todas aquellas piezas que lo componen), permitiendo
la definicin de todos los posibles modelos.
7
TEMA 2
Tipos de Datos
Los nmeros enteros largos y los valores de punto flotante utilizan ms espacio en
almacenamiento, obteniendo una ejecucin de operaciones ms lentas. Las variables
numricas del C caen en las dos categoras principales:
Las variables enteras guardan valores que no tienen fracciones usan nicamente
nmeros enteros. Dentro de las variables enteras existen con signo y sin signo. Las
variables enteras con signo ayudan a guardar valores positivos o negativos, en
cambio las variables enteras sin signo nicamente guardar valores positivos
incluyendo el 0.
Las variables de punto flotante guardan valores que tienen fracciones (nmeros
reales).
El rango aproximado (como se puede ver en la siguiente tabla) significa los valores
mximos y mnimos que puede guardar una variable dada, (por desgracia las
limitaciones de los espacios impiden listar los rangos exactos para cada una de estas
variables).
8
TIPOS DE VARIABLES
Cada tipo puede ser calificado por las palabras clave signed o unsigned, lo que
da lugar a tener disponibles los siguientes tipos extras:
9
signed char
unsigned char
signed short
unsigned short
signed int
unsigned int
signed long
unsigned long
Un entero calificado signed es un entero con signo, esto es, un nmero entero
positivo o negativo. Un nmero entero calificado unsigned es un nmero enero
sin signo, el cual es manipulado como un nmero entero positivo.
signed x;
signed int x;
unsigned y;
unsigned int y;
Este ejemplo declara una variable llamada car de tipo char, capaz de contener
un carcter cuyo cdigo ASCII se corresponder con un valor entero entre 0 y
127. Otros ejemplos son:
char a = z;
signed char b = 0x07;
unsigned char c = 32;
10
1 byte = 8 bits
8 bits = 1 byte
64 32 16 8 4 2 1 Valor de la posicin
1 2 3 4 5 6 7 8
11
PROGRAMA # 1
#include<conio.h>
#include<string.h>
#include<iostream>
//#include<iomanip.h>
// PROGRAMA No.1
int main(void)
{
unsigned char c;
cout<<" TABLA ASCII"; cout<<"\n\n\n Este programa despliega en la pantalla la tabla
ASCII";
cout<<"\n En modo caracter y sus valores en decimal y hexadecimal \n\n";
getch();
system("cls");
cout<<"------------------------------------------------------------"<<endl;
cout<<"| CARACTER DECIMAL HEXADECIMAL |"<<endl;
cout<<"------------------------------------------------------------"<<endl;
for(c=0;c<255;c++)
{
cout<<endl<<"| "<<c<<" |"<<"\t"<< dec << (int)c <<" |"<< hex << (int)c <<" |";
getch();
}
cout<<endl<<"| "<<c<<" |"<<"\t"<< dec << (int)c <<" |"<< hex << (int)c <<" |";
cout <<endl;
cout<<"----------------------------------------";
getch();
return(0);
}
12
2.3 Tipo de dato int
De forma similar el tipo unsigned short puede almacenar valores en el rango de:
0 a 65535.
Ejemplo:
short i, j;
En general:
13
2 bytes = 16 bits
bit de signo
0=+
1=-
0000000000000000 = + 0
0000000000000001 = +1
0111111111111111 = + 32767
1000000000000000 = - 0 = -32768
1111111111111111 = -32767
Ejemplos:
int a = 2000;
signed int b= -30;
unsigned int c = oxf003;
14
PROGRAMA #2
#include<conio.h>
#include<string.h>
#include <stdio.h>
#include<iostream>
#include<time.h>
#include<ctime>
// PROGRAMA No.2
int main(void)
{
int i, j;
int xmin=1,xmax=15,ymin=1,ymax=3;
system("cls");
cout<<"\t\t\t\t\tMANEJO DE DATOS ENTEROS\n\t\SIMULACION DE
MOVIMIENTO\n\n";
cout<<"\n\n\t\tpresione cualquier tecla para continuar";
getch();
system("cls");
for(j=ymin; j<ymax;j++)
{
for(i=xmin;i<=xmax;i++)
{ cout<<">"; delay(1);
cout <<"\b ";
}cout<<endl;
}
cout<<"\n FIN";
getch();
15
2.4 Tipo de dato long
(entero largo 4 bytes)
Este tipo de nmeros es idneo para aplicaciones de gestin. Al igual que los
enteros, son nmeros sin punto decimal comprendidos en el rango de:
-2147483648 a 2147483647 para tipo long.
0 a 4294967295 para el tipo unsigned long.
En general:
tamao (int) tamao (long).
Un nmero real en doble precisin es uno que puede tener un punto decimal y
puede estar comprendido en el rango de:
Ejemplo:
double x;
double a= 3.1415926;
double b= 2.2 e-8
16
Un nmero real en doble precisin formato largo no tiene ms de 19 dgitos
significativos. Esto da lugar a clculos ms precisos que en doble precisin.
Ejemplo:
long double x;
long double>=3.17e+425;
float x;
float a = 3.14159;
float b = 2.2 e-8;
17
Signo exponente signo exponente
32 bits
18
El rango de valores representable por cada uno de los campos es:
OVERFLOW Y UNDERFLOW:
Overflow
Underflow
-n 0 n 2Xn 4Xn
19
o coprocesadores para poder usarlos, y si bien actualmente todas las PC que
podemos encontrar poseen coprocesadores, no pasa lo mismo con los
microcontroladores que en su mayora no lo soporta.
Si bien el ensamble posee emuladores de coma flotante, lo que se intenta, es
que se comprenda el uso del punto flotante para luego poder ser utilizado en
cualquier microprocesador o microcontrolador que no posee ninguna
caracterstica de manejo para estos nmeros.
Componentes
Un nmero flotante esta formado por:
- 1 . 10111 X 21101
Exponente
Mantisa (parte decimal)
Signo
Cada una de estas partes del punto flotante tendrn una ubicacin determinada
dentro de la codificacin del nmero, y su longitud detendr el tipo del nmero.
EXPONENTE
eieee = e + 2m-1 -1
MANTISA
La mantisa debe cumplir 1 = mantisa<2. Por lo tanto la parte entera ser siempre
1 y solo ser guardada en el nmero la parte decimal justificada a la derecha (un
caso particular es el 10 byte real, en el cual el campo de parte entera existe, y
siempre valdr 1).
20
Signo
1 = NEGATIVO
0 = POSITIVO
TIPOS
Signo: 1 bit
Exponente: 8 bits
Mantisa (parte decimal): 23 bits
Total: 32 bits (4 bytes).
Singo: 1 bit
Exponente: 11 bits
Mantisa (parte decimal): 52 bits
Total: 64 bits (8 bytes)
21
2.9 Aritmtica de punto flotante
X=3.625
El nmero ser de la forma (-1)5 X f X 2e.
Sacamos el exponente
f X 2e = 3.625
Parte decimal:
0.8125 X 2 = 1.625 entero =1
0.625 X 2 = 1.25 entero =1
0.25 X 2 = 0.5 entero =0
0.5 X 2 = 1 entero= 1
f= 1.1101
resultado:
x=(-1)0 X 1.1101 X 21
Signo= 0
Mantisa = 110100000000000000000002
Exponente:
exp= 1 +27 -1= 1 +127 = 128
exp= 100000002
Resultado
x= 3.625
x= 1.1101x21
22
x= 0_10000000_11010000000000000000000
x=4068000016
Primero debemos realizar una funcin que almacene el valor en el nmero. Est
funcin realizar lo siguiente:
carga el bit de signo con el signo del nmero.
guarda en la mantisa el valor ABSOLUTO del nmero.
Calcular el exponente y guardarlo en el campo correspondiente.
Para la realizacin del clculo del exponente deberemos saber primero como
estamos almacenando el nmero.
x = 1,000000000001001001101 x 2e
Esto significa que el exponente no puede ser 0, sino que ser un nmero que
recorra la coma a la derecha tantos lugares como longitud de mantisa tenga,
para este caso sern 23, adems sabemos que el valor a almacenar en el campo
de exponente es
0 10001010 00000000000100100110100
Una vez hecho esto debemos realizar otra operacin llamada normalizacin.
Esta operacin realiza sucesivos shift register a la izquierda al mismo tiempo
23
que se decrementa el exponente hasta que el shift register provoque el desborde
de un uno.
Ejemplo:
double fx(void);
double fy(void);
void *p;
Este ejemplo declara la funcin denominada fx como una funcin sin argumentos
que devuelve un valor de tipo real de doble precisin; la funcin fy, como una
funcin sin argumentos que no devuelve valor alguno; y un puntero p a un objeto
de un tipo especificado.
PROGRAMA #3
24