[Jouer de la musique] JASON HIRSCHHORN: OK, tout le monde. Bienvenue à la Section. Ceci est CS50, notre très première section de super. Comme vous le savez, la semaine prochaine sections régulières vont commencer, mais cette semaine, nous sommes tous ensemble. Il est moi-même. Mon nom est Jason. Je suis un professeur de sciences informatiques. Nous avons Andi, qui est à la tête du TA CS50. Et Scaz, le professeur Brian Scassellati, Il est professeur en sciences informatiques. Nous sommes les chefs de CS50 à Yale. Vous pouvez toujours envoyer un courriel nous heads@cs50.yale.edu. Nous serons à des conférences. Nous serons aux heures de bureau. Si jamais il ya quelque chose que nous pouvons faire pour vous, tout ce que vous avez besoin, hésitez pas à vous adresser à nous. Alors qu'allons-nous faire aujourd'hui? Ou avant, ce qui est à venir cette semaine? Donc, les heures de bureau sont du lundi, le mardi, Mercredi et jeudi, 8h00 à 11h00. Il ya un calendrier sur le site. Sections, comme je l'ai mentionné, sont dès la semaine prochaine. Et vous découvrirez cette semaine ce Temps de votre section est, quel jour on est, et qui est votre TA est. Problème Set 1 est due au jeudi à midi, vendredi à midi avec un jour de retard. Oui, vous avez neuf jours de retard. Et il ya neuf ensembles de problèmes. Et ne pouvez utiliser qu'une jour de retard par set de problème. Oui, en effet, tout problème ensembles sont dues vendredi à midi. C'est tout. Tout ce que les détails sont sur le programme. Chaque vendredi, nous avons déjeuners. Nous aimons faire de cette grande Bien sûr se sentir un peu plus petit. Donc, vous êtes invités à confirmer leur présence. Déjeuner libre avec son compatriote camarades de classe et le personnel. cs50.yale.edu/rsvp. Toutes ces choses qui Je dois à l'écran, en plus, vous pouvez trouver cs50.yale.edu ou cs50.harvard.edu, si vous allez à Harvard et sont en regardant cette ligne. Aussi sur ces sites, il sont une tonne de ressources pour vous. Chaque conférence a non seulement la vidéo de la conférence, mais aussi des notes. Quelqu'un va regarder le des conférences et à prendre des notes pour vous. Ainsi, vous pouvez tout simplement payer attention au cours de conférences, ou vous pouvez utiliser leurs notes / notre note pour compléter vos propres notes. Il ya des diapositives en ligne. La source tout code-- David va plus dans la leçon, ou Scaz dépasse conférence, qui le code source est disponible en ligne ainsi, que comme je l'ai mentionné vidéos. Sections, de même, seront tous filmés. Tous ces diapositives seront disponibles. Tout cela code être disponible pour vous. Il ya un short sur le site où Les membres du personnel CS50 passent de cinq à 10 minutes en passant par les sujets pour vous. Certains de ceux que vous avez déjà rencontré dans les ensembles de problèmes. Heures de bureau, comme je le disais, lundi au jeudi, 8h00 à 11h00. Étude CS50 est une ressource fantastique. Il ya des problèmes pratiques, diapositives échantillons, bugs connus que les étudiants aiment courir dans, essentiellement pour tous les sujets que nous couvrira dans ce cours. Et enfin, sur cette diapositive au moins, Reference50 qui vous donne des informations sur l'ensemble des fonctions C vous pourriez jamais éventuellement espérer à utiliser et beaucoup, beaucoup plus. Encore une fois, ce que Dot Dot Dot à le bas de l'écran est pour indiquer que il ya même plus de ressources sur ces deux sites: cs50.yale.edu, cs50.harvard.edu. Alors, que faisons-nous aujourd'hui? Eh bien, d'abord, je vais donner vous regardez les ressources. Déjà que l'on a fait. Regarde nous. Maintenant, nous allons passer en revue les types et les opérateurs dans les données C. Puis Andi viendra ici et aller sur les bibliothèques en C, Printf (), une fonction avec laquelle vous êtes déjà familiers ou va rapidement devenir très familier. Et vous aurez aussi aller sur conditions et les boucles. Et puis finalement, Scaz ira sur l'ID CS50. Si vous ne l'avez pas colombe déjà problème Set 1, ainsi que la façon d'utiliser le terminaux et utiles commandes et puis vous donner quelques démos et codage de la pratique dans l'ID de CS50. Avant je saute dans cette le contenu de ce côté, quelqu'un at-il des questions à ce jour? Génial. D'ACCORD. Changer de vitesse. [CHANGER DE VITESSE] Ce fut moi décalage engrenages dans une voiture manuelle. Donc, les types de données en C, vous ne pouvez pas avoir une variable x et ont-il sur la ligne 10, un nombre entier, peut-être le numéro 1, sur la ligne 20, un nombre décimal 10,5, et puis un couple de lignes plus tard, une chaîne, je l'aime CS50. En C, les variables ne peuvent être une chose, et une seule chose. Et vous devez leur donner types. Et sur ce forum, nous avoir une liste des types. Il ya caractères, ce qui se présenter aux personnages. Voilà donc une lettre A, B, C, D. Ce peut également être un espace, ou qui peuvent être également un caractère de nouvelle ligne. Il ya des nombres entiers, qui sont juste numbers-- nombres, entiers ou entiers rather-- mais pas de décimales. Pour les décimales, nous avons nombres à virgule flottante. Nombres à virgule flottante sont des nombres décimaux. Ensuite, il ya longs, qui sont essentiellement plus longs des nombres entiers. Vous remarquerez qu'une longue 8 est alors un int est 4. Je vais y revenir dans une seconde. Voilà parce longs peuvent stocker encore plusieurs entiers que int peuvent stocker. Double est un long flotteur. Et enfin, nous avons chaîne, qui est un type que vous avez probablement utilisé avant. Si vous incluez hashtag # includeCS50.h dans votre fichier source, alors vous pouvez utiliser un type de chaîne. Il est pas réellement construit en C. Il ya quelques autres types ainsi. Mais ce sont les principaux avec que vous allez utiliser et de rencontrer. C comme, encore une fois je l'ai mentionné, chaque variable-- il ne peut être un type et un seul type. Voilà parce que C est un statiquement langage typé, par opposition de langages typés dynamiquement où si vous créez une variable vous pouvez changer ce qui est stocké dans comme vous allez dans votre programme. Ici sur la main droite côté, je dois les différentes tailles de ces types de données en octets. Ainsi, un personnage est 1 octet. Voilà 8 bits. Et cela signifie parce 8 il ya huit bits de 0 et de 1. Nous avons vu ces démos dans la première semaine que les ampoules binaires. Avec 8 bits ou 1 octet, nous pouvons représenter des nombres entre 0 et 255. Droit. Si tous les 8 bits sont 0 qui est 0. Si le premier bit est 1, qui est le nombre l'un, et ainsi de suite, tout le chemin jusqu'à 255. Et voilà pourquoi les caractères que vous pouvez ont essentiellement jusqu'à 255 d'entre eux, mais cela a beaucoup à couvrir tous les personnages, nous devons utiliser. Pour les entiers, vous pouvez avoir 0 et alors vous avez 2 à 32 moins 1. Ce sont comment de nombreuses options vous avez pour les entiers. Pendant longtemps, vous avez 0 à 2 à la 64 moins 1. Donc, vous avez beaucoup, beaucoup, plus d'options pour longs. Cordes, qui est un point d'interrogation parce que ce un cliffhanger pour plus tard. Ouais. Je pourrais dire que tout le monde est sur le bord de leur siège, comme ce qui est cette interrogation? Il est un cliffhanger. Nous allons couvrir à terme la taille de cordes et parlent plus sur cordes. Parce que la chaîne est en fait l'une des roues d'entraînement nous mettons dans ce Bien sûr au début et puis décoller plus tard sur, parce que les chaînes en C sont des pointeurs effectivement à des tableaux de caractères. Mais encore une fois, voilà un cliffhanger pour plus tard. Avant de passer sur toutes les questions, commentaires, préoccupations au sujet de cette diapositive? D'ACCORD. Je dois être un explicateur fantastique. De même, lorsque vous programmez, vous allez utiliser ces opérateurs. Signes très simples qui peuvent faire simple, opérations, avec laquelle vous êtes probablement déjà très familier. Par exemple, sur la droite côté, nous voyons ajouter. Pour ajouter, vous faites juste un signe Plus. Et alors vous pourriez avoir deux variables x et y. Vous pouvez le faire x + y dans votre code. Peut-être que vous voulez-vous dire to-- avoir le numéro 7 et 3, vous voulez stocker cette en une somme variable appelée. Vous pouvez le faire int pour le type, l'espace somme, le nom de la variable, 7 = + 3; Que serait ce magasin en somme? Toute personne? Si je devais en somme = 7 + 3. Que seraient stockés en somme? Vous pouvez simplement le crier. AUDIENCE: 10. JASON HIRSCHHORN: 10! Exactement. Qu'en est-il en somme = 7 - 3, Je viens d'utiliser ce signe de bord. Qu'est-ce qui se passe pour être stocké? Public: 4. JASON HIRSCHHORN: 4. Somme est probablement le mauvais nom pour cette variable, mais quatre serait stocké. Pour multiplier dans C, utiliser la petite Caractère Star, vous ne l'utilisez un x. Pour diviser, utiliser un Forward Slash pas le symbole de la division. Et modulo, utilisez le symbole de pourcentage. Alors disons que je veux voir int z = 7% 3, ce qui serait stocké dans z? Donc, voilà l'essentiel demandant ce ne modulo faire? Quelqu'un sait-il ce que modulo fait? Ouais. 4 y. ENCEINTE 1: Il est le reste. JASON HIRSCHHORN: Il est le reste lorsque vous divisez. Donc 7 divisé par 3 est 2 reste 1. Donc 1 seraient stockées. Vous avez fait la soustraction, mais Voilà comment cela fonctionne. Voilà ce que l'opérateur modulo fait. Il faut un certain nombre divise par un autre numéro et retourne à vous le restant. Encore une fois, 7% 3 vous donne 1, parce 7 divisé par 3 est 2 reste 1, et renvoie le reste. Qu'en est-il revenons jusqu'à une étape à ce signe de division. Si je l'ai fait 7 / divisé par 3 ne Quelqu'un sait ce que cela revenir? SPEAKER 2: 2. JASON HIRSCHHORN: Pourquoi 2 et non pas 2.333? SPEAKER 2: Je pense qu'il coupe au bout de nombre entier. JASON HIRSCHHORN: Donc, qui est exactement ça. En C, si vous faites de la division deux entiers 7 divisé par 3, il obtient la réponse qui dans ce cas 2.3333 jamais et il constate que point décimal et côtelettes tout éteint après la virgule et il vous revient à seulement 2. Donc, si je l'ai fait 8 divisé par 3. Cela fait, nous savons que pour revenir 2,666, mais il coupe tout arrêt la virgule, tronque tout, et retourne juste pour vous deux. Donc 6 divisé par 3, 7 divisés de 3, 8 divisé par 3, allons tous revenir à vous 2. Est-ce que quelqu'un sait, ou avoir une conjecture, à comment je pourrais réellement obtenir la réponse complète si je veux que décimal? Ouais. Aller de l'avant. Intervenant 3: Utilisez un flotteur? JASON HIRSCHHORN: Que voulez-vous dire? Intervenant 3: Parce que vous avez dit flotteur est pour les nombres [inaudible] JASON HIRSCHHORN: Droit. Donc, ce que est exactement ça. La figure 7 est un nombre entier. Mais si je voulais faire de cette en un nombre à virgule flottante, Je dois stocker que comme 7,0 parce que l'ordinateur est vraiment stupid-- nous avons vu que avec le PB et J example-- il ne fera que faire exactement ce que vous lui dites. Donc, si vous écrivez 7, il pense que ce un entier. Si vous écrivez 7.0, même si nous savent ces choses sont équivalentes, il traite que comme un nombre à virgule flottante. Donc, si vous avez fait 7,0 divisé par 3 ou divisé par 3,0, ce serait dire, OK, maintenant nous avons affaire avec des flotteurs. Je reviendrai à vous 2,333333 toujours. Mais pas vraiment pour toujours, parce comme nous l'avons vu également dans la leçon, ces nombres à virgule flottante ne sont pas exactement précis. Donc, si vous ne voulez que décimal, ou une partie de cette décimal, alors vous devez use-- l'un d'eux doit être un nombre à virgule flottante et l'ordinateur doit comprendre que cela est un point flottant vous êtes traiter, et non pas un nombre entier. Des questions sur cette table sur du côté de la main droite, jusqu'à présent? Ou votre gauche, votre à gauche, votre côté gauche. Ouais. ENCEINTE 4: Droit. Pour tout comme une régulière entiers, vous le feriez write-- auriez-vous pour écrire flotter? JASON HIRSCHHORN: Ouais donc. Eh bien, si vous voulez créer une variable qui est un flotteur, vous devez dire flotteur z est égal à quelque chose. ENCEINTE 4: OK. JASON HIRSCHHORN: Mais si je voulais faire 7 divisé par 3 et obtenir que décimal, Je ferais flotteur z = 7,0 / 3,0; et qui me donnerait la virgule flottante nombre. ENCEINTE 4: OK. JASON HIRSCHHORN: Si je l'ai fait quelque chose comme int z = 7 / par 3, cela me donnerait un nombre entier, parce que ce sont tous les entiers. Cela a-t-il du sens? ENCEINTE 4: Oui. JASON HIRSCHHORN: OK. Génial. Toutes les autres questions à ce sujet table? Vraiment? Je suis vraiment enthousiaste. D'ACCORD. Ainsi, certaines autres choses que vous allez utiliser, souvent dans des conditions ou des boucles, sont ces types de operators-- ces types d'expressions booléennes. Et comme nous avons appris, == est ce que vous utiliser pour vérifier si deux choses sont égales. Donc ici, je vais vérifier si x == y, allons- nouveau supposons que x est égal à 7 et y est égal à 3. Donc, si je l'ai écrit 7 == 3, ce qui ce que cela revenir à moi? Est-ce vrai ou faux? AUDIENCE: Faux. JASON HIRSCHHORN: OK. Je me sens comme tout le monde peut obtenir celui-ci. Donc tout le monde, quelle serait-elle revenir? AUDIENCE: Faux. JASON HIRSCHHORN: Faux. Génial. 7 ne correspond pas à 3. Donc 7 == 3 reviendrait faux. Vous ne possédez pas un signe égal, si je contrôlée Cette 7! = 3, quelle serait-elle revenir? AUDIENCE: Vrai. JASON HIRSCHHORN: Vrai. Excellente. Quelqu'un était très catégorique en le dos et l'apprécie. Ensuite, vous avez moins de l'opérateur, inférieure ou égale à l'opérateur, opérateur supérieur à, supérieur supérieure ou égale à l'opérateur. Donc, encore une vérification de cohérence. Si je devais 7 est supérieure supérieur ou égal à 3. Qu'est-ce que ce retour? AUDIENCE: Vrai. JASON HIRSCHHORN: Vrai. Oui. Ce arrière-salle, côté arrière de la salle, fantastique. Vous pouvez combiner ces expressions si vous voulez, ainsi, avec une logique et qui est && Ou un OU logique qui est || ||. Et maintenant vous pouvez tester deux Est-ce que les choses together-- drôle? Pourquoi est-ce drôle? Donc, si je voulais, je peux dire est 7 supérieur à 3 et 2 est inférieur à 4? Eh bien, si 7 est supérieure de 3, cela est vrai. 2 est inférieur à 4, cela est vrai. Donc, tout cela reviendrait vrai. Si je l'ai testé 7 est supérieure à 3 et-- Je suis juste la cueillette des nombres aléatoires ici-- 4 est inférieur à 2, bien que est faux. Donc vrai et le faux faire de fausses. Et vous pouvez aller et vous combiner autant beaucoup de conditions ainsi que vous le souhaitez. Quelqu'un at-il des questions, commentaires, préoccupations jusqu'ici? Et je vois certains d'entre vous de prendre des photos de moi dans l'écran, que je remercie. Espérons que ça ne snapchat. Espérons que ce soit pour vos notes. Mais tous ceux-ci vont être disponible en ligne. Donc, vous ne devez pas prendre des photos de cette. Comme je l'ai mentionné, tout sera disponible en ligne pour vous. D'ACCORD. Je suis sur le point d'obtenir coulisses, il en va tout le monde quelque chose à dire avant que cela arrive? Questions? [Interposition VOIX] JASON HIRSCHHORN: Oh, arrêtez. Les gars, vous êtes trop gentil. D'ACCORD. Je vais marquer sur. Allons-y. ANDI PENG: Nous allons faire un changement micro maladroite maintenant. JASON HIRSCHHORN: je suis va prendre cette option. ANDI PENG: apprécions le soutien, les gars. Peux-tu m'entendre? Est-ce bon? Parfait. Beau. Permettez-moi simplement tuck que. D'ACCORD. Donc, je suis sur le point de le faire comme un géant informations déverser sur vous les gars en ce moment. Et pas de soucis que ce soit si vous êtes ne pas suivre chaque petite ligne de ce que Je suis sur le point de vous montrer. Comme l'a dit Jason tout, est entièrement en ligne. Juste nous allons essayer d'introduire tous les concepts couvert dans certains de ces diapositives. Donc, il suffit de suivre le long. Pas de soucis si vous ne comprenez pas tout; Toutefois, si à tout moment vous vous sentez perdu, levez Par contre, nous nous arrêterons, pas de soucis. Frais. Donc, je pense que quelque chose que David a déjà mentionné dans sorte de conférence et Jason a en quelque sorte fait allusion aujourd'hui est ce qu'est une bibliothèque. Donc dans la programmation, nous avons ces choses appelées bibliothèques. Où, essentiellement, tous les ils sont est juste un ensemble des fonctions, soit essentiellement juste code qui est déjà été écrit par quelqu'un d'autre que nous pouvons tous utiliser au sein de nos programmes. Alors, comment une normale travail en bibliothèque, à droite? Vous entrez dans la porte de la bibliothèque. Vous avez tous ces livres que vous pouvez sortir et vous pouvez accéder aux informations dans ces livres. Même chose dans la programmation. Vous avez une bibliothèque qui a déjà été écrit par d'autres personnes. Et la façon dont vous pouvez, en tant que programmeur ou un étudiant, peuvent avoir accès à cette bibliothèque est par hashtag #include. Par exemple, en nous C avoir trois C-- la plus couramment utilisé trois C standard libraries-- la bibliothèque d'entrée / sortie, la bibliothèque de chaîne, et la bibliothèque de mathématiques. Donc, au sein de votre première problème de couple, définit, ceux qui seront les trois que vous êtes en utilisant principalement. Alors que David déjà expliqué dans la leçon, le standard I / O bibliothèque, ou la / bibliothèque de sortie entrée standard fait exactement cela. Il vous permet, dans votre code, à l'entrée quelque chose de l'utilisateur et que la sortie à l'écran, essentiellement impression à l'écran. Et chaque fois que vous utilisez des fonctions, par exemple la fonction printf () qui nous allons aller sur la diapositive suivante, assurez-vous d'inclure la norme I / O bibliothèque ou bien vous ne allez pas être en mesure d'utiliser la fonction printf (). Parce que vous, comme le programmeur jamais réellement écrit cette fonction, vous êtes juste à l'aide de quelqu'un le code d'autre au sein de votre propre code. Est-ce logique que tout le monde? Frais. Et puis nous obtenons essentiellement sur la bibliothèque de string.h et math.h bibliothèque, signifie simplement .h bibliothèque, d'autres bibliothèques que vous finirez être à l'aide de votre code. Toutefois, aux fins de cette bibliothèque, nous avons aussi have-- de cette class-- nous avons aussi ce qu'on appelle la bibliothèque CS50, cs50.h, où nous, pour votre lecture ont créé de nombreuses fonctions importantes et utiles. Alors que vous en tant que programmeur peut greffer off ce que nous avons déjà écrit de telle sorte que est disponible pour cette fonction pour vous pour votre usage. Je vais couvrir un couple de les fonctions couramment utilisées, mais sachez que ce sont tous googleable ligne. Sentez-vous libre, tirer vers le haut de la bibliothèque et CS50 alors vous avez toutes les fonctions là. Ouais. SPEAKER 5: Donc, si vous étiez pas en utilisant le logiciel nous est fourni par la classe, le fait que dire que nous aurions à télécharger et trouver déposer cet en-tête et nous dire l'ordinateur sur lequel il est? ANDI PENG: Bonne question. Exactement. Donc, il est comme si vous n'êtes pas physiquement présents à une bibliothèque, il n'y a aucun moyen pour vous de effectivement aller et y accéder. Donc la même chose avec programmation en C, vous devez vous assurer que vous utilisez notre appareil car la bibliothèque est déjà été incorporé. Et puis quand vous hashtag #include, de la bibliothèque il. Ouais. Bonne question. Tout le monde la bonne? Frais. Bien. Donc, nous allons frapper, essentiellement, ce qui est la première fonction que Nous, les programmeurs sont allez l'utiliser au sein de notre code. Ceci est appelé la fonction printf (). Ainsi, la fonction printf (), comme je l'ai déjà dit dans la dernière diapositive, est incluse dans la norme E / S, la norme d'entrée / sortie, bibliothèque. Donc, assurez-vous que tout ce que vous using-- Oh, laissez-moi prendre le laser pointer-- chaque fois que vous utilisez la fonction printf (), vous devez inclure la norme I / O bibliothèque ou autre, lorsque vous compilez, vous allez obtenir une erreur parce que l'ordinateur sera comme, oh je ne sais pas où printf () est, vous n'êtes pas me dire où printf () est. Bien printf () est inclus dans le E / S standard, de sorte que lorsque vous utilisez printf (), assurez-vous d'avoir ce ligne au-dessus de votre code. Ainsi, par exemple, printf () ici est une fonction. Tout ce qu'il fait est d'imprimer quelque chose à l'intérieur des parenthèses à l'utilisateur. Quelqu'un voudrait-il prendre un coup de couteau à ce que cette ligne de code droit ici va imprimer? Par conséquent, la réponse est sur l'écran. Toute personne? Verdi: Le fond. ANDI PENG: Verdi, pourquoi ne vas-tu pas avant et disent toute déclaration? VERDI: Bonjour, mon nom est Andi, et je suis âgé de 20 ans. ANDI PENG: Ah, belle. Donc, dans cette ligne, nous allons imprimer, Bonjour, mon nom est Andi, et je suis âgé de 20 ans, qui est en fait une véritable déclaration. Syntaxe. Alors quelques questions syntaxiques vous les gars voulez vous assurer que vous savez. Guillemets. Guillemets indiquent au ordinateur que tout à l'intérieur va être imprimée. Tout à l'intérieur boîte juste être exactement comment vous tapez, sauf pour généralement à la fin, nous allons vouloir inclure un hash-- oh sorry-- un tiret n. Ainsi, un tableau de bord n. Quelqu'un veut-il prendre une proposition à ce que cela fait à notre code? Ouais. CONFÉRENCIER 6: le met sur une nouvelle ligne. ANDI PENG: Exactement. Donc, tout cela ne fait que permettre à tout ce qui arrive après cela, après cette déclaration, à imprimer à une nouvelle ligne. De sorte que lorsque vous écrivez votre code que vous ne possédez pas les choses au hasard plaquées sur de l'extrémité que vous ne voulez pas. Que tout se soigneusement imprimés une ligne puis nous commençons sur la ligne suivante. Quelqu'un se souvient-ce que virgule fait quand nous codage? Ouais. Haut-parleur 7: Déclaration. ANDI PENG: Désolé? Haut-parleur 7: Est-ce la fin de la déclaration? ANDI PENG: Ouais. Donc en C, ou de toute la programmation la langue, le point-virgule désigne la fin d'une ligne de programmation. Ainsi, par exemple, en anglais, nous utilisons période à-dire, oh ceci est la fin d'une phrase. Dans la programmation, même chose, nous avons une le point-virgule pour indiquer une fin de ligne. Souvent, lorsque vous êtes de commencer à programmer, vous vous réalisez oublier d'ajouter un point-virgule et puis vous essayez d'exécuter votre code et il ne fonctionne pas. Et vous êtes comme, Ah, je ne sais pas savoir pourquoi, il devrait fonctionner. Les chances sont que vous avez probablement oublié une virgule ou un support ou quelque chose quelque part. Donc, ce qui est important à retenir. Frais. Tout droit, à main levée, comment beaucoup de gens ici ont jamais pris AP Computer Science ou programmé en Java avant, jamais? D'ACCORD. Belle. Ce ne sera pas applicable ensuite, mais en Java, vous avoir quelque chose appelé System.out.println qui ne existe pas dans C. Donc, dans C, chaque fois que vous vouloir ajouter des variables dans tout ce que vous voulez d'imprimer, il ya une syntaxe spécifique nous allons utiliser. Ce qu'on appelle le placeholding-- essentiellement nous ajoutons des espaces réservés à la place du nombre entier ou la variable que nous voulons imprimer. Donc, comme vous pouvez voir les gars, nous avons inclus déposer un nouvel en-tête de la bibliothèque ici. La bibliothèque CS50. Et contenue dans cette bibliothèque de CS50 est une fonction commune nous utiliserons dans notre cours intitulé getint (). Quelqu'un veut-il prendre un coup de couteau à ce getint () peut éventuellement être fait. AUDIENCE: [inaudible] ANDI PENG: Désolé. Impossible de vous entendre. Maddie, personne. MADDIE: Oh, il invite vous pour un entier. ANDI PENG: Exactement. Donc cette fonction, un autre fonction qui est déjà été écrit par quelqu'un d'autre que nous pouvons faire appel à l'entreprise. Tout ce qu'il est est rapide le vous, l'utilisateur, à l'entrée que vous voulez que le code est en marche et il stocke whatever-- dans ce cas, nous sommes getint () - ING, ce qui signifie que nous sommes l'obtention d'un nombre entier. Et nous allons stocker que dans un autre nombre entier que nous avons juste fait appelé âge. Qui font sens pour tout le monde? Frais. Alors, maintenant que nous avons stocké cet entier, que nous avons incités à partir de l'utilisateur, dans cette variable, nous avons créé de type int appelé âge, nous pouvons aller de l'avant et lieu cette fonction dans notre printf (). Donc, la syntaxe généralement pour printf () est que partout où dans votre physique réelle ligne que vous souhaitez inclure cet entier, vous faites ce symbole là, le symbole pour cent, avec le type de variable que vous voulez. Donc dans ce cas l'âge est un entier. Donc, vous allez comprendre % i car il est un entier. Et puis après votre déclaration, vous allez faire virgule et le le nom de la variable. Donc, ici, nous allons imprimer out, Bonjour, mon nom est Andi, et je suis vieux années vierges. Hashta-- ou, sorry--, âge avec tout ce que je entrée. Donc, si je devais entrée 20 pour mon getint () ici, il serait imprimer exactement la même chose. Mais, si je voulais quelque chose d'entrée d'autre, comme peut-être 40 ou 45, alors vous verriez qui reflète en conséquence dans le code. Donc, ceci est un exemple de quelque chose dans lequel il imprime et cherche à vous comme si elle est la même chose, mais sous le capot de l'ordinateur il ya en fait passe des choses très différentes. Frais. Bien. Alors que faire si nous voulons plusieurs variables? Plutôt facile. La même chose. Nous avons aussi une nouvelle fonction appelé ici GetString (), Sont également inclus dans la bibliothèque CS50, que tout ce qu'il fait est de demander à l'utilisateur pour une chaîne, qui est juste un ensemble de caractères, donc comme une phrase ou comme un nom. Donc dans ce cas, nous aurions deux espaces réservés% s pour une chaîne et% i de nombre entier. Et nous allons suivre que par les deux variables nous voulons inclus, dans l'ordre qu'ils apparaissent dans la phrase. Ainsi, par exemple, mon nom est vierge, je veux un nom là-bas, donc je vais avoir le prénom. Et puis après, je veux âge, veulent avoir deuxième âge. Et si je voulais entrée, Bonjour, Andi de mon nom, et je suis âgé de 20 ans. Si je entré Andi et 20, la exactement la même chose serait imprimer; Cependant, maintenant nous avons deux stocké variables de nom ainsi que int. Ouais. ENCEINTE 8: Serait-il capable de courir si vous avez changé nom et l'âge à la fin de cette? ANDI PENG: Ouais. Voilà vraiment une bonne question. Tant histoire courte, non. Parce que ce nom et age-- type de variable est le nom? ENCEINTE 8: String. ANDI PENG: Et qu'est-ce type de variable est l'âge? ENCEINTE 8: Entier. ANDI PENG: Nous avons donc ici un espace réservé pour chaîne et entier, non? Donc, si vous deviez passer ceux-ci, l'ordinateur ne va pas savoir. Il va vérifier une chaîne, et si vous essayez de lui donner un int, ça va être comme attendre Je suis confus, vous m'a dit que je devrais être attribution mémoire pour un int. Et ici, quand il attend un nombre entier et vous lui donnez un nom et une chaîne à la place, il va aussi être très déroutant, il ne fonctionne pas exactement comme vous en avez besoin. Donc, ici, de nommage et syntaxe est très important pour l'exécution de code. Tout le monde la bonne? Ouais. Maddie. MADDIE: Voici, je sais que nous avons examiné des exemples en classe, où ils demandent Quel est votre âge, ce qui est votre nom. Ici, ce que ce serait elle doesn't-- si nous devions exécuter ce code, il ne serait pas demander cela? Mais vous le feriez seulement deux numéros entrée et puis il irait comme ça? ANDI PENG: Oui, exactement. Donc, si vous vouliez pour qu'il écran, s'il vous plaît entrer votre âge, vous pouvez simplement ajouter une fonction printf () qui dit, S'il vous plaît entrez votre âge, Au dessus de. Voilà une bonne question. Ouais. Haut-parleur 9: Alors, serait déjà inclus dans getint () [inaudible]. PENG ANDI: Non, il est en fait pas. Donc, tout cela fait est juste invite un écran vide à l'utilisateur d'entrer quelque chose. Si vous voulez, si vous le voulez pour imprimer quelque chose qui indique à l'utilisateur comme, s'il vous plaît me donner votre âge, alors vous aurait à printf () vous-même. Parce que tout le monde utilise ce fonction pour des choses différentes, vous pourriez être stockez âge, vous pourriez être stockez adresse, vous pourriez être le stockage des numéros de téléphone. Et donc il est vraiment à usages individuels de vos gars pour ce que vous voulez dire. Ouais. ENCEINTE 10: Donc, juste pour clarifier, où -vous faire entrer le nom et l'âge de sorte qu'il apparaît à la place de% s? ANDI PENG: Comme dans le mode? ENCEINTE 10: Oui, comme comment puis-je faire it-- où puis-je mettre Andi, et où puis-je mettre 20? ANDI PENG: Ouais. Donc, si vous deviez effectivement exécuter ce code, Je ne suis pas fait courir le code, ceci est juste ici en ce moment. Si je devais exécuter le code, je le ferais compiler le code, rendre le fichier, exécuter le code, puis il y aurait juste être deux espaces pour moi d'entrée il. Ouais. Les gars, vous verrez lorsque vous jouez avec le code vous-même. Tout droit, nous allons passer dans la section suivante de ce que nous aborderons aujourd'hui. Nous allons passer en revue ce instructions conditionnelles sont. Donc, si vous les gars me souviens et de rappeler de conférence, instructions conditionnelles, tout ce qu'ils sont sont un ensemble des instructions à l'ordinateur à qui, si une certaine condition est vraie, vous exécutez le code à l'intérieur de cette condition. Donc, en Scratch-- essentiellement le grand thème à partir d'aujourd'hui est ce que vous les gars ont déjà toutes vu la logique derrière tout que nous sommes couvrant. Et tout ce que nous faisons est traduire quelque chose qui a été très intuitive Scratch, et dur coder dans la syntaxe nous utiliserons pour la classe qui est C. Donc, logiquement, tout ce bloc était est que morceau de code là. Ouais. D'ACCORD. Nous obtenons également dans un if ... else déclaration qui est juste une couche supplémentaire de la complexité de l'instruction if où l'ordinateur prend un oeil à cette et voit, si cette condition est vrai, faire tout ce qui est à l'intérieur de ces deux supports, else-- donc un peu comme si la valeur par défaut il ne répond pas à la condition-- faire. Il est comme une bifurcation de la route. Si il pleut dehors, je mets sur une veste de pluie, sinon rien sinon je ne mets pas sur une veste de pluie. Est-ce que la logique de sens pour tout le monde? Frais. Bien. Donc, comme un exemple de disque ce que nous aimerions voir dans C est que si je voulais créer un variable appelée heures de devoirs. Et si les heures de travail à domicile est moins de cinq ans, je dis vie est belle. C'est merveilleux. Cependant, dit La lutte est bien-- qui est ce que nous avons tous en ce lundi après-midi, jusqu'à Science Hill sont probablement en train de faire maintenant-- AUDIENCE: [rire] ANDI PENG: Ils façon dont nous serait, je vous remercie pour cela. La façon dont nous aurions hardcode cela dans C est si-- supposons nous avons déjà une variable de type int appelé heures de devoirs ici. Si les heures de travail à domicile est moins cinq printf (), La vie est belle. Rappelez-vous garder / n, car vous voulez une nouvelle ligne après. ELSE PRINT, La lutte est réelle. Tout le monde comprend comment Je transitioned de ce bloc dans ce bloc de code? Frais. Bien. Alors maintenant, nous allons jeter un oeil à Si plusieurs déclarations tout à fait. Donc, supposons que le but de ce programme était que nous invite l'utilisateur à un grade. Nous invite utilisant getint () pour une année, et ils entrer une valeur, et vous souhaitez afficher ce type de pente qu'ils ont obtenu. Donc, si je devais concevoir un programme, je signifie généralement dans l'ensemble de nos yeux, 90-100 est un A, 80 à 90 est un B, et ainsi de suite et ainsi de suite. Quel est le problème avec ce morceau de code qu'il est pas faire ce que je veux faire. Ouais. ENCEINTE 11: Ils ont des limites plus basses, mais ils ne possèdent pas les limites supérieures. ANDI PENG: Exactement. Tout le monde a entendu ce qu'elle a dit? Il va être supérieure limites, mais pas de limites inférieures. Désolé, inverse, limites inférieures, pas de limites supérieures. Alors voulez-vous prendre un coup de couteau à dire ce qui serait imprimé sur cette écran si je devais exécuter ce code. ENCEINTE 11: Une erreur? ANDI PENG: Une erreur? Grande conjecture, pas tout à fait raison. Quelqu'un at-il un autre coup de poignard? Ouais, Aaron. AARON: Si vous mettez en quelque chose supérieur à 90, il serait montrer toutes les qualités que vous avez obtenus. Il serait montrer que vous avez obtenu un A, vous avez obtenu un B, vous avez un C. ANDI PENG: Ouais. Exactement. Donc, ce serait merveilleux. Cependant, ils sont mutuellement exclusif, je pense. Si je devais exécuter ce morceau de code. Et puis, disons simplement, je entré le grade de 95. Donc 95 est maintenant stocké dans INT appelle grade. Et si C est une langue qui monte haut en bas, donc ça va toujours courir jusqu'à en bas. Donc, il va venir ici, lu si teneur est supérieure ou égale à 90, printf () vous avez obtenu un A. Grande, je avoir un 95, ce qui est supérieur à 90. Il va imprimer, Je suis un A. Il va de jeter un oeil à ce cas, il va dites, eh bien 95 est également supérieur à 80, il va imprimer vous aussi avez un got une marque d'exclamation B, et ainsi de suite. Donc, comme nous pouvons tous le voir, ceci est un bogue commune qui peuvent se produire quand nous sommes l'écriture de code à regarder dehors pour. Toute personne, des questions sur pourquoi ce qui se passait? Génial. D'ACCORD. Alors, comment pouvons-nous résoudre ce problème, est évidemment la prochaine question logique. Eh bien, nous avons ces belles choses appelées si quelque chose si si else. Donc vous pouvez le voir, si vous vouliez pour changer ce problème, vous avez voulu faire chacun des conditions mutuellement exclusives, vous souhaitez ajouter un autre ... if. Et ceux-ci de course-- pensent d'eux comme échelles, ou comme les barreaux sur le ladder-- vous pouvez ajouter autant de ces que vous vouloir pour autant de conditions que vous voulez. Donc, ici, si je entré année à 95. Si année est supérieur à 95, printf (), je me suis un A. Grande. Il va voir un autre ... si et il va savoir, Oh non, Je l'ai déjà exécuté la première chose. Je know-- ou le premier si-- Je sais que Je ne dois pas regarder l'un de ces parce que l'un d'entre eux a déjà été vrai. Donc ça va fonctionner de haut en bas. Dès que le premier est vrai, alors il va sauter sur tout le reste des autre ... ifs. Cela a-t-il du sens? Ainsi, de cette façon vous avez les différents niveaux de contrôle et dès que l'un d'eux est faux, la reste sont aussi, ils ne seront même pas vérifier. Frais. Bien. Ainsi, ceci est un exemple d'un autre sorte d'instruction conditionnelle nous voyons moins souvent, mais nous les voyons et nous les utilisons. Et ils sont souvent plus efficace pour certains cas. Donc, nous avons ce qu'on appelle une instruction switch. Donc, avant, nous avons couvert ce qui est un autre déclaration, une déclaration if ... else. Ici, nous avons ce sont appelé les états de commutation. Alors, quand le faire, nous utilisons l'interrupteur déclarations est la clé? Donc, dans un communiqué de l'interrupteur, vous habituellement, généralement, en fait vous Puis seulement entiers d'entrée pour votre variable qui vous vérifiez. Donc, si je voulais vérifier pour voir si un certain number-- par exemple une note, si je obtenu un 90. Je veux voir si cela est un A, B ou C. je pouvais avoir un cas ici. Cependant, l'affaire a être une autre constante. Donc, dans ce sens, le instruction switch ne peut vérifier l'égalité de deux nombres. Il ne vérifie pas pour autre chose. Voilà donc de quoi être très attention quand vous utilisez ce. Donc, ici, si je voulais vérifier pour voir si ma note de 90 est égale à 90 ou 80 ou 70 ou 60, puis print le grade correspondant, Je serais capable d'écrire que dans une instruction switch. Donc, il va venir ici, chèque est ce nombre entier égal à cette constante? Si non, il va sauter. Est-il égal à constant deux, et ainsi de suite et ainsi de suite, jusqu'à ce que vous atteignez la valeur par défaut, si aucun d'entre eux sont égales. Dès que l'un d'eux est réglé pour être égal, ça va le faire ligne de code et pause. Ce qui signifie qu'il va frapper que courir, casser, et juste complètement sauter à la partie inférieure de ce code. Donc, dans ce sens, le type de fonctions comme un autre si si instruction else if. Alors, voici un béton par exemple pour vous les gars. Supposons donc que je voulais créer une variable appelée année fondée. Et je tiens à inviter l'utilisateur à l'entrée l'année que leur école a été fondée. Donc, je peux créer une instruction switch ici. Et disons simplement, je entrée 1636. Ce code ici va voir interrupteur Année de fondation qui équivaut à 1636. Il va voir le cas 1636, oh ceux sont égaux, printf () devrait pas vous être à cette école dans le nord? Parce que nous supposons qu'ils ne le font pas allez ici si ils vont à Harvard, casser et sauter à la fin. Si je devais entrée de 1701, qui Je suppose que nous sommes tous d'entrée, il serait ignorer ce cas, venez vers le bas pour deux cas qui est de 1701, et imprimer Bienvenue à Yale! Pause, sauter à la fin. Sinon, vous êtes probablement prenez ce cours en ligne dans lequel case-- accueil génial à Yale-- ça va aller à la impression par défaut, Internet Bonjour! Et briser. Ouais. ENCEINTE 12: Pouvez-vous utiliser autre au lieu de défaut il? PENG ANDI: Non, parce que la façon que cette fonction entière interrupteur est construit, la syntaxe besoin d'utiliser les majuscules cas par défaut. Il est comme l'autre si, si, ce il ya un cas cas par défaut. Ouais. ENCEINTE 13: Vous peut-être déjà dit cela, mais pouvez-vous avoir plus de deux cas? ANDI PENG: Ouais, vous pourriez avoir autant de cas que vous le souhaitez. Pensez-y comme tout comme l'ajout en continu de suite. ENCEINTE 14: Si vous 1701 à 1636 commuté, il ne fait pas vraiment un droit de différence? Il va juste être vérifier pour elle. ANDI PENG: Voilà une très bonne question. Et nous touchons plus tard, mais juste savent que l'interrupteur est déclaration est infinitely-- il est plus efficace que si elle et else if car il fonctionne en utilisant un autre type de fonction que vous permet, pour l'essentiel, à un peu sauter directement à la cas où vous devriez être à. Ouais. ENCEINTE 14: Cool. Merci. ANDI PENG: Oui ENCEINTE 14: Et vous ne pouviez pas faire cas similaires et supérieur. PENG ANDI: Non Donc, voilà ce qui se limitant à propos de la instruction switch est que vous avez d'avoir des constantes, seuls des nombres entiers seulement. Ouais. D'ACCORD. Donc ceci est quelque chose que vous les gars vont rencontrer moins souvent de, mais je voulais juste introduire au cas où. Nous avons ici ce qui est appelé opérateur ternaire. Où essentiellement, il est juste comme un if compilé dans une seule ligne. Ici, je vais aller sur la ligne suivante, la page suivante, car il est plus facile à voir. Donc, nous avons tous vu ce droit? Ceci est assez facile à suivre. Si je voulais faire une variable appelée chaîne nommée s, si un certain nombre Je lui donne est inférieur à 100, je vouloir assigner faible à la chaîne, sinon je veux accorder une haute. Cette ici est en train de faire exactement la même chose ces huit lignes de code font. Donc ici, je veux créer une chaîne variable. Et telle est la condition, je suis contrôle, si un nombre est inférieur à 100, alors vous assignez la valeur de bas, d'autre affecter la valeur de la haute. Ces diapositives seront en ligne, pas de soucis si vous les gars ne reçoivent pas cette baisse. Ceci est juste un moyen plus simple, plus un moyen efficace de l'écriture de code. D'ACCORD. Alors maintenant, nous allons saisir ce qui, pour la plupart des gens sont comme un très, très déroutant chose à penser au premier abord. La section de la boucle. Donc, aujourd'hui, nous allons parler environ trois types de boucles. Nous allons commencer avec un tout boucle, puis parler d'une boucle Do While, puis parler pour les boucles. Donc, essentiellement, pour les plus apprenants visuels là-bas, nous avons, pour l'essentiel, un graphique représentation de ce qu'est une boucle while fait. Ainsi, dans une programmation, vous commencerez et entrer dans la boucle à un certain point. Vous vérifiez une condition. Et si la condition est vraie, vous exécutez le code à l'intérieur. Et vous revenez autour et vous vérifiez. Si il est encore vrai que vous continuer à courir ce code autour et autour dans une boucle. Cependant, la seconde que la condition devient fausse, vous allez casser et terminer la boucle. Et cela est essentiellement le syntaxe que vous allez utiliser. Alors qu'une certaine condition est vrai ce faire, si elle est pas vrai, vous allez passer à la fin et aller de l'avant avec votre programme. D'ACCORD. Quelqu'un at-il un exemple sur ce qui peut potentiellement se produire si je tente d'exécuter ce morceau de code? Par ailleurs, que ce Scaz SAJ--, Andi, Jason-- nous signons nos e-mails, Amour, SAJ. C'est nous. D'ACCORD. Quelqu'un at-il un exemple, ou avoir une idée sur ce que cela pourrait imprimer? Type d'une question piège. Donc, ici, rappeler la condition Nous vérifions pour tout est vrai. Ainsi, alors que cela est vrai, il est aller à imprimer, je l'aime SAJ! Yat-il un point sur lequel nous serions changer en ce que le contraire? Aucun droit? Donc, ici, nous avons rencontré ce qui est probablement va être mise sur écoute beaucoup de vos programmes, la boucle infinie. Vous verrez que si vous exécuter ce morceau de code, il va juste garder l'impression, je l'aime SAJ! Bien que nous apprécions le soutien, nous ne voulons pas de vos ordinateurs à planter parce que vous garder l'impression I love SAJ! Alors s'il vous plaît, s'il vous plaît, éviter la boucle infinie car il ne va jamais d'évaluer à false et vous allez jamais à laisser la boucle. Et vous allez être aspiré toujours. Frais. D'ACCORD. Le deuxième type de boucle nous allons parler aujourd'hui est le do while, do while. Et on appelle ça un do while parce que vous avez un do et un tout. Donc, cela est assez similaire à un moment boucle, mais un peu différent. Ici, vous allez faire tout ce qui est à l'intérieur de cette tandis qu'une certaine condition est vraie. Donc, si je devais C et l'ordinateur, je suis couler ce morceau de code, Je prends un coup d'oeil au sommet. Je vais à C, je dis faire cette chose. Et puis je vérifie, alors que ce est vrai, je dois le répéter. Mais tout cela est faux, puis je aller de l'avant et je ne retournerai jamais à cette boucle à nouveau. Quelqu'un peut-il prendre un coup de couteau à ce que la différence entre cette boucle et la une nous juste regardé était pratiquement. Ouais. ENCEINTE 15: La condition vient après plutôt qu'avant? ANDI PENG: Exactement. Alors elle a dit la condition vient après, pas avant. En fin de compte, la différence entre ce dernier et la boucle while est que vous allez juste faire tout ce qui est à l'intérieur de ce indépendamment de si oui ou non votre état est vrai, et ensuite vérifier l'état. Donc dans ce cas, vous êtes always-- de cette manière, vous êtes toujours en veillant quel que soit est fonctionne à l'intérieur d'au moins une fois avant de vérifier si vous souhaitez l'exécuter à nouveau. Et voici un exemple quand nous l'utiliser. Ainsi, par exemple, si je voulais avoir une variable de type int nommée âge, et je tiens à inviter l'utilisateur pour leur âge, Je vais faire printf () Quel âge as-tu? âge = getint (), qui est invitant l'utilisateur. Et certaines personnes vont être très ennuyeux. Et vous ne voulez pas de bogues dans le programme de quelqu'un d'entrer comme, oh je suis négative de 4 ans ou peu importe. Dans ce cas, si elles faire, ce évalue true, ce qui signifie que je vais avoir à garder aller et le faire. Donc, cela va continuer re-demander à l'utilisateur pour vous donner comme un vrai Numéro d'âge et il est va continuer à aller en arrière et refaire jusqu'à ce qu'ils vous donner un âge réel supérieur à un, ou différent de zéro. Donc indice, indice. Ce sera très, très utile pour un de vos problèmes de PSEt. Ouais. ENCEINTE 16: Oups, désolé. ANDI PENG: Yep. ENCEINTE 16: Y at-il, pas d'être un trou du cul, mais- ANDI PENG: Pas de soucis. ENCEINTE 16: il --existe des règles différentes ici, ou avez-vous simplement oublié de mettre la citation? ANDI PENG: Oh Yeah. Désolé, ce est totalement mon mauvais. Ce fut certainement censé être une citation. Bonne prise. Cela aurait pas courir. D'ACCORD. Ainsi, le dernier type de boucle, nous allons parler à propos et, en fin de compte, type de la plus complexe est la boucle. Ne vous inquiétez pas si vous ne le faites pas savent ce que cela signifie. Il est assez déroutant au premier abord. Nous allons passer en revue un exemple. Tout ce qui se passe dans une boucle for est que vous avez trois états que vous allez comprendre. Donc, pour une certaine chose, vous êtes va initialiser une variable. Vous allez ajouter la condition à cette boucle qui va continuer à courir. Et puis, à la fin de la boucle, vous allez mettre à jour. Vous pouvez mettre à jour la variable que vous voulez garder la trace. Donc, nous utilisons généralement pour les boucles pour quand nous vouloir exécuter une boucle pour une certain nombre de fois et nous savons déjà, Oh je veux cette boucle à exécuter comme 10 fois, alors vous do-- je vais aller sur un exemple à la page suivante. Donc, ici, par exemple, dans Scratch, si vous je voulais quelque chose de répéter 10 fois, tout ce que vous aviez à dire était, répéter 10 fois I love SAJ! qui est un plus acceptable spectacle de soutien pour nous au lieu de la boucle infinie. Ici, la façon dont vous le feriez transition vers C et écriture qui est pour int-- je vais créer ou déclarer une variable de type int nommé i. Je vais d'initialiser à 0, donc i = 0; et cela va être ma condition. Donc i est inférieur à 10. Et puis à la end-- la dernière déclaration que vous êtes va avoir est la mise à jour des ce qui se passe à la variable i à la fin de votre boucle. Donc, il est une sorte de confusion, car différentes parties de cette ligne se produisent à différents les types de la boucle. Mais je vais aller sur une exemple de pseudo-code que et peut-être expliquer cette juste un peu mieux. Donc ici. Voilà la boucle nous venons de voir. Essentiellement en pseudo-code, ce qui qui se passe dans ce programme, est d'abord je crée i, l'initialiser à 0. Je vérifie pour voir si i est moins de 10, auquel cas la première fois qu'il est parce que 0 est inférieur à 10. Ainsi la boucle va courir. Et puis je vais imprimer cette ligne. Et puis à la fin de cette ligne, à droite ici, je vais faire incrément i, i ++, tout ce qui est des moyens incrémenter par un. Donc i est maintenant 1. Parce qu'il était autrefois 0, si je incrémenter il est, il est maintenant 1. Et puis je vais revenir au début de la boucle et je vérifier l'état. Est la condition toujours vrai? Oui, 1 est toujours inférieur à 10. Donc, il va imprimer ce message, aller puis incrémenter i, et vérifiez la condition de façon continue, en permanence, jusqu'à ce que vous obtenez finalement au point où i est 10. Vous allez imprimer cette 10 fois et puis je vais égaler est 10. Vous allez vérifier l'état. Est de 10 à moins de 10? Non, ce qui est faux. Ainsi, cette boucle ne va pas à courir, il va se casser, et vous allez continuer avec votre code. Donc, comme vous les gars pouvez le voir, cette est un très bon exemple d'une boucle, vous pouvez programmer dans ce fonctionne pour un montant de fois spécifié. Chacun clair? Ouais. ENCEINTE 17: Que diriez-vous incrément de façon exponentielle, est-ce codage différent? ANDI PENG: Vous can-- nous irons au cours de cette dans la diapositive suivante. Bonne question. Est anyone-- avant que je passe on-- qui que ce soit confus, parce que cela est un concept vraiment difficile. Pas de soucis, si you're-- OK. Frais. Bien. Juste une diapositive général. Cette boucle while fait la exactement la même chose pour la boucle était. Il vient d'écrire différemment. Les gars, vous pouvez parcourir les diapositives à votre convenance plus tard. Mais il suffit de savoir qu'il ya multiples façons d'écrire la même chose à se produire avec différentes boucles. D'ACCORD. Donc, maintenant nous obtenons dans la question de ce que si on a une boucle à l'intérieur d'une boucle. Nous entrons dans réel Inception Type trucs ici. Lorsque vous voulez faire des choses multiples fois à l'intérieur d'autres choses qui font des choses plusieurs fois, vous vouloir ce que l'on appelle une boucle imbriquée. Pour ceux d'entre vous qui voient cette première et très troublé, tout ce que nous faisons ici est d'avoir une boucle où nous avons une variable de rang. Mais à l'intérieur de celui-ci, nous avons aussi un autre pour boucle de colonne de variable appelée. Et je vous suggère fortement de vous tous qui sont confus d'abord garder track-- tirer cette, dessiner cela. Ne pas essayer de juste cause à travers elle, le tirer. Dans votre tête, sur ce morceau de papier, ou que ce soit, la ligne d'écriture, garder une trace de ce que la ligne est égale à. Donnez votre colonne, de garder trace de ce que la colonne est égale à. Et de garder trace de ce qui est imprimer à chaque itération. Chaque itération de cette boucle, à chaque itération de la boucle plus large, juste continuer à suivre la logique. Et je vous garantis, vous allez adorer ce que vous voyez, car il est aussi très applicable pour vos ensembles de problèmes. Frais. Bien. Donc, la chose la plus importante que vous les gars sont probablement tous penser à ce moment, sont votre problème Réglez 1s, qui sont dus jeudi / vendredi. Dans votre programme de water.c, Conseil Vous allez avoir à inviter l'utilisateur à une entrée. Dans votre programme de mario.c vous allez avoir d'utiliser un imbriquée boucle for, qui est une boucle pour l'intérieur d'une boucle for, d'imprimer un bloc de pyramide, essentiellement comme ce que Mario doit sauter à travers. Et puis à l'intérieur de votre greedy-- ou peut-être Réussir le changement, si l'un de vous les gars ont déjà entendu parler de that-- vous allez devoir être très minutieuse des premières valeurs à virgule flottante. Rappelez-vous décimales flottantes et sont des nombres entiers pas la même chose. Gardez une trace de qui on est qui. Et vous allez utiliser instructions conditionnelles, ainsi. Tout droit, dernière chose. Je dois quelques minutes. Style. Donc ceci est quelque chose qui ne fait effectuer l'efficacité, ou le fonctionnement réel de votre code. Cependant, il nous effets que vos élèves, que vos lecteurs. Il vous affecte, si vous êtes en essayant de trouver un problème. Il effectue la lisibilité de votre code. Donc, le style, comme lorsque vous essayez de coiffer un essai pour l'anglais, si vous n'a pas eu paragraphes, vous avez tout genre des pêle-mêle sur une seule ligne, il qui le rend vraiment difficile pour quiconque à lire votre essai, même si vos points sont logiquement son. Même chose dans la programmation. Vous pouvez avoir horriblement obscure Code qui Scaz couvrira, et il peut encore fonctionner et la fonction. Mais pour nous, que vos beaux PS, qui sera être la lecture et l'évaluation de vos psets, ce n'est pas très gentil. Alors s'il vous plaît, pour l'amour de nous et vous, quand vous essayez de fixer un problème dans votre code, et vous essayez de lire votre propre code, assurez- vous que vous suivez certaines conventions que nous allons passer en revue. Alors d'abord. Donnez vos variables des noms significatifs. Si vous souhaitez stocker un nombre entier appelé l'âge, s'il vous plaît nommer âge. Ne pas nommer hauteur. Lorsque vous essayez de stocker un âge en hauteur, il fait tout très déroutant pour nous. Nous ne voulons pas être confondu. Vous ne voulez pas être confondu. Personne ne aime pas confondre. Si vous allez créer quelque chose, nommer quelque chose de significatif. Cependant, en boucle, seule variables caractères sont habituellement très bien. Et pour la boucle, si vous voulez juste i, et j, k, hésitez pas à faire ça. Conformément initialisation. donc, qu'est-ce que ça veut dire? Cela signifie que techniquement, théoriquement, vous pouvez lancer et de créer plusieurs variables sur la même ligne. Ainsi, par exemple, je peux créer un entier appelé scaz_age, et entier appelé andi_age = 20, et un entier appelé jason_age sur la même ligne. Et je peux aussi assigner un seul eux et pas les autres à des valeurs. Nous vous demandons s'il vous plaît ne faites pas cela. Parce que là, vous avez essentiellement créé trois variables, mais un seul d'entre eux a fait une valeur. Et puis quand nous sommes en essayant de lire votre code, ou si vous essayez de fixer un problème dans votre code, il est très déroutant à suivre. Donc, juste pour votre lisibilité, pour notre lisibilité, ne fais pas ça. Accolades cohérente. Certaines personnes aiment mettre leur accolades dans des endroits différents. Il n'a pas vraiment d'importance. Assurez-vous simplement que vous êtes cohérent dans votre propre code sur l'endroit où vous souhaitez les mettre. Conformément espacement. Si vous mettez un espace après un pour la boucle, toujours le faire. Ne pas juste comme sorte de le faire à certains endroits, ne le font pas dans d'autres. Juste être cohérent. Deuxièmement, si quelqu'un souhaite de parcourir le Guide de Style CS50, nous avons officiellement un guide de style que vous toutes ces conventions dit, et plus encore. Il est en ligne. Il est comme cs50.net/style ou quelque chose comme ça. Vous pouvez google. La cohérence est essentielle. Donc ne vous inquiétez pas ce que font les autres, assurez-vous juste que vous êtes cohérente au sein de votre propre code. Quiconque a des questions à ce sujet? Ouais. ENCEINTE 18: Donc, la bonne chose à voir avec l'initialisation est juste les avoir tous dans un document distinct ligne, est que ce que vous dites? ANDI PENG: Donc, je l'ai rarement cela se produit. Mais si vous voulez, si vous vouliez être comme économiser de l'espace dans votre code, ou que ce soit, vous pouvez le faire. Nous demandons que vous venez de ne pas initialiser une chose et pas les autres. Donc, si vous voulez faire int scaz_age, int andi_age, int jason_age, ça va. Il suffit de ne pas initialiser un et pas les autres est tout. Questions? Bien. Je vais passer la microphone, et le pointeur laser, et le relais à Scaz à ce point. C'est embarrassant. C'est ici. BRIAN Scassellati: Je vous remercie. Comment est-ce pour son? Le son est bon? . Excellente. D'ACCORD. Alors, salut tout le monde. Je vais essayer de travailler à travers un exemple pratique avec vous. Et nous allons utiliser de CS50 environnement de développement, ce qui est appelé l'environnement de développement intégré. Et vous avez vu cette démontré dans la leçon. Et dans le problème Set 1, vous êtes allez avoir l'occasion de l'utiliser, et de jouer avec , et s'y habituer, parce que nous allons utiliser à travers le reste du semestre. Donc, dans cet IDE, vous avez ce qui ressemble comme un navigateur de fichier très traditionnelle sur un côté. Vous avez une partie jusqu'à sommet où vous allez pour voir votre code source, votre Cfile, le code que vous écrivez. Et en bas en bas, vous aurez avoir une fenêtre de terminal que vous allez utiliser pour à la fois compiler votre programme et d'exécuter ou exécuter votre programme. D'ACCORD. Donc, juste pour nous donner un peu de fondation, dans cette fenêtre de terminal, vous allez être en utilisant un ensemble de commandes qui sont des commandes standard dans toute la plupart des systèmes Unix ou Linux. Et si vous avez déjà utilisé toute forme de Unix, Ubuntu, ou l'un des autres saveurs, ceux-ci vont vous sembler familier. Si vous ne l'avez pas, ne vous inquiétez pas. Il n'y a rien de compliqué sur eux. Ils sont juste en utilisant un autre la syntaxe, une dénomination différente convention que vous avez vu avant. Donc, pour lister les fichiers dans un répertoire particulier, ils vont utiliser un commande appelé ls, ou liste. Si vous voulez tout voir avec tous les détails, vous utilisez une commande argument de ligne avec ls -l. Et que vous montrerai tout plus en détail, y compris les autorisations pour un fichier. Pour changer de répertoire, vous utilisez la commande cd. Et vous serez en mesure de changer de répertoire à la fois pour aller à votre répertoire personnel. Voilà simplement cd tout par lui-même, avec deux cd points vous revenir jusqu'à un niveau à votre répertoire précédent. Et vous pouvez également cd à un sous-répertoire en tapant cd et le nom de ce sous-répertoire. Vous pouvez également créer de nouveaux répertoires. Et nous allons marcher grâce à cela en seulement une minute. Mais juste pour mettre tout sur l'écran. De sorte que vous pouvez les voir. Vous aurez également la possibilité pour manipuler des fichiers directement à partir de la ligne de commande. Vous serez en mesure de les copier, les déplacer ou de les supprimer, qui est, de manière efficace, de les supprimer. L'IDE CS50 vous donne la pleine puissance d'arguments de ligne de commande. Et cela signifie que vous pouvez également faire des choses très dangereuses. D'ACCORD. Par exemple, vous pouvez supprimer, ou qui est suppression, un fichier sans demander pour une confirmation. Et vous pouvez même retirer recursively-- qui est le tableau de bord r flag-- un ensemble sous-répertoire et tout son contenu. D'ACCORD. Ils figurent en rouge parce que vous devraient réfléchir "Danger" à chaque fois vous voyez ces choses. D'ACCORD. Bien. Maintenant, enfin, les choses qui sont va être vraiment intéressant pour vous, sont il ya quelques bonnes astuces de savoir que vous naviguez à travers cette fenêtre de terminal. D'abord, vous pouvez effacer l'écran à tout moment en tapant simplement en clair. Et vous allez voir moi de le faire assez souvent. Vous pouvez aussi afficher le texte d'un fichier en tapant plus et puis le nom du fichier. Vous serez alors en mesure de faire défiler avant suite et ce juste avec la barre d'espace et les touches fléchées. Si vous avez, comme nous l'avons fait aujourd'hui en conférence, un programme qui est en cours d'exécution en continu en boucle infinie, vous peut arrêter ce programme d'exécuter en tapant dans le contrôle, qui est maintenant Control-C. Et vous pourriez avoir à faire ce à plusieurs reprises. L'ordinateur est loin de vous. Et vous avez parfois besoin de donner quelques essais avant il va vraiment venir à travers. Vous serez également en mesure de trier les commandes que vous venez de taper à l'aide de la touche haut, du clavier, puis sur la touche flèche vers le bas. Et ce qui est le plus utile est la place de taper des noms de fichiers longs, vous serez en mesure de l'utilisation de tabulation pour autocomplete quelques instructions. Maintenant, nous allons démontrer tous ceux en seulement une seconde. Donc, si vous ne vous souvenez eux, ne vous inquiétez pas. Ce sont des choses que vous aurez ramasser et utiliser comme nous allons le long. D'ACCORD. Donc, en C-- contrairement à Scratch-- C est un langage compilé. Cela signifie que nous allons prendre une source file-- qui est le texte que vous écrivez, les commandes que vous écrivez, printf () déclarations, les boucles, tout else-- et nous allons de prendre ce fichier et de le remettre au large à un programme appelé le compilateur. Le compilateur prendra ensuite que le texte que vous avez écrit et le traduire en les instructions binaires que votre ordinateur est passe réellement utilisation. On appelle cela l'objet ou le fichier exécutable. Si vous regardez ce fichier, vous allez pour voir le code que vous avez écrit. Si vous regardez ce fichier, vous allez pour voir une séquence aléatoire de caractères qui font aucun sens. Voilà parce que cela est le binaire. Ça ne signifie pour vous d'être lisez. Cependant, chaque fois que vous voulez lancer quelque chose, ce que vous allez être en cours d'exécution est ce fichier objet. Alors, quand nous travaillons avec ces fichiers, nous écrirons un fichier dans C Nous allons ensuite compiler, en utilisant un commande make qui invoquera le cliquetis de compilateur pour le langage C. Et qui va produire un objet déposer, comme un dehors, ou dans ce cas, le nom, mon dossier, que je ai mis dans. Bien. Donc, nous allons effectivement essayer. Alors je suis venu avec un exemple de ce que je voulais essayer. Et l'une des choses qui me fascine est l'animation. Donc, nous allons essayer de faire un peu d'animation utilisant seulement des caractères ASCII. Personnages Nous pouvons imprimer facilement maintenant. Alors, voici ma meilleure tentative à créer pour vous l'animation d'un lapin courir à travers les hautes herbes. Le voilà. D'ACCORD. Donc, il ne fonctionne pas encore, mais il est debout dans l'herbe haute. Maintenant, si je devais un animateur, dans l'ancienne école version de l'animation, ce que je voudrais faire est je produis une image de ce lapin dans l'herbe. Et puis je voudrais produire Une autre image-- une autre ce qu'ils appelaient cell-- que avait le lapin que légèrement déplacé. Et puis un troisième qui avait le lapin déplacé un peu plus loin. Et je voudrais produire un ensemble séquence de ces cellules. Certains où le lapin est terminée sur le côté gauche. Et puis se déplace lentement, une par l'une vers le milieu. Et puis, à partir du milieu vers la droite. Et si je devais alors, vraiment la chance, je pouvais mettre ensemble et je pouvais les animer. Et il ya mon lapin courir dans l'herbe. Voilà mon grand PowerPoint tromper pour la journée. D'ACCORD. Donc, cela est aussi bon qu'il obtient. D'ACCORD. Donc, ici, une fois de plus, voici notre lapin de courir dans l'herbe. ENCEINTE 19: Encore une fois. BRIAN Scassellati: Un plus de temps, tout droit. Il ya votre lapin. D'ACCORD. Donc, aujourd'hui, ce que nous allons à faire est que nous allons pour essayer d'automatiser le processus de production de ces cellules. Nous ne serons pas tout à fait obtenir au point de être en mesure de les mettre tous ensemble. Mais, nous allons essayer d'automatiser le processus de génération de cette séquence. Et cela est une grande partie de ce que animation d'aujourd'hui est comme. Autrement dit, vous ne faites pas les choses nécessairement en tirant tout à la main. Nous utilisons un ordinateur pour automatiser parties de ce processus. D'ACCORD. Alors permettez-moi de basculer maintenant à notre IDE CS50. Et je l'ai créé pour us-- et laisser moi zoome un peu ici, je l'ai bit-- créé pour nous un point de départ. Chaque fois que nous vous demandons de siéger vers le bas et écrire un morceau de code, ce que nous sommes vraiment vous demander de faire nous demandons est de résoudre un problème. Et la façon dont vous devriez penser à faire ce que est de commencer par quelques simple, une partie de cette solution. Et puis construire à partir de cette partie. Et voilà ce que nous allons faire aujourd'hui. Donc, plutôt que d'essayer tout à la fois à écrire l'ensemble du groupe de code qui est va produire ceux 10 cellules d'animation, nous allons commencer à la place avec un morceau qui fonctionne. Et puis nous allons construire un peu autour de cette et un peu plus et un peu plus. Maintenant, la bonne chose à propos résoudre les problèmes de cette façon est qu'il vous permettra de commencer toujours avec quelque chose que vous savez fonctionne et introduire un changement graduel. Et voilà un excellent moyen pour apprendre à coder, parce que chaque fois que vous faites une changement, vous voir l'impact que cela a. D'ACCORD. Alors, voici notre point de départ. D'ACCORD. Donc, au début de mon dossier, Je l'ai hachage #include stdio.h. Voilà donc que je peux obtenir le fonction printf () fonctionne. Je alors je dois ma fonction principale. Et cela ressemble encore un peu arcane ou obscur pour certains d'entre vous. C'est bon. Tout ce qu'il dit est que la fonction principale prend pas de moyens arguments-- vides rien dans C. Et il retours par convention un entier. Principal renvoie toujours un nombre entier, habituellement un code de dire des choses qui a bien ou n'a pas bien. D'ACCORD. Mais principale doit avoir que former pour nous en ce moment. Je l'ai alors mis dans trois lignes de code. Et avec chaque ligne de code, je me suis mis un commentaire. Or l'une des choses qui nous insisterons pour que vous fassiez, et il est tellement important la pratique de la programmation, est toujours commenter votre code. Toujours écrire dans un Anglais commenter quelque chose que vous pensez que le code est censé faire. De cette façon, plus tard, quand vous revenez à , vous pouvez le regarder et vous pouvez dire, Oh, je me souviens de ce que je faisais essayons de faire avec cela. Ou quand un TA assoit avec vous essayer de vous aider à les heures de bureau, ils peuvent examiner cette question et aller, je voyez ce que vous essayiez de faire, mais au lieu de cela est ce qui se passe réellement. D'ACCORD. Donc, je dois trois parties à mon code, Je vais tout d'abord l'impression quelques points au début. Je vais ensuite imprimer mon lapin très fantaisie. Et puis certains peu de points à la fin. Et ces trois déclarations d'impression devrait vous sembler familier à ce point. Tout ce que je fais dans chacun d'eux est que je suis imprimer une séquence de caractères. Il n'y a pas de variables impliquées. Tout est plat. D'ACCORD. Donc, si je descends maintenant à mon terminal-- Voyons si je peux obtenir ce retour out-- et je vais saisir à nouveau clair. ENCEINTE 20: Faites nous utilisons le double barre oblique de commenter? BRIAN Scassellati: Can utiliser le oui double--. Il ya de multiples façons de laisser des commentaires en C. Un moyen est d'utiliser la double barre oblique. L'autre consiste à utiliser une barre oblique et une étoile puis fermer avec une étoile et une barre oblique. Bien. Tout d'abord, je vais commencer à naviguer ici. Donc, si je vais à mon répertoire, Je l'ai changé répertoires là, Je vais regarder et voir ce qui est dans ce répertoire, ls, lister. Je vais voir ce que je l'ai obtenu deux sous-répertoires. Faisons de cette un peu plus grand ici afin que nous puissions tous le voir. Je peux voir que je l'ai obtenu deux sous-répertoires. Je vais changer de répertoire pour aller dans l'espace de travail. Et je vais taper seulement partie, et puis juste frappé Tab. Et il va compléter le reste pour moi. Fantaisie. Je vais regarder et à voir dans l'espace de travail. Et en ce moment, je travaille sur la super-section que nous enseignons à l'heure actuelle. Donc, je vais aller dans ce répertoire. Et enfin, regarder et voir. Et je dois ce fichier bunny.c. Tous droits alors laissez-moi clairement une fois de plus. Et je vais encore une fois je suis maintenant-- en restant dans ce répertoire et il me dit que je suis dans ce répertoire de super-section. Je vais aller de l'avant et faire mon lapin de programme. Et cette commande, assurez-lapin, tout en sonnant un peu bizarre, invoque également le compilateur clang. Et il est produit pour me une sortie qui est un funny-- un exécutable fichier exécutable appelé lapin. D'ACCORD. Je peux alors, et cela sonne pire encore, exécuter lapin. D'ACCORD. Et nous allons voir ce qu'il fait. D'ACCORD. Voilà un peu de ce que je m'y attendais. Je dois ma photo de lapin là, mais je voulais que ce genre de par lui-même. Qu'est ce que j'ai raté? ENCEINTE 21: Slash l ou n slash. BRIAN Scassellati: Slash n. D'ACCORD. Donc revenons ici. Et je vais sortir de cela. Et je vais retourner dans celui-ci. Et nous allons jeter un coup d'oeil maintenant de ma fonction principale ici. Alors que devrais-je faire? Je veux terminer la ligne. Donc, je vais mettre dans un commentaire. Je vais mettre dans un printf (). Et qu'est-ce que je dois mettre en? / n. D'ACCORD. Que dois-je mettre fin avec? Point-virgule. Bien. Maintenant, l'un des vraiment choses importantes est assurez- chaque fois que vous faites un changement dans votre code, que vous enregistrez. Si vous n'êtes pas enregistré votre code, vous êtes allez remarquer une petite étoile là-haut. Et cette étoile vous dit ont pas enregistré ce code. Si je compile en ce moment, il est pas aller à refléter tout de ces changements, parce que le compilateur regarde le fichier qui est sur le disque, pas le fichier qui est ouvrir dans votre éditeur. Bien. Donc, nous allons l'enregistrer et puis nous passerons à droite sur ici, de revenir sur. Descendez à mon terminal. Et nous allons effacer à nouveau l'espace. Et nous pouvons aller de l'avant et un de plus le temps de rendre notre programme de lapin. Et exécuter le lapin. Cela n'a pas fonctionné non plus. Slash erronées. Donc, si vous regardez ce que je dois, je mets un / n là-dedans, mais je devais le mauvais slash. Tout ce que votre ordinateur biches est très explicite. D'accord? Une petite erreur de ponctuation, et tout à coup vous ne recevez pas ce que vous voulez. Bien. Donc, nous allons faire un zoom avant à nouveau. Nous allons revenir. Eh bien faire cette réparation très rapide. Nous allons mettre le droit slash. Nous allons l'enregistrer. Nous allons faire un zoom avant. Pour une raison quelconque, cela ne être heureux, mais Allons de l'avant et nous allons revenir à la borne ici. Éclaircir. Nous allons l'agrandir. Et une fois de plus, nous ferons lapin. Et maintenant, bien sûr, cela fonctionne. Hourra. D'ACCORD. Essayons donc de faire ce un peu plus générale. Voyons si au lieu de simplement l'impression d'une image particulière, nous allons voir si nous pouvons faire de cette afin que nous puissions obtenir tous 10 les trames d'animation de que nous voulions avoir. Encore une fois, nous allons jeter ce une étape à la fois. Voyons d'abord généraliser, pas de sorte que je fais tous les cadres, mais si je fais une quelconque cadre qui je pourrais avoir besoin. Alors, quelle est la différence entre les cadres? Est le lapin de la même chose? Public: Oui. BRIAN Scassellati: Ouais. Quelle est la différence? AUDIENCE: Position. BRIAN Scassellati: Sa position, à droite? Et comment puis-je contrôler sa position? Combien de points je suis mettre au début et combien de points je suis mettre à la fin. Donc je devais cinq à la début et à la fin cinq. Nous allons remplacer que cinq avec une boucle for. D'ACCORD. Et je vais créer un pour boucle maintenant que va dire, Je vais imprimer un nombre de points au début. Je vais utiliser une variable. Disons, que diriez-vous que i le compteur dans ma boucle. Et je vais déclarer en haut. Et puis dans la boucle for Je dois faire trois choses. La première chose que je dois faire est que je dois initialiser i. Que dois-je initialiser à commencer à être? 0. D'ACCORD. Puis-je besoin de dire, ce qui est la condition de terminaison? Quand dois-je arrêter? Eh bien combien de points vous faire vouloir imprimer sur celui-ci? AUDIENCE: Cinq. BRIAN Scassellati: Cinq à nouveau? Que diriez-vous Faisons quelque chose différente, nous avons fait cinq. Montrons qu'il est différent. ENCEINTE 22: Deux. BRIAN Scassellati: Deux. D'ACCORD. Donc, si je veux deux points, que dois-je faire ici? AUDIENCE: Trois. BRIAN Scassellati: Trois. D'ACCORD. Combien de fois est-ce passer en revue? Cela va passer par trois fois, 0, 1, et 2, droit? Très bien, revenons à deux. Maintenant, nous aurons deux points. Et qu'est-ce que je veux faire chaque fois que je vais à travers la boucle? Qu'est-ce qui doit changer chaque fois que je vais à travers? ENCEINTE 23: Ajouter un point. BRIAN Scassellati: Je dois continuer. Je vais ajouter un point. Je vais imprimer un point, à chaque fois dans la boucle. Mais comment vais-je garder la trace de la façon dont de nombreuses fois où je suis allé à travers la boucle? Je suis en utilisant i, qui variable, ce compteur. Donc, chaque fois à travers, je vais à incrémenter le compteur d'une unité. Maintenant, cela est la même pour me disant que i = i + 1. C'est bon. Je pouvais le faire that-- je l'aime sténographie, donc je vais dire i ++. D'ACCORD. Faisons la même chose ici-bas au fond. Seulement je sorte de fait celui-là. Je vais vous laisser les gars faire complètement celui-ci. Bien. Alors, que dois-je écrire ici? Voici ma boucle for. Je vais faire un printf () et je vais de faire en sorte que je ne imprime un point sur ce fond. Que dois-je écrire l'intérieur de cette boucle for maintenant? Eh bien, tout d'abord ce que variables doivent-je utiliser? ENCEINTE 24: j. BRIAN Scassellati: Je pourrais utiliser j. Puis-je utiliser le même? Puis-je utiliser de nouveau sur i? Ouais. Voilà OK, parce que l'Est que je suis en utilisant ici, Je ne pas besoin d'eux à nouveau lorsque Je descends à ce point. Alors, que dois-je initialiser i à? ENCEINTE 25: 10. BRIAN Scassellati: 0. Que dois-je vérifier? Combien de points dois-je maintenant à la fin si je ai deux points au début? Je besoin de huit à la fin, de sorte que ce dois-je vérifier, inférieur à: i AUDIENCE: Sept, huit, neuf. BRIAN Scassellati: je l'ai entendu sept. Je entendu huit. Et je entendu neuf. D'ACCORD. Donc, nous sommes tous dans le droit ball-- Jason dit 10. D'ACCORD. Si je devais deux points pour le premier, combien faire I-- et je dois huit points pour le dernière One-- je mets deux au-dessus, que dois-je mettre bas? AUDIENCE: Huit. BRIAN Scassellati: Huit. Parce que ce qui se passe à compter de zéro à sept. Et qui est huit fois dans la boucle. D'ACCORD. Et qu'est-ce que je dois faire à la fin? AUDIENCE: i ++. BRIAN Scassellati: i ++. Bien. Alors que cherche assez bonne là-bas. Essayons et nous allons voir ce qu'il fait. D'ACCORD. Donc, nous allons l'enregistrer. Nice et sauvé. Nous allons faire un zoom arrière. Nous allons essayer ici dans le terminal. Nous allons l'agrandir. Oops. Nous allons, une fois de plus, rendre notre programme de lapin. Et aller de l'avant et d'exécuter lapin. Et il est là. Donc, il ya notre lapin. Où il dispose de deux points au début et huit points à la fin. Tout le monde toujours avec moi? D'ACCORD. Donc, nous avons construit le haut. Nous avons construit un lapin, un cadre particulier. Maintenant, nous avons pu généraliser et dire que de construire de plus, différents types de cadres. Maintenant, nous allons aller de l'avant, et ont il génère pas un seul cadre, mais nous allons générer 10 cadres, où nous lentement faire le lapin déplacer tous le chemin à travers le champ. Bien. Allons en arrière. Et nous allons essayer maintenant. Alors, que dois-je vraiment besoin de changer ici? Que dois-je changer? ENCEINTE 26: Vous devez d'abord modifier le nombre de points maximal au début. Parce que si nous faisons 10 points, il va avoir besoin de jusqu'à l'échelle. BRIAN Scassellati: Ouais. Donc maintenant je l'ai sorte d'câblé de toujours faire deux points au début et toujours faire huit points à la fin. Je veux construire une autre boucle, non? Parce que je ne veux pas construire une seule image de lapin, Je veux construire 10 images lapin. Donc, je dois construire une autre boucle, et que je passe par cette boucle, Je souhaite modifier le nombre de points je imprimer au début et combien de points je imprimer à la fin, sur la base de laquelle le cycle de la boucle J'en suis. Bien. Alors soyons un autre compteur. Quelqu'un a dit avant j, donc nous allons faire un autre j. Et maintenant, nous allons construire une autre boucle. Ce qui se passe à l'intérieur de cette boucle? Ce truc doit aller intérieur de la boucle, non? Est-ce que le lapin ont aller à l'intérieur de la boucle? Dois-je un lapin dans chacune de ces 10 cadres? AUDIENCE: Uh-huh. BRIAN Scassellati: Ouais. Je veux un lapin dans chaque des 10 cadres, non? Comment sur les points à la fin, dois-je cela? D'ACCORD. Donc, je vais mettre en retrait chacun d'eux. Je vais mettre en évidence tous cela, et je vais frapper Tab. Et cela va les pousser partout un peu, de sorte qu'il est facile pour moi pour voir ce qui est dans la boucle. Et puis, je vais terminer. Disons. D'accord? Or, dans cette boucle qui Je suis building-- whoops, faire ce que vous pouvez see-- Je dois mon compteur j. Je vais il a commencé à 0. Combien de fois je veux pour aller à travers cette boucle? AUDIENCE: 10 fois. BRIAN Scassellati: 10 fois. Alors quel numéro dois-je mettre ici? AUDIENCE: 9, 10. BRIAN Scassellati: 9, 10, quelqu'un a à dire 11, non? Je voulais deux points avant et de mettre i inférieur à 2. Je voulais huit points, Je mets i moins de 8. Maintenant, je veux aller à 10 fois, donc je mis j inférieur à: AUDIENCE: 10. BRIAN Scassellati: 10. Nous y voilà. Et qu'est-ce que je fais à la fin pour j? ++, Incrémenter. D'ACCORD. Maintenant, voici la partie difficile, ce qui est qui va se passer en ce moment si je fais cela? Vais-je imprimer 10 images? ENCEINTE 27: Je pense que ils vont tous être les mêmes. BRIAN Scassellati: Ils vont être la même, non? Parce que chacun d'entre eux sont toujours en cours de mettre deux points au début. Mais je ne veux pas tous à avoir deux points au début. Combien de points puis-je veulent au début? AUDIENCE: Modification. BRIAN Scassellati: Je veulent que ça change, non? Alors, que dois-je ici qui change chaque fois que la boucle passe par? AUDIENCE: Nombre de points, j. BRIAN Scassellati: j, le nombre de points. Donc, je peux changer cela pour être j. La première fois à travers le boucle, qu'est-ce que cela va être? Que dois-je mis j au premier? AUDIENCE: 0. BRIAN Scassellati: Alors, combien de fois vais-je faire cela? 0. Le deuxième passage dans la boucle, les j va être une parce que je l'incrémenter. Combien de points vais-je imprimer? 1. Le troisième passage dans la boucle, combien de points vais-je imprimer? AUDIENCE: Trois. BRIAN Scassellati: j va être 3. Combien de points vais-je imprimer? Oh, désolé, j va être 2. Combien de points vais-je imprimer? AUDIENCE: 2. BRIAN Scassellati: 2. OK, donc je vais continuer à incrémentation que nous avançons. Que diriez-bas? Ce qui se passe ici? Je ne veux pas 8 toujours à la fin plus? ENCEINTE 28: 10. BRIAN Scassellati: Je veux 10 points? Je veux que ça change, aussi. Alors, comment puis-je veux que ça change? AUDIENCE: [inaudible]. BRIAN Scassellati: Eh bien, si je avoir cinq points au début, combien de points puis-je obtenir à la fin? AUDIENCE: Cinq. BRIAN Scassellati: Si je dois six points au début, combien puis-je obtenir à la fin? AUDIENCE: Quatre. BRIAN Scassellati: Si je suis sept points au début, combien puis-je obtenir à la fin? AUDIENCE: Trois. BRIAN Scassellati: Si je l'ai obtenu points j au début, combien puis-je obtenir à la fin? 10-j. D'ACCORD. Essayons donc de cela. Donc, je vais sauver notre programme de lapin. Une fois de plus, nous allons effectuer un zoom arrière. Nous descendons à notre terminal. Nous allons effacer. Et agrandir. Nous ferons de notre programme de lapin, encore une fois. Et nous allons l'exécuter. Uh-oh. Attendez, nous allons effectuer un zoom arrière. Ai-je obtenir 10 images? Eh bien, comment de nombreux lapins je ne vois là-haut? 1, 2, 3, 4, 5, 6, 7, 8, 9, 10. Je me suis 10 images. Sont-ils tous les mêmes? AUDIENCE: Ouais. Non. BRIAN Scassellati: Non Ce premier, le lapin est loin sur la gauche. Et ici, le lapin est loin sur la ENCEINTE 29: Droit. BRIAN Scassellati: Donc, qu'ai-je oublié de faire? ENCEINTE 30: Début d'une nouvelle ligne. BRIAN Scassellati: ai oublié pour commencer une nouvelle ligne, nouveau. Même erreur que je faisais avant. Très bien, allons corriger cela. Maintenant, je dois encore le code là-bas pour faire une nouvelle ligne. Pourquoi at-il pas fonctionné? ENCEINTE 31: Il est pas à l'intérieur de la boucle. BRIAN Scassellati: Oh, il est pas à l'intérieur de la boucle. C'est vrai. Il est assis à l'extérieur ici. Et la boucle est tout qui est à l'intérieur de ce texte. Donc, je vais passer cet intérieur de la boucle. Et je vais Tab en face d'elle à montrer qu'il est à la bonne place. Et maintenant, nous allons enregistrer de nouveau. Nous allons effectuer un zoom arrière. Nous allons passer à notre terminal. Agrandir. Nous refaisons notre programme de lapin. Et maintenant, maintenant nous avons nos 10 cadres. [APPLAUDISSEMENTS] BRIAN Scassellati: OK. Ainsi. Voici notre boucles for imbriquées. Nous étions en mesure de générer dans le boucle intérieure combien de points je voulais à imprimer, au début, à la fin. Et la boucle externe contrôlée le nombre d'images que je construisais. Nous avons commencé avec une petite le problème de noyau, et nous avons construit à partir de ce point. Bien. Faisons un pas de plus. Tu es prêt? Il ya une chose ici où nous avons fait un peu arrivés plus de complexité que nous avons besoin. Nous allons jeter un coup d'oeil. Donc, dans notre programme de lapin, si je Zoom arrière ici, Je fais effectivement partie de la même chose encore et encore. Que fais-je que ce genre de la même chose répétée deux fois? ENCEINTE 32: Imprimer les points. BRIAN Scassellati: Oui Je imprime deux fois ces points. Vraiment, je devrais avoir ce commentaire ici. Je imprimer certains points à la en commençant, juste ici. Et puis je imprimer certains points à la fin. Et je fais genre d'exactement la même chose. Ce que nous allons commencer travailler dans les prochaines semaines est d'être capable de prendre ces blocs de code que nous utilisons encore et encore, et à travers un processus appelé l'abstraction, nous allons les sortir et écrivez-les une fois pour que nous puissions ensuite réutiliser encore et encore. Essayons donc de cela. Prêt? Nous allons prendre ce bloc de code. Et je vais le sortir de là. Et je vais define-- vers le bas vers le bas, Je vais écrire une nouvelle fonction. Il ne va rien retourner. Et je vais l'appeler printDots. Il va prendre un argument un entier qui howManyDots dit que je devrais imprimer. Et maintenant, au lieu d'imprimer des points j, je vais imprimer dire howManyDots je devrais imprimer. Et il ya un petit problème ici. Quelqu'un sait-il ce qu'il est? Que dois-je qui est listée ici qui est pas défini? AUDIENCE: [inaudible] BRIAN Scassellati: Eh bien comment de nombreux points sont définis jusqu'à ici, mais je suis en utilisant cette variable i. Donc, je vais prendre cette variable i et je vais le définir dans ici au lieu. Alors maintenant, il va stay-- oops, a obtenu le verrouillage des majuscules somehow-- je suis va garder i bas ici. Alors maintenant, voici ma petite fonction ou sous-routine, et il dit, combien de points vais-je imprimer? Et ça va aller travers cette boucle et imprimer encore et encore. Je peux ensuite modifier mon programme ici. Et qu'ai-je appeler cette fonction? printDots. Donc, je vais appeler printDots. Combien de points que je veux imprimer la première fois devant le lapin? AUDIENCE: j. BRIAN Scassellati: j. Combien de points que je veux imprimer à la fin, après le lapin? 10-j. Et il ya une chose que je suis absent. Comme vous l'avez vu dans la conférence d'aujourd'hui, nous allons déclarer printDots au-dessus pour donner le prototype. D'ACCORD. Donc ce que je fais est je l'ai essayé de isoler la partie réutilisés code que je l'ai fait maintes et maintes fois. Et je l'ai essayé de le sortir de telle sorte que tout cela est contenu dans un seul endroit. De cette façon, si je dois une erreur quelque part, Il me suffit de le fixer en un seul endroit. Bien. Donc, nous allons l'enregistrer. Et faisons en sorte que cela fonctionne. Alors sortons. Nous allons à nouveau à notre terminal. Nous allons l'agrandir. Nous allons faire ce processus de lapin. Oh. Et il m'a donné un avertissement. Qu'est-ce qu'il me dit? Eh bien, dans l'une de ces Parfois, vous voulez toujours pour faire défiler jusqu'à la première error-- maintenant sur celui-ci, je ne ai qu'une. Il me dit en bunny.c, sur la ligne 8, colonne 9, il ya un problème. Il dit, vous avez déclaré cette i variable et vous avez pas utilisé. Maintenant, normalement, que ce pas la pire erreur. Voilà une question facile à résoudre. Et en fait, nous ne pouvons revenir en arrière. Nous pouvons revenir à Bunny. Et dans ce cas, tout ce que nous avoir à faire est de se débarrasser de i, parce que nous ne sommes pas à l'aide i sein principale plus. Nous sommes en train de l'utiliser au sein de notre sous-routine. Alors sauvons cela. Nous allons revenir. Et agrandir. Nous allons une fois de plus faire lapin. Et il ya encore une fois nos 10 cadres. D'ACCORD. Chaque fois que vous êtes donné un procedure-- Ouais. ENCEINTE 33: Je dois a-- Je suis confus. Pouvez-vous revenir sur le code? BRIAN Scassellati: Yep. ENCEINTE 33: Donc, quand vous avez écrit votre prototype, l'argument que vous il avait nommé a été appelé howMany? Mais, below-- BRIAN Scassellati: Oh oui. ENCEINTE 33: les --called quelque chose différent, je ne comprends pas. BRIAN Scassellati: Pourquoi sont-ils différents. Voilà donc une excellente question. Donc la question était, jusqu'à ici, je l'ai écrit howMany, et en bas, je l'ai écrit howManyDots. La raison est que dans votre prototype, il est effectivement pas attention les noms que vous mettez dans. Tout ce qu'il se soucie vraiment de est qu'il est un entier. Il veut savoir la forme de ce que vous mettez dans. Maintenant stylistically-- oops-- ce que je devrais faire, est que je voudrais faire ceux-ci correspondent. D'ACCORD. Parce que ça va être le garder plus facile pour moi de me rappeler. Mais ce fut mon erreur Ouais. ENCEINTE 34: Et donc pour le prototype fonctionne, tout simplement écrit cette ligne, écrit le prototype, permet que la fonction qui vient juste en dessous pour aller à la fin et récupérer ce que cela signifie? BRIAN Scassellati: Ce que cela signifie est lorsque le compilateur passe à travers, il va de la partie supérieure de votre code pour le fond. Et ce que ce prototype est, est qu'il est essentiellement une promesse. Il dit, il va y avoir une fonction définie quelque part. Il va être appelées printDots. Et il va prendre un argument que ça va être un entier et il va revenir rien, type void. D'ACCORD. Je vous promets que ça va être défini quelque part sur la route. Mais chaque fois que vous voir que, comme vous descendez à travers le reste de ma fonction principale, je veux vous traiter cela comme une fonction qui prend une entrée entier. Et donc quand le compilateur descend par ce biais, il voit cette promesse. Et quand il descend, continue à aller, continue à aller, il trouve la première fois printDots est mentionné. Et il dit: Oh, vous donnez moi ce j. j est un nombre entier. Eh bien, vous me promis que voulez- un entier et que ce droit. C'est bon. Et puis finalement, en baisse tout en bas, avant de passer à la fin de mon fichier, je fais ma promesse et je le définis. D'accord? ENCEINTE 35: Alors, il l'saves-- programme permettra d'économiser des espaces vides qu'il remonte et remplit à la fin? BRIAN Scassellati: Il est pas à propos de l'allocation de mémoire. Il est fait à peu près ce que Type vous attendez-vous à voir. Si cette chose avoir un un argument ou cinq arguments? Devrait avoir entiers être qui lui est donné, ou chaînes? Voilà tout ce qu'il est à la recherche à faire est de vérifier, vous me donnez la bon type d'argument. D'accord? Bien. Permettez-moi de vous laisser avec un autre peu à regarder. Art ASCII est pas le grand modèle de l'animation telle qu'elle est aujourd'hui. Mais certaines personnes bien sûr prendre les choses et ils poussent à leurs extrémités. Ceci est, comme David a démontré en lecture, un morceau de code que vous devriez en aucun cas essayer de vous reproduire. Parce qu'il est terrible stylistiquement. En fait, il est conçu pour être aussi difficile que possible de lire. D'ACCORD. Donc, pour faire encore une fois, nous allons faire un zoom ici. Je vais y aller maintenant, changement de répertoire. Je vais monter d'un niveau, revenir à mon espace de travail. Je vais donc changer de répertoire dans ce autre répertoire que je l'ai créé. Et cela est l'international Programmation C Obfuscated concours. Des moyens brouillées que dure que possible à comprendre. Alors s'il vous plaît, ne soyez pas effrayés si vous regardez à cela et aller, je ne peux pas le lire. Voilà le point de lui. D'accord? Mais, nous avons cette merveilleux programme que je suis va regarder en tapant simplement plus. Et nous allons voir si je peux faire un zoom arrière juste un peu, de sorte que vous pouvez le voir Et voilà le programme. Il est nommé endo.c. Et il semble que ce seau avec genre des lettres F-L-U-I-D en elle. Ceci est en fait un programme. Il est écrit dans le plus obscur manière que les auteurs auraient pu éventuellement écris le. Mais il est un merveilleux petit morceau qui génère un modèle de la dynamique des fluides. Et donc nous allons donner ce modèle une entrée qui ressemble à ceci, d'un staired ensemble de conteneurs avec un peu de liquide, quelques-unes liquide, au sommet. Et nous l'aurons simuler qu'est-ce qui lui arrive. Je vais donc appeler cette fonction, endo. Et je vais lui donner ce que fichier d'entrée que je connaisse. Et il est de notre quintessence de l'art ASCII. Un simulateur de dynamique des fluides complète l'exécution en quelques lignes de code. Maintenant ce qui est en fait vraiment étonnante au sujet de ce petit programme est que je veux arrêter ça maintenant, donc je vais utiliser ce commandement? AUDIENCE: Control-C. BRIAN Scassellati: Control-C. D'ACCORD. Donc, je vais utiliser Control-C. C qui va l'arrêter. Je vais de nouveau sur CLEAR. Et maintenant, je vais appeler le programme, exécuter le programme, lui-même en utilisant comme entrée. Et nous verrons la dynamique des fluides simulation de ce point de fusion. D'ACCORD. S'il vous plaît ne laissez pas ce programme être la chose qui vous confond. Il est juste afin que nous puissions terminer sur quelque chose de cool et intéressant. D'ACCORD. Bonne chance avec vos ensembles de problèmes. Nous serons heureux de répondre à des questions après la classe. Merci beaucoup, les gars.