[Powered by Google Translate] DAVID J. MALAN: Très bien, c'est CS50 et c'est la la fin de la semaine 1, les cartes sont en étude ainsi et le nombre total de camarades de classe que vous avez cette année est de 745. Et nous sommes tellement heureux d'avoir un si grand nombre d'entre vous au cours ce semestre, mais même si ce cours est si grand, se rendre compte que ce sont ces choses comme des déjeuners vendredi, comme les heures de bureau, 15 personne sections, et ainsi de suite que les sont vraiment destinées à créer ce plus intime environnement. Ainsi, même si nous pouvons recueillir une ou deux fois par semaine, ici à Sanders, sachez que beaucoup de votre expérience dans ce cours va très bien être pratique sur les côtés de vos camarades de classe et le personnel enseignant. Alors nous y voilà, Automne 2012. Ainsi, rappelons que la dernière fois nous avons fini sur une note de imprécision, parle de la représentation des nombres. Et nous avons regardé l'un des échecs qui ont eu lieu, dans le monde réel, quand il est venu à l'incompréhension comment les ordinateurs fonctionnent. Eh bien, aujourd'hui, nous nous pencherons sur un autre de ces idées ainsi que de continuer notre discussion sur le client CS50 et C et ce que cela signifie vraiment au programme. Mais d'abord, juste un couple des annonces tourbillon. Les articles commencent ce dimanche, et la première semaine est toujours un peu d'avance rapide, parce que nous avons juste eu à vos formulaires section. Nous faisons la même chose, maintenant, avec les boursiers d'enseignement, maintenant qu'ils connaissent leurs horaires, de sorte que nous visons, par Samedi matin, pour assurer le suivi avec vous avec votre section missions et TF. Sachez que ils vont commencer le lendemain, dimanche ou le lundi ou le mardi. Et puis, nous allons tenir compte des changements de section qui se présentent dans les jours à venir. Les heures de bureau, en attendant, sont, encore une fois, ce soir, à 20 heures 11, en Annenberg, ainsi que demain soir. Même si les ensembles de problèmes sont généralement dus les jeudis à midi, réalisez que vous avez jusqu'à cinq jours de retard à dépenser, par conséquent, la disponibilité des heures de bureau le jeudi si vous encaissez un de ces jours de retard et, par conséquent, présenter quelque chose le vendredi. Permettez-moi de suggérer que Scratch est l'un des plus amusant, parmi les plus faibles séries de problèmes clés. Et je voudrais accrocher ces jours de retard, de façon stratégique, juste plus tard dans le semestre quand la vie commence à obtenir de la manière avec midterms et d'autres classes. 1 Set problème, quant à lui, sera affiché sur le cours de site ce vendredi, comme ce sera au pied du cours grâce à la vidéo, qui sera filmé à 2:30 h le vendredi puis mis en ligne dès le lendemain. Nous avons donc pris fin lundi. Je veux - en fait, une note ici. Parce que les classes - parce que Sanders ne prêtent pas exactement lui-même occasionnel Q & A dans les deux sens terriblement bien, nous sommes va essayer quelque chose de nouveau cette année, lequel si vous n'êtes pas à l'aise de votre main ou que vous venez de préfèrent ne pas lever la main dans une salle comme ça, nous allons avoir quelques-uns des compagnons d'enseignement et AR effectifs cs50.net/discuss cours de lecture. Donc, si vous avez une question, parce que j'étais complètement sait pas quelque chose ou si vous êtes curieux au sujet de certains sujet, essayez de poster sur la liste. L'étiqueter avec une étiquette de conférence, et nous ferons de notre mieux aujourd'hui et la semaine prochaine - nous allons essayer cela - pour aligner soit par voie électronique, en ligne, ou si elle se sent comme nous le devrions vraiment répondre en masse, l'un des compagnons d'enseignement ou de CA va lever la main et demander anonyme en votre nom. Donc, nous allons opter pour cette solution et voir comment cela fonctionne. Mais, par tous les moyens, continuer à lever les mains que vous le souhaitez. Donc, la dernière fois que nous a révélé que 10% ou un dixième n'est pas, en fait, 0,1, comme vous avez appris il ya plusieurs années. C'est en fait, une valeur comme ça. Mais ce n'est pas tout à fait vrai, pas vrai? Nous venons d'avoir cette contrainte dans les ordinateurs grâce à quoi, si vous seulement une quantité limitée de mémoire, RAM ou plus spécifiquement bits, eh bien, il n'y a qu'un nombre fini des choses que vous pouvez représenter. Par exemple, si nous avons le nombre zéro, et nous voulons représenter en binaire, en utilisant huit bits, où un bit, encore une fois, est un zéro ou un, nous pourrions le représenter comme 00000000. Et c'est un peu inutilement verbeux. Tout comme dans le système décimal dans le monde réel, généralement, si vous voulez écrire le nombre 123, nous les humains n'ont probablement pas écrire 00000123 même si, fonctionnellement, c'est exactement le même nombre. Nous venons de déposer des zéros, pour ainsi dire. En binaire, nous pouvons faire la même chose. Binaire et zéro, zéro et zéro binaire est juste. Vous avez seulement besoin d'un seul bit. Mais encore une fois, l'unité la plus commune de mesure dans le monde de l'informatique est l'octet, huit bits. Tout simplement parce que un bit, assez inutile. Huit bits, pas très utiles, mais au moins c'est plus utile qu'une seule unité de mesure. Donc, avec huit bits, nous allons représentent généralement binaire. Nous avons donc ici les chiffres de zéro, un, deux, et puis, comme Nate a fait dans notre vidéo mercredi dernier, nous pouvons continuer compter jusqu'à sept, de huit. Et puis, si l'on utilise les bits de plus en plus, nous peut compter jusqu'à l'infini. Mais si vous avez seulement un nombre fini de ces bits, comme c'est le cas dans tout système informatique, ou même des missiles système, eh bien, en effet, vous avez seulement une quantité finie de précision. Donc, si vous voulez représenter le nombre comme 0,1, ainsi, le ordinateur doit choisir. Et si elle ne dispose que d'un nombre fini de chiffres, il peut représentent, il peut se rapprocher de 0,1 pour vous, mais il ne peut pas nécessairement vous donner exactement la valeur que vous souhaitez. Et ce n'est que l'un des défis de l'informatique, sous le capot, heureusement. Alors que nous allons plus loin dans le semestre, ce niveau inférieur détails deviennent beaucoup moins intéressant, mais certainement l' application de ces idées peuvent avoir un monde très réel ramifications. L'un est un amusant petit. Combien d'entre vous avez vu le film étonnant espace de bureau? Si vous n'avez pas, c'est votre non-officiel devoirs pour la semaine. Mais en l'espace de bureau, les boursiers dans ce film se avantage de précisément cette idée, mais en fait ils ont volé partir d'un autre film que vous pourriez avoir vu, même des années avant. Alors laissez-moi vous donner quelques secondes de cette bande-annonce de ce film incroyable et c'est très bien académique pertinente. [JOUE MOVIE] En fait, je suis d'être promu. Je peux programmer un virus qui va déchirer ce que placer beaucoup de temps. Eh bien, comment ça marche? Chaque fois qu'il ya une transaction bancaire où l'intérêt est calculée, il ya des milliers par jour, l'ordinateur se retrouve avec ces fractions de cent. Mais je ne vais pas faire quelque chose d'illégal. Illégal? Samir, c'est l'Amérique. Vous devez le jure devant Dieu. Si personne ne sait à ce sujet mais nous, tout va bien? Aucun membre de la famille, pas de copines, personne. [Inaudible]. Ne vous inquiétez pas, mec, je ne dirai rien non plus. [FILM FIN] Très bien, alors peut-être que j'ai trouvé ce film mieux que la plupart les gens d'ici, mais en tout cas, le virus qui ils étaient essayant de créer - et dans les films, à tout moment qu'ils allaient appeler quelque chose d'un virus, ce n'est généralement pas réellement un virus. C'est juste un programme que quelqu'un a écrit pour faire quelque chose. Et dans ce cas, les gars étaient en train d'écrire un programme qui ont profité de leur société appelée Innotech système informatique, grâce à quoi les ordinateurs, aussi, même si elle qui concerne l'argent, ne peuvent pas nécessairement représentent de l'argent avec précision. Donc, même si vous avez 0,10 $ dans votre compte bancaire, 0,10, ainsi, l'ordinateur peut effectivement penser que vous avez ce cents nombreux dans votre compte bancaire. Et donc ce que ces gars-là qui aspirent à faire - et ils volé l'idée, il s'avère de Superman III, où Richard Pryor fait la même chose - ils étaient essentiellement l'écriture de programmes qui aspirent à prendre tous les fuite numéros, toutes les minuscules, minuscules, minuscules fractions de penny, et siphonner ceux hors de sorte que les humains juste pensée, oh, c'est seulement 0,10 $, mais tous ceux numéros de suivi éventuellement s'accumuler. Ainsi, une merveilleuse idée et ça s'est retourné contre hilarante dans ce film en particulier. Mais dans le monde réel, aussi, il ya beaucoup plus en ce qui concerne implications de ces sortes de choses. Et l'une des raisons pour plonger dans le domaine de l'informatique la science est, encore une fois, son applicabilité ne pas l' sciences de l'ingénieur seul, mais juste pour d'autres domaines aussi. Il s'agit donc d'un aspect moins enjoué sur ce qui peut aller mal, mais c'est aussi l'ouverture des yeux tout à fait, je pense que, quand il s'agit de comprendre exactement comment omniprésente des technologies telles que ordinateurs et la programmation ou de nos jours, sous la forme d'un logiciel. Donc ce clip suivant est à peu près six minutes, continue où nous nous sommes quittés la dernière fois, mais qui nous permet de regarder un peu plus en profondeur à celle de ces questions. Permettez-moi de passer directement à l'endroit où nous nous sommes quittés, qui était juste ici. Et nous avons une partie de deux, pendant environ six minutes ici. [JEU VIDEO] En proie à la technologie moderne des fusées. En 1991, avec le début de la première guerre du Golfe, le Patriot missile a connu le même genre de problème de conversion de nombre. Et, par conséquent, 20 personnes, 20 soldats américains ont été tués et environ 100 autres blessés, lorsque la Patriot Act, qui devait pour se protéger contre les Scud entrants, n'a pas réussi à tirer un missile. Quand l'Irak a envahi le Koweït et l'Amérique a lancé un désert Tempête au début de 1991, batteries de missiles Patriot ont été déployés pour protéger l'Arabie saoudite et en Israël du irakienne Attaques de missiles Scud. Le Patriot est un américain à moyenne portée sol-air système, fabriqué par la société Raytheon. La taille de l'intercepteur Patriot lui-même, il s'agit de environ 20 pieds de long et pèse environ 2.000 livres. Et il porte une ogive d'environ - je pense que c'est à peu près 150 livres. Et l'ogive lui-même est un explosif puissant qui a des fragments autour de lui. Le boîtier de l'ogive est conçu pour fonctionner comme des chevrotines. Les missiles sont effectuées quatre par conteneur et sont transporté par un semi-remorque. Le Patriot système anti-missile remonte au moins à 20 ans. Il a été initialement conçu comme un missile de défense aérienne à abattre les avions ennemis, dans la première guerre du Golfe. Lorsque la guerre est arrivée, l'armée a voulu l'utiliser pour tirer Scud vers le bas, et non pas les avions. L'armée de l'air irakienne n'était pas tant d'un problème, mais l'armée s'inquiétait de Scuds. Et alors ils ont essayé de mettre à niveau le Patriot. Intercepter un missile ennemi se déplaçant à Mach 5 allait être assez difficile. Mais quand le Patriot a été transporté en service, l'Armée n'était pas au courant d'une modification irakienne qui ont fait leur Scuds presque impossible à atteindre. Ce qui s'est passé est le Scud qui étaient venir en étaient instables. Ils ont été vacillant. La raison en était que les Irakiens, afin d'obtenir 600 kilomètres à l'extérieur d'un missile large de 300 kilomètres, a pris poids de l'ogive avant et fait l'ogive briquet. Alors maintenant, le Patriot essaie de venir à la Scud, et la plupart des l'époque, la grande majorité du temps, il serait juste voler par le Scud. Une fois que les gestionnaires de réseau Patriot réalisé le Patriot a raté sa cible, ils exploser l'ogive Patriot. Pour éviter les pertes possibles, il a été autorisé à tomber par terre. C'est ce que la plupart des gens ont vu, comme des boules de feu de gros dans le ciel, et mal compris l'interception de communications d'ogives Scud. Bien que, dans le ciel nocturne, les Patriots semblent être Scud a réussi à détruire, à Dhahran, il n'y aurait pas erreur sur ses performances. Là, le système radar Patriot perdu la trace d'un entrant Scud et jamais lancé en raison d'une faille logicielle. C'était les Israéliens qui le premier a découvert que la plus le système était élevé, plus l'écart de temps est devenu, en raison d'une horloge incorporée dans l'ordinateur du système. Environ deux semaines avant la tragédie de Dhahran, l' Israéliens signalés au ministère de la Défense que le système a été une perte de temps. Après environ huit heures de course, ils ont remarqué que le système devenait nettement moins précis. Le ministère de la Défense a répondu en disant tout les batteries Patriot de ne pas laisser les systèmes pendant une longue période. Ils n'ont jamais dit ce que fut longtemps - 8 heures, 10 heures, 1000 heures. Personne ne savait. La batterie Patriot stationnés à la caserne à Dhahran et son horloge interne défectueuse avait été sur plus de 100 heures sur Dans la nuit du 25 Février. Il suivies temps avec une précision d'environ un dixième de seconde. Maintenant, un dixième de la seconde est un nombre intéressant parce il ne peut pas être exprimé en binaire, exactement, ce qui signifie il ne peut pas être exprimé exactement l'une quelconque moderne numérique ordinateur. C'est difficile à croire. Mais l'utiliser comme un exemple. Prenons le nombre d'un tiers. Un tiers ne peut pas être exprimée en décimal, exactement. Un tiers est de 0,333 passait à l'infini. Il n'y a aucun moyen de le faire avec une précision absolue en décimal. C'est exactement le même genre de problème qui s'est produit dans le Patriot. Plus le système a fonctionné, pire le temps est devenu l'erreur. Après 100 heures de fonctionnement, l'erreur dans le temps n'est environ un tiers de seconde. Mais en termes de ciblage d'un missile se déplaçant à Mach 5, il a provoqué une erreur de suivi de plus de 600 mètres. Ce serait une erreur fatale pour les soldats à Dhahran. Ce qui s'est passé est un lancement Scud a été détectée par l'alerte précoce satellites et ils savaient que le Scud était venue dans leur direction générale. Ils ne savaient pas d'où ça venait. Il appartient maintenant à la composante radar de la Patriot système, la défense de Dhahran, de localiser et de suivre le missile ennemi entrant. Le radar était très intelligent. Vous serait effectivement suivre la position du Scud, puis prédire où il serait sans doute la prochaine fois que l' radar envoyé une impulsion en sortie. Cela s'appelait la porte en distance. Puis, une fois que le Patriot décide temps a passé pour aller sauvegarder et vérifier l'emplacement suivant pour cette détectée objet, il remonte. Alors, quand il est retourné à la mauvaise place, il voit alors pas s'opposer, et il décide qu'il n'y a pas d'objet. Il s'agissait d'une fausse détection et laisse tomber la piste. Le Scud entrant disparu de l'écran radar. Et quelques secondes plus tard, il a percuté la caserne. Le Scud 28 et tué était le dernier tiré pendant la première guerre du Golfe. Malheureusement, le logiciel mis à jour est arrivé à Dhahran le jour suivant. Et la faille du logiciel avait été fixé, la fermeture d'un chapitre dans l'histoire mouvementée du missile Patriot. PATRIOT est en fait un acronyme pour "Tracking multiéléments Intercepter la cible. " D'accord, donc un résultat beaucoup plus triste de ne pas tout à fait la compréhension de ce monde. Et les plats à emporter, vraiment, dans le film, c'est que la solution il a été redémarrez votre système de défense antimissile chaque fois dans un tout. Et à nouveau, l'un des objectifs de ce cours, certainement à une échelle plus modeste que ces applications, est de tout le monde vraiment ouvert les yeux à exactement comment vous allez machines à fabriquer faire ce que vous voulez faire et comment vous allez à faire cela correctement, tandis que le long de la façon dont il fait ainsi, élégante, et ainsi de suite. Et aujourd'hui, nous allons plonger dans un peu plus de ceci, mais de sorte que nous n'avons pas aller trop vite, en particulier pour ceux qui sont moins confortable, mais aussi pour que nous puissions conserver l'intérêt des ceux qui sont plus à l'aise, nous allons juste commencer rapidement avec un peu de récapitulation de certaines de ces idées. Et encore une fois, demandez à l'écart, en personne ou en ligne, si vous avez des questions afin que nous puissions garder tout le monde sur la même page. Ainsi, l'appareil CS50, quick step arrière, est ce qui, dans vos propres mots? Ce n'est pas grave si vous n'avez aucune idée de ce que ces mots peuvent être encore. [Inaudible] Ok, donc une interface universelle pour - que nous pouvons tous partager. Tout à fait. Donc, on pourrait, par exemple, vous dira d'aller dans une certaine site web, télécharger ce logiciel pour Mac OS. Télécharger gratuitement ce logiciel pour Windows, configurer dans de cette façon et que. Mais la réalité est alors nous nous heurtons à d'innombrables techniques appuyer les questions. Et aussi ces jours-ci, une grande partie de ce qui se fait côté serveur, dans le monde de l'informatique, en particulier quand il s'agit de le développement web et les applications Web, est en fait fait très souvent sur les ordinateurs Unix ou Linux, par opposition à Mac ou PC Windows. Ainsi, parmi les bons côtés, puis, à l'aide de ce qu'on appelle le CS50 Appliance est que nous aurons tous le même environnement. Donc tout le monde est sur la même page, peu importe le matériel dont vous venue sur le campus, mais aussi avec les barboteurs seront exactement le même environnement que vous allez utiliser pour semestre de fin ainsi pour le développement web, et aussi dans l' avenir pour les applications du monde réel de celui-ci. Ainsi, plus concrètement, l'appliance CS50 est une pièce exempte de un logiciel qui vous permet de lancer un autre système d'exploitation, Linux, dans ce cas, sur votre propre ordinateur, dans une fenêtre. Maintenant, vous ne pouvez pas télécharger de l'appareil. Vous avez besoin d'un programme avec lequel jouer ou courir l'appareil. Et ce morceau de logiciel est généralement connu comme un hyperviseur. Hyperviseurs se présentent sous la forme de produits tels que VMware, Virtual Box, Parallels. Toutes sortes de sociétés rendre les logiciels, libres et commerciale, de même. Ce que vous verrez dans un problème Set 1 sont des instructions sur la façon de obtenir un logiciel gratuit avec lequel exécuter l'appliance CS50. Et une fois que vous le faites, vous aurez, dans une fenêtre sur votre Mac ou PC, un environnement de bureau qui ressemble tout à fait comme ça, où il a un menu Démarrer-comme la chose dans le en bas à gauche. Il dispose d'un dossier d'accueil, ou d'un répertoire d'accueil, en haut à gauche là, une poubelle, et ainsi de suite. Donc, nous allons démêler les détails nécessaires que nous allons. Mais maintenant, nous allons commencer à plonger dans C. Donc C est ce langage de programmation, dans le même esprit de Scratch, mais beaucoup moins graphique, mais, ironiquement, loin plus puissant une fois que vous avertis avec elle. Donc, en C, on écrit des programmes en écrivant du code source, ce qui est cette syntaxe anglaise, similaire aux chaussettes démonstration que nous avons fait la dernière fois qui vous permet de vous exprimer avec assez de précision, si arcanely, à l'ordinateur. Alors, quel genre de logiciel ne produit que vous avez réellement besoin d'écrire des programmes dans un langage comme C, basée sur notre conversation, le lundi? [Inaudible] OK, vous avez juste besoin d'un éditeur de texte. Vous n'avez pas besoin d'un logiciel spécial en soi d'écrire des programmes. Vous avez juste besoin d'un éditeur de texte comme le Bloc-notes, sous Windows, TextEdit sur Mac, ou quelque chose qui s'appelle gedit, dans le monde de Linux, que nous allons utiliser ici. Et c'est tout, pour écrire les programmes. Mais l'écriture n'est que la moitié de l'équation. Vous devez ensuite pour les faire fonctionner. Mais pour exécuter des programmes - vous ne pouvez pas exécuter du code source. Vous avez au lieu de faire ce qu'il faut en premier? Ouais. DAVID J. MALAN: Vous devez vous le compiler. Et quelqu'un d'autre, la compilation du code source signifie - [Inaudible] DAVID J. MALAN: Exactement. Le traduire en zéros et de uns. Parce que chacun de nous, de nos jours, ont des ordinateurs qui ont UC, dont presque tous sont fabriqués par une société appelée Intel, et Intel Inside, signifie qu'il ya ceci à l'intérieur de votre cerveau informatique, connu sous le nom de la CPU. Et l'une des choses que ce que le cerveau fait est, il sait comment comprendre les modèles de zéros et de uns. Il sait ce motif de bits représente une addition, ce qui modèle représente soustractions, ce modèle de bits représentent l'impression, et la création d'un son audible. Donc en bref, le processeur, couplé avec le système d'exploitation, qui est une partie de logiciel qui s'exécute sur le processeur, pour ainsi dire. Ensemble, ces deux éléments savez comment faire fonctionner des programmes qui nous, les humains écrire. Donc, si je vais dans l'appliance CS50 ici, j'ai besoin d'ouvrir un éditeur de texte et je ne peux accéder à cette dans un couple des manières. Je peux soit aller dans le menu, la programmation, et puis je peux choisir - nope, pas ce menu. Je peux aller Accessoires / gedit ici pour ouvrir mon éditeur de texte peu. Ou, plus simplement, je peux cliquer sur cette petite icône en bas coin supérieur gauche. Et maintenant, je reçois cet environnement ici. C'est assez penser à un éditeur de texte simple, avec juste une ou deux différences. Dans la partie supérieure, où se trouve le curseur clignote maintenant, c'est là que Je peux commencer à écrire mon code. Dans le fond est cette chose appelée la fenêtre du terminal. Et ce genre de choses que je peux faire dans ce dite fenêtre de terminal? [Inaudible] Ok, donc je vais exécuter des commandes. Et certaines des commandes que nous avons rencontrés le lundi étaient un peu cryptiques au début, mais ls pour la liste, cd pour changer de répertoire, rm pour supprimer. Donc, c'est une sorte de façon vieille école de navigation de votre ordinateur, en utilisant uniquement le clavier et commandes textuelles, et non pas, en général, à l'aide d'une souris. Mais nous allons voir, d'ici peu, ce nous donne en fait une peu plus de puissance et un peu plus de précision avec lequel nous exprimer. Et puis là-bas, à gauche, nous allons juste pour voir, que nous commençons logiciel d'écriture, un petit résumé de l' programme que nous avons écrit en haut à gauche. Mais nous allons voir que de nouveau avant longtemps. Alors, faisons quelque chose d'assez simple ici. Permettez-moi d'abord aller de l'avant et aller dans Fichier, Enregistrer, et je suis juste allez cliquer sur jharvard ici, plus à gauche, et jharvard est, encore une fois, le nom de mon dossier, mon fichiers personnels, moi, maintenant étant John Harvard, comme vous tous, sera bientôt John Harvard dans cet environnement. Il a un répertoire d'accueil, Mes documents et ainsi de suite, que je veux sauver, maintenant, ce fichier po Donc, je vais l'appeler hello.c. Ensuite, je vais aller l'avant et cliquez sur Enregistrer, et maintenant que j'ai ici est un onglet appelé hello.c, tellement comme un autre type d'éditeur. Alors maintenant, laissez-moi aller de l'avant et commencer à écrire un programme. int main (void). Et puis je viens de faire la dernière fois, printf, pour l'impression formatés, («Bonjour, monde!" );. Presque complète. Mais il me manque quelques détails. Ce qui manque à ce programme que j'ai vraiment besoin d' il fait de compiler? Ouais. [Inaudible]? DAVID J. MALAN: Ouais, donc j'ai besoin d'inclure la norme I / O bibliothèque. Donc, cela doit aller au-delà principal, donc je vais juste faire de la place pour lui là-bas. Et je vais faire # include. Et remarquez les chevrons là. Et en passant, gedit est un utilisateur peu favorable, si parfois un peu confus, en ce qu'elle tente d'aider votre yeux remarqué ce qui s'aligne avec quoi. Donc, le fait que mon curseur se trouve juste à côté de cet angle support, remarquez comment il est soulignant l'angle autre support de plus celui-ci. Et c'est juste pour attirer mon attention sur le fait que je une symétrie. Et la symétrie dans la programmation est généralement une bonne chose. De même, si je déplace mon curseur à la fin, remarquez comment le accolades ligne pour montrer que, oui, j'ai un processus ouvert et un système fermé, pour ainsi dire. Très bien, et je peux faire autre chose. Il n'est pas strictement nécessaire, mais les bonnes pratiques, de dire retourner 0. Et 0 retour fait quoi pour nous ici? Ou signifie quoi? [Inaudible] DAVID J. MALAN: Mais tout va bien. Et franchement, il est difficile pour beaucoup de se tromper dans un programmer ce court. Donc, je vais être super-explicite que tout va bien. I, l'être humain, quand je lance ce programme, sera probablement jamais voir que 0. En règle générale, ces chiffres qui sont retournés à partir de principal seulement élever leurs têtes pour les humains quand quelque chose va mal. Et vous obtenez un peu de pop up disant erreur système, un, deux, trois, ou quel que soit le nombre, c'est que a effectivement été retourné. Donc, tout chose ne va pas avec ça? [Inaudible] DAVID J. MALAN: Donc, ce n'est pas tant une erreur fonctionnelle mais une esthétique. Je devrais probablement mettre dans un caractère de nouvelle ligne là à l' fin de cette chaîne afin que nous fait déplacer le curseur vers la ligne suivante, et le programme va chercher un peu plus joli. Alors maintenant, laissez-moi descendre dans la fenêtre de terminal et, Save money Et cette chose ici, ça s'appelle l'invite. Il vient de me rappeler qui je suis, jharvard @ appareil, où appareil est le nom de l'ordinateur que je suis sur. Entre parenthèses est ce tilde, le symbole tilde, qui représente quoi? PUBLIC: répertoire d'accueil. DAVID J. MALAN: répertoire d'accueil. Donc c'est juste une notation abrégée pour dire que vous êtes dans votre dossier personnel où tous vos fichiers vont par défaut. Alors maintenant, ici, je peux taper ls pour la liste. Et la seule chose que je vois ici en ce moment est hello.c. Et c'est bien parce que je viens d'écrire cela. Alors laissez-moi aller de l'avant et ne font bonjour. Et notez que je ne suis pas taper make hello.c. Au lieu de cela, je suis seulement en tapant le nom de base du fichier, bonjour. Et de faire, comme nous l'avons vu lundi, sera juste en déduire que je veux le fichier. c. Alors maintenant, j'ai tapé font bonjour. Maintenant, je vois cette commande assez longue et continuera voir encore et encore. Mais pour être clair, clang, le mot qui vient de paraître, c'est le compilateur actuel. Assurez est juste un utilitaire de compilation. C'est juste un programme plus convivial qui me sauve, dans le long terme, d'avoir à taper incroyablement fastidieux à long commandes comme celle-là. Ainsi, vous pouvez exécuter manuellement Clang. Vous pouvez taper tout cela manuellement. Obtient juste très ennuyeux. Et ainsi de faire est tout simplement un programme qui simplifie notre vie et exécute des commandes plus complexes pour nous. Bon, alors maintenant quel fichier dois-je avoir dans mon répertoire courant? Pas seulement hello.c, mais aussi bonjour. Donc, si je veux courir bonjour, rappeler que je dis point slash, où les moyens dot aller dans le dossier en cours, où que vous soyez sont, puis exécutez le programme appelé bonjour, et bien, maintenant, J'ai Bonjour tout le monde. Tout droit, des questions sur le flux de travail ou la syntaxe d' ce que nous venons de faire? Très bien, nous allons donc prendre les choses d'un cran encore. Donc, ce n'était vraiment pas terrible juste écrire un programme qui ne dit jamais bonjour, monde. Nous avons donc changé, le lundi, de dire bonjour, David. C'est un peu plus personnelle, mais tout aussi codé en dur comme le première version. Donc, pas tout à fait convaincante. Mais il existe, en C, en plus des fonctions certainement d'impression, les fonctions qui vous permettent d'obtenir les commentaires de l'utilisateur. Et la façon dont nous l'avons fait, l'autre jour, était la suivante. Avant que je fait imprimer quelque chose, je suis arrivé quelque chose de l'utilisateur. Permettez-moi de faire cela à nouveau. String s, où s est juste un nom arbitraire, ici, pour un chaîne, est égal à GetString. Donc, ce qui a été GetString? Il obtient évidemment une chaîne, basée sur son nom. Mais qu'est-ce, plus techniquement? Il s'agit d'une fonction. Donc, c'est une fonction qui ne vient pas avec C en soi. CS50 personnel a écrit cela. Et donc pour l'utiliser, vous ne pouvez pas inclure stdio.h, Vous devez également inclure quoi? Ouais. Donc cs50.h, qui est juste un fichier que nous avons écrit il ya quelques années. Nous l'avons installé sur l'appareil pour vous à côté tous les fichiers standard. Et si dans ces premières semaines de la classe, nous allons utiliser cela juste pour simplifier le processus de faire très basique des choses comme entrée de l'utilisateur obtenir. Parce que, comme nous le verrons dans quelques semaines, saisie de l'utilisateur obtenir dans un langage comme C est en fait étonnamment complexe, en particulier parce que vous ne savez pas à l'avance, en général, comment beaucoup de choses que l'utilisateur va taper po Et quand vous ne savez pas combien de données vous attendre, vous ne savoir combien de mémoire à allouer. Et si vous avez réellement un utilisateur contradictoire qui essaie de pirater votre système, planter votre ordinateur, eh bien, généralement la première méthode d'attaque est, comme je l'ai fait Lundi, saisir une séquence tout au long de caractères aléatoires, appuyez sur Entrée, et voir ce qui se casse. Parce que généralement, en cas de rupture du programme, qui fait allusion à une faille de sécurité, potentiellement. Il fait allusion certainement à vous, le programmeur, ayant fait un erreur, mais plus dangereusement, vous auriez pu faire un erreur liée à la sécurité, et en général, nous verrons que c'est comme ça que les machines sont compromises à ce jour, à la fois dans le monde du web et des programmes à l' ligne de commande, comme ceci. Très bien. Ainsi, la chaîne s est égal à GetString. Ainsi, plus concrètement maintenant, qu'est-ce que la ligne 6 faire ici? Ainsi, la fonction sur la droite obtient chaîne, prend combien d'arguments? D'accord. Donc, aucun. Un peu de raison vérifier. Un argument, encore une fois, c'est juste une entrée à une fonction pour modifier son comportement par défaut en quelque sorte. Mais dans ce cas, je ne veux pas de modifier le comportement des GetString. Je voulais juste avoir une chaîne. Alors, j'ai mis rien dans les parenthèses, puis j'ai mis un virgule demarking la fin de la ligne de code. Maintenant, le signe égal ne signifie pas l'égalité, en tant que tel. Cela signifie que l'affectation, ce qui signifie mettre ce que devient émise à l'intérieur de tout ce qui est à droite sur la gauche. Ainsi, sur la gauche, nous disons que nous avons déclaré un chaîne appelée s. Et plus précisément, nous avons alloué la mémoire interne de que nous allons mettre les bits qui représente une séquence de caractères. Mais aujourd'hui, nous avons alloué ou déclaré une chaîne. Très bien. Alors maintenant, une fois que j'ai fait cela, je veux brancher la valeur de s, et non pas la valeur de David. Donc, ce n'est pas bien pourquoi? Donc, c'est juste littéralement l'art codé en dur. C'est-à-dire "bonjour, s", ce qui n'est pas ce que je veux. Donc, je peux le faire. Le signe pour cent est un espace réservé, mais maintenant j'ai besoin de imprimer passer dans un second argument. Rappelons que les arguments des fonctions sont séparées par virgules, de sorte que la prochaine virgule ici j'ai mis après cette s la lettre. Et dans ce contexte, aujourd'hui, s est la variable, et printf, lors de la réception de ces deux entrées - la chaîne du côté gauche et le nom de la variable sur la droite - il sera brancher ce dernier dans l'ancien pour nous, et Il suffit d'imprimer une chaîne contenant belle belle que ce soit que nous avons tapé po Donc, nous allons essayer. Aller de l'avant et un zoom arrière, arrière à ma fenêtre de terminal. Zoomer en bas ici. Retapez faire bonjour. Clang semble avoir été relancé. Je vais taper. / Bonjour, Entrée. Rien ne semble être encore le cas, mais c'est à cette invite que je peux taper quelque chose comme Nate, Enter, et maintenant nous avons Bonjour, Nate. Et je peux le refaire avec Rob, et ainsi de suite. Donc, j'espère que maintenant ce programme se comporte comme j'ai l'intention. Maintenant, tout ce qui n'est pas facile à utiliser. Je n'ai aucune idée de ce qui est attendu de moi. Ainsi, nous pouvons certainement nettoyer tout ça un peu. Permettez-moi de revenir ici, et au lieu de simplement plonger et demandant à l'utilisateur une chaîne, permettez-moi de dire explicitement l' l'utilisateur ce que j'attends. Donc printf ("Entrez une chaîne:" ); Donc pas de variables ici. Pas de signes de pourcentage. Juste une simple phrase en anglais. Permettez-moi maintenant aller au fond ici et relancer mon programme. Mais rien ne semble avoir changé. Pourquoi? Je dois le recompiler. Donc, erreur facile à faire. Mais il faut non seulement enregistrer le fichier, mais recompiler le programme. Et si je ré-exécutez make bonjour, maintenant Clang s'exécute. Maintenant, je peux courir. / Bonjour. Et maintenant je vois "Entrez une chaîne:". D'accord. Maintenant c'est un peu plus convivial. Nate, Entrée, bonjour, Nate. Eh bien, nous allons essayer encore et commencer à penser sur les cas marginaux. Ainsi, tout comme dans Scratch, vous êtes encouragé ou sont en cours encouragée dans la spécification de type de réfléchir à ce qui pourrait aller mal si vous ne prévoyez pas tout ce que l'utilisateur peut faire. Bugs, par conséquent, pourrait s'ensuivre. Alors entrez une chaîne - ce qui est un cas coin ici? Qu'est-ce qu'un scénario I, le programmeur, peut-être pas prévu? Ouais. D'accord. Alors que faire si je tape dans un certain nombre comme ça? Très bien. Donc, il fonctionne toujours. Fait aucun sens grammaticalement. Mais au moins, le programme fonctionne. Ce qui est une autre affaire coin? Quelque chose que je ne m'attendais pas. Ouais? D'accord. Donc, nous pourrions faire quelque chose comme un nombre vraiment, vraiment grand. Donc, nous allons faire ici. Permettez-moi de faire un zoom arrière pour une seconde, permettez-moi de souligner. Impossible de copier et coller ici. Très bien. Donc je ne peux pas copier et coller dans cette fenêtre de terminal, donc nous allons il suffit de simuler. Permettez-moi de faire un zoom arrière, allons conclure. Je ne vais pas le faire trop longtemps, car il ne sera pas rompre effectivement dans ce programme. Mais c'est possible. Entrée. Mais il n'a pas fait. Très bien. Mais c'est un cas authentique coin. Et la seule raison qui se comportent correctement, de sorte à parler, c'est parce que l'GetString CS50 fonction est en fait conçue sous le capot, comme nous le verrons dans quelques semaines, pour allouer automatiquement RAM de plus en plus, de plus en plus mémoire du système d'exploitation, quand il se rend compte, wow, vous avez vraiment tapé dans quelque chose d'assez longue. Maintenant, c'est un peu un mensonge. Si l'on fait une pause pendant un bon moment et j'ai tapé dans quelque chose comme 5 milliards de caractères au clavier ici, ou vraiment touché copier-coller un peu, nous avons très probablement pourrait entraîner un plantage du programme. Juste un peu plus difficile à simuler avec un fini laps de temps. Ce qui est une autre affaire coin, nous pourrions essayer? Ouais? Ouais. Alors pourquoi ne pas nous répondons rien? Donc, nous avons à prendre des mesures, parce que sinon, le programme va rester là toute la journée à clignoter. Mais si je viens de taper Entrée - OK, maintenant, semble toujours mal. Ne s'est pas écrasé, mais peut-être il ya maintenant une possibilité de commencer à mettre en œuvre un programme plus rigoureux qui vérifie en fait. Et si la chaîne, la phrase, le mot que je a tapé dans longueur 0, eh bien, j'aurais peut-être crier à l' utilisateur, ou lui dire d'entrer une chaîne à nouveau, de sorte que nous obtenons réellement ce qui ressemble à un comportement correct et pas juste une surveillance complète de ma part. Question à l'arrière? Nombre décimal. Donc, nous pourrions essayer ça aussi. 1,10000005. On dirait que ça va juste travailler réellement bien. Et qui est réellement prévu. Même si nous aurions pu tapé ce nombre là-bas, ou d'un plus grand nombre précédemment, se rendre compte que quand on frappe utilisateur d'entrée et nous utilisons la fonction GetString, ne importe si ce que je tape ressemble à un numéro. Rappelons que selon ASCII, tout sur votre clavier a une valeur numérique qui peut être mis en correspondance avec un caractère, un char. Donc dans ce cas, même si je pourrais taper un numéro, le ordinateur va penser que c'est, pour ainsi dire, comme une chaîne - quelque chose qui ressemble à un certain nombre, mais il est pas réellement un certain nombre. Mais c'est en réalité un enchaînement parfait, parce que maintenant nous pouvons fait la transition vers l'écriture de programmes qui utiliser d'autres types de données. Donc, en plus d'utiliser les caractères, ou plutôt, en plus de l'aide de chaînes, se rendre compte que nous avons d'autres types de données dans C ainsi que dans d'autres langues. Un char, comme son nom l'indique, est un caractère unique. Un flotteur est une valeur à virgule flottante, et c'est juste une fantaisie façon de dire un nombre réel - quelque chose qui a un nombre décimal sert à rien avec des nombres à gauche et / ou droite. Un int est un entier, qui est juste un nombre comme 123. Et maintenant, plus intéressant encore sont des choses comme double. Qu'avons-nous dit une chambre double était la dernière fois? C'est 64, à droite. Ainsi, alors que généralement un flotteur est 32-bit - il est donc aussi longtemps dans la mémoire, il utilise 32 zéros et de uns aux représentent des valeurs - un double est littéralement deux fois, ce qui signifie que vous pouvez représenter des chiffres plus élevés, ou vous pouvez représenter des chiffres plus précis. Ainsi, vous pouvez avoir plus de chiffres après la virgule, mais comme le gars dit dans la vidéo, même quelque chose de simple conceptuellement comme 1/3 ne peut pas être représenté précisément par une ordinateur, parce que finalement vous n'avez plus de bits, et donc vous ne pouvez faire .33333333 tant de fois, à quel point vous avez juste à dire que je suis sorti de la représentation l'espace, je dois juste l'appeler un jour et de le représenter quelque peu imprécise comme ça. Et un long long - nom stupide, mais c'est parce qu'il ya un type de données connue sous le nom longtemps dans C qui est souvent coïncidence 32 bits, tout comme un int est de 32 bits, mais un long long est généralement 64 bits. Donc, cela signifie juste que vous pouvez représenter plus nombreux que cela. Très bien. Donc, si nous voulons réellement commencer à représenter les choses, nous peut-être besoin de plus de formes sophistiquées et c'est pourquoi nous avons chaîne. Ainsi, dans la bibliothèque CS50, ce fichier s'appelle cs50.h, nous avons effectivement déclaré un type de données, pour ainsi dire, appelée chaîne, mais chaîne n'existe pas réellement. Il s'agit, encore une fois, une de ces couches que nous allons éplucher de retour dans une semaine ou deux et jetez-le, et fait regarder sous le capot ce qui est en fait une chaîne, et comment il est représenté. Nous allons aussi examiner les valeurs booléennes. Donc, ce qui était un bool dans le contexte de Scratch? Il est vrai ou faux. Donc, c'est juste une valeur qui est vrai ou faux, allumé ou éteint, 1 ou 0, mais vous voulez voir dans le monde. Donc, en C, grâce à la bibliothèque CS50, qui à son tour comprend une autre bibliothèque sous le capot, nous avons l'accès à un type de données que l'on appelle bool, qui sera littéralement nous permettent d'assigner les valeurs true ou false pour choses dans un programme. Donc, nous allons aller de l'avant ici et d'écrire un petit programme qui fait quelque chose impliquant des nombres à la place. Permettez-moi de revenir sur l'Appliance CS50, laissez-moi aller de l'avant et créer un nouveau fichier appelé ici - disons juste quelque chose de simple, comme math.c. Très bien. Et maintenant, allez jusqu'au sommet de mon programme, je suis va faire l'habituel - # Include, de sorte que je peux utiliser printf, int main (void) - nous y reviendrons, par la suite, ce qui signifie int ici, ce qui signifie que nul ici, mais pour l'instant, sachez simplement que vous devez lancer des programmes de ce genre. Maintenant, je vais aller de l'avant et de dire quelque chose d'un peu différente - printf ("Donnez-moi un nombre:" );. Alors je vais faire int n = getInt, car il Il s'avère que getInt est une autre fonction dans la bibliothèque CS50 en plus GetString. Et maintenant, je vais faire quelque chose de stupide, comme "merci pour l'% d ", pour l'entier décimal, puis par des virgules n, et elle renvoie 0. Encore une fois, retourne 0 n'a rien à voir avec le nombre, je suis demandant à l'utilisateur. Signifie seulement à la fin que tous, sans doute, est bien. Alors laissez-moi descendre dans la fenêtre du terminal ici. Permettez-moi de saisir rendre les mathématiques, entrez. Et quelque chose qui ne va pas. Faire des mathématiques n'a pas fonctionné. Voici le premier de nos messages d'erreur. Pourquoi? Un peu cryptique, mais - Ouais. Donc cs50.h. Encore une fois, surtout au début, vous allez écrire votre premier programme pour pset 1 dans les sections, dans les heures de bureau, et franchement, ça va être écrasante parfois ce que ces choses sont en train de dire. Mais vous vous rendrez compte très vite ils commencent à tomber dans des seaux où celui-ci signifie que vous avez laissé une de l'# includes dans la partie supérieure du dossier. Et Clang, le compilateur, désire vous informer du présent dire, assez fantaisiste, déclaration implicite de getInt fonction est invalide. Très bien. Alors qu'est-ce que ça veut dire? Cela signifie simplement que vous avez implicitement déclaré dans getInt le sens que vous n'avez pas explicitement déclarée. Pour déclarer explicitement int, il faut apprendre à Clang qu'il existe. Et la solution très simple pour cela est de l'enseigner par y compris cette autre fichier, cs50.h, à le haut de votre fichier. Parce que littéralement, ce # include ne s'agit-il dit Clang à peu près à aller trouver le fichier appelé cs50.h, copie, collez automatiquement dans le haut de mon programme pour moi, puis de convertir le code source de zéros et de uns. Mais ce serait évidemment très fastidieux si nous, les humains ont d'aller copier et de coller ces fichiers volumineux tout le temps, si # include fait juste tout ce qui automatiquement sans troubler mon code avec quelqu'un d'autre bibliothèque. Et une bibliothèque est juste un autre fichier contenant des fonctions et d'autres choses que quelqu'un d'autre a écrit, que nous sommes levier pour notre propre bien. Très bien. Essayons encore une fois. Faire des mathématiques. Entrée. Bon. Donc, cela semble avoir fonctionné. Alors laissez-moi courir mathématiques;. / Math. Saisissez me donne un certain nombre, 123. Merci pour le 123. Maintenant, nous allons essayer une autre affaire coin. Une chaîne est très généreux, car une chaîne peut être n'importe quoi. Peut ressembler à numéros, ressemblent caractères, ressemblent à des mots. Mais un int est un entier. Alors maintenant, si je suis difficile à l'utilisateur, et il est dit «Donnez-moi un certain nombre, «et si je tente de faire quelque chose comme 0,1? Eh bien, c'est un nombre, et il est compatible avec la grammaire que j'ai utilisé ici, mais sous le capot, je suis d' Bien sûr, utiliser la fonction getInt. Alors voyons voir ce qui se passe. Entrez, réessayez. Très bien. Laissez-moi être difficile et appuyez simplement de nouveau sur Entrée. Entrez, entrez. Alors maintenant, il semble que getInt est un peu plus puissant que GetString. Nous, le personnel, mis en œuvre de telle manière que, si nous remarquons vous n'avez pas donné un int - et un int est un nombre décimal zéros contenant, ceux, deux, trois, quatre, cinq, six, sept, huit, ou de neuf. Et c'est tout. Pas de chiffres après la virgule, pas de personnages, pas de ponctuation. Il semble que nous devons coopérer. Je vais donc essayer quatre, cinq, six, et ça me passe au travers. Alors, vraiment, d'être ici anale, je devrais probablement dire «Donnez-moi un nombre entier ", afin de transmettre à l'utilisateur exactement ce que j'ai l'intention. Maintenant, nous allons réfléchir sous le capot. Nous n'allons pas voir comment cs50.h est mis en œuvre aujourd'hui, cette bibliothèque. Mais si elle n'arrête pas de dire recommencer, recommencer, recommencer, ce que la programmation construire sans doute suis-je utiliser sous le capot d' mettre en œuvre ce? Il suffit donc d'une boucle, non? L'une des idées les plus simples que nous avons vu sur Scratch. The Forever construire, la répétition de la construction. On peut supposer que, dans ce programme, sous le capot, même mais il est écrit en C et se raye pas, c'est faire quelque chose qui s'appelle équivalent à jamais si l'utilisateur n'a pas tapé dans un entier, disons relance, relance, relance, relance, de sorte puis enfin, quand nous recevons un nombre entier, alors vous sortir de cette boucle. Alors quelles sont les autres fonctions peuvent nous utilisons ici dans la bibliothèque du CS50? Eh bien, en quelque sorte les plus évidents, du moins sur la base du les types de données que nous connaissons maintenant exister. Nous avons mis en GetString, getInt, mais tout au long du premières semaines de la durée, vous pouvez également utiliser GetFloat et GetDouble et GetLongLong afin d'obtenir précisément le les types de données que vous souhaitez. Parce que le détail clé ici est que, contrairement à certaines langues, comme Python et Ruby, où vous n'avez pas nécessairement besoin d' déclarer le type de données d'une variable - vous n'avez pas à indiquer à l'ordinateur ce genre de choses vous allez mettre dans la variable - en C, vous devez être toujours aussi précis. Donc, si vous voulez une variable appelée n, un morceau de stockage que, dans ce cas, se trouve être de 32 bits par convention, vous doivent indiquer à l'ordinateur que ces bits sont allez stocker un certain nombre - pas un personnage, pas une chaîne, pas un char. Et cela répond à la question que nous efficacement rencontré la semaine dernière. Si nous utilisons les zéros et les numéros de celles à ne représentent pas seulement chiffres, mais tant et B et Cs, comment dans le monde est un l'ordinateur va savoir que ce modèle de bits réellement représente le nombre 65, par opposition à la représentation du lettre A, qui coïncide, selon ASCII, rappeler, était équivalent à 65? Ainsi, ces types de données fournissent un contexte à l'ordinateur, de sorte qu'il sait si ces bits doit être interprété comme une int ou comme une chaîne. Toutes les questions, alors, à ce sujet? Ouais? DAVID J. MALAN: Bonne question. Si nous prenons sur stdio.h, nous enregistrer le fichier - laissez-moi aller à la fenêtre de terminal et exécutez make mathématiques, zoom et entrer - maintenant je reçois une erreur différente, parce que je suis implicitement déclarant ce qui fonctionne maintenant? Printf. Alors maintenant, j'ai créé un nouveau problème, dont la solution est essentiellement les mêmes. J'ai besoin de remettre ça. PUBLIC: [Inaudible] DAVID J. MALAN: Oh. Donc, si je sors - Ok, ouais. Donc, si je retire l'inclusion E / S standard bibliothèque jusqu'à ici, puis vous dites que si je me débarrasser de printf, obtenir débarrasser de printf? Oui. Cela devrait fonctionner, parce que je ne suis plus toute aide - oups. Que je viens de mentir? Oh, d'accord. Cela ne fonctionnera pas à cause d'une nouvelle erreur, nous avons introduit. Et celui-ci est un peu plus explicite. Quel est le problème? Inutilisés n variables. Donc, cette erreur est le résultat de notre avoir configuré l' appareil à être particulièrement pédants, pour vraiment crier à vous pour chaque erreur possible, même si c'est un peu une erreur non fatale comme cela - est-ce vraiment un grand face que je attribuer un int, mettez un numéro en elle, puis seulement n'a rien fait avec elle? Donc, fonctionnellement, non. Cela ne va pas à briser le programme. C'est juste un peu stupide, non? Il n'y a pas de valeur pour avoir demandé ce nombre, stockée dans une variable, si vous n'allez jamais à faire quoi que ce soit avec elle, que ce soit l'imprimer ou l'enregistrer. Donc dans ce cas, Clang est de reconnaître que beaucoup, et c'est dire inutilisés n variables. Ainsi, nous pouvons résoudre ce problème si nous voulons vraiment. Mais encore une fois, ce n'est pas une bonne programmation maintenant. Alors seulement je pouvais le faire - descendre ici, laissez-moi éclaircir l'écran, rendre les mathématiques. Qui fonctionne. Maintenant, je peux lancer mon programme de mathématiques, prend en entrée - eh bien, c'était mauvais. Prend en entrée, et c'est tout ce qu'il fait, dans ce cas. Donc en fait, essayons un cas autre coin que nous ne pas penser plus tôt. Dans ce cas - là, nous allons revenir à celui qui est un peu plus convivial. Permettez-moi de revenir ici et exécutez make à nouveau les mathématiques. Oups, qu'ai-je fait de mal? Vous avez à faire reculer plus loin. D'accord. Maintenant, nous sommes de retour à l'état initial, où tous les on l'espère bien. Et maintenant, si je n'ai mathématiques, 123 semble fonctionner. Mais ce n'est pas vraiment une preuve effective, de dire simplement ok, ça marche. 789, qui fonctionne. Temps de se soumettre. Parce qu'il ya quelques cas rares d'autres ici. Une chaîne n'a pas vraiment nous donner beaucoup de peine en tapant un beaucoup de caractères. Mais que faire si je tape dans tout cela? Frapper le numéro 1 grand-chose, beaucoup ici - Tout va bien, ça devient un peu ennuyeux, alors je vais arrêter ici, et je vais appuyez sur Entrée. Qu'est-ce qui s'est passé? Donc, cela peut effectivement être expliquée. Ainsi at-il le prendre comme binaire? Une bonne pensée, mais non, ce n'est pas le fait qu'il a pris sous forme binaire, car en effet, c'était juste une sorte de coïncidence. Nous pouvons le faire à nouveau. Il n'y a donc pas de 2 dans le système binaire, c'est probablement assez de toute façon. Entrée. Donc, ce n'était pas le problème. Quoi d'autre? Exactement. Alors, pensez à revenir à ce que un int est en réalité. Il est 32 bits qui, collectivement, sont interprétés comme un nombre. Si vous avez 32 bits, cela signifie que chacun des bits peuvent être un 0 ou un 1., 0 ou un 1 Donc, cela signifie qu'il ya deux possibilités pour ce bit, deux possibilités pour cela, deux possibilités pour ce peu - si c'est 2 fois 2 fois - de sorte que les 2 à la puissance 32 est le nombre total d' permutations de zéros et de uns, si vous avez 32 espaces réservés zéros ou de uns, en face de vous. Donc, si j'ai 2 au 32, mathématiquement, c'est quoi? Donc, c'est beaucoup. Il est 4 milliards de dollars, donner ou prendre. Et 4 milliards ne semble pas être ce qui a été imprimé ici. En fait, cela ressemble plus près de 2 milliards d'euros. Mais ce n'est pas une coïncidence. Le fait que l'ordinateur a mal interprété mon très grand nombre, ma séquence énorme de celles et puis ma séquence énorme de groupes de deux, que près de 2 milliards de dollars, est expliqué comment? Il ya un plafond sur le int. Il ya une certainement une valeur maximale que vous pouvez représenter. Mais il est généralement de 4 milliards d'euros, non? Si 2 au 32 est d'environ 4 milliards de dollars, qui semble comme c'est le plus grand nombre. Donc, pas un reste, mais une bonne pensée. Les nombres négatifs. Donc, si vous avez 4 milliards choses possibles que vous pouvez représentent ces diverses permutations de 32 0 et 1s, eh bien, il va de soi que nous, les humains pourraient vouloir représentent non seulement des nombres entiers positifs mais entiers négatifs. Et en effet, c'est l'hypothèse que C fait. Donc, avec 32 bits, vous pouvez représenter à peu près négatif 2 milliards sur toute la hauteur de positif 2 milliards d'euros. Et dans ce cas, ce que nous sommes vraiment voir est juste la frange de la capacité de notre entier, et nous avons donc de parler, débordait d'un entier. Nous avons essayé de caser plus de bits en elle que peut réellement s'adapter. Ainsi, le résultat final est que nous avons essentiellement tous les bits à 1. Nous avons basculé l'ensemble de nos morceaux sur, nous avons essayé de représenter le plus grand nombre possible, mais ce n'est clairement pas près d' assez grand pour représenter les deux choses que je viens de tapé po Ouais? PUBLIC: [Inaudible] DAVID J. MALAN: Bonne question. Pourquoi ne pouvons-nous pas simplement représenter que négative signer en tant que juste un personnage? Donc, nous ne pouvions absolument, et nous pourrions ensuite enregistrer un bit supplémentaire. Mais vous allez encore avoir à représenter ce tableau de bord, et qui va vous coûter au moins quelque chose, sans doute un peu. Alors oui, nous pourrions avoir 32 bits utilisés pour notre nombre, mais maintenant nous avons besoin d'un autre bit utilisé pour notre tableau de bord symbole, le signe moins. Alors maintenant, nous avons 33 valeurs binaires, que nous pourrions faire, mais il est tout simplement pas la façon dont c'est fait. Nous avons fait appel d'un jugement année, il ya 32 bits est une sorte de unité de mesure ici. Nous allons donc utiliser l'un de ces bits efficacement à représentent la négativité et 31 bits pour représenter le nombre. D'autres questions? Très bien. C'est beaucoup. Pourquoi ne pas aller de l'avant et de prendre notre pause de cinq minutes ici? Très bien. Encore une fois, de ne pas trop insister sur les applications des mathématiques de la programmation, nous allons simplement arracher ce seul exemple avant de passer à d'autres constructions, juste parce qu'il allons illustrer quelques points habituels d'achoppement sur certains les bases quand il s'agit de l'écriture de programmes. Dans ce cas, faites expressions arithmétiques qui ont une certaine pertinence intéressant de la syntaxe. Donc, c'est juste une formule avec laquelle nous pouvons convertir températures de Fahrenheit à Celsius. Si vous ne me souviens pas, c'est juste la formule. Donc, si nous brancher Fahrenheit valeur de 32 degrés, ce qui est gel, qui va être 32 moins 32 est 0, et en effet, 0 à Celsius est également congélation. Ainsi, la santé mentale vérification rapide là-bas - c'est la formule familière. Permettez-moi de passer à l'appareil, cependant, et commencer à écrit un programme appelé, comme, f2c; "Fahrenheit Celsius point c ". Et au sommet ici, je vais commencer avec # include stdio.h, et je vais faire int main (void), et encore une fois, nous reviendrons à l'avenir à ce que signifie int là et ce vide signifie qu'il. Et maintenant, laissez-moi aller de l'avant et mettre en œuvre un programme qui fait essentiellement cette conversion pour nous. Donc, printf, disons, de la température en degrés Fahrenheit. Et puis, laissez-moi aller de l'avant et obtenir la valeur de l'utilisateur. Quelle valeur dois-je obtenir de l'utilisateur, si je veux qu'ils me donnent une température en degrés Fahrenheit? Ouais? Que proposeriez-vous? Ouais. Donc flotteur se sent assez raisonnable. Nous avons, encore une fois, que quelques options que nous avons vu jusqu'à présent. Nous avons des choses comme char, double, float, int, long terme, bool, string. Donc, de ce nombre, flotteur se sent assez raisonnable. Nous pourrions utiliser un double, à droite, parce que si nous voulons vraiment représentent la température d'un être humain - 98,60000 - nous pourrions utiliser 64 bits pour le faire, mais il se sent comme exagéré pour la température. Alors allons-y avec flotteur. Maintenant, j'ai besoin d'une variable. Juste pour garder les choses simples, je vais l'appeler f, mais je pourrait tout aussi bien l'appeler température, mais est soit très bien. Donc flotter f = GetFloat. Dès que j'ai maintenant décidé d'utiliser GetFloat, cependant, je besoin de faire une correction. Ouais. Nous avons donc besoin de # include , sinon le compilateur est va nous crier dessus. Maintenant que j'ai un flotteur, laissez-moi aller de l'avant et de faire le conversion. Alors d'abord, permettez-moi de prendre l'habitude ici de commenter mon code. Encore une fois, un commentaire est juste une notation à l'être humain qui est ne fait pas partie du programme en soi, mais l'un, vous aide comprendre ce que vous avez fait le lendemain matin, ou le prochain mois, il permet à votre adjoint à l'enseignement comprendre ce que vous avez fait ou ce que vous aviez l'intention de le faire, il est donc pratique généralement très bon. Tous les quelques lignes de code, écrire un commentaire vous-même ou votre collègue. Donc ici, je vais dire: «Demander à l'utilisateur pour la température." Ne doit pas être une phrase complète, juste une courte phrase. Mais l'idée derrière commenter en C, c'est que chacun de vos commentaires devraient vous donner les moyens - ou, disons, un TF ou un collègue - de parcourir votre programme et de savoir exactement ce qu'il fait, en ne tant la lecture du code, mais en lisant les commentaires, ce qui doit être concise et claire. Très bien, alors maintenant laissez-moi aller de l'avant et de dire: «Autre Fahrenheit en Celsius. "Alors, je vais aller de l'avant et de faire, disons, float c. Nous vous tiendrons Celsius comme une valeur à virgule flottante. Et permettez-moi de prendre un coup de couteau à la présente. La formule est, encore une fois, ici. Comme 9.5 fois F de moins 32. Alors allons-y. Donc, 5 divisé par 9, moins - oups, je l'ai déjà foiré. Fois. Donc, 9.5 fois moins F 32. Donc F moins 32, point-virgule. Et maintenant, ici-bas, je vais aller de l'avant et dire, imprimez résultat. Et cette partie est facile. Printf. Comment dois-je faire imprimer ce? Eh bien, je pourrais dire "Ce nombre en degrés Celsius est:% f \ n", juste pour quelques esthétique. Et puis, quelle est la valeur que je veux brancher ici comme le printf Le deuxième argument? D'accord. Il suffit donc de c. Nous allons donc commencer avec cela et puis il suffit de retourner 0. Encore une fois, cela n'a rien à voir avec les mathématiques. Cela signifie simplement que tout va bien. Maintenant, est-ce correct, ce programme? Très bien. Donc j'ai fait quelques erreurs. Même si vous n'avez aucune idée de ce que la programmation est, vous pouvez trier de retour à l'école primaire en déduire ce que l' erreurs ici peut-être. Quel est l'un des premiers? PUBLIC: [Inaudible] DAVID J. MALAN: Ouais. Donc, il nous manque des parenthèses. C'était délibéré que j'ai fait entre parenthèses dans le discours glisser ici, car il ya en fait cette notion d'ordre des opérations, ou de préséance, par lequel certaines opérations - multiplication - ont plus contraignant, ont une priorité plus élevée, que les choses comme l'addition ou la soustraction. Donc, nous avons fait cela pendant des années juste pour préciser exactement quelle opération mathématique doit être fait en premier. Donc, je devrais sans doute imiter exactement cela. Sinon, l'ordinateur est sans doute va essayer de faire quelque chose comme fracture 5 par 9, puis multipliez F, puis soustraire 32 à partir de l'ensemble. Ce qui n'est pas, en fait, ce que nous voulons faire. Donc, nous allons parenthèses. Ajoutons entre parenthèses mes ici, les parenthèses ici. Mettons cela ici. Ici, je viens de remarquer une autre erreur que j'ai faite le long du chemin. Ouais? PUBLIC: [Inaudible] DAVID J. MALAN: Ah. Bon. Donc, nous avons effectivement le même entier question de la division d'avant. Je corriger cela, nous allons voir ce que le symptôme est. Mais nous allons devoir corriger une autre erreur ici. Ouais? PUBLIC: [Inaudible] DAVID J. MALAN: Oui. Donc, j'ai fait erreur stupide, mais extrêmement important. L'ordinateur ne va pas tout simplement fermer les yeux et laisser m'utiliser F majuscule, quand j'ai effectivement déclaré la variable comme un f minuscule ici, à la ligne 8. J'ai donc besoin de corriger la ligne 11 mon capitalisation, ce qui a l'heure était un F majuscule par erreur. Qu'en est-il ici? Si tel est minuscule aussi? Il devrait être, mais c'est une coïncidence. Que f% n'a rien à voir avec la variable. Donc, juste pour être super clair ici, laissez-moi aller de l'avant et renommer ce, en bref, "la température". Permettez-moi de renommer cette "température". Permettez-moi de ne pas renommer ce. Parce que, encore une fois, f% signifie globalement, "flottant valeur du point." N'a rien à voir avec ma variable. Mais «température» dans tous les sens est un peu verbeux, donc je vais retourner dans mon minuscule «f» s. Maintenant, laissez-moi aller de l'avant vers le bas de ma fenêtre ici. Assurez-f2c - qui était, encore une fois, le nom arbitraire que je a donné à ce fichier. Semble avoir compilé. Permettez-moi de lancer f2c. Entrée. Température en degrés Fahrenheit - faisons une tâche facile. 32. OK, c'est exact. Mais, si je fais maintenant 212 pour bouillante - putain. Très bien. Donc, clairement pas corriger, si votre tente TF au moins deux valeurs. Alors, quel est le problème ici? Eh bien, vous avez déjà mis le doigt sur la nature du problème. Mais pourquoi est-ce le cas? Là-haut, quand je fais le calcul de 5 divisé par 9. Donc, théoriquement, c'est tout à fait correct. Totalement compatible avec la formule. Mais les ordinateurs ne font précisément ce que vous leur dire de faire. Et ce que nous disent efficacement l'ordinateur est ici diviser l'entier 5 par le 9 entier et me donner le résultat. Le problème est, cependant, si vous n'avez division à l'aide de données types, la sortie est du même type que les entrées de données. Et si les deux entrées sont deux entiers, la sortie va d'être un int. Et ainsi de 5 divisé par 9 est quelque chose de point. Mais quel est l'entier le plus proche pour signaler quelque chose? Donc, c'est en fait 0. Donc, comme nous en avons discuté, lundi, tout ce qui suit la virgule point de est tronqué. Il obtient juste jeté. Donc, c'est une erreur complète, parce que je pourrais tout aussi bien multiplier par 0 tout ici. Maintenant, je peux résoudre ce problème dans un couple des manières. Je pourrais le faire. 5,0 divisé par 9,0. Techniquement, je n'ai même pas besoin de le faire. Il ne suffit pas de faire juste l'un des numéros un flotteur - ou double - en mettant la virgule ici. Parce que ce qui se passe maintenant, c'est quand on divise un entier par un flotteur ou un double, l'ordinateur va réaliser oh, un de ceux qui est plus précis. Permettez-moi de pécher par excès de vous donner plus de précision que vous aviez l'intention. Donc, il va convertir le résultat - elle retourne le résultat sous forme de valeur à virgule flottante ainsi. Alors que cela fonctionnerait. Ce serait travailler. Et il ya un autre mécanisme que nous allons voir dans plus en détail la semaine prochaine. Vous pouvez réellement, en tant que programmeur, indiquer à l'ordinateur à traiter réellement un type de données que s'il s'agissait d'une autre. Donc, je pouvais le faire. Entre parenthèses, je peux dire quelque chose comme (float), ouvert parenthèse, parenthèse ouvrante. Et c'est ce qu'on appelle "casting". Encore une fois, plus sur la semaine prochaine. Mais ce n'est que le moyen de programmation de dire l'ordinateur, ouais je sais 9 est un entier ou un long. Je sais que ce n'est pas une valeur en virgule flottante. Mais le traiter comme tel en tout cas. Donc, pour jeter un type de données des moyens pour convertir de l'un à l'autre. Franchement, c'est un peu moche, donc je propose que nous aller sauvegarder à la proposition initiale de la conversion de tout ces choses à virgule flottante manuellement. Parce que maintenant c'est juste super clair ce qui se passe, et ce n'est pas tout ce qui distrait. Donc, nous allons maintenant retourner dans ma fenêtre de terminal. Assurez-f2c. Laissez-moi aller de l'avant et de lancer ça. Et, soit dit en passant, on s'ennuie tapant ces commandes encore et encore, se rendre compte que les ordinateurs, comme Linux ici, ont tendance à être très intelligent. Et si je frappe le haut, on peut passer par toute mon histoire d' commandes, Haut et Bas. Donc, dans ce cas-ci, je peux simplement aller jusqu'à lancer make f2c. Je me fais engueuler parce que je viens de faire ce que il ya une seconde. Il est déjà à jour. Alors maintenant, je peux courir f2c nouveau. Essayons 32, Fahrenheit. Maintenant, essayons de 212 degrés Fahrenheit. Ouf. Semble fonctionner. Maintenant, c'est bon, mais il se sent un peu arbitraire Je montrant six chiffres après la virgule. Pas vrai? Si vous êtes la personne la météo à la télévision, vous êtes une sorte de crétin si vous lisez la température à ce degré de précision. Donc, nous allons simplifier cela. Donc, nous allons effectivement aller ici, à mon printf. Et ouais, je tiens à flotter. Mais je veux maintenant spécifier la précision. Et je vais être un peu succinct. Je vais vous dire, donnez-moi un point après la virgule. Ainsi, plutôt que de dire f%, je vais dire% .1 f. Et cela signifie juste me donner une position après la virgule. Très bien. Essayons encore une fois. Permettez-moi de ré-exécuter l'après compilation. Et maintenant, je tape 32, et je serai de retour d'un valeur plus succinct. Et je peux taper, désormais, 212, et obtenir un plus succincte valeur aussi bien. Et il ya d'autres choses que vous pouvez faire avec printf. Vous pouvez réellement spécifier la largeur du nombre doit être. Si vous voulez un rembourrage sur elle, de sorte que vous pouvez d'ores-align ou gauche aligner l'ensemble de vos numéros ou essayez de choses du centre. Alors rends compte qu'il ya des petits trucs que vous pouvez faire là-bas. Mais ils se résument à des codes de format, comme nous avons là-bas. Donc, en termes de cette question de préséance. Il s'agit d'un tableau très ennuyeux de passer par méthodiquement. Mais se rendre compte que les auteurs de C ont mis au point le règles qui spécifient les opérateurs ont une plus grande priorité, la puissance plus contraignant que d'autres. Ainsi, alors que l'école primaire, nous avons généralement savais que c'était multiplication et la division, puis addition et la soustraction, puis quelques autres trucs. Dans un monde de la programmation, il ya une grande longue liste de choses. Et ce n'est pas quelque chose d'intéressant mémoriser maintenant. Vous s'acclimater à elle avant longtemps. Mais tout comme à l'école primaire, entre parenthèses généralement résoudre les questions de préséance, en faisant super clair à l' ordinateur et humaine aussi bien ce qui est prévu. Considérons donc ce juste une feuille de triche peu là. Mais la plupart de ces détails que nous n'arriverons pas à un certain temps. Très bien. Maintenant, nous allons mettre en place et de s'éloigner de ces petites bête exemples mathématiques. Toujours utiliser les mêmes principes, mais commencer nous exprimer un peu plus comme Scratch. Ainsi, dans Scratch, nous avons eu ces expressions booléennes. Et en anglais, une expression booléenne, c'est quoi? Vrai ou faux. C'est quelque chose qui renvoie true ou false. 1 ou 0. Sous ou hors tension. Tout ce que vous voulez l'appeler. Maintenant dans Scratch, les pièces du puzzle ressemblait à ceci. Et c'est la combinaison, sur le fond là-bas, de trois des pièces de puzzle. Un concert - quelque chose qui n'a vierge et vierge. Et puis deux expressions booléennes à l'intérieur de celui-ci. Ainsi, vous pouvez imbriquer des expressions booléennes pour obtenir plus d' compliqué expressions booléennes. Par exemple, si c'est samedi, et il est agréable temps, puis aller à l'extérieur. Ou quelque chose d'arbitraire comme ça. Ainsi, vous pouvez rejoindre les expressions booléennes pour arriver à un valeur plus grande vérité, dont la réponse est basée sur les plus petites. Maintenant, en C, heureusement, cette application est en fait assez simple. Parenthèses aider à clarifier les choses ici. && C'est ce que signifie «et». C'est comme ça que nous allons convertir ces blocs à partir de zéro à C. Et pour les conditions que nous avons vu dans Scratch, sur la main gauche côté là, je peux même les empiler en C. Si x est inférieur à y, puis le faire. Sinon, si x est supérieur à y, puis le faire. Sinon logiquement, ils doivent être égaux, disent qu'ils sont égaux. Ainsi, nous pouvons maintenant commencer à construire ces choses. Alors, faisons un exemple. Permettez-moi d'ouvrir un fichier qui se trouve sur le site Web du cours qui J'ai écrit à l'avance. C'est ce qu'on appelle nonswitch.c. Et nous verrons pourquoi dans un instant. Donc, dans ce fichier - nonswitch.c-- d'abord prendre conscience qu'il ya un tas de commentaires au début. C'est juste expliquer le nom du fichier, ce qu'il t, et ainsi de suite. Et il démontre apparemment l'utilisation de booléen ET-tion - conjoindre deux expressions. Donc, nous allons voir comment fonctionne ce programme. Je inclure mes deux fichiers, cs50.h et stdio.h. Si je défiler vers le bas, maintenant, pour le programme, c'est un peu plus que nous avons écrit précédemment, mais assez lisible. J'ai donc d'abord imprimer à l'utilisateur, à la ligne 18, «Donnez-moi un entier compris entre 1 et 10." Si Il ya tout ici. Maintenant, je reçois l'entier. Mais n'oubliez pas que getInt - assez simple. Il va juste pour obtenir un int. Il va s'assurer qu'il ne obtenir un int et non pas un chaîne ou un flotteur. Mais ça ne va pas faire n'importe quel type de vérifications de limites. Il ne va pas filtrer les numéros se situer entre un certaine plage. Nous devons donc mettre en place nous-mêmes. Ainsi, tout comme dans Scratch, où je pouvais faire une conjonction de deux expressions, je peux le faire en C comme suit. Si n est supérieur ou égal à 1, et n est inférieur à et ou égal à 3, je vais très arbitrairement arrêté que nombre à un petit nombre. Juste pour le plaisir d'une déclaration. Sinon, si n est compris entre 4 et 6, print "Vous avez choisi un support nombre. "Sinon, si n est compris entre 7 et 10, print" Vous avez choisi une grand nombre. "else print" Vous choisissez un numéro non valide. " Parce que logiquement, qui suit si nous avons épuisé notre gamme. Donc sais que ce n'est pas tout à fait la façon dont nous écrivons supérieur ou égale à une classe de mathématiques. Pas vrai? En général, vous le dessiner comme ça, avec la ligne en dessous. Mais il n'existe aucune clef sur mon clavier. Ainsi, le symbole C pour exprimer supérieure ou est égal à deux caractères, et le symbole de moins de ou est égale à deux caractères de même. Très bien. Donc, si je lance ce programme, vous pouvez probablement le deviner ce que c'est va faire. Si je vais de l'avant et faire nonswitch, Entrée. Et puis exécutez nonswitch. Donnez-moi un chiffre entre 1 et 10. Je vais lui donner 11. J'ai pris un nombre non valide. Je vais essayer le numéro 3. J'ai choisi un petit nombre. Donc, il ya assez simple. Que faire si je veux changer le comportement de ce programme et faire quelque chose d'un peu différent à la place? Permettez-moi aller de l'avant et de dire ceci. Permettez-moi de vous débarrasser de tout cela. Et laissez-moi vous dire if (n == 42). Et puis je vais aller de l'avant et de dire print "Vous avez choisi le bonne réponse. "Sinon, nous allons aller de l'avant et de dire, printf ("Vous avez choisi le mauvaise réponse »);. Okay. Juste parce que. Maintenant, quelques points nous pouvons faire ici. D'abord, je n'ai pas taper le symbole que vous pensez est le plus raisonnable. Lorsque je veux vérifier l'égalité, s'avère que vous n'utilisez pas le signe égal. Vous utilisez plutôt le signe égal égale. Et pourquoi cela pourrait-il être, juste intuitivement? Ouais. PUBLIC: [Inaudible] DAVID J. MALAN: C'est exact. Le signe égal est déjà utilisé pour l'affectation. Quelqu'un n'a pas vraiment y réfléchir. Et maintenant, quand il s'agit de tests de l'égalité, nous devons être plus explicite, et dire égal à égal. Une erreur très commune est de le faire. Et si, dans les heures de bureau ou la semaine prochaine ou parfois dans le cours des deux prochaines semaines, vous faire quelque chose comme ça, et puis lutter avec elle pendant 10 à 20 minutes à essayer de comprendre ce que le bug est foutu, sachez que vous êtes un de ceux gens qui ont fait cette erreur. Donc, super facile à faire. Mais l'objectif est maintenant de parer à cette erreur. Cela pourrait évaluer, parce que ce qui est-ce vraiment dire? Si n obtient 42. Donc, les gens utilisent des verbes, verbalement, pour exprimer la notion d'affectation est "reçoit". Donc, si n obtient 42. Cela signifie donc que 42 à assigner n. Maintenant, j'ai une expression booléenne entre parenthèses, à l'intérieur de cette condition, la valeur de ce qui est 42. Pas vrai? Parce que si vous l'évaluer à partir de l'intérieur dehors, le total réponse, maintenant, est de 42. Donc, si je vous pose la question, "si (42),« ce qui est que dit vraiment? Eh bien, les expressions booléennes ne peut être vraie ou fausse. 1 ou 0. Sous ou hors tension. Donc, il semble que nous avons un cas coin ici, où tout d'un Soudain, je dis "si (42)". Ce n'est pas une valeur booléenne. Alors que les ordinateurs font, cependant, est qu'il confond pour l'essentiel tout ce qui n'est pas égale à 0 est interprétée comme étant vrai. 1. Sur. Ils sont tous fonctionnellement équivalents. Seule la valeur 0, ou le mot-clé faux, comme nous allons finalement le voir, est faux. Ainsi, «si (42)" serait en fait vrai, car il est non-nul. Donc, pour être plus précis ici, une valeur booléenne n'est vraiment pas si bien vraie ou fausse, mais pour ce cas, si la valeur 0 ou différent de zéro. Alors faux ou pas faux. Et cela nous permet d'englober autant plus possibilités dans l'expression entre parenthèses. Il nous faut donc, bien que très prudemment, dis - if (n == 42). Tout simplement parce que nous avons besoin de spécifier un test d'égalité, pas une affectation d'une valeur. Que vaut la peine de noter ici? Ces accolades sont en fait pas nécessaire. Je les ai fait juste pour être tatillon ici. Mais quand vous avez une condition qui ne dispose que d'une seule ligne de code, par souci de commodité, les programmeurs n'ont pas besoin d'utiliser les accolades. Il suffit juste tiret, pour des raisons esthétiques, et puis rédigez votre ligne de code. Ce n'est que lorsque vous voulez écrire deux lignes de code - pour Par exemple, else printf ("Bye!"). Si vous voulez faire que, ce n'est rompu. Vous pouvez mettre en retrait tout ce que vous voulez, mais le fait que vous avez tapé deux lignes de code sans utiliser des accolades moyen que ce programme fonctionne pas correctement ou pourrait même pas compiler correctement. Donc pour l'instant, pour être honnête, je pense que la meilleure habitude est simplement utiliser les accolades, et vous verrez qu'ils font super clair ce qui se passe. Par ailleurs, en aparté - surtout si vous êtes parmi ceux qui utilisent les livres recommandés ou des ressources en ligne - réaliser qu'il ya cette notion de style dans programmation. Et certaines personnes préfèrent mettre l'accolade ici sur une ligne. Certaines personnes préfèrent faire des choses ridicules, comme les mettre ici. Il n'ya pas de mauvaise réponse quand il s'agit de style, mais c'est faux. Mais certaines personnes le font. [RIRES] DAVID J. MALAN: Je mentionne cela maintenant, simplement parce que vous lisez sur les choses dans les livres ou sur Internet, vous allez obtenir différents messages de différents professeurs et différents auteurs. Et juste réaliser que, fonctionnellement, ils sont généralement équivalent, mais être cohérent. Donc, dans ce cas, nous allons normaliser le bouclés accolades queue ici sur la gauche. Très bien. Alors allons-y maintenant et exécuter cette commande, et voir ce qui se passe avec ce programme. Assurez-nonswitch. Ensuite, exécutez nonswitch. Donnez-moi un entier compris entre 0 et - ce n'est donc pas pertinente plus, mais je vais juste dire arbitrairement 42. Et j'ai pris la bonne réponse. Eh bien maintenant, nous allons effectivement prendre cela dans une direction différente. Il s'avère qu'il ya une autre syntaxe que nous pouvez utiliser dans un programme. Voici une nouvelle pièce de la syntaxe qui est fonctionnellement le même, mais simplement introduit une autre façon de nous exprimer. Donc, c'est ce qu'on appelle un "switch". Et un instruction switch fonctionne comme suit. Il faut, entre parenthèses, une valeur que vous souhaitez "Switch" sur. Vous voulez à se comporter différemment en fonction de sa valeur. Si ce moyen de commutation sur la valeur de n. Et qu'est-ce que cela signifie? Eh bien, si n est 1, 2 ou 3, aller de l'avant et d'imprimer "Vous pris un grand nombre "et puis se briser. La raison de la rupture, c'est que la façon dont fonctionne est que C dès qu'il trouve un cas qui correspond, il commence à exécuter l'ensemble du code en dessous. Donc, si j'ai une ligne de code, comme je le fais ici, à la ligne 27, il est exécuté. Si je ajouter une autre ligne ici, il est exécuté. Une autre ligne ici, il est exécuté. Le programme ne s'arrête que l'exécution de ce qui est en dessous de la instruction case applicable lorsque j'ai explicitement dire «casser». Si mal. Droit, dans ce cas, à la suite. Cas n ° 4, 5 ou 6, de même, va d'imprimer un message. Dans ce cas, le nombre moyen terme. Pause. Cas n ° 7, 8, 9, 10, ça va imprimer "Vous avez choisi un grand nombre. "Break. Et puis il ya littéralement un mot clé appelé "default" C'est effectivement comme le "else" construire. Ainsi, une nouvelle syntaxe, mais intellectuellement, rien du tout nouveau ici. C'est un peu comme le Scratch. Si, d'autre si, d'autre si, sorte de bloc. Donc, c'est la version de commutation de ce programme. Mais remarquez que nous l'avons fait avec les chiffres ici. Permettez-moi d'ouvrir une deuxième version, juste pour montrer quelque chose d'un peu plus concret. Nous avons donc ici les grades à la place. Il s'avère que vous pouvez utiliser des commutateurs non seulement sur des entiers, mais caractères. Pas dans tous les types de données, mais au moins sur les personnages. Donc, ici, nous pourrions faire quelque chose comme si la valeur de C qui l'utilisateur a tapé, à la ligne 19, en utilisant la fonction GetChar, est la capitale de A ou minuscules a, il faut bien l'interpréter comme une année, et dire ils ont choisi une note excellente. Et le long de l'instruction switch, avons-nous d'autres cas de «B» et «C», et ainsi de suite. Mais nous allons maintenant compléter une autre chose. Et encore une fois, une sorte de volant à travers certains de ces exemples. Mais c'est vraiment pour que nous puissions les appliquer, maintenant - ou bien, il suffit de les traduire maintenant - à C. Alors laissez-moi aller de l'avant et de le faire. Je vais ouvrir un nouveau fichier. Et je vais faire include. Et puis je vais faire int main (void). Permettez-moi de sauvegarder ce fichier en tant que loop.c. À titre d'exemple. Et je vais aller de l'avant et faire ce qui suit. Je veux écrire un programme très fastidieux. Donc, 10. Faisons-le. 9. Très bien. Dès que vous commencez à faire cela dans la programmation, vous êtes probablement fait quelque chose de mal. Mais nous allons commencer par là de toute façon. Oops. En fait, c'est faux. 7. 6. 5. 4. Rien ne va se passer quand on arrive à 0. 3. 2. 1. D'accord. 0. Supprimer. Très bien. Donc, retour à 0. Ainsi, ce programme va évidemment de faire ce qu'il est très dit péniblement que ça va le faire. Il va imprimer tous ceux valeurs, de haut en bas. Permettez-moi de faire faire des boucles. Et puis - oups. Assurez-boucle. J'étais dans le mauvais répertoire. Et maintenant, permettez-moi de fonctionner en boucle. Entrée. Woohoo. Très agréable. Nice, programme long. D'accord, mais maintenant nous allons faire mieux. Tout comme dans Scratch, quand vous avez commencé à l'aide d'une boucle construire, au lieu de simplement copier et coller l'ensemble de la pièces de puzzle, laissez-moi vous présenter cette chose. Donc, en C, il existe diverses structures de boucle, dont l'un ressemble à ceci. Une boucle "for" a trois choses, séparés par deux points-virgules. Et puis, à l'intérieur du corps de la boucle, pour ainsi dire - l' l'intérieur des trucs des accolades - nous pouvons faire quelque chose encore et encore. Donc ce que j'ai ici sur l'écran, c'est littéralement juste un commentaire. Le / / signifie ici est un commentaire. Ce n'est pas un code. C'est juste description en anglais, pour moi, l'être humain. Initialisations Donc, les conditions et les mises à jour. Eh bien, nous allons voir comment cela fonctionne. Cela me permet de réécrire ce programme comme suit. Pour - donc voici ma boucle - int i - voici une variable appelée "i" - est initialisé à 10. Donc, il est de mon initialisation. Je veux faire cette boucle tant que "i" est supérieur ou égal à 0. Et à chaque itération de cette boucle, je veux pour i do -. Nous avons donc vu + + le lundi. - Est à l'opposé. Il décrémente la valeur de 1. A l'intérieur de cette boucle, je veux vraiment faire quelque chose. Donc je vais dire quelque chose comme printf. Je ne veux pas dire 10 maintenant, parce que c'est évidemment tout aller à la même valeur. Qu'est-ce que je veux imprimer à la place, sans doute? Ouais. Donc, «i». D% Donc, i. Donc, je vais voler une de ces idées à partir plus tôt - cette substitution pour les codes de format - et puis ici-bas, au fond, je vais retourner 0, tout pour faire bonne mesure. Mais maintenant, j'ai un programme plus concis. Ce n'est que quelques lignes, et non pas il ya 10 ou 11 lignes. Permettez-moi aller à mon invite ici-bas. Remake boucle. Exécutez à nouveau la boucle. Et il semble être le même. Maintenant, le programme n'est pas plus intéressant. Mais maintenant, je peux taper quelque chose comme ça. Je peux changer ce paramètre sur 100. Je peux ensuite recompiler mon programme. Et puis je peux ré-exécuter mon programme. Et maintenant, il va super vite sur les ordinateurs d'aujourd'hui. Mais là, j'ai - et en fait, mon tampon de la ne même aller aussi loin. Nous y voilà. Ainsi, nous l'avons tous 100. Mais il est facile de faire des erreurs ici. Quel va être le comportement attendu si je accidentellement le faire? Alors il se sent comme infinie. Donc, nous allons voir si l'ordinateur se comporte. Alors laissez-moi aller de l'avant et de faire la boucle. Et permettez-moi de fonctionner en boucle. Donc, revenons à ce que dans un instant. Nous allons laisser cette manche. Parce que faut-il compter jusqu'à, au minimum? Probablement au moins 2 milliards de dollars, si nous avons que le nombre de bits, et nous utilisons des valeurs positives. Donc, nous allons revenir ici. En plus de ces types de boucles, nous avons ce qu'on appelle alors boucles. Ainsi, tout comme dans Scratch, vous aviez toujours blocs, et vous avez eu des blocs de répétition. De même, en C, il suffit de d'autres façons de vous exprimer. Vous avez donc cette notion d'une boucle while qui vous permet de exprimez-vous un peu différemment. Et puis vous avez quelque chose qui s'appelle une boucle do-while, qui fonctionne un peu différemment. Et nous allons taquiner les différencier au fil du temps. Mais nous allons jeter un oeil à ce dernier ici. Si nous allons dans - toujours en cours. Il est assez infinie. Alors laissez-moi aller en positif, et de montrer comment nous pouvons effectivement régissent entrée de l'utilisateur un peu plus efficacement. C'est un programme assez court. Et nous avons ici, en principal, un int n déclaration. Alors, donnez-moi une variable appelée n. Maintenant, je me suis littéralement dire «Faire». Et puis j'ai ouvert bouclés accolade, accolade proche. Et puis, remarquez, juste après cela, elle dit tout n est inférieur à 1. Donc noter que ces lignes - 19 à 24 - composer collectivement une boucle do-while. Et encore une fois, une nouvelle syntaxe, pas une idée nouvelle. C'est juste une autre façon de boucle, syntaxiquement. Alors qu'est-ce que cela fait? Procédez comme suit tandis que n est inférieur à 1. Alors qu'est-ce que je veux faire? J'exige que vous me donnez un entier positif. Ensuite, j'ai fait essayer d'obtenir un nombre entier de l'utilisateur. Mais en termes de l'ordre des opérations ici, parce que le tant que la condition est ici-bas, je suis ensuite aller vérifier, est n moins de 1? Donc, supposons que l'utilisateur - après avoir exigé de cette façon - types de la valeur 0. Cette condition sera vraie ou fausse? Eh bien, il va vraiment être vrai. Parce que n est 0, et 0 est inférieur à 1. Alors qu'est-ce que cela implique? Le faire de nouveau. Le faire de nouveau. Le faire de nouveau. Ce n'est qu'une fois cette condition est évaluée à false. Si je tape dans 42. Bien non, 42 n'est pas inférieur à 1. Par conséquent, cette boucle est faite d'exécution. Et donc à ce stade, le programme va dire, merci pour le 42, dans ce cas. Maintenant que vous avez cette façon de s'exprimer - Nous ne devrions pas attendre que cela se termine. Ça va prendre un certain temps. A suivre la prochaine fois, peut-être. Mais maintenant, vous avez la possibilité de nous l'espérons pour comprendre un peu d'humour geek. Toutes mes excuses. Ce n'est pas représentatif de l'humour dans l'informatique monde, mais il est mignon. [RIRES] Faisons fin sur cette note. Et nous allons vous voir lundi. [Applaudissements]