JavaRush /Blog Java /Random-ES /Harvard CS50: Asignaciones de la semana 1 (Conferencias 3...
Masha
Nivel 41

Harvard CS50: Asignaciones de la semana 1 (Conferencias 3 y 4)

Publicado en el grupo Random-ES
Harvard CS50: Asignaciones de la semana 1 (Conferencias 3 y 4) - 1Amigos, pueden obtener información teórica básica de las notas del seminario . Allí, además de los conceptos básicos de C, se describe cómo conectarse a una nube especial IDE CS50 (esto debe hacerse para ejecutar y verificar tareas) y se describen los comandos básicos necesarios de Linux y las estructuras del lenguaje. Si no encuentra suficiente material sobre C en la conferencia y las notas, busque otras fuentes. Por ejemplo, los que se enumeran al final de este artículo. En el tema " Materiales adicionales "
  • Objetivos de la primera semana.
  • IDECS50
  • Actualización de la línea de comando y del banco de trabajo
  • Trabajando en el IDE
  • ¡Hola C!
  • ¿Insectos?
  • Verificación de validación: prueba check50
  • Conceptos básicos de C: comparación con Scratch
  • Tipos de datos básicos en C
  • Bibliotecas C
  • Hola C de nuevo: análisis de la sintaxis de los programas más sencillos.
  • Un poco más sobre E/S en C
Materiales en este tema:
  • Entrada de datos validada: funciones especiales de la biblioteca cs50.h
  • Tarea 1. Cálculo inteligente del consumo de agua
  • Tarea 2. ¡Mario está con nosotros!
  • Tarea 3. Es hora de cambiar
  • Cómo validar tu código y obtener notas
  • recurso de código
  • literatura adicional

Entrada de datos validada: funciones especiales de la biblioteca cs50.h

Para hacer este curso más cómodo, hemos desarrollado una biblioteca especial CS50, que, en particular, tiene funciones muy útiles para procesar datos ingresados ​​por el usuario.
  • GetString()lee la cadena ingresada por el usuario;

  • GetInt()lee la cadena ingresada por el usuario y verifica si contiene un número entero;

  • GetFloat()lee la cadena ingresada por el usuario y verifica si contiene un número de punto flotante;

  • GetLongLong()lee la cadena ingresada por el usuario y verifica si contiene un número real largo.

Tarea 1. Cálculo inteligente del consumo de agua

Harvard CS50: Asignaciones de la Semana 1 (Conferencias 3 y 4) - 2Es lógico: cuanto más te duchas, más agua se gasta en este proceso. ¿Averigüemos cuánto? Incluso si la ducha apenas está abierta, de ella salen aproximadamente 6 litros de agua por minuto. Y estas son 12 botellas de agua que llevas contigo para beber. Normalmente una persona se ducha durante unos 10 minutos, en total para lavarse se necesitan 120 botellas de medio litro. ¡Bastante! Crea un archivo water.cen tu ~/workspace/pset1. El programa debe contar cuántas botellas de agua se utilizan para la ducha dependiendo del tiempo. Eso es:
  1. El programa pregunta al usuario el número de minutos que pasa en la ducha
  2. El usuario ingresa un número entero positivo
  3. El programa muestra el número de botellas utilizadas por el usuario.

username:~/workspace/pset1 $ ./water
minutes: 10
bottles: 120
Por simplicidad, esta vez asumiremos que el usuario siempre ingresa correctamente el número de minutos, es decir, no verificamos si el número ingresado es positivo y entero. Más adelante aprenderemos a escribir cheques, pero por ahora esto es suficiente. Para verificar que el programa se esté ejecutando correctamente, check50,debe ingresar la siguiente línea en la terminal:

check50 2015.fall.pset1.water water.c
Y si quieres ver cómo waterfunciona el programa escrito por el personal del curso, ejecuta el siguiente comando:

~cs50/pset1/water

Tarea 2. ¡Mario está con nosotros!

Harvard CS50: Asignaciones de la Semana 1 (Conferencias 3 y 4) - 3¿Conoces al fontanero más famoso del mundo? Con la ayuda de Nintendo, el tipo ficticio bigotudo y ligeramente regordete con gorra roja se ha convertido en un héroe para varias generaciones de jugadores. Si no sabes de quién estamos hablando, aquí tienes un enlace al clásico juego de 1985 : créeme, ¡sigue siendo bueno y vale la pena echarle un vistazo! También puedes encontrar una versión del clásico Super Mario para smartphones o emuladores sin conexión. Necesitamos todo esto para el desarrollo general; lamentablemente, esto aún no es una tarea ;). Y la tarea es esta. Al final del primer nivel de Mario, todos los jugadores vieron esta media pirámide: crea un archivo mario.cen tu ~/workspace/pset1. Nuestro programa dibujará una media pirámide similar a la que ves, pero directamente en la consola, sin gráficos: cada uno de los bloques estará formado por un icono de almohadilla (#). Incluso si aún no has descubierto cómo hacerlo, créeme: es fácil. Para hacer el problema más interesante, agreguemos la capacidad de establecer la altura de la media pirámide usando un número entero no negativo de 0 a 23. Se considera que la altura de la pirámide en la imagen está en el lugar más alto. es decir, igual a 8. Si el usuario ingresa el número incorrectamente, deberá pedirle que lo haga nuevamente una vez. Luego genere (usando printf una pirámide). Tenga cuidado de alinear la esquina inferior izquierda de su media pirámide con el borde izquierdo de la ventana del terminal, como en el siguiente ejemplo. El texto subrayado es lo que el usuario ingresa.

username:~/workspace/pset1 $ ./mario

height: 8
       ##
      ###
     ####
    #####
   ######
  #######
 ########
#########
Observe que las dos columnas de la derecha tienen la misma altura. Aún no vale generar tuberías, nubes y el propio Mario =). Al menos para esta tarea. Si el usuario ingresó datos incorrectos (no ingresó un número, o ingresó un número menor que uno o mayor que 23), el programa debería pedirle que ingrese los datos nuevamente, como en el siguiente ejemplo, donde el texto subrayado es lo que el usuario ingresó desde el teclado. Para leer la cadena ingresada, use GetInt. Puede ayudar a comprobar si hay entradas incorrectas, pero no en todos los casos.

username:~/workspace/pset1 $ ./mario
Height: -2
Height: -1
Height: foo
Retry: bar
Retry: 1
##
Para compilar el programa, ingrese la línea en la terminal:

make mario
o una versión más transparente pero más larga:

clang -o mario mario.c -lcs50
Después de eso, ejecute el programa para su ejecución:

./mario
Si desea comprobar que el programa se está ejecutando correctamente, ejecute check50:

check50 2015.fall.pset1.mario mario.c
Y si quieres jugar con la versión de mario de los asistentes del curso, escribe la siguiente línea:

~cs50/pset1/mario

Tarea 3. Es hora de cambiar

Harvard CS50: Asignaciones de la Semana 1 (Conferencias 3 y 4) - 4En nuestras latitudes, no hemos visto esto, pero en los EE. UU. Parece que existe un juguete de este tipo, como se muestra en la foto: los cilindros están diseñados para monedas de diferentes diámetros (y denominaciones), se liberan mediante un mecanismo de resorte. , y la unidad en sí se puede sujetar al cinturón de un cajero infantil. Sin embargo, ¿qué pasa si alguien le paga al cajero con un billete grande? Imagínese cuánto problema será contar monedas para cambiar. Para minimizar la cantidad de monedas emitidas, puede utilizar los llamados algoritmos "codiciosos". Ellos, según lo define el Instituto Nacional de Estándares y Tecnología (NIST), siempre encuentran la solución óptima en cada paso para resolver un problema, asumiendo que la solución final (obtenida de la totalidad de dichos pasos) también será óptima. ¿Qué significa? Imaginemos que un cajero le debe a un cliente 41 céntimos de cambio y tiene en su cinturón cilindros de monedas para cambio en denominaciones de 25, 10, 5 y 1 céntimos. Un cajero guiado por un algoritmo "codicioso" inmediatamente querrá dar el máximo en el primer paso. En este punto, la solución óptima o mejor sería repartir 25 peniques. 41-25 = 16. Quedan 16 peniques por pagar. Obviamente, 25 peniques es demasiado, así que quedan 10. 16-10 = 6. Ahora repartimos 5 peniques usando el mismo principio, y luego 1. Por lo tanto, el comprador recibirá sólo cuatro monedas en denominaciones de 25, 10, 5 y 1 penique. Resulta que las "codiciosas" instrucciones paso a paso para emitir dinero son óptimas no sólo para este caso, sino también para las denominaciones de moneda estadounidense (y también para la Unión Europea). Es decir, si el cajero tiene suficientes monedas de cualquier denominación, el algoritmo funcionará mejor, es decir, emitirá la cantidad mínima de monedas de todos los casos posibles. Entonces, ¿cuál es la cantidad mínima de monedas que necesitamos para dar cambio? Esta es nuestra tercera tarea. Cree un archivo greedy.cen su directorio ~/workspace/pset1. Dado: monedas en denominaciones de 25, 10, 5, 1 céntimos. El programa debería:
  1. Pregúntele al usuario cuánto cambio debe entregar.
  2. Calcula el número mínimo de monedas con las que puedes hacer esto
