Está en la página 1de 4

Programacin en C/C++

Tipos de datos elementales en C


char carcter int enteros float reales double reales de mayor rango void tipo nulo (no tiene rango ni valores asociados)

Operadores operacionales:

Operadores lgicos:

Modificadores de tipo: signed tipo con signo unsigned tipo sin signo long tipo largo short tipo corto Tipo char unsigned char signed char int unsigned int signed int short int long int unsigned long int float double long double Tamao de bits aprox. 8 8 8 32 32 32 16 32 32 32 64 80 Rango -128 a 127 0 a 255 -128 a 127 -2147483648 a 2147483647 0 a 4294967295 Igual que int -32.768 a +32.767 Igual que int Igual que unsigned int 3,410-38 a 3,410+38 1,710-308 a 1,710+308 3,410-4932 a 1,110-38

Conversin de tipos
Conversin implcita: la realiza de forma automtica el compilador.

Conversin explcita: la realiza el programador mediante un molde.

Identificadores
Reglas C: secuencia de letras: az, AZ, 09, junto con el smbolo _ el primer carcter no puede ser un dgito se distingue entre MAYSCULAS y minsculas hasta 31 caracteres de longitud. Palabras reservadas de C: auto, break, double, else, enum, int, struct, long, register, switch, case, typedef, char, extern, return, union, const, float, short, unsigned, continue, for, signed, void, default, goto, sizeof, volatile, do, if, static, while.

Conversin en asignaciones: el valor del resultado de la evaluacin de la expresin de la parte derecha se convierte al tipo de la variable de la izquierda. Ejemplo: int x; float f = 23.48; ......... x = f; //nos quedamos con la parte entera.

Estructura de un programador en C

Valores
Tipos de valores: Valores de tipo carcter: char letra=a; Una constante de carcter tiene un valor entero correspondiente en la tabla ASCII. Valores de tipo entero: int valor= 20; valor = 0x5F; (en hexadecimal) valor = 0177; (en octal) Valores de tipo coma flotante: float numero= 12.345; numero = -3.8e-3; numero = 46.34E-2;

Escritura en pantalla y lectura de teclado


1. Incluir la librera que permite el uso de las funciones de lectura/escritura de datos. #include <stdio.h> Realizarlas con: printf (escritura) y scanf (lectura) gets (lectura) y puts (escritura) getchar (lectura) y putchar (escritura)

2.

Expresiones
o o El operador de asignacin =, atribuye a una variable el resultado de una expresin o el valor de otra variable. Operadores aritmticos:

printf: printf (cadena a imprimir ms modificadores de formato , secuencia de variables, valores o expresiones separados por coma). Modificadores de formatos ms usados: %d - entero decimal con signo %u - entero decimal sin signo %f - real en coma flotante

Pgina | 1

%c - carcter %s - cadena de caracteres %x %X - entero hexadecimal %o - entero octal En la cadena de control se pueden indicar tambin: Saltos de lnea \n Tabulaciones \t Dobles comillas \ scanf: scanf (modificador de formato, variable precedida por el smbolo &); Formatos ms usados: %d - entero decimal con signo %u - entero decimal sin signo %f - float %lf - double %c - carcter %s - cadena de caracteres %x %X - entero hexadecimal %o - entero octal getchar: Lee un solo carcter del teclado. char c; -------c = getchar(); putchar: Muestra un carcter en pantalla. char c = a ; --------putchar(c); gets: Lee una secuencia de caracteres tecleada hasta que se pulsa la tecla Enter. puts: Muestra en pantalla una secuencia de caracteres e incluye al final un salto de lnea.

-------------------------------default: sentencia1; sentencia2; --------} La instruccin break se emplear para romper el caso, si procede. Instrucciones de iteracin: while, do while, for. while: while (condicin) instruccin o bloque de instruccin. do while: do instruccin o bloque de instrucciones while (condicin); for: for (inicializacin; condicin; modificacin) instrucciones o bloque de instrucciones

Declaracin de una funcin o prototipo


Tipo_valor_retorno nombre_funcin (lista de argumentos formales separados por coma); La declaracin de la funcin ha de hacerse antes del main y tras las directivas del procesador.

Cuerpo o definicin de una funcin


Es el conjunto de sentencias o instrucciones necesarias para que la funcin pueda realizar las tareas para las que ha sido prevista.

Activacin o llamada a una funcin


Las funciones se llaman (activan) mediante su nombre seguido de los argumentos actuales, dentro del programa principal (main) o dentro de otra funcin.

Paso de argumentos a una funcin


Paso por valor: si el argumento modifica su valor dentro de la funcin, una vez que la funcin finaliza, el argumento permanece inalterado. Paso por referencia: si el argumento modifica su valor dentro de la funcin, una vez que la funcin finaliza, el argumento mantiene el valor que tom dentro de la funcin.

Instrucciones en C
Instrucciones de seleccin: if, switch. Escritura de condiciones en C: una condicin se expresar mediante el uso de operadores relacionales y lgicos y su resultado ser VERDADERO o FALSO. Importante: en C el valor 0 se asocia a FALSO y cualquier valor distinto de cero a VERDADERO.

Arrays
Tipo_de_dato Nombre_del_Array [dimensin1] [dimensinN]; Arrays de una dimensin (vectores): int a, b, c; es equivalente a int vars[3];

if: if (condicin) { instruccin1; instruccin2; ---------} else { instruccin1; instruccin2; ---------} if else if: if (condicin1) instruccin o bloque de instrucciones else if (condicin2) instruccin o bloque de instrucciones else if (condicin3) instruccin o bloque de instrucciones else instruccin o bloque de instrucciones switch: switch (variable de tipo int o char) { case valor1: sentencia1; sentencia2; --------case valor2: sentencia1; sentencia2;

Para acceder a un elemento del vector se usa un ndice. El primer elemento del vector tiene asociado el ndice 0. a = 2; vars[0] = 2; b = 4; vars[1] = 4; c = 6; vars[2] = 6; Si modificamos un array dentro de una funcin, la modificacin permanece una vez finalizada la funcin. Arrays de dos dimensiones (matrices): Tipo_de_dato Nombre_del_Array[dimensin1] [dimensin2];

Cadena de caracteres
Es una secuencia de caracteres ASCII almacenados en un vector y donde el ltimo carcter del vector es el carcter nulo (\0). Ejemplos: char texto[] = California; (el vector texto es un vector de 11 elementos, donde el elemento undcimo representa el carcter nulo (\0)). char texto[11] = California; (declaramos un vector del tamao justo)

Pgina | 2

Manipulacin de cadenas de caracteres: 1. Incluir la librera string.h. #include <string.h> 2. Funciones incluidas en la librera: a) strcpy (cadena_destino, cadena_origen) Copia la cadena_origen en la cadena_destino. b) strcat (cadena_destino, cadena_origen) Pega (concatena) al final de la cadena_destino la cadena_origen. c) strlen(cadena) Devuelve la longitud de la cadena como un int. d) strcmp(cadena1, cadena2) Compara la cadena1 con la cadena2 y devuelve: 0 si cadena1 es exactamente igual a cadena2. <0 si cadena1 est antes que cadena2 en el diccionario. >0 si cadena1 est despus que cadena2 en el diccionario.

Liberacin de espacio reservado de memoria Deberemos liberar el bloque de memoria reservado para el contenido de un puntero en el caso de que ya no vaya a usarse mediante la funcin free(nombre_del_puntero). En el caso de una matriz, debemos liberar la memoria en dos pasos: for(int i = 0; i<=2; i++){ free(matriz[i]); } free(matriz); Arrays y punteros El nombre de un vector sin ningn ndice se considera un puntero, el cual apunta al primer elemento del mismo. Por otra parte, cualquier variable puntero puede apuntar a elementos del vector, lo que hace que los elementos del vector sean accesibles mediante otro puntero distinto al nombre del vector. Ejemplo: int a[10], *p; p = &a[2]; En cuanto a las matrices (arrays bidimensionales), el nombre de una matriz es un puntero que apunta al primer elemento de la matriz, que a su vez ser un puntero que apuntar a un vector. De esta forma, tambin podremos realizar reserva dinmica de memoria para un matriz cualquiera de n filas por m columnas durante la ejecucin de un programa.

Memoria en el lenguaje C
El acceso y el almacenamiento de direcciones de memoria se realizan mediante punteros. Puntero variable que contiene una direccin de memoria. Declaracin de una variable puntero: tipo_de_dato *nombre_de_puntero. Ejemplo: int *puntero Importante: El nombre del puntero es un identificador similar al de una variable convencional o al de una funcin, y que por tanto debe ajustarse a las reglas de C sobre identificadores. Antes de ser usada, una variable de tipo puntero debe ser inicializada. El operado & y el operador * (ambos tienen mayor prioridad que los operadores aritmticos) & devuelve la direccin de memoria de la variable especificada tras l. Ejemplo: int a = 23; int *p; p = &a; * devuelve el valor almacenado en la direccin especificada tras l. Ejemplo: int a = 23, b; int *p; p = &a; b = *p; Operaciones aritmticas con los punteros: suma y resta Slo se puede sumar o restar un valor entero a un puntero, teniendo en cuenta la siguiente regla: en cada operacin, de suma o resta, la direccin contenida en la variable de tipo puntero ser desplazada, hacia delante (suma) o hacia atrs (resta), un nmero de bytes mltiplo del tamao del tipo del puntero. Ejemplo: int x = 10, *p1, *p2; p1 = x; p2 = p1+3; //la direccin contenida en p2 ser //incrementada tres veces el tamao //en bytes que ocupa un entero. Reserva dinmica de memoria Es posible reservar un espacio en memoria de tamao determinado para que el puntero apunte a l. Dicha operacin se realiza mediante una funcin denominada malloc(nmero_de_bytes), incluida dentro de la librera de C stdlib.h. Ejemplo: int *p; p = (int *) malloc(sizeof(int)*10); Reservamos memoria dinmica para almacenar diez enteros (vector). int **matriz; matriz=(int **)malloc(sizeof(int *)*3); for(int i=0;i<=2;i++){ matriz[i]=(int *)malloc(sizeof(int)*3); } Reservamos memoria dinmica para almacenar nueve enteros (matriz). La funcin malloc(), siempre devolver una direccin de memoria a una zona de memoria libre, de tantos bytes como le especifiquemos.

El procesador en el lenguaje C
Operaciones a nivel de bit

Mscaras de bits en el lenguaje C El operador AND (X AND 0 = 0 y X AND 1 = X) puede emplearse con una mscara para: Forzar bits a cero; Conocer si un bit est a uno o a cero; Extraer un grupo de bits. El operador OR (X OR 0 = X y X OR 1 = 1) puede emplearse para: Forzar bits a uno. El operador XOR (X XOR 0 = X y X XOR 1 = X ) puede emplearse para: Complementar bits. Desplazamiento de bits en el lenguaje C >> y << equivalen a dividir y multiplicar, respectivamente, por potencias de 2, y tambin se utilizan para componer y descomponer nmeros. Ejemplo 1: separar un nmero de 16 bits en 2 bytes:

Pgina | 3

Ejemplo 2: componer un nmero de 16 bits a partir de 2 bytes distintos

Finalizacin de hilos. Una vez acabemos la ejecucin del hilo debe de ejecutarse la funcin CloseHandle(), para indicarle al sistema operativo que el hilo ha finalizado y debe ser cerrado. El programa principal tambin es un hilo, por lo que si finaliza antes de que finalice su hilo hijo, ste tambin lo har. Para evitar esto, se utilizar la funcin WaitForSingleObject(), cuyo prototipo es el siguiente:

Especificando INFINITE en el parmetro dwMilliseconds, esperaremos de forma indefinida a que el hilo hijo finalice. Tambin podemos definir mltiples hilos a la vez utilizando un vector de hilos. Cada una de las posiciones del vector contendr el HANDLE o identificador del hilo correspondiente. Existe una instruccin que nos permite esperar hasta un mximo de 64 hilos a la vez, es la funcin WaitForMultipleObjects(), cuyo prototipo es el siguiente:

Adiccin de libreras en C/C++


Uso de libreras en C estticas: 1. 2. Crearemos un proyecto y un fichero donde guardar el cdigo C++ del programa, como hemos hecho hasta ahora para las prcticas. Abriremos la carpeta que tendremos en el escritorio y localizaremos el fichero con extensin cpp, que ha generado la aplicacin para ubicar el cdigo de nuestro programa principal. En dicho directorio copiaremos los dos ficheros de librera: el archivo con extensin cpp y el archivo con extensin h. Ahora agregaremos el fichero de cabecera existente (concretamente el que hemos copiado en el paso anterior, extensin h). Para esto, seleccionaremos Proyecto => Agregar elemento existente, seleccionando el archivo .h. El programa detectar que se trata de un fichero de cabecera y lo ubicar correctamente en la carpeta de Archivos de encabezado, dentro del Explorador de soluciones. Repetiremos los pasos dados anteriormente, solo que ahora agregaremos el fichero de cuerpo de la librera, con extensin cpp. En este caso, el programa lo ubicar en los Archivos de cdigo fuente.

3.

Si queremos esperar a todos los hilos de un vector de hilos, fijaremos el valor de fWaitAll a TRUE. Si fijamos el valor de dicha variable a FALSE, solamente esperaremos a que finalice uno de ellos. Especificando INFINITE en el parmetro dwMilliseconds, esperaremos de forma indefinida a que los hilos hijos finalicen. Ejemplo:

4.

Importante. Tambin ser necesario ejecutar la instruccin CloseHandle(), tantas veces como hilos tengamos. Paso de parmetros. El paso de parmetros a un hilo se realiza en el momento de la creacin del hilo. Ejemplo:

Recuerda que, para poder emplear la librera deberemos utilizar la sentencia #include, con el nombre de la librera entre comillas.

Programacin en Tiempo Real y Sistemas Operativos


La creacin de un hilo es una caracterstica que permite a un programador realizar varias tareas a la vez aprovechando al mximo los recursos de una mquina. Los distintos hilos de ejecucin pueden compartir recursos: el espacio de memoria para el almacenamiento de variables, los archivos, etc. Para emplear hilos deberemos incluir la librera Windows.h. Importante: Solamente se permitir emplear variables globales para la comunicacin entre los hilos y el programa principal, cuando tengan que intercambiara algn tipo de informacin. Las variables globales se declaran junto a los prototipos de las funciones, una vez que se han incluido las libreras que usaremos en nuestro programa. Creacin de hilos. Prototipo: Seccin Crtica. Entendemos por seccin crtica, en un programa, al conjunto de instrucciones en el cual se accede a un recurso compartido (en nuestro caso, a una variable compartida) que no debe ser accedido por ms de un proceso o hilo en ejecucin simultneamente. La seccin crtica terminar en un tiempo determinado y el hilo slo tendr que esperar un perodo determinado de tiempo para poder entrar a ella. En C++ las secciones crticas se declaran como variables globales (podemos tener ms de una seccin crtica, adems de que deben ser inicializadas en el programa o funcin principal):

Ejemplo:

Se ejecutar la funcin especificada en LPTHREAD_START_ROUTINE, y el prototipo de estas funciones ser:

Todos los hilos deben terminar con la instruccin return 0, para indicar que no ha habido ningn problema en su ejecucin.

Pgina | 4

También podría gustarte