Está en la página 1de 50

PROGRAMACION

UNO C++

HISTORIA DEL LENGUAJE C++


El lenguaje C++ fue creado hacia el ao 1980 por Bjarne Stroustrup en los laboratorios Bell,
desde sus comienzos este lenguaje fue concebido con el propsito de que sea un lenguaje
amable para aquellos programadores profesionales de la poca. En un principio se utiliz
para hacer algunas simulaciones, que para aquel momento ningn otro lenguaje podra
soportarlas.
C++ es el producto de la unin de los ms grandes aportes hechos por el lenguaje C,
adems tiene caractersticas en comn con otros lenguajes como el BCPL, ALGOL 68,
SIMULA 67, en especial podramos decir que es un superconjunto del lenguaje C, ya que la
similitud sintctica que tiene C++ con este lenguaje se debe a que uno de los objetivos del
creador era mantener y conservar programas que anteriormente fueron escritos en C, por
ello se comenz incluyendo varias de sus bibliotecas . Una de las mejoras mas importantes
de C++ es el desarrollo de la Programacin Orientada a Objetos, actualmente conocida
como POO, esto de debe a que incluye conceptos como la abstraccin, herencia,
encapsulamiento y polimorfismo. El concepto fundamental de C++ es la clase lo que viene a
ser un tipo definido por el usuario, el cual permite un manejo mas personalizado de los
datos. Con el paso del tiempo C++ ha sido rediseado y reimplementado adquiriendo una
apariencia y estructura mucho mas slida lo que de una u otra forma facilita la creacin de
software a gran escala.
PROGRAMA EN C++
Realmente la programacin pra muchos resulte algo dificil de comprender y usar pero en la
actualidad estos procesos han facilitado una gran variedad de tareas para los humanos que
en otras pocas eran casi imposibles, pues bien, C++ es una de esas herramientas que nos
serviran para programar, en esta pgina aprenders a crear un simple programa y los
aspectos bsicos de una programa en lenguaje C++.
Cualquier programa por mas simple que sea contiene las siguientes caractersticas:
Obtencin de informacin desde cualquier perifrico de entrada.
Forma como se almacena esa informacin (esttica o dinmicamente).
Conjunto de instrucciones que manipularan esa informacin mediante determinado
proceso.
Mostrar los resultados obtenidos.
La siguiente es la estructura bsica de un programa en C++:
Directivas del procesador.(bibliotecas de funciones).
Declaracin de variables globales y funciones.(almacenamiento de los datos mediante un
identificador).
Funcin principal main.(funcin principal).
main( )
{ declaraciones locales.
instrucciones de una funcin.
}
Otras funciones.
Lo cual puede verse ilustrado con nuestro primer programa:
//mi primer programa
//Jairo Ceballos, 2000
#include<iostream.h>
main( )
{
cout<<"este es mi primer programa";
return (0);
}
Este programa imprime en pantalla:
2

Este es mi primer programa.


Respecto a este primer programa realizar varias observaciones, en primer lugar vemos que
las directivas de las que hablbamos hace un par de renglones hace referencia a las
bibliotecas de C++, las cuales contiene unas instrucciones bsica como lectura escritura,
etc. Lo segundo a tener en cuenta es la funcin main() la cual es la funcin principal de un
programa y en donde deber ir el cuerpo del mismo, esta pude o no recibir unos valores
iniciales o fijos (parmetros). Por ltimo utilizamos una funcin llamada cout la cual nos
imprime en pantalla el texto contenido entre las comillas.
DECLARACIN DE VARIABLES (identificadores).
Cuando estamos programando en C++ podremos necesitar unas variables para almacenar
un dato, C++ nos provee de varios tipos de datos para tal tarea, por ejemplo si necesitamos
leer un nmero desde el teclado vamos a necesitar una variable, digamos de tipo entero, le
asignaremos un nombre con el cual identificarla y por ltimo le asignaremos el valor ledo al
nombre de la variable es lo que se conoce como identificadores los cuales tienen como
caracterstica de ser sensibles a las maysculas y minsculas es decir, NOMBRE y nombre
son identificadores diferentes y como tales sern tratados por el procesador, de no hacer
caso de esta sugerencia podran producirse errores.
Espacios en blanco: La utilizacin de espacios en blanco (lneas, tabulaciones, sangrados)
pueden ser utilizados con libertad, claro est siempre y cuando estos ayuden a la legibilidad
del programa.
Comentarios: Como vemos en nuestro primer programa los comentarios van luego del
delimitador //comentario, pero tambin podemos utilizar /*comentario*/ este ltimo
heredado de C.
los Parntesis: Estos ayudan a manejar la prioridad en cuanto a la utilizacin de
operadores.
Palabras Reservadas: En nuestro primer programa hemos usado palabras claves como
cout, #include, main, etc, los cuales son identificadores que tienen un significado especial
para el compilador. Solo podremos utilizarlas tal y como se han definido, adems debemos
tener en cuenta que no podremos utilizar estos identificadores como nombre para las
variables que definamos.
identificadores: Estos son los nombres que utilizamos para representar las variables,
constantes,
tipos,
funciones
y
etiquetas
de
nuestro
programa.
Esto
con el fin de poder utilizarlos en futuras acciones de nuestro programa. Estos identificadores
en C++ deben cumplir lo siguiente:
El primer carcter debe ser una letra o un subrayado.
Los caracteres significativos son los 32 primeros del identificador.
Los identificadores son sensibles al tamao y tipo de la letra, al igual que a las maysculas y
minsculas.
Entrada y salida estandar en C++

Ahora pasar a describir uno de los aspectos ms importantes


de los lenguajes de Programacin; la entrada y salida, la cual
permite al usuario de un programa interactuar con este. Muchos
lenguajes de alto nivel suministran inadecuadas facilidades de
entrada y salida; este no es el caso de C++.
C++ tiene sus propios archivos de cabecera por ejemplo
iostream.h, fstream.h las cuales conforman su coleccin de
funciones de E/S. El flujo de entrada y salida se define como un
conjunto de clases, las cuales estn contenidas en el archivo de
cabecera iostream.h y se sobrecargan con los operadores << y
3

>>.
El fichero iostream.h posee variedad de facilidades, definidas en
cada una de las clases que posee, las cuales intervienen en los
procesos de conversin de objetos en secuencia de caracteres y
viceversa; a estas facilidades se las denomina streams.
SALIDA.
Este flujo se abre automticamente cuando comienza la
ejecucin del programa. Este mtodo de salida (insercin)
consiste en aplicar el operador de insercin "<<" a cout.
ejemplo:
#include<iostream.h>
void main()
{
cout<<"hola mundo!";
}
Adems el objeto cout (objeto desde el punto de vista de la
POO), se puede sobrecargar, por ejemplo:
porcentaje_pureza = 5.4;
cout<<"El porcentaje de pureza
es:"<<porcentaje_pureza<<endl;
son lneas de cdigo que nos producira la siguiente salida:
El porcentaje de pureza es : 5.4 el stream endl es un salto de
lnea.
SALIDA DE ERROR.
Al igual que existe un dispositivo estndar de salida, existe uno
de error al cual se envan los mensajes mediante el uso del
objeto cerr en lugar de cout:
cerr<<"El dato es incorrecto, se ha producido un error!";
SALIDA CON FORMATO.
La entrada y salida se puede realizar aplicndole un formato el
cual se asocia con el stream de salida, un conjunto de
manipuladores, estos permiten manipular la forma como son
visualizados los resultados al usuario, dichos manipuladores son
funciones que son llamadas en determinada parte del cdigo
fuente, estos son algunos de los manipuladores los cuales se
encuentran en el archivo de cabecera iomanip.h:
endl
inserta el caracter de fin de lnea '\n'
ends
inserta el caracter de fin de cadena '\0'
dec
conversin a decimal
hex
conversin a hexadecimal
oct
conversin a octal
Extrae un espacio en blanco del inicio de un
ws
stream
vaca el buffer respecto de un stream de
flush
salida
precisin de un dato coma flotante (cifras
setprecision ( int n)
significativas)
determina el caracter de relleno para las
setfill (int car)
cadenas de caracteres
setw (int n)
establece anchura de campo
setiosflags (long fs) establece una lista de indicadores de
formato, fija bites de formato
4

resetiosflags (long suprime una lista de indicadores de formato


fs)
e inicializa formato de bits
ENTRADA.
Cuando existe un dispositivo preestablecido de entrada; cin se
asocia con este mediante el operador de extraccin ">>",
ejemplo:
#include<iostream.h>
void main() {
int x;
cout<<"digite un entero";
cin>>x;
}
Con el objeto cin podemos leer diferentes tipos de datos, por
ejemplo:
char mi_nombre[ 60 ];
cout<<"Cual es su nombre ?: ";
cin>>mi_nombre;
Supongamos que se digita Jairo Alexander en el array de
caracteres nicamente se almacenar Jairo, para solucionar este
inconveniente tenemos la funcin miembro getline. En el
ejemplo anterior reemplazaramos la tercera lnea de cdigo
por:
cin.getline(mi_nombre,60,'\n');

Tipos de Datos en C++ Para realizar un programa en C++, identificamos que tipo de
informacin vamos a manejar para que podamos representarla mediante los tipos de datos
que nos proporciona C++, generalmente con una palabra reservada y un identificador. Los
tipos de datos en C++ se dividen en dos grupos:
Tipos de datos bsicos.
TAMAO(byte
NOMBRE
RANGO
s)
int
-32768..32767 2
short
-32768..32767 2
2,147.483.648
long
4
..2,147.438.64
7
unsigned
0..65535
2
unsigned short 0..65535
2
0..4,294.967.2
unsigned long
4
95
3.4Efloat
4
38..3.4E+38
1.7Edouble
8
308..1.7E+308
long double
3.4E10
4932..3.4E+49
5

