ROB:すべての権利。 最初のセクションにようこそ。 私はロブだ。 ジョセフ:私はジョセフです。 ROB:だから我々は正しいインチ飛び込むよ 話を最初にすること アプライアンスです。 ので、うまくいけば、あなたのほとんどが持っている すでにそれをダウンロードしました。 しかし、あなたは説明書を見ることができます cs50.net/applianceで。 神ああ、今私は自意識だ。 私はまだそれを聞く。 JOSEPH:うわー、それはのように聞こえる それは混乱です。 ROB:だから何人かの人々が抱えている これで問題は、そうなるまで待っていない に設定し、問題の最後の分 試してみて、アプライアンスを解決し、 それが動作していないかを判断するための。 JOSEPH:そして何かが動作していない場合は、 そしてあなたがに行くことができ、助けを必要とする cs50.net/discussionたち あなたのフォーラムを持っている あなたの質問を投稿することができます。 そして、我々は最終的に彼らに取得します。 ROB:すべての権利。 だから、これはどのようなアプライアンスです のように見えます。 繰り返しますが、それだけで完全に分離します オペレーティングシステムは、内で実行されている どのようなオペレーティングシステムの使用 あなたのラップトップ上で実行されている。 そして、あなたであろう主な対象 使用しているgeditのです。 だから、うまくいけば、これはすでに おなじみのサイトに。 ターミナル。 そして、あなたはまたChromeを実行することができます アプライアンス内。 人々のカップルがあった インターネットを報告している人 アプライアンスでは動作しません。 そのうちのいくつかは、単に仮定しています があると想定されていないことを アプライアンスでのインターネット。 しかし、はい、そこに想定されている インターネットであると。 私は今それを言うだろうが、それはしていません 本当に何を意味している。 インターネットは機能していない場合は、 これはあなたが必要とする傾向があるものです それを修正するために実行する。 あなたは、インターネット上の問題がある場合は、しないで それを覚えて、それを上に掲示 議論し、我々はそれを実行する、と言うでしょう。 しかし、インターネットが機能する必要があります。 だから、唯一の他の事 - ええ、何もしない それ以外は本当に関連しています。 しかし、私はちょうどそれを指摘したかった - この右下隅に表示されます。 だからあなたの電気器具の各々がすべき IPアドレスを持っている。 そして、後学期は、このIP アドレスは、より関連性の高いになるとき あなたは、ウェブP-セットで作業しているので、 あなたがアクセスできるようになります ウェブサイトあなたから取り組んでいる このIPアドレスを使用して、ローカルクローム。 しかし、私がIPアドレスを使用するようにしたい のための - そしてあなたがこれを行う必要はありません、私は それを指摘しておきたい - ここにある。 だから、これは上のターミナルウィンドウで 私のMacは、これがされていない すべてのアプライアンス。 そして、あなたは何を調べることができます このコマンドはありません。 しかし、私は直接、SSHに行くよ 私のアプライアンスに。 私はIPが何であるかを知らない。 JOSEPH:168 - 168.224.1.0。 ロブ:だから一度、私は終わりだ これで、ログインします。 今、基本的に、これは同じである 私のアプライアンス内でターミナルウィンドウ。 だから私はかなり、実際に働いたことはない アプライアンス自体から。 私はいつもそれが起動してい 最小化され、バックグラウンドで そしてその中にSSHed。 これの問題はあなたが進んでいないさ 簡単にgeditのを使用できるようにするには 直接から。 しかし、あなたは本当の、クールになりたい場合は、 ハッカーは、その後、に慣れる必要があります とにかく、コマンドラインのテキストエディタ。 VimとEmacsやナノ、これらのすべては、そう 別の代替法である。 ナノは最も簡単になる傾向がある。 そして私はそれがありませんがあると思う シンタックスハイライ​​ト。 ああ、いや、それは完全に行います。 だから、nanoを使用することができますので、 1は非常に簡単だという。 あなたはすべてのこれらのコマンドを参照してください。 一番下にある。 この小さなニンジンシンボル。 あなたが前にそれを見ていない場合は、よ おそらく今はたくさん参照してください。 これは、一般的に制御ニンジンを意味し、 キーボードの左下のような 制御文字。 だからここでは、ここで私を言っている - 私はズームインした場合ああ、それは切断されていないだ ように制御、Xはどのように 私は終了するつもりです。 そして、それは私がYを打つことができると言う はい、保存するための、N番のため だからnanoの。 VimとEmacsは少しになりがち 複雑で圧倒的。 しかし、あなたはそれに慣れることができ、 そして、あなたはそれを好きになる。 だから、それだ。 JOSEPH:それをする必要はありません。 ROB:うん。 あなたが探してgeditを自由に使用できます 学期の残りの部分。 したがって、すべてのアプライアンス関連の質問? または、他に何上の任意の考えを持っています 約について話される必要がある アプライアンス? はい。 スピーカ1:あなたにSSHed 事、パスワードクリムゾンでしたか? ROB:うん。 ほとんどすべてのパスワード アプライアンスに起こっている クリムゾンされるように。 スピーカー2:本物のIDEのようにインストールします アプライアンス上で、それが動作します? ロブ:私は、Eclipseを持っている想像して Fedoraのバージョン、その場合には、はい、 あなたはそれを行うことができます。 それはおそらく、それは本当に価値がない。 スピーカー2:わかりました。 だから、おそらく私がしたい場合は簡単だ Eclipseを使用して、ネイティブのを使用し、 その後にアップロードする - ROB:ああ、それはまた、おそらく簡単です。 しかし、あなたはそれを動かすことができるでしょう アプライアンス内。 JOSEPH:とカメラのための質問 あなたが別のものをインストールすることができ、た アプライアンスの内部のIDE? ROB:Eclipseがあること IDEの一例。 他のアプライアンスの質問? わかりました。 だから我々は現在、コマンドラインに移ります インターフェイス関連のものなので、CLI。 そして再び、私はちょうどで動作するように行くよ ここで、これは同じであるため、 ターミナルウィンドウで作業 アプライアンス内。 どのようにそのフォントを探している? それは十分な大きさ? わかりました。 だからコマンドがたくさんあり​​ます あなたはかなりに慣れる必要があります 学期を通して。 ナビゲートするための大きな2はLS、リストである このディレクトリ内のファイル、および CD、そのディレクトリを変更する。 だから私は、デスクトップに移動して、することができます 非常に一般的なパターンはにCDである ディレクトリとすぐにLS ディレクトリ内のものだ。 人々はまた、時々気づいていません そのタブ補完はものです。 そうのようなCD、VH、その後、私はTabキーを押してください。 私は入力することはほとんどない 全体のこと。 そして私はタブを打つ続ければ もう一度、それは自動的によ 私のためのリストを開始します。 だから私は、CDのバーチャルホスト、ローカルホストすることができます。 そして、それはただになるだろう - ケースでは、言葉を聞いたことがない 以前は、ディレクトリはちょうど別の単語である フォルダの。 だから今は、表示された場合 - それでは一番上にそれを持ってみましょう。 だから今、あなたは、括弧内に表示された場合 少しチルダ、スラッシュ、バーチャルホストを参照してください。 スラッシュ、ローカルホスト。 そうチルダ、すなわち指す 私のホームディレクトリにコピーします。 それはあなたがしているディレクトリです あなたはインチSSH時点の それはあなたがときにいるディレクトリの あなたは、ターミナルを開きます。 作業を開始する場所、それはね。 だから私は自分のホームディレクトリの中だけど、 と私は、仮想ホストの内部でよ 私のホームディレクトリのディレクトリの内部。 そして私は地元の中だ その内のディレクトリをホストします。 だから、CDを使用して他のいくつかの有用なもの - またはよく、一般的には、そのように常にドット 現在のディレクトリを表します。 CDには、ドットはかなり価値のないコマンドです。 しかし、それはへの変更だ 現在のディレクトリ。 の面で、より有用な1 CDは、ドット、ドット、です ただ1つ上のディレクトリに移動します。 そして、これらのことに注意してください - 私は別名を言いたいが、これらの 記号、ドット、ドット、ドット、これらの作業 あなたがしているほとんどすべてのコマンドの 実行していることを考えされる予定。 あなたができるでしょうどこにそうようなCDはおそらくです ほとんどを使用して、これらはありません ちょうどCDが理解して物事。 これはかなりのものにあなたの全体の コマンドラインは理解しています。 プログラムの多くは理解して ドットとドットドット。 だから、他の有用なもの - CD、ダッシュ。 だから私を持参しようとしている 私が入った最後のディレクトリ だから、時々私のようなものをするつもりだ、 ああ、私はここで働いています。 そして、私は何かといくつかのエラーが表示され、 私はに行くことによって、それを調査しに行くよ どこかにいくつかのランダムなディレクトリ。 それがいただければと、私は知らない そこにさせて頂いております。 それがします。 だから、私は私が好きなことを行う このディレクトリに。 何とか、何とか、何とか、何とか、何とか。 そして、私は私が望む、すべての権利、のようだった 前に私があった場所に戻ります。 CD、ダッシュ、そしてそれはすぐに戻って私をもたらします。 だから私は多くのことをスローするつもりだ 今日あなたにこれらの。 私はあなたが覚えることを期待しないでください それらのすべて。 それはちょっとだけ知っているのは 彼らは存在していること。 し、後であなたが似ているときに、 うーん、私はに戻りたい 私はちょうどにいたディレクトリが、ああ、、待って そのような何かが存在する。 あなただけで入力する必要はありません もう一度ディレクトリ全体。 JOSEPH:最終的にはあなただけでしょう 何度も何度もそれらを使用し、 それは筋肉の記憶になるでしょう。 ROB:うん。 私が前に言ったので、どのように、そのチルダ 自分のホームディレクトリです。 だから私は、CD、チルダができます。 しかし、私もする必要はありません もし私がそれを行う - 私は戻っているディレクトリに移動します それは無意味例ではありません。 私はCDをやるなら、それもだ と同じ、私のホームディレクトリに移動します。 私は、コマンド、K.を行う JOSEPH:また、クリアタイプすることができます 言葉、それは、それをクリアする必要があります。 ROB:そして、私は、コントロールを考えて、 Lもそれをしない。 異なる方法でそのようにたくさん。 私はいくつかの違いがあると思いますどこに 明確かつ制御、Lのものだ 本当に一番上にプッシュし、 私はまだ戻ってスクロールすることができます。 コマンド、Kは文字通り破壊 すべてのもの、そしてあなた までスクロールバックができません。 少なくとも、それはです それはiTerm2でどのように機能するか。 私はどのように他のことを知らない - オハイオ州。 SSHingと、Windows上でいるのであれば あなたはPuTTYをダウンロードする必要があるとしている SSHには、Windowsにはないので、 内蔵のSSHのツールのように持っている。 直接のMacから、次のことができますだけで、SSH ターミナルウィンドウから。 [OK]をクリックします。 質問? LSは、その何かがに慣れる これらのコマンドのほとんどがあると - まあ、私はちょうど1をするつもりだ。 LS、ダッシュ、L。 そうダッシュ、Lは、我々が行っているものです LSにフラグを呼び出します。 これらのコマンドの多くは、フラグを持っている あなたが彼らに渡すことができます。 したがって、この場合には、lはフラグダッシュ それは私に完全なを与えるためにそれを伝えます すべての情報の一覧 これらのファイルの。 だから我々はデスクトップがあったことをここに見る 12時54時7月30日に修正された。 ダウンロードは、9月6日に変更されました。 これらは、現在のサイズであり、 これらのディレクトリのバイト。 あなたが理解する必要はありません このすべて。 左のこのようなものは、これらdrwx年代、 それははるかに関係してきます 後であなたがに対処しなければならないとき - つまり、アクセス権を持っている人に関係しています これらのファイルを見ること。 だから、あなたは上のユーザーだけではなかった場合は、 このコンピュータは、次のことができるようになります たとえば、[OK]を、私は1つだけでなければなりません このファイルを見ることができたりアイム 誰もができるようにする予定 このファイルをご覧になる。 だから、私のコンピュータ上で他の誰か このファイルを見ることができます。 私もこれは何か分からない - これは何をするのでしょうか? JOSEPH:私は実際、非常に分かりません。 ROB:いいえアイデア。 JOSEPH:あなたが知らないなら、存在し あなたが使用できる便利コマンド 出力が何を意味するのかを教えてくれます。 そして、あなたは男に入力した場合 コマンドの前に - これM-A-N。 ROB:男。 だから、男は別の1つです それは非常に便利です。 そして男は、LS。 だから、manページ、それらは両方とも持っている あなたが使うことになるだろうなコマンド コマンドラインで、彼らはまた、持っている 関連性があるでしょう機能 あなたは男ができるのでCと - と私は3を無視していました。 しかし、男3のprintfは持参しようとしている printf関数のCバージョンアップする。 私は男のprintfを行う場合しかし、これは コマンドのprintfを起動しようとして つまり、コマンドラインで実行されます。 だから男、LS。 manページはかなりすることができます 圧倒的。 ここでは、しかし、あなたはこのリストが表示されます これらのフラグの全てのLS 理解しています。 だから我々は、Lをダッシュ​​に行けば、と - 私はあなたにこれを投げるつもりです。 しかし、検索するために、あなたが欲しい 最初の質問にヒットする マークまたはスラッシュボタンを押します。 そうスラッシュ。 そして私は検索することができます 私が好きなため。 だから私はダッシュ、Lスラッシュするつもりです。 そしてそこにそれがあった。 だから、長いリスト形式を使用します。 それは私が何を把握助けにはならない その特定の列には、意味が、私 ここのどこかに想定し それはそれを説明するであろう。 だから、任意のコマンドのmanページを使用 あなたはすぐに理解していないこと。 私は、あなたが男性でも、男はかなり確信している。 オンラインへのインタフェース リファレンスマニュアル。 ああ、多分少しの1の最後の1 関連しているLSは、ダッシュ、。 私はLSを行うのであれば気づく、 私は、これらの5つのファイルを取得します。 私はLSを行う場合、ダッシュ、私 より多くのファイルを取得します。 すべてのこれらの間の共通点が事 新しいファイルは、事前にドットである。 そう規則は、そのファイル、その ドットが隠されていることから始まります。 だから、あなたは、そのファイルを表示したくない でそれを台無しにしたくない あなたのディレクトリのリスト。 それはあなたが明示的に尋ねたときのみですが、 すべての権利、LS、ダッシュ、、私を見る。 Aは、すべてのファイルを表し、 隠されたものを含む。 ので、いくつかの他のコマンド。 ああ、その点での質問? はい。 スピーカ3:あなたがLSを行うと、 、ドット、ドットは何ですか? ROB:ああ。 だから、これは私が話していたものです。 それは同じことだところ 私は、CD、ドット、ドットが好きなことができます。 したがって、厳密に、ドットとドット、ドットがある 一つ一つの中に存在するファイル dotファイルが参照ディレクトリ 現在のディレクトリにコピーします。 だから私のCD、ドット、私は行くよ場合 ディレクトリ内に滞在する。 ドット、ドットは、常に指し 前のディレクトリ1レベルアップする。 だから私は、ログとLSに行けば、ダッシュ、AL、 私はドット、ドットが表示されます。ドットにCD、ドット 前のディレクトリに私をもたらします。 うん。 [OK]をクリックします。 だから、別のかなり重要な コマンドはRMです。 だから、我々が行っているものです 除去するために使用する。 そして、私は実際に別のものをやらせる コマンド最初。 そうします。mkdir。 MKDIRはどのようにあなたができる ディレクトリを作成します。 そして、私は一時ディレクトリを作成します その一時ディレクトリに移動します。 予想通り、それは空です。 しかし、私LS、ダッシュ、、私はまだドットがある場合 ドットを参照するので、ドット、ドット 現在のディレクトリ。 ドット、ドットが指し 前のディレクトリ。 そして、それらは関係なく、常に存在することになる あなたはインチであるディレクトリ そして、これは完全に不必要である コマンドが、タッチ。 それだから私は、それを使用しています ファイルを作成する簡単な方法。 だから、Bに触れる、タッチタッチCだけです と呼ばれる3つのファイルを作成しようとして、 完全に空であるa、b、およびc。 だから私のポイントはのものを作成する 最初の場所は、RMがあるだけのようにある どのように我々はそれらを削除することができます。 そうRM、。 それは、削除、私に尋ねるために起こっている 定期的に空のファイルA? そして私はそう言うでしょう。 私は確かに知っているので、もし私がしたいこと しなくても、そのファイルを消去 プロンプトが表示され、定期的に空のファイルを削除?、 その後、RM、ダッシュ、Fがあることを行っている せずに削除を強制する、と言う旗 でも、私を促し、ああ、あなたは 必ず、ファイルを削除しますか? はい、私は確信しています。 そうRM、ダッシュ、FBだけでしょう 求めずにそれを行う。 それでは、いくつかの複数のディレクトリを作成してみましょう。 します。mkdir、TMP2、CD、TMP2、 タッチBをタッチします。 [OK]をクリックします。 だから今、私は削除したい ディレクトリとしてTMP2。 そうRM TMP2。 あなたがTMP2を削除することはできません、 それがディレクトリである。 だから、ここでの問題は、RMがないということです すぐにディレクトリに取り組む。 それが唯一のようなファイルのためのものだ 非ディレクトリファイル。 そして私たちは何ができる ここRM、ダッシュ、rは。 つまり、再帰を表し、その可能性がある まだあなたに何も意味しない。 しかし、あなたは再帰に到達したとき、 それはより多くのことを意味します。 そうRM、ダッシュ、R、TMP2をしようとしている 再帰的にそのディレクトリに移動します。 だから、ディレクトリTMP2に降り? はい、それでは、その中に行きましょう。 私たちは/ TMP2を削除しますか? はい。 我々はTMP2 / Bを削除しますか? はい。 今、私たちは削除しますか ディレクトリTMP2? はい。 だから今のディレクトリ 内部のすべて それを削除されています。 コマンドは、技術的にはありませRMDIR あなたが削除するために使用できる ディレクトリが、それだけの作品 とにかく空のディレクトリに。 そして、それを見て、みましょうだけ もう一度ます。mkdir、TMP2を行う。 TMP2は、タッチします。 [OK]をクリックします。 私はdirtmp2を削除しようとするのであれば、それはよ ディレクトリは空ではない、と言う。 だから私は、removeを使用しないほとんど決して dirコマンドとにかく、RM、ダッシュ理由 R空のディレクトリで動作します 非空のディレクトリ。 そしてまた、私はしたくない場合は、 の全体のプロセスを経る ディレクトリに下降し、 個々のファイルを削除、RM、 ダッシュ、RF、TMP2。 そして今、それがなくなって。 注意して何か 約RM、ダッシュ、Rfはある。 と言っても、それを入力するために私を恐怖、 なぜならもし私が誤っ 入力するか、何かにヒット。 そうRM、ダッシュ、RF、チルダだろうことなく、 私を促す、Fは求められません 私は、自動的に削除されます 私の全体のホームディレクトリと その中にすべてのもの。 だから、それはだと思うかもしれません 行うには愚かなこと。 とまあ、それはある。 しかし、それはによって非常に簡単に発生することがあります 事故と言う、私が削除したい場合など 私のスラッシュ、バーチャルホストディレクトリ。 そして、ちょうど素早くタイピングにおいて、 私は誤ってこれを行う。 つまり、両方の私の再帰的削除します ホームディレクトリとバーチャルホストのディレクトリ それだけで、この特定のディレクトリにある 今は存在しないために発生します。 しかし、これはまだ削除だろう 私の全体のホームディレクトリ。 少なくともFを持っていないことにより、 それは最初に私を促すだろう。 と私は、いや、ああ、のようになるだろう これを行うにはしたくない。 しかし、人々は、次のような、スラッシュ 私はに取得する傾向がある 常にRF-INGの習慣。 その私ができたとしても、通常のファイルだけRM、 Cは、私はちょうど、RM、ダッシュ、RF、C傾向にある。 あなたはRF-INGいるときだけは注意してください。 スピーカ4:Cは何をしますか? ROB I:CはCファイルについて話されている このディレクトリには、そのRM、C。 JOSEPH:そして、もっと危険な、あなたが使用している場合 星は、それが中にすべてのものを指し、 ディレクトリ。 それでは、私は一般的に行う傾向は、私は意志である ディレクトリに移動して、私がしたい そこにすべてのファイルを削除します。 そうRM、ダッシュ、RF、スター。 ROB:うん。 RM、ダッシュ、RF、スター。 JOSEPH:そして、あなたが気をつけていないのであれば あなたがにいるどのディレクトリ - 私は一時ではありませんでしたが、私が誤っていた 私のホームディレクトリに、 その後、私はすべてを削除します 私のホームディレクトリにある。 そして、私は実際にその前に行われ、き 私はあなたが前にこれをやったと思いますか ジェイは前にそれを行っている。 ROB:私は誤って削除した - そのビットに対してそのコマンドを無視します。 JOSEPH:楽しいわけではありません。 ロブ:だからスラッシュbinディレクトリにある そこよバイナリファイルの束 打ち鳴らすなどの使い慣れたものであっても。 さて、打ち鳴らすと、基本的に、これらのすべて 私は、コマンドで実行しているもの 行は、このスラッシュのbinディレクトリにあります。 ジョセフ:LSのように、ここにある。 ROB:だからLSは、スラッシュ、ドットになる このディレクトリを一覧表示する。 JOSEPH:Rmがこのディレクトリにもあります。 ROB:私は誤って、RM、RF-EDビンを持っている、 私ができる任意のコマンドを削除した おそらく今までにしたい。 その、私はちょうど再インストール その点で、新しいアプライアンス。 JOSEPH:だからときに非常に注意してください このコマンドを使用します。 観客:[聞こえない]? ROB:はい。 それはまたに入るために悪い癖だ。 あなたが気付いた場合、私は今だ - さて、あなたは気づくことはできませんが、 私のズームアップ多分できる。 だから私は今、ルート@アプライアンスです。 そうjharvardは私たちが望むユーザーです あなたはいつも使用しているように。 ルートは、権限を持つユーザーである 絶対に何もする。 私はjharvardいる時だから、気づく 私はCDにしようと - そのディレクトリは何ですか? ああ、根は良い例です。 だからCD、根。 アクセスが拒否されました。 ので、我々はこの物件を見れば - そして再び、あなたがする必要はありません 完全にこのことを理解しています。 しかし、これらの3つのダッシュが言っている 他のを聞かせていないこと このディレクトリにユーザー。 およびディレクトリが、たまたま rootユーザが所有する。 だから、私は事実をjharvardなし 根が入ることを許可されていません1 このディレクトリは、それは私がすることを意味 ときに私の許可を拒否された取得するつもり その中に、CDにしてみてください。 私はルートだとき、私はする許可を持っている を含め、絶対に何もし 重要なファイルを削除する アプライアンスにと 全体の事を破壊する。 だから、入るために悪い癖だ ちょうどあなたの周り徘徊 rootとして、オペレーティング·システム。 私はとにかくそれを行う。 質問? そして、私は、根を終了jharvardとして滞在します。 [OK]をクリックします。 より多くの関連するコマンド。 だから私たちのTEMPに戻って、 mvコマンドは、移動の略です。 あなたが移動することができます。 今、私たちは、Bにそれを呼びたい だから今、それをBと呼ばれています。 それとも、我々は移動したい B 1ディレクトリをバックアップします。 だから今、このディレクトリの空。 私は戻って私のホームディレクトリに移動し、よ ので、我々は、Bはここにあることを参照してください。 ホームディレクトリは、最大で1ディレクトリだった Bはインチだったディレクトリ CPもあります。 そうCPは、スーパーセクションをコピー ドット、テキスト。 私はS、ドット、テキストそれを呼び出すことができます。 今、私たちは両方のスーパーセクションがあり、 ドット、テキスト、およびS、ドット、テキスト。 また、これは、ディレクトリ上で動作します。 私は、単一のファイルを-EDのRF。 そうCP - さて、最初のは、CP、TMP、TMP2を試してみましょう。 だから、ディレクトリTMPを省略すること。 RMに非常に似て、デフォルトの動作 ディレクトリでは動作しないことです。 そして再び、RMと同様に、デフォルト 行動 - まあ、それは動作するようになって ディレクトリと、ダッシュ-Rが先にあります。 だから、再帰的にTEMPをコピー TMP2にディレクトリ。 だから今、私たちは、TMPおよびTMP2の両方を持っている それは、その便利されていないため、TMP 最初の場所で空だった。 TMP2。 それでは、TMP2にTMPをコピーしてみましょう。 そして、我々はTMP2は、ファイルを持っていることを参照してください。 なぜなら、ディレクトリ、および その内部のすべてのもの ディレクトリはコピーされました。 そして、それは多少役立ちます 、あなたが作業していると言えば 問題に1を設定 - または実際に、後で問題セットがあります さらに重要な存在理由 がっつりとなります ファイルや物事の。 しかし、あなただけの分割のためにしたい 第二に、あなたは大丈夫、のようにしている、私は今 別の何かをしようとするつもり。 私はちょうど私の全体PSET1をコピーしてみましょう PSET1バックアップしたディレクトリので、もし 私は私ができる、物事を台無しにしてしまう 戻って私のバックアップディレクトリに移動します。 より適切な方法があります。 あなたのコードをバックアップするバージョン管理が、 これは常にだけで作る簡単な方法です あなたが何かのコピーを持っていることを確認 変更しようとしていること。 そこでエコーはまた、一回のコマンドであること 愚かに一種だけに印刷されます コマンドラインは、まさに あなたがエコーしたかった。 そうこんにちはエコー。 私達はちょうどハイテク印刷します。 世界ハローエコー。 私たちは、ハローワールドを印刷します。 つまり、使われるようになると、あなた コマンドを組み合わせて開始します。 そして再び、あなたは完全に期待していない まだこのことを理解しますが、それはだ 参照するには何か。 そして、あなたは例のためにグーグルでいるなら またはあなたが何をしたいの実現 何かが、それは便利です。 そうしましょう​​のは、一例として、 そのLS、ダッシュ、L。 だからここに私は、出力が表示され LSの、ダッシュ、L。 そして、私はOK、私がしたいと言う ファイルにそれを格納します。 ここでこの出力のすべてが、私が欲しい 別のファイルに入れます。 シンボルよりもそう、この小さな大きく 我々は呼ぶことにしているものです。 私たちは、リダイレクトしている ファイルに出力。 それだから、のは、ファイル何とかと呼ぶことにしましょう どのような私はいつもそれを呼ぶ傾向がある。 だから今我々は我々が持っている参照してください。 右ここ何とかファイル。 そして、私はそれを開くと、私はそれがですがわかります コマンドからの出力を正確に 私はちょうど実行されたこと。 と同様に、次のことができます - これは、ファイルに出力されている場合は、この ファイルからの入力を取得することです。 私のコマンドは何ですか - JOSEPH:私はあなたが使用できると思います おそらく、lessやmore。 ROB:しかし、どのように弱何とかはどうでしょうか? 知りません。 このシナリオになれますよう、様 それがために便利だというのpsetがあります。 JOSEPH:あなたがエコーにパイプにできます。 パイプそれを見るためにエコーにファイルを。 ROB:それはパイプです。 JOSEPH:申し訳ありません。 ROB:すべての権利。 だから、これはファイルに出力されます。 これは、ファイルからテキストを取得している そしてプログラムに引き渡す。 そして、あなたはまたこの男が表示されます。 だから、これは一度に両方を行うの一種である。 そして実際に、私は、2つの新しいを紹介 ちょうどそれを利用するように命令する。 歴史はただで便利なコマンドです のリストを印刷しようとして 私が今までコマンドラインを実行してきたもの。 だから我々は、ここで私が持っているすべてを見る この全体の時間を実行して。 LS年代がたくさん。 そしてもう一つの便利なコマンドは、grepのある その目的は終わっ検索することです パターンを探して、テキスト、まあ、 何でもあなたを探して それがために見てみたい。 ので、ここでの便利な使用が言う、ある 我々は歴史をつかむことを望む。 そして、私はコマンドのために見てみたい 私はどこに - 何が を探すために便利な1? JOSEPH:[聞こえない]? ROB:またはちょうどすべてを探してみましょう 何らかの理由で、触れる。 だから、これは、それがどのように見えるかです。 そして、あなたは完全にする必要はありません それを理解しています。 しかし、アイデアは、ここにある歴史を与えている それがここにいたのと同じ出力 全体をプリントアウトのWHERE 私が今まで実行してきたすべてのものの歴史。 次に、それを渡している - だからではなく、それを画面に印刷する、 我々はにそれを渡したい を探しているコマンドのgrep ワード·タッチのすべてのインスタンス。 などの組み合わせを用い ツールの歴史とgrep、私は、[OK]を、見ることができます ここで私が今までにしたすべてのコマンドだ 実行して、ここでは、やや一般的なものです。 私たちは、一番下にいる。 そしてそれはまた、私に命令を与えている 私はちょうどそれが持っていた走った その中の単語のタッチ。 しかし、パイプはかなり便利なものです。 複数のプログラムを結合する。 そして実際に、それはレットのショートカットです 何とかファイルに私の出力履歴、 私は、ファイル何とかを使用してgrepしてみましょう 私は目を通すしたいものとして。 だから、パイプは単なるショートカットです これらの二つのコマンドのために。 はい。 スピーカ4:[聞こえない]? ROB:はい。 何ですか - ああ。 それではテストしてみましょう。 そう、猫、犬、魚。 だから私はgrepをしたいと思います。 ダッシュは、R、再び、であることを行っている 再帰的なので、私はダウンして下降したい すべてのディレクトリ。 私は、再帰的にすべてをgrepしたい - そして私は、一時的に取得させ この方法のうち。 私を無視。 [OK]をクリックします。 だから私は一時をgrepしたい 単語の魚のすべてのインスタンス。 ので、ここで私がやっているgrepをされている 再帰的に単語の魚のために。 そして星は、これらすべての上に意味 このディレクトリ内のファイル。 そしてそれは、私に拒否されました許可を与えた それはそれを読むことが許可されていないため、 特定のファイル。 しかし、それは、ファイル、テストで魚を見つけた。 私も具体的には、私だけが、言うことができる で、[ファイル]何とかで見てみたい その場合、それが何かを見つけることができません。 私は、ファイル内のテストを見てみたい。 それは、魚を見つけるでしょう。 これはかなり便利なコマンドです。 一般的に知っている。 grepのにはいくつかの選択肢があります 以上のことになっていること フレンドリーなプログラマが、私は傾向がある まだグレップにフォールバックする。 質問? [OK]をクリックします。 他のコマンドはありますか? ああ。 いつも私はちょうど1オフ1 楽しみがcalはさであることがわかりました。 私はこの素敵にいるときので、注意してください フルスクリーンモード、私はのようなトップを持っていない ツールバーか何か。 だから、CALはちょうど私に素敵な小さなを与え 右のカレンダー 今切断し、私が想定しています。 しかし、ちょっといいのコマンド。 JOSEPH:それは[聞こえない]です。 あなたが持つかもしれない他のコマンド 見て打ち鳴らすとmakeがあります。 私たちは、それらの上に行くよ 詳しく以降。 しかし、あなたが取り組んできた場合には PSETは、あなたがすべきである それらに精通している。 ROB:すべての権利。 コマンドラインに投稿された質問? わかりました。 それでは、いくつかに移りましょう C関連のもの。 変数の数学。 [OK]をクリックします。 私たちは、スクラッチで数学を持っていたので、同じように また、C言語で数学を使用することができます 我々は完全にそれに入る前に、 変数は、そのように。 あなたが宣言するときはいつでもあることを覚えている INT XやフロートY、あなたのような変数 それは以前に入力し与えなければなりません 変数名。 だから我々は、これまで見てきたタイプがint型である、 フロート、ダブル、長い長い、どのI 実際に私たちがしている場合はわからない ここまでがわかる。 他のいくつかのものがあります。 私たちは、文字が表示されました。 それはいるようである、短いあります 反対側の長い長いそれはのWHERE 整数よりも小さい。 また、文字列を見てきました。 それでは、文字列に関する特別です? なぜ私はそれがだと言うだろう はなく、かなりint型のような? スピーカ4:それは本当に存在しません。 ROB:うん。 我々は、文字列を持っているので、唯一の理由 あなたがするときからです ハッシュ、cs50.h.を含める そして、我々は、この後の例を見ることができます - ああ、それはそのうまく処理されません - cs50.hは何かをやっているところ タイプの線に沿って DEF、チャースター、文字列。 だから、それは私たちもしないことを言っている char型の星がまだあるか知っている。 しかし、これは我々は、文字列をしたいと言っている。 あなたは、文字列を使用してきた任意の場所 char型のスターを使用している可能性があり、 実際にタイプされているもの C言語で存在する。 しかし、我々はそれに買ってあげる。 ああ、それはすぐに戻って行く。 きちんとした。 BOOLにとても同じこと どこに真と偽。 それは本当にCのビルトインタイプではありません その代わりに、それだけで、これが持っていないです 値はゼロ? その後、我々はちょうど検討します それが偽であると。 これは値を持っていますか - まあ、これはいずれかを持っているん ゼロではない値は? その後、我々はそれが真実であると考えます。 だから、いずれかに該当する、2に該当し、 ゼロ以外のものは真である。 だから、それらはそれらである。 変数の宣言に関する質問や 変数の型、すべてのこと? うん。 スピーカ4:長い長い間、本の中で、 それは長い長いint型でなければならなかったと述べた。 しかし、単に長い長い動作します? ROB:だからこれらのタイプ修飾子。 そうINT X。 だから我々はまた、unsigned int型Xを言うことができます。 我々は、短いのint xを言うことができます。 私たちは、長い長い整数xを言うことができます。 しかし、ほとんどすべてのものの私 今言った、unsigned int型、short int型、 長い長いINTは、あなたが取り除くことができます int型とそれだけと仮定します あなたはint型を意味していること。 ただ意味ので、符号なしX、 - あなたが知っているか、通常のintで、 あなたは、xが負の3に等しいと言うことができますか? unsigned int型を使用すると、することはできません。 JOSEPH:そして再び、カメラ、 質問、違いは何した 長い長いINT間 ちょうど長い長い? ROB:うん。 だから、私はほとんど決して 長い長いint型を記述します。 私は長い長い書き込みます。 JOSEPH:ご質問? ROB:わかりました。 だからの他愛ないリマインダーはどうだ 私たちは、変数を宣言し、初期化する 別の変数と宣言 変数と初期化 1ステップですべて。 だから、変数の宣言と 初期化変数はありません しかし、同じ行に配置できます。 だから我々は、標準的な数学演算子を持っている あなたは、に慣れていること - プラス、マイナス、除算、回。 私達が表示されますを法もあります。 少なくともでは、ありません C、内蔵電源 指数キャレット演算子です。 さて、キャレット演算子があり、 それは、電力ではありません。 JOSEPH:しかし、それは累乗ではないが、 はい。 ROB:キャレットを使用しないでください それが意味することを前提とする 乗のような、または何でも。 だから、いくつかのものは留めておくべき 部門について気に。 私が立っているよ。 だから、初期化の答えは宣言した。 だから我々はフロート答えを言っている 10で割った1に相当します。 小数点以下2桁に答えを印刷します。 そして、これは私のもののようなものです。 把握するためのprintfを人間だろうと 、ドット、2Fは%で一体何を意味するのでしょうか? そして、それはちょうど、まあ、意味 0.2を無視する。 そして%、Fが我々が使用しているものです。 浮いて印刷します。 0.2が言っている、印刷しておくこと 小数点以下2桁に浮かんでいる。 したがって、このプログラムにはバグがあり、あなたは可能性がある 一部の前にこれを見てきました 前のCSのコース。 しかし、そのバグは何ですか? スピーカ5:ゼロ。 ROB:うん。 私たちが言うときので、答えは等しい 1 10で除し、私たちが望む 0.1であると答えます。 しかし、10で除1,1である 整数10は整数である。 そして私たちがで割った整数を行うとき 整数、我々は戻って取得するつもりだ 整数。 だから、10で割った1は0.1である。 それは私たちに整数を与える必要があるため、 それだけで捨てるために起こっていること 小数点以下と言う 答えは0です。 そして私たちは、ここで答える印刷するとき それが0.00を印刷するために起こっている。 JOSEPH:そして、ちょうどノートのように、実際に 後に何捨てる 小数点以下。 あなたが代わりに持っていたのであれば6は、10で割った あなたはそれはあなたを与えるだろうと思うかもしれない 0.6してから、1に切り上げでしょう。 それが入力すると、実際、どうなるでしょう タスクは、それが何であるか低下することである 小数点以下。 だから、0.6は0になりません。 ROB:うん。 そして、我々はそのために切り捨てると言うでしょう。 ですから、int型にキャストするたびに、 小数点以下は切り捨てられます。 だから、そのための修正 - あります 実際に2。 そして私は、その二をするつもりだから この1は、はるかに簡単な修正です。 だから、1修正は山車を使用している 部門。 本当に、あなただけす​​る必要が そのうちの1フロートを作る。 しかし、それだけで多少鮮明だ それらの両方浮かぶようにします。 だから、1.0は10.0である割っ 2つのfloatを分割する。 だから、答えはされてしまう フロートなどサービスは以下の通りです。 正しくここに0.10を印刷します。 とてもうまく機能しないもの そのことについて、まあ、確かに、それは簡単だったさ に1を変換するのに十分 それ1.0行うことで浮く。 しかし、その代わりに我々は2つ​​の整数を持っていたものかどう int型のようにxは1とINT Yに等しい 10になり、その後、我々は望んで xをyで割っ行うには? だから、それだけでは容易ではありません X.0または何かをする。 だから、それに修正を落としている。 だから、キャストは、Cに変換する方法です 1変数の型から別の。 だからここに、1は整数である。 そして目の前に、このフロートを置くことによって、 それは、我々はfloatに1をキャストしている。 だから、これは変換されます 1から1.0。 そして、これは変換されます 10から10.0。 そして、その後のことは同様に挙動 我々だけであった前のバージョン ここで、予想されたように、私たちは0.10を得る それはそれを印刷します。 そして、我々は、次の方法でこれを行うことができます あまりにも変数。 だから我々は、フロートxを言うことができます フロートyで割った。 JOSEPH:ご質問? ROB:だから普通の数学と同様に、 私たちは、演算子の優先順位を持っている。 だから、数学の授業では、より多くの可能性が高いです 操作の順序で呼び出す。 ここでは、正式な用語です 演算子の優先順位。 しかし、演算子の優先順位、または最も 事業者は、あなたが期待するようになります。 だから数学のように、2倍の10です より密接によりグループ化されようとし この10は、2で割った後、2。 操作の順序は、それが2を行います 10倍、10を2で除算し、そして それは20プラス5プラス2をやる。 だから、期待どおりだし、あなたが使用することができます 式をグループ化するために括弧。 あなたは、角括弧を使用することはできません 式をグループ化する。 うん? スピーカ5:実際にあなたでした 戻ったばかりの1秒に行く? あなたは文字列にint型にキャストすることはできますか? ROB:だからCでは、あなたが何かをキャストすることができます あなたがほしい何でもしたい。 これで終わりですという意味ではありません 行うには良いことだ。 だから、にint型にキャストするとき 文字列意味 - そして我々は、この中に買ってあげる はるかに徹底的に - JOSEPH:ずっと後。 ROB:私は、ずっと後に言いたくありませんでした、 私は私の文を変更しようとしました。 私たちは、はるかに徹底的に買ってあげる 後でどこに本当にあなたが持っているとき 文字列変数 - その文字列は任意にすることができます 長いですよね? そして、我々はint型であることを言ってきた 4バイトと長い長さで8 バイト、フロートは4バイトです。 だからint型のような文字列が、唯一持って それへの特定のバイト数。 そして、それは4バイトになります。 しかし、文字列はかなりすることができます 任意の長さは、右? だから、ハローワールドはすでに、それが10の場合は、 文字または何、それはすでにだ 4バイトを超えることになるだろう 私は、文字列に収まることができる。 だから、文字列が実際にどのように動作するかというです 彼らはどこにメモリ内にその文字列である 保管されています。 だからこっち、私が言う文字列x Xの内部で、Hello Worldのです等しい ただああ、こんにちは、世界が格納されている、と言って メモリ内のこの特定の場所で。 だから我々は整数にキャストしようとした場合 文字列は、その後、我々は解釈しようとしている メモリのいくつかのランダムな部分 文字列として。 そして、それはほとんど常に物事を壊します。 JOSEPH:しかし、それは混乱させた場合 もし、我々はそれをカバーすることができます 後で深さより。 ROB:うん。 あなたが行っているところです ポインタに入るため。 そして、それは重要なチャンクです このコースの2週間。 スピーカ6:それはオブジェクトのように動作しますか 他の言語のか、本当に? ROB:だから他の言語、オブジェクト内の ポインタを使用して表される。 これは、しかし、同じことではありません。 任意の考え? JOSEPH:いいえ。 何考えていません。 ROB:わかりました。 JOSEPH:次。 ロブ:ちょうどそれで行く。 わかりました。 そうモジュロ。 ただ、我々はプラス持っているように、マイナス 分割し、乗算します。 だから、法とは、使用するおそれのあるものです 前に見ていない。 そして、それはちょうど与える、と言う 私の残りの部分。 だから、55パーセント10。 分割55をやっての残りの部分 10で5になります。 だから、55パーセント10は5である。 そして3%5は3になります。 8%8は0になります。 16%15は1になります。 JOSEPH:これでもう一つ注意すべき、 あまりにも、期待どおりに動作しない場合がございます あなたが負の数を使用している場合。 だから、負の5%4、一部の人々 つまり、と思うかもしれない - あなたが否定的に何を思うだろう 5%4は次のようになります? スピーカ5:ワン。 JOSEPH:だから何人かの人々は、1を言う 一部の人々は否定的なものを言う。 しかし、どのような - ROB:私も持っていません それらの1人だ。 JOSEPH:二、申し訳ありません。 一部の人々は言う - ROB:スリー。 JOSEPH:三? ROB:負 - 負の5 - 何だった - JOSEPH:三、3、3。 申し訳ありません。 ので、あなたがしたら、一般的には、法とする 他の場所でそれを見て、それは通常意味します 右、正の数を返す? ROB:だから我々は数学で言う、10代%、 彼らはあなたを提供したい傾向がある - 我々は10で国防省なら、私たちはと期待 0から9までの番号を取得。 ここでは、それはあなたの場合ではありません 負の数を返してしまいます。 JOSEPH:だから負の5% 4は負の1になります。 ROB:しかし、それはあなたがMOD-INGだということはめったにありません そもそも負の数。 これを省略してください。 JOSEPH:うん。 ROB:まあまあ。 [OK]をクリックします。 について指摘するので、最後の一つです 山車は、それは危険な行動だです しかし、浮動小数点数は正確ではありません 表現。 だから、再びバイトに行く、覚えて int型は常に4バイトで、Aであること フロートは常に4バイトです。 だから、ルーカスの例は、かなり良いです。 だから、3で割って1を考える。 そう0.3333333。 私は32ビットを使用している場合、どのようにすることができます 私は正確に0.33333を保存する? そして、おそらく、何らかの理由で、あなたが言う、 大丈夫、まあ、ちょうど言わせて この特定の1011001つまり、みましょう ちょうどそれは0.333333であるべきと言う。 さて、あなたは唯一の有限数を持っている これらのビット、それは不可能ですので、 すべての単一の浮動小数点を表す ちょうど32ビット指定された値。 まあ、それはいずれかを表すことは不可能です 無限所与の浮動小数点値 - さて、任意のビット有限数を与えられた。 だから、ここでの問題は、我々が使用した場合、まあ、ある 小数点以下2桁に印刷するには、 我々は正確に答え0.10を手に入れた。 しかし、ボンネットの下に、それは本当にです のできるだけ近くに格納されている これらのビットとして0.10を表すことができます。 これは、次のスライドにある? あるいはそうではありませんか? JOSEPH:ええ、それはそのだ。 ROB:Blegh、blegh。 JOSEPH:ええ、あなただけのことができます 少しノートを引き上げます。 ROB:私はちょうど拡大するつもりだ その上で、最後に中。 おやっ私のああ、それは[聞こえない]です。 だから数。 つまり、印刷されるものである 私たちは、そのプログラムを実行した場合。 そして、それは本当に大したことではありません注意してください 我々だけのような気にしている場合 二から三小数点以下。 のような私たちは、元々、0.10を印刷 我々は何も間違って見なかった理由、それはです。 しかし、我々はに入る始めたら それはの正確、正確な数 代表、我々はそれができないことがわかります 正確に0.1を表す。 そしてここでの問題の一部は、等である 大丈夫、それで結構です、しかし、まあ、 まず、私たちが何をしようとした場合、 答えは0.1に等しい等しい? trueまたはfalseを返しに行くことですか? そしてそれは言うのは難しい。 私はそれが実際にtrueを返すかもしれないと思う。 それが最初になります - 知りません。 あなたが扱って始めれば答えは 浮動小数点値を使用すると、かなり 多くの同一性を使用してすべきではありません この不正確さのため。 そして、あなたが知っているすべてのために、それは百分のだ その小数点以下 浮動小数点はできませんでした 正しく処理します。 だから平等だけ失敗しても、 しかし数 - あなたがいた場合 正確な数値を使用して、番号がすべき まったく同じだった。 それは50のように渡ってい これらのフローティングを用いた計算 ポイント値は、エラーが構築することができます アップとアップとアップし、 物事はただ誤解。 JOSEPH:本当にありました この出来事の有名な例。 NASAの技術者はこれを得ているように ロケットが爆発を引き起こして、間違っ 彼らが立ち上げてきた後の空気。 そして、そのような問題がたくさん。 そんなわけで。 スピーカ6:あなたは0.3 Fと言う、 それが残りの部分を切り捨てるのか? それとも、切り上げまたは切り下げのでしょうか? ロブ:それラウンドのprintfのでしょうか? JOSEPH:私はprintfの切り捨てと思います。 ROB:わかりました。 だから我々は、同様に反対に行くことができます この場合の方向、この場合には、 それは表すことができ、最も近い 0.1は、この数となりました。 それができる可能性があり、最も近い 表現する0.2が反対している 方向、0.199999996356 か何か。 だから、我々はその方向に行けば 物事は、printfの0.3 Fが戻ってくる 1.99ではなく2.00。 JOSEPH:私は完全にないよ その上で確認してください。 あなたは小さな、ちょっと書きたいことがあります ちょうどそれを確認するためのプログラム。 ROB:しかし、私たちは確信しているのは、つまり、 あなたがすることをキャストしようとした場合 int型、およびint型にキャストするとしようとしている それがあれば、小数点以下を切り捨てる原因 あなたは1.9999999をキャストしよう int型にするには、1を得るでしょう。 だからあなたは、一般的に使用する必要があります 数学ライブラリ内の段関数。 質問? [OK]をクリックします。 JOSEPH:だから条件に移る とブール式。 だから前に、これらを見てきました。 そして実際に、私は私のことを確認してみましょう コンピュータは、ここに適切なフォーマットであります。 スペース。 申し訳ありませんが、我々は対処する必要があるとしている 縁でカットオフと少し。 しかし、ええ、あなたたちは見てきました この前のスクラッチ中。 だからここにこの権利は式で ここで使用されている 条件文。 だからゼロ意志より大きい答える trueまたはfalseを教えてくれ。 これらは、実際に重要であるため 彼らは私たちを紹介させて 私たちのコードにロジック。 したがって、たとえば、これは、プログラムである ユーザーに要求スクラッチで記述された 整数とするかどうか、それらを伝えます 彼らはあなたがたた整数 正または負の数。 そして見るためにここに上の変換がある あなたが最初に、文をプリントアウト 私に整数を与える。 そして、あなたは、整数のためにそれらを頼む。 そして、あなたは上で条件付きロジックを使用 ここでその数かどうかをチェックするには 実際にはゼロではないよりも大きかった。 そこでここでは、ブール式を持っている 条件IF文の内部。 ご不明な点はありますか? それについてのご質問はありますか? [OK]をクリックします。 だからより多くがあります もちろん、より高い。 あなたは、ブール式を構築することができます あなたは物事の種類のほとんどを使用して 数学に考えるだろう。 よりそう大きい。 それは以下でなければなりません。 申し訳ありません。 と間隔。 ROB:神はあなたがそれを残す禁じる。 JOSEPH:すべての権利。 より、より小さく、よりそう大きい より、または、小さいか、等しい より、または等しい。 我々はチェックするために二重の等号を使用 平等、一つの手段に等しいので、 代入は、右? はい。 そして、我々はまたによって等しくないで行うことができます 感嘆符を使用して、等しい。 この感嘆符のシンボルは、CAN また、拡張されるようにしたい場合は ブールの任意の並べ替えを反転するには 式は、あなたがそれを行うことができます。 だから、これはtrueと評価され 答えが小さい場合にのみ 以上またはゼロに等しい。 その上の任意の質問? [OK]をクリックします。 だから、あなたはまた、これらを組み合わせることができます 論理を使用して式とし、 論理的または。 だから、これは単なるシンボルであり、 これは、Shift、7にする必要があります。 そして、これはある、パイプ記号である それは一つだ低くない場合、L. それは右、あなたのEnterキーの上だ。 ですから、象徴する、これらのうちの2つを使用し 論理的かつ論理的または。 だから、これは唯一の答え場合にtrueを返します 1個、2個、3個または4個である。 と答えると、これが唯一のtrueを返します どちらかの側にそれを超えています。 だからそれは、1つ、2つ、3つ、または4つはない。 そして、あなたが使用する方法 その式中 - ROB:ゼロまたは5。 JOSEPH:ゼロまたは5。 申し訳ありません。 はい、はい、はい。 [OK]をクリックします。 そして今こちらに、同じようにあなた その式を使用することになり、小さい もし、条件の発現側 声明、また、それ使用します ただの内側に置くことによって、同じよう IF文の括弧の。 答えのであれば、このprintf関数にのみ発生します 1個、2個、3個または4個である。 組み合わせ上のご質問 表現? だから、別の条件があります 我々は、If / ELSEを呼び出す構築する。 そこで、基本的に、これは今場合は、[OK]を、意味 私はチェックしたいものではありませんでした trueの場合、それ以外に移動し、 そのほかのアクションを実行します。 したがって、この特定のケースでは、私は尋ねた 整数用のユーザー。 整数がゼロよりも大きい? はい? さて、それらを拾い 正の数。 いない場合、それは持っている必要があります 負またはゼロであっ。 だから、負の数を選んだ あるいはこの場合はゼロ。 はい。 またはゼロ。 /他の場合、その後、我々はまた、持っている ifとelse。 だから、これは私たちがのシーケンスを実行できます 物事は最初のものは、失敗した場合にのみ。 この場合には、今、私たちは作っている あなたがゼロを選ぶ最後の1。 彼らは正を選んだことも、どちらもそうなら 負の数、それらは必要 ゼロを選んだ。 だから、ただ座っ行く このようなチェーン。 どのようにそのように例 異なっている場合 - IF /エルスは異なっている IFのちょうど順序。 そしてこれは、一般的な質問です あなたが好き得れば、人々はよく、されている依頼 95 CS50において、何でしょう、この プログラムはあなたを教えて? スピーカ5:あなたはAを得た JOSEPH:はい。 あなたは、一つ一つを得た 右のものの1。 あなたはあなたが、あなたはBを持って、Aを得た 右、CとDがあるの? したがって、これらの全てが評価を得る ためである。 95は90よりも大きくしながらそう、それはだ 80よりも大きく、それはまたです 70より大きく、そしてそれはだ また、60よりも大きい。 ですから、これらの等級のすべてを得た。 と私はあなたがだろうと想定 唯一のAをしたい これを修正する方法は交換することです エルス/ IF 'sのもの。 したがって、このシナリオでは、95であることが見 90を超え、それはない 残りの部分を評価しない ステートメントの。 それについての質問? だから、別の条件の並べ替えがあります 我々はここで我々が​​持っている構造 switchステートメントを呼び出します。 だから、これはあなたが基本的にチェックすることができます 何を置く数の値 switch文にある。 したがって、このシナリオでは、スイッチングしている nがある場合には、Nであり、我々は、ああ、と言っている 1は、その文を印刷します。 して終了を意味する、破る switch文の外。 それが1でなかった場合は、、まあ、ただ 最終的にはこれらのケースのすべてを確認してください。 それは、1つまたは2つまたはだ場合ので、チェック 三つ、そしてそれに応じて印刷する。 そして、何このデフォルトのキーワードダウンここに 彼らはいずれも入力しなかった場合の手段がある これらのうち、無効なと言う。 それでは、私はNのために投稿してみましょう ユーザーは私に4を与えます。 まあ、それはそのような場合にも一致しない、 そうそれはに何があるかが出力されます デフォルトのセクション。 はい、質問? スピーカ5:あなたはブール値を使用することはできます 表現の代わりに、 一つ、二つまたは三つの? JOSEPH:だから問題は、あなたが使うことができている ブール式の代わりに1、 2、および3? およびC言語で、私はあなたを信じている それを行うことはできません。 しかし、他の言語で、そのあなたがかもしれない の最後に遭遇 JavaScriptなどの学期、次のことができます。 さて、あなたは最初に計算しなければならないでしょう その値とは、それを使う switch文。 うん? ROB:スイッチの利益のだから一部 あなたがこれをしなかった場合は、ステートメントが考えている nが等しい場合のように、IF /そうでなければ、そのよう 1または何に等しい。 他に/ nが等しい場合には2、何に等しい。 他に/ nが等しい場合は3に等しい。 だから、プログラムを実行するような方法は、それである 順次、そのリストを下に行くと チェック、1がnか? いや。 2のnは? いや。 N 3は何ですか? うん。 これを行う。 switch文でのに対して、それはだ それがためにコンパイルすることが実際にできること 本当に速い。 時点ですぐにスイッチ言うように、 大丈夫、nは私は、2である、と言う すぐにどこにジャンプしようとして 私が実行を開始することになっています。 私が最初に確認するつもりはない、 N 1は、2 n個ありますか? それはすぐにやって起動することができます それが行うことになっているのか。 そしてそのためには、できない ブール条件を取る。 またはそうでなければしなければならないでしょう シーケンシャル、のように、全ての権利は​​、nは ゼロよりも大きい? それ以外は、10または何よりもNも大き​​い。 JOSEPH:この場合、あなたが使用した場合 /他の場合なら、、スイッチはだろう 約3回実行 IF /そうでなければ、場合よりも速い。 我々はそのようなスイッチを整理することができます 我々は壊れないように ケースのそれぞれの後に。 この場合、私は分割することだ 我々は一つに選び、番号 2ではない高い数字と 3は高い数である。 それは、nは1又は2である場合、この場合のように ケースをヒットし、それが意志ます フォールスルー、ため 断線はありません。 そして、それはここになってしまいます。 我々は一つを選ぶのであれば、それは、printfを行います して、そののどれを破るん これが実行される。 そしてもちろん、彼らは3で入力した場合 または何か他のもの、それはスキップします ものと、しないそこに行くし、それ 代わりに実行されます 対応するライン。 それについてのご質問はありますか? はい? スピーカ4:あなたはエラーが発生しますあなたの場合 ケース1の後に休憩していたが、それ それがするために何かを持っていなかった? JOSEPH:だから問題はあなたが得るだろうさ あなたが後に休憩を持っている場合、エラー ケース1が、何の関係もありません? 答えはノーです。 実際には、エラーを取得することはありません。 うーんミリメートル、うん。 ここではほとんど変化の一種ように 私はここのprintfを置くつもりです。 おっと。 だから、これは何があれば印刷するだろう 私は、入力として1つを置く? うん。 それは取らなかったことを言うだろう 二度高い数字ですよね? それはその最初のケースに当たると考えているので、 それが壊れていないだろう、それは下落するだろう 第二のケースに至る。 それについての質問? ロブ:あなたは別の質問がありましたか? JOSEPH:OK、涼しい。 わかりました。 だから我々は呼ん何か他のものがあります 基本的には三項演算子 何の代替構文 もし、次にエルス。 そして、それはあなたが1行ですべてを行うことができます。 したがって、この特定のプログラムにおいて、 私はNをユーザーに求めている。 nが100よりも大きい場合と、私は言う 彼らは彼らは高い数字を選んだ。 他の私はそれらを教え、彼ら 低い数字を選んだ。 だから我々はこの非常に長い構文を使用することができ、 ストリングS、次いでnがあるかどうかを確認 100を超えると割り当て それに応じて。 しかし、我々はこれをはるかに簡潔に行うことができます この三項演算子の構文を使用して、 質問を伴う マークとコロン。 だから、疑問符が本質的に 右、質問をする? ROB:たぶんそれを拡大します。 JOSEPH:はい。 良い点。 だから、これは三項演算子です。 私が最初に質問をし、 100 nよりも大きい? そうであるならば、私が最初に実行 コロンの前の部分。 そうでない場合は、私が実行し コロンの後の第二部。 そのようにnが100より大きい場合には、 それは、高いピックアップしプット その文字列Sに変換する。 nが100未満である場合には、低ピックアップ [文字列Sにあることを置きます。 だから、この大きな塊を凝縮する ちょうどその1行に分解。 スピーカ5:それは人気があるのだろうか。 JOSEPH:はい、それはのためにかなり普及している 基本的にあなたがしたい事 に基づいて割り当てを行う 条件のいくつかの並べ替え。 この場合、我々はしようとしていた 文字列sに値を割り当てます。 それはとてもではない - 私は本当に好みではないと思います それ以外の場合には。 しかし、それは特に便利です この割り当てのために。 ロブ:これはかなり一般的なパターンです。 あなたは、いくつかの変数がある場合、その 何か、設定した場合は、言おうとしている 1の値は、この変数には、そうでない設定 別の値に、この変数。 そして、それはシナリオです ここ三を使用しています。 JOSEPH:そして、あなたは保存している ラインの多くは、右? それだけで、ほぼ間違いなくあなたのコードになります もう少し読みやすい。 はい、質問? スピーカ6:三元の場合は、あなたが行くことができる、 文字列sは、S、疑問符に等しい? そして、あなたが持っている可能性があり、言う、 5さまざまなオプション。 とnのどんな数に応じて、 あなたがそれらのいずれかを選ぶだろう、でしたか? JOSEPH:だから、疑問がある 文字列を行うことができ、構文のようなもの sはnと等しく、その後つ以上を有する その疑問符の後のオプション? そして、簡単な答えはノーで、そこではありません ない限り、これを行うには本当に良い方法 あなたが巣複数の三項にしたい 互いの内側の演算子。 あなたは、100よりも大きいNのように行うことができます 疑問符し、別の 三項演算子、N 50を超え、 疑問符、およびそのように、それの巣。 しかし、そのシナリオでは、あなたのコードの 、ちょっと読めないと乱雑になっ そしてそれだけに行く方が良いかもしれません その点で、IF / Elseステートメント。 ROB:そしてまた、サイドノート、PHPなど 誤っ三を実装しています このようなネストされた三元系、演算子 でも、彼らが必要として動作しません。 JOSEPH:うん。 だから、少し混乱し得る あなたが行く場合は特に 異なる言語へ。 ROB:それは十分にご混乱だ 言語はそれについて間違っている。 JOSEPH:だから、実際に、ただ明確にするために、 誰もが知っている何をするかという %sはこっちでしょうか? それについての質問? 私が推測するだけでカメラの、%sの 基本的に私たちは、プレースホルダを置くことができます 文字列の。 した後、最後に、我々はそれを指定する 変数我々はこの中に入れたい プレースホルダは、Sである。 だから、基本的には、Sを取る そしてそれはここに入れます。 そして、それはあなたが選んだ、プリントアウトします 高いか、低い数値を選んだ。 [OK]をクリックします。 だから、ループはあなたが物事を行うことができ 円を描くように、右か? この中に遭遇した可能性があります 永遠にループの形でスクラッチ またはを繰り返したり、特定のリピート 回数。 では、なぜこれは、私たちのために良いでしょうか? さて、C言語で、我々はこれを持っているのは、言わせて この曲は、スクラッチで実装 歌って、これは歌です それは決して終わらない。 それだけで延々と続くと いつまでも、永遠に。 さて、あなたは本当にプログラムを作ることができない それは、printfの無限の数を持ってい その中の文、右? したがって、この特定のシナリオでは、1ウェイ あなたはこの仕事をするとできること それは永遠に印刷するようにすることである 代わりにwhileループを使用しています。 だから、whileループは何が実行されます その2ブレースの体内で 内容に基づいて、それに属している 条件である。 もし、以前にこの特別な例でそう 私たちは、何を、いつまでも、これを印刷する 我々は何でしょうか? さて、確かに、右か? だから、これは一種のアイデアを組み合わせた いくつかのブール式の ループと一緒に。 そして、我々はブールについて学んだ 以前の表現。 だから、いつの内部状態 その一方が真のまま、このループ 上と延々と実行されます。 この場合、我々はそれを指定した場合 真の場合、これは無限の原因 上で曲を印刷し、ループ そして我々がすることなく前に、必要に応じて 無限を持っていたプログラムを持つ のprintf文の数であり、 ことはできません。 ので、より多くの説得力は、しかし、 あなたがこれを使用することができます 変数と条件。 それでは、我々は繰り返したいとしましょう フレーズ、完全に愚かな、10回。 だから、Whileループで何ができるである あなたが最初のカウンタを初期化することができます 外の変数 10 whileループ。 した後、基本的に、あなたが行くたびに、 Whileループを通して、あなたがプリントアウト その文、あなたが減少 カウンタ変数末までは、 いくつかの点で、かつて我々は十分に私を引く 回、私は十分時代から1 - ちょうど、私のマイナスマイナスを明確にする 私はマイナス1に等しいことを意味します。 それは基本的にに私が停止します かつて私は、ゼロにヒットポイント、この 条件がtrueでなくと ので、ループから抜けます。 だから、完全に愚かなだけ10回出力します。 Whileループについてのご質問? [OK]をクリックします。 だから我々が行うことができる方法はありますか私たちだけ とより簡潔な方法で行った 私たちは、Forループと呼ぶもの。 そこらのループはで構成されています 初期設定、状態、および 我々の前に持っていただけのように更新、 このWhileループ内。 それでは見てみましょう。 このWhileループでは、我々は持っていた 初期化は、我々は持っていた 我々がチェック状態。 そして、我々は、更新があった 上部のステップ。 Forループでは、これは基本的に取り これらの三つのことで、それを凝縮 1行に分解。 それがでないように、最初にすること ループの初期化です。 それから、あなたはその後にセミコロンを行い、 あなたは私である状態を、やる ゼロより大きいが、あそこ行く して、更新ステップ。 だから、これは、で行われます ループ本体の一番最後。 したがって、これら2つのプログラムがあります 基本的に同等。 ご質問? だから、1つの違いは何ですか これら二つの間? 誰もがそれを指摘することはできますか? それは少し微妙かもしれません。 それだけで非常に小さな違いだ。 はい? スピーカ5:使用することができないだろ Forループの外に私の変数 [聞こえない]? JOSEPH:その通りです。 だから、これは私たちが買ってあげるものです 後で変数のスコープと呼ばれる。 しかし、本質的に、これは私たちの生活をint型 このWhileループの外。 したがって、このWhileループを実行しても 実行すると、私は後で私を使用することができるでしょう プログラムの中に。 これをループのために、これは私がint型のに対し、 このforループの内側にスコープされている。 そして、それはこの部分の内側にあるので、 ループのための、すなわち開始する と括弧と両端の あそこ中括弧。 内で宣言だ何でも ここで外では使用できません。 私は外で私を使用しようとするのであれば、それはよ 教えて、宣言されていないシンボル。 そして、基本的に、私ではない それを使用することができる。 ROB:そしてよく、10年前、中 文字通りすべての場合、中括弧は 何を決定するのに使用 変数のスコープ。 だからそこに、私は10に等しいint型 この内で宣言されている 中括弧のセット。 そしてそうしている限り、あなたは、私を使用しようとして この中括弧の前に、それは大丈夫です。 あなたが作る入力するときには、あなたが表示される場合があります ダッシュ、ダッシュ、STD、等しく、C99を参照してください。 だから、Cの後のバージョンであること GCCはまた与えるよう実施している このショートカット。 だから、これはC言語で許可されないために使用され、 あなたが見ることができる理由、そのためのint 私はこの中括弧の外にあるが、 それはまだであると考えられています これらの中括弧の範囲。 しかし、これは非常に便利なものですが、 そしてそれは良い拡張したものです。 JOSEPH:ご質問? [OK]をクリックします。 だから何より有用なのは、その時々である あなたは内ダイナミズムのようなものをしたい あなたのループ、右? あなただけの、必ずしも印刷したくない あなたは、すべての時間は全く愚かな からカウントダウンしたい 10か何か。 だからあなたはカウンタ変数を使用することができます そのループの内側にも。 その場合には、このプログラムだけで 全押し10からカウントダウンします。 そしてそれは何を印刷しないのですか? それがゼロに印刷されない、 右、ときのため - はい、それはまた、11は印刷されません。 だから、ゼロに印刷されないときのため 私はゼロで、覚えて、それが評価される それが進む前の状態 ループ本体を実行します。 Iがゼロであるとき、これはそのように、偽である それがカウントダウンを印刷しない ゼロ、それだけでカウントを出力します 1のすべての方法ダウン10ダウン。 我々は実際にはゼロを印刷したい場合、 その後、我々は、等号を置く 記号よりも、この大きな後。 [OK]をクリックします。 入力検証を行うため、1つの方法は、その あなたがしなければ、ユーザーが要求したときである 何か、あなたは彼らを確認するには あなたの指示に従って、使用することです Whileループは、右? したがって、この特定のケースでは、私が求めている 正の数のため、その後、私はよ 入力を待っている。 入力されている間、その後私はチェック ゼロより小さい、声をかけてください。 そうであれば、彼らは私に番号を与えるよう それは肯定的ではないが、求めておく、 求めておく、求めておく。 しかし、ある種の奇妙なこのことについては何ですか? または何についての最適ないないようだ 右こここの構造体? 誰ですか? はい? スピーカ6:あなたが繰り返している 命令を2回押します。 JOSEPH:右。 だから我々は2のprintf文を持っている ここで、右か? だから我々はちょうどこの得ることができる方法はありませ 私たちになるだろう1まで コー​​ド読みやすくし、A もう少しきれいに。 そして、我々はする必要はありません だけでなく、2回に分けて取得しています。 そして、あなたはこれを行うことができます1の方法です 実行 - whileループを使用することによって。 観光·whileループは基本的に Whileループの場所の異なる形 中括弧の中には何でも 少なくとも1回実行されます。 だからここでは、私は、int型を宣言 入力、外側の第。 そして私はちょうどこれを行う、と言う 入力中に命令 ゼロ未満である。 だから、最初に行うに当たる。 それは、常に、少なくとも、これを実行します 一回なので、常にユーザーに確認します 少なくとも一度入力してください。 そして、それはその入力を評価し、 そしてそれは輪に点灯します。 はい、質問? スピーカ6:それを行うための方法はありますか [聞こえない]の種類、あなたが言う場合にはのように、 GetStringメソッド、および誰か[聞こえない] [聞こえない]する方法はありますか JOSEPH:だから、疑問がある 入力検証を行う方法であれば、ユーザー 右に入れていません 変数の型? 我々はint型を要求し、もしそうなら、彼ら 代わりに、私たちに文字列を与えます。 そして、我々は実装した関数内 あなたのために、GetIntで、全てにおいてGetStringメソッド これらの関数は、それらが実際に既に 基本的なタイプの入力の並べ替えを行う ボンネットの下に検証。 ですから、我々の関数を使用している場合 あなたを与え、あなたが本当に必要はありません。 しかし、あなたはどのようにもっと見てみたい場合は、 あなたが実際にそれを行うことができ、あなたが見ることができる ファイルのボンネットの下にI/O-- 標準I / O機能、ファイルではありません のような標準入力からの読み込みと 標準出力。 そして、あなたはより良い感覚を得ることができます あなたがそれを行う方法の。 ROB:一つの問題は、しかし、特にである 例を使用すると、 あなたは文字列を期待すると述べた と私は、intを入力してください。 どのように違いを言うだろう 意図的に欠け間 INT 123を望むに対する文字列123? ため、文字列は、それがほとんどないがないだ 、それだけで何でも彼らの検証です あなたが解釈する入力された 文字列として。 どんなにので、int型は、簡単です あなたはあなたが、利用者から取るの入力 常に文字列を取る。 だから、その文字列次にでき 確認し、これらの全ては 実際に数字? JOSEPH:わかりました。 ドゥーWhileループについてのご質問? ROB:ああ、これもある - スコープに戻って、多少の共通 ミスがいくつかのローカルを使用しようとしている これを行うワイル内から変数 この条件の内側ループ。 そして実際に、我々だけを処分した場合には これとINT入力に等しい、と述べ GetIntで、コンパイラは大声で叫ぶん ボランティア、入力が存在しないため の範囲外 これらの中括弧。 JOSEPH:そして、だからこそ私たち ここでこのラインアップを必要としています。 [OK]をクリックします。 だから、あなたも抜け出すことができます ループ初期のあなたがしたい場合。 だから、これは別の方法である 我々だけで実装するのはどのような実装。 その代わりの条件を用いて 括弧の中に、我々は使用している 体の内側if文 実行 - whileループ。 そして基本的には、入力が最終的にあるとき ゼロより大きく、させて頂きます ループから抜け出す。 だから我々はすべて行く ダウンここ道。 そして、あなたは、これがあると見ることができる おそらくこの中で好まれる シナリオ、それは少しだから ビットクリーンで少し 読みやすくビット。 この一方で、あなたの並べ替え その中に余分な行があります。 それは、ほんの少し醜いです 私はある意味で、ね。 はい、質問? スピーカ4:取得のみ解除されます ブレースの1セットからあなたは? JOSEPH:右。 そこで問題にのみ解除されますされている あなたは一つのループから抜け出す? そしてその答えはイエスです。 だから、あなたは、ネストされたforループしている場合 私はint型を持っている場合は、私が0に等しい 10時までとし、int型のためjは0に等しい 10時まで、私は、内から抜け出す場合は、 ループ、私はまだ行く 外側のループに。 だから、実行しておこう 外側に操作。 それについての質問? はい? スピーカ5:しかし、唯一の機能を破る 中括弧のために、ではない他のために 文? [聞こえない] JOSEPH:だから質問が解除されている とは対照的に、ループのための唯一の機能 もし同様の他の文? そしてはい、それは、そうであるため、 あなたは、右、ループを抜け出している 意味で。 ROB:大部分のケースでは、それがだ これは、IFものの一種である、 その後破る。 だから、に適用する分割する必要はありません その周りにラップされます。 また、これは、ループの多くはありませんが、 しかし、スイッチもあることを覚えておく 休憩で外に壊れた。 私たちは、休憩が使用されて見ました スイッチの前に。 JOSEPH:そして、あなたはまた、それらを使用することができます 一方ループ内およびループの場合。 ご質問? [OK]をクリックします。 だから、次回は機能する。 ですから、これらのBYOBのいずれかを使用している可能性があります スクラッチプロジェクト内のブロック。 そして、これは基本的に可能にする あなたのセットを定義する 従うべき指示。 そして、私はそれの意味することはのは考えてみましょうです 戻って数学に、右、代数。 あなたは私たちがxの関数と呼んでいるものがあり、 いくつかの変数とのこれを言わせて この関数は、xのfはXプラス5に等しい。 だから、この黒として、xのfを考えることができます その後に15を取り、箱 20を生成します。 そのように、より一般的には、関数である いくつかの入力を受け取り、何かして その後、いくつかの出力を生成します。 そして、なぜ機能は良いですか? 彼らはいくつかの理由でもいいです。 だから、誰かが刺しを取りたいん 何を意味するのか、組織での? なぜ機能的に役立つ? はい? スピーカ4:それはあなたを作る コー​​ドを読みやすく。 JOSEPH:右。 そうなことの一つは、それが作るです コー​​ドを読み、右? intではなく、xがXに等しいように持っていることの 倍x倍xを、Iはxのキューブを有することができ、 より読みやすく、よりある 読者に理解できる。 組織は、という点にもあります 管理可能にコードを分割 そのため、代わりにしようとする部分、 すべて1長いセクションでこれを実装 メインでは、ソートのそれを分割することができます 等には、[OK]を、の関数を書いてみましょう 何かをキューブに、のは書いてみましょう 何かを二乗にする機能。 あなたは小さなにそれを分割することができますこの方法、 あなたが取り組むことができる小さなパーツ タックルしようとしているとは対照的に、 すべて一度に大きな問題。 ROB:またはきわめて小さい場合でも、少しパーツ あなたとパートナーが取り組むことができます。 JOSEPH:うん。 ROB:だからではなく、両者の あなたは1を移植しようとしている 同時に機能します。 JOSEPH:簡素化。 誰もが推測を取りたい? はい? スピーカ5:もっと繰り返し。 JOSEPH:右。 だから、あなたが使ってできることの一つは、 簡素化は、それが一種の上にあるということです 再利用性と同じ行であること 私はキューブ関数を書いたら、私がすることができます ちょうどその何度も繰り返し使用 私のプログラムの代わりに入力して、再び 以上のX倍のx倍xと 何度も何度も。 そして、ここで単純化だけでも それは一種のコードを作る意味 スプリットたら簡単にデバッグする 関数にこのアップ。 あなたはどこをローカライズすることができますので、 あなたの問題は、ソートのです。 ご質問? だから、もう一つのアイデアは、右、抽象化したもの? このブラックボックス。 好きな人には、GetIntでは何をするか知っていますか ユーザからの入力を受信する? 私たちは本当に正しい、あなたに言ったことがありますか? 私たちはあなたに言ってきたすべてがGetIntではないです まさにそれはそれがないと言います。 だから我々は、どのように教えていない場合でも、 それが動作する、あなたはまだ知っている。 したがって、この特定のケースでは、これは ない四重機能 入力に異なるもの 出力を生成する。 そして、あなたは数を四倍にすることができます 4を乗じて。 またはあなたは私たちが呼んでいるものができる ビット2によってそれをシフトします。 そして、我々はこれをカバーします 少し後で。 そして、どのようにこれを知っている必要はありません この関数は、実際に限り動き 述べたように動作します。 だからボンネットの下に、私は次のようになり 同様に、入力された時刻を返す 2で割った8。 そして、あなたは右、知っているだろう? あなたが知る必要があるのはある それは言うことありません。 だから、便利なことだ 抽象化について。 そしてもう一つは、このアイデアのようなものです。 1にコードをローカライズする 特定のセクション。 あなたは問題があるんであれば、あなたはしないでください しようとしてすべてのコードを介して行かなければならない 問題があった場所に固定する。 したがって、この場合には、Iが実装 間違っキューブ。 私はキューブが掛けると思った 3による。 したがって、この場合には、この1つのプログラムである それはちょうど3を掛けるました どこでも。 とされている別のプログラムがあります アウト機能に織り込まキューブ。 だから今、私は私の間違いを修正したい場合は、 ここで、私はすべての単一の行を修正する必要があります このプログラムのコードの。 一方、他方では、私が使用している場合 この関数は、私は変更する必要があります 一箇所で何が間違っていた。 だから、コンピュータサイエンスでは、 入力と出力を呼び出します。 入力はパラメータと呼ばれているか 引数、および出力が呼び出されます 値を返す。 そして、我々は、これは、ソートたちをどのように役立つかが表示されます 第二に関数を定義する。 だから、これは関数定義である キュービングのため。 だから、それからの入力を受け取り、 それはその回数を返し それ自身3回。 それでは、これを打破しましょう​​。 だから我々は、関数ヘッダーを持っている 基本的には三つのことで構成されています。 だから我々は、パラメータを持っている 私が前に言ったように、ある この関数への入力。 そして、我々は、関数に名前を付けます。 この場合には、キューブと呼ばれています。 そして、我々はどのようなタイプを指定する の戻り値です。 この場合、私のキューブ機能 それはまた、整数を取り込み、 整数を返します。 私は2を渡すのであれば、2は整数です それは、私には8を返す 整数である。 だから、型名のパラメータを返す。 それについての質問? そして、戻り値は実際には リターンを言って最後に指定 してから何を返す 戻り値が含まれています。 この場合、我々はそれをすべて置く場合 一緒に、この関数は、取り込ん パラメータは、それが何かと呼ばれる、と それはタイプ何かを返す 我々はそれがであることを行っていたと言うこと。 ご質問? では、どのように関数を使用するのですか? まあ、我々は、関数を記述し、 我々は正しい、我々のプログラムでそれを使うのか? だから私は、キューブに呼ばれ、 私はキューブを使用することができます。 しかし、何が注意してください 順序が重要ということです。 私はメインの下のキューブを持っている場合、それはだ キューブに実行するつもり。 この時点では、何もありません プログラム内のキューブと呼ばれ、それはだ 同じようになるだろう、私が持っている 全く考えはどのような立方体ではありません。 だから、暗黙の、あなたを教えてくれます 関数の宣言。 つまり、表示さエラーです。 そしてこの場合、キューブは以下の通りです 主なので、それはないだろう それについて知っている。 スピーカ5:だから主は、通常、 最後の関数は、定義された? JOSEPH:だから質問は、 通常、最後の主である ユーザーが定義したいことは? なし。 それがために、私たちは通常、メインのようなものだ 右、上にあると? なぜならそれはあなたが最初のことだ プログラマが開いて欲しい 参照するプログラム。 だから、どのように我々は、我々のこの問題を解決するのですか 一番上にあることが主なたいのですが、 私たちが望む機能は、我々は彼らが欲しい 主未満であることはまだ使用することができる メインの内側にそれ? まあ、我々は我々が呼んでいるものを使用 関数プロトタイプ。 それでは、関数プロトタイプ本質 ですが、最初に何を取る 署名または関数ヘッダ 我々がダウンして実装するために何をしたいの ここで、我々はでそれを置く プログラムの先頭。 この場合、我々は、まあ、それを言う 後で私たちのプログラムでは、つもりだ これを実装する約束を作る 取りint型キューブ、呼び出された関数 整数入力。 だから今、それがメインの上にあるので、 主な、それはよく、ああ、と言うだろう、 後のプログラムでは、それはなるだろう だから、私はそれを参照することができますので、私はよ ちょうどそれが今の通す。 して、一番下にある、 私たちは、キューブを実装します。 そしてメインはちょうど、と言うだろう まあ、それは、リンクのソートされます これら二つのシンボル。 そして、我々はどのようなことを取り上げます 後で意味します。 そしてそれは、これがあることを知っているよ それは使用するべきキューブ機能。 ROB:[聞こえない]たいと約 下部のメインまたは トップ、私は両方を見てきました。 同じようなことがあります。 下部にメインを配置する。 しかし、いったんプロジェクトが、特に取得する 大きな、通常は主にしている すべての独自のファイル。 その時点で、のような int型キューブラインだろう - stdio.hの内集まりです ちょうどそのint型のような行を キューブのint入力ライン。 だから、これらのプロトタイプは、物事はあなたがいる で、ヘッダファイルに配置する傾向がある その時点、それは問題ではありません。 まあ、それは問題ではありません。 それらは常に最上部に移動します。 そして主は、すべて独自のファイルでない場合は、 あなたが置くことについて心配する必要はありません 個々の関数プロトタイプ ファイル内の。 JOSEPH:そして、我々はその少しに買ってあげる 少し後ロブは話し始めるとき コンパイルについて。 だから差があります パラメータと引数の間。 とパラメータはちょうど何ですか 私たちは、これらの入力を呼び出すとき 私たちは、関数を定義する。 そして、我々はときに我々の引数で呼び出す 実際に関数に渡します。 したがって、この場合には、これはパラメータであり、 我々の前に言ったように。 そして、我々は実際にそこにそれを使用する場合、 Xのキューブは、それから、それ自体がX 我々は、引数と呼んでいるもの 機能キューブに。 ROB:だからパラメータの引数は - この区別があり、非常に 同じ意味混乱。 この時点で、私には、それが一つのようなものだ 私はそれを参照して、それらの単語 野生では、私はすぐに助けることができません 彼らはそれを使用しているかどうかを質問 正しいコンテキスト、理由 違いは、単に十分な微妙です 誰もが傾向がある - 私はほとんどの場合、引数を言う にかかわらず、私の言いたいの。 JOSEPH:および機能も便利です 我々は、副作用と呼んでいるもののために。 だから、関数は入力を取ることができず、 それはまた、NOの出力を生成することはできません。 したがって、この特定のケースでは、私は 無を持つサブルーチンを定義する 値を返す。 そして、それを特定するために、我々は、使用 私たちはこっちに無効と呼んでいるもの。 だからこの関数の副作用 それだけのものを印刷していることである ページへの出。 これは、実際に実行されません 入力、およびそれはしていません 実際に出力を生成する。 しかし、これはある意味で役に立つかもしれません あなたは、例えば、デバッグする場合 あなたのプログラムで何か、必要に応じ 少しサブルーチンを記述するために、その プリントアウトする、のは言わせて、内容 メモリか何かの。 だからこれらの副作用は時々ある コンテキスト外に便利 ただ入力と出力のようなの。 ご質問? この特定のセグメントを終了するには、 このプログラムは何をするのでしょうか? 私はあなたたちののカップルをあげる それを読ん秒である。 非常に基本的なレベルでは、私たちがしたい 右、それはxとyを入れ替えていることであると言う? それでは、どのように多くの実際に考える これはxとyを入れ替えるだろうか? 手を上げます。 誰ません。 [OK]をクリックします。 誰がそれをすることを考えている xとyを交換しない? そして、それの合計はだった 全体ではなく、お部屋です。 だから、何人かの人々は確認されていません。 [OK]をクリックします。 それは合理的です。 それでは、何が起こるかを経由してみましょう あなたが実際に最初の関数を呼び出す この質問に答えるため。 だから、これはどのようなメモリであり、 並べ替えのように見えます。 これは一種の単純化したモデルのようです。 ときのようにメモリがどのようなものかの あなたがプログラムを実行します。 いわゆる何かがある ダウンここスタックと 何かがヒープと呼ばれる。 これらは向かって成長 メモリの真ん中。 したがって、この特定のケースでは、とき あなたは関数を呼び出すと、 スタックに置かれます。 して、その中に含まれているどのような 機能は、我々がいることを呼ぶものにとどまる 関数のスタックフレーム。 そしてとても素敵可視化を取得する これは、let's - 例えば、私たちは持っていた プログラムのメイン早い。 そしてメインの内側に、我々はキューブと呼ばれる。 だから、主はまずスタックに行くだろう それは最初の関数なので、フレーム それは呼ばれています。 した後、キューブはの内部で呼び出されたとき 主には、メインの上に置かれます メモリの内部。 それでは、ここで気づくと、その立方体である 独自のパラメータがあり、その 自身の地元の人々。 だから、実際に何かを渡すとき 機能、パラメータということ 何であったかのコピーであるれます 主から渡された。 ソートのこれを説明するために、みましょう プログラムの中を歩く。 だから我々は、スタックを持っているが、これはある 単にスタック部分。 そして、私たちがやっていることは我々が最初に初期化される 1と2のXとY。 だから我々は、これらの小さな箱を持っている。 彼らは主のスタックに座っている スタック上のフレーム。 彼らは、1と2が含まれています。 今、私たちは、スワップを呼び出します。 何が起こるかは、我々は中にxとyを渡している スワップ、スワップは、自身のコピーを作成します。 内側に使用するそれらの変数の そのスタックフレームの。 だから今あそこ、我々は、これを持っている X持っていた値が含まれていると、bを、 そのYが持っていた値が含まれています。 そのように一つ、二つ。 そして、あなたは、これは別々であることがわかります メインの内側にxとyから。 だから我々は現在、一時的に作成 格納する変数。 我々はBに等しいを設定するので、 一から二変化する。 そして、我々は等しくセットB ショートカットに、その1です。 して、今、私たちが出て終了 この関数の。 あなたは、関数の外に出るときは、 スタックフレームがスタックからポップされます。 私たちは、プッシュと呼んでいます。 あなたは、スタックにスタックフレームをプッシュ スタックオフの場合、あなたはポップ。 だから何が起こると、そのすべてである ただのスタックフレームの並べ替えていた 炎の中で上がる。 だからそれは存在しません。 しかし、我々は何に気づくのですか? 私たちは、実際に変更されたことがない xとyの値は、右か? ので、これらは、主にローカルとどまった。 スワップに何かを渡すことで、 実際にこれらの値を変更することはありません。 そして、我々はこれは何を呼び出すのですか? 私たちは、価値によって、この通過を呼んでいます。 あなたがに物事を渡すCの中のSO 機能は、値によってそれらを通過して、 のためにそれらのコピーを作成します 使用する機能。 そして、我々はと呼ばれるものについて学びます 後で参照渡しますが、それはです あなたはこの問題を解決することができる方法です。 しかし、我々は気にする必要はありません その後まで。 ROB:そして、実際に、その用語、パッシング 参照することによって、そのようにCがあっても持っていません 参照渡し。 Cは、排他的に値渡しました。 どんなにあなたが何をすべきか、あなたはいつもしない 何かのコピーを渡す。 私は一種の言及のようにそれは、まさにそれだ その前にポインタを 文字列は本当に4であること メモリ内のどこかを指し示すバイト。 まあ、私はこの文字列を持っている場合、それはだ それはどこの文字列である私に言って - まあ、私はこれまでこのポインタを持っている場合 メモリ上に置いて、私は渡すことができます 機能へのポインタのコピー、および その関数は、まだどこにある知っている それはメモリである。 したがって、これらのポインタの両方を指している メモリ内の同じ場所にあり、 それは我々ができるようになるだろう方法を説明します を超えて物事を変更する 現在のスタックフレーム。 ジョセフ:あなたがコンパイルしたいのですか? ロブ:いいえ、それは午前5時30分です。 JOSEPH:わかりました。 それが5時30です。 [OK]をクリックします。 だから我々は、私は推測してコンパイルカバーします 次のセクション、またはあなたのセクション その点でのリーダーになります。 そして - ROB:ご質問? JOSEPH:ご質問? はい? スピーカ5:CS50から文字列を使用して、任意の 我々が使用したい機能 これらの、それは、C関数のようになるでしょう。 CS50はに行っておりませんし、 追加しました。 ROB:正しい。 [聞こえない]のように、Cのいずれかに、 私たちの文字列のものを使用します。 JOSEPH:そして最後に一つ私がしたい 言及は、我々はスタイルガイドを持っているということです このクラスの。 ROB:ああ、うん。 JOSEPH:だから、から来ている場合は、 前のプログラミングの経験、あなた 一定の規則を持っている可能性がある場合 あなたはパッティングのようなコードを書いている 同じ行の中括弧または特定 インデントのやり方 または、変数に名前を付ける。 このクラスでは、フォローしたい 特定のスタイルガイドという理由だけで、 さて、あなたは外に出ている場合での仕事 業界では、あなたが期待することになるだろう のスタイルガイドに従うこと あなたがに行くれる会社。 例えばのように、Facebookが私は思う 命名の特定の並べ替えを持っている 慣例。 とラクダの違いがあります ケーシング変数と同じよう アンダースコアで区切る。 また、私のような、最も重要なことだと思い 例えば、インデント、右? 我中括弧で始めるのですか 条件は、それら 次の行にあります。 そして、我々はまた、中括弧を置く それだけで1行であったとしても。 そして、実行する方法は多くの時間がある これらの括弧を残すことができ、それ それだけで1行だ場合にはオフに If文の下に。 しかし、このクラスでは、我々はフォローしたい ちょうどので、あなたが得る特定のスタイルガイド そういったことに慣れて。 ROB:うん、スタイル50をしようとしている このスタイルガイドを施行し、我々はしている スタイル50を使用するつもり あなたのコード年生まで。 だから、私たちのために物事が容易になり、 うまくいけば、その物事を行うべきではありません あなたが与えられたために非常に悪い 標準化されたスタイルがあることであってはならない 非現実的。 JOSEPH:そして最後に、スタイルを見つけるには ガイド、manual.cs50.net/styleにアクセスしてください。 そして、ええ。 スピーカ4:あなたが強制するつもりです 行ごとの任意の文字? ROB:はい。 JOSEPH:申し訳ありませんが、みんな。 ロブ:それは唯一のものの1のようなものだ。 この時点で、私は120でOKです。 私は120を言って、OKだ 行あたりの文字数。 私はいくつかの制限されてそこに理解しています。 私は80が非常に小さいと思うが、 我々はそれを強制している。 JOSEPH:個人的には、と思う C、80文字がよりOKです。 あなたは他に取得を開始したら JavaScriptやPHPなどの言語ではない ただ制限するため、合理的な それ80文字まで。 [OK]をクリックします。 まあ、それは、スーパーセクションだった。 誰もがお菓子をしたいのですか? スピーカ4:はい。