Sunteți pe pagina 1din 66

UNIVERSIDAD AUTNOMA DE GUERRERO

UNIDAD ACADMICA DE INGENIERA


Programa Educativo: Ingeniera en Computacin











FUNDAMENTOS DE PROGRAMACIN
(PARTE I)










Por: Dr. Esteban Rogelio Guinto Herrera
















Chilpancingo, Gro., noviembre de 2011
ltima revisin: noviembre de 2011
Fundamentos de programacin
Guinto 2011

1

CONTENIDO


PARTE I

1. GENERALIDADES
2. SOLUCIN DE PROBLEMAS MEDIANTE EL USO DE LA COMPUTADORA
3. PARADIGMAS DE PROGRAMACIN
4. ELEMENTOS PARA EL DISEO DE ALGORITMOS
5. TECNICAS PARA FORMULACIN/REPRESENTACIN/DESCRIPCIN/
DISEO DE ALGORITMOS
6. ARREGLOS (ARRAYS) Y CADENAS DE CARACTERES
7. MANEJO MODULAR Y RECURSIN
8. ARCHIVOS


PARTE II

LENGUAJE DE PROGRAMACIN























Fundamentos de programacin
Guinto 2011

2
I. GENERALIDADES

El diseo de algoritmos es la base del desarrollo de cualquier programa hecho en
cualquier lenguaje de programacin. Pretender ser programador sin dominar la
algoritmia es como pretender ser arquitecto sin saber dibujar. El diseo de algoritmos es
la iniciacin por la que todo futuro buen programador debera empezar, antes incluso de
escoger el lenguaje de programacin que quiere aprender. Porque saber disear
algoritmos no es otra cosa que saber disear programas de forma independiente al
lenguaje y sistema en el que vayan a ser implementados (Joyanes).

I.1 Cuestionario de diagnstico

I.2 Conceptos bsicos

Computadora:

a) Dispositivo electrnico capaz de recibir, almacenar y procesar datos, y dar
resultados en tiempos relativamente cortos, en comparacin de las capacidades
humanas, bajo la direccin de programas.
b) Dispositivo que manipula datos bajo la direccin de programas
c) Conjunto integrado de algoritmos y estructuras de datos, capaz de almacenar y
ejecutar programas.

La figura I.1 muestra la configuracin tpica del hardware de una computadora.


Fig. I.1 Configuracin tpica del hardware

La figura I.2 ilustra una organizacin tpica y comn de una computadora. Una memoria
principal contiene programas y datos que se van a procesar. El proceso se realiza por medio
de un intrprete que toma cada instruccin en el lenguaje de la mquina en turno, la
codifica y llama a la operacin primaria designada con los operandos denominados como
entradas. Los primarios manipulan los datos en la memoria principal y en los registros de
alta velocidad y tambin pueden transmitir programas o datos entre la memoria y el medio
ambiente operativo externo.
Fundamentos de programacin
Guinto 2011

3
En general, una computadora puede construirse como un dispositivo fsico real, utilizando
alambres, circuitos integrados, tablas de circuitos y cosas parecidas, que en tal caso se
llama computadora real (o computadora hardware), o puede construirse va programas que
se corren en otras computadoras, en tal caso es una computadora simulada por software.

El interprete es un elemento muy importante en la operacin de una computadora, casi
siempre ejecuta el simple algoritmo mostrado en la figura I.3.

Fig. I.2 Esquema de la organizacin en una computadora tpica



Fig. I.3 Procedimiento bsico para la interpretacin de un programa y su ejecucin.

Fundamentos de programacin
Guinto 2011

4

* Real o hardware
Computadora * Firmware
* Simulada por software ==> * Virtual


Computadora real o hardware. Computadora compuesta por elementos fsicos. Tiene
ciertos tipos de datos construidos en su interior, que pueden manipularse en forma directa
por operaciones primarias hardware. Un conjunto comn puede incluir enteros, reales de
precisin simple (nmeros de punto flotante), cadenas de caracteres, etc.

Debemos considerar a los programas como una forma de datos.

Por lo regular, un programa en el lenguaje de mquina debe estructurarse como una
secuencia de locaciones de memoria, conteniendo cada uno una o ms instrucciones. Cada
instruccin en turno se compone de un cdigo de operacin y un conjunto de designadores
de operandos.

Un principio bsico muy importante en que se basa el diseo de computadoras es: cualquier
algoritmo y/o estructura de datos definida con precisin puede construirse con hardware.

Computadora firmware. Computadora simulada por un microprograma que corre sobre
una computadora microprogramable de hardware (anfitriona)

Computadora simulada por software. Se construye representando las estructuras de datos
y los algoritmos por medio de programas y estructuras de datos en algn lenguaje de
programacin.

