Sie sind auf Seite 1von 12

UNIVERSIDAD POLITECNICA DE

VICTORIA

ALUMNO: MARIO ALFREDO AVALOS OLVERA


PROFESOR: ARTURO GUADALUPE MASCORRO CIENFUEGOS
MATERIA: ESTRUCTURA DE DATOS

1.-Declara una cadena de caracteres de nombre palindromo y asgnale la constante


literal
AEREA en la misma lnea de declaracin. Hazlo de dos maneras diferentes.
char
palndromo*+=AEREA;
char
*palndromo=AEREA;

1. Suponiendo que tienes dos cadenas de caracteres, cad1 y cad2 tales que
strlen(cad1)==10 y strlen(cad2)==5, indica cmo se declara una tercera cadena cad3
y se le asigna memoria dinmica (en el heap o montn) , teniendo en cuenta que
cad3 va a contener la concatenacin de cad1 y cad2 sin que sobre ninguna posicin
de memoria.
char *cad1=abcdefghij; char *cad2=opqrs;
char *cad3=new char[strlen(cad1)+strlen(cad2)+1];
strcpy(cad3,);
strcat(cad3,cad1);
strcat(cad3,cad2);
delete [] cad3;
3. Si tienes declarada e inicializada una cadena de caracteres cad, indica dos maneras de
leer o acceder al carcter de la primera posicin.
*cad
cad[0]
4. Si en un programa que funciona adecuadamente aparece la sentencia delete s;
podemos adivinar que s es un puntero a
a. Un char, un int, o cualquier otra variable de tipo simple
b. Una cadena de elementos char, int, o de cualquier otro tipo simple
c. Es imposible que s sea un puntero.
5. Cmo puedes averiguar lo que ocupa un puntero a un char en tu computadora y
usando tu compilador de C++?
sizeof (char *)

char *v[2];
cout<<Tamao del puntero: <<(int)&v[1]-(int)&v[0]<< bytes<<endl;
6. Si ptrLetra es un puntero a un char, qu hace la instruccin *ptrLetra++=3;? y la
instruccin (*ptrLetra)++=3;? son iguales?

*ptrLetra=3;
*ptrLetra++=3
ptrLetra++;
Est instruccin le asigna el cdigo ASCII 3 al carcter al que apunta el puntero ptrLetra
y a continuacin avanzan el puntero una posicin a la derecha.
(*ptrLetra)++=3 no compila, es semnticamente incorrecta. En C++ no es posible una
instruccin del tipo x++=3, siendo x una variable.
CONCLUSIN: evitar en la medida de lo posible hacer combinaciones de
operadores cuyo orden de evaluacin sea imprevisible.

7. Si quiero incrementar en una unidad el contenido de la variable a la que apunta un


puntero p, indica cules de las siguientes instrucciones seran vlidas:
*p = *p + 1;
*p += 1;
++*p;
*p++;

8. Utilizando la notacin de vectores puedes acceder a la quinta posicin (posicin 4, ya


que los ndices empiezan en 0) de un vector v mediante la expresin v[4]. Cmo haras
referencia a dicha posicin usando notacin y aritmtica de punteros?
*(v+4)
9. Dadas las siguiente declaraciones:

char *p; char c;


Indica de dos maneras diferentes cmo expresar en C++ cada una de las siguientes
comprobaciones, donde carcter nulo se refiere a la marca de fin de cadena:
Si c es el carcter nulo

if (!c)
if (c==\0)
Si p apunta a un carcter nulo
if (!*p)
if (*p==\0) // no es lo mismo que if (*p==0)
Si p es un puntero nulo
if (p==NULL)
if (!p)

10.
Indica los valores de las siguientes expresiones atendiendo a la disposicin del vector de
enteros lista que se representa en la figura:
lista[2] == 64
*(lista+3) == 33
&lista[1] == 1502
Lista == 1500
lista+2 == 1504

lista+1<&lista[1] == 1502<1502 == false


11. Crea una funcin para intercambiar dos nmeros enteros usando punteros equivalente
al paso mediante referencias de C++ que se indica. Para ello debes sustituir los
parmetros de entrada por punteros a enteros y cambiar el cdigo para adaptarlo a la
lgica de los mismos. Asimismo, indica cmo sera la llamada a la funcin para dos
variables enteras x e y.
int x=3, y=4;
intercambiar(x,y);
void intercambiar(int &a, int &b)
{
int temp=a;
a=b;
b=temp;
}

intercambiar(&x, &y)
void intercambiar(int *ptr_a, int *ptr_b)
{
int temp=*ptr_a;
*ptr_a=*ptr_b;
*ptr_b=temp;

}
12. Puedes averiguar qu hace el siguiente cdigo? Qu contendrn letra1 y letra2 tras
la ejecucin del cdigo?
char letra1 = 'A';
char letra2 = 'B';

char* puntero = &letra1;


letra1 = 'C';
letra2 = *puntero;

13. Teniendo el cdigo.


char letra = 'A';
char* puntero = &letra;

Indicar cules de las siguientes asignaciones son incorrectas y podran producir


errores:
Letra =&letra;
Letra = &punter;
Punteo=*punter
Punter=*letra
&punter=letra;

14. Contenidos de letra1 y letra2 al final del cdigo? A quin apuntan los punteros al
fina?
char letra1 = 'A';
char letra2 = 'B';
char* puntero1 = &letra1;
char* puntero2 = &letra2;
puntero1 = puntero2;
letra1 = 'C';
letra2 = 'D';
letra1 = *puntero1;

15. Indica los valores que tendrn al final de la ejecucin del siguiente cdigo las variables
letra1, letra2 y letra3 en cada caso.
a.
char* cadena = "Hola";
char letra0 = *cadena; // Asignando H a letra0
char letra1 = *(cadena+1); // Asignando o a letra1
char letra2 = *(cadena+2); // Asignando l a letra2
char letra3 = *(cadena+3); // Asignando a a letra3

b.
char* cadena = "Hola";
char letra0 = *cadena; // Asignando H a
char letra1 = *cadena+1; // Asignando I
char letra2 = *cadena+2; // Asignando J
char letra3 = *cadena+3; // Asignando K

letra0
(H+1) a letra1
(H+2) a letra2
(H+3) a letra3

16. Reescribe el siguiente programa para calcular la media aritmtica de un vector de N


valores reales mediante notacin y aritmtica de punteros:
float media (float datos[], int N)
{
int i;
float suma = 0;
for (i=0; i<N; i++)
suma = suma + datos[i];
return suma/N;
}

17. Representa mediante instrucciones lo que se representa en las figuras del estado de
memoria teniendo en cuenta las siguientes declaraciones de partida que se
corresponden con la primera instantnea. Todas los cambios de valor de las variables y
y z deben realizarse mediante punteros, siempre que se pueda. Si para un mismo estado
se te ocurren varias posibilidades indcalas como otras alternativas:
int y = 5; int z = 3; int
*nptr; int *mptr;

nptr=&y;
z=*nptr;
*nptr=*nptr+2;
mptr=&z;

a) z=*nptr;
b) *mptr=*nptr;
c) *mptr+=2;
a) ++*nptr;
b) *nptr=*nptr+1;
c) *nptr+=1;

18.-Aqu tienes algunos cdigos que presentan errores. Trata de


identificarlos y explica el motivo del error:
int a = 10;
int *ptri = NULL;
double x = 5.0;
double *ptrf = NULL;
ptri = &a;
ptrf = &x;
ptrf = ptri;
char *ptr;
*ptr = a;
El puntero esta hacienda referencia a un
sistio desconocido de la memoria
int n;
int *ptr = &n;
ptr = 9;

int *ptr = NULL;


*ptr = 9;

19. Qu valor tendr la variable a tras la ejecucin de este programa?


main ()
{
int
int
p =
q =
a =
a =
}

a = 5; // a vale 5
*p; int **q;
&a; // p apunta a la variable a
&p; // q apunta a p
*p*2+**q;
5*2+5=15

20.-pretende desarrollar tres fragmentos de cdigo que sumen los


elementos de un vector de enteros v de diferentes maneras. Completa
dicho cdigo siguiendo las instrucciones de los comentarios:
int i, suma;
int *ptr, *ptrfin;

/*
Alternati
va 1 */
suma = 0;
for (i=0 ; i<N ; i++)
suma = suma + v[i]; //Utilizando notacin de
vectores

/*
Alternati
va 2 */
suma = 0;
for (i=0 ; i<N ; i++)
suma = suma + *(v+i) ; //Utilizando notacin de
punteros //pero sin
echar mano de ptr ni
//ptrFin
suma = 0;
ptr=v;
ptrfin = ptr + N; //Completa la expression para que
//ptrFin apunte al ltimo
elemento
//del vector
for (ptr=v ; ptr<ptrfin ; ptr++) //Completa la
condicin
suma = suma + *ptr;
//del bucle

Das könnte Ihnen auch gefallen