32
char
-128..127
1
unsigned char 0..255
1
Tipos de datos avanzados.
TIPO
DESCRIPCIN.
class
clases
enum
tipo enumerado
struct
estructuras
typedef
definiciones de tipo
union
uniones
Enteros.
Los tipos de datos Enteros son: char, int, long. El tipo char se usa a menudo para la
manipulacin de caracteres. C++ utiliza enteros en decimal (base 10), octal (base 8) o
hexadecimal (base 16).
Caracteres.
El tipo caracter char es una forma de entero, este tipo de dato se encuentra encerrado entre
apstrofos, como 'A', '=', etc.
Reales.
En general en C++ se utiliza tres tipos de reales: float, double y long doble, este tipo de
datos requiere que cada tipo posea como mnimo valor a un valor en el rango 1E-37 a
1E+37.
Constantes.
Durante la ejecucin de un programa podemos necesitar un valor que no cambie en ningn
momento, este valor se llama constante y puede ser definido de cualquier tipo de dato. Hay
dos maneras de definir una constante:
#define PI 3.14158967
const float PI = 3.14158967
En el ejemplo el uso de const puede ser el ms correcto y claro, en este caso PI es un lvalue
no modificable, mientras en el caso Define, PI es un literal.
Enumerado.
En este tipo de datos se define una variable de tipo enumerado, la cual puede tomar un
determinado valor de una lista, la cual contiene definidas unas constantes, a las cuales
podemos acceder mediante su nombre. El siguiente es un ejemplo:
enum ciudades{Bogot, BuenosAires, Lima = 3, Caracas}Latinoamericanas;
Aqu estamos definiendo la variable ciudades, Bogot, Buenos Aires, Lima, Caracas y la
variable Latinoamericanas de tipo enum.
En los tipos enumerados los valores que se asignan a las variables y constantes es de tipo
entero, a cada constante se asigna automticamente un valor por omisin, a menos que se
especifique.
En el ejemplo anterior a la constante Bogot se le asigna por omisin el valor 0 por ser la
primera en la lista, adems esta no ha sido tratada de forma especifica. EL valor de Buenos
aires es 1, ya que aparece despus de una constante con valor 0. La variable Lima se
inicializa explcitamente con el valor 3. La variable caracas contiene el valor 4.
una vez creada la variable Ciudades podemos definir una nueva variable as:
enum Ciudades Suramericanas;
6

Suramericanas = Lima;
La variable suramericanas es inicializada con el valor 3.

Arreglos y matrices
Los arreglos o vectores son grupos de posiciones de memoria contiguos los cuales tienen
como caracterstica especial ser del mismo tipo de dato, a cada uno de estos datos lo
llamamos elemento del arreglo. Un arreglo se pueden visualizar de la siguiente forma:

En este caso tenemos un arreglo que contiene datos de tipo entero (int), el numero de
datos es 4, ntese que tenemos un subndice para acceder a cada posicin del arreglo,
adems, un arreglo siempre comienza por el subndice o posicin 0.
DECLARACIN DE UN ARREGLO.
La forma cmo se declara un arreglo en C++ es la siguiente:
tipo_dato nombre_arreglo[tamao];
en donde como ya mencionamos, tipo_dato es cualquiera de los tipos de datos definidos en
C++, nombre_arreglo es el nombre que nosotros deseemos para nuestro arreglo y tamao
es una constante que define la cantidad de elementos del arreglo, adems es de tipo
entero. Un ejemplo de declaracin de un arreglo es:
char letras[10];
INICIALIZACION DE UN ARREGLO.
Existen diferentes formas de inicializar un arreglo.
Por omisin.
Cuando tenemos un arreglo esttico utilizamos este metodo, la forma de hacerlo es la
siguiente:
char letras[10];
Sin tamao especfico.
Podemos crear un arreglo sin decirle el tamao, siempre y cuando le asignemos a este los
elementos que lo conforman, as:
char frase[]="arreglo sin longitud explcita";
lo cual nos crea un arreglo del tamao suficiente para guardar la frase.
Definicin explcita.
En este caso creamos un arreglo de tamao especfico y a la vez le asignamos los elementos
que lo conforman:
int numeros[3]={100,23,90};
ACCESO A LOS ELEMENTOS DEL ARREGLO.
Para acceder a un elemento del arreglo utilizamos un subndice, el cual determina la
posicin que ocupa dicho elemento dentro del arreglo. La sintaxis es:
7

nombre_arreglo[subndice];
Supongamos que tenemos un arreglo
int numeros[3]={2,800,67};
S queremos acceder al elemento 1 el cual contiene el valor 800 entonces la instruccin es
numeros[1];
TAMAO (en bytes) DE UN ARREGLO.
Para determinar el tamao en bytes de un arreglo utilizamos la funcin sizeof asi:
sizeof(nombre_arreglo);
ARREGLOS MULTIDIMENSIONALES.
Cmo su nombre lo indica son arreglos de varias dimensiones, es decir utilizan varios
subndices para acceder a los elementos, se podran ver como una matriz:

Como se puede ver este es una arreglo bidimensional, la declaracin es similar a un arreglo
normal, slo que en este caso utilizamos otro par de corchetes, por ser bidimensional. Si
tiene de tres pares de corchetes en adelante el arreglo es multidimensional.
En el dibujo si queremos acceder al elemento 20 y cambiar su valor por 1000 declaramos:
int A[1][2]=1000;

Estructuras de Control
Para comenzar a realizar programas en C++ necesitaremos otras herramientas, las cuales
nos van a servir para controlar el flujo de la informacin; estas son las estructuras de
control.
Estructuras Condicionales: estas instrucciones nos van a servir para ejecutar una o
varias lneas de cdigo de manera especifica, a continuacin una descripcin de cada una de
ellas.
Estructura if:
se utiliza para ejecutar una lnea de cdigo condicionalmente. A continuacin la forma mas
sencilla:
if(expresion) {
8

accion 1;
accion 2;
.
.
accion n; }
Como podemos observar la expresin debe ir entre los parntesis, al ejecutarse la primera
lnea de cdigo la expresin se evala como falso(0) o verdadero(1 o cualquier otro valor
diferente de cero), si la condicin es verdadera se ejecutan las acciones accion 1, accion 2,
accion 3...accion n. Se continuar con las dems sentencias, si la condicin es falsa las
acciones sern ignoradas, pasando a las siguientes sentencias.
Otra versin de la estructura if mas general es la estructura if-else:
if(expresion) {
accion 1;
accion 2;
.
.
accion n; }else
{
accion 1;
accion 2;
.
.
accion n; }
Este tipo de Estructura permite evaluar la expresin de manera especfica y tomar dos
acciones distintas y ejecutar su respectivo bloque de acciones.
Estructura condicional "?".
Al igual que las anteriores estructuras permite evaluar una expresin particular y hacer una
nica seleccin de dos posibles acciones dependiendo de la validez o falsedad de la
expresin as:
expresion ? accion_1: accion_2;
Estructura switch.
Cuando realizamos un programa encontraremos que necesitamos comprobar posibles
valores de una variable, es para esto que nos sirve la
estructura switch, ahora su sintaxis:
switch (expresion) {
case valor_1: instruccion_1;
break;
case valor_2: instruccion_2;
break;
.
.
.
9

case valor_n: instruccion_n;


break;
default: otra_instruccion; }
antes de continuar tengo que aclarar que esta estructura debe ser manejada con cuidado, y
en especial la instruccin break, ya que si esta instruccin no es colocada al final de cada
comprobacin de un valor, el programa continuara su ejecucin con el bloque de
instrucciones otra_instruccion entonces utilizamos break para ignorar las dems opciones,
al final de esta seccin hablar de esta instruccin .
Estructura for.
En varias ocasiones necesitamos ejecutar una o varias instrucciones un determinado
numero de veces realizando o teniendo en cuenta una verificacin, para ello utilizamos la
estructura for la cual tiene la siguiente sintaxis:
int ciclo, numero_veces;
for ( ciclo = 0; ciclo < numero_veces; ciclo = ciclo + 1)
{
instruccion_1;
instruccion_2;
.
.
instruccion_n;
}
Respecto a esta estructura har varias observaciones, comenzando por la definicin de las
variables: ciclo (llamada variable contador) y numero_veces las cual nos sirve para realizar
el ciclo un numero determinado de veces, ahora bien, dentro de los parntesis de la palabra
reservada for observamos la instruccin ciclo=ciclo+1, esta nos sirve para determinar el
numero de saltos (incremento) que queremos realizar con el ciclo el cual contiene dentro de
las llaves una o mas instrucciones, en cada ciclo se comprobara se si han cumplido el
numero de pasos determinados con numero_veces, si este se ha cumplido el ciclo termina y
se continua con la siguiente instruccin despus del bloque for.
Estructura while.
El uso de while es similar al de for ya que antes de realizar el bloque de instrucciones se
hace una verificacion preliminar, la sintaxis es la siguiente:
while( condicion )
{
instruccion_1;
instruccion_2;
.
.
10

instruccion_n;
}
Generalmente este tipo de estructura se utiliza cuando necesitamos realizar un ciclo un
numero indefinido de veces.
Estructura do-while.
La estructura do-while se diferencia de las anteriores, en que la verificacin de una
determinada condicin se realiza al final del ciclo, es decir al entrar a la estructura do-while
el ciclo se realiza por lo menos una vez, la sintaxis es la siguiente:
do {
instruccion_1;
instruccion_2;
.
.
instruccion_n;
}while(condicion);
este tipo de estructura se utiliza (recomendable) cuando necesitemos presentar informacin
al usuario por lo menos una vez, es el caso de la presentacin de un men.
Instruccin break.
La instruccin break tiene dos usos importantes entre los conocidos, el primero es terminar
con la ejecucin de un ciclo y continuar con el siguiente bloque de instrucciones del
programa. El segundo uso es
terminar con la ejecucin de un bloque case en la estructura switch.
Instruccin continue.
Esta instruccin sirve para terminar de forma prematura la ejecucin de las instrucciones en
el interior de un ciclo, es decir saltando el segmento de instrucciones entre continue y el
final del ciclo pero forzando a ejecutarse la siguiente iteracin.
Instruccin exit.
Como ya hemos mencionado, muchas veces resulta til o es necesario terminar la ejecucin
de un programa antes de que todas sus instrucciones se hayan realizado, esta funcin se
encuentra en el archivo de cabecera stdlib.h.

