Académique Documents
Professionnel Documents
Culture Documents
Las computadoras fueron diseadas o ideadas como una herramienta mediante la cual podemos realizar operaciones de clculo
complicadas en un lapso de mnimo tiempo. Pero, la mayora de las aplicaciones de este fantstico invento del hombre, son las de
almacenamiento y acceso de grandes cantidades de informacin.
La informacin que se procesa en la computadora es un conjunto de datos, que pueden ser simples o estructurados. Los datos simples
son aquellos que ocupan solo una localidad de memoria, mientras que los estructurados son un conjunto de casillas de memoria a las
cuales hacemos referencia mediante un identificador nico.
Debido a que por lo general tenemos que tratar con conjuntos de datos y no con datos simples (enteros, reales, booleanos, etc.) que
por s solos no nos dicen nada, ni nos sirven de mucho, es necesario tratar con estructuras de datos adecuadas a cada necesidad.
INTRODUCCIN.
Una estructura de datos es una coleccin de datos organizados de un modo particular, las estructuras de datos pueden ser de dos
tipos: estructuras de datos estticas y estructura de datos dinmicas. Las estructuras de datos estticas son aquellas en las que el
espacio en memoria se define en tiempo de compilacin y no pueden ser modificados durante la ejecucin del programa,
corresponden a este tipo los arrays (vectores y matrices). Las estructuras de datos dinmicas son aquellas en las que el espacio
ocupado en memoria puede ser modificada en tiempo de ejecucin, corresponden a este tipo: las listas, rboles y grafos.
ESQUEMA.
- Boolean.
- char.
- integer
Smples o
Fundamentales
- real.
Estticas
- String.
- Arreglos.
- Conjuntos.
- Registros.
Compuestas o
Estructuradas
Estructuras de
Datos
- Archivos
- pilas.
- colas.
- listas.
- rboles.
- Grfos.
Dinmicas
TIPOS DE DATOS ABSTRACTOS (TDA).
Creacin de tipos de datos definidos por el usuario.
Permite organizar de manera ms eficiente los datos de un programa.
Permite al usuario no restringirse a los datos definidos por el lenguaje.
TAD [Tipos de Datos Abstractos]
Los TAD son definidos por el programador
TAD= Datos + Operaciones (Funciones).
GREIDY SIERRA
CORTE 1
EJEMPLO
#include<iostream>
#include<string>
using namespace std;
class Empleados{
private:
int horas;
float valor, salario;
string nombre;
public :
//Acceso a mtodos setter
Empleados(){}
void LeerNombre(string No){
nombre=No;
}
void LeerHoras(int Ho){
horas=Ho;
}
void Leervalor (float va){
valor=va;
}
void CalcularSalario(){
salario=horas*valor;
}
//Acceso a mtodos getter
string EscribirNombre(){
return nombre;
}
int EscribirHorasO{
return horas;
}
float Escribirvalor(){
return valor;
}
float Salario(){
return salario;
}
};
int main(){
system("color 1FM");
//variables y objetos
string Nombre;
int horas;
float valor;
Empleados obj1;
cout<<"Escriba el nombre, horas, valor"<<endl
;
cin>>Nombre>>valor>>horas;
obj1.LeerNombre(Nombre);
obj1.LeerHoras(horas);
obj1.Leervalor(valor);
obj1.CalcularSalario();
//imprimir datos de obj1
cout<<"Su salario "<<obj1. EscribirNombre()<<"
es "<<obj1.salario();
system("pause");
}
CREAR UN TDA.
Las estructuras toman una parte de la memoria y se la reparte entre sus miembros.
Cada miembro tiene reservado un espacio para l solo.
El tamao total que ocupa una estructura en memoria es la suma del tamao que ocupa cada uno de sus miembros.
GREIDY SIERRA
TIPOS DE DATOS:
VARIABLES:
INT
INT NMERO;
STRING
STRING NOMBRE;
DOUBLE
DOUBLE NOTA;
TDA(Tiempo)
TIEMPO HORA;
CORTE 1
La creacin de un tipo de
dato abstracto no reserva
el espacio de memoria, sin
embargo las variables de
este nuevo tipo de dato, si
reservan espacio.
IMPLEMENTACION DE UN TDA.
struct tiempo{
int hora; //0-23
int minuto; //0-59
int segundo; //0-59
};
Los miembros de las estructuras pueden ser de cualquier tipo, excepto un miembro de un mismo tipo.
DECLARACIN DE OBJETOS.
tiempo objtiempo;
tiempo arregloObjestos[10];
Estructuras ej1.
//Crea una estructura, establece sus miembros
y la imprime.
#include<iostream>
#include<iomanip>
using namespace std;
//Definicin de la estrctura
struct Tiempo{
int hora;
int minuto;
int segundo;
}; //Fin de la estructura tiempo
//definicin de prototipos de funciones
void imprimirUniversal(const Tiempo);
void imprimirEstandar(const Tiempo);
int main()
{
system("color 1F");
Tiempo horaCena;
cout<<"digite la hora";
cin>>horaCena.hora;
while(horaCena.hora<0 || horaCena.hora>23){
cout<<"hora no valida digite nuevamente";
cin>>horaCena.hora;
}
cout<<"digite los minutos";
cin>>horaCena.minuto;
while(horaCena.minuto<0 ||
horaCena.minuto>61){
cout<<"Minutos no validos digite nuevamente";
cin>>horaCena.minuto;
GREIDY SIERRA
CORTE 1
}
cout<<"digite los segundos";
cin>>horaCena.segundo;
while(horaCena.segundo<0 ||
horaCena.segundo>61){
cout<<"Segundos no validos digite
nuevamente";
cin>>horaCena.segundo;
}
cout<<"La cena se servir a las : ";
imprimirUniversal (horaCena);
cout<<"En hora universal ";
imprimirEstandar(horaCena);
system("pause");
}
//imprimir la hora con el formatos universal
void imprimirUniversal(const Tiempo t){
cout<<setfill(0)<<setw(2)<<t.hora<<" :
"<<setw(2)<<t.minuto<<" :
"<<setw(2)<<t.segundo<<endl;
}// fin de la funcin impresin universal
//imprimir la hora con el formato estandar
void imprimirEstandar(const Tiempo t){
cout<<((t.hora==0 || t.hora==12) ? 12:
t.hora%12)<<" : "<<setfill
(0)<<setw(2)<<t.minuto<<" :
"<<setw(2)<<t.segundo<<(t.hora<12 ?
'AM':'PM')<<endl;
}
EJEMPLO 2:
/*Supongamos que queremos hacer una agenda con los nmeros de telfono de nuestros amigos.
Necesitaramos un array de Cadenas para almacenar sus nombres, otro para sus apellidos y otro para
sus nmeros de telfono. Esto puede hacer que el programa quede desordenado y difcil de seguir. Y
aqu es donde vienen en nuestro auxilio las estructuras.*/
//declaracin de estructura
#include<stdio.h>
#include<iostream>
struct estructura_amigo {
char nombre[30];
char apellido[40];
char telfono[10];
char edad;
};
//Declaracin de una variable con esa
estructura.
struct estructura_amigo amigo;
struct estructura_amigo {
char nombre[30];
char apellido[40];
char telefono[10];
} amigo;
void main()
{
printf("Escribe el nombre del amigo:");
ARRAYS DE ESTRUCTURAS.
Supongamos ahora que tenemos que guardar la informacin de varios amigos. Con una variable de estructura solo podemos guardar
los datos de uno. Para manejar los datos de ms gente (al conjunto de todos los datos de cada persona se les llama registro)
necesitamos declarar arrays de estructuras.
struct estructuta_amigo amigo[ELEMENTOS];
// La variable definida es amigo, por lo tanto para acceder al primer elemento usaremos amigo[0] y
a su miembro nombre: amigo[0].nombre.
EJEMPLO 1:
#include<stdio.h>
#include <iostream>
#define ELEMENTOS 3
struct estructura_amigo{
char nombre[30];
char apellido[40];
char telefono[10];
int edad;
};
struct estructura_amigo amigo[ELEMENTOS];
void main(){
int num_amigo;
for(num_amigo=0; num_amigo<ELEMENTOS;
num_amigo++){
printf("\n datos del amigo numero %i \n",
num_amigo+1);
printf("nombre: ");
fflush(stdout);
GREIDY SIERRA
CORTE 1
}
system("pause");
}
EJEMPLO 1:
/*Cuando declaramos una variable como estructura
le damos el valor inicial que queramos.*/
#include<stdio.h>
#include<iostream>
struct estructura_amigo{
char nombre[30];
char apellido[40];
char telefono[10];
int edad;
};
struct estructura_amigo amigo = {
"Juanjo",
"Lpez",
"592-04873",
30
};
int main()
{
system("color 1F");
printf("%s tiene",amigo.apellido);
printf("%i aos", amigo.edad);
printf("y su telefono es el %s.\n",
amigo.telefono);
system("pause");
}
EJEMPLO 2:
#include<stdio.h>
#include<iostream>
struct estructura_amigo{
char nombre[30];
char apel1ido[40];
char telefono[10];
int edad;
};
struct estructura_amigo amigo[] = {
"Juanjo","Lpez","592-0487B",30,
"Marcos","Garmi ndez","405-4823",42,
"Ana","Marti nez","533-5694",20 };
int main(){
for(int i=0;i<3;i++){
printf("%s tiene",amigo[i].apel1ido);
printf("%i aos", amigo[i].edad);
printf("y su telefono es el
%s.\n",amigo[i].telefono);
}
system("pause");
}
EJEMPLO 1:
#include<stdio.h>
#include<iostream>
struct estructura_amigo{
char nombre[30];
char apellido[40];
char telefono[10];
int edad;
};
GREIDY SIERRA
CORTE 1
return arg_amigo.edad+20;
}
int main()
{
printf("%s tiene", amigo.apellido);
EJEMPLO 2:
#include<stdio.h>
#include<iostream>
struct estructura_amigo{
char nombre[30];
char apellido[40];
char telefono[10];
int edad;
};
struct estructura_amigo amigo = {
"Juanjo",
"Lpez",
"454565",
30
};
int suma(struct estructura_amigo *arg_amigo) {
return arg_amigo->edad+20;
}
int main(){
printf("%s tiene",amigo.apellido);
printf("%i aos", amigo.edad);
printf("y dent de 20 aos tendr
%i./n",suma(&amigo));
system("pause") ;
}
int discos;
int cintas;
int cd;
};
struct estruc_proveedor{
char nombre_proveedor[40];
char telefono_proveedor[10];
char direccion_proveedor[100] ;
};
struct inventario{
char titulo[30];
char autor[40];
struct estruc_existencias existencias;
struct estruc_proveedor proveedor;
}inventario;
UNIONES.
Las unidades tienen un aspecto simular en cuanto a cmo se definen, pero tienen una diferencia fundamental con respecto
a las estructuras: los miembros comparten el mismo trozo de memoria.
#include<stdio.h>
#include<iostream>
union _persona{
char nombre[10];
char inicial;
}pers;
int main(){
printf("Escribir tu nombre : ");
gets(pers.nombre);
printf("\nTu nombre es : %s\n", pers.nombre);
printf ("Tu inicial es : %c\n", pers.inicial); //Cambiamos la inicial pers.inicial='Z';
GREIDY SIERRA
CORTE 1
Al cambiar el valor de la inicial estamos cambiando tambin el nombre porque la inicial y la primera letra del nombre son
la misma posicin de la memoria.
ENUMERACIONES.
#include <stdio.h>
#include < iostream >
#define primero 1
#define segundo 2
#define tercero 3
#define cuarto 4
#define quinto 5
int main(){
int posicion;
posicion=segundo;
printf("posicion = %i\n",posicion);
system ("pause");
}
Existe otra forma de declarar estas constantes y es con las enumeraciones. Las enumeraciones se crean con enum:
enum nombre_de_la_enumeracin {
nombres de las constantes
};
enum { primero, segundo, tercero, cuarto, quinto };
Se definieron las constantes primero, segundo,... quinto. Si no especificamos nada la primera constante (primero) toma el valor 0, la
segunda (segunda) vale 1, la tercera 2,...
Podemos cambiar estos valores predeterminados por los valores que deseemos:
enum { pnmero=l, segundo, tercero, cuarto, quinto };
Ahora primero vale 1, segundo vale 2, tercero vale 3,... Cada constante toma el valor de la anterior ms uno.
EJEMPLO 1:
#include<stdio.h>
#include<iostream>
enum { primero=1, segundo, tercero, cuarto, quinto } posicion;
int main(){
posicion=segundo;
printf("posicion = %i\n", posicion);
system ("pause");
}
GREIDY SIERRA
CORTE 1
APUNTADORES.
(*) <- Smbolo:
El uso de apuntadores en c++ es muy importante debido a que permite hacer los programas ms eficientes y ms flexibles (*)
Permiten manipular estructuras dinmicas (Arreglos, Listas, Pilas, Colas) de datos, es decir estructuras de datos que crecen y
disminuyen y cualquier tipo de variable.
(&) <- Smbolo:
La referencia es la obtencin de la direccin de una variable.
Una variable por lo general contiene un valor especifico en cambio un apuntador contiene la direccin de memoria de una
variable que tiene valor especifico.
Contador (7):
Contador hace referencia de manera directa a una variable que contiene el valor 7.
DECLARACIN.
int *ptrcontador; // Apuntador a una variable int
USO DE APUNTADORES:
cout<<*ptry<<endl //imprime el valor de la variable "y", es decir 5, tal como lo hara la instruccin
<<cout<<y<<endl;
EJEMPLO 1:
EJEMPLO 2:
#include<iostream>
#include<stdio.h>
#include<iostream>
using namespace std;
void main(){
int a=4,z=5;
int*ptra;
ptra=&a;
system("pause");
}
GREIDY SIERRA
CORTE 1
CONTENIDO.
NUMERO
cuboPorValor(int num)
NUMERO
NUM
5
5
cout<<"El valor inicial del numero es
"<<numero<<endl;
cuboPorReferencia(&numero);//pasa la
direccin de numero a cuboPorReferencia
cout<<"El nuevo valor de numero es:
"<<numero<<endl;
system("pause");
}
void cuboPorReferencia(int *ptrN){
*ptrN>>*ptrN**ptrN**ptrN;
}
EJEMPLO 1:
Funcin paso por referencia
#include<iostream>
using namespace std;
void cuboPorRefcrencia(int *); //Prototipo
void main(){ int numero=5;
EXPRESIONES ARITMTICAS
Un apuntador se puede:
Incrementar (++).
Disminuir().
Se puede sumar un entero a un apuntador (+ o +=). Se puede restar un entero de un apuntador (- =). Se puede restar un apuntador de otro.
int* ptr;
ptr apuntar a cierta direccin de memoria.
La expresin ptr+k es un puntero que apunta a la direccin de ptr sumndole k veces el espacio ocupado por un elemento del tipo al que apunta (en este
caso un int).
GREIDY SIERRA
CORTE 1
EJEMPLO 1:
#include<iostream>
using namespace std;
void main(){
int b[]={10,20,30,40}; //crea un arreglo b de 4 elementos
int *bPtr = b; // establece bPtr para que apunte al arreglo b
//imprime el arreglo b usando la notacin de subndice de arreglo
cout<<"se imprime el arreglo b con: \n \n Notacin de subndice de arreglo \n";
for(int i=0; i<4 ; i++){
cout<<"b[" << i <<"]"<<b[i]<<endl;
}
//imprime el arreglo b usando el nombre del arreglo y la notacion apuntador/desplazamiento
cout<<"\n Notacion apunbntador / desplazamiento en donde el"<<"apuntador es el nombre del arreglo
\n" ;
for (int desplazamiento = 0; desplazamiento <4 ; desplazamiento++){
cout<<"*(b * "<<desplazamiento << ")="<<*(b+desplazamiento )<< "\n";
}
//imprime el arreglo b usando bPrt y la notacion de subndice de arreglo
cout<<"\n Notacion de subndice de apuntador \n";
for(int j=0 ; j<4 ;j++){
cout<< "bPtr[" <<j<< "] = " <<bPtr[j]<<endl;
//imprime el arreglo b usando bPtr y la notacion apuntador/desplazamiento
cout<<"Notacion apuntador / desplazamiento \n";
for(int desplazamiento2=0 ; desplazamiento2<4 ; desplazamiento2++){
cout<<"*(bPtr + "<<desplazamiento2 <<") ="<<*( bPtr + desplazamiento2 )<<"\n";
system("pause");
}
ACCESO CON APUNTADORES A ARREGLO.
EJEMPLO 1:
Punteros a estructuras.
#include<iostream>
#include<stdio.h>
struct estructura_amigo {
char nombre[30];
char apellido[40];
char telefono[10];
int edad;
};
// Este operador -> significa: da acceso al
miembro... del puntero
struct estructura_amigo amigo={
"Juanjo",
"Lpez",
"592-0483",
GREIDY SIERRA
CORTE 1
30
};
struct estructura_amigo *p_amigo;
int main(){
p_amigo = &amigo;
printf( "%s tiene ", p_amigo->apellido);
printf( "%i aos ", p_amigo->edad);
printf ("y su telfono es el %s.\n" ,
p_amigo->telefono);
system("pause");
10
fflush(stdout);
gets(p_amigo->nombre);
printf("Apellido: ");
fflush(stdout);
gets(p_amigo->apellido);
printf("Edad: ");
fflush(stdout);
scanf( "%i", &p_amigo->edad);
/* Mostramos los datos */
printf( "El amigo %s ", p_amigo-nombre );
printf( "%s tiene ", p_amigo->apellido);
printf( "%i aos.\n", p_amigo->edad);
EJEMPLO 2:
#include <stdio.h>
struct estructura_amigo {
char nombre[30];
char apellidlo];
int edad;
};
struct estructura_amigo amigo, *p_amigo;
void mainO {
p.amigo = &amigo;
printf("Nombre: ");
EJEMPLO 1:
#include <stdio.h>
#include<iostream>
#define ELEMENTOS 3
20,
};
struct estructura_amigo *p_amigo;
void main(){
int num_amigo;
p_amigo = amigo; // Apuntamos al primer
elemento del array.
struct estructura_amigo {
char nombre[30];
char apellido[40];
char telefono[10];
int edad;
};
struct estructura_amigo amigo[] ={
"Juanjo",
"Lpez",
"504-4342",
30,
"Marcos",
"Gamindez",
"405-4823",
42,
"Ana",
"Martnez",
"533-5694",
GREIDY SIERRA
CORTE 1
11
fflush(stdout);
gets(p_amigo->nombre);
printf("apellido: ");
fflush(stdout);
gets(p_amigo->apellido);
printf("Edad: ");
fflush(stdout);
scanf( "%i", &p_amigo->edad );
// vaciamos el buffer de entrada
while(getchar()!='\n');
//saltamos al siguiente elemento
p_amigo++;
}
//Ahora imprimimos sus datos
p_amigo = amigo;
for( num_amigo=0; num_amigo<ELEMENTOS; num_amigo++
) {
printf( "El amigo %s ", p_amigo->nombre);
printf( "%s tiene ", p_amigo->apellido );
printf( "%i aos.\n", p_amigo->edad);
p_amigo++;
}
system("pause");
}
EJEMPLO 2:
#include <stdio.h>
#include<iostream>
#define ELEMENTOS 3
struct estructura_amigo {
char nombre[30];
char apellido[40];
int edad;
};
struct estructura_amigo amigo[ELEMENTOS],
*p_amigo;
void main(){
int num_amigo;
// apuntamos al primer elemento
p_amigo = amigo;
// Introducimos los datos mediante punteros //
for (num_amigo=0; num_amigo<ELEMENTOS;
num_amigo++) {
printf("Datos amigo %i\n",num_amigo);
printf("Nombre: ");
mayor-p[0];
menor-p[0];
EJEMPLO 3:
/*crea un vector en forma dinmica y encuentra
el mayor y el menor,
utilizando apuntadores*/
#include<iostream>
using namespace std;
int n,i;
float *ptr,mayor,menor;
int main(){
cout<<"DIGITE EL TAMAO DEL VECTOR:";
cin>>n;
float* p = new float[n];
for(i=0; i<n; i++) {
cout<<"p["<<i<<"j= ";
}
cin>>p[i];
}
ptr=&p[0];
GREIDY SIERRA
CORTE 1
12
Conceptos fundamentales de la
PROGRAMACION ORIENTADA A OBJETO
Pensar en objetos es pensar como lo hacemos en la vida real. Si usted mira a su alrededor lo que ve son objetos, personas, animales, libros,
computadores, muebles, edificios, etc. La Programacin Orientada a Objetos (POO) es un estilo de programacin que emplea los objetos como
componentes fundamentales para la construccin de programas. Es decir, realiza un modelado de objetos reales, sus caractersticas y comportamientos.
CLASES.
Una clase se puede considerar como un patrn para construir objetos, es decir, son tipos de datos definidos por el programador, quien determinar las
estructuras de datos y las operaciones asociadas con ese tipo.
En C++, un objeto es slo un tipo de variable de una clase determinada. Cada vez que se construye un objeto de una clase, se crea una instancia de esa
clase. Por consiguiente, una clase define las propiedades y comportamiento de un tipo de objeto concreto.
Es importante diferenciar entre objetos y clases, una clase es una coleccin de objetos similares y un objeto es una instancia de una definicin de una
clase. La clase es simplemente una declaracin, no tiene asociado ningn objeto, de modo que no puede recibir mensajes ni procesarlos, esto
nicamente lo hacen los objetos.
//Sintaxis de La declaracin de una clase
class nombre_clase{
membro_dato1;
miembro_dato2;
class elemento{
char nom[20];
char marca [20];
int cantidad;
void aumentar_cantidad(int numero);
void disminuir_cantidad(int numero);
};
............
funcion_miembro1O;
funcion_miembro20;
};
EJEMPLO 1:
#include<iostream>
#include<string>
}
float EscrbirValor(){
return valor;
}
float salario(){
return salario;
}
GREIDY SIERRA
};
int main(){
//Variables y Objetos
string Nombre;
int horas;
float valor;
Empleados obj1;
cout<<"Escrbia en nombre, horas,
valor"<<endl;
cin>>Nombre>>valor>>horas;
obj1.LeerNombre(Nombre);
obj1.LeerHoras(horas);
obj1.LeerValor(valor);
obj1.CalcularSalario();
//Imprimirlos datos del objeto objl
cout<<"Su salario
"<<obj1.EscribirNombre()<<" es
"<<obj1.CalcularSalario();
system("pause>null");
}
CORTE 2
13
CONSTRUCTORES.
EJEMPLO 1:
#include<string>
#include <iostream>
#include <math.h>
using namespace std;
class Paciente{
private:
string Nombre,criterio;
float peso,talla,Imc;
public:
Paciente(string nombre2, float
peso2, float talla2){
Nombre=nombre2; peso=peso2;
talla=talla2;}
void CalcularIMC(){
Imc=(float)
(peso/pow(talla,2));
}
string obtenerIMC(){
if(Imc<16){
criterio="lngreso al
hospital";
}
if(Imc>16 & Imc<17){
criterio="infrapeso";
}
if(Imc>=17 & Imc<18){
criterio="Bajo de peso";
}
if(Imc>=18 & Imc<25){
criterio="Peso Normal
(Saludable)";
}
if(Imc>=25 & Imc<30){
GREIDY SIERRA
CORTE 2
criterio="Sobrepeso
(Obsidad grado 1)";
}
if(Imc>=30 & Imc<35){
criterio="Sobrepeso
(Obsidad grado 2)";
}
if(Imc>=35 & Imc<40){
criterio="5obrepeso
(Obsidad grado 3)";
}
if(Imc>=40){
criterio="Sobrepeso
(Obsidad mrbida grado 4)";
}
return "El estado del paciente
es "+ criterio;
}
};
int main(){
string Nombre;
float peso,talla;
cout<<"Digite el Nombre";
cin>>Nombre;
cout<<"Digite el peso ";
cin>>peso;
cout<<"Digite la talla";
cin>>talla;
//Paciente Paciente1;
Paciente
Paciente1(Nombre,peso,talla);
Paciente1.CalcularIMC();
cout<<Paciente1.obtenerIMC();
system("pause");
}
14
HERENCIA.
Es la propiedad que permite la creacin de clases a partir de clases que ya existen, las cuales heredan caracterstica y funciones
de las clases existentes. En c++ la clase original se llama clase base; y las clases definidas a partir de dicha clase base se llaman
clases derivadas. Las clases derivadas pueden heredar atributas de la base pero tambin pueden adicionar sus propias
caractersticas y funciones.
}
void setSalarioMen(float
EJEMPLO 1:
#include <iostream>
#include <string>
Sa ){
GREIDY SIERRA
CORTE 2
SalarioM=Sa;
}
float
getCalcularSalario(){
Salario=SalarioM/2; return
Salario;
}
};
int main(){
string Nombre,Puesto,Departamento;
float SalM;
cout<<"DIGITE EL NOMBRE \n";
cin>>Nombre;
cout<<"DIGITE EL Puesto \n";
cin>>Puesto;
cout<<"DIGITE EL Departamento \n";
cin>>Departamento;
cout<<"DIGITE EL salario \n";
cin>>SalM;
Asalariado objAsalariado =
Asalariado(Nombre,Puesto,Departamento,
SalM);
cout<<"el
nombre"<<objAsalariado.getNombre();
cout<<"el salario
es"<<objAsalariado.getCalcularSalario(
);
}
15
LISTAS ENLAZADAS.
Son colecciones de elementos (llamados nodos) dispuestos uno a continuacin del otro, conectados por apuntadores
(enlaces). Los nodos son objetos de una clase auto-referenciada, cuyos datos miembro se dividen en dos partes: una parte
que contiene la informacin del objeto (caractersticas) que puede ser uno a varios datos de diferentes tipos, y la segunda
parte que contiene un apuntador del mismo tipo de la clase, que guarda la direccin del siguiente elemento de la lista.
Una representacin grfica de una EDD formada con objetos de una clase auto-referenciada.
En la grfica se observa una serie de objetos conectados entre s por apuntadores, que a su vez son datos miembros de la
clase; el ltimo apuntador es nulo (no apunta a nada) para representar el final de la EDD.
GREIDY SIERRA
El miembro siguientePtrse conoce como un enlace, es decir se usa para enlazar un objeto con otro de su mismo
tipo.
Los objetos de clases auto - referenciadas pueden enlazarse entre s para formas listas pilas y colas.
CORTE 2
16
OPERADOR NEW.
El operador new asigna un bloque de memoria del tamao del tipo de dato, que puede ser cualquier tipo integrado (int,
double, etc.), o un tipo de dato estructura o clase. El operador new devuelve un apuntador con la direccin del bloque de
memoria asignado.
//Sintaxis para la utilizacin del operador new
tipo *apuntador=new tipo; //Para variables u objetos de cualquier tipo
tipo *apuntador=new tipo[tamao]; //Para arreglos de cualquier tipo y cualquier
tamao o bien
tipo *apuntador;
apuntador=new tipo;
//Asignacin de memoria dinmica
int main(){
int *ptr=new int;
//Reserva
memoria
dinmica
para
una
variable
entera
Cliente *ptr1 =new Cliente; //Reserva memoria dinmica para una variable entera o
bien Int tam;
cin>>tam;
double apuntador;
apuntador=new double[tam];
}
OPERADOR DELETE.
Para casos en los cuales la capacidad de memoria dinmica no es suficiente, o se ha dejado de utilizar un bloque de memoria
asignado por new, se puede liberar el espacio de memoria y de esta forma dejarlo disponible para otros usos mediante el
operador delete, la sintaxis para su utilizacin es:
//Asignacin de memoria dinmica
int main(){
int *ptrnew;
int(0); //Inicializa en O la memoria dinmica para una variable entera
delete ptr; //Libera la memoria, el apuntador se puede continuar usando
cliente *ptrl=new clienteO'Pedro', 001); //Inicializa un objeto de la clase cliente
con memoria
//dinmica, a travs de su constructor
delete ptr1; //Libera la memoria, el apuntador se puede continuar usando
}
GREIDY SIERRA
CORTE 2
17
LISTAS ENLAZADAS.
Una lista enlazada es una coleccin o secuencia de elementos (nodos), uno detrs del otro, en la que cada elemento se
conecta al siguiente a travs de un apuntador que se conoce como enlace.
LISTAS.
La lista es un TAD, que consta de una secuencia de elementos llamados nodos.
Nodo:
Datos (Informacin).
Enlace o apuntador (Apunta al siguiente nodo).
EJEMPLO 1:
//crea una lista encadenada con los
nmeros de 1 a 4
#include <iostream>
using namespace std;
struct nodo{
int clave;
nodo *sig;
};
void main(){
nodo *L;
nodo *p;
int i;
L = NULL; // Crea una lista vacia
GREIDY SIERRA
CORTE 2
EJEMPLO 2:
#include<iostream>
using namespace std;
struct nodo{
int nro;
nodo *ste;
};
struct nodo *pi, *pa, *pf;
void main(){
int numero;
cout<<"insertar el numero "<<endl;
cin>>numero;
//si la lista esta vacia
if(pi==NULL){
pi=new(nodo);
pi-*nro=numero;
pi->ste=NULL;//MARCAMOS A SIGUIENTE COMO EL NODO FINAL
pf-pi;//puntero inicial trasladado al puntero final
}
else{
pa=new(nodo);
pf->ste=pa;
pa->nro=numero;
pf-pa;
}
//mostrar
pa-pi;
while(pa!=NULL){
cout<<endl<<" Nmeros: "<<pa->nro;
pa=pa->ste; //el mismo c=c+l
}
system("pau$e>null");
}
GREIDY SIERRA
CORTE 2
19
PILAS Y COLA.
Las pilas y las colas son versiones restringidas de las listas enlazadas, en las que solo se pueden llevar acabo algunas de las funciones que se pueden
realizar en las listas. Las pilas se conocen tambin como estructuras LIFO, por su sigla en ingls Last in, First out o ltimo en entrar, primero en salir. Las
colas se conocen como estructuras FIFO, First in, First out, o primero en entrar, primero en salir.
PILAS.
Una pila es una coleccin ordenada de elementos (nodos) que permite que se agreguen y eliminen nodos tan solo de la parte superior de la misma.
Las entradas de la pila deben ser eliminadas en el orden inverso al que se situaron en la misma. Por ejemplo, si se crea una pila de libros situando primero
un diccionario, encima de l una enciclopedia, y encima de ambos una novela, de modo que esta quede en la parte superior, cuando se quitan los libros
de la pila, primero debe quitarse la novela, luego la enciclopedia y por ltimo el diccionario.
Las funciones primarias en las pilas son insertar (push) que aade un elemento en la parte superior, y quitar (pop) que elimina un elemento de la pila.
COLAS.
Las colas son EDD semejantes a las listas enlazadas en las que se permite acceder a la informacin por uno de los dos extremos, es decir, un elemento se
inserta en la parte final de la cola y se suprime o elimina del frente.
Las colas representan las lneas de espera, por ejemplo, en un banco o en un almacn; o cuando en una oficina muchos usuarios estn conectados a una
sola impresora y al enviar sus trabajos para imprimir, estos se organizan en una cola de tal forma que el primero que se envi es el primero en ser
procesado y el ltimo en llegar ser el ltimo en imprimirse.
Las funciones primarias en las colas son insertar (enqueue) que aade un elemento al final de la cola, y eliminar (dequeue) que quita un elemento de la
parte inicial de la cola.
ARBOL.
Un rbol es una coleccin de elementos llamados nodos, uno de los cuales es distinguido y llamado raz junto con una relacin ser padre que impone
una estructura jerrquica en los nodos.
Un nodo, del mismo modo que un elemento en una lista, puede ser del tipo que deseemos. Puede ser un carcter, un string o un nmero.
Algunas veces puede ser conveniente incluir entre los arboles el rbol vaco, el cual no tiene nodos, que representamos con NULL.
Ejemplo: La tabla de contenidos de un libro. Esta es un rbol. La raz, llamada "libro tiene subrboles correspondientes a los captulos. Los captulos
tienen subrboles correspondientes a las secciones y estas subrboles correspondientes a las subsecciones.
GREIDY SIERRA
CORTE 3
20
RECURSIN.
Un tema fundamental para los prximos temas es el de recursin. La recursin es muy importante tanto en matemticas como en computacin, pues
se usa recursin para definir procedimientos autosimilares.
Un objeto es recursivo si en su definicin se nombra a s mismo.
EJEMPLO:
void main(){
int i, n;
long double valorAc;
valorAc= 1.0;
cout<<"Numero entero: ";
cin>> n;
for(i=1; i<=n; i++) {
valorAc = valorAc* i;
cout<<"El factorial de "<<n<<" es: \n"<<valorAc;
}
system("pause>null");
}
FUNCIONES RECURSIVAS
La recursividad es una propiedad que poseen las funciones, por la cual dichas funciones pueden llamarse a s mismas. Es una herramienta poderosa para
la resolucin de cierto tipo de problemas que, por sus caractersticas seran ms difciles de resolver de forma iterativa (con ciclos).
void funcin1() {
funcin1();
}
EJEMPLO:
int factorial(int n){
if(n<2)
return 1;
else
return n * factorial(n-l);
}
int main(){
int num=0;
printf("::CALCULAR FACTORIAL::\n");
printf("Introduce un numero: ");
scanf("%i",&num); //Pedir variable num
printf("\tEl resultado es: %i\n", factorial(num)); //Llama la funcin e imprime resultado
system("pause>null");
}
GREIDY SIERRA
CORTE 3
21
ARBOL BINARIO.
Los rboles son EDD no lineales en dos dimensiones, a diferencia de listas, pilas y colas. Son muy utilizados para organizar informacin, por ejemplo para
organizar los archivos en sistemas operativos, o para tcnicas avanzadas de optimizacin como inteligencia artificial.
El concepto de rbol implica una estructura en la que los datos estn organizados de modo que los elementos de informacin se relacionen a travs de
ramas.
Un rbol binario es un rbol en el que ningn nodo puede tener ms de dos subrboles. Cada nodo puede tener cero, uno o dos hijos (subrboles). Es,
adems, una estructura recursiva, en la que cada nodo es el raz de su propio subrbol y, si tiene hijos, cada uno es raz del subrbol correspondiente,
que se conocen como subrbol izquierdo y subrbol derecho.
Los nodos de los rboles binarios contienen un campo para almacenar datos, y dos apuntadores, uno al subrbol izquierdo y otro al subrbol derecho.
Un rbol se divide en subrboles. Un subrbol es cualquier estructura conectada por debajo del nodo raz. Cada nodo de un rbol es la raz de un subrbol
que se define por ese nodo y todos sus descendientes. El primer nodo de un subrbol se conoce como la raz del subrbol. A su vez, los subrboles se
pueden dividir en subrboles.
GREIDY SIERRA
CORTE 3
22
INORDEN.
PREORDEN.
POSTORDEN.
ABDECFG
2, 5, 11, 6, 7, 4, 9, 5 y 2
Visitar la raz.
Recorrer el subrbol izquierdo en preorden
recorrer.
El subrbol derecho en preorden.
GREIDY SIERRA
CORTE 3
23
GRAFOS.
Es un conjunto de objetos llamados vrtices o nodos unidos por enlaces llamados aristas o arcos, que permiten representar relaciones binarias entre
elementos de un conjunto.
Un grato es una pareja G = (V, A), donde V es un conjunto de puntos, llamados vrtices, y A es un conjunto de pares de vrtices, Lomadas aristas.
La posicin de los vrtices no importa, y se puede variar para obtener un grafo ms claro.
Prcticamente cualquier red puede ser modelada con un grafo: una red de carreteras que conecta ciudades, una red elctrica o un alcantarillado.
GRAFOS NO DIRIGIDOS.
V= {V1,V2,V3,V45,V5}
Cada elemento del conjunto se llama vrtice y se representa por un punto
{{V1,V1}1{V1IV2},{V1,V5},{V2,V3},{V2,V4},{V3,V4}){V4,V5}}
Cada par no ordenado se llama arista y se representan por una lnea.
GRAFOS DIRIGIDOS.
V = {V1,V2,V3,V45,V5}
E {{vlA/2},{VlA^}{V2y3}4V3AM},{V4,V3},{V4y4},{V4^S},{VSA'l}1{VS V3U
Pares ordenados de vrtices
MATRIZ DE ADYACENCIA.
GREIDY SIERRA
CORTE 3
24
GREIDY SIERRA
CORTE 3
25
EJERCICOS.
TALLER 1:
#include <iostream>
using namespace std;
int x[5], i=0, cont=0;
void datos() {
for (i=0;i<=4;i++){
cout<<"INGRESAR EL NUMERO "<<i+1<<endl;
cin>>x[i];
}
}
void suma(){
if ((x[0]+x[1])==x[2]){
cout<<"LA SUMA DE LOS DOS PRIMEROS NUMEROS INGRESADOS, SI ES IGUAL AL TERCERO "<<endl;
}
else {
cout<<"LA SUMA DE LOS DOS PRIMEROS NUMEROS INGRESADOS, NO ES IGUAL AL TERCERO "<<endl;
}
}
void multi(){
for (i=0;i<=4;i++){
if ((x[i]%3)==0){
cont++;
}
}
cout<<"HAY "<<cont++<<" MULTIPLOS DE TRES "<<endl;
}
void menu() {
int op;
do {
cout<<"///////////////MENU/////////////////"<<endl<<endl;
cout<<"1. INGRESAR DATOS AL VECTOR "<<endl;
cout<<"2. VERIFICAR SI LA SUMA DE LOS DOS PRIMERO DA EL TERCERO "<<endl;
cout<<"3. DETERMINAR CUANTOS NUMEROS SON MULTIPLOS DE TRES"<<endl;
cout<<"4. SALIR"<<endl;
cin>>op;
switch (op){
case 1:
datos();
break;
case 2:
suma();
break;
case 3:
multi();
break;
}
}
while(op!=4);
}
void main(){
menu();
}
----------------------------------------------------------------------------------------------------------------------------------------TALLER 2:
EJERCICIO 1.
// Crear una clase que involucre como datos miembro: el color, la forma, la cantidad y el precio de bombas de goma para
una piatera. Definir las funciones miembro: Ingresar datos, borrar datos, imprimir datos e implementar cada una.
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
struct Bomba {
string color;
string forma;
GREIDY SIERRA
TALLERES
26
int cantidad;
double precio;
};
Bomba datos;
void Ingresar(){
cout<<"INGRESE EL COLOR:
cin>>datos.color;
cout<<endl;
cout<<"INGRESE LA FORMA:
cin>>datos.forma;
cout<<endl;
";
";
",
}
void Borrar(){
for (int i=0;i<=2;i++){
datos.color="";
datos.forma="";
datos.cantidad=0;
datos.precio=0;
}
}
void Imprimir(){
cout<<endl;
cout<<"\t\t\t\t LISTA \t\t\t\t"<<endl<<endl;
cout<<"\t COLOR \t\t FORMA \t\t CANTIDAD \t\t PRECIO"<<endl;
cout<<"\t "<<datos.color<<"\t\t"<<datos.forma<<"\t\t
"<<datos.cantidad<<"\t\t
"<<datos.precio<<endl;
cout<<endl<<endl<<endl<<endl;
}
int main(){
Ingresar();
int op;
do {
cout<<"\t\t\t\t MENU \t\t\t\t"<<endl<<endl;
cout<<"\t 1. IMPRIMMIR DATOS "<<endl;
cout<<"\t 2. BORRAR DATOS "<<endl;
cout<<"\t 3. SALIR"<<endl;
cout<<"\t";
cin>>op;
switch (op){
case 1:
Imprimir();
break;
case 2:
Borrar();
break;
}
}
while(op!=3);
system("pause");
}
-----------------------------------------------------------------------------------------------------------------------------------------
GREIDY SIERRA
TALLERES
27
EJERCICIO 2.
// Supermercados Cafam desea manejar el kardex de sus artculos teniendo como base el nombre, item, precio y existencias.
Necesita manejar entrada de artculos, salida de artculos, bsqueda de algn artculo especfico.
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
struct Kardex{
int item;
int exist;
string nombre;
float precio;
}
datos[4];
void productos(){
datos[0].item=1201;
datos[0].nombre="Aceite";
datos[0].precio=7500;
datos[0].exist=80;
datos[1].item=1202;
datos[1].nombre="Arroz";
datos[1].precio=2300;
datos[1].exist=100;
datos[2].item=1203;
datos[2].nombre="Azucar";
datos[2].precio=3000;
datos[2].exist=40;
datos[3].item=1204;
datos[3].nombre="Sandia";
datos[3].precio=20000;
datos[3].exist=15;
}
void Imprimir(){
cout<<endl;
cout<<"\t\t\t\t
cout<<"\t\tITEM
cout<<endl;
"<<datos[i].nombre<<"
\t"<<datos[i].precio<<"\t
}
cout<<endl;
}
void entrada_prod(){
int item_a, cant, cont=0;
cout<<"\t\t\t DIGITE EL ITEM DEL PRODUCTO"<<endl;
cout<<"\t\t\t";
cin>>item_a;
for (int i=0;i<=3;i++){
if (item_a==datos[i].item){
cout<<"\t\t\t DIGITE LA CANTIDAD DE ENTRADA "<<endl;
cout<<"\t\t\t";
cin>>cant;
datos[i].exist=datos[i].exist+cant;
}
else{
cont++;
}
}
GREIDY SIERRA
TALLERES
28
if (cont==4) {
cout<<" DATO ERRADO O PRODUCTO NO EXISTENTE "<<endl;
}
system("pause");
}
void salida_prod(){
int item_a, cant, cont=0;
cout<<"\t\t\t DIGISTE EL ITEM DEL PRODUCTO SALIENTE"<<endl;
cout<<"\t\t\t";
cin>>item_a;
for (int i=0;i<=3;i++){
if (item_a==datos[i].item){
cout<<"\t\t\t DIGITE LA CANTIDAD SALIENTE DEL PRODUCTO"<<endl;
cout<<"\t\t\t";
cin>>cant;
while(datos[i].exist<cant){
cout<<"NO HAY LA CANTIDAD DIGITADA, DIGITELA NUEVAMENTE"<<endl,
cin>>cant;
}
datos[i].exist=datos[i].exist-cant;
}
else{
cont++;
}
}
if (cont==4) {
cout<<"DATO ERRADO O PRODUCTO NO EXISTENTE"<<endl;
}
system("pause");
}
void busqueda_pro(){
int item_a, cant, cont=0;
cout<<"\t\t\t DIGITE EL ITEM DEL PRODUCTO QUE VA A BUSCAR"<<endl;
cout<<"\t\t\t";
cin>>item_a;
for (int i=0;i<=3;i++){
if (item_a==datos[i].exist){
cout<<endl;
cout<<"\t\t\t\t LISTADO DE PRODUCTOS \t\t\t\t"<<endl<<endl;
cout<<"\t ITEM \t\t NOMBRE \t\t PRECIO \t\t CANT. EXISTENTE"<<endl;
cout<<"\t "<<datos[i].item<<"\t\t"<<datos[i].nombre<<"\t\t
"<<datos[i].precio<<"\t\t
"<<datos[i].exist<<endl;
cout<<endl<<endl<<endl<<endl;
}
else{
cont++;
}
}
if (cont==4) {
cout<<"DATO ERRADO O PRODUCTO NO EXISTENTE"<<endl;
}
system("pause");
}
int main(){
int op;
productos();
Imprimir();
do{
cout<<"\t\t\t\t\t MENU \t\t\t\t"<<endl;
cout<<"\t\t\t 1. REGISTRAR ENTRADA"<<endl;
cout<<"\t\t\t 2. REGISTRAR SALIDA"<<endl;
cout<<"\t\t\t 3. BUSCAR PRODUCTO"<<endl;
cout<<"\t\t\t 4. SALIR"<<endl;
cout<<"\t\t\t\t";
cin>>op;
GREIDY SIERRA
TALLERES
29
switch (op){
case 1:
entrada_prod();
system("cls");
Imprimir();
break;
case 2:
salida_prod();
system("cls");
Imprimir();
break;
case 3:
busqueda_pro();
system("cls");
Imprimir();
break;
}
}
while (op!=4);
}
-----------------------------------------------------------------------------------------------------------------------------------------
EJERCICIO 3.
//Ingeominas est distribuyendo las zonas climticas que se presentan en Colombia, dividida por regiones as: Orinoqua,
Amaznica, Andina, Caribe, Insular, Pacfica. Cada una de estas regiones tiene unas zonas principales que deben involucrar
cdigo de regin, nombre, fecha de fundacin, cantidad de habitantes.
#include <iostream>
#include <string>
using namespace std;
class zonas{
private:
string region, zona, codigo_reg, fecha, hab;
public:
zonas(){}
void LeerRegion (string R){
region=R;
}
void LeerZona (string Z){
zona=Z;
}
void LeerCodigo (string C_R){
codigo_reg=C_R;
}
void LeerFecha (string F){
fecha=F;
}
void LeerCantidad (string H){
hab=H;
}
string EscribirRegion(){
return region;
}
string EscribirZona(){
return zona;
}
string EscribirCodigo(){
return codigo_reg;
}
string EscribirFecha(){
return fecha;
}
GREIDY SIERRA
TALLERES
30
string EscribirCantidad(){
return hab;
}
}
info[5];
void Ingresar(string cont, int guar){
string tex, dia, mes, anio;
info[guar].LeerRegion(cont);
cout<<"\t\t\t DIGITE LA ZONA"<<endl;
cout<<"\t\t\t ";
cin>>tex;
info[guar].LeerZona(tex);
cout<<"\t\t\t DIGITE EL CODIGO DE DICHA ZONA"<<endl;
cout<<"\t\t\t ";
cin>>tex;
info[guar].LeerCodigo(tex);
cout<<"\t\t\t DIGITE EL DIA EN QUE SE FUNDO:"<<endl;
cout<<"\t\t\t ";
cin>>dia;
cout<<"\t\t\t DIGITE EL MES EN QUE SE FUNDO:"<<endl;
cout<<"\t\t\t ";
cin>>mes;
cout<<"\t\t\t DIGITE EL AO EN QUE SE FUNDO:"<<endl;
cout<<"\t\t\t ";
cin>>anio;
info[guar].LeerFecha(dia+"/"+mes+"/"+anio);
cout<<"\t\t\t DIGITE EL NUMERO DE HABITANTES "<<endl;
cout<<"\t\t\t ";
cin>>tex;
info[guar].LeerCantidad(tex);
}
void Imprimir(int guar){
system("cls");
cout<<endl;
cout<<"\t\t\t\t ZONAS CLIMATICAS \t\t\t\t"<<endl<<endl;
cout<<"
REGION
ZONA
CODIGO
FECHA FUNDACION
No. HABITANTES"<<endl;
for (int i=0;i<=guar;i++){
cout<<"
"<<info[i].EscribirRegion()<<"
"<<info[i].EscribirZona()<<"
"<<info[i].EscribirCodigo()<<"
"<<info[i].EscribirFecha()<<"
"<<info[i].EscribirCantidad()<<endl;
}
cout<<endl<<endl<<endl<<endl;
}
int main(){
int op, acum=0;
string a;
do{
Imprimir(acum);
cout<<"\t\t\t\t
MENU DE ZONAS \t\t\t\t"<<endl<<endl;
cout<<"\t\t\t 1. ORINOQUIA"<<endl;
cout<<"\t\t\t 2. AMAZONICA"<<endl;
cout<<"\t\t\t 3. ANDINA"<<endl;
cout<<"\t\t\t 4. CARIBE"<<endl;
cout<<"\t\t\t 5. INSULAR"<<endl;
cout<<"\t\t\t 6. PACIFICA"<<endl;
cout<<"\t\t\t 7. SALIR"<<endl;
cout<<"\t\t\t\t";
cin>>op;
acum++;
switch (op){
GREIDY SIERRA
TALLERES
31
case 1:
a="ORINOQUIA ";
Ingresar(a,acum);
break;
case 2:
a="AMAZONICA ";
Ingresar(a,acum);
break;
case 3:
a="ANDINA ";
Ingresar(a,acum);
break;
case 4:
a="CARIBE ";
Ingresar(a,acum);
break;
case 5:
a="INSULAR ";
Ingresar(a,acum);
break;
case 6:
a="PACIFICA ";
Ingresar(a,acum);
break;
}
}
while (op!=7);
}
----------------------------------------------------------------------------------------------------------------------------------------
EJERCICIO 4.
//Polimrica S.A., lder en Colombia para la fabricacin de botellas, desea manejar las ventas de subproductos en forma
sistematizada, de tal forma que, se pueda disminuir, aumentar, adicionar las existencias de un producto dado, Dado el
siguiente programa identificar que realiza cada uno de los mtodos involucrados en el mismo, indicar los mtodos(funciones
miembro), y los datos miembro.
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
struct Botella {
string peso,forma, color;
int id, existencias;
}
datos[3];
void base_datos(){
datos[0].color="azul";
datos[0].peso="50";
datos[0].forma="triangular";
datos[0].id=1201;
datos[0].existencias=500;
datos[1].color="rojo";
datos[1].peso="20";
datos[1].forma="redonda";
datos[1].id=1202;
datos[1].existencias=20;
datos[2].color="gris";
datos[2].peso="200";
datos[2].forma="rectangular";
datos[2].id=1203;
datos[2].existencias=100;
}
void Imprime(){
cout<<"\t\t\t\t
cout<<"
Id \t
LISTA
COLOR
\t\t\t\t"<<endl<<endl;
PESO \t FORMA \t
EXISTENCIAS"<<endl<<endl;
GREIDY SIERRA
TALLERES
"<<datos[i].peso<<"
32
void Agregar(){
int item_a, cant, cont=0;
cout<<"DIGITE EL ID DEL PRODUCTO "<<endl;
cin>>item_a;
for (int i=0;i<=2;i++){
if (item_a==datos[i].id){
cout<<"CANTIDAD:"<<endl;
cin>>cant;
datos[i].existencias=datos[i].existencias+cant;
}
else{
cont++;
}
}
if (cont==3) {
cout<<"ERROR, ID NO EXISTENTE"<<endl;
}
system("pause");
}
void Retirar(){
int item_a, cant, cont=0;
cout<<"DIGITE EL ID DEL PRODUCTO A RETIRAR "<<endl;
cin>>item_a;
for (int i=0;i<=2;i++){
if (item_a==datos[i].id){
cout<<"CANTIDAD:"<<endl;
cin>>cant;
while(datos[i].existencias<cant){
cout<<"NO EXISTE ESTA CANTIDAD, DIGITELA NUEVAMENTE"<<endl,
cin>>cant;
}
datos[i].existencias=datos[i].existencias-cant;
}
else{
cont++;
}
}
if (cont==3) {
cout<<"ERROR, ID NO EXISTENTE"<<endl;
}
system("pause");
}
int main(){
int op;
base_datos();
Imprime();
do{
cout<<"\t\t\t\t MENU \t\t\t\t"<<endl<<endl;
cout<<"1. AGREGAR"<<endl;
cout<<"2. RETIRAR"<<endl;
cout<<"3. SALIR"<<endl;
cin>>op;
switch (op){
case 1:
Agregar();
system("cls");
Imprime();
break;
case 2:
Retirar();
system("cls");
Imprime();
break;
}
}
while (op!=3);
GREIDY SIERRA
TALLERES
33
}
------------------------------------------------------------------------------------------------------------------------TALLER 3:
//Modelo: biblioteca. Se debe llevar registro de: (a) informacin de libros: ttulo del libro, nombre del autor. ISBN
(numero de hasta 7 dgitos), cantidad de ejemplares, nmero correlativo de prstamo. (B) informacin de socios: nombre del
socio, cdula de identidad, nmero correlativo de prstamo. (c) informacin de prestamos: ISBN del libro. C.I. del socio,
nmero correlativo de I prstamo. DeFina la representacin de los datos y que operaciones se consideran necesarias para
manejar la informacin de la biblioteca. Describa lo que debe realizar cada operacin.
#include <iostream>
#include <iomanip>
#include <stdio.h>
#include <string>
using namespace std;
int i=0;
struct info_biblioteca{
char titulo_libro[50];
char nombre_autor[30];
char isbn[7];
char cantidad_ej[5];
char numero_pres[10];
char nombre_socio[30];
char cedula[12];
}
datos[4];
void info_libros(){
cout<<"INFORMACION SOBRE LIBROS"<<endl;
cout<<endl;
for (i=0;i<1;i++){
gets(datos[i].titulo_libro); fflush(stdout );
printf("NOMBRE DEL LIBRO %i: ",i+1);
gets(datos[i].titulo_libro);
cout<<endl;
fflush(stdout );
printf("NOMBRE DEL AUTOR %i: ",i+1);
gets(datos[i].nombre_autor);
cout<<endl;
fflush(stdout );
printf("ISBN %i: ",i+1);
gets(datos[i].isbn);
cout<<endl;
fflush(stdout );
printf("CANTIDAD DE EJEMPLARES %i: ",i+1);
gets(datos[i].cantidad_ej);
cout<<endl;
fflush(stdout );
printf("NUMERO DE PRESTAMO %i: ",i+1);
gets(datos[i].numero_pres);
}
}
void Imprimir_libros(){
cout<<endl;
cout<<"\t\t\t\t INFORMACION DE LIBROS \t\t\t\t"<<endl<<endl;
cout<<" TITULO
NOMBRE AUTOR
ISBN
CANT. EJEMPLARES
NUM. PRESTAMO"<<endl;
for (int i=0;i<=3;i++){
cout<<datos[i].titulo_libro<<"
"<<datos[i].nombre_autor<<"
"<<datos[i].isbn<<"
"<<datos[i].cantidad_ej<<"
"<<datos[i].numero_pres<<endl;
}
cout<<endl;
}
void info_socios(){
printf("INFORMACION SOBRE SOCIOS");
cout<<endl;
for (i=0;i<1;i++){
gets(datos[i].nombre_socio); fflush(stdout);
printf("NOMBRE DEL SOCIO: ");
fflush(stdout);
gets(datos[i].nombre_socio);
GREIDY SIERRA
TALLERES
34
cout<<endl;
printf("CEDULA DE IDENTIDAD: ");
fflush(stdout);
gets(datos[i].cedula);
cout<<endl;
}
system("pause");
}
void Imprimir_socios(){
cout<<endl;
cout<<"\t\t\t\t INFORMACION DE SOCIOS \t\t\t\t"<<endl<<endl;
cout<<"\t\t NOMBRE SOCIO
CEDULA IDENTIDAD"<<endl;
cout<<endl;
for (int i=0;i<=3;i++){
cout<<"\t\t "<<datos[i].nombre_socio<<"
"<<datos[i].cedula<<endl;
}
cout<<endl;
}
void info_prestamo(){
char pres[10], isbn_a[7], ci[12];
int cont;
printf("INFORMACION SOBRE PRESTAMOS");
cout<<endl;
for (int i=0;i<=3;i++){
printf("ISBN: ");
fflush(stdout);
cin>>isbn_a;
if (isbn_a==datos[i].isbn){
printf("CEDULA DE IDENTIDAD: ");
fflush(stdout);
cin>>ci;
if (ci==datos[i].cedula){
printf("NUMERO DE PRESTAMO: ");
fflush(stdout);
cin>>pres;
if (pres==datos[i].numero_pres){
cout<<"\t\t\t\t INFORMACION DE PRESTAMO \t\t\t\t"<<endl<<endl;
cout<<"\t\t TITULO
NOMBRE AUTOR
ISBN
CANT. EJEMPLARES
NUM. PRESTAMO
NOMBRE SOCIO
CEDULA"<<endl;
cout<<endl;
cout<<"\t\t"<<datos[i].titulo_libro<<"
"<<datos[i].nombre_autor<<"
\t"<<datos[i].isbn<<"\t
\t"<<datos[i].cantidad_ej<<"\t
\t"<<datos[i].numero_pres<<"\t
\t"<<datos[i].nombre_socio<<"\t
\t"<<datos[i].cedula<<endl;
}
cout<<endl;
}
else{
cont++;
}
}
if (cont==4) {
cout<<" DATO ERRADO O PRODUCTO NO EXISTENTE "<<endl;
}
system("pause");
}
cout<<endl;
system("pause");
}
void main(){
int op;
do{
cout<<"\t\t\t\t\t MENU \t\t\t\t"<<endl;
cout<<"\t\t\t 1. REGISTRAR LIBROS"<<endl;
cout<<"\t\t\t 2. REGISTRAR SOCIO"<<endl;
cout<<"\t\t\t 3. REGISTRAR PRESTAMO"<<endl;
cout<<"\t\t\t 4. SALIR"<<endl;
GREIDY SIERRA
TALLERES
35
cout<<"\t\t\t\t";
cin>>op;
switch (op){
case 1:
info_libros();
system("cls");
Imprimir_libros();
break;
case 2:
info_socios();
system("cls");
Imprimir_socios();
break;
case 3:
info_prestamo();
break;
}
}
while (op!=4);
}
-------------------------------------------------------------------------------------------------------------------------PARCIAL 1:
#include <stdio.h>
#include <iostream>
#include <math.h>
#include <string>
#include <string.h>
using namespace std;
struct disco{
char nomautor[50];
string fechadelanzamiento;
int canciones;
};
struct sucursales{
string nombre;
int telefono;
string direccion;
int cantdiscos;
struct disco dis[999];
}discotienda[999];
void agregar(struct sucursales z,int *);
void buscar(struct sucursales z,char[50],int);
int contar(struct sucursales z,int,int);
int main(){
int n,i=0,cuenta=0;
int *ii=&i;
char autor[50];
do{
cout<<"
Menu
"<<endl;
cout<<"1.AGREGAR SUCURSALES CON TODOS SUS DATOS "<<endl;
cout<<"2.BUSCAR UN DISCO ESPECIFICO POR AUTOR "<<endl;
cout<<"3.CONTAR LA TOTALIDAD DE DISCOS "<<endl;
cout<<"4.SALIR "<<endl;
cin>>n;
switch(n){
case 1:
agregar(discotienda[*ii],&i);
*ii=*ii+1;
break;
case 2:
cout<<"digite el nombre del autor del disco: ";
gets(autor);
while(getchar()!='\n');
cout<<"cuantos"<<*ii;
for(int j=0;j<*ii;j++){
buscar(discotienda[j],autor,j);
}
GREIDY SIERRA
TALLERES
36
break;
case 3:
cuenta=0;
for(int j=0;j<*ii;j++){
cuenta=contar(discotienda[j],cuenta,j);
}
cout<<"Hay "<<cuenta<<" discos entre todas las sucursales de la discotienda"<<endl;
break;
}
}
while(n!=4);
system("pause");
return 0;
}
void agregar(struct sucursales z,int *ii){
cout<<"digite el nombre de la sucursal: "<<endl;
cin>>discotienda[*ii].nombre;
cout<<"digite el telefono de la sucursal: "<<endl;
cin>>discotienda[*ii].telefono;
cout<<"digite la direccion de la sucursal: "<<endl;
cin>>discotienda[*ii].direccion;
cout<<"digite la cantidad de discos de la sucursal: "<<endl;
cin>>discotienda[*ii].cantdiscos;
for(int j=0;j<discotienda[*ii].cantdiscos;j++){
cout<<"digite el nombre del autor del disco: "<<endl;
gets(discotienda[*ii].dis[*ii].nomautor);
while(getchar()!='\n');
cout<<"cuantos"<<discotienda[*ii].dis[j].nomautor;
cout<<"digite la fecha de lanzamiento del disco: "<<endl;
cin>>discotienda[*ii].dis[j].fechadelanzamiento;
cout<<"digite la cantidad de canciones del disco: "<<endl;
cin>>discotienda[*ii].dis[j].canciones;
}
}
void buscar(struct sucursales z,char autor[50],int j){
for(int k=0;k<discotienda[j].cantdiscos;k++){
cout<<"------"<<j;
cout<<"cant de canciones del disco del autor: "<<discotienda[j].dis[k].nomautor<<endl;
if(strcmp(discotienda[j].dis[k].nomautor,autor)==0){
cout<<"cant de canciones del disco del autor: "<<discotienda[j].dis[k].canciones<<endl;
}
}
}
int contar(struct sucursales z,int cuenta,int j){
return cuenta+discotienda[j].cantdiscos;
}
-------------------------------------------------------------------------------------------------------------------------TALLER 4:
EJERCICIO 1.
//Elaborar un programa que permita leer dos nmeros de tipo real en la funcin principal; que en una funcin los
intercambie va parmetros por referencia y los imprima en la funcin principal.
#include<stdio.h>
#include<iostream>
using namespace std;
void intercambio(float *ptrN1, float *ptrN2){
float A;
A=*ptrN1;
*ptrN1=*ptrN2;
*ptrN2=A;
}
void main(){
float num1, num2;
cout<<"digite el numero 1: ";
cin>>num1;
cout<<"digite el numero 2: ";
cin>>num2;
GREIDY SIERRA
TALLERES
37
GREIDY SIERRA
TALLERES
38
}
system("pause");
}
void obt_dev(){
int mayor=0;
for(i=0; i<3; i++){
if(mayor<v[i]){
mayor=v[i];
}
}
imp(mayor);
system("pause");
}
int imprimir(int g){
cout<<"EL NUMERO MAYOR ES: "<<g<<endl;
}
void main(){
system("cls");
leer_num();
}
-------------------------------------------------------------------------------------------------------------------------TALLER 5:
//De un curso de Estructura de datos se desea almacenar el cdigo y la nota de cada estudiante. Para el almacenamiento de
los datos se puede almacenar en vectores de longitud n. Realice lo siguiente: a) Los datos deben ser ledos por teclado.
b) Calcule el promedio de las notas por estudiante c) Calcule el promedio de las notas por examen d) Imprimir solamente a
los estudiantes (cdigo y nota) que obtuvieron una nota por encima de la media aritmtica (promedio) de todo el curso. e)
Imprima cdigo y nota para la mnima nota y para la mxima nota.
#include<iostream>
#include<stdio.h>
using namespace std;
//DECLARACION DE VARIABLES GLOBALES
int cant_est;
int cant_nt;
int cant_nq;
int i=0, g=0, j=0;
int c=0;
double prot;
double proq;
double prop;
double pro_total;
double port;
double porq;
double porp;
//ESTRUCTURA DE LOS DATOS DE LOS ESTUDIANTES
struct notas{
double parcial;
double notas_t;
double notas_q;
double pro_g;
}n[100];
struct datos_estudiante{
char nombre[40];
int codigo;
struct notas notas;
};
//DECLARACION DE VECTOR
void mayor_menor(struct
struct datos_estudiante
struct datos_estudiante
GREIDY SIERRA
TALLERES
39
cout<<"PARCIAL: ";
cin>>porp;
cout<<endl;
while(porp<0 && porp>100){
cout<<"ERROR, DIGITE NUEVAMENTE PARCIAL: ";
cin>>porp;
cout<<endl<<endl;
}
porp=(porp/100);
cout<<"TALLERES: ";
cin>>port;
cout<<endl;
while(port<0 && port>(100-porp)){
cout<<"ERROR, DIGITE NUEVAMENTE TALLERES: ";
cin>>port;
cout<<endl<<endl;
}
port=(port/100);
cout<<"QUICES: ";
cin>>porq;
cout<<endl;
while(porq<0 && porq>(100-(porp+port))){
cout<<"ERROR, DIGITE NUEVAMENTE QUICES: ";
cin>>porq;
cout<<endl<<endl<<endl;
}
porq=(porq/100);
cout<<"INFORMACION DE ESTUDIANTES"<<endl<<endl;
cout<<"CANTIDAD DE ESTUDIANTES: ";
cin>>cant_est;
cout<<endl<<endl;
//SE INGRESA LA CANTIDAD DE DATOS ESTABLECIDAS ANTERIORMENTE
for(i=0; i<cant_est;i++){
while(getchar()!='\n');
cout<<"INFORMACION DE ESTUDIANTE"<<endl<<endl;
cout<<"NOMBRE "<<i+1<<": ";
fflush(stdout);
gets(ptrdatos->nombre);
cout<<endl;
cout<<"CODIGO DE "<<ptrdatos->nombre<<": ";
cin>>(ptrdatos->codigo);
cout<<endl;
//SE DIGITAN LAS NOTAS DE TALLERES
cout<<endl;
cout<<"INFORMACION DE NOTAS"<<endl<<endl<<endl;
cout<<"NOTA DEL PARCIAL DE "<<ptrdatos->nombre<<": ";
cin>>n[0].parcial;
cout<<endl<<endl;
while(n[0].parcial<0 && n[0].parcial>5){
cout<<"ERROR, DIGITE NUEVAMENTE LA NOTA DEL PARCIAL DE "<<ptrdatos->nombre<<": ";
cin>>n[0].parcial;
cout<<endl<<endl;
}
cout<<"CANTIDAD DE TALLERES: ";
cin>>cant_nt;
cout<<endl;
while(cant_nt<0 && cant_nt>100){
cout<<"ERROR, DIGITE NUEVAMENTE LA CANTIDAD DE TALLERES: ";
cin>>cant_nt;
cout<<endl;
}
for(j=0; j<cant_nt; j++){
cout<<"NOTA "<<j+1<<" DE TALLERES DE "<<ptrdatos->nombre<<" "<<ptrdatos->codigo<<": ";
cin>>(n[j].notas_t);
cout<<endl;
while(n[j].notas_t<0 && n[j].notas_t>5){
GREIDY SIERRA
TALLERES
40
P. PARCIAL
P. TOTAL"<<endl;
GREIDY SIERRA
TALLERES
41
GREIDY SIERRA
TALLERES
42
GREIDY SIERRA
TALLERES
43
public:
Nodo1(){
int numero;
cout<<"DIGITE EL NUMERO: ";
cin>>numero;
nro=numero;
};
void ste_ptr(Nodo1 *numero){
ste = numero;
};
int obtener_nro()const{
return nro;
};
Nodo1 *obtener_ste()const{
return ste;
};
};
Nodo1 *pa; //Lista
Nodo1 *pi; //Elemento que genera
class Nodo2{
private:
int nro2;
Nodo2 *ste2;
public:
Nodo2(){
int numero2;
cout<<"DIGITE EL NUMERO: ";
cin>>numero2;
nro2=numero2;
};
void ste_ptr2(Nodo2 *numero2){
ste2 = numero2;
};
int obtener_nro2()const{
return nro2;
};
Nodo2 *obtener_ste2()const{
return ste2;
};
};
Nodo2 *pa2; //Lista
Nodo2 *pi2; //Elemento que genera
void ingresar_l1(){
int cant=0;
int i=0;
pa=NULL;
cout<<"
El USUARIO INGRESA DATOS A LA LISTA "<<endl<<endl<<endl;
cout<<"
CANTIDAD DE NUMEROS: ";
cin>>cant;
cout<<endl;
for (i=0; i<cant; i++)
{
pi = new Nodo1();
cout<<"NUMERO INGRESADO: "<<pi->obtener_nro()<<endl<<endl;
//Reorganizacion de elementos
pi -> ste_ptr(pa);
pa = pi;
}
cout<<"
DATOS CAPTURADOS LISTA 1 "<<endl<<endl<<endl;
pi = pa;
while (pi!=NULL)
{
cout<<"
"<<pi->obtener_nro()<<endl;
pi =pi->obtener_ste();
}
}
void ingresar_l2(){
int i2=0;
pa2=NULL;
GREIDY SIERRA
TALLERES
44
cout<<"
El USUARIO INGRESA DATOS A LA LISTA "<<endl<<endl<<endl;
cout<<"
CANTIDAD DE NUMEROS: ";
cin>>cant2;
cout<<endl;
for (i2=0; i2<cant2; i2++)
{
pi2 = new Nodo2();
cout<<"NUMERO INGRESADO: "<<pi2->obtener_nro2()<<endl<<endl;
//Reorganizacion de elementos
pi2 -> ste_ptr2(pa2);
pa2 = pi2;
}
cout<<"
DATOS CAPTURADOS LISTA 2 "<<endl<<endl<<endl;
pi2 = pa2;
while (pi2!=NULL)
{
cout<<"
"<<pi2->obtener_nro2()<<endl;
pi2 =pi2->obtener_ste2();
}
}
void verificar_iguales(){
while (pi!=NULL){
if(pi->obtener_nro()==pi2->obtener_nro2()){
cout<<"LOS ELEMENTOS DE LA LISTA 1, SON IGUALES A LOS ELEMENTOS DE LA LISTA 2"<<endl;
}
else{
cout<<"LOS ELEMENTOS DE LA LISTA 1, SON DIFERENTES A LOS ELEMENTOS DE LA LISTA 2"<<endl;
}
pi=pi->obtener_ste();
}
system("pause");
}
void buscar_l1(){
int buscar;
cout<<"ELEMENTO QUE DESEA BUSCAR"<<endl;
cin>>buscar;
pi = pa;
while (pi!=NULL){
if(pi->obtener_nro()==buscar){
cout<<"EL ELEMENTO "<<buscar<<" SI EST EN LA LISTA 1 "<<endl;
}
else{
cout<<"EL ELEMENTO "<<buscar<<" NO EST EN LA LISTA 1 "<<endl;
}
pi = pi->obtener_ste();
}
}
void buscar_l2(){
int buscar2;
cout<<"ELEMENTO QUE DESEA BUSCAR"<<endl;
cin>>buscar2;
pi2 = pa2;
while (pi2!=NULL){
if(pi2->obtener_nro2()==buscar2){
cout<<"EL ELEMENTO "<<buscar2<<" SI EST EN LA LISTA 1 "<<endl;
}
else{
cout<<"EL ELEMENTO "<<buscar2<<" NO EST EN LA LISTA 1 "<<endl;
}
pi2 = pi2->obtener_ste2();
}
}
void ocurrencias_l1(){
int buscar;
int cont=0;
cout<<"ELEMENTO QUE DESEA VERIFICAR OCURRENCIAS"<<endl;
cin>>buscar;
pi = pa;
while (pi!=NULL){
GREIDY SIERRA
TALLERES
45
if(pi->obtener_nro()==buscar){
cont++;
}
pi = pi->obtener_ste();
}
cout<<"LA CANTIDAD DE OCURRENCIAS DEL NUMERO "<<buscar<<" EN LA LISTA 1 ES: "<<cont<<endl;
}
void ocurrencias_l2(){
int buscar2;
int cont2=0;
cout<<"ELEMENTO QUE DESEA VERIFICAR OCURRENCIAS"<<endl;
cin>>buscar2;
pi2 = pa2;
while (pi2!=NULL){
if(pi2->obtener_nro2()==buscar2){
cont2++;
}
pi2 = pi2->obtener_ste2();
}
cout<<"LA CANTIDAD DE OCURRENCIAS DEL NUMERO "<<buscar2<<" EN LA LISTA 2 ES: "<<cont2<<endl;
}
void main(){
int op;
do{
cout<<"\t\t\t\t
cout<<"\t\t\t 1.
cout<<"\t\t\t 2.
cout<<"\t\t\t 3.
cout<<"\t\t\t 4.
cout<<"\t\t\t 5.
cin>>op;
switch (op){
case 1:
int op1;
do{
cout<<"\t\t\t\t
* MENU CASO 1 * \t\t\t\t"<<endl;
cout<<"\t\t\t 1. INGRESAR DATOS LISTA 1"<<endl;
cout<<"\t\t\t 2. INGRESAR DATOS LISTA 2"<<endl;
cout<<"\t\t\t 3. SALIR"<<endl;
cin>>op1;
switch (op1){
case 1:
ingresar_l1();
break;
case 2:
ingresar_l2();
break;
}
}
while (op1!=3);
break;
case 2:
verificar_iguales();
break;
case 3:
int op2;
do{
cout<<"\t\t\t\t
* MENU CASO 3 * \t\t\t\t"<<endl;
cout<<"\t\t\t 1. BUSCAR ELEMENTO EN LISTA 1"<<endl;
cout<<"\t\t\t 2. BUSCAR ELEMENTO EN LISTA 2"<<endl;
cout<<"\t\t\t 3. SALIR"<<endl;
cin>>op2;
switch (op2){
case 1:
buscar_l1();
break;
case 2:
buscar_l2();
break;
}
}
while (op2!=3);
break;
case 4:
GREIDY SIERRA
TALLERES
46
int op3;
do{
cout<<"\t\t\t\t
* MENU CASO 4 * \t\t\t\t"<<endl;
cout<<"\t\t\t 1. OCURRENCIAS EN LISTA 1"<<endl;
cout<<"\t\t\t 2. OCURRENCIAS EN LISTA 2"<<endl;
cout<<"\t\t\t 3. SALIR"<<endl;
cin>>op3;
switch (op3){
case 1:
ocurrencias_l1();
break;
case 2:
ocurrencias_l2();
break;
}
}
while (op3!=3);
break;
}
}
while (op!=5);
system("pause");
}
-------------------------------------------------------------------------------------------------------------------------TALLER 7:
/* AUTOR: GREIDY SIERRA
FECHA: 19-09-2013*/
#include<iostream>
#include<string>
using namespace std;
struct numero{
short int nro;
};
struct Nodo{
//anida estructura
numero campo;
Nodo *ste;
Nodo *ant;
};
struct Nodo *pi=NULL,*pf=NULL, *pa=NULL, *r;
void insertarDatos(numero datos);
void insertaCabeza(numero datos);
void insertaCola(numero datos);
void eliminar_Nodo (int eliminar);
void mostrar();
void sumar(int suma);
void inser_cab(numero datos){
if(pi==NULL){
pi=r;
r->ste=NULL;
pf=r;
pa=r;
}
else{
pa= pi;
r->ste=pi;
pi = r;
pa->ant=r;
pa=r;
}
}
void inser_cola(numero datos){
if(pf==NULL){
pf=r;
pi=r;
}
else{
pa=pi;
while(pa->ste != NULL){
GREIDY SIERRA
TALLERES
47
pa = pa->ste;
}
pf=r;
pf->ant=pa;
pa->ste=r;
}
}
void insertarDatos(numero datos){
cout<<"INGRESE EL NUMERO "<<endl;
cin>>datos.nro;
//crea el espacio para el nodo y asigna r al nuevo nodo
r = new Nodo();
//datos.nombre se asigna a persona.nombre
r->campo.nro=datos.nro;
r->ste=NULL;
r->ant=NULL;
if(pf==NULL && pi == NULL){
//pi = puntero inicial ... pf = puntero final
pf=r;
pi=r;
pa=r;
}
else if(r->campo.nro <= pi->campo.nro){
inser_cab(datos);
}
else if(r->campo.nro >= pf->campo.nro){
inser_cola(datos);
}
else{
pa=pi;
Nodo *au = pa;
while(pa !=NULL){
if(pa->campo.nro >= r->campo.nro){
au->ste = r;
r->ste = pa;
pa->ant=r;
r->ant=au;
return;
}
au =pa;
pa = pa->ste;
}
//aux=aux->ste;//avanzamos el puntero para que el ciclo no se haga infinito
}
}
void eliminar(){
r=pi;
Nodo *au = r;
short int eliminar;
cout<<"Ingrese el numero que desea eliminar \n";
cin>>eliminar;
while(r!=NULL){
cout<<"entra"<<endl;
if(r->campo.nro == eliminar){
if(r==pi){
pi=r->ste;//Eliminando la cabeza
delete r;
return;
}
else{
cout<<"elimina en cualquier";
au->ste =r->ste;//Eliminando cualquier nodo
r->ste->ant = au;
r->ste =NULL;
// que pasa con pf ?
r->ant=NULL;
delete r;
return;
GREIDY SIERRA
TALLERES
48
}
}
au =r;
r=r->ste;//avanzamos el puntero para que el ciclo no se haga infinito
}
}
void mostrar(){
pa=pi;
cout<<"\tNUMERO"<<"\t"<<endl;
while(pa!=NULL){
cout<<"\t"<<pa->campo.nro;
pa=pa->ste;
//avanzamos el puntero para que el ciclo no se haga infinito
}
}
void sumar_con(){
int suma;
pa= pi;
Nodo *au = pa;
while(pa !=NULL){
if(pa->campo.nro >= r->campo.nro+1){
suma= pa->campo.nro + r->campo.nro;
cout<<"\n LA SUMA DE LOS NUMEROS CONSECUTIVOS DE LA LISTA ES: "<<suma<<endl;
return;
}
else{
cout<<"\n EN ESTA LISTA NO HAY NUMEROS CONSECUTIVOS "<<suma<<endl;
}
pa = pa -> ste;
}
}
void main(){
int suma = 0;
int n;//iniciamos variables a utilizar
numero datos;
do{
cout<<"\t\t MENU \n"<<endl;
cout<<"1. INSERTAR DATOS\n"<<endl;
cout<<"2. ELIMINAR DATOS\n"<<endl;
cout<<"3. MOSTRAR DATOS\n"<<endl;
cout<<"4. SUMA DE NUMEROS CONSECUTIVOS \n"<<endl;
cout<<"5. SALIR "<<endl;
cin>>n;
switch (n) {
case 1:
insertarDatos(datos);
break;
case 2:
eliminar();
break;
case 3:
mostrar();
break;
case 4:
sumar_con();
break;
default :
break;
}
}
while(n!=5);
system("pause > null");
}
--------------------------------------------------------------------------------------------------------------------------
PARCIAL 2:
/* Usted ha sido contratado en una tienda de venta de Banco en la cual se tiene la informacin
de las cuentas la cual es nombre del titular de la cuenta, nmero de la cuenta, fecha de creacin
y saldo de la cuenta.
Usted debe crear una estructura de datos que le permita almacenar la informacin de las cuentas,
GREIDY SIERRA
TALLERES
49
cree un men de opciones que permita: Primero ingresar la informacin de las cuentas, eliminar
informacin y por ltimo el banco ha decidido adicionar a cada cuenta un bono diferente, este bono
corresponde al 20% del saldo de la cuenta.
AUTOR: GREIDY SIERRA
FECHA:20-09-2013*/
#include<iostream>
#include<string>
using namespace std;
struct banco{
string nombre_t;
string apellido_t;
double numero_cta;
string fecha;
double saldo;
};
struct Nodo{
banco campo;
Nodo *ste;
Nodo *ant;
};
struct Nodo *pi=NULL, *pf=NULL, *pa=NULL, *r;
void insertar_cab(banco datos);
void insertar_cola(banco datos);
void insertar_datos(banco datos);
void eliminar(int eliminar);
void mostrar(banco datos);
void bono(banco datos);
void insertar_cab(banco datos){
if(pi==NULL){
pi=r;
r->ste=NULL;
pf=r;
pa=r;
}
else{
pa=pi;
r->ste=pi;
pi=r;
pa->ant=r;
pa=r;
}
}
void insertar_cola(banco datos){
if(pf==NULL){
pf=r;
pi=r;
}
else{
pa=pi;
while(pa->ste!=NULL){
pa=pa->ste;
}
pf=r;
pf->ant=pa;
pa->ste=r;
}
}
void insertar_datos(banco datos){
cout<<"NOMBRE TITULAR: ";
cin>>datos.nombre_t;
cout<<endl;
cout<<"APELLIDO TITULAR: ";
cin>>datos.apellido_t;
cout<<endl;
cout<<"NRO. DE LA CUENTA: ";
cin>>datos.numero_cta;
cout<<endl;
/*
while(r->campo.numero_cta==pi->campo.numero_cta){
cout<<"ERROR, NRO. DE LA CUENTA YA EXISTENTE, INGRESELO NUEVAMENTE: ";
GREIDY SIERRA
TALLERES
50
cin>>datos.numero_cta;
cout<<endl;
}
*/
cout<<"FECHA DE CREACION (Example 20-09-2013): ";
cin>>datos.fecha;
cout<<endl;
cout<<"SALDO: ";
cin>>datos.saldo;
cout<<endl;
r=new Nodo();
r->campo.nombre_t=datos.nombre_t;
r->campo.apellido_t=datos.apellido_t;
r->campo.numero_cta=datos.numero_cta;
r->campo.fecha=datos.fecha;
r->campo.saldo=datos.saldo;
r->ste=NULL;
r->ant=NULL;
if(pf==NULL && pi==NULL){
pf=r;
pi=r;
pa=r;
}
else if(r->campo.numero_cta<=pi->campo.numero_cta){
insertar_cab(datos);
}
else if(r->campo.numero_cta>=pi->campo.numero_cta){
insertar_cola(datos);
}
else{
pa=pi;
Nodo *au=pa;
while(pa!=NULL){
if(pa->campo.numero_cta>=r->campo.numero_cta){
au->ste=r;
r->ste=pa;
pa->ant=r;
r->ant=au;
return;
}
au=pa;
pa=pa->ste;
}
}
}
void eliminar(int eliminar){
r=pi;
Nodo *au=r;
cout<<"NRO. DE LA CUENTA QUE DESEA ELIMINAR: ";
cin>>eliminar;
while(r!=NULL){
if(r->campo.numero_cta==eliminar){
if(r==pi){
pi=r->ste;
delete r;
return;
cout<<"LA CUENTA NRO. "<<eliminar<<"SE HA ELIMINADO EXITOSAMENTE"<<endl;
}
else{
au->ste=r->ste;
r->ste->ant=au;
r->ste=NULL;
r->ant=NULL;
delete r;
return;
cout<<"LA CUENTA NRO. "<<eliminar<<"SE HA ELIMINADO EXITOSAMENTE"<<endl;
}
}
else{
cout<<"LA CUENTA NRO. "<<eliminar<<"NO EXISTE"<<endl;
}
au=r;
r=r->ste;
}
GREIDY SIERRA
TALLERES
51
}
void mostrar(banco datos){
pa=pi;
cout<<"\t\t\t\t * INFORMACION INGRESADA * "<<endl<<endl;
cout<<" N. CUENTA
NOMBRE
APELLIDO
SALDO
FECHA DE CREACION "<<endl;
while(pa!=NULL){
cout<<datos.numero_cta<<"
"<<pa->campo.nombre_t<<"
"<<pa->campo.apellido_t<<"
"<<pa>campo.saldo<<"
"<<pa->campo.fecha<<endl;
pa=pa->ste;
}
}
void bono(banco datos){
int cuenta;
double bono, total=0;
Nodo *au=r;
while(r!=NULL){
if(r==pi){
pi=r->ste;
bono=((r->campo.saldo)*0.20);
total=bono+r->campo.saldo;
return;
cout<<"LA CUENTA NRO. "<<cuenta<<"TIENE UN BONO DE "<<bono<<"EN TOTAL EL SALDO ES DE
"<<total<<endl;
}
au=r;
r=r->ste;
cout<<" N. CUENTA
NOMBRE
APELLIDO
SALDO
FECHA DE CREACION "<<endl;
cout<<pa->campo.numero_cta<<"
"<<pa->campo.nombre_t<<"
"<<pa->campo.apellido_t<<"
"<<total<<"
"<<pa->campo.fecha<<endl;
}
}
void main(){
int op;
banco datos;
do{
cout<<"\t\t MENU"<<endl<<endl;
cout<<"1. INGRESAR DATOS."<<endl;
cout<<"2. ELIMINAR DATOS."<<endl;
cout<<"3. INGRESAR BONO."<<endl;
cin>>op;
switch(op){
case 1:
insertar_datos(datos);
mostrar(datos);
break;
case 2:
eliminar(int (eliminar));
break;
case 3:
bono(datos);
break;
}
}
while(op!=3);
system("pause>null");
}
-----------------------------------------------------------------------------------------------------------------------------------------TALLER 8:
/* COLAS
AUTOR: GREIDY SIERRA
FECHA: 01-10-2013
*/
#include <iostream>
#include <stdlib.h>
using namespace std;
struct Nodo{
int nro;
struct Nodo *ste;
};
struct cola{
Nodo *pd;
Nodo *pa;
GREIDY SIERRA
TALLERES
52
};
void agregar(struct cola q , int valor ){
struct Nodo *p_aux = new(struct Nodo);
p_aux->nro = valor;
p_aux->ste = NULL;
if( q.pd == NULL)
q.pd = p_aux;
// agrega el primer elemento a la cola
else
(q.pa)->ste = p_aux;
q.pa = p_aux;
// siempre apunta al ultimo elemento
}
int borrar(struct cola q){
int num;
struct Nodo *p_aux;
p_aux = q.pd;
num = p_aux->nro;
q.pd=(q.pd)->ste;
delete(p_aux);
return num;
}
void mostrar(struct cola q){
struct Nodo *p_aux;
p_aux = q.pd;
while( p_aux != NULL ){
cout<<"
"<<p_aux->nro;
p_aux = p_aux->ste;
}
}
int main(){
struct cola q;
q.pd=NULL;
q.pa=NULL;
int dato; // numero a encolar
int op;
// opcion del menu
int x ;
// numero que devuelve la funcon pop
do{
cout<<"\n\t MENU\n\n";
cout<<" 1. INSERTAR COLA "<<endl;
cout<<" 2. ELIMINAR CABEZA "<<endl;
cout<<" 3. MOSTRAR COLA "<<endl;
cout<<" 4. SALIR "<<endl;
cin>>op;
switch(op)
{
case 1:
cout<< "\n INGRESE EL NUMERO A LA COLA: "; cin>> dato;
agregar(q, dato);
cout<<"\n DATO: " << dato << " INGRASADO A COLA\n\n";
break;
case 2:
x = borrar(q);
cout<<"\n CABEZA "<< x <<" ELIMINADA\n\n";
break;
case 3:
cout << "\n MOSTRANDO COLA\n\n";
mostrar(q);
//cout<<"\n NO HAY DATOS EN COLA!"<<endl;
break;
}
}while(op!=5);
system("pause");
return 0;
}
-------------------------------------------------------------------------------------------------------------------------/* PILAS
AUTOR: GREIDY SIERRA
GREIDY SIERRA
TALLERES
53
FECHA: 01-10-2013
*/
#include <iostream>
using namespace std;
struct nodo{
int nro;
struct nodo *sgte;
};
typedef nodo *Pila;
void ingresar(Pila &p, int numero){
Pila aux;
aux = new(struct nodo); // apuntamos al nuevo nodo creado
aux->nro = numero;
aux->sgte = p;
p = aux;
}
int eliminar(Pila &p){
int num;
Pila aux;
aux = p ;
num = aux->nro;
p = aux->sgte ;
delete(aux);
return num;
}
void mostrar(Pila p){
Pila aux;
aux = p;
// apunta al inicio de la lista
while( aux !=NULL )
{
cout<<"\t"<< aux->nro <<endl;
aux = aux->sgte;
}
}
int main(){
Pila p = NULL; // creando pila
int dato;
int op;
int x ; // numero que devuelve la funcon pop
do{
cout<<" 1. INGRESAR DATOS "<<endl;
cout<<" 2. ELIMINAR DATOS "<<endl;
cout<<" 3. MOSTRAR DATOS APILADOS "<<endl;
cout<<" 4. SALIR"<<endl;
cin>> op;
switch(op){
case 1:
cout<< "\n NUMERO A APILAR: ";
cin>> dato;
ingresar(p, dato);
cout<<" NUMERO " << dato << " APILADO "<<endl<<endl;
break;
case 2:
x = eliminar( p );
cout<<"\n NUMERO "<< x <<" ELIMINADO "<<endl<<endl;
break;
case 3:
cout << "\n MOSTRANDO PILA"<<endl;
if(p!=NULL){
mostrar(p);
cout<<endl;
}
GREIDY SIERRA
TALLERES
54
else{
cout<<"\n PILA VACIA"<<endl;
}
break;
cout<<endl<<endl;
system("pause");
system("cls");
return 0;
}
}while(op!=4);
}
------------------------------------------------------------------------------------------------------TALLER 9:
/* CLASES AUTOREFERENCIADAS (PONTENCIAS)
AUTOR: GREIDY SIERRA
FECHA: 04-10-2013
*/
#include <iostream>
using namespace std;
double potencias(int b, int e){
if(e==0){
return 1;
}
else{
return b*(potencias(b, e-1));
}
}
int main(){
int base=2;
int cant=0;
int i=0;
cout<<"\t CALCULAR LAS POTENCIAS DE 2"<<endl<<endl;
cout<<"\t HASTA QUE POTENCIA DESEA CALCULAR? ";
cin>>cant;
for(i=0; i<=cant; i++){
cout<<"EL NUMERO 2^"<<i<<" = "<<potencias(base, i)<<endl;
}
system("pause");
}
-------------------------------------------------------------------------------------------------------------------------/*
CLASES AUTOREFERENCIADAS (MCD)
AUTOR: GREIDY SIERRA
FECHA: 04-10-2013
*/
#include <iostream>
using namespace std;
int MCD(int x, int y){
if(y==0){
return x;
}
else{
return MCD(y, x%y);
}
}
int main(){
int m=0;
int n=0;
cout<<"DIGITE EL PRIMER NUMERO ";
cin>>m;
cout<<endl;
cout<<"DIGITE EL SEGUNDO NUMERO ";
cin>>n;
cout<<endl;
cout<<"EL RESULTADO ES:"<<MCD(m, n)<<endl;
system("pause");
}
-------------------------------------------------------------------------------------------------------------------------/*
CLASES AUTOREFERENCIADAS (FIBONACCI)
AUTOR: GREIDY SIERRA
FECHA: 04-10-2013
*/
#include <iostream>
using namespace std;
GREIDY SIERRA
TALLERES
55
GREIDY SIERRA
TALLERES
56
GREIDY SIERRA
TALLERES
57
system("cls");
cout<<" DISTANCIA DE LA RAIZ A LA HOJA"<<endl;
con=0;
contarDistancia(arbol);
cout<<con<<endl;
system("pause");
break;
case 9:
system("color 7A");
system("cls");
cout<<"Subarboles Izquierdos Vacios"<<endl;
con=0;
contarIzquiedovacios(arbol);
cout<<con<<endl;
system("pause");
break;
case 10:
system("color 3A");
system("cls");
cout<<" DISTANCIA DE LA RAIZ AL NUMERO"<<endl;
cout<<"Ingrese el Numero a buscar"<<endl;
con=0;
cin>>x;
buscar(arbol, x);
system("cls");
if (con!=0){
cout<<"La distancia del numero "<<x<<" a la raiz es de:"<<con<<endl;
}
system("pause");
break;
}
} while (opcion!=11);
}
void imprimir(ABB arbol, int n){
if(arbol==NULL){
return;// Que retorna?
}
//cout<<"antes"<<arbol->nro<<endl;
imprimir(arbol->der, n+1);
//cout<<"Despues"<<arbol->nro<<endl;
for(int i=0; i<n; i++){
cout<<" "; //Espacios horizontales por niveles
}
cout<< arbol->nro <<endl;//En que momento se va a la raiz?
imprimir(arbol->izq, n+1);
}
bool buscar(ABB &arbol, int x){
if (arbol!=NULL){
if(arbol->nro==x){
system("cls");
cout<<"Elemento encontrado"<<endl;
cout<<x;
return 1;//Preguntar??
exit(0);//preguntar??
}
else{
if (arbol->nro>x){
con++;
buscar(arbol->izq, x);
}
else if (arbol->nro<x){
con++;
buscar(arbol->der, x);
}
return 0;
}
}
}
void inorden(ABB &arbol){ //Izquierda || Raiz || Derecha
if (arbol!=NULL){
inorden(arbol->izq);
impresion_basica(arbol);
inorden(arbol->der);
}
}
GREIDY SIERRA
TALLERES
58
GREIDY SIERRA
TALLERES
59
GREIDY SIERRA
TALLERES
60
GREIDY SIERRA
TALLERES
61
system("pause");
break;
case 4:
system("cls");
cout<<"Ingrese el numero del nivel"<<endl;
cin>>K;
recorrerxNivel(raiz2);
system("pause");
break;
}
} while (opcion!=5);
}
void preorden(ARBOL1 &raiz1, ARBOL2 &raiz2, int nodos1, int nodos2){ // Raiz || Izquierda || Derecha
if (nodos1==nodos2){
if (raiz1!=NULL & raiz2!=NULL){
if (raiz1->nro1==raiz2->nro2){
preorden(raiz1->izq1, raiz2->izq2, nodos1, nodos2);
preorden(raiz1->der1, raiz2->der2, nodos1, nodos2);
igual++;
}
}
}
else{
cout<<"No tienen la misma cantidad de nodos";
}
}
void contarNodo1(ARBOL1 &raiz1){
if (raiz1!=NULL){
nodos1++;
contarNodo1(raiz1->izq1);
contarNodo1(raiz1->der1);
}
}
void contarNodo2(ARBOL2 &raiz2){
if (raiz2!=NULL){
nodos2++;
contarNodo2(raiz2->izq2);
contarNodo2(raiz2->der2);
}
}
void recorrerxNivel(ARBOL2 raiz2) {
struct cola q;
inicializaCola(q);
cout << "\t";
if(raiz2!=NULL) {
encola(q, raiz2);
while(q.delante!=NULL) {
raiz2 = desencola(q);
cout << raiz2->nro2 << ' ';
if(raiz2->izq2!=NULL)
encola(q, raiz2->izq2);
if(raiz2->der2!=NULL)
encola(q, raiz2->der2);
}
}
}
-------------------------------------------------------------------------------------------------------------------------OPCIONES:
#include <iostream>
#include <stdlib.h>
using namespace std;
/*--------- Estructura del arbol -------*/
typedef struct nodo{
int nro;
struct nodo *izq, *der;
}*ABB;
int numNodos = 0; // nummero de nodos del arbol ABB
int numK = 0, k;
// nodos menores que un numero k ingresado
/* ---------- Estructura de la cola ---------*/
struct nodoCola{
ABB ptr;
struct nodoCola *sgte;
};
GREIDY SIERRA
TALLERES
62
struct cola{
struct nodoCola *delante;
struct nodoCola *atras;
};
void inicializaCola(struct cola &q) {
q.delante = NULL;
q.atras = NULL;
}
void encola(struct cola &q, ABB n) {
struct nodoCola *p;
p = new(struct nodoCola);
p->ptr = n;
p->sgte = NULL;
if(q.delante==NULL)
q.delante = p;
else
(q.atras)->sgte = p;
q.atras = p;
}
ABB desencola(struct cola &q) {
struct nodoCola *p;
p = q.delante;
ABB n = p->ptr;
q.delante = (q.delante)->sgte;
delete(p);
return n;
}
ABB crearNodo(int x) {
ABB nuevoNodo = new(struct nodo);
nuevoNodo->nro = x;
nuevoNodo->izq = NULL;
nuevoNodo->der = NULL;
return nuevoNodo;
}
void insertar(ABB &arbol, int x) {
if(arbol==NULL) {
arbol = crearNodo(x);
cout<<"\n\t Insertado..!"<<endl<<endl;
}
else if(x < arbol->nro)
insertar(arbol->izq, x);
else if(x > arbol->nro)
insertar(arbol->der, x);
}
void preOrden(ABB arbol) {
if(arbol!=NULL) {
cout << arbol->nro <<" ";
preOrden(arbol->izq);
preOrden(arbol->der);
}
}
void enOrden(ABB arbol) {
if(arbol!=NULL) {
enOrden(arbol->izq);
cout << arbol->nro << " ";
enOrden(arbol->der);
}
}
void postOrden(ABB arbol) {
if(arbol!=NULL) {
enOrden(arbol->izq);
enOrden(arbol->der);
cout << arbol->nro << " ";
}
}
void verArbol(ABB arbol, int n) {
if(arbol==NULL)
return;
verArbol(arbol->der, n+1);
for(int i=0; i<n; i++)
cout<<"
";
numNodos++;
cout<< arbol->nro <<endl;
verArbol(arbol->izq, n+1);
}
GREIDY SIERRA
TALLERES
63
GREIDY SIERRA
TALLERES
64
if(arbol->nro<k)
numK++;
nodosMenoresQueK(arbol->izq, n+1);
}
int contarHojas(ABB arbol) {
if (arbol==NULL) {
return 0;
}
if ((arbol->der ==NULL)&&(arbol->izq ==NULL)) {
return 1;
}
else {
return contarHojas(arbol->izq) + contarHojas(arbol->der);
}
}
void menu() {
//system("cls");
cout << "\n\t\t ..[ ARBOL BINARIO DE BUSQUEDA ].. \n\n";
cout << "\t [1] Insertar elemento
\n";
cout << "\t [2] Mostrar arbol
\n";
cout << "\t [3] Recorridos de profundiad
\n";
cout << "\t [4] Buscar elemento
\n";
cout << "\t [5] Eliminar elemento
\n";
cout << "\t [6] Recorrido por nieveles (Amplitud) \n";
cout << "\t [7] Altura del arbol
\n";
cout << "\t [8] Construir arbol reflejo
\n";
cout << "\t [9] Contar nodos
\n";
cout << "\t [x] Contar hojas
\n";
cout << "\t [11] Nodos menores de 'k'
\n";
cout << "\t [12] SALIR
\n";
cout << "\n\t Ingrese opcion : ";
}
void menu2() {
//system("cls");
// para limpiar pantalla
cout << endl;
cout << "\t [1] En Orden
\n";
cout << "\t [2] Pre Orden
\n";
cout << "\t [3] Post Orden
\n";
cout << "\n\t
Opcion : ";
}
int main() {
ABB arbol = NULL;
int x;
int op, op2;
//system("color f9");
// poner color a la consola
do {
menu(); cin>> op;
cout << endl;
switch(op) {
case 1:
cout << " Ingrese valor : "; cin>> x;
insertar( arbol, x);
break;
case 2:
verArbol(arbol, 0);
break;
case 3:
menu2(); cin>> op2;
if(arbol!=NULL) {
switch(op2) {
case 1:
enOrden(arbol);
break;
case 2:
preOrden(arbol); break;
case 3:
postOrden(arbol); break;
}
}
else
cout << "\n\t Arbol vacio..!";
break;
case 4:
bool band;
cout<<" Valor a buscar: "; cin>> x;
GREIDY SIERRA
TALLERES
65
band = busquedaRec(arbol,x);
if(band==1)
cout << "\n\tEncontrado...";
else
cout << "\n\tNo encontrado...";
break;
case 5:
cout<<" Valor a eliminar: "; cin>> x;
elimina(arbol, x);
cout << "\n\tEliminado..!";
break;
case 6:
cout<<"\n\n Mostrando recorrido por amplitud\n\n";
recorrerxNivel(arbol);
break;
case 7:
int h;
h = alturaAB(arbol);
cout << " La altura es : "<< h << endl;
break;
case 8:
ABB espejo;
espejo = NULL;
cout << "\n\n Arbol incial \n\n";
verArbol(arbol, 0);
cout << "\n\n Arbol espejo \n\n";
espejo = arbolEspejo(arbol);
verArbol(espejo, 0);
break;
case 9:
verArbol(arbol, 0);
cout << "\n\n El numero de nodos es : ";
cout << numNodos;
break;
case 11:
cout << " Ingrese k: "; cin>> k;
nodosMenoresQueK(arbol, 0);
cout <<" Son "<< numK << " numeros";
break;
case 12:
exit(0);
}
cout<<"\n\n\n";
//system("pause");
}while(op!=11);
}
------------------------------------------------------------------------------------------------------BUSQUEDA Y ORDEN:
#include<iostream>
using namespace std;
typedef struct Nodo{
int info;//informacion de tipo entero que contiene la lista
Nodo* ste;//puntero siguiente de la lista
};
//definicion de los punteros que va a tener la lista
struct Nodo *r,*pi=NULL,*pf=NULL, *aux, *auxini, *auxfin, *aux2,*minimo, *cab;//ptr como puntero inicial
void InsertarCabeza(int num);
void insertar_cola(int nu);
void muestra_lista();
void isertar_ordenado(int ordenado);
void eliminar_Nodo (int eliminar);
void buscar_Nodo (int buscar);
int contarNodos(Nodo *auxini,Nodo *auxfin);
void buscar_Binaria (int buscar,Nodo *auxini,Nodo *auxfin);
void ordenamientoBurbuja();
void ordenamientoLineal();
int encontrarMinimo();
void main(){
int n,num,eliminar,ordenado,buscar;//iniciamos variaobles a utilizar
cout<<"Cuantos numeros desea ingresar \n";
do{
cout<<"\t\t MENU \n"<<endl;
GREIDY SIERRA
TALLERES
66
GREIDY SIERRA
TALLERES
67
while(aux->ste != NULL){
aux = aux->ste;
}
aux->ste=r;
pf=r;
}
}
void eliminar_Nodo (int eliminar){
r=pi;
Nodo *au = r;
while(r!=NULL){
cout<<"entra"<<endl;
if(r->info == eliminar) {
if(r==pi){
pi=r->ste;//Eliminando la cabeza
delete r;
return;
}
else{
cout<<"elimina en cualquier";
au->ste =r->ste; //Eliminando cualquier nodo
r->ste =NULL;
delete r;
return;
}
}
au =r;
r=r->ste;//avanzamos el puntero para que el ciclo no se haga infinito
}
}
void buscar_Nodo (int buscar){
aux=pi;
while(aux!=NULL){
if(aux->info == buscar) {
cout<<"Numero encontrado "<<aux->info;
return;//El return nos devuelve a donde fue llamada la funcion
}
aux=aux->ste;//avanzamos el puntero para que el ciclo no se haga infinito
}
cout<<"el numero que busca en la lista no existe"<<endl;
}
void buscar_Binaria (int buscar,Nodo *auxini,Nodo *auxfin){
int numeroNodos = 0;
int contador = 0;
numeroNodos = contarNodos(auxini,auxfin);
aux = auxini;
auxfin->ste = NULL;
cout<<numeroNodos<<endl;
cout<< "auxini"<< auxini ->info <<endl;
cout<< "auxfin"<< auxfin ->info <<endl;
while(aux != auxfin){
cout<<"mitad"<< numeroNodos/2 <<endl;
cout<<"contador1 "<<contador<<endl;
if(numeroNodos/2 == 1 && numeroNodos == 2){
if (auxini->info ==buscar ){
cout<<"Numero encontrado "<<auxini->info;
break;
}
else if (auxfin->info == buscar){
cout<<"Numero encontrado "<<auxfin->info;
break;
}
else {
cout<<"el numero que busca en la lista no existe"<<endl;
break;
}
}
if(contador == numeroNodos/2) {
cout<<"auxinfo"<<aux->info<<endl;
if(aux->info == buscar){
cout<<"Numero encontrado "<<aux->info;
break;
}
else if (aux->info < buscar){
auxini = aux;
GREIDY SIERRA
TALLERES
68
buscar_Binaria(buscar,auxini,auxfin);
}
else if (aux->info > buscar){
auxfin = aux;
buscar_Binaria(buscar,auxini,auxfin);
}
}
contador++;
aux=aux->ste;
}
}
int contarNodos(Nodo *auxini,Nodo *auxfin){
int contador = 0;
while(auxini!=auxfin->ste){
contador ++;
auxini=auxini->ste;//avanzamos el puntero para que el ciclo no se haga infinito
}
return contador;
}
void muestra_lista(){
aux=pi;
while(aux!=NULL){
cout<<"Numero nodo "<<aux->info;
aux=aux->ste;//avanzamos el puntero para que el ciclo no se haga infinito
}
}
void isertar_ordenado(int ordenado){
r = new Nodo();
r->info=ordenado;
if(pf==NULL && pi == NULL){
cout<<"inserta el primero"<<endl;
pf=r;
pi=r;
}
else if(ordenado < pi->info){
cout<<"inserta por cabeza"<<endl;
InsertarCabeza(ordenado);
}
else if(ordenado > pf->info) {
cout<<"inserta por cola"<<endl;
insertar_cola(ordenado);
}
else{
aux=pi;
Nodo *au = aux;
while(aux !=NULL){
cout<<"info"<<aux->info<<endl;
if(aux->info > ordenado) {
cout<<"inserta en medio"<<endl;
au->ste = r;
r->ste = aux;
return;
}
au =aux;
aux = aux->ste;
}
}
}
void ordenamientoBurbuja(){
int temp;
bool cambio = true;
aux = pi;
aux2 = aux->ste;
while(cambio){
aux = pi;
aux2 = aux->ste;
while(aux2 != NULL){
if(aux->info > aux2->info){
temp = aux->info;
aux->info = aux2->info;
aux2->info = temp;
cambio = true;
}
else {
cambio = false;
GREIDY SIERRA
TALLERES
69
}
aux = aux->ste;
aux2 = aux2->ste;
}
}
}
void ordenamientoLineal(){
cab = pi;
aux = pi;
int min = aux->info;
minimo = pi;
bool cambio = false;
while (cab!=NULL){
min = aux->info;
while (aux != NULL){
cout<<"min"<<min<<endl;
cout<<"aux"<<aux->info<<endl;
if(aux->info< min ){
minimo = aux;
min= aux->info;
cambio = true;
cout<<"nunca deberia entrar"<<endl;
}
aux=aux->ste;
}
if(cambio){
cout<<"cambio"<<min;
minimo->info = cab->info;
cab->info = min;
muestra_lista();
}
cambio = false;
cout<<"cab"<<cab->info<<endl;
cab = cab->ste;
//cout<<"aux"<<aux->info;
aux = cab;
}
}
------------------------------------------------------------------------------------------------------------------------GRAFOS:
#include<iostream>
#include<conio.h>
using namespace std;
struct nodo{
char nombre;//nombre del vertice o nodo
struct nodo *sgte;
struct arista *ady;//puntero hacia la primera arista del nodo
};
struct arista{
struct nodo *destino;//puntero al nodo de llegada
struct arista *sgte;
};
typedef struct nodo *Tnodo;// Tipo Nodo
typedef struct arista *Tarista; //Tipo Arista
Tnodo p;//puntero cabeza
void menu();
void insertar_nodo();
void agrega_arista(Tnodo &, Tnodo &, Tarista &);
void insertar_arista();
void vaciar_aristas(Tnodo &);
void eliminar_nodo();
void eliminar_arista();
void mostrar_grafo();
void mostrar_aristas();
//Funcion Principal
int main(void){
p=NULL;
int op;
// opcion del menu
system("color 0b");
do{
menu();
cin>>op;
switch(op){
case 1:
insertar_nodo();
GREIDY SIERRA
TALLERES
70
break;
case 2:
insertar_arista();
break;
case 3:
eliminar_nodo();
break;
case 4:
eliminar_arista();
break;
case 5:
mostrar_grafo();
break;
case 6:
mostrar_aristas();
break;
default:
cout<<"OPCION NO VALIDA...!!!";
break;
}
cout<<endl<<endl;
system("pause");
system("cls");
}while(op!=7);
getch();
return 0;
}
//Menu
void menu(){
cout<<"\n\tREPRESENTACION DE GRAFOS DIRIGIDOS\n\n";
cout<<" 1. INSERTAR UN NODO
"<<endl;
cout<<" 2. INSERTAR UNA ARISTA
"<<endl;
cout<<" 3. ELIMINAR UN NODO
"<<endl;
cout<<" 4. ELIMINAR UNA ARISTA
"<<endl;
cout<<" 5. MOSTRAR GRAFO
"<<endl;
cout<<" 6. MOSTRAR ARISTAS DE UN NODO
"<<endl;
cout<<" 7. SALIR
"<<endl;
cout<<"\n INGRESE OPCION: ";
}
//INSERTAR NODO AL GRAFO
void insertar_nodo(){
Tnodo t,nuevo=new struct nodo;
cout<<"INGRESE VARIABLE:";
cin>>nuevo->nombre;
nuevo->sgte = NULL;
nuevo->ady=NULL;
if(p==NULL){
p = nuevo;
cout<<"PRIMER NODO...!!!";
}
else{
t = p;
while(t->sgte!=NULL){
t = t->sgte;
}
t->sgte = nuevo;
cout<<"NODO INGRESADO...!!!";
}
}
//AGREGAR ARISTA
//funcion que utilizada para agregar la arista a dos nodos
void agrega_arista(Tnodo &aux, Tnodo &aux2, Tarista &nuevo){
Tarista q;
if(aux->ady==NULL){
aux->ady=nuevo;
nuevo->destino=aux2;
cout<<"PRIMERA ARISTA....!";
}
else{
q=aux->ady;
while(q->sgte!=NULL)
q=q->sgte;
nuevo->destino=aux2;
q->sgte=nuevo;
cout<<"ARISTA AGREGADA...!!!!";
GREIDY SIERRA
TALLERES
71
}
}
//INSERTAR ARISTA
//funcion que busca las posiciones de memoria de los nodos y hace llamado a agregar_arista para insertar la arista
void insertar_arista(){
char ini, fin;
Tarista nuevo=new struct arista;
Tnodo aux, aux2;
if(p==NULL){
cout<<"GRAFO VACIO...!!!!";
return;
}
nuevo->sgte=NULL;
cout<<"INGRESE NODO DE INICIO:";
cin>>ini;
cout<<"INGRESE NODO FINAL:";
cin>>fin;
aux=p;
aux2=p;
while(aux2!=NULL){
if(aux2->nombre==fin){
break;
}
aux2=aux2->sgte;
}
while(aux!=NULL){
if(aux->nombre==ini){
agrega_arista(aux,aux2, nuevo);
return;
}
aux = aux->sgte;
}
}
//FUNCION PARA BORRAR TODAS LAS ARISTAS DE UN NODO
//esta funcion es utilizada al borrar un nodo pues si tiene aristas es nesesario borrarlas tambien y dejar libre la
memoria
void vaciar_aristas(Tnodo &aux){
Tarista q,r;
q=aux->ady;
while(q->sgte!=NULL){
r=q;
q=q->sgte;
delete(r);
}
}
//ELIMINAR NODO
//funcion utilizada para eliminar un nodo del grafo pero para eso tambien tiene que eliminar sus aristas por lo cual
//llama a la funcion vaciar_aristas para borrarlas
void eliminar_nodo(){
char var;
Tnodo aux,ant;
aux=p;
cout<<"ELIMINAR UN NODO\n";
if(p==NULL){
cout<<"GRAFO VACIO...!!!!";
return;
}
cout<<"INGRESE NOMBRE DE VARIABLE:";
cin>>var;
while(aux!=NULL){
if(aux->nombre==var){
if(aux->ady!=NULL)
vaciar_aristas(aux);
if(aux==p){
p=p->sgte;
delete(aux);
cout<<"NODO ELIMINADO...!!!!";
return;
}else{
ant->sgte = aux->sgte;
delete(aux);
cout<<"NODO ELIMINADO...!!!!";
return;
}
GREIDY SIERRA
TALLERES
72
}else{
ant=aux;
aux=aux->sgte;
}
}
}
//ELIMINAR ARISTA
//funcion utilizada para eliminar una arista
void eliminar_arista(){
char ini, fin;
Tnodo aux, aux2;
Tarista q,r;
cout<<"\n ELIMINAR ARISTA\n";
cout<<"INGRESE NODO DE INICIO:";
cin>>ini;
cout<<"INGRESE NODO FINAL:";
cin>>fin;
aux=p;
aux2=p;
while(aux2!=NULL){
if(aux2->nombre==fin){
break;
}
else
aux2=aux2->sgte;
}
while(aux!=NULL){
if(aux->nombre==ini){
q=aux->ady;
while(q!=NULL){
if(q->destino==aux2){
if(q==aux->ady)
aux->ady=aux->ady->sgte;
else
r->sgte=q->sgte;
delete(q);
cout<<"ARISTA "<<aux->nombre<<"----->"<<aux2->nombre<<"
ELIMINADA.....!!!!";
return;
}
}
r=q;
q=q->sgte;
}
aux = aux->sgte;
}
}
//MOSTRAR GRAFO
//funcion que imprime un grafo en su forma enlazada
void mostrar_grafo(){
Tnodo ptr;
Tarista ar;
ptr=p;
cout<<"NODO|LISTA DE ADYACENCIA\n";
while(ptr!=NULL){
cout<<"
"<<ptr->nombre<<"|";
if(ptr->ady!=NULL){
ar=ptr->ady;
while(ar!=NULL){
cout<<" "<<ar->destino->nombre;
ar=ar->sgte;
}
}
ptr=ptr->sgte;
cout<<endl;
}
}
//MOSTRAR ARISTAS
//funcion que muestra todas las aristas de un nodo seleccionado
void mostrar_aristas(){
Tnodo aux;
Tarista ar;
char var;
cout<<"MOSTRAR ARISTAS DE NODO\n";
cout<<"INGRESE NODO:";
GREIDY SIERRA
TALLERES
73
cin>>var;
aux=p;
while(aux!=NULL){
if(aux->nombre==var){
if(aux->ady==NULL){
cout<<"EL NODO NO TIENE ARISTAS...!!!!";
return;
}else{
cout<<"NODO|LISTA DE ADYACENCIA\n";
cout<<"
"<<aux->nombre<<"|";
ar=aux->ady;
while(ar!=NULL){
cout<<ar->destino->nombre<<" ";
ar=ar->sgte;
}
cout<<endl;
return;
}
}
else
aux=aux->sgte;
}
}
GREIDY SIERRA
TALLERES
74