You are on page 1of 21

UNIVERSIDAD AUTNOMA DE CHIHUAHUA

Facultad de Ingeniera

DISEO DE ALGORITMOS

[248016 Jonathan Islas Garca]

[Trabajo Final]

[29 de Mayo del 2013]

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

c) Impares hasta 300


Algoritmo que lea los primeros 300 nmeros enteros y determine cuntos de ellos son impares; al final deber indicar su sumatoria. Algoritmo 300 Var: Enteros: i, j = 0, sum = 0 Inicio Desde(i = 0 hasta i = 300) hacer: Si ((i%2) > 0) entonces: sum = sum + i j = j +1 Fin_si Fin_desde Escribir(sumatoria, j) 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

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

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

k) Describir el siguiente algoritmo:


Este diagrama describe el cmo obtener la suma de la nmina de 50 trabajadores, basados en el total de horas trabajadas. Supone ya la entrada de datos de cada trabajador, que probablemente sea

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)

automticamente se sale del programa.

2)

Investigar

ejemplos

de

aplicacin

sus

respectivos algoritmos para pilas y rboles. a) Arboles


Un rbol binario es una estructura de datos til cuando se trata de hacer modelos de procesos en donde se requiere tomar decisiones en uno de dos sentidos en cada parte del proceso. Por ejemplo, supongamos que tenemos un arreglo en donde queremos encontrar todos los duplicados. Esta situacin es bastante til en el manejo de las bases de datos, para evitar un problema que se llama redundancia. Una manera de encontrar los elementos duplicados en un arreglo es recorrer todo el arreglo y comparar con cada uno de los elementos del arreglo. Esto implica que si el arreglo tiene problema si medida que elementos, se deben hacer
( )( )

comparaciones, claro, no es mucho

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

son 3 comparaciones, en 499500 combinaciones a revisar.

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

You might also like