Fig. I.4 Capas de una computadora virtual usada por un programador (Visual Basic, C,
C++, Java, Delphi, Ruby, C#, etc.)
Fundamentos de programacin
Guinto 2011

5
Lenguaje. Cualquier medio que se emplea para expresar las ideas; conjunto de reglas para
especificar la forma en que las cosas deben expresarse, a fin de que sean entendidas. Un
lenguaje es un medio de comunicacin entre dos partes.

Ejemplos de lenguajes naturales: Espaol hablado, Espaol escrito, Ingls hablado, etc.
(formas del lenguaje: hablado, escrito, grfico, mmico, etc Lenguaje hablado + lenguaje
escrito ==> Idioma o lengua).

Lenguaje de programacin. Cualquier notacin, implantada en una computadora, para la
descripcin de algoritmos y estructuras de datos. Cualquier lenguaje es solamente un
conjunto de reglas para especificar la forma en que las cosas deben expresarse a fin de que
sean entendidas.

Otras definiciones de lenguaje de programacin son las siguientes:

Conjunto de reglas, smbolos y palabras especiales que permiten construir
programas (Joyanes).
Vehculo de comunicacin entre los humanos y la computadora (Pressman).
Smbolos, caracteres y reglas de uso que permiten a las personas comunicarse con
las computadoras (Sanders).

Los elementos principales de un lenguaje de programacin son: identificadores: nombres
que se dan a las variables, funciones, etiquetas, clases, otros objetos, etc.; tipos de datos;
palabras reservadas: las palabras que utiliza el propio lenguaje; sentencias; bloques de
cdigo; comentarios; expresiones; operadores, funciones, procedimientos y mtodos; entre
otros tantos.

Una breve clasificacin de los lenguajes de programacin es la que se muestra a
continuacin:

- Lenguaje mquina. Es el lenguaje real de la mquina. En este lenguaje, las instrucciones
se expresan simplemente como una serie de dgitos binarios, o bits (binary digits). Es el
lenguaje que puede entender la CPU.

- Lenguajes de programacin de bajo nivel. Prximos al lenguaje mquina, ejm: el
lenguaje ensamblador.

- Lenguajes de programacin de alto nivel. Se asemejan al lenguaje natural, ejm: Delphi,
Java, Visual Basic, C++, Ruby, C#, etc.

Sintaxis. Conjunto de reglas con ayuda de las cuales se forman las oraciones correctas de
un lenguaje.

Programa. Secuencia de instrucciones que orienta a la CPU en el proceso y/o
manipulacin de datos.

Fundamentos de programacin
Guinto 2011

6
Programacin. Es la proyeccin, planificacin o ejecucin de una tarea o proceso. Para
otros autores, es describir lo que debe hacer la computadora para resolver un problema
concreto utilizando un determinado lenguaje de programacin.

Un programa se construye con estructuras de datos y algoritmos. Un programa es
simplemente una secuencia de instrucciones que orienta a la CPU en el desarrollo de los
clculos y/o manipulacin de datos. El programa debe expresarse de forma que pueda ser
entendido por la CPU. Aunque esto es rara vez de la incumbencia directa del programador
(debido a que actualmente los programadores usan lenguajes de alto nivel, niveles ms altos
del nivel lenguaje mquina, ver fig. I.4), una breve descripcin del lenguaje de mquina y
de los programas escritos con l proporcionarn una visin general de la operacin de una
CPU. Una CPU slo puede entender instrucciones que estn expresadas en trminos de un
lenguaje de mquina.

Para ilustrar el concepto de programas escritos en lenguaje de mquina y de la operacin de
la CPU al ejecutar tal programa, considrese una CPU con un lenguaje de mquina muy
primitivo. Para este ejemplo de lenguaje particular, se supone que cada instruccin tiene 8
bits y que consta de dos partes: de un cdigo de operacin de 3 bits que especifica la
operacin que debe realizarse, y de un operando de 5 bits que proporciona la direccin del
dato con el cual se va a realizar la operacin codificada. Tambin se supone la existencia de
un acumulador en la unidad aritmtica y lgica, en el cual se realizarn las operaciones
aritmticas. La tabla I.1 define el conjunto de instrucciones de la CPU del ejemplo; esto
quiere decir que esta CPU tiene circuitos especialmente diseados para ejecutar
directamente esas instrucciones en particular. En la tabla I.2 se muestra el ejemplo de
programa en lenguaje mquina.

Tabla I.1 Conjunto de instrucciones de la CPU del ejemplo.
Cdigo de
la operacin
Significado
001 Load (cargar): cpiese el valor de la palabra direccionada en el
acumulador.
010 Store (almacena): Cpiese el valor del acumulador en la palabra
direccionada.
011 Add (suma): reemplcese el valor actual del acumulador por la suma
de su valor actual y el valor de la palabra direccionada.
100 Substract (resta): reemplcese el valor actual del acumulador por el
resultado que se obtiene al restar, del valor actual, el valor de la
palabra direccionada.
101 Branch (ramificacin incondicional): psese a ejecutar la instruccin
contenida en la palabra direccionada.
110 Branch if not 0 (ramificacin condicional): psese a ejecutar la
instruccin contenida en la palabra direccionada solamente se el valor
actual del acumulador es diferente de 0 (cero).
111 Halt (alto): termina la ejecucin


Fundamentos de programacin
Guinto 2011

7
Tabla I.2 Ejemplo de programa en lenguaje mquina.
Direccin de
la instruccin
(en binario)
Cdigo de la
operacin
Direccin
de memoria
(Operando)
00000 001 01010
00001 010 01100
00010 001 01110
00011 011 01011
00100 010 01110
00101 001 01100
00110 100 01101
00111 010 01100
01000 110 00010
01001 111 00000
01010 000 00011
01011 000 00100
01100 000 00000
01101 000 00001
01110 000 00000
01111 000 00000


Un lenguaje de programacin se implementa con la construccin de un compilador o un
intrprete que transcriben programas, del lenguaje utilizado, a programas en el lenguaje de
mquina que pueden ejecutarse directamente por alguna computadora. La computadora que
ejecuta los programas traducidos puede ser una computadora hardware, pero, por lo general
es una computadora virtual, compuesta en forma parcial de hardware y software.

Compilador. Programa informtico que traduce un programa escrito en un lenguaje de
programacin a otro lenguaje de programacin, generando un programa equivalente que la
mquina puede interpretar. Usualmente el segundo lenguaje es lenguaje de mquina, pero
tambin puede ser un cdigo intermedio (batecode), o simplemente texto. Este proceso de
traduccin se conoce como compilacin.

Intrprete o interpretador. Programa informtico capaz de analizar y ejecutar otros
programas, escritos en un lenguaje de alto nivel. Los intrpretes se diferencian de los
compiladores en que mientras estos traducen un programa desde su descripcin en un
lenguaje de programacin al cdigo de mquina del sistema, los intrpretes slo realizan la
traduccin a medida que sea necesaria, tpicamente, instruccin por instruccin, y
normalmente no guardan el resultado de dicha traduccin.

Sistema operativo. Es el director de trfico que hace que el hardware y el software
trabajen. Es un conjunto de programas que controla y organiza las actividades del
computador. Un programa del sistema operativo controla el proceso a bajo nivel de un
computador y se sita entre el programa de aplicacin y el hardware del computador.

Programa
Datos
Fundamentos de programacin
Guinto 2011

8
El sistema operativo planifica y controla la utilizacin de los recursos hardware del sistema.
Estos recursos hardware pueden incluir memoria, unidades CD-ROM, impresoras,
monitores, etc.

El objetivo de un buen sistema operativo es simplificar la utilizacin del computador,
proporcionando un conjunto de rdenes prcticas y fciles de utilizar, que cubran el hueco
entre los programas de aplicacin y el proceso fsico del computador. Un sistema operativo
tambin dirige el flujo de datos. Trabaja como un sofisticado guardia de trfico,
asegurndose de que los datos correctos vayan a los lugares correctos.


Tipos de software

Software de traduccin: Con el que los programadores pueden crear otro software.
Un compilador y un intrprete traducen un programa fuente a un programa objeto.
Software de uso general: Ofrece la estructura para un gran nmero de aplicaciones
empresariales, cientficas y personales. La mayora del software de este tipo se
vende como paquete, es decir, con software y documentacin orientada al usuario.
Software de aplicacin: Sirve como herramienta para elevar la productividad de
los usuarios en la resolucin de problemas. Est diseado y escrito para realizar
tareas especficas personales, empresariales o cientficas. El software de este tipo
procesa datos y genera informacin. Las aplicaciones se clasifican en: Procesador
de Palabras, Planillas de Clculo, Bases de Datos, Grficos, Presentaciones,
Comunicaciones, Buscadores, Administracin de Proyectos, etc.
Software del sistema: Coordina las operaciones de hardware y lleva a cabo las
tareas ocultas que el usuario rara vez observa. Controla o respalda a los otros tipos
de software. Dentro de este tipo de software se encuentran
Software multiuso: Los paquetes de software integrado cuentan con varias
aplicaciones diseadas para trabajar en conjunto; estos paquetes suelen incluir
como mnimo 5 tipos de aplicaciones: procesador de textos, base de datos,
planilla de clculo, grficos y telecomunicaciones.
Software vertical: Aplicaciones diseadas especficamente para una empresa o
industria particular. Son mucho ms costosas que las aplicaciones de mercado
masivo.
Software a medida: Es el que se programa especficamente para un
determinado cliente.


1.3 Ubicacin de los fundamentos de programacin

Los fundamentos de programacin quedan contemplados dentro de las primeras fases de las
metodologas para el desarrollo de sistemas y/o software. La mayora de estas metodologas
distinguen las fases de Anlisis, Diseo, Construccin/Programacin del Sistema/Software,
Pruebas, etc. (ver figura I.5).

Fundamentos de programacin
Guinto 2011

9

Fig. I.5 Ubicacin de los fundamentos de programacin dentro del proceso general del
desarrollo de sistemas (etapas anlisis, diseo, construccin/programacin y pruebas alfa).






























Mtodos
Fundamentos de programacin
Guinto 2011

10
II. SOLUCIN DE PROBLEMAS MEDIANTE EL USO DE LA COMPUTADORA

El proceso de resolucin de un problema con una computadora conduce a la escritura de un
programa y a su ejecucin en la misma. Aunque el proceso de disear programas es
esencialmente un proceso creativo, se pueden considerar tambin como una serie de fases o
pasos comunes que generalmente deben seguir todos los programadores.

Las siguientes son las etapas que se deben cumplir para resolver con xito un problema de
programacin:

1. Definicin del problema
2. Anlisis del problema
3. Seleccin de la mejor alternativa
4. Diseo del Algoritmo
5. Codificacin
6. Compilacin
7. Pruebas
8. Documentacin

Definicin del Problema

Est dada por el enunciado del problema, el cual debe ser claro y preciso. Es importante
que conozcamos exactamente lo que se desea que la computadora realice; mientras que esto
no se comprenda no tiene caso pasar a la siguiente etapa.

Anlisis del Problema

Entendido el problema (que se desea obtener de la computadora), para resolverlo es preciso
definir:

Los datos de entrada que se deben suministrar.
Los resultados que se esperan.
El proceso al que se requiere someter dichos datos a fin de obtener los resultados
esperados.

Una recomendacin muy prctica es que nos pongamos en el lugar de la computadora, y
analizar que es necesario que me ordenen y en que secuencia para poder producir los
resultados esperados.
Fundamentos de programacin
Guinto 2011

11

Seleccin de la Mejor Alternativa

Analizado el problema posiblemente tengamos varias formas de resolverlo; lo importante
es determinar cul es la mejor alternativa. Esto es, la que produce los resultados esperados
en el menor tiempo y al menor costo.

Diseo del Algoritmo

Una vez que sabemos cmo resolver el problema, pasamos a expresar el mtodo de
solucin como una serie ordenada de pasos elementales (Algoritmo). El algoritmo se puede
expresar en diferentes maneras:

Por medio de un Diagrama de Flujo (Representacin grafica del algoritmo).
Por medio de un Pseudocdigo (Instrucciones en un cdigo especial)

Codificacin

Una vez que hayamos elaborado el algoritmo, codificamos el programa en el lenguaje de
programacin seleccionado. Esto es, colocamos cada paso del algoritmo en una instruccin
o sentencia utilizando un lenguaje que la computadora reconoce. Este programa es el que se
conoce como Cdigo Fuente (Source Code).

Compilacin

Utilizamos ahora un programa Compilador, el cual analiza todo el programa fuente y
detecta errores de sintaxis ocasionados por fallas en la codificacin. Las fallas de lgica que
pueda tener nuestro programa fuente no son detectadas por el compilador. Cuando no hay
errores graves en la compilacin, el compilador traduce cada instruccin del cdigo fuente
a instrucciones propias de la mquina (Lenguaje de Maquina), creando el Programa Objeto.
Cuando hay errores, stos se deben corregir sobre el mismo programa fuente. El paso de
compilacin se repite hasta eliminar todos los errores y obtener el programa ejecutable.




Fundamentos de programacin
Guinto 2011

12
Pruebas

Cuando tenemos el programa ejecutable (en lenguaje de maquina) ordenamos al
computador que lo ejecute, para lo cual suministramos datos de prueba.
Los resultados obtenidos se analizan para identificar cualquiera de las siguientes
situaciones:

La lgica del programa est bien, pero hay errores sencillos, los cuales se corrigen
modificando algunas instrucciones o incluyendo unas nuevas; el proceso debemos
repetirlo desde el paso 5.

Hay errores muy graves ocasionados por fallas en la lgica, y lo ms aconsejable es que
regresemos al paso 2 para analizar nuevamente el problema y repetir todo el proceso.


No hay errores y los resultados son los esperados. En este caso, el programa lo podemos
guardar permanentemente para usarlo cuando necesitemos ejecutarlo nuevamente.

Documentacin

Es el documento que nos permite comprender, usar o modificar el programa. Se divide en
tres partes:

Documentacin interna: son los comentarios o mensajes que se aaden al cdigo fuente
para hacer ms claro el proceso seguido.

Documentacin externa: es un documento escrito que contempla los siguientes puntos:

Descripcin del problema
Nombre del Autor
Algoritmo
Cdigo fuente

Manual del usuario: describe paso a paso la manera en que funciona el programa, con el fin
de que el usuario obtenga el resultado deseado.



Fundamentos de programacin
Guinto 2011

13
Ejercicios:

1. Un estudiante de secundaria, mediante el uso de una computadora, desea obtener el rea
de un trapecio. Si el rea resultante es menos de 1,000 U
2
, muestre el mensaje: se
requiere ms rea Incremente las dimensiones, caso contrario, debe mostrarse el
rea y el mensaje: rea suficiente.
2. En una empresa, el precio de un automvil se obtiene sumando al precio de fbrica la
comisin del vendedor (5% del precio de fbrica); ms el impuesto correspondiente,
segn su potencia en caballos de fuerza (H.P.), dada por la siguiente tabla; ms un 1%
del precio de fbrica por gastos administrativos.

Potencia Impuesto
6 10% del precio de fbrica
> 6, pero 12 15% del precio de fbrica
> 12, pero 18 20% del precio de fbrica
> 18 30% del precio de fbrica

Los directivos de la empresa desean realizar los clculos mediante el uso de una
computadora.

3. Mediante el uso de una computadora, se desea obtener la suma de dos vectores
coplanares y concurrentes. Asuma que se da la magnitud y el ngulo C/R al eje X
+
de
cada uno de los vectores. Los ngulos sern dados en grados.

Para cada ejercicio:

a) Qu se desea que realice la computadora?
b) Cules son los datos de entrada?
c) Cules son los resultados que se van a generar?
d) Cules son los mtodos y frmulas necesarios para procesar los datos?
















Fundamentos de programacin
Guinto 2011

14
III. PARADIGMAS DE PROGRAMACIN

Ver material anexo












































Fundamentos de programacin
Guinto 2011

15
IV. ELEMENTOS PARA EL DISEO DE ALGORITMOS

IV.1 Definicin de algoritmo

a) Intuitivamente
*
, es un conjunto de reglas que sealan una secuencia de operaciones que
conducen al logro de cierto resultado indispensable.

b) Es un conjunto de reglas para resolver una cierta clase de problemas o una forma de
describir la solucin de un problema (Joyanes).

c) Es un problema de complejidad computacional limitada que se incluye dentro de un
determinado programa de computadora (Pressman).

d) Conjunto de reglas bien definida para resolver un problema en un nmero finito de
operaciones (Sanders).

e) Secuencia ordenada de pasos exenta de ambigedades, que lleva a la solucin de un
problema (Tremblay).

f) Es un procedimiento para ejecutar un trabajo y tiene cuatro propiedades principales
(Watkins): 1) Es una secuencia de etapas con un punto particular de inicio, 2) Es definido y
no es ambiguo, 3) Es general, se puede utilizar para varios problemas relacionados entre s
y 4) Es finito en tamao y tiempo.

g) Secuencia finita de instrucciones, cada una de las cuales tiene un significado preciso y
puede ejecutarse con una cantidad de esfuerzo en un tiempo finito.

Ejemplos:

1. Una receta de cocina.
2. Las instrucciones o serie de pasos que se siguen para grabar un nmero telefnico
en un celular.
3. El procedimiento que sigues para inscribirte.
4. Pasos para invitar a alguien al cine.
5. Instrucciones para manejar una maquinaria
6. Instrucciones para armar un juguete.
7. Instrucciones para usar un aparato electrnico.
8. Pasos a seguir para formular un proyecto.
9. Pasos a seguir para resolver un problema de fsica.
10. Pasos a seguir para solucionar un problema de matemticas
11. Pasos a seguir para resolver un problema, va algn lenguaje de programacin.
12. Pasos a seguir para registrar a un cliente en un hotel Etc.
_______________________________
* Intuitivo. Que tiene intuicin Intuicin. Conocimiento claro, recto o inmediato de verdades
que penetran en nuestra mente/espritu sin necesidad de razonamiento; conocimiento adquirido
debido a una gran experiencia, pero an no sometido a un anlisis cientfico, por lo que resulta
insuficientemente preciso y estricto (Krinitski) Intuitivamente. Con intuicin.
Fundamentos de programacin
Guinto 2011

16
IV.2 Caractersticas de los algoritmos

Los algoritmos tienen tres caractersticas importantes que hay que tener presentes:

1. Deben ser precisos. Indicar los pasos a seguir y su orden de ejecucin.
2. Deben ser consistentes. Obtener los mismos resultados cada vez que sean ejecutados
con los mismos datos.
3. Deben ser finitos. Garantizar que en algn momento termina su ejecucin.


IV.3 Composicin de los algoritmos

En general, los algoritmos estn compuestos de:

1. Entradas. De objetos que manipular el algoritmo (datos).
2. Procesos. Las instrucciones para manipular a los objetos.
3. Salidas. Resultados obtenidos por la manipulacin de los objetos, debidos a las
acciones realizadas por los procesos.

Cabe hacer mencin que actualmente se desarrollan algoritmos slo para entradas, slo
para procesos, o slo para salidas, o bien, una combinacin de estas composiciones.

Ejemplos:

1. Suponga que usted est sentado frente al televisor, viendo su programa favorito. En
ese momento se le antoja comer chorizo con huevo. Represente un algoritmo que
permita preparar esa sabrosa comida.
2. Represente un algoritmo que permita comprar una camisa talla 38, color blanco,
mangas largas y con un costo entre los $300 y $500.
3. Represente un algoritmo que, con herramienta bsica, permita cambiar un
neumtico ponchado de un automvil.
4. Definir algunas instrucciones primitivas y describir un algoritmo.
5. Un estudiante de escasos recursos econmicos se encuentra en su casa (durmiendo)
y debe ir a la universidad. Disee un algoritmo que permita al estudiante llegar a la
universidad.
6. Algoritmo para preparar una taza de t.











Fundamentos de programacin
Guinto 2011

17
Una solucin al caso 5:

Inicio
Hasta que suene el despertador, le llame alguien o despierte:
Dormir.
Termina hasta
Mirar la hora.
Si Hay tiempo suficiente entonces
Baarse.
Vestirse.
Desayunar.
Cepillarse los dientes.
Sino,
Vestirse.
Cepillarse los dientes.
Termina Si
Si vive con alguien entonces
Despedirse.
Termina Si
Si Hay tiempo suficiente entonces
Caminar a la parada de combis
Sino
Correr a la parada de combis.
Termina Si
Hasta que pase una combi para la universidad hacer:
Esperar la combi.
Ver a las dems personas que esperan una combi.
Termina hasta
Hacer la parada.
Subirse a la combi y pagar.
Mientras no llegue a la universidad hacer:
Seguir en la combi.
Pelear mentalmente con el conductor.
Si la universidad est cerca de la prxima parada
Avisar la bajada.
Termina si
Termina Mientras
Bajarse.
Entrar a la universidad.
Fin







Fundamentos de programacin
Guinto 2011

18
Una solucin al caso 6:

Inicio
Tomar un recipiente
Ponerle agua suficiente para una taza
Encender el quemador de la estufa
Mientras no hierva el agua
Esperar
Vaciar el t en la taza
Introducir una bolsa de t en la taza
Poner azcar al gusto
Mover el t durante unos 20 segundos
fin

































Fundamentos de programacin
Guinto 2011

19
Nota: Se puede observar que, en nuestro lenguaje natural, lo que est claro para una
persona puede no estarlo para otra y a menudo es difcil demostrar de manera rigurosa que
una instruccin puede realizarse en un tiempo finito.


IV.4 Datos, tipos de datos (simples) y operaciones primitivas

Como los comentamos anteriormente, los datos son la materia prima de la informacin, son
el resultado de un fenmeno, evento, o experimento determinado. Ejm: la edad de una
persona, la estatura de un nio, las ventas de una tienda, los gastos de una persona o
empresa en un perodo determinado, el nombre de un artculo, etc. As, podemos observar
que tenemos diferentes tipos de datos. La mayor parte de las computadoras son capaces de
trabajar con varios tipos (o modos) de datos.

Los distintos tipos de datos se representan en formas diferentes dentro de la computadora y,
de hecho, sta tiene algunas instrucciones para tratar con ellos.

Nmeros enteros, ejm: 5, 13, -6, 7420, -346
Datos numricos
Nmero reales: ejm: 25.9, -3.525, 7527.435

Para el caso de nmeros muy grandes o nmeros muy pequeos, se dispone de
representaciones especiales. Estas representaciones tienen dos componentes, denominados
parte fraccionaria y parte exponencial, cada una de las cuales tiene un signo asociado. Se
fija una base 10, a la cual se coloca el exponente. En varios de los casos, los componentes
son expresados en una notacin de complemento a dos.



Ejemplos:

0.3863214 x 10
9
Fraccin: + 0.3863214
Exponente: +9
Base: 10

0.915 x 10
-7
Fraccin: + 0.915
Exponente: -7
Base: 10

-0.3456 x 10
-5
Fraccin: -0.3456
Exponente: -5
Base: 10

Algunos lenguajes de programacin cuentan tambin con hileras o cadenas de caracteres
(una sucesin de caracteres), ejm: caracteres alfabticos comunes (A, B,, a, b,z), los
dgitos (0,1,2,9) y una gran variedad de caracteres especiales (espacio, $, #,). Una
cadena de caracteres inicia y termina con el carcter especial (apstrofe), o (comillas).
Fundamentos de programacin
Guinto 2011

20
Ejm:

Pedro Hernndez
PEDRO HERNNDEZ
Universidad Autnoma de Guerrero
12320
PEDROS
CASA20
A
$ 500.50
# 14

Los lenguajes de programacin disponen de otros tipos de datos que pueden considerarse
de tipo primitivo, sin embargo, de manera general es necesario checar las reglas del
lenguaje de programacin de que se disponga, con el fin de precisar los tipos de datos
primitivos y su manipulacin con ese lenguaje en particular.

Una taxonoma de los tipos de datos primitivos (o simples) se muestra en la figura II.1


Datos


Numricos Cadenas de Lgicos Apuntadores
caracteres



Enteros Reales



Con signo Sin signo Largos De punto fijo De punto flotante



Precisin sencilla Precisin doble

Fig. II.1 Taxonoma de los tipos de datos primitivos


La representacin de los datos es slo una parte del asunto; la computacin requiere
tambin que se tenga la capacidad de manipularlos.

Por otro lado, las operaciones bsicas que se pueden realizar con una computadora,
haciendo uso de un lenguaje de programacin son las siguientes:

Fundamentos de programacin
Guinto 2011

21
Suma (+).
Resta (-).
Multiplicacin (*).
Divisin (/).
Exponenciacin (, ^, **), o eleva(base, exp), o potencia(base exp).
Cambio de signo (+, -).
Transferir datos de una posicin de memoria a otra.
Ejecutar lgica simple, con respuestas si o no (verdadero o falso).
Solicitar entrada de datos.
Solicitar salida de datos o informacin.
Realizar procesos repetitivos.

La regla general es que el resultado de cualquier operacin tiene el mismo tipo que sus
operandos. Cuando sea necesario combinar diferentes tipos de datos, tenga mucho cuidado;
de ser necesario, haga pruebas.

Ejemplos:

Entero / entero = entero
Real / real = real
Real / entero = entero


IV.5 Constantes, variables, operadores y expresiones

Constante. Un valor que no cambia durante un proceso determinado (para nuestro caso,
durante la ejecucin de un algoritmo o programa).

Variable. Un valor que puede cambiar durante un proceso determinado.

Una variable se referenca por un identificador (un nombre), dado por el diseador de
algoritmos o por el programador. Cada vez que se usa el nombre, se hace referencia a la
localidad de memoria referenciada por dicho identificador (variable).

Operador. Es un smbolo que le dice al compilador o traductor que realice una operacin o
manipulacin. Existen varios tipos de operadores, algunos de ellos son:

Aritmticos
+ Suma
- Resta
* Multiplicacin
/ Divisin
, , **, funcin(valor, exponente) Exponenciacin (slo nivel algoritmos)
+, Cambio de signo


Fundamentos de programacin
Guinto 2011

22
Relacionales
= Igual a
< Menor que
> Mayor que
>= Mayor o igual que
<= Menor o igual que
<>, != Diferente de

Lgicos
Y, O, NO (AND, OR, NOT)

De asignacin
, =

Parntesis
( y )


Expresin. Es una combinacin de operadores y operandos (smbolos, constantes,
variables y funciones). A nivel lenguaje de programacin, las expresiones se representan de
manera lineal (en lneas), por lo cual, en muchas ocasiones es necesario el uso de
parntesis. A esta representacin se le conoce como representacin computacional.

Ejemplos:

a) ( 8 + 7 ) * ( 3 + 4 ) * 5
b) ( A + B ) / ( C + D )
c) ( a + b ** 2. / c ) / ( ( a / b ) ** 4. + 2. )
d) Etc.

Precedencia o jerarqua de operadores matemticos. Para los operadores que aqu
trataremos, se considera que la precedencia se da de izquierda a derecha, con la siguiente
jerarqua:

1. Funciones
2. Exponenciacin
3. Operadores de signo
4. Multiplicacin y divisin
5. Suma y resta

Cuando se quiera alterar la jerarqua, puede hacerse uso de parntesis. Las operaciones
dentro de los parntesis se realizan primero, respetando la precedencia establecida.




Fundamentos de programacin
Guinto 2011

23
Valor de expresiones


Ejemplos:

a) 3 + 6 * 5 b) 8 + 7 * 2 + 4 * 5

30 14 20