Nota:Usaremos una función GetFloatde la biblioteca CS50 para entrada y printfde la biblioteca de E/S estándar para salida. Además, el programa debe comprobar la exactitud de la entrada. Le solicitamos que use GetFloat, para permitir al usuario ingresar un valor en dólares y centavos separados por un punto. Por ejemplo, si debemos $9,75, el usuario debe ingresar 9,75, pero no $9,75 o 975. Debe asegurarse de que el usuario ingrese un número que tenga sentido. GetFloatDigamos que no es negativo; la función en sí no ayudará con esto . Si el usuario realiza una entrada incorrecta, debe pedirle que la repita y ejecute el programa solo con los datos correctos. Tenga cuidado con las imprecisiones inherentes a los números de coma flotante. Por ejemplo, 0,01 no se puede representar directamente como float. Intente utilizar salida formateada, por ejemplo con 50 decimales, utilizando el siguiente código:

float f = 0.01;
printf("%.50f\n", f);
Por cierto, antes de contar algo, sería lógico convertir la cantidad total a céntimos (y al mismo tiempo convertirla de floata int), lo que ayudará a evitar muchos errores y dificultades. Para garantizar que nuestro analizador automático de código pueda verificar correctamente su problema, asegúrese de que la última línea de la salida de su programa no contenga ninguna otra información que no sea la cantidad mínima de monedas: un número entero con \n después (aquellos que aprenden JavaRush saben muy bien de qué estamos hablando aquí =)). A continuación se muestra un ejemplo de cómo debería verse el resultado de su programa.

username:~/workspace/pset1 $ ./greedy
O hai! How much change is owed?
0.41
4
Dada la naturaleza de los números de coma flotante, puede ignorar el cero e ingresar dicho número en la forma .41. Por supuesto, los usuarios que quieran comprobar en el programa la posibilidad de introducir datos incorrectos en su totalidad deberían ver algo como:

username:~/workspace/pset1 $ ./greedy
O hai! How much change is owed?
-0.41
How much change is owed?
-0.41
How much change is owed?
foo
Retry: 0.41
4
Según estos requisitos y el ejemplo que vio arriba, lo más probable es que su código contenga algún tipo de bucle. Si mientras pruebas la aplicación te das cuenta de que el bucle no se detiene, puedes interrumpir la ejecución del programa con la combinación Ctrl-c (a veces varias veces). Ya sabes cómo compilar y ejecutar un programa. Si desea verificar si su programa está funcionando correctamente, usando la utilidad check50, ingrese la siguiente línea en la terminal:

check50 2015.fall.pset1.greedy greedy.c
Y si quieres jugar con este programa hecho por asistentes de curso, escribe el siguiente comando:

~cs50/pset1/greedy

