[MUSIC PLAYING] DAVID J. Malan: Très bien. Ceci est CS50 et ce est le début de la semaine 2. Et vous vous souviendrez que sur les deux dernières semaines, nous avons été l'introduction ordinateur la science et, à son tour, de la programmation. Et nous avons commencé l'histoire par le biais de Scratch, ce langage graphique du Media Lab du MIT. Et puis, plus récemment, la semaine dernière, ne nous introduire un higher-- un langue de niveau inférieur connu comme C, quelque chose qui est purement textuelle. Et, en effet, nous la dernière fois explorée dans ce contexte, un certain nombre de concepts. Ce rappel, a été le tout premier programme, nous avons examiné. Et ce programme, tout simplement, imprime, "bonjour, monde." Mais il y a tellement magie apparente passe. Il y a cette #include avec ces crochets. Il y a int. Il y a (void). Il y a des parenthèses, des accolades, des points-virgules, et bien plus encore. Et donc, rappeler que nous avons introduit Scratch afin que nous puissions, idéalement, voir au-delà cette syntaxe, le truc qui est vraiment pas tout ce qui intellectuellement intéressant, mais dès le début est, absolument, un peu délicat pour envelopper votre esprit autour. Et, en effet, l'une des plus courantes les choses tôt dans une classe de programmation, en particulier pour ceux qui sont moins confortable, est d'être frustré par et déclenché par certains syntaxique erreurs, sans parler des erreurs logiques. Et parmi nos objectifs aujourd'hui, en fait, sera être de vous doter d'une certaine techniques de résolution de problèmes pour savoir comment afin de mieux résoudre les problèmes eux-mêmes sous la forme de débogage. Et vous vous souviendrez aussi que le environnement qui nous avons introduit la dernière fois a été appelé CS50 IDE. Ce logiciel est basé sur le Web qui vous permet de programmer dans le nuage, pour ainsi dire, tout en gardant tous vos les fichiers ensemble, comme nous le ferons à nouveau aujourd'hui. Et rappeler que nous revisité ces sujets ici, parmi eux, des fonctions et des boucles, et les variables et les expressions booléennes, et les conditions. Et en réalité un peu plus que nous traduit du monde de Scratch dans le monde de C. Mais la construction fondamentale blocs, pour ainsi dire, étaient vraiment toujours le même la semaine dernière. En fait, nous avons vraiment juste eu un pièce de puzzle différente, si vous voulez. Au lieu de cela pourpre sauver bloc, nous avons la place avait printf, qui est cette fonction en C qui vous permet d'imprimer quelque chose et le formater à l'écran. Nous avons introduit le CS50 Bibliothèque, où vous ont maintenant à votre disposition get_char, et get_int et get_string, et quelques autres fonctions ainsi, par l'intermédiaire duquel vous pouvez obtenir entrée du propre clavier de l'utilisateur. Et nous avons aussi pris un regard sur les choses comme ces-bool et char, et double, float, int, string long_long. Et il y a même d'autres types de données dans C. En d'autres termes, lorsque vous déclarez une variable pour stocker une certaine valeur, ou lorsque vous implémentez une fonction qui retourne une certaine valeur, vous pouvez spécifier type de valeur qui est. Est-ce une chaîne, comme un une séquence de caractères? Est-il un certain nombre, comme un nombre entier? Est-ce une virgule flottante valeur, ou similaire? Donc, en C, contrairement à Scratch, nous avons en fait a commencé à préciser quel type de données nous revenions ou l'utilisation. Mais, bien sûr, nous avons également couru dans certaines limites fondamentales de l'informatique. En particulier, cette langue C, le rappel que nous avons pris un coup d'oeil débordement d'entier, la réalité que si vous avez seulement un quantité finie de mémoire ou, plus précisément, un nombre fini de bits, vous ne pouvez compter si haut. Et donc nous avons examiné cet exemple ici dans lequel un compteur dans un avion, en fait, en cas d'exécution assez longtemps serait déborder et entraîner un logiciel une réelle erreur potentiel physique. Nous avons également examiné flottante point de l'imprécision, la réalité que, avec un nombre fini de bits, que ce soit 32 ou 64, vous ne pouvez spécifier autant de numéros après un point décimal, après quoi vous commencer à obtenir imprécis. Ainsi, par exemple, un tiers de la monde ici, dans notre monde humain, nous savons est juste un nombre infini de 3s après la virgule. Mais un ordinateur ne peut pas nécessairement représentent un nombre infini de nombres si vous permettez que cela certains quantité limitée d'informations. Ainsi, non seulement nous vous équipons avec une plus grande puissance en termes de la façon dont vous pourriez vous exprimer au un clavier en termes de programmation, nous avons aussi limité que vous pouvez réellement faire. Et en effet, les bugs et les erreurs peuvent découler de ce genre de questions. Et en effet, parmi les sujets d'aujourd'hui vont être des sujets tels que le débogage et effectivement regarder sous le capot comment les choses ont été introduites la semaine dernière sont effectivement mis en œuvre de sorte que vous mieux comprendre à la fois les capacités de et les limites d'une langue comme le C. Et en fait, nous allons peler les couches la plus simple de structure de données, ce qu'on appelle un tableau, qui Scratch arrive à appeler une "liste." Il est un peu Dans ce contexte différent. Et puis nous allons aussi présenter l'un des premier de nos problèmes spécifiques au domaine en CS50, le monde de la la cryptographie, l'art de brouillage ou chiffrer des informations afin que vous pouvez envoyer des messages secrets et décoder des messages secrets entre deux personnes, A et B. Donc, avant la transition de nous à ce nouveau monde, nous allons essayer de vous équiper avec un certain techniques avec lesquelles vous pouvez éliminer ou réduire au moins certains des frustrations que vous avez probablement rencontré au cours de la seule semaine dernière. En fait, avant de vous sont such-- certains vos premiers problèmes en C. Et les chances sont, si vous êtes comme moi, la première fois vous essayez de taper un programme, même si vous pensez logiquement le programme est assez simple, vous pourriez très bien frapper un mur, et le compilateur ne va pas coopérer. Faire ou Clang ne va pas pour réellement faire votre appel d'offres. Et pourquoi pourrait-il être? Eh bien, nous allons jeter un oeil à, peut-être, un programme simple. Je vais aller de l'avant et de sauvegarder ce dans un fichier délibérément appelé buggy0.c, parce que je sais que ce être viciée à l'avance. Mais je ne pourrais pas réaliser que si cette est le premier ou le deuxième ou le troisième programme que je suis en train de me faire. Je vais donc aller de l'avant et taper, int main (void). Et puis à l'intérieur de mes accolades, un très familier ( "bonjour, monde-- backslash, n ") - et un point-virgule. Je l'ai enregistré le fichier. Maintenant, je vais aller vers le bas à ma fenêtre de terminal et tapez make buggy0, parce que, encore une fois, le nom du fichier est aujourd'hui buggy0.c. Donc je tape faire buggy0, Entrée. Et, oh, ça alors, rappeler de la dernière fois qu'aucun message d'erreur est une bonne chose. Donc, pas de sortie est une bonne chose. Mais ici, j'ai clairement un certain nombre d'erreurs. Ainsi, la première ligne de sortie après avoir tapé faire buggy0, rappel, est sortie assez verbeux de Clang. Sous le capot, CS50 IDE est configuré d'utiliser tout un tas de options avec ce compilateur de sorte que vous n'avez pas de penser à eux. Et voilà tout ce que la première ligne des moyens qui commence par Clang. Mais après cela, les problèmes commencer à faire leur apparition. Buggy0.c sur la ligne 3, le caractère 5, il y a une grande erreur rouge. Qu'est-ce que c'est? déclarant Implicitement fonction de bibliothèque printf avec le type int (const char *, ...) [-Werror]. Je veux dire, très rapidement devient très obscur. Et certainement, dans un premier temps coup d'oeil, nous ne serions pas attendez-vous à comprendre la intégralité de ce message. Et l'une des leçons pour aujourd'hui va être pour essayer de remarquer modèles, ou des choses semblables, aux erreurs que vous pourriez avoir rencontré dans le passé. Donc, nous allons taquiner dehors seulement ces mots qui semblent familiers. La grande erreur rouge est clairement symbolique de quelque chose qui est faux. déclarant Implicitement bibliothèque fonction printf. Donc, même si je ne comprends pas ce que déclarant implicitement fonction de bibliothèque des moyens, le problème sûrement concerne printf en quelque sorte. Et la source de cette question a à voir avec le déclarant. Déclarant une fonction est mentionnant pour la première fois. Et nous avons utilisé la terminologie la semaine dernière de déclarer le prototype d'une fonction, soit avec une ligne en haut de votre propre fichier ou dans un fichier que l'on appelle en-tête. Et dans ce dossier ne nous disons la semaine dernière que printf est citation, unquote, déclarée? Dans ce fichier est son prototype? Donc, si vous vous souvenez, la première chose que je dactylographiée, presque tous les programmes dernière time-- et accidentellement il y a un instant commencé myself-- tapant était celui ici-- hash-- #include