Documente Academic
Documente Profesional
Documente Cultură
ERS
SIDA
AD NACI
N ONA
AL DE
D
I
INGE
ENIE
ERIA
A
FA
ACUL
LTAD
D DE
E ING
GENIE
ERIA
MECANNICA
A
COM
MPUTACIONN I_MB
B543
A: PUNT
TEMA TEROSS
INTRODUCCION A PUNTEROS
Un puntero es una variable que contiene una direccin de memoria.
Normalmente esta direccin es una posicin de otra variable en la
memoria. Si una variable contiene la direccin de otra variable,
entonces se dice que la primera variable apunta a la segunda.
La siguiente figura Ilustra esta definicin.
Variable Direccin
de memoria en memoria
1000
0x123AD4
1001
0X322EF
1002
0X1348AC
1003
0X23512D
CREACION DE PUNTROS
Un puntero puede apuntar a un objeto de cualquier tipo, incluyendo
estructuras, funciones, etc...Un puntero se declara precediendo el
identificador que referencia al puntero, por el operador de indireccin
(*), el cual significa "puntero a ". Un puntero siempre apunta a un
objeto
particular .Un puntero no inicializado tiene un valor desconocido.
Si una variable va a contener un puntero, entonces se debe declarar como
tal:
Una variable de tipo puntero se declara as :
tipo *var_puntero;
tipo : Especifica el tipo del objeto apuntado y puede ser
cualquier
tipo,incluyendo tipos agregados.
*var_puntero :Nombre de la variable apuntador.
ejem:+
int *pint /* pint es un puntero a un entero */
char *pnom ,start /* pnom es un puntero a caracteres */
double *p, *q; /* p y q son punteros a reales */
LOS OPERADORES PUNTEROS
Se distinguen 02 operadores esenciales :* & . El & es un operador
monario que devuelve la direccin de memoria de su operando. Un operador
monario solo requiere un operando) Por ejemplo.
Var_dir = &var;
Pone la direccin de memoria de la variable var en var_dir. Esta
direccin es una posicin interna en la memoria del computador. La
direccin no tiene que hacer nada con el valor de var . Se puede
recordar el funcionamiento de & como devolviendo la direccin de la
Ing.DanielOsorioMaldonado Pgina2
UNI FIM
AREA ACADEMICA DE CIENCIAS BASICAS Y HUMANIDADES
COMPUTACION I
getch();}
1. /* Programa de asignacion */
#include<iostream.h>
#include<conio.h>
main ( ) {
unsigned int a,*p,*q;
cout<<"Ingrese el Valor de a : ";
cin>>a;
p=&a; /* asigna la direccion de a, a la variable p */
/* p apunta a la variable entera de a */
q=p; /* La direccion que contiene p se asigna a q */
cout<<"La Direccion de "<<a<<" esta dada por :"<<p<<endl;
cout<<"En la direccion de 'a' esta el valor "<<*q;
getch();}
2. #include<iostream.h>
#include<conio.h>
main ( ) {
float total =11.70;//declara e inicializa total
float &suma=total;//declara otro nombre para total
cout<<"suma ="<<suma<<endl;
suma=31.60; //cambia el valor total
cout<<"Total ="<<total<<endl;
getch();
}
/*suma = 11.7
Total = 31.6 */
3. /*Programa que usa punteros a char, en este caso se trata de del
conocido programa zodiaco */
#include<iostream.h>
#include<conio.h>
#define N 12
Ing.DanielOsorioMaldonado Pgina3
UNI FIM
AREA ACADEMICA DE CIENCIAS BASICAS Y HUMANIDADES
COMPUTACION I
#include<stdlib.h>
#include<ctype.h>
char *nombre(int b);
int signo(int n,int m);
int meses[N]={31,28,31,30,31,30,31,31,30,31,30,31};
main(){
int dd,mm,b;char rp; for(;;){
system("cls");
do{
cout<<"Ingrese la Fecha de Nacimiento :"<<endl
<<"\n Dia ...";cin>>dd;
cout<<"\n Mes ...";cin>>mm;
}while(dd>meses[mm-1]);
b=signo(dd,mm);
cout<<"\nSu SIGNO es"<<nombre(b);
cout<<endl
<<"Otro signo [S][N] :";
rp=toupper(getch());
if(rp=='N')break;}
}
int signo(int dd,int mm){
register int i;
int dias =0;
int j=0;
static int estrella[N] =
{20,50,79,110,140,171,201,232,265,295,326,356};
for(i=0;i<mm-1;i++)
dias +=meses[i];
dias+=dd;
if(dias<=20 || dias>365)
return(j);
else{
j=1;
while(dias>estrella[j++]);
}
return(j-1);
}
char *nombre(int b){
char *astro[
]={"Capricornio","Acuario","Picis","Aries","Tauro","Geminis"
,"Cancer","Leo","Virgo","Libra","Escorpio","Sagitario"};
return(astro[b]);
}
OPERACIONES ARITMTICAS
Con punteros solamente se pueden realizar las operaciones de + y
Ejemplo:
4. #include<iostream.h>
#include<conio.h>
Int *p
cout<<*p++;
cout<<*p--;
cout<<p+=3;
cout<<p-=4;
getch( );
}
5. #include<iostream.h>
#include<conio.h>
void main(){ clrscr();
int *p,x;
cout<<"\nIngrese el valor de x ";cin>>x;
p=&x;
cout<<' '<<*p<<endl;
cout<<p;
cout<<' '<<*p++<<endl;
cout<<p<<endl;
Ing.DanielOsorioMaldonado Pgina4
UNI FIM
AREA ACADEMICA DE CIENCIAS BASICAS Y HUMANIDADES
COMPUTACION I
cout<<*p--;
//cout<<*p+=3;
//cout<<*p-=4;
getch();
}
6. /*Programa que realiza Operaciones aritmtica con Punteros*/
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
void main(){
char A='a';
char *cp=&A;//crear e inicializar un puntero a char
double d=1.119;
double *dp=&d;//crear e inicializar un puntero a double
char *cp2=cp+1;
double *dp2=dp+1;
system("cls");
cout<<"\nAdicion y Sustraccion :";
cout<<"cp2=cp+1;dp2=dp+1;\n";
cout<<"cp2-cp="<<(cp2-cp)<<'\n';
cout<<"dp2-dp="<<(dp2-dp)<<'\n';
cout<<"(int)cp2-(int)cp="<<((int)cp2-(int)cp)<<'\n';
cout<<"(int)dp2-(int)dp="<<((int)dp2-(int)dp)<<'\n';
cout<<"\n\nIncremento y Decremento :\n";
cout<<"cp2=cp;dp2=dp;cp2--;cp2--;dp2++;dp2++;\n";
cp2=cp;dp2=dp;
cp2--;cp2--;
dp2++;dp2++;
cout<<"cp-cp2="<<(cp-cp2)<<'\n';
cout<<"dp2-dp="<<(dp2-dp)<<'\n';
cout<<"(int)cp-(int)cp2="<<((int)cp-(int)cp2)<<'\n';
cout<<"(int)dp2-(int)dp="<<((int)dp2-(int)dp)<<'\n';
getch();
}
/*
Adicion y Sustraccion :cp2=cp+1;dp2=dp+1;
cp2-cp=1
dp2-dp=1
(int)cp2-(int)cp=1
(int)dp2-(int)dp=8
Incremento y Decremento :
cp2=cp;dp2=dp;cp2--;cp2--;dp2++;dp2++;
cp-cp2=2
dp2-dp=2
(int)cp-(int)cp2=2
(int)dp2-(int)dp=16
*/
7. /*Programa que usa punteros a char, en este caso se trata de del
conocido
programa zodiaco */
#include<iostream.h>
#include<conio.h>
#define N 12
#include<stdlib.h>
#include<ctype.h>
char *nombre(int b);
int signo(int n,int m);
int meses[N]={31,28,31,30,31,30,31,31,30,31,30,31};
void main(){
int dd,mm,b;char rp; for(;;){
clrscr();
do{
Ing.DanielOsorioMaldonado Pgina5
UNI FIM
AREA ACADEMICA DE CIENCIAS BASICAS Y HUMANIDADES
COMPUTACION I
#include<iostream.h>
#include<conio.h>
void LeerABCD(float &a,float &b,float &c,float &d){
cout<<"Ingrese el valor de a = ";cin>>a;
cout<<"Ingrese el valor de b = ";cin>>b;
cout<<"Ingrese el valor de c = ";cin>>c;
cout<<"Ingrese el valor de d = ";cin>>d;
}
float MenABCD(float *x,float *y,float *z,float *w);
main(){
float a,b,c,d;
LeerABCD(a,b,c,d);
/*llama a la funcio Men_abc
y pasa la direccion del menor de a b y c*/
cout<<"el menor valor de "<<a<<' '<<b<<' '<<c<<"y "<<d<<" es:\n"
<<MenABCD(&a,&b,&c,&d);
//cout<<"\n y su direccion es:"<<&menor2;
Ing.DanielOsorioMaldonado Pgina6
UNI FIM
AREA ACADEMICA DE CIENCIAS BASICAS Y HUMANIDADES
COMPUTACION I
getch();
}
float MenABCD(float *x,float *y,float *z,float *w){
float menor,menor1,menor2;
if(*x<*y)
menor=*x;
else
menor=*y;
if(*z<menor)
menor1=*z;
else
menor1=menor;
if(*w<menor1)
menor2=*w;
else
menor2=menor1;
return(menor2);
}
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
main(){
int enteros[50],*punteros[50];
short i;
unsigned N;
int *aux;
system("cls");randomize();
cout<<"INTRODUCE el Numero N : ";
cin>>N;
for(i=0;i<N;i++)
enteros[i]=rand()%87;
for(i=0;i<N;i++)
punteros[i]=&enteros[i];
for(i=0;i<N-1;i++)
{
if((*punteros[i]>(*punteros[i+1])))
{ aux=punteros[i];
punteros[i]=punteros[i+1];
punteros[i+1]=aux;
i=-1;}
}
cout<<"\nLos Numeros Introducidos han sido :{";
for(i=0;i<N;i++)
cout<<' '<<enteros[i];
cout<<"}";
cout<<"\nEl Orden de los numeros es : {";
for(i=0;i<N;i++)
cout<<' '<<*punteros[i];cout<<"}";
getch(); }
/*INTRODUCE el Numero N : 5
Los Numeros Introducidos han sido :{ 44 54 46 18 23}
El Orden de los numeros es : { 18 23 44 46 54}
Ing.DanielOsorioMaldonado Pgina7
UNI FIM
AREA ACADEMICA DE CIENCIAS BASICAS Y HUMANIDADES
COMPUTACION I
randomize();
n=new int[100];
cout<<"ingrese el valor de M :" ; cin>>M;
for(i=0;i<M;i++)
n[i]=rand()%100;
for(int i=0;i<M;i++)
cout<<"\nValor del Item n["<<i<<"]="<<n[i]
<<"=>Direccion en memoria :" <<&n[i];
int N_Mayor=0;
int N_menor=99;
for(int i=0;i<M;i++) {
if(n[i]>N_Mayor)
N_Mayor=n[i];
if(n[i]<N_menor)
N_menor=n[i]; }
cout<<"\nEl mayor Valor es "<<N_Mayor<<endl
<<"El Menor Valor es "<<N_menor;
cout<<"\n\nAhora se Liberar la Memoria Reservada "<<endl;
delete []n;
getch();
}
#include<iostream.h>
#include<stdlib.h>
#include<conio.h>
main(){
float numcalif;
short i;
cout<<"Introduzca el Numero de calificaciones a procesar ";
cin>>numcalif;
for(i=0;i<numcalif;i++){
cout<<"Introduzca una Calificacion ";
cout<<i<<" : ";cin>>calif[i];}
cout<<"\nSe creo un arreglo para "<<numcalif<<" Numeros Reales \n";
cout<<"Los valores almacenados en el arreglo son : ";
for(i=0;i<numcalif;i++)
cout<<"\n "<<i<<": Nota "<<calif[i];
cout<<endl;
cout<<"La Suma y Promedio de las Notas : "; for(i=0;i<numcalif;i++)
S+=calif[i];
Promedio =S/numcalif;
cout<<"La Suma es "<<S<<"\nY el Promedio es "<<Promedio;
delete []calif;
//devuelve el espacio de //Almacenaje al montn
getch();}
PUNTEROSYARRAYS
Existe una gran relacin entre los punteros y los arrays estticos, ya
que en realidad estos ltimos son punteros encubiertos que apuntan al
elemento inicial del vector. Al declarar un vector, el nombre del
mismo es un puntero a vector[0]. Al apuntar a un vector podemos
utilizar sobre l las operaciones del apartado anterior:
int *p, a;
int vector[4]={ 5,6,1,4};
p = vector;
p[3] = 10; // escribimos 10 en vector[3]
(equivale a *(p+3)=10)
p++; // p apunta a vector[1]
Ing.DanielOsorioMaldonado Pgina8
UNI FIM
AREA ACADEMICA DE CIENCIAS BASICAS Y HUMANIDADES
COMPUTACION I
main() {
int v[4] = { 2,3,5,11}, a, *p;
p = v+2;
p--;
a = *p + *(p+1) + *(v+1) + p[2];
}
Ing.DanielOsorioMaldonado Pgina9