Sei sulla pagina 1di 5

1) C Y C++ distinguen declaraciones y definiciones. ¿qué es una distinción?

Dar un ejemplo
para cada una de ellas.

¿qué es una distinción?

Una distinción puede hacer referencia a la acción y al resultado de diferenciar una cosa material
o inmaterial de otra.

Distinción 1: La extensión del archivo


Los archivos de C se guardan con extensión c, ejemplo practica.c mientras que los archivos
de C++ se guardan con extensión cpp (c plus plus), ejemplo practica.cpp.
Distinción 2: Operadores lógicos
Los conocidos operadores lógicos AND, OR y NOT pueden ser utilizados como palabras en
el lenguaje C++ o como operadores, mientras que en C deben utilizarse únicamente los
operadores &&, || y ! En lenguaje C sería:
1 if ( ( a == b ) || ( a == c) )
2{
3 ...
4}
Mientras que en lenguaje C++ el anterior es válido, pero también es válido:
1 if ( ( a == b ) or ( a == c) )
2{
3 ...
4}

Distinción 3: Los flujos de entrada y salida


En C se utilizan las funciones printf y scanf para los flujos IO (input/output), mientras que
en C++ se utiliza cout y cin En lenguaje C sería:
Mientras que en lenguaje C++ sería:

Distinción 4: Uso de clases

En el paradigma de programación orientada a objetos, se hace uso de Clases, y el lenguaje


C no tiene soporte para ello, pero C++ si lo tiene.

Distinción 5: Las bibliotecas

Las bibliotecas en C terminan con h (son headers). Esas mismas bibliotecas sirven para C++
pero por convención, se elimina la terminación ‘.h’ y mejor se agrega ‘c’ al principio.

En C En C++

math.h cmath

time.h ctime

2)
3) Investigar qué tipos de datos de hardware existen en un computador y que operaciones se
pueden ejecutar con ellos.

El Hardware es el conjunto de partes físicas que componen a los dispositivos informáticos y


que permiten que el sistema de cómputo funcione y además complemente a las actividades
principales.

Un sistema informático se compone de una unidad central de procesamiento (UCP o CPU),


encargada de procesar los datos, uno o varios periféricos de entrada, los que permiten el
ingreso de la información.
Tipos de datos:
a. Unidad aritmético lógica (UAL), Arithmetic Logic Unit (ALU): Lleva a cabo las operaciones
aritméticas y lógicas.
b. Unidad de control: históricamente definida como una parte distinta del modelo de
referencia de 1946, de la Arquitectura de von Neumann. En diseños modernos de
computadoras, la UC es típicamente una parte interna de la CPU y fue conocida
primeramente como arquitectura Eckert-Mauchly.
c. Memoria: Almacena datos y programas.
d. Dispositivos de entrada y salida: Alimentan la memoria con datos e instrucciones, y entregan
los resultados del cómputo almacenados en memoria.
e. Buses: Proporcionan un medio para transportar los datos e instrucciones entre las distintos
y pequeños que la memoria principal (los registros), constituyen la CPU (Central Processing
Unit).

4) Explicar con detalle cómo es la programación con punteros.

Los punteros son de amplia utilización en programación y muchos lenguajes permiten la


manipulación directa o indirecta de los mismos.
Su razón de ser, reside en manejar datos alojados en la zona de memoria dinámica, bien
sean datos elementales u objetos pertenecientes a una clase.
Un puntero o apuntador es una variable que referencia una región de memoria; en otras
palabras, es una variable cuyo valor es una dirección de memoria. Si se tiene una variable p
de tipo puntero que contiene una dirección de memoria en la que se encuentra almacenado
un valor v se dice que p apunta a v. El programador utilizara punteros para guardar datos
en memoria en muchas ocasiones.
Trabajar con punteros implica la no manipulación de los datos en si, sino manejar las
direcciones de memoria en las cuales residen.
 Ejemplo:

int variable; //Creamos un entero


int * apuntador = &variable;//Creamos un apuntador a la posición en memoria de "variable"
*apuntador = 20; //Le asignamos un valor a esa posición de memoria.

delete [] apuntador; //Después de operar con punteros es necesario liberar la memoria.


puntero = NULL;
Explicación:
 El tipo de dato del apuntador debe coincidir con el de la variable cuya posición en
