[Powered by Google Translate] ZAMYLA CHAN: Très bien, tout le monde.
Bienvenue sur Procédure pas à pas 1.
Ce sera Procédure pas à pas sur pset 1, qui est C. J'espère que vous
tous se sont amusés avec vos projets Scratch.
Alors maintenant, dans cette procédure pas à pas, nous allons en fait être
capable de pénétrer dans C, entrer dans l'écriture de code machine.
Donc, si vous n'étiez pas à Procédure pas à pas 0, alors ces
- nous sommes des soluces vraiment aller à pied à travers la
ensemble de problèmes, parlez-en à travers quelques conseils et techniques communs
que vous pouvez utiliser.
Nous allons faire une pause l'affectation des piqûres en gérables, de sorte que
vous avez peut commencer et nous espérons
comprendre comment le faire.
>> D'accord.
Donc pset 1.
Le psets cette année aura une structure où le premier -
il va y avoir une section de questions, une série de
questions qui seront vraiment aussi vous aider à démarrer avec
le pset, vous aider à pratiquer certaines techniques dont vous avez besoin.
Et donc ces questions, je ne vais pas à couvrir dans le
procédure pas à pas, car dans votre article, votre enseignant affecté
compatriotes qui se passe réellement à marcher à travers les
questions avec vous.
A la fin de votre article, vous repartez avec le
réponses à ces questions, mais aussi avec la confiance que
vous pouvez mettre en œuvre certaines des fonctionnalités dont vous aurez besoin
pour les dernières parties du pset.
>> Pset 1 constitue Mario.
Et c'est un programme peu de plaisir, où nous avons essentiellement
écrire et imprimer une moitié dans la pyramide scène typique Mario.
Et puis la deuxième partie de la pset est appelée Greedy.
Et si nous en Greedy agissent essentiellement comme un gourmand
caissier, où, si quelqu'un nous donne une somme d'argent
que nous voulons, nous calculons le montant minimum de pièces de monnaie que
nous pouvons revenir à eux pour leur donner encore ce montant.
>> Très bien.
Ainsi, chaque procédure pas à pas aura une boîte à outils.
Et encore une fois, vous ne pourriez pas utiliser tous les outils dans ce
boîte à outils ou vous pouvez utiliser chacun d'entre eux.
En tout cas, c'est vraiment bon de savoir ce
vous êtes équipé.
Nous avons donc l'appareil CS50, que je vais vous montrer les gars et
vous présenter à cela.
Puis aussi, en général, un bon style est certainement l'un de nos
outils les plus importants.
Style de porte essentiellement sur la façon lisible est votre code?
Quand quelqu'un d'autre va et lit votre code, ont-ils
un temps facile?
Peuvent-ils le comprendre?
Est-il élégant?
Ensuite, nous allons parler de la façon d'obtenir les commentaires d'utilisateur valide dans votre
programme en raison à la fois Mario et gourmande, vous aurez besoin d'
demander à l'utilisateur d'entrer et de vous donner une sorte de numéro.
Alors que nous voulons faire en sorte que le numéro est valide.
Alors souvenez-vous de Scratch, nous avons eu des blocs tels que répétition,
Répéter jusqu'à, ou attendre, ou Forever.
Donc, nous allons type de traduire cela en maintenant et C
regarder des boucles comme for, while et do-while.
Puis, aussi nous devons aussi afficher les valeurs de retour sur le
écran, que ce soit dans Mario ou dans Greedy.
Et donc nous allons parler de la façon dont nous imprimer des choses à partir de chaînes de
nombres entiers et décimaux.
Et puis enfin, nous allons parler de pseudo-code, un très
concept important de se rappeler tout au long de ce cours.
Ce que je trouve m'aide avec la plupart des ensembles de problèmes, c'est de penser et de
décrire ce que je veux faire avant de penser à toute C.
Mais juste décrire l'action.
Donc, est une sorte de pseudo-code entre Français et C, le type de
décrivant les processus sans la syntaxe correcte mais
fournir une structure assez bon.
Et donc je vais avoir quelques exemples de pseudo-code pour vous aussi
dans cette procédure.
>> D'accord.
Donc, ce que nous allons travailler avec le CS50 Appliance.
Il s'agit essentiellement d'une machine virtuelle qui exécute une sorte de
ordinateur à l'intérieur de votre propre ordinateur.
Et cela a beaucoup d'avantages.
La première est que c'est préréglées avec un grand nombre des outils que vous
besoin pour CS50.
De plus, cela signifie que tout le monde est sur le même terrain,
qu'il s'agisse de Mac ou d'un PC ou d'un autre système d'exploitation.
Nous pouvons tous faire fonctionner la machine virtuelle.
Et si il ya des instructions à manual.cs50.net/appliance.
Et donc si vous allez sur ce lien et suivez les instructions,
alors j'espère que vous serez en mesure d'installer l'appareil.
>> Alors d'abord, vous aurez besoin d'installer une application, une
demande réelle pour être en mesure d'exécuter la machine virtuelle.
Et puis vous téléchargez l'appareil.
Mais encore une fois, il ya des instructions à
manual.cs50.net/appliance.
Donc, j'ai déjà téléchargé mon appareil, et j'ai installé
il dans VMware Fusion.
Et donc une fois que j'ai téléchargé l'appareil, je suis allé dans un fichier.
Je suis allé sur Ouvrir, puis trouvé où je
stockées Appliance CS50.
Et à partir de là, je l'ai couru ici.
Mais je l'ai déjà en place ici, nous allons donc regarder de plus près.
>> Très bien.
Alors maintenant, nous sommes à l'intérieur CS50 Appliance.
Je l'ai fait plein écran.
Vous pouvez choisir de le faire si vous le souhaitez ou tout simplement comme un
petite fenêtre sur votre bureau.
Ici, nous avons juste un bureau simple avec
une maison et une poubelle.
Mais si vous allez à Menu, puis à la programmation, alors vous voyez
que nous avons quelque chose appelé Terminal.
Et donc ici, nous pouvons naviguer sur notre ordinateur.
Nous pouvons écrire du code.
Mais en fait, nous allons utiliser un programme appelé gedit, ou «g
modifier ", celui qui est.
Nous allons donc utiliser que l'une d'écrire du code.
Donc vous avez ces deux outils que vous allez utiliser principalement
d'écrire du code.
Puis en plus, c'est comme un ordinateur ordinaire.
Nous disposons d'un navigateur.
Nous avons choisi Google Chrome.
Ce que j'ai fait est que j'ai mis en place un Dropbox pour contenir tous
les documents.
Et donc c'est quelque chose qui est fortement encouragée.
Dropbox utilise nuage de synchronisation et donc si -
ainsi par exemple, quelque chose par hasard - espérons que non -
qui arrive à votre appareil, puis tout sera
synchronisé sur le nuage.
>> Très bien.
Donc, ce sont les applications que vous allez utiliser dans le
CS50 Appliance.
Maintenant, pour naviguer autour de la ligne de commande.
Le terminal peut effectivement agir comme une sorte de moyen de réellement
taper des commandes en -
aimez, si vous êtes un Mac, un Finder.
Ou si vous êtes sous Windows, je crois que c'est "explorer mon
ordinateur "ou quelque chose comme ça.
Donc, si nous revenons à l'appareil, nous allons ouvrir un
fenêtre de terminal.
Ainsi, il a cette invite, jharvard @ appareil.
Disons simplement que cette plus grande.
D'accord.
Donc, si on tape la commande ls, alors que la liste de tous les
fichiers de notre ordinateur, dans notre répertoire courant.
Les répertoires sont juste comme des dossiers.
Nous utilisons ces termes de façon interchangeable.
D'accord, donc nous avons listé les fichiers
qui sont dans ce répertoire.
Maintenant, si nous voulons accéder à, disons, notre Dropbox, alors nous pouvons
changer de répertoire.
Donc cd puis Dropbox.
Nous ls nouveau, et puis on voit la liste des fichiers qui se trouvent dans
ce dossier.
Ceci est analogue à moi allons chez moi, puis en cliquant sur
Dropbox, et puis voir la liste ici.
>> Très bien.
Donc, disons -
quand vous les gars vont faire de votre pset 1, nous allons faire une
répertoire appelé pset1.
Nous sommes donc dans Dropbox en ce moment, comme vous pouvez le voir sur cette
invite ici.
Donc, nous allons créer un répertoire.
Donc, mkdir, appelons-le pset1.
Et maintenant si nous ls nouveau, alors nous
voir que pset1 apparaît.
Et donc, si nous voulons aller à l'intérieur pset1, alors nous pouvons aller à l'intérieur
ce dossier avec la commande cd.
Très bien.
Encore une fois, nous allons voir si nous -
dire, faisons-le d'une autre manière.
Ceci est analogue à simplement dire «Créer
un nouveau dossier, pset1.
Mais comme vous le trouvez, vous serez en interaction avec
la borne beaucoup.
Alors parfois, il est beaucoup plus facile, plus rapide à une perte de juste
travailler dans la borne à faire ce genre de choses.
D'accord.
Et puis ces autres commandes.
Il ya un rm pour supprimer un fichier.
Donc, il vous suffit de taper rm, puis le nom de la
déposer le supprimer.
Nous allons passer à quelques exemples de cela plus tard.
Et puis, nous avons ce qu'on appelle la commande man, qui
fait apparaître un pilote pour un type de fonction.
Encore une fois, je vais donner un exemple réel de cela plus tard.
>> Donc, un autre outil très important, comme je l'ai mentionné brièvement
avant, c'est le style.
Donc, essentiellement, le style a à voir avec la lisibilité.
Est-ce que quelqu'un d'autre pourra lire, à suivre et
comprendre votre code?
Ceci est particulièrement important pour vous, vous-même, en fait.
Si vous restez jusqu'à la fin de codage, puis plus tard vous
revenir en arrière et vous êtes comme, qu'est-ce que cela signifie variable?
Dites, vous travaillez sur un projet de groupe avec quelqu'un, et vous
à la fois de regarder de l'autre code.
Il est vraiment important que vous nommer vos variables correctement
et lui donner l'air sympa car cela fait toute la différence.
Mais par-dessus tout, nous sommes dans un cours en ce moment.
Donc, pour l'intérêt de la CS50 et surtout pour votre
boursiers d'enseignement et niveleuses qui chercheront à votre
psets, s'il vous plaît, s'il vous plaît utiliser le style correct.
Et vos compagnons d'enseignement seront très heureux.
Encore une fois, le style consiste à indenter les choses correctement,
en particulier en utilisant vos accolades et l'indentation ceux-ci.
Nommer les variables quelque chose qui a du sens.
À l'heure actuelle, nous suivons la convention lorsque vous avez
plusieurs mots dans le nom de votre variable, alors vous
les relier par un trait de soulignement, comme vous le voyez dans ce
nommer par exemple là-bas.
>> Puis, finalement, quelque chose qui s'appelle nombres magiques.
Essentiellement, quand vous lisez dans le code et de dire
vous avez une variable -
par exemple, vous n'avez pas une variable mais juste dire ok, jusqu'à ce
et est de moins de 10.
Ensuite, votre niveleuse va aller bien, attendez,
d'où vient que 10 vient-il?
Alors, vraiment expliquer vous-même importe beaucoup.
Pour vous aider à vous expliquer, c'est de commentaires.
Les commentaires ne sont probablement la chose la plus importante à inclure dans
vos programmes.
Et il vous aide non seulement expliquer réellement -
il vous aide genre d'expliquer votre raisonnement
vous allez le long.
Et si vous faites cela, encore une fois, ça va être beaucoup plus facile
de retourner dans votre code et le type de comprendre ce que vous êtes
faisait là.
Encore une fois, les élèves de vraiment observations.
Donc, pensez-vous bien et -
un peu comme des points gratuits.
Et qui n'aime pas les points gratuits?
Vous pouvez aussi avoir plusieurs lignes de commentaires.
Et donc j'ai inclus une sorte de modèle ici.
Essentiellement, le plus souvent ceux-ci sont utilisés dans la partie supérieure de votre
programme pour expliquer sorte de façon générale, ce
votre problème posé fait.
Indiquez votre nom, la date, etc.
Et si, comme je le disais dans ce commentaire multi-ligne,
manual.cs50.net/style_guide a d'autres conseils et les règles relatives
style de boucles, etc.
>> D'accord.
Alors, maintenant que je vous ai dit un peu plus sur le style, nous allons voir
cette action en.
Très bien.
Donc, ici, Tommy a écrit pour nous une délicieuse horreur
exemple de style dans un programme.
Donc, vous voyez ici, d'accord.
C'est en fait très bien.
Vous voyez le commentaire multi-ligne ici.
Vous pouvez le démarrer par une barre oblique, puis deux astérisques.
Vous continuez le long, en alignant les astérisques long de la ligne
puis terminer par un astérisque et une barre oblique.
Très bien.
Donc, c'est très bien.
Cette voici bien.
Il est notamment ses bibliothèques.
Mais ici, il a des commentaires sur plusieurs lignes.
Il ya beaucoup de choses fausses à ce sujet.
Commentaires sur plusieurs lignes, ici il utilise
la syntaxe pour les commentaires en ligne simplement unique.
Il a aussi mêlant tout dans le même commentaire.
Donc, nous voulons éviter cela.
Ensuite, nous voyons ici que ces accolades, par exemple, sont tous
sur la place.
L'indentation est erroné.
Il n'a pas vraiment vous montrer quelque chose de définitivement où
départs et une autre chose se termine.
Puis aussi, nous voyons qu'il a une variable définie i = 5 ici.
Mais alors, ce quatre sort de nulle part, et il n'y a pas de
d'observation à vraiment expliquer d'où ça vient.
>> D'accord.
Alors maintenant, regardons quelque chose qui est en fait exactement la même chose
code, sauf avec un meilleur style.
Encore une fois, c'est l'exemple bon style,
l'exemple de plusieurs lignes.
Et puis ici, c'est tout à fait propre.
On voit qu'il commence une instruction if ici, entre dans une nouvelle
ligne, a une accolade ouvrante.
Puis il présente une échancrure.
Il garde cette empreinte -
il garde cette indication uniforme sur l'ensemble
programme et montre vraiment quand un bloc de code commence, quand
un bloc de code se termine.
Cela peut sembler un peu pinailler sur notre part de commencer à
avec, mais vous verrez que vous écrivez votre code.
Il est très utile d'être en mesure de séparer cela.
Et encore une fois, vos élèves aiment vraiment ça.
Et ainsi vous voyez, au lieu de simplement mettre un certain nombre de
là, il a effectivement appelé les itérations variables.
Et si nous ne sommes pas actuellement à la recherche de ce code en ce moment
mais juste un peu de voir un exemple de
un style bien contre le mal.
Et si vous les regardez à côté ici, vous le feriez
certainement préfèrent lire celui sur la droite.
>> Très bien.
Alors une dernière chose avant que nous plonger dans la vraie viande de l'
pset est de savoir comment compiler et exécuter votre code.
Et si essentiellement lorsque vous écrivez C, qui n'est en fait pas
traduit en code machine réelle, les zéros et
ceux que la machine peut effectivement lire et interpréter.
Donc, nous avons quelque chose -
Clang est un compilateur que nous utilisons pour C.
Il existe de nombreux compilateurs.
Mais en CS50, nous allons utiliser Clang.
Et si Clang se traduit essentiellement de C à la machine
code pour vous.
Alors penchons-nous sur un exemple - plongez dans l'appareil ici.
Très bien.
Alors maintenant que nous sommes dans notre répertoire personnel.
En fait, nous ne sommes pas où tout code.
Donc, nous allons changer notre annuaire de Dropbox/walkthrough1, où
J'ai un peu de code stocké.
Donc, si nous appuyer sur ls, alors nous voyons que j'ai une
quelques fichiers ici.
>> Très bien.
Donc je l'ai déjà écrit hello.c, nous allons donc le compiler
et puis voir ce qu'il fait.
Ainsi, une commande de compilation de base serait alors clang hello.c,
dit essentiellement d'accord, compiler hello.c pour moi.
Je clique sur Enter, semble avoir été bonne.
Cliquons ls nouveau.
Ce fichier a.out a maintenant montré.
Et si a.out est un fichier exécutable.
Donc, pour l'exécuter, vous faites un. / A.out.
Et ainsi, nous voyons que ce programme hello.c apparemment
imprime hello cinq fois.
Très bien.
Mais disons que nous ne voulons pas utiliser le nom a.out.
Par exemple, nous voulons exécuter le programme bonjour parce que
il est plus facile à comprendre.
Donc, disons que hello.c clang, et alors essentiellement vous avez besoin
de passer dans des éléments appelés drapeaux.
Ainsi disant, d'accord, je veux bien de nommer ce quelque chose d'autre.
Vous pouvez également passer dans un grand nombre de drapeaux différents,
que vous verrez.
Ainsi, le drapeau pour nommer quelque chose du programme que vous
veulent, c'est-o.
Après-o, vous écrivez le nom du programme.
Disons simplement l'appeler bonjour.
>> Alors maintenant, nous voyons que nous avons en fait d'un fichier exécutable bonjour.
Ainsi, nous pouvons l'exécuter, et il fait la même chose que précédemment.
Alors, maintenant que nous avons bonjour, nous pouvons également supprimer, pour
Par exemple, notre a.out.
Donc rm pour supprimer, a.out, votre terminal vous invite, demandez
pour vous permettre de confirmer si vous voulez vraiment
supprimez-le ou non.
Nous disons y pour oui.
Et voilà.
A.out a disparu.
Très bien.
Mais parfois, il devient confus de se rappeler tous les
drapeaux que nous avons besoin d'inclure et de taper bruit.
Et comme nous le voyons lorsque nous utilisons des programmes plus complexes, nous allons
être, y compris les différentes bibliothèques.
Et si nos commandes à Clang obtiendrez plus en plus longtemps.
Ainsi inclus dans l'appliance CS50 est la commande make.
Donc, il vous suffit de taper make bonjour.
Oops.
Nous avons déjà fait ce fichier exécutable.
Alors laissez-moi juste l'enlever rapidement.
Maintenant, nous allons taper make bonjour.
Et vous voyez dans cette ligne là que dit essentiellement faire
bonjour implique l'ensemble de ces commandes
y entrer pour vous.
>> Ainsi inclus dans l'appliance CS50 est le fichier make.
Donc, tout simplement quand vous avez un name.c fichier, puis tout ce que vous faites
est dire rendre le nom du fichier.
Et puis vous aurez un exécutable
déposer auprès de ce nom.
Oui?
>> INTERLOCUTEUR 1: Pour mon ordinateur, au lieu de Clang il est dit GCC.
Est-ce comme -
ZAMYLA CHAN: Ouais.
Ainsi, votre ordinateur pourrait-on dire GCC plutôt que Clang parce
GCC est un autre type de compilateur.
Si vous êtes dans l'appareil CS50 bien, alors il
devraient utiliser Clang.
Si ce n'est pas le cas, alors peut-être venir me parler par la suite ou poster
Discutez sur CS50 et nous pouvons démêler tout cela.
>> Très bien.
Alors, maintenant que nous avons notre genre d'outils de base vers le bas, puis nous
peut plonger dans Mario.
D'accord.
Ainsi, Mario est un programme où l'essentiel, nous allons être
faire de notre propre genre de version primitive du Mario
fond gibier.
Vous savez, Mario a généralement un tuyau et d'un
arbre et des blocs.
Et puis il ya une sorte de pyramide moitié.
Donc, nous allons juste mettre l'accent sur cette pyramide moitié,
rendre le code tel qu'il imprime hachages pour le genre
de blocs dans ce format.
Alors qu'est-ce qui va se passer est que l'utilisateur va saisir un certain
hauteur de la pyramide, et puis vous allez imprimer que sur
de telle sorte que la partie inférieure gauche de hachage -
donc tout en bas à droite ici - que l'on va aligner
avec le coin inférieur gauche de votre terminal.
D'accord.
>> Donc la première chose que vous avez besoin -
le premier petit problème mini qui nous devons relever est de savoir comment
Pour obtenir le mode d'entrée.
Nous devons donc avoir affaire à ce que l'utilisateur saisit, puis
genre de choses là-bas de sortie.
Alors regardons chercher un fichier appelé apples.c que j'ai écrit
qui traite des entrées et des sorties.
D'accord.
Donc, ici en haut, j'ai inclus certaines des bibliothèques
dont j'ai besoin.
L'on vraiment important ici est stdio (E / S standard). Qui traite
avec des entrées et de sorties standard parce que nous allons
avoir affaire à des entrées utilisateur.
Très bien.
Alors je commence ma fonction principale.
Et puis je demander à l'utilisateur d'accord, combien de pommes avez-vous?
Puis à droite ici, ce que cette ligne fait -
Je assigner la variable i à la valeur de getInt.
>> Donc getInt est une fonction qui est inclus dans stdio.
Et si essentiellement, qui va s'en occuper pour vous.
Il invite l'utilisateur pour un int.
Quelle que soit leur retour, qui sera affecté à la
i la variable.
Et alors c'est juste un petit programme qui diminue la
valeur de i de 1, puis imprime la nouvelle valeur.
Une bonne chose à propos gedit est en fait qu'il ya un mini-
droit de terminal ici.
Ainsi, au lieu d'avoir à passer d'avant en arrière entre
gedit et le terminal, vous pouvez réellement
il suffit de lancer d'ici.
Donc, nous allons d'abord entrer dans le bon répertoire.
Donc, nous allons changer nos répertoires
Dropbox/walkthrough1.
Très bien.
Alors maintenant, nous allons faire les pommes, les compile pour nous.
Et si maintenant nous allons lancer des pommes.
Combien en avons-nous?
Je dis que j'ai 3.
Et il dit: «mwahaha je vais manger un d'entre eux», et affirme
"Vous avez maintenant 2 pommes".
>> Très bien.
Alors lançons encore une fois.
Et disons que j'ai 1 pomme.
Maintenant J'ai 0 pommes.
D'accord.
Ainsi, ce programme semble fonctionner comme prévu.
Nous entrée un numéro, il diminue de 1, puis
elle imprime à nouveau.
Mais que faire si, par exemple, j'ai -1 pommes?
Cela ne veut pas tout à fait sensé.
Mais il est encore un entier, de sorte que le programme l'accepte.
Et il vous renvoie un nombre encore plus négative.
Donc, c'est une leçon pour nous que même si le getInt
la fonction et les autres associés tels que
GetFloat ou GetString -
même si ceux ne nous mènera le bon type de données, par
Par exemple, si je venais de dire [TAPER],
alors il me disait de réessayer.
Donc, ce sera face à tout type de données de votre entrée
n'est pas réellement vérifier, eh bien, est-ce un type de
valeur que je veux?
Alors qu'une partie de Mario est que l'utilisateur doit entrer un
nombre qui représente la hauteur de la pyramide moitié
que vous faites.
Et alors si nous invite cet utilisateur pour la hauteur, puis
il devrait y avoir deux bonds à ce sujet.
Pas vrai?
Dans la spécification, il dit qu'il ne devrait pas être plus de 23
personnages parce que c'est un peu de la norme
hauteur de la borne.
Mais alors, qu'est-ce autre lié, peut-être une limite inférieure pourrait
nous voulons inclure?
>> Si nous sommes réellement dessiner une pyramide, un peu en repensant
à la hauteur d'une pyramide peut être, peut-il jamais être inférieur à un
certain nombre?
SPEAKER 2: Plus grand que trois.
ZAMYLA CHAN: Hmm?
SPEAKER 2: Plus grand que trois.
ZAMYLA CHAN: C'est un bon point.
Il pourrait être -
nous pourrions vouloir le contraindre à seulement trois pyramide niveau.
Mais pensons -
disons comme une table de hachage on compte comme une pyramide trop.
Ensuite, quelle devrait être notre véritable borne inférieure possible?
En repensant aux pommes, nous ne voulons pas d'un
pyramide hauteur négative.
Pas vrai?
D'accord.
Ainsi, lorsque vous demandez la saisie de l'utilisateur, alors vous aurez à
inclure un moyen de faire en sorte que l'entier
ils vous fournir n'est pas négatif, car vous ne pouvez pas
dessiner une pyramide négatif.
>> D'accord.
Donc, il ya deux manières de le faire.
Essentiellement, une fois que vous demander à l'utilisateur, vous souhaitez demander
qu'ils vous fournir la bonne entrée.
Donc, vous voulez demander que l'on vous donnera un numéro de
qui n'est pas négatif, mais aussi moins de 24.
Donc, nous avons affaire à zéro à 23, inclusivement.
Très bien.
Donc, nous voulons continuellement demander -
s'ils ne nous ont donné un entier valide, ils veulent
permanence demandent pas.
Donne-moi une entrée valide.
Donne-moi une hauteur valide.
Alors souviens qu'en Scratch, nous avons eu l'Repeat Until bloc ou
Forever Si le bloc.
Ce sont des boucles qui sont très semblables à la boucle while et
la boucle Do While, où nous allons entrer dans juste une seconde.
Ainsi, la boucle while a essentiellement une condition que vous vérifiez
c'est une valeur booléenne que vous avez mis là-dedans, comme le
blocs de Scratch avec les angles.
C'est ce qui se passe à l'intérieur des crochets de la boucle while.
Donc, vous devrez avoir une certaine sorte de condition là-bas.
Et comme nous venons de parler plus haut, cette condition sera
ont à voir avec les limites de l'entier qui a été entré.
Ainsi, la condition aurait quelque chose à voir avec le fait
le nombre entier est dans les limites appropriées.
>> C'est donc une boucle while.
Par exemple, vous pouvez demander de l'entier puis
vérifier en permanence si cette entrée n'est pas valide.
Par exemple, continuer à ré-invite, continuer à demander
l'utilisateur pour un nombre entier.
Il pourrait donc être un moyen.
Une autre façon pourrait être une boucle Do While, ce qui est très
semblable à une boucle while, sauf que faire pendant un fait est -
vous pouvez voir par genre de la syntaxe -
c'est qu'il a la faire et ensuite le corps de la boucle réelle première.
Ensuite, il a tout les conditions.
Alors qu'est-ce alors que les boucles -
ce qu'ils sont utiles, c'est qu'ils ont effectivement exécuter le
Code au moins une fois, puis vérifier si la condition est
atteints ou non.
Donc, si vous aviez à faire une boucle Do While, puis à l'intérieur de votre
déclaration, vous pouvez demander un entier, car vous aurez à
ont le moins à demander à l'utilisateur une fois.
Et puis après vous les demandera, alors vous pouvez dire ok,
et une fois que j'ai fait cela, est-il valide?
Si c'est le cas, alors vous pouvez juste continuer à avancer.
Mais si ce n'est pas le cas, alors il vous reste plus qu'à agir comme un régulier tout
boucle, puis continuer à poser.
>> D'accord.
Donc, nous sommes de retour à Mario.
Nous savons donc comment inviter pour l'entrée d'utilisateur correct c'est
dans les limites adéquates.
Alors maintenant, nous avons vraiment besoin de tirer cette pyramide moitié.
Il ressemble simples caractères de texte.
Donc, nous allons effectivement ouvert -
nous allons simplement ouvrir une fenêtre et dire ok, bien que si je devais
passe réellement à le faire manuellement, tapez un moi-même?
D'accord.
Alors voyons voir.
Disons, par exemple, nous voulons faire une pyramide qui est
alignées le long du côté gauche, puis se contentait de faire -
dans Mario, le plus haut niveau dispose de deux blocs au lieu d'un seul.
Nous commençons donc par deux.
Nous appuyez sur Entrée.
Nous faisons trois, puis quatre, Entrée, cinq.
D'accord.
Donc, c'est assez simple.
Sauf que dans ce jeu de problème, nous le voulons réellement à s'aligner sur
le côté droit de notre écran.
Très bien.
Alors, comment pourrait-on de vous tapez ce de telle sorte que
il est aligné le long de la droite?
Au lieu de mettre le premier hachage, comment pourriez-vous genre de
le déplacer le long?
SPEAKER 3: Écriture d'une ligne?
ZAMYLA CHAN: Hmm?
SPEAKER 3: Écriture d'une ligne?
ZAMYLA CHAN: Ouais.
Ouais.
Vous pourriez écrire comme un trait de soulignement ou quelque chose comme
, mais nous pouvons simplement dire utiliser un espace.
Mettons en trois espaces comme ici.
Puis la ligne suivante, eh bien, il faudrait mettre deux espaces.
La ligne suivante, nous venons de mettre un espace.
Et puis, pour notre dernière ligne, nous ne serions pas mettre d'espaces.
Et là, nous avons notre pyramide.
>> Donc, c'est en quelque sorte -
rappeler ce genre de logique.
Et essayer de comprendre une sorte de modèle que nous pouvons
puis de traduire en C et impliquer dans une sorte de boucle.
Très bien.
Donc, dire que nous avons une hauteur huit ans, alors notre première ligne auront
deux hachages.
Mais pour obtenir ces tables de hachage, vous devez écrire une
espaces avance.
Pas vrai?
Ce que j'ai fait, c'est que je viens de vivre.
Je l'ai dessiné moi-même, une pyramide dans mon éditeur de texte, un
pyramide d'une hauteur de huit et calcule ensuite le nombre de
espaces dont j'avais besoin pour faire.
Alors j'ai dit oui, bien la première ligne est
va avoir deux tables de hachage.
Mais avant cela, j'ai besoin de sept espaces d'entrée.
Le prochain dotée de six espaces, puis
trois tables de hachage, et cetera.
>> Alors nous allons essayer de porter cette question à une autre couche de
l'abstraction.
Que faire si nous avons eu pour la nième ligne, combien de hachages et comment
de nombreux espaces aurions-nous besoin?
Quelqu'un voit-il le modèle?
Ainsi, la première ligne a deux tables de hachage.
Le second en a trois.
Le troisième a quatre.
Ainsi, la nième ligne aurait -
SPEAKER 4: N + 1?
ZAMYLA CHAN: Ouais.
N + 1.
Exactement.
Donc, nous voyons que le nombre de tables de hachage va être -
si nous comptons le premier rang de l'être, alors le nombre
de tables de hachage va juste être un de plus que cela.
D'accord.
Alors qu'en est-il du nombre de places?
Donc, nous allons essayer de l'exprimer en fonction de la hauteur.
Si la hauteur est de huit, puis la première
rangée dispose de sept places.
Donc, ce genre de correspond à 8 moins 1.
Pas vrai?
Alors la deuxième ligne va avoir six espaces,
soit 8 de moins 2.
Alors je vais vous laisse le soin de genre de figure sur
le motif pour cela.
>> D'accord.
Mais dans la programmation, il nous arrive effectivement indice à zéro.
Nous commençons donc à zéro au lieu d'un seul.
Ainsi, au lieu de la première rangée étant appelée la première rangée,
nous allons l'appeler la ligne 0-e.
Donc, selon la façon dont vous voulez le mettre en œuvre, soit
très prudent si vous commencez à zéro, si vous commencez à
un, votre patron va être compensé par un.
D'accord.
Alors, maintenant que nous avons un peu compris le programme, nous
ont à dire bien.
Ainsi, pour chaque type de niveau de l'escalier, je vais imprimer
tel et tel nombre d'espaces et ensuite tel et
comme le nombre de tables de hachage.
Cela dépend du modèle que nous avons établi auparavant.
D'accord.
Donc, une façon d'itérer et le type de cours
par un nombre défini de choses est une boucle, un peu comme
la répétition de bloc de 10 ou de répétition et comme vous avez entré un
nombre de de Scratch.
Donc, essentiellement, pour tous les niveaux de l'escalier, nous voulons
imprimer les espaces d'abord.
Ensuite, imprimez le nombre de tables de hachage.
Et puis nous voulons entrer une nouvelle ligne, puis répéter
supplémentaire pour le bloc suivant.
D'accord.
>> Alors penchons-nous sur les boucles pour une seconde de sorte de voir une manière
que nous pourrions passer par un certain nombre, passez par le nombre
des étapes de cette pyramide moitié.
Donc pour les boucles sont composées de trois parties.
Tout d'abord, vous avez une initialisation.
Alors qui définit essentiellement une variable.
Ça va être réglé sur cette valeur chaque fois
que pour les démarrages en boucle.
Ensuite, vous allez avoir une condition.
Votre boucle for ne s'exécutera aussi longtemps que
condition est évaluée à true.
Et puis vous aurez une condition mise à jour.
Donc, cela a à voir avec la variable que vous avez initialisé.
Donc fondamentalement un moyen de faire en sorte que nous pouvons sortir
de la boucle, que nous ne gardons pas sur l'exécution
il toujours et à jamais.
Parce que contrairement à Scratch, nous n'en possèdent pas seulement une
plaine boucle Forever.
En C, le programme doit se terminer par la suite.
Donc, nous devons nous assurer que nous avons une certaine façon de l'arrêter.
>> D'accord.
Ainsi, un exemple d'une boucle for que vous pouvez utiliser pour
Mario est présent.
Vous avez donc un entier i que vous commencez à 0.
Tant qu'il est inférieur à la hauteur, d'exécuter le corps
à l'intérieur de la boucle ici.
Après que le corps de la boucle est exécutée, alors vous feriez
i augmente de 1.
Alors votre programme allait vérifier à nouveau - d'accord, eh bien, c'est moins de i
la hauteur?
Si c'est le cas, vous continuerez.
Alors, voici un exemple d'indexation zéro, où nous commençons à
zéro et ensuite nous -
remarquerez que notre condition est inférieure à la hauteur.
Donc dire que notre taille est de quatre, par exemple, i
commence à 0.
Ce sera 1.
Ce sera 2.
Il y aura 3.
Et puis une fois qu'il met à jour, les mises à jour lorsque la boucle, je vais
alors être réglé sur 4.
Mais 4 n'est pas inférieur à 4, et ainsi de suite, puis nous le ferions
continuer à le reste de notre boucle.
>> D'accord.
Alors que commence à zéro.
Mais nous pourrions aussi commencer à un, par exemple.
Mais puisque nous partons moins un, nous avons un peu besoin d'aller encore une
à la fin du temps.
Alors c'est pourquoi nous ajoutons le inférieur ou égal à.
Ainsi, l'une des grandes choses que j'aime à propos de l'ordinateur
programmation, c'est qu'il ya tellement
plusieurs façons de faire les choses.
Ainsi, vous pouvez choisir si vous commencer à zéro, si vous
En commençant à un.
Aussi, si vous le souhaitez, vous pouvez simplement utiliser un
tout en boucle, par exemple.
Donc, vous pourriez -
nous allons effectivement hello.c ouvert.
Nous avons donc ici une boucle for.
Elle commence à i = 0, i <5.
J'ai un commentaire ici nous dire ce qu'il fait.
Elle imprime bonjour cinq fois en utilisant une boucle for.
Mais on peut aussi le faire en utilisant une boucle while ainsi.
>> Alors regardons comment nous pourrions le faire.
Donc, si nous allons simuler une boucle for, alors nous voulons aussi
imiter l'initialisation, la condition et la mise à jour.
Ainsi, la condition doit être assez simple, car dans le
tandis que la syntaxe, lorsque vous le regardez, il est dit while (condition).
Alors disons simplement la condition d'entrée là-bas.
i <5.
D'accord.
Nous savons donc que nous voulons imprimer au revoir.
Nous savons que c'est le corps de notre boucle.
Mais il nous manque l'initialisation
et la mise à jour, non?
Parce que nous ne pouvons pas avoir une boucle infinie.
Il doit mettre fin.
Ajoutons donc une sorte d'initialisation ici en utilisant l'
même que nous avons utilisé dans notre boucle d', int i = 0.
D'accord.
Nous commençons donc avec un int i.
Nous répétons cette boucle while tant que i est inférieur à 5.
Alors il nous manque une chose, qui est la mise à jour.
Alors, quelle mise à jour aurions-nous besoin d'utiliser si nous étions essentiellement
recréer la boucle for ci-dessus?
Nous avons l'initialisation i est égal à 0.
Nous avons l'état i est inférieur à 5.
Et puis, voici une mise à jour, non?
Donc, nous voulons imiter.
Nous voulons dire ok, i + +.
C'est la même chose que de dire i = i + 1.
Mais comme il est si souvent utilisée, un raccourci pour qui est juste
i disant + +.
>> Grande.
D'accord.
Ici, je n'ai pas fait sortir de mon programme pommes.
Donc je vais juste à cliquer sur Control-C et que, immédiatement
bottes de me sortir de mon programme et apporte
me soutenir à la borne.
Alors que, par exemple, si vous avez un bug où vous
oublié de mettre à jour votre boucle while telle qu'il serait
fin, et vous entrez dans une boucle infinie, alors vous pouvez
utilisez Control-C pour sortir de cela.
Très bien.
Donc, nous sommes dans le bon répertoire.
Faisons donc bonjour.
Et puis, si nous courons bonjour, nous voyons que la boucle ne revoir
exactement la même chose que notre boucle for fait.
Donc, c'est juste un soupçon.
Que vous soyez plus à l'aise avec les boucles for ou
avec boucles while, ils peuvent être interchangeables.
Donc, quel que soit celui que vous souhaitez utiliser pour parcourir -
dans ce cas -
la hauteur de la pyramide Mario.
Et de nouveau, c'est juste un rappel, si vous commencez à zéro
pour votre variable, alors vous aurez envie d'avoir un autre
état que si vous avez commencé à une heure.
Donc, ce tableau montre juste une sorte de vous un rappel.
Si vous voulez répéter 10 fois, par exemple, alors vous
pouvez commencer votre variable à zéro.
Et votre état de santé peut être inférieur à 10.
Et si ce genre de montre que vous la matrice de cela.
>> D'accord.
Donc, nous sommes passés par Mario.
Nous l'avons dit, Bon, eh bien nous devons vérifier pour l'entrée correcte,
zéro et 23 inclusivement.
Nous allons trouver une sorte de modèle, une sorte de moyen
d'exprimer la nième ligne ou la ligne i.
Et nous allons décider, d'accord, que nous allons imprimer cette
de nombreux espaces, ce hachages nombreux, nouvelle ligne.
Très bien.
Donc, nous l'avons.
Donc maintenant nous pouvons passer à Greedy.
Greedy est un programme dans lequel un utilisateur vous donne un montant de
argent que vous avez essentiellement que le caissier besoin de revenir.
Mais vous voulez utiliser des pièces aussi peu que possible.
Et c'est donc là un algorithme Greedy arrive, où
nous voulons utiliser la quantité minimale de pièces possible
prendre cette quantité de changement.
>> D'accord.
Ainsi, un exemple de cela dans votre solution peut paraître
quelque chose comme ça.
Vous exécutez. / Gourmand.
Vous êtes invité à dire ok, bien à quel point le changement est dû?
Cette valeur va être une valeur en dollars.
Donc, ça va être un flotteur.
Votre programme va alors calculer la quantité minimale
des pièces nécessaires à faire, dans ce cas, 0,32 $.
Et si le nombre minimum est de quatre.
Donc, avant de comprendre ce qu'il faut faire, faisons sorte de marche
à travers le processus que vous pourriez aller sur.
Donc, si l'entrée est de 32, puis essentiellement, je vais utiliser
la moindre quantité de pièces de monnaie si j'utilise le plus grand nombre
pièces de gros que possible.
Pas vrai?
Ainsi, il est beaucoup plus facile d'utiliser un trimestre,
plutôt que cinq cents.
Donc, disons, vous devez retourner 0,32 $.
Eh bien, puis-je utiliser un quart dans tout cela?
Oui, vous le pouvez.
Et puis, vous serait diminué à 0,07 $.
Voyons voir si je peux utiliser un autre quart de vous rembourser.
Eh bien, non.
Je ne peux pas répondre à un quart en cela.
Je vais donc passer à la pièce suivante plus grand.
Puis-je utiliser un centime?
0,07 $, non vous ne pouvez pas utiliser une pièce de monnaie pour payer 0,07 $.
Donc, vous dites non.
Passer à la suivante, qui est un alliage de nickel.
Pouvez-vous utiliser un nickel?
Oui.
Sept est supérieure à 0,05 $, de sorte que nous pouvons utiliser un alliage de nickel.
Et puis nous avons deux cents restants.
Peut-on utiliser un sou?
Oui nous le pouvons.
Peut-on utiliser un sou?
Oui.
Peut-on utiliser un sou?
Non, parce que maintenant nous avons réussi à
payé le dos de l'utilisateur.
Et pour que totalise quatre pièces utilisées.
>> Donc penser à ce processus, nous avons tous les
moment décider d'accord,
ce qui est le plus grand pièce que l'on peut utiliser?
Une fois que nous utilisons, nous sorte de garder une note mentale de combien
plus d'argent, nous devons retourner à l'utilisateur ainsi que le nombre de
pièces de monnaie que nous utilisons.
D'accord.
Donc, mais encore une fois, la première étape - tout comme Mario - est d'inciter les
l'utilisateur pour un montant monétaire.
Et si ce montant va être -
il va avoir une valeur décimale parce que nous allons
demandez-leur de dollars.
Donc, ce type de données ne va pas être un nombre entier.
Mais il va y avoir un -
ouais, un flotteur.
Mais tout comme les pommes, les flotteurs peuvent être positifs ou négatifs.
Alors lorsque vous vérifiez les valeurs, vous allez vouloir
pour s'assurer que votre flotteur -
l'entrée de l'utilisateur - est non-négatif.
D'accord.
Nous pourrions traiter avec des flotteurs dans notre programme dans son ensemble, représentent
quarts de 0,25, de 0,1 dimes, et cetera.
Mais je trouve qu'il est beaucoup plus facile de traiter en quelques cents purs.
Aussi -
et nous en reparlerons un peu plus tard -
en C, points flottants quelque chose qui s'appelle l'imprécision.
Alors, quand vous entrez dans 0,12, par exemple, l'ordinateur
en fait que les magasins comme 0.1111119 ou
quelque chose comme ça.
>> Ainsi, il est beaucoup plus facile à convertir en cents.
Alors, comment pouvons-nous convertir une valeur en dollars en cents?
SPEAKER 5: il Times par 100?
ZAMYLA CHAN: Ouais.
Ouais.
Donc, nous aurions parfois il par 100.
Mais une chose délicate sur les points flottants, c'est qu'il ya
une certaine imprécision.
Donc, nous allons simplement voir un exemple de cela.
Donc, je vais ouvrir imprecision.c.
D'accord.
Il s'agit d'un programme très simple.
Il demande un flotteur, et l'imprime en arrière.
Un bon pourboire au terminal, c'est que vous pouvez simplement taper claire et
alors vous avez un écran clair.
Et si vous n'avez pas besoin de regarder n'importe quelle sortie précédente ou de toute
des erreurs ou des bugs rapports, quelque chose comme ça.
D'accord.
Faisons donc imprécision.
Nous allons l'exécuter.
Donc, je haven't -
dans mon code, je n'ai pas imprimer n'importe quel message ou quelque chose comme ça.
Ainsi, il a juste un curseur clignotant.
Donc, il attend juste pour moi à l'entrée d'un flotteur.
Donc let's -
un flotteur aléatoire.
Et vous voyez que l'imprime en arrière, mais a une certaine supplémentaire
chiffres que nous avons certainement ne comprennent pas.
Donc, nous voulons nous assurer que ce n'est pas
se produire dans notre programme.
>> Alors ce que nous voulons faire est de s'assurer que nous avons effectivement
genre d'arrondi à la valeur appropriée.
Pas vrai?
Et si par chance, nous avons une fonction appelée tour inclus
dans l'appareil.
C'est dans la bibliothèque mathématique.
Si vous voulez savoir comment utiliser ronde, alors que vous utilisez réellement
le manuel.
Vous pouvez cliquer ronde homme.
Alors là, il fait apparaître -
peut-être un peu difficile à déchiffrer, mais finalement
vous aurez le coup de lui.
Il sorte de vous montre ce que fait la fonction et puis certains
utilisations possibles de ce.
Alors, quand vous obtenez finalement un bon, d'entrée valable à partir du
utilisateur, alors vous voulez le convertir en cents.
Assurez-vous que vous avez autour de la valeur afin de vous éviter ce
flotter imprécision point.
>> D'accord.
Nous avons donc invité l'utilisateur pour un montant monétaire.
Maintenant, ce que nous voulons faire est de vérifier essentiellement, non?
Ok, donc je peux utiliser la plus grande pièce possible?
Si vous le pouvez, puis vous l'utilisez.
Vous assurez le suivi du nombre de pièces que vous avez utilisé jusqu'à présent et
également le montant à la baisse.
Pas vrai?
Et puis vous allez vérifier.
Une fois que vous avez épuisé les types de quartiers, vous voulez aller
à la prochaine chose possible.
>> Donc, genre ce genre de structure ou de ce que la boucle pourrions-nous
souhaitez utiliser pour vérifier en permanence si l'on peut encore utiliser
un quart, par exemple?
HAUT-PARLEUR 6: Valeur Alors que plus de?
ZAMYLA CHAN: Oui, parfait.
Exactement.
Ainsi, alors que la valeur est supérieure.
Ainsi, alors que la valeur que nous devons redonner encore
plus d'un quart, alors que nous pouvons toujours utiliser un trimestre,
utiliser trimestres.
Gardez une trace de cela.
Et puis continuer à avancer.
Parfait.
D'accord.
Oh, je viens ici inclus que quelques conseils sur la façon d'imprimer
valeurs extérieur.
Donc, dans votre fonction printf, nous avons souvent été tout
traiter avec des cordes.
Mais lorsque vous souhaitez imprimer un int ou n'importe quel type d'
chiffres, vous devez écrire genre d'une sorte de place de titulaire.
Donc, qui est représentée par le pour cent,% d pour les entiers.
Vous écrivez que, puis ensuite vous aurez fait -
après une virgule -
mettre en valeur ce qui se passe réellement là-dedans.
Droite.
>> D'accord.
Donc, nous avons déterminé que nous voulons vérifier si -
une façon de le faire serait de vérifier en permanence si
nous pouvons toujours utiliser quarts, puis utilisez les trimestres, gardez
de suivre et de passer ensuite à la valeur plus grand côté.
Maintenant, une autre sorte de belle façon que vous pouvez faire est
utilisant l'opérateur modulo.
Donc, nous avons déjà le plus, moins, multiplier et diviser
à notre disposition.
Mais l'opérateur modulo est un peu soignée.
Ce qu'il fait est qu'elle retourne en fait vous le reste de
divisant deux nombres.
Donc, si vous vous souvenez de la division long quand vous le feriez, par exemple,
faire 74 divisé par 3, vous l'écrire, reporter,
soustraire, et puis à la fin du nombre du bas est
le reste.
Eh bien, ce que modulo-t-il réellement vous donne juste ça.
Ainsi 74 modulo 3 vous donnera 2.
De même, 10 modulo 2 vous donne 0, car il n'ya pas de
reste quand on divise 10 par 2.
6 modulo 5, et 5 va en 6 une fois, puis
elle a quitté au cours de 1.
Alors si vous avez 7 modulo 9, 9 est bien plus grand que 7.
Donc, il ne peut pas aller tout autre moment.
Il est donc logique que la valeur de retour est de 7.
Donc, si vous pensez modulo, comment il vous donne le reste
après vous divisez quelque chose, vous pouvez sorte de voir comment vous
pourrait être en mesure de l'utiliser dans Greedy, non?
Donc, si vous sorte de combiner le modulo peut-être avec la division
opérateur, quelque chose comme ça, alors vous pourriez avoir un endroit frais
sorte de voie mathy d'aborder le problème posé.
>> Alors, maintenant que nous savons qu'il ya un couple de différents
moyens que nous pourrions faire cela - il ya certainement beaucoup de
différentes façons d'écrire, même les boucles while.
J'ai donc écrit quelques pseudo ici.
Il pourrait ne pas être identique à la sorte de squelette de votre
code que vous écrivez.
Mais pour l'essentiel, le processus et la façon de penser est
comme nous en avons discuté.
Alors d'abord, la première ligne est dit d'avoir une certaine quantité
en dollars.
Et puis, il est implicite le convertir en cents.
Puis, alors que les quartiers peuvent être utilisés, nous voulons
augmenter le nombre.
Et puis, nous voulons diminuer la quantité, la valeur
nous revenons en arrière.
Comme vous le voyez ici, ce n'est pas tout à fait C. Mais j'ai aussi
retrait des choses, je mets mes conditions à l'intérieur de
parenthèses.
>> Alors ce genre de m'obtient commencé.
Et puis, plus tard, je peux vérifier la syntaxe.
Souvent, la partie la plus difficile vraiment d'un problème est de
comprendre exactement ce que vous devez faire.
Donc, une fois que vous écrire cela, alors il est beaucoup plus facile pour ensuite
traduire pseudo-code.
Et puis, de pseudo-code, la syntaxe est assez facile.
Ainsi, nous voyons alors que les quartiers, peuvent être utilisés, augmenter le nombre,
diminuer la quantité.
Bien dimes peut être utilisé, puis vous mener ainsi de
suite, jusqu'à ce que vous avez épuisé toutes vos pièces de monnaie.
Vous imprimez le nombre de pièces utilisées, ce qui sera le
montant minimum de rendre l'utilisateur entré valeur.
Et là vous avez votre algorithme glouton.
Et puis une fois que vous avez terminé, vous avez également terminé pset 0.
>> Quelqu'un at-il des questions sur quoi que ce soit?
Très bien.
Eh bien, je vais rester un peu après si vous avez
des questions.
Cette procédure pas à pas a été 1.
Merci d'être venu.