archivo


189KB Größe 0 Downloads 0 vistas
Edutin Academy

Problema: Céntimos Implemente un programa que calcule la suma de obtener el doble de una cantidad de dinero cada día por un mes, como debajo. $ ./pennies Days in month: 30 Pennies on first day: 1 $10737418.23

Doble o nada Si incluso te dieran a elegir entre $10,000,000 o un mes de valor en centavos, a través del cual recibieras un centavo el primer día, dos el segundo, cuatro el tercero y así sucesivamente… toma los centavos. De cualquier forma, ¿Por qué los centavos?, ¡Potenciación! Estos centavos se suman considera cuantos centavos recibirás el día número 31, sin mencionar los días anteriores: 1×2×2×2×2×2×2×2×2×2×2 ×2×2×2×2×2×2×2×2×2×2 ×2×2×2×2×2×2×2×2×2×2 = 1073741824 Puesto de forma más breve, un ejemplo seria 1 x 220. Convierte esos centavos en dólares (haciendo una división entre 100) y obtendrás, $10,000,000 ¿En solo un día?, que locura. ¿Qué tal si te hubieran dado más de un centavo en el primer día? ¿O si el mes fuera febrero?, (en cuyo caso fuiste estafado por unos cuantos

Edutin Academy

millones). Es mejor tomar los centavos en enero, marzo, mayo, julio, agosto, octubre o diciembre, ¡Vamos a averiguarlo!

Especificaciones • Aplica, en un archivo llamado pennies.c , un programa que primero le pregunte al usuario cuantos días hay en el mes y luego le solicite cuantos centavos recibirá él o ella el primer día del mes. • El programa debería entonces calcular la cantidad que el usuario recibirá en total al final del mes (no solo en el último día), si esa cantidad se duplica todos los días menos el primero, expresada no en céntimos sino en dólares y centavos. • Si el usuario no escribe 28, 29, 30 o 31 para el número de días en el mes, el programa deberá solicitarle al usuario que intente de nuevo. • Si el usuario no introduce un entero positivo para el numero de céntimos el primer día, el programa deberá decirle al usuario que vuelva a intentarlo.

Uso Tu programa debería comportarse de la siguiente manera, donde el texto subrayado representa alguna entrada por parte del usuario. ~/workspace/unit1/pennies/ $ ./pennies Days in month: 32 Days in month: 31 Pennies on first day: 1 $21474836.47 Nótese como las salidas sugieren que el programa necesitó volver a preguntarle al usuario si él o ella falla al momento de cooperar con estas reglas (introduciendo demasiados días).

Edutin Academy

¿Cómo comenzar? Bueno, como antes, debes crear un nuevo archivo dentro de tu directorio ~/workspace/programming/pennies , (¿recuerdas cómo?) y nómbrarlo pennies.c . Luego, llena el archivo con algo de código “boilerplate” como el de abajo: #include #include int main(void) { } Guarda el archivo, y solo para asegurarnos, intenta compilarlo make pennies En tu ventana de comandos, solo asegúrate que no cometiste ningún error de sintaxis (en caso de que veas algún error que necesite ser arreglado). Probablemente todo lo que quieras es un par de ciclos, uno de los cuales pedirá (y potencialmente volverá a pedir) al usuario por el número de días, y otro con el que le pedirá al usuario el primer número de céntimos para el primer día. ¿Cómo obtenernos ambos números? ¿Quizás la Liberia de CS50 nos ofrezca algunas opciones? También puedes encontrar funciones en el archivo math.h que quizá pueda ayudarte con este problema. Échale un vistazo a Reference50 a ver cuáles podrían ser estas funciones. Asegúrate de que, si utilizas alguna de estas funciones, colocar esta línea de código cercana al comienzo de tu archivo pennies.c

Edutin Academy

#include Por supuesto, si almacenas la cantidad de efectivo del usuario en un int (el cual solo tiene 32 bits), el total estará limitado por (231 – 1) centavos. Lo mejor entonces, es almacenar el total en un long long , de esta manera el usuario obtiene el beneficio de 64 bits. (No te preocupes si el total del usuario supera los 64 bits e incluso se vuelve negativo; ¡considéralo un castigo por avaro!) Ten cuidado con el formato del total del usuario, en dólares y centavos (solo 2 espacios decimales), anticipado con un signo de dólar ($). No necesitas insertar comas después de cada 3 dígitos a la izquierda del decimal, como normalmente lo harías. De modo que podamos realizarle algunas pruebas a tu código, preguntaremos al programa por la última línea de salida, que debe ser la cantidad total del usuario, seguido de \n. ¡El resto del programa te lo dejamos enteramente a ti!

Probando Correctitud Para probar si tu programa está correcto, deberías ejecutar lo siguiente en la ventana de comandos. check50 cs50/problems/2018/ap/pennies

Estilo style50 pennies.c

Edutin Academy