Cómo validar tu código y obtener notas

  1. Opción 1

    Si es importante para usted verificar la exactitud del código y no obtener una calificación final, puede verificarlo y corregirlo usando el comando.

    
    check50 2015.fall.pset1.name name.c

    ingresado en la línea terminal de CS50 IDE? ¿ Dónde nameestá el nombre de su archivo de tareas?

  2. opcion 2

    Si desea obtener calificaciones (esencialmente lo mismo que ejecutar check50, pero recordando el resultado y completando algunos formularios en inglés), siga estos pasos:

    • Paso 1 de 2

      1. Cuando las aplicaciones estén listas, inicie sesión en el IDE de CS50.
      2. En la esquina superior izquierda del IDE de CS50, dentro de su explorador de archivos, no en la ventana del terminal, haga clic con el botón izquierdo o con el botón derecho en su archivo hello.c (el que se encuentra en el directorio pset1) y haga clic en Descargar. Deberías encontrar que el navegador ha cargado hello.c.
      3. Repita para el agua.c.
      4. Repita para mario.c.
      5. Repita para codiciosos.c.
      6. En una pestaña o ventana separada, inicie sesión en CS50 Enviar .
      7. Haga clic en Enviar en la esquina inferior izquierda de la ventana.
      8. En Conjunto de problemas 1 en la ventana que aparece, haga clic en Cargar nuevo envío.
      9. En la ventana que aparece, haga clic en Agregar archivos…. Debería aparecer una ventana llamada Abrir archivos.
      10. Navegue hasta la ubicación donde se descarga hello.c. Generalmente se encuentra en la carpeta Descargas o en la carpeta que tiene asignada por defecto para descargas. Una vez que encuentre hello.c, haga clic en él una vez para marcarlo y luego haga clic en Abrir.
      11. Haga clic en Agregar archivos... nuevamente y aparecerá nuevamente la ventana Abrir archivos.
      12. Ahora busque el archivo water.c de la misma manera. Haga clic en él, luego haga clic en Abrir (o "Abrir").
      13. Ahora busca mario.c. Y también hacer clic y abrir de la misma forma.
      14. Todo es igual con el archivo greedy.c.
      15. Haga clic en Iniciar carga para comenzar a cargar sus archivos en los servidores CS50.
      16. En la pantalla que aparece, verá una ventana denominada No hay archivo seleccionado. Si mueve el cursor del mouse hacia el lado izquierdo de la pantalla, verá una lista de archivos que ha descargado. Haga clic en cada uno para confirmar el contenido de cada uno. (No es necesario hacer clic en otros botones o iconos). Si está seguro de que está listo para enviar el archivo para su verificación, ¡considere que ya terminó! Si desea verificar su código nuevamente usted mismo o arreglar algo, regrese a Envío CS50 y repita estos pasos. Puedes reenviar tantas veces como quieras; Sólo se evaluará la presentación más reciente.
  3. Paso 2 de 2 (no es necesario para la evaluación, si es así =))

    Ahora vaya a https://www.edx.org/course/cs50s-introduction-computer-science-harvardx-cs50x donde encontrará formularios especiales. En ellos, debe responder varias preguntas teóricas y luego hacer clic en Enviar debajo de ellas.

Las preguntas con asteriscos son obligatorias:
  • ¡Muy bien, debería haberlo visto venir! En unas pocas frases, ¿qué es una biblioteca? * (Describe brevemente qué es una biblioteca)
  • En unas pocas frases, ¿qué papel juega #include <cs50.h> cuando lo escribes encima de algún programa? *(¿Cuál es la función de la línea #include <cs50.h> que aparece en la parte superior de algunos programas?)
  • ¿Aproximadamente cuántas horas diría que dedicó al Conjunto de problemas 0: Scratch?
  • ¿Aproximadamente cuántas horas diría que dedicó a la Serie de problemas 1: C?
  • ¿Cuál es su opinión sobre el CS50x hasta el momento? *(Tu opinión sobre el CS50 en este momento, elige la opción me gusta o no me gusta)
  • ¿Ha pedido ayuda a sus compañeros o al personal a través del grupo de Facebook de CS50 en http://www.facebook.com/groups/cs50? *(¿has pedido ayuda a otros estudiantes o asistentes en el grupo de facebook?)
  • ¿Ha pedido ayuda a sus compañeros de clase o al personal a través del subreddit de CS50s en http://www.reddit.com/r/cs50 *(ha pedido ayuda a otros estudiantes o asistentes a través del subreddit)?
  • ¿Ha pedido ayuda a sus compañeros o al personal a través de Twitter usando @cs50 o #cs50? *(¿ha pedido ayuda a otros estudiantes o asistentes técnicos en Twitter usando @cs50 o #cs50)?
Amigos, si tienen alguna pregunta, escríbanla en los comentarios debajo de esta guía. Si no has alcanzado el nivel 5 de JavaRush para recibir una invitación a info, te recomendamos que lo hagas. Es gratis, interesante y no muy difícil.

Recurso de código:

  1. Conferencia tres

    http://cdn.cs50.net/2015/fall/lectures/1/w/src1w.zip

  2. Conferencia cuatro

    http://cdn.cs50.net/2015/fall/lectures/1/f/src1f.zip

    http://cdn.cs50.net/2015/fall/lectures/1/f/src1f/

literatura adicional

http://cpp.com.ru/kr_cbook : versión rusa del libro clásico sobre C de los autores del idioma: Brian Kernighan y Dennis Ritchie. Ampliamente conocido en círculos reducidos como K&R. La traducción, sin embargo, no es de la edición más reciente. Lea los primeros tres capítulos. Habrá un poco más de material del necesario, pero suficiente para solucionar problemas. https://computer.howstuffworks.com/c.htm es un recurso recomendado por los autores de CS50. En Inglés. Página 1-7, 9 y 10.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION