Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tecnicas de Programacion PDF
Tecnicas de Programacion PDF
e Informtica
______________________________________________________________________
INSTITUTO NACIONAL DE ESTADISTICA E INFORMATICA
Elaborado por la Sub-Jefatura de Informtica
Direccin Tcnica de Desarrollo Informtico
Telfono 433-4223 anexos 314 - 315
Telefax 433-6106 433-5568
INTERNET infoinei@inei.gob.pe
Edicin :
Direccin, Redaccin y Talleres : Av. General Garzn N 658 Jess Mara.
Orden : 605 - 99 OI - OTDTI
PRESENTACION
La presente publicacin consta de cinco captulos, los que se da una visin de las
Tcnicas de Programacin Clsicas utilizadas para la prctica de esta disciplina. Pero
antes se hace una revisin obligada de los fundamentos bsicos de programacin como
son: los sistemas de procesamiento de informacin, el diseo de algoritmos sus
caractersticas y conceptos, variables y tipos de datos primitivos, etc. Tambin, el
conocimiento de las herramientas de programacin, de los programas y como estn
estructurados, los tipos de instrucciones. Adems sobre las Tcnicas de Programacin,
referidas a la Programacin Modular, Programacin Estructurada y los diferentes tipos
de estructuras que existen. En el capitulo V, y ltimo, se desarrolla el tema de la
programacin Orientada a Objetos (POO), y los conceptos que se encuentran dentro de
este tipo de programacin.
CONTENIDO
1. Solucionando el problema. 29
2. Anlisis del problema. 29
3. Diseo del algoritmo. 29
3.1 Escritura inicial del algoritmo 29
4. Solucin de problemas por computadoras 30
5. Representacin grfica de los algoritmos. 30
5.1 Diagrama de flujo. 31
5.2 Diagrama de Nassi-Schneiderman (N-S) 32
5.3 Pseudocdigo 32
Conclusiones 67
Bibliografa 68
TECNICAS DE PROGRAMACION
CAPITULO I.
ALGORITMOS Y PROGRAMAS
El procesamiento de la informacin
presenta tres componentes, que son:
entrada, procesador y salida.
La informacin es ingresada al
procesador, el cual quien se representa
como una caja negra, luego sta es
procesada y sale como resultado.
Si el procesador es una computadora, el
algoritmo se expresa de tal forma que
recibe el nombre de programa. Un
2. CONCEPTO DE ALGORITMO
Sin algoritmo no podr existir un programa, por eso es necesario disear el algoritmo
previamente, para su realizacin.
Multidocumento.
Datos almacenados.
Disco magntico.
Pantalla.
Ejemplo de un algoritmo:
Suma = N*(N+1)
2
Se definen: E/S
Entrada: Nmero entero (N)
Salidas: Suma
PSEUDOCODIGO:
inicio
Ingresar un nmero entero: N
Calcular suma por frmula:
Suma = N*(N+1)/2
Escribir suma
fin
DIAGRAMA DE FLUJO:
Inicio
Ingresar N
Suma = N(N+1)/2
Escribir Suma
Fin
Ejemplo:
Se desea disear un algoritmo para saber si un nmero es primo o no.
Solucin:
Un nmero es primo si slo puede dividirse por s mismo y por la unidad (es decir, no
tiene ms divisores que el mismo y la unidad). Por ejemplo 3,5,7,11,13,17,19, etc., As,
3 es divisible por 3 y por 1, 17 lo es por 17 y por 1, etc.
El algoritmo de resolucin del problema pasa por dividir sucesivamente el nmero
2,3,4, etc.
1. Inicio.
2. Poner X igual a 2 (X=2, X, variable que representa a los divisores del
nmero que se busca N).
3. Dividir N por X (N/X).
4. Si el resultado de N/X es entero, entonces N no es un nmero primo y
bifurcar al punto 7, en caso contrario continuar el proceso.
5. Suma 1 a X (X X + 1).
6. Si X es igual a N, entonces N es un nmero primo; en caso contrario,
bifurcar al punto 3.
7. Fin.
1. Inicio.
2. X=2
3 y 4. 131/2. Como el resultado no es entero, se contina el proceso.
5. X 2 + 1, luego X=3.
6. Como X no es 131, se bifurcar al punto 3.
131/3 resultado no es entero.
X 3 + 1, X=4.
131/4.,etc.
3.5.1 Interpretes:
Un lenguaje que tenga la capacidad de soportar un traductor de tipo intrprete es
denominado lenguaje interpretado. BASIC es el modelo por excelencia de
lenguaje interpretado.
3.5.2 Compiladores
Es un programa traductor que lee el programa y traduce en forma total, y genera
un archivo ejecutable (EXE), en los programas fuente escritos en lenguajes de
alto nivel como PASCAL, FORTRAM,, a lenguajes mquina. Los programas
escritos en lenguajes de alto nivel son llamados programas fuente y los
programas que son traducidos, programas o cdigo objeto.
Existen dos grupos de tipos de datos: Los que no tienen estructura, llamados Simples, y
los que son estructurados, llamados Compuestos. La variedad con respecto a los tipos
de datos son representados de distintas formas en la computadora. A nivel de mquina
un dato es una secuencia o conjunto de bits (dgitos 0 1).
Dato: Cuando se habla de dato, o se da la expresin general de dato, el cual describe los
objetos con los que opera una computadora. Los algoritmos y programas
correspondientes operan sobre datos. Los datos de entrada se transforman gracias al
programa y se traducen a lenguaje mquina, los mismos que son ejecutados por la
computadora.
Para evitar que el cero se duplique, generado por el bit de signo se suele
ocupar la notacin por complemento a dos.
896591384456
signo mantisa
e
N=s+M+b
En donde:
S=+6
M = Mantisa de M, es un nmero tal que 0<M<1
b = base, es un entero positivo >= 2
e = exponente, es un entero con signo.
El nmero M tambin se expresa en base b:
M = 0.d1 d2......
Con los dgitos d1 tomando valores en 0,1,....,b-1
NOTA:
1. en la representacin anterior se excluye el nmero 0.0
2. puesto que para un mismo nmero hay varias representaciones
cientficas, por lo tanto varias mantisas y exponentes, se suele normalizar
la mantisa M de manera que el primer dgito d1 sea distinto de 0, para
lo cual basta desplazar el punto de fraccin hasta que se cumpla dicha
condicin, y desde luego modificar el exponente e para que se
mantenga el valor del nmero.
Ejemplos:
1. Expresar el nmero 123.05 (base 10) en forma cientfica con base
10.
3
-123.05 = - 0.12305 * 10 (mantisa normalizada)
5
= - 0.0012305 * 10
2. Expresar el nmero 0.003 (base 16) en notacin cientfica con base
2:
-2
0.003 = + 0.3A * 16
-8
= + 0.0011 1010 * 2 (pasando a base 2)
-10
= + 0. 111010 * 2 (mantisa normalizada)
3. Expresar el nmero 123.025 (base 10) en notacin cientfica con
base 2 y mantisa normalizada con 24 dgitos.
Para reducir el nmero de operaciones primero obtenemos la
representacin en base 16 del nmero sin signo.
123 16
123(10) = 7B(hex)
B
7
Luego,
0.025(10) = 0.0666...6...(16) (fraccin peridica)
7
- 0.1111 0110 0000 1100 1100 1100 1100(2) ...* 2 (ii)
Representacin en Memoria:
e
El nmero N = s M b , dado en notacin cientfica y con mantisa
normalizada, se suele representar en la memoria del computador usando
celdas de longitud L:
---------L bits--------
s e + EX mantisa
0 0....0 0....0
Ejemplos
1. El procesador PDP-11 representa un nmero de coma flotante de
precisin simple utilizando el siguiente formato de 32 bits:
- un bit de signo.
- Exponente (8bits) con exceso a 128 = 80 (hex)
- Mantisa normalizada de 24 bits
- Base 2
s e + 44 mantisa normalizada
Luego, C6 7B 06 66
3. Turbo Pascal (para IBM PC y compatibles) utiliza 6 bytes (48 bits) para
representar los nmeros de tipo REAL:
con base 2.
NOTA: Realmente los bytes se almacenan con los 5 ltimos bytes en orden
invertido: 87 CC CC OC F6
4.Turbo C emplea 4 bytes (32 bits) para representar los nmeros de tipo
float:
siendo base 2
Ejemplo:
Luego,
Operaciones:
A partir de la representacin en memoria de un nmero de coma flotante se
obtienen: el signo, exponente y la mantisa del mismo.
b. Si ambos datos tienen signos opuestos, se suman las mantisas; si ambos datos
tienen signos iguales se resta la mantisa menor de la mantisa mayor.
En el primer caso, el signo de la resta es el signo del primer dato; en el segundo
caso, el signo de la resta es:
El signo minuendo si ste tiene la mantisa mayor o el signo opuesto del
sustraendo, en caso contrario.
NOTA:
1. En todos los casos las operaciones con mantisas son realizadas como enteros
sin signos.
2. En la exposicin dada se excluye el caso en que uno de los datos es el
nmero 0.0, cuyo tratamiento puede ser realizado como un caso simple.
Ejercicios:
1. Expresar los nmeros decimales 1200.05, -456.60 egn los formatos de IBM
370 y Turbo C.
2. Hallar 85 C8 00 00 00 00 + 87 70 00 00 00 00 00 si los factores representan
datos REAL de Turbo Pascal.
Rpta. 8C BB 80 00 00 00
3. Hallar los valores de los dos factores del ejercicio b. en el sistema decimal.
8 0 0 0 0 0 0 0 0 (hex)
1 100 1000 0000 0000 0000 0000 0000 0000 0000 0000 (bin)
4.2 Datos Lgicos: Conocidos tambin como datos booleanos, este tipo de dato es
aquel que slo admite dos tipos de valores, los que son verdadero (true) o falso (false).
Los dos son usados para la representacin de alternativas (si/no) que se dan segn la
condicin que se plantee, es decir, si se quiere que el programa evale una condicin
determinada, sta puede ser verdadera o falsa, dependiendo de las reglas que se hayan
planteado anteriormente.
4.3 Datos Tipo Caracter: Los datos de este tipo forman un conjunto finito y ordenado
que la computadora puede reconocer. Un dato tipo caracter contendr solamente un
caracter. No existe un estndar en lo que respecta al reconocimiento de caracteres, pero
las computadoras pueden reconocer los siguientes caracteres:
Representacin de Caracteres
Para facilitar la escritura y la lectura de los programas y datos de una computadora, se
desarrollaron cdigos simblicos para representar la informacin con caracteres, en
lugar de nmeros.
4.4 Datos tipo Cadena: Un modo de representar los datos tipo carcter, son el tipo
Cadena (string). Estos se forman por una sucesin de caracteres, encontrndose
delimitados por una comilla (apstrofo) o dobles comillas, sto va de acuerdo al tipo de
lenguaje de programacin que se est tratando, con esto se entiende entonces que el
tamao que tendr una cadena o su longitud, ser la que se encuentre comprendida entre
las comillas (delimitadores).
Por ejemplo la cadena curso tiene una longitud de cinco caracteres, mientras que la
cadena tiene una longitud de un carcter, que es un espacio solamente. La cadena
, es una cadena vaca. La cadena win-98 tiene una longitud de seis caracteres o
elementos alfanumricos.
hola Rebeca
28 de Julio de 1821
Sr. Alvarado
5. CONSTANTES VARIABLES
Las constantes son datos cuyos valores no cambian, pero existen datos cuyos valores s
varan durante la ejecucin del programa, a stos los llamamos variables. En la mayora
de los lenguajes de programacin se permiten diferentes tipos de constantes: enteras,
reales, caracteres y boolean o lgicas, quienes representan datos de estos tipos.
Entonces una variable se conoce como un objeto, o partida de datos cuyo valor puede
cambiar durante la ejecucin del algoritmo o programa. A las variables se les conoce o
identifica por los atributos siguientes: nombre que lo asigna y tipo que describe el uso
de la variable.
6. EXPRESIONES
Son la combinacin de constantes, variables, smbolos de operacin, parntesis y
nombres de funciones especiales, idea que puede ser utilizada en notaciones de
matemtica tradicional. Los valores de las variables nos permitirn determinar el valor
de las expresiones, debido a que stos estn implicados en la ejecucin de las
operaciones indicadas. Estas constan de operandos y operadores. Segn el tipo de
objetos que manipulan, pueden clasificarse en:
+ suma
- resta
* multiplicacin
/ divisin
**,^ exponenciacin
div divisin entera
mod mdulo o resto
A div B
7. FUNCIONES INTERNAS
Generalmente las operaciones requieren de un nmero determinado de operadores
especiales que se denominan funciones internas, incorporadas o estndar.
Las funciones soportan argumentos reales o enteros y sus resultados estn supeditados a
la tarea que realice dicha funcin.
8. LA OPERACION DE ASIGNACION
Se le otorgan valores a una variable. Esta operacin de asignacin se conoce como
instruccin o sentencia de asignacin, si es que est en un lenguaje de programacin.
La operacin de asignacin es representada por un smbolo u operador:
La accin de asignar puede ser destructiva ya que puede perderse el valor que tuviera la
variable antes, siendo reemplazado por el nuevo valor. Las acciones de asignacin se
clasifican segn sea el tipo de expresiones en: Asignacin aritmticas, Asignacin
lgica y Asignacin de caracteres.
Frente a todo esto, existir error si es que se quiere asignar valores de tipo caracter a
una variable numrica o viceversa.
CAPITULO II.
COMPUTADORAS Y HERRAMIENTAS DE PROGRAMACION
CLAVES EN LA SOLUCION DE PROBLEMAS
Para la solucin de problemas por medio de computadoras, deben cumplirse tres fases:
1. SOLUCIONANDO EL PROBLEMA
La computadora es considerada como una herramienta para la solucin de problemas, es
por eso que las personas estn aprendiendo las tcnicas de programacin, las cuales
ayudan a entender mejor los lenguajes de programacin, pero para llegar a la solucin
se deben llevar a cabo los tres pasos anteriormente mencionados.
Para la definicin del problema con precisin, las entradas y salidas deben estar bien
especificadas, siendo estos requisitos fundamentales para una solucin eficaz.
Ejemplo:
Queremos determinar la cantidad total de llamadas a pagar en la empresa telefnica,
teniendo en cuenta los siguientes aspectos:
Solucin :
Realizar un algoritmo que solucione el problema planteado:
1. Inicio.
2. Realizar la lectura del nmero de minutos hablados por telfono.
3. Realizar la comprobacin de que el nmero de minutos es mayor que cero,
pues la llamada ha sido realizada. Si el nmero de minutos es distinto de cero
entonces es positivo. Si el nmero de minutos es menor que cero, entonces
se producir error.
4. Realizar el clculo de la conversacin de acuerdo a la tarifa:
4. Lenguaje espaol.
5. Frmulas.
Inicio
Representacin grfica de
Un flujograma o diagrama
de flujo: entrada-salida
condicin y
decisin si/no
proceso
fin
DIAGRAMA DE FLUJO
Inicio
Ejemplo: 1 1
En la representacin Leer
grfica del ejemplo de Nmins
la seccin 3.1 ser la
siguiente: escribir
Nminut ERROR
<=0 Minut >0
Variables:
NPASOS : Nmero de
pasos de la llamada. Hacer
N : Nmero de pasos 1
IMP = 0.60
que exceden de cinco. N=Nminut-5
FACT : Importe total de
la llamada.
Hacer
N>0 IMP=IMP+N*5
Escribir
Nminut.
IMP
fin
Ejemplo: 2
Se desea realizar 100 facturas para cien clientes. El diagrama de flujo sera el siguiente:
Solucin:
Inicio
I=1
SI
I >100?
NO fin
Realizar
nueva
factura
I = I+1
6. PSEUDOCODIGO
Conocido como lenguaje de especificacin de algoritmos, el pseudocdigo se traduce
posteriormente a un lenguaje de programacin. La computadora no puede ejecutar el
pseudocdigo. Su uso tiene ventajas por que permite al programador una mejor
concentracin de la lgica y estructuras de control, y no preocuparse de las reglas de un
lenguaje de programacin especfico. El pseudocdigo tambin ofrece la ventaja de
poder hacer modificaciones cuando se detectan errores en la lgica del programa, lo que
no es posible o es muy difcil cuando se ve esto en un lenguaje de programacin. Dentro
de las ventajas del pseudocdigo es que da la facilidad de traduccin por lenguajes
como PASCAL, COBOL, C, FORTRAN 77 o BASIC estructurado (ANSI, True,
Quick, Turbo, etc.).
El pseudocdigo hace uso de palabras que son reservadas para las acciones sucesivas,
las cuales son similares a sus homnimas en los lenguajes de programacin tales como:
star, end, stop, if-then-else, while-when, repeat-until, etc. El pseudocdigo exige la
indentacin (sangra en el margen izquierdo) de diferentes lneas.
Ejemplo de un Pseudocdigo:
1. inicio
2. establecer CONTADOR a 1
3. establecer SUMA a 0
4. mientras CONTADOR < 100 hacer lo siguiente
4.1 sumar CONTADOR a SUMA
4.2 incrementar CONTADOR en 1
5. Visualizar suma
Bifurcaciones:
If (condicin) then (actividad)
If (condicin) then (actividad_1) else (actividad_2)
Bucles:
while (condicin) do (actividad)
repeat (actividad) until (condicin)
Funciones:
procedure nombre(argumentos)
Diseo modular:
El programa se divide en mdulos con una finalidad bien definida.
Cada uno de estos mdulos se puede descomponer en otros mdulos ms
simples.
Se puede llegar al grado de detalle que se desee.
Se puede utilizar niveles de detalle distintos, en las diferentes fases del
desarrollo.
CAPITULO III.
PROGRAMA Y SU ESTRUCTURA GENERAL
1. PROGRAMA
Est definido como un conjunto de instrucciones, que ejecutarn una tarea determinada,
es decir, mediante procedimientos lgicos, el programa realizar lo que el programador
desea. Es un medio para conseguir un fin, el cual ser la informacin necesaria para
solucionar un problema.
Para la realizacin y desarrollo de un programa se requiere de las siguientes fases:
- Definicin y anlisis del problema
- Diseo de algoritmos
Diagrama de flujo
Diagrama N-S
Pseudocdigo
- Codificacin del programa
- Depuracin y verificacin del programa
- Documentacin
- Mantenimiento
3. INSTRUCCIONES
El diseo del algoritmo y luego la codificacin de programas consiste en la definicin
de acciones o instrucciones que van a dar solucin al problema que se est tratando.
Luego de escribirse las acciones o instrucciones, se deber ir al proceso de
almacenamiento en la memoria conservando el orden lgico para su posterior ejecucin;
es decir en secuencia. Un programa puede ser lineal o no lineal.
Un programa es lineal cuando las instrucciones siguen una secuencia, sin bifurcaciones,
decisin ni comparaciones. Cuando el programa es no lineal, significa que la secuencia
es interrumpida mediante instrucciones de bifurcacin.
4. TIPOS DE INSTRUCCIONES
De acuerdo al tipo de lenguaje de programacin en que se trabaja las instrucciones van a
ser diferentes. Pero las instrucciones bsicas son independientes del lenguaje.
Las instrucciones bsicas pueden clasificarse de la siguiente forma:
- Instruccin de inicio/fin.
- Instruccin de asignacin.
- Instruccin de lectura.
- Instruccin de escritura.
- Instruccin de bifurcacin.
- Instrucciones de repeticin o ciclos.
La instruccin de lectura de datos (entrada). Esta instruccin lee datos que son
ingresados por medio de un dispositivo de entrada.
Bifurcacin incondicional. Esta se realiza siempre que el flujo del programa pase por
la instruccin sin necesidad del cumplimiento de ninguna condicin.
- expresiones
- instrucciones
Hay otros elementos que tambin son bsicos y forman parte de los programas. Son de
mucha importancia la comprensin y el funcionamiento, por que gracias a ellos se
llegar a un correcto diseo del algoritmo.
5.1 Bucles:
Los bucles son elementos que tiene instrucciones que se repiten un cierto
nmero de veces, mientras una condicin es cumplida; se conoce como lazo
(loop). La condicin es un mecanismo que determina las tareas repetitivas el
cual debe ser establecido por el programador, ste puede ser verdadero o falso y
se comprueba una vez a cada paso o iteracin del bucle.
Un bucle est compuesto de tres partes:
1. decisin
2. cuerpo del bucle 1
3. salida del bucle
2 2
Bucles Anidados: La forma como se disponen los bucles tambin lleva un nombre, de
all que pueden ser anidados o independientes. Los que son anidados son cuando se
encuentran uno contenido en otro, y los independientes son los que se encuentran libres,
sin la influencia de otro.
Ejemplo:
Bucle A
Bucle B
Bucle Anidado
5.2 Contadores: Es un dispositivo que sirve para un control permanente del bucle. Este
dispositivo llamado Contador es una variable en la que su valor se incrementa o
decrementa en una cantidad constante por cada iteracin.
Ejemplo:
Inicio
Cont 1 Contador
si
Condicin
NO
SI Condi. NO
Accin S1 Accin S2
5.5 Interruptores: Variable que puede tomar diversos valores a lo largo de la ejecucin
de un programa, permitiendo comunicar la informacin de una parte a otra. Estos
pueden tomar dos valores 1 y 0. (encendido / apagado, abierto/ cerrado).El
interruptor es llamado tambin conmutador (switch).
=1 SW?. =0
Accin S1 Accin S2
6. ESCRITURA DE ALGORITMOS/PROGRAMAS
Un algoritmo debe ser sencillo, es decir escrito de una manera clara y entendible,
estructurado de modo que su lectura facilite de manera considerable su posterior
codificacin en un lenguaje de programacin cualquiera, los algoritmos deben ser
escritos en un lenguaje similar a los programas.
Var
lista de variables-1: tipo-1
lista de variables-2: tipo-2
.
.
lista de variables-n: tipo-n
siendo cada lista de variables una variable simple o una lista de variables separadas por
comas y cada tipo es uno de los tipos de datos bsicos (entero, real, char o boolean).
6.5 Comentarios
El contenido de un programa es el conjunto de la informacin interna y externa al
programa que facilitar su mantenimiento posterior y puesta a punto.
El contenido interno es el que se acompaa en el cdigo o programa fuente y se realiza
a base de comentarios significativos. Estos comentarios son representados con
diferentes notaciones, segn sea el lenguaje de programacin en que se trabaje.
inicio
<sentencia S1>
<Sentencia S2> {cuerpo del algoritmo}
.
.
<Sentencia Sn>
fin
Debemos Recordar:
CAPITULO IV
LAS TECNICAS DE PROGRAMACION
INTRODUCCION
El diseo de un programa que se realiza sin seguir una metodologa puede funcionar,
pero se debe tener en cuenta que con el tiempo se convertir en un conjunto de
instrucciones. Es decir que las consecuencias de no utilizar un mtodo determinado
llevar a cometer errores que pueden costar el buen funcionamiento del mismo.
Las diferentes etapas del programa suelen tener discontinuidad y son difcilmente
identificables. En consecuencia existe una difcil fase de desarrollo y mantenimiento.
Aqu se identifican algunos de los problemas que suelen presentarse:
Existe una larga lista de problemas que pueden presentarse pero en este caso slo se han
citado algunos.
Es de suma importancia poder prevenir las modificaciones que puedan realizarse en el
futuro, as como tambin la actualizacin de la documentacin.
Para esto, se citan algunas que son importantes como:
Cuando existen problemas con cierto grado de complejidad, el diseo del algoritmo
requiere de una reduccin y simplificacin en la legibilidad del algoritmo. Las tcnicas
de programacin Modular y Estructurada son de gran ayuda para la solucin de
problemas de este tipo, consiguiendo mayor rapidez y eficacia. Para el diseo de un
programa, el problema se descompone en mdulos (independientes cada uno), se hace la
programacin de cada mdulo mediante mtodos estructurados, los que posteriormente
son unidos mediante el uso de procedimientos ascendentes o descendentes.
1. Secuenciales.
2. Repetitivas.
3. Seleccin.
2. PROGRAMACION MODULAR
Este es uno de los mtodos para el diseo ms flexible y de mayor performance para la
productividad de un programa. En este tipo de programacin el programa es dividido en
mdulos, cada uno de las cuales realiza una tarea especfica, codificndose
independientemente de otros mdulos. Cada uno de stos son analizados, codificados y
puestos a punto por separado.
Este procedimiento se realiza hasta que cada uno de los mdulos realicen tareas
especficas. Estas pueden ser entrada, salida, manipulacin de datos, control de otros
mdulos o alguna combinacin de stos. Puede ser que un mdulo derive el control a
otro mediante un proceso denominado bifurcacin, pero se debe tomar en cuenta que
esta derivacin deber ser devuelta a su mdulo original.
En cuanto a la seguridad podemos decir que los mdulos son independientes, de modo
que ningn mdulo puede tener acceso directo a cualquier otro mdulo, excepto el
mdulo al que llama y sus submdulos correspondientes. Sin embargo, los resultados
producidos por un mdulo pueden ser utilizados por otro mdulo cuando se transfiera a
ellos el control.
Dada la ventaja de ser independientes el programa puede ser trabajado por diferentes
programadores a la vez. Con sto se ahorra tiempo en el diseo del algoritmo y en su
posterior codificacin. Tambin un mdulo puede ser codificado sin afectar a los dems,
incluso sin alterar su funcin principal.
RAIZ
Programacin Modular
3. PROGRAMACION ESTRUCTURADA
Cuando hablamos de Programacin Estructurada, nos referimos a un conjunto de
tcnicas que con el transcurrir del tiempo han evolucionado. Gracias a stas, la
productividad de un programa se ve incrementada de forma considerable y se reduce el
tiempo de escritura, de depuracin y mantenimiento de los programas. Aqu se hace un
nmero limitado de estructuras de control, se reduce la complejidad de los problemas y
se minimiza los errores.
Gracias a la programacin estructurada, es ms fcil la escritura de los programas,
tambin lo es su verificacin, su lectura y mantenimiento. Esta programacin es un
conjunto de tcnicas que incorpora:
RAIZ
secuenciales
selectivas
repetitivas
Podemos definir un programa como propio si cumple con las siguientes caractersticas:
- Tiene un solo punto de entrada y uno de salida o fin de control del programa.
- Existen caminos desde la entrada hasta la salida que se pueden seguir y que
pasan por todas partes del programa.
- Todas las instrucciones son ejecutables y no existen lazos o bucles infinitos
(sin fin).
4. ESTRUCTURA SECUENCIAL
Es la estructura en donde una accin (instruccin) sigue a otra de manera secuencial.
Las tareas se dan de tal forma que la salida de una es la entrada de la que sigue y as en
lo sucesivo hasta cumplir con todo el proceso. Para la realizacin de esta estructura
secuencial nos apoyamos en unas estructuras a las que llamaremos Estructuras de
Control.
Las Estructuras de Control determinan la secuencia en que deben ejecutarse las
instrucciones de un algoritmo.
Secuencia:
La estructura de control ms simple es la secuencia.
Esta estructura permite que las instrucciones que la
constituyen se ejecuten una tras otra en el orden en que
se listan. Por ejemplo, considrese el siguiente
fragmento de un algoritmo:
En este fragmento se indica que se ejecute la
operacin 1 y a continuacin la operacin 2.
5. ESTRUCTURAS SELECTIVAS
Es de gran utilidad la especificacin formal de los algoritmos, para cuando ste requiera
una descripcin ms complicada que una lista sencilla de instrucciones. Este es el caso
cuando existe un nmero de posibles alternativas que resulten de la evaluacin de una
determinada condicin.
Este tipo de estructuras son utilizadas para tomar decisiones lgicas, llamndose por
esta razn estructuras de decisin o alternativas.
En esta estructura es evaluada una condicin y de acuerdo al resultado el algoritmo opta
por una de las alternativas. Las condiciones son especificadas utilizando expresiones
lgicas. Para representar una estructura selectiva se hace uso de palabras en
pseudocdigo.
Inicio
En espaol:
Si<condicin>
Variables
Entonces<accin S1>
Fin_si
F
Cond.
En Ingls:
If<condicin>
Then <accin S1>
End_if
V
Accin S1 S1
Alternativa Simple
Variables
En espaol:
Si <condicin>
V entonces <accin S1>
Alternativa Doble
sino <accin S2>
fin_Si
F
En Ingls:
Accin
If <condicin>
Accin then<accin>
else<accin S2>
end_if
Esta estructura evaluar una expresin que podr tomar n valores, distintos todos 1, 2,
3, 4,.., n. Se realizar una de las n acciones de acuerdo a la eleccin de uno de estos
valores, o lo que es igual el flujo del algoritmo seguir un determinado camino entre los
n posibles.
En espaol:
Inicio Segn_sea expresin (E) hacer
e1: accin S1
accin S2
.
.
segn e2: accin S21
accin S22
.
.
en: accin S31
accin S32
S1 S2 S3 S4 S5
otros: accin Sx
fin_segn
Alternativa mltiple
En Ingls:
Case expresin of
[e1]: accin S1
[e2]: accin S2
.
.
[en]: accin Sn
otherwise
accin Sx
end_case
6. ESTRUCTURAS REPETITIVAS
El diseo de las computadoras est hecho especialmente para aquellas aplicaciones en
las que una operacin o conjunto de operaciones deben repetirse muchas veces. Para
ello es importante la estructura del algoritmo, necesario para repetir una o varias
acciones, un nmero determinado de veces.
Ciclo Mientras:
En este ciclo se repite una operacin, mientras se cumpla una cierta condicin. Por
ejemplo:
Bucles Infinitos
En algunas ocasiones los bucles no exigen final y en otras, no tienen fin por errores en
su diseo. Los programas o bucles corrern siempre o mientras la mquina est
encendida, e incluso habrn situaciones en las que nunca se cumpla la condicin, eso
significa que el bucle no se detendr nunca. A estos bucles se les llama bucles sin fin o
infinito, y por su condicin deben evitarse siempre, por que afectan en forma perjudicial
a la programacin.
Ciclo Repetir:
En este ciclo se ejecuta una operacin hasta que se cumpla una condicin.
Ciclo Desde:
En este ciclo se ejecuta una operacin un cierto nmero de veces, especificando en un
contador el incremento unitario, desde un Valor Inicial hasta un Valor Final que
marcar la condicin de salida del ciclo. Por ejemplo:
En ciertas ocasiones es necesario contar con una estructura repetitiva que permita la
salida de un punto intermedio del bucle al cumplirse una condicin. Slo algunos
lenguajes de programacin especficos pueden disponer de esta estructura. Deber tener
un nombre que la diferencie de la instruccin repetir_hasta, la que ya es conocida y se
llama salir_si o iterar. Estas salidas pueden ser vlidas para las estructuras mientras,
repetir y desde.
Siendo su formato el siguiente:
repetir
<acciones>
Salir_si <condicin> entonces salir bucle
<acciones>
fin_repetir
Una estructura selectiva mltiple estar conformada de una serie de estructuras si, unas
dentro de otras. Se puede utilizar indentacin (sangra o sangrado), para evitar
complejidad y as el algoritmo sea ms claro, creando una correspondencia entre
palabras reservadas si y fin_si, por un lado y entonces y sino, por otro.
De acuerdo al lenguaje con que se est trabajando, la escritura de las estructuras puede
variar en unos y en otros.
Siendo goto una instruccin ha causado ciertos problemas, por lo que en muchas
ocasiones se ha considerado a la instruccin como nefasta y perjudicial para los
programadores, recomendando su no uso en sus algoritmos y programas.
Tomando en cuenta que ir_a(goto) es una instruccin que todos los lenguajes de
programacin tienen dentro de sus instrucciones, existiendo muchos que dependen ms
de ellos que otros, tales como BASIC Y FORTRAN. Los programas que hacen uso de
sta instruccin pueden ser escritos nuevamente para hacer lo mismo, sin necesidad de
recurrir a la instruccin ir_a. Pues es mucho ms difcil leer un programa que utiliza
instrucciones ir-a, que un programa bien escrito que no usa estas instrucciones, o si las
usa son muy pocas, ya que muy pocas veces suelen ser tiles.
Los problemas a resolver por medio de este mtodo, deben seguir un determinado
nmero de pasos:
M
M
P
N P
Secuencial Repetitiva
O O O O
N P Q R
Alternativa
Estructuras Bsicas:
Fin Inicio
programa programa
secuencial
Este mtodo est basado en la descomposicin por niveles del problema. En cada nivel
los tratamientos son explicados de forma clara para la resolucin del problema
planteado. Las estructuras que se usan en esta metodologa son idnticas a las que se
usan en el mtodo de Jackson, aunque su representacin puede variar.
Estructuras Bsicas:
Secuencial A Inicio
Proceso A
Repeticin
Inicio
(ejecucin 1 vez)
Proceso programa
(n veces)
Fin
(1 vez)
Fin
Inicio
Alternativa
Inicio
cond
(1 vez)
Proceso A
(0-1 Vez) Proceso A Proceso B
Proceso B
(0-1 vez)
Final
Fin
CAPTULO V.
PROGRAMACION ORIENTADA A OBJETOS
INTRODUCCION
En los ltimos aos la frase orientado (a) a objetos, se ha vuelto muy popular,
escuchndose a cada momento frases como sistemas operativos orientados a objetos,
lenguajes orientados a objetos, programacin orientada a objetos (POO), etc. Sin
embargo, el concepto ya tiene un tiempo de aproximadamente 25 aos, cuando se dio su
nacimiento con la creacin del lenguaje Simula. Su redescubrimiento y reciente
popularidad se deben a C++, lenguaje que fue creado por Stroustrup y fue basado en un
lenguaje que es usado ampliamente como C. En esta parte se dar a conocer los
principales conceptos ms ntimamente relacionados con la POO, as como la forma de
implementarlos en C++.
1. ABSTRACCION:
Es una descripcin o especificacin simplificada de un sistema que hace nfasis en
algunos detalles significativos y suprime los irrelevantes.
La abstraccin debe enfocarse ms en qu es un objeto y qu hace antes, de pensar en la
implementacin. Por ejemplo, un automvil puede abstraerse como un objeto que sirve
para desplazarse a mayor velocidad, sin importar cmo lo haga.
2. ENCAPSULAMIENTO:
Tpicamente, la informacin acerca de un objeto est encapsulada por su
comportamiento. Esto significa que un objeto mantiene datos acerca de cosas del mundo
real a las que representa en su sentido verdadero.
Tpicamente a un objeto se le debe pedir o decir que cambie sus propios datos con
un mensaje, en vez de esperar que tales datos de procesos extremos cambien la
naturaleza de un objeto.
Siguiendo con el ejemplo del automvil, se sabe que existen diversos mecanismos para
que funcione ste, en particular se tiene el sistema de frenado que todo mundo sabe que
sirve para detener el auto al pisar el pedal de freno, pero slo el mecnico sabe los
detalles de la implementacin. Por otro lado, si en algn momento se cambia, para el
conductor es transparente.
3. MODULARIDAD:
La modularidad consiste en dividir un programa en partes llamadas mdulos, los cuales
pueden trabajarse por separado. En trminos de programacin, los mdulos pueden
compilarse por separado y la divisin no depende de cierto nmero de lneas sino es una
divisin en trminos de integrar en un mdulo un conjunto de procedimientos
relacionados entre s, junto con los datos que son manipulados por tales procedimientos.
El objetivo de la modularidad es reducir el costo de elaboracin de programas al poder
dividir el trabajo entre varios programadores.
Por ejemplo, un automvil est constituido por un conjunto de mdulos tales como un
sistema elctrico, uno mecnico y uno de frenado. Cada mdulo se trabaja por separado
y el especialista slo conoce la forma en que se relaciona el mdulo con los otros, pero
no tiene por qu saber los detalles de funcionamiento de otros mdulos o sistema.
4.CLASES Y OBJETOS
A pesar de que el punto central en esta nueva metodologa de programacin es el
concepto de objeto, resulta difcil tratar de definirlo. En un diccionario se puede
encontrar la siguiente definicin:
Un objeto es cualquier cosa que se ofrece a la vista y afecta los sentidos. Es una entidad
tangible que exhibe algn comportamiento bien definido.
En trminos de programacin, un objeto no es necesariamente algo tangible (por
ejemplo: un proceso). Lo que s puede decirse de todo objeto es que tiene estado,
comportamiento e identidad.
La clase representa la esencia del objeto y l es una entidad que existe en el tiempo y el
espacio. El objeto se define tambin como instancia de la clase a que pertenece. La
clase tiene dos vistas: la exterior, en la cual se hace nfasis en la abstraccin y se oculta
en la estructura y secretos de comportamiento, y la vista interior o implementacin.
Aqu se nota que es indispensable hacer uso del concepto de encapsulacin.
Ejemplo:
Class {
Private:
// Representacin de los objetos de esta clase.
Public:
// Declaracin de los mtodos que entienden
// los objetos de esta clase
protected:
// elementos que heredan las clases derivadas de sta
};
En la seccin privada de una clase usualmente se definen las estructuras de datos con la
que se representar el objeto, y algunos mtodos que se emplearn en la definicin de la
interfaz.
Los datos y mtodos aqu definidos no pueden ser accesados directamente fuera de la
implementacin de la interfaz.
Funciones de acceso, las cuales regresan abstracciones con significado acerca de una
instancia y funciones de transformacin, las que llevan a una instancia de un estado
vlido a otro.
El ocultamiento de datos implica que todos los datos dentro de una clase deben ser
privados a ella, sto garantiza que la interfaz es una abstraccin.
Ejemplo:
//definicin de la clase contador. Archivo contador.h
class contador {
private:
unsigned int valor;
public:
contador ( ) ;
void incrementa ( ) ;
void decrementa ( ) ;
unsigned int accesa_valor ( ) ;
};
En este caso se define que cada objeto de la clase contador es un entero sin signo y que
tal objeto puede incrementar, decrementar y accesar su valor. Antes de mostrar la
implementacin, es conveniente recalcar que nadie, excepto el implementador de esta
clase, sabe cul es la representacin interna de los objetos de esta clase, por eso se pone
en la seccin private. Otro aspecto que se debe resaltar es, que dentro de los mtodos
existe uno cuyo nombre es idntico al de la clase, este mtodo se conoce como
constructor y se invoca automticamente al crear un objeto de esta clase.
contador::contador ( ) {
valor = 0;
}
void contador::decrementa ( ) {
if (valor<MAXIMO) valor ++;
}
Ejemplo:
Void contador::decrementa ( ) {
If (valor>0) valor -- ;
}
Ejemplo
//Programa de prueba que usa la clase contador
#include <STDIO.H
#include ``contador.h''
main ( ) {
contador c1, c2;
int i;
Es posible que se piense que es tomarse demasiadas molestias para crear un contador,
pero al crearlo como objeto se evitan incongruencias como tt i = 1000 + c1;} es decir,
mezclar un contador con cualquier variable entera, como podemos hacer en la
programacin tradicional.
Ejemplo:
//Interfaz de la pila
class pila {
private:
int tamano max;
int tope;
char * p;
public:
pila(int tamano);
pila(void);
pila(int tamano, char str[]);
void push (char c) ;
int pop () ;
\~{}pila() ;
};
Ejemplo:
Implementacin de la pila
pila::pila(int tamano) {
void pila::push(char c)
{ ... }
int pila::pop()
{ ... }
pila ::{}pila(void) { delete p; }
En este caso se tienen tres posibilidades de constructores: sin parmetros, con un entero
que represente el tamao de la pila y con el tamao y valor inicial de la pila. Esto
permite tener ms opciones al crear pilas.
En este caso p1 es una pila de 100 elementos, p2 de 20 y p3 de 5 con valor cada uno de
los caracteres de la cadena ``Hola''.
El destructor es slo uno y tiene como nombre el mismo que la clase, pero precedido
por una tilde. Este mtodo se invoca automticamente al salir del alcance donde se crea
el objeto, y su funcin es liberar el espacio de memoria solicitado para tal objeto en la
creacin del mismo.
5. HERENCIA
La herencia define relaciones entre clases, donde una clase comparte la estructura o
comportamiento definidos en una o ms clases.
Persona: Profesor:
char*ap_paterno; char*ap_paterno;
char*ap_materno; char*ap_materno;
char*nombre; char*nombre;
char*calle_num; char*calle_num;
char*ciudad; char*ciudad;
char*edo; char*edo;
char*cp; char*cp;
char*depto;
float sueldo;
Estudiante: Pasante:
char*ap_paterno; char*ap_paterno;
char*ap_materno; char*ap_materno;
char*nombre; char*nombre;
char*calle_num; char*calle_num;
char*ciudad; char*ciudad;
char*edo; char*edo;
char*cp; char*cp;
char*carrera; char*carrera;
long num_cta; long num_cta;
int semestre; int semestre;
char*tesis;
int avance;
Ejemplo:
Class persona
Private:
Char * ap_paterno;
Char * ap_materno;
Char * nombre;
Char * calle_num;
Char * ciudad;
Char = edo;
Char = cp;
Public:
Uso del mecanismo de herencia, en la definicin de la clase se pone despus del nombre
de la clase de la cual es heredera. La palabra public indica que los objetos de la clase
derivada pueden usar todos los mtodos de sus padres a menos que stos se redefinan en
la clase derivada.
Ejemplo:
class pasante : public estudiante {
char *tesis;
int avance;
public:
pasante ( ) : ( ) { }
void inserta_tesis (char *s);
void inserta_avance (int a);
void imprime ( );
}
Ejemplo:
class profesor :public persona {
private:
char *depto;
float sueldo;
public:
profesor ( ) : ( ) { }
void inserta_depto (char*d) ;
void inserta_sueldo (float s);
void imprime ( );
};
6. POLIMORFISMO
class contador {
private:
unsigned int valor;
public:
contador ( ) ;
void operator ++ ( ) ;
void operator -- ( ) ;
unsigned int operator ( ) ( ) ;
El operador ( )
};
La implementacin de las operaciones es igual que antes, slo cambia el encabezado
para indicar que se trata de un operador.
#include "cont2.h"
contador::contador ( ) {
valor = 0;
}
void contador::operator ++ ( ) {
if (valor < 65535) valor++;
}
void contador::operator -- ( ) {
if (valor > 0) valor --;
}
unsigned int contador::operator ( ) ( ) {
return valor;
}
main ( ) {
contador c1, c2;
int i;
for (i = 1; i < 15; i++) {
c1++;
printf("\nc1 = %u ", c1( ) );
c2++;
}
class figura {
public:
virtual void dibuja (void) = 0;
};
class circulo : public figura {
public:
void dibuja(void);
};
class cuadro : public figura {
public:
void dibuja(void);
};
class linea : public figura {
public:
void dibuja(void);
};
//Implementacion de las tres clases derivadas de FIGURA
#include "polim.h"
void circulo::dibuja(void) {
cout <<" 00";
cout <<" 0 0";
cout <<" 00";
}
void cuadro::dibuja(void) {
cout <<" +---+";
cout <<" | |";
cout <<" +---+";
}
Ejemplo
CONCLUSIN
BIBLIOGRAFA
Fundamentos de Programacin.
Luis Joyanes Aguilar.
McGRAW HILL/INTERAMERICANA DE ESPAA S.A.
Meyer Bertran.
Happy 25 Anniversary Objects SIGSPublications. 1989.
Stroustrup, Bjarne.
The C++ Programming Language. Addison
WesleyPublishing Company. 1987.
Stroustrup, Bjarne.
What is Object Oriented Programming? IEEE Software. Mayo 1988.