Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ARCHIVOS
FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS
Programación Dinámica:
Punteros
I.-RAM II.-Fisico
Córdova Neri, T
Company Logo
Contenido
Introducción a la Programación Dinámica
Punteros
Creación de Pilas
Puntero
Variable
Simple Nodo
Operadores de Punteros
Existen dos operadores :
char *letra;
Letra: Es un puntero a variable de tipo carácter.
float *num;
float *mat[5]; // . . .
Asignación de Direcciones a los variables Puntero
A = new int;
Dirección de memoria a
Porción de memoria
*a
Puntero Nulo:
a=NULL
Int *dato,*valor ? dato ? valor
0 0 1 1 1 …….. 1
0001 valor
0010 dato
0101
1000 valor
……….
1111
0000
Aplicación 1.- Leer 2 números en forma dinámica y buscar el
mayor
void main()
{ int *a,*b,mayor;
a=new int
b=new int;
gotoxy(10,4);
cout<<"Ingrese a = "; cin>>*a;
gotoxy(10,5);
cout<<"Ingrese b = "; cin>>*b;
if(*a>*b)
{mayor=*a;
}
else
{mayor=*b;
}
gotoxy(10,9); cout<<"de "<<*a<<" y "<<*b<<" el mayor es =
<<mayor;
delete a; delete b;
getche();
}
II.- Uso de estructuras y Archivos
Registro (Nodo)
p q
typedef struct Alumnos
{ int nota;
Nuevo(q)
struct Alumnos *sigte; Nuevo(p)
Nodo
}nodo;
12 NULL
nota sigte nota sigte
Nodo
Variables
nodo *p,*q ;
P nota = 12
ESTRUCTURAS: PILAS
Declaración
P
Typedef struct Nodo
{ int *P
struct Nodo *sigte;
} Nodo;
dato sigte
Lectura - Escritura
void main()
{ nodo *p;
p=new nodo;
}
Técnica para diseñar una PIL A
Pila formada:
Recorrer Pila.- Para ingresar a recorrer una pila, se debe sacar una
copia para NO perder las direcciones de sus elementos y luego con
la copia hacer procesos
while(aux!=NULL)
{ if (aux->nota >10)
{ ap++;
notas[ap]=aux->nota;
} Copia
else
{ de++;
notasde[de]=aux->nota;
}
aux=aux->sgte;
}
Diseñar un programa que permita almacenar las notas de tres alumnos en
una estructura dinámica pila, luego genere un reporte de los elementos de
la pila, su promedio. liberar (eliminar) espacio de memoria utilizada por cada
nodo. Use los siguientes modulos
a b c
*a *b *c
typedef struct nodo
{ int nota;
struct nodo *sigte;
}nodo;
nodo *a,*b,*c;
gotoxy(10,4);cout<<"Alumno No."<<na;
system("title Cordova Neri, T. Pila_3_notas.cpp"); system("color CE");
gotoxy(20,12);cout<<" Cargando sistema de Notas...espere....";
caratula1(); system("color CE"); Sleep(1800);
caratula(); system("color 1a"); caratula();
textcolor(1);gotoxy(50,22);cout<<"Favor espere....";
caratula1(); Sleep(1800);
clrscr(); caratula1();
crear(a,b,c) ;
leer(a,b,c);cout<<" Promedio = "<<prom(a,b,c);
gotoxy(10,22); cout<<"Desea continuar..?(S/N)==>";
resp=toupper(getche());
}while(resp=='S');
}
Aplicación 2.- Diseñar un programa que permita almacenar notas de alumnos en
una pila de tamaño n (n definido por usuario), luego clasificar notas aprobadas y
guardar en el vector Aprob[ ], así como notas desaprobadas y guardar en el vector
desp[ ]. Luego genere un reporte de los elementos de la pila. Use los siguientes
subprogramas:
crear_nodo (int valor): función para inicializar e ir creando nodos.
crear_lista (nodo *&p): procedimiento para crear la pila.
aprob_desap (nodo *&p): procedimiento para recorrer la pila en busca de notas
aprobadas y desaprobadas.
Listar datos (nodo *&p): procedimiento para recorrer la pila y mostrar la
estructura formada por todos los elementos de cada nodo, tal como se ilustra en la
figura adjunta.
Int n,j, i, aprob=0, desap=0,de=0,ap=0,notas[100], notasde[100],aux, datos[100];
Void marco()
{ int i; time_t t; t = time(&t);gotoxy(12,3);cout<<"Fecha y hora actual : "<<ctime(&t);
gotoxy(10,20) ;cout<<"È"; gotoxy(10,4) ;cout<<"É"; //esquinas
for (i=11 ;i <=59 ; i++) {gotoxy(i,4) ;cout<<"Í"; gotoxy(i,5) ;cout<<"Í";
gotoxy(i,20) ;cout<<"Í"; }
gotoxy(60,4) ;cout<<""; gotoxy(60,20) ;cout<<" "; //esquinas
for(i=5;i<=19;i++) {gotoxy(10,i) ;cout<<"º"; gotoxy(60,i );cout<<"º";
Void crear_lista(nodo *&p
{ marco();
int nota,i;
nodo *r;
p=NULL;
gotoxy(16,7);cout<<"Ingrese numero de nodos: ";cin>>n;
for(i=1;i<=n;i++)
{
gotoxy(18,i+8);cout<<"Nota "<<i<< ": ";cin>>nota;
r=crear_nodo(nota;
if (p==NULL)
{p=r;
}
else
{ r->sgte=p;
p=r;
}
}
}
Logica del procedimiento: crear_lista(nodo *&p )
----------------
cout<<“Ingrese numero de nodos : ”,
cin>>n; ? p caso1
r Crea_nodo(cod , nomb )
1 A 2 M
ii(p==NULL)
{
p = r; r
}
else //pila xiste
{
r ->sigte = p
4 Ana NULL r
p=r; Cod nomb sigte
}
}
void aprob_desap(nodo *&p)// recorrer la pila
{ marco(); nodo *aux aux=new nodo; aux=p;
while(aux!=NULL)
{ if (aux->nota >10)
{ap++; notas[ap]=aux->nota;
}
else
{ de++; notasde[de]=aux->nota;
}
aux=aux->sgte;
}
gotoxy(13,n+10);cout<<"Total Aprobados: "<<ap;
gotoxy(18,n+11);cout<<"Notas ";
for(i=1;i<=ap;i++) // vector notasaprob
{ gotoxy(15,n+12);cout<<"----"; gotoxy(18,i+16);cout<<i<<".-
"<<notas[i]<<endl; }
gotoxy(36,n+10);cout<<"Total Desaprobados: "<<de;
gotoxy(42,n+11);cout<<"Notas "<<endl;
for(i=1;i<=de;i++) { gotoxy(39,n+12);cout<<"----------------";
gotoxy(40,i+16);cout<<"\t"<<i<<".-"<<" "<<notasde[i]<<endl;
} }
Void ListarDatos(nodo *&p
{
nodo *aux;// para obtener copia
aux=new nodo;// su espacio de memoria
aux=p; //hacer copia de p en aux
if(aux==NULL)
cout<<"\n\nLA LISTA ESTA VACIA"<<endl;
int k=0;
while(aux!=NULL)
{ k++;
gotoxy(14,10); cout<<"PILA: ";
gotoxy(12+7*k,11);cout<<" -> "<<aux->nota;
aux=aux->sgte;
getch();
}
void buscar_nota(nodo *&p)
{ int notas,nn=0; marco();
nodo *aux;// para obtener copia
aux=new nodo;
aux=p;
gotoxy(13,15);cout<<"Ingrese Nota a Buscar = ";cin>>notas;
while(aux!=NULL)
{ if(aux->nota==notas)
{ nn++;
}
aux=aux->sgte;// pasar al nuevo nodo
}
gotoxy(13,16);cout<<"Total de Notas Encontradas = "<<nn;
}
void main()
{nodo *lista;crear_lista(lista);aprob_desap(lista); getch(); clrscr();
marco(); ListarDatos(lista); // clrscr(); marco();
buscar_nota(lista);getche();
}