>> PROFESSEUR: Donc, l'ordre du jour cette semaine, pas que de choses.
Mais nous espérons que très, très utile et pertinentes pour vous les gars cette semaine.
Mais nous allons passer peut-être 15, 20 minutes juste parler rapidement
à propos de la liste de liens.
Listes de liens vont sera couverte sur la quiz.
Donc, il serait peut-être très utile d'apprendre un peu plus sur ce qui est.
>> Nous allons passer la grande la majorité de la section d'aujourd'hui
aller sur quizz zéro problèmes pratiques.
Et puis nous allons économiser peut-être 20, 30 minutes à la fin pour des questions persistantes
quelqu'un a.
>> Et puis, la dernière cinq minutes, je vais
pour donner un discours de la pompe pour le quiz.
Vous voulez que tous les gars d'être ici pour cela.
Parce que ça va être un bon moment.
>> Tout droit, de sorte que certains matériau sur la liste de liens.
Comment ils sont habituellement structurés est vous avez ce qu'on appelle un noeud, non?
Vous avez ces choses appelées nœuds, qui sont structures.
Je vais aller sur la façon de créer un noeud de la diapositive suivante.
Mais essentiellement tous liés listes est sont des données qui
a été enfilées ensemble par l'intermédiaire des pointeurs.
>> Et donc l'avantage que nous avons d'utiliser une liste chaînée plus,
peut-être, comme un tableau, est le fait que dans un réseau
vous avez besoin d'un bloc contigu de mémoire tous dans le même lieu, on
après un autre, pour pouvoir avoir que.
Considérant que la liste liée, vous pourriez ont peu de bits aléatoires de la mémoire
partout dans votre ordinateur enfilées par des pointeurs.
>> Et de cette façon vous peuvent accéder à l'information
qui vient les uns après les d'autre part, après l'autre
sans qu'il soit juste un gros morceau de mémoire dans votre ordinateur quelque part.
Et donc cela est l'un des principaux raisons pour lesquelles nous utilisons liste de liens.
>> Deuxièmement, il est très facile de dynamique redimensionner la liste des liens parce que dans le tableau,
lorsque vous déclarez un tableau, vous avez une certaine valeur de consigne.
Disons que je voulais créer un tableau de 10 entiers.
Je crée un tableau de 10 entiers, et ça y est.
Il est 10.
Je ne sais pas quoi faire après.
Si je voulais faire 11, ne peut pas le faire.
Si je veux faire 9, ne peut pas le faire.
>> Alors que dans une liste de liens, vous pouvez ajouter et supprimer et insérer où vous voulez.
Vous pouvez redimensionner dynamiquement votre structurer ici, votre structure de données.
Et cela nous donne beaucoup plus de flexibilité
ce que nous faisons généralement pas avoir avec les tableaux.
>> Toute personne confondue sur le base la structure de la façon dont une liste de liens est
ou pourquoi nous devons utiliser une sur un tableau?
Oui, nous allons passer en revue en détail comment effectivement créer un.
Mais cela est juste un peu le sens général en ce moment.
Frais.
Et si les tableaux sont enchaînés de ces belles petites choses
appelés noeuds.
Tout noeud est un est un type de structure.
Rappelez-vous, une structure est si vous vouliez pour créer un certain type de variable
en C qui n'a pas déjà existez, vous, en tant que programmeur,
peut réellement créer vous-même.
>> Et si ce type de données structure est appelée un noeud,
a été effectivement créé par nous, que ne pas exister à l'intérieur de sa propre C.
Et la façon dont vous que créez un est que vous avez
l'en-tête de typedef struct, qui raconte le compilateur je suis
sur le point de créer une structure.
>> Nous allons nom il "noeud."
Et à l'intérieur, nous allons de déclarer une variable dans,
qui se passe pour stocker une valeur.
Et puis nous allons aussi ont appelé un pointeur "next"
que les points à l'autre noeud de la liste de liens.
Et puis vous avez terminé que off simplement en répétant à nouveau noeud afin
le compilateur sait, OK qui est la fin de ma structure.
>> Et de cette manière, nous sommes en quelque sorte de créer un petit réseau mignon
genre de chose avec un la valeur et avec un pointeur.
Et vous pouvez les relier tous avec ces pointeurs.
Alors qu'ils peuvent être de toutes sortes enfilées dans une chaîne.
>> Frais.
Pouvez-vous entendre ce que un peu mieux?
>> AUDIENCE: Ouais.
>> PROFESSEUR: Très bien.
Ainsi, la manière que, comme vous les gars pouvez le voir, une liste de lien typique est structuré
est vous avez une tête.
Vous avez la valeur de la tête qui est pas étant signalé par tout autre pointeur.
Mais il va pointer, ou de référence, un autre nœud.
Le nœud après va faire référence à la après que le noeud, et ainsi de suite et ainsi de suite
jusqu'à ce que vous a finalement atteint la fin de votre liste de liens.
Et vous ne pourrez pas avoir un pointeur là.
>> Et donc, penser comme, sur une chaîne, ou même si l'un de vous les gars faites, je ne sais pas,
comme avec Fruit Loops quand vous étiez petit.
Vous feriez les enchaîner et les porter autour de votre cou.
Pense qu'il est exactement la même chose.
Vous avez ces petites choses que vous peut enchaîner ce point à l'une
après cela, à l'une après elle, et ainsi de suite et ainsi de suite
jusqu'à ce que vous avez une chaîne d'une structure de données
que vous pouvez utiliser comme bon vous semble.
>> Ainsi, la manière que ce nous le ferions insérer généralement ou supprimer
un nœud d'un lien la liste est très différent
selon l'endroit où ce nœud est.
Ainsi, par exemple, parce que pointeurs sont toujours
pointant à une valeur spécifique, lorsque vous supprimer ou insérer un noeud,
vous voulez vous assurer que le pointeur est tout en montrant les bonnes choses.
>> Donc, si vous vouliez potentiellement insérer un nouveau noeud avec la valeur d'un
l'intérieur d'un lien triée liste, nous le savons tous ici
de l'image qui va passer entre la tête et deux, non?
Parce que l'on adapte là.
Mais la façon dont nous ferions ce que est d'abord le déréférencement du pointeur
de la tête et l'envoi que pour un.
>> Mais nous entrons dans un problème ici.
Quelqu'un peut-il voir ce que le problème est de savoir si nous étions à la première déréférencer
le pointeur de la tête à l'un?
Quel problème pourrions nous heurter si nous essayons pour ajouter ceci à l'avant de notre tableau?
>> AUDIENCE: [inaudible]
PROFESSEUR: Exactement.
Nous avons donc ici un pointeur qui était pointant une fois de la tête à deux.
Mais si vous vous débarrasser de cette pointeur, vous pointez à l'un,
nous avons maintenant aucune idée où aller pour en trouver deux.
Parce que, comme je l'ai dit avant, vous avez une morceau géant de la mémoire de votre ordinateur.
Tous ces noeuds pourrait être entrecoupées hasard
en tout lieu dans votre ordinateur.
Et vous ne savez pas comment s'y prendre pour trouver cela.
>> Et si vous avez besoin d'avoir des pointeurs pointant vers tous les noeuds à la fin.
Ou bien si vous avez accidentellement déréférencer un
sans d'abord attribution d'abord une valeur, vous êtes
juste aller à perdre tout par la suite.
>> Donc, ce que nous allons faire est, vous le feriez premier
vouloir créer un pointeur sur le nœud que vous souhaitez insérer.
Pointez-le à l'endroit où vous vouloir insérer à,
et puis après vous pourrait pointer vers la tête d'un.
>> Est-ce que de sens pour tout le monde ici?
Génial.
Pensez-y comme exactement comme une chaîne.
Si vous ajoutez une chaîne, il est un peu intuitive
comment vous iriez sur l'insertion de cela.
>> OK, donc qui est en fait beaucoup plus courte que ce que je pensais que ce serait,
un spiel de cinq minutes sur les listes de liens.
Juste pour que vous les gars ont le idée de base de ce qui est.
>> Ici, nous avons l'ordre du jour de quizz zéro.
Ne vous laissez pas intimider.
Je sais qu'il ya beaucoup d'informations.
Il semble très effrayant.
Il est aussi beaucoup de, je penser, SCC genre de termes.
Des choses comme des chaînes hexadécimales, pointeurs, les allocations de mémoire dynamique
sont des termes qui sonnent très effrayant.
>> Mais nous allons les briser vers le bas, faire quelques problèmes pratiques
de sorte que tous vous les gars sont prêts pour ce test.
Combien d'entre vous les gars ont déjà commencé à étudier?
>> OK, les gars vous voulez probablement pour commencer la mise en route
à ce sujet, parce que le quiz est demain.
Ou jeudi pour certains d'entre vous.
Ouais, donc nous allons aller sur certains problèmes pratiques.
Si vous voulez les gars tout à prendre une feuille de papier, un crayon.
Nous allons simplement passer la grande majorité de la section d'aujourd'hui
aller sur une partie de cette manière que vous les gars ont une idée de ce qui les attend sur le quiz.
>> D'ACCORD.
Un couple de logistique détails ainsi, pour personne
qui n'a pas été à ce lien là, si vous allez à cs50.yale.edu, sur le front
cette page il ya un lien qui dit: "A propos de Quiz zéro."
Lien vous y emmène.
Si vous ne l'avez pas lu, lisez s'il vous plaît il.
Parce qu'il vous dit vraiment important informations concernant le quiz.
>> Je vais retirer ceci à partir de que juste parce que, physiquement,
si vous les gars ne savez pas où aller, nous aurons des problèmes.
Et si votre dernière en termes avec A à N, aller à l'auditorium de l'école de droit.
Et si vos derniers départs avec P à Z, aller à l'Auditorium Davies.
Et cela ne vaut que pour les personnes dans la section mercredi.
>> Si vous prenez le quiz sur Jeudi, vous aller à la SSS 114
où votre conférence est typiquement.
AUDIENCE: [inaudible]
PROFESSEUR: O à Z, vous allez pour aller à l'auditorium Davies.
Je vais changer ça, non?
>> Oh, oui, vous venez de basculer automatiquement.
>> Oh oui, que vous est Christa.
Ouais, mon mauvais.
Yep, O à Z, vous allez pour aller à Davies Auditorim.
Je vais corriger cela une fois que je télécharger.
Ouais.
>> Et puis aussi quelque chose important de l'esprit
est que le mercredi, si vous êtes officiellement inscrits dans la section mercredi
vous devez prendre votre quiz mercredi.
Et si vous êtes inscrit à jeudi vous devez prendre votre quiz jeudi.
Et il est pendant le temps de classe.
Où, je pense qu'il est comme à 01:00 02h15 le mercredi et 2 heures 30-03:45
les jeudis.
>> Si vous avez un conflits irréconciliables, Les excuses de Dean sont la seule chose,
Malheureusement, nous pouvons prendre.
Parce que nous avons eu un grande majorité des demandes
pour passer de mercredi à jeudi.
Que nous ne pouvons pas honorer moins nous avons la demande d'un Dean.
>> D'ACCORD.
Donc, avant que nous commencions sur un quelques-uns des problèmes pratiques,
Je vais juste aller sur Conseils utiles d'Andy pour le succès.
Vous les gars, quand vous étudiez, vous avez vraiment vouloir pratiquer l'écriture de code à la main.
La première fois que je a pris un quiz CS, je devais pas
l'écriture de code de pratique à la main avant et il était extrêmement
choquant combien il était difficile.
>> Lorsque vous les gars ne pas entrer dans la habitude de taper sur tout,
il vient très naturellement être pouvoir ont autocompleted
les supports et les points-virgules là.
Lorsque vous écrivez sur à la main, il est parfois
très, très facile d'oublier un point-virgule, ou oublier de fermer une parenthèse,
ou oublier de fermer un colon, ou quelque chose comme ça.
>> Ainsi, lorsque vous écrivez du code à la main, il est une sensation très différente.
Alors vous les gars, quand vous travaillez à travers quelques-uns des problèmes pratiques,
il serait bon de pratiquer vraiment aujourd'hui.
Ou demain, je suppose, si vous êtes prenant le quiz le jeudi.
>> Deuxièmement, nous avons le dernier, comme, la valeur de la pratique de huit ans
des questionnaires en ligne.
Quiz de cette année sera probablement très, très semblable à chacun d'eux.
Ils sont tous très similaires.
Vous sorte de obtenez dans le style de type de questions
ce que nous demandons, le type de fonctions que nous allons écrire dans,
et cetera, et cetera.
>> Donc, faire les tests de pratique, particulièrement sous des contraintes de temps.
75 minutes pour faire le quiz est pas beaucoup de temps.
Il est très, très longtemps.
Et vous les gars veulent vraiment pour vous assurer que vous les gars sont
l'habitude de l'écriture code à la main rapidement.
Parce que vous ne voulez pas la première le temps de voir un quiz de cette longueur
sur votre quiz.
Les gars, vous voulez vraiment vous assurer que vous pratiquez à l'avance.
>> Quatrièmement, vous voulez examiner la conférences et section diapositives.
Vous ne devez pas mémoriser des choses.
En fait, tout le monde a droit à un une feuille de notes de papier blanc,
avant et arrière.
Les gars, vous pouvez taper ou écrire.
Si vous vous trouvez avoir besoin de mémoriser quoi que ce soit, le posa sur cette feuille.
>> Je vous garantis, vous ne voulez pas être coincé au milieu de ce jeu-questionnaire
étant comme, oh oui, quelle est la l'exécution de ce genre contre ce genre.
Il suffit de mettre le bas et de le copier directement à partir de votre feuille de note.
Ensuite, vous pouvez réellement suffit d'utiliser votre cerveau pour réfléchir sur les problèmes
plutôt que d'avoir à rappeler des faits.
Et si vraiment profiter de tous les détails de niche
que vous pensez que vous avez besoin de mémoriser, plop vers le bas sur la feuille d'examen.
>> OK, des questions sur le plan logistique en ce qui concerne le quiz
avant que nous commencions un peu problèmes de quiz pratiquent?
Ouais?
>> AUDIENCE: Je ne l'ai pas eu la chance à regarder le quiz [inaudible]
mais est ce que ça va être demande la plupart du temps,
ou est-il aussi va être, comme, questions de connaissances?
>> PROFESSEUR: Il est beaucoup.
Donc, la façon dont je serait décrit le quiz
est-- je mets ensemble certains problèmes pratiques
que je tirais de tous les questionnaires.
Mais vous verrez qu'il ya deux principaux types de questions que nous vous demanderont.
>> L'un est un très faible niveau de détail de choses.
Nous allons vous donner un petit morceau de code et dire, y at-il une erreur ici?
Quel serait l'impression ici?
Que va produire ce code, et cetera.
Donc les détails de l'information très faible niveau.
>> Et sur le revers de la médaille, nous avons de très de haut niveau des questions de base de connaissances.
Pouvez-vous expliquer ce que le différence entre une recherche binaire
et une recherche linéaire est?
Pourquoi voudrions-nous utiliser l'un sur l'autre?
Peut-être, ce qui est GDB?
Pourquoi voulons-nous d'utiliser GDB?
Niveau plus élevé, plus fondamentale des questions de compréhension.
Donc, vous verrez un mélange de deux d'entre eux sur votre quiz.
>> Toute autre chose avant que nous la tête droite en elle?
D'ACCORD.
PUBLIC: Un de plus.
PROFESSEUR: Oh, un de plus.
Pardon.
>> AUDIENCE: Ouais, tout va bien.
Donc, vous dites 75 minutes est trop court, comme il est peu probable
que nous allons terminer?
Ou, comme, 75 minutes est exactement autant de temps
que nous aurions besoin si nous étions préparé de manière appropriée?
PROFESSEUR: OK, donc le quiz est difficile.
Il est certainement difficile.
Vous vous trouverez à court de temps.
Vous allez probablement pour frapper, comme 10, 15 minutes pour aller, et être comme, merde.
Je l'ai tellement à faire.
Et cela est tout à fait bien.
Tout le monde va se sentir de la même façon.
>> Juste être très conscients de Combien de temps as-tu.
Et voilà pourquoi je vous dis gars font les questionnaires de pratique.
Parce qu'il donne vraiment un grand sens de ce que le quiz va être comme.
Donc, si vous vous trouvez être pouvoir fini la pratique
quiz dans une bonne quantité de temps, vous pouvez vous arpenter ainsi,
alors vous ne devrez pas un problème mercredi ou jeudi.
>> Frais.
Donc, si tout le monde je pense wants-- la plupart des gens ont des feuilles de papier
out déjà.
Je vais essentiellement juste vous donner des exemples de questions,
vous donner les gars, comme un quelques minutes pour les faire.
Et nous allons passer en tant que classe ce que les réponses à ces questions sont.
>> Alors ceci est un très typique début question nous allons
vous demander, juste convertir nombres entre différentes bases.
Binaires, comme vous pouvez gars rappel, est la base de deux.
Décimal est base 10, ou ce que nous comme les humains interprètent généralement.
Hexadécimal est base 16, qui est nulle par neuf ainsi que de A à F.
>> Donc, il ya quatre numéros je suis vous demandant de convertir gars ici.
Je vais vous donner vous aimez, trois à quatre minutes pour réfléchir à la façon dont
nous irions à propos de la résolution de ce.
>> AUDIENCE: Sommes-nous autorisés calculatrices?
>> PROFESSEUR: Vous ne besoin de calculatrices, ouais.
Je pense que plus de base, je pense, est tous vous les gars seront invités à le faire.
>> Et juste pour que je sorte de ai un sens quand tout le monde est fait, regarder,
vague, je ne sais pas, le sourire, l'air heureux si vous avez terminé.
Ouais.
Peut-être un ou deux minutes de plus.
>> OK, nous allons le mettre en.
Je vais volontairement vous donner les gars moins de temps
que vous avez probablement besoin faire certains de ces problèmes,
tout simplement parce que je veux faire en sorte que nous obtenons grâce à un tas de problèmes.
Donc pas de soucis si vous ne avoir une chance de finir.
Totalement OK tant que vous avez une idée de la façon d'aller à ce sujet.
Donc, nous allons aller de l'avant et de faire le premier.
>> Alors d'abord, personne ne veut me dire en binaire, qu'est-ce que chacun de ces chiffres
représenter en termes de leurs valeurs?
Ouais?
>> AUDIENCE: Deux à la la puissance zéro, deux à un.
PROFESSEUR: Exactement.
Ainsi.
>> Droite, si typiquement quand nous sommes en base 10
Tout cela représente sont, comme, 10 à la base de zéro, non?
Voilà la place de votre bien.
Tout votre lieu de 10 est est 10 à la puissance de un.
La place de vous 100 est 10 à la puissance de deux.
>> Quelle que soit la base vous êtes en va à voir avec exactement la même chose,
juste avec une base différente.
Donc binaire, tout ce qui est est base deux.
Vous allez convertir tous les chiffres en deux pour tout le pouvoir
de ce chiffre.
Et dans ce sens, nous peut avoir un moyen plus facile
d'être capable d'ajouter ou la somme de toutes les nombres dans l'ordre
à convertir en base 10.
>> Quiconque ne veut donc me dire ce que le réponse à la première est à base dix?
>> AUDIENCE: Deux, [inaudible]
PROFESSEUR: Ouais.
AUDIENCE: 42.
PROFESSEUR: 42, là vous allez.
Donc, la façon dont nous avons obtenu cette réponse était par faire deux la première, qui est de deux.
Plus deux la troisième, qui est de huit.
De plus deux à la cinquième, qui est ce qui reste.
Vous les résumer et il est 42.
>> Quelqu'un est-il confus sur comment nous sommes arrivés là?
Donc, plus de base, comme Je l'ai dit, vous devriez être OK.
Sinon, eh bien, nous pouvons pratiquer aussi.
Mais cela est tout droit.
Frais.
>> Quelqu'un veut-il me donner le répondre à la seconde ainsi?
>> 50?
Bien.
Toute personne confus sur la façon nous avons obtenu que soit?
Cool, je vais prendre le réponses sur la diapositive suivante.
Donc pas de soucis si vous besoin de copier vers le bas.
>> OK, donc hexadécimal est un peu plus compliqué.
mais je vais vous montrer les gars un raccourci pour savoir comment faire.
Donc, hexadécimal, comme vous rappelez-vous, tout ce qu'il est de 16.
Et parce que nous, les humains ne sont pas effectivement avoir 16 numéros pour représenter ce que,
nous allons de zéro à neuf, dont notre premier 10 valeurs, puis nous faisons de A à F,
qui sont les six valeurs suivantes.
>> Et la meilleure façon d'aller de un nombre binaire en hexadécimal
est de les diviser en deux moitiés.
Et donc tout nombre binaire nous donnerons vous aurez probablement huit chiffres.
Vous pouvez simplement briser les dans le milieu.
>> Ainsi, le One-- un premier, un un, un, un, un un.
Type de réfléchir, vous savez, dessinez une barre ou une virgule entre eux.
Et vous pouvez simplement convertir directement quelque
ceci est de la première nombre de hexadécimal,
et quelle que soit ici consiste à la seconde de hexadécimal.
>> Alors rappelez-vous de la notation commune, qu'est-ce que les valeurs hexadécimaux commencer?
>> AUDIENCE: Zéro.
>> PROFESSEUR: 0x.
Donc, nous savons que chaque fois que nous vous demandons pour convertir un nombre en hexadécimal,
ou à tout moment vous voyez toute numéro qui commence par 0x,
vous savez qu'il est une valeur hexadécimale.
>> Et puis vous allez être invité à déterminer ce que ces deux chiffres sont.
Et la façon dont vous faites cela, le décompte de que la moitié et le décompte jusqu'à la moitié.
Donc, dans cet exemple, ce que aurait un, un, un, un être?
Quelle est la valeur que ce serait?
Ce serait F, non?
Ce serait 15.
>> Donc, ce serait F. Un, un, un, un ici est également
F. Donc, un, un, un, un, un, un, un, l'un en hexadécimal, tout ce qu'il est est 0xFF.
Parce que cette demi-représenté F, la valeur de 15,
et cette moitié représentés F, la valeur 15.
Parce que souvenez-vous, nous sommes comptant à partir de zéro à neuf.
Un est comme 10, B est comme 11, F est 15.
>> Est-ce logique à tout le monde comment nous avons eu de binaire en hexadécimal?
>> Public: Et alors comment sommes-nous arrivés 15 de l'un, un, un, un?
PROFESSEUR: Oui, cela est binaire, non?
Imaginez ceci est juste un nombre binaire.
Donc, vous avez deux à la zéro, ce qui est une.
AUDIENCE: Oh, OK.
Donc, vous venez de totaliser sur.
>> PROFESSEUR: Ouais, et puis vous faites le total juste cela.
Voilà tout ce qu'il est.
>> AUDIENCE: OK.
>> PROFESSEUR: OK.
>> Auditoire: Alors, vous allez partir binaire décimal en hexadécimal?
>> PROFESSEUR: Voilà le manière la plus facile de le faire, oui.
Tu ne vas pas à la décimale parce décimal a seulement zéro à neuf.
Nous sommes juste un peu diviser cette place en deux.
>> AUDIENCE: [inaudible] utilisant décimal à trouver
ce qu'il correspond à en hexadécimal.
PROFESSEUR: Je veux dire, vous êtes le décompte de l'aide de base en mathématiques.
AUDIENCE: Ouais.
PROFESSEUR: Oui, à peu près.
Il est un peu déroutant.
Mais il suffit de savoir que vous peut diviser ce que
cette valeur est seulement en moitiés.
Regardez, quel est ce en binaire?
Quel numéro est-ce?
Ce sera quelque chose à partir de zéro à F.
>> Ici va également être quelque chose à partir de zéro à F.
Et puis, vous pouvez simplement mettre ces deux là.
>> AUDIENCE: OK.
PROFESSEUR: Yep.
D'ACCORD.
Donc, vous voulez les gars essayez le suivant alors?
Zéro, un, zéro un, un, zéro, un zéro.
Je vais vous donner des gars comme 30 secondes, puisque vous ne saviez probablement pas
le truc pour la façon de procéder plus tôt.
>> OK, quelqu'un veut obtenir celui-ci un coup de feu?
>> 0x5A.
PROFESSEUR: 0x5A.
5a.
Bien.
Donc, ce serait ici être-- vous voulez pour nous dire comment vous avez obtenu ce que?
Tout d'abord, comment avez-vous les cinq?
>> AUDIENCE: Parce que zéro, un, zéro, on est cinq.
>> PROFESSEUR: Tout le monde comprend pourquoi zéro, une, zéro, une est cinq?
Vous avez un ici.
Vous avez rien en deux pour le premier.
En deux à la deuxième, vous avoir une, qui est de quatre.
Donc, vous ajoutez le quatre plus l'un, vous avez cinq.
Tout le monde la bonne?
D'ACCORD.
Et puis ce que ce soit et pourquoi?
Qu'est-ce nombre ne correspond à A?
>> AUDIENCE: 10.
>> PROFESSEUR: Et ce qui est à la base de deux?
AUDIENCE: [inaudible]
PROFESSEUR: Exactement.
Donc cette deuxième valeur ici serait 0x5A.
>> Tout le monde bien sur la façon de convertir?
Il est beaucoup plus simple que vous pensez qu'elle est.
Je veux juste vous assurer vous savez conseils utiles
et astuces pour savoir comment faire.
>> Public: Pourquoi ne pouvez-vous juste de se séparer dans le milieu comme ça?
Juste comme, OK, je vais seulement soucier de ces premiers [inaudible]?
>> PROFESSEUR: Parce que ce fait la façon dont les valeurs hexadécimaux sont représentés.
0X, que signifie réellement rien d'autre que de vous dire
qu'il est un nombre hexadécimal.
Et cela représente toujours les quatre premiers chiffres.
Et cela représente toujours les quatre derniers chiffres.
Et donc ces deux chiffres seulement correspondre à différents bits.
>> PUBLIC: Nous allons donc always--
>> PROFESSEUR: Vous êtes toujours allez obtenir huit bits de valeur.
>> Public: Est-ce tout simplement comme une chose ici ou qu'une chose partout?
PROFESSEUR: Voilà juste un chose dans les ordinateurs, oui.
AUDIENCE: OK.
Génial.
>> PROFESSEUR: Aussi, si dans cet exemple nous avons converti de binaire en décimal,
et de binaire en hexadécimal.
Les gars, vous voulez vous assurer que vous avez aussi la pratique d'aller dans l'autre sens.
Donc, si je vous ai donné 0xFF, vous pourriez tirer cette dans la binaire, non?
>> Vous convertissez F en binaire, qui est l'un, un, un, un,
F pour convertir binaire, qui est un, un, un, un.
>> Donc, nous pouvons vous demander de faire l'inverse.
Donc décimal en binaire, ou hexadécimal en binaire.
Donc, vous voulez faire vous que vous savez dans les deux sens.
Nous allons probablement vous poser une combinaison des deux.
>> Ouais, vous avez une question?
Je peux see-- vous êtes bon?
AUDIENCE: Ouais.
PROFESSEUR: OK.
Suis-je bien à effacer cela?
Génial.
>> Très bien, alors les réponses sont ici si quelqu'un est curieux plus tard et se confondre.
D'ACCORD.
>> Public: Est-ce important si nous mettons nos lettres en capitale ou minuscule?
>> PROFESSEUR: Il le fait, parce en hexadécimal, par convention,
tous les personnages sont en majuscules.
Donc A à F sont va être en majuscules.
Si vous mettez un a minuscule, je ne sais pas si nous voulons marquer nécessairement tort.
Mais théoriquement, ce est pas techniquement
comment vous êtes censé avoir.
Donc, ils devraient tous être en majuscules.
Ouais, bonne question.
>> D'ACCORD.
Deuxième question.
Considérez ce charmant programme ici.
Je vais poser la question, Je reviendrai cela.
>> Donc, tout d'abord, ce qui est à l'intérieur de la norme io.h qui est d'intérêt pour le programme?
Deuxièmement, ce qui donne un look signifier à la troisième ligne?
Et troisièmement, ce qui ne retournant zéro à partir de principale, que la ligne de six, généralement signifier?
Si vous voulez les gars d'écrire ces vers le bas, puisque je dois revenir
à la diapositive juste pour que vous pouvez voir code.
Ceci est un exemple de, comme, peut-être un plus question de niveau où nous vous demandons
ce qui signifie des choses dans un programme.
>> Tout le monde bon pour moi de revenir à la diapositive?
OK cool.
Donc, je vais vous donner des gars comme peut-être trois minutes pour regarder celui réel rapide.
>> OK, si celui-ci est comme assez facile, sur le plan conceptuel.
Quelqu'un veut-il me dire ce qui est abord à l'intérieur par hachage compris
notre fichier de bibliothèque de io.h norme?
Pourquoi avons-nous besoin de cette bibliothèque inclus pour ce programme?
Que devons-nous ici pour?
>> Ouais?
>> Public: Est-ce que quand vous mettez que printf?
>> PROFESSEUR: Exactement.
Donc printf, chaque fois que vous prendre une entrée de l'utilisateur
et quelque chose d'impression à l'écran, qui est
l'entrée standard, bibliothèque de sortie.
Pensez-y que way-- entrée, de sortie.
>> Dois-je une sortie?
Oui.
Donc, je sais que je vais toujours besoin de normaliser la bibliothèque i.o.
>> Donc la fonction printf est par lequel nous avons besoin pour accéder à
et inclure le hashtag bibliothèque de i.o standard.
D'ACCORD.
>> Deuxièmement, il ne vide ce qui signifie?
Nous avons l'int main (void), ce qui ne annulera ici signifie ici sur la ligne de trois?
Ouais, dans le dos.
>> AUDIENCE: [inaudible]
>> PROFESSEUR: Exactement.
Alors rappelez-vous, nous avons appris à commencer par notre pset
que vous pouvez réellement indiquer la ligne de commande
arguments que votre programme, que vous fonction principale, prend comme vous, l'utilisateur,
appelle.
Si nous avons vide, cela signifie que vous pourrait suffit d'exécuter le programme directement
sans arguments de ligne de commande.
Tout le monde a bien compris?
D'ACCORD.
>> Et enfin pourquoi avons-nous la peine de faire cette chose retour à zéro ici?
Pourquoi avons-nous même une principale int?
Pourquoi ne pouvons-nous pas avoir simplement void void principale?
Ouais?
AUDIENCE: Juste pour que nous puissions être sûr que le programme est
sortant avec succès, en tant que opposition à si elle a été compté.
Et nous savons que cela est un autre type d'erreur.
>> PROFESSEUR: Oui, exactement.
Ceci est juste un très chose conventionnelle que nous faisons,
qui est juste à la fin de votre programme, juste vous assurer
que votre fonction principale fonctionne correctement,
nous voulons toujours faire retour à zéro.
Même si nous pouvons nécessairement ne voit pas qui a imprimé partout.
>> Parce que les programmeurs, vous savez, si vous avez beaucoup de différentes lignes de code
et vous ne savez pas où ceux-ci vont mal,
et si une erreur se produit, vous voulez assurez-vous que vous obtenez cette erreur.
Et si typiquement si quelque chose va mal, nous aurons un retour d'un juste
nous assurer que nous savons qu'il est.
Donc, si vous voyez un retour zéro, que typiquement
signifie que votre programme est exécutée avec succès.
Bien?
Frais.
>> OK, second programme ici.
Considérez que.
Et si vous voyez un gars flotter, vous les gars pouvez probablement
avoir une bonne idée de ce que Je suis sur le point de vous demander.
>> Ainsi, lorsque ce programme exécute, comme vous pouvez le voir,
Je déclare un flotteur l'intérieur de ma fonction principale.
Je le nommant "répondre", et je suis la mise qui égale à un divisé par 10.
Je imprimer, l'une décimale, qui flottent.
Et puis je suis de retour à zéro.
>> Ainsi, lorsque l'exécution du programme, penser à avide maintenant,
ce programme imprime 0.0.
Comme nous le savons tous, nous espérons tous le savent, un divisé par 10 est pas un 0,00,
il est de 0,1.
Mais expliquer pourquoi ce programme pense que 1 divisé par 10 tirages à 0,1 autre
à 0,1?
Je vais vous donner les gars peut-être comme 30 secondes pensent juste rapidement à ce sujet
et je vais revenir au programme.
>> D'ACCORD.
Tout le monde veut donner un coup de feu?
En trois phrases ou moins, parce que généralement nous sommes
aller à restreindre toutes les réponses trois phrases ou moins
de sorte que vous ne vous contentez pas de régurgiter les choses au hasard sur votre questionnaire.
>> Ouais, prendre une photo.
>> Auditoire: Alors, je pense qu'il ya cette chose appelée, comme, [inaudible]
Donc il pourrait y avoir, par exemple, il pourrait y avoir, comme, 0,09,
que lorsque vous imprimez la première chiffre, il serait de 0,0?
>> PROFESSEUR: Fermer, pas tout à fait.
Christabell?
>> Public: Vous êtes l'un et divisant 10, et ils sont tous les deux des nombres entiers.
Et la façon dont il va pour stocker, il est comme un entier.
Et donc l'entier le plus proche serait 0.0.
Et donc ce est de 0,1.
PROFESSEUR: Ouais, ce est vraiment bon.
Voilà la bonne réponse.
Donc, cela est une très déroutant concept pour beaucoup d'enfants.
Et je veux vraiment faire en sorte que cela est renforcé dans la tête de tout le monde.
>> Donc, ce que nous appelons flottante Point imprécision,
où la raison pour laquelle beaucoup de vos programmes dans gourmande
ne pas travailler était initialement parce vous avez oublié de jeter votre variable.
Alors, que dit Christabell était tout à fait correct.
>> Un flotteur est intrinsèquement imprécis.
Parce que dans un ordinateur, à droite, nous avons une quantité finie de bits de mémoire
nous pouvons utiliser pour représenter des nombres.
Ainsi, par exemple, ce CS50 ID est-- Je pense qu'il est un ordinateur 64 bits.
>> Un flotteur ne peut être représenté par une quantité limitée de ces bits.
Et ainsi de 0,1 avec des zéros infinies, qui était de 0,1 est, non?
Mais nous ne pouvons pas réellement stocker ce nombre dans notre ordinateur.
Nous ne disposons pas juste assez de mémoire pour le faire.
>> Et donc l'approximation la plus proche de ce qui est stocké dans la mémoire est en fait
quelque chose comme 0.000 quelque chose, quelque chose, quelque chose, quelque chose.
Qui, une fois que vous tronquer il, arrondit à 0,0.
>> Et cet exemple est juste un qui démontre beaucoup de questions
nous avons chaque fois que nous sommes essayer de faire mal mathématiques
sans jeter comme un entier différent.
Il suffit donc de se méfier de ce qui se passe.
>> Le quiz, si nous vous donnons une bloc de code et il est comme,
ce qui imprime à la fin?
Et si elle est une valeur aléatoire vous les gars doivent savoir pourquoi ce qui se passe.
Ouais?
>> AUDIENCE: Truncate est de se débarrasser de tout après un certain point?
[INAUDIBLE]
PROFESSEUR: Ouais, donc en fait ce est un très mauvais exemple,
parce que tout ce qui fait 0,100 serait tronquer à 0,1.
Mais si vous étiez à it-- courir je ne sais pas rappelez-vous, car l'année dernière, ils
il a couru sur un programme différent.
Ils ont couru dans quelque chose appelé le CS50 Appliance, qui
est différent de l'ID.
Ce fut un système 32 bits, je pense.
Et donc il y avait des numéros différents.
>> Mais essentiellement, il suffit de savoir que tout le concept de troncature
et comment il coupe simplement les choses au large.
Et donc si elle rounds--
>> AUDIENCE: Sans arrondissement.
>> PROFESSEUR: Exactement.
Ouais.
Frais.
>> Salut, dans le dos.
Nous allons juste sur certaines consultation de quiz des questions.
>> Bien.
Alors envisager un programme différent ici.
Je vais vous donner un gars quelques minutes pour lire à ce sujet.
Ceci est quelque chose qui a été pendant très récemment que je pense soufflait beaucoup d'entre vous
l'esprit des gars.
Mais nous allons parler à travers ce nouveau juste
pour vous assurer de comprendre complètement.
D'ACCORD.
Toute personne a besoin plus de temps pour lire à travers ce code?
D'ACCORD.
>> Il me semble donc que dans ce programme, je suis
la création de deux chaînes à l'aide GetString.
Un appelés s et un autre appelé t.
Et si elles sont égales est égal à l'autre,
il devrait imprimer "Vous tapez la même chose. "
>> Mais elsewise, il serait imprimer, "Vous tapé des choses différentes ", non?
Semble très, très simple.
Mais, cependant, si je fait essayer d'écrire ce programme,
il semble que même quand je entrée les mêmes chaînes exactes,
elle imprime toujours dehors, "Vous tapé des choses différentes! "
Quelqu'un veut-il prendre une tir à la raison pour laquelle ce programme toujours
répond que les entrées sont différents, même
lorsque les mots eux-mêmes sont les mêmes?
>> Donc, si je devais input-- David amour d'utiliser un exemple comme maman, non?
Minuscules M-O-M S, T égaux minuscules M-O-M.
Si je courais à travers ce ce code, pourquoi serait-il
imprimer "vous avez saisi des choses différentes?"
>> Quelqu'un at besoin de plus le temps de penser à ce sujet?
OK, je pense que nous sommes bons.
Ouais?
>> AUDIENCE: OK, il est donc quelque chose à propos où il est stocké dans la mémoire, non?
>> PROFESSEUR: Yep.
>> AUDIENCE: Où il est comme, si cela chaîne s est stocké à la mémoire spot--
Je invente this-- est zéro.
PROFESSEUR: Bien sûr.
Public: Et chaîne t est stocké au lieu de la mémoire,
comme, 167, puis zéro ne correspond pas à 167.
>> PROFESSEUR: Exactement.
OK, donc rappeler cette incroyable révélation nous l'avons expliqué à vous les gars
la semaine dernière, que cordes ne sont pas vraiment existent pas?
Lorsque nous créons quelque chose appelé chaîne, nous sommes, en réalité,
créant ce qu'on appelle l'omble étoiles.
Qui est tout ce qu'il est un pointeur vers une chaîne ou un tableau de caractères.
>> Et donc, dans cet exemple, si je étaient à l'entrée M-O-M le chemin
que mon ordinateur serait stocker il est De mémoire barre oblique inverse de zéro, non?
Ces quatre personnages, caractères, seraient stockés quelque part.
>> Et puis ces quatre caractères, barre oblique inverse zéro,
sont stockées quelque part, non?
Je ne sais pas où les adresses sont, ils sont quelque part dans mon ordinateur.
Mais je ne sais pas exactement où ils sont.
>> Quand je crée une chaîne s, tout ce qui est vraiment
est un pointeur sur la commencer de cette chaîne.
Et quand je crée cette valeur de t, tout ce qui est un pointeur vers ici.
Et donc quand vous essayez à assimiler et vérifier
pour voir si s est égal à égal est égal à t, l'ordinateur
est vraiment juste de retourner à vous l'adresse de cette m
et l'adresse de ce m.
Et parce qu'ils sont deux morceaux de données
qui sont stockés dans deux différents adresses dans votre ordinateur,
votre ordinateur ne va jamais les reconnaître comme étant la même.
Quelqu'un veut- donner un coup à ce que nous
aurait à faire si nous voulions corriger cela et avoir un programme de course correcte
au lieu?
Pensez que pour quelques secondes.
Que devons-nous changer pour obtenir ce programme fonctionnement
la façon dont nous voulons qu'elle fonctionne?
>> Ouais, vouloir prendre un coup de poignard à elle?
>> AUDIENCE: Pouvons-nous essayer de déréférencer la pointeur et vérifier à travers le réseau?
PROFESSEUR: Voilà une façon de le faire.
Alors, quel est votre nom?
Je suis désolé, me rappeler.
>> Zee: Zee.
PROFESSEUR: Ouais, donc ce Zee suggérée serait absolument travailler.
Droit?
Nous pourrions déréférence le pointeur et effectivement aller et l'accès
les données physiques à l'intérieur d'ici.
Et nous ne pouvons comparer la totalité de l'écran.
>> Nous pouvons dire, OK, pointeur, me donner ce qu'il ya dedans ici.
Ce serait retourner un m.
Et je dirais, pointeur, me donner ce qu'il ya dedans ici.
Retour d'un m.
Avez celles match?
Oui.
Puis nous passons.
>> Nous continuons à vérifier l'ensemble de deux cordes tout le chemin jusqu'à la fin
et voir si ceux qui sont égaux, si toutes les valeurs sont égales.
Et lorsque toutes les valeurs sont égales, alors nous savons que les chaînes sont vrai.
Absolument, voilà comment nous pourrions le faire?
>> Quelqu'un at confus sur tout cela?
Le concept de la façon dont les chaînes sont vraiment seulement des pointeurs,
et comment ils ne sont pas vraiment existe pas?
Et pourquoi nous obtenons des erreurs comme la façon dont nous l'obtenons?
Parce que je vous garantis gars, pointeurs et l'allocation de chaîne et de la mémoire
vont venir.
>> Ouais?
>> AUDIENCE: [inaudible] déréférencer il, vous venez de mettre une étoile [inaudible]
PROFESSEUR: Droit.
Donc, pour derererence un moyen de pointeur d'aller à cette adresse du pointeur
et d'obtenir les données, la valeur il.
Et la façon de le faire est pointeur étoiles.
Ne confondez pas cela.
>> AUDIENCE: [inaudible].
>> PROFESSEUR: Ouais.
Auditoire: Alors, vous pouvez simplement écrire en cas d'égalité égaux étoiles t star.
>> PROFESSEUR: Eh bien, non.
Non.
>> Public: Cela ne veut pas assez bon, non?
>> PROFESSEUR: Il est pas, parce que vous êtes qu'un contrôle de la première lettre.
Vous allez probablement besoin d'une sorte de boucle qui
parcourt chaque simple caractère dans les deux chaînes.
Ouais.
Donc, si vous voulez vérifier, juste pour voir si ils ont commencé avec la même chose,
vous pouvez faire si, étoile s est égal à étoiles t.
Alors, vous savez qu'au moins ils commencé avec le même caractère.
>> Ouais?
>> AUDIENCE: Donc, la façon vous ne seriez que
comme un noyé pour boucle ou pointeur?
PROFESSEUR: Ouais.
À peu près juste une boucle for.
Rappelez-vous, David en classe mentionné le sucre syntaxique libre?
Et il avait cette très chose de déroutant étoiles t
plus un, où il intégrer à travers et il déplacer le pointeur?
La façon la plus facile de le faire ceci est juste t de i.
>> Donc, il est juste un tableau.
La façon dont vous auriez un pour boucle qui a couru de zéro à i,
i est la longueur de la chaîne, vous pouvez simplement
écrire que lieu de faire la pointeur ensemble, chose de référence.
Donc, ces choses sont exactement équivalent dans votre ordinateur.
>> Les gars, vous ne sera probablement pas besoin de savoir que,
mais il est bon de tout type de avoir dans le dos de votre esprit.
Il suffit de savoir que l'ordinateur reconnaît différents blocs de code
que la même chose.
Parce que cela est juste beaucoup plus l'utilisateur amicale pour nous de présenter les choses comme il est
un tableau.
Il est juste plus facile.
>> Auditoire: Alors utiliser strlen à aimer, get--
PROFESSEUR: Ouais.
AUDIENCE: OK.
PROFESSEUR: Vous pourriez utiliser strlen ou, si vous
n'a pas eu strlen vous pouvez juste faire jusqu'à jusqu'à ce que vous frappez barre oblique inverse de zéro pour les deux.
Soit pourrait fonctionner.
Ouais.
Auditoire: Alors, il est de déréférencer tous seul caractère si nous étions réellement
la rédaction de ce code, nous pourrait juste faire t parenthèses i
comme avec les étoiles en face de lui?
>> PROFESSEUR: Ouais, est égale à égaux s support i, puis continuer à aller de i
bas jusqu'à ce que vous atteignez la fin.
Ouais, voilà ce que vous feriez.
Et je vais réellement avoir un prochain exemple de cas où nous avons effectivement
écrire strlen si vous les gars seront genre d'arriver à jouer avec elle un peu.
>> Donc tout le monde est clair sur tout mémoire, cordes, les pointeurs, les adresses de qualité?
Certains concepts de plus haut niveau que vous sera à coup sûr besoin de savoir sur le quiz
demain.
>> Bien.
Bien.
Oui.
OK, donc une chose que nous vous demanderons également vous, comme nous le faisons chaque année un questionnaire, est,
supposons que vous avez oublié (qui nous semblons oublier de le faire chaque année)
dans lequel fichier d'entête strlen est déclarée.
Et donc nous devons réécrire nous-mêmes.
>> Voici une liste de lignes directrices que nous pouvons vous présenter
gars où vous aurez à supposer que la chaîne s ne sera pas nulle.
Vous pouvez supposer que S sera terminé par une barre oblique inverse zéro.
Donc, vous savez ce que est ce que ça va se terminer par.
>> Et, par exemple, que le longueur de bonjour serait de cinq ans.
Ainsi, vous pouvez supposer que bonjour sera de cinq, H-E-L-L-O.
Vous ne disposez pas de supposer que le backside zéro comptes de la longueur.
>> Cette dernière chose ici, ne pas soucier de débordement d'entier.
Quelqu'un se souvient ce débordement d'entier est?
>> AUDIENCE: dépasse les longueur de la [inaudible].
>> PROFESSEUR: Oui, pouvez-vous expliquer un peu, ça veut dire quoi?
>> Auditoire: Alors, je suppose que cela remonte à l'exemple en tronquant plus tôt.
Mais si vous avez seulement tant de numéros qui vont au-delà du nombre de bits
que vous pouvez réellement assigner qu'il sera juste un peu coupé.
PROFESSEUR: Ouais, donc sur un typique ordinateur, combien de bits avons-nous?
AUDIENCE: 32?
PROFESSEUR: Oui, 32, à droite.
Et donc voilà, quoi, quatre milliards, deux milliards?
Quatre milliards, jusqu'à quatre milliards entiers positifs, non?
Deux milliards négative, deux milliards positif,
dépend de comment vous voulez le faire.
>> Et donc en gros nous pouvons avoir suffisamment de nombres entiers qui peuvent aller jusqu'à
à deux pour le 31 moins 1, à droite?
Parce qu'une fois que nous avons atteint deux à la 32e, nous ne faisons pas
avoir autant de mémoire dans notre ordinateur.
>> Et donc, théoriquement, je pourrait venir avec un certain nombre
qui est, comme, deux à la 46e.
Il est un grand nombre-cul, mais Théoriquement, vous pouvez.
Et si le débordement entier est si vous essayez de créer un entier qui va au-delà
votre ordinateur est capable de stocker.
>> Et vous les gars pour cet exemple ne pas
à vous soucier de nous, vous donnant un géant chaîne qui est de deux à les caractères 32e
long.
Ce serait vraiment dire.
>> Très bien, alors je vais juste donner vous les gars de la structure de base de cette.
Vous allez créer un fonction appelée int strlen où
une passe dans, une star de char, ou de la ficelle, pointeur vers la chaîne appelé s.
>> Tout droit, tout le monde copie que vers le bas.
Frais.
Oops-- autre manière.
>> Donc, cela est un peu comme un pièce plus difficile de problème,
donc je vais vous donner les gars peut-être cinq à six minutes à type de remue-méninges
et d'écrire sur cette fonction.
>> PUBLIC: Nous ne faisons pas compte pour [inaudible],
nous ne devons pas utiliser des entiers?
>> PROFESSEUR: Non, vous ne le faites pas.
Je vais vous donner un indice gars.
Une boucle while peut être très utile ici.
Ouais.
Voici
bonbons.
Bonbons sera également disponible pour le quiz, je pense.
Alors vous les gars seront tous sucrée jusqu'à demain.
Peut i-- vous l'avez obtenu.
>> AUDIENCE: OK.
PROFESSEUR: Ouais.
>> Peut-être 30 secondes ou plus.
>> Très bien, si vous êtes pas fait, pas de soucis.
Nous allons passer à travers cette ensemble.
D'ACCORD.
Donc, je vais simplement la disposition du structure de base pour cette fonction ici.
Int strlen.
Tout d'abord, ce que quelqu'un veut dire moi ce que signifie int?
Nous avons besoin de cette fonction.
>> AUDIENCE: strlen [inaudible].
PROFESSEUR: Exactement.
Donc, quoi qu'il arrive ici, nous devons retourner un entier.
Et comme spécifié dans la spec, nous voulons return--
Allez-y les gars, juste continuer.
C'est parfait.
Mangez tout cela si je ne ai pas de le reprendre, effectivement.
L'int signifie simplement que vous êtes va être retournant un entier.
>> Quel est ce omble étoiles s?
Qu'est-ce que cela veut dire?
>> AUDIENCE: Comme, ce qui est entrée en.
PROFESSEUR: Exactement.
Et ce qui est presque même chose en tant que char étoiles?
AUDIENCE: String?
PROFESSEUR: Exactement.
Donc, tout ce que nous faisons est de donner ce un pointeur vers une chaîne.
D'ACCORD.
Frais.
>> Aussi, ne pas oublier, si nous oublions pour vous donner ces supports,
ne pas oublier de les écrire vous-même.
Parce que, théoriquement, votre code est incorrecte si vous oubliez de les écrire.
Il suffit de payer toujours l'attention.
Comme, petites choses que vous ne remarquez pas
lorsque vous programmez sur votre ordinateur portable, parce que votre ordinateur portable fait pour vous?
Ne pas oublier quand vous écrivez à la main.
Ouais?
>> AUDIENCE: Mais comment incorrect?
Comme, ne nous obtenons l'ensemble du problème de mal?
>> PROFESSEUR: Non, non.
Ne vous inquiétez pas.
Il est en fait théoriquement possible pour vous d'obtenir la totalité des points sur une question
même si votre code ne jamais courir dans la vie réelle.
Je vous suggère de ne pas essayer pour que cela se produise.
Par exemple, comme si tout qui est ici est exact,
mais vous oubliez une virgule ou une parenthèse, votre code ne sera pas réellement fonctionner.
Mais nous pouvons être miséricordieux.
>> Ouais?
>> Public: Avez-vous de commenter sur notre écriture?
>> PROFESSEUR: Non, non, non soucis à ce sujet.
Pas de commentaires.
Style devrait être bon.
Comme, ne pas Meuch tout sur une seule ligne.
Nous ne serons pas heureux avec vous si vous faites cela.
>> Quelqu'un veut- me donner la première ligne?
Hint, il est très facile.
>> Ouais?
>> AUDIENCE: Int, n est égal à zéro.
Il suffit de configurer comptoir.
PROFESSEUR: Donc, nous voulons une certaine une sorte de comptoir, à droite?
Je vais juste de le nommer "compter" pour des raisons de lisibilité.
Que voulons-nous pour le mettre égale à?
>> AUDIENCE: Zéro.
PROFESSEUR: Yep.
Point-virgule.
Il est également un point-virgule de tirage très étranges.
Juste pratiquer le faire.
>> Donc, nous voulons d'abord un compteur de type int.
Parce que nous voulons compter jusqu'à combien de nombreux personnages ou des lettres sont
dans cette chaîne, non?
Très facile première étape.
>> OK, peut-être un peu plus complexe Maintenant, comment allons-nous faire?
Quelqu'un veut- me donner la ligne de code
qui peut être en mesure d'aider la boucle Quoi que ce soit à travers?
>> Ouais, âme courageuse dans le dos?
>> AUDIENCE: OK, donc alors que le point astérisques, l'ouais, star de s,
est pas égal à zéro, puis faire quelque chose?
PROFESSEUR: Voilà vraiment, vraiment proche.
Vraiment proche.
Donc, je vais aborder deux choses avec cela.
Tout d'abord, il est pas exactement zéro.
Qu'Est-ce que c'est?
Il est le terminateur null, qui est oblique zéro.
Donc, ils sont différents dans termes de la façon dont ils sont stockés.
Donc, vous êtes vraiment proche.
>> Et d'autre part, nous ne voulons pas pour déplacer simplement le pointeur.
Nous voulons effectivement accéder aux valeurs, à droite?
Et alors comment faisons-nous cela?
Très facile.
Ne pas penser à des pointeurs, ne pas penser à des souvenirs.
Retour à deux semaines de ce cours.
>> AUDIENCE: [inaudible].
PROFESSEUR: Au, vous vous souvenez?
Quelles sont les chaînes?
Comment sont-ils stockés dans la mémoire?
>> AUDIENCE: Ils sont soulevées.
>> PROFESSEUR: Ils sont élevés.
Alors, comment faisons nous accédons chaque personnage à l'intérieur?
>> AUDIENCE: [inaudible].
PROFESSEUR: Exactement.
Donc ce qui se passe à l'intérieur while-- ici?
S -
>> AUDIENCE: I.
>> PROFESSEUR: Oh, je ne existe pas, il le fait?
>> AUDIENCE: Oh, compter?
>> PROFESSEUR: Nous pouvons simplement utiliser count, pas nous?
>> AUDIENCE: Désolé, je l'ai appelé i.
>> PROFESSEUR: Oui, il est tout bon.
Nous avons une variable ici, qui est déjà été déclaré comme notre compteur.
Alors, pourquoi ne pas simplement utiliser que se déplacer à travers la boucle while?
Cela a-t-il du sens?
>> Ainsi, alors que s de count-- Quelqu'un veut- de me donner ce qui arrive après ici?
PUBLIC: Il ne fait pas égale.
PROFESSEUR: Ne correspond pas, non?
Il est le bang est égal, point d'exclamation est égal,
tout ce que vous voulez les gars appeler ne pas equal--
>> AUDIENCE: [inaudible].
>> PROFESSEUR: Ouais.
Rappelez-vous apostrophe est pour un char, guillemets sont pour une chaîne.
Soyez prudent lorsque vous les utilisez.
Alors, quand nous sommes à la recherche par le biais le tableau, le dernier caractère,
nous savons que nous ne voulons pas qu'il soit anti-slash zéro.
>> Ainsi, alors que.
Nous ne sommes pas à la fin de la chaîne.
Que voulons-nous faire à l'intérieur?
>> PUBLIC: Nous voulons ajouter à la compteur de sorte qu'il compte plus plus?
PROFESSEUR: Exactement.
Donc, nous allons faire ici compter, compter plus plus.
Il manque une ligne de plus.
Nous y sommes presque.
Que sommes-nous oublions de le faire?
>> AUDIENCE: retour à zéro?
>> PROFESSEUR: Vous voulez revenir à zéro?
>> AUDIENCE: Non, retour à strlen.
Attendez.
PROFESSEUR: qui est stocké dans?
AUDIENCE: le comte.
Compter.
PROFESSEUR: Exactement.
Nous sommes donc ici va revenir comptage.
>> Parce que ce que nous sommes fais ici ultimately--
nous avons un compteur variable qui est va incrémenter le biais de notre chaîne.
Nous allons continuer, gardons aller, autour et autour dans cette boucle.
Et tandis que nous ne sommes pas sur la fin de cette chaîne, qui est le terminateur null.
>> Et chaque fois que nous passons par , nous ajoutons à notre comptoir.
Et nous allons encore le long de ce tableau.
Et à la fin, une fois que nous frapper la terminaison nulle,
nous savons, oh, nous pouvons casser, retourner le nombre.
Nous avons notre strlen.
>> Est-ce que tout le monde se comment cela a été mis en œuvre?
Alors que loops-- Je sais que nous avons pas trop fait avec eux,
mais ils sont généralement très, très utile si vous
ne savez pas ce que vous faites un arrêt état doit nécessairement être.
>> Question?
>> AUDIENCE: Pouvons-nous écrire null à la condition de tout?
>> PROFESSEUR: Alors?
Ouais, donc dans ce problème, je vous avais gars supposent que s ne sera pas nulle.
Parce que souvenez-vous, Théoriquement, si je vous donnais
un pointeur qui est trop grand de la mémoire, cela vous donnerait l'hypothèse nulle, non?
Voilà ce que l'exploitation système ferait.
>> Donc, si je ne vous dis pas à assumer s serait nulle, vous devez vérifier.
Donc, ici, vous feriez, si s est égal à égal nulle, retourner un.
Quelque chose comme ça.
AUDIENCE: [inaudible] zéro.
PROFESSEUR: OK, je vais le dire vous pourquoi nous ne pouvons pas faire cela.
Parce souvenir dans la mémoire, à droite, ici.
Nous allons ici.
>> Vous avez blocs géants de toute mémoire de grilles
qui stockent des valeurs différentes, non?
Et ainsi tout une chaîne pour est-- par exemple, si nous sommes à l'entrée bonjour,
il serait H-E-L-L-O barre oblique inverse de zéro, non?
Et puis, qui sait, comme aléatoire choses qui sont ici après.
>> Nous ne savons pas vraiment ce qui est là.
Et si vous aviez à faire au lieu de barre oblique inverse zéro,
null, il ne peut pas être nulle.
Parce qu'il peut simplement signifier quelques autres choses au hasard
qui ne font pas partie de votre chaîne.
Et la façon dont nous savons toujours que une chaîne se termine avec une barre oblique inverse est zéro.
Et pour que ya toujours comment nous vérifier pour voir la fin d'une chaîne.
>> Null, tout ce qui signifie que si vous avez un pointeur inexistant, tout d'abord,
ou si votre mémoire est tellement grande que vous ne pouvez pas revenir, alors il serait nulle.
Soyez donc très prudent lorsque la différenciation la différence entre null
et la barre oblique inverse zéro.
Ouais.
>> Tout le monde OK avec ça?
D'ACCORD.
>> Donc je devais vous les gars écrivez strlen.
Réalistement nous pourrions aussi demander que vous écrivez sur A à I, rappeler que "Atwoa"
ou ce que vous voulez les gars de l'appeler?
Cette fonction en Vigenère et César, qui
convertit une valeur ASCII à un nombre entier?
Cela a également venir sur les dernières quiz des fonctions que nous vous avons demandé d'écrire.
>> Quasiment toute fonction que vous avez utilisé et est
très facile à écrire vous-même, capteurs aiment est inférieure,
est supérieur, à réduire, à supérieure.
Fonctions qui convertissent une chaîne de minuscules en majuscules.
Nous savons tous comment le faire, non?
Il est assez facile.
Je veux juste vous assurer que vous can-- il est le même processus de pensée.
Vous itération juste par et vous mettez les choses.
Vous pouvez soit compter ou lorsque vous mettez les choses différemment.
>> Je voudrais suggest-- I Je ne sais pas si nous allons
vous demander de mémoriser ce que le capital A ou capitale Z, ou en minuscules ou en minuscules A
Z sont en ASCII, mais je dirais peut-être écrit que dans le cas
Nous faisons.
Juste pour que vous les gars ont une référence.
Comme majuscule est, quoi, 197?
Et puis minuscules est comme 50 quelque chose.
65, ouais, là vous allez.
Il suffit donc de savoir à peu près la différence entre eux est de 32.
Cela est assez importante.
Ouais.
Suis-je bien à ce sujet?
D'ACCORD.
>> PUBLIC: Nous pourrions théoriquement écrire quelques
de ces vers le bas ainsi sur notre little--
>> PROFESSEUR: Vous théoriquement pourrait suffit de copier la fonction vers le bas.
C'est vrai.
>> Audience: non [inaudible].
>> PROFESSEUR: Vous les gars ont une feuille.
Les gars, vous avez une feuille de note.
Vous pouvez le saisir.
Vous pouvez l'écrire.
Vous pouvez faire ce que vous voulez avec elle.
Ouais.
Donc, théoriquement, si vous voulez, allez.
>> AUDIENCE: [inaudible] mais nous ne le faisons pas vraiment
nécessairement besoin de se rappeler la valeur, nous pouvons simplement
utiliser le majuscules ou à fonctions inférieur, à droite?
PROFESSEUR: Ouais.
Mais si nous vous avons donné une question qui dit écrire à supérieure,
alors vous auriez besoin de l'écrire.
Alors vous les gars peut supposer que vous les gars ont accès à toutes les fonctions,
mais si vous souhaitez utiliser pour supérieure ou inférieur, qu'est-ce que vous avez aussi à faire?
>> AUDIENCE: [inaudible] utiliser CS50 [inaudible]
>> PROFESSEUR: Est-il CS50.h?
Soyez prudent là-bas.
>> Donc, pour supérieure, d'abaisser, est supérieure, est inférieur,
fonctions qui impliquent la manipulation de chaînes sont
le tout dans l'une ou l'autre Ascii ou dans la bibliothèque de mathématiques
ou dans la bibliothèque de chaîne.
Donc, si vous les gars utiliser ces fonctions, soyez prudent de se rappeler
d'inclure cet en-tête.
Donc, peut-être aussi quelque chose que vous vouloir inclure dans votre feuille,
ce sont l'en-tête?
Quelles sont les bibliothèques vous avez utilisé?
Quelles sont les fonctions l'intérieur de ces bibliothèques?
C'est important.
>> Ouais?
>> AUDIENCE: Pourrions-nous Cop Out et faire hashtag
à travers la absolument chaque lettre que nous ayons jamais
vu comme sur toutes les questions?
>> PROFESSEUR: Vous pourriez.
Je ne sais pas comment heureux nous allons être au grade
que quizz où chaque morceau de code est deux fois plus longtemps que cela doit être.
Je ne sais pas, nous pourrions enlever un point pour le style.
Mais théoriquement votre Code serait juste.
Vous les gars pouvait flic et vient tout inclure.
Cela est très bien aussi, ouais.
AUDIENCE: [inaudible].
PROFESSEUR: Ouais.
Je suggère de ne pas le faire si.
Ouais.
AUDIENCE: Cool.
PROFESSEUR: Bonne question.
Auditoire: Alors, le pire des cas.
PROFESSEUR: Le pire des cas.
Si vous oubliez totalement, vous pourriez le faire.
Ouais.
>> Yep, le code est juste là.
Je n utilisé au lieu de décompte, mais, vous savoir, quel que soit votre bateau flotte.
AUDIENCE: Attendez, donc nous ne pas avoir à hashtag
inclure parce que nous sommes à partir de l'int?
>> PROFESSEUR: Oui, je viens de supposer que on nous a demandé d'écrire la fonction.
Si vous voulez être sûr, vous pourrait probablement y mettre.
Mais je viens de ne pas la peine, oui.
>> Je ne sais même pas si vous besoin de toute bibliothèque pour cela.
Parce que vous n'êtes pas vraiment l'impression quoi que ce soit ou quoi que ce soit, non?
Ouais, je ne sais pas si vous avez besoin d'une bibliothèque.
>> D'ACCORD.
Ceci est également un peu plus long les lignes de la manipulation de la mémoire.
Ce genre de peu délicat.
Penses-y.
Vous avez une fonction appelée FUNC.
Je pourrais l'ai nommé que ce soit, mais je choisis de nommer FUNC.
Je l'ai dessus de ma principale.
Rappelez-vous, vous voulez avoir une fonction après votre principale,
vous voulez vous assurer que vous inclure le prototype de la partie supérieure.
>> Mais dans ce cas, il était si court que je sentais que je ne pouvais tout simplement
inclure au sommet de la principale.
Je ne l'ai pas besoin d'avoir le prototype, car il est déjà écrit ci-dessus.
Donc, tout ce que je fais dans ma fonction principale est de créer entier x est égal à 10.
Je vais appeler ma fonction FUNC, puis imprimer quelque chose.
>> Et alors que ce fait ce FUNC fait.
Les gars, vous voulez réfléchir à cela.
Parce qu'il est un peu délicat.
Il est très, très difficile, en fait.
Pensez à ce que cela programme serait en sortie.
Je vais vous donner deux minutes les gars.
>> Bonnes discussions?
>> AUDIENCE: Ouais.
>> PROFESSEUR: Ouais.
Très bien, alors cela est difficile pour une raison.
Et voilà pourquoi je voulais apporter ce à l'attention de tout le monde.
Quelqu'un veut-il me donner une suggestion, une tentative?
Que serait-ce imprimer?
Totalement très bien si vous avez tort.
Ouais?
>> AUDIENCE: Je pense qu'il est 100 et puis 10 sur deux lignes distinctes.
>> PROFESSEUR: Et un 10?
Quelqu'un at-il d'autres suppositions?
Ouais?
>> AUDIENCE: Peut-être juste parce que 10 FUNC ne revient pas quelque chose?
>> PROFESSEUR: OK, donc nous avoir conjecture numéro un
conjecture est que le numéro deux est aller juste pour imprimer 10.
Quelqu'un at-il d'autres suppositions?
D'ACCORD.
Donc, nous allons marcher à travers cela, non?
Chaque fois que vous obtenez un morceau de code, ne regardez pas seulement à elle et être comme,
Ah, voilà tellement de choses!
Je suis tellement confus!
Comme, vous calmer.
Il suffit de savoir que vous pourrait tout regarder à travers la ligne de code en ligne.
Voilà tout ce qu'il est.
Il est comme lire un livre.
>> Donc, avec toute fonction, nous commençons toujours au principal.
Nous allons donc commencer à void main int,
même le programme de déjà exécuté bas, à droite?
Commencez par en void main.
Int x est égal à 10.
>> Donc, je vais effacer cela.
Je vais tirer la mémoire juste pour que vous les gars peuvent sorte de voir ce qui se passe.
>> Rappelez-vous ici-bas nous avons notre pile?
Jusqu'à ici, nous avons notre tas quelque part ici.
Pile grandit, non?
Et au sein de la pile, vous avez le réseau fonctionnent ainsi que
tous viabilisé variables locales.
>> Donc, ici, int x égale à 10.
Au sein de notre fonction principale nous sommes la création d'une variable appelée x.
Nous mettons en place qui égale à 10.
Ici vous avez quelques x, et vous êtes paramètre qui égale à 10, à droite,
à l'intérieur principale.
Tout le monde la bonne?
>> Fonction.
Alors maintenant, au sein de notre principale fonction, nous appelons
la fonction que nous avons écrit ci-dessus.
Donc, nous allons maintenant entrer dans la deuxième fonction.
Nous allons créer un autre la variable int x est égal à 100.
Qu'est-ce qui se passe ici à la pile?
Qu'advient-il lorsque vous appelez un fonction qui crée de nouvelles variables?
Qu'est-ce qui se passe ici à la pile?
>> AUDIENCE: [inaudible] des tas sur le dessus?
PROFESSEUR: Ouais.
Donc, il crée en fait une copie.
Et ce type de piles sur le dessus.
Pensez à la stack-- une pile de livres, une pile de quoi que ce soit.
Piles sur le dessus, d'abord en dernier out, dernier entré, premier sorti.
>> Cela va donc de créer un x ici.
>> Cela va avoir funcs toutes les variables.
Génial.
Nous avons donc maintenant deux x différents qui représenter deux choses très différentes.
Ensuite, nous allons imprimer le nombre entier de x.
Donc, nous allons imprimer 100, non?
Parce que là, il est 100.
Voilà donc la première chose que ça va imprimer.
Comme cette fonction retourne rien, maintenant que la fonction, cette ligne principale
est fait.
Tout le monde bien avec moi jusqu'à présent?
>> Donc, nous sommes maintenant à travers deux des trois lignes de notre fonction principale.
Maintenant, nous allons à la troisième ligne.
Nous allons à printf.
Quel est ce x au sein principale?
Qu'est-ce que cela représente?
>> Quelle est la valeur x maintenant?
>> Audience: 100.
>> PROFESSEUR: Il est de 100?
AUDIENCE: Toujours 10.
PROFESSEUR: Toujours 10.
Ouais.
Parce que rappelez-vous, au sein de notre FUNC, x est égal à 100.
Mais si nous retournons à notre fonction principale,
cette variable est stockée dans un endroit différent sur notre pile.
>> Alors maintenant, nous devons revenir à la pile principale, tout à variables locales.
Et ici x est égal à 10.
Et donc nous allons imprimer 10.
>> Elle était donc tout à fait raison.
Nous allons avoir la de sortie 100 et 10.
Ouais?
AUDIENCE: Lorsque vous malloc, est-ce le tas ou la pile qui est [inaudible]?
PROFESSEUR: Lorsque vous malloc, vous prenez la mémoire du tas
et distributeurs.
Alors que vous ne disposez pas de jouer avec tout cela.
Donc je suppose que la plus grande livraison ici est quelque chose appelé la portée.
>> Pour ceux d'entre vous qui étaient à la session d'examen de la nuit dernière,
nous avons parlé brièvement à ce sujet.
Portée définit comment et lorsque vos variables existent.
Ou dans quels délais font vos variables existent.
>> A peu près la règle générale est, votre variables-- si vous les créez
l'intérieur braces-- bouclés ils existent seulement à l'intérieur de ces accolades.
>> Ainsi, par exemple dans notre fonction de FUNC, vous voyez ces deux accolades.
Si vous créez quelque chose à l'intérieur,
les chances sont tout ce que vous faites est la création d'une pile et le stockage qu'il n'y.
Même chose dans le principal.
Cela est juste stocké à l'intérieur de la principale.
>> Aussi, vous voulez être très, très prudent ici.
Parce que la portée prête également lui-même aux différents exemples.
Ainsi, par exemple pour un boucle, par int i est égal à 0.
I est moins, je ne sais pas, 10.
Je plus plus.
Et vous avez code à l'intérieur de celui-ci, non?
>> D'où vient cette variable, i, en fait seulement existe?
Seulement à l'intérieur de votre boucle.
Donc, je parie que beaucoup d'entre vous les gars ont probablement rencontré cette erreur lorsque
vous faites dans vos programmes psets.
Combien d'entre vous les gars ont essayé d'utiliser i en dehors d'une boucle for et avait une erreur?
Comme un entiers non référencés ou quelque chose comme ça?
>> La raison pour laquelle cela se produit est parce que vous êtes ici
créer quelque chose qui ne existe au sein de votre boucle.
Et si vous essayez de l'utiliser, je ne pas réellement exister en dehors d'elle.
Donc, fondamentalement, un ordinateur en disant, je ne savez pas ce que vous parlez.
Tout ce que je sais est que je suis un ici, mais maintenant plus.
>> Donc, si je devais créer un pour boucle à l'intérieur, à droite?
Et je vais créer un autre, comme int j, et le faire faire tout.
Et vous avez un code intérieur de cette boucle, j existe seulement ici.
Mais cela existe aussi dans les i.
Et si j existe seulement au sein de cette boucle,
alors i existe dans la chose entière.
>> Tout le monde est clair?
Même chose avec des instructions conditionnelles si vous voulez créer quelque chose.
Même chose avec les boucles de temps si vous voulez créer quelque chose.
Voilà quelque chose d'être très, très prudent sur.
Donc, ce fut un très bon problème dans le détecter qu'il a démontré deux choses.
Il a démontré la première, la portée.
Et elle a démontré également allocation de mémoire.
Parce que vous les gars doivent savoir que pousser vers le haut les fonctions de la pile.
Et que lorsque vous appelez fonctions, vous créez
essentiellement une nouvelle pile de la mémoire.
Cela est très différent de ce que la mémoire de votre secteur est.
Ouais.
Ouf!
Tout le monde OK à ce sujet?
Cela a été source de confusion.
Très bons sujets pour aller sur, parce que vous êtes probablement
allez obtenir quelque délicate des choses comme ça sur le quiz.
Ouais.
Frais.
Je mettrai vous obtenez 100 sur un ligne 10, puis de l'autre.
Oui, très bien.
>> OK, maintenant vous les gars obtiendrez la chance d'être les AT.
Vous obtenez de répondre à toutes la belle e-mails que je reçois parfois.
>> Alors, chers Andi, je vois, je pense que quelque chose est qui ne va pas avec mon compilateur.
Je suis certain que mon code est correct, mais je reçois une erreur de segmentation
chaque fois que je lance.
Ce qui se passe?
S'il vous plaît aider, beaucoup d'amour.
>> Si vous les gars par quelque chose comme que comment réagiriez-vous?
Ce sont en fait très commun questions que nous vous demanderont.
Est de savoir si, nous allons vous donner un scénario, nous nous donnons
votre meilleure estimation à ce qui se passe.
Quelqu'un at-il un coup de couteau à ce qui se passe?
Ouais?
>> AUDIENCE: Peut-être déréférencé la null, quelque chose comme le pointeur
est en montrant quelque chose nulle.
PROFESSEUR: Oui, ce serait une exemple de cas où cela se produirait.
Mais ce qui est l'image plus grande de ce qui se passe ici?
Public: Est-ce que vous essayez accéder à la mémoire que vous n'êtes pas
censés avoir accès?
PROFESSEUR: Exactement.
Alors, pensez à un défaut de seg, un hors limites, zone d'accès restreint en mémoire
que vous ne devriez pas être touchante.
>> Donc à peu près quand vous essayez à index-- comme par exemple,
vous avez déclaré une matrice de zéro à neuf.
Mais vous essayez de toucher que 10 valeur, vous ne disposez pas accès à cela.
Parce que vous avez pas déclaré.
Et si votre ordinateur va à regarder que comme,
uh oh, vous essayez d'aller en dehors des limites d'un index.
Je vais vous donner une erreur de segmentation.
>> Pensez que le segment, à droite?
Un segment supplémentaire, la faute est lorsque vous essayez de violer quelque chose
et vous ne devriez pas être là.
Segmentation fault est à tout moment vous essayez de toucher les choses
que vous ne devriez pas être touchante.
>> Donc exemples communs sont un indice.
Bien sûr, si vous essayez toucher qui était nulle,
ce serait aussi travailler ainsi.
Si votre pointeur essayait de toucher des choses qui ne devraient pas toucher,
qui pourrait aussi fonctionner aussi bien.
Le plus souvent vous aurez voir dans un tableau.
Tout le monde la bonne?
>> Auditoire: Alors, si vous voulez pour accéder à la 10e point de
et il ya seulement une limite de neuf ou quelque chose.
>> PROFESSEUR: Oui, exactement.
Pas mal.
Frais.
>> Cher Andi.
Donc nous avons ces merveilleux choses appelées sortes.
Si Merge sort-- comme nous scie dans l'exemple lorsque
David a fait l'ensemble chose en class-- pourquoi,
si elle est tellement plus rapide que l'un des autres sortes,
pourquoi avons-nous pris la peine même le savoir l'un des autres sortes?
>> Quelle est cette question vraiment vous demander?
Quel est le trois word--
Public: Quel est le compromis?
PROFESSEUR: Exactement.
Voilà ce que la question est posée.
Quel est le compromis entre Fusionner sorte versets d'autres sortes?
>> AUDIENCE: Prend la mémoire, non?
>> PROFESSEUR: Avez-vous expliquer que un peu plus?
D'abord nous allons expliquer magasin de fusion.
Comment ne Fusionner sorte travailler?
>> Auditoire: Alors, cela fonctionne par divisant le tout dans la moitié
puis mettre ensemble et réaffecter dans l'ordre,
comme à chaque fois que vous fusionnez les ensembles.
PROFESSEUR: Pretty much.
Donc, je peux tirer de cette, mais il serait me prendre cinq minutes pour puiser.
Regardez en arrière sur les rails en section où nous avons couvert le tri par fusion.
Exactement.
>> Ainsi, la manière Merge œuvres de tri est-il divise les choses en deux,
puis il ressemble juste à la des premières valeurs de chacun d'eux
et que seulement trie.
Crée en permanence de nouveaux tableaux et met les choses de plus en plus dans l'ordre.
Et donc tout ce est vraiment, vraiment rapide car it's-- vous le savez,
une recherche binaire est n log n.
Vous créez un si grand nombre différents tableaux que vous êtes
en utilisant une grande quantité de mémoire.
Et si bien qu'il est plus rapide, le compromis ici est que vous utilisez plus de mémoire.
>> Et donc, soupçon, trie et recherches ont couvert beaucoup plus cette année
qu'ils ne l'ont été au cours des années précédentes.
Les gars, vous devriez voir que reflétés en conséquence sur le quiz.
Je voudrais certainement passer du temps aller sur ce que toutes les différentes sortes
sont, comment la recherche binaire, comment linéaire travaux de recherche.
Comment peut-être pseudocode coder ceux dehors.
Quels sont les temps de fonctionnement?
Quelque chose comme temps de fonctionnement est très facile à copier vers le bas sur une feuille de note,
droit?
>> Il est vraiment difficile quand vous êtes au milieu du test
et vous devez comprendre cela.
Copiez le bas.
Je vous garantis que vous êtes allez avoir besoin de le savoir.
Quels sont les compromis?
Le pire des cas, meilleurs scénarios de cas pour chacun d'eux, très apprendre à se connaître.
Ouais?
>> AUDIENCE: Devons-nous savoir comment coder Merge sorte?
Comme, devons-nous rappeler le récursive?
>> PROFESSEUR: Je doute fortement, juste parce qu'il est comme assez compliqué.
Mais il ne peut pas être impossible si nous vous demander d'utiliser pseudo-it out.
Ouais.
>> Yep, OK, un de plus.
Ce peut-être venu dans vous dernière pièce en un peu.
Ouais?
Tout le monde a entendu?
>> OK, donc assez bien d'abord tout, ce type de programme
serait vous donner une sortie comme ça?
Souvenons nous vous avons demandé de se renseigner sur ce nouveau type d'outil de débogage?
Quel était le nom de celui-ci?
Valgrind, droit
>> Il était un programme où vous pourriez appeler cela pourrait
garder une trace de toute la mémoire que vous êtes l'aide dans votre programme et qui se passait.
Donc, si vous avez quelque chose, comme, définitivement perdu, 40 octets dans un seul bloc.
Probablement vous n'êtes pas ne pas oublier de le libérer.
Parce que si vous utilisez octets de mémoire, cela signifie que vous avez accédé à cette mémoire,
mais vous ne l'avez pas été en mesure de libérer.
Donc, vous voulez faire vous que vous êtes aussi
utilisant free-- qui est un function-- de libérer tous
de la mémoire réaffectés par malloc.
>> Frais.
Donc cette diapositive, je vais devoir en place.
Il est partout dans un grand nombre de conférences, dans un lot de lames de section.
Vous voulez vraiment vous assurer vous savez tout cela.
Soit dans votre feuille de note ou si vous vouloir mémoriser, libre à vous.
Voilà vraiment, vraiment, vraiment important.
>> Aussi une très bonne question que nous pouvons demander.
Pourquoi le regard de sélection est à Sélection sort-- tous les runtimes
sont n au carré.
Indépendamment de la façon dont la liste vient à vous aussi, alors pourquoi est-sélection sort--
Je vais vous donner les gars 30 deuxième penser à ce sujet.
Parce qu'il est une sorte de confusion.
Il implique une certaine pensée conceptuelle.
Pourquoi les durées de fonctionnement serait le même en à la fois les meilleurs et les pires scénarios?
>> Ouais?
>> AUDIENCE: Parce que chaque sorte de sélection position ou de l'espace dans ce petit tableau
chose ou que ce soit.
Ainsi, même dans le meilleur des cas, même si elle est parfaitement réglé,
il serait encore à être comme, OK, un.
Dans mon premier endroit où je ai une.
Et passer par chacun d'eux.
OK, on ​​est la plus petite.
Et puis il va à nouveau et est comme, OK, deux
est la plus petite de toutes les choses.
Mais il doit encore vérifier tous et chacun.
PROFESSEUR: Ouais.
Ainsi, par exemple, disons simplement nous avons une liste, déjà triés,
un tableau un à cinq.
La façon dont sortes de sélection est que il traverse, il vérifie les deux.
Ensuite, il vérifie les deux.
Et puis il vérifie, et il vérifie.
Il ne cesse de vérifier chacun d'eux, indépendamment de si oui ou non
il est effectivement triée.
Parce que ce tout simplement la façon dont le genre fonctionne.
>> Et si cette question est un peu comme une question conceptuelle nous demandons.
Où abord, vous savoir quelle sorte de sélection
est, à droite, pour être en mesure pour répondre à la question.
Vous devez être en mesure de comprendre conceptuellement ce qui se passe.
Et puis vous pouvez l'appliquer et de penser, OK disons simplement imaginer pire scénario.
Ils sont tous dans l'ordre décroissant.
Comment cela affecterait-il?
>> Que faire si ça ordre croissant?
Si elle est déjà triée?
Comment cela affecterait les runtimes?
Et puis Sélection sorte, vous remarquerez qu'il n'a pas réellement d'importance.
Parce que vous vérifiez tous les valeurs indépendamment de ce qui se passe.
>> Et ainsi de bonnes choses à retenir.
Pourquoi certaines sortes diffèrent des autres et la meilleure façon et les pires scénarios
aurait une incidence sur chacun d'eux.
>> Je vais vraiment frappé dans sortes parce que ce sera sur le quiz.
Ouais.
D'ACCORD.
Il ya six minutes.
Je peux prendre trois minutes de questions.
Je peux aussi traîner pour comme 20 minutes après l'article
si vous voulez poser des questions ainsi.
Quelqu'un at-il vraiment brève questions ou problèmes conceptuels
ils sont pas claires sur ce moment?
Ouais?
>> AUDIENCE: Pouvez-vous parler un peu peu sur les opérateurs de bits?
>> PROFESSEUR: Ouais.
Donc, les opérateurs sont binaires quelque chose que vous avez probablement
pourriez vouloir mettre sur votre feuille.
Donc quickly-- Je ne veux pas aller trop en profondeur
parce Harvard, dans leur examen session, couvert assez bien.
L'opérateur au niveau du bit, il est cinq d'entre eux, non?
>> Il ya ce qui est x ou de la fonction, il ya esperluette, qui est la et.
Pipe, qui est le ou.
Et puis vous avez les deux différents types de déplacements.
>> Si je vous donne deux valeurs, le cas Je vous donne, comme, l'un et l'autre.
Qu'est-ce que cela à évaluer?
Si je vous donne vrai et vrai, vrai?
Qu'en est-il vrai ou faux?
Toujours vrai, non?
Parce qu'il ya un ou.
Nous allons très probablement vous donner des chiffres.
Alors rappelez-vous, un égale vrai, zéro est égal à faux.
Et nous pourrions vous donner ces choses et vous demander de nous dire ce qui se passe.
Harvard couvre au sein de la première 10 minutes de leur session d'étude
vraiment, vraiment bien.
Donc, vous voulez les gars à faire que vous regardez en arrière sur ce point.
>> Public: Est-pisa5 va être sur le quiz?
PROFESSEUR: Non
Ne même pas regarder pisa5 dès maintenant.
C'est dur.
Il suffit de ne même pas la peine regardant pisa5.
>> Cependant, comme quelques conseils et des suggestions, je
vous suggère de commencer pisa5 dès que le test est terminé.
Ce sera le plus dur semaine, mais vous les gars
seront transmises sur les collines de rouler vert et chiots,
et il est très bien.
>> Cette classe devient significative plus facile après le cinquième jeu de processeurs.
Heures d'ouverture: PUBLIC sont dimanche, lundi?
PROFESSEUR: Ouais, donc les heures de bureau le dimanche à lundi pour le pset.
Les heures d'ouverture de ce soir essentiellement sera juste examen pour le quiz.
Si quelqu'un veut venir et poser Tas une question, nous serons là.
>> Je prendrai peut-être une question de plus si quelqu'un a une question?
Ouais?
PUBLIC: Quand vous êtes noeuds définissant, [inaudible]
si vous dites étoiles de noeud et puis la prochaine, fait automatiquement l'ordinateur
comprenez que vous êtes se référant à un autre pointeur?
>> PROFESSEUR: Non
>> AUDIENCE: Vous devez de rétablir le lien [inaudible]?
>> PROFESSEUR: Donc, fondamentalement, la struct d'un noeud est, souvenez-vous,
il est comme vous créez le noeud et alors vous avez un pointeur appelé prochaine.
Tout ce que vous faites est d'avoir la structure il.
Vous devez assigner ce pointeur quelque part.
Ainsi, les ordinateurs ne pas sait ce qu'il fait encore.
Vous devez effectivement attribuer quand vous créez votre liste chaînée.
Et voilà ce principalement pset 5 sera sur.
Donc pas de soucis au sujet tout cela en ce moment.
>> AUDIENCE: Donc, nous ne devons pas trop se concentrer sur la liste de liens, juste
la conception générale?
>> PROFESSEUR: Juste assez bien piles, files d'attente, listes de liens, arbres, tables de hachage.
Juste être capable de savoir ce qu'ils sont.
On ne va pas demander vous aimez quelque chose de spécifique
parce que nous avons vraiment fait un pas pset que le couvre tout cela encore.
>> Donc, dans les deux dernières minutes avant Je vous libérer de tuer ce quiz.
Joli beaucoup, comme, pensez à comment loin vous les gars êtes venus dans cette classe.
>> Je me souviens quand deux semaines de cette classe, certains d'entre vous
passer trois heures d'eau par écrit.
Combien de temps vous faudrait-il les gars à écrire l'eau maintenant?
30 secondes, peut-être?
Pensez à combien vous les gars ont appris.
CS est un sujet vraiment, vraiment dur.
Il ne fait aucun doute de cela.
Il est difficile, voilà pourquoi on ne l'étudie.
Il est juste difficile.
Et il est tout à fait bien.
>> Et je suis vraiment fier que tout le monde a rendu à ce point.
Psets ne sont pas faciles.
Ils prennent beaucoup de temps.
Vous les gars, je ne vous demandera jamais d'écrire le jeu de 15 ou Vigenère sur le pset.
Pas besoin de paniquer juste à ce sujet.
Tout ce que nous testons ici est d'évaluer votre connaissance conceptuelle, ainsi
comme certains de vos compétences de base de codage.
Le test est conçu pour être vraiment difficile.
Comme, il est conçu pour que vous ne recevez pas 100.
Il est également conçu pour que vous probablement ne pas être en mesure de terminer en 75 minutes.
Et cela est tout à fait bien.
Je suis un étudiant moi-même.
Je sais, je déteste quand je marche sur un quiz être comme, merde.
Cela a été vraiment difficile.
Probablement ce qui va se happen-- et est tout à fait bien,
Je vous le dis les gars en ce moment.
Les moyens sur ces choses ne sont pas élevés du tout.
>> Et pour ceux d'entre vous qui ont été d'obtenir, comme,
trois par trois sur vos ensembles de problèmes, cela ne signifie pas que vous êtes
allez obtenir un 60 pour cent dans cette classe.
Si vous obtenez 60% sur la quizz, qui ne fonctionne pas
dire que vous allez obtenir un D dans cette classe.
Nous voyons, en particulier, pour ma ceux d'entre vous dans ma section,
Je vois comment dur vous les gars travaillent tous.
Et je garde une trace de cela.
>> Les gars, vous serez très bien.
Il n'y a pas de mémoire institutionnelle le bonheur à la fin du semestre.
Parce que tous les enfants de Harvard disent leurs amis, oh, vous serez amende.
Personne ne vous dit les gars ici.
Donc, je dois vous dire que les gars ici.
>> Les gars, vous serez très bien.
Je suis tellement fier de vous tous les gars.
Le test sera difficile.
Étudier pour elle, et ensuite juste le jeter.
Préparez-vous à apprendre de nouvelles choses.
Et manger des bonbons.
Nous avons avoir beaucoup de bonbons.
>> Obtenez un sommeil de bonne nuit.
Ne pas dormir, parce ce serait vraiment mauvais.
CS est un beaucoup de logique.
Si vous ne dormez pas, vous ne pouvez pas fonctionner, et votre cerveau ne peut pas fonctionner.
Et je serai ici pour les prochaines 20 minutes si quelqu'un veut traîner.
Les gars, vous allez le tuer.
Bon chance.