>> DAVID Jマラン：すべて 右、これはCS50です。
そして、これは明らかに金曜日です。
そして、これは1週間の終わりです。
ですから、私たちはオフに左ことを思い出して、 ある種の接戦と最後の時間、。
これにより、我々はありませんことを、この嘘を公開 あなたが成長して教えられてきたかは重要
で、10で割った1ではなく、アップ 事実、0.1または0.100または0.10000。
実際には、我々はこれをコンパイルした場合 プログラム、私たちが、昨日のように、
不正確を行い、その後、 、ドット、スラッシュ、不正確を行います
我々は、これは何であることを学びました 図1は、実際には10で割った値。
だから、実際にはかなりの場合ではありません。
しかし、これは、いくつかをほのめかすん コンピュータの基本的な制限。
そして実際、間 私たちがやろうとしているもの
今日はこれを持っている理由を見ています 起こった、これは持っているものの影響、
人類は失敗しましたか いくつかの非常にこれを把握します
深刻situations-- 結果
非常に悲劇的なされています またexpensive--と
どのように我々を見てみましょう 実際に守ることができます
制限これらの種類に対して。
そう直感的に、おそらく、 なぜ1は、10で割って、
私のコンピュータに応じて ここでは、だけではなく、1月10日、0.10？
うん。
どう思いますか？
>> 聴衆：基数が違うのですか？
>> DAVID Jマラン：何ですか？
ああ、基数は違うのですか？
だから、かなりありません。
それは実際にはよりです ハードウェアの基本。
その他の考えですか？
うん。
聴衆：彼ら 異なる数値を表しますか？
DAVID Jマラン：だからthey--右。
彼らは異なった数を表します。
不正確、明らかに。
、まあis--だから 異なったものとは？
それとも誰から？
会社から？
聴衆：うん。
彼らは、小数点を使用しません [聞こえない]にシステム。
DAVID Jマラン：OK。
だからある意味で、彼らはしないでください 十進法を使用しています。
ボンネットの下に、 すべては、確かに、バイナリで、
それは実際には、関連です。
しかし、それも簡単です それより説明。
うん。
>> 聴衆：彼ら 唯一の非常に多くのビットを有します。
彼らは、特定のまで保存することができます 程度、小数と同じように。
>> DAVID Jマラン：うん。
これは、実際にそれになっているものです。
これは、そのコンピュータが判明 通常は、常に唯一の意志
情報の有限量を使用 何かを表現します。
右？
結局のところ、我々は固定されています ハードディスク領域の量。
私たちは、一定量を持っています RAM、またはコンピュータのメモリ。
そして、あなたが持っている場合にのみ、 何かの一定量、
きっとあなたは、実際にカウントアップすることはできません 無限大またはあなたが望む任意の番号に。
あなたは、一種のに持っています 選んで、どのような範囲を選択
値のあなたはサポートするつもりです。
>> だから例えば、週または2 前、私たちは、ASCIIの話をするとき、
私たちは約8ビットを話しました、 またはバイト、いわば、
我々は可能性が最大の数 8ビットで表現するものでしたか？
255。
そして、私たちは256の合計値を表すことができます しかし、我々はそれらのいずれかを過ごすない場合
まあ0--のが、我々の場合 0にそれらのいずれかを過ごします、
その後、最大の数 もちろん、255です。
>> だから、これがあること、が判明 この文脈ではあまりに場合​​、。
我々は前回、話し始め、 浮動小数点数は約います
で、整数とは異なります 彼らは小数点を持っていること
そして、うまくいけば、いくつかの数字 その後、彼らはあまりにもあります。
コンピュータがのみ一般的に起こっています 32ビット、多分64ビットを使用します
浮動小数点値を表現します。
だから私たちは育ったにも関わらず、 数学を学び、知ること
あなたは絶対に持つことができること 数字の無限の数
小数点以下のではなく、 あなたは有限のメモリを持っている場合。
あなたは、一種の、四捨五入する必要があり、 またはピックアップし、選択します
数字はあなたが表すようになるだろう。
だから、あなたはある意味で、考えることができ、 これは、コンピュータの最も近いという
その値の1/10に近似 それはちょうど32かそこらビットで、取得することができます。
そして、それはちょうど1/10ではありません。
>> 例えば、私はこれを変更した場合 私たちが考える1/3は、さらに簡単です。
だから、1〜3で割りました。
私は、ファイルを保存してみましょう。
私が先に行くと、それを再コンパイルしてみましょう。
そして、私はそれを再実行してみましょう。
ここでも、どうやら、1/3は0.3ではありません して、3者の無限の数
その後。
あなたは最後に、この不正確さを持っています。
だから我々人間が正しいか、どのような あなたは正しい、実際には、ISを学びました、
しかし我々は、最大バンピングしています いくつかの制限に対して。
>> そして、私が考えたもの 我々は、現在と思い始めています
率直に言って、を見て この悲劇的な結果
時には、とき人類 全く実装されていません。
この現実と、これらの制限のために。
そして、我々はビネットのシリーズを参照してくださいよ かかるヒストリーチャンネルから
物事がうまく行っているかを見て。
それは、約8分の長です 私たちは、この後に戻ってきます
そして、正確に見てみましょう 他に何が間違って行くことができます。
我々はlights--を暗くすることができれば
>> [ビデオ再生]
>> -Computers、我々はすべて受け入れるようになってきました 頻繁にイライラすることの問題
彼らと一緒に行きます。
バグ、ウイルス、およびソフトウェア グリッチは、小さな価格です
便宜のために支払います。
しかし、ハイテク、高速 軍事と宇宙プログラムアプリケーション、
できる最小の問題 災​​害に拡大します。
1996年6月4日には、科学者が用意します 無人アリアン5ロケットを起動します。
それは科学的運んでいました 衛星設計
正確にどのように確立します 地球の磁場の相互作用
太陽風と。
ロケットがために建てられました 欧州宇宙機関
その施設からリフトオフ フランス領ギアナの海岸に。
>> - そして、約30秒に フライト、最初に彼ら
何かが間違っているつもりだった気づきました。
ノズルが旋回していることが 方法で彼らは本当にいけません。
飛行中に40秒付近、 明らかに車両がトラブルにありました、
彼らが作ったとき、それはです それを破壊することを決定。
レンジ安全管理者と 驚異的な根性はボタンを押し、
それができたの前にロケットを爆破 公共の安全に危険になります。
>> - これは処女でした アリアン5の航海、
その破壊がかかりました なぜなら傷の場所
ロケットのソフトウェアに組み込まれ。
上-The問題 アリアンはそれがありました
必要な数でした 表現するために64ビット、
彼は変換したいです それ16ビット数に。
彼らは数と仮定 非常に大きいことを行っていませんでした、
その中で、これらの数字のほとんど 64ビット数が0でした。
彼らは間違っていました。
>> 1の-Theできません 受け入れるようにソフトウェアプログラム
によって生成された番号の種類 別のは、障害の根本にありました。
ソフトウェア開発はなっていました 新技術の非常に高価一部。
アリアン4ロケットは非常にされていました ソフトウェアの成功、そんなに
それがまたあったために作成さ アリアン5で使用されます。
>> -The基本的な問題は、アリアンました 図5は、早かったより速く加速しました。
そして、ソフトウェアはいませんでした そのために占めています。
>> ロケットの-The破壊 巨大な金融災害でした、
分のソフトウェア・エラーに起因するすべて。
しかし、これは最初ではなかったです 時間データの変換の問題
現代のロケット技術を悩ませていました。
>> 開始と、1991 -in 第一次湾岸戦争の、
パトリオット・ミサイル 似たようなものを経験しました
番号変換の問題。
その結果、28人、 28アメリカ兵
殺された程度 100他の人が負傷し、
ときになっていたパトリオット、 着信scudsから保護するために、
ミサイルを発射することができませんでした。
>> -Whenイラクはクウェートとアメリカを侵略 初期の1991年に砂漠の嵐を立ち上げ、
パトリオットミサイル電池が配備されました サウジアラビアとイスラエルを守るために
イラクのスカッドミサイル攻撃から。
パトリオットは、米国、中距離であります 表面 - 空気システム
レイセオン社製。
>> パトリオット迎撃の-Theサイズ、 それ自体は、約20フィートの長さ、についてです。
そして、それは約2000ポンドの重さ。
そして、それはabout--の弾頭を運びます 私はそれがおよそ150ポンドだと思います。
そして弾頭、それ自体、 高性能爆薬です、
それの周りの断片があります。
弾頭のケーシングであります 散弾のよ​​うに動作するように設計。
>> -Theミサイルがあります 4コンテナあたり、実施、
そして、セミトレーラーで輸送されています。
>> -Theパトリオット反ミサイルシステム 今20年以上さかのぼります。
これはもともと設計されました 防空ミサイルなど
敵の飛行機を撃墜します。
第一次湾岸戦争では、 その戦争が一緒に来たときに、
陸軍はそれを使用したいです scudsではなく、飛行機を撃墜。
イラクの強制ではありませんでした 問題のあまり、
しかし軍はscuds心配していました。
だから彼らがしようとしました パトリオットをアップグレードします。
>> 敵を-Intercepting マッハ5で走行ミサイル
十分に挑戦するつもりでした。
しかし、時パトリオット サービスに突入して、
陸軍は、知りませんでした 作られたイラクの変更
そのscudsヒットすることはほぼ不可能。
>> - 何が、起こったことscudsです で来ていた、不安定で、
彼らはウォブリングされました。
その理由、 ためには、イラク人でした
外の600キロを取得します 300キロのミサイル、
フロント弾頭のうち、重量を取りました そして、弾頭を軽量化。
だから今、パトリオットのが来るようにしよう スカッドであり、ほとんどの時間、
の圧倒的多数 時間、それだけでスカッドによって飛んでいくのです。
>> パトリオットシステムオペレータ-once パトリオットは、そのターゲットを逃し実現し、
彼らは、パトリオットの弾頭を爆発させ、 それならば可能な死傷者を避けるために
地面に落下させました。
>> - つまりは、ほとんどの人が見たものでした 空にはそれらの大きい火の玉、
とと誤解 スカッド弾頭のインターセプト。
夜が、 空、ペイトリオッツが登場
正常にすることが ダーランで、scudsを破壊し、
間違いがない可能性が そのパフォーマンスについて。
そこでは、パトリオットのレーダーシステム 着信スカッドのトラックを失いました、
そして、立ち上げたことはありません ソフトウェアの欠陥に起因します。
これは、最初に発見したイスラエル人を 長いシステムがオンになっていること、
長い時間の不一致 、埋め込まれたクロックに起因になりました
システムのコンピュータです。
>> -About 2週間前 ダーランで悲劇、
イスラエルはに報告 国防総省、
システムが時間を失ったこと、 その実行中の約8時間後に、
彼らは、システムがあったことに気づきました 著しく少ない正確​​になってきて。
国防総省はで対応 パトリオット電池のすべてを伝えます
システムのままにしないように 長い時間のために。
彼らは長い時間が何であったか言ったことはありません。
8時間？
10時間？
1000時間？
誰も知りませんでした。
-Theパトリオットバッテリー 兵舎に駐屯
ダーラン、その欠陥のある内部に 、100時間以上のクロックされていました
2月25日の夜に。
>> - それは正確さに時間を追跡しました 約1/10秒のの。
今すぐ1/10秒のです 興味深い数
それができないため、 正確には、2進数で表します。
どの意味、それができません 表現することが、正確に、
現代の任意のデジタルコンピュータです。
それは信じがたいですが、 例として、これを使用しています。
番号、1/3を見てみましょう。
1/3を表現することができません 小数で、正確に。
1/3は、無限大のために起こって0.333です。
それをする方法はと、ありません 小数で絶対精度、。
それはまさに同じようなものです パトリオットで起こった問題。
長いシステムが実行されました、 悪化時エラーになりました。
>> 操作の100時間、エラー-after 時間内にわずかに約1/3秒のでした。
しかし、ターゲットの面で ミサイルマッハ5で走行し、
それは追跡をもたらし 600メートル以上のエラーが発生しました。
それは致命的なエラーになります ダーランで兵士のため。
>> - 何が、起こったスカッド発射だったです 早期警戒衛星によって検出さ
彼らはスカッドがあったことを新しいです 彼らの一般的な方向に来ます。
それは来ていたどこに彼らは知りませんでした。
>> - それは、レーダーまでになりました パトリオットシステムの構成要素、
見つけ、維持するために、ダーランを擁護 入ってくる敵のミサイルの軌道。
>> -Theレーダーは非常にスマートでした。
それは実際に追跡するだろう スカッドの位置
して、どこを予測 それはおそらくだろう、
次回、 レーダーはアウトパルスを送りました。
それはレンジゲートと呼ばれていました。
>> パトリオット一度-Then、 十分な時間をしていることを決定
戻って、次を確認するために渡されました この検出された物体の位置、
それが戻って行きます。
だから、間違ったに戻ったとき、 場所は、それが次に何のオブジェクトを見ていません
それが全く存在しないと判断します オブジェクト、それが誤検出でした、
トラックを削除します。
着信スカッドは消失しました レーダー画面から、
秒後に、それ 兵舎に激突。
スカッドは28を殺し、最後でした 1は、第一次湾岸戦争中に発射しました。
悲劇的に、更新されたソフトウェア 翌日ダーランに到着しました。
ソフトウェアの欠陥がありました 、閉鎖を修正されて
問題を抱えた中の1つの章 パトリオットミサイルの歴史。
>> [END再生]
>> DAVID Jマラン：だから、私たちは見てみましょう 少しだけで、いくつかの同様の制限。
しかし、最初に、してみましょう 数への移行は参考です。
この週末選ぶ - だから、そこに スーパーセクションとなり、
取って代わることを意図されています 定期的にスケジュールされたセクション、どの
したがって、週に起動します。
CS50のウェブサイトを見てみましょう それらの詳細については。
また、撮影やストリーミングされます 出席できない人のために住んでいます。
問題は、上にある1を設定 既にコースのウェブサイト、
私たちは見てみましょう ほんの少しのもの。
また、営業時間もかかります 木曜日までこの月曜日を配置します。
>> だから、これは最も標準的なでした 我々は最後の時間を見てプログラム。
それは最も簡単なようなものです あなたがC言語で書くことができるプログラム、
さらには、それは大胆な主張のビットです。
右？
がたくさんあり​​ますので これに複雑さを思わ。
それでは、簡単に見てみましょう 何これらの要素の一部
提供するために試行したと 方法のためのメンタルモデル
プログラムのこれらの最も簡単な 仕事、その後、私たちは始めましょう
これまで以上に複雑なものを見ています。
そこでここでは、この行は、現在ハイライト表示さ​​れ 黄色で、我々は最後の時間、何を言いました、
これが私たちのためにしていますか？
それが役立つ目的は何ですか？
遠く後ろから誰ですか？
うん。
>> 聴衆：[聞こえません]
DAVID Jマラン：良いです。
だから、あなたのアクセスを提供します コマンドに、またはしてみましょう
それらを呼び出す機能、誰か 他に宣言されていること、書きました、
ので、いくつかの他のファイルに、話します。
だから我々はまさに.hファイルが表示されます 最終的には、.cファイルに対してです。
しかし、今のところ、ちょうど知っています そのprintf関数、例えば、
されている機能の中で どこかで、他のいくつかのファイルで宣言
クラウドのハードドライブ上の他のもの 私たちはprintf関数にアクセスし、それを使用することができます
再発明することなく それは自分自身をホイール。
一方、メイン。
メイン、先週のアナログは何でしたか？
うん。
>> 聴衆：グリーンフラグをクリックします。
>> DAVID Jマラン：うん。
スクラッチの、緑色のフラグがクリックされたとき。
これは、パズルのピースのようなものです それは、物事をキックオフ。
だから同じように、世界を行いました 、C言語で何年か前にそのことを決めました
他の言語の束、 あなたがプログラムを書きたい場合は、
あなたの最初の関数 メイン、と呼ばれることがあります。
そして、それはこのようにする必要があります。
しかし、我々は戻ってくるだろう、 別の時間、何のために、int型、
そして、ボイドが、そのコンテキストで意味します。
ここでは、中括弧は親切です スクラッチのパズルのピースのような形状
それは、行のいくつかの数をカプセル化します。
そして、ラインの間 ここで、ここでこの1です。
printf関数は、その目的関数です 人生は、フォーマットされた文字列を印刷することです。
、フォーマットによって、私はあなたを意味します プレースホルダの値をプラグインすることができ、
あなたはどのように多くの小数点を指定することができます ポイントは、どのように多くの数字を印刷します
小数点などの後。
そして、printf関数は、もちろん、1を取ります 以上の引数やパラメータ、
そうでなければ入力として、より簡単に、知ら。
>> たくさんの好きなので、printfの 関数は、入力を取ります。
そして、それらの入力が包含されます ここでは、2つのカッコで。
そして、それらの中に1が入力されます。
それは我々がそれを呼ばれてきたように、文字列ですが、 文字だけの配列があり、
ワード、フレーズ、または全体のような 二重引用符の間にエッセイであっても、。
そして、それは影響を与えるために何が起こっているのです printf関数の動作のため、当然のことながら、
それだけで、一般的な印刷機能です。
それは何を知っていることはないだろう あなたがそれを指示しない限り、印刷します。
そして、いくつかの特徴点。
我々は、この奇妙な何を言ったの シンボルのシーケンスはありますか？
うん。
>> 聴衆：改行。
>> DAVID Jマラン：改行。
だから、判明し、あなただけの、ヒットすることはできません あなたがプログラムを書いているときに、入力します。
一般的に、コンパイラは、取得しようとしています あなたは何を意味するかのように少し混乱。
むしろ、あなたは文字通りに持っています ここで私に新しい行を与える、と言います。
だから/ nが、一般的に私たちです エスケープ文字を呼び出します。
だからnは、新しい行のため。
そして、コンパイラが知っています 、それは見ている/ nは
それは実際にコンピュータを誘導する必要があり、 最終的に、またはprintfの、この場合には、
実際の新しいを印刷します 、Enterキーを押すような行、
キーボードのキーを押します。
そして最後に、我々は何を言ったの 構文のこの作品は、のためにあるのですか？
それは何を表しているのでしょうか？
うん。
>> 聴衆：[聞こえません]
>> DAVID Jマラン：それだけです 行の終わり。
これは、文の終わりです。
そして、私たちがいないことを認識 どこでもそれらを置きます。
我々は確かにそれらを入れていません すべての行の両端に。
たとえば、上のどれもありません 最初の行、どれもライン上にありません
メイン、と、どれもありません 中括弧の後に、
しかし、あなたは見て取得することから始めましょう それがために呼ばれていますどこに精通しています。
そして、それは関数の後、ほとんどの場合です いくつかのアクションは、電話またはステートメント
あなたが実際に取っていること。
>> そして、特に場合は、今知っています 少ない快適なものの中で、
これらは愚かなものの種類があります あなたが誤って叩いて終わるだろうということ
壁にあなたの頭の上に。
あなたは論理的になるだろうので、 いくつかの問題に自信
あなたは問題のために解決してきました セット、ちょうどこいつ
コンパイル、あるいは実行されません。
だから多くの場合、早い段階で、それがために起こっています あなたは括弧を逃したためです、
または、セミコロンを逃しました。
そして、これだけ注意して 物事のこれらの種類の、
とによってイライラしないようにしよう 彼らは非常に迅速にこれを行いますので、
古い帽子になります。
しかし、それは得ることは非常に簡単です 結果として、早い段階で挫折。
>> だから今、のは、どのように見てみましょう この行は、実際に働いています
して、少し見て より複雑なもの。
だから我々は、以上のここにあります この画面に描画する機能。
そして、仮定しよう これは私のコンピュータの画面で、
私は、ハロープログラムを書いています、 私は、printfのを実装していません。
他の誰かが、printfのを実施しています。
誰がと主張したいと思います 、printfのを実装していますか？
我々は可能性がある場合？
すべての権利、あなたの名前は何ですか？
>> 学生1：[？コパル。 ？]
>> DAVID Jマラン：コパルは、アップに来ます。
アップさあ。
大丈夫。
だから我々は、ここでは、いくつかの名前タグを持っています、 我々はこれを少しゲームを作ってあげるためです。
そして、私たちはprintfの、あなたを呼び出します。
そして、あなたはここに来たい場合は、 私はちょうど、画面に描かれてきました、
それは私は、これは、あります、非常に単純です。
>> すべての権利なので、こんにちは、私の名前は、 printfの、あなたはそれを置くしたいと思います。
大丈夫。
そして、あなたは、スタンドに行くことができれば コンピュータの画面によって
あなたはその関数であるかのように このコンピュータシステムに付属。
そして、生活の中であなたの目的は、 実際に何かを印刷します。
しかし、プログラムのような多くの我々 ちょうどここで、画面上に持っていました、
我々はする必要があるとしています 実際にあなたにいくつかの入力を与えます。
>> だから、私の入力ならば、ここでは、あります 明らかに、何がprintf関数に渡され、
のは、一種のこのようにそれをモックアップしましょう​​。
私は、文字通りに書くつもりです 一枚の紙、「こんにちは、世界、 "
バックスラッシュN.そして明確にするために、どのような 私はこの紙に描かれてきました、
このようになります。
だから私はこのプログラムを実行し、このとき コー​​ドの黄色のラインが実行されます、
それは私、ハロープログラムかのようです、 機能にいくつかの入力をハンドオフしています
誰か他の人が書きました。
>> そして、あなたの場合、あなたの指で、 実際にできた、あなたの指で、
画面に描画何でも それはあなたが渡されてきたが、
効果は、最終的に、です 正確には、画面上を参照してください。
そして、ここでリトルコーナーケース。
そして、良い、我々は表示されません この時点で、新しい行、。
それはあなたのために正しくないだろう 明示的に改​​行を描画します。
しかし、我々は上の言葉を書いて守れば 画面には、彼らがその下に終わるだろう。
>> だから、どうもありがとうございましたが、スティック この辺りに一つだけちょっと。
我々は現在、他のいずれかが必要 ボランティア、私たちがすることができれば、
それは役割を果たしている必要になるだろう それはオーケストラで唯一の人ですof--
たった今。
どのように[OK]をabout--。
ここ。
アップさあ。
あなたの名前は何ですか？
>> 学生2：[？ Ivay。 ？]
DAVID Jマラン：申し訳ありませんか？
学生2：[？ Ivay。 ？]
DAVID Jマラン：イーサンは、アップに来ます。
なし？
私も、その間違ったを取得しました あなたはそれを2回言った後？
アップさあ。
それはここに聞くことは難しいです。
OK。
そして、私は申し訳ありませんが、あなたの名前は何ですか？
>> 学生2：[？ Ivay。 ？]
>> [？ DAVID Jマラン：Ivay。 ？] OK。
今のところ、あなたがしなければありません 心、あなたはのgetStringています。
>> 学生2：[OK]をクリックします。
クール。
DAVID Jマラン：だから希望の場合は ちょっとここに立って、
それでは、少し見てみましょう それより複雑なプログラム、
今3行のコードがあります。
だから我々は、1、持って使用してあなたの名前を述べます printf関数; 2、のGetStringを呼び出し、
への割り当てが続きます 文字列変数sを、と呼ばれる、またはsと呼ばれます。
して、printf関数に別の呼び出し、 しかし、2つの入力を使用してこの時間。
>> だから我々はすでにやった状態 あなたの名前、またはむしろ、我々ました
既にprintfの呼び出しを行います。
だから私はあなたの名前を状態、書くつもりです。
だから、私はするつもりだもの 一瞬で、printfの、渡します、
これは、非常に単純です。
ですから、先に行くとこれを描きたい場合 画面上で、それが今、あなたの入力です。
大丈夫。
そして、我々が今持っている、文字列を忘れます ここでのコードの私たち自身のライン。
だからのGetString、で、我々が必要とします 実際に、のGetStringを呼び出します。
だから、生活の中であなたの目的はただ歩くことです オーケストラに出て、あなたができれば、
そして、誰かの名前を取得します。
しかし、ここではあなたを与えてみましょう それを置くために何か。
あなたがしたい場合は、行きます 先に、文字列を取得し、
その上で誰かの名前を取得 一枚の紙、あなたができれば。
>> 大丈夫。
そして、私たちは、一瞬で、表示されます 名前は私たちが取得しています。
その間、私はに何をつもりです 準備して、空白の作品です
紙、ここで、私は行きますよ どのような値にそれを保存します
GetStringが私に戻っているということです、 I、S、と呼ばれる文字列変数です。
大丈夫。
だから、ここで何がありますか？
ニック。
大丈夫。
そこで、ここではニックの名前を持っています。
だから、これはどのような文字通り 返されました
私には、そうのGetStringにより、話します。
>> 私は、今、するつもりです 左側の実行
私は単にその式の 今日の目的、ニックのために、ダウンしてコピーします。
だから今、私は、変数を持っています 呼ばれ、ニックの名前を格納する、です。
私はすでにに手渡しました printfの、前の引数。
しかし、私たちの3番目と最後の行に コー​​ドは、私は実際に手に持っているのprintf
何か少しdifferent-- 「こんにちは、％sを、「バックスラッシュnを。
>> だから、私は行くよ、最後の行 私は最後のものをsend--します
今ダウン書くつもり、これです。
だから、2行のコード、または コー​​ドの最後の行ではなく、
2 inputs--のためのコール 1、この、および2つ、これ。
私たちのprintf関数は、もしそうであれば 今、入力としてこれらを取ることができ、
私はあなたのために画面をクリアしましょう​​。
実際には、あなたが先に行くことができます。
私たちは、以来、それを残しておきます それは、同じプログラム上です。
私たちは、こんにちは、ニックが表示されるはずです。
大丈夫。
だから、これはかなりの数でした ちょうど、通じジャンプするフープ
書くために、あなたを述べます 、こんにちは、ニックに名前を付け、。
しかし、メッセージパッシングのこのシンプルなアイデア、 入力渡すと出力の受信、
我々が持っているとしている正確なモデルであります 最も複雑な機能のために。
だから両方にそんなにありがとう。
我々は、素敵なストレスを持っています ここにあなたのためのボール。
そして、私たちのGetStringをお願い致します 同様とprintfのボランティア。
ありがとう。
大丈夫。
あなたの両方に感謝します。
>> だから私たちは話してきました これまで、主に文字列に関する。
そして、それは、Cが実際にできることが判明しました いくつかの異なるデータ型を理解しています。
実際には、のは見てみましょう ここではこれらを見て。
そこで、C、および言語の多くは、 文字と呼ばれるものを理解しています。
チャーは、一般に シングルバイト、または8ビット。
そして、それは、単一の文字を表し、 文字A、または資本金のような
文字A、または小文字 、または感嘆符、
あなたが入力するか、任意の文字 キーボード、時にはそれ以上。
また、浮動小数点数を見ることが起こります。
フロートは、一般に、aは 32ビット値、または4バイト
再びので、1バイトは8ビットです。
>> そのようにフロートの浮動小数点値であり、 小数点で何か。
そして実際、それは何です 映画は話していました
彼らは浮動について話したときについて ポイント値、ビットのいくつかの固定された数
実数を表すために使用されています。
しかし、また、ダブルスと呼ばれるものがあります。
これらは、Javaに存在し、 あなたがAPCS撮影した場合、
ありがたいことに名前として、ダブル 示唆、フロートの倍の大きさです。
それはまだ実数です、 それはちょうどより多くのビットを持っています
これで、これまで以上に正確に またはさらに大きな数を格納します。
int型は簡単です。
私たちは、その最後の時間について話しました。
それはちょうど整数です。
そして、それは一般的に32です ビット、または4バイト。
>> だから、あなたが持っている場合は、今度は見てみましょう 32 bits--、我々は0週でこれをやりました、
あなたが持っている場合は、これまでそうbriefly-- 32ビット、最大のものです
あなたは整数として表現できる数？
与えるか、または取りますか？
これは、40億のようなものです それは私たちがしている場合にのみです
唯一の正の数を表します。
あなたは32ビットを持っている、あなたがしたい場合は 同様に負の数を表し、
あなたの範囲は、基本的に、負であります 正2000000000から2000000000。
しかし、一般的に、私たちは始めましょう 0で40億に上がります。
>> あなたは正確に知っている必要はありませんが、 ちょうど私があれば、私たちは、実際には、これを見ることができます
ここで、ちょっと電卓を開きます。
私は、2 32を行うことができますし、 それは正確にどのように大きなです、
どのように多くの値のことができます。 32ビットで表します。
そして、それはおよそ40億です。
だから我々はその数を見ておこう いくつかの異なる場所です。
しかし、あなたは、より長い必要がある場合 それより数、
それはそこのが判明 何かが長い長いと呼ばれます。
そして、長い長いです 一般的にこれは64ビット、
それは大きさの順であることを意味し int型よりもさらに大きな。
>> だから私も最大の発音ができません あなたが表現できる数、
それが顕著に大きいです。
さて余談として、歴史的に、 intは32ビットである場合、
そして長い長いか、64ビットであり、 ビッグは、長い長い、長くはないのですか？
あなたはそれがintより長いだと思うだろう 多分あまり長い長い長いよりも、
それは実際に依存しています。
>> そしてそれは1が判明 あまりにも欲求不満の、
特定のシステムでコードを書くと、 これらのデータ・タイプのものではないすべてであります
予め定められた値を有します。
場合によっては、このビット数です。
時にはそれは、多くのビットということです。
ですから、実際に知っている必要があり、 時には、どのようなハードウェア
あなたは上でソフトウェアを実行しています。
ありがたいことに、他の言語や 今存在する他のデータ型、
あなたがより正確にすることができます。
まあ、我々は文字列を見て、 我々はあまりにも、ブール値を見て、
それはそれらが来る判明します のみCS50ライブラリと。
だから、それらが構築されていません C.にそれらの代わりに、
呼ばれる、そのファイルに来ます CS50.h、私たちは最終的にだろうと
の層をバック剥離。
しかし今のところ、彼らはただです 追加のデータ型。
ブール値はtrueまたはfalseであり、A 文字列は文字のシーケンスです、
言葉のように。
今のprintf、我々が見てきた、い プレースホルダは、％sが1です。
そして、あなたは、今、できるかもしれません どのように、これらの他の例から推測
あなたはプレースホルダを持つことができます 異なるデータ型のため。
あなた例えば、もし、推測を取ります 使用して単一の文字を印刷したいです
printf関数は、プレースホルダは、おそらく％cです。
そして、あなたがプリントアウトしたい場合 プレースホルダは、％Iと整数。
％のLLDは、長い長い10進値です しかし、長い長い、それはそれにマッピングさそう。
そして、％F浮動用 ポイント値や二重のために、
だから時には彼らは再利用しています 異なる文脈インチ
だから我々は見て使用します 時間をかけてそれらのいくつか。
printf関数と他の機能と 他人のエスケープシーケンスをサポートし、
時には、これらが必要です。
だから、バックスラッシュnが新しいラインです。
バックスラッシュtは、誰にもありません 刺しを取るしたいですか？
聴衆：タブ。
DAVID Jマラン：タブ。
だから、あなたが実際にしたい場合 、タブではなくプリントアウトします
スペースの固定数が、実際の タブ文字は、あなたをヒットしません、
タブ、キーボードのキー、一般的に、 あなたが実際にバックスラッシュtを行います。
バックスラッシュ、二重引用符、 なぜ私が今までそれをしたいですか？
右？
なぜ私は入力できません 私のキーボードの二重引用符？
聴衆： そのため、それ以外の場合は、それはです
それは終わりだと思うつもり あなたの印刷[のような？テキスト。 ？]
>> DAVID Jマラン：その通り。
覚えておいて、私たちと printf関数の例では、ときに我々
入力にprintfのために集めて、 その入力文字列の左側に
その入力の右側に 春はもちろん、二重引用符でした。
独自の入力は、二重されている場合 その途中で引用、
コンピュータは、潜在的かもしれません のように、混乱してしまい、
この二重引用符はありません 真ん中に属していますか？
それは左の1に属していますか？
それは右のいずれかに属していますか？
だから、あなたはそれがスーパーにする場合 明らかに、バックスラッシュ、二重引用符を行います、
それはいわば、エスケープだように、と それは何か他のもののために融合していません。
そして、ここでいくつかの他があります、 バックスラッシュR、単一引用符、0、
我々としても、時間をかけて見ることができること。
そして今、何の機能は？
>> 我々はこれまでに取ることができるようにアクション この言語で、Cは、よく、私たちは見てきました、
printf関数はもちろん、すべての 画面上の他の、
ここで、我々はのために使用しますことを 唯一のコースの最初の数週間、
時CS50ライブラリ来ます。
そして、彼らはに、それははるかに容易になります Cは、実際にユーザー入力を取得します。
これは、Cであることを判明し、 率直に言って、いくつかの言語で、
それが行うには首の本当の痛みです プロンプトユーザーのような単純なもの、
キーボードのために、彼または彼女の入力のために。
だから、これらの機能は、それが容易になります。
>> そしてそれはまた、エラーが発生しました 全体にチェック、
そのように、ときに 水曜日、私たちのリコール
、再試行し、警告を見ました 私は協力しなかったとき、
私は言葉の代わりに、番号を入力しましたか？
我々は早期に力仕事をやりました ユーザーが協力することを確認します。
しかし、これらは単なるトレーニングです 我々は最終的に意志の車輪、
かつ迅速に、離陸。
>> その後、要約するだから、 それでは、簡単に見てみましょう、
私たちはで、スクラッチで行ったのと同じよう C言語でいくつかの標準的な構成物
これは、ソート、ことを意味しています 駆け足です、
ちょうどようにするために、参照を持っています あなたが最初に物事を見てきたこと。
しかし、その後、私たちは実際のコーディングを見てみましょう これらのビルディングブロックの一部を使用しています。
あまりにも多くのスクラッチのように、 我々のようなステートメントを持っていたとき、
C言語で、私たちは持っているん、待って、言いますか printfのような関数だけでなく、。
>> 我々は条件を表現したい場合 C言語で、それは精神で、似ています、
そのパズルピースにその スクラッチでこのように見えました。
しかし、その代わりに、我々 文字通り場合、書き込み。
そして、括弧で、 我々は条件を入れて、
その条件がある場合私たちはよ 、再び、ブール式を呼び出します。
そして再び、これは、擬似コードの一種です。
そして、実際には、//はコメントです。
それは自分自身にちょうど英語の単語です。
しかし、これは一般的です 、もし、状態の構造。
しかし、我々は具体的な表示されます 一瞬の例。
>> あなたが持っているしたい場合は 道路の双方向のフォーク、
私たちは、上の私たちのボランティアで行ったのと同じよう 水曜日は、あなたがそれ以外の場合は、することができます。
そして、あなたは三分の一を持っているしたい場合は 最終的な条件、またはデフォルトの状況、
あなたはそこに、ちょうど他のブロックを持つことができます。
そして同様に、ブール式で、 あなたが一緒にすることができ、および、それら。
そして、私たちは、水曜日に見ています それは、単一のアンパサンドではありません、
その低レベルの理由のために、2の 我々は最終的に見て、一緒にプレイします。
一緒に物事をOR接続 2垂直バーです。
USキーボードでは、この 鍵は、一般に
上記のShiftキーと あなたのEnterキーまたはキーを返します。
>> 次に、これらの事があります 我々は多分一度か二度使用します。
彼らは、機能的に同等です あなたが、もし、他の場合に何を行うことができ、
それ以外の他の場合には、構築、 しかし、彼らはスイッチと呼ばています。
彼らは非常に異なって見えるが、我々はよ 物流コードの一部で見、
設定将来の問題のために、最も可能性の高いです、 それはちょうど、時々きれいだということ
全体を表現する方法 条件の束、
中括弧を多く含むとせず 括弧とインデントがたくさん。
しかし、彼らは私たちにこれ以上を与えません 我々はすでに持っているよりもパワー。
そして今、ループします。
そして、この一つは、私たちは見てみましょう もう少しゆっくりで。
しかし、その後、我々はこれらを使用することから始めましょう、 特に、すでに慣れているため。
信じられないほどなら、これは、標準的な方法です 難解な方法は、Cでループを記述するために
>> 今スクラッチでループがありました かなり簡単。
あなたは、永遠に、ブロックを持っています。
あなたは、繰り返し、ブロックとを持っています あなたが入力する必要がちょうど数。
また、ループのために、あなたができると これらのアイデアの両方を実装し、
それはもう少し技術的です。
しかし、率直に言って、それはまたです 比較的単純な。
あなたは順序を知ったら、 操作、文字通り
値だけをプラグインしようとしています そして何をすべきかをコンピュータに伝えます。
そこでここでは例です。
これはループである、非常に 単に、1印刷数からカウント
別を通して。
そして、ちょうどかすめることで あなたが持っている場合でも、それで
とは経験ありません この言語、どのような数
それはおそらくでカウントを開始しますか？
[OK]を、0。
そして、私はあなたのためです推測しています int型と私があることを参照してください。
どの変数です。
これは、0に初期化されています。
>> そして後に、それは次のようになります 我々は、値をprintfのを渡しています。
そして、実際に、私はここで少しタイプミスをしました。
しかし、それは簡単に固定されます。
私はここで、私の中に追加してみましょう。
現在のprintf幸福を持っています そのプレースホルダの値を渡しました。
そしてを通じてカウントアップするために何が起こっていますか？
聴衆：50。
50。
49。
DAVID Jマラン：49。
だから50は、一見、右のようです。
しかし、結局のところ、あることを行っていること 我々はチェックして私たちの状態。
そして、私たちは一度停止するつもりです 私はもはや50未満ではありません。
したがって、このループ、逆に、すべきです 長い間、私は50未満であるように、実行されます。
しかし、すぐにそれが50、または51になると、 または悪化し、それが自動的に停止する必要があります。
大丈夫。
>> それでは、実際にここになりますか？
だから、これは順序であります forループ操作。
一つは、あなたが持っています 初期いわゆる。
この黄色の強調表示されたチャンク コー​​ドの最初に実行され、
それは、そのあたりの効果を有します 水曜日は、おそらく想像してみてください。
それは、私、それという変数を作成します。 その変数に格納値0。
だから私は、物語の中で、この時点では0です。
>> 次の事その この構築物に起こります、
条件がチェックされることをです。
だから私は、すぐに確認します 私は50未満のですか？
そしてもちろん、答え 今のところ、はい、確かに、です。
はい私は、0であり、ため それは確かに50未満です。
次に何が起こるか、このことです コー​​ドの行が実行されます。
そして、実際には、複数があるかどう これらの中括弧内のコードの行、
それらはすべて次々に実行されます。
>> そして、ここでは有効であり、 どうやら、プリントアウトします
に起こっている番号I、 0であること、およびその後1、次に2。
しかし、なぜ？
なぜそれがインクリメントされますでしょうか？
さて、第四の事その たまたまこの構文ということです
セミコロンの後、実行されます。
私は++というのが簡単な方法です。 iの値を取り、それに1を追加します。
して、周りの次回は、追加します それまで1。そして、周り次回、
それに1を追加します。
>> だから我々は続ける場合、 何が起こるだろう
次の私はするつもりはないされています 私は二度と初期化します。
私は初期化保持していた場合 iを0に、この例
ので、決して終わらないだろう 私は0で立ち往生されることになります。
しかし、何が起こっていことです 条件がチェックされることを、
コー​​ドの行が実行されてしまいます、 私はインクリメントされ、
条件がチェックされます、 コー​​ドが実行されてしまいます。
そして、それは再びサイクリングを保持し、 そして再び、そして再び、
私まで++ 50の値を誘導します。
>> 条件はその後、言います 50以上50未満のですか？
答えは、もちろん、無であり、そして だから全体のコードが実行を停止します。
そして、あなたは、画面上でより多くのコードがある場合 下方に、それは次に何が起こるかです。
それは、これらの中括弧の外にポップし、 その後、よりを印刷し続けています。
>> だから、フォックストロットから今ジョーク、その あなたはおそらく、今理解します。
それはいつも面白いです。
それは笑うようなものです 種類の浸透、
して、あなたはいけない実現します このようなユーモアで笑いします。
しかし、いくつかのお持ち帰りがあります ここでは、教育学、あまりにも。
だから、私はことが判明 構文の一部が欠落し、
またはフォックストロットのは行方不明 ここでは、構文の一部。
私たちが持っていたことを、欠けています 他のすべての例では、これまで？
そう、そこにある、戻ります それは何か他のものです、
我々の前にlongに戻ってくること。
何が不足しています、しかし？
うん。
>> 聴衆： [聞こえない]の初期化。
>> DAVID Jマラン：OK。
そうそう。
だから実際には、これはまあis--、 そしてカウントが初期化されます
上記アップ、またはむしろ、上記アップ宣言しました。
これはそれを行うための別の方法があります。
ではなく、1行でそれはしかし有効です。
どのようにここでは？
>> 聴衆：それは中括弧ですか？
>> DAVID Jマラン：うん。
だから、中括弧が欠落しています。
しかし、このコードは、私は彼らの名誉のために、意味します、 実際、構文的に有効です。
それは結局のところ、あなたはしないでください 中括弧を必要とします
あなただけの1行のコードを持っている場合に あなたは、ループの内部で実行します。
今、私たちは常に、クラスやで 物流コードのすべて、
中括弧を含めます とにかく、ちょうど明確さのために。
しかし、教科書にそれを実現 オンライン例、
あなたは非常によくカーリー表示される場合があり いつか不足している中括弧。
そして、それは、[OK]を何場合 インデントと意図しています
コー​​ドの1行だけではなく、 潜在的に複数行のコード、。
大丈夫。
の問題に非常に関連しました 不正確は、オーバーフローの問題であり、
その意味では、同様に、 整数は、それらには限界がありますか
ちょうど浮動小数点値のような？
世界では、浮動小数点 値は、我々は、そのように正確にすることができます
時々、これは後に 悪いことが起こることができ、
私たちのプログラムは、バギー、エラーをすることができます。
今でも整数で、 あなたが問題に実行することができます。
今整数はありません 小数点以下またはそれの後の数字。
それは、典型的には、単に自然数です。
それでは、int型と間違って行くことができますか？
私はにint型を使用している場合 間違って行くことができるもの、カウント？
多くの単純なようです。
うん。
>> 聴衆：もし 数が取得[聞こえません]
>> DAVID Jマラン：うん。
あなたは、非常に高い数えますその場合はどう その本当に大きな数を表現することはできません。
右？
ある時点で、あなたが行っています 境界を超え
32ビット値または64ビット値の。
ここでもう一度、私はどのようにわかりません 64ビット値を発音します、
私は32ビットの整数で知っています、 それができる最大値は、
それが唯一の肯定的な場合 値は、およそ40億です。
だから私は50億にカウントしようとした場合、 何かが起こるだろう。
しかし、ここでは、実際には、何が起こるか、見てみましょう。
整数の世界では 意味でオーバーフロー、あなた、
の容量をオーバーフロー 整数、何が起こるのでしょうか？
>> そこでここでは2進数ですが、 それが0に先祖返りです。
これは、すべての1の、およびプレースホルダです そこに、2の累乗です、
これはバイナリです。
したがって、これらは、画面上の8、1ビットです。
そして、あなたが思い出す場合や あなたはすぐに計算を行います、
どのような値が示されています ここではこれら8つの1ビットで？
255。
そして、あなたはかなり確実ではなかった場合でも、 数学の、あなたはそれを行うことができます。
それとも、ただ親切でし 理由のそれを通じて、
私は場合は、数分待ちます 8ビット値を表します
私は、256の可能な値を持っています、 しかし、最初は0であります
私はことを知っています 最大は255になるだろう、
それはこの1つがあるかもしれないものです。
>> だから私はこの値に1を追加しようとします。
あなたは学年で何をするだろう 学校1を加算し、その時
本当にために収まりません あなたは1を運ぶために持っていますか？
何この数が起こっています あなたが1を追加したときになるには？
これは、0になることだろう。
右？
あなたがより多くのbits--持っていた場合ので、私はよ 種類の、here--それを入力し、してみてください
我々はより多くのビットを持っていた場合、私たち 1を追加され、ここで行うことができ、
し、我々はこれを取得したいです。
おっと。
我々はすべての方法ここにかけて1ビットを持っていると思います。
>> しかし、これは有限である場合 値は、それは8ビットのみですが、
そしてそれは、所定の情報 コンピュータによって、
1が効果的ではないこと。
それはちょうど種類の崖から落ちます。
だから、あなたが255に1を追加した場合、どのような あなたは明らかに値を得るのですか？
0。
そして偶然の数字ので、 おそらく、意図せずに、
このように折り返してしまいます。
それでは、これを含意することができますか？
まあ、いくつかの異なるものがあります。
そこで一つは、それが見て終わるん 0のように、意図せずに、
しかし、あなたは一種の見ることができ、 でも、現実の世界では、
良くも悪くものために、 制限のこの考え方の現れ。
あなたのインスタンスのために、あらゆる人 レゴスターウォーズは、これまで演じてきました、
誰もが知っていることが起こるん 硬貨の最大数
あなたはレゴスターウォーズに集めることができますか？
基づく推測を取ります 今日有数の質問。
それは、256または255よりも大きいです。
それは40億です。
だから、判明し、 いくつかのpeople--があります
いくつかのグーグルで確認された最後のnight-- 40億金貨を得ています、
またはその他もろもろ、レゴスター・ウォーズインチ
明らかにかかわらず、あります ゲームをトリックする方法、
バグの報告と機能があり、それはあなたのことができます ちょうどポイントのとてもたくさんを生じます。
しかし、最大の可能性を 応じた値、
誰かのこのスクリーンショットの私 オンラインで見つける、実際に40億です。
>> さて、なぜそのようになるのですか？
それは、正確には40億です おそらく誰かが決めたので、
誰がこのゲームを書いていました、 彼らは40億を行うことができること、
何か、何か、何か、 値のように私は我慢します
電卓とそれ以前のバージョンでは、しかし、 それは、人間のためのほんの少しクリーナーです
最大数を言って coins--またはスタッドの、
彼らはあなたのことをthem--呼んで 40億で収集することができます。
だから、これはなぜですか？
レゴゲームはどのようにあります カウンタを実装
それはを追跡しています あなたが持っているコインの枚数？
彼らは何を使っていますか？
聴衆：それは停止します 40億後にカウント。
DAVID Jマラン：それは停止します 40億後にカウント、
これはあなたができることを意味します プログラマーとして、推測、
彼らはおそらくしていること 32ビット整数を使用して。
プログラマのように文字通り 型付き、int型、彼または彼女のコードで、
それはその変数のタイプです 彼らは誰かのコードを格納するために使用しています。
だから、他の症状があります 制限これらの種類の。
>> だから私はこのgame--をプレイしていません そして、私は歴史上に読んでいました
much--としてではなくで確認します 文明、元のバージョン
あなたは明らかに、それぞれとの対話 他と戦争や平和を持つことができ、
ガンジーは、のいずれかになるはずでした 私として最も平和な文字、
最初に、それを理解 文明のバージョン。
そして、実際には、1〜10のスケールで、 彼の攻撃性はわずか1でした。
だから、どんなに穏やかに 明らかに、積極的な。
>> しかし、いくつかの点で、あなたは明らかにすることができます あなたの地域で民主主義をインストールしてください。
そして、あなたは民主主義をインストールする場合 ゲームのバージョンに、
その後、あなたの攻撃性のレベルが下がります。
それは良いことです。
人々はより静かです どうやら、そのような状況です。
しかし、どうやら、誰かがやりました 、もし、条件を持っていません
コー​​ドの元のバージョンです。
>> だから、ガンジーの攻撃レベルから行ってきました 負の1に、1陽性、マイナス2、
しかし、ゲームはしていません 負の数を理解します。
だから何が起こったことはガンジーの攻撃でした レベルは、負の1に、0に、1から行ってきました
の効果を有しています であることにラップアラウンド
最も積極的な文字 ゲームでは、255の値で、
1〜10のスケールで。
それ以来、そこをされています このゲームのより多くの化身、
彼らはとしてそれを守ってきました イースターエッグの並べ替え、
ガンジーは明らかであること そうひどく攻撃的。
しかし、それはの結果でした 非常に単純なプログラミングエラー
ゲームの非常に初期のバージョンです。
>> 今より多くの不穏、より 最近では、ボーイング787型機
有していると記載されていました バグではなく、デバイスの種類
あなたは、特にバグを持っていると思います。
私が読んであげること、症状、 ここでは、オンラインの記事から、
この、モデル787飛行機でした それは、継続的に電力を供給されています
248日間のすべてを失う可能性が 交流、交流、
に起因する電力、 発電機制御装置、
同時にGCUs、 フェイルセーフモードに入ります。
だから、これは発行された警告でした この問題が発見されたとき。
この状態が発生します ソフトウェアカウンタによって、
GCUsの内部なので、 整数または変数、
それは、248の後にオーバーフローします 連続電力の日。
ボーイング社は処理中です そのGCUソフトウェアのアップグレードを開発
危険な状態を改善します。
>> ミサイルのようにあまりにも多くの シナリオ、前記
彼らは、変数のいくつかの種類を持っていました それはカウントし、カウントして、
そして、数えるが、徐々に溢れ その能力の境界、
同様に気の飛行機をしました 変数のオーバーフローを持っています
実行中の十分な時間後。
だから冗談の方法 この問題を回避作業の
本当に、すべての、あなたの飛行機を再起動することです メモリが拭き取られますように247日、
変数は0に戻ります。
しかし、これは非常にあり、実現 ソフトウェアの大規模な化身、
しかし我々は、Appleのを聞い特にとして 車に入るオペレーティングシステム、
Googleからの車を自己駆動、および ソフトウェアの化身の任意の数
私たちの日常生活の中で、テレビ や時計、さらに、
ソフトウェアに囲まれていた実現、 これらは全て米国人によって書かれています。
>> そして、私たちはすべてすぐに発見するだろうとして、 それは非常に簡単で、非常に典型的です
ソフトウェアを書くときに間違いを犯しました。
そして、あなたはそれらをキャッチしない場合は、 いくつかの悪いことが起こることができます。
今時々、いくつかの 面白いことが起こることができ、
または少なくとも時には我々 いくつかの悪さを期待する知っています。
だから、0等級から、0で割りました 学校は、一般的に悪いことです。
それは未定義です。
そして、それはout--になり、場合を見てみましょう これを選ぶことができます私のマイクは、アップルのup--
最近これにいくつかの楽しみを持っていました。
だから私はここにiPhoneを持っています。
私はシリに話すと、彼女に依頼するつもりです 私は0で割っ0への回答を得ました。
0で割っ0とは何ですか？
>> SIRI：あなたは0を持っていることを想像し クッキーは、あなたが均等に分割しました
0友人の間で。
それぞれの人はどのように多くのクッキーを取得していますか？
参照してください？
それは意味がありません。
そして、クッキーモンスターは悲しいです 何のクッキーが存在しないこと。
そして、あなたはその悲しいです あなたは友達がいません。
DAVID Jマラン：それは嫌なのようなものです。
だから、これはただそこに言われたものです。
それは、それが定義されていない、不確定だが、 実際、多くのプログラミング言語
または、実際に、コンパイラはなります ときに、プログラムで、検出、
0と0を分割してみてください。
このかかわらず、より多くの楽しみであり、 その明らかに、クッキーモンスター
Twitterでこれらの日です。
そして、彼はこれで、これに答え、 これは絶対に愛らしいです。
しかし、ここでは簡単に見てみましょう 他の構築物のカップル、
そして、こののいくつかを置きます 良い方法で、使用するコード。
だから、他にも、判明します ループのために、あります
そのwhileループと呼ばれるもの、 違って見えると実装されています
少しdifferently--と 我々は最終的にexamples--表示されます
しかし、ある意味で、 それがために簡単です
あなたは初期化す​​ることはできません。また、 ループの境界内に更新します。
あなたはまだそれを実装することができます。
だから、正確に同じことを行うことができます whileループで、forループと同様に、
しかし、あなたの構文、ultimately-- 我々は最終的にはよなど
see--異なることになるだろう。
do-whil​​e文は、さえあります 実際には少し異なっています、
その一方のためのループで いつもとwhileループ
場合、最初に自分の状態をチェック あなたは、一番下にこの事トップを読みます
それが起こっているようにそれは一種の見えます それが最後だので、それの状態を確認します
コー​​ドの真の最後の行。
そして実際、それが便利になるだろう 私たちが書く特定のプログラムで、
あなただけ盲目的に何かをしたい場合 そして最終的に状態を確認。
それは必ずしも悪いことではありません。
我々は変数を使用する場合は、我々が行うことができます それいくつかの異なる方法です。
そして、我々はフォックストロットで見ました 漫画、それを行うための一つの方法、
あなたは、変数を宣言する場合は、 int型のカウンタのセミコロンのような、
そして多分次のlater-- ライン、多分10行later--
あなたが実際にそれを初期化します。
だから、コードのこれらの2行は、 int型の変数を宣言
それが与えるように、カウンタを呼び出します int型を保持するために私に十分なビット。
そしてその後、最終的に、それが入れ その変数に値0。
それは、0と1のを配置 パターン、先週から知っていること、
我々は0として知っている数を表します。
または、率直に言って、あなたはこの多くを行うことができます より簡潔に、ちょうどこれが好き。
>> 今も持っています 関数を呼び出す機能。
そして、実際には、ここで2行です プログラム、またはその抜粋、
それは、私たちが実際にすることができます そのいくつかのコードを書きます
ずっとuser--から文字列を取得します 私たちのボランティア瞬間のようなago--
に結果を格納します 名前と呼ばれる変数、
そして、then--ずっと私たちのボランティアとのような これらの値アウトprintf--プリントを
二つの引数に渡すことで、 変数に続く文字列、
自身、名前、呼ばれます。
それでは、前に、見てみましょう 我々は、そこにマリオに戻ります
今のカップルで、このの例。
>> 私は先に、オープン行くつもりです アップ、の機能0.c、としましょう​​。
そしていつものように、このコードがあります コー​​スのウェブサイトで利用可能な、
あなたがでに沿ってプレイすることができます 家庭、後でそれを見てください。
しかし、ここでのプログラムは、その中にいます 行17から22に本質、。
メインプログラムがどこにありますか プログラムは常に起動しようとしています。
このプログラムは、明らかに、起こっています あなたの名前、コロンをプリントアウトします。
その後のGetStringを呼び出すために起こっています、 私たちはボランティアでやったように。
そして、このことは、興味深いことです それはのprintNameを呼び出すために起こっています。
それが、すべてのこの時間判明します printName呼び出される関数であるように思われます。
それが誰かの名前を出力します。
我々は、からのprintfを使用する必要はありませんでした 往年、のprintNameがあります。
>> しかし、それは誤解を招くです printNameはしていませんので、
C.人々はなかったが付属して いくつかの40または50年前にそれを発明し、
私の代わりに、でした。
そして実際に、私はスクロールする場合 さらに、予告ダウン
私は自分自身を書くことができますか 我々は最終的によCの関数
我々が言い続ける理由を説明し、 いくつかの場所で、空洞、
しかし、今日のために、してみましょう 名前だけを見てください。
>> 24行目では、あなたがしたい場合は 独自の関数を作成し、
あなたは文字通り書きます 関数の名前。
私はのprintNameを選びました。
括弧では、あなた その後、どのような種類を指定します
入力、どのように多くのあなたの この機能は利用したいです。
この場合、私は利用したいです 呼ばれる1変数、名前、
それがあることになるだろう タイプ、文字列なので、それが起こっています
一部の文字列であることを。
そして、このprogram-- 多くのスクラッチのように、
カスタムパズルを持つことができますpieces-- このカスタム動作を持っているとしています。
これは、printfのを呼び出すために起こっています 渡し、こんにちは、プレースホルダ、
そして、それはプラグインになるだろう どのようなユーザが呼ばれます。
>> だから、これは何の例です。 コンピューター科学者になります
コー​​ル抽象化または機能 ちょうどある分解、
場合ですsaying--の空想の方法 あなたは、この高いレベルのアイデアが好き
以下のような私は、機能が必要なこと あなたは絶対、誰かの名前を出力します
文字通りその後のprintfを書くことができ、 あなたがしたい引数を渡し、
プログラムは動作しますが、 それは水曜日以来持っているとして。
しかし、あなたは離れて抽象的に開始することができます 名前を印刷する概念。
あなたはそれに名前を付けることができ、 printName、このような
0週から重ね着のこの考えはあります。
>> 今後、私とあなたが知っている必要はありません またはのprintNameがどのように実装されるか気になります。
はい、それは多分、それをprintf関数を使用しています 誰が使用するかを知っている、ではないのですか？
誰も気にしない？
今、私はここまで話して、 代わりに、ここでダウン。
そして実際、我々のプログラムを得るよう より高度で洗練されました、
我々は当たり前の取っておくつもりです 下位レベルのパズルのピースが存在していること。
私たちはそれらを書いたので または他の誰かがそう、でした
我々は、それらの上に構築することができます。
それでは、これを見てみましょう バリアント、機能1。
>> したがって、この1はもう少しです 高度は、それが判明します
CS50のライブラリ内のその、 のみGetIntで機能があります。
我々はに、数年前に、考えていませんでした GetPositiveInt機能を実装しています。
そして、それは少し迷惑なんだかの理由 君たちはプログラム特徴を書いています
あなたが肯定的なを取得したいです ユーザーからの整数、
あなたは絶対にGetIntで使用することができます。
そして、あなたは絶対に確認することができます 条件と多分ループ
そのintが大きい場合 0よりも、ユーザーで叫びます
彼または彼女は与えていない場合 あなた正の数。
しかし、ここではこれを作成してみましょう 建物は、自分自身を遮断し、
カスタムスクラッチピース、可能ならば。
私はプログラムを持っているつもりです ここでは、その最終的に、私
呼び出すことができるようにしたいです GetPositiveInt、と私はなりたいです
そのint型が何であれプリントアウトすることができます。
しかし、これは今離れて抽象化されています。
それはちょうど高いレベルを与えられています それが何をするかと言う名、
それはだから素晴らしいですします 読み現在、非常に直感的。
そして、私は下に何があるか気にしない場合 フードは、私は下にスクロールしてみましょう。
そして、それは少し威圧的です 最初は、特に
これはあなたの最初のプログラムである場合、 しかしそれでは、見てみましょう。
>> 私はもはや、ボイド、言っていませんよ それは機能をオンにするので、
あまりのGetStringと同様に、することができます 私に値を返します。
彼らはただ持っていません 画面に印刷するには、
彼らは実際に渡すことができます 戻って私は何か。
そして、前のprintNameのに対し、 私は何も戻って必要はありませんでした。
私はの副作用が必要 何かが、画面上に表示
私は人間を必要としませんでした 私に何かをバック手に。
ここでは、GetPositiveIntと、 GetIntでと同じように、
私は戻って何かを渡したことにしたいです。
だから私は、空洞ではなく、言っています ライン23が、int型に、
これは言う、この機能 私が書いていることを、
GetPositiveIntがに行くと呼ばれます 整数ではなく、何も私をバック手、
無効ではありません。
>> 一方、それはを取るつもりはありませんです 入力は、私は、この種のは、それを逆にしました。
私はGetPositiveIntいずれかを与えていませんよ 入力は、私はそれが私にその出力を与えたいと思います。
そして、何が今起こりますか？
だからここに私は変数を宣言することができる方法です。
私は、ループの外でそれをやりました 理由のために、私たちは最終的に表示されます、
しかし、これはちょうど与えます 私は32ビットと呼ばれ、nは、
私は、事前に決定しました それらは、整数を格納します。
そして、ここでは、構築物ながら行う、ということです それは便利ですなぜこれがあります。
文字通りこれを行います、 nが1未満である間。
それでは、何が起こるか見てみましょう。
私は、プリントアウトしてください。 私に正の整数を与えます。
私は、CS50の使用して、int型を取得します 機能及びnに格納されています。
>> そして、コードのどの行おそらく 論理的に、次に実行されますか？
どの行番号？
うん、そう31。
あなたがするまで、あなたはこのことを知っているだろう 言ったかの並べ替えのそれを推測して、
それは本当です。
それは、上から下へ行きます して、繰り返し続けます。
だから私は数、発言に入力した場合 1陰性、1負nより少ないのですか？
うん。
負の1が1未満であるためです。
だから何が起こるのでしょうか？
私はこれを行うつもりです nが1未満であるが、
私は戻ってライン28に行くつもりです。
>> また、各time--とのはthis--を実行してみましょう それをコンパイルする機能1を行い、
現在は機能1をスラッシュドット。
私は負の1を入力すると、それはです 私に叫んで維持するつもり
私はそれぞれのために協力まで 私の入力の1未満であります
それが1未満ながらだ場合、 私はこれをやり続けるつもりです。
私は最終的にそれを50のような数を与えると、 ありがたいことに、それは、50への感謝を述べています。
なぜ？
nが以上である理由として、すぐに 1、私はこのループで立ち往生停止します、
この新しいキーワード今日、 リターンは、文字通りそれを行います。
だから私はちょうどで、実装しました 感覚、のGetStringと同等の、
ここで私はに戻って渡しています 誰が、いくつかの値を、私を使用しています。
それはする必要はありません 文字列は、それがint型です。
シンプルなので、迅速な たとえば、私たちはすぐによ
いくつかのより洗練されたを参照してください まだバージョン。
実際には、のを見てみましょう return.cと呼ばれる数値の1、。
そして、この1は実際にはです 少し単純。
そのため、このプログラムの目的で life--のは、コンパイルして実行してみましょう、
そう、ドットリターンを作ります スラッシュ、return--予告
プログラムは単純に値2を立方体。
それは難しい、かなり愚かです コー​​ドは、任意の入力を取ることはありません、
しかし、それは別のものを実証ん 私は自分自身を書いている機能。
だからここに、私は宣言しました int型のXと呼ばれる変数、、
数2に等しいです、 完全に任意。
これは、単にいくつかのふわふわ印刷です。
このような、xは今で言うと このような、キュービングドットドットドット。
そして魔法がライン21で明らかです。
私は、キューブ、呼び出された関数を呼んでいます、 私はそれを一枚の紙を手渡しています
それに書かれた番号2の、 数学的にどのような値、
私はそれから抜け出すためにしたいですか？
ちょうど健全性チェックとして？
8。
右？
私は2は2に、バック立方たいです 3のパワーなので、8バック。
>> だからここでキューブが実装されていますか？
まあ、それはここでダウンして実装されています注意してください。
そして、ちょうど前のように、論理的に、 構文はおそらくあるにもかかわらず
あなたの多くに非常に新しいです、 私はこの機能が欲しいです
のシートを私に戻って手に その上にint型と紙。
だから私は、int型を持っています 名前は任意ですが、
しかし、便利なキューブと呼ばれます。
それへの入力は、のnは 整数型、のように
どのように私は数に渡すことができます 一枚の紙に2。
そしてそれは、Cのサポートが判明 数学、あなたが時間のためのxのを持っていないので、
あなただけのアスタリスクを使用 乗算のため。
これはn回n回を返します 単純に乗値であるN、。
>> だからここで我々はこのすべてを行っていますか。
これは間違いなくあります 駆け足、安心、
そのスーパーのセクションで 問題で、1セット
あなたはを通して歩いたことでしょう このすべてすべてより。
そして、問題が1セットで、我々が移行します スクラッチのグラフィカルな世界から
もっと何かコマンドラインに C言語でしかし、我々はインスピレーションを描画します
このここにゲームから 往年から、前記
Cとの標準版を使用して、 p個のセットは、あなたはマリオのピラミッドを実装します。
とのハッカー版で p個のセット、あなたがそう選出することを選択した場合、
あなたはもう少しを実装します 二つのピークでピラミッドに挑戦。
また、実装します アルゴリズム、貪欲アルゴリズム。
それはそこのが判明 いくつかの興味深いロジック
のプロセスの背後にあります レジ係のステーションを実行しています
実際に手渡し 誰かバック変更。
かなりのアルゴリズムがあります あなたも可能性があることを、簡単な
あなたが最初に読んだとき直感的に把握 それは私がいつもてきたものだ実現it--
私は誰かいくつかを与えた任意の時間に行わ あなたが常にすることを可能にするマネーback--
の数を最小限に抑えます 紙のノートや金属コイン
あなたは戻ってユーザーに手渡していること。
これは、もちろん、説得力があります あなたがCVSやその他もろもろに行けばあるため、
あなたが手渡されたくありません ものの全体の束
またはペニーの全体の束。
あなたが最も少ないたい コイン、おそらく、可能。
>> 最後に、あなたも挑戦することがあります 水の世界に手を出します
実際に感謝を取得 流れの速度との間のマッピングのために、
シャワーで水などの、 使用されているだけでどのくらいの水。
そして、その中にほのめかし、 ここに、このクリップになり、
我々はのために終了しますました わずか60秒で、その
の映像を塗ります 低流量のシャワーヘッド。
>> [ビデオ再生]
-大丈夫。
私はここにすべてのものを得ました。
私はサイクロンFシリーズを持って、 ヒドラ、Jetflow、ストックホルム
Supersteam、あなたはそれに名前を付けます。
>> - そして、あなたは何を勧めますか？
>> -何を探していますか？
>> - パワー男。
力。
シルクウッド様。
- つまり、放射線のためです。
-そのとおり。
これは何ですか-now？
- つまりはコマンドー450です。
私はそのいずれかを販売していません。
>> ブトそれは我々が望むものです。
それはコマンドー450です。
>> -Noは私を信じています。
それは唯一のサーカスで使われています。
それはゾウのためです。
>> 何かを支払う-I'll。
>> ジェリーについて - 何？
>> -HEはそれを扱うことができませんでした。
彼は繊細です。
そうそう。
[END再生]
DAVID Jマラン：すべての権利。
CS50用の場合はそのためです。
私たちは来週お会いしましょう​​。
>> SPEAKER 1：[？スカリー？]、[？イアン、？] 限りこのアウトロプロジェクトとして、
あなたたちは何をして出ていますか？
>> SPEAKER 2：まあ、私たちが与えてくれました その思考の様々な、
私たちは最善の方法だと思いますto--
>> SPEAKER 3：私もいいですか？
>> SPEAKER 2：うん。
ぜひ、実際に。
>> SPEAKER 3：だから私は思います 私たちは私たちの考えをまとめることができます
1 word--何もoutrosため。
>> DAVID Jマラン：何？
SPEAKER 3：何もありません。
DAVID Jマラン：それはどういう意味？
SPEAKER 3：outrosは何としています。
SPEAKER 2：まあ、私は意味、哲学で、 私が意味する、何も常に何かではありません。
SPEAKER 1：だからwhat's-- 前提は何ですか？
SPEAKER 3：だから、それは人生のようなものです。
OK。
今日は何をしましたか？
>> DAVID Jマラン：私は、立ち上がっていました 朝食、および動作するようになりました。
>> SPEAKER 3：それはエンディングです。
SPEAKER 2：しかし、私は意味、すべきでありません 何かがthe--で彼に起こります
SPEAKER 3：いや、いや、いや、いや。
何も起こりません。
>> SPEAKER 1：では、なぜ私たちが見ていますか？
>> SPEAKER 3：ので、 それはCS50のためのエンディングです。
>> DAVID Jマラン：まだです。