[Powered by Google Translate] デイヴィッドJ.マラン:全ての権利は​​、これはCS50であり、これは 1週目の終わりには、とても勉強カードがでており、数の合計 あなたが今年持っているクラスメートは745です。 そして、我々はそうもちろん、あなたのように多くを持って興奮している この学期が、このコースは非常に大きいにもかかわらず、 それは次のように、金曜日のランチのようなこれらの事だと気付く 営業時間は、15人のセクションなど、その 本当にこれは、より親密な作成するために意図されている 環境。 だから我々はここで、週に1,2回集まるかもしれませんが サンダースは、このコースでは、あなたの経験の多くは知っている 非常にあなたのクラスメートと一緒にハンズオンになります と教員。 そこでここでは、2012年秋、行く。 だから我々の注意に終了し、その最後の時間を思い出す 数の表現について話して不正確、。 そして、我々はで、何が起こった障害のいずれかを見 それは誤解に来た本当の世界では、 どのようにコンピュータが動作します。 さて、今日我々は次のようにそれらのアイデアの別のものを再訪します 同様CS50クライアントの我々の議論を続ける とCをどのように処理し、プログラムに本当に意味する。 しかし、最初に、旋風のアナウンスだけのカップル。 のセクションでは、この日曜日始まり、最初の週は、常に ラピッドスタートのビット、我々だけになったので あなたのセクションを形成する。 我々は今、教育の仲間と、今では、同じことをやっている 彼らは自分のスケジュールを知っていること、によって、我々が目指しているので、 土曜日の朝、あなたのセクションであなたをフォローアップするために 割り当ておよびTF。 彼らは翌日から始めましょうことを認識し、日曜日 または月曜日か火曜日。 彼らが発生するようにし、我々はセクションの変更にも対応します 日に来ています。 オフィスの営業時間は、一方で、11から8時、再び、今夜アール アネンバーグならびに明日の夜。 問題セットは、一般的に木曜日に起因しているにもかかわらず、 正午に、過ごすためにあなたが5後期日まで持って実現する、 木曜日の営業時間故に可用性場合 あなたはそれらの後半の日のいずれかで、現金と、それによって、提出 金曜日に何か。 私の中で、スクラッチがもっと楽しく間にあることを示唆してみよう もっと低いキー問題セット。 そして私はちょうど、戦略的に、それらの後半の日にしがみつこう 人生は邪魔に起動したとき以降の学期のための 中間試験および他のクラスと一緒。 問題は1を設定し、その間、コースの上に掲示される ホームページ今週の金曜日、もちろん徒歩になりますように ビデオを通して、これらは金曜日に午後2時30分撮影され そして次の日までにオンラインで掲示。 だから我々は月曜日に終了しました。 実際に、自分がここに注意 - 私がしたいと思います。 なぜならクラス - サンダースは正確に向いていないので、 自体カジュアルなQ&Aに戻って行ったり来たりひどくよく、我々はしている これにより、今年はほとんど何か新しいことをしようとするつもり あなたは自分の手を上げ快適じゃないか、あれば むしろ、このような部屋の中に手を上げない 我々は、指導員とCAのいくつかを持っているつもりです 講義中cs50.net/discussを配乗。 だから私は完全だったので、ご質問がある場合は 何か、については不明ではいくつかのは、興味を持っている トピックでは、そこにそれを投稿してみて。 講義のラベルでタグ付け、そして我々は最善を尽くします 今日と来週 - we'llこれを試してみる - それをフィールドへ どちら電子的に、オンラインで、または場合、それは我々があるべきであるように感じている 本当に、一斉指導の仲間の​​一つをそれに対処または CAの中には、手を上げて聞いてきます あなたに代わって匿名で。 だから我々はこれを試してみて、どれだけこの作品を見てみるよ。 しかし、すべての手段によって、あなたが希望として手を上げ続けています。 我々は10%以上10分の1ではなく、であることを明らかにしたので、最後の時間 あなたは何年も前に教えられたように実際、0.1、。 それは、実際にこのような値です。 しかし、それは右、完全に真実ではないですか? 我々は、ちょうどあなたの場合、それによってコンピュータにこの制約を持っている のみ有限のメモリの量、RAMまたはそれ以上を持っている 特にビットは、まあ、有限数だけあり 物事には表すことができます。 例えば、我々は数字のゼロを持って、私たちがしたい場合は どこビット、8ビットを使用して、バイナリで表す 再び、0または1であり、我々は可能性がある 00000000としてそれを表しています。 そして、それは少し不必要に冗長です。 ただ、現実の世界では十進法で好き 一般的には、番号123を作成したければ、 人間はおそらく、たとえ00000123を書いてはいけません 機能的には、それはまったく同じ数字です。 我々だけで、いわば先行ゼロをドロップします。 バイナリでは、同じことを行うことができます。 バイナリデータとゼロ、ゼロ、バイナリだけでゼロになります。 あなただけの単一のビットを必要としています。 しかし、再び、世界のメジャーの最も一般的なユニット コンピューティングのバイト、8ビットである。 という理由だけで1ビット、全く使い物にならないわ。 8ビット、ひどく有用ではありませんが、少なくともそれは、さらに メジャーの単一ユニットより便利。 だから8ビットで、当社は通常、バイナリを表現します。 そこでここでは、のように、その後の数字がゼロ、1つ、2つを持っており、 ネイトは先週の水曜日、私たちのビデオでやった、我々は継続することができ 8に、7までカウントアップ。 そして、我々はより多くのビットを使用する場合、我々 無限まで数えることが出来る。 あなたが唯一のこれらのビットの有限数を持っている場合でも、そのままで 任意のコンピュータ·システムの場合、あるいはミサイル システムは、まあ、確かにあなただけの持っている 精度の有限な量。 あなたにも、0.1のように数字を表現したいのであれば、 コンピュータがピックアップして選択する必要があります。 それだけで、それができる数の有限数を持っている場合 表し、それはあなたのために0.1に近い来ることができますが、それはできません 必ずしもあなたが望むことを正確に値を与える。 そして、これは、単にコンピュータの課題の一つである ボンネットの下に、ありがたい。 私たちは学期に遠くに移動すると、これらの下位レベル 詳細はあまり興味深いものとなるが、確かに これらのアイデアのアプリケーションは、いくつかの非常に現実の世界を持つことができます 影響。 一つは、少し楽しいです。 どのようにあなたがたの多くは、驚くべき映画のオフィススペースを見てきました? あなたがいない場合、それはあなたの非公式だ 今週の宿題。 しかし、オフィススペースで、その映画の中でフェローがかかる まさにこの考え方の利点が、実際には盗んだ それはあなたが持つかもしれないことを別のムービーから 何年も前に見た。 だから私はあなたにこのトレーラーの数秒からを与えることができます この素晴らしい映画を、これは非常によく似ている 学問的に関連する。 [ムービーを再生] 実際に私が推進されています。 私はそれをリッピングするウイルスをプログラムすることができます 大きな時間をオフに置きます。 まあ、それはどのように動作しますか? 関心がある銀行取引があるたびに 計算された、何千もの日があると、コンピュータが終わる セントのこれらの画分である。 しかし、私は違法何もするつもりはない。 違法?サミールは、これはアメリカです。 あなたは神に誓ってしなければならない。 誰もがこのことについて知りませんが、私たちの場合は、すべての権利?いいえ、家族があってはなりません。 恋人、誰も。 [聞こえない]。 男は、私はどちらか誰も教えてくれません、心配しないでください。 [ムービー即決] すべての権利なので、多分私はほとんどよりもこの映画良い発見 彼らがいたことをここの人々が、どのような場合でも、ウイルス 作成しようとしている - そして映画の中で、いつでも、彼らは、何かウイルスと呼んでおきます それは実際には一般的にウイルスはありません。 それはちょうど、誰かが何かを書いたプログラムです。 この場合には、みんながプログラムを作成しようとした それは、イノテックのと呼ばれる彼らの会社を利用しました コンピューティングシステムは、あまりにもそれによってコンピュータは、場合でも、それ することはできません必ずしも、お金になる 正確に金額を表す。 ですから、あなたの銀行口座に$ 0.10を持っている場合でも、 0.10、まあ、コンピュータが実際にあなたが持っていると思うかもしれません あなたの銀行口座にこれだけ多くのセント。 それで、これらの人がやることを夢見ていたもの - そして、彼ら アイデアを盗んだ、それはどこに、スーパーマンIIIから判明 リチャード·プライヤーは、同じ事をした - 彼らは本質的にあった 後続のすべてを取ることを熱望する書き込みプログラム 数字の小さな小さな、小さな画分のすべて ペニー、その人間はちょうどので、それらをオフに吸い上げる 思考は、ああ、それはそこだけ0.10ドルだが、それらのすべて 末尾の数字は最終的に追加します。 素晴らしいアイデアは、だから、それが裏目に出たという点で、陽気に 特定のフィルム。 しかし、現実の世界でも、多くの関係がある 物事のこれらの種類の影響。 と理由の一つは、コンピュータの分野に飛び込む 科学は、再びではなく、への適用である エンジニアリング科学単独で、ただへ 他の分野と同様。 だから、これは間違って行くことができるかではあまり気軽な外観です​​が、 それがに来るとき、それは、私が思うに、また、非常にアイ開口の 正確にどのように遍在する技術のような理解 コンピュータやプログラミングや、これらの日、 ソフトウェアの形である。 だから、これの次のクリップは、わずか6分程度で続けて 我々は最後の時間をオフのままにしますが、私たちは少し検索することができますどこに これらの問題のような1つの深さでより。 私は、我々が去ったところまで進んでみましょう、 これは、右ここにあった。 そして、我々はここで6分程度、2の第2部を持っています。 [ムービーを再生] 現代のロケット技術を苦しめ。 1991年、第一次湾岸戦争の開始とともに、パトリオット ミサイルは似たような種類のを経験した 数値変換の問題。 その結果として、20人、20人の米兵が殺された 負傷者は約100人、ときになっていたパトリオット、 着信スカッドから守るために、 ミサイルを発射することができませんでした。 イラクがクウェートに侵攻し、アメリカは砂漠を進水させたとき 早い1991年に嵐、パトリオットミサイルのバッテリーはあった イラクからサウジアラビア、イスラエルを守るために配備され スカッドミサイル攻撃。 パトリオットは、米国の中​​距離地対空システムです レイセオン社製。 パトリオット迎撃機自体の大きさは、それについてです 約20フィートの長い、それは約2000ポンドの重量を量る。 そして、それは程度の弾頭を運ぶ - 私はそれが大体だと思う 150ポンド。 そして弾頭自体が持つ高性能爆薬である その周りの断片。 弾頭のケーシングは、散弾のように機能するように設計されています。 ミサイルはコンテナごとに4つを搭載し、アールアール セミトレーラーで輸送されます。 パトリオットミサイル防衛システムは、少なくともまでさかのぼり 現在20歳。 それはもともとの防空ミサイルとして設計されました 第一次湾岸戦争では、敵の飛行機を撃墜する。 戦争が一緒に来たとき、軍隊は撃つためにそれを使用したい スカッドはなく、飛行機ダウン。 エアイラク空軍はあまり問題ではありませんでしたが、陸軍 スカッドを心配していた。 そして彼らは愛国をアップグレードしようとした。 マッハ5で移動して敵のミサイルが起こっていたインターセプト 十分に挑戦することができます。 しかし、パトリオットをサービスに連れて行かれました、陸軍 自分を作ったイラクの変更を認識していなかった ヒットするのはほとんど不可能スカッド。 何が起きたことはあったスカッドです 入ってくると、不安定であった。 彼らはウォブリングされた。 この理由は、600を取得するために、イラク人であった 300キロ範囲ミサイルのキロアウトは、かかった フロント弾頭の重量と外 軽い弾頭を作った。 だから今、愛国者はスカッドで来るようにしようと、ほとんどのだ 時間、時間の圧倒的多数は、それがでしょう ちょうどスカッドで飛ぶ。 パトリオット·システムオペレータは、パトリオットを実現したら そのターゲットを逃したが、彼らは愛国者の弾頭を爆発させた。 可能な死傷を回避するために、許可された 地面に落下する。 それは、空に大きな火の玉のように、ほとんどの人が見たものだった とスカッドの弾頭のインターセプトと誤解。 夜空に、愛国者であるように見えたが、 首尾よく破壊されたスカッドは、ダーランで、何があるかもしれない そのパフォーマンスについて間違い。 そこでは、パトリオットのレーダーシステムが見失ってしまった スカッド着信および起因打ち上げたことがない ソフトウェアの欠陥に。 それは最初になったことを発見したイスラエル人だった システムは、大きな時間のずれがなっていた システムのコンピュータに埋め込まれたクロックに起因する。 ダーランの悲劇の前に約2週間、 イスラエル人はその国防総省に報告 システムは時間を失っていた。 実行中の約8時間後、彼らは気づいた システムが著しく少ない正確​​になっていた。 国防省のすべてを伝えることで対応 パトリオット電池はシステムを残さないようにすること 長い時間のために。 8時間、10 - 彼らは長い時間が何であったか言わなかった 時間、1,000時間。 誰も知りませんでした。 ダーランで兵舎に駐屯パトリオットバッテリー その欠陥の内部クロックはオン100時間以上にしていた 2月25日の夜。 それは10分の1秒程度の精度で時間を追跡した。 今では10分の1秒は面白い数であるため、 それはつまり、正確には、バイナリで表現することはできません それは、任意で正確に表現することはできません 現代のデジタルコンピュータ。 それは信じがたい。 しかし、例として、これを使用しています。 のは、ナンバーワンの三分の一を見てみましょう。 三分の一が正確に、10進数で表記することはできません。 三分の一が、0.333は無限大のために起こっている。 小数点以下の絶対精度でそれを行う方法はありません。 それはまさにで起こった問題と同じようなものだ パトリオット。 もはやシステムが走り、悪化時エラーになりました。 操作100時間の後、時間の誤差があっただけ 第二の約3分の1。 しかし、マッハ5で走行ミサイルを標的にするという点で、 それは、600メートル以上のトラッキングエラーが発生しました。 それは、ダーランで兵士のための致命的なエラーになります。 何が起こったのはスカッドの発射では、早期警戒によって検出されました 衛星と彼らはスカッドが自分に来ていたことを知っていた 一般的な方向。 彼らはそれが来ていたどこにいるのかわからなかった。 それは、パトリオットのレーダー部品に今まであった のトラックを見つけ、維持するためのシステム、ダーランを擁護し、 入ってくる敵ミサイル。 レーダーはとてもかっこよかったです。 あなたが実際にスカッドの位置を追跡してからでしょう それはおそらく、次回であろう場所を予測 レーダーはパルスを送った。 その範囲は、ゲートと呼ばれていました。 その後、一度パトリオットは十分な時間が経過して行くことに決定 背中と検出これについては、次の場所を確認 オブジェクトは、それはさかのぼる。 だから、それは間違った場所に戻ったとき、それはその後全く見ない オブジェクト、そしてそれはどんなオブジェクトにも存在しなかったと判断します。 それは誤検出だったとトラックをドロップします。 着信スカッドはレーダー画面から姿を消した。 そして数秒後には、兵舎に突っ込んだ。スカッドミサイル 28人が死亡し、中に発射最後の一つだった 第一次湾岸戦争。 悲劇的に、更新されたソフトウェアは、ダーランに到着 次の日。 およびソフトウェアの欠陥が1つの章を閉じ、固定されていた パトリオット·ミサイルの問題を抱えた歴史。 愛国者は実際には "フェーズドアレイトラッキングのための頭字語である ターゲットの切片。 " はなく、かなりのすべての権利は​​、そんなに多く哀しい結末 この世界を理解する。 と持ち帰りは、本当に、フィルムからのものであることを解 あなたのミサイル防衛システムが再起動されました たまにインチ それで再び、このコースの目的の一つは、確かに これらのアプリケーションよりも謙虚な規模で、することです あなたが約行く方法を正確に本当にオープンみんなの目 製造機は、あなたは彼らが何をしたいか、あなたはどのように行く 道に沿って、それをやりながら、正しくそれをすることについて よく、エレガントなど。 それで今日は、これのより少しに飛び込むみましょうが、 我々は、より少ない特にそれらのために、速すぎて行かないように 我々が関心を保持できるように、また快適であるが、 それらをより快適に、ビットで始まるだけ速くしてみましょう これらのアイデアのいくつかの要約の。 あなたが持っている場合、もう一度、両方の人またはオンラインで、離れて頼む 質問私たちは同じページ上のすべての人を維持することができます。 だからCS50アプライアンス、バッククイックステップは、ある あなた自身の言葉で、何? あなたがそれらの言葉はまだかもしれないか見当がつかない場合には、これはOKです。 [聞こえない] さて、のための普遍的なインターフェイス - 我々はすべて共有することができます。 絶対に。 だから我々は、例えば、いくつかに行くように言うことができる ウェブサイトは、Mac OSのためのこのソフトウェアをダウンロードしてください。 に設定し、Windows用のこのソフトウェアをダウンロードする このようにしている。 しかし、現実には、我々は無数の技術的に実行され 問題をサポート。 サーバ側を行われていることの多く、また、これらの日、、 に来る場合は特に、コンピューティングの世界では、 Web開発とWebベースのアプリケーションは、実際には とは対照的に、かなり頻繁に、UNIXまたはLinuxコンピュータ上で行われ MacやWindowsパソコン。 だから五分五分の間で、その後、この事を使用するのではと呼ばれる CS50アプライアンスは、我々はすべて同じ環境があるでしょうです。 だから、皆が同じページにどのようなハードウェアあなたどんなにません でキャンパスに来ただけでなく、正確に手を染めされます あなたが向かって使用することがありますのと同じ環境 よくWeb開発のためのと同様、のように学期の終わり その現実世界のアプリケーションの将来。 だからもっと具体的に、CS50 Applianceはの自由な作品です あなたが別のオペレーティングシステムを実行することを可能にするソフトウェア、 Linuxでは、この場合には、自分のコンピュータ上で、ウィンドウに表示されます。 今、あなたはちょうどアプライアンスをダウンロードすることはできません。 アプライアンスを再生したり、実行するとプログラムが必要です。 およびソフトウェアのその部分は、一般に知られている ハイパーバイザ。 ハイパーバイザーは、VMwareのような製品の形で来る バーチャルボックスは、Parallels。 企業のすべての種類は、無料で両方、​​ソフトウェアを作る 同様に、商業。 あなたが問題に表示されます何セット1は、以下の方法についての説明があり フリーソフトウェアを入手しているのと CS50アプライアンスを実行します。 そして、一度、あなたは、お使いのMacまたはPC上のウィンドウで、必要があるでしょうか 非常にこのようになりますデスクトップ環境、どこ それは、[スタート]メニューのようなものを持ってい 左下隅。 それは左上に、ホームフォルダ、またはホームディレクトリを持ってい そこに、ごみ箱など。 だから我々は我々が行くように必要な詳細情報を離れていじめるよ。 しかし、今でに飛び込むことから始めましょう だからCは精神においてと同様に、このプログラミング言語です。 スクラッチが、はるかに少ないグラフィカルですが、皮肉なことに、遠く あなたがそれに精通し得れば、より強力。 だからCで、私達はある、ソースコードを記述することでプログラムを書く 靴下と同様に、この英語のような構文、 私たちはあなたのことが可能になり、前回やったデモンストレーション あれば、かなり正確に自分を表現する arcanely、コンピュータに接続します。 だから、実際に製品ソフトウェアの種類が必要なのでしょうか 当社に基づいて、Cのようなプログラミング言語でプログラムを記述する 月曜日に会話? [聞こえない] [OK]を、あなたはただのテキストエディタが必要です。 あなたは、特別なソフトウェアを必要としない それ自体がプログラムを書き込むことができます。 あなたはただ、Windows上では、メモ帳などのテキストエディタが必要です の世界ではMac上でテキストエディット、やgeditと呼ばれるもの、 我々がここで使うLinuxでは、。 そして、それはプログラムを書くことが、それだ。 しかし、書き込みは方程式の半分だけです。 その後、それらを実行する必要があります。 しかし、プログラムを実行するために - あなたは、ソースコードを実行することはできません。 代わりに、最初に何をしなければならない? うん。 デイヴィッドJ.マラン:あなたがする必要がある それをコンパイルします。 そして、他の誰かが、ソースコードをコンパイルすることを意味 - [聞こえない] デイヴィッドJ.マラン:その通りです。 ゼロとものにそれを翻訳します。 私たちのすべて、これらの日は、CPUを持つコンピュータを持っているので、 ほとんどインテルという会社によって作られてすべてが、と Intel Insideは、あなたのこの脳内があることを意味し CPUとして知られているコンピュータ。 そして、その脳がないことの一つは、それが知っている、ある 0と1のパターンを理解する方法について説明します。 これは、ビットのパターンが加算を表しているもの知っていること パターンは減算を示し、どのようなパターンの ビットは、印刷、可聴音を作成表す。 だから短い、CPUのオペレーティングシステムと相まって、 これは、CPUの上で動作するソフトウェアの一部です いわば。 一緒に、これらの2つの部分は、そのプログラムを実行する方法を知っている 私たち人間は書いている。 私はここCS50アプライアンスに入るのであれば、私は開く必要が テキストエディタ起動し、私はこれにアクセスすることができます いくつかの方法インチ 私はどちらかのメニューに行くことができ、プログラミング、 そして私は選択することができます - いや、しないと、そのメニュー。 私が開くにはここをアクセサリー/ geditのに行くことができます 私の小さなテキストエディタ。 あるいはもっと単純に、私が最後にこの小さなアイコンをクリックすることができます 左隅。 そして今、私はここに、この環境を手に入れよう。 だけで、それは、単純なテキストエディタのかなり思い起こさせる 1つまたは2つの違いがあります。 カーソルが点滅している今ではトップでは、これはどこにあるの 私は自分のコードを書き始めることができます。 底部には、ターミナルウィンドウと呼ばれるこの事である。 そして、私はこれで何物事の種類を行うことができます いわゆるターミナルウィンドウ? [聞こえない] わかりましたので、私は、コマンドを実行することになるでしょう。 そして、我々は月曜日に走ったコマンドのいくつかは少しあった 、最初は謎めいていますが、リストには、lsは、ディレクトリを変更するためのCD rmは、削除用。 だから、あなたをナビゲートする古い学校の道のようなものだ コンピュータには、お使いのキーボードとテキストコマンドを使用して、 はなく、一般的には、マウスを使用しています。 しかし、我々はずっと前に、表示されます、これは実際に私たちに与えます もう少しパワーとするともう少し精度 自分自身を表現しています。 そして、こっちに左に、私達はちょうど見ていくつもりですが、 我々は、ソフトウェアのほとんど要約を書き始めるように 我々は左上に書いているプログラム。 しかし、我々は長い前に再び表示されます。 そこでここではかなり単純な何かをしてみましょう。 私が最初に先に行くと、ファイルを保存するために行ってみよう、と私はちょうどよ 左の上に、ここjharvardをクリックしようと、 jharvardは、私は、もう一度、自分のホームフォルダの名前です 個人的なファイル、私、今あるジョン·ハーバード、あなたのすべてと 早くこの環境でジョン·ハーバードなります。 彼は、など、このホームディレクトリ、マイドキュメントとを持っている 私はインチ、今や、このファイルを保存したい だから私はそれがhello.c呼ぶつもりです。それから私は行くつもりです 先に、私はここに持っているものをすぐに保存]をクリックし、表示されるタブです そんなにエディタの別のタイプのように、hello.cという。 だから今、私が先に行くとプログラムを書き始めることができます。 int型のmain(void)を。 そして私はちょうど前回と、printfは、印刷がフォーマットのために、 ( "こんにちは、世界!" ); ほぼ完全。 しかし、私は細部のいくつかが欠けている。 何が私は本当にために必要とするこのプログラムから抜けている それは実際にコンパイルするには? うん。 [聞こえない]? デイヴィッドJ.マラン:ええ、私は標準を含める必要が I / Oライブラリ。 だから、メインの上に移動するには、このニーズは、私はちょうどに行くよ そこにそれのためのいくつかの部屋を作る。 そして、私は、Cランタイムライブラリの#includeするつもりです。 そしてそこに山括弧に気づく。 そして余談ですが、geditがあれば、少しユーザーフレンドリーです それはあなたを助けようとするという点で、時には少し混乱 目は何を使って何行まで気付く。 だから私のカーソルがこの角度のすぐ隣にあるという事実 ブラケット、それは他の傾斜を強調している様子がわかります ブラケットに加え、この1。 そして、それはちょうど実際に私の注意を引くためだと私は 対称性を持っています。 とプログラミングの対称性は、一般的に良いことです。 私は最後まで、私のカーソルを移動した場合も、気付く方法 中括弧は、ラインアップ、はい、私はオープンされているものを持っていることを示すために と、いわば1を閉じた。 すべての権利、私はもう一つのことを行うことができます。 それは言っても、厳密には必要ですが、良い方法はありません 0を返す。 とリターン0ここで私たちのために何をするのでしょうか? または何を意味する? [聞こえない] デイヴィッドJ.マラン:しかし、何が間違ってません。 はるかに間違って行くことに対して、率直に言ってそれは難しい この短いプログラムします。 だから、僕はすべてが順調であることを明示的にスーパーあるよ。 私は、人間は、私はこのプログラムを実行するときには、おそらくないでしょう その0を参照してください。 一般に、これらの数字はメインから返されていること ときだけ人間に自分の頭をもたげる 何かがうまくいかない。 そして、あなたは、システムエラー、1を言ってアップ少しポップを得る 2つ、3つ、または何でも数はということでした 実際に返されました。 これと他に何か問題だから? [聞こえない] デイヴィッドJ.マラン:だからこれはあまり機能的な間違いではありません しかし美的1。 私はおそらくそこで改行文字に置くべきである この文字列の最後に我々は実際にカーソルを移動されるように 次の行に、プログラムが少しだけきれいに見えます。 だから今、私は私の端末ウィンドウにダウン手放す と見るにはズームインして そしてここでこの事は、プロンプトと呼ばれています。 それはちょうど、私が誰jharvard @アプライアンス、場所を思い出させてくれている アプライアンスは、私が上にいるコンピュータの名前です。 括弧内にこのチルダ、波線記号は、ある 何を表す? 読者:ホームディレクトリ。 デイヴィッドJ.マラン:ホームディレクトリにコピーします。 だからそれはちょうどあなたがいると言うの簡略表記です すべてのファイルは、デフォルトで行くあなたの個人用フォルダ。 だから今、ここで、私はリストのlsを入力することができます。 そして私は、現時点ではここを参照してください唯一のものはhello.cです。 私はちょうどこれを書いたので、それは良いことだ。 だから私は先に行くとhello作るやってみましょう。 そして、私がhello.c makeと入力ないよ注意してください。 代わりに、私は唯一のハロー、ファイルのベース名を入力している。 とする、我々は月曜日に見たように、ちょうど私がしたいことを推測します cファイル。 だから今は、ハロー作る入力した。 今私はこのかなり長いコマンドを参照して続行されます 何度も何度もこれを見て。 しかし、明確な、打ち鳴らす、ちょうど現れた言葉であるためには、 それは実際のコンパイラです。 作るだけでビルドユーティリティです。 それはで、私だけが保存され、よりユーザーフレンドリーなプログラムです 長く信じられないほど退屈なを入力することから、長期的、 1そのようなコマンド。 それで、あなたは手動でClangのを実行することができます。 手動ですべてのことを入力することができます。 ただ、非常に退屈な取得します。 そしてこれだけ私たちの生活を簡素化プログラムであり、作る 私たちのために、より複雑なコマンドを実行します。 すべての権利は​​、今私が何のファイルが必要です 私の現在のディレクトリにある? ただのhello.cでなく、ハローではない。 私はハロー実行したいのであれば、私はドットスラッシュを言うことを思い出してください ドットはどこに、現在のフォルダに行く意味する され、その後、今、確かにhelloというプログラムを実行して、 私はHello Worldを持っています。 すべての権利、またはワークフローの構文について質問 我々だけで何をしたか? よし、それでは再びワンランク上のものを取ることができます。 だから、これは単にプログラムを書くためにがっかりされたことのみ これまで世界、こんにちはと言います。 だから我々はデビッド、こんにちは、と言って、月曜日には、それを変更しました。 それは、もう少し個人的なのですが、同じように一生懸命のようにコーディング 最初のバージョン。 だから、すべてのことを説得力はない。 しかし、以外にも確かに、C言語では、関数が存在する プリントには、ユーザー入力を取得するための関数。 そして、我々はこれをしなかった方法で、他の日は、次のとおりであった。 私は実際に何かをプリントアウトする前に、私は最初に得た ユーザーから何か。 だから私は再びこれを行うことができます。 sがためだけにここに任意の名前、ある文字列s、 文字列は、GetString等しい。 だから何をgetStringをされたのですか? それは明らかに、その名前に基づいて、文字列を取得します。 しかし、それはより技術的に、何ですか? これは、関数です。 だから、それ自体はC言語が付属していない関数です。 CS50スタッフがこれを書いた。 それで、これを使用するには、ちょうど、stdio.hに含めることはできません また、何を含める必要がありますか? うん。 単なるファイルですcs50.hので、我々は何年か前に書いた。 私達は並んであなたのためのアプライアンス上にインストール 標準のすべてのファイル。 それでクラスのこれらの最初の数週間で、私たちは使います これはただの非常に基本的なことのプロセスを簡素化する ユーザー入力を取得するようなもの。 そのために我々は数週間のうちにわかるように、取得したユーザー入力 Cのような言語は、実際には驚くほど複雑であり、 あなたはどのように、通常、事前にわかっていないため、特に 多くのものは、ユーザーがインチ入力しようとしている そして、あなたが期待するのはどのくらいのデータがわからない場合、あなたはしないでください 割り当てにどのくらいのメモリを知って​​います。 そして、あなたが実際に行おうとしているの敵対ユーザーを持っている場合 お使いのシステムに侵入するために、よく、あなたのコンピュータをクラッシュさせる 一般的には攻撃の第一の方法は、私がやったのと同じように、ある 月曜日は、ランダムな文字列の全体の長いシーケンスを入力します Enterを押すと、壊れるものを参照してください。 一般的に、プログラムが破損した場合は、それがほのめかしているので セキュリティ上の欠陥、潜在的に。 それは確かに作られた、プログラマー、あなたにヒント 間違いが、より危険なほど、あなたはしたかもしれない セキュリティ関連のミス、一般的に我々はそれが表示されます マシンはこの日に侵害された方法だと、両方の でWebやプログラムの世界では このようなコマンドライン、。 かしこまりました。 だから、文字列sがGetStringメソッドに相当します。 だから、もっと具体的に今、6行目は、ここで何をするのでしょうか? だから右側の関数は文字列を取得し、 どのように多くの引数をとります? オーケー。 だからなし。 少し健全性チェック。 引数には、再び、ただ変更するための関数に入力される 何らかの方法でそのデフォルトの動作。 しかし、この場合には、私は変更したくない GetStringメソッドの振る舞い​​。 私は、単に文字列を取得したい。 だから私は、カッコ内に何も入れないし、私は置く セミコロンは、コードの行の終わりをdemarking。 さて、それ自体が、等しいという意味ではありません等号。 それを取得何でも入れを意味する、代入を意味 左にあるものは何でもの右内側に出力される。 だから左側に、私たちは宣言したと言う 文字列は、sと呼ばれる。 より具体的には、我々の内部のメモリを割り当てた 我々は、のシーケンスを表すビットを置くことにしましょう​​どの 文字。 しかし、今日のために、我々は、割り当てられている または文字列を宣言した。 かしこまりました。 だから今、私はこれをやった後に、私はの値をプラグインしたい のではなく、ダビデの値。 だから、これはなぜ間違っているのでしょうか? だから、これは文字通り、ハードコーディングされたsです。 それは私がそうしたくないのである "こんにちは、S、"と言うことだ。 だから私はこれを行うことができます。 パーセント記号は、プレースホルダですが、今私がする必要がある 印刷物に第二引数を渡します。 関数への引数は、で区切られていることを思い出してください コンマは、ので、ここで次のカンマは、私は、この手紙の後に置く。 そして今、この文脈では、sは、printfの変数であり、 それら二つの入力を受信すると - 左側と右側の変数名の上の文字列 - それが私たちのために前者に後者を接続しますと、 ちょうど含んでいる素敵な美しい文字列を出力 それは我々が打鍵したことは何でも それでは、これを試してみましょう。 先に行くと戻って、ズームアウトするつもり 私の端末ウィンドウに。 ここで下部に拡大します。 こんにちは作る再入力します。 Clangのは再放送されているようだ。 私は入力するつもりです。/こんにちは、入力します。 まだ何も起きていないようにみえますが、それはこのプロンプトでだ 私は、ネイトのようなものを入力して入力して、今、私たちは持つことができること こんにちは、ネイト。 そして、私はロブなどで再びそれを行うことができます。 私が意図したとおりになりましたので、うまくいけば、このプログラムが動作している。 これで、すべてそのユーザーフレンドリーではありません。 私は私に期待されているのかさっぱりだが。 だから我々は確かに少しに整理することができます。 私はここに戻ってまで行こう、とだけではなく、ダイビングと 文字列をユーザに尋ねる、私は明示的に教えてみましょう 私が期待しているかをユーザ。 だからのprintf( "文字列を入力してください:" ); ここで変数もありませんので。 いいえパーセント記号。 単純な英語のフレーズ。 私は今ここに底に行くと私のプログラムを再実行してみましょう。 しかし、何も変更されているように思えません。 なぜですか? 私はそれを再コンパイルする必要があります。 だから犯しやすい間違い。 しかし、あなたがファイルを保存するだけでなく、持っていますが、 プログラムを再コンパイルしてください。 ので、私は再実行こんにちは作れば、今Clangのが実行されます。 今、私は実行することができます/こんにちは。そして今、私は "文字列を入力してください:"を参照してください。 オーケー。 今度は、もう少しユーザーフレンドリーです。 ネイトは、、こんにちは、ネイトを入力します。 さて、再びこれを試してみて、考えてみましょう コー​​ナーケースについて。 ただスクラッチのようにそう、あなたは奨励している、またはされている 種類で行くことができるかを考えるために仕様で奨励 間違ったユーザーが行う可能性がありますすべてのものを予想していない場合。 バグは、したがって、結果として起きる可能性があります。 だから文字列を入力します - ここでコーナーケースは何ですか? 何が、プログラマが、持っていないかもしれないというシナリオだ 予想? うん。 オーケー。 私はこのような番号を入力だから何たら? かしこまりました。 だから、それはまだ動作します。 Gramaticallyも意味がありません。 しかし、少なくとも、プログラムが動作します。 別のコーナーケースは何ですか? 私は期待していなかった何か。 うん? オーケー。 だから我々は本当に、本当に大きな数のような何かを行うことができます。 だからここにこれを行うにしてみましょう。 私は第二のためにズームアウトしましょう​​、私が強調することができます。 コピーしてここに貼り付けることはできません。 かしこまりました。 だから私はコピーして、この端末ウィンドウに貼り付けることはできません、我々はよそう ただ、それをシミュレートします。 私はラップするつもり、ズームアウトしてみましょう。 私はそれがないので、あまりにも長いためにこれを行うつもりはありません 実際に、このプログラムで破る。 しかし、それは可能性があります。 入力します。 しかし、それはしませんでした。 かしこまりました。 しかし、それは本物の角のケースです。 正しく振る舞って唯一の理由は、そうする CS50関数GetStringメソッドは、実際にあるため、話す、です 我々は数週間のうちにわかるように、フードの下に設計された、 自動的に、より多くの、より多くのRAMを割り当てる オペレーティング·システムからメモリを、それが実現したときに、すごい、 あなたは、実際にはかなり長いものに入力した。 さて、これは白い嘘のビットです。 我々は実際には非常にしばらくの間、一時停止し、私が入力した場合 キーボードでも5億文字のようなもの ここで、あるいは実際にコピー&ペーストかなりヒット、恐らく我々 プログラムがクラッシュする可能性があります。 ほんの少し難しく有限でそれをシミュレートする 時間の量。 私達は試みることができる別のコーナーケースは何ですか? うん? うん。 では、なぜ我々は何も答えないのですか? だから我々は、実際に何らかのアクションを取らなければならないなぜなら、そうでなければ プログラムは一日中点滅そこに座ってになるだろう。 しかし、私はちょうどヒットした場合、入力してください - [OK]を、今、まだ間違って見えます。 クラッシュが、多分する機会は今は​​ありませんでした より厳密なプログラムの実装を開始 それは実際にチェックします。 そして、もし文字列、文章、その単語、私 長さが0であるに入力し、まあ、多分私は怒鳴りつけるべき ユーザー、またはように、彼に言うか、彼女は再び列を入力する 我々は実際には正しい行動のように見えるものを手にしていない 私の一部にだけ完全な見落とし。 背中の質問ですか? 10進数を指定します。 だから我々はあまりにも、それを試みることができる。 1.10000005。 それはちょうど実際にちゃんと動作するように起こっているように思える。 そして、それは実際に期待されています。 我々はそこにその番号を入力したりしているかもしれませんが 大きい数字以前、実現することを我々は、ユーザが入力しているとき 入力と我々は、GetStringメソッドの機能をしていません使用している 私が入力している何かの問題は、数のように見えます。 ことを思い出して、ASCII、あなたの上のすべてのものによる キーボードにマッピングすることができ、数値を持つ 文字は、char。 だから私は、番号を入力することがあり、この場合、にも関わらず、 コンピュータがあるため、文字列のように、話すこと、それを考えるために起こっている - 数字のように見えるが、何か 実際には数値ではない。 しかし、それは今我々ができるので、実際に完璧Segueの プログラムを書くには、実際に移行すること 他のデータ型を使用します。 だから文字列を使用する以外に、というより、文字を使用する以外に、 我々は同様でCのように、他のデータ·タイプを持っていることを実感 他の言語。 char型は、その名前が示すように、ちょうど単一文字です。 floatは浮動小数点値であり、それはただの空想だ 実数を言う方法 - 小数点を持っている何か 左及び/または右にいくつかの数字とそれにポイント。 intはちょうど123のような数を表す整数です。 そして今、さらに興味深い二重のようなものがあります。 我々は、ダブルが最後の時間だった何て言った? それは右、64です。 だから一般的に、一方フロートは32ビットです - ので、メモリ内の長い間、この、それは〜32 0と1を使用し 値を表す - 二重は文字通り二度あることである どちらか大きい数を表すことができることを意味し、または あなたは、より正確な数値を表すことができます。 だから、小数点の後に複数の番号を持つことができますが、 男は単純なものであっても、映像の中で述べたように 概念的1月3日のようにすることによって正確に表現できない コンピュータ、最終的にはビットを使い果たしているので、と したがって、あなただけ0.33333333そう何回も、で行うことができます その時点であなたはちょうど私が表現が切れてしまったと言わざるを得ない スペースは、私はちょうど一日を呼び出すと、それを表現するために持っている 多少不正確にそのようなもの。 そして長い長い - として知られているデータ型があるので、愚かな名前ですが、それだ 偶然にも同じように、多くの場合、32ビットであるCのlong int型は32ビットですが、長い長いです 一般的には64ビット。 だからそれはちょうどあなたが大きな意味を表すことができます これより数値。 かしこまりました。 だから我々は、実際に物事を表す開始したい場合、我々は、 より洗練されたタイプが必要かもしれません、そして、 我々は文字列を持っている理由です。 だからCS50ライブラリに、そのファイルがcs50.hと呼ばれ、我々はしました 実際には文字列と呼ばれるデータ型は、いわば、宣言された しかし、文字列が実際には存在しません。 これは、再び、我々は皮に行くんだ、これらの層の一つである 背中一週間か二週間で、それを捨てて、実際に 文字列が実際に何であるかで、フードの下に見て、 どのようにそれが表されている。 我々はまた、ブール値で見ていくつもりです。 だからスクラッチの文脈におけるboolは何でしたか? これは、trueまたはfalseです。 だからそれは、ちょうど、trueまたはfalseを、オンまたはオフの値の1または 0は、しかし、あなたは世界を見たい。 だからCで、CS50ライブラリのおかげで、どの順番に ボンネットの下に別のライブラリが含まれています、我々は持っている boolと呼ばれたデータ型へのアクセスが、その意志 文字通り私たちにtrueまたはfalseの値を割り当てることができます プログラムの事。 それでは、ここで先に行くと、その小さなプログラムを書いてみましょう 代わりに、数値を含む何かをする。 だから私はCS50アプライアンスに戻りましょう、私は先に行きましょうと ここで呼ばれる新しいファイルを作成する - ちょうどmath.c.ような単純なものを、言うてみましょう かしこまりました。 そして今、私のプログラムの一番上に上がる、アイム いつものをやろうとして - 私が使用できるように、#、を含める printfは、int型のmain(void)を - 我々は、intが何を意味するのか、最終的には、戻ってくるよ ここでは、空隙がここに何を意味するのかが、今のところ、ちょうど知っている あなたはこのようなプログラムを開始する必要があります。 今、私は先に行くと、少し何かを言おうとしてる 異なる - のprintf( "私に番号を付与します。" ); その後、私はそれているので、int型N = getIntをするつもりです 場合、getInt判明CS50は、ライブラリ内の別の関数である getString以外。 そして今、私は感謝 "のように、愚かな何かをするつもりです %dの "進整数のために、次にコンマn、および その後、0を返します。 だからもう一度、戻り0私は番号とは何の関係もない をユーザに尋ねる。 ただ、すべてが、おそらく、よくあること終わりに示します。 だから私はここに私の端末ウィンドウに落とす。 私は数学を行う入力してみましょう、次のように入力します。 と何かが間違っている。 数学が機能しなかったことを確認します。 ここに我々のエラーメッセージの最初のです。 なぜですか? 少し不可解な、しかし - うん。 だからcs50.h. だからもう一度、特に早い段階で、あなたは最初のを書こうと思います セクション内のpset 1のプログラム、営業時間、および 率直に言って、それは時々何これらのものを圧倒することでしょう 実際に言っている。 しかし、あなたは彼らが低下し始め、非常に迅速に実現するだろう このひとつは、あなたが1つをオフに残してきたことを意味することによりバケットに #のファイルの先頭に含まれています。 とClangのは、コンパイラは、することによって、このことを知らせるさ のと言って、むしろfancifully、暗黙的な宣言 関数getIntは無効です。 かしこまりました。 だからそれは何を意味するのでしょうか? それはちょうどあなたが暗黙でgetIntを宣言したことを意味し あなたはそれを明示的に宣言していないという意味。 明示的にint型を宣言するには、次のように教えなければならない それが存在することを打ち鳴らす。 とのために非常に簡単な解決策は、それをすることによって教えることです この他のファイル、cs50.h、少なくとも含む ファイルの最上部。 文字通り、それはClangのに言うことは、#includeしないであるので かなりcs50.h、コピーと呼ばれるファイルを探しに行くためには、 私のために、プログラムの先頭に自動的に貼り付けたり、 その後ゼロとものにソースコードを変換します。 私たち人間が持っていた場合、しかし、それは明らかに非常に面倒です これらの大きなファイルのすべての時間をコピーして貼り付けるに移動するには、 ので、#だけで自動的にせずにすべてのことを行い含める 誰か他の人のライブラリーと私のコードを濁水。 とライブラリは単に関数を含む別のファイルです 他の誰かが私達がであることを、書いていることを他の事 私たち自身のために活用する。 かしこまりました。 のは、もう一度試してみましょう。 数学を作る。 入力します。 グッド。 だからそれは働いているようだ。 だから私は今、数学を実行してみましょう。。/数学。 入力は私番号、123を与える。 123ありがとうございました。 今度は、別のコーナーケースを試してみましょう。 文字列があるので、かなり寛大である 文字列は何でもかまいません。 数字のように見えることができます、のように見える 文字は、言葉のように見えます。 しかし、int型はintです。 だから今は困難なユーザーだし、それは私を与える "と言っている場合 番号、 "私は0.1のような何かをしようとする場合はどうなりますか? まあ、それは数字だし、それはと一貫性のある 文法は、私がここで使用されますが、フードの下に、私はのよ 関数getIntを使用してコース。 だから何が起こるか見てみましょう。 再試行し、入力します。 かしこまりました。 私は困難になると、もう一度Enterを押してみましょう。 は、Enterを入力します。 だから今はそれが場合、getIntがもう少しあると思われる GetStringメソッドよりも強力。 我々スタッフは、私たちが気づいたときように実装 あなたは私たちにintを与えていない - とintは10進数です 含むゼロ、もの、補数、スリー、四つんばい、ファイブズ、シックス、 セブン、エイト、またはナイン。 そして、それはそれだ。 いいえ小数点なし、文字、句読点。 それは我々が協力しなければならないようだ。 だから私は、4、5、6、およびを通じて私を取得してみましょう。 だから本当に、ここに肛門であることが、私はおそらく私を与える "と言うべき 整数 "ユーザに伝えるために まさに私が意図したもの。 それでは、ボンネットの下にについて考えてみましょう。 今日はどのように実装されるかcs50.h見するつもりはない、 そのライブラリ。 しかし、それは、リトライ、リトライ、リトライ言い続けたらどうプログラミング 私はおそらくにフードの下に使用しています構築 それを実装する? だから、ループ、右か? 我々がスクラッチで見た最も単純なアイデアの一つ。 フォーエバーリピート構築し、構築します。 おそらく、このプログラムでは、ボンネットの下に、偶数 それはしないスクラッチCで書かれているが、それはやっている ユーザーがいない場合は何かが永遠に相当呼ば 整数で入力したので、リトライ、リトライ、リトライ、リトライ言う そして最後に私たちが行うときは、次に、整数を取得 そのループから抜け出す。 だから我々はCS50のライブラリにここで他にどのような機能を使用することができますか? まあ、明らかなものの種類は、少なくとも部分的に基づいて 私たちが今存在することがわかっているデータ型。 我々は、GetStringメソッド、getIntを実装しますが、全体 用語の最初の数週間は、あなたもgetFloatはを使用することができ、 正確に取得するために、getDoubleはとGetLongLong 必要なデータ型。 ここで重要なディテールは、そのいくつかの言語とは異なりますので あなたは必ずしもする必要はありませんPythonやRubyのような 変数のデータ型を宣言 - あなたはどのような種類のものをコンピュータに指示する必要はありません あなたは、変数に格納しようとしている - C言語で、あなたは今までので正確でなければならない。 あなたは、nという変数は、ストレージのチャンクをお望みであれば このケースでは、慣例により、32ビットであることを起こること これらのビットであることをコンピュータに指示する必要があります 数値を格納する予定 - れていない文字、文字列ではありませんではなく、フロート。 そして、これは我々効果的に問題を解決します 先週に走った。 我々だけではない表現するためにゼロとものの番号を使用している場合 数字の世界でどのようにしかし、とBS、CSの、 コンピュータは知っているつもりが、実際にこのビットのパターン として表すのではなく番号65を表し、 によると偶然、文字A、 リコールは、ASCII、65と同等だったのですか? そう、コンピュータにコンテキストを提供し、これらのデータ·タイプには、 これらのビットは次のように解釈されるべきである場合、それは知っている intやstringなど。 どの質問でも、その後、この上の? うん? デイヴィッドJ.マラン:良い質問です。 我々はstdio.hを取り出す場合は、ファイルを保存する - 私は、ターミナルウィンドウに下ると数学、ズームを行う実行してみましょう と入力します - 私は暗黙のうちにだから、今私は、別のエラーが出る NOW関数宣言何? printfの。 だから今は、その解決策であるという新たな問題を作成しました 本質的には同じ。 私はその背中を配置する必要があります。 読者:[聞こえない] デイヴィッドJ.マラン:ああ。 私が取るのであれば - 大丈夫、うん。 だから私は、標準I / Oライブラリの包含を削除する場合 ここでは、その後、私は、printfを取り除く場合は、getと言っている printf関数を取り除く? はい。 私はもはやいずれかを使用していませんので、これは動作するはずです - おっと。 私は嘘だったのか。 ああ、大丈夫。 これは、我々はちょうど導入された新しいエラーのため動作しません。 そして、この1つはもう少し自明です。 何が問題なの? 未使用の変数n。 ので、このエラーは、当社が設定した結果です 本当にに向かって怒鳴り、特に知識をひけらかすするアプライアンス すべての可能な間違いのためにあなた、たとえその種の このような非致命的な間違いは、 - それは本当にそのような大きさです 私はintを割り当てた対処、それに数字を入れて、 ただ、それには何もしなかった? いや、だから、機能的。 つまり、プログラムを壊すことはないだろう。 それはちょうど愚かな、右のようなものだ? 保存されて、その番号に求めなくする値はありません それが変数で、あなたは何もするつもりはありませんしている場合 それと、それを印刷したり、それを保存するかどうか。 したがって、この例の場合、Clangのは、できるだけ多く認められ、 それは、未使用の変数nを言っている。 私たちが本当にしたい場合だから我々はこの問題を解決することができます。 しかし、再び、これは今、良いプログラミングではありません。 だから、僕はこれを行うことができます - ここに降りて行き、私は、画面をクリア数学を作ってみましょう。 その作品。 今、私は入力を受け取り、私の数学のプログラムを実行することができます - まあ、それは悪かった。 入力を受け取り、それがこの場合には、それはないすべてです。 だから、実際に、のはもう一つのコーナーケースを試してみましょう私たち 以前から考えていませんでした。 このケースでは - ここで、のはの1に戻りましょう ユーザーフレンドリーもう少し。 私はここに戻って、もう一度数学をmakeを実行してみましょう。 おっと、私は間違って何をしましたか? さらにロールバックするようになった。 オーケー。 今、私たちは、すべての場所、元の状態に戻っている うまくいけば十分です。 私は数学を実行する場合、現在は、123が動作するように思われる。 しかし、これは単に言っても、本当に効果的な構造になっていません 大丈夫、それは動作します。 789、動作します。 提出する時間。 他のコーナーケースがここにありますので。 文字列が実際に入力することで私たちに多大な迷惑を与えていない 文字の全体の多く。 しかし、私はこれで何を入力した場合? - ナンバー1の全体の多くは、ここで全体の多くを打つ すべての権利、それは少し退屈になってきたので、私はするつもりです ここで停止し、私は入力をヒットするつもりです。 ただ一体何が起こったのか? だから、これは実際に説明することができる。 だからそれは、バイナリとしてそれを取るのですか? 良い思いをしますが、いや、それはそれがそれを取ったという事実はありません バイナリとして、確かに、それはただのようなものだったので、 偶然。 我々は再びこれを行うことができます。 それでは、バイナリシステムには2がありません おそらく十分なとにかく。 入力します。 だからそれは問題ではありませんでした。 他に何が? その通りです。 だからintが実際に何であるかを思い出す。 それは集合的に解釈され、32ビットだ 数として。 あなたは32ビットを持っているならば、それはビットのそれぞれができることを意味します 0または1(0または1)。 このビットの二つの可能性があることを意味するので、その この2つの可能性、この2つの可能性 ビット - それは2倍2倍だそう - そう32の電源を2だとの合計数です 0と1の順列は、32を持っている場合 あなたの目の前でプレースホルダ、ゼロまたは、。 私は32から2を持っているなら、数学的に、どのようなことですか? だから、多くのです。 これは、与えるか、または取る、40億だ。 と4億ドルはここにプリントアウトしたものであるように思えません。 実際には、これは20億に近い見えます。 しかし、これは偶然ではありません。 コンピュータは私の膨大な数を誤解しているという事実、 ものその後補数の私の巨大な配列の私の巨大な配列、 約2億円、としてどのように説明されています? int型のキャップがあります。 あなたが表現できる最大値は確かにありま​​す。 しかし、それは通常、右の40億ですか? 32から2のように思えるが約4億円である場合 それが最大の数だ。 そうではない残りますが、良いと思った。 負の数。 だから、あなたができる40億可能なものを持っている場合 32 0のこれらの様々な順列で表すと 1S、まあ、それは私たち人間がしたがっているかもしれない理にかなっている だけではなく、正の整数を表す しかし、負の整数。 そして実際、それはCが行うことを前提です。 だから、32ビットでは、ほぼ負の2を表すことができます 正の20億円は、すべての方法を。 ので、この場合には、私たちが本当に見ているだけである 従って私達の整数の容量のフリンジ、そして我々は持っている、 話すように、整数をオーバーフローしました。 私たちは、実際に合うことができるよりも、それに多くのビットを詰め込むことを試みた。 だから、最終的な結果は、我々は本質的に全て1のビットを持っていることです。 我々が表現しようとしました、上に私たちは、すべてのビットを反転した 可能な最大の数は、それがほぼ明確ではありません 私はちょうどインチ入力した二つのことを表現するのに十分な大きさ うん? 読者:[聞こえない] デイヴィッドJ.マラン:良い質問です。 なぜ我々はちょうどその負を表すことができません 単に文字として署名しますか? だから我々は絶対に可能性があり、我々はそれから救うことができる 追加ビット。 しかし、あなたはまだそのダッシュを表現する必要があるとしている、と それはあなたに、少なくとも何かをコストになるだろう おそらくビット。 そうです、私達は私達の多数のために使用される32ビットを持っていますが、可能性が今 私達は私達のダッシュのために使用される別のビットを必要とする 記号、マイナス記号。 だから今我々は、我々は何ができる33ビット値を、持っているが、それはだ それが行われているだけではない方法です。 我々は、32ビットの一種で、審判の判定の年前に作られ ここでの測定単位。 だから我々は効果的にこれらのビットのいずれかを使用するつもりだ 否定性を表しており、数字を表すために31ビット。 その他の質問は? かしこまりました。 それはたくさんある。 なぜ我々は先に行くと、私たちの5分の休憩をここでみませんか? かしこまりました。 だからもう一度、数学アプリケーションを過度に強調しないように プログラミングの、この1つだけ例を毟り取るみましょう 我々はそれているので、他の構造物に移動する前に、 のいくつかについてのいくつかの一般的なつまずきのポイントを説明します 基礎それはプログラムを書くことになる。 このケースでは、いくつかを持っている算術式をやって 構文に興味深い関連性。 だから、これはちょうど私達が変換できるとの計算式です 華氏から摂氏への温度。 あなたは覚えていない場合、これは単なる計算式です。 だから我々は32度華氏の値をプラグインした場合、ある 32から32を差し引いたものになるだろう凍結、0であり、確かに、 摂氏0も凍結です。 だからクイック正気があるチェック - おなじみの式ですね。 私はしかし、アプライアンスの所へ行くと、始めましょう f2cは、同じように、というプログラムを書いて、 "華氏へ "ドットC摂氏。 とここまでトップで、私は、#includeとオフを開始つもり stdio.hに、私はint型のmain(void)をするつもりです、と 再び、我々は、intが何を意味するかのように、将来的に戻ってくる そこに、どのような空隙が存在することを意味します。 そして今、私が先に行くと、そのプログラムを実装してみましょう 本質的に私たちのためにこの変換が行われます。 だからprintfの、のは、華氏で、温度を言わせてください。 そして、私が先に行くと、ユーザーから値を取得することができます。 私がしたい場合は、この値はどのような私は、ユーザーから取得する必要があります それらは私に華氏の温度を与えるため? うん? あなたは何を提案するか? うん。 だからフロートはかなり合理的に感じている。 私たちは、再び、そのちょうどいくつかのオプションがあります 我々はこれまで見てきました。 私たちは、長い長い、char型、ダブル型、float型、int型のようなものを持っている ブール値、文字列。 そこで、これらの、フロートはかなり合理的に感じている。 私たちが本当にしたい場合は、ので、我々は、二重、右を使うことができ 人間の体温を表現する - 98.60000 - 我々はそれを行うために64ビットを使用することもできますが、それはのように感じている 温度のやり過ぎ。 だからフロートで行くみましょう。 今私は、変数が必要です。 物事をシンプルに保つために、私はそれをFと呼ぶことにしますが、私はよ 同じように正しく温度呼び出すことができ、 が、どちらかで結構です。 だからフロートF = getFloatは。 私は今getFloatはを使用することを決定したとすぐに、しかし、私 1補正を行う必要があります。 うん。 だから我々は#インクルードする必要があり、そうしないとコンパイラがある 私たちに叫ぶつもり。 今私はフロートを持っていることを、私は先に行くとやらせる 変換。 そこでまず、私はまたここにする習慣をつけましょう 私のコードをコメントアウト。 だからもう一度、コメントは人間だけだと表記である しないプログラム自体の一部が、それは1、あなたを助けます あなたが次の日の朝やったことを理解するか、または次の 月、それはあなたのティーチング·フェローはあなたが何をしたか理解するのに役立ちます または何をするかを意図しているので、だ 一般的には非常に良い練習。 コー​​ドのすべての数行は、にコメントを書き込む あなた自身やあなたの同僚。 そこでここでは、私は言おうとしている "温度をユーザーに尋ねる。" 完全な文章、わずかな短いフレーズである必要はありません。 しかし、Cのコメントの背後にある考え方は、自分の各 、と言う、TFや同僚または - コメントはあなたを力づけるべき - ないことによって、あなたのプログラムをざっと読んで、それが何かを正確に知るために そんなにコードを読んでますが、コメントを読むことによって、どの 簡潔かつ明確にする必要があります。 すべての権利なので、今変換 "は、私が先に行くとしましょう 華氏から摂氏 "だから私は先に行くと何をしようとしてんだけど、 cをフロートと呼びましょう。 我々は、浮動小数点値として摂氏おこう。 そして、私はこれで刺してみましょう。 式はここで、再度、アップしている。 5月9日回としてFマイナス32。 だから、これを実行してみましょう。 だから5は9で割った値、マイナス - おっと、私はすでにそれを台無しに。 タイムズ。 だから、5月9日回Fマイナス32。 セミコロンは、Fから32を差し引いたそう。 そして今、ここでダウン、私は先に行くつもりです と、言う結果を印刷します。 そして、この部分は簡単です。 printfの。 どのように私はこれを印刷して行くのですか? まあ、私は、 "摂氏でその数は%fは\ nです"と言うことができる ちょうどいくつかの美学のために。 そして、どのような値私は、printfのように、ここにプラグインしたい 二番目の引数? オーケー。 だからC。 だから我々はこれで始まりますし、ただ0を返す。 再び、それは数学とは何の関係もない。 それだけですべてが順調であることを意味します。 さて、これは正しい、このプログラムは何ですか? かしこまりました。 だから私はいくつかのミスを犯しました。 あなたがプログラミングが何であるか見当がつかない場合でも、並べ替えることができます 推論バックの何小学校へ ここで間違いがあるかもしれません。 最初の一人は何ですか? 読者:[聞こえない] デイヴィッドJ.マラン:うん。 だから我々は括弧を逃している。 それは、私は基調講演で、かっこをしたことが意図的であった オーダーのこの概念は、実際に存在したため、ここにスライド 操作の、または優先順位、それにより特定の操作 - 乗算 - 高い結合があり、物事よりも、より高い優先度を持ってい 加算または減算のような。 だから我々はただ正確に明らかにするために何年もこれをやった どんな数学演算を先に行ってください。 だから私は、たぶん、ここまで厳密に模倣する必要があります。 そうしないと、コンピュータはおそらくやろうとしている 9で割る5のようなものが、その後減算し、Fを掛ける 全部から32。 これは、我々が何をしたいのか、実際には、ありません。 それでは、括弧ましょう。 ここで、括弧、ここに私のかっこを追加してみましょう。 のは、ここにこれを入れてみましょう。 ここでは、私はちょうど私が道に沿って作られた別の間違いに気づいた。 うん? 読者:[聞こえない] デイヴィッドJ.マラン:ああ。 グッド。 だから我々は実際には同じ整数を持つ 前から分割問題。 私は症状が何であるかを確認してみましょう、それは正しい。 しかし、我々は1を修正する必要があるとしている ここでは他のミス。 うん? 読者:[聞こえない] デイヴィッドJ.マラン:はい。 だから、愚かなミスを私が作ったが、非常に重要。 コンピュータはただ目をつぶるとさせるつもりされていません 私が実際に変数を宣言したときに私は、資本Fを使用 ここで小文字fと、ライン8インチ だから私は、11行目の私の総額で修正する必要がある 少し前に誤って大文字Fであった。 ここで何がどうですか? これは同様に小文字であるべきですか? それはする必要がありますが、それは偶然だ。 つまり、%fは変数とは何の関係もありません。 だからここにスーパークリアであることが、私は先に行かせてと この、簡単に、 "温度"をリネーム私は名前を変更してみましょう この "温度"。私は、この名前を変更しないようにしましょう​​。 そのため、再度、%fはグローバルに、 "浮動小数点値"を意味します。 my変数とは何の関係もありません。 しかし、あちこちに "温度"は、ほんの少し長ったらしいです ので、私は小文字の "f" sに戻って行くつもりです。 今、私はここに私の窓に降り先に行くことができます。 f2cの確認 - これは、再度、任意の名前であった私 このファイルに与えた。 コンパイルされているようだ。 私はf2cを実行してみましょう。 入力します。 華氏の温度 - 簡単にいずれかの操作を実行してみましょう。 32。 [OK]を、修正してください。 しかし、私は今、沸騰のため212を実行した場合 - いまいましい。 かしこまりました。 あなたのTFがそうしようとした場合、明らかに、修正されない 少なくとも2つの値。 だから、ここでの問題は何ですか? さて、あなたはすでに問題が何であるかに指を置く。 しかし、なぜそのような場合は何ですか? ここまで、私が9で割った5の数学をやっているとき。 だから概念的には、それが完全に正しいです。 式と完全に一致している。 しかし、コンピュータには正確に何をすべきかあなた 行うためにそれらを教えてください。 と私たちは効果的にここでコンピュータを言っていることです 整数9によって整数5の分割 と私に結果を与える。 あなたはデータを使用して分割を行う場合には、この問題は、しかし、である タイプ、出力は入力と同じデータ型です。 2つの入力が両方とも整数である場合など、出力が起こっている intである。 それで9で割った5点ものです。 しかし、何かをポイントに最も近い整数は何ですか? だから、それは実際には0です。 小数点の後、我々は月曜日に論じように、すべてのもの ポイントは切り捨てられます。 それはわずかスローされます。 だから、これは完全な間違いですが、私は可能性があるため、同様にわずか ここでは0で全てを掛けます。 今、私はいくつかの方法でこの問題を解決することができます。 私はこれを行うことができます。 5.0は9.0で割った値です。 技術的には、私もそれを実行する必要はありません。 それは数字だけフロートの1つを作るために十分ではない - またはダブル - ここに小数点を入れていました。 あなたがして整数を分割するとき今何が起こるかであるため、 float、またはdouble、コンピュータが実現するだろう ああ、それらの一つは、より正確です。 私はあなたよりも精度を与えることの側で間違えてみよう あなたが意図しています。 だから、結果を変換します - それだけでなく、浮動小数点値として結果を返します。 だからそれは働くだろう。 これが働くだろう。 そして、我々は後で見ることになりますことをもう一つのメカニズムがある より詳細来週。 あなたが実際に、プログラマーとして、コンピュータに伝えることができます 実際には1つのデータ型として扱うこと それは別だったけど。 だから私は実際にこれを行うことができます。 括弧内に、私はオープンのようなものを(フロート)、と言うことができます 括弧、括弧近い。 そして、これはと呼ばれるものです "キャスト"。繰り返しになりますが、もっと これ来週で。 しかし、これは単なる占いのプログラム的な方法である コンピュータは、ええ私は9は整数または長であることを知っている。 私はそれが浮動小数点値ではないと知っている。 しかし、いずれにせよ、そういうものとしてそれを扱います。 だからデータ型をキャストすると、変換することを意味 一方から他方へ。 率直に言って、これはちょっと醜いですので、私は、我々が行く提案する 背中だけ変換元の提案へ 手動で浮動小数点値にこれらの事。 今では何が起こっているのか単にスーパークリアだから、と それはすべての気が散ることがありません。 だから今、私の端末ウィンドウに戻ってみましょう。 f2cを作る。 私が先に行くと、これを実行してみましょう。 そして、余談ですが、あなたはこれらのコマンドを入力して飽きてしまう 何度も何度も、ここにLinuxのように、そのコンピュータを実現する、 かなりスマートになる傾向があります。 私が打つなら、私達は私の全体の歴史を通過することができます コマンド、UpとDown。 そこでここでは、この場合、私はちょうどf2cのmakeを実行に上がることができます。 私はちょうど2番目の前にあることをやったので、私は、怒鳴られてる。 これは既に最新です。 だから今、私は再びf2cを実行することができます。 32華氏を試してみましょう。 今度は、華氏212を試してみましょう。 ふう。 動作するように思われる。 さて、これは良いですが、それは少し感じている任意の 私は、小数点の後に6つの数字を見せている。 右か? あなたがテレビの天気予報の人なら、あなたは愚か者の一種だ あなたは、温度を読んでいるなら この程度の精度。 だから、これを簡略化してみましょう。 それでは、実際に私のprintf関数に、ここまで行くことができます。 そして、ええ、私は浮くようにしたい。 しかし、私は今では精度を指定する。 そして、私は少し簡潔になるつもりです。 私は私に小数点の後に1点を与える、と言うつもりです。 だからではなく%fを言うよりも、私は%.1 fを言うつもりです。 そして、これはちょうど私に一つの位置を与えることを意味 小数点以下。 かしこまりました。 のは、再びこれを試してみましょう。 私はそれをコンパイルした後、再実行してみましょう。 そして今、私は32に入力して、私が帰る より簡潔値。 そして、私は、今、212に入力し、より簡潔を取り戻すことができる 値と同様。 そして、あなたは、printfで行うことができます他のものがあります。 あなたは、実際には数値がどうあるべきか広い指定することができます。 あなたがそれのパディングを持つようにしたいなら、君も右揃えにしたり、 左揃えにあなたの番号の全部または 中心に物事をみてください。 ですから、そこを行うことができます小さなトリックがあります理解しています。 しかし、彼らはただ、書式コードになるまで煮詰める 我々はそこにあるようだな。 だから優先順位のこの問題に関して。 これは念入りに通過するための非常に退屈なテーブルです。 しかし、Cの作者が出ていることを認識 オペレータが高い持っているかを指定する規則 優先順位が、他のものよりも結合力、。 だから、小学校のに対し、我々は一般的にそれがあったことを知っていた 乗算と除算は、加算と減算、 その後、いくつかの他のもの。 プログラミングの世界では、あまりあり 物事の長いリスト。 そして、これが今覚える価値のあるものではありません。 あなたはやがてそれに慣れるでしょう。 しかし、ちょうど小学校のように、括弧は、一般的に解決する にスーパーを明確にすることによって、優先順位の問題、 コンピュータと意図されているもの問わず人間。 だからこのほんの少しのチートシートを検討してください。 しかし、これらの詳細の大部分は、我々はいくつかの時間のために取得することはありません。 かしこまりました。 それでは、ビルドアップさせ、これらの他愛ないから離れる 数学的な例。 まだ同じファンダメンタルズを使用していますが、開始 スクラッチのようにもう少し自分自身を表現しています。 だからスクラッチで、我々はこれらのブール式を持っていた。 と英語で、ブール式は何ですか? trueまたはfalse。 これは、trueまたはfalseに評価何かです。 1または0。 オンまたはオフにします。 も好きなように呼んでください。 今すぐスクラッチで、パズルのピースは、このように見えた。 そして、それは、3つの中で、そこに底に、組み合わせだ パズルのピース。 一つ接続詞 - 空白と空白の持っている何か。 それの内側とし、2つのブール式。 それで、あなたはより多くを得るために巣ブール式ができます 複雑なブール式。 例えば、それは土曜日であり、あれば、それはいいです 天気が、その後外に出る。 そのような任意のまたは何か。 だからあなたは思い付くブール式に参加することができます その答えに基づいている大規模な真理値、 小さいもので。 さて、C言語で、ありがたいことに、このマッピングは 実際にはかなりシンプル。 括弧は、物事はここで明確にするのに役立ちます。 &&は何を意味するかである "と。"だからそれはどのような 我々は、最初からCにそれらのブロックを変換しようとしている および条件については、我々は左手に、スクラッチで見てきた xが小さい場合がある側、私はC言語で同様にそれらを積み重ねることができます Yよりも、これを行う。 xがyより大きい他の場合には、これを行う。 他に、論理的にはそう言う、等しくなければなりません 彼らは同じであること。 だから我々は現在、これらのものを構築するために始めることができます。 だから例を行うてみましょう。 私はもちろんのウェブサイト、その上にあるファイルを開いてみましょう 私は事前に書いている。 それはnonswitch.cと呼ばれています。 なぜ一瞬でと我々が表示されます。 したがって、このファイル内の - nonswitch.c- - 第一の全体の束があることを認識 先頭のコメント。 それはちょうど何それ、ファイルの名前を説明している ない、など。 そしてそれは明らかに論理積(AND)するの使用方法を示しています - 二つの式を対等接続。 だから、このプログラムがどのように機能するかを確認してみましょう。 私は2つのファイル、cs50.hとstdio.hをインクルード。 私はプログラムに、今では、下にスクロールすると、それはやや長いです よりも、我々は前に書いたが、かなり読みやすい。 だから私は、最初にライン18上に、ユーザに印刷 "私に1から10までの整数を与える。"そう それはすぐそこです。 今私は、整数を取得します。 しかし、それgetIntを実現する - 非常にシンプル。 それはちょうどintを得るために起こっている。 それはint型ではなく、取得しないことを保証するために起こっている 文字列またはフロート。 しかし、それは境界チェックのどんなことをするつもりはない。 それはの間になるように数字をフィルタリングするつもりはない 一定の範囲。 だから我々は自分自身それを実装する必要があります。 だから、私はの組み合わせを行うことができる場合には、スクラッチのように 二つの表現は、私は次のようにC言語でそれを行うことができる。 nは1以上であり、n未満の場合とで または3に等しく、私は非常に勝手に決めてしようと思っている 小さな数になるように番号。 ただ文のために。 nは4と6の間にある他の場合は、印刷は、 "あなたは、媒体を選んだ 番号 "エルスnはプリント、7〜10であれば"あなたが選んだ 大きな数。 "ELSE printは"無効な数字を選ぶ。 " 私たちがしている場合は、論理的にはそれが続くので 私達の範囲を使い果たした。 だから、これは我々がより大きいか、またはどのように書くかというわけではありません。実現 数学の授業中に等しい。 右か? 通常は、その下の行で、このようにそれを描く。 しかし、私のキーボードのようなキーがありません。 以上を発現するためのCの記号がそう に等しい未満のための2つの文字、および記号です または等しいだけでなく2文字です。 かしこまりました。 私はこのプログラムを実行する場合だから、あなたは、おそらくそれは何かを推測することができます 何をするつもり。 私が先に行くとnonswitchを加えた場合は、入力します。 その後nonswitchを実行します。 私に1から10までの数字を与える。 私はそれを11を与えるつもりだ。 私は、無効な番号を選んだ。 私は3番を試してみましょう。 私は少数を選んだ。 だからそこにはかなり簡単。 私はこのプログラムの動作を変更したい場合はどうすればよいと 代わりに少し何か違うのですか? 私が先に行くとこれを言わせてください。 私はこのすべてを取り除くましょう。 と言わせするif(n == 42)。 そして私はあなたが選んだ "先に行くと、プリントを言うつもりです 正しい答えは "そうでなければ我々は、先に行くと言おうとしている printf( "あなたが選んだ 間違った答え ");。オーケー。 という理由だけで。 今、私たちはここで行うことができますいくつかのポイント。 一つは、私はあなただと思うだろうと記号を入力しませんでした 最も合理的。 あなたが使用していないアウト私は平等を確認する場合は、オン 等号。 代わりに、同等の等号を使用しています。 そして、なぜそれだけで直感的に、かもしれない? うん。 読者:[聞こえない] デイヴィッドJ.マラン:正しい。 等号は、すでに割り当てに使用されます。 誰かが実際にを介してこれを考えていませんでした。 そして、今、それは等価テストに来るとき、我々はする必要はあり より明確になる、と等しいか言う。 非常によくある間違いは、これを行うことです。 そして、営業時間または来週中にifやで あなたは、このような何かを行うと次の2週間 10のそれとの闘争、把握しようとして20分 いまいましいバグが何であるかを、あなたはそれらのいずれかであることを認識 このミスを犯した人々。 作りやすいので、スーパー。 しかし、目標は今、この間違いを追い払うためです。 これは本当に何を言っているので、これは評価するだろうか? nは42を取得した場合。 だから動詞の人々が表現する、口頭、使用 割り当ての概念は、 "取得"です。だから、nが42を取得する場合。 ので、nに42を代入することを意味します。 今私は、括弧内のブール式を持っている この条件の中に、の値は42です。 右か? あなたが内側からそれを評価する場合があるため、合計 答えは、今では、42である。 私はあなたに質問をしそうだとすれば、 "(42)、あれば"とは何か ことは本当に言って? さて、ブール式はtrueまたはfalseを指定できます。 1または0。 オンまたはオフにします。 だから我々はそれによって、すべての、ここのコーナーケースを持っているように見える "(42)が"突然、私は言っている。これはブール値ではありません。 だから、コンピュータは何をすべきか、しかし、それは本質的に相当である 0ではない何かが真であると解釈されます。 1。 上。 彼らはすべて機能的に等価だ。 のみ値0、またはfalseキーワードは、我々が説明するように 最終的に参照してください、実際にはfalseです。 それが非ゼロであるためこのように "した場合(42)"実際に、真となります。 そこでここでは、より正確に言えば、ブール値は実際にそうではありません はるかにtrueまたはfalseですが、このために 場合、0または非ゼロであるなら。 だから偽またはfalseではない。 そして、私たちはすべての多くを包含することを可能にする 括弧内の表現の可能性。 だから我々は、今までので、慎重に、これを言う必要があります - するif(n == 42)。 単に我々が平等のテストを指定する必要があるため、 値の代入ではない。 ここで注目に値する他に何がある? これらの中括弧は、実際には必要ありません。 私はちょうどここにNIT-選り好みするためにそれらをやってきました。 しかし、あなたは唯一の1ラインを持っている条件がある場合 コー​​ドは、便利なように、プログラマが使用する必要はありません 中括弧。 それは単に審美的な理由のために、インデントすれば十分である、と その後、コードのあなたの行を記述します。 ために - あなたは2行のコードを記述したい場合にのみ、 例えば、他のprintf( "バイバイ!")。あなたは何をしたい場合 つまり、これは壊れています。 あなたはあなたが欲しいすべてをインデントすることができますが、あなたが持っているという事実 中括弧を使用せずに2行のコードを入力した このプログラムが正しく実行またはかもしれないことを意味 でも正しくコンパイルされません。 だから今は、正直に言うと、私は最高の癖がちょうどだと思う 中括弧を使用して、あなたは彼らが行うことがわかります スーパーに何が起こっているのをオフにします。 また、余談として - あなたはそれらの中している場合は特に使用している人 オンライン推薦図書やリソース - でスタイルのこの概念があることを認識 プログラミング。 そして何人かの人々は実際に中括弧を置くことを好む こっちのライン上。 一部の人々は、とんでもない事をすることを好む ここにそれらを入れたい。 それがに来るときに間違った答えはありません スタイルが、これは間違っている。 しかし、一部の人々はそれを行う。 [笑い] デイヴィッドJ.マラン:だから私は今、これを言及、単にので、 あなたの本やオンラインで物事をよく読んで、あなたは取得するつもりだ 異なる別の先生からのメッセージと さまざまな作家。 そして、ちょうど機能的には、彼らがしている、ことを認識 一般的には同等ですが、一貫している。 したがって、このケースでは、我々は、中に標準化します 括弧は左側にここに並ぶ。 かしこまりました。 それでは、今、先に行くと、これを実行し、何が起こるか見てみましょう このプログラムと。 nonswitchを作る。 その後nonswitchを実行します。 私0の間の整数を与えると - だからそれは関係ないです もう、私はちょうど任意に42を言うつもりです。 そして、私は、正しい答えを選んだ。 さてさて、実際には別の方向でこれを取ることができます。 他の構文は、我々はそこのoutそれは回り プログラム内で使用することができます。 ここでは、機能的に同じですが、構文の新しい作品は、だ しかし、ただ自分自身を表現する別の方法を紹介します。 だから、これはと呼ばれるものである "switch文。"と switch文は、次のように動作します。 それはあなたがしたい値、カッコ内に取り 上の "スイッチ"。 あなたは、その値に基づいて、異なる動作をしたいと思います。 だから、これはnの値のスイッチを意味します。 そして、これは何を意味するのか? さて、nは1または2または3の場合、先に行くと "あなたをプリントアウト 大きな数を選んだ "とし、休憩。 休憩のための理由は、Cの働き方としてあるということです それはそのマッチケースを見つけるとすぐに、それが実行を開始します その下にあるすべてのコード。 だから私は、27行目でここにそうであるように私は、コードの1行を持っている場合、それは 実行されます。 私はここで別の行を追加した場合、それは実行されます。 別のラインがここに、それが実行されます。 プログラムは下に何実行を停止します 私は明示的に適用可能なcase文 "壊す"と言う。だから、間違っている。 右、この場合には、結果として。 ケース4または5または6が、同様に起こっている メッセージをプリントアウトする。 この場合、培地数。 破る。 ケース7、8、9、10、それは "あなたはビッグを選んだプリントアウトするために起こっている 番号 "ブレーク。 そして、 "デフォルト"というキーワードは、文字通りあり それが効果的に構築する "else"のようなものだ。 だから新しい構文が、知的、 すべての新しいここでは何もありません。 それはちょうどスクラッチのようなものだ。 ブロックのソート、ELSE IF、ELSE IF、IF。 だから、このプログラムの切り替えバージョンです。 しかし、我々はここに数字でそれをやったことがわかります。 私は、2番目のバージョンを開くだけで表示するようにしましょう もう少し具体的な何か。 そこでここでは代わりに等級を持っています。 あなただけではなく整数にしますが、上のスイッチを使用することができ判明 文字。 すべてのデータ型であるが、少なくとも文字ではありません。 だからここで、我々は、Cの値がある場合のようにそんなことができる GetChar関数を使って、19行目で入力したユーザーに、、、 資本金またはそれグレードとして解釈してみましょう、小文字である 彼らは優れたグレードを選んだと言う。 とダウンswitch文に沿って、我々は他のを持っている "B"と "C"のsの例など。 しかし、今はもうひとつの締めくくりしてみましょう。 そして再び、種類のを飛んで これらの例のいくつか。 しかし、それは我々が今、それらを適用することができます本当にそうだ - または実際に、ちょうど今それらを翻訳 - Cへ だから私は先に行くとこれを行うことができます。 私は、新しいファイルを開くつもりです。 そして、私は、Cランタイムライブラリが含まれていますかするつもりです。 そして私はint型のmain(void)をするつもりです。 私はloop.c.としてこのファイルを保存しておきましょう ほんの一例を挙げると。 そして、私は先に行くと、次の操作を実行するつもりです。 私は非常に面倒なプログラムを書きたい。 10だから。 これを実行してみましょう。 9。 かしこまりました。 あなたがプログラミングでこれをやって起動するとすぐに、君がいる おそらく何か間違ったことをして。 しかし、我々はそこにとにかく始めましょう。 おっと。 それは実際に間違っている。 7。 6。 5。 4。 何も我々が0に到達したとき発生するつもりはないだ。 3。 2。 1。 オーケー。 0。 削除します。 かしこまりました。 だから、0を返します。 したがって、このプログラムは明らかに非常に何をしてどうするつもりだ うんざりするほど、それが何をするつもりだと言う。 それはそれらのすべてを印字することになっている 上から下に値。 だから私はループを作るやらせる。 その後 - おっと。 ループを作成します。 私が間違ったディレクトリにありました。 そして今、私はループを実行してみましょう。 入力します。 WOOHOO。 非常に素晴らしい。 ニース、長いプログラム。 すべての権利が、今より良いこれを実行してみましょう。 あなたはループを使用し始めたときだけ、スクラッチのように 構築するのではなく、ただのすべてをコピーして貼り付ける パズルのピースは、私はこの事をご紹介しましょう​​。 だから、C言語では、様々なループ構造がありますが、 の一つは、このように見えます。 "for"ループは2つのセミコロンで区切られた3つのものを持っています。 そして、ループの本体の内側に、いわば - 中括弧の内側のもの - 我々は何度も何度も何かを行うことができます。 だから私は、画面上にここに持っているもの、これは 文字通りコメント。 / /ここで意味のコメントをしています。 これは、コードではありません。 これは私にはちょうど英語の説明は、ヒトである。 だから初期化、条件、および更新します。 さて、どのようにこの作品を見てみましょう。 これは、私は次のようにこのプログラムを書き換えることができます。 のための - ので、ここで私のループが来る - 私をint - ここでの "i"という変数は来る - 10に初期化されます。 だから、私の初期化があります。 私は長い間 "i"がより大きいか、このループをやってみたい 0に等しい。 そして、このループの繰り返しごとに、私がしたい iを実行する - 。 だから我々は月曜日に+ +を見ました。 - 反対です。 これは、値を1減らします。 このループの内部では、私は実際に何かをしたい。 だから私は、printfのような何かを言うつもりです。 これは明らかにだけであるので、私は、今では10を言いたくない 同じ値を印字すること。 私はおそらく、代わりに印刷するには何が欲しいですか? うん。 だから、 "私は。"ので、%D、I。 だから私は以前から、これらのアイデアの一つを盗むつもりだ - フォーマットコードのこの置換 - その後ダウンここで、一番下に、私はちょうど、0を返します おまけに。 しかし、今、私は、より簡潔なプログラムを持っています。 それは、ほんの数行ではなく、いくつかの10または11行です。 私はここに私のプロンプトに移動しましょう​​。 リメイクループ。 ループを再実行してください。 そして、それは同じように見えます。 さて、プログラムはもっと面白いです。 しかし、今私はこのような何かを入力することができます。 私は100にこれを変更することができます。 私はその後、私のプログラムを再コンパイルすることができます。 そして私は私のプログラムを再実行することができます。 そして今、それは、今日のコンピュータ上で超高速になる。 しかし、私はそこに持っている - そして実際に、私のスクロールバッファはしません でも、そんなに遠くまで行く。 そうしよう。 だから、そこに我々はすべての100を持っています。 しかし、それはここでミスをするのは簡単です。 私は何かの予想される動作になるだろう 誤っているのですか? だから、それは無限のように感じている。 だから、コンピュータが動作するかどうか見てみましょう。 だから私は先に行くと、ループを作ってみましょう。 そして、私はループを実行してみましょう。 だから、その瞬間にそれに戻ってみましょう。 我々は、実行してみましょうよ。 なぜなら我々は最小限に、何をカウントアップするべきでしょうか? おそらく、少なくとも2億ドル、我々は多くのビットを持っている場合、および 我々は、正の値を使用しています。 それでは、ここに戻ってジャンプすることができます。 ループは、これらの種類に加えて、我々は中には何と呼ばれている ループ。それでは、スクラッチのように、あなたは永遠に持っていた ブロックは、あなたはブロックを繰り返していた。 同様に、C言語では、あなただけの他の方法を持っている 自身を表現する。 だからあなたができるようになり、whileループの概念を持っている 自分で少し異なって表現しています。 そしてあなたは、do-whil​​eループと呼ばれるものを持っている どちらも微妙に異なります。 そして、我々は時間をかけて離れてこれらをいじめるよ。 しかし、ここではここで、この最後の1を見てみましょう。 我々は、に行く場合 - まだ実行されている。 それはかなり無限大です。 だから私はポジティブに行かせ、そしてどのように我々が実際にできることを示す もう少し効率的にユーザ入力を制御します。 それはかなり短いプログラムです。 そしてここで我々は、メインは、int nの宣言の中で、持っている。 だから私、Nという名前の変数を与える。今、私は文字通り言う "を行う。"そして私は中かっこを持っている ブレース、近い中かっこ。 そして、その直後、気付く、それは言うはn 1未満である。 だから、これらの行がわかり - 19から24 - 総称して、do-whil​​eループを構成しています。 そして再び、新しい構文ではなく、新しいアイデア。 これは、文法的に、ループのちょうど別の方法です。 だから、これは何をするのでしょうか? nが1未満である間、以下の操作を行います。 だから私は何をすべきかをしたいですか? 私はあなたが私達に正の整数を与えることを求めています。 それから私は、実際にユーザから整数を取得しようとします。 しかし、ここでの操作の順序の点で、なぜなら 条件はここでダウンしている間、私はその後、チェックするつもりだ、nは 1未満? したがって、ユーザーと仮定 - この方法で求められた後 - 値0の型。 この条件は、trueまたはfalseになるだろうか? まあ、それは実際に本当のことになるだろう。 ので、nは0であり、0が1未満です。 だからそれは何を意味するのでしょうか? 再びそれを行う。 再びそれを行う。 再びそれを行う。 一度だけ、その条件がfalseと評価されます。 私は42で入力した場合。 ノーまあ、42は1未満ではありません。 したがって、このループは、実行が終了しています。 それで、その時点では、プログラムは、感謝を言うだろう この場合は42、。 今、あなたは自分自身を表現するこの方法を持っていること - これが終了するのを我々は待つべきではありません。 これは、いくつかの時間がかかるだろう。 多分、次回つづく。 しかし、今、あなたは、うまくいけば理解する能力を持っている オタクユーモアのビット。 謝罪。 これは、計算機科学にユーモアを表すものではありません 世界が、それはかわいいです。 それに関連して(笑)レッツエンド。 そして、我々は月曜日にお会いしましょう​​。 [拍手]