Está en la página 1de 6

UNIVERSIDAD NACIONAL AUTÓNOMA DE HONDURAS

FACULTAD DE CIENCIAS
ESCUELA DE MATEMÁTICAS Y CIENCIAS DE LA COMPUTACIÓN
DEPARTAMENTO DE MATEMÁTICS APLICADA
MM-314 PROGRAMACION SECCIONES 1400 Y 1700
I PAC 2020
TAREA No. 3
CUESTIONARIO
1. ¿Qué es la dirección de una variable?
R/ Es la localidad que ocupa en memoria
2. ¿El programador puede asignar la dirección a las variables de un programa?
R/ No, en el momento que se hace la declaración de las variables el sistema asigna la
localidad que ocupara la variable en la memoria.

3. ¿Qué es un apuntador o puntero?


R/ Un apuntador o puntero es un tipo de variable que almacena direcciones de otras
variables del tipo que se le especifique.

4. ¿Cuál es la utilidad de los apuntadores en el lenguaje de programación C++?


R/ Los apuntadores permiten pasar argumentos por referencia a una función, evitando
de esta manera hacer una copia de los valores. Además por medio de ellos se pueden la
crear y manipular estructuras de datos dinámicas.
5. ¿Qué almacena una variable apuntador?
R/ Las variables apuntador almacenan direcciones de variables.
6. ¿Qué tipo de dato numérico almacena un apuntador?
R/Los apuntadores almacenan números hexadecimales ya que con este tipo de números
se representan las localidades o direcciones de las variables.
7. ¿Cómo se declara un apuntador en el lenguaje C++?
R/Para declarar un apuntador en C++ primero se escribe el tipo de variable del que se
almacenará la dirección luego el nombre de la variable apuntador precedido por un
asterisco: Tipodevariablequesealmacenarádirección *nombredevariableapuntador;
Un excelente consejo para los programadores es escribir el prefijo ptr a los nombres de
las variables apuntadores para diferenciarlas de las variables comunes.
8. ¿Cómo se interpreta la instrucción float *ptrX;?
R/ptrX es una variable apuntador que almacena direcciones de variables de tipo float.
9. ¿Cómo se interpretan las instrucciones int *ptrX=NULL; int *ptrY =0;?
R/Tanto ptrX como ptrY son variables apuntadores que almacenan direcciones de
variables de tipo entero; en ambos casos están inicializadas en cero y se dice que no
apuntan a una variable (apuntan a nada). NULL es una constante que representa el valor
cero, por lo tanto ambas declaraciones son equivalentes.
10. ¿Cómo se puede escribir la dirección de una variable?
R/ La dirección de una variable se puede escribir mediante la instrucción:
cout<<&nombredevariable;
UNIVERSIDAD NACIONAL AUTÓNOMA DE HONDURAS
FACULTAD DE CIENCIAS
ESCUELA DE MATEMÁTICAS Y CIENCIAS DE LA COMPUTACIÓN
DEPARTAMENTO DE MATEMÁTICS APLICADA
MM-314 PROGRAMACION SECCIONES 1400 Y 1700
I PAC 2020
11. ¿Cuál es el operador de dirección?
R/ El operador de dirección es el et (ampersand en inglés): &
12. ¿Cuál es la instrucción que hace que el apuntador int *ptrN; “apunte” a la variable int
N?
R/ ptrN=&N;
13. ¿Cuál es el operador de indirección?
R/ El operador de indirección o desreferencia es el asterisco: *
Este operador es exclusivo para apuntadores.
14. Dada la instrucción int Edad = 25, *ptrEdad=&Edad; ¿Qué escribe la siguiente
instrucción: (En caso de haber un error, justifique)
a) cout<< ptrEdad; //Valor de ptrEdad, direccion de la variable Edad
b) cout<< Edad; //Valor de la variable Edad, 25
c) cout<< &ptrEdad;//Dirección de la variable ptrEdad
d) cout<< &Edad;//Dirección de la variable Edad
e) cout<< *ptrEdad;//El valor de la dirección almacenada en ptrEdad, es decir
25 porque ptrEdad tiene almacenada la dirección de Edad
f) cout<< *Edad;// Esta instrucción produce un error porque el operador de
indirección * no se puede aplicar a una variable común, es un operador
exclusivo para variables apuntadores.
g) cout<< &*ptrEdad;//Esta instrucción es equivalente a cout<< ptrEdad;
porque los opeadores & y * son inverso uno del otro.
h) cout<< &*Edad;// Está instrucción produce un error, ver inciso f)
i) cout<< *&ptrEdad; ;//Esta instrucción es equivalente a cout<< ptrEdad;
porque los opeadores & y * son inverso uno del otro.
j) cout<< *&Edad; ;//Esta instrucción es equivalente a cout<< Edad; porque los
opeadores & y * son inverso uno del otro. Y los operadores se asocian (o se
ejecutan) de izquierda a derecha.
15. ¿Qué devuelve el operador sizeof y como se implementa?
R/ El operador sizeof devuelve el número de byte que se necesitan para almacenar una
variable según sea su tip. Su uso es sencillo, se escribe el operador seguido del nombre
de la variable o se escribe el operador seguido del tipo de dato entre paréntesis Como
es un operador se escribe
16. ¿Qué es un byte?
R/ Es la unidad fundamental de almacenamiento utilizada en las computadoras, y
equivale a un conjunto ordenado de bits (dígitos binarios: 1 y 0). Generalmente un byte
está formado por 8 bits.
17. ¿Cuántos byte se necesitan para almacenar un tipo de dato: char, short, int, float,
double?
UNIVERSIDAD NACIONAL AUTÓNOMA DE HONDURAS
FACULTAD DE CIENCIAS
ESCUELA DE MATEMÁTICAS Y CIENCIAS DE LA COMPUTACIÓN
DEPARTAMENTO DE MATEMÁTICS APLICADA
MM-314 PROGRAMACION SECCIONES 1400 Y 1700
I PAC 2020

