Logo Studenta

Fundamentos de Programação

¡Este material tiene más páginas!

Vista previa del material en texto

19
Contenido
1.Fundamentos de Programación Con Python	3
1.1 Introducción	3
1.2 Instalación y configuración	3
1.3 Tipos de datos	3
1.4 Operadores y Expresiones	5
1.4.1 Operadores	5
1.4.2 Expresiones	5
1.4.3 Ejercicios Resueltos	6
1.5 Concepto de variable y constante	6
1.5.1 Variable	6
1.5.2 Constante	6
1.5.3 Clasificación de las variables	7
1.6 Comentarios	8
1.7 Instrucciones de entrada y de salida	8
2. Estructuras de Programación en Python	10
2.1 Estructuras de un programa en Python	10
2.2 Estructuras de programación	10
2.2.1 Estructura secuencial	10
2.2.2 Estructura selectiva	15
2.2.3 Estructura condicional simple	15
2.2.4 Condicionales anidados	17
2.2.5 Estructura condicional múltiple	19
2.2.6 Estructura Repetitiva	24
2.2.6.1 Clasificación de los ciclos	25
2.2.6.2 Ciclo Contador	25
2.2.6.3 Ciclos centinela	27
2.2.6.4 Ciclos anidados	28
Parte 3: Arreglos	33
3.1 Introducción	33
3.2 Concepto de arreglo	33
3.3 Clasificación de los arreglos	33
3.4 Índices	34
3.5 Referencia a un elemento de un arreglo	34
3.6 Declaración de un arreglo	35
3.7 Operaciones con arreglos	35
3.8 Algoritmos con vectores	36
3.9 Algoritmos con matrices	40
Parte 4. Programación Modular	47
4.1	Presentación	47
4.2	Reglas de la programación modular	47
4.3	Comunicación entre los módulos	48
4.4	Parámetros de un subprograma	48
4.4.1	Parámetro según su ubicación en el programa	48
4.4.2	Parámetro según el paso del valor	48
4.5	Subprogramas: funciones y procedimientos	49
4.5.1	Función	49
4.5.2 Procedimiento	49
4.6 Técnica para diseñar algoritmos modulares	50
4.7 Invocar una función o un procedimiento	51
1. Fundamentos de Programación Con Python
Sintetizado por:
Gildardo Antonio Orrego Villa-Marco Antonio López Ospina
1.1 Introducción
Python es un lenguaje de programación de propósito general, que también puede utilizarse para el desarrollo web. Python es una apuesta por la simplicidad, versatilidad y rapidez en el desarrollo de soluciones algorítmicas. Entre otras razones, para su uso actual, por encima de otros lenguajes tradicionales son las siguientes:
* Es gratuito, por ende facilita su uso en entornos académicos, industriales e incluso para propósitos empresariales, lo que reduce los costos asociados a licenciamientos, accesos, disponibilidad y portabilidad.
* Es un lenguaje de tipo intérprete (no se necesita compilar todo el código fuente para poder ejecutarlo), sino que lo hace línea por línea.
* Ofrece ventajas, tales como: la rapidez de desarrollo; menor velocidad en la implementación de soluciones; sencillez respecto a la cantidad de líneas de código (puede tener de 3 a 5 líneas de código menos que su equivalente en Java o en C).
* Es un lenguaje de scripting independiente de plataforma y orientado a objetos, preparado para realizar cualquier tipo de programa, desde aplicaciones Windows hasta servidores de red o páginas web.
* La cantidad de librerías que contiene, tipos de datos y funciones incorporadas facilitan el desarrollo de muchas tareas habituales, sin necesidad programarlas desde el inicio.
* La cantidad de plataformas en las que se puede desarrollar, como Unix, Windows, OS/2, Mac, Amiga y otros.
1.2 Instalación y configuración
Se recomienda ver y practicar la instalación y configuración de Python mediante el siguiente video: https://www.youtube.com/watch?v=Jcm7oiaH2m8
1.3 Tipos de datos
En Python no es necesario declarar el tipo de dato que se almacenará en una variable, ya que su tipo lo determinará en tiempo de ejecución, según el valor asignado. A este proceso se denomina “tipado dinámico”.
Es importante que al comenzar la etapa de diseño del algoritmo se dedique buena parte al análisis de los datos y en este caso a la declaración del tipo de dato al cual corresponde cada variable (como se verá más adelante). El tipo de dato determina el rango de valores al cual corresponde la variable y que podría ser aceptado por la máquina. Los tipos de dato pueden clasificarse en: datos simples (numéricos, datos lógicos y datos carácter) y estructurados (cadenas, arreglos, registros, archivos, conjuntos y punteros). 
Datos numéricos. Se dice que un dato es de tipo numérico si está en un intervalo con valores numéricos. Ese conjunto puede subdividirse en enteros y en reales.
· Tipo numérico entero (int). Si el valor del dato no tiene componentes fraccionarias o decimales se dice que es de tipo entero. Dichos valores pueden ser positivos o negativos. Ejemplo, la edad, la cantidad de personas, animales o cosas de algún sitio.
· Tipo numérico real (float o double). Si el valor al cual representa el dato tiene componentes fraccionarias o decimales se dice que es de tipo real. Dichos valores pueden ser positivos o negativos. Ejemplo, la estatura en metros, el peso en kilogramos.
Datos lógicos (bool). Se denomina dato de tipo lógico a aquel que puede tomar solo los valores False o True (comenzando con mayúscula). Este tipo de dato se utiliza para representar alternativas o decisiones y comparaciones, de las cuales puede decirse que es falsa o no. Ejemplo, se pregunta si un valor es positivo o negativo, se responde False o True. 
Dato carácter/cadena o texto (char/string). Se dice dato de tipo carácter, al conjunto finito y ordenado de caracteres (letras, símbolos especiales y símbolos que representan números) que el computador reconoce. Los conjuntos de caracteres o sucesión de éstos se denominan cadenas (o string) que van entre comillas dobles y los conjuntos de un solo carácter se denominan simplemente carácter y van entre el comillas simples. Las cadenas se pueden reconocer también como arreglos de caracteres.
Tanto los datos carácter (char) como las cadenas deben delimitarse entre comillas, ya sean en comillas simples o en dobles. Ejemplo, “María”, “Buenos días”, ‘2’ (representa el símbolo de número dos), ‘*’ (representa el carácter * más no al operador de la multiplicación).
1.4 Operadores y Expresiones
1.4.1 Operadores
Son todos aquellos signos que indican la realización de operaciones aritméticas o lógicas (booleanas). Pueden clasificarse como:
Operador aritmético: +, -, *, / (división), // (división entera), % (módulo), ** (potencia)
Operador relacional: == (igual), < (menor que), <= (menor o igual que), > (mayor que), >= (mayor o igual que) y != (diferente)
Operador lógico: not, and, or
	Prioridad
	Operador aritmético
	Operador lógico
	1
	Potencia y radicación
	Negación – NO: not
	2
	Multiplicación, división y módulo
	Conjunción – Y: and
	3
	Suma y resta
	Disyunción – O: or
Cuadro 1: Prioridad de los operadores
Cada operador tiene su correspondiente prioridad la cual hay que tenerse en cuenta en el momento de ir a evaluar una expresión. En efecto, los operadores de igual prioridad se evalúan de izquierda a derecha cuando coinciden en una operación aritmética o lógica. Si una expresión (aritmética o lógica) contiene otras expresiones encerradas entre paréntesis, éstas se evaluarán primero, según su prioridad. Una expresión estará bien escrita siempre que la cantidad de paréntesis izquierdos sea igual a la cantidad de paréntesis derechos.
1.4.2 Expresiones
Se denomina expresión al grupo de operadores que actúan (separan) sobre una agrupación de variables. Se pueden clasificar en expresiones aritméticas y lógicas.
Expresión aritmética. Es un conjunto de variables o constantes numéricas separadas o no por operadores aritméticos. Producen un valor numérico. Ej. (x-y)*(w+z)=v, siendo v, w, x, y, z variables numéricas declaradas
Expresión booleana. Es un conjunto de variables o constantes lógicas separadas o no por operadores lógicos o también expresiones aritméticas separadas por operadores relacionales. Producen un valor lógico. Ejemplo, (x-y)>(w+z), siendo w, x, y, z variables numéricas declaradas. 
Otro ejemplo de expresión lógica sería: ((not x or y) and (w and not y)) or not z, siendo w, x, y, z variables lógicas declaradas.
1.4.3 Ejercicios Resueltos
Ejemplo 1.1: Calcule el valor de:
a) (True and not True) o not(not(not False o True) y (not False or True))== False or not(not True y True)= True
b) ((4*3-5)-7)//2=((12-5)-7)//2 = (12-5-7)/2 = 0/2 = 0
c) ((4**2 -7)*3)/9-15 = -12
d) (((6**2 -15)/3)**2+15)**(½) – (9**(1/2) –4*(5-1)** 2 + (16*4)) = 8 –(3-64+64)= 
1.5 Concepto de variable y constante
Cuando en la vida real se dice que "las cosas cambian o no con el tiempo", en lo concerniente al argot de programación podremos hablar de "variables" o "constantes", respectivamente. 
1.5.1 Variable 
Una variable es un espacio en la memoria del computador que sirve para almacenar datos. En efecto, una variable puede tomar distintos valores durante el transcurso de la ejecución del algoritmo o programa, pero que en un momento determinado posee el mismo valor. 
Toda variable consta de dos características básicas: su nombre y su valor. El nombre debe ser mnemotécnico, es decir, que al leerlo fácilmente se entienda o al menos se pueda intuir; no debe llevar caracteres en blanco ni especiales y en lo posible evitar que sean muy cortos o muy largos.
1.5.2 Constante
Cuando no cambia de valor durante la ejecución del algoritmo se dice entonces que es una "Constante". El nombre también debe ser mnemotécnico; el valor puede ser numérico, booleano o una cadena de caracteres, la cual debe ir entre comillas. En Python escriba las variables con minúsculas; si el nombre de esta es compuesto, separe dichas palabras con el guión bajo (_). No debe utilizar caracteres especiales.
Ejemplo 1.2:
	nombre variable
	Valor
	color_cabello
	negro, castaño oscuro, castaño claro, rubio, blanco, gris.
	valor_verdad
	falso, verdadero
	edad_Ingreso
	6, 7, 8
	Sexo
	femenino, masculino
	estatura_persona
	160, 180, 190, 203
Cuadro 2: Variables
Ejemplo 1.3:
	Nombre constante
	Valor
	salario_mes
	250000
	valor_verdad
	verdadero
	Despedida
	“ADIOS”
