Documente Academic
Documente Profesional
Documente Cultură
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
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.
5
6 CAPÍTULO 1. CONCEPTOS BÁSICOS
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
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.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.
funciones residentes en bibliotecas (generalmente dinámicas) que permiten que una aplicación corra bajo el sistema operativo Windows.
Capítulo 2
2. Analizar el problema.
4. Codificación y ejecución
5. Implementar el programa.
9
10 CAPÍTULO 2. RESOLUCIÓN DE PROBLEMAS COMPUTABLES
1. Se puede resolver?
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 .
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.
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.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.
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
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.
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:
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-
Ejercicio En el ejercicio anterior si la hipotenusa es menor que 5 calcular el área del triángulo.
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.
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. }
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:
Desarrollamos el organigrama de
funciones y enlaces del sistema:
Módulo principal realiza
c) x0=Calculodex0(a,b); b) x0 = -b / (2 ∗ a)
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)
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.
b) a=0, b=0, c=0; p=0; Area=0; a) recibimos los valores del mod. 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
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
3. llamar Verificacion()
4. llamar Longitud()
5. CalcularTipo() lo llamamos desde Longitud()
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;
6. Módulo ImprimirArea(Area,a,b,c,tipo)
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
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)
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)
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
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.
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..
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”.
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.
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
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.
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