[Powered by Google Translate] [♪ ♪ Buzzing] Donc, pour vous présenter ce que j'ai à l'écran; il est l'un des outils que nous avons développés au cours de l'été; il est appelé CS50 espaces, et c'est notre application collaborative de codage que nous allons utiliser dans les sections. C'est plutôt cool. Avez-vous vu l'un des CS50 long encore? Permettez-moi de tirer que dans un autre onglet. Run.cs50.net Si si vous allez à run.cs50.net, vous pouvez le voir c'est un sur votre chemin navigateur pour effectivement Code - écrire du code C, et puis l'exécuter, de sorte qu'il compile à la fois, il fonctionne, puis retourne la sortie pour vous, donc c'est un peu une façon cool d'expérience avec une partie du code que David va au-dessus de conférences et nous donner sur vous des ensembles de problèmes sans avoir à allumer votre appareil. Alors qu'est-ce que c'est Espaces différent de celui si je reviens à cet onglet, Spaces est CS50 terme, comme vous le voyez ici, mais si nous défiler et regarder de l'autre côté de la fenêtre, vous voyez la droite, je suis la seule personne dans cet espace, mais ce que je vais faire est de demander à vous les gars rejoindre cet espace avec moi et nous aurons tous à code dans la fenêtre même petite, partager le code avec l'autre, et parler des différences entre notre code. Donc, c'est un peu un truc cool - à se joindre, si vous visitez ce lien ici au sommet que j'ai mis en évidence, vous pouvez simplement taper dans apps.cs50.net/spaces/vqcspSnO. Bon, alors pour commencer, Je vais vous donner un peu d'une visite de cette. Nous allons faire quelques petites bêtises codage avec elle au premier abord, juste pour que tout le monde ait un peu une idée de ce que c'est, mais ce que j'ai fait - ou ce que je vais faire ici est - Je vais prendre le code que j'ai écrit ici, qui, comme vous voyez en ce moment est vide; il ne fait rien. C'est juste le code plaque de la chaudière, nous allons l'appeler. Avec un peu de choses à faire un commentaire. Je vais l'enregistrer en appuyant sur ce bouton Enregistrer. Et qu'est-ce qui ne se fait-il il a souligné ici brièvement - que la case sauvegarde révision vert, et maintenant, si vous me cherchez de l'espace, vous cliquez sur mon nom, vous pouvez voir que j'ai cette révision ici, et si vous cliquez sur cette révision, il va charger ce code dans votre espace, aussi. Donc tout le monde a chargé ce code dans leur espace? Très bien, si vous n'avez pas encore, allez-y et faites cela, et puis ce que je veux vous les gars à faire dans cette petite section de choses à faire est d'écrire un peu sur vous-même en utilisant printf, Ainsi, par exemple, je voudrais écrire printf ("Je m'appelle Nate"); puis j'écrirais "J'ai obtenu mon diplôme en 2009 de Stanford " et j'aimerais en entendre parler quelle année vous êtes à l'école, si vous êtes au collège ou à l'école de commerce ou d'une autre école de Harvard, ce que vous étudiez si elle est encore connue; si on ne sait pas, c'est vraiment cool. Je n'ai pas décidé jusqu'à ce que j'étais en retard dans ma deuxième année. et puis j'aimerais aussi savoir folies que vous voulez me dire ou quelque chose à propos de la classe ou n'importe quoi d'autre. Lorsque vous avez fini avec votre écrit que printf peu, si vous voulez sauver la révision ou plutôt vérifiez d'abord que vous pouvez l'exécuter et qu'il imprime exactement ce que vous voulez imprimer, et puis si vous aller de l'avant et d'économiser cette révision en utilisant le bouton Enregistrer de révision, ce premier mec peu plus ici, et nous allons passer un peu et faire une petite introduction de cette façon. Donc, vous devriez suffit de cliquer sur le bouton Lecture, qui est ici en haut à gauche, donc ce bouton Lecture en haut à gauche sera envoyer votre code hors de notre serveur où il se compile et exécutez. Alors, quel est un peu fou à ce sujet est ce code n'est en fait pas en cours d'exécution sur votre ordinateur; il s'agit en fait d'être envoyés sur Internet. Comment ça va, Charlotte? Je >> - d'accord. Je suis - je pense que je suis ayant des difficultés de l'enregistrer sur le serveur de manière à pouvoir - je peux exécuter le programme. Et puis, quand je tente de l'exécuter, il dit qu'il ya une erreur. Déclarée comme un virus, ce qui n'est pas plus là. Oh, voyons, pouvez-vous frapper à nouveau sur Enregistrer? Je le vois à l'écran. Droit >>, d'accord, c'est ce que j'ai. Et je ne sais pas pourquoi il ne me laisse pas l'exécuter. Oh, ok, désolé. Pouvez-vous expliquer pourquoi - ce qui n'allait pas - ce qui ne fonctionnait pas avec elle? >> Ouais, parce que je n'ai pas vu qu'il y avait une dernière ligne où il ya encore une variable que je n'avais pas déclaré, que je n'ai pas l'intention pour qu'il soit là. Ouais, parfait! >> Maintenant, si je l'enregistrer, je pense que cela devrait fonctionner. Maintenant que vous avez sauvegardé, cela fonctionne; impressionnant. Donc, oui, que nous traversons - si ce qui se passait, Je vais juste répéter cette opération pour la caméra. Qu'est-ce qui se passe, c'est que cette variable s a été laissé en après - je suppose que vous avez supprimé quelques autres trucs où vous avez déclaré que, et cela a donc été jeter des choses hors tension et n'est pas ce qui vous permet de l'exécuter. Donc, c'est exactement ce que nous voulons faire dans la section est les gens ont essayer d'écrire différentes parties du code, le compiler, voir ce qui fonctionne, ce qui ne fonctionne pas voir, et puis un peu parler de ces choses, parce que ce sont des points de déclenchement qui J'ai encore rencontrer, J'ai encore - Je fais beaucoup de bêtises tout le temps, et je ne sais pas pourquoi cela ne fonctionne pas, nous allons donc tirer vers le haut la révision de Charlotte 3, et nous allons l'exécuter. Alors, quand je cours, maintenant que j'ai obtenu son code ici, Je peux effectuer un zoom avant, appuyez sur le bouton Exécuter, l'envoie, il construit, il fonctionne, dit qu'il a réussi, et si je défiler vers le bas, voir Charlotte est un junior à Adams House, psychologie, en économie du secondaire; impressionnant. Plaisir de vous rencontrer! Awesome. Bon, aller plus loin, on y va à Daniel, aller à la révision 3, compiler, exécuter; pourquoi ne pas nous en dire un peu plus sur vous, Daniel? Appelez-moi >> Dan. Je vais à l'école d'affaires en face de vous les gars, et j'étais dans les Marines avant ici, et c'est tout nouveau pour moi, alors oui. Ne vous sentez pas mal, j'ai 30 ans et je ne connais pas ce genre de choses. Awesome; merci, Dan! Très bien, nous avons un autre Daniel. Vous allez par Daniel - vous vous présenter, Daniel? >> Bien sûr, je suis Daniel. Je suis un étudiant en deuxième année à Mather en ce moment. Je me concentre sur le gouvernement, mais je voulais prendre CS50 parce que j'ai entendu de bonnes critiques sur la classe et je n'ai jamais essayé avant de CS. Descendez ici et lui montrer - cool. Sur la route, Jared. Comment ça va? >> Bon, comment vas-tu? Comme vous pouvez le voir, je suis un concentrateur philosophie junior Eliot, originaire du sud de la Californie, et je suis intéressé à prendre CS50 parce que j'aime la logique de celui-ci, et il semble vraiment cool de faire des choses sur l'ordinateur, donc. Awesome; où dans le sud de la Californie êtes-vous? >> A propos d'une heure de [inaudible], une petite ville [inaudible]. Oh, oui, mon père est de Redlands. Cool stuff. Très bien, Jimmy, comment ça va, Jimmy? >> Bon, comment vas-tu? S'en sort plutôt bien! Parlez-nous de vous-même. >> Je suis un étudiant de première année, et je ne suis pas entièrement sûr de ce que je suis une spécialisation en mais je suis un peu penché vers l'économie. Comme Daniel devant moi, je n'ai jamais fait de CS, mais il semble plutôt cool. Je suis originaire de Chicago. Awesome. Afin de vérifier son impression ici. Je voulais vous demander, est-ce d'impression comme vous vous attendiez? >> Non, j'ai oublié d'imprimer une nouvelle ligne. En fait, j'ai oublié que quand j'ai écrit mon truc pour la première fois, aussi. C'est une sorte de douleur de se rappeler de les remettre dans la main. Ce serait bien s'il suffit de savoir que ce que tu voulais. Bon, Kelly. Wow, nous avons 2 Kellys, 2, 2 Kellys Daniels. Alors Kelly - allez-vous par Kelly Ren? Ok, génial. Ou Kelly, je veux dire. >> Donc oui, je suis Kelly. Je suis un étudiant en deuxième année Pfoho. J'ai reçu un e-mail aujourd'hui que j'ai encore 7 semaines pour déclarer ma concentration, alors j'essaie de ne pas penser à ce sujet, et j'aime la cuisson, la course et Craisins. Je n'ai pas d'expérience avec la plupart des CS; J'ai appris à construire des sites Web lorsque j'étais très jeune, mais je pense que je me suis enseigné tort à un grand nombre de fois. J'espère que je vais en apprendre un peu plus et - oui. Impressionnant, eh bien, je vous remercie. Allons à l'autre Kelly; Je n'ai pas de quoi que ce soit - vous avez dit quelque chose ici? >> [Inaudible] Il est là! Sweet! >> Très bien, alors je suis Kelly. Je suis un étudiant de première année d'études supérieures. Je suis spécialisé en esprit, le cerveau et l'éducation. J'ai obtenu mon diplôme à Franklin & Marshall College en 2008 avec spécialisation en psychologie et en sociologie et une mineure en français. Je prends CS50 parce que je suis intéressé à obtenir un doctorat en neurosciences et je sens que cela va m'aider à comprendre les technologies utilisées. Awesome. Sur la route, Mikaela. Est-ce la bonne prononciation? Ok, génial. >> Je suis Mikhaila. Je suis un étudiant en deuxième année à Kirkland House, et je me concentre en génie mécanique. J'aime vraiment le vélo, construit un vélo cet été. Je prends CS, en fait, une exigence de concentration, mais vous savez, je pense que c'est toujours cool de sorte ingénierie de classe. Awesome - vous avez construit un vélo cet été? Ouais >>. Wow, comme le cadre et tout ça? >> Uh-Hunh (discrimination positive). Wow, c'est vraiment cool. >> [Inaudible hors caméra chat] [Rires] Ouais, ça fait tellement longtemps. On ne sait jamais, pas vrai? Eh bien, cool, merci bien, Mikhaila. Très bien, Missy. >> Je m'appelle Missy, je suis un étudiant de première année, ce qui signifie que je ne sais rien! Je veux me concentrer en astrophysique. En CS50, Je me sens comme va certainement aider. Un fait étrange pour moi est que je suis un pompier national certifié. Wow! Comment est-ce arrivé? >> J'ai assisté à une académie et a vécu l'enfer pour beaucoup de semaines et j'ai obtenu ma certification. Wow, congrats! Ce n'est pas un mince exploit, c'est sûr. Bon, alors maintenant nous allons le faire moi. Je suis le prochain sur la ligne. Je suis - l'exécuter. Alors, mon nom est Nate. J'étais classe de 2009 à Stanford. J'ai été un des systèmes symboliques majeures, qui est similaire à l'esprit, la concentration du comportement du cerveau, ici, mais c'est un peu un mélange de informatique, la linguistique, la psychologie et la philosophie. Kind of - oui, beaucoup de trucs bizarres, mais c'était super, et puis j'ai fait ma maîtrise en informatique là-bas, aussi. Donc, je suis nouveau à Harvard cette année. Je voulais vraiment entrer dans l'enseignement. J'ai passé les 4 dernières années à Stanford TA-tion des cours d'informatique et si David me laisser allez, et je vais être aidé avec CS50, si je fais ça à temps plein, je ne suis pas à l'école grad. Il a été amusant. J'espère que ça va continuer à être amusant, je suis sûr qu'il le fera. Très bien, Sam. >> Je m'appelle Sam, je suis un étudiant en deuxième année à l'université, dans le droit particulier. Mon principal sera l'histoire de la science, sans doute, et VES secondaire, et ma couleur préférée est le jaune. Pas besoin de porter un jugement ou quoi que ce soit, mais c'est une bonne couleur! Et Stella. >> Salut, je suis Stella, je suis un étudiant de première année à Grays. Je n'ai aucune idée de ce que je me suis concentré dans encore, si CS50 était juste un peu au hasard, ce qui est intéressant. Anecdote, Jimmy a été le premier ami de Harvard de la mine, parce que nous sommes tous les deux de Chicago. Cool, et Grace - qui est censé être le seul vraiment sympa, non? >> Je pensais que [inaudible]. Oh, ouais. [Inaudible / chat-appareil photo hors tension] Bon, je suis encore à apprendre, toujours apprendre. Donc, nous avons quelque chose d'autre qui est assez intéressant ici. Ouais, je me demandais, avez-vous une idée ce qui se passe ici? Vous savez comment interpréter cela? >> Je devais mettre la virgule après chaque ligne. C'est une sorte de douleur. Parfois, ces points-virgules peut être une vraie douleur à traquer. Ainsi, il s'avère que le programme spécial que nous utilisons cette année pour compiler notre code C est appelé Clang, et la raison pour laquelle nous avons commencé à utiliser Clang cette année - parce que nous n'avons pas utilisé ce programme dans le passé; nous avons utilisé un autre appelé GCC qui est vraiment populaire - Clang vous donne en fait des messages d'erreur de sens. Celui-ci dit «devrait», «après l'expression", et il vous indique même l'expression, après quoi vous besoin d'un point-virgule. Donc, vous le réparer? >> Oui, en ce moment. Awesome; laissez-moi savoir et nous allons le tirer vers le haut, et nous allons l'exécuter. Mais oui, mettre ces points-virgules en est une sorte de douleur. >> Je l'ai corrigé, donc je pense que cela devrait fonctionner. Awesome - révision 3. Qui ressemble à cela. Bon, maintenant si nous l'exécutons, là, il va. Cool stuff. Très bien. Donc merci pour le faire. C'est formidable de vous rencontrer. Qu'est-ce qu'on va faire maintenant passer le prochain bit peu un peu de plonger dans les problèmes de la section qui viennent de ce problème réglé de cette semaine et nous allons le faire pour la plupart des sections pour le reste de la durée, puis nous allons économiser les 15 dernières, 20 minutes ou plus pour parler du problème lui-même mis en puis quelques autres questions que vous avez en général sur la classe. Cela dit, ce que nous avons vraiment envie de faire est ont tous ceux qui participent en utilisant les choses espaces, jetant dans le code, en jetant des suggestions, et parle quand des choses comme cette rupture ou ne fonctionnent pas, juste parce que ce sont des choses que les Je sais que je suis tombé sur quand j'ai commencé à coder, et étaient vraiment un peu frustrant par moments parce que si c'est comme 2 heures avant votre problème posé est due, donc - juste pour la communication, Je n'ai pas commencé la programmation jusqu'à ce que j'étais en deuxième année à l'université. Il a eu la gentillesse de ce bizarre, chose inconnue que j'ai entendu, c'est plutôt cool et j'ai aussi entendu qu'il pourrait être une vraie douleur dans le cul si vous manquez un point-virgule et c'est la seule erreur maintenir votre programme de travail et vous empêche de vous endormir, si définitivement, si vous avez des questions telles que, si vous avez des soucis comme ça, laissez-moi savoir, parce que je veux que ce soit une bonne expérience pour vous les gars. Donc, avez-vous les gars tous les documents téléchargés au problème posé encore? Kinda savez où il est? D'accord. Donc, nous allons aller à cs50.net, parce que je ne l'ai pas sur ce compte, tirer vers le haut les ensembles de problèmes, tirer vers le haut 2 set problème, et nous allons voir l'édition standard d'aujourd'hui. Nous allons tirer vers le haut la spécification ici. Faites défiler vers le bas. Alors, on va commencer à regarder cette section de questions. Avez-vous les gars regardé ce short encore? D'accord. Donc, il ya courts métrages sur des boucles, ce qui est fait par Tommy, un des compagnons d'enseignement tête. Il ya un sur la portée, Je crois réalisée par un autre adjoint à l'enseignement du nom de David et puis un autre sur Caesar Cipher également réalisé par David. Ils sont plutôt sympas. Avez-vous les gars regarder leurs shorts été jusqu'à présent? Comment vas-ils? Utile? Ok, bon à savoir. S'ils ne sont pas, vous pouvez le dire. Mais avant de le faire, Avez-vous les gars regardé ces questions du tout? Parlons un peu cette question. Donc, nous avons mis en place au cours des deux dernières semaines dans la conférence un certain nombre de boucles différentes. Il ya la boucle for, la boucle while, puis la boucle do-while, et dans la conférence, nous avons beaucoup parlé comment ces boucles sont tous assez semblable à beaucoup d'égards, et vous pouvez faire beaucoup de choses même avec une boucle while que vous pouvez le faire avec une boucle pour. Vous avez juste à type d'utilisation les bonnes combinaisons de variables et autres. et si vraiment la distinction réelle de l'ensemble des boucles, c'est que parfois ils sont plus utiles à les utiliser à un moment qu'à un autre moment. Ainsi, par exemple, la boucle tout en différant d'une boucle do-while. Est-ce que tout le monde se sentent comme ils ont une bonne poignée sur le moment où une boucle do-while est plus utile ou quelle est la différence? >> Je pense que la différence est une boucle do-while court - Je ne sais pas exactement ce que la terminologie est, mais la série de fonctions à l'intérieur de la boucle. Ils automatiquement - il fait ses courses au moins avant de vérifier la condition ou la boucle while ne l'exécuter lorsque il fonctionne en permanence - si oui ou non la condition est satisfaite. Ouais, ça fait du sens? Jetons un coup d'oeil à un peu de code. Il suffit donc de répéter la question, ou la réponse, plutôt; la réponse était que une boucle while va vérifier pour voir si la condition que vous spécifiez est rencontré avant l'exécution du corps de la boucle pour la première fois, tandis que la boucle do-while exécute automatiquement le corps de la boucle, C'est ce que nous appelons - c'est bizarre terminologie, mais si je devais dire quelque chose qui n'a pas de sens, laissez-moi savoir - le corps de la boucle est ce truc que vous avez mis entre les accolades. Et dans une boucle do-while, ce corps se lancer au moins une fois, et alors la condition est vérifié avant qu'il ne s'exécute chaque fois consécutive. Donc en fait, Sam, ça vous dérange écrire une simple boucle while dans les espaces? >> Comment avez-vous un peu comme faire une nouvelle ...? Je viens de supprimer tout ce que vous avez là-dedans. Oui, il suffit de vider. >> Eh bien, je crois que je vais avoir ce - qui voulez-vous que, d'un moment, ou voulez-vous ...? Ouais, tout simplement un moment vrai, imprimer quelque chose. Et nous allons voir. Alexandre, j'ai réalisé que nous ne vous mis en place. >> Oh, c'est bien. Avez-vous - pouvez-vous coder une boucle do-while pour nous? >> Ouais, je vais essayer. Très bien, nous allons tirer de ces sur l'écran, de sorte que vous sorte de avoir une poignée sur ce que sont les différences. Alors, voici ce que Sam a fait. Il a appelé un entier i qu'il est initialisée à 17. Puis il dit: while (int i = 17) printf ("Mon nom est Sam."); Donc ce qui arrive quand on exécuter ce code? Il ya une erreur, ce qui ne l'd'erreur? Regardons les choses en tirez vers le haut et d'en parler. Une erreur s'est produite, dit-il. Faisons défiler vers le bas. Donc, il nous a donné cette erreur, et il a dit, "Hé, je m'attendais à une expression." C'est un peu cryptique. Ouais, si exactement - et encore, il y aura un autre petit bug que nous allons prendre dans une seconde. Mais cela est une autre de ce genre de choses étranges terminologie, si cette int i = 17 n'est pas une expression. Qu'est-ce qu'il dirait qu'il a fait, c'est qu'il est déclarer un entier appelé i et sa mise à égaler à 17 ou, plutôt, mettre 17 dans ce que j'ai appelé int. Et cela n'a pas de sens dans le cadre de cette boucle. Il est logique, comme nous le verrons, dans le contexte d'une boucle for, parce que pour les déclarations de boucle ne commencer avec celle des int i est égal à quelque chose et se poursuit. Alors avez-vous - réparer quelque chose, d'accord. Ici, il va; impressionnant. Alors maintenant, les choses sont un peu différentes. Un couple de choses ont changé. Pouvez-vous nous dire ce que les choses ont changé? >> J'ai pris l'int, donc il n'y a pas de déclaration [inaudible] au lieu d'une cession. Le seul signe égal, je mets 2 signes égal, ce qui signifie un pied d'égalité. Awesome. Ouais, et alors que Sam ne fut-il sorti de l'int qui était ici plus tôt, donc si je viens de regarder ce - c'est ce qu'elle était auparavant, il a déclaré int, qui a été le déclarer - nous avons donc pris le type. Il est int, char, string, bref, ceux qui sont appelés types. Donc, vous avez pris le type puis précédemment, il a eu juste le seul signe égal et ce qu'il a dit était problématique à propos de cet été quand vous avez 1 signe égal, c'est un opérateur d'affectation. Ce n'est pas de tester si oui ou non 2 choses sont égales. C'est effectivement quelque chose d'égal à fixer quelque chose. Nous mettons le numéro 17 dans la variable i. Donc, pour faire ce genre de comparaison, vous devez utiliser le double égaux, qui est une sorte de truc bizarre mais c'est une erreur assez commune. Donc, une autre chose que je vais souligner, si vous le voulez bien, est que, dans notre fonction ici en int main, vous voyez que le corps de notre fonction est décalé par rapport au côté gauche de 4 espaces ou des tabulations. La raison pour laquelle nous faisons cela est juste pour une meilleure lisibilité. Comme vous pouvez le voir en boucle tandis que Sam est ici, il n'a pas du tout tiret, et qui n'affecte pas la fonctionnalité du code. Il se déroulera exactement le même. Ainsi, par exemple, si nous arrivons au sommet ici et appuyez sur le bouton Lecture notre, il va le construire, il va l'exécuter, et ce qui va se passer? Pourquoi faut-il toujours dire la course? Parce que ça va >> répéter salut. Exactement, et pourquoi faut-il répéter salut? Parce que le entier >> ne change jamais, donc c'est toujours 17. Oui, exactement, de sorte Voyons, après - me rappeler votre nom? Jimmy. Alors Jimmy a dit que la raison de ce salut ne cesse de répéter encore et encore C'est parce que cette condition est toujours vraie. Nous n'avons jamais changer la valeur de i. Nous n'avons jamais modifier le contenu de ce qui est stocké dans cette variable. Donc, à ce stade, nous avons eu cette erreur votre programme de sortie généré trop, et si nous défiler vers le bas et le genre de regard sur ce qui se passe ici, vous pouvez voir qu'il est salut, salut, salut, salut, salut, salut, salut tout le chemin à travers. Awesome. Alors sorte de retour au point de départ que d'avoir l'indentation ici dans le corps de la boucle while ne changera rien. Le programme courait toujours très bien. Typiquement, pour un bon style - et c'est quelque chose que nous recherchons dans vos ensembles de problèmes - nous vous demandons de tiret de ce par 4 espaces, que vous pouvez faire en appuyant simplement sur la touche de tabulation ou manuellement en mettant en 4 espaces vous-même. Cool, ok nous allons donc revenir en arrière et regarder Alexandre do-while. Juste un peu >> un peu de mal. Bon, eh bien nous allons travailler à travers elle. Est-ce cool? Ouais >>. Bon, alors on y va. C'est le code qui a écrit Alexander. Allez-vous par Alex - d'accord. Alors, voici le code que Alex a écrit. Donc, nous avons notre déclaration de principal ici, puis nous avons obtenu cette variable entière appelée i être déclarés ici. Nous avons une déclaration do et puis de nouveau le corps de ces entretoises, c'est donc le corps du do-while - permettez-moi de faire un zoom sur ce il est donc plus lisible - et dans le corps, nous essayons d'afficher "ceci est le corps», i + +, afin d'incrémenter le contenu de i et faire jusqu'à ce que je commence à être 3, et puis notre programme se termine. Donc ce qui arrive quand on exécuter ce programme? >> Je m'attendais à un identifiant. Bon, build, run, une erreur se produit. Qu'est-ce qui se passe? Nous défiler vers le bas ici, nous obtenons cette chose quelque peu énigmatique à la recherche, devrait-virgule après la déclaration de haut niveau. C'est un peu bizarre. Est-ce que quelqu'un a une idée de ce qui pourrait se passer? Un peu bizarre, ouais. >> [Inaudible] être déclarée en dehors des parenthèses? Ne s'applique pas si bien que puis quand vous utilisez des parenthèses? Ainsi, il a déclaré ce type en dehors de laquelle parenthèses? Oh, ces gars-là - les accolades? Ouais >>. Oui, exactement. Ainsi, il s'avère que vous ne pouvez pas réellement déclarer une variable, ici comme ça. Qu'est-ce que vous pourriez avoir essayé de faire était - découpez-le de là - vous pouvez le mettre entre les accolades ici ou une autre solution de rechange est de mettre complètement à l'extérieur. Et si ceux-ci - selon l'endroit où vous avez réellement mettre la déclaration de cette variable entière, vous pouvez obtenir 2 types très différents de variables; quand il est en dehors de la principale, c'est ce que nous appelons une variable globale. C'est en dehors de la portée de toutes les fonctions - ce n'est pas dans une fonction - alors que si on le met à l'intérieur du principal, comme ici, alors ça s'appelle une variable locale, parce que c'est à la portée locale de main. Et nous allons parler un peu plus sur ce que les différences sont entre les 2 types et pourquoi vous utilisez différents types de variables, mais pour l'instant, vous pouvez juste garder toutes les variables locales, parce que nous n'avons pas besoin de variables globales. Ok, donc c'est une bonne chose là-bas. Nous allons essayer de lancer ce nouveau, voir ce qui se passe. Exécuter, obtenir une autre erreur. Zoom un peu, qu'est-ce que nous obtenons? Nous obtenons cette parenthèse attendue après do / while. Toutes les idées ce qui se passe? Dan? >> Le moment puis entre parenthèses, puis - Je ne sais pas si vous avez besoin de re-déclarer int, mais le faire while (i <3). Exactement, oui. Ainsi, il s'avère que Dan est tout à fait exact. Nous n'avons pas besoin de mettre ce type ici. Nous pouvons tuer plutôt que le type et de faire juste cela. Très bien. Je vais effectuer un zoom arrière, l'essayer une fois de plus. Regardez ça, il fonctionne avec succès. Si nous défiler vers le bas », c'est le corps» imprimé 3 fois. C'est assez doux. Bien joué, bien joué, les gars. Bien fait. Comment est ce que ça va si loin? Rythme décent? Ok, cool. Ainsi, comme nous sorte de revenir à la question initiale, nous - et maintenant, si nous voyons la différence, vous voyez que dans cette boucle do-while, la condition vient en dernier. Alors que l'ordinateur lit le programme puisque les programmes C sont exécutées en quelque sorte dans cet ordre séquentiel, où ils ont littéralement commencer par la première ligne du principal, puis exécutez la ligne 6, ligne 7, ligne 8, ligne 9, ligne 10, ligne 11, tous ces trucs en haut à droite ici va exécuter une fois avant que nous ayons tester cette condition à voir si oui ou non i - ou le contenu de i, plutôt - est inférieur au nombre 3. Et seulement si, une fois nous arrivons à la ligne 12, le contenu du i est inférieur à 3 ne nous fait revenir en arrière à la ligne 7 puis répétez le processus, puis nous testons la condition encore et encore et encore. Ainsi, nous pouvons comparer ce avec - zoom revenir en arrière, faites défiler vers la version de Sam, nous allons regarder cela, légèrement modifiée de sorte que ce n'est plus une boucle infinie - où si l'on zoom avant, nous voyons que ce programme s'exécute, il va d'abord déclarer int i, définir le contenu de i est à 0, puis il frappe la condition de la boucle tandis que premier, dans ce cas, ce corps, cette printf ("salut") et i + + ne sera même pas exécuter sauf si i est effectivement inférieure ou égale à 2. Donc, si i est 3, par exemple, si l'on met ce droit ici égal à 4 - ou je vais faire 3, parce que j'ai dit 3 - et puis l'exécuter, il va construire, ça va fonctionner tout à fait bien, mais il ne sera pas réellement imprimer quoi que ce soit, car il échoué à cette épreuve pour le premier cas. Ainsi, en classe, nous avons un peu parlé de pourquoi ces boucles do-while sont utiles parfois et pourquoi nous l'utiliser, par opposition à une boucle while. Y at-il - ne vous les gars avez des suggestions raison pour laquelle une boucle do-while pourrait être plus utile? >> Eh bien, je pense boucles do-while est que si vous voulez entrée de l'utilisateur, car de cette manière vous pouvez les laisser mettre quelque chose en une fois, si elle est correcte, nous pouvons passer à la suite du programme, mais si elle n'est pas correcte, puis vous continuez à demander à l'utilisateur jusqu'à ce que vous mettez l'entrée droite. Ouais, exactement - exactement, si une boucle do-while est utile parce que lors de la demande de saisie de l'utilisateur car vous avez besoin d'obtenir les commentaires de l'utilisateur avant que vous pouvez réellement le vérifier. Donc, en pset 1, dans pset 2, où vous invitant à l'entrée d'utilisateur d'un lot, c'est une chose très pratique à utiliser par opposition à une simple boucle while simple. Si vous utilisez une boucle while, vous pouvez faire la même chose - vous pouvez faire la même chose avec une boucle while comme vous le feriez avec une boucle do-while. Vous avez juste à avoir cette sorte de processus de copie où vous obtenez la première entrée, puis démarrez votre boucle while. Alors qu'une boucle do-while, il vous suffit de l'écrire une fois et il est beaucoup plus propre. Très bien. Des questions? Donner un sens? >> Le retour 0 - c'est juste une sorte de décrochage ou est-ce -? Ouais, et alors nous pouvons - eh bien, nous verrons cela un peu plus tard mais il s'avère que ce retour 0 que nous avons mis à la fin de tout le temps principal - vous pouvez simplement prendre un peu comme quelque chose que nous faisons pour le moment. Ce que nous avons commencé à parler avec les fonctions sorte qu'à la fin de la semaine dernière et encore cette semaine est une fonction qui prend des données qui sont ces choses à l'intérieur des parenthèses; ce sont 2 entrées, nos arguments ou paramètres, ce qu'ils sont aussi appelés à notre fonction principale, puis une fonction produit un signal de sortie que nous appelons une valeur de retour. Et la valeur de retour dans le cas de ce principal est int, ce nombre entier, et la façon dont vous dire une fonction, "Hé, c'est ce que votre sortie va être ", c'est avec ce mot« retour », ce mot-clé, plutôt, et ainsi de suite principale renvoyer 0 ou la sortie principale 0 est la norme dans les programmes C car le retour 0 de principaux moyens que les "Hé, tout exécuté avec mon programme très bien." Si nous devions mettre autre chose que 0, 1 comme, par exemple, qui est utilisé pour dire à quiconque ce programme s'est que quelque chose s'est mal passé. Alors que nous s'impliquer davantage avec des trucs sur le semestre, si vous êtes jamais avoir à dire, "Oups, vous savez, quelque chose se passait mal avec ce programme», plutôt que d'avoir mon plantage du programme, je tiens à informer le coureur de mon programme que quelque chose s'est mal passé, vous pouvez utiliser la valeur de retour, comme on l'appelle, ce n'est pas 0. Donc, nous verrons cela un peu plus fois que nous obtenons en fonctions. Ce genre de logique? D'accord. Fonctions sont un peu bizarre - Je pense que pour les gens qui ont beaucoup d'arrière-plan mathématique, il s'agit un peu plus facilement, surtout si vous avez un peu de fond les mathématiques plus abstraites et vous avez l'habitude de parler de fonctions et tout ce genre de trucs. Mais nous allons essayer de les couvrir et aller gentil et lent à mesure qu'ils surviennent. De même, cette argc int entier, char * argv [], pour le moment, vous pouvez aussi profiter de plaque de la chaudière en. Nous avons commencé à couvrir les bits un peu de lecture lorsque nous parlons des arguments qui se passaient dans les programmes en ligne de commande, mais dans vos ensembles de problèmes et de vos programmes, il est tout à fait bien peu pour écrire nulle et garder les choses simples. Et ce que cela signifie, c'est que nulle "Hé, principal n'est pas prêt à accepter toutes les entrées; c'est juste un programme on va faire il suffit d'exécuter. On ne va pas lui donner toute information supplémentaire chaque fois que nous commencer la course à pied. " Donc pour l'instant, vous pouvez le faire; vous pouvez également omettre le même retour 0 à la fin de vos programmes et ils vont courir très bien, mais je vous recommande juste garder que po Dans quelques semaines, nous allons commencer à type de retirer le couvercle un peu et de mieux comprendre toutes ces différentes petites pièces mobiles. Très bien, maintenant nous allons parler de notre deuxième question ici. Alors qu'est-ce que "identificateur non déclaré" indiquent généralement si délivré par Clang? Je pense que nous aurions pu voir que déjà aujourd'hui. Quelqu'un peut-il donner un résumé de ce que cela signifie? Voyons, Kelly - l'un des Kellys. Alors >> - Ouais, qu'est-ce que - >> Je pense que lorsque vous, comme, ne pas déclarer les variables et que vous essayez de l'utiliser. Oui, exactement, exactement. Donc, si jamais vous voyez cette sortie lorsque vous essayez de compiler votre programme, tout comme Kelly a dit: cela signifie que vous avez utilisé une variable que vous n'avez pas déclaré, donc si je reviens à notre espace, et je fais quelque chose comme printf ( "% S bonjour") et d'essayer de combler cette% s avec une variable s que je n'ai pas déclarée nulle et j'essaie de l'exécuter, vous verrez ce que je descends à cet en bas à droite ici: "L'utilisation de identificateur non déclaré" s ""; cela signifie simplement que vous n'avez pas déclarer votre variable. C'est la même chose qui se passe si vous avez x et que vous essayez de stocker et 7 dans l' et je n'ai pas déclarer X. Je reçois la même erreur: "L'utilisation de 'x' identificateur non déclaré". Tout droit, de sorte que le chiffre de César, n'étant pas très sécurisé, Je vais vous laisser regarder cette courte, sorte de comprendre pourquoi, et nous espérons que, après avoir fait problème cette semaine mis en où vous avez réellement écrire un chiffrement de César, vous comprendrez un peu plus sur ce que cela signifie d'être un environnement sûr et sécurisé - ou non sécurisé, je suppose - l'insécurité est légèrement différente. L'autre chose est que nous avons ces autres questions ici sur les fonctions et ce qui est une fonction, et nous avons un peu parlé brièvement quand nous avons parlé des valeurs de retour; pour quelqu'un qui a été à donner des conférences, pouvez-vous nous résumer qui a été à la leçon d'aujourd'hui? Très bien. Voyons, nous allons avoir - quelqu'un peut-il nous dire ce qui est une fonction? Kelly? Fondamentalement >> quelque chose que vous tirer sur quelque chose qui est écrit dans la bibliothèque qui est plus compliqué là-bas, et puis il suffit d'écrire un court formulaire de celui-ci, donc comme vous référant à la bibliothèque, à l'aide tout ce code long et [inaudible]. Oui, exactement, et puis tu veux ajouter quelque chose à cela? >> Ouais, je pense à ce sujet que similaire au concept d'une formule en mathématiques où vous venez d'écrire une formule, puis vous pouvez brancher variables et c'est ce qui est une fonction de [inaudible]. Ouais, donc nous avons eu quelques réponses ici qui sont à la fois très bon et droit de suite. Il fait allusion au code qui a été écrit dans la bibliothèque quelque part c'est plus compliqué et puis vous pouvez tirer parti de ce code et effectivement l'utiliser en écrivant simplement la forme abrégée de celui-ci - ou, plutôt, son nom - et puis il ya aussi cette comparaison à une formule en mathématiques ou physique, tout ce genre de trucs où vous avez une formule et vous pouvez raccorder les variables de cette formule puis à obtenir le résultat de la formule, si vous pensez à ce sujet que, comme l'équation quadratique. Imaginez si, plutôt que d'avoir à en apprendre davantage sur ce que la formule quadratique est en cours de maths, vous venez d'avoir un programme de calcul peu qu'il a fait pour vous. Quelqu'un at-il d'utiliser les programmes de la calculatrice en classe de mathématiques à l'école secondaire? Oui, les classes de physique? Où vous pouvez simplement dire: «Hé, formule quadratique. Ce sont les variables que je veux entrée. Maintenant donnez-moi la réponse. " C'est le genre de ce qui est une fonction. C'est une façon pour nous de genre d'écriture comme un petit programme sous peu au sein de notre programme plus vaste et l'utiliser encore et encore de sorte que nous n'avons pas à copier et coller le code, nous pouvons lui donner différentes entrées et sorties d'obtenir différents, c'est super pratique lorsque vous essayez d'écrire des programmes différents à des moments différents. Ainsi, par exemple, une fonction que nous avons utilisé maintes et maintes et maintes fois tout au long de ce cours est de printf. Printf est elle-même fonction et il s'avère que c'est en fait un assez long et compliqué, vilaine, fonctionner à écrire. Donc, aussi simple que cela nous semble d'imprimer des trucs sur l'écran, parce que nous avons tous fait cela au début de la section d'aujourd'hui, il s'avère que c'est fait, vous savez, un bon couple de centaines de lignes de code. Ce n'est pas quelque chose que je n'aurais jamais eu envie d'écrire, bien sûr, mais nous arrivons à l'utiliser tous les jours, c'est plutôt cool, si nous arrivons à le partager avec l'autre, avec des programmes différents, donc nous allons être plongée plus en fonctions; pour le moment, nous ne sommes pas - la fonction que nous allons écrire est le principal. Principal lui-même est également une fonction, et vous pouvez le voir, c'est a sa sortie, ses intrants, comme nous en avons parlé, puis son nom, qui est le principal. Principale est une sorte de - est une fonction spéciale là-bas. Dans votre programme C, il doit y avoir une fonction principale, et donc pour l'instant, nous avons omis genre d'écriture le prototype, ou la déclaration d', principal. Nous avons vu que pour vous, et nous venons vous remplissez avait en nature des ébauches. Alors >> pour l'ensemble deuxième problème, nous n'avons pas besoin d' écrire dans la seconde fonction? Je ne le crois pas. Je crois que c'est tout ici. Ouais, donc Caesar Cipher, vous n'avez pas à le faire, il ne ressemble pas, et Vigenère, vous non plus, si - et il s'avère que vous n'avez jamais fait d'écrire une fonction, non? Vous appelez toujours mettre tout votre code dans principal, et de nombreux programmeurs faire. Comme nous passons, nous commençons à introduire des fonctions comme un moyen pour nettoyer votre code, pour le rendre plus élégant, dans le cas où vous avez des tâches - un peu comme lorsque nous avons parlé de boucles, comment parfois il ya des choses que vous voulez faire encore et encore et encore, et vous avez le genre de manière naïve - ou ce qu'on appelle souvent le «homme de paille» solution, est de simplement copier et coller maintes et maintes fois - vous pouvez faire la même chose avec des fonctions où vous suffit de copier et coller le même code encore et encore, mais cela gonfle votre code - il finit par faire votre code très long - et il est aussi un peu confus, et cela signifie que vous n'êtes pas capable d'aimer - si jamais vous voulez utiliser ce code à un autre programme, vous êtes également bloqué le copier-coller de nouveau, si l'une des choses que nous allons parler est type de design et le style de vos programmes, et donc quand il est logique de type de ensemble quelque chose et de le mettre comme une fonction distincte, nous vous encourageons à le faire, et c'est quelque chose qui, encore une fois, il n'y a aucune règle dure et rapide. Nous avons rarement dire que vous devez écrire une fonction appelée présent, mais il s'agit plus d'une de ces choses que vous venez de développer au fil du temps que vous écrivez des programmes de plus en plus. D'autres questions? Ok, nous allons donc maintenant remonter à ce gars ici, donc je suis toujours dans cette section de questions. Nous avons parlé de tous ces différents les, ce qui est une fonction, pourquoi écrire des fonctions, quand vous pouvez simplement copier et coller? Espérons que nous vous avons convaincu que l'écriture de fonctions est une bonne chose. Alors maintenant, nous allons passer à ce programme MySpace, et nous allons passer un peu de temps à faire cela. Donc, nous allons le voir, puis-je avoir quelqu'un lire ce pour moi? Ayons Mikhaila - vous lu cela pour nous? >> Tu veux dire en arrière quand MySpace - Sauvegardez quand MySpace c'était cool. >> «À l'époque où c'était cool MySpace, il était à la mode à écrire de cette façon. Peut-être que c'est encore? Je ne suis pas vraiment sûr. Dans tous les cas, l'utilisation de l'appliance CS50, CS50 Run, ou CS50 espaces, écrire un programme qui demande à l'utilisateur un message puis renvoie le message avec sa première lettre en majuscule, avec toutes les autres lettres dans le cas alternatif, selon l'exemple de sortie ci-dessous, dans laquelle le texte en gras représente une entrée de l'utilisateur. Pour plus de simplicité, vous pouvez supposer que l'utilisateur va saisir des lettres minuscules et les espaces seulement. Pensez à ce problème une occasion de pratiquer; vous ne serez pas invité à présenter ce programme. " Génial, merci. Alors que Mikhaila dit, nous allons écrire un programme qui myspaces votre code. Donc, ne vous les gars de toute utiliser MySpace? Ceux d'entre vous ont des comptes MySpace? Oh, ouais, ouais! C'était assez cool. [Rires] Je sais. Mon âge. Donc, ce que nous essayons de faire est d'écrire un programme qui passe par et la première lettre puis chaque lettre par la suite - ou tout autre lettre par la suite, je suis désolé. Donc - et vous pouvez le voir dans cet exemple, c'est ainsi que nous lançons le programme, et si cela ne fait que dire: «Nous sommes en cours d'exécution d'un programme appelé a.out. L'entrée que nous allons lui donner va être invité. On va pas fournir l'entrée sur la ligne de commande. " Si vous avez suivi toutes les conférences et d'entendre sur les arguments de ligne de commande, c'est le genre de ceux où - cette syntaxe géniale au principal vient avec l'int argc, tout ça, ici nous n'utilisons pas cela, nous ne parlons pas de tout cela. On va juste faire ce tapé par l'utilisateur, puis cette seconde ligne avec la capitalisation froussard C'est ce que nous voulons que notre programme de sortie. Ainsi, plutôt que d'utiliser l'appareil ou Exécuter, nous allons utiliser les espaces, parce que nous avons espaces, et si vous les gars seraient obtenir votre code à ressembler à quelque chose comme ça, donc je vais enregistrer cette révision juste pour que vous avez la plaque de la chaudière ici qui ressemble à ceci, int main (void), rien en elle. En fait, ce que nous allons faire, c'est nous allons simplement supprimer tout ensemble. Nous voulons une ardoise vierge, parce que nous n'allons pas commencer à écrire du code; plutôt, nous allons essayer d'écrire une pseudo- qui vraiment signifie simplement que nous allons écrire quelque chose qui n'est pas le code ce genre de décrit ce que nous voulons faire, un peu comme David a fait le premier jour de la conférence, ou je suppose que c'était le deuxième jour de la conférence, quand il a fait toute la démo chaussettes. Vous vous souvenez de ce que - vu les chaussettes? Joseph était là-haut, sorte de taper en anglais? Alors, on va faire la même chose. Alors, quand je commence à écrire un pseudocode, Je voudrais commencer par regarder ce que l'entrée va être. Et je me donne un exemple de cas, donc comme "thanks for the add!" Et puis je dois aussi écrire ce que je veux que la sortie soit, qui dans ce cas est quelque chose comme ça. Et ce genre de me donne un bon endroit, comme, commence à penser, «D'accord, je veux prendre la ligne 1 et je tiens à le transformer en ligne 2 », et ce genre de permet de guider ma réflexion. C'est un bon endroit pour commencer. Une autre façon de penser, aussi, que nous kinda passer et comme vous le faites dans vos propres programmes, est de penser un peu comme ce sont les cas limites à cela? Quels sont les types de scénarios bizarres? Quelles sont les entrées étranges que nous pourrions obtenir? Et quelles devraient être ces sorties ressembler? Par exemple, une entrée bizarre serait celui-ci, la création d'absolument rien, comme ce qui devrait nous affichons dans ce cas? Quelque chose que nous voulons penser, aussi. Ainsi, tout comme une question, ce qui pourrait nous voulons sortie? Si nous n'obtenons pas tout apport, ce qui devrait être notre programme de sortie? Rien >>. Rien? Ça a l'air génial. Nous voulons donc nous assurer que nous ne sommes pas écrire quoi que ce soit si nous n'obtenons rien po Cool. D'accord. Si Je vais faire appel à un couple de personnes que nous traversons et juste comprendre un peu comme ce que l'algorithme général est et nous allons commencer à travailler à travers sorte ensemble. Donc, nous allons voir. Missy. Comment pensez-vous que nous commencions? Quel serait un bon endroit pour commencer ici si nous voulons transformer, par exemple, la ligne 1 sur la ligne 2? Pouvez-vous genre de m'expliquer, en anglais, à quoi tu penses? Ne vous inquiétez pas même code. Chose >> abord, je voudrais faire serait de sorte de problème à l'utilisateur de leur dire ce que vous voulez. Bon, alors, disons, "Hé, utilisateur. Je veux une chaîne "- awesome. Donc, nous allons écrire cela. Inviter l'utilisateur à une chaîne. Cela sonne comme un bon début. Très bien. Demandons Kelly Ren cette fois. Que ferions-nous alors voulez faire ensuite? Ce qui est en quelque sorte notre prochaine -? >> Recueillir leurs commentaires et de les stocker dans une variable. Grande. Ainsi, la collecte de la chaîne, le stocker dans une variable. Donc, il ya quelque chose de spécial que nous voulons faire ici? Voulons-nous de vérifier leur entrée avant -? Ouais >>. Que pourrions-nous vouloir vérifier? >> Eh bien, vous avez dit que nous n'avons pas de vérifier si c'est un nombre, non? Parce que ça va supposer que c'est en minuscules? Ouais. Ainsi, il s'avère que - oui. Donc getString est garantie pour nous renvoyer une chaîne. Il ne va pas remettre un numéro à nous ou quelque chose comme ça. Il pourrait y avoir des caractères numériques au sein de cette chaîne, cependant. Et ceux-là, nous ne pouvons ignorer que nous avons fait de la capitalisation. Mais une chaîne vide est tout à fait bien, si le cas ici, sur la ligne 4 et 5, droite, où il n'y a pas d'entrée, et nous avons mis en rien notre production. Nous n'avons pas à vous soucier de faire en sorte qu'il ya quelque chose dans la chaîne de ou que la chaîne est au moins 4 caractères; tout est bien. Donc, ce contraste, par exemple, comme les programmes de centimes que vous avez écrit où il fallait s'assurer que vous receviez des nombres non négatifs; vous avez eu à faire en sorte que vous receviez le nombre exact de jours dans un mois. Et comment que vous faites là? Comment feriez-vous ce test? Qu'est-ce qui vous obligent à utiliser? >> As-while. Boucles do-while, d'autres types de boucles, aussi, ouais. Ainsi, il s'avère que nous n'avons pas d'utiliser une boucle dans ce cas, lorsque nous demandant de saisir une chaîne de caractères, ce qui est assez agréable. Tout à droite, avancer. Donc, Stella. Pouvez-vous nous en dire un peu plus sur ce que nous devrions faire ensuite? Alors maintenant, nous avons la chaîne, nous avons stocké dans une variable; qu'est-ce que nous devons faire avec la chaîne? Nous devons >> - identifier la 2 - Oui, juste le dire en anglais, c'est génial. >> Identifier les [inaudible] capitales - ou, en majuscules. Ouais, donc vous devriez identifier celles qui sont en majuscules et en minuscules. Nous ne pouvons pas en majuscules ou en minuscules eux jusqu'à ce que nous avons identifié lesquels. Donc, nous allons mettre cela ici. Donc, il suffit de penser à ce processus, comment pouvons-nous faire cette identification? Savez-vous, Dan? Type de ce que nous - ce que l'outil que nous aurions à utiliser hors de notre boîte à outils? >> Je l'avais mis en quelque sorte comme un tableau dans chaque ligne ou est sa propre boîte peu, puis à partir de là en majuscules ou non. Ok, donc un outil que nous pouvons utiliser est un tableau. Que devons-nous regarder dans la chaîne, cependant, de comprendre - nous avons eu à regarder les personnages. >> Donc, vous avez à regarder la longueur de la chaîne? Oui, si une partie de cette obtient la longueur de la chaîne. Juste par curiosité, qu'est-ce que nous utilisons pour obtenir la longueur d'une chaîne? >> Strlen? Ouais, strlen; nous appelons cela "strlen" Toutes ces fonctions de chaînes, de sorte strlen est une fonction, et c'est super pratique, car on peut l'utiliser pour tout dire, Hé, strlen: Voici une chaîne, dites-moi combien de temps il est. Dans la conférence d'aujourd'hui, David a beaucoup parlé de la façon dont est mise en œuvre strlen, ce qui se passe réellement dans les coulisses. Mais c'est l'un des très super pratique. Il y en a d'autres qui sont aussi dans la bibliothèque de chaîne, comme strcmp, qui est orthographié "strcmp", qui est utilisé pour comparer des chaînes à l'autre. Les autres que vous allez utiliser comme strstr, ce qui est bon pour trouver des chaînes de sous et ainsi de suite. Pour la plupart, ils commencent tous avec str, puis passer à autre chose. La raison pour laquelle ils n'ont pas vraiment leur sort comme de la ficelle et ainsi de suite C'est parce que, comme de retour dans les premiers jours de C, quand les gens étaient la première écriture et tout ça, ils avaient des limitations sur le nombre de caractères que vous pouvez utiliser pour les noms de fonction et les noms de variables, donc tout est comme super condensée. Mais quand vous voyez quelque chose qui commence par str, cela signifie généralement cela a quelque chose à voir avec une chaîne. Bon, vous avez pour obtenir la longueur de la chaîne, et puis, que faisons-nous avec les personnages? Savez-vous, Sam? >> Je n'ai aucune idée, je cherche à comprendre. Je ne sais pas - je souhaite qu'il y ait un moyen de - Je veux dire, je pense que nous pourrions faire quelque chose de bric et égalise, mais je ne sais pas du tout fonctionner comme cela. Ouais. Mais ce que >> - il ne serait pas nécessairement, car alors vous obtiendrez les espaces à - vous devez avoir de l'espace pour obtenir des conseils sur la façon - D'accord. >> Je ne sais pas - je suis genre de perdu à ce point. Oui - non, non, non, ce sont de bons points. Donc, ce que nous devons faire, c'est, comme l'a dit Sam, nous devons suivre les lettres sont des lettres bizarres, et ceux qui sont les lettres même. Mais nous voulons nous assurer que nous ne cherchons pas uniquement au pair et impair les indices de la chaîne, mais en regardant les lettres paires et impaires dans la chaîne, nous devons donc avoir un peu cette distinction entre lettres - comme ce qui est en fait A, B, C, D, ou ainsi de suite, et ce que les choses ne sont pas des lettres mais toujours dans notre chaîne. Par exemple ici, comme ce point d'exclamation n'est pas une lettre, mais il fait toujours partie de notre chaîne, c'est toujours un char. De même, l'ensemble de ces espaces - il n'a pas de sens pour tirer un espace, non? Nous voulons donc nous assurer que nous en quelque sorte sauter ces tout en suivant des cotes et égalise. Donc, en quelque sorte dans notre boîte à outils de programmation jusqu'à présent, si vous voulez, nous avons un certain nombre d'outils que nous avons parlé. Donc on, par exemple, sont des variables, comme nous en avons parlé ici. Un autre outil dont nous avons parlé sont des fonctions. Donc, nous avons parlé des variables dans notre pseudo-ici que ce que nous allons utiliser pour stocker notre chaîne. Nous avons parlé de fonctions pour obtenir la longueur d'une chaîne, comme strlen. Nous avons parlé d'autre chose, et nous en avons parlé pour beaucoup plus tôt dans la section aujourd'hui: boucles. Qu'est-ce que vous en pensez sur l'utilisation d'une boucle dans ce programme? Jared, qu'en pensez-vous? Serions-nous utiliser une boucle dans ce programme? >> Probablement pas, non, parce que vous n'avez pas à passer par là plus d'une fois. Bon, vous n'avez pas à passer par ce que plus d'une fois? >> La chaîne entière. D'accord, donc vous n'avez pas à passer par toute la chaîne une fois. Désolé que n'avait absolument aucun sens! Vous n'avez pas à passer par la chaîne entière plus d'une fois. D'accord. Que pensez-vous? >> Je pense que c'est mieux de les utiliser afin que nous puissions faire comme tout miser l'emplacement de celui-ci est le numéro [inaudible]. Grande, et ainsi de capitaliser quoi? Bon, alors nous disons que nous devrions utiliser une boucle parce que nous voulons une lettre en majuscule alors que ce n'est pas un nombre. Donc, - excusez-moi, vouliez-vous ajouter? >> Je voulais dire que la façon dont vous traitez la chaîne et [inaudible] séparée de la [inaudible] sur les personnages? Ouais. >> Et puis on peut attribuer les numéros à - ou basée sur l'emplacement des lettres dans la chaîne? Ouais. Et >> déterminer si c'est pair ou impair et de capitaliser la lettre elle-même tandis que l'emplacement de la lettre est [inaudible] - excusez-moi. Grande. Il suffit donc une récapitulation. Pouvez-vous me rappeler votre nom à nouveau - je suis désolé. >> Charlotte. Charlotte, d'accord. Alors que Charlotte est dit, ce qui est tout à fait raison - ça alors, ce aime à l'auto-indentation sur moi - est que si l'on regarde une chaîne comme celui-ci en haut - "Merci pour l'ajout" - comme une séquence de caractères où le est à la position 0, h est la en position 1. A est égal à 2, puis nous avons eu 3, 4, 5; l'espace est à la position 6. Considérant que - quelle est la position de f? 7! O? 8. R? 9. Et puis nous avons eu 10, et puis je ne peux pas vraiment écrire sans peu se salissant à l'écran. Mais c'est en fait la façon dont nous pouvons parler de chaînes dans la mémoire. Est-ce une chaîne de caractères est une séquence de caractères, et quand nous nous référons à un caractère individuel dans une chaîne, nous avons souvent le faire en se référant à la position de ce personnage à l'intérieur de la chaîne, probablement de la même façon que nous parlons de Septembre étant le neuvième mois de l'année ou le lundi étant le premier jour de la semaine. Donc, ceci nous fournit un moyen de déterminer lesquels sont impairs par rapport même parce que vous pouvez voir ici, si nous le faire correspondre avec ce T, vous pouvez voir que tous les capitalisés sont à même de positions, au moins pour le premier mot, et puis les choses se jeter au loin une fois que nous avons atteint l'espace, parce que nous ne comptons pas cet espace comme une lettre, donc c'est comme si nous avons commencé et a 0, 1, 2, 3, 4, 5, espace, 6, 7, 8, l'espace, 9 puis 10, 11, 12 etc. Cool, alors nous avons certainement préférable d'utiliser une sorte de boucle aller sur chacun des caractères à leur tour. Donc à ce stade, Nous allons revenir à notre ancien pseudo ici. Dans le cadre de cette identification de ceux qui sont en majuscules et ceux qui sont minuscules, nous voulons le faire dans une sorte de boucle. Boucle, du côlon. Quel genre de boucle, sur les types de boucles que nous avons, semble être une bonne idée d'utiliser dans ce cas? >> Je pensais la boucle for. Et pourquoi pensez-vous de la boucle for? Parce >> qu'il commence à zéro, puis lorsque nous arrivons à la longueur de la chaîne, puis chaque itération, vous pouvez [inaudible], aussi? Oui, exactement. Ainsi, sur les différents choix de boucles, nous avons des boucles, des boucles while et do-while. Si une boucle for est particulièrement utile c'est quand vous voulez en savoir genre d'où vous en êtes dans la boucle, le nombre de fois que la boucle a été exécuté jusqu'à présent. Ce qui est exactement ce que nous voulons savoir, dans cette situation, comme Kelly a dit: basé sur des commentaires précédents Charlotte que nous voulons connaître la position du caractère dans la chaîne, et la boucle for nous donnera juste que, parce que si nous commençons genre de regarder en arrière à notre chaîne, si nous commençons notre boucle de 0, et on monte sur toute la longueur de la chaîne entière, alors nous pouvons associer la lettre T avec le 0 dans notre boucle for, lettre H avec le 1 dans la boucle pour, et ainsi de suite, tout le chemin à travers l'extrémité de la chaîne. Donc, nous allons commencer à coder ce juste un peu juste pour vous les gars faire une idée de ce que cela ressemble. Je vais sauver ce, donc nous avons notre code pseudo ici, et je vais tout effacer. Donc, j'ai une ardoise vierge. Je vais commencer par écrire int main (void) { Je vais mettre le 0 en retour puis la.} Donc, en général quand je commence à programmer, c'est ce que je commence avec. Je vais l'enregistrer afin que vous les gars l'ont. Ainsi, une des premières choses dont nous avons parlé était obtenir l'entrée de l'utilisateur et le stocker dans une chaîne. Comment pouvons-nous obtenir les commentaires d'un utilisateur? GetString. >> GetString, d'accord. Donc, si je tape GetString () et un point-virgule. Nous allons essayer de lancer ce, cette course sera, tout d'abord? Et pourquoi ce ne sera pas exécuté? >> Vous devez déclarer la variable. Je dois déclarer une variable. D'accord. Alors, comment puis-je faire cela? Avez-vous l'esprit d'écrire quelque chose, il le partage? Et puis nous pouvons le tirer vers le haut. Voyons, Dan, bien, d'accord. Ou Daniel. Copiez que, d'entrée de chaîne = GetString (). Awesome. Est-ce que cette exécution? Essayons. Toucher course, le code source le téléchargement, la construction, une erreur s'est produite. D'accord. So whats passe ici? L'utilisation de 'chaîne' identificateur non déclaré. >> Nous devons inclure les bibliothèques? Ouais, donc Dan disant que nous devons inclure les bibliothèques. Est-ce que vous alliez dire, Stella? Awesome. C'est génial, donc Stella, pouvez-vous copier ce code hors de l'Espace Daniel? Si vous cliquez sur Daniel Roland Ki, le copier, et puis vous mettez la ligne include dans, puis enregistrez-out? Faites-moi savoir quand vous êtes prêt. Donc, cette syntaxe include est aussi une sorte de funky; il est comme ça tag hachage, et il ya le comprendre, et puis il ya ces équerres. Vous souvenez-vous comment cela fonctionne, ou devrais-je le mettre sur ce code ici? >> Je suis bon. D'accord. >> Je l'ai imprimé - Je ne savais pas quelle bibliothèque, cependant. Oh, d'accord - ouais, c'est donc la bibliothèque CS50. >> Oh, j'ai mis la bibliothèque stdio. Oh, il a obtenu - oui, non, C'est - il s'avère que la chaîne est en fait quelque chose qui est spécial pour CS50. Il n'est pas vraiment un type de chaîne vrai car ici, la chaîne est en position type - nous déclarer une variable appelée entrée de type string - et nous mettre à l'intérieur de l'entrée la valeur qui est renvoyée à nous: la sortie de cet appel de fonction GetString. Vous pouvez dire que c'est un appel de fonction, parce qu'il ya des parenthèses, tout comme le fait printf, tout comme strlen fait. Mais la chaîne est en fait pas un type réel dans le langage C. Nous l'avons transformé en un type, et nous allons prendre environ plus de ce qu'il est réellement en C, parce qu'il ya une façon de travailler avec des cordes; nous venons de faire quelque chose pour lui donner l'air un peu plus sympathique. Alors on y va. Voici le code de Stella. Il a le # include . D'autres personnes appellent cela comme une table de hachage sont parfois ou une forte inclure. Maintenant, nous pouvons le lancer, exécutez-le, et nous obtenons toujours une erreur. Voyons voir ce qui se passe. «Variable inutilisée 'input'." Bon, c'est cool, c'est cool. Je veux dire, ce n'est pas vraiment cool, parce que nous obtenons une erreur et ça ne fonctionne pas, mais ce que cela veut dire, c'est que nous n'avons pas utilisé notre variable, ce qui est logique. Nous n'avons pas essayé de faire quelque chose avec elle. Il s'agit d'une façon qui Clang est d'essayer de nous aider à nous assurer que nous ne sommes pas seulement en utilisant des variables puis en les appelant par inadvertance quelque chose d'autre plus tard dans notre code, nous aider à éviter les erreurs de cette façon. D'accord, donc nous avons d'entrée de l'utilisateur, nous l'avons stocké dans une variable. L'étape suivante a ensuite commencer à regarder tous les caractères de la chaîne et à identifier ceux qui doivent être en majuscules et ceux qui doivent être en minuscules. Et comme Kelly et Charlotte élevé, nous faisons cela en utilisant une boucle for. Alors, quelqu'un ne vous rappeler la syntaxe d'une boucle for et je voudrais prendre un coup de couteau à simplement écrire la première ligne de la boucle for, juste pour le petit? Kelly, tu veux faire un essai? >> Ouais, donc vous devez initialiser d'abord, alors j'ai mis i = 0, et puis j'ai fait i > Ouais, j'ai foiré un peu, mais oui. Bon, il faut bien tirer vers le haut. Awesome. >> Mais alors je ne sais pas si vous avez eu ce - Ouais, d'accord. Alors, voici ce que Kelly a obtenu: regardons rapidement. Donc, elle comprenait la bibliothèque CS50 vers le haut. Elle est inclus dans la bibliothèque standard IO au sommet, et la norme IO dispose de fonctions comme printf, donc si jamais vous voulez utiliser printf, vous avez besoin de cette ligne. Et puis elle a inclus la bibliothèque de chaîne, dont nous aurons besoin, parce que la bibliothèque chaîne a strlen fonction, qui nous y reviendrons dans un instant. Donc, si on regarde ce que Kelly a fait ici, pouvez-vous nous ce que vous faisiez? >> Ouais, donc - je veux dire, j'ai eu des erreurs, donc - Oui, Non, c'est - Alors >> Je voulais appeler la chaîne que je me suis juste "string". Je voulais imprimer la chaîne et puis je - Je voulais aimer définir la chaîne que comme un tableau de chaque caractère étant différente [inaudible], non? Et puis je voulais commencer à la position 0 et puis tous les 2 places, J'allais tirer, alors je l'ai décrit comme 23, parce que j'ai été en regardant la table ASCII. C'est donc ce que je pensais - je sais que ce n'est pas juste. C'est bon, donc c'est un bon début. Je pense que beaucoup de ce cadre est en place ici. Passons en revue sorte de ligne par ligne et de voir ce qui se passe. Donc, comme je l'aime pour ce faire est simplement commencer par la compilation du code et de laisser le compilateur me dire comme ce qui ne va pas avec mon code, parce que le compilateur est vraiment bon à vous dire quel est le problème avec votre code. Donc, si on le joue, la construction, et il ne construit pas. Il dit qu'il ya eu une erreur, si nous défiler vers le bas et regardez à la première erreur, il a dit - nous revenir en arrière jusqu'à la partie supérieure, nous pouvons voir qu'il ya 5 erreurs générées ici-bas au fond. Oups, c'est vraiment coupé. Je suppose que c'est tout simplement pas faire mieux. Nous y voilà. Donc, il ya 5 erreurs totales générées. Ici, je ne vois que les 2 premiers, si je peux me déplacer jusqu'à présent un peu et puis type de défilement vers le haut. C'est la commande qui a été exécuté pour compiler le code, puis la première erreur, c'est fichier.c ici: «S'attendre à identifier ou '('", et c'est sur cette ligne où nous avons dit string = GetString (). Vous pouvez voir ici qu'il était sur la ligne 8 du fichier.c, et puis je crois que c'est 12 caractères - c'est l'erreur. Alors qu'est-ce qui ne va pas à la ligne 8 - Kelly? >> Vous avez juste besoin de l'appeler, comme une lettre ou quelque chose, comme la chaîne s ou quelque chose? Ouais, il s'avère que ces noms de type spécial, de sorte string, int, char, short, ils sont tous les mots clés spéciales, et vous ne pouvez pas réellement les utiliser comme noms de vos variables, parce que le compilateur regarde et dit que, "Oh, je sais que c'est un type», de sorte que vous ne pouvez pas réellement une variable de type chaîne appelée chaîne, comme je suis en train de faire ici, cela ne fonctionnera pas. Mais à la place, nous pouvons l'appeler quelque chose comme s ou st ou str. Nous n'avions pas l'appeler int. Nous ne pouvons pas avoir une chaîne appelée int. Nous ne pouvons pas avoir une chaîne appelée char; aucun de ceux qui vont travailler. Nous allons donc appeler cela s pour le moment. Awesome. Alors qu'est-ce qui se passe à côté de cette ligne? String - cette ligne semble assez bon? Donnons-lui une autre chance, il faut bien l'exécuter. Ok, donc nous avons encore des erreurs. Cette fois-ci, nous en sommes à 4 erreurs. Donc nous avons eu l'un d'eux. Passons en place. "Nom de type inattendu 'string': expression attendue," oui? >> Ouais, c'est parce que j'ai essayé de nommer la chaîne. Ouais, de sorte qu'il ressemble nous disposons maintenant d'aller fix toutes ces références à chaîne. Vous pouvez voir qu'il ya une référence à la chaîne ici, un ici, un ici, afin que nous puissions passer tout cela à l'art. Grande. Ok, exécutez-le à nouveau. Bâtiment - autre erreur s'est produite. Bon, maintenant, nous en sommes à une erreur, donc int i = s, puis les crochets. Alors pouvez-vous nous en dire un peu plus sur ce que vous faisiez ici, Kelly? Oui >>. Il était sur la ligne 10. >> Je ne sais pas si nous avions besoin de tout, mais je pense que je tentais de - Je vais l'enregistrer afin que vous puissiez suivre. >> Je pense que j'étais essayez de lui dire de commencer à la position 0 au début de ma boucle for, donc je pense que c'est peut-être dire était inutile. Donc, pour récapituler, vous disiez que ce - que vous tentiez de démarrer ce à la position 0 et obtenir ce - oui, donc je pense que plus tôt, aussi, quand vous marchiez dans le code, vous parliez de la façon dont vous voulez traiter la chaîne comme un tableau afin que nous puissions accéder à chaque personnage individuellement. Je pense que Dan tableaux mentionnés, aussi, en essayant de convertir des chaînes dans des tableaux. Il s'avère que sorte de sous le capot, une chaîne est actuellement stocké comme un tableau déjà, et vous pouvez y accéder comme un tableau; il n'y a pas de conversion que vous avez à faire. Un isn't chaîne - so - une chaîne n'est pas vraiment un tableau, mais vous pouvez y accéder en tant que telle, parce que tous les caractères sont stockés une à côté de l'autre dans la mémoire, donc si vous voulez obtenir le premier caractère de la chaîne, c'est la même chose que d'obtenir le premier entier dans un tableau d'entiers. Donc, nous avons souvent -, nous reportez-vous à la 2 comme oh, comme étant une chaîne, comme étant un tableau, même si elle vraiment - ils sont des choses très différentes, mais vous pouvez les traiter très sensiblement les mêmes. Ainsi, il s'avère que cette ligne fait - nous n'avons pas besoin de faire une conversion, et en fait, ce n'est effectivement pas une expression valide, qui est ce que notre compilateur nous dit. Elle dit: "Hé, il s'attendait à une expression, et ce que j'ai ici, c'est quelque chose qui n'est pas une expression. " Pour déclarer un tableau, tout ce que vous devez faire est quelque chose comme ceci avec un point-virgule, et puis vous dire l'ensemble combien de temps vous voulez qu'il soit, par exemple 5, si ce la ligne 10 se déclarer un tableau appelé i avec 5 entiers en elle. Il s'agit d'un côté, ce qui n'est pas nécessaire pour le code, mais c'est - c'est un peu ce que la déclaration ressemble. >> Comment pourriez-vous pas utiliser char i [strlen (s)]? Char i [strlen (s)]? >> Char i, puis à l'intérieur du parenthèses, strlen (s). Ouais, afin que nous puissions - nous pourrions le faire, et ce serait déclarer - ce que seraient les effets? >> Je pense que ce serait déclarer un tableau d', comme - des - oh, vous n'avez pas besoin de la i - oh, oui, vous avez certainement n'ont pas besoin de l'i. Vous déclarez un tableau de caractères s de longueur. Et donc ce que Sam dis, c'est que cette ligne 10 - permettez-moi de mettre un peu d'espace entre lui et le reste pour que nous puissions isoler - cette ligne 10 serait déclarer un tableau de caractères, strlen (s) d'une valeur d'entre eux, mais en fait nous avons besoin de l'i, et la raison pour laquelle nous avons besoin de l'i parce que nous devons donner à l'ensemble un nom; autrement, nous n'aurions pas un moyen de se référer au tableau plus loin dans le code. Donc, ce droit est ici le nom du tableau et à l'intérieur de la longueur. Cela nous donnera un tableau, mais ce n'est - encore une fois, il s'agit d'une déclaration. Ce n'est pas une mission, ce n'est pas une initialisation. Si nous déclarons ce tableau comme celui-ci, il n'y a vraiment rien dans le contenu du tableau. C'est juste ordure - tout ce qui est là-dedans. Et comme nous l'avons dit, nous avons effectivement n'avez même pas besoin de faire cette conversion, parce que nous pouvons déjà traiter chaîne s comme un tableau. Je sais que nous manquons un peu de temps à temps, mais je veux vraiment obtenir rapidement cette boucle for et vous montrer comment accéder aux caractères individuels dans le tableau, parce que c'est la clé de notre mission. Et puis nous allons vous laisser aller à partir de là. Donc, ici, nous avons une boucle for qui ressemble presque bon. Ce qui n'est pas tout à fait près de là? Chose - ce qui n'est pas tout à fait raison au sujet de cette boucle for? Aucun >> accolades? Ni d'accolades, pour un. Tu veux faire en sorte que nous avons le corps de la boucle avec des accolades. Oups, pas l'accolade carré! Et quelle est la prochaine chose que nous devons faire avec cette boucle? Si je tente de l'exécuter, quoi de cette erreur que je reçois? Je reçois toutes ces erreurs - je dois initialiser i. Grande. Donc, ce sera une boucle - ce n'est pas tout à fait là, mais ça devient vraiment proche. Ce code nous pouvons maintenant exécuter, construire, une erreur se produit toujours. Pourquoi est-il encore se plaindre, dire l'expression n'est pas utilisée, et c'est parce que cette ligne ne fait rien. Nous n'avons pas le stocker quelque part, nous n'avons pas enregistrer le résultat. Où devrions-nous sauver ce résultat? >> S ou i? Exactement, et cette syntaxe funky, cette s avec les crochets signifie accéder au caractère i-ème s. Ça va être quelque chose qui est vraiment important pour la mission. Malheureusement, nous allons devoir arrêter ici, de telle sorte que la section Sebastian peux entrer, mais je suis heureux de rester à l'extérieur après et prendra toutes les questions. Donc merci les gars d'être venus. Cela devrait maintenant télécharger, construire, exécuter. Nous pouvons entrer dans une chaîne comme "bonjour" et il affiche "Qox". [Rires] Donc, pas tout à fait là, mais se déplacer, se égard de ces boucles! Merci d'être venu, et je serai dehors.