Cuadro 3: Constantes
1.5.3 Clasificación de las variables
Las variables se pueden clasificar por su contenido y por su uso.
Variables por su contenido. Se clasifican en numéricas (reales o enteras), alfabéticas, alfanuméricas, lógicas (booleanas)
Variables por su uso. Se subdividen en variable contadora, variable acumuladora y variable suiche (averigua si algo pasó u obliga a pasar algo), variable bandera o centinela (definida por el programador para que cumpla una condición determinada).
Variable contadora. Es una variable de tipo entero que se incrementa o disminuye manera constante en cada iteración. Se utiliza para controlar ciclos en procesos repetitivos.
contador =contador + k
La variable contador se incrementa k (siendo k un valor constante). También,
contador = contador - k
Con lo cual contador se disminuye (siendo k un valor constante)
Variable acumuladora. Tiene como fin almacenar cantidades variables de tipo entero o real resultantes de sumas sucesivas. Observe que tiene la misma función de un contador, pero se diferencia en que el incremento o disminución de cada suma es variable. 
Variable_acumulador = Variable_acumulador + v
La variable acumulador se incrementa v (siendo v un valor variable) y se escribe
Variable_acumulador = Variable_acumulador – v
donde v disminuye a la variable acumulador (siendo v un valor variable)
Variable suiche. Algunos programadores también la denominan interruptor, conmutador. Corresponde a un espacio de memoria que puede tomar dos valores a largo de la ejecución del programa y que permite llevar información de una parte a otra. Son de tipo lógico o booleano. Su utilización se hace de la siguiente manera: se inicializa en un valor determinado (0 ó 1, false o true, apagado o encendido, cerrado o abierto, sí o no) y luego se modifica por la otra opción. 
Variable bandera o centinela. Tiene aplicación en la ejecución de alternativa de acciones diferentes dentro de un ciclo, para interrumpir alternativas o para rompimiento de control. Para tal fin, se pone como condición de un ciclo la variable centinela que puede ser de cualquier tipo (entero, real, lógico o carácter), dependiendo de la necesidad para lo cual la tenga el programador.
Las variables nombre, edad, peso y suiche se denominan centinelas y se inicializan antes de cada ciclo y se vuelven a leer antes de cerrar el ciclo. Cuando toma el valor que el programador ha determinado, se rompe el control del ciclo. En el último caso, se inicializa el suiche como verdadero y, para romper el control, se cambia a falso.
1.6 Comentarios 
Con el fin de hacer comentarios de las instrucciones o líneas de comando se utiliza la siguiente instrucción que no es ejecutable, solo sirve para documentar el programa: 
#comentario
 1.7 Instrucciones de entrada y de salida
Los datos que entrarán corresponderán a los insumos para que sea funcional la solución. En efecto, haga una lista de los insumos debajo de la figura que indica entrada de datos. Las variables que determine como entrada corresponden a las que el usuario tendrá que ingresar
input(): es una función utilizada para ingresar y asignar datos por teclado a una variable. 
Sintaxis: 
nombre_variable=input(“mensaje”)
variable_entero=int(input())	#ingresar número entero
variable_real=float(input())		# ingresar número real
variable_caracter=char(input())	#ingresar carácter
variable_cadena=input()		#recibe cadena
variable_cadena=bool(input())	#recibe un valor lógico
Se recomienda que cada vez que en Python se use este comando, lo acompañe de un mensaje, pues de tal manera el usuario sabrá lo que tiene que ingresar. El mensaje tendrá que ser tan claro que el usuario no debería dar pie a confusiones. Piense que lo que se está haciendo es para un usuario y no para usted.
print(): en función empleada para sacar resultados por pantalla. Para tal fin, si es para mostrar mensajes se ponen paréntesis y dentro de ellos se escribe el mensaje entre comillas dobles. 
print (Lista de variables)
print (“MENSAJE”)
print (“MENSAJE”, NombreVariable)
print (NombreVariable ,“MENSAJE”)
EJERCICIO 1
1. Escriba cada una de las siguientes expresiones utilizando los operadores de Python 
a) 	
b) 
2. Estructuras de Programación en Python
2.1 Estructuras de un programa en Python
La estructura de un programa en Python es:
def main(): 	#comienza el programa 
	Conjunto de Instrucciones
main() 		#cierra el programa
Figura 2.1: estructura de un programa en Python
2.2 Estructuras de programación 
Bohm y Jacopini[footnoteRef:1] demostraron que todos los programas de computación podían ser escritos bajo tres estructuras básicas de control: [1: Bohm, C y Jacopini, G. “Flow Diagrams, Turing Machines, and Languages with Only Two Formation Rules”, Communications of the ACM, Vol.9,No.5, mayo 1966, pp.336-371.] 
· Estructura secuencial
· Estructura selectiva
· Estructura repetitiva
Dichas estructuras se utilizan para diseñar algoritmos y para codificar programas. 
2.2.1 Estructura secuencial
Dicha estructura se utiliza para asignar un nuevo valor a una variable. Para la sintaxis correspondiente tanto en diagramas de flujo como en pseudocódigo se utilizará la flecha dirigida hacia la izquierda “=”. Dicha flecha significa que se va a actualizar una variable o que una variable toma un valor inicial. Recuerde que cuando una variable no toma un valor inicial, el sistema le pone un valor al azar, con lo cual se logran resultados inesperados. La variable de la izquierda recibe el valor o los valores de la expresión del lado derecho.
Su sintaxis será:
	Variable = Valor 
	Variable = Expresión 
Figura 2.2: estructura secuencial de un programa en Python
Ejemplo 2.1: diseñe el algoritmo, utilizando la estructura de algoritmo en pseudocódigo y su código en Python, que describa los pasos de lo que hace cada instrucción del algoritmo.
A = 5
B = A+4
C = B-6
B = B*3
C = B-12
A = C+B-A
Solución algorítmica:
Algoritmo operaciones
Var
	A,B,C: entero
INICIO
	A=5
	B=A+4
	C=B-6
	B=B*3
	C=B-12
	A=C+B-A
	Muestre(“A=”,A,“B=”,B,“C=”,C)
FIN
Codificación en Python:
def main(): 	#comienzo de un programa en Python
….A=5
….B=A+4
….B=B-6
….B=B*3
….C=B-12
….A=C+B-A
….print (“A=”, A, “B=”, B, “C=”, C)
main() #fin de un programa en Python
Ejemplo 2.2: diseñe un algoritmo y codifique en Python una solución que muestre elvalor de la expresión la (4-3x)(6+5y). Clasifique las variables de entrada de salida y de proceso.
x: variables numérica real de entrada 
y: variables numérica real de entrada
c: variables numérica real de proceso y de salida a la vez, donde c=(4-3*x)*(6+5*y)
Solución algorítmica:
Algoritmo expresion
Var
	x,y,c:real
INICIO
	Muestre(“Entre el valor de x: ”)
	Lea(x)
	Muestre(“Entre el valor de y: ”)
	Lea(y)
	c=(4-3*x)*(6+5*y)
Muestre(“El valor de c es: ”,c)
FIN
Codificación en Python:
def main():
….x=int(input(“Entre el valor de x”))
….y=int(input(“Entre el valor de y”))
….c=(4-3*x)*(6+5*y)
….print(“El valor de c es:”,c)
main()
Ejemplo 2.3: Diseñe un algoritmo y haga su código en Python, que lea 2 valores, encuentre la suma de ellos y la imprima.
Solución algorítmica:
Algoritmo suma
Var 
v1, v2, suma : real
INICIO
Muestre (‘Ingrese el primer valor’)
Lea v1
Muestre (‘Ingrese el segundo valor’)
Lea v2
suma=v1+v2
Muestre (‘La suma de los dos valores es:..’,suma)
FIN
Codificación en Python:
 # v1 --> Primer valor entero ingresado por teclado.
# v2 --> Segundo valor entero ingresado por teclado.
 
def main():
….v1=int(input("Ingrese el primer valor...:")) #Esta es una forma de leer valores
….print("Ingrese el segundo valor...:",end="")
….v2= int(input()) 	 #Esta es otra forma de leer valores 
….print ('El resultado de la suma es ..:',v1+v2)
main()
Ejemplo 2.4: Diseñe un algoritmo y desarrolle su código en Python que lea para una compra, cantidad y precio unitario de un producto, calcule el total a pagar y lo muestre.
Solución Algorítmica
 Algoritmo compra
Var cantidad: entero
vu, tc: real
INICIO
Muestre(‘Ingrese la Cantidad de Producto’)
Lea (cantidad)
Muestre(‘Ingrese el precio unitario del producto’)
Lea (vu)
tc=cantidad*vu
Muestre(‘El valor de la compra es….’,tc)
FIN
Codificación en Python:
# cantidad --> Cantidad del producto
# vu --> Valor unitario del producto
# tc --> Total de la compra
 
def main():
….cantidad=int(input("Ingrese la cantidad de producto...:")) #Lectura de un entero
….vu=float(input("Ingrese el valor unitario del producto...:")) #Lectura de un real
….tc=cantidad*vu
….print ('El valor de la compra es ..:',tc)
main()
 TALLER 2.1
