Documentos de Académico
Documentos de Profesional
Documentos de Cultura
SERGIO BERMDEZ
ROJAS Acreditador
PASTO
Julio de 2012
1
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
2
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
INTRODUCCIN
Aunque para la realizacin del mdulo se han realizado esfuerzos por sintetizar
los temas ms importantes de la programacin, es indispensable que los
estudiantes no se queden nicamente con lo expuesto en este documento, sino
que traten de profundizar ms, aprovechando las mltiples opciones que se
ofrecen en la red; esta tarea puede ser apasionante, pues es la base para
abordar los temas que se acercan cuando inicien el trabajo con bases de datos.
Para terminar, solo resta decir que este mdulo est construido, con base en una
recopilacin de conceptos de diferente autores, que llevarn al estudiante a un
aprendizaje significativo, complementado con ejercicios, una amplia referencia
bibliogrfica y direcciones web, que posibilitarn una mayor autonoma y
confianza por parte del estudiante.
3
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
NDICE DE CONTENIDO
INTRODUCCIN 3
4
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
5
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
BIBLIOGRAFA 113
6
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
LISTADO DE TABLAS
TEMA PAG
7
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
TEMA PAG
FIGURA 4. Vector 44
FIGURA 5. Matriz 46
8
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
UNIDAD 1
Cabe resaltar que si bien es cierto que para la construccin del presente
mdulo, se tuvo en cuenta textos de autores reconocidos y sitios web
especializados en programacin, es vital que todos los estudiantes estn
siempre atentos a las posibilidades que les ofrece la web, mediante
diversos recursos multimediales (videos, tutoriales, textos en lnea) para
ampliar y profundizar sus conocimientos.
Justificacin
La primera unidad permite que el estudiante realice un repaso sobre la
conceptualizacin del tema de programacin de computadores, y lo va
involucrando en actividades prcticas utilizando el editor para el lenguaje
C.
Intencionalidades
Formativas Afianzar conocimientos referentes a la programacin de computadoras,
con un lenguaje especifico
Propsitos de la unidad
Objetivos de la unidad
9
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Competencias de la unidad
Metas de aprendizaje
Denominacin de
captulos Captulo 1: Generalidades
Captulo 2: Conceptos bsicos de los programas en C
Captulo 3: Sentencias de control y funciones
10
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
CAPITULO 1: GENERALIDADES
Introduccin
11
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Ventajas:
Tiene una estructura clara y por ende una buena presentacin.
Es ms fcil de comprender
Facilita la revisin de la codificacin
Reduce el tiempo de prueba y depuracin
12
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Lenguaje de Programacin C
13
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Lo nuevo que Dennis Ritchie le incorpor a C, fue los tipos y estructuras de datos
que consiguen clarificar la programacin y obtener un lenguaje mucho ms
eficiente. Ritchie dise, desde 1970 a 1972 junto a Brian Kernighan, un lenguaje
que permita realizar una programacin estructurada en la que se podan
economizar las expresiones a usar y con el que los desarrolladores podran contar
con un buen conjunto de operadores y tipos de datos para programar tanto en alto
como en bajo nivel de manera simultnea.
Sistemas operativos
Intrpretes
Editores
Ensambladores
Compiladores
14
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Actualmente, debido a sus caractersticas, puede ser utilizado para todo tipo de
programas.
15
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
16
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Como en el sistema Windows, se trabaja con ventanas que tienen ttulo, barra de
men, barra de conos de acceso rpido, barra de estado y la ventana para
escribir la codificacin del programa.
17
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Editar un programa
Compilar un programa
Ejecutar y compilar
La depuracin permite determinar las causas de los errores y por tanto facilita la
correccin de los mismos, en un programa determinado.
El proceso de depuracin
Pueden existir varias causas de error que se pueden agrupar en dos grandes
grupos:
19
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Deteccin de Errores
Dev C++ cuenta con el depurador gdb integrado. Antes de compilar, y para que se
aada al fichero ejecutable cierta informacin que luego utilizar el depurador de
programas, se debe comprobar que est seleccionada la siguiente opcin:
Herramientas / Opciones de Compilador / Configuracin / Linker / Generar
Informacin de Debug: Yes.
Comenzar la depuracin
20
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Control de la depuracin.
Siguiente Paso (F7): ejecuta la siguiente instruccin del programa (la marcada en
color azul). Cuando dicha instruccin contiene una llamada a una funcin/mtodo,
dicha funcin/mtodo se ejecuta completamente tras seleccionar Siguiente Paso.
Esta posibilidad es muy til cuando hay seguridad de que esa funcin/mtodo no
contiene ningn tipo de error.
Para ello existe la ventana Watch, que se activa pulsando la pestaa Depurar
situada en la parte izquierda del entorno.
Cuando se quiere aadir una variable a dicha ventana se puede: pulsar la opcin
Aadir Watch (F4) para despus escribir el nombre de la variable, o seleccionar
la variable con el ratn y pulsar Aadir Watch.
21
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Introduccin
En este captulo se abordarn los conceptos bsicos necesarios para iniciar este
recorrido sobre programacin.
#include <iostream.h>
Esta instruccin indica que se sustituya CANTIDAD por el valor 100, cada vez que
22
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
aparezca en el programa.
Int VARIABLE1;
Int funcion1();
int main()
{ sentencia 1;
sentencia 2;
return(0)
}
Las sentencias que se incluyen en las funciones, finaliza con punto y coma (;).
Sentencias: cada una de las ordenes que se le da al compilador por medio del
lenguaje para que efectu una accin. Las sentencias finalizan con punto y coma
(;).
23
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Palabras reservadas: son trminos especiales que hacen parte del lenguaje y
tienen un significado especial. Estas palabras reservadas no se pueden utilizar
como nombre de identificador o funcin.
Las siguientes son palabras reservadas: asm, enum, auto, extern, break, float,
case, for, char, goto, const, if, signed, sizeof, static, struct, switch, typedef,
continue, default, do, double, else, int, long, register, return, short, union,
unsigned, void, volatile, while.
!%[]^\&;*'(:)<->+?=,{.}/~"
24
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
capacidad para crear sus propios tipos de datos. Los tipos bsicos son;
Enteros
Nmeros de coma flotante (reales)
Caracteres
La siguiente tabla muestra los distintos tipos de dato que se pueden usar en C
para declarar variables.
Declaracin de Variables
Las variables que se declaran dentro del main() se dice que son variables
locales, las que se declaran antes del main() se dicen globales.
25
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
cout << imprime en pantalla la informacin, sea esta una cadena de texto (se
escribe entre comillas dobles) o el valor que contiene una variable. Adems se
puede incluir indicadores de formato que indican una tarea especfica como
saltar una lnea o tabular. Requiere incluir la librera iostram.h
26
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Almacenar datos
scanf(): la funcin scanf(), disponible al incluir stdio.h, permite leer datos por
teclado. La funcin scanf se usa de un modo similar a printf(), su primer
argumento es una cadena con marcas de formato. A ste le siguen una o ms
direcciones de memoria. Si desea leer por teclado el valor de una variable
entera a, puede hacerlo as: scanf ("%d", &a);
27
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Operadores
Operadores Lgicos
o && es conocido como and (y). Se utiliza para unir condiciones, para que
la expresin sea verdadera, todas las condiciones que se unen deben
ser verdaderas.
o || operador or (o). La sentencia es verdadera cuando una de las
condiciones es verdadera. (alt-124).
o ! niega la expresin o condicin. Ej. !(a>b) indica a no es mayor que b
28
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
29
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Introduccin
Esto implica que, luego de conocer cul es la meta a alcanzar, se subdivide esta
en otras varias tareas concurrentes, por ejemplo:
Leer un teclado, procesar datos, mostrar los resultados. Luego a estas se las
vuelve a dividir en otras menores:
Tal es el criterio con que est estructurado el lenguaje C, donde una de sus
herramientas fundamentales son las funciones. Todo compilador comercial trae
una gran cantidad de Libreras de toda ndole, matemticas, de entrada - salida,
de manejo de textos, de manejo de grficos, etc, que solucionan la mayor parte
de los problemas bsicos de programacin.
Ahora bien, para que esos bloques de cdigo cumplan tareas especficas, es
indispensable incluir sentencias de control y repetitivas que apoyan el diseo
estructural de un programa y que se debe utilizar en atencin a lo que se requiere
lograr en la tarea.
if (a= = b)
30
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
{ c++;
x = z;
}
else
{ v--;
y = t;
}
31
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
}
}
32
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
La siguiente sintaxis for( ; ; ) crea un ciclo infinito, a menos que exista una
condicin interna que obligue a salir del ciclo. Ej.
int i;
char r;
for ( ; ; )
{ printf(Desea continuar (s/n) : );
cscanf(%c,&r);
if ( r != s) break;
}
33
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
int op;
do
{ printf(\n\n);
printf(1. Llenar informacin );
printf(\n2. Mostrar informacin );
printf(\n3. Eliminar informacin );
printf(\n4. Salir );
printf(\n\n);
printf(Elija opcin : );
scanf(%d, &op);
switch(op)
{ case 1:
{ printf(\n Llenar);
break;
}
case 1:
{ printf(\n Mostrar);
break;
}
case 1:
{ printf(\n Eliminar);
break;
}
}
while(op!=4);
printf(\nDigite una tecla para continuar );
getch( );
}
NOTA: no confundir definicin con llamada; una funcin puede llamar a tantas
otras como desee.
34
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
#include <stdio.h>
main()
{
float k ; int p ; double z ;
...........
k = mi_funcion( p, z ); /* LLAMADA a la funcin */
...........
} /* fin de la funcin main() */
Algunos ejemplos :
El primer trmino del prototipo indica el tipo de dato retornado por la funcin; en
caso de obviarse el mismo, se toma por omisin el tipo int. Sin embargo, aunque
35
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Una vez que en su programa se ha definido una funcin, esta puede ser llamada
las veces que sean necesarias. Para llamar a una funcin basta con hacer
referencia a su nombre y si la misma requiere de parmetros estos debern
indicarse dentro de parntesis.
36
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Ejemplo:
int Mayor(int,int);
Es importante notar que cuando una funcin se llama a s misma, una nueva
copia de esta funcin es la que se ejecuta. Las variables locales de la segunda
funcin no interfieren con las variables locales de la primera, as mismo, las
variables locales no se pueden afectar mutuamente. Se tomar como ejemplo
un programa que calcule el factorial de un nmero entero introducido por el
usuario. El factorial est definido como el producto del nmero en cuestin por
todos los nmeros enteros menores que l, de tal manera que el factorial de
5=5*4*3*2*1 = 120. El cdigo puede quedar as:
#include <iostream.h>
double factorial(int valor);
37
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
1. La funcin se declara de tipo doble, puesto que los valores que retorna la
funcin pueden ser demasiado grandes.
2. Tambin se utiliza una variable global (K), que sirve de contador, para
determinar el nmero de iteraciones que la funcin se repite
38
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
El "Juego" torres de Hanoi consiste en tres palos, en el cual el primer palo tiene N
nmero de argollas colocadas de tal manera que las ms grandes siempre deben
estar por debajo de las ms pequeas...el segundo palo le podremos llamar palo
auxiliar y es el que nos ayudar de cierta manera a lograr el desarrollo del juego
el cual ser lograr pasar todas las argollas al tercer palo de tal manera que se
mueve una argolla a la vez y que nunca una argolla grande quede encima
de una pequea
39
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
UNIDAD 2
Propsitos de la unidad
Objetivos de la unidad
40
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Competencias de la unidad
Denominacin de
captulos Arreglos y cadenas
Ordenacin y bsqueda
Punteros o apuntadores
41
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Introduccin
Los arreglos son una coleccin de variables del mismo tipo que se referencian
utilizando un nombre comn. Un arreglo consta de posiciones de
memoria contigua. La direccin ms baja corresponde al primer elemento y la
ms alta al ltimo. Un arreglo puede tener una o varias dimensiones. Para
acceder a un elemento en particular de un arreglo se usa un ndice.
Por ejemplo, para declarar un arreglo de enteros llamado listanum con diez
elementos se hace de la siguiente forma:
int listanum[10];
En C, todos los arreglos usan cero como ndice para el primer elemento. Por
tanto, el ejemplo anterior declara un arreglo de enteros con diez elementos
desde listanum[0] hasta listanum[9].
42
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
int tabladenums[50][50];
Observar que para declarar cada dimensin lleva sus propios parntesis
cuadrados.
Para acceder los elementos se procede de forma similar al ejemplo del arreglo
unidimensional, esto es,
main()
{
int t,i,num[3][4];
for(t=0; t<3; ++t)
for(i=0; i<4; ++i)
num[t][i]=(t*4)+i*1;
43
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Por ejemplo:
int vector[X];
VECTOR[X]
0 1 2 3 4 5 6 7
FIGURA 4. Vector
Como se puede observar slo se necesita de un ndice (x) para acceder a cada
elemento de la lista. Por ejemplo si se quisiera rellenar la casilla 4 dndole el
valor 10, solo tendra que escribir la sentencia: vector[4]=10;
Cuando un array se pasa como argumento de una funcin, no se pasa una copia
completa del array, sino slo la direccin del primer elemento del array. Para
44
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
#include <stdio.h>
#include <conio.h>
main()
{
int vector[7]; /* tipo nombre_del_array[Tamao] */
int c; /* Contador */
for(c=0;c<=6;c++)
{
printf("Numero para guardar en vector[%d]: ",c);
scanf("%d",&vector[c]);
}
for(c=0;c<=6;c++)
{
printf("\nValor Vector[%d]=%d",c,vector[c]);
}
getch();
}
El ndice del for ha de ser capaz de recorrer todas las casillas del array.
45
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Tipo nombre_array[tamao]={lista_valores};
int lista[6]={2,4,6,8,1,5};
int datos[100]={0}; // todos se inicializan a 0
int num[4]={4,5}; // equivale a {4,5,0,0}
0 a b c d e
ndice de
filas 1 e f g h i
3 j k l m n
FIGURA 5. Matrz
Ejemplo:
#include <stdio.h>
#include <conio.h>
main()
{
char matriz[7][7]; /* Declaracin de matriz de 7*7 caracteres */
int c,d; /* Contadores */
for(c=0;c<=6;c++)
{
for(d=0;d<=6;d++)
46
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
{
printf("Caracter para guardar en matriz[%d][%d]: ",c,d);
scanf("%c",&matriz[c][d]);
getchar();
}
}
for(c=0;c<=6;c++)
{
for(d=0;d<=6;d++)
{
printf("\nValor matriz[%d][%d]=%c",c,d,matriz[c][d]);
}
}
getch();
}
char cadena[11];
char cadena[5]="hola";
Para asignar la entrada estndar a una cadena se puede usar la funcin scanf
con la opcin %s (observar que no se requiere usar el operador &), de igual forma
47
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Por ejemplo:
main()
{
char nombre[15], apellidos[30];
printf("Introduce tu nombre: ");
scanf("%s",nombre);
printf("Introduce tus apellidos: ");
scanf("%s",apellidos);
printf("Usted es %s %s\n",nombre,apellidos);
}
main()
{
char nombre[40], apellidos[40], completo[80];
nombre="Jos Mara"; /* Ilegal */
apellidos="Morelos y Pavn"; /* Ilegal */
completo="Gral."+nombre+appellidos; /* Ilegal */
}
Funciones de Carcter
Ej. 2 char x;
x = toupper(getche( )); // guarda en la variable x una letra en maysculas
// digitada por el usuario.
Ej. 3 if ( toupper( getche( ) = = S) // verifica que la letra digitada por el
// usuario sea S.
48
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Funciones de Cadena
Para trabajar con cadenas es necesario utilizar ciertas funciones, que requieren
incluir en el programa la libreria: string.h
49
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
if (strcpm(salir,t1)) break;
}
50
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Introduccin
El ordenar un grupo de datos significa mover los datos o sus referencias para que
queden en una secuencia tal que represente un orden, el cual puede ser
numrico, alfabtico o incluso alfanumrico, ascendente o descendente.
51
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Una lista se dice que est ordenada por la clave k si la lista est en orden
ascendente o descendente con respecto a esta clave. La lista se dice que est en
orden ascendente si: i < j implica que k[i] <= k[j] y se dice que est en orden
descendente si: i > j implica que k[i] <= k[j] para todos los elementos de la lista.
Por ejemplo, para una gua telefnica, la lista est clasificada en orden
ascendente por el campo clave k, donde k[i] es el nombre del abonado (apellidos,
nombre).
4 5 14 21 32 45 orden ascendente
75 70 35 16 14 12 orden descendente
Los mtodos (algoritmos) de ordenacin son numerosos, por ello se debe prestar
especial atencin en su eleccin. Cmo se sabe cul es el mejor algoritmo? La
eficiencia es el factor que mide la calidad y rendimiento de un algoritmo. En el
caso de la operacin de ordenacin, dos criterios se suelen seguir a la hora de
decidir qu algoritmo de entre los que resuelven la ordenacin es el ms
eficiente:
1) tiempo menor de ejecucin en computadora.
2) menor nmero de instrucciones.
52
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Mtodo Burbuja
53
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
4. El proceso contina hasta que cada elemento del vector ha sido comparado
con sus elementos adyacentes y se han realizado los intercambios necesarios.
Para poder realizar este intercambio se debe apoyar en una variable temporal que
permite almacenar uno de los valores por un periodo, para que no se pierda.
#include <conio.h>
#include <iostream.h>
int main()
{
int n; // Numero de elementos del vector
int i; // Contador
int arreglo[100]; // Arreglo de enteros
system(cls);
cout<<"Digite el numero de elementos < 100:";
cin>>n;
for (i=0;i<n;i++)
{
cout<<"Digite valor para la posicin :"<< i+1<<" ";
cin>>arreglo[i];
}
cout<<"\nVector Leido:\n";
MostrarVector(arreglo,n);
cout<<"\nProcesamiento
Burbuja:\n";
burbuja(arreglo, n);
54
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
cout<<"\nVector Ordenado:\n";
MostrarVector(arreglo,n);
getch();
return(0);
}
Esta es la lista:
4-3-5-2-1
Ahora se tiene:
3-4-5-2-1
55
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Se intercambia y se obtiene:
3-4-2-5-1
3-4-2-1-5
3-2-1-4-5
2-1-3-4-5
1-2-3-4-5
Mtodo de Insercin
En este tipo de algoritmo los elementos que van a ser ordenados son
considerados uno a la vez. Cada elemento es INSERTADO en la posicin
apropiada con respecto al resto de los elementos ya ordenados.
53 15 27 31 29 11 59 7
15 53 27 31 29 11 59 7
15 53 27 31 29 11 59 7
56
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Como resultado:
15 27 53 31 29 11 59 7
para i =2 hasta i = n
haga lugar = i
temporal = X[i]
para j =1 hasta j = i - 1 haga
57
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
La codificacin sera:
#include <conio.h>
#include <iostream.h>
#define MAXNUM 100
int main()
{
int n; // numero de elementos del vector
int i; // Contador
int arreglo[100]; // Arreglo de enteros
system(cls);
cout<<"Digite el numero de elementos:";
cin>>n;
for (i=0;i<n;i++)
{
cout<<"por favor escriba el valor en la posicion :" <<i+1;
cin>>arreglo[i];
}
cout<<"\nVector Leido:\n";
MostrarVector(arreglo,n);
cout<<"\nOrdenamiento por insercin:\n";
insercion(arreglo, n);
cout<<"\nVector Ordenado:\n";
MostrarVector(arreglo,n);
getch();
return(0);
}
58
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Mtodo Shell
59
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
El algoritmo ser:
salto = n div 2
4 10 9 3 7 2 1 9
Salto = 4 y es <> 0
Cambio = 0
I=1
4 10 9 3 7 2 1 9
Variable i = 2
4 10 9 3 7 2 1 9
4 10 9 3 7 2 1 9
60
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
#include <conio.h>
#include <iostream.h>
int main()
{
int n; // El numero de elementos del vector
int i; // Contador
int arreglo[100]; // Arreglo de enteros
system(cls);
cout<<"Digite el numero de elementos < 100:";
cin>>n;
for (i=0;i<n;i++)
{
cout<<"digite valor para ["<<i+1<<"] ";
cin>>arreglo[i];
}
cout<<"\nVector Leido:\n";
MostrarVector(arreglo,n);
61
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Mtodo Quicksort
Algoritmo desarrollado por Charles Hoare propuesto en 1962. Para cada paso,
se escoge un elemento "a" de alguna posicin especfica dentro del arreglo.
Una forma puede ser: comparar "a" con el ltimo elemento del arreglo. En la
comparacin, si el elemento "a" toma la ltima posicin y el ltimo elemento toma
62
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Una vez que se termin de comparar "a" con todos los elementos, "a" ya se
encuentra en su lugar y a la izquierda de "a" quedan todos los elementos
menores a l y a su derecha todos los mayores.
43 2 90 52 87 100 -10 68 13 7 21 45
Las variables izq (izquierda) y der (derecha), una variable para controlar el punto
pvot (pivote), que se puede mirar su comportamiento en los extremos resaltados
0 11 43 2 90 50 87 100 - 68 13 7 21 45 50 0 43
10
0 11 43 2 90 50 87 100 - 68 13 7 21 45 50 0 43
10
63
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
0 11 43 2 90 50 87 100 - 68 13 7 21 45 50 0 43
10
O
Se compara ahora 43 con 21 de la posicin der=10, no estn en posiciones
relativas ordenadas, se proceder entonces a su intercambio, quedando el vector,
paso a paso as:
0 10 43 2 90 50 87 100 - 68 13 7 21 45 50 0 43
10
10
21 2 90 50 87 100 - 68 13 7 43 45 50
10
1 10 21 2 90 50 87 100 - 68 13 7 43 45 50 10 43
10
1 10 21 2 90 50 87 100 - 68 13 7 43 45 50 10 43
10
64
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
0 10 21 2 90 50 87 100 - 68 13 7 43 45 50 10 43
10
2
21 2 43 50 87 100 - 68 13 7 90 45 50
10
2 90 21 2 43 50 87 100 - 68 13 7 90 45 50 2 43
10
2 9 21 2 43 50 87 100 - 68 13 7 90 45 50 2 43
10
9
21 2 7 50 87 100 - 68 13 43 90 45 50
10
3 9 21 2 7 50 87 100 - 68 13 43 90 45 50 9 43
10
3 9 21 2 7 50 87 100 - 68 13 43 90 45 50 9 43
10
3
21 2 7 43 87 100 - 68 13 50 90 45 50
10
Izq De 0 1 2 3 4 5 6 7 8 9 10 11 12 PosPi Pivote
r v
65
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
3 8 21 2 7 43 87 10 - 68 13 50 90 45 50 3 43
0 10
De 0 1 2 3 4 5 6 7 8 9 1 11 1 PosPi Pivote
Izq r 0 2
3 8 21 2 7 43 87 100 -10 68 1 5 9 45 5 3 43
3 0 0 0
8
21 2 7 13 87 100 -10 68 4 5 9 45 5
3 0 0 0
4 8 21 2 7 13 87 100 - 68 43 50 90 45 50 8 43
10
4 8 21 2 7 13 87 100 - 68 43 50 90 45 50 8 43
10
4
21 2 7 13 43 100 - 68 87 50 90 45 50
10
4 7 21 2 7 13 43 100 - 68 87 50 90 45 50 4 43
10
4 6 21 2 7 13 43 100 - 68 87 50 90 45 50 4 43
10
6
21 2 7 13 - 100 43 68 87 50 90 45 50
10
5 6 21 2 7 13 - 100 43 68 87 50 90 45 50 6 43
66
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
10
5 5 21 2 7 13 - 43 100 68 87 50 90 45 50 5 43
10
Se observa que el valor del pivote, 43, est en el sitio que le corresponde en
ordenamiento ascendente, y que a su izquierda se forma una sublista,
desordenada, desde la posicin 0 a la 4, con todos sus elementos menores; y una
sublista a la derecha, desde la posicin 6 hasta la 12, en desorden y con todos
mayores que el pivote. A partir de este punto se procede con el mismo
procedimiento seguido para la lista completa, en cada una de las sublistas y por
separado.
Con lo anterior se puede describir el siguiente algoritmo para que usted mediante
una prueba de escritorio verifique que hace
#include <conio.h>
#include <iostream.h>
int main()
{ int n; // numero de elementos del vector
int i; // Contador
int arreglo[100]; // Arreglo de enteros
67
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
system(cls);
cout<<"Digite el numero de elementos:";
cin>>n;
for (i=0;i<n;i++)
{ cout<<"Digite valor para la posicion :[" <<i+1<<"] ";
cin>>arreglo[i];
}
cout<<"\nVector Leido:\n";
MostrarVector(arreglo,n);
cout<<"\nOrdenamiento por QuickSort:\n";
QuickSort(arreglo,0,n-1);
cout<<"\nVector Ordenado:\n";
MostrarVector(arreglo,n);
getch();
return(0);
}
// Ordenamiento QuickSort.
68
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
}
while (menor >= izquierda)
{
menor--;
if (arreglo[menor] <= pivote) break;
}
if (mayor < menor) intercambiar(arreglo,mayor,menor);
}
intercambiar(arreglo,derecha,mayor);
QuickSort(arreglo,izquierda,mayor-1);
QuickSort(arreglo,mayor+1,derecha);
}
Bueno slo queda que usted que es una persona muy pila, indague ms acerca
de estos mtodos, tanto de bsqueda como de ordenamiento , o realice nuevas
mejoras a estos programas aqu desarrollados.
69
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Mtodo Lineal
encontro = FALSE
para k= 0 hasta n haga
si X[k] = ValorBuscado haga
mostrar Elemento encontrado en la posicin , k
encontro = TRUE
k=n;
fin si
fin para
si encontro = FALSE haga
mostrar No se encontr el elemento
fin si
#include <conio.h>
#include <iostream.h>
int main()
{
int n; // numero de elementos del vector < 100
int valor; // El numero a buscar
int i; // Contador
int x; // Almacenar el valor devuelto por la funcin
int arreglo[100]; // Arreglo de enteros
system(cls);
cout<<"Digite el numero de elementos:";
cin>>n;
for (i=0;i<n;i++)
{
cout<<"Digite el dato ", i;
70
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
cin>>arreglo[i];
}
cout<<"Digite el numero a buscar:";
cin>>valor; cout<<"\nVector Leido:\n";
mostrar(arreglo,n);
cout<<"\nBusqueda lineal:\n";
if ((x=buscar(valor, arreglo, n)) != -1)
cout<<"\nEncontrado en la posicion \n"<<x+1;
else
cout<<"\nNo existe en el arreglo\n";
getch();
}
Binaria
71
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
arreglo. Para poder aplicar este algoritmo se requiere que el arreglo este
ordenado. Su implementacin es la siguiente:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define TAM 15
main()
{
int a[TAM], busca, temp, bajo, alto, central, i;
printf("Llenando el arreglo con nmeros aleatorios\n");
for (int i=0; i< TAM; i++)
a[i]=rand()%100; //llena el vector con 15 nmeros aleatorios entre 0 y 100
//Implementacin de Ordenamiento por burbuja de menor a mayor
printf ("Ordenando arreglo...\n");
for (int j=1; j <= TAM; j++)
for (i=0; i< TAM-1; i++)
if (a[i] > a[i+1])
{
temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
}
bajo = 0;
alto = TAM-1;
central = (bajo+alto)/2;
if (busca == a[central])
printf("\n%d encontrado en posicion %d", busca, central);
72
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
else
printf("\n%d no existe", busca);
printf ("\n\nEl arreglo ordenado era\n\n");
for (i=0; i< TAM; i++)
printf ("%d ", a[i]);
getch();
}
Mtodo de Hash
La idea principal de este mtodo consiste en aplicar una funcin que traduce el
valor del elemento buscado en un rango de direcciones relativas. Una desventaja
importante de este mtodo es que puede ocasionar colisiones.
inicio
hash <- valor_buscado mod numero_primo
fin
73
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Introduccin
Los apuntadores son una parte fundamental de C. Si usted no puede usar los
apuntadores apropiadamente entonces est perdiendo la potencia y la flexibilidad
que C ofrece bsicamente.
Al definir un apuntador o puntero, este contiene una direccin que no indica una
variable conocida, si se desea que contenga la direccin de una variable, esta se
debe asignar.
74
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Se debe tener claro que de acuerdo a las asignaciones que se realicen, se van a
presentar diferencias en el contenido de las variables y los apuntadores.
Ej. int x, *px;
px = &x; \\ asigna a px la direccin de la variable x
*px = 10; \\ asigna el valor 10 a la variable x, es lo mismo que decir x = 10.
\\ Prcticamente la expresin *px es la variable x.
char *ptr1; //puntero a un char "utilizado para las cadenas de longitud variable".
int *ptr2; //puntero a un entero.
float *ptr3; //puntero a un float
int *p1, num1, num2, *p2; //punteros a enteros *p1, *p2
75
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
int *apuntador;
main()
{
int x = 1, y = 2;
int *ap;
ap = &x;
y = *ap;
x = ap;
*ap = 3;
}
int x = 1, y = 2;
int *ap;
ap = &x;
y = *ap;
76
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
x = ap;
*ap = 3;
main()
{
int *ap;
*ap = 100;
}
main()
{
int *ap;
int x;
ap = &x;
77
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
*ap = 100;
}
Con los apuntadores se puede realizar tambin aritmtica entera, por ejemplo:
main()
{
float *flp, *flq;
78
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
main()
{
int x, y;
x = 10; y = 20;
printf("x=%d\ty=%d\n",x,y);
swap(&x, &y);
printf("x=%d\ty=%d\n",x,y);
getch();
}
Existe una relacin estrecha entre los punteros y los arreglos. En C, un nombre
de un arreglo es un ndice a la direccin de comienzo del arreglo. En esencia, el
nombre de un arreglo es un puntero al arreglo. Considere lo siguiente:
int a[10], x;
int *ap;
ap = &a[0]; /* ap apunta a la direccin de a[0] */
x = *ap; /* A x se le asigna el contenido de ap (a[0] en este caso) */
*(ap + 1) = 100; /* Se asigna al segundo elemento de 'a' el valor 100 usando ap*/
ap = a; en vez de ap = &a[0];
y tambin *(a + i) en vez de a[i], esto es, &a[i] es equivalente con a+i.
79
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
expresar como:
Por lo tanto:
int strlen(char s[]); y una declaracin equivalente es int strlen(char *s); ya que char
s[] es igual que char *s.
Se muestra enseguida una funcin para copiar una cadena en otra. Al igual que
en el ejercicio anterior existe en la biblioteca estndar una funcin que hace lo
mismo.
80
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
81
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
a. Algoritmo de enumeracin
b. Algoritmo de insercin
c. Algoritmo de intercambio
a. Algoritmo de burbuja
b. Algoritmo de shell
c. Algoritmos de inserccin
a. Mtodo de Burbuja
b. Mtodo de Quicksort
c. Mtodo de Shell
82
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
a. Algoritmo de Shell
b. Algoritmo de seleccin
c. Algoritmo de seleccin directa
a. Ordenamiento Quicksort
b. Ordenamiento de Burbuja
c. Ordenamiento de Shell
2) Deduzca, indague, consulte, cules son las ventajas y/o desventajas de los
mtodos de bsqueda y ordenamiento aqu expuestos
A. Ingreso de datos
B. Bsqueda
C. Ordenamiento
D. Estadstica
E. Salir
En cada uno de los mens se incluir, un segundo submen, por ejemplo el item
nmero 3 Ordenamiento puede incluir los mtodos de:
Por burbuja
Por insercin
83
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
UNIDAD 3
Introduccin Los archivos como coleccin de datos sirven como entrada y salida
de datos al computador y son manejados con programas.
Los archivos pueden ser contrastados con Arrays y registros. En un
registro se deben especificar los campos, l nmero de elementos de
un arrays (o arreglo), el nmero de caracteres en una cadena, entre
otros, por esto se denotan como: Estructuras Estticas.
En los archivos no se requiere de un tamao predeterminado, esto
significa que se pueden tener archivos de datos ms grandes o
pequeos, segn se necesiten.
Cada archivo es referenciado por su identificador (su nombre).
Justificacin
Hasta el momento slo se ha trabajado con vectores que almacenan
datos del mismo tipo y que tienen un tamao definido, que no se
puede cambiar durante la ejecucin del programa. Afortunadamente
los lenguajes de programacin C y C++, dejan al usuario construir o
combinar diversidad de datos para conformar estructuras complejas
de informacin, lo que ampla las posibilidades de trabajo con datos.
Adems, hasta el momento los datos que se procesaban en un
programa se perdan, cuando ste dejaba de ejecutarse, puesto que
se estaba trabajando con memoria principal, ahora la solucin llega
con la construccin de estructuras que se puedan almacenar y
acceder en forma de archivos, que se almacenan en memoria
secundaria.
84
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Intencionalidades
Formativas Determinar los mecanismos que se utilizan para combinar diferentes
tipos de datos
Propsitos de la unidad
Manipular diversidad de datos en forma simultnea
Grabar datos en unidades de almacenamiento fsicas
Objetivos de la unidad
Desarrollar programas que manipulen cantidad de datos de
diferentes tipos y que puedan almacenarse y recuperase en
cualquier momento
Competencias de la unidad
Dominar el manejo de estructuras con diversidad de datos
Comprender como se almacenan y recuperan datos en
medios fiscos
Metas de aprendizaje
Realizar programas que presten un verdadero servicio,
cuando se trate de guardar informacin
Denominacin de
captulos ESTRUCTURAS
ARCHIVOS
ACCESO A LOS ARCHIVOS
85
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
CAPITULO 7: ESTRUCTURAS
Introduccin
Al crear o definir una estructura se forma una plantilla que puede usar el
programador para definir una variable de tipo estructura. Las variables que
conforman la estructura son llamadas (elementos) de la estructura.
EJEMPLO:
struct dire
{ char nombre[30];
char direccin[30];
char ciudad[30];
int telefono;
int prefijo;
};
CLIENTE
86
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Para definir variables de ese tipo slo se necesita escribir: dire cliente;
EJEMPLO:
Se desea crear una variable de tipo estructura para almacenar un nmero
complejo.
typedef struct {
double p_real;
double p_imaginario;
} complejo;
Para ingresar datos a una variable de tipo estructura, se puede hacer de dos
maneras:
Por medio de una instruccin de lectura o por medio de una instruccin
de asignacin:
EJEMPLO:
La instruccin: cin>>a.p_real;
Permite ingresar un nmero real a la variable p_real de la variable a
87
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
EJEMPLO:
El siguiente programa muestra cmo se puede utilizar una variable de tipo
estructura en un problema de suma de complejos:
#include <conio.h>
#include <iostream.h>
main()
{ typedef struct {
float parte_real;
float parte_imaginaria;
}complejo;
complejo a,b,c;
system(cls) ;
cout<<"Escriba la parte real de a : ";
cin>>a.parte_real;
cout<<"\nEscriba la parte imaginaria de a : ";
cin>>a.parte_imaginaria;
cout<<"\nEscriba la parte real de b : ";
cin>>b.parte_real;
cout<<"\nEscriba la parte imaginaria de b : ";
cin>>b.parte_imaginaria;
c.parte_real=a.parte_real + b.parte_real;
c.parte_imaginaria=a.parte_imaginaria + b.parte_imaginaria;
cout<<\n <<a.parte_real<<"+ i"<<a.parte_imaginaria;
cout<<\n <<b.parte_real<<"+ i"<<b.parte_imaginaria;
cout<<\n <<c.parte_real<<"+ i"<<c.parte_imaginaria;
getch();
}
88
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Ejemplo:
typedef struct
{ char nombre[20];
char apellido[20];
char ciudad[15];
} Contacto;
typedef struct
{ Contacto lista[100];
char direccion[30];
char telefono[8];
} Directorio;
En este caso para acceder a los miembros de la variable cliente, de tipo Directorio,
se deben utilizar ndices y el operador de acceso a miembro.
EJEMPLO: as se escribe la ciudad del tercer contacto que se encuentra en
Directorio, en la variable cliente:
printf(%s, cliente.lista[2].ciudad);
struct stAnonima {
struct {
int x;
int y;
89
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
};
int z;
};
Para acceder a los campos x o y se usa la misma forma que para el campo z:
stAnonima
Anonima;
Anonima.x = 0;
Anonima.y = 0;
Anonima.z = 0;
#include <iostream.h>
#include <conio.h>
struct A { int x;
char a;
int y;
char b;
};
struct B { int x;
int y;
char a;
char b;
};
main()
{ cout << "Tamao de int: "<< sizeof(int) << endl;
cout << "Tamao de char: "<< sizeof(char) << endl;
90
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Tamao de int: 4
Tamao de char: 1
Tamao de estructura A: 16
Tamao de estructura B: 12
En el caso de objetos int es fcil, ya que ocupan cuatro bytes, pero con los
objetos char no, ya que slo ocupan uno.
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
x a vaco y b vaco
91
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
0 1 2 3 4 5 6 7 8 9 10 11
x y a b vaco
Nota: No olvides que para comparar cadenas se debe usar una funcin,
no el operador ==.
2. Para almacenar fechas podemos crear una estructura con tres campos:
ao, mes y da. Los das pueden tomar valores entre 1 y 31, los meses
entre 1 y 12 y los aos, dependiendo de la aplicacin, pueden requerir
distintos rangos de valores. Para este ejemplo se considerar suficientes
128 aos, entre 1960 y 2087. En ese caso el ao se obtiene sumando
1960 al valor de ao. El ao 2003 se almacena como 43. Usando
estructuras, y ajustando los tipos de los campos, se necesita un char para
dia, un char para mes y otro para ao. Disear una estructura anloga,
llamada fecha, pero usando campos de bits. Usar slo un entero corto sin
signo (unsigned short), es decir, un entero de 16 bits. Los nombres de
los campos sern: dia, mes y anno.
92
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
a 12, dependiendo del mes y del ao, el da debe estar entre 1 y 28, 29,
30 31. El ao siempre ser vlido, ya que debe estar en el rango de 0
a 127. Para validar los das se usar un array int DiasMes[] = {31, 28, 31,
30, 31, 30, 31, 31, 30, 31, 30, 31};. Para el caso de que el mes sea
febrero, se crear otra funcin para calcular si un ao es o no
bisiesto: bool Bisiesto(int); Los aos bisiestos son los divisibles entre 4, al
menos en el rango de 1960 a 2087 se cumple.
Nota: los aos bisiestos son cada cuatro aos, pero no cada 100, aunque
s cada 400. Por ejemplo, el ao 2000, es mltiplo de 4, por lo tanto
debera haber sido bisiesto, pero tambin es mltiplo de 100, por lo tanto
no debera serlo; aunque, como tambin es mltiplo de 400, finalmente lo
fue.
5. Siguiendo con el tema de las fechas. Ahora escribir dos funciones ms: la
primera debe responder a este prototipo: int CompararFechas(fecha,
fecha). debe comparar las dos fechas suministradas y devolver 1 si la
primera es mayor, -1 si la segunda es mayor y 0 si son iguales.
La otra funcin responder a este prototipo: int Diferencia(fecha, fecha), y
debe devolver la diferencia en das entre las dos fechas suministradas.
93
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
CAPITULO 8: ARCHIVOS
Introduccin
Un archivo est compuesto por un conjunto de registros lgicos del mismo tipo.
94
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
archivo (direccin del buffer que utiliza, modo de apertura del archivo, ltimo
carcter ledo del buffer, entre otros).
En esta instancia es importante saber que existe el tipo FILE y que se debe definir
un puntero a FILE, por cada archivo que se vaya a procesar.
ARCHIVO MAESTRO.
ARCHIVO DE TRANSACCIONES.
ARCHIVO DE REPORTE.
ARCHIVO DE TRABAJO.
ARCHIVO DE PROGRAMA.
ARCHIVO DE TEXTO.
2. Datos que pueden ser ledos o grabados como una string se usarn funciones
anlogas a gets y puts.
3. Datos que se capturen o desplieguen con formatos parecidos a los usados por
scanf y printf, se usarn funciones similares, es decir sern problemas
que involucran mezclas de strings, caracteres, floats, etc.
96
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
SEGN SU FUNCIN.
Se define por:
97
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Constantes: estn formados por registros que contienen campos fijos y campos
de baja frecuencia de variacin en el tiempo.
98
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Introduccin
Con los archivos se pueden realizar varias operaciones, algunas de ellas son:
creacin, apertura, cierre, lectura, escritura, etc. En este captulo se describir
como se realiza cada una de ellas.
Para acceder a los datos contenidos en los archivos, se pueden utilizar diferentes
mtodos. Esto depende de la forma como estn organizados los registros. Es as
como se pueden realizar bsquedas secuenciales, de forma directa, por ndice,
entre otros.
99
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
12. Fusin o mezcla: esta operacin permite obtener de dos o ms ficheros con
la misma clasificacin y estructura interna de sus datos, un nuevo fichero que
contenga dos registros de todos los anteriores, sin alterar la ordenacin que stos
tenan establecida. No afecta los ficheros que intervienen en el proceso de fusin.
14. Particin o Rotura: permite tener varios ficheros de uno inicial, en funcin de
alguna de las caractersticas internas de sus campos.
100
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
101
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
eficiencia en los tiempos de acceso. Ahora bien, debe haber un archivo donde
guardar los ndices para posteriores explotaciones del archivo de datos.
Entonces al disear un archivo indexado hay que pensar que se manejarn
dos tipos de archivos, el de datos y el de ndices, con sus respectivos
registros. Un claro ejemplo de archivo secuencial indexado es la gua de
telfonos, con dos niveles de ndices, el nivel superior para las letras inciales
y el nivel menor para las cabeceras de pgina. Por consiguiente, cada archivo
secuencial indexado consta de un archivo de ndices y un archivo de datos.
OPEN: reserva un espacio del buffer para la data que mover entre el programa y
los archivos.
La estructura es:
Por ejemplo:
"C:\Windows\AddrBook.ini"
102
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Por ejemplo:
INPUT: lee data del archivo. La estructura es: INPUT #filenumber, InputList
Por ejemplo:
Ejemplo:
Type
datos = record
clave : integer;
nombre : string[30];
puesto : string[20];
sueldo : real;
103
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
estado : boolean;
Var
archivo:file of datos;
begin Assign(archivo,'empleado.dat');
Todos los archivos se pueden almacenar por medio de directorios, que no son
otra cosa ms que tablas de smbolos de archivo, los directorios se pueden
utilizar de dos formas:
o Ruta absoluta: este tipo de ruta de acceso inicia siempre con una
diagonal invertida [\].
104
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
C:\Edit
c:\SOS\sistemas\report.txt
o Ruta relativa: este tipo de ruta de acceso realiza la bsqueda del archivo
en el directorio de trabajo actual, si el archivo no se localiza aqu, el S.O. lo
buscar en los directorios especificados en el PATH de un archivo con
extensin .BAT
C:\Edit report.txt
Los archivos de texto son una secuencia de lneas separadas por marcas de fin
de lnea. El usuario escribe los archivos de textos mediante un procesador de
palabras que le permitir almacenar la informacin pero no estrictamente en
forma secuencial.
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <iostream.h>
struct {
int matricula;
char nombre[30];
int edad;}alumno;
main()
{
system(cls);
//creando y cerrando el archivo en disco
FILE *archivo;
archivo = fopen("c:\\ac\\alumnos.dat","w");
fclose(archivo);
cout<<ARCHIVO CREADOSATISFACTORIAMENTE;
105
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
getchar();getchar();
}
Al momento de ejecutarlo
Recuerde que las variables apuntadores son tipos especiales de variables que
tienen la capacidad de almacenar no datos, pero si direcciones ya sean de la
memoria del computador o como en este caso de una direccin fsica del disco.
archivo = fopen("c:\\ac\\alumnos.dat","w");
106
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Existen dos caracteres que permiten determinar el tipo de archivo que se est
creando, pero insertndolo antes del signo +
Modo significado.
t lo abre en modo texto.
b lo abre en modo binario.
fclose(archivo);
FIGURA 7. Recomendacin
Funcin Descripcin
fopen() Abre un flujo
fclose() Cierra un flujo
putc() Escribe un carcter en un flujo
getc() Lee un carcter desde un flujo
fputs() Escribe una cadena en un flujo
fgets() Obtiene una cadena de un flujo
fseek() Salta al byte especificado en un flujo
fprintf() Imprime datos con formato en un flujo
fscanf() Lee datos con formato en un flujo
eof() Devuelve verdadero o falso si se halla el fin del archivo.
107
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
#include <stdio.h>
#include <conio.h>
#include <string.h>
struct {
int matricula;
char nombre[30];
int edad;} alumno;
main()
{
system(cls);
// captura de campos
printf("Numero de matricula :");
scanf("%d",&alumno.matricula);
getchar(); printf("/nNombres :");
gets(alumno.nombre);
printf("/nEdad :");
scanf("%d",&alumno.edad);
// grabando a disco
FILE *archdisco;
archdisco = fopen("c:\\ac\\alumnos.dat","at+");
fwrite(&alumno,sizeof(alumno),1,archdisco); fclose(archdisco);
//avisando usuario
printf("/NREGISTRO INSERTADO CORRECTAMENTE");
getchar();
getchar();
}
108
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Observe:
109
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Ya sabe cmo se crean archivos, como se ingresan datos, lo nico que queda es
como recuperar la informacin, eso se observar en el siguiente ejemplo:
#include <stdio.h>
#include <conio.h>
#include <string.h>
struct {
int matricula;
char nombre[30];
int edad;}
alumno;
main()
{
system(cls);
// leyendo disco
FILE *archdisco;
archdisco = fopen("c:\\ac\\alumnos.dat","at+");
Pocas observaciones
110
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Si todo est bien, pero no quiere mirar todos los registros de una vez, que puede
hacer?. Aqu est la solucin:
#include <stdio.h>
#include <conio.h>
#include <string.h>
struct {
int matricula;
char nombre[30];
int edad;} alumno;
void main()
{ clrscr();
// cargando clave a buscar
printf("Numero de matricula a buscar: ");
int clave; scanf("%d",&clave);getchar();
111
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
1. Cmo realizar una bsqueda que contenga filtros, por ejemplo: mostrar
por pantalla los estudiantes que sean mayores de edad.
112
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
#include <conio.h>
#include <string.h>
struct {
int matricula;
char nombre[30];
int edad;} alumno;
main()
{
systemr(cls);
FILE *arch1;
FILE *arch2;
arch1 = fopen("c:\\ac\\alumnos.dat","r+");
arch2 = fopen("c:\\ac\\temporal.dat","at+");
//grabando a temporal
fwrite(&alumno,sizeof(alumno),1,arch2);
}; // aqui termina while
//cerrando archivos
fclose(arch1);
fclose(arch2);
remove("C:\\AC\\ALUMNOS.DAT ");
rename("C:\\AC\\TEMPORAL.DAT","C:\\AC\\ALUMNOS.DAT ");
//avisando
puts("EDADES MAS 50");
getchar();
}
113
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
apuntador=fopen("a:archivo.dat","r+");
fseek(apuntador,(long)(clave)*(sizeof(registro)),0);
2. long ftell(apuntador);
3) int rewind(apuntador);
fseek(apuntador,(long)(clave)*(sizeof(registro)),0);
fread(®istro,sizeof(registro),1,apuntador);
114
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
rewind(apuntador);
fseek(apuntador,(long)(clave)*(sizeof(registro)),0);
fwrite(®istro,sizeof(registro),1,apuntador);
#include <stdio.h>
#include <conio.h>
#include <string.h>
struct {
int clave;
char nombre[30];
int edad;} mascota;
main()
{
system(cls);
115
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Como observa hay una b al final de la instruccin, lo que indica que el archivo es
de tipo binario
#include <stdio.h>
#include <conio.h>
#include <string.h>
main()
{ system(cls);
// captura de campos
printf("dame clave :");scanf("%d",&mascota.clave);getchar();
printf("dame nombre :");gets(mascota.nombre);
printf("dame edad :");scanf("%d",&mascota.edad);
// grabando a disco
FILE *archdisco;
archdisco = fopen("c:\\ac\\archivo1.dat","ab+");
fwrite(&mascota,sizeof(mascota),1,archdisco);
fclose(archdisco);
//avisando al usuario
printf("mascota insertado");
getchar();
}
#include <stdio.h>
#include <conio.h>
116
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
#include <string.h>
struct {
int clave;
char nombre[30];
int edad;} mascota;
void main()
{
system(cls);
// leyendo disco
FILE *archdisco;
archdisco = fopen("c:\\ac\\archivo1.dat","rb+");
En este caso no hay nada que comentar, puesto que se despliegan todos los
registros
#include <stdio.h>
#include <conio.h>
#include <string.h>
struct {
int clave;
char nombre[30];
117
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
void main()
{
system(cls);
fseek(apuntador,(long)(clave)*(sizeof(registro)),0);
Donde los parmetros son:
c. Este BYTE debe ser de tipo LONG as que si en algn programa de ejemplo
ven fseek( , 387L, ); que no les llame la atencin, es otra manera de hacerle
118
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
cast a un dato.
Recordar que es muy importante que las claves grabadas en un archivo directo
tengan la secuencia 0,1,2,3,4,5.....n
#include <stdio.h>
#include <io.h>
#include <conio.h>
#include <string.h>
struct {
int clave;
char nombre[30];
int edad;} mascota;
void main()
{
system(cls);
FILE *arch1;
long r=0;
arch1 = fopen("c:\\ac\\archivo1.dat","rb+");
while (fread(&mascota,sizeof(mascota),1,arch1)==1)
{
// sumando 100 a edad
mascota.edad = mascota.edad + 100 ;
119
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
//cerrando archivo
fclose(arch1);
//avisando
puts("EDADES + 100");
getchar();
}
120
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
121
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
BIBLIOGRAFA
Sitios WEB
http://members.tripod.com/~MoisesRBB/c.html
http://www.ilustrados.com/publicaciones/EpZVVEZpyEdFpAKxjH.php
http://libromanual.blogspot.com/2010/02/curso-de-c-con-devc.html
http://mcyti.izt.uam.mx/~gustavo/Cursos/Tutoriales/Codificacion_Compilacion_y_D
epuracion_con_el_IDE_DevC++.pdf
http://docente.ucol.mx/al989508/public_html/Hc1.htm
122
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
http://www.elmonton.net/PMc.php?contenido=PMc_3001_5077788_1
http://sistemas.uniandes.edu.co/~isis1301/dokuwiki/lib/exe/fetch.php?media=mater
ial_monitorias:manual_de_c.pdf
http://es.scribd.com/doc/29225934/Manejo-de-Arhivos-en-Lenguaje-C
http://es.scribd.com/doc/57113276/6/Caracteristicas-de-los-archivos
123
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
La siguiente tabla indica el tipo de dato, la declaracin y los limites en los cuales
se puede mover una determinada variable
Tipo de dato bool, est incorporado en los compiladores que siguen la norma
ANSI (Instituto Nacional Americano de Estndares) 2, cuyos valores pueden ser
verdadero (true) o falso (false), aunque en la realidad, muchos programadores no
utilizan este tipo de datos, lo remplazan por una variable bandera numrica
bandera, que pude tomar un valor 0 o 1 dependiendo la situacin
Operadores y expresiones
124
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
:: Resolucin de mbito.
. Selector de componentes
+ Ms
- Menos
++ Preincremento o postincremento
-- Predecremento o postdecremento
& Direccin
* Valor en la direccin de
3 Multipli * Multiplicacin
/ Divisin
- Menos binario
125
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
>> Derecha
7 Relacional < Menor que
8 Igualdad == Igual a
!= No igual a
9 Y & AND para bits
10 o exclusivo ^ XOR para bits
11 O | OR para bits
12 Y && AND lgico
13 O || OR lgico
14 Condicional ?: a?x:
significa:
/ Producto
126
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
% Divisin
+ Suma
- Diferencia
| OR sobre bits
TABLA 4. Operadores
127
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
128
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
129
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
130
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
131
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
132
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
133
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
134
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
135
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
15. Omitir el prototipo de una funcin cuando sta no ha sido definida antes de
ser llamada por primera vez, es un error de sintaxis.
16. El intento por generar nmeros aleatorios con srand() en lugar de rand() es un
error de sintaxis, debido a que la funcin srand() no devuelve un valor.
21. El no devolver un valor desde una funcin recursiva cuando sea necesario,
causar que casi todos los compiladores generen un mensaje de
advertencia.
136
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
26. Debido a que los parmetros de referencia se mencionan slo por nombre en
el cuerpo de la funcin llamada, el programador podra tratarlos
inadvertidamente como parmetros de una llamada por valor. Esto puede
provocar efectos secundarios inesperados si el invocador modifica las
copias originales de las variables.
29. Intentar reasignar una referencia declarada previamente como alias de otra
variable es un error de lgica. El valor de la otra variable simplemente se le
asigna a la localidad para la que la referencia es un alias.
32. Intentar acceder a una variable no global desde un bloque exterior por medio
del operador unario de resolucin de alcance es un error de sintaxis si no
existe una variable global con el mismo nombre que la variable del bloque
exterior, y es un error de lgica si es que existe.
137
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
35. No poner la palabra clave class antes de cada parmetro de tipo de una
plantilla de funcin es un error de sintaxis.
2. Ponga una lnea en blanco entre las definiciones de funcin para separarlas y
simplificar la lectura del programa.
138
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
10. Evite los nombres de variables que oculten nombres en los alcances
exteriores. Esto puede lograrse evitando utilizar identificadores duplicados en
el programa.
11. Siempre indique prototipos de funcin, aun cuando sea posible omitirlos al
definir las funciones antes de utilizarlas. Al indicar los prototipos se evita
enlazar el cdigo al orden en que se definen las funciones (el cual puede
cambiar fcilmente con la evolucin del programa)
12. El calificador inline slo debe utilizarse con funciones pequeas de uso
frecuente.
14. Evite utilizar variables con el mismo nombre cuyos fines sean diferentes.
Aunque es vlido bajo varias circunstancias, puede generar confusiones.
15. Sobrecargar funciones que realicen tareas muy relacionadas puede simplificar
la lectura de los programas.
139