PDF de programación - Comparación de los lenguajes de programación C y C++ como herramienta docente

Imágen de pdf Comparación de los lenguajes de programación C y C++ como herramienta docente

Comparación de los lenguajes de programación C y C++ como herramienta docentegráfica de visualizaciones

Actualizado el 21 de Marzo del 2018 (Publicado el 14 de Marzo del 2018)
633 visualizaciones desde el 14 de Marzo del 2018
391,7 KB
37 paginas
Creado hace 11a (29/01/2013)
Comparaci´on de los lenguajes de Programaci´on C

y C++ como Herramienta Docente

Vicente Benjumea

Manuel Rold´an

Resumen

Este documento presenta una comparaci´on entre las primitivas proporcionadas

por los lenguajes C y C++, utilizadas como soporte para la docencia de los con-
ceptos fundamentales de la programaci´on. Nuestra intenci´on no es hacer una
comparativa general entre ambos lenguajes, sino ´unicamente repasar aquellos el-
ementos comunes que pueden ser utilizados en un curso b´asico de programaci´on.
Como resultado del estudio, pensamos que, en general, cuando el objetivo de un
curso no es el estudio del lenguaje C, es m´as adecuado plantear un primer curso
de programaci´on sobre la base de C++ que sobre C.

El estudio de arrays siempre es parte importante de cualquier primer curso
inicial de programaci´on. Tradicionalmente este aspecto ha sido tratado (tanto en
C como en C++) mediante arrays predefinidos. Sin embargo, desde el est´andard
C++11 (previamente en TR1 ), C++ dispone de un tipo array que pensamos
que aporta numerosas ventajas docentes sobre el uso tradicional de arrays pre-
definidos. Discutimos las caracter´ısticas de cada uno y analizamos ventajas e
inconvenientes de cada enfoque.

Nota: en todo el texto, salvo que se especifique lo contrario, se hace referen-

cia a ANSI-C (C89).

´Indice

1. Definici´on de Constantes

2. Definici´on de Variables

3. Control de Ejecuci´on

4. Conversiones de Tipos (castings)

5. Entrada y Salida de Datos

6. Definici´on de Tipos

7. Subprogramas: Paso de Par´ametros

8. El Tipo Puntero y la Gesti´on de Memoria Din´amica

9. Conclusi´on

A. Problemas del uso de printf y scanf: un ejemplo

2

3

4

5

6

11

19

27

34

35

Este obra est´a bajo una licencia Reconocimiento-NoComercial-CompartirIgual 3.0 Un-
ported de Creative Commons: No se permite un uso comercial de la obra original ni
de las posibles obras derivadas,
la distribuci´on de las cuales se debe hacer con una li-
cencia igual a la que regula la obra original. Para ver una copia de esta licencia, visite
http://creativecommons.org/licenses/by-nc-sa/3.0/deed.es ES o envie una carta a Creative Com-
mons, 171 Second Street, Suite 300, San Francisco, California 94105, USA.

1

1. Definici´on de Constantes

En el ´ambito de la enze˜nanza de la programaci´on, es conveniente transmitir
la importancia del uso de constantes simb´olicas en los programas, evitando en la
medida de los posible el uso de constantes literales. A continuaci´on analizamos
las posibilidades que ofrecen C y C++ para ello.

1.1. Definici´on de constantes en C utilizando el preproce-

sador

En C se pueden definir constantes mediante directivas para el preprocesador.
Como consecuencia, puede ocurrir que el valor asociado al s´ımbolo a expandir
dependa del contexto en el que expande. Por ejemplo, consideremos las siguientes
constantes:

#define PI
#define CONSTANTE1 10
#define CONSTANTE2 20
#define CONSTANTE3 CONSTANTE1 + CONSTANTE2

3.1415

En este caso la interpretaci´on del s´ımbolo CONSTANTE3 no es ´unica y depende
del contexto en que se expanda dentro del programa. Por ejemplo, supongamos
que en la siguiente sentencia queremos almacenar en la variable v la mitad del
valor asociado al s´ımbolo CONSTANTE3:

int v = CONSTANTE3 / 2 ;

Aunque aparentemente la expresi´on utilizada para ello es correcta, en realidad
es err´onea, ya que una vez que el procesador expande el s´ımbolo, la precedencia
de los operadores hace que el resultado no sea el previsto y en realidad la vari-
able v almacena el valor 20, resultante de evaluar la expresi´on 10 + 20 / 2.
El mecanismo utilizado para definir las constantes nos ha inducido a un error
dif´ıcil de detectar, ya que nos encontramos con una expresi´on final que en rea-
lidad est´a formada por diferentes partes especificadas en puntos diferentes del
programa. Obviamente, este problema se puede solucionar incluyendo par´entesis
en la definici´on de la constante.

#define CONSTANTE3 (CONSTANTE1 + CONSTANTE2)

Sin embargo, debemos ser conscientes de que la utilizaci´on del preprocesador
para definir constantes simb´olicas conlleva la posibilidad de introducir errores
inesperados y dif´ıciles de detectar, especialmente en un contexto de aprendizaje
de la programaci´on.

1.2. Definici´on de constantes en C utilizando enumera-

ciones

Tambi´en es posible definir constantes de tipo entero (int) utilizando enu-

meraciones:

enum {

CONSTANTE1 = 10,
CONSTANTE2 = 20,
CONSTANTE3 = CONSTANTE1 + CONSTANTE2

} ;

2

y utilizar dichas constantes con los valores adecuados.

int v = CONSTANTE3 / 2 ;

Sin embargo, este mecanismo s´olo es adecuado para definir constantes de tipo
entero (int), no pudiendo ser utilizada para definir constantes de otros tipos,
especialmente de coma flotante.

1.3. Definici´on de constantes en C utilizando const

Finalmente, es posible definir variables inmutables utilizando la palabra

reservada const.

const int CONSTANTE1 = 10 ;
const int CONSTANTE2 = 20 ;
const int CONSTANTE3 = CONSTANTE1 + CONSTANTE2 ;

int v = CONSTANTE3 / 2 ;

Aunque son constantes en el sentido de que no es posible alterar su valor
durante la ejecuci´on del programa, no son constantes desde el punto de vista del
compilador y por lo tanto no pueden ser utilizadas para aquellas circunstancias
donde sea necesaria una constante simb´olica definida en tiempo de compilaci´on
(por ejemplo no son v´alidas para definir tama˜nos de arrays). Lo siguiente ser´ıa
incorrecto:

const int TAM = 10 ;
int v[TAM] ;

1.4. Definici´on de constantes en C++

En C++ es posible definir constantes simb´olicas de diversos tipos utilizan-
do la palabra reservada const. Los valores de estas constantes simb´olicas son
conocidos por el compilador en Tiempo de Compilaci´on y pueden ser utilizadas
en cualquier ´ambito en el que sean necesarias.

const double PI = 3.1415 ;

const int CONSTANTE1 = 10 ;
const int CONSTANTE2 = 20 ;
const int CONSTANTE3 = CONSTANTE1 + CONSTANTE2 ;

int v = CONSTANTE3 / 2 ;

2. Definici´on de Variables

2.1. Definici´on de variables en C

En C, las variables se deben definir en una zona al comienzo de cada bloque,
y no pueden mezclarse con las sentencias ejecutables.1 As´ı mismo, tambi´en es
posible inicializar las variables en el lugar en que son definidas.

int main()
{

int x, y ;
int z = 5 ;

scanf(" %d", &y) ;
x = y * z ;

}

1Sin embargo, en C99 si es posible entremezclar definici´on de variables y sentencias eje-

cutables.

3

2.2. Definici´on de variables en C++

En C++, las variables se pueden definir en cualquier parte del bloque, pu-
diendo mezclarse con las sentencias ejecutables, de hecho, se consideran tambi´en
sentencias ejecutables (invocaci´on al constructor). Esto aumenta la localidad del
c´odigo, permite declarar las variables en el punto m´as cercano al lugar de su uti-
lizaci´on, y permite declarar e inicializar las variables con los valores adecuados,
en vez de realizar una declaraci´on de la variable sin inicializar.

