Sunteți pe pagina 1din 37

1

Programación
de Computadoras
———————————————————————
UTN: Universidad Tecnológica Nacional
Facultad Regional Concepción del Uruguay
Entre Rios, Argentina
Departamento de Electromecánica
———————————————————————
Anibal J. Díaz1
anibaljdiaz@yahoo.es

1 Este trabajo se ha desarrollado específicamente para la Cátedra de programación de 2do año de la Carrera de Ingeniería Electrome-

cánica, de la UTN Universidad Tecnológica Nacional, Facultad Regional Concepción del Uruguay, Entre Ríos, Argenina
2
Programación de Computadoras

Anibal J. Díaz

4 de agosto de 2016
2
Índice general

1. Conceptos Básicos 5
1.1. Introducción. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2. La computadora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2.1. Arquitectura de la CPU de Von Newman . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2.2. Organización física de una computadora . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2.3. Dispositivos de entrada / salida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2.4. Memoria central . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2.5. Unidad de Memoria : Byte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2.6. Tecnología del bit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2.7. Unidad Central de Proceso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2.8. Supercomputación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3. Sobre el lenguaje. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3.1. Interfaz de programación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2. Resolución de Problemas Computables 9


2.1. Tratamiento de un problema computable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1.1. Resolución de problemas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1.2. Formulación del problema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.1.3. Planteamiento del Problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.1.4. Análsisi del problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.1.5. Diseño y prueba . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.1.6. Codificación e interpretación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.1.7. Implementación del sistema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.1.8. Ciclo de vida de un programa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.2. Paradigmas de Programación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.3. Metodología de Programación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.3.1. Programación Modular. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.3.2. Programación Estructurada.(PE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.3.3. Ventajas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.3.4. Desventajas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.4. Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.4.1. Características de los algoritmos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.4.2. Seudocódigo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.4.3. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.5. Problemas propuestos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

3. Programa. 31
3.1. Concepto de Programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.1.1. Componentes de un programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.1.2. Elementos auxiliares de un programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.1.3. Datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

3
4 ÍNDICE GENERAL
Capítulo 1

Conceptos Básicos

1.1. Introducción.

Programar es una actividad compleja que combina procesos teóricos, de razonamiento (propios de la lógica),
experimentales (tipicos de la ciencia) y de diseño (propios de la ingeniería). En este texto introducimos al estu-
diante en la metodología de programación de computadoras pasando por los conceptos básicos, las estructuras
lógicas y las características del lenguaje C++.
La problemática abordada por esta materia se relaciona con el área de desarrollo de software aplicados a la
solución de problemas tecnológicos. La resolución automática de un problema obliga a analizar en forma
exhaustiva las diferentes condiciones y situaciones que puede presentar un problema.
La forma que adopta la solución es un algoritmo1 , que computa (ejecuta) la función estudiada y que por su
complejidad debe verificarse metódicamente para asegurar su corrección y validez.
El instrumento que formaliza este algoritmo es un lenguaje, el cual tiene reglas, estructuras y operaciones
que sirven para que el procesador entienda las instrucciones recibidas, las ejecute y obtenga los resultados
esperados.
Esta curso tiene como finalidad que el profesional logre usar la computadora como una herramienta, no solo
para procesar texto o usar un utilitario, sino que sea capaz de diseñar, codificar, compilar, ejecutar, depurar
e implementar programas de computadora que le sirvan para resolver problemas específicos, más complejos
que los realizables en una simple calculadora. De esta forma se tenderá a que el estudiante logre adquirir
las capacidades de razonamiento lógico apropiadas no solo para estas actividades de resolución de problemas
sino que le sirva de base para la comprensión de los objetos de trabajo y desarrollar la capacidad profesional
de abstracción requerida del ingeniero.
Los tipos de problemas que este curso abarcará son los que se generan en el campo de las matemáticas, la física
y de la tecnología en la ingeniería electromecánica.

1.2. La computadora
La Computadora es una máquina electronica que recibe y procesa datos para convertirlos en información
útil. Como máquina electrónica es una colección de circuitos integrados y componentes discretos relacionados
que bajo las órdenes de un operador puede ejecutar una gran variedad de instrucciones que son ordenadas,
planificadas y sistematizadas en funciòn de una ámplia gama de aplicaciones prácticas llamadas programas.
Se diferencia de la calculadora no programable en que es una máquina de propósito general, lo cual significa
que por tener una memoria donde almacenar los programas que se ejecutan, se pueden realizar diferentes
tareas sin necesidad de tener que cambiar la estructura de la computadora. Esto se debe principalmente a los
trabajos de Von Newman y a su arquitectura.

1 Conjunto de reglas operatorias cuya aplicación permite resolver un problema tecnológico a través de un número finito de operaciones.

Diccionario El Pequeño Larousse Ilustrado 2011, 17ma Edición

5
6 CAPÍTULO 1. CONCEPTOS BÁSICOS

1.2.1. Arquitectura de la CPU de Von Newman

Todas las computadoras desarrolladas hasta 1944


eran de propósito específico, es decir que podían ha-
cer correr un solo programa o que resolvían un so-
lo problema computacional. Hasta la aparición de
la ENIAC a a finales de 1944 que podía realizar di-
ferentes programas pero con el problema que las
instrucciones que se le proporcionaban a la compu-
tadora eran por medio de alambres que ligaban di-
ferentes actuadores. Von Newman, un brillante ma-
temático, pensó que esa no era una forma prácti-
ca de proporcionar instrucciones a la computadora.
Pensó que las mismas podían guardarse en el inte-
rior de la computadora en un área que denominó
memoria.
a ”Electronic Numerical Integrator And Computer (ENIAC) fué

desarrollada por la Universidad de Pensylvania y el departamento de Figura 1.1: Arquitectura


Defensa de los Estados Unidos de Norteamérica, siendo Eckert el inge-
niero en jefe y Mauchly consultor principal": Fundamentos de Progra-
mación c/c++. 4ta edición. Ernesto Peñaloza Romero. Ed. Alfaomega.
México 2004.

Este modelo se utiliza hasta la fecha como base para la construcción de computadoras. Por otro lado el concepto
de instrucción almacenada es el pilar del software moderno. Esta estructura implica que la máquina debe
tomar una de las instrucciones de la unidad de entrada. Luego se transfiere a la memoria de la computadora
y de allí a la unidad de control, la cual interpreta el significado de la instrucción y auxiliada por la unidad
aritmético-lógica, la ejecuta. El resultado se envía a la unidad de salida donde podrá ser leido por el operador
de la computadora.2

1.2.2. Organización física de una computadora


Como se observa en la Figura 1.1 una computadora consta de :
1- Dispositivos de entrada
2- Unidad de Memoria
3- Unidad de control
4- Unidad aritmético lógica
5- Unidades de salida

1.2.3. Dispositivos de entrada / salida


Los dispositivos de entrada/salida (E/S) (en inglés, Input / Output I/O son los encargados de la comunicación
entre el usuario y la computadora. Los dispositivos de entrada sirven para introducir datos para su posterior
proceso. Los dispositivos de entrada más comunes son: Teclado, Lectores de tarjetas, Lápices ópticos, Lectores
de código de barras, Escáneres, Micrófonos, Ratón, Monitor táctil, etc.
Los dispositivos de salida permiten visualizar los resultados del proceso: Monitor, Impresora, Plotters, par-
lantes, etc.

2 Fundamentos de Programación c/c++. 4ta edición. Ernesto Peñaloza Romero. Ed. Alfaomega. México 2004.
1.2. LA COMPUTADORA 7

1.2.4. Memoria central


Dicho juego de caracteres presentaba 256 letras y
La memoria principal es la zona de la unidad cen- símbolos (28 ) en un procesador de 8 bits. Uno de los
tral del sistema que almacena la información, en for- motivos principales que popularizaron el byte de 8
ma de programas y datos. En la memoria princi- bits es que a partir de la década de los años 1970s
pal se pueden distinguir la memoria de trabajo lla- los 8-bits se convirtieron en el común denominador
mada RAM (Random Accesss Memory) memoria de de la informática; donde los microprocesadores eran
acceso aleatorio (escritura / lectura ), la memoria de 8-bits.
ROM Reed Only Memory o memoria de solo lectu- Con el tiempo comenzaron a aparecer microproce-
ra. La ROM por construcción es una memoria que sadores que podían procesar 16 bits, luego 32 bits,
se utiliza para el arranque de la computadora. Du- 64 bits y eventualmente 128; todos múltiplos de 8.
rante el arranque el programa BIOS (sistema bási- También existieron microprocesadores de 18 y 36
co de entrada/salida), almacenado en la ROM, che- bits, pero dejaron de fabricarse, popularizándose los
quea el estado del hardware principal, previo a car- múltiplos de 8, el cual se promulgó como un están-
gar el sistema operativo. Esta es una memoria que dar por el IBM S/360. a
no pierde sus programas si se corta el suministro
eléctrico. En cambio la RAM se caracteriza por guar-
dar temporalmente la información. Cada vez que 1.2.6. Tecnología del bit
el microprocesador accede a la memoria RAM para En informática la menor unidad indivisible posible
leer o escribir información tiene que esperar hasta es un simple pulso eléctrico, que puede representar-
que la memoria RAM este lista para recibir o enviar se por un 1 o un 0; y lo denominamos bit, un tér-
los datos. Esta espera se produce en una memoria mino que se formó de la contracción de las palabras
intermedia llamada memoria Caché. Dado que la me- Binary digit (dígito binario). Por lo general para re-
moria principal, tiene una velocidad de transferencia presentar el 1 se utilizan pulsos eléctricos de entre 2
de datos y el procesador central tiene una velocidad y 5 volts, mientras que para representar el 0 se utili-
de procesamiento mayor, la memoria caché recibe zan voltajes cercanos a los 0 volts. Luego los bits son
los datos a cierta velocidad y la eleva a la velocidad la menor unidad "física"de información, ya que son
del microprocesador o la reduce a la velocidad de pulsos eléctricos que representan los 1 y 0.
trabajo de la RAM.
La memoria principal está conectada directamente Por otro lado, los bytes son la menor unidad lógica
a través de los buses, que son su medio físico de co- de información, equivalente a un carácter (letra o
municación con la unidad central de procesamien- símbolo). La diferencia es que para los seres huma-
to. Los datos en forma de señal eléctrica, sólo per- nos un pulso eléctrico, o un bit; no tiene un signi-
manecen en el bus el tiempo que necesitan en reco- ficado práctico mientras que un byte sí; ya que se
rrer la distancia entre los componentes implicados trata de un carácter, letra o símbolo. Un byte está
en la transferencia. El bus de datos es el medio por el formado por 8 bits o pulsos eléctricos. Por lo tan-
que se transmite la instrucción o dato apuntado por to en informática se toma como unidad de medi-
el bus de direcciones. La cantidad de memoria princi- da de capacidad de almacenamiento de dispositi-
pal existente en una computadora se verá limitada vos como el disco duro o memoria. Esta capacidad
por la capacidad de direccionamiento del bus de di- de almacenamiento se mide en cantidad de carac-
recciones, esto forma el mapa de memoria. Ejemplo teres de texto que se pueden almacenar en los mis-
para un microprocesador de 8 bits se tiene una ca- mos. Así un disco duro con capacidad de almace-
pacidad de direccionamiento de 28 = 256 siendo el namiento de 500 gigabytes puede almacenar has-
tamaño adoptado para la memoria RAM 2 elevado a ta 500.000.000.000 (500.000 millones) de caracteres o
la potencia más cercana terminada en 0, en este caso bytes
210 = 1024 equivalente a 1 megabyte. Para el caso de Nombre Identificación Equivale a
32 bits, el bus de direcciones tiene una capacidad de Byte Byte (B) 8 bits
232 = 4,294,967,296 equivalente a 4 Gigabytes , to- KiloByte Kbyte (KB) 1024 bytes
mando esta capacidad como límite de memoria ram Megabyte MByte(MB) 1024 Kbytes
como convención de los constructores. Gigabyte GByte(GB) 1024 MByte
Terabyte Tbyte (TB) 1024 Gbyte
1.2.5. Unidad de Memoria : Byte Petabyte Pbyte (PB) 1024 TByte
Exabyte Ebyte (EB) 1024 PByte
La unidad de memoria se denomina byte. En ju- Zetabyte ZByte (ZB) 1024 EByte
lio de 1956 durante el desarrollo de la computado- Yotabyte YByte (YB) 1024 ZByte
ra IBM STRETCH, el Dr. Werner Bucholz, bautizó
al agrupamiento de 8-bits para la representación de a https://es.wikipedia.org/wiki/Byte

cada carácter con el nombre de byte.


8 CAPÍTULO 1. CONCEPTOS BÁSICOS

1.2.7. Unidad Central de Proceso.


El microprocesador es un circuito integrado que controla y realiza las funciones y operaciones con los datos.
Se le conoce como procesador y es el cerebro de la computadora. El microprocesador representa a la CPU. Una
característica es su velocidad la que se mide en megahercios (MHz) y manipulan palabras de 4 a 64 bits. La
evolución de los microprocesadores va desde el INTEL 8080, 8086, 8088,80286, ..386,..486,..586,...686, Pentium
I, Celeron, II, III, AMD-k5,k6,k7, Athlon, Duron, Phenom, corei2 ,corei3 , corei5 , corei7

1.2.8. Supercomputación
Las supercomputadoras son aquellas con capacidades de cálculo muy superiores a las computadoras corrien-
tes. Por ejemplo el procesador AMD Athlon FX-60 dual core ejecuta 27.000 millones de instrucciones por se-
gundo, aproximadamente 27.000 MFlop y el corei7 ejecuta 90.000 Mflop = 90.000 millones de operaciones en
coma flotante. Por otro lado la computadora Tianhe-1 desarrollo 2.5 TeraFlops que equivalen a 250 billones de
operaciones por segundo. Actualmente la más poderosa es la supercomputadora china Tianhe-2 la cual eje-
cuta 33.9 Petaflops . Desarrollada por la Universidad Nacional de Tecnología de Defensa de China (NUDT) y
la empresa china Inspur, está ubicada en el Centro Nacional de Supercomputación en Guangzho (NSCC-GZ),
República Popular China. Tiene un rendimiento de 33,86 petaFLOPS (33.860.000.000.000.000 operaciones de
coma flotante por segundo), con un pico teórico de 54,9 petaFLOPS que la convirtió en la supercomputadora
más rápida del mundo entre junio de 2013 y junio de 2016. Esta computadora está equipada con 16.000 nodos,
cada uno con dos procesadores Intel Xeon IvyBridge E5-2692 (12 núcleos, 2,2 GHz) y tres procesadores Intel
Xeon Phi 31S1P (57 núcleos, 1,1 GHz), cuya combinación da un total de 3.120.000 núcleos de computación. Es
capaz de almacenar 12,4 PB, tiene una memoria del sistema de 1.375 TB (1,34 PB) y utiliza el sistema operativo
Kylin Linux propio. Se calcula que ha costado entre 200 y 300 millones de dólares.

1.3. Sobre el lenguaje.

El aprendizaje de C + + es una aventura de descubrimiento porque particularmente el lenguaje complace va-


rios paradigmas de programación, incluyendo programación orientada a objetos (OOP), y los procedimientos
tradicionales de programación. Por qué lenguaje C++ y no otro? Para responder esto podemos alegar que el
lenguaje de programación C fue diseñado en un principio para ser usado en el sistema operativo UNIX. Debi-
do a esto C se usó para crear muchas aplicaciones incluyendo un compilador de C, y a la larga para escribir el
mismo UNIX. Su amplia aceptación en el mundo académico se extendió al campo comercial y los proveedores
de software como Microsoft y Borland publicaron compiladores C para los ordenadores personales. El API 3
original para Windows fué diseñado para trabajar con codigo escrito en C y aún hoy sigue siendo compatible
con C . Desde el punto de vista del diseño C carecia de un detalle que ya ofrecian otros lenguajes como el
Smalltalk, el concepto de objeto . Este concepto al ganar aceptación en la comunidad de programadores, obligó
a incorporarlo al lenguaje C junto con otras características, el cual paso a ser C++ . El lenguaje C++ es una me-
jora de C pero aún así presenta algunas desventajas. C y C++ son lenguajes de muy bajo nivel y exigen mucho
código para funcionar correctamente. Se tiene que escribir código para manejar aspectos tales como la gestión
de memoria y el control de errores. C y C++ pueden dar como resultado aplicaciones muy potentes pero el
programador debe asegurarse de que el código funciona bien. Un error en la escritura del programa puede
hacer que toda la aplicación falle o se comporte de forma inesperada. Por esta razón es necesario desarrollar
una capacidad de abstracción y manejo de la síntaxis en un alto grado.

1.3.1. Interfaz de programación


Hemos elegido como interfaz de nuestros programas y proyectos al sistema conocido como Dev-cpp . Esta
IDE es un sistema que integra varias herramientas que ayudan a la edición de los programas , compilación,
depuración, linkeo de las librerias y ejecución. De esta manera Dev-cpp presenta una interfaz amigable de
desarrollo y depuración de programas. El conocimiento y la adquisición de destreza en el manejo de este
programa utilitario es fundamental para alcanzar los objetivos deseados de la cátedra.
3 Interfaz de Programación de Aplicaciones, cuyo acrónimo en inglés es API (Application Programming Interface), es un conjunto de

funciones residentes en bibliotecas (generalmente dinámicas) que permiten que una aplicación corra bajo el sistema operativo Windows.
Capítulo 2

Resolución de Problemas Computables

2.1. Tratamiento de un problema computable.


2.1.1. Resolución de problemas.
El objeto principal de la programación es la resolución de un problema dado en un número finito de pasos y
por lo tanto en un tiempo finito.
Consideraremos las siguientes etapas en la resolución de un problema.

1. Formulación del problema.

2. Analizar el problema.

a) Dividir el problema en problemas atomicos o módulos .


b) Organizar los problemas atomicos por niveles de jerarquia.
c) Analizar cada módulo.

3. Diseñar un método , estrategia o procedimiento para hallar la solución.

a) Usamos la herramienta seudocódigo.


b) diseñamos cada módulo
c) Realizar la prueba de escritorio o verificación de cada seudocódigo.

4. Codificación y ejecución

a) Realizar la codificación de los algoritmos usando un lenguaje de programación.


b) interpretar cada subprograma.
c) Depurar cada subprograma.
d) integrar todos los módulos en un sistema.
e) interpretar el sistema.
f ) Verificar y depurar.
g) Compilar el sistema.
h) Ejecutar el sistema.

5. Implementar el programa.

a) implementación del sistema


b) mantenimiento
c) documentación

9
10 CAPÍTULO 2. RESOLUCIÓN DE PROBLEMAS COMPUTABLES

2.1.2. Formulación del problema.


La formulación del problema es la materialización por escrito, completo y sin ambiguedades. Debemos tener
en cuenta que todo enunciado o proposición nos da cierta información que hacen al ambiente del problema 1 . Esta
información por un lado son los datos del problema, es decir los elementos o dominio en el que trabajamos
que nos permiten delimitar el entorno de valores y por otro lado el resultado al que se quiere llegar.

2.1.3. Planteamiento del Problema


Este tiene por objeto comprender el objetivo
del problema, si los datos están completos y si
es necesario ordenar los mismos para su pos-
terior procesamiento.

2.1.4. Análsisi del problema


Clarificada la información del problema se
realiza el análisis general a partir del cual se
determina qué debe hacer el programa. Dado
que se busca una solución por computadora,
se precisan especificaciones detalladas de en-
trada y de salida. El análisis del cómo se de-
be hacer para solucionar un problema com-
plejo nos lleva por el camino de reducir su
complejidad. Esto se realiza aplicando la co-
nocida estrategia divide y venceras.
La división del problema en problemas atómi-
cos nos permite dividir un problema complejo
en problemas simples de forma tal que estos
problemas simples ya no puedan simplificar-
se mása . Este método se conoce generalmente
como diseño descendente o modular.
a El proceso de simplificar el problema en cada etapa y

expresar cada paso en forma más detallada se denomina


refinamiento sucesivo
Terminado el refinamiento, se organizan estos problemas atomicos o módulos por niveles horizontales y ver-
ticales de jerarquía la cual configura la estructura o diseño general del sistema. Esta jeraqrquización se grafica
usando un organigrama. Una vez completada dicha etapa, pasamos al diseño de la solución, es decir cómo debe
hacer el programa para resolver el problema. Este paso se realiza para cada módulo que se halla desarrollado.
El análisis de cada problema atómico 2 , tiene por finalidad comprender la problemática, identificando qué es lo
que se necesita hacer para alcanzar su solución. Este análisis se formaliza realizando una serie de preguntas
que sirven para delimitar el problema e interpretarlo:

1. Se puede resolver?

2. Se puede dividir el problema dado en problemas atómicos?

3. Cuales son los datos y cual es su apariencia (nros , palabras)?

4. Importa si ingresamos los datos ordenados o desordenados ?

5. Cual debe ser la forma de salida de la solución (pantalla, impresora)?

6. Cual es la secuencia de salida de la solución?

1 El ambiente de un problema es el conjunto de recursos necesarios para la realización del mismo


2 *Análisis modular
2.1. TRATAMIENTO DE UN PROBLEMA COMPUTABLE. 11

Estas preguntas que conforman el análisis modular, nos permiten entender el problema y nos ayudan a prepa-
rar la siguiente etapa que es la de describir un método, estratégia o procedimiento que aplicado a los datos del
problema nos permita llegar a su resolución 3 .

2.1.5. Diseño y prueba


En esta etapa se determina cómo debe hacer el programa, la tarea solicitada. Este procedimiento surge luego de
responder

1. Qué acciones debemos realizar durante la entrada


de los datos:
a) los datos se ingresan por teclado o se leen de
una base de datos ?
b) los datos son numéricos o son cadenas de tex-
to ?
c) ....

2. Qué acciones realizar durante su proceso y durante


la salida ?
a) los datos se procesan matemáticamente o alfa-
numéricamente ?
b) ...

3. Cuál es el órden lógico de esas acciones ?

Realizado el diseño de cada módulo, ejecutamos la


prueba de escritorio de cada uno. Este procedimien-
to se instruye aportando una serie de datos mínimos
de prueba a los efectos de aplicarlos al seudocódigo
del programa y verificar su lógica. Si se encuentran
problemas de razonamiento en el diseño, de proce-
de a corregir dichos errores.
12 CAPÍTULO 2. RESOLUCIÓN DE PROBLEMAS COMPUTABLES

2.1.6. Codificación e interpretación.


Habiendo corregido y probado el funcionamiento de los programas en seudocódigo, los codificamos en len-
guaje c/c++, es decir escribimos cada módulo en la síntaxis del lenguaje c/c++. y seguido esto lo ejecutamos
de forma que la interfáz actue como intérprete del mismo lo cual nos permite corregirle tanto los errores de
síntaxis como los de lógica que hallemos. Este último proceso se conoce como depuración.
Habiendo verificado individualmente los módulos o subprogramas del problema, los integramos en un mó-
dulo general desde el cual se llame a cada subprograma en la medida que se necesite y en el órden establecido
por el programador. Paso siguiente ejecutamos el sistema y corregimos los errores de síntaxis y de lógica que
hallemos. Entonces estamos listos para compilar y linkear el programa con el sistema operativo con que fun-
ciona la computadora en la que trabajamos. Esto nos permite obtener el programa ejecutable .exe que usaremos
para la función que se diseñó.

2.1.7. Implementación del sistema.


Este proceso tiene por objetivo instalar el sistema en la empresa del cliente que lo haya adquirido. Al mismo
tiempo esta etapa que es temporal , dura mientras el cliente considere que el sistema deba ser corregido y o
modificado a su gusto hasta que funcione bien y no necesite otras modificaciones. La documentación del
sistema es una tarea que se realiza antes, durante y después de la programación. Consta de las descripciones
de los pasos a dar en el proceso de resolución de un problema. La importancia de la documentación debe ser
destacada por su decisiva influencia en el producto final. Programas pobremente documentados son difíciles
de leer, más difíciles de depurar y casi imposibles de mantener y modificar.
La documentación de un programa puede ser :
1. interna
2. externa.
La documentación interna es la contenida en líneas de comentarios del programa o módulo mismo. La docu-
mentación extema incluye análisis, diagramas de flujo y/o pseudocódigos, manuales de usuario con instruc-
ciones para ejecutar el programa y para interpretar los resultados.
La documentación es vital cuando se desea corregir posibles errores futuros o bien cambiar el programa.Tales
cambios se denominan mantenimiento del programa. Después de cada cambio la documentación debe ser
actualizada para facilitar cambios posteriores. Es práctica frecuente numerar las sucesivas versiones de los
programas 1.0, 1.1, 2.0, 2.1, etc. (Si los cambios introducidos son importantes, se varía el primer dígito (1.0, 2.0,
...), en caso de pequeños cambios sólo se varía el segundo dígito (2.0,2.1 ....).

2.1.8. Ciclo de vida de un programa.


Resumiendo, todas estas etapas necesarias en la resolución de cualquier problema computable conforman lo
que senomina Ciclo de Vida de un programa. y que graficamos en la Figura 2.1

2.2. Paradigmas de Programación.


Un paradigma de programación define la forma en que un programador “ve "la ejecución de un programa.
Por ejemplo en el caso de la programación orientada a objetos, el programador ve la ejecución de un programa
como un conjunto de objetos que dialogan entre si. La palabra paradigma significa modelo o patrón. Algunos
ejemplos de paradigmas de programación son :
1. El paradigma imperativo es considerado el más común y está representado, por ejemplo, por el C o por
BASIC.
2. El paradigma funcional está representado por la familia de lenguajes LISP, en particular Scheme.
3. El paradigma lógico, un ejemplo es Prolog.
4. El paradigma orientado a objetos. Un lenguaje completamente orientado a objetos es Smalltalk.
2.3. METODOLOGÍA DE PROGRAMACIÓN 13

Figura 2.1: Ciclo de Vida de un proyecto

El C++ reune las características del paradigma imperativo y el orientado a objetos. En este contexto de trabajo
vamos a aplicar la programación estructurada, la cual es una forma simple y eficiente de escribir un programa
informático.

2.3. Metodología de Programación


Definición 1 Metodología de programación es el conjunto de técnicas que tienden a que un programa reuna los siguientes
requisitos:
1. Legibilidad: ha de esta escrito de forma que facilite su lectura y comprensión.
2. Portabilidad: Su diseño debe permitir la codificación en diferentes lenguajes de programación.
3. Modificabilidad: Fácil de mantener
4. Eficiencia: debe aprovechar al máximo los recursos del computador.
5. Modularidad: ha de estar dividido en módulos o bloques.
6. Estructurado: debe cumplir las reglas de la programación estructurada.

2.3.1. Programación Modular.


Definición 2 Consiste en dividir el problema en problemas de complejidad menor tal que puedan analizarse, dise-
ñarse, codificarse y verificarse independientemente.

Principio de modularidad Las partes que tienen relación estrecha, deben pertenecer al mismo módulo, mien-
tras que las no relacionadas con este módulo deben pertenecer a sus respectivos módulos..
Requisitos.
14 CAPÍTULO 2. RESOLUCIÓN DE PROBLEMAS COMPUTABLES

1. Se debe desarrollar un organigrama modular del sistema con sus niveles de comunicación.
2. Se debe describir la función del módulo principal.
3. Se debe describir la función de los módulos básicos.
.
Criterio de Modularización
Cada módulo debe
1. corresponder a una función del sistema bien diferenciada.
2. deben ser claros y de poca complejidad.
3. deben utilizar pocos niveles de modularidad en si mismos.
4. debe usarse programación estructurada en cada módulo.

2.3.2. Programación Estructurada.(PE)


Fué desarrollada en sus principios, en 1965, por el padre de la PE, Edgser W. Dijsktra4 . Existen diversas defi-
niciones de la PE que giran alrededor del teorema de la estructura que establece:
1. El programa tiene un diseño modular.
2. Los módulos tienen un diseño descendente.
3. Cada módulo se codifica usando las estructuras de control.
4. toda función computable puede implementarse usando las estructuras de control.
5. No se usa la instrucción de salto goto porque rompe la estructura.
El diseño descendente (top-down) es el proceso mediante el cual un problema se descompone en pasos sucesivos de
refinamiento coincidiendo la salida de un paso con la entrada al siguiente.
El famoso Teorema de Dijkstra, demostrado en los años sesenta, demuestra que todo programa puede escribir-
se utilizando únicamente las tres instrucciones de control siguientes: Secuencial, Condicional e Iteraciónes (exactas
e inexactas).
Con estas estructuras de control se puede hacer cualquier programa informático que resuelva una problemática
dada.

2.3.3. Ventajas
Con la programación estructurada, elaborar programas de computador sigue siendo una labor que deman-
da esfuerzo, creatividad, habilidad y cuidado. Sin embargo, con este estilo podemos obtener las siguientes
ventajas:
1. Los programas son más fáciles de entender, ya que pueden ser leído de forma secuencial, sin necesidad
de hacer saltos de línea (GOTO) dentro bloques de código para entender la lógica.
2. La estructura del programa es más clara puesto que las instrucciones están más ligadas o relacionadas
entre si.
3. Reducción del esfuerzo en las pruebas. El seguimiento de las fallas ("debugging") se facilita debido a la
lógica más visible, por lo que los errores se pueden detectar y corregir más fácilmente.
4. Reducción de los costos de mantenimiento.
5. Programas más sencillos y más rápidos.
6. Los bloques de código son auto explicativos, lo que apoya a la documentación.
4 Notas de programación estructurada, Universidad de Hainover, 1965
2.4. ALGORITMO 15

2.3.4. Desventajas
El principal inconveniente de este método de programación, es que se obtiene un único bloque de programa,
que cuando se hace demasiado grande puede resultar problemático su manejo, esto se resuelve empleando la
programación modular, definiendo módulos interdependientes programados y compilados por separado. Un
método un poco mós sofisticado es la programación por capas, en la que los módulos tienen una estructura
jerárquica muy definida. Por lo tanto a la programación estructurada le agregamos la filosofía de la programa-
ción modular obteniendo la programación modular estructurada que es la que vamos a aplicar.

2.4. Algoritmo
Empezaremos por establecer lo que es un algoritmo.
Definición 3 Un Algoritmo es una secuencia ordenada de acciones que pueden ser ejecutadas por un procesador y que
puede llevarnos a la solución de un problema dado en un número finito de pasos.
Veamos cada uno de estos conceptos.
Definición 4 Una acción es un evento que modifica el ambiente del problema, y en particular dicha acción será eficiente
si su enunciado es suficiente para que el procesador pueda ejecutarla sin información adicional.

2.4.1. Características de los algoritmos.


Las características fundamentales que debe cumplir todo algoritmo son:
1. Un algoritmo debe ser preciso.
2. debe indicar el orden de realización de cada paso.
3. El algoritmo debe estar bien definido de forma que siempre que se realice dicho algoritmo siempre se
llegue al mismo tipo de resultado.ç
4. Un algoritmo debe ser finito, es decir, se debe terminar en un número finito de pasos.
La definición de un algoritmo debe describir, basados en el diseño descendente, tres partes: Entrada, Proceso y
Salida .

La complejidad5 de los problemas, que se resuelven algoritmicamente, requiere que se inicie a los alumnos
tempranamente en un camino que los conduzca a utilizar técnicas efectivas de programación y desarrollar las
habilidades necesarias para su resolución. Es importante para ello poner énfasis en el pensamiento lógico y es
aquí donde entra a jugar su papel la Lógica de Programación.
Ante toda esta avalancha de términos cabe preguntarse Qué es la Lógica?
El término proviene del griego LOGOS que significa: Idea, Palabra, Regularidad. Que según Omar Ivón Trejos
Buriticó, Decano de Ingeniería de la Universidad Tecnológica de Pereira en Colombia y Master en Informática Educativa;
en su libro La Esencia de la Lógica de Programación la define como la forma más obvia y más fácil de hacer algo, lo
cual da una idea exacta, como ninguna, del camino que se desea seguir.

2.4.2. Seudocódigo.
Cuando ya hemos definido la estrategia que aplicaremos sobre los datos de entrada para resolver el problema,
debemos escribir esta estrategia. De acuerdo con la definición de algoritmo debemos hacerlo en una secuencia
de acciones primitivas ordenadas. Para tal fin definimos los verbos de acción primitivos dentro de un contexto
que llamamos seudocodigo.
Definición 5 El seudocódigo es una herramienta que se creo para describir sintácticamente los algoritmos, es decir es el
lenguaje de los algoritmos no codificados. Está compuesto por una serie de palabras que se caracterizan por ser verbos en
infinitivo.
5 La complejidad son los recursos (espacio y tiempo) que se gastan en resolver una instancia de un problema dado, a partir del tamaóo

de la entrada utilizando el algoritmo más eficiente a disposición.


16 CAPÍTULO 2. RESOLUCIÓN DE PROBLEMAS COMPUTABLES

Reglas generales del seudocódigo .

1. Todo programa escrito en seudocódigo comienza con la palabra “inicio ".

2. Cada instrucción se debe escribir en una linea. Para su descripción se utilizan una serie de palabras reser-
vadas tales como : Inicio, Fin, Leer, Si, Entoces, Sino, Fin-si, Repetir, Fin-repetir, Mientras, Fin-Mientras.

3. Las acciones primitivas que pertenezcan al domino de otra acción primitiva deben escribirse indentadas
(tabuladas) para mostrar claramente la dependiencia de las instrucciones entre si.

4. Cada estructura que define un programa tendró un punto de inicio y otro de fin o cierre de la estructura.

5. Se escribiró en minóscula, excepto aquellos nombres de variables que defina el programador los cuales
pueden ir en mayusculas.

Un pseudocódigo o falso lenguaje, es una serie de normas lóxicas y gramaticales parecidas a la mayoróa de los
lenguajes de programación, pero sin llegar a la rigidez de sintaxis de estos ni a la fluidez del lenguaje coloquial.
Esto permite codificar un programa con mayor agilidad que en cualquier lenguaje de programación, con la
misma validez semántica, normalmente se utiliza en las fases de análisis o diseño de Software, o en el estudio
de un algoritmo. Forma parte de las distintas herramientas de la ingeniería de software.
El pseudocódigo describe a un algoritmo utilizando una mezcla de frases en lenguaje común, instrucciones de
programación y palabras clave que definen las estructuras lógicas. Su objetivo es permitir que el programador
se centre en los aspectos lógicos de la solución de un problema. Es el razonamiento del problema, la parte
abstracta del mismo.

Estructuras lógicas de control .

Definición 6 Estructura de Control: son las estructuras de seudocódigo , mediante las que se dirige el orden en que
deben ejecutarse las instrucciones del programa.

Estructura Secuencial.
. accion-1
. accion-2
. ........
. accion-n
Fin-estructura.
Esta estructura es, como su nombre lo señala, una secuencia de acciones ordenadas de tal forma que la última
acción es la que resuelve el problema. Es la más simple. Como ejemplo podemos suponer que tenemos el
siguiente problema: Sean los lados a y b de un triángulo rectángulo. Hallar la hipotenusa de dicho triángulo.

Solución:
Analizando el enunciado del problema vemos que tenemos :
C ONJUNTO DE D ATOS = { a,b,triangulo rectangulo }
C ONJUNTO R ESULTADO = {H }
Estrategia: aplicamos el teorema de pitágoras y resolvemos.

Seudocódigo:

Algorithm 1 Algoritmo para calcular la hipotenusa de un triángulo rectángulo


1: Hipotenusa(a,b) { a y b catetos del triángulo rectángulo}
2: inicio
3: c2 = √( a2 + b2 ) { c es una variable auxiliar }
4: H= c
5: imprimir “la hipotenusa es ", H;
6: fin
2.4. ALGORITMO 17

Estructura Condisional.a
Si ( ”condicion”)
ó. accion-1
Esta estructura aparece cuando es necesario evaluar una
ó. accion-3
cierta condición que deben cumplir las variables en esce-
.. ........
na. Esta estructura es binaria, es decir que su resultado es
.. accion-(2n-1)
uno solo de dos posibles valores, Verdadero o Falso. La
Sino
condición que se evalua se establece entre dos o más va-
.. accion-2
riables. Esta condición es una relación entre las variables,
.. accion-4
la cual se establece por medio de un operador. Los opera-
.. ........
dores pueden ser matemáticos {<, >, =, ≤, ≥} o pueden
.. accion-(2n)
ser lógicos : {∧, ∨, =⇒, ¬}. Pero su resultado es binario, es
Fin-Si
decir 1 o 0.
a Una condición es una afirmación lógica sobre el es-

tado del problema, que puede ser cierta o falsa en el mo-


mento de la observación

Ejercicio En el ejercicio anterior si la hipotenusa es menor que 5 calcular el área del triángulo.

Algorithm 2 Algoritmo para calcular la hipotenusa de un triángulo rectángulo


1: Hipotenusa(a,b) { a y b catetos del triángulo rectángulo}
2: inicio
3: c2 = √( a2 + b2 ) { c es una variable auxiliar }
4: H= c
5: Si ( H < 5) entonces
6: . Area = ( a · b)/2
7: . imprimir “el área del triángulo es: ", Area;
8: Fin-si
9: imprimir “la hipotenusa es ", H;
10: fin

Estructura Iterativa exacta (Repetir).


− − − − − − − − − − − − − − −−
Repetir (“var=valor1"hasta “var=valor2") Esta estructura permite realizar una acción primiti-
ó. accion-1 va en forma cóclica hasta que se alcance el resultado
ó. accion-2 buscado. La característica que tiene es que se cono-
.. ........ ce exactamente la cantidad de pasos o repeticiones
.. accion-n a realizar.
.. var=var+1
Fin-Repetir

Ejercício: Dado una cierta cantidad de notas de alumnos de física, las que vienen en fichas individuales, se
pide calcular el promedio de las notas del curso de 100 alumnos.

Algorithm 3 Algoritmo para calcular el promedio de un grupo de notas


1: Promedio(nota,100) { nota es la variable que se lee de las 100 fichas}
2: inicio
3: Repetir (i=1 hasta i=100 )
4: . Leer nota
5: . suma=suma + nota {suma es una variable auxiliar}
6: . i=i+1 {se incrementa i en una unidad }
7: Fin-Repetir
8: Prom = suma /100;
9: imprimir “el promedio es: ", Prom;
10: fin
18 CAPÍTULO 2. RESOLUCIÓN DE PROBLEMAS COMPUTABLES

Esta estructura representa la realización de una o varias


Estructura Iterativa inexacta (Mientras). actividades primitivas en forma cíclica pero la cantidad de
−−−−−−−−−−−−−−−−− repeticiones no se sabe hasta que se ingrese desde tecla-
inicio. do (Leer) un valor de la variable var que sea distinto de 0.
var=0 Cuando esto ocurre se termina el ciclo mientras y la acción
Mientras (”var=0”) hacer pasa a la siguiente orden. Obsérvese que antes de ingresar
ó. accion-1 a esta estructura la variable de chequeo debe estar inicia-
ó. accion-2 lizada con el valor por defecto, y que antes de terminar el
.. ........ ciclo se debe volver a leer el valor de la variable de che-
.. Leer var queo a efectos de que el operador del programa tenga la
Fin-Mientras posibilidad de salir del mismo, de lo contrario la estructu-
ra entra en un ciclo infinito de repeticiones (loop).
2.4. ALGORITMO 19

2.4.3. Ejercicios
Ejemplo 1: { Desarrollar un programa que ingrese números enteros mayores que 0 y que determine el mínimo
y el máximo de la serie y también cuales de ellos son primos. }

1. Dividimos el problema en problemas atomicos (modulos)

a) Módulo principal realiza