Diseñe algoritmos que resuelvan cada uno de los siguientes problemas:
1. Calcule y muestre el área de un cuadrado
2. Calcule y muestre el área de un triángulo
3. Calcule y muestre el área de un trapecio
4. Calcule el volumen de una esfera (4/3 de pi por el cubo del radio).
5. Calcule la base mayor de un trapecio dadas su área, su base menor y su altura. Se sabe que el área de un trapecio es igual al producto de la semisuma de sus bases (menor y mayor) por la altura.
Para un movimiento uniformemente acelerado (de aceleración constante), sea VI: velocidad inicial, VF: velocidad final, T: tiempo, A: aceleración y S: distancia. Entonces, sus fórmulas cinemáticas son:
A=(VF-VI)/T	(1)
VF2=VI2+2AS	(2)
S=VI.T+0.5AT2	(3)
Resuelva los problemas del 6 al 9 utilizando la(s) correspondiente(s) fórmula(s) cinemática(s):
6. Calcule la velocidad V de un móvil que recorre una distancia S en un tiempo T. Los valores T y S son ingresados por el usuario.
7. Calcule la velocidad VF con la que llega un móvil que parte con una velocidad inicial VI y con una aceleración constante A recorre una distancia S. Los valores VI, A, S son ingresados por el usuario.
8. Calcule la aceleración constante A de un móvil, dado que parte con una velocidad inicial VI y llega con una velocidad final VF después de recorrer una distancia S en un tiempo T. Los valores VI, VF, T, S son ingresados por el usuario.
9. Calcule la distancia recorrida por un móvil que se desplaza durante un tiempo T, partiendo con una velocidad inicial VI hasta alcanzar una velocidad final VF.
10. Determine el valor de a y b dado que a=x2-3x+5 y b= 2t2-4x-11
11. Determine el valor de c dado que c=a-b y se sabe que a=x2-3x+5 y b= 7t2-3t+15 
Sea C el capital inicial y Q el capital alcanzado en un tiempo n a un interés I. Entonces
Q=C(1+n*I/100) capitalización al cabo de n tiempo a un interés simple I.
Q=C(1+I/100)n capitalización al cabo de n tiempo a un interés compuesto I
12. Calcule el capital Q obtenido a partir de un capital C al cabo de un tiempo n a un interés simple I%.
13. Calcule el tiempo n al cual se dejó un capital C para obtener un capital Q a un interés simple I%. 
14. Calcule el tiempo en que ha de imponerse un capital C al I% para que se convierta en un capital Q.
15. Halle el tiempo en que se triplica un capital C, puesto a un interés I%.
16. Halle el interés producido durante n años, por un capital de C, al I%.
17. Solucione una ecuación de primer grado con una incógnita.
18. Un inversionista tiene un capital X y lo presta durante 20 meses a una tasa de interés de Z% mensual. ¿cuál es su capital al recibir el dinero?
19. ¿Cuál es el costo después de descuento y cuanto el descuento de las entradas para 15 personas que van a cine?, si se conoce el precio de la boleta y se tiene en cuenta que recibirán un 25% de descuento por ser más de 10.
20. Un estudiante presenta 3 trabajos, con los siguientes porcentajes 50%, 30% y 20%, conociendo las notas de los 3 trabajos. Se pide calcular el promedio.
21. Un empleado trabaja 120 horas ordinarias en un mes y 20 horas extras diurnas. La hora normal es n pesos y la extra tiene un 25% de incremento, ¿cuánto recibe el empleado y cuánto le descuentan, si aporta el 8% de su salario para seguridad y social y el 5% para una cooperativa?
22. Un colegio tiene matriculados para los n estudiantes distribuidos en: preescolar, básica y media. Se pide calcular el porcentaje por cada nivel, conocida la cantidad de estudiantes por nivel.
23. Se quiere saber cuánto pagar por un pasaje aéreo, dado que tiene un descuento del 18% y se aplica el IVA (16%) antes del descuento del tiquete.
24. Un viajero requiere 2.800 dólares y desea saber ¿cuántos pesos colombianos necesita?, si debe pagar una comisión del 2%, y el valor actual del dólar es $2.925.
2.2.2 Estructura selectiva 
Esta estructura permite tomar una decisión. Está formada por una decisión lógica, llamada condición; de allí salen dos posibles alternativas de secuencia: una de ellas toma la decisión verdadera, y la otra cuando es falsa. Finalmente, se unifican las salidas de las alternativas, cumpliendo así con la característica de cada estructura: producir una sola salida.
Es importante saber que la condición siempre llevará una expresión relacional (una comparación) o una expresión lógica, de tal manera producirá un resultado lógico. La variable utilizada en la condición se denomina variable de control. 
2.2.3 Estructura condicional simple
Esta estructura selectiva se conoce como alternativa o condicional. Se encarga de evaluar una situación llamada condición, la cual lleva una o más expresiones relacionales con sus correspondientes operadores lógicos. En caso de verificarse como verdadera, se realizan unas acciones, y en caso contrario se evalúan otras acciones. Debe tenerse en cuenta en la sintaxis en pseudocódigo que, comienza con “if” y al terminar la última instrucción del conjunto de acciones debe ponerse con indentación.
Figura 2.3: Condicional en pseudocódigo
En Python la sintaxis de la estructura selectiva es:
if Condición:
…. “Acciones”
else:
…. “Acciones”
Figura 2.4: Condicional en Python
Tenga en cuenta dejar siempre la sangría de cada línea de código del condicional; así no genera errores.
Ejemplo 2.5: haga un algoritmo que determine si un número ingresado por el usuario es par o impar. Se sabe que un número es par si al dividir un número por 2 su residuo es 0. En efecto, se toma el número y se opera con el módulo (que es no negativo) y se iguala a 0 (numero mod 2=0). 
Algoritmo ParImpar
Var
	numero: entero
INICIO
	Muestre(“Entre un numero entero”)
	Lea(numero)
	Si numero Mod 2=0 Entonces
		Muestre(numero, “ es par”)
	Sino
		Muestre(numero, “ es impar”)
	finSi
FIN
Código en Python:
def main():
….numero=int(input(“Entre un número entero”))
….if numeromod 2=0
……..print numero, “es positivo”
 else:
……..print numero, “es negativo”
main()
Ejemplo 2.6: Elaborar un programa que lee 2 valores enteros, si el primero es mayor que el segundo los suma, de lo contrario los multiplique.
Solución algorítmica
Algoritmo SumaProd
Var
n1, n2: entero
INICIO
Muestre(‘ Ingrese un valor entero…’)
Lea (n1)
Muestre(‘ Ingrese otro valor entero…’)
Lea (n2)
 	Si n1>n2 entonces
 	 	Muestre(‘La suma es..:’,n1+n2)
 	Sino
 	 	Muestre(‘El producto es..:n1*n2)
 	Finsi
FIN
Codificación en Python:
# n1 --> Primer valor entero ingresado por teclado.
# n2 --> Segundo valor entero ingresado por teclado.
 
def main():
 n1=int(input("Ingrese el primer valor...:"))
 n2=int(input("Ingrese el primer valor...:"))
	if n1>n2:
 	 print('La suma es ...:',n1+n2)
	else:
 	 print('El producto es ...:',n1*n2)
main()
2.2.4 Condicionales anidados
Muchas veces los algoritmos o programas tienen bifurcaciones en los condicionales, que terminan, en algunos casos, teniendo la siguiente forma:
Figura 2.5: estructura condicional anidado en pseudocódigo
Ejemplo 2.7: Diseñe un algoritmo que lee dos valores enteros, si el primero es mayor que el segundo los suma; si el segundo es mayor que el primero los eleva al cuadrado y los suma, de lo contrario los multiplica
Solución Algorítmica:
Algoritmo Comparar
Var
n1, n2: entero
INICIO
Muestre(‘ Ingrese un valor entero…’)
Lea (n1)
Muestre(‘ Ingrese otro valor entero…’)
Lea (n2)
 	Si n1>n2 entonces
 	 	Muestre(‘El resultado es..:’,n1+n2)
 	Sino
 	 	Si n2>n1 entonces
 	 	 	Muestre(‘El resultado es..:n1*n1+ n2*n2)
 	 	Sino
 	 	 	 	Muestre(‘El resultado es..:n1*n2)
 	Finsi
FIN
 
Codificación en Python:
 
# n1 --> Primer valor entero ingresado por teclado.
# n2 --> Segundo valor entero ingresado por teclado.
 
def main():
 n1=int(input("Ingrese el primer valor...:"))
 n2=int(input("Ingrese el primer valor...:"))
 if n1>n2:
 print('La suma es ...:',n1+n2)
 else:
 if n2>n1:
 print('El producto es ...:',n1*n1+n2*n2)
 else:
 print('El resultado es ...:',n1*n2)
main()
En un mismo bloque pueden tenerse varias instrucciones, pero con la misma sangría o indentación. No se permite que en un mismo bloque haya instrucciones con distintos sangrados. Dependiendo del orden de la indentación, el mensaje de error al intentar ejecutar el programa será diferente:
· En el primer caso, la primera instrucción determina el sangrado de ese bloque, por lo que al encontrar la segunda instrucción, con un sangrado mayor, se produce el error "unexpected indent" (sangrado inesperado).
if condición:
acción 1
acción 2	
else:
	acciones
· En el segundo caso, la primera instrucción determina el sangrado de ese bloque, por lo que al encontrar la segunda instrucción, con un sangrado menor, Python entiende que esa instrucción pertenece a otro bloque, pero como no hay ningún bloque con ese nivel de sangrado, se produce el error "unindent does not match any outer indentation level" (el sangrado no coincide con el de ningún nivel superior). Veamos:
if condición:
acción 1	
acción 2
else:
	acciones
· En el tercer caso, como la segunda instrucción no tiene sangrado, Python entiende que la bifurcación, así:
if condición:
acción 1
acción 2
else:
	acciones		
Es decir, else está sin su if correspondiente, produciéndose el error "invalid syntax" (sintaxis no válida).
Ejemplo 2.8: Haga la prueba de escritorio al siguiente algoritmo mostrando, Sexo, Edad y plataforma.
Algoritmo prueba
Var
	Edad: entero	
Sexo: carácter
INICIO
	Muestre(“Ingrese sexo: 1. Hombre 2. Mujer”)
	Lea(sexo)
Muestre(“Ingrese Edad”)
	Lea(edad)
	Si edad>=18 y edad <50 Entonces
 Si sexo=2 Entonces
	 Muestre(“Vaya a Plataforma 1.”)
		Muestre(“Deténgase allí!”)
	 Sino
		Si (sexo=1) Entonces
		 Muestre(“Vaya a Plataforma 2.”)
		 Muestre(“No se detenga!”)
		FinSi
	 FinSI
	Sino
	 Muestre(“Vaya a plataforma 3.”)
	 Muestre(“Tenga mucho cuidado!”)
	FInSI 
FIN
Codificación en Python
def main():
….sexo=char(input (“Ingrese sexo: 1. Hombre 2. Mujer”))
….edad=int(input(“Ingrese Edad”))
….if edad>=18 and edad <50:
……..if sexo==2:
…………print (“Vaya a Plataforma 1.”)
…………print (“Deténgase allí!”)
……..else:
…………if sexo==1:
…………….print (“Vaya a Plataforma 2.”)
…………….print (“No se detenga!”)
…………….else:
………………..print (“Vaya a plataforma 3.”)
………………..print (“Tenga mucho cuidado!”)
main()
2.2.5 Estructura condicional múltiple
Esta estructura evalúa la expresión dada en función de un valor constante, resultante. De tal manera realiza una tarea determinada. La estructura selectiva múltiple se da tanto en cualquier herramienta de programación y en especial, en pseudocódigo. 
Figura 2.6: Condición múltiple en pseudocódigo
Sintaxis en Python
if expresión 1:
 acción 1
elif expresión 2:
 acción 2
elif expresiones 3
 acción 3
.
.
.
Else:
 acción n
Figura 2.7: Condición múltiple en Python
Ejemplo 2.8: Diseñe un algoritmo que imprima las fechas (día y mes) entre las que transcurre cada una de las estaciones del año en el hemisferio norte. Para tal fin, cree un menú para que el usuario seleccione la estación deseada. El algoritmo debe dar la opción para que el usuario pueda ver reiterativamente todas las estaciones y salirse cuando él lo quiera.
Algoritmo Estaciones
Var
opcion:caracter
INICIO
Muestre("DIGITE LA OPCION DESEADA: 1. PRIMAVERA 2. VERANO 3. OTONO 4. INVIERNO 5. SALIR=>")
Lea(opcion)
 	Mientras no(opcion="1" o opcion="2" o opcion="3" o opcion="4" o opcion="5")
Muestre("DIGITE LA OPCION DESEADA: 1. PRIMAVERA 2. VERANO 3. OTONO 4. INVIERNO 5. SALIR=>")
Lea(opcion)
	FinMientras
 	En caso de opcion haga
