ROB: Très bien. Bienvenue à la première section. Je suis Rob. JOSEPH: Je suis Joseph. ROB: Donc, nous allons plonger en plein dedans La première chose à parler est l'Appliance. Donc, j'espère plupart d'entre vous ont téléchargé déjà. Mais vous pouvez voir les instructions à cs50.net/appliance. Oh mon dieu, je suis maintenant conscient de soi. Je l'entends encore. JOSEPH: Wow, on dirait il est désorienté. ROB: Ainsi, certaines personnes ont eu des problèmes avec elle, il ne faut pas attendre la dernière minute du problème réglé essayer de résoudre l'appareil et trouver que ça ne marche pas. JOSEPH: Et si quelque chose ne fonctionne pas et vous avez besoin d'aide, vous pouvez aller à cs50.net/discussion où nous avoir un forum où vous pouvez poser vos questions. Et nous aurons à les éventuellement. ROB: Très bien. Donc, c'est ce que l'appareil ressemble. Encore une fois, c'est juste un tout distinct système d'exploitation exécutant au sein de quel que soit le système d'exploitation que vous sont en cours d'exécution sur votre ordinateur portable. Et les principales choses que vous être à l'aide sont gedit. Donc, j'espère que cela a déjà devenir un site familier. Le terminal. Et vous pouvez également exécuter Chrome intérieur de l'appareil. Il ya eu un couple de personnes qui ont signalé Internet fonctionne pas dans l'appareil. Et certains d'entre eux ont simplement supposé qu'il n'est pas censé être Internet dans l'appareil. Mais oui, il est censé être Internet. Je vais le dire en ce moment, mais il n'a pas vraiment dire quoi que ce soit. Si l'Internet ne fonctionne pas, c'est ce que vous avez tendance à avoir besoin à exécuter pour le fixer. Si vous rencontrez des problèmes d'Internet, ne sont pas rappelez-vous, il suffit de le mettre sur Discutez, et nous dirons, géré cela. Mais l'Internet devrait fonctionner. Donc, la seule autre chose - oui, rien le reste est vraiment pertinent. Mais je voulais juste souligner que - voir dans ce coin en bas à droite. Donc, chacun de vos appareils électroménagers devrait disposer d'une adresse IP. Et plus tard dans le semestre, cette adresse IP adresse deviendra plus pertinent quand vous travaillez sur le web p-ensemble, parce vous serez en mesure d'accéder à la site sur lequel vous travaillez à partir de votre Chrome local en utilisant cette adresse IP. Mais ce que je tiens à utiliser l'adresse IP pour - et vous n'avez pas à faire cela, je je veux juste de le souligner - est ici. Donc, c'est une fenêtre de terminal sur mon Mac, ce n'est pas dans l' Appareil à tous. Et vous pouvez voir ce que cette commande fait. Mais je vais SSH directement à mon appareil. Je ne sais pas ce que l'IP est. JOSEPH: 168 - 168.224.1.0. ROB: Donc, une fois que je suis fait avec cela, vous connecter Maintenant, au fond, elle est identique à une fenêtre de terminal dans mon appareil. Donc je suis assez jamais travaillé à partir de l'appareil lui-même. Je viens de l'avoir toujours en cours d'exécution dans le fond minimisé et SSHed dedans. Le problème avec cela est que vous n'allez pas pour être en mesure d'utiliser gedit facilement directement à partir de ce produit. Mais si vous voulez être un vraiment cool hacker, alors vous devriez vous habituer à un ligne de commande éditeur de texte de toute façon. Donc, Vim et Emacs et Nano, tous ces existe différentes alternatives. Nano a tendance à être le plus facile. Et je pense qu'il n'a pas la coloration syntaxique. Oh, non, ce n'est totalement. Ainsi, vous pouvez utiliser Nano, parce que l'on est assez facile. Vous voyez toutes ces commandes en bas. Ce petit symbole de carotte. Si vous n'avez pas vu avant, vous aurez probablement voir beaucoup maintenant. Cela signifie généralement la carotte de contrôle, comme le bas à gauche de votre clavier caractère de contrôle. Donc, ici, il me dit ici - oh, ce n'est pas coupée si je agrandir Donc contrôle, X est de savoir comment Je vais sortir. Et il me dit que je peux frapper Y pour Oui, pour l'économie, N pour Non C'est donc Nano. Vim et Emacs ont tendance à être un peu plus compliqué et écrasante. Mais vous pouvez vous habituer à elle, et alors vous allez adorer. Alors voilà. JOSEPH: Pas besoin de le faire. ROB: Ouais. Vous êtes libre d'utiliser gedit pour la reste du semestre. Ainsi toutes les questions liées appareil-? Ou avez-vous des idées sur quoi d'autre doit être parlé à propos de l'appareil? Oui. INTERLOCUTEUR 1: Lorsque vous SSHed dans votre chose, était le Crimson de mot de passe? ROB: Ouais. Le mot de passe pour à peu près tout dans l'appareil va être Crimson. ENCEINTE 2: Installation comme un vrai IDE sur l'appareil, ça va marcher? ROB: J'imagine Eclipse a un La version de Fedora, dans ce cas, oui, vous pouvez le faire. Ce n'est probablement pas vraiment la peine. ENCEINTE 2: OK. Donc, il est probablement plus facile si je voulais utiliser Eclipse, il suffit d'utiliser le natif et puis télécharger à - ROB: Oh, qui est aussi probablement plus facile. Mais vous pouvez le faire fonctionner intérieur de l'appareil. JOSEPH: Et pour la caméra, la question était, pouvez vous installez un autre IDE à l'intérieur de l'appareil? ROB: Eclipse étant une exemple d'un IDE. D'autres questions d'appareils? Très bien. Donc, nous allons maintenant passer à la ligne de commande choses associées à l'interface, si CLI. Et encore, je vais juste travailler dans ici, car elle est identique à travailler dans une fenêtre de terminal intérieur de l'appareil. Comment cette police de regard? Est-ce assez grand? Très bien. Donc, il ya beaucoup de commandes vous devriez obtenir assez utilisé pour tout au long du semestre. Le gros deux pour la navigation sont ls, liste les fichiers de ce répertoire, et cd, donc changer de répertoire. Donc, je peux changer de bureau, puis un motif très fréquent est cd pour un Annuaire et immédiatement ls ce qui est dans le répertoire. Les gens parfois ne se rendent pas que l'achèvement Tab est une chose. Donc, comme cd, vh, puis j'ai frappé Tab. Je n'ai presque jamais taper la chose entière. Et puis si je continue à frapper Tab encore une fois, ça va automatiquement commencer à lister pour moi. Je ne peux donc cd vhosts, hôte local. Et c'est juste aller à - au cas où vous n'avez pas entendu le terme avant, le répertoire est juste un autre mot pour le dossier. Alors maintenant, si vous voyez - nous allons faire que vers le haut. Alors maintenant, si vous voyez entre parenthèses, vous voir le tilde peu, slash, serveur virtuel, slash, hôte local. Ainsi, le tilde, qui fait référence à mon répertoire. C'est un répertoire que vous êtes lorsque vous SSH po C'est le répertoire que vous êtes quand vous ouvrez un terminal. C'est là que vous commencez. Et si je suis à l'intérieur de mon répertoire, et je suis à l'intérieur de l'hôte virtuel répertoire à l'intérieur de mon répertoire. Et puis, je suis à l'intérieur de la section locale accueillir répertoire à l'intérieur de cela. Alors d'autres choses utiles avec cd - ou bien, en général, de sorte dot toujours fait référence au répertoire courant. Cd, point est une commande assez inutile. Mais les choses changent à l' répertoire courant. A un plus utile en termes de cd est point, point, qui est juste remonter d'un répertoire. Et notez que ces - Je veux dire alias, mais ceux-ci symboles, point, et point, point, ceux qui travaillent pour à peu près n'importe quelle commande vous êtes allez penser de la course. Cd Donc, comme c'est probablement le cas, vous serez en utilisant le plus, mais ceux-ci ne sont pas choses qui ne cd comprend. C'est à peu près quelque chose de tout votre ligne de commande comprend. Un grand nombre de programmes comprendre point et point, dot. Ainsi, les autres très utiles - cd, tableau de bord. Alors qui va me conduire à la dernier répertoire que j'étais po Alors parfois je vais faire quelque chose comme: oh, je travaille ici. Et je vois une erreur de quelque chose, et Je vais étudier en allant à un répertoire aléatoire quelque part. Et je ne sais pas si ça va permettez-moi de là. Il le fera. Alors, je fais ce que je veux dans ce répertoire. Blah, blah, blah, blah, blah. Et je me suis dit, bon, je veux pour retourner à l'endroit où je me trouvais. cd, tableau de bord, et il me ramène tout droit. Donc, je vais jeter un sort de ceux-ci à vous aujourd'hui. Je ne m'attends pas à mémoriser chacun d'eux. C'est une sorte de juste savoir qu'ils existent. Et puis plus tard, quand vous êtes comme, hmm, je veux revenir à la répertoire que j'étais juste à, oh, attendez, quelque chose comme ce qui existe. Vous n'avez pas à vous suffit de taper dans tout le répertoire nouveau. JOSEPH: et vous finirez juste les utiliser encore et encore, et il deviendra la mémoire musculaire. ROB: Ouais. Alors, comment je l'ai dit avant, que tilde est votre répertoire home. Je ne peux donc cd, tilde. Mais je n'ai même pas à faire que si je - Je vais revenir au répertoire si ce n'est pas un exemple inutile. Mais si je fais juste cd, c'est aussi le même que, aller à mon répertoire. Je fais de commande, K. JOSEPH: Vous pouvez également taper clair, le mot, et il faut l'effacer. ROB: Et je pense aussi de contrôle, L le fait aussi. Donc beaucoup de façons différentes. Je pense qu'il ya quelques différences où clair et de contrôle, L sera juste vraiment pousser vers le haut et Je ne peux toujours revenir en arrière. Commande, K littéralement détruit tout, et vous ne peut pas revenir en arrière vers le haut. À tout le moins, c'est comment cela fonctionne dans ITERM2. Je ne sais pas combien d'autres choses - oh. Avec l'exécution de ssh, donc si vous êtes sur Windows, vous allez avoir à télécharger PuTTY afin de SSH depuis Windows ne pas avoir comme un outil intégré dans SSH. De Mac, il vous suffit de SSH directement à partir d'une fenêtre de terminal. OK. Questions? Avec ls, donc quelque chose de s'habituer à avec la plupart de ces commandes est - bien, je vais juste faire un. Ls, tableau de bord, l. Donc, tableau de bord, l est ce que nous allons appeler un drapeau pour ls. Et beaucoup de ces commandes les drapeaux que vous pouvez passer pour eux. Donc dans ce cas, tableau de bord, l est un drapeau qui lui dit de me donner un plein liste de toutes les informations de ces fichiers. Ainsi, nous voyons ici que le bureau était modifié le 30 Juillet à 12h54. Téléchargements été modifié de 6 Septembre. Il s'agit de la taille actuelle et octets de ces répertoires. Vous n'avez pas à comprendre tout cela. Ce truc sur la gauche, ces drwx de, qui deviendra beaucoup plus pertinente plus tard, lorsque vous avez à traiter - qui a à voir avec qui dispose des autorisations regarder ces fichiers. Et si vous n'étiez pas le seul utilisateur sur cet ordinateur, vous serait en mesure de par exemple, OK, je dois être le seul le droit de consulter ce fichier ou je suis va permettre à chacun à consulter ce fichier. Donc quelqu'un d'autre sur mon ordinateur peut consulter ce fichier. Je ne sais même pas ce que cela - qu'est-ce que cela fait? JOSEPH: Je ne suis pas sûr, en fait. ROB: Aucune idée. JOSEPH: Mais si vous ne connaissez pas, il est une commande utile que vous pouvez utiliser pour vous dire ce que signifie la sortie. Et si vous tapez dans l'homme avant la commande - si M-A-N. ROB: Man. Ainsi, l'homme est un autre cela est très utile. Et l'homme, cl. Ainsi, les pages de manuel, ils ont à la fois commandes que vous allez utiliser à la ligne de commande, et ils ont aussi fonctions qui seront pertinents avec C. Ainsi, vous pouvez l'homme - et j'ai ignoré 3. Mais man 3 printf va apporter jusqu'à la version C de printf. Mais si je fais juste man printf, c'est va faire apparaître la commande printf ce qui se passe à la ligne de commande. Ainsi l'homme, cl. Les pages peuvent être assez écrasante. Ici, cependant, vous verrez cette annonce de l'ensemble de ces drapeaux qui ls comprend. Donc, si nous allons à se lancer, l, et - Je vais jeter ce à vous. Mais afin de chercher, vous voulez d'abord frappé la question marque ou un bouton de barre oblique. Donc slash. Et puis je peux chercher pour ce que je veux. Donc, je vais réduire pour tableau de bord, l. Et il était là. Il faut donc utiliser un format de liste longue. Cela n'aide pas me comprendre ce cette colonne particulière signifiait, mais je assumer quelque part ici cela expliquerait cela. Il faut donc utiliser les pages de manuel pour toute commande que vous ne comprenez pas immédiatement. Je suis sûr que vous pouvez même homme, l'homme. Une interface pour la ligne manuels de référence. Oh, un dernier qui est peut-être légèrement est LS pertinentes, tableau de bord, une. Donc remarquer si je fais ls, Je reçois ces cinq dossiers. Si je fais ls, tableau de bord, un, je obtenir beaucoup plus de fichiers. Donc, la chose de commun entre tous ces nouveaux fichiers est le point à l'avance. Ainsi, la convention est que le fichier que commence par un point est caché. Donc, vous ne voulez pas voir ce fichier, vous ne veulent pas avoir jouer avec votre inscription dans l'annuaire. C'est seulement quand vous demandez explicitement, tout droit, ls, tableau de bord, un, me montrer. L'un représente tous les fichiers, y compris celles qui sont cachées. Ainsi, certaines autres commandes. Oh, des questions à ce point? Oui. ENCEINTE 3: Quand vous faites ls, un, ce qui est le point, point? ROB: Oh. Donc, c'est ce que je parlais. C'est la même chose où Je peux certainement cd, point, point. Ainsi, techniquement, des points et point, point sont fichiers qui existent dans chaque simple répertoire où le fichier de point de référence dans le répertoire courant. Donc, si je cd, point, je vais pour rester dans le répertoire. Et point, point se réfère toujours à la précédente répertoire d'un niveau. Donc, si je vais dans les journaux et ls, tableau de bord, al, Je verrai point, point. cd à point, point m'amène au répertoire précédent. Ouais. OK. Donc, une autre très importante commande rm. C'est ce que nous allons à utiliser pour supprimer. Et permettez-moi de faire une autre réalité première commande. Donc mkdir. Mkdir est de savoir comment vous pouvez créer des répertoires. Et je vais créer un répertoire temporaire et aller dans ce répertoire temporaire. Et comme prévu, elle est vide. Mais si ls I, tableau de bord, un, j'ai encore point et point, point, car point fait référence à le répertoire courant. Et point, point fait référence à la répertoire précédent. Et ceux existera toujours, peu importe le répertoire que vous êtes Et c'est un fait inutile commande, mais tactile. Je suis juste l'utiliser, parce que c'est un moyen facile de créer des fichiers. Donc toucher un, appuyez sur b, c est juste toucher va créer trois fichiers appelés a, b, et c qui sont complètement vide. Ainsi, le point de me créer ceux de la la première place est juste pour que rm est comment nous pouvons les retirer. Donc, rm, un. Il va me demander, retirez fichier régulier vide un? Et puis je vais dire oui. Donc, si je sais pour sûr que je veux effacer ce fichier sans avoir à être invité, retirez régulière fichier vide?, alors rm, tableau de bord, f sera la drapeau qui dit, forcer le supprimer sans même ce qui m'a incité, oh, vous êtes sûr que vous voulez supprimer le fichier? Oui, j'en suis sûr. Donc, rm, tableau de bord, FB juste le faire sans demander. Faisons donc un peu plus de répertoires. mkdir, tmp2, cd, tmp2, toucher un, touche b. OK. Alors maintenant, je veux supprimer tmp2 comme un répertoire. Tmp2 Donc rm. Vous ne pouvez pas supprimer tmp2, c'est un répertoire. Ainsi, le problème ici est que rm ne travailler immédiatement sur les répertoires. Il est seulement destiné à des fichiers comme fichiers non-annuaire. Et si ce que nous pouvons faire voici rm, tableau de bord, r. Cela signifie de manière récursive, ce qui pourrait encore rien pas signifier pour vous. Mais quand vous arrivez à la récursivité, il va dire plus. Donc, rm, tableau de bord, r, tmp2 va aller récursivement dans ce répertoire. Alors descendre dans le répertoire tmp2? Oui, allons-dedans. Voulons-nous d'enlever tmp2 / a? Oui. Voulons-nous d'enlever tmp2 / b? Oui. Maintenant que nous voulons pour supprimer le répertoire tmp2? Oui. Et maintenant le répertoire et tout à l'intérieur de celui-ci a été éliminée. Il est techniquement une commande rmdir que vous pouvez utiliser pour supprimer répertoires, mais il ne fonctionne que sur les répertoires vides de toute façon. Et de voir que, disons simplement refaire mkdir, tmp2. Tmp2, toucher un. OK. Donc, si je tente de supprimer dirtmp2, ça va dire, le répertoire n'est pas vide. Donc je suis assez n'utilise jamais le supprimer commande dir de toute façon, parce que rm, tableau de bord, r va travailler sur les répertoires vides et les répertoires non-vides. Et aussi, si je ne veux pas avoir à passer par tout le processus de descendant dans le répertoire et enlever chaque fichier, rm, tableau de bord, rf, tmp2. Et maintenant il est parti. Quelque chose d'être prudent est d'environ rm, tableau de bord, rf. Et il me fait peur même à taper, parce que si j'ai accidentellement appuyez sur Entrée ou quelque chose. Donc, rm, tableau de bord, rf, tilde serait, sans ce qui m'a incité, le f ne demande pas moi, il sera automatiquement supprimer mon répertoire entier et tout en elle. Alors vous pouvez penser que c'est une chose stupide à faire. Et bien, il est. Mais il peut arriver très facilement par accident si, par exemple, je voulais enlever mon slash, répertoire de serveur virtuel. Et juste au typage rapide, J'ai accidentellement fais. Ce sera effacer de façon récursive la fois mon Accueil annuaire et le répertoire de serveur virtuel dans ce répertoire particulier qui vient arrive de ne pas exister en ce moment. Mais ce serait encore retirer mon répertoire entier. Au moins de ne pas avoir une f, il me demandera en premier. Et je serais comme, oh, non, je ne veulent pas le faire. Mais les gens, barre oblique, y compris me tendance à entrer dans le habitude de toujours rf-ing. Même les fichiers réguliers que je ne peux RM, c, j'ai tendance à juste rm, tableau de bord, rf, c. Juste être prudent lorsque vous êtes rf-ing. SPEAKER 4: Qu'est-ce que C faire? ROB: c est que je parle de ce fichier C dans ce répertoire, que rm, c. JOSEPH: Et plus dangereusement, si vous utilisez une étoile, il se réfère à tout le répertoire. Donc ce que je généralement tendance à faire est je vais aller dans un répertoire et je veux supprimer tous les fichiers dedans. Donc, rm, tableau de bord, rf, étoiles. ROB: Ouais. Rm, tableau de bord, rf, étoiles. JOSEPH: Et si vous ne faites pas attention ce répertoire que vous êtes dans - Je n'étais pas en température, mais j'étais accidentellement dans mon répertoire, alors je vais enlever tout dans mon répertoire. Et j'ai effectivement fait ça avant, et Je pense que vous avez fait avant ou Jay a fait ça avant. ROB: J'ai accidentellement supprimé - donc ignorer cette commande un peu. JOSEPH: Pas drôle. ROB: Donc, dans le répertoire de barre bin est un tas de fichiers binaires où il y être les familiers comme bruit. Eh bien, clang et essentiellement tous ces choses que je suis en cours d'exécution à la commande ligne sont dans ce répertoire slash bin. JOSEPH: Comme ls est ici. ROB: Donc, point, barre oblique, ls seraient la liste de ce répertoire. JOSEPH: Rm est également dans ce répertoire. ROB: J'ai accidentellement rm, rf-ed bin, qui a supprimé toute commande je pouvais peut-être voulez jamais. Lequel donc je viens de réinstaller un nouvel appareil à ce stade. JOSEPH: Soyez donc très prudent lorsque vous vous utilisez cette commande. PUBLIC: [inaudible]? ROB: Oui. C'est aussi une mauvaise habitude à prendre. Si vous remarquez, je suis maintenant - bien, vous pouvez ne pas remarquer, mais mon zoom-in peut-être possible. Je suis donc maintenant root @ appareil. Donc jharvard est l'utilisateur que nous voulons vous utilisez toujours. Root est l'utilisateur qui a l'autorisation de faire n'importe quoi. Donc remarquer quand je suis jharvard, si j'essaie de cd - ce qui est un répertoire? Oh, la racine est un bon exemple. Donc, cd, racine. Permission denied. Parce que si on regarde cette liste - et encore, vous n'avez pas à comprendre tout cela. Mais ces trois tirets disent qui ne laissent pas d'autre utilisateur dans ce répertoire. Et le répertoire se trouve être détenue par l'utilisateur root. Donc, le fait que je suis jharvard et pas celui qui n'est pas racine est autorisé dans ce répertoire, cela signifie que je suis va se permission denied quand je essayer de cd dedans. Alors, quand je suis racine, j'ai l'autorisation à faire n'importe quoi, y compris supprimer des fichiers essentiels de l'appareil et détruire la chose entière. Donc, c'est une mauvaise habitude à prendre se balader autour de votre système d'exploitation en tant que root. Je le fais quand même. Questions? Et je sors racine, reste comme jharvard. OK. Commandes plus pertinents. Pour en revenir à notre température, la commande mv signifie mouvement. Vous pouvez déplacer un. Maintenant, nous voulons appeler b, alors maintenant il s'appelle b. Ou peut-être que nous voulons aller b d'un répertoire. Alors maintenant vide de ce répertoire. Je vais revenir à mon répertoire personnel, et on voit que b est ici, parce que l' Accueil annuaire était un répertoire à partir le répertoire b avait été po Il ya aussi cp. Alors cp est la copie de l'article superbe, point, le texte. Je peux l'appeler s, point, texte. Maintenant, nous avons à la fois la section superbe, point, le texte, et s, point, texte. Cela fonctionne également sur les répertoires. Je RF-ed un seul fichier. Alors cp - bien, d'abord nous allons essayer cp, tmp, tmp2. Donc, en omettant répertoire tmp. , Le comportement par défaut si semblable à rm est de ne pas travailler sur des répertoires. Et encore une fois, semblable à rm, la valeur par défaut comportement - et bien, le faire fonctionner avec des répertoires est un tableau de r loin. Donc copier de manière récursive la température répertoire dans tmp2. Et maintenant nous avons à la fois tmp et tmp2, et ce n'est pas que utile car tmp était vide en premier lieu. Tmp2. Maintenant, nous allons copier tmp dans tmp2. Et nous voyons que tmp2 a également le fichier un, parce que le répertoire et tout à l'intérieur de ladite répertoire a été copié. Et cela peut être assez utile Si, par exemple vous travaillez sur un ensemble de problèmes - ou en fait, des ensembles de problèmes ultérieurs sont encore plus important, car il sera tout un tas des fichiers et des choses. Mais vous voulez juste, pour une fraction de deuxième, vous êtes comme, bon, je suis vais essayer quelque chose de différent. Permettez-moi de copier toute ma pset1 répertoire dans la sauvegarde de pset1 de sorte que si Je finis par vissage les choses, je ne peux retourner dans mon répertoire de sauvegarde. Il existe des façons plus appropriées de versioning sauvegarde de votre code, mais ce qui est toujours un moyen rapide de faire juste que vous avez une copie de quelque chose que vous êtes sur le point de modifier. Donc écho est également une commande ponctuelle que type de niaisement sera simplement imprimer à l' ligne de commande exactement ce que vous vouliez faire l'écho. Donc écho salut. Nous allons imprimer salut. Echo Bonjour tout le monde. Nous imprimons Bonjour tout le monde. Cela vient en utilisation lorsque vous lancer des commandes de combinaison. Et encore une fois, ne vous attendez pas à tout comprendre encore, mais il est quelque chose à voir. Et puis si vous googler pour exemples ou vous vous rendez compte que vous voulez faire quelque chose, il peut être utile. Donc, nous allons, par exemple, donc ls, tableau de bord, l. Donc ici, je vois la sortie de ls, tableau de bord, l. Et je dis, OK, je veux stocker que dans un fichier. Tous de cette sortie ici, je veux à mettre dans un fichier séparé. Donc ce petit symbole supérieur c'est ce que nous allons appeler. Nous rediriger l' sortie dans un fichier. Appelons le fichier bla, parce que c'est ce que je tendance à toujours appeler. Alors maintenant, nous voir, nous avons un déposer bla ici. Et si je l'ouvre, je vais voir c'est exactement la sortie de la commande que j'ai juste couru. Et de même, vous pouvez - si cela était sortie dans un fichier, ce est d'obtenir l'entrée d'un fichier. Qu'est-ce qu'une commande que je - JOSEPH: Je pense que vous pouvez utiliser plus ou moins, sans doute. ROB: Mais que diriez-vous un peu moins fade? Je ne sais pas. Si vous venez dans ce scénario, comme il ya psets que c'est utile pour. JOSEPH: Vous pouvez diriger en écho. Tuyau le fichier en écho à voir. ROB: C'est tuyau. JOSEPH: Désolé. ROB: Très bien. Donc, c'est la sortie dans un fichier. C'est rendre le texte à partir du fichier et le remettre au programme. Et vous verrez également ce type. Donc, ce genre est de faire deux à la fois. Et en fait, je vais vous présenter deux nouveaux commandes juste de faire usage de celui-ci. L'histoire est une commande très pratique qui est juste va imprimer une liste de tout ce que j'ai jamais couru une ligne de commande. Nous voyons donc ici tout ce que j'ai été en cours d'exécution tout ce temps. Beaucoup de ls de. Et une autre commande utile est que grep son but est à la recherche sur texte à la recherche de modèles, ainsi, à la recherche de ce que vous il veut chercher. Et si une utilisation pratique ici est, disons nous voulons saisir l'histoire. Et je tiens à regarder pour les commandes où I - Qu'est-ce qu'un utiles les uns aux chercher? JOSEPH: [inaudible]? ROB: Ou disons simplement regarder pour tous touche, pour une raison quelconque. Donc, c'est ce qu'il va ressembler. Et vous n'avez pas complètement comprendre. Mais l'idée est là, l'histoire donne la même sortie, il fait ici où il est l'impression de l'ensemble du l'histoire de tout ce que j'ai jamais couru. Nous sommes alors passant que - alors au lieu de l'imprimer à l'écran, nous voulons transmettre cela à la grep, qui est à la recherche d' toutes les instances du mot tactile. Et donc l'utilisation de cette combinaison de la l'histoire des outils et grep, je peux voir, OK, voici toutes les commandes que j'ai jamais exécuté, et voici un peu une commune. Nous sommes au fond. Et c'est aussi me donner la commande J'ai juste couru qui a eu le mot toucher en elle. Mais la conduite est une chose très utile pour la combinaison de plusieurs programmes. Et en fait, c'est un raccourci pour let moi l'histoire sortie de déposer bla, et permettez-moi de grep en utilisant le fichier bla que ce que je veux regarder par-dessus. Ainsi, le tuyau est juste un raccourci de ces deux commandes. Oui. SPEAKER 4: [inaudible]? ROB: Oui. Qu'est-ce que - Oh. Testons. Donc, chat, chien, poisson. Je tiens donc à grep. Tableau de bord, r, encore une fois, va être récursive, donc je veux descendre en bas tous les répertoires. Je veux grep récursivement pour tous - et laissez-moi temporairement ce de la route. M'ignorer. OK. Je tiens donc à grep temporairement pour toutes les instances du mot poisson. Et alors voici ce que je fais est grepper récursive pour le mot poisson. Et étoiles signifie plus de tous ces fichiers de ce répertoire. Et il m'a donné une autorisation refusée, car il n'est pas autorisé à lire que fichier particulier. Mais il a trouvé des poissons dans le fichier, test. Je pourrais aussi dire, précisément, je ne vouloir regarder dans le fichier blah, dans auquel cas il ne trouvera rien. Je veux seulement regarder dans le fichier, test. Il trouvera les poissons. C'est une commande très utile à savoir en général. Il existe des alternatives à grep qui sont censés être plus programmeur amical, mais j'ai tendance de tomber encore de retour sur grep. Questions? OK. Y at-il d'autres commandes? Oh. Juste une seule fois l'un que j'ai toujours trouver pour être amusant est cal. Donc remarquer quand je suis dans cette belle mode plein écran, je n'ai pas de haut comme barre d'outils ou quoi que ce soit. Donc cal me donne juste un peu agréable calendrier qui vous convient maintenant coupé, je suppose. Mais jolie petite commande. JOSEPH: Il est [inaudible]. D'autres commandes que vous pourriez avoir vu comprennent clang et crée. Nous allons passer en revue les dans plus en détail plus tard. Mais si vous avez travaillé sur le PSET, vous devriez être familiariser avec celles-ci. ROB: Très bien. Questions sur les choses de la ligne de commande? Très bien. Passons donc sur une certaine Trucs C-liés. Variables mathématiques. OK. Ainsi, tout comme nous avions mathématiques dans Scratch, vous pouvez également utiliser les mathématiques dans C. Avant d'en arriver là entièrement, donc variables. Rappelez-vous que chaque fois que vous déclarez une variables comme int x ou float y, vous avoir à donner de type avant le nom de la variable. Donc types que nous avons vu jusqu'à présent sont int, float, double, long long, que je ne savons pas vraiment si nous avons vu que jusqu'à présent. Il ya quelques autres. Nous avons vu l'omble. Il ya peu, qui est, comme c'est le opposé de long long où il est inférieure à un nombre entier. Nous avons également vu chaîne. Alors, quelle est la particularité de chaîne? Pourquoi devrais-je dire que c'est pas tout à fait comme int? SPEAKER 4: Il n'existe pas vraiment. ROB: Ouais. Donc, la seule raison pour laquelle nous avons chaîne C'est parce que quand vous faites hachage, inclure cs50.h. Et nous voyons des exemples de cela plus tard - oh, que ne gère pas très bien - où cs50.h fait quelque chose le long des lignes de caractères def, char étoile, chaîne. Et c'est peu dire que nous n'avons pas encore savoir ce que une star de char est encore. Mais cela veut dire que nous voulons chaîne. Tout endroit où vous avez utilisé chaîne, vous aurait pu être que char étoiles, qui est en fait un type qui existe dans le langage C. Mais nous y reviendrons. Oh, et il va tout de suite. Neat. Donc même chose avec bool où le vrai et le faux. Ce n'est pas vraiment un type intégré dans C. Au lieu de cela, c'est juste, que cela a la valeur zéro? Ensuite, nous allons considérer qu'il est faux. Est-ce que cela a de la valeur - bien, cela at-il une La valeur non nulle? Ensuite, nous considérons que c'est vrai. Donc, on est vrai, deux c'est vrai, rien non nulle est vraie. Donc, ce sont ceux-là. Questions sur la déclaration de variables et types de variables et tout ce qui? Ouais. SPEAKER 4: Pendant longtemps, longtemps, dans le livre, il a dit qu'il fallait être long long int. Mais fonctionnera tout long long? ROB: Donc ces modificateurs de type. Alors int x. Donc, nous pouvons dire aussi unsigned int x. Nous pouvons dire short int x. Nous pouvons dire long long int x. Mais à peu près tout de ces choses que je vient d'être dit, unsigned int, short int, long long int, vous pouvez vous débarrasser de l'int et il va juste prendre que vous vouliez dire int. X Donc non signés, ce qui signifie tout simplement - vous savez comment normalement avec un int, vous pouvez dire x est égal à 3 négative? Avec un unsigned int, vous ne pouvez pas. JOSEPH: Et encore une fois, pour l'appareil photo, le question était, quelle est la différence entre long long int et juste le temps de temps? ROB: Ouais. Je vais donc presque jamais écrire long long int. Je vais écrire long long. JOSEPH: Des questions? ROB: OK. Si bête petit rappel de ce que c'est la façon dont nous déclarons une variable et initialise la variable et déclarer une autre et initialiser la variable tout en une seule étape. Ainsi, la déclaration de la variable et la variable d'initialisation n'ont pas pour mais peut être sur la même ligne. Nous avons donc les opérateurs mathématiques standard que vous êtes habitué à - plus, moins, diviser, fois. Il ya aussi modulo, que nous verrons plus. Il n'y a pas, au moins dans C, une alimentation intégrée exponentiation opérateur du curseur. Eh bien, il est un opérateur de caret, mais ce n'est pas courant. JOSEPH: Mais ce n'est pas exponentiation, Oui. ROB: Ne pas utiliser le curseur à supposer que cela signifie comme carré ou autre. Donc certaines choses à garder à l' l'esprit à propos de division. Je me tiendrai. C'est ce qu'a déclaré initialize réponse. Nous disons donc flotteur réponse est égal à 1 divisé par 10. Imprimer réponse à deux décimales. Et c'est le genre de chose que je serait l'homme printf pour comprendre que ce que le diable ne%, point, 2f veut dire? Et cela signifie juste, bien, ignorant l'0,2. Et%, f est ce que nous utilisons pour imprimer à flotter. Le 0,2 n'est pas peu dire, l'impression que flotter à deux décimales. Donc, ce programme a un bug, et vous pourriez ont vu cela dans certains Bien sûr CS avant. Mais qu'est-ce qui bug? SPEAKER 5: zéro. ROB: Ouais. Donc, quand nous disons, la réponse est égale à 1 divisé par 10, nous voulons que le répondre à 0,1. Mais une divisée par 10, la figure 1 est une nombre entier, la figure 10 est un nombre entier. Et quand nous faisons un entier divisé par un nombre entier, nous allons revenir un nombre entier. Donc 1 divisé par 10 est de 0,1. Depuis il a besoin de nous donner un nombre entier, il va juste jeter cette décimale et dire que la réponse est 0. Et quand nous imprimons répondre ici, il va imprimer 0,00. JOSEPH: Et comme une note, il fait jette ce qui est après le virgule. Donc, si vous aviez la place 6 divisé par 10, vous pourriez penser que cela vous donnerait 0,6 puis vous arrondir à 1. Mais en réalité, ce qui se passe quand il tapez tâches qu'il est qu'il tombe ce qui est après la virgule. Donc, 0,6 ne devient 0. ROB: Ouais. Et nous dirons tronquée pour cela. Donc, chaque fois que vous lancez un int, la décimale est tronquée. Ainsi, le correctif pour que - il ya en fait deux. Et je vais faire ensuite, parce que celui-ci est une solution beaucoup plus facile. Donc, un correctif est d'utiliser des flotteurs dans la division. Et vraiment, il suffit de faire d'eux un flotteur. Mais c'est juste un peu plus clair de faire tous les deux flotteurs. Donc 1,0 divisé par 10,0 est la division de deux flotteurs. Donc, la réponse va finir par être un flotteur, et si vous voulez imprimer correctement 0.10 ici. Quelque chose qui ne fonctionne pas si bien à ce sujet est, bien, sûr, il était facile suffisant pour convertir une à une en faisant flotter 1.0. Mais si à la place, nous avons eu deux entiers comme int x est égal à 1 et int y est égal à 10, puis nous voulions à ne x divisé par y? Il n'est donc pas facile de simplement faire x.0 ou quelque chose. Donc, la solution à cette question est prépondérante. Donc casting est une façon pour convertir C d'un type de variable à l'autre. Donc ici, 1 est un nombre entier. Et en mettant ce flotteur devant il, nous jette 1 à un flotteur. Et alors ce sera convertir la 1 à 1,0. Et ce sera de convertir 10 à l'un 10.0. Et puis les choses se comportent de façon similaire à la version précédente, nous n'avons vu que où, comme on s'y attendait, on obtient 0,10 et il va imprimer que. Et nous pouvons le faire avec variables, aussi. Donc nous pouvons dire, float x divisé par float y. JOSEPH: Des questions? ROB: Ainsi, tout comme en mathématiques régulière, nous avons la priorité des opérateurs. Ainsi, dans la classe de mathématiques, vous avez plus de chances pour appeler l'ordre des opérations. Ici, le terme officiel est priorité de l'opérateur. Mais la priorité de l'opérateur, ou plus opérateurs, est comme vous le souhaitez. Ainsi, tout comme en mathématiques, en 2 fois 10 est va être regroupés plus étroitement que ce 10 divisé par 2, puis 2. L'ordre des opérations, il fera 2 fois 10, 10 divisé par 2, puis ça va faire 20 + 5 + 2. Il est donc comme prévu, et vous pouvez utiliser parenthèses pour grouper des expressions. Vous ne pouvez pas utiliser des crochets à des expressions de groupe. Ouais? SPEAKER 5: Pourriez-vous fait juste revenir une seconde? Pouvez-vous jeter un int à une chaîne? ROB: Donc, en C, vous pouvez jeter quoi que ce soit vous voulez ce que vous voulez. Cela ne signifie pas qu'il est une bonne chose à faire. Ainsi, lorsque vous lancez un int une chaîne, ce qui signifie - et nous allons entrer dans ce beaucoup plus approfondie - JOSEPH: Beaucoup plus tard. ROB: Je ne veux pas en dire beaucoup plus tard, alors j'ai essayé de changer ma phrase. Nous allons entrer dans beaucoup plus approfondie plus tard où vraiment quand vous avez un variable chaîne - si une chaîne peut être arbitrairement longtemps, non? Et nous avons dit que un int est quatre octets et longue est la durée de huit octets et un flotteur est de quatre octets. Donc une chaîne, tout comme un int, ne dispose que d' un certain nombre d'octets à elle. Et ce sera quatre octets. Mais une chaîne peut être assez arbitrairement longue, non? Déjà si Bonjour tout le monde, si ce n'est 10 caractères ou que ce soit, c'est déjà va être sur les 4 octets Je peux entrer dans une chaîne. Et comment les chaînes fonctionnent vraiment, c'est que ils sont où en mémoire cette chaîne est conservé. Et ici, quand je dis chaîne x Bonjour tout le monde est égal, à l'intérieur de x est juste dire, oh, bonjour le monde est stocké à cet endroit particulier dans la mémoire. Donc, si nous essayons de jeter un entier à un chaîne, puis nous essayons d'interpréter une partie aléatoire de la mémoire comme une chaîne. Et qui rompt presque toujours les choses. JOSEPH: Mais si cela confond vous, nous couvrirons il plus en profondeur plus tard. ROB: Ouais. C'est là que vous allez d'entrer dans les pointeurs. Et c'est une partie importante de deux semaines de ce cours. ENCEINTE 6: Est-ce que ça marche comme des objets dans d'autres langues ou pas vraiment? ROB: Donc en d'autres langues, objets seraient représentés en utilisant des pointeurs. Ce n'est pas la même chose, cependant. Des pensées? JOSEPH: Non Pas de pensées. ROB: OK. JOSEPH: Suivant. ROB: Il suffit d'aller avec ça. Très bien. Donc modulo. Tout comme nous avons plus, moins, diviser et se multiplier. Donc modulo est celui que vous pouvez ne pas avoir vu avant. Et il dit simplement, donner moi le reste de. Ainsi, 55% de 10. Le reste de faire 55 divisé 10 serait 5. Ainsi, 55% de 10 est 5. Et 3% 5 serait 3. 8% 8 sera 0. 16% 15 sera de 1. JOSEPH: Une chose à noter à cela, aussi, est-il pourrait ne pas fonctionner comme prévu si vous utilisez un nombre négatif. Donc négative de 5% 4, certaines personnes pourriez penser que c'est - Que penseriez-vous négatif 5% 4 serait? SPEAKER 5: Une. JOSEPH: Ainsi, certaines personnes disent un, certains disent négative. Mais ce qui - ROB: Je ne voudrais pas même avoir dit l'un d'entre eux. JOSEPH: Deux, désolé. Certaines personnes disent - ROB: Trois. JOSEPH: Trois? ROB: négatif - ce qui était le - négatif cinq - JOSEPH: Trois, trois, trois. Désolé. Parce que modulo, en général, lorsque vous avez vu ailleurs, cela signifie généralement retourner un nombre positif, non? ROB: Donc, quand nous disons en mathématiques, 10% de, ils ont tendance à vouloir vous donner - si nous MOD par 10, alors nous nous attendons à obtenir un nombre entre 0 et 9. Ici, ce n'est pas le cas que vous obtiendra des nombres négatifs retournés. JOSEPH: Donc négative de 5% 4 serait négative 1. ROB: Mais il est rare que vous êtes mod-ment nombres négatifs pour commencer. Passer ce. JOSEPH: Ouais. ROB: Meh. OK. Alors une dernière chose à signaler à propos de flotteurs, c'est que c'est un comportement dangereux, mais flotteurs ne sont pas une science exacte représentation. Pour en revenir à octets de nouveau, n'oubliez pas que int est toujours quatre octets et un flotteur est toujours quatre octets. Ainsi l'exemple de Lucas est très bonne. Alors, pensez à 1 divisé par 3. Donc, 0,3333333. Si je n'ai que 32 bits, comment peut- Je stocke 0,33333 exactement? Et peut-être, pour une raison quelconque, vous dites, bien, bien, disons simplement que ce particulier 1011001, nous allons Autant dire que cela devrait être 0.333333. Eh bien, vous avez seulement un nombre fini de ces bits, il est donc impossible de représenter chaque virgule flottante simple valeur donnée seulement 32 bits. Eh bien, il est impossible de représenter une valeur en virgule flottante donnée infini - bien, étant donné un nombre fini de bits. Donc, la question ici est, bien, lorsque nous avons utilisé pour imprimer à deux décimales, Nous avons pris correctement la réponse 0,10. Mais sous le capot, c'est vraiment étant stocké le plus proche possible de 0.10 que ces bits peut représenter. Est-ce sur la diapositive suivante? Ou n'est-ce pas? JOSEPH: Ouais, c'est ça. ROB: Blegh, blegh. JOSEPH: Oui, vous pouvez simplement tirer les notes un peu. ROB: Je vais juste faire un zoom dans le dernier sur ce point. Oh mon Dieu, c'est [inaudible]. Alors que nombre. C'est ce qui va être imprimé si nous courons ce programme. Et notez que ce n'est pas vraiment un gros problème si nous ne se soucier comme deux à trois décimales. Comme nous ne l'origine imprimé 0,10, et c'est pourquoi nous l'avons vu rien de mal. Mais une fois que nous commençons à entrer dans la exact, le nombre exact que c'est représentant, on voit qu'il ne peut pas représenter exactement 0,1. Et une partie du problème ici, c'est comme, bien, c'est très bien, mais, bien, en premier lieu, si nous avons essayé de faire, réponse est égale à 0,1 est égal? Est-ce que cela va revenir vrai ou faux? Et donc c'est difficile à dire. Je pense qu'il fait peut retourner true. Est-ce que le premier - Je ne sais pas. La réponse est une fois que vous commencer à traiter avec des valeurs en virgule flottante, vous avez à peu beaucoup ne devriez pas utiliser l'égalité à cause de cette imprécision. Et pour tout ce que vous savez, c'est la centième décimale que le virgule flottante n'a pas pu pour gérer correctement. Et si l'égalité sera simplement échouer même si le nombre - si vous aviez été en utilisant les chiffres exacts, les chiffres devraient ont été exactement les mêmes. C'est au cours de comme 50 calculs utilisant ces flottante valeurs de point, l'erreur peut construire et plus et plus, et les choses simplement se tromper. JOSEPH: Et il ya eu vraiment exemples célèbres de ce qui se passe. Comme les ingénieurs de la NASA ont obtenu ce mauvaises, provoquant roquettes à exploser dans l'air après qu'ils ont été lancés. Et beaucoup de questions de ce genre. Donc oui. ENCEINTE 6: Quand vous dites 0,3 f, ça tronque le reste? Ou faut-il arrondir ou vers le bas? ROB: Est-ce que printf autour d'elle? JOSEPH: Je pense tronque printf. ROB: OK. Ainsi, nous pouvons aller de même dans le sens opposé direction de celui-ci où, dans ce cas, le plus proche, il pourrait représenter 0,1 était avec ce numéro. Le plus proche, il pourrait être en mesure de représenter 0,2 est en face de l' direction, 0,199999996356 ou quelque chose. Donc, si nous sommes allés dans cette direction choses, alors printf 0,3 f reviendraient 1,99 au lieu de 2,00. JOSEPH: Et je ne suis pas tout à fait vous sur ce point. Vous pouvez écrire un petit peu programme pour vérifier cela. ROB: Bien, ce que nous sommes sûrs, c'est que si vous avez essayé de lancer ce à un int, et jetant un int va amener à tronquer la décimale, si vous essayez de jeter 1.9999999 à un int, vous obtiendrez 1. Et si vous devez généralement utiliser la fonction de tour dans la bibliothèque de mathématiques. Questions? OK. JOSEPH: Donc passer à conditions et les expressions booléennes. Donc, vous avez vu ces avant. Et en fait, permettez-moi de m'assurer que mon ordinateur est dans le bon format ici. Espace. Désolé, nous allons avoir à traiter une peu à coupure au niveau des bords. Mais oui, vous les gars ont vu ce avant dans Scratch. Donc, ce droit est ici une expression qui est utilisé dans une instruction conditionnelle. Donc répondre à plus de volonté zéro vous dire vrai ou faux. Et ceux-ci sont très importants, car ils nous permettent d'introduire logique dans notre code. Ainsi, par exemple, il s'agit d'un programme écrit en Scratch qui demande à l'utilisateur pour un nombre entier et leur dit si l'entier que l'on vous a donné était un nombre positif ou négatif. Et la conversion ici pour voir est vous imprimez d'abord la déclaration, me donner un nombre entier. Et puis vous leur demandez un entier. Et puis vous utilisez la logique conditionnelle sur ici pour vérifier si ce nombre était en fait supérieur à zéro ou non. Nous avons donc ici une expression booléenne l'intérieur d'une conditionnelle If. Y at-il des questions? Y at-il des questions à ce sujet? OK. Il n'y a donc plus que plus grand que, bien sûr. Vous pouvez construire des expressions booléennes utilisant la plupart des sortes de choses que vous songerait en mathématiques. Ainsi supérieure. Cela devrait être un moins que. Désolé. Et l'espacement. ROB: A Dieu ne plaise que vous quittez. JOSEPH: Très bien. Donc, supérieur à, inférieur à, supérieur que, ou égale à, inférieure que, ou égale à. Nous utilisons égaux doubles pour vérifier l'égalité, car seul moyen est égal à affectation, non? Oui. Et puis nous pouvons également faire des égaux et non par en utilisant le point d'exclamation, des égaux. Et ce point d'exclamation peut également être étendue de sorte que si vous voulez pour inverser toute sorte de Boolean expression, vous pouvez le faire. Donc, ce sera la valeur true que si la réponse est moins supérieure ou égale à zéro. Vous avez des questions à ce sujet? OK. Ainsi, vous pouvez également combiner ces expressions utilisant logique et et Ou logique. Donc, ce n'est que le symbole et, qui devrait être Shift, 7. Et c'est le symbole de la conduite, ce qui est pas un minuscule L. C'est une c'est juste au-dessus de votre touche Entrée. Donc, vous utilisez deux d'entre eux pour symboliser Et la logique logique Ou. Donc, cela ne fera que retourner vrai si la réponse est un, deux, trois, ou quatre. Et cela ne fera que retourner vrai si la réponse est au-delà de chaque côté. Donc ce n'est pas un, deux, trois, ou quatre. Et la façon dont vous souhaitez utiliser que, dans une expression - ROB: Ou un zéro ou un cinq. JOSEPH: zéro ou un cinq. Désolé. Oui, oui, oui. OK. Et ici maintenant, de la même façon que vous utiliserait cette expression, une plus petite côté de l'expression d'un Si conditionnelle déclaration, vous devez également utiliser la même en mettant simplement à l'intérieur de les parenthèses de l'instruction If. Donc ce printf ne tirer si la réponse est un, deux, trois, ou quatre. Toutes les questions sur la combinaison expressions? Donc, il ya une autre condition construire que nous appelons un if / else. Donc, fondamentalement, cela signifie maintenant, OK, Si quelque chose que je voulais vérifier était pas vrai, puis aller à la Else et effectuer que d'autres mesures. Donc, dans ce cas particulier, j'ai demandé l'utilisateur pour un nombre entier. Est le nombre entier plus grand que zéro? Oui? Eh bien, ils ont choisi un nombre positif. Si non, alors il doit avoir négatif ou égal à zéro. Donc, vous avez choisi un nombre négatif ou un zéro dans ce cas. Oui. Ou un zéro. Et puis nous avons également if / else, Si et Else. Donc nous permet exécuter une séquence d' les choses que si les premiers ne. Donc dans ce cas, maintenant que nous faisons le dernier que vous choisissez zéro. Donc, si ils ne ramassés positive ni un nombre négatif, alors ils doivent ont repris à zéro. Donc, il va juste en bas de la chaîne comme ceci. Ainsi, un exemple de la façon dont un Si c'est différent de - If / Else est différent de juste une séquence de Ifs. Et c'est une question commune que les gens demandent est, bien, si vous obtenez comme un 95 CS50, ce sera cette programme vous dire? SPEAKER 5: Vous avez un A. JOSEPH: Oui. Vous avez tout seul l'un de ceux de droite. Vous avez un A, vous avez obtenu un B, vous obtenu un C et un D, ​​non? Donc, tous ces composants sont évalués dans l'ordre. Ainsi, alors que la 95 est supérieur à 90, il est également supérieur à 80, il est aussi supérieur à 70, et il est également supérieur à 60. Donc, vous avez toutes ces qualités. Et je suppose que vous le feriez ne veut A. La façon de résoudre ce problème est de remplacer ceux qui Else / s «Si. Donc, dans ce scénario, il voit que 95 est supérieur à 90, puis il le fait pas évaluer le reste des états. Vous avez des questions à ce sujet? Donc, il ya une autre sorte de condition structure que nous avons ici, qui nous appeler une instruction switch. Donc, ce qui vous permet de vérifier essentiellement quelle est la valeur d'un numéro que vous mettez dans l'instruction switch est. Donc, dans ce scénario, nous commutation sur n, et nous disons, oh, si n est un, puis imprimer cette déclaration. Et puis briser, ce qui signifie sortie de l'instruction switch. Si ce n'était pas un, alors, bien, juste vérifier éventuellement l'ensemble de ces cas. Et il vérifie si c'est un ou deux ou trois, et il imprime en conséquence. Et ce que ce mot-clé par défaut ici moyen est si elles ne sont pas entrés tout de ceux, dites non valide. Alors disons que je demande n et l'utilisateur me donne quatre. Eh bien, il correspond à aucun de ces cas, il permet d'imprimer ce qui est dans le section par défaut. Oui, la question? SPEAKER 5: Pouvez-vous utiliser booléenne au lieu d'expressions un, deux, ou trois? JOSEPH: Donc la question est peut-on utiliser Expressions booléennes au lieu d'un, deux, trois et? Et en C, je vous crois ne peut pas le faire. Mais dans d'autres langues, dont vous pourriez rencontrer à la fin de l' semestre comme le JavaScript, vous pouvez. Eh bien, vous auriez à calculer première que la valeur et l'utiliser ensuite dans le déclaration basculer. Ouais? ROB: Donc, une partie de la prestation de l'interrupteur déclarations est de penser si vous l'avez fait comme un if / else, si comme si n est égal à est égal à un ou que ce soit. Else / Si n est égal à égale deux, peu importe. Else / Si n est égal à égale trois. Donc, la façon dont le programme est-il courrait serait séquentiellement aller dans cette liste et vérifier, l'un est N? Nan. Est n deux? Nan. Est n trois? Ouais. Faire. Considérant que les états de commutation, il est effectivement en mesure de compiler pour être vraiment très rapide. Et dès qu'il dit commutateur, il dit, tout droit, n est deux, je suis aller immédiatement pour aller à l'endroit où Je suis censé commencer à exécuter. Je ne vais pas vérifier d'abord, n est un, deux est le N? Il peut immédiatement commencer à faire ce qu'il est censé faire. Et à cause de cela, il ne peut pas prendre conditions booléennes. Ou bien il aurait à faire la séquentiel, comme, tout à droite, est n supérieur à zéro? C'est autre n supérieur à 10 ou autre. JOSEPH: Dans ce cas, si vous avez utilisé Si / Sinon, Si de, puis le commutateur serait fonctionner environ trois fois plus vite que le Si / Sinon, si. Nous pouvons organiser le commutateur dans cette d'une manière que nous ne brisons pas après chacun des cas. Donc dans ce cas, je vais diviser l' numéros que nous choisissons en un seul et deux n'étant pas un nombre élevé et trois étant un nombre élevé. Donc dans ce cas, si n est égal à un ou deux, il a frappé le cas et alors il sera passer à travers, parce il n'ya pas de pause. Et il finira par ici. Donc, si nous choisissons un, il fera le printf et puis casser afin qu'aucun de ceci est exécuté. Et bien sûr, si elles entrent dans trois ou quelque chose d'autre, alors il va sauter ceux qui y sont et ne pas aller, et il va exécuter à la place le ligne correspondant. Y at-il des questions à ce sujet? Oui? SPEAKER 4: Souhaitez-vous obtenir une erreur si vous eu une pause après un cas mais il ne pas avoir quelque chose pour qu'il fasse? JOSEPH: La question est donc auriez-vous une erreur si vous avez une pause après Premier cas, mais il n'y a rien à faire? Et la réponse est non. Vous n'obtiendrez pas réellement une erreur. Ouais, hmm mm. Donc, comme une sorte de petit changement ici, Je vais mettre un printf ici. Oups. Alors, que serait-ce si imprimer J'ai mis un en en entrée? Ouais. Il vous dira qu'il n'a pas pris un nombre élevé deux fois, non? Parce que ce serait frapper ce premier cas, il ne serait pas briser, et il tomberait à travers le deuxième cas. Vous avez des questions à ce sujet? ROB: Avez-vous une autre question? JOSEPH: OK, refroidir. Très bien. Donc, il ya quelque chose d'autre que nous appelons une opérateur ternaire qui est essentiellement un syntaxe alternative pour faire Si puis le reste. Et il vous permet de faire tout cela sur une seule ligne. Donc, dans ce programme particulier, Je demande à l'utilisateur de n. Et si n est supérieur à 100, je dis eux, ils ont choisi un nombre élevé. Sinon je leur dis qu'ils choisi un faible nombre. Nous pouvons donc utiliser cette syntaxe très long, chaîne, S, puis vérifiez si n est supérieur à 100 et assigner en conséquence. Mais nous pouvons faire cela beaucoup plus concise en utilisant cette syntaxe de l'opérateur ternaire ce qui implique une question marque et un colon. Donc, le point d'interrogation est essentiellement poser une question, non? ROB: Peut-être zoomer sur ce point. JOSEPH: Oui. Bon point. Donc, c'est l'opérateur ternaire. Je demande d'abord la question, n est supérieur à 100? Si c'est le cas, j'exécute la première partie avant du côlon. Si ce n'est pas, alors j'exécute l' deuxième partie après la virgule. Donc, si n est supérieur à 100, il prend de haut et met que dans la chaîne s. Si n est inférieur à 100, il reprend bas et met alors que dans la chaîne s. Donc, ça va condenser ce gros morceau vers le bas dans cette seule ligne. SPEAKER 5: Est-ce populaire? JOSEPH: Oui, il est très populaire pour les choses où l'essentiel que vous souhaitez ne une mission basée sur une sorte de condition. Et dans ce cas, nous avons essayé d'attribuer une valeur à la chaîne s. Ce n'est pas si - Je suppose que je n'ai pas vraiment préfère ne pas dans les autres cas. Mais il est particulièrement utile pour cette mission. ROB: C'est un modèle assez commun où vous avez une variable qui vous allez me dire, si quelque chose, mettre en cette variable à un valeur; d'autre, mis en cette variable à une autre valeur. Et c'est le scénario où utiliser un ternaire. JOSEPH: Et vous économisez beaucoup de lignes, non? Et il est tout simplement votre code sans doute un peu plus lisible. Oui, la question? ENCEINTE 6: Pour un ternaire, pourriez-vous aller, les égaux chaîne de s, point d'interrogation? Et puis vous pouvez avoir, par exemple, cinq options différentes. Et en fonction de ce que le nombre de n a été, choisiriez-vous un de ceux? JOSEPH: Donc la question est, est-il un sorte de syntaxe où vous pouvez faire chaîne s est égal à n, et ensuite plus de deux options après que point d'interrogation? Et une réponse est simple: non, il n'y a pas vraiment une bonne façon de le faire que si vous voulez nid ternaire multiple les opérateurs à l'intérieur de l'autre. Vous pourriez faire comme n supérieur à 100, point d'interrogation, et puis un autre opérateur ternaire, n supérieur à 50, point d'interrogation, et le nid de cette façon. Mais dans ce scénario, votre code est se genre de illisible et désordonné, et il pourrait être préférable de simplement aller à une instruction If / Else à ce point. ROB: Et aussi, comme une note côté, PHP met en œuvre de façon incorrecte le ternaire de telle sorte que l'opérateur ternaires imbriqués ne même pas travailler comme ils le devraient. JOSEPH: Ouais. Ainsi, il devient un peu confus, surtout quand vous sortez à différentes langues. ROB: Il est assez déroutant que langues sont mal à ce sujet. JOSEPH: Donc en fait, juste pour clarifier, que tout le monde sait ce que % S fait ici? Vous avez des questions à ce sujet? Je pense juste pour la caméra, le% s permet essentiellement nous mettons un espace réservé pour une chaîne. Et puis à la fin, nous précisons que la variable que nous voulons mettre en ce place holder est s. Alors que prend essentiellement s et il met ici. Et puis il affichera, vous avez choisi une grande ou que vous avez choisi un faible nombre. OK. Donc boucles vous permettent d'effectuer les choses en mouvements circulaires, non? Vous pourriez avoir rencontré ce dans Scratch sous la forme de boucles toujours ou Répéter jusqu'à ou Répéter un particulier nombre de fois. Alors pourquoi est-ce bon pour nous? Eh bien, en C, disons que nous avons cette chanson mise en œuvre dans Scratch chante, c'est la chanson qui ne se termine jamais. Il va juste encore et encore et pour toujours et à jamais. Eh bien, vous ne pouvez pas vraiment faire un programme qui a un nombre infini de printf déclarations en elle, non? Donc, dans ce scénario particulier, d'une façon que vous pourriez faire ce travail et à faire imprimer à jamais est à au lieu d'utiliser une boucle While. Ainsi, une boucle While exécute ce qui est dans le corps des deux croisillons que qui lui appartient sur la base de ce la condition est. Donc, dans cet exemple particulier avant, si nous voulons imprimer à jamais, ce qui pouvons-nous faire? Oui, bien sûr, non? Donc, ce genre de combine l'idée d'une expression booléenne le long d'une boucle. Et nous avons appris booléenne expressions antérieures. Donc, chaque fois que l'état intérieur de Alors que reste vrai, cette boucle exécutera sur et sur et sur. Et dans ce cas, si nous lui fournissons juste avec la vraie, ce qui provoque une infinie boucle qui imprime la chanson encore et encore et comme nous voulions avant sans avoir un programme qui a une infinie nombre de printf, qui est pas possible. Donc, plus convaincante, même si, vous pouvez l'utiliser avec un variable et une condition. Alors disons que nous voulons répéter l' phrase, totalement loufoque, 10 fois. Donc, ce que vous pouvez faire avec une boucle While est vous pouvez d'abord initialiser un compteur extérieur variable de la Bien que la boucle à 10. Et puis en fait, chaque fois que vous allez dans la boucle While, vous imprimez la déclaration et vous diminuez la variable de compteur jusqu'à ce que, à la fin, à un certain moment, une fois que nous soustrayons-je assez fois, 1 de I suffisamment de fois - et juste pour clarifier, je minus minus signifie que je I est égale à moins 1. Ce sera essentiellement apporter je jusqu'à la point où une fois que j'ai touché zéro, ce condition n'est plus vrai et de sorte qu'il sort hors de la boucle. Donc totalement loufoque que imprime 10 fois. Une question sur une boucle While? OK. Donc, il ya une manière que nous pouvons faire ce que nous venons de fait d'une manière plus concise avec ce que nous appelons une boucle. Donc, pour une boucle est constitué d'un l'initialisation, un état, et un mise à jour, tout comme nous avions avant dans cette boucle While. Donc, nous allons jeter un coup d'oeil. Dans cette boucle While, nous avons eu une l'initialisation, puis nous avons eu une condition que nous avons vérifié. Et puis nous avons eu une mise à jour étape au sommet. Avec une boucle For, cela prend essentiellement ces trois choses et condense décompose en une ligne. Donc, la première chose qu'il fait dans la Pour la boucle est l'initialisation. Et puis vous faites un point-virgule, puis vous faites la condition, qui est je supérieur à zéro va là-bas, et ensuite l'étape de mise à jour. Donc cela devient effectuée à la fin du corps de la boucle. Donc, ces deux programmes sont essentiellement équivalent. Vous avez des questions? Alors, quelle est une différence entre les deux? Quelqu'un peut-il le souligner? Il pourrait être un peu subtile. C'est juste une très petite différence. Oui? SPEAKER 5: Vous ne seriez pas en mesure d'utiliser Je la variable en dehors de la boucle Pour [Inaudible]? JOSEPH: Exactement. Donc, c'est quelque chose que nous allons arriver à appelé plus tard la portée des variables. Mais essentiellement, ce int vie I en dehors de cette boucle While. Donc, une fois cette boucle While est fait l'exécution, je serai en mesure d'utiliser la suite, j'ai dans le programme. Considérant que cette boucle For, ce int je est scope intérieur de cette boucle For. Et parce qu'il est à l'intérieur de cette partie Pour de la boucle, qui commence les parenthèses et les extrémités avec l'accolade là-bas. Tout ce qui est déclarée à l'intérieur de ici ne peut pas être utilisé à l'extérieur. Donc, si je tente d'utiliser Je l'extérieur, ça va dites-moi, symbole non déclaré. Et l'essentiel, je ne veux pas être capable de l'utiliser. ROB: Et bien, il ya 10 ans, en littéralement tous les cas, les accolades sont ce que vous utilisez afin de déterminer la portée d'une variable. Alors là, int i est égal à 10 est déclarée à l'intérieur de cette jeu d'accolades. Et alors aussi longtemps que vous essayez d'utiliser I avant cette accolade, c'est bien. Vous pouvez voir lorsque vous tapez faire, vous voir tiret, tiret, std, égaux, c99. C'est donc une version ultérieure de C que GCC a mis en place qui donne également ce raccourci. Donc, cette habitude de ne pas être autorisés dans C. Et vous pouvez voir pourquoi, parce que cette int I est en dehors de cette accolade mais il est toujours considéré comme étant dans l' champ d'application de ces accolades. Mais c'est une chose très pratique, et il est donc une bonne extension. JOSEPH: Des questions? OK. Donc, ce qui est plus utile est que, parfois, vous voulez sorte de dynamisme la boucle, non? Vous ne voulez pas imprimer seulement nécessairement totalement dérangé tout le temps, vous vouloir le compte à rebours à partir de 10 ou quelque chose. Et si vous pouvez utiliser la variable compteur à l'intérieur de la boucle ainsi que. Et dans ce cas, ce programme vient compte à rebours de 10 tout en bas. Et que fait-il pas imprimer? Il ne s'imprime pas zéro, droite, parce que quand - Oui, il a également n'imprime pas 11. Donc, il ne s'imprime pas zéro, parce que quand I est zéro, souviens, il évalue l'état avant sa mise en pour exécuter le corps de la boucle. Et quand je est nul, ce qui est faux, alors il n'imprime pas le compte à rebours zéro, il se contente d'afficher le comptage en baisse de 10 tout en bas à 1. Si nous voulions vraiment à imprimer zéro, alors nous mettre un signe égal après ce signe supérieur. OK. Donc, une façon de faire la validation des entrées, qui c'est quand vous demandez à l'utilisateur de faire quelque chose, vous voulez vous assurer qu'ils suivre vos instructions, est d'utiliser la boucle While, non? Donc, dans ce cas particulier, je demande pour un nombre positif et je suis en attente d'entrée. Et puis j'ai vérifié si la contribution est inférieur à zéro, maintenir leur demander. Donc, tant que ils me donnent un certain nombre ce n'est pas positif, continuent à demander, Demandez, continuez à demander. Mais ce qui est une sorte de bizarre à ce sujet? Ou ce que ne semble pas optimale sur cette structure ici? N'importe qui? Oui? ENCEINTE 6: Vous répétition l'instruction à deux reprises. JOSEPH: Droit. Nous avons donc deux printf ici, non? Donc, il ya une façon que nous pourrions obtenir ce juste vers celui qui rendrait notre code plus facile à lire et un peu plus propre. Et puis nous n'aurions pas à Obtenez ont deux fois ainsi. Et d'une façon que vous pouvez faire est en utilisant une boucle do-while. Et une boucle do-while est essentiellement un forme différente d'une boucle While où tout ce qui est entre les accolades est exécuté au moins une fois. Donc ici, je déclare, int l'entrée, à l'extérieur d'abord. Et puis je viens de dire, faire ce instruction alors que l'entrée est inférieur à zéro. Alors il frappe le faire en premier. Il sera toujours exécuter ce au moins une fois, donc il sera toujours demander à l'utilisateur pour l'entrée au moins une fois. Et puis il évalue cette entrée, et il se passe dans un cercle. Oui, la question? ENCEINTE 6: Est-il possible de le faire [Inaudible] types, comme si vous dites, GetString, et quelqu'un [inaudible] est-il un moyen de [inaudible] JOSEPH: Donc la question est, est-il un manière à faire la validation des entrées si le mode d' ne pas mettre dans le bon type de variable? Donc, si nous demandons un int et ils nous donner une chaîne à la place. Et dans les fonctions que nous mettons en œuvre pour vous, GetInt, GetString dans tous ces fonctions, ils réellement déjà faire ce genre de saisie de type de base validation sous le capot. Donc, si vous utilisez les fonctions que nous vous a donné, vous n'avez pas vraiment. Mais si vous voulez regarder de plus sur la façon dont vous pouvez réellement faire cela, vous pouvez consulter sous le capot le fichier I/O-- pas déposer, les fonctions d'E / S standard comme une lecture de l'entrée standard et sortie standard. Et vous pouvez avoir une meilleure idée de la façon dont vous pourriez le faire. ROB: Une question, cependant, est spécifiquement avec l'exemple que vous dit, vous vous attendez à une chaîne et j'entre un int. Comment voulez-vous faire la différence entre vouloir intentionnellement le chaîne 123 par rapport à vouloir l'int 123? Alors chaîne, il est à peu près il n'y a pas validation, c'est juste ce qu'ils entré vous interpréter comme une chaîne. Int est plus facile, parce que peu importe la entrée vous prenez de l'utilisateur, vous êtes en prenant toujours une chaîne. Et si cette chaîne, vous pouvez alors vérifier, sont tous ces chiffres effectivement numériques? JOSEPH: OK. Une question sur une boucle Do-Alors? ROB: Oh, et c'est aussi - revenir à portée, un peu commun erreur est d'essayer d'utiliser certains locaux variable dans un ce do-while boucle à l'intérieur de cette condition. Et en fait, si nous venons juste de nous débarrasser de ce et dit, int entrée est égale à GetInt, alors le compilateur crier nous, parce qu'il n'existe pas d'entrée en dehors de la portée de l' ces accolades. JOSEPH: Et c'est pourquoi nous besoin de cette gamme ici. OK. Ainsi, vous pouvez également sortir d'une boucle tôt si vous voulez. Donc, c'est une façon différente de mise en œuvre de ce que nous venons mis en place. Et au lieu d'utiliser la condition entre parenthèses, nous utilisons une Si instruction à l'intérieur du corps de la boucle do-while. Et dans le fond, lorsque l'entrée est enfin supérieur à zéro, nous allons sortir de la boucle. Et nous irons tous le chemin vers le bas ici. Et vous pouvez voir que ce serait probablement préférable dans ce scénario, parce que c'est un peu peu plus propre et un peu peu plus facile à lire. Considérant que la présente, vous sorte de avoir des lignes supplémentaires en elle. C'est juste un peu plus laid, Je suppose que, dans un sens. Oui, la question? SPEAKER 4: briserai seulement obtenir vous sur un jeu de bretelles? JOSEPH: Droit. Donc la question est brisera seulement vous sortez d'une boucle? Et la réponse est oui. Donc, si vous avez imbriqué des boucles For, pour exemple, si j'ai Pour int Je égal à 0 jusqu'au 10 puis Pour int J est égal à 0 jusqu'à 10, si je casse de la intérieure boucle, je vais quand même aller à la boucle externe. Donc, il va garder l'exécution du les opérations à l'extérieur. Vous avez des questions à ce sujet? Oui? SPEAKER 5: Mais briser seules fonctions pour les accolades, pas pour les autres déclarations? [Inaudible] JOSEPH: Donc la question est cassera fonction que pour les boucles, par opposition à autres déclarations comme si? Et oui, c'est le cas, parce que vous sortir d'une boucle, à droite, dans un sens. ROB: Dans la grande majorité des cas, c'est c'est le genre de Si quelque chose, puis casser. Donc, vous n'avez pas à briser à appliquer à Si le qui s'enroule autour d'elle. Et aussi, ce n'est pas beaucoup d'une boucle, mais rappelez-vous que les commutateurs sont également éclaté de par des pauses. Nous avons vu les pauses utilisés avec les commutateurs avant. JOSEPH: Et vous pouvez aussi les utiliser dans les boucles de boucles while et for. Vous avez des questions? OK. Alors, la prochaine place est fonctions. Ainsi, vous pourriez avoir utilisé l'un de ces BYOB blocs dans votre projet de Scratch. Et cela permet essentiellement de définir un ensemble de instructions à suivre. Et ce que je veux dire par là, c'est qu'il faut penser de nouveau aux maths, à droite, l'algèbre. Vous avez ce que nous appelons une fonction de x, une variable, et disons que ce fonction est f de x égal à x + 5. Ainsi, vous pouvez penser à f de x que ce noir boîte qui prend 15 puis produit 20. Donc, plus généralement, une fonction est quelque chose qui prend des entrées et puis produit des sorties. Et pourquoi sont des fonctions bien? Ils sont bons pour un certain nombre de raisons. Quelqu'un veut-il donc de prendre un coup de couteau à ce que l'organisation des moyens? En termes de pourquoi les fonctions sont utiles? Oui? SPEAKER 4: Il rend votre code plus lisible. JOSEPH: Droit. Donc, une des choses est-il fait votre code plus lisible, non? Au lieu d'avoir comme int x est égal à x fois x fois x, je peux avoir cube de x, qui est plus lisible et plus compréhensible pour un lecteur. L'organisation est également en termes de diviser votre code en gérable parties, de sorte que, au lieu d'essayer de mettre en œuvre tout cela dans une longue section en principal, vous pouvez sorte de scinder dans comme, OK, nous allons écrire une fonction au cube quelque chose, nous allons écrire une fonctionner à la case quelque chose. De cette façon, vous pouvez le diviser en minuscule, petites pièces que vous pouvez lutter contre plutôt que d'essayer de s'attaquer à un grave problème à la fois. ROB: Ou même minuscules, de petites pièces vous et un partenaire pouvez aborder. JOSEPH: Ouais. ROB: Donc, au lieu de deux vous essayer d'implanter un fonctionner en même temps. JOSEPH: simplification. Tout le monde veut prendre une supposition? Oui? SPEAKER 5: Plus répétition. JOSEPH: Droit. Donc, une chose que vous pouvez faire avec simplification est que c'est une sorte de sur les mêmes lignes que la réutilisabilité est que une fois que j'écris une fonction de cube, je peux utiliser juste que plus et plus et plus nouveau dans mon programme au lieu de taper x fois x fois x et plus encore et encore. Et la simplification ici aussi juste signifie cela rend votre code sorte de plus facile à déboguer une fois que vous divisez cette place en fonctions. Parce que vous pouvez localiser où vos problèmes sorte de sont. Vous avez des questions? Donc, une autre idée est abstraction, non? Cette boîte noire. Comme vous savez ce que fait GetInt pour recevoir une entrée de l'utilisateur? Nous n'avons pas vraiment vous le dire, non? Tout ce que nous vous avons dit est fait GetInt exactement ce qu'il dit qu'il fait. Donc, même si nous ne vous disons pas comment cela fonctionne, vous savez toujours. Donc, dans ce cas particulier, ce n'est une quadruple fonction qui ne des choses différentes pour une entrée pour produire un signal de sortie. Et vous pouvez quadrupler un certain nombre en le multipliant par quatre. Ou vous pouvez ce que nous appelons peu passer par deux. Et nous verrons cela un peu plus tard. Et il n'y a pas besoin de savoir comment ce fonction fonctionne réellement aussi longtemps qu'il fonctionne comme indiqué. Donc, sous le capot, je pourrais être comme, retourner fois d'entrée huit divisé par deux. Et vous ne savez pas, non? Tout ce que vous devez savoir, c'est il fait ce qu'il dit. Voilà donc la chose utile sur l'abstraction. Et une autre chose est en quelque sorte de cette idée de localiser votre code à un particulier l'article. Donc, si vous avez un problème, vous n'avez pas avoir à aller partout dans votre code en essayant à fixer où était le problème. Donc dans ce cas, j'ai mis en place cube mal. J'ai pensé cube multipliait par trois. Donc dans ce cas, il s'agit d'un programme que tout a multipliant par trois partout. Et il ya un autre programme qui a cube pondérée sortir dans une fonction. Et maintenant si je veux réparer mon erreur ici, je dois fixer chaque ligne de code de ce programme. Alors que d'autre part, si j'utilise le fonction, je seulement besoin de changer ce qui n'allait pas dans un seul endroit. Donc, en informatique, nous appeler les entrées et sorties. Les entrées sont appelées paramètres ou arguments, et les sorties sont appelés renvoyer des valeurs. Et nous allons voir comment cela nous aide à trier de définir une fonction d'une seconde. Donc, c'est une définition de fonction pour cubage. Donc, il faut une entrée, puis il renvoie ce nombre de fois lui-même trois fois. Donc, nous allons décomposer. Nous avons donc un en-tête de la fonction, qui se compose essentiellement de trois choses. Nous avons donc les paramètres qui sont, comme je l'ai dit avant, la entrées dans cette fonction. Et puis nous donnons la fonction d'un nom. Dans ce cas, il est appelé cube. Et puis nous précisons que soit le type de la valeur de retour est. Donc dans ce cas, ma fonction de cube prend en un nombre entier et il a également retourne un entier. Donc, si je passe à deux, deux est un nombre entier, il renvoie huit à moi, qui est un nombre entier. Donc renvoyer des paramètres de nom de type. Questions à ce sujet? Et puis la valeur de retour est en fait spécifiée à la fin en disant retour puis retour quel que soit contient la valeur de retour. Donc dans ce cas, si nous mettons tout ensemble, une fonction prend en paramètres, ça s'appelle quelque chose, et elle retourne quelque chose qui est du type que nous disons qu'il allait être. Vous avez des questions? Alors, comment pouvons-nous utiliser une fonction? Eh bien, nous écrivons une fonction, puis nous l'utilisons dans notre programme, non? Donc je l'ai appelé cube, et alors je peux utiliser cube. Mais ce qui est important de noter est que l'ordre des questions. Si j'ai cube ci-dessous principale, il est allez courir dans le cube. Et à ce stade, il n'y a rien appelée cube dans le programme, et il est juste va être comme, j'ai aucune idée de ce cube est. Alors il vous dira, implicite déclaration de la fonction. C'est l'erreur qui apparaît. Et dans ce cas, le cube est ci-dessous principale, donc ça ne va pas savoir à ce sujet. SPEAKER 5: Alors principal est généralement la dernière fonction définie? JOSEPH: Donc la question est, est le principal généralement la dernière chose que vous souhaitez définir? Et pas. C'est parce que nous aimons habituellement principale pour être au top, non? Parce que c'est la première chose que vous veut ouvrir le programmeur le programme pour voir. Et alors comment pouvons-nous résoudre ce problème de nous vouloir principal à être au top, mais la fonctions que nous voulons, nous voulons qu'ils être inférieure principal encore en mesure d'utiliser eux à l'intérieur de principal? Eh bien, nous utilisons ce que nous appelons un prototype de fonction. Alors qu'est-ce un prototype de fonction essentiellement est est qu'il faut d'abord ce la signature ou la fonction header de ce que nous voulons mettre en œuvre le bas ici, et nous l'avons mis à la partie supérieure d'un programme. Donc dans ce cas, nous disons que, bien, plus tard dans notre programme, nous allons à faire une promesse de mettre en œuvre ce fonction appelée int cube, qui prend une entrée de nombre entier. Alors maintenant, parce que c'est au-dessus de principal, principal, il va dire, oh, eh bien, plus tard dans le programme, qui va être donc je peut se référer à elle, alors je vais laisser faire par pour le moment. Et puis au fond, nous mettons en œuvre cube. Et puis principal va juste dire, bien, il va trier de lien ces deux symboles ensemble. Et nous allons couvrir ce que des moyens tard. Et il saura que c'est la fonction de cube qu'il doit utiliser. ROB: Le [inaudible] de vouloir principale en bas ou haut, j'ai vu les deux. Il ya des choses qui aiment juste à mettre principale en bas. Mais une fois qu'un projet devient particulièrement grand, généralement principal est dans un déposer son. Et à ce moment, comme le ligne de cube int serait - l'intérieur de stdio.h sont un groupe de lignes juste comme ça int ligne d'entrée cube int. Et si ces prototypes sont des choses que vous ont tendance à mettre dans les fichiers d'en-tête, à quel point, ce n'est pas grave. Eh bien, ce n'est pas grave. Ceux aller toujours au sommet. Et si principal n'est pas un fichier qui lui est propre, vous n'avez pas à vous soucier de mettre prototypes de fonctions individuelles dans le fichier. JOSEPH: Et nous y reviendrons un peu peu plus tard, quand Rob commence à parler sur la compilation. Et il ya aussi une différence entre le paramètre et argument. Et paramètre est exactement ce que nous appelons ces entrées quand nous définissons la fonction. Et nous appelons cela un argument lorsque nous fait passer dans la fonction. Donc dans ce cas, il s'agit d'un paramètre, comme nous l'avons dit. Et lorsque nous utilisons réellement là-bas, cube de x, alors x est lui-même ce que nous appelons un argument à la fonction cube. ROB: Donc, les arguments de paramètres sont - il ya cette distinction, très confondre interchangeable. À ce moment, pour moi, c'est comme un des ces mots que quand je le vois dans la nature, je ne peux pas aider mais immédiatement question de savoir si ils l'utilisent dans le contexte correct, parce que le la différence est assez subtile que juste tout le monde a tendance - Je dis presque toujours l'argument indépendamment de ce que je veux dire. Joseph, et les fonctions sont également utiles pour ce qu'on appelle des effets secondaires. Ainsi, une fonction peut prendre aucune entrée, et il peut aussi produire aucune sortie. Donc, dans ce cas particulier, je suis la définition d'un sous-programme qui n'a pas d' valeur de retour. Et afin de préciser que, nous utilisons ce que nous appelons un vide ici. Et si l'effet secondaire de cette fonction est qu'il imprime juste des trucs sur la page. Il ne fait pas prendre tout entrées, et ce n'est pas effectivement produire des résultats. Mais cela pourrait être utile dans le sens si vous voulez, par exemple, débogage quelque chose dans votre programme, si vous voulez d'écrire un petit sous-programme qui imprime, disons, le contenu de mémoire ou quelque chose. Et si ces effets secondaires sont parfois utile en dehors du contexte de tout comme les entrées et sorties. Vous avez des questions? Et pour terminer ce segment particulier, qu'est-ce que ce programme fait? Je vais vous donner les gars un couple de secondes pour lire. A un niveau très basique, ce que nous voulons dire, c'est qu'il permute x et y, non? Alors combien d'entre vous fait penser ce sera échanger x et y? Levez la main. Personne. OK. Qui pense que ce sera pas échanger x et y? Et la somme qui était pas toute la pièce. Ainsi, certaines personnes ne sont pas sûrs. OK. C'est raisonnable. Donc, nous allons passer par ce qui se passe quand vous appelez des fonctions effectivement la première fois en Pour répondre à cette question. C'est donc ce que la mémoire sorte de ressemble. C'est en quelque sorte comme un modèle simplifié de ce mémoire ressemble quand vous exécutez un programme. Donc, il ya quelque chose qui s'appelle la pile ici et quelque chose qui s'appelle le tas. Et ceux-ci poussent vers le milieu de mémoire. Donc dans ce cas particulier, lorsque vous appelez une fonction, il qui est mis sur la pile. Et puis tout ce qui est contenu dans ce fonction reste dans ce que nous appelons que le cadre de pile de fonction. Et pour obtenir une belle visualisation de ce, let's - par exemple, nous avons eu l' programme principal plus tôt. Et à l'intérieur de principal, nous avons appelé cube. Alors principal serait d'abord aller sur la pile encadrer, parce que c'est la première fonction c'est ce qu'on appelle. Et puis, quand cube est appelée à l'intérieur de principal, il se met sur la principale à l'intérieur de la mémoire. Donc, ce que vous remarquerez est que cube a ses propres paramètres et son propres habitants. Ainsi, lorsque vous passez réellement quelque chose à une fonction, les paramètres qu'il obtient des copies de ce qui était passée à partir principal. Et en quelque sorte de l'expliquer, nous allons marcher à travers un programme. Nous avons donc la pile, ce qui est seulement la partie de la pile. Et ce que nous faisons, c'est que nous initialisons premier x et y à un et deux. Nous avons donc ces petites boîtes. Ils sont assis dans la pile principale encadrer sur la pile. Ils contiennent un et deux. Maintenant, nous appelons swap. Qu'est-ce qui se passe, c'est que nous passons x et y dans swap et swap crée ses propres copies de ces variables à utiliser dans les de son cadre de pile. Alors maintenant, là-bas, nous avons un, qui contient la valeur que x a et b, qui contient la valeur qui y avaient. Donc, un, deux. Et vous remarquerez que celui-ci ne à partir de x et y à l'intérieur du principale. Donc nous créons maintenant un temporaire variable pour contenir un. Nous avons établi un égal à b, il changements de un à deux. Et puis nous avons mis b égal à température, qui est l'un. Et puis maintenant nous sortons sur de cette fonction. Lorsque vous quittez sur la fonction, la cadre de pile se extraite de la pile. Nous appelons pousser. Vous poussez un cadre de pile sur la pile et vous sautez si la pile. Et qu'est-ce qui se passe est tout ce qui était dans cette pile cadre sorte de juste monte en flammes. Et pour que n'existe plus. Mais qu'est-ce que nous constatons? Nous n'avons jamais fait changé le les valeurs de x et y, non? Donc, ceux qui sont restés local principal. Et en passant les choses en échange, nous en fait jamais changé ces valeurs. Et qu'est-ce que nous appelons cela? Nous appelons ce passage par valeur. Donc, en C, lorsque vous passez les choses en fonctions, il les transmet par valeur et fait une copie d'eux pour la fonction à utiliser. Et nous allons apprendre quelque chose appelé le passage par référence plus tard, mais c'est une façon que vous pouvez résoudre ce problème. Mais nous n'allons pas vous soucier de que plus tard. ROB: Et en fait, ce terme, passant par référence, si C n'a même pas en passant par le référencement. C est exclusivement passage par valeur. Peu importe ce que vous faites, vous êtes toujours passer une copie de quelque chose. C'est juste que, comme je l'ai mentionné sorte de avant que des pointeurs et que la chaîne est vraiment juste quatre octets pointant vers quelque part en mémoire. Eh bien, si j'ai cette chaîne et c'est en me disant que c'est là que la chaîne - bien, si j'ai ce pointeur à cette placer en mémoire, alors je peux passer une copie de ce pointeur à une fonction, et cette fonction sait toujours où en mémoire, il est. Donc, ces deux pointeurs pointent au même endroit dans la mémoire, et c'est ainsi que nous allons être en mesure de modifier les choses au-delà de la frame de pile actuel. JOSEPH: Voulez-vous faire la compilation? ROB: Non, c'est 5h30. JOSEPH: OK. Il est 05h30. OK. Donc, nous allons couvrir la compilation Je suppose que dans la section suivante, ou votre section Leader sur ce point. Et - ROB: Des questions? JOSEPH: Des questions? Oui? SPEAKER 5: Utilisation de chaînes de CS50, tout fonctions que nous voulons utiliser pour ceux-ci, ce sera comme des fonctions C. CS50 n'est pas allé à l'intérieur et fait de plus. ROB: C'est exact. Tout du C comme [inaudible], vous seraient les utiliser sur nos chaînes. JOSEPH: Et une dernière chose que je veux mention, c'est que nous avons un guide de style pour cette classe. ROB: Oh, oui. JOSEPH: Donc, si vous venez d'un programmation fond avant, vous pourrait avoir certaines conventions quand vous écrire du code comme mettre accolades sur la même ligne ou particulier les moyens de mise en retrait ou nommer vos variables. Dans cette classe, nous voulons suivre une Guide de style spécifique juste parce que, bien, si vous sortez et travaillez dans industrie, vous allez être attendu de suivre le guide de style de la entreprise à laquelle vous allez. Comme par exemple, je pense que Facebook a un type particulier de nommer convention. Et il ya des différences entre chameau variables d'enveloppe et comme les séparant par des caractères de soulignement. Et aussi, je pense que le plus important, comme par exemple, le retrait, non? Nous ne accolades commençons là où les la condition est, et ils sont sur la ligne suivante. Et nous mettons également accolades même si c'est une seule ligne. Et un grand nombre de fois, il ya des façons de le faire où vous pouvez laisser ces accolades off si c'est une seule ligne en vertu de la déclaration Si. Mais dans cette classe, nous voulons suivre une Guide de style spécifique pour que vous obtenez utilisé pour ce genre de chose. ROB: Ouais, et le style 50 va appliquer ce guide de style, et nous sommes allez utiliser style 50 au grade de votre code. Donc, cela rend les choses plus facile pour nous et espérons ne doit pas faire des choses qui tant pis pour vous a donné la modèle standard ne devrait pas être irréaliste. JOSEPH: Et enfin, de trouver le style guide, aller à manual.cs50.net/style. Et ouais. SPEAKER 4: Allez-vous appliquer tous les caractères par ligne? ROB: Oui. JOSEPH: Désolé, les gars. ROB: C'est comme l'un des seuls. A ce point, je suis OK avec 120. Je suis OK avec dire 120 caractères par ligne. Je comprends qu'il y ait une limite. Je pense que 80 est si petit, mais nous l'imposer. JOSEPH: Personnellement, je pense avec C, 80 caractères est plus OK. Une fois que vous commencez à recevoir une autre langues comme JavaScript et PHP, et non donc raisonnable de limiter tout à 80 caractères. OK. Eh bien, c'était la section superbe. Quelqu'un veut des bonbons? SPEAKER 4: Oui.