>> [Jouer de la musique]
DAVID MALAN: Très bien.
Ceci est CS50, et cela est la fin de la semaine 2.
Je suis tellement désolé, je ne pouvais pas être là avec vous tous aujourd'hui,
mais vous êtes dans de très bonnes mains.
Permettez-moi de présenter Propre Rob Bowden de CS50.
ROB BOWDEN: Et bien sûr, puis nous avons de se moquer du fait
qu'il nous a envoyé un vertical vidéo et le montrer.
>> [LECTURE VIDÉO]
>> [Jouer de la musique]
>> [PAS]
>> -Ce Vidéo n'a pas avoir à regarder de cette façon.
Il aurait pu être évité.
Dites non aux vidéos verticales.
>> Vidéos -Vertical se produisent lorsque vous tenir votre appareil photo dans le mauvais sens.
Votre vidéo sera fin jusqu'à la recherche comme de la merde.
>> - [GRUNT]
>> -Il Ya de plus en plus les personnes dépendantes à faire des vidéos verticales tous les jours.
Il est pas craquer ou rien, mais il est encore vraiment mauvais.
Il existe deux types différents de les gens qui sont atteints de VVS.
Le premier groupe traite le Vidéos ils tirent comme des images.
Ils ne signifient pas de mal.
Ils ne comprennent tout simplement pas que tandis que vous pouvez transformer une photo,
vous ne pouvez pas vraiment tourner une vidéo.
>> [CRASH]
>> - [MONKEY SOUNDS]
>> -Le Autre groupe de personnes est qui ne donnent pas une [BLEEP].
>> Syndrome vidéo -Vertical est dangereux.
Les images animées ont toujours horizontal.
Téléviseurs sont horizontales.
Les écrans d'ordinateur sont à l'horizontale.
Les yeux des gens sont à l'horizontale.
Nous ne sommes pas construit à regarder des vidéos verticales.
>> -I Aiment vidéos verticales.
>> -Personne Ne se soucie de vous.
>> -Si De ce problème gauche décochée, vous aussi
va commencer à montrer quatre vidéos à la fois juste pour économiser de la bande passante.
>> Vidéos verticales -Letterboxed feriez être de la taille d'un timbre-poste.
>> -Et Elle se répandra partout.
Écrans de cinéma ont toujours horizontal.
Si les vidéos verticales deviennent acceptées, cinémas
devra être grand et maigre.
>> -Et Toutes les salles de cinéma le feriez avoir à se démoli et reconstruit.
Et au moment où ils ont été reconstruits, Mila Kunis serait vieux et laid.
>> -Les Oiseaux va planter en eux et mourir.
>> -We'll Tous deviennent raides cous de Looking Up.
>> -Et Ne siégera à la première rangée jamais.
>> -George Lucas sera re-libération étoile Guerres again-- l'édition maigre.
>> -I N'a jamais vraiment été en mesure de dire l'histoire que je voulais raconter.
Ce fut une grande chance pour moi de expérimenter avec une nouvelle technologie.
>> -Tu es un enfoiré.
>> -Chaque Fois un appareil mobile est utilisé pour enregistrer de la vidéo, la tentation est là.
Dis juste non.
Dire non à George Lucas.
Dites non aux vieux Mila Kunis.
Dites non aux vidéos verticales.
>> -Et Si vous voyez quelqu'un faire, dire, "vous n'êtes pas de tir ce droit fictif!"
>> [Jouer de la musique]
>> [FIN LECTURE]
>> [Applaudissements]
>> [SORTIE AUDIO]
ROB BOWDEN: --simple forme de cryptographie,
qui est essentiellement le cryptage et le déchiffrement des messages secrets.
Nous avons donc ici une très simple jouet.
Et l'idée est la bague extérieure tourne autour de la bague intérieure.
Et vous pouvez le voir, peut-être si je zoome dans, that-- il est difficile de voir.
Mais, comme, le nombre 1-- bien, ce qui bougeait.
>> Le numéro 1 est mappé à la lettre X, numéro 2 cartes à la lettre
J. incroyablement difficile ne pas sauter vers l'avant.
Lettre 2 maps à J. Numéro 3 maps à D. Donc,
avec cet anneau, vous pouvez donner un message à quelqu'un 1, 2, 3.
Pour une raison quelconque vous veux leur dire XJD.
Mais vous pouvez leur donner un certain message de numéros,
et aussi longtemps qu'ils ont cet anneau, ils peut décrypter ce que vous essayez de dire.
>> Donc, vous avez peut-être vu cette l'exemple particulier de la cryptographie
avant si autour de la saison de Noël vous avez regardé Une histoire de Noël.
Si vous ne l'avez jamais vu avant, puis juste
tourner sur TBS à littéralement tout moment la veille de Noël,
parce qu'ils montrent à dos à dos à dos à dos à dos toute la journée.
Et la vidéo pertinent est présent.
[LECTURE VIDÉO]
-Soyez Connaître à tout le monde que Ralph Parker est par les présentes
nommé membre de la Petite Orphan Annie Secret Circle
et a droit à tous les honneurs et les avantages survenant à celle-ci.
Little Orphan Annie signé.
Contresigné Pierre André à l'encre!
Honneurs et avantages déjà à l'âge de neuf ans!
>> [Criant de Radio]
-Allons.
Allons de l'avant avec elle.
Je ne pas besoin de tout ce que le jazz à propos de contrebandiers et des pirates.
Demain soir avec -listen l'aventure de conclusion
du Black Pirate Ship.
Maintenant, il est temps pour Message secret d'Annie
pour vous membres du Secret Circle.
Rappelez-vous les enfants, seuls les membres de Secret Circle Annie
peut décoder message secret d'Annie.
Rappelez-vous, Annie compte sur vous.
Réglez vos épingles à B2.
Voici le message.
12.
11.
2.
-Je Suis dans ma première réunion secrète.
>> -25.
14.
11.
18.
16.
>> Oh, Pierre est en grande voix ce soir.
Je pourrais dire que ce soir message était vraiment important.
-3.
25.
Voilà un message d'Annie elle-même.
Rappelez-vous, ne dites à personne.
>> -Cinq Secondes plus tard, je suis dans le seul chambre dans la maison où un garçon de neuf ans
pourrait s'asseoir dans l'intimité et le décodage.
Aha!
B!
Je suis allé à la prochaine.
E. Le premier mot est «l'être."
S. Il venait plus facile maintenant.
U. 25.
Voilà R.
-Allez, Ralphie!
Je dois y aller!
-Je Vais être juste en bas, Ma!
Whiz Gee.
T. O. «Soyez sûr de" - assurez-vous quoi?
Quel était Little Orphan Annie essaie de dire?
Veillez à ce que?
>> Essayez maintenant a obtenu d'aller!
Voulez-vous s'il vous plaît de sortir?
>> -Tous Droit, maman!
Je serai à droite!
Je me rapprochais maintenant.
La tension était terrible.
Qu'est-ce que c'était?
Le sort de la planète peut se bloquer dans la balance!
>> -Ralphie, Randy doit rentrer!
>> -Je Vais être dès la sortie, bordel de merde!
On y est presque!
Mes doigts volaient.
Mon esprit était un piège d'acier.
Chaque pore vibré.
Il était presque clair!
Oui.
Soyez sûr de boire votre Ovomaltine.
Ovomaltine?
Un commerciale minable?
Fils de pute.
>> [FIN LECTURE]
>> ROB BOWDEN: Voilà donc comment Ovomaltine concerne la cryptographie.
Fondamentalement CS50 juste annoncé Ovomaltine, pour que nous puissions
être un minable commerciale pour Ovomaltine.
Bien.
Alors maintenant, la science réelle de l'ordinateur.
Rappelez-vous le lundi nous nous sommes quittés plongée plus profondément dans les cordes.
Donc, nous avions affaire à la chaîne "Zamyla."
Et nous constations le fait que nous pouvons traiter
"Zamyla" comme une séquence de caractères.
Et rappelez-vous que nous avons appris la notation de support.
Donc, si cela était stocké dans une chaîne "s", puis
si nous disions s tranche 0, ce serait indiquer le Z. lettre majuscule
Et si nous disions s étrier 1, que indiquerait la première a minuscule,
et ainsi de suite jusqu'à l étrier 5, ce qui indiquerait la dernière a.
>> Maintenant, rappelez-vous que le longueur de cette chaîne est de 6,
mais les indices sont dans la chaîne 0 à 5, Z à travers cette dure un.
Donc cela correspond maintenant à une image plus grande de la mémoire de votre ordinateur, de votre RAM.
Donc, quelque part, le programme qui vous utilisez votre ordinateur
doit se rappeler Zamyla quelque part en mémoire.
Donc, je peux avoir un bénévole?
Oui s'il vous plaît.
Et quel est ton nom?
>> DEAN: Dean.
>> ROB BOWDEN: Dean?
Ravi de vous rencontrer, Dean.
Donc venir ici, et nous allons devoir vous dessinez
sur notre bel agencement astucieux de la mémoire.
Maintenant, je plais à penser de la mémoire comme une longue bande d'octets,
mais seulement à des fins d'affichage nous allons juste ne gauche à droite, de haut en bas.
D'accord?
>> Donc, je vais vous montrer une program-- Getstrings.c.
Et ainsi tout ce programme est faire est de demander quatre cordes
à partir de l'utilisateur Impression GetString puis
quoi que première chaîne était entré.
Nous ne tenons pas compte de deux à quatre.
D'ACCORD.
Donc ici quand maintenant-- Je première demande s1.
Donc, vous êtes l'ordinateur.
Et vous implémentez GetString.
Donc, vous demandez une chaîne à partir moi, et je le dis, OK, Dean.
Donnez la chaîne "Dean."
>> Donc, quelque part en mémoire vous besoin de se rappeler "Dean."
Donc, écrire dans la mémoire quelque part.
Parfait.
D'ACCORD.
Alors maintenant, nous avons S2.
Et S2 sera une demande de GetString.
Donc, je vais entrer dans une chaîne.
Je vais entrer dans "Hannah."
Alors entrez "Hannah" quelque part dans la mémoire.
Ouais.
A-H.
>> OK, maintenant s3.
Et ça va être un autre demander à GetString.
Et donc maintenant entrer "Maria".
Bien.
Et puis il ya une dernière demande à GetString, s4.
Donc, je ne sais pas.
Que diriez-vous nous allons avec anticonstitutionnellement.
Entrez donc que dans la mémoire.
Ouais.
Il suffit donc de faire "Rob."
>> D'ACCORD.
Alors maintenant, pourquoi ne explain-- vous laissez ces espaces?
Pourquoi avez-vous ce champ vide espace ici, ici, et ici?
Oui.
Donc remarquer quand je vais d'imprimer s1-- si nous
eu la course "Hannah" droit à côté de "Dean"
comment savons-nous quand la chaîne "Dean" se termine?
Donc, l'impression de la s1 de chaîne peut avoir vient d'être imprimée "DeanHannahMariaRob"
si elle n'a pas la moindre idée quand «Dean» se termine effectivement.
>> Bien.
Donc en mémoire la façon dont nous avons réellement représenter cette fin d'une chaîne
est avec barre oblique inverse zéro.
Donc, cet espace est exactement ce que nous voulions.
Il devrait être une barre oblique inverse zéro.
Ce sera une barre oblique inverse zéro, et ce sera une barre oblique inverse zéro.
Et vous pouvez avoir un prix fabuleux pour être un bénévole parfait.
Prenez une boule de stress!
>> D'ACCORD.
Donc, ce caractère barre oblique inverse est zéro comment nous indiquer la fin d'une chaîne.
Il est comment, quand un programme donné veut imprimer une chaîne,
il est how-- souviens que nous avons appris la fonction strlen de la semaine dernière?
La longueur des chaînes?
Il est comment longueur de la chaîne est capable de déterminer combien de temps est une chaîne.
Il ne cesse de l'itération au cours des caractères
jusqu'à ce qu'il trouve le backslasher caractère zéro.
Donc, la chose importante à réaliser sur le caractère barre oblique inverse zéro
est il est représenté par tous les zéros dans les bits.
Alors que cette remarque est distincte du caractère zéro.
Donc, le caractère zéro, si vous vous souvenez dans l'exemple qu'il a donné à la fin
de conférence où les personnages carte to-- comme des cartes du capital de A à 65.
Minuscules de A à 97 cartes.
B minuscules serait 98.
Ainsi, le nombre 0 cartes to-- Je ne sais pas savoir sur le dessus de ma tête.
44 ou 45.
Quelque part dans cette région.
>> Donc le caractère 0 est un nombre réel.
Mais nulle barre oblique inverse Cartes à tous les bits à zéro.
Donc, il ya une distinction entre zéro barre oblique inverse,
que nous appellerons le terminateur null.
Il ya une distinction entre barre oblique inverse zéro et le caractère zéro.
>> Bien.
Donc, parler un peu plus sur les chaînes.
Alors que nous voyons ici est de savoir comment cette il serait mis en mémoire.
Donc cette idée de chaînes comme une séquence de characters-- afin que l'ordinateur officielle
sciency terme pour la séquence est un tableau.
Nous voudrions donc appeler une chaîne un tableau de caractères.
Et il ya effectivement d'autres données types que nous pouvons faire des tableaux sur.
>> Donc, pour motiver ce, regarder un exemple.
Nous l'appellerons ages0.c je vais copier et coller notre modèle.
D'ACCORD.
Donc, dans ce programme que nous voulez faire est de saisir l'âge
de trois étudiants du cours.
Donc, nous savons l'int age-- et maintenant je vais dire 0.
Donc, vous voudrez peut-être dire age1, mais à des fins que nous verrons très prochainement,
Je vais dire int age0 égale getint.
Donc, le même appel à getint que nous avons utilisé I
ne pas arriver à être incitant disant: "donnez-moi l'âge."
Mais demande tout simplement.
>> Et age1 égale getint.
Et int age2 égale getint.
Donc, encore une fois, trois étudiants, mais en fin de compte les indices variables
sont age0 travers age2.
D'ACCORD.
Donc, ce programme fera tout nous voulons avec age0, age1 et age2,
mais ce programme en fin de compte fonctionne pour trois élèves.
>> D'ACCORD.
Alors maintenant, si je veux quatre étudiants?
Eh bien, je vais devoir revenir dans mon code, modifier le commentaire,
et maintenant nous avons un int age3 égale getint.
D'ACCORD.
Alors, qui voit le problème ici?
Quel est le problème avec ce genre de configuration?
Ouais.
Nous allons donc créer un variable pour chaque élève.
Maintenant, cela fonctionne, mais finalement ce que si je maintenant
dis, "Je veux saisir l'âge de huit élèves ou étudiants 16
ou les cependant de nombreux étudiants de les centaines d'étudiants dans CS50
ou les milliers d'étudiants sur le campus ou les milliards de personnes dans le monde?
Donc, finalement, ce ne est pas durable.
Chaque fois que vous voyez vous-même la copie et le code coller comme ça,
vous devriez sentent généralement qu'il ya une meilleure façon.
>> Donc voilà où nous introduisons une déclaration de tableau.
Ainsi, lorsque vous déclarez un tableau, voici ce que le format général
va ressembler.
Nous allons dire le type.
puis nous allons donner le nom de ce tableau,
tout comme nous définissons une variable donnée.
Et puis, finalement, nous utilisons cette notation de support à nouveau
mais dans un contexte différent à partir de comment nous utilisions auparavant.
>> Donc, ici cela ressemble à une normale déclaration de variable que nous avons vu.
Donc, nous avons vu int x point-virgule avant.
Eh bien maintenant, nous pourrions voir quelque chose comme int x 5 crochets.
Et de mettre cette idée dans la Getint programme que nous have--
afin que nous puissions mettre en œuvre ce de la même façon.
>> Disons que dans CS nous avons tendance à utiliser n le nombre de quelque chose.
Donc, ici, nous allons stocker quatre étudiants.
Et maintenant, nous pouvons dire int âge support n-- pas tout à fait l'obtenir yet--
à déclarer un tableau de quatre étudiants.
Alors, comment cela va regarder dans la mémoire sera similaire à cela.
Désactivez cette.
Et nous allons avoir quelque part dans memory-- Je vais mettre ce là-haut.
>> Donc, quelque part en mémoire.
Un deux trois quatre.
Nous avons quatre entiers dans une rangée pour cette gamme de quatre entiers.
Donc, pour le moment, ce qui est le taille de l'une de ces boîtes?
Ouais.
Il est quatre octets.
Il est 32 bits.
Alors maintenant, ce qui est différent à partir de la matrice que l'on
vu plus tôt, le tableau de caractères.
Dans une chaîne chaque boîte était uniquement un octet, parce qu'un personnage est un seul octet.
Mais avec un tableau d'entiers, chaque boîte doit être de quatre octets dans l'ordre
pour adapter un entier entier.
Voilà donc ce que un tableau de quatre ints ressemblerait.
>> Et puis retour à code.
Maintenant, nous voulons effectivement magasin entiers dans ce tableau.
Alors maintenant, cela est une très, très, très modèle commun qui va à un certain point
devenu la mémoire musculaire.
Donc int i est égal à 0.
i inférieur à n.
i plus plus.
Tranche d'âge i est égal getint.
>> Donc, cette boucle, ce format, vous devriez être très utilisé pour.
Donc, ce qui est généralement la façon dont nous allons itérer sur presque toute tableau.
Maintenant, remarquez ce genre de explique pourquoi depuis le début
nous ne disposions pas des boucles pour aller int i est égal à 1, i inférieur ou égal à 10.
La raison en est qu'à partir de zéro rend ce travail bien avec les tableaux.
Donc, les tableaux sont indexées zéro.
Si ce tableau est de longueur 4, les indices vont de 0 à 3.
>> Ainsi, à travers le premier itération de cette boucle
nous allons être mise en âge support 0 égale à un appel à getint.
Donc, tout ce que je trouvais pour entrer au clavier.
Lors du second passage, nous sommes mise age1 égale à getint.
Troisième passage, age2.
Finale age3 passe.
Ainsi, si dans la première passe de la boucle Je rentre le numéro 4 sur le clavier,
puis nous allons insérer un 4 ici.
Si lors du second passage je rentre 50, nous allons mettre un 50 ici.
Sur la troisième passe je pourrais entrez négative 1, 1 négatif,
et enfin si je rentre et 0-- souviens maintenant que cela était index à trois.
>> Après on boucle de retour, i est va être incrémenté à 4.
i est plus petit que n, ce qui est quatre.
Et nous sortir de la boucle.
Donc, ce qui serait le problème?
[Inaudible]?
AUDIENCE: [inaudible]
>> Oui.
Donc, le tableau n'a que quatre places, ce qui signifie que les indices 0 à 3.
Donc, si tel était le cas, je le ferais prendre la valeur 4 à un certain point.
tranche d'âge 4 sera couchait quoi qu'il arrive à être plus ici
à ce que je dois dire, entrez 6.
Ce paramètre va être présent à 6.
>> Mais nous ne savons pas ce qui est ici.
Cela ne veut pas la mémoire que nous avons eu accès.
Donc, si vous vous souvenez de la conférence précédente,
il a été une impression des valeurs de Zamyla et à un moment donné il a frappé cette segmentation
à redire. Donc, vous serez probablement voyez de nombreuses erreurs de segmentation que vous
mettre en œuvre certaines des séries de problèmes.
Mais ceci est un des moyens par lesquels vous pouvez rencontrer une segmentation
faute, lorsque vous démarrez accès mémoire dans les moyens que vous ne devriez pas être.
Donc, on n'a pas eu accès à ce lieu et de ce bogue.
>> Donc, ce qui est mieux.
Maintenant, il ya encore une petite problème avec ce code.
Et voilà que nous sommes essentiellement toujours coincé à quatre étudiants.
Maintenant, si je veux utiliser huit étudiants, OK.
Il est pas une si grande affaire.
Je peux y aller, changer le commenter et modifier n.
Maintenant cela va fonctionner avec huit élèves.
Si je compile cela et courir cela, il va montrer moi--
il va demander des nombres entiers de huit étudiants et il fonctionnera.
Mais il est loin d'être idéale avoir besoin de recompiler le programme à chaque fois
Je souhaite modifier le nombre d'étudiants que je veux entrer dans les âges pour.
>> Ainsi, la retouche sur ce, comme nous le verrons ici-- nous sommes
va demander le nombre de personnes.
Ici, nous avons un certain nombre de personnes dans les chambres
ou d'âge des personnes dans la salle.
Mais nous allons demander le nombre des gens dans la salle de l'utilisateur.
Voilà donc le même do-while exacte boucle que nous avons vu auparavant.
Il est exactement la même faire-while que vous
peut être mise en œuvre sur l'ensemble du problème.
Donc, tant que ils sont entrer un n inférieur à 1,
donc il doit y avoir au moins une personne dans la salle.
Tant qu'ils sont entrer un n inférieur à 1,
alors nous allons continuer à demander à nouveau.
S'il vous plaît entrer le numéro des gens dans la salle.
Maintenant, une fois que nous avons le nombre de personnes dans le room--
donc je pourrais saisir qu'il n'y sont 200 personnes dans cette salle.
Alors ici nous allons à venir et de déclarer un tableau de taille 200.
Nous déclarant tableau qui est assez grande pour accueillir 200 âges.
En descendant, il est la boucle que vous obtiendrez très utilisé pour.
Donc itération sur ce tableau, affecter à chaque emplacement
en ce que matrice un nombre entier, et puis finalement nous sommes ici
simplement obtenir un exemple d'itération sur ce tableau, pour ne pas affecter des valeurs,
mais pour accéder valeurs.
>> Donc, ici nous voyons que nous disent, un an à partir de maintenant,
personne% i sera% vieille i ans, où le premier% i est i + 1.
Donc i est la variable d'index.
Et le second% i va être le valeur stockée dans le tableau âges plus 1.
Donc, ce plus 1 est juste parce que nous sommes saying-- cette plus 1, plus 1 i âges.
Cette plus 1 est juste parce que nous sommes dire, un an à partir de maintenant la personne
sera cette vieille.
>> Alors pourquoi est-ce i + 1?
Pourquoi nous avons une plus 1 là-bas?
Ouais.
Oui.
Alors rappelez-vous les tableaux sont indexées zéro.
Donc, si nous imprimons ce pour quelqu'un vient de lire la sortie,
alors probablement qu'ils veulent voir quelque chose comme personne une, personne numéro un,
sera 20 ans.
Personne numéro deux sera de 15 ans.
Ils préfèrent ne pas voir personne numéro zéro est de 15 ans.
>> Donc cette compilation et juste voir ce que il semble like-- Créer un espace.
Assurez âges compile.
Courir les âges.
Nous voyons nombre de personnes dans la salle.
Je vais donc dire qu'il ya trois personnes dans la salle.
Âge de la personne numéro un, disons 15, 20, 25.
Et maintenant, je vais le dire dans un an maintenant, ils seront 16, 21, 26.
Voyons ce que cela fonctionne avec un n qui est égal à trois pas.
Donc, si je dis nombre de personnes est 5, l'un, deux, trois, deux, un, un an à partir de maintenant
ils seront deux, trois, quatre, trois, deux ans.
Donc, je pouvais tout aussi facilement pu être n 10.000.
Maintenant, je serai assis ici pour tout un en entrant les âges, mais cela fonctionne.
>> Alors maintenant, quelque part dans la mémoire nous avoir un tableau de taille 10000,
En fin de compte 40.000 octets, car il ya
quatre octets pour chacun de ces entiers.
Donc, il ya un tableau de 10.000 taille où l'on peut
stocker les âges de ces 10.000 personnes.
Bien.
Questions sur tout cela?
Ouais.
Que faire si vous avez donné un nombre négatif?
Voyons ce qui se passe.
Donc, dans ce numéro de case-- particulier des gens dans la salle, un négatif.
Il a rejeté cette, parce qu'ici nous nous trouvons
à la manipulation du fait que, si n est égal à moins de celui que nous allons demander à nouveau.
Si vous essayez de déclarer une tableau de taille négative,
il généralement ne fonctionne pas.
>> Essayons donc.
Ignorons quel que soit valeur qu'ils entrée pour n
et dire simplement âges int négative.
Voyons voir si il compile même.
Je ne suis pas sûr.
Non.
Donc âges est déclaré comme un tableau avec une taille négative.
Donc, dès le départ, il reconnaît un tableau ne peut pas être d'une taille négative et la rejette.
Maintenant, si nous ne traitons cette boucle do-while correctement,
si nous étions ne pas vérifier si n est inférieur à 1--
disons que nous venons n'a pas eu du tout
et à la place nous suffit de saisir un nombre entier.
Peu importe ce qui est entier, nous déclarons un tableau de cette taille.
>> Ainsi, le compilateur ne peut pas éventuellement se plaindre maintenant.
Si je compile this-- de sorte qu'il ne peut pas se plaindre,
car il ne peut pas savoir que je suis va saisir un nombre négatif,
qui pourrait être invalide.
Pour tout ce qu'il sait, je pourrais Saisissez un nombre positif,
ce qui est parfaitement valide.
Donc, je pense, si je rentre négative 1 personnes dans la salle, Segmentation fault.
>> Donc d'accord.
Ajoutons donc ce retour juste garder ce qu'il était à l'origine.
Donc, assurez-âges.
Maintenant, si je veux essayer un négative age-- nous allons donc
disent qu'il ya cinq personnes dans la salle.
Âge de la personne numéro un est négative 4, de trois personnes
est nul, personne three-- OK.
Donc, ici, à partir de maintenant, le nombre de personnes par an on sera négative de 3 ans.
Alors sans doute n'a pas de sens.
Mais cela est juste parce que la recherche le code tout ce que nous faisons
est demandant getint.
>> Maintenant, si nous avions eu le Fonction GetPositiveInt
ou nous avions tout simplement fait ce sorte de même boucle while là-bas,
alors ce serait fonctionnera parfaitement.
Mais dans ce cas particulier cas, nous faisons tout simplement pas
arriver à être la manipulation des valeurs négatives.
D'autres questions sur les tableaux?
D'ACCORD.
>> Donc, nous avons maintenant vu les tableaux.
Et nous allons avoir besoin d'utiliser ce pour les arguments de ligne de commande.
Donc, en problème posé two-- Je sais que beaucoup d'entre vous
pourrait encore travailler sur le plateau de problème l'un, mais le problème réglé deux est à venir.
Dans problème réglé deux, vous allez besoin d'être face à chaînes, des tableaux,
et les arguments de ligne de commande.
>> Alors, quels sont les arguments de ligne de commande?
Maintenant, vous pouvez voir ici une petit teaser pour exactement ce qui est
va se passer.
Nous voyons int main, argc inc, crochets chaîne de argv.
Donc, d'abord nous allons essayer d'interpréter ce qui essaie de dire.
Maintenant OK.
>> Donc, à la ligne de commande, vous devriez être s'y habituer à certaines de ces commandes
maintenant, et vous avez probablement courir cd dans le terminal avant.
Donc, si nous disons cd pset1, vous savez que cela devrait
être changer dans le répertoire de pset1.
>> Maintenant, remarquez que vous avez jamais écrit un programme comme ça avant.
Chaque programme que vous avez écrit, vous devez exécuter, disons, dot slash Mario,
dot slash gourmand, et puis il peut vous demander pour l'entrée.
Maintenant, ce ne est pas ce que changement de répertoire fait.
Lorsque vous exécutez cd, puis il ne dit pas, quel répertoire que vous voulez en cd?
Au lieu de cela, vous venez de dire, cd pset1, et il va juste dans le répertoire de pset1.
>> Pareillement nous avons d'autres exemples.
faire bonjour.
Lorsque vous exécutez faire, il ne dit pas alors, quel programme voulez-vous faire?
Vous venez de dire, à la ligne de commande make bonjour.
>> Move est un autre exemple.
Celui-ci nous allons le mario.c déposer d'un répertoire.
Alors maintenant, nous savons avec cet exemple nous sommes vraiment passer deux arguments.
Il ya mario.c comme premier argument, et dot est le deuxième argument.
Et puis quand vous exécutez make, vous voir que vraiment longue commande line--
que vraiment longue commande imprimé à la ligne de commande.
Alors que la durée de cette command-- est juste une courte partie,
mais maintenant nous avons trois arguments de ligne de commande.
Dot tiret zéro, bonjour, et hello.c.
>> Ce sont donc en ligne de commande arguments, des arguments
que vous êtes de passage à la ligne de commande de sorte qu'il
n'a pas à être invité lorsque vous exécutez le programme.
Il serait frustrant si quand vous avez exécuté Clang il dit, "OK,
qui program-- qui fichier-vous compiler?
Bonjour c.
Que voulez-vous drapeaux voulez entrer? tableau de bord o.
Quaimerais-tu le fichier d'être appelé?
Bonjour.
Non, il suffit de lancer clang dash o bonjour hello.c.
>> Donc, en regardant en arrière à ce.
Maintenant argc argc-- est comtes d'arguments.
Il est le nombre de ligne de commande arguments entrés à la ligne de commande.
Eh bien, techniquement argv-- v signifie vecteur,
ce qui signifie fondamentalement tableau.
Mais vous pouvez l'ignorer.
Argv-- nous avons chaîne argv, donc parenthèses chaîne de argv.
Donc, ceci est une autre forme de crochets que vous avez jamais vu auparavant.
Support de sorte que nous avons vu notation quand nous l'avons dit,
comme, chaîne s est égal Zamyla.
s tranche 0 accède au Z. caractère
>> Nous avons également vu parenthèses lorsque nous avons dit int âges encadrent 5.
Qui a déclaré un tableau de taille 5.
Voici donc une version de la supports nous ont pas vu avant.
Donc, ce genre de chaîne que argv serait complètement familier
que ce serait juste une chaîne.
Maintenant, les parenthèses indiquent ce qui est un tableau.
Donc supports chaîne de argv moyens que argv est un tableau de chaînes.
Maintenant techniquement une chaîne est un tableau de caractères.
Donc, cela est maintenant un tableau d'un tableau de caractères.
Mais il est beaucoup plus facile de penser ce que tout un tableau de chaînes.
>> Alors, pourquoi les supports pourraient être vide?
Comme, pourquoi ne pouvons-nous dire, support 5, le support n?
Ouais.
Nous ne savons pas combien de entrées là-bas vont être.
Donc, si nous regardons l'exemple clang, nous disons Clang tableau de bord o bonjour hello.c.
Dans ce cas particulier, il arrive être trois arguments de ligne de commande.
Et donc la brackets-- nous allons voir dans une seconde il ne serait pas trois.
Il serait techniquement quatre.
Mais les supports, nous le ferions par exemple, il ya trois ans.
Mais maintenant, si nous avons regardé déménagement mario.c dot, les supports
nous voudrions mettre deux en eux.
>> Et il ya beaucoup de commandes qui avoir un nombre variable de ligne de commande
arguments.
Alors, que cette version de la la notation crochets indique
est que argv est un tableau de chaînes.
Mais nous ne savons pas combien de cordes sont dans ce tableau.
Et comment savons-nous alors comment de nombreuses chaînes sont dans le tableau?
Voilà toute l'argc point.
argc nous dit combien de temps est argv.
>> Donc la dernière chose à garder à l'esprit est que, techniquement,
la commande elle-même compte parmi des arguments de ligne de commande.
Donc cd pset1, il ya deux arguments de ligne de commande.
Le programme en lui-même, cd, puis la partie argument réel de celui-ci, pset1.
Tout programme que vous avez écrit à ce jour a eu la dot de l'un de ligne de commande
slash Mario.
Voilà le seul argument en ligne de commande.
>> Alors maintenant, en regardant clang dash o bonjour hello.c.
Alors, quelle est argc?
4.
Donc argc est 4.
Clang, support de façon argv 0 est clang.
argv support 1 est dash 0.
argv étrier 2 est bonjour, et argv support 3 est hello.c.
Ok, donc des questions sur cette, et puis nous allons examiner quelques exemples programmatiques.
>> D'ACCORD.
Donc, nous allons jeter un oeil à hello3.c.
Donc, ce doit être familier de l'un des premiers exemples de c
nous avons eu où nous voulons juste dire bonjour monde, mais maintenant, ce qui est plus général.
Nous sommes donc ici de dire bonjour barre oblique inverse n argv la tranche de 1%.
Notice-- sorte jusqu'à ce point, cela est ce que mon fichier de modèle a ressemblé.
Je devais int main (void), et alors je serais faire quelque chose dans la fonction principale.
Maintenant, au lieu, une fois que nous commençons à traiter avec des arguments de ligne de commande,
nous avons besoin de déclarer un forme différente de principal.
>> Donc en regardant hello3 à nouveau, la principale va
de prendre deux arguments maintenant-- int argc, le nombre d'arguments de ligne de commande,
et la chaîne argv parenthèses, le réel cordes entrés à la ligne de commande.
Donc, je vais changer cela modèle pour refléter ce fait.
Maintenant, chaque fois que vous écrivez un programme, si vous ne faites pas
besoin de prendre de la ligne de commande arguments, alors utilisez simplement int main (void).
Mais maintenant, quand vous écrivez programmes d'arguments de ligne de commande, ce qui
vous allez faire pour le problème mettre two-- alors maintenant que vous courez
programmes qui ont besoin de prendre arguments de ligne de commande,
vous devez avoir principale de cette forme.
>> Donc ici-- cela est la grande utilisation de l'argument en ligne de commande.
Donc impression argv 1.
OK donc nous allons compiler et exécuter ce programme.
Assurez hello3.
Compile.
Dot slash hello3.
Et disons, "Rob."
Bonjour Rob.
Si je dis «bonjour Maria," bonjour Maria.
Bonjour Maria.
Hannah dit encore, "bonjour Maria, "parce que je ne suis pas
faire quelque chose avec notre argv 2.
Argv 2 serait désormais "Hannah."
Argc serait 3.
Que faire si je l'ai fait?
Donc bonjour nulle.
>> Il a brièvement touché sur le fait que, techniquement, GetString
pourrait retourner null, mais nous allons obtenir un beaucoup plus dans ce qui est en fait nulle.
Mais le prendre comme une question de fait qu'aucun est généralement mauvais.
Nous avons fait quelque chose de mal si il est l'impression de «bonjour nulle."
Et la raison que nous avons fait quelque chose de mal est-- bien,
quand je courais dot slash hello3, argc est 1.
Cela signifie donc que la longueur de argv est une.
Si un tableau est de longueur 1, le seul indice valable est nulle.
Et alors voici argv 1 est à l'extérieur la gamme de ce tableau.
Il était semblable à avant quand je essayé pour stocker 6 en dehors de la fin du tableau.
Donc, je suis en train d'accéder à quelque chose en dehors des comtes de argv,
et nous obtenons nulle.
>> Donc une meilleure version de cela, une amélioration,
est la vérification explicitement argc.
Donc, si argc est égal à 2, cela signifie que nous avons couru quelque chose comme dot slash hello3 Rob.
Et il va imprimer "bonjour Rob."
Si argc ne correspond pas à 2, alors il va juste
d'ignorer ce que vous mettez à l'argument de ligne de commande
comme arguments de ligne de commande.
Ou si vous ne mettez pas du tout, il est aller juste d'ignorer cela et dire simplement,
"salut toi."
>> Donc cette compilation.
Assurez hello4.
Et courir hello4.
Exécution de cette façon, ce qui devrait être imprimée?
"Salut toi."
Salut toi.
Qu'en est-il hello4 Rob?
"Bonjour Rob."
Et enfin, bonjour Rob Maria est juste "bonjour Vous" à nouveau,
parce que vous ne l'avez pas vraiment entrer quelque chose qu'il ne devrait.
Vous avez saisi plusieurs noms que ce qu'elle pourrait manipuler,
donc ça par défaut à le bonjour vous comportement.
Donc questions sur cette?
Ou arguments de ligne de commande?
>> OK, donc jeter un oeil à un quelques autres exemples de l'utilisation de
ligne de commande arguments-- premier nous avons argv tiret 1 point c.
Donc les commentaires donner ce ce programme devrait être fait.
Mais remarquez maintenant-- cette boucle, cela correspond à la configuration exacte
Je disais avant.
Il nous arrive juste pour être argc utilisant à la place de n.
Maintenant argc est vraiment le n.
Il est la longueur du tableau argv.
Ainsi sont itération sur l'argv tableau printf-ing chaque valeur de argv.
>> Donc, si je fais cela.
Assurez argv 1.
Il compile.
Dot slash argv 1.
Just Running cela, il gravures parsèment slash argv 1
depuis ce fut la seule ligne de commande argument-- le nom du programme.
Il y aura toujours au moins: argc ne peut pas être inférieur à un,
car il y aura toujours au moins être le nom du programme à exécuter.
Donc, argv 1 Rob imprimer argv 1 puis sur la nouvelle ligne "Rob."
>> Ainsi, dans la première itération de cette boucle, i est 0.
Argv 0 est le nom du programme.
Dot slash argv 1.
Et puis argv 1 est mon premier l'argument de ligne de commande, qui est Rob.
À ce stade, nous sommes égaux à ARGC.
Nous sortir de la boucle et nous avons terminé.
Donc cela va fonctionner pour un arbitraire nombre d'arguments de ligne de commande.
Remarquez qu'il imprime argv 0, argv 1, 2 argv, argv 3, 4 argv.
Et il n'y a pas argv 5.
argc est égal à 5.
Donc, à argc-- au i est égal à 5, nous sortir de la boucle.
D'ACCORD.
Autant de questions à ce sujet avant que nous regarder un exemple plus complexe?
>> Donc argv 2.
Bien.
Donc, nous sommes toujours l'impression les arguments de ligne de commande.
Mais maintenant, nous avons remarqué emboîtée boucle.
Quel est donc ce fait?
Donc la première boucle est fait exactement ce qu'il a fait avant.
Nous sommes encore en boucle sur chaque argument en ligne de commande,
mais maintenant cette deuxième loop-- nous avons également vu quelque chose comme ça avant.
Quand il a été itération sur Zamyla imprimer Z-A-M-Y-L-A.
Donc cette deuxième boucle pour int j est égal à 0, n est égal à strlen de argv support i.
>> Donc, nous devons penser d'abord pour the-- marchons à travers.
Disons penser ce que l'ordinateur serait faire si je courais ce programme comme juste dot
slash argv tiret 2.
Donc, si je courais ce code, puis argc va être égal à 1.
Et chaîne argv-- il est seulement va être un index dans argv,
et que ça va être égal à dot slash argv 2-- le nom du programme.
>> OK, alors maintenant je égale à 0, i moins de 1, i plus plus pour int j est égal à 0,
n est égal à strlen de argv tranche 0, donc en la première itération de cette boucle. argv
0 support est slash dot argv 2.
Alors, quelle est la longueur de cette chaîne?
Eh bien, dot slash A-R-G-V Dash 2.
Donc strlen de ce sera 8.
Donc, j est égal à 0, n est égal à 8.
Tant que j est inférieur à 8, j ++.
Et avec ce que nous allons être l'impression d'un seul caractère, qui
est argv support i SUPPORT j.
>> Donc, la seule i est nul.
Nous avons encore un seul l'argument de ligne de commande.
Dans cette première itération de la boucle for, nous sommes
va être l'impression argv support 0 0 support.
Et puis j va incrémenter.
Et nous allons à l'impression argv 0 support support 1.
Et puis argv 0 support étrier 2.
>> Alors ceci est notre première rencontre des tableaux multi-dimensionnels.
Se souvenir de ce que je disais plus tôt argv qui est techniquement
un tableau de tableaux de caractères.
Donc ici si je disais quelque chose comme chaîne s est égal argv support i,
support de la j, puis je l'ai dit, ce serait accomplir la même chose.
Maintenant, vous avez vu de support j avant.
Cela est juste accéder à la j-ème caractère de cette chaîne.
Donc, avec cela, nous obtenons la caractère j-ième de la argv i-ième.
>> Donc, ce qui devrait en fin de compte cette sortie?
Assurez argv 2.
Il compile.
Dot slash argv 2.
"Rob Maria Hannah," et nous donner une certaine marge.
Ainsi, nous voyons que cette sortie est point sur sa propre ligne et slash
sur sa propre ligne et sur sa propre ligne.
Il a l'impression de chaque caractère individuel
de chaque argument de ligne de commande.
Ensuite, entre les deux, à cause de cette nouvelle ligne
nous sommes l'impression ici-bas, dans entre eux, il va imprimer une nouvelle ligne.
>> Donc, ce qui est similaire à le tableau de bord de argv avant 1,
qui chaque imprimé l'argument de ligne de commande,
mais maintenant nous sommes l'impression les arguments de ligne de commande
et ensuite à travers chaque itération caractère de chaque argument de ligne de commande
pour obtenir cette sortie.
D'accord?
Donc questions sur cette?
>> Une chose à noter est que ligne de commande arguments--
de sorte qu'ils sont séparés par des espaces que vous auriez naturellement attendez qu'ils soient.
Donc, une chaîne peut avoir des espaces.
Il est pas super important, mais si je voulu le troisième argument en ligne de commande
d'avoir un espace en elle, alors je pourrait dire quelque chose comme ça.
D'accord?
Donc, ce a encore plus maintenant que trois de ligne de commande de puits arguments-- 4.
Dot slash argv tiret 2, Rob, Maria, et Hannah Bloomberg.
D'ACCORD.
Questions sur ce sujet?
>> Il ya rien de spécial sur le caractère de l'espace.
Il se trouve être que la ligne de commande traite le caractère espace
que la façon dont vous vous séparez chaque argument.
Bien.
Alors problème ensemble two-- vous allez être
en regardant la cryptographie à clé secrète.
Ainsi, par exemple similaire à celui nous avons vu de A Christmas Story,
vous allez être mise en œuvre de certains algorithmes qui, étant donné un message,
vous allez être en mesure crypter un message pour que
que seul quelqu'un avec ce secret touche, avec cette bague de décodeur,
devrait être en mesure de décrypter.
>> Voilà donc l'édition standard.
Vous allez être la mise en œuvre deux versions différentes.
Si vous arrive de prendre un coup d'oeil au pirate edition-- maintenant,
nous allons donner vous une chaîne de ce genre,
ce qui représente un mot de passe crypté.
Donc, votre objectif est de comprendre ce que le mot de passe est déchiffrée.
Maintenant, cela est réellement comment les mots de passe sont stockées dans un grand nombre d'ordinateurs,
et il stocke ce juste chaîne de caractères aléatoires.
Vous devez comprendre comment obtenir de cette chaîne de caractères aléatoires
à ce que le mot de passe original était.
>> Enfin, après cette jeu de problème, vous devriez
être capable de comprendre ce que cela signifie.
Donc, vous allez apprendre à décrypter ce genre de chaîne aléatoire.
De même, si vous vous souvenez de la semaine 0, vous pourriez avoir vu cette URL.
Et vous devriez être en mesure de décrypter cette suite.
Vous pourriez ne pas être heureux quand vous décrypter et cliquez sur le lien.
Bien.
Voilà pour aujourd'hui.
Donc, vous voyez la semaine prochaine!
>> [Electronic Music JEU]