Funciones en C++
Cuando realizamos un programa un poco ms avanzado podremos darnos cuenta que la
cantidad de cdigo fuente es muy grande, para ello utilizamos las funciones (subrutinas en
otros lenguajes) las cuales pasan a ser pequeos programas que operando en conjunto
vienen a formar la aplicacin en s, la sintaxis es la siguiente:
tipo_devuelto nombre_representativo ( tipo_argumentos
nombre_argumentos)
{
.
11

.
declaraciones de datos-cuerpo de la funcin;
.
.
}
respecto al prototipo de funcin es la forma como el compilador conoce el tipo de
informacin o resultado devuelto as como el tipo y cantidad de argumentos que contiene.
La funcin debe ser definida antes de ser llamada en cualquier parte del cuerpo principal del
programa (funcin main).
referente al tipo_devuelto este puede ser void (no se retorna un tipo especfico), int ,float o
cualquier otro tipo de dato, en cuanto a nombre_representativo este puede ser un nombre
que identifique a la funcin, siguiendo con tipo_argumentos nombre_argumentos nos
referimos a los tipos y nombres de los valores enviados a la funcin para que sean tratados
de forma especfica.
A la hora de definir una funcin en C++ existen reglas para hacerlo:
Especificacin de la forma de almacenamiento: extern o static esto es opcional.
tipo devuelto por la funcin, por omisin se retorna int.
nombre de la funcin el cual debe ser preferiblemente referente a su contenido, para
hacer mas legible el programa.
Lista de declaracin de argumentos.
cuerpo de la funcin, el cual esta contenido entre { y }.
Argumentos de funciones.
En una funcin los argumentos o parmetros son opcionales, si se encuentran en la funcin
estos puden ser de cualquier tipo de dato. Ahora desde el punto de vista lgico de un
programa se identifican dos tipos de argumentos:
Parmetros formales. Estos parmetros son los que se definen en el mismo
momento de la definicin de la funcin.
Parmetros Actuales. Cuando llamamos a una funcin dentro del cuerpo principal
del programa, la lista de parmetros que le enviamos es lo que se denomina
parmetros actuales.
Llamadas por valor y llamadas por referencia.
Cuando los argumentos se pasan por valor, lo que realmente se hace es enviar una copia de
la variable sin alterar el valor de esta, pero aqu nos encontramos con una limitacin y es
que la funcin o puede retornar ms de un valor.
Cuando llamamos a una funcin por referencia lo que se hace en realidad es enviar la
direccin del argumento mas no su valor, otra caracterstica importante de este tipo de paso
de argumentos es que las variables que hicieron la llamada pueden ser alteradas en su
valor, en este caso la funcin si puede retornar mas de un valor.
Esta es la versin html del archivo
http://www.cvc.uab.es/shared/teach/a21292/docs/cpp_arg.ppt.
G o o g l e genera automticamente versions html de los documentos mientras explora la
web.
Para vincularse a esta pgina o para marcarla, utilize el siguiente url:
http://www.google.com/search?
q=cache:XVKbnSXoWvcC:www.cvc.uab.es/shared/teach/a21292/docs/cpp_arg.ppt+lenguaj
e+c%2B%2B&hl=es&lr=lang_es&ie=UTF-8
12

Google no tiene relacin con los autores de esta pgina ni es responsable de su contenido.
Se han resaltado estos trminos de bsqueda:
lenguaje
c++
Lenguaje C++
Introduccin
B. Stroustrup, mediados de los 80, AT&T
Paso de la programacin tradicional (C) a estilos de abstraccin de datos y orientacin a
objetos
Conserva caractersticas del C y aade nuevos conceptos
Lenguaje C++
Extensiones respecto al C
No orientadas a objeto
Orientadas a objetos

Lenguaje C++
Extensiones respecto al C

