[音楽再生] DAVIDマラン:みなさん、こんにちは。 これは、CS50のスーパーセクションです。 割り当てられたセクションはしません 別の週に開始します。 だから、今日、私はここにいますよwith-- MARIA:マリア。 DAVIDマラン:実際--to 問題を見てみましょう 1、コースの設定 材料の最初の数週間、 あなたはCS50のIDEに慣れる、ビット Linuxでは、のオペレーティングシステムの IDE上で実行されているだけでなく、 移行のいくつかを見て スクラッチからCのリーディングへ 問題まで1を設定します。 だから、難しい話は抜きにして、 問題で、次のいずれかを設定します あなたがすることになるだろう CS50 IDEに導入します このWebベースのプログラミングで 私たちは順番に使用する環境 プログラムを作成します。 それは非常に見えるように設計されています 典型的なコンピュータを思わせます オペレーティングシステムを実行しています Linuxのと呼ばれるシステム。 しかし、それは、いわゆるクラウドでです、 どのクラスの全員を意味 実際に彼または彼女を持つことができます 自分のアカウントと同様に、それを使用しています。 だから、あなたのほとんどは、おそらく使用したことがありません 前またはおそらくLinux環境 でもコマンドライン環境。 また、コマンドライン 環境が異なっています。 これは、すべてのテキストです。 これは、すべてのキーボードコマンドです。 そして、それはマウス操作、アイコンなしません、 何の対話の窓なし、メニュー。 それは純粋にテキストです。 したがって、最初に、それ種類 ステップのように感じています 後方洗練の点から好ましいです。 しかし、それは多くなってしまいます より強力な、確かに、 最終的には、コンピュータ科学者のために。 それでは、見てみましょう。 ここで私はこれを介して、CS50.ioで午前 あなたはCS50 IDEにログインすることができます。 そして、多くのスクラッチのように、あります この画面には3つの主要分野。 そのように左側に、我々は 何がファイルブラウザになります。 そして、このフォルダはであります 今空である上、 私はすべてを処分したので、私の スーパーセクションの前にファイル。 そしてそれはどこに私たちがよです 私たちが書くCファイルを保存します。 右上に、私たちはどこの場所を持っています 私たちのすべてのコードが書かれた取得するつもりです。 そして実際、私はこのプラスをクリックすると、この 私は新しいファイルを選択できるようになるだろう。 そして、ここで私は、またはCのコードを書き始めることができ、 本当に、他の言語の任意の数。 そして、一番下にある場合は、それ jharvard @ ide50--とあなたと言っています 少し何かを言います different--これは何と呼ばれていましたか? ターミナルウィンドウを開きます。 うん。 だから、ターミナルウィンドウがあります いわゆるコマンドライン あなたが対話できるするためのインタフェース 基盤となるオペレーティングシステムと。 そして今のところ、我々はするつもりです this--はほとんど利用して ただで見て、コンパイルします 私たちが見るのエラーメッセージ、 私たちのプログラムを実行します。 しかし、最終的に、我々はつもりです 同様に、そんなに多くすることができません。 そしてあなたも、ソフトウェアをインストールすることができます そして、ワークスペースの管理 CS50 IDE内で、同様に。 しかし、いくつかの他の時間の詳細。 それでは、先に行くと書いてみましょう ちょうど非常に簡単なプログラム のウォームアップを通過します おそらくあるのhello.c、 私たちが書くことができる最も簡単なプログラム。 私はすでに新しいタブを開きました。 私は先に行くつもりだと 標準io.h.含ま言います そして、メイン(ボイド)int型。 そして、printfの( "こんにちは、世界" バックスラッシュnは、近くの引用、 近い括弧、セミコロン。 大丈夫。 だから今、私のウィンドウが無題で気づきます。 だから私は非常に迅速に行きますよ ファイルに上がるために、保存してください。 そして、それはすることが重要です 私は「こんにちは。」これを呼び出していません だから、非常によくある間違い、 特に問題には、次のいずれかを設定します 誤ってちょうどあなたを呼び出すことです プログラム「水」や「貪欲」や「マリオ」 または「クレジット」など。 しかし、あなたが実際にしたいです あなたはファイル拡張子を持っていることを確認 これは、唯一の方法であるため、 コンパイラと、コードエディタ あなたがいることを知っています 実際にはCのコードを書きます。 だから私は先に行くし、[保存]をクリックしてみましょう。 そして今、あまりにも、何CS50 IDE 私たちのために行っていることもあるのです 構文はすべてを強調しました。 だから、すべてが非常にカラフル作られています。 との全体の目的 それが機能していません。 それはに私の目を描画するだけです 概念的に異なる部分 このプログラムの。 それでは、先に行くと、これをコンパイルしてみましょう。 そして、私はこれをコンパイルすることができます いくつかの方法です。 そして、1週間で、 私たちがやった古い学校の道 それは文字通りでした コマンドline--「打ち鳴らすのhello.cの。」 そして私は、Enterキーを押します。 そして、何も起こらないようで ターミナルウィンドウに表示されます。 しかし、どのようなIDEで変化したのか? ここで、再び、IDEはちょうど意味 統合開発環境。 これは、というのがファンシーな方法です この統合開発 ソフトウェアを開発するための環境を提供します。 それでは、UIに変更しましたか? あなたは何に気づきました それは、マリア違いますの? マリア:私は何かに気づきました ここまでIDE50フォルダの下に。 DAVIDマラン:うん。 だからここまでだけではなく、 我々が持っている "のhello.cを。」 また、ある "、a.outの"を持っています プログラムのダムの名前のようなもの。 しかし、確かに、それはのデフォルト名です あなたは自分のコードをコンパイルするプログラム コンパイラを教えていません 出力にどのファイル。 だから私はこれを実行したい場合、私は compiler--に伝える必要があります か、私のようにする必要があり 私のワークスペースを伝えます 呼ばれるプログラムを実行したい」のa.outを。」 入力します。 そして、こんにちは」あり 世界。 "今" ./ "。 実際に重要です。 いっても普通は我々 コマンドの名前を書き、 とき、それはあなたがしたプログラムです 書かれて、あなたは "./"を言いたいん それが明示的にLinuxを伝えるため、 あなたはと呼ばれるプログラムを実行すること この中の「のa.out」、ドット 私は現在よこのディレクトリを意味 であることを起こるで、 「a.outの、ワークスペースと呼ばれます。 私が今言っている場合ので、「a.outの、」と入力し、 私は、コマンドa.outを「ない取得するつもりです 「なぜならcomputer--発見 私が発明したため、「a.outの。」 それはcomputer--が付属していませんでした どこにあるかを知ることはありません、 それが正しいのにもかかわらず、 私の鼻の下で、いわば。 OK。 だから我々は、これを変更することができます 「こんにちは-o打ち鳴らすのhello.c。」であります そして、私は入力してヒットした場合、どのようなプログラム これは私のために出力するように起こっていますか? ファイルの名前は何ですか? うん、戻りました。 そのとおり。 "こんにちは。" だから、「こんにちは」になるだろう プログラムの名前 我々が使用してきたので、いわゆる ちょうどであるコマンドライン引数、 の動作を変更する方法 実際に出力するコンパイラ 特定のファイル名。 そして実際、私がズームインするとき、 うち、ここまで見て、 今私は、 "a.outの"だけでなく、を持っており、 同様に「hello.cの "だけでなく、「こんにちは」。 だから今私は、 "./hello、「入力を行うことができます。 そして、 "こんにちは、世界。」あります しかしlastly--この 今大会になります 我々は全体で使用します 学期、typically-- あなたも、単に言うことができるである「ハローを作ります。」 そして実際、それはアップだと言っています 日付にはすでに存在しているため。 私が先に行くとして、削除してみましょう rmコマンドは、両方の "a.outの」 - そして、言う「通常のファイルa.outを削除? " そのちょうどあなたが、していることを意味 あなたはそれを削除してもよろしいですか? 私はそう言うつもりです。 そして私は削除するつもりです 「こんにちは」ではなく「hello.cの。」 私は、明示的に "はい"と言うつもりです しかし、「Y」は同様に、十分なものです。 私ならばそして今気付きます 、ls--れ、リコールを入力 それがすべて一覧表示されますlist--意味 私のフォルダ内のファイルの。 そして実際、私がズームインするとき、 アウトと左上を見て、 それは何だことを確認します このフォルダ内に、偶数 それがここまでIDE50と名付けていても そして、ではないワークスペースは、それだけで「hello.cの。」です だから今ダウンここで、私の場合 入力して「こんにちは、作る「ん、 今、私ははるかに長いコマンドを参照してくださいが、 起こっているのより洗練されたコマンド 来て週に有用であること。 そして今、私は「./hello。」と言うことができます それでは、クイックツアーを見てみましょう いくつかの他のLinuxコマンド。 なぜ私たちはステップを取ることはありません 背中と実際にそれ以上のCを見て 一般的に、スクラッチからの移行 Cに、その後表情で結論 最初の問題で Cに設定したすべての権利。 だから私は先に行くつもりだし、ちょうどきれいな コントロール-Lだけで自分のワークスペースアップ きちんとした画面を維持します。 しかし、それは何の機能を持っていません そうでなければ影響。 私たちが見てきたことを思い出してください 今いくつかのコマンド。 だから我々は、一般的にあなた打ち鳴らすを、見てきました もう手動で実行する必要はありません。 我々は、代わりにメイクを使用します。 しかし、我々はまた示している、LSを見ました 私のディレクトリ内のファイルのリスト。 そして今、なぜthere-- 2がありますされています 今ファイル、「こんにちは」と「hello.cの。」 なぜスターやがあります 「こんにちは」の後にアスタリスク? それがベースの、何を意味しました 私たちは週1で見たものに? どう思いますか? 星は何を意味するのでしょうか? マリア:「こんにちは」プログラムFor--? DAVIDマラン:「こんにちは*」。 うん。 そうそう? ああ、実行可能。 そのとおり。 だから、ということを意味 「こんにちは」の実行可能です。 だから確かに、それが理由です 私は「./hello」を行うことができます 大丈夫。 だから私はここで他に何ができますか? まあ、それは私ができる判明します また、ディレクトリを作成します。 だから私は先に行くと作成することができ、 例えば、「PSET1 "ディレクトリ。 そして、問題セットの仕様 あなたは正確にこれを行う必要があります、 だから、今日は覚えておく必要はありません。 しかし、 "は、mkdir PSET1は「そうです 影響はありませんします。 しかし、再び、エラーメッセージありません 一般的には良いことです。 だから私は、ああnow--今の "ls"と入力した場合 私はと呼ばれる実行可能ファイルを持っています いわゆる「ハロー、「Cファイル」のhello.c。」 そして、最後のスラッシュにそう 話す、これがディレクトリであることを意味します。 だから確かに、今私はそれを開きたいです。 そして、私は次のようにそれをダブルクリックしないでください GUI、グラフィカルな環境インチ 私の代わりに「CDのPSET1を。」と言います 入力します。 面白いものは何も持っていないようにみえ 私の小さなプロンプトを除いて起こりました here--これは思い出させるのリナックスの方法です 私はどこに私は、だから何のフォルダは、開かれています。 それはちょうど、明示的に私に言っています グラフィカルとは対照的です。 私が入力した場合と、「lsと、「なぜ私は別のものを見ています すぐにプロンプ​​ト、あなたは思いますか、 私はPSET1の内容を一覧表示するとき? MARIA:あなたはおそらくありません そこには何も持っています。 DAVIDマラン:うん。 それでは、私たちは明らかに持っていません そこには何も作成 私はディレクトリを作成したので。 今、私はのためのfile--を作成したい場合 例えば、私は、新しいファイルを作成することができます。 そして私は、に行くことができます 保存してとして保存し、 以下のように、「mario.c "あなたがやっている場合 PSET 1の標準版。 そして、すべてのMacまたはPCのような、ちょうど フォルダ "PSET1を選択し、保存します。 そして今、ファイルは空です。 しかし、ここでは第二のために再度ズームインしてみましょう。 のがここでのlsを実行してみましょう。 今、私たちは「mario.c」を参照してください。 だから、他のいくつかのコマンドがあります time--上で念頭に置いて価値があります 明確な、またはControl-Lは、私がきたものです 打撃されました。 MKDIR我々は見てきました。 RM我々があるだけでなく、見てきました 削除するか、ファイルを削除します。 あなたがalso--でき用心、あなたが見れば オンラインチュートリアルでは、あなたは-rf RMます のが非常に一般的な方法です それで何かを持っているフォルダを削除します。 ただ、超慎重に、スーパーです。 -rfを再帰的意味します それが何であれ、削除 あなたは、削除しようとしています そして、強制的に削除します。 それが付いたフォルダだのであれば、再帰的な手段 フォルダのフォルダのフォルダ、 それらのすべてを削除します。 そして、強制的にいなくても行うことを意味 はい私に尋ねるか、いや、私は確信していますか? だから、の超危険な方法です 迅速なものの多くを削除します。 しかしbeware--あまりにも頻繁に勇敢を行います 学生誤って言う、削除、PSET 例えば1、。 MARIA:そして、ちょうど彼らの場合 -r行う、彼らが行っています すべての単一のファイルについて、それらを依頼します。 DAVIDマラン:あり 適度に迷惑。 マリア:ええ。 DAVIDマラン:だからそれが理由です 私たちの多く、自己が含まれ、 -rf使用しての習慣にしています。 しかし、それは危険です。 だから、買い手はご用心します。 そして、MVは一種のです 興味深いことに命名。 だから、これは移動コマンドです、 これは少し奇妙な感じ あなたは確かにそれを使用することができますので、 ある場所から別の場所にファイルを移動します。 例えば、私が台無しにしたとします。 私が作成したとし PSET用の新しいファイル。 そして、私はとしてそれを保存」greedy.c。」 しかし、私は誤ってそれを保存するとし IDE50--で非常に私のワークスペース自体に そして、ではないPSET1インチ あなたは、左上の多くを見ることができます。 「greedy.cは。」あります そして、いくつかのソリューションがあります。 そこで一つは、私が使用することができます スーパーユーザーフレンドリーな方法 ちょうどドラッグしてドロップします。 そして、それは実際に希望 この問題を解決します。 しかし、今日、私たちは見しようとしています もっと難解だが強力な方法 これを行います。 だから、私はPSET1に「LS」を見てみましょう。 そして、私は唯一の "mario.c」を参照してください。 私が先に行くと、やってみましょう "CD .."。 だからCDは再び変更ディレクトリです。 ".."しかし、何を意味しますか? 前回私が言った「CD PSET1に入るPSET1」。 私は "CD .."と言うときに、私は何をやっていますか? 後方。 うん。 だから、いわゆる親になるだろう。 同様に、1レベル上を行きます フォルダの外に出ました。 だから入力してください。 そして実際、それが何をしたかに見えます。 それだけではなく、ワークスペースに私を移動しました ワークスペースにあるPSET1、へ。 そして今、私は「LS」と入力した場合、 ものの全体の束があります。 「greedy.c」があるで。 だから今私は、文字通りにMVを使用してみましょう PSET1に "greedy.c」に移動。 だからLinuxの多くのコマンド まさにこのように動作します。 彼らは、引数を取りませんまたはそれらは1を取ります 引数またはそれらは2つのコマンドラインを取ります 引数など。 この場合には、です 文字通り何をしています それはsuccinctly--いえ、言います PSET1にgreedy.c移動。 入力します。 何も起こらないようで。 私は再びlsコマンドを実行した場合でも、貪欲がなくなっています。 そして、私は「CDのPSET1」を行うと、入力し、 LSは再び、今では適切な場所にあります。 さておき、のためかのように いくつかは、特にreason-- あなたが断続している場合 ネットワークの接続性 またはあなたの周り歩いています あなたのラップトップの蓋付きのキャンパス 閉じられた後、それを開きます もう一度とワークスペース やや同期、大したことないからと思われます。 ちょうどあなたのブラウザをリロード 窓、それはする必要があります 再同期するように左側 ファイルブラウザが正確に見えます ターミナルウィンドウのように。 心配しません。 疑わしい場合には、そのように、ページをリロード 限り、あなたはすでにファイルを保存してきたように。 OK。 だから、mvはまた、ファイルの名前を変更するために使用することができます。 そしてのは、見てみましょう ここで、この最後のコマンド。 だからsuppose--これがあります スーパー共通の、あまりにも、早い段階で。 一部の学生は時々ファイルを作成します 呼ばれる、のは、別の何say--てみましょうか? 「WATER.C。」のように だから私はちょうどのために、叫びますよ すべて大文字でない理由はなく、。 しかし、これではありません ファイルの正しい名前 私たちの問題は、設定だけの理由であれば 仕様は言いませんでした すべて大文字のファイルを保存し、「WATER.C。」 その代わりに、私たちは期待して 小文字で「water.c」。 そして、実際には、これは 問題check50ため、 あなたが行っているプログラム 問題での出会いを求めています 自動テスト1を設定 あなたのコードの正しさ それができない場合は大声で叫ぶために起こっています すべて小文字で「water.c "を見つけます。 だから私はこの問題を解決する必要があります。 するので、多くの異なる方法 この、そのうちの最初の操作を行います Controlキーを押しながらクリックまたは右クリックすることであろう ファイル名だけ名前の変更]を変更します。 それを行うには全く罰金。 しかし、再び、今日、してみましょう それは少し手の込んだ行います。 のが変更にMVを使用してみましょう 「WATER.C "" water.c。」 だから、また、最初の引数を使用することができます 第二引数に名前を変更します 二番目の引数はでない、ある場合 事実、フォルダまたはディレクトリ名。 大丈夫。 そして最後に、私はではほとんどtrick--です 現時点では私のワークスペースディレクトリ。 私はPSET一つに取得したい場合は、 私は確かに「CDのPSET1」を入力することができます しかし、それは「PSET1」を入力するので、面倒ですか 長いファイル名やディレクトリ名 まだ。 だから、非常に多くの場合、Linuxでは、どのような あなたが行うことができ、「PSE」を入力し始めるです ちょうど、Tabを押し、退屈としましょう コンピュータがあなたのためにそれを把握します。 その習慣を身に取得するスーパー便利。 あなたが持っている場合にのみキャッチです 複数のファイルやフォルダを開始 文字 "P"を持ちますか 「PS、 "あなたが持っている可能性があります 前に数より多くを入力します コンピュータが何をすべきかを知っています。 マリア:私たちはショートカットが好き。 DAVIDマラン:この意志 あなたに多くの時間を節約できます。 そしてまた、私たちは、講義であなたを言ったように 上下、歴史の中で上にスクロールすることができ、 最近実行された見つけるために、 コマンド、および。 大丈夫。 だから今、私たちの注意を元に戻すましょう 簡単なプログラム、こんにちは世界へ。 だから我々は、まさにこのことをまとめました。 そして今、なぜ私たちが取ることはありません データ型を見て そして、し、いくつかの移行 Cにスクラッチ対応するブロック MARIA:素晴らしいです。 だから今、あなたが開始したこと C言語でプログラムを書いて、 我々は話を開始するつもりです データ型と変数について。 そのあなたので、いくつかのデータ型 今始まる知りたいでしょう あるものです 青色で強調しました。 だから我々は、最初にint型を持っています これは整数を示します。 そして、それはあなたのように、整数を保持しています 場合がありますのでguessed-- 1、2、3、 任意の他の整数 あなたが考えることができます。 DAVIDマラン:そして、陰性。 MARIA:そしてまたネガティブなもの、うん。 そして0。 その後、我々は、フロートを持っています 浮動小数点数です。 だから、すべての実数です それは、小数点を持っています。 だから5.0、5.2、さらにより 小数点以下の桁、 同様に、また、ネガティブなもの。 その後、我々は文字で文字を持っています。 だから私たちはについて話だと思います この講演で、今日。 しかし、我々は、example-- Aの文字を、持っています charとして保存することができ、B、C--。 しかし、その後、私たちはより多くのシンボルを持っています それは、charとして格納することができます。 そして、それらは、ASCIIとして保存されます。 そして、我々は、ブール値を持っています、 これはブール値です。 そして、それらがTrueに評価したり、 それぞれFalseまたは1と0。 DAVIDマラン:そしてそのリコール ブール値CS50ライブラリから来ています。 だから、それがに組み込まれていません Cが、それは超便利です 真と偽の概念を持っています。 とにもかかわらず、あなた 楽しい事実をthink--可能性があります。 ブール値は、技術的にどのように多くのビットを必要とし、 本当に、偽対真表現しますか? あなたはどのように多くのビットだと思います あなたが最大限に、必要でしょうか? うん、ただ一つ。 だから、Cことが判明 あなただけの1ビットを与えることはできません。 測定の最小単位 あなたは8です得ることができます。 だから、彼らはあなたがしている少し無駄です 全体バイト、または8ビットを使用して、 TrueまたはFalseを表します。 しかし、それは、それはちょうど方法です CS50ライブラリでC言語で実装されています。 マリア:私たちはしていて、その後のもの 広くについて話をするつもりはありません 右ダブルnow--、 それは大きなフロートのためです。 ロングロングとショート 整数のもあります。 DAVIDマラン:確かに。 PSET 1のハッカー版では、 私たちは実際に長い、長い使用しています。 しかし、標準版のために、 それは必要ありません。 MARIA:クール。 OK。 だから、あるべきですoperators-- これらのほとんどは、おそらくお馴染み。 加えて、+。減算、 - 。 乗算のために、我々は*を持っています。 そうではない私たちが通常使用し、X。 部門は、我々は、バックスラッシュを持っています。 そして、モジュロは、私たちの最後のオペレータであります 私たちは今の話をしようとしています。 それは私たちがすることができ、オペレータの 除算の余りをとります。 我々は4%を持っている場合は2、4分割されたので 2で0の残りと2です。 だから、4%2が0です。 4%3は1です。 あなたが推測している可能性として4〜5%は、4です。 これらの全てを使用する場合に覚え PEMDAS規則を使用する事業者。 DAVIDマラン:あなたのであれば、明確にするために 4%2の操作を行い、なぜ正確に、その0のですか? MARIA:4で割ったので 2 0 2で、余り。 だから、剰余は私たちのように、その残りを与えます 除算の結果に反対しました。 DAVIDマラン:そして実際、 私たちは、この便利を見つけることができますどのような 以下のためのいくつかの問題で、それはあります それは、必ずしも1ではありません あなたが持っているしたい場合 自分自身を制限する効果 番号の範囲に 何かを通じ0のような、 あなたの周りラップする剰余を使用することができます 以前の20億様より または40億価値こと 私たちは、講義での話をしました。 マリア:ええ。 とにも私達はかもしれない「貪欲」です。 DAVIDマラン:はい、で 問題は、同様に、1を設定します。 マリア:ええ、素晴らしいです。 DAVIDマラン:良いヒント。 MARIA:申し訳ありません。 ブールはそうexpressions-- ブール演算子の場合、 我々はについてのすべての話をしようとしています これらのことから、あなたはここを参照してください。 だから今、私たちは2を持っています 等号はイコールにリストされています。 だから、それらは、比較のためのものです。 これまでのところ、私たちは、1つは等号を見てきました。 我々が割り当てたときです 変数に値。 だから我々は、その後、int型のn = 5見てきた場合 私たちは、変数nに5を割り当てました。 しかし、我々はのために==を使用する場合 比較は、我々があれば、n個の== 5を確認することができます。 N == 5あれば、それは本当です。 だからブール演算子 基本的に、私たちを許可し、 ブールを評価します TrueまたはFalseに表現。 だから私たちが持っているequals--ありません 感嘆符とequals。 だから我々はまた、Nかどうかを確認できました 等しくない5--のでN!= 5。 より小さいか等しい、より少ないです、 より大きいか等しい、より大きい、 し、我々は論理を持っています ANDと論理OR。 そして、それらは、私たちを評価することを可能にします 一緒に複数のブール式 基本的には一緒に来て 1全体のブール式。 私たちは番号を検索したいのであれば、言います それは、5よりも大きいが、15未満 同時に、我々が使用します nがあるかどうかを確認するために、論理AND演算子 5より大きい&& nは15未満です。 DAVIDマラン:そしてここで、 あまりにも、それは本当に簡単です 早い段階での偶然 単に1つのアンパサンドを使用します または単一の垂直バー。 そして、うまくいけば、コンパイラは、意志 なぜなら、彼らは実際にあなたに叫びます 非常に異なった意味を持ちます。 好奇心旺盛な人のために、彼らがしています ビット単位の演算のために使用さ 個々のビットで動作します。 しかし、あなたはここではそれらのペアをしたいです。 そして、超重要なことです 最初の1、等号、 等価演算子としては、これは 代入演算子に反対しました。 MARIA:そして垂直バーがあります 削除と復帰の間に位置します。 DAVIDマラン:はい。 典型的なUSキーボードで。 MARIA:うん。 それでは、右にジャンプしましょう 条件文。 スクラッチでは、あなたがきました すでに見た、おそらく、 あなたができるようにするif文 何かが真であるならば、チェック 何か他のことをします。 だから、と思っているかもしれません あなたのスプライトがあるかどうかを確認してください 他のいくつかのスプライトに触れます または画面の境界線。 それから、あなたがしたかったかもしれません ゲームを終了するか、他の何かをします。 そのための構文そう 「IF(条件)」です。 だからあなたのスプライトが何かに触れている場合、 その後、中括弧の中にあるん。 その後、我々は、if-else文を持っています。 そうでなければ、私たちが何かを行うことができます 私たちの条件の場合 冒頭でチェックすることは真実ではありません。 スプライトが触れているのであれば ボーダー何かを行う他、これを行います。 だから、そうでない場合は、他の何かをします。 その後、我々は、このために、短い例があります。 もしそうであれば(military_time <12)、我々 printfのしたい "おはよう!" それ以外の我々はするつもりです printfの "こんばんは!" 基本的な例。 DAVIDマラン:良いです。 MARIA:クール。 だから今、私たちはswitch文を持っています。 一般缶内のステートメントを切り替えます 私たちは同じことの多くを行うことができ 私たちは話をしたこと if文で約。 例えば、今私たちが持っています switch文の一般的な形式 それは、私たちが取ることができます Nと呼ばれる変数 そして、多くのと比較 ここで異なる値、 constant1、constant2と呼ばれています。 我々はより多くを有することができます。 そして、それらのケースと呼ばれます。 だから我々は、スイッチを持っている場合 statement--この作品 のみintegers--のために我々が持っています Nです。この場合の変数。 変数nがある場合 私たちは、constant1に等しいです コー​​ドのいくつかのスニペットを実行します または私たちがやりたい何か。 そして、我々は壊れます。 だから、ブレークがあることを意味 switchステートメント 場合実行を停止します nが、constant1に等しいです。 して、あなたのプログラムは続行されます。 それは外に終了します switch文とそれ'LL 何かをし続けます。 しかし、nが等しくない場合 その後constant1、constant2用ケース チェックされます。 だから、nが、その他のconstant2に等しい場合 コー​​ドのスニペットが実行されます。 そして、それは破りますよ それはそれと等しい場合。 そして、我々はないalso--持つことができます 必ず、デフォルトのケースをthough--、 nが等しくない場合に起こるであろう あなたがリストされているのいずれかの場合。 そして、デフォルトの場合には、我々も 必ずしもブレークを必要としません switch文は知ってますので、 それはデフォルトの後に終了する必要があること その場合はケース。 DAVIDマラン:しかし文体、 私たちは常にそこにそれを置きます。 マリア:ええ。 DAVIDマラン:うん。 だから始め場合は特に、 特にうち少ない場合 快適な、私は個人的でしょう ちょうどIFSにこだわるお勧めします およびIFS-よそとのif-else-IF-よそ などの場合のみ 彼らは少しだから より簡単。 これは素敵な最適化である、または 時には審美的にそれ コー​​ドをより読みやすくなります。 そして、実際には、おそらく 我々は問題を参照してくださいよ半ば学期 それだけで良く見える場所を設定 そして、簡単に人間が読むには switchステートメントを使用します。 しかし、心配しないでください あまりにも早くこれにしがみつきます。 マリア:ええ。 あなたは、if文がたくさんある場合は、 それだけで非常に読みやすいではないかもしれません。 それは非常に高速ではないかもしれません あなたはそれを通過するため。 そうすることができますステートメントを切り替えます 同様に、非常に便利です。 そしてまた、ないremember--ません そこにブレークを置くことを忘れています。 DAVIDマラン:これを覚えていません。 MARIA:あなたが落ちる可能性があるため 別のケースから。 それでは、そのような場合を言わせconstant1 その中にbreak文がありませんでした。 その後、我々はを通じて落ちる可能性があります 内側ケースconstant2。 そして、我々は場合に行うにはしたくありません 我々はすでにケースに達したconstant1 それは、nに等しいです。 従って、例えば、我々は変数を持っている場合 クラス番号が含まれているN、 私たちはどのようなことを見てみたいです nが50に等しい場合、クラスは、is-- 我々は、CS50は「印刷するつもりです コンピュータサイエンスI.の概要」 その後、我々は破るつもりです。 以上です。 しかし、nが等しい場合 51に、我々が行っています CS51は、はじめにある「印刷します コンピュータサイエンスIIへ。 " その後、再び、我々は破るつもりです。 しかし、その後、我々はすべて、61、124を置きます あなたが考えるかもしれない他の数、 またはプログラムは行っていません それを認識する。 だから、申し訳ありませんが、私は "、と言うだろう そのクラスに精通していません。」 そして、それは破るために起こっています。 DAVIDマラン:だから、本当に見ることができます ここならば、もしそうでなければ、他のアイデア。 それはのためだけ別の構文です まったく同じ考えを表現します。 マリア:その通り。 今、私たちは私たちの三元の演算子を持っています。 だから三項演算子は持っています 3人は、条件をparts-- 場合何か その条件が真です、 して、何かを行うには その条件がfalseである場合。 だから、基本的には、参照してください。 ここではその構文。 私たちは、疑問符を持っており、 その後the--私たちはこれを呼ぶのですか? DAVIDマラン:コロン。 MARIA:コロン。 ありがとう。 ごめんなさい。 それでは、私たちの例を見てみましょう 我々はthis--感を作ることができるかどうかを確認 class_numの== 50。 そこでここでは==私たちのブール演算子を参照してください それは変数class_numを比較 50。 だからclass_num店整数。 そして、その整数の場合 その後、我々はしている、50に等しいです 保存しようとして「デビッド・マラン」 文字列の教授の内部。 クラス番号がない場合 同じ50、「ないデビッド・マラン」 教授になるだろう。 DAVIDマラン:ありがとうございます。 そして、これはと等価と思われます あなたは一目見ただけで、何を、と思いますか? マリア:私にはそれはそう if-elseステートメントのような。 DAVIDマラン:うん。 実際に、これが一種であります きれいな1ライナーの、 そう実現するために、話すこと 正確ロジックのif-else しかし、1つのステップですべてをやっ。 マリア:その通り。 うん。 その場合-else文かもしれません 多くのスペースを取ります。 彼らはあまりにも長いかもしれません このような単純なもの。 だから、これは非常にすることができます 簡潔で非常に素晴らしいです。 だから今、私たちは見に行っています 何度も何度も何かを実行し、 そうするためにチェック 複数回の調整 して、何かをし続けます その条件が真である間。 だから、これは私たちをもたらします うまくしばらくループへ。 左側には、我々が持っています 私たちの最初のwhileループ。 何かが真である間そこで、 何度も何度も何かをします。 だから、私たちのことに気づくようにしてください 条件は、ここで一番上に検証されます。 我々は呼んで私たちの第二loop--と一方 DO-しばらくは、私たちが何かをloop--こと、 その後、我々は条件をチェック。 そして、その状態であれば 真であり続け、 我々は戻って、再びことを行います。 だから、主な違いはどこにあります 条件がチェックされます。 そしてコードはなることはありませんあり 条件がない場合に実行 whileループと真。 DO-一方で一方 ループ、我々はコードを持って それは、常に少なくとも1回実行されます。 そして、しばらく条件 真であり続け、 我々は戻って、内側に再び繰り返すことができます。 では、なぜあなたは私たちが使用することになると思います whileループオーバーDO-whil​​eループ? 右。 だから我々は、プロンプトを表示したい場合 入力のいくつかの並べ替えのためのユーザ、 私たちはそれらを聞いてみたい場合 自分の名前を入力し、 我々は、少なくとも一回、それらをお願いしたいと思います。 そして彼らは、入力しない場合 その名前、私たちではありません 再びそれらを求めるつもり 我々はすでにそれを知っているので。 しかし、彼らは入力しない場合 その名前、またはそれらは、もし 何かを入力します。 明らかではない名前、 我々はまだ続けたいです 自分の名前のためにそれらを求めます。 DAVIDマラン:そして講演で、私たちはいずれかを持っていました 取得正の整数で、このような たとえば、には何もありません あなたも持っていないので、最初に確認してください int型を頂いております。 だから我々はthis--をしたいです user--からint型を取得します おそらく、それをチェックし、 何度も何度も何度も。 マリア:その通り。 loops-- OKの場合。 ループのために私たちはほとんど行うことができことができます まったく同じこと、同様に。 それは実際にまったく同じことです。 だから、何もありません あなたは、forループを使ってできること あなたがことができないであろうこと 一方、ループを実行します。 しかし、ループに少し見えるかもしれません もう少し構文的に複雑 彼らが持っているので、 三つの部分内部のもの 直前でした 一方、ループと条件。 そのあなたの海だから最初の部分、 左端、我々が持っている "int型ドワーフ= 0" だから、これはどこにある我々 私たちの変数を初期化します。 その後、我々は、セミコロンを持っています "ドワーフ<7" だから、これはどこに出ています 状態は実際にあります。 だから、我々が持っているであろうものです しばらくだけ入れloop-- 「ドワーフが7. <ながら " ここでは、それはに行きます 私たちのforループの真ん中。 だから「dwaves <7 " そして、私たちの最後の部分は「ドワーフ++」であります これは私達が私達の変数を更新場所です。 だから、重要なこと 実現するためには、このことです ループのためにこれを通過しようとしています 7回と7回実行。 だから我々は7を持っています ドワーフは、彼らがすべてです 私はここにいるよ」、と言うつもり あなたを助けるために、白雪姫 " 彼らは準備ができているので、 白雪姫を支援します。 ループは、我々が行っているだろうがと 初期化と更新 ない状態の内部には、再び、しかし、 前またはwhileループ内のいずれか ていることを確認するためにwe--理由 私たちは常にそれらの部品が必要です。 だから我々は持っていることを確認します 彼らは、我々はまだそれらを追加しましたでしょう だけでは括弧の中、上。 DAVIDマラン:だから、それはlike--見えます 講義では、例えば、 私はほとんど常に、のように、私を使用して、 nと、かなり退屈な変数。 あなたがより多くを使用することができますように見えます 巧みあまりにも、変数の命名。 マリア:ええ、それは実際には非常にうれしいです もう少し説明的な変数を使用します 他の誰かがいる場合は特に理由 あなたのcode--を読ん多分あなたはしている年生 またはあなたが協力している場合 somebody--と あなたは、ことを確認する彼ら 何をやっている理解しています。 OK。 だから、これは非常にfunky--ものです ループの内側のforループ。 我々は前にこれを見てきた場合、私は知りません。 おそらくありません。 しかし、我々は実際にthis--を持つことができます だからではなく、ループのループ。 だから、誰もが多分歩くことをしたいん 私ここで何が起こっているのかを介して? DAVIDマラン:私は刺しを取りますよ。 MARIA:クール。 DAVIDマラン:OK。 だから、私たちはものを印刷したいですspoiler-- それは、右下の隅にです そこ。 MARIA:右。 ええ、ええ。 DAVIDマラン:だから我々はちょうどました そこのサンプル出力を置きます。 だから私はから推測することができます あなたがしている最上位のループ 行を反復処理 最も外側のループ、いわば。 そして、あなたは反復処理しています 最も内側のループの列。 そして直感的に、この うまくいけば、理にかなっている必要があります 理由の性質によって、 私たちが見てきたすべてのプログラム である前に、printfの、 私たちが使用している機能、最終的には、 ものを印刷する機能を持っています ラインによって、本質的に行。 同様に、一度あなたが出力されました 新しい行は、あります 何も戻って倍増しないし、何かを印刷 少なくとも、画面の方が高いです このようなprintf関数を使用していません。 だからその点で、それはなります 意味、その最も外側のループ 行を参照する必要があります 各指定した行のため、 あなたがしたいとしています その後、XXXXXをプリントアウトし、 次の行、XXXXXに移動します。 だから、行が最初に来ます。 そして、それぞれの中 行は、あなたが列を印刷します。 あなたはそれを行うにしようとした場合 反対、それはおそらくないだろう あなたが意図したとおり出てきます。 マリア:ええ。 私達はちょうどに戻ることができませんでした printf関数と前の行。 DAVIDマラン:そして、何が面白いです スコープについて今日のチャットあたり、 実際に、行がint型であるということです それは、一番上のループ内で宣言です。 しかし、それはまだであることがわかり 内側に、いわば、 その中括弧 直後、 それは技術的にはないにもかかわらず、 それらの中括弧内。 だから行がためにスコープ内にあります コー​​ドのスニペットの全体、 ループの外側の内側の両方 そして、ループの内側の内部。 しかし、対照的に、ここで 列は、スコープ内にありますか? 変数の列? うん、内部のみのループインチ 我々はアクセスしないので、それは大丈夫です それにその中括弧の外。 私たちはすべてが新しいプリントアウトです そこに非常に最後の行。 実際にはOKであるように。 だから、これは効果があり、それは、のように見えます 3行4列をしています。 MARIA:右。 したがって、最初の我々の最初の行を通過します。 そして、ちょうど私たちの最初の行に、我々が行います 最初の行の内側の4つの列。 だから我々は、4つのXのをプリントアウト。 そして、我々は、以来、forループを抜けることができます 我々はすでに4のXのをプリントアウトしてきました。 そして、私たちは新しい行を印刷します。 そして、我々が通過します さらに2つの行の同じプロセス 3の合計を行います。 DAVIDマラン:そしてそれはです注目に値します フォントのちょうどアーティファクト、事実 そのサンプル出力 そんなに背が高いようで、 より多くのがありますかのように 列よりも行。 しかし、それは単にXためです それは幅よりも背が高いです。 つまり、そこに起こっているものすべてです プラス線の間の空白。 MARIA:右。 クール。 DAVIDマラン:すべての権利。 だから、問題を簡単に見ると、1を設定し、 任意の質問をお受けしてから、休会? 大丈夫。 そこで問題に3つがあり、いずれかを設定します 主要な課題、最終的に。 しかし、最初に、あなたが見つけることができます 問題が設定されていること 多くのと同様の仕様、 psetこの秋には、あなたを歩くしようとしています いくつかのウォームアップ演習を通じて、 いくつかのリソースをあなたに指摘 あなたがよく、または可能性があること すでに見ていません。 例えば、CS50 ショートパンツのスイートを持っています、 短いビデオこれは、 ないこのとは異なりますが、その 非常に話題ですspecific-- 多分5分、 ループの長さは10分以上 条件にまたはアルゴリズムに 以降の詳細 高度なトピックだけでなく。 そして、我々は一般的に埋め込みます 問題にそれら セットの学生ように 持つリソースを持っています 持っているかもしれない材料を確認します すでに講義やセクションに出てきます。 しかし、この方法は、それはより集中です 自分の指先で、より。 また、問題に埋め込む傾向があります ウォークスルーと呼ばれるものを設定します。 だから、ほとんどすべて私が行う例 講義では、ここではステージ上で、私たちも カメラで撮影しました より遅いを進め、 私がより親密なウォークスルーについて そのコードの私のラップトップ、行ごと クラスでは、私たちはしばしばだろうとそう 何かまたは誰か流し読み と差し挟むます 質問に答えます。 しかし、それは必ずしもシンクしません。 聴衆の中に皆のためです。 だから、コードのウォークスルーを見つけることができます 例のほとんどのために あなたように、私たちは講義でここで行うこと 自分のペースでそれを介して歩くことができます 巻き戻しや早送りまたは あなたが好きな場合は、完全にスキップ。 多くの場合、いくつかあります ウォームアップの質問こと の並べ替えをお願いします この材料を強化 あなたが前に快適だということを確認してください あなたはPSETの残りの部分を続行します。 そして、もちろん、 PSET自体があります。 そして、ものの一つ 我々は非常に慎重に CS50に行うには、ほとんどすべてのつまらないです または知的つまらないです 機械的なステップその あなたは何をする必要がある場合があり ほとんどの場合、非常によく文書化されています。 用語の過程で、我々はよ より多くの修辞的な質問をし始めます 以下のように、このまたはそれを行う方法を覚えていますか? しかし、一般的に、あなたは見つけることができます 問題セットはあなたを得ること 力学を通じ 何かのように 面白い、知的挑戦 最終的にあなたに生徒を残しています。 ことで、Zamyla、我々へ 講演で、今日を参照し続け、 私たちの長年のスタッフのひとつです また、ウォークスルーを保持しているメンバー マリオのよう​​な特定のpsetの問題に 今年水ではないものの、貪欲。 そして、それは、それらの中です ウォークスルーその彼女は、多くの場合、 ためのヒントやコツを提供しています あなたに言って、決して進まないようにする方法 正確に何をすべきかが、 条件のようrather--、 あなたが与えwill--場合、少なくとも そのようなアイデアのカップルはそれは、あなた次第です 最終的に、決定します どのようにそれらにアプローチします。 MARIA:ソートの高レベルのような 何のロジックの理解 私たちは何をするあなたを求めています。 DAVIDマラン:その通り。 そして、実際には、Zamylaの ウォークスルーを意味しています 頻繁に答えるために 質問を 私は場合は特に、始めたん これらの長い仕様は、 すべてのテキストを指定して、少し手ごわいです そして彼らはそれらを持っているイメージ。 あなたが見つけることができます、だからwater.c あなたはそれを完了した後、 実際に比較的簡単です。 絶対にたくさんあり​​ます あなたが強打に行くの しようと壁にあなたの頭 それはコンパイルていない理由を把握します または、なぜそれが正しく実行されていません。 しかし、あなたが終わったら、 それにしたら 任意のと格闘いくつかの時間を費やし あなたが持っている可能性があるバグの、 あなたはそれがだことがわかります 非常に短いプログラムです。 それはほんの数で行うことができます コー​​ドの行は、ほとんどの 我々は、次の場合、すでに講義でここに見てきました あなたは右のビルディングブロックを組み立てます。 そして、私たちが示唆するように ここで、それは頼むために起こっています あなたはどのように多くの分を指定します 誰かがキャンパス内にシャワーを浴びています。 我々は問題で指定 水の流量を設定します 以下のような、中、低流量シャワー 多くのとなりのサインフェルドクリップのような頭、 昨日見ましたか その反対。 そしてあなただけの持っています 数学のビットを行うには、 伝えるためにCを用いた演算をreally-- 私たちの水をどのように多くの、おおよそ、ボトル 私たちがしている場合には同等です n個分のシャワーを浴びています。 さて、mario.cでは、これが起こっています 少し長めのプログラムとすることができます。 それはまだ、この長くなることはないだろう。 わずか数行water.cよりも長いです。 しかし、それはチャンスになるだろう 古い学校マリオを再現します スーパーマリオのピラミッド 兄弟またはいくつかの後続の。 それはきれいに見えるようにするつもりはないです またはそこにそれと同じくらいカラフル。 私たちはほんの少しハッシュタグを使用するつもりです 私たちは、画面上にここに持っているように ASCIIテキストを使用。 しかし、それは同じ考えを近似します。 そして、それはなるだろう 一目見ただけでそれを行使 ただかなりsimple--ようです 簡単なピラミッドを印刷します。 しかし、カップルの特徴があります ここで興味深いこと。 の右端ことに注意してください ピラミッドは、実際には幅2を持っています。 だから、同じ2があります 高列、その それが少し必要になります 作るために思考のビット あなたは正確に正しいことを得ることを確認 ただ完全に傾斜したに反対 ライン。 だから、コーナーケースのビットです しかし、実際のゲームと一致します。 そしてそれはまた、最初は非自明です ホワイトスペースを印刷する方法を一目。 だから私は見たとき サンプル出力here-- それはspec--でもこれだけです 長方形のようなルックスの種類、 しかし、対角 矩形は、切り落とされ​​ています そして、それはちょうど空白は、いわばです。 そしてそう頻繁に尋ね 質問はここにも、常に、 どのように私は、ハッシュタグを移動します 右にオーバー? またはどのように私は空白を印刷できますか? そして、それは実際に簡単です ほとんどの学生が考えるより。 右? あなただけのことで、視覚的にそれを近似することができます 一度か二度、スペースバーを打ちます 3回。 だからにもかかわらず、printf関数とほぼたち 常に文字列または整数を印刷 またはhello "のような単語、 世界 "や単語の一連の、 あなたはまた、単に印刷することができます 引用符、スペース、引用終わり。 そして、それは実際に得られます あなたそこにホワイトスペース。 だから、心の中でそれを維持し、 これを考え過ぎるしないでください。 あなたは本当にする必要があります 行によって行毎に決め、 ないあなたの例とは異なり、 それらの前に、どのように多くの瞬間 列が空白であるべきであり、 どのようにそれらの多くは、ハッシュタグでなければなりません。 それは少し時間がかかりますが、それはです ある種の最終的な論理パズル。 マリア:ええ。 しかし、行ごとに行くのロジック ここで非常に有用であることが起こっています。 DAVIDマラン:うん。 私は、サンプルコードでは、あなたもgave--思います それは完全なプログラムではありませんでしたが。 あなたはまだint型とメイン必要 ボイドとの#include stdio.hに、 講義から多くのもの。 しかし、ビルディングブロック そこにあるように見えます。 そして、最後に何かあり もう少しのアルゴリズム。 だから、いつでもあなたのことが判明 CVSや任意のコンビニエンスストアに行きます そして、誰かがあなたを手で 変化としてレジ法案やコイン、 それは彼ら、人間ことが判明し、 彼らはそれを知っているか否かを問わず、 おそらく何を使用しています 貪欲アルゴリズムと呼ばれます、 それによってあなたが負っている場合、たとえば、$ 21 変化何らかの理由理由 あなたは非常に安価なものを買って CVSでの非常に大きな手形で、 かどうかは本当に迷惑になります レジ係はあなたに21枚のシングルを与えたか、悪化 まだ、硬貨の全体の多く。 むしろ、合理的な人は何ですか おそらく何をするつもりは、彼らがつもりです $ 20-、次に$ 1札などをつかむために その場合の手あなただけの2法案。 MARIA:だから彼らは最小限にするために探しています 彼らはあなたに戻って与える変更。 DAVIDマラン:その通り。 そして、同様にコインと同じ契約。 あなたが負っている場合は、$ 0.50と言います うまくいけば、あなたは50ペニーを望んでいません。 代わりに2たい たとえば四半期、。 さて、これは仮定しません レジ係があることを そのすべての宗派の十分な 彼または彼女はあなたを与えたいと思うかもしれません。 しかし、我々はあなたが負うことになります 問題のように多くの。 そして目標は、最終的にあります Cコードで貪欲なアルゴリズムを実装します。 したがって、ユーザーが許可され どのくらいで入力します 変更は、彼または彼女は、ドルを負っています セント、浮動小数点のいくつかの種類 おそらく値。 そして、あなたが数学を行うことがあり、 よく、アルゴリズムを見つけ出します、 私はどのように多くのコインを与えることができます あなたはあなたを与えるために、最小限 変化の正確な量。 しかしがあるように起こっています ここではいくつかのトリッキーな部分は、右? 全体があります同様に 不正確の問題。 マリア:その通り。 だから、浮動小数点 値が不正確を持っています。 我々は、今日の講義でこのことについて話しましたか? DAVIDマラン:私たちはやりました 講義の最後の時間。 私たちは、不正確について話しました。 そして、あなたはユーザーをだますする必要はありません 彼または彼女が負っているどのくらいの変化。 だからウォークスルーで 問題は、仕様を設定し、 のように、最終的には、いくつかの考えを与えます あなたはそれらの不正確さを軽減する方法 エラー、潜在的に。 それはのために、確かに、回避可能です 私たちが話している入力。 そして、実際には、pennies-- 多分私達はZamylaに延期しますよ、 私はそこのトリックのために、と思います。 だから最終的に、あなたが見つけることができます 問題の進行今週、 かなり小さいの最初、 次いで中、少し大きいです。 それらのすべては、建物を使用 先週からのブロック、 このスーパーセクションから、 問題セットの仕様 無数のリソースであなたを置きます。 しかし、まだ、すべての苦労であれば、 特に少ない快適なものの中 事前の背景と、 営業時間に来て 月曜日と火曜日にと 水曜日と木曜日。 経由で議論CS50に行きます もちろんのウェブサイト、 これを介して、あなたはチャットすることができます スタッフやクラスメートと。 しかし、最終的に、私は思います 最高のアドバイスはただ早期開始されます。 それはあなたのクラスのようなものではありません 水曜日にのpsetを開始する必要があります 夜、または悪化木曜日の夜。 マリア:私の最高のアドバイスがあります 月曜日までに開始されているします。 DAVIDマラン:月曜日。 だから、無already--開始していない場合。 しかし、たとえそうでない場合は月曜日、その後火曜日。 より良い早く。 そして、それは理由です コー​​スは、非常に多くの後半の日を持っています あなたのビットを与えるために 心理的な圧力 以前の開始が、まだできるようにします 物事は時間がかかるときのものが滑ります あなたが予想よりも。 MARIA:そして、あなたはを利用したいです あなたができる限りの営業時間は、あまりにも。 DAVIDマラン:ご質問? 大丈夫。 さて、なぜ私たちはここに延期ませんか?