JavaRush /Java Blog /Random-IT /Harvard CS50: Compiti della settimana 1 (lezioni 3 e 4)
Masha
Livello 41

Harvard CS50: Compiti della settimana 1 (lezioni 3 e 4)

Pubblicato nel gruppo Random-IT
Harvard CS50: Compiti della settimana 1 (lezioni 3 e 4) - 1Amici, dagli appunti del seminario potrete ricavare le informazioni teoriche di base . Lì, oltre alle nozioni di base di C, descrive come connettersi a uno speciale IDE cloud CS50 (questo deve essere fatto per eseguire e controllare le attività) e descrive i comandi Linux e le strutture del linguaggio di base necessarie. Se non trovi abbastanza materiale sul C nella lezione e negli appunti, rivolgiti ad altre fonti. Ad esempio, quelli elencati alla fine di questo articolo. Nell'argomento " Materiali aggiuntivi "
  • Obiettivi della prima settimana
  • IDE CS50
  • Aggiornamento della riga di comando e del workbench
  • Lavorare nell'IDE
  • Ciao C!
  • Bug?
  • Controllo di convalida: test check50
  • Nozioni di base su C: confronto con Scratch
  • Tipi di dati di base in C
  • Biblioteche C
  • Ancora Ciao C: analisi della sintassi dei programmi più semplici
  • Qualcosa in più sull'I/O in C
Materiali in questo argomento:
  • Inserimento dati validati: funzioni speciali della libreria cs50.h
  • Compito 1. Calcolo intelligente del consumo di acqua
  • Compito 2. Mario è con noi!
  • Attività 3. È ora di cambiare
  • Come convalidare il tuo codice e ottenere voti
  • Risorsa codice
  • letteratura aggiuntiva

Inserimento dati validati: funzioni speciali della libreria cs50.h

Per rendere questo corso più conveniente, abbiamo sviluppato una speciale libreria CS50 che, in particolare, dispone di funzioni molto utili per l'elaborazione dei dati immessi dall'utente.
  • GetString()legge la stringa inserita dall'utente;

  • GetInt()legge la stringa inserita dall'utente e controlla se contiene un numero intero;

  • GetFloat()legge la stringa inserita dall'utente e controlla se contiene un numero in virgola mobile;

  • GetLongLong()legge la stringa inserita dall'utente e controlla se contiene un numero reale lungo.

Compito 1. Calcolo intelligente del consumo di acqua

Harvard CS50: Compiti della settimana 1 (lezioni 3 e 4) - 2È logico: più a lungo fai la doccia, più acqua viene spesa per questo processo. Scopriamo quanto? Anche se la doccia è appena aperta, ne escono circa 6 litri d'acqua al minuto. E queste sono 12 bottiglie d'acqua che porti con te da bere. Di solito una persona fa la doccia per circa 10 minuti, in totale per lavarsi sono necessarie 120 bottiglie da mezzo litro. Parecchio! Crea un file water.cnel tuo file ~/workspace/pset1. Il programma dovrebbe contare quante bottiglie d'acqua vengono utilizzate per la doccia a seconda dell'orario. Questo è:
  1. Il programma chiede all'utente il numero di minuti trascorsi sotto la doccia
  2. L'utente inserisce un numero intero positivo
  3. Il programma visualizza il numero di bottiglie utilizzate dall'utente.
username:~/workspace/pset1 $ ./water
minutes: 10
bottles: 120
Per semplicità questa volta supponiamo che l'utente inserisca sempre correttamente il numero di minuti, cioè non controlliamo se il numero inserito è positivo e intero. Più tardi impareremo come scrivere gli assegni, ma per ora questo è sufficiente. Per verificare che il programma funzioni correttamente check50,è necessario inserire nel terminale la seguente riga:
check50 2015.fall.pset1.water water.c
E se vuoi vedere come waterfunziona il programma scritto dallo staff del corso, esegui il seguente comando:
~cs50/pset1/water

Compito 2. Mario è con noi!