"1":Muestre("22 de marzo hasta junio 21")
 		"2": Muestre("22 de junio hasta septiembre 21")
 		"3": Muestre("22 de septiembre hasta diciembre 21")
 		"4": Muestre("22 de diciembre hasta marzo 21")
 		“5”: Muestre("adios-adios")
FIN
El código en Python corresponde a:
def main():
 opcion=input("DIGITE LA OPCION DESEADA: 1. PRIMAVERA 2. VERANO 3. OTONO 4. INVIERNO 5. SALIR=>")
 while not(opcion=="1" or opcion=="2" or opcion=="3" or opcion=="4" or opcion=="5"):
 opcion=input("DIGITE LA OPCION DESEADA: 1. PRIMAVERA 2. VERANO 3. OTONO 4. INVIERNO 5. SALIR=>")
 if opcion=="1":
 print("22 de marzo hasta junio 21")
 elif opcion=="2":
 print("22 de junio hasta septiembre 21")
 elif opcion=="3":
 print("22 de septiembre hasta diciembre 21")
 elif opcion=="4":
 print("22 de diciembre hasta marzo 21")
 else:
 print("adios-adios")
main()
TALLER 2.2 
Algoritmos con condicionales
1. Lea e imprima dos números y calcule la suma la resta, el producto, la división y el residuo. Imprima los resultados con los respectivos números.
2. Ingrese el nombre, el sexo (masculino o femenino), la edad y el estado civil (soltero, casado, unión libre, viudo separado) y mostrar el nombre, sexo, su estado civil y si es menor o mayor de edad. 
3. Muestre la hora un segundo después cada vez (para un reloj de 12 horas).
4. Genere tres números enteros y determine si un número de ellos impar e igual a la suma de los otros dos, con sus  respectivos mensajes.
5. Determine el rango en que está un número ingresado por el usuario, según los límites inferior y superior de los rangos de la tabla 1.
	Rango
	Entre 0 y 50
	Entre 51 y 100
	Entre 101 y 150
	Mayor que150	
Tabla 1
6. Resuelva completamente una ecuación cuadrática. Dicho programa debe mostrar el valor (real o imaginario) con su respectivo mensaje; ponga además un mensaje para solicitar el valor de los coeficientes. 
7. En un gimnasio, su deportólogo ha analizado la cantidad mínima y máxima de ejercicios que deben realizar los adultos de este lugar, según el sexo, como se dan en la tabla 2. 
	Sexo
	Cantidad mínima de flexiones
	Levantamiento en Kgs. 
	Masculino
	60-10060-80
	Femenino
	40-80
	30-40
Tabla 2
Quienes estén por debajo de estos límites se califican como “diezmados”; dentro del rango, se llamarán “optimizados” y si se encuentran por encima se denominan “potenciados”. Haga un algoritmo que determine el tipo de deportista practicante. 
8. Muestre el mensaje y el valor del premio que se gana un jugador según el puntaje alcanzado (entre 0 y 100 puntos) en una prueba, teniendo en cuenta la tabla 3:
	Puntaje
	Mensaje
	Premio ($)
	Menos de 20
	Deficiente
	0
	Entre 20 y 45
	Insuficiente
	1000
	Entre 46 y 70
	Aceptable
	10000
	Entre 71 y 90
	Sobresaliente
	20000
	Más de 90
	Excelente
	50000
Tabla 3
9. Se sabe que el trabajador tiene un salario básico a la semana el cual está basado en el número de horas ordinarias trabajadas y el valor fijo por hora ordinaria de $10500, y que su pago total a la semana tiene bonificaciones y descuentos (deducciones). Las bonificaciones se dan en la tabla 4:
	Bonificaciones
	Opción
	Horas semanales
	Porcentaje adicional
	1
	Horas extras diurnas
	25%
	2
	Horas nocturnas ordinarias
	35%
Tabla 4
La empresa tiene como política asignar solamente horas extras diurnas cuando sea necesario y trabajar algunas horas nocturnas ordinarias, más no horas extras nocturnas 
Las deducciones son para salud y pensión, como se da en la tabla 5
	Deducción salud y pensión 
	Concepto
	Porcentaje descuento
	Salud
	4%
	Pensión
	5%
Tabla 5
Liquidación del salario semanal: Se determina a partir del salario básico semanal y este podría ser: Liquidación = (Salario básico semanal + Bonificaciones – Deducción salud – Deducción Pensión).	
10. Se requiere saber cuánto se debe pagar un cliente por una compra de una cantidad desconocida de artículos, conociendo la cantidad y precio unitario, además que si el valor total es superior a $ 100, tiene un descuento del 10%, de lo contrario el descuento es del 6%.
 
11. Se requiere verificar si un joven es apto para conformar un equipo de basquetbol; teniendo en cuenta que la edad debe estar entre 18 y 25 años, la estatura debe ser superior a 1,90 mts. y el peso entre 80 y 100 kilos. La edad, estatura y peso son datos conocidos; debe mostrar un mensaje de apto o no apto.
 
12. Un empleado gana un salario básico conocido y comisiones por cantidad de ventas, así: de 1 a 5 el 7%, de 6 a 10 el 9% y de 11 a 15 el 12%, si el número de ventas es superior, su comisión será del 15%; el porcentaje se aplica al total del monto las ventas, es decir, si por ejemplo las ventas son 20, por valor de 30 millones; se le aplica el 15% al valor de todas la ventas. El número y total de ventas, son valores conocidos y se requiere calcular el salario teniendo en cuenta que debe aportar el 8% para la seguridad social y si el salario resultante es mayor a 4 millones, se le descuenta el 1% de retención en la fuente.
13. Elabore un algoritmo que lea el nombre y la edad de una persona y si la edad es mayor o igual a 18 años, muestre el nombre y el mensaje: usted es mayor de edad, de lo contrario, muestre el nombre y el mensaje: le falta para la mayoría de edad. 
14. Elabore un programa que leídos los valores de 3 tres segmentos que forman un triángulo, averigüe qué tipo de triángulo se puede formar con ellos.
15. Una tienda vende artículos, elabore un algoritmo que pida al usuario el nombre del artículo, su descripción, la cantidad requerida y el precio unitario. Si el usuario necesita entre 100 y 500 unidades, aplique un descuento del 10%, si requiere más de 500 unidades, el descuento sería del 12%, si el usuario requiere menos de 100 unidades, el descuento es del 6%. También debe adicionar el IVA al precio total. Se requiere imprimir el nombre, la descripción, el precio unitario y total antes de IVA y el precio total con IVA incluido.
16. Tres autos se desplazan de Medellín a Sabaneta en tiempos X, Y, Z respectivamente; los tres tiempos son diferentes, encontrar el tiempo de desplazamiento mayor y el menor.
17. Dada la duración en minutos de una llamada, calcular el costo. Considerando que hasta tres minutos el costo es $200, por encima de tres minutos es $200 más el 12%, por cada minuto adicional a los tres primeros.
18. Elabore un programa que lea 4 valores que representan segmentos de recta y averigüe: si con ello se forma un cuadrado, un rectángulo u otro cuadrilátero y lo haga saber con un mensaje.
19. Elabore un algoritmo que lea de un tiquete aéreo, el valor y el destino (Nacional o Internacional). Si el destino es nacional, el descuento será: del 5%, de lo contrario, el descuento será del 10%; imprima toda la información, teniendo en cuenta el valor antes del descuento y el valor con descuento.
2.2.6 Estructura Repetitiva
Esta estructura también conocida como bucle o ciclo; es utilizada cuando una de las actividades o instrucciones se deben repetir varias veces (repeticiones que deben ser determinadas), siempre que se cumpla una condición dada. 
Cada evaluación de la condición se denomina paso o iteración de ciclo, y en el momento en que no se cumpla la condición dada, se da el llamado “rompimiento de control“ del bucle o ciclo y hasta ahí se ejecutarán las instrucciones que están dentro de él. 
Dentro de la condición del ciclo se debe utilizar una variable o variables que denominaremos variables de control. Si dicha condición está bien planteada se obtendrá el rompimiento de control del ciclo, en caso contrario el ciclo será infinito y, por lo tanto, se ejecutará indefinidamente, lo cual es un error de ejecución delicado.
Una variable de control debe cumplir con 3 acciones: inicializar antes del ciclo, controlar mediante la condición del ciclo y actualizar dentro de las acciones del ciclo (siempre antes de cerrar el ciclo).
Una estructura repetitiva o ciclo consta de tres partes básicas: 
· La condición del ciclo. Como ya se mencionó es fundamental analizar cómo y qué se va a poner allí para no producir errores en el funcionamiento del algoritmo. Pueden tener condición simple o múltiple. En el caso de condición múltiple, podrá haber rompimiento de control cuando no se cumpla cualquiera de esas situaciones (si es conjunción) o cuando no se cumplan todas las condiciones (si es disyunción). 
· El cuerpo del ciclo. Es el conjunto de instrucciones que deben ser ejecutadas siempre que se cumple la condición. Acá debe existir una instrucción que inicializa y actualiza la variable de control (para ciclos diferentes al “para”).
· La salida del ciclo. Es la señal que se pone para producirse la salida en el momento de terminar la ejecución del cuerpo del ciclo, cuando ya no se cumpla la condición, la cual puede darse con la palabra Fin del ciclo en el caso de tenerse varias instrucciones dentro del cuerpo del ciclo.
2.2.6.1 Clasificación de los ciclos
Los ciclos se clasifican dependiendo del tipo de dato de la variable de control, En tal caso se pueden dividir en dos tipos: 
· ciclos de tipo contador.
· ciclos de tipo centinela 
2.2.6.2 Ciclo Contador
Es aquel ciclo que realiza el control mediante una variable contador; también se denomina ciclo contador; por ejemplo, el ciclo mientras, el ciclo repita y el ciclo para. Este último es el ciclo de tipo contador por excelencia. 
Ciclo para. Se le reconoce como un ciclo automático debido a que se ejecuta las veces que el programador le indique. Utiliza como parámetros un intervalo que dice cuantas veces se realizará el cuerpo del ciclo. Para tal fin utiliza una variable contador que controlará la secuencia de las órdenes el cual toma incrementos o decrementos automáticos determinados. 
Sintaxis en Python
For control in secuencia: 
 Instrucciones que se ejecutarán
Figura 2.6: Ciclo for en Python
Se diferencia de otros ciclos porque no se inicializa antes de comenzar el ciclo ni se actualiza antes de cerrarse el ciclo, sino que todo lo hace dentro de la parte condicional del ciclo. En el cuerpo del ciclo solamente van las instrucciones que va a efectuar durante sus iteraciones.
Ejemplo 2.9: programa en Python que muestra los 10 primeros número enteros NO negativos.def main():
 for i in range(10):		#esta función range(10) arranca en 0 y llega hasta 9
 print("dato ",i)
