>> 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.