ロブ·ボウデン:これは より快適なセクション、 それはどうかという意味ではありません あなたがより快適じゃないように感じる あなたはここで物事を学ぶことはありません。 それでは始めましょう。 あなたはスライドを持っていますか 右の物事に入る。 私は約ちょうど今それを取ることになっている? ノートパソコンを切り替える。 アリソン:あなたはしたくない 、ロブを自己紹介? ロブ·ボウデン:ああ、私はロブだ。 これは私の第五年のTF-るCS50です。 GABRIEL:私はガブリエルです。 私はCS50のヘッドTFだ。 私は、去年と今年のTFだった。 アリソン:私はアリソンだし、この 2年目のTF-INGのCS50です。 ロブ·ボウデン:すべての権利なので、 左側のこの事、 うまくいけばあなたが前にそれを見てきました。 そうでない場合、あなたのため 自分自身でそれをダウンロードし、 あなたが講義でそれを見ているは​​ずです。 だから、これはCS50アプライアンスです、と彼 多少それについての説明をしたの 講義中。 しかし、基本的にはただあなたです オペレーティングを実行している お使いのオペレーティングシステム内で システムは私たちはあなたを与えることができるように 必要とせずにプログラム ああ、心配することはこれです 両方のWindows上で仕事に行く そして、あなたのMacの場合、またはいくつかの 既にLinuxで、Linuxを使用している。 それはちょうどことになっている 共通演奏も フィールドそう、誰もが持っている まったく同じ環境。 だから、あなたがいない場合 すでにこれをダウンロードし、 あなたがしているので、あなたはそれをダウンロードする必要があります 問題セットのためにそれが必要になるだろ。 そして、それは2ギガバイトです それはしばらく時間がかかるかもしれないので、ダウンロードしてください。 ハーバード大学ではそれが速く行くよ。 だから、CS50アプライアンス。 さて冒頭で、私たちはするつもりだ コマンドラインのちょうど束の話 もの、となるようにすることによって、私が働いて意味 こっちにこの小さな環境において。 そしてすべてのものに気づく 私は今ちょうどここ言う あなたが内部のなら仕事に行くされている アプライアンスの内部の端子、 またはあなたがの内にある場合 geditのターミナルウィンドウ アプライアンスの内部。 だから、それらの環境は同一である。 しかし、私は第三のルートを行くつもりです。 そして、ここでこれをダウンに気付く 右ここで少しのIPアドレス。 だから、あなたがする必要はありません これを行うが、このIP 今I--場合を除きaddress-- それはこの事によってブロックだ。 [OK]を、その結果、IPアドレス ターミナルの過 オーバーhere--ので、このターミナル ここに私のMac内の端末です。 これは、現在では決してない まったくアプライアンスに関連付けられている。 あなたがWindowsを使っているなら、あなたはしている 何かをダウンロードする必要があるとして 具体的には、このため、特に 人々は、P-U-T-T-Y、パテを使用する傾向がある。 それでは、私がやろうとしてたんだけどタイプです SSHとそのIPアドレス。 さて、そのIPアドレスにjharvard。 192.168.24.220そう。 この恐ろしいメッセージは、それを無視。 ちょうどyesと入力。 これはボックス内のCS50である。 それはあなたのパスワードを要求。 だからどこでこれらのコンテキストの場で それは[聞こえない]、パスワードの入力が求められます。 私たちが質問場所をたくさん持っている それは実際に入力していないと言います。 それはあなたの文字が表示されない パスワード入力時に、どちらかといえば、 セキュリティ機能のために、もし理由 誰かがあなたの肩越しに見ている 彼らはスタースターを参照してください その後スタースター、彼ら あなたのパスワードことを知っている 4文字です。 だから、アイデアは、それが要求されますです あなたのパスワード、タイプのあなた。 それが示すことはないだろう あなたの文字、 それは実際にそれらを受け入れることだ。 この場合には、いつでも使用 これまでパスワードプロンプトを参照してください アプライアンスを扱う、 パスワードは真っ赤になるだろう。 だから、深紅。 そして今、ここで、この内部 私のMacにある窓、 私は基本的に抱えています 同じ正確なビュー 端末の内部など アプライアンス内。 だから、これを実行する必要はありません。 あなたは、あなたはすべてを行うことができます アプライアンスの内部で欲しい。 私はほとんど実際に行うことはありません アプライアンスで何か。 私はほとんど常に、今それを最小限に抑え、 私は、アプライアンスにSSHを働いています。 どちらかと言えば、あなたの場合 遅いコンピュータを持って、 あなたが違いに気づくかもしれません。 私が好むので、私はこれを行う このターミナルウィンドウ。 それはのようないくつかの機能を備えています 私は、ウィンドウを分割することができ、 そして今私は中SSHを使ってログインできる アプライアンスを介し。 私は2つのSSHは一度起こっているのだ。 お使いのコンピュータは、特に遅い場合 あなたが、アプライアンスで作業している そしてあなたはこれが実現 本当にラグが多い、何でも。 はるかに速くなる傾向にある あなたがでSSH-EDなら。 しかし、そうでなければ、あなたはどちらの方法で作業することができます。 聴衆:SSHは、どういう意味ですか? ロブ·ボウデン:セキュアシェル、 そのような何か? SSHは、何を意味するのでしょうか? GABRIEL:セキュアシェル。 アリソン:それはちょうどセキュアシェルです。 ロブ·ボウデン:セキュアシェル。 それはだyou--プロトコルだ セキュアなプロトコル、暗号化されたそう。 人々がネットワークをスヌープすることはできませんし、 あなたは何にも言っているかを見る あなたはへのssh-EDだ。 そして実際には、昔で CS50の日なので、2009年に 私は一年生、方法だったとき あなたは、CS50問題セットに働いた あなたはいくつかのサーバにSSH-EDだった 、我々はあなたのアクセスを与えた あなたがそこに働いた。 だから、これを持っていなかった グラフィカルなアプライアンス。 あなたがgeditのを持っていませんでした。 あなたはこれらすべてのものを持っていなかったこと あなたが視覚的にポイントしてクリックすることができる。 あなたは、このインタフェースで作業しなければならなかった。 私は、このインターフェースで作業することを好む。 私たちが行っているもののそう一部 今はオーバーに行くべき の束である あなたがすべきことを命令 などに精通して取得するために開始 あなたは、コースに沿って行く。 そして正直に、あなたに一度 それは、彼らに慣れる そんなに速いのです このような環境で働く それはファインダーで作業するよりも、 物事をドラッグしてクリックする。 そこでここではある。 今、私はちょうど、SSH-EDで、など あなたlocation--デフォルト クラス内でこれらのコマンドのいくつかを見て、 しかし、我々は再びそれらのすべてをオーバー行くよ。 我々はしているデフォルトの場所 中には、ホームディレクトリです。 そして、ちょうどディレクトリ、 フォルダの別の単語。 だから我々は、ホームディレクトリにいる。 lsコマンドを入力し、ファイルをリスト このディレクトリにある。 明らかに私は、以前blah.cを作成しました。 だから我々はデスクトップディレクトリを持っている。 あなたは、構文の強調表示に気づく? 水色のハイライトを示し ディレクトリとストレート白 単なるファイルを示します。 だからがあるように起こっている あなたが見る、いくつかの他の色。 実行ファイルはおそらく起こっている 緑色またはそのような何かであると。 [OK]を、私たちはホームディレクトリにある。 今、私は別のに行きたい場合は、 ディレクトリ、CDは私が欲しいコマンドです。 だから、ディレクトリを変更し、 ディレクトリの名前を渡します あなたがに行きたいという。 そこでここでは、4つのオプションがあります。 私はダウンロードに行くことができ、そして今我々が見る ここでは、この挿入句を更新しました と言って私は〜/ダウンロードにいるよ。 だから、チルダは何ですか? それはのための速記です あなたのホームディレクトリ。 だから、あなたは、ほとんどすべてがしようとしている あなたのホームディレクトリに関しても、 とpwdはちょうどコマンドです 私は、その年に一回使用 ただ、現在のディレクトリを印刷します。 だからあなたはここでそれを参照してください。 〜/ダウンロードが本当に解決し /ホーム/ jharvard /ダウンロードへ。 SO /ホーム/ jharvardは私のホーム·ディレクトリです。 だから我々はCDには、ドットドットことができます。 今、ドットドットは、その特別なディレクトリである 常に一つのディレクトリまでを指します。 だから私は〜/ダウンロード、その後のcdドットにいる場合は、 ドットはチルダに私を持ってしようとしている。 我々は、CD、ドットドットはどう思いますか 今に私を持参しようとしている? これは、/自宅に私を持っていきます。 だから、印刷作業ディレクトリによって【数 私は今は/ home / jharvardにいるよ。 それとは一つのディレクトリまで、 今では家庭/ここに述べています。 今のcdドットドット。 今私は、ルートディレクトリにいるよ、 そして、あなたは再びそれを行うことはできません。 あなただけに滞在します 永遠にルートディレクトリ。 ルートディレクトリは全体の束を持って あなたがに見たい場合には、物事、 次のことができます。 例えば、私は行けば ビンに、それが含まれています たとえばls、すべてのこれらのバイナリ、 そしてCD、およびそれらのもののすべて。 だから、これらのコマンドを実行する必要があり システムのどこかに存在して、 そしてそれは/ binディレクトリにあります。 しかし、あなたが行うほぼすべてがある あなたのホームディレクトリからになるだろう。 とCDいかなる引数なし、 あなたがする必要はありません、〜CDを言うことができます。 CDはあなたを持参しようとしている バックあなたのホームディレクトリに移動します。 最後1。 CD - バックにあなたを持参しようとしている あなたがしていた最後のディレクトリ。 だから、僕は、続けて2回cd'dので、私の 最後のディレクトリがホームディレクトリだった。 私はビンを大幅に削減するために行く場合は、今 のアップ、ユーザーへ行きましょう。 ユーザーのシェア。 それでは、ユーザのシェアに行こう。 今、私は、ユーザーのシェアになりましたよ。 CD - バックビンで。 だから、これは特に便利取得する あなたがhave--、いつそれがトグルします。 したがって、ユーザーのシェア、バックビン、共有ビン。 だから、これは便利な取得します。 あなたは、自分が多くなるかもしれません 多くの、多くのネストされたディレクトリ。 そして、あなたは何かをしたい 上位ディレクトリで実際に素早く。 あなたがそのディレクトリに移動し、作る そのような変更とか、 そして今、あなたは行き​​たい バックあなたがいた場所に。 CD - 。 私はいつもイライラしてる 私は行くことが起こるとき、 そのディレクトリへのI で作業をやってみたかった。 私が行ったとき、私はいつもイライラする その代わりに、ワンステップの二つのステップで、 それがそのCDを意味するので - 起こっている その中間の場所に持参する 代わりに私が行きたい場所の。 だから我々は、すべてのリストファイルを参照してください。 我々はこれまでに周りを取得する方法を知っている。 だから今のはファイルの編集について話しましょう​​。 だから、このコースでは、あなたがほとんどだ いつものgeditを使用することを期待した。 あなたがしたい場合は、次のステップを取ることができます コマンドラインテキストを学習を開始 エディタ。 だから、さまざまなオプションが存在する。 そしておそらくあるものは あなたに関係することになるだろう、 我々はナノは、Vim、Emacsを持っていると。 だから、ナノは初心者です コマンドラインのテキストエディタ。 だから、ナノのオン行こう blah.c私が以前に作成した。 それはちょうど、この標準のCファイルです。 そして、あなたはものの全体の束を参照してください 画面の下に起こって、 どうやらblah.c このCコードが含まれています。 だから、この特定のエディタで、 何それはbottom--で言っている 今、このキャレット記号、 私たちはこの^ G、^ X、^ Oを参照してください。 だから、ほとんどすべてで あなたが見る、コンテキスト、 あなたはでそのキャレット記号が表示されることがあります スタックオーバーフローに関するオンライン他の場所、 そのような何か。 それはほとんど常に制御することをいう。 だから私はやりたい終了します 制御X.コントロールXは、終了します。 と私は私の矢印を使用することができます キーは周りに移動します。 私が指摘し、容易にクリックすることはできません注意してください。 あなたの矢印を使用して必要 キーは周りに移動します。 設定があるかもしれません ポイントしてクリックします。 しかし、ここでいくつかの変更をしてみましょう。 今、コントロールXは、出口に行く。 これは、修正されたバッファのセーブ言おうとしています。 今イエスのプロンプト、Y、N無しのため。 キャンセルのためのコントロールC。 私はちょうどイエスと言うだろう。 書き込むためのファイル名。 デフォルトでは、ファイルである それが既にある。 Enterキーを押します。 [OK]をクリックします。 今、私はちょうど、そのファイルを編集した それを保存して、それが変更される。 だから、ナノが最も簡単です テキストエディタはに慣れる。 代替案はvimとEmacsのです。 それらは、より高いレベルのテキストエディタです それは非常に急な学習曲線を持っている。 だから、私の個人的な好みは、Vimのです。 そして、それはさまざまなオプションがある。 そして、あなたは慣れれ それには、次のように決してないだろう 他のどのに行きたい あなたのためのテキストエディタだけ 非常に多くのものを持っている これらの中であなたが利用可能な、 それは本当に取る 学ぶのに長い時間。 だから、多分あなたはちょうど強制したい 自分は今、それに慣れるために、 私はそれが価値があると言うでしょう。 しかし、それは難しいです。 その後はEmacs。 私はいつもので、Emacsで苦戦 私は絶対に何もしない方法を知っている。 どうやらEmacsはデフォルトではありません アプライアンスにインストール。 我々は、おそらくそれを追加します デフォルトのインストールなど。 次のいずれかを学ぶたら VimのかEmacsの、あります への説得力のある理由ない これまで、他を学ぶ それは完全に異なるスタイルだ。 [OKだから、テキストフ​​ァイルを編集することです。 読者:あなたが立ち往生していた場合 Vimの中で、今、どのように行うwe-- ロブ·ボウデン:あり Vimの中で複数のモード、 全体がある Vimを学ぶためのチュートリアル。 ですから、あることが起こる場合は、 順番に挿入モードで そのあなたができる、テキストを入力する さまざまな方法でそれを入力し、 しかし、私はあなたが挿入モードに入る方法です。 Inまたは特別なから抜け出す あなたがしているモードは、単にエスケープ。 そして、あなたはちょうど得るために脱出のbash ネストされたモードで、あなたの中から取り出します。 ちょうど[OK]を、今私は戻って、通常モードでね。 だから、通常モードで、コロン。 あなたはそれが下部に表示されます参照してください。 その後、Q。 あなたが変更を加えたのであれば、qは終了します、 これI--は、私が変更を加えた? 私は明らかに変更を加えました。 あなたが変更を加えたのであれば、それはよ あなたは感嘆符を置くことができると言う。 私は強打それを呼び出すつもりです。 だから、あなただけに禁止を置くことができます 何もせずに終了し、 または結腸WQは保存して終了します。 wの一般的なようにすることは書いてある。 だから、ファイルを書き込む。 私が書いて、終了することができます。 それとも、ただ持っている可能性が QXスラム、q個の強打だけ かかわらず、そこから抜け出すために あなたが行った変更の。 すべての権利なので、今してみましょう go--我々はファイルを作成することができます。 ファイルの削除を開始してみましょう。 そして、私はちょうど1にスローされます 迅速な新しいコマンド、タッチ。 だから、fooのをタッチします。 バーをタッチします。 バズをタッチ。 私LSは、今、私たちは表示された場合 それらのファイルが存在していること。 彼らは完全に空だ。 だから、タッチだけで簡単です。 1の方法で、[聞こえない]。 技術的にはちょうど状態への2つ、 それは、それはタイムスタンプが更新されます。 だから、あなたが作成するすべてのファイルがあります それに関連付けられたタイムスタンプ。 だから、バズが作成された 午後四時21分で9月14日。 ので、もしそれが、今や16:22です 私は再びバズに触れ、私たち バズが最もあったことを参照してください。 最近午後04時22で修正された。 しかし、そうでなければ私はほとんど決して ファイルのタイムスタンプを見てください。 タッチので、ここで私はちょうど使用しています それはいくつかの簡単なファイルを作成します。 すべての権利なので、今RMがある 私たちがここで気にコマンド。 そして、我々はブーイングたRMができます。 定期的な空のファイルブーイングを削除言う。 そして、我々は、Yを入力することができ、今では削除します。 RMのバズ。 定期的な空のファイルを削除します バズなしの型のn。 今では削除されません。 だから、バー、バズはまだ存在しています。 fooがなくなっています。 ガブリエル:話しておいてください。 ロブ·ボウデン:厳選。 とても迷惑メッセージ ここでは、定期的なempty--を削除 あなたがダウンしてそこに何をしている? 定期的な空のファイルを削除します。 だから我々はしたくない場合は、 そのメッセージに悩まさ、 我々は、この-fで投げることができる フラグ、だから力だ。 私はrm -fにした場合、今、それはするつもりはない あなたはこのファイルを削除したいと言う。 それはちょうどそれを行うだろう。 およびls、私はもうそこにバーが表示されていない。 今では、潜在的にある 危険なコマンド。 それはあまりにも悪くはない傾向にある。 私たちは、どのように第二に戻ってくる それは本当に危険得ることができます。 とのいくつかの一時ディレクトリを作成してみましょう。 MKDIR、別のコマンド。 だから、MKDIRはコマンドです それはディレクトリを作成する。 そして今、lsコマンドによって私たちは、この素敵な光を見る 青はtempディレクトリを強調した。 私は一時にcdできます。 と私はfooというMKDIRできます。 fooのにcd。は、mkdirバー。 バーにcd。 だから我々は、我々は簡単に取得することができます参照してください。 いくつかの非常に深いネスティングへ。 今どのように私は、ディレクトリを削除するには? rmdirを。 だから私はちょうどまっすぐRMしようとすると、 私たちは通常のファイルでやったように、 RMバーがしようとしている バーを削除することはできませんと言う。 それがディレクトリである。 のための特別なコマンドがあります 種類の、ディレクトリを削除。 だから、rmdirをバー。 今、バーがなくなっています。 [OK]を、ので、rmdirを、私は使用しないでほとんどなかった。 今してみましょうbeing--理由 ここで通常のファイルバーを作る。 だから、rmdirをブーイング。 rmdirを。 fooの削除に失敗しました。 ディレクトリが空でない。 だから、上のdirを削除使用することはできません それで物事を持つディレクトリ。 だから、いくつかのオプションがあります。 あなたは、そのディレクトリに移動し削除することができます すべてが手作業で、次に出てくる とディレクトリをするrmdir。 それは明らかに迷惑な音が鳴ります。 何千ものは何があるかどう そこにあるファイルの? さて、あなたは* rm汎用性があります。 私たちは、第二に*について話します。 それは基本的にすべてのことを意味します。 しかし、いっそのこと、そうRM -r。 だから、RM -r--たくさんの中 コンテキストは、-rは、再帰的な意味 私たちは何の話でしょうどの 数週間で再帰的な手段。 しかし、それは基本的にトラバース意味 このディレクトリ全体 そしてすべてを削除。 だから、rmは-r fooが言おうとしている fooディレクトリに降り? はい。 定期的な空のファイルfoo /バーを削除しますか? はい。 ディレクトリfooを削除しますか? はい。 だから今fooとすべてのもの その中に削除されました。 今では特に厄介な得ることができます when-- 3に触れ、2に触れ、の1に触れてみましょう。 ファイルの全体の束を持っている可能性があります。 私が望んでいたなら、私は作成することができます ここで数千のファイル。 とRM -r fooが起こっている かなりいらいらすることができます。 はい、はい、はい、はい、はい、はい。 より多くのファイルを持つあなた すぐに何度も参照 私はyesと入力しなければならないでしょう。 さて、私たちはどれだけ私たちができる前に見た はい、-fを入力する必要を取り除く。 ですからます。mkdir fooのでcd fooのタッチ1 2 3。 [OK]を、そのようにます。rm -rf fooがしようとしている 盲目的に完全にはfooを削除します。 いいえプロンプトん。 いいえ何でもありません。 fooがなくなっています。 だから私はこれを使用する傾向がある すべての時間を命令。 つまり、それは、前記 非常に危険なコマンド、 私のような何かを行う場合には理由 これは、それがプロンプトを表示しません。 それが消えてしまいます。 そしてそれはかなり頻繁に発生し、 さらに高いレベルのCSのコースで。 時々、我々が表示されます 何か誰か 私は誤って私たちは、rm RF-ED私の家は述べています ディレクトリと私のPセットのすべてがなくなっています。 そして、それは壊滅的だが、 しかし、誰ゴミ箱はありません。 全く何もありませんだ あなたが取得するために。 それはちょうど逝ってしまった。 さらに悪いことになる のrm -rf /のようなもの。 だから我々はちょうど議論 そのルートディレクトリ。 これは、すべてを保持している お使いのシステム上のファイル。 物事はかなり厄介な取得する傾向がある あなたはlsのようなものを削除すると、 そしてCD、およびそれらのすべて。 読者:違いは何ですか rmは、高周波、およびRm *と ロブ·ボウデン:だからRM * - アリソン:質問は何でした rmは、高周波、およびRm *との差。 ロブ·ボウデン:だからRM *。 すべての一般的な手段でスター このディレクトリの内容。 他を考えるしようとしてい スターを示すの方法。 さて、一般的には実際に主演 任意のパターンに一致することを意味します。 だから私はDOG1と呼ばれるファイルを持っている場合、 DOG2に触れ、CAT1に触れ、CAT2をタッチします。 だから、lsコマンド* 1 CAT1を印刷しようとしていると DOG1、その星を充填することができるので、 一つはそこにあることが必要with--で、 しかし星は、猫や犬のいずれかになります。 それはワイルドカードです。 それは私が探している単語です。 ワイルドカード。 または私は*犬をLSができ、 私は、DOG2をDOG1を見守っています。 だから、それらのファイルをリストする それは、その特定のパターンに一致する。 あなたはこの方法ではlsを使用することができます。 Lsは*スターは何もマッチします。 だから、すべてを印刷するために起こっている このディレクトリの内容 それらのすべてが一致するからである。 それは何も印刷するつもりはない 上位レベルのディレクトリで。 私はサブディレクトリがある場合、fooの、そして 触れる1 2 3--ので、今のrm *スターなら、 CAT1、CAT2、DOG1、DOG2を削除します。 fooのを削除することはできません。 それがディレクトリである。 だから星はすべてに展開 ディレクトリ内のファイル。 だから、技術的には、rm *言っているようなものである RMのCAT1、CAT2、DOG1、DOG2、fooという。 ます。rm -rf一方、技術的に星がだろう 私たちが望むものを達成するが、RM -rf-- 私はこの外に行けば ディレクトリ、ます。rm -rf一時、 それが一時に入るようになるだろうと 再帰的にすべてのものを削除します。 だから、星はその点で分離されている そうこの事by--理解されている 私が実行していることを、この事 それはコマンドのために私を促している その後実行し、やって 彼らは、私は自分の殻これを呼び出す。 そしてそう、このシェルは、プログラム自体である。 そして私は、私を望んでいた場合は、 では/ bin / bashのを実行することができます。 シェルはbashを呼ばれています。 そして今、我々は何かに気づく 少し変更されました、 それがために私の設定ですので、 シェルは多少異なります。 しかし、今、私は技術的に実行しているよ 私の元のシェル内殻、 そして私は今、そのシェルを終了し、することができます 私は戻って私のトップレベルのシェルに思います。 というのが目的 それは星をis--。 だから星は何かである bashのことで理解していた。 ですからます。rm -rf、-rfフラグである ちょうどRMによって理解した。 それはそのときに知っている あなた-rfを渡す それが再帰的に削除したい 確認メッセージを表示せずにすべてのファイル。 スターは何かが理解されている bashのによってそのあなたがRM *を言うとき、 bashが言おうとしていません ちょっとのrm *、スターを削除します。 bashは* RM言おうとしている CAT1、CAT2、DOG1、DOG2を削除します。 それが自動的に展開になるだろう ディレクトリ内のファイルがすべて表示されます。 同様にチルダは、別である bashが理解シンボル。 あなたがCD〜、bashの膨張を言うとき あなたのホームディレクトリへの。 他の質問、これまで? [OK]を私たちは迅速に起こって開始するつもりだ。 タブ補完。 ちょうどそこにそれをスローする。 多くの人はしないでください これが存在して実現しています。 だから私は、CDダウを入力した場合、私は ダウンロードへ行きたい。 私はnloadsを入力する必要はありません。 私はちょうどタブを打つことができます。 だから、あることを認識 ダウはその接頭辞です 何も一致していません このディレクトリにある他、 それはあなたのためにそれを完了します。 今、私は入力することができます。 私はまた、再帰的にそれを行う。 そうします。mkdir fooという。 さんがfooに行こう。 は、mkdirバー。 だから私の自宅に戻って ディレクトリには、私がダウンロードを見ることができます。 ここでもう一度タブを押す、 自動的にfooを埋めるつもり。 それはディレクトリのみです。 自動的に、タブをもう一度打つ バーを埋めるつもり。 だから今、私は(〜ダウンロード/ fooの/バー)にいるよ。 したがって、このタブ補完、 たびに私は、営業時間に着いた と私は以上の立っている 誰かの肩、 そして彼らは、RMをつもりだ D-O-W-N-L-O-A-D-S、私が死んだ。 ちょうどタブ、タブ、タブ、タブ。 だから、間違いなくタブを使用していました。 同様にアップ 多くの人々は、ダウン ただそれはに起こった 上下にヒットしたことがない。 それは、以前通って行くよ コマンド、あなただけの何かを実行した場合ので、 そして、あなたは再びそれを実行したい、 あなたはそれを得るまでちょうどホールドアップ。 [OK]をクリックします。 非常に速く、いくつかの他のもの。 それでは一時に戻りましょう。 それではいくつかのファイルを作成してみましょう。 だからここでは、私はちょうどよ いくつかの単語をリストする予定。 イヌ、ネコ、ニャー。 それでは犬、魚をやってみましょう。 だから今担当者は非常にある そのあなたの役に立つコマンド 全体で検索するために使用 特定のテキスト用のファイル、 そして技術的にあなたが本当に行うことができます それのための複雑な式は一致する。 だからここに、私はgrepする場合には、どのような 私が検索したいのですか? それでは私は猫を探しているとしましょう​​、と 私はこれらすべてのファイルを検索したい。 だから私は、これらのファイルのすべてをどのように行うのですか? 星。 だから、ファイル1で、私は猫を持っています。 私はおそらく持っている可能性が それは何か良いと呼ばれる、 それは次のようになりますので、 行番号か何か。 しかし、ファイル1で、私は猫とのラインを持っている。 ファイル2で、私は猫とのラインを持っている。 だから今私は、ファイル1の内部を見ることができますし、 を参照してください。そうそう、そのファイルが猫を持っていた。 予告ファイルは3つが一致していなかった 猫がそこにないので。 私はニャーをgrepすることができます。 唯一の2はニャーを持っています。 だから、これは組み合わせることができ、 再び、-rと、その 私は前に言ったように 頻繁に再帰的なことを意味します。 だから私はここまで来ることができ、grepの-r 任意のインスタンスのための編集しましょう​​of-- ちょうどそこに猫を投げるためにこの1。 の任意のインスタンスのためにそのようにはgrep -r このディレクトリ全体猫。 そして、それは再帰的になります サブディレクトリを検索します。 だからバズでは、猫があります。 一時/ 2では、猫があります。 とTEMP / 1に猫があります。 だから、ファイル内での検索です。 今、あなたはまた、検索を使用することができます。 だから具体的には約です見つける 指定された名前を持つファイルを探して。 それでは、いくつかの詳細を作成してみましょう。 それではダウンロードへ行こう。 DOG1タッチします。 CAT2をタッチ。 cat_dogをタッチ。 catcatをタッチ。 だから私はすべてを見つけたい 名前の犬を持つファイル。 だから見つけ、最も長いため 時間は、私が思い出したことはありません 最終的に私まで、どのように働いて見つける それはとても明確に何かをお読みください。 だから、自動的に再帰見つける。 あなたは-rを渡す必要はありません。 だから、ドットを見つける。 私たちは、まだドットについて話していない。 常にドットドットのに対し、 1ディレクトリまでをいう。 ドットは、常にカレントディレクトリを意味します。 だから私は中-rドットたRMができ 同じように私は* -rf rm汎用することができます。 最終的に彼ら 同じことを実現。 ます。rm -rfドットは削除しようとしている 全体カレントディレクトリ。 [OK]を、私はそこに行うにはしたくないもの。 しかし、ドットを見つける。 だから、再帰的に電流を検索する ディレクトリ、そして今ではすべて この後に、そのあなたのフラグの集まりです リターンから物事を除外するために使用します。 だから見つけるドットはすべてを返し、それを カレントディレクトリから見つけることができます。 それらは、すべてのファイルです 再帰的に検索する。 私たちは、第二のものの一部が表示されます。 しかし、場合にあなたは私がどのように疑問に思っている そのため、非常に少なくともコマンドK、 マックでの私の端末でそれをクリアします。 コントロールLは、一般的にクリアされます 端末の任意の並べ替えのためにそれ。 また、明確な入力することができます。 そしてあなたは今までに入手した場合 奇妙なscenario--へ それは私のカップルに起こったtime-- どこであなたのプロンプトの色 すべて台無しにするか、またはしている 何かを見ることができません あなたが入力しているときから、入力中 時々背景色が設定されているような 前景色と同じ そして今、あなたはフォントを見ることはできません。 リセットはちょうどリセット何かである デフォルト黒の背景にあなた、 白いフロント、または何 あなたがそれらを設定してください。 だからここで私たちはでしたか? ドットを検索します。 この過去だから今すべてのもの ポイントは、結果を制限する 一致したものに 所与のパターン。 だからここに私が検索したい 名前の猫を持つすべてのもの。 私は何も持って。 なぜそのような場合ですか? まあ、私はちょうどを探している 正確に名前の猫で何か。 私は何かを検索したい場合は それは、いくつかのパターンを有し、そしてcat-- 引用符は、技術的に必要ありません、 しかし、私はそこにそれらを投げています。 だから今それがあるためcatcatを見つけ それはそれだけのことだ いくつかの任意のを持って 猫が続く模様。 私は今、猫*を入れて、することができます catcat、cat_dog、CAT2を見つけ、 ものは猫とすべてのものであるため、 何が続く冒頭に。 あなたはこれを組み合わせることができます。 あなたはすべてのCファイルを検索したい場合は あなたが持っていることを、あなたは* .Cを行う可能性があります。 私たちはここblah.cている。 だから、検索の仕組みです。 あなたが検索できます。 これは、フラグの全体の束を持って さらに制限について。 そしてそれらの上に1が、それでは-dを言わせて。 だから、非推奨。 ああ、それは私が欲しいものではありません。 -dません。 タイプD。 だから、ドットを見つける - タイプd。 だから何それはちょうどやったことは私が探しているされている 現在のディレクトリ内のすべてのファイルのための A-- Dの略で directory--ディレクトリのタイプ。 これは、すべてのディレクトリを返す 現在のディレクトリ内。 とタイプFは、すべての規則的である ファイル、すべての非ディレクトリ。 だから、それはただだ 別の方法の例あなた 他の検索を制限することができます ファイルの名前だけよりも。 それは、30分をされています。 まだ行く。 アリソン:私はを通してそよ風よ。 それは大丈夫です。 ロブ·ボウデン:だから、いくつかの他のもの。 さて、感嘆符を強打。 だから、一般means-- さて、例を見てみましょう。 そう!fは、どのようなことは何をするつもりですか? まあそれは持っているようだ ドット-type fのを見つけることが繰り返される。 何!gはどうですか? それはちょうど* -r猫をgrepする。 ですから、繰り返して使用することができます強打 最近行わコマンド。 私が入力した場合!GREだから、それを再実行するつもりだ ほとんどのGRE始まったコマンド 最近。 そして、あなたはこれらすべてを見ることができます 歴史を持つコマンド。 だから、歴史。 これらはすべて 私は今日実行したコマンド。 よく、それは文字通りではありません 今日に限定 しかし、私はこれだけを使用しました 今日の時点でアプライアンス。 それはあなたの全体だ あなたのbashシェルの歴史、 それはいくつかの点で遮断除く。 読者:あなたはどうなります 履歴[聞こえない]コマンドとエラー 結果はまだ印刷されますthe-- ロブ·ボウデン:ええ、存在する場合 これらcommands--のいずれかでエラー それでは言わせて、つまり、 エラーコマンドが見つかりません。 まだ歴史の中で表示されます。 わかりました。 何でも上の他の質問? だから、ビッグバンだ。 さて、本当に便利なコマンド、男。 だからあなたに与えます 指定されたコマンドのマニュアル。 だから、それでは、男LSを言わせて これは私にはlsを見せている。 これは、ディレクトリの内容を一覧表示します。 私はそこを参照してくださいどこに、これがある 存在し、これらの様々なフラグになります。 だから我々はそれが-lが存在しているLSを参照してください。 我々はそれを読むためにあたかも。のls -l 私のこの完全なリストを提供します ファイルの所有者を持つディレクトリ、 ファイルのサイズ 修正されたタイムスタンプ。 だから、lsコマンドに-aはあなたがかもしれないもう一つです 実際にやや頻繁に使用する。 -alはこの過去のls私の最も一般的なフラグです。 だから、-a、たくさんあり​​ます気づく ただLSより多くのファイル。 のls -a。 これらのすべてのファイルとの共通点は何ですか? 彼らは、ドットで始まる。 だから、これは、Linuxのコンベンションつまり ドットで始まるファイルが隠されている。 だから、それだけであることを意味します ときに我々だけでストレートのls、 または私達は使用してこのディレクトリを検索している ファインダーと同等、またはWindows エクスプローラと同等の、その私たち これらのドットファイルを表示したくない。 彼らはただ、物事の見解を汚染。 そこで、彼らは隠されている あなたない限り、具体的 -aのようなもので、それらを要求する。 だから私は.localのにCDをすることができ、私が参照してください。 それ自体は、ディレクトリとであること 共有ディレクトリ、および アプリケーション、および何とか何とか何とか。 だから、彼らはちょうど隠されているファイルに点在しています。 [OK]を、ので、他の重要なもの。 私はスキップすることができますいくつかあります。 約の本物の迅速な話をしましょう ファイルリダイレクトの事。 だから、全体の複雑なシリーズがあります 物事のあなたがこれらを行うことができますが、 しかしちょうどそれらを見るために、エコー、の言わせて。 別のコマンド。 本当にばかコマンド。 それがないすべては、私はそれを伝えるものプリントである。 だから、ハローエコー。 それはちょうどスクリーンに挨拶をエコー。 こんにちは。 エコーズハローワールド。 だから、一つのコマンドまたは1 bashが理解シンボル これは、シンボルよりも大きく、かつ それは、ファイルシンボルに出力される。 もしそうなら、私の出力は次の fooは、今ファイルあります 、fooというの内側 これのHello Worldです。 だから私はエコーときことに気付く こんにちはfooの中に世界のパイプ、 それはHello Worldのをエコーし​​ませんでした。 その代わりに、ファイルfooに入れた。 そして別のコマンドだけ 、あなたに猫をそれを投げるために。 それはちょうど完全に簡単な方法です ファイルの内容を一覧表示する 私は開く必要はありませんように それを表示するには、テキストエディタ。 のため、内容 fooというファイルのHello Worldです。 そして、私は猫blah.c可能性、 内容はこれです。 この場合も、これらはやる、コマンドではありません あなたがそれらをすべて記憶している期待しています。 アイデアは、あなたがそれらを見てきている。 たぶん、あなたは上で作業している 何か、あなたがしている のような私は、このファイルを開くのはうんざりだ。 私はちょうど見えることがしたい 実際に素早く内容で。 その後、それを行うことができ 振り返ってみると、ああ、私を言うこと のようなものを覚えている それが存在し、それが猫だ。 だから、ファイルに起こっている。 今、何か良いは実際にはありません まだファイルからの読み取りの例。 かかる何か何ですか での標準から何か? 任意の単純Linuxコマンド? 私たちは夫婦で、それを取得した場合 週間piece--よくすべての、 今週あなたが作品を持っている ユーザからの入力を取り始める。 だから通常は次のように入力 キーボードでその入力。 代わりにそれを入力するのは キーボードでの入力、 ファイルから次のことができます代わりにパイプ あなたが行うときにマリオ、./marioので、 任意のファイルからのパイプ、および それはマリオ·プログラムを実行するために起こっている。 での入力を期待していません キーボード、代わりにそれはだ ただ読むつもり fooのファイルからの行。 fooはにそれを置くよりも、とても大きい fooのファイル未満のfoo fooのファイルからのものを取り、 このプログラムへの入力として使用していますことを。 そして、ちょうどそれを見て、我​​々はまた、エコーでした fooのバーバズ、その後、1つではなく より大きく、のがfooに2をやらせる。 それは何をしますか? それはちょうど、ファイルに追加します。 私はに何とかエコーない場合ので、代わりに気付く fooとその後猫のfooという、それだけで何とかです。 ファイルへだから、ときに出力、それを 完全にそのファイルを上書きします。 あなただけ追加したい場合は、 [ダブル?年生。 ?] そして最後はパイプである。 パイプはどこに、はるかに複雑取得 それは一つのコマンドの出力を受け取り、 そして、次のコマンドにそれをフィードバックする。 だから、いくつかの一般的なもの、歴史。 だから、うわ、私はこれを見てする必要はありません。 私に私の歴史の中ですべてのコマンドを表示 私は何かのために-EDをgrepする場所。 いいえ、それは混乱だ。 私が見つけたすべてのコマンドを表示します。 すべては私が今まで走ったコマンドを見つける。 だから、歴史。 へ今すぐ履歴出力 このコマンドのリストを画面で、 私はしたくない 画面に出力して。 代わりに私はgrepをパイプにそれに行くよ。 それでは、検索のすべてのインスタンスをgrepしてみましょう。 だから今の代わりにgrepを撮影 代わりに入力、of-- 私たちがしているinput--としてgrepは処理することができます 若干異なるここではgrepを使って。 だからではなく、ののリストを入力する 我々が検索したい事柄 とgrepが入力として取っていると述べた。 だから、僕はgrepを、それを見つけるならば 私は物事を入力するのを待ちます。 だから、猫はハロー見つける。 こんにちは。 検索。 私が見つけると入力するたびに注意してください それは私が見つけるを入力したことを認識している。 だから、これに代えて、意志 検索用の検索ファイル。 だから歴史は、今しようとしている 出力すべてのコマンドのリスト。 私たちは、その出力を入れている、 そして我々はgrepのにそれを供給している、 ので、それが吐き出すだ 検索のすべてのインスタンス。 その理由は、私はそれが混乱するだろうと述べた それはまだ混乱している場合だI--です。 私は、grepのをgrep場合。 それはほとんど常にです注意してください コマンドちょうど私を示す そのコマンドので走った 自身がその中にはgrepを持っています。 [OK]を、そのように何でも上の任意の質問? そして、私はこの時点でそれを上に転送します。 うまくいけば、これはいいです すべてのコマンドの概要 あなたが持っている必要はありませんことを 記憶しますが、これらは作る 何私の固体95% コマンドラインで行う。 また、コマンドラインに留意してください 自体は、bashはプログラミング言語であり、 そしてそのようにあなたがそれに取り掛かる、あなた 本当に複雑な物事を行うことをお勧めします。 そしてそれはのようなものを持っています ループ、IFS、およびそれらのすべて あなたがに慣れるつもりだ あなたのプログラミング言語。 しかし、それは超えている このセクションの範囲。 [OK]を、ので、noの質問? アリソン:なし? GABRIEL:あなたはto--つもりです アリソン:私はそれを行うことができます 地雷をあなたがしたい場合。 我々は何が起こるか見ることができます。 ロブ·ボウデン:アリソンに消灯。 アリソン:ウー。 あなたは、ロブに従うのは難しい行為だ。 あなたは私があなたと一緒に切り替えたいですか? それとも、[OK]を、得た。 私がしようとするつもりはないよ かなりそこにとして長くなる。 これが可能ならば見てみましょう 私はそれがしたいように動作します。 多分? ハハ! はい。 だから、僕は非常に迅速に行くつもりです 変数、ループ、条件を通して、 コンパイラに少し。 あなたは、質問がある場合 どんな時間が、私を停止してください。 これらの人は繰り返すように私に思い出されます 私は忘れないようにあなたの質問、 あまりにも悪いことではありません。 変数だから、うん。 私たちはあなたの誰も持っていない ここではスクラッチ作品。 私はあなたのほとんど確信している場合など あなたはゲームのいくつかの並べ替えを持っていた あなたがスクラッチで作成されていることを、あなたが持っていた スコアのようなものを追跡するために、 または時間、またはそのような何か。 だから、それらの明るいオレンジ色 我々はそこを参照してください作品 ちょうどスクラッチフォームです 変数、あなたは間違いなく意志 変数を使用すること あなたのプログラムを通して。 あなたがいないなら、私は本当にないんだけど あなたがやっていることを確認してください。 しかし、いずれにせよ、大きなもの、 変数を定義する。 C言語ですべての変数があります 宣言された型を持っている、 ので、私はあなたに非常にを与えた 一番上の一般的なもの。 つまり、あなたがあるでしょう 入力し、どのような あなたは、変数を呼び出すことにしました。 だから、この場合には、タイプ あなたの変数リストで。 私たちは三つの例を持っている。 いくつかのグレードのシャア、 何Aの 私はあなたのすべてが欲しいと確信している このクラスで取得します。 あなたは複数を定義することができます 1ライン上の変数 限り、彼らはすべて同じ型だとして、 そこに私たちの第二の例はある あなたは3を持っている場所 変数x、y及びz。 彼らはすべての山車だ。 そして、あなたはこの最後では、することもできます int型スコアと番号付きの例 チームの、することができます すぐそこにそれらを初期化します。 だから、真ん中の例ではどこ 単に、x、y及びzのフロートを有し それらは、まだ初期化されません。 彼らは、値を持たない。 それとも、ガベージ値を持つ。 そして、あなたは試してみて、それらを使用する場合、 コンパイラはあなたに叫ぶでしょう。 あなたが両方宣言する必要がと あなたの変数を初期化。 だから、この最後の1は、我々は両方をやっている。 私たちは、変数を宣言している スコアやチームの数の、 私たちは、それらを初期化する与えている それら7および4の初期値 それぞれ。 涼しい。 みんな良い? 恐ろしい。 [OK]を、ので、いくつかの規則。 君たちは読んだことがある場合 スタイル50を介して、これらの 我々がしたいだけのものがあります あなたのスタイルで実装します。 だから、意味のある名前。 あなたは物事を呼び出して起動した場合 単にx、y、およびzは、特に あなたがより長いに入るように プログラムは、あなたがしている おそらくに行く 自分自身を混乱させ、も この変数が参照しているものなどがあ​​る。 私はこれが何を意味するのか見当がつかない。 だから、それが保持​​することを意図しているかの スコアは、それがスコアと呼ぶ。 それはいくつかの答えを保持するためのものだ場合 または、結果としてそれをそのような名前を付けます。 ループの場合、どの頂きます 次のスライドに入る、 一文字変数は大丈夫です。 ロブ·ボウデン:I、J、およびkである forループのためだけの規則 誰もがそれらを期待すること I、J、およびkと呼ばれる。 あなたは、私が行を見ることthem--呼び出すことができます 時には列または行呼び出し 2つのネストforループ、および それは、標準のようなものだ。 しかし、i、jは、完全には理解される。 アリソン:ええ、私と jは、あなたが完全にいいですよ。 のような明瞭さのために あなたのPセットの一部で、 それはより多くを持っている意味をなすかもしれない そこに記述的なものばかり それを追跡する。 しかし、私はi、jは、と私は思うkを考える 私たちの大半すべての使用。 ロブ·ボウデン:これらの付 規則は、とてもスタイルが重要です。 それは、4つの軸の一つだ その上にあなたが採点している、 そしてそれだけで渡って行くことは簡単です あなたのPは最後に設定し、確認してください 文体の間違いがないこと。 だから、あなたが正しくタブ移動していることを確認してください。 あなたの変数が命名されていることを確認します。 いくつかのコメントを残す。 それは、これらのポイントを取得するために非常に簡単です。 あなたが考える必要はありません これらのポイントを得るために何でも。 あなたが何かを把握する必要はありません。 それはちょうどそれはかなり見て作っている。 アリソン:実際には、我々 、スタイル50を持っている あなたがめちゃくちゃにどこを教えてくれます あなたがスタイルにめちゃくちゃにしている場合、最大 そして、まさにあなたのことを教えてくれます 修正する必要があり、どのようにそれを修正する必要があります。 それは言及するだけでも良いことだ それは当然の方針だという あなたがオフィスにいる場合に 時間とあなたのコードは混乱です、 私達は助けるために辞退することができます あなたはそれがよりよいようになるまで。 だから、右から始め、 一貫したスタイルを保つ、 あなたもほんのするつもりだ ときあなたの人生ずっと簡単 あなたは、デバッグを通過しようとしている。 あなたが把握しようとしている場合 あなたは波括弧が欠落している場所 そして彼らはあなたがしている、あらゆる場所にある ちょうどあなた自身の人生が困難になっています。 だから、スタイルと一致している。 私はそれがあなたの人生を容易に約束。 それは、私たちの生活を楽にします。 みんながずっと幸せになります。 そして、それはあなたが望むものだ。 GABRIEL:あなたのグレードが高くなります。 アリソン:はい、あなたの成績。 あなたのTFはあなたのようなものだ場合は、 良好になる傾向がある。 すべての権利、そして、ちょうど ここで第二の点。 一貫性のある初期化。 我々が見たように、あなたが宣言することができます 物事を初期化します。 同じ行に複数の変数。 一つのこと私たちはあなたをしない希望 行うためには、いくつかの変数を宣言することです と同じにそれらを初期化できません あなたが他の人を初期化しているライン。 だから場合について、その 全く意味ない、 私たちはここでの例を持っている どこに我々はint型を宣言している 四半期の変数 ダイムとペニー、 しかし、四半期およびペニー 全く初期値を持たない。 我々はそれらを初期化していない、 しかしそこに真ん中 我々はすでにダイムを0に初期化。 だから、どちらかの四半期、ダイム、ペニーを行う。 または四半期が0に等しくない。 ダイムは0に​​等しい。 ペニーは0に等しく、または何 これらの初期値である。 スタイルで大きなもの、一貫している。 疑わしい場合に、一貫している。 しかし、あまりにも私たちのスタイルガイドに従ってください。 涼しい。 誰もそこに良い? 聴衆:スタイルガイドはどこにありますか? アリソン:スタイルガイド ウェブサイトは何on--のですか? GABRIEL:私はそれがmanual.cs50.net/--だと思う アリソン:スタイル? GABRIEL:スタイル。 うん。 アリソン:はい。 だからここで、スタイル50、質問。 manual.cs50.net/style。 はい? 読者:私たちは定義している場合 変数は、それはOKです 我々は[聞こえない]のように置く場合のような int型のスコア、次にint型のゴール。 だから、今私たちがしたことだと思います それらを一緒に定義するようになった? アリソン:だから、質問すべき あなたは冗長なコードを持っている あなたが定義しているとき intなどスコアなどの変数と 次の行のint型のゲームに? ROB BOWDEN:間違いなくあります 冗長コードが悪い例。 私は考えていない その冗長コード。 私はほとんど複数宣言することはありません これまでと同じライン上の変数。 そしてどちらかといえば、それは理由だ 通常、私はコメントのいくつかの並べ替えを残す 変数が何のためにあるのかを説明する。 だから私は、int型のスコアスラッシュスラッシュを言うよ。 何を追跡します。 総スラッシュスラッシュ中。 だから、そのように多くのグローサーだ 同じ行にそれらをすべて置くために。 私はちょうど同じ行にそれらを置くことはありません。 アリソン:それはだような気が この時点では個人的な好み。 読者:それはのために行くか あまりにループやもののため? ロブ·ボウデン:内側気に入りましたか? int型のように、私は0コンマに等しい 長さは、何かに等しい? あなたは選択肢を持っていないこと。 forループの初期化と part--ので、あなただけ見ているかもしれません int型私はあまり0セミコロンに等しい どんなセミコロン私プラスプラスより。 そのint型のiが、0に等しい 技術的にあなたがすることもできます 我々は前に見たものをやる コンマ構文で。 int型iが0コンマjを等しい 3カンマkが5に等しい等しい。 あなたが分割する選択肢を持っていない 複数の行にそのアップ、 それが標準だ。 それを見ることは罰金があります。 アリソン:恐ろしい。 さて、ループに便利セグエ。 そんなわけで、ここではいくつかの例を持っている の君たちはスクラッチで見たことをループします。 そしてもちろん、これらすべての ただ、Cで再作成することができます そして、彼らは基本的にあなたを許可する コー​​ドのいくつかのセクションを繰り返す 一定の条件まで、 満たされ、私たちはどのよ 話をした後に右に入る 約条件文でループします。 だから我々は3つの主なタイプがあります。 しばらくのためには、しばらく操作を行い、その 我々はすべて今、通過します。 だから、最初のものはforループである。 だから、いくつかの条件のために、 次のコードブロックを実行します。 我々は、このクールな小さなを持っている ここで一番下の図。 しかし、基本的にあなたが持っている あなたのために、その最初の行、 あなたはするつもりだ あなたの変数を初期化。 だから我々はiは、の話として 0やiに等しい、10に等しい。 あなたがすることを必要とするものは何でも 変数は、それはすべきだ そこに初期化されようとし、 宣言され、いくつかの値で初期化された。 それでは我々はいくつかを持っている 起こっている状態 私たちをチェックする 何かに対して変数。 典型的なケース場合でそう 多分あなたは、コードのこのセクションをしたい 5回実行します。 だから我々はiが0に等しいintを持っている、と我々と思います iが5未満である場合にそれになりたい。 だから、その条件はただである そのたびに確認する予定。 その状態であれば trueと評価された、それはだ 正確にコードを実行するつもり この小さな図は何を示している。 そしてそれは、それを実行します。 これは、変数を更新し、 私たちが見るものである 私たちのための最後の部分で そこにループ初期。 だから、それだけでこれをやっておこう その条件が満たされなくなるまで、 そして、それが終了します ループして続行 あなたのプログラムの他の部分と上に移動する。 誰もそこに良い? 涼しい。 だからここに、非常によく似た例だ 何かに私はちょうどについて話しました。 だから我々はただ印刷したい これは10回CS50です。 ですから、私たちが持っているこちらを参照してください。 私達のために、次に我々 変数を初期化する iが0に等しいとする。 私たちの状態はチェックしている それが10未満だと。 最初のときに我々だから、真と評価 起動し、私たちの変数を更新 それが実際に実行されるたびに これはCS50でプリントアウトする。 そして10回後に終了します。 涼しい。 ループは次回ながらそう。 そして、あなたがここに見るように、私たちは持っている このcondition--質問しながら、いくつか? 読者:私はどのようにジャンプすることができます 実際にだけではないつの番号、 しかし二つの数字[聞こえない] 私プラスプラスプラス? アリソン:だから質問はあなたがどの​​ようにできた あなたの変数は、複数ずつ更新 当時。 だから私プラスプラスの意志 1ずつ更新。 あなたがすることによってそれを更新したい場合 2、あなたは私がプラス2に等しい行うことができます。 ロブ·ボウデン:あなたが見たことがあります プラスまだ講義内のequals? 読者:[聞こえない]。 ALLISON:それは効果的だ iはプラス2に等しいと同じこと。 だから、それを取るために起こっていると 2ずつ、それを更新します。 プラスだけで何かある等しい 私たちはシンタックスシュガーを呼び出します。 ロブ·ボウデン:ええ、それらはのために存在する ほとんどすべての算術演算子。 に等しいので、私倍 数を倍増でしょう。 J格差は3が同じであるに等しい jと3で割ったjと等しい。 アリソン:またはマイナス2になると等しい 2毎回iをデクリメント。 ロブ·ボウデン:でもMODイコール。 あなたはビット演算子を見ていない、 しかし、キャレットが等しく、アンパサンドが等しい それらのすべてが存在する。 アリソン:時代のだから多く、特に Pセットの最初のカップルと、 あなたはおそらくによってインクリメントされます 1、私プラスプラス、Jプラスプラス あなたが行っているすべてのものがあります 一般的に使用される。 しかし、その更新条件である 完全にあなたのコントロール内。 あなたはどのような増分でそれを更新することができます あるいはどのような方法であなたがすることを決定。 たぶん、あなたもそれになりたい 時々乱数。 しかし、はい、たくさんあり​​ます あなたがそれを使ってできること。 あなたは私プラスプラスに限定していない。 ロブ·ボウデン:ちょうどあなたがそう それはまた、それが存在することがわかっている 別の形で存在する、プラスプラス私。 だから、あなたは今までオンライン検索している場合は、 そして、プラスプラス私を見ることが起こる ほとんど同じことを意味します。 アリソン:クール。 グッド? 恐ろしい。 whileループそう。 非常に似ています。 あなたは、いくつかの条件を持っている。 注意すべき主なもの ここで代わりになるものである 三つの異なる部分 セットアップするために、我々は1つを持っています。 私達はちょうど、いくつかの条件を持っている それがチェックされています。 と同様に限り、 その条件がtrueと評価され、 あなたのコードが実行しようとしている。 そして、それは偽だ場合には、それを 、移動を終了します あなたのプログラムの次の部分の上に。 だから、これは一種の何like--です チェックの良い例 いくつかの通常の状態のために? GABRIEL:真ながら。 アリソン:真の間は、行うことができます。 さて、図1は、1に等しい。 ロブ·ボウデン:あなたが行うことができますwhile-- だけではなく、forループを用いての、 あなたは常にコーディングすることができます whileループのループのために、 ので、私が0より大きいか iは10未満、一方。 アリソン:恐ろしい。 ループしながら、その後、我々は、どの操作を行いました ユーザー検証、最適です あなたがから何かを取得したい ユーザー、それが有効だかどうかを確認し、 そしてそこから続ける。 だから、知っているものの一つであると それが実行に起こっているということですしながらやる、 そしてそれは再実行します この条件が満たされた場合。 だから、おそらく最良の方法は、これを行うには ちょうどここに例を見ることです。 だから私は今述べたように、ユーザ 検証は本当にuseful--です または時々を行う実際にある ユーザー検証で有用。 だから、これはちょうど起こっている いくつかのユーザーを再促す 彼らは正の数を入力するまで、 あなたのPセットのために有用であるかもしれない 今週。 したがってこの場合には、ときに我々 最初にこのプログラムを実行する、 それは印刷するために起こっている 正の数を入力してください。 これは、いくつかを得るために起こっている ユーザからの入力、 そして、それは確認して起こっている 条件に対して、その入力 あなたはそれのために設定したこと。 したがって、このケースでは、チェックになるだろう。 これは、[OK]を、言おうとしています 我々の入力が負である あるいは、0または負である、 これは無効になります。 だから、それは再度プロンプトだろう。 質問? 聴衆:これはその後と同じですか whileループあなただけの、そのコードをコピーした場合 whileループ[聞こえない]それを置く? アリソン:だから質問があっただろう これはちょうどしばらくと同じでなければ ループは我々だけにした場合は、 上記のwhileループをコピーします。 したがって、この場合には、あなたのwhileループである 最初の状態を確認する予定。 我々が試みこの場合、もしそうであれば 単にwhileループとして書き込むには、 それはしばらく時間が言うでしょう 入力が1未満である。 しかし、我々はそれのための入力を持っていません。 読者:あなたの場合[聞こえない] ループはこのコードを含めて、 しかし、あなたは、コードを対処 また、whileループ上記。 あなたはただ、このコードを持っていた [聞こえない] whileループ。 アリソン:それは次のようになります 同じこと、はい。 だから、あなただけのwrite--できた 代わりにdo--イエスを持っていることの。 GABRIEL:しかし、それはよりエレガントだ。 アリソン:ええ、それはよりエレガントだ。 あなたは、デザインやその他もろもろに入ることができます しかし、はい、あなたは完全にそれを行うことができます。 他の質問? クール、[OK]をクリックします。 だから我々は条件について多くのことを話した 我々が持っているすべてのこれらのループと、 私たちは、実際に取得している ブール式での条件。 繰り返しますが、C言語でこれらを使用し、 これだけの種類の移行 以上のグラフィックインターフェースから 実際にコーディングします。 クールなので、大きなもの、もし。 基本的には紹介する私たちを可能にする 私たちのプログラムは、チェックにいくつかのロジック SYS条件。 だから、この場合は、[OK]を、 0 nよりも大きい? あなたがこれを実行できるので、はい、それは、ある。 それはちょうど、いくつかのチェックだ あなたがした条件 私たちはすべてだと思うセット、 条件をチェックすることに慣れて。 涼しい。 だから、あなたの他の一つで、他の場合には、 これが本当であれば、あなたは、[OK]を言うことができ、 この最初のことを行う。 そうでなければ私はあなたがしたい デフォルトと何か他のものをやる。 この場合のように、次のいずれかを選ぶ 正の数または負の数。 あなただけの2つのオプションがあります。 あなたはそれに関係なく実行する必要があります どのようなユーザー入力の。 だから、うまく言うことができます それが0より大きい? 涼しい。 正の数を印刷します。 そうでない場合は、負を印刷します。 みんな良い? その後認識する一つのことである もし条件が満たされた場合に、 他にも、実行することはありません。 一つだけこれらの意志の 一度に実行されます。 だから、トレードオフだ。 あなたは両方を持って得ることはありません。 あなたは、どちらか最初の条件を持っている。 あなたはどちらかあれば持っている あるいは、両方ではない。 その後ものを作ることができ さらに複雑、 もしあなたがすることができるので、 そうでなければ、次に他。 我々は、この場合はそう 三つの条件を持っている。 そして再び、これらの一方のみである 実行されてしまうだろう。 だから、不思議に思われるかもしれません よく、何もし その何かを持っている これらのうちの2つを満たすことができる。 たぶん、あなたは入力している何でも 条件の両方を満たしている のためのifとelse場合。 実行するために起こっている唯一のもの アリソン:否や、それが何かを見つけると そのための条件を満たしていること trueに評価され、それは何ですか それが実行されておらず、他には何になるだろう。 あなたが持っていたのであれば、この数である あなたの最初の1のために0〜5、 または3の間のこの数である とelseのための5パーツであれば、 あなたが入力number-- 私は0と5 and-- 4と述べた。 これは、最初のものを打つために起こっている。 これは、[OK]を、これを言うために起こっている 番号は、0と5の間である。 実行しておきます。 それは、その第二の選択肢を打つことは決してありません。 クール? 恐ろしい。 [OK]を、我々はまた、スイッチif文を持っている あなたは、さえmore--または気の毒取得したい スイッチが隣にあります。 私はここで先に自分の取得しています。 ここでも、複数のブロックの場合 どこで私が今言ったように とすぐに条件を見出すようです 他にあれば、他の場合には、会ったとANだ それは残します。 あなたがチェックする必要がある場合 複数のもの、あなたがしている この理由を使いたいだろう それがここに毎回チェックします。 だから、これは通過した場合に実行されます それは、90以上の それはそれを印刷するために起こっている。 そして、それはを通して実行され、 これらのすべての単一の1をご確認ください。 読者:だから、これは次のようになります [聞こえない]以上のバギー。 これは[聞こえない]のようになるでしょうか? アリソン:質問はこれは次のようになりますされている バギーまたはこれはあなたがやりたいん。 それは実際にどのように依存します あなたのプログラムから欲しい。 読者:私はあなたが90を入れた場合のように意味します。 アリソン:あなたが置く場合90-- 読者:[聞こえない]。 GABRIEL:あなたは二つのことを取得するつもりだ。 アリソン:あなたは二つのことを取得するつもりだ。 はい、2。 ロブ·ボウデン:二つ? アリソン:いいえ。 ロブ·ボウデン:四つ。 あなたは90を配置する場合、それはあなたを言うことになるだろう A持って、あなたは、あなたがCを得た、Bを得た あなたはDを得た 読者:[聞こえない]。 アリソン:右。 だから私は何に依存します あなたのプログラムから欲しい。 時には、あなたがする必要がある に複数のことを確認してください。 あなたは何にはるかに深い得るで​​しょう あなたが前に進むように優れた設計です。 に重要なこと リアライズはこのことです ここにすべての4つの条件をチェックします。 他にあれば、これがあれば誰であったかどうに対し、 他の場合には、その最初のケースに当たるであろう それはあなたがAを持って行って印刷することになる。 ロブ·ボウデン:でも私たちの場合 場合にこれを変更することを決めた そして以上90に等しく、 ifおよび以上80に等しい そして以下89に等しく、もし nより大きいまたは70に等しい そしてn以下 79、その結果が正しくなります。 それは我々がやりたいんが、 それはまだそれ一つ一つをチェックします。 最初のシナリオのに対して、もしそうであれば、私たち ただ、他の場合、他の場合であれば90を入力し、 そして我々は、その後、90を入力してください それは修正するために起こっている。 それは最初にチェックします 1、あなたはAを得た印刷物、 それから、すべてのものをスキップ すでに動作するものを見つけました。 すべての場合には、相互に排他的である もし他にあれば、他の場合に基づく。 だから、実行します 最初にあれば、それは完了です。 それは、最後まで行くよ。 私たちが変更した場合に対し、 これは私が何であったかであることが 89以下と言う。 これは、最初のものをチェックするために起こっている。 これは、印刷します。 なお、第2つをチェックします。 これは、印刷するつもりはない。 第三のいずれかを確認してください。 印刷するつもりはありません。 第四のいずれかを確認してください。 これで印刷する予定。 もし他には、その場合にはそう これらのケース以来バージョン、 相互に排他的である、それはだ 他にあれば、他の場合には、より良い、場合に使用 それは持っているつもりされているため、 条件の少ないチェック このバージョンより。 アリソン:恐ろしい。 だから、別の事我々はできる やるswitch文である。 基本的にはswitchステートメント いくつかの変数にとり、 この場合にはn個だし、 実行するために、その場合を決定します。 だから、これは1つの場所、あなたのケースもある 種類の相互に排他的である必要があります。 この場合、もしそうであれば 私たちは1つが、それはだ取得 何と一致するようにしよう variable--、nの値にかかわらず これらの場合のいずれかのため、1、2、または 3、および対応するラインをプリントアウト。 そして、あなたがここに気づいた場合、 我々はまた、デフォルト値を持っている、 これあなたが他のように考えるのができます。 だから、他の番号を選ぶ場合は、 この場合には1、2、および3に加えて それだけで無効な印刷になるだろう。 対IFSを使用する際の決定 スイッチ対よそ場合に起こっている その君たちが何かすべき あなたが書き込みを開始として賢明な設計を参照してください。 より複雑なプログラム、および 全くハードと高速のルールがありません のときにそれらを使用する。 それは本当にあなたのコンテキストに依存します。 ロブ·ボウデン:そして、ちょうど そこにそれをスローする それはより快適な部分であるからである。 スイッチは、彼らがする傾向がある be--ので、あなたが制限されている いくつかの方法で、あなた IFSので、それらを使用することができ、 条件はかなりすることができ あなたが望む多くのもの。 スイッチケース付き 数字でなければならない、 または技術的に彼らは文字であることができるが、 私達が見るよう文字は、数字だけです。 そこで、彼らは数字が、スイッチでなければならない 場合よりも本当により効率的である 他にあればそれ以外であれば、理由さえ before--よく例にとると、 グレードの例が良いようです。 まあ我々が代わりにやる、のがここで言わせて このシナリオであれば誰かの他にいるかのように。 nが等しいのであれば1に等しく、 あなたが低い数字を選んで印刷。 、nが2に等しい等しい場合、他の場合 あなたは媒体番号を選んだ。 等号が3に等しい場合、他の、高い。 他に無効。 それでは、それが私たちのシナリオだったとしましょう​​。 それでは、私たちが入るとしましょう 図4に示すように、私たちは、無効期待しています。 道ほかの場合であれば、他のこと アプローチは、仕事に行くされている場合である 最初の条件をチェックします。 それは満足していないのです。 だから我々は第二の条件をご確認ください。 それは満足していないのです。 第3の条件を確認してください。 満足していない。 だから我々は、他に行くと印刷無効。 ウェイスイッチの作品 それがダウンしてコンパイルされている 私たちが行っているものに ジャンプテーブルを呼び出します。 主なアイデアの幸福 あなたは4を入力したときに、 それはすぐにデフォルトに行くことができます。 これは、午前Iのケース1をチェックする必要がないのですか? いや、それはそれではありません。 ケース2? いや。 ケース3? いや。 デフォルト。 [OK]を、これは私がどこにある必要があります 欲しいし、次にそれを実行します。 いいえ、それはすぐにデフォルトにジャンプします。 それとも、私はそれがだ、2を入力してください すぐに2に行くつもり ケース1を通過する必要なし。 だから、そのようにして、 現実的に、今日のこと 効率ゲインのそれほどではない。 通常のコンピュータがかなりある 速く、そしてそれは、その素晴らしいではありません。 しかし、それはケースがある スイッチが高速です。 あなたが本当にしようとしている場合 最適化するため、スイッチを使用します。 アリソン:クール。 そして、我々は、三項演算子を持っている。 だから私は、私は先に述べた知っている 単語シンタックスシュガー。 だから、それだけで作るものだ ずっと簡潔なあなたのコード。 だから、これはこれらのケースの一つです。 だから、三項演算子は、疑問符です 私たちは行の文字列に見るように、コロン sは100 nよりも大きい等しい 疑問符高コロン低い。 だから、基本的にはこれがどのように機能するか、それがだです 100より大きいnが条件である。 だから私は、それが意味をなすことができると思います。 それは質問をするようなものだ。 それは、ああ、nは100以上であると言っています。 誰が知っている? そしてそれが評価された場合 真、それはあなたを与えるために起こっている だ最初の事 ハイである、そこに記載されている。 そうでなければそれはあなたが低与えるために起こっている。 だから、これは本当に簡単で、 もし他に好きにする効率的な方法。 それはすべて、これがあるのです。 そして、我々はこれを書いした場合 、else条件かのように nが大きければ、それは次のようになります 100よりも、高返す。 そうでなければ、低返す。 これはちょうどずっとある それを書くの簡潔な方法。 ロブ·ボウデン:だから、この特定の例 あなたが何かをやっているときはいつでもある このように、これはパターンです どこで私は非常に頻繁に三元を使用しています。 だから我々は、まだスコープについて話していない 私は、文字列sセミコロンを見て嫌い。 nは100より大きい場合は、sが高い等しい。 そうでなければ、sは低い等しい。 だから、そのパターンは、これらの5行 コー​​ドの文字通り100%の時間 どのように導入することができる 三元系とそこまでだった。 だから三、コードの1行。 それ以外の場合、5。 それは私が指摘例です ひとつひとつのタイムアウト。 これだろう素晴らしい場所 三項演算子のために。 それはとてもきれいなのです。 しかし、人々はそれを使用しない傾向にある。 アリソン:ゲイブそれを奪う。 GABRIEL:だから今君たちすべて 今週の講義で学んだ でそのすべてのもの コンピュータが右、バイナリです? ちょうどここのランプのような。 次のいずれかをオンとオフにすることができる。 そしてすべてのものによって、私は意味 文字通りすべてのもの。 いくつかの数字、文字、および文字列、 そしてあなたが書いたコードであっても それがマシンにコンパイルされる そのようなコードとか、 そうそれはすべて0と1」に帰着する。 そして私たちが扱っているとき 整数と、その 非常に技術的にだものです 単純な、私たちはものを行うことができるはずです である、それらを追加するように おそらく最も簡単なものの一つ あなたは正しい、二つの整数に行うことができますか? だから、足し算と引き算だけで動作します それが十進表記で働くように、 ここを除いて、それは右、バイナリですか? だから、ベース2にあります。 だから、1プラス1を追加します。 つまり、0を与え、1が引き継がれる。 そして、ちょうどだから今、それをやり続ける より興味深い質問が来る。 我々は、すべてを表現する方法を知っている コンピュータ内の正の整数 しかし、それではこの練習してみましょう。 君たちは、すべて1960年であるふりをするか、 何かが、コンピュータを作成しよう あなたがから来ている マイナス1を格納する方法、 例えば、またはマイナス そのことについては整数。 あなたはそれをどのように行うのでしょうか? 任意のアイデア? ちょうど私に何かを投げる。 はい? 読者:[聞こえない]を指定 特別なあなたの[聞こえない]場合。 GABRIEL:あなたが指定することができます 0または1になる特別なビット、。 それはポジティブだ場合にはのが1つを言ってみましょう そして0それは負だ場合。 その後ビットの残りの部分 ほんの数を格納するれる。 涼しい。 だから、非常に良いアイデアです。 私たちは、私にはわからない、200を持っている。 第1ビットである場合 オンになって、それがだプラス200。 それがオフになった場合は、200マイナス。 涼しい。 唯一の小さなものがある これに伴う問題、 その私たちは物事を総括しようとした場合である。 だから我々はここに11111を持って想像して、 私たちは00100何でこれを合計することだ。 これら二つが陽性である場合、それは大丈夫です。 しかし、その後であれば1の それらは次のように、負である それではここで、このビットとしましょう 受け持つものである 私はseparate--を作るつもりだfor-- ので、この1はここで、この数を意味する 正である。 この1は、このことを意味します ここ数は右、負のでしょうか? しかし、その後、あなたがいるとき それらを合計するつもりは、あなた if文が必要です これが0の場合はああ言っ その後、私の合計は次のようになります 何か違うよね? だから、少しあります 行うにはもっと賢い方法 2の補数と呼ばれる、その。 そこで、基本的に私たち やる我々は定義されているマイナス1 もしその事であると 私たちは私たちに0を与え1まで追加。 私はそれを繰り返してみましょう。 それでは、ここで、これは1であるとしましょう​​。 そのことは何ですか 自然に正の整数で それに私たちに0を与え追加? 私たちは、この番号に追加しようとすると? 私たちは、それでは追加してみましょう、OK have--するつもりだ。 私たちは、1プラス1を持っているつもりだ 0であり、そしてそれが引き継がれる。 そして、我々は再び0を取得するつもりだ。 私は混乱して取得しています。 そして、あなたは0とを取得するつもりだ 0 0 0 0 0。 0がたくさん。 つの非常に最後に、私たちではない それを上に運ぶことができることになるだろう、 レッツは、我々は唯一扱っていると言うので、 1バイトなので、8ビットのみと。 だから、コンピュータは、デフォルトでは何をするか ちょうどそれについて忘れては、[聞こえない]です OK? だから、これはと呼ばれるものである 2の補数。 我々は、単にあることがマイナス1を定義する 事ここにあなたが1にそれを追加した場合いること あなたに0を与えるだろう。 そして、それはかなりクールだ 私たちは本当にありませんので 実装する必要が遅く 和の異なるタイプ それはだかどうかに応じて 負または正の数。 それは理にかなっていますか? だから我々が行う一つのことは、 ここに変換するために 正と負の間で 整数はその後、我々は、すべてのものを反転さ その後、我々はその数に1を加える。 あなたはそれを自分でやろうとする場合 紙に、 あなたはそれが理にかなって見ることになるだろう。 しかし、私はこの数を取る場合 ここで、これは5である。 だから私はすべてのものを反転した場合 ここでは、そのように1、1、1、1、1。 フリップ、フリップ、フリップ。 そして私はそれに1を加える。 私は正確にマイナス5持っているつもりです。 OK? これは一種の理にかなっているかの理由 あなたは数字でこれを合計しよう 我々は、以前に持っていたこと それでは、再びこれを反転させてwas--。 これは、101と0のたくさんあった。 あなたはこれらを追加しよう 2つの数値、 あなたは正確に0を持っているつもりです。 [OK]をクリックします。 どの質問? 読者:[聞こえない] GABRIEL:あなたは何を意味するのですか? 聴衆:負へ ポジティブ[聞こえない]。 GABRIEL:いいえ、あなたはフリップ そして、あなたは常に1を追加します。 うん。 [OK]を、また、符号化されたバイナリ文字がそう。 私たちはあなたのように、アスキーテーブルを持っている また、右、講義で見た? だから、基本的に物事のマッピングです。 そしてここで私は十分に強調することはできません コンピュータ、a及び65のそれ 文字通り同じものです。 だから私がchar cのようなものを書く場合 、私は同時にできたに等しい ちょうどここに65を書き、それを [OK]を、全く同じでしょうか? 全く違いはありません。 我々は通常置く傾向にある 型の変数内の文字。 シャア、彼らは基本的にしているではないので、 そのために作られたが、理由 人間大会の。 しかし、あなたはちょうど整数を扱うことができる 代わりに、char型の変数の、 そしてあなたは大丈夫です。 唯一の実際の差 char型cとint型のi間 intは、ほとんどの4つのバイトを有することである システムでは、charは1バイトを有している。 彼らは基本的にしている データの面でも同じこと。 それでは、ここで印刷されます? ここでは、printfのを使って数字を印刷している プラス1、ちょうど整数など、 文字はそう、要約することができます 文字も合算することができる。 だから、これはまさに65です。 そうであるように起こっている 66、そして、ここで我々が​​持っている 65プラス少しマイナスビッグA、 されるであろう、私は本当にわからない。 しかし、それは正確にギャップになります 大文字の間 と小さい文字なので、 我々は正しい、小さなAを取得するつもりだ? うん。 だから、これは印刷するために起こっている まさにこの1である文字。 グッド? どの質問? ここでは、異なるの束を持っている 数値変数の型。 我々はすでにint型の話。 フロートは、これは本当にあるto--だけの方法である おかしい、私が最初に知ったときのため 一日にはズームインプログラムする Pythonで、最初のプログラム今まで私 書き込もうとしました、私はそこにいたことを見た で呼ばれるタイプとフロートと呼ばれるタイプ。 フロートは、すべての実数のためだった。 それでは私はなぜべきで尋ねた 私が今までそれからint型を使うのか? 私はすべてを使用できるかどうなぜなら フロート付き実数、 私はちょうど、int型の使用を停止するだろうか? 実数であるために はるかジェネリックのような。 これがあることが判明 コンピューターではない場合 彼らは本質的だから 異なった事。 整数と浮動小数点数なので、 あなたが彼らに何の操作 ので、本質的に異なっている それらが格納されている方法のため、OK? 私たちは、少し話をするつもりだ 第二にその詳細に​​ついて少し。 だから大きなフロートで倍増。 通常、ほとんどのシステムでは、フロート ちょうどint型のように、4バイトです。 とdoubleが8バイトである。 長い長い実際には単なる記号である あなたはint型のようなタイプに追加することを。 あなたは長い間、このようにint型に長いと言う。 長い長いint型のxは、もはやそれを作るために。 だから、ほとんどのシステムでは、それが得られます 8バイトの代わりに、通常の4。 そして、あなたは実際にドロップすることができます で、それだけで長い長いと言うことができますので、 それは[OK]を、あまりにも動作します? また、のような他のことを行うことができます unsigned int型、または再び単に符号なし また働くだろう。 そして、それは、xは変数でなければなるだろう すべてが正であるように、 だから、本当にネガティブを持つことができません 私たちがここまで見たように数字。 とても素晴らしい以下 点と精度浮動。 それはなぜあなたの理由の一つだ int型の代わりにフロートを使用したい、 int型は、100%正確で、右であるため? それは、まさにその数だ。 フローティングポイントの場合、あなたなら 答えは1 10--の上に等しいと言う 私は正確なこれを持って起こる ここでは、プログラム、float.c。 つまり、20小数点以下の桁に出力します。 1 10で除し、その 通常、右、0.1ですか? しかし、ここで私たちが行った場合 浮くし、我々はそれを実行し、 我々はそれが正確に0.1ではないことがわかります。 それは0.149何か。 そして、なぜそれがありますか? あなたは本当に、すべてのを表すことができないので メモリ内の単一の可能な実数 存在するため それらの非可算多く。 だから我々は、技術的にのみできるしている それらの有限量を表す データの有限量を持つ。 しかし、それは本当に面白いです。 さて、これは頼む どのようにでしょうかという問題 代表取り掛かる ビットで、この、右? それでは、どの山車が格納されている? 整数で、それは簡単だった。 しかし、あなたがしたいフロート付き 範囲を最大にするには、 あなたが表現できるようにする 巨大な数字とのような非常に小さな数字 同時に0.000001。 だから、もう一度、同じゲーム。 どのように我々はできる誰もが任意のアイデアを持っていますか メモリ内のフロートを表すについて行く? ちょうど何かを投げる。 はい、お願いします。 読者:[聞こえない]と それは2つのintと1だった場合 が[聞こえない]と1幸福 小数点以下のすべて。 GABRIEL:OK、涼しい。 だから、二つの異なる整数。 あなたは12.45を持つことができ、その結果は12と45です。 ニース。 何を言おうとしてERE? 同じこと? うん? 読者:[聞こえない]表記 どこでベースを分離する。 GABRIEL:科学表記法、 うんそれは何が起こるか通常です。 だから、これは仮数と呼ばれるものである。 それは実際にあるものだ 番号、その後指数 右、カンマがあるだけでどこにあるのでしょうか? だから、これは何かになるだろう フォーム1、2、3、4、5〜10倍の マイナス4へ。 私はちょうど丁度、ええthat--実現。 その後マイナス4は、この図10は、ある カンマがOKであり、ここで定義するつもり? ブラジルでは、我々は、カンマを使用しています。 ここであなたたちは、ドットを使用しています。 だから、ドット。 その後のことができますので、これは、クールです この男のあなたのビットの多くを焦点を合わせる ここでは、仮数部に、その後、それがだ あなたの実際の精度になるだろう。 そして、あなたはどちら進数でこれを行うことができます またはバイナリベースのシステムである。 異なるがあります これを実装する方法。 質問? はい? 読者:どのように多くの場所 小数[聞こえない]の後に? GABRIEL:それは複雑な質問ですね、 それは決して本当に100パーセント正確なだから、 あなたがここに見るようにので、用 いくつかの数値は、100%正確である。 私たちはここに0.5を入れた場合、私は信じている、 それは、100%正確なものになるだろう。 それは0.500000になるだろう。 だから、その場合には、それは完璧です。 しかし、他の場合には、 それははるかに少ない完璧だ。 私の経験では、4つまでのように、 小数点以下5桁はかなり正確である。 あなたは二重を使用している場合、それがために起こっている [OK]を、それよりも道より正確には? ロブ·ボウデン:だからスローする 山車でいくつかのより多くのコンテキスト、 どのように私は、100%を覚えていることはありません 山車のスペックは、実際に動作しますが、 しかし、私はあなたが常に覚えている 山車が乱雑取得を開始すること。 だからアイデアは、あなたが本当に取得するときということです 本当に大きな数字や本当に、本当に 小さな数字は、我々は開始 悪化と悪化 差別化で 2近いフロート間。 だから私が考えるのが好きかである 浮動小数点の不正確さと、 その2つのfloatがあります 私はそれらを指定しようとした場合 Cにおいて、その事実にもかかわらず それらは、異なる数だ、 彼らはするつもりだ 同じ番号として解釈、 私たちは違ったそれらを格納することはできませんので。 私たちは、同じビットを使用する必要があります。 だから我々が取得するとき 本当に、本当に大きな数、 10から300のように話したり、 何か、それはその時点での その10から300以上 5回10〜300 区別することはできません 7〜10倍〜300。 だから、それはかなり大きな違いだ 二つの数字の間に。 しかし、その後、あなたがダウンして取得するとき 正常範囲の事に、 あなたはかなりになりがち 差別化が得意。 そして、あなたは本当に小さな降りるとき、 あなたはまた、再びかなり悪い取得している。 の全体の束のようなので、 0.0000、それはかなり悪い取得します。 GABRIEL:うん、そう簡単なメモ。 これを行うことはありません。 比較しようとすることはありません イコールに等しい使用山車、 彼らはほとんどしている場合でも、理由 同じことが、ほぼ同じで同じではない。 だから何普段やっていることはあなたが引くです それらは、その絶対値をとり、 そしてそれはより小さいだかどうかを確認 0.0001またはそのような何か、OK? とクール。 私は多くの人が持って知っている Javaでいくつかの背景、 やった、特にもの のAPコンピュータサイエンス、右? とJavaは言語である その大部分はC言語に基づいて、 それは夫婦非常に大きな違いがあります。 しかし様ループ、およびIFS、とスタッフのための つまり、それらはすべて同じ構文だ。 私はこれを示すために、ここでいくつかのプログラムを持っている。 ですから、例えば、単純なhello worldの。 これはあなたのC、でのHello Worldです みんな、と間違いなく精通している とこれとこれ1はJavaである。 Javaで我々はこれを持っているので、 publicクラス、Hello Worldの、 と公共の静的な無効 メイン、および文字列引数。 文字列argsは行く 非常にまもなくC言語で表示される。 しかし、それではまだそこに行くわけにはいきません。 今のところ、我々は意味し、ここで、空隙がある そのメインは引数を取ることはありません。 そして、我々は持っている System.out.printlnを、それはだ printfのための同等の一種。 ここで私たちは本当にバックスラッシュは必要ありません n個の印刷Lnはあなたのためにそれをするので。 これは、バックスラッシュを追加します 行の末尾にn個。 しかし、あなたが入る場合は、 のためのようなもの、あなた 彼らがしていることがわかります ほとんど同じこと。 だから、初期化、および 状態、および更新 is--私は、彼らがしているhere--スペースを逃した ジャワ除くほとんど同じこと、 さらにいくつかのハイレベルのものとして持っています。 ここで私たちにできるプラスIと Javaは自動的になります である、私はここにこれを作る 整数、文字列に、 その後追加 2つの文字列。 ここではC言語で、我々は&%Dを行う必要があります。 ここでライン、用 全く同じに見えます。 そして、我々は、IFS、もし見れば また右、まったく同じに見える? だから、本当の大きな違いがある あなたはここを参照してくださいそれらの事で。 パブリック静的ボイド、および パブリッククラスなら。 だからJavaはあるものを持って 仮想マシンと呼ばれる。 そして、それは非常に重く何に基づいている オブジェクト指向プログラミングと呼ばれ、 非常に、非常に一般的である 最近はプログラミングのためのパラダイム。 そして、このクラスのものは、あなたが見るものである オブジェクト指向から何か、 あなたがクラスを作成してからされている そのクラスからオブジェクトを派生させることができます。 我々はあまりにも話をするつもりはない CS50のそれについてはあまり、 それは間違いなくです 本当にクールな何か、 あなたがに行きたい場合は特に より洗練されたウェブ開発 コー​​スの終わりに、 のようなあなたの最終的なプロジェクトを提出 そしていくつかの素晴らしいフレームワークとか。 そこで、基本的な考え方は、あなたということです 何かを再実装する必要はありません、 だから、だものを作成 非常に一般的な形状のように、 その後あなたが作成 それは異なる形状、 その後のそれぞれから これらの形状は、あなたが作成 3人にいくつかのより具体的な形状 寸法やそのような何か。 そして、彼らはこの階層彼らを持っている そう、他のものを継承 すべての関数とすべての変数 ここでの大きな形状は、これらのすべてを有している 持っているつもり、これらのすべてがあるされている 持っているつもりなどなど。 だから、基本的な考え方です。 Cはそれを持っていますが、C ++はありません 機能のようなものを持っています。 とJavaは大きな影響を受ける オブジェクト指向によって、 あなたが見る理由ようです ここで、クラスのすべての時間。 そして他の事はある このJava仮想マシン。 だから、これは、私が思うに、非常にスマートなアイディアです。 だから何の人々は誰 発明されたJavaはありました 彼らはしたくなかった 2倍のコードをコンパイル 彼らはWindowsでそれを実行しなければならなかった場合には、 またはMac、またはLinuxは、そのように彼らが何をすべきか 彼らは文字通り実行され アプライアンスのようなもの、 しかし、あなたは本当にそれが起こって表示されません。 そこで、彼らは仮想マシンを実行 お使いのコンピュータの内部に、どの 似基本的に ミニオペレーティングシステム。 そのオペレーティング 生活の中で、システムの目的 ただ、バイトコードと呼ばれるもの実行することです。 だからではなく、C言語で、道の我々はだろう これがあれば作ることで、コンパイルし、実行し ./if。 私はバックスラッシュを忘れてしまった。 Javaでは、最初に行うだろう C言語Javaはそれをコンパイルするための、if.c. それはC.それのドットのjavaではありません。 そして、あなたはしない./実行する必要があります。 あなたは、この新しいファイルを取得 if.classが、あなたは本当にできない ちょうど今if.classを実行 私たちは前にやったような。 これは実行可能ではありません。 あなたが実行する必要があります。 あなたはにそれを養うために持っている ジャワと呼ばれるプログラム、 そのプログラムは、仮想マシンであり、 そして、あなたはif.classを行う場合、または。 はい。 そして、それは動作します。 [OK]これはの一種である 仮想マシンが起こって。 私がいたので、もしCが、それを持っていません Windowsマシンでこのプログラムを置く、 それはそれがないJavaでは、Cで動作しないでしょう。 質問? 涼しい。 今日のスーパーセクションの場合は、そのためです。