>> [Jouer de la musique]
>> ZAMYLA CHAN: Préférez-vous recevoir 10 millions de dollars tout de suite ou recevoir
penny chaque jour du mois, le cas chaque jour qui suit, vous recevez
doubler la quantité de pièces de monnaie vous reçu la veille?
En quelques centimes, nous allons prouver pourquoi vous devriez
certainement prendre les pièces de monnaie.
Votre travail consiste à écrire pennies.c--
un programme qui demande d'abord à l'utilisateur comment de nombreux jours, il ya dans le mois et
demande alors combien de centimes l'utilisateur recevra le premier jour.
Le programme doit alors calculer la montant que l'utilisateur devra
accumulée à la fin de l' mois et l'afficher.
>> Nous pouvons briser ce programme en place dans un couple de tâches.
Nous aurons besoin pour demander multiples entrées de l'utilisateur -
jours et des mois, et pennies le premier jour.
Nous avons besoin de garder une trace de combien d'argent l'utilisateur doit mettre à jour et à chaque
jour, doubler la quantité de pennies qu'ils reçoivent.
Et enfin, nous imprimons leur total final, en dollars.
>> Disons d'entrée de l'utilisateur tacle premier.
Je vais ouvrir apples.c, programme court qui traite
avec entrées et sorties.
Au sommet ici, j'ai inclus quelques des bibliothèques dont j'ai besoin -
La bibliothèque de CS50 et une norme I / O bibliothèque.
J'imprime une invite utilisant le fonction printf de la
bibliothèque E / S standard.
Mais l'impulsion réelle de l'utilisateur passe à la ligne suivante avec cette
fonction de getInt dans la bibliothèque CS50.
>> GetInt obtient entrée de l'utilisateur et en sorte que l'entrée est un nombre entier.
Alors je stocke l'entrée de l'utilisateur en entier i, il faut soustraire 1 de i, puis
imprimer la nouvelle valeur si i.
Après la compilation apples.c l'aide de la commande "make pommes,« J'ai une
pommes de fichiers exécutables.
Courir, je vais l'entrée 1.
Le programme me dit que J'ai 0 pommes gauche.
Et si ça a fonctionné comme prévu.
>> Donc, nous allons courir ce message et entrée négative 1.
Maintenant, avec un montant négatif de pommes n'a pas vraiment de sens, mais
le programme l'accepte, parce que le négatif 1, eh bien, c'est un entier.
Et maintenant, le programme ou le monstre à l'intérieur du programme mange un négatif
Apple, et maintenant je dois négatifs 2 pommes.
Hm, c'est donc une leçon -
même si la fonction de getInt et fonctions connexes, comme GetFlow ou
GetString obtenir le bon type de donnée, vous doivent s'assurer que l'entrée fait
sens de votre programme.
>> En quelques centimes, il ne fera pas juste une invite pour un entier, vous aurez besoin de faire
Vérifiez que l'utilisateur saisit une entières ce logique compte tenu du contexte.
Mois ne peut avoir que 28, 29, 30, ou 31 jours.
Nous voulons demander continuellement un entier valide.
S'ils entrée un entier hors de notre limites admises, nous allons les inciter
encore et encore, jusqu'à ce que vous nous donner un entier valide.
>> Rappelez-vous la "répétition jusqu'à ce que« bloquer à zéro?
Vous pouvez faire une construction similaire en C en utilisant une boucle "while"
ou "faire tout-« boucle.
La structure de la boucle while a une condition qui doivent être remplies pour que le
corps de la boucle à exécuter.
>> Cela devrait regarder un peu similaire, parce que la condition est tout comme la
blocs de zéro avec les angles et va dans les supports
de la boucle "while".
Donc, cette condition va vérifier si le nombre entier est au sein de
les limites appropriées.
Vous pouvez demander à l'entier en utilisant getInt puis exécutez votre "while"
boucle, en répétant le message et l'impression des instructions, tandis que l'entrée
n'est pas valide.
>> Une autre façon d'assurer l'entrée d'utilisateur correct est d'utiliser un "do-while" boucle,
qui est très semblable à une boucle While.
Le "do-while" boucle exécute le code l'intérieur du corps et puis ceux chèques
si la condition est remplie ou non.
Ceci est utile pour l'obtention de saisie de l'utilisateur, parce que vous savez que vous avez besoin
pour inciter au moins une fois.
Si la condition n'est pas remplie, le programme exécutera la ligne après
votre "do-while" boucle.
Si la condition est remplie si, la boucle se répète
>> Un «do-while" boucle de validation utilisateur entrée ressemblera à quelque chose comme ça.
Je déclare une variable n, getInt, et puis répéter jusqu'à ce que n est valide.
Et ce processus, je l'ai expliqué, utilisait le type integer-données, qui
vous allez utiliser pour les jours du mois.
Mais nous savons que le nombre de pièces de monnaie s'accumuleront rapidement, de sorte afin de
stocker un plus grand nombre, utilisez le type de données LongLong, mais n'oubliez pas la même
principe de validation s'applique.
>> Impressionnant, donc une fois que nous avons deux valide entrées de l'utilisateur -
jours dans le mois et les pièces de monnaie le premier jour -
nous pouvons passer à la prochaine une partie du programme.
Le premier jour, l'utilisateur commence par cependant de nombreux pennies ils spécifiés
et la quantité de pièces de monnaie qu'ils recevoir le lendemain est doublé.
Il est donc logique de garder une trace de ces deux montants -
combien d'argent l'utilisateur et comment Beaucoup de penny ils vont être donnés.
>> Maintenant, faire quelque chose pendant 28 à 31 jours est répétitif, donc nous allons utiliser un "pour"
boucle pour parcourir les jours dans l' mois, la mise à jour du total et sou
s'élèvera à chaque fois.
"Pour" syntaxe de la boucle contient ce qui suit -
une initialisation, une condition, et une mise à jour.
Votre boucle "for" va initialiser une variable, lorsqu'il
la première entrée de la boucle.
Si la condition est remplie, le corps de la boucle ne sera exécutée.
Ensuite, la mise à jour sera exécutée.
Si la condition est toujours remplie, le boucle s'exécutera et mettre à jour, et
répéter, aussi longtemps que votre état évalue à true.
>> Voici une boucle "for" qui divise une entier p 2 par un total de 10 fois.
Notez comment j'ai déclaré l'entier p en dehors de ma boucle "for", de sorte que le
entier peut être accessible en dehors de la boucle "pour".
Après le mois s'est écoulé, il est temps pour indiquer à l'utilisateur combien d'argent
qu'ils ont obtenu.
Par la spec, vous devez indiquer à l'utilisateur combien de dollars, pas combien
pennies, ils ont.
Mais jusqu'ici, vous avez gardé la trace de l' totale et les pièces de monnaie en utilisant LongLongs,
qui sont des nombres entiers.
>> Il ya 100 cents à 1 $, de sorte que si le nombre de pièces est un
multiple de 100, vous aurez besoin d' représenter décimales.
Le autotype doublé permet vous faites cela.
Alors, comment pouvons-nous transformer de représenter pennies en dollars?
>> Prenons un oeil pi.c.
Ce programme prend un big_pi LongLong et divise par 100.000, et imprime
le résultat à cinq décimales.
Si nous voulions afficher quatre virgule endroits, alors nous pouvons simplement remplacer cette
numéro ici.
Donc, nous allons Enregistrez, compilez pi, et puis voir le résultat, qui nous
s'attendre à être 3.1415 -
les cinq premiers chiffres de pi.
>> Ce n'est pas bien.
Et pourquoi?
Eh bien, parce que big_pi est un LongLong, qui est un nombre entier, ce qui ne sera pas
garder une trace de décimales.
La modification que je dois faire est dans la division.
J'ai besoin de jeter une double ici avant division, parce doubles ne peut pas garder
suivi de décimales.
Et je vais ajouter une nouvelle ligne ici pour une meilleure mise en forme.
>> Et ici, nous l'avons -
3.1416.
Vous remarquerez peut-être qu'il imprime 3,1416 au lieu de 3,1415 comme prévu.
C'est parce qu'il rounds au cours de la processus de division, plutôt que de simplement
tronquer la valeur.
Maintenant, vous devriez être en mesure d'imprimer le total final correctement, qui se termine
le programme.
>> Félicitations.
Mon nom est Zamyla.
Et ce fut sous.
>> [Jouer de la musique]