Harvard CS50: Compiti della settimana 1 (lezioni 3 e 4) - 3Conosci l'idraulico più famoso del mondo? Con l'aiuto di Nintendo, il ragazzo immaginario baffuto e leggermente grassoccio con un berretto rosso è diventato un eroe per diverse generazioni di giocatori. Se non sai di chi stiamo parlando, ecco un link al classico gioco del 1985 : fidati di me, è ancora bello e vale la pena provarlo! Puoi trovare anche una versione del classico Super Mario per smartphone o emulatori offline. Abbiamo bisogno di tutto questo per lo sviluppo generale, questo purtroppo non è ancora un compito ;). E il compito è questo. Alla fine del primo livello di Mario, ogni giocatore ha visto questa mezza piramide: crea un file mario.cnel tuo file ~/workspace/pset1. Il nostro programma disegnerà una mezza piramide simile a quella che vedi, ma direttamente nella console, senza grafica: ognuno dei blocchi sarà composto da un'icona cancelletto (#). Anche se non hai ancora capito come fare, credimi: è facile. Per rendere il problema più interessante, aggiungiamo la possibilità di impostare l'altezza della semipiramide utilizzando un numero intero non negativo compreso tra 0 e 23. L'altezza della piramide nell'immagine è considerata nel punto più alto, cioè uguale a 8. Se l'utente inserisce il numero in modo errato, è necessario chiedergli di farlo nuovamente. Quindi genera (usando printf una piramide). Fai attenzione ad allineare l'angolo inferiore sinistro della tua semipiramide con il bordo sinistro della finestra del terminale, come nell'esempio seguente. Il testo sottolineato è ciò che l'utente inserisce personalmente.
username:~/workspace/pset1 $ ./mario

height: 8
       ##
      ###
     ####
    #####
   ######
  #######
 ########
#########
Notare che le due colonne più a destra hanno la stessa altezza. Non vale ancora la pena generare tubi, nuvole e Mario stesso =). Almeno per questo compito. Se l'utente ha inserito dati errati (non ha inserito un numero, oppure ha inserito un numero inferiore a uno o maggiore di 23), il programma dovrebbe chiedergli di inserire nuovamente i dati, come nell'esempio seguente, dove il testo sottolineato è ciò che l'utente ha inserito dalla tastiera. Per leggere la stringa inserita, utilizzare GetInt. Può aiutare a verificare la presenza di input errati, ma non in tutti i casi.
username:~/workspace/pset1 $ ./mario
Height: -2
Height: -1
Height: foo
Retry: bar
Retry: 1
##
Per compilare il programma inserire nel terminale la riga:
make mario
o una versione più trasparente ma più lunga:
clang -o mario mario.c -lcs50
Successivamente, esegui il programma per l'esecuzione:
./mario
Se vuoi verificare che il programma funzioni correttamente, esegui check50:
check50 2015.fall.pset1.mario mario.c
E se vuoi giocare con la versione di Mario degli assistenti di corso, digita la seguente riga:
~cs50/pset1/mario

Attività 3. È ora di cambiare

