1 00:00:00,000 --> 00:00:10,920 >> [音楽再生] 2 00:00:10,920 --> 00:00:14,680 >> DAVID Jマラン:すべての権利、 CS50に戻る歓迎。 3 00:00:14,680 --> 00:00:16,500 これは、週2の始まりです。 4 00:00:16,500 --> 00:00:18,940 私たちの1つからの一言 キャンパスの友人 - 5 00:00:18,940 --> 00:00:22,620 あなたが興味を持っている場合は、おそらく、どちらか 現在または将来的には 6 00:00:22,620 --> 00:00:25,670 でも、かつてより快適、教育 中学生を少し 7 00:00:25,670 --> 00:00:27,680 コンピュータ科学について何か、 そのURLに頭を行う。 8 00:00:27,680 --> 00:00:32,360 彼らは今、特定の必要としている 教師は、あなたが持っている場合は特に 9 00:00:32,360 --> 00:00:34,700 コンピュータサイエンスにいくつかのエクスポージャーを持っていた。 10 00:00:34,700 --> 00:00:38,060 >> だから、最後の時間を思い出す、私たちは、導入 少数のデータCのタイプ、および 11 00:00:38,060 --> 00:00:40,590 あなたを得るために始めたかもしれない これらのこれまでとの汚れた手 12 00:00:40,590 --> 00:00:41,940 問題1つを設定してください。 13 00:00:41,940 --> 00:00:43,230 そして、私たちは、charを持っていた。 14 00:00:43,230 --> 00:00:49,100 だから、多少専門用語で、何 あなたが今日それを知っているようにchar型である? 15 00:00:49,100 --> 00:00:51,050 >> だから、文字だが、レッツ 今より正確に。 16 00:00:51,050 --> 00:00:53,735 我々は、文字とはどういう意味ですか またはchar個々の? 17 00:00:53,735 --> 00:00:56,700 18 00:00:56,700 --> 00:00:59,500 数値以外の文字 - 19 00:00:59,500 --> 00:01:00,670 そうとは限りません。 20 00:01:00,670 --> 00:01:04,580 それも、その偶数が判明 句読点と文字がある 21 00:01:04,580 --> 00:01:06,980 このデータに表される charとして知られているタイプ。 22 00:01:06,980 --> 00:01:09,440 だから、必ずしもアルファベット順ではありません。 23 00:01:09,440 --> 00:01:11,100 うん? 24 00:01:11,100 --> 00:01:12,275 >> だから、ASCII文字です。 25 00:01:12,275 --> 00:01:15,510 だから、週ゼロに戻ってと思われる場合、時 私たちは、ボランティアの我々のバイトがありました 26 00:01:15,510 --> 00:01:19,150 出てくると、どちらか自分の手を握る またはすべてではない、彼らはビットを表す。 27 00:01:19,150 --> 00:01:22,450 しかし、集合的に8のグループとして、 彼らはバイトを表した。 28 00:01:22,450 --> 00:01:26,030 そして、私たちは、ASCIIの概念を導入しました 単にその講演、で 29 00:01:26,030 --> 00:01:28,170 数字と文字の間のマッピング。 30 00:01:28,170 --> 00:01:32,010 それらの人間としておよびASCII用途 暗黙の、8ビット 31 00:01:32,010 --> 00:01:33,660 文字を表現する。 32 00:01:33,660 --> 00:01:36,890 >> だからそれに応じて、8ビットが可能であれば それぞれ2つの値の1つを取る - 33 00:01:36,890 --> 00:01:38,010 ゼロまたは1 - 34 00:01:38,010 --> 00:01:40,280 二つの可能性があったことを意味する この人のために - 35 00:01:40,280 --> 00:01:41,230 ゼロまたは1 - 36 00:01:41,230 --> 00:01:44,070 この人のための2つ、これには2つの 人、この1のための2つ。 37 00:01:44,070 --> 00:01:47,450 だから、2回の合計2回 2回2回2 - 38 00:01:47,450 --> 00:01:49,700 合計ので、2つの八。 39 00:01:49,700 --> 00:01:54,320 だから文字の合計数はあり 可能256あなたにできること 40 00:01:54,320 --> 00:01:55,750 8ビットで表す。 41 00:01:55,750 --> 00:01:59,210 >> さて、あなたのそれらはアジアの話す人 言語は多くのがあることを知っているかもしれません 42 00:01:59,210 --> 00:02:02,620 単なる世界の文字 AsおよびBのCsとDsが。 43 00:02:02,620 --> 00:02:06,130 そして実際、ASCIIはには十分ありません 世界の多くの言語。 44 00:02:06,130 --> 00:02:07,760 その別の時間ではなく、もっと。 45 00:02:07,760 --> 00:02:11,240 ここでは、C言語で必要に応じてことを知っている 手紙の一部を表現する 46 00:02:11,240 --> 00:02:15,780 句読点、または単に何かのキャラクター 自然の中で、我々は、charを使用しています。 47 00:02:15,780 --> 00:02:18,240 そしてそれは1バイトまたは8ビットです。 48 00:02:18,240 --> 00:02:19,690 >> どのようにint型はどうでしょうか? 49 00:02:19,690 --> 00:02:20,780 まあ、int型は整数です。 50 00:02:20,780 --> 00:02:23,175 どのように多くのビットが、ご存知の場合、 通常は整数でしたか? 51 00:02:23,175 --> 00:02:25,930 52 00:02:25,930 --> 00:02:27,512 誰もリコール? 53 00:02:27,512 --> 00:02:29,600 だから、通常は32です。 54 00:02:29,600 --> 00:02:32,120 実際には、コンピュータに依存する あなたが使っていること。 55 00:02:32,120 --> 00:02:35,770 しかし、アプライアンス、および多くの中 コンピュータは、32ビットまたは4つの 56 00:02:35,770 --> 00:02:37,140 バイト - 8回4。 57 00:02:37,140 --> 00:02:39,790 と整数だけ格納するために使用されている どちらか負の数、 58 00:02:39,790 --> 00:02:41,610 正、またはゼロ。 59 00:02:41,610 --> 00:02:45,250 >> そして、あなたは32ビットで、あなたを持っている場合のみ 正の数を気に、することができます 60 00:02:45,250 --> 00:02:48,960 誰球場どのように多くの可能性 コンピュータから表現できる整数 61 00:02:48,960 --> 00:02:51,820 までにゼロ? 62 00:02:51,820 --> 00:02:56,130 だから、32には2つになりますた およそ40億です。 63 00:02:56,130 --> 00:02:59,720 2、これらの力があることを行っているので、 コンピュータサイエンスの定期的なテーマ。 64 00:02:59,720 --> 00:03:03,930 私たちが説明するように、彼らは非常に便利だ それはかなりではない場合でも、で動作するように 65 00:03:03,930 --> 00:03:05,790 自分の頭の中で計算を行うのは簡単。 66 00:03:05,790 --> 00:03:07,000 >> だから我々は、約4億ドルを言うよ。 67 00:03:07,000 --> 00:03:08,620 さて、長い長い - 68 00:03:08,620 --> 00:03:09,770 あなたは、推測の種類ができます。 69 00:03:09,770 --> 00:03:10,480 これは、int型よりも長いです。 70 00:03:10,480 --> 00:03:12,440 何ビット? 71 00:03:12,440 --> 00:03:14,250 だから、64ビットまたは8バイト。 72 00:03:14,250 --> 00:03:17,480 これはちょうどあなたも表すことができますを意味します 大きな数字、大きな正または 73 00:03:17,480 --> 00:03:19,160 大きな負の数。 74 00:03:19,160 --> 00:03:20,060 >> と方法についてのフロート? 75 00:03:20,060 --> 00:03:22,260 これは浮動小数点です 32ビットの値。 76 00:03:22,260 --> 00:03:25,180 これは何か、単に実数で 小数点付き。 77 00:03:25,180 --> 00:03:30,100 しかし、あなたはその代わりに多くの場所を必要としたら 小数点以下またはあなたがしたい 78 00:03:30,100 --> 00:03:33,720 一部で大きな数を表す それは後の割合は、使用することができます 79 00:03:33,720 --> 00:03:36,260 64ビットですダブル、。 80 00:03:36,260 --> 00:03:38,240 >> しかし、興味深いのはそこだ ここでテイクアウト。 81 00:03:38,240 --> 00:03:42,890 int型は32ビットで制限されているのであればと でも長いlong型が64で制限されている 82 00:03:42,890 --> 00:03:46,180 ビットは、その種の質問を頼む、 あなたが実際にカウントする場合はどうでしょう 83 00:03:46,180 --> 00:03:48,790 int型のための40億よりも高い? 84 00:03:48,790 --> 00:03:50,330 さて、あなたはただ、長い長いを使用しています。 85 00:03:50,330 --> 00:03:54,200 しかし、あなたがより高いカウントしたい場合は 第64回には2つではなく、与えるか、または取る? 86 00:03:54,200 --> 00:03:55,810 >> さて、それは膨大な数です。 87 00:03:55,810 --> 00:03:59,250 しかし、結局、あなたが実際に可能性がある 、値のこれらの種類を気に 88 00:03:59,250 --> 00:04:03,070 あなたは、データベースを使用している場合は特に そしてじゃんじゃんを収集するために開始 89 00:04:03,070 --> 00:04:06,190 と大量のデータと独自の割り当て そのデータの各部分の数字。 90 00:04:06,190 --> 00:04:07,430 だから私たちのような問題を抱えている。 91 00:04:07,430 --> 00:04:10,700 同様に、浮動小数点で 値 - 浮動小数点または倍精度 - 92 00:04:10,700 --> 00:04:14,290 あなただけの有限の数を持っている場合 ビットは、どのように多くの合計数値は、あなた可能性 93 00:04:14,290 --> 00:04:16,980 おそらく表す? 94 00:04:16,980 --> 00:04:19,540 >> ときまあ、それはあまり明らかだ 小数点を伴う。 95 00:04:19,540 --> 00:04:20,899 しかし、それは確実に有限です。 96 00:04:20,899 --> 00:04:24,390 あなたは、ビットの有限数を持っている場合、 ヒト有限数の有限 97 00:04:24,390 --> 00:04:27,350 電球の数は、確かにすることができます 唯一の有限数を表す 98 00:04:27,350 --> 00:04:28,510 浮動小数点値。 99 00:04:28,510 --> 00:04:33,170 しかし、どのように多くの実数 彼らの世界でありますか? 100 00:04:33,170 --> 00:04:33,680 無限があります。 101 00:04:33,680 --> 00:04:37,280 だから、それが問題のようなものだから、私たち 無限の量を持っていない 102 00:04:37,280 --> 00:04:39,970 私たちのコンピュータの内部メモリまたはRAM。 103 00:04:39,970 --> 00:04:41,780 だから、いくつかの困難な事が起こる可能性があります。 104 00:04:41,780 --> 00:04:43,900 >> それでは、先に行くと試してみましょう ここでこれを表現する。 105 00:04:43,900 --> 00:04:46,240 私が先に行くと、geditのを開いてみましょう。 106 00:04:46,240 --> 00:04:50,360 私が先に行くと、ファイルを保存するつもり だけであることが "floats0.c"と呼ばれる 107 00:04:50,360 --> 00:04:54,630 ある例と一致して ご希望の場合はオンラインで入手可能。 108 00:04:54,630 --> 00:04:58,080 そして、私は先に行くつもりだと 次のように定義する - 109 00:04:58,080 --> 00:05:01,540 私はint型、先に行くと言うつもりです メイン空間、私たちはしばしばそうであるように。 110 00:05:01,540 --> 00:05:07,190 >> そして、このプログラムでは、私はするつもりです フロートので、32ビットの自分自身を宣言する 111 00:05:07,190 --> 00:05:09,700 変数は任意に、Fと呼ばれる。 112 00:05:09,700 --> 00:05:13,910 そして私はそれに格納するつもり 私は、十分の一なので、0.1を知らない。 113 00:05:13,910 --> 00:05:16,590 だから私は一人としてあることを表明するつもりだ 完全である10で割っ 114 00:05:16,590 --> 00:05:17,790 Cの正当 115 00:05:17,790 --> 00:05:20,460 >> そして2行目に、私は単に その値をプリントアウトしたい。 116 00:05:20,460 --> 00:05:22,950 だから私たちが使用できることを思い出してください おなじみのprintf。 117 00:05:22,950 --> 00:05:25,420 私たちは、int型のために%Iを使用したくない。 118 00:05:25,420 --> 00:05:28,360 我々はフロートに対して%fを使用​​したい。 119 00:05:28,360 --> 00:05:33,080 そして私は、バックスラッシュnはするつもりです 近い引用、コンマ、fは、セミコロン。 120 00:05:33,080 --> 00:05:34,400 >> だからここに私のプログラムです。 121 00:05:34,400 --> 00:05:35,820 1バグがすでにあります。 122 00:05:35,820 --> 00:05:38,640 これは誰かをクリックしたん誰のため すでに少なくとも指摘しておきたい 123 00:05:38,640 --> 00:05:40,220 私が作った1バグ? 124 00:05:40,220 --> 00:05:42,470 うん? 125 00:05:42,470 --> 00:05:42,800 うん。 126 00:05:42,800 --> 00:05:47,860 私はに "#インクルード"を忘れてしまった 私がしようとするとそのうちのトップ、それらの症状 127 00:05:47,860 --> 00:05:50,490 コンパイルし、これがあることになるだろう コンパイラは、私に叫ぶために起こっている 128 00:05:50,490 --> 00:05:52,770 未定義シンボルを言ったり、 その旨を何か。 129 00:05:52,770 --> 00:05:55,360 それは何かを理解していない printfのが好きです。 130 00:05:55,360 --> 00:05:59,380 >> だから私は、の#include "するつもりです "、ファイルを保存します。 131 00:05:59,380 --> 00:06:00,400 そして今、それは良い形でだ。 132 00:06:00,400 --> 00:06:02,690 しかし、私はまた指摘するつもりです 外に一つの新しいディテール今日。 133 00:06:02,690 --> 00:06:08,620 場所を指定することに加えて %fは%I%sのような者は、次のことができます 134 00:06:08,620 --> 00:06:12,320 たまに行動に影響を及ぼす そのプレースホルダの。 135 00:06:12,320 --> 00:06:15,540 例えば、浮動小数点の場合 ポイント値、私だけしたい場合 136 00:06:15,540 --> 00:06:22,200 後一小数点を表示するには 期間は、私は実際に0.1Fを行うことができます。 137 00:06:22,200 --> 00:06:26,830 だから、他の言葉で、私はFを分離し、 ただ0.1とパーセント記号、 138 00:06:26,830 --> 00:06:30,200 printfを伝えるには、全体を持っているかもしれません 小数点以下の数字の束 139 00:06:30,200 --> 00:06:30,930 私のためのポイント。 140 00:06:30,930 --> 00:06:32,870 しかし、私は唯一のそれらのいずれかを見てみたい。 141 00:06:32,870 --> 00:06:36,280 >> だから私は今、先に行くし、保存するつもり このプログラムは、私の端末に入る 142 00:06:36,280 --> 00:06:41,870 ウィンドウ、私は先に行くつもりです とタイプはフロート0は、次のように入力してください。 143 00:06:41,870 --> 00:06:44,930 私はやや不可解な行が表示されている 我々として、より多くの意味を作るために開始されます 144 00:06:44,930 --> 00:06:46,900 今週と次のそれを離れていじめる。 145 00:06:46,900 --> 00:06:50,480 今、私は先に行くつもりです とフロートゼロを実行します。 146 00:06:50,480 --> 00:06:52,020 と、いまいましい。 147 00:06:52,020 --> 00:06:54,880 >> だから、別のバグがあり ここにいくつかの理由。 148 00:06:54,880 --> 00:07:02,490 私はその十分の一をかなり確信して、または 10で割った1は、0.0ではありません。 149 00:07:02,490 --> 00:07:04,590 たぶん私はただ見ていないよ 十分な数字で。 150 00:07:04,590 --> 00:07:08,580 では、なぜ私は2を参照するために2つの0.2を言うことはありません 小数点以下の桁だけではなく、1。 151 00:07:08,580 --> 00:07:11,810 私は私の端末ウィンドウに戻りましょう あちこちに数回を打つ 152 00:07:11,810 --> 00:07:12,840 私の歴史を参照してください。 153 00:07:12,840 --> 00:07:15,910 再びゼロフロート作るのですか、 その後再びアップ。 154 00:07:15,910 --> 00:07:17,730 そして今、入力してください。 155 00:07:17,730 --> 00:07:20,000 >> そして今、私はこれは間違っているかなり確信している。 156 00:07:20,000 --> 00:07:23,030 そして、私は3と4を​​行うことができ、私はよ おそらくゼロを見て維持するつもり。 157 00:07:23,030 --> 00:07:24,880 だからバグがどこにあるのでしょうか? 158 00:07:24,880 --> 00:07:27,910 10で割った一つは、0.1である必要があります。 159 00:07:27,910 --> 00:07:30,310 誰かが何かで刺しを取りたい 根本的な問題がある? 160 00:07:30,310 --> 00:07:32,400 うん? 161 00:07:32,400 --> 00:07:33,420 彼らは両方の整数です。 162 00:07:33,420 --> 00:07:33,920 だから何? 163 00:07:33,920 --> 00:07:37,820 それでは、10で割った1、と 私は算数で何をすべきか。 164 00:07:37,820 --> 00:07:41,185 そして、私は0.1を得る。 165 00:07:41,185 --> 00:07:41,660 >> うん。 166 00:07:41,660 --> 00:07:43,240 そしてそれは確かにその問題です。 167 00:07:43,240 --> 00:07:46,700 あなたは、コンピュータの整数を取るとき そして、あなたは別の整数で割り、 168 00:07:46,700 --> 00:07:50,430 デフォルトでは、コンピュータがに行っている あなたは整数にしたいと仮定します。 169 00:07:50,430 --> 00:07:54,620 しかし問題は、もちろん、 0.1は整数ではないことを。 170 00:07:54,620 --> 00:07:55,680 それは実数です。 171 00:07:55,680 --> 00:07:59,610 そしてどんなコンピュータがでない デフォルトでは、それだけで捨てている 172 00:07:59,610 --> 00:08:01,070 小数点以下すべて。 173 00:08:01,070 --> 00:08:03,380 それはそれ自体が切り捨てまたは最大ません。 174 00:08:03,380 --> 00:08:06,480 それだけで、すべてを捨て 小数点以下。 175 00:08:06,480 --> 00:08:07,430 そして今、理にかなっている。 176 00:08:07,430 --> 00:08:09,740 今、我々は明らかにしているので、 ゼロのままに。 177 00:08:09,740 --> 00:08:10,250 >> しかし、ちょっと待って。 178 00:08:10,250 --> 00:08:11,840 私はint型にゼロを見ていないよ。 179 00:08:11,840 --> 00:08:14,910 私は実際に0.00を見ている。 180 00:08:14,910 --> 00:08:16,340 それでは、どのように私は今、これを調整するのですか? 181 00:08:16,340 --> 00:08:22,850 10で割った1はゼロですが、私がいたら それはなっている0.00を見 182 00:08:22,850 --> 00:08:24,250 実数に変換? 183 00:08:24,250 --> 00:08:25,500 うん。 184 00:08:25,500 --> 00:08:29,850 185 00:08:29,850 --> 00:08:30,630 まさに。 186 00:08:30,630 --> 00:08:35,600 >> だからここまでの行5、I実際に 店舗その後つまり0.1、 187 00:08:35,600 --> 00:08:39,549 、フロートの中、ゼロに切り捨て に効果的に同等だ 188 00:08:39,549 --> 00:08:42,100 intとしてそれをしない保存するけど、 確かに、floatとして。 189 00:08:42,100 --> 00:08:46,540 また、私はその後にprintfを使用しています 明示的に2台にその番号を印刷 190 00:08:46,540 --> 00:08:49,740 小数点以下にもかかわらず、そこに 実際にではないかもしれません。 191 00:08:49,740 --> 00:08:51,020 >> 右、吸い、この種のは、だから? 192 00:08:51,020 --> 00:08:53,640 どうやらあなたは、数学を行うことはできません 少なくともこのレベルの時 193 00:08:53,640 --> 00:08:55,600 コンピューターで精密、。 194 00:08:55,600 --> 00:08:56,930 しかし、確かに解決策はあります。 195 00:08:56,930 --> 00:09:00,410 我々は多分できた最も簡単な修正は何ですか ただ直感的にここにあっても、ために行う 196 00:09:00,410 --> 00:09:01,130 この問題を解決? 197 00:09:01,130 --> 00:09:02,380 うん? 198 00:09:02,380 --> 00:09:04,700 199 00:09:04,700 --> 00:09:06,574 整数に変わる - 200 00:09:06,574 --> 00:09:06,976 うん。 201 00:09:06,976 --> 00:09:10,420 私は何全く分からない場合でも、 それあれば本当に、ここで起こって 202 00:09:10,420 --> 00:09:13,440 根本的に、これらの両方に関係しています int型であること、よく、なぜ私にはありません 203 00:09:13,440 --> 00:09:18,230 10.0、これを行うことを確認 1.0は、ファイルを保存し直し。 204 00:09:18,230 --> 00:09:20,990 私に戻ってダウンして行ってみよう ボトムと再コンパイル。 205 00:09:20,990 --> 00:09:23,030 私は今、再実行しましょう​​。 206 00:09:23,030 --> 00:09:23,420 そしてそこに - 207 00:09:23,420 --> 00:09:27,690 今、私は10分の1持っている 0.10として表現。 208 00:09:27,690 --> 00:09:28,420 >> わかりました。 209 00:09:28,420 --> 00:09:29,220 だから悪くはない。 210 00:09:29,220 --> 00:09:31,730 そして、私はもう一つの方法を指摘してみましょう 我々はこれを解決したかもしれない。 211 00:09:31,730 --> 00:09:35,580 私は実際に時間にロールバックしましょう 我々は一人としてこれを持っていたときに 212 00:09:35,580 --> 00:09:36,680 第十一瞬前。 213 00:09:36,680 --> 00:09:40,800 そして、私が先に行くと、このファイルを保存し直してみましょう だけに別のファイル名、など 214 00:09:40,800 --> 00:09:41,750 少しチェックポイントを持っている。 215 00:09:41,750 --> 00:09:43,450 だからバージョンだった。 216 00:09:43,450 --> 00:09:45,520 そして今、私が先に行くと、う 複数のバージョンを実行します。 217 00:09:45,520 --> 00:09:48,540 私たちは、このバージョンを呼ぶことにします 2ゼロがインデックス化。 218 00:09:48,540 --> 00:09:51,280 >> そして、私の代わりにするつもりです この - あなたは何を知っていますか? 219 00:09:51,280 --> 00:09:54,400 この場合のドットゼロ作品を追加。 220 00:09:54,400 --> 00:09:56,060 しかし、一つは可変であったとします。 221 00:09:56,060 --> 00:09:57,680 想定10は可変だった。 222 00:09:57,680 --> 00:10:00,680 言い換えれば、私はできなかったと仮定し 最後にただハードコード.0 223 00:10:00,680 --> 00:10:02,340 この算術式の。 224 00:10:02,340 --> 00:10:05,820 まあ、私は実際に何かを行うことができます 括弧内に鋳造と呼ばれる。 225 00:10:05,820 --> 00:10:11,920 私は、フロートにその整数10をキャストすることができます と私にその整数1をキャストすることができます 226 00:10:11,920 --> 00:10:12,800 浮くだけでなく、。 227 00:10:12,800 --> 00:10:17,190 次に行うことになるだろう数学 効果的に、10.0で割った1.0です 228 00:10:17,190 --> 00:10:19,250 なり、その結果 以前のようにFである。 229 00:10:19,250 --> 00:10:26,130 私はこれをコンパイルするのであればのように山車を作る 2、今2を浮かぶ、私は同じを得る 230 00:10:26,130 --> 00:10:27,020 同様に、答えてください。 231 00:10:27,020 --> 00:10:29,640 >> だから、これは、かなり不自然な例です この問題を解決するために 232 00:10:29,640 --> 00:10:31,400 キャストを導入することにより。 233 00:10:31,400 --> 00:10:34,410 しかし、一般的に、キャスティングになるだろう 特にのための強力なもの、 234 00:10:34,410 --> 00:10:38,180 問題は、時、週の時間に2を設定 あなたは、あるデータ型を変換する 235 00:10:38,180 --> 00:10:41,800 もうその日の終わりに 同じように表現される。 236 00:10:41,800 --> 00:10:44,970 一日の終わりには、一つ一つの 我々はこれまでの話した事がある 237 00:10:44,970 --> 00:10:46,710 ボンネットの下にただのint。 238 00:10:46,710 --> 00:10:48,950 またはあまりにも低レベルだ場合 あなた、彼らはただの数字だ 239 00:10:48,950 --> 00:10:49,750 ボンネットの下に。 240 00:10:49,750 --> 00:10:52,850 でも、文字は、再び、リコール 週間のゼロから、番号は 241 00:10:52,850 --> 00:10:53,990 ボンネットの下に。 242 00:10:53,990 --> 00:10:57,240 >> と言うことである、私たちの間で変換することができます 数字異なるタイプの場合 243 00:10:57,240 --> 00:10:58,060 彼らはただのビットです。 244 00:10:58,060 --> 00:11:01,020 私たちは、番号の間に変換することができます と文字彼らはただなら 245 00:11:01,020 --> 00:11:02,580 ビットであり、逆もまた同様である。 246 00:11:02,580 --> 00:11:07,170 そして、このようにキャストするメカニズムです プログラミングで、それは強制的にすることができます 247 00:11:07,170 --> 00:11:10,970 別のデータ型を変更。 248 00:11:10,970 --> 00:11:14,570 残念ながら、そうでないような 私が言っていたかもしれないほど簡単。 249 00:11:14,570 --> 00:11:19,220 >> 私は山車に戻っ行くつもりです 、よりシンプルだった1、 250 00:11:19,220 --> 00:11:22,830 と簡単な1 .0はそれぞれにに追加された。 251 00:11:22,830 --> 00:11:25,260 そして、ちょうど素早く復習として、 私が先に行くと、再コンパイルせ 252 00:11:25,260 --> 00:11:27,670 これは、山車を作る2 - 253 00:11:27,670 --> 00:11:30,300 申し訳ありませんが、これは山車1にすることです。 254 00:11:30,300 --> 00:11:32,050 そして今、フロート1を実行してみましょう。 255 00:11:32,050 --> 00:11:34,810 そして底に、気付く 私は確かに0.1を取得していること。 256 00:11:34,810 --> 00:11:36,165 だから、問題は解決しました。 257 00:11:36,165 --> 00:11:37,280 >> しかし、まだ。 258 00:11:37,280 --> 00:11:40,000 私は今、少し好奇心を取得するつもりだ 、私は私に戻って行くつもりです 259 00:11:40,000 --> 00:11:41,620 printf文と と言う、あなたは何を知っていますか? 260 00:11:41,620 --> 00:11:44,090 私はこのことを確認したいのですが 本当に10分の1。 261 00:11:44,090 --> 00:11:47,890 そして、私はこれを見たいと思ってするつもりだ 小数点以下5桁、言う、へ。 262 00:11:47,890 --> 00:11:48,570 それは問題ありません。 263 00:11:48,570 --> 00:11:52,020 私は、五から二を変更 私が作るとコンパイル。 264 00:11:52,020 --> 00:11:53,770 1を浮かぶように私はそれを再実行します。 265 00:11:53,770 --> 00:11:54,990 かなり格好良い。 266 00:11:54,990 --> 00:11:58,570 私のサニティチェックが終わるかもしれませんが 私はもう少し冒険取得しています。 267 00:11:58,570 --> 00:12:00,330 私は0.10から0.5に変更するつもりです。 268 00:12:00,330 --> 00:12:03,440 私は後に10桁の数字を見てみたい 小数点。 269 00:12:03,440 --> 00:12:09,060 >> そして、私は先に行くと再コンパイルするつもりだ これと再実行山車1。 270 00:12:09,060 --> 00:12:13,060 後悔のI種はこれをテストした さらに私の数学はそうではないので 271 00:12:13,060 --> 00:12:14,320 もう訂正し、それはそうです。 272 00:12:14,320 --> 00:12:15,630 しかし、多分、ちょっと待って それはただのまぐれだ。 273 00:12:15,630 --> 00:12:17,810 たぶん、コンピュータが動作している 少し奇妙。 274 00:12:17,810 --> 00:12:21,810 私が先に行くと、20進数のポイントをやってみましょう と私が知っている自分自身を安心させる 275 00:12:21,810 --> 00:12:22,540 数学を行う方法。 276 00:12:22,540 --> 00:12:23,460 私がプログラミングする方法を知っています。 277 00:12:23,460 --> 00:12:26,960 山車1、再コンパイルを行い、畜生。 278 00:12:26,960 --> 00:12:31,110 それは、本当になっている 遠くマークから。 279 00:12:31,110 --> 00:12:32,490 >> だから、ここで何が起こっているの? 280 00:12:32,490 --> 00:12:36,050 直感的には、我々の仮定に基づいて 以前のデータ型のサイズについて、 281 00:12:36,050 --> 00:12:38,040 ここで何が起こっている必要があり ボンネットの下に? 282 00:12:38,040 --> 00:12:39,290 うん? 283 00:12:39,290 --> 00:12:43,000 284 00:12:43,000 --> 00:12:43,590 まさに。 285 00:12:43,590 --> 00:12:46,480 このくらいの精度が必要な場合は、と それは精度の多くの一体だ - 286 00:12:46,480 --> 00:12:48,770 小数点以下20の数字。 287 00:12:48,770 --> 00:12:51,990 あなたはおそらく表現できない あなたが持っている限り、任意の数の 288 00:12:51,990 --> 00:12:52,930 任意のビット数。 289 00:12:52,930 --> 00:12:54,190 しかし、我々はしないでください。 290 00:12:54,190 --> 00:12:57,200 フロートの場合、我々は唯一の32ビットがあります。 291 00:12:57,200 --> 00:13:02,260 >> 32ビットのみに入れ替えできるようにする場合 道 - ちょうど私たちの人間のように、段階 292 00:13:02,260 --> 00:13:05,780 手を上下に - 有限数で 方法は、有限個しかありませ 293 00:13:05,780 --> 00:13:08,640 実数では表すことができます これらのビットで。 294 00:13:08,640 --> 00:13:10,500 そして最終的にコンピュータ に持っているために起こっている 295 00:13:10,500 --> 00:13:11,730 手抜きを開始します。 296 00:13:11,730 --> 00:13:15,500 コンピュータは、これらの詳細を隠すことができます 少し時間のために私たちから。 297 00:13:15,500 --> 00:13:18,880 しかし、我々は数字で突っつい開始した場合 そしてより遠くを見て 298 00:13:18,880 --> 00:13:23,220 全体の数字の末尾の数字、 そして我々はそれがあることがわかり始める 299 00:13:23,220 --> 00:13:26,480 実際に近似 十分の一のアイデア。 300 00:13:26,480 --> 00:13:29,860 >> そしてそれは結局、悲劇的に、そこ 数字の数が無限 301 00:13:29,860 --> 00:13:35,060 我々は正確に表すことができません 少なくとも有限の持つコンピュータ、 302 00:13:35,060 --> 00:13:38,030 ビット数は有限 RAMの量。 303 00:13:38,030 --> 00:13:41,210 さて、残念ながら、この時々 現実世界の影響を持っています。 304 00:13:41,210 --> 00:13:45,980 人々は非常にこのことを理解していない場合 またはソートの付与という事実を取る 305 00:13:45,980 --> 00:13:48,310 自分のコンピュータは何をするだけという 彼らが行うとしないためにそれを教えてくれ 306 00:13:48,310 --> 00:13:51,430 これらの基礎を理解する 表現の詳細 - 307 00:13:51,430 --> 00:13:55,290 率直に言って、いくつかの言語であり、これ Cとは異なり、ユーザから隠さ - 308 00:13:55,290 --> 00:13:56,500 いくつかの悪いことが起こる可能性があります。 309 00:13:56,500 --> 00:13:58,650 >> と私は、我々がやるだろうと思っていた ステップを取り戻すさ。 310 00:13:58,650 --> 00:14:00,420 そして、これは約 8分間のビデオ。 311 00:14:00,420 --> 00:14:04,200 それは数年前に放送され、それが与える 行くことができ、実際にどのような洞察 312 00:14:04,200 --> 00:14:09,290 間違ったあなたは、これらを過小に感謝するとき 非常にすべてあまりににおける細部の種類 313 00:14:09,290 --> 00:14:10,080 現実の世界。 314 00:14:10,080 --> 00:14:12,965 私たちは薄暗いライトができれば 数分間。 315 00:14:12,965 --> 00:14:14,360 >> SPEAKER 1:我々は今、工学に戻る 316 00:14:14,360 --> 00:14:17,160 現代の驚異で災害。 317 00:14:17,160 --> 00:14:18,680 >> コンピュータ - 318 00:14:18,680 --> 00:14:21,340 我々はすべて受け入れるようになってきた 頻繁にイライラする問題 319 00:14:21,340 --> 00:14:23,170 それは彼らと一緒に行く。 320 00:14:23,170 --> 00:14:27,570 バグ、ウイルス、ソフトウェアの不具合 支払うために小さな価格は 321 00:14:27,570 --> 00:14:28,960 利便性。 322 00:14:28,960 --> 00:14:32,040 しかし、ハイテク、高速で 軍事、宇宙計画 323 00:14:32,040 --> 00:14:38,650 アプリケーションでは、最小の問題 災​​害に拡大することができます。 324 00:14:38,650 --> 00:14:44,480 >> 1996年6月4日に、科学者たちは準備に 無人のアリアン5ロケットを打ち上げる。 325 00:14:44,480 --> 00:14:48,700 これは、科学衛星を運んでいた 正確にどのように確立するために設計された 326 00:14:48,700 --> 00:14:53,250 地球の磁界は、相互作用する 太陽風と。 327 00:14:53,250 --> 00:14:57,540 ロケットは、欧州のために建てられた 宇宙庁とそのからリフトオフ 328 00:14:57,540 --> 00:14:59,906 海岸の施設 仏領ギアナの。 329 00:14:59,906 --> 00:15:03,660 >> JACK GANSSLE:約37秒にAT 飛行は、彼らが最初に気づいた 330 00:15:03,660 --> 00:15:04,910 何かが間違っていた。 331 00:15:04,910 --> 00:15:08,130 ノズルに旋回された の方法は、彼らは本当にすべきでない。 332 00:15:08,130 --> 00:15:12,380 約40秒で飛行中に、 明らかに車両がトラブルにあった。 333 00:15:12,380 --> 00:15:14,400 彼らが作ったときに、それはだ それを破壊することを決定。 334 00:15:14,400 --> 00:15:18,520 と範囲の安全担当、 ボタンを押された途方もない根性、、 335 00:15:18,520 --> 00:15:23,900 それができる前にロケットを爆破 公共の安全に危険になる。 336 00:15:23,900 --> 00:15:27,810 >> SPEAKER 1:これは、処女航海だった アリアン5、その破壊の 337 00:15:27,810 --> 00:15:32,020 欠陥の埋め込みため開催されました ロケットのソフトウェアである。 338 00:15:32,020 --> 00:15:33,980 >> JACK GANSSLE:アリアン上の問題 数があったということでした 339 00:15:33,980 --> 00:15:36,390 その必要な64ビットで表現する。 340 00:15:36,390 --> 00:15:39,420 そして彼らは、変換したい 16ビットの番号へ。 341 00:15:39,420 --> 00:15:43,130 彼らは数がなかったと仮定し ほとんどのことを、非常に大きなことになるだろう 342 00:15:43,130 --> 00:15:46,810 64ビットのもの桁 数はゼロだった。 343 00:15:46,810 --> 00:15:48,270 彼らは間違っていた。 344 00:15:48,270 --> 00:15:51,380 >> SPEAKER:1つのソフトウェアの無力 種類のを受け入れるようにプログラム 345 00:15:51,380 --> 00:15:55,350 別によって生成された番号だった 障害の根本にある。 346 00:15:55,350 --> 00:15:59,970 ソフトウェア開発は非常になっていた 新技術のコストがかかる部分。 347 00:15:59,970 --> 00:16:03,980 アリアン4ロケットは非常にされていた ソフトウェアを正常に、そんなに 348 00:16:03,980 --> 00:16:07,480 それはまたあったために作成さ アリアン5で使用。 349 00:16:07,480 --> 00:16:11,980 >> PHILIPコイル:基本的な問題があった アリアン5は、速かったこと 350 00:16:11,980 --> 00:16:13,720 速く加速した。 351 00:16:13,720 --> 00:16:17,250 とソフトウェアではありませんでした それを占めた。 352 00:16:17,250 --> 00:16:20,770 >> SPEAKER 1:ロケットの破壊 、巨大な金融災害だった 353 00:16:20,770 --> 00:16:24,200 微小なソフトウェアエラーが発生したため、すべて。 354 00:16:24,200 --> 00:16:27,820 しかし、これは初めてのデータではありませんでした 変換の問題は、現代苦しめた 355 00:16:27,820 --> 00:16:30,620 ロケット技術。 356 00:16:30,620 --> 00:16:34,480 >> JACK GANSSLE:1991年、スタートして 第一次湾岸戦争、パトリオットの 357 00:16:34,480 --> 00:16:38,610 ミサイルは、似たような種類を経験した 数変換の問題。 358 00:16:38,610 --> 00:16:44,910 その結果、28のアメリカの兵士であった 殺され、約100他の人が負傷 359 00:16:44,910 --> 00:16:48,600 ときになっていたパトリオット、 着信スカッドから保護するため、 360 00:16:48,600 --> 00:16:51,630 ミサイルを発射することができませんでした。 361 00:16:51,630 --> 00:16:55,110 >> SPEAKER 1:イラクがクウェートに侵攻し、 アメリカの砂漠の嵐作戦を開始しました 362 00:16:55,110 --> 00:17:00,570 初期の1991年、パトリオットミサイル電池 サウジアラビアを守るために配備された 363 00:17:00,570 --> 00:17:04,760 イラクのスカッドからとイスラエル ミサイル攻撃。 364 00:17:04,760 --> 00:17:09,720 パトリオットは米国の中距離です 製の地対空システム 365 00:17:09,720 --> 00:17:11,569 レイセオン社。 366 00:17:11,569 --> 00:17:16,410 >> THEODORE POSTOL:パトリオットのサイズ インターセプター自体は大体です 367 00:17:16,410 --> 00:17:17,710 20フィートの長さ。 368 00:17:17,710 --> 00:17:20,800 そしてそれは、約2000ポンドの重量を量る。 369 00:17:20,800 --> 00:17:22,940 そしてそれは程度の弾頭を運ぶ - 370 00:17:22,940 --> 00:17:24,905 私はそれが大体150ポンドだと思います。 371 00:17:24,905 --> 00:17:31,030 そして弾頭自体はある い高性能爆薬 372 00:17:31,030 --> 00:17:33,270 その周りの断片。 373 00:17:33,270 --> 00:17:37,490 弾頭のケーシングは設計されています 散弾のよ​​うに行動する。 374 00:17:37,490 --> 00:17:40,720 >> SPEAKER 1:ミサイルは4を運ばれる コンテナあたりと輸送される 375 00:17:40,720 --> 00:17:43,050 セミトレーラーで。 376 00:17:43,050 --> 00:17:47,490 >> PHILIPコイル:パトリオット対ミサイル システムがでさかのぼる 377 00:17:47,490 --> 00:17:50,710 少なくとも今20歳。 378 00:17:50,710 --> 00:17:54,350 もともととして設計されました 防空ミサイルへ 379 00:17:54,350 --> 00:17:56,190 敵の飛行機を撃墜。 380 00:17:56,190 --> 00:18:02,490 第一次湾岸戦争では、ときに戦争 一緒に来て、軍はそれを使用したい 381 00:18:02,490 --> 00:18:05,535 スカッドはなく、飛行機を撃墜する。 382 00:18:05,535 --> 00:18:09,310 イラク空軍ではなかった そんなに問題。 383 00:18:09,310 --> 00:18:12,450 しかし、軍がスカッド心配していた。 384 00:18:12,450 --> 00:18:15,950 そして彼らは、アップグレードしようとした パトリオット。 385 00:18:15,950 --> 00:18:18,750 >> SPEAKER 1:敵のミサイルをインターセプト マッハ5で移動することはあった 386 00:18:18,750 --> 00:18:20,890 十分に挑戦するつもり。 387 00:18:20,890 --> 00:18:25,590 しかしパトリオットはに突入したときに サービスは、陸軍は認識していなかった 388 00:18:25,590 --> 00:18:31,710 自分を作ったイラクの変更 ヒットすることはほぼ不可能スカッド。 389 00:18:31,710 --> 00:18:35,240 >> THEODORE POSTOL:何が起こった あったスカッドです 390 00:18:35,240 --> 00:18:36,570 入ってくると、不安定であった。 391 00:18:36,570 --> 00:18:37,532 彼らはウォブリングた。 392 00:18:37,532 --> 00:18:43,220 この理由はで、イラク人だった のうち600キロを取得するために 393 00:18:43,220 --> 00:18:47,530 かかった300キロの範囲でミサイル、 フロント弾頭外重量。 394 00:18:47,530 --> 00:18:49,290 彼らは、弾頭を軽量化。 395 00:18:49,290 --> 00:18:53,110 だから今パトリオットはしようとしている スカッドで来ています。 396 00:18:53,110 --> 00:18:56,470 とほとんどの時間、圧倒的な 時間の大半は、それだけだろう 397 00:18:56,470 --> 00:18:58,730 スカッドで飛ぶ。 398 00:18:58,730 --> 00:19:01,760 >> SPEAKER 1:一度パトリオットシステム オペレータはパトリオットが見逃し実現 399 00:19:01,760 --> 00:19:06,690 そのターゲットに、彼らはペイトリオッツを爆発 可能性を避けるために弾頭 400 00:19:06,690 --> 00:19:10,300 それが許可された場合の死傷者 地面に落ちるように。 401 00:19:10,300 --> 00:19:14,540 >> THEODORE POSTOL:何ほとんどだった 人々は空に大きな火の玉として見 402 00:19:14,540 --> 00:19:20,350 とインターセプトと誤解 スカッドの弾頭の。 403 00:19:20,350 --> 00:19:23,320 >> SPEAKER 1:夜空の形態では ペイトリオッツは、正常であるように見えた 404 00:19:23,320 --> 00:19:27,530 そこダーランで、スカッドを破壊 そのについては間違いであることができなかった 405 00:19:27,530 --> 00:19:29,140 パフォーマンス。 406 00:19:29,140 --> 00:19:34,180 そこでは、パトリオットのレーダーシステムが失われた 着信スカッド、決してのトラック 407 00:19:34,180 --> 00:19:36,380 ソフトウェアの欠陥が原因で立ち上げました。 408 00:19:36,380 --> 00:19:39,890 409 00:19:39,890 --> 00:19:42,700 >> これは、最初に発見されていたイスラエル人 そのシステム長い 410 00:19:42,700 --> 00:19:48,020 、長い時間の不一致にあった クロックのためになりました 411 00:19:48,020 --> 00:19:50,470 システムのコンピュータに埋め込まれた。 412 00:19:50,470 --> 00:19:54,640 >> JACK GANSSLE:約2週間前 ダーラン、イスラエルで悲劇 413 00:19:54,640 --> 00:19:58,440 国防総省に報告 システムは、時間を失ったこと。 414 00:19:58,440 --> 00:20:01,280 実行中の約8時間後に、 彼らは、システムがあることに気づい 415 00:20:01,280 --> 00:20:03,530 著しくあまり正確になりつつ。 416 00:20:03,530 --> 00:20:07,710 国防総省は、によって答え パトリオット電池のすべてを伝える 417 00:20:07,710 --> 00:20:10,500 システムのままにしないように 長い時間のために。 418 00:20:10,500 --> 00:20:12,430 彼らは長い時間が何であったか言ったことはない。 419 00:20:12,430 --> 00:20:13,330 八時間? 420 00:20:13,330 --> 00:20:13,810 10時間? 421 00:20:13,810 --> 00:20:14,990 1,000時間? 422 00:20:14,990 --> 00:20:17,150 誰も知りませんでした。 423 00:20:17,150 --> 00:20:20,220 >> SPEAKER 1:駐留パトリオット電池 ダーランで兵舎で 424 00:20:20,220 --> 00:20:24,660 その欠陥内部クロックがあった の夜に100時間以上に 425 00:20:24,660 --> 00:20:27,470 2月25日。 426 00:20:27,470 --> 00:20:31,770 >> JACK GANSSLE:それは時間を追跡 10分の1秒程度の精度。 427 00:20:31,770 --> 00:20:34,480 さて、10分の1秒です それができないので、興味深い数 428 00:20:34,480 --> 00:20:39,940 つまり、正確にバイナリで表現 それは正確で表現できない 429 00:20:39,940 --> 00:20:42,500 どんな現代のデジタルコンピュータ。 430 00:20:42,500 --> 00:20:46,920 それは信じがたいですが、 例としてこれを使用しています。 431 00:20:46,920 --> 00:20:49,000 のは、番号の三分の一を見てみましょう。 432 00:20:49,000 --> 00:20:53,150 3分の1が表現できない 正確に小数である。 433 00:20:53,150 --> 00:20:57,500 三分の一は、0.333起こっている 無限大のために。 434 00:20:57,500 --> 00:21:02,270 とそれを行う方法はありません 進数で絶対精度。 435 00:21:02,270 --> 00:21:05,370 それはまさに問題の同じようなものだ それはパトリオットで起こった。 436 00:21:05,370 --> 00:21:09,880 もはやこのシステムは、走った 最悪時エラーになりました。 437 00:21:09,880 --> 00:21:13,840 >> SPEAKER 1:操​​作の100時間後、 時間の誤差だけだった 438 00:21:13,840 --> 00:21:16,140 第二の約3分の1。 439 00:21:16,140 --> 00:21:20,800 しかし、ミサイルを標的の面で マッハ5で移動し、それがもたらした 440 00:21:20,800 --> 00:21:24,410 以上600メートルのトラッキングエラー。 441 00:21:24,410 --> 00:21:27,670 それはのために致命的なエラーになります ダーランで兵士。 442 00:21:27,670 --> 00:21:33,450 >> THEODORE POSTOL:何が起こっている スカッド打ち上げは早期により検出された 443 00:21:33,450 --> 00:21:34,280 警戒衛星。 444 00:21:34,280 --> 00:21:38,550 そして、彼らはスカッドが来ていたことを知っていた 彼らの一般的な方向である。 445 00:21:38,550 --> 00:21:41,000 彼らはそれが来ていたか分からなかった。 446 00:21:41,000 --> 00:21:43,900 >> SPEAKER 1:これは、レーダーまですぐだった パトリオットシステムの構成要素 447 00:21:43,900 --> 00:21:48,910 見つけて維持するダーランを擁護 入ってくる敵のミサイルを追跡。 448 00:21:48,910 --> 00:21:50,580 >> JACK GANSSLE:レーダー 非常にスマートだった。 449 00:21:50,580 --> 00:21:53,770 これは、実際の位置を追跡するだろ どこにスカッドその後を予測 450 00:21:53,770 --> 00:21:57,160 おそらく次回だろう レーダーパルスを送った。 451 00:21:57,160 --> 00:21:58,870 それはレンジゲートと呼ばれていました。 452 00:21:58,870 --> 00:22:04,020 >> THEODORE POSTOL:その後パトリオット一度 十分な時間が行くことに合格していることを決定 453 00:22:04,020 --> 00:22:09,420 背中との次の場所を確認 この検出されたオブジェクトは、それが戻って行く。 454 00:22:09,420 --> 00:22:14,450 だから、それが間違ってに戻ったとき 場所は、それはその後にオブジェクトを見ていません。 455 00:22:14,450 --> 00:22:18,200 それは、どのオブジェクトがなかったと判断した それは誤検出だった、と 456 00:22:18,200 --> 00:22:19,680 トラックを削除します。 457 00:22:19,680 --> 00:22:22,970 >> SPEAKER 1:受信スカッドが消えた レーダー画面から、と 458 00:22:22,970 --> 00:22:26,050 数秒後には非難 兵舎に。 459 00:22:26,050 --> 00:22:31,950 スカッドは28を殺し、最後の一つでした 最初の湾岸戦争時に解雇した。 460 00:22:31,950 --> 00:22:37,700 悲劇的に、更新されたソフトウェアが到着 ダーランで翌日。 461 00:22:37,700 --> 00:22:41,800 ソフトウェアの欠陥が修正されていた、 問題を抱えた内の1つの章を閉じる 462 00:22:41,800 --> 00:22:43,690 パトリオットミサイルの歴史。 463 00:22:43,690 --> 00:22:46,780 464 00:22:46,780 --> 00:22:50,710 >> パトリオットは、実際には頭字語です フェイズドアレイ追跡するため 465 00:22:50,710 --> 00:22:51,960 ターゲットの切片。 466 00:22:51,960 --> 00:22:54,650 467 00:22:54,650 --> 00:23:00,840 >> DAVID Jマラン:すべての権利、そう 確かに、例をありのまま。 468 00:23:00,840 --> 00:23:03,430 そして幸いにも、これらの低レベル バグは、我々はよ何かではありません 469 00:23:03,430 --> 00:23:06,220 通常、確かに、感謝しなければならない はなく、私たちの一部と 470 00:23:06,220 --> 00:23:07,360 プログラムの初期。 471 00:23:07,360 --> 00:23:10,450 むしろ、バグのほとんどはあなたよ 出会いは、自然の中で論理的になります 472 00:23:10,450 --> 00:23:12,900 自然の中で統語それによって コー​​ドはちょうど動作しません。 473 00:23:12,900 --> 00:23:14,140 そして、あなたはそれがかなり速いね。 474 00:23:14,140 --> 00:23:16,850 >> しかし、我々に着く場合は特に 学期の終わりには、に起こっている 475 00:23:16,850 --> 00:23:20,620 への可能性をますますなる 本当にデザインについて真剣に考える 476 00:23:20,620 --> 00:23:22,960 あなたのプログラムの基礎となるの 表現 477 00:23:22,960 --> 00:23:24,520 そこにも、データを。 478 00:23:24,520 --> 00:23:28,010 例えば、我々は、MySQLの紹介 これは、一般的なデータベース·エンジンです 479 00:23:28,010 --> 00:23:30,850 あなたはにウェブサイトと使用できる バックエンドにデータを保存。 480 00:23:30,850 --> 00:23:34,630 そして、あなたはで決定を開始する必要があります 学期末だけでなく、どのような 481 00:23:34,630 --> 00:23:38,790 使用するためにこれらの線に沿ってデータの種類 しかし、使用するには、正確にどのように多くのビット、 482 00:23:38,790 --> 00:23:42,740 あなたは、日付を格納するかどうか 日付や時刻などの時間、また、 483 00:23:42,740 --> 00:23:46,890 あなたはどのように大きなたいようなもの 、のためであると言って一意のID、ユーザ 484 00:23:46,890 --> 00:23:47,680 あなたのデータベースである。 485 00:23:47,680 --> 00:23:51,210 >> 実際には、あなた方の何人かが持っていた場合 Facebookは、かなりの時間を占めている 486 00:23:51,210 --> 00:23:53,680 そしてあなたは、アクセスを取得する方法を知っている - ユーザーIDに 487 00:23:53,680 --> 00:23:57,930 時々あなたに表示される あなたが選択した場合を除き、プロファイルのURL 488 00:23:57,930 --> 00:24:02,070 URLのニックネーム、またはあなたがしている場合 FacebookのグラフAPI、使用 489 00:24:02,070 --> 00:24:05,510 によってあなた公的に利用可能なAPI 生データのためにFacebookを利用して求めることができます - 490 00:24:05,510 --> 00:24:07,580 あなたの数値IDが何であるかを見ることができます。 491 00:24:07,580 --> 00:24:10,880 そして何年か前に、Facebookの本質 使用してから変更しなければならなかった 492 00:24:10,880 --> 00:24:15,980 長く使用するintの同等 長い時間をかけてユーザーが来るとので 493 00:24:15,980 --> 00:24:19,780 と行くとアカウントの多くを作成し、 偽アカウントも、彼らは非常に簡単に 494 00:24:19,780 --> 00:24:24,630 4のようなものを排出することができました int型のような億可能な値。 495 00:24:24,630 --> 00:24:28,340 >> 問題のこれらの種類に関するので、より多くの 道だけでなく、。 496 00:24:28,340 --> 00:24:30,750 キャスティングされたように、すべての権利、。 497 00:24:30,750 --> 00:24:31,670 それが不正確だった。 498 00:24:31,670 --> 00:24:32,730 迅速な発表のカップル。 499 00:24:32,730 --> 00:24:35,710 だからセクションでは、正式にこれが来始める 日曜日、月曜日、火曜日。 500 00:24:35,710 --> 00:24:39,080 あなたは、今週後半に電子メールを介して聞くことができます あなたのセクションの割り当てに関して。 501 00:24:39,080 --> 00:24:42,570 そして、あなたはどのように、その時点でもここよ あなたの場合は、セクションを変更する 502 00:24:42,570 --> 00:24:45,660 スケジュールは今変更したりしている 快適さのレベルは現在変更されています。 503 00:24:45,660 --> 00:24:49,380 1である一方、P-セット1とハッカー のオプションを使用して、この木曜日のため 504 00:24:49,380 --> 00:24:52,450 当たりその期限を延長 金曜日までの仕様 505 00:24:52,450 --> 00:24:53,830 典型的な方法である。 506 00:24:53,830 --> 00:24:57,500 >> 問題に含まれていることを認識 セットの仕様は上の命令である 507 00:24:57,500 --> 00:25:02,770 CS50アプライアンスを使用する方法、メイク、 だけでなく、いくつかのCS50特定のツール 508 00:25:02,770 --> 00:25:06,540 を提供することができますスタイル50、のような 上に動的にフィードバックを 509 00:25:06,540 --> 00:25:10,230 あなたのコードスタイルの質とも あなたが提供することができ50をチェック 510 00:25:10,230 --> 00:25:13,160 あなたのような動的なフィードバック コー​​ドの正しさ。 511 00:25:13,160 --> 00:25:16,850 我々はまだ備わっていることを許す チェック50といくつかのねじれ外。 512 00:25:16,850 --> 00:25:21,490 始めたのはクラスメート数 4の周りには、金曜日の夜の午前時 513 00:25:21,490 --> 00:25:25,130 仕様では、それ以来、気づいて上がった 私たちが作業していることをいくつかのバグ 514 00:25:25,130 --> 00:25:29,010 を通じて、そしてだれでものための謝罪 過度の欲求不満を経験している。 515 00:25:29,010 --> 00:25:30,340 障害は私のものです。 516 00:25:30,340 --> 00:25:34,080 しかし、我々はCS50をフォローアップします それが解決されたときについて説明します。 517 00:25:34,080 --> 00:25:35,700 >> スコア自体に単語だから。 518 00:25:35,700 --> 00:25:38,990 だから、それはあなたの前の週または2つになるでしょう 問題セットのフィードバックを得るために開始 519 00:25:38,990 --> 00:25:40,640 あなたはまだ持っていないので、 教育仲間。 520 00:25:40,640 --> 00:25:44,510 そしてその時でさえ、私たちは、評価するために開始されます C言語の問題は、我々の前に設定し 521 00:25:44,510 --> 00:25:46,970 戻ってスクラッチそう評価する あなたは、より関連性の高い得ること 522 00:25:46,970 --> 00:25:48,150 より迅速にフィードバック。 523 00:25:48,150 --> 00:25:51,870 しかし、シラバスあたり一般的には、CS50 問題セットが沿って評価される 524 00:25:51,870 --> 00:25:53,580 - 4つの軸に続く 525 00:25:53,580 --> 00:25:55,760 スコープ、正確性、デザイン、そしてスタイル。 526 00:25:55,760 --> 00:25:59,210 >> スコープは通常、数字になるだろう そのゼロの間で、5 527 00:25:59,210 --> 00:26:01,830 のどれだけをキャプチャ あなたがオフに噛んという作品。 528 00:26:01,830 --> 00:26:03,750 通常は、これが5になりたい。 529 00:26:03,750 --> 00:26:05,300 少なくとも、すべてのものを試してみました。 530 00:26:05,300 --> 00:26:09,330 そして、それは倍数因子のお知らせ だからの一部だけをやって 531 00:26:09,330 --> 00:26:12,520 問題セットは、最善の戦略ではありません。 532 00:26:12,520 --> 00:26:15,610 >> 一方、より明白である 正しさの重要性 - 533 00:26:15,610 --> 00:26:18,620 ただあなたのプログラムがで正しいです 仕様に関して? 534 00:26:18,620 --> 00:26:21,510 これは意図的にもっと加重さ 重くすることによって、他二つの軸より 535 00:26:21,510 --> 00:26:24,450 3倍に我々は認識しているため 通常は費やすつもりだという 536 00:26:24,450 --> 00:26:28,600 多くの時間は、いくつかのバグを追いかけ、 あなたのコードが動作するようになって、その後、 537 00:26:28,600 --> 00:26:31,540 それをインデントし、選択している 適切な変数名と 538 00:26:31,540 --> 00:26:33,800 好き、これは、もう一方の端にある スタイルのスペクトルの。 539 00:26:33,800 --> 00:26:36,160 >> それはスタイルではないと言うことはありません 重要であり、我々はそれを上に説くだろう 540 00:26:36,160 --> 00:26:37,920 講義とセクションの両方で時間。 541 00:26:37,920 --> 00:26:40,520 スタイルは美学を指し コー​​ドの。 542 00:26:40,520 --> 00:26:43,980 あなたはよく名前の変数を選択した 短いが多少あること 543 00:26:43,980 --> 00:26:44,680 わかりやすい? 544 00:26:44,680 --> 00:26:47,840 あなたが見てきたようにコードがインデントされて 講義と一貫した方法で 545 00:26:47,840 --> 00:26:49,070 スタイル50は? 546 00:26:49,070 --> 00:26:51,220 >> 最後に右のデザインです そこに真ん中である。 547 00:26:51,220 --> 00:26:54,090 デザインは、置くことが難しいものです それははるかだから上の指 548 00:26:54,090 --> 00:26:55,000 主観的。 549 00:26:55,000 --> 00:26:58,610 しかし、それは、おそらく最も重要なの 教育の観点から3つの軸 550 00:26:58,610 --> 00:27:02,050 時間をかけて、その値はこれは次のようになります 教育仲間の機会に 551 00:27:02,050 --> 00:27:04,110 あなたには、定性的なフィードバックを提供します。 552 00:27:04,110 --> 00:27:08,100 実際、CS50に我々は持っているにもかかわらず 最後にこれらの式とスコア、 553 00:27:08,100 --> 00:27:11,350 日のこれらは、非常に意図的です 非常に小さなバケツ - ポイント値 554 00:27:11,350 --> 00:27:13,460 ゼロと3の間に とゼロと5。 555 00:27:13,460 --> 00:27:17,800 我々は非常に粗い線を描画しようとしないでください 問題セット間の間、または 556 00:27:17,800 --> 00:27:21,490 学生ではなく、むしろできるだけ焦点 我々は、定性的に、手書きすることができます 557 00:27:21,490 --> 00:27:25,490 からのフィードバック、どちら型付けまたは口頭 あなたの特定の教授仲間、 558 00:27:25,490 --> 00:27:27,050 あなたは非常によく知るようになるでしょう。 559 00:27:27,050 --> 00:27:32,340 >> しかし、一般的に、それらは重みがある さまざまな軸は必要があること。 560 00:27:32,340 --> 00:27:35,480 一方、あまりにも、それがで保つ価値がある あなたはその仮定すべきではないということを覚え 561 00:27:35,480 --> 00:27:38,870 5のうち、3人が60%と したがって、大体失敗。 562 00:27:38,870 --> 00:27:41,410 3つの意図的であることを意味し 良い道路の真ん中のようなもの。 563 00:27:41,410 --> 00:27:43,480 あなたはでスリーを取得している場合 学期の始まり、それはだ 564 00:27:43,480 --> 00:27:46,340 確かに良いことを意図 開始する場所。 565 00:27:46,340 --> 00:27:50,510 あなたが補数、見本市を取得している場合は、そこ 少しを支払うことを間違いなくいくつかの作業 566 00:27:50,510 --> 00:27:53,250 活用するために多くの注意、 セクションと営業時間の。 567 00:27:53,250 --> 00:27:54,590 >> あなたは四つんばいを取得している場合 とファイブ、素晴らしい。 568 00:27:54,590 --> 00:27:57,430 しかし、実際、我々は軌道を見てほしい 学生の間で - 非常に 569 00:27:57,430 --> 00:28:00,575 学生ごとに個別化が、開始 一種の中でここに学期 570 00:28:00,575 --> 00:28:04,100 3の範囲には2つですが終了 ここまで四から五の範囲である。 571 00:28:04,100 --> 00:28:05,440 それは我々が本当に探しているものだ。 572 00:28:05,440 --> 00:28:09,590 そして、私たちは心にデルタのことを続けるのですか あなたは週にゼロと週の間で展示 573 00:28:09,590 --> 00:28:12,170 私はグレードをやって12。 574 00:28:12,170 --> 00:28:16,380 それは絶対にどのように私たちには関係ありません あなたの場合初めに公正あなた 575 00:28:16,380 --> 00:28:19,330 軌道は確かです 上向きと強い。 576 00:28:19,330 --> 00:28:24,000 >> アカデミック正直 - ので、私は私に入れさせ ちょっと、より深刻な声。 577 00:28:24,000 --> 00:28:28,510 だから、このコースでは、の区別を持っている 他よりも多くの学生を送信 578 00:28:28,510 --> 00:28:30,950 広告ボードに歴史の中で、私は信じています。 579 00:28:30,950 --> 00:28:34,220 我々はこれで失わカウントのようなものを持っている これが起こる頻度の点。 580 00:28:34,220 --> 00:28:37,090 そして、それは50の学生ではありませんので、 いずれは、彼らよりも不誠実である 581 00:28:37,090 --> 00:28:38,690 他の場所でクラスメート。 582 00:28:38,690 --> 00:28:42,800 しかし、我々は非常に良好であることも、実現する この種のことを検出で。 583 00:28:42,800 --> 00:28:45,920 >> そして、それは利点である コンピュータサイエンスのクラスが持っている中で、私たち 584 00:28:45,920 --> 00:28:49,110 そして我々はすべての学生を比較することができない 問題は、すべてに対してペアワイズセット 585 00:28:49,110 --> 00:28:51,470 その他、今年だけでなく、 しかし、すべて過年度。 586 00:28:51,470 --> 00:28:55,080 我々の学生のように、能力を持っている Googleやコードを見つけるためにクラス、 587 00:28:55,080 --> 00:28:57,440 githubのようなサイトとオン ディスカッションフォーラム。 588 00:28:57,440 --> 00:29:00,840 CS50のに絶対に解決策があります そこに漂っpは、設定されます。 589 00:29:00,840 --> 00:29:02,710 しかし、あなたはそれらを見つけることができれば、 我々はそれらを見つけることができます。 590 00:29:02,710 --> 00:29:07,130 そして、これのすべては非常に自動化されている そして私たちが見つけやすいと悲しい。 591 00:29:07,130 --> 00:29:10,990 >> しかし、私は、あまりにも、強調しておきたいこと 当然の学術正直ポリシーです 592 00:29:10,990 --> 00:29:13,960 非常に大変であることを意味 その精神の反対。 593 00:29:13,960 --> 00:29:17,506 確かに、今年の我々は物事を言い換えました このなるようにシラバスに、ドット 594 00:29:17,506 --> 00:29:19,790 詳細ドットドット、 シラバスである。 595 00:29:19,790 --> 00:29:22,860 しかし、コース内の包括的なテーマ 本当に合理的であることです。 596 00:29:22,860 --> 00:29:26,160 我々は、有意性があることを認識する 教育の量 597 00:29:26,160 --> 00:29:30,550 ある程度まで、コラボレーションの値、 クラスメートと、それによってあなた 598 00:29:30,550 --> 00:29:33,700 2または3かそれ以上である ホワイトボードに立って 599 00:29:33,700 --> 00:29:35,670 そうにホワイトボード、 、あなたのアイデアを話す - 600 00:29:35,670 --> 00:29:39,480 写真で擬似コードを書いて、 ばマリオはどうあるべきかを図式化 601 00:29:39,480 --> 00:29:41,350 あなたはそれを最初に書くことがあった 擬似コードである。 602 00:29:41,350 --> 00:29:43,240 何が貪欲アルゴリズムべき - 603 00:29:43,240 --> 00:29:46,100 あたりどのように振る舞うべき 問題は、1を設定します? 604 00:29:46,100 --> 00:29:50,440 >> そしてその動作を実現 我々は非常にあることを奨励 605 00:29:50,440 --> 00:29:51,470 これらの線に沿ってずっと。 606 00:29:51,470 --> 00:29:53,890 とシラバスには、表示されます 下の弾丸の全体の束 607 00:29:53,890 --> 00:29:57,740 合理的なカテゴリと合理的ではない 私たちは助けて助けカテゴリ 608 00:29:57,740 --> 00:30:00,740 あなたの心をどこに包み込む 私たちは、その線を引くん。 609 00:30:00,740 --> 00:30:04,340 親指の一般的に、まともなルール あなたが解決するために苦労している場合ということです 610 00:30:04,340 --> 00:30:07,990 いくつかのバグとあなたの友人や同級生 それは、あなたの隣にされて座っている 611 00:30:07,990 --> 00:30:11,530 あなたは彼を表示するための合理的または彼女 あなたのコードとねえ、あなたは助けることができる、と言う 612 00:30:11,530 --> 00:30:13,700 私はここで間違って何が起こっているかを把握? 613 00:30:13,700 --> 00:30:17,110 >> 我々は一般的に採用しないでください 反対側。 614 00:30:17,110 --> 00:30:20,730 それはあなたのために正しい応答ではない と言ってここに友人や同級生、ああ、 615 00:30:20,730 --> 00:30:22,510 ただ鉱山と姿を見て それから、それから。 616 00:30:22,510 --> 00:30:24,400 それは無理のようなものです。 617 00:30:24,400 --> 00:30:27,750 しかし、他の誰か、別の脳を有する 目の別のペアを見て 618 00:30:27,750 --> 00:30:31,620 あなたのコードをあなたのスクリーンまたはルック と言う、あなたはよろしいです 619 00:30:31,620 --> 00:30:32,760 ここでループを持っている? 620 00:30:32,760 --> 00:30:34,800 それともあなたはよろしいです ここでそのセミコロン? 621 00:30:34,800 --> 00:30:37,090 またはああ、そのエラーメッセージとは、このことを意味します。 622 00:30:37,090 --> 00:30:39,580 それらは非常に合理的であり、 奨励行動。 623 00:30:39,580 --> 00:30:44,010 >> 私はをほのめかしていたように例 以前の学生があるときに煮詰める 624 00:30:44,010 --> 00:30:47,350 夜遅く悪い判断を行う 決定とに自分のコードを電子メールで送信 625 00:30:47,350 --> 00:30:50,130 elseまたは単に誰かが言って、 ここで、それはDropboxの中ですか 626 00:30:50,130 --> 00:30:51,610 夜遅くグーグル。 627 00:30:51,610 --> 00:30:54,880 そして私は、奨励し、あなたのことを頼むでしょう あなたはそれらの不可避を持ってない場合 628 00:30:54,880 --> 00:30:58,450 ストレスの瞬間は、最大突沸している 締め切りに対して、あなたは遅れていません 629 00:30:58,450 --> 00:31:01,490 それはその時点で既に金曜日の日から ポイントは、もちろんの頭に電子メールを送るか、または 630 00:31:01,490 --> 00:31:02,330 直接自分。 631 00:31:02,330 --> 00:31:04,790 聞く、言う、私は私でよ ここでのポイントを壊す。 632 00:31:04,790 --> 00:31:06,660 会話を持ってみましょう そしてそれを把握。 633 00:31:06,660 --> 00:31:10,400 Webや他のいくつかのではないに頼る 合理的な振る舞いは決してありません 634 00:31:10,400 --> 00:31:13,070 あなたの解決策、そして多すぎる クラスメートは、もはやここでません 635 00:31:13,070 --> 00:31:15,150 なぜならその貧しい判断のキャンパス。 636 00:31:15,150 --> 00:31:17,840 しかし、それはその行をスカートは非常に簡単です。 637 00:31:17,840 --> 00:31:22,950 >> そして、ここで応援する小さな画像です あなたが貼りからそのようになりました 638 00:31:22,950 --> 00:31:25,720 すべてがOKになります。 639 00:31:25,720 --> 00:31:30,210 >> クイック復習だから、その後、 我々は、中断したところの。 640 00:31:30,210 --> 00:31:33,690 だから先週は、我々が導入したことを思い出し スクラッチでの条件ではなく、 641 00:31:33,690 --> 00:31:34,880 しかし、C言語で、この時間。 642 00:31:34,880 --> 00:31:38,300 そして、いくつかの新しい構文がありましたが、 それ自体は実際には新しいアイデアはありません。 643 00:31:38,300 --> 00:31:42,630 我々は可能性がブール式がありました または一緒に縦2 644 00:31:42,630 --> 00:31:46,490 2とバーやと一緒に アンパサンド、左両方のことを言っ 645 00:31:46,490 --> 00:31:49,990 右が真でなければならない これを実行するため。 646 00:31:49,990 --> 00:31:53,150 その後、我々は見てのスイッチを持っていた 簡潔に、しかし、私は本当にしている提案 647 00:31:53,150 --> 00:31:56,830 達成するためだけ異なる構文 あなたは目標の同じ種類で知っていれば 648 00:31:56,830 --> 00:31:59,270 何をあなたのケース進める になるだろうしている。 649 00:31:59,270 --> 00:32:00,160 >> 私たちは、ループを見た。 650 00:32:00,160 --> 00:32:03,340 forループは、おそらく最も一般的です または少なくとも一つのその人 651 00:32:03,340 --> 00:32:05,330 一般的に本能的に手を伸ばす。 652 00:32:05,330 --> 00:32:08,240 それは少し不可解に見えるにもかかわらず、 この、多くの、多くの例を見ることができます 653 00:32:08,240 --> 00:32:11,590 ずっと前に、あなたが持っている すでに先週末。 654 00:32:11,590 --> 00:32:14,280 ループは同様にすることができますが 同じことを実現する。 655 00:32:14,280 --> 00:32:17,550 しかし、あなたは、任意のインクリメントを行いたい場合 またはの更新 656 00:32:17,550 --> 00:32:20,230 変数の値は、その必要はあり 以上手動でなく、それを行う 657 00:32:20,230 --> 00:32:22,440 forループの前になります。 658 00:32:22,440 --> 00:32:25,310 そしてDO-whil​​eループは、そこ 私たちで何かをすることを可能にする 659 00:32:25,310 --> 00:32:28,460 少なくともたまに何か それ以外はtrueです。 660 00:32:28,460 --> 00:32:31,550 そして、これはのために特に適しています したいプログラムやゲームのための 661 00:32:31,550 --> 00:32:33,810 何かのためにユーザーにプロンプ​​トを表示する 少なくとも一度。 662 00:32:33,810 --> 00:32:37,110 そして彼または彼女は、協力しない場合 あなたはそれをしたいと思うかもしれません 663 00:32:37,110 --> 00:32:38,420 何度も何度も。 664 00:32:38,420 --> 00:32:41,270 >> 変数を使用すると、その間、我々はラインを持っていた このようなコードは、その可能性 665 00:32:41,270 --> 00:32:41,950 二行である。 666 00:32:41,950 --> 00:32:44,830 あなたが呼ばれるint型を宣言することができ カウンター、セミコロン。 667 00:32:44,830 --> 00:32:47,660 それとも、ただ宣言することができます いわば、それを定義します。 668 00:32:47,660 --> 00:32:49,950 それに同時に値を与えます。 669 00:32:49,950 --> 00:32:51,890 >> そして最後に、我々は話を 関数について。 670 00:32:51,890 --> 00:32:54,270 そして、これは良い例であった それが示しているという意味 671 00:32:54,270 --> 00:32:55,840 機能の2つのタイプ。 672 00:32:55,840 --> 00:32:59,030 一つは、GetStringメソッド()であり、その、再び、 ユーザーからの文字列を取得します。 673 00:32:59,030 --> 00:33:02,040 しかし、GetStringメソッド()は、興味深いの一種である これまでのところ、我々はそれを使用してきたように、 674 00:33:02,040 --> 00:33:05,620 我々は常にそれを使用しましたので、 の左側に何か 675 00:33:05,620 --> 00:33:06,600 等号。 676 00:33:06,600 --> 00:33:09,830 それはそのGetStringメソッドを()と言うことです 値を返します。 677 00:33:09,830 --> 00:33:11,970 それは、もちろん、文字列を返します。 678 00:33:11,970 --> 00:33:15,130 そして左側に、我々はしている 単に内部でその文字列を保存する 679 00:33:15,130 --> 00:33:16,580 変数名と呼ばれる。 680 00:33:16,580 --> 00:33:21,100 >> このことは、ある意味で、とは異なる printf関数printfのため、少なくとも我々の中で 681 00:33:21,100 --> 00:33:23,540 ここで使用法は、何も返しません。 682 00:33:23,540 --> 00:33:24,960 余談ですが、それが何かを返しません。 683 00:33:24,960 --> 00:33:26,380 私達はちょうどそれが何であるかを気にしない。 684 00:33:26,380 --> 00:33:29,090 しかし、それは何がありますか 副作用と呼ばれる。 685 00:33:29,090 --> 00:33:31,840 そして、すべてのその副作用は何ですか 我々はこれまで見てきた場合? 686 00:33:31,840 --> 00:33:34,720 printfは何をしますか? 687 00:33:34,720 --> 00:33:37,780 それは、画面に何かを出力します テキストまたは数値か何かが表示されます 688 00:33:37,780 --> 00:33:38,380 画面上で。 689 00:33:38,380 --> 00:33:41,170 そして、それはただの副作用と考えられてい それは実際に手渡しではないので 690 00:33:41,170 --> 00:33:41,900 それは私に戻って。 691 00:33:41,900 --> 00:33:44,770 それは内部の答えではありません 私はそれからできることブラックボックス 692 00:33:44,770 --> 00:33:46,130 に達するとつかむ。 693 00:33:46,130 --> 00:33:49,160 それはちょうど、自分自身でずっとそれをやっている コルトンこれに差し込まれていたように 694 00:33:49,160 --> 00:33:52,560 ブラックボックス先週、彼何とか 魔法のようにボードに描いていた 695 00:33:52,560 --> 00:33:54,500 私なしで実際に関与。 696 00:33:54,500 --> 00:33:55,560 すなわち、副作用であろう。 697 00:33:55,560 --> 00:33:59,100 しかし、私は実際に戻って到達しなければならない場合 ここと、ああ、ここに文字列である、と言う 698 00:33:59,100 --> 00:34:02,040 ユーザから、それはでしょう 戻り値である。 699 00:34:02,040 --> 00:34:05,650 >> そして、これまで私たちは、関数のみを使用してきました 他の人が書かれていること。 700 00:34:05,650 --> 00:34:09,219 しかし、我々は実際にこれらを行うことができます 自分自身のものの種類。 701 00:34:09,219 --> 00:34:12,730 だから私はに行くつもりです 再びCS50アプライアンス。 702 00:34:12,730 --> 00:34:16,020 私は我々というタブを閉じてみましょう 一瞬前に開いていた。 703 00:34:16,020 --> 00:34:18,530 そして、私が先に行くとう 新しいファイルを作成します。 704 00:34:18,530 --> 00:34:22,400 そして、私は先に行くつもりだと この1 positive.cを呼び出します。 705 00:34:22,400 --> 00:34:24,770 だから私は、と何かをしたい ここで正の数。 706 00:34:24,770 --> 00:34:27,219 だから私は先に行くとintするつもりです - 707 00:34:27,219 --> 00:34:28,000 申し訳ありません - 708 00:34:28,000 --> 00:34:31,840 #含まれています。 709 00:34:31,840 --> 00:34:34,280 それが同じで作ってないようにしましょう 以前のように間違い。 710 00:34:34,280 --> 00:34:40,020 int型メイン(ボイド)、オープン中括弧 ブレース、中括弧を閉じた。 711 00:34:40,020 --> 00:34:41,639 >> そして今、私は次のことをやってみたい。 712 00:34:41,639 --> 00:34:44,600 私はプログラムを書きたいこと ユーザが与えると主張 713 00:34:44,600 --> 00:34:46,770 私に正の整数。 714 00:34:46,770 --> 00:34:50,969 だから全くGetPositiveInt機能がありません CS50ライブラリである。 715 00:34:50,969 --> 00:34:52,610 唯一の場合、getInt()があります。 716 00:34:52,610 --> 00:34:55,790 私が持っているので、しかし、それはOKです 私が課すことのできる構文 717 00:34:55,790 --> 00:34:59,360 その値にもう少し制約。 718 00:34:59,360 --> 00:35:00,990 私はこのような何かを行うことができます。 719 00:35:00,990 --> 00:35:02,780 >> だからint型のnを - 720 00:35:02,780 --> 00:35:04,920 あなたに沿って入力している場合と、単に実現 私は戻って行くつもりだと 721 00:35:04,920 --> 00:35:06,430 瞬間にいくつかのことを変更する - 722 00:35:06,430 --> 00:35:09,960 そのint型nは場合、getInt()を等しい。 723 00:35:09,960 --> 00:35:11,780 そして、それは置くために起こっている n個のintの内部。 724 00:35:11,780 --> 00:35:13,830 そして、私は、よりわかりやすいとする。 725 00:35:13,830 --> 00:35:23,270 私はそれを要求するように私が何かを言ってみましょう あなたは私に正の整数を与える。 726 00:35:23,270 --> 00:35:23,550 >> わかりました。 727 00:35:23,550 --> 00:35:25,250 だから命令の少しだけ。 728 00:35:25,250 --> 00:35:26,270 そして今、私は何ができますか? 729 00:35:26,270 --> 00:35:29,840 まあ、私はすでに私の単純なものから知る ちょうど私のような条件や枝、 730 00:35:29,840 --> 00:35:36,100 スクラッチで持っていた、私が何かを言うことができる nは以下に等しい場合、タグ 731 00:35:36,100 --> 00:35:44,460 ゼロ、私は何かをしたい 好き、それはポジティブではありません。 732 00:35:44,460 --> 00:35:45,560 そして私は行うことができます - 733 00:35:45,560 --> 00:35:47,310 [OK]を、私は本当にそのint型を取得したい。 734 00:35:47,310 --> 00:35:52,020 だから私はここに行くことができると私は一種でし のは、これをコピーし、これをインデント。 735 00:35:52,020 --> 00:35:52,570 そして、[OK]をクリックします。 736 00:35:52,570 --> 00:35:56,990 nは、以下であるのであれば ゼロに等しいが、これを行う。 737 00:35:56,990 --> 00:35:58,900 >> さて、どのような場合に、ユーザー 協力しない? 738 00:35:58,900 --> 00:36:01,560 さて、その後、私はするつもりです ここでこれを借りる。 739 00:36:01,560 --> 00:36:03,130 そして、私はここに行く とこことここ。 740 00:36:03,130 --> 00:36:06,420 だから、これは明らかではない 解決策は、右? 741 00:36:06,420 --> 00:36:07,810 視界には終わりはありませんので。 742 00:36:07,810 --> 00:36:13,100 私は、ユーザーが与えることを要求したい場合 私を正の整数、私がすることができます 743 00:36:13,100 --> 00:36:14,150 実際にint型を取得します。 744 00:36:14,150 --> 00:36:15,620 私は、そのint型を確認することができます。 745 00:36:15,620 --> 00:36:18,570 しかし、その後、私は再びそれをチェックしたいと 再びそれを確認して、もう一度それを確認してください。 746 00:36:18,570 --> 00:36:21,680 だから、明らかに、何が良いでしょう ここで使用されるように構築する? 747 00:36:21,680 --> 00:36:22,840 すべての権利は​​、ループのようにいくつかの種類。 748 00:36:22,840 --> 00:36:25,430 >> だから私は取り除くつもりです これのほとんどすべての。 749 00:36:25,430 --> 00:36:27,320 そして、私はこれを取得したい 少なくとも一度int型。 750 00:36:27,320 --> 00:36:28,890 だから私は何を言うつもりです - 751 00:36:28,890 --> 00:36:32,110 と私はに戻ってくるだろう 一瞬にしながら - 752 00:36:32,110 --> 00:36:33,050 今、何をすべきか? 753 00:36:33,050 --> 00:36:35,860 私は、int型のnを取得する場合、getInt()を実行するつもりです。 754 00:36:35,860 --> 00:36:36,080 OK。 755 00:36:36,080 --> 00:36:37,250 だからかなり良いです。 756 00:36:37,250 --> 00:36:39,750 そして今、どのくらいの頻度で行う 私はこれをやってみたい? 757 00:36:39,750 --> 00:36:45,770 >> 私はループのprintfの内部を入れてみましょう ので、私は、何度も何度も要求することができ 758 00:36:45,770 --> 00:36:46,740 必要であれば。 759 00:36:46,740 --> 00:36:49,720 そして、私はこれは何をしたいですか 条件が行うにしながら? 760 00:36:49,720 --> 00:36:53,870 私はこれをやっておきたい しばらくケースは何ですか? 761 00:36:53,870 --> 00:36:54,125 うん。 762 00:36:54,125 --> 00:36:55,390 Nがゼロ以下である。 763 00:36:55,390 --> 00:36:58,180 だから、すでに、私たちはかなりしました このコードをクリーンアップ。 764 00:36:58,180 --> 00:37:00,700 我々は非常にシンプルな構造を借りてきた - DO-whil​​eループ。 765 00:37:00,700 --> 00:37:04,690 私はちょうど重要な行を盗んた 私はコピーして開始されたコードの 766 00:37:04,690 --> 00:37:05,960 貼り付け、それは賢明ではありませんでした。 767 00:37:05,960 --> 00:37:09,790 そして今、私は実際に貼り付けるつもりです それはこことばかりに一度それを行う。 768 00:37:09,790 --> 00:37:12,990 >> そして今、私がやりたい何 このプログラムの非常に終わり? 769 00:37:12,990 --> 00:37:16,810 私はちょうど何かが簡単言うよ のおかげで、のような - と 770 00:37:16,810 --> 00:37:18,980 私は、int型のためにI%をやる - 771 00:37:18,980 --> 00:37:23,270 バックスラッシュnは、コンマ、その後 nは、セミコロンのプラグイン。 772 00:37:23,270 --> 00:37:23,910 >> わかりました。 773 00:37:23,910 --> 00:37:27,290 だから今何が起こるか見てみましょう 私はこのプログラムを実行すると。 774 00:37:27,290 --> 00:37:30,600 私が先に行くつもりだと 正作るのですか。 775 00:37:30,600 --> 00:37:30,880 くそ。 776 00:37:30,880 --> 00:37:31,600 いくつかのエラー。 777 00:37:31,600 --> 00:37:32,960 だから私は最初に戻って上にスクロールすることができます。 778 00:37:32,960 --> 00:37:34,020 後方にそれらを介して動作しません。 779 00:37:34,020 --> 00:37:37,000 トップダウンからのそれらを介して動作 LESTそれらカスケードとのみ 780 00:37:37,000 --> 00:37:38,630 一つのことが間違っている可能性が。 781 00:37:38,630 --> 00:37:42,532 の暗黙の宣言 関数場合、getInt()。 782 00:37:42,532 --> 00:37:43,020 うん。 783 00:37:43,020 --> 00:37:44,420 だから、それだけでは十分ではなかった。 784 00:37:44,420 --> 00:37:46,760 私は種類の同じ間違いをしたが、 少し違う今回。 785 00:37:46,760 --> 00:37:51,940 私はstdio.hに含まれていませする必要があるが、 含まれていますまたcs50.h、 786 00:37:51,940 --> 00:37:56,770 その取得int型のいわゆる宣言 アプライアンスを教えるか、教えて 787 00:37:56,770 --> 00:37:58,760 Cどの場合、getInt()がある。 788 00:37:58,760 --> 00:37:59,550 >> だから私は保存し直してみましょう。 789 00:37:59,550 --> 00:38:02,040 私は、他のエラーを無視するつもりです 私は、彼らがしていることを願ってするつもりですので、 790 00:38:02,040 --> 00:38:05,210 何とかエラーに関連 私はすでに修正されました。 791 00:38:05,210 --> 00:38:08,710 だから私は先に行くと、再コンパイルしてみましょう 肯定すると、入力してください。 792 00:38:08,710 --> 00:38:09,020 くそ。 793 00:38:09,020 --> 00:38:09,985 3つのエラー、まだ。 794 00:38:09,985 --> 00:38:12,650 私が最初までスクロールしてみましょう。 795 00:38:12,650 --> 00:38:14,320 未使用変数n。 796 00:38:14,320 --> 00:38:15,850 我々は前にこれを見ていませんでした。 797 00:38:15,850 --> 00:38:17,200 そして、これは、あまりにも、ちょっと不可解です。 798 00:38:17,200 --> 00:38:18,850 これは、コンパイラの出力である。 799 00:38:18,850 --> 00:38:23,610 そして、何その強調表示された行 そこ - positive.c :9:13 - 800 00:38:23,610 --> 00:38:28,960 言っている、それはライン9に言っている positive.c、13文字で、 801 00:38:28,960 --> 00:38:31,510 13列は、このミスを犯した。 802 00:38:31,510 --> 00:38:34,230 >> 特に、それは言っている 私に使用されていない変数n。 803 00:38:34,230 --> 00:38:35,790 それでは見てみましょう - 804 00:38:35,790 --> 00:38:37,150 行9。 805 00:38:37,150 --> 00:38:40,430 私はその意味ではn個を使用しています 私はそれに価値を与えている。 806 00:38:40,430 --> 00:38:44,200 しかし、どのようなコンパイラは好きではないことである 私は一見、それを使用していないこと。 807 00:38:44,200 --> 00:38:45,560 しかし、私はそれを使用しています、ちょっと待って。 808 00:38:45,560 --> 00:38:48,170 11行目では、私はここでそれを使用しています。 809 00:38:48,170 --> 00:38:52,430 しかし、私はさらに下にスクロールしている場合 positive.c :11で - 810 00:38:52,430 --> 00:38:56,230 そのライン11、文字12、で コンパイラは、の使用を私に言っています 811 00:38:56,230 --> 00:38:58,670 未宣言の識別子N。 812 00:38:58,670 --> 00:39:02,760 >> 私が持っているので、宣言されていない手段 としてそれを指定されていない 813 00:39:02,760 --> 00:39:04,970 データ型の変数。 814 00:39:04,970 --> 00:39:05,500 しかし、ちょっと待って。 815 00:39:05,500 --> 00:39:09,150 私は正確にそれをしたライン9インチ 816 00:39:09,150 --> 00:39:11,100 だから、誰かが本当にここに混乱している。 817 00:39:11,100 --> 00:39:14,900 これは、いずれかの私やなぜなら、コンパイラの 行9で、再び、私は宣言しています 818 00:39:14,900 --> 00:39:18,650 int型のnと、私はそれを代入しています 場合、getInt()の値を返す。 819 00:39:18,650 --> 00:39:22,930 それから私はラインでその変数nを使用しています 11と、その値より少ないかどうかをチェックする 820 00:39:22,930 --> 00:39:24,050 よりまたはゼロに等しい。 821 00:39:24,050 --> 00:39:27,430 しかし、これは明らかである 悪いと壊れた理由は? 822 00:39:27,430 --> 00:39:30,630 823 00:39:30,630 --> 00:39:32,490 再びそれを言う? 824 00:39:32,490 --> 00:39:35,690 >> ああ、私は前にNを宣言する必要が ループに入る。 825 00:39:35,690 --> 00:39:36,370 しかし、なぜですか? 826 00:39:36,370 --> 00:39:39,830 私が意味する、私達はちょうど少し前のことを提案した それは、変数を宣言する大丈夫です 827 00:39:39,830 --> 00:39:43,600 すべて1行で、その後 それらのいくつかの値を割り当てます。 828 00:39:43,600 --> 00:39:46,790 グローバル変数 - のが戻って来るように 一瞬でそのアイデアに。 829 00:39:46,790 --> 00:39:48,690 なぜあなたは私が入れたいん ループの外にそれ? 830 00:39:48,690 --> 00:40:03,170 831 00:40:03,170 --> 00:40:03,830 それがある。 832 00:40:03,830 --> 00:40:06,780 まさに。 833 00:40:06,780 --> 00:40:09,610 >> だから、やや直感に反する、とはいえ、 私がまとめてみましょう。 834 00:40:09,610 --> 00:40:13,510 あなたは、内部Nを宣言する場合 そこdoブロックの - 835 00:40:13,510 --> 00:40:16,320 特に内部の それらの中括弧 - 836 00:40:16,320 --> 00:40:19,210 その変数nは何がある スコープと呼ばれる - 837 00:40:19,210 --> 00:40:23,210 当社のスコアリングシステムとは無関係 もちろん - でものスコープを持っている 838 00:40:23,210 --> 00:40:25,190 それらの中括弧に限る。 839 00:40:25,190 --> 00:40:28,460 言い換えれば、通常は、宣言した場合 一連の内部変数 840 00:40:28,460 --> 00:40:33,370 中括弧、その変数にのみ存在 それらの中括弧の内側。 841 00:40:33,370 --> 00:40:37,320 だから一人でそのロジックによって、たとえ 私はライン9におけるn、それを宣言した 842 00:40:37,320 --> 00:40:41,910 本質的に、スコープから消える 、いわば、メモリから消える 843 00:40:41,910 --> 00:40:43,370 時間によって私は、11行目を打った。 844 00:40:43,370 --> 00:40:47,370 11行目は、残念ながら、であるため それらの中括弧の外。 845 00:40:47,370 --> 00:40:51,540 >> だから私は、残念なことで、これを修正することはできません 私は前に何をしたかに戻って。 846 00:40:51,540 --> 00:40:53,370 あなたが最初にこれを行うことがあります。 847 00:40:53,370 --> 00:40:56,370 しかし、あなたは今何ではありません 周期的にやって? 848 00:40:56,370 --> 00:40:58,260 あなたは明らかに取得していない 周期的にint型。 849 00:40:58,260 --> 00:41:01,320 だから場合、getInt()を残して、私たちができる 内部の場合、getInt()を残すべき 850 00:41:01,320 --> 00:41:04,420 それは我々がしたいものだループため 何度も何度もするためのユーザをせがむ。 851 00:41:04,420 --> 00:41:08,660 しかし、それは行くために十分でない ラインアップには、6と言う。 852 00:41:08,660 --> 00:41:10,150 int型のnを、セミコロン。 853 00:41:10,150 --> 00:41:12,990 まだそれに価値を与えてはいけない理由 あなただけまだする必要はありません。 854 00:41:12,990 --> 00:41:16,220 >> しかし、今、ここでダウン、通知 - この 非常に簡単な間違いである。 855 00:41:16,220 --> 00:41:19,440 私は私の以前のをシャドウにしたくない n個の宣言。 856 00:41:19,440 --> 00:41:22,830 私は、nを使用すること 実際に存在する。 857 00:41:22,830 --> 00:41:25,780 そして今、10行目で、 私は値をn個割り当てる。 858 00:41:25,780 --> 00:41:28,580 しかし、ライン6で、私は、nを宣言します。 859 00:41:28,580 --> 00:41:32,940 そして、私は缶または私はできません 今、12行目でそれを使うのか? 860 00:41:32,940 --> 00:41:37,120 私は可能性があるため、それらの間の巻き 括弧nは今宣言されている? 861 00:41:37,120 --> 00:41:38,770 ここまで5行目に1つ。 862 00:41:38,770 --> 00:41:40,330 ここに14行に1つに。 863 00:41:40,330 --> 00:41:49,770 私は今、ズームアウトであれば、行って、このファイルを保存 背面にと、肯定的なメイク、それを実行 864 00:41:49,770 --> 00:41:50,820 この時間をコンパイル。 865 00:41:50,820 --> 00:41:51,940 だから、すでに進行だ。 866 00:41:51,940 --> 00:41:53,640 スラッシュ。 。/ポジティブ、入力します。 867 00:41:53,640 --> 00:41:56,060 >> 私はあなたが私を与えることを要求 正の整数。 868 00:41:56,060 --> 00:41:57,750 1負。 869 00:41:57,750 --> 00:41:59,020 2負。 870 00:41:59,020 --> 00:42:00,680 3負。 871 00:42:00,680 --> 00:42:01,760 ゼロ。 872 00:42:01,760 --> 00:42:03,000 One。 873 00:42:03,000 --> 00:42:05,130 そして、もう一つのおかげです 今印刷しているか。 874 00:42:05,130 --> 00:42:07,400 >> 私は、何か他のものを試してみましょう 好奇心の外に。 875 00:42:07,400 --> 00:42:09,600 私は入力整数に言われています。 876 00:42:09,600 --> 00:42:12,870 しかし、私が代わりに子羊を入力する場合はどうでしょうか。 877 00:42:12,870 --> 00:42:14,460 だから、今、別のプロンプトが表示されます - 878 00:42:14,460 --> 00:42:15,350 再試行してください。 879 00:42:15,350 --> 00:42:17,670 しかし、どこにも私のコードで 私は、再試行を書きました。 880 00:42:17,670 --> 00:42:22,320 だからここで、おそらく、これは再試行され から来るプロンプト、あなたが言うでしょうか? 881 00:42:22,320 --> 00:42:23,540 うん、場合、getInt()自体から。 882 00:42:23,540 --> 00:42:26,650 だからCS50のスタッフが行うものの一つ あなたのために、少なくともこれらの最初の数で 883 00:42:26,650 --> 00:42:30,400 数週間、我々はいくつかの量を書かれているされて 確実にするためにエラーチェックのことなら 884 00:42:30,400 --> 00:42:34,260 あなたは場合、getInt()を呼び出すには、少なくとも意志 ユーザーからint型を取り戻す。 885 00:42:34,260 --> 00:42:35,460 あなたは、文字列を取得することはできません。 886 00:42:35,460 --> 00:42:36,440 あなたは、charを得ることはありません。 887 00:42:36,440 --> 00:42:39,660 あなたが何かを得ることはありません 他の完全に。 888 00:42:39,660 --> 00:42:40,510 あなたは、int型を取得します。 889 00:42:40,510 --> 00:42:41,890 >> さて、それは肯定的ではないかもしれません。 890 00:42:41,890 --> 00:42:42,770 それは負ではないかもしれません。 891 00:42:42,770 --> 00:42:44,550 私たちは、その周囲に何の保証も行いません。 892 00:42:44,550 --> 00:42:48,960 しかし、我々は、再試行するようにユーザにせがむます 彼または彼女は、実際にされるまでリトライ、リトライ 893 00:42:48,960 --> 00:42:49,810 協力しています。 894 00:42:49,810 --> 00:42:53,085 同様に、私は1.23を行う場合、 つまり、int型ではありません。 895 00:42:53,085 --> 00:42:58,400 しかし、私は50と言う、を入力しない場合、その 私が欲しかった値を与える。 896 00:42:58,400 --> 00:42:59,050 >> わかりました。 897 00:42:59,050 --> 00:43:01,380 そんなに悪くない。 898 00:43:01,380 --> 00:43:04,780 我々は単に何をやったかの質問? 899 00:43:04,780 --> 00:43:07,930 キー持ち帰りは、明確にすること、しないこと 我々は見てきたそんなにループ、 900 00:43:07,930 --> 00:43:10,880 私たちは本当にいないにもかかわらず、前 それを使用しましたが、スコープの問題、どこ 901 00:43:10,880 --> 00:43:17,045 変数のみのみ使用したりすることができ いくつかの指定された範囲内である。 902 00:43:17,045 --> 00:43:19,830 >> すべての権利、私は提案に対処させて あなたはのことを、以前に作られた 903 00:43:19,830 --> 00:43:20,860 グローバル変数。 904 00:43:20,860 --> 00:43:24,880 余談としては、別のことが判明 この問題に対する解決策が、 905 00:43:24,880 --> 00:43:28,880 一般的に間違った溶液または 不完全に設計されたソリューションは、することです 906 00:43:28,880 --> 00:43:31,670 何として変数を宣言 グローバル変数と呼ばれる。 907 00:43:31,670 --> 00:43:34,610 さて、私の定義に違反したようなものだ スコープがあるので 908 00:43:34,610 --> 00:43:37,680 非常に上部にない中括弧ません 、ファイルの一番下。 909 00:43:37,680 --> 00:43:40,190 しかし、それの含意 それが、今では4行目にある 910 00:43:40,190 --> 00:43:41,710 nはグローバル変数です。 911 00:43:41,710 --> 00:43:44,460 名前が示すようにと、それはだ どこでもアクセス可能なだけ。 912 00:43:44,460 --> 00:43:45,790 >> スクラッチは、実際にこれらを持っています。 913 00:43:45,790 --> 00:43:48,650 変数を使用した場合は、思い出すかもしれません あなたはそれのためだかどうかを選択しなければならなかった 914 00:43:48,650 --> 00:43:50,780 このスプライトまたはすべてのスプライトのために。 915 00:43:50,780 --> 00:43:54,270 まあ、すべてのスプライトは、単に明確になり グローバルな言い方。 916 00:43:54,270 --> 00:43:55,520 うん? 917 00:43:55,520 --> 00:44:09,690 918 00:44:09,690 --> 00:44:10,990 ああ、本当に良い質問。 919 00:44:10,990 --> 00:44:14,310 >> だから、非常に最初のバージョンでのことを思い出す 私のコードの、ときに私が誤っ 920 00:44:14,310 --> 00:44:17,700 行9で宣言され、定義されたN - 921 00:44:17,700 --> 00:44:19,980 私は、それを変数として宣言 そして私はそれを使用して値を与えた 922 00:44:19,980 --> 00:44:21,160 代入演算子 - 923 00:44:21,160 --> 00:44:22,520 これは私の2つのエラーを与えた。 924 00:44:22,520 --> 00:44:26,560 One、nを使用しなかったという事実は、 二、その中で11行 925 00:44:26,560 --> 00:44:27,770 それだけで宣言されていません。 926 00:44:27,770 --> 00:44:31,120 私はしませんでしたので、最初のもの 当時のアドレス。 927 00:44:31,120 --> 00:44:35,130 それは厳密に宣言するエラーではありません それを使用する変数はありません。 928 00:44:35,130 --> 00:44:38,540 我々がやったことのしかし1 CS50アプライアンス、意図的に、 929 00:44:38,540 --> 00:44:43,340 教育学、我々は、最大クランクたさ 作成するコンパイラの期待 930 00:44:43,340 --> 00:44:46,970 あなただけのことをしないやっていることを確認して 正しく本当に正しく。 931 00:44:46,970 --> 00:44:51,520 >> なぜならあなたは、変数を宣言している場合 nおよびそれを使用していない、またはそれを使用したこと等 932 00:44:51,520 --> 00:44:53,700 正しく、次に何 そこにやっている? 933 00:44:53,700 --> 00:44:55,650 それは本当に目的を達成しません。 934 00:44:55,650 --> 00:44:58,980 あれば、それは、時間をかけて非常に簡単ですあなた に自分のコンピュータを構成しないでください 935 00:44:58,980 --> 00:45:01,960 ただ持つコードを持っているために、この方法では、 ここで少しの残党、そこの残党。 936 00:45:01,960 --> 00:45:04,390 そして数ヶ月後には、振り返ると あなたが似ている、なぜこのラインがある 937 00:45:04,390 --> 00:45:05,060 そこにコード? 938 00:45:05,060 --> 00:45:07,940 と正当な理由がない場合は、それ あなたやあなたの同僚の利益はありません 939 00:45:07,940 --> 00:45:10,650 道をする必要があるとし 次にその上につまずく。 940 00:45:10,650 --> 00:45:12,540 >> 余談ですが、どこにあるの それから来る? 941 00:45:12,540 --> 00:45:16,410 まあ、我々はコンパイルするたびにことを思い出してください プログラムは、このようなもののすべてがある 942 00:45:16,410 --> 00:45:17,380 印刷される。 943 00:45:17,380 --> 00:45:18,350 だから私たちはこれに戻ってくる。 944 00:45:18,350 --> 00:45:22,230 しかし、再び、というユーティリティであることを確認 によってコンパイルのプロセスを自動化 945 00:45:22,230 --> 00:45:24,830 実際のコンパイラを実行 打ち鳴らすと呼ばれる。 946 00:45:24,830 --> 00:45:27,650 この事は、我々は最終的に表示されます、い 特殊とデバッグに行う 947 00:45:27,650 --> 00:45:29,060 プログラムは、デバッガと呼ばれる。 948 00:45:29,060 --> 00:45:32,150 これは、最適化に関係しています コー​​ド - 将来的にはその上でより多くの。 949 00:45:32,150 --> 00:45:33,620 STD = C99 - 950 00:45:33,620 --> 00:45:37,870 これはちょうど1999年のバージョンを使用することを意味 C. Cはよりも長いの周りされている 951 00:45:37,870 --> 00:45:40,830 それが、彼らはいくつかの素晴らしいを作った 変更を加えた数年前に10。 952 00:45:40,830 --> 00:45:42,690 >> そしてここでは、関連するものだ。 953 00:45:42,690 --> 00:45:45,880 我々は何をすると言っていること 以前に警告だったでしょう 954 00:45:45,880 --> 00:45:48,560 学生を防ぐエラー コンパイルから。 955 00:45:48,560 --> 00:45:51,400 と壁手段のためにそれを行う 物事の全体の束ではなく、 956 00:45:51,400 --> 00:45:53,060 単に変数に関連していた。 957 00:45:53,060 --> 00:45:54,700 そして私にスクロールさせて この行の終わり。 958 00:45:54,700 --> 00:45:56,430 そして、これは、あまりにも、我々は、最終的によ に戻ってくる。 959 00:45:56,430 --> 00:45:59,040 これは明らかにの名前です 私がコンパイルしているファイル。 960 00:45:59,040 --> 00:46:02,160 これは、ファイル名をリコール 私は名前として出力しています 961 00:46:02,160 --> 00:46:04,070 私の実行可能プログラムの。 962 00:46:04,070 --> 00:46:08,970 この-lcs50は単にCS50を使用することを意味します ライブラリ、および任意の0と1という 963 00:46:08,970 --> 00:46:12,390 スタッフが書いた以前のコンパイル 今年、統合 964 00:46:12,390 --> 00:46:13,490 私のプログラムにそれら。 965 00:46:13,490 --> 00:46:16,130 >> と誰もが-LMとは何か知っている? 966 00:46:16,130 --> 00:46:18,150 それは数学ライブラリ、だ ちょうどそこにあなたがいる場合でも 967 00:46:18,150 --> 00:46:19,320 任意の数学をやっていない。 968 00:46:19,320 --> 00:46:22,620 それは、単に自動的に提供い 私たちに作ることによって。 969 00:46:22,620 --> 00:46:26,540 >> まあ、私はもう一つの例を実行してみましょう ここに新しいファイルを開くことによって。 970 00:46:26,540 --> 00:46:30,560 と私はstring.cとしてこれを保存してみましょう。 971 00:46:30,560 --> 00:46:37,980 それは、我々はデータの話としてことが判明 種類は本日、さらにそこ 972 00:46:37,980 --> 00:46:40,630 ボンネットの下で起こって 我々はこれまで見てきたよりも。 973 00:46:40,630 --> 00:46:42,290 だから私はすぐに迅速なプログラムを実行してみましょう。 974 00:46:42,290 --> 00:46:44,510 stdio.hに含まれています。 975 00:46:44,510 --> 00:46:45,730 そして、私はそれを保存します。 976 00:46:45,730 --> 00:46:48,110 そして、あなたは知っている、私が作ることないようにしましょう 何度も何度も同じ間違い。 977 00:46:48,110 --> 00:46:50,540 cs50.h.を含め 978 00:46:50,540 --> 00:46:54,870 そして今、私は先に行かせて と(ボイド)int型メイン行う。 979 00:46:54,870 --> 00:46:58,790 >> そして今、私は単にプログラムをやってみたい これを行うこと - 文字列を宣言する 980 00:46:58,790 --> 00:47:03,610 Sと呼ばれる文字列を取得 ユーザーから。 981 00:47:03,610 --> 00:47:05,820 そして、私は少しをやらせる ここに指示 - 982 00:47:05,820 --> 00:47:09,960 そう - 私の文字列を記入してください ユーザーが何をすべきか知っています。 983 00:47:09,960 --> 00:47:13,190 そして、ダウンここでこの下に、 私は次のことをやってみたい - 984 00:47:13,190 --> 00:47:16,060 int型のために私はゼロを取得します。 985 00:47:16,060 --> 00:47:18,580 繰り返しになりますが、コンピュータ科学者は、一般的 ゼロからカウントを開始するが、我々は可能性 986 00:47:18,580 --> 00:47:20,340 私たちが本当に望んでいる場合、そのいずれかを行う。 987 00:47:20,340 --> 00:47:27,240 今私はするつもりです私は小さい Sの文字列の長さよりも。 988 00:47:27,240 --> 00:47:28,430 だからstrlenは - 989 00:47:28,430 --> 00:47:29,510 S-T-R-L-E-N - 990 00:47:29,510 --> 00:47:31,650 それは簡単ですので、再び、それは簡潔だ それはあっても、入力する 991 00:47:31,650 --> 00:47:32,590 少し不可解。 992 00:47:32,590 --> 00:47:35,290 >> それは我々が使用されていませんでした機能です 前が、文字通りないこと - 993 00:47:35,290 --> 00:47:37,810 私に表す数値を返す 文字列の長さ 994 00:47:37,810 --> 00:47:38,690 ユーザーが入力した。 995 00:47:38,690 --> 00:47:41,740 それらがhelloで入力した場合は、戻ってくる 5 5があるので、 996 00:47:41,740 --> 00:47:42,890 こんにちはの文字。 997 00:47:42,890 --> 00:47:45,390 次に、それぞれの繰り返しで このループは、iのプラスプラス。 998 00:47:45,390 --> 00:47:49,170 だからもう一度、標準では、たとえ建設 あなたはかなりあまりに快適じゃないか 999 00:47:49,170 --> 00:47:50,420 まだそれに慣れ。 1000 00:47:50,420 --> 00:47:53,220 >> しかし、今、このループの各反復で、 私がやろうとしているものに気づく。 1001 00:47:53,220 --> 00:47:56,690 私が先に行くと印刷したい 単一の文字出 - 1002 00:47:56,690 --> 00:47:59,940 新しい行にそう%のCバックスラッシュnを。 1003 00:47:59,940 --> 00:48:00,990 そして、あなたは私が何をしたいのか知っている? 1004 00:48:00,990 --> 00:48:05,090 単語は、ユーザーがタイプすることであるものは何でも で、こんにちはように、私は印刷したい 1005 00:48:05,090 --> 00:48:09,530 H-E-L-L-O、1行に1つの文字。 1006 00:48:09,530 --> 00:48:13,080 言い換えれば、私はで取得したい 文字列内の個々の文字、 1007 00:48:13,080 --> 00:48:16,770 それによって、最大文字列はただ持って今まで 文字のシーケンスであっ。 1008 00:48:16,770 --> 00:48:21,690 >> 私はS、ブラケットを行うことができますアウトと、それは、変わり 私は、閉じ括弧は、閉じ 1009 00:48:21,690 --> 00:48:23,580 括弧、セミコロン。 1010 00:48:23,580 --> 00:48:25,640 そして、私はもう一つのことをしなければならない。 1011 00:48:25,640 --> 00:48:30,570 それはstring.hで呼ばれるファイルにだ strlen関数が宣言されている。 1012 00:48:30,570 --> 00:48:33,190 だから私は、その関数を使用したい場合は、 私は、コンパイラに指示する必要があります 1013 00:48:33,190 --> 00:48:34,450 それを使用することを期待しています。 1014 00:48:34,450 --> 00:48:37,040 今私は先に行くとしてみましょう プログラムは、文字列と呼ばれる。 1015 00:48:37,040 --> 00:48:39,150 ドット、スラッシュ、文字列を指定します。 1016 00:48:39,150 --> 00:48:40,130 >> 私の文字列を教えてください。 1017 00:48:40,130 --> 00:48:40,900 私が先に行くし、それを入力します。 1018 00:48:40,900 --> 00:48:43,040 こんにちは、すべて大文字で入力します。 1019 00:48:43,040 --> 00:48:47,390 そして今、私はこれを印刷してきた気付く 他の後に1文字。 1020 00:48:47,390 --> 00:48:51,450 だからここに新しいディテールは、その文字列である 一日の終わりに、することができ 1021 00:48:51,450 --> 00:48:54,810 その個々の方法によってアクセス 広場を導入することにより、文字 1022 00:48:54,810 --> 00:48:55,840 ブラケット表記。 1023 00:48:55,840 --> 00:48:59,090 そして、それはだ文字列の下にあるため フードは確かのシーケンスです 1024 00:48:59,090 --> 00:48:59,810 文字。 1025 00:48:59,810 --> 00:49:02,010 しかし、それらについてのきちんとしたのは、ある コンピュータのRAMに - 1026 00:49:02,010 --> 00:49:05,300 それが何であれMac、Windowsパソコン、 - 彼らはしている 文字通り背中合わせにバックアップする - 1027 00:49:05,300 --> 00:49:06,225 H-E-L-L-O - 1028 00:49:06,225 --> 00:49:09,920 個々で、隣接 メモリ内のバイト。 1029 00:49:09,920 --> 00:49:13,210 >> ですから、八などで取得したい場合 このループであろうバイト、 1030 00:49:13,210 --> 00:49:16,900 ブラケットゼロ、ブラケット1、ブラケット2、 ブラケット3、ブラケット4 - 1031 00:49:16,900 --> 00:49:18,890 それは5までインデックスさゼロだ - 1032 00:49:18,890 --> 00:49:23,330 それは、H-E-L-L-O出力します 独自のライン上。 1033 00:49:23,330 --> 00:49:26,320 >> さて、ティーザーとして、私はあなたにお見せしましょう あなたが最終的になるだろう物事の種類 1034 00:49:26,320 --> 00:49:31,950 少なくとも、理解することができ いくつかの近くで探して。 1035 00:49:31,950 --> 00:49:35,610 一つは、我々は、今日の内に何が含まれている あなたが好きな場合の例は、実際には 1036 00:49:35,610 --> 00:49:38,300 非常に最初のjailbreaksの一つ iPhoneのために。 1037 00:49:38,300 --> 00:49:40,800 脱獄は、携帯電話をクラッキング意味 だから、実際にそれを使用することができ 1038 00:49:40,800 --> 00:49:43,380 異なるキャリアまたはインストール 独自のソフトウェア。 1039 00:49:43,380 --> 00:49:45,660 そして、あなたは、これが完全に見えることがわかります 不可解な、最も可能性が高い。 1040 00:49:45,660 --> 00:49:46,520 しかし、これを見てください。 1041 00:49:46,520 --> 00:49:50,420 iPhoneが明らかに割れた forループは、もし条件、他 1042 00:49:50,420 --> 00:49:52,580 状態、機能の束 我々は見ていませんでした。 1043 00:49:52,580 --> 00:49:54,230 >> そして再び、あなたはではないでしょう おそらく一見 1044 00:49:54,230 --> 00:49:55,620 これが動作している方法を理解しています。 1045 00:49:55,620 --> 00:49:58,940 しかし、我々は一種の取ることすべて 私たちの現代の生活の中で当然の 1046 00:49:58,940 --> 00:50:02,040 実際に、いくつかに対しても低下する傾向にある これらのファンダメンタルズの私たちはしてきた 1047 00:50:02,040 --> 00:50:02,820 を見て。 1048 00:50:02,820 --> 00:50:06,680 私が先に行くと1を開いてみましょう 他のプログラム、holloway.c。 1049 00:50:06,680 --> 00:50:08,970 だから、これは、あまりにも、何かはあなたです 本当に知っているべきではありません。 1050 00:50:08,970 --> 00:50:12,440 でも、スタッフのどれか私ができた おそらく見ることによって、これを見つけ出す 1051 00:50:12,440 --> 00:50:15,450 それは、これは誰かのコードだったので、 それは何に提出されました 1052 00:50:15,450 --> 00:50:19,630 歴史的に難読化されたCとして知られている あなたがプログラムを書くコンテスト、 1053 00:50:19,630 --> 00:50:24,670 コンパイルして実行されますが、そう気である 不可解な人間の何が何を理解することはできません 1054 00:50:24,670 --> 00:50:27,530 までそれを行うために起こっている 彼らは実際にそれを実行してください。 1055 00:50:27,530 --> 00:50:29,940 >> だから、確かに、この見れば コー​​ドは、私がスイッチを参照してください。 1056 00:50:29,940 --> 00:50:30,870 私はメインを参照してください。 1057 00:50:30,870 --> 00:50:33,800 私は、これらの角括弧が示唆見 配列のいくつかの種類。 1058 00:50:33,800 --> 00:50:35,970 誰もが推測したくないのか 実際にこのプログラム 1059 00:50:35,970 --> 00:50:37,220 私はホロウェイを実行した場合でしょうか? 1060 00:50:37,220 --> 00:50:39,940 1061 00:50:39,940 --> 00:50:40,750 はい。 1062 00:50:40,750 --> 00:50:43,050 OK。 1063 00:50:43,050 --> 00:50:44,690 よくやった。 1064 00:50:44,690 --> 00:50:48,090 だから、唯一のスタッフと私は理解することはできません これらの事は何かを。 1065 00:50:48,090 --> 00:50:51,670 >> そして今、最後に、私が先に行かせて そしてもう一つのプログラムを開く。 1066 00:50:51,670 --> 00:50:53,440 この1 - 1067 00:50:53,440 --> 00:50:55,550 再び、我々は、ソースコードをあげる オンラインで利用できる - これ一つだけだ 1068 00:50:55,550 --> 00:50:57,480 を見て、かなりの種類。 1069 00:50:57,480 --> 00:50:59,750 彼らがしたすべては、ヒットした スペースバーかなり。 1070 00:50:59,750 --> 00:51:01,320 しかし、これは本当のコードです。 1071 00:51:01,320 --> 00:51:04,790 あなたはかなり、場合だと思うのであれば、私たち 実際には、プロンプトでこれを実行する 1072 00:51:04,790 --> 00:51:08,970 最終的にあなたはどのように我々がわかります このようなことを行う可能性があります。 1073 00:51:08,970 --> 00:51:14,008 >> だから私たちはそのノートであなたを残しておきます そして水曜日にあなたを参照してください。 1074 00:51:14,008 --> 00:51:18,440 >> [音楽再生] 1075 00:51:18,440 --> 00:51:23,380 >> SPEAKER 2:次のCS50で、 のTFは反乱を上演。 1076 00:51:23,380 --> 00:51:24,112 >> SPEAKER 3:そこに彼がいます。 1077 00:51:24,112 --> 00:51:25,362 やっちまえ! 1078 00:51:25,362 --> 00:51:29,912 1079 00:51:29,912 --> 00:51:32,074 >> [音楽再生]