JavaRush /Java-Blog /Random-DE /Harvard CS50: Aufgaben der Woche 1 (Vorlesungen 3 und 4)
Masha
Level 41

Harvard CS50: Aufgaben der Woche 1 (Vorlesungen 3 und 4)

Veröffentlicht in der Gruppe Random-DE
Harvard CS50: Aufgaben der Woche 1 (Vorlesungen 3 und 4) – 1Freunde, grundlegende theoretische Informationen könnt ihr den Seminarunterlagen entnehmen . Dort wird neben den Grundlagen von C auch die Verbindung zu einer speziellen Cloud-IDE CS50 beschrieben (dies muss zum Ausführen und Überprüfen von Aufgaben erfolgen) und die grundsätzlich notwendigen Linux-Befehle und Sprachstrukturen beschrieben. Wenn Sie in der Vorlesung und den Notizen nicht genügend Material zu C finden, wenden Sie sich an andere Quellen. Zum Beispiel die am Ende dieses Artikels aufgeführten. Im Thema „ Zusätzliche Materialien
  • Ziele für die erste Woche
  • IDE CS50
  • Befehlszeilen- und Workbench-Update
  • Arbeiten in der IDE
  • Hallo c!
  • Käfer?
  • Validierungsprüfung: check50-Test
  • C-Grundlagen: Vergleich mit Scratch
  • Grundlegende Datentypen in C
  • Bibliotheken C
  • Hallo nochmal C: Analyse der Syntax der einfachsten Programme
  • Etwas mehr über I/O in C
Materialien zu diesem Thema:
  • Validierte Dateneingabe: Sonderfunktionen der cs50.h-Bibliothek
  • Aufgabe 1. Intelligente Berechnung des Wasserverbrauchs
  • Aufgabe 2. Mario ist bei uns!
  • Aufgabe 3. Zeit für Veränderung
  • So validieren Sie Ihren Code und erhalten Noten
  • Coderessource
  • weitere Literatur

Validierte Dateneingabe: Sonderfunktionen der cs50.h-Bibliothek

Um diesen Kurs komfortabler zu gestalten, haben wir eine spezielle Bibliothek CS50 entwickelt, die insbesondere über sehr nützliche Funktionen zur Verarbeitung von Benutzerdaten verfügt.
  • GetString()liest die vom Benutzer eingegebene Zeichenfolge;

  • GetInt()liest die vom Benutzer eingegebene Zeichenfolge und prüft, ob sie eine Ganzzahl enthält;

  • GetFloat()liest die vom Benutzer eingegebene Zeichenfolge und prüft, ob sie eine Gleitkommazahl enthält;

  • GetLongLong()liest die vom Benutzer eingegebene Zeichenfolge und prüft, ob sie eine lange reelle Zahl enthält.

Aufgabe 1. Intelligente Berechnung des Wasserverbrauchs

Harvard CS50: Aufgaben der Woche 1 (Vorlesungen 3 und 4) – 2Das ist logisch: Je länger man duscht, desto mehr Wasser wird für diesen Vorgang aufgewendet. Lassen Sie uns herausfinden, wie viel? Selbst wenn Ihre Dusche kaum geöffnet ist, fließen pro Minute etwa 6 Liter Wasser aus ihr heraus. Und das sind 12 Flaschen Wasser, die Sie zum Trinken bei sich tragen. Normalerweise duscht eine Person etwa 10 Minuten lang. Insgesamt benötigt man zum Waschen 120 Halbliterflaschen. Ziemlich viel! Erstellen Sie eine Datei water.cin Ihrem ~/workspace/pset1. Das Programm soll zählen, wie viele Flaschen Wasser je nach Zeit zum Duschen verbraucht werden. Also:
  1. Das Programm fragt den Benutzer nach der Anzahl der Minuten, die er unter der Dusche verbracht hat
  2. Der Benutzer gibt eine positive Ganzzahl ein
  3. Das Programm zeigt die Anzahl der vom Benutzer verwendeten Flaschen an.
username:~/workspace/pset1 $ ./water
minutes: 10
bottles: 120
Der Einfachheit halber gehen wir dieses Mal davon aus, dass der Benutzer die Anzahl der Minuten immer korrekt eingibt, d. h. wir prüfen nicht, ob die eingegebene Zahl positiv und ganzzahlig ist. Später werden wir lernen, wie man Schecks ausstellt, aber das reicht für den Moment. Um zu überprüfen, ob das Programm ordnungsgemäß ausgeführt wird, check50,müssen Sie im Terminal die folgende Zeile eingeben:
check50 2015.fall.pset1.water water.c
Und wenn Sie sehen möchten, wie das watervon den Kursmitarbeitern geschriebene Programm funktioniert, führen Sie den folgenden Befehl aus:
~cs50/pset1/water

Aufgabe 2. Mario ist bei uns!

Harvard CS50: Aufgaben der Woche 1 (Vorlesungen 3 und 4) – 3Kennen Sie den berühmtesten Klempner der Welt? Mit Hilfe von Nintendo ist der fiktive schnauzbärtige und leicht rundliche Typ mit der roten Mütze für mehrere Generationen von Spielern zum Helden geworden. Wenn Sie nicht wissen, von wem wir sprechen, finden Sie hier einen Link zum klassischen Spiel von 1985 : Vertrauen Sie mir, es ist immer noch gut und einen Besuch wert! Sie können auch eine Version des klassischen Super Mario für Smartphones oder Offline-Emulatoren finden. Wir brauchen das alles für die allgemeine Entwicklung, das ist leider noch keine Aufgabe ;). Und die Aufgabe ist diese. Am Ende des ersten Mario-Levels sah jeder Spieler diese Halbpyramide: Erstellen Sie eine Datei mario.cin Ihrem ~/workspace/pset1. Unser Programm zeichnet eine Halbpyramide ähnlich der, die Sie sehen, jedoch direkt in der Konsole, ohne Grafiken: Jeder der Blöcke besteht aus einem Raute-Symbol (#). Auch wenn Sie noch nicht herausgefunden haben, wie es geht, glauben Sie mir: Es ist einfach. Um das Problem interessanter zu machen, fügen wir ihm die Möglichkeit hinzu, die Höhe der Halbpyramide mithilfe einer nicht negativen ganzen Zahl von 0 bis 23 festzulegen. Die Höhe der Pyramide im Bild wird als die höchste Stelle betrachtet. also gleich 8. Wenn der Benutzer die Zahl falsch eingibt, müssen Sie ihn bitten, dies noch einmal zu tun. Dann generieren Sie (mit printf eine Pyramide). Achten Sie darauf, die untere linke Ecke Ihrer Halbpyramide am linken Rand des Terminalfensters auszurichten, wie im Beispiel unten. Der unterstrichene Text ist der, den der Benutzer selbst eingibt.
username:~/workspace/pset1 $ ./mario

height: 8
       ##
      ###
     ####
    #####
   ######
  #######
 ########
#########
Beachten Sie, dass die beiden Spalten ganz rechts die gleiche Höhe haben. Es lohnt sich noch nicht, Rohre, Wolken und Mario selbst zu erzeugen =). Zumindest für diese Aufgabe. Wenn der Benutzer falsche Daten eingegeben hat (keine Zahl eingegeben hat oder eine Zahl kleiner als eins oder größer als 23 eingegeben hat), sollte das Programm ihn auffordern, die Daten erneut einzugeben, wie im Beispiel unten, wo der unterstrichene Text „was“ ist Der Benutzer hat über die Tastatur eingegeben. Um die eingegebene Zeichenfolge zu lesen, verwenden Sie GetInt. Es kann bei der Überprüfung auf falsche Eingaben hilfreich sein, jedoch nicht in allen Fällen.
username:~/workspace/pset1 $ ./mario
Height: -2
Height: -1
Height: foo
Retry: bar
Retry: 1
##
Um das Programm zu kompilieren, geben Sie im Terminal die Zeile ein:
make mario
oder eine transparentere, aber längere Version:
clang -o mario mario.c -lcs50
Führen Sie anschließend das Programm zur Ausführung aus:
./mario
Wenn Sie überprüfen möchten, ob das Programm ordnungsgemäß ausgeführt wird, führen Sie Folgendes aus check50:
check50 2015.fall.pset1.mario mario.c
Und wenn Sie mit der Mario-Version der Kursassistenten spielen möchten, geben Sie die folgende Zeile ein:
~cs50/pset1/mario

Aufgabe 3. Zeit für Veränderung

Harvard CS50: Aufgaben der Woche 1 (Vorlesungen 3 und 4) – 4In unseren Breitengraden haben wir das noch nicht gesehen, aber in den USA scheint es so ein Spielzeug zu geben, wie auf dem Foto zu sehen: Die Zylinder sind für Münzen unterschiedlichen Durchmessers (und Nennwertes) ausgelegt, sie werden durch einen Federmechanismus freigegeben , und die Einheit selbst kann am Gürtel einer Kinderkassiererin befestigt werden. Was passiert jedoch, wenn jemand mit einer großen Rechnung an der Kasse bezahlt? Stellen Sie sich vor, wie mühsam es sein wird, Münzen als Wechselgeld zu zählen. Um die Anzahl der ausgegebenen Coins zu minimieren, können Sie sogenannte „Greedy“-Algorithmen verwenden. Gemäß der Definition des National Institute of Standards and Technology (NIST) finden sie bei jedem Schritt der Lösung eines Problems immer die optimale Lösung, vorausgesetzt, dass die endgültige Lösung (die sich aus der Gesamtheit dieser Schritte ergibt) ebenfalls optimal ist. Was bedeutet das? Stellen wir uns vor, dass ein Kassierer einem Kunden 41 Cent Wechselgeld schuldet und er Zylinder mit Münzen im Nennwert von 25, 10, 5 und 1 Cent an seinem Gürtel hat. Ein Kassierer, der sich an einem „gierigen“ Algorithmus orientiert, wird gleich im ersten Schritt sofort das Maximum ausgeben wollen. Zu diesem Zeitpunkt wäre die optimale oder beste Lösung, 25 Pence auszugeben. 41-25 = 16. Es verbleiben noch 16 Pence zur Auszahlung. Offensichtlich sind 25 Pence zu viel, sodass 10 übrig bleiben. 16-10 = 6. Jetzt geben wir nach dem gleichen Prinzip 5 Pence aus und dann 1. Somit erhält der Käufer nur vier Münzen im Wert von 25, 10 , 5 und 1 Pence. Es stellt sich heraus, dass die „gierigen“ Schritt-für-Schritt-Anleitungen zur Geldausgabe nicht nur für diesen Fall, sondern auch für US-Währungsbezeichnungen (und auch für die Europäische Union) optimal sind. Das heißt, wenn der Kassierer über genügend Münzen jeglichen Nennwerts verfügt, funktioniert der Algorithmus am besten, d. h. er gibt aus allen möglichen Fällen die Mindestanzahl an Münzen aus. Wie viele Münzen müssen wir also mindestens als Wechselgeld ausgeben? Das ist unsere dritte Aufgabe. Erstellen Sie eine Datei greedy.cin Ihrem Verzeichnis ~/workspace/pset1. Gegeben: Münzen im Wert von 25, 10, 5, 1 Cent Das Programm sollte:
  1. Fragen Sie den Benutzer, wie viel Wechselgeld er ausgeben soll
  2. Berechnen Sie die Mindestanzahl an Münzen, mit der Sie dies tun können
Notiz:Wir werden eine Funktion GetFloataus der CS50-Bibliothek für die Eingabe und printfaus der Standard-I/O-Bibliothek für die Ausgabe verwenden. Darüber hinaus muss das Programm die Richtigkeit der Eingabe überprüfen. Wir haben Sie gebeten, , zu verwenden GetFloat, damit der Benutzer einen durch einen Punkt getrennten Wert in Dollar und Cent eingeben kann. Wenn wir beispielsweise 9,75 $ schulden, sollte der Benutzer 9,75 eingeben, aber nicht 9,75 $ oder 975. Sie müssen sicherstellen, dass der Benutzer eine sinnvolle Zahl eingibt. Nehmen wir an, nicht negativ; die Funktion selbst wird dabei GetFloatnicht helfen . Wenn der Benutzer eine falsche Eingabe macht, müssen Sie ihn bitten, die Eingabe zu wiederholen und das Programm nur mit den korrekten Daten auszuführen. Achten Sie auf die Ungenauigkeiten, die Gleitkommazahlen mit sich bringen. Beispielsweise kann 0,01 nicht direkt als dargestellt werden float. Versuchen Sie es mit einer formatierten Ausgabe, beispielsweise mit 50 Dezimalstellen, und verwenden Sie dazu den folgenden Code:
float f = 0.01;
printf("%.50f\n", f);
Übrigens wäre es logisch, vor dem Zählen den gesamten Betrag in Cent umzurechnen (und ihn gleichzeitig von in umzurechnen float) int, was viele Fehler und Schwierigkeiten vermeiden hilft. Um sicherzustellen, dass unser automatischer Code-Analysator Ihr Problem korrekt prüfen kann, stellen Sie sicher, dass die letzte Zeile der Ausgabe Ihres Programms keine anderen Informationen als die Mindestanzahl an Münzen enthält: eine Ganzzahl mit einem \n dahinter (für diejenigen, die JavaRush lernen). sind sich durchaus bewusst, worüber wir hier reden =)). Nachfolgend finden Sie ein Beispiel dafür, wie das Ergebnis Ihres Programms aussehen sollte.
username:~/workspace/pset1 $ ./greedy
O hai! How much change is owed?
0.41
4
Aufgrund der Natur von Gleitkommazahlen können Sie die Null ignorieren und eine solche Zahl in der Form .41 eingeben. Natürlich sollten Benutzer, die das Programm auf die Möglichkeit einer vollständigen Eingabe falscher Daten überprüfen möchten, Folgendes sehen:
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
Basierend auf diesen Anforderungen und dem Beispiel, das Sie oben gesehen haben, sollte Ihr Code höchstwahrscheinlich eine Art Schleife enthalten. Wenn Sie beim Testen der Anwendung feststellen, dass die Schleife nicht stoppt, können Sie die Ausführung des Programms mit der Kombination Strg-C (manchmal mehrmals) unterbrechen. Sie wissen bereits, wie man ein Programm kompiliert und ausführt. Wenn Sie mithilfe des Dienstprogramms überprüfen möchten, ob Ihr Programm ordnungsgemäß funktioniert check50, geben Sie die folgende Zeile in das Terminal ein:
check50 2015.fall.pset1.greedy greedy.c
Und wenn Sie mit diesem von Kursassistenten erstellten Programm spielen möchten, schreiben Sie den folgenden Befehl:
~cs50/pset1/greedy

So validieren Sie Ihren Code und erhalten Noten

  1. Variante 1

    Wenn es für Sie wichtig ist, die Richtigkeit des Codes zu überprüfen und keine Abschlussnote zu erhalten, können Sie ihn mit dem Befehl überprüfen und korrigieren.

    check50 2015.fall.pset1.name name.c

    in der Terminalzeile der CS50 IDE eingetragen? Wo nameist der Name Ihrer Aufgabendatei?

  2. Option 2

    Wenn Sie Noten erhalten möchten (im Wesentlichen das Gleiche wie check50, aber mit Merken des Ergebnisses und dem Ausfüllen einiger Formulare auf Englisch), dann befolgen Sie diese Schritte:

    • Schritt 1 von 2

      1. Wenn die Anwendungen bereit sind, melden Sie sich bei der CS50-IDE an.
      2. Klicken Sie in der oberen linken Ecke der CS50-IDE im Dateibrowser (nicht im Terminalfenster) mit der linken oder rechten Maustaste auf Ihre hello.c-Datei (die sich im pset1-Verzeichnis befindet) und klicken Sie auf „Herunterladen“. Sie sollten feststellen, dass der Browser hello.c geladen hat.
      3. Wiederholen Sie den Vorgang für Wasser.c.
      4. Wiederholen Sie dies für mario.c.
      5. Wiederholen Sie dies für greedy.c.
      6. Melden Sie sich in einem separaten Tab oder Fenster bei CS50 Submit an .
      7. Klicken Sie unten links im Fenster auf „Senden“.
      8. Klicken Sie im angezeigten Fenster unter „Problemsatz 1“ auf „Neue Einreichung hochladen“.
      9. Klicken Sie im angezeigten Fenster auf Dateien hinzufügen…. Es sollte ein Fenster namens „Dateien öffnen“ erscheinen.
      10. Navigieren Sie zu dem Speicherort, an dem hello.c heruntergeladen wird. Es befindet sich normalerweise im Ordner „Downloads“ oder in dem Ordner, der Ihnen standardmäßig für Downloads zugewiesen ist. Wenn Sie hello.c gefunden haben, klicken Sie einmal darauf, um es zu markieren, und klicken Sie dann auf Öffnen.
      11. Klicken Sie erneut auf Dateien hinzufügen... und das Fenster „Dateien öffnen“ wird erneut angezeigt.
      12. Suchen Sie nun auf die gleiche Weise die Datei water.c. Klicken Sie darauf und dann auf Öffnen (oder „Öffnen“).
      13. Finden Sie nun mario.c. Und klicken und öffnen Sie auch auf die gleiche Weise.
      14. Mit der Datei greedy.c ist alles beim Alten.
      15. Klicken Sie auf Hochladen starten, um mit dem Hochladen Ihrer Dateien auf die CS50-Server zu beginnen.
      16. Auf dem angezeigten Bildschirm sehen Sie ein Fenster mit der Bezeichnung „Keine Datei ausgewählt“. Wenn Sie den Mauszeiger auf die linke Seite des Bildschirms bewegen, wird eine Liste der heruntergeladenen Dateien angezeigt. Klicken Sie auf die einzelnen Elemente, um deren Inhalt zu bestätigen. (Sie müssen nicht auf andere Schaltflächen oder Symbole klicken.) Wenn Sie sicher sind, dass Sie bereit sind, die Datei zur Überprüfung zu senden, denken Sie daran, dass Sie fertig sind! Wenn Sie Ihren Code noch einmal selbst überprüfen oder etwas beheben möchten, kehren Sie zu CS50 Submit zurück und wiederholen Sie diese Schritte. Sie können es so oft erneut senden, wie Sie möchten. Es wird nur die aktuellste Einreichung bewertet.
  3. Schritt 2 von 2 (ist für die Auswertung nicht erforderlich, wenn das so ist =))

    Gehen Sie nun auf den Link https://www.edx.org/course/cs50s-introduction-computer-science-harvardx-cs50x , wo Sie spezielle Formulare finden. Darin müssen Sie mehrere theoretische Fragen beantworten und dann darunter auf „Senden“ klicken.

