[Lecture de musique] ALLISON BUCHHOLTZ-UA: Salut tout le monde. Bienvenue à votre première section CS50 officiel. Comme vous pouvez le voir ce est section CS50-like, juste à tirer vers le haut notre ordre du jour. Alors, qui suis-je, car je suis sûr vous vous demandez tous. Je suis votre TF. Je ne suis pas juste un étudiant aléatoire qui est passer pour votre TF. Et je vais passer par genre de sections ont iront, attentes que nous avons, ressources, ainsi de suite et ainsi de suite. Nous allons parler de tableaux, ASCII fonctions, les arguments de ligne de commande, et il est pas ici, mais Je vais aussi aidé vous pensez genre de travers votre prochaine pset pour cette semaine. Je suis sûr que vous serez tous d'apprécier. Donc, première question-- qui suis-je, en plus de votre TF exubérante ici. Je suis Alison Buchholtz-Au. Ceci est ma deuxième année TFing CS50. Je également CS51 TF au printemps. Vous pourriez voir encore, il si vous décidez de le prendre. Je suis aussi un PAF, de sorte que toute Freshmen-- et si vous n'êtes pas un étudiant de première année, ceci est ma troisième année comme un collègue conseiller. Je suis très bien versé dans vous conseiller sur la vie et les cours dans CS et pas dans CS. Je suis Informatique concentrateur. Je suis une personne âgée dans Adams House, meilleure maison. Et avant je suis passé à CS ma deuxième année printemps, Je suis en fait un ingénieur biomédical. Je voulais aller à l'école Med. Je voulais être un chirurgien traumatologue. Et cela a complètement changé depuis que je suis CS50. Je pris mon cours de deuxième année automne. Il était ma première introduction à CS jamais. Je faisais partie des 78% d'entre vous qui avait aucune expérience venant, et il a complètement changé ma vie. Et maintenant, je travaille à Microsoft, et votre belle TF. Et CS50 est probablement l'un des meilleures expériences que je l'ai eu ici à Harvard-- la fois de prendre la classe et être en mesure d'aider enseigner aux étudiants comme vous. Donc, je suis vraiment excité que vous êtes tous ici. Dans le cas où vous êtes venu en tard, il ya des bonbons, qui vous devriez vous sentir libre de venir grab, ou envoyer quelqu'un d'autre à saisir pour vous. ce est OK. Je ne veux pas manger ça. Ma chambre a assez de chocolat, de sorte y'all devrait essayer de finir ça. Je sais qu'il ya 100 pièces, mais comme, 04 heures le lundi, Je pense que tout le monde pourrait utiliser un peu de sucre. Donc, tous ceux qui sont officiellement dans ma section aurait eu un e-mail de moi avec mon numéro de téléphone, email address-- hésitez pas à me ajouter sur Gchat, hésitez pas à me ajouter sur Facebook, et aussi pour le reste d'entre vous, vous pouvez me contacter ici. Il ya deux H de. Tout le monde fait toujours comme deux L ou deux C. Deux est dans le nom H. Sinon, il va rebondir, et Je ne vais pas à obtenir votre e-mail. Donc hésitez pas à me contacter, à me contacter à tout moment. Je ne peux pas revenir à vous dans les 24 minutes mais je vous promets de revenir à vous dans les 24 heures. Si vous appelez-moi une demi-heure avant votre pset est dû, vous être comme, Je ne sais pas ce que je fais Allison. Aidez moi. Je vais vous calmer, mais à la fin de la journée, si tu me traites de une demi-heure avant votre pset est due à rien d'écrit, Je vais être comme, bien, peut-être il est temps d'utiliser que la fin de la journée. Je vais donc répondre à toutes vos demandes dans un délai très rapide. Mon téléphone est généralement attachée à mes mains. Je réponds généralement beaucoup plus rapide que 24 heures, mais je ne peux que garantie une réaction de 24 heures. Bien. Alors, pourquoi sommes-nous ici? Aussi, si vous avez des questions à tout moment, se il vous plaît faites le moi savoir. Je parle beaucoup. Je parle vite, mais se il vous plaît hésitez pas à me interrompre. Cela me donne une marge de manoeuvre aussi bien. Donc sections sont un temps pour nous de vraiment juste plongée dans, obtenir des mains sur l'expérience, à passer par les sujets dont nous avons parlé en classe ou dans les matériaux d'étude qui nous vous recommandons de vous les gars en ligne. Et nous allons effectivement passer par certaines de ces ressources dans un peu. Donc, quelques notes sur la section support. CS50-- l'une des choses qui rend un de mes cours préférés est le sentiment que vous n'êtes jamais seul. Nous avons une équipe de plus de 100 des gens qui sont là pour vous aider. Nous avons des heures de bureau Du lundi au jeudi. Donc, il ya tellement de gens qui aimer la classe autant que je fais et qui sont vraiment ici parce qu'ils veulent être ici. La plupart d'entre nous sont des étudiants, et ce est comme une cinquième classe en plus pour le reste de notre travail. Et il ya beaucoup de travail, mais nous le faisons parce que nous l'aimons, et nous aimons vraiment à vous enseigner et aider à partager notre enthousiasme pour ce sujet et cette classe. Ainsi se il vous plaît profiter. Venez discuter avec nous. Je me sens seule quand mes élèves ne me parlez pas, donc si vous voulez, venir passer du temps avec moi. Ça va être génial. Ainsi, l'article est évidemment l'un de vos plus grandes choses. Nous allons passer par des choses que vous avez appris en cours, faire quelques brefs exemples quand nous avons le temps, et généralement de type avoir une idée sur les choses vous devriez penser sur votre problème réglé. Shorts-- combien de personnes regardé la vidéo de votre scratch court? Tout le monde me reconnaît? Ce sont donc les très grand. Vous devriez vraiment regarder ceux. Beaucoup de travail a été mis en eux. Et ils sont juste destinés à être bouchées morceaux pour vous de regarder juste pendant trois ou quatre minutes et obtenir une meilleure compréhension d'un concept. Marchez throughs-- comment beaucoup de gens ont regardé les visites virtuelles pour les précédents? Zamyla est incroyable, non? Comme, je voudrais être Zamyla parfois. Donc certainement utiliser vos visites virtuelles. Elle sera le décomposer en petits morceaux, morceaux. Et quand vous avez ces énormes spécifications de vos ensembles de problèmes, ça va être très important pour être en mesure de trouver juste un endroit pour démarrer et travailler lentement à travers elle. Très bien, nous avons aussi étude50, qui est study50.harvard.edu, je crois. Vous pouvez simplement Google étudier, et il va monter. Ceci est l'un des meilleures ressources que nous avons. Il est PowerPoint avec notes et pratiquer des problèmes pour vous avec des solutions qui vous peut réellement marcher à travers. Donc, si jamais vous voulez plus pratique, plus que ce que nous faisons dans les sections ou plus que vos ensembles de problèmes, cela est vraiment un endroit que je vous encourage à aller. Il a été construit l'été dernier par certains de mes très bons amis. Et il est incroyable. En fait, un grand nombre de diapositives que je vais utiliser pour la section viendra de étude50. Il ya donc beaucoup de la TF utiliser. Et enfin, comme je susmentionné, les heures de bureau. Si vous rencontrez des problèmes aux devoirs, vous êtes avoir des ennuis avec un concept, venir à des heures de bureau. Allez-y tôt dans la semaine si vous le pouvez. Sortez de la quad, car il est un peu loin. Personne aime se promener là-bas. Mais il est à votre avantage, parce que vous êtes allez avoir tous ces facteurs de transcription, [Inaudible] vous entourer. Et surtout maintenant, Juste un conseil, jeudi sont très froid en ce moment dans Mather parce que vos psets sont dus le jeudi. Et sachant veut utiliser encore vos jours de retard. Donc, si vous rencontrez des difficulté avec les concepts, il ya beaucoup de facteurs de transcription qui sont là pour vous aider. Alors venez à Mather jeudi. Si vous voulez me voir, Je vais être là. Je suis généralement faire mon propre travail, parce que personne ne veut de mon aide. Alors, venez nous voir. Venez nous rencontrer à mi-chemin. Alors, combien de personnes ont assisté à conférence ou regardé en ligne? Combien de personnes sont allées super-section de la semaine dernière? Laisser refroidir. Voilà effectivement un bon nombre. Combien d'entre vous ont lu votre spec pour cette semaine, pour votre ensemble de processeurs? Oh, je suis fier de vous les gars! Plus de bonbons pour y'all. Bon, alors ce que nous entendons "Nous rencontrer à mi-chemin», est cet article est vraiment seulement va être super utile pour vous si vous venez d'avoir lu votre spécification pour votre pset. Parce que quand je passe par un aperçu des choses que vous devriez regarder dehors pour, il ne va pas faire comme beaucoup de sens si vous je ne sais pas ce que votre problème réglé va être vous demande de faire. Si vous ne venez pas à l'article, évidemment Je ne peux pas être d'une grande utilité pour vous. Je ne vais pas le prendre personnellement si vous ne venez pas à ma section en ce moment, mais certainement vous devriez. Si vous ne pouvez pas, regarder en ligne. Ils sont là pour une raison. Mine sera là. Comme vous le constatez, nous sommes en cours d'enregistrement, donc il sera là pour vous les gars. En outre, aller à lectures-- qui est évidemment où vous obtenez le début de votre matériel ici. Donc, je vais certainement essayer de vous aider autant que je peux, mais je ne peux que vous répondre à ce jour. Vous devez sorte de nous rencontrer à mi-chemin. Grading-- donc, vous tous qui a reçu un courriel de moi, vous êtes ma section officielle. Je serai de classement de vos psets. Et je veux juste dire, une chose que vous devriez vraiment faire attention à sont les commentaires. Les commentaires sont souvent plus utiles que le score réel, nous vous donnons. Et les commentaires sont en fait où je passe beaucoup de mon temps quand je suis classement. Donc, je vous serais reconnaissant si vous les lire. Et ils sont en fait la façon dont vous allez pour en savoir plus sur le design et le style et les choses qui sont un peu moins clair et net. Donc vraiment attention à ces commentaires. Si vous avez des questions à leur sujet, ou des questions sur votre score, se il vous plaît venir me parler soit avant l'article, Je vais probablement traînais dans le hall, ou par la suite. Si vous souhaitez planifier un-à-un les réunions sur la façon vous pouvez aider à améliorer plus tard ensembles de problème, laissez-le moi savoir. Et puis juste un couple de conseils pour vous les gars. Donc, une des choses les plus importantes Je souligne toujours à ma section lorsque vous apprendre à coder est à écrire des choses sur papier. Si vous avez un plan de match pour où votre code doit aller et ce qu'il faut faire et il est décomposé en petits morceaux de pseudo code que vous avez écrit sur, vous allez être moins susceptibles de faire des erreurs de syntaxe ou créer une boucle qui se ne pas avoir un autre. Si vous savez où vous êtes aller ensemble, vous êtes moins susceptibles de faire ces minuscules erreurs qui parfois vous prendre heures à fixer, parce que vous êtes comme, où suis-je raté cette tranche? Sur cette note, se il vous plaît utiliser Style50. Surtout quand vous êtes aller à des heures de bureau, si votre code est tout basculé d'un côté, il est la politique de cours que nous pouvons dire, fixer de sorte qu'il ressemble à Style50 dit il se doit, et puis nous allons vous aider. Donc, il va vous rendre la vie plus facile. Il va nous faciliter la vie. Tout le monde est heureux. Tout le monde obtient de meilleures notes. Est-ce pas ce que nous voulons tous? Donc, écrire des choses sur le papier avant vous touchez jamais votre ordinateur. Parlez des choses à un niveau élevé, et assurez-vous que vous savez où vous allez. Et si vous n'êtes pas sûr, s'asseoir avec quelqu'un et les guider étape par étape ce que votre code est censé faire. Et neuf fois sur dix, vous serez comme, oh, je oublié une condition si ou je oublié une virgule ici ou Je mets à jour ce mal variable. Voilà donc mes conseils pour réussir. Donc, puisque près de la moitié d'entre vous regarde comme vous avez assisté à la section superbe, Je vais juste très passer brièvement en revue les boucles, qui ne figuraient pas sur notre ordre du jour initial. Mais ils sont vraiment importantes. Et donc je vais genre de vitesse par ceux avant d'entrer dans notre section réelle. Avant de le faire, est-il tout questions-- logistique, personnellement, il est tout ce que vous voulez à savoir sur moi ou sur section ou classe en général? Toutes les bonnes? OK, cool. Belle. Donc loops-- Vous devriez tous reconnaître ces pièces à partir de zéro. Donc boucles sont fondamentalement juste une façon pour nous de faire quelque chose un certain nombre de fois, une partie répétée action fondée sur une certaine condition. Nous avons donc trois types différents. Nous avons pour la boucle, tandis que, et faisons-en. Donc, pour loops-- nous avons juste une très disposition générale ici d'une boucle for. Et ce qui est excellent pour quand vous savez comment plusieurs fois quelque chose doit exécuter. Lorsque nous parlons de la d'autres boucles, vous voir pourquoi il en est une distinction importante. Mais pour les boucles sont pour quelque chose ensemble. Vous savez que vous pouvez calculer le nombre ou si vous connaissez le nombre de fois que vous veulent ce répété au début. Donc si vous voyez ici, nous avoir juste une sorte générale de cadre squelette pour une boucle ici. Donc, pour initialisation, ce est là vos variables sont initialisées. Avec Mario, je suis sûr que vous avez fait quelque chose comme int i est égal à 0. Voilà où cela pourrait se produire en bleu. Vous avez votre état, qui est ce qui se vérifie à chaque fois. Si cette condition est vraie, alors le reste du code est exécuté. Ensuite, il va courir again-- et demander. Et puis nous avons mise à jour, où vous mettez à jour votre variable. Donc, encore une fois, avec comme Mario, je suis sûr vous avez fait quelque chose comme i plus plus. Ainsi, chaque fois que la boucle Ran, je me suis mis à jour afin que quand nous sommes arrivés il contre certaines conditions, il a été en train de changer. Parce que si vous venez avoir une variable statique, si elle exécute la première fois, il est aller juste pour exécuter infiniment. Donc, vous devez vous assurer que vous mettre à jour votre variable correctement. Et nous avons aussi tout un représentation visuelle il. Tout le monde bien? Pour les boucles. Aurait vu ces derniers dans votre pset. Laisser refroidir. Alors, voici juste un exemple simple. Imprimer cette CS50 est! 10 fois. Et si nous avons notre initialisation, comme on le voit là, avec int i est égal à 0, pour i est inférieur de 10, et i plus plus. Et il va imprimer que 10 fois. Ainsi, alors que loops-- boucles while sont super quand vous ne le faites pas nécessairement faut savoir combien de fois il est va mettre à jour au début. Vous avez quelques-unes condition pour que vérifiée. Et ce pourrait être quelque chose comme while-- Prenons un exemple tiré de votre pset. Si Mario, vous essayez de entrer un nombre négatif. Droit? Vous deviez ré-inviter votre utilisateur. Ainsi, vous pouvez dire, bien, si les entrées de l'utilisateur quelque chose de moins que zéro, re-rapide les. Et je suis sûr que cela pourrait avoir été quelque chose que certains d'entre vous utilisée dans votre code. Donc, il est une chose simple. Vous avez tout, certains condition qui est vérifié chaque fois que le code va exécuter. Si elle est évaluée à vrai, nous courons. Sinon, nous ne le faisons pas. Et ce qui est vraiment quelque chose que je important-- pense que David a parlé dans lecture-- sont les accolades. Tout ce qui est dans le accolades est ce qui est exécuté. Si vous avez oublié ceux accolades, il va seulement à la ligne directement après le tout a été exécuté. Donc, si vous avez trois choses qui sont censées de se produire lorsque cette condition renvoie true, et vous ne disposez pas de ces accolades, seulement la première chose qui va se passer. Donc, être très conscients de où vous mettez vos accolades. Si vous vous en tenez à Style50, ce sera certainement vous aider. Laisser refroidir. Donc, ceci est un compte à rebours de 10 à zéro. Et comme vous le voyez ici, on initialise certains compteur à l'extérieur de celui-ci. Une chose qui est différent est nous ne sommes pas initialiser notre variable dans notre boucle while. Il est initialisé à l'extérieur de celui-ci. Nous sommes tout simplement en train de mettre la condition pour notre temps. Donc dans ce cas, il est tout comptage est supérieur à zéro. Et nous imprimons ce que notre compte est, et puis nous décrémentons notre variable. Et qui est aussi une autre chose à remarquer. Notre mise à jour ne se fait pas dans que la première partie de la boucle while. Il sera effectivement arriver dans les accolades, le corps de votre texte. Alors ne-tout loops-- boucles do-while sont parfaits pour validation de l'utilisateur. Ainsi, certains d'entre vous pourraient avoir également utilisé dans votre pset. Vous pouvez dire, faire, comme, demander à l'utilisateur pour l'entrée. Et puis tout, comme le entrée est inférieure à un certain nombre. Donc, pour un cas explicite avec Mario, il serait faire printf, entrez un nombre entier, et puis un certain nombre entier égal getint. Et puis ça va réellement exécuter ce code en premier. Vous avez en fait une sorte de nombre entier. Et puis, vous pourriez dire, tandis que entier qui est inférieur à zéro. Alors qu'est-ce qu'il va faire est qu'il est va exécuter au moins une fois. Il va vérifier l'état. Si la condition est vrai, il va courir à nouveau. Donc boucles do-while sont grand pour la validation de l'utilisateur, parce que vous connaissez le code va exécuter au moins une fois, alors qu'avec tout en boucles, vous n'êtes pas il est garanti que va exécuter une fois. Il va vérifier l'état d'abord et ensuite décider de l'exécuter, tout un do-while volonté exécuter le code premier et puis de vérifier si vous avez besoin de le répéter. Est-ce que cette distinction donner un sens à tout le monde? Dáccord. Laisser refroidir. Donc dans ce cas, ce genre est de ce que je parlais, Cette nouvelle invites jusqu'à ce que vous obtenir un nombre positif. Nous savons donc que printf "Entrez un nombre positif" et en fait pour qu'il sorte que entrée se fera au moins une fois. Si l'utilisateur est mal et maintient entrer une valeur négative, qui sait combien de fois il va exécuter. Mais ce code est garanti d'exécuter au moins une fois. Et qui est pourquoi il est grand pour valider une entrée. Et vous allez utiliser que un peu. Tout droit, des questions à ce jour? Nous sommes tous bien? Je parle trop vite? Nous sommes bons? Dáccord. Impressionnant Donc, nous allons aller de l'avant et parler de tableaux. Laisser refroidir. Donc, les tableaux sont essentiellement seulement des structures de données qui nous permettent de stocker choses du même type. Donc si jamais vous avez un tableau, il est soit juste avoir ints ou il est juste d'avoir flotteurs ou il est juste d'avoir les caractères. Tu ne vas pas avoir un int avec char avec un flotteur avec un double. Une chose. Les tableaux sont une seule taille, ou ils sont juste un type. Nous avons donc ici un tableau de taille trois par trois nombres entiers à l'intérieur. Ils pourraient flotteurs, mais nous sommes va dire qu'ils sont entiers. Donc, une chose à réaliser est que les tableaux sont de taille prédéfinie lors de l'initialisation entre eux, et ils ne sont pas easily-- puisque vous êtes tous moins à l'aise, vous devriez juste de les considérer comme ne pas être capable de s'étendre dans la taille. Cependant gros vous vous apprêtez votre tableau au début, qui est la taille ça va de rester, car les tableaux sont des blocs continus de mémoire. Et quand vous les gars obtenir en un peu plus de la façon dont la mémoire est réellement mis sur disques et dans le tas et la pile, ça va faire un peu plus de sens. Mais vous pourriez penser comme, il est juste une rangée de places sur votre disque. Et vous ne pouvez pas garantir qu'il n'y a va être l'espace libre après. Vous pouvez initialiser un tableau de trois, puis peut-être vous initialiser un autre tableau de cinq plus tard, et il est juste après. Donc, si vous deviez aller comptant passé trois dans cette première matrice, vous seriez en train d'écrire sur quelque chose d'autre. Donc tableaux soient: pour vous les gars, juste de les considérer comme une taille fixe. Donc, la création d'un array-- vous allez avoir besoin de faire ce un peu. Ainsi, de la même manière que nous avons structure générale de notre pour les boucles, nous avons une belle général la structure de notre tableau. Parce qu'ils sont d'un type, tout le éléments d'un tableau sont d'un type, vous devez initialiser ce qui est le type. Donc, comme vous le voyez ici, nous avons une joli petit type de données de support. Donc, si nous créons un int tableau, qui sera int. Si nous créons un omble tableau, ce sera l'omble. Si nous créons une chaîne tableau, ce sera la chaîne. Et puis le nom de votre réseau, tout ce que vous voulez qu'il soit. Alors peut-être qu'il est les résultats des tests ou peut-être il est peut-être étudiants ou il est bonbons. Quoi que vous décidiez de nommer votre tableau, qui est ce que ça va être. Et puis entre parenthèses, vous aurez avoir la taille que vous voulez. Alors, sommes-nous stockons 10 élèves ou sommes nous stockons 15 types de bonbons? Qu'est-ce pas. Ainsi, dans notre exemple, nous créons un tableau de taille trois, que vous les gars voir ici sur la droite. Et quand on initialise premier elle, tout est mis à zéro. Il est donc juste pensé de comme une ardoise vierge. Nous avons tous ces espaces, nous avons tous ces boîtes que nous pourrions mettre nos données dans, mais ils sont tout simplement vide pour le moment. Donc, si nous voulons réellement affecter ces valeurs, nous le faisons en tant que droit en vertu ici montre. Donc, vous avez tout ce que le nom de votre tableau est et ce que vous voulez indice. Donc, l'indice se réfère seulement à, comme, ce créneau que nous cherchons à. Et une chose importante à noter est que les réseaux sont indexés zéro. Donc, si nous voulons que le premier espace dans la mémoire de notre tableau, ça va être zéro. Si nous voulons que le deuxième, ce sera un. Si nous voulons que le troisième, ce sera deux. Ainsi de suite et ainsi de suite. Qui est aussi la raison pour laquelle, de façon classique, quand nous faisons pour loops-- je suis sûr vous les gars se demandaient pourquoi allons-nous commencer à 0 contre 1? Tout cela parce que lorsque nous passons en utilisant des tableaux, il fait correspondre correctement. Donc, si vous voulez itérer dans un tableau, il fait beaucoup plus de sens à fais i vaut 0, parce que nous savent que correspondra à la première place dans la mémoire. Tout le monde bien avec qui? Laisser refroidir. Et puis sur le fond ici est juste une autre façon d'initialiser un tableau. Vous avez toujours votre le type de données et le nom, mais au lieu de réellement mettre une taille là, vous pouvez juste faire des parenthèses vides. Et puis avec ces bouclés bretelles en bas, il vous suffit de saisir les données que vous voulez séparées par des virgules. Et qui va automatiquement dis, OK, je vois que vous avez trois choses dans ces accolades. Donc, je sais que je dois attribuer trois blocs de mémoire et de stocker celles-ci. Ainsi, la première version que vous pouvez utiliser si vous demandez votre utilisateur d'entrer valeurs afin que vous puissiez parcourir le tableau et ask-- obtenir des int pour les saisir. Si vous connaissez les valeurs d'avance, il fait beaucoup plus de sens d'utiliser la deuxième façon. Mais dans la plupart des cas, vous pourriez ne pas savoir ce que ces valeurs vont être. Laisser refroidir. D'autres questions? Très bien. Donc, si un accès elements-- de grandes choses au sujet des tableaux est qu'ils sont aléatoires accès, ce qui signifie que vous ne pas avoir à regarder à travers chaque bloc. Si vous savez que vous veulent ce qu'il ya dans le bloc deux, vous pouvez simplement dire, donnez-moi bloc de deux. Et voilà pourquoi ces indices sont si importants, et voilà comment on accède effectivement. Donc dans ce cas, comme nous l'avons vu lors de nous avons été l'attribution de valeurs, dans une avant, nous avions le nom et le indice nous voulions d'accès, de droit? Donc, de la même façon, voilà tout nous faire pour réellement tirer que les données sur. Nous avons le nom et nous avoir l'indice que nous voulons. Donc dans ce cas, la boucle ici-bas au fond, tout le monde sait ce qu'il fait, ce que ce serait imprimer? Mmhmm? Exactement. Alors oui, il est tout simplement itérer. i est égal à zero-- nous pouvons marcher dans le code juste rapidement. i est égal à zéro, i est inférieur que trois à ce stade, non? Alors que les check out. Et nous disons, OK, impression f Quelle que soit la température i. i est nul ici lorsque nous avons itérer, si nous allons à cette première place, et nous disons, OK, 65 est le nombre que nous voulons imprimer. Donc, il va imprimer 65 et puis faire une nouvelle ligne. Je vais mettre à jour, de sorte qu'il imprime 87. Il met à jour à nouveau, et il va imprimer 30. Tout le monde cool? Impressionnant. Bien. Alors, voici une sorte de chose que je disais comment vous pouvez garder une trace de Le score de quelqu'un et pourquoi vous devez utiliser la première titre d'initialiser au lieu de cette seconde manière. Et cela va juste à travers. Et remarquez que nous avons une classe de taille de 30. Et nous initialisation de ce tableau d'entiers qui est de la taille 30. Et puis nous sommes itération à travers et nous sommes demander à l'utilisateur d'entrer scores pour chacune d'entre elles et puis l'assigner à un endroit spécifique de la mémoire quelque part dans ce tableau. Cool? Cela fait-il sens à tout le monde? Mmhmm? Donc hashtag définir la taille des classes 30 est une directive de préprocesseur, ce qui signifie simplement qu'il gets-- il a de faire comme le processus de compilation. Vous pouvez penser que ce en tant que variable globale. La façon dont nous le faisons, il est typically-- il permet à votre script pour être plus facilement changé. Donc, disons que la taille de notre classe va tout à coup de 30 à 15, si je ne l'avais pas défini de cette façon, je le ferais avoir à passer par toute mon programme et changer tous les cas de 30 à 15 ans. Mais avec cela, je reçois de changer place, et les changements d'autre de tout. Si jamais vous voulez faire un hachage définir dans un cas où vous garder la trace de certaines définir le nombre de scores pour une classe ou vous utilisez un numéro qui sera utilisé, comme, tout au long d'une très longue programme, il est mieux définie que, au début de sorte que si jamais elle change, vous obtenez de changer de place au lieu de 100. Oui? L'ÉLÈVE: Entre le faire et juste déclarant [inaudible] sur le haut. ALLISON BUCHHOLTZ-UA: Donc il a à voir avec efficient-- il est un peu en dehors de la portée de ce que nous pouvons couvrir dans cette section. Il doit faire plus avec efficacité et comment les choses réellement travailler dans le processus de compilation. Si vous voulez vraiment savoir à ce sujet, je suis heureux de vous envoyer un e-mail avec des ressources à ce sujet. Hash définir tend à être pratique pour les choses. Et comme vous le code plus, vous genre de apprendre les nuances quand vous devez utiliser un mondiale contre le hachage définissent. Mais pour le moment, vous ne devez pas vraiment à se soucier, il est que la réponse courte. Tout le monde bien avec qui? Et aussi, si vous voulez à utiliser une table de hachage définir, il est vraiment important de noter que le nom doit être en majuscules. Nous ne sommes pas seulement faire CLASSES être dramatique. Il devrait en fait être en majuscules. Laisser refroidir. Autre chose là-bas? Nous sommes bons? Belle. Bienvenue. OK, alors je veux vous les gars pour jeter un oeil à cela et voir si vous pouvez trouver le bug. Je vais vous donner un indice. Il est quelque part dans cette boucle for. Mmhmm? L'ÉLÈVE: Doit être inférieur ou égal à 2. ALLISON: Donc il pourrait être inférieur ou égal à 2, ou il peut être inférieur à trois. Et quel est le raisonnement pour cela? ÉTUDIANTS: La [inaudible], 0, 1, 2. ALLISON: Exactement. Ainsi, dans un tableau de taille n, nous seulement avoir des indices de n moins 1. Laisser refroidir. Et puis nous pouvons être vraiment fou et obtenir des tableaux multi-dimensionnels. L'un des problèmes quand je l'ai pris dans mon tableaux ans requis multi-dimensionnelles, et je pense que l'un d'entre eux pourraient nécessiter cette année, alors soyez à l'aise. Enveloppez votre tête autour de lui maintenant. Il reviendra hanter vous, mais d'une manière cool. Ainsi, vous pouvez vraiment juste penser des tableaux multi-dimensionnels comme des tableaux de tableaux. Ainsi, vous pouvez sorte de penser à ce sommet ligne que le premier bloc de mémoire. Et celui-ci est le deuxième bloc de mémoire, et la dernière ligne est la troisième bloc de mémoire. Et dans ce cadre, il ya un tableau. Mais bien sûr, il est plus facile pour décrire ce genre. Donc vous l'initialiser la même façon. Ceci est un caractère tribunal de trois par trois. Donc, vous avez trois rangées et trois colonnes. Nous représentons cette façon. Et vous voulez accéder à la De même, colonne par ligne. Et 1,1 comme nous le voyons ici. Nous assignons un zéro, zéro là-haut. 2,0 et 0,2. Donc, vous voulez bien accéder eux-- si personne ne l'a jamais fait l'algèbre linéaire, de la même façon que vous accédez à un élément une matrice, elle est la même idée ici. Ainsi, vous pouvez relier retour aux mathématiques. Vous ne devez pas vous inquiéter trop beaucoup de ça maintenant. Il est bon d'avoir l'exposition, de savoir que vous pouvez le faire. Vous pouvez créer une fou number-- vous pouvez créer des tableaux est fou tout ce que je vais dire. [Inaudible] Il est un peu fou, mais il est vraiment cool. Impressionnant. Et puis, si nous avons un exemple ici. Il calcule une longueur de la chaîne. Alors, comment beaucoup de gens savaient que les chaînes que vous utilisez ne sont que des tableaux de caractères? OK, ouais. Alors vous les gars pensez peut-être que vous ne l'avez pas tableaux utilisés avant, mais tout moment vous utilisez getString dans le Bibliothèque CSView, vous êtes en fait juste demander un tableau de caractères. Et nous nous occupons de tout que dans le back-end pour vous. Mais vous avez été en utilisant tableaux puisque vous commencé. Vous ne savais pas encore. Et chaque fois que vous avez un tableau de caractères ou un tableau qui est le stockage d'une chaîne, la dernière chose est toujours ce qui est appelé un terminateur null, ce qui est ce droit ici. Et qui est à la fin de chaque mot que vous stockez. Donc, si nous voulons comprendre la longueur d'une chaîne, on peut dire, Eh bien, vous savez, la le contenu de ce bloc est pas égale à notre terminaison nulle. Cela signifie qu'il ya une certaine caractère là que nous avons fait soucier que cela fait partie du mot. Vous augmentez votre longueur. Et puis, quand nous obtenons réellement à la fin du mot, il va mettre fin et il va revenir notre longueur pour nous. Mmhmm? L'ÉLÈVE: Est-ce que l'espace compter que le terminateur nul? ALLISON: Donc, un espace est pas un terminateur nul. Donc si vous avez un espace multiple-- est en fait une valeur spécifique ASCII. L'ÉLÈVE: Quelle est la exclamation égal à nouveau? ALLISON: Donc, ceci est ce que vous appelez. Si jamais tu me entendez dans les heures de bureau, Je l'appelle toujours, comme, Bang égale. Donc Bang est pas. Donc, ce ne sont pas égaux. Donc, si vous essayez de voir si quelque chose est faux, Vous savez toujours faites, quel que soit Bang la variable est, et si elle est fausse, il évalue à vrai et vous peut faire des trucs cool avec ça. Plus sur cela plus tard. Laisser refroidir. Tout va bien là-bas? Impressionnant. Alors maintenant, il est temps de vos gars à travailler, puisque je vous ai parlé. Donc, je veux que vous créez simplement un tableau avec les nombres entiers un, deux, trois, et puis les faire imprimer. Vous ne devez pas faire, comme, principal, blah, blah, blah, peu importe. Je veux juste vous d'initialiser le tableau, puis créer une boucle de les imprimer out-- ou une boucle while, à vous. Je vais vous donner quelques minutes pour travailler. Je vais me reposer ma voix. Si vous avez des questions, je suis heureux à venir et de parler à vous les gars. Sentez-vous libre de parler les uns avec les autres. Obtenez plus de bonbons. En fait, je vais juste se promener avec des bonbons. Comment est-ce? Voulez-vous tout? Quelqu'un d'autre dans cette salle veux des bonbons? Vous pouvez également prendre plus d'un, les gars. Prenez une poignée si vous voulez. Mai ainsi. Tout le monde bien? Dáccord. Aussi, je vais créer un formulaire Google anonyme, et vous les gars peuvent juste soumettre rétroaction après chaque section si il ya quelque chose que vous voulez améliorer ou quelque chose que vous voulez faire. Si je suis un peu trop énergique pour vous, je peux baisser le ton. Je vais créer et envoyer ce que à vous tous par la suite. Bien. Donc, nous allons commencer petit. Comment pourrions-nous initialiser notre tableau? Quel est le type de notre réseau? Un int, non? OK, alors qu'est-ce que vous voulez d'appeler votre tableau? Tableau INT, cool. Très bien, alors nous avons int int tableau égaux, et que devons-nous après cela? L'ÉLÈVE: [Inaudible] entre crochets. ALLISON: accolades. Et puis l'intérieur des accolades? Une virgule deux virgule trois. Laisser refroidir. Voilà donc tout droit. Nous avons donc maintenant notre boucle. Ainsi, dans la première partie de notre boucle, qu'avons-nous? Etudiant: Je est égal à 0? Allison: Alors int i est égal à 0, et puis ce qui est notre condition? Ce qui est i va être moins que? Moins de trois, et comment nous mettons à jour i-nous? i plus plus, la mise à jour par un. Et puis nous allons avoir certains printf de l'entier, et ce qui est de cette dernière partie qui est en fait vais dire ce que nous devrions l'impression? Ce serait le nom de la tableau, ce qui est int tableau, non? Et ce qui est dans les supports de int tableau? i. [? Donc je?] Appelé mon exemple, mais là vous allez. Pas si mal que ça. Tout le monde bien? Laisser refroidir. Nous avons donc fini avec les tableaux. Félicitations. Vous avez réussi à parcourir par tous the-- oui? L'ÉLÈVE: [Inaudible] Allison: Oui. Etudiant: Je voudrais poser une question. Êtes-vous censé mettre en retrait les accolades? ALLISON: Donc, les accolades doivent être alignés avec la boucle, et puis tout les accolades doivent être en retrait. L'ÉLÈVE: OK, si le pour être en retrait boucle? ALLISON: La boucle ne le fait pas doivent être en retrait à ce stade. Si vous étiez en principal, si nous effectivement eu une fonction principale ici, il serait en retrait de la principale. Mais dans ce cas, il est très bien. Oui, question. L'ÉLÈVE: Avez-vous besoin d'avoir les parenthèses après exemple? Allison: Oui, si vous êtes l'initialisation de cette façon. Alors rappelez-vous, ceci est la deuxième de façon à initialiser un tableau où nous avons les accolades et puis notre réelle données séparées par des virgules intérieur. Etudiant: Je pensais qu'il y avait supports pour cet exemple. ALLISON: Non, ils sont des accolades. Ils sont des accolades. Si vous l'initialiser cette seconde manière, il est accolades. Si nous étions à dire, si int example-- nous voulions juste un tableau blanc pour ints, il serait par exemple int Crochets de trois. Les parenthèses représentent la taille. Lorsque vous avez des accolades, il est les données réelles vous mettez en elle de cette façon. Nous ne pouvons revenir en arrière très rapidement. Ainsi, dans celui-ci, ceci est juste notre matrice initiale, l'initialisation. Et ici, nous sommes individuellement attribuer des points à eux, cela représente donc l'indice de notre tableau, ce qui est pourquoi nous avons parenthèses. Mais ici, si vous remarquez, nous avons laissé nos supports sans taille, et on initialise avec la données réelles tout-en-un avec des accolades. L'ÉLÈVE: Alors, pourquoi avons-nous pas crochets dans cet exemple? Allison: Alors, dans quelle partie? L'ÉLÈVE: ne serions-nous disons, par exemple int supports accolades des égaux [inaudible] crochets par exemple. Allison: Oh, désolé. Vous avez raison. Nous ne devons parenthèses il. Désolé les gars, mon mauvais. Oui, vous devez avoir entre parenthèses après exemple. Vous avez absolument raison. L'ÉLÈVE: [inaudible] ne pas le faire. ALLISON: Non, vous devez avoir entre parenthèses, parce que sinon il est ne va pas déclarer un tableau. L'ÉLÈVE: [inaudible]. Désolé à ce sujet. ALLISON: Désolé, vous devez entre parenthèses après exemple. Typo. Bonne prise, étoile d'or pour vous. Aussi, si vous posez une question, si vous les gars juste me dire vos noms, Je serais ravi que. Je serais ravi de pouvoir connaître tous les noms. Je ne vais pas au froid vous appelle, je fait ne veulent juste savoir vos noms. Se il vous plaît Alors dis-moi réellement vos noms. Léa Léa. ALLISON: Leah. OK, donc je sais functions-- en bref ils ont parlé de cette conférence au cours. Alors fonctions sont un peu juste comme ces petites choses bouchées où vous passez dans les intrants, quelque chose magique se produit, et vous obtenez les résultats. Laisser refroidir. Donc vous avez effectivement utilisé un beaucoup d'entre eux déjà. Obtenez int, obtenir chaîne, impression f. Ce sont toutes les fonctions où vous appelez eux, il ya beaucoup de choses magiques passe en arrière-plan que vous ne voyez pas nécessairement, et vous obtenez ce que vous voulez. Ou au moins vous obtenez ce que vous espérez que vous voulez. Et dans le fond le point de fonctions, et l'un des principaux thèmes de la CS, est de briser votre code en éléments gérables. Lorsque vous commencez à écrire ces très longs programmes, ou dans Scratch quand vous avez eu cette grande idée pour un jeu, vous devez être en mesure de le casser vers, comme, OK, comment dois-je commencer? Quels sont les petits morceaux que je dois? Oh, je dois demander à la utilisateur pour quelque chose. Maintenant, je dois imprimer quelque chose. Oh, je dois calculer cette valeur. Et apprendre à briser votre code et les grands problèmes que vous avoir dans ces petits morceaux et la création de fonctions est en fait l'un des grandes pierres angulaires de la CS. Ainsi, vous pouvez penser à une fonction tout aussi comme une boîte noire, boîte noire magique, que vous mettez les choses en et vous obtenez une sortie. Et le reste du programme n'a pas besoin de savoir nécessairement ce qui se passe dans cette boîte noire. Tout ce qu'il se soucie de ce qui est qui entre et ce qui sort. Laisser refroidir. Alors pourquoi fonctions? Organization-- comme je l'ai dit, quand vous êtes traiter de très grandes bases de code, comment vous organisez votre code sera beaucoup plus facile si vous utilisez des fonctions. Parce que vous serez en mesure être, comme, OK, ce est ce que cette fonction fait et voici ce que l'on fait un autre. Et vous pouvez facilement voir comment ils toutes ensemble. Donc, le découper en tout ces sous-parties gérables. Donc simplification-- je suis sûr que vous les gars tous virent cela, comme je l'ai dit, avec Scratch. Vous avez cette grande idée, et vous êtes comme, comment fait tout ce travail? Mais si vous vous en approchez au coup par coup, vous dites, OK, comment puis-je faire un sprite flotter sur l'écran? Voilà un peu plus facile. Donc bon usage des marques de fonction votre code plus facile à lire. Il est plus facile à déboguer qui, vous entrez dans vos jeux de problème plus tard, vous allez vraiment veulent être en mesure de le faire. Et ils sont aussi plus facile à concevoir et à mettre en œuvre. Vous pouvez coder un petit fonctionner relativement rapidement et assurez-vous que cela fonctionne plutôt que d'essayer pour créer ensemble ce programme à long et puis sorte de passer et voir ce qui fonctionne et ce qui l'est pas. Et puis la réutilisation. Alors fonctions ne doivent être écrit une fois, et puis vous pouvez les utiliser autant de fois que possible. Donc, il est, comme, respectueux de l'environnement dans un sens. Si vous aviez des choses comme Imprimer f, où vous eu à écrire sur la magie qui va derrière imprimer f à chaque fois vous vouliez imprimer quelque chose, vous serait assez malade et fatigué de ce à la fin. Une des choses que vous aurez apprendre dans des classes plus tard CS, ou l'un des meilleurs morceaux de conseils que je reçois est, si vous copiez et collez code, il devrait probablement être une fonction. Si vous avez exactement la même lignes tout au long de votre code, si vous les en facteur, votre code serait probablement être, comme, cinq fois plus courts et beaucoup plus facile à lire. Et au lieu d'essayer de résoudre les problèmes tous ces différents endroits où les choses qui pourrait aller mal, vous avez une fonction que vous arrivez à résoudre. Et je vous promets, beaucoup de ce peut sembler abstrait genre de maintenant, mais que vous obtenez en plus tard et plus tard problème fixe, ça va faire beaucoup plus de sens et vraiment être ramenés à la maison. Y at-il des questions sur les fonctions jusqu'à présent? Pourquoi nous les utiliser? Je sais que nous avons pas eu dans le Nitty Gritty encore. Donc, la définition d'un function-- comme tableaux, nous avons besoin d'une sorte de-- cette est tout simplement la sortie générale. Donc, ceci est une fonction qui est juste aller au cube certaines entrées. Et sur la page suivante, en fait, nous avons toutes ces petites choses incroyables ici. Donc, tout le monde peut lire que, par curiosité? Je sais que le violet et noir peut-être un peu difficile. Mais de grandes choses à know-- donc la première un droit ici est notre type de retour. Donc, ce dont parle la sortie de cette fonction lorsque, dans ce cas, nous avons mis en un nombre, ce que nous sommes obtenir est que nombre cubes. Donc, il devrait être un int dans ce cas. Peut-être que ce serait une double ou autre chose plus tard, mais dans ce cas, il est un int. Avec c, vous avez toujours besoin d'un type de retour. Ce sera un int. Ce sera un flotteur. Ce sera un double. Mais il faut préciser que cette fonction va revenir. Sinon, il va crier à vous, et il ne sera pas compiler. Vous serez triste, et je serai triste. Et il est tout simplement pas bon. Dáccord. Et puis nous avons notre nom de la fonction. Et comme vous pouvez le voir ici, avec c il ya ce paradigme très cohérent. Quel est votre type, quel est le nom, et puis quelque chose d'autre à la fin. Donc, nous avons notre type de retour, notre nom de la fonction, puis nous avons notre tête avec notre liste de paramètres. Ainsi, la liste des paramètres est, ce qui est cette fonction va prendre en? Une liste de paramètres est tout simplement un synonyme de, ce sont nos intrants? Et de la même manière que nous avoir à définir notre fonction et lui donner un retour taper, chacun de nos entrées doit avoir un type qui lui est associé. Donc, nous savons ce que notre fonction peut effectivement travailler avec. Donc dans ce cas, nous avons une entrée int. Encore une fois, ce sera le type et ce que vous l'appelez. Et puis, comme vous le voyez ici, nous avons notre corps. Nous avons donc une certaine sortie de int, qui est juste nos temps de saisie se fois lui-même, qui cubes tout simplement. Et puis nous revenons cette sortie. Donc, comme vous le voyez ici, nous avons une fois un int int fois un int, il renvoie un int, qui n'y at-il été déclaré. Donc, tout est cohérent. Tout est heureux. Votre fonction sera exécutée. Et cela est juste la chose générale. Donc, avoir toujours le type de retour, nom, et votre liste de paramètres. Chaque chose dans votre liste des paramètres, ou entrée, doit avoir un type qui lui est associé. Et puis vous avez votre corps ici avec tout vous voulez faire avec votre entrée. Et puis évidemment vous envie de revenir quelque chose. Parfois fonctions qui retournent juste. Ils ne retourne pas vraiment quelque chose pour vous à utiliser. Mais vous devez revenir en quelque sorte. Et quand vous faites vos propres fonctions, nous pouvons entrer dans ce un peu plus profond. Personnellement, si vous voulez, il ya beaucoup de choses différentes que vous pouvez y faire. Tout le monde bien? Tout sur cette liste que vous voulez me pour aller plus, que vous ne comprenez pas? Tout le monde est bien là? Laisser refroidir. Impressionnant. OK, donc nous mettons tout cela ensemble maintenant. Nous avons donc une certaine entrée int cube, de sorte ce est un programme complet ici. Jusqu'à maintenant, je l'ai sorte de vous donner été extraits gars qui pourraient aller dans un programme. Nous venons de recherche à fonctions. Mais voici tout un programme. Alors combien d'entre vous se souviennent de la mot prototype de conférence? Laisser refroidir. Nous en avons un. Quel est votre nom? STEPH: Steph. ALLISON: Steph? OK, impressionnant. Alors, vous souvenez-vous d'un prototype est? ÉTUDIANTS: Vous dites que [inaudible] avant de traiter réellement avec elle. ALLISON: Vous souvenez-vous pourquoi? ÉTUDIANT: Non ALLISON: OK. Étoile d'or. Alors oui, un prototype que nous avons à l'avance, parce que sinon, notre compilateur va nous crier dessus. Il va dire, OK, quelle est cette fonction de cube? Comme, vous avez littéralement me dit rien à ce sujet. Il est comme quand vous marcher dans une salle de classe, et quelqu'un est comme, il ya un quiz aujourd'hui. Et vous êtes comme vous ne m'a jamais dit à ce sujet. Je ne suis pas heureux avec nous. Le prototype est un peu comme votre programme en disant, regarde. Heads up. Il va y avoir un quiz sur cette journée. Ne panique pas quand vous arrivez à lui. Vous allez être bien. Donc tout le prototype ne fait dire principal, je vais utiliser cette fonction. Je promets que je vais définir plus tard. Ne panique pas à moi. Il suffit de compiler et faire ce que je vous dis à. Nous avons donc le prototype il juste pour faire de notre compilateur heureux. Et il est essentiellement une promesse que vous avez défini cette fonction plus tard et que vous n'êtes pas simplement appelez cette chose aléatoire qu'il ne savez pas ce que vous êtes allez faire. Donc dans ce cas, nous avons principal ici. On initialise un entier x. Voilà deux. Nous allons imprimer ce que x est. Nous allons au cube x. Comme vous le voyez, nous avons notre déclaration de fonction ici-bas que nous parlé précédemment. Il va cube x, et puis, si nous rappelez-vous, la fonction de cube fait retourne un entier à nous, qui est stocké en x de nouveau afin que nous puissions imprimer sur huit, ou cube x dès maintenant. Cela fait-il sens à tout le monde? Nous sommes bons? Bien. Impressionnant. Bien. Combien d'entre vous les gars Rappelez-vous ceci si ce est fondamentalement juste votre pile et votre tas, seulement une visualisation de comment la mémoire est stockée ici. Donc, nous voulons juste faire vous que vous comprenez comment ceux-ci sont représentés en mémoire. Si vous prenez des cours comme CS61 et des trucs plus tard, vous arrivez à apprendre ce beaucoup plus en profondeur, et il est vraiment cool. Je le recommande fortement. Mais pour l'instant, je vais vous donner vous la vue d'ensemble de sorte que vous ne devez pas savoir le Nitty Gritty. Ainsi, le haut juste un segment de texte qui contient les zéros et de uns réels, le binaire pour cela. Et ceci est utilisé pour stocker variables globales si vous en avez. Lorsque vous vous déplacez vers le bas, nous avoir, comme vous le voyez ici, données initialisées, non initialisées données, puis tas. Donc, nous ne parlons pas vraiment sur le tas en ce moment. Nous y reviendrons plus tard. Pour l'instant, je vais juste agiter les mains et être comme, vous ne devez savoir à ce sujet maintenant. Mais nous allons parler un peu peu de la pile. Ainsi, la pile est where-- nous avons zoom. Ceci est en fait la façon dont le programme nous venons de voir se produit dans la mémoire. Donc ce qui arrive est, chaque temps que nous appelons une fonction, nous obtenons ce que l'on appelle une pile cadre, qui est l'un des ces derniers. Alors paramètres principaux. Donc, ce sont les choses que nous passons en principal. Donc, ils sont ici en bas, parce que est la première chose que nous appelons. Et puis nous arrivons à de grandes habitants, et quand nous disons que, nous entendons les variables locales qui sont stockés à l'intérieur principal. Alors les habitants serait ici, comme, x est égal à deux dans le cas présent. Parce que ce localisées à principal. Est-ce que quelqu'un se souvient de portée, aller au cours de cette conférence en? Dáccord. Donc, juste les variables sont initialisées à l'intérieur principal. Voilà pourquoi nous avons [principal? chant. ?] Et puis dans principal, nous appelons cube. Droit? Nous obtenons donc un autre cadre avec les paramètres de cube. Donc dans ce cas, cube de paramètres sont maintenant le x que nous avons passé dans, les deux que nous avons passé dans. Et puis les habitants de cube, qui est où le cubage réel qui se passe. Et puis il retourne. Donc ce qui se passe est que le cube ne fait ce qu'il est censé faire, il retourne. Quand il revient, ce cadre laisse, et renvoyée vers le bas à son principal. Et puis dans principal, nous peut réellement imprimer. Ainsi, lorsque vous êtes de retour quelque chose, lorsque votre fonction retourne, il est comme le passage sur ces valeurs le cadre ci-dessous, puis quitter. Et les choses ont à exécuter dans l'ordre. Et quand vous arrivez à des programmes plus gros, nous pouvons faire plus frais et plus compliqué diagrammes. Mais pour l'instant, cela est juste un aperçu général si vous avez une sorte de compréhension de ce qui se passe lorsque vous appelez une fonction et à quoi ça ressemble en fait à la mémoire. Cool? Tout le monde bien? Impressionnant. Donc, ce qui est l'un est juste essayer d'échanger des choses. Comme nous le voyons ici, nous avons notre prototype de fonction de sorte que notre compilateur ne crie pas à nous. Nous avons quelques principale, et nous vous voulez passer x et y. Ils ont pas fait cette démonstration en cours encore, ont-ils? Ils ont pas? Dáccord. Donc, nous allons aller au cours de cette très brièvement. Vous aurez dans cet exemple plus en profondeur, je pense que, cette semaine. Et puis la semaine prochaine nous pouvons vraiment plonger dans pourquoi cela ne fonctionne pas. Nous avons donc ce vide swap fonction. Donc nul signifie simplement que rien ne sera retourné. Et nous avons un échange int et int b. Et nous avons quelques temporaire variable qui est une. A obtient attribué à b, et puis b est attribué, à la température de sorte que A et B de valeurs sont maintenant activés. Mais, rebondissement, cela ne fonctionne pas. Et une partie de celui-ci a fait à voir avec le fait qu'un et b ici, ceux qui se passaient dans ici, sont en fait des copies de x et y. Ainsi, lorsque la fonction renvoie en fait, on commute les copies mais pas la réelle x et y de. Donc, une façon de penser est that-- prétendent ceux-ci sont swap. D'accord? Donc, en principal, nous avons x et y initialisés. Mais quand on fait montons à ces cadres avec swap, nous passons les valeurs sur à elle, et ils sont initialisés. Et ils ne vivent jamais ici. Donc, A et B vivent ici. Et ils sont échangés. Mais quand nous reviendrons, nous ne faisons pas faire quelque chose avec a et b. une et b congé avec notre fonction. Et si x et y rester le même. Vous obtiendrez plus sur la façon de résoudre ce problème et la façon dont nous traitons en fait de cela plus tard. Mais il est une seule chose de sorte de garder à l'esprit. Utilisez-le pour l'avenir. Ne vous inquiétez pas si cela n'a pas rendu tous les sens dans le monde. Ce sont des copies est la chose la plus importante. Si vous allez prendre quelque chose loin de là, vous avez passé dans les copies. Ainsi, les originaux restent les mêmes. Tout le monde bien? Laisser refroidir. Donc arguments de ligne de commande. Je suis sûr que dans le début tous les gars eu ces grands, comme, principales vides int. Et vous êtes comme, OK cool. Je ne me soucie pas. C'est juste ce que je dois écrire. Mais dans de nouveaux programmes, surtout dans ce jeu de processeurs, et pourquoi est-il la craie sur le sol? Avec votre prochaine pset, vous êtes allons voir cela. Int main int arg c, chaîne arc v, entre parenthèses. Donc, à partir de ce que nous venons appris aujourd'hui, ce pensons-nous que le deuxième paramètre ou à ce deuxième élément est ici? Il est un tableau. Quel type de tableau? tableau de String, oui. Laisser refroidir. Voilà donc comment vous allez à déclarer ces maintenant. Quelqu'un se souvient ce que ces représentent? Non? Hmm? L'ÉLÈVE: arg c. Allison: Alors arg c maintient un compteur. Il est un int. Il est un certain nombre, non? Alors, que pensez-vous que ce nombre est de? Ouais. Ainsi arg c est le nombre de chaînes qui composent la ligne de commande. Donc, si nous étions à do-- fait, il existe des exemples, après cela, je ne vais pas aller de l'avant de moi-même. Il est un certain nombre de chaînes juste faire votre ligne de commande. Alors, quand vous le faites, comme, dot réduire Mario, qui est une chaîne qui le compose. Dans cette pièce, vous aurez en fait être alimentation choses dans la ligne de commande, comme je suis sûr que vous les gars qui avoir lu la scie spec. Donc, dans ces cas, peut-être vous deux ou trois arguments. Ça va être une chose utile à utiliser. Et puis arg v, comme nous l'avons dit, est juste un tableau de chaînes. Alors qui stocke en fait ce vous entrez dans la ligne de commande. Nous avons donc ces. Vous avez une barre de point copier fichier_de_sortie INFILE. Donc, si arg c est le nombre de chaînes que nous passons dans la commande ligne, ce qui est notre arg c dans ce cas? Trois. Exactement. Alors, quel est arg v de zéro? Alors, quelle est la première chose que nous avons stocké? Dot slash copie, exactement. Et puis la deuxième serait INFILE. La troisième serait fichier_de_sortie. Alors qu'en est-arg v trois? Il serait nulle, parce que ce la fin de notre série, non? Laisser refroidir. Et puis que dire de la sixième? Il est un peu une question piège. Ish. Savons-nous ce qu'il est? Il est indéfini. Nous ne savons pas ce que cela pourrait être. Il est tout ce qui est droit après le tableau en mémoire, et nous avons aucune idée de ce qui est. Et il est dangereux de toucher ceux choses, parce que pour tout ce que vous savez, il est une partie de la mémoire que vous ne devrait pas être d'accéder ou nulle. Et il peut faire des choses folles. Il a appelé au cours d'indexation votre lié à votre tableau. Ne pas aller à l'extérieur des limites de votre tableau ou mauvaises choses peuvent arriver. Vous revenez et, comme les lois de la physique ont été détruits ou quelque chose. Laisser refroidir. Cela fait-il sens à tout le monde? Pas trop mal. Alors maintenant, tout le monde est partie préférée, l'examen de pset. Yay! Dáccord. Donc, pour ceux d'entre vous qui ont pas lu la spec pset, vous faites une vraiment trucs cool avec la cryptographie. Vous allez créer un César Cipher et un Chiffre de Vigenère. Vous devez absolument lire le spec de voir comment ceux qui travaillent. Et si vous rencontrez le moindre problème sur ce qu'il doit réellement être fait, se il vous plaît venir me parler, écrivez-moi ou texte moi. Je suis là. Donc, il ya trois principaux choses ici que nous vouloir parler about-- juste genre d'une extension de conférence. Les choses que vous ignorez peut-être environ, des conseils et des outils utiles. Nous allons donc faire une examen rapide de l'ASCII, parce que ça va être super- important pour Cipher de Vigenère. Nous allons à la conversion de entrées de ligne de commande, qui sera très utile pour chiffre de César. Et puis modulo. Laisser refroidir. Ainsi, ASCII cartes caractères en numéros. Ceci est un grand tableau. Vous devriez avoir cette signet quelque part. Vous voudrez pour votre première mi-parcours. Je suis sûr que tout le monde a ce graphique sur leur feuille mi-parcours. Donc apprendre. Aimer. Gardez à portée de main. Ce sera utile. Et tout ce qu'il est est un codage que les cartes alphabétiques, numériques, et d'autres personnages à numéros de notre ordinateur. Parce que bien entendu, dans le fin, tout ce que nous stockons va obtenir converti jusqu'à zéros et de uns, donc nous avons besoin d'une certaine façon à représenter la texte et de caractères que nous sommes tous l'habitude de voir comme une sorte de numéro. Donc, comme nous le voyons ici, nous avons A majuscule, qui est juste là. Il est 65. Et minuscules A est de 97. Ainsi, vous pouvez comprendre out-- comme je le disais plus tôt, si vous aviez tableau de multiple cordes, ce que chacun d'entre eux avoir un terminateur nul. Ce serait un espace. L'espace a sa propre special-- Je ne sais plus où il est ici. Ah. 32 est l'espace. Donc tout maps à elle. Nous avons donc ASCII mathématiques. Pro tip-- dans Vigenère de, vous pourriez être tenté pour convertir vos numéros de nombres entiers, mais il est en fait meilleure pratique pour pouvoir utiliser le caractères de ce genre lorsque vous êtes en train de les manipuler. Donc, si vous voulez utiliser des numéros, vous le pouvez. Mais une meilleure façon, ou d'une manière qui nous avons tendance à vous les gars pour le faire, est ce chemin où vous êtes soustraire effectivement caractères. Donc, je veux que vous les gars à genre de repérer les repérer. Pourquoi ne pas essayer chaque autre? Donc, faire le premier, le une troisième, et le cinquième. Parce que je veux vous assurer que nous parlons tout ce que nous devons parler. Je vais juste dire, l'un des choses importantes to-- Oh, attends, vous les gars ont pas vu celui-ci. OK donc faire les trois premiers. Faisons-le. Parce que nous avons à parler de modulo. Je sais. Math est difficile. Vous pouvez utiliser une calculatrice. Ce est OK. Ou tirer vers le haut une table ASCII, car vous allez probablement vouloir que. Laisser refroidir. Je vais donc rapidement marcher vous les gars à travers ces. Alors, les gens ont des tables ASCII tiré vers le haut? Quelle est notre numérique nombre de minuscules A? ETUDIANT: Seven. ALLISON: Donc A est minuscule 97 et A majuscule est de 65 ans. Donc, 97 moins de 65 ans? Public: 32? ALLISON: 62, ouais. Donc dans ce cas, ce serait-il imprimer? Ce premier? Si nous avons pour cent d, qu'est-ce que indiquer? L'ÉLÈVE: Un certain nombre. Allison: Nous l'impression à un nombre réel. Donc, nous allons en fait imprimer 32 ici. Et si cela était pour cent c, 32 Cela nous donnerait un espace. Alors que la compréhension caractères peuvent être imprimées tant que le nombre et les personnages réels qui est vraiment important, et payant attention aux types réels que nous faisons ici. Laisser refroidir. Ainsi, pour chaque autre de ceux-ci, qu'allons-nous à l'impression? L'ÉLÈVE: Un personnage. ALLISON: Un personnage. Laisser refroidir. Donc, si vous les gars veulent savoir, vous peut travailler ces sur votre propre. Si vous rencontrez des difficultés, envoyez-moi. Mais le second sera imprimer un b minuscule. Le troisième permet d'imprimer un majuscules B. Le quatrième sera imprimer à une majuscule C, et la dernière sera un minuscule A. Et la dernière One-- nous allons en fait pour entrer dans ce que fou pour cent signe signifie que même dans quelques diapositives. Donc, essayez les sur votre propre. Si vous avez des problèmes, se il vous plaît venir me parler. Si vous êtes généralement dans Adams salle D, vous me trouverez probablement autour. Donc, atoi. Combien d'entre vous ont vu ce fonction ou entendu parler du tout? Tout le monde? Laisser refroidir. Donc, ce qu'il représente réellement pour ASCII est en entier. Donc ce que vous pouvez faire est, avec César, pour ceux qui ont lu la spec, vous allez faire point barre César lorsque vous écrivez votre programme, et puis vous allez entrée un nombre que vous l'encoder votre message secret avec. Mais, si nous nous rappelons, tout de notre entrées sont stockées sous forme de chaînes. Droit? Nous avons une gamme v arg voilà tout type string. Donc, si vous essayez juste de tirer celui-là, il serait penser que celui-là ou peu importe le nombre vous utilisé est en fait un caractère. Donc, vous allez obtenir certains résultats folles. Donc, si vous voulez vraiment transformer cela en un nombre entier que vous pouvez utiliser pour manipuler votre mot ou votre message, vous aurez envie d'utiliser atoi. atoi convertit seulement votre chaîne en int. Donc, si nous avons une chaîne de 12, si nous appelons atoi sur 12, ou peu importe ce que l'entrée est, il va vraiment revenir vous l'entier. Pas le caractère ou la chaîne 12. Qui, lorsque vous démarrez à ajouter à ce nombre, sera très différent, parce que la chaîne 12 est un nombre fou ASCII, mais le nombre entier 12 est en fait 12, qui est ce que vous voulez. Donc, vous voulez vous assurer d'utiliser atoi. Vous allez vouloir cette en César, parce que vous besoin de l'int fourni par le l'utilisateur dans la ligne de commande. Mais quand ils l'ont mis dans la commande ligne, il est stocké sous forme de chaîne pour commencer. Est-ce logique? Vous ne faites pas nécessairement besoin de cela pour Vigenère. Avec Vigenère, comme je l'ai dit avant, vous devriez essayer d'utiliser ASCII mathématiques qui ressemble plus ce, où que vous êtes réellement en utilisant les caractères que nous sommes donné pour vous. Laisser refroidir. Tout le monde il bon? Impressionnant. Donc modulo. Alors que faire si vous êtes donné ce nombre énorme de César? Vous avez cette idée que si vous êtes à Z et vous êtes donné un nombre à deux, cela signifie que vous need-- Z est le deuxième lettre après lui-même, non? Donc, vous avez besoin d'envelopper en quelque sorte autour, et modulo est la façon de le faire. Donc, tout ce qu'il fait est-il vous donne le reste de la division de la premier nombre par le second. Et nous avons quelques exemples à faire un peu plus que le béton. Mais fondamentalement, vous utilisez quand vous modulo vouloir faire quelque chose enveloppante. Donc, si vous voulez seulement le chiffres de un à huit, vous pouvez utiliser modulo sur tout autre nombre, et il sera toujours retourner un nombre de zéro à huit. Ainsi, certains exemples-- si nous avons 55 modulo 10, il vous donne juste le reste de 55 divisé par 10, ce qui serait 5. Et puis trois modulo cinq, quelqu'un deviner ce que serait? Trois. Donc si vous avez un plus petit nombre avant le modulo, il ne peut pas aller en uniforme. Il est égal à zéro. Alors elle retourne juste le nombre lui-même. Donc, huit modulo huit serait? L'ÉLÈVE: Zero. ALLISON: Zero. Parce qu'il va en uniforme. 16 modulo 15? PUBLIC: Un. ALLISON: Cool. Et puis ce dernier est juste montrer vous-- vous demandez peut-être, OK, ce qui est l'ordre des opérations ici? Est-ce que nous divisons en premier? Avons-nous modulo premier? Donc modulo détient la même priorité que la division ou de la multiplication, et son associatif gauche. Il est donc de la même façon. Vous voulez toujours faire parenthèses, puis multiplication, division, et modulo dans l'ordre de gauche à droite. Donc, les règles standard. Il suffit de mettre dans la même catégorie que la division et la multiplication. Donc dans ce cas, nous le ferions ont une plus 2 nous donne 3. Nous multiplions cela par 2, ainsi nous obtenons 6. Nous modulo que par 2, ce qui nous donne? L'ÉLÈVE: 0. ALLISON: 0. Et puis nous ajoutons 2, nous obtenir 2 dans ce dernier cas. Donc modulo-- vous allez certainement penser à des façons d'intégrer que lorsque vous envelopper autour de l'alphabet. Si vous êtes à Z et vous devez déplacer faire parvenir trois espaces pour se rendre à C, il ya que tout le concept d'emballage autour. Je vais donc laisser vous les gars à comprendre exactement comment vous allez être l'utiliser. Mais certainement un outil utile pour votre pset cette semaine. Je l'aime vraiment. Ceci est un de mes préférés psets. Puis, après vous le faites, si vous avez des amis, vous pouvez, comme, envoyer chaque autre secret messages et assurez-vous qu'il fonctionne. Parce que ça va décrypter ou autre. Beaucoup de plaisir. Et qui est la fin de l'article. Je fini tôt. Je dois encore 15 minutes vous les gars, donc si il ya quelque chose que vous souhaitez aller plus plus loin, je serais heureux de le faire. D'autres questions sur votre pset pour ceux d'entre vous qui ont commencé ou lire la spec. Tout ce que nous avons parlé environ dans la dernière heure et à 15 minutes que vous souhaitez que je à type de mouture, je serais heureux de le faire. Ou nous pouvons en rester là, et vous pouvez tout quitter et de prendre plus de bonbons avec vous comme vous allez. Mais si il y persistante questions, se il vous plaît faites le moi savoir. Vous pouvez également venir et me parler après. Je promets que je ne mords pas. Rien d'autre? Tout le monde est bon? Le sentiment de tout le monde comme ils peuvent gérer ce pset? Vous allez être beaux mecs. Les heures de bureau sont là pour une raison. Laisser refroidir. Très bien. Eh bien, dans ce cas, merci vous tous d'être venu. Je l'espère vous voir la semaine prochaine. Il y aura plus de bonbons. Il pourrait y avoir d'autres choses cool. Et je me réjouis de faire pour tout savoir de vous cette année.