viernes, 9 de mayo de 2014

Estructura general

Antes de continuar con lo siguiente les voy a mostrar un ejemplo (Ejemplo 3.2), el enunciado dice:
El siguiente programa copia un mensaje en un array de caracteres y lo imprime en la pantalla. Ya que printf() y strcpy() (una función de cadena) se utilizan, se necesitan sus archivos de cabecera específicos.

/*  nombre del archivo demoinc2.c
    utiliza dos archivos de cabecera
*/
#include <stdio.h>
#include <string.h>

int main(){
    char mensaje[20];
    strcpy (mensaje, "Atapuerca\n";
    /*  Las dos líneas anteriores también
        se pueden sustituir por
        char mensaje[20] = "Atapuerca\n";
    */
    printf(mensaje);
    return 0;
}

Para explicar un poco el programa anterior, tenemos que inicialmente declara dos librerías (<stdio.h> que es la librería estándar de entrada y salida, y la librería <string.h> que engloba ciertas funciones de cadena, que en este caso nos servirá para utilizar la función strcpy()). Luego tenemos la función main en donde se desarrolla todo lo que se desea, en donde declaramos una variable de tipo char y posteriormente utilizamos la función strcpy() la cual su función no es mas que copiar "Atapuerca\n" en la variable mensaje. Y finalmente se procede a imprimir por pantalla o consola la variable mensaje y la función main finaliza con un retorno de valor 0.
Hay que tener en cuenta que los archivos de cabecera o conocidos también como librerías, van con la extensión .h mientras que los archivos fuente con la extensión .c

Ahora si prosigamos con el siguiente tema =)

Creación de un programa

Una vez creado un programa en C como el anterior, a este se lo debe ejecutar. Los pasos para realizar dependerá del compilador que utilizaremos. A continuación se mostrarán los pasos más generales escritos en la página 82 del libro escrito en la bibliografía:
Ø Al utilizar un editor de texto  para escribir el programa y posteriormente grabarlo en un archivo; esto constituye el código fuente del programa.
Ø Después se compila el código fuente; en otras palabras se traduce el código fuente en código objeto (es decir lenguaje máquina, es entendible por el computador).
Ø Finalmente se enlaza el código objeto con las bibliotecas correspondientes (una biblioteca C contiene código objeto de un grupo de funciones las cuales realizan tareas, tales como mostrar en pantalla alguna información o de realizar un cálculo de promedio de varios números.

El proceso de ejecución de un programa en C

El proceso de ejecución de un programa por lo general no suele funcionar a la primera vez, esto se da porque casi siempre existen errores de sintaxis (por ahí nos olvidamos de poner un “;”) o en tiempo de ejecución. El siguiente flujograma representa el proceso completo de un programa:

Depuración de un programa en C

Muy pocas veces los programas suelen funcionar correctamente la primera vez que se los ejecuta. Los programas producen errores que son detectados, aislados y corregidos. Todo este proceso de encontrar los errores se llama depuración de un programa.
El momento que el compilador encuentra un error, éste nos muestra un mensaje de error el cual nos indicará que se ha cometido un error. A veces el interpretar estos mensajes de error suelen ser un poco difícil y se suele llegar a conclusiones erróneas, y también varían de un compilador a otro.
Existen tres tipos de errores: de sintaxis, lógicos y de regresión.

De sintaxis

Estos errores son aquellos que se producen debido a las reglas de la gramática del lenguaje. Los errores típicos son por escritura incorrecta de palabras reservadas o falta de signos de puntuación (punto y coma, comillas, entre otros). Estos son los errores más fáciles de encontrar, puesto que ya son detectados y aislados por el compilador.

Lógicos

Estos representan a los errores del programador en el diseño del algoritmo y posterior programa. Estos errores son más difíciles de encontrar puesto a que no suelen ser detectados por el compilador. A continuación se muestra un ejemplo mediante el cual se podrá entender de mejor manera este tipo de errores.
double peso = densidad * 5.25 * PI * pow(longitud, 5)/4;
A simple vista la sentencia no contiene un error, pero resulta que el 3er asterisco debía ser +. En este caso el compilador no produce ningún mensaje de error de sintaxis porque no se ha cometido ningún error, y se procederá a compilar el programa y se ejecutará bien, aunque a la final no producirá el resultado que se desea.

De regresión

Estos errores son aquellos se crean accidentalmente cuando se intenta corregir un error lógico. Los errores de regresión son comunes , y son fáciles de leer y corregir.
Una ley no escrita es que: <<un error se ha producido, probablemente, por el último código modificado>>[1]

Mensajes de error

Los compiladores emiten mensajes de errores o una advertencia en la fase de compilación, de enlace o de ejecución de un programa.
Tenemos los errores se agrupan en tres grandes grupos los cuales son los siguientes:
Ø Errores fatales; algunos de estos indican un error interno del compilador. Al momento que se da uno de estos errores, la compilación se detiene en ese instante, procedemos a tomar la acción apropiada y después volvemos a inicial la compilación.
Ø Errores de sintaxis; estos son los errores típicos de sintaxis. El compilador terminará la fase actual de compilación y se detiene.
Ø Advertencias; esto no impide la compilación, esto solo nos indican condiciones que son un poco sospechosas pero son legítimas como parte del lenguaje.

Errores en tiempo de ejecución

Existen dos tipos de errores en tiempo de ejecución, por un lado están los que son detectados por el sistema mientras se ejecuta un programa en C; y del otro lado están los que permiten la terminación del programa pero producen resultados incorrectos.
Estos errores pueden ocurrir como resultado de que un programa obliga a la computadora a realizar una operación ilegal, como por ejemplo, dividir un número para 0.

Elementos de un programa en C

En lenguaje C, un programa consta de uno o más archivos. Estos archivos son traducidos en diferentes fases (1ra fase es el pre-procesado, esto hace la inclusión de archivos y la sustitución de macros; el resultado de este pre-procesado es una secuencia de tokens).

Tokens

Estos son los elementos léxicos de los programas, los cuales existen 5 clases que son: identificadores, palabras reservadas, literales, operadores y otros separadores.

Identificadores

Los identificadores son una secuencia de caracteres, letras, dígitos y guión-bajo. Donde el primer carácter debe ser una letra (algunos compiladores admiten el carácter “_”). Cabe resaltar que las letras mayúsculas y minúsculas son distintas. Por ejemplo:
Nombre   apellido edad Dia_Nacimiento

Palabras reservadas

Una palabra reservada es una característica asociada con algún significado especial para cualquier lenguaje de programación. Estas palabras reservadas no se pueden utilizar como nombre de identificador o de una función. Por ejemplo:
enum    char int  float    void

Comentarios

De este tema ya se habló un poco en el tema anterior =) =)

Signos de puntuación y separadores

Todas las sentencias en lenguaje C deben terminar con “;” y tenemos otros signos de puntuación los cuales son:
¡  %  ^  &  *  (  )  -  +  =  {  }  ~
[  ]  \  ;  ’  :  <  >  ?  ,  .  /  ”

Archivos de cabecera

Los archivos de cabecera son archivos especiales que contienen declaraciones de elementos y funciones de biblioteca. Para acceder y utilizar estos macros, constantes, tipo y funciones almacenados en una librería procedemos a utilizar la directiva #include para insertar el archivo de cabecera correspondiente a nuestro programa. Por ejemplo para utilizar la función pow() añadimos la librería math.h con la directiva:
#include <math.h>

Bibliografía y Net-grafía:

Luis Joyanes Aguilar, Ignacio Zahonero Martinez. (1999). PROGRAMCACIÓN EN C. Metodología, algoritmo y estructura de datos. Madrid: Editorial McGraw-Hill.






[1] (Luis Joyanes Aguilar, Ignacio Zahonero Martinez, 1999)

No hay comentarios:

Publicar un comentario