martes, 18 de abril de 2017

Componente de C++
·       Directivo

Las directivas de pre procesamiento ofrecen la capacidad de omitir condicionalmente secciones de los archivos de código fuente, con el fin de notificar errores y advertencias, así como de delimitar regiones características del código fuente. El término "directivas de pre procesamiento" se utiliza por motivos de coherencia con los lenguajes de programación C y C++. En C#, no existe un paso de pre procesamiento individual; las directivas de pre procesamiento se procesan como parte de la fase de análisis léxico.
pp-directive:
pp-declaration
pp-conditional
pp-line
pp-diagnostic
pp-region
Imagen relacionada
A continuación se indican las directivas de pre procesamiento disponibles:
·         #define y #undef, que permiten definir y anular respectivamente, la definición de símbolos de compilación condicional (Sección 2.5.3).
  • #if, #elif, #else y #endif, para omitir de forma condicional secciones de archivos de código fuente (Sección 2.5.4).
  • #line, que permite controlar los números de línea de errores y advertencias (Sección 2.5.7).
  • #error y #warning, que permiten emitir errores y advertencias respectivamente (Sección 2.5.5).
  • #region y #endregion, para marcar de forma explícita secciones del código fuente (Sección 2.5.6).
Una directiva de pre procesamiento siempre ocupa una línea independiente del código fuente y siempre empieza por un carácter # y un nombre de directiva de pre procesamiento. Puede haber un espacio en blanco antes del carácter # y entre éste y el nombre de la directiva.
Una línea del código fuente que contiene una directiva #define, #undef, #if, #elif, #else, #endif o #line puede terminar con un comentario en una línea. Los comentarios delimitados (el estilo de comentarios /* */) no están permitidos en las líneas de código fuente que contienen directivas de pre procesamiento.
Las directivas de pre procesamiento no son símbolos (tokens) y no forman parte de la gramática sintáctica de C#. No obstante, las directivas de pre procesamiento pueden utilizarse para incluir o excluir secuencias de símbolos y, de esta forma, pueden afectar al significado de un programa de C#. Por ejemplo, una vez compilado, el programa:
#define A
#undef B
class C
{
#if A
   void F() {}
#else
   void G() {}
#endif
#if B
   void H() {}
#else
   void I() {}
#endif
}
produce como resultado exactamente la misma secuencia de símbolos que el programa:
class C
{
   void F() {}
   void I() {}
}
Por lo tanto, aunque los dos programas sean muy diferentes léxicamente, sintácticamente son idénticos.

#include <iostream> // una directiva al preprocesador
Uso de directivas del preprocesador
En el programa de ejemplo hay una directiva para el preprocesador, que se identifica por el símbolo #:
C++ utiliza un preprocesador, al igual que su predecesor, el lenguaje C. Un preprocesador es un programa que actúa sobre el código fuente antes que el propio compilador. En la sentencia para el preprocesador #include, su acción es simple, reemplaza la sentencia por el contenido de los archivos citados en la sentencia #include. El nombre del archivo está encerrado entre los símbolos "<" y ">".
En este caso se ha hecho referencia al archivo iostream. Este archivo posee las definiciones utilizadas por cout para visualizar el mensaje. Sin esta directiva la compilación no hubiera procesado la sentencia cout ni hubiera reconocido los símbolos de los operadores de inserción (<<) ni de extracción (>>). Hay otras sentencias para el preprocesador que se verán más adelante.
Los compiladores C++ traen consigo muchos archivos de encabezados (header files) que brindan soporte a distintas ramas de funcionalidades. En C este tipo de archivos lleva la extensión .h (por header file), pero en C++ no lleva ninguna extensión en particular. En el ejemplo se hace referencia al archivo de encabezado <iostream>, un archivo que brinda soporte a las funciones de entrada y salida.
La versión C de <iostream> es <iostream.h>. Pero en este caso se ha incluido la versión C++, por eso se debe incluir la directiva using namespace.

#include <iostream> // una directiva al preprocesador
using namespace std;

namespace es una colección de nombres y de identificadores C++. El uso de namespace impide la aparición de conflictos entre bibliotecas que usan un mismo nombre o identificador. Esto significa que la variable cout que se usa en la función y que está definida en <iostream> se llama en realidad std::cout. De esta manera se puede hacer referencia a cout sin tener que codificar siempre el prefijo std.

·       Declaración Global

El lugar donde sea declarada una variable afectara el uso que el programa quiera hacer de esa variable.
Las reglas básicas que determinan como una variable puede ser usada dependen de 3 lugares donde se puede declarar una variable.
En primer lugar es dentro de cualquier función o procedimiento a estas se les llama variables locales y solo pueden ser usadas por instrucciones que estén dentro de esa función o procedimiento.
En segundo lugar es como parámetro de una función donde después de haber recibido el valor podrá actuar como variable local en esa función o procedimiento.
En esencia una variable local solo es conocida por el código de esa función o procedimiento y es desconocida por otras funciones o procedimientos.
En tercer lugar es fuera de todas los procedimiento o funciones a este tipo de variables se les llama variables globales y podrán ser usadas por cualquier función o procedimiento del programa, sin embargo hay que agregarle la palabra reservada STATIC y a partir del momento en que se declara, acompañada de dicha palabra reservada static se considera y puede usarse como variable global.
En programación en serio no es acostumbrado usar muchas variables globales por varias razones, una de ellas es que variables globales están vivas todo el tiempo de ejecución del programa y si una global solo la ocupan unos cuantos procedimientos no tiene caso que este viva para todo el resto, otra razón es que es peligroso tener variables globales porque todo el conjunto de procedimiento y funciones que componen un programa tienen acceso o comparten su valor y se corre el riesgo de que inadvertidamente alguno de ellos modifique su valor.
prog13.cpp
#include <stdio.h>
#include <conio.h>
#include <string.h>
// Recordar declarar primero proc y funciones
void proc1();
// variables globales
float base, altura, area;
void main() {
clrscr();
//capturando datos
printf("dame base: ");scanf("%f",&base);
printf("dame altura: ");scanf("%f",&altura);
//llamando procedimiento
proc1();
}
void proc1(){
// Área de operaciones
Área = base * altura / 2;
// Área de construcción de página de salida
printf(" area =%0.2f",area);
getchar();getchar();
}
Es muy agradable trabajar sin parámetros pero recordar la nota de arriba que no es muy bueno usar muchas variables globales:
Corrida:
Resultado de imagen para Declaracion global de C++
TAREAS PROGRAMACION C++
1.- BOLETA DE CALIFICACIONES Y SOLO USAR DOS VARIABLES GLOBALES
2.- UNA TABLA DE MULTIPLICAR Y SOLO USAR UNA VARIABLE GLOBAL

·       Función main

En primer lugar, la función nunca debe ser declarada como void. Ésta es una mala práctica que se suele cometer, sobre todo al comenzar la andadura con la programación (lo admito, ¡yo también lo hacía al principio!); si bien algunos compiladores lo aceptan, los más estrictos se quejarán en forma de warning o error. Así que hay que usar int para declarar el tipo, o incluso también se puede obviar, porque el compilador le asignará este tipo por defecto.
Resultado de imagen para Directiva de C++
void main() // MAL: algunos compiladores se quejarán
{
}
int main() // CORRECTO: la forma adecuada de hacerlo
{
}
main() // CORRECTO: no es la mejor, pero los compiladores que sigan el estándar la darán por buena
{
}
Bien, ahora atacaremos los valores de retorno. Esto es muy sencillo; como hemos declarado la función del tipo int, al llegar al final de su ejecución tendremos que devolver un valor. Normalmente se devuelve 0 para indicar que el programa ha finalizado correctamente, y cualquier otro valor para indicar una ejecución anormal. Pero, si queremos ser completamente estrictos (en algunas plataformas el significado de los valores se invierte, y 0 puede significar que ha ocurrido un fallo de ejecución), emplearemos las macros EXIT_FAILURE y EXIT_SUCCESS. Como su nombre bien indica, la primera devuelve una ejecución errónea, y la segunda indica al proceso padre que todo ha ido como debería. Sus definiciones se encuentran en stdlib.h para el lenguaje C y cstdlib.h para C++.
int main()
{
  return EXIT_SUCCESS;  // El programa terminó la ejecución debidamente
}
int main()
{
  return EXIT_FAILURE;  // El programa encontró algún fallo y no pudo finalizar la ejecución correcta
}
int main()
{
  return 5;  // Valor de retorno personalizado; de esta manera podemos indicarle al proceso que invoca a nuestro programa que ha ocurrido algo determinado (por ejemplo, que no se ha llamado al programa con determinados parámetros)
}
Y por último, hablaremos de los parámetros de la función. Hasta ahora, la hemos definido sin ningún tipo de parámetros, porque según el estándar esto puede hacerse perfectamente; sin embargo, main acepta dos parámetros que se explicarán a continuación (hay que recordar que siempre es o cero o dos parámetros, en caso de emplear cualquier otro número el compilador dará warning o error, dependiendo de lo quisquilloso que sea):
Primer parámetro: tipo int. Por costumbre se le llama argc, diminutivo de argument count, pero se le puede llamar como se desee. Como su propio nombre indica, contiene el número de argumentos que se le pasan al programa. Hay que tener en cuenta que el primer argumento de un programa siempre será el nombre de este, de tal manera que si hacemos la siguiente ejecución


:> miprograma param1 param2
Nuestro parámetro argc valdrá 3, y por consiguiente, si llamamos al programa sin parámetros, argc equivaldrá a 1.
  • Segundo parámetro: tipo char**. Aunque también puede especificarse como char* argv[], lo importante es indicar que estamos trabajando con un doble puntero a char, esto es, un vector de vectores de caracteres, o para simplificar, un vector de cadenas. Como se ha indicado anteriormente, el nombre más común para llamar a este parámetro es argv, contracción de argument vector, y al principio puede resultar un poco lioso lidiar con él, más aún si no se han usado punteros nunca. Así que simplemente hay que recordar que estamos trabajando con un vector de cadenas, y que cada posición (recordad, su extensión va desde hasta argc-1) guarda uno de los argumentos empleados al llamar a nuestro programa. Para la ejecución de ejemplo del punto anterior, esta sería la traza de nuestros parámetros: 
argc = 3;
argv[0] = “miprograma”;
argv[1] = “param1”;
argv[2] = “param2”;


·       Sintaxis para declarar variables
 Para declarar una variable, basta con indicar su tipo y su nombre. Existen ciertas convenciones en cuanto al nombre de las variables. Algunos prefieren separar las partes de un nombre con '_', otros prefieren escribir una mayúscula para separarlas. Ejemplo: 
int recetaDelMes;

int receta_del_mes;
Lo importante es que utilices siempre la misma convención para tus programas. 
Asignar un valor
Es posible asignar un valor a una variable al momento de declarar
int recetaDelMes = 12301;

También es posible declarar varias variables en una misma línea, pero en este caso, todas las variables de la línea tendrán el mismo tipo. 

int recetaDelMes = 12301, recetaDelAño = 45644545;

Reglas para declarar una variable

1. Tener el mismo nombre que una “palabra reservada” del lenguaje.
Explicación: los lenguajes de programación tienen “palabras reservadas“, osea que esas palabras solo pueden ser usadas por el programa, por eso llevan el nombre de “reservadas“, pues si supongamos el caso de que un lenguaje de programación “X” tiene sus palabras reservadas... entre las cuales está: “ingresar“, entonces eso quiere decir que el usuario NO debe declarar una variable con el nombre “ingresar“, porque va a tener conflictos más adelante.
2. Sólo pueden ser letras, dígitos y el guión bajo o subguión.
Explicación: pues en los lenguajes de programación hay sintaxis que deben cumplirse al pie de la letra, entonces dice que las variables solo pueden llevar letras, números y el subguión, ejemplo:
La siguiente variable está bien declarada: programando19
La siguiente variable está mal declarada: %&programando-19
Vemos que insertó caracteres especiales, además de que uso el guión normal (no el subguión), por lo tanto puede que el programa entienda que es una resta, entonces está mal declarado por sintaxis.
3. Deben comenzar por un carácter (letra).
Explicación: por sintaxis como ya hemos visto, deben cumplir con estas reglas, entonces no se puede comenzar con un número, ya que se debe comenzar por una letra como dice la regla, ejemplo:
La siguiente variable está bien declarada: paso a paso
La siguiente variable está mal declarada: 89pasos
4. Deben iniciar con un carácter (no número) como vimos en la regla 3, y también puede comenzar con un guión bajo (_), ejemplo:
La siguiente variable está bien declarada: _descuento
La siguiente variable está mal declarada: -descuento
La siguiente variable está mal declarada: descuento-
5. No se les pueden llevar espacios en blanco.
Explicación: las variables no pueden llevar espacios en blanco, solo pueden ser separadas por un signo dedicado a ser usado como un espacio, el cual es el subguión ( _ ), entonces en una variable cuando vean un subguión, prácticamente están separando algo ( para que no parezca una enlazadas), ejemplo:
La siguiente variable está bien declarada: eddy_19
La siguiente variable está mal declarada: eddy 19
6. No pueden llevar acento (tilde), ejemplo:
La siguiente variable está bien declarada: numero
La siguiente variable está mal declarada: número


Ejemplos

Ejemplo 1: La declaración de una variable para almacenar la edad de una persona se escribe:

int edad;
Ejemplo variable edad en memoria
Ejemplo 2: Para declarar varias variables del mismo tipo de dato se puede escribir:

int edad;
int numero_de_hijos;

Ejemplo 3: O también, en la misma línea separadas por el carácter coma (,):

int edad, numero_de_hijos;
Ejemplo variables edad y numero_de_hijos en memoria
Ejemplo 4: Si se desea declarar una variable para almacenar un número entero y que, inicialmente, contenga el valor 35, se debe escribir:

int numero = 35;
Ejemplo variable numero en memoria
Ejemplo 5: A continuación, se muestra la declaración de una variable para almacenar una letra del alfabeto y que, inicialmente, contenga el valor 'Z':

char letra = 'Z';

Ejemplo 6: Para declarar una variable que pueda almacenar el nombre de una persona y que, inicialmente, contenga el valor "Isabel", escribiremos:

char nombre[7] = "Isabel";

Un dato de tipo cadena es un dato compuesto (estructurado), debido a que está formado por una agrupación de caracteres. Pues bien, dicha agrupación se define por medio de un array. Un arrayagrupa, bajo el mismo nombre de variable, a una colección de elementos (datos) del mismo tipo.

Para declarar un array de caracteres, después del identificador de la variable, se tiene que escribir, entre corchetes "[]", el número de caracteres que se van a almacenar en el array, más uno. Por tanto, en este caso, puesto que "Isabel" tiene seis caracteres, hay que escribir un 7 entre los corchetes.

Se tiene que escribir un número más, porque en la memoria se va a reservar espacio para los seis caracteres de la cadena "Isabel", más uno, conocido éste como el carácter nulo, el cual se representa mediante una barra invertida y un cero (\0). El sistema se encarga de "poner" dicho carácter, que indica el fin de la cadena.

Por consiguiente, en la memoria se almacenarán siete caracteres consecutivos:
Ejemplo array nombre en memoria
Los caracteres del array pueden ser referenciados mediante el identificador del mismo, seguido de un número entre corchetes. A dicho número, de manera formal, se le llama "índice", y puede oscilar entre el valor 0 y n-1, siendo n el número de caracteres que pueden ser almacenados en memoria en el array, en este caso 7.
<nombre_de_la_variable>[<índice>]
Por ejemplo, nombre [3] hace referencia al espacio de memoria donde está el carácter 'b'.

Ejemplo 7: Si se declara la variable de tipo cadena:

char nombre[7] = "June";

En memoria tendremos:
Ejemplo array nombre June en memoria
Fíjese que, en esta ocasión, el array de caracteres nombre ha sido inicializado con el valor "June". De manera que, el fin de la cadena se encuentra en nombre[4], y no en el último espacio de memoria reservado para el array, ya que, "June" tiene, solamente, cuatro caracteres.


·       Biblioteca de Funciones

Librerías Estándar de C++ (Standar Template Library o STL)
A continuación pondré algunas de las librerías de uso más común de C++ y que forman parte de las librerías estándar de este lenguaje.
Resultado de imagen para Biblioteca de funciones de C++
·         fstream:
Flujos hacia/desde ficheros. Permite la manipulación de archivos desde el programar, tanto leer como escribir en ellos.

·         iosfwd:
Contiene declaraciones adelantadas de todas las plantillas de flujos y sus typedefs estándar. Por ejemplo ostream.

·         iostream:
Parte del a STL que contiene los algoritmos estándar, es quizá la más usada e importante (aunque no indispensable).

·         La biblioteca list:
Parte de la STL relativa a contenedores tipo list; listas doblemente enlazadas

·         math:
Contiene los prototipos de las funciones y otras definiciones para el uso y manipulación de funciones matemáticas.

·         memory:
Utilidades relativas a la gestión de memoria, incluyendo asignadores y punteros inteligentes (auto_ptr).
"auto_ptr" es una clase que conforma la librería memory y permite un fácil manejo de punteros y su destrucción automaticamente.

·         Biblioteca new:
Manejo de memoria dinámica

·         numeric:
Parte de la librería numérica de la STL relativa a operaciones numéricas.

·         ostream:
Algoritmos estándar para los flujos de salida.

·         queue:
Parte de la STL relativa a contenedores tipo queue (colas de objetos).

·         Librería stdio:
Contiene los prototipos de las funciones, macros, y tipos para manipular datos de entrada y salida.

·         Librería stdlib:
Contiene los prototipos de las funciones, macros, y tipos para utilidades de uso general.

·         string:
Parte de la STL relativa a contenedores tipo string; una generalización de las cadenas alfanuméricas para albergar cadenas de objetos. Muy útil para el fácil uso de las cadenas de caracteres, pues elimina muchas d elas dificultades que generan los char

·         typeinfo:
Mecanismo de identificación de tipos en tiempo de ejecución

·         vector:
Parte de la STL relativa a los contenedores tipo vector; una generalización de las matrices unidimensionales C/C++

·         forward_list
Esta librería es útil para implementar con gran facilidad listas enlazadas simples.

·         list
Permite implementar listas doblemente enlzadas (listas enlazadas dobles) facilmente.

·         iterator
Proporciona un conjunto de clases para iterar elementos.

·         regex
Proporciona fácil acceso al uso de expresiones regulares para la comparación de patrones.

·         thread
Útil para trabajar programación multihilos y crear múltiples hilos en nuestra aplicación.

Sintaxis de declaración de variables

#include<stdio.h>
#include<conio.h>
Main ()
{
int a,b;
Printf (ˆEscribe el primer númeroˆ)
Scanf ( ˆ % f , & a );
Printf (ˆEscribe el segundo número a sumar);
Scanf ( ˆ % f , & b );
Printf ˆEl resultado es :ˆ
%f, ( a + b ) ;
Getch ()
}







Componente de C++ ·        Directivo Las directivas de pre procesamiento ofrecen la capacidad de omitir condicionalmente secciones de...