[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.