Subido por mon jara

A. PROGRAMACIÓN LENGUAJE C

Anuncio
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
Descargar