LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA INSTITUTO DE EDUACIÓN DIGITAL DEL ESTADO DE PUEBLA ANTOLOGÍA PROGRAMACIÓN LENGUAJE C La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 1 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA ÍNDICE Página ÍNDICE………………………………………………………………..…………………………2 PROPÓSITO DE LA ANTOLOGÍA…………………………………………..………………3 CONTENIDO…………………………………………………………………..………………..4 DESARROLLO……………………………………………………………….………………...5 BIBLIOGRAFÍA………………………………………………………………….………….…61 La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 2 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA PROPÓSITO DE LA ANTOLOGÍA La presente antología es una recopilación de lo más selecto o representativo sobre la materia “Programación Lenguaje C” con el propósito de apoyar la labor académica en el proceso académico de enseñanza-aprendizaje; por lo tanto, se espera que sea de mucho apoyo para los estudiantes en su formación. El marco teórico del presente material es el constructivismo, ya que uno de sus principales objetivos es favorecer aprendizajes significativos, articulando los ejes axiológico, heurístico y teórico. De tal manera, que se integren a la formación del estudiante, el cual se pretende sea autónomo, autodidacta y autocrítico. Es decir, que el estudiante sea capaz de gestionar su aprendizaje independiente. Por lo que se refiere a la metodología, se ha optado por la transversalidad, puesto que a través de ello es posible involucrar al currículum, así como a los ejes antes mencionados. Es importante destacar que la distribución del contenido temático obedece a razones didácticas, por tanto, el profesor está en la libertad de adecuarlo a las necesidades de su población estudiantil y a las circunstancias del municipio donde sea impartida la materia. En este sentido, el docente cuenta con la libertad de cátedra para decidir cómo utilizarla. Se espera, al mismo tiempo, que la enriquezca con sus conocimientos y experiencias. El objetivo primordial de ésta Antología es que se constituya como la herramienta que permitirá acercar al estudiante cada vez más a cumplir sus objetivos de conocimientos dentro de la Licenciatura en Sistemas Computacionales. La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 3 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA CONTENIDO La presente Antología de “Programación Lenguaje C”, está conformada por cinco temas centrales, divididos en subtemas de la manera siguiente: 1. INTRODUCCIÓN AL LEGUAJE C 1.1 Estructura de un programa en C. 1.2 Definición de variables. 1.3 Constantes. 1.4 Conversión automática de tipos. 1.5 Entrada y salida de información. 1.6 El entorno de programación. 2. PROGRAMACIÓN ESTRUCTURADA 2.1 Instrucciones básicas en C 2.2 Estructura secuencial. 2.3 Estructura selectiva. 2.4 Estructura repetitiva. 2.5 Programación estructurada en C 2.6 Estructuras de selección o decisión 3. TIPOS DE DATOS ESTRUCTURADOS EN C 3.1 Definición de arrays. 3.2 Definición de estructuras. 3.3 Definición de cadenas. 4. DISEÑO MODULAR EN C 4.1 Funciones en C. La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 4 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA 4.2 Procedimientos. 4.3 Diferencias entre funciones y procedimientos. 4.4 Ámbito y visibilidad de las variables. 4.5 Paso de parámetros entre subprogramas. 5. GESTIÓN DE MEMORIA 5.1 Variables y su disposición de memoria 5.2 Punteros. 5.3 Ficheros y tipos de ficheros La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 5 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA DESARROLLO 1. INTRODUCCIÓN AL LEGUAJE C El lenguaje C es el resultado de un proceso de desarrollo que inició con un lenguaje denominado BCPL. Este influenció a otro llamado B (inventado por Ken Thompson). En los años 70; éste lenguaje llevó a la aparición del C. Con la popularidad de las microcomputadoras muchas compañías comenzaron a implementar su propio C por lo cual surgieron discrepancias entre sí. Por esta razón ANSI (American National Standars Institute, por sus siglas en inglés), estableció un comité en 1983 para crear una definición no ambigua del lenguaje C e independiente de la máquina que pudiera utilizarse en todos los tipos de C. Algunos de las C existentes son: -Quick C -C++ -Turbo C -Turbo C ++ -Borland C -Borland C++ -Microsoft C -etc. La característica principal del lenguaje C es ser portable, es decir, es posible adaptar los programas escritos para un tipo de computadora en otra. La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 6 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA Otra de sus características principales es el ser estructurado, es decir, el programa se divide en módulos (funciones) independientes entre sí. El lenguaje C inicialmente fue creado para la programación de -Sistemas operativos -Intérpretes -Editores -Ensambladores -Compiladores -Administradores de bases de datos. Actualmente, debido a sus características, puede ser utilizado para todo tipo de programas. 1.1 Estructura de un programa en C. Aunque cada uno de los programas son distintos, todos tienen características comunes. Los elementos de un programa en C son los siguientes: Comentarios Inclusión de archivos main() { variables locales flujo de sentencias } Definición de funciones creadas por el programador utilizadas en main() Comentarios: Se identifican porque van entre diagonales y asterisco. Nos sirve para escribir información que nos referencie al programa pero que no forme parte de él. Por La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 7 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA ejemplo especificar que hace el programa, quien lo elaboró, en qué fecha, que versión es, etc. Inclusión de archivos: Consiste en mandar llamar a la o las bibliotecas donde se encuentran definidas las funciones de C (instrucciones) que estamos utilizando en el programa. En realidad, la inclusión de archivos no forma parte de la estructura propia de un programa sino que pertenece al desarrollo integrado de C. Se incluye aquí para que el alumno no olvide que debe mandar llamar a los archivos donde se encuentran definidas las funciones estándar que va a utilizar. main(): En C, todo está constituido a base de funciones. El programa principal no es la excepción. main() indica el comienzo de la función principal del programa la cual se delimita con llaves. Variables locales: Antes de realizar alguna operación en el programa, se deben declarar la(s) variable(s) que se utilizarán en el programa. Flujo de sentencias: Es la declaración de todas las instrucciones que conforman el programa. Definición de funciones creadas por el programador utilizadas enmain(): Finalmente, se procede a definir el contenido de las funciones utilizadas dentro de main(). Estas contienen los mismos elementos que la función principal. Todo programa escrito en C consta de una o más funciones, una de las cuales se llama main. El programa siempre comenzará por la ejecución de la función main. Cada función debe contener: La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 8 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA Una cabecera de la función, que consta del nombre de la función, seguido de una lista opcional de argumentos encerrados con paréntesis. Una lista de declaración de argumentos, si se incluyen estos en la cabecera. Una sentencia compuesta, que contiene el resto de la función. Los argumentos son símbolos que representan información que se le pasa a la función desde otra parte del programa (También se llaman parámetros a los argumentos). Cada sentencia compuesta se encierra con un par de llaves, {.....}. Las llaves pueden contener combinaciones de sentencias elementales (denominadas sentencias de expresión) y otras sentencias compuestas. Así las sentencias compuestas pueden estar anidadas, una dentro de otra. Cada sentencia de expresión debe acabar en punto y coma (;). Los comentarios pueden aparecer en cualquier parte del programa, mientras estén situados entre los delimitadores /* ................ */ (por ejemplo: /*esto es un ejemplo*/). Los comentarios son útiles para identificar los elementos principales de un programa o simplemente para orientar a un posible usuario de ese código. Todo fichero fuente en C sigue la siguiente estructura; para verla más claramente pondremos un ejemplo con sus correspondientes comentarios, que nos vayan explicando cada una de las partes, muchas de las cosas que se vean, no se conocen aún, pero nos servirán para hacernos una idea de cómo se estructura un programa: Ejemplo: #include <stdio.h> La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 9 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA #include <conio.h> /*#include del sistema: Se deben especificar todos los ficheros de cabecera (ficheros con extensión .h) correspondientes a las librerías de funciones utilizadas. Son librerías implementadas y listas para que nosotros las usemos, con sólo llamar a la función que tenga implementada dentro dicha librería. Por ejemplo: la instrucción printf está incluida dentro de stdio.h, por tanto, cuando decidamos usarla, tendremos que poner en esta sección: #include <stdio.h> */ #include <lista.h> /* #include de la aplicación: Ficheros de cabecera creados para el fichero fuente. Se puede decir que estos son los que yo he creado, que son invocados escribiendo su nombre seguido de .h. (Más tarde explicaremos cómo se crean). Si lo pongo entre signos: < > (como lo tenemos en este ejemplo), dicha librería será buscada en el directorio del compilador INCLUDE que contiene las librerías. Si por el contrario pongo: #include "lista.h", entonces, dicha librería será buscada 1º en el directorio actual, y luego, si no está, será buscada en el directorio del compilador INCLUDE*/ extern void salida(void); /* externvariables globales externas: Variables globales que voy a definir en otros módulos que voy a usar en este módulo. A salida le hemos asignado el tipo de almacenamiento extern, pues tiene que ser accedida desde otro archivo distinto de aquel en que es definida; por tanto, ha de ser una función externa. */ La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 10 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA #define CIERTO 1 #define FALSO 0 /* #define definición de macros y constantes simbólicas.*/ typedef struct { int dia; int mes; int ano; }FECHA; /* typedef definición de tipos: me sirve para crearme un tipo distinto de los preestablecidos de partida.*/ int suma (int , int); /* Declaración de los prototipos de las funciones implementados en este módulo: La declaración de una función le da información al compilador de una función que va a ser utilizada pero que todavía no ha sido implementada. En particular le dice al compilador qué tipo de datos requiere y cuál devuelve la función. En el ejemplo, la función con nombre suma recibe dos números enteros y da como salida otro número entero.*/ extern int a,b,c; /* Declaración de variables globales de este módulo: extern declaración de funciones externas a este módulo: Funciones que se utilizan en este módulo y que están implementadas en otro módulo. static declaración de las funciones internas no visibles para otros módulos: Funciones que se implementan en este módulo y que no pueden ser utilizadas en otros módulos. */ main(){ ............ La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 11 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA ............ } int suma(int x,int y){ ........... ........... } /* Implementación de las funciones: Se implementan todas las funciones del módulo incluida la función main().*/ 1.2 DEFINICIÓN DE VARIABLES. En programación, una variable es un espacio de memoria reservado para almacenar un valor que corresponde a un tipo de dato soportado por el lenguaje de programación. Una variable es representada y usada a través de una etiqueta (un nombre) que le asigna un programador o que ya viene predefinida. Por ejemplo, en la variable de nombre "num", se almacena el número 8 (de tipo entero). De forma genérica, para utilizarla y sumarle un uno se debería programar: num = num + 1. Una variable puede ser del tipo boleano, entero, decimal de coma flotante, carácter, cadena de texto, arreglo, matriz, tipo definido por el usuario, etc. Estos son tipos de datos. Una variable, por lo general, como su nombre lo indica, puede variar su valor durante la ejecución del programa. Dependiendo del lenguaje de programación usado, también puede cambiar el tipo de dato que almacena. La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 12 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA 1.3 CONSTANTES En programación, una constante es un valor que no puede ser alterado durante la ejecución de un programa. Corresponde a una longitud fija de un área reservada en la memoria principal del ordenador, donde el programa almacena valores fijos. El nombre de las constantes suele escribirse en mayúsculas en la mayoría de lenguajes. La palabra constante tiene en C++ dos connotaciones sutilmente diferentes aunque relacionadas: 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 código del programa, y no pueden ser modificados más tarde en tiempo de ejecución (lo que significa que sus valores deben ser resueltos en tiempo de compilación). Dicho en otras palabras: el compilador sabe cuál es el valor de los objetos declarados como constantes y en base a este conocimiento puede hacer cuantas suposiciones sean válidas para conseguir la mayor eficiencia en tiempo de ejecución. En este sentido, el concepto constante es justamente el opuesto a variable, que corresponde a aquellos objetos-dato que pueden recibir nuevas asignaciones de valor a lo largo del programa. Dicho en otras palabras: entidades cuyo valor solo es conocido en tiempo de ejecución. La segunda connotación 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 carácter. Así pues, distinguimos entre un tipo char y un tipo const char. Como prácticamente todos los tipos de objeto-dato posibles en C++ puede declararse constantes, existe un universo de tipos C++, simétrico al de los tipos de objetos variables, pero de objetos constantes. La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 13 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA Por ejemplo, un entero y una constante entera son tipos distintos y que una constante entera C++ significa algo más que un entero al que no se le puede cambiar su valor. Lo que hace el compilador con los objetos declarados inicialmente como constantes depende de la implementación. Esto significa que no está garantizado que tales objetos tengan un Lvalue. Por ejemplo: en const int x = 5; no está garantizado que el compilador le asigne a x un Lvalue, es decir, un espacio en memoria determinado (que se permita modificar o no su valor es otra cuestión). Puede ocurrir que, por razones de eficacia, sea simplemente una especie de "define". Una especie de nemónico que hace que el compilador lo sustituya por un 5 en cada trozo de código donde aparezca x. Incluso en sitios donde aparezca asociada a otras constantes puede estar resuelto el valor en tiempo de compilación. Por ejemplo, si en otro sitio del programa aparece: const int z = 7; y más tarde: int w = x + z + y; puede ocurrir que el compilador establezca directamente: int w = 12 + y. Por esta razón no está garantizado que el operador const_cast funcione con objetos declarados inicialmente como constantes. Como se ha indicado, en C++ existen tantos tipos de constantes como tipos de variables, pero aparte de las ya mencionadas constantes manifiestas, solo nos detendremos en las que por una u otra razón hay cosas interesantes que puntualizar. Son las siguientes: •Expresiones constantes •Constantes enteras •Constantes fraccionarias •Constantes carácter de varios subtipos, incluyendo elementos aislados y cadenas •Enumeraciones La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 14 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA El Estándar C++ denomina "literales" a lo que el Estándar C denomina "constantes", y establece que existen 5 tipos de estos "literales": •Constantes enteras ("Integer literal") •Constantes carácter ("Character literal") •Constantes fraccionarias ("Floating literal") •Constantes de cadena ("String literal") •Constantes lógicas ("Boolean literal"). Por la forma en que están expresadas en el código pueden considerarse en dos grupos: Directas si están directamente expresadas. Por ejemplo: const float pi = 3.14159; Expresiones si su valor está implícito en una expresión. Por ejemplo: const float k = pi * 2; El tipo de dato correspondiente a una constante es deducido por el compilador en base a indicios implícitos, como el valor numérico y formato usados en el fuente. En algunos casos también por ciertos calificadores explícitos. C++ tiene una palabra específica para este fin: const Ejemplos: char c = 'X'; // X es una constante tipo char const int X = 10; // X es un tipo int-constante Ejemplo de una constante en C/C++ En C o C++ las constantes se declaran con la directiva #define, esto significa que esa constante tendrá el mismo valor a lo largo de todo el programa. El identificador de una constante así definida será una cadena de caracteres que deberá cumplir los mismos La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 15 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA requisitos que el de una variable (sin espacios en blanco, no empezar por un dígito numérico, etc). Ejemplo: #include <stdio.h> #define PI 3.1415926 int main() { printf("Pi vale %f", PI); return 0; } Lo cual mostrará por pantalla: Pi vale 3.1415926 Es decir, PI es una constante a la que le hemos asignado el valor 3.1415926 mediante la directiva #define. La directiva #define también se puede utilizar para definir expresiones más elaboradas con operadores (suma, resta, multiplicación etc) y otras constantes que hayan sido definidas previamente, por ejemplo: #define X 2.4 #define Y 9.2 #define Z X + Y </div> 1.4 CONVERSIÓN AUTOMÁTICA DE TIPOS. En C y C++, si el compilador encuentra una expresión o una llamada a función que usa un tipo que no es el que se requiere, a menudo podrá realizar una conversión automática de tipos desde el tipo que tiene al tipo que necesita. En C++, puede conseguir este mismo efecto para los tipos definidos por el usuario creando funciones de conversión automática de tipos. Estas funciones se pueden ver en dos versiones: un tipo particular de constructores y un operador sobrecargado. La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 16 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA Conversión por constructor Si define un constructor que toma como su único argumento un objeto (o referencia) de otro tipo, ese constructor permite al compilador realizar una conversión automática de tipos. Cuando el compilador ve que f() es invocada pasando un objeto One, mira en la declaración def() y ve que requiere un Two. Entonces busca si hay alguna manera de conseguir un Two a partir de un One, encuentra el constructor Two::Two(One) y lo llama. Pasa el objeto Two resultante a f(). En este caso, la conversión automática de tipos le ha salvado del problema de definir dos versiones sobrecargadas de f(). Sin embargo el coste es la llamada oculta al constructor de Two, que puede ser importante si está preocupado por la eficiencia de las llamadas a f(). La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 17 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA 1.5 ENTRADA Y SALIDA DE INFORMACIÓN. En un programa informático, los datos de entrada son los que la computadora va a procesar, como puede verse en la siguiente figura Figura - Funcionamiento básico de un programa en una computadora digital Los datos de salida son datos derivados, es decir, obtenidos a partir de los datos de entrada. Por esta razón, a los datos de salida se les considera más significativos que a los datos de entrada. Ambos tipos de datos (de entrada y de salida) son información (textos, imágenes, sonidos, vídeos,...) que maneja la computadora. Sin embargo, en un sentido más filosófico, a los datos de entrada se les considera la materia prima de los datos de salida, considerados estos como la verdadera información 1.6 EL ENTORNO DE PROGRAMACIÓN. Las actividades mejor soportadas por herramientas de desarrollo son normalmente la centrales: codificación y pruebas de unidades. El conjunto de herramientas que soportan estas actividades constituyen lo que se llama un entorno de programación. A veces se utilizan las siglas IDE (Integrated Development Environment) para designar estos entornos, aunque no son un entorno de desarrollo completo, sino sólo una parte de él. Siguiendo la terminología anterior, de niveles funcionales, es el banco de trabajo del programador La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 18 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA Da soporte a las actividades de la fase de codificación (preparación del código y prueba de unidades) Los mismos productos sirven también para el diseño detallado y para las pruebas de integración. Se sitúa, por tanto, en la parte central del ciclo de desarrollo Funciones de un Entorno de Programación Como se ha dicho, la misión de un Entorno de Programación es dar soporte a la preparación de programas, es decir, a las actividades de codificación y pruebas. Las tareas esenciales de la fase de codificación son: o Edición (creación y modificación) del código fuente o Proceso/ejecución del programa Interpretación directa (código fuente) Compilación (código máquina) - montaje - ejecución Compilación (código intermedio) - interpretación Otras funciones: o Examinar (hojear) el código fuente o Analizar consistencia, calidad, etc. o Ejecutar en modo depuración La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 19 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA o Ejecución automática de pruebas o Control de versiones o Generar documentación, reformar código o ... y otras muchas más ... Tipos de Entornos de Programación Un entorno de programación puede estar concebido y organizado de maneras muy diferentes. A continuación se mencionan algunas de ellas. En las primeras etapas de la informática la preparación de programas se realizaba mediante una cadena de operaciones tales como la que se muestra en la figura para un lenguaje procesado mediante compilador. Cada una de las herramientas debía invocarse manualmente por separado. En estas condiciones no puede hablarse propiamente de un entorno de programación. Los componentes cuya evolución ha sido más aparente son los que realizan la interacción con el usuario: o El editor ya no es un simple editor de texto, sino que tiene una clara orientación al lenguaje de programación usado (reconoce y maneja determinados elementos sintácticos) La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 20 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA o El depurador no presenta información en términos del lenguaje de máquina, sino del lenguaje fuente o El editor está bien integrado con las demás herramientas (se posiciona directamente en los puntos del código fuente en los que hay errores de compilación, o que se están ejecutando con el depurador en un momento dado. No es fácil establecer una clasificación dentro de la variedad de entornos de programación existentes. En algún momento se describieron las siguientes clases de entornos, no excluyentes, usando un criterio esencialmente pragmático: o Entornos centrados en un lenguaje o Entornos orientados a estructura o Entornos colección de herramientas Entornos centrados en un lenguaje Presentan las siguientes características generales: Son específicos para un lenguaje de programación en particular Están fuertemente integrados. Aparecen como un todo homogéneo Se presentan como una herramienta única El editor tiene una fuerte orientación al lenguaje Son relativamente cómodos o fáciles de usar A veces son poco flexibles en lo referente a la interoperación con otros productos o a la ampliación de sus funciones Se basan en representar el código fuente como texto Podemos encontrar ejemplos de estos entornos para todo tipo de lenguajes Lenguajes funcionales con interpretación directa o (Inter)Lisp, Haskell, etc. La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 21 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA Lenguajes compilados a código de máquina nativo o Lenguaje ejecutados sobre máquina virtual o Delphi, Visual C++, AdaGide/GNAT, GPS, etc. Java (Visual Age, Eclipse), C# (Visual Studio .NET) Ejemplos especiales: o Entornos Ada (Stoneman, Cais, Asis) o Entornos Smalltalk o Entornos Oberon, Component Pascal Entornos orientados a estructura Podrían considerarse incluidos en la clase anterior, ya que suelen ser específicos para un lenguaje de programación, pero están concebidos de manera diferente: El editor de código fuente no es un editor de texto, sino un editor de estructura (editor sintáctico) Se basan en representar internamente el código fuente como una estructura: o Árbol de sintaxis abstracta: AST La presentación externa del código es en forma de texto o Plantillas (elementos sintácticos no terminales) o Texto simple (elementos terminales - a veces "frases" para expresiones) Compilación incremental (en algunos casos) Para desarrollo personal, no en equipo Ejemplos: o The Cornell Program Synthesizer (subconjunto de PL/I) o Mentor (Pascal) o Alice Pascal o Gandalf (intenta ser un entorno de desarrollo completo, para todo el ciclo de vida) La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 22 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA Estos entornos estuvieron de moda en los años 80. Los desarrollos fueron fundamentalmente académicos, y quedaron en desuso. En la actualidad los lenguajes de marcado (XML) pueden ser una buena forma de representar la estructura del código fuente con vistas a su manipulación. Existen editores y procesadores XML que podrían ser la base de nuevos entornos de programación orientados a estructura. Entornos basados en combinación de herramientas Consisten en una combinación de diversas herramientas capaces de interoperar entre ellas de alguna manera. Se denominanentornos toolkit. Presentan las siguientes características: Presentan integración débil Son un conjunto de elementos relativamente heterogéneos Son fáciles de ampliar o adaptar mediante nuevas herramientas Pueden ser construidos en parte por el propio usuario (programador): éste es más o menos el estilo UNIX original Ofrecen poco control de uso de cada herramienta El elemento frontal (front-end) para interacción con el usuario suele ser un editor configurable, con llamadas a herramientas externas. A veces estos editores configurables se designan también con las siglas IDE (que debería reservarse para el entorno completo) Ejemplos de editores configurables o Emacs, Vim, Gvim o Med, SciTE, jEdit o Eclipse (algo más que un editor) La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 23 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA Entornos multilenguaje Hay aplicaciones que combinan piezas de código fuente escritas en diferentes lenguajes de programación. Algunas posibilidades de combinación son las siguientes: Entornos genéricos o No se combinan lenguajes en un mismo programa. Hay varios programas, cada uno en su propio lenguaje o Bastaría combinar las herramientas correspondientes a cada lenguaje (compiladores, etc.) o Se podría usar un frontal común: editor personalizable que soporte los lenguajes concretos o Ejemplos: Emacs (con diferentes "modos") Eclipse (con diferentes "plug-ins") Entornos específicos o Para una combinación concreta de lenguajes o Vienen a ser como los entornos centrados en un lenguaje, sólo que admiten más de uno o Usan un formato binario compatible que permite combinar en un mismo programa partes escritas en los diferentes lenguajes o Ejemplo: GPS permite combinar módulos en Ada y C++ Lenguajes ejecutados sobre máquina virtual o La máquina virtual establece el formato del código binario o Pueden combinarse módulos escritos en diferentes lenguajes para los que exista el compilador apropiado o Cada lenguaje puede tener su entorno de programación separado, o bien existir un entorno de programación único o Ejemplos: La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 24 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA JVM (Java Virtual Machine). El lenguaje original es Java. El intérprete es el JRE (Java Runtime Environment). Hay compiladores a JVM para otros lenguajes además de Java: Ada, Fortran, Component Pascal (Oberon), etc. (incluso C#) .Net (Microsoft). El lenguaje original es C#. El intérprete es el CLR (Common Language Runtime). Hay compiladores a .Net para otros lenguajes además de C#: Ada, Fortran, Component Pascal (Oberon), etc. (incluso Java) Entornos para ingeniería de software Un entorno de programación, tal como se ha definido anteriormente, serviría para dar soporte a las tareas de desarrollo de software realizadas por una persona. Para desarrollar proyectos de software no triviales se necesita trabajar en equipo usando las recomendaciones de la ingeniería de software. Cada miembro del equipo de desarrollo puede disponer de una estación de trabajo con un entorno de programación adecuado para realizar su trabajo individual, y se necesita además algún medio de combinar los trabajos individuales en una labor de conjunto, debidamente organizada. Una manera intuitiva de organizar el entorno general de desarrollo es basarlo en un repositorio central de información, dotado de un sistema de gestión de configuración, y añadirle sistemas de mensajería, de gestión de incidencias, herramientas de modelado para análisis y diseño, de gestión del proyecto, etc. 2. PROGRAMACIÓN ESTRUCTURADA La programación estructurada es una teoría de programación que consiste en construir programas de fácil comprensión, es especialmente útil, cuando se necesitan realizar La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 25 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA correcciones o modificaciones después de haber concluido un programa o aplicación. Al utilizar la programación estructurada, es mucho más sencillo entender la codificación del programa, que se habrá hecho en diferentes secciones. Se basa en una metodología de desarrollo de programas llamada refinamiento sucesivo: Se plantea una operación como un todo y se divide en segmentos más sencillos o de menor complejidad, una vez terminado todos los segmentos del programa, se procede a unificar las aplicaciones realizadas por el grupo de programadores. Si se ha utilizado adecuadamente la programación estructurada, esta integración debe ser sencilla y no presentar problemas al integrar la misma, y de presentar algún problema, será rápidamente detectable para su corrección. La representación gráfica de la programación estructurada se realiza a través de diagramas de flujo, el cual representa el programa con sus entradas, procesos y salidas. La programación estructurada propone segregar los procesos en estructuras lo más simple posibles, las cuales se conocen como secuencia, selección e interacción, que están disponibles en todos los lenguajes modernos de programación imperativa en forma de sentencias, combinando esquemas sencillos se pueden llegar a construir sistemas amplios y complejos pero de fácil entendimiento. La programación estructurada es un método disciplinado de escribir programas que sean claros, que se demuestre que sean correctos y fáciles de modificar. La programación estructurada consiste en dividir los programas en módulos y se basa en el desarrollo de programas que van de lo general a lo particular, es decir, del conjunto al elemento, es decir de un todo a lo específico. Para la solución de un problema en particular, se inicia considerando las funciones que tiene que cumplir el programa en general y después se va desmembrando estas funciones en subfunciones más pequeñas hasta llegar al caso último o más particular y La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 26 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA que ya no se pueda subdividir en casos más pequeños. Una vez que ya se tiene el programa desmembrado en de lo general a lo particular, se empieza a programar estas funciones pequeñas, particulares o módulos, de esta manera, siempre podremos construir nuevos módulos o unidades insertando el nombre del módulo donde corresponda y desarrollándolo a parte. La modificación de los módulos es más fácil y se pueden referenciar cuantas veces se requiera, con lo que se ahorra tiempo en la programación, un programa tiene un diseño estructurado si cumple las dos siguientes condiciones: El teorema de Estructura. Está debidamente documentado El teorema de Estructura dice que “un programa cumple el teorema de estructura si y sólo (ó) si es propio y contiene únicamente las tres estructuras básicas de control” que son la secuencial, la alternativa y la repetitiva, un programa es propio si y sólo si cumple: que tenga un solo punto de entrada y un solo punto de salida y que entre dos puntos de control del programa exista al menos un camino. 2.1 Instrucciones básicas en C La programación estructurada es un estilo con el cual él se busca que el programador elabore programas sencillos y fáciles de entender, la programación estructurada hace uso de tres estructuras básicas de control que son: Estructura Secuencial, Estructura Selectiva y la Estructura Repetitiva (ó Iterativa) La programación estructurada se basa un teorema fundamental, el cual afirma que cualquier programa, no importa el tipo de trabajo que ejecute, puede ser elaborado utilizando únicamente las tres estructuras básicas. La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 27 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA 2.2 Estructura secuencial. Indica que las instrucciones de un programa se ejecutan una después de la otra, en el mismo orden en el cual aparecen en el programa. Se representa gráficamente como una caja después de otra, ambas con una sola entrada y una única salida. Las cajas A y B pueden ser definidas para ejecutar desde una simple instrucción hasta un módulo o programa completo, siempre y cuando éstos también sean programas apropiados. 2.3 Estructura selectiva. Estructura Selectiva: También conocida como la estructura si verdadero - falso, plantea la selección entre dos alternativas con base en el resultado de la evaluación de una condición; equivale a la instrucción IF de todos los lenguajes de programación y se representa gráficamente de la siguiente manera: La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 28 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA En el diagrama de flujo anterior, C es una condición que se evalúa; A es la acción que se ejecuta cuando la evaluación de esta condición resulta verdadera y B es la acción ejecutada cuando el resultado de la evaluación indica falso. La estructura también tiene una sola entrada y una sola salida; y las funciones A y B también pueden ser cualquier estructura básica o conjunto de estructuras. 2.4 Estructura repetitiva. También llamada la estructura hacer – mientras - que, corresponde a la ejecución repetida de una instrucción mientras que se cumple una determinada condición. El diagrama de flujo para esta estructura es el siguiente: Aquí el bloque A se ejecuta repetidamente mientras que la condición C se cumpla o sea cierta. También tiene una sola entrada y una sola salida; igualmente A puede ser cualquier estructura básica o conjunto de estructuras. La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 29 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA 2.6 Programación estructurada en C Lenguaje C es un lenguaje de programación estructurado de propósito general. Algunas de sus características es el uso a un nivel más bajo, entre lenguaje máquina y el lenguaje de alto nivel. El lenguaje C se origina con el lenguaje BCPL, creado por Martin Richards, influyo en el desarrollo del lenguaje B implementado por Ken Thompson y su vez permitió el desarrollo del lenguaje C, implementado por Dennis Ritchie en 1971. Para 1973 El sistema operativo UNIX estaba escrito en lenguaje C. El lenguaje C la unidad básica de programación es la función, los programas están formados por módulos. Cada módulo realiza una tarea específica y es un subprograma independiente. Los programas estructurados tienen un conjunto de módulos relacionados lógicamente como una unidad integrada. El lenguaje C++ es un lenguaje hibrido por maneja la programación estructurada y la programación orientada a objetos. Incrementa la productividad, y la reutilización de código. La unidad básica de programación en lenguaje C++ es la clase. Una clase contiene datos y funciones o métodos que manipulan los datos que definen las características de un objeto. Cuando se define una clase, se pueden crear objetos. Estructura de un programa en C y C++ La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 30 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA Todo programa en C consta de una o más funciones, una de ellas es main. El programa siempre comienza por la ejecución de la función main. Se pueden definir algunas funciones adicionales pueden preceder a main. Cada función debe contener: 1.- Una cabecera de la función, que consta del nombre de la función, después unos paréntesis para una lista opcional de argumentos. 2.- Después el cuerpo de la función que describe el conjunto de sentencias o conjunto de instrucciones encerradas por un par de llaves. Cada sentencia de expresión debe terminar con punto y coma (;). Los comentarios pueden aparecer en cualquier parte del programa, deben estar entre los limitadores /* esto es un comentario */ sirven para documentar el código. 2.7 Estructuras de selección o decisión La unidad aritmética y lógica es uno de los componentes más importantes de una computadora típica. El propósito de la unidad aritmética es el manejo de las operaciones aritméticas; la porción lógica da a la computadora la capacidad de tomar decisiones. Esto forma la base de la construcción algorítmica if-then-else (si-entonces-de lo contrario), la que permitirá la selección de acciones alternativas. Una decisión se especifica en una expresión lógica de la misma forma en que una operación de cálculo se especifica en una expresión numérica. Por ejemplo: La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 31 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA Suponga que tiene dos variables numéricas, denominadas A y B, que tienen valores diferentes, y suponga que desea imprimir el valor de la mas grande. Si A es mayor que B, debe imprimir el valor de A; pero, por otro lado, si B es mayor que A, debe imprimirse el valor de B. La elección de que alternativa tomar depende de la decisión de si la variable A es o no mayor que B. Esta estructura se representa mediante el diagrama siguiente: Suponga que A tiene el valor de 5 y B el valor de 3. Como 5 es mayor que 3, la condición A>B es verdadera, de lo que resulta que se tomara la acción de la izquierda y se imprime el valor de A, es decir 5. Ahora supóngase que estos valores están invertidos, de manera que A tiene el valor 3 y B el valor 5, entonces A>B es falsa ya que 3 es menor que 5, y se tomara la acción de la derecha y se imprime el valor de B, es decir, 5. En ambos casos el valor impreso es le mas alto, como se requería. La construcción if-then-else (estructuras selectivas) Las estructuras selectivas se utilizan para tomar decisiones lógicas; de ahí que se suelan denominar también estructuras de decisión o alternativas. En las estructuras selectivas se evalúa una condición y en función del resultado de la misma se realiza una opción u otra. Las condiciones se especifican usando expresiones lógicas. La representación de una estructura selectiva se hace con palabras en pseudocódigo (if, then, else o bien en español si, entonces, sino), con una figura La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 32 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA geométrica en forma de rombo o bien con un triángulo en el interior de una caja rectangular. Las estructuras selectivas o alternativas pueden ser: - simples - dobles - múltiples Alternativa simple (if-then/si-entonces) La estructura alternativa simple si--entonces ejecuta una determinada acción cuando se cumple una determinada condición. La selección si-entonces evalúa la condición y - si la condición es verdadera, entonces ejecuta la acción S1 - si la condición es falsa, entonces no hacer nada Representación gráfica: La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 33 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA Pseudocódigo en español Pseudocódigo en inglés si <condición> if <condición> entonces <acción S1> then <acción S1> fin_si endif Alternativa doble (si-entonces-sino/if-then-else) La estructura anterior es muy limitada y normalmente se necesitará una estructura que permita elegir entre dos opciones o alternativas posibles en función del cumplimiento o no de una determinada condición. Si la condición C es verdadera, se ejecuta la acción S1, y si es falsa, se ejecuta la acción S2. La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 34 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA 3. TIPOS DE DATOS ESTRUCTURADOS EN C Las estructuras de datos del lenguaje C son más simples que las que ofrece Java porque no existe el concepto de “clase” ni de “objeto”. C ofrece tipos de datos básicos y dos construcciones para crear datos más complejos. El control de acceso a datos que ofrece Java (métodos y campos privados, públicos y protegidos) no existe en C. Las variable son globales, locales a un fichero, o locales a un bloque de código. Tipos de datos básicos C ofrece tres tipos de datos básicos: Números enteros definidos con la palabra clave int Letras o caracteres definidos con la palabra clave char Números reales o en coma flotante definidos con las palabras claves float o double Enteros Se definen con “int” y admiten de forma opcional dos prefijos modificadores: “short” y “long”: Modifica el tamaño en bits del entero. Existen por tanto tres tipos de enteros: “int”, “short int” (que se puede abreviar como “short”), y “long int” (que se puede abreviar como “long”). El lenguaje C no define tamaños fijos para sus tipos de datos básicos. Lo único que garantiza es que un short int tiene un tamaño menor o igual que un int y este a su vez un tamaño menor o igual a un long int. Esta característica del lenguaje ha complicado la creación de programas que sean compatibles entre varias plataformas. “unsigned”: define un número natural (mayor o igual a cero). La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 35 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA 3.1 Definición de arrays. Un array, es un tipo de dato estructurado que permite almacenar un conjunto de datos homogéneo, es decir, todos ellos del mismo tipo y relacionados. Cada uno de los elementos que componen un vector puede ser de tipo simple como caracteres, entero o real, o de tipo compuesto o estructurado como son vectores, estructuras, listas... A los datos almacenados en un array se les denomina elementos; al número de elementos de un array se les denomina tamaño o rango del vector. Para acceder a los elementos individuales de un array se emplea un índice que será un número entero no negativo que indicará la posición del elemento dentro del array. Para referirse a una posición particular o elemento dentro del array, especificamos el nombre del array y el número de posición del elemento particular dentro del mismo, el índice. Los arrays en gran parte se definen como las variables ordinarias, excepto en que cada array debe acompañarse de una especificación de tamaño (número de elementos). Para un array unidimensional, el tamaño se especifica con una expresión entera positiva encerrada entre paréntesis cuadrados. La expresión es normalmente una constante entera positiva. En términos generales un array unidimensional puede expresarse como: tipo-almacenamiento tipo-dato array[expresión]; donde: "tipo-almacenamiento" se refiere al tipo de almacenamiento del array "tipo-dato" es el tipo de dato "array" es el nombre del array "expresion" una expresión entera positiva que indica el número de elementos del array. La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 36 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA El tipo-almacenamiento es opcional; los valores por defecto son automáticos para un array definidos dentro de una función o bloque, y externos para arrays definidos fuera de una función. Los arrays automáticos a diferencia de las variables automáticas no pueden ser inicializados. Sin embargo las definiciones de los arrays estáticos y externos pueden incluir, si se desea, la asignación de los valores iniciales. Los valores iniciales deben aparecer en el orden en que serán asignados a los elementos individuales del array, encerrados entre llaves y separados por comas. La forma general es: tipo-almacenamiento tipo-dato array[expresión] = { valor1, valor2,..., valorn}; donde: "valor1" se refiere al valor del primer elemento del array "valor2" al segundo elemento, y así sucesivamente. La presencia de la "expresión", que indica el número de elementos del array, es opcional cuando los valores iniciales están presentes. 3.2 Definición de estructuras. La estructura de datos es la forma de organización de los datos elementales con la intención de facilitar el trabajo de programación. El dato elemental, por otra parte, es la información mínima que se tiene de un sistema. Programación estructurada Se conoce como programación estructurada a un paradigma que busca facilitar la comprensión del código, reducir el tiempo de desarrollo y mejorar la calidad de los programas informáticos, valiéndose simplemente de subrutinas y de bloques de código (también llamados secuencias, son secciones con un número variable de La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 37 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA sentencias y declaraciones; en otras palabras, el contenido más abundante de un programa), instrucciones condicionales (selecciones de tipo switch e if) y bucles for y while. Por otro lado, la programación estructurada rechaza el uso de la instrucción GOTO (del inglés go to, que significa ir a), que permite saltar de un punto a otro del código y dificulta su seguimiento y su mantenimiento, además de haber sido el origen de un gran número de errores en su auge. 3.3 Definición de cadenas. Una cadena es un objeto de tipo String cuyo valor es texto. Internamente, el texto se almacena como una colección secuencial de solo lectura de objetos Char. Al final de una cadena de C# no hay un carácter null de terminación; por lo tanto, una cadena de C# puede contener cualquier número de caracteres null incrustados ('\0'). La propiedad Length de una cadena representa el número de objetos Char que contiene, no el número de caracteres Unicode. Para obtener acceso a los puntos de código Unicode individuales de una cadena, utilice el objeto StringInfo. Los objetos de cadena son inmutables, es decir, no pueden modificarse una vez creados. Todos los métodos String y los operadores de C# que parecen modificar una cadena, en realidad devuelven los resultados en un nuevo objeto de cadena. En el ejemplo siguiente, cuando el contenido de s1 y s2 se concatena para formar una sola cadena, las dos cadenas originales no se modifican. El operador += crea una nueva cadena que contiene el contenido combinado. Ese nuevo objeto se asigna a la variable s1 y el objeto original asignado a s1 se libera para la recolección de elementos no utilizados, ya que ninguna otra variable contiene una referencia a él. La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 38 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA Cadenas de formato Una cadena de formato es una cadena cuyo contenido puede determinarse dinámicamente en tiempo de ejecución. Para crear una cadena de formato se utiliza el método estático Format y se incrustan marcadores de posición entre llaves que se reemplazarán por otros valores en tiempo de ejecución. En el ejemplo siguiente se utiliza una cadena de formato para generar el resultado de cada iteración de un bucle: 4. DISEÑO MODULAR EN C El concepto básico del diseño modular es muy simple. Consiste en dividir un programa en módulos que puedan ser analizados, programados y depurados por separado. La máxima que rige esta filosofía es: Divide y vencerás La división de un problema en módulos o programas independientes exige que haya un módulo que controle o relacione a todos los demás. Es el denominado módulo base o principal del problema. En C éste sería main(). Todo programa C debe estar constituido por un módulo main() y posiblemente otra serie de módulos secundarios. Realmente, la programación modular es un intento por diseñar programas por componentes, de forma que cualquiera de ellos pueda ser sustituido sin afectar al conjunto. La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 39 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA Las ventajas de la programación modular se pueden resumir en los siguientes puntos: Un programa modular es más fácil de escribir y depurar (ejecutar, probar y poner a punto). Se puede profundizar en las pruebas individuales de cada módulo mejor de lo que se haría si fuera un programa mayor. También es más fácil de mantener y modificar con adaptaciones posteriores a su creación Es también más fácil de controlar y de abordarlo en equipo: el desglose de un problema en módulos permite encomendar los módulos más complejos a programadores experimentados y los sencillos a programadores inexpertos Las rutinas o módulos se pueden usar mediante invocación varias veces en el mismo programa o en otros con lo que en el primer paso se evita repetir código, y en el segundo se amortiza el esfuerzo invertido en su desarrollo El inconveniente principal sería en cambio la inexistencia de algoritmos precisos que dirijan o auxilien al programador en la forma más adecuada de realizar la división modular, por lo que la experiencia sería el factor más determinante en estos casos. Finalmente, podríamos resumir de manera esquemática los objetivos de la programación modular de la siguiente forma: disminuir la complejidad aumentar la claridad y fiabilidad disminuir el coste de desarrollo propiciar la división del trabajo facilitar las ampliaciones y modificaciones del programa, con nuevos módulos localizar problemas y desajustes de manera clara en un módulo determinado Concepto de módulo La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 40 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA Un módulo está constituido por una o varias instrucciones físicamente contiguas y lógicamente encadenadas, las cuales se pueden referenciar mediante un nombre y pueden ser llamadas desde diferentes puntos de un programa. Se denominan parámetros a una serie de datos utilizados como vía de comunicación entre módulos. Puede haber varios tipos: parámetros de entrada: son recipientes para el envío al módulo en el punto de la llamada parámetros de salida: son recipientes para valores depositados por el módulo al final de su ejecución parámetros de entrada/salida: cumplen ambas funciones Un módulo de tipo función también devuelve un dato mediante una instrucción explícita (return) como consecuencia de su ejecución. Por otra parte, la salida del módulo debe ser exclusivamente función de sus entradas, y no de ningún dato externo ya que es estado de aquel será impredecible y cambiante según el contexto en que se encuentre la invocación al módulo. Son los llamados: "efectos laterales". Esencialmente, el módulo debe ser una caja negra de la cual sólo sean accesibles desde el exterior sus entradas y sus salidas. Además, en la creación de módulos deben cumplirse los siguientes aspectos: funcionalidad: debe hacer lo que se espera de él rendimiento: debe ser eficiente en términos de coste y tiempo diseño: debe cumplir los principios de: o máxima cohesión: sus instrucciones deben tener una afinidad interna, un objetivo común claro La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 41 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA o mínimo acoplamiento: deben ser totalmente independientes entre sí Técnicas de la programación modular Existen distintas técnicas par enfocar el diseño modular, pero todas ellas tienen en común el siguiente guion del proceso: 1. estudio de las especificaciones del problema (análisis general) 2. establecimiento del organigrama modular, que es un esquema de bloques que muestra la descomposición del problema y la comunicación entre el módulo principal y los secundarios 3. confección del organigrama o pseudocódigo de cada módulo 4. codificación de cada módulo en el lenguaje elegido 5. pruebas parciales de cada componente 6. prueba final de los módulos enlazados Si observamos este guion, veremos que es una adaptación del diseño del ciclo de vida clásico, pero en el que se divide en problema en módulos para, al final, volver a componer con ellos una unidad. La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 42 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA En el sencillo ejemplo mostrado arriba, cada módulo "hoja" constituye una unidad de programación independiente, que será posteriormente enlazada al resto para la resolución del problema 4.1 Funciones en C. Una función en C es un fragmento de código que se puede llamar desde cualquier punto de un programa. En C podemos diferenciar entre dos tipos de funciones: a) Aquellas cuyo tipo de retorno es void (nulo), equiparables a lo que denominamos módulo genérico tipo procedimiento. b) Aquellas cuyo tipo de retorno es un tipo de dato (como int, double o cualquier otro), equiparables a lo que denominamos módulo genérico tipo función. Buscando analogías con el desarrollo que hicimos cuando hablamos de pseudocódigo, usaremos la función main de C para disponer en ella el código del "algoritmo principal" o guía del programa y el resto del código irá ordenado en diferentes funciones. Habíamos dicho que un módulo no se ejecuta hasta que es llamado a ejecutarse desde el algoritmo principal de acuerdo con la sintaxis de pseudocódigo: La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 43 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA Una función devuelve un valor, de ahí que especifiquemos un tipo de dato para ella, que hemos indicado como tipoDeRetorno. En caso de que el tipo indicado en lugar de ser un tipo de dato válido en C (como int, double o cualquier otro) sea void, la función no devolverá nada y en lugar de terminar con return valorDevueltoPorLaFuncion; la terminaremos simplemente con return;. En realidad return; no es necesario si el tipo de la función es void, ya que C lo introducirá de forma automática si olvidamos incluirlo. El flujo para una función sigue las reglas ya conocidas: al llegar el control a la sentencia return el flujo del programa vuelve a la sentencia inmediatamente posterior a la llamada efectuada. Si existe código posterior a la sentencia return final, éste será ignorado. Las funciones pueden insertarse en el programa en cualquier orden, aunque siempre será recomendable tratar de disponerlas en el mismo orden en que esté previsto que se ejecuten. La llamada a una función se realiza, cuando no hay parámetros que pasar, simplemente escribiendo su nombre seguido de unos paréntesis vacíos. La llamada a una función se hará normalmente para obtener un valor o asignar un valor a una variable, en expresiones del tipo: printf (nombreDeLaFunción()); variable = nombreDeLaFunción(); If (nombreDeLaFunción() > variable) … Hay que recordar siempre que una "función" con tipo de retorno especificado ejecuta un código y devuelve un valor: podríamos decir que tiene una similitud importante con las variables: tener un valor. La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 44 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA La llamada a una función desde sí misma es posible, dando lugar a un anidamiento o recursión. Habrá de existir una condición que evolucione para dar lugar a la salida de la recursión, regresando el control del flujo a la instrucción posterior desde la que se autollamó el módulo. No vamos a desarrollar contenidos relativos a la recursión, ya que consideramos que es una materia de estudio avanzada. Ejecuta estos dos pequeños programas para comprobar cómo trabajan las funciones con tipo de retorno void y las funciones con tipo de retorno especificado. 4.2 Procedimientos En programación, un tipo de subrutina. Porción de código dentro de un programa más grande, que realiza una tarea específica y es relativamente independiente del resto del código. La mayoría de los lenguajes de programación incluyen soporte para la creación de procedimientos (u otros tipos de subrutinas, como funciones o módulos). Los procedimientos suelen utilizarse para reducir la duplicación de códigos en un programa, permitir reusar los códigos, descomponer problemas complejos en piezas simples (mejorando la mantenibilidad y facilidad de extensión del código), mejora la lectura del código de un programa, oculta o regula parte de un programa, etc. Los procedimientos son ejecutados cuando son llamados desde otros procedimientos, funciones o módulos. Los procedimientos pueden recibir parámetros, pero no necesitan devolver un valor como las funciones. Cada lenguaje de programación tiene su propia implementación de procedimientos (si es que posee procedimientos). La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 45 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA 4.4 Ámbito y visibilidad de las variables Utilizando la palabra clave Dim la variable tendrá el ámbito por defecto, este determina que si una variable está declarada en el interior de una función solo va a ser visible en su interior y que la vida de esa variable se limite al tiempo durante el que esa función está ejecutándose Hay variables que tienen un ámbito más reducido, si han sido declaradas dentro de un bloque de código, solo pueden accederse desde instrucciones existentes en ese bloque. Una variable declarada fuera de cualquier función a nivel de clase será compartida por todo el código de esa entidad. Existen modificadores de ámbito que no solo afectan a las variables sino a todos los elementos del lenguaje. Sintaxis: ModificadorÁmbito [Dim] NombreVariable As TipoDato Private: El elemento es privado y tan solo es accesible desde el lugar en que está definido. Las variables se pueden declarar privadas a una clase en cuyo caso serán visibles sólo en esa clase, no en las demás clases que compongan el programa. Dentro de un procedimiento sólo se puede usar Dim. Public: Indica que el elemento es accesible desde fuera del lugar donde esta definido. Friend: Indica que el elemento es accesible dentro del programa que está declarado. 4.5 Paso de parámetros entre subprogramas. Los subprogramas y funciones son rutinas, procedimientos o conjuntos de sentencias que realizan una labor específica. Los subprogramas o subrutinas nacieron de la La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 46 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA necesidad de no repetir innecesariamente un trabajo ya hecho. Pueden invocarse desde el cuerpo del programa principal cuantas veces se desee. Están en el núcleo de lo que se denomina programación estructurada. En QBasic existen dos clases de subrutinas o procedimientos: los subprogramas propiamente dichos (procedimientos SUB), que realizan un conjunto de tareas y no devuelven ningún valor. las funciones (procedimientos FUNCTION), que devuelven un valor de un tipo que se puede especificar. Los subprogramas y las funciones admiten parámetros (argumentos), que son datos que le pasan al procedimiento las sentencias que la llaman. La sintaxis habitual en la definición de un subprograma es: SUB identificador [(lista_de_parámetros)] bloque_de_código END SUB donde: - identificador es el nombre del subprograma. Debe ser un identificador valido; - lista_de_parámetros es una lista de variables, separadas por comas, que conforman los datos que le pasamos al subprograma. - bloque_de_código es un conjunto de sentencias. La lista de parámetros o argumentos es opcional. Podemos escribir como ejemplo: que simplemente es una función que cuando es llamada imprime en pantalla un mensaje de saludo. La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 47 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA Cuando el programa al ejecutarse alcanza el cierre del procedimiento (END SUB), éste finaliza y devuelve el control al punto del programa que lo llamó. La sintaxis habitual en la definición de una función es: FUNCTION identificador [tipo] [(lista_de_parámetros)] bloque_de_código nombre_de_la_función = expresión bloque_de_código END FUNCTION donde: - identificador es el nombre de la función. Debe ser un identificador valido; - tipo es un sufijo [%, !, etc] o una expresión AS INTEGER, AS SINGLE, etc. que define el tipo de datos que devlelve la función. - lista_de_parámetros es una lista de variables, separadas por comas, que conforman los datos que le pasamos a la función. - nombre_de_la_función = expresión es una sentencia que produce que la función retorne el valor determinado por expresión. - bloque_de_código es un conjunto de sentencias. Cuando el programa al ejecutarse alcanza el cierre del procedimiento (END FUNCTION), éste finaliza y devuelve un valor de tipo entero al programa que lo llamó. 5. GESTIÓN DE MEMORIA La memoria física de un sistema se divide en dos categorías: Memoria de acceso aleatorio: comprende circuitos integrados y es, en consecuencia, muy veloz. La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 48 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA Memoria de almacenamiento masivo: comprende dispositivos magnéticos (disco duro, cintas magnéticas, etcétera) y es mucho más lenta. La memoria física consiste en un área de almacenamiento temporal para los programas y los datos que se usan. A grandes rasgos, mientras más grande sea el espacio de memoria, más aplicaciones se podrán ejecutar al mismo tiempo. Además, mientras más rápida sea la memoria, más rápida será la reacción del sistema. Por eso, el sistema operativo debe estar organizado de manera lo suficientemente eficiente como para obtener el mejor rendimiento posible. Gestión de memoria La gestión de memoria representa un vínculo delicado entre el rendimiento (tiempo de acceso) y la cantidad (espacio disponible). Siempre se busca obtener el mayor espacio disponible en la memoria, pero pocas veces existe la predisposición para comprometer el rendimiento. La gestión de memoria también debe realizar las siguientes funciones: permitir que la memoria se comparta (en sistemas de multiprocesos). asignar bloques de espacio de memoria a distintas tareas; proteger los espacios de memoria utilizados (por ejemplo, evitar que un usuario modifique una tarea realizada por otro usuario). optimizar la cantidad de memoria disponible, específicamente a través de sistemas de expansión de memoria. Expansión de memoria Existen dos formas posibles de expandir la memoria: La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 49 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA Dividiendo un programa de modo que una parte permanezca en la memoria de acceso aleatorio y que una parte se cargue en la memoria cuando se necesite acceder a los datos. Utilizando un mecanismo de memoria virtual que consiste en utilizar el disco duro como memoria principal y almacenar solamente las instrucciones y los datos utilizados por el procesador en la memoria RAM. El sistema operativo realiza esta operación creando un archivo temporal (conocido como SWAP o "archivo de intercambio") en el que se almacena la información cuando la memoria RAM ya no es suficiente. Esta operación produce una disminución considerable en el rendimiento, dado que se puede acceder al disco duro mucho más rápido que a la memoria RAM. Es normal que al utilizar la memoria virtual el LED del disco duro permanezca encendido casi constantemente y, en el caso del sistema Microsoft Windows, es común que aparezca un archivo "win386.swp", de gran tamaño en proporción a las necesidades de la memoria de acceso aleatorio. Los mecanismos de distribución de memoria La memoria central se puede distribuir de tres maneras: segmentación: los programas se dividen en paquetes de longitudes variadas conocidos como "segmentos". paginación: consiste en dividir la memoria en bloques y los programas en páginas de longitud fija. una combinación de segmentación y paginación: algunas partes de la memoria se segmentan y otras se paginan. La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 50 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA 5.2 Punteros Un puntero es una variable que contiene la dirección de memoria de un dato o de otra variable que contiene al dato en un arreglo. Esto quiere decir, que el puntero apunta al espacio físico donde está el dato o la variable. Un puntero puede apuntar a un objeto de cualquier tipo, como por ejemplo, a una estructura o una función. Los punteros se pueden utilizar para referencia y manipular estructuras de datos, para referenciar bloques de memoria asignados dinámicamente y para proveer el paso de argumentos por referencias en las llamadas a funciones. Muchas de las funciones estándares de C, trabajan con punteros, como es el caso del scanf o strcpy. Estas funciones reciben o devuelve un valor que es un puntero. Por ejemplo: A scanf se le pasa la dirección de memoria del dato a leer... Ya se dijo que un puntero es una variable que guarda la dirección de memoria de otra variable, haciendo logica a esto, decimos que un puntero se declara igual que cualquier otra variable, pero anteponiendo un * (asterisco) antes del nombre de la variable. Su sintaxis seria: tipo *NombrePuntero; Donde tipo es el tipo de dato al que referenciará este puntero, es decir, que si se necesita guardar la dirección de memoria de un dato int, se necesita un puntero de tipo int. 5.3 Ficheros y tipos de ficheros En Internet existen millones de ficheros con toda clase de contenidos, intentar una clasificación puede resultar un tanto artificioso, pero una aproximación al tema sería considerar el tipo de contenido y la utilidad que nos puedan reportar (su posible uso), considerando solo aquellos que pueden ser "abiertos" en nuestro ordenador personal. Para acotar un poco más el campo suponemos que se trata de un PC corriendo Windows como sistema Operativo. No obstante, aún con estas restricciones, es decir, considerando solo aquellos ficheros que pertenecen al mundo Windows y/o MS-DOS, La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 51 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA existen centenares (diríamos miles) de tipos distintos de ficheros, su enumeración y clasificación se saldría de la extensión de estas páginas, pero limitándonos a un pequeño grupo de los más frecuentes (que sin embargo definen una mayoría sobre el total), podemos clasificarlos según el siguiente esquema: Ficheros de Texto Ficheros que solo contienen ASCII estándar, denominado "Plain text" o texto plano (sin formato) en la jerga informática. No presentan problemas de presentación, aunque puede haberlo con algunos caracteres especiales si se trata de ASCII en algún dialecto de idioma distinto al nuestro. Los más notables son los ficheros read.me, lea.me, etc. Todos ellos pueden ser abiertos con un procesador de textos normal (por ejemplo el WordPad del propio Windows). Aunque no directamente representables en su verdadero formato (necesitan para esto del navegador) incluimos aquí los formatos de la Web (HTML), que son también solo texto ASCII. Tienen las terminaciones que se indican: HTML, HTM, SHTM, SHTML, CHTML, CHTM, ASP, CSS, TXT, TEXT, IIF Texto formateado Existen muchos tipos (tantos como fabricantes), el contenido es principalmente ASCII pero acompañado de múltiples caracteres específicos de control de formato y presentación. Son los ficheros producidos por procesadores de texto (del tipo Word de MS o WordPerfect, por ejemplo) y sistemas de auto edición. Requieren un programa específico para abrirlos. Pueden ser también abiertos con un procesador de texto ASCII puro, pero entonces son difícilmente legibles, porque junto con el texto normal aparecen combinaciones de caracteres extraños (los denominados caracteres de control) que sirven para indicar que tipo de letra se utiliza en cada párrafo, si es negrita, subrayado, etc. etc. La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 52 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA Tienen terminaciones muy diversas, a continuación incluimos algunas (incluimos también algunos formatos correspondientes a hojas de cálculo): DOC, RTF, WPD, PDF, DVI, GID, HLP, GID, VK1, XLS. Ficheros de Audio Ficheros de sonido de diversos tipos, existen multitud de "codecs" para este tipo de ficheros, pero los más frecuentes en la Web son los siguientes [3]: WAV, AU, RA, RAM, AIF, AIFC, AIFF, MID, MIDI, LAM, SND, MP3, VCD, RMI. Ficheros de imagen Ficheros con imágenes estáticas o animadas (no-video), incluyendo formatos para diseño gráfico CAD ("Computer Aided Design"). En informática se utilizan dos formas básicas para almacenar imágenes, a su vez de cada una existen muchas variantes; son denominadas raster y vectorial. El sistema raster consiste en descomponer la imagen en una serie de puntos (píxel) como si fuese un mosaico, y almacenar el color y brillo de cada uno de estos puntos. Naturalmente se consigue más definición cuento mayor sea el número de puntos, pero a cambio de que el fichero resultante es mayor (hay que almacenar más datos). Este tipo de imagen es el que vemos en la pantalla de nuestro monitor (que a fin de cuentas muestra puntos), y es poco adecuado para ciertas manipulaciones, por ejemplo hacer zoom (aumentar o disminuir). Es fácil entender que si se aumenta mucho la imagen empiezan a verse lo puntos (como si nos acercamos demasiado a una foto del periódico). Entre los ficheros de este tipo están los terminados en GIF, JPG, TIF, JPEG, PNG, BMP, ICO. Los formatos para ser vistos en páginas Web son todos de este tipo. En el sistema vectorial, cada elemento de la imagen, línea, punto, polígono, zona de color, etc. es definida por sus propiedades matemáticas, de forma que, por ejemplo, una La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 53 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA línea entre dos puntos puede ser definida como una recta (o un tipo de curva) que pasa por dichos puntos, con un color, un grueso y un tipo de trazo (continuo, discontinuo, puntos, etc). Las imágenes vectoriales son muy indicadas para dibujos de tipo técnico, por ejemplo: mapas geográficos, cartografía, diseño arquitectónico, diseño mecánico, etc, así como para cierto tipo de diseño artístico. Resulta imprescindible para dibujos en los que se necesita conocer la escala, o sobre los que es necesario hacer cálculos. Por ejemplo, conocer la distancia entre dos puntos o la intersección de dos líneas. Soporta los cambios de tamaño (zoom) con absoluta precisión. Entre los ficheros de este tipo están los terminados en DWG, DWF, DXF. Ficheros de Video Ficheros con video para ser reproducido en el ordenador (pueden incluir sonido) y en general contenidos multimedia: MOV, AVI, QT, MPE, MPEG, MPG, ASF. Ficheros ejecutables Ficheros que pueden ser ejecutados directamente en el ordenador; son realmente programas, aunque algunos tienen la sola finalidad de desempaquetar un cierto contenido que viene incluido en el propio fichero (caso de los denominados ficheros autoextraíbles y compresores). Entre estos últimos están los de terminación: EXE, ZIP, ARC, COMO, ARJ, LZH, TAR y TGZ. También existen ejecutables de tipo muy específico, por ejemplo ser incluidos en páginas Web. Entre estos están los programas Java y ActiveX, por ejemplo: CLASS, JAVA, JS, CAB, INF y OCX. La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 54 LICENCIATURA EN SISTEMAS COMPUTACIONALES PROGRAMACIÓN LENGUAJE C ANTOLOGÍA BIBLIOGRAFÍA Diseño de Algoritmos y su programación en C. (2015). Méndez, A. Ed. Alfa Omega C/c ++: curso de programación 2015 (manual imprescindible). Acera, M. Ed. Anaya Multimedia. BIBLIOGRAFÍA ELECTRÓNICA http://www.monografias.com/trabajos/introc/introc.shtml#ixzz4NJAg4yn9 https://www.ecured.cu/Constante_(Inform%C3%A1tica) http://arco.esi.uclm.es/~david.villa/pensar_en_C++/vol1/ch12s06.html http://www.carlospes.com/curso_de_informatica_basica/01_04_datos_de_entrad a_y_datos_de_salida.php http://lml.ls.fi.upm.es/ep/entornos.html#toc5 http://www.sites.upiicsa.ipn.mx/polilibros/portal/polilibros/p_terminados/PolilibroF C/Unidad_III/Unidad%20III_8.htm http://eps.upo.es/troncoso/MaterialDocente/FP/T2.pdf http://correo.uan.edu.mx/~iavalos/Estructuras%20de%20desicion.html http://www.iesjuandelacierva.com/paginade/fupro/apuntes/ut10.htm http://platea.pntic.mec.es/vgonzale/cyr_0204/cyr_01/control/lengua_BASIC/funci ones.htm http://www.zator.com/Internet/A8_2_3.htm La presente Antología es el resultado de una compilación de obras, creada sin fines de lucro, con el propósito de ayudar a los estudiantes el Instituto de Educación Digital del Estado de Puebla en su proceso de aprendizaje. Queda prohibido su uso, reproducción parcial o total sin la autorización del IEDEP 55