[Jouer de la musique] ANDI Peng: Ceci est CS50, et bienvenue à deux semaines de l'article. Ceci est en fait pendant la semaine deux de nos class-- fait, la première semaine, nous avons eu section. Vote à main levée, combien d'entre vous tous est venu à la section de super semaine dernière? OK, qui est OK. C'est bon. Combien d'entre vous regardé super-section de la semaine dernière? D'ACCORD. Et vous avez fait amende sur un problème posé? Donc, je vais prendre ce que nous avons une bande de gamins vraiment intelligents dans cette classe et les choses vont bien. D'ACCORD. Donc first-- Premièrement, nous allons juste brièvement aller sur l'ordre du jour pour aujourd'hui. Nous parlerons de la logistique de cours. Beaucoup d'entre vous sans doute avez des questions concernant comment les choses courir dans ce cours. Nous y répondrons. Nous allons brièvement aller sur des boucles dans le cas l'un de vous les gars manqué section de super. Nous parlerons de la cartographie ASCII. Nous parlerons de tableaux, fonctions, les arguments de ligne de commande. Et enfin, ce que vous les gars probablement tous vraiment envie d'être ici pour apprendre, est votre pset2. Nous aurons quelques trucs sympathiques et conseils pour savoir comment faire. D'ACCORD. Aussi, d'autre part, nous avons beaucoup de bonbons ici. Toute personne qui aime les bonbons, juste de venir ici. Prenez un peu. Je ai un tas. Nous avons une tonne dans le bureau. Je ne veux pas vraiment à manger des bonbons toute la journée. Les gars, vous devriez manger tous les bonbons, parce que je l'ai amené ici pour vous les gars. Il suffit de manger des bonbons. Il y aura des bonbons chaque section. Alors d'abord, qui suis-je? Mon nom est Andi Peng. Je suis le chef de la TA CS50 ici à Yale. Et, en plus de que, je vais aussi être-- si quelqu'un like-- votre course copain, votre épaule pour pleurer. Si la nuit avant l'échéance de votre pset, vous avez aucune idée de ce qui se passe, Battez moi. Nous allons apitoyer ensemble, et cetera. Il suffit de savoir que je suis ici en tant que ressource pour vous que la ligne de front en vous aidant à comprendre comment les gars pour résoudre les problèmes dans CS50 et au-delà. Mon email est andi.peng@yale.edu. Je vais aussi envoyer un individu envoyer un email avec mon numéro de téléphone en elle de telle sorte que tout le monde ne le Internet peut voir mon numéro de téléphone. Sentez-vous libre de me téléphoner en tout temps. Sérieusement, mon téléphone est habituellement attachée à ma main. Je ne peux pas répondre dans quelques minutes. Je ne peux pas répondre dans quelques heures. Mais je peux vous garantir, si vous Écrivez-moi, si vous appelez-moi, texte moi, je vais vous répondre dans les 24 heures. Souvent, je vais répondre avant que, parce que je comprends que tout le monde a des problèmes, et vous voulez que vos réponses une réponse très rapidement. Toutefois, si vous appelez moi 30 minutes avant ce morceau qui est due jeudi night-- être comme, Andi, aidez-moi, Je ne l'ai pas started-- je peux donner vous que épaule pour pleurer. Mais il peut être temps de penser à comment ne pas le faire la prochaine fois. D'ACCORD. Oops. Comment puis-je revenir en arrière? Nous y voilà. Donc, dans ce cours, nous avons une tonne de soutien pour tout le monde. En plus juste sections ici, que vous chaque semaine arrivez à passer 90 merveilleux minutes avec moi, nous avons aussi les heures de bureau. Combien d'entre vous ont déjà gars été pour les heures de bureau de l'aide? Génial. Voilà vraiment bon de voir, parce que nous disposer d'un personnel de plus de 45 agences de voyages et les CA formés pour ce cours qui sont ici pour vous aider les gars avec vos psets. Lundi qu'ils ont tenu dans le TEAL salle de classe dans 17 Hill House ici à Yale. Les mardis et jeudis, ils sont tenus aux Communes. 8:00-à-11:00 à peu près tous les jours. Venez, sortir. Tout problème, pas problem-- vient dans, et puis nous allons vous aider avec ça. Deuxièmement, en plus de les heures de bureau et des sections, nous avons aussi des shorts. At-on jamais vu un couple de la shorts ou soluces dans les vidéos sur le site Internet? D'ACCORD. Donc, ils sont vraiment, vraiment utile. Notre belle production Harvard l'équipe là-bas sur cette école vers le nord, ils ont filmé et produit ces vidéos soluce incroyables. Ils vont prendre étape par étape à travers comment s'y prendre pour résoudre un problème. Souvent, si vous êtes confus au sujet un concept simple, un concept singulier, jetez un oeil, parce que nous avons probablement un court sur quelque part sur notre site Web. Et il est généralement une grande ressource rechercher quand vous êtes le premier perdu sur la façon de traiter un problème. Troisièmement, nous avons aussi étude50 et reference50. Donc étudier 50 sur le site web est juste un lien. Il est, je pense, study.cs50.net ou quelque chose comme ça. Il suffit de Google. Nous avons beaucoup de diapositives préparées. Nous avons beaucoup de short et choses walkthroughs-- tous compilés très agréable et soigné pour vous les gars tous de naviguer à travers, voir des concepts que vous êtes confus au sujet. Il serait probablement couvert là-bas dans étude50. Reference50-- similaire. Nous avons beaucoup de différentes notes facilement disponible pour votre disposition. Et enfin, nous avons ce qu'il est Discutez appelé CS50, un forum dans lequel, si la nuit avant vous faites vos problèmes, dites, vous avez une question. Connectez-vous à CS50 Discutez. Postez votre question. Et puis l'un des hundreds-- peut-être, thousands-- des pairs prenant cette classe en ligne sera connecté. Et peut-être que quelqu'un peut obtenir votre réponse avant une boîte TA. Il est essentiellement juste un forum en ligne que nous pouvons tous utiliser pour discuter de nos problèmes. C'est cool. D'ACCORD. Donc problème fixe. Nous sommes sur le droit de la épaisseur du problème posé deux. Beaucoup d'entre nous ont déjà lutté à travers un ensemble de problèmes. Nous savons déjà que attendant peut-être pour la dernière nuit pour faire votre pset est pas la meilleure chose à faire dans CS50. Conseils et astuces pour l'essentiel succès sont lus toute la spec. Combien d'entre vous ont déjà lire la spec pour pset 2? D'ACCORD. Voilà une quantité solide. Je sais que vous les gars avez probablement reconnu maintenant les spécifications sont vraiment long. Ils sont vraiment, vraiment long. Il est vraiment difficile de lire chaque ligne de ce mot avec soin par mot. Vous voulez vous contentez de l'endroit où il vous dit de faire quelque chose. Je peux vous garantir, ne faites pas cela. Si vous faites cela, vous êtes probablement allez rater quelque part où il vous dit la façon de démarrer un problème ou il vous dit quoi nom votre problème ou il vous dit, ce qui est probablement la meilleure façon de commencer à faire votre problème. Et alors vous serez perdu. Lorsque vous essayez de lire votre spec à mi-parcours, beaucoup de l'importance information-- en ce que vous n'êtes pas va être en mesure de vraiment accès. Alors, lisez l'ensemble spec. Essayez de lire l'ensemble spec avant de vous rendre à la section, car alors, lorsque nous parler de la pset, nous pouvons tous avoir une idée de ce qui se passe. D'autre part, ce concept que je vais aime faire référence beaucoup au long du semestre de cours. Mais essentiellement, nous rencontrer à mi-chemin, à droite? Moi, en tant que votre TA et Jason en cours gestionnaire et Scaz que votre professeur et David en tant que votre professeur et tous les autres belles AT Dans ce cours, assistants dans cette course-- nous ferons de notre mieux vous assurer que vous êtes prêt en place pour réussir dans ce cours. Nous tiendrons section. Nous tiendrons les heures de bureau. Nous allons répondre à votre téléphone appels, répondre à vos e-mails, faire tout notre possible pour faire vous que vos questions sont répondues. Cependant, nous aider aussi. Venez nous rencontrer à mi-chemin. Si vous venez à les heures de bureau ne pas avoir disparu de l'article, pas avoir vu les conférences, ne pas avoir idée de ce qui se passe, comme, aidez-moi. Je vais être comme, bien, je suis désolé. Il peut être temps de prêter cette épaule sur laquelle pleurer, parce que je ne suis pas sûr ce que je peux faire pour vous aider si vous ne tentez au moins de l'aide vous un peu au début. Venez nous rencontrer à mi-chemin. Vous savez, s'il vous plaît venez prêt à répondre et obtenir prêt à s'engager dans le matériau. Cela rend les choses tellement plus facile pour tout le monde. Ouais, voilà à peu près tout. Classement. Donc, sur le programme, il est assez en profondeur sur la façon dont nous avons grade. Mais essentiellement, la répartition dans ce est de 50% de la note seront les psets, qui est belle, parce que ce où vous passez la grande majorité de votre temps de parcours sur. Quiz 40%, et votre projet final sera de 10%. Il y aura deux questionnaires à travers Au cours du semestre. Je pense que les heures et les dates sont figure également sur le programme. La façon dont nous allons être titrant vos psets est que nous avons essentiellement quatre valeurs que nous attribuons à chaque grade. Nous avons une valeur de champ d'application, l'exactitude, la conception et le style. Donc, comme vous voyez, ce genre est de notre formule de calcul des psets. Trois nous donnent le plus poids à l'exactitude, parce que, évidemment votre coach devrait tester pour les cas que nous voulons pour tester. Vous les gars avez tous check50 à votre disposition. Il est une fonction très utile que vous les gars peuvent tous télécharger votre code pour nos serveurs, où nous allons le vérifier pour vous. Et vous avez vu ceux frowny visages, visages souriants. Ils sont vraiment, vraiment utile. S'il vous plaît ne soyez pas la étudiant qui aiment essais coder en dur dans tous les réponses pour eux. Je l'ai certainement vu un pset où quelqu'un a vu toutes les valeurs de check50 et ils ont juste codées en dur, si in-- ce nombre, imprimer ce numéro. Si ce nombre, imprimer ce numéro. Ne fais pas ça. Même si, techniquement, check50 est correcte, votre façon de résoudre le problème est pas correct. Donc, il suffit d'utiliser check50 avec parcimonie. Mais aussi vous assurer que vous comprendre comment ça fonctionne, le programme fonctionne en plus de check50, parce que nous ne pouvons pas tester tous les possible cas de check50. Nous allons tester certains d'entre eux. Le design est essentiellement, comment bien conçu est votre code? Si vous êtes copier-coller multiples lignes de codes de nombreuses fois. Peut-être que vous ne disposez pas d'assez le meilleur design dans votre code. Peut-être qu'il est temps d'ajouter cette boucle. Essentiellement, ici il est juste tout à essayer de faire de votre code, essayer d'écrire votre code plus efficacement que possible afin que votre programme fonctionne aussi vite que possible. Enfin, nous avons style. Donc, le style est une sorte de arbitraires, terme subjectif. Je sais que nous avons officiellement un guide de style pour 50 CS50, où il vous dit, oh, devrait avoir un espace ici. Vous devriez type de format votre code de cette façon. Vous devriez nommer les choses de cette façon. Je ne me soucie pas vraiment, en soi, comment vous choisissez de style de votre code, aussi longtemps que vous restez cohérent. Par exemple, si vous aimez laisser un espace après vos quatre avant quatre boucle, il suffit de faire que chaque fois. Ne pas sorte de le faire. Ne pas le faire d'autres fois. Si vous voulez garder bouclés accolades espace d'une certaine manière, juste toujours le faire de cette façon. Ne pas sorte de le faire quelque part ici et quelque part pas là. Lorsque nous sommes classement, il est vraiment difficile si je ne sais pas comment vous formatez votre code, les choses sont farfelu et hors de propos. Si vous venez de le garder cohérent, il est beaucoup plus facile pour moi que la plus grande pour être en mesure de lire votre code. Il est beaucoup plus facile pour vous comme un étudiant pour être en mesure de regarder à travers votre code et voir ce qui ne va pas avec il slash pourquoi il ya des problèmes. Le style est l'une des choses les plus faciles vous les gars peuvent faire pour obtenir des scores complets. Essentiellement, si vous venez de soins, pourvu que vous payez cinq minutes d'attention à votre code chaque semaine, vous devriez être obtenir des points de style à part entière. Enfin, nous avons ce qu'on appelle le multiplicateur de portée. Scope-- Je sais qu'il est un grand mot, surtout dans cette classe. Mais la portée, tout ce que les moyens est-ce que vous essayez les psets au meilleur de votre capacité. Si vous mettez dans trois de vos quatre problèmes et ne même pas essayer le dernier, vous êtes probablement va perdre quelques points sur la portée. Même si vous venez de commencer le problème, faire de votre mieux pour marcher à travers elle. Même si cela ne fonctionne pas, tournez-le dans, parce que montre et démontre pour nous que vous essayez, que vous avez tenté de régler le problème au mieux de votre capacité. Et puis, nous pouvons vous donner la totalité des points de portée. Scope est également très important car lorsque nous parler de la plus faible chute de pointage de pset. Donc, au cours de la semestre, vous les gars ont neuf psets. Et nous allons effectivement être à la baisse le score le plus bas sur ces neuf, mais seulement si vous avez des points de full scope. Donc, si vous tournez dans un pset incomplètes, Malheureusement, nous ne pouvons pas laisser tomber celui-là, parce que votre portée les points ne sont pas terminées. Donc, même si vous avez de la semaine terrible où vous mourez et vous êtes malade ou votre chien meurt, votre chat meurt, et vous êtes surchargé de devoirs, juste tenter le pset. Faites-le au mieux de votre capacité. Si cela ne fonctionne pas, il n'a pas d'importance. Il suffit de tourner dans. Au moins, nous pouvons donner vous des points pour l'effort. A pour l'effort dans cette classe. Au moins la plus basse chute de score pour l'effort. Donc voilà. Voilà à peu près tout. Quelqu'un at-il des questions pour loin sur la façon dont nous avons note de la classe? Ou l'un de ces? Tout ces éléments afin far-- les sections, les heures de bureau? Frais. D'ACCORD. Donc, cela est un sujet qui ne on aime vraiment parler. Je ne veux pas vraiment en parler. Vous les gars ne veulent pas vraiment d'entendre me parler. Mais malheureusement, nous avons tous avoir à parler à ce sujet. David a passé 20 minutes par la leçon à en parler. Et qui fait l'objet d'honnêteté académique. Donc, nous tous ici avons probablement écrit un certain temps d'essai dans notre carrière de Yale. Nous avons probablement eu un entretien où nous avons été dit de ne pas plagier notre essai, parce que le travail ne nous appartient pas. En informatique, nous avons le même genre de concept. Tout le travail que vous soumettez, tout le code que vous écrivez devrait être code que vous avez écrit. Ne devrait pas être le code que vous avez copié d'ailleurs. Ne devrait pas être le code qui vous ai googlé et se laissa tomber dans et vous ne savez pas vraiment si cela fonctionne. Vous sorte de avez un sens de ce qu'il fait, mais pas vraiment. En cas de doute, essentiellement, il est juste raisonnable. Sur notre programme, nous avons toute une liste de choses nous considérons comme raisonnables contre pas raisonnable. Par exemple, raisonnable est vous et votre ami discuter de ce que la meilleure façon d'aller de résoudre logiquement un problème. Voilà assez raisonnable. Quel ne serait pas raisonnable si vous les gars se sont réunis, le même code tapé, et tourné dans la même position. Cela ne veut pas raisonnable. Même chose, une sorte d'essai. Si vous voulez discuter avec votre ami, hey, ce que je veux écrire. Ce sont les étapes que je veux prendre pour écrire à ce sujet, une grande. C'est magnifique. S'il vous plaît collaborer avec l'autre. Si vous mecs commencent écrit la même chose, tourner dans le même essai, qui est moins OK. Donc, en cas de doute, il suffit de ne pas le faire. Ici, nous en CS50, nous avons scripts cette course pour automatiser pour tester non seulement la justesse de votre code, mais aussi le caractère unique de votre code. Alors s'il vous plaît, ne nous mettez pas dans la position d'avoir à soumettre votre cas au Comité exécutif. S'il vous plaît juste pour tout le monde, disons juste faire une expérience merveilleuse. Tout le monde apprend mieux, nous sommes tous heureux, et nous sommes tous mis à réussir dans ce cours. Quelque chose qui est très unique au sujet de cette classe que je pense que chacun devrait vraiment prêter attention à ce que nous avons ce qu'on appelle le regret clause dans notre programme. Donc, essentiellement, dans les 72 heures, si vous croyez que vous avez fait quelque chose vous n'êtes pas vraiment sûr été échéant, s'il vous plaît venir à nous. Nous vous promettons que dans les 72 heures nous allons traiter le cas nous sans se référer à un supérieur l'autorité de l'administration. Donc, si vous venez à moi et dites, Andi, hey, je suis vraiment désolé, mais je pense qu'il ya quelques lignes dans mon Code nuit dernière que je sorte de googlé, descendu de la pile Débordement, copier et coller, et je suis vraiment, vraiment désolé à ce sujet, laissez-moi savoir. S'il vous plaît ne laissez pas simplement pourrir et espère juste que je l'attrape. Nous allons l'attraper. Il suffit de venir à moi. Permettez-moi savoir dans les 72 heures. Nous allons trouver une solution. Et nous promettons que nous ne serons pas se référer à autorités universitaires essentiellement. Donc, il est dans votre meilleur intérêt juste être honnête avec tout le monde impliqué dans le cours. D'ACCORD. D'ACCORD. Alors maintenant, rapidement avant Je passe, personne ne avez des questions concernant la logistique sur la façon dont les cours que nous allons courir, comment sections vont à courir, rien de tout cela? D'ACCORD. Ouais. AUDIENCE: [inaudible]? ANDI PENG: Ouais. Donc quizzes-- combien d'entre vous sont dans la section lundi / mercredi? Combien d'entre vous sont en mardi / jeudi? OK, il est donc une fraction de solide ici. Donc, la façon dont nous gérons il à Yale est que nous vont avoir deux séparés quizzes-- un pour chaque section-- que seront prises pendant la classe. Je pense qu'il est Octobre, fin Octobre, quelque chose comme ça, que la première semaine du quiz. Ouais, si juste venir en classe. En ce lundi ou le mercredi, vous allez prendre le quiz. Sur ce mardi ou jeudi, vous allez prendre un autre questionnaire. Mais la même matière sera couverte. Ouais. Bonne question. Ouais. AUDIENCE: où allons-nous aller vérifier nos notes? ANDI PENG: Ouais. Je vais donc l'envoi d'un e-mail chaque semaine quel que soit quand quiz sont graded-- ou, Désolé, lorsque psets sont classés. Psets sont généralement tournés à midi ou vendredi. Donc, je vous promets que je vais essayer de les récupérer pour vous par le midi le vendredi suivant. Chaque fois que je note un pset, je vais envoyer une notification sur le carnet de notes qui vous indique votre score peut être consulté en ligne. Donc, dès cette semaine, après que je nivellement de finition les psets de la semaine dernière, vous les gars recevrez un e-mail notification vous le dis, hey ce est où vous aller voir vos notes. Et vous pouvez voir tous les répartition de vos qualités. Vous pouvez voir les commentaires. Oh, une chose rapide aussi. La section de commentaire dans la grande livre est où je vais probablement passer la majorité de mon classement de temps. Donc, une chose qui est vraiment important quand vous les gars regardez vos notes sur vos psets est non seulement à la recherche le score physique mais aussi prendre le temps de vraiment lu mes commentaires. Souvent, cela vous donne la rétroaction sur la façon dont vous résoudre un problème. Si vous devez faire quelque chose d'un peu mieux, critique constructive est généralement meilleure donnée dans ceux section des commentaires. Alors s'il vous plaît, s'il vous plaît, je vais de passer du temps à écrire des commentaires. S'il vous plaît, je voudrais vraiment l'apprécier si vous les gars se lirait ces commentaires. D'ACCORD. Frais. Bien. Donc, nous allons commencer à parler et un simple examen rapide une partie du matériau à partir de semaine zéro juste si nous sommes sur la bonne page pour à compter les problèmes de cette semaine. Ainsi, la boucle while est l'un des trois types de boucles nous avons discuté plus tôt dans cette classe. Une boucle while essentiellement est écrit dans la syntaxe où, même si une certaine condition, faire cela à plusieurs reprises, à droite? Pensez-y dans ce graphique ici. Vous allez commencer à un certain point dans votre code. Vous allez entrer dans la condition de la boucle si-- Je ne know-- pas x est inférieur à un. Si cela est vrai, vous allez pour exécuter le corps de la boucle. Et vous allez continuer à faire que de plus, encore une fois, de nouveau, encore et over-- qui est pourquoi il est un loop-- jusqu'à ce que votre condition devient faux. Donc, de cette manière, une boucle while est l'un des moyens plus simples, pour écrire toute sorte de condition doit répéter encore et encore et encore. Juste être prudent chaque fois vous écrivez toute sorte de boucle que vous avez une condition de sortie que ainsi que d'une mise à jour quoi que ce est afin que votre boucle ne pas seulement courir encore et encore infiniment. En tout cas, vous allez à vouloir faire en sorte que vous décidez de changer certains aspects de votre code ou à la fin de la boucle juste pour vous assurer que vous avez un moyen de progresser vers l'état que vous voulez rencontrer à la fin. Est-ce que de sens pour tout le monde? Nous ne voulons pas être pris dans cette spirale où nous allons autour et autour et il n'y a pas moyen de briser la boucle. Et chaque boucle essentiellement a une façon de le faire. D'ACCORD. Deuxièmement, beaucoup d'entre vous dans vos psets Mario probablement dû employer ce type de boucle. Il est appelé une boucle Do While. Tout d'abord, quelqu'un peut me dire quelle est la différence entre une do tout en boucle et une boucle while est? Ouais. PUBLIC: La boucle Do While fonctionne à la première [inaudible]. ANDI PENG: Oui, exactement. Ainsi, une boucle Do While fait toujours quelque est à l'intérieur du do, l'intérieur des crochets il et fait cette condition avant de vérifier the-- désolé, est-ce que le code avant la vérification de la condition. Et ce qui est particulièrement pertinent pour nous ici, dans cette classe, parce que la plupart du temps nous allons vouloir inciter l'utilisateur pour une sorte de saisie. Et puis, en fonction de l'entrée qu'ils nous donnent, alors nous pouvons évaluer, oh, faire nous devons les inciter à nouveau? Donc, dans Mario, si l'utilisateur vous a donné une hauteur négative, par exemple, vous allez première invite et à faire tout ce qui est à l'intérieur. Ensuite, vous allez vérifier tout. Vous le savez, est négatif 1, est-ce un nombre positif? Si il est pas, je vais aller en arrière et recommencer à faire et à répétition et répéter et répéter jusqu'à ce qu'ils enfin vous donner un numéro que vous aimez, que nous pouvons tous utiliser dans notre code. Il est assez important pour essentiellement toute entrée d'utilisateur. Je peux vous garantir tout temps dans un pset où nous vous demandons d'entrée toute sorte de code, nous sommes probablement vais vous donner un cas de test dans lequel nous sommes va vous donner quelque chose de mauvais qui est va essayer de casser votre code. Si nous essayons de vous demander de saisir un entier, nous pouvons vous donner une chaîne et voyez comment vous gérer cela. Si nous vous demandons d'employer un âge, nous pouvons vous donner un nombre négatif pour voir comment vous gérer cela. Assurez-vous les gars testons cas où vous ne recevez pas le meilleur entrée, disons simplement. Et une boucle Do While est souvent le meilleur façon de concevoir votre code afin qu'il répond à ce champ d'application. D'ACCORD. D'ACCORD. Donc, ce qui est probablement le plus boucle complexe de trois que nous avons examiné jusqu'ici. Et il semble très effrayant au premier abord. Mais je vous garantis, une fois que vous les gars obtenez le coup de la façon d'utiliser une boucle for, il est l'une des choses les plus utiles, la plupart des outils utiles dans votre arsenal pour aller de l'avant dans cette classe. Ainsi, par exemple, dans Scratch, nous avons eu ce bloc très simple qui vient d'être dit répétez cette certaine phrases certain nombre de fois. Soit dit en passant, SAJ-- que ce Scaz Andi Jason. Nous signons souvent notre emails SAJ. Si nous disons SAJ, ne soyez pas confus. Voilà que nous. Donc dans Scratch, nous avons pu avoir un bloc qui a dit, répétez I love SAJ! 10 fois. Très simple. La logique qui est une très, très simple, non? Je veux d'abord passer par la première le temps et de voir que, pour la deuxième fois et de voir que, la troisième fois, etc. et ainsi de suite, jusqu'à ce que vous frappez à 10. Et la façon dont nous représenterait que, dans code est simplement par une simple boucle. Donc, pour, vous allez déclarer votre variable ici, dans ce cas, int. Nous allons nommer i. Nous allons de l'initialiser à 0. Et l'édition d'arrêt est va être i est inférieur à 10. Et la mise à jour va être i ++. Et dans la boucle, ça va pour exécuter jusqu'à ce que finalement il frappe l'extrémité de la condition-- dans laquelle cas, il va se casser la boucle. Il devrait y avoir des choses que vous les gars ont tout type de vu avant et a dû faire pour votre problème réglé un. Quelqu'un at-il des questions en ce qui concerne les boucles en ce moment? D'ACCORD. Génial. D'ACCORD. Donc, pour ceux d'entre vous qui ont lire la spec pset pour cette semaine savons que nous allons avoir à employer quelque chose appelé ASCII et table ASCII. Alors David en conférence passa brièvement comment le tout de l'informatique est codé dans un ordinateur binaire, en zéros et de uns. Et la façon dont les ordinateurs sont capables pour stocker des valeurs différentes en plus de zéros et de uns sont grâce à la cartographie ces chiffres représentent d'autres chiffres ou essentiellement les autres personnages. Donc dans ce cas, un ASCII table-- tout ce qu'il fait est la carte des caractères ou des chars, à des numéros. Ainsi, le fichier de code source dans votre computer-- qu'il voit, hey, un tas de zéros et de uns, zéros et de uns, zéros et de uns. Voilà ce que stocké dans le mémoire réelle de votre ordinateur. Mais quand nous, les humains veulent communiquer avec l'ordinateur, nous want-- disons, par exemple, si je veux la majuscule, Je vais avoir besoin d'une certaine façon de dire à l'ordinateur, oh, quand je tape A majuscule, je veux dire cette représentation en binaire. Et la façon dont nous faisons cela est jeté une chose arbitraire appelé une table ASCII, où nous, en tant qu'êtres humains, en tant que programmeurs, il ya quelque temps, nous avons arbitrairement décidé que nous allaient les affecter nombre des valeurs à ces caractères. Alors vous les gars pouvez google cette ligne. Je pense qu'il ya un lien vers elle dans votre pset-- juste une table ASCII carte, ASCII table. Il traduit simplement binaire numéros en caractères. Et ça va être très utile pour votre jeu de problème chaque fois que vous voulez calculer quoi que ce soit ou si vous vouloir afficher certaine des caractères ou des nombres entiers ou manipuler certains caractères. Ça va être très important que vous tous savoir comment naviguer dans une table ASCII. Ainsi, par exemple, la majuscule est représenté par le numéro 65. Et l'un minuscule est représenté par 97. Donc, il est important de savoir que le différence entre les deux valeurs est 32. Souvent, si vous avez besoin de convertir à partir de une à l'autre, la différence est 32. Et ne vous inquiétez pas si vous êtes un peu confus sur ce au premier abord. Nous allons revenir sur la façon dont nous le ferions employer cette réelle dans le code. D'ACCORD. Donc, pour ceux d'entre vous avec les ordinateurs portables, à la hésitez pas à tirer vers le haut une table ASCII, parce que ce sera probablement vous les gars exigent de référencer ce que les personnages sont. D'ACCORD. Donc, sachant que certains caractères correspondent à certains numéros, si je devais courir juste la première ligne de ce code-- printf un, un minuscule, moins majuscules A. Quelqu'un avoir une conjecture sur ce que serait impression sur l'écran en ce moment? Alors tout d'abord, qu'est-ce que minuscules représentent un? Quel est le numéro que codée dans la table ASCII. Pardon? AUDIENCE: 97? PENG ANDI: 97, grande. Et ce qui est majuscule? AUDIENCE: 65. ANDI PENG: Donc, ce qui est 97 moins de 65 ans? AUDIENCE: 32. ANDI PENG: OK. Alors qu'est-ce que vous en pensez va arrivera quand je entrée cette ligne de code dans mon ordinateur? AUDIENCE: [inaudible]. ANDI PENG: Désolé, parler. Pas de soucis. Ceci est une très sûr environnement, moins l'appareil photo. Nous allons tous to-- pas de soucis. Juste nous allons tous faire comme il est juste nous détendre dans cette chambre. Pas de soucis. Aucune question est trop stupide. Pas de réponse est une réponse stupide. Je vais probablement faire des erreurs dans le cadre de mon enseignement. Sérieusement, les gars, juste laisser échapper. Ayez confiance en vous, vous le savez? Donc, ce que était-ce? Qui a dit que la dernière réponse? D'ACCORD. Shout que agréable et claire. AUDIENCE: 32? PENG ANDI: 32. OK, nous allons exécuter ce code et voir si cela est ce qui arrive. D'ACCORD. Donc, comme vous pouvez genre de gars voir, la notation typique je l'ai mettre en place ici pour la façon dont nous pourrions employer toute sorte de programme dans notre ordinateur. Nous avons notre fonction principale au sein de notre fonction principale. Je vais juste copier et coller cette ligne de code. Aussi soyez prudent lorsque vous les gars copiez et collez le code. Parfois, certains opérateurs ne pas coller plus correctement. Dans ce cas, le moins signe était en fait un tableau de bord. Et si l'ordinateur n'a pas le ramasser. Donc je devais revenir en arrière et retaper physiquement que. Juste être prudent lorsque vous les gars font. D'ACCORD. Nous allons exécuter ce ici. Donc, nous allons au CD dans notre section2. Je l'ai appelé ce programme asciimath. Alors rappelez-vous, quand nous courons tout programme, nous voulons d'abord compiler en l'exécutant à travers notre marque. Et puis nous voulons réellement fonctionner le programme en faisant point-barre. Nous allons donc ./asciimath. Droite, là nous allons. Et nous voyons 32. Bien joué. Vous méritez un bonbon. Candy pour vous. Pardon. Bien. D'ACCORD. Donc, nous pouvons revenir à notre exemple. Aah, non. Aah. D'ACCORD. Je vais garder ça comme ça. D'ACCORD. D'ACCORD. Donc, comme vous les gars pouvez le voir, nous pouvons faire beaucoup de choses très intéressantes, beaucoup de choses très cool, beaucoup de des choses très complexes impliquant Caractères ASCII et des numéros. Une fois que vous descendez à la ligne de cinq, ça fait beaucoup à suivre. On ne va pas aller à travers la section. Sentez-vous libre pour, si vous le pouvez, raisonner sur papier d'abord sur ce qui devrait se produire lorsque vous entrée telle une chaîne de valeurs. Par exemple, en ce que la dernière ligne, nous avons Z- qui représente un certain number-- a-- qui représente aussi un certains number-- plus 1 modulo 26 en plus minuscules d'un. Si vous les gars continuez à lire grâce à eux, vous peut voir un modèle venu dans comment nous manipuler le code. Je recommande vivement, suggère fortement après l'article vous tous les gars allez-y et entrée ceux tout dans votre ordinateur et voir quel genre de numéros sortent et raisonnement pourquoi ceux qui sont passe, parce que pour vos psets ça va être vraiment important pour vous de comprendre pourquoi certaines choses se produisent. Tous ces diapositives seront en ligne. Donc pas de soucis à essayer de physiquement copier des notes. La ligne de tout. Cette section sera lui-même en ligne. Tout mon code source Je courais sera en ligne. Ouais. Avez-vous avez encore une question? Public: Quel est modulos? ANDI PENG: OK. Donc modulo est un opérateur qui va être assez important pour le pset de vos gars Ici. Ainsi, la manière que les opérateurs en C et en travail de programmation est que vous avez ce qu'on appelle la symbole de division et le symbole de module, qui est comme le signe pour cent. Donc, dans C, quand vous faites un nombre entier divisé par un nombre entier avec une barre oblique, C a tendance à vouloir couper désactiver tous les points décimaux, car un nombre entier veut de se convertir à un nombre entier. Il ne va pas vouloir être un double avec un tas de décimales après tout il. Donc, si je fais 3 divisé par 2, ça va pour couper le 0,5 et juste vous donner 1. Voilà donc de quoi être très prudent lorsque vous êtes faire toute sorte de mathématiques dans la programmation, est que les chiffres que vous obtenez peut-être pas les numéros que vous pensiez, ce qui explique pourquoi l'arrondissement dans votre pset dernière est si important. Modulo vous donne le reste. Ainsi, par exemple, si je faisais 3 modulo 2-- donc 3 pour cent signe 2-- cela vous donnerait le reste de cette. Donc 3 est divisé par 2 à 1,5. Il est 1 reste de 1. Ce serait vous donner la 1, qui est le reste de la. Alors, quand vous les gars se déplacent à travers la table ASCII, modulo finira par être quelque chose qui est très important, et nous en parlerons plus tard. D'ACCORD. Donc, quelque chose qui est assez, assez nouveau et assez unique que nous avons discuté de cette semaine est la notion de ce qu'est un tableau. Donc tableau est le premier type de structure de données que nous allons rencontrer dans cette classe. Toutes structure de données est est une sorte de arbitraires, littéralement des choses comme la structure que nous, les programmeurs ont créé, que nous avons mis dans notre code qui peut contenir d'autres morceaux de code. Donc, dans ce sens, une array-- penser comme un classeur, où si vous ouvrez différente étagères de votre classeur, vous pouvez accéder à des choses différentes. Dans la mémoire, un tableau est juste de faire la même chose sur votre ordinateur. Vous pouvez avoir différents nous blocks-- appeler indices-- d'un tableau. Il est comme un bloc, un plateau de mémoire que nous avons créé au sein de votre ordinateur que vous pouvez saisir certaines choses dans différents espaces. Donc, avec un tableau, vous avoir toujours specify-- vous devez spécifier déclarant tableau dans le format suivant. Vous allez d'abord spécifier le type de données que vous voulez créer de la matrice. Si je veux un tableau d'entiers, Je vais mettre int là. Si je veux un tableau de chaînes, Je vais mettre des cordes là, le nom de votre choix, puis vous allez avoir crochets. Et à l'intérieur des crochets, vous êtes allez avoir la taille de votre tableau. Quelque chose qui est vraiment important pour garder à l'esprit lors de la création des tableaux est que, une fois que vous créez un tableau, que la taille ne peut pas changer. Donc, si vous savez que dès maintenant vous avez un tableau de taille 10, vous savez que je vais avoir 10 cellules 10 à l'intérieur ou au sein de ce réseau d'indices, et il ne va jamais d'étendre ou de diminuer peu importe quoi, et qu'il ya Actuellement seulement 10 blocs d'espace alloué dans votre mémoire pouvant stocker jusqu'à 10 choses que vous avez ajoutés. Donc, de cette manière, un type de données de tableau, la structure de données qui est un tableau est très différente de certains autres, nous allons être couvrant plus tard dans ce cours. Ouais. Par exemple, si vous vouliez créer un tableau de taille 3 qui contenus variables de integer-- Oh, désolé, de temperature-- et de la température, de Bien sûr, est un nombre entier. Donc, nous créons int, qui est la type de données de ce que nous voulons stocker. Nous allons appeler cette températures pour l'amour de la nomenclature des nommage quelque chose que nous comprenons tous. Et nous allons avoir entre crochets. Et nous voulons que trois numéros. Nous allons donc mettre trois à l'intérieur de celui-ci. Quelque chose qui est vraiment important de garder à l'esprit est que les réseaux sont indexés zéro. Tout ce qui signifie que vous commencer par l'indice de 0, et vous courez à travers le taille de la matrice moins 1. Ainsi, par exemple ici, nous avoir un tableau de taille 3. Il va être en mesure de tenir trois valeurs. Mais les chiffres que themselves-- nombre, le tableau, que l'indice, le tableau, vont de 0 à 2. Alors les gars, être vraiment, vraiment prudent lorsque vous allez à travers vos problèmes posés et de créer toute sorte de tableau, parce que beaucoup de temps il est vraiment, vraiment facile d'oublier que. Je ne fait pas d'index 3, que je actuellement un peu avoir l'indice de 2. Et si vous essayez de accéder à la troisième indice, ça va être ce qui est appelé le terminateur null. Il ne va pas réellement exister dans le tableau. Et l'ordinateur est ne va pas aimer ça. Donc soyez prudent chaque fois vous accédez à des choses juste veiller à ce que vous vous souvenez que les tableaux sont zéro-indexés. D'ACCORD. Ainsi, le premier exemple est juste une façon de créer un tableau. Le deuxième exemple que je dois ci-dessous est juste une façon distincte de créer ce qui est les mêmes données structure que nous venons tout juste entré. Ainsi, au lieu de courir physiquement et par la mise en température de 0 est égal que ce soit, la température 1 égaux quelles que soient la température, 2 égaux que ce soit, je ne pouvais en fait juste créer directement tout cela en une seule ligne en température crochets égaux. Et remarquez, dans ce cas, vous ne devez pas de préciser la taille de votre réseau est, parce que l'ordinateur va passer et voir qu'il ya trois éléments dans ces accolades. Et il va savoir, OK, Je besoin d'un tableau de taille 3. Tu ne vas pas avoir besoin de elle entrée de la façon suivante. Et aussi, oui, de cette façon. Quelqu'un at-il des questions concernant la façon dont nous faisons des tableaux ou comment la structure d'un tableau marche? Ouais. AUDIENCE: [inaudible]? ANDI PENG: Oui, exactement. Donc, si vous deviez déclarer et initialiser un tableau de la méthode suivante, qui est le deuxième moyen, vous pouvez simplement laisser ceux-ci. Et l'ordinateur sait automatiquement qu'il besoin de compter combien de nombreux éléments sont dans ces accolades, séparés par des virgules. Donc, ici, ils voient 65, 87, 30. Donc, l'ordinateur sait, oh, il ya trois entiers. Je sais que pour créer un nom de tableau température avec trois éléments en elle. Bonne question. Ouais. AUDIENCE: est-il pas possible de créer un tableau avec différents types de données qui pourrait être conclu il? Par exemple, avec des nombres entiers [inaudible]? ANDI Peng: Pour les fins de cette classe, non, en ce moment. Lorsque vous créez un données structurer comme un tableau, vous dites la ordinateur, hey, je dois vous à allouer autant mémoire dans mon disque dur, à chaque cellule étant un certain nombre de bits. Rappelez-vous que nous avons appris la semaine que les données différent de zéro types ont des tailles différentes? Ainsi, par exemple, une chaîne est un montant différent de l'espace d'un char, qui est un montant différent de l'espace à partir d'un nombre entier. Et si vous ne spécifiez pas et vous mélanger et correspondre à ce types de variables vous avez, l'ordinateur de va être très confus. Et ça ne va pas savoir combien de mémoire à vous donner. Donc, à des fins de droit maintenant, les ordinateurs peuvent seulement reconnaître un type d'un tableau. Bonne question. D'ACCORD. Alors, naturellement, la deuxième question, nous avons est, bien, maintenant que nous avons créé une tableau et nous avons mis toutes ces choses dans le tableau, comment sommes-nous va être en mesure d'y accéder? Ainsi, la structure typique que nous avons toujours accéder à un tableau est notre belle boucle. Je vous promets que les gars que nous serons voir beaucoup de cet homme ici. Essentiellement, quand vous le voulez à l'entrée des valeurs dans un tableau ou si vous voulez y accéder, le meilleure façon de le faire est une boucle, parce que dans une boucle, vous savez combien de fois vous êtes allez vouloir courir à travers le réseau, parce que vous avez une édition d'arrêt, non? Et chaque fois que vous exécutez à travers, vous pouvez accéder un élément différent de la matrice. Et aussi, cela est une raison pour laquelle généralement nous commençons notre pour les boucles à la valeur 0, parce que quand vous accédez à des tableaux, vous pouvez accéder à l'indice zéro. Et il en parallèle très bien. Les gars, vous pourriez avoir voulu écrire pour int i est égal à 1. i est inférieur ou égal à 3. Mais il ne serait pas tout à fait aussi travailler bien ici, parce que vous ne avoir des éléments de 0, 1, 2 et. Et si vous deviez commencer votre i à l'élément 1, 2 et 3, vous allez finir par courir hors des limites de votre réseau, et les mauvaises choses vont se produire. Je vous souhaite donc voir le gars Segue pourquoi dans les classes antérieures nous avons été les gars vous enseigner comment exécuter et formater une boucle de la façon dont nous étions. Il est parce que, maintenant, nous avons la transition dans des tableaux, Vous pouvez voir pourquoi les 0 Prête lui-même très bien à l'accès. Donc, la façon dont nous faisons est que je suis that-- juste de l'imprimer ici pour l'amour de l'imprimer. Mais je dois mon espace réservé, par des virgules. Et le accédant réelle partie se passe. Le nom du tableau a été appelé température. Il est donc la température et la i-ième élément de la matrice. Alors que la boucle for parcourt, il va commencer à 0. Il va imprimer le Indice 0th de ce tableau. Ensuite, il va imprimer le premier élément. Ensuite, il va imprimer le deuxième. Et puis nous allons faire une pause. Tout le monde est clair sur comment cela se passe? Génial. Bien. Nous avons donc ici une façon de dire, si nous ne voulons pas coder en dur me in-- que le programmeur. Je ne veux pas réellement physiquement mettre dans chaque élément individuel de ce tableau. Si je voulais la place avoir les valeurs d'entrée utilisateur, quelle est la meilleure façon de le faire? Eh bien, ici, je l'ai créé cette belle fonction, dans lequel je peux déclarer un tableau. Donc, nous allons int scores-- disons simplement que nous voulons faire un tableau qui a tenu les qualités de tous les 18 des étudiants ici dans cette section. Je pense que nous avons un peu plus de 18 enfants aujourd'hui. Mais pour l'amour du exemple, disons simplement supposer que nous avions 18. Je voudrais créer un nom de tableau des scores avec type int, parce que les résultats, bien sûr, sont des nombres. Et je vais devoir 18 entre crochets, parce que ce que je combien d'étudiants veulent être en mesure de stocker des dizaines de. Et la façon dont je voudrais peupler le tableau est que je ferais le lancer à travers une boucle, de Bien sûr, avec 0 étant mon index 0th. Et puis avec 18 étant mon arrêter édition, car il ya 18 éléments dans le tableau. Et puis je vais faire printf, entrez marquer student-- yada yada yada. Quelqu'un peut-il me dire pourquoi je suis ici impression i + 1 et non i? Il est un peu un truc question, pas vraiment. Il ne fait pas réellement physiquement affecter l'exécution du code. Ouais. AUDIENCE: [inaudible] 0? ANDI PENG: Oui, exactement. Il est un peu difficile à dire, hey, vous êtes l'étudiant 0th dans cette classe. Il est un peu bizarre. Donc, nous, en tant qu'êtres humains, ne sont pas vraiment comme de penser à la façon dont les ordinateurs pensent. Ainsi, même si dans le ordinateur, il est à stocker des valeurs dans la 0-ième index, lorsque nous sommes humains, nous faisons pas vraiment vous renvoyer à nous-mêmes en tant que zéro. Alors, quand je viens impression qui, Je vais imprimer et ajouter 1 seulement pour des raisons de clarté. Alors, quand je imprimer, je vais être capable d'imprimer les étudiants de 1 à 18. Il ne fait pas d'impact l'exécution du code en aucune manière, la façon dont je imprimer. Mais soyez prudent lorsque vous êtes accéder en fait le tableau. Quand vous voyez les scores i, remarquer ici, je suis en fait accès à l'index et 0e pas le 1 plus 0-- ou 1 plus 1, dans ce cas, l'indice de manière qu'il est en fait clair. Tout le monde est genre de sur OK comment cela fonctionne grâce et avec tous les indices que je suis mettre une valeur dans le tableau et la création d'un tableau avec 18 numéros que l'utilisateur va à l'entrée? D'ACCORD. Frais. D'ACCORD. Nous passons maintenant en quelque chose qui est assez pertinente pour ce morceau définir ainsi. Je sais que dans la leçon, David-- Désolé, vous aviez une question? AUDIENCE: Pouvez-vous agrandir? ANDI PENG: Ouais, donc je tente. Mais je ne sais pas. Pour une raison quelconque, cette version de PowerPoint est vraiment pas de travail bien avec l'affichage. Donc, nous allons juste pour le garder comme ça. Tous ces va être téléchargés en ligne. Désolé les gars. Ouais. D'ACCORD. Donc, nous pouvons également avoir des chaînes. Donc, si vous les gars en fait je notice-- Rob sait allé au cours de cette conférence en ce que qu'il did-- une chaîne est en fait seulement un tableau de caractères, si vous pensez à ce sujet, non? Une chaîne est un nom ou un phrase ou un mot, non? Si je devais créer une chaîne nommée Andi-- juste mon nom, A-N-D-I. Vous pensez que l'une des variables. Mais en réalité, il est décomposé en tout un tableau de caractères. Donc, il a un caractère de une valeur stockée dans un tableau. Il a un caractère de n stockée dans le deuxième indice et ainsi de suite et ainsi de suite. Ainsi, dans une telle manière, nous avoir fait ce genre de la structure définie dans placer pour nos cordes. Donc, ici, si je devais l'entrée mot "manger" - sorte de chaîne est égale à mot obtenir chaîne. Si je devais entrer le mot "manger", que est physiquement la façon dont mon ordinateur est mémoriser cette chaîne dans ma mémoire. Et si je voulais courir à travers ce et impression qui out-- donc pour en i est égal à zéro, rappelez-vous, dans la conférence, nous avons quelque chose qui est couverte appelé strlen, ou la longueur de la chaîne. Parce que je ne sais pas en fait savoir comment le tableau est grande de quelque inputting-- de l'utilisateur Par exemple, je introduites le mot "manger", et je sais ça fait trois caractères de long, non? Donc, je pourrais mettre dans un trois là et tout ira bien. Mais si votre entrée de quelque chose d'utilisateur qui est un nombre différent de valeurs, vous allez pas être en mesure de vraiment savez que lorsque vous programmez votre code. Donc, la façon dont nous traitons les cas de test comme cela est que nous avons quelque chose strlen appelé, qui est juste une fonction qui vous indique combien de temps une chaîne est. Donc strlen du mot. Ma parole est de manger. n est égal à strlen du mot. Quelqu'un peut me dire ce que cela La valeur est en fait là? Qu'est-ce que n représentant droit maintenant, dans cet exemple, si je devais manger? Public: 3. ANDI PENG: 3, exactement. Donc, nous avons pour int i est égal zéro, n est égal à 3, pour l'essentiel. Et i va courir jusqu'à ce qu'il soit moins de 3i ++. Et il va aller essentiellement à travers et faire la même chose. Il va imprimer toute valeur et de vous donner E-A-T. Il est juste désignant un façon d'écrire différent. Cela va être très utile. Ouais. Public: Quelle est la avantages de mettre n est égal à l'intérieur de ce mot strlen pour la boucle [inaudible]? ANDI PENG: Ouais. Donc, si je devais to-- dire, par exemple, si je devais le faire et ensuite do-- oop-- que, dans mon code, il serait effectivement être faire comme la même chose. Cependant, la façon dont David a expliqué il en conférence, si l'un de vous les gars rappelez-vous, était que, les humains, en tant que programmeurs, Nous essayons vraiment de programmer notre code de sorte que notre ordinateur a de travailler aussi minime que possible, de sorte que notre code est très efficace. Donc, si je que là, ce qui eu qui se passerait dans ma boucle for est que je voudrais d'abord déclarer une variable i nommé va être 0. Je vais vérifier, oh, ce qui est les strlen de mot? Oh, le strlen est 3. Est si i moins de trois? Oui ça l'est. Je vais courir. Et puis la deuxième fois de retour autour la boucle, je vais pour incrémenter i. i va être un. Et i va vérifier, oh, mais quelle est la strlen du mot? Oh, il est trois. Et est-ce que semble sorte de gaspillage, chaque fois que vous exécutez à travers la boucle, à vérifier la fonction, même si les strlen de mot ne change jamais fait? Donc, il est une puissance supplémentaire pour un ordinateur. Lorsque vous commencez à parler de choses qui sont des milliards et des milliards de lieux de long, imaginez votre ordinateur avoir à se rendre physiquement à travers et vérifier tout cela à chaque fois. Voilà pourquoi, pour faire juste pour des raisons d'efficacité, nous avons tendance à tout faire, car de cette façon nous sommes seulement appelant la fonction une fois au début, et que chaque fois qu'il passe par ça va pour mémoriser la valeur 3 là, que vous ne faites pas avoir à vérifier constamment à chaque fois. Ouais. AUDIENCE: Désolé. Juste [inaudible]. Pourriez-vous ne int n est égal à strlen et de mettre qu'au-dessus de l'extérieur de la boucle for aussi bien? ANDI PENG: Ouais. Vous pourriez le faire, absolument. La raison pour laquelle nous avons ici est parce que la façon dont un pour les travaux de la boucle est ce qu'il a appelé un variable locale dans le sens que tout vous êtes créer à l'intérieur de la boucle for existe seulement à l'intérieur de la boucle for. Donc, la variable i seulement existe dans ces crochets. Et voici les variables de n aussi seulement existe dans ces crochets. Donc, si vous deviez utiliser des strlen mot plusieurs fois vers le bas ci-dessous, absolument la meilleure façon de le faire serait de déclarer le haut de sorte que vous ne devez pas le faire une fois. Ouais. Public: Pourquoi avez-vous un nouvelle ligne après la pour cent de voir si vous voulez mettre toutes les les lettres à côté de lui à part? ANDI PENG: Oh, je voulais imprimer les tous sur chaque ligne. Il n'a pas d'importance. Ouais, il est une mise en forme. Voilà une bonne question, cependant. Ouais, si je voulais imprimer le tout sur une seule ligne, Je ne voudrais pas avoir le tiret dans. D'ACCORD. Tout le monde la bonne? D'ACCORD. Frais. Donc, je pense que je l'ai assez parlé. Au tour de vous les gars à courir à travers le code et me dire ce qui ne va pas ici. Où est le bug? Donc, comme vous pouvez le voir, je l'ai déclaré un nouveau tableau de type chaîne nommée classe. Et je suis entré Sam, Jess, et Kim en elle. Et je suis d'essayer d'imprimer tous les éléments de la matrice. Quelqu'un peut me dire pourquoi cela va me donner des problèmes? Je vais vous donner les gars 10 secondes pour réfléchir à ce sujet. D'ACCORD. Ouais? Public: Est ce que le centre gauche égal à 3 ou [inaudible]? ANDI PENG: Droit. Alors, combien de fois est-ce réellement va courir à travers cette boucle? AUDIENCE: Quatre. ANDI PENG: Exactement. Il va à travers quatre fois. Il va courir à travers à 0, 1, 2, et 3, parce que leur élément i est est inférieur ou égal à 3. Il ne va pas arrêter quand il est 2. Il va continuer va jusqu'à ce qu'il frappe 3. Et comme nous le savons, il ya seulement trois éléments dans notre tableau réel. Si nous essayons d'accéder à la quatrième élément ou l'indice de 3, vous allez frapper quelque part dans la mémoire qui ne pas exister. Il a appelé le terminateur null. Rien ne va être là. Votre ordinateur ne va pas être très heureux avec vous. Ouais. Quelqu'un at-il des questions pourquoi ce qui se passait? Voilà un espace commun à éviter. Ouais. Public: Est-ce que le premier pas glisser aussi avoir une chaîne de 2? PENG ANDI: Non Donc, essentiellement, lorsque vous faites un tableau, ce droit du support là, que tout number-- ça vous dit est de savoir comment de nombreux éléments dont je dispose. Il est pas réellement dire moi les indices de quoi que ce soit. Donc dans ce cas, je sais que je veux à écrire avec trois endroits, avec trois emplacements physiques à tiens ce que je veux tenir. Voilà pourquoi le numéro trois est là. Cependant, si je voulais pour réellement y accéder, si je voulais dire, printf classe numéro de support, puis vous allez mettre réellement l'indice physique il. Ouais, bonne question. AUDIENCE: est donc la physique indice censé être [inaudible]? ANDI Peng: Je suis désolé. Pouvez-vous parler un peu? Auditoire: Alors, est l'indice physique [Inaudible] chacune des boîtes? [Inaudible]? ANDI PENG: Ouais. Donc, je vais revenir à droite ici. Pensez ici. Nous avons un tableau de taille 3. Il ya trois endroits, comme, espaces réservés physiques ici. Mais ils sont nommés 0, 1 et 2. Donc, si je voulais y accéder, la façon dont je y accéder printf est de ce que je voulais ici. Vous auriez à imprimer le nom de celui-ci, car alors l'ordinateur sait, oh, je dois regarder dans ce tableau pour l'indice 0th. Ouais. Mais la taille de celui-ci ne change pas. La taille est de 3, indépendamment de la façon dont vous les étiqueter. D'ACCORD. Tout le monde la bonne? Auditoire: Alors, chaque fois que je [inaudible]? ANDI PENG: OK. Donc dans ce cas, nous ne faisons pas vraiment y entrer dès maintenant dans le cours. Mais savoir qu'un string-- comme je dit avant, une chaîne est essentiellement un tableau de caractères. Donc, si je crée un tableau des cordes, je sorte de avoir un tableau de tableau de caractères, non? Donc dans ce cas, parce que je avoir un tableau de chaînes, si vous étiez à l'entrée un très long mot, qui occupe toujours un seul espace, parce que ce est une corde. Mais si vous deviez penser les personnages de ce tableau, alors que cela prend beaucoup plus caractères que l'un des autres mots sommes. Pas vraiment important pour le moment. Mais cela est juste généralement comment ça fonctionne. D'ACCORD. Donc ceci est quelque chose que je vous laisse faire beaucoup au cours du semestre. Je dois reposer ma voix. Les gars, vous devez vous stimuler. Beaucoup d'entre vous sans doute avoir à dormir en ce moment. Je entrer problèmes aléatoires où nous en tant que classe ou vous avec un partenaire à côté de vous vont de passer quelques minutes à discuter sur la façon dont nous allions sur la résolution ou la création d'un tel programme. Donc maintenant, nous voulons pour créer un program-- nous allons appeler upper.c-- que les convertis un mot en minuscules à une classe supérieure majuscules string--, désolé. Parole dans les chaînes, désolé, est synonyme. Je vais les changer pour signifier la même chose. Ouais. Prenez quelques minutes. Il ne doit pas être écrite dans une langue quelconque. Juste au code pseudo ou logiquement comment nous pourrions même aller à faire un tel problème. Ouais. [SIDE CONVERSATION] Je aussi remarqué que vous les gars can-- Je vois déjà type de programme. Je suppose que mon manque de mode présentateur est un problème. Mais c'est OK. [SIDE CONVERSATION] Oui, s'il vous plaît, les gars. Venez chercher Candy. Venez chercher Candy. Public: Oui! [SIDE CONVERSATION] ANDI PENG: Aussi, ouais, Je vais commencer à jeter des bonbons à des personnes qui ne répondent pas aux questions. Donc, vous devriez tous répondre à des questions. Ou je suppose que les gens qui ne répondre aux questions. Ouais, inverse. [SIDE CONVERSATION] AUDIENCE: [inaudible] ANDI PENG: Ouais. Ouais. [SIDE CONVERSATION] Très bien, les gars. Prenez, comme, 10 secondes de plus. [SIDE CONVERSATION] Ok les gars. Donc, avant de commencer à essayer de écrire réellement physiquement code, une bonne habitude à développer est que nous voulons premier type de raison logiquement comment nous pourrions le faire. Vous voulez vous assurer, avant de vous physiquement commencer à essayer de coder dans Mario, que vous faites vous que vous avez votre pseudo. Qui vous emmène à travers ce que vous avez besoin pour créer de manière que, lorsque vous physiquement écrire votre programme plus tard, vous êtes mieux en mesure de rattraper les erreurs dans votre code et des choses comme ça. Donc, nous allons commencer tout by-- en anglais, en pseudo, toute personne ne veut donner moi une explication générique de la façon dont nous allions prendre? Ouais. AUDIENCE: [inaudible]. ANDI PENG: Bien sûr, pas de soucis. AUDIENCE: Pouvez-vous lui demander de poser ou quelqu'un pour obtenir chaîne 1-- ouais, ficelle, et alors-- ANDI PENG: Oui, si cela est un bon début. Je vais commencer à taper, désolé, que vous parlez. Ainsi-- AUDIENCE: --la minuscules chiffres sont plus élevés, non? Ou les lettres minuscules avoir un nombre élevé? ANDI PENG: Exactement. AUDIENCE: Alors nous soustrayons 32 à partir de ce que [inaudible]. ANDI PENG: Grande. Donc, nous avons un genre de sentiment général de la façon de travailler sur ce problème. Sachant que nous avons appris du genre la voie physique que cordes sont stockées dans la mémoire, ce que vous faites déjà savez que vous allez probablement avoir à l'écrire dans votre code pour se déplacer à travers la chaîne? Public: Pour boucle. ANDI PENG: Une boucle for, exactement. Génial. Donc, nous avons une sorte de générique pseudo écrit ce genre de se donner vous des notes sur la façon dont vous serait déplacer résoudre le problème. Maintenant que vous avez cela, vous peut référencer pour plus tard lorsque vous essayez de réellement écrire votre code. Ainsi, nous pouvons réellement aller ici. Et je dois une fonction appelée upper.c-- là, il est-- de seulement un modèle vierge dès maintenant que vous les gars vont me aider à comprendre sur la façon d'écrire cette ligne de code-- pas la ligne de code. Ce sera plusieurs lignes de code. Lors du démarrage de toute sorte de pset vierge, ce qui est la première chose que je dois se rappeler de le faire? AUDIENCE: [inaudible]. ANDI PENG: Grande Yep. Comprendre. stdio.h. Souvent, ceci est l'un des Les erreurs les plus faciles les personnes fera quand ils sont l'écriture, est qu'ils vont oublier d'inclure une importante bibliothèque dont ils ont besoin. Donc, si il est des heures de bureau et vous êtes comme, Je ne sais pas pourquoi mon code ne fonctionne pas. Pouvez-vous me dire pourquoi ça ne marche pas? Nous allons dire que vous avez #include? Vous devriez #inclure il. D'ACCORD. Nous avons donc la norme I / O ici. Est-ce la seule bibliothèque nous allons avoir besoin d'ici? Quoi d'autre allons-nous faire? Pardon. Quelqu'un vient il crier? AUDIENCE: [inaudible]. PENG ANDI: Il vous allez. D'ACCORD. Et comment dois-je aller sur le démarrage de toute sorte de la fonction, toute sorte de fonction principale au sein de notre programme? Int principale. D'ACCORD. Que dois-je mettre à l'intérieur ici? Quelle est la première chose que vous voulez faire? Si nous voulons obtenir un chaîne de l'utilisateur, qu'est-ce qu'on va avoir à faire sur cette première ligne? Désolé, vous les gars se sentent juste libre de parler haut et fort. Juste crier que ce soit. AUDIENCE: Demandez à l'utilisateur? ANDI PENG: Comment faisons-nous cela? Ask-- je vais taper "demander à l'utilisateur"? AUDIENCE: Printf. ANDI PENG: OK. Printf. Ce que je veux à printf? AUDIENCE: Type dans quelque chose. ANDI PENG: Comme ça? Guys, prétendent que je suis un ordinateur. Physiquement me dire à chaque étape que je dois taper ici? Est-ce que je fais quelque chose de mal? Aurais-je dû tapé quelque chose? AUDIENCE: Vous devez citations. ANDI PENG: Je dois citations? D'ACCORD. D'ACCORD. Public: Et puis la nouvelle ligne. Point-virgule. ANDI PENG: point-virgule? D'ACCORD. Bien. Public: Et peut-être spécifier que vous voulez en minuscules? ANDI PENG: Grande. Vous les gars moques de moi oublier de mettre un point-virgule. Je vous garantis quelque part au cours de cette classe, vous allez oublier de mettre un point-virgule, et il vous prendre trois heures pour comprendre pourquoi votre code ne fonctionne pas. Il est arrivé à nous tous. Ce sera probablement vous arriver. Prenez une bonne habitude d'utiliser des points-virgules. D'ACCORD. AUDIENCE: Voulez-vous de faire la barre oblique inverse dans? ANDI PENG: Bien sûr. Voulez-vous faire la barre oblique inverse dans? Public: Oui. ANDI PENG: Grande. D'ACCORD. Qu'est ce que je fais apres? AUDIENCE: Obtenir chaîne. ANDI PENG: Obtenez chaîne. Alors qu'est-ce que je tape? Quelqu'un? AUDIENCE: String s. ANDI PENG: String s. AUDIENCE: GetString. ANDI PENG: Quelqu'un, pouvez-vous me dire où cette fonction GetString vient? AUDIENCE: string.h. ANDI PENG: string.h? Vous pensez qu'il est de string.h? AUDIENCE: [inaudible]. PENG ANDI: Il vous allez. Il est de CS50.h. Si vous êtes toujours confus sur l'endroit où un fichier de bibliothèque est ou un fichier d'en-tête est, google string.h littéralement, et je vais vous dire ce sont toutes les fonctions qui sont en string.h. D'ACCORD. Alors, maintenant que je l'ai créé une chaîne et je l'ai invite l'utilisateur pour lui, Je l'ai stocké dans une variable s nommés, que dois-je faire maintenant? AUDIENCE: vérifier si elle est en minuscules. ANDI PENG: Désolé? AUDIENCE: vérifier si elle est en minuscules. ANDI PENG: Très bien, nous allons le faire. Comment je fais ca? En fait, pour l'application de la classe en ce moment, nous allons juste supposer que tout que l'entrée de nous est déjà en minuscules. Si vous voulez vérifier, vous le feriez il suffit d'ajouter une instruction conditionnelle qui vérifiait, qui traversait chaque élément de tableau unique et vérifié si elle est entre certaines valeurs. Je oublie ce que le nombre des valeurs de minuscules sont. Vous pouvez chercher sur la table ASCII. Mais oui, ce est un très bon point. Mais maintenant, nous allons juste supposons que toutes les cordes nous entrée sont en minuscules. D'ACCORD. Alors, comment pourrais-je aller sur ce problème prochaine? Public: Pour boucle. ANDI Peng: Pour la boucle? D'ACCORD. Dites-moi ce qu'il faut taper. Public: Pour int i est égal à 0. ANDI PENG: OK. AUDIENCE: Oh, en fait, alors vous faire une virgule et faire n est égal à strlen. ANDI PENG: chose donc important que je pense qu'elle a remarqué ici est que nous ne devons dire int n la deuxième fois que nous avons fait cela. Il suffit de savoir que, dans un des boucle lorsque vous déclarer, vous ne fait pas besoin de l'int de la deuxième fois que vous faites une variable. Vous pouvez dire n strlen. AUDIENCE: de l'art. ANDI PENG: s. D'ACCORD. AUDIENCE: Puis un point-virgule. ANDI PENG: Bien sûr. Public: Et puis [inaudible] n. Puis i ++. ANDI PENG: Grande. Bien. Que voulons-nous à l'intérieur de cette boucle for maintenant? Rappelez-vous, si nous allons courir à travers une chaîne et courir à travers un tableau, nous voulons vérifier les choses en elle. Qu'allons-nous besoin? Ceci est sorte de la partie difficile maintenant. Quelqu'un a une idée? D'ACCORD. Alors d'abord, comment pouvons-nous même l'accès? Comment pouvons-nous même la première chèque ou accéder à un élément dans la matrice? Comment fait-on cela? Quelle est la notation que nous utilisons pour faire cela? Quel est le nom de ce tableau appelé? Il a appelé s, la droite? Rappelez-vous, toute la chaîne est toujours un tableau. Donc, de la tranche i, non? Parce que la valeur actuelle est ou de la valeur de l'indice nous allons vérifier. Et nous allons établir que l'égalité to-- nous voulons une valeur en minuscules, non? Nous voulons transformer ce lower-- Désolé, nous voulons une majuscule. Nous voulons tourner la minuscule valeur dans une majuscule. Et donc like-- Je suis désolé, Quel est votre nom? AUDIENCE: Heidi. ANDI PENG: Désolé? AUDIENCE: Heidi. ANDI PENG: Heidi. Comme dit Heidi d'abord, nous sommes probablement allez avoir besoin the-- nous sommes probablement devoir soustraire 32 à partir de tout ce qui est Charc, non? Parce que sur un ASCII table, la différence entre une lettre minuscule et une lettre majuscule est de 32. Alors, quand nous faisons cela, nous sommes probablement allez vouloir soustraire 32, non? Nous allons donc faire s i. Tout le monde comprend pourquoi je l'ai fait? Parce que maintenant, dans notre tableau, Nous vérifions l'indice 0th, non? Et de l'indice du 0ème chaîne, qui est le premier caractère. Et ce personnage, nous allons à supposer qu'il est minuscule. Si nous voulons faire en majuscules, nous devez soustraire 32 de sa valeur, parce que dans notre ASCII table, qui est comment nous l'obtenons correspondant à l'autre valeur qui rend majuscules. Tout le monde comprend cela? Ouais. Public: Pourriez-vous aussi ne minuscules un minus-- ANDI PENG: Ouais, donc voilà effectivement très belle. Je vais revenir à ce que question après que nous faisons cela. Ouais. Et puis, si je veux voir ce qui se passe, Je vais probablement vouloir imprimer, non? Quelqu'un me dire ce que Je veux imprimer ici. AUDIENCE: printf pour cent c barre oblique inverse [inaudible]. Voilà la valeur de la i de [inaudible]. ANDI PENG: s i, désolé? AUDIENCE: [inaudible]. ANDI Peng: Je ne sais pas. Que pensez-vous? AUDIENCE: Eh bien, je wouldn't-- Je suppose que je ne serais pas bring-- Je voudrais prendre le à l'intérieur, parce que [inaudible]. ANDI PENG: Oh, vous l'aurait fait? AUDIENCE: Ouais. ANDI PENG: Laissons la manière il est, et je vais vous expliquer pourquoi plus tard. Rappelez-vous, même lorsque vous avoir une place de titulaire, vous voulez mettre des parenthèses autour d'elle. Bien. Donc, ce devrait être une fonction solide ici. Lançons et voir si il compile. Assurez supérieure. Uh-oh. Qui ne semble pas trop bon. Pourquoi cela arrive-t-il? Comme pour toute erreur, vous voulez aller en arrière et recommencer avec le premier, parce que généralement les causes d'une erreur beaucoup d'autres erreurs après elle. Ici, nous voyons upper.c: 18: 25, qui raconte moi dans ce programme nommé upper.c, sur la ligne 18, erreur déclarant implicitement bibliothèque de fonctions strlen avec le type blah unassigned--, je ne sais pas ce qui se passe après. Tout ce qu'il me disait en ce moment est que quelque chose se passe sur le strlen. Et l'ordinateur est confus, parce il est comme, je ne sais pas ce qui est strlen? Qu'est-ce qui a probablement vous dire que vous êtes absent? Public: Vous êtes absent [inaudible]. ANDI PENG: Vous avez raison. Exactement. Donc, cela est où il est important de veiller à que chaque fonction que vous utilisez dans votre Code est d'avoir la tête correcte déposer pour la bibliothèque, ou bien vous allez obtenir beaucoup d'erreurs et votre code ne va pas savoir ce qui se passe. Donc, nous allons inclure string.h ici. Maintenant, quand nous essayons de compiler supérieure. Compiler correctement. Lançons ce programme. Donc taper quelque chose en minuscules. Qu'est-ce que vous les gars voulez taper? Crier quelque chose. Tout droit, Charly vient d'arriver. Nous allons saisir le nom de Charly. Charly en minuscules. Et nous espérons, espérons-le, cela est aller à crier et cracher Charly en majuscules. Yay! Tout le monde comprend comment Je suis allé sur la résolution de cela? La façon que je peux manipuler en utilisant des nombres entiers pour résoudre ce que Je veux faire dans les chaînes, parce que les caractères et les entiers peuvent être référencés de la même manière parce de la cartographie ASCII. Donc, pour revenir à votre question, si je voulu mettre ici au lieu de 32 A moins majuscules en minuscules comme un que cela pourrait fonctionner tout aussi bien, parce que ce tout simplement la différence entre ces deux valeurs. Si je veux faire de cette charly again--. Oh non. Je pense que nous sommes allés dans le mauvais sens, oui? AUDIENCE: [inaudible] a minuscule. PENG ANDI: Il vous allez. Yep. Et sur crache charly. Donc soyez prudent lorsque vous soustraction des valeurs de se rappeler que l'on est plus grande que l'autre. Par exemple, ici je oublié qui est en fait une minuscule supérieure majuscules A. Alors, quand je essayé de les soustraire l'autre sens autour, je suis négative 32. Et mon ordinateur était comme, Je ne sais pas ce qui est. Il est probable que quelques-uns au hasard valeur qui est pas très bon. Et assurez-vous donc que vous êtes soustrayant dans la longueur correcte pour trouver le personnage que vous voulez. D'ACCORD. Quelqu'un est confus sur la façon dont nous est allé sur l'écriture de cette fonction? D'ACCORD. Donc en fait, une fonction déjà existe dans la bibliothèque appelé ctype.h. Appelée ctype.h de la bibliothèque. Cette fonction est en fait déjà écrit pour vous. Il a appelé à supérieure. Et donc à des fins de ce pset, vous allez de constater que vous voulez vraiment utiliser beaucoup de les fonctions contenues au sein de la bibliothèque de ctype. Pour supérieure, d'abaisser, est supérieure, est lower-- ce sont toutes les fonctions que vous serez en mesure d'utiliser de très, très rapidement dans votre propre code qui fait exactement ce qu'il fait. Nous avons écrit comment convertir une chaîne en majuscules. Mais cela est en fait le code que quelqu'un d'autre a écrit et que vous pouvez accéder par l'intermédiaire d'une fonction différente. Ouais? Auditoire: Alors, vous venez de copier un de là et de le faire pour chaque lettre? ANDI PENG: Oui, parce que je ne fais pas soucier des valeurs d'un. Je me soucie simplement que la différence entre elles est de 32, non? La différence entre minuscules b et B majuscule est également 32. Et la différence entre le c et majuscules C est toujours 32. Je dois juste se soucier de la la différence entre les deux, parce que toutes les lettres suivre le même schéma, à droite? Si je dois la différence entre l'un d'eux, Je sais ce que la différence entre chacun d'eux est. Bonne question. Ouais. Tout le monde la bonne? D'ACCORD. Oop. D'ACCORD. Donc, un autre concept qui est va être très utile comme vous continuer à développer votre code est cette idée de créer des fonctions ou l'abstraction. Donc maintenant, nous avons tous pris l'algèbre. En algèbre, on vous apprend qu'il n'y a cette chose merveilleuse appelée fonction linge, où si vous entrée un type de numéro, il traverse cette fonction merveilleuse et ressorte une sortie différente, non? Dans le code, la même chose arrive dans toute sorte de fonction. Donc je pouvais physiquement écrire dans mon corps de mon code une déclaration principale qui fait réellement quel que soit le corps du code fait. Mais en dehors de cela, je peux aussi écrire plusieurs fonctions différentes que faire beaucoup de choses différentes. Par exemple, nous avons déjà commencé à utiliser certains d'entre eux. Printf-- qui est un fonction que quelqu'un d'autre a déjà écrit que nous pouvons faire appel à notre code. Pour upper-- dans ce cas, upper-- est une autre fonction nous avons écrit que nous peut appeler dans notre code. Et donc je suppose pourquoi faire nous avons même des fonctions? Pourquoi ne pas Plop tous dans la même ligne de code? Il le rend facile pour tout le monde. Eh bien, le raisonnement derrière cette est, tout d'abord, l'organisation. Il est vraiment ennuyeux aller à travers le code de quelqu'un et une fonction comme printf. Si vous les gars savait réellement ce que la fonction printf comporté à écrire, il est, comme, 1.000 lignes de code. Si chaque fois que je voulais à printf quelque chose, Je devais écrire 1000 lignes de code, ce serait vraiment ennuyeux à lire, droit? Voilà pourquoi nous venons créé cette fonction abstraite que nous avons déjà quelqu'un d'autre a écrit quelque part d'autre. Et chaque fois que nous avons besoin de l'utiliser dans notre code, nous venons de dire printf. Et qui est capable d'utiliser la fonction quelqu'un d'autre a écrit dans notre code. Il est plus facile organisationnel pour lire le code. Deuxièmement, il est la simplification. Il simplifie les mesures que nous avons à prendre pour résoudre notre problème. Printf, des fonctions comme printf, fonctions comme supérieure à sont toutes des choses qui nous permettent de simplifier notre code vers le bas afin qu'il est plus facile. Et dernière chose est la réutilisabilité. Donc, le fait que nous avons une fonction appelée printf que nous pouvons appeler de nombreux différents fois et lui permet d'être réutilisable. Si je devais écrire printf, Je ne l'écris fois. Il existe seulement dans ce lieu. Si je voulais le faire à nouveau, je le ferais avoir à copier et coller tout cela dans mon deuxième ligne de code. Voilà pourquoi si nous créons une fonction qui existe en dehors de notre principale, nous pouvons simplement appeler et réutiliser quand nous avons besoin de sorte qu'il est beaucoup plus facile pour nous que les programmes d'écrire. Ainsi, la manière que nous aurions réellement écrire une fonction est très similaire, à droite? Ceci est le premier type de cas dans lequel nous allons voir une fonction prise sur un style différente de notre void main int. Dans ce cas, si je voulais écrire une fonction appelée q, non? Et la valeur int ici est me disent tous, ce que je veux cet fonctionner pour revenir à moi? Si je veux au cube un nombre entier, Je vais vouloir entrée. Ce sont les paramètres. Je vais aux entrées d'une valeur de type int. Et je vais revenir une autre valeur de type int. Et ici, comme vous peut voir, tout ce que je fais cubage est tout ce que mon entrée est que ma production et en le retournant. Donc tout ce que cette fonction fait est prend une sorte de nombre entier. Il multiplie par lui-même deux fois de sorte qu'il cubes en vigueur. Et puis il retourne quelle que soit que la sortie est. Donc dans ce cas, il est deux lignes de code que nous avons dû écrire supplémentaire. Mais si nous voulions appeler sur cette plusieurs fois, il est beaucoup plus facile de taper que l'on ligne ici qui est dans le cube de avoir à passer par de multiples fois. Donc, la façon dont essentiellement tout mise en forme pour toute sorte de fonction va exister est comme ici. Donc, nous avons le nom de la fonction. Dans ce cas, il est appelé cube. Et nous nommons cube parce il est facile de se rappeler. Vous pouvez le nommer carrés et il peut effectivement être coupé en cubes. N'a pas d'importance. Juste un nom que vous êtes attribuant à votre fonction. Ce droit ici, int, est le type du paramètre dont vous avez besoin. Alors qu'est-ce que cette fonction besoin pour fonctionner? Eh bien, il a besoin d'une entrée. Je l'ai appelé entrée. Vous pouvez l'appeler comme vous voulez. Mais je besoin de quelque chose de type int. Il va effectivement exécuter tout ce qui est à l'intérieur d'ici, le corps de la fonction. Et puis le type de retour ici, ce int-- tout ce qu'il me dit est que cette fonction est va revenir à moi dans int. Donc, il va prendre dans un int, et ça va vous redonner un int. Tout le monde comprend comment le mise en forme de ce genre fonctionne? Frais. D'ACCORD. Alors ne soyez pas inquiet si cela semble un peu de droit abstrait maintenant. Ceci est quelque chose que nous allons parler. Nous allons plonger plus profondément plus tard dans le cours. La manière dont toute sorte de niveau supérieur abstraction de ces choses fonctionnent est que, dans la mémoire, dans votre ordinateur, tout est stocké dans ce type de la pile, dirai-je. Donc, là-haut au sommet. Je ne sais pas si vous les gars peuvent voir que bien. Je vais essayer d'agrandir. Ici en haut, nous avoir le texte physique de ce que l'ordinateur est interpreting-- tous les zéros et de uns que exister dans notre ordinateur. Et puis nous avons l'initialisée données non initialisées et les données, ce que nous appelons les variables globales. Ainsi, les variables qui existent dans tous les programmes et à travers l'ensemble de votre, essentiellement, le code. Pas de soucis si vous les gars sont sorte de clair à ce sujet. Il ne compte pas vraiment en ce moment. Et puis nous avons ce qui est appelé un tas dans une pile. Pensez à une pile littéralement comme tout comme une pile de choses, une pile de différent choses étant poussé sur le dessus les uns des autres qui stockent les différents variables et la syntaxe dans votre code. Et puis ici, tout au fond, nous avons les variables d'environnement de ce que vous exécutez au sein juste votre petite ligne de code. Et nous allons juste pour agrandir dans la part réelle de la pile. Donc, ici, si nous étions pour agrandir dans cette zone juste sur de l'empilement, ceci est à quoi il ressemble. Et cela est en fait assez importante quand vous parlez de gars fonctions, parce que le préavis mémoire de votre ordinateur est mémoriser les variables et les fonctions et les paramètres de vos deux fonction et vos principales variables dans des lieux différents. Donc maintenant, principale est la fonction réelle que vous êtes l'exécution dans un code. Vous avez ses paramètres stockés ici et ses variables locales stockés ici. Variable locale signifie juste une variable qui existent seulement dans cette fonction. Et en plus de cela, vous avez cette fonction distincte appelée cube. Vous avez voilà paramètres ainsi que les habitants. Et la raison, vous pouvez voir ici est que ce arrive quand cube prend dans un la valeur de votre fonction principale est ce que ça fait que plus de la copie. Donc, si je voulais cube 2 et 8 revenir, que 2 est effectivement entré en tant que paramètre et son copié sur de sorte que vous avez existante à deux endroits différents dans la mémoire. Et vous devez être très prudent le souvenir de ceux que l'on vous êtes en train de manipuler. Et un exemple de ce qui est arrivé ce serait très, très mauvais existe ici. Donc ici, je l'ai obtenu, en théorie, un programme ici, une fonction principale que je déclarant un int x est égal à 1. Je déclarer une autre int y est égal à 2. Et puis je l'exécuter grâce à cette fonction appelé swap, où je suppose que il est échangeant les deux valeurs. Et puis je vais les imprimer, non? Voilà ce que je veux de ce programme à faire. Donc, nous allons descendre et de jeter un oeil. Donc, si je réellement écrire un autre fonction, comme vous pouvez le voir, nous avons notre fonction principale ici. Et puis nous avons notre deuxième fonction ici. Void swap. Void signifie simplement qu'il est ne va pas retourner quelque chose. Le nom de la fonction est appelé swap, et il est aller à l'apport de deux variables, et un int int b, à partir de votre fonction [inaudible]. Donc, essentiellement, ici, nous sommes passant x et y dans cette fonction. Et si nous devions créons this-- si nous voulons pour créer une valeur temporaire, non? Nous allons attribuer cela à un. Et puis un va maintenant égal b. Et b va d'être de retour où la valeur de température était, qui est un, parce que quand vous voulez échanger des choses, vous pouvez ne pas aimer tout simplement les échanger. Vous devez garder un sur ici de sorte qu'il se souvient ce qui est, car une fois vous changez un, vous oubliez ce que la valeur originale était, non? Donc, en théorie, ce programme devrait fonctionner, non? Si je voulais échanger du deux, ils devraient échanger. Donc, nous allons l'exécuter et voir si cela fonctionne. Donc, comme vous les gars pouvez le voir, x était une fois 1 et y était une fois 2. Et si je l'imprime, x vaut toujours 1 et y vaut 2. Hmm, ce programme ne semble pas être le travail de la manière que je veux que cela fonctionne. Quelqu'un veut-il prendre une photo à deviner pourquoi ce qui se passait? Il a à voir avec la manière que des choses différentes sont stocké dans des endroits différents dans la mémoire. D'ACCORD. Alors vous les gars ne devez pas vous inquiéter trop à ce sujet en ce moment. Mais sachez que Cube locale sont des variables a et b, car ici, dans notre fonction, nous avons déclaré a et b que les variables qui existent au sein de cube, cette fonction. Mais comme vous pouvez le voir, les paramètres qui il prend en étaient stockées ici. Mais nous ne sommes pas réellement retour rien. Nous ne sommes pas réellement changer x et y. Nous étions juste en train de changer a et b. Nous avions copié x et y dans quelque chose appelé a et b. Mais nous n'y sommes jamais x et y manipulé eux-mêmes. Êtes-vous les gars voient comment cela se passe? Est que nous avons simplement copié ce plus, mais nous avons pas réellement gardé piste de l'endroit où ils étaient en mémoire. Et maintenant l'ordinateur est à la recherche, oh, je l'ai courir à travers cette chose cette belle fonction. Mais x et y sont encore x et y. Rien est arrivé à les en raison du fait que ces paramètres et les variables locales sont stockées dans un autre placer en mémoire. Et cela est un niveau supérieur notion que nous allons commencer à voir plus tard dans le cours. Mais il suffit de savoir que cela est un problème qui peut se produire et que nous allons trouver des moyens sur la façon de face à cela plus tard dans le cours. D'ACCORD. Bien. Ainsi, le dernier concept nous sommes vraiment à couvrir que ça va être utile pour le pset cette semaine sont ce qu'on appelle arguments de ligne de commande. Donc Rob dans sa conférence a traversé sorte de brièvement comment ces travaux. Essentiellement savoir que quand vous écrivez comme une fonction principale, lorsque nous fonctions écrit avant dans le passé, nous avions void main int. Et la raison pour laquelle nous y avait vide était parce que nos programmes ne besoin de valeurs d'entrée afin de fonctionner, non? Quand je courais Mario, je ne l'ai pas besoin effectivement il suffit de taper dans quelque chose quand je courais Mario. Je pourrais demander à l'utilisateur plus tard. Mais ce ne sera pas toujours le cas. Par exemple, en ce le problème de la semaine fixe, vous allez être demandé que, dans Outre l'exécution de votre programme, vous allez vouloir entrée certaines choses à droite que vous exécuter votre programme. Donc, la façon dont nous le faisons est appelé un argument de ligne de commande, ce qui est comme un argument vous pouvez entrer directement que vous essayez de lancer votre programme. Donc la notation pour cela, il est assez complexe à la recherche, mais il est vraiment pas que difficile. Donc int main-- qui est juste votre fonction principale. Dans argc virgules parenthèses chaîne de argv. Donc tout ce qui est dit est que cette int argc-- tout ce que vous dit est que ce sont le nombre de arguments l'ordinateur doit attendre. Donc, une chose qui est vraiment important de garder une trace de est le nom physique de votre programme compte comme un de ces arguments. Donc, si je voulais avoir mon programme courir plus une ligne de commande supplémentaire l'argument, je suis en fait allez avoir deux. Argc est en fait va être deux. Et puis la chaîne argv bracket-- tout ce qui est en train de faire, ça me donne une tableau de chaînes qui est va simplement afficher et de stocker ce tous ces arguments de ligne de commande sont. Ainsi, par exemple, si je voulais avoir cette programme, ./copy inFile outfile, non? Voilà juste une commande typique Linux. Ce qui est réellement argc? Combien arguments de ligne de commande y at-il réellement dans ce domaine? Tout cela ne fait faire une copie de un infile du nom d'un fichier Et il le copie dans un autre fichier, non? Voilà tout cela est en train de faire. Comme vous pouvez le voir, je le fais sur une seule ligne sans qu'il soit fait le programme. Quelle est notre argc dans ce cas? Combien arguments avons-nous? AUDIENCE: Trois? ANDI PENG: Nous avons trois, exactement. Donc, il est très intuitif à il suffit de penser qu'il est juste INFILE et OUTFILE. Mais sachez que le nom physique de la programme vous courez compte pour un. Donc dans ce cas, argc est en fait trois. Que diriez-vous, ce qui est argv 0? Rappelez-vous, tout le arguments de ligne de commande ont été stockés dans un tableau de chaînes. Donc, si je tente d'y accéder, ce qui serait argv 0 support me donner? AUDIENCE: [inaudible]. ANDI PENG: Exactement. Il me donnerait le point slash copie, parce que ce l'élément 0e, la premier élément de mon tableau. Qu'en est-il argv 1? AUDIENCE: Infile. ANDI PENG: Infile, exactement. Qu'en est-il argv 2? AUDIENCE: Outfile. ANDI PENG: Outfile. Ceci est un peu difficile maintenant. Qu'est-ce que vous en pensez argv 3 va être me donner si je essayé d'imprimer cela? AUDIENCE: [inaudible]? ANDI PENG: Avez-vous eu un coup de main? Ouais. PUBLIC: Une alternative. ANDI PENG: Exactement. Alors rappelez-vous dans la leçon que nous avoir à la fin d'une course quelque chose appelé un terminateur null? Nous allons entrer dans ce aussi plus loin dans la classe. Mais sachez que dans la notation, la façon dont votre ordinateur sait qu'il est la fin de la matrice est qu'il met quelque chose appelé un null terminateur ou un tiret zéro. Donc, si vous essayez d'accéder à argv 3, vous allez frapper cet élan 0. Cela est encore plus d'une question piège. Qu'en est-il argv 4? Donc, cela est terminaison nulle passé, delà des limites de notre tableau. Que pensez-vous va arriver quand nous essayons de faire cela? AUDIENCE: [inaudible]? ANDI PENG: Désolé? Dire que un peu plus fort? AUDIENCE: [inaudible]. ANDI PENG: Oui. Tel est le nom de la zone que vous aurez plus de chances d'obtenir. Mais sachez que argv 4-- qui vous permet d'accéder endroits dans votre ordinateur de mémoire que vous avez vraiment ne devrait pas se toucher, parce maintenant vous savez ce qui est argv. Vous savez qu'il est un tableau de taille 3 qui a copie dot, infile outfile et. Si vous essayez d'aller si loin au-delà que vous êtes passé le terminateur null, votre ordinateur a probablement quelque chose stockée dans argv 4. Et vous ne devriez pas être autorisés à pénétrer dans argv 4, parce que vous avez un fichier cabinet et vous êtes seulement a permis l'accès à ces trois étagères. Mais si vous essayez d'atteindre au-delà le plateau de l'endroit où vous êtes autorisé, vous allez commencer à jouer avec d'autres choses dans la mémoire de votre ordinateur. Cela va être vraiment, vraiment mauvais. Il suffit donc de le savoir. Soyez très prudent que vous ne vous contentez pas commencer au hasard l'accès aux éléments dans un tableau étaient pas dans ce que vous voulez créer. Yep. D'ACCORD. Donc, nous allons faire un autre exemple terminal ici. D'ACCORD. Donc Rob rapidement conférence l'autre jour est allé à travers cet exemple, où il eu int main int argc chaîne argv crochets, qui est me disant que je suis va avoir des arguments de ligne de commande. Il a, si argc égale égal 2-- souvenez-vous, équivaut égaux moyens de comparaison. Si elle est égale à 2, alors je suis aller à imprimer bonjour, quelle que soit la première élément du tableau est. Imprimer Sinon, bonjour monde. Qu'est-ce que cela va produire essentiellement? Quelqu'un peut-il nous expliquer en Anglais ce que ce programme est en train de faire? Ouais. Audience: Si quelqu'un a tapé dans une commande et ont déclaré que leur nom et prénom, il ne sera pas seulement l'imprimer premier et dire bonjour, quel que soit votre prénom est. ANDI PENG: OK, nous allons l'exécuter. Ainsi, par exemple, si je devais faire ce fichier faire bonjour bonjour to-- to-- qu'est-ce que vous me voulez à l'entrée? AUDIENCE: Nom et prénom. ANDI PENG: Nom et prénom? Espaces? AUDIENCE: Ouais. ANDI PENG: quelqu'un peut-il dire moi en ce moment, ce qui est argc? Juste là? Oups, désolé. Permettez-moi de revenir. Combien arguments de ligne de commande vous soient: les gars ne peuvent pas voir vraiment. Mais je vais essayer de l'agrandir. J'essaie. Oui, il y en a trois, non? Il est slash dot bonjour, il est Andi, et il est Peng. Alors qu'est-ce que vous en pensez ce programme va être imprimer? Oh. Oh pardon. Mauvais nom. Il a l'impression de, bonjour monde. Quelqu'un veut-il expliquer pourquoi ce qui se passe? Ouais? AUDIENCE: [inaudible]. ANDI PENG: Exactement. Donc, ici, sont conditionnelles est, si argc est égal égal à 2. Alors que dans le cas où il y a deux arguments de ligne de commande. Ensuite, je vais imprimer, bonjour, quel qu'il soit. Mais d'autre, je vais imprimer juste, bonjour monde. Donc, ne quelqu'un veut de me donner un exemple de la façon dont je serais en mesure de réellement a la faire imprimer la valeur de argv 1? Qu'aurais-je à l'entrée ici? Une seule chose, non? Parce que le bonjour dot à déjà compte comme le premier argument. Je dois seulement un de plus. Donc dot bonjour si je fais juste Andi. Bonjour, Andi. Tout le monde comprend pourquoi ce qui se passe? Ouais. Auditoire: Alors, l'espace entre le line-- commande est-il [inaudible]? PENG ANDI: Non Donc, l'espace dans une ligne de commande l'argument, x, de dire votre ordinateur que ce soit le début d'une nouvelle chaîne. Alors chaîne argv ici-- il magasins tous vos arguments des commandes en ligne dans les chaînes. Et ainsi de l'espace dans la ligne de commande argument-- qui ne fait que vous dire, ceci est à la fin d'une chaîne et il est temps de passer à un autre. Ouais. Cela est assez important pour votre pset, parce que vous êtes va être tester ces. Donc, quelqu'un at- Pour toute question à ce sujet? OK cool. Ouais? Auditoire: Alors, la raison vous le feriez mettre l'argument entier calc place de [inaudible] serait quand vous voulez à taper des informations supplémentaires [Inaudible]? ANDI PENG: Oui, exactement. Certains programmes, il faudra vous à l'entrée d'un argument de ligne de commande qu'il passe à l'intérieur et qui utilise ce. Ouais. AUDIENCE: Alors que faire si [inaudible]? ANDI PENG: Eh bien, que dois-je modifier, puis dans mon programme? AUDIENCE: Juste 3. ANDI PENG: Pourquoi est-ce passe, pensez-vous? AUDIENCE: Parce que le [inaudible]. AUDIENCE: Vous auriez à changer pour 2 [inaudible]. Public: 1 et 2. ANDI PENG: 1 et 2, exactement. Donc dans ce cas, vous auriez probablement veulent avoir deux printf statements-- une qui a imprimé une argv et celui qui a imprimé argv 2. Ici. Je peux réellement faire réel rapide. Et voilà. Oh. Pas tout à fait ce que vous vouliez. Mais si vous les gars mess avec la mise en forme, il va sortir. Ouais. Frais. Je sais que nous sommes un peu à court de temps. Mais je vais juste de passer rapidement un quelques minutes en passant par helpful-- Public: Vous avez deux minutes. ANDI PENG: me reste deux minutes? Merci. Quelques conseils de pset rapides. Donc, pour cette pset, je recommande fortement, comme je le disais, tout le monde à lire la spec. Vous devrez écrire un trois programs-- appelé initials.c, l'un appelé caesar.c, un appelé vigenere.c. Quelques conseils importants qui vous les gars veulent vraiment de garder à l'mind-- sorte il est cette fonction appelé atoi-- que je tiens à dire, un trois. Difficile de savoir si ce est fait la façon dont vous le dites. Mais tout qu'il fait, il est saisie. Il convertit une chaîne en entier. Donc représente un nombre entier i pour ASCII. Il est juste de conversion ASCII des valeurs à des valeurs entières. Alors rappelez-vous argv, le tableau que les magasins toutes vos commandes alignent arguments-- il les tous les magasins comme des chaînes. Et donc si vous voulez être en mesure de ont un d'entre eux deviennent un nombre entier, vous allez avoir à utiliser cette valeur ici. Modulo, comme nous avons couvert plus tôt en classe aujourd'hui, vous permet d'avoir la reste de ce que vous avez. Donc, si nous avons vraiment, vraiment un grand nombre de César, ce que si nous avons la fin d'une chaîne de Vigenère? Comment allez-vous être en mesure pour obtenir ce à enrouler autour? Si je frappe et je veux z pour revenir à un, comment vais-je obtenir que pour envelopper? Voudrez probablement utiliser modulo quelque part. Deuxièmement, parcourez le site votre bibliothèque. ctype.h. Voilà une nouvelle bibliothèque que nous avons. Vous trouverez beaucoup de vraiment, vraiment isupper functions-- utile, islower, toupper, tolower, isalpha, et cetera. Toutes les fonctions qui seront très utiles lorsque vous êtes à essayer de comprendre, est ce personnage une lettre minuscule? Comment puis-je convertir cette chaîne en majuscules? Toutes ces choses vont être très, très utile pour votre pset. D'ACCORD. Les heures d'ouverture de ce soir sont de 8h00 à 11h00 dans la salle de classe de demain TEAL ainsi que le mercredi et le jeudi soir. Les heures de bureau sont en communes. Hautement vous suggérer gars tous commencer tout de suite, parce que vous ne voulez pas être que enfant qui a des problèmes jeudi soir soumettant votre pset et est comme, je ne sais pas quoi faire. Je ai commencé, je finis, je soumettais. Essayez de vous donner un peu à manger, parce que dans les problèmes de code se produisent toujours. Vous voulez vous assurer que que vous vous donnez beaucoup de temps pour être en mesure pour compléter les psets. Frais. Je vais traîner ici. Public: Est-ce déjà en ligne? ANDI Peng: Je ne sais pas si elle est déjà en ligne, mais ce sera. Je vais traîner ici si quelqu'un a déjà des questions. Merci d'être venu.