33 22

42

c) (8 + 7) * (3 + 4) * 5 d) 8 + 7 * 3 + 4 * 5





e) 50 - 30 / 6 * 2 f) (60 - 30) / 6 * 3



g) (30 + 2) / 8 + 3 h) (5 + 11) / (12 - 8)






















Fundamentos de programacin
Guinto 2011

24
Ejemplos: Convierta a notacin computacional (por lneas) las siguientes expresiones
algebraicas:

a) m a
c
b
2
3
2
+
+
+


b)
r
d
c
b
a
+

c)
2
4
2
c
b
a
c
b
a
+

+


d)
X
X
+ 3
30


e) N
e
N
N
N
2

f) 1 +
b
a

g)
f
e
d
c
b
a

+

h)
d c
b
a

+

i)
d
c
b a ) ( +

j) { } [ ]
d
c
b a +

k)
a
ac b b
2
4
2
+







Fundamentos de programacin
Guinto 2011

25
Funciones intrnsecas (internas). Son rutinas escritas previamente por los diseadores de
los lenguajes de programacin para facilitar el trabajo del programador, adems de que
algunas funciones requieren algo ms que los operadores convencionales.

Algunas de las funciones internas bsicas que proporcionan gran parte de los lenguajes de
programacin
*
son las siguientes:

abs(x) Valor absoluto de x
sqrt(x) Raz cuadrada de x
log(x) Logaritmo natural de x
alog10(x) Logaritmo de x (base 10)
exp(x) e
x

sin(x) Seno de x (x en radianes) Nota: ver conversiones:
cos(x) Coseno de x (x en radianes) Grad a Rad
tan(x) Tangente de x (x en radianes) Rad a Grad
atan(x) Arc. Tangente de x (resultado en radianes)
atn(x)
EOF Fin de archivo (1 = Verdadero, 0 = Falso)


IV.6 Construcciones bsicas de los algoritmos:

En general, los algoritmos se elaboran/disean/construyen con las siguientes construcciones
bsicas:

1. Secuenciacin

Una instruccin/sentencia tras otra (secuencia de instrucciones).

2. Bifurcacin

Toma de decisiones (basadas en valores lgicos). Estructuras de control

3. Repeticin

Ejecucin varias veces de una instruccin o de un conjunto de instrucciones.

De manera general, cada construccin incluye una o varias instrucciones bsicas. La
aplicacin de estas construcciones bsicas se ver ms adelante, en el captulo III (tcnicas
para la representacin/descripcin de algoritmos).






* Ver el lenguaje de programacin de inters.
Fundamentos de programacin
Guinto 2011

26
Ejercicios:

1. Determine el valor numrico de cada una de las siguientes expresiones. Tenga
cuidado en operaciones con enteros.

a) 16 * 2 3 *2
b) -2 ^ 2
c) (28 + 3 + 4) / 4
d) 3 + 3 * (18 4 ^ 2)
e) 2 ^ 2 * 3
f) 8 28 / 6
g) (60 + 30) / 5 * 2 (10 5)
h) (30 +2) * (4 2) / 4 + 5
i) (5 + 3.0 / 2.0) / (3 4.0 / 2.0) ^ 2

2. Represente las siguientes asignaciones en notacin computacional (en lnea):

a)
5 +
=
A
B
K


b)
X
b A
X
B
Y
+

+ =
2 / 5



c)
a
ac b b
X
2
4
1
2
+
=


d)


tag
sen
A
cos +
=


e)
2 2
b a C + =


f)

+ + =
23
3 2
13
3 1
12
2 1
r
m m
r
m m
r
m m
G E


g) ) ( cos

=

t Ae Y
t


Fundamentos de programacin
Guinto 2011

27
h)


sen
sen
Y
+
=
1
cos



i)

=
=
5
1
4
i
i
K
h
R


j)
3
5 3
4 5

+
=
Y
X
Z


k)


=
Z
S Y
X
Z
S Y
Ln
Z
S Y
R
X


3. Diga usted cual ser el valor de la variable R, despus de la ejecucin de c/u de los
siguientes segmentos de algoritmo, respectivamente.
a) R 0
I 1
R R + I ^ 2
R I

b) X 2
Y 3
R X + Y
X 5
R X + Y

c) R = 3.0 * 6
X = 2.
Y = 3.
R = X ^ Y X
R > 5 ?
SI: R = 5
NO: R = 0

d) R = 8
X = 2
R = R / X + 5
R = SQRT(R)



Fundamentos de programacin
Guinto 2011

28
IV.7 Metodologa de solucin Top-Down (descendente o refinamiento de pasos) para
el desarrollo de programas.

P.1. Asegrese de entender completamente las especificaciones del problema o situacin.
P.2. Identifique y liste cualquier variable que parezca necesaria.
P.3. Formule de manera simple un algoritmo general para resolver el problema o situacin.
P.4. Regrese a los pasos individuales del algoritmo y proceda a llenar los detalles.
P.5. Cuando crea haber obtenido un algoritmo lo bastante detallado, pruebe con cuidado los
pasos, con algn conjunto de datos de entrada, hasta estar seguro de que la solucin
elaborada satisface los requisitos establecidos.
P.6.Proceda a la codificacin con algn lenguaje de programacin.



Fig. Pasos para solucin de un problema mediante la programacin










Fundamentos de programacin
Guinto 2011

29
V. TECNICAS PARA FORMULACIN/REPRESENTACIN/DESCRIPCIN/
DISEO DE ALGORITMOS

V.1 Introduccin

El diseo de un algoritmo apropiado es la etapa previa a la elaboracin de un programa de
computadora (codificacin) para una aplicacin especfica.

La descripcin de un algoritmo es de gran ayuda para la construccin del programa
respectivo.





Fig. Camino a seguir para la elaboracin de programas (codificacin)



Existen diferentes tcnicas para representar / describir algoritmos; trataremos de manera
simple dos tcnicas no estructuradas y de manera ms detallada tres de las tcnicas
estructuradas.




Fundamentos de programacin
Guinto 2011

30
Objetivos de las tcnicas estructuradas:

1. Programacin sin uso de Go TOs (ir a).
2. Elaboracin de algoritmos altamente confiables, fciles de entender, corregir y
mantener.
3. Algoritmos eficientes en cuanto a tiempo de ejecucin y usos de variables
(memoria).
4. Algoritmos con las siguientes caractersticas:
Modularidad (procedimientos y/o funciones bien definidas)
Uniformidad (slo construcciones bsicas)
Legibilidad (comentarios e indentacin).
5. Reducir el nmero de fallas.
6. Detectar errores y omisiones desde el principio.
7. Mejorar la confiabilidad de los programas.
8. Mejorar el mantenimiento de los programas.
9. Incrementar la productividad de los programadores.


V.2 Descripcin narrada: Es una tcnica no estructurada que consiste en relatar o narrar
de manera verbal o escrita las instrucciones o acciones que conforman el algoritmo. Para
realizar una descripcin narrada parece fcil hacerlo si se mira superficialmente; sin
embargo, no siempre es sencillo, el lenguaje natural es muy amplio e impreciso y con
frecuencia es un vehculo poco confiable para transmitir informacin. En general, se
pueden presentar ambigedades.

Ejemplos:

1. La solucin de algunos algoritmos tratados en la unidad II, de manera natural se
intent resolver con esta tcnica, aunque no se lleg al uso eficiente de la misma.
2. Suponga que en el compartimiento superior de un archivero de oficina se tienen
tarjetas con datos de empleados de una empresa. Cada tarjeta por lo menos contiene
los siguientes datos: nombre del empleado y sueldo mensual.
Disee un algoritmo que permita obtener un listado de los empleados cuyo sueldo
mensual sea mayor o igual a $ 5,000.00












Fundamentos de programacin
Guinto 2011

31
V.3 Diagramas de flujo: Es una tcnica no estructurada que se basa en la utilizacin de
diversas figuras y smbolos para representar operaciones especficas. Se les llama
diagramas de flujo porque las figuras utilizadas se conectan por medio de flechas para
indicar la secuencia de operaciones.

Fue una de las primeras tcnicas de diagramacin. Aunque algunas personas an las usan
con frecuencia, hoy no se recomienda su uso, ya que incitan al uso de Go Tos (ir a).

El diagrama de flujo es una representacin grfica del algoritmo. Hay varios tipos de
diagrama de flujo: Diagrama de flujo de sistema, diagrama de flujo de programa, diagrama
de flujo de datos,

Diagrama de flujo de sistema. De manera grfica, muestra como ejecutar el sistema.

Diagrama de flujo de programa. Muestra grficamente la secuencia en que las instrucciones
(declaraciones, sentencias, etc.) o bloques de proceso se ejecutarn y la lgica de control
que gobierna su ejecucin. Tradicionalmente, sirvieron para dos propsitos:

1. Se usaron como una herramienta de diseo para planear lgica de programas
complicados y detallados.
2. Se usaron como documentacin de programas.


























Fundamentos de programacin
Guinto 2011

32
Simbologa utilizada en los diagramas de flujo:



Fundamentos de programacin
Guinto 2011

33



Proceso cclico



Ejemplos:

1. Disee un algoritmo para obtener el rea de un trapecio. Si el rea resultante es
menos de 1,000 U
2
, muestre el mensaje: se requiere ms rea Incremente las
dimensiones, caso contrario, debe mostrarse el rea y el mensaje: rea suficiente.
2. Disee un algoritmo para resolver la ecuacin cuadrtica de la forma Ax
2
+Bx+C=0.
3. Disee un algoritmo para tabular la siguiente funcin matemtica, para diferentes
valores de x, a partir de x = A, hasta x = B, en incrementos de x .
F(x) = x
2
+ 3x 2.
4. Disee un algoritmo para obtener la suma de los cuadrados de los nmeros del 1 al
100.
5. Disee un algoritmo para determinar el valor de K, de acuerdo a:
Fundamentos de programacin
Guinto 2011

34

=
=
n
i
i
x
J
K
1


6. Disee un algoritmo para calcular el precio de un automvil, sumando al precio de
fbrica la comisin del vendedor (5% del precio de fbrica); ms el impuesto
correspondiente, segn su potencia en caballos de fuerza (H.P.), dada por la
siguiente tabla; ms un 1% del precio de fbrica por gastos administrativos.

Potencia Impuesto
6 10% del precio de fbrica
> 6, pero 12 15% del precio de fbrica
> 12, pero 18 20% del precio de fbrica
> 18 30% del precio de fbrica

7. Disee un algoritmo que permita: leer una cantidad en pesos mexicanos, convertir
dicha cantidad a dlares americanos y a euros, y visualizar dicha cantidad en las tres
monedas.
8. Disee un algoritmo para obtener la suma de dos vectores coplanares y
concurrentes. Asuma que se da la magnitud y el ngulo C/R al eje X
+
de cada uno
de los vectores. Los ngulos sern dados en grados.


