int main()
{

int z = 5 ;
int y ;
cin >> y ;
int x = y * z ;

}

3. Control de Ejecuci´on

3.1. Estructuras de control en C y C++

Aunque ambos lenguajes disponen de otras estructuras de control de la eje-
cuci´on, en el contexto del aprendizaje de programaci´on en un ´ambito acad´emi-
co, basado en un enfoque de dise˜no descendente, abstracci´on procedimental y
programaci´on estructurada, s´olo consideraremos las siguientes estructuras de
control:

Secuencia: Un bloque determina un secuencia de sentencias ejecutables.
Las sentencias se ejecutan secuencialmente.

int main()
{

int x, y = 4 ;
int z = 5 ;

x = y * z ;
z = z + x ;

}

Selecci´on: Seleccionan la ejecuci´on de determinados bloques de senten-
cias, dependiendo del estado de la computaci´on en un momento determi-
nado.

if :

int main()
{

int x = 3, y = 5 ;
if (x > y * 2) {

x = y + 2 ;
y = 0 ;

} else if (x > y) {

x = 0 ;

} else {

y = 0 ;
++x ;

}

}

switch:

int main()
{

int x = 4 ;
switch (x * 3) {
case 0:

x += 2 ;
++x ;
break ;

case 18:
case 21:

--x ;
break ;

default:

x *= 5 ;
break ;

}

}

4

Iteraci´on: Repite la ejecuci´on de un bloque de sentencias, dependiendo
del estado de la computaci´on en un momento determinado.

for:

int main()
{

int s = 0 ;
int i ;
for (i = 0 ; i < 10 ; ++i) {

s += i ;

}

}

while:

int main()
{

int s = 0 ;
int i = 0 ;
while (i < 10) {

s += i ;
++i ;

do-while:

int main()
{

int s = 0 ;
int i = 0 ;
do {

s += i ;
++i ;

}

}

} while (i < 10) ;

}

3.2. Caracter´ısticas propias de C++

La ´unica diferencia significativa que introduce C++ respecto a C en este
aspecto es que permite definir la variable de control del bucle for dentro de
la propia definici´on del bucle (en cuyo caso su ´ambito de vida se restringe al
propio bucle donde est´a definida), aumentando as´ı la localidad y simplificando
la estructura (este mecanismo tambi´en ha sido incorporado a C99 ).

int main()
{

int s = 0 ;
for (int i = 0 ; i < 10 ; ++i) {

s += i ;

}

}

4. Conversiones de Tipos (castings)

4.1. Conversiones de tipos en C

En C, la conversi´on de tipos se realiza mediante el operador prefijo de casting,
donde se especifica entre par´entesis el tipo destino al que se quiere convertir
una determinada expresi´on, seguida por la expresi´on cuyo resultado quiere ser
convertida. Por ejemplo:

int main()
{

int x = (int)3.1415 ;

}

Hay que tener presente que la precedencia del operador de casting es la segunda
m´as alta (por debajo del operador punto e indexaci´on), por lo que resulta f´acil
introducir errores inesperados. Por ejemplo:

int main()
{

double pi = 3.1415 ;
int x = (int)pi+0.5 ;

}

en lugar de:

int main()
{

double pi = 3.1415 ;
int x = (int)(pi+0.5) ;

}

5

4.2. Conversiones de tipos en C++

En C++, la conversi´on de tipos se realiza mediante el operador prefijo de
casting, donde se especifica el tipo destino al que se quiere convertir una de-
terminada expresi´on, seguida por la expresi´on entre par´entesis cuyo resultado
quiere ser convertida. De esta forma, se evitan los posibles problemas derivado
  • Links de descarga
http://lwp-l.com/pdf9533

Comentarios de: Comparación de los lenguajes de programación C y C++ como herramienta docente (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad