viernes, 27 de mayo de 2011

Programación- Pistas para solución de algoritmos enviados

Estimados:

Junto con saludarles y como todo lo que se promete es deuda, hoy vamos a dar las pistas para la resolución de los ultimos 5 algoritmos que nos dieron en clase, de los cuales 4 son para que desarrollemos en el fin de semana... pero todos queremos carretear, tener vida, alimentar al gato o que se yo el fin de semana, aparte, tener un poco menos de presion nos aclara más la mente para el Martes, día del primer juicio apocaliptico en el cual tendremos la primera prueba parcial respecto al tema, y lo más ad-hoc es que nos enfoquemos en un estudio profundo al menos de las variables basícas, que entendiendolas a full, onda en volada epistimologica, el cuento de los ciclos Hacer Para (For) y Mientras (While-Acostumbrense a llamarlos en ingles) se hara mucho más comprensible.

Pasando al grano de este cuento, entremos en lo que nos compete
En el ultimo caso de clases se nos solicito un algoritmo que leyera una lista de numeros enteros positivos de 2 cifras delimitada por un numero entero negativo, y que este leyera los numeros, cruzara los digitos de los mismos y del resultado de eso obtuviera un promedio...sé que ya muchos lo hicieron, pero muchos no, asi que daremos las pistas:
1.-Obviamente tenemos numero de 2 digitos positivos y enteros delimitados por un negativo entero...mientras el numero sea mayor que cero (nume>0) siempre va a ser positivo, los negativos son menores que cero (nume<0)...creo que esta de más indicar que deberemos ocupar el ciclo Mientras y las condicionantes a darles XD

2.-Lo jodido del cuento es que estos numeros tienen 2 digitos, y debemos separar esos dos digitos e invertirlos en posición...o sea jelou, si el numero original leido es el 69, el que nos arroje la función del ciclo debe ser el 96. Para esto debemos separar los digitos...el ultimo digito, lo podemos obtener del resto que arroje al dividor el numero por 10 (UD=nume mod 10) y el primer digito lo obtendremos restandole al numero original  el resto o ultimo digito y ese resultado lo dividiremos por 10...el cuociente o resultado de eso, nos dara el numero final...si no me creen, hagamos la prueba !! (art atack onm XD):
Numero original:
69
Calculo para sacar el segundo o ultimo digito: 69:10=6
                                                        9=>Esto es el resto...el cual leemos con mod....en codigo seria asi
S-digito=69 MOD 10= 9...y 9 es el segundo digito de la cifra original

Calculo para obtener el primer digito:
69-9 (numer original-resto o Ultimo digito)=60 ... si a 60 lo dividmos por 10=6..tenemos el primer digito...en seudocodigo el cuento seria mas o menos asi:
P-digito=(nume [69] - S-digito [resto o como llamen la variable]) / 10..si lo hacemos con el 69, el resultado del cuento sera 6....
Con esto tenemos los digitos separados.
Ahora lo interesante es crear el nuevo numero invertido y como nuestro sistema es base 10, esto lo obtenemos multiplicando el segundo digito por 10 y sumandole el primer digito.-..
P-digito=6
S-digito=9
Num-final= 9*10+6 (obviamente aplican este concepto con las variables)..y..tenemos el 96!

3.- Considero que explicar lo demas es paja molida, aplicamos algo que nos cuente estos numero invertidos que creemos(Contador-CONNUM) y a otra cosa que los sume (Acomulador ACNUME) y despues sacamos el promedio (suma de numeros /cantidad de numeros) y lo imprimimos y todos somos happy XD
------------------------------------------------------------------------------------------------------
Pasemos a otro brigido (ando sin el cuaderno y no me acuerdo del orden, sorry), donde nos piden una historia mas o menos asi como diria Arjona...un algortimo que nos imprima los primeros 100 numeros fibonacci, y contrario a lo que se pueda pensar, y creer que nuestro profe la raya con el codigo da vinci, este es un ejercicio bastante común si sorfean y rockean heavy por la red e investigan...(abran el vinculo pa que tazen lo que sigue...donde dice, "Más información »", onda corto la entrada pa no extender mucho el home y dejar la mansacag...XD)

1.-Como datos freak podemos decir que el primer fibonacci es 0 y el centesimo es : 218922995834555000000!!...asi que ni en broma vamos a pensar en la logica de tirar un ciclo que llegue al centesimo fibonacci (hacer para aux=1 a 218922995834555000000 XD)...a pesar de que el enunciado nos exprese una cantidad finita...pero podemos simular una condicionante que solo nos imprima los 100 y no nos cree una impresion infinita. Un Fibonacci N es el resultado de la suma de sus dos predecesores y si tenemos los primeros que serian 0 y 1...este cuante podemos resumirlo como:
a=0
b=1
c=a+b....
Pero volviendo a que solo necesitamos los primeros 100, necesitamos un algo que nos cuente cuantas veces repetiremos el ciclo adecuado (que sera un mientras, ya que queremos una condiciónn para obtener un segmento de un algo infinito)...contemoslos po!!...creemos un contador que parta en 0 (siempre es asi) y ese contador cuando llegue a 100, detenga el ciclo...el cuento seria para esto:
CONFIBO=0
Mientras CONTFIBO<101....
Captan?..espero que si...

2.-Volviendo al cuento engorroso de como sacar ahora todos, pensemos... si A(´primer fibo. =0) +B (segundo fibo. =1) da C (tercer fibo. =1)...es obvio que necesitaremos un D para ejecutar un cuento de B+C=D...pero y si cambiamos siempre las variables A y B una vez obtengamos C??, pero antes de este cambio, deberemos imprimir C para que no se nos pierda...entonces el cuento puede ser:
A=0
B=1
CONTFIBO=0
Mientras CONTFIBO <101
c=a+b
Imprimir C
A=B
B=C
CONTFIBO=CONTFIBO+1
Listo!!...si analizan la estructuctura del cuento, estamos diciendo que C es igual a a+b y que imprima eso..una vez lo imprime, en forma inmediata cambia las variables ahora a deja de ser 0 y pasa a ser B,. que es 1.. y B, deja de ser 1 y pasa a ser C, que es 1 tbm para esta primera vuelta...pero si se dan la paja de tomar un papel y lapiz, se daran cuenta que despues C va a ser 2, despues 3, depsues 5, etc...en el fondo la variable C es la que nos entrega el resultado. Creo que no necesito explicarle el porque a la variable de conteo (contador9 la sumamos uno...y asi la vamos modificando en el valor incial...ahora esta variable va a ser 1, despues 2, despues 3..cuando llegue a 100 el ciclo dara la ultima vuelta...y si llega a 101, el ciclo mientras se cancelara!!...

3.- Lo demas es paja pa ustedes, ad-hoc no pongan a y b, usen conceptos más creativos o que se yo...tbm es valido si quieren imprimir los dos primeros y crear un hacer para de 1 a 98 aunque les puede resultar un poco más dificil de comprender, pero no usarian una variable de conteo, que es un experimento arriesgado, pero creo, el pseudocodigo más corto.
---------------------------------------------------------------------------------------------

Por ahi nos pidieron otro algoritmo  que nos sacara el promedio de numero de 3 cifras impares...no recuerdo bien cuantos datos eran los que había que procesar, pero tampoco es necesario recordarlo para los efectos ya que presumo que usaran ciclo Hacer para para definir todas las lecturas que deben darse. El cuento es pensar en estos numeros...
1.- Nos piden numeros enteros positivos naturales de tres cifras...cuales son??..el rango va del 100 al 999, cualquier numero que se mayor o igual a 100 (99 tbm si solo pedimos un mayor y suponiendo que el cuento es solo para naturales, sin contar decimales) y que sea menor que 10000 nos servira...el cuento va en definir esto con una pregunta...(SI)...doble anidada, los ejemplos los vimos hae un tiempo, cuando explicarom esta variable...es cosa de revisar la materia para definir un rango de numeros

2.-Despues, no conformes con eso...aparte que sean de tres cifras, nos piden que sean impares...pensemos... si todo numero par el dividirlo por 2 me arroja un resto de 0... los impares por logica, no nos dan 0....mientras el resto sea distinto a 0 el numero sera impar..ahora el cuento va con otra variable o función SI...

3.-Promedio va a ser igual a la suma de esos numeros de tres cifras dividida por la cantidad de numeros, por ende, necesitaremos un contador y un acomulador
---------------------------------------------------------------------------
En la segunda parte (cuando me acuerde de los otros 2 XD) definiremos los 2 algoritmos restantes, pero al menos en esta he tratado de cubrir los que me parecieron más brigidos...y creo que con las definiciones que entregue...no deberiamos tener grandes problemas. Saludos y de más que de aqui a la tarde saco la otra parte. XD

No hay comentarios:

Publicar un comentario

Deja tu comentario o sugerencia!