Tamaños de los tipos de datos en C en la plataforma Linux/Intel i686

Tipo Tamaño (bytes)


char, unsigned char, bool 1
short int, unsigned short int 2
int, unsigned int, long int, unsigned long
4
int
float 4
double 8
long double 12

18. Sea la declaración int x, *ptrx=&x, ¿ptrx almacena la dirección de los 4 bytes que ocupa
x en la memoria? Explique su respuesta.
R/ No, ptrx almacena solamente la dirección del primer byte de los 4 que se requieren
para almacenar el valor entero de x.
19. Dada la instrucción int Edad[ 7]; ¿Cuál es la salida de cout<< sizeof Edad;?
R/ La salida es 28, dado que Edad es un conjunto de 7 números enteros y cada entero
requiere 4 bytes, 7x4 = 28.
20. ¿Cuál es la relación entre los nombres de los arreglos y los apuntadores?
R/ Los nombres de los arreglos son apuntadores constantes que almacenan la dirección
del primer elemento del arreglo.
21. ¿Qué es un apuntador constante?
R/ Es una variable que almacena siempre la misma dirección, no puede ser modificdo.
22. Dado la instrucción int Num[10], *ptrNum; ¿Cuál es la diferencia entre ptrNum=Num; y
ptrNum=&Num[0];?
R/ Las instrucciones son equivalentes, en ambas ptrN almacena la dirección del primer
elemento de Num
Notas:
 Un número hexadecimal se escribe como una combinación de los dígitos de su base:
{0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f}
 Por comodidad usaremos los números hexadecimales, direcciones (localidades de
memoria), iniciando con dos dígitos literales seguidos de tres dígitos numéricos, por
ejemplo cb700, fa126, bd049
 Por comodidad en las pruebas de escritorio romperemos la secuencia de los
