Anda di halaman 1dari 11

Conceptos bsicos

1.1.- Estructura de un programa en C++.


1.2.- Archivos de cabecera.
1.3.- Comentarios.
1.4.- Directivas del preprocesador.
1.5.- La funcin main() .
1.6.- Identificadores.
1.7.- Entrada/Salida.

Estructura de un programa en C++

El formato general de un programa en C++ es el siguiente:

ENCABEZADO

/
|

<

|
\

Definicin de constantes y macros,


Declaracin de variables globales,
Inclusin de archivos.

void main(void) <---linea de cabecera de la funcin principal.


{<-------------Inicio de bloque.......... ......... ......... <---Cuerpo
de la funcin principal..........} <-------------Fin de bloque.

El listado 1.1 muestra un programa que despliega en la pantalla del monitor el mensaje: El
Lenguaje C++ es poderoso
// PRIMER.CPP
//
// Despliega un mensaje en la pantalla.
#include <stdio.h>

// Para utilizar la funcin printf()

void main(void)
{
printf("El lenguaje C++ es poderoso\n");
}

Listado 1.1.- PRIMER PROGRAMA EN C++

1.2.- Archivos de cabecera


El listado 1.1 contiene la lnea:
#include <stdio.h>

En ella, stdio.h es el nombre de un ARCHIVO DE CABECERA en el cual se encuentran


declarados los prototipos de las funciones y macros que se utilizan para la entrada/salida
estndar.
Existe un extenso grupo de archivos de cabecera, y cada uno de ellos sirve para manejar un
grupo de funciones relacionadas. La extensin h de estos archivos es la inicial de la palabra
header.

Generalmente estos archivos son incluidos en las primeras lneas de los archivos que
contienen el cdigo fuente en C++.
El compilador de C++ desplegar un mensaje de error cuando se trate de utilizar una
funcin sin antes haber incluido el archivo de cabecera que contiene el prototipo de ella.
Los archivos de cabecera son incluidos con el instructivo INCLUDE cuando se ejecuta el
del compilador.

1.3.- Comentarios
En el C++ existen dos formas de manejar los comentarios:
La primera sirve para escribir comentarios que abarcan varias lneas, y utiliza los caracteres
/* para marcar el inicio de un comentario, y los caracteres */ para marcar el final, como se
ve en los siguientes ejemplos:
/* Este es un pequeo comentario */
/* Este es otro comentario, pero a diferencia del
anterior, utiliza varias lneas.

Observe que tambin puede incluir lneas en blanco (como la anterior y la siguiente).
*/

La segunda forma solo sirve para comentarios que abarcan una lnea o parte de ella, y
utiliza los caracteres // al principio del comentario. El fin del comentario queda marcado
por el fin de la lnea, como se muestra a continuacin:
// Este es un comentario de una lnea,
// y este es otro.
void main(void)

// Este comentario ocupa parte de la lnea.

Los comentarios de una sola lnea pueden anidarse dentro de los comentarios de varias
lneas, como por ejemplo:
/* El principio del comentario de varias lneas.
// Primer comentario de una sola lnea.
// Segundo comentario de una sola lnea.
*/ Fin del comentario de varias lneas.

1.4.- Directivas del preprocesador


El preprocesador es un programa que viene incluido en los compiladores de C++, y se
encarga de ejecutar ciertas rdenes llamadas DIRECTIVAS DEL PREPROCESADOR.
Estas directivas empiezan con el carcter # (Numeral).
Al inicio de la compilacin, el compilador invoca al preprocesador, quien acta de acuerdo
a la directiva correspondiente.
Las directivas del preprocesador pueden clasificarse en tres grupos principales:
1.4.1.- Inclusin de Archivos.

1.4.2.- Reemplazamiento de Cadenas y Procesamiento de Macros.


1.4.3.- Compilacin Condicional.

1.4.1.- Inclusin de archivos


Pueden incluirse los contenidos de otros archivos de texto en el archivo que contiene
cdigo en C++. Esto se logra por medio de la directiva #include en cualquiera de las tres
formas siguientes:
#include <nombre_archivo>
/* nombre_archivo ser buscado nicamente en el directorio INCLUDE */
#include "nombre_archivo"
/* nombre_archivo ser buscado en el directorio de trabajo actual */
#include "d:\trayectoria\nombre_archivo"
/* En este caso, nombre_archivo ser buscado en el directorio especificado en la
trayectoria */
Ejemplo:
#include "C:\DATOSCPP\PANTALLA.C"

1.4.2.- Reemplazamiento de cadenas y procesamiento de


macros
El reemplazamiento de cadenas consiste en sustituir (antes de efectuar la compilacin)
cada una de las ocurrencias de cierta cadena (llamada constante simblica) por otra cadena
equivalente. Esto de logra por medio de la directiva #define, como se muestra en los
siguientes ejemplos:
#include <stdio.h>
#define CADENA "El Lenguaje C++ es poderoso\n"
void main(void)
{
printf(CADENA);
}

En este caso, el preprocesador sustituir CADENA por El Lenguaje C++ es poderoso, de


tal manera que el compilador se encontrar con la instruccin: printf("El Lenguaje C++
es poderoso\n");
#define VALMAX 1000

Aqu, se est definiendo la constante simblica VALMAX, cuyo valor ser el entero 1000.
La directiva #define tambin sirve para declarar macros, las cuales incluyen una ms
instrucciones del Lenguaje C++, como:
#define CUBO(N) ((N)*(N)*(N))

Esta macro puede utilizarse en una instruccin de la siguiente forma:


r = CUBO(5);

El preprocesador sustituye lo anterior por: r = ((5)*(5)*(5));


Los macros pueden tomar formas complejas y ocupar varias lneas de cdigo, como se
muestra en el siguiente ejemplo:
#define REDOND(x) ((x)>=0?((x)+1/VALOR1)*(1-1/VALOR1): \
((x)-1/VALOR1)*(1+1/VALOR1))

Obsrvese que al final de la primera lnea se escribi una diagonal invertida (\), la cual
sirve como enlace.

1.4.3.- Compilacin condicional


Existe un grupo de directivas del preprocesador que permiten controlar cuales partes del
cdigo fuente se van a compilar al cumplirse ciertas condiciones. A continuacin se muestra
una lista de tales directivas; dejndose la ejemplificacin de su uso para unidades ms
avanzadas de este trabajo.
#if
#ifdef
#if defined(algo)
#ifndef
#else
#elif
#endif

Adems de las directivas vistas hasta aqu, existen las siguientes:


#error
#pragma inline
#pragma warn
#pragma saveregs

1.5.- La Funcin main()


Todo programa de C++ debe contener una funcin llamada main() (principal), la cual sirve
de enlace con el sistema operativo que se est utilizando. Cuando se intente obtener un
programa ejecutable (.EXE ) a partir de un archivo que no contenga una funcin main(), el
compilador desplegar un mensaje de error.
Al invocar a un programa escrito en C++, desde el indicador de presencia del sistema
operativo, se le pueden pasar ciertos valores que se llaman argumentos, los cuales van a ser
recibidos por la funcin principal. Esta, a su vez, va a regresar un valor de retorno al
sistema operativo que la invoc. La devolucin del valor de retorno se hace por medio de la
instruccin return, por ejemplo:
return 0 ;
La explicacin acerca de la utilizacin de argumentos en la funcin main() requiere del
conocimiento de apuntadores, por lo que se tratar en la unidad 6.

1.6.- Identificadores
Los nombres que son utilizados para referenciar variables, funciones, etiquetas y dems
objetos que se manejan con el Lenguaje C++, son referidos en forma genrica como
identificadores.

1.6.1.- Identificadores Creados por el Usuario.


1.6.2.- Palabras Reservadas.

1.6.1.- Identificadores creados por el usuario


El usuario debe cuidar que los identificadores creados por l cumplan las siguientes:
Reglas generales para los identificadores:
1.- Pueden estar formados por:
a.- Letras maysculas y/o minsculas.
b.- El carcter de subrayado.
c.- Los dgitos del 0 al 9.
2.- El primer carcter debe ser una letra o el carcter de
subrayado.
3.- Pueden contener un nmero arbitrario de caracteres; pero
Borland C++ considera como significativos los primeros 32 o
los n primeros que decida el programador, donde:
1 <= n <="32"
4.- Se toma en cuenta la diferencia entre letras maysculas y
minsculas, por lo que: SUMA, Suma y suma son identificadores
diferentes.
5.- No puede utilizarse el mismo identificador para dos
objetos que se encuentren dentro del mismo mbito.

1.6.2.- Palabras reservadas


Las palabras reservadas, como su nombre lo indica, son identificadores que tienen asignado
un uso especfico y no podrn ser utilizadas como identificadores creados por el usuario.
La tabla 1.1 muestra las palabras reservadas de Borland C++
+

@
@
+
@
+

_asm
asm
auto
break
case
_cdecl
cdecl
char
class
const
continue
_cs
default
delete
do
double

@
@
@
@
@
@
+
@
+

_ds
else
enum
_es
_export
extern
_far
far
_fastcall
float
for
friend
goto
_huge
huge
if
inline

@
@
@
@
+
+
@
@
+
+
+
@

int
_interrupt
interrupt
_loadds
long
_near
near
new
operator
_pascal
pascal
private
protected
public
register
return
_saveregs

Tabla 1.1.- Palabras reservadas de Borland C++.

+
+

_seg
short
signed
sizeof
_ss
static
struct
switch
template
this
typedef
union
unsigned
virtual
void
volatile
while

Las palabras marcadas con + en la tabla 1.1 son las palabras reservadas especficas de C++,
las marcadas con @ son las palabras aadidas por Borland al C, y las palabras sin marca
son las palabras reservadas del C estndar.

1.7.- Entrada/Salida
En el Lenguaje C++, la entrada/salida se maneja de dos formas.
La primera consiste en la utilizacin de las funciones cuyos prototipos vienen declarados en
el archivo stdio.h, y es la forma que tradicionalmente ha utilizado el Lenguaje C.
La segunda es propia del C++ y consiste en el manejo de objetos y operadores cuyas
definiciones se encuentran en el archivo iostream.h.
A continuacin explicaremos cada una de estas dos formas.
1.7.1.- Funciones Declaradas en stdio.h
1.7.2.- Funciones Declaradas en conio.h

1.7.3.- Objetos Declarados en iostream.h

1.7.1.- Funciones declaradas en stdio.h


En esta forma, se requiere la inclusin de la siguiente lnea al principio del programa
fuente:
#include <stdio.h>

En el archivo stdio.h se encuentran definidos, entre otros, los prototipos de las funciones
printf(), scanf(), gets() y puts() adems de las macros getc(x) y putc(). A continuacin
analizaremos cada una de estas funciones y macros:
1.7.1.1.- La Funcin printf()
1.7.1.2.- La Funcin scanf()
1.7.1.3.- Las Funciones gets() y puts()

1.7.1.4.- Las Macros getc() y putc()

1.7.1.1.- La funcin printf()


Esta funcin es la mas utilizada en C para desplegar informacin en la pantalla, ms no en
el lenguaje C++ como veremos ms adelante.
El formato general para la funcin printf() es:
printf(<cadena_formato> , <elem> , <elem> , ... );

Donde:
cadena_formato es una cadena de caracteres encerrada entre comillas

dobles. Esta cadena es enviada a la pantalla (la


salida estndar ) despus de haber sustituidos los
elementos listados despus de la cadena.

La sustitucin de los elementos se hace de acuerdo a los comandos de formato incluidos en


cadena_formato, los cuales empiezan con un smbolo de porciento (%).
En la tabla 1.2 se muestran los comandos de formato ms usuales:

Comando

Sirve para:

%d

entero

%u

entero sin signo

%ld

entero largo

%p

valor de apuntador

%f

nmero de punto flotante

%e

nmero de punto flotante en valor exponencial

%c

carcter

%s

cadena de caracteres

%x

entero en formato hexadecimal

%o

entero en formato octal


Tabla 1.2.- Comandos de formato.

A fin de poder mostrar algunos ejemplos de aplicacin de la funcin printf(), se presenta


aqu la tabla 1.3 que contiene los tipos de datos disponibles en el compilador de Borland
C++ 3.1.

Tipo

Tamao (bits)

char

-128 a 127

unsigned char

0 a 255

enum

16

-32,768 a 32,767

int

16

-32,768 a 32,767

short int

16

-32,768 a 32,767

unsigned int

16

0 a 65,535

long

32

-2,147'483,648 a 2,147'483,647

unsigned long

32

0 a 4,294'967,295

float

32

7 dgitos

3.4E-38 a 3.4E+38

double

64

15 digitos

1.7E-308 a 1.7E+308

long double

80

19 digitos

3.4E-4932 a 3.4E+3932

void

Precisin

Rango de valores:

near pointer

16

Direcciones de memoria

far pointer

16

Direcciones de memoria

Tabla 1.3.- Tipos de datos, tamaos y rangos en Borland C++ 3.1


Los listados 1.2 a 1.8 muestran ejemplos de utilizacin de formatos por medio de la funcin

// IMPRIME ENTEROS EN "DECIMAL"


#include <stdio.h>
int main()
{
int y=12345;
printf("%13d\n",y);
return 0;
}

Listado 1.2
// IMPRIME ENTEROS EN OCTAL
#include <stdio.h>
int main()
{
int y=12345;
printf("y = %13d EN DECIMAL\n",y);
printf("y = %13o EN OCTAL\n",y);
return 0;
}

Listado 1.3
// IMPRIME ENTEROS EN HEXADECIMAL
#include <stdio.h>
int main()
{
int y=12345;
printf("y = %13d EN DECIMAL\n",y);
printf("y = %13x EN HEXADECIMAL\n",y);
return 0;
}

Listado 1.4
// IMPRIME ENTEROS SIN SIGNO
#include <stdio.h>
int main()
{
int y= -12345;
printf("y = %13d ENTERO CON SIGNO\n",y);
printf("y = %13u ENTERO SIN SIGNO\n",y);
return 0;
}

Listado 1.5
// IMPRIME NUMEROS CON PUNTO FLOTANTE
#include <stdio.h>
int main()
{
float
x=123.45;
double y=678.90;
printf("x = %12.2f\ny = %12.1f\n",x,y);
return 0;
}

Listado 1.6
// IMPRIME CARACTERES
#include <stdio.h>

int main()
{
char a='X', b='Y', c='Z' ;
printf("%c%c%c\n",a,b,c);
return 0;
}

Listado 1.7
// IMPRIME CADENAS DE CARACTERES
#include <stdio.h>
int main()
{
/*
Formato: %[-a.b]s
donde: - JUSTIFICA A LA IZQUIERDA
a NUMERO DE ESPACIOS DISPONIBLES PARA DESPLEGAR
b NUMERO MAXIMO DE CARACTERES QUE PUEDEN DESPLEGARSE
*/
printf("\n%10s","DESPLEGADO DE CADENAS EN LENGUAJE C++");
printf("\n%-10s","DESPLEGADO DE CADENAS EN LENGUAJE C++");
printf("\n%25.10s","DESPLEGADO DE CADENAS EN LENGUAJE C++")
printf("\n%-25.10s","DESPLEGADO DE CADENAS EN LENGUAJE C++";
printf("\n%.10s","DESPLEGADO DE CADENAS EN LENGUAJE C++");
return 0;
}

Listado 1.8
Para desplegar el smbolo de porciento puede escribirse
en cadena_formato : % . Por ejemplo:
..........
..........
int utilidad;
utilidad = 30;
printf("La utilidad es del %2d %\n", utilidad);
..........

desplegar :
La utilidad es del 30 %

1.7.1.2.- La funcin scanf()


Esta funcin toma la entrada, normalmente del teclado, y la almacena en variables
previamente declaradas. El formato para la funcin scanf() es :
scanf( <cadena_formato> , <elem> , <elem> , ... ) ;

Los significados de <cadena_formato> y <elem> son los mismos que en el caso de la


funcin printf(). La funcin scanf() utiliza la mayora de los comandos mostrados en la
tabla 1.2 La funcin scanf() debe utilizarse con cautela cuando se van a introducir valores
numricos y de cadenas de caracteres en una sola instruccin.

1.7.1.3.- Las funciones gets() y puts()

Las funciones scanf() y printf() sirven para varios formatos, por lo cual son muy
voluminosas. Es por esto que se han desarrollado las funciones gets() y puts(), especficas
para la entrada/salida de cadenas de caracteres.
La funcin gets() toma una cadena de caracteres desde el teclado y la almacena en la
variable cuyo identificador aparece como argumento en la invocacin a gets(), como en:
gets(nombre);

La funcin puts() despliega en la pantalla una cadena de caracteres que se encuentra


almacenada en la variable cuyo identificador aparece como argumento en la invocacin a la
funcin puts().

1.7.1.4.- Las macros getc() y putc()


La macro getc(c) toma un caracter desde el teclado y lo almacena en la variable c.
Por su parte, putc() despliega un caracter en la pantalla.
Estas macros estn definidas en el archivo stdio.h .

1.7.2.- Funciones declaradas en conio.h.


La consola es un concepto heredado de los ambientes multiusuario, y est formada
por el teclado y el monitor.
En las implementaciones de Borland C++ existe una serie de funciones que manejan la
entrada/salida por la consola, entre otras:

clrscr(), que limpia la pantalla y posiciona el cursor en la esquina superior izquierda de


la ventana actual.

gotoxy(a,b), posiciona el cursor en la posicin establecida por la columna a y el


rengln b.

window(a,b,x,y), establece la ventana actual. Los valores a,b pertenecen a la columna y


el rengln de la esquina superior izquierda; los valores x,y corresponden a la columna y
el rengln de la esquina inferior derecha de la nueva ventana.

getch(), toma un carcter desde el teclado y no lo despliega en la pantalla.


getche(), toma un carcter desde el teclado y lo despliega en la pantalla.
Para poder utilizar las funciones relacionadas con la consola, es necesario incluir la
lnea:
#include <conio.h>
Donde conio.h es el archivo de cabecera donde se encuentran declarados los prototipos
de las funciones que manejan la entrada/salida estndar por la consola.

1.7.3.- Objetos declarados en iostream.h


C++ provee una nueva forma para manejar la entrada/salida, proporcionando una
sintaxis ms sencilla, elegante e intuitiva que la de stdio.h , adems de un mecanismo

ms eficiente y flexible. La palabra iostream tiene su origen en las palabras: input


output stream , por lo que puede traducirse como flujo de entrada/salida.
El flujo de entrada/salida es utilizado para enviar datos desde una fuente (productor)
a un destino (consumidor). En esta forma se tiene una vasta jerarqua de clases para el
manejo de entrada/salida para archivos y dispositivos. En el archivo iostream.h se
encuentran definidos los objetos cin y cout.
El objeto cin utiliza al operador sobrecargado >> para tomar datos desde la entrada
estndar (habitualmente el teclado). El objeto cout utiliza al operador sobrecargado
<< para enviar datos hacia la salida estndar (normalmente la pantalla).
Veamos cmo se utilizan estos elementos en un pequeo ejemplo:
#include <iostream.h>
int main()
{
char nombre[30];
cout << "CUAL ES TU NOMBRE ? " ; cin>> nombre ;
cout << "\n" ; cout << "!! HOLA , " << nombre << " !!" ; return 0 ; }

Listado 1.9.- Ejemplo de utilizacin de cin y cout


Tambin es posible especificar el ancho de un campo por medio del manipulador
setw() , que se encuentra declarado en iomanip.h ; as como los manipuladores
window(), clrscr() y gotoxy() declarados en constrea.h, como se muestra en el listado
1.10.
#include <iostream.h>
#include <iomanip.h>
#include <constrea.h>
int main()
{
char nombre[10] ;
int numero = 150 ;
float sueldo ;
constream ventana0, ventana1, ventana2 ;
ventana0.window(1,1,80,25);
ventana1.window(10,05,20,05);
ventana2.window(10,07,40,07);
ventana0.clrscr();
ventana1.clrscr();
cout << "NUMERO: " << setw(3) << numero; cout << " NOMBRE : " ;
cin.getline(nombre,10); ventana2.clrscr(); cout << "\nSUELDO : $ " ;
cin>> sueldo ;
return 0;
}

Listado 1.10.- Uso de manipuladores.

Anda mungkin juga menyukai