[Powered by Google Translate] DAVIDマラン:これはCS50であり、これは第1週の始まりです。 我々は我々が今日やろうと思いましたと戻って見てみている 何かがあなた方の多くは、おそらくいくつかのために過去の歩いてきた 今の時間、少し見覚えがあるかもしれません。 ここでこの事は、もちろん、これはである - 読者:科学。 DAVIDマラン:科学センター。 だから、これは実際に最古のコンピューターの一つです バック1940から。 それは、最初の電気機械コンピュータの一つであった それは、特に長くすることができた 自立計算、および私たちが実際に見 科学センターでは、この事の唯一の小さな作品です。 我々は我々が次にやるだろうと思ってビデオを振り返ろうさ これを導入して、いくつかの時間前に作られたその 世界への事。 そして、あなたはその確かにそれらの音楽と音声から表示されます とても幸せな時間でした。 [ビデオの再生] 数学的および機械的なスキルの勝利はこれです ハーバード大学で素敵な新しい自動計算。 数学の複雑な問題は、通す テープ上にコード化された形でマシンは、正確に解決されました 人間のために必要な時間の微小部分 計算。 数学や科学のすべての形態を促進するように設計 研究は、巨大な機械的な脳は、米国のために動作します 戦争の終わりまでアメリカ海軍。 DAVIDマラン:それで、あなたは知らないかもしれないが、それが入っていたということです 任期は、我々はすべての現在かなり多くを取ることをこの同じデバイス 当たり前のバグのこと、鋳造された。 だからエンジニアの一人は、このコンピュータでの作業 文字通りもたらしたマシンに小さな蛾を発見 いくつかの誤った計算インチ 話が行くようにし、その蛾は、このログに録音された ここジャーナル、バック1940 - 何で9月9日から、 したがって、世界の用語 "バグ"のために生まれてきた。 だから、今後、我々はバグがでミスの任意の並べ替えであると考えて プログラムは、人間が作ったかどうか、または、この場合には、昆虫。 我々が進むにつれて、いくつかの発表がそう。 だからCS50はオン種のランチを提供するという伝統を持っています 我々は30を取る学期、中に最も金曜日 カジュアル用の広場で火と氷に40名の学生 おしゃべり、コンピュータ科学の話、 将来について話しています。 私たちはおしゃべりするために、業界からの卒業生と友達を招待 学生だけでなく。 本当にかなり大規模なクラスに何作るの終わりに向かって のために少なくとも一度ある間、すべてのより親密な 学生のサブセット。 ですから、今週の金曜日にご参加希望の場合、13:15には、に行く また、RSVPへのCS50.net/lunch。 あなたがいないのであれば、我々はrecurringlyこれをやるので、心配しない 最初の30かそこら今週間。 スクライブノートだから。 現在利用されて開始されます資源に関する単語 クラスの生徒に。 あなたの頭は、講義中にダウンしている必要はないように 私は、我々は何をすべきか、などと言うと、すべてを走り書き 代わりに教員から提供されている ノートのカノニカル集合。 だから我々は教育フェローの1、アンドリューSellergrenを持って 誰がその後、毎週座ってビデオをレビューし、 我々はかなりだと思うもの書き留める ノートの権威セット。 に不機嫌な脚注を置くのも、そしてアンドリューの好き ボトム。 だから、うまくいけばのための参考書として、これらをお楽しみいただけます 見直す機会として楽しみ、また、時間をクイズ来る、 個々の講義で何が起こったのか。 だからそれらは講義のページにリンクされています。 0を設定する問題は、一方、外です。 そして、あなたが利用可能なリソースの観点から - チュートリアル。 ミロは金曜日に第一を率いた。 それが撮影された、土曜日、オンラインを置く。 ですから、もしあなたが本当に開始する場所がわからない場合には、実現する このまたはp-セット未来のために、常に最初のターン チュートリアルまたはそのビデオ。 セクショニングが進行中です。cs50.net/sectionであなたはどこにあるの あなたがいない場合は、自分の好みに提出しなければならない すでに、今日中に。 のセクションでは、今度の日曜日、月曜日、開始されるため と火曜日。 私たちは、毎週の、それらの3日間のセクションを行う ほとんどの部分は学期。 そして、我々はまた、再び、別のトラックをご紹介します。 もしそうだとすればあなたは、このセクショニングフォームに求められます あなたは以下のものの中なら、すでにそれを見ていない 快適な、より快適な、またはどこかの間でインチ そして、あなたがフェンスにソートのなら、一般的にはどこかで との間では、ほとんどの学生が確認終わるものです。 営業時間は今夜始まる。 だからスクラッチはそれが非常に自然だにも関わらず、かなり低いキーである 様々なバグに遭遇し、またはどのようにかは不透明であることが 何かを実装しています。 だから我々は今週のオフィスアワーを開始することを実現します。 彼らはアネンバーグ、月曜日、火曜日、水曜日になります 脳の休憩中8:00 PMから11:00 PMまで木曜日、。 アッパーclassmenは入るが、あなたは今までにトラブルが発生した場合、取得することができます ドアに、彼らはただ、スワイプすることがありますので、あなたのように話す で、あなたが一緒にいるCS50について説明します。 通常はスタッフの私達の20から30に助けることがあるだろう あなた一対一。 到着時にアイデアがこれです:あなたのラップトップを持っていき、 あなたの充電器を持っています、我々は、余分な電源コードを持っているでしょう 特にどこアネンバーグの南壁に沿って コンセントがたくさんあり​​ます。 と営業時間Q&Aへのメインエントリポイントは、に行くことです cs50.net/discussと投稿する そこにあなたの質問。 と何週PSET 0または1のpset、それをラベルに ことが起こるかもしれません。 そして、私たちがやることは、ティーチングフェローのテーブルを持っていることです そしてもちろんアシスタント、一般的には8か、または私達の10かそこら、 、介さボード監視の目を保ち、 本当にできるだけ早く我々はできる限りの質問をオフ摘採、 あなたがそれらを発見していない場合は、関連記事にあなたを参照して 必要に応じて自分自身、オンラインで参照、。 そして、そこに必然的にするなどの問題が存在する場合、 、である、またはそれはちょうど1つの上の1つを座らせ方が理にかなっているでしょう 誰かの問題を介して動作。 それとも、ただ実際にオフィスアワーに入って来る その考え方を必要とする。 あなたは、電子フォームを介して行きたくない 本当に誰かに会いたい。 私たちにそれを伝えると、何が起こるかであるとき 質問は、スタッフが見られており、我々 、うんを決定し、これは20またはのいずれかに派遣されるべきである ここに30のチームメンバーは、局所的には、これを左上に表示されます キューボタンがcs50.netオン/点滅し始め少しを入力してください 話し合う。 そして、これはあなたが今そう、招待されていることを告げている キューを入力するには、話をする。 そして、そのボタンをクリックすることにより、あなたの名前がその後に表示されます CS50のグリーター、当然の頭の一つは、iPadのことを 誰がその後、アネンバーグの入り口近くに保持しています に関して質問がある学生は、ここに描かれてください 左、右の上に存在しているスタッフ。 と左右をクリックするだけで、Webブラウザは意志 教授McGonnagal例えば、できるだけ早く点滅を開始 アネンバーグ内の特定のテーブルでお会いする準備ができています。 だから我々は、この昨年のいくつかをしました。 私たちは、オフィスアワーを再起動したと ソフトウェアの多くを再実装。 だから、これが今週のウォームアップされることを認識しています。 しかし、また、あなたが聞いたことがあるかもしれませんが、過去数年間に、あまりにも実現 友人から、営業時間は確かに50にしていた 一度に150人の学生。 私たちはそれを処理するために、それは単に不可能です 効果的に、夜を通して1、上の1。 それで、私たちは本当に今年やろうとしていることである たくさんの疑​​問があるという事実を生かす よく尋ねられると、しばしばより良い答えられる 非同期。 ですから、スタッフの応答を通して考えるの並べ替えることができます そして我々は、加熱せずに、あなたのコードを介して考えることができます 必ずしも苦労の圧力 並べて、それを介してサイド。 だから我々は推定して質問の約3分の1または半分 個人的に派遣されるでしょう、そして、私たちは次のように毟り取るようにするよ より電子的に半分以上、できるだけ多くの 勤務時間中。 そして、我々は議論を継続して使用します 週を通して同様。 そして最後に、このコースは合格/不合格を取ることができることを実現します。 ですから、フェンスの上にあるか、またはちょうどあなたが本当にしていると思われる場合 これはあなたのための世界であるか、これが本当にあるかどうかわからない あなたにかなり外国の、これは素晴らしい方法であることを認識 に足を踏み入れると、いくつかの信頼を獲得する 数年前、私は率直に言ってやったようなクラス、。 その後は、5週間のために図の外に並べ替える必要がある あなたは合格/不合格に滞在したい場合、自分のユーザー名は、英字に切り替える グレードなど。 典型的には合格/不合格、私が思うに、学生のためのものではない それは、その10時間、20時間、何でもそれに入れた場合 いくつかの問題にすることができ、あなたの頭を叩いている 壁を背にして、 とあなたが本当にちょうど何かを追いかけ、あなたことができない 何私は、正直なところ、あなたがする必要があるので、他の多くのものを持っている で合格/不合格と思う、それはのエッジを脱ぐ そのような状況。 どこの事、道の90%を撮影した。 あなたはそれが非常に完璧ではない、知っている。 しかし、あなたはそれにもかかわらず、それのうちの多くを得た。 だから、あなたを与えることとして合格/不合格を検討 メンタルモデルは、おそらく。 すべて我々がスクラッチに飛び込ん右ので、先週、私たち かなり高いレベルでグラフィカルなプログラミングについて話しました。 今日我々は言語に移行する Cの上に低レベルのプログラミング言語と呼ばれる これは多くの近代的な言語は、現在いくつかを含めて、構築されてい 我々は長期の終わりに向かって使っていくつもりのもの。 そして文法的に、彼らは何のように見える すべて非常に似ています。 そこでここでは、この移行を行うために始めましょう。 だから、これは最も単純なだった先週のプログラムだった 世界プログラムこんにちは。 それは、単にと、画面のHello Worldにプリント 猫の出てくる少し吹き出し。 さて、私たちは別のものにこれを翻訳するようになり始めた場合 言語、アイデアは今日と水曜日にことを認識 同じですが、構文が変化し始める。 先週我々が持っていたのに対し、だから、緑色の旗がクリックされたときに、言う こんにちは、世界。 今日、我々は、int、メイン、ボイド、printf関数を持っているつもりです、 そこにもいくつかの他の構文を使用して戻り、。 中括弧、括弧、引用符、およびその他もろもろ。 しかし、ここでの考え方のコアが印刷であることを認識 主が今であることを行っていることと、最終的に事実 プログラムの起動と同義。 メインはグリーンフラッグが物事をキックオフ場所になるだろう。 だから今のヒアビルディング·ブロックの一部を離れていじめるう 我々はいくつかの具体例に飛び込む前に。 それだけだそれによってだから我々は、このステートメント先週と呼ばれる 命令。 これを行う - このケースでは、Hello Worldを言う。 私たちはちょうどそのラインを見ればよくCで、これは我々がしている方法です。 その特定のパズルピースを表現開始する予定: のprintf( "こんにちは世界");。 そして今、我々は、時間をかけて離れて、ますますこれらをいじめるよ しかしパターンがここにありますことを実現します。 1だから、我々はあるのprintfと呼ばれるこの事を、持っている 言葉に本質的に類似して言ってやるがいい。 それは何をしようとしているものです。 printfは、ここで、fは、 "フォーマット"を意味します。 だからそれはちょうどあなたが挿入することができることを意味 さまざまな美的詳細。 だからいわば我々が行っているものの始まりです 文字列を呼び出して起動します。 単語、フレーズ、センテンス。 プログラミング言語での文字列は、ゼロのシーケンスです 以上の文字。 H-E-L-L-Oだから、コンマなどであり、 いわば、文字列。 そして今、バックスラッシュnは、構文的には少し奇妙な、しかし、我々 既に何を意味するものとして定義されているが先週? それはちょうど新しいラインです。 それはあなたが望むコンピュータに伝えるだけの方法だ そこに入力を打つのと等価ですが、あなたはしないでください 実際に入力をヒットするので、すべてを台無しにする あなたの実際のプログラムの書式。 今括弧は、この文字列を囲む括弧を開き、 括弧を閉じて、私たちの内側の文字列であることの。 Cのための処理になるため、他のプログラミング 言語は、物事はprintfの引数を取る、または取るのが好き パラメータを設定します。 だから、この紫色のセイブロックからすぐに考え始める 手順としての機能、方法としては、。 あなたは本当にあなたが今のやりたいそれを呼び出すことができますが、 それは1つだけを行うプログラムのミニチュアのようなものだ 単線、劣らずの物。 だから我々はprintfの呼び出しを開始しようとしているものもある 関数、関数は何かをする - この場合に 画面にフォーマットされた文字列を出力します - しかし関数も引数またはパラメータを取ります。 と引数やパラメータによって、あなたに感謝、私たちは意味 彼らの行動は、あなたに渡したものによって影響されること 括弧の内側。 したがって、このケースでは、printfニーズが印刷すべきかと言われると、私たち でちょうど、ここに二重引用符で、文字列を渡すことが我々 実際に印刷したい。 そして、この行の最後にセミコロンがちょうどです 歴史迷惑それによってコードのほとんどの行の末尾に、 あなたは、コンピュータへのスーパーを明確にするためにセミコロンを入れて このコード行は、ここで終わること。 プログラムはより多くを得るように我々がわかるようになりましたので、これは良いです 複雑な、セミコロンは、私たち人間にスーパークリアになる また、コンピュータ、コードの開始と終了の線。 一部の言語では、いくつかを持っていないことを認識 これらの同じ内容の。 そして、実際には、JavaScriptで、あなたは常に何かをする必要はありません セミコロンのような。 しかし、もっとその上に来ています。 だからループします。 我々は、明らかに、非常に直感的に、このような何かを持っていた 何か何度も何度も。 靴下を履いたり、このケースでは、挨拶のような。 さて、C言語で、今日から、私たちは、このスクラッチを表現することができた whileなどのブロック(真)のprintf( "hello world"の)。 だから我々は文字通りパズルを構築し始めているに気付く 前からの作品。 我々は、同じ紫色のブロックを持っているが、それはこの心の中を 括弧で囲まれたフォーエバーブロックと、それを翻訳するための最良の方法 Cに次のとおりです。 フォーエバーキーワードはありません。 あなただけのCのF-O-R-E-V-E-Rを入力することはできません だから近いアナログは一方である。 値がないため、今、(真)少し愚かに見えますが 本当のこれまでの変化? おそらくではない。 真ながら、それは、上にしながら、1ながら言っているようだ。 それはすべて同じことだ、真はいつもそうである。 だから、このループは、実際にはループの種類を誘導するのですか? ただ無限ループ、右。 フォーエバーループまたは我々が先週それを呼んだように、 ただ無限ループ。 だから、時には悪いですね。 時にはそれはあなたが得ることがなぜ時々それはだが、バグです 紡績ビーチボールや砂時計など。 しかし、この場合には、我々は意図的に、何のため 理由は、再び同じことを印刷したい と何度も何度も。 または時計などの場合に、あなたは何をしたい 何か何度も何度も。 だから、無限ループが意味をなすかもしれません。 そして、これは我々がコードに永久に変換する可能性があるかCである。 だから今この1つは、もう少し具体的だ。 我々は10倍以下のステートメントを繰り返していた。 真であるため、だから(本当の)非常に、そこには動作しませんが 常にtrueを返します。 我々はその代わりにCバージョンを見ればだから、今構文が取得 もう少し不可解。 しかし、あなたはこれを見始めると、正直に言うと、それはすべての取得 迅速にかなり精通している。 だから、これはforループと呼ばれるものです。 ループのために何かをするためにコンピュータに指示しようとしている 何度も何度もくり返している限りのため これらは真実である。 今、私たちはそれによって何を意味するのですか? まあ、そこのforループには次の3つの部分で、私たちはするつもりだ 実際の文脈でこれに戻ってくる 一瞬の例。 それは非常にすべてを一度に沈まない場合ので心配しないでください。 が、int i = 0のときは私に与えると言って、短い、長い話です 整数型の変数なので、私に番号を与える 私はと呼ばれ、0に初期化します。 これは代数的変数xのように私を与えており、 それを0に初期化します。 しかし、今回のケースで我々は、私にそれを呼んだ。 すると途中で、それは私が10未満であると言います。 コンピュータがあまりにも長い間、次のものを行う占いだ iが10未満であるとして。 と明らかにそれは10未満のためを開始 それは0から始まります。 それから最後に、あなたは、おそらく何のi + +は手段を推測することができます。 それはちょうど私をインクリメント意味構文の少しです。 だから何度も何度も、iに1を加える。 そして、我々は、この構文をこのループが表示されますように、むしろ、実装 率直に言って、スクラッチでちょうどだったので、正確に同じもの はるかに表現することが容易になります。 10を繰り返して、あなたは完了です。 C言語では、ほとんどのプログラミング言語では、我々はする必要はあり 実際はもう少しコンピュータの有益と このような何かを指定します。 しかし、我々はこれと他の構文に戻るでしょう。 どの変数について? スクラッチでは、これらのオレンジ色のブロックのようなものを持っていた ここで私は、変数を宣言することができました。 任意には、カウンターと呼びましょう。 のは、それを0に初期化させ、その後 永遠に何かをしてみましょう。 このケースではスクラッチで、私はカウンターを言っているので、 猫が話すの小さな吹き出しを持っているために起こっている この変数内の番号。 そして、我々は1でカウンタを変更しました。 だから、これのすべては永遠にロックの内側にラップされています。 だから我々はすでに今とCのビルディング·ブロックを持っている これを翻訳することができる。 我々は何ができる一つの方法はこれです。 私に整数を与え、それはカウンターと呼びます。 それを0に初期化する そこに最初の行インチ (真)ので、私はちょうど瞬間から、そのアイデアを盗んでいる間 前に、先に行くと、次の操作を行います。 カウンタをプリントアウトしてから、カウンタをインクリメントし、 もう一度、もう一度、もう一度。 あるいはまた、+ +だけで何かに1を加えることを意味します。 しかし、構文の新しい作品がここにあります。 としてではない私たちの前の例の中で何が飛び出すのか? はい、これは%d。 それで、あなたは多分基づき、率直に言って、これが何をしているかを推測することができます スクラッチブロックが何をしているか。 しかし、再びC言語では、我々はもう少しだけ特定でなければならない それは、自分自身を表現することになると。 だからのprintf( "%d個\ n")を出力します。 まあ我々は慣れて捨てることができる最もそのことを。 引用符はちょうどそれが文字列であることを意味し、バックスラッシュN ちょうど新しいラインです。 だからここだけの新しいものは%dです。 であること、およびすべてのプレースホルダです。 %dは小数を表すために起こっている。 と%dはコンピュータを意味し、ここでは小数点数を置く。 さて、あなたはそこに置くために何番をしたいですか? さて、あなたはおそらく、私たちが言うカンマの後に、推測することができるように カウンタは、我々は宣言または変数の名前です 数行先に作成した。 だから、これはちょうどに変数を差し込むのCの方法です 動的に文字列を指定します。 対照的にだって、私が代わりのようなものをやっていれば、 これは、printf( "カウンター")、どうしたらいいのでしょうこの プログラムではなく、おそらく、ですか? それは文字通り "カウンター"を印刷します。 それは私が期待した効果はありません。 私はいくつかの数値に置き換える必要があります。 だから我々は関数はその後、printfのようなではなく、取ることができることがわかります のような唯一のちょうど単一の引数、 "hello world"の。 彼らはいくつかの変数はその後いわばカンマを取る、とすることができます 我々は以前の文字列を見るとわかるように、それは、に差し込まれてしまいます これらの%記号のプレースホルダ経由。 まあ何ブール式はどうですか? ブール式は、これらの値は、trueまたはfalseでした。 yesまたはno。 1または0。 オンまたはオフにします。 だからスクラッチで、彼らはこのように見える、と気付くこと ここで一番下のブロックが実際に論理積である 二つの小さなブロックの。 ドラッグ&ドロップ3パズルのピースのだから私は一種 一緒にそうそこにそれより長いパズルのピースを作るために、私 私はxがyよりも小さいとなりたいという考えを伝えることができる yはzよりも小さくなるように。 そして私は次のようにこれらの2つの個別の行を翻訳することができます。 トップ1は、非常に些細なことに、C言語に翻訳することができます 持つだけでx のはで、というのは単に私たちの方法です含める C、私は他の誰かが書いた関数へのアクセスを提供します。 私はprintfたいので、この場合、私は気になります。 今、私たちは、int型のmain(void)を取得します。 だから、これは率直に言って、これらのものの一つであり、その0日目に、 それだけだから、かなり私は、ゾーン外の種類にしました 面白くない 知的に、構文の一部。 しかし、今のところとして知られているそうでなければ、その機能を知っている プロシージャー、または方法は、一般的にいくつかの値を生成します。 彼らは何かをする。 彼らは答えを出す。 彼らは、出力を生成します。 だから、主に次のintというのが弊社の簡単な方法です この関数は、この手順では、最終的に起こっていること 番号をお返しします。 そして、なぜそれは、我々は戻ってくるでしょう。 メインは単にデフォルトのデフォルトの世界標準である ときに、Cプログラムで実行されるために起こっている機能 あなたはそれを実行します。 ボイドはちょうどこの事を意味し、主には、を取りません この場合、引数。 だから私は、スーパー明示されています。 そこには文字列がありません、何コンマはありません。 voidはmainに引数がないことを意味します。 今最後に、ありがたいことに、最後の2行はよく知られている。 中括弧内では、printf関数を持っている そして私達はリターンを持っています。 とリターンは、我々がしなければならないという一種の不幸である このケースでは、すべてのことをやっていないので、そこに置く あまり興味の。 しかし、関数が0を返したコンピュータプログラム、で すべてが順調であることを意味します。 何も間違っていた。 これとは対照的に、関数の戻り値1、または1負の場合、または 負1337、またはそのようないくつかのランダムな数字、その 一般的に、実際にエラーが発生したことを意味します。 だからあなたのMacまたはPCを使っているのであれば、あなたが今まで見てきた場合 コンピュータがクラッシュしたためか、いくつかの迷惑メッセージ 凍結し、不可解なエラーメッセージあり その後、いくつかのコードのようなシステム·コード 1,2,3,4、いくつかの数、 それは一般的に伝えるために不必要な詳細です 私たち人間のほとんどが、それはどのようないくつかの機能または一部である プログラムは、実際には、ゼロ以外の値が返されました。 そして、これの利点は、0はすべて同様に意味することであり、 その後、あなたは本質的に、物事の数を無限に持っている 間違って行くことができます。 彼らは良いとゼロ以外の値に0を選んだ理由である 我々はすぐに見るように、悪い。 それでは、先に行くと、これを書いてみましょう。 だから、他の日、私は開くように私のMacを使用したことを思い出す その後、ターミナルウィンドウ、そして私のように、テキストプログラムを開設 テキストエディット、と私はいくつかのコードを書き始めた。 まあそれはいいのよ。 しかし、あなたの経験は、Mac上で別のことを行っている、または Solarisコンピュータ、Linuxコンピュータ上で、任意のオペレーティング システムは使用することが起こる。 それで途中で、私たちが代わりに使用することは何か CS50アプライアンスと呼ばれる。 だからCS50アプライアンスは、ソフトウェアのダウンロード可能な作品です それは、あなたがLinuxというオペレーティング·システムを実行することができます 自分のMacまたはPC上で具体的にFedoraのLinux、。 そして、あなたは、ハイパーバイザと呼ばれるものをダウンロードすることによってこれを行う。 だから、これのすべてが問題セット1に記載されます。 そして、あなたは、あなたがダウンロードするために必要なものに導かれるでしょう。 しかし、最終的な結果は、あなたがMacやPCを持っているかどうか、あなたです いくつかのフリーソフトをダウンロードしてください。 その後CS50アプライアンスをダウンロードして、あなたはそれを伝える フリーソフト - ハイパーバイザ - お使いのコンピュータ上のウィンドウにCS50アプライアンスを実行します。 そして、これは何が起こるかです。 私は今、ここで注目している、何がデスクトップであるように見える 環境。 そして、私が実際にこの単一のウィンドウを縮小してみましょう。 だから、これは今ここに小さなウィンドウで、私のMacであり、内部 このウィンドウから完全であることを起こる 異なるオペレーティングシステム。 確かに、このスタートメニューはを彷彿とさせるが、ダウンここにあり を含むサブメニューの全体の束を持ったWindows、 CS50マニュアルへのリンクは、Dropboxなど。 そして、この環境は、今や標準的な環境とは何か 私たちのすべてが今使用できるので、何に関係なくあなたの コンピュータは、あなたがそれにインストールされているものであり、どのバージョン あなたが実行しているMac OSまたはWindowsの、我々はすべての今持っている 同じ環境。 そして今、このような環境では、我々はいくつかのコードを書き始めることができます。 だから私は先に行くとgeditと呼ばれるプログラムを開くつもりです。 これは、notepad.exeに匹敵する、または Mac上でテキストエディット。 そして、これは単にスーパーシンプルなテキスト編集プログラムです それは一見すると、このように見えます。 現在、非常に上部に、私は私が一番下に、白いパレットを持ってい jharvard @アプライアンスを言うこの黒いウィンドウを持っています。 我々はユーザアカウントを事前に作成したので、それはだ みんなのためにジョン·ハーバードと呼ばれています。 彼はすべてのファイルがに行くのフォルダーがあり、 我々はいくつかのコードを書き始めることができますどこにここにあるのです。 だから私は少しだけ、ここで先に行くと、ズームさせて、私はよ を、int型のmain(void)を含めると、#何をするつもり それから私は( "hello world"の)のprintfするつもりです 、0を返します。 さて、これはすべての非常に黒と白です。 私が先に行くと、私は何geditを教えるために一つのことをやってみましょう 実際にやって。 私は名前を付けて保存しに行こう。 私はここjharvard左側に選択するつもりです。 だからもう一度、あなたが前にLinuxを使ったことがない場合であっても、率直に言って これらの日、それらのすべては、本質的にに委譲アール 同じタイプのインターフェイス - Mac OSでは、Windows、およびLinux。 だから私はここにjharvardのホームフォルダを選択しました。 そして、私はhello.cとしてこのファイルを保存するつもりです。 だから、非常に上部に、私はhello.cを入力し、Cを命名 。c拡張子を持つプログラムです 一般的な方法は何でしょう。 そして、私は、[保存]を押してください。 そして今何が素晴らしいのは、私は効果的にgeditを教えたということです これは、C言語のプログラムであること。 私の白と黒のテキストが今色分けされていることに注意したり、 ちょうどに私の注意を引くシンタックスハイライ​​トされ、 プログラムの異なるセマンティック部品。 上部には、私のプログラムがより複雑になると、私は、そこに残さ 私が書いたもののすべての要約を持っているつもり。 だからそれはそれはそこまでだ。 だから私は、今ではズームアウトすると、この端末ウィンドウに落とす。 だから、これはおそらく多くの人々に新しいです。 あなたがコマンドライン環境を使用したことがない場合は、決してなかった。 DOSを使用したり、Linuxを使ったことがない、またはあなたがオープンしたことがない お使いのMac OSのターミナルウィンドウで、たくさんのことがあり ポインティング、クリックなどのGUIで行うことができ、かつ ドラッグ、ドロップ、などが挙げられるが、一般的には - 確かにコンピュータサイエンスの世界で - あなたのマウスを持っていないコマンドラインを使用して、 一般的に、あなただけのキーボードを持って、実際にはたくさんある インターフェイスよりも強力な、一度は〜に慣れる さまざまなコマンド。 そして、あなたが指摘する必要があるの自由自分のソートとクリック 何事につけても。 だからgeditで、我々は両方の長所を持っているの並べ替えがあります。 我々は、テキストをドラッグ&ドロップすることができ、我々はそれを見ることができます 素敵で色分け。 しかし、それは我々のプログラムを実行する時間が来るとき、我々は時々よ ちょうどここに、この小さなウィンドウを使用します。 だから私は先に行くとこれを行うつもりです。 底黒と白のウィンドウでは、私は先に行くつもりです と甲高い鳴き声を書いてください。 と打ち鳴らすには、コンパイラの名前です。 それは私のソースコードに変換するプログラムです オブジェクトコードなので、中へ。 我々は先週簡潔に見て、0と1、。 先週から思い出して、我々は我々がしようとしていたことを約束した このようなものから行く - 私たちはなるために必要な このような何か - これは確かに人間が起こっているものではありません 手動で行う。 だからではなく、我々はプログラムを使用するつもりだ、とそのプログラム このケースはClangのと呼ばれています。 そして、私のプログラムの名前はhello.cです。 だから、ソースコードからhello.cをコンパイルするために、 オブジェクトコード、または0と1は、それだけで行うには十分なはずである これと入力し、Enterを押してください。 さて、何も起こっていないようにみえます。 しかし、私が今知っている、あるいは先週から、デフォルト名のその Cで書かれたプログラムは、a.outという愚かさ。 あなたが思い付くことができる最もつまらない名前。 アルファベットの最初の文字ですが、出ていたものです 出力されますが、そのためである。 これは私のプログラムであり、今やドットスラッシュ、我々がわかるように、ある なぜならセキュリティ機能の実際にちょうど並べ替え、 a.outは私が書いたプログラムです。 それはそれは、私のコンピュータに付属していなかった しないプログラムファイルインチ それは、Mac OSのアプリケーションフォルダにはありません。 私はコンピューターを持つスーパー明示的なものにする必要が、と言う このプログラムは、a.outは、現在のフォルダにある カレントディレクトリ。 そして、あなたはこのような環境でこれを表現する方法 ドットは、インチ現在どんなフォルダを表している そしてそう。/ a.outを実行するだけ意味 現在のフォルダにあります。 そして、私は入力して、ほら、私の非常に最初のプログラムでこれを実行します。 今私は一歩下がってみましょう。 このウィンドウには、少し小さいですし、その底部を実現 ここアプライアンスの左別のアイコンです。 一つは、単にウェブ、かなり精通している必要がありますクロームです アプライアンスの内部ブラウ​​ザ。 そして、この黒と白のアイコンがちょうどです 大きなターミナルウィンドウ。 それをソートするために少し煩わしい取得した場合、これだけ持っている 相互作用すると、ウィンドウのこの小さなスライス プログラムで、我々はその代わりにこれを行うことができます。 そして今、私はすぐにいくつかの入力を開始してみましょう おなじみのコマンドである。 LS。 だからlsがリストのためのコマンドです。 だから、Mac OSやWindowsで、一般的にはダブルクリックしたい フォルダとその後、出来上がりには、さまざまなファイルのすべてを参照してください。 とフォルダ。 あなただけ入力することができ、コマンドライン環境では、 コマンドやテキストは、lsは同等です。 だから、このディレクトリ内のものを見せてくれ。 今では原料の束は少し両方だとここにあり 身近でちょっと不慣れ。 それだけで、WindowsやMac OS、jharvard様が、予告 デスクトップのフォルダがあります。 だから私のデスクトップ上にある任意のアイコンが起こる そのフォルダにあることが必要です。 ダウンロードフォルダにはそのようなもの、あります Chromeはそこに置くかもしれない。 Dropboxが。 だからアプライアンスは、Dropboxのためのビルトインサポートが付属しています 学期にわたって、あなたはあなたのDropboxと同期することができるように あなたのプログラムのすべてがバックアップされるようにアカウント。 彼らは、他のコンピュータ上でアクセス可能だ。 何が今までアプライアンスで問題が発生した場合、次の操作を実行できます 非常に簡単にDropboxのから回復します。 だから、そのフォルダには、そのためにそこにあります。 hello.cの - 私が作った二つのファイルがあります とa.out。 そして、我々はだろうといくつかの他のフォルダがあると右に webで、学期の終わりに向かってに到達 プログラミング。 行くと言っているので、私はやる。/ a.outを入力し、 ディレクトリに、私は現在のディレクトリに、だと実行 プログラムはすぐそこにa.outという。 すべての権利は​​、そうすることがいいと良いのですが、それがすべてというわけではない a.outを助けると呼ばれるプログラムを書くことはやむを得ない。 だから我々は、実際には異なるこの少しを行うことができます。 だけではなく、実行中のカンという音はhello.cのそれでは追加してみましょう コマンドライン引数と呼ばれるもの。 コマンドライン引数、またはこの場合、スイッチは、ちょうどになるように あなたがした後、プロンプトで入力することを別の単語やフレーズ あなたが実行するプログラム。 したがって、この例の場合、カーンという音は、私が実行したいプログラムであるには、-o もはやa.outというんだ出力ファイルを意味します。 helloという名前のファイルを出力し、コンパイルすることで、そう 行の最後の単語はhello.c。 だから要するに、これは、それによって非常にわずかな改善である 代わりに、この愚かな名前のファイルa.outを持つのではなく、 私は今、カーンという音は、-oこんにちは、その後hello.cを行うことができますし、 Enterキーを押してください。 何も起こらないように見えるが、やはりずっと0と同じように - 時 何も何も悪いことが起こったことを意味しな​​いという点起こらないように見える - だから今では確かに入力して、今ではlsを実行してみましょう、と helloプログラムを持っています。 私は今、Hello型であれば、コマンドが見つかりません。 [OK]を、。/。 それでは、正確に右。 したがって、このプログラムは私が書いて、それが付属していなかったので、 コンピュータ、。/こんにちは、意味は、Enter 私は今、helloを実行している。 だからそこだ。 今、私たちは最終的にはより多くのコマンドラインに何を買ってあげる 私たちはより多くを行うことができますが、ただのためのそれらの引数 これは古い帽子かもしれない人は、私が実際に手放す ディレクトリには、ここに、ちょうどあなたにどのように他の我々のお誘いを与える Hello Worldを実装に取り​​掛かることができます。 私はここに行こう、と私はそれを開くつもりです。 だから、実際に、私は私がやっているのかを説明するつもりですので、 これは便利です。 私をバックアップしましょう​​。 だから私はこれには長い時間をやってきました。 だから右側にオーバー気付くのがいくつかあります 奇妙source1mとsource1w命名されたディレクトリ。 これは、我々が使うだけ愚かな規則です。 ソースはソースコードだけを意味し、1はこれが週1であることを意味し、 mは、それが月曜日であることを意味します、とwそれが水曜日であることを意味します。 そこに不可解なので、何もありません。 それはちょうど簡単な表記法です。 これらの青色のものはそうでないとして知られているフォルダであり、 ディレクトリ。 私は今、そのフォルダに移動したい、通常のコンピュータ上に 私はちょうどでしたフォルダのアイコンをダブルクリックすると、 すべての私のファイルがあります。 しかし、コマンドライン環境で、私はかなりのことができない そのため、代わりに、私は手動でディレクトリを変更する必要があります。 私はその後、cdやsource1mを入力するのであれば、入力して、気付くこと 私のプロンプトで、左の白の物が、ちょうど変更した。 それで確かに、それだけで、かっこと言ったとき ちょうど私が意味したちょっと走り書き、チルダ記号、 ジョン·ハーバードのホームディレクトリにある、彼のマイドキュメント、 彼の個人的なファイル。 しかし、今のかっこでは〜/ source1m言う。 これはちょうど私がsource1mというフォルダの中にいることを意味 ジョン·ハーバードのホームディレクトリにあるということでしょう。 私は今、簡単に、このフォルダ内のファイルを一覧表示したいのであれば 質問は、私はちょうどLSタイプ。 そして今、私は、今日のために事前に作成したすべてのファイルを参照してください。 すべての講義、またはそのうちのほとんどが、起こる cで終了します。 だから私は今、先に行くと呼ばれるプログラムのgeditを実行してみましょう いくつかのランダムなハッカーによって書かれholloway.c、 インターネット上で、それはこのように少し見えます。 そして、我々はいずれにもこの1を通過するつもりはありません 詳細が、それらをより快適のために、特に、もし このプログラムはここにどんなことをしている推測を取りたい。 、あなたは、lessやmore使いこなせるかどうか、ご安心 私たちも、年末までに、この種のことに到達していない この学期。 これは、難読化されたCのコンテストの一例であるものである 手段は、おそらく最も不可解並みのプログラムを書き込む 他のスマートな人々をしのぐことができ、同様に誰であるか 物事を書いて、彼らが書き込むことができる誇示しようとしている あなたより不可解な物事。 だから、これはからよく書かれたプログラムの例ではありません。 スタイルの観点から、これは、そのプログラムの一例です 人々がしようとするため、コンテストに勝つ 漠然とした抽象的で。 我々はこの事を実行する場合だから、私は私の端末ウィンドウに手放す いわば。 だから、この黒と白の環境が呼び出され 一般的には、ターミナルウィンドウ。 私が先に行くとそれをコンパイルしてみましょう。 このプログラムがあるので、私は、カーンという音を使用するつもりはない 少し不可解な、それは別のを必要とし コンパイラは、GCCと呼ばれる1。 しかし、それは同じことをします。 これは、オブジェクトコードのソースコードを受け取ります。 そして今、私は、a.out、そのプログラムにあなたを実行する場合 ただ、これを行いました。 今年はそのコンテストで優勝したように、その仲間。 とにかく、我々は、それ自体が、その方向に進んでいない。 それでは、実際に、今、私たちに何ができるのか離れていじめるしてみましょう これらの基本的なビルディング·ブロックをより多くのようにし 興味深いプログラム。 我々はプログラムを書いているので、我々はプログラムを実行しました。 今、私たちは実際に簡略化することができ、もはや書く必要はありません プロンプトでワード打ち鳴らす。 それは私たちのプログラムはもっと不可解な取得として、我々はできる、または判明 より複雑ではなく、我々は、実際にこのコマンドを実行できます。 だから、私を聞かせて、いわば、私は私のホームディレクトリに戻りましょう 削除 - rmはremoveコマンドです - - 私は削除してしまう ファイルは、a.outと呼ばれ、こんにちは。 そして今、多くののように、コマンドライン環境で気付く GUIは、プロンプトが表示されます。でも、私はボタンをクリックすることはできません、私は はいの場合、yesを表すyをyを入力する必要があります。 そして今、私は、再びそれらの緑のことに注意してlsコマンドを入力した場合 プログラム - a.outとこんにちは - なくなっている。 rmを用心しなさい。 それはあなたがすることでドラッグするのと同じように、悪いことをやっています あなたのゴミ箱に物事。 それでは先に進みましょう - と私はこれを行うことができます - カーンという音は、-o ハロー、ハロー - 私はすでにそのコマンドを入力して退屈してしまう。 私はすぐにそれを少し入力したにもかかわらず。 だから我々は代わりに挨拶して行うことができます。 だから、makeはコンパイラではありません。 それはちょうどこれには、Linuxが付属しています優しいプログラムです ケース - オペレーティングシステム - それは、プログラムをコンパイルするプロセスを自動化します。 だからではなく、打ち鳴らす-oファイル名を覚えると その後など、特に一度それらの線が長くなると もはや、私はちょうど作る書くことができます。 そして、これはそのようなものの全体の束を吐き出すために起こっている 我々は最終的にこの学期が表示されます。 しかし、今気付いた場合はI型LS、こんにちは、私のディレクトリに戻っています。 そして実際に私はそれを実行することができます/こんにちは。 それでは、何であったかの実行プロセスを自動化する この場合には、はるかに長く、より複雑なコマンド。 だから我々はそれがたくさんあるからといって、作るの使用を開始するつもりだ よりユーザーフレンドリー。 しかし、今はもっと面白いプログラムを実行してみましょう よりはまさしくこんにちはと言う。 だから我々はこれまで書いてきたプログラムでメインあり。 それはちょうど、すべてをキックオフ既定のことだ。 しかし、そこに他の機能も同様にそこにあり、 stdio.hは、我々はの上部に見たものです ファイルの前に、それは標準ライブラリとして知られているものです。 標準ライブラリの内部には、関数の全体の束である 他の誰かが書いたものであり、当社は、これらを使用して起動することができます 詳細を記述するための関数 興味深いプログラムが自分自身。 だから私は、アプライアンスに戻りましょう。 私はこのターミナルウィンドウを閉じたいと思います。 私は我々が以前書いたものを閉じ、ちょうど行くつもりです hello.cの中に、今気づく私は、次の操作を行うことができます。 こんにちは、世界はそれほど興味深いものではありません、私はしたいのですが 自分のためにこのプログラムをパーソナライズ。 だからではなく、世界を言って、私はに行くよ 先に行くと言う - 私はデビッドと入力することができます - しかし、これは本当にのようなものです 基本的には同じ。 しかし、このプレースホルダーのアイデアを試してみましょう。 C言語ではなく、printfで、我々はこれらを持っていたことを思い出してください プレースホルダ、および単に%dよりももっとあります。 だから%dは、迅速な健全性チェックであった。 さて、10進数、それだ。 すべての10進数字、。 %cのように、我々が遭遇すると、文字になるだろう。 aからzまでここに文字を入れ、手紙、 または句読記号。 単一の文字、%fは、他の言語から誰を知っていますか? 浮動小数点値だから。 実数。 そうではない進数 - これは実際には実数である 小数点、および左側の桁のいくつかの番号 その右。 %sは、文字列を指定します。 我々は非常に頻繁に見に行くしていること1。 文字列は、再び、ちょうど単語、フレーズのシーケンスです 個々の文字。 そして最後に、LLD? だから、これはコーナーケースの詳細です。 長い、長い小数。 あなただけの、この大きな数字だ、あなたにはないたいのであれば 大きい数字にしたい、あなたはに指定する必要があるとしている それは特定のサイズのだとコンピュータ。 それでは、これを少し微調整しましょう​​。 むしろDavidのちょうどハードコードよりも、わずかに私を聞かせて 動的に%sを言う。 ので、%sは文字列のプレースホルダである、ここに置いた。 それからこっち "デビッド"その後私はコンマをやらせる、と。 さて、これは、すべてが知的に興味深いものではありません 私は今やったすべては、本当にために多くの仕事を作成されているため、 コンピュータ。 コンピュータに指示を一度にすべてこれを行うのではなく、私は今だ これを行うと、最終的にはコンマをここに文字列を挿入すると言って、 ここでその文字列です。 だから、これは良い改善はありませんが、少なくともそれはだ もっと面白いプログラムの第一歩。 今ので、私が先に行くと、このウィンドウを少しを作ってみましょう 大きく、私が先に行くとhello makeを実行してみましょう。 そして今、。/ a.outが動作していません、なぜですか? すべての権利、今それはhelloと呼ばれています。 だからもう一度確認し、また、-oで打ち鳴らす、改名 もっと面白いものにするためのプログラム。 と出来上がり:今それがhelloデビッド氏は述べています。 すべての権利は​​、まだ愚かなプログラム。 だから今、実際にここに戻って、概念を導入してみましょう 変数の。 私は変数を宣言することができれば、それはいいと思いませんか 文字列型を持つのですか? と変数の値は、実際にユーザーから来る 彼または彼女自身。 だから勝手に、私は私の変数sを呼び出すつもりだ あなたは一つの変数を呼び出しただけで一般的な規則 文字列を指定します。 私は等号をするつもりですし、私は呼ぶつもりです この関数は、GetStringを呼んだ。 だからGetStringメソッドはそれがCに組み込まれていますものではありません CS50スタッフは本当にただのために、書いた関数 のプロセスを簡素化するために数週間、これらの最初のカップル、 ユーザー入力を取得して、フォームでのユーザー入力を得る 文字列、または数字、およびそのようなの。 だからGetStringメソッドはprintfのようなものですが、明らかではなく、 それは、その名前が言うことをやろうとしての印刷は、文字列を取得します。 しかし、GetStringを使用するために、我々は変更を加える必要があるとしている ここで、これを超えています。 だから直感的に、このプログラムは、うまくいけば、何とかに起こっている ユーザから文字列を取得し、それは何をするために起こっている その文字列で、sと呼ばれる? それはちょうど、それを印刷するために起こっているのか? まだない刺激プログラムすべてのそれは起こっているので、 行うことは、ここで、%sにその値のプラグインです それが行くべきだと言います。 それでは、少なくともこの動作を見てみましょう。 私は保存してズームアウトしてみましょう。 今、私の端末ウィンドウでダウンここに、一つの小さなスライス、 こんにちは作る私は再びやらせる。 さて、とああ、いまいましい、私はエラーの全体の束を得た。 私が上にスクロールして、我々は最初のを見てみましょう - ので、実際にはさらに大きなウィンドウでこれを実行してみましょう 私はめちゃくちゃにどれほどひどく見ることができます - そうこんにちは作る。 いいでしょう、災害、右ですか? 私は、3行のコードを書いてきた、と それは私に12のエラーを与えてくれた。 だから、これはなぜですか? だから幸いにも、あなたが見る、しばしば多くの、多くのエラー あなたがきたので、一度に吐き出し、それは本当にわずかだ ここでコンピュータを混乱させました。 そしてそれはここに着く頃には混乱したまま。 そしてそれは単なる転倒とつまずきを開始し、 実際に適用されるよりも怖いものを吐き出す。 だから一般的には、常にトップ1で始まります。 だから赤の非常に最上位インスタンス エラーメッセージはこれです。 私は、宣言されていない識別子の文字列ではなかった使用 における標準的意味ですか? 私はしませんでした。 私は、文字列を意味しますが、これは、あまりにも、なぜなら単語列である 私は口頭で実際に使用して保存しておくこと いずれかのC言語には存在しません。 それは、我々は最初の週または2のためだけに使用します何か ここで、それはcs50.h.と呼ばれるファイルに存在する だから今では、この他のライブラリがあることを知っている スタッフが書いたので、それはもっと最近より書かれている stdio.hに。 しかしcs50.hの内部は定義の同義語です ソート、この単語列を作成します。 だから今、私は私の端末ウィンドウに戻りましょう。 私は、Ctrl-Lで、この全体の混乱をクリアするつもりです。我々は、ちょうどよ すべてがきれいに拭いて、私は先に行くとするつもりだ こんにちは、再度入力してください。 だから今何が起こったのか? 今すぐこれらのエラーのすべてが去っていきました。 だから私は本当に何をやっていますか? 私はただの文字列が存在することをコンピュータに教えてきたが、それはだ cs50.h.と呼ばれるファイル内の だから今、あなたはどこで見つけるかを知っているので、文句を言うのをやめる その関数の宣言は、いわば。 それは世界に存在する場所。 だから今、私は先に行くとhelloを実行するつもりです。 私は無限ループ、何の出来事を持っているように思われる。 だから私は右、ここで何かを入力する必要があります。 私のプログラム内のコードの最初の行は、GetStringメソッドだった。 私は文字列を取得するためにだからそれは文字通り待っている。 その意味で、はい、それは無限ループです。 どうやらGetStringメソッドのデフォルトの動作では、我々 書いた - スタッフ - それはただ、待って待って待って待って待ってと言う ユーザーはインチ何かを入力することにより、文字列を与えるまで だから私は先に行くとD-A-vの型ましょう - I-dを入力します。 そしてそれは、ハローデビッドがある。 それだけの行為のようださて、これは見えるのですか? 私が先に行くと、トミーに入力しましょう​​。 大丈夫、次のように入力し、動作しているようだ。 大丈夫 - ロブのための作品、Zamylaための作品は、のために動作します。 だから、ほとんどの場合、仕事になるだろう。 だから、我々が実際にそれを与えるものは何でもプリントアウトする必要があります そして我々はここに少し困難になる可能性があります。 我々はhelloのような何かをするかどうかを確認してみましょう。 コピー、ペースト、見てみましょう、こっちに行くことができます。 私は何度もここに貼り付けできるようにするつもりはない。 ペースト、大丈夫、+ Ctrlキー+ V、Shiftキーを押しながらだから何でし ここでまずいことが起こる? わかりましたので、セグメンテーションフォルト。 だから、あなた方のうちの何人か前には、バックグラウンドを持つことを知っているだろう 一般的に、彼らがしているときにコンピュータに入力の多くを与える おそらくこのような長い名前を受信することを意味しな​​い - 悪い ことが起こる。 実際、ウェブの世界では、あまりにも、これはかなり起こり、 それによってあなたがしているときに、Webサイトを設計しているとき 設計Facebookは、あなたは、恣意的な判断を行う必要があります どのくらいの期間でしょう誰かのようなフロント、 Facebookのユーザ名がある? またはどのくらい誰かの最初の名前になりますか? どのくらいの誰かの電話番号があると好きになるでしょう。 プログラマが間違っていた仮定をした場合と、プログラムが壊れる あなたは、彼らに多くの出力、入力を与えるしようとしているため むしろ、彼らは記憶を持っているよりも。 またはRAMは、私がEnterキーを押すようになりました場合、それのために割り当てられ、 私たちは図書館であったので、そのプログラムは、実際に働いた そして我々は、実際にこの特定のケースを予想した。 しかし、間違いなく、この学期は、少なくとも1つを書きます これらの言葉を言うだろうプログラム。 今から、多分2日間、今からこの週を覚えておいてください。 セグメンテーションフォールトは悪いことです。 それはあなたに何かやって、そのコンピュータを参照します 予想していなかった。 そして、その場合には、あなたは、プログラマが、予想していなかった。 ずっと靴下のこの山は、様々であったものが好き コー​​ナーケース我々は遭遇している可能性があります。 同様のプログラムでは、どのくらいです予想していない場合 誰かの名前にはなるだろう。 または私は何を悪意のあるユーザーが持っている、と彼または彼女の名前である場合 実際にはかなり短いが、彼らはちょうどしようとしている 私と一緒に混乱へ? 何が私のプログラムの動作になるだろう? まあ、その場合には、何かが実際にクラッシュする可能性があります。 だから、これを実行してみましょう。 90分には、これはひどい長い時間です コンピュータサイエンスを行う。 なぜ我々は、5分を服用する習慣をつけていない ここで休憩、そして我々が戻ってくるとき、私たちはいくつかに飛び込むよ より複雑で魅力的なプログラム? 五分。 かしこまりました。 だから1簡単なコメント。 私は、これが前に画面に表示されたのにともいわれています、どのような cs50.net/rsvpだった私の口から出てきた。 これは正しいです。 cs50.net/lunch。 だから今は/昼食で、このためにRSVPingうとするかもしれません。 しかし、今これを実行してみましょう。 だから、これは多くの人々のために、超高速、超新されています。 一部の人々のために古い帽子。 それでは、ちょっと巻き戻してみましょう、と我々が得た方法を参照してください ちょっと前にこのHello World出力。 そこでまず、このCS50 Applianceはそこだ。 繰り返しになりますが、ソフトウェアの一部、問題セット1が言うように起こっている どのようにクリックすべきか、それをどこにダウンロードするには、それをダウンロードする方法 など。 あなたがそれらの指示に従ってたら、その後、あなたはできるようになります あなたのウィンドウを最大化するには、お使いのMacまたはPCが見えるでしょう このように少し何か。 黒の背景には、すべて上部のホームフォルダ あなたのファイルは、左上に、ゴミをすることができます行く、 下部のメニューです。 だからもう一度、Mac OSまたはWindows精神においてかなり似て、 これはLinuxであることを起こるにもかかわらず。 だから我々は次に何をしたのか? まあ、我々はプログラムを書き始めた。 そして、すべて、それが書き込みにかかることを先週からリコール プログラムは、単純なテキストエディタです メモ帳やテキストエディットのような。 率直に言って、あなたは、Microsoft Wordを使用していてもすることができます。 それは非常にですので、しかし、悪いことは結局、どうなる 強引なプログラムを記述するための解決策、それに加えてよ それは間違ったファイル形式で保存します。 しかし、それだとすべて、単なるテキストエディタ、ワードプロセッサですよ プログラムを書く必要がありました。 だからCS50アプライアンスでは、我々は1つの単純な方法でこれを行うことができます。 我々は、ちょうど左下のこのアイコンをクリックすることができます。 そして再び、問題セット1は、このことを助言し、出来上がります - あなたは私たちが始めることができますこの黒と白のインターフェイスを取得 コー​​ドを書く。 だから、再び超簡単なプログラムを書いてみましょう。 私は、ファイルを保存するように行くつもりです、と私は呼ぶつもりです この、hello2.c、としましょう​​。 そして私はちょうどjharvardをクリックして、それを言っている、それを置く そのホームディレクトリに、私は本当に気にしない この1がどこに行くか。 そして、保存します。 そして今、私は私のプログラムを書き始めることができます。 そして、私は以前の私はint型を記述する必要があることを思い出して メイン(ボイド)。 左上に拡大表示します。 そして私はprintf言いたい、2を取る。 そして今、改行、閉じ引用符は、閉じ 括弧、セミコロン。 そして私は私の端末ウィンドウにここに降りて行く ただ便宜上、geditで埋め込まれた。 そして、私は先に行くとhello作る書こうと思ってますが、いないよ 単独で、hello2こんにちは。 だから、私のファイルはhello2.cと呼ばれています。したがって、私のファイル この場合には、hello2を呼び出す必要があります。 くそ、私は間違って何をしましたか? すべての権利なので、あなたは何を思い出すかどうかは明らかに、行を省略 以前のプログラムは次のようになります。 しかし、我々は離れてこれをいじめることができない場合、見てみましょう。 残念なことに、ほとんどの人は、プログラムを書く人いると 我々は、プログラムがそれほどうまく物事を単純化しない書き込み。 だから我々は非常に何をしない上にすくい取るの種類がある ここで感知し、我々が間違っているか把握することができます参照してください。 暗黙的にC言語の宣言があると言う、非常に最初の行 int型のprintfライブラリ関数。 [OK]を、私はその一部を理解していました。 しかし、それは私がprintfの使用していた事実をほのめかしているように見える どうにかして、間違っている。 そして、それはどのような意味が間違っている? 私はちょうどそれがファイル内だとコンピュータを教えてくれなかった stdio.hという名前。 今私はちょうど今のprintfであることを覚える必要はあり stdio.hで、実際に他のもあるかもしれません 我々は慣れるだろうと、同じファイル内の関数。 だから今、私が先に行くと、ちょうどそれをクリアするには、Ctrl-Lをヒットさせ 離れて、hello2を再実行して、出来上がり。 そして、我々はのために再び、より複雑な、このコマンドを説明しましょう​​より 今日の目的。 しかし、それは甲高い鳴き声を実行しなかったし、カーンという音は、ソース·コードを受け取り、 0と1を吐き出します。 そしてこの場合、0と1のものが何と呼ばれていますか? さて、オブジェクトコード。 そして、彼らはにいることファイルは、そう呼ばれ、 この場合hello2、。 私のテキストフ​​ァイルがhello2.cだったので、入力します。 そして今、私は2つの感嘆符、感嘆符を取るた ポイント、感嘆符。 すべての権利は​​、、我々は現在の文字列を取得する機能を持っているので、 明らかに。 まあ、我々はユーザから他に何を得ることができますか? まあCS50ライブラリに、他の関数があり、その これらの最初の数日間で私たちの生活を簡素化しようとしている。 GetCharなどgetDoubleは、getFloatは、場合、getInt、 GetLongLongは、GetString。 さて、これらの最初の最も簡単に毟り取るみましょう。 GetStringメソッドは、文字通りそれを行います。 それだけで何かを入力するように、ユーザーを待って、そこに座っている とすぐに私は何かを入力して、それを入力してを打つよう その値を持つものはありません。 それでは、正確に何を確認するために、そのような例に戻りましょう GetStringメソッドはやっていた。 私が先に行くとgeditはhello.cで開くみよう、と思い出す 我々が去ったところ、ブレークする前に、その権利は、これです。 だから今はもう少し詳細にこれを離れていじめるしてみましょう。 だから、6行目で、二つのものがあり 瞬間に起こって。 等号は、前半と後半を分離されています。 等号の左側にあるので、我々はしている 文字列sを言う。 そして、ちょうど普通の言葉、文字列sは何ですか やって、あなたは思いますか? それは何を作るのか? だからそれは、sという文字列を作成している。 今では本当に何を意味するのでしょうか? まあ、それは、sという文字列のためのスペースを確保している。 それは非常に適切ではないのです。 これは何をやっている? まあコンピュータは、あなたが知っているように、ハードドライブを持っている、それはどこ? あなたのファイルが格納されています。 コンピュータのRAMを持っており、プログラムがロードされているところです 彼らが実行している間。 だから、アイコンをダブルクリックして、Microsoft Wordを開いたとき セットアップは、Microsoft Wordがある、RAMに、いわば、実行されている お使いのコンピュータの電子部品。 スピニングではない物理的、機械的部分、どこ データは一般的に長期的に保存されています。 だから、文字列sはかなりコンピュータは私を与える語っている 十分には、文字列に合わせてRAM。 ので、今では、単純化し過ぎのビットです どのように大きな文字列は次のようにするつもりですか? まあ我々は実際にはまだわからないので、週に来て 私たちは、実際には文字列である層を引き戻すとよ 我々はそれが本当に何なのかを教えてあげる。 文字列は、今のところは、ちょうど我々の世界のすてきな単純化したものです。 しかし、文字列sは、今のところ、sと呼ばれる文字列を宣言しています。 文字列を宣言します。 これは、ユーザーが文字列のためのRAMの領域の一部を留保し 型に約。 今度は、等号の右側に見てみましょう。 だから、getString()を言います。 そして、少し正気をチェック。 括弧の内側には何もないという事実 GetStringメソッドについて何を意味する? このメソッドは引数を取りません。 つまり、何らかの方法でその挙動に影響を及ぼすことができない。 あなたがそれを使用するたびに、それは文字列を取得し、それはそれだ。 これとは対照的に、printf関数、うまくいけばその動作はありません 毎回変更します。 そうでなければ、それはかなり無駄な印刷機能であるかの それは同じことをします。 それは常にデビッドか何かを出力した場合は 任意のすべての時間。 だから、printfの引数を持っていることは理にかなっています。 私が欲しかったので、GetStringメソッドは本当に、引数を必要としません ユーザから文字列を取得し、それが起こっているユーザのために 別の文字を入力することで活力を供給する キーボードで毎回。 だからGetStringメソッドは、最終的に何をするのでしょうか? この小さなブラックボックスとして考えてください。 そして、このブラックボックスは入力を受け取りませんが、ときに強打で それは、それがユーザーに打鍵したことを文字列を吐く と等号があるという事実がかかりそこに意味 右側に吐き出すと内部に格納されているもの 左の上にあるもの。 だからここで等号の後に、それが実際に意味するものではありません 平等、それはむしろ技術的には代入を意味します。 右辺の値を取り、にそれを置く 左側の変数。 だからそこに起こっているすべてです。 現在、7行目では、我々は、printf呼び出しています。 だからprintfはうまくいけば、今では少し退屈を取得している。 だから、フォーマットされた文字列を出力します。 何列? プリントアウトして、 "H-E-L-L-O、%sを !ます\ n "。 すべての権利は​​、ので、私は%sのプラグインに何をしたいですか? 文字通り、何をsに格納されています。 だからこの場合は、少し健全性チェック、どのように多くの引数がありません printfを取る? さて、私は1を聞いた。 私は再び1を聞いた。 二人は、私が2を聞いた。 そして、どのように約3? さて、3? 優れています。 3つの可能な答えは、そのうちの1つだけが正しいです。 だから引数は再び関数の動作に影響を与えます。 過去には、printfの引数を一つだけ取りました。 "Hello World"は単一の引数であった。 このコンマがどこにあるかしかし、今、気づく。 このコンマは意味引用/引用終わり、外にある ちょっとのprintf、ここで第二引数が来る。 だから、ほとんどのプログラミング言語でコンマ 複数の引​​数を区切ります。 だからここに答えがあるので、間違いなく1ではありません このコンマがあります。 だから最低限、printfは明らかに2つを取っている 引数がこの時間。 しかし、ここではトリックの質問の機会は何ですか このカンマはどうですか? これは3つの引数は実際にありということを意味していますか? これ、これ、これ。 だから、いや、そのカンマがどの引用符の内側にあるので、 それは本当に英語だけの美的であることを意味します。 それは、数とは関係ありません このプログラムの引数。 だから、このコンマ、二重引用符の外にあります。 そして、0を返します。 今のところのために信仰にこのいずれかを取るのだけソートしてみましょう 今日、ちょうど関数が実行されたときに実行することを知っている コー​​ドの行数は、彼らは一般的にいくつかの値を返す必要があります。 このケースでは、ちょうどメインは、intを返す必要があるため、 それはただの言語Cの働き方です。 何が間違っていないので、それで、このプログラムのように感じている 罰金、私はちょうどハードリターン0でコーディング。 しかし、対照的に、私は擬似コードでこれを書くつもりだ 私たちは靴下をしたときに、今、多くのヨセフのようでした たとえば先週。 何かが間違っていた場合 - これは実際のコードではありません - 行きました 間違った、その後、としましょう​​、1を返します。 そうでなければ0を返す。 だから、これは私たちがこれを行っているところです。 これはただの擬似コード実際のCコードではありません。 しかし、これはあなたが返す可能性がありますどのように 別の可能な値。 しかし、今の私はちょうど先に行くと0を返すつもりです。 すべての権利は​​、これまでの構文についてのご質問、機能性、 または好きですか? ええ、戻ってインチ 読者:[聞こえない] DAVIDマラン:あなたは大声で少し話すことはできますか? なぜ、このプログラムの戻り0をやった、と? 読者:[聞こえない] DAVIDマラン:ああ、私は申し訳ありませんが、怠け者だからよ。 いいえ良い学術応答は、0を返しません。 私は、メインの場合、技術的にはCを言って、これを救う一種の缶 明示的に値を返さない場合は、0が返されます 自動的にあなたのために。 trueに設定された、私はちょうど隠蔽していない。 しかし、私はこの方法でそれをやるべきだったのに。 私のミス以外のことよりも興味深い持ち帰りません。 うん? 読者:通常、あなたがvoidで入力し、あなたを意味 何かを返しません。 DAVIDマラン:正しい。 代わりにする場合は、のために、関数名の前に指定 次にここにインスタンスは、void、関数 何も返しません。 したがって、私はちょうど、すべてのリターン·オア·ナッシング、と言うでしょう それは一致するであろう。 そして、我々はそれに戻ってくる。 そして、ちょうど参考、学習と漁獲量の1 何百冊という本を持っている世界でのプログラミングと そこのウェブサイトの数百人は、常に意志である 別のブック内の別の構文を参照してください さまざまな人々によって。 私達はであることがセクションと講義で最善を尽くします実現 一貫性のある。 しかし、ときには相反する構文が表示されます。 だから、いつでも疑問がある場合は、ちょうど質問。 そして一般的に、我々は、講義やセクションに気をつけましょう ほぼ常に正しい方法でそれを提示。 ポイントの場合ので、私は、ほとんど常に言う。 その他の質問は? 読者:%sはアプライアンスの外側に存在していますか? DAVIDマラン:%sは、アプライアンスの外に存在していますか? はい。 %だからsはCで、私たちがそれを使用しているという事実を行う必要があります アプライアンスでは、根本的にとは何の関係もない 我々が使っている言語の特徴。 確かに、先週私たちは私のMacを使用したとき、私が書いた 私のMac上のCコード。 私は私のMac上で%sを使用することもできました、そして、あなたはそれを上に使用することができます Windowsコンピュータを使用すると、コンパイラをインストールした場合、のような MicrosoftのVisual Studioの。 だから%sです。 私たちは今日、このウィンドウの内側にやっているすべてのものを起動する必要があります とは何℃​​、根本的に何もない状態で行う 問題になっているオペレーティング·システムに依存します。 これとは対照的に、黒と白のターミナルウィンドウ - 時 私は、lsのようなもの、とrm、CDを入力している - オペレーティングシステムに関係していることと 周りにナビゲートします。 うん。 読者:私は、CS50ライブラリをライブラリを意味しました。 DAVIDマラン:何だよ、キーワード文字列を意味する場合、その 唯一の正しい、CS50ライブラリに存在します。 つまり、C言語自体には存在しませんし、実際にカップルで 週間の我々は、CS50ライブラリを捨てて起動します いわば、スクラッチから自分自身のことをやって。 その他の質問は? うん。 読者:[聞こえない] DAVIDマラン:良い質問です。 コマンドは大文字と小文字が区別されます? そして、私はここで区別をしてみましょう。 だからコマンドは、一般的に我々は書こうと思いますものです ターミナルウィンドウで、ウィンドウの下部、。 ここまで何も文やCのコードになります。 しかし、どちらの場合も、答えは同じですが、はい。 どちらの環境でも、上部のCコードと で、オペレーティングシステムのコマンドライン 底は、大文字と小文字が区別されます。 ですから、資本GでGetStringを活用する必要があり 資本S.は、あなたはすべて小文字でprintfを書き込む必要があります。 あなたは、すべて小文字でlsを入力する必要があります。 今学期は、ほとんどすべての状況でそう、この事件は、遺言で 事実、問題。 はい。 読者:[聞こえない] DAVIDマラン:ああ、そう大丈夫、我々はファイルを持っていた場合はどうでしょう hello.dファイルと呼ばれる。 だからDはプログラミング言語であると判明。 それで、いくつかのケースでは、我々は実際にプログラムを書くことができます そのファイル、およびその方法でそれをコンパイルしている。 我々は、実際に、短い答えは、私は知らないことができます。 だから我々はこれをやろうとしている。 私が先に行くと、新しいファイルを作成してみましょう。 そして、ここでスピンは、正直一般的には、いつ何の疑いもある 今学期、そしてあなたのアプライアンスまたはコンピュータを持っている 開いて、先に行くと何かを試してみてください。 だから私はhello.dファイルと呼ばれるファイルを保存するつもりです。 これを保存します。 そして、私は入力こんにちはmakeを実行するつもりです。 これは、Cは、よりありそうだったことを推測するに見えた この場合は、dより。 その他の質問。 うん。 読者:[聞こえない] DAVIDマラン:オーケー、もう一度それを言う。 読者:[聞こえない] DAVIDマラン:あなたはどのようにそれを診断するか、行くか トラブルシューティングのか? 彼らは、さまざまな言語だから、だからたぶん、 おそらくあなたは完全になるだろう 別のプログラムが出力される。 あなたは完全に別のエラーメッセージを取得することになります。 また、単にデザインの面で、それは間違いなくなる 異なる2を書くことに貧弱な設計の決定 ほぼ同じ名前のファイルがある言語で 使用して正確な同じディレクトリ、 makeに似た自動ツール。 だから私はまた押し戻すとこれをやって15年で言うことができ、 そのミスを犯したことはありません。 起こる可能性があります。 しかし、私が思うに、単に様々あり 代わりに物流防御。 その結果として起きるだろうPlusのエラー·メッセージ、 最終的には問題が何であるかを明らかにする。 しかし、使用可能なコーナーケース。 すべての権利なので、他のだけのカップルをご紹介してみましょう 機能は今ここに、私たちは複数に構築を開始することができます と、より複雑なプログラム。 だから、まず第一に、数学。 だから数学の例では、最初の週に簡単だけの種類があります。 これは、すべてのプログラミングについてですと言っているわけではない 数学。 確かに、様々な機能を理解する 数学、特に代数であり、 ここに非常に関連する。 より高いレベルのCSクラス、線形代数では、 歯石など。 しかし、実現する私たちは、この学期をやることのほとんどが減少しない 本当に数学、確かではない算術に、それ自体が、これらに ただロジックへと慎重な思考に。 それで、計算機科学は、長い間、このリンケージを持っていたこと、 特に高校レベルで、数学であり、 少し紛らわしい。 私たちは本当に、書こうと思いますしたプログラムのほとんどは、あるので という問題を解決する上で、より高いレベルとフォーカスの並べ替え、 確かに、いくつかの加算、減算、およびさまざまなを使用するかもしれない 数式等 一日の終わりに、それはないと考えについてです ちょうどあなたが、TIのように行っているかもしれないものを実装 高校の電卓。 だから今はこれらを使って何かをしてみましょう、そうは言っても 我々は旅行することができるように存在しない算術演算子 プログラミングの基礎側面のいくつか、またはでオーバー このケースCだからCS50ライブラリが示唆したように、ありますが、 今日我々は唯一のGetStringメソッドを使用している - と一瞬にして おそらく1つの他の機能 - しかし、コンピュータ内のさまざまなデータ型があります。 一日の終わりには、コンピュータは0と1だけを知っています。 しかし、先週、我々はバイナリシステムについて話しましたことを思い出してください 数値を表現する際に、数字の0、1、2、のような ネイトのビデオのように、最大​​8、上のすべての方法。 そして、我々は我々のように、はるかに高いカウントすることができます ここでステージの上でした。 しかし、あなたは数字が、文字だけではなく、表現したい場合は、 我々、人間は、いくつかの任意の思い付くする必要があります 規則、それによって一日の終わりにあればすべて私のコンピュータ よく我々がより良いだろうが、0と1を表現する能力であるた 表す0と1のパターンを標準化開始 別物。 文字を表す0と1のパターン。 文字Zを表す0と1のパターン。 青色を表すか、または0と1のパターン 赤、等。 私達は私達自身を表現するために、これらの0と1のすべてを使用する必要 れていない別の方法で異なった文脈、 必ずしも数値。 だから、表現の面では、Cは、異なるデータ型を持っている そして我々はこれまでのところ、これらのいずれかを見てきました。 我々は、画面上にはないものをint型、予告を見た 現在の文字列です。 文字列は、実際には、再びCに存在しない、それはだ 我々が最初に提示してい簡素化 数週間。 char型は、個々の文字です。 浮動小数点と数字にして、実数で 左とその右。 ダブルバックの前に背景とのそれらのために、何ですか? だから二重は二度何かである。 はるかに精度の倍が追加されます。 だから、これは何を意味するのですか? だから、これらの各ケースでは、世界は、標準化のようなものを持って どのように多くのビットが表すために使用され これらの事のそれぞれ。 あなたは、一部はすでにネイトのASCIIビデオを見てきたので、もし PSET 0のか、今週後半には、あなたはおそらく知っているよう そのASCII - 文字表現 - どのように多くのビットを使用するのか? そしてあなたも、私達のデモから方法の最後の週を覚えているかもしれません 多くの人がステージ上にあった。 通常は、7または8だから。 一般的には8だから、延長と呼ばれるものがあるように感じる すべての8ビットを使用し、ASCIIの代わりに、7。 しかし、一般的に、我々は、したがって、この場合には、2の累乗で8話。 だからプログラミング言語のcharは通常8ビットである。 だからint型は、一般的に32ビットです。 フロートは、一般的に32ビットです。 ダブルは、一般的に64ビットです。 そして、それは何を意味するのか? それはあなたがより大きな数を表すことができることを意味したり、場合に 実数は、後に、より多くの番号を持つことができます 小数点以下の桁数。 その場合にはより多くの精度。 今、長い長い、残念ながら名前が付けられています。 だから、32ビットであるintはそこだ。 、いや、32ビットである長いがあります。 と64ビットである長い長い。 しかしそれらのいくつかは、コンテキストと小文字が区別され、それは依存 あなたが持っているコンピュータの種類。 だから一般的に、我々は、宿題やクイズで指定するであろう時 それは実際に問題になります。 しかし、ポイントは、これらの異なったのすべてがそこです ここに表現。 それでは、実際にプログラムに飛び込むことができます。 最初から、このいずれかを書き込むのではなく、私は先に行かせて そして、今日のソースコードから開く - となっているすべての オンライン - あなたがオンライン周りいじくりたい場合は、またはで返す お使いのコンピュータ上のアプライアンスと水曜日、指示 対象はもちろんのホームページにリンクします。 ここに超簡単なプログラムです。 しかし、それは上部に新たな少し何かを持っていること 我々の前に持っていませんでした。 テキストの青い線の全体の多く。 そこで、これらの青い線は、コメントを表す。 だから、書くことができるようにするプログラムの中で非常に便利です 自分自身に、または同僚や友人に、またはいくつかのコメント ティーチングフェローは、その種の中で何が起こっているかを説明します このファイルが、Cコード自体とは何の関係もない。 、それだけで機能的にプログラムとは何の関係もないです 美学。 だから、C言語でこれを行う方法は、一般的に開始であるあなた / *とコメントし、あなたのコメントで終わら * /。 そして、あなたは本当に肛門や写真のようなものを描くのが好きなら、 その後、星の全体の多くを置くところでは、作ると思います このような小さな箱。 その事項のどれもありません。 唯一の問題は、非常に最初のものです そして非常に最後。 これは複数行コメントと呼ばれるものです。 そして、それはしばしば、星やボックスを行うにはちょうど人間の慣習です このように、物事は、無料で多くの時間を持っている場合。 あなたには、いくつかのコメントに書いた後にそう、一般的に、来る プログラムの実際根性。 ここでは、#を含む我々の身近なのです。 そして、ちょうど速い、これは必要では必要であるか? 読者:必要。 DAVIDマラン:だからそれが実際に必要はありません。 では、なぜ、しかし、それは必要ないですか? だから何のprintfはありません。 確かに。 我々はこのプログラムでやっていることは数学である。 だから私は実際にそれを削除することができます。 だから、常にでは何も記述する必要はありません プログラムの先頭。 だから、このビットを簡素化してみましょう。 そして今、このプログラムが何をするのかがわかります。 あまり興味のある。 int型のX = 1。 さて、これは何をやっている? さて、以前から精神的なモデルに戻って考える。 この式の左辺は何をするのでしょうか? 整数のためのスペースを作成します。 それでは、どのくらいのスペース? まあ、我々はそれが32ビットだと今では知っているに起こる。 以前は、文字列には、技術的には32ビットでしたが、より多くの 将来的にはその上に。 しかし、int型は32ビットです。 ここで左のように、この式は、intはxだけちょっと言う オペレーティングシステム、私のRAM、32ビットを与える - そうでなければ、RAMの4バイトとして知られている - 私はそのスペースに整数を置くことができるようにします。 あなたはどのような整数入れたいたのでしょうか? まあ、ただ1番。 int型のy 2を取得しますが、まったく同じことをやってもかかわらず 数字は、その大きさの点で、大きくなっています。 数自体はまだちょうど32ビットです。 それはに異なっているだけのビットのパターンです 1対2を表す。 int型zは今、私の別の32ビットを与えるそれZ呼び出し、およびput言う そこに1と2の合計。 だから今、zはおそらく値3を格納していること、 その後0を返す。 さて、このプログラムは、それは興味の何をするのでしょうか? だから、実際に任意の場所で、何も面白いことはしていません ある意味、理由はなぜですか?これは、いくつかの数学をやっている。 しかし、それは正しい答えを返すわけではありません。 これは、0を返している。 それは答えを印刷していないだ。 したがって、このプログラムはそれとして、基本的には無価値だ 今立っている。 それはいくつかの作業をやっている。 それがために、いくつかの秒数、またはマイクロ秒を取るつもりです 実行されますが、それは実際に何もしていない 人間に有用である。 それでは、実際に今、私は実際に私今Math2のを開いてみましょう 結果を印刷します。 ですから、これはあまりにも私たちの前の例から推測することができます。 私はいくつかの簡単な数学をやってみたい場合、int X = 1、Y = 2。 zは、1プラス2です。 これは明らかにプリントアウトするためには何が起こっている? わずか3。 だからクイックニティチェック。 私は、このディレクトリに移動しましょう​​。 CD source1mだから。 私が先に行くとMath2を作る入力してみましょう。 エラーメッセージが出てきたので、私が実行してみましょう - 私はMath2のを実行ファイルa.out-せない。入力します。 そして実際、それは3をプリントアウト。 さてのはこれの変形を見てみましょう。 math3.c、我々は今ここに、この例を持っています。 だから面白いのこの親切な。 そこでここでは、このいずれかで、答えは10で割った1を取得しようとしている、 そして私はそれをfloatとして宣言しています注意してください。 なぜ私はそれがフロートになりたいですか? まあ、それは分数です。 これは実数になるだろう。 このケースでは、10% - だからうまくいけば0.1、になるだろう。 そして、私はそれからプリントアウトするにはどうしたいですか? さて、この答え。 さて、これらは別に第一をいじめるしてみましょう。 だから左側に、宣言する フロート、それが答えと呼ぶ。 右側には、1を10で割っていること置けばいい 変数の内側に答える。 さて、このラインがもう少し不可解に見える。 しかし、いくつかの馴染みの機能に注目してください。 %が来るここでいう プレースホルダ。 ここでfは浮動小数点値は、本物であることを意味します 数値は、小数点を使用して何か。 0.2は何を意味する? 誰もが過去の経験から知っていますか? 小数点以下。 だから我々は前にこれを見ていませんでしたが、それだけの方法だ もう少しのprintfの制御とを行使 小数点の後に私に30点を与えていないと言って、 代わりに私にちょうど2を与える。 そして、先に進み、これを実行してみましょう。 だから数学3を作り、今入力して、私は数学3を実行してみましょう。 そして、それは正しくありません。 我々は最初の本物のバグが発生しているように見える。 まあ、多分私はちょうど十分に近い見ていないよ。 だから私はここに行くと、私は20進数を入れさせましょう そこにポイントの場所。 して実行すると、math3を作る、私はこれをコンパイルしてみましょう。 かなり確信して10で割った1が0ではありません。 だから何が起こっているのですか? まあ大丈夫なので、実際にはこれに関係していません。 それはいい考えだ。 これは本当にただの偶然です 我々はこれをやっている。 しかし、ただ、これはそれではないことを証明するために、私はよ ランダムな何かを返す。 それだけで間違っているので、自宅でこれを実行しないでください。 しかしmath3を作る、私はそれを実行してみましょう。 だから私は戻っているものとは何の関係もない、だけ行う必要があります 私が印刷しているものである。 しかし、私はここでそれをダウンして聞いた。 何ですか? 読者:だから我々に数値を記述する必要があります 部門として - DAVIDマラン:オーケー良い。 だから我々はに参加している番号を記述する必要があります 浮動小数点除算のようにここでは、自分自身を大切にしています。 だから、ここでの問題は、前のようになります多くの場合と同様、C、 言語は、異なるデータ型を持っています。 そして、それらのデータ·タイプは、例えば、これらはここにある。 そしてここで、私は1を入力したときに、それから私の質問内のデータ·タイプ 10型は、おそらくどのようなデータ型ですか? だから、それはおそらく、int型、右ですか? 小数点以下がないので、それは間違いなくフロートではありません ポイントまたはそのような何か。 だから本当に、私はintで割ったint型を持っています。 だから数学とコンピュータの面白いところは、ということです - あなたは、整数を使って除算をやっている場合 1を10で割った、はい0.1です。 ただし、整数で整数を分割しているとき、 答えはまた、ちょうど、なぜなら今の整数でなければなりません。 と含意は次に何ですか? さて、答えは1を10で割っている場合は、0.1に等しいものを コンピュータが何をしようとしている私はどのようにないアイデアを持っているされていません 0.1、浮動小数点値だからではなく、表現する 整数、それは後のすべてを切り落とすために起こっている 小数点とちょうどあなたに初めに0を示しています。 そして、それは浮動小数点として印字いるという事実 値は、それだけで美的なことだ。 私は、これを印刷するには、コンピュータを強制しているからだ 浮動小数点値。 そして実際に私はfloatとしてそれを宣言したが、数学です こっちに起こって。 だから私は、実際には1つの非常に簡単な方法でこれを修正しましょう​​。 なぜ私だけが、10.0と1.0を実行しない 技術的には私はちょうどそれらのいずれかを実行することで逃げることができます。 今私は先に行くとmath3を作ってみましょう。 私が先に行くと今math3を実行し、入力してみましょう。 そして今、ああ。 今、私たちはまったく新しい問題を抱えている。 だから、右良い、我々は、0.1に近いだが、明ら​​かに何か ここで間違って? しない限り、我々は正しい、何年もあなたに嘘をついてきた? 1 10で割った値は、実際には非常に0.1ではないので、何 本当にここで起こって? さてあなたはこれを通じて理由の種類は、論理的にすることができます。 コンピュータのみ開始するRAMの有限量を持っている場合 と、確かにだけのために32ビットを使用しているコンピュータ 浮動小数点値は、であることが理にかなっている ビットの数は有限、この場合の32は、はい、次の操作を実行できます たくさんのものを表しています。 これは、実際40億異なる値があることです 32ビット、32から2で表されるが、それはまだ有限だ。 だから問題は、本当の無限の数があるのです 数字、右。 あなたは私の本当の番号を指定した場合、私はいつもあなたのものを見つけることができる だけを調整して、やや少ない、わずかに大きい 小数点の後にある数字。 あなたはビットの数が無限であることを持っていないのであれば、あなた 場合によっては無限を表すことができません 実数の数。 だから、コンピュータのこの本質的な不正確さはそこだし、 これは偶数の最も簡単でいつもつまずいれる このようなプログラム。 しかし、また、いくつかの非常に現実世界の問題だけでなく。 実際には、のがちょうど見てみるために時間を割いてみましょう 実際に現実に起こった何か。 私たちはわずか数分の最初のカップルを見て、次によ 我々はリンクをオンラインに投稿します。 しかし、これはかなり、間違って行くことができるだけで何を証明するものです 正直言って、これらのものはありません非常に悲劇的なやり方で 感謝またはそれに来るとき、ちょうど私たち人間は間違いを犯す 現代のコンピュータの実装の詳細は、これらの種類の。 [ビデオの再生] - 我々は今、現代の驚異でエンジニアリング災害に戻ります。 コンピュータ。 我々は、すべてしばしばフラストレーションの問題を受け入れるようになってきた それは彼らと一緒に行く。 バグ、ウイルス、ソフトウェアの不具合は小〜価格です 利便性のために支払う。 しかし、ハイテク、高速軍事と空間の プログラム·アプリケーションは、最小の問題は、することができます 災​​害に拡大された。 1996年6月4日には、科学者たちは、無人を起動する準備 アリアン5ロケット。 それはように設計科学衛星を運んでいた どのように地球の磁場は、正確に証明 太陽風と相互作用する。 ロケットは、欧州宇宙機関(ESA)のために建てられたと フランスのガイアナの海岸に位置し、施設からリフトオフ。 一時約37秒程度で飛行中に、それら 気付いた事は、ノズルがあったこと、間違ったつもりだった 彼らが本当にすべきでないようにして旋回。 明らかに飛行中に約40秒間、車両 困っていた、と彼らは決断をしたときだ それを破壊する。 押された途方もない勇気を持つ範囲の安全担当 それはなるかもしれない前にボタンを押すと、ロケットを爆破 公共の安全に危険。 - これは、アリアン5の処女航海であり、その 破壊がために埋め込まれた欠陥の場所を取った ロケットのソフトウェア。 ·アリアンで問題はその数があったということでした 表現するために64ビットを必要とし、彼らはそれを変換したい 16ビットの数値。 彼らは数がなかったと仮定 、非常に大きなものとしよう 64ビット数でこれらの数字のほとんどが0であったこと。 彼らは間違っていた。 オールインワンのソフトウェアプログラムの無力が受け入れ 別によって生成された番号の種類はのルートであった 障害が発生しました。 ソフトウェア開発は、非常に高価な部分になっていた 新技術。 アリアン4ロケットは非常に成功していた。 それのために作成したソフトウェアのそんなにも使用した アリアン5インチ - 基本的な問題は、アリアン5が速かったということでした 速く加速した。 およびソフトウェアは、その占めていなかった。 ロケットの破壊は巨大な金融であった 災​​害時、分、ソフトウェアのエラーが発生したため、すべて。 しかし、これはデータ変換の問題がありました初めてではありませんでした 現代のロケット技術を苦しめ。 DAVIDマラン:我々は、その時点でそれを残しておきます。 しかし、これはどれだけあっても適用可能ないくつかの証明するものです 私たちが始めたことが、これらの最下位レベルの詳細 アール今日探る。 そうであってもあなたはいくつかのことで、おそらく少し気が紛れるように 構文とここarcanenessは、実現すること以上 この用語は、我々はちょうどこのにどの程度適用されるに焦点を当てたことでしょう 遠くのCSを超えた世界。 私たちは、水曜日にお会いしましょう​​。