Professional Documents
Culture Documents
Facultad de Ingeniera
DISEO DE ALGORITMOS
[Trabajo Final]
a) Sumatoria 5s
Algoritmo que realice la sumatoria de los nmeros enteros mltiplos de 5, comprendidos entre el 1 y el 100, es decir, 5 + 10 + 15 +. + 100. El programa deber imprimir los nmeros en cuestin y finalmente su sumatoria. Algoritmo Sumatoria_5's Var: Enteros: Sum = 0, i Inicio Desde(i = 0 hasta i = 100) hacer: Si ((i%5) < 1) entonces: sum= sum + i Fin_si Fin_desde Escribir(sumatoria) Fin
b) Sumatoria de Pares
Algoritmo que realice la sumatoria de los nmeros enteros pares comprendidos entre el 1 y el 100, es decir, 2 + 4 + 6 +. + 100. El programa deber imprimir los nmeros en cuestin y finalmente su sumatoria. Algoritmo Sumatoria_pares Var: Enteros: Sum, i Inicio Desde(i = 0 hasta i = 100) hacer: Si ((i%2) < 1) entonces: sum= sum + i Fin_si Fin_desde Escribir(sumatoria) Fin
d) Cuadrados hasta 50
Disear un algoritmo que permita calcular el cuadrado de los 50 primeros nmeros enteros y a continuacin escriba el listado de dichos nmeros. Algoritmo Cuadrados_50 Var: Enteros: base, r Inicio Desde(base = 1 hasta base = 50) hacer: r = base*base Escribir(base, r \n) Fin_desde Fin
e) Crculos
Realizar un algoritmo para calcular el rea de un crculo y la longitud de la circunferencia en funcin del radio, ledo desde el teclado. Algoritmo Crculos Var: Reales: r, area, peri Constantes: Pi = 3.141592653589793 Inicio Escribir("Calcular rea y circunferencia del Circulo; capturar radio: ") Leer(r) area= (r*r)*Pi peri = (2*r)*Pi Escribir("rea = ", rea, " Permetro = ", peri) Fin
f)
Disear una funcin que calcule Algoritmo x_n Var: Enteros: n Reales: x, Ans Inicio Escribir("Capturar valor para la base x: ") Leer(x) Escribir("Capturar el valor del exponente n: ") Leer(n) Ans = x^n Escribir(Ans) Fin Nota: El elevar a una potencia algn nmero, depende del lenguaje de programacin, en C se usa la funcin: pow(x, n); Que adems solo est disponible en la biblioteca estndar math.h para x variable real y n variable entera.
g) Absolutos
Disear una funcin que devuelva el valor absoluto de un nmero. Algoritmo Absolutos Var: Real: val Inicio Escribir("Valor del cual obtener absoluto: ") Leer(val) Si (val < 0) entonces: val= val*- 1 Fin_si Escribir(val) Fin Nota: Nuevamente, se puede resolver este problema de acuerdo al lenguaje utilizado En C, tambin dentro de math.h tenemos una funcin para absolutos abs(x);
h) 10 numeros
Algoritmo que reciba 10 valores y muestre el valor menor, el valor mayor, la sumatoria y el promedio.
Algoritmo 10_num Var: Enteros: i = 0 Reales: may, men, sum, prom, temp Inicio Escribir("capturar valores ", i+1"; ") Leer(temp) may = temp men = temp sum = temp Desde(i = 1 hasta i = 9) Hacer Escribir("capturar valores ", i+1"; ") Leer(temp) sum= sum + temp Si(temp<men) entonces: men = temp Fin_si Si(temp>temp) entonces: May = temp Fin_si Fin_Desde prom = sum/(i+1) Escribir("Valor menor : ", men, "; Valor mayor : ", may, "; Sumatoria : ", sum, "; Promedio : ", prom) Fin
i) Sort
Desarrolle un algoritmo que permita leer tres valores y almacenarlos en las variables A, B y C respectivamente. El algoritmo debe imprimir cual es el mayor y cul es el menor. Constatar que los tres valores introducidos por el teclado sean valores distintos. Presente un mensaje de alerta en caso de que se detecte la introduccin de valores iguales. Algoritmo Orden Funciones:Orden Var: Reales: a, b, c Inicio Escribir("Capturar valor a: ") Leer(a) Escribir("Capturar b: ") Leer(b) Mientras(b=a) entonces: Escribir("Escribir un valor distinto para b: ") Leer(b) Fin_Mientras Escribir("Capturar c: ") Leer(c) Mientras(c=a) entonces: Escribir("Escribir un valor distinto para c: ") Leer(c) Fin_Mientras Mientras(c=b) entonces: Escribir("Escribir un valor distinto para c: ") Leer(c) Fin_Mientras Orden(a, b) Orden(a, c) Orden(b, c) Escribir("El valor menor es: ", a) Escribir("El valor mayor es: ", c) Fin
Orden(ES: a, ES: b) Enteros: temp Si (ES:a > ES:b) entonces: temp = ES: a ES: a = ES: b ES: b = temp Fin_si Fin_Orden
j) Cartera de clientes
Disear algoritmo para capturar un arreglo de 100 registros que contengan Nmero de Cliente, nombre, direccin, telfono y adeudo. Ordenar e imprimir por el campo adeudo e imprimir el adeudo total de la cartera de clientes. Utilizar los mtodos Insertionsort y Selectionsort. Algoritmo Salarios_insercion Tipo: Arreglo [099] de tipo Cliente: tabla Registro: Cliente Enteros: Nclie Cadena: Nom, dir, tel Real: adeudo Var: Tabla: Cartera Cliente: Temp Real: Sum = 0 Enteros: j, i Inicio Desde(i = 0 hasta i = 99) hacer: Escribir("Capturar Numero de Cliente") Leer(Cartera[i].Nclie) Escribir("Capturar Nombre") Leer(Cartera[i].Nom) Escribir("Direccion: ") Leer(Cartera[i].dir) Escribir("Telefono: ") Leer(Cartera[i].tel) Escribir("Monto del adeudo: ") Leer(Cartera[i].adeudo) Sum = Sum + Cartera[i].adeudo Fin_Desde Desde(i = 1 hasta i = 99) hacer: Temp = Cartera[i] j=i-1 Mientras((j >= 0) Y (Cartera[j].adeudo > Temp.adeudo)) hacer: Cartera[j+1] = Cartera[j] j = j-1 Fin_mientras Cartera[j+1] = Temp
Desde(i = 0 hasta i = 99) hacer: Escribir(Cartera[i].Nclie, " ", Cartera[i].Nom, " ", Cartera[i].dir," ", Cartera[i].tel, " ", Cartera[i].adeudo,"\n") Fin_Desde Escribir("El adeudo total de la Cartera es de: ", Sum) Fin
Algoritmo Salarios_seleccion Tipo: Arreglo [099] de tipo Cliente: tabla Registro: Cliente Enteros: Nclie Cadena: Nom, dir, tel Real: adeudo Var: Tabla: Cartera Cliente: menor Real: Sum = 0 Enteros: j, i, imen Inicio Desde(i = 0 hasta i = 99) hacer: Escribir("Capturar Numero de Cliente") Leer(Cartera[i].Nclie) Escribir("Capturar Nombre") Leer(Cartera[i].Nom) Escribir("Direccion: ") Leer(Cartera[i].dir) Escribir("Telefono: ") Leer(Cartera[i].tel) Escribir("Monto del adeudo: ") Leer(Cartera[i].adeudo) Sum = Sum + Cartera[i].adeudo Fin_Desde Desde(i = 1 hasta i = 99) hacer: imen = i menor = Cartera[i] Desde(j = i+1 hasta j = 99) hacer: Si(Cartera[j].adeudo < menor.adeudo) entonces: imen = j menor = Cartera[j] Fin_Si Fin_Desde Cartera[imen] = Cartera[i] Cartera[i] = menor Fin_Desde Escribir("#Cliente Telfono Nombre Adeudo\n") Direccin
Desde(i = 0 hasta i = 99) hacer: Escribir(Cartera[i].Nclie, " ", Cartera[i].Nom, " ", Cartera[i].dir, " ", Cartera[i].tel, " ", Cartera[i].adeudo, "\n") Fin_Desde Escribir("El adeudo total de la Cartera es de: ", Sum) Fin
mediante un vector[50] de registros con los campos de Nombre, horas trabajadas, etc. Establece la variable de # de trabajadores en 50, y despus, por medio de un bucle, multiplica el nmero de horas por 30000 en cada trabajador, y se va acumulando los salarios individuales en la variable Total_nomina, y cada ciclo le resta a la variable numero_obreros un uno, as, al llegar a los 50 ciclos, parara y mostrara en pantalla el total de la nmina a pagar. Si se da el caso de no haber datos dentro del vector (ningn trabajador)
2)
Investigar
ejemplos
de
aplicacin
sus
es un nmero pequeo, pero el problema se va complicando ms a aumenta. Por ejemplo, en el numero de comparaciones de 2, en son 6, en , son 10, en son
Si usamos un rbol binario, el nmero de comparaciones se reduce bastante, veamos cmo. El primer nmero del arreglo se coloca en la raz del rbol (como en este ejemplo siempre vamos a trabajar con rboles binarios, simplemente diremos rbol, para referirnos a un rbol binario) con sus subrboles izquierdo y derecho vacos. Luego, cada elemento del arreglo se compara son la informacin del nodo raz y se crean los nuevos hijos con el siguiente criterio: Si el elemento del arreglo es igual que la informacin del nodo raz, entonces notificar duplicidad. Si el elemento del arreglo es menor que la informacin del nodo raz, entonces se crea un hijo izquierdo. Si el elemento del arreglo es mayor que la informacin del nodo raz, entonces se crea un hijo derecho.
Podemos observar que el 4, 9 y 14 se repetan en la lista original, sin embargo, se eliminaron al momento de crear el rbol.
Otro tipo de aplicacin, es en el campo de la toma de decisiones. Supngase se quiere construir un robot capaz de resolver un laberinto simple, esto es, en cada nodo, solo dos direcciones posibles. A entrar al laberinto, seguir su camino, hasta toparse al primer nodo, ira por el camino 1 o 2, toma el 1, llega a otro nodo, y as sucesivamente, hasta topar con un final sin salida o la salida misma. Si se ha topado con un final sin salida, regresara al ltimo nodo y tomara el camino que no tomo, hasta volver a llegar a un camino sin salida o la salida del laberinto. Todo este proceso podemos almacenarlo en memoria y codificar instrucciones simples para que siga este proceso donde recorrer el rbol hasta encontrar la solucin. Al salir, solo tenemos que imprimir el rbol que se gener en memoria, y podramos usar un segundo robot, con las instrucciones de la solucin del laberinto, y as corroborar el trabajo del primero.
Finalmente, una aplicacin ampliamente utilizada es en la bsqueda de datos. Un ejemplo seria en datos numricos, generamos un rbol y en vez de comprobar dato por dato, iremos viendo si nuestro dato a buscar, est en el camino de la izquierda o derecha, comparando el peso de cada nodo, y as, sin necesidad de llegar a verificar toda la estructura, sabremos si no est el dato, o presentarlo en pantalla la ubicacin del mismo dentro de la estructura.
b) Pilas
Una pila representa una estructura lineal de datos en que se puede agregar o quitar elementos nicamente por uno de los dos extremos. En consecuencia, los elementos de una pila se eliminan en el orden inverso al que se insertaron. Debido a est caracterstica, se le conoce como estructura LIFO (last input, first output). Existen muchos casos prcticos en los que se utiliza la idea de pila por ejemplo: pila de platos, en el supermercado latas. Las pilas son unas estructuras de datos muy usadas en la solucin de diversos tipos de problemas, en el rea de computacin. Algunos de los casos ms representativos de aplicacin de las mismas son: Llamadas a subprogramas Recursividad Tratamiento de expresiones aritmticas Ordenacin A continuacin, describir brevemente las llamadas a subprogramas.
En uno de los algoritmos presentados anteriormente, utiliza una funcin llamada orden para realizar una operacin sobre dos variables. Esta funcin fue llamada desde otro programa que llamare main de ahora en adelante, entonces, en memoria podramos ver como orden se carg despus de main, por lo tanto, antes de poder cerrar main, tengo que cerrar orden, y posteriormente, ya se vuelve posible cerrar main. Si orden llamase a otra funcin, que apodaremos f1, y esta, llamara otra de nombre f2, pues cerraramos primero f2, luego f1, despus orden y finalmente main.
Referencias
Joyanes Aguilar, Luis. Fundamentos de Programacin 3era edicin Caceres-Gonzalez, A. (2005, 2 de junio). Aplicaciones de rboles binarios Recuperado de: http://computacion.cs.cinvestav.mx/~acaceres/courses/estDatosCPP/node53.ht ml