Fragen mit Sternchen sind erforderlich:
  • Okay, das hätte ich kommen sehen sollen! In nur wenigen Sätzen: Was ist eine Bibliothek? * (Beschreiben Sie kurz, was eine Bibliothek ist)
  • Welche Rolle spielt es in nur wenigen Sätzen, #include <cs50.h> wenn Sie es über ein Programm schreiben? *(Welche Rolle spielt die Zeile #include <cs50.h>, die oben in einigen Programmen erscheint?)
  • Wie viele Stunden haben Sie Ihrer Meinung nach ungefähr mit Problemsatz 0: Scratch verbracht?
  • Wie viele Stunden haben Sie Ihrer Meinung nach ungefähr mit Problemsatz 1: C verbracht?
  • Was ist Ihre bisherige Meinung zum CS50x? *(Ihre aktuelle Meinung zum CS50, wählen Sie die Option „Gefällt mir“ oder „Gefällt mir nicht“)
  • Haben Sie über die Facebook-Gruppe von CS50 unter http://www.facebook.com/groups/cs50 um Hilfe von Klassenkameraden oder Mitarbeitern gebeten? *(Haben Sie andere Studierende oder Assistenten in der Facebook-Gruppe um Hilfe gebeten)
  • Haben Sie über CS50s Subreddit unter http://www.reddit.com/r/cs50 * um Hilfe von Klassenkameraden oder Mitarbeitern gebeten (haben Sie über Subreddit andere Studenten oder Assistenten um Hilfe gebeten)?
  • Haben Sie über Twitter mit @cs50 oder #cs50 um Hilfe von Klassenkameraden oder Mitarbeitern gebeten? *(Haben Sie andere Studierende oder TAs auf Twitter mit @cs50 oder #cs50 um Hilfe gebeten)?
Freunde, wenn Sie Fragen haben, schreiben Sie diese in die Kommentare unter diesem Leitfaden. Wenn Sie JavaRush Level 5 noch nicht erreicht haben, um eine Einladung zu Informationen zu erhalten, empfehlen wir Ihnen, dies zu tun. Es ist kostenlos, interessant und nicht sehr schwierig.

Coderessource:

  1. Vorlesung drei

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

  2. Vorlesung vier

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

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

weitere Literatur

http://cpp.com.ru/kr_cbook – Russische Version des klassischen Buches über C von den Autoren der Sprache – Brian Kernighan und Dennis Ritchie. In engen Kreisen weithin als K&R bekannt. Die Übersetzung ist jedoch nicht die neueste Ausgabe. Lesen Sie die ersten drei Kapitel. Es wird etwas mehr Material vorhanden sein, als Sie benötigen, aber genug, um Probleme zu lösen. https://computer.howstuffworks.com/c.htm ist eine von den Autoren von CS50 empfohlene Ressource. Auf Englisch. Seite 1-7, 9 und 10.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION