[Powered by Google Translate] DAVID MALAN: C'est CS50, et c'est le début de la semaine 1.
Ce que nous avons pensé faire aujourd'hui, c'est de prendre un regard rétrospectif sur
quelque chose que beaucoup d'entre vous ont probablement passé devant un certain
temps et peut sembler un peu familier.
Cette chose ici, cela est bien sûr dans le -
PUBLIC: Science.
DAVID MALAN: Centre des sciences.
Donc, c'est en fait l'un des premiers ordinateurs
sauvegarder des années 1940.
Il a été l'un des premiers ordinateurs électromécaniques
qui était capable de particulièrement longue,
auto-entretenues calculs, et ce que nous voyons dans
le centre des sciences est seulement un petit morceau de cette chose.
Ce que nous avons pensé faire alors, c'est de prendre un regard rétrospectif sur une vidéo
qui a été faite il ya quelque temps, l'introduction de cette
chose au monde.
Et vous verrez de la musique et de la voix qu'en effet ceux
eu des moments très heureux.
>> [LECTURE VIDEO]
-Un triomphe d'habileté mathématique et mécanique est-ce
grande nouvelle calculatrice automatique à l'Université Harvard.
Problèmes complexes en mathématiques, à travers la mise
Machine sous forme codée sur la bande, sont correctement réglés dans un
infime fraction du temps nécessaire à l'alimentation humaine
calcul.
Conçu pour accélérer toutes les formes de culture mathématique et scientifique
la recherche, le cerveau mécanique géant va travailler pour les États-Unis
États-marine jusqu'à la fin de la guerre.
>> DAVID MALAN: Ce que vous ignorez peut-être, c'est qu'il était en
ce même dispositif que nous avons tous un terme maintenant prendre à peu près
pour acquis a été inventé, que d'un bug.
Ainsi, l'un des ingénieurs travaillant sur cet ordinateur
littéralement trouvé un petit papillon dans la machine qui a abouti
dans certains calculs incorrects.
Et comme l'histoire raconte que la teigne a été enregistré dans ce journal
revue ici, de retour de Septembre 9 1940-quelque chose,
et ainsi est né pour le monde le terme "bug".
Donc, nous considérons désormais comme des bugs toute sorte d'erreurs dans
programmes, que ce soit l'homme ou, dans ce cas, les insectes.
>> Ainsi, quelques annonces, que nous avancerons.
Donc CS50 a une longue tradition d'offrir des déjeuners de toutes sortes sur
la plupart des vendredis durant le semestre, où l'on prend de 30 à
40 étudiants à feu et de glace sur la place pour les occasionnels
bavardage, parler de l'informatique,
parler de l'avenir.
Nous invitons les anciens et amis de l'industrie pour discuter des
étudiants ainsi.
Vraiment vers une fin de faire ce qui est une classe assez large
d'autant plus intime, au moins une fois pendant que pour
sous-ensembles d'élèves.
Donc, si vous souhaitez vous joindre à nous ce vendredi, 1:15 pm, allez à
CS50.net/lunch à RSVP.
Et nous allons le faire de façon récurrente, donc ne vous inquiétez pas si vous n'êtes pas
parmi les 30 premiers ou cette semaine.
>> Donc scribe note.
Un mot sur les ressources qui vont maintenant commencer à être disponibles
aux élèves de la classe.
Pour que vos têtes ne doivent pas être en panne pendant les cours
griffonner tout ce que je dis et ainsi de suite, ce que nous faisons
est plutôt de fournir du personnel enseignant d'une
ensemble canonique de notes.
Nous avons donc l'un de nos compagnons d'enseignement, Andrew Sellergren,
qui s'assoit chaque semaine, passe en revue les vidéos, puis
écrit ce que nous pensons est assez
ensemble de notes faisant autorité.
Et Andrew aimait, aussi, de mettre en bas de page snarky
le fond.
Ainsi, vous aurez je l'espère profiter de ces comme un ouvrage de référence pour
amusant, et aussi, venez quiz time, comme la possibilité d'examiner
ce qui s'est passé dans les cours individuels.
Donc, ceux qui sont liés sur la page des conférences.
>> 0 Jeu de problème, quant à lui, est sorti.
Et en termes de ressources disponibles pour vous -
la procédure pas à pas.
Milo a dirigé le premier vendredi.
Il a été filmé, mis en ligne d'ici samedi.
Et ainsi se rendre compte, si vous ne savez pas vraiment par où commencer,
pour ce ou futur p-ensembles, toujours, en premier à l'
procédure pas à pas ou de leur vidéo.
Sectionnement est en cours; au cs50.net/section est l'endroit où vous
doivent soumettre vos préférences, si vous n'avez pas
déjà, par aujourd'hui.
Parce sections débutera ce dimanche, lundi,
et le mardi.
Nous faisons sections de ces trois jours, chaque semaine de l'
semestre pour la plupart.
Et nous introduisons également, encore une fois, différentes pistes.
Ainsi, il vous sera demandé sur le formulaire de sectionnement, si vous
ne l'avez pas déjà vu, si vous êtes parmi ceux qui sont moins
confortable, plus à l'aise, ou quelque part entre les deux.
Et si vous êtes en quelque sorte sur la barrière, généralement quelque part dans
entre ce que la plupart des étudiants se retrouvent vérification.
Heures d'ouverture commencera ce soir.
>> Donc Scratch est assez bas de gamme, même si c'est tout à fait naturel
de se heurter à divers bugs, ou être incertains quant à la façon
mettre en œuvre quelque chose.
Alors rends compte que nous allons commencer les heures de bureau cette semaine.
Ils seront à Annenberg lundi, mardi, mercredi,
Jeudi 20h00-23h00 pendant les vacances de cerveau.
Classmen supérieures peuvent entrer, et si jamais vous avez du mal à
dans la porte, parce qu'ils vont être glissant, parlez à votre façon
et expliquer que vous êtes avec CS50.
Typiquement de 20 à 30 d'entre nous sur le personnel sera là pour vous aider
vous sur une base individuelle.
>> A l'arrivée l'idée est la suivante: vous apportez votre ordinateur portable,
vous aurez votre chargeur, nous aurons les cordons d'alimentation supplémentaires,
en particulier le long de la paroi sud de la Annenberg où
il ya beaucoup de prises électriques.
Et le principal point d'entrée pour les heures de bureau Q & A est d'aller à
cs50.net/discuss et d'afficher
votre question.
Et de l'étiqueter avec pset pset 0 ou 1, quelle que soit la semaine
pourrait arriver à être.
Et puis, ce que nous allons faire est d'avoir un tableau des boursiers d'enseignement
assistants de formation et, en général 8 ou 10 ou alors de nous,
en passant par, en gardant un œil vigilant sur la planche, et
cueillette de questions vraiment aussi vite que nous le pouvons,
Vous parlez de messages connexes si vous n'avez pas trouvé ceux
vous, les références en ligne, le cas échéant.
Et puis, s'il ya des problèmes, car il ya inévitablement
sera, ou il est tout simplement plus de sens pour asseoir sur une base individuelle,
faire face aux problèmes avec quelqu'un.
>> Ou vous juste d'entrer en heures de bureau vraiment
besoin de cette mentalité.
Vous ne voulez pas passer par le formulaire électronique, vous
vraiment envie de rencontrer quelqu'un.
Communiquez que pour nous, et ce qui va arriver, c'est quand votre
question a été vu par un membre du personnel, et nous
déterminer, eh oui, ce doit être envoyé à l'un des 20 ou
30 membres de l'équipe ici localement, vous verrez en haut à gauche de cette
Entrez peu sur le bouton Queue commence à clignoter sur cs50.net /
discuter.
Et cela vous dit que vous avez maintenant ont été invités, ainsi
de parler, d'entrer dans la file d'attente.
Et en cliquant sur ce bouton, votre nom apparaîtra alors sur
un iPad que l'écran d'accueil CS50, l'un des chefs du cours, sera
être tenue près de l'entrée de la Annenberg, qui sera ensuite
voir aussi représentées ici, les étudiants qui ont des questions sur
A gauche, les membres du personnel qui sont présents sur la droite.
Et avec un clic de gauche et de droite, votre navigateur sera
commence à clignoter dès que, par exemple, le professeur McGonnagal
est prêt à vous voir à une table particulière Annenberg.
>> Nous avons donc fait une partie de cette dernière année.
Nous avons redémarré les heures de bureau et
réimplémenté la plupart des logiciels.
Alors rends compte que ce sera chaud cette semaine.
Mais aussi se rendre compte aussi, au cours des années passées, comme vous avez pu entendre
des amis, des heures de bureau avait en effet 50 à
150 élèves à la fois.
Et ce n'est tout simplement pas possible pour nous de gérer cette
effectivement, sur une base individuelle, tout au long de la soirée.
Et donc ce que nous allons vraiment essayer de faire de cette année est
capitaliser sur le fait que beaucoup de questions sont
fréquemment posées et peuvent souvent être mieux répondu
de manière asynchrone.
Ainsi, vous pouvez trier de réfléchir à la réponse du personnel,
et nous pouvons réfléchir à votre code, sans chauffée
pression nécessairement mal
à travers le côté de l'autre.
Donc, nous estimons qu'environ un tiers ou la moitié des questions
seront envoyés en personne, et nous allons essayer de arrachez comme
jusqu'à une moitié ou plus par voie électronique,
pendant les heures de bureau.
Et nous allons continuer à utiliser Discuter
tout au long de la semaine ainsi.
>> Et enfin, sachez que ce cours peut être suivi de réussite / échec.
Donc, si vous êtes sur la clôture ou simplement penser que vous êtes vraiment
pas sûr que ce soit dans le monde pour vous, ou c'est vraiment
tout à fait étranger à vous, sachez que c'est une merveilleuse façon
de gagner un peu de confiance avec qui faire un pas dans la
classe, comme je l'ai fait franchement, il ya longtemps.
Et alors cinq semaines pour trier sur la figure pour
vous-même si vous voulez rester réussite / échec, passer à une lettre
classe, ou analogue.
Et généralement ce succès / échec ne, je pense, pour les étudiants est
que, si vous mettez dans ces 10 heures, 20 heures, quel qu'il
peut-être sur certains problèmes, et vous cogner la tête
contre la paroi,
et vous avez vraiment ne peux pas chasser quelque chose, et vous
ont tellement d'autres choses que vous devez faire, honnêtement, ce que je
pense réussite / échec est, il prend le bord au large de
situations de ce genre.
Lorsque vous avez pris la chose 90% du chemin.
Vous savez, ce n'est pas tout à fait parfaite.
Mais tu as beaucoup hors de lui, tout de même.
Ainsi, considérer réussite / échec comme vous accordant que
modèle mental, peut-être.
>> Tout droit, la semaine dernière, nous avons donc plongé dans Scratch, et nous
parlé de la programmation à un niveau assez élevé graphique.
Et aujourd'hui, nous faisons la transition vers une langue
appelé C, un langage de programmation de niveau inférieur au-dessus de
que beaucoup de langues modernes sont désormais construits, dont certains
de ceux que nous allons utiliser vers la fin du terme.
Et syntaxiquement, à quoi ils ressemblent
est tout assez similaire.
Donc, nous allons commencer à faire cette transition ici.
Donc, ce fut un programme de la semaine dernière qui était la plus simple des
bonjour programmes mondiaux.
Elle a simplement imprimé sur le monde de l'écran bonjour, avec un
bulle peu sortir du chat.
Eh bien, si nous commençons maintenant à traduire cela à un autre
la langue, se rendre compte que les idées d'aujourd'hui et mercredi
sont identiques, mais la syntaxe commence à changer.
Ainsi, alors que la semaine dernière nous avons eu, lorsque le drapeau vert cliqué, disons
Bonjour tout le monde.
Aujourd'hui, nous allons avoir int, main, vide, printf,
retour, avec une autre syntaxe là-dedans aussi.
Les accolades et les parenthèses et les guillemets, et ainsi de suite.
Mais se rendre compte que le noyau de l'idée ici est l'impression,
et, finalement, le fait que le principal va maintenant être
synonyme de départ d'un programme.
Principal va être là où le drapeau vert marque le coup d'arrêt.
>> Alors maintenant, nous allons démêler certains des blocs de construction ici
avant de nous plonger dans des exemples concrets.
Nous avons donc appelé cette semaine une dernière déclaration, par laquelle il est juste
une instruction.
Pour ce faire, - dans ce cas, dire bonjour monde.
Eh bien, en C, si l'on regarde simplement cette ligne, c'est la façon dont nous sommes
va commencer à exprimer ce que pièce de puzzle notamment:
printf ("Bonjour le monde");.
Et maintenant, nous allons taquiner les différencier de plus en plus au fil du temps,
mais se rendent compte qu'il ya un modèle ici.
Donc, un, nous avons cette chose appelée printf, qui est
essentiellement analogue à la parole Say.
C'est ce qu'il va faire.
Printf, et f signifie ici «formaté».
Donc, cela signifie juste que vous pouvez insérer
divers détails esthétiques.
Donc, je cite le début de ce que nous allons
pour commencer à appeler une chaîne.
Un mot, une phrase, une phrase.
Une chaîne dans un langage de programmation est une séquence de zéro
un ou plusieurs caractères.
Donc h-e-l-l-o, virgule, et ainsi de suite est,
entre guillemets, d'une chaîne.
Et maintenant antislash n, un peu bizarre syntaxiquement, mais nous
déjà défini que la semaine dernière, ce qui signifie quoi?
C'est juste une nouvelle ligne.
C'est juste une façon de faire comprendre à l'ordinateur que vous voulez que le
équivalent de frapper la touche Entrée, mais vous n'avez pas
voulez réellement appuyez sur Entrée et donc gâcher tout le
la mise en forme de votre programme actuel.
Maintenant, les parenthèses entourent cette chaîne, ouvert parenthèses et
près parenthèse, et à l'intérieur de qui est notre chaîne.
Parce que c'est parce que dans C, et d'autres programmes
langues, des choses comme printf prendre des arguments, ou de prendre
paramètres.
>> Donc, commencer à réfléchir dès maintenant de ce bloc Say pourpre comme un
fonction, en tant que procédé, en tant que procédure.
Vous pouvez vraiment l'appeler comme vous voulez pour l'instant, mais
C'est en quelque sorte un programme miniature qui ne fait qu'une seule
chose, sur une seule ligne, pas moins.
Donc printf est aussi ce que nous allons commencer à appeler un
fonction et fonctions faire quelque chose - dans ce cas,
imprime une chaîne formatée à l'écran -
mais aussi des fonctions acceptent des arguments ou paramètres.
Et par des arguments ou paramètres, merci, nous entendons
que leur comportement peut être influencé par ce que vous passez dans
à l'intérieur des parenthèses.
Donc dans ce cas, les besoins printf qu'on leur dise quoi imprimer, et nous
il suffit de passer dans, entre guillemets ici, la chaîne que nous
effectivement à imprimer.
Et le point-virgule à la fin de cette ligne est juste un
nuisances historique de telle sorte qu'à la fin de la plupart des lignes de code,
vous mettez un point-virgule pour faire des super clair à l'ordinateur
que cette ligne de code se termine ici.
Maintenant, c'est bien parce que comme nous le verrons dans les programmes obtenir plus d'
complexe, le point-virgule fera super-humains claires pour nous,
et aussi l'ordinateur, où les lignes de code de début et de fin.
Sachez que certaines langues n'ont pas une
de ces mêmes détails.
Et en fait, en JavaScript, vous n'avez pas toujours besoin de quelque chose
comme le point-virgule.
Mais plus à ce sujet à venir.
>> Donc boucles.
Nous avions quelque chose comme ça, de manière très intuitive, évidente, ne
quelque chose encore et encore et encore.
Comme mettre des chaussettes, ou de dire bonjour, dans ce cas.
Eh bien, à partir d'aujourd'hui dans C, nous avons pu exprimer cette Scratch
bloquer comme while (true) printf ("Bonjour le monde").
Donc remarquerez que nous commençons à construire sur littéralement le casse-tête
pièce de devant.
Nous avons le même bloc violet, mais c'est à l'intérieur de cette
Toujours entre crochets bloc, et la meilleure façon de traduire cette
C est de la façon suivante.
Il n'y a aucun mot-clé pour toujours.
Vous ne pouvez pas taper f-o-r-e-v-e-r dans C.
Donc le plus proche analogique est tout.
>> Maintenant, while (true) semble un peu stupide parce que la valeur ne
de changement toujours vrai?
Vraisemblablement pas.
C'est comme dire que tandis que l'un, tandis que sur tout vrai.
C'est la même chose, c'est vrai c'est toujours le cas.
Donc, cette boucle est effectivement induire ce type de boucle?
Juste une boucle infinie, à droite.
Une boucle Forever ou comme on disait la semaine dernière,
juste une boucle infinie.
Alors parfois, c'est mauvais.
Parfois, c'est un bug, parfois, c'est pourquoi vous obtenez
le ballon de plage de filage ou de sablier ou analogue.
Mais dans ce cas, nous avons délibérément, quelle qu'en soit la
pourquoi voulez imprimer la même chose
et encore et encore.
Ou dans le cas de comme une montre, vous voulez faire
quelque chose encore et encore et encore.
Donc boucles infinies peut avoir un sens.
Et voilà comment en C nous pourrions traduire Toujours au code.
>> Alors maintenant, celui-ci est un peu plus précis.
Nous avions répéter 10 fois la déclaration suivante.
Ainsi, alors que (vrai) ne fonctionne pas vraiment là, parce que c'est vrai
toujours vrai.
Donc, si nous regardons plutôt la version C, maintenant la syntaxe obtient un
peu plus cryptique.
Mais pour être honnête une fois que vous commencez à voir cela, il obtient tout
assez familier rapidement.
Donc, c'est ce qu'on appelle une boucle for.
Une boucle for qui va indiquer à l'ordinateur de faire quelque chose
encore et encore, aussi longtemps que
ces choses sont vraies.
Maintenant, qu'entendons-nous par là?
Eh bien, il ya trois parties à une boucle for, et nous allons
revenir sur ce point dans le contexte de réelle
exemples dans un instant.
Donc, ne vous inquiétez pas si ce n'est pas tout à fait sombrer dans tous à la fois.
Mais int i = 0 est, longue histoire courte, en disant de me donner un
variable qui est de type entier, alors donnez-moi un certain nombre
J'ai appelé, et l'initialiser à 0.
C'est me donner comme un x algébrique variable et
l'initialiser à 0.
Mais dans ce cas, nous l'avons appelé i.
Puis, au milieu, il est dit i est inférieur à 10.
C'est dire l'ordinateur ne les trucs ci-dessous si longtemps
que i est inférieur à 10.
Et, évidemment, il commence à moins de 10 parce
il commence à 0.
Puis enfin, vous pouvez peut-être deviner ce que je + + moyen.
C'est un peu de syntaxe qui signifie simplement incrémenter i.
Donc, ajouter 1 à i, encore et encore et encore.
>> Et si comme nous le verrons cette boucle, cette syntaxe, plutôt, met en œuvre
exactement la même chose, à vrai dire, dans Scratch était tellement
beaucoup plus facile à exprimer.
Répétez 10, et vous avez terminé.
En C, et dans la plupart des langages de programmation, il faut être un
peu plus instructive pour l'ordinateur et fait
préciser quelque chose comme ça.
Mais nous reviendrons sur cela et d'autre syntaxe.
>> Qu'en est-il des variables?
Dans Scratch nous avions quelque chose comme ces blocs orange,
où je pourrais déclarer une variable.
Nous allons l'appeler arbitrairement comptoir.
Nous allons l'initialiser à 0, puis
nous allons toujours faire quelque chose.
Dans ce cas, dans Scratch je veux dire le compteur, de sorte que le
chat va avoir une bulle peu qui parle
le nombre qui se trouve dans cette variable.
Et puis nous avons contre le changement de 1.
Donc, tout cela est enveloppé à l'intérieur d'une serrure pour toujours.
Nous avons donc déjà maintenant les blocs de construction C avec
de translation de cela.
>> Une façon nous pourrions le faire est la suivante.
Donnez-moi un entier, appelez-le comptoir.
L'initialiser à 0
dans la première ligne y.
While (true), alors je vais voler cette idée d'un instant
Il ya, aller de l'avant et faire ce qui suit.
Imprimer le compteur, puis incrémenter le compteur,
encore, et encore, et encore.
Ou encore, + + signifie simplement ajouter 1 à quelque chose.
Mais il ya un nouveau morceau de syntaxe ici.
Qu'est-ce qui saute comme pas dans nos exemples précédents?
Oui, c'est d%.
Ainsi, vous pouvez peut-être déduire ce que cela fait, franchement, sur la base
sur ce que le bloc de Scratch fait.
Mais encore une fois dans C, nous avons juste besoin d'être un peu plus particulier
quand il s'agit de nous exprimer.
>> Donc printf ("% d \ n").
Eh bien la plupart de ce que nous pouvons jeter aussi familier.
Les citations signifie simplement que c'est une chaîne, barre oblique inverse n
est tout simplement une nouvelle ligne.
Donc la seule chose nouvelle est ici% d.
Et tout ce qui est est un espace réservé.
% D va désigner un nombre décimal.
Et l'ordinateur moyen% d, placer un nombre décimal ici.
Eh bien, quel est le nombre voulez-vous y mettre?
Eh bien, comme vous pouvez peut-être déduire, après la virgule que nous disons
contre, c'est le nom d'une variable que nous avons déclaré ou
créé quelques lignes plus haut.
Donc, c'est juste voie C de brancher une variable dans un
chaîne créée dynamiquement.
Parce que, par contre, si j'avais fait quelque chose comme lieu
ce, printf ("compteur"), ce qui serait cette
programme plutôt que le faire, sans doute?
Il va littéralement imprimer "compteur".
Ce qui n'est pas l'effet que je veux.
J'ai besoin de substituer dans une certaine valeur numérique.
Nous allons donc voir ce que les fonctions puis, comme printf, peut prendre pas
seuls quelques arguments simples, comme
"Bonjour le monde".
Ils peuvent prendre une virgule entre guillemets, puis certaines variables
qui obtiendra branché, comme nous le verrons la chaîne précédente
par l'intermédiaire de ces espaces réservés signe%.
>> Eh bien que dire des expressions booléennes?
Les expressions booléennes sont ces valeurs, vraies ou fausses.
Oui ou non.
1 ou 0.
Sous ou hors tension.
Ainsi, dans Scratch ils ressemblent à cela, et remarquez que le
bloc inférieur ici est en fait la conjonction
de deux blocs plus petits.
Donc j'ai un peu glissé et déposé trois pièces de puzzle
ensemble pour faire de ce morceau de puzzle plus là pour que je
pourrait véhiculer l'idée que je veux que x soit inférieur à y et
y soit inférieur à z.
Et pour que je puisse traduire ces deux lignes distinctes, comme suit.
Celui du haut peut être très trivialement traduit en C,
avec juste x <y.
Peut-être avec des parenthèses pour faire bonne mesure.
Et puis en C, vous n'avez pas à écrire et à désigner le
conjonction de quelque chose.
Vous écrivez à la place. &&
Et comme nous allons le voir finalement, un et commercial unique qui arrive à
signifie quelque chose de différent.
Donc && indique simplement l'idée d'ET.
>> Encore une fois, même si cela commence à ressembler assez complexe,
l'un des objectifs de l'introduction de Scratch, outre
simple fait d'avoir une sorte de plaisir sur la bretelle d'accès où vous pouvez faire
quelque chose de très graphique et d'animation, et
partageable et autres, est aussi à exprimer l'idée que
toutes les idées que nous avons commencer à plonger dans l'aujourd'hui et au-delà
ont été intégrées à même aussi simple que cela
interface depuis le premier jour.
Qu'en est-il celui-là?
>> Ainsi, les conditions.
Ainsi, le bloc Scratch sur la gauche, il semble
un peu plus complexe.
Mais c'est juste de se faire tracter et
chute de morceaux connus.
Si x est inférieur à y, dites-le.
Sinon, si x est supérieur à y, dites-le.
Sinon, on peut logiquement supposer qu'il déduit que
ils doivent être égaux.
Donc, dire qu'ils sont égaux.
Maintenant en C sur la droite, exactement la même chose.
Et remarquez que les accolades vont être
fonction de C et d'autres langues qui font ce genre
de l'encapsulation.
Tout comme le bloc if est cette chose jaune c'est une sorte de
saisissant le bloc violet à l'intérieur de celui-ci.
De même sont ces bretelles -
ces accolades -
destiné à évoquer cette idée même d'embrasser un ou plusieurs
lignes de code qui sont en retrait à l'intérieur d'eux.
Ainsi, sur le côté droit ici, si x inférieur à y, printf
("X est inférieur à y").
Sinon, si x est supérieur à y, imprimez la même chose.
Else print remarquer qu'ils sont égaux.
>> Donc en bref, il ya une correspondance assez directe ou traduction
de la langue que nous avons vu jusqu'à présent, y compris pour certains
des fonctionnalités plus sophistiquées.
Donc, vous pourriez ne pas utiliser cela pour votre projet, ou peut-être pas
utiliser sur votre projet cette semaine.
Mais nous avons ces choses appelées tableaux dans C. Dans Scratch,
on les appelle des listes.
Et nous avons vu ces derniers avec le RPG Fruitcraft la semaine dernière.
Le petit bonhomme bleu qui se promenait autour, ramasser
les cerises et les oranges, etc.
Eh bien dans Scratch, qui a été mis en œuvre avec cette orange
bloquer qui contient des mots, dans ce cas, nous sommes littéralement
ajoutant "orange" à un
variable appelée inventaire.
Donc, en C, cette syntaxe va se faire un peu plus cryptique.
Et nous y reviendrons la semaine prochaine et de faire plus
des choses intéressantes dans le monde de la cryptographie avec elle.
Mais au fond ici, ces deux lignes essentiellement
traduire ce que nous faisons dans un Scratch bloquer là-haut.
Mais plus à ce sujet à venir.
>> Ainsi, le mettre ensemble, voici un programme en C, donc nous
rapidement démêler quelques-uns des éléments de la syntaxe ici, mais
puis nous allons réellement commencer à écrire du code, familiariser
vous avec quelques-uns des outils que nous allons utiliser, et voir si nous
peut maintenant s'appuyer sur certains de ces blocs de construction de base de
la semaine dernière, maintenant syntaxiquement dans C. Donc en haut ici, ce
C'est peut-être l'un des programmes les plus ennuyeux que vous pourriez
écrire dans la plupart des langages de programmation.
Mais c'est un peu a une signification particulière parce que c'est la
programme canonique que tout informaticien écrit quand
apprendre à quelqu'un un langage de programmation -
un programme mondial bonjour.
>> Ainsi, tout en haut, nous voyons cette notion de # include
puis, en chevrons, stdio.h.
Nous allons revenir à cela, mais vraiment ce que
signifie qu'il ya un fichier dans ce monde appelé norme
I / O, point h stdio, et c'est juste un fichier texte qui
quelqu'un a écrit ans.
Et à l'intérieur de ce fichier texte sont tout un tas de
fonctions ou méthodes ou procédures, que quelqu'un d'autre
a écrit que nous sommes les bénéficiaires de parce que nous
pouvez maintenant utiliser le code de cette personne.
Les fonctions qu'il ou elle écrit.
Dans ce cas, printf est pas quelque chose que j'ai écrit, c'est
pas quelque chose qui CS50 écrit.
C'est quelque chose que quelqu'un a écrit ans et mis dans un
fichier appelé stdio.h puis, en passant, mis
une autre partie de la fonction dans un autre fichier.
Mais nous y arriverons.
>> Donc # include est juste notre façon de dire, en
C, donne-moi d'accéder aux fonctions que quelqu'un d'autre a écrit.
Et dans ce cas, je me soucie parce que je veux printf.
Maintenant, nous arrivons int main (void).
Donc, c'est une de ces choses, franchement, c'est le jour 0,
à peu près Je dois sorte de zone sur, parce que c'est juste
pas intéressant
intellectuellement, une partie de la syntaxe.
Mais pour l'instant savons que les fonctions, autrement connu sous le nom
procédures ou méthodes, produisent généralement une certaine valeur.
Ils font quelque chose.
Ils viennent avec une réponse.
Ils produisent de sortie.
Alors int côté principal est notre façon abrégée de dire
que cette fonction, cette procédure, va finalement
pour vous redonner un certain nombre.
Et pourquoi cela est, nous y reviendrons.
Principale se trouve à la norme mondiale par défaut pour le défaut
fonction qui va se faire exécuter dans un programme C lorsque
vous l'exécutez.
Vide signifie juste que cette chose, main, ne prend pas
arguments, dans ce cas.
Je suis donc être super explicite.
Il n'ya pas de cordes là-dedans, il n'y a pas de virgules.
Vide signifie qu'aucun argument au menu principal.
>> Maintenant, enfin, heureusement, les deux dernières lignes sont familiers.
A l'intérieur des accolades, nous avons un printf
et nous avons un retour.
Et le retour est un peu regrettable que nous devons
l'a mis là, car dans ce cas ce n'est pas faire tout ce qui
beaucoup d'intérêt.
Mais dans un programme informatique, lorsqu'une fonction retourne 0,
cela signifie que tout va bien.
Rien ne s'est passé.
En revanche, si une fonction retourne 1, ou 1 négatif, ou
1.337 négative, ou certains nombres aléatoires comme ça, que
signifie généralement qu'une erreur s'est effectivement produite.
Donc, si vous êtes sur votre Mac ou votre PC, si vous avez jamais vu
une certaine message ennuyeux parce que votre ordinateur est en panne ou
gelé, et il ya un message d'erreur cryptique,
et puis un peu de code, le code système comme
1,2,3,4, un certain nombre,
qui est généralement un détail inutile de dire
plupart d'entre nous les humains, mais c'est ce que certaines fonctions ou certains
programme a effectivement retournée, une valeur différente de zéro.
Et l'avantage de ceci est que 0 signifie tout aussi bien, et
alors vous avez essentiellement un nombre infini de choses que
peut aller de travers.
Ce qui explique pourquoi ils ont choisi de 0 pour une bonne et une valeur non nulle pour
mauvais, comme nous le verrons bientôt.
>> Allons donc de l'avant et écrire ceci.
Ainsi, rappelons que l'autre jour, j'ai utilisé mon Mac pour ouvrir un
fenêtre de terminal, puis j'ai ouvert éditeur de texte, comme
TextEdit, et j'ai commencé à écrire un peu de code.
Eh bien c'est très bien.
Mais votre expérience va être différent sur un Mac, ou
sur un ordinateur Solaris, un ordinateur Linux, quelle que soit exploitation
système vous arrive d'utiliser.
Et si dans le cours, ce qui nous place à utiliser est quelque chose de
appelé l'Appliance CS50.
Ainsi, l'appareil CS50 est un morceau de logiciel téléchargeable
qui vous permet d'exécuter un système d'exploitation appelé Linux,
spécifiquement Fedora Linux, sur votre Mac ou PC.
Et vous faites cela en téléchargeant ce qu'on appelle un hyperviseur.
Donc, tout cela sera documenté en 1 set problème.
Et vous serez guidé vers ce que vous devez télécharger.
Mais le résultat final, que vous ayez un Mac ou un PC, c'est vous
télécharger des logiciels gratuit.
Vous pouvez alors télécharger l'appliance CS50, et vous dire que
logiciel libre - l'hyperviseur -
pour exécuter le CS50 Appliance dans une fenêtre sur votre ordinateur.
Et ce qui se passe est la suivante.
>> J'ai maintenant, remarquez ici, ce qui semble être un ordinateur de bureau
environnement.
Et permettez-moi de réellement réduire cette fenêtre.
Donc, c'est maintenant mon Mac, avec une petite fenêtre ici, et à l'intérieur
de cette fenêtre se trouve être un complètement
système d'exploitation différent.
En effet, il ya ce menu de démarrage ici-bas, rappelle
Windows, qui a tout un tas de sous-menus, y compris
un lien vers le manuel CS50, Dropbox, etc.
Et que cet environnement est désormais un environnement standard
que chacun de nous peut maintenant utiliser, de sorte que peu importe ce que votre
ordinateur, ce que vous avez installé, la version
de Mac OS ou Windows que vous utilisez, nous avons maintenant la
même environnement.
Et maintenant, dans cet environnement, nous pouvons commencer à écrire un peu de code.
>> Je vais donc aller de l'avant et d'ouvrir un programme appelé gedit.
Ceci est comparable à notepad.exe, ou
TextEdit sur Mac.
Et ce n'est qu'un super-simple programme d'édition de texte
qui ressemble à ceci au premier coup d'œil.
Maintenant, tout en haut, j'ai une palette de blanc, au fond, je
avoir cette fenêtre noire qui dit jharvard @ appareil.
Et c'est parce que le compte d'utilisateur que nous avons pré-créé
pour tout le monde s'appelle John Harvard.
Il a un dossier dans lequel tous ses dossiers vont aller, et
C'est ici où nous pouvons commencer à écrire du code.
Alors laissez-moi aller de l'avant ici et zoomer un peu, et je suis
va faire # include, int main (void), et
alors je vais faire printf ("Bonjour le monde")
, Retourne 0.
Maintenant tout cela est tout à fait en noir et blanc.
>> Permettez-moi aller de l'avant et de faire une chose à enseigner ce que je suis gedit
en train de faire.
Laissez-moi aller sur Enregistrer sous.
Je vais choisir sur le côté gauche ici jharvard.
Encore une fois, même si vous n'avez jamais utilisé Linux avant, franchement
de nos jours, ils sont tous sombrer dans essentiellement la
même type d'interface -
Mac OS, Windows et Linux.
J'ai donc choisi le dossier de départ jharvard ici.
Et je vais enregistrer ce fichier en tant que hello.c.
Ainsi, tout en haut, j'ai tapé hello.c; la nomination d'un C
programme avec l'extension. c est
ce qui est une pratique courante.
Et je suis tombé sur Enregistrer.
Et maintenant, ce qui est bien, c'est que j'ai effectivement appris gedit,
qu'il s'agit d'un programme C.
Notez que mon texte en noir et blanc est maintenant un code couleur, ou
la coloration syntaxique, qui tire juste mon attention sur le
différentes parties selon le sens du programme.
En haut à gauche là-bas, que mes programmes deviennent plus complexes, je suis
va avoir un résumé de toutes les choses que j'ai écrites.
Donc, c'est tout là-haut.
Permettez-moi maintenant effectuer un zoom arrière et descendez à cette fenêtre de terminal.
>> Donc, c'est peut-être nouveau pour beaucoup de gens.
Si vous n'avez jamais utilisé un environnement de ligne de commande, vous n'avez jamais
utilisée sous DOS, ou si vous n'avez jamais utilisé Linux, ou vous n'avez jamais ouvert
Mac OS fenêtre de terminal, il ya beaucoup de choses que vous
pourrait faire avec l'interface graphique, comme montrer du doigt, et en cliquant, et
glissant et déplaçant, et autres, mais en général -
certainement dans le monde de l'informatique -
en utilisant une ligne de commande, où vous n'avez pas votre souris
généralement, vous n'avez que votre clavier est en réalité beaucoup
plus puissant que l'interface, une fois que vous s'acclimater à la
diverses commandes.
Et vous sorte de vous libérer de devoir pointer et cliquer
à tout.
Ainsi, dans gedit nous allons trier du avoir le meilleur des deux mondes.
On peut faire glisser et déposer du texte, nous pouvons le voir
agréable et un code de couleur.
Mais quand vient le temps de lancer notre programme, nous allons parfois
il suffit d'utiliser cette petite fenêtre ici.
>> Je vais donc aller de l'avant et de le faire.
Dans la fenêtre du bas en noir et blanc, je vais aller de l'avant
et écrire bruit.
Et clang est le nom d'un compilateur.
C'est un programme qui convertit mon code source
en, donc le code objet,.
0 et de 1, que nous avons vu brièvement la semaine dernière.
Rappelons que la semaine dernière, nous avons promis que nous allions
passer de quelque chose comme ça - nous avons besoin d'être
quelque chose comme ça -
et ce n'est certainement pas quelque chose que l'homme va
à faire manuellement.
Ainsi, au lieu que nous allons utiliser un programme, et ce programme dans
ce cas est appelé Clang.
Et le nom de mon programme est hello.c.
Ainsi, afin de compiler hello.c à partir du code source dans
code objet, ou de 0 et de 1, cela devrait suffire pour faire juste
ce et appuyez sur Entrée.
>> Bon, rien ne semble avoir été le cas.
Mais je sais maintenant, ou depuis la semaine dernière, que le nom par défaut de
un programme, lorsqu'il est écrit en C, est follement appelé a.out.
Nom le plus inintéressant que vous pourriez trouver.
A est la première lettre de l'alphabet, est ce qui était
sortie, mais ainsi soit-il.
C'est mon programme, et maintenant point slash, comme nous le verrons, est
en fait juste une sorte de fonction de sécurité, parce que
a.out est un programme que j'ai écrit.
Il n'est pas venu avec mon ordinateur, il est
pas dans Program Files.
Ce n'est pas dans le dossier Applications de Mac OS.
J'ai besoin d'être explicite super avec l'ordinateur, et de dire
ce programme, a.out, se trouve dans le dossier en cours, le
répertoire courant.
Et la façon dont vous représentez ce dans un environnement comme celui-ci
est point représente le dossier où vous êtes;
Et si. / A.out signifie simplement de fonctionner
dans le dossier en cours.
Et je lance ce avec la touche Entrée, et voila, mon tout premier programme.
>> Maintenant, permettez-moi de prendre un peu de recul.
Cette fenêtre est un peu petite, et se rendre compte que le fond
à gauche de l'appareil est ici une autre icône.
L'un est Chrome, qui devrait être assez familier, juste un web
navigateur à l'intérieur de l'appareil.
Et cette icône en noir et blanc est juste un
fenêtre plus grande terminal.
Donc, si ça devient un peu ennuyeux pour trier venons d'
cette tranche minuscule d'une fenêtre avec laquelle se
avec les programmes, nous pouvons le faire à la place.
Et maintenant, permettez-moi de commencer à taper un peu plus tôt
comme les commandes habituelles.
ls.
Donc ls est la commande pour l'inscription.
Ainsi, dans un système Mac OS ou Windows, vous généralement le double-cliquez sur un
dossier, puis, voilà, vous voyez tous les fichiers divers
et dossiers.
Dans un environnement de ligne de commande, où vous ne pouvez taper
commandes ou du texte, ls est l'équivalent.
Alors montrez-moi ce qu'il ya dans ce répertoire.
>> Maintenant, il ya un tas de choses ici qui est à la fois un peu
familier et un peu familier.
Mais notez que, tout comme Windows et Mac OS, jharvard
a un dossier de bureau.
Ainsi, toutes les icônes qui sont sur mon bureau se produire
d'être dans ce dossier.
Il s'agit d'un dossier de téléchargements, des trucs qui
Chrome pourrait y mettre.
Dropbox.
Ainsi, l'appareil est livré avec un support intégré pour Dropbox
de sorte que sur le semestre, vous pouvez synchroniser avec votre Dropbox
compte afin que tous vos programmes sont sauvegardés.
Ils sont accessibles sur votre autre ordinateur.
Si quelque chose ne va jamais de mal avec l'appareil, vous pouvez
très facilement récupérer de Dropbox.
Donc, ce dossier est là pour ça.
Il ya deux fichiers que j'ai faites - hello.c
et a.out.
Et puis vers la droite, il ya quelques autres dossiers que nous allons
arriver à vers la fin de la session, avec le Web
programmation.
Alors, quand je fais. / A.out, Entrez, c'est dire aller
dans le répertoire que je suis dans le répertoire courant, et exécutez le
programme appelé a.out là.
>> D'accord, c'est bien beau, mais ce n'est pas tout ce qui
impérieuse d'écrire un programme appelé a.out aider.
Nous pouvons donc faire un peu différemment.
Donc, au lieu de simplement courir clang, hello.c, ajoutons
ce qu'on appelle un argument de ligne de commande.
Ainsi, un argument de ligne de commande ou un interrupteur dans ce cas, est tout simplement
un autre mot ou une phrase que vous tapez à l'invite après
le programme que vous souhaitez exécuter.
Donc dans ce cas, clang est le programme que je veux courir, o-
Sortie moyen d'un fichier qui n'est plus appelé a.out.
Sortie d'un fichier appelé bonjour, et faire en compilant le
dernier mot sur la ligne, hello.c.
Donc en bref, il s'agit d'une amélioration très marginale, par lequel
au lieu d'avoir ce fichier a.out bêtement nommé,
Je peux maintenant faire clang-o bonjour, puis hello.c, et
puis appuyez sur Entrée.
Rien ne semble se passer, mais là encore, un peu comme avec 0 - lorsque
rien ne semble arriver que signifie rien de mal est arrivé -
nous allons donc faire ls maintenant Entrez, et en effet je maintenant
un programme bonjour.
Donc, si je tape bonjour maintenant, command not found.
OK,. /.
Donc, tout à fait exact.
Ainsi, parce que ce programme que j'ai écrit, et il n'est pas venu avec
l'ordinateur,. / bonjour, Entrée, signifie
Je suis maintenant en cours d'exécution bonjour.
>> Donc, c'est tout là-bas.
Maintenant, ce que nous finirons par arriver à la ligne de commande de plus en plus
arguments qui nous permettent de faire plus, mais seulement pour ceux pour
dont cela pourrait être vieux chapeau, permettez-moi de réellement entrer dans une
répertoire ici et vous donner un avant-goût de la façon dont le monde nous
pourrait aller sur l'implémentation Bonjour tout le monde.
Permettez-moi de parler ici, et je vais l'ouvrir.
Donc en fait, je vais vous expliquer ce que je fais, donc
ce qui est utile.
Laissez-moi revenir.
>> Donc, je fais ça depuis longtemps.
Donc remarquerez sur la droite il ya un couple de
répertoires qui sont curieusement nommés source1m et source1w.
Ceci est juste stupide convention que nous utilisons.
Source signifie simplement que le code source, 1 signifie qu'il s'agit d'une semaine, et
m signifie que c'est lundi, et w signifie que c'est mercredi.
Donc, rien cryptique là.
C'est juste la notation sténographique.
Ces choses-là sont des dossiers bleus, autrement connu comme
répertoires.
Je veux aller dans ce dossier aujourd'hui, et sur un ordinateur normal
Je ne pouvais tout simplement double-cliquer sur une icône de dossier et
il ya tous mes fichiers.
Mais dans un environnement de ligne de commande, je ne peux pas tout faire
que, si au lieu, je dois changer de répertoire manuellement.
Donc, si je tape cd puis source1m, Enter, vous remarquerez que
mon prompt, la chose en blanc à gauche, vient de changer.
Et si en effet, quand il vient d'être dit entre parenthèses, puis les
gribouillis peu, le symbole tilde, qui voulait juste dire que j'étais
dans le répertoire de John Harvard, ses Mes Documents,
ses dossiers personnels.
Mais maintenant, il est dit entre parenthèses ~ / source1m.
Cela signifie juste que je suis dans un dossier appelé source1m
c'est dans le répertoire de John Harvard.
Donc, si je veux maintenant lister les fichiers dans ce dossier, facile
question, je tape juste ls.
Et maintenant je vois tous les fichiers que je pré-créé pour les
conférence, qui tous, ou la plupart, se produire
pour se terminer par. c.
>> Alors laissez-moi aller de l'avant maintenant et exécuter gedit d'un programme appelé
holloway.c, qui est écrit par un pirate aléatoire
sur l'Internet, qui ressemble un peu à ce sujet.
Et nous n'allons pas passer par celui-ci dans toute
détail, mais pour ceux qui sont plus à l'aise, en particulier, si
vous voulez faire une supposition quant à ce que ce programme fait ici.
Rassurez-vous, si vous êtes plus ou moins confortable,
nous ne sommes même pas en arriver à ce genre de chose avant la fin de
ce semestre.
C'est ce qui est un exemple d'un concours obscurci C, ce qui
moyen écrire le programme le plus énigmatique peut-être vous cherchez
peut faire mieux que d'autres gens intelligents, qui sont également
d'essayer d'écrire des choses et de montrer qu'ils peuvent écrire
des choses plus énigmatiques que vous.
Donc, ce n'est pas un exemple d'un programme bien écrit de la
point de vue du style, c'est un exemple d'un programme qui
remporte un concours, pour les personnes qui tentent d'
être vague et abstraite.
>> Donc, si nous courons cette chose, laissez-moi aller dans ma fenêtre de terminal,
pour ainsi dire.
Ainsi, cet environnement en noir et blanc est appelé le
fenêtre de terminal en général.
Permettez-moi aller de l'avant et de le compiler.
Je ne vais pas utiliser clang, parce que ce programme est un
peu obscur et il a besoin d'un autre
compilateur, l'un appelé du CCG.
Mais il fait la même chose.
Il prend le code source, le code objet.
Et maintenant, si je n'ai a.out, ce programme vous
viens de voir cela.
Alors celui-là cette année a remporté ce concours.
Quoi qu'il en soit, nous n'allons pas dans cette direction, en tant que tel.
>> Donc, nous allons effectivement essayer de démêler maintenant ce que nous pouvons faire
avec ces blocs de construction de base pour faire de plus en plus
des programmes intéressants.
Nous avons donc écrit un programme, nous avons exécuté un programme.
Maintenant, nous pouvons simplifier et de ne plus avoir à écrire
le cliquetis mot à l'invite.
Il s'avère que nos programmes obtenir plus cryptique, nous pouvons, ou
plus complexe, plutôt, nous pouvons exécuter cette commande.
Permettez-moi de revenir à mon répertoire personnel, pour ainsi dire, permettez-moi
remove - rm est la commande remove - Je vais retirer
le fichier appelé a.out et bonjour.
Et remarquez maintenant dans un environnement de ligne de commande, un peu comme dans
une interface graphique, vous y êtes invité. Je ne peux pas cliquer sur un bouton bien, je
avoir à taper y pour oui, y pour oui.
Et maintenant, si je tape ls nouveau, notez que ceux verte
programmes a.out - et bonjour -
ont disparu.
Méfiez-vous rm.
Il peut faire de mauvaises choses, tout comme vous pouvez en faisant glisser
choses à la poubelle.
>> Alors maintenant, nous allons aller de l'avant - et je ne pouvais le faire - clang-o
bonjour, bonjour -
Je suis déjà ennuyé tapant cette commande.
Même si j'ai tapé un peu vite.
Nous pouvons donc plutôt faire prendre bonjour.
Donc, assurez n'est pas un compilateur.
C'est juste un programme convivial qui est livré avec Linux, dans ce
cas - le système d'exploitation -
qui automatise le processus d'élaboration des programmes.
Ainsi, au lieu de se souvenir clang-o nom de fichier et
puis ainsi de suite, surtout une fois que ces lignes s'allongent et
plus, je peux faire il suffit d'écrire.
Et cela va cracher tout un tas de trucs qui
nous finirons par voir ce semestre.
Mais remarquez maintenant si ls de type I, bonjour est de retour dans mon répertoire.
Et en effet, je peux le lancer avec. / Bonjour.
Donc, assurez automatise tout le processus d'exécution de ce qui était,
dans ce cas, beaucoup plus long, de commandes plus complexes.
Donc, nous allons commencer à utiliser la marque, juste parce que c'est beaucoup
plus convivial.
>> Mais maintenant, nous allons faire un programme plus intéressant
que juste dire bonjour.
Ainsi, dans les programmes que nous avons écrit jusqu'ici il n'y a principale.
C'est juste la chose par défaut qui débute le tout hors tension.
Mais il ya d'autres fonctions là-bas aussi, et
stdio.h est la chose que nous avons vu dans la partie supérieure de notre
fichier avant, et c'est ce qui est connu sous le nom de la bibliothèque standard.
A l'intérieur de la bibliothèque standard est un tas de fonctions
que quelqu'un d'autre a écrit, et nous pouvons commencer à utiliser ces
fonctions d'écrire plus
programmes intéressants nous-mêmes.
>> Permettez-moi de revenir à l'appareil.
Je vais fermer cette fenêtre de terminal.
Je vais fermer les choses que nous avons écrit plus haut, et juste aller
dans hello.c, et remarquez maintenant, je peux faire ce qui suit.
Bonjour tout le monde n'est pas du tout intéressant, je tiens à
personnaliser ce programme pour moi.
Ainsi, au lieu de dire le monde, je vais
aller de l'avant et de dire -
Je pourrais taper David - mais ce n'est vraiment sorte de
fondamentalement les mêmes.
Mais nous allons essayer cette idée d'espace réservé.
Rappelons que dans C, au lieu de printf, nous avions ces
espaces réservés, et il ya plus de% d juste.
Ainsi était% d, contrôle d'intégrité rapide.
Bon, nombre décimal, c'est tout.
Chiffres après la virgule, c'est tout.
Donc, c%, que nous allons rencontrer, sera un personnage.
Mettez un personnage ici, une lettre de a à z,
signe de ponctuation ou.
Un caractère unique,% f, quelqu'un sait d'autres langues?
Ainsi, une valeur à virgule flottante.
Un nombre réel.
Donc pas un nombre décimal - il s'agit en fait d'un nombre réel avec
un point décimal, et un certain nombre de chiffres à gauche
et à droite de celui-ci.
% S, ficelle.
C'est celui que nous allons voir assez souvent.
Une chaîne, encore une fois, c'est juste un mot, une phrase, une séquence de
caractères individuels.
Et enfin, lld?
Il s'agit donc plus d'une affaire coin.
Long, décimal longtemps.
Donc, si vous voulez non seulement un nombre qui est ce grand, vous
veulent un plus grand nombre, vous allez devoir indiquer à
l'ordinateur sur lequel il est d'une taille particulière.
>> Donc, nous allons modifier cela un peu petite.
Plutôt que de coder en dur dans David, laissez-moi un peu
dynamiquement dire s%.
Donc, mettez% s ici, qui est un espace réservé pour une chaîne.
Alors laissez-moi faire une virgule, puis «David» ici.
Maintenant, ce n'est pas du tout intellectuellement intéressant,
parce que tout ce que j'ai fait aujourd'hui est vraiment créer plus de travail pour
l'ordinateur.
Plutôt que d'indiquer à l'ordinateur ne présente tout à la fois, je suis maintenant
en disant cela et insérer une chaîne ici un jour, virgule,
C'est ici que chaîne.
Ce n'est donc pas une meilleure amélioration, mais c'est au moins
une étape vers un programme plus intéressant.
Parce que maintenant, laissez-moi aller de l'avant et faire de cette fenêtre un peu
plus, laissez-moi aller de l'avant et exécutez make bonjour.
Et maintenant,. / A.out ne fonctionne pas, pourquoi?
Très bien, maintenant il s'appelle bonjour.
Donc, encore une fois faire, et aussi avec un bruit o-, rebaptisé
programme pour avoir quelque chose de plus intéressant.
Et voilà: maintenant, il dit bonjour David.
>> Bon, encore un programme stupide.
Alors maintenant, nous allons effectivement revenir ici et d'introduire la notion
d'une variable.
Ce ne serait pas bien si je pouvais déclarer une variable
dont le type est une chaîne?
Et la valeur de la variable provient en réalité de l'utilisateur
lui-même.
Ainsi arbitraire, je vais appeler ma variable s, ce qui est
juste une convention courant quand vous avez une variable appelée
la chaîne.
Je vais faire signe égal, puis je vais appeler un
fonction appelée GetString.
Donc GetString n'est pas quelque chose qui est intégré à C. C'est
une fonction que le personnel CS50 écrit, vraiment juste pour
ces deux premières semaines, afin de simplifier le processus de
obtenir les commentaires des utilisateurs et obtenir l'apport utilisateur sous la forme
des chaînes ou des nombres, et autres.
Donc GetString est comme printf, mais de toute évidence plutôt que
imprimer ça va faire ce que son nom l'indique, obtenir une chaîne.
Mais pour utiliser GetString, nous allons devoir faire un changement
ici, au-delà de cela.
Donc intuitivement, ce programme, nous l'espérons, va en quelque sorte
obtenir une chaîne de l'utilisateur, et alors qu'est-ce qu'il va faire
avec cette chaîne, appelée l?
Il va tout simplement de l'imprimer, non?
Toujours pas un programme stimulant parce que tout ce qui se passe
à faire est de brancher cette valeur dans laquelle% s
dit qu'il devrait aller.
>> Nous allons donc au moins voir dans cette action.
Permettez-moi de sauver et effectuer un zoom arrière.
Maintenant, dans ma fenêtre de terminal ici-bas, la petite tranche d'un seul,
Permettez-moi encore une fois faire prendre bonjour.
D'accord, et ah, merde, j'ai reçu un tas d'erreurs.
Permettez-moi de défiler vers le haut, et nous voyons notre premier -
nous allons donc effectivement le faire dans une fenêtre encore plus grand si vous
peut voir à quel point j'ai foiré -
alors assurez-bonjour.
D'accord, c'est une catastrophe, non?
J'ai écrit trois lignes de code, et
il m'a donné 12 erreurs.
Alors, pourquoi est-ce?
Donc, heureusement, souvent quand vous voyez beaucoup, beaucoup d'erreurs
cracher à la fois, c'est vraiment juste parce que vous avez
confondre l'ordinateur ici.
Et il reste confuse au moment où il descend ici.
Et il commence juste à faire trébucher, et trébuchant, et
cracher plus de choses effrayant que s'applique réellement.
Donc, en général, toujours commencer par le haut.
>> Ainsi, l'exemple le plus haut de rouge, le
message d'erreur est le suivant.
Utilisation de chaîne de l'identificateur non déclaré, ai-je
signifie standard?
Je n'ai pas.
Je voulais chaîne, mais c'est parce que, aussi, la chaîne de mots
que je continuer à utiliser verbalement fait
n'existe pas dans C supporte.
C'est quelque chose que nous allons utiliser seulement pour la première semaine ou deux
ici, mais il existe dans un fichier appelé cs50.h.
Donc pour l'instant, de savoir qu'il ya cette autre bibliothèque que la
Le personnel a écrit, il a été écrit plus récemment que
stdio.h.
Mais à l'intérieur de cs50.h est une définition, un synonyme de
sortes, qui crée cette chaîne de mots.
>> Alors maintenant, permettez-moi de revenir à ma fenêtre de terminal.
Je vais effacer tout ce gâchis en appuyant sur Ctrl-L. Nous allons simplement
essuyer tout propre, et je vais aller de l'avant et de faire
Bonjour à nouveau, Entrée.
Donc ce qui s'est passé aujourd'hui?
Maintenant, toutes ces erreurs sont partis.
Alors qu'ai-je vraiment fait?
J'ai simplement appris l'ordinateur de cette chaîne existe, et il est
dans ce fichier appelé cs50.h.
Alors arrêtez de vous plaindre, parce que maintenant vous savez où trouver
déclaration de cette fonction pour ainsi dire.
Là où elle existe dans le monde.
>> Alors maintenant, je vais aller de l'avant et exécutez bonjour.
Il me semble avoir une boucle infinie, rien ne se passe d'.
J'ai donc besoin de taper quelque chose ici, à droite.
La première ligne de code dans mon programme a été GetString.
Donc, il est littéralement m'attend pour obtenir une chaîne.
Dans ce sens, oui, c'est une boucle infinie.
Apparemment, dans GetString est le comportement par défaut que nous
écrit - le personnel -
qui dit simplement attendre et attendre et attendre et attendre et attendre,
jusqu'à ce que l'utilisateur vous donne une chaîne en tapant quelque chose po
Alors laissez-moi aller de l'avant et tapez D-un-v - i-d, Entrée.
Et ça y est, bonjour David.
>> Maintenant, est-ce vraiment l'impression qu'il s'agit seulement d'un acte?
Laissez-moi aller de l'avant et taper Tommy.
Entrez, d'accord, semble porter ses fruits.
Travaux pour Rob, œuvres pour Zamyla, travaille pour - okay.
Donc, il va travailler, le plus probable.
Donc, il devrait imprimer tout ce que nous réellement donner,
et l'on peut être un peu difficile ici.
Voyons voir si nous faisons quelque chose comme bonjour.
Peut aller là-bas, nous allons voir, copier, coller.
Je ne vais pas être en mesure de le coller plusieurs fois ici.
Colle, d'accord, Maj + Ctrl + V. Donc, ce qui pourrait
arriver que c'est mauvais ici?
>> Bon, alors, faute de segmentation.
Ainsi, certains d'entre vous ayant des antécédents antérieurs saurez que
généralement, ce qui donne beaucoup d'entrées ordinateurs quand ils sont
sans doute pas destiné à recevoir des noms longs comme celui-ci - de mauvaises
bouger les choses.
En effet, dans le monde du web, aussi, cela arrive assez souvent,
de sorte que lorsque vous concevez un site Web, lorsque vous êtes
conception Facebook, vous avez à prendre des décisions arbitraires des
avant, comme combien de temps quelqu'un
Facebook username être?
Ou combien de temps prénom d'une personne soit?
Combien de temps durera le numéro de téléphone de quelqu'un être, etc.
Et si les programmeurs faire des hypothèses douteuses, les programmes de briser
parce que vous essayez de leur donner plus de puissance, plus d'entrée
plutôt que ce qu'ils ont de la mémoire.
Ou RAM allouée pour elle, et si maintenant je la touche Entrée,
que le programme effectivement travaillées, parce que nous étions à la bibliothèque
et nous avons même anticipé ce cas particulier.
Mais sans doute ce semestre, vous allez écrire au moins un
programme qui va dire ces mots.
Rappelez-vous de cette semaine à partir de maintenant, peut-être dans deux jours.
Segmentation fault est une mauvaise chose.
Il fera référence à votre faire quelque chose que l'ordinateur
n'avait pas prévu.
Et dans ce cas, vous, le programmeur, ne s'attendait pas.
Tout comme ce que ce tas de chaussettes, il y avait divers
cas de coin, nous aurions pu rencontré.
De même, dans les programmes si vous ne prévoyez pas combien de temps est
le nom de quelqu'un va être.
Ou si j'ai un utilisateur malveillant et son nom est
en fait assez courte, mais ils sont juste essayer
de jouer avec moi?
Quel va être le comportement de mon programme?
Eh bien, dans ce cas, quelque chose pourrait en fait crasher.
>> Alors allons-y.
En 90 minutes, c'est depuis très longtemps
faire de la science informatique.
Pourquoi ne pas prendre l'habitude de prendre cinq minutes
casser ici, et quand nous reviendrons, nous allons plonger dans une certaine
des programmes plus complexes et convaincante?
Cinq minutes.
>> Très bien.
Ainsi, un bref commentaire.
On me dit que si ce n'était à l'écran avant, ce qui
est sorti de ma bouche était cs50.net/rsvp.
Ceci est correct. cs50.net/lunch.
Alors maintenant, vous pouvez essayer RSVPing pour cela à / déjeuner.
Mais nous allons le faire maintenant.
Donc, cela a été super rapide, super nouvelle pour beaucoup de gens.
Vieux chapeau pour certaines personnes.
Donc, nous allons revenir en arrière pour un instant, et de voir comment nous sommes arrivés à
Bonjour tout le monde cette sortie il ya quelques instants.
>> Alors d'abord, il ya ce Appliance CS50.
Encore une fois, un morceau de logiciel, problème set 1 va dire
vous comment le télécharger, où le télécharger, cliquez sur ce qu'il faut
et ainsi de suite.
Et puis une fois que vous suivez ces instructions, vous serez en mesure
pour maximiser votre fenêtre, et votre Mac ou votre PC aura l'air un
quelque chose comme ça.
Un fond noir, un dossier d'accueil en haut où tous les
vos fichiers vont, une poubelle en haut à gauche,
un menu en bas.
Encore une fois, assez similaire dans l'esprit à Mac OS ou Windows,
même si elle se trouve être Linux.
Qu'avons-nous donc faire à côté?
Eh bien, nous avons commencé à écrire des programmes.
Et de rappeler que la semaine dernière que tout ce qu'il faut pour écrire une
programme est un éditeur de texte simple,
comme Notepad ou TextEdit.
Franchement, vous pouvez même utiliser Microsoft Word.
Mais les mauvaises choses finira par arriver, parce que c'est une très
lourde solution pour avoir écrit un programme, plus il va
l'enregistrer dans le format de fichier incorrect.
Mais c'est juste un éditeur de texte, un traitement de texte, est tout ce qui est
nécessaire d'écrire un programme.
>> Ainsi, dans l'appareil CS50, nous pouvons le faire d'une manière simple.
Nous pouvons vous suffit de cliquer sur cette icône en bas à gauche.
Et encore une fois, le problème mis en 1 vous conseillons de cela, et voilà -
vous obtenez cette interface en noir et blanc où l'on peut commencer à
l'écriture de code.
Donc, nous allons commencer à écrire un programme super simple à nouveau.
Je vais monter sur Fichier, Enregistrer, et je vais appeler
cette, disons, hello2.c.
Et je ne fais que raconter en cliquant sur jharvard, mettez-
dans son répertoire personnel, je ne m'inquiète pas vraiment
où celui-ci va.
Et puis sur Enregistrer.
Et maintenant, je peux commencer à écrire mon programme.
Et je me souviens de l'heure que je dois écrire int
main (void).
Zoom sur en haut à gauche.
Et puis je veux dire printf, en prendre deux.
Et maintenant, un saut de ligne, citation étroites, close
parenthèses, virgules.
Et puis je descends ici pour ma fenêtre de terminal qui est
intégré dans gedit, juste pour plus de commodité.
Et je vais aller de l'avant et de faire écrire bonjour, mais pas
bonjour seul, hello2.
>> Donc, mon fichier s'appelle hello2.c. Mon fichier donc
doit être appelée hello2, dans ce cas.
Bon sang, qu'est-ce que j'ai fait de mal?
D'accord, donc j'ai clairement omis une ligne, si vous vous rappelez ce que
programmes précédents ressembler.
Mais nous allons voir si nous ne pouvons pas taquiner cet appart.
Malheureusement, la plupart des gens qui écrivent les programmes avec lesquels
nous écrivons programmes ne simplifie pas les choses très bien.
Donc, nous devons genre de survoler ce n'est pas tout à faire
sentir ici et voir si nous pouvons comprendre ce qui ne va pas.
La toute première ligne il dit implicitement en déclarant C
fonction de bibliothèque printf avec le type int.
OK, j'ai compris une partie de cela.
Mais il semble faire allusion au fait que j'ai utilisé printf
mal, en quelque sorte.
Et quel sens est-ce mal?
Je ne voulais pas apprendre à l'ordinateur que c'est dans un fichier
appelé stdio.h.
Maintenant je n'ai plus qu'à simplement mémoriser maintenant que c'est printf
dans stdio.h, et en effet il y aura d'autres
fonctions dans ce même fichier que nous allons nous habituer.
>> Alors maintenant, laissez-moi aller de l'avant et appuyez sur Ctrl-L pour dégager simplement que
de là, réexécutez: make hello2, et le tour est joué.
Et de nouveau cette commande, plus complexe que nous allons vous expliquer pour
aujourd'hui fins.
Mais il n'a exécuté clang, clang, et prend le code source et
crache 0 et de 1.
Et ceux 0 et de 1 dans ce cas sont appelés quoi?
Ok, code objet.
Et le fichier qu'ils sont en appelle, alors,
hello2, dans ce cas.
Parce que mon fichier texte était hello2.c, Entrée.
Et maintenant je prendre deux points d'exclamation, exclamation
point, point d'exclamation.
D'accord, donc nous avons maintenant la possibilité d'obtenir des chaînes,
apparemment.
Eh bien, quoi d'autre pouvons-nous obtenir auprès des utilisateurs?
>> Eh bien dans la bibliothèque CS50, il ya d'autres fonctions qui
allons simplifier notre vie en ces premiers jours.
GetChar, GetDouble, GetFloat, getInt,
GetLongLong, GetString.
Eh bien, arrachez le plus facile de ces premiers.
GetString fait littéralement cela.
Il se trouve juste là, attendant que l'utilisateur de taper quelque chose,
et dès que je tape quelque chose dans et appuyez sur Entrée, il
fait quelque chose avec cette valeur.
Donc, revenons à cet exemple pour voir exactement ce que
GetString faisait.
Permettez-moi aller de l'avant et d'ouvrir à gedit, hello.c, et de rappeler
que juste avant la pause, c'est là que nous nous sommes quittés.
>> Donc, nous allons maintenant taquiner cette part dans un peu plus de détails.
Ainsi, sur la ligne 6, il ya deux choses
passe en ce moment.
Le signe égal est la séparation de la première moitié et la seconde moitié.
Ainsi, sur le côté gauche du signe égal, nous sommes
dire la chaîne s.
Et puis, juste termes simples, ce qui est une chaîne s
faire, pensez-vous?
Il s'agit de créer un quoi?
Donc, c'est la création d'une chaîne appelée s.
Maintenant, qu'est-ce que cela signifie vraiment?
Eh bien, c'est réserver de l'espace pour une chaîne appelée s.
Ce n'est pas tout à fait raison.
Quel est ce fait?
Ordinateurs ainsi, comme vous le savez, avoir des disques durs, c'est là que
vos fichiers sont stockés.
Ordinateurs de RAM, et c'est là que les programmes sont chargés
alors qu'ils sont en cours d'exécution.
Ainsi, lorsque vous double-cliquez sur une icône et Microsoft Word s'ouvre
up, Microsoft Word est en cours d'exécution, pour ainsi dire, dans la mémoire RAM, ce qui est
la partie électronique de votre ordinateur.
Pas le physique, la partie mécanique qui est la filature, où
les données sont généralement stockées à long terme.
Ainsi, la chaîne s est à peu près dire à l'ordinateur me donne
suffisamment de mémoire vive pour s'adapter à une chaîne.
Maintenant que c'est un peu trop simpliste, car
Quelle est la taille de la chaîne va être?
Eh bien, nous ne savons pas réellement encore, dans les semaines à venir
nous allons effectivement retirer la couche qui est une chaîne et
nous allons vous dire ce qu'il est vraiment.
String, pour l'instant, c'est juste une belle simplification de notre monde.
Mais la chaîne s déclare une chaîne appelée s, pour l'instant.
Déclare une chaîne.
Il se réserve un peu d'espace dans la mémoire RAM pour la chaîne de l'utilisateur
sur le point d'entrer.
>> Maintenant, nous allons regarder dans le droit du signe égal.
Ainsi, il est dit GetString ().
Et un peu de raison vérifier.
Le fait qu'il n'y a rien à l'intérieur des parenthèses
implique qu'en est-il GetString?
Il ne prend aucun argument.
Autrement dit, vous ne pouvez pas influer sur son comportement en aucune façon.
Chaque fois que vous l'utilisez, il obtiendra une chaîne et c'est tout.
En revanche, printf, je l'espère son comportement ne
changer à chaque fois.
Sinon, c'est une fonction d'impression assez inutile si
il fait la même chose.
Si l'impression est toujours David ou quelque chose
arbitraire tout le temps.
Ainsi fait printf logique d'avoir un argument.
GetString n'a pas vraiment besoin d'un argument, parce que je voulais
pour obtenir une chaîne de l'utilisateur et c'est l'utilisateur qui va
pour alimenter le dynamisme en tapant dans des lettres différentes
à chaque fois au niveau du clavier.
>> Alors qu'est-ce GetString ne finalement?
Pensez-y comme cette petite boîte noire.
Et cette boîte noire ne prend pas d'entrée, mais quand vous taper sur
elle, elle recrache une chaîne que l'utilisateur a tapé po
Et le fait qu'il y ait un signe égal il signifie prendre
ce qui est cracher sur le droit et de le stocker à l'intérieur
ce qui est sur la gauche.
Donc signe égal ici, il ne fait pas dire
l'égalité, plutôt techniquement s'entend d'une cession.
Prendre la valeur sur la droite, et le mettre dans l'
variable de gauche.
Donc, c'est tout ce qui se passe là-bas.
>> Maintenant, à la ligne 7, nous faisons appel printf.
Donc j'espère obtenir printf est un peu ennuyeux par moment.
Donc imprimer une chaîne formatée.
Quelle chaîne?
Imprimer, "h-f-l-l-o, s%
\ N ".
Bon, alors qu'est-ce que je veux plug-in pour% s?
Littéralement, tout ce qui est stocké dans l'art.
Donc dans ce cas, cocher peu de raison, combien arguments ne
printf prendre?
Bon, j'ai entendu un.
J'ai entendu un nouveau.
Deux, j'ai entendu deux.
Et que diriez-vous trois?
Okay, trois?
Excellent.
Trois réponses possibles, une seule d'entre elles est correcte.
Donc arguments à nouveau influencer le comportement d'une fonction.
Dans le passé, printf ne prendre qu'un seul argument.
"Bonjour le monde" était un argument unique.
Cependant, maintenant, remarquez où cette virgule est.
Cette virgule est en dehors de la citation / Ils ont dit, ce qui signifie
printf hey, voici un second argument.
>> Donc virgules dans la plupart des langages de programmation
plusieurs arguments distincts.
Donc la réponse est ici certainement pas, parce
il ya cette virgule.
Donc, au minimum, printf est apparemment en prenant deux
arguments cette fois.
Mais l'occasion d'une question piège, voici ce que
à propos de cette virgule?
Est-ce à dire que il ya en fait trois arguments?
Ceci, ceci et cela.
Donc, non, parce que cette virgule est à l'intérieur des guillemets, ce qui
veut dire que c'est vraiment juste une esthétique de l'anglais.
Cela n'a rien à voir avec le nombre de
arguments dans ce programme.
Donc, cette virgule est à l'extérieur des guillemets.
Et elle renvoie 0.
Pour l'instant nous allons juste une sorte de prendre celui-ci sur la foi de
aujourd'hui, et il suffit de savoir que lorsque les fonctions sont fait exécuter
lignes de code, ils doivent généralement retourner une valeur.
Dans ce cas, tout simplement parce principal doit retourner un int,
c'est juste la façon dont le langage C fonctionne.
>> Donc, parce que rien ne s'est mal passé, se sent comme ce programme de
bien, je viens codé en dur dans le retour 0.
Mais en revanche, et je vais écrire cela dans le code pseudo
maintenant, un peu comme Joseph l'a fait quand nous avons fait la chaussette
Par exemple la semaine dernière.
Si quelque chose s'est mal passé - ce n'est pas le code réel - a
mal, puis revenir, disons, 1.
Else return 0.
C'est donc là que nous allons à présent.
Ce n'est pas réel du code C, juste pseudocode.
Mais c'est la façon dont vous pourriez retourner
différentes valeurs possibles.
Mais pour l'instant je vais juste aller de l'avant et retourner 0.
Tout droit, toute question à ce jour sur la syntaxe, la fonctionnalité,
ou autres?
Oui, à l'arrière.
>> PUBLIC: [Inaudible]
DAVID MALAN: Pouvez-vous parler un peu plus fort?
Pourquoi ce retour 0 programme, et?
PUBLIC: [Inaudible]
DAVID MALAN: Oh, c'est parce que je suis paresseux, je suis désolé.
Aucune réponse de bons résultats scolaires, retourne 0.
Je peux sorte de sauver ce, en disant techniquement C, si principale
ne renvoient pas explicitement une valeur 0 sera retourné
automatiquement pour vous.
Ce qui est vrai, je ne suis pas seulement couvrir.
Mais, je l'aurais fait comme ça.
Pas de plats à emporter intéressant que celui d'autre que mon erreur.
Ouais?
>> PUBLIC: Habituellement, lorsque vous entrez dans le vide, signifie que vous
ne reviennent pas quelque chose.
DAVID MALAN: C'est exact.
Si au contraire, vous devez spécifier avant le nom d'une fonction, par
Par exemple ici, nulle, alors la fonction
ne retourne rien.
Et par conséquent, je dirais simplement, le retour ou rien du tout,
et qui serait compatible.
Et nous allons revenir à cela.
Et juste pour info, l'une des prises avec l'apprentissage
programmation dans un monde qui a des centaines de livres et de
des centaines de sites Web dehors là est que vous aurez toujours
voir syntaxe différente dans différents livres
par des personnes différentes.
Rendons compte que nous ferons de notre mieux dans les sections et conférences à
cohérente.
Mais parfois, vous verrez la syntaxe contradictoires.
Donc, chaque fois dans le doute, il suffit de demander.
Et en général, nous allons prendre soin de conférences et des sections à
presque toujours présents dans le droit chemin.
Et je dis presque toujours, car bon exemple.
D'autres questions?
>> PUBLIC: Est-ce que% s existent en dehors de l'appareil?
DAVID MALAN: Est-ce que% s existent en dehors de l'appareil?
Oui.
Donc,% s doit faire avec C. Le fait que nous l'utilisons dans
l'appareil a fondamentalement rien à voir avec l'
caractéristiques de la langue que nous utilisons.
En effet, la semaine dernière, lorsque nous avons utilisé mon Mac, j'ai écrit
Code C sur mon Mac.
J'aurais pu utiliser% s sur mon Mac, et vous pouvez l'utiliser sur
votre ordinateur Windows si vous installez un compilateur, comme
Visual Studio de Microsoft.
Donc,% s.
Tout ce que nous faisons à l'intérieur de cette fenêtre doit aujourd'hui
faire avec rien C. Et fondamentalement à voir avec la
système d'exploitation en question.
En revanche, la fenêtre du terminal noir et blanc - quand
Je tape des choses comme ls et rm, et cd -
qui a à voir avec le système d'exploitation et
naviguer autour.
Ouais.
PUBLIC: Je parlais de la bibliothèque, la bibliothèque CS50.
DAVID MALAN: D'accord, donc si vous entendez le mot clé string, qui
n'existe que dans la bibliothèque CS50, c'est exact.
Cela n'existe pas en C lui-même, et même dans un couple
semaines, nous allons jeter la bibliothèque CS50 et commencer à
faire les choses à partir de rien nous-mêmes, pour ainsi dire.
D'autres questions?
Ouais.
>> PUBLIC: [Inaudible]
DAVID MALAN: Bonne question.
Sont le cas commandes sensibles?
Et permettez-moi de faire ici une distinction.
Ainsi, les commandes sont généralement les choses que nous allons écrire au
inférieure de la fenêtre, dans la fenêtre du terminal.
Tout ce qui ici serait déclarations ou code C.
Mais dans les deux cas, la réponse est la même, oui.
Ces deux environnements, le code C dans le haut et le
fonctionne en ligne de commande du système à l'
bas, sont sensibles à la casse.
Donc, vous devez miser au capital GetString G,
du capital S. Vous devez écrire printf en minuscules.
Vous devez taper ls en minuscules.
Ainsi, dans presque toutes les situations de ce semestre, le cas sera, dans
fait, la matière.
Oui.
>> PUBLIC: [Inaudible]
DAVID MALAN: Ah, d'accord, si nous avions un fichier
appelé hello.d.
Ainsi, il s'avère D est un langage de programmation.
Et si dans certains cas, nous pourrions écrire un programme en
ce fichier et l'avoir compilé de cette façon.
Nous pouvons, et en fait, réponse courte, c'est que je ne sais pas.
Donc, nous allons le faire.
Laissez-moi aller de l'avant et créer un nouveau fichier.
Et le spin ici, honnêtement, en général, est chaque fois qu'un doute
ce semestre, et vous avez votre appareil ou ordinateur
ouvrir, aller de l'avant et essayer quelque chose.
Donc, je vais enregistrer un fichier appelé hello.d.
Sauvegardez ce fichier.
Et je vais exécuter la commande make bonjour Entrée.
Il semble en déduire que c était plus probable
à d, dans le cas présent.
D'autres questions.
Ouais.
>> PUBLIC: [Inaudible]
DAVID MALAN: D'accord, disons que, une fois de plus.
PUBLIC: [Inaudible]
DAVID MALAN: Comment feriez-vous pour que le diagnostic ou
dépannage cela?
Donc, très probablement, parce qu'ils sont des langues différentes,
plus probable que vous obtiendrez un complètement
programme différent fourni en sortie.
Vous obtiendrez des messages d'erreur complètement différentes.
Et aussi juste en termes de conception, il serait sans doute une
décision mauvaise conception d'écrire deux différents
langues avec des fichiers portant le même nom, près de
le répertoire exactement la même, à l'aide d'un
automatique des outils comme make.
Donc, je peux aussi pousser en arrière et dire en 15 ans de le faire,
jamais fait cette erreur.
Pourrait se produire.
Mais il ya juste différents, je pense,
défenses logistiques en place.
Ainsi que les messages d'erreur qui s'ensuivraient, qui serait
éventuellement révéler quel est le problème.
Mais un cas d'angle possible.
>> Très bien, nous allons donc présenter que quelques autres
Caractéristiques ici maintenant, afin que nous puissions commencer à construire en plus
en plus du programme complexe.
Alors tout d'abord, les mathématiques.
Ainsi, des exemples mathématiques sont juste un peu facile dans la première semaine.
Cela ne veut pas dire que toute la programmation est d'environ
mathématiques.
Certes, la compréhension de diverses caractéristiques de
mathématiques, l'algèbre, en particulier, est
tout à fait pertinent ici.
Dans les classes supérieures de niveau CS, algèbre linéaire,
calcul, et analogues.
Mais réaliser la plupart de ce que nous ferons ce semestre réduit pas
aux mathématiques, et certainement pas à l'arithmétique, en soi, mais vraiment
juste la logique et à une réflexion approfondie.
Et si ce lien que l'informatique a longtemps eu,
en particulier au niveau secondaire, en mathématiques, est une
peu trompeur.
Parce que la plupart des programmes que nous allons écrire, vraiment, sont
sorte de niveau supérieur et de se concentrer sur la résolution des problèmes qui,
Certes, peut-être utiliser une addition, soustraction, et divers
formules mathématiques ou similaires,
mais à la fin de la journée, il s'agit de penser et de ne pas
tout mettre en œuvre ce que vous auriez pu faire le comme un TI
calculatrice à l'école secondaire.
>> Donc, avec cela dit, nous allons maintenant faire quelque chose avec ces
opérateurs mathématiques qui existent afin que nous puissions aller
sur certains des aspects sous-jacents de la programmation, ou en
ce cas C. Il ya donc, comme la bibliothèque CS50 suggéré,
et aujourd'hui, nous n'utilisons que GetString - et dans un moment
peut-être une autre fonction -
mais il existe différents types de données dans un ordinateur.
A la fin de la journée, les ordinateurs ne savent 0 et de 1.
Mais rappelons que la semaine dernière, nous avons parlé du système binaire
dans la représentation de chiffres, comme le nombre 0, et 1, et 2,
sur tout le chemin jusqu'à 8, selon la vidéo Nate.
Et puis nous pouvons compter beaucoup plus élevé que nous
fait sur scène ici.
Mais si vous voulez représenter non seulement des chiffres, des lettres,
nous, les humains, avons pour arriver à une certaine arbitraire
conventions, de sorte que si, à la fin de la journée tout mon ordinateur
a la capacité d'exprimer des 0 et des 1, et nous ferions mieux de
commencer à normaliser les modes de 0 et de 1 qui représentent
choses différentes.
Un motif de 0 et de 1 qui représente la lettre a.
Modèles de 0 et de 1 qui représentent la lettre z.
Modèles de 0 et de 1 qui représentent la couleur bleue, ou
rouge, ou analogue.
Nous devons utiliser tous ces 0 et de 1 à s'exprimer dans
contextes différents, de différentes manières qui ne sont pas
nécessairement numérique.
>> Donc, en termes de représentation, C a différents types de données,
et nous avons vu un de ces jusqu'ici.
Nous avons vu int et notez ce n'est pas sur l'écran
en ce moment est une chaîne.
String ne pas, en fait, existent dans C. Encore une fois, c'est un
simplification que nous présentons pour la première fois
quelques semaines.
Un char est un caractère individuel.
Un flotteur est un nombre réel, avec un point décimal et le nombre de
la gauche et la droite.
Un double est ce qui, pour ceux avec un fond de retour avant?
Ainsi, un double est deux fois quelque chose.
Ajoute deux fois autant de précision.
Alors qu'est-ce que cela signifie?
Ainsi, dans chacun de ces cas, le monde a en quelque sorte standardisé
le nombre de bits utilisés pour représenter
chacune de ces choses.
Donc, si vous avez regardé la vidéo ASCII Nate déjà pour une partie
de pset 0, ou plus tard cette semaine, vous, vous le savez sans doute
que ASCII -
représentations de caractères -
utiliser le nombre de bits?
Et vous pourriez me souviens même de notre démo la semaine dernière de la façon dont
beaucoup de gens étaient sur scène.
Donc, 7 ou 8, généralement.
Donc, en général 8, et il ya quelque chose qui s'appelle tel que prorogé
ASCII qui utilise tous les 8 bits, au lieu de 7.
Mais en général, nous parlons en puissances de 2, alors dans ce cas, 8.
Ainsi, un char dans un langage de programmation est généralement 8 bits.
Ainsi, un int est généralement de 32 bits.
Un flotteur est généralement 32 bits.
Un double est généralement de 64 bits.
Et qu'est-ce que ça veut dire?
Cela signifie que vous pouvez représenter des chiffres plus élevés, ou dans le cas
des nombres réels, vous pouvez avoir un nombre beaucoup plus après la
décimale.
Une précision beaucoup plus, dans ce cas.
Maintenant un long long est malheureusement nommé.
Il ya donc un int qui est de 32 bits.
Il ya une longue ce qui est, non, 32 bits.
Et un long long qui est de 64 bits.
Toutefois, certains de ceux qui sont sensibles au contexte, elle dépend
quel type d'ordinateur que vous avez.
Donc, en général, nous allons spécifier dans un devoir ou à un quiz où
il importe réellement.
Mais le fait est qu'il ya tous ces différents
représentations ici.
>> Donc, nous allons réellement plonger dans un programme.
Plutôt que d'écrire celui-ci à partir de zéro, laissez-moi aller de l'avant
et d'ouvrir le code source à partir d'aujourd'hui - qui est
en ligne - si vous voulez bricoler en ligne, ou le retour sur
Mercredi avec l'appareil sur votre ordinateur, les instructions
pour qui reliera la page d'accueil du cours.
Voici un programme super simple.
Mais il a un petit quelque chose de nouveau au sommet qui
nous n'avions pas auparavant.
Un tas de lignes bleues de texte.
Ainsi, ces lignes bleues représentent commentaires.
Il est donc très utile dans un programme pour être capable d'écrire
quelques commentaires pour vous-même, ou à des collègues ou des amis, ou
boursiers d'enseignement, ce genre de décrire ce qui se passe dans
ce fichier, mais n'ont rien à voir avec le code C lui-même.
Rien à voir avec le programme fonctionnel, c'est juste
esthétique.
Ainsi, la manière de le faire en C est vous commencez généralement votre
commentaires / *, et vous finissez vos commentaires
* /.
Et si vous êtes vraiment anal et aime dessiner genre de photos,
alors vous mettre beaucoup de stars, tu ferais un
petite boîte comme ça.
Mais rien de tout ce qui compte.
La seule chose qui importe, c'est la toute première
et le. dernier
C'est ce qu'on appelle un commentaire multi-ligne.
Et c'est juste convention humaine font souvent les étoiles et la boîte
choses comme ça si vous avez beaucoup de temps libre.
>> Ainsi, après que vous avez écrit dans certains commentaires, en général, se
les entrailles mêmes du programme.
Voici notre familiariser # include.
Et juste rapide, cela est nécessaire ou pas nécessaire?
PUBLIC: Nécessaire.
DAVID MALAN: Donc ce n'est pas vraiment nécessaire.
Alors pourquoi, cependant, n'est-il pas nécessaire?
Il n'y a donc pas de printf.
En effet.
Tout ce que nous faisons dans ce programme sont les mathématiques.
Pour que je puisse le supprimer.
Donc, vous n'avez pas toujours besoin d'inclure quoi que ce soit
le début d'un programme.
>> Donc, nous allons simplifier un peu ceci.
Et remarquez maintenant ce que ce programme fait.
Pas beaucoup d'intérêt.
int x = 1.
Eh bien, ce qui est ce que ça fait?
Eh bien, pensez à le modèle mental d'avant.
Le côté gauche de cette expression fait quoi?
Créer un espace pour un entier.
Alors, combien d'espace?
Eh bien, nous connaissez maintenant qu'il est 32 bits.
Auparavant, une chaîne de 32 bits était techniquement, mais plus
à ce sujet dans l'avenir.
Mais un int est de 32 bits.
Donc, cette expression à gauche ici, int x juste dit hey
système d'exploitation, donne-moi 32 bits de RAM -
autrement connu comme 4 octets de RAM -
de sorte que je peux mettre un entier dans cet espace.
Que entier vouliez-vous dire?
Eh bien, le numéro 1.
int y obtient 2, fait exactement la même chose, même si le
nombre est plus grand, en termes de grandeur.
Le nombre lui-même est encore seulement 32 bits.
C'est juste le motif de bits est différente de
représentent 1 contre 2.
int z dit maintenant me donner un autre 32 bits, appelez-z, et mettre le
somme de 1 et 2 à l'intérieur.
De sorte que maintenant z est probablement stocker la valeur 3,
et elle renvoie 0.
>> Maintenant ce programme, faut-il faire quelque chose d'intéressant?
Ainsi, il ne fait pas quelque chose d'intéressant, en tout
sens, parce que pourquoi? C'est faire peu de maths.
Mais ce n'est pas de retourner la réponse, c'est vrai.
Il est de retour 0.
Ce n'est pas l'impression de la réponse.
Alors ce programme est fondamentalement inutile, car il
actuelle.
C'est faire peu de travail.
Ça va prendre un certain nombre de secondes ou microsecondes, à
courir, mais il n'est pas en train de faire quoi que ce soit
utile pour l'humain.
>> Donc, nous allons maintenant ouvrir effectivement math2, où maintenant je suis en fait
l'impression du résultat.
Donc, cela aussi peut être déduit de nos exemples précédents.
Si je veux faire un peu de mathématiques simples, int x = 1, y
= 2. z est 1 plus 2 maintenant.
Que cela va-t imprimer évidemment?
Juste 3.
Ainsi, la santé mentale vérification rapide.
Permettez-moi de passer dans ce répertoire.
Donc cd source1m.
Laissez-moi aller de l'avant et de taper make math2.
Aucun message d'erreur est sorti, alors laissez-moi courir -
pas a.out, laissez-moi courir math2. Entrée.
Et en effet, il imprimé 3.
Eh bien nous allons jeter un oeil à une variante de cette.
En math3.c, nous avons maintenant cet exemple ici.
>> Alors celui-là est assez intéressant.
Ainsi, dans celui-là, la réponse va obtenir 1 divisé par 10,
et remarquez que j'ai déclaré comme un flotteur.
Pourquoi dois-je veux que ce soit un flotteur?
Eh bien, c'est une fraction.
Il va y avoir un nombre réel.
Donc, ça va être de 0,1, je l'espère - 10%, dans ce cas.
Et qu'est-ce que je puis souhaitez imprimer?
Eh bien, cette réponse.
Eh bien, nous allons taquiner ces dehors d'abord.
Ainsi, sur le côté gauche, déclarer une
flotter, appelez-le répondre.
Sur le côté droit, ne 1 divisé par 10 et le mettre
répondre à l'intérieur de la variable.
Or, cette ligne ressemble un peu plus cryptique.
Mais remarquez certains traits familiers. % Signifie ici est un
espace réservé.
f signifie ici est une valeur à virgule flottante, juste un réel
nombre, quelque chose avec un point décimal.
0,2 signifie quoi?
Quelqu'un sait d'expérience antérieure?
Deux décimales.
Donc, nous n'avons pas vu cela avant, mais c'est juste une façon de
l'exercice d'un peu plus de contrôle sur printf et
dicton ne me donnez pas 30 points après la virgule,
au lieu de me donner seulement 2.
>> Et puis nous allons aller de l'avant et de lancer ça.
Donc, assurez-maths 3, et maintenant laissez-moi courir mathématiques 3 et Entrée.
Et ce n'est pas juste.
Il semble que nous avons rencontré notre premier bug authentique.
Eh bien, peut-être que je n'ai tout simplement pas regarder d'assez près.
Alors laissez-moi monter ici, et laissez-moi mettre 20 décimal
endroits point là.
Et permettez-moi de compiler cela, assurez-math3, exécutez.
Sûr que 1 divisé par 10 n'est pas 0.
Alors qu'est-ce qui se passe?
Bon d'accord, donc en fait il n'a pas à voir avec cela.
C'est une bonne idée.
C'est vraiment juste une coïncidence
que nous faisons cela.
Mais juste pour prouver que ce n'est pas ça, je vais
retourner quelque chose au hasard.
Ne faites pas ça à la maison, parce que c'est tout simplement faux.
Mais assurez-math3, permettez-moi de le faire fonctionner.
N'a donc rien à voir avec ce que je suis de retour, il suffit de faire
avec ce que je suis d'impression.
Mais je l'ai entendu ici-bas.
Quoi?
PUBLIC: Nous avons donc besoin d'écrire les nombres dans
la division comme -
>> DAVID MALAN: Ok bon.
Nous avons donc besoin d'écrire du nombre de participants dans la
division ici en virgule flottante se valorise.
Donc le problème est ici comme précédemment: C, comme avec beaucoup de
langues, de types de données différents.
Et ces types de données, par exemple, sont-elles ici.
Et les types de données en question ici, quand je tape 1, puis-je
type 10, sont probablement ce que les types de données?
Donc c'est probablement un int, pas vrai?
Ce n'est certainement pas un flotteur parce qu'il n'y a aucune décimale
point ou quelque chose comme ça.
Alors, vraiment, j'ai un int divisé par un entier.
>> Donc, la chose intéressante à propos des mathématiques et un ordinateur est
si vous faites division en utilisant des nombres entiers -
1 divisé par 10, est oui 0,1.
Toutefois, lorsque vous êtes en divisant un entier par un entier, le
réponse doit également être un entier juste parce que, pour l'instant.
Et quelle est la conséquence alors?
Eh bien, si la réponse est 1 divisé par 10 est égal à 0,1, ce qui
l'ordinateur va faire, c'est que je n'ai aucune idée de comment
représentent 0,1, parce que c'est une valeur à virgule flottante, et non une
entier, ça va couper tout ce qui suit le
point décimal et juste vous montrer le 0 au début.
Et le fait que c'est l'impression en virgule flottante
valeur, c'est juste une chose esthétique.
C'est parce que je suis obliger l'ordinateur pour imprimer cela comme un
valeur du point flottant.
Et en effet, je l'ai déclaré comme un flotteur, mais le calcul est
passe par ici.
>> Permettez-moi de corriger ce fait d'une manière assez facile.
Pourquoi ne pas simplement faire 10,0 et 1,0, même si
techniquement je pourrais sortir avec juste faire un.
Maintenant, laissez-moi aller de l'avant et de faire math3.
Permettez-moi aller de l'avant et de maintenant exécuter math3, Entrée.
Et maintenant, oh boy.
Maintenant, nous avons un problème tout à fait nouveau.
Il vaudrait donc mieux, à droite, nous sommes plus proche de 0,1, mais ce qui est clairement
ne va pas ici?
À moins que nous avons menti à vous pendant des années, non?
1 divisé par 10 est en fait pas tout à fait 0,1, alors c'est quoi
passe vraiment ici?
Eh bien vous pouvez sorte de raison dans cette logique.
Si un ordinateur ne dispose que d'une quantité limitée de RAM pour commencer
avec, et même un ordinateur utilise seulement 32 bits pour une
flotter valeur du point, il va de soi que, avec un
nombre fini de bits, 32 dans ce cas, oui, vous pouvez
représentent beaucoup de choses.
Il est en fait quatre milliards de valeurs différentes peuvent être
représentés avec 32 bits, 2 au 32, mais c'est encore finie.
Donc, le problème est qu'il ya un nombre infini de réel
chiffres, à droite.
Si vous me donnez un nombre réel, je peux toujours trouver vous un
un peu plus grand, un peu moins, simplement en ajustant le
chiffres qui sont après la virgule.
Donc, si vous n'avez pas un nombre infini de bits, vous
ne peut probablement représenter un infini
nombre de nombres réels.
>> Il ya donc cette imprécision inhérente à l'informatique, et
ceci obtient trébucher tout le temps, même dans le plus simple des
programmes de ce genre.
Mais aussi dans certains problèmes mondiaux réels ainsi.
En effet, prenons un moment pour juste jeter un oeil à
quelque chose qui s'est réellement passé dans la réalité.
Nous allons regarder juste les deux premières minutes, puis
nous publierons en ligne lien.
Mais cela est un témoignage de tout ce qui peut aller mal, tout à fait
honnêtement, d'une manière très tragique quand ces choses ne sont pas
apprécié ou seulement nous, les humains font des erreurs quand il s'agit de
ces sortes de détails de mise en oeuvre des ordinateurs modernes.
>> [JEU VIDEO]
-Nous allons maintenant revenir à des catastrophes d'ingénierie sur Modern Marvels.
Ordinateurs.
Nous avons tous appris à accepter les problèmes souvent frustrantes
qui vont avec eux.
Bugs, virus, logiciels et défauts sont à petits prix
payer pour la commodité.
Mais dans le domaine militaire à grande vitesse et de haute technologie et de l'espace
programmer des applications, le plus petit problème peut être
amplifié en cas de catastrophe.
Le 4 Juin 1996, les scientifiques se prépare à lancer un drone
Fusée Ariane 5.
Il portait satellites scientifiques destinés à
établir avec précision comment le champ magnétique de la terre
interagit avec les vents solaires.
La fusée a été construit pour l'Agence spatiale européenne et
a décollé de son usine sur la côte de la Guyane française.
>> -À environ environ 37 secondes après le vol, ils ont d'abord
quelque chose n'allait pas remarqué, que les buses sont
pivoter d'une manière qu'ils ne devriez vraiment pas.
Environ 40 secondes après le vol du véhicule, il est évident
était en difficulté, et c'est là qu'ils ont pris la décision de
le détruire.
Un agent de sécurité large avec les tripes énormes appuyé sur la
bouton, fait exploser la fusée avant qu'elle puisse devenir un
danger pour la sécurité publique.
>> -Ce fut le voyage inaugural d'Ariane 5, et son
destruction a eu lieu en raison d'un défaut intégrée dans le
fusée logiciel.
>> -Le problème sur le lanceur Ariane était qu'il y avait un certain nombre qui
nécessite 64 bits pour exprimer et ils voulaient le convertir
pour un nombre de 16 bits.
Ils ont supposé que le nombre n'a jamais été
va être très grand,
que la plupart de ces chiffres dans le numéro 64 bits sont 0.
Ils ont eu tort.
>> -Le incapacité d'un logiciel d'accepter le
type de numéro généré par un autre est à l'origine de
l'échec.
Le développement de logiciels est devenu une partie très coûteux de
nouvelle technologie.
La fusée Ariane 4 avait été très fructueuse.
Ainsi, la plupart des logiciels créés pour elle a également été utilisée
dans le lanceur Ariane 5.
>> -Le problème fondamental est que le lanceur Ariane 5 a été plus rapide,
accéléré plus rapidement.
Et le logiciel n'avait pas prévu cela.
>> -La destruction de la fusée était un grand financier
en cas de catastrophe, tous dus à une erreur de logiciel minute.
Mais ce n'était pas la première fois que des problèmes de conversion de données a eu
en proie à la technologie moderne des fusées.
>> DAVID MALAN: Nous allons en rester là.
Mais cela témoigne de combien applicable même quelques-uns des
ces détails plus bas niveau que nous avons commencé à
explorer aujourd'hui.
Donc, même si vous êtes un peu distrait peut-être par quelques-uns des
la syntaxe et arcanisme ici, se rendre compte que plus de la
terme, nous allons se concentrer seulement sur la façon dont cela est applicable à
bien au-delà des mondes CS.
Nous vous voir mercredi.