main()
Los números se mostrarán de manera vertical. Si se quieren mostrar horizontalmente escriba como instrucción print del for, la instrucción print("dato ",i, " ",end=" ") 
Ejemplo 2.10: programa en Python que suma los 10 primeros números enteros positivos
def main():
 suma=0			#inicializa el acumulador
 for i in range(1,11):		#esta función range(1,11) arranca en 1 y llega hasta 10
 suma=suma + i
 print("suma= ",suma)
main()
Ejemplo 2.11: Diseñe un algoritmo que calcule cuánto se debe pagar por una compra que contiene N productos, se conoce la cantidad de cada producto y precio unitario, debe mostrar el total de la compra.
Solución Algorítmica utilizando ciclo para:
Algoritmo compra
Var
n,c,i:entero
vu,compra:real
INICIO
Muestre('Ingrese la cantidad de productos diferentes comprados..:')
Lea(n)
suma=0
Para i desde 1 hasta n haga
Muestre('Ingrese la cantidad del producto..:')
Lea(c)
Muestre('Ingrese valor unitario del producto..:')
Lea(vu)
suma=suma+c*vu
fin para
Muestre('El total de la compra es..:',compra)
FIN
Codificación en Python utilizando ciclo para:
# n cantidad de productos diferentes
# c cantidad de unidades de cada producto
# vu valor unitario de cada producto
# compra valor total de la compra realizada
def main():
….n=int(input("Ingrese la cantidad de productos comprados...:"))
….compra=0
….for i in range(n):
 ….c=int(input("Ingrese la cantidad de unidades...:"))
 ….vu=int(input("Ingrese el costo unitario...:"))
 ….compra=compra+c*vu
……..print('El valor total de la compra es..:',compra)
main()
2.2.6.3 Ciclos centinela
Son aquellos que usan una bandera o centinela con el fin hacer el rompimiento de control, es decir, para poder salirse del ciclo. Un tipo de este ciclo es el ciclo mientras y el repita.
Ciclo mientras. Permite realizar varias veces el cuerpo del ciclo, mediante una expresión lógica llamada condición que permitirá decidir las veces que deberá ejecutarse o cuándo se ejecuta (si la condición es verdadera y rompe el ciclo cuando ésta sea falsa). Si se utiliza variable contador esta irá como control del ciclo y tendrá que ser incrementada o disminuida por el programador, según el caso. Si la variable es centinela, deberá inicializarse antes del ciclo y se vuelve a leer antes de cerrarse. 
Sintaxis de while en Python:
while condición:
 Cuerpo del ciclo
Figura 2.7: sintaxis del ciclo centinela en Python
Ejemplo 2.12: resuelva el problema 2.11 utilizando el ciclo mientras
solución algorítmica utilizando ciclo mientras:
Algoritmo compra
Var
n,c,i:entero
vu,compra:real
INICIO
Muestre('Ingrese la cantidad de productos diferentes comprados..:')
Lea(n)
suma=0
i=0
Mientras i<n haga
Muestre('Ingrese la cantidad del producto..:')
lea(c)
Muestre('Ingrese valor unitario del producto..:')
Lea(vu)
suma=suma+c*vu
i=i+1
Fin mientras
Muestre('El total de la compra es..:',compra)
FIN
Codificación en Python utilizando ciclo mientras:
# n cantidad de productos diferentes
# c cantidad de unidades de cada producto
# vu valor unitario de cada producto
# compra valor total de la compra realizada
def main():
 n=int(input("Ingrese la cantidad de productos comprados...:"))
 compra=0
 i=0
 while i<n:
 c=int(input("Ingrese la cantidad de unidades...:"))
 vu=int(input("Ingrese el costo unitario...:"))
 compra=compra+c*vu
 i=i+1
 print('El valor total de la compra es..:',compra)
main()
Ejemplo 2.13: programa en Python que muestra los 10 primeros número enteros NO negativos.
def main():
 i=0
 while i<=9:
 i=i+1
 print("dato ",i)
main()
Si quiere mostrar horizontalmente los datos del while en vez del print escriba la instrucción print("dato ",i, ", ",end=" ").
2.2.6.4 Ciclos anidados
Tal como los condicionales, los ciclos también se anidan. En tal caso, el ciclo más interno se procesa más rápidamente que los demás y, por lo tanto, para ejecutar el ciclo externo espera que rompa el control el ciclo interno y luego continúa con la iteración correspondiente del ciclo externo. En efecto, 
For control in secuencia: 
 For control in secuencia: 
 For control in secuencia: 
 	.
.
.
 Instrucciones que se ejecutarán
Figura 2.9: Ciclo for anidado en Python
while condición: 
 while condición: 
 while condición: 
 	.
.
.
 Instrucciones que se ejecutarán
Figura 2.10: Ciclo while anidado en Python
Ejemplo 2.14: diseñe un algoritmo que muestre la hora en un reloj funciona con hora militar (00:00:00 a 23:59:59)
El segundero va desde 0 hasta 59 y en ese caso pasará al minuto siguiente.
El minutero va desde 0 hasta 59 y en ese último caso pasará a la hora siguiente.
El horario va desde 0 hasta 24 y en ese caso pasará a la hora 00:00:00.
def main():
 horas=0
 while horas<=23:
 minutos=0
 while minutos<=59:
	segundos=0
	while segundos<=59:
	 print(horas, “:”, minutos,“:”, segundos)
	 segundos=segundos+1
	minutos=minutos+1
 horas=horas+1
main()
Ejemplo 2.15: Haga un algoritmo que muestre la tablas de multiplicar de un número ingresado por el usuario
def main():
 n=int(input(“ENTRE EL NUMERO PARA LA TABLA DE MULTIPLICAR”))
 multiplicando =1
 for multiplicando in range(1,n+1):
 for multiplicador in range(1,n+1):
	producto= Multiplicando* Multiplicador
 print (Multiplicando, “X”, Multiplicador, “= ”, Producto)
main()
TALLER 2.3 
Haga programas en Python que resuelvan los siguientes problemas:
1. Genere números aleatorios enteros y determine el mayor y el menor de dichos números.
2. Diseñe un algoritmo que muestre el valor a pagar por cada uno de los 200 clientes que van cierto día a una viejoteca, quienes pagan así: si es hombre, el valor del cover individual es $10000 y por la cada mujer su cover es $7000. Se quiere conocer:
a) el total pagado por los hombres 
b) el total pagado por las mujeres
c) el porcentaje pagado por las mujeres respecto al total recaudado
d) de quién se recaudó más dinero (de los hombre o de las mujeres)?
3. Diseñe un algoritmo que muestre el valor a pagar por 50 clientes que van a una heladería a comprar paletas para grupos de niños. El administrador les ofrece lo siguiente: cada paleta le cuesta a $800; pero si me compra entre 20 y 40 paletas, se las pongo a $650; ahora en caso tal que me compre más de 40 y hasta 50 paletas, se las pongo a $700, más un descuento $4000 del total de la compra. Pero por compras superiores a 50 paletas su precio será de $600 por cada paleta más un descuento del 10% sobre el valor total a pagar.
4. El propietario de una pequeña empresa con 10 taxis acostumbra anotar en un cuaderno el móvil y el kilometraje recorrido antes de entregar cada taxi; igualmente, cuando le regresan el taxi, anota el kilometraje recorrido durante el día. De tal manera le lleva ese récord a cada uno. Se quiere un algoritmo que determine:
· El móvil del taxi que ha realizado el mayor recorrido
· El móvil del taxi que ha realizado el menor recorrido
· Promedio recorrido por los 10 taxis 
· El porcentaje de taxis que recorren más de 350 kilómetros al día
5. Un centro asistencial para lisiados recibe varios pacientes por semana, con el fin de que les hagan alguna prótesis. Teniendo en cuenta que el estado laboral de los asistentes puede ser: empleado, desempleado o pensionado, diseñe un algoritmo que determine:
· El porcentaje de hombres empleados que allí han asistido en una semana respecto al total de hombres asistentes. 
· La edad promedio de mujeres mayores de edad que sean desempleadas. 
· ¿Qué porcentaje de mujeres mayores de edad, pero menores de 25 años y de pensionadas, respecto al total de asistentes, han ido a dicho centro?.
· ¿El asistente de más edad es hombre o mujer?, ¿cuál es su estado laboral?
· El porcentaje de hombres empleados mayores de 30 años, respecto al total de asistentes.
· El porcentaje de mujeres entre26 y 38 años, respecto al total de mujeres, que son pensionadas.
6. Los Hospitales reciben 2 tipos de pacientes a saber: 1) Remitidos, son afiliados de alguna EPS; 2) Independientes, van por su cuenta.
Para los pacientes remitidos, la cuota moderadora depende de su salario así:
Hasta $1’400.000 paga $3.200
De $1’401.000 a $2’800.000, paga $5.600
De $2’800.001 a $4’200.000, paga 11.000 y de $4’200.000, paga 25.000
Para los pacientes independientes, la cuota depende del nivel del SISBEN así:
Niveles de 1 a 3, pagan $2.500
Niveles 4 y 5, pagan $5.000 y del 5 en adelante, pagan $ 8.000
Durante el día se atienden N pacientes. Calcule el total recaudado y el promedio del recaudo,si se sabe de cada paciente, a qué tipo pertenece, su salario y nivel de SISBEN.
 
7. Leídos N números, determine la cantidad de números divisibles por 8 o por nueve.
 
8. Una empresa de servicios estadísticos, es contratada para calcular el flujo vehicular por un puente; ellos capturan de cada vehículo, el tipo y la velocidad, los tipos son:
1.	Liviano		2.	Utilitario	3.	Público	4.	Carga
Se tienen los datos de N vehículos y se pide la cantidad y promedio de velocidad, de cada tipo.
 
9. Una empresa tiene N empleados y desea calcular su nómina. De cada empleado se ingresa el código, salario base, las horas extras y los descuentos; el valor de la hora extra tiene un recargo del 20% sobre la hora normal; para saber el valor de la hora ordinaria, se divide el salario base entre 160. Calcule el valor total a pagar por empleado y muestre código y total a pagar; también se debe calcular el total de la nómina, de las horas extras y los descuentos realizados e imprimirlos.
10. Lea N números enteros. Se pide encontrar el promedio de los positivos y el porcentaje de los negativos, respecto al total de números diferentes de 0.
 
11. Una empresa de se dedica a la comercialización de Propiedad raíz, vehículos y electrodomésticos; sus empleados ganan comisión así:
1.	Por venta de propiedades el 2% del valor de la venta
2.	Por venta de vehículos el 8% del valor de la venta
3.	Por venta de electrodomésticos el 20% del valor de la venta
La empresa tiene N empleados y cada uno hace m ventas en el mes; calcule el salario mensual por empleado y muéstrelo, de cada venta se ingresa el tipo de producto y el valor.
12. Una Empresa de transporte, tiene clasificados sus transportes en 1:Vip, 2:Turista y 3:Económico, los viajes en Vip con valor superior a 1 millones tiene un descuento del 5%, de lo contrario del 3% Los viajes en Turista con valor superior a 700 mil, tienen un descuento del 4%, de lo contrario del 2% y los viajes en Económico con valor superior a 500 mil, tienen un descuento del 3%, de lo contrario el 2%. Se requiere calcular el valor de los viajes en un periodo de tiempo por tipo de transporte y global, también el valor promedio de los viajes vendidos, por tipo de transporte y global
En total se movilizaron N pasajeros y de cada pasajero, se ingresa el tipo de transporte y su costo.
 
Parte 3: Arreglos
3.1 Introducción
Los arreglos son estructuras de programación muy útiles en el desarrollo de los algoritmos y, básicamente, en todo lo relacionado con los lenguajes de programación. Los arrelgos vistos en matemáticas como vectores y matrices son los equivalentes en programación. Precisamente, servirán de gran motivación usarlos en el diseño de algoritmos para resolver problemas verdaderamente interesantes, ya que hay mucha teoría detrás de ellos que puede ser usada. 
Un arreglo (o array) es una estructura de datos homogénea, que almacena un conjunto de elementos del mismo tipo y se identifican con un único nombre de variable. Python provee el módulo NumPy, que permite combinar tipos de datos y realizar operaciones sobre los arreglos de forma rápida, no obstante como el objetivo es aprender a programar y no a manejar un programa, en este curso no se trabajara con dicha librería. 
La ventaja de los arreglos radica en que una cantidad de datos del mismo tipo se puede agrupar y almacenar y hacerse referencia a cualquiera de sus elementos de manera sencilla sin invadir los demás datos. 
3.2 Concepto de arreglo
Es una agrupación de datos del mismo tipo, es decir, es una estructura de datos que almacena información de igual conformación en el que cada valor asociado representa una posición relativa dentro del grupo. Un arreglo se identifica por su nombre y se declara como una variable. Los elementos (componentes individuales del arreglo) ocuparán diferentes posiciones; para tal fin se utiliza lo que se denomina índice, el cual va entre corchetes. 
3.3 Clasificación de los arreglos
Los arreglos se pueden clasificar según sus dimensiones así: unidimensionales, bidimensionales, tridimensionales y en general, n-dimensionales.
Arreglos unidimensionales. Son aquéllos cuyo grupo de elementos se disponen con un mismo concepto de clasificación, es decir, los elementos distribuidos en una fila o una columna. Este tipo de arreglo también se denomina “vector”.Figura 3.1: Representación gráfica de un vector
	
	
	*
	
	
	
	
	1
	2
	3
	4
	5
	6
	7
Arreglos bidimensionales. Se denominan así porque el grupo de elementos está dado simultáneamente con dos conceptos de clasificación; éste se presenta por filas y columnas. 
También se conoce como “matriz”
	1
	
	
	
	
	
	
	Figura 3.2: Representación gráfica de una matriz 5 filas y 7 columnas
	2
	
	
	
	
	
	
	
	3
	
	
	
	
	*
	
	
	4
	
	
	
	
	
	
	
	5
	
	
	
	
	
	
	
	
	1
	2
	3
	4
	5
	6
	7
3.4 Índices
Se denomina índice a un valor entero representado por una expresión que describe la posición relativa que ocupa un elemento en un arreglo. Los índices permiten que el acceso a cada elemento se realice de manera directa sin necesidad de recurrir a otros elementos vecinos. Por lo tanto, es fundamental controlar el valor del índice de tal manera que no sobrepase los límites del arreglo, ya que así se evita la invasión de información contenida en otros campos. 
3.5 Referencia a un elemento de un arreglo
Para referirse a un componente o elemento particular de un arreglo, ya sea para leerlo, mostrarlo o modificarlo, se escribe el nombre del arreglo del cual hace parte, seguido de la posición que ocupa el elemento entre corchetes. 
NombreArreglo(posición que ocupa)
La posición de un arreglo corresponde a una lista de índices separados por comas. Según el arreglo la sintaxis para determinar un elemento será:
Para vectores: 
NombreVector(índice),
Para matrices:
NombreMatriz(NumeroFila, NumeroColumna)
Por ejemplo, en el vector (figura 3.1), la matriz (figura 3.2), los índices correspondientes a las posiciones del elemento señalado son respectivamente: 3 y (3,5). Observe que para una dimensión se tiene un solo índice, para dos dimensiones se manejan dos índices, uno para la fila y otro para la columna; para tres dimensiones se utilizan 3 índices (uno para la fila, otro para la columna y un tercero para el número del plano). Las filas corresponden a subgrupos horizontales y las columnas a subgrupos verticales.
En las gráficas de los arreglos de las figuras 3.1 y 3.2 se llaman, respectivamente, así: vector al arreglo unidimensional con la variable y matriz al bidimensional con la variable y sus correspondientes elementos, los cuales están subrayados, como Vector(3), matriz(3,5).
3.6 Declaración de un arreglo
Para poder utilizar un arreglo es necesario declararlo previamente al comienzo de un programa en la sección Var del algoritmo, señalando el número y tipo de elemento que podrá contener. Su sintaxis será:
Var NombreArreglo: Arreglo(CantidadDatos) de TipoDato
Donde la variable CantidadDatos será un intervalo que va desde 1 hasta el valor asignado en dicha variable y que será dado por el programador o el usuario, escrito con la siguiente forma: 
1..CantidadDatos
Los vectores requieren de 1 ciclo para recorrerlo y ver el contenido según la las posiciones asignadas. Para recorrer una matriz se requieren 2 ciclos (1 para recorrer las filas y otro para recorrer las columnas). 
Si los arreglos son matrices, cada intervalose separa por comas para las filas y las columnas. En el curso trabajaremos vectores hasta matrices. 
Ejemplo 3.1: Según las gráficas de los arreglos vistos (sección 2.3) y suponiendo que el vector está formado por números reales, la matriz por caracteres y el plano por enteros, la declaración de dichos arreglos sería:
Var
 Vector: arreglo(1..7) de reales 
 Matriz: arreglo(1..5,1..7) de caracteres
3.7 Operaciones con arreglos
Las operaciones con arreglos se pueden realizar de manera individual con sus elementos o sobre todo el arreglo, utilizando para tal fin instrucciones básicas y estructuras de control. Entre las operaciones básicas que se pueden realizar se tienen: operaciones sobre sus elementos (asignación, lectura o guardar y escritura o imprimir o mostrar) y operaciones sobre el arreglo completo (recorrido, búsqueda, ordenamiento, inserción y eliminación).
Ejemplo 3.2: los siguientes son ejemplos de operaciones con arreglos: 
	Seudocódigo
	Python
	X= vector(3)
	X= vector[3]
	vector(3)=a
	vector[3]=a
	Muestre(vector(3))
	print (vector[3])
	W= matriz(3,5)
	W= matriz[3][5]
	matriz(3,5)=a
	matriz[3][5]=a
	Muestre(matriz(3,5))
	print(matriz[3][5])
	Para i=1 hasta n
 Muestre(vector(i))
	for i in range(1,n):
 print(vector[i])
	Para i=1 hasta n
 Para i=1 hasta n
 Muestre(matriz(i,j))
 Fin para
Fin para
	for I in range(1,n):
 for j in range(1,n):
 print(matriz[i][j])
 print()
3.8 Algoritmos con vectores
Ejemplo 3.3: Diseñe un algoritmo que llene un vector con n valores enteros ingresados por teclado y luego sea impreso
Solución Algorítmica
Algoritmo CrearVector
var
n,v,i,a:entero
INICIO
Escriba("Ingrese la cantidad de valores a procesar...:")
Lea(n)
definir a[n]
para i=1 hasta n hacer
Muestre("Ingrese un valor entero...:")
Lea(v)
a[i] = v
fin para
para i=1 hasta n hacer
Muestre(a[i])
fin para
FIN
Codificación en Python
# n --> Cantidad de valores a procesar
# v --> Variable para leer los valores
# i --> variable para controlar el ciclo
# a --> Vector para procesar n valores
def main():
 n=int(input("Ingrese la cantidad de valores a procesar...:"))
 a=[0]*n # Aquí se inicializa el vector con ceros
 for i in range(0,n):
 v=int(input("Ingrese un valor entero...:"))
 a[i] = v
 for i in range(0,n):
 print(a[i])
main()
Ejemplo 3.4: Diseñe un algoritmo que llene un vector con n valores enteros ingresados de forma aleatoria y luego lo imprima
Solución Algorítmica: 
Algoritmo CrearVectorAleatorio
var
n,i,a:entero
INICIO
Mueste("Ingrese la cantidad de valores a procesar...:")
lea n
definir a[n]
para i=1 hasta n hacer
a[i] = aleatorio(10)
fin para
para i=1 hasta n hacer
Muestre(a[i])
fin para
FIN
Codificación en Python
# n --> Cantidad de valores aleatorios a procesar
# i --> variable para controlar el ciclo
# a --> Vector para procesar n valores
def main():
 import random # Se importa el módulo para generar números aleatorios
 n=int(input("Ingrese la cantidad de valores a procesar...:"))
 a=[0]*n
 for i in range(0,n):
 a[i] =(random.randint(0,10))
 for i in range(0,n):
 print(a[i],' ',end="")
main()
Ejemplo 3.5: Diseñe un algoritmo que llena un vector con n valores aleatorios y lo imprime, luego lo ordena por el método de la burbuja e imprime el vector ordenado.
Solución Algorítmica
Algoritmo VectorOrdenado
var
n,i,j,aux,a:entero
INICIO
Muestre("Ingrese la cantidad de valores a procesar...:")
Lea(n)
definir a[n]
para i=1 hasta n 
a[i] = aleatorio(10)
fin para
Muestre('Vector Original')
para i=1 hasta n 
Muestre(a[i])
fin para
para i=2 hasta n-1 
para j=i+1 hasta n 
 		si a[i]>a[j] entonces
 			aux=a[i]
 			a[i]=a[j]
 			a[j]=aux
 		fin si
fin para
fin para
Muestre('Vector Ordenado')
para i=1 hasta n 
Muestre(a[i])
fin para
FIN
Codificación en Python
# n --> Cantidad de valores a procesar
# i,j --> variables para controlar ciclos
# a --> Vector para procesar n valores
# aux --> variable para intercambio
def main():
 import random
 n=int(input("Ingrese la cantidad de valores a procesar...:"))
 a=[0]*n # Se llena el vector de 0
 for i in range(0,n):
 a[i] =(random.randint(0,50)) 	#genera enteros aleatorios entre 0 y 50
 print('Vector Original')
 for i in range(0,n):
 print(a[i],' ',end="") 		#Imprime los elementos del vector horizontalmente
 for i in range(0,n-1):
 for j in range(i+1,n):
 if a[i]>a[j]: 		#intercambia los elementos, en las 3 líneas siguientes	
 aux=a[i]
 a[i]=a[j]
 a[j]=aux
 print() # Imprime una línea en blanco
 print('Vector Ordenado')
 for i in range(0,n):
 print(a[i],' ',end="")
