1 00:00:00,000 --> 00:00:00,500 2 00:00:00,500 --> 00:00:01,960 SPEAKER 1: Parliamo di acqua. 3 00:00:01,960 --> 00:00:07,280 In questo problema, chiediamo all'utente di dire noi per quanto tempo in minuti la doccia era 4 00:00:07,280 --> 00:00:11,040 e poi si calcola l'equivalente numero di bottiglie di acqua 5 00:00:11,040 --> 00:00:12,970 che la loro doccia utilizzato. 6 00:00:12,970 --> 00:00:16,379 >> Quindi quali sono le nostre cose da fare di per questo problema? 7 00:00:16,379 --> 00:00:20,050 In primo luogo, stiamo andando a voler per richiedere e quindi validare 8 00:00:20,050 --> 00:00:22,100 l'ingresso che l'utente ci dà. 9 00:00:22,100 --> 00:00:24,790 Una volta che ci assicuriamo che noi avere l'input dell'utente validi, 10 00:00:24,790 --> 00:00:28,230 stiamo andando a calcolare il numero equivalente di bottiglie di acqua 11 00:00:28,230 --> 00:00:30,770 che l'utente aveva durante loro doccia, e poi siamo 12 00:00:30,770 --> 00:00:33,720 andare a dire loro da stampa di tale numero. 13 00:00:33,720 --> 00:00:37,230 >> Quindi cerchiamo di placcaggio nostro primo compito, spingendo e la convalida 14 00:00:37,230 --> 00:00:38,550 l'input dell'utente. 15 00:00:38,550 --> 00:00:40,910 Per questo abbiamo scritto una Funzione per chiamato 16 00:00:40,910 --> 00:00:43,950 get_int situato nella Biblioteca CS50. 17 00:00:43,950 --> 00:00:48,710 get_int assicura che l'input dell'utente un intero, in modo da tutti i numeri positivi, 18 00:00:48,710 --> 00:00:51,700 numeri negativi, o zero sono tutti accettati. 19 00:00:51,700 --> 00:00:55,900 Ma se l'utente immette ogni altra cosa, in modo che qualsiasi combinazione di lettere o numeri 20 00:00:55,900 --> 00:00:59,710 o numeri decimali, allora la all'utente verrà richiesto di riprovare 21 00:00:59,710 --> 00:01:04,319 e la funzione non accetta nulla finché l'utente dà loro un numero intero. 22 00:01:04,319 --> 00:01:06,410 >> Così come usiamo get_int? 23 00:01:06,410 --> 00:01:10,830 Se si apre l'area di lavoro e creare un file denominato integer.c facciamo 24 00:01:10,830 --> 00:01:12,110 digitare la seguente. 25 00:01:12,110 --> 00:01:14,760 Hashtag includono cs50.h. 26 00:01:14,760 --> 00:01:18,480 Questo è necessario perché get_int è una funzione di libreria CS50, 27 00:01:18,480 --> 00:01:21,890 quindi dobbiamo hashtag includono la sua dichiarazione in ordine 28 00:01:21,890 --> 00:01:23,370 utilizzare la funzione. 29 00:01:23,370 --> 00:01:26,570 E poi nel mio principale Funzione i Sto solo andando 30 00:01:26,570 --> 00:01:29,560 chiamare semplicemente la funzione get_int. 31 00:01:29,560 --> 00:01:31,750 >> Così corriamo questo e vedere come funziona. 32 00:01:31,750 --> 00:01:35,092 Ho già compilato, quindi cerchiamo di solo andare avanti ed eseguire questo programma, 33 00:01:35,092 --> 00:01:36,480 ./numero intero. 34 00:01:36,480 --> 00:01:39,880 Qui ho una pronta e qui è dove ho immettere il valore. 35 00:01:39,880 --> 00:01:44,880 Di 'ho messo in appena qualche intero, 50, gli stralci del programma ed esce 36 00:01:44,880 --> 00:01:45,960 e questo è tutto. 37 00:01:45,960 --> 00:01:49,350 >> Ma dico io eseguo di nuovo e I Ingresso qualcos'altro. 38 00:01:49,350 --> 00:01:51,350 Forse, ciao mondo. 39 00:01:51,350 --> 00:01:55,660 Questo non è un numero intero in modo che il programma mi chiederà di riprovare. 40 00:01:55,660 --> 00:01:59,160 Proviamo di nuovo con forse un decimale questa volta. 41 00:01:59,160 --> 00:02:03,450 0,5, di nuovo, non un numero intero così il programma non lo accetterà 42 00:02:03,450 --> 00:02:05,290 e mi dirà per riprovare. 43 00:02:05,290 --> 00:02:07,070 Quindi cerchiamo di dare un altro numero. 44 00:02:07,070 --> 00:02:09,830 Il programma accetta, si chiude, e abbiamo finito. 45 00:02:09,830 --> 00:02:13,520 >> Così ora abbiamo una funzione che ci permette e garantisce 46 00:02:13,520 --> 00:02:16,790 che l'utente immette un intero, ma come possiamo 47 00:02:16,790 --> 00:02:20,330 in realtà tenere traccia del intero immesso dall'utente? 48 00:02:20,330 --> 00:02:25,260 Bene, tutto quello che faremo è negozio questo valore in una variabile, dire n. 49 00:02:25,260 --> 00:02:30,580 Quindi, se io dichiaro un intero n, e ho impostato il valore di get_int, 50 00:02:30,580 --> 00:02:34,700 allora n sarà quindi memorizzare qualunque cosa valorizzare l'utente immesso. 51 00:02:34,700 --> 00:02:38,620 >> Va bene, così ora abbiamo garantito che l'utente ci darà un intero 52 00:02:38,620 --> 00:02:42,550 e sappiamo come tenere traccia del numero intero, ma ricordate, 53 00:02:42,550 --> 00:02:45,610 interi sono sia positivi che negativi. 54 00:02:45,610 --> 00:02:49,110 Quindi in realtà non ha senso nel contesto di questo problema 55 00:02:49,110 --> 00:02:53,570 che l'utente fa una doccia di dire negativi 12 minuti. 56 00:02:53,570 --> 00:02:59,310 Quindi dobbiamo fare in modo che l'utente in realtà ci dà un numero intero positivo. 57 00:02:59,310 --> 00:03:02,130 Ora non abbiamo solo un singola funzione per questo, 58 00:03:02,130 --> 00:03:04,620 così stiamo andando ad avere per creare quel noi stessi. 59 00:03:04,620 --> 00:03:07,190 >> Quindi vogliamo continuamente richiedere all'utente 60 00:03:07,190 --> 00:03:09,730 fino a quando ci danno un numero intero positivo. 61 00:03:09,730 --> 00:03:14,300 Se sto facendo qualcosa di continuamente poi che è simile a un loop, una ripetizione. 62 00:03:14,300 --> 00:03:19,130 Così uno dei costrutti che usiamo in C per implementare la ripetizione e loop 63 00:03:19,130 --> 00:03:20,410 è un ciclo while. 64 00:03:20,410 --> 00:03:23,020 Quindi un ciclo while, come qui illustrato, verrà eseguito 65 00:03:23,020 --> 00:03:27,030 ciò che è nel corpo del ciclo come fino a quando i dati condizione restituisce 66 00:03:27,030 --> 00:03:27,900 true. 67 00:03:27,900 --> 00:03:30,640 Non appena tale condizione FALSE, allora 68 00:03:30,640 --> 00:03:34,830 il programma provvede a qualsiasi viene dopo il corpo del ciclo. 69 00:03:34,830 --> 00:03:39,400 >> Così, mentre i cicli stanno per essere veramente utile in CS50. 70 00:03:39,400 --> 00:03:42,590 Ma in questo particolare caso, sappiamo che siamo 71 00:03:42,590 --> 00:03:48,140 andando a richiedere all'utente almeno una volta e poi solo ciclo se necessario. 72 00:03:48,140 --> 00:03:51,080 Così qui veniamo a un costrutto speciale e che è 73 00:03:51,080 --> 00:03:55,020 molto simile al mentre ciclo chiamato un ciclo do-while. 74 00:03:55,020 --> 00:03:58,840 >> Quindi un ciclo do-while esegue il corpo del ciclo almeno una volta 75 00:03:58,840 --> 00:04:01,750 e poi si controlla per vedere se deve eseguire, 76 00:04:01,750 --> 00:04:05,310 al contrario di un ciclo while, che controllerà la condizione 77 00:04:05,310 --> 00:04:07,200 e quindi eseguire il corpo. 78 00:04:07,200 --> 00:04:11,880 Quindi, in un ciclo do-while che potremmo fare è richiedere all'utente un numero intero, 79 00:04:11,880 --> 00:04:14,450 e quindi controllare se è valido o non è. 80 00:04:14,450 --> 00:04:18,130 Se è valido, poi ci ripetere il processo che richiede all'utente 81 00:04:18,130 --> 00:04:22,290 di darci un altro intero, e poi solo quando tale intero è valida, 82 00:04:22,290 --> 00:04:25,060 continueremo a ciò che viene dopo. 83 00:04:25,060 --> 00:04:28,030 >> Ora si noterà che il dichiarazione del intero n 84 00:04:28,030 --> 00:04:31,670 è un po 'diverso da quello che fatto prima nell'esempio precedente 85 00:04:31,670 --> 00:04:33,640 e questo perché di portata. 86 00:04:33,640 --> 00:04:37,920 Se avessimo dichiarato l'intero n all'interno del corpo del ciclo do-po, 87 00:04:37,920 --> 00:04:42,640 allora non saremmo in grado di accedere tale valore di n al di fuori di quelli ricci 88 00:04:42,640 --> 00:04:45,050 bretelle indicando il corpo del ciclo. 89 00:04:45,050 --> 00:04:51,080 Ma noi in realtà desidera accedere alla valore di n più avanti nel nostro programma. 90 00:04:51,080 --> 00:04:55,730 >> OK, ora parliamo di cosa questa condizione dovrebbe essere. 91 00:04:55,730 --> 00:05:00,400 Noi vogliamo solo il reprompt utente finché n è valido. 92 00:05:00,400 --> 00:05:04,640 Quindi, pensare a te stesso ciò che un invalido valore intero sarebbe simile 93 00:05:04,640 --> 00:05:08,060 e quindi creare un valore booleano espressione per esprimere questo. 94 00:05:08,060 --> 00:05:13,070 >> Abbiamo quasi finito con la nostra attività secondaria di spingendo e validare l'input dell'utente. 95 00:05:13,070 --> 00:05:16,010 Quindi cerchiamo di fare questo un po ' po 'più facile da usare 96 00:05:16,010 --> 00:05:18,390 e dare all'utente un po ' po 'più di informazioni 97 00:05:18,390 --> 00:05:20,510 di ciò che li stiamo spingendo per. 98 00:05:20,510 --> 00:05:24,500 Quindi cerchiamo di indurre l'utente, per la spec, con i verbali di stringa. 99 00:05:24,500 --> 00:05:28,935 Quindi, utilizzando le istruzioni printf, fare Assicurarsi di far corrispondere esattamente questo. 100 00:05:28,935 --> 00:05:30,230 >> Tutto ok. 101 00:05:30,230 --> 00:05:33,840 Così ora abbiamo un utente valido ingresso, un intero positivo 102 00:05:33,840 --> 00:05:37,400 valore per quanti minuti hanno trascorso sotto la doccia. 103 00:05:37,400 --> 00:05:41,300 Allora, qual è il prossimo è quello di calcolare il numero equivalente di bottiglie. 104 00:05:41,300 --> 00:05:45,250 Quello che stiamo andando a fare qui potremmo essere molto evidente a voi in un primo momento, 105 00:05:45,250 --> 00:05:46,640 e va bene così. 106 00:05:46,640 --> 00:05:49,320 Quello che vogliamo fare è noi vogliono iniziare a praticare 107 00:05:49,320 --> 00:05:53,810 l'idea di rilevare modelli e lo sviluppo di formule per il problema. 108 00:05:53,810 --> 00:05:57,200 >> Così ci è stato detto per le specifiche quel minuto nella doccia 109 00:05:57,200 --> 00:05:59,960 è equivalente a circa 12 bottiglie di acqua. 110 00:05:59,960 --> 00:06:03,020 Allora due minuti sarebbe essere equivalente a 24, 111 00:06:03,020 --> 00:06:05,850 e cinque minuti avrebbe equivalente a 60. 112 00:06:05,850 --> 00:06:08,390 Così ora se si pensa ce l'hai, allora facciamo 113 00:06:08,390 --> 00:06:10,390 vedere se si può trovare con un modello o formula 114 00:06:10,390 --> 00:06:14,990 per esprimere se abbiamo dire, n minuti, quante bottiglie di acqua 115 00:06:14,990 --> 00:06:17,930 Vorrei che essere espresso in termini di n? 116 00:06:17,930 --> 00:06:20,680 >> Ancora, anche se questo potrebbe essere semplice a prima, 117 00:06:20,680 --> 00:06:23,240 più tardi, quando si arriva a problemi più complessi 118 00:06:23,240 --> 00:06:26,360 stiamo andando a voler entrare in la pratica di identificare 119 00:06:26,360 --> 00:06:30,120 modelli e formule in via di sviluppo per capire queste cose. 120 00:06:30,120 --> 00:06:33,450 >> In C si ha accesso a operazioni aritmetiche standard, 121 00:06:33,450 --> 00:06:36,520 addizione, sottrazione, moltiplicazione e divisione. 122 00:06:36,520 --> 00:06:38,420 Così Lascio a È ora di capire 123 00:06:38,420 --> 00:06:41,300 come esprimere il numero equivalente di bottiglie 124 00:06:41,300 --> 00:06:43,990 che l'utente consumato durante la loro doccia. 125 00:06:43,990 --> 00:06:45,700 >> Va bene, abbiamo quasi finito. 126 00:06:45,700 --> 00:06:50,650 Abbiamo spinto la utente per il loro contributo, abbiamo assicurato che si tratta di input valido, 127 00:06:50,650 --> 00:06:53,330 e poi abbiamo capito come per calcolare l'equivalente 128 00:06:53,330 --> 00:06:55,480 numero di bottiglie che consumavano. 129 00:06:55,480 --> 00:06:59,430 Quindi l'ultima cosa da fare è quella di uscita il numero equivalente di bottiglie 130 00:06:59,430 --> 00:07:02,410 e si spera di incoraggiare loro di conservare un po 'd'acqua. 131 00:07:02,410 --> 00:07:06,270 >> Emissione il valore sarà essere una dichiarazione printf. 132 00:07:06,270 --> 00:07:09,720 Se volevo dirvi che ho hanno tre animali, per esempio, 133 00:07:09,720 --> 00:07:13,090 Potrei utilizzare un'istruzione printf che sembra qualcosa di simile. 134 00:07:13,090 --> 00:07:15,880 Ho tre animali, e una nuova Linea per la formattazione bello. 135 00:07:15,880 --> 00:07:17,880 >> Ora noi non vogliamo semplicemente cose codice rigido. 136 00:07:17,880 --> 00:07:20,740 Pronunciare il numero della mia animali domestici cambia nel tempo. 137 00:07:20,740 --> 00:07:25,080 Poi ho intenzione di fare uso di segnaposto nella mia dichiarazione printf. 138 00:07:25,080 --> 00:07:27,350 Quindi, ecco il mio numero è un numero intero. 139 00:07:27,350 --> 00:07:31,480 Quindi ho intenzione di fare un segnaposto per un intero utilizzando% i. 140 00:07:31,480 --> 00:07:33,930 Ho intenzione di scrivere la stringa, e quindi dopo la stringa 141 00:07:33,930 --> 00:07:38,000 Scrivo una virgola e quindi il variabile che voglio stampare. 142 00:07:38,000 --> 00:07:42,730 Quindi tale valore verrà stampato in luogo di quella segnaposto,% i. 143 00:07:42,730 --> 00:07:47,630 >> È possibile utilizzare segnaposto, come bene, per carri con% f. 144 00:07:47,630 --> 00:07:50,420 Si può anche avere più segnaposto in una stringa. 145 00:07:50,420 --> 00:07:53,950 Per esempio, se ho qualche numero di cani e qualche numero di gatti, 146 00:07:53,950 --> 00:07:59,210 Ho messo due segnaposto qui e poi i miei due variabili nel rispettivo ordine. 147 00:07:59,210 --> 00:08:03,130 >> Quindi, ora che sappiamo come stampare i valori memorizzati nelle variabili, 148 00:08:03,130 --> 00:08:06,030 l'ultima cosa a fare è quello di garantire che si 149 00:08:06,030 --> 00:08:10,920 stampare il valore nel formato esatto indicato nella specifica. 150 00:08:10,920 --> 00:08:14,990 Con questo, abbiamo spinto la utente e convalidato il loro contributo. 151 00:08:14,990 --> 00:08:17,920 Abbiamo poi calcolato l'equivalente numero di bottiglie di acqua 152 00:08:17,920 --> 00:08:22,100 che consumano durante la loro doccia, e abbiamo emessi che valore per loro. 153 00:08:22,100 --> 00:08:24,440 E così, abbiamo completato l'acqua. 154 00:08:24,440 --> 00:08:28,730 >> Il mio nome è [? Zamila,?] e questo è CS50. 155 00:08:28,730 --> 00:08:29,909