>> ROB BOWDEN: Ceci est la section plus à l'aise,
mais cela ne signifie pas que si vous se sentir comme vous n'êtes pas plus à l'aise
vous ne serez pas apprendre des choses ici.
Donc, nous allons commencer.
Avez-vous des diapositives aller dans les choses.
Vais-je prendre juste en ce moment?
Ordinateurs portables de commutation.
>> ALLISON: Vous ne voulez pas présentez-vous, Rob?
>> ROB BOWDEN: Oh, je suis Rob.
Ceci est mon cinquième année TF-ing CS50.
>> GABRIEL: Je suis Gabriel.
Je suis chef de TF CS50.
Je suis TF année dernière et cette année.
Allison: Et je suis Alison, et ce est ma deuxième année TF-ing CS50.
>> ROB BOWDEN: Très bien, alors cette chose sur la gauche,
nous espérons que vous avez vu avant.
Si pas parce que vous télécharger pour vous-même,
vous devriez avoir vu en conférence.
Donc, cela est l'appareil de CS50, et il a fait un peu de la description de celui-ci
en conférence.
Mais fondamentalement, il n'y a que toi exécutez une exploitation
système au sein de votre exploitation système afin que nous puissions vous donner
programmes sans avoir besoin vous inquiétez pas, oh est-ce
aller travailler sur Windows et Mac, ou si certains d'entre vous
utilisent déjà Linux, Linux.
Il est juste censé un jeu commun
domaine que tout le monde a le même environnement exact.
>> Donc, si vous ne l'avez pas téléchargé déjà,
vous devez télécharger, parce que vous êtes allez en avoir besoin pour l'ensemble de problème.
Et il est un deux gigaoctet télécharger, de sorte qu'il pourrait prendre un certain temps.
Sur la Harvard ça va aller vite.
Appareil Pour CS50.
>> Maintenant, au début, nous allons parler de tout un tas de ligne de commande
choses, et si par là, je veux dire de travail dans ce petit milieu ici.
Et remarquez tout de choses Je dis ici et maintenant
vont travailler si vous êtes à l'intérieur de une borne à l'intérieur de l'appareil,
ou si vous êtes à l'intérieur de la fenêtre du terminal gedit
à l'intérieur de l'appareil.
Donc, ces environnements sont identiques.
>> Mais je vais aller une troisième voie.
Et remarquez ici ce peu d'adresse IP ici.
Donc, vous ne devez pas le faire, mais cette adresse IP
address-- maintenant si je-- sauf elle est bloquée par cette chose.
OK, de sorte que l'adresse IP plus dans un terminal
ici-- si ce terminal sur ici est un terminal dans mon Mac.
Donc, cela est en aucune façon actuellement associé à l'appareil du tout.
Et si vous êtes sous Windows, alors vous êtes allez avoir besoin de télécharger quelque chose
spécifiquement pour cela, en particulier les gens ont tendance utiliser Putty, P-U-T-T-Y.
>> Donc ce que je vais faire est de type SSH et ensuite cette adresse IP.
Eh bien, jharvard à cette adresse IP.
Donc 192.168.24.220.
Ce message effrayant, l'ignorer.
Il suffit de taper oui.
Ceci est CS50 dans une boîte.
Il vous demande votre mot de passe.
>> Et dans beaucoup de ces contextes où il demande le mot de passe, [inaudible].
Nous avons beaucoup de questions où il dit qu'il est pas réellement saisissant.
Il ne vous montre pas les caractères de le mot de passe que vous tapez, si quoi que ce soit,
pour une fonction de sécurité, parce que si quelqu'un regarde par-dessus votre épaule
et ils voient star star star star, alors qu'ils
savoir que votre mot de passe est quatre caractères.
Donc, l'idée est qu'il demandera vous pour votre mot de passe, le type.
Il ne va pas se montrer vous les personnages,
mais il est en fait de les accepter.
Dans ce cas, chaque fois que vous jamais voir une invite de mot de passe
le traitement avec l'appareil, le mot de passe va être cramoisi.
Donc cramoisi.
>> Et maintenant, ici à l'intérieur de cette fenêtre qui est en mon Mac,
Je rencontre essentiellement le même point de vue exact
comme à l'intérieur d'un terminal dans l'appareil.
Donc, vous n'êtes pas obligé de le faire.
Vous pouvez faire tout ce que vous voulez à l'intérieur de l'appareil.
Je fais presque jamais fait rien dans l'appareil.
Je suis presque toujours minimiser ce et maintenant Je SSH travail dans l'appareil.
>> Si quoi que ce soit, si vous un ordinateur plus lent,
vous remarquerez peut-être une différence.
Je le fais parce que je préfère cette fenêtre de terminal.
Il a quelques fonctionnalités comme Je peux diviser la fenêtre,
et maintenant je peux SSH à travers l'appareil.
Je suis deux SSH qui se passe à la fois.
Si votre ordinateur est particulièrement lent et vous travaillez dans l'appareil,
et vous vous rendez compte ce sont vraiment lag, peu importe.
A tendance à être beaucoup plus rapide si vous êtes SSH-ed dans.
Mais sinon, vous pouvez travailler de toute façon.
>> Public: Qu'est-ce que SSH signifie?
>> ROB BOWDEN: coques sécurisées, quelque chose comme ça?
Qu'est-ce que SSH signifie?
GABRIEL: Secure Shell.
ALLISON: Il est juste shell sécurisé.
ROB BOWDEN: Secure Shell.
Il est un protocole qui vous-- il est un protocole sécurisé, donc cryptées.
On ne peut pas espionner le réseau et voyez ce que vous dites à quoi que ce soit
vous êtes SSH-ed à.
Et en fait, dans le vieux jours CS50, donc en 2009
quand je suis un étudiant de première année, la façon dont vous avez travaillé sur CS50 ensembles de problèmes,
vous étiez SSH-ed à un serveur que nous vous avons donné accès à,
et vous avez travaillé là-bas.
Donc, vous ne disposez pas de cette appareil graphique.
Vous ne devez gedit.
Vous ne avez pas toutes ces choses qui vous pouvez visuellement pointer et cliquer.
Vous avez eu à travailler dans cette interface.
Je préfère travailler dans cette interface.
Donc, une partie de ce que nous allons pour aller à plus droit maintenant
sont un groupe de la commandes que vous devriez
commencer à se familiariser avec comme vous avancez dans le cours.
Et honnêtement, une fois que vous s'y habituer, il
est beaucoup plus rapide à travailler dans cet environnement
que de travailler avec le Finder, faisant glisser et en cliquant sur les choses.
>> Donc nous sommes ici.
Maintenant, je viens SSH-ed dans, et si la valeur par défaut vous location--
vu certaines de ces commandes en classe, mais nous allons passer en revue tous les à nouveau.
L'emplacement par défaut nous sommes en est le répertoire de base.
Et répertoire, juste un autre mot pour le dossier.
Nous sommes donc dans le répertoire de la maison.
Tapez ls, lister les fichiers dans ce répertoire.
Évidemment je créé un blah.c plus tôt.
Donc, nous avons un répertoire de bureau.
Vous remarquez la coloration syntaxique?
La mise en évidence en bleu clair indique un répertoire et le blanc droite
indique juste un fichier.
Donc, il va y avoir des d'autres couleurs que vous voyez.
Un fichier exécutable va probablement être vert ou quelque chose comme ça.
OK, nous sommes donc dans le répertoire de la maison.
>> Maintenant, si je veux aller dans un autre répertoire, cd est la commande que je veux.
Donc changer de répertoire, puis vous passer le nom du répertoire
que vous voulez aller dans.
Nous avons donc ici quatre options.
Je peux aller dans les téléchargements, et maintenant nous voir ici il a mis à jour cette parenthèse
dire que je suis dans ~ / Téléchargements.
>> Alors, quelle est tilde?
Il est un raccourci pour votre répertoire personnel.
Donc, presque tout ce que vous faites va être à l'égard de votre répertoire personnel,
et pwd est juste une commande Je l'utilise une fois par an que
imprime seulement le répertoire courant.
Et si vous voyez ici que ~ / Téléchargements décide vraiment
/ home / jharvard / téléchargements.
Donc / home / jharvard est mon répertoire.
>> Donc, nous pouvons cd DOT.
Maintenant dot dot est un répertoire spécial se réfère toujours à la place d'un répertoire.
Donc, si je suis dans ~ / Downloads, puis cd point point va me mettre au tilde.
Que pensons-nous cd dot dot va me faire maintenant?
Il va me porter à / home.
Donc tilde par le répertoire de travail d'impression, Je suis maintenant dans / home / jharvard.
un répertoire à partir de ce, maintenant il est dit ici / home.
>> Maintenant cd dot dot.
Maintenant, je suis dans le répertoire racine, et vous ne pouvez pas le faire à nouveau.
Vous aurez juste à rester dans le répertoire racine pour toujours.
Le répertoire racine a tout un tas de choses que, si vous voulez regarder dans,
vous pouvez.
Par exemple, si je vais dans le bac, qui contient
tous ces binaires, comme ls, et cd, et toutes ces choses.
Ainsi, ces commandes doivent existe quelque part dans le système,
et il est dans le répertoire / bin.
Mais presque tout ce que vous faites est va être de votre répertoire personnel.
Et cd sans aucun argument que ce soit, vous pourriez dire cd ~, ne pas besoin.
CD va vous apporter Retour à votre répertoire personnel.
>> Un dernier.
cd - va vous ramener à le dernier répertoire que vous vous trouviez.
Je viens donc de cd'd deux fois de suite, de sorte que mon dernier répertoire est le répertoire de base.
Si je vais à réduire bin, et maintenant montons et en utilisateur.
part de l'utilisateur.
Passons à l'action de l'utilisateur.
Maintenant, je suis maintenant de la part de l'utilisateur.
cd -, retour dans bin.
Donc, cela devient particulièrement utile lorsque vous have-- et ça va passer.
Ainsi la part de l'utilisateur, de retour bin, bin part.
>> Donc, cela devient utile.
Vous pouvez trouver vous-même avoir beaucoup, beaucoup, beaucoup de répertoires imbriqués.
Et vous voulez faire quelque chose très vite dans un répertoire supérieur.
Vous allez dans ce répertoire, faites changements et des trucs comme ça,
et maintenant vous voulez aller à l'endroit où vous étiez.
cd -.
Je suis toujours frustré quand je suis d'aller
à ce répertoire, je voulu faire travailler.
Je suis toujours frustré quand je l'ai fait en deux étapes au lieu d'une étape,
parce que cela signifie que cd - va de mettre en cet endroit intermédiaire
à la place où je veux aller.
>> Ainsi, nous voyons tous les fichiers de la liste.
Nous savons comment se déplacer jusqu'ici.
Donc, maintenant nous allons parler de l'édition de fichiers.
Donc, dans ce cours, vous êtes presque toujours prévu d'utiliser gedit.
Si vous voulez, vous pouvez passer à l'étape suivante et commencer à apprendre un texte de ligne de commande
éditeur.
Donc, différentes options existent.
>> Et ceux qui sont probablement va être pertinent pour vous,
nous avons Nano, Vim, et Emacs.
Donc Nano est les débutants ligne de commande de l'éditeur de texte.
Donc Nano allons-y sur blah.c je créé plus tôt.
Il est juste ce fichier C standard.
Et vous voyez tout un tas de choses passe en bas de l'écran,
et apparemment blah.c contient ce code C.
>> Donc, dans cet éditeur particulier, ce qu'il a dit à la bottom--
maintenant ce symbole caret, nous voyons ce ^ G, ^ X, ^ O.
Alors que dans la quasi-totalité contexte que vous voyez,
vous pouvez voir que symbole de curseur dans d'autres endroits en ligne, sur Stack Overflow,
quelque chose comme ça.
Il renvoie presque toujours à contrôler.
Donc, pour sortir je veux faire Contrôle Contrôle X. X, quitte.
Et je peux utiliser ma flèche fléchées pour se déplacer.
Remarquez que je ne peux pas pointer et cliquer facilement.
Vous devez utiliser votre flèche fléchées pour se déplacer.
Il pourrait y avoir un cadre pour pointer et cliquer.
>> Mais nous allons faire quelques changements.
Maintenant Contrôle X pour aller sortie.
Il va dire sauver tampon modifié.
Maintenant l'invite, y pour oui, N pour non.
Contrôle C pour annuler.
Je vais juste dire oui.
Nom d'écrire le fichier.
La valeur par défaut est le fichier qu'il est déjà.
Appuyez sur Entrée.
Dáccord.
Maintenant, je viens édité ce fichier, enregistrée, et il est modifié.
>> Donc Nano est le plus facile éditeur de texte s'y habituer.
Les alternatives sont Vim et Emacs.
Ce sont plus haut niveau des éditeurs de texte qui ont une courbe d'apprentissage très raide.
Donc, ma préférence personnelle est Vim.
Et il a une grande variété d'options.
Et une fois que vous vous habituez à elle, vous ne serez jamais
envie d'aller à un autre éditeur de texte parce que vous venez
avoir tant de choses à votre disposition dans ceux-ci,
mais il faut vraiment beaucoup de temps pour apprendre.
Alors peut-être vous voulez juste pour forcer vous dès maintenant pour s'y habituer,
mais je dirais que ça vaut le coup.
Mais il est difficile.
>> Et puis Emacs.
Je me bats toujours dans Emacs car Je sais comment faire absolument rien.
Apparemment, Emacs est pas par défaut installé sur l'appareil.
Nous allons probablement ajouter que comme les installations par défaut.
Une fois que vous apprenez l'un des Vim ou Emacs, il ya
aucune raison impérieuse de jamais apprendre l'autre,
mais il est un style complètement différent.
OK donc que ce éditant des fichiers textes.
>> Public: Si vous étiez coincé dans Vim en ce moment, comment faire nous--
>> ROB BOWDEN: Il ya plusieurs modes de Vim,
et il existe entier tutoriels sur l'apprentissage Vim.
Donc, si vous arrive d'être en mode d'insertion dans l'ordre
pour saisir du texte, que vous pouvez entrer que de diverses manières,
mais i est la façon dont vous entrez dans le mode d'insertion.
Ou sortir de tout dommage spécial mode qui vous êtes, juste échapper.
Et vous bash juste fuir pour chercher sur des modes imbriqués votre en.
Juste OK, maintenant je suis de retour en mode normal.
>> Et si en mode normal, un colon.
Vous voyez apparaître au bas.
Et alors q.
Alors q va quitter si vous avez apporté des modifications, qui je-- Ai-je fait des changements?
Avoir apporté des modifications apparemment.
Donc, si vous avez fait des changements, ça va dites que vous pouvez mettre un point d'exclamation.
Je vais appeler un bang.
Ainsi, vous pouvez mettre une interdiction à juste quitter sans rien faire,
ou du côlon wq sera sauvegardez et quittez.
Donc w en général est d'écrire.
Donc, écrire le fichier.
Je peux écrire et quitter.
Ou vous pourriez avoir juste qx slam, q-bang juste
à sortir de là, indépendamment de toutes les modifications que vous avez apportées.
>> Très bien, alors maintenant nous allons go-- nous pouvons créer des fichiers.
Commençons la suppression des fichiers.
Et je vais jeter dans une nouvelle commande rapide, appuyez sur.
So touch foo.
Touch bar.
Touchez baz.
Si ls I, nous voyons maintenant que ces fichiers existent.
Ils sont complètement vide.
So touch est juste un simple moyen d'un [inaudible].
Deux, techniquement juste à l'état , il met à jour l'horodatage.
Ainsi, tout fichier que vous créez a un horodatage associé.
Donc baz a été créé sur 14 septembre à 16h21.
Il est maintenant 16h22, si Je touche baz nouveau, nous
voir que baz était plus récemment modifié à 16h22.
Mais sinon, je suis presque jamais regarder les horodateurs sur les fichiers.
So touch, ici je suis juste en utilisant pour créer des fichiers rapides.
>> Très bien, alors maintenant rm est la commande que nous nous soucions ici.
Et nous pouvons rm boo.
Dire retirer un fichier régulier boo vide.
Et nous pouvons taper y, et maintenant il est supprime.
rm baz.
Retirez régulièrement fichier vide baz et le type N pour non.
Maintenant, il est pas supprimé.
Donc, bar et baz existe encore.
Foo est parti.
GABRIEL: continuer à parler.
ROB BOWDEN: Très bien.
Donc, le message ennuyeux ici, retirez empty-- régulière
que faites-vous là-bas?
Retirez régulièrement fichier vide.
Donc, si nous ne voulons pas être dérangé par ce message,
nous pouvons jeter dans cette -f drapeau, et que sa force.
Et maintenant, si je -f RM, il ne va pas dites que vous voulez supprimer ce fichier.
Il vous reste plus qu'à le faire.
Et ls, je ne vois là empêchent pas plus.
>> Maintenant que est potentiellement commande dangereuse.
Il a tendance à ne pas trop mauvais.
Nous y reviendrons dans une seconde comment il peut faire vraiment dangereux.
Et nous allons créer un répertoire temporaire.
mkdir, une autre commande.
Donc mkdir est une commande qui fait un répertoire.
Et maintenant, par ls nous voyons cette belle lumière bleu souligné répertoire temporaire.
Je peux cd en température.
Et je peux mkdir foo.
cd dans foo. barre de mkdir.
cd en bar.
>> Ainsi, nous voyons que nous pouvons facilement obtenir dans certains nidification assez profonde.
Maintenant, comment puis-je supprimer un répertoire?
rmdir.
Donc, si je viens de droite essaie de rm, comme nous l'avons fait avec un fichier régulier,
bar rm va dire ne peut pas supprimer la barre.
Il est un répertoire.
Il ya une commande spéciale pour suppression de répertoires, en quelque sorte.
Donc, bar rmdir.
Maintenant, bar a disparu.
>> OK, donc je suis assez rmdir ne l'utilise jamais.
La raison being-- Maintenant, nous allons faire un bar de fichier normal ici.
Boo Donc rmdir.
rmdir.
Impossible de supprimer foo.
Annuaire pas vide.
Donc, vous ne pouvez pas utiliser éliminer dir sur un répertoire qui a des choses en elle.
>> Donc, vous avez quelques options.
Vous pouvez aller dans ce répertoire, supprimez tout manuellement, et puis sortir
et rmdir répertoire.
Cela semble évidemment ennuyeux.
Que faire si il ya des milliers de fichiers il?
Eh bien, vous pourriez rm *.
Nous en reparlerons * en une seconde.
Cela signifie essentiellement toutes les choses.
Mais mieux encore, si rm -r.
Donc rm -r-- dans beaucoup de contextes, -r signifie récursive,
qui nous allons parler de ce moyens récursifs dans plusieurs semaines.
Mais cela signifie essentiellement traverse l'intégralité de ce répertoire
et supprimer tout.
>> Foo -r donc rm va dire descendre dans le répertoire foo?
Oui.
Retirez régulièrement vide fichier foo / bar?
Oui.
Supprimer le répertoire foo?
Oui.
Alors maintenant, foo et tout à l'intérieur, il a été retiré.
>> Maintenant que peut devenir particulièrement gênant when-- Touchons 1, toucher 2, appuyez sur 3.
Pourrait avoir tout un tas de fichiers.
Si je voulais, je pourrais créer des milliers de fichiers ici.
Et foo -r rm va être assez ennuyeux.
Oui, oui, oui, oui, oui, oui.
Avec beaucoup plus de fichiers que vous voir rapidement combien de fois
Je voudrais avoir à taper oui.
Eh bien, nous venons de le voir avant comment nous pouvons se débarrasser de devoir taper oui, -f.
Donc mkdir foo foo cd tactile 1 2 3.
OK, si foo -rf rm va supprimez pas aveuglément foo entièrement.
Aucune invite.
Pas de quoi que ce soit.
Foo est parti.
>> Donc je tendance à utiliser cette commander tout le temps.
Cela dit, il est un commande très dangereux,
parce que si je fais quelque chose comme cela, il ne vous invite pas.
Il aura disparu.
Et il arrive assez souvent, et même dans les cours d'informatique de niveau supérieur.
Parfois, nous verrons quelque chose où quelqu'un
dit que je accidentellement notre rm rf-ed ma maison répertoire et tout mon P ensemble a disparu.
Et il est dévastateur, mais il n'y a pas poubelle.
Il n'y a pas il n'y a rien pour vous de récupérer.
Il vient de partir.
Pire encore serait quelque chose comme rm -rf /.
Alors nous venons de parler ce répertoire racine.
Il détient la totalité des fichiers sur votre système.
Les choses ont tendance à être assez salissant lorsque vous retirez des choses comme ls,
et cd, et tous ceux.
>> Public: Quelle est la différence entre RM, RF, et rm *
ROB BOWDEN: Donc rm * -
>> ALLISON: question était quel est le différence entre RM, RF, et rm *.
>> ROB BOWDEN: Donc rm *.
Étoiles à moyen général tous le contenu de ce répertoire.
Essayer de penser à autre façons de montrer étoiles.
Eh bien, la star fait généralement moyens correspondent à un modèle.
Donc, si je dois un fichier appelé dog1, dog2 toucher, toucher cat1, cat2 toucher.
Donc ls * 1 va imprimer cat1 et dog1, parce que cette étoile peut être rempli
dans la with-- il faut être là, mais étoile peut être soit chat ou chien.
Il est d'une wild card.
Voilà le mot que je cherche.
Wild card.
Ou je pourrais ls chien *, et Je suis arrivé à voir dog1, dog2.
Donc, ceux-ci sont listant les fichiers qui correspondent à ce modèle particulier.
Vous pouvez utiliser ls de cette façon.
>> Ls * étoiles correspond à rien.
Donc, il va imprimer tous le contenu de ce répertoire
puisque tous les faire correspondre.
Il ne va pas à imprimer quoi que ce soit dans les répertoires de niveau supérieur.
Si je dois un sous-répertoire, foo, et toucher 1 2 3-- maintenant si rm * étoiles,
supprimer cat1, cat2, dog1, dog2.
Impossible de supprimer foo.
Il est un répertoire.
>> Donc étoiles étend à tous les fichiers dans le répertoire.
Donc techniquement rm * est comme dire rm cat1, cat2, dog1, dog2, foo.
Alors que -rf rm, techniquement étoiles serait accomplir ce que nous voulons, mais rm -rf--
si je sors de cette répertoire, temp -rf rm,
que ça va aller en température et récursive supprimer tout.
>> Donc étoiles est séparé en ce qui est compris by-- si cette chose
que je l'exécute dans, cette chose qui me demandant des commandes
et puis exécuter et de faire eux, je les appelle ce ma coquille.
Et si cette coquille est elle-même un programme.
Et si je voulais, je pourrait fonctionner dans / bin / bash.
Le shell est bash.
Et maintenant, nous remarquons quelque chose a légèrement changé,
et qui est parce que mes réglages pour la coquille sont quelque peu différentes.
>> Mais maintenant je suis techniquement course une coquille dans ma coquille d'origine,
et je peux quitter cette coquille, et maintenant Je suis de retour à mon coquille supérieure de niveau.
Le but de dire que est-- l'étoile.
Donc l'étoile est quelque chose compris par bash.
Donc, rm -rf, drapeau rf est compris par tout rm.
Il sait que lorsque vous passer une -rf vous
il veut effacer de façon récursive tous les fichiers sans avertissement.
L'étoile est quelque chose compris par bash que lorsque vous dites rm *,
bash ne va pas dire hey rm *, retirez étoiles.
Bash va dire rm * supprimer cat1, cat2, dog1, dog2.
Il est automatiquement va étendre tous les fichiers dans le répertoire.
>> Et de même tilde est un autre symbole que bash comprend.
Quand vous dites cd ~, bash se développe que dans votre répertoire d'accueil.
D'autres questions à ce jour?
Ok, donc nous allons commencer à aller vite.
>> Tab achèvement.
Il suffit de le jeter là-bas.
Beaucoup de gens ne le font pas réaliser cela existe.
Donc, si je tape cd Dow, je envie d'aller en téléchargements.
Je ne dois pas taper nloads.
Je ne peux tout simplement appuyez sur Tab.
Ainsi, il reconnaît que Dow est un préfixe qui
ne correspond pas à quoi que ce soit d'autre dans ce répertoire,
de sorte qu'il sera compléter que pour vous.
Maintenant, je peux entrer.
>> Je fais aussi que de manière récursive.
Foo Donc mkdir.
Allons dans foo.
barre de mkdir.
Pour en revenir à ma maison répertoire, je peux voir les meilleurs téléchargements.
Maintenant frapper à nouveau onglet, va automatiquement remplir foo.
Il est le seul répertoire.
Onglet Frapper à nouveau, automatiquement va remplir bar.
Alors maintenant, je suis dans (~ Téléchargements / foo / bar).
>> Alors cet onglet achèvement, chaque fois que je suis arrivé à des heures de bureau,
et je suis debout sur l'épaule d'une personne,
et ils rm aller D-O-W-N-L-O-A-D-S, je vais mourir.
Juste onglet, onglet, onglet, onglet.
Donc onglet certainement utilisé.
Et de façon similaire et vers le bas, beaucoup de gens
juste qui est arrivé à jamais avoir touché le haut et le bas.
Il va passer par le précédent commandes, donc si vous simplement manqué quelque chose,
et vous souhaitez l'utiliser à nouveau, il suffit de tenir jusqu'à vous arrivez à lui.
Dáccord.
>> Alors vite, d'autres choses.
Revenons en température.
Créons des fichiers.
Donc ici, je suis juste aller à la liste des mots.
chien, chat, miaou.
Faisons chien, poisson.
Alors maintenant REP est une très commandes utiles que vous
utiliser pour rechercher dans l'ensemble fichiers d'un texte particulier,
et techniquement, vous pouvez faire vraiment expressions complexes pour qu'il corresponde.
>> Donc ici, si je grep, et ce je veux chercher?
Disons que je suis à la recherche pour les chats, et Je veux chercher tous ces fichiers.
Alors, comment dois-je faire tous ces fichiers?
Étoile.
Ainsi, dans un fichier, je dois chat.
Je pourrais probablement avoir appelé quelque chose de mieux,
parce que ça ressemble numéros ou quelque chose ligne.
Mais dans un fichier je dois une ligne avec chat.
Dans le fichier deux je dois une ligne avec chat.
Alors maintenant, je peux regarder un fichier à l'intérieur et voir oh oui, ce fichier a eu chat.
fichier de préavis de trois n'a pas été suivie parce que le chat n'y est pas.
Je peux grep pour miauler.
Seuls les fichiers deux a miauler.
>> Donc, ce que vous pouvez combiner, de plus, avec -r, qui
comme je le disais avant signifie souvent récursive.
Et si je peux venir ici, grep -r pour toute instance de-- éditons
celui-ci vient de jeter un chat à l'intérieur.
Donc grep -r pour toute instance de chat tout au long de ce répertoire.
Et ce de façon récursive rechercher les sous-répertoires.
Donc, en baz, il ya chat.
Dans temp / 2, il ya chat.
Et dans temp / 1 il ya chat.
Voilà donc la recherche dans les fichiers.
>> Maintenant, vous pouvez également utiliser une trouvaille.
Et donc trouver est précisément de recherche de fichiers avec un nom donné.
Faisons donc un peu plus.
Allons dans les téléchargements.
Touchez dog1.
Touchez cat2.
Touchez cat_dog.
Touchez catcat.
>> Je tiens donc à trouver tous fichiers avec un chien dans le nom.
Donc, trouver, et pour la plus longue temps je ne me souvenais
comment trouver travaillé, jusqu'à ce que je lire quelque chose qui fait en sorte claire.
Donc, trouver, automatiquement récursive.
Vous ne devez pas passer un -r.
Donc, trouver dot.
Nous avons pas encore parlé de point.
Alors que dot dot toujours signifie un répertoire vers le haut.
Dot signifie toujours le répertoire courant.
Je ne pouvais donc rm -r point dans le même manière que je peux rm -rf *.
Finalement, ils accomplir la même chose.
rm -rf point va supprimer dans tout le répertoire courant.
>> OK, ce que je ne veux pas y faire.
Mais trouver dot.
Donc des recherches récursives le courant répertoire, et maintenant tout
après ce sont un tas de drapeaux que vous utiliser pour exclure les choses du retour.
Donc, trouver point renvoie tout ce qu'il peut trouver dans le répertoire courant.
Ce sont tous les fichiers recherche récursive.
Nous allons voir certains de ceux qui en une seconde.
>> Mais au cas où vous vous demandez comment je fais que, si K de commande, à tout le moins
dans mon terminal dans le Mac l'efface.
Control L efface généralement pour toute sorte de terminal.
Vous pouvez également taper clair.
Et si jamais vous avez dans un scenario-- bizarre
il est arrivé à moi quelques time-- où les couleurs de vos invites
sont tout foiré, ou vous ne sont pas en mesure de voir quoi que ce soit
tapées lorsque vous tapez, parce que parfois comme couleur de fond est réglé
la même que la couleur de premier plan et maintenant vous ne pouvez pas voir les polices.
La réinitialisation est quelque chose qui remet tout vous à l'arrière-plan noir par défaut,
blanc à l'avant, ou quel que soit vous définissez les pour.
>> Alors, où étions-nous?
Trouver point.
Alors maintenant, tout ce passé Point limite les résultats
à quelque chose qui correspond au modèle donné.
Donc ici, je veux chercher tout avec le nom chat.
Je me suis rien.
Pourquoi est-ce le cas?
Eh bien, je suis juste la recherche de quelque chose avec exactement le nom chat.
Si je veux chercher quelque chose qui a un certain modèle, et cat--
les citations ne sont pas techniquement nécessaire, mais je les jeter là-dedans.
Alors maintenant, il trouve catcat car qui est la seule chose que
a un certain arbitraire schéma suivi par chat.
Je peux mettre chat *, et maintenant trouver catcat, cat_dog, cat2,
parce que ce sont toutes les choses avec le chat au début, suivie par rien.
Vous pouvez combiner cette.
Si vous voulez rechercher tous les fichiers C que vous avez, vous pourriez faire * .c.
Nous avons blah.c ici.
Voilà donc un ouvrage de trouver.
Vous pouvez effectuer une recherche.
Il a tout un tas de drapeaux de nouvelles restrictions.
Et un sur eux, disons -d.
Alors obsolète.
Oh, ce ne est pas ce que je veux.
Non -d.
Tapez d.
Donc, trouver point - Type D.
Alors qu'est-ce qui est juste fait je suis à la recherche pour tous les fichiers dans le répertoire courant
A- avec d représente directory-- type de répertoire.
Cela renvoie tous les répertoires dans le répertoire courant.
Et le type F est tout régulier fichiers, tous les répertoires non.
Voilà donc tout un exemple d'autres façons
peut restreindre la recherche autres que juste le nom du fichier.
>> Il a été de 30 minutes.
Toujours en cours.
>> ALLISON: Je vais brise à travers.
Ça va être beau.
>> ROB BOWDEN: Donc d'autres choses.
Maintenant Bang, point d'exclamation.
Alors que généralement désigne: bien, nous allons voir un exemple.
Alors! F, ce qui est ce que cela va faire?
Eh bien, il semble avoir répété trouvaille point -type f.
Qu'en est-il! G?
Ce juste grep -r chat *.
Donc frappez vous pouvez utiliser pour répéter une commande fait récemment.
Donc, si je tape! Gre, il va re-run les commandes qui ont commencé avec gre plus
récemment.
>> Et vous pouvez voir tous ces commandes avec l'histoire.
Donc l'histoire.
Ce sont tous les commandes que je suis à court aujourd'hui.
Et bien, il est pas littéralement limité à aujourd'hui,
mais je ne l'ai utilisé cette appareil à partir d'aujourd'hui.
Il est de votre ensemble de la histoire de votre shell bash,
sauf qu'il coupe à un moment donné.
Public: Qu'est-ce qui se passe si vous faites Historique des commandes [inaudible] et une erreur
dans le résultat sera toujours imprimer the--
>> ROB BOWDEN: Ouais, si il ya une erreur dans l'un de ces commands--
alors disons, qui est un commande d'erreur ne se trouve pas.
Apparaît toujours dans l'histoire.
Bien.
Autres questions sur quoi que ce soit?
Voilà donc Bang.
>> Maintenant, commande vraiment utile, l'homme.
Cela vous donne la manuel pour une commande donnée.
Alors disons man ls, si ce me montre ls.
Il énumère le contenu du répertoire.
Et là je vois qu'il ya sont ces différents drapeaux qui existent.
Nous voyons donc que ls -l existe si nous étions à lire. ls -l
me donne cette liste complète de la répertoire avec qui possède le fichier,
la taille du fichier, la l'horodatage modifié.
Donc ls -a est un autre que vous pourriez en fait utiliser un peu fréquemment.
-al est mon drapeau le plus commun ce passé ls.
>> Donc -a, remarque qu'il ya beaucoup plus de fichiers que seulement ls.
ls -a.
Ce qui est en commun avec tous ces fichiers?
Ils commencent par un point.
Donc, ceci est une convention dans Linux les fichiers commençant par un point sont cachés.
Donc, cela signifie juste que quand nous venons de ls droites,
ou nous sommes à la recherche de ce répertoire à l'aide l'équivalent du Finder, ou Windows
Explorateur équivalent, que nous ne veulent pas voir ces fichiers de points.
Ils polluent la juste vision des choses.
Donc, ils sont cachés à moins que vous spécifiquement
leur demander avec quelque chose comme -a.
Je ne peux donc cd en .local, et je vois qui, elle-même un répertoire avec
un répertoire partagé, et applications, et bla bla bla.
Donc point, ils sont juste des fichiers cachés.
>> OK, si d'autres plus importants.
Je dois un couple que je peux sauter.
Disons simplement parler vrai rapide sur les choses de redirection de fichier.
Donc, il ya toute une série complexe des choses que vous pouvez faire avec ceux-ci,
mais juste pour les voir, disons, écho.
Une autre commande.
Commande vraiment stupide.
Tout ce qu'il fait est d'imprimer ce que je dis à.
Donc écho bonjour.
Il a juste fait écho bonjour à l'écran.
Bonjour tout le monde.
Echoes Bonjour tout le monde.
>> Donc, une commande ou une symbole qui comprend bash
est ce symbole supérieur, et que la sortie est à un symbole de fichiers.
Donc, si je sortie de cette foo, il est maintenant un fichier
foo, à l'intérieur de qui est Bonjour tout le monde.
Donc, quand je remarque que l'écho bonjour tuyau de monde dans foo,
il n'a pas d'écho Bonjour tout le monde.
Au lieu de cela il a été mis dans le fichier foo.
Et une autre commande seulement à jeter à vous, chat.
Voilà un moyen facile de juste complètement lister le contenu du fichier
de sorte que je ne dois pas ouvrir un éditeur de texte pour l'afficher.
Ainsi le contenu de la fichier foo sont Bonjour tout le monde.
Et je ne pouvais chat blah.c, le contenu est ce.
>> Encore une fois, ce sont des commandes qui, ne le font pas attendre que vous les avez tous en mémoire.
L'idée est que vous avez vus.
Peut-être que vous travaillez sur quelque chose, et vous êtes
comme je suis malade d'ouvrir ce fichier.
Je voudrais juste regarder au contenu réel rapide.
Vous pouvez faire cela, alors regarder en arrière et dire oh je
rappeler quelque chose comme ce qui existe, et il est chat.
>> Alors que se passe dans un fichier.
Maintenant, il n'y a pas vraiment de bon exemple de la lecture d'un fichier encore.
Ce qui est quelque chose qui prend quelque chose de standard?
Toute commande Linux simple?
Quand nous arrivons à elle, dans un couple semaines tous les piece-- bien,
Cette semaine, vous avez une pièce où vous commencer à prendre l'entrée de l'utilisateur.
Et si habituellement vous tapez que l'entrée au clavier.
Au lieu de taper que l'entrée au clavier,
vous pouvez au lieu tuyau depuis un fichier de sorte que lorsque vous faites Mario, ./mario,
tuyau depuis un fichier donné, et qui va exécuter le programme mario.
Pas attendre l'entrée en le clavier, il est plutôt
aller juste pour lire le les lignes du fichier foo.
>> Donc, plus de foo met en le fichier foo, et moins de foo
prend des trucs à partir du fichier foo et utilise en tant que contribution à ce programme.
Et juste pour voir, nous pourrions également écho foo bar baz, et puis au lieu d'un
supérieure, nous allons faire deux en foo.
Qu'est-ce que faire?
Il ajoute juste le fichier.
Ainsi, au lieu remarquer si je ne reprends bla en foo et foo chat, il est juste bla.
Ainsi, lorsque vous exportez dans un fichier informatique, écrase complètement ce fichier.
Si vous voulez juste ajouter, deux [? niveleuse. ?]
>> Et le dernier est un tuyau.
Tuyau devient beaucoup plus compliqué, où il prend la sortie d'une commande
et se nourrit dans la commande suivante.
Donc, quelque chose, une histoire.
Donc, pouah, je ne veux pas regarder cette.
Montrez-moi toutes les commandes de mon histoire où je Grep-ed pour quelque chose.
Non, ça déroutant.
Montrez-moi toutes les commandes où je trouve.
Toutes les commandes find je jamais couru.
>> Donc l'histoire.
Maintenant sorties d'histoire à la filtrer cette liste de commandes,
mais je ne veux pas sortie à l'écran.
Au lieu de cela, je vais tuyau dans grep.
Alors disons grep pour tous les cas de trouvaille.
Alors maintenant, au lieu de prendre grep l'entrée, à la place de--
grep est capable de gérer comme input-- nous sommes l'utilisation de grep légèrement différente ici.
Ainsi, au lieu de taper la liste des choses que nous voulions rechercher
et dit grep prend en entrée.
Donc, si je ne trouve juste grep, il attend que je tape choses.
Donc chat bonjour trouver.
Bonjour.
Trouvez.
Notez chaque fois que je tape trouver il reconnaît que je l'ai tapé trouvaille.
Ainsi, au lieu de cela, sera dossiers de recherche pour trouver.
>> Donc, l'histoire va maintenant sortie une liste de toutes les commandes.
Nous mettons cette sortie, et nous nourrir de grep,
et il est donc cracher toutes les instances de trouver.
La raison pour laquelle je dit que ça peut prêter à confusion est si je-- il est encore confuse.
Si je grep pour grep.
Remarquez qu'il est à peu près toujours montrant la commande que je viens
couru parce que commande lui-même a grep à l'intérieur de celui-ci.
>> OK, donc des questions sur quoi que ce soit?
Et je vais le transférer sur à ce stade.
Espérons que cela est un bon aperçu de toutes les commandes
que vous ne devez pas avoir mémorisés, mais ceux-ci représentent
un solide 95% de ce que je faire à la ligne de commande.
Aussi garder à l'esprit que la ligne de commande lui-même, Bash est un langage de programmation,
et donc quand vous descendez à elle, vous peut-être envie de faire des choses vraiment complexes.
Et il a des choses comme boucles, et ifs, et tous ceux
que vous allez vous habituer à avec vos langages de programmation.
Mais qui est au-delà de la champ d'application de la présente section.
OK, donc pas de questions?
ALLISON: Aucun?
GABRIEL: Allez-vous to--
ALLISON: Je peux le faire sur le mien si vous voulez.
Nous pouvons voir ce qui se passe.
ROB BOWDEN: Off à Allison.
ALLISON: Woo.
Vous êtes un acte difficile à suivre, Rob.
Voulez-vous moi de passer avec vous?
Ou vous avez, OK.
Je vais essayer de ne pas tout à fait être aussi longue il.
Voyons si cette volonté travailler comme je le veux.
Peut-être?
Haha!
Oui.
>> Donc je vais juste aller très vite à travers les variables, les boucles, les conditions,
et un peu sur le compilateur.
Si vous avez des questions à tout moment, se il vous plaît arrêter moi.
Ces gars-là va me rappeler à répéter votre question dans le cas où je l'oublie,
mais ne devrait pas être trop mauvais.
>> Donc, les variables, ouais.
Nous avons pas l'un de vos Scratch morceaux ici.
Je suis sûr que la plupart d'entre vous, si vous aviez une sorte de jeu
que vous avez créé avec Scratch, vous aviez de garder une trace de quelque chose comme score,
ou de temps, ou quelque chose comme ça.
Ainsi, ceux de couleur orange vif pièces que nous voyons là
ne sont que la forme de rayures de les variables, et vous aurez certainement
être en utilisant des variables tout au long de vos programmes.
Si vous n'êtes pas, je ne suis pas vraiment que ce que vous faites.
>> Mais de toute façon, une grande chose, définition des variables.
Avec C chaque variable a d'avoir un type déclaré,
si je vous ai donné une très un général au sommet.
Ainsi, vous aurez votre taper et puis tout ce qui
vous décidez d'appeler votre variable.
Donc dans ce cas, le type dans votre liste de variables.
>> Nous avons trois exemples.
Char de certains élèves, un de A, ce qui est
Je suis sûr que vous voulez tous pour obtenir dans cette classe.
Vous pouvez définir plusieurs variables sur une seule ligne
tant qu'ils sont tous du même type, qui est notre deuxième exemple, il
où vous avez trois variables x, y, et z.
Ils sont tous les flotteurs.
Et puis vous pouvez aussi, dans ce dernier exemple avec un score de int et nombre
des équipes, vous pouvez initialiser là.
>> Ainsi, dans l'exemple du milieu où nous juste avoir flotteur de x, y et z,
ceux ne sont pas encore initialisée.
Ils sont sans valeur.
Ou ils ont des valeurs parasites.
Et si vous essayez de les utiliser, le compilateur va hurler à vous.
Vous devez déclarer à la fois et initialiser vos variables.
Donc, dans ce dernier, nous faisons les deux.
Nous déclarons les variables de marquer et nombre d'équipes,
et nous leur Initialisation, donnant eux leurs valeurs initiales de 7 et 4
respectivement.
Laisser refroidir.
Tout le monde bien?
Impressionnant.
>> OK, si certaines conventions.
Si vous avez lu les gars par le style 50, ces
ne sont que des choses que nous aimerions pour vous de mettre en œuvre dans votre style.
Donc noms significatifs.
Si vous commencez à appeler les choses tout x, y, et z, en particulier
que vous obtenez en plus longue programmes, vous êtes
va probablement confondre vous-même et être
comme ce qui est de cette variable référence.
Je ne sais pas ce que cela signifie.
>> Donc, si il est destiné à tenir un score, appelez le score.
Si il est destiné à maintenir une certaine réponse ou entraîner, lui donner un nom comme ça.
Pour les boucles, que nous entrer dans la prochaine diapositive,
les variables d'une seule lettre sont très bien.
ROB BOWDEN: I, J et K sont que des conventions pour des boucles
que tout le monde les attend d'être appelé i, j, et k.
Vous pouvez appeler eux-- je vois rangée colonne ou rangée appel parfois
pour deux boucles imbriquées, et qui est aussi un peu de la norme.
Mais i et j est entièrement compris.
>> ALLISON: Ouais, i et j vous êtes tout à fait bien.
Par souci de clarté comme dans certains de vos ensembles de P,
il pourrait être judicieux d'avoir plus choses descriptives là juste
de garder une trace de lui.
Mais je pense que i, j, k et je pense la grande majorité d'entre nous utilisons tous.
>> ROB BOWDEN: Avec ces conventions, si le style est important.
Il est l'un des quatre axes sur lequel vous êtes classé,
et il est si facile d'aller un peu plus votre P fixé à la fin et assurez-vous
qu'il n'y a pas d'erreurs stylistiques.
Donc, assurez-vous de tabulation correctement.
Assurez-vous que vos variables sont nommées.
Laisser des commentaires.
Il est très facile d'obtenir ces points.
Vous ne devez pas penser à rien pour obtenir ces points.
Vous ne disposez pas de comprendre quoi que ce soit.
Il est juste ce qui en fait joli.
>> ALLISON: En fait, nous avoir du style 50, qui
vous dire où vous avez affaire si vous êtes gâcher sur le style
et vous dire exactement ce que vous besoin de fixer et comment vous devez le réparer.
Il est également juste bon de mentionner qu'il est la politique de cours
que si vous êtes au bureau heures et votre code est un gâchis,
nous pouvons refuser d'aider vous jusqu'à ce qu'il ressemble plus agréable.
Donc, commencer à droite, maintenir style cohérent,
vous êtes aussi simplement faire votre vie beaucoup plus facile lorsque
vous essayez de passer par débogage.
Si vous essayez de comprendre où vous êtes absent une accolade
et ils sont tous sur la place, vous êtes juste faire votre propre vie difficile.
Donc, être compatible avec le style.
Je vous promets que ça va vous rendre la vie plus facile.
Il va nous faciliter la vie.
Tout le monde sera beaucoup plus heureux.
Et qui est ce que vous voulez.
GABRIEL: Votre note sera plus élevé.
Allison: Oui, et votre note.
Si votre TF est comme vous, tend à être favorable.
Tout droit, et ensuite seulement le deuxième point ici.
Initialisations cohérente.
Donc, comme nous l'avons vu, vous pouvez déclarer et initialiser les choses.
Plusieurs variables sur la même ligne.
Une chose que nous aimerions que vous ne à faire est de déclarer certaines variables
et pas les initialiser sur le même ligne que vous initialisez autres.
>> Ainsi, en cas que fait aucun sens,
nous avons l'exemple ici où nous déclarant ints
dans les variables de quartiers dimes et quelques centimes,
mais les quarts et les pièces de monnaie avoir aucune valeur initiale.
Nous ne les avons pas initialisé, mais en plein milieu, il
nous avons déjà initialisé dimes à 0.
Donc, ne soit quartiers, dimes, pièces de monnaie.
Ou faire trimestres égal à 0.
Dimes égal à 0.
Pennies égal à 0, ou quel que soit ces valeurs initiales sont.
>> Big chose avec style, être cohérent.
En cas de doute, être cohérent.
Mais suivre notre guide de style aussi.
Laisser refroidir.
Tout le monde il bon?
>> Audience: Où est le guide de style?
ALLISON: Le guide de style est on-- ce qui est le site?
>> GABRIEL: Je pense qu'il est manual.cs50.net/--
ALLISON: style?
>> GABRIEL: style.
Yep.
>> Allison: Oui.
Alors question, où est le style 50.
manual.cs50.net/style.
Oui?
>> PUBLIC: Si nous définissons les variables, il est OK
si nous mettons comme [inaudible] comme score int puis int objectif.
Donc, diriez-vous que maintenant nous avons appris à les définir ensemble?
>> Allison: Alors question, devrait vous avez du code redondant
lorsque vous définissez variables telles que la note de int et
sur la ligne suivante int jeu?
ROB BOWDEN: Il ya certainement cas où le code redondant est mauvais.
Je ne dirais pas que ce code redondant.
Je déclare presque jamais multiple variables sur la même ligne jamais.
Et si quelque chose, il est parce que généralement je laisse une sorte de commentaire
expliquant ce qu'est la variable pour.
Donc, je dirai score int slash slash.
Assure le suivi de tout.
En slash slash totale.
Donc, il est beaucoup plus grossière de cette façon de les mettre tous sur la même ligne.
Je viens jamais les mettre sur la même ligne.
>> ALLISON: Je me sens comme il est préférence personnelle à ce stade.
>> Public: Est-ce que pour aller pour les boucles et les choses aussi?
ROB BOWDEN: Comme à l'intérieur?
Comme int i est égal à 0 virgule longueur est égale à quelque chose?
Que vous ne disposez pas d'un choix.
Avec des boucles de l'initialisation part-- si vous avez peut-être vu que
int i vaut 0 point-virgule i moins que tout ce virgule i plus plus.
Ce int i est égal à 0, techniquement, vous pouvez également
faisons ce que nous avons vu avant avec la syntaxe par des virgules.
int i est égal à 0 virgule j est égal à 3 virgule k est égal à 5.
Vous ne disposez pas d'un choix de diviser qui en plusieurs lignes,
et qui est la norme.
Voyant là est très bien.
ALLISON: Awesome.
Eh bien, Segue pratique en boucles.
Alors oui, nous avons ici quelques exemples de boucles que vous les gars ont vu dans Scratch.
Et bien sûr, tous ces peut seulement être recréé en C.
Et ils vous permettent essentiellement à répéter certaines section de code
jusqu'à un certain état est remplie, que nous allons
entrer dans le droit après avoir parlé boucles sur des conditionnels.
>> Nous avons donc trois types principaux.
Car, si, et faire tout, qui nous irons tous en ce moment.
Donc première est pour les boucles.
Donc, pour un certain état, exécuter ce bloc de code.
Nous avons ce petit froid diagramme ici en bas.
Mais, fondamentalement, vous avez en votre pour que la première ligne,
vous allez initialiser vos variables.
>> Donc, comme nous en avons parlé, i est égal à 0 ou i est égal à 10.
Tout ce que vous avez besoin que variable soit il est
allez y être initialisé, déclarée et initialisée à une valeur.
Alors nous avons une certaine condition que ça va
être vérifier notre variable par rapport à quelque chose.
Ainsi, dans le cas le cas typique où peut-être vous voulez cette section de code
à exécuter cinq fois.
Il faudrait donc int i est égal à 0, et nous veux que ce soit lorsque i est inférieur à 5.
Donc, cette condition est juste va vérifier que chaque fois.
Si cette condition évalue à true, il est
va exécuter le code, ce qui est exactement ce que ce petit diagramme montre.
>> Et il l'exécute.
Il met à jour une variable, qui est ce que nous voyons
dans la dernière partie de notre pour initialisation de la boucle il.
Donc, il va juste continuer à faire ce jusqu'à ce que cette condition ne soit pas remplie,
et puis il sortira la boucle et continuer
de passer le reste de votre programme.
Tout le monde il bon?
Laisser refroidir.
>> Alors, voici un exemple, très similaire à quelque chose que je viens de parler.
Donc, nous voulons juste imprimer cela est CS50 10 fois.
Donc, vous voyez que nous avons ici notre pour, et puis nous
initialiser la variable i soit égale à 0.
Notre condition est vérifié qu'il est inférieur à 10.
Donc évaluer à vrai lorsque nous avons commencer, puis met à jour notre variable
à chaque fois qu'il exécute réellement et imprime ce sont CS50.
Et prendra fin au bout de 10 fois.
Laisser refroidir.
>> Ainsi, alors que les boucles sont à côté.
Et comme vous le voyez ici, nous avons juste quelque temps cette question condition--?
>> Public: Comment puis-je sauter en fait tout simplement pas un nombre,
mais deux nombres [inaudible] i plus plus plus?
>> ALLISON: Donc la question était de savoir comment pouvez-vous mettre à jour votre variable par plus d'un
à la fois.
Donc je plus plus sera mise à jour par un à chaque fois.
Si vous voulez mettre à jour en deux, vous pourriez faire i vaut plus 2.
>> ROB BOWDEN: Avez-vous vu ainsi égaux en cours encore?
>> PUBLIC: [inaudible].
>> ALLISON: Il est effectivement le même chose que i est égal à i + 2.
Donc, il va prendre et mettre à jour en deux à chaque fois.
De plus des égaux est juste quelque chose nous appelons sucre syntaxique.
ROB BOWDEN: Ouais, ceux existe pour à peu près tous les opérateurs arithmétiques.
Fois donc je égal à permettrait de doubler le nombre.
j fracture est égal à 3 est le même comme j est égal à j divisé par 3.
>> ALLISON: Ou moins égal à 2 serait décrémenter i par deux à chaque fois.
ROB BOWDEN: Même égaux mod.
Vous ne l'avez pas vu opérateurs de bits, mais caret égale et esperluette est égal,
tous ceux qui existent.
>> ALLISON: Donc, un grand nombre de fois, en particulier avec votre premier couple de P ensembles,
vous serez probablement par incrément de un, donc je plus plus, plus plus j
sont toutes des choses que vous allez à être généralement en utilisant.
Mais cette condition de mise à jour est entièrement sous votre contrôle.
Vous pouvez le mettre à jour par tous les paliers ou quelle que soit la façon dont vous décidez de.
Peut-être que vous voulez qu'il soit encore un nombre aléatoire parfois.
Mais oui, il ya beaucoup de choses que vous pouvez faire avec cela.
Vous n'êtes pas limité à i plus plus.
>> ROB BOWDEN: Juste pour vous sait qu'elle existe, elle aussi
existe sous une autre forme, plus plus i.
Donc, si jamais vous êtes la recherche en ligne et arriver à voir plus plus i,
à peu près la même signification.
ALLISON: Cool.
Bonne?
Impressionnant.
Ainsi, alors que les boucles.
Très similaire.
Vous avez une certaine condition.
La principale chose à remarquer ici est plutôt d'avoir
trois parties différentes de mettre en place, nous en avons un.
Nous avons juste une condition qui est en cours de vérification.
Et de la même manière, dans la mesure où cette condition est évaluée à true,
votre code va fonctionner.
Et si elle est fausse, il prendra fin, mouvement
sur la prochaine partie de votre programme.
Donc, ce genre est de like-- ce qui est un bon exemple de la vérification
pour un certain état normal?
GABRIEL: Si cela est vrai.
ALLISON: Vous pourriez faire tout vrai.
Bien, 1 est égal à 1.
>> ROB BOWDEN: Vous pouvez faire while-- seulement au lieu d'utiliser une boucle for,
vous pouvez toujours coder un de boucle dans une boucle while,
donc je supérieur à 0 ou tandis que moins de 10 i.
>> ALLISON: Awesome.
Et puis nous avons faire des boucles while, qui est grand pour la validation de l'utilisateur, où
vous voulez obtenir quelque chose de votre utilisateur, voir si elle est valide,
et puis continuer à partir de là.
Donc, l'une des choses à savoir est un faire tout est qu'il va exécuter,
et alors il sera ré-exécuter si cette condition est remplie.
>> Donc probablement la meilleure façon de le faire est juste pour voir un exemple ici.
Donc, comme je viens de le mentionner, l'utilisateur validation est vraiment useful--
ou faire whiles sont vraiment utile avec validation de l'utilisateur.
Donc, ce va juste à nouveau inciter certains utilisateurs
jusqu'à ce qu'ils entrent dans un nombre positif, qui peut être utile pour votre P ensemble
cette semaine.
Et dans ce cas, lorsque nous d'abord exécuter ce programme,
il va imprimer Saisissez un nombre positif.
Il va y avoir une certaine entrée de l'utilisateur,
et puis il va vérifier que l'état d'entrée à l'encontre
que vous avez fixés.
>> Donc, dans ce cas, il va vérifier.
Il va dire, OK, est notre entrée négative,
ou est-ce 0 ou négatif, qui serait invalide.
Alors il serait ré-invite.
Question?
>> Public: Est-ce la même alors comme un tout en boucle si vous venez de copier ce code
et mettre [inaudible] en boucle?
>> Allison: Alors question était le feriez ce soit la même que tout à l'heure
boucle si nous devions juste copier la boucle while ci-dessus.
Donc dans ce cas, votre boucle while est aller vérifier l'état premier.
Donc dans ce cas, si nous avons essayé à écrire comme un simple boucle while,
il dirait tout entrée est inférieur à un.
Mais nous ne disposons pas d'une entrée pour elle.
>> Public: Si vous [inaudible] while y compris le code,
mais alors vous avez réagi le code au-dessus de la boucle while également.
Vous venez d'avoir ce code [Inaudible] en boucle.
ALLISON: Il serait la même chose, oui.
Ainsi, vous pouvez juste write-- au lieu d'avoir un oui do--.
GABRIEL: Mais qui est plus élégant.
Allison: Oui, qui est plus élégant.
Vous pouvez obtenir dans la conception et ainsi de suite, mais oui, vous pouvez tout à fait le faire.
D'autres questions?
OK, cool.
>> Donc, nous avons beaucoup parlé de conditions avec toutes ces boucles que nous avons,
de sorte que nous sommes en train d'entrer dans conditions dans les expressions booléennes.
Encore une fois, vous utilisez ces en C, si juste genre de transition
à partir de l'interface graphique plus à coder réellement.
>> Cool si grand, si.
Fondamentalement nous permet juste d'introduire une certaine logique dans notre programme et de vérifier
conditions sys.
Donc dans ce cas, OK, n est plus grand que 0?
Oui, il est, de sorte que vous pouvez exécuter cette.
Il est en train de vérifier certains condition que vous avez
mis, je pense que nous sommes tous à l'aise avec la vérification des conditions.
Laisser refroidir.
Donc, si votre autre est autre, vous pouvez dire OK, si cela est vrai,
faire cette première chose.
Sinon, je vous veux défaut et faire autre chose.
Comme dans ce cas, vous choisissez soit un nombre positif ou un nombre négatif.
Vous avez seulement deux options.
Vous en avez besoin pour exécuter indépendamment de ce que vos entrées de l'utilisateur.
Ainsi, vous pouvez bien dire, est-il supérieur à 0?
Laisser refroidir.
Imprimer un nombre positif.
Si il est pas imprimer un négatif.
Tout le monde bien?
>> Et puis une chose de reconnaître est que si la condition est remplie si,
l'autre ne sera jamais aussi exécuter.
Un seul de ceux-ci exécuter à la fois.
Il est donc un compromis.
Vous ne recevez pas avoir les deux.
Vous avez soit la première condition.
Vous avez soit le cas ou l'autre, pas les deux.
Qui peut alors rendre les choses encore plus compliqué,
parce que vous pouvez faire si, autre, et puis d'autre.
Donc dans ce cas, nous avoir trois conditions.
Et encore, un seul d'entre eux est va finir par être exécuté.
Donc, vous demandez peut-être Eh bien, si vous
quelque chose que peut répondre à deux d'entre eux.
Peut-être que vous êtes saisie répond à la fois la condition
car si l'autre et si.
La seule chose qui va fonctionner
>> ALLISON: Dès qu'il trouve quelque chose ce qu 'il répond à la condition pour que
évalue à vrai, voilà ce que ça va fonctionner et rien d'autre.
Donc, si vous aviez est ce numéro entre 0 et 5 pour votre première,
ou est ce nombre entre 3 et 5 pour l'autre partie si,
et vous entrez le number-- Je l'ai dit 0 et 5 et-- 4.
Il va frapper le premier.
Il va dire OK, ce nombre est compris entre 0 et 5.
Exécuter et quitter.
Il ne sera jamais atteint ce deuxième option.
Cool?
Impressionnant.
>> OK, nous avons également des déclarations de commutateur si vous souhaitez en savoir encore plus-- ou désolé,
interrupteur est à côté.
Je fais d'avance sur moi-même ici.
Encore une fois, si plusieurs blocs où, comme je viens de le dire
est que dès que vous trouvez un état qui a rencontré et si un autre si autre,
il laisse.
Si vous avez besoin de vérifier plusieurs choses, vous êtes
allez vouloir utiliser ce parce que il vérifie à chaque fois ici.
Donc, ce sera parcouru et si il est supérieur ou égal à 90,
il va imprimer que.
Et il sera exécuté par et vérifier chacun d'entre eux.
>> Auditoire: Alors, ce serait plus buggé que [inaudible].
Serait-ce comme [inaudible]?
>> ALLISON: La question est-ce que cela soit buggy ou est-ce faire ce que vous voulez.
Cela dépend vraiment de ce que vous voulez de votre programme.
>> PUBLIC: je veux dire comme si vous mettez 90 dans.
ALLISON: Si vous mettez 90--
PUBLIC: [inaudible].
GABRIEL: Vous allez obtenir deux choses.
ALLISON: Vous allez obtenir deux choses.
Oui, deux.
>> ROB BOWDEN: Deux?
>> ALLISON: Non
>> ROB BOWDEN: Quatre.
Si vous mettez 90, il va vous dire obtenu un A, vous avez obtenu un B, vous avez obtenu un C,
vous avez un D.
>> PUBLIC: [inaudible].
ALLISON: Droit.
Donc, je dépend de ce que vous veux de toi programme.
Parfois, vous devez vérifier plusieurs choses.
Vous aurez beaucoup plus profondément dans ce bonne conception est que vous allez de l'avant.
La chose importante à réaliser est que cette
va vérifier tous les quatre conditions ici.
Alors que si cela était une autre si si autre si d'autre, il aurait frappé ce premier cas,
il imprimer vous avez un A et faire.
>> ROB BOWDEN: Même si nous décidé de changer cela si
et supérieure ou égale à 90, si et supérieur ou égal à 80,
et inférieur ou égal à 89, si n supérieur ou égal à 70,
et n inférieur ou égal à 79, donc ce sera correct.
Ce sera faire ce que nous voulons, mais il vérifie toujours tout seul il.
>> Ainsi, alors que dans le premier scénario, si nous entrer 90 avec juste si quelque chose si si,
et nous entrons dans 90, puis il va corriger.
Il vérifiera la première un, vous avez une impression A,
sauter tout, car il déjà trouvé un qui fonctionne.
Tous les cas sont mutuellement exclusives basé sur si quelque chose si si.
Donc, il va exécuter le d'abord si, il est fait.
Il ira jusqu'au bout.
>> Alors que si nous changeons que ce soit ce que je
dire avec moins de ou égal à 89.
Il va vérifier la première.
Il va imprimer.
Il va vérifier la seconde.
Il ne va pas à imprimer.
Vérifiez la troisième.
Ne va pas à imprimer.
Vérifiez la quatrième.
Maintenant l'impression.
Donc, dans ce cas, l'autre si version, étant donné que ces cas
sont mutuellement exclusifs, il est une meilleure utilisation si quelque chose si si,
parce que va avoir moins de contrôles des conditions
de cette version.
ALLISON: Awesome.
Donc, une autre chose que nous pouvons faire est de déclarations switch.
Fondamentalement, une instruction switch prend dans une variable,
dans ce cas, il est n, et détermine les cas à exécuter.
Donc, cela est aussi celui où vos affaires devrait être une sorte de mutuellement exclusif.
Donc dans ce cas, si nous nous en obtenir un, il est
va correspondre à quoi que variable-- quelle que soit la valeur de n
est l'un de ces cas, si une, deux, ou 3, et imprimer la ligne correspondante.
>> Et puis si vous remarquez ici, nous avons aussi une valeur par défaut,
que vous pouvez de penser que votre autre.
Donc, si vous prenez un autre numéro en plus de 1, 2, 3 et dans ce cas
il va juste imprimer invalide.
Décider quand utiliser IFS contre si ELSES contre interrupteurs va
être quelque chose que vous les gars le design est sage que vous commencez à écrire
des programmes plus compliqués, et il n'y a pas de règles absolues
de quand les utiliser.
Cela dépend vraiment de votre contexte.
>> ROB BOWDEN: Et juste à jeter là-bas
car il est plus à l'aise section.
Commutateurs, ils ont tendance à être-- si vous êtes limité
dans le nombre de façons dont vous peut les utiliser, car ifs,
la condition peut être assez tout ce que vous voulez.
Avec les commutateurs cas avoir à être des nombres,
ou techniquement, ils peuvent être les caractères, mais caractères, comme nous le verrons, sont des nombres seulement.
Donc, ils doivent être des nombres, mais des commutateurs sont vraiment plus efficace que si
d'autre si autre si, en raison même prenant l'exemple before-- bien,
l'exemple de qualité semble bonne.
>> Eh bien disons ici, nous faisons place cela comme une autre si si si autre scénario.
Donc, si n est égal à égal à 1, vous avez choisi d'imprimer un nombre faible.
Si d'autre si n est égal à égal à 2, vous avez choisi un nombre moyen.
Sinon, si égaux est égal à 3, haut.
Autres invalide.
>> Donc, disons que ce fut notre scénario.
Alors disons que nous entrons 4, nous nous attendons donc invalide.
La façon que si d'autre si autre si approche va travailler est
vérifie la première condition.
Il est pas satisfait.
Donc, nous vérifions la deuxième condition.
Il est pas satisfait.
Vérifiez la troisième condition.
Non content.
Donc, nous allons à l'autre et imprimons invalide.
>> La façon dont les œuvres de commutation est-il compile vers le bas
dans ce que nous allons d'appeler une table de saut.
L'idée principale étant que lorsque vous entrez 4,
il peut se rendre immédiatement à la valeur par défaut.
Il n'a pas besoin de vérifier am Je cas 1?
Non ça y est pas.
Cas n ° 2?
Non.
Cas n ° 3?
Non.
Par défaut.
OK, ce doit être là où je voulez, puis exécuter ce.
Non, il saute immédiatement à la valeur par défaut.
Ou je rentre 2, il est va immédiatement aller à la 2
sans avoir besoin de passer par cas 1.
>> Donc, dans ce sens, réaliste de nos jours qui est
pas tant que ça d'un gain d'efficacité.
Habituellement ordinateurs sont assez rapide, et qui est pas terrible.
Mais il est vrai que les commutateurs sont plus rapides.
Si vous êtes vraiment essayer à optimiser, utiliser un interrupteur.
>> ALLISON: Cool.
Et puis nous avons opérateur ternaire.
Donc, je sais je l'ai mentionné plus tôt le mot de sucre syntaxique.
Il est donc juste des choses qui font votre code beaucoup plus concis.
Donc, ceci est l'un de ces cas.
>> Donc opérateur ternaire est question marque côlon comme nous le voyons dans la chaîne de ligne
s est égal à n supérieur à 100 point d'interrogation haute côlon bas.
Donc, fondamentalement, comment cela fonctionne est qu'il est le n supérieur à 100 est un état.
Donc, je pense que cela peut faire sens.
Il est comme poser une question.
Il est dit oh, est n supérieur à 100.
Qui sait?
Et si elle est évaluée à vrai, il va vous donner
la première chose qui est qui y est mentionnée, ce qui est élevé.
Sinon, il va vous donner faible.
Donc, ceci est juste un très simple et moyen efficace de faire comme si une autre.
Voilà tout ce est.
>> Et si nous devions écrire ce comme si quelque conditionnelle,
il serait, si n est supérieur à 100, rendement élevé.
Sinon, retourner bas.
Ceci est juste un plus de manière concise de l'écrire.
>> ROB BOWDEN: Donc, cet exemple particulier est chaque fois que vous faites quelque chose
comme cela, ce modèle est le où je l'utilise ternaire très fréquemment.
Donc, nous avons pas encore parlé de la portée, mais je déteste voir le point-virgule chaîne de.
Si n supérieur à 100, s est égal à élevé.
Sinon, s est égal faible.
Ainsi ce modèle, ces cinq lignes Code de littéralement 100% du temps,
peut être transféré dans ce était là-haut avec un ternaire.
Ainsi, le ternaire, une ligne de code.
L'autre si, cinq.
Voilà un exemple que je tiens à à chaque fois unique.
Ce serait l'endroit idéal pour un opérateur ternaire.
Il est si propre.
Mais les gens ont tendance à ne jamais l'utiliser.
>> ALLISON: Emportez cela Gabe.
>> GABRIEL: Alors maintenant, tous les gars appris dans la leçon de cette semaine
que tout en un ordinateur est binaire, non?
Tout comme les lampes ici.
Vous pouvez être soit allumé et éteint.
Et par tout, je veux dire littéralement tout.
Quelques chiffres et caractères, et les chaînes, et même le code que vous écrivez quand
il sera compilé à la machine code et des trucs comme ça,
si tout se résume à 0 et de 1 '.
>> Et alors quand nous avons affaire avec des nombres entiers,
est quelque chose qui est techniquement très simple, nous devrions être en mesure de faire des choses
comme les ajouter, ce qui est probablement l'une des choses les plus simples
vous pouvez faire pour deux entiers, non?
Donc, l'addition et la soustraction fonctionne tout comme cela fonctionne dans la notation décimale,
sauf qu'ici il est binaire, non?
Donc, il est dans la base deux.
Donc, ajouter 1 plus 1.
Cela donne 0, et 1 porte sur.
Et juste continuer à faire ce que, donc maintenant est la question la plus intéressante.
>> Nous savons comment représenter tous entiers positifs dans l'ordinateur,
mais nous allons faire ce un exercice.
Imaginez que vous êtes tous les gars en 1960 ou quelque chose en essayant de créer un ordinateur,
et vous devez venir de un moyen de stocker moins 1,
par exemple, tout ou moins entier d'ailleurs.
Comment feriez-vous cela?
Toutes les idées?
Il suffit de jeter quoi que ce soit à moi.
Oui?
>> PUBLIC: [Inaudible] désigner une spéciale si votre [inaudible].
>> GABRIEL: Vous pouvez désigner un bit spécial, qui sera de 0 ou 1.
Disons un si il est positif et 0 si elle est négative.
Puis le reste de la mèche est juste à enregistrer le numéro.
Laisser refroidir.
Voilà donc une très bonne idée.
Nous avons, je ne sais pas, 200.
Et si le premier bit est allumé, alors il est plus 200.
Si il est désactivé, il est de moins de 200.
Laisser refroidir.
>> Il ya seulement un petit problème avec cela,
qui est si nous essayons de résumer les choses.
Donc, imaginons que nous avons ici 11111, et nous sommes en additionnant cette avec 00100 que ce soit.
Si ces deux sont positifs, ça va.
Mais alors, si l'un des eux est négative, comme
disons que ce bit ici est celui qui est responsable
en vue de: Je vais faire un separate-- si celui-ci signifie que ce nombre ici
est positif.
Celui-ci signifie que ce nombre ici est négatif, non?
>> Mais alors, quand vous êtes va les résumer, vous
besoin d'une déclaration si disant oh si cela est 0,
alors mon somme sera quelque chose de différent, non?
Donc, il ya un peu de manière plus intelligente à faire
ce que l'on appelle le complément à deux.
Donc, fondamentalement, ce que nous faire est nous définissons moins 1
être la chose que si nous ajoutons à 1 nous donne 0.
Permettez-moi de répéter que.
Donc, disons que ce ici est 1.
Quelle est la chose que naturellement dans des nombres entiers positifs
ajouté à cela nous donne 0?
Que si nous essayons de l'ajouter à ce nombre?
Nous allons have-- OK, nous allons donc ajouter.
Nous allons avoir 1 plus 1 est 0, et il porte sur.
Et puis nous allons obtenir 0 nouveau.
Je m'y perds.
Et vous allez obtenir 0 et 0 et 0, et 0 et 0 et 0.
Beaucoup de 0 de.
>> À la toute dernière, nous ne sommes pas va être en mesure de l'emporter sur,
parce que disons que nous ne traitons avec un octet, si seulement 8 bits.
Donc, ce que l'ordinateur fait par défaut est juste oublie que [inaudible],
D'accord?
Voilà donc ce que l'on appelle le complément à deux.
Nous définissons simplement moins 1 à la chose ici que si vous ajoutez que de 1
vous donnerait 0.
Et qui est assez cool parce que nous ne faisons pas vraiment
besoin à la fin de la mise en œuvre un type de somme différente
selon que ce soit un négatif ou un nombre positif.
Est-ce logique?
>> Donc, une chose que nous faisons ici pour convertir
entre un positif et un négatif entier est ensuite nous retourner tout,
puis on ajoute 1 à ce nombre.
Si vous essayez de le faire vous-même sur une feuille de papier,
vous allez voir ce qui fait sens.
Mais si je prends ce nombre ici, ce sont cinq.
Donc, si je feuillette tout ici, 1, 1, 1, 1, 1.
Flip, flip, flip.
Et puis je ajouter 1 à elle.
Je vais avoir exactement moins 5.
D'accord?
>> Cela rend sorte de sens parce que si vous essayez de résumer ce que le nombre
que nous avions avant, qui était-- nous allons inverser tout cela à nouveau.
Il était de 101 et beaucoup de 0 de.
Si vous essayez d'ajouter ces deux nombres,
vous allez avoir exactement 0.
Dáccord.
Des questions?
>> PUBLIC: [Inaudible]
>> GABRIEL: Que voulez-vous dire?
>> PUBLIC: Négatif à positif [inaudible].
>> GABRIEL: Non, vous retournez et vous ajoutez 1 toujours.
Ouais.
OK, donc les caractères codés binaires aussi.
Nous avons table ASCII, comme vous a également vu dans la leçon, non?
Donc, il est fondamentalement une cartographie de choses.
Et là, je ne peux pas souligner assez que pour un ordinateur, et une 65
sont littéralement la même chose.
Donc, si je vous écris quelque chose comme char c est égal à un, je ne pouvais en même temps
il suffit d'écrire 65 ici, et il serait exactement la même, OK?
Il n'y a pas de différence que ce soit.
>> Nous avons tendance généralement à mettre caractères dans des variables de type.
Char, non pas parce qu'ils sont essentiellement fait pour cela, mais parce que
de convention humaine.
Mais vous ne pouvez traiter avec des nombres entiers à la place des variables de type char,
et vous serez amende.
La seule différence réelle entre un char c et un int i
est un entier qui dispose de quatre octets dans la plupart systèmes, tout en char a un octet.
Ils sont essentiellement la même chose en termes de données.
Alors, que va imprimer ici?
Ici, nous sommes l'impression d'un chiffre à l'aide printf avec un plus 1, et tout comme les entiers,
caractères peuvent se résumer, si caractères peuvent également être additionnées.
Donc, ceci est exactement 65 ans.
Donc, il va y avoir 66, et nous avons ici
65 ans et plus peu un moins grand A, qui sera, je ne sais pas vraiment.
Mais ce sera exactement l'écart entre les lettres majuscules
et et les petites lettres, de sorte nous allons faire un petit, non?
Ouais.
Donc, cela va imprimer un caractère qui est exactement celui-ci.
Bonne?
Des questions?
>> Ici, nous avons un tas de différent types pour les variables numériques.
Nous parlons déjà sur int.
Float est juste une façon to-- cela est vraiment drôle, parce que quand je ai appris
de programmer retour dans la journée avec Python, le premier programme je jamais
essayé d'écrire, je voyais qu'il y avait un Type appelé et un type appelé flotteur.
Et le flotteur était pour tous les nombres réels.
Alors je lui demande pourquoi devrais Je l'utilise toujours un int alors?
Parce que si je peux utiliser tous nombres réels, avec un flottant,
Je voudrais juste arrêter d'utiliser des entiers, non?
Étant donné que les valeurs réelles sont beaucoup comme plus générique.
>> Il se trouve que cela est pas le cas dans les ordinateurs
parce qu'ils sont essentiellement choses différentes.
Alors nombres entiers et décimaux, le opérations que vous faites pour eux
sont essentiellement différentes parce que de la façon dont ils sont stockés, OK?
Nous allons parler un peu peu plus à ce sujet dans une seconde.
>> Donc double est seulement un plus grand flotteur.
Habituellement, dans la plupart des systèmes, un flotteur est de quatre octets, comme un int.
Et un double est de huit octets.
A long long est en fait juste un symbole que vous ajoutez à un type comme int.
Vous dites long long int comme ça.
Long long int x pour le rendre plus.
Ainsi, dans la plupart des systèmes, qui donnera huit octets au lieu des quatre habituelles.
Et vous pouvez réellement tomber le , donc il peut juste dire long long,
et qui travaille trop, OK?
Vous pouvez aussi faire d'autres choses comme unsigned int, ou encore tout simplement non signé
fonctionne également.
Et cela ferait x une variable comme tout est positif,
de sorte que vous ne pouvez pas vraiment négatif numéros de la façon que nous avons vu ici.
Donc, suivant merveilleux le point et la précision flottante.
Voilà une des raisons pour lesquelles vous vouloir utiliser ints au lieu de flotteurs,
parce que ints sont 100% précis, non?
Il est exactement ce nombre.
Pour les points flottants, si vous dire réponse est égal à 1 sur 10--
Je arriver à avoir cette exacte programme ici, float.c.
Qui imprime à 20 décimales.
1 divisé par 10, et que est habituellement de 0,1, non?
Mais ici, si nous faisons flotteur et nous courons il,
on voit qu'il est pas exactement 0,1.
Il est quelque chose 0,149.
>> Et pourquoi est-ce?
Parce que vous ne pouvez pas représenter vraiment tous seule possible nombre réel dans la mémoire
car il ya indénombrablement beaucoup d'entre eux.
Donc, nous sommes techniquement seulement en mesure de représenter une quantité finie d'entre eux
avec une quantité limitée de données.
Mais il est vraiment intéressant.
Maintenant, cela soulève la question de savoir comment vous le feriez
aller de représenter ce avec des morceaux, non?
Alors, comment sont stockés flottants?
Avec entiers, cela a été facile.
Mais avec des flotteurs vous voulez afin de maximiser la portée,
et vous voulez être en mesure de représenter énormes et les numéros de minuscules comme
0.000001 en même temps.
Encore une fois, même jeu.
Est-ce que quelqu'un a une idée comment nous pourrions aller de représenter flotteur dans la mémoire?
Il suffit de jeter quoi que ce soit.
Oui, se il vous plaît.
>> PUBLIC: [inaudible] comme si elle était deux entiers et une
étant la [inaudible] et un être tout après la virgule.
GABRIEL: OK, cool.
Donc deux entiers différents.
Vous pouvez avoir 12.45, ainsi que 12 et 45 est.
Nice.
Qu'est-ce que vous ERE va dire?
La même chose?
Ouais?
>> PUBLIC: [Inaudible] notation où vous vous séparez la base.
>> GABRIEL: notation scientifique, ouais qui est généralement ce qui se passe.
Voilà donc ce que l'on appelle la mantisse.
Voilà ce qui est en fait la nombre, et ensuite l'exposant
est juste où la virgule est, non?
Donc cela va être quelque chose de la forme 1, 2, 3, 4, 5 fois 10
au moins quatre.
Je viens de réaliser that-- oui, exactement.
Et puis ce 10 au moins 4 est va définir où la virgule est, OK?
Au Brésil, nous utilisons des virgules.
Ici vous les gars Utilisez un point.
Donc un point.
>> Et c'est cool, parce que vous pouvez concentrer beaucoup de vos morceaux sur ce type
ici, sur la mantisse, et alors que ce va être votre précision réelle.
Et vous pouvez le faire soit en décimal ou dans le système à base de binaire.
Il existe différents les moyens de mettre en œuvre.
Questions?
Oui?
Public: Combien de places après la virgule [inaudible]?
>> GABRIEL: Voilà une question complexe, parce qu'il est jamais vraiment à 100% précis,
parce que comme vous le voyez ici, pour certains chiffres, il est 100% précis.
Je crois que si nous mettons 0,5 ici, ça va être 100% précis.
Ça va être 0,500000.
Donc, dans ce cas, il est parfait.
Mais dans d'autres cas, il est beaucoup moins parfaite.
Dans mon expérience, comme jusqu'à quatre, cinq décimales est assez précis.
Si vous utilisez un double, il va être de façon plus précise que celle, OK?
>> ROB BOWDEN: Donc, juste pour jeter un contexte plus à flotteurs,
Je me souviens jamais 100% comment la spec de flotteurs fonctionne réellement,
Mais je ne vous souvenez toujours qui flotte commencent à se salir.
Donc, l'idée est que lorsque vous avez vraiment, vraiment grands nombres ou vraiment, vraiment
un petit nombre, nous commençons de pire en pire
à différencier entre deux flotteurs proches.
>> Alors, comment je veux penser est avec virgule flottante imprécision,
il n'y a que deux flotteurs si je tente de les spécifier
en C, malgré le fait que ils sont différents chiffres,
ils vont être interprétées comme le même nombre,
parce que nous ne pouvons pas les stocker différemment.
Nous devons utiliser les mêmes bits.
Et quand nous arrivons à vraiment, vraiment grand nombre,
parler comme 10 à la 300 ou quelque chose, il est à ce moment
que 10 à la 300 ou 5 fois 10 à la 300
ne peut pas être différenciée à partir de 7 heures 10 à la 300.
Voilà donc une jolie grande différence entre les deux chiffres.
>> Mais alors, quand vous descendez les choses à la gamme normale,
vous avez tendance à être assez bon à différencier.
Et puis quand vous descendez vraiment petit, vous êtes également obtenir de nouveau assez mauvais.
Donc, comme tout un tas de 0.0000, il devient assez mauvais.
GABRIEL: Ouais, donc un petit mot.
Ne jamais faire cela.
Ne jamais essayer de comparer flotteurs en utilisant égaux égaux,
parce que même si elles sont presque même, presque le même pas est le même.
Donc, ce que vous faites habituellement est vous soustrayez eux, prennent la valeur absolue de cela,
et voir si cela est plus petit que 0,0001 ou quelque chose comme ça, OK?
Et cool.
Je sais que beaucoup de gens ont une certaine expérience en Java,
en particulier ceux qui ont fait AP informatique, droit?
Et Java est un langage que la plupart du temps par rapport à C,
il a un couple de très grandes différences.
Mais pour les boucles, et les FI, et des trucs comme que, ils sont tous la même syntaxe.
Je dois quelques programmes ici pour le montrer.
>> Ainsi, par exemple, un monde simple bonjour.
Ceci est Bonjour tout le monde en C, qui vous les gars sont certainement familiers avec,
et ceci et celui-ci est en Java.
Donc, en Java, nous avons cette public class, bonjour monde,
et public static void args principal, et les cordes.
Les arguments de chaîne vont à apparaître dans C très prochainement.
Mais il ne faut pas y aller encore.
Actuellement, nous avons ici vide, ce qui signifie que le principal est pas pris arguments.
Et puis nous avons System.out.println, et que l'est
sorte de l'équivalent de printf.
Ici, nous ne devons vraiment la barre oblique inverse n parce impression En fait pour vous.
Il ajoute une barre oblique inverse n à la fin de la ligne.
>> Mais si vous allez dans quelque chose comme un pour vous
peut voir qu'ils sont à peu près la même chose.
Donc l'initialisation, et la état, et la mise à jour
est-- me manquait un espace ici-- ils sont à peu près la même chose, sauf Java
a que quelques-uns plus haut niveau choses.
Ici, nous pouvons faire plus, je et Java sera automatiquement
faire de cette i ici, qui est un entier, dans une chaîne,
et puis ajouter la deux cordes ensemble.
Ici, dans C, nous devons faire le &% d.
La ligne ici, le pour ressemble exactement la même.
>> Et si nous regardons si, les ifs regarder aussi exactement le même, non?
Ainsi, les grandes différences réelles sont dans les choses que vous voyez ici.
Public static, vide, et public class puis si.
Donc, Java a ce qui est appelle une machine virtuelle.
Et il est très largement basée sur ce est appelé la programmation orientée objet,
qui est un très, très commun paradigme de programmation de nos jours.
Et cette chose de classe est ce que vous voyez, quelque chose de l'orientation de l'objet,
est de créer une classe, puis vous peut tirer des objets de cette classe.
On ne va pas parler trop beaucoup à ce sujet dans CS50,
mais qui est certainement quelque chose de vraiment cool,
surtout si vous voulez aller en développement web plus sophistiqué
à la fin du parcours, comme soumettre votre projet final
et certains cadres agréables et tout ça.
>> Donc, fondamentalement, l'idée est que vous ne veulent pas ré-implémenter quelque chose,
si vous créez quelque chose qui est très générique, comme la forme,
et puis vous créez formes différentes d'elle,
et ensuite à partir de chacun des ces formes, vous créez
des formes plus spécifiques de trois dimensions ou quelque chose comme ça.
Et ils ont ce qu'ils hiérarchie hériter des autres, de sorte
toutes les fonctions et tous les variables la grande forme a ici, tous ces
allez avoir, et tous ces éléments sont va avoir, et ainsi de suite et ainsi de suite.
Voilà donc l'idée de base.
>> C n'a pas, mais C ++ ne avoir ce genre de fonction.
Et Java est fortement influencé par l'orientation de l'objet,
voilà pourquoi vous voyez classe ici tout le temps.
Et l'autre chose est cette machine virtuelle Java.
Donc, je pense, est une idée très intelligente.
Alors, que les gens qui java inventé fait est
ils ne veulent pas compiler leur code deux fois
si elles devaient l'exécuter dans un environnement Windows, ou un Mac, ou Linux, si ce qu'ils font
est qu'ils courent littéralement quelque chose comme l'appareil,
mais vous ne voyez pas vraiment ce qui se passe.
Donc, ils courent une machine virtuelle à l'intérieur de votre ordinateur, qui
est fondamentalement comme un un mini système d'exploitation.
Et ce fonctionnement Le but de système dans la vie
est juste pour lancer ce qui est appelé byte-code.
>> Donc, au lieu de C, la façon dont nous compiler ce faire est si, et puis exécutez
./if.
Je oublié la barre oblique inverse dans.
En Java, vous feriez premier Java C à compiler, if.c.
Il est pas le point java C. Il.
Et puis vous avez à courir pas ./.
Vous obtenez ce nouveau fichier if.class, mais vous ne pouvez pas vraiment
exécuter if.class maintenant juste comme nous l'avons fait avant.
Ceci ne constitue pas un exécutable.
Vous avez à courir.
Vous devez le nourrir en un programme appelé Java,
et que ce programme est la machine virtuelle, et puis vous faites if.class, ou si.
Oui.
Et puis cela fonctionne.
Ok, donc ce genre est de la machine virtuelle passe.
C n'a pas que, si je devais mettre ce programme dans une machine Windows,
il ne serait pas travailler en C. En Java, il le fait.
Questions?
Laisser refroidir.
Voilà si l'article Super pour aujourd'hui.