main()
TALLER 3.1
1. Un equipo de baloncesto tiene 10 jugadores entre titulares y suplentes; el dueño del equipo quiere premiar a los jugadores más altos (los que tienen estatura por encima de la estatura promedio) y a los jugadores más jóvenes (los que tienen edades por debajo de la edad promedio).
2. Diseñe un algoritmo que permita el ingreso de números enteros aleatorios menores o iguales que 200 y determine, si el número es menor que 100, entonces si es o no par y múltiplo o no de 5; ahora, si el número está entre 100 y 200, diga si es o no impar y múltiplo o no de 3.
3. Elabore un algoritmo llene un vector con n valores y cuente los pares y los impares e imprima los dos resultados.
4. Elabore un algoritmo que lea una cantidad de valores enteros mayores a cero en un vector, posteriormente busque los mayores al promedio y los imprima.
5. Elabore un Algoritmo que lea n datos enteros en un vector, y entregue un nuevo vector que contenga la posición de valores pares y otro con los impares sumándoles la posición que les corresponde.
6. Elabore un algoritmo que tome un vector de tamaño n y lo llene de valores enteros, posteriormente busque si en el vector se encuentra un valor K dado; debe hacer saber con un mensaje si encontró o no el valor K.
7. Elabore un algoritmo que llene un vector de tamaño n, con valores aleatorios menores a 50 y busque si un valor K dado está dentro del vector, si lo encuentra muestre la ubicación de este.
8. Dados dos vectores A y B de tamaño n, llenarlos de valores aleatorios y entregar un tercer vector con la suma de los elementos de A y B, sumándolos uno a uno; al final se deben imprimir los 3 vectores.
9. Elabore un algoritmo que llene un vector con n elementos de forma aleatoria y lo imprima, posteriormente invierta el vector y lo imprima.
10. Muestre el mensaje y el valor del premio que se gana un jugador según el puntaje alcanzado (entre 0 y 100 puntos) en una prueba, teniendo en cuenta la siguiente tabla:
	Puntaje
	Mensaje
	Premio ($)
	Menos de 20
	Deficiente
	0
	Entre 20 y 45
	Insuficiente
	1000
	Entre 46 y 70
	Aceptable
	10000
	Entre 71 y 90
	Sobresaliente
	20000
	Más de 90
	Excelente
	50000
3.9 Algoritmos con matrices 
En Python las matrices deben inicializarse en 0, con las siguientes instrucciones, si la matriz es cuadrada; es decir, es de orden n
for i in range(0,n):
 a.append([0]*n)
Si la matriz no es cuadrada; es decir, es de orden mxn
for i in range(0,m):
 a.append([0]*n)
Ejemplo 3.6: Elabore un programa que llene una Matriz de n*n, con valores aleatorios y luego la imprima.
Solución Algorítmica
Algoritmo Matriz
Var
n,i,j,a: entero
INICIO
Escriba ‘Ingrese el orden de la Matriz…’
Lea(n)
Dim a(n,n)
Para i=1 hasta n 
Para j=1 hasta n 
a(i,j)=aleatorio(10)
Fin para
Fin Para
Para i=1 hasta n
Para j=1 hasta n
Muestre(a(i,j))
Fin para
Fin Para
FIN
Codificación en Python
# n --> Orden de la Matriz
# i,j --> variables para control de ciclo
# a --> Matriz
def main():
 import random
 n=int(input("Ingrese el orden de la Matriz...:"))
 a=[]
 for i in range(0,n):
 a.append([0]*n)
# A continuación se llena la matriz con valores aleatorios de 0 a 9
 for i in range(0,n):
 for j in range(0,n):
 a[i][j] =(random.randint(0,9))
# A continuación se imprimela matriz, los valores se separan con coma.
 for i in range(0,n):
 print()
 for j in range(0,n):
 if j<n-1:
 print(a[i][j],', ',end="")
 else:
 print(a[i][j],end="")
main()
Ejemplo 3.7: Elabore un programa que llena una Matriz de m*n, con valores aleatorios, encuentra el valor mayor y luego imprime la matriz y el valor.
Solución Algorítmica
Algoritmo MayMatriz
Var
n,m,i,j,a,may: entero
INICIO
Escriba ‘Ingrese el número de filas…’
Lea(m)
Escriba ‘Ingrese el número de columnas…’
Lea(n)
Dim a(m,n)
May=-1
Para i=1 hasta m
Para j=1 hasta n
A(i,j)=aleatorio(10)
si a(i,j)>May entonces
May= a(i,j)
finsi
Finpara
FinPara
Para i=1 hasta m 
Para j=1 hasta n
Muestre(a(i,j))
Fin para
Fin Para
Escriba ‘El valor mayor es..:’,May
FIN
Codificación en Python
# m,n --> Cantidad de filas y columnas respectivamente
# i,j --> variables para control de ciclo
# a --> Matriz
# May --> Valor mayor
def main():
 import random
 m=int(input("Ingrese la cantidad de filas......:"))
 n=int(input("Ingrese la cantidad de columnas...:"))
 a=[]
 
for i in range(0,m):
 a.append([0]*n) # Inicializa la matriz con ceros
 
 may=-1 # Inicializa el mayor en -1
# A continuación se llena la matriz con valores aleatorios de 0 a 9
 for i in range(0,m):
 for j in range(0,n):
 a[i][j] =(random.randint(0,9))
# A continuación compara buscando el mayor
 if a[i][j]>may:
 may=a[i][j]
# A continuación se imprime la matriz, los valores se separan con coma.
 print()
 print ("Matriz Resultante")
 for i in range(0,m):
 print()
 for j in range(0,n):
 if j<n-1:
 print(a[i][j],', ',end="")
 else:
 print(a[i][j],end="")
 print()
 print ("El valor mayor es....:",may)