Harvard CS50: Compiti della settimana 1 (lezioni 3 e 4) - 4Alle nostre latitudini non l'abbiamo visto, ma negli Stati Uniti, a quanto pare, esiste un giocattolo del genere, mostrato nella foto: i cilindri sono progettati per monete di diversi diametri (e tagli), vengono rilasciati da un meccanismo a molla e l'unità stessa può essere attaccata alla cintura di un cassiere bambino. Ma cosa succede se qualcuno paga la cassiera con una banconota salata? Immagina quanti problemi sarà contare le monete per il resto. Per ridurre al minimo il numero di monete emesse, è possibile utilizzare i cosiddetti algoritmi “greedy”. Essi, come definito dal National Institute of Standards and Technology (NIST), trovano sempre la soluzione ottimale in ogni fase della risoluzione di un problema, presupponendo che anche la soluzione finale (ottenuta dalla totalità di tali passaggi) sarà ottimale. Cosa significa? Immaginiamo che un cassiere debba a un cliente 41 centesimi di resto e abbia sulla cintura cilindri di monete per il resto in tagli da 25, 10, 5 e 1 centesimo. Un cassiere guidato da un algoritmo “avido” vorrà subito dare il massimo già al primo passaggio. A questo punto la soluzione ottimale sarebbe quella di donare 25 pence. 41-25 = 16, 16 pence rimasti da pagare. Ovviamente 25 pence sono troppi, quindi rimangono 10. 16-10 = 6. Ora distribuiamo 5 pence secondo lo stesso principio, e poi 1. Pertanto, l'acquirente riceverà solo quattro monete in valori da 25, 10 , 5 e 1 pence. Si scopre che le "avide" istruzioni passo passo per l'emissione di denaro sono ottimali non solo per questo caso, ma anche per le denominazioni valutarie statunitensi (e anche dell'Unione Europea). Cioè, se il cassiere ha abbastanza monete di qualsiasi denominazione, l'algoritmo funzionerà meglio, cioè emetterà il numero minimo di monete da tutti i casi possibili. Allora, qual è il numero minimo di monete di cui abbiamo bisogno per dare il resto? Questo è il nostro terzo compito. Crea un file greedy.cnella tua directory ~/workspace/pset1. Dato: monete nei tagli da 25, 10, 5, 1 centesimo Il programma dovrà:
  1. Chiedere all'utente quanto resto distribuire
  2. Calcola il numero minimo di monete con cui puoi farlo
Nota:Utilizzeremo una funzione GetFloatdella libreria CS50 per l'input e printfdella libreria I/O standard per l'output. Inoltre, il programma deve verificare la correttezza dell'input. Abbiamo chiesto di utilizzare GetFloat, per permettere all'utente di inserire un valore in dollari e centesimi separato da un punto. Ad esempio, se dobbiamo $ 9,75, l'utente deve inserire 9,75, ma non $ 9,75 o 975. È necessario assicurarsi che l'utente inserisca un numero sensato. GetFloatDiciamo non negativo; la funzione stessa non aiuterà in questo . Se l'utente effettua un input errato, è necessario chiedergli di ripeterlo ed eseguire il programma solo con i dati corretti. Attenzione alle imprecisioni inerenti ai numeri in virgola mobile. Ad esempio, 0,01 non può essere rappresentato direttamente come float. Prova a utilizzare un output formattato, ad esempio con 50 cifre decimali, utilizzando il codice seguente:
float f = 0.01;
printf("%.50f\n", f);
A proposito, prima di contare qualsiasi cosa, sarebbe logico convertire l'intero importo in centesimi (e allo stesso tempo convertirlo da floata int), il che aiuterà ad evitare molti errori e difficoltà. Per garantire che il nostro analizzatore automatico di codice possa verificare correttamente il tuo problema, assicurati che l'ultima riga dell'output del tuo programma non contenga altre informazioni oltre al numero minimo di monete: un numero intero seguito da \n (chi impara JavaRush sanno bene di cosa stiamo parlando =)). Di seguito è riportato un esempio di come dovrebbe apparire il risultato del tuo programma.
username:~/workspace/pset1 $ ./greedy
O hai! How much change is owed?
0.41
4
Data la natura dei numeri in virgola mobile, è possibile ignorare lo zero e inserire tale numero nella forma .41. Naturalmente, gli utenti che desiderano verificare la possibilità di inserire dati errati per intero nel programma dovrebbero vedere qualcosa del tipo:
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
In base a questi requisiti e all'esempio che hai visto sopra, molto probabilmente il tuo codice dovrebbe contenere qualche tipo di loop. Se, testando l'applicazione, vi accorgete che il ciclo non si ferma, potete interrompere l'esecuzione del programma con la combinazione ctrl-c (a volte più volte). Sai già come compilare ed eseguire un programma. Se vuoi verificare se il tuo programma funziona correttamente, utilizzando l'utility check50, inserisci la seguente riga nel terminale:
check50 2015.fall.pset1.greedy greedy.c
E se vuoi giocare con questo programma realizzato dagli assistenti del corso, scrivi il seguente comando:
~cs50/pset1/greedy

Come convalidare il tuo codice e ottenere voti

  1. opzione 1

    Se per te è importante verificare la correttezza del codice e non ottenere un voto finale, puoi verificarlo e correggerlo utilizzando il comando.

    check50 2015.fall.pset1.name name.c

    inserito nella riga terminale del CS50 IDE? dove nameè il nome del file delle attività.

  2. opzione 2

    Se vuoi ottenere dei voti (essenzialmente come eseguire check50, ma ricordando il risultato e compilando alcuni moduli in inglese), segui questi passaggi:

    • Passaggio 1 di 2

      1. Quando le applicazioni sono pronte, accedere all'IDE CS50.
      2. Nell'angolo in alto a sinistra dell'IDE CS50, all'interno del browser dei file, non nella finestra del terminale, fare clic con il pulsante sinistro o destro del mouse sul file hello.c (quello situato nella directory pset1) e fare clic su Scarica. Dovresti scoprire che il browser ha caricato hello.c.
      3. Ripetere per l'acqua.c.
      4. Ripeti per mario.c.
      5. Ripetere per avido.c.
      6. In una scheda o finestra separata, accedi a CS50 Submit .
      7. Fare clic su Invia nell'angolo inferiore sinistro della finestra.
      8. Sotto Serie di problemi 1 nella finestra visualizzata, fai clic su Carica nuovo invio.
      9. Nella finestra visualizzata, fare clic su Aggiungi file…. Dovrebbe apparire una finestra chiamata Apri file.
      10. Passare alla posizione in cui viene scaricato hello.c. Di solito si trova nella cartella Download o nella cartella che ti viene assegnata per impostazione predefinita per i download. Una volta trovato hello.c, fai clic una volta su di esso per contrassegnarlo, quindi fai clic su Apri.
      11. Fare nuovamente clic su Aggiungi file... e verrà nuovamente visualizzata la finestra Apri file.
      12. Ora trova il file water.c allo stesso modo. Fare clic su di esso, quindi fare clic su Apri (o "Apri").
      13. Ora trova mario.c. E anche fare clic e aprire allo stesso modo.
      14. È tutto uguale con il file greedy.c.
      15. Fare clic su Avvia caricamento per iniziare a caricare i file sui server CS50.
      16. Nella schermata che appare, vedrai una finestra denominata Nessun file selezionato. Se sposti il ​​cursore del mouse sul lato sinistro dello schermo, vedrai un elenco di file che hai scaricato. Fare clic su ciascuno per confermarne il contenuto. (Non è necessario fare clic su altri pulsanti o icone). Se sei sicuro di essere pronto per inviare il file per la verifica, considera di aver finito! Se desideri verificare di nuovo il codice o correggere qualcosa, torna a Invia CS50 e ripeti questi passaggi. Puoi inviare nuovamente quante volte vuoi; Verrà valutata solo la presentazione più recente.
  3. Passaggio 2 di 2 (non è necessario per la valutazione, se così =))

    Ora vai su https://www.edx.org/course/cs50s-introduction-computer-science-harvardx-cs50x dove troverai moduli speciali. In essi devi rispondere a diverse domande teoriche, quindi fare clic su Invia sotto di esse.