Honestidad Académica La filosofía de este curso sobre la honestidad académica es mejor mencionada como “sé razonable”. El curso reconoce que la interacción con los compañeros de clases y otros puede facilitar el dominio del material del curso. Sin embargo, aquí recordamos una línea entre conseguir ayuda de otro y presentar el trabajo de alguien más. Esta política caracteriza ambos lados de esa línea. La esencia de todo el trabajo que envía a este curso debe ser propia. La colaboración sobre los problemas no está permitida (a menos que se mencione explícitamente) excepto hasta el punto de que puedas pedir ayuda a tus compañeros u otros, siempre y cuando esa ayuda no se reduzca a que el otro haga el trabajo por ti. Generalmente hablando, cuando pides ayuda, puedes mostrar tu propio código o escribirlo, pero no deberías ver el de los demás, mientras que usted y ellos respeten estas políticas y otras restricciones. La colaboración en quices y tesis está totalmente prohibida. La colaboración en el proyecto final está permitida hasta el punto que se especifique. Debajo están las reglas prácticas que caracterizan los actos que el curso considera razonables y no razonables. Si duda en cuanto si un acto es razonable, no lo haga hasta que solicite y reciba la aprobación por escrito de su instructor. Si una violación de esta política es sospechada y confirmada, su instructor se reserva el derecho de imponer sanciones sobre cualquier resultado disciplinario que podría incluir la pérdida del trabajo enviado o del curso en sí.

Edutin Academy

Razonable • • • •

• • • • • •

Comunicarse con compañeros de clase acerca de problemas en Ingles (u algún otro idioma hablado). Debatir el material de curso con otros con la finalidad de entenderlo mejor. Ayudar a un compañero a identificar un bug en su código, viendo, compilando o corriendo su código, incluso en su propio computador. Incorporando un fragmento de código que se encuentre online o en cualquier lugar, dentro de su código, previsto que esos fragmentos no son en si la solución a los problemas asignados y que se cite el origen del fragmento de código. Revisar quices de años pasados, exámenes y soluciones. Enviar o mostrar código que le ha escrito a alguien, posiblemente a un compañero, entonces eso podría ayudarlo a identificar y arreglar un bug. Compartiendo fragmentos de código, sus propias soluciones a problemas en línea así otros podrían ayudarle a identificar y arreglar un bug u otro inconveniente. Utilizando la web o cualquier otro lugar por instrucciones más allá del curso mismo, para referencias, y para soluciones por dificultades técnicas, pero no para soluciones completas a problemas o para su propio proyecto final. Exponer soluciones a problemas con otros usando diagramas o pseudocódigo, pero no el código actual. Trabajar (e incluso pagarle) a un tutor para ayudarte con el curso, aclarando que el tutor no haga el trabajo por usted.

Edutin Academy

No razonable • • • • • • • •

Acceder a las soluciones de algún problema antes de presentar la suya. Preguntarle a un compañero de clases para ver su solución al problema antes de presentar la suya. Descompilar o desensamblar las soluciones a los problemas. Fallar al citar (como con comentarios) el origen del código, escritura o técnicas que usted descubrió fuera del curso e integrarlas a su propio trabajo incluso mientras respeta esta política y otras restricciones. Dando o mostrando a un compañero la solución a un problema cuando él o ella, y no usted, fue quien tuvo problemas al resolverlo. Viendo el trabajo de otra persona durante un examen o quiz. Pagando u ofreciendo pagarle a alguien por un trabajo que usted debe presentar como (o en parte) suyo. Ofreciendo y haciendo disponible las soluciones de un problema a personas que podrían tomar el curso en el futuro.



Buscar, solicitar o ver las respuestas de un quiz antes de tomarlo.



Buscar o solicitar soluciones completas a problemas en línea o en otro lugar.



Dividiendo la carga de trabajo para resolver un problema y combinar su trabajo. (A menos que esté autorizado explícitamente por el problema mismo).



Presentando (después de una posible modificación) el trabajo de otra persona más allá de los fragmentos permitidos.



Presentando el mismo o un trabajo similar a este curso que usted ha presentado o presentará en otro lugar.



Utilizando recursos durante el quiz más allá de los que están explícitamente permitidos en las instrucciones del quiz.



Viendo otra solución del problema y basar su propia solución en esta.

Edutin Academy

Evaluación Su trabajo en este conjunto de problemas se evaluará principalmente en tres ejes.

Exactitud ¿Hasta qué punto su código es consistente con nuestras especificaciones y libre de errores?

Diseño ¿Hasta qué punto está bien escrito su código (es decir, de manera clara, eficiente, elegante y / o lógica)?

Estilo ¿Hasta qué punto es legible su código (es decir, comentado y sangrado con las variables adecuadamente nombradas)?

Para obtener una calificación aprobatoria en este curso, todos los estudiantes deben enviar todos los problemas asignados, a menos que el profesor otorgue una excepción por escrito.

Este documento hace parte de la obra “CS50's AP® Computer Science Principles” por Harvard University, disponible bajo licencia Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0). “CS50's AP® Computer Science Principles” licencia Attribution-NonCommercialShareAlike 4.0 International (CC BY-NC-SA 4.0) modificado y adaptado por Edutin Academy.