Académique Documents
Professionnel Documents
Culture Documents
CONFERENCIA # 1
Introduccin
Resolucin de problemas computacionales por medio de la tecnologa top
INTRODUCCIN
A menudo nos hacemos la pregunta del por qu los programadores escriben un
programa. Esto es para resolver un problema por lo que el propsito de nuestro
estudio ser el ensear y aprender un mtodo de solucin de problemas con
programas de computadora mediante el estudio de la programacin estructurada.
Para llegar a nuestros objetivos, es necesario tambin presentar al C++ en un
estilo diseado para fomentar buenos hbitos de programacin.
Lenguajes de programacin
Permite expresar un algoritmo comprensible para un ordenador
Qu
es un algoritmo?
Frmula para resolver un problema
Consta de una serie de pasos
Se aplica de forma mecnica
Se aplica en un tiempo finito
Pgina: N 1
PROGRAMACIN ESTRUCTURADA
DISTINTAS TECNOLOGAS
Lenguaje de programacin: refleja un paradigma
Programacin imperativa
Programa en un lenguaje imperativo:
o Lista de instrucciones, rdenes elementales
o Ejecucin: una tras otra, en el orden del programa
Las instrucciones de un programa imperativo utilizan variables
o Variable: dato almacenado en la memoria del ordenador
Ejemplos de lenguajes imperativos: BASIC, Pascal, C.
Programacin imperativa
Elementos principales
Variable
o Nombre de celdas en memoria donde se almacenan los datos
o Estado del programa en un momento dado: Conjunto de valores de
las variables del programa
Operaciones de asignacin
o Se calcula un nuevo valor y se asigna a la variable
o As se modifica el estado del programa
Repeticin
o Ejecucin repetida de una secuencia de pasos elementales
Pgina: N 2
PROGRAMACIN ESTRUCTURADA
Programacin funcional
Basada en el concepto matemtico de funcin
Funcin = regla de correspondencia que asocia a cada elemento de un
conjunto origen un elemento de un conjunto destino
o Conjunto origen = dominio de la funcin
o Conjunto destino = rango de la funcin
Composicin funcional: el resultado de un clculo es el argumento del
siguiente
Ejemplos de lenguajes de programacin funcional: LISP, Haskell, Gofer.
Elementos principales de la programacin funcional
Tipos de datos
Expresiones condicionales
Recursin (mtodo de programacin en el cual una rutina se llama a si
misma varias veces)
Abstraccin en programacin funcional
Abstraccin del problema a solucionar, modelndolo como una composicin
de funciones
Ms cercanos al espacio del problema que al espacio de la solucin
Programacin orientada a objetos
Permite representar en el programa los elementos del dominio del problema
Estos elementos se denominan objetos
El cdigo del programa contiene la solucin del problema
Cada objeto tiene un estado, representado por:
o Atributos (parecido a las variables) y
o Operaciones que puede realizar
Ejemplos de lenguajes orientados a objeto: Smalltalk, C++ y Java
Pgina: N 3
PROGRAMACIN ESTRUCTURADA
Pgina: N 4
PROGRAMACIN ESTRUCTURADA
Pgina: N 5
PROGRAMACIN ESTRUCTURADA
CARACTERISTICAS
PORTABILIDAD DE C
El compilador de C genera cdigo ejecutable multiplataforma
Pgina: N 6
PROGRAMACIN ESTRUCTURADA
Recursos
Un robot
Una caja de papel de formas continas (de la clase utilizada por las impresoras
de computadora)
Mquina de escribir
El robot es lo bastante complejo como para ser programado para ejecutar cierto
nmero de tareas simples: puede leer textos un carcter a la vez, y escribir cada
carcter presionando la tecla apropiada en una mquina de escribir. El robot puede
hacer esto rpidamente sin cometer errores nunca. Puede tambin reconocer el
final de una lnea escrita y el final del propio texto.
El que hacer:
Copiar RolloAntiguo a RolloNuevo
Refinamiento:
Preparar RolloAntiguo para lectura
Preparar RolloNuevo para escritura
Copiar una lnea de RolloAntiguo a RolloNuevo
Mientras haya ms lneas por copiar
SECUENCIACIN
Una Secuenciacin es una serie de operaciones que son llevadas a cabo
(ejecutadas) una despus de la otra. Adems las operaciones en una serie se
agrupan y se consideran como una sola operacin. Las series de operaciones que
escribimos primero como solucin a un problema se convierten en la primera parte
de un programa.
Por ltimo, una secuenciacin puede tener una o ms
operaciones; la secuenciacin ms corta tiene una sola operacin.
REPETICIN
Recuerde que la tercera operacin de nuestra solucin presenta la repeticin:
Copiar una lnea de RolloAntiguo a RolloNuevo
Mientras haya ms lneas por copiar.
Entonces se realiza la pregunta Hay ms lneas por copiar?
Si la respuesta es s copiamos una lnea de RolloAntiguo a RolloNuevo.
respuesta es no la operacin est completa.
Si la
REFINAMIENTO SUCESIVO
Si el robot comprende el cmo preparar el RolloAntiguo y el RolloNuevo entonces
estas dos operaciones no necesitan ningn refinamiento y se convierten en parte
del cmo ejecutar la operacin copiar.
Si el robot no entiende lo que se requiere, entonces sera necesario un refinamiento
adicional.
Sabemos que el robot no comprende cmo copiar una lnea entonces debemos
refinar nuestra solucin para poder describir cmo llevarla a cabo:
Copiar un carcter de RolloAntiguo a RolloNuevo
Mientras haya ms caracteres en la lnea.
Pgina: N 7
PROGRAMACIN ESTRUCTURADA
Despus:
Copiar un carcter de RolloAntiguo a RolloNuevo
Mientras haya ms caracteres en la lnea.
Colocarse al principio de la siguiente lnea de RolloAntiguo
Colocarse al principio de la siguiente lnea de RolloNuevo
El robot no sabe como copiar un carcter:
Mientras haya ms caracteres en la lnea de RolloAntiguo
Leer un carcter de RolloAntiguo
Escribir ese carcter en RolloNuevo presionando
La tecla correspondiente en la mquina de escribir
Colocarse al principio de la siguiente lnea de RolloAntiguo
Colocarse al principio de la siguiente lnea de RolloNuevo
Esto sugiere que el robot repita la lectura y la escritura de un carcter mientras
haya ms caracteres en una lnea.
CONCLUSIONES
PROGRAMAS Y PROCESOS
Refinemos nuestra solucin convirtindola en un programa.
El programa se llama Copiar que comprende tres operaciones:
Las dos primeras (preparar para leer y preparar para escribir)
Tercera operacin copiar una lnea
El robot entiende la tarea de preparar y el copiar una lnea no es un procedimiento
comprendido por el robot.
Procesos.- Es una secuencia de operaciones; el nombre del proceso se refiere a
una secuencia de operaciones especfica. Entonces un proceso es muy parecido a
un programa, pero est subordinado o es controlado por un programa. A los
procedimientos o procesos tambin se los llama como subprogramas.
Pgina: N 8
PROGRAMACIN ESTRUCTURADA
1.
2.
3.
4.
5.
Deber:
Algoritmo
Algoritmo
Algoritmo
Algoritmo
Algoritmo
para
para
para
para
para
llegar a la ESPOCH
cambiar un neumtico bajo en el automvil
cambiar un foco quemado
aprobar la materia de lenguajes de programacin I
realizar un pastel
CONFERENCIA # 2
COPIAR
Preparar RolloAntiguo
Preparar RolloNuevo
CopiarUnaLinea
ESTRUCTURAS DE CONTROL
Las estructuras de control se usan para mostrar la lgica de una solucin. Una
estructura de control muestra las condiciones que controlan, o determinan, si una
operacin debe terminarse. Podemos decir que las estructuras de control son los
medios por los cuales organizamos y decidimos si se ejecutan o no diversas partes
de la solucin y bajo qu condiciones. Es este modo las estructuras de control son
las herramientas que utilizamos para organizar y controlar la solucin lgica de un
problema.
Existen tres estructuras de control:
Pgina: N 9
PROGRAMACIN ESTRUCTURADA
ESTRUCTURAS DE DATOS
Una estructura de datos es algo parecido a un modelo. Nos proporciona una
manera precisa de ver cmo diferentes datos se almacenan en la memoria de la
computadora. Y ms que eso, el tipo de estructura de datos define cules
operaciones estn permitidas y cules no para los diferentes datos. Por ejemplo
para los tipos de datos numricos estn permitidas las operaciones aritmticas y
de comparacin. Para los datos tipo carcter no est permitidas las operaciones
aritmticas, pero s estn permitidas las operaciones de comparacin.
Operaciones aritmticas:
Sumar
Restar
Multiplicar
Dividir
Races cuadradas
Tablas
Vectores
Operaciones con caracteres:
Comparar
Leer
Escribir
Construir palabras
Lneas
Pginas
Volmenes
Pgina: N 10
PROGRAMACIN ESTRUCTURADA
Pgina: N 11
PROGRAMACIN ESTRUCTURADA
Deber:
1. Contar el nmero de lneas que contiene Rollo Nuevo
2. Reemplazar @ por la palabra "en" en el Rollo Nuevo
3. Proceso para facturar un pedido
4. Proceso para matricularse en la materia de Lenguajes de programacin I
5. Aadir uno propio
CONFERENCIA # 3
Proyecto informtico
Pasos para la solucin de problemas
Ejemplo: Ingresar por teclado 5 pares de nmeros y comparar si son iguales,
si el primer nmero es mayor que el segundo o, si el primer nmero es menor
que el segundo
PROYECTO INFORMTICO
Ordenadores e informtica son trminos que van unidos y se complementan. La
informtica estudia el tratamiento automtico de la informacin a travs de medios
electrnicos. Y estos son los ordenadores.
El ordenador es la mquina electrnica que trata la informacin mediante el
programa almacenado en su memoria.
El proceso de datos con ordenador mecaniza y automatiza la realizacin de tareas
rutinarias.
Pgina: N 12
PROGRAMACIN ESTRUCTURADA
1. Comprender el problema
Primero debemos analizar cuidadosamente los requerimientos del problema.
Debemos insistir en que los requerimientos del problema sean claramente
especificados en trminos de los resultados esperados. Se debe de determinar:
La fuente y el tipo de datos para la entrada
La interaccin de los datos y su transformacin
El destino y el formato de la salida
2. Disear una solucin
Los pasos preliminares de una solucin pueden escribirse como una secuenciacin
sin tomar mucho en cuenta la necesidad de comunicar nuestra solucin a otros.
Adems necesitamos organizar la informacin para que sea comprensible para
nosotros y los dems. Utilizaremos un PDL.
3. Probar el diseo
Debemos estar convencidos de que la lgica escrita resuelve de hecho el problema
planteado. S realizamos la secuenciacin obtendremos la salida que esperamos
a partir de la entrada suministrada?. Si no, debemos regresar al paso 2, corregir
el diseo y luego probar otra vez.
4. Traducir el diseo a un lenguaje de programacin
Este paso tambin se lo llama codificacin, o sea traducir un diseo a un lenguaje
de programacin. Ahora debemos considerar todas las reglas de organizacin y
puntuacin del lenguaje de programacin.
5. Preparar el problema en el lenguaje seleccionado (Pascal, C. etc.)
Capturar en la computadora con la ayuda de un editor el programa traducido. Este
paso requiere la edicin (creacin o modificacin) del texto. Aqu es donde
comenzamos a utilizar el Ambiente Integrado de Desarrollo del sistema en nuestro
caso C++.
6. Compilacin del programa
El traductor del lenguaje seleccionado, o tambin llamado compilador, nos indicar
si hemos empleado correctamente la organizacin y la puntuacin. Si existen
errores hay que regresar al paso 5.
7. Correr el programa y comprobar los resultados
Debemos probar nuestra lgica para determinar si es correcta, probar el programa
con datos que estn al lmite, nmeros grandes o pequeos.
Si existen problemas es necesario descubrir qu pudo haber causado los resultados
errneos podemos usar diversas tcnicas para eliminar el error.
8. Depurar si es necesario (debug)
La eliminacin de errores se conoce como depuracin (debugging).
determina si el error es causado por:
Mal entendido del lenguaje de programacin (regresar al paso 4).
Por el diseo defectuoso (regresar al paso 2)
O por falta de comprensin del problema (regresar al paso 1).
Aqu se
Pgina: N 13
PROGRAMACIN ESTRUCTURADA
46
38
23
67
-63
Los datos sern captados por el teclado de una terminal o de una
microcomputadora.
El mensaje de peticin aparecer en la pantalla.
Los resultados de la comparacin debern aparecer en la pantalla.
Debemos saber lo que significa pares de nmeros.
En la muestra se ven nicamente nmeros enteros.
En nuestro caso hay 5 entradas.
Pantalla:
Comparacin de parejas de nmeros enteros
Ingrese dos nmeros enteros
35
46
El primer nmero 35 es menos que el segundo nmero 46
Ingrese dos nmeros enteros
52
38
El primer nmero 52 es mayor que el segundo nmero 38
Ingrese dos nmeros enteros
49
23
El primer nmero 49 es mayor que el segundo nmero 23
Ingrese dos nmeros enteros
67
67
El primer nmero 67 es igual que el segundo nmero 67
Ingrese dos nmeros enteros
35
-63
El primer nmero 35 es mayor que el segundo nmero -63
Pgina: N 14
PROGRAMACIN ESTRUCTURADA
Diseo de la solucin
CompararParDeNumeros
ImprimirEncabezado
ProcesarNumeros
Llevar la cuenta del nmero de veces que se hayan completado los tres pasos.
Utilizacin de variables para el almacenamiento.
ImprimirEncabezado
PedirParDeNumeros
ProcesarNumeros
LeerParDeNumeros
CompararNumerosEImpri
mirMensaje
Pgina: N 15
PROGRAMACIN ESTRUCTURADA
1. ImprimirEncabezado
2. ProcesarNumeros.- se ha dividido en tres pasos:
2.1 PedirParDeNumeros
2.2 LeerParDeNumeros
2.3 CompararNumerosEImprimirMensaje
Las tres operaciones se realizan completamente por cada par de nmeros
introducidos desde el teclado
2.1 PedirParDeNumeros.- es un proceso bastante fcil
2.2 LeerParDeNumeros.- Este proceso requiere que tengamos dos nombres de
variables uno por cada nmero. Primero y Segundo para nombrar las
localidades de memoria.
2.3 CompararNumerosEImprimirMensaje.- es ms complicado y se muestra de la
siguiente manera:
If el nmero en Primero es menor que el nmero en Segundo
Imprimir Mensaje1
Else
Hacer ms comparaciones
If el nmero en Primero es menor que el nmero en Segundo
ImprimeMensaje1
Else
If el nmero en Primero es Mayor que el nmero en Segundo
ImprimeMensaje2
Else
{
Los dos nmeros deben ser iguales as que
ImprimeMensaje3
}
Este diseo detallado muestra tres procesos ms.
CompararNumerosEImprimirMensaje
ImprimeMensaje1
ImprimeMensaje2
ImprimeMensaje3
Pgina: N 16
PROGRAMACIN ESTRUCTURADA
Programa ComparaParDeNumeros
CUERPO DEL PROGRAMA
{operaciones de ComparaParDeNumeros
ImprimirEncabezado
ProcesarNumeros
} operaciones de CompararParDeNumeros.
Deber:
1. Completar el PDL del ejercicio.
2. Tomar una cpsula cuatro veces al da (a intervalos regulares). Asegrese de
tomar todas las cpsulas del frasco. No suspenda el medicamento an si los
sntomas desaparece.
3. Suponga que el RolloAntiguo contiene un carcter, digamos @, que significa
en. Tambin suponga que esta abreviatura ya no se usar en adelante.
Redisee el programa Copiar para que cada @ que aparezca en el RolloAntiguo
sea traducida como "en" en el RolloNuevo.
4. Suponga que a uno de los arquelogos involucrados en el estudio del
RolloAntiguo le gustara que nuestro programa Copiar reportara el nmero de
lneas que fueron copiadas. Redisee el programa Copiar para que cuente el
nmero de lneas copiadas, as estn vacas. Use la variable Lneas para llevar
la cuenta. Recuerde asignar el valor cero a Lnea antes de comenzar la cuenta.
5. Redisee el programa CompararParDeNumeros para que procese ms de cinco
pares de nmeros.
APLICACIN PRCTICA # 4
Deber:
1. Probar si los tres lados L1, L2, L3 pertenecen o no a un tringulo: es un
tringulo si la suma de sus dos lados menores es mayor al lado mayor. Si es
tringulo identificar qu tipo de tringulo
2. Verificar si un nmero ingresado por teclado es o no un nmero primo
3. Verificar si un nmero ingresado por teclado es o no un nmero perfecto
4. Cmo se realiza un cobro de una planilla elctrica?
5. Cmo se realiza la compra de distintos productos en un almacn
APLICACIN PRCTICA # 5
QU ES UN SISTEMA OPERATIVO?
Un sistema operativo es un conjunto de instrucciones que ejecuta el procesador del
sistema que tiene por misin el controlar todos los dispositivos instalados en el
sistema y permitir que los otros programas de ordenador puedan usarlos.
Pgina: N 17
PROGRAMACIN ESTRUCTURADA
A d. Tra ba jo
A d. Ta rea s
A d. Da to s
A d.
D isp os itivos
S .O .
E . Tex to
B . D at os
E dit ore s
G rfico s
Im pres ora s
F orm a t
P ro g ram as
U tilitario s
P ro g ram as
E xte rrno s
al
S is te m a O p e rativo
Ju eg os
Administracin de trabajos
En computadoras pequeas, el sistema operativo responde a los comandos del
usuario y carga en memoria el programa de aplicacin requerido para su ejecucin.
En grandes computadoras, el sistema operativo lleva a cabo las instrucciones de
control de trabajos, las que pueden describir la mezcla de programas que deben
ser ejecutadas para un conjunto completo de tareas.
Administracin de tareas
En computadoras monotarea, el sistema operativo no tiene virtualmente ninguna
administracin de tareas que realizar, pero en computadoras multitarea es
responsable de la operacin simultnea de uno o ms programas. En los sistemas
operativos modernos poseen la habilidad de asignar prioridades a los programas
de modo tal que se ejecute un trabajo antes de otro (Gestionar una cola de tareas
a imprimir). Primero en entrar primero en salir.
Los sistemas operativos avanzados disponen de mayores capacidades para
acelerar o retardar un trabajo por medio de comandos del operador de la
computadora.
Administracin de datos
Una de las funciones principales de un sistema operativo es la de llevar la cuenta
de los datos en el disco; de aqu la denominacin DOS (Disk operating system
sistema operativo en disco). Los programas de aplicacin no saben dnde se
encuentran almacenados los datos o cmo obtenerlos. Estos conocimientos estn
contenidos en las rutinas de mtodos de acceso del sistema o controladores de
Pgina: N 18
PROGRAMACIN ESTRUCTURADA
dispositivos. Cuando un programa est listo para aceptar datos, le pasa una seal
al sistema operativo mediante un mensaje codificado. El sistema operativo busca
el dato y lo entrega al programa. A la inversa, cuando el programa est listo para
emitir datos, el sistema operativo transfiere estos datos del programa al espacio
disponible en el disco.
Administracin de dispositivos
En teora, el sistema operativo debe ser capaz de administrar todos los
dispositivos, no solamente los controladores de disco. Se supone que puede
manejar las entradas y las salidas a la pantalla de presentacin, as como la
impresora. Manteniendo los detalles del dispositivo perifrico dentro del sistema
operativo, el dispositivo puede ser reemplazado por un modelo ms moderno, y
slo debe cambiarse en el sistema operativo la rutina que se encarga de este
dispositivo.
Seguridad
Los sistemas operativos multiusuario mantienen una lista de los usuarios
autorizados y proveen proteccin de claves de acceso (passwords) contra los
usuarios no autorizados que pueden intentar introducirse en el sistema. Los
sistemas operativos ms potentes mantienen asimismo registro de actividad del
sistema y contabilidad del tiempo del usuario con fines de facturacin. Tambin
proveen rutinas de respaldo y recuperacin para comenzar nuevamente en el caso
de un fallo del sistema.
Ordenamiento en el tiempo
Administracin de recursos
Inicia y controla las operaciones de entrada/salida, manipula errores
(interrupciones)
Coordina la comunicacin entre el operador y la mquina
Controla el modo de programacin que puede ser
Serial
Tiempo compartido
Tiempo real
Optimizar el rendimiento del sistema
Controlar el acceso de usuarios
Permite cambiar la configuracin del equipo (en DOS es el archivo
CONFIG.SYS9)
El nmero de usuarios.
El tipo de aplicaciones que se van a utilizar.
Qu lenguajes soporta el sistema operativo.
Que proteccin se va a dar a los usuarios contra accidentes, e interrupciones.
Proporciones seguridades en cuanto al control del usuario.
Que posee las utilidades bsicas como son programas de formato, editores, etc.
Pgina: N 19
PROGRAMACIN ESTRUCTURADA
1
2
10
11
12
13
14
15
1. Usuario
2. Programas utilitarios: Base de Datos
3. Hojas electrnicas
4. Editores de texto
5. Programas de aplicacin
6. Programas de utilidad: Lenguajes de programacin
7. Programas compiladores
8. Ensambladores
9. Cargadores
10.Sistema operativo
11.Administrador de trabajos
12.Administrador de tareas
13.Administrador de datos
14.Administrador de dispositivos
15.Hardware.
CONFERENCIA # 6
Pgina: N 20
PROGRAMACIN ESTRUCTURADA
Pgina: N 21
PROGRAMACIN ESTRUCTURADA
APLICACIN PRCTICA # 7
CONFERENCIA # 8
PALABRAS RESERVADAS
Tienen un significado predeterminado para el compilador y slo pueden ser usadas
con dicho sentido.
auto
break
case
char
const
continue
default
do
double
else
enum
extern
float
For
goto
if
int
long
register
return
short
signed
sizeof
static
struct
switch
Typedef
Union
Unsigned
void
Volatile
While
Adems cada compilador puede aadir al conjunto de palabras estndar las suyas
de propia creacin.
IDENTIFICADORES
Los identificadores son nombres creados para designar constantes, variables,
tipos, funciones, etc., que forman parte de un programa.
Un identificador consta de uno o ms caracteres (letras, dgitos y caracteres de
subrayado); el primero debe ser una letra o el carcter _. El nmero de caracteres
no debe superar 31.
Pgina: N 22
PROGRAMACIN ESTRUCTURADA
Letra
Letra
Dgito
Subrayado
Tipo int
Tamao en bytes: 2 bytes (16 bits)
Dominio: son todos los nmeros enteros entre los valores -32.768 y 32.767
Operaciones:
Pgina: N 23
PROGRAMACIN ESTRUCTURADA
Tipo float
Tamao en bytes: 4 bytes
Dominio: son todos los nmeros reales que contienen una coma decimal,
comprendidos entre los valores:
Tipo double
Tamao en bytes: 8 bytes
Dominio: son todos los nmeros reales que contienen una coma decimal
comprendido entre los valores:
Pgina: N 24
PROGRAMACIN ESTRUCTURADA
Tipo bool
Tamao en bytes: 1 byte
Dominio: dos nicos valores: {true, false}
No todos los compiladores de C++ tienen ste tipo de dato. En su lugar se utiliza
el tipo int para representar el tipo de datos bool, de forma que el valor entero 0
representa false y cualquier otro valor representa true.
Tabla de verdad:
Pgina: N 25
PROGRAMACIN ESTRUCTURADA
0 < 1 < 2 . < 9 < A < B < < Z < a < b < < z
Operaciones:
Dado que los caracteres se almacenan internamente como nmeros enteros, se
pueden realizar operaciones aritmticas con los datos de tipo char. Se puede
sumar un entero a un carcter para obtener otro cdigo ASCII diferente.
Ejemplos:
Para convertir una letra minscula en mayscula basta con restar 32.
a - 32 = A
Para convertir una letra mayscula en minscula basta con sumar 32.
B + 32 = b
Para convertir el carcter 4 en el nmero 4 basta con restar 48.
4 - 48 = 4
Pgina: N 26
PROGRAMACIN ESTRUCTURADA
Funciones:
Pgina: N 27
PROGRAMACIN ESTRUCTURADA
#include <iostream.h>
La parte del #include se refiere a la biblioteca de funciones que vamos a utilizar.
Es decir para llamar a una biblioteca en particular debemos hacer lo siguiente:
#include <librera_solicitada>
El estndar de C++ incluye varias bibliotecas de funciones, y dependiendo del
compilador que se est usando, puede aumentar el nmero.
int main(void){
Todo programa en C++ comienza con una funcin main(), y slo puede haber una.
En C++ el main() siempre regresa un entero, es por eso se antepone int a la
palabra main. Los parntesis que le siguen contienen lo que se le va a mandar a
la funcin. En este caso se puso la palabra void que significa vaco, es decir que
a la funcin main no se le est mandando nada, podra omitirse el void dentro de
Pgina: N 28
PROGRAMACIN ESTRUCTURADA
los parntesis, el compilador asume que no se enviar nada. La llave que se abre
significa que se iniciar un bloque de instrucciones.
cout<<hola mundo<<endl;
Esta es una instruccin. La instruccin cout est definida dentro de la biblioteca
iostream.h, que previamente declaramos que bamos a utilizar. Una funcin, en
este caso main() siempre comienza su ejecucin con una instruccin (la que se
encuentra en la parte superior), y contina as hasta que se llegue a la ltima
instruccin (de la parte inferior). Para terminar una instruccin siempre se coloca
;. Pero adems de instrucciones se pueden invocar funciones definidas por el
usuario (por supuesto diferentes de main) como se ver ms adelante.
return 0;
Esta es otra instruccin, en este caso la instruccin return determina que es lo que
se devolver de la funcin main(). Habamos declarado que main devolvera un
entero, as que la instruccin return devuelve 0. Lo cual a su vez significa que no
han ocurrido errores durante su ejecucin.
}
La llave de cierre de la funcin main() indica el termino del bloque de instrucciones.
En algunos programas de ejemplo, notar el uso de dobles diagonales (//). Estas
diagonales se usan para escribir comentarios de una lnea dentro del cdigo del
programa. Adems podr encontrar el uso de /* */ estos caracteres encierran
un comentario de varias lneas y cualquier cosa que se escriba dentro de ella no
influenciar en el desempeo del programa.
Directivas del preprocesador
Existen archivos de cabecera estndar muy utilizados
Pgina: N 29
PROGRAMACIN ESTRUCTURADA
Fuente_resultante.c
Compilador
Fichero.obj
Libreras
Link
fichero_ejecutable.exe
La funcin main()
Una funcin C++ es un subprograma que devuelve un valor, un conjunto de
valores o realiza una tarea especfica.
Todo programa C++ tiene una nica funcin main() que es el punto inicial de
entrada al programa.
Pgina: N 30
PROGRAMACIN ESTRUCTURADA
Declaracin de variables
La declaracin de una variable consiste en escribir una sentencia que proporciona
informacin al compilador de C++.
El compilador reserva un espacio de almacenamiento en memoria.
Los nombres de las variables se suelen escribir en minsculas.
El procedimiento para declarar una variable:
Declaraciones locales
Son variables locales aquellas que estn declaradas dentro de las funciones o de
los bloques.
Declaraciones globales ( variables globales, funciones, ) La zona de
declaraciones globales de un programa puede incluir declaraciones de variables y
declaraciones de funciones (prototipos).
Pgina: N 31
PROGRAMACIN ESTRUCTURADA
Declaracin de constantes
Una constante es una variable cuyo valor no puede ser modificado.
Los nombres de las constantes se suelen escribir en maysculas.
1. Constantes declaradas const
La palabra reservada const es un calificador de tipo variable e indica que el valor
de variable no se puede modificar.
2. Constantes definidas
Se declaran mediante la directiva #define
3. Constantes enumeradas
Las constantes enumeradas permiten crear listas de elementos afines.
Pgina: N 32
PROGRAMACIN ESTRUCTURADA
CONFERENCIA # 9
Pgina: N 33
PROGRAMACIN ESTRUCTURADA
Declaracin de variables
Todas las variables deben de ser declaradas antes de utilizarlas, aunque ciertas
declaraciones se realizan implcitamente por el contexto. Una declaracin
especifica un tipo, y le sigue una lista de una o ms variables de ese tipo.
Ejemplo:
int a, b;
char c;
Las variables tambin se pueden inicializar en su declaracin.
Ejemplo:
int i = 0;
float x = 3.4;
EJEMPLO: texto completo de condolar.cpp
// Programa: CONDOLAR.CPP
// Desc. : Convierte pesos a dlares
#include <iostream.h>
void main(void){
int pesos;
float dolares;
cout << endl << "Cuantos pesos desea convertir a dolares? ";
cin >> pesos;
dolares = pesos / 11;
cout << "Dolares = " << dolares;
}
Una variable es una posicin de memoria con nombre, empleada para guardar
un dato, que puede ser modificado durante la ejecucin del programa.
Pgina: N 34
PROGRAMACIN ESTRUCTURADA
Sintaxis:
tipo_de_almacenamiento
tipo
nombre_de_variable;
OPERACIONES BSICAS
Operadores aritmticos
Operador
Accin
resta y menos unario
+
suma
*
multiplicacin
/
divisin
%
modulo de divisin
-decremento
++
incremento
Operadores relacinales
Operador
Accin
>
mayor que
>
= mayor que o igual que
<
menor que
<=
menor o igual que
==
igual
!=
no igual
Nota: El doble signo igual == es la notacin de C++ para "es igual a". Este smbolo
se distingue de la condicin de igualdad del simple = empleado en las asignaciones.
Pgina: N 35
PROGRAMACIN ESTRUCTURADA
Operadores lgicos
Operador
&&
||
!
Accin
and
or
not
Incremento
++ Incrementa en uno
Decremento
-- Decrementa en uno
Ejemplos:
Pgina: N 36
PROGRAMACIN ESTRUCTURADA
EJEMPLOS DE ASIGNACIONES
Operadores se asignacin
Operador Descripcin
++
Incremento.
-Decremento.
=
Asignacin simple.
*=
Multiplicacin ms asignacin.
/=
Divisin ms asignacin.
%=
Mdulo ms asignacin
+=
Suma ms asignacin.
-=
Resta ms asignacin
&=
Operacin AND sobre bits ms
asig.
|=
Operacin OR sobre bits ms
asig.
Ejemplo C
a ++
a-a =1
a *=5
a /=2
a %2
a +=2
a -=3
a&b
Pseudocdigo
a a+1
a a-1
a1
a a*5
a a/2
a a%2
a a+2
a a-3
aa&b
a |= b
aa|b
OPERACIONES DE ENTRADA/SALIDA
Instrucciones de Entrada / Salida
En C++ la entrada y salida se lee y escribe en flujos. Cuando se incluye la biblioteca
iostream.h en el programa, se definen automticamente dos flujos:
Esta biblioteca tambin nos proporciona dos operadores, uno de insercin (<<),
que inserta datos en el flujo cout y otro operador de extraccin ( >> ) para
extraer valores del flujo cin y almacenarlos en variables.
Pgina: N 37
PROGRAMACIN ESTRUCTURADA
Deber:
1. Declaracin de constantes y variables de tipo entero, float, char
2. Realizar un programa que lea dos nmero y realice el clculo de suma, resta
multiplicacin y divisin entre dichos nmeros
3. Disear un programa que permita obtener el promedio de 4 notas
APLICACIN PRCTICA # 10
CONFERENCIA # 11
Programacin estructurada
Estructura secuencial
Estructura de seleccin simple (IF /ELSE)
Omisin de la clusula ELSE
Sentencias compuestas
Programacin estructurada
Introduccin. Teorema de la programacin estructurada
El principio fundamental de la programacin estructurada es que en todo momento
el programador pueda mantener el programa dentro de la cabeza.
Esto se consigue con:
a) Un diseo descendente del programa,
b) Unas estructuras de control limitadas y
c) Un mbito limitado de las estructuras de datos del programa.
Hace ms fcil la escritura y verificacin de programas. Se adapta perfectamente
al diseo descendente.
Pgina: N 38
PROGRAMACIN ESTRUCTURADA
Todo el bloque se considera una sola sentencia. Despus de las llaves no se pone
punto y coma.
Estructura condicional
Alternativa simple:
Pgina: N 39
PROGRAMACIN ESTRUCTURADA
Alternativa doble:
Pgina: N 40
PROGRAMACIN ESTRUCTURADA
Sentencias if anidadas:
Cuando la sentencia dentro del if es otra sentencia if.
Pgina: N 41
PROGRAMACIN ESTRUCTURADA
void main(void)
{
clrscr();
int a,b,c;
chart k;
printf(Se sale con ESC\n\n);
while(tk!=27)
{
printf(\n Ingresa A);
scanf(%d, &a);
printf(\n Ingresa B);
scanf(%d, &b);
printf(\n Ingresa C);
scanf(%d, &c);
printf(\n\n Ingresaste: %d,%d,%d\n,a,b,c);
if(a==b && b==c)
printf(Los tres nmeros son iguales\n\n);
else
if(a>b)
Pgina: N 42
PROGRAMACIN ESTRUCTURADA
if(a>c)
printf(A es el mayor\n\n);
else
printf(C es el mayor\n\n);
else
if(b>c)
if(a==b)
printf(A
else
printf(B
else
if(c==b)
printf(B
else
printf(C
tk=getch();
}
}
Deber:
1. Disear un programa que permita determinar si un ao es bisiesto. Un ao es
bisiesto si es mltiplo de 4. Los aos mltiplos de 100 no son bisiestos salvo
si ellos son tambin mltiplos de 400 (Ejemplo: 2000 es bisiesto, 1800 no lo
es).
2. Disear un programa que permita ingresar una letra y decir si es no vocal
3. Encontrar el mayor de 3 nmeros
4. Encontrar el mayor, menor y el nmero intermedio entre 3 nmeros considere
tambin los casos en los que exista ms de un nmero igual
5. Dada la siguiente ecuacin:
AX 2 BX C 0
Encontrar:
B 2 4 AC
X 1, X 2 B
2A
Considere los casos:
Si el discriminante es mayor a 0 la respuesta ser dos nmeros reales
distintos
Si el discriminante es igual a 0 la respuesta ser dos nmeros reales
iguales
Si el discriminante es menor a 0 la respuesta ser dos nmeros
imaginarios
CONFERENCIA # 12
Alternativa mltiple:
Pgina: N 43
PROGRAMACIN ESTRUCTURADA
Pseudocdigo:
Pgina: N 44
PROGRAMACIN ESTRUCTURADA
Pgina: N 45
PROGRAMACIN ESTRUCTURADA
Pgina: N 46
PROGRAMACIN ESTRUCTURADA
APLICACIN PRCTICA # 13
CONFERENCIA # 14
Estructuras de repeticin
Sentencia While Do
Reglas de funcionamiento del While do
Sentencia do While
Reglas de funcionamiento del do While
Comparacin de los bucles while do/ do While
Ejemplo: Disear un programa que permita sumar n nmero enteros positivos
ingresados por el usuario y obtener su promedio utilizando While do y do While
ESTRUCTURAS REPETITIVAS
Son aquellas que crean un bucle (repeticin continua de un conjunto de
instrucciones) en la ejecucin de un programa respecto de un grupo de sentencias
en funcin de una condicin.
Las tres sentencias repetitivas de C++ son:
SENTENCIA WHILE
SENTENCIA DO WHILE
SENTENCIA FOR
Cabe destacar que todos funcionan hasta que se cumple con una condicin que es
la encargada de hacer parar el ciclo y continuar con el resto de instrucciones del
programa.
Pgina: N 47
PROGRAMACIN ESTRUCTURADA
Pgina: N 48
PROGRAMACIN ESTRUCTURADA
La sintaxis en C++:
do
sentencia
while (expresin lgica);
Se utiliza sobre todo en preguntas o mens, puesto que siempre se han de ejecutar
al menos una vez.
Pgina: N 49
PROGRAMACIN ESTRUCTURADA
do
{
cout << "Introduce un entero";
cin >> i;
cout << "Es correcto (s/n)?";
cin >> c;
}
while (c != 's');
REGLAS DE FUNCIONAMIENTO DEL DO WHILE
1. Permite repetir un bloque de sentencias una o ms veces dependiendo del
valor que se evala para una expresin booleana.
2. Primero se ejecuta el cuerpo del bucle y luego se evala la condicin; si la
expresin booleana es verdadera se ejecuta el cuerpo del bucle.
3. El proceso se repite mientras la condicin resulte verdadera en cada
evaluacin y termina cuando la condicin evaluada es falsa.
POTENCIAS NUMRICAS
#include <iostream.h>
#include <conio.h>
void main (void)
{
double x, y, ac, i;
clrscr();
cout<< Programa que calcula potencias numricas \n;
cout<<digite la base (x)\n; cin>>x;
cout<<digite el exponente(y)\n; cin>>y;
ac=1;
i= 1;
while (i<=y)
{
ac=ac*x;
i++;
}
cout<<\n El resultado es: \n<<ac;
getch();
}
MANEJO DE CARACTERES
#include <stdio.h>
#include <conio.h>
void main (void)
{
char tk;
clrscr();
printf(se sale con Esc\n\n);
while (tk!= 27)
{
tk =getch();
}
}
Pgina: N 50
PROGRAMACIN ESTRUCTURADA
Deber:
1. Disear un programa que permita encontrar la sumatoria de los n primeros
nmeros primos
2. Disear un programa que permita encontrar la sumatoria de los n primeros
nmeros perfectos. Un nmero es perfecto cuando es igual a la suma de todos
los nmeros para los cuales es divisible excepto el mismo nmero. (6 =
1+2+3).
3. Disear un programa que permita realizar la operacin de multiplicacin de dos
nmeros utilizando sumas sucesivas
4. Disear un programa que permita realizar la operacin de potenciacin
utilizando sumas sucesivas
5. Disear un programa que permita encontrar el factorial de un nmero
CONFERENCIA # 15
Sentencia FOR
Reglas de funcionamiento del FOR
Bucles anidados
Ejemplo: Disear un programa que permita generar la sumatoria de la serie:
1 2! 2 3! 3 .... n! n
2
2
2
2
Para (o desde)
Es como una estructura mientras, pero especialmente preparada para incorporar
un contador.
Pseudocdigo
para <variable> <- <valor inicial> hasta <valor final> hacer
<sentencia>
fin_para
La variable del bucle se denomina variable de control.
Ejemplo:
leer n
para num 1 hasta n hacer
escribir n
fin_para
Se utiliza cuando se conocen el nmero de veces que se van a repetir las
sentencias.
La variable de control NO se puede modificar dentro del bucle.
Cuando el bucle acaba, el valor de la variable de control es indeterminado.
La sintaxis en C++ es:
for(inicializacin; condicin; incremento)
sentencia
Pgina: N 51
PROGRAMACIN ESTRUCTURADA
En C++, la instruccin for es como una instruccin while, con la salvedad de que
tiene espacios especiales para poner la inicializacin de la variable de control, la
condicin de repeticin y el incremento de la variable de control.
El incremento se realiza siempre despus de ejecutar la sentencia.
Al igual que en la instruccin while, la sentencia puede no ejecutarse nunca si la
condicin no se cumple.
Ejemplo:
cin >> n;
for(num = 1; num <= n; num ++)
cout << num << endl;
Se utiliza tambin para realizar sumatorias o productos con la ayuda de una
variable acumuladora:
Decir si un nmero introducido por teclado contiene slo cifras menores que cinco;
bool menor;
int num;
cin >> num;
menor = true;
while (menor && (num > 0) )
{
if (num % 10 >= 5)
Pgina: N 52
PROGRAMACIN ESTRUCTURADA
menor = false;
num = num / 10;
}
if (menor)
cout << Todas las cifras son menores que 5;
else
cout << Hay alguna cifra mayor o igual que 5;
Bucles anidados
Los bucles, al igual que las sentencias condicionales, tambin se pueden anidar.
Esto es especialmente til para el manejo de matrices, como veremos en los temas
posteriores
Pgina: N 53
PROGRAMACIN ESTRUCTURADA
SUMATORIAS
Disear un programa que sume los n primeros trminos de la serie:
1 2! 3!
+ + ..
2 22 23
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
void main(void)
{
clrscr();
int n,i,j,k,pot,fact;
float t, sum;
sum=0;
cout<<Ingrese el valor de n: << endl;
cin>> n;
for(i=1; i<=n;i++)
{
fact=1;
for(j=1; j<=i;j++)
{
fact=fact*j;// calcula el factorial
}
// calcula la potencia utilizando pow pot=pow(2,i);
pot=1;
for(k=1; k<=i;k++)
{
pot=pot *2;
}
t=fact/pot;
sum=sum +t;
}
}
MANEJO DE CADENAS
#include <iostream.h>
char mensaje[80];
int main()
{
system(cls);
cout<<Ingresa un mensaje;
cin.getline(mensaje, 79);
Pgina: N 54
PROGRAMACIN ESTRUCTURADA
int i;
for(i=0;mensaje[i]!=\0;i++)
mensaje[i]=toupper(mensaje[i]);
cout<<\n El mensaje en maysculas es: <<mensaje;
return 0;
}
#include
#include
#include
#include
<stdio.h>
<ctype.h>
<iostream.h>
<conio.h>
int main()
{
char cadena[]=Esto es una cadena de prueba;
int i;
for(i=0;cadena[i];i++)
cadena[i]=toupper(cadena[i]);
cout<<\n El mensaje en maysculas es: <<cadena;
return 0;
}
Deber:
1. Disear un programa que permita generar la sumatoria de la serie:
2 4 4 6 6
......
3 3 5 5 7
APLICACIN PRCTICA # 16
Pgina: N 55
PROGRAMACIN ESTRUCTURADA
CONFERENCIA # 17
Programacin modular
Diseo descendente
Procedimientos
Declaracin de los procedimientos
Llamada al procedimiento
Ventajas de utilizar procedimientos
Los parmetros: transferencia de informacin a/desde procedimientos
Variables locales y globales
Funciones definidas por el usuario
Definicin
Llamada de funciones
Subprogramas. Funciones y procedimientos
Los subprogramas (procedimientos y funciones) constituyen una unidad de
ejecucin mayor que el bloque. Proporcionan abstraccin operacional al
programador y constituyen una unidad fundamental en la construccin de
programas.
Los subprogramas pueden ser vistos como un mini programa encargado de
resolver algortmicamente un subproblema que se encuentra englobado dentro de
otro mayor.
En ocasiones tambin pueden ser vistos como una
ampliacin/elevacin del conjunto de operaciones bsicas (acciones primitivas) del
lenguaje de programacin, proporcionndole un mtodo para resolver nuevas
operaciones.
Funciones y procedimientos
Dependiendo de su utilizacin (llamada) podemos distinguir dos casos:
Procedimientos: encargados de resolver un problema computacional. Se les
enva los datos necesarios y produce unos resultados que devuelve al lugar donde
ha sido requerido:
int main()
{
int x = 8;
int y = 4;
ordenar(x, y);
...
}
Funciones: encargados de realizar un clculo computacional y generar un
resultado (normalmente calculado en funcin de los datos recibidos) utilizable
directamente:
int main()
{
int x = 8;
int y = 4;
int z;
z = calcular_menor(x, y);
Definicin de subprogramas
Su definicin podra ser como se indica a continuacin:
Pgina: N 56
PROGRAMACIN ESTRUCTURADA
Pgina: N 57
PROGRAMACIN ESTRUCTURADA
Pgina: N 58
PROGRAMACIN ESTRUCTURADA
Declaracin de subprogramas
Los subprogramas, al igual que los tipos, constantes y variables, deben ser
declarados antes de ser utilizados. Dicha declaracin se puede realizar de dos
formas: una de ellas consiste simplemente en definir el subprograma antes de
utilizarlo. La otra posibilidad consiste en declarar el subprograma antes de su
utilizacin, y definirlo posteriormente. El mbito de visibilidad del subprograma
ser global al fichero, es decir, desde el lugar donde ha sido declarado hasta el
final del fichero.
Para declarar un subprograma habr que especificar el tipo del valor devuelto (o
void si es un procedimiento) seguido por el nombre y la declaracin de los
argumentos igual que en la definicin del subprograma, pero sin definir el cuerpo
del mismo. En lugar de ello se terminar la declaracin con el carcter punto y
coma (;).
int calcular_menor(int a, int b); // declaracion de calcular_menor
int main()
{
int x = 8;
int y = 4;
int z;
z = calcular_menor(x, y);
// ahora z contine el calcular_menor numero de x e y
..............}
Ejemplo de un programa que imprime los nmeros primos menores que
100.
//- fichero: primos1.cpp -------------------------------------------#include <iostream>
const int MAXIMO = 100;
bool es_divisible(int x, int y)
{
return ( x % y == 0 );
Pgina: N 59
PROGRAMACIN ESTRUCTURADA
}
bool es_primo(int x)
{
int i;
for (i = 2; ((i < x) && ( ! es_divisible(x, i))); ++i) {
// vacio
}
return (i >= x);
}
void escribir(int x)
{
cout << x << " ";
}
void primos(int n)
{
for (int i = 1; i < n; ++i) {
if (es_primo(i)) {
escribir(i);
}
}
cout << endl;
}
int main()
{
primos(MAXIMO);
// return 0;
}
//- fin: primos1.cpp ---------------------------------
Pgina: N 60
PROGRAMACIN ESTRUCTURADA
Pgina: N 61
PROGRAMACIN ESTRUCTURADA
Pgina: N 62
PROGRAMACIN ESTRUCTURADA
Pgina: N 63
PROGRAMACIN ESTRUCTURADA
Pgina: N 64
PROGRAMACIN ESTRUCTURADA
Argumentos de funciones
Hay tres tipos de argumentos para las funciones
1. Por valor
2. Por puntero
3. Por referencia
Llamada por valor
Este mtodo copia el valor del argumento dentro de los parmetros formales de la
funcin y todos los cambios que sufran los parmetros no afectan el valor del
argumento usado para llamar la funcin. Los parmetros formales de la funcin
son las declaraciones de las variables que aceptan los valores de los argumentos.
EJEMPLO: texto completo de sqr.cpp
// Programa : SQR.CPP
// Descripcion: Usa una funcion que recibe y regresa un valor entero
#include <iostream.h>
int sqr(int num) {
num = num * num;
return num;
}
main() {
int n, x;
cout << "Ingresa un numero ";
cin >> n;
x = sqr(n);
cout << endl << "El cuadrado de " << n << " es " << x;
}
EJEMPLO: texto completo de cambiarf.cpp
// Prog: CambiaRf.Cpp
// Desc: Usa una funcion que intercambia los valores de sus argumentos
// utilizando paso por Referencia
#include <iostream.h>
void cambia(int &a, int &b) {
int paso;
paso = a;
a = b;
b = paso;
}
main() {
int x, y;
x = 10; y = 20;
cambia(x, y);
cout << endl << "X = " << x;
cout << endl << "Y = " << y;
}
Pgina: N 65
PROGRAMACIN ESTRUCTURADA
8%2=0
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
void leer_datos(int &a, int &b)
{
do
{
cout<< ingrese el primer valor que debe ser sel mayor: ;
cin>>a;
cout<< ingrese el segundo valor: ;
cin>>b;
}
while((a<b)||(a<=0)||(b<0))
}
int MCD(int x,int y)
{
int z;
do
{
z=x%y;
x=y;
y=z;
}
while(z!=0)
return(x);
}
void mensaje(int a1, int b1, int c1)
{
cout<<el MCD entre: <<a1<< y <<b1<< es: <<c1;
}
Void main()
{
int num1, num2, resp;
leer_datos(num1, num2);
resp= MCD(num1, num2);
mensaje(num1, num2, resp);
getch();
}
Deber de procedimientos:
1. Transformar un nmero de cualquier base a base 10
2. Disear un programa que permita encontrar cuantas palabras existen en una
frase que no contengan vocales
3. Disear un programa que calcule la siguiente serie:
Pgina: N 66
PROGRAMACIN ESTRUCTURADA
....
ea
e ( a 1)
e( a 2)
X Toma valores de 1 .. 5 y a indica el nmero de trminos que deber ser entre
3y6
4. Encontrar cuantas palabras de longitud 3 existen en una frase ingresada por el
usuario
5. Transformar la frase: La _ _ EIE _ _ _ esta _ en _ la _ _ _ _ ESPOCH. Retirando
los espacios en blanco que estn de ms
La _ EIE _ esta _ en _ la _ ESPOCH
1.
2.
3.
4.
Deber de funcines:
Hallar el nmero relativo de un nmero
Convertir un nmero dado en su respectivo nmero pero en Romanos
Halar el mximo comn divisor entre dos nmeros
Hallar la siguiente sumatoria
3
X X
3!
5
X
5!
7
X
....
7!
5. Cuntas palabras que tienen al menos 2 letras "a" existen en una frase
ingresada por el usuario
APLICACIN PRCTICA # 18
2 3 5 7 11 13
...
2! 3! 4! 5! 6! 7!
(( n * X ) 1) n!
((( n 1) * X ) 2) ( n 1)!
((( n 2) * X ) 3) ( n 2 )!
....
n
(n 1)
(n 2)
3.
Con todos los valores para X de 1 a 5
4.
( X 1) ( X 2) ( X 3)
2!2 3!3 ....
11!1
2
3
Pgina: N 67
PROGRAMACIN ESTRUCTURADA
CONFERENCIA # 19
ARREGLOS
int A [ 7 ];
A es un vector de 7 elementos que C++ reconoce de la posicin 0 a la 6.
Se puede ignorar la posicin 0 y trabajar de la 1 a la 6.
int A [ 7 ] = {0,72,53,43,23,46,35};
En este caso se inicializa el valor de los elementos al momento de declarar el
vector. Tambin puede hacerse desde el programa:
A[1] = 72;
A[2] = 53;
.etc.
Pgina: N 68
PROGRAMACIN ESTRUCTURADA
Pgina: N 69
PROGRAMACIN ESTRUCTURADA
Pgina: N 70
PROGRAMACIN ESTRUCTURADA
Ejemplo:
int lista[10]
El ejemplo declara un arreglo llamado lista con diez elementos desde lista[0] hasta
lista[9].
EJEMPLO: texto completo de fecha.cpp
// fecha.cpp
#include <iostream>
using namespace std;
void main() {
int fecha[3];
fecha[0] = 8; // mes
fecha[1] = 21; // dia
fecha[2] = 2003;// ao
cout << "Fecha ";
cout << fecha[0] << '/' << fecha[1] << '/' << fecha[2];
}
Pgina: N 71
PROGRAMACIN ESTRUCTURADA
Deber:
1. Sumar dos vectores de igual longitud
2. Sumar dos vectores de distinta longitud
3. Buscar el mayor y menor nmero que se encuentran almacenados en un
vector
4. Ordenar un vector
5. Reemplazar en un vector todos los nmeros repetidos por un -5
CONFERENCIA # 20
Arreglos multidimensionales
Arreglos bidimensionales (Tablas)
Declaracin de arreglos bidimensionales
Variables del tipo matriz
Operaciones con matrices
Matrices como parmetros en procedimientos y funciones
Ejemplo: En una fbrica de componentes electrnicos se desea conocer la
cantidad de componentes fabricados en dos semanas consecutivas. Para
resolver este problema hay que realizar las siguientes tares:
a) Conocer cuntos tipos diferentes de componentes se fabrican y cuntos das
a la semana se trabaja
b) Leer la cantidad fabricada por cada componente en cada da laborable en al
primera semana
c) Leer la cantidad fabricada por cada componente en cada da laborable en al
segunda semana
Pgina: N 72
PROGRAMACIN ESTRUCTURADA
ARREGLOS MULTIDIMENSIONALES
El trmino dimensin representa el nmero de ndices utilizados para referirse a
un elemento particular en el arreglo. Los arreglos de ms de una dimensin se
llaman arreglos multidimensionales.
Matrices en C++
int M [ 4 ] [ 4 ];
M es una matriz de 4 renglones y 4 columnas que C++ reconoce de la posicin
0 a la 3.
Se puede ignorar la posicin 0 y trabajar de la 1 a la 3.
int M [ 4 ] [ 4 ] = { 0,0,0,0,
0,5,1,9,
0,8,6,4,
0,3,7,2 };
En este caso se inicializa el valor de los elementos al momento de declarar la
matriz. Tambin puede hacerse desde el programa:
A[1][1] = 5;
A[1][2] = 1;
.etc.
Pgina: N 73
PROGRAMACIN ESTRUCTURADA
EJEMPLO:Matrices
#include<stdio.h>
#define M 3
#define N 2
int main(void)
{
int a[M][N]; /* matriz bidimensional */
int i, j;
for (i=0;i<M;i++) { /* lectura de cada elemento */
for (j=0;j<N;j++) {
printf(Elemento %d,%d : , i,j);
scanf(%d,&a[i][j]);
}
}
printf(\nLa matriz introducida es:\n\n); /* muestra cada elem */
for (i =0;i <M;i++) {
for (j =0;j <N;j++) {
printf(%d ,a[i][j]);
}
printf(\n); /* para cambiar de lnea al final de cada fila */
}
}
Pgina: N 74
PROGRAMACIN ESTRUCTURADA
foo(caracteres, longitud);
Pgina: N 75
PROGRAMACIN ESTRUCTURADA
}
Ejemplo
#include <ctype.h>
#include <string.h>
void F1(char cadena[], int lng) {
int i;
for (i=0; i!=lng; i++)
cadena[i] = toupper(cadena[i]);
}
int main () {
char caracteres[80] = Ejemplo;
int longitud = strlen(caracteres);
puts(caracteres);
F1(caracteres, longitud);
puts(caracteres);
return 0;
}
Ejemplo
Disear un programa que calcule y escriba el rea y la circunferencia de n crculos,
tal que todos n radios se deben almacenar en el vector R.
#include <stdio.h>
#define n 100
void leerRadios(float radios[], int &numEltos) {
// Parametros de salida: vector radios su numero de
elementos numEltos
int j;
printf(Cuantos radios seran introducidos ?\n);
scanf(%i,&numEltos);
for (j = 0; j < numEltos; j++) {
printf(radio %i = );
scanf(%i,&radios[j]);
}
}
void AreaCirc (float radio, float &area, float &cir)
// Parametros de entrada: radio
// Parametros de salida: area y cir
{
float pi = 3.14159;
area = pi * pow(radio, 2);
cir = 2 * pi * radio;
}
void AreasCircs(float radios[], int numEltos, float
areas[], float cirs[]) {
// Parametros de entrada: vector radios
// Parametros de salida: vectores areas y cirs
Pgina: N 76
PROGRAMACIN ESTRUCTURADA
int I;
for (I = 0; I < numEltos; I++)
AreaCirc(radios[I], areas[I], cirs[I]);
}
void escribirAreasCircs (float radios[], int numEltos, float
areas[], float cirs[]) {
int j;
for (j = 0; j < numEltos; j++) {
printf(Para la circunferencia de radio %i,radios[j]);
printf(su area es: %i\n, areas[j]);
printf(su circunferencia es: %i\n,cirs[j]);
}
}
int main() {
float R[n], A[n], C[n];
int nRadios;
leerRadios(R, nRadios);
AreasCircs(R, nRadios, A, C);
escribirAreasCircs (R, nRadios, A, C);
return 0;
}
1.
2.
3.
Deber:
Sumar dos matrices de igual dimensin
Sumar dos matrices de distinta longitud
Ingresar en una matriz las n notas de m estudiantes y encontrar el promedio
de notas por estudiante y el promedio de cada nota
4. Cuntas palabras de longitud 4 existen en una matriz
5. Disear un programa que simule el juego de la sopa de letras
CONFERENCIA # 21
Recursividad
Definicin
Ejemplo:
Disear un programa utilizando recursividad que permita encontrar el
factorial de un nmero
Disear un programa utilizando recursividad que permita multiplicar dos
nmeros
Hallar el ensimo trmino de la serie de fibonacci
RECURSIVIDAD
Decimos que un objeto es recursivo si en su definicin se nombra a s mismo.
Pgina: N 77
PROGRAMACIN ESTRUCTURADA
Pgina: N 78
PROGRAMACIN ESTRUCTURADA
Pgina: N 79
PROGRAMACIN ESTRUCTURADA
SUMA RECURSIVA
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
int suma(int vec[], int tam)
{
if(tam==0)
return(vec[0]);
else
return(vec[tam]+suma(vec, tam-1));
}
void visual(int v[], int t)
{
int i;
for(i=0;i<t;i++)
cout<< v[i]<<
cout<<endl;
}
void main()
{
int a[5]={1,2,3,4,5};
int t, sum;
clsrsc();
t=5;
visual(a,t);
t=t-1;
Pgina: N 80
PROGRAMACIN ESTRUCTURADA
sum=suma(a,t);
cout<<La suma es: <<sum<<endl;
getch();
}
FUNCIN POTENCIA
int potencia(int base, int exp)
{
if(exp==0)
return 1;
else
return (base*potencia(base,exp-1));
}
FUNCIN DE FIBONACCI
long int fib (int numero)
{
long int result;
if((numero ==1)||(numero==2))
result =1;
else
result= fib(numero-1)*fib(numero-2);
return(result);
}
1.
2.
3.
4.
5.
Deber:
Cambiar un nmero de base 10 a base 2
Hallar el mximo comn divisor de dos nmeros
Hallar la potencia de un nmero
Sumar los n primeros nmeros pares
Sumar los n primeros nmeros impares
APLICACIN PRACTICA # 22
Utilizacin de procedimientos y funciones
1. Hallar las siguientes sumatorias:
(n n )!
((n 1) ( n 1) )! ((n 2) ( n2) )!
....
( X n)! ( X (n 1))! ( X (n 2))!
Con todos los valores de X entre 1 y 5, b es un valor constantes ingresada
el usuario y n el nmero de trminos entre 1 y 10
2. Con todos los valores de X entre 10 y 20, n el nmero de trminos entre 1 y
5
n
5( X n) 10( X (n 1))
n
!
(
n
1
)!
n 1
15( X (n 2))
(
n
2
)!
n2
....
Pgina: N 81
PROGRAMACIN ESTRUCTURADA
X 1 X 22 X 32 ...
1!2
2!2
3!2
4. Con todos los valores de X entre 2 y 7, n el nmero de trminos entre 1 y 5
3(a n)
6(a (n 1))
(n 1)
9(a (n 2))
( n 2)
APLICACIN PRCTICA # 23
1.
2.
3.
4.
Uso de la recursividad
Deber:
Buscar el dgito mayor en una cifra entera: ejemplo 12354 Respuesta = 5
Buscar el dgito menor en una cifra entera: ejemplo 12354 Respuesta = 1
Sumar 1234 = 10 de forma recursiva
Longitud de una cifra 123564 Respuesta=6 dgitos
CONFERENCIA # 24
TIPOS DE DATOS
Tipos enumerados
La declaracin de un tipo enumerado es simplemente una lista de valores que
pueden ser asumidos por una variable del tipo definido. Los valores del tipo
enumerado se representan mediante identificadores que sern las constantes del
nuevo tipo.
Ejemplo:
enum dia_semana { lunes, martes, mircoles, sbado, domingo};
Con esta declaracin el tipo dia_semana es ya conocido, podremos por lo tanto,
definir variables del tipo anterior.
enum dia_semana ayer, hoy;
Estas variables pueden tomar cualquiera de los valores incluidos en la declaracin
de tipo.
Sintaxis:
enum nombre_de_tipo_enumerado
{
lista de nombre de constantes enteras,
};
enum nombre _de_tipo_enumerado lista de variables...
Pgina: N 82
PROGRAMACIN ESTRUCTURADA
nombre_de_tipo
nuevo_nombre_de_tipo
ENTERO;
ENTERO n;
Pgina: N 83
PROGRAMACIN ESTRUCTURADA
CONFERENCIA # 25
Registros
Declaracin simplificada de variables correspondientes a estructuras
Implantacin de registros
Inicializacin de un registro
Asignacin entre registros y paso como parmetro a un subprograma
Uso de registros en estructuras de datos complejas
Registros y arreglos con componentes estructurados
Uniones
Arreglos de registros
Registros con vectores
REGISTROS
Pgina: N 84
PROGRAMACIN ESTRUCTURADA
Implantacin de registros
Pgina: N 85
PROGRAMACIN ESTRUCTURADA
Consideremos por ejemplo una ficha de venta de un libro para una librera. En ella
se guarda la siguiente informacin:
Titulo del libro
Autor
Editorial
Nmero de pginas
Precio
Toda esta informacin puede guardarse en una estructura de datos de tipo
registro. Para definirla se utiliza la palabra reservada struct y tiene la siguiente
sintaxis:
struct ficha{
char titulo[ ];
char autor[ ];
char editorial[ ];
int num_pag;
float precio;
};
Esta declaracin debe entenderse como una declaracin de tipo (de ah el punto y
coma final) y no como un subprograma.
Para declarar una variable de tipo ficha deberemos hacerlo dentro de un
subprograma de la manera habitual:
int main(){
ficha venta;
....
return 0;
}
Ahora la variable venta es de tipo ficha.
A cada uno de los componentes de un registro se denomina campo. As, los datos
titulo, autor, editorial, num_pag, precio, son los campos del registro.
Para acceder a cada uno de los campos de un registro se utiliza el operador punto
.
venta.titulo = El conde de Montecristo;
Inicializacin de un registro
Un registro puede inicializarse en el momento de su declaracin como variable:
struct dimensiones_libro{
float alto;
float ancho;
};
int main(){
dimensiones_libro dim={12.4, 20.8};
Pgina: N 86
PROGRAMACIN ESTRUCTURADA
....
return 0;
}
La alternativa es la inicializacin campo a campo que podemos hacer en cualquier
punto del programa:
int main(){
ficha libro;
...
libro.titulo = El conde de Montecristo;
libro.autor = Alejandro Dumas;
libro.editorial = Aguilar;
libro.num_pag = 324;
libro.precio = 12.35;
...
return 0;
}
Asignacin entre
subprograma
registros
paso
como
parmetro
un
Pgina: N 87
PROGRAMACIN ESTRUCTURADA
return(dim);
}
int main(){
ficha libroA;
dimensiones_libro dimA;
dimA = carga_informacion(libroA);
...
return 0;
}
Pgina: N 88
PROGRAMACIN ESTRUCTURADA
Uniones
Otra construccin til, aunque no muy utilizada, son las uniones, y sirven para
compactar varias entidades de diferentes tipos en la misma zona de memoria. Es
decir, todas las entidades definidas dentro de una unin compartirn la misma
zona de memoria, y por lo tanto su utilizacin ser excluyente. Se utilizan dentro
de las estructuras:
enum Tipo { COCHE, MOTOCICLETA, BICICLETA };
struct Vehiculo {
Tipo vh;
union {
float capacidad;// para el caso de tipo COCHE
int cilindrada; // para el caso de tipo MOTOCICLETA
int talla; // para el caso de tipo BICICLETA
};
};
Y su utilizacin:
Vehiculo xx;
Vehiculo yy;
xx.vh = COCHE;
Pgina: N 89
PROGRAMACIN ESTRUCTURADA
xx.capacidad = 1340.25;
yy.vh = MOTOCICLETA;
yy.cilindrada = 600;
Obviamente, los tipos de los campos de la unin pueden ser tanto simples como
compuestos.
Es responsabilidad del programador utilizar los campos adecuados en funcin del
tipo que se est almacenando.
CONFERENCIA # 26
Archivos o ficheros
Conceptos bsicos de archivos
Definiciones de datos, registros y archivos
Apertura de archivos
Clasificacin de archivos por tipo de contenido
Clasificacin de archivos por tipo de acceso
Direcciones lgicas y direcciones fsicas
Funciones de manejo de archivos en lenguaje c++
Pgina: N 90
PROGRAMACIN ESTRUCTURADA
FICHEROS
CONCEPTOS BSICOS DE ARCHIVOS
Esta seccin presenta las generalidades relacionadas con archivos antes de
empezar a utilizarlos y programarlos. Es necesario involucrarse con la terminologa
relacionada como archivo, registro, campo, etc. Tambin es recomendable conocer
las clasificaciones generales y las operaciones fundamentales con archivos.
Cmo surge la necesidad de utilizar archivos?
Hasta antes del tema de archivos, muchas de las aplicaciones que hemos
programado han sido usando la memoria principal o memoria RAM como nico
medio de almacenamiento (usando variables, arreglos o estructuras de datos mas
complejas), con el inconveniente que esto representa: la volatilidad de la memoria
RAM; es decir, si se apaga la computadora se pierden los datos. Adems, algunas
aplicaciones exigen transportar los datos de una computadora a otra. De ah surge
la necesidad de almacenar dichos datos de forma permanente que permita
retenerlos en ciertos dispositivos de almacenamiento secundario por un perodo
de tiempo largo sin necesidad de suministrarles energa, de tal forma que permitan
transportarlos y utilizarlos en otro equipo computacional.
Pgina: N 91
PROGRAMACIN ESTRUCTURADA
Apertura de archivos
Antes de escribir o leer datos de un archivo es necesario abrirlo. Al abrir el archivo
se establece comunicacin entre el programa y el sistema operativo a cerca de
cmo accesarlo. Es necesario que el programa le proporcione al sistema operativo
el nombre completo del archivo y la intencin de uso (leer o escribir datos),
entonces se definen reas de comunicacin entre ellos. Una de estas reas es una
estructura que controla el archivo (alias del archivo), de esta forma cuando se
solicita una operacin del archivo, se recibe una respuesta que informa el resultado
mediante un apuntador. Cada archivo abierto requiere un alias para poder realizar
operaciones en l.
Pgina: N 92
PROGRAMACIN ESTRUCTURADA
La estructura del archivo contiene informacin del archivo que se est usando, as
como el tamao actual y la localizacin de los buffers de datos.
Clasificacin de archivos por tipo de contenido
Existen muchas clasificaciones de archivos de acuerdo a diferentes criterios o
aplicaciones. Aqu se presenta una muy importante: de acuerdo al contenido.
Archivos de texto
Son aquellos que pueden contener cualquier clase de datos y de tal manera que
son entendibles por la gente. Los datos en un archivo de texto se almacenan
usando el cdigo ASCII, en el cual cada carcter es representado por un simple
byte. Debido a que los archivos de texto utilizan el cdigo ASCII, se pueden
desplegar o imprimir. En este tipo de archivos, todos sus datos se almacenan como
cadenas de caracteres, es decir, los nmeros se almacenan con su representacin
ASCII y no su representacin numrica, por lo tanto no se pueden realizar
operaciones matemticas directamente con ellos. Por ejemplo: Si se guarda el dato
3.141592 en un archivo de texto, se almacena como 3.141592 y ntese que ...
3.141592 3.141592
Archivos binarios
Este tipo de archivos almacenan los datos numricos con su representacin
binaria. Pueden ser archivos que contienen instrucciones en lenguaje mquina
listas para ser ejecutadas. Por ejemplo, cuando escribimos un programa en un
lenguaje en particular (como C++, Pascal, Fortran, etc), tenemos las instrucciones
almacenadas en un archivo de texto llamado programa fuente, pero una vez que
lo sometemos a un proceso de compilacin y ejecucin nuestro programa lo
trasladamos a un programa ejecutable (en lenguaje mquina), que es
directamente entendido por la computadora y se crea un archivo binario. En este
tipo de archivos tambin se pueden almacenar diferentes tipos de datos incluyendo
datos numricos; sin embargo, cabe destacar que los datos numricos se graban
con su representacin binaria (no con su representacin ASCII), por tal razn,
cuando se despliegan con un editor de textos o por medio de comandos del sistema
operativo, aparecen caracteres raros que no se interpretan. Por ejemplo: Si se
Pgina: N 93
PROGRAMACIN ESTRUCTURADA
Archivos secuenciales
Como su nombre lo indica, en este tipo de archivos los registros se graban en
secuencia o consecutivamente y deben accesarse de ese mismo modo, es decir,
conforme se van insertando nuevos registros, stos se almacenan al final del
ltimo registro almacenado; por lo tanto, cuando se desea consultar un registro
almacenado es necesario recorrer completamente el archivo leyendo cada registro
y comparndolo con el que se busca. En este tipo de archivo se utiliza una marca
invisible que el sistema operativo coloca al final de los archivos: EOF (End of File),
la cual sirve para identificar dnde termina el archivo
Consulta o recorrido secuencial
A continuacin se muestra un diagrama de flujo de una rutina de consulta de un
registro en particular mediante un recorrido secuencial. En esta rutina se maneja
un archivo que almacena datos de productos (PRODUCTO.SEC) segn el registro
declarado anteriormente y lo recorre completamente en forma secuencial (registro
por registro) hasta encontrar el producto solicitado.
Pgina: N 94
PROGRAMACIN ESTRUCTURADA
Pgina: N 95
PROGRAMACIN ESTRUCTURADA
Pgina: N 96
PROGRAMACIN ESTRUCTURADA
Pgina: N 97
PROGRAMACIN ESTRUCTURADA
if (alias==NULL)
{
cout << \n\r No se puede abrir el archivo !!!;
getch();
return();
}
Cierre de archivos usando fclose() y fcloseall()
Antes de dejar de utilizar un archivo es necesario cerrarlo. Esto se logra mediante
las funciones fclose o fcloseall. Si se usa fclose es necesario indicarle el alias del
archivo que se desea cerrar. La funcin fcloseall cierra todos los archivos abiertos.
Escritura de registros usando fwrite()
La funcin fwrite proporciona el mecanismo para almacenar todos los campos de
un registro en un archivo. Cabe destacar que al utilizar esta funcin, se almacena
una variable (de tipo struct) que representa un bloque de datos o campos; es
decir, no se almacena campo por campo. Esta funcin tiene cuatro argumentos: la
variable que se desea grabar, su tamao en bytes, la cantidad de variables y el
alias del archivo donde se desea almacenar.
#include <stdio.h>
Pgina: N 98
PROGRAMACIN ESTRUCTURADA
Pgina: N 99
PROGRAMACIN ESTRUCTURADA
Pgina: N 100
PROGRAMACIN ESTRUCTURADA
Pgina: N 101
PROGRAMACIN ESTRUCTURADA
Pgina: N 102
PROGRAMACIN ESTRUCTURADA
if(alias==NULL)
alias=fopen("PRODUCTO.SEC","wb"); // Crea el archivo en caso de no
// existir
cout << "\n\n\n\rNumero de producto: "; cin >> no_prod;
fread(&Registro,sizeof(Registro),1,alias);
// Lee el "Registro", de tamano=sizeof(Registro) del archivo "alias"
while(!feof(alias)) // Ciclo mientras no se encuentre el final del
// archivo
{
if(Registro.no_prod==no_prod)
{
cout << "\n\n\n\rRegistro duplicado !!!";
fclose(alias);
getch();
return;
}
fread(&Registro,sizeof(Registro),1,alias);
}
cout << "\n\rDescripcion: "; gets(Registro.descrip);
cout << "\n\rCantidad : "; cin >> Registro.cantidad;
cout << "\n\rPrecio : "; cin >> Registro.precio;
do
{
cout << "\n\rGarantia : "; Registro.garantia=toupper(getche());
}while(Registro.garantia!='S' && Registro.garantia!='N');
Registro.no_prod=no_prod;
fwrite(&Registro,sizeof(Registro),1,alias); // Grabar el Registro
fclose(alias); // Cierra el archivo
cout << "\n\n\n\rProducto registrado !!!";
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
CONSULTAS secuenciales
En esta seccin se analiza una rutina que busca un registro particular de un
producto en un archivo secuencial. En este tipo de archivo se inicia el recorrido
desde el primer registro almacenado y se detiene cuando se localiza el registro
solicitado o cuando se encuentre el final del archivo.
Codificacin de la rutina de CONSULTAS secuenciales
A continuacin el cdigo de la rutina de CONSULTAS secuenciales:
void CONSULTA_SECUENCIAL(void)
{
int no_prod;
clrscr();
cout << "\n\rCONSULTA DE REGISTROS DE PRODUCTOS";
alias=fopen("PRODUCTO.SEC","rb"); // Intenta abrir el archivo PRODUCTO.SEC
// en modo de solo lectura
if(alias==NULL)
{
Pgina: N 103
PROGRAMACIN ESTRUCTURADA
Pgina: N 104
PROGRAMACIN ESTRUCTURADA
getch();
return;
}
cout << "\n\rNo Prod Descripcion Cantidad Precio Garantia";
cout << "\n\r---------------------------------------------------------------------";
fread(&Registro,sizeof(Registro),1,alias);
// Lee el "Registro", de tamano=sizeof(Registro) del archivo "alias"
while(!feof(alias)) // Ciclo mientras no se encuentre el final del archivo
{
printf("\n\r%3d\t%30s\t%3d\t\t$%4.2f\t%c",Registro.no_prod,Registro.descrip,
Registro.cantidad,Registro.precio,Registro.garantia);
fread(&Registro,sizeof(Registro),1,alias);
}
fclose(alias); // Cierra el archivo
cout << "\n\r-----------------------------------------------------------------------";
cout << "\n\rFin del listado !!!";
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
MODIFICACIONES de datos en un archivo secuencial
La forma de modificar el contenido de los campos de registros de un archivo,
depende mucho de la rutina de consulta, ya que es necesario localizar previamente
el registro que se desea modificar, capturar los nuevos valores y posteriormente
grabar el registro completo en la misma posicin que se encontraba. Esto
ltimo es muy importante porque recuerde que cuando se termina de leer un
registro del archivo, el apuntador se posiciona al inicio del siguiente registro, por
lo que, antes de grabar el registro modificado, es necesario reposicionar el
apuntador del archivo en la direccin correcta.
Codificacin de la rutina de MODIFICACIN secuencial
Se muestra la codificacin de la rutina de modificaciones de campos de un registro
particular en un archivo secuencial.
void MODIFICACION_SECUENCIAL(void)
{
int no_prod; // Variable local para el numero de producto que desea modificar
clrscr();
cout << "\n\rMODIFICACION DE REGISTROS DE PRODUCTOS";
alias=fopen("PRODUCTO.SEC","rb+"); // Intenta abrir el archivo PRODUCTO.SEC
// en modo de lectura/escritura
if(alias==NULL) // Valida la existencia del archivo
{
cout << "\n\n\n\rNo existe el archivo !!!";
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
cout << "\n\n\n\rNumero de producto: "; cin >> no_prod;
fread(&Registro,sizeof(Registro),1,alias);
// Lee el "Registro", de tamano=sizeof(Registro) del archivo "alias"
Pgina: N 105
PROGRAMACIN ESTRUCTURADA
Pgina: N 106
PROGRAMACIN ESTRUCTURADA
{
int no_prod; // Variable local para el numero de producto que desea eliminar
char op; //Variable local
clrscr();
cout << "\n\rBAJAS LOGICAS DE REGISTROS DE PRODUCTOS";
alias=fopen("PRODUCTO.SEC","rb+"); // Intenta abrir el archivo PRODUCTO.SEC
// en modo de lectura/escritura
if(alias==NULL) // Valida la existencia del archivo
{
cout << "\n\n\n\rNo existe el archivo !!!";
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
cout << "\n\n\n\rNumero de producto: "; cin >> no_prod;
fread(&Registro,sizeof(Registro),1,alias);
// Lee el "Registro", de tamano=sizeof(Registro) del archivo "alias"
while(!feof(alias)) // Ciclo mientras no se encuentre el final del archivo
{
if(Registro.no_prod==no_prod)
{
cout << "\n\rNo Prod Descripcion Cantidad Precio Garantia";
cout << "\n\r----------------------------------------------------------";
printf("\n\r%3d\t%30s\t%3d\t\t$%4.2f\t%c",Registro.no_prod,Registro.descrip,
Registro.cantidad,Registro.precio,Registro.garantia);
Registro.no_prod=0;
strcpy(Registro.descrip,"");
Registro.cantidad=0;
Registro.precio=0.0;
Registro.garantia=' ';
do {
cout << "\n\n\rEsta seguro que desea borrarlo? [S/N] ---> ";
op=toupper(getche());
}while(op!='S' && op!='N');
if(op=='S')
{
// Es necesario reposicionar el apuntador del archivo al principio del
// registro que desea modificar, ya que al leer un registro, el
// apuntador se posiciona en el registro siguiente
// La funcion ftell(alias) devuelve la posicion donde se encuentra el
// apuntador
fseek(alias,ftell(alias)-sizeof(Registro),SEEK_SET);
fwrite(&Registro,sizeof(Registro),1,alias); // Graba el registro con
// los nuevos campos
cout << "\n\n\n\rRegistro eliminado !!!";
}
fclose(alias); // Cierra el archivo
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
fread(&Registro,sizeof(Registro),1,alias);
Pgina: N 107
PROGRAMACIN ESTRUCTURADA
}
cout << "\n\rNo se encuentra ese registro !!!";
fclose(alias); // Cierra el archivo
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
Codificacin de la rutina de BAJAS fsicas en un archivo secuencial
(compactar)
Codificacin ntegra de esta rutina.
void BAJA_FISICA_SECUENCIAL(void)
{
FILE *temporal; //Declaracion local de una variable para controlar el
// archivo temporal
clrscr();
cout << "\n\rBAJAS FISICAS DE REGISTROS DE PRODUCTOS";
alias=fopen("PRODUCTO.SEC","rb"); // Intenta abrir el archivo PRODUCTO.SEC
// en modo de solo lectura
if(alias==NULL) // Valida la existencia del archivo
{
cout << "\n\n\n\rNo existe el archivo !!!";
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
temporal=fopen("TEMPORAL.TMP","wb"); // Crea el archivo TEMPORAL.TMP
fread(&Registro,sizeof(Registro),1,alias);
// Lee el "Registro", de tamano=sizeof(Registro) del archivo "alias"
while(!feof(alias)) // Ciclo mientras no se encuentre el final del archivo
{
if(Registro.no_prod!=0)
fwrite(&Registro,sizeof(Registro),1,temporal);
// Graba el registro valido en el archivo temporal
fread(&Registro,sizeof(Registro),1,alias);
}
fcloseall(); // Cierra todos los archivos abiertos
remove("PRODUCTO.SEC"); //Elimina el archivo original
rename("TEMPORAL.TMP","PRODUCTO.SEC");
//Renombra el archivo temporal con el nombre del archivo original
cout << "\n\n\n\rArchivo compactado !!!";
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
Pgina: N 108
PROGRAMACIN ESTRUCTURADA
Altas directas
Aqu se presenta una rutina que inserta registros de productos en un archivo
directo. Se tomar el mismo ejemplo del registro de producto que se us en el
archivo secuencial. En este caso se nombrar el archivo como PRODUCTO.DIR
La primera ocasin que se intente insertar registros en un archivo, ste debe
crearse; sin embargo debe cuidarse no crear el archivo cada vez que se
invoque esta rutina porque debe tenerse presente que si se crea un archivo
existente, se pierde su contenido anterior.
Codificacin de la rutina de altas directas
Codificacin de la rutina de altas en un archivo relativo o de acceso directo.
void ALTA_DIRECTA(void)
{
int no_prod; // Variable local para el numero de producto
clrscr();
cout << "\n\rALTAS DE REGISTROS DE PRODUCTOS";
alias=fopen("PRODUCTO.DIR","rb+"); // Intenta abrir el archivo PRODUCTO.DIR
// en modo de lectura/escritura
if(alias==NULL)
alias=fopen("PRODUCTO.DIR","wb"); // Crea el archivo en caso de no existir
cout << "\n\n\n\rNumero de producto: "; cin >> no_prod;
dir_fisica=no_prod*sizeof(Registro); // Calculo de la dir. fisica
fseek(alias,dir_fisica,SEEK_SET); //Posicionar el apuntador del archivo
fread(&Registro,sizeof(Registro),1,alias);
// Lee el "Registro", de tamano=sizeof(Registro) del archivo "alias"
if(Registro.no_prod==no_prod)
{
cout << "\n\n\n\rRegistro duplicado !!!";
fclose(alias);
getch();
return;
}
cout << "\n\rDescripcion: "; gets(Registro.descrip);
cout << "\n\rCantidad : "; cin >> Registro.cantidad;
cout << "\n\rPrecio : "; cin >> Registro.precio;
do
{
cout << "\n\rGarantia : "; Registro.garantia=toupper(getche());
}while(Registro.garantia!='S' && Registro.garantia!='N');
Registro.no_prod=no_prod;
fseek(alias,dir_fisica,SEEK_SET); //Posicionar el apuntador del archivo
fwrite(&Registro,sizeof(Registro),1,alias); // Grabar el Registro completo
fclose(alias); // Cierra el archivo
cout << "\n\n\n\rProducto registrado !!!";
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
CONSULTAS directas
Pgina: N 109
PROGRAMACIN ESTRUCTURADA
Pgina: N 110
PROGRAMACIN ESTRUCTURADA
al inicio del siguiente registro, por lo que, antes de grabar el registro modificado,
es necesario reposicionar el apuntador del archivo en la direccin correcta.
Codificacin de la rutina de MODIFICACIONES directas
Codificacin de la rutina de modificaciones de campos de un registro particular en
un archivo directo.
void MODIFICACION_DIRECTA(void)
{
int no_prod; // Variable local para el numero de producto que desea modificar
clrscr();
cout << "\n\rMODIFICACION DE REGISTROS DE PRODUCTOS";
alias=fopen("PRODUCTO.DIR","rb+"); // Intenta abrir el archivo PRODUCTO.DIR
// en modo de lectura/escritura
if(alias==NULL) // Valida la existencia del archivo
{
cout << "\n\n\n\rNo existe el archivo !!!";
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
cout << "\n\n\n\rNumero de producto: "; cin >> no_prod;
dir_fisica=no_prod*sizeof(Registro); // Calculo de la dir. fisica
fseek(alias,dir_fisica,SEEK_SET); //Posicionar el apuntador del archivo
fread(&Registro,sizeof(Registro),1,alias);
// Lee el "Registro", de tamano=sizeof(Registro) del archivo "alias"
if(Registro.no_prod==no_prod)
{
cout << "\n\rNo Prod Descripcion Cantidad
Precio Garantia";
cout << "\n\r------------------------------------------------------------------------";
printf("\n\r%3d\t%30s\t%3d\t\t$%4.2f\t%c",Registro.no_prod,Registro.descrip,
Registro.cantidad,Registro.precio,Registro.garantia);
cout << "\n\n\n\rAnote los nuevos datos ...";
cout << "\n\rDescripcion: "; gets(Registro.descrip);
cout << "\n\rCantidad : "; cin >> Registro.cantidad;
cout << "\n\rPrecio : "; cin >> Registro.precio;
do
{
cout << "\n\rGarantia : "; Registro.garantia=toupper(getche());
}while(Registro.garantia!='S' && Registro.garantia!='N');
// Es necesario reposicionar el apuntador del archivo al principio del
// registro que desea modificar, ya que al leer un registro, el
// apuntador se posiciona en el registro siguiente
// La funcion ftell(alias) devuelve la posicion donde se encuentra el
// apuntador
fseek(alias,dir_fisica,SEEK_SET); //Posicionar el apuntador del archivo
fwrite(&Registro,sizeof(Registro),1,alias); // Graba el registro con
// los nuevos campos
fclose(alias); // Cierra el archivo
cout << "\n\n\n\rRegistro modificado !!!";
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
Pgina: N 111
PROGRAMACIN ESTRUCTURADA
getch();
return;
}
else
{
cout << "\n\n\n\rNo se encuentra ese registro !!!";
}
fclose(alias); // Cierra el archivo
cout << "\n\n\n\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
Bajas de registros en un archivo de acceso directo (bajas lgicas)
Para el ejemplo que se ha estado manejando en este archivo directo, NO se pueden
realizar bajas fsicas (nicamente bajas lgicas), ya que existe una relacin directa
entre la direccin lgica y el nmero del producto: esto es, que el producto 1 se
almacena en el registro lgico 1, o sea que cada producto se almacena en su
respectivo registro de acuerdo al nmero de producto y si se aplicase la rutina de
bajas fsicas (compactacin), los registros se recorreran a otras direcciones que
no corresponderan con su nmero de producto y dichos registros no podran ser
localizados por las rutinas de consultas, modificaciones y las mismas bajas lgicas.
Al igual que en las bajas lgicas de los archivos secuenciales, cuando se elimina
un registro en forma lgica de un archivo, slo se le coloca una marca especial en
alguno de sus campos que lo identifique como registro borrado, sin embargo, el
registro sigue existiendo en el archivo y por lo tanto ocupa espacio.
Codificacin de la rutina de BAJAS lgicas directas
Rutina de bajas lgicas en un archivo directo.
void BAJA_LOGICA_DIRECTA(void)
{
int no_prod; // Variable local para el numero de producto que desea eliminar
char op;
clrscr();
cout << "\n\rBAJA LOGICA DE REGISTROS DE PRODUCTOS";
alias=fopen("PRODUCTO.DIR","rb+"); // Intenta abrir el archivo PRODUCTO.DIR
// en modo de lectura/escritura
if(alias==NULL) // Valida la existencia del archivo
{
cout << "\n\n\n\rNo existe el archivo !!!";
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
cout << "\n\n\n\rNumero de producto: "; cin >> no_prod;
dir_fisica=no_prod*sizeof(Registro); // Calculo de la dir. fisica
fseek(alias,dir_fisica,SEEK_SET); //Posicionar el apuntador del archivo
fread(&Registro,sizeof(Registro),1,alias);
// Lee el "Registro", de tamano=sizeof(Registro) del archivo "alias"
if(Registro.no_prod==no_prod)
Pgina: N 112
PROGRAMACIN ESTRUCTURADA
{
cout << "\n\rNo Prod Descripcion Cantidad
Precio Garantia";
cout << "\n\r------------------------------------------------------------------------";
printf("\n\r%3d\t%30s\t%3d\t\t$%4.2f\t%c\n\n\n\n\r",Registro.no_prod,Regist
ro.descrip,Registro.cantidad,Registro.precio,Registro.garantia);
Registro.no_prod=0;
strcpy(Registro.descrip,"");
Registro.cantidad=0;
Registro.precio=0.0;
Registro.garantia=' ';
// Es necesario reposicionar el apuntador del archivo al principio del
// registro que desea modificar, ya que al leer un registro, el
// apuntador se posiciona en el registro siguiente
// La funcion ftell(alias) devuelve la posicion donde se encuentra el
// apuntador
do
{
cout << "\n\rEsta seguro que desea eliminar este registro? [S/N] ---> ";
op=toupper(getche());
}while(op!='S' && op!='N');
if(op=='S')
{
fseek(alias,dir_fisica,SEEK_SET); //Posicionar el apuntador del archivo
fwrite(&Registro,sizeof(Registro),1,alias); // Graba el registro con
// los nuevos campos
cout << "\n\n\n\rRegistro eliminado logicamente !!!";
}
else
{
cout << "\n\n\n\rRegistro NO eliminado !!!";
}
fclose(alias); // Cierra el archivo
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
else
{
cout << "\n\n\n\rNo se encuentra ese registro !!!";
}
fclose(alias); // Cierra el archivo
cout << "\n\n\n\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
Pgina: N 113