números hexadecimales, tal como lo aplica el libro de texto. Por ejemplo
UNIVERSIDAD NACIONAL AUTÓNOMA DE HONDURAS
FACULTAD DE CIENCIAS
ESCUELA DE MATEMÁTICAS Y CIENCIAS DE LA COMPUTACIÓN
DEPARTAMENTO DE MATEMÁTICS APLICADA
MM-314 PROGRAMACION SECCIONES 1400 Y 1700
I PAC 2020
aceptaremos la secuencia fd468, fd469, fd470, fd471, fd472, .. en vez de
fd468,fd469, fd46a, fd46b, fd46c, …
 Al ejecutar un programa en el lenguaje de programación las direcciones se escriben
respetando la secuencia de los números hexadecimales con un prefijo que identifica
el sistema de numeración utilizado.
 En el texto puede consultar el Apéndice C Sistemas Numéricos si desea estudiar
sobre el sistema de numeración hexadecimal.

23. Dada la instrucción int Num[10]={2,4,6,8,0,9,7,5,3,1}, *ptrNum= Num; y asuma que la


dirección de Num[0] es fe300¿Qué escribe la siguiente instrucción: (En caso de haber un
error, justifique)
a) cout<< ptrNum; // fe300
b) cout<< ptrNum++;//fe304
c) cout<< (ptrNum+5);//fe324
d) cout<< ptrNum[2];//8
e) cout<< ptrNum--;//fe300
f) cout<< *ptrNum;//2
g) cout<< Num;//fe300
h) cout<< Num++;// Error Num es un apuntador constante, no se puede
incrementar.
i) cout<< (Num+5);//fe320
j) cout<< Num[2];//6
k) cout<< Num--;//Error Num es un apuntador constante, no cambia su valor.
l) cout<< *Num;//2
UNIVERSIDAD NACIONAL AUTÓNOMA DE HONDURAS
FACULTAD DE CIENCIAS
ESCUELA DE MATEMÁTICAS Y CIENCIAS DE LA COMPUTACIÓN
DEPARTAMENTO DE MATEMÁTICS APLICADA
MM-314 PROGRAMACION SECCIONES 1400 Y 1700
I PAC 2020
24. ¿Cuál es la salida del siguiente programa? Haga la prueba de escritorio
#include <iostream>
#include <iomanip>
using namespace std;

#define max 5
int main(int argc, char *argv[])
{ int A[max]={5,10,15,20,25}, *ptrA=A;
cout<<endl<<endl;
for(int i=0; i<max; i++)
{ cout<<setw(10)<<ptrA<<setw(10)<<*ptrA<<endl;
ptrA++; }
cout<<endl<<endl;
for(int i=0; i<max; i++)
{ cout<<setw(10)<<A+i<<setw(10)<<*(A+i)<<endl; }
cout<<endl<<endl;
ptrA=A;
for(int i=0; i<max; i++)
cout<<setw(10)<<ptrA+i<<setw(10)<<*(ptrA+i)<<endl;
cout<<endl<<endl;
for(int i=0; i<max; i++)
cout<<setw(20)<<ptrA[i]<<endl;
return 0; }

R/ Prueba De Escritorio.

MEMORIA

NOMBRE A DIRECCIÓN db310 ca200 ca200 ca300


DIRECCIÓN fe300 fe304 fe308 fe312 fe316 NOMBRE ptrA i i max
POSICIÓN [0] [1] [2] [3] [4] fe300 0 0 5
5 10 15 20 25 fe304 1 1
fe308 2 2
fe312 3 3
fe316 4 4
fe320 5 5
fe300 0 0
1 1
2 2
3 3
4 4
5 5
UNIVERSIDAD NACIONAL AUTÓNOMA DE HONDURAS
FACULTAD DE CIENCIAS
ESCUELA DE MATEMÁTICAS Y CIENCIAS DE LA COMPUTACIÓN
DEPARTAMENTO DE MATEMÁTICS APLICADA
MM-314 PROGRAMACION SECCIONES 1400 Y 1700
I PAC 2020
SALIDA
fe300 5
fe304 10
fe308 15
fe312 20
fe316 25

fe300 5
fe304 10
fe308 15
fe312 20
fe316 25

fe300 5
fe304 10
fe308 15
fe312 20
fe316 25

5
10
15
20
25

También podría gustarte