Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Estructura de Datos y Programacion Basica (Algoritmos)
Estructura de Datos y Programacion Basica (Algoritmos)
e Informtica
Tcnicas de Programacin
______________________________________________________________________
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
Impreso en los talleres de la Oficina de Impresiones de la Oficina Tcnica de Difusin
Estadstica y Tecnologa Informtica del Instituto Nacional de Estadstica e Informtica
(INEI).
Edicin
Direccin, Redaccin y Talleres
Orden
:
: Av. General Garzn N 658 Jess Mara.
: 605 - 99 OI - OTDTI
Tcnicas de Programacin
PRESENTACION
Tcnicas de Programacin
Tcnicas de Programacin
CONTENIDO
9
9
11
11
15
15
16
16
16
16
16
17
17
25
25
25
26
26
26
27
27
27
28
28
29
29
29
29
29
30
30
31
32
32
Tcnicas de Programacin
34
34
34
34
34
35
36
37
37
37
37
38
38
38
39
39
39
39
41
41
42
42
43
43
43
44
44
44
45
45
45
46
46
47
47
48
49
49
50
50
50
51
51
52
53
Tcnicas de Programacin
55
55
55
55
56
56
61
63
Conclusiones
Bibliografa
67
68
Tcnicas de Programacin
Tcnicas de Programacin
TECNICAS DE PROGRAMACION
CAPITULO I.
ALGORITMOS Y PROGRAMAS
Hoy en da las personas sienten la necesidad de hacer uso de computadoras para
la solucin de problemas y, debido a sto, aprenden lenguajes y tcnicas de
programacin. Por eso para llegar a la solucin de un problema se deben dar los
siguientes pasos:
1.
2.
3.
4.
Tcnicas de Programacin
programa se escribe en lenguaje de programacin, y a la actividad de expresar un
algoritmo en forma de programa se llama programacin. El programa se rige de
instrucciones y normas siguiendo una secuencia lgica, que especifica operaciones que
debe realizar la computadora.
Dos conceptos Importantes:
HARDWARE : Grupo de componentes fsicos de la computadora (equipo
fsico).
SOFTWARE : Grupo de programas que controlan el funcionamiento de la
computadora (equipo lgico).
10
Tcnicas de Programacin
2. CONCEPTO DE ALGORITMO
Los programadores son, personas que resuelven problemas mediante el uso de
computadoras, y la prctica constante del conocimiento de las tcnicas de
programacin.
Un algoritmo es un mtodo para resolver un problema. Debe presentarse como una
secuencia ordenada de instrucciones que siempre se ejecutan en tiempo finito y con una
cantidad de esfuerzo tambin finito. Los algoritmos tienen un inicio y un final, son
nicos y deben ser fcilmente identificables.
Pasos a seguir para la solucin de problemas:
-
Sin algoritmo no podr existir un programa, por eso es necesario disear el algoritmo
previamente, para su realizacin.
En cada problema el algoritmo se puede expresar como un lenguaje diferente de
programacin y ejecutarse en una computadora distinta; sin embargo el algoritmo ser
siempre el mismo.
Los algoritmos son muy importantes, ya que de stos va a depender el buen
funcionamiento de un programa. Los lenguajes de programacin slo expresan lo que
un algoritmo quiere decir y las computadoras llevan a cabo la ejecucin.
11
Tcnicas de Programacin
Aqu algunos de ellos:
Multidocumento.
Datos almacenados.
Disco magntico.
Pantalla.
12
Tcnicas de Programacin
Ejemplo de un algoritmo:
Determinar la suma de los N primeros nmeros enteros de acuerdo a la siguiente
frmula:
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
13
Tcnicas de Programacin
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.
14
Tcnicas de Programacin
3. LOS LENGUAJES DE PROGRAMACION
Para la realizacin de un proceso, el procesador deber recibir el algoritmo adecuado,
siendo ste capaz de interpretarlo.
Entender las instrucciones que cada paso expresa.
Ejecutar las operaciones correspondientes.
El algoritmo se expresar por medio de un formato que se denomina programa. El
programa se desarrolla en un lenguaje de programacin y las operaciones que llevarn a
expresar un algoritmo en forma de programa se llaman programacin.
Existen importantes razones para el estudio de las Tcnicas de Programacin, y stas
son:
El desarrollo de algoritmos eficientes es una habilidad que se trata de
mejorar siempre.
Se busca la mejora en el uso del lenguaje de programacin disponible.
Enriquecer el vocabulario con construcciones tiles sobre programacin.
Tener la capacidad para elegir el mejor lenguaje de programacin.
Facilitar el aprendizaje de cualquier otro lenguaje.
Facilitar el diseo de un lenguaje nuevo.
Actualmente existen tres tipos de lenguaje utilizados:
Lenguaje de mquina.
Lenguaje de bajo nivel.
Lenguaje de alto nivel.
3.1 Instrucciones a la Computadora
Un algoritmo se compone de muchos pasos, todos
diferentes, los que son interpretados
como
instrucciones, sentencias o proposiciones. Cuando se
habla del trmino instruccin se est refiriendo a los
lenguajes mquina
y bajo nivel, tomando en
consideracin que las sentencias o proposiciones son
para los lenguajes de alto nivel. Entonces, en un
programa, la secuencia de instrucciones especifica las
operaciones que la computadora debe realizar.
Aqu se har referencia a los tipos fundamentales de
instrucciones que una computadora es capaz de manipular y ejecutar. En casi todos los
lenguajes de programacin las instrucciones bsicas y comunes pueden dividirse en
cuatro grupos:
Instrucciones de Entrada /Salida:
Transferencia de datos e
informacin entre dispositivos perifricos (teclado, impresora, unidad de
disco, etc.) y memoria central.
Instrucciones Aritmtico-Lgicas: Tienen la funcin de ejecutar
operaciones aritmticas (suma, resta, multiplicacin, divisin,
potenciacin), lgicas (operaciones and, or, not, etc.).
Instrucciones Selectivas: Estas permiten la seleccin de tareas
alternativas en funcin de los resultados de diferentes expresiones
condicionales.
Instrucciones Repetitivas: Permiten la repeticin de secuencias de
instrucciones, un nmero determinado o indeterminado de veces.
15
Tcnicas de Programacin
3.2 Lenguajes Mquina
Son lenguajes que estn expresados en lenguajes directamente intelegibles por la
mquina (computadora), siendo sus instrucciones cadenas binarias (cdigos binarios,
caracteres 0 y 1) que especifican una operacin.
Las instrucciones en lenguaje mquina dependen del Hardware de la computadora,
pues diferirn de una computadora a otra.
3.3 Lenguajes de Bajo Nivel
Son lenguajes ms fciles de usar que los lenguajes de mquina, pero tambin dependen
de la mquina en particular. El lenguaje de bajo nivel es por excelencia el
ensamblador (assembler language). Estas instrucciones son conocidas como
nemotcnicos (mnemonics).
3.4 Lenguajes de Alto Nivel
Estos son los ms usados por los programadores. Han sido diseados para que las
personas puedan escribir y entender de manera ms fcil los programas que los
lenguajes mquina y ensambladores.
Un lenguaje de alto nivel es totalmente independiente de la mquina, es decir que sus
instrucciones no dependen del diseo de la mquina. Lo que significa que los lenguajes
de alto nivel son portables o transportables, quiere decir que pueden ser ejecutados en
diferentes tipos de computadoras.
3.5 Traductores de Lenguaje
Son programas que traducen a su vez los programas fuente. Estos estn escritos en
lenguajes de alto nivel a cdigo de mquina.
Los traductores se dividen en:
Compiladores.
Intrpretes.
Lee y traduce instruccin por instruccin el programa fuente.
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.
3.6 Los Compiladores y sus frases
La compilacin es el proceso de traduccin de programas fuente a programas objeto. El
programa objeto no ha sido traducido normalmente a cdigo mquina sino a
ensamblador.
16
Tcnicas de Programacin
Debe hacerse uso de un programa montador o enlazador (linker) para obtener el
programa mquina real. Este proceso hace que un programa en lenguaje mquina sea
directamente ejecutable.
4. VARIABLES Y TIPOS DE DATOS PRIMITIVOS
El motivo principal de la computadora es, primordialmente, el manejo de los datos o de
la informacin ingresada para luego de procesarla arrojar los resultados. La
computadora opera con objetos, los cuales son descritos por expresiones denominados
datos. Son varios los tipos de datos con los que la computadora puede trabajar.
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.
Los tipos de datos que existen son dos: Simples y Compuestos
4.1 Datos Numricos: Se llama as al conjunto de valores numricos y son
representados de distintas formas:
- Tipo de dato numrico entero (integer):
El tipo entero es un subconjunto finito de los nmeros enteros. Los enteros se
forman con la representacin de 2 bytes, con el 1er bit del extremo izquierdo
como bit de signo, o sea (0) positivo y (1) negativo.
Ej:
5, 6, -15, 4, 2.480
17
Tcnicas de Programacin
donde b es la base del sistema de numeracin en cuestin. Como lo que
interesa es la forma de almacenar (representar) los datos en la computadora,
se utiliza el sistema de numeracin binaria. La magnitud del nmero 101112
es la suma de los trminos:
1x24 + 0x23 +1x22 + 1x21 +1x20
Ejemplo: Empleando el mtodo de representacin de enteros positivos visto,
mostrar cmo se almacenara el nmero 6 en la computadora. Asignando los
valores a cada bit de acuerdo a su posicin se observa que:
1x2 + 1x2 + 0x2 = 4 + 2 + 0 = 6 1102
Con respecto a los nmeros enteros negativos, para su representacin se hace
necesario establecer convenciones, como por ejemplo el mtodo de signo y
magnitud o el del complemento.
Signo y Magnitud: Los smbolos (+, -) deben escribirse precediendo a la
magnitud del nmero. Para su representacin en la computadora, por lo
general se usa dgitos binarios de extrema izquierda para denotar el signo y
los restantes se utilizan para la magnitud.
Nmero Positivo
0
1
2
3
Signo y Magnitud
1 000
1 001
1 010
1 011
Para evitar que el cero se duplique, generado por el bit de signo se suele
ocupar la notacin por complemento a dos.
Complemento a 2 = 2n - |nmero|, donde nmero est en base 2 y n es la
cantidad de dgitos binarios de la representacin.
Ejemplo: representar el nmero 4 en base 10 como negativo en complemento
a 2 utilizando 4 bits.
4 = 0100
-4 = 10000 0100 = 1100
o tambin, si manejar operaciones con dgitos binarios se pueden tomar los
valores decimales y al resultado final se pasa a como lo representara la
computadora, es decir:
-4 = 24 - |4|
-4 = 16 4 = 12 ! 11002
-
18
Tcnicas de Programacin
se ha tomado en cuenta que cuando se quieren hacer aplicaciones cientficas
se debe tener una representacin especial, las que nos permitir manejar
nmeros o cantidades grandes, como por ejemplo cuando se quiere calcular
la masa de la tierra o como para calcular la masa de un electrn. La
representacin de los nmeros es limitada ya que slo se pueden representar
nmeros que tengan como mximo ocho dgitos, provocando problemas a la
hora de representar o almacenar nmeros grandes o nmeros muy pequeos.
Ej:
7877377558797 0.70548058505725
mantisa
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.
19
Tcnicas de Programacin
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.
Paso1. Parte entera (por divisiones)
123
B
16
123(10) = 7B(hex)
7
0.025 * 16 = 0.4
0.4 * 16 = 6.4
0.4 * 16 = 6
.....
(i)
20
Tcnicas de Programacin
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
usando un bit para el signo, bm bits para la mantisa, y el resto, (L -bm-1)
bits, para el exponente desplazado (o sumado) una cantidad constante EX
denominada exceso. El exceso es utilizado para considerar exponentes
positivos y negativos.
(bm), da la precisin de la representacin elegida; en efecto, significa el
nmero de dgitos significativos en base 2: dos nmeros con iguales
partes hasta el bit bm e iguales exponentes son considerados iguales.
NOTA: Por convenio, el nmero 0.0 es representado en memoria
exclusivamente con bits 0:
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
En este caso, en la mantisa normalizada se omite el primer bit (pues
siempre es 1) y en su lugar se almacena el bit de signo:
8 bits 1 bit
e + 80 s
23 bits
mantisa normalizada sin primer bit
1 bit
1
23 bits de mantisa
111 0110 0000 1100 1100 1101
bit de signo reemplaza al primer bit de la mantisa
21
Tcnicas de Programacin
En este formato se conviene en redondear la mantisa resultante: se le
suma 1 si la parte truncada empieza con 1, como en efecto se ha hecho en
el presente caso
2. El computador IBM 370 representa los nmeros de coma flotante con
32 bits, en la forma:
- Un bit de signo.
- Exponente (7bits) con exceso a 64 = 44 (hex)
- Mantisa normalizada de 24 bits.
- Base 16
As, los 8 primeros bits contienen el signo y el exponente desplazado:
2 dig. Hex.
1 bit 7 bits
s
6 dig. Hex.
24 bits
e + 44
mantisa normalizada
7 bits
6 dig. hex.
2 + 44h 7B0666
46h
100 1100
bit de signo, el byte completo es: 1 100 1010 = C6
Luego, C6 7B 06 66
Tambin se aplica el mtodo de redondeo: Simplemente se suprime la parte
truncada: 666 ....
Pues 6 = 0110 empieza con 0.
3. Turbo Pascal (para IBM PC y compatibles) utiliza 6 bytes (48 bits) para
representar los nmeros de tipo REAL:
8 bits 1 bit
e +80h s
39 bits
mantisa normalizada, sin primer bit
con base 2.
Ejemplo: El nmero 123.025(10) se representa como REAL.
En Turbo Pascal por: 87 F6 0C CC CC CC
(usando dgitos hexadecimales)
22
Tcnicas de Programacin
Este mtodo no utiliza redondeo.
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:
1 bit
s
8 bits
23 bits
e + 7Eh mantisa normalizada, sin primer bit
siendo base 2
Ejemplo:
Aplicar este formato:
Como en el ejemplo 1 se tiene:
-0.1111 0110 0000 1100 1100 1100 1100 .......* 2
23 bits
parte truncada
23
Tcnicas de Programacin
c. Se normaliza la mantisa obtenida en b.
Para la sustraccin, se modifica el paso b):
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.
La operacin de multiplicacin (resp. divisin) es ms sencilla:
- El signo es + si ambos tienen iguales signos, o - de otra manera
- La mantisa es el producto (resp. cuociente) de las mantisas
- El exponente es la suma (resp. diferencia) de los exponentes.
- Al final hay que normalizar la mantisa resultante.
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.
Rpta. 25.0, 120.0
Indicacin (primer factor)
Exponente = 85 80 = 5
Signo dado por C = 1100
Suprimiendo el signo y reponiendo el primer bit 1 suprimido:
8
0
0
0
0
0
0
0
0
(hex)
1 100 1000 0000 0000 0000 0000 0000 0000 0000 0000 (bin)
Luego el nmero en base 2 es:
5
-0.11001 * 2 = - 11001
que es 25.0 en el sistema decimal.
24
Tcnicas de Programacin
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.
Cada caracter es representado por un patrn de bits diferente que lo identifica, el
nmero de bits para representar un caracter est determinado por el cdigo utilizado.
Los distintos tipos de mquinas han generado cada una su propio juego de caracteres. El
ms comn hasta hace poco era el ASCII, en los ltimos tiempos Windows ha
cambiado al cdigo OEM, y con Windows 95 nos encontramos con UNICODE.
Como quiera que sea, los caracteres han conservado una herencia dada por ASCII y
EBCDIC.
Si 8 bits son usados para representar cada carcter, y la longitud de la palabra de
memoria es mayor, es ineficiente almacenar un caracter por palabra. En este caso
varios caracteres son almacenados en una palabra.
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.
Otros ejemplos de cadenas:
hola Rebeca
28 de Julio de 1821
Sr. Alvarado
25
Tcnicas de Programacin
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:
-
aritmticas
relacionales
lgicas
caracter
26
Tcnicas de Programacin
6.2. Reglas de Prioridad
Cuando existen expresiones que tienen ms de dos operandos, se requiere de reglas
matemticas que permitan determinar el orden de las operaciones y stas, son reglas de
prioridad o precedencia y son:
-
27
Tcnicas de Programacin
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.
9. ENTRADA Y SALIDA DE INFORMACION
El ingreso de datos es importante para que la computadora realice los clculos; esta
operacin es la entrada, luego, estos datos se convertirn en resultados y sern la salida.
A la entrada se le conoce como operacin de Lectura (read). Esta operacin de lectura
se realiza a travs de los dispositivos de entrada que son (teclado, unidades de disco,
CD-Rom, etc.). La operacin de salida se realiza por medio de dispositivos como
(monitor, impresora, etc), a esta operacin se le conoce como escritura (write).
28
Tcnicas de Programacin
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:
-
29
Tcnicas de Programacin
Estos tienen las siguientes propiedades:
1. Debern seguir una secuencia definida por pasos hasta obtener un
resultado distinto.
2. Podrn ejecutarse cada vez que se requiera para distintos datos.
Ejemplo:
Queremos determinar la cantidad total de llamadas a pagar en la empresa telefnica,
teniendo en cuenta los siguientes aspectos:
1. Cada llamada es de cinco minutos y stas tienen un costo de 0.60 Nuevos
Soles.
2. Pasados los tres minutos por llamada, cada minuto que se adicione tendr un
costo de 0.30 Nuevos Soles.
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:
30
Tcnicas de Programacin
4. Lenguaje espaol.
5. Frmulas.
5.1 Diagrama de flujo
Esta es una de las tcnicas ms antiguas y de mayor uso, pero hoy su utilizacin ha
disminuido con la aparicin de los lenguajes estructurados. Un diagrama de flujo hace
uso de smbolos estndar que estn unidos por flechas, que tienen una secuencia en que
se deben ejecutar. En los diagramas de flujo del sistema se representan operaciones
manuales y automticas con diferentes dispositivos del sistema informtico.
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
En la representacin
grfica del ejemplo de
la seccin 3.1 ser la
siguiente:
Variables:
NPASOS : Nmero de
pasos de la llamada.
N : Nmero de pasos
que exceden de cinco.
FACT : Importe total de
la llamada.
1
Leer
Nmins
Nminut
<=0
Hacer
IMP = 0.60
N=Nminut-5
N>0
escribir
ERROR
Minut >0
Hacer
IMP=IMP+N*5
Escribir
Nminut.
IMP
fin
31
Tcnicas de Programacin
Ejemplo: 2
Se desea realizar 100 facturas para cien clientes. El diagrama de flujo sera el siguiente:
Solucin:
Inicio
I=1
I >100?
NO
SI
fin
Realizar
nueva
factura
I = I+1
32
Tcnicas de Programacin
Ejemplo de un Pseudocdigo:
1.
2.
3.
4.
inicio
establecer CONTADOR a 1
establecer SUMA a 0
mientras CONTADOR < 100 hacer lo siguiente
4.1 sumar CONTADOR a SUMA
4.2 incrementar CONTADOR en 1
5. Visualizar suma
Bifurcaciones:
Bucles:
Funciones:
procedure nombre(argumentos)
Diseo modular:
33
Tcnicas de Programacin
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
2. CONSTITUCION DE UN PROGRAMA Y SUS PARTES
Un programa debe contener un conjunto de especificaciones las que deben ser
establecidas por el programador, stas son: entrada, salida y algoritmos de resolucin
que tendrn las tcnicas para obtener las salidas a partir de las entradas.
El algoritmo de resolucin o caja blanca como se le conoce, es en realidad el conjunto
de cdigos que transforman las entradas del programa (datos), en salidas (resultados).
Las entradas al programa deben ser establecidas por el programador. Las entradas se
darn por medio de un dispositivo de entrada, puede ser teclado, disco, telfono, etc., a
este proceso se le conoce como entrada de datos, operacin de lectura o accin de
leer.
Las salidas de datos se presentan en dispositivos perifricos de salida, puede ser
pantalla, impresora, discos, etc. La operacin de salida de datos se conoce tambin
como escritura o accin de escribir.
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:
34
Tcnicas de Programacin
-
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.
La instruccin de escritura de resultados (salida). Estas se escriben en un dispositivo
de salida.
Instrucciones de bifurcacin. Cuando se ejecuta esta instruccin un programa detiene
su desarrollo lineal. Las bifurcaciones pueden ser hacia delante o hacia atrs, segn el
punto del programa donde se bifurca. Las bifurcaciones en el desarrollo de un programa
sern de modo condicional, de acuerdo al resultado de la evaluacin de la condicin.
Bifurcacin incondicional. Esta se realiza siempre que el flujo del programa pase por
la instruccin sin necesidad del cumplimiento de ninguna condicin.
Bifurcacin condicional: Esta depende de que se cumpla una condicin determinada.
La estructura de bifurcacin condicional permite elegir una de dos opciones en una
alternativa, dependiente del resultado obtenido al evaluar la condicin. Vase el
siguiente fragmento de algoritmo:
La palabra clave
"s" indica que estamos en
una
sentencia
de
bifurcacin condicional. Si
la condicin es verdadera
se ejecuta la operacin 1,
de otro modo se ejecuta la
operacin 2.
35
Tcnicas de Programacin
-
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.
Estos elementos son:
- bucles
- contadores
- acumuladores
- interruptores
- estructuras
secuenciales
selectivas
repetitivas
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
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
36
Tcnicas de Programacin
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
Accin S1
Condi.
NO
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).
37
Tcnicas de Programacin
Grfico de una condicin:
=1
SW?.
Accin S1
=0
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.
Existen varias maneras de representar algoritmos, la ms evidente es el lenguaje natural;
sin embargo, no siempre es lo suficientemente preciso. Como alternativas tenemos al
Pseudocdigo y el Diagrama de Flujo.
Un algoritmo est constituido por dos componentes: Una cabecera de programa y un
bloque algoritmo.
El pseudocdigo es una manera de representar un algoritmo, mediante sentencias
similares al lenguaje natural, pero tienen una precisin mayor.
6.1 Cabecera del programa o algoritmo
Existen pasos o procedimientos que se realizan para comenzar un programa.
Siempre que se haga debe ponerse un encabezado de programa, en donde debe
expresarse el identificador o nombre correspondiente con la palabra reservada
que seale el lenguaje, generalmente sta suele ser program que en algoritmia
significa algoritmo.
6.2 Declaracin de Variables
En este punto se describen todas las variables que son usadas en el algoritmo,
haciendo una lista de sus nombres y especificando a qu tipo corresponde cada
uno. En esta seccin se comienza con la palabra reservada var (abreviatura de
variable) y es de la forma
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).
Sera lo ms recomendable en la prctica de programacin el uso de nombres de
variables cuyo significado nos sugieran lo que ellos representan, eso har al programa
38
Tcnicas de Programacin
ms fcil de entender. Tambin la inclusin de breves comentarios que indiquen cmo
se usa la variable, es una buena prctica.
6.3 Declaracin de Constantes Numricas
En este punto se declararn todas las constantes de carcter estndar; es decir, que
tengan nombre y un valor ya conocido o valores que ya no pueden variar en el
transcurso del algoritmo.
Por ejemplo:
const
Pi =3.141592
Tamao = 43
Horas = 6.50
El valor de cada una de estas constantes ser completamente invariable.
6.4 Declaracin de Constantes y Variables caracter
Las constantes de caracter simple y de cadenas de caracteres se pueden declarar en la
seccin del programa const, igualmente sucede con las constantes numricas.
Const
castillo = *
frase = el caballo es blanco
mensaje = te veo luego
Las variables de caracter se declaran de dos modos:
Almacenando un solo caracter.
Var nombre, inicial, nota: carcter
Se declaran nombre, inicial, nota y letra quien solamente almacenar un
caracter.
Almacenando mltiples caracteres (cadenas).
El almacenamiento de caracteres mltiples va a depender del lenguaje de
programacin en que se est trabajando. Entonces, en:
BASIC nombre variable cadena = cadena de caracteres
NOMBRES = Luis Ricardo Alvarez Carrasco
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.
6.6 Estilo de escritura de algoritmos/programas
Un mtodo para escribir algoritmos ser el siguiente:
Algoritmo identificador
{seccin de declaraciones}
{cabecera}
39
Tcnicas de Programacin
var lista de identificadores: tipo de datos
const lista de identificadores = valor
inicio
<sentencia S1>
<Sentencia S2>
.
.
<Sentencia Sn>
fin
Debemos Recordar:
-
40
Tcnicas de Programacin
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:
-
41
Tcnicas de Programacin
1. INTRODUCCION A LA PROGRAMACION ESTRUCTURADA
Actualmente, dado el tamao considerable de las memorias centrales y las altas
velocidades de los procesadores, la forma de escritura de los programas ha sido
considerada una de las caractersticas ms sobresalientes en las tcnicas de
programacin. El entendimiento de los algoritmos y luego de los programas, exige que
su diseo sea fcil de comprender y su flujo lgico un camino fcil de seguir.
La descomposicin de programas en mdulos ms simples de
programar se dar a travs de la programacin modular, y la
programacin estructurada permitir la escritura de programas
fciles de leer y modificar. En un programa estructurado, el flujo
lgico se gobierna por las estructuras de control bsicas.
1.
2.
3.
Secuenciales.
Repetitivas.
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.
Los programas contienen un mdulo denominado mdulo principal, el cual supervisa
todo lo que sucede, transfiriendo el control a submdulos (los que son denominados
subprogramas), para que puedan realizar sus funciones. Sin embargo, cada submdulo
devolver el control al mdulo principal una vez completada su tarea. Si las tareas
asignadas a cada submdulo son demasiado complejas, se proceder a una nueva
subdivisin en otros mdulos ms pequeos an.
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.
42
Tcnicas de Programacin
RAIZ
Mdulo 1
Mdulo 11
Mdulo 2
Mdulo 12
Mdulo 3
Mdulo 21
Programacin Modular
43
Tcnicas de Programacin
3.1 Recursos Abstractos
Los recursos abstractos son utilizados como un apoyo en la programacin estructurada,
en vez de los recursos concretos de los que se dispone (lenguaje de programacin
determinado).
Para disgregar un programa en trminos de recursos abstractos debemos descomponer
acciones complejas en acciones ms simples, las que son capaces de ejecutar o
constituyen instrucciones de computadora disponible.
3.2 Diseo descendente (Top-Down)
Este es un proceso en el cual el problema se descompone en una serie de niveles o pasos
sucesivos (stepwise). Esta metodologa consiste en crear una relacin entre las etapas
de estructuracin, las que son sucesivas, de tal forma que se interrelacionen mediante
entradas y salidas de informacin. Considerando los problemas desde dos puntos de
vista: que hace? y cmo lo hace?
RAIZ
MODULO 1
MODULO 2
MODULO 3
secuenciales
selectivas
repetitivas
Podemos definir un programa como propio si cumple con las siguientes caractersticas:
-
44
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).
Tcnicas de Programacin
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.
Existen tres Estructuras de control bsicas o primitivas, y combinndolas se puede
escribir cualquier algoritmo. Estas estructuras primitivas son: la secuencia, la
bifurcacin condicional y el ciclo.
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.
Las estructuras selectivas o alternativas pueden ser:
- Simples
- Dobles
- Mltiples
5.1 Alternativa simple (si-entonces/if-then)
La estructura alternativa simple si-entonces (en ingls if-then) lleva a cabo una accin al
cumplirse una determinada condicin. La seleccin si-entonces evala la condicin y
- si la condicin es verdadera, ejecuta la accin SI
- si la condicin es falsa, no ejecuta nada.
45
Tcnicas de Programacin
Inicio
En espaol:
Si<condicin>
Entonces<accin S1>
Fin_si
Variables
F
Cond.
En Ingls:
If<condicin>
Then <accin S1>
End_if
V
Accin S1 S1
Alternativa Simple
5.2 Alternativa doble (si-entonces-sino/if-then-else)
Existen limitaciones en la estructura anterior, y se necesitar normalmente una
estructura que permita elegir dos opciones o alternativas posibles, de acuerdo al
cumplimiento o no de una determinada condicin.
-
Variables
En espaol:
Si <condicin>
entonces <accin S1>
sino <accin S2>
fin_Si
Alternativa Doble
F
Accin
Accin
En Ingls:
If <condicin>
then<accin>
else<accin S2>
end_if
46
Tcnicas de Programacin
valores, o lo que es igual el flujo del algoritmo seguir un determinado camino entre los
n posibles.
Inicio
segn
S1
S2
S3
S4
S5
En espaol:
Segn_sea expresin (E) hacer
e1: accin S1
accin S2
.
.
e2: accin S21
accin S22
.
.
en: accin S31
accin S32
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.
Las estructuras que repiten una secuencia de instrucciones un nmero determinado de
veces se denominan bucles y, al hecho de repetir la ejecucin de una secuencia de
acciones se denomina iteracin.
6.1 Estructura mientras (while)
Esta estructura repetitiva mientras, es en la que el cuerpo del bucle se repite en tanto se
da una determinada condicin.
Los ciclos son estructuras de control que permiten ejecutar varias veces una operacin.
Existen varios tipos de ciclos:
Ciclo Mientras:
En este ciclo se repite una operacin, mientras se cumpla una cierta condicin. Por
ejemplo:
47
Tcnicas de Programacin
48
Tcnicas de Programacin
Ciclo Repetir:
En este ciclo se ejecuta una operacin hasta que se cumpla una condicin.
Ahora se ejecuta primero la operacin
y se verifica la condicin despus.
49
Tcnicas de Programacin
repetir
<acciones>
Salir_si <condicin> entonces salir bucle
<acciones>
fin_repetir
50
Tcnicas de Programacin
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.
10. METODOS DE PROGRAMACION ESTRUCTURADA
Existen diferentes mtodos de programacin estructurada. Entre los ms conocidos se
encuentran: Jackson, Bertini y Warnier.
10.1 Mtodo Jackson:
Esta es una metodologa creada por Michael Jackson de nacionalidad Inglesa. Esta
metodologa est basada en que estructuralmente el programa depende o se encuentra en
funcin de la estructura de los datos que se manejan. Michael Jackson se ayuda con la
implementacin de mdulos, siguiendo un orden jerrquico de acuerdo a los diferentes
niveles en que se encuentra. Cada mdulo se convierte en un dato o en un conjunto de
datos.
Las estructuras bsicas en este mtodo vienen representadas en el siguiente orden:
-
51
Tcnicas de Programacin
Estructuras Bsicas del mtodo de Jackson
M
Secuencial
Repetitiva
Alternativa
10.2 Mtodo Bertini:
Bertin aplic una metodologa que consisti en descomponer el problema en niveles.
Cada nivel tiene un inicio, una cantidad de procesos y un final. Esta metodologa
representa la estructura de los programas y no las operaciones del tratamiento.
De acuerdo con este mtodo el proceso de ejecucin de las instrucciones es de derecha a
izquierda, no hay problema si es que el programador quiere leerlo al revs, por que
puede hacerlo. El diagramas de flujo del problema anterior, de obtencin del mximo y
mnimo de una serie de nmeros, aplicando ste mtodo, sera el siguiente:
Estructuras Bsicas:
Fin
programa
Inicio
programa
secuencial
52
Tcnicas de Programacin
Acciones
Accin
A
Repetitiva
Accin
B
Alternativa
Secuencial
Secuencial
Inicio
Proceso A
Repeticin
Inicio
(ejecucin 1 vez)
Proceso
(n veces)
programa
Fin
(1 vez)
Fin
53
Tcnicas de Programacin
Inicio
Alternativa
Inicio
(1 vez)
Proceso A
(0-1 Vez)
Proceso B
(0-1 vez)
cond
Proceso A
Proceso B
Final
Fin
54
Tcnicas de Programacin
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++.
Se har mencin de los conceptos generales ms utilizados en el modelo orientado a
objetos, los cuales son: abstraccin, encapsulacin y modularidad. Y con respecto a
programacin, son: objeto, clase, mtodo, envo y recepcin de mensajes, herencia y
polimorfismo.
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.
Una caracterstica de la abstraccin es que un objeto puede abstraerse de diversas
formas, dependiendo del observador. As, el automvil que se mencionaba puede ser
visto como un objeto de coleccin por un coleccionista, una herramienta de trabajo por
un corredor profesional, una mercanca por un vendedor, etc.
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.
Al encapsular u ocultar informacin se separan los aspectos externos de un objeto (los
accesibles para todos) de los detalles de implementacin (los accesibles para nadie).
Con esto se trata de lograr que al tener algn cambio en la implementacin de un objeto
no se tengan que modificar los programas que utilizan tal 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.
55
Tcnicas de Programacin
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.
Estos conceptos no son exclusivos de la POO, pues se han desarrollado desde la
programacin estructurada, slo que en sta se pueden omitir, desde luego bajo
responsabilidad del programador, pues hacerlo, lleva a tener grandes programas en un
solo archivo y sin estructura alguna, lo cual causa grandes prdidas de tiempo al desear
modificar tal programa. La POO no puede lograrse sin hacer uso de los mecanismos
mencionados.
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.
El estado de un objeto abarca todas las propiedades o caractersticas distintivas del
mismo y los valores de cada una de estas propiedades. En trminos de programacin,
puede decirse que las propiedades son las variables que sirven para describir tal objeto.
El comportamiento es la forma como acta o reacciona un objeto en trminos de cambio
de estado, envo y recepcin de mensajes. Est formado por la definicin de las
operaciones (funciones y procedimientos) que puede realizar este objeto. Los tipos ms
comunes de operaciones, o en POO mtodos, son: modificar, seleccionar, iterar,
construir y destruir. El conjunto de operaciones que un objeto puede realizar sobre otro,
se conoce como protocolo.
Identidad es la propiedad de un objeto que lo distingue de todos los dems. Es un
programa, normalmente se trata de un identificador.
En resumen, un objeto es un conjunto de localidades en memoria con un conjunto de
subprogramas (en POO se conocen como mtodos) que definen su comportamiento y un
identificador asociado. Lo ms comn es que el programa tenga ms de un objeto con
56
Tcnicas de Programacin
propiedades y comportamientos similares, as que en lugar de repetir la definicin de un
objeto se agrupan las caractersticas comunes de los objetos en una clase.
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.
La vista exterior de un objeto en C++ tiene la siguiente sintaxis:
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.
La parte pblica o interfaz tiene dos clases de mtodos:
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.
A continuacin se presenta un ejemplo: En programacin es sabido que un contador
es un objeto que sirve para ayudar a contar cosas, por tanto se puede incrementar,
decrementar o simplemente preguntar por su valor. Esto es una abstraccin del objeto
contador, y una implementacin de sta, podra ser:
La definicin se tiene un archivo, por ejemplo contador.h y la implementacin de otro
llamado con esto se aplica la modularidad.
57
Tcnicas de Programacin
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.
La implementacin de mtodos se tiene en otro archivo y por tanto en el encabezado de
cada mtodo, el nombre del mismo va precedido del nombre de la clase a la que
pertenece el mtodo y un par de dos puntos.
Ejemplo:
//Implementacin de la clase contador. Archivo contador. c
#include contador.h
contador::contador ( ) {
valor = 0;
}
void contador::decrementa ( ) {
if (valor<MAXIMO) valor ++;
}
Ejemplo:
Void contador::decrementa ( ) {
If (valor>0) valor -- ;
}
unsigned int contador::accesa_valor ( ) {
return valor;
}
58
Tcnicas de Programacin
En este ejemplo el constructor nicamente asigna valor inicial al contador.
Ejemplo
//Programa de prueba que usa la clase contador
#include <STDIO.H
#include ``contador.h''
main ( ) {
contador c1, c2;
int i;
for (i = 1; i < 15; i++) {
c1.incrementa( );
printf("c1 = \%u ", c1.accesavalor( ) );
c2.incrementa();
}
ejemplo
printf("Despues del ciclo c2 = \%u ", c2.accesa valor( ) );
for (i = 1; i < 10; i++)
c2.decrementa( );
printf("El valor final de c2 es = \%u ", c2.accesa valor( ) );
}
59
Tcnicas de Programacin
pila(void);
pila(int tamano, char str[]);
void push (char c) ;
int pop () ;
\~{}pila() ;
};
Ejemplo:
Implementacin de la pila
pila::pila(int tamano) {
p = new char [tamano];
tamano_max = tamano;
tope = 0;
}
pila::pila(void) {
p = new char [100];
tamano_max = 100;
tope = 0;
}
pila::pila(int tamano, char *s) {
p = new char [tamano];
tamano_max = tamano;
strcpy(p, str);
tope = 0;
}
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.
{\ejemplo pila p1, p2(20), p3(5,''Hola'');
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.
60
Tcnicas de Programacin
5. HERENCIA
La herencia es la contribucin ms importante de la POO, pues mediante este
mecanismo es posible lograr la principal meta de la POO que es la reutilizacin de
cdigo.
La herencia permite proporcionar una jerarqua de clases. En tal jerarqua, algunas
clases son subordinadas a otras llamadas subclases, o como en C++, clases derivadas.
Una subclase define el comportamiento de un conjunto de objetos que heredan algunas
de las caractersticas de la clase padre, pero adquieren caractersticas especiales no
compartidas por el padre, en este sentido se dice que la subclase es una especializacin
de la clase padre.
La herencia define relaciones entre clases, donde una clase comparte la estructura o
comportamiento definidos en una o ms clases.
Por ejemplo, si se desea crear un sistema que maneje datos de estudiantes y de
profesores, es fcil notar que independientemente de que sean alumnos o profesores
todos son personas y por tanto tienen nombre y direccin.
Persona:
char*ap_paterno;
char*ap_materno;
char*nombre;
char*calle_num;
char*ciudad;
char*edo;
char*cp;
Profesor:
char*ap_paterno;
char*ap_materno;
char*nombre;
char*calle_num;
char*ciudad;
char*edo;
char*cp;
char*depto;
float sueldo;
Estudiante:
char*ap_paterno;
char*ap_materno;
char*nombre;
char*calle_num;
char*ciudad;
char*edo;
char*cp;
char*carrera;
long num_cta;
int semestre;
Pasante:
char*ap_paterno;
char*ap_materno;
char*nombre;
char*calle_num;
char*ciudad;
char*edo;
char*cp;
char*carrera;
long num_cta;
int semestre;
char*tesis;
int avance;
61
Tcnicas de Programacin
En C++ todos los miembros declarados como protegidos permanecen ocultos, de la
misma forma que los privados, excepto para sus subclases. La definicin de estos
objetos en C++ se dara de la siguiente forma:
Ejemplo:
Clases y subclases de personal universitario (profesores y alumnos)
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.
Class estudiante : public persona {
private:
char * carrera;
long num_cta;
int grado;
public:
estudiante ( ) : ( ) { }
void inserta_carrera (char * s);
void inserta_num_cta (long id);
void inserta_grado (int g);
void imprime ( );
};
void estudiante: : imprime ( ) {
persona: : imprime ( ) :
cout<<carrera ! <<carrera;
>>>
Pasante es un caso particular de estudiante, as que se define como una subclase de
estudiante y por lo tanto hereda las propiedades de estudiante y tambin de persona.
Ejemplo:
class pasante : public estudiante {
char *tesis;
int avance;
public:
62
Tcnicas de Programacin
pasante ( ) : ( ) { }
void inserta_tesis (char *s);
void inserta_avance (int a);
void imprime ( );
}
void pasante: : imprime( ) {
estudiante::imprime( );
cout <<"Titulo de la tesis>>: "<<Tesis<<"Porcentaje avance de>>> "<<avance;>}
Finalmente se define profesor como un caso particular de persona.
Ejemplo:
class profesor :public persona {
private:
char *depto;
float sueldo;
public:
profesor ( ) : ( ) { }
void inserta_depto (char*d) ;
void inserta_sueldo (float s);
void imprime ( );
};
void profesor : : imprime ( ) {
persona : : imprime ( );
cout <<Depto- ->>: <<depto<<salario >>>>$<<sueldo; >>}
En el mtodo imprime de la clase profesor se utiliza el mtodo imprime de la clase
persona, para que imprima el nombre y la direccin del profesor, y en la segunda lnea
se agrega la impresin de los datos especficos del profesor.
Como se pudo apreciar, el uso de la herencia evita el tener que modificar programas
existentes o peor an, reescribirlos.
En C++ el mecanismo de herencia no slo contempla herencia sencilla(donde se tiene
un solo padre) como la mostrada en el ejemplo anterior, tambin se tiene la posibilidad
de que una clase herede ms de una clase, es decir se permite tener herencia mltiple.
En ese caso, en la definicin de la clase se especifica cules sern los padres de la clase
hijo como antes.
Class hijo: public padre, public madre {....};
6. POLIMORFISMO
Otro de los mecanismos aportados por la POO es el de polimorfismo, el cual es la
capacidad de tener mtodos con el mismo nombre pero que su implementacin sea
diferente. En la vida diaria se presenta el siguiente ejemplo de polimorfismo: al tratar de
frenar un vehculo siempre se debe oprimir el pedal del lado izquierdo y el vehculo se
detendr sin importar si los frenos son de tambor o de disco.
63
Tcnicas de Programacin
Una forma de polimosfismo en POO se da al usar un operador para aplicarlo a
elementos de diferente tipo. Por ejemplo, al pretender sumar enteros, reales o
complejos, se emplea el mismo smbolo +, esto se conoce como sobrecarga de
operadores. En este caso el compilador se encarga de determinar cul es el mtodo que
se est invocando de acuerdo a los objetos involucrados en la operacin. Se presenta
nuevamente el ejemplo inicial del contador, slo que ahora usando sobrecarga de
operadores en lugar de inventar nombres para las operaciones:
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;
}
Finalmente se muestra el ejemplo de uso de objetos de esta clase, donde puede
observarse el uso ms natural de las operaciones con contadores:
Programa de prueba que usa la clase contador
#include
#include "cont 2.h"
main ( ) {
contador c1, c2;
int i;
for (i = 1; i < 15; i++) {
c1++;
printf("\nc1 = %u ", c1( ) );
c2++;
}
64
Tcnicas de Programacin
printf ("\nDespues del ciclo c2 = %u ", c2( ) );
for (i = 1; i < 10; i++)
c2--;
printf("\nEl valor final de c2 es = %u \n", c2( ) );
}
As como hay sobrecarga de operadores, tambin la hay de mtodos, como se ha visto
con los constructores de los cuales se pueden tener ms de uno por clase, y en el
ejemplo de herencia tambin se us sobrecarga de mtodos con la funcin imprime, la
cual tiene diversas formas dependiendo de la clase que se trate. Pero el polimorfismo
puro es el que se da a momento de ejecucin como en el siguiente ejemplo, en el cual se
tienen diversas figuras geomtricas (de momento no interesa su representacin, as que
se omite) con un mtodo para dibujarlas:
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 <<" +---+";
}
void linea :: dibuja (void) {
cout " \\\\ ";
cout " \\\\ ";
cout " \\\\ ";
}
65
Tcnicas de Programacin
Ejemplo
Programa que hace uso del polimorfismo
#include "polim.h"
main ( ) {
figura *p[3];
p[0] = new circulo;
p[1] = new cuadro;
p[2] = new linea;
for (int i =0;
i <= 2; i++) p[i]->dibuja( );
}
En el programa se crean tres figuras diferentes, y no es sino hasta el momento de
ejecucin en que se sabe a qu mtodo se invoca para imprimirla dependiendo del valor
de la variable.
66
Tcnicas de Programacin
CONCLUSIN
Como conclusin podemos apreciar que la programacin es muy importante en la
actualidad y lo seguir siendo por un buen tiempo, pero as como recalcamos su
importancia decimos que lo ms importante no es el lenguaje de programacin sino el
planteamiento de la solucin al problema, ya que podra caerse en un error al pensar que
sin las tcnicas o mtodos que se emplean para la programacin vamos a llegar
fcilmente a la elaboracin correcta de un programa, lo cual no es imposible cuando se
trata de programas sencillos y pequeos, pero cuando se tienen que elaborar programas
muy grandes y con un alto grado de complejidad hay problemas para su diseo, por que
para esto se debe seguir un orden y utilizar tcnicas que deben ser tomadas muy en
consideracin para el diseo y la estructura general de los programas.
En los casos de la Programacin Modular, Estructurada y Orientada a Objetos, stas
tienen fundamentos que siguen una secuencia lgica y es por eso que tienen una
relacin muy estrecha, hay que tomar en cuenta que la lgica es muy importante en la
programacin ya que el programador tendr que ayudarse en muchas ocasiones de su
ingenio para lograr lo que se pretende, y no debemos olvidar que la prctica constante es
la mejor enseanza, esperamos entonces que sta publicacin les sea de gran ayuda.
67
Tcnicas de Programacin
BIBLIOGRAFA
Fundamentos de Programacin.
Luis Joyanes Aguilar.
McGRAW HILL/INTERAMERICANA DE ESPAA S.A.
Lenguajes de Programacin Diseo e Implementacin.
Terrece W. Pratt and Marvin V. Zelkwitz
A Simon & Schuster Company
Booch, Grady. Object Oriented Design with applications.
The Benjamin/Cummings Publishing Company, Inc. 1991.
Meyer Bertran.
Happy 25 Anniversary Objects SIGSPublications. 1989.
Pohl, Ira. C++ for C Programmers.
TheBenjamin/Cummings Publishing Company, Inc. 1989.
Stroustrup, Bjarne.
The C++ Programming Language. Addison
WesleyPublishing Company. 1987.
Stroustrup, Bjarne.
What is Object Oriented Programming? IEEE Software. Mayo 1988.
Wiener, Richard; Pinson, Lewis.
An introduction to object-oriented programming Addison-Wesley Publishing
Company. 1990.
68