Sei sulla pagina 1di 3

Ctedra de Programacin (0790).

Secciones 2, 3, 4 y 5

Taller de Laboratorio

Objetivos del presente taller:


Utilizar la metodologa Top-Down para la resolucin de problemas de programacin. Utilizar expresiones aritmticas y lgicas para manipular variables numricas. Implementar estructuras de repeticin para generalizar programas parcialmente resueltos. Utilizar instrucciones de seleccin. Manipular la salida formateada de programas. Conocer en qu consiste un programa interactivo.

Generando nmeros capicas.


Este ejercicio tiene como propsito generar los nmeros capicas entre 1 y un nmero ingresado por el usuario. Si no lo recuerda, los nmeros capicas son aquellos que se leen igual de izquierda a derecha que de derecha a izquierda, por ejemplo 5775, 434, etc. Para resolverlo, seguiremos la siguiente asociacin de ideas: Para generar una lista de nmeros capicas, genero una lista de nmeros naturales, verifico cules de ellos son capicas y los imprimo. Para verificar si un nmero es capica, debo transformarlo en otro, compuesto por los mismos dgitos del nmero pero en orden inverso. Para construir un nmero como el que se mencion en el paso anterior, se deben extraer los dgitos individuales del nmero original. Para extraer los dgitos individuales de un nmero entero, tomo el resto de las divisiones sucesivas del nmero entre 10 verifique manualmente si esto es correcto. Cada uno de estos restos es un dgito. Se divide entre 10 hasta que el nmero resultante sea cero. Para construir entonces el nmero compuesto a partir de dgitos individuales, tomo el primer dgito, lo multiplico por 10 y le sumo el segundo dgito. Luego, tomo el nmero resultante, lo multiplico por 10 y le sumo el tercer dgito, y as sucesivamente. Con estas ideas en mente, podemos proceder de la siguiente manera:
1) Comience un nuevo programa en Delphi. El programa debe ser tipo cnsola, por lo que, una vez que

aparezca el editor de cdigo, cierre los paneles laterales y verifique que el tamao de letra es cmodo

Semestre 3-2012. Programacin: Taller n 4.

Pag. 2 de 3

(14 o ms). Gurdelo en una carpeta de nombre Capicuas, ubicada bajo la carpeta de la seccin en el disco D.
2) Escriba el siguiente programa que lee un nmero entero de varias cifras e imprime cada dgito del

nmero ingresado en una lnea diferente. Analcelo y trate de entender lo que hace cada instruccin, para ello utilice la corrida en fro. Prubelo hasta que funcione correctamente.
Var Original, Auxiliar, Digito: Integer; begin Write('Ingrese un numero entero: '); Readln(Original); Auxiliar:=Original; Repeat Digito:=Auxiliar mod 10; Writeln(Digito); Auxiliar:=Auxiliar div 10; Until Auxiliar=0; Readln; end. 3) Modifique luego el programa para que, con cada dgito del nmero ingresado, forme otro con los

dgitos del original en orden inverso. Tenga como dato que, si el nuevo nmero lo almacenamos en la variable Construido, entonces Construido:=Construido*10+Digito. Agregue esta instruccin en el lugar adecuado del listado anterior. Pruebe el programa.
4) Agregue ahora una instruccin de seleccin que compare los dos nmeros el original y el construido

Si son iguales, imprima el mensaje de que el nmero original es capica.


5) Modifique ahora el programa para que lea del teclado un nmero M e imprima slo los nmeros

capicas entre 1 y M.
6) Agregue las instrucciones necesarias para que el programa imprima adems la suma de todos los

nmeros capicas impresos.


7) Pruebe, comente, identifique, embellezca y luego, guarde el programa en la misma carpeta.

Calculando nmeros primos.


En el siguiente ejercicio va a usted escribir una aplicacin que imprime una lista de nmeros primos desde 1 hasta un nmero ingresado por el usuario. Para ello va a aplicar una tcnica de trabajo llamada diseo Top-Down, mediante la cual se trata de descomponer el problema en secciones de menor complejidad, repitiendo este proceso con cada seccin hasta llegar a secciones de complejidad mnima que podrn ser resueltas independientemente, para luego armar el resultado mediante el ensamblaje de las mismas. As, siga la siguiente lnea de razonamiento: Para imprimir una lista de nmeros primos, genero una lista de todos los nmeros, verifico cules de ellos son primos y los imprimo. Para saber si un nmero N es primo, debo verificar que NO sea divisible entre los nmeros menores que l excepto el 1. Un nmero i es divisible entre un nmero j si la divisin de i entre j es exacta, o en otras palabras, no deja residuo.
Prof. Jos Ricardo Vargas Noviembre 2012

Semestre 3-2012. Programacin: Taller n 4.

Pag. 3 de 3

Entonces, para conseguir el objetivo, siga las siguientes indicaciones:


1) Escriba una expresin lgica para verificar si una variable entera -i- es divisible entre otra variable

entera -j-. Se le recuerda que una expresin lgica puede tener operandos aritmticos.
2) Comience un nuevo programa en Delphi. El programa debe ser tipo cnsola, por lo que, una vez que

aparezca el editor de cdigo, cierre los paneles laterales y verifique que el tamao de letra es cmodo (14 o ms). Gurdelo en una carpeta de nombre Primos, ubicada bajo la carpeta de la seccin en el disco D.
3) Escriba ahora las declaraciones y las instrucciones que permitan verificar si un nmero entero ledo

por el teclado -N-, es primo. Utilice la expresin lgica escrita anteriormente y una instruccin REPEAT que tome una variable -por ejemplo j-, le asigne valores desde 2 hasta N-1 y, en cada paso, verifique si N es divisible entre j. Si alguna de estas verificaciones es cierta, entonces N no es primo. Si el nmero ledo resulta ser primo, imprima en pantalla un mensaje que muestre el nmero y el mensaje "es primo". Se aconseja escribir primero este segmento de programa en forma de diagrama de flujo. Tip: Utilice una variable lgica que tome el valor TRUE si el nmero es primo y FALSE en caso contrario, asgnele el valor TRUE al principio del programa y, durante las pruebas de verificacin, si resulta que el nmero es divisible entre otro, asgnele el valor FALSE. Esta es una tcnica de programacin importante. Por favor, trate de entenderla detalladamente.
4) Pruebe el programa y agrguele instrucciones de impresin de mensajes para hacerlo ms amigable.

Agrguele tambin comentarios, sobre todo los de identificacin a principio del listado.
5) En este punto debe tener usted entonces un programa que lee un nmero entero por el teclado N y

verifica si ste es primo. Para transformarlo ahora en uno que imprima la lista de primos desde 1 hasta M, donde M es un nmero ledo por el teclado, sustituya la lectura de datos del nmero N por otro ciclo REPEAT que use a N como variable de control y que le asigne los valores mencionados.
6) Pruebe el programa. Para el caso de M=1000, la salida deber arrojar los siguientes resultados:

1 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251 257 263 269 271 277 281 283 293 307 311 313 317 331 337 347 349 353 359 367 373 379 383 389 397 401 409 419 421 431 433 439 443 449 457 461 463 467 479 487 491 499 503 509 521 523 541 547 557 563 569 571 577 587 593 599 601 607 613 617 619 631 641 643 647 653 659 661 673 677 683 691 701 709 719 727 733 739 743 751 757 761 769 773 787 797 809 811 821 823 827 829 839 853 857 859 863 877 881 883 887 907 911 919 929 937 941 947 953 967 971 977 983 991 997

7) Agregue una variable para contar el nmero de primos encontrados. Imprima el valor de esta variable

al final del programa. Averige cmo hacer que el programa sea ms eficiente, por ejemplo, haciendo que se ejecute ms rpido. Prubelo con valores mayores de M como uno o diez millones. Con esto queda concluido el taller.

Prof. Jos Ricardo Vargas

Noviembre 2012

Potrebbero piacerti anche