Fundamentos de programacin
Guinto 2011

35
V.4 Seudocdigo. Es una tcnica estructurada para representar/describir algoritmos. Se
compone de una combinacin de las construcciones de un lenguaje formal de programacin
con proposiciones informales expresadas con el lenguaje natural (para nuestro caso con el
Castellano/Espaol). Al seudocdigo tambin se le conoce como Lenguaje estructurado,
Seudo-lenguaje, Lenguaje algortmico, Program Design Languaje = Lenguaje de diseo de
programas Es un lenguaje de especificacin o descripcin de algoritmos. El uso de tal
lenguaje hace el paso de codificacin final (esto es, la traduccin a un lenguaje de
programacin) relativamente fcil.

El pseudocdigo naci como un lenguaje similar al lenguaje natural y es un medio para
representar bsicamente las estructuras de control de programacin estructurada. Se
considera un primer borrador, dado que el pseudocdigo tiene que traducirse
posteriormente a un lenguaje de programacin.

La ventaja del pseudocdigo es que en su uso en la planificacin de un programa, el
programador se puede concentrar en la lgica y en las estructuras de control y no
preocuparse de las reglas de un lenguaje especfico. Es tambin fcil modificar el
pseudocdigo si se descubren errores o anomalas en la lgica del programa, adems de
todo esto es fcil su traduccin a lenguajes de programacin.

Para el caso de una solucin va lenguaje de programacin, el seudocdigo se forma con
frases que representan las acciones que un lenguaje de programacin puede llevar a cabo.
Las operaciones bsicas que una computadora puede realizar, mediante un lenguaje de
programacin son:

a) Aceptar datos.
b) Asignar datos a una localizacin de memoria.
c) Sumar dos cantidades.
d) Restar una cantidad de otra.
e) Multiplicar dos cantidades.
f) Dividir una cantidad entre otra.
g) Comparar datos y tomar decisiones, basadas en el resultado lgico de la
comparacin.
h) Copiar un dato de una localizacin de memoria a otra.
i) Mostrar datos y/o informacin en pantalla.
j) Imprimir datos y/o informacin.
k) Activar o desactivar archivos.
l) Etc.

Esto es, algunas de las instrucciones para un seudocdigo pueden ser las siguientes:

1) De tipo Entero: lista de variables
De tipo real: lista de variables
De tipo carcter: lista de variables
Fundamentos de programacin
Guinto 2011

36
Entero: lista de variables
Real: lista de variables
Etc.

2) Leer (lista de variables)
Aceptar (lista de variables)
Introducir (lista de variables)

3) Asignar expresin a lista de variables

4) Variable = Expresin.

5) Repetir mientras condicin
Instrucciones
Termina repetir

6) Repetir para var = Exp1, Exp2, Exp3
Instrucciones
Termina repetir

7) Repetir para var = 1, 2, N
Instrucciones
Termina repetir

8) Desplegar (lista de expresiones)
Mostrar (lista de expresiones)

9) Imprimir (Lista de expresiones)
Escribir (Lista de expresiones)

10) Si condicin Entonces
Instrucciones
[de otro modo o si no
instrucciones]
Termina si







Fundamentos de programacin
Guinto 2011

37
11) Realizar segn condicin
Caso condicin 1
instrucciones
Caso condicin 2
Instrucciones
.
.
.
[de otro modo o si no
instrucciones]
Termina realizar segn



PROPUESTA DE FORMATO PARA REPRESENTAR/DESCRIBIR UN ALGORITMO
MEDIANTE EL USO DE SEUDOCDIGO

ALGORITMO:
OBJETIVO O DESCRIPCIN:
REALIZ:
FECHA ELABORACIN
FECHA ACTUALIZACIN
1. [Comentarios] //Comentarios
instrucciones
2. [Comentarios] //Comentarios
instrucciones
3. [Comentarios] //Comentarios
Instrucciones
.
.
.
4. [Terminar]
Fin






Ejemplos: Ver pags. 43 y 44.
Fundamentos de programacin
Guinto 2011

38

V.5 Diagramas de Warnier

Es una tcnica estructurada para representar/describir algoritmos. Se fundamenta en la
utilizacin del algebra Booleana y la teora de conjuntos.


Simbologa:


(Llave)
Denota a un bloque de informacin jerarquizada, que pueden ser
datos o acciones. De derecha a izquierda, denota los niveles de
abstraccin. De arriba abajo, muestra la secuencia y las relaciones
lgicas entre los elementos considerados.






(OR Exclusivo)
Indica ocurrencia condicional de una accin o grupo de acciones.




(R)

(Repeticin)
La informacin entre los parntesis (variable simblica o cantidad
numrica) indica el nmero de veces (repeticin) que ocurrira una
estructura.




_________

(Barra)
Indica negacin de una condicin.






(Conector y/o
identificador)
Se usa para indicar un bloque de instrucciones, descrito en otra
parte o para darle un nombre al algoritmo. Adentro, puede llevar un
nmero o identificador de procedimiento o subprograma.




*
Indica expresin condicional de fin de ciclo (se lee hasta que)
Fundamentos de programacin
Guinto 2011

39
(Fin)
Las construcciones bsicas de los algoritmos (Secuenciacin, bifurcacin y repeticin, ver
II.6), con un diagrama de Warnier, se disean de la siguiente manera:



a) Secuenciacin


PROCESO 1
PROCESO 2
PROCESO 3
.
.
.
PROCESO N




b) Bifurcacin




CONDICIN




___________
CONDICIN
INSTRUC. 1
INSTRUC. 2
.
.
INSTRUC. N




INSTRUC. I
INSTRUC. ii
.
.
INSTRUC. m














Fundamentos de programacin
Guinto 2011

40



c) Repeticin

INICIALIZACIN
DE LA VARIABLE
DE CONTROL





CICLO
(R)
ESTATUTOS/INSTRUCCIONES
(CUERPO DEL CICLO)



MODIFICACIN DE LA
VARIABLE DE CONTROL


* CONDICIN







Ejemplos: Ver pags. 43 y 44.




















Fundamentos de programacin
Guinto 2011

41

V.6 Diagramas de Nassi-Shneiderman (N-S)

Son una herramienta alternativa para el diseo estructurado de algoritmos. Tambin se les
conoce como: Diagramas de flujo estructurado, Cartas de Nassi-Shneiderman, Diagramas
N-S o Diagramas de Chapin.

Los diagramas N-S son compatibles con otras tcnicas que se usan para el diseo de
algoritmos, tales como: Diagramas de Warnier, Seudocdigo, Metodologa de Jackson y
Diagramas Hipo (Hierarchical Input Proccesing Output).


Simbologa:



Representa procesos, tales como:
asignaciones, invocaciones o cualquier otra
operacin secuencial. Adems puede anidar a
otros smbolos.







Usado para representar la secuenciacin.
Dentro de una actividad secuencial, cada
proceso puede tener cualquier dimensin,
siempre y cuando no sea mayor a una pgina







Usado para representar la bifurcacin. En el
tringulo superior se tiene la condicin. En los
tringulos inferiores se tiene los caminos
alternos.










Fundamentos de programacin
Guinto 2011

42



Usado para representar la repeticin. Prueba
la condicin antes de entrar al cuerpo del ciclo



Usado para representar bifurcacin mltiple.
Requiere que el diseador se asegure que las
condiciones son mutuamente excluyentes y
que se cubren todas las condiciones de prueba
necesarias.


Los diagramas N-S han probado ser tiles en todas las fases de desarrollo de programas,
especialmente en el diseo de algoritmos, ya que proporcionan un lenguaje elegante y
simple que intencionalmente es compatible con los mtodos y objetivos de la programacin
estructurada.

Los programadores que aprenden a disear algoritmos con esta tcnica nunca desarrollan
malos hbitos que otras notaciones si permiten. Puesto que no ms de 15 a 20 smbolos
pueden dibujarse en una pgina, el diseador debe modularizar su algoritmo en secciones
significantes. Las tentaciones de usar conectores fuera de pgina son eliminadas.

La facilidad con la cual un diagrama de flujo estructurado (diagrama N-S) puede ser
traducido a un programa es agradablemente sorprendente.











Fundamentos de programacin
Guinto 2011

43
EJEMPLOS:

1. Un sistema de ecuaciones lineales de la forma:

ax + by = c
dx + ey = f

puede resolverse utilizando las siguientes frmulas:

bd ae
bf ce
x

=
bd ae
cd af
y

=

Disee un algoritmo para leer los coeficientes a, b, c, d, e y f e imprimir la solucin (x e
y). Existen algunos casos para los cuales no funcione esto? De ser cierto, considrelo
en el algoritmo.

2. Disee un algoritmo para calcular el total que una persona debe pagar en una llantera, si
el precio de cada llanta es de $800 si se compran menos de 5 llantas y de $700 si se
compran 5 ms llantas.
3. En un supermercado se hace una promocin, mediante la cual el cliente obtiene un
descuento, dependiendo de un nmero aleatorio que l escoge al azar. Si el nmero
escogido es menor de 74, el descuento es de 15% del total de la compra. Si es mayor o
igual a 74 el descuento es de 20 %. Disee un algoritmo para obtener el descuento del
cliente.
4. Disee un algoritmo para calcular el nmero de pulsaciones que debe tener una persona
por cada 10 segundos de ejercicio aerbico. La frmula que se aplican son las
siguientes:

Sexo femenino_: Num. de pulsaciones = (220- edad) / 10
Sexo masculino: Num. de pulsaciones = (210 edad) / 10

5. Una compaa de seguros est abriendo un departamento de finanzas y estableci un
programa para captar clientes, que consiste en lo siguiente: si el monto por el que se
efecta la fianza es menor que $50 000, la cuota a pagar ser por el 3% del monto, y si
el monto es mayor o igual que $50 000, la cuota a pagar ser del 2% del monto. Disee
un algoritmo para determinar cual ser la cuota que debe pagar un cliente.
6. En una escuela, la colegiatura de los alumnos se determina segn el nmero de materias
que cursan. El costo de cada materia es el mismo. Se ha establecido un programa para
estimular a los alumnos, el cual consiste en lo siguiente: si el promedio de
calificaciones, obtenido por el alumno en el ltimo perodo, es mayor o igual a 9, se le
har un descuento del 30% sobre la colegiatura y no se le cobrar IVA; si ese promedio
Fundamentos de programacin
Guinto 2011

44
es menor a 9, deber pagar la colegiatura completa y el IVA correspondiente (igual a un
16 % de la colegiatura). Disee un algoritmo que permita determinar cuanto debe pagar
un alumno.
7. Una empresa de bienes races ofrece casas de inters social, bajo las siguientes
condiciones: si los ingresos mensuales del comprador son menores de $8 000, el
enganche ser de 15% del costo de la casa y el resto se distribuir en pagos mensuales,
a pagar en diez aos. Si los ingresos mensuales del comprador son mayor o igual a $8
000, el enganche ser de 30% del costo de la casa y el resto se distribuir en pagos
mensuales, a pagar en siete aos. Disee un algoritmo para obtener cuanto debe pagar
un comprador por concepto de enganche y cuanto por cada pago parcial.
8. El gobierno ha establecido el programa SAR (Sistema de Ahorro para el Retiro) que
consiste en que las empresas, de manera obligatoria, deben depositar en una cuenta
bancaria un porcentaje del salario de los trabajadores (para este ejemplo supongamos un
2%). Adicionalmente, los trabajadores pueden solicitar a la empresa que deposite
directamente una cuota fija o un porcentaje de su salario en la cuenta del SAR, la cual le
ser descontada de su pago mensual. Disee un algoritmo para determinar la cantidad
total de dinero que estar depositando un trabajador a su cuenta del SAR y el pago
mensual que ste recibir.
9. Disee un algoritmo para determinar la integral definida de una funcin y = f(x), en el
intervalo [a, b]. Considere que la funcin es continua en ese intervalo. Recuerde, la
integral definida representa el rea bajo la curva y = f(x), acotada por la rectas x = a y x
= b.
10. Diga usted cual ser el valor de la variable X, despus de la ejecucin del siguiente
segmento de algoritmo:





N=0
X=25
Leer (Y)

Y > 20


______
Y > 20

X=X+3
.
.
.






Leer(N)
Desplegar(X,Y)
X=20





Fundamentos de programacin
Guinto 2011

45
VI. ARREGLOS (ARRAYS) Y CADENAS DE CARACTERES

Objetivo educacional: El alumno ser capaz de utilizar los arreglos para plantear la
solucin de problemas que requieran de esta estructura.


VI.1 Introduccin

Los tipos de datos pueden ser primitivos (simples o estndar) o estructurados (estructuras
compuestas o estructuras de datos). En la unidad II se trataron algunos tipos de datos
simples. Una estructura de datos es una coleccin de datos que se caracteriza por su
organizacin y las operaciones que se definen en ella. Los datos estructurados pueden
organizarse en diferentes estructuras de datos: estticas y dinmicas.

Los datos estructurados soportan el almacenamiento de un conjunto o coleccin de datos.
Una clasificacin de los tipos de datos simples se muestra en la figura II.1 y en la figura
IV.1 se muestra una clasificacin general de los tipos y estructuras de datos.


Figura IV.1 Clasificacin general de los tipos y estructuras de datos


La eleccin de la estructura de datos idnea a utilizar en la solucin de un problema,
depender de la naturaleza del problema mismo y, en menor medida, del lenguaje particular
que se use. Las estructuras de datos compuestas tienen en comn que un identificador
(nombre) puede referenciar a mltiples datos individuales.

Muchas aplicaciones se pueden resolver de una manera ms eficiente haciendo uso de
arreglos. En ausencia del uso de arreglos, algunas aplicaciones requeriran del uso de una
Fundamentos de programacin
Guinto 2011

46
gran cantidad de variables y su manipulacin sera un tanto engorrosa y tediosa. Sin
embargo, el uso de arreglos estticos puede llevar al desperdicio de memoria.

Para el caso de arreglos estticos, stos se deben declarar (reservar espacio en memoria)
antes de compilar el programa, lo cual consiste en especificar la mxima cantidad de
memoria que utilizar el programa para dicha estructura de datos.

En los tipos de datos simples, cada variable representa a un solo elemento. En los tipos de
datos estructurados, un identificador (nombre) puede representar mltiples datos
individuales, pudiendo cada uno de stos ser referenciado de manera independiente.


VI.2 Definicin

Arreglo: Es un conjunto, coleccin o secuencia, finito de elementos del mismo tipo, a
cuyos elementos se hace referencia con un mismo nombre (identificador) y una posicin
(ndice(s)) particular para cada dato o elemento. Es un conjunto finito y organizado de
elementos homogneos.


Nivel Lgico

Es una estructura de datos con un nmero fijo de nodos. Al conjunto de nodos se le
identifica con un nombre y a los nodos con uno o ms ndices.



Almacenamiento

Operaciones
(Funciones de acceso)
Extraccin



Los arreglos se caracterizan por:

Almacenan los elementos en posiciones contiguas de memoria
Tienen un mismo nombre de variable que representa a todos los elementos. Para
hacer referencia a esos elementos es necesario utilizar un ndice que especifica el
lugar que ocupa cada elemento dentro del arreglo.


Unidimensionales (Vectores)
Tipo de Bidimensionales (Matrices)
Arreglos Tridimensionales
Multidimensionales
En lectura.
En asignacin.
Como operando.
En despliegue.
En impresin.
Fundamentos de programacin
Guinto 2011

47
VI.3 Vectores (arreglos o arrays unidimensionales)

Es un arreglo para el cual se requiere de un solo ndice para indicar la posicin de uno de
sus elementos. Es un arreglo de N elementos organizados en una dimensin donde N
recibe el nombre de longitud o tamao del vector. Para hacer referencia a un elemento del
vector se usa el nombre del mismo, seguido del ndice (entre corchetes), el cual indica una
posicin en particular del vector. Por ejemplo:

Vec[x]

Donde:
Vec Nombre del arreglo
x. Numero de datos que constituyen el arreglo

Representacin grfica de un vector

7
8
9
10



A[I]

Nota: Algunos lenguajes de programacin consideran la posicin 0 (cero) para el primer
elemento del vector, en lugar de la posicin 1 (uno).


Almacenamiento:

Aceptar (A[I])
Leer(X[I])
Introducir(R[X[3]])
X[1] = 20
C[i] = x * x + 3


Extraccin:

Var = A [I] + 5
Desplegar (A[I])
Mostrar_en _Pantalla(A[I])
Imprimir(X[j] + 2 * y)


1 2 3 4 5 6 7 8

Vec[
1]
Vec[
2]
Fundamentos de programacin
Guinto 2011

48
Llenado de un Vector:

Hacer para I = 1 a 10
Leer vec[I]
Fin-para


I=1
Hacer mientras I <= 10
Leer vec[I]
I=I+1
Fin-mientras

I=1
Repetir
Leer vec[I]
I = I + 1
Hasta-que I>10


VI.4 Cadenas de caracteres

Una cadena de caracteres es una secuencia de smbolos (dgitos, letras del alfabeto y
caracteres especiales) utilizados para representar un dato o informacin.

Algunos lenguajes de programacin, como es el caso de C, no disponen del tipo de dato
cadena de caracteres; por lo que, para manipular cadenas de este tipo, con el lenguaje
referido se hace uso de arreglos de tipo carcter para almacenarlas, siendo necesario colocar
el carcter \0 al final de cada cadena. Las operaciones ms comunes que se hacen con
cadenas de caracteres son:

a) Creacin de cadenas de caracteres.
b) Determinacin de la longitud de una cadena de caracteres (N de caracteres de la
cadena).
c) Bsqueda.
d) Bsqueda y reemplazo de una subcadena en una cadena.
e) Copia de cadenas.
f) Comparacin de cadenas.
g) Lectura de cadenas.
h) Despliegue o impresin de cadenas.
i) Concatenacin de cadenas.
j) Frecuencia de ocurrencia de una subcadena en una cadena.
k) Convertir maysculas a minsculas (o viceversa) en una cadena.
l) Convertir cadenas a enteros.
m) Etc.
Fundamentos de programacin
Guinto 2011

49
De este modo, los lenguajes de programacin disponen de funciones que permiten
manipular cadenas; sin embargo, en ocasiones es necesario implementar algunas de ellas
para un tipo particular de operaciones con cadenas.


VI.5 Matrices (arreglos bidimensionales)

Es un arreglo de M * N elementos organizados en dos dimensiones donde M es el
numero de filas o reglones y N el numero de columnas.

Para representar una matriz se necesita un nombre de matriz acompaado de dos ndices.
Por convencin, el primer ndice indica la fila (rengln) y el segundo la columna.

Mat [R,C]

Donde R indica el rengln y C indica la columna, del elemento al cual se hace referencia.

Representacin grfica de una matriz

Mat [R,C]

1,1 1,2 1,3 1,4
2,1 2,2 2,3 2.4
3,1 3,2 3,3 3,4
4,1 4,2 4,3 4,4







A[I, J]

Almacenamiento:

Aceptar (A[I,J])
Leer(X[I,J])
Introducir(R[X[3],2])
X[1,5] = 20
C[i,j] = x * x + 3




1 2 3 4 5 6
1
2
3
4
Fila o
Rengln
[R]
Columna
[C]
Fundamentos de programacin
Guinto 2011

50
Extraccin:

Var = A [I,J] + 5
Desplegar (A[R,C])
Mostrar_en _Pantalla(A[R,C])
Imprimir(X[j,i] + 2 * y)


Llenado de una matriz

Por renglones
Hacer para R = 1 a 5
Hacer para C = 1 a 5
Leer Mat [R,C]
Fin-para
Fin-para

Por columnas
Hacer para C = 1 a 5
Hacer para R = 1 a 5
Leer Mat [R,C]
Fin-para
Fin-para

Nota: Para hacer el llenado de una matriz se deben de usar dos variables para los ndices y
se utilizan 2 ciclos, uno para los renglones y otro para las columnas; a estos ciclos se les
llama ciclos anidados (un ciclo dentro de otro ciclo).


VI.6 Arreglos n-dimensionales (de dimensin n)

Son arreglos que requieren n ndices para hacer referencia a uno de sus elementos.
Ejemplos:

A[1,1,2] = 20
Aceptar(Z[3,2,3,I+1])
Imprimir(Z[3,2,3,I+1]/(x+3))










Fundamentos de programacin
Guinto 2011

51
Ejemplos

1. Disee un algoritmo que permita ordenar (en forma ascendente) los elementos de un
arreglo numrico unidimensional.

2. En un arreglo, Entero: CEREAL[12], se ha almacenado el nmero total de toneladas
de cereales cosechados durante cada mes del ao anterior. Disee un algoritmo para
obtener la siguiente informacin:

a) El promedio anual de toneladas cosechadas.
b) El nmero de meses que tuvieron una cosecha superior al promedio anual.
c) El nmero de meses que tuvieron una cosecha inferior al promedio anual.

3. Disee un algoritmo para intercambiar las columnas de un arreglo bidimensional de
N renglones por N columnas. Los elementos de la columna 1 deben intercambiarse
con los de la columna N, Los de la columna 2 con los de la columna N-1, y as
sucesivamente.

4. Se tiene una lista de 50 alumnos con calificaciones obtenidas por cada uno de ellos,
en 3 exmenes diferentes. Disee un algoritmo que permita obtener:

a) El promedio de calificaciones que obtuvo cada alumno
b) El promedio general de calificaciones que obtuvo el grupo en el segundo
examen.

5. Una empresa tiene 10 tiendas, la gerencia de dicha empresa desea procesar los
ingresos semanales (7 das) de las tiendas. Diariamente, las 10 tiendas reportan sus
ingresos totales del da y estos valores se registran en orden. Esto es, los ingresos
del da de la tienda No. 1 se registran primero y a continuacin los de la tienda No.
2, y as sucesivamente. Este proceso se repite diariamente durante la semana.
Disee un algoritmo para determinar la siguiente informacin:

a) Los ingresos totales de cada tienda, durante la semana.
b) El ingreso total por semana de las 10 tiendas.
c) El promedio de ingresos de cada tienda.

6. Una empresa tiene N agentes de ventas. Cada mes, la empresa recibe un reporte de
cada uno de ellos, indicando: el nmero de unidades vendidas de cada uno de 20
productos. Por otro lado, la empresa cuenta con un lista que contiene los precios
unitarios de cada uno de los 20 productos. Disee un algoritmo que:

a) Por cada agente:

Determine los rditos de sus ventas (suma de unidades vendidas
por precios unitarios respectivos).
Determine su salario, igual a 3000.00, ms el 20 % de sus rditos
totales.
Fundamentos de programacin
Guinto 2011

52

b) Por cada uno de los 20 productos:

Determine el total de unidades vendidas.
Determine el rdito total del producto.

7. Suponga que en la memoria del computador se tiene el arreglo DATOS[ I ], de N
elementos numricos. Disee un algoritmo para determinar la diferencia ms grande
entre dos elementos consecutivos.

8. Muestre usted el valor de cada uno de los elementos del arreglo A, despus de la
ejecucin del siguiente segmento de algoritmo:


Mostrar_en_pantalla(Inicializando arreglo)
Repetir para R = 1, 2, , 3
Repetir para C = 1, 2,, 3
A[ R, C ] = 0
Termina repetir
Termina repetir
Mostrar_en_pantalla(Procesando)
Repetir para K = 1, 2, , 3
A[ K, K ] = 1
Si K = 3 entonces
A[ 1, K ] = K ^2.
A[ K, 1 ] = K^2.
Termina si
Termina repetir
Mostrar_en_pantalla(Fin de segmento de algoritmo)
Mostrar_en_pantalla( )
Mostrar_en_pantalla(Para continuar, presione la tecla Enter / Intro)
Leer(CONTINUA)














Fundamentos de programacin
Guinto 2011

53
Problemas propuestos

1) Calcular el promedio de 50 valores almacenados en un vector. Determinar adems
cuantos son mayores que el promedio, imprimir el promedio, el nmero de datos
mayores que el promedio y una lista de valores mayores que el promedio.

2) Llenar dos vectores A y B de 45 elementos cada uno, sumar el elemento uno del vector
A con el elemento uno del vector B y as sucesivamente hasta 45, almacenar el
resultado en un vector C, e imprimir el vector resultante.

3) Llenar un vector de 20 elementos, imprimir la posicin y el valor del elemento mayor
almacenado en el vector. Suponga que todos los elementos del vector son diferentes.

4) Almacenar 500 nmeros en un vector, elevar al cuadrado cada valor almacenado en el
vector, almacenar el resultado en otro vector. Imprimir el vector original y el vector
resultante.

5) Almacenar 300 nmeros en un vector, imprimir cuantos son ceros, cuantos son
negativos, cuantos positivos. Imprimir adems la suma de los negativos y la suma de los
positivos.

6) Almacenar 150 nmeros en un vector, almacenarlos en otro vector en orden inverso al
vector original e imprimir el vector resultante.

7) Se tienen almacenados en la memoria dos vectores M y N de cien elementos cada uno.
Hacer un algoritmo que escriba la palabra Iguales si ambos vectores son iguales y
Diferentes si no lo son. Sern iguales cuando en la misma posicin de ambos vectores
se tenga el mismo valor para todos los elementos.

8) Se tiene el vector A con 100 elementos almacenados. Disee un algoritmo que escriba
SI si el vector esta ordenado ascendentemente o NO si el vector no esta ordenado

9) Disee un algoritmo que lea un nmero cualquiera y lo busque en el vector X, el cual
tiene almacenados 80 elementos. Escribir la posicin donde se encuentra almacenado el
nmero en el vector o el mensaje NO si no lo encuentra. Bsqueda secuencial.

10) Disee un algoritmo que lea dos vectores A y B de 20 elementos cada uno y multiplique
el primer elemento de A con el ultimo elemento de B y luego el segundo elemento de A
por el diecinueveavo elemento de B y as sucesivamente hasta llegar al veinteavo
elemento de A por el primer elemento de B. El resultado de la multiplicacin
almacenarlo en un vector C.

11) Disee un algoritmo que almacene en un vector llamado FIB[100] los 100 primeros
nmeros de la serie fibonacci.

Fundamentos de programacin
Guinto 2011

54
12) Hacer un algoritmo que almacene nmeros en una matriz de 5 * 6. Imprimir la suma de
los nmeros almacenados en la matriz.

13) Hacer un algoritmo que llene una matriz de 10 * 10 y determine la posicin [renglon
,columna] del numero mayor almacenado en la matriz. Los nmeros son diferentes.

14) Hacer un algoritmo que llene una matriz de 7 * 7. Calcular la suma de cada rengln y
almacenarla en un vector, la suma de cada columna y almacenarla en otro vector.

15) Hacer un algoritmo que llene una matriz de 20 * 20. Sumar las columnas e imprimir
que columna tuvo la mxima suma y la suma de esa columna.

16) Hacer un algoritmo que llene una matriz de 5 * 5 y que almacene la diagonal principal
en un vector. Imprimir el vector resultante.

17) Hacer un algoritmo que llene una matriz de 10 * 10 y que almacene en la diagonal
principal unos y en las dems posiciones ceros.

18) Hacer un algoritmo que llene una matriz de 6 * 8 y que almacene toda la matriz en un
vector. Imprimir el vector resultante.

19) Hacer un algoritmo que llene una matriz de 8 * 8, que almacene la suma de los
renglones y la suma de las columnas en un vector. Imprimir el vector resultante.

20) Hacer un algoritmo que llene una matriz de 5 * 6 y que imprima cuantos de los nmeros
almacenados son ceros, cuantos son positivos y cuantos son negativos.

21) Disee un pseudocdigo que escriba el nmero de la hilera cuya suma sea mayor que
las dems hileras. Suponga que todas las hileras suman diferente cantidad.

22) Se tiene almacenada la matriz M (50,5) la cul contiene la informacin sobre las
calificaciones de la materia de DISEO DE ALGORITMOS. Disee un algoritmo que
imprima:
A).- Cantidad de alumnos que aprobaron la materia.
B).- Cantidad de alumnos que tienen derecho a nivelacin.
C).- El (o los) numero (s) de control de lo(s) alumno(s) que haya (n) obtenido la mxima
calificacin final.
Fundamentos de programacin
Guinto 2011

55
23) El departamento de polica de la ciudad de Tuxtepec ha acumulado informacin
referente a las infracciones de los lmites de velocidad durante un determinado periodo
de tiempo. El departamento ha dividido la ciudad en cuatro cuadrantes y desea realizar
una estadstica de las infracciones a los lmites de velocidad en cada uno de ellos. Para
cada infraccin se ha preparado una tarjeta que contiene la siguiente informacin:
- numero de registro del vehculo;
- cuadrante en el que se produjo la infraccin
- limite de velocidad en milla por hora

Disee un diagrama para producir 2 informes; el 1o. Que contiene una lista de la multa de
velocidades recolectadas, donde la multa se calcula como la suma del costo de la corte
($20,000) mas $ 1,250 por cada mph que exceda la velocidad limite. Prepare una tabla con
los siguientes resultados:

INFRACCIONES A LOS LIMITES DE VELOCIDAD

Registro del Velocidad Velocidad Multa
vehculo registrada (MPH) limite

Este informe debe ser seguido de un segundo en el cual se proporcione un anlisis de las
infracciones por cuadrante. Para cada uno de los 4 cuadrantes mencionados, debe darse el
nmero de infracciones y la multa promedio.

24) El dueo de una cadena de tiendas de artculos deportivos desea controlar sus ventas
por medio de una computadora. Los datos de entrada son:

a) El nmero de la tienda (1 a 50)
b) Un nmero que indica el deporte del articulo (1 a 20)
c) El costo del artculo.

Hacer un pseudocdigo que escriba al final del da lo siguiente:

1. Las ventas totales en el da para cada tienda
2. Las ventas totales para cada uno de los deportes.
3. Las ventas totales de todas las tiendas.












Fundamentos de programacin
Guinto 2011

56
VII. MANEJO MODULAR Y RECURSIN

OBJETIVO: El alumno conocer los conceptos de mdulo y de recursin, y disear
algoritmos haciendo uso de mdulos.

VII.1 Introduccin. La programacin modular se caracteriza por la subdivisin de un
problema en mdulos independientes (divide y triunfars), que pueden ser diseados y
construidos de manera tal que sus modificaciones no afecten a los dems mdulos. De este
modo, un problema complejo se puede dividir en pequeos problemitas. Estos problemitas
se conocen como Mdulos y a los programas implementados con algn lenguaje de
programacin se les llama subprogramas (procedimientos y/o funciones). Entonces, los
mdulos que se pueden encontrar son de dos tipos:

1. Procedimientos
2. Funciones

Para el caso de diseo, a estos mdulos se les denomina subalgoritmos y funciones o
procedimientos y funciones.

Un mdulo es una parte independiente que ejecuta una actividad o tarea Es un
segmento, una rutina, una subrutina, un subalgoritmo, un conjunto de instrucciones, un
conjunto de sentencias, etc., que hace algo.

Caractersticas:

Puede transferir temporalmente el control a otro mdulo.
Cada mdulo debe devolver el control al mdulo del cual fue llamado.
Los resultados producidos por un mdulo pueden ser utilizados por otro, cuando se
transfiere el control a este ltimo.
Dado que los mdulos son independientes, diferentes diseadores y/o
programadores pueden trabajar simultneamente.
Etc.


VII.2 Funciones. En programacin, una funcin es un conjunto de instrucciones que
realizan una actividad o tarea. Utiliza datos o argumentos para llevar a cabo operaciones y
generar un resultado.


Datos(s)


Resultado

Anteriormente vimos que los lenguajes de programacin cuentan con funciones internas,
desarrolladas por los diseadores de esos lenguajes. Algunas de ellas son:


Funcin
Fundamentos de programacin
Guinto 2011

57
sin(X)
cos(X)
sqrtT(X)
Etc.

Sin embargo, con la mayora de los lenguajes de programacin es posible declarar y definir
funciones especiales que deseen utilizar los diseadores de algoritmos y/o programadores.