1) la entrada y salida del sistema
2) El ingreso de los datos
3) La ejecución de los modulos secundarios.
b) Módulos secundarios:
1) módulo donde se determina el mínimo
2) módulo donde se determina el máximo
3) módulo donde se determina si es número primo.

2. Desarrollamos el organigrama de funciones y enlaces del sistema:

Figura 2.2: Organigrama modular del problema

3. Definimos una estrategia de solución para cada módulo

a) Módulo principal:
1) num=0, min=0, max=0; ( ponemos a cero todas las variables que usemos )
2) Mientras ( num<=0) { ( introducimos el filtro para nros positivos)
...... leer num ( ingresamos un número distinto de 0 )
}Fin-mientras
3) min=num; max=num; ( asignamos los primeros valores de comparación )
4) Mientras (num > 0) { (no sabemos cuantos nros ingresaremos )
.... Minimo(num); (llama al modulo Minimo()
.... Máximo(num) ( ”...................” Máximo()
.... Primos(num); ( ”...................” Primos()
.... leer num (controla la salida del ciclo mientras).
} Fin del ciclo mientras.
5) Imprimir ” El mínimo es min; El máximo es :max. ”
6) Salimos del módulo principal y termina el programa.
b) Módulo mínimo:
1) recibimos el valor de num ingresado en el modulo principal
2) Si (num < min) ( Para comparar usamos la estructura condiciona )
.... min = num; ..... ( asignamos el valor menor a min )
Fin-Si
3) regresamos al módulo principal
20 CAPÍTULO 2. RESOLUCIÓN DE PROBLEMAS COMPUTABLES

c) Módulo máximo:
1) recibimos el valor de num ingresado en el modulo principal
2) Si (num > max ) (Para comparar usamos la estructura condicional)
....max = num; .....( asignamos el valor mayor a max )
Fin-si
3) regresamos al módulo principal
d) Módulo Primos:
1) recibimos el valor de num ingresado en el modulo principal
2) c=0; r=0; i=2; .......(inicializamos variables)
3) c = num / i; r = num - i*c;
4) Mientras((r > 0) y (i < num) ) { ...(Usamos la estructura mientras)
... i= i+1;
... c= num / i;
... r = num - c * i;
... Si ( r == 0)
...... i=num
... Fin-si ....( salimos del ciclo condicional );
} Fin-mientras ......(salimos del ciclo mientras )
5) Si ( i = num )
.....imprimir ”El número"num ” es primo";
Fin-si
6) regresamos al módulo principal

Ejemplo 2: { Desarrollar un programa que ingrese un número entero mayor que 0 y determine si el mismo es
para o impar. } Podemos dividir el problema en un problema más simple? No. Luego el único módulo realiza:
1. Desarrollamos el flujograma de acciones del programa:

a) la entrada y salida del sistema


b) El ingreso de los datos

c) La ejecución de las acciones necesarias para re-


solver el problema
d) Imprimir los resultados.

Seudocódigo del programa


.........Inicio
.........n=0, d=0, r=0;
.........Mientras ( n<=0) {
......... ...... leer n
.........}Fin-mientras
.........d = n / 2;
.........r = num - i*c;
.........Si ( r == 0) Imprimir: El nro n es Par.
.........Si-no ..... Imprimir: El nro n es Impar.
.........Fin-si ....( salimos del ciclo condicional );
.........Fin de programa
Figura 2.3: Flujograma del problema 2
2.4. ALGORITMO 21

Ejemplo 3: { Desarrollar un programa que ingrese los coeficientes numéricos A, B y C de un polinomio de


segundo grado cuya forma canónica es : A ∗ x2 + B ∗ x + C = 0 y determine sus raices. }
Dividimos el problema en problemas atomicos (modulos)

Desarrollamos el organigrama de
funciones y enlaces del sistema:
Módulo principal realiza

1. la entrada y salida del sistema


2. El ingreso de los datos
3. módulo donde se determina X0
4. módulo donde se imprimen los resulta-
dos.

Figura 2.4: Organigrama modular del problema 3

Definimos una estrategia de solución para cada módulo



2
Análisis: Sabemos que la resolvente es : −b± (2ab )−4ac , donde debemos calcular:

x0 = −b/2a; D = b2 − 4ac; y R = ( D )/(2a).
1. Módulo principal:
a) x0=0, x1=0, x2=0; a=0;
b=0; c=0; D=0; R=0;
b) ingresamos los datos
......Imprimir ”Coef. a=” leer a 2. Módulo Calculox0(a,b):
......Imprimir ”Coef. b=” leer b
......Imprimir ”Coef. c=” leer c a) recibimos el valor de a y b

c) x0=Calculodex0(a,b); b) x0 = -b / (2 ∗ a)

d) Cálculo del Discriminante: c) devolvemos (x0)


.... D= b2 − 4.a.c; d) Fin del módulo
e) Calculamos las raices 3. Módulo Imprimir(x1,x2, D,R):
....Si( D > 0√) {
..........R = D/(2a) a) recibimos el valor de x1, x2 , D y R
..........x1 = x0 + R;
..........x2 = x0 - R; } b) Si ( D >= 0)
....Si-no { ....Imprimir: ” x1 = ” x1 ; ” x2 = ” x2;
...........Si( D == 0) x1 = x2 = x0; Si-no
.......... Si-no { (complejas conjugadas) .......Imprimir: ” x1 = ” x0 + i ∗ R;
−1 ∗ D;
................ D = √ .......Imprimir: ” x2 = ” x0 – i ∗ R;
................ R = D/(2 ∗ a) Fin-si
................ x1 = x0 + i ∗ R; c) Fin del módulo
................ x2 = x0 − i ∗ R;
.......... Fin-si }
....Fin-si }
....Imprimir(x1,x2,D,R);
f ) Fin del módulo principal .
22 CAPÍTULO 2. RESOLUCIÓN DE PROBLEMAS COMPUTABLES

Ejemplo 4: Desarrollar un programa que cal-


cule : a) la suma de los primeros 100 núme-
ros naturales y b) la suma de los primeros 100
naturales a partir de uno dado y c) la suma
de los números naturales entre 0 y uno dado.
Luego imprima sus resultados.
———————————————————-
Análisis: Podemos dividir el problema en un
problema más simple? No. Luego tenemos
un módulo para cada caso:

1. Seudocódigo del caso a


2. .........Inicio

3. .........n=0, S=0;
4. .........Repetir (de i=1 a i=100)
......... ...... n = i
......... ...... S=S+i
......... Fin-repetir
5. .........Imprimir: ”La suma es: ”, S.
6. .........Fin de programa

——————————————
1. Seudocódigo del caso b.
2. .........Inicio

3. .........n=0, S=0;n1=0;
4. .........leer n1;
5. ...... Repetir
.......... ((i = n1) a (i < n1 + 100))
.......... n = i
.......... S=S+i
........ Fin-repetir
6. .........Imprimir: ”La suma es: ”, S.

7. .........Fin de programa
——————————————
1. Seudocodigo del caso c.
2. .........Inicio

3. .........n=0, S=0;
4. .........leer n;
5. ...... Repetir ( (i = 1) a (i < n))
.......... S=S+i
...... Fin-repetir
6. .........Imprimir: ”La suma es: ”, S.
7. .........Fin de programaç
2.4. ALGORITMO 23

Ejemplo 5: Desarrollar un programa que ingrese los coeficientes numéricos de los lados de un triángulo rec-
tángulo y determine su área. Podemos dividir el problema en un problema más simple? Si. Mod. principal, CalculoArea
e impresión.
programa principal

1. Inicio
5. Area = CalculoArea(a,b,c)
2. a=0, b=0, c=0; Area=0;
6. ImprimirArea(Area).
3. Ingresamos los valores de a b y c
7. Fin de programa
4. imprimir ” Lado a = ” leer a
” Lado b = ” leer b
” Lado c = ” leer cç

Módulo CalculoArea(a,b,c):
1. recibimos el valor de a, b y c
12. ............Sino
2. Si ( a > b)
13. .................Si (b > c) Area=( a ∗ c)/2;
3. ......Si ( a > c) Area=(b ∗ c)/2;
14. .................Sino ... Area=(b ∗ c)/2;
4. ......Sino
15. .................Fin-si
5. ............Si ( a < c) Area=( a ∗ b)/2;
16. ............Fin-si
6. ............Sino ............ Area=( a ∗ c)/2;
17. ......Sino ........ Area=( a ∗ b)/2;
7. ............Fin-si
18. ......Fin-si
8. .......Fin-si
19. Fin-Si
9. Sino
20. devolvemos (Area);
10. ......Si ( a < b)
21. regresamos al módulo principal
11. ............Si (b < c) .....Area=( a ∗ b)/2;

Módulo ImprimirArea(Area)

1. recibimos el valor del Area desde el mo-


dulo principal
2. imprimir ”El área es = ”, Area ;
3. regresamos al módulo principal

Figura 2.5: Flujograma del problema


24 CAPÍTULO 2. RESOLUCIÓN DE PROBLEMAS COMPUTABLES

Ejemplo 6: Desarrollar un programa que ingrese los coeficientes numéricos de los lados de un triángulo cual-
quiera y determine su perímetro y su área. Podemos dividir el problema en un problema más simple? Si. Mod.
principal, CalculoArea e impresión.

Desarrollamos la secuencia del programa:


1) la entrada y salida del sistema
2) El ingreso de los datos
3) llamar CalculoArea()
4) Imprimir los resultados.

1. Seudocódigo del programa principal

a) Inicio 3. Módulo ImprimirArea(Area,p)

b) a=0, b=0, c=0; p=0; Area=0; a) recibimos los valores del mod. principal

c) Ingresamos los valores de a b y c b) validamos las variables del módulo

d) imprimir ” Lado a = ” leer a c) imprimir ”El área es = ”, Area ;

e) imprimir ” Lado b = ” leer b d) imprimir ” El perímetro es =”, p;

f ) imprimir ” Lado c = ” leer c e) regresamos al módulo principal

g) p = (a+b+c); // perímetro: f) .

h) Area = CalculoArea(a,b,c)
i) ImprimirArea(Area,p).
j) Fin de programa

2. Módulo CalculoArea(a,b,c):
a) recibimos el valor de a, b y c
b) s=0; // semiperímetro
c) s=(a+b+c)/2

d) ” Usamos la fórmula Eron ”


p
e) Area= s ∗ (s − a) ∗ (s − b) ∗ (s − c)

f ) devolvemos (Area);
g) regresamos al módulo principal

Ejemplo 7: Desarrollar un programa que ingrese tres puntos por sus coordenadas P(x,y) y que determine a) la
longitud de los lados del triángulo, b) el tipo de triángulo que determina y c) el área que ocupa.
Podemos dividir el problema en un problema más simple? Si. Mod. principal, Longitud, Tipo, Area e impre-
sión.
2.4. ALGORITMO 25

Secuencia del programa:


1. Entrada
2. El ingreso de los datos

3. llamar Verificacion()
4. llamar Longitud()
5. CalcularTipo() lo llamamos desde Longitud()

6. CalcularArea() llamamos desde Long.


Figura 2.6: Gráfico del Problema
7. Imprimir los resultados.
8. terminar.

1. Seudocódigo del programa principal


a) x1=0,y1=0, x2=0,y2=0;
b) x3=0; y3=0; p=0; Area=0; f=0

c) a=0,b=0, c=0; tipo=0


d) Ingresamos las coordenadas xi , yi
e) imprimir ” x1 = ” leer x1 ; ” y1 = ” leer y1

f ) imprimir ” x2 = ” leer x2; ” y2 = ” leer y2


g) imprimir ” x3 = ” leer x3; ” y3 = ” leer y3
h) f= Verificar(x1,y1,x2,y2,x3,y3)
i) Si( f=1) (continuamos con el programa)

j) Longitud(x1,y1,x2,y2,x3,y3)
k) ImprimirArea(Area,a,b,c,tipo).
Figura 2.7: Gráfico del Problema
l) Fin-si

m) Fin de programa

2. Módulo Verificar(x1,y1,x2,y2,x3,y3)
3. Módulo Longitud(x1,y1,x2,y2,x3,y3)
a) ∆ = 0 → colinealidad
a) a=0, b=0, c=0, tipo=0;
b) f=0; ∆=0; variables del modulo
b) Determinación de los lados de la figura.
c) Calculamos el determinante p
c) a= ((y2 − y1 )2 + ( x2 − x1 )2 )
d) ∆ = ( x1 ∗ (y2 − y3 )) − (y1 ∗ ( x2 − x3 )) + p
(( x2 ∗ y3 ) − (y2 ∗ x3 )) d) b = ((y3 − y2 )2 + ( x3 − x2 )2 )
p
e) Si( ∆ = 0) f=0; e) c = ((y3 − y1 )2 + ( x3 − x1 )2 )
Sino ...f=1;
f ) Area = CalcularArea(a,b,c)
Fin-si
g) tipo = CalcularTipo(a,b,c);
f ) retornar ( f )
h) Fin-módulo
g) Fin-módulo
26 CAPÍTULO 2. RESOLUCIÓN DE PROBLEMAS COMPUTABLES

5. Módulo CalcularTipo(a,b,c):
a) recibimos el valor de a, b y c
b) t=0; // tipo:1-equi, 2-iso, 3-esca
4. Módulo CalculaArea(a,b,c): c) Si(a=b ∧ b=c) ... t=1;
a) recibimos el valor de a, b y c d) Si(a=b ∧ b < c) ... t=2;
b) s=0; // semiperímetro e) Si(a=b ∧ b> c) ... t=2;
c) s=(a+b+c)/2 f ) Si(a=c ∧ c > b) ... t=2;
p
d) Area= s(s − a)(s − b)(s − c) g) Si(a=c ∧ c < b) ... t=2;
e) devolvemos (Area); h) Si(b=c ∧ c > a) ... t=2;
f ) fin módulo i) Si(b=c ∧ c < a) ... t=2;

j) Si(a6= b ∧ b 6= c) ... t=3;


k) retornamos ( t );
l) fin módulo

6. Módulo ImprimirArea(Area,a,b,c,tipo)

a) recibimos los valores del mod. principal

b) imprimir ”El área es = ”, Area ;

c) imprimir ” Los lados valen: a=”, a; ” b=”, b, ” c=”, c;

d) Si(tipo==1) imprimir ” El triángulo es Equilatero ”;

e) Si(tipo==2) imprimir ” El triángulo es Isósceles ”;

f ) Si(tipo==3) imprimir ” El triángulo es Escaleno ”;

g) regresamos al módulo principal

Ejemplo 8: Desarrollar un programa que ingrese tres puntos por sus coordenadas P(x,y) y que determine a)
si pertenece a una circunferencia circunscripta 6 , b) determinar su centro y radio y c) dar la ecuación de la
curva. Podemos dividir el problema en un problema más simple? Si. Mod. principal, Longitud, Tipo, Area e
impresión.

6 El centro de la circunferencia circunscripta se encuentra en el punto de intersección de las perpendiculares levantadas desde los

puntos medios de los lados del triángulo


2.4. ALGORITMO 27

1. Secuencia del programa:


a) Entrada 3. Módulo Verificar(x1,y1,x2,y2,x3,y3)
b) El ingreso de los datos a) ∆ = 0 → colinealidad
c) llamar Verificacion() b) f=0; ∆=0; variables del modulo
d) llamar PuntoMedio() c) Calculamos el determinante
e) CalcularRadio() d) ∆ = ( x1 ∗ (y2 − y3 )) − (y1 ∗ ( x2 − x3 )) +
(( x2 ∗ y3 ) − (y2 ∗ x3 ))
f ) CalcularEcuacion().
e) Si( ∆ = 0) f=0;
g) Imprimir los resultados. Sino ...f=1;
h) terminar. Fin-si
retornar ( f )
2. Programa principal
f ) Fin-módulo
a) x1=0,y1=0, x2=0,y2=0;
b) x3=0; y3=0; p=0; Area=0; f=0
c) a=0,b=0, c=0; tipo=0

d) Ingresamos las coordenadas xi , yi


e) imprimir
” x1 = ” leer x1; ” y1 = ” leer y1
” x2 = ” leer x2; ” y2 = ” leer y2
” x3 = ” leer x3; ” y3 = ” leer y3

f ) f= Verificar(x1,y1,x2,y2,x3,y3)
g) Si( f=1) (continuamos con el programa)
........PuntosMedios(x1,y1,x2,y2,x3,y3)
Fin-si

h) Fin de programa

4. Módulo PuntosMedios(x1,y1,x2,y2,x3,y3)

a) ax=0, ay=0, bx=0, by=0; cx=0, cy=0;R=0


b) x21=0, y21=0, x31=0, y31=0; m1=0, m2=0, m3=0 :
c) Determinación punto medio Pa ( x a , y a ) entre P1 P2 y Pb ( xb , yb ) entre P1 P3
d) ax = x1 + ( x2 − x1 )/2 ay = y1 + (y2 − y1 )/2
e) bx = x1 + ( x3 − x1 )/2 by = y1 + (y3 − y1 )/2
( y2 − y1 ) ( y2 − y1 )
f ) la ecuacion de la recta P1 P2 es : (y − y1 ) = ( x2 − x1 )
∗ ( x − x1 ) con m1 = ( x2 − x1 )
pendiente
( y3 − y1 ) ( y3 − y1 )
g) la ecuacion de la recta P1 P3 es : (y − y1 ) = ( x3 − x1 )
∗ ( x − x1 ) con m2 = ( x3 − x1 )
pendiente
1
h) la mediana de P1 P2 es : (y − ay) = − m1 ∗ ( x − ax ) ..(M1)
1
i) la mediana de P1 P3 es : (y − by) = − m2 ∗ ( x − bx ) ..(M2)
28 CAPÍTULO 2. RESOLUCIÓN DE PROBLEMAS COMPUTABLES

1
j) la mediana de P2 P3 es : (y − cy) = − m3 ∗ ( x − cx ) ..(M3)
k) Evaluamos ahora los posibles valores de m1
Si ((y2-y1)6= 0) {
.....Si ((x2-x1) 6= 0) m1=(y2-y1)/(x2-x1); Sino m1=100; (representa ∞ ) Fin-Si
}Fin-Si
l) Evaluamos ahora los posibles valores de m2:
Si ((y3-y1) 6= 0) {
........Si ((x3-x1) 6= 0) m2 =(y3-y1)/(x3-x1); Sino m2=100; (representa ∞ ) Fin-Si
} Fin-Si
m) Calculamos el punto de corte de las medianas M1 y M2 7
1
 
(y − ay) = − m1 ∗ ( x − ax )
n) 1
(y − by) = − m2 ∗ ( x − bx )
ñ) ahora determinamos los puntos de intersección entre M1 y M2
o) Si (y2 − y1 =0) xg = ax; m1 = 0; → 0◦
Sino {
.........Si (x2 − x1 =0) yg = ay; { m1 = ∞ → 90◦
.................Sino {
......................Si (y3 − y1 =0) { m10 = -(1/m1); → 0◦
.............................xg = bx;
.............................yg = m10∗(bx-ax) + ay; }
.......................Sino {
.............................Si (x3 − x1 =0) {
....................................yg = by;
....................................xg = ax - m1∗(by-ay);
.............................} Sino {
........................................m20=-(1/m2); m10=-(1/m1);
........................................xg = (ax∗m10-bx∗m20-ay+by)/(m10-m20);
........................................yg = m10∗(xg-ax)+ay;
} } } } }
p) CalcularRadio(ax,ay,bx,by,cx,cy,m1,m2,m3)
q) Fin-módulo volver al programa principal

5. Módulo CalcularRadio(xg,yg,x1,y1,x2,y2,x3,y3)

a) recibimos los valores calculados en PuntosMedios()


b) R=0; d1=0, d2=0, d3=0; (distancias a los vértices)
c) Evaluamos si son p coordenadas del radio de una circunferencia
/ / distancia
p = ( xg − xi )2 + (yg − yi )2 * Por teorema de Pitágoras
2
d1 = p( xg − x1 ) + (yg − y1 ) 2

d2 = p( xg − x2 )2 + (yg − y2 )2
d3 = ( xg − x3 )2 + (yg − y3 )2
Si ( (d1 = d2) ∧ (d2=d3) )
...R = d1;
...imprimir El radio es R y sus coordenadas son : x g = xg; y g = yg
...por lo tanto los puntos pertenecen a una circunferencia.
...cuya ecuación es : ( x − xg)2 + (y − yg)2 = R2
...desarrollando queda: x2 + y2 − (2.xg).x − (2.yg).y + ( xg2 + yg2 − R2 ) = 0
Fin-si
d) fin módulo
7 Dejamos al lector que calcule las correspondientes a M1 y M3 para verificar el punto de corte
2.4. ALGORITMO 29

Ejemplo No 9: Hacer un algoritmo que ingrese un número natural y obtener a la salida su factorial.
Solución:
Análisis: Como es una función simple, desarrollamos un único módulo.
Inicio;
// variables
//—————-
Fact=1; n = 0;
//——————
// ingresamos el dato
//———————
leer n;
// el factorial es una sucesión de productos dos a dos
repetir ( i=2, hasta i <= n; i=i+1)
......... Fact = Fact ∗ i ;
fin-rep
imprimir ” El factorial de ”, n ”es =”, Fact;
Fin-programa.
//—————————————
Ejercício No 10. Hacer un algoritmo computacional que ingrese dos números positivos A y B y obtener a la
salida la operación de elevar A a la potencia B, sin usar el operador producto ni la función potencia, solo usar
la operación suma (+);
Solución:
Análisis : A = A * A *......*A (B veces); a su vez
................... A*A = A+A+A+.....+A (A veces) por lo que por cada producto debemos realizar A sumas.
Inicio;
A=0, B=0, i=0, j=0, x=0, Suma=0;
// ingresamos los datos
//——————————-
imprimir "Valor de A =", leer A;
imprimir "Valor de B =", leer B;
//Inicializamos las variables
//———————————–
Suma = A; x = A;
// realizamos el proceso de producto
//———————————————–
repetir (i=1 hasta i=B-1; i=i+1)
......// realizamos las sumas por cada producto
.....repetir (j=1 hasta j=A-1; j=j+1)
..........Suma = Suma + x;
.....Fin-rep
// guardamos el resultado de Suma en x como base para el siguiente ciclo
//——————————————————————————————-
Fin-rep
// imprimir resultados
imprimir ”el nro”, A ” elevado a la ”,B ”es =”, Suma;
Fin-programa
//——————————————————————————————-
30 CAPÍTULO 2. RESOLUCIÓN DE PROBLEMAS COMPUTABLES

2.5. Problemas propuestos.


1. Diseñar un algoritmo que lea e imprima una serie de números distintos de cero. El algoritmo debe ter-
minar el ingreso de datos con un valor cero, que no debe imprimirse.
2. Diseñar un algoritmo que lea e imprima números múltiplos de 3 y que termine el proceso cuando llegue
a 99.

3. Diseñar un algoritmo que lea cinco números positivos y que determine el mayor de todos e imprima
dicho resultado.
4. Diseñar un algoritmo que ingrese tres números positivos y determine si uno de ellos es la suma de los
otros dos.

5. Diseñar un algoritmo que ingrese tres números y determine si uno de ellos es el producto de los otros
dos o el cociente de los mismos. Imprimir una leyenda en cada caso.
Capítulo 3

Programa.

3.1. Concepto de Programa


A continuación daremos una definición de algoritmo en función de las estructuras de datos y de control, y que
llamaremos indistintamente Programa.

Definición 7 Un programa es un conjunto de instrucciones llamadas operaciones primitivas que se aplican a la estruc-
tura de datos del problema, respetando una lógica dada por las estructuras de control y que se presenta a la vista a traves
de una interfáz gráfica y que se realiza en un número finito de pasos.

Definición 8 Operaciones Primitivas: Son las operaciones básicas y que nombran a través de verbos en infinitivo (
leer, imprimir, sumar, asignar, terminar, inciar,etc) y que se ejecutan sobre los datos..

Ejemplo: Operaciones de pseudocódigo:


−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
iniciar se usa para iniciar el algoritmo
leer n // se usa para ingresar un dato a la variable n
imprimir n se usa para mostrar el valor de la variable n
finalizar se usa para terminar las acciones de un algoritmo
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Por ejemplo la acción primitiva de asignación se realiza por convención de derecha a izquierda y se simboliza:
x ⇐ 5 y equivale a x = 5, en este caso hemos asignado el valor 5 a la variable x .

Operaciones matemáticas { +, -, x , /, exp } { <, >, <=, >=, = } Operaciones lógicas { ∧, ∨, →, ¬, ↔ }

* Una acción no primitiva se puede descomponer en acciones primitivas.

Definición 9 Estructura de datos: los hechos reales, datos, información que debemos ingresar a la computadora, se
deben accesar a través de variables simples y complejas que llamamos ”Estructura de Datos”.

3.1.1. Componentes de un programa


Para describir los componentes de un programa introducimos el siguiente cuadro:

Definición 10 .

1. Variable: se representa con letras minúsculas del alfabeto y su valor está dado por el operador a través de una
operación de asignación cuando se ingresa un dato o porque adopta el resultado de una operación interna.

2. Constante: se representa con letras mayúsculas del alfabeto y/o letras griegas. Su valor es fijo en todo el programa.

3. Expresiones :

31
32 CAPÍTULO 3. PROGRAMA.

Figura 3.1: Componentes de un Programa

a) Aritméticas: Son expresiones definidas por variables numéricas y/o expresiones definidas por variables numé-
ricas concatenadas por operadores matemáticos .
Ej. x = x + 1; y = 7; a = b + 1;
b) Alfanuméricas: son cadenas de caracteres . Estas variables se les puede asignar una cadena de letras y números
ej. nombre = "Telefono: 03442429313".
c) Lógicas : Son expresiones que combinan variables que están concatenadas por operadores lógicos, Ej. p → q;
( p ∧ q) → s

4. Acciones o Instrucciones:

a) Declarativas primitivas:
1) De asignación: cuando a una variable se le asigna un valor, la acción ocurre de derecha a izquierda y
se representa en seudocódigo por : ”x = 7, y esto se interpreta como que el procesador mueve el valor 7
hacia la variable de memoria x.
2) De Entrada: Esta declaración se define a través de la acción primitiva Leer , Ejemplo
leer n : esto significa que se le indica al procesador a esperar un valor que será ingresado desde el teclado
por el operador de la computadora. El operador teclea el dato por ejemplo un número 7 y luego preciona
Enter a lo que el procesador envia dicho valor a la dirección de memoria de la variable n en un operación
de asignación.
3) De Salida: Estas acciones se efectivizan a través de las acciones primitivas imprimir la cual produce
una salida por la pantalla. Otro tipo de salida es la acción producida por la grabación de un dato en un
archivo o fichero. Otro tipo de salida es la impresión en papel1
b) De Control:
1) Estructura secuencial.
2) Estructura Condicional: Si ( a > b) ...acción....finsi
3) Estructura Repetir Exacta: repetir ( i desde ..valor inicial hasta valor final )
4) Estructura Repetición inexacta: mientras { accion-1 ...accion-2 ...accion-n } Fin-mientras
1 solo manejaremos en seudocódigo la acción imprimir en pantalla.
3.1. CONCEPTO DE PROGRAMA 33

3.1.2. Elementos auxiliares de un programa


Definición 11 .

1. Contador: es una función de variable entera cuyo valor se incrementa en una unidad en cada ciclo, y se representa
como : a = a + 1 donde la variable suma 1 por cada ciclo de control. Otro ejemplo cont = cont + 1.
2. Acumulador: es una función de variable entera cuyo valor se incrementa en un valor variable en cada ciclo y se
representa como : s = s + cant . En cada ciclo la variable s se incrementa en una cantidad cant.

3. Banderas: son variables de tipo booleana que toman un valor falso o verdadero y se usan para salir o entrar a un
bucle de programa.

3.1.3. Datos
La información que ingresa a la computadora a través de los procesos de lectura de archivos o a través del
teclado de la PC son los datos con los que el procesador resolverá los problemas computables. Existen datos
simples que se describen a través de las variables. Estos datos simples son de direntes tipos, a saber:
1. Datos Numéricos: enteros o con coma.

2. booleano (verdadero o falso)


3. y de caracter :
..............letras : a, b, ...,
..............palabras : cadenas de letras o
..............alfanuméricos : a1, x1,y1 alfa2,...

Mas adelante trabajaremos con datos compuestos o estructurados que no son más que datos simples con
diferentes relaciones definidas entre ellos.
34 CAPÍTULO 3. PROGRAMA.
Bibliografía

[1] Peñaloza Romero, Ernesto. Fundamentos de Programación c/c++. 4ta edición. Ed. Alfaomega. México
2004.
[2] Joyanes Aguilar, Luis. Programación en C++. Algoritmos, estructuras de datos y objetos. Ed. McGraw-Hill
Madrid 2000.

[3] Joyanes Aguilar, Luis. Fundamentos de Programación . Algoritmos, estructuras de datos y objetos. 3er
Edición. Ed. McGraw-Hill Madrid 2002.

35

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