Вы находитесь на странице: 1из 79

Fuente: Luis Joyanes A.

Estructura de un programa C++


Un programa en C++ se compone de una o mas funciones. Todo programa debe tener al menos una funcin, la cual es llamada main. Una funcin es bsicamente un conjunto de instrucciones que realizan una o mas acciones. As mismo un programa puede contener una serie de directivas #include que permitirn incluir en el mismo archivos de cabecera que a su vez constaran de funciones y datos predefinidos en ellos.

Estructura de un programa C++


De un modo mas explicito, un programa C++ puede incluir:
Directivas de preprocesador Declaraciones globales La funcin main(); Funciones definidas por el usuario Comentarios del programa.

Directivas del preprocesador


El preprocesador en un programa C o C++ se puede considerar como un editor de texto inteligente que consta de directivas(instrucciones al compilador antes de que se compile el programa principal). Las dos directivas mas usuales son: #include y #define.

Las directivas son instrucciones al compilador. Son generalmente sentencias que darn instrucciones al compilador antes de que el programa se compile. Aunque las directivas pueden definir macros, nombres de constantes, archivos fuentes adicionales, etc., su uso mas frecuente en C++ es la de incluir archivos cabecera en el programa.

La directiva #include
Esta le indica al compilador que lea el archivo fuente que viene a continuacin de ella y su contenido lo inserte en la posicin donde se encuentra dicha directiva. Estos archivos se denominan archivos de cabecera o archivos de inclusin. Los archivos de cabecera, con extensin .h o .hpp, contienen cdigo fuente C/C++ y se sitan en un programa C/C++ mediante la directiva del preprocesador #include, y sigue el siguiente formato: #include <nombrearchivo.h> #include nombrearchivo.h
6

La directiva #include tambin es usada para incluir archivos de sistemas especiales, tambin denominados archivos de cabecera, que residen en su compilador C++. Cuando se instala el compilador, estos archivos de cabecera se almacenan automticamente en su disco en el directorio de inclusin, include, del sistema. Sus nombres de archivos siempre tienen la extensin .h

La directiva #define
Indica al preprocesador que defina un tem de datos u operacin para el programa C++. Eje. #define TAM_LINEA 65

Declaraciones globales.
Estas le indican al compilador que las funciones definidas por el usuario o variables as declaradas son comunes y accesibles a todas las funciones del programa. Las declaraciones globales se sitan antes de la funcin main().

Funcin main()
Sintaxis o estructura es: main() { cuerpo del programa.; }

10

Funciones definidas por el usuario


Una funcin en C++ es un subprograma que devuelve un nico valor, un conjunto de valores o que realiza una tarea especifica tal como acciones E/S.

11

12

Tokens
tokens son los elementos en que el preprocesador desmenuza el cdigo fuente. En un lenguaje de programacin, los tokens son el equivalente a las palabras y signos de puntuacin en el lenguaje natural escrito. Los tokens estn separados por elementos de separacin que reciben el nombre genrico de separadores

13

Comprenden los siguientes tipos de elementos (podramos

considerar que el lenguaje computacional C++ tiene las siguientes clases de "palabras"): Palabras clave ("keywords"). C++ dispone de un conjunto relativamente extenso de palabras clave, sealadas en (3.2.1). Identificadores. Su nmero puede ser virtualmente infinito; dentro de ciertas normas el programador es libre de elegir los que mejor se ajusten a sus necesidades.(3.2.2). Constantes. Existen varias clases, cuyos detalles se exponen mas adelante( 3.2.3) operadores ( 4.9) signos de puntuacin, tambin llamados puntuadores ( 3.2.6).
14

Tipos de datos
Los tipos de datos en C++ se enmarcan dentro de las

siguientes tres categoras principales: 1. Tipos de datos simples 2. Tipos de datos estructurados 3. Tipo de dato puntero.

15

Tipos de datos sencillos.


Son los tipos de datos fundamentales en C++. Se pueden clasificar en tres tipos principales:
1.

2.
3.

Enteros: Este tipo de datos trabaja con enteros o nmeros que no tienen parte decimal. Punto flotante: Este trabaja con nmeros decimales. Tipos enumerados: Estos son datos definidos por el usuario.

16

Tipo de datos enteros


char
short int

long
bool unsigned char unsigned short unsigned int unsigned long
17

Tipo de dato int: Estos nmeros se mueven en el rango entre -2147483648 y 2147483647 y ocupa 4 bytes de memoria. Eje. -6747, 34567, 567473, 22, -3, 89 Nota:
1.

2.

Los nmeros enteros positivos no necesitan el signo de + en el frente. Los nmeros enteros no necesitan coma para separar las unidades de mil, por tal razn: 35,789 se interpretara como dos enteros diferentes: 35 y 789
18

Tipo de datos bool: Es usado para almacenar valores lgicos, true(verdadero) y false(falso). El propsito general de este tipo de datos es manejar o evaluar expresiones lgicas, booleanas. Nota: bool, false y true son palabras reservadas en C++.

19

Tipo de datos char: Es el menor de todas las variantes de datos enteros. Adems de permitirnos trabajar con numero pequeos (-128 hasta 127), permite representar caracteres, esto es, letras, dgitos y smbolos o caracteres especiales. Eje. A, a, b, ), 0, &, , +

20

Tipos de datos de punto flotante.


Este tipo de datos se utiliza para trabajar con nmeros decimales o de punto flotante. C++ provee tres variantes para manipular nmeros decimales: float: Es usado para trabajar con valores reales que se encuentran entre -3.4E+38 y 3.4E+38 y se almacena en 4 bytes.

21

double: este tipo se usa para representar valores reales entre -1.7E+308 y 1.7E+308. Se usan 8 bytes para almacenarlo en memoria. Nota:
1. 2.

3.

Los valores mximo y mnimo de los tipos de datos float y double dependen del sistema. El numero mximo de dgitos significativos, es decir el numero de espacios decimales en un float es de 6 o 7, mientras que en un double es de 15. El numero mximo de dgitos significativos es llamado precisin. Algunas veces los float son llamados de precisin simple y los double son llamados de doble precisin.

22

Resumen tipos de datos


Tipo Ejemplo Tamao Rango

char
short int unsigned int long float double long double

C
-15 1024 43566 256789 10.5 0.000004 1e-8

1
2 2 2 4 4 8 8

0..255
-128..127 -32768..32767 0..65535 -2147483648..2147483637 3.4x10^-38 .. 3.4x10^38 1.7x10^-308 .. 1.7x10^308 Igual que double

23

24

La palabra constante tiene en C++ dos connotaciones

sutilmente diferentes aunque relacionadas, que conviene distinguir: La primera es el sentido normal de la palabra constante en lenguaje natural; es decir, datos (de cualquiera de los tipos posible) cuyos valores se han definido en el momento de escribir el cdigo del programa, y no pueden ser modificados ms tarde en tiempo de ejecucin (lo que significa que sus valores deben ser resueltos en tiempo de compilacin). Dicho en otras palabras: el compilador sabe cual es el valor de los objetos declarados como constantes y en base a este conocimiento puede hacer cuantas suposiciones sean vlidas para conseguir la mayor eficiencia en tiempo de ejecucin.
25

La segunda connotacin es la de tipo de objeto-dato. En este sentido podemos afirmar que en C++ los enteros (variables) forman un tipo distinto de los enteros constantes (constantes enteras), y que los caracteres (variables) forman un tipo distinto de las constantes carcter. As pues, distinguimos entre un tipo char y un tipo const char. Como prcticamente todos los tipos de objeto-dato posibles en C++ puede declararse constantes, existe un universo de tipos C++, simtrico al de los tipos de objetos variables, pero de objetos constantes.
26

Constantes
En C++ existen cuatro tipos de constantes:
Literales Definidas Enumeradas Declaradas

27

Constantes literales
Son las constantes mas usuales que se escriben directamente en el texto del programa. Generalmente se clasifican en:

Enteras : Representa un numero entero o valor int Caracteres : Representa un carcter de cdigo ASCII Coma flotante : Representa un numero real De cadena: Es una secuencia de caracteres encerrados entre comillas .

Nota sobre constantes enteras:


No utilice comas u otros signos de puntuacin Para forzar un tipo long debe terminar con una letra L Para forzar un tipo unsigned debe terminar con una letra U

28

Las constantes definidas son identificadores que se asocian con valores literales contantes y que toman determinados nombres. Son conocidas como constantes simblicas y pueden ser definidas mediante la directiva #define. Ej. #define NUEVALINEA \n #define PI 3.141592 #define VALOR 54 Estas lneas no deben terminar en punto y coma, pues cuando C++ encuentra una de estas la sustituye por sus valores respectivos.
29

Constantes Enumeradas: Estas permiten crear listas de elementos afines, es decir, asociar un identificador tal como un color, por ejemplo, con una secuencia de otros nombres, tales como Azul, Verde, Rojo y Amarillo. Ej. enum Colores { Azul, Verde, Rojo, Amarillo}; Cuando esta secuencia es procesada, el compilador asigna un valor que comienza en 0 a cada elemento enumerado. El compilador enumera los identificadores por usted, despus de declarar un tipo enumerado, se pueden crear variables de ese tipo como con cualquier otro tipo de datos: Colores ColorFavorito = Verde;
30

Constantes Declaradas const y volatile: El cualificador const permite dar nombres simblicos a constantes a modo de otros lenguajes, como Pascal. El formato general es: const tipo nombre = valor; const int OCTAL = 0233; const char CADENA []= Curso de C++; Nota: Si se omite el tipo, entonces C++ utiliza int por defecto.

31

Diferencias entre const y #define


Las definiciones const

especifican los tipos de datos terminan con punto y coma se inicializan como las variables no especifica tipos de datos no utiliza el operador de asignacin = no termina con punto y coma

La directiva #define

32

Ventajas de const sobre #define


El compilador, normalmente, genera cdigos mas

eficientes con constantes definidas con const como las definiciones especifican el tipo de datos, el compilador puede comprobar inmediatamente si las constantes literales en las definiciones estn en forma correcta. Con #define el compilador no puede realizar esta prueba.

33

Ventajas de #define sobre const


Los valores de los smbolos de const ocupan espacio de datos en tiempos de ejecucin, mientras que #define solo existe en el texto del programa y su valor se inserta directamente en el cdigo compilado.

34

Sintaxis de const
const tipoDato nombreConstante = valorConstante; Eje. const unsigned DIAS_DE_SEMANA= 7; const int HORAS_DEL_DIA = 24;

35

36

Identificadores
Secuencia de caracteres, letras, dgitos, subrayados(_) que podemos utilizar para nombrar un elemento de datos en un programa en C++.

ALFABETICOS DIGITOS SUBRAYADO

ALFABETICO o SUBRAYADO (_)


37

Variables en C++.
En C++ una variable es una posicin con nombre en memoria donde se almacena un valor de un cierto tipo de datos y puede ser modificado. Las variables pueden almacenar todo tipo de datos: cadenas, nmeros, estructuras, etc. Una constante por el contrario, es una espacio de memoria, cuyo valor no puede ser modificado. Una variable tpicamente tendr un nombre(un identificador) que describe su propsito.

38

Declaracin de una variable


Es una sentencia que proporciona informacin sobre la variable al compilador C++. Su sintaxis: tipoDatos nombreVariable; En donde tipoDatos es uno de los tipos de datos conocidos en C++. nombreVariable: es un identificador o nombre valido en C++.

39

Declaracin o definicin

40

Duracin de una variable

41

Declaracin de una variable


Es una sentencia que proporciona informacin de la variable al compilador. Sintaxis: typo_Dato nombre_Variable; Otra forma de declarar variables es: tipo_dato var1, var2, var3, . varn Nota: Con la segunda declaracin todas las variables sern del mismo tipo_dato seleccionado.

42

Inicializacin de una variable


tipoDatos nombreVariable = Expresion;

43

Variables locales
Son aquellas definidas en el interior de una funcin y son visibles solo en esa funcin especifica. Las reglas que las rigen son las siguientes:
En una funcin una variable no puede ser modificada

por ninguna sentencia externa a la funcin. Los nombres de las variables locales han de ser nicos. Las variables locales en las funciones no existen en memoria hasta que se ejecuta la funcin.

44

Variables globales
Son variables que se declaran fuera de la funcin y por defecto son visibles a cualquier funcin incluyendo la funcin main().

45

Variables dinmicas y de objetos


Las variables dinmicas o punteros tienen caractersticas que en algunos casos son similares tanto a las variables locales como a las globales. Al igual que una local, se crea y libera durante la ejecucin del programa. Difieren en que la dinmica se crea tras su peticin, en vez de automticamente, como las locales, es decir su a voluntad y se liberan cuando ya no son necesarias.

46

Al igual que las globales, se pueden crear variables dinmicas que son accesibles desde mltiples funciones. Los objetos son tipos de datos agregados que pueden contener mltiples funciones y variables juntas en el mismo tipo de dato.

47

Operadores aritmticos y su precedencia


Uno de los usos mas importantes de una computadora, es su habilidad de realizar clculos. Tenemos 5 operadores bsicos: + adicin -substraccin * multiplicacin / divisin % operador de modulo.

48

Expresin Aritmtica 2+5 34 - 3 4*5 5/2 34%5 -34%-5 4%6

Resultado

Comentario

7 31 20 2 4 -4 4 En este caso el cociente es 2, y el resto es 1, esto porque los operandos son enteros En esta divisin, el cociente es 6 y el resto es 4. En este caso el cociente es 6 y el resto es -4 En este caso el cociente es 0 y el resto es 4, que es el valor que estamos buscando.

Note que cuando hacemos las divisiones 34%5 y -34%-5 el cociente en ambos casos es el mismo, 6, pero los restos son diferentes, en 34%5 es 4 y en la divisin -34%-4 el resto es -4.

49

Operadores y expresiones
Una expresin es normalmente una ecuacin matemtica.

50

Orden de precedencia.
Cuando usamos mas de un operador aritmtico en una expresin, C++ usa las reglas de precedencia para evaluar la expresin, de la manera siguiente:
*, /, % : Mismo nivel de precedencia 2. +, : Mismo nivel de precedencia Nota: Cuando se evalan expresiones con operadores con el mismo nivel de precedencia, estas se evalan de izquierda a derecha.
1.

51

Ej. a. 3 * 7 6 + 2 * 5 / 4 + 6 b. 21 6 + 10 / 4 + 6 se evala la * c. 21 6 + 2 + 6 se evala / d. 15 + 2 + 6 se evala e. 17 + 6 se evala + f. 23 se evala + Se puede usar parntesis para modificar el orden de precedencia de los operadores, por ejemplo: 3 + 4 * 5 = 23 se evala primero la * y luego + (3 + 4) * 5 = 35 se evala primero la + y luego *
52

Es importante tener en cuenta que el tipo de datos char puede almacenar valores enteros y caracteres, por lo tanto se debe tener cuidado cuando se realizan operaciones con este tipo de datos. Existe una diferencia entre el numero entero 8 y el carcter 8. El valor del numero 8 es 8, pero el valor numrico de 8 es 56, que es el cdigo ASCII correspondiente a dicho carcter. En otras palabras: 8 + 7 = 15 8 + 7 = 56 + 55 = 111

53

Expresiones
Una expresin entera es una expresin en la cual todos sus miembros son enteros. Ej. 2 + 3 * 5 3 + x y/7 Una expresin de punto flotante, es una expresin en la cual todos sus miembros son nmeros de punto flotante. 12.8 * 17.5 34.50 x * 10.5 + y 16.2

54

Expresiones mixtas son aquellas que mezclan o contienen tanto operandos enteros como de punto flotante. Ej. 2 + 3.5 6 / 4 + 3.9

55

Dos reglas aplican cuando se evalan expresiones mixtas: 1. Cuando se evala un operador en una expresin mixta:
Si el operador tiene el mismo tipo de operandos, el operador es evaluado de acuerdo con el tipo del los operandos. Operadores enteros darn como resultado un entero, operadores reales, darn como resultado reales. b) Si tiene ambos tipos, entonces durante el calculo los enteros son cambiados a reales con la parte decimal igual a 0 y entonces el operador es evaluado.
a)
56

2. La expresin entera es evaluada de acuerdo con las reglas de precedencia.

57

Conversin de tipos(Casting)
Cuando un valor de un tipo es cambiado de manera automtica a otro tipo de datos decimos que una coercin de tipo implcito ha ocurrido. Si no se es cuidadoso con esto, resultados inesperados pueden ocurrir. Para evitar coercin de tipo implcito, C++ provee para conversin de tipo explicito el uso del operador cast.

58

El operador cast, es algunas veces llamado type conversin o type casting y toma la siguiente sintaxis: static_cast<tipo_Dato> (expresin). En esta expresin ocurre lo siguiente:
1. 2. 3.

La expresin es evaluada. El valor de la expresin luego de ser evaluada, es convertida al valor del tipo especificada por tipo_Dato. En C++ static_cast es una palabra reservada.

59

Tipo de dato string


El tipo de datos string es un tipo de datos definido por el programador. No esta directamente disponible para su uso en un programa igual que lo estn los dems tipos de datos simples discutidos anteriormente. Un string es una secuencia de cero o mas caracteres. Las cadenas en C++ estn encerradas en comillas dobles. Una cadena puede contener cero caracteres, lo cual es llamada una cadena nula, null o vaca, empty.

60

Cada carcter en una cadena tiene una posicin relativa en la cadena. Los string son base 0 es decir que el primer carcter es el 0, el segundo carcter ocupa el 1 y as sucesivamente. Ej. Programacin
Posicin 0 1 Caracter P r 2 o 3 g 4 r 5 a 6 m 7 a 8 c 9 i 10 o 11 n

61

62

Entrada de valores (input)


Antes de poder procesar informacin en un programa C++ la informacin debe ser cargada en la memoria principal. Este proceso se puede realizar de dos maneras diferentes:
1.
2.

Instruyendo a la computadora para que guarde la informacin en la memoria. Incluyendo sentencias en el programa para poner informacin en la memoria.

63

Almacenando data en variables:


Despus de declarar una variable, el prximo proceso es poner informacin dentro de dichas variables. Esto se puede hacer de dos maneras distintas: Usando sentencias de asignacin de C++ Usando sentencias de entrada o lectura (input, read).

64

Sentencias de asignacin C++


Una sentencia de asignacin toma la siguiente forma: variable = expresin; En una sentencia de asignacin, el valor debe coincidir con el tipo de datos de la variable. El proceso es como sigue:
1. 2.

La expresin de la derecha es evaluada Su valor es asignado a la variable (y por consiguiente a la posicin de memoria que esta representa) que se encuentra a la izquierda.

65

Nota:
1. 2.

Se dice que una variable esta inicializada, cuando se asigna o coloca un valor por primera vez en ella. En C++, el caracter = es llamado el operador de asignacin.

66

Salvando y almacenando el valor de una expresin:


Para guardar el valor de una expresin y poder usarlo despus en una expresin debemos hacer lo siguiente:
1. 2. 3.

Declarar la variable con el tipo apropiado de datos. Asignar el valor de la expresin a la variable que declaramos en el paso anterior. Donde quiera que necesitemos el valor de dicha expresin, guardado en la variable en el paso 2, lo hacemos usando la variable declarada en el paso 1.

67

Declarando e inicializando variables:


Cuando declaramos una variable, C++ no le asigna automticamente un valor significativo. En otras palabras, C++ no inicializa automticamente las variables. Esto no significa que no hay ningn valor en la variable despus de su declaracin. Cuando la variable es declarada, un valor es almacenado en ella.

68

Instrucciones de Input (read)


Una segunda forma de poner datos en variables desde los dispositivos estndares de entrada es usando es usando instrucciones C++s entrada/lectura input/read. Para poner datos en las variables usamos los operadores: cin y >> conjuntamente. Su sintaxis es: cin >> var1 >> var2 >> var3>> >> varn; Esto es lo que llamamos input (read) statement. En C++ el operador >> es llamado stream extraction operator
69

Inicializacin de variables:
Recuerde que como a las variables no se les asigna valores cuando estas son declaradas, estas pueden ser inicializadas cuando son declaradas, tambin pueden ser inicializadas usando sentencias de asignacin o de lectura.

70

Salida de informacin (Output)


Otro de los objetivos de un programa de computadoras es mostrar resultados o salidas en los dispositivos estndares de salida o standard output device. En C++, la salida por los dispositivos estndares de salida se consigue usando los operadores cout y <<. Su sintaxis es: cout << expresion1 << expresion2 << .. << expresin_n. donde expresion1 es una expresin o un manipulador.

71

En C++ esto es llamado una sentencia de salida. En C++, el operador << es llamado stream insercin operator u operador de insercin de flujo. La generacin de la salida con cout sigue dos reglas:
1.

2.

La expresin es evaluada y su valor es impreso en el punto de insercin actual en el dispositivo de salida. Un manipulador es usado para formatear la salida. El manipulador mas simple es el endl, el cual causa que el punto de insercin se mueva al inicio de la prxima lnea.

72

Secuencias de escape comnmente usadas:


Secuencia Significado \n \t \b \r \\ \ \ Newline Tab Backspace Return Backslash Comilla simple Comilla doble Descripcin El cursor se mueve al inicio de la prxima lnea El cursor se mueve a la prxima parada del tab. El cursor se mueve un espacio a la izquierda. El cursor se mueve al inicio de la lnea actual (no la prxima). Un carcter backslash \ se imprime. Una comilla simple se imprime Una comilla doble se imprime

73

Directivas de Preprocesador
Solo pocas funciones, tales como las aritmticas y de asignacin, estn definidas explcitamente en C++. La mayora de las funciones y smbolos necesarios para ejecutar un programa C++ son provistas como una coleccin de libreras. Cada librera tiene un nombre y son referenciadas por un archivo de cabecera, header file. Se debe usar directivas de preprocesador y el nombre del archivo para comunicarle al computador la localizacin del cdigo provisto en las libreras.

74

Operadores de asignacin
Adems de los operadores de asignacin ya visto (=), existen operadores que actan sobre variables de tipos simples como una notacin abreviada para expresiones utilizadas con frecuencia. Entre estos operadores tenemos:
1. 2.

++ --

Autoincremento Autodecremento

Autoincremento
Este operador es equivalente a sumarle uno a la variable : x = x+1; x++. En este caso el operador ++ puede tomar dos formas: prefija: En este caso el operador ira antes de la variable: ++x postfija: En este caso el operador ira despus de la variable: x++

Decremento
En este caso este operador equivale a restarle uno a la variable, o lo que es lo mismo: x=x-1; --x; o x--; En este caso el operador -- puede tomar dos formas: prefija: En este caso el operador ira antes de la variable: --x postfija: En este caso el operador ira despus de la variable: x--

&=, |= y ^=
Estos operadores cuando actan sobre valores lgicos, son operadores lgicos, si actan sobre enteros, son operadores de manipulacin de bits.

Operador condicional
El operador condicional ?:, es un operador ternario, es decir, que opera o requiere de tres operandos, y se utiliza en expresiones condicionales, devolviendo un resultado cuyo valor depende de si la condicin ha sido o no aprobada. El formato de dicho operador es: condicin ? Operando1 : operando2; Ej: comisin = (ventas > 10000) ? 0.10 : 0.05; Si las ventas son superiores a 10,000 se dar el 10%, de lo contrario el 5%.