Le domande con asterischi sono obbligatorie:
  • Va bene, avrei dovuto prevederlo arrivare! In poche frasi, cos'è una biblioteca? * (Descrivi brevemente cos'è una biblioteca)
  • In poche frasi, che ruolo #include <cs50.h> gioca quando lo scrivi sopra un programma? *(qual è il ruolo della riga #include <cs50.h> che appare nella parte superiore di alcuni programmi?)
  • Quante ore diresti di aver dedicato al set di problemi 0: Scratch?
  • Quante ore diresti di aver dedicato alla serie di problemi 1: C?
  • Qual è la tua opinione del CS50x finora? *(La tua opinione attuale sul CS50, scegli l'opzione mi piace o non mi piace)
  • Hai chiesto aiuto ai compagni di classe o allo staff tramite il gruppo Facebook di CS50 all'indirizzo http://www.facebook.com/groups/cs50? *(hai chiesto aiuto ad altri studenti o assistenti nel gruppo Facebook)
  • Hai chiesto aiuto ai compagni di classe o allo staff tramite il subreddit di CS50 all'indirizzo http://www.reddit.com/r/cs50 *(hai chiesto aiuto ad altri studenti o assistenti tramite il subreddit)
  • Hai chiesto aiuto ai compagni di classe o allo staff tramite Twitter utilizzando @cs50 o #cs50? *(hai chiesto aiuto ad altri studenti o assistenti tecnici su Twitter utilizzando @cs50 o #cs50).
Amici, se avete domande, scrivetele nei commenti sotto questa guida. Se non hai raggiunto il livello 5 di JavaRush per ricevere un invito alle informazioni, ti consigliamo di farlo. È gratuito, interessante e non molto difficile.

Risorsa codice:

  1. Lezione tre

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

  2. Lezione quattro

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

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

letteratura aggiuntiva

http://cpp.com.ru/kr_cbook - Versione russa del classico libro su C degli autori del linguaggio - Brian Kernighan e Dennis Ritchie. Ampiamente conosciuto in ambienti ristretti come K&R. La traduzione, tuttavia, non è dell'edizione più recente. Leggi i primi tre capitoli. Ci sarà un po' più materiale del necessario, ma abbastanza per risolvere i problemi. https://computer.howstuffworks.com/c.htm è una risorsa consigliata dagli autori di CS50. In inglese. Pagina 1-7, 9 e 10.
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION