>> [Jouer de la musique]
>> DAVID MALAN: Très bien.
Bienvenue.
C'est CS50, et c'est Une semaine, s'est poursuivie.
Donc l'une des raisons pour lesquelles nous avons été en passant autour des technologies comme
Google Glass est qu'ils viennent avec quelque chose de connu comme un API, une
Interface de programmation d'applications.
Et ce que cela signifie est que, avec l' fichiers droit et avec le droit
documentation, vous pouvez réellement écrire logiciels pour appareils même genre.
>> Et donc ce que nous avons à l'esprit vers semestres fin est, si un projet
impliquant, par exemple, Google pourrait verre appel, nous verrons ce que nous pouvons faire dans
Conditions de vous accrocher avec certains loaner matériel ainsi que l'
API accessible au public afin que vous puissiez réellement commencer à créer des logiciels
qui fonctionne sur le même verre Google.
>> Un autre dispositif que nous avons joué avec du retard que nous avons pensé que peut-être
plaisir à la fin de semestre est cette petite chose ici.
Ça s'appelle Leap Motion et ce que vous voir est techniquement une
publicité pour l'appareil, mais il ne parle de ce que ce particulier
dispositif est capable de.
Et, aussi, est livré avec une API via que vous pouvez écrire du logiciel pour
contrôler votre ordinateur de façon tout à fait comme ce film d'une minute ici.
>> [LECTURE VIDEO]
>> [FIN LECTURE VIDÉO]
>> Alors maintenant, ce dispositif arrive à être mis en œuvre comme un petit USB
connecteur que vous pouvez brancher sur votre ordinateur, mais je ne serais pas surpris
si avant longtemps, nous avons ce genre de technologies dans le prochain lot d'ordinateurs
et Mac afin que vous puissiez, en effet, interagir avec lui en
d'une manière comme cela.
En fait, ce que j'ai pensé que je ferais aussi, c'est J'ai tiré une petite démonstration
programme qui vient avec ce logiciel.
Alors j'ai mis le petit capteur en face de mon ordinateur portable.
>> Et comme vous pouvez le voir, il réalise déjà que ma main est là
contrôler.
Et tout cela ne demande est merveille petites choses comme ça.
Mais vous pouvez voir que, en effet, J'ai cinq doigts là-bas.
Si nous pouvons lui faire faire tous les 10, vous pouvez imaginer un piano soignée
l'application ou analogue.
Donc, si vous voulez venir après la classe aujourd'hui et de jouer avec ce que
Eh bien, vous êtes invités à.
Donc plus sur ce vers la fin de semestre.
>> Ainsi, un couple d'administration annonces.
Un, faire partie de ce vendredi à midi au cs60.net/section.
Cette URL est en cours de page d'accueil ainsi.
Dans l'intervalle, cependant, supersections fera ses débuts ce dimanche.
Supersections sont une chose une seule fois, car il nous faut un certain temps pour travailler
savoir qui est dans quelle section et où.
>> Donc, ce dimanche, il y aura une section pour ceux qui sont moins à l'aise,
une section pour ceux plus à l'aise.
Et ceux d'entre vous quelque part dans entre sont invités à aller à
ou les deux ou aucun des deux.
Ces deux seront filmés.
Ils vont être dans un plus grand auditorium de une section devrait normalement être po
Mais le but ici est de vous équiper avec un peu de réconfort avec un problème réglé,
avec C, avec l'appareil CS50, cette week-end, avant même que vous trouvez sur votre
affectation de la section officielle.
Donc, vous allez rencontrer votre TF et votre petit groupe de sectionmates dans environ
le temps d'une semaine.
>> Les heures de bureau, quant à lui, ont été en cours.
Faire profiter d'eux ce soir ou demain soir, si vous le souhaitez.
ensemble du problème 0 est dû le vendredi.
C'est un jour plus tard que l' régulièrement programmée jeudi.
Mais avec le jeu de problème 1, vous verrez qu 'il comporte un certain échauffement
exercices avec laquelle vous vous peut prolonger votre
Jeudi échéance au vendredi.
ensemble du problème 1, quant à lui, fera ses débuts sur le site Web du cours prochain
Vendredi, si vous voulez vous plonger dans comme je l'ai fait une fois en retard
Vendredi soir dans votre chambre.
>> Alors cs50.net/appliance est le lieu où vous pouvez obtenir l'appareil CS50
que nous avons commencé en utilisant le lundi.
Nous utiliserons un peu plus aujourd'hui.
Mais rassurez-vous que le problème réglé 1 spécification vous guidera à travers
précisément les étapes que vous devez pour obtenir cette place et fonctionne.
Ne vous inquiétez donc pas de faire ça avant Pset 1 si vous ne souhaitez pas.
>> Très bien.
Nous avons donc examiné lundi au code source, mais dans le cadre d'une nouvelle
langage de programmation, à savoir C, et C, Contrairement aux rayures, n'est pas graphique.
Ce n'est pas des pièces de puzzle.
C'est syntaxe plus proche de l'anglais.
Et il ya quelques étapes en fait, l'écriture et l'exécution d'un
programme en C, car en plus de la source code comme ceci, vous besoin de quelque chose
appelé un compilateur.
Et en termes simples, ce qui fait un compilateur pour nous?
Ouais.
>> ETUDIANT: Il convertit le code que vous écrivez à 0 et de 1.
>> DAVID MALAN: Bon.
Donc, il convertit le code nous écrivons à 0 et de 1.
Il convertit les soi-disant code source à code objet, dont le dernier est
un petit quelque chose de ce genre.
Et c'est votre CPU, le cerveau des votre ordinateur, qu'en raison de la
personnes qui ont créé ces ordinateurs, savoir ce que ces séquences
de moyenne 0 et de 1.
>> Peut-être que cela signifie impression.
Peut-être que cela veut dire plus.
Peut-être que cela signifie soustraction.
Peut-être que cela signifie afficher un graphique.
Il ya des motifs de bits prédéfinis que le monde a décidé de dire
certaines choses.
Mais pour la plupart, dans ce cours, nous allons travailler à un niveau supérieur, et
nous tenons pour acquis qu'il existe des choses comme les compilateurs qui peuvent
rendre notre fonction de code source dans la façon dont nous entendons.
>> Ainsi, le programme que nous avons écrit la première semaine dernière puis a commencé à bâbord, afin de
parler, à C cette dernière Lundi était présent.
Lorsque drapeau vert cliqué, dire bonjour.
Ce fut, bien sûr, écrit dans Scratch.
Et je prétendais que l'équivalent programme en C avait l'air un peu
quelque chose comme ça.
>> Alors que je pensais que nous ferions dans un premier temps est, nous allons démêler ce qui ressemble, à première
coup d'œil, il est vrai, comme assez obscur la syntaxe, mais vous allez commencer à remarquer
modèles assez rapidement.
Ce que nous allons faire aujourd'hui, c'est aussi fournir vous avec un modèle mental pour certains
canonique, certaines constructions standards dans la programmation.
Et puis nous obtenons réellement nos mains sale avec quelques exemples ainsi.
>> Donc, pour ceux d'entre vous plus à l'aise, se rendre compte que cette semaine, puis prochaine
semaine peut très bien être un peu de révision.
Mais surtout quand l'édition pirate de problème ensemble 1 sort sur le
le site Web de cours le vendredi, je ne pense vous verrez que même si vous remplissez
quelques blancs au cours de la prochaine semaine ou deux, vous allez commencer à avoir de plus en plus
contestée et rencontrer nouveaux et plus récents choses.
>> Donc, nous allons taquiner ce programme à part quelques lignes à la fois.
Au sommet, nous avons ce que c'est techniquement appelé
directive de préprocesseur.
C'est juste une ligne de code qui dit à inclure le contenu d'un fichier,
J'ai appelé standard / N, l'entrée standard - ou, désolé, E / S standard, standard
d'entrée / sortie,. h, à l'intérieur de mon propre programme.
>> Donc, en d'autres termes, si j'ai écrit ce programme avec un simple éditeur de texte comme
gedit, l'équivalent de plus simple quelque chose comme Microsoft Word, qui
instruction, # include stdio.h, est juste va dire au compilateur, prenez le
contenu de cet autre dossier, stdio.h, et collez-les ici.
>> Maintenant, pourquoi je m'inquiète?
Qu'avons-nous revendiquons est à l'intérieur de ce fichier stdio.h appelé, qui est stocké
quelque part sur mon disque dur, ou dans ce cas, quelque part dans l'appareil CS50?
Quelqu'un d'autre l'a mis là pour moi.
Mais ce qu'il ya dedans?
>> Ouais, c'est donc une déclaration d' une fonction appelée printf.
Rappelle donc la fonction printf qui affiche les mots et caractères
numéros sur l'écran à mon appel d'offres.
Mais je n'ai pas l'écrire.
CS50 n'a pas écrit cela.
il ya des années Quelqu'un a écrit, et ils essentiellement nous a donné la recette pour elle
dans un fichier appelé stdio.h.
Alors que la première ligne donne juste me donner accès aux fonctions que quelqu'un d'autre
écrit il ya des années, entre qui sont printf.
>> Maintenant, la ligne suivante, je vais saluer mon part à, au moins jusqu'à la semaine prochaine.
Mais pour l'instant, sachez que int main (void) est essentiellement l'équivalent de cette
pièce de puzzle jaune lorsque drapeau vert cliqué.
Le monde, il ya des années, a décidé que si vous écrivez un programme dans le
langue appelée C, vous commencez votre programme avec une ligne
qui ressemble à ça.
Dans à peu près le temps d'une semaine, ça va faire ce sentiment est int, ce vide est.
Mais pour l'instant, il suffit de penser comme cette pièce de puzzle jaune.
>> Maintenant, à côté, nous avons une accolade suivie par un autre proche accolade,
pour ainsi dire.
Et nous verrons tout au long de ces des programmes en C, ainsi que
JavaScript et PHP.
Et ce juste encapsulent lignes connexes de code.
L'accolade ouvrante essentiellement dit, voici un peu de code.
Et l'accolade fermée, qui est inclinée dans l'autre sens, il suffit
moyens, c'est tout pour le code correspondant.
>> Ainsi, la ligne juteuse dans cette première programme est le dernier, printf,
entre guillemets, bonjour tout le monde.
Et j'ai appelé la chose entre citations que la dernière fois?
Donc, c'est une chaîne.
Et une chaîne est juste la techno expression d'une séquence de
caractères, un mot, une phrase.
Même une simple lettre pouvait être entre guillemets.
Mais c'est une séquence de zéro un ou plusieurs caractères.
>> Backslash-n, cependant, semble un peu étrange.
Mais cela signifiait simplement quelque chose simple de l'ordinateur.
Quoi de barre oblique inverse-n?
Nouvelle ligne.
Donc, c'est juste la séquence spéciale de caractères que le monde a décidé
moyens mis un saut de ligne là, parce que le compilateur va réellement obtenir
confus, généralement, si vous, très compréhensible, mais à tort, juste
commencer à frapper sur Entrée pour mettre nouvelles lignes dans votre code.
Vous devez être un peu plus explicite avec barre oblique inverse-n.
>> Et nous verrons, il ya quelques autres tels modèles pour les caractères spéciaux.
Par exemple, si vous voulez laisser votre esprit vagabonder à une affaire d'angle,
suppose que je voulais imprimer une guillemet à l'écran pour
une raison quelconque, cela semblerait être un peu problématique, non?
Parce que si je mets des guillemets dans le milieu de «Bonjour tout le monde," quelle qu'en soit la
pourquoi, pourquoi est-ce que semblent potentiellement problématique?
Il brise la chaîne.
>> Le compilateur est tout un programme.
Un programme comme un compilateur va tout simplement à lire le code de haut en bas,
de gauche à droite.
Et si voit trois guillemets place de deux, il ne va pas savoir
si vous voulez dire que la chose à gauche devrait être la chaîne, ou la chose à
la droite ou la chose entière.
C'est ambigu, et alors quelle typique compilateur faire est simplement de paniquer,
et vous donner quelques message d'erreur, et faites-vous traiter le problème.
>> Donc, étant donné que les anti-slash-n signifie une nouvelle ligne, quelles seraient vos instincts maintenant
commencer à être si vous voulez inclure quelque chose anormale comme un double
citer à l'intérieur de cette autre cité string?
Backslash-guillemet.
Et donc nous verrons ce type de motif aussi.
>> Si vous voulez faire quelque chose d'un peu étrange, vous vous rendrez compte que l'
solutions suivent souvent un schéma, et la barre oblique inverse
désigne une séquence d'échappement.
Et cela signifie quelque chose de spécial que nous devons représenter dans un
manière différente.
Quant à savoir comment représentez-vous une barre oblique inverse, eh bien, nous allons
revenir à cela.
Mais la réponse, elle aussi, est en fait un peu évident.
>> Donc, nous allons maintenant vous présenter un autre constructions de programmation
que vous avez vu dans Scratch.
Vous avez probablement pris pour acquis déjà si vous avez déjà plongé dans
problème réglé 0.
Mais nous allons maintenant vous présenter la syntaxe C pour ceux-ci autrement assez intuitive
idées, au moins certains d'entre eux.
>> Donc, cette notion d'un état ou d' une branche, alors qu'auparavant nous
représenté avec le code qui ressemblait de ce genre sur la gauche dans Scratch -
si x est inférieur à y, dites-le -
place maintenant dans C - permettez-moi aiguiser dans le cas le plus simple -
nous allons simplement dire que, si, ouvrez parenthèse, quelque chose est vrai - un
Expression booléenne va aller où je l'ai dit état -
parenthèse fermante, puis faire ce qui est à l'intérieur de ces accolades.
>> Donc, là aussi, les accolades sont un peu comme Scratch de
Pièces de puzzle en forme de U.
Faire ce qui est à l'intérieur de ces accolades.
Dans ce cas, slash slash.
Et remarquez que c'est un attaquant Slash, pas une barre oblique inverse.
Barre oblique, barre oblique, pour ceux qui ont programmé
avant, signifie simplement -
c'est juste un commentaire.
Un commentaire n'est pas une ligne de code, en tant que tel.
C'est une ligne de l'anglais que vous, humaine, ont écrit vous-même pour
peut-être vous rappeler de faire quelque chose, expliquer à vous-même, pour expliquer aux
quelqu'un d'autre, ce que votre code est fait.
C'est juste un commentaire descriptif.
>> Maintenant, bien sûr, nous pouvons avoir un double sens bifurcation de la route, juste en faisant cela, un
fourchette à trois voies de la route en faisant cela, et si vous continuez cette
motif, vous pouvez avoir quatre voies, à cinq voies, fourchettes six voies de la route si
vous avez besoin pour gérer, en effet, que de nombreuses conditions.
Et puis notez le parallélisme ici -
if (condition), else if (condition), et le seul qui soit un peu
étrange, c'est le dernier, qui C'est juste que le reste.
Mais encore une fois, ce n'est identique, conceptuellement, à ce que nous avons fait
déjà, même si la syntaxe prendre un peu pour s'y habituer.
>> Maintenant, dans cet exemple, il ya une autre syntaxe étrange.
Nous voyons printf encore, parenthèse ouverte, et parenthèse fermante.
Et à l'intérieur de là est une chaîne entre guillemets.
Les parenthèses, dans le contexte de printf, allez sur la gauche
et à droite de quoi?
Qu'est-ce que nous décrivons cité chaîne comme plus généralement?
>> Il s'agit donc d'un argument.
Chaque fois que vous avez une fonction, comme printf, puis une parenthèse ouverte et une
Fermer paren et quelque chose à l'intérieur de il, si c'est une chaîne ou un
entier, ou toute autre chose, la chose en entre les parenthèses est appelé
un argument.
>> Et un argument influe seulement Le comportement de la fonction.
Dans ce cas, il est assez clair comment.
x <y est ce qui est transmis, pour ainsi dire, comme un argument.
Et printf va imprimer exactement cela.
Parce que sûrement, il ya des années-personnes qui œuvre printf n'avait aucune idée
ce que nous successeurs humains ont été va utiliser printf pour.
Voilà pourquoi arguments existent, influer sur le comportement après une fonction de
été écrit.
>> Maintenant, expression booléenne.
Nous avons vu ces derniers avant de Scratch.
Il s'avère en C, vous pouvez également "ou" ensemble, pour ainsi dire.
Deux barres verticales signifie que ce bloc du code, ce faire, la volonté
exécuter, si la première condition est vraie ou la seconde condition est vraie.
Et même si vous ne pourriez pas avoir fait ceci dans Scratch, vous pourriez en effet
faire dans Scratch, et vous pouvez aussi s'exprimer différemment -
si la première condition et la seconde état sont vraies, alors faire ce qui est
à l'intérieur des accolades.
>> Et soit dit en passant, la raison pour laquelle il ya un double esperluette et un double
barre verticale, nous verrons la suite qu'une seule barre verticale et une
esperluette simple effectivement avoir des ce qui signifie en C. Donc pour l'instant,
que la duplication des symboles est intentionnel.
>> Donc, nous allons introduire, brièvement, cette autre bit de la syntaxe.
Ce n'est pas tout reporter sur Scratch, mais je prétends que je peux
mettre en œuvre la notion d'une autre si, si Sinon, si bien, si else aide
quelque chose qui s'appelle une instruction switch.
Et la seule raison pour laquelle cela existe vraiment est de vous donner, le programmeur, un
manière légèrement différente de la résolution de certains problème, même si logiquement il
ne vous donne pas de nouvelles fonctionnalités.
>> Je veux dire par cela.
Quand vous dites interrupteur, puis un espace, et ensuite une paire de parenthèses, à l'intérieur
qui va une expression -
et c'est peut-être un peu non évidente au début, mais ce n'est pas un argument,
techniquement, parce interrupteur n'est pas une fonction.
Donc pour l'instant, supposons simplement que nous utilisons parenthèses dans différents endroits
pour des raisons différentes.
>> Alors mettez expression signifie que je peux mettre une variable à l'intérieur de ceux
où il est dit entre parenthèses expression.
Et puis, si cette variable -
supposons que ça s'appelle x, et c'est juste un entier -
Je peux ensuite énumérer dans mon diaporama ici quelque chose comme ça.
Si x est ma variable, et je vouloir faire quelque chose si x
égale à 1, je peux le faire.
>> Si je veux au lieu de faire quelque chose si x est 2, je peux le faire.
Sinon, si je veux faire autre chose entièrement, je peux avoir un cas de défaut
auquel cas je fais autre chose.
Donc, dans ce sens, c'est équivalent à un si x est égal à égal à 1, sinon si d'autre,
mais je dis cela maintenant juste parce que nous verrons à nouveau.
Mais pour l'instant, il suffit de savoir qu'il existe.
>> Très bien.
Donc, ces deux derniers sont un peu plus complexe à première vue, mais ils ne
quelque chose d'assez simple.
Une boucle en C est un morceau de code qui fait juste quelque chose de nouveau et
encore et encore.
Et la seule chose ennuyeuse à ce sujet est c'est que c'est un peu cryptique
de vous exprimer dans cette cyclique modèle, mais le monde standardisé
de la façon suivante.
>> Lorsque vous utilisez une boucle for, vous avez une paire de parenthèses nouveau.
Et remarquez les deux points-virgules là-dedans.
Ces deux points-virgules séparés trois expressions différentes à l'intérieur de l'
entre parenthèses.
L'un est le soi-disant initialisations.
L'une est la condition dite.
Et on est soi-disant mises à jour.
>> Regarda dans l'abstrait, c'est complètement non évidente, nous allons donc regarder
un exemple concret.
Dans Scratch nous avions un bloc de répétition.
Et ce bloc a dit répéter 10 fois, dire "Bonjour tout le monde." Permettez-moi de réclame pour
maintenant, et nous allons revenir à cela, et Cela, aussi, va devenir plus familier avec
vous d'ici peu, l'équivalent C code pourrait être dit cela -
une instruction for et un espace, une paire d' parenthèses, notez les points-virgules dans
là, qui séparent trois groupes distincts choses, l'initialisation, l'
état, et la mise à jour.
>> Et essayer de deviner ce que le premier on fait.
Int i = 0.
En termes simples, rugueux, ce qui est que faire pour nous, sans doute?
Donc oui.
C'est déclarant une variable appelée i, et il le donne quelle valeur?
0.
Donc, il s'agit de créer une variable appelée i, mémoriser la valeur 0 en elle.
C'est ce qu'on appelle l'initialisation.
>> Bon, maintenant, je réclamé avant que la chose milieu, i
<10, est la condition.
Alors qu'est-ce fait?
Eh bien, ce que la boucle fait quand un programme avec une boucle est exécutée, est
chaque fois que l'ordinateur fonctionne grâce cette boucle, de haut en bas, en haut à
bas, tout comme vous les gars fait quand compter vous-mêmes et assis,
encore et encore et encore, l'ordinateur va
pour vérifier cette condition.
Et si i est inférieur à 10, il va le faire à nouveau.
Si i est inférieur à 10, il va le faire à nouveau.
Si i est inférieur à dix, il va le faire à nouveau.
Alors que semble suggérer que j'espère que je change.
Sinon, nous aurions une boucle infinie.
Et en effet, je change, parce que le dernière chose après la virgule il
la syntaxe quelque peu énigmatique de i + +.
Mais ceux d'entre vous qui avez fait cette avant, cela signifie juste
tout simplement quoi?
>> ÉTUDIANTS: [interposition VOIX].
>> DAVID MALAN: Ajoutez 1 à i.
Incrémenter i.
Donc, nous avons vu un jeu de rayures pièce pour que, en fait.
Il ne ressemblait pas à i + +, mais juste moyens, tout simplement, l'accroissement de la
Value I de 1 à chaque fois que vous faites cela.
Donc, littéralement, vous commencez par i initialiser à 0.
Vous vérifiez ensuite votre condition.
Est de 0 à moins de 10?
Oui.
Nous passons par la boucle.
>> La prochaine chose que je réclame l'ordinateur de allons faire, c'est que ça va
pour incrémenter i.
Donc, je passe à 1.
Il vérifie l'état.
Est de 1 à moins de 10?
Bien sûr.
Donc le fait encore.
Puis il incrémente i + + à 2.
Est de 2 à moins de 10?
Oui.
Et encore et encore et encore.
Et finalement, en raison de la plus-plussing, nous arrivons à i est égal à 10.
Est de 10 à moins de 10?
Eh bien, évidemment pas.
Et c'est le moment où la boucle s'arrête juste.
Et si vous avez plus de code sur l' écran vers le bas ci-dessous, l'ordinateur
produit pour exécuter ce code à la place.
>> Encore une fois, même si cela va à regarder et se sentir un peu étrange au
première, certainement pour ceux d'entre vous qui n'ont jamais programmé auparavant, il
réduit littéralement conceptuellement pour ce qui est par ailleurs un très
casse-tête simple pièce en Scratch.
>> Très bien, je l'ai promis qu'il y aurait d'autres analogues de Scratch.
Il ya celui-là aussi.
Et nous avons vu brièvement sur cette dernière fois.
Mais rappelez-vous toujours l' bloquer à zéro?
Il fait juste quelque chose pour toujours?
Je prétendais que vous pourriez mettre en œuvre ce de cette manière.
Et vous pouvez réellement mettre en œuvre cette dans un tas de façons différentes.
>> Mais la boucle while est juste un autre façon C de vous exprimer.
A la fin de la journée, vous ne pouvez pas faire n'importe quoi avec une boucle while que vous
ne peut pas avec une boucle for.
Ils sont donc à la fin de l' jour fonctionnellement les mêmes.
Mais il vous permet de vous exprimer un peu différemment dans
de la façon suivante.
>> Avec la boucle while, c'est ce qui est en parenthèses qui est à nouveau contrôlées et
encore et encore.
Et dès que cette expression est fausse, puis l'exécution de la boucle s'arrête,
et que l'ordinateur procède à exécuter tout autre code
avoir dans votre fichier.
>> Mais ce qui est intéressant ici, c'est que je me suis littéralement tapé vrai.
Et vrai, c'est un type de valeur booléenne, une valeur vraie ou fausse.
Ainsi pourrait jamais devenir vrai false si j'ai littéralement
codé en dur dans mon programme?
Donc pas.
C'est un peu étrange que je l'ai fait.
Mais vrai, c'est vrai.
Il n'ya pas de plus-plussing.
Il n'y a aucune utilisation de variables ici.
Donc, parce que je codé en dur tout en vrai, ce boucle va toujours à évaluer
encore et encore et encore.
>> Alors, combien de fois est mondialement bonjour aller à imprimer sur l'écran?
Toujours.
Un nombre infini de fois jusqu'à ce que le batterie meurt ou d'autres externes
événement se produit.
Donc, ce n'est probablement pas le meilleur programme à écrire, parce que si l'utilisateur
ne peut jamais quitter votre programme, c'est probablement pas ce que vous vouliez.
>> Mais parfois, les programmes devraient avoir une boucle infinie.
Par exemple, si votre ordinateur est équipé d'un horloge sur lui, il serait certainement
bien si votre horloge ne garder mise à jour lui-même pour toujours, mais une fois
deuxième ou une fois par minute ou quelque chose comme ça.
Ainsi, même les boucles infinies ont leur place.
>> Très bien.
Enfin, celui-ci.
Et celui-ci est un peu différent fonctionnellement, et nous y reviendrons
c'est probablement dans Pset 1.
Mais il ya un autre type de boucle appelé une boucle Do While.
Et la seule différence entre un faire en boucle et, disons, une boucle while,
c'est que la condition est vérifiée pas avant d'exécuter le code, mais après
vous exécutez le code.
Alors au sommet pour le tout boucle, alors que le faire pendant
vérifie au fond.
>> Et cela signifie simplement que la boucle while exécutons habituellement plus de temps
ou moins de fois que la boucle while?
Potentiellement plus de temps, parce que faire while dit clairement ce faire,
seulement après quoi vous vérifiez si l'état de l'intérieur de l'
parenthèses est vrai.
>> Nous allons donc voir ce nouveau probablement dans Pset 1.
Si jamais vous voulez faire quelque chose à moins une fois et puis peut-être un peu plus
fois, c'est une bonne construire à utiliser.
Mais une boucle while, en revanche, sera vérifier son état premier.
Et c'est tout pour les boucles en C, ne tandis que, de temps, et pour les boucles.
Et encore, ils correspondent assez bien de retour à zéro, sauf celui-ci ne
tout à fait le même analogique dans Scratch.
>> Eh bien, que diriez-vous, maintenant, les variables?
Voilà donc comment j'ai déclaré une variable syntaxiquement l'autre jour.
J'ai eu un int, ce que je prétendais est un nombre entier.
J'ai ensuite eu un appelé variable compteur, et puis un point-virgule.
Alors, quelle est cette ligne de code fait?
C'est, tout simplement, en déclarant une variable -
c'est-à-poser l'ordinateur, donnez-moi un peu de mémoire, donne-moi quelques morceaux - dans
ce que je peux stocker quoi?
Un int.
Et le point-virgule signifie simplement fin de ligne de code.
>> Maintenant, la deuxième ligne est probablement assez facile à deviner.
Qu'est-ce compteur = 0; faire?
C'est attribuant 0 à contrer.
Et si c'est l'autre chose C'est un peu gênant
par rapport à, disons, l'algèbre.
Alors que dans l'algèbre, signifie le signe égal égaux, ici en C, à l'égal
Signe moyens d'affectation.
Cela signifie donc mis ce qui est sur la droite dans ce qui est sur la gauche.
Et nous allons voir un autre symbole, est égal égaux, lorsque nous voulons tester réellement
pour la qualité, un peu ennuyant.
>> Mais c'est un peu inefficace.
C'est un peu ennuyeux que j'ai de déclarer une variable et
puis de lui donner une valeur.
Donc C permet de réellement nous simplifions cette et il suffit de faire tout cela à la fois.
Vous pouvez déclarer la variable sur la gauche.
Vous pouvez toujours faire la mission sur le droit de mettre ce signe égal
au milieu.
Ainsi, à la fin de la journée, ces deux sont équivalent, mais celui-ci, franchement,
est probablement la meilleure habitude à prendre juste parce que c'est un peu moins
code, c'est un peu plus facile à lire, et il resserre juste en haut
votre code, pour ainsi dire.
>> Vous avez des questions à ce jour sur les boucles, sur les variables, les conditions, sur
Booléens, soit techniquement ou conceptuellement?
Très bien.
Alors maintenant, cette prochaine on obtient une peu plus intéressant.
Et c'est l'exemple que je mets en place la dernière temps que de simples cartes un exemple de Scratch
vers C.
>> Donc une fonction.
En termes simples, ce qui est une fonction?
Vous avez à être plus audacieux avec votre réponse.
Qu'est-ce qu'une fonction?
>> ETUDIANT: Est-ce quelque chose.
>> DAVID MALAN: Qu'est-ce que c'est?
>> ETUDIANT: Est-ce quelque chose.
>> DAVID MALAN: Est-ce quelque chose.
OK.
Nous allons commencer par là.
Ainsi, une fonction fait quelque chose.
Donc, c'est un morceau de code qui est essentiellement mis en œuvre ailleurs que
effectivement fait quelque chose.
Maintenant, ce qui est intéressant à propos d'une fonction est qu'il peut prendre l'entrée,
et il peut produire une sortie.
Et nous allons effectivement prendre un coup d'oeil.
>> Donc, l'homme derrière le rideau était délibérée il ya un instant.
Ici, nous avons une table.
Mais supposons que cette réalité représente une grosse boîte.
Il s'agit donc d'un soi-disant boîte noire.
Et en général, dans la conception, dans l'ordinateur la science, les boîtes noires se réfèrent seulement à
morceaux de fonctionnalité que quelqu'un a mis en place, et vous n'avez pas
vous soucier de comment il est nécessairement mis en place sous le capot.
Vous venez de veiller à ce que cette boîte noire, que nous allons maintenant commencer à appeler un
fonction, fait quelque chose.
>> Ainsi, par exemple, si cette boîte noire la scène représente ici printf, un
fonction, je sais par exemples précédents qui prend une ou plusieurs printf
arguments, et la première de celles arguments doivent être une chaîne, comme
"Bonjour tout le monde." Eh bien, si je suis la personne l'écriture du programme, et je veux
d'utiliser printf, I, par exemple, pourrait prenez un morceau de papier blanc ici et un
marqueur noir et écrire sur elle -
J'ai mal orthographié «monde» -
H-E-L-L-O.
>> Donc, je vais prendre mon marqueur noir et je vais écrire, aussi grand et lisible que possible sur
ce bout de papier: «Bonjour, monde», et maintenant je prétends que c'est mon argument.
Il s'agit d'une chaîne représentée avec un morceau de papier blanc.
Et mon entrée maintenant à la fonction printf va être présent.
Je suis tellement appelle printf, en passant cet argument en entrée à elle.
>> Et maintenant, je ne sais pas comment la personne qui wrote printf fait il ya des années, mais
Je ne sais de sa documentation son but dans la vie est d'imprimer ce que je
fournir comme entrée.
Et donc, même si cette mise en œuvre est à mon insu
sous le capot, maintenant Je vois, oh, c'est fait.
Il a imprimé quelque chose sur l'écran.
Et maintenant contrôler le programme, s'il ya étaient plus de lignes de code, serait
sont maintenant retournées à moi.
Et donc le fait que Colton -
bénisse son cœur, se cache ici sous une table en face de vous tous -
est délibéré parce que je ne sais pas et je n'aime pas la façon printf est
mis en œuvre.
Je sais juste que, encore une fois, de son documentation, ce qu'il fait et comment je
suis censé utiliser.
>> Maintenant, rappelons que pourrait obtenir printf un peu plus sophistiqué.
Encore une fois, nous parlons simplement de la équivalent du bloc de Say de Scratch.
Mais j'ai aussi fait la dernière fois.
Je voulais faire mon programme bonjour une peu plus dynamique et pas seulement difficile
Code quelque chose comme «monde», et certainement pas coder en dur quelque chose
arbitraire comme D-A-V-I-D dans le programme.
Je voulais demander à l'utilisateur son nom, puis faire quelque chose avec
cette chaîne qu'ils fournissent.
>> Donc, il ya quelque chose d'un peu différent ici. printf, il ya un instant,
n'a, en effet, faire quelque chose, mais il n'a retourné rien pour moi.
Droite?
Colton ne pas me donner quelque chose arrière, aucun morceau de papier.
Il y avait juste un effet secondaire.
Mon fournir "Bonjour tout le monde" comme un argument pour Colton a abouti à la
effet secondaire d'un mot, des mots, apparaissant sur l'écran.
>> GetString, cependant, est un peu différents. GetString est également
fonction, mais elle renvoie une certaine valeur.
Il n'a pas seulement une effet secondaire esthétique.
Il me donne en fait, la personne appelant ou utilisation de la fonction,
quelque chose en retour.
Donc dans ce cas, est GetString appelé avec GetString ouvert
paren, près parenthèse.
Est-ce que GetString, par conséquent, prendre aucun argument ou l'entrée?
Non, il ne semble pas.
Son but dans la vie est juste pour obtenir une chaîne.
Il n'a pas besoin de plus de détails que cela.
Alors laissez-moi aller de l'avant et de prétendre que, encore une fois, cette boîte noire n'est pas printf,
mais GetString, et laissez-moi, la personne la rédaction de ce programme, appelez ou utiliser
getString en écrivant simplement G-E-T-S-T-R-I-N-G, ouvert paren, près
paren, GetString.
>> Maintenant, je n'ai aucune idée de comment le personnel CS50 œuvre GetString, mais je sais que
si j'attends assez longtemps, il va faire son chose sous le capot, peut-être à l'aide
certaines variables, peut-être en utilisant une conditions, peut-être en utilisant des boucles,
peut-être utiliser certaines fonctions, peut-être l'aide -
juste essayer de décrochage - peut-être à l'aide quelques autres fonctionnalités de programmation.
Mais si j'attends assez longtemps - en réalité, dans l'ordinateur, ce qui se passe
super rapide -
si j'attends assez longtemps, cette fonction GetString va obtenir une chaîne
de l'utilisateur, qui est sans doute en train de taper le sur son clavier, et
Ensuite, lorsque vous GetString n'est fait obtenir ces caractères à partir de l'utilisateur
et les stocker dans une chaîne, qui fonction, GetString, va avoir
prêt pour moi quelque sortie qui je suis va extraire au moyen de l'
opérateur d'affectation.
>> Et si je pars, en effet, à la sortie ici, Obosi a généreusement
participé, sans savoir ce à avancer, en écrivant son nom sur cette
variable, représente une chaîne.
Maintenant, signifie l'opérateur d'affectation, même si cela peut paraître un peu
redondante, je fais réellement besoin de faire mon propre exemplaire.
Parce que sur la main gauche côté - oups! -
Remarquez que j'ai essentiellement chaîne nom sur le côté gauche.
Donc, je vais aussi faire ma propre copie.
Et c'est un peu un mensonge, parce que nous le verrons dans une semaine ou deux de
temps que les chaînes ne sont pas réellement ce qu'ils semblent être.
>> Mais pour l'instant, voici la valeur de retour.
Voici ma propre copie de celui-ci après en utilisant l'opérateur d'affectation.
Et maintenant, qu'est-ce que je veux faire maintenant?
Nous avons maintenant la deuxième de deux lignes de code.
Donc, je voudrais maintenant appeler printf.
Imaginons maintenant que le noir boîte est à nouveau d'être
printf et non GetString.
>> Printf cette fois va prendre combien d'arguments?
Alors regardez, c'est comme deux.
Il ya deux virgules là-dedans, mais un de ces virgules, c'est
à l'intérieur des guillemets.
Donc, le premier argument est littéralement va être présent.
H-E-L-L-O, une virgule pour cent s, barre oblique inverse-n.
Et maintenant, je suis fournissant pas un argument, mais deux arguments de printf.
>> Et qu'est-ce qui printf censé faire avec ces deux entrées après je passe dans
comme arguments?
Il est censé prendre la deuxième de eux, que j'ai appelé nom, de sorte que le
deuxième morceau de papier que j'ai écrit sur il ya un moment est appelé nom.
Il va bouchon de la valeur à l'intérieur de cette variable dans l'espace réservé,
% S, de sorte que, encore une fois, dans un moment de temps, nous allons voir un effet secondaire de l'
après avoir invité les printf, où maintenant nous voir pas "Bonjour tout le monde», mais «bonjour,
Obosi. "
>> Ainsi, une salve d'applaudissements à la fois de nos bénévoles, dont un seul savaient
ce ne serait arrivé.
Très bien.
Alors, peut-être, simple que cela était, Certes, si vous êtes déjà familier
à ce titre, j'espère que vous ne serez jamais oublier que visuel particulier de la façon dont
fonctions fonctionnent.
>> Il n'y a donc plus que GetString.
A l'intérieur de la bibliothèque CS50, il ya une tout un tas de fonctions, qui
sont capitalisés juste à préciser que nous écrivions ces fonctions.
Typiquement, dans C, presque tous les autres fonction que vous utilisez est minuscule.
Mais nous utilisons délibérément majuscules juste à préciser que ces
sont des roues de formation de toutes sortes que nous allons utiliser pour quelques semaines
simplifier le processus d'obtention entrée de l'utilisateur.
>> La bibliothèque CS50 ne fait rien que vous vous ne pouviez pas faire par
juste en utilisant le code C à partir d'un manuel oldschool.
Mais, encore une fois, nous les utilisons comme la formation roues de toutes sortes pour juste un couple de
semaines de sorte que nous pouvons nous débarrasser de la complexité que vous allez bientôt comprendre
vous de faire quelque chose comme relativement simple que d'obtenir
entrée d'un utilisateur.
>> Sache donc que vous aurez accès à getChar, GetDouble -
doubler.
Chose - puis GetFloat.
Qu'est-ce qu'un flotteur?
Commençons là.
>> ETUDIANT: [inaudible].
>> DAVID MALAN: Ouais.
C'est un nombre avec un point décimal.
Ainsi, alors que l'int est un entier, qui est juste un nombre de 0 à 9,
un certain nombre de répétitions de celui-ci, un flotteur est quelque chose
avec un point décimal.
Et un double, quant à lui, est aussi un nombre avec un point décimal, mais plus
chiffres après la virgule moment-là, potentiellement.
>> Donc, nous allons revenir à cette avant longtemps.
Mais généralement, chacun de ces types de les données, chacun de ces types de variables
qu'une bibliothèque comme la nôtre peut revenir à vous, utiliser des numéros de bits à
stocker des informations.
Typiquement, un Char, ce qui signifie tout simplement un caractère, utilise 8 bits.
Et c'est en fait conforme à notre octet de bénévoles de la semaine dernière qui
est venu et a représenté une Caractère ASCII à la fois.
Ainsi, un Char est de 8 bits.
>> Un flotteur se trouve être 32 bits, typiquement.
Et un double, comme vous pouvez le deviner, est en fait 64 bits, ce qui est un peu plus,
ce qui signifie que vous pouvez avoir plus nombres ou plus de précision.
Mais encore une fois, plus une autre fois.
GetLongLong, en attendant, si stupidement nommé, c'est vraiment juste une
entier qui est deux fois plus grand, deux fois plus de long, ce qui peut, en tant que régulière
entier, 64 bits au lieu de 32.
Et GetString nous utilisons.
>> Mais il s'avère que, dans la bibliothèque CS50, qui est mis en œuvre, comme nous le verrons, dans
la forme des deux fichiers, l'un qui est appelé cs50.h, a deux autres
Les types de données qu'il contient.
Booléens n'existent pas en C. Vous pouvez les simuler en utilisant simplement 0 et de 1
tout au long de vos programmes.
Mais nous avons dans la bibliothèque CS50 avons créé les symboles «vrai» et «faux»
pour représenter 1 et 0 si vous ne le faites pas avoir à coder en dur quelque chose
littéralement comme 1 et 0.
Mais nous verrons ceux de nouveau.
>> String, aussi, n'existe pas.
Et c'est pourquoi je l'ai mentionné, c'est un peu d'un mensonge pour l'instant.
Mais peler que nous allons couche avant longtemps.
Mais pour l'instant, une chaîne est un séquence de caractères.
>> Pendant ce temps, en C, en effet vous avoir des types de données différents.
Notez ce sont minuscules.
Ainsi, les fonctions que vous avez vu il ya un instant sont des fonctions écrites par CS50 que
sera de retour pour vous une valeur qui tombe dans une de ces catégories.
>> A feuilles de triche couple juste à planter la graine ici. ne printf juste
prendre% s comme espaces réservés.
Il faut% d pour les entiers décimaux, ou% i ne fonctionnerait aussi bien.
% F est valeurs à virgule flottante. % C est pour un char, si vous voulez juste brancher une
caractère dans une chaîne préformaté comme nous avons fait, vous pouvez utiliser% c.
>> Et puis, un peu agaçante,% LLD est pour une longue entier décimal de long,
ce qui signifie que si vous avez besoin d'un vraiment grand nombre et que vous utilisez quelque chose
appelé un long long, que nous viendrons retour à un ensemble de processeurs, vous pouvez utiliser% LLD à
dire printf, branchez un très gros entier compris ici au moyen de son deuxième ou
un autre argument.
>> Et enfin, j'ai promis que Il ya quelques autres évasion
séquences qui soutient printf.
Nous avons vu des anti-slash-n.
Backslash-r vous pouvez voir.
C'est en quelque sorte une chose de la vieille école.
Si vous avez déjà utilisé une machine à écrire de véritables ans Il ya et vous avez tiré sur la manivelle
qui non seulement tourné la roue à déplacer la programmation, il a également déplacé le
Tout ça tout le chemin du retour vers la gauche, eh bien, barre oblique inverse-r juste
se déplace essentiellement le dos du curseur au début de la ligne
sans le déplacer vers le bas.
Mais encore une fois, de plus à ce sujet, peut-être, à l'avenir.
>> Backslash-citation, anti-slash-guillemet, backslash-backslash est l'
solution à la toute petite énigme Je le mentionnais plus tôt.
Et backslash-0 est en fait très intéressant.
Mais nous y reviendrons que d'ici peu.
>> Alors, laissez-moi aller dans, maintenant, le CS50 appareil, et nous allons effectivement faire un
monter rapidement en température avec un des exemples nous n'avons déjà et ensuite passer à
quelque chose d'un peu plus complexe.
Donc, si j'ouvre mon programme appelé gedit -
c'est mon éditeur graphique.
Et je peux le faire -
Permettez-moi de conclure cette fenêtre là-bas -
par le biais de cette icône ici-bas, gedit, en bas à gauche
coin à côté du menu.
>> Je vais aller de l'avant et faire progresser, et sauvegarder cet exemple dans, disons, John
Le dossier de Harvard.
Le dossier de John Harvard est juste sa maison répertoire où tous ses dossiers vivent
par défaut.
Et je vais l'enregistrer comme un fichier appelé bonjour-0.c.
Et j'ai choisi ce nom tellement il s'aligne avec l'exemple de code sur le
le site Web de cours et dans l' YouTube des vidéos en ligne.
>> Alors maintenant, je vais commencer à écrire mon premier programme.
Permettez-moi de zoom avant pour la lisibilité.
Et je vais aller de l'avant et de dire int void main, ce qui est juste comme ça
jaune morceau de puzzle qui démarre un programme.
J'ai pris l'habitude au cours de la années de l'ouverture de mon accolade, puis
également fermer et ensuite revenir à où je veux mettre mon code, il suffit
parce qu'il m'aide à garder tout équilibrée, d'autant plus que mon
programme devient longue.
>> Et maintenant, ici, je vais aller de l'avant et dire, printf, GUILLEMETS,
Bonjour tout le monde, anti-slash-n, fermez la citation, Fermer parenthèses, virgules.
Donc, je ne fais que répéter ce que nous avons été prise pour acquis jusqu'à présent.
Maintenant, je vais effectuer un zoom arrière.
>> Et cette fenêtre de terminal ici-bas, ce j'ai la permission de faire dans ce noir
et la fenêtre blanche?
Que puis-je l'utiliser?
Donc, c'est là que j'ai exécuter des commandes et où je peux compiler choses.
Et je vais garder les choses simples.
Je vais utiliser un programme Faire appelé, ce qui n'est pas
techniquement un compilateur.
Appelée Clang du compilateur, mais nous reviendrons à cela dans un
semaine ou deux de son temps.
>> Pour l'instant, je vais juste faire taper bonjour-0, mais ceux d'entre vous qui étaient
comparer dans votre esprit ce que je viens tapé à ce que j'aurais tapé peut
sais déjà que je l'ai fait quelque chose qui cloche.
Maintenant, il ya clairement certaines erreurs.
Avant même que je regarde ce qu'ils sont, tout réflexions sur ce que j'ai fait de mal?
>> ÉTUDIANTS: [interposition VOIX].
>> DAVID MALAN: Ouais.
Il me manque le fichier d'en-tête de la bibliothèque.
Chacun de ces fichiers. H sont appelés tête fichiers, et ils collectivement
appartiennent à ce qu'on appelle des bibliothèques.
Les bibliothèques sont juste des morceaux de code que d'autres personnes ont écrit.
Donc [la norme? i?] bibliothèque est l'une collection de fichiers contenant du code
que d'autres personnes ont écrit.
>> Donc, je suis absent que.
Alors pourquoi je reçois une erreur?
Eh bien, permettez-moi de revenir en arrière dans ma fenêtre de terminal ici.
Et malheureusement, en C, comme dans beaucoup d' langages de programmation, en particulier
si c'est tout nouveau pour vous, l'erreur messages sont précis, mais ils sont aussi
assez énigmatique.
Et l'erreur ici, en rouge, est "Fonction de bibliothèque déclarant implicitement
printf avec le type ", puis il défile à la ligne suivante, "int const char *,
... "Il devient vraiment écrasante rapidement.
>> Mais ce que vous devriez commencer à le faire, si, encore une fois, de nouveau à tout cela, c'est juste pour
commencer à chercher des mots-clés.
De toute évidence, je ne pourrais pas comprendre la moitié des mots que je vois pour l'instant.
Vous aurez, si, dans le délai d'une semaine.
Mais je vois printf.
Et cela devrait commencer, avant longtemps, à vous rafraîchir la mémoire, tout droit, printf.
Quelque chose ne va pas avec printf.
Ai-je l'épelle mal?
Non, il ne ressemble pas - oh.
Je ne peux pas l'utiliser à moins que j'enseigne le compilateur qu'il existe.
Et donc, encore une fois, allez avec vos instincts, même si vous ne comprenez pas réellement
les messages d'erreur réels.
>> Et en effet, la solution consiste à simplement inclure dans la partie supérieure du dossier
comme ça, de le réenregistrer mon dossier avec Contrôle-S ou le menu Fichier.
Et si je vais maintenant revenir ici-bas, Je vais effacer cela.
Control-L est juste une belle façon pour effacer l'écran.
Et puis je vais taper "make bonjour 0 "Entrez, et maintenant je vois encore un
séquence de symboles cryptiques, mais Nous reviendrons à cette question.
C'est ce que font est fait pour vous.
Il est l'automatisation du processus de prise de une commande assez ennuyeux impliquant
Clang, le compilateur réelle.
Mais le fait que je suis pas d'erreurs signifie que cette chose devrait fonctionner.
>> Donc, je vais maintenant faire - laissez-moi un zoom avant encore -
./hello-0 Entrez, et en effet, je vois "Bonjour tout le monde." Donc, nous allons maintenant renforcer
cette très légèrement juste à reproduire les mesures que nous voulions.
Je vais renommer ce avec Enregistrer sous pour hello1.c.
Et maintenant, je vais déclarer une variable appelé nom, de sorte nom de chaîne,
et je vais y mettre le valeur entre guillemets
D-A-V-I-D close-quote-virgule.
Et maintenant, je vais remplacer "monde" avec quel espace réservé pour une chaîne?
% S.
>> Et maintenant, combien d'arguments devraient printf prendre ce temps?
Donc deux.
Donc, je vais dehors des guillemets.
Je tape "nom" après une virgule.
Mais j'ai fait quelque chose d'autre tort cette fois.
Mais supposons que je n'ai pas réaliser encore.
Lâchez-moi ici.
>> Et remarquez aussi, je suis un peu ennuyés de taper "make bonjour 0" tous les
temps, «faire» et tout cela.
Ainsi, il s'avère que, dans Linus vous pouvez souvent frapper la flèche vers le haut sur votre
clavier, et vous pouvez réellement faire défiler à travers toutes les commandes que j'ai
exécuté précédent tout à l'heure.
Donc, si je fais ça, Haut, Haut, il ya rendre bonjour 0.
Je ne veux pas que.
Je veux juste changer cela en bonjour 1 cette fois, Entrée.
Finalement, cette volonté vous faire gagner du temps.
>> Très bien.
Malheureusement, il ya une erreur.
Permettez-moi de défiler vers le haut.
Cela ressemble j'ai vraiment massacré ce programme.
Je veux dire, mon dieu, c'est deux lignes de code, et ses 10 lignes d'erreurs.
Mais regardez le dessus en premier.
L'utilisation de chaîne de l'identificateur non déclaré.
Est-ce que je veux dire norme i n?
Non, je ne l'ai pas.
Je voulais chaîne.
>> Mais où est la variable de chaîne type déclaré, DD nous disons?
C'est donc dans le CS50 la bibliothèque.
Donc, il ne suffit pas, dans ces premiers quelques semaines, juste à utiliser
ce qui nous donne C.
Je vais aussi aller ici, et je pourrait mettre au-dessus ou au-dessous, mais je vais
il suffit de garder alphabétique de garder les choses ordonnée.
Je vais inclure cs50.h, qui est pré-installé pour
vous sur l'appareil CS50.
Et il est open source, de sorte que même les personnes sur l'Internet peuvent utiliser sur leur
propres ordinateurs.
Mais il est livré avec l'appareil CS50.
>> Alors maintenant, je vais revenir et de recompiler cela avec faire bonjour 1.
Merde.
Encore une autre erreur.
Permettez-moi de remonter jusqu'à la première, cependant.
Celui-ci est un peu complexe.
Multi-caractère caractère constant.
Cela ne veut pas m'aider.
Mais remarquez, Clang est au moins un peu peu décent, où avec un peu
vert caret symbole, c'est dire c'est là que j'ai merdé.
Pourquoi est-il du doigt, avec ce petit Green Arrow, à la citation prochain single
à mon nom?
>> Donc, c'est une des choses que vous venez de s'y habituer, surtout si vous avez été
la programmation en Python ou JavaScript, ou d'autres langues où ce détail
n'a pas d'importance.
En C, ce qui importe.
Si vous déclarez une chaîne, qui est une séquence de 0 ou plusieurs caractères,
vous devez réellement utiliser des guillemets doubles.
Donc j'ai réellement besoin de changer ce retour pour ouvrir citation, fermez la citation, avec
guillemets.
Les guillemets simples ont leur place, mais seulement lorsque vous utilisez individuel
caractères, mais plus sur cela une autre fois.
Pour l'instant, les guillemets sont nécessaires.
>> Alors maintenant, permettez-moi de revenir à mon terminal fenêtre, assurez-bonjour 1.
Et qui est confiant?
Est ce programme va maintenant pour compiler correctement?
OK.
Donc, trois d'entre nous pensent cela.
Très bien.
Entrée.
Et il a effectivement fait.
Donc il n'y a pas d'erreurs cette fois, même si ce programme a obtenu un peu
plus complexe.
Si je le fais maintenant dot slash bonjour 1, Entrée, il va dire "bonjour, David."
>> Mais faisons la troisième itération De ce fait, lorsque l'
programme est vraiment dynamique.
Permettez-moi d'aller de l'avant et de modifier le fichier nom, juste par souci de cohérence avec l'
fichiers que vous aurez à disposition à vous ensuite en ligne.
Entrée.
Et maintenant, je vais y aller et pas stocker "David" codé en dur ici.
Que pouvais-je faire pour très simplement améliorer ce programme?
>> Je pourrais appeler GetString.
C'est peut-être un peu ce que non évidente est sur le point d'arriver, donc je vais
ajouter réellement une autre ligne, printf, et dire nom, du côlon, près devis, il suffit
pour donner à l'utilisateur une invite sur l'écran.
Et maintenant, je vais aller ici, et je suis vais utiliser mon raccourci clavier.
Je vais aller vers le haut, vers le haut, et changer bonjour bonjour 1 à 2, Entrée.
Et heureusement, je fais des progrès.
>> Et maintenant, je vais aller jusqu'à au point slash bonjour et
changer cela à 2, Entrée.
Et maintenant, mon programme -
Je vais zoomer - est d'obtenir un peu plus joli.
Nom va être, disons Rob cette fois, Enter, bonjour, Rob.
Nous pouvons le faire à nouveau.
Nom, Lauren, Entrée.
Nom, Joseph, Entrée.
Nom, nous allons essayer d'être difficile, Entrée.
Eh.
Ce n'est pas vraiment un bug.
Donc, c'est juste un peu laid.
Alors peut-être que nous pourrions résoudre ce dans le futur, pas maintenant.
>> Mais comment voulez-vous instinctivement aller sur la lutte
ce défi particulier?
Il semble tout simplement stupide.
Comment évitez-vous les choses air stupide?
Donc, nous pourrions le faire, OK, j'ai entendu un couple des choses, une condition et une boucle.
Nous pourrions utiliser, un, un état, pour vérifier quelle est la longueur de la chaîne
l'utilisateur nous a donné?
Et si c'est 0, c'est juste GUILLEMETS, ils ont juste frappé sur Entrée, puis
peut-être que je devrais crier à eux et les inciter à nouveau.
Mais comment une invite de nouveau?
Eh bien, j'ai aussi entendu boucle, et je ne pouvais le faire encore et encore et encore
inviter l'utilisateur à la même chose.
>> Eh bien, nous allons faire un autre exemple d'utiliser un autre
la fonction dans la bibliothèque CS50.
Permettez-moi de clore ce dossier.
Permettez-moi d'en créer un nouveau.
Et je vais l'appeler adder.c, juste parce que il est facile de faire des calculs simples,
même si ce sera complètement décevante avec ce que vous pourriez faire
avec n'importe quel ordinateur moderne.
>> Mais permettez-moi d'aller de l'avant maintenant et -
J'ai appris ma leçon dernière fois - comprendre cs50.h, include stdio.h, int
void main, qui, pour l'instant, je vais juste prenons sur une foi aveugle, mais nous supposerons
qui va comprendre ce que cela signifie avant longtemps.
Et je vais vous dire quelque chose comme "donnez-moi un int."
>> Et maintenant, comment puis-je obtenir un int?
Je tiens à déclarer en fin de compte une variable appelé x de type int et
stocker en elle un nombre entier de l'utilisateur.
Donc, c'était une bouchée.
Mais si quelqu'un veut proposer, comment puis-je déclarer un entier appelé x?
X Int.
>> Donc, c'est vraiment aussi simple que cela.
Donnez-moi un int.
Appelez-x.
Maintenant, j'utilise l'opérateur d'affectation.
Et comment puis-je stocker de l' une valeur donnée de l'utilisateur?
Je ne veux pas appeler GetString, évidemment, mais plutôt getint.
Tous les arguments?
No.
Donc, il est ouvert paren, près paren immédiatement, puis un
virgule termine la ligne.
>> Maintenant, laissez-moi faire ça à nouveau.
Donnez-moi un autre int.
Cette fois, je vais le faire int, nous allons appelez-y, égale getint.
Et maintenant, laissez-moi faire quelque chose de super-simples comme un peu de maths.
Donc, printf, la somme des% d est la espace réservé pour un int.
Et% d, période, barre oblique inverse-n.
>> Très bien.
Ce n'est donc pas réellement mathématiques.
Mais si je veux dire la somme de cette valeur, plus cette valeur est égale à cette
autre valeur, combien d'arguments en Je totale devrait être de donner printf,
en fin de compte?
Donc, quatre, non?
Cette chaîne, puis les trois valeurs.
Alors x est le premier que je veux être branché à la première% d.
Y va être le prochain.
>> Et maintenant, j'ai un peu envie de dire z, z, mais n'existe pas.
Mais ce n'est pas une grosse affaire.
Parce que feriez-vous instinctivement, surtout si vous avez eu une
calculatrice graphique, qu'est-ce que vous tapez?
Que diriez-x + y?
Donc ce n'est pas une variable réelle.
C'est juste la somme de deux d'autres variables.
Et c'est tout à fait légitime.
C comprend certainement simple, arithmétique comme ça.
>> Virgule, sauver.
Maintenant, laissez-moi descendre ici et taper make sommateur, Entrée.
Aucune erreur, donc c'est trop progrès.
Tapez sommateur.
Et un autre raccourci clavier, si vous commencez à vous ennuyer
avec toutes les commandes -
si vous commencez à taper une commande, comme dot slash annonce, et c'est là que votre
ennui coups de pied, vous pouvez généralement frapper Tab d'avoir l'ordinateur terminer le
reste de la phrase pour vous, si ce n'est pas ce ambiguë devrait venir après annonce.
>> Alors laissez-moi aller de l'avant maintenant et vous cliquez sur Entrée.
Donnez-moi un int, 1, 2, et Heureusement, il est 3.
Mais comme toujours, les programmes de test ne doit pas réduire à
juste essayer une fois.
Permettez-moi de juger une affaire d'angle, comme négative 1, donnez-moi 1, et que l'on
vérifie aussi bien.
Et je veux sans doute faire un peu plus des tests rigoureux, mais je suis assez
à l'aise avec où c'est à.
>> Eh bien, maintenant nous allons essayer un autre programme que cette fois utilise un
peu d'autres syntaxes.
Permettez-moi de créer un nouveau fichier.
Je vais appeler cette conditions0.c d'aligner avec un peu de code échantillon en ligne.
Et permettez-moi d'aller de l'avant et de faire inclure cs50.h, comprendre
stdio.h, dans void main -
OK.
Nous y voilà.
Nous avons notre passe-partout standard.
>> Et cette fois, je vais dire printf, "Je voudrais un int, s'il vous plaît," juste pour
faire le un peu rapide plus convivial.
Et maintenant, je veux obtenir un Int de l'utilisateur.
Je vais l'appeler n ce moment, juste parce que n ressemble nombre.
getint, et maintenant, qu'est-ce que Je veux faire avec elle?
Eh bien, si n est - et je vais zoomer -
si n est supérieur à 0, je veux faire ce qui suit -
printf "Vous avez choisi un nombre positif." Sinon, je vais taper printf "Vous
ramassé un négatif
nombre. "Très bien.
Donc ce programme, même si je l'ai fait rapide, regarde droit syntaxiquement.
Je vais essayer ça.
Faire état 0.
Semble fonctionner.
État 0, entrez.
Donnons-lui un int de 50 ans.
J'ai choisi un nombre positif.
Essayons encore une fois.
État 0.
Négatif 50.
J'ai choisi un nombre négatif.
>> Mais maintenant, permettez-moi de choisir ce que nous allons continuer à appeler un cas d'angle, ce qui est plus
un cas intéressant que vous pensez pourrait vous donner quelques ennuis, 0.
Maintenant, je suis sûr que c'est l'un des les cas de coin où zéro est
ni positive ni négative, de sorte que mon programme, bien que dans la syntaxe
corriger - il compile, il fonctionne - n'est pas logiquement correct.
Alors quelle est la solution simple ici si je veux à détecter, si je veux traiter n
est égal à 0 séparément?
>> Donc, si n est égal à 0, alors que je veux dire quelque chose comme printf "Vous avez choisi 0".
Je vais essayer maintenant.
Permettez-moi de revenir ici, désactivez ma fenêtre, et recompiler.
Hm.
Une erreur générer.
Mais je ne vous veux vérifier si n est égal à 0.
>> Encore une fois, une autre chose stupide pour s'habituer à, signe égal est
l'opérateur d'affectation.
C'est en fait erreur en ce que techniquement, même si le compilateur
m'a protégé de moi-même, nous serions techniquement être la copie 0 à n, qui
n'est pas ce que je veux.
Je veux tester pour l'égalité à égale égale.
Et que maintenant peut-être ma meilleure solution.
>> Permettez-moi en fait réenregistrer ce que, par exemple, conditions1, être nouvelle et améliorée.
Alors maintenant, si je recompiler, il serait conditions -
whoops - faire conditions1 point slash conditions1, Enter, «Je voudrais un int,
s'il vous plaît. "Je vais aller avant et tapez 50.
Il est toujours bon.
Négatif 50, encore bon.
0, et, en effet, détecté que j'ai ramassé 0.
>> Alors, que puis-je faire maintenant avec ça?
Eh bien, nous pouvons certainement faire de plus en plus choses complexes.
Mais ce que je voudrais proposer est que nous nous retrouvons sur cette note ici.
Si nous tirer vers le haut, vous verrez peut-être, une caricature de vos préférées
jusqu'à aujourd'hui, vous pourriez jamais avoir compris.
Et c'est à peu près la qualité du rire vous devriez obtenir avec des blagues CS.
Donc, c'est à peu près droit.
>> Mais plus convaincante, je pensais nous donner un petit teaser pour lundi.
Nous avons donc commencé à utiliser des entiers.
Nous avons parlé à des flotteurs.
Nous avons même parlé de doubles, qui, encore une fois, vous donner des chiffres
après décimales.
>> Mais il s'avère que les flotteurs et doubles, et, vraiment, ordinateurs,
fondamentalement, ne peut pas exprimer certaines valeurs de précision.
Nous savons, par les classes de mathématiques que vous pouvez n'importe quel nombre de chiffres après la
point décimal.
Et vous pouvez même mettre une barre verticale à-dire ceux durer éternellement.
>> Malheureusement, vous ne pouvez pas vraiment faire que dans un ordinateur.
Et si les cas d'angle se posent.
Par exemple, supposons que vous êtes faire quelque chose financière.
Vous faites mathématiques avec des pourcentages, et
avec des dollars et des cents.
Et ces cents ne sont pas line up nécessairement.
Eh bien, il s'avère que les fractions d' pennies peuvent commencer à s'accumuler lorsque
modélisé par un système d'ordinateur de telle manière que intelligent
les humains peuvent prendre l'avantage.
>> Et ceux d'entre vous qui n'ont pas vu, je serais vous donner 30 secondes de teaser
un film magnifique connu comme espace de bureau, qui va peindre une image d'un
problème que nous allons aborder première chose le lundi.
Si nous pouvions augmenter le volume un peu, je vous donne 30
secondes d'espace de bureau.
>> [LECTURE VIDEO]
>> -Je veux dire, vous, vous ne l'avez pas fait preuve d' et vous arrivez à garder votre emploi.
>> -En fait, je suis promu.
>> -Je pourrais programmer un virus qui serais RIP lieu big time.
>> -Eh bien, comment ça marche?
>> -Chaque fois qu'il ya une transaction bancaire où l'intérêt est calculé, et il
des milliers par jour, l'ordinateur s'arrête avec ces fractions de cent.
>> -Mais je ne vais pas faire quelque chose d'illégal.
>> -Illégale?
Samir, c'est l'Amérique.
>> -Nous devons jure devant Dieu.
>> -Si personne ne sait à ce sujet mais nous, d'accord?
Aucun membre de la famille, aucun copines, personne.
>> -Bien sûr.
>> -Accord.
>> -Ne vous inquietez pas, mec.
Je ne dirai rien non plus.
>> [FIN LECTURE VIDÉO]
>> DAVID MALAN: Donc, ce n'est donc CS50, qui avait de l'espace de bureau, et tout cela va
sens lundi.
Rendez-vous ensuite.
>> Narrateur: Lors de la prochaine CS50, Rob ajuste à être hors la
Plan de repas Harvard.