Вы находитесь на странице: 1из 10

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; 2. 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. NOTA: strlen(x) devuelve el nmero de caracteres de la cadena sin contar el carcter de fin de cadena (\0); char *cad1=abcdefghij; char *cad2=opqrs; // En total necesito reservar espacio para 16 caracteres (10 de cad1, 5 cad 2 y el // carcter de fin de cadena \0 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 *)

0 char * Dir 0xff04

1 char * Dir 0xff08 v

H 0 L A \0

C U R S O \0

(int)&v[1] - (int)&v[0]= 0xff08 - 0xff04 = 4 bytes

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++; Esta 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++; // S compila pero es semnticamente incorrecta(no incrementa el valor de la variable a la que apunta).

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) // == 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; /* puntero se declara como un puntero de tipo char, por lo tanto, almacenar la direccin de una variable de ese tipo. De hecho, en la propia declaracin se le asigna la direccin de memoria de la variable tipo char letra1. En otras palabras puntero apunta a letra1 */ letra1 = 'C'; letra2 = *puntero; /* como puntero apuntaba a letra1 y en la instruccin anterior hemos cambiado el valor de letra1 por C, entonces al dereferencia el puntero mediante el operador * estamos asignndole ese valor C a letra 2 */ Al final del programa letra1==C y letra2==C

13. Teniendo el cdigo.


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

Indicar cules de las siguientes asignaciones son incorrectas y podran producir errores:
letra = *puntero; letra = &letra; letra = &puntero; puntero = *puntero; puntero = *(&puntero); puntero = *letra; *puntero = letra; &puntero = letra;

14. Contenidos de letra1 y letra2 al final del cdigo? A quin apuntan los punteros al final?

char letra1 = 'A'; char letra2 = 'B'; char* puntero1 = &letra1; //el puntero1 apunta a letra1 char* puntero2 = &letra2; //el puntero2 apunta a letra2 puntero1 = puntero2; /* puntero1 apunta ahora a la misma variable a la que apunta puntero2, es decir, apunta a letra2 */ letra1 = 'C'; letra2 = 'D'; letra1 = *puntero1; /* puntero1 apunta a letra2; letra2 lo hemos cambiado en la instruccin anterior al valor D; por lo tanto le estoy asignado dicho valor a letra1. */

Al final, el valor de letra1==D y tambin el valor de letra2==D 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 El nombre del vector, cadena, es un puntero al primer elemento, por lo tanto almacenda la direccin de memoria que ocupa dicho elemento. Sumando a la direccin del primer carcter la posicin a la que quiero acceder me desplazo a dicha posicin. Slo queda derefenciar la nueva direccin mediante el operador de indireccin * 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

Al omitir los parntesis el operador de indireccin afecta todo el rato al nombre del vector, por lo tanto, recupera el carcter almacenado en la primera posicin. Al sumar un valor positivo a dicho carcter estamos modificando su cdigo ASCII, de tal modo que vamos asignando letras sucesivas a la primera letra del vector.

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; }

float media (float datos[], int N) { int *ptri; float suma=0; for (ptri=datos; ptri<datos+N; ptri++) suma = suma + *ptri; 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 int int int

y = 5; z = 3; *nptr; *mptr;

nptr=&y;

z=*nptr;

*nptr=*nptr+2;

a) mptr=nptr; b) mptr=&y;

mptr=&z;

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

*nptr++; 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; //ptri apunta a la variable entera a ptrf = &x; //ptrf apunta a la variable double x ptrf = ptri; // la asignacin de punteros slo es posible // entre punteros que apunten al mismo tipo base.

char *ptr; *ptr = a; // ptr est apuntando a un sitio desconocido de //la memoria porque no lo inicialic. Sera un puntero //salvaje, sin control

int n; int *ptr = &n; ptr = 9; /* estoy asignndole la direccin 9 de memoria al puntero, algo que no puedo hacer porque no s qu hay en la direccin 9; ni siquiera s si el sistema operativo me da acceso a esa direccin. En realidad, lo que se supone que se quera hacer era *ptr=9, es decir, asignarle 9 a n a travs del puntero ptr */

int *ptr = NULL; *ptr = 9; /* el puntero est inicializado a NULL y no a punta a ninguna variable concreta de la memoria. No se puede dereferenciar un puntero nulo */

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

El valor final de a es 15

20. Se 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; /* Alternativa 1 */ suma = 0; for (i=0 ; i<N ; i++) suma = suma + v[i]; //Utilizando notacin de vectores /* Alternativa 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 /* Alternativa 3 */ /* Inicializa los punteros si es necesario */ 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

Вам также может понравиться

  • 13
    13
    Документ1 страница
    13
    kyomich
    Оценок пока нет
  • SDN
    SDN
    Документ7 страниц
    SDN
    kyomich
    Оценок пока нет
  • 2018-2 Guia - Lab - 1-1 PDF
    2018-2 Guia - Lab - 1-1 PDF
    Документ9 страниц
    2018-2 Guia - Lab - 1-1 PDF
    Javier Cruz
    Оценок пока нет
  • Proyecto GOBE
    Proyecto GOBE
    Документ1 страница
    Proyecto GOBE
    kyomich
    Оценок пока нет
  • Circuito de Disparo
    Circuito de Disparo
    Документ3 страницы
    Circuito de Disparo
    kyomich
    Оценок пока нет
  • Conductor Es
    Conductor Es
    Документ24 страницы
    Conductor Es
    kyomich
    Оценок пока нет
  • Cronograma Matricula FIEE 20181
    Cronograma Matricula FIEE 20181
    Документ2 страницы
    Cronograma Matricula FIEE 20181
    kyomich
    Оценок пока нет
  • 1
    1
    Документ1 страница
    1
    kyomich
    Оценок пока нет
  • Caracteristicas Del FET 2018 I
    Caracteristicas Del FET 2018 I
    Документ4 страницы
    Caracteristicas Del FET 2018 I
    Esteban Dalas Leon
    Оценок пока нет
  • Material Es
    Material Es
    Документ1 страница
    Material Es
    kyomich
    Оценок пока нет
  • Limpieza
    Limpieza
    Документ16 страниц
    Limpieza
    kyomich
    Оценок пока нет
  • Paginas para Estudiar Urgente
    Paginas para Estudiar Urgente
    Документ1 страница
    Paginas para Estudiar Urgente
    kyomich
    Оценок пока нет
  • Lecture1A InternetofThings
    Lecture1A InternetofThings
    Документ108 страниц
    Lecture1A InternetofThings
    kyomich
    Оценок пока нет
  • Guía OTTO
    Guía OTTO
    Документ35 страниц
    Guía OTTO
    kyomich
    Оценок пока нет
  • A-Que Se Investiga-La Realidad
    A-Que Se Investiga-La Realidad
    Документ57 страниц
    A-Que Se Investiga-La Realidad
    kyomich
    Оценок пока нет
  • Acceso A Uno 440
    Acceso A Uno 440
    Документ70 страниц
    Acceso A Uno 440
    kyomich
    Оценок пока нет
  • Codigos Arduino Sensores
    Codigos Arduino Sensores
    Документ1 страница
    Codigos Arduino Sensores
    kyomich
    Оценок пока нет
  • Acceso A Uno Imag72
    Acceso A Uno Imag72
    Документ84 страницы
    Acceso A Uno Imag72
    kyomich
    Оценок пока нет
  • Completo Calculo Numerico I
    Completo Calculo Numerico I
    Документ2 страницы
    Completo Calculo Numerico I
    kyomich
    Оценок пока нет
  • Partes Electronicas de MARRTINO ROBOT
    Partes Electronicas de MARRTINO ROBOT
    Документ2 страницы
    Partes Electronicas de MARRTINO ROBOT
    kyomich
    Оценок пока нет
  • Codigos Arduino Sensores
    Codigos Arduino Sensores
    Документ1 страница
    Codigos Arduino Sensores
    kyomich
    Оценок пока нет
  • Horario 20181
    Horario 20181
    Документ11 страниц
    Horario 20181
    Heraldo Fortuna
    Оценок пока нет
  • Codigos Arduino Sensores
    Codigos Arduino Sensores
    Документ1 страница
    Codigos Arduino Sensores
    kyomich
    Оценок пока нет
  • Lima 2017
    Lima 2017
    Документ50 страниц
    Lima 2017
    kyomich
    Оценок пока нет
  • Previo 5 Tele
    Previo 5 Tele
    Документ2 страницы
    Previo 5 Tele
    kyomich
    Оценок пока нет
  • Sasdfs
    Sasdfs
    Документ2 страницы
    Sasdfs
    kona15
    Оценок пока нет
  • IF5.tele2 2016 2
    IF5.tele2 2016 2
    Документ5 страниц
    IF5.tele2 2016 2
    kyomich
    Оценок пока нет
  • IF2 Tele2
    IF2 Tele2
    Документ6 страниц
    IF2 Tele2
    kyomich
    Оценок пока нет
  • IF4TELE2
    IF4TELE2
    Документ7 страниц
    IF4TELE2
    kyomich
    Оценок пока нет
  • Tele 3 IF 1
    Tele 3 IF 1
    Документ5 страниц
    Tele 3 IF 1
    kyomich
    Оценок пока нет