memoria apuntan. En el ejemplo vemos que tanto variable como apuntador son
enteros.
 Siempre que queremos usar el apuntador debemos anteponer el asterisco (*) para
indicar que usaremos el valor en la posición de memoria apuntada.
 De no usar el asterisco el comportamiento sería impredecible. Estaremos haciendo
uso de la dirección de memoria más no del valor almacenado en ésta.
 Después de usar un puntero, especialmente si trabajamos con arreglos o matrices,
es MUY recomendable liberar la memoria utilizada con la función delete (tal como
en el ejemplo).
 Un puntero o apuntador puede ser de cualquier tipo de dato, inclusive los podemos
usar con tipos complejos
5) Investigar sobre el uso de la memoria en el lenguaje de programación java.
Un lenguaje de programación puede causar vulnerabilidades en las aplicaciones, las
comunicaciones o en la integridad de datos. Prácticamente todos estos problemas están
relacionados con el acceso a memoria. Para solucionar estos problemas el lenguaje Java se
diseñó eliminando algunas características presentes en otros lenguajes de programación
como C++ (que es del que se partió para el diseño inicial) y añadiendo otras.
- Algunos de los métodos incorporados al lenguaje Java para corregir los problemas
relacionados con los accesos a memoria ilegales son:

 Eliminación de la aritmética con punteros. Java la elimina por completo la


aritmética con punteros, que es una de las mayores fuentes de accesos ilegales a
memoria en otros lenguajes. De cualquier forma, esto no quiere decir que Java no
disponga de la noción de puntero, la incluye dándole el nombre de referencia.
Usando referencias podemos definir estructuras dinámicas complejas como listas,
colas, árboles, etc. igual que en otros lenguajes.
 Comprobación de rangos en el acceso a vectores. En Java se controlan todos los
accesos a vector y se lanza una excepción cuando intentamos un acceso fuera de
rango. En los lenguajes que esto no se hace, el programador puede acceder a
memoria que está más allá de la reservada para el vector y modificar valores de
otras variables de forma no controlada. De hecho, el intentar provocar estas salidas
de rango en los buffers empleados en las aplicaciones es uno de los sistemas
empleados para romper la seguridad de los programas.
 Definición del comportamiento de las variables sin inicializar. En otros lenguajes
los valores de las variables no inicializadas están indeterminados, por lo que si
accedemos a ellas antes de darles un valor podemos obtener resultados
impredecibles. Esto en Java no es así, toda la memoria del heap se inicializa
automáticamente, y la memoria de la pila, que es la que emplean las variables
locales, debe ser inicializada por el programador (si en un programa se intenta usar
una variable local antes de asignarle un valor el compilador genera un error).
 Eliminación de la liberación de memoria controlada directamente por el
programador. En otros lenguajes, cuando un objeto creado dinámicamente deja de
ser necesario el responsable de liberar la memoria que tiene asignada es el
programador. Es evidente que, de algún modo, es obligatorio el liberar la memoria,
ya que, si no lo hacemos, nuestra aplicación consumiría mucha más de la necesaria
en un momento dado. El problema de esta liberación es que nos podemos
equivocar y liberar objetos que aun necesitamos (con lo que, al acceder a ellos, ya
no están y leemos datos de otros objetos o simplemente basura) e incluso intentar
liberar más de una vez la misma memoria (según el lenguaje, compilador y sistema
esto puede liberar memoria empleada por otros objetos, causar la muerte del
programa, etc.). Java elimina este problema no proporcionando funciones de
liberación de memoria; cuando las variables u objetos ya no son referenciadas la
memoria que ocupan es liberada por un sistema de recolección de basura
automático (garbage collection), que es parte del sistema de ejecución.
- Además de lo anterior también se deben mencionar otras características del lenguaje
que contribuyen a escribir código seguro como:

o El sistema de verificación de tipos en tiempo de compilación, que garantiza que las


variables son de los tipos correctos.
o Los niveles de acceso a los miembros de las clases, que permite controlar la
visiblidad de atributos y métodos.
o El modificador final, que permite impedir que se definan subclases cuando se aplica
a una clase o que se puedan redefinir atributos cuando se les aplica a ellos.
6) Proporcione un ejemplo de cómo usar malloc, calloc y free en el LP C.

Potrebbero piacerti anche