Para la definicin de una funcin, en el caso de diseo de algoritmos, podemos hacerlo de
la siguiente manera:

TipoDatoRegresa FUNCION NombreFuncin(Tipo: Param1, Tipo Param2)
Tipo: VariablesLocales
Instruccin(es)
Regresar(EXP)
Termina funcin NombreFuncin

NOTA: La palabra FUNCION es opcional


Ejemplos:

1. Definir una funcin para obtener 3X
2
+ 6X 3

Real FUNCION F(Real: X)
Regresar(3 * X ^ 2 + 6 * X 3)
Termina funcin F

2. Defina una funcin para obtener

=
N
i
i
X
1


Real Suma (Real: X[ ], Entero: N)
Real: SUM = 0
Entero: I
Repetir para I = 1,2,,N
SUM = SUM + X[ I ]
Termina repetir
Regresar(SUM)
Termina funcin Suma

Nota: Observe que la palabra FUNCION es opcional y, por lo que, en la definicin de esta
funcin se decidi no ponerla.


Fundamentos de programacin
Guinto 2011

58
VII.3. Procedimientos. En computacin, un procedimiento es un conjunto de instrucciones
para hacer algo. Generalmente, un procedimiento recibe datos y se puede decir que regresa
nada.




Para la definicin de un procedimiento, en el caso de diseo de algoritmos, podemos
hacerlo de la siguiente manera:

PROCEDIMIENTO NombreProcedimiento(Tipo: Param1, Tipo Param2)
Tipo: VariablesLocales
Instruccin(es)
Regresar(EXP)
Termina Procedimiento NombreProcedimiento

NOTAS:

1. Obsrvese que no hay TipoDatoRegresa
2. La palabra PROCEDIMIENTO es opcional


Ejemplos: ver en clases




















Fundamentos de programacin
Guinto 2011

59
VII.4 Recursividad

Recursividad es la definicin de un objeto en trminos de un caso ms simple de si mismo.
En programacin, una funcin recursiva es uan funcin que se llama a si misma.

Ejemplo 1: El factorial de un nmero n se define como el producto de todos los enteros
entre 1 y n, ambos incluidos. As, el factorial de 4 es igual a 1 x 2 x 3 x 4 = 24. Por
definicin, el factorial de 0 es igual a 1.

Con frecuencia se usa la notacin n! para indicar el factorial de un nmero n. Esto es:

3! = 1 x 2 x 3 = 3 x 2 x 1 = 6

En consecuencia:


1, si n = 0
n! =
n * (n - 1) * (n - 2) ** 1, si n > 0


De este modo, un algoritmo iterativo para determinar n! puede ser el siguiente:


aceptar(n)
prod = 1
repetir para x = n, n-1, n 2, , 1
prod = prod * x
terminar repetir
visualizar(prod)


Observando la definicin de factorial, es obvio que para cualquier n > 0, n! = n * (n 1)!
Esto es:


1, si n = 0
n! =
n * (n - 1)!, si n > 0



Entonces, una funcin recursiva que permita obtener el factorial de n se presenta a
continuacin:



Fundamentos de programacin
Guinto 2011

60
Real FUNCION factorial(entero: n)
si n = 0
regresar( 1 )
si no
regresar(n * factorial(n 1))
termina si
termina funcin factorial








































Fundamentos de programacin
Guinto 2011

61
Ejemplo 2: La bsqueda binaria

Considrese un vector en el cual se han colocado los datos en orden ascendente. Al proceso
que se usa para encontrar una entrada en el arreglo se llama bsqueda. Si el arreglo slo
contiene un elemento, el problema es trivial; en otro caso, comprese el elemento que se
busca con el elemento central del arreglo. Si son iguales, se ha concluido con xito la
bsqueda. Si el elemento central es mayor, se repite el proceso de bsqueda en la primera
mitad del arreglo; en caso contrario, se repite el proceso con la segunda mitad. Obsrvese
que cada vez que se realiza una comparacin, se divide en dos el nmero de elementos que
an se usan para la bsqueda. Este mtodo se llama bsqueda binaria, debido a que el
arreglo donde se realiza la bsqueda se divide en dos parte iguales.

Obsrvese que, de manera natural, se defini la bsqueda binaria en forma recursiva. Si el
elemento que se busca no es igual al central del arreglo, las instrucciones indican buscar en
un subarreglo, utilizando el mismo mtodo. As, el mtodo de bsqueda se define en
trminos de s mismo, con un arreglo ms pequeo como entrada.

Finalmente, se presenta una funcin recursiva para la bsqueda binaria:

Algoritmo: Funcin_Busbin
Objetivo: Realizar una bsqueda binaria en un arreglo unidimensional ordenado.
Realiz: Dr. Guinto
Fecha:______

Entero FUNCION Busbin(Real: que, Entero: inicio, Entero: fin, Real: x[])
Entero: medio
si inicio > fin
regresar( -1 )
si no
medio = ( inicio + fin ) / 2
si que = x[ medio ] entonces
regresar( medio )
si no
si que < x[ medio ] entonces
fin = medio 1
si no
inicio = medio + 1
termina si
regresar( Busbin(que, inicio, fin, x[ ] )
termina si
termina si
termina Busbin





Fundamentos de programacin
Guinto 2011

62
VIII. ARCHIVOS

VIII.1 Introduccin

De manera general, un archivo es una coleccin u organizacin fsica, o lgica, de datos. Es
la unidad principal de almacenamiento secundario de un computador. Un archivo es
utilizado por el sistema operativo para distinguir entre un conjunto de datos o informacin y
otro. Todo archivo posee un nombre. Cada archivo contiene cdigos y otros datos o
informacin.

Los archivos de datos se pueden almacenar en diferentes dispositivos de memoria
secundaria.


VIII.2 Clasificacin de archivos

Existen diferentes formas de cmo clasificar a los archivos:

A) Por su acceso. Existen dos categoras generales de archivos
A.1) Secuenciales. Bsqueda en serie de registros en un archivo, hasta encontrar el
que se busca.
A.2) Directos o aleatorios. Los registros tienen una ubicacin especfica. La
ubicacin de cualquiera de ellos se puede determinar sin una bsqueda excesiva.

B) Por su contenido. Dependiendo de la aplicacin se pueden clasificar en:
B.1) General de datos
B.2) De ndices
B.3) De tablas
B.4) De textos
B.5) De imgenes
B.6) Etc.

C) Por su forma de procesamiento:
C.1) De entrada
C.2) De Salida
C.3) Intermedio/De proceso

D) Etc.


VIII.3 Composicin de los archivos de datos.

En un sistema de informacin, un archivo es un conjunto de registros. A su vez, los
registros contienen campos especficos de datos. Aunque cada registro puede contener
caractersticas comunes a otros registros del archivo, es una entidad distinta y especfica,
generalmente que se identifica por un cdigo nico. Hay varias tcnicas para disponer los
Fundamentos de programacin
Guinto 2011

63
registros dentro de los archivos, de acuerdo con las necesidades especficas de
procesamiento e informacin.


VIII.4 Definicin de registros

Para el diseo de algoritmos, un registro puede definirse de la siguiente manera:
Identificador_de_Registro = REGISTRO
Tipo1: Identificador_de_Campo1
Tipo2: Identificador_de_Campo2
Tipo3: Identificador_de_Campo3

Tipon: Identificador_de_Campon
Fin de definicin de registro Identificador_de_Registro

Ejemplos:

a) Fecha = REGISTRO
Entero: Dia
Entero: Mes
Entero: Ao
Fin de definicin de registro Fecha

b) Domicilio = REGISTRO
Cadena de caracteres: Calle
Entero: Numero
Cadena de caracteres: Colonia
Entero sin signo: CodigoPostal
Cadena de caracteres: Ciudad
Cadena de caracteres: Pais
Fin de definicin de registro Domicilio

c) Etc.


VIII.5 Declaracin de variables tipo registro

La declaracin de variables tipo registro se realiza de igual manera a como se declara
una variable simple, ejm:

Recordemos que una variable N, de tipo entero, se declara de la siguiente manera:

Entero: N

De este modo, para declarar las variables F1 y F2, de tipo Fecha, y la variable Dom, de
tipo Domicilio, hacemos lo siguiente:

Fundamentos de programacin
Guinto 2011

64
Fecha: F1,F2
Domicilio: Dom


VIII.6 Acceso a los campos de un registro

Como un registro es un dato estructurado, no puede accesarse directamente como un
todo, sino que debe especificarse qu elemento (campo) del registro interesa. Para ello,
se sigue la siguiente sintaxis:

Variable_registro.Identificador_de_Campo

Donde: Variable_registro es una variable de tipo registro e Identificador_de_Campo es
un identificador del campo deseado.

Ejemplos:

A) Para leer los tres campos de la variable F1, de tipo Fecha (ver definicin del registro
Fecha y declaracin de variable F1):

Leer(F1.Dia,F1.Mes,F1.Ao)

B) Para Imprimir algunos campos de la variable Dom, de tipo Domicilio (ver
definicin del registro Domicilio y declaracin de variable Dom):

Imprimir(Dom.Calle,Dom.Numero,Dom.Colonia,Dom.CodigoPostal)

C) Para asignar datos

A.Saldo = A.Saldo + Algo
N.Nombre = Juan Prez
C.Moroso = V















Fundamentos de programacin
Guinto 2011

65



BIBLIOGRAFA

1. Joyanes Aguilar, Fundamentos de programacin, Mc Graw Hill
2. Cair, O., Metodologa de la programacin, Mc Graw Hill
3. N. Krinitski, Algoritmos a nuestro alrededor, Mir Mosc.
4. Alcalde y Morera, Metodologa de la programacin, Mc Graw Hill.
5. Bores, R. y Romn, R., Computacin, metodologa, lgica computacional y
programacin, Mc Graw Hill.
6. Deitel, H. y Deitel P., Cmo programar en C++, Pearson Prentice Hall
7. Joyanes, L. y Castn, H., C++, Iniciacin y referencia
8. Barkakati, N., Turbo C++, Bible, Sams
9. Niklaus Wirth, Algoritmos + Estructuras de datos = Programas, MPF-PC
10. Harel D., Algorithmics the sipirit of computing, Addison Wesley
11. Base S., Computer Algorithms: Introduction to desing and analisis, Addison Wesley.
Co.
12. Maduer U., Introduction to algorithms: A creative aproach, addison wesley Co.
13. Lpez Romn, programacin estructurada: un enfoque algortmico, Alfa Omega
14. Davara Rodrguez et al., Pearson Educacin, Prentice Hall, Addison Wesley.
15. Tremblay and Bunt, Introduccin a la ciencia de las computadoras, enfoque
algoritmico, Mc Graw Hill.
16. Rumbaugh, Jacobson y Booch, El lenguaje unificado de modelado: manual de
referencia, Addison Wesley.

S-ar putea să vă placă și