No orientadas a objeto
Mejoras en entrada/salida - streams
Sobrecarga de funciones y operadores
Parmetros por defecto. Referencias
Lenguaje C++
Estandarizacin
Comit ANSI X3J16
Desde 1995
ltima versin adoptada por ISO 1997
Lenguaje C++
#include<iostream.h>
main()
{//begin
cout << Hello world;
}//end
Lenguaje C++
Organizacin de programas
Ficheros de declaraciones (.h)
Del sistema
Del usuario (#ifndef .... #define ..... #endif)
Ficheros de cdigo fuente (.cc, .cpp)
Lenguaje C++
Scope (alcance)
Fichero: declaraciones que no pertenecen a funcin o clase alguna
Funcin: etiquetas (go to)
Local: cualquier nombre declarado en un bloque pertenece al bloque.
Clase: declaraciones asociadas a una clase
Cada variable tiene un scope o un contexto
Lenguaje C++
Operadores y sentencias
Sentencias
Misma sintaxis y semntica que las de C
Operadores idem sentencias excepto:
new, delete, delete[], ::
<<, >>
13

Sobrecarga

Lenguaje C++

Declaracin:
enumerados
enum status {error, ok};
punteros
int i = 25;
int *np;
np = &i;

Lenguaje C++
Declaracin:
referencias
int i = 5;
int& j = i;
i = 7;
cout << i << j; //cout : salida estandard
Comentarios
/*........*/, //..........
Lenguaje C++
Entrada / salida
iostream.h, iostream
cout, cin, operator<<, operator>>
sobrecarga de los operadores para entrada salida de tipos definidos por el usuario.
Lenguaje C++
Variables y aritmtica.
Todo nombre y/o expresin tiene un tipo.
El tipo determina las operaciones que se pueden realizar con el.
Ejemplo:
int dato;
operaciones: + - / *
Lenguaje C++
Tipos fundamentales.
char float
short double
int long double
long (unsigned)
Operaciones asociadas.
+,-,*,/,%, ==,!=,<,>,<=,>=,
Lenguaje C++
Tipos fundamentales.
Conversiones implcitas.
En asignaciones y operaciones algebraicas el lenguaje lleva a cabo todas las
conversiones implcitas que faciliten el uso y sean seguras.
Lenguaje C++
Punteros y vectores.
char v[10]; //vector de 10 caracteres (0 a 9)
char *p; // puntero a un carcter
p = &v[3]; //p apunta al cuarto elemento de v
Lenguaje C++
Funciones
14

Regulares (similares a una funcin C).


Miembros (asociadas a una clase).
Patrn de funciones.
Nombre, lista de argumentos, tipo de retorno y cuerpo.
Argumentos por defecto y lista variable
Lenguaje C++
Funciones
extern int pow( float, int);
int main()
{
for (int i = 0; i < 10; i++)
cout << pow( 2, 5) << endl;
}
Lenguaje C++
Funciones
Paso de argumentos (siempre es por valor)
Por valor - seguridad
copiado en el almacenamiento local de la funcin
la funcin accede a la copia
Por referencia - velocidad - retornos mltiples
se copia la direccin del objeto que se esta pasando
la funcin accede al objeto
Por referencia constante - seguridad + velocidad
Excepcin: vectores: paso por referencia
Lenguaje C++
Funciones
Sobrecarga de nombres.
int max(int, int);
int max( int, int, int);
int max(int *, int);
int max(float, int);
int max(int, float);
Lenguaje C++
Funciones
inline
indica al compilador que cualquier llamada debe ser reemplazada por el cdigo de la
funcin.
Elimina el tiempo de llamada y de copia de argumentos.
inline int sum(int a, int b) {return a + b;}
i = sum (x,12); i = x + 12;
inline y const ayudan a eliminar #define
Lenguaje C++
Mdulos
El concepto de mdulo en c++ se refiere a unidades de compilacin separadas.
Similar al concepto en C.
Lenguaje C++
Soporte para abstraccin de datos
Definicin de un conjunto de operaciones asociadas a un tipo.
Restriccin del conjunto de operaciones que se pueden realizar sobre un tipo a las definidas
para el mismo.
CLASE
nombre
15

datos miembros
funciones miembro
control de acceso

Lenguaje C++
Soporte para abstraccin de datos

Inicializacin y destruccin.
Inicializacin y asignacin.
Patrones.
Gestin de excepciones.
Conversiones de tipo
complex a = complex(1);
Mltiples implementaciones

Lenguaje C++
Soporte para orientacion a objetos
Funciones virtuales. Polimorfismo.
Clases abstractas.
Clases patrn.
Herencia simple y mltiple.
Encapsulado.
Lenguaje C++
Bloques {}
Operador ::
int x;
void f()
{
int x = 1;
::x = 2;
}
Lenguaje C++
Los
Los
Los
Los

objetos
objetos
objetos
objetos

se crean al llegar a su definicin.


se destruyen cuando salen del bloque.
globales se crean una sola vez y se destruyen al terminar el programa.
static son similares a los globales.
Lenguaje C++
Tipos Derivados
* puntero - relacin con vectores
& referencia
[] vector
() funcin
struct {} estructuras - union {}- fields.
void (se comporta como fundamental pero solo se lo utiliza como parte de derivados)
Lenguaje C++
Tipos Derivados
(tipo) expresin: especifica conversin
tipo(expresin): especifica conversin
float r = float(1); // explicito tipo constructor
char * p = (char *) 0777; //como en C si el nombre
//no es simple o typedef
punteros - operaciones asociadas
int *p; //puntero a entero
int **p; //puntero a puntero a entero
16

int (*vp) [10]; //puntero a vector de 10 enteros


int (*fp) ( char, char *);// puntero a funcin
Lenguaje C++
Estructuras
Conjunto de elementos de distinto tipo.
Inicializacin. Constructores.
Operaciones asociadas ( ==, <)
Equivalencia de tipo.
struct s1 { int a; }; != struct s2 {int a;};
El tipo struct es distinto a cualquier tipo fundamental
Lenguaje C++
Referencias
Nombre alternativo para un objeto.
Uso principal
Argumentos y retorno de funciones y operadores.
Notacin: X& => referencia a X.
Lenguaje C++
Almacenamiento de objetos
esttico (asignada al iniciarse el programa)
automtico (asociada al bloque)
en la memoria disponible (obtenida con new)
Lenguaje C++
Enunciados
if, if else,
switch case default
for while do while
break continue return goto
Lenguaje C++
Clases.
Tipo abstracto de datos definido por el usuario
Interface e implementacin
class X {
private:
int i;
public:
f();
protected:
g();
};
struct X {
private:
int i;
public:
f();
protected:
g();
};
X *const this;
Lenguaje C++
clases
Funcin miembro const
17

El tipo this de
Funcin miembro
Funcin miembro
Funcin miembro

la funcin ser const X * const


inline
virtual
virtual pura
Lenguaje C++
clases

Constructores
Funciones con el mismo nombre de la clase pero que no retornan nada. - Excepciones.
Constructor de copia
Constructor por defecto
Constructores como conversores de tipo
Destructores
virtuales
Lenguaje C++
clases
Friend
Calificacin de nombres
operador ::
Clases anidadas
Miembros estticos
Punteros a miembros
typedef void (cl::*PFM)(int)
PFM pf = &cl::f;
Lenguaje C++
clases
Construccin de objetos
automticos
variables locales: se ejecuta su constructor cada vez que el programa pasa por la
declaracin
secuencia de construccin - destruccin
inicializacin y asignacin
estticos
utilizada para asegurar la correcta inicializacin y destruccin de objetos de bibliotecas :
cin, cout
en memoria disponible
new T, delete
Lenguaje C++
clases
Construccin de objetos
como miembros de otro objeto
sintaxis de inicializacin :
secuencia de llamada a los constructores 1 los miembros
secuencia de llamada a los destructores 1 el objeto
uso de punteros a objetos miembros
vectores de objetos
los objetos deben tener constructor por defecto
la destruccin de objetos es implcita si el vector es automtico
la destruccin es explicita cuando se trata de punteros
delete, delete[]
Lenguaje C++
clases y herencia
Construccin de objetos
18

gestin de memoria espcifica


sobrecarga de new y delete
Clases derivadas
Herencia
publica, protegida y privada. Datos, funciones, tipos
conversin de tipo
class x : public y {};
construccin - destruccin
Lenguaje C++
clases y herencia
Jerarquas
funciones virtuales
clases abstractas
Herencia mltiple
class a :public b, public c {};
base mltiple
base virtual
Destructores virtuales - size_t de delete
Lenguaje C++
clases y herencia
Constructores virtuales
no pueden serlo
se los puede simular
tpicos: por defecto y de copia
class X { class Y : public X {
public: public:
X(); Y();
virtual X* NewX () X* NewX ()
{ return new X(); } {return new Y(); }
}; };
void f(X * p1, X *p2)
{ X *p3 = p1->NewX(); X *p4 = p2->NewX(); }
Lenguaje C++
sobrecarga de operadores
X+Y*Z
class complex {
double re, im;
public:
complex(double r, double i) : re, im(i){}
complex operator+(complex);
complex operator*(complex);
};
Lenguaje C++
sobrecarga de operadores
void f()
{ complex a(1, 3.1);
complex b(1.2, 2);
complex c = b;
a = b + c;
b = b + c * a;
c = a * b + complex(1,2);
}
19

Lenguaje C++
sobrecarga de operadores
+ - * / % ^ & | ~ ! = < > += -= *= /= %= ^= &=
|= << >> >>= <<= == != <= >= && || ++ -->* -> , [ ] ( ) new new[ ] delete delete[ ]
No se sobrecargan:
::
.
.*
Lenguaje C++
sobrecarga de operadores
operator= operator[ ] operator( ) y operator->
deben ser funciones miembro no estticas lo cual
garantiza que sus primeros operandos sean L-values
Los operadores = & y , tienen significados
predefinidos cuando se aplican a objetos de una clase;
pero pueden hacerse inaccesibles o bien redefinirlos

Introduccin a C++ para el Ejercicio de


Implementacin de un Compilador
Contenido:

Generalidades
Comentarios
Constantes
Operadores
Identificadores
Declaraciones
Tipos Bsicos
Instrucciones de entrada/salida
Funciones
Clases
Sentencias
Tipos de datos
Programa principal
Estructura de un Programa C++
Ms informacin sobre el lenguaje C++

Generalidades
C++ es el lenguaje de programacin multiobjetivo ideado en 1984 por Bjarne Stroustrup a partir del lenguaje C.
C++ es un lenguaje en el que se diferencian las minsculas y las maysculas (case sensitive). Tambin es un
lenguaje de formato libre, es decir, que se admiten espacios, tabuladores, saltos de lnea y comentarios en cualquier
parte del cdigo.
20

Las palabras clave del lenguaje son reservadas, aunque cada grupo de alumnos slo ha de tener en cuenta las
palabras asignadas al grupo.
C++ es un lenguaje con estructura de bloques, que se definen mediante la utilizacin de las llaves { }. Los nombres
declarados dentro de un bloque son locales a dicho bloque. Los bloques vienen definidos por las funciones, clases y
mtodos. Los nombres declarados fuera de cualquier funcin, mtodo o clase son globales y pueden ser utilizados
desde cualquier mtodo o funcin.
No se permite la definicin de funciones o mtodos anidados. C++ es un lenguaje con recursividad, por lo que
cualquier funcin o mtodo puede ser recursivo. El paso de parmetros puede ser por valor o por referencia.
No es necesario considerar para el ejercicio de implementacin las directivas del preprocesador de C++.
En C++ es necesario declarar previamente todo lo que se utilice. Las sentencias finalizan en punto y coma.

Comentarios
En C++ hay dos tipos de comentarios, de los que solamente hay que implementar uno de ellos:
1. Se utilizan los caracteres /* para abrir el comentario, y */ para cerrarlo. No se admiten comentarios anidados.
Los comentarios pueden ocupar ms de una lnea y pueden ir colocados en cualquier parte del cdigo donde pueda ir
un espacio:
/* Comentario con apertura y cierre */
2. Los comentarios comienzan por los caracteres // y finalizan al acabar la lnea. Este tipo de comentario solo
ocupa una lnea y puede ir colocado en cualquier parte del cdigo donde pueda ir un espacio:
// Comentario de lnea

Constantes
Constantes enteras. Hay tres notaciones: decimal, octal y hexadecimal [slo es obligatorio implementar la
primera]:
Decimal: 159
Octal (usando como prefijo un cero): 052
Hexadecimal (usando como prefijo un cero y una equis): 0x1E4
Constantes de cadenas de caracteres. Van encerradas entre comillas dobles: "Hola, mundo". Se utiliza el
carcter nulo (cuyo cdigo ASCII es 0) como carcter de fin de cadena.
Para representar caracteres especiales se utiliza una secuencia de escape, que comienza mediante el carcter barra
inversa y va seguido de un carcter. Algunos de estos caracteres son el salto de lnea (\n), el tabulador (\t), el
carcter nulo (\0), las comillas dobles (\") o el carcter de barra inversa (\\) [la implementacin de estos
caracteres especiales es opcional].
Constantes lgicas. Son las constantes true y false. Adems, cualquier expresin que se evale como 0 se
considera como falso, y cualquier expresin que se evale con un valor distinto a 0 se considera verdadera [es
opcional implementar las constantes true y false].

Operadores
Operadores aritmticos. Suma, resta, producto, divisin y mdulo: +, -, *, / y % [obligatorio implementar uno].
Tambin existen los operadores ms y menos unarios: +, - [implementacin opcional].
Operadores relacionales. Igual, distinto, menor, mayor, menor o igual, mayor o igual: ==, !=, <, >, <= y >=
[obligatorio implementar uno].
Operadores lgicos. And, or y not: &&, || y ! [obligatorio implementar uno]. Debe tenerse en cuenta que las
expresiones lgicas en C++ se evalan en cortocircuito (evaluacin perezosa).
Auto-incrementos y auto-decrementos. ++ y -- (tanto prefijos, como sufijos) [implementacin opcional]:
a = j++; // si j vala 5, ahora a == 5 y j == 6
a = ++j; // si j vala 5, ahora a == 6 y j == 6
Operador condicional. condicin ? exp1 : exp2. Si la condicin es cierta, devuelve exp1, en caso
contrario, devuelve exp2 [implementacin opcional]:
max = (a > b) ? a : b; //Si a > b entonces max == a, en caso contrario, max
== b
21

Operador de asignacin con operacin. +=, -=, *=, /= y %= [implementacin opcional]:


n += m; /* es equivalente a n = n + m; */
Operador de acceso a miembros de una clase. Operador punto:
cl.campo
/* accede al miembro de la clase cl */
Operador de acceso a elementos de un vector. Operadores corchetes:
a = v[i+1]; /* accede al elemento i+1 del vector v y copia su valor en a */
Precedencia de operadores. En la tabla se muestra la precedencia de los operadores de la siguiente forma: los
operadores del mismo grupo tienen la misma precedencia y, conforme se desciende por la tabla, la precedencia
disminuye.
Operadores
Significado
Asociatividad
.
Referencia a un campo de una clase
()
Llamada a funcin
Izquierda a derecha
[]
Referencia a un elemento de un vector
!
No, negacin lgica (NOT)
++
Autoincremento
-Autodecremento
Derecha a izquierda
+
Ms unario
Menos unario
*
Producto
/
Divisin
Izquierda a derecha
%
Mdulo
+
Suma
Izquierda a derecha
Resta
>
Mayor que
<
Menor que
Izquierda a derecha
<=
Menor o igual que
>=
Mayor o igual que
==
Comparador de igualdad
Izquierda a derecha
!=
Comparador de desigualdad
&&
Y lgico (AND)
Izquierda a derecha
||
O lgico (OR)
Izquierda a derecha
? :
Operador condicional
Derecha a izquierda
=
Asignacin
Derecha a izquierda
op=
Asignacin con operacin

Identificadores
Los identificadores deben comenzar con una letra o con un subrayado, y pueden ir seguidos de cualquier nmero de
letras, dgitos o subrayados. Debe tenerse en cuenta que las maysculas y las minsculas son letras distintas.

Declaraciones
El lenguaje C++ exige declaracin previa de todos los nombres que se utilicen.
Para realizar una declaracin de una variable, se coloca el tipo seguido del nombre de la variable, finalizando en
punto y coma. Se puede poner una lista de variables separadas por comas [esta declaracin mltiple es opcional para
la implementacin]:
Tipo var1;
Tipo var1, var2, var3; // se declaran las tres variables del mismo tipo
En una declaracin se puede inicializar la variable mediante el signo igual [opcional para la implementacin]:
Tipo var4 = valor;
Si una variable no se inicializa cuando se declara, tendr un valor indefinido hasta que se le asigne un determinado
valor (es decir, el compilador no realiza una inicializacin por omisin).

22

Pueden realizarse declaraciones en cualquier lugar de un bloque; en este caso, la variable ser visible desde ese
punto hasta el final del bloque. Tambin pueden realizarse declaraciones fuera de las clases en cualquier parte del
cdigo (variables globales), siendo solo visibles desde ese punto hasta el final del fichero.

Tipos Bsicos
Se consideran nicamente los siguientes tipos bsicos: entero, que se indica mediante la palabra int, lgico, que se
indica mediante la palabra bool, y vaco, que se indica mediante la palabra void (se usa para funciones que no
devuelvan ningn valor o que no reciban argumentos) [es opcional implementar el tipo bool].
int i; // declara una variable entera i

Instrucciones de entrada/salida
La sentencia cin >> var lee un nmero del teclado y lo almacena en la variable var.
La sentencia cout << expresin_entera evala la expresin e imprime el resultado por pantalla.
La sentencia cout << cadena imprime la cadena por pantalla.
Las sentencias de salida pueden agruparse en una nica sentencia de la siguiente forma [es opcional implementar
esta secuencia]:
cout << "Hola, tengo " << a << " aos."; // Imprime una cadena, un entero y
una cadena

Funciones
Es necesario definir cada funcin antes de poder utilizarla. Para definir una funcin se pone el tipo, el nombre y los
argumentos entre parntesis, seguido de un bloque con el cuerpo de la funcin:
tipo nombre (lista de argumentos)
{
sentencias;
}
El tipo se puede omitir en la definicin de la funcin; en el caso de que se omita, se considera que la funcin es de
tipo int. Los tipos que han de implementarse sern int o void [opcionalmente, tambin bool]. Si la funcin es
de tipo int o no se indica el tipo, quiere decir que devuelve un valor de tipo entero. Si la funcin es de tipo void,
quiere decir que no devuelve ningn valor.
La lista de argumentos (que puede estar vaca, indicndose con void) consta de un tipo seguido del nombre del
argumento. Si hay ms de un argumento, stos se separan por comas. A continuacin se muestran algunas cabeceras
de funciones:
f1 (int p)
// funcin de tipo entero con un argumento entero
int f2 (void)
// funcin entera sin argumentos (parntesis obligatorios)
void f3 (int a, int b) // funcin que no devuelve nada, con dos argumentos
enteros
C++ admite recursividad. Todos los grupos han de considerarla en la implementacin. Tanto los mtodos como las
funciones pueden ser recursivas, es decir, pueden llamarse a s mismas.
En cuanto al paso de parmetros, se pasan por referencia si se antepone al nombre del argumento formal el smbolo
&, con la excepcin de los vectores y las cadenas, que siempre se pasan por valor y no se pone el smbolo &. En el
resto de casos, el paso es por valor. Ejemplos:
f (int a, int v[])
// a es por valor, v es por referencia
f (int &a, char *s)
// a es por referencia, s es por referencia
Dentro de una funcin se tiene acceso a las variables que se declaren en ella (locales), a los argumentos y a las
variables globales. Si en una funcin se declara una variable local o un argumento con el mismo nombre que una
variable global, sta ltima no es accesible desde dicha funcin.

Clases
C++ es un lenguaje orientado a objetos, por lo que cuenta con la posibilidad de definir y utilizar clases. Es necesario
declarar cada clase antes de poder utilizarla. Para definir una clase se pone la palabra class, el nombre y los
miembros entre llaves:
23

class nombre
{
miembros;
};
Los miembros pueden ser de dos tipos: atributos y mtodos. Los atributos son variables declaradas en el seno de la
clase y los mtodos son funciones de la clase. El siguiente ejemplo muestra la declaracin de una clase con dos
atributos y dos mtodos:
class Ejemplo
{
int i; // atributo i entero
bool b; // atributo b lgico
void imprime(int);
// mtodo que recibe un entero y no devuelve
nada
int valor(void);
// mtodo que no recibe nada y devuelve un
entero
};
Obsrvese que los mtodos nicamente se declaran en el cuerpo de la clase, indicando el tipo que devuelve, su
nombre y los parmetros. La definicin del mtodo deber realizarse con posterioridad (de manera similar a la
explicada para las funciones y siguiendo sus caractersticas de funcionamiento), usando la siguiente notacin:
tipo NombreClase::NombreMtodo (parmetros)
{
sentencias;
}
La caracterstica de la ocultacin de la informacin se encuentra implantada en C++ mediante el control de acceso a
los miembros de las clases. Para controlar el acceso a los miembros, stos pueden declararse como pblicos o
privados, utilizando las correspondientes palabras reservadas:
public: los miembros pblicos pueden ser utilizados por todos los usuarios de la clase.
private: los miembros privados slo pueden ser utilizados por los propios mtodos de la clase.
Si no se indica un control de acceso, se supone que los miembros son privados. Un mtodo de una clase puede
acceder a todos los dems miembros (sean pblicos o privados) directamente por su nombre.
Para declarar una variable (un objeto) del tipo de la clase se pone el tipo de la clase y el nombre del objeto, es decir,
el nombre de la clase constituye un nombre de un tipo.
NombreClase variable;
Un mtodo puede acceder a otros miembros directamente por su nombre, pero para acceder a un miembro de una
clase desde el exterior se utiliza el operador punto (.), como ya se ha comentado:
class DNI
{
char *nombre;
// atributo cadena privado
public:
int edad, numero;
// atributos enteros pblicos
void printNombre (void);
// mtodo pblico que imprime el
atributo nombre
void ponNombre (char *);
// mtodo pblico que cambia el
atributo nombre
private:
int sexo;
// atributo entero privado
};
...
DNI obj;
// se declara el objeto obj del tipo DNI
obj.edad = 2001-1973;
// se accede al atributo pblico
obj.printNombre();
// se llama a un mtodo pblico
obj.sexo = 0;
// error: el atributo sexo es privado
Las operaciones permitidas sobre objetos de una clase son la asignacin de objetos y el acceso a sus miembros
pblicos (mediante el operador punto):
DNI yo, tu;
// declara las variables yo y tu de tipo DNI
24

yo.ponNombre ("Juan"); // llama al mtodo pblico con una cadena


yo.numero = 1234;
// asigna un valor al atributo pblico nmero
cout << "Introduce la edad";
cin >> yo.edad; // rellena el campo edad con lo que se lea del teclado
tu = yo;
/* copia el objeto yo en la variable tu */
yo.ponNombre ("Mara"); // llama al mtodo pblico con una cadena
tu.printNombre ();
// imprime Juan (el atributo nombre de t)

Sentencias
Sentencia de asignacin: identificador, igual, expresin, punto y coma: asigna al identificador el resultado de
evaluar la expresin:
i = 8 + 6;
Sentencia de llamada a una funcin o mtodo: nombre de la funcin o mtodo, argumentos entre parntesis:
func ();
/* llamada a una funcin sin argumentos */
f2 (b, i - 8); /* llamada a una funcin con dos argumentos */
obj.func ();
/* llamada a un mtodo sin argumentos */
obj.f2 (b, i - 8);
/* llamada a un mtodo con dos argumentos */
Deber comprobarse que los parmetros en la llamada coincidan en nmero y tipo con los de la declaracin.
Sentencia de retorno de una funcin o mtodo: return. Si la funcin o mtodo es de tipo int hay que aadir
una expresin:
return;
/* la funcin o mtodo es de tipo void */
return i / 2;
/* la funcin o mtodo devuelve un entero */
Sentencia condicional: if (condicin) sentencia1; else sentencia2;
Si la condicin se evala como cierta se ejecuta la sentencia1, en caso contrario, se ejecuta la sentencia2
(si existe). Cada una de estas sentencias puede ser sustituida por un bloque:
if (a > b) c = b; else {c = a; cin >> d;}
Sentencia while: while (condicin) sentencia;
Se evala la condicin y, si resulta ser cierta, se ejecuta la sentencia. Este proceso se repite hasta que la
condicin sea falsa. La sentencia puede ser un bloque:
while (a) {a--; c *= b;}
/* mientras que a no sea 0... */
Sentencia do while: do sentencia while (condicin);
Se ejecuta la sentencia, se evala la condicin y, si resulta ser cierta, se ejecuta de nuevo la sentencia.
Este proceso se repite hasta que la condicin sea falsa. La sentencia puede ser un bloque:
do {a++; c *= b;} while (a < b);
Sentencia for: for (inicializacin; condicin; actualizacin) sentencia;
Se ejecuta la inicializacin, se evala la condicin y, si sta es cierta, se ejecuta la sentencia y se
ejecuta la actualizacin. A continuacin se vuelve a evaluar la condicin y se sigue el proceso hasta que
sea falsa. La sentencia puede ser un bloque:
for (i = 1; i < 10; i++) f *= i;
Sentencia switch:
switch (expresin_entera)
{
case etiqueta1: sentencia1;
case etiqueta2: sentencia2;
. . .
default: sentencian;
}
Se evala la expresin entera, se busca la etiqueta que coincida con el resultado y se ejecutan sus sentencias hasta el
final de la sentencia switch. Puede haber mltiples sentencias en cada case. Si no se encuentra la etiqueta, se
ejecutan las sentencias asociadas a default [default es opcional para la implementacin].
switch (dia)
{
case 1: cout << "lunes";
case 2: cout << "martes";
25

case 3: cout << "mircoles";


case 4: cout << "jueves";
case 5: cout << "viernes";
default: cout << "fiesta";
} /* si dia == 4, se imprimir: jueves viernes fiesta */
Sentencia break: aborta la ejecucin de un bucle o un switch [obligatoria slo para los grupos que tengan la
sentencia switch]:
switch (dia)
{
case 1: cout << "lunes";
break;
case 2: cout << "martes";
break;
case 3: cout << "mircoles"; break;
case 4: cout << "jueves";
break;
case 5: cout << "viernes";
break;
default: cout << "fiesta";
} /* si dia == 4, se imprimir: jueves */

Tipos de datos
Vectores: Se declaran y definen de la siguiente forma:
Tipo nombre_var [tamao]; // declaracin del vector
Los ndices del vector van desde cero hasta tamao-1. Para acceder a un elemento del vector se usan el operador
corchete:
int v[15];
// declara el vector v de enteros. Los ndices irn desde 0
hasta 14
v[5] = 88;
cout << v[5];
/* escribe 88 */
Cadenas: El tipo usado para representar las cadenas es char * (puntero a caracteres) y la sintaxis para declarar o
definir una variable cadena es:
char * nombre_var;
/* declara una cadena */
char * nombre_var = "Hola";
// inicializa la cadena con los caracteres
indicados
Se permiten operaciones de asignacin de cadenas y de clculo de la longitud de cadena ( strlen (cadena)).
Una variable de tipo cadena se representa internamente como un puntero a una direccin de memoria donde estn
los caracteres que forma la cadena:
char * s = "";
// inicializa a la cadena vaca
s = "Hola, mundo!";
// la variable s apuntar a la constante cadena
cout << strlen (s);
// imprime un 13 (strlen no cuenta el carcter nulo
que
indica el fin de cadena)
cout << s;
/* imprime Hola, mundo! */

Programa principal
La funcin principal (la que se ejecutar al arrancar el programa) ser una funcin especial que recibe el nombre de
main, sin argumentos y tiene que ser de tipo void:
void main (void)
{
implementacin_de_la_funcin_principal;
}

Estructura de un Programa C++


Para el ejercicio de implementacin de Compiladores debe considerarse que un programa en C++ tiene la siguiente
estructura: una serie de clases y funciones, siendo una de ellas la funcin principal. Fuera de las funciones y las
clases, se declaran las variables globales y se definen los mtodos de las clases.
26

Un ejemplo de un fichero vlido para el ejercicio de implementacin de Compiladores sera el que se puede obtener
aqu.

Ms Informacin sobre el Lenguaje C++


Hay que tener en cuenta que para el ejercicio de implementacin de Compiladores no es necesario tener un
conocimiento total del lenguaje. Tan solo hay que incorporar el pequeo subconjunto del lenguaje necesario para
implementar lo que aqu se ha explicado y las partes obligatorias de cada grupo. En cualquier caso, se puede
encontrar ms informacin sobre C++ en estas referencias, en los libros que hay en la Biblioteca de la Facultad (se
puede usar el buscador de la UPM), as como en cualquier libro, manual o documentacin del lenguaje. Tambin se
pueden encontrar otras fuentes de informacin realizando bsquedas en la World Wide Web o en los siguientes
enlaces:
Tutoriales de C++: CPlusPlus, Aprendiendo C++ desde el principio, ACM, Computer Science Sucks, C++
Bsico.
FAQ de C++.
Introduccin a C++ para programadores en C.
Resumen del lenguaje C++.
La pgina de Stroustrup sobre C++.
Una gramtica de C++.
Grupo de trabajo de ISO/IEC sobre C++. El draft del estndar ANSI/ISO de C++ de 1996 se puede ver aqu
en html.
Curso C++ en castellano: formato zip.
Libro "Thinking in C++" en lnea.
3.1. ESTRUCTURA DE UN PROGRAMA EN C.

