Cap. 02 - Elementos Basicos de C

79
Elementos básicos de C++ Fuente: Luis Joyanes A. 1

Transcript of Cap. 02 - Elementos Basicos de C

Fuente: Luis Joyanes A.

1

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.

2

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.

3

Directivas del preprocesadorEl 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.

4

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.

5

La directiva #includeEsta 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 #include nombrearchivo.h6

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

7

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

8

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().

9

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

10

Funciones definidas por el usuarioUna 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

Tokenstokens 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 long17

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 78918

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 datosTipo Ejemplo Tamao Rango

charshort int unsigned int long float double long double

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

12 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

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

27

Constantes literalesSon 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 #defineLas 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 constLos 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 constconst tipoDato nombreConstante = valorConstante; Eje. const unsigned DIAS_DE_SEMANA= 7; const int HORAS_DEL_DIA = 24;

35

36

IdentificadoresSecuencia 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 variableEs 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 variableEs 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 variabletipoDatos nombreVariable = Expresion;

43

Variables localesSon 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 globalesSon 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 objetosLas 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 precedenciaUno 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 expresionesUna 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

ExpresionesUna 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 (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 stringEl 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. ProgramacinPosicin 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 operator69

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