main()
Ejemplo 3.8: Elabore un programa que llena una matriz con ceros a excepción de la diagonal principal que la llena de unos y luego imprima la Matriz.
Solución Algorítmica
Algoritmo Matriz
Var 
n,i,j,a: entero
INICIO
Escriba ‘Ingrese el orden de la Matriz…’
Lea(n)
Dim a(n,n)
Para i=1 hasta n hacer
Para j=1 hasta n hacer
Si i=J entonces
A(i,j)=1
sino
a(i,j)=0
FinSi
Finpara
FinPara
Para i=1 hasta n 
Para j=1 hasta n 
Muestre((a(i,j))
Finpara
FinPara
FIN
Codificación en Python
# n --> Orden de la Matriz
# i, j --> variables para control de ciclo
# a --> Matriz
def main():
 import random
 n=int(input("Ingrese la cantidad de valores a procesar...:"))
 a=[]
 for i in range(0,n):
 a.append([0]*n) # Se llena la matriz con ceros
 for i in range(0,n):
 for j in range(0,n):
 if i==j:
 a[i][j] =1 # Si la i=j, está en la diagonal principal y se llena de unos.
 for i in range(0,n):
 print()
 for j in range(0,n):
 if j<n-1:
 print(a[i][j],', ',end="") # Se imprime con una coma de separación.
 else:
 print(a[i][j],end="") # Es la última columna, se imprime sin separación.
main()
Ejemplo 3.9: código en Python para imprimir matrices en la versión 2.7.13 o inferior
def main():
 #DIMENSIONA LA MATRIZ PARA SER CREADA
 m=int(input("Ingrese la cantidad de filas......:"))
 n=int(input("Ingrese la cantidad de columnas...:"))
 a=[]
 for i in range(m):
 a.append([0]*n) # Inicializa la matriz con ceros
 #CREA LA MATRIZ mxn CON NUMEROS REALES INGRESADOS POR EL USUARIO
 for i in range(m):
 for j in range(n):
 a[i][j]=float(input("ENTRE EL DATO (%d, %d): "%(i,j)))
 #IMPRIME LA MATRIZ POR TUPLAS PERO NO POR FILAS MOSTRANDO SUS COLUMNAS
 print a
main()
EJEMPLO:
Ingrese la cantidad de filas......:4
Ingrese la cantidad de columnas...:5
ENTRE EL DATO (0, 0): 3
ENTRE EL DATO (0, 1): 4
ENTRE EL DATO (0, 2): 5
ENTRE EL DATO (0, 3): 6
ENTRE EL DATO (0, 4): 5
ENTRE EL DATO (1, 0): 4
ENTRE EL DATO (1, 1): 3
ENTRE EL DATO (1, 2): 3
ENTRE EL DATO (1, 3): 4
ENTRE EL DATO (1, 4): 5
ENTRE EL DATO (2, 0): 5
ENTRE EL DATO (2, 1): 6
ENTRE EL DATO (2, 2): 4
ENTRE EL DATO (2, 3): 3
ENTRE EL DATO (2, 4): 2
ENTRE EL DATO (3, 0): 7
ENTRE EL DATO (3, 1): 4
ENTRE EL DATO (3, 2): 5
ENTRE EL DATO (3, 3): 3
ENTRE EL DATO (3, 4): 6
[[3.0, 4.0, 5.0, 6.0, 5.0], [4.0, 3.0, 3.0, 4.0, 5.0], [5.0, 6.0, 4.0, 3.0, 2.0], [7.0, 4.0, 5.0, 3.0, 6.0]]
A esto último (mostrar datos de matriz) se denominan tuplas, mostradas por filas.
Ejemplo 3.10: código en Python para imprimir matrices en la versión 3.0 o superior
def main():
 #DIMENSIONA LA MATRIZ PARA SER CREADA
 m=int(input("Ingrese la cantidad de filas......:"))
 n=int(input("Ingrese la cantidad de columnas...:"))
 a=[]
 for i in range(m): #para cada una delas m filas 
 a.append([0]*n) # llena las columnas de la matriz con ceros
 #CREA LA MATRIZ mxn CON NUMEROS REALES INGRESADOS POR EL USUARIO
 for i in range(m):
 for j in range(n):
 a[i][j]=float(input("ENTRE EL DATO (%d,%d):"%(i,j)))
 #IMPRIME LA MATRIZ POR FILAS MOSTRANDO SUS COLUMNAS
 print("DATO 1",'\t',"DATO 2",'\t',"DATO 3")	#'\t': muestra los datos tabulados a una misma doistancia
 print('\n')	 #'/n': genera una nueva fila
 for i in range(m):
 print()
 for j in range(n):
 print(a[i][j],'\t\t',end="")
main()
Al ejecutarse el código anterior la matriz que muestra queda como sigue. 
Ingrese la cantidad de filas......:4
Ingrese la cantidad de columnas...:5
DATO 1 	 DATO 2 	 DATO 3
3.0 		4.0 		5.0 		
6.0 		7.0 		6.0 		
5.0 		4.0 		3.0 		
4.0 		5.0 		6.0
TALLER 3.2
Resuelva los problemas 1 a 4 para la siguiente situación: se quiere crear una matriz cuadrada con dimensiones determinadas por el usuario, en la cual los datos diferentes de cero que ingrese el usuario forman una matriz. 
1. Triangular inferior secundaria. Convierta dicha matriz en una matriz triangular inferior principal y que se muestren ambas matrices.
2. Triangular inferior principal. Convierta dicha matriz en una matriz triangular inferior secundaria y que se muestren ambas matrices.
3. Triangular superior principal. Convierta dicha matriz en una matriz triangular superior secundaria y que se muestren ambas matrices.
4. Triangular superior secundaria. Convierta dicha matriz en una matriz triangular superior principal y que se muestren ambas matrices.
5. Se quiere crear una matriz con dimensiones determinadas por el usuario en la cual se debe buscar en cada fila un dato y en el momento en que lo encuentre deberá continuar con la fila siguiente. En cada hallazgo deberá mostrar la posición (número de fila y de columna) en que está o poner un mensaje en caso tal de no hallarse en la respectiva fila.
6. Resuelva el problema anterior, pero realizando la búsqueda de un dato en cada columna y en el primer momento en que lo encuentre deberá continuar con la columna siguiente. En cada hallazgo deberá mostrar la posición en que está (número de fila y de columna) o poner un mensaje en caso tal de no hallarse en la respectiva columna.
7. En una universidad hay 50 aulas, las cuales; cuando están ocupadas se almacenan, en una matriz, los nombres de los profesores y si están vacías se les asigna un *. Se sabe que entre las seis y las ocho de la mañana asiste la mayor cantidad de grupos a clase. Se quieren conocer las aulas y los días de la semana en que labora cierto profesor entre estas horas, si están guardados en vectores. Tenga en cuenta que un profesor no puede trabajar varios grupos a la misma hora en un mismo día. Diseñe un algoritmo eficiente, es decir, cuando encuentre a dicho profesor, debe pasar a la siguiente aula y día, y que determine el aula y el día donde dicho profesor se encuentra a estas horas.
8. Una entidad meteorológica de Medellín lleva estadísticas de las temperaturas de las 10 ciudades del Valle de Aburrá durante un determinado mes; para tal fin, almacena las temperaturas de manera aleatoria con valores entre 0°C y 38°C en una matriz y los nombres de las ciudades en un vector.Diseñe un algoritmo que determine: 
 a. El día y nombre de la ciudad más calurosa.
 b. El día y nombre de la ciudad con temperaturas bajas (menores que el promedio).
 c. las ciudades más calurosas (están por encima de la temperatura promedio)
 d. la temperatura promedia de cada ciudad.
9. Un profesor de matemáticas maneja las calificaciones de las 5 asignaturas manualmente. Cada grupo tiene una cantidad de estudiantes que viene asignada en cada planilla. Para realizar un manejo automático de las calificaciones, el profesor quiere un programa que reciba las notas y calcule el promedio de cada estudiante para cada asignatura; además, calcule y muestre la mayor nota promedio de un estudiante por grupo.
10. En un municipio de Antioquia se escogieron 10 familias que tenían 8 hijos cada uno para otorgarles vivienda de interés social a las que se otorgaba un subsidio de $10’500.000. En efecto, se presentaron muchas familias, pero solamente fueron seleccionadas aquellas que tenían el valor de la cuota inicial de $12’000.000. Además de la vivienda, el municipio asignó becas de estudio técnico a los hijos solteros (generados aleatoriamente 0: soltero 1: otro estado) mayores (con edades superiores que el promedio) y un subsidio de alimentos a los menores (con edades por debajo del promedio). 
Previamente la entidad encargada de asignar dichas viviendas, hizo una encuesta acerca de las edades de sus hijos (que debían ser generadas aleatoriamente) entre 0 y 23. Las familias se deben generar automáticamente (ejemplo, familia 1, familia 2, familia 3, …)
Se quiere saber a cuales familias le asignaron la beca o el subsidio de alimentos o el subsidio de vivienda, a cuantos hijos le asignaron la beca y cuanto recibe cada familia seleccionada dado que entregan $60.000 por hijo.
11. El propietario de una pequeña empresa transporte con 20 taxis acostumbra anotar en una planilla el móvil y el kilometraje recorrido antes de entregar cada taxi; igualmente, cuando le regresan el taxi, este anota el kilometraje recorrido durante el día. De tal manera le lleva ese record a cada uno. Si cada taxi descansa 4 días al mes (con el fin de hacerle alistamiento) se quiere un algoritmo que determine:
· El recorrido por cada taxi durante el mes
· El porcentaje de taxis que recorrieron más de 13000 kilómetros al mes, respecto al total de taxis
· Si el cambio de aceite se realiza cada 5000 Km, en promedio, ¿cuántos taxis realizan cambio de aceite antes de los 15 días?
· Cuáles taxis realizan más de 3 cambios de aceite al mes?
12. La junta directiva del Área metropolitana del Valle de Aburrá (10 ciudades) buscando identificar lugares importantes para dimensionar el drenaje urbano, y así evitar inundaciones en los centros poblados de estas zonas a causa de las lluvias intensas, de corta duración, ha instalado radares meteorológicos con el fin realizar mediciones de la lluvia en tiempo real en esta zona tratando de tomar medidas causadas por estas precipitaciones en algunos sectores de la región. Cada dispositivo generalmente se conecta directamente con modelos matemáticos que determinarán la lluvia en esa zona y de igual manera, los caudales de los ríos y quebradas aledaños a estas ciudades en tiempo real. La precipitación pluvial se mide en mm, que equivale al espesor de la lámina de agua que se formaría con la precipitación de un litro de lluvia sobre una superficie plana e impermeable, de 1 m2. Por ejemplo, Una precipitación de 35 mm. es lo mismo que decir 35 litros/m2; es decir, que en 1 km2 habrían caído 35 millones de litros de agua de lluvia. En efecto, las precipitaciones durante los 30 días del mes de abril en cm tuvieron las siguientes mediciones:
	 
	 
	Ciudades
	 
	 
	1
	2
	3
	4
	5
	6
	7
	8
	9
	10
	Días
	1
	4.6
	5.0
	3.2
	1.3
	1.7
	0.7
	0.0
	1.1
	0.4
	2.8
	
	2
	3.0
	5.1
	3.3
	2.3
	1.7
	0.8
	0.0
	2.0
	0.5
	2.9
	
	3
	0.0
	4.2
	3.4
	1.5
	2.7
	0.9
	1.0
	1.4
	0.6
	2.1
	
	4
	0.0
	3.3
	3.5
	5.4
	1.9
	1.0
	0.0
	3.0
	0.7
	2.7
	
	5
	0.0
	5.4
	3.6
	1.2
	1.7
	0.9
	2.1
	2.7
	0.8
	2.5
	
	.
	.
	.
	.
	.
	.
	.
	.
	.
	.
	.
	
	.
	.
	.
	.
	.
	.
	.
	.
	.
	.
	.
	
	29
	1,8
	0.8
	0.0
	2.0
	0.5
	1.2
	1.7
	1.3
	2.1
	1.2
	
	30
	0.4
	1.2
	0.0
	1.1
	0.4
	0.0
	5.4
	5.3
	3.5
	1.3
Haga un programa modular que cree y muestre la matriz anterior y resuelva lo siguiente: 
· Busque el día o los días de mayor precipitación. Por ejemplo, 5.4 es la mayor precipitaciones el día 4 en la ciudad 4; el día 29 en la ciudad 4; el día 30 en la ciudad 7.
· Muestre las precipitaciones promedio de cada ciudad
· Determine precipitaciones menores que la precipitación promedio
· Muestre La ciudad de menor precipitación de cada día
Parte 4. Programación Modular
4.1 Presentación
Los problemas con soluciones complejas pueden resolverse dividiéndolos en varios subproblemas (más pequeños) o módulos que por ende tendrán soluciones simples de manera independiente; de más fácil interpretación que resolverlos como una unidad. Cuando nos enfrentamos con un problema complejo, la mejor propuesta es tratar de dividir el problema en problemas más pequeños, tratando de aplicar la frase “Divide y Vencerás”. Se trata entonces de diseñar subalgoritmos; de tal forma que al unirlos se pueda obtener la solución al problema inicial. La idea es tratar de diseñar los módulos o subalgoritmos de acuerdo a una tarea específica, los cuales se diseñan una vez, pero se pueden llamar muchas veces dentro del mismo algoritmo. 
La programación modular es una técnica que divide un programa en partes más simples y bien diferenciadas, llamadas módulos o subprogramas y facilita muchas cosas en el diseño y la ejecución de algoritmos; por ejemplo, facilita la búsqueda de errores y el mantenimiento del código; pero sobretodo la comprensión del algoritmo.
Los subalgoritmos pueden realizar las mismas funciones que un algoritmo, tales como leer datos, realizar cálculos matemáticos y devolver los resultados, el subprograma se utiliza por el programa principal para un objetivo específico.
Esta forma de trabajar también se conoce como DISEÑO DESCENDENTE o top-down, un problema complejo se divide en pequeños problemas y a su vez estos en otros más pequeños, hasta obtener problemas fáciles de entender, la idea es tratar de obtener problemas independientes. Los lenguajes de programación de alto nivel están construidos pensando en esta forma de trabajo. 
4.2 Reglas de la programación modular
La programación modular impone algunas reglas, entre las que se destacan:
Regla 1: cada módulo tiene que tener un punto de entrada y otro de salida; es decir, una vez haya realizado la tarea del módulo, debe devolver el control al programa principal o subprograma que lo invocó.
Regla 2: en el programa principal, se invocan los módulos, pero también pueden ser invocados desde otros módulos.
Regla 3: en lo posible, los módulos deben tener independencia, respecto al programa principal. De tal manera, los módulos realizarán una tarea genérica, para que as se pueda reutilizar su código, si fuese necesario, en otro programa, sin tener que tocar el código del módulo.
Regla 4: los datos del programa principal que el módulo necesite, serán pasados desde allí. En efecto, evite las variables globales.
4.3 Comunicación entre los módulos
Los módulos o subprogramas se comunican haciendo referencia al nombre del módulo y a la vez a los parámetros de cada módulo. Dichos parámetros contienen los datos que se desean pasar al módulo invocado, as algunas veces éstos no contengan parámetros. 
El algoritmo o programa principal, entrega el control al resto de módulos y, una vez los módulos se hayan ejecutado, el programa principal vuelve a tomar el control, continuando la ejecución del programa por donde los invocó. De tal manera, la solución del problema se resuelve de manera independiente y más sencilla.
4.4 Parámetros de un subprograma
Los parámetros son datos que utilizan los subprogramas para comunicarse con el programa que lo invoca o llama. Sus valores están disponibles en los módulos. Los parámetros van puestos entre paréntesis

Continuar navegando

Materiales relacionados

230 pag.
MATLAB_PROGRAMACION

UNIP

User badge image

Maria Alejandra Tamayo Medina

45 pag.
Programacion Estructurada

SIN SIGLA

User badge image

Vanina Gisele Beguiristain

251 pag.