Todo programa en C consta de una o ms funciones, una de las cuales se llama main. El
programa siempre comenzar por la ejecucin de la funcin main. Las definiciones de las
funciones adicionales pueden preceder o seguir a main.

Cada funcin debe contener:

Una cabecera de la funcin, que consta del nombre de la funcin, seguido de una lista
opcional de argumentos encerrados con parntesis.
Una lista de declaracin de argumentos, si se incluyen stos en la cabecera.
Una sentencia compuesta, que contiene el resto de la funcin.
Los comentarios pueden aparecer en cualquier parte del programa, mientras estn situados
entre los delimitadores /* */.

27

PRCTICA No. 1

/*Este programa calcula el rea y el permetro de un crculo pidiendo el radio*/

#include <stdio.h>
#include <conio.h>

main()

float area, radio, pi;

pi=3.141592654;

clrscr();

printf("Introduce el radio: ");


scanf("%f",&radio);

area=pi*radio*radio;

printf("El area es: %f", area);

printf("\n\nwww.geocities.com/area52_escom");

28

getch();

Las funciones getchar, putchar, scanf, printf, gets y puts permiten la transferencia de
informacin entre la computadora y los dispositivos de entrada/salida estndar (por ejemplo
un teclado y un monitor).

3.2. DISEO TOP-DOWN arriba-abajo


La metodologa descendente (top-down), tambin conocida como arriba-abajo consiste en
establecer una serie de niveles de menor o mayor complejidad (arriba-abajo) que den
solucin al problema. Consiste en efectuar una relacin entre las etapas de la estructuracin
de forma que una etapa jerrquica y su inmediatamente inferior se relacionen mediante
entradas y salidas de informacin.

Un proceso descendente esta basado en dos caractersticas esenciales:

representacin en forma de rbol, y


descomposicin funcional.
El diseo se basa en la realizacin de diferentes niveles. El primer nivel resuelve totalmente
el problema y el segundo y sucesivos niveles son refinamientos sucesivos del primero
(stepwise) y se sigue siempre la metodologa de recursos abstractos.

Si el diseo y planteamiento es correcto nunca ser preciso volver atrs ya que los niveles
anteriores al que se est situando en un momento dado ya habrn resuelto el problema en
su totalidad.

Un programa estructurado tiene una representacin en forma de rbol.

29

3.3 TEOREMA DE BHOM Y JACOPINI


El Teorema de la Estructura (o antiguo teorema de Bhom y Jacopini, 1966) demostr que
cualquier programa con un solo punto de entrada y un solo punto de salida puede resolverse
con tres nicos tipos de estructuras de control:

Secuencial
Alternativa
Repetitiva
Estructura Secuencial. Es aquella que ejecuta las acciones sucesivamente unas a
continuacin de otras sin posibilidad de omitir ninguna y naturalmente, sin bifurcaciones.
Todas estas estructuras tendrn una entrada y una salida.

Si las acciones son a1, a2, ... an, la representacin secuencial sera:

DIAGRAMA DE FLUJO

Algoritmo

30

Inicio
Accin a1
Accin a2
.
.
.
Accin an
Fin

Ejemplo:

Calcular la suma de dos numeros.

Algoritmo
Inicio
Declarar A, B, S
Leer dos nmeros A, B
Sumar S=A+B
Escribir S
Fin

Estructura alternativa. Es aquella estructura en la que nicamente se realiza una alternativa


una determinada secuencia de instrucciones- dependiendo del valor de una determinada
condicin o predicado.

Las estructuras alternativas tambin llamadas condicionales pueden ser de tres tipos:

Simple
Doble
Mltiple
31

Estructura alternativa simple. Son aquellas en que la existencia o cumplimiento de la


condicin implica la ruptura de la secuencia y la ejecucin de una determinada accin.

Algoritmo

Si {condicin}
Entonces {accin}
Fin-si

Diagrama de flujo

- Estructura alternativa doble. Es aquella que permite la eleccin entre dos acciones o
tratamientos en funcin de que se cumpla o no determinada accin.

Algoritmo

Si {condicin}
Entonces {accin A1}
Si-no {accin A2}
Fin-si
Diagrama de flujo

32

Estructura alternativa mltiple. Se adoptan cuando las condiciones pueden tomar n valores
enteros distintos: 1, 2, 3, ..., n.

Segn se elija uno de estos valores en la condicin se realizar una de las n acciones (cada
vez slo se ejecuta una accin). Esta estructura es la CASE.

Estructuras repetitivas. Las estructuras repetitivas o iterativas son aquellas en las que las
acciones se ejecutan un nmero determinado de veces y dependen de un valor predefinido
o el cumplimiento de una determinada accin.

Las estructuras repetitivas permiten representar aquellas acciones que pueden


descomponerse en otras subacciones primitivas.

Un bucle es el conjunto de acciones iterativas. Las tres estructuras ms usuales


dependiendo de que la condicin se encuentre al principio o al final de la iteracin son:

Estructura Mientras
Estructura Repetir-hasta
Estructura Para (Desde-hasta)

3.4. ENTRADA DE DATOS


Entrada de un carcter. La funcin getchar
Mediante esta funcin se puede conseguir la entrada de caracteres uno a uno.

33

La funcin getchar es parte de la biblioteca de C de entrada/salida estndar. Devuelve un


carcter ledo del dispositivo de entrada estndar (teclado). No requiere e argumentos.

Una referencia a la funcin getchar se escribe as:

variable de carcter = getchar();

en donde variable de carcter es alguna variable previamente declarada.

Introduccin de datos. La funcin scanf


Se pueden introducir datos en la computadora procedentes del dispositivo de entrada
estndar mediante la funcin de biblioteca scanf. Esta funcin se usa para introducir valores
numricos, caracteres sueltos y cadenas de caracteres. La funcin devuelve el nmero de
datos que se han conseguido introducir correctamente.

La funcin scanf se escribe:

scanf(cadena de control. Arg1, arg2,...,argn)

en donde cadena de control hace referencia a una cadena de caracteres que contiene cierta
informacin sobre el formato de los datos y arg1, arg2,...,argn son argumentos que
representan los datos.

En la cadena de control se incluyen grupos individuales de caracteres, con un grupo de


caracteres por cada dato de entrada. Cada grupo de caracteres debe comenzar con el signo
de porcentaje (%) seguido de un carcter de conversin que indica el tipo de dato
correspondiente.

Caracteres de conversin de los datos de entrada de uso comn.

34

CARCTER DE CONVERSIN
SIGNIFICADO
c
El dato es un carcter
d
El dato es un entero decimal
e
El dato es un valor en coma flotante
f
El dato es un valor en coma flotante
g
El dato es un valor en coma flotante
h
El dato es un entero corto
i
El dato es un entero, octal o hexadecimal
o
El dato es un entero octal
s
El dato es una cadena de caracteres seguida de un carcter de espacio (se aade
automticamente el carcter nulo \0 al final)
u
El dato es un entero decimal sin signo
x
El dato es un entero hexadecimal
[...]
El dato es una cadena de caracteres que puede incluir caracteres de espacio

Los argumentos pueden ser variables o arrays, y sus tipos deben coincidir con los indicados
por los grupos de caracteres correspondientes en la cadena de control. Cada nombre de
variable debe ser precedido por un ampersand (&).

La funcin gets

35

Esta funcin acepta un argumento. El argumento es un dato que acepta una cadena de
caracteres (un array de caracteres). La cadena de caracteres puede incluir caracteres de
espaciado. La cadena se introducir por el teclado y terminar con un carcter de nueva
lnea (cuando el usuario apriete RETURN).

Una referencia a la funcin gets:

gets(argumento)

3.5. SALIDA DE INFORMACIN


Salida de un carcter. Lafuncin putchar.

Con esta funcin se puede visualizar un carcter. Esta funcin es complementaria a la de


entrada de un carcter getchar. Esta funcin es parte de la biblioteca de entrada/salida
estndar. Transmite un carcter al dispositivo de salida estndar (monitor o una terminal).
El carcter que se transmite estar representado por una variable de tipo de carcter. Se
debe proporcionar como argumento de la funcin, encerrado entre parntesis.

Una referencia a la funcin putchar se escribe:

putchar(variable de carcter)

en donde variable de carcter hace referencia a una variable de tipo carcter previamente
declarada.

Escritura de datos. La funcin printf


Se peden escribir datos en el dispositivo de salida estndar utilizando la funcin de
biblioteca printf. Se puede utilizar esta funcin para escribir cualquier combinacin de
valores numricos, caracteres sueltos y cadenas de caracteres.
36

La funcin printf se escribe:

printf (cadena de control, arg1, arg2,..., argn)

en donde cadena de control hace referencia a una cadena de caracteres que contiene
informacin sobre el formato de salida y arg1, arg2,...,argn son argumentos que
representan los datos de salida. Los argumentos pueden ser constantes, variables simples o
nombres de arrays, o datos de salida.

La cadena de control esta compuesta por grupos de caracteres, con un grupo de caracteres
por cada dato de salida. Cada grupo de caracteres debe comenzar por un signo de
porcentaje (%) seguido de un carcter de conversin que indica el tipo de dato
correspondiente.

Caracteres de conversin de los datos de salida de uso comn:

CARCTER DE CONVERSIN
SIGNIFICADO
c
El dato es visualizado como un carcter
d
El dato es visualizado como un entero con signo
e
El dato es visualizado como un valor en coma flotante con exponente
f
El dato es visualizado como un valor en coma flotante sin exponente
g
El dato es visualizado como un valor en coma flotante utilizando la conversin tipo e o tipo f
segn sea el caso; no se visualizan el punto ni los ceros finales cuando no es necesario
i
El dato es visualizado como un entero con signo
o
El dato es visualizado como un entero octal, sin el cero inicial
37

s
El dato es visualizado como una cadena de caracteres
u
El dato es visualizado como un entero decimal sin signo
x
El dato es visualizado como un entero hexadecimal sin el prefijo 0x

La funcin puts
Acepta un solo argumento. Facilita la transferencia de cadenas de caracteres entre la
computadora y el dispositivo de salida estndar.

Una referencia a la funcin puts:

puts(argumento)

3.6. ESTRUCTURAS DE DECISIN Y ESTRUCTURAS DE DECISIN ANIDADAS.


La mayor parte de las sentencias de control de cualquier lenguaje de computadora,
incluyendo C, se basan en una prueba condicional que determina la viabilidad de una accin.
La prueba condicional se evala en los valores de cierto y falso. En C un valor diferente de
cero es cierto (true) y falso (false) el cero.

Una sentencia puede consistir de: una sentencia simple, un bloque de sentencias o ninguna
sentencia (en el caso de que la sentencia sea vaca).

La forma general de la sentencia if es

if (expresin lgica) sentencia;


38

If (expresin lgica) {Secuencia de instrucciones}

if (expresin lgica) sentencia;


else sentencia;

donde sentencia puede ser una simple o un bloque de sentencias. La forma de if ocn
bloques de sentencias como objetos es as:

if (expresin lgica) {Secuencia de instrucciones}


else {Secuencia de instrucciones o sentencias}

La expresin se debe encontrar entre parntesis. La sentencia se ejecutar slo si la


expresin tiene un valor no nulo (si expresin se cierta). Si expresin tiene el valor cero
(falsa), entonces la sentencia se ignorar en caso de ser una sentencia simple, si es una
sentencia compuesta entonces se ejecuta la secuencia de instrucciones de else (de lo
contrario).

Tambin puede haber if-then-else anidados:

if (expresin lgica) sentencia;


else if (expresin lgica) sentencia;
else if (expresin lgica) {bloque de sentencias}
.
.
.
else sentencia;

39

Las condiciones se evalan de arriba hacia abajo. Tan pronto como se encuentre una
condicin true, se ejecuta la sentencia asociada con ella, y el resto de la escala se pasa por
alto. Si ninguna de las condiciones es true, se ejecuta el else final. Si no tiene else final, no
tiene lugar ninguna accin si todas las condiciones son false.

3.7. ESTRUCTURAS REPETITIVAS

SENTENCIA for (PARA)

Se utiliza para crear bucles en C. Esta sentencia incluye una expresin que especifica el
valor inicial de un ndice, otra expresin que determina cuando se contina o no el bucle y
una tercera expresin que permite que el ndice se modifique al final de cada pasada.

La forma general de esta sentencia es:

for (expresin 1; expresin 2; expresin 3) sentencia

en donde

expresin 1 (expresin de asignacin), inicializa algn parmetro (llamado ndice) que


controla la repeticin del bucle;
expresin 2 (expresin lgica), representa una condicin que debe ser satisfecha para que
se contine la ejecucin del bucle;
expresin 3 (expresin monaria o expresin de asignacin), modifica el valor del parmetro
inicialmente asignado por la expresin 1.

La ejecucin de la sentencia for sucede de la siguiente forma:

Se inicializan los parmetros.


40

Se evala la expresin lgica.


2.1. Si el resultado es distinto de cero (verdadero), se ejecuta la sentencia, se evala la
expresin que da lugar a la progresin de la condicin y se vuelve al punto 2.
2.2. Si el resultado de 2, es cero (falso), la ejecucin de la sentencia for se da por
finalizada y se contina en la siguiente sentencia del programa.

SENTENCIA while (MIENTRAS)

Se utiliza para generar bucles.

La forma general es :

while (expresin) sentencia

sentencia incluida se ejecutar repetidamente, mientras el valor de expresin no sea cero.


Puede ser una sentencia simple o compuesta.

expresin, es cualquier expresin numrica, relacional o lgica.

La ejecucin de esta sentencia sucede de la siguiente forma:

Se evala la expresin.
Si el resultado anterior es cero (falso), la sentencia no se ejecuta y se pasa a ejecutar la
siguiente sentencia en el programa.
Si el resultado de la expresin es distinto de cero (verdadero), se ejecuta la sentencia del
while y el proceso se repite comenzando en el punto 1.
NOTA:

41

La sentencia for es equivalente a:

expresin 1
while (expresin 2)
{
sentencia
expresin 3;
}

SENTENCIA do-while (HAZ....HASTA)

Ejecuta una sentencia simple o compuesta, una o ms veces, dependiendo del valor de una
expresin.

La forma general es:

do
Sentencia;
while (expresin)

expresin, es cualquier expresin numrica, relacional o lgica.


sentencia, es una sentencia simple o compuesta.

La ejecucin de esta sentencia sucede de la siguiente forma:

Se ejecuta la sentencia o cuerpo de la sentencia do.


Se evala la expresin.
42

Si el resultado de la evaluacin de la expresin es cero (falso), se pasa a ejecutar la


siguiente sentencia en el programa.
Si el resultado de la evaluacin de la expresin es distinto de cero (verdadero), el proceso
se repite comenzando en el punto 1.

SENTENCIA switch
Esta sentencia permite ejecutar una de varias acciones, en funcin del valor de una
expresin.

La forma general de la sentencia switch es :

switch (expresin) sentencia

Cada grupo de sentencias se escribe de forma general:

switch (expresin)
{
declaraciones
case expresin1:
|sentencia 1, break;|
case expresin2:
|sentencia 2;, break;|
.
.
.
|default:|
|sentencia N;|
43

expresin, una constante entera, una constante de caracteres o una expresin constante. El
valor es convertido a tipo int.

sentencia, es una sentencia simple o compuesta.

Al principio del cuerpo de la sentencia switch, pueden aparecer declaraciones. Las


inicializaciones, si las hay, son ignoradas.

La sentencia switch evala la expresin entre parntesis y compara su valor con las
constantes de cada case. La ejecucin de la sentencia del cuerpo de la sentencia switch,
comienza en el case cuya constante coincida con el valor de la expresin y contina hasta el
final del cuerpo o hasta una sentencia que transfiera el control fuera del cuerpo.

Si no existe un valor igual al valor de la expresin, entonces se ejecutan las sentencias a


continuacin del default, si esta clusula ha sido especificada. La expresin default puede
colocarse en cualquier parte del cuerpo y no necesariamente al final.

SENTENCIA break

La sentencia break tiene dos usos:

Para finalizar un case en una sentencia switch,


Para forzar la terminacin inmediata de un ciclo y saltar la evaluacin condicional del ciclo.
Cuando se encuentra la sentencia break dentro de cualquiera de los ciclos, stos finalizarn
inmediatamente. El control se retorna a la sentencia que sigue al ciclo.

44

SENTENCIA continue

La sentencia continue funciona de forma algo similar a break. Slo que en vez de forzar la
terminacin, continue fuerza una nueva iteracin del ciclo y salta cualquier cdigo que exista
entre medias.

En los ciclos while y do-while, una sentencia continue da lugar a que el control pase
directamente a la evaluacin de la condicin y prosiga el proceso del ciclo.

En el caso del for, primero se ejecuta la parte de incremento del ciclo, a continuacin se
ejecuta la evaluacin de la condicin, y finalmente el ciclo contina.

undefined
undefined
More...

[Close]

[Close]
Find Old Friends
Instrucciones y comandos de C++
INSTRUCCIONES Y COMANDOS DE C++
NORMALFLUORESCENTENORMALFLUORESCENTE
0 - Negro
1 - Azul
2 - Verde
3 - Azul Claro
4 - Rojo
5 - Fushia
6 - Naranja
7 - Blanco
8 - Gris9 - Azul
10 - Verde
45

11
12
13
14
15
16
18
19
20
21
22
23
24
26
27
28
29
30
31
32

Azul Claro
Rojo
Fushia
Amarillo
Blanco
Negro17 - Azul
Verde
Azul Claro
Rojo
Fushia
Amarillo
Blanco
Gris25 - Azul
Verde
Azul Claro
Rojo
Fushia
Naranja
Blanco
Gris

Operandos AritmeticosOperandos RelacionalesOperandos Logicos


- Resta
+ Suma
* Multiplicacion
/ Division real
% Residuo
= Asignacion< Menor que
> Mayor que
<= Menor igual que
>= Mayor igual que
!= Desigualdad
= = Igualdad&& Y
|| O
Xor Bicondicional
! Negacion
++ Incremento
-- Decremento

46

EJEMPLOS DE PROGRAMAS EN C++


1.

CALCULAR LA AREA DE UN TRIANGULO:

#include<iostream.h>
#include<math.h>
double b,h;
void main()
{
cout<<"introduzca la base del triangulo"<<endl;
cin>>b;
cout<<"introduzca la altura del triangulo"<<endl;
cin>>h;
cout<<" "<<endl;
cout<<"Area del triangulo: "<<((b*h)/2)<<endl;
cout<<" "<<endl;
}

2.

MENSAJE POR EL MES DE NACIMIENTO:

#include<iostream.h>
#include<math.h>
int mn=0;
void main()
{
cout<<" INDIQUE SU MES DE NACIMIENTO ?"<<endl;
cin>>mn;
switch (mn)
{
case 01:
cout<<" "<<endl;
cout<<"FELICIDADES CELEBRA TU CUMPLEAOS"<<endl;
break;
case 02:
cout<<" "<<endl;
cout<<"HAZ UNA FIESTA"<<endl;
break;
case 03:
cout<<" "<<endl;
cout<<"JUEGA LOTERIA"<<endl;
break;
default:
cout<<" "<<endl;
cout<<"opcion invalida:"<<endl;
}
cout<<" "<<endl;
}
47

3.

ENCUESTA DE EMPRESA TELEFONICA DE CELULAR:

#include<iostream.h>
#include<math.h>
#include<process.h>
void main ()
{
int tmv,tms,tdi=0;
int opc,si=1;
do
{
cout<<"Indique cual es su Mvil"<<endl;
cout<<" 1.- Movilnet "<<endl;
cout<<" 2.- Movilnet "<<endl;
cout<<" 3.- Digitel "<<endl;
cout<<" 4.- SALIR "<<endl;
cin>>opc;
switch(opc)
{
case 1:
cout<<" Movilnet "<<endl;
tmv=tmv+1;
break;
case 2:
tms++;
break;
case 3:
tdi++;
break;
}
}
while(opc<4);
cout<<" Total Movilnet = "<<tmv<<endl;
cout<<" Total Movistar = "<<tms<<endl;
cout<<" Total Digitel = "<<tdi<<endl;
}

4.

CALCULO DE AREA:

#include<iostream.h>
#include<math.h>
main()
{
double pi=3.1416;
double r;
double h;
double V;
cout<<"Introducir el valor del radio";
cin>>r;
cout<<endl;
cout<<"Introducir el valor de la altura";
48

cin>>h;
cout<<endl;
V=pi*pow(r,2)*h;
cout<<endl;
cout<<"El resultado es:";
cout<<V;
cout<<endl;
return 0;
}
5.

ENCUESTA DEL LUGAR DE RESIDENCIA:

#include<iostream.h>
#include<math.h>
#include<process.h>
void main ()
{
int tguar=0,tguat=0;
int opc=1;
do
{
cout<<"Indique donde Vive"<<endl;
cout<<" 1.- Guarenas "<<endl;
cout<<" 2.- Guatire "<<endl;
cout<<" 3.- SALIR "<<endl;
cin>>opc;
switch(opc)
{
case 1:
cout<<" GUARENAS "<<endl;
tguar++;
break;
case 2:
cout<<" GUATIRE "<<endl;
tguat++;
break;
}
}
while(opc<3);
cout<<" Total Guarenas = "<<tguar<<endl;
cout<<" Total Guatire = "<<tguat<<endl;
cout<<" Total Geeneral = "<<tguar+tguat<<endl;
}

6.

ENCUESTA POR SEXO DA MENSAJE DE RECOMENDACION:

#include<iostream.h>
#include<ctype.h>
main ()
{
char resp;
49

cout<<" es varon o hembra ?"<<endl;


cin.get(resp);
resp=toupper(resp);
switch (resp)
{
case 'V':
cout<<"PODRIA SER MEDICO";
break;
case 'H':
cout<<"PODRIA SER BAILARINA";
break;
default:
cout<<"opcion invalida:";
}
return 0;

50

También podría gustarte