[音楽再生] SPEAKER 1:これはCS50であり、 これは、週2の開始です。 それでは、右の何かに飛び込むてみましょう それはいわば、バギーです。 だから、ここの上にきたCS50 IDEはと私 これはいまいましいscreen--事前にプルアップ それ。 スポイラー警告。 大丈夫。 私はここで、この画面を引っ張ってきました、 これは非常に簡単なプログラムを持っています。 我々は下にスクロールした場合、ほとんどの このだけのコメントで、 しかし、ここで線13の貫通 17我々はプログラムを持っています。 これは場合を意味し、構文的に有効です 私は、それはコンパイルして実行し、それをコンパイル それはバギーです。 このプログラムは、コメント欄で主張します それは10星を印刷する必要があることをトップアップし、 しかし、それはしていません。 そして、あなたの経験に基づいて、 またはすぐにCと経験することが、 あなたは論理的に識別することができます これは、実際には、バグがあるなぜですか? うん? 観客:それはゼロから10に行きます。 それは11回の繰り返しです。 SPEAKER 1:うん。 だから、それはゼロから起こっています 10に至るまでと同じ、 もちろんこれは、11回の反復です。 だから、それはに起こっています 印刷、確かに、11星。 そのため、コンピュータサイエンスの大会 ほとんどのプログラミング言語で ちょうどに、確かに、あります ゼロからカウントを開始し、 しかしを通じてまでカウントではなく、 あなたが実際に気に値。 さて、これは一つのことです 少しは慣れが必要 そのまま設計してもスクラッチ、 非プログラマや非コンピュータ用 科学者や子供のための 主として、有するように設計されています あなたは1で、一般的にカウントを開始します。 そして、それは大丈夫です。 あなたは絶対にカウントを開始することができます それはより快適な場合は、1つに。 そして10を通してカウントアップが、 あなたは今週、特に実現します そしてそれを超えちょうどそう プログラミングに多くのもの 0が最初であると仮定 あなたがカウントすると数字、 あなたはそれが簡単に見つけるつもりだこと ちょうど出発のこの習慣を身に取得します ゼロ値までカウントから あなたがから、今気に 行く得ます。 だから、それはそれを修正しました。 当社は、以下の変更しました よりちょうど以下に等しいです。 のは、見てみましょう ここで第二の例。 したがって、このプログラムは、あまりにもその中で主張します それは印刷することをトップアップのコメント 10星ですが、それはできません。 ここにバグとは何ですか? だから、what--と申し訳ありませんが、のは明らかであるとします。 10星。 1行に1つですが、それはできません。 だから、実際には、私が先に行くと、コンパイルしましょう それは少しだから、この1 その記述に基づいてオフにします。 私は私たちのソースディレクトリに移動してみましょう。 バギー1ドットスラッシュ、バギーものを作ります。 [OK]を、私は11星を参照してくださいします まだ問題があります、 しかし、彼らは1行でもすべてです。 ここでの問題は何ですか? うん。 聴衆:[聞こえません]。 SPEAKER 1:うん。 これは、あなたがかもしれない繊細です の簡単な言及をする私を思い出してください。 でもすべてが見えるけれども 、かなり、それはきれいに字下げしています それは一種のスクラッチのようになります このライン16及び17は、 確かに、forループをその下にインデント。 それは軽微です。 コンピュータにはありません 知っているか、または空白を参照してください。 ホワイトスペースは、ちょうどのためであります 私たちは、文体、人間。 あなたが持っているときにコンピュータが知っています 確かに、中括弧、でしょう、 この問題を解決します。 だから、私たちが実際に行った場合と、 明示的にこれらの中括弧に入れ それがすることで、この問題を解決するだろう コンパイラに明らかにし 私は実際に実行したいこと 再び2行のコード、 そして再び、そして再び。 しかし、基本的な説明は何ですか? 右? 我々は、厳密必要はありません 中括弧のすべての時間、 それはおそらく最高だにもかかわらず、 とにかくその習慣を身に取得するための練習 それは2を追加していても あなたのコードに文字。どうして? 聴衆:[聞こえませんか]? SPEAKER 1:うんようです 全く別のソリューションを提供します。 右? 一見、あなたはそうではない場合は特に 本当に何が起こっているのかを理解します。 まあ、確かに我々は可能性 ただ、一度に2つのことを行います ちょうど完全に問題を回避。 そしてそれは、今も元気だが、 今日の目的のために、どのような バグの説明はありますか? なぜ1行にすべてのそれらの星がありましたか? うん? 観客:それはもしようです あなたは、1行のコードを持っています あなたはそれらなしでそれを行うことができます。 SPEAKER 1:その通り。 これはちょうど人間の慣習です。 人々はそれがだと実感します 少し迷惑または退屈 すべての中括弧を入れて持っています あなたがしたいすべての場合は時間の 1行のコードを実行しています。 だから、人間が決めたいくつかの それは大丈夫だと前の時間。 あなたは、ループのすべてを配置する場合 このようなだけで1行に、 それは、単一の罰金です 最後にセミコロン。 しかし、あなたは一つだけを行うことができます 中括弧のない行。 だから、ときCS50スタイルガイド 、にあなたを指すようになりますように あなたは、一般的にそれを参照してくださいよ それは良い習慣です あなたがしているまで、この中に取得します 非常に快適はぐれ 規則のこれらの種類から そしてあなた自身のことをやって。 だから、限り、あなたは自己矛盾しているよう。 そして、我々はについての詳細を話します 少し後で、今日のスタイル。 だから、私は一つの他のプログラムを開いてみましょう。 もちろん、我々はすべき 同様にその10を固定します。 私が先に行くと実際に書いてみましょう 私は電話するよ素早くプログラム、 のは言わせて、ループは、C。だから、ループはCをドットドット ループドットCに私は、持っているつもりです 標準I / Oが含ま H int型メイン空洞に点在しています。 そして今ちょうど、実際に、ループを実行してみましょう。 だから、4 int型私はゼロを取得します。 I 50、たとえば、以下です。 私プラス、プラス。 そして、ここにしてみましょう 先に行くとF.を印刷します そして、私は私を印刷したいです 改行、セミコロン。 そして、これはすべて印刷する必要があります ゼロから番号50まで? いくつかの頭がうなずきます。 いくつかのNOS。 すでにバグは何ですか? 私が作った簡単な間違いは何ですか? うん。 聴衆:[聞こえません]。 SPEAKER 1:うん。 だから、見えるにもかかわらず、 これは私が意図するものであるように、 私もあることを思い出して ただ、ASCII文字。 だから、私はと言えば、印刷「I」 それは文字通り起こっています 私ならば、そうI.を印刷します プラグインプレースホルダたいです 私は実際にこれを行う必要がある値 して、プラグイン 動的にIの値。 そうでなければ私はするつもりです 画面上の50のI年代を取得します。 だから、私は先に行くとしましょう このループを作る、それを実行し、 そして、確かに、私達はすべて持っています 〜49までの方法。 私は時間に戻ってスクロールした場合、私が見ます 先頭に数字のゼロ。 まあ、私はこの種のものを台無しにしたら? 私はこれを行う場合はどうなりますか? ただ、私は考えていないだから。 このプログラムは何ですか。 一度、コンパイルおよび再実行 論理的に何をするつもり? 聴衆:何もありません。 SPEAKER 1:何もありません。 何故ですか? 聴衆:私はゼロのために設計されています。 そこで、条件が偽です。 SPEAKER 1:うん、まさに。 すべてのコードが構文的に正しいです。 これは、これをコンパイルします コー​​ドが実行されますが、そうではありません 便利な何かをするだろう 私はゼロに初期化するため。 私たちは、私は50以上である、チェック? 明らかに、いや、そうではありません。 だから、ループはまったく実行されません。 私たちは何かをする場合 もう少し無謀? 我々はint型のように行うのであれば、私はゼロに何を取得します。 そして今、私はしばらく使ってみましょう 別の条件であったループ、。 そして、私はより大きくなる一方で、私は、言っている間 またはゼロに等しく、その後、ここで私 先に行くと、ファイルを保存し、ループを作ります。 そして、私はそれを実行しようと思います。 私はこれを見に行くしています whileループとの時間? うん。 聴衆:無限ループ? SPEAKER 1:無限ループ? はい、その理由は? 観客:それは常にゼロだからです。 SPEAKER 1:うん。 だから、私はゼロに初期化されます。 もちろん、私はいつも大きいです よりまたは結果として0に等しいです。 だから、私はちょうどに行きますよ 無限にこれを参照してください。 そして今、これは一度来ています または二回コースの頭に。 ときに何が起こります 無限ループを持っていますか? 聴衆:コントロールC. SPEAKER 1:うん。 だから、対照Cは、最終的に応答します。 残念ながら、我々は、プリントアウトしてきました 既にゼロの何百万 そのため、コンピュータが持っています 種類の私の前です。 だから、それは無視するようになるだろう ちょっと私。 しかし、あなただけのコントロールのC数をヒットした場合 お使いのMacまたはPCのキーボードの倍、 最終的には、確かに、終了する必要があります。 ないなら、私たちはあなたのいくつかを紹介します 長いどこに前に技術 実際に強制的にプログラムを殺すことができます、 多くのWindowsとMac OSのように、 必要であれば。 しかし、それでは、何か他のものを試してみましょう。 それでは、実際にIをインクリメントされてみましょう これはまだ無限になるだろうか? 私は、このを実行してみましょう。 そして今、あなたはこの種のことができます 何が起こっているかを参照してください。 これは、あまりにも、無限ループです。 しかし、これはトリックの質問のビットです。 これは永遠に番号を印刷しようとしていますか? 聴衆:いいえ。 SPEAKER 1:いいえ なぜ? 私はここの上にいくつかのNOSを聞きました。 うんSomeone--。 観客:あなたは十分に持っていません ビットは本当に続けるために。 SPEAKER 1:すべての権利。 だから私は十分に持っていません 続けるべきビット。 だから、何が起こるだろうか? それはちょうど停止する起こっているのですか? 聴衆:いくつかの時点で、 それはthe--停止します SPEAKER 1:それは停止します ループダウンが、なぜ? 何で起こるだろう その境界の最後? うん? 観客:それは周期ます バック負の数に。 SPEAKER 1:負の数、または 私たちは、正の治療された場合、 ゼロ少なくとも。 そうです、絶対に。 我々は最後の時間を見たことを思い出して、あなたの場合 あなたのビット1何回もインクリメント、 そこに、あなたオーバーフローフォア あなたのint型の容量 またはデータ型が何であれ、あなたがしています おそらく、ラップアラウンドするつもりは、 2負の数。 それとも、あなたのことを指定した場合 範囲は、唯一の正の数である必要があり、 これはあなたが行うことができますが、 私たちは、まだそれを見ていませんでした あなたは、少なくともバックゼロで終わるかもしれません。 実際にはい、が。 この場合、負の 数字、場合には ループが終了する予定です 私は実際にはないので、 以上 ゼロそれは負だ場合。 だから、残念ながら、どのように 長い私たちは待たなければならないでしょうか? 今、私たちはまでです 何200万っぽいですか? 当社は、20億のようなものです 我々は待たなければならないとしています 私たちは、実際にこの症状が表示されるまで。 しかし、我々は、少し速くそれを見ることができます 私たちが中断することができた場合を見てみましょうmaybe--。 いい加減にして。 でもメニューは、ゆっくりと登場しています。 大丈夫。 だから、私たちはずっと前に戻ってそれに来ます。 これは、子犬畜生time--良いことです。 これは、いくつかの発表のための良い時間です。 だから、あなたが好きかもしれない場合 YHackに従事し、 イベントされています エールで私たちの友人が主催。 そして、確かに、いくつかのコースの イェール大学のTFは、これに関与しています。 YHackは国際的です ハック - ソンは、によってホストされて保持 エールで、1,500を一緒にすること 気にハッカーやすべてのクリエイティブのような 世界中。 これが重要である場合には、 ここを見てみましょう。 これは、上であまりにも簡単である場合 画面には、現在のスライドを見てみましょう yhack.orgのURLのために。 だから、また、いくつかの簡単な告知。 だから、正式にセクションを開始します 来週の両方ここに、ニューヘブン。 あなたが取得することがあります覚えておいてください 電子メール後にこの週末、最も可​​能性が高いです。 それは長い時間がかかります セクションにCS50のため、 で与えられたすべての人々 クラスと誰もが動き回ります。 そして、すべての教育フェロー スケジュールはまた、まだ固化され、 しかし、電子メールのためにと、必要な場合はお楽しみに 、あなたは再部分をできることがありました。 Study.cs50.net。 だから、あなたは一定の参加者であっても、 セクションで、ほとんどすべてのことを実現します 私たちはセクションで使用するリソースの CS50で公表されています ここで、次のURLから勉強しています。 だから、あなたは今までに見直しを再度したい場合 セクションからの材料、または先読み、 またはあなたはそれいくつかの週作ることができません、 その標本スライドを実現します、 問題点、および定義、 多くは、同様にすべてがあります。 営業時間は、今日再開します 明日、水曜日、 木曜日はもちろんのを確認してください スケジュールのためのウェブサイト。 そしてまた、今起動 今日は、CS50が議論です。 だから、もし、あなたがのための質問を持っている場合 互いにまたはコースのスタッフのために、 一般的に取り組んでいます いくつかの問題セットで、 あなたは必ずしもないことを実現します あなたの次のヒトに有効にする必要があります。 そこには誰もいない場合は、次のことができます 私たちやクラスメートに手を差し伸べます オンラインCS50経由で話し合います。 したがって、この議論であります コー​​スのボード、 このことを実現します おそらく最高です あなたが持っているときに開始する場所 営業時間外の質問 特に。 ランチも今週起動します。 火と氷で [聞こえない]ニューヘブンインチ コー​​スのを見てみましょう RSVPするためにウェブサイト。 まず、最初に来ることに役立ちます。 あなたはこの週に取得しない場合 我々は、これらのほとんどの毎週金曜日にやります 期中。 [OK]を、今グレーディングについて一言。 特に、我々は問題を入力すると 今週アウトである、1セット 問題は2、その後に設定します。 どのように我々は、P・セットを評価行くのです およびその品質を評価しますか? だから、それは我々が使用する4つの軸です CS50、彼らはここで、これらの4です。 数値にキャプチャ範囲、 Pセットのどれだけの基礎 あなたが取り組むました。 これは、大体に対応しています 努力は、それは捕獲の我々の方法です あなたは試して半分Pでした 、Pセットのすべてを設定します。 これは完璧な取得する簡単なものです あなたが行う場合のスコア、確かに、 Pセットのあらゆる側面をしてみてください。 だから、心の中でそれを維持します。 正しさは、まさにそれです。 仕様としてあなたのコードの作業を行います そして、スタッフの試料溶液として、 あなたのコードすることを示唆しています 、実際には、動作するはずです。 あなたがそれを満たしていない場合は、50をチェックしてください まだ、Pで1仕様を設定されています 一般的になります はい/いいえ答えあなたを与えません あなたのコードが正しいかどうかの。 少なくともこれまでのところ、我々が行っているよう テストに基づいて、それを評価します 我々はそのプログラム内で実行すること。 デザインは、はるかに主観的です。 これはあなたのコードがどのようによく書かれています。 そして、これは何かがあること あなたは、時間の経過に良くなるだろう それは、我々がよ何か 詳細質的なフィードバックを提供します。 そして、設計によって、私はかもしれません 限り、あなたの前に意味 いくつかのPに誘惑されるかもしれません loopingly何かを設定し、 多分3つ、または4つ、または持っています 5ネストされたフォアループまたはネストされた一方、 ループ。 それは一般的にすべき あなたはうんざりするために開始 一般的になるであろう 考え悪いデザイン。 そして、あなたはクラスで参照してくださいすることから始めましょう 物事のクラスの良い方法のうち、 その物事の悪い方法 すべての正しいことではなく、可能性があります 必ずしもうまく設計されました。 エッセイを書くように。 あなたは上の単語を置くことができるかもしれません 文法的に正しいページ、 エッセイやけど 彼らがしている論文はちょうどです 完全にインコヒーレントまたは説得力がありません。 そして、そのためには、アナログであるかもしれません 不良または良いデザインの書かれた世界。 そしてスタイルは、あまりにも、かなり主観的なものです。 しかし、少なくとも、私たちは一貫性を期待しています。 これはかなりあなたのコードであるかです。 物事がうまくインデントされていますか? ウェル/という名前の変数がすべてされています あなたの括弧と中括弧の 彼らはあるべきであるように整列? 我々は、CS50のスタイルガイドを持っています 問題セットはであなたをポイントします。 これらのより快適です それから逸脱することを歓迎 あなたが自己矛盾しない限り、。 そして、これは、あまりにも、教訓であります 我々は、セクションに強化します。 だから、このすべては少しだった場合 高速、Pセットとセクションを実現 長い前に、より多くの深さになります。 しかし、一般的に、私たちは持っています CS50のための非常に少数のバケット。 スコアは規模で、一般的です 三から一、または五から一の。 我々はliterally--だと私が言うことはできません 最初の週で、この十分。 三つのが良いです。 だから、たとえ、はい、3アウト 数学的に、通常は5、の、 60%またはDのマイナスのようなものかもしれません。 三は、実際には、良いです。 そして、実際には、我々が期待します クラスのほとんどの学生 周りの言葉をオフに開始します 補数と、スリー、そして四つんばい。 おそらくないので、多くのファイブ。 あまりにも多くのもの。 しかし、一般的で起動します 曲線のそのスイートスポット 、時間が進むにつれて、そのよう 余地が実際にあります、 上の進行のための機会。 だから、60%と3を同一視しないでください。 それははるかに抽象的よりもです。 我々は計算すると式 次のようにグレードが加重されます。 正しさは、最も価値があります。 デザインが少し価値があります。 スタイルは少し価値があります。 そして、この一般 時間の量を捕捉 それは、それぞれ取得に入ります これらの軸のちょうどいい。 スタイルは超簡単で、 超速さが必要となり、 それは簡単な習慣です 約怠惰取得します。 正しさがかかる場合があります あなたの時間のほとんど。 いくつかのバグかもしれないを追いかけ 、その余分な時間以上かかります そのため、スコアリング 最終的にそれをキャプチャします。 だから、今より深刻な単語。 CS50が持っているので、 よりよいのための区別、 または悪化のため、であることの おそらくより良い知り合い 学術の問題に ほとんどの他のコースよりも正直。 そして実際、それは私の知る限りであります 我々は、残念ながら、より多くの学生を送信 懲戒の目的のために 結果として、毎年。だから、 フルの利益のために 開示、のは簡単に話をしましょう CS50に進むと、何をどの程度 行うことができます、あなたはに留意することができるもの。 だから、ここで2007年、いつから 私はコースを継承し、 広告ボードケースの数です。 広告委員会はハーバード大学の懲戒あります 身体、または今名誉顧問、 ケースは時に参照されました 学生はもちろんの何かを シラバスは無理と考えています。 本当のパターンはありません ここで、私は言うでしょう。 これは、上で変動します 年が、一般的に これは、数あります 呼ばれている例。 生徒数 関与していること? それはあまりにも変化します。 以下のための一般的には、昨年 例えば、ハーバード大学の29の学生が いわば広告乗り込んだが、ありました。 それら在校生の29、 それらの前の学生の2、 誰が協力しました。 いくつかの不都合な方法です。 そして、の観点から パーセンテージは、それは、通常、約3%です 残念ながら、そのクラスの 意思決定のこれらの種類を作ります。 そこで、昨年は3.5%でした CS50の学生組織の それは、いわば広告乗り込んでありました。 だから、このすべては何を意味するのでしょうか? そして、我々は実際に何をしますか? だから、完全な情報開示のために、我々 絶対に、コンピュータ科学者として、 私達の処分でソフトウェアツールを持っています そしてそれは公正では、私たちにとっては非常に簡単です、 ではないの他のクラスメート 比較交差するように、これらの行を横断 すべての提出すべてのに対して、今年 過去8年間の提出。 ソフトウェアがこれを行います。 そして、最終的にそれはです 決める人間の目 いくつかを参照するかどうか さらに判決の問題で、 しかし、ソフトウェアは確かに役立ちます。 そして、これは、率直に言って、私はなぜだと思いますということです 我々はCS50でこのような大きな数字を持っています。 それはCS50ためではありません 学生やCSの生徒より 一般に、任意の少ない正直です 他の学生よりも、 それだけで私たちが持っています ツールとテクニック これで、この最初のパスを取ります。 しかし、私たちは目を保つ行います これらの事のすべての 同様に、再び、の利益のために 置かれての仕事を認識 クラスのスーパー過半数をもっています。 そしてもちろんの方針 学術正直に、 それは段落の束だにもかかわらず、 弾丸の束との長いです それはそれは、うまくいけば非常に読みやすいです 本当に合理的であると煮詰めるん。 また、親指の最良のルールは、その 私たちは、シラバスの中にまで提供しています これは、本質であります あなたのすべての仕事 あなた自身でなければならないこのコースに提出します。 そして実際、ほとんどすべてのものの 懲戒処分のために呼ばれるケース それがあるため、いくつかの学生後半1でした 夜は、一般的に、自分のコードになって あからさまな同級生に渡って、 誰がそれを採用しました その全体または 大幅にその。 しかし、実際には、これはOKです。 そして実際、オフィスで 紙の時間、スリップ あなたは事務所が来た場合は、渡されてきました 時間先週は、多くのことを奨励しています。 あなたは絶対です 歓迎し、奨励 クラスメートと問題セットを議論します。 つまずき時お互いを助けるために。 しかし、一般的に親指のルールはすべき このことが、「あなたが助けを求めているときに、 あなたは他の人にあなたのコードが表示されることがあり、 しかし、あなたは彼らが表示されない場合があります。」 だから、他の言葉で、私はだ場合 いくつかのPセットに苦しんで 私はそこに座って ダイニングホール、またはライブラリ内の、 または教室で 何らかの障害を見つけようと、 私は確かに表示することができます 私の画面上で自分のコード 隣に座っている人へ 私には、確かにスタッフ、 だけでなく、クラスメート。 しかし、もし解決策は、 私の同級生は、ああ、あるいます ここだけで何を見てみましょう 私はラインを越えたこと、でした。 そして、私はそれが一般的だと言うあえて ほとんどの人々のための合理的なもの 非常に簡単に行を発見します。 だから、シラバスを参照してください より詳細のために。 以上のそして今1 論争の側面 私は思ったCS50シラバスの ここでの結論でに話すだろう いわゆる後悔句があります。 だから、ここにすべての細字です。 しかし、一般的に、私たちは見てきました 過去8年間でプラス 確かに、ほとんどすべてのCS50の、その 学術不正行為の例 ちょうど悪い結果となっています 夜遅く意思決定。 ストレスの結果、結果 食べる、睡眠不足の欠如、 あまりにも多くのPセット、あまりにも多くの 締め切り、あまりにも多くの約束。 午前2:00に構築ストレス3:00 AM、期限が迫り来ると午前4:00、。 これらのケースではほとんどの学生 ちょうど悪い決定をしました 彼らは非常によく後悔するかもしれないこと 翌朝分後でなければ、 しかし、昨年までそこにありませんでした 放出弁これらの学生は可能性が 実際に実際に対処するために開きます 幸福の恐れなしに問題ヘッド 完全に大学からブート。 そして、確かに、私たちは導入しました この後悔句昨年、 もし内と言っていました 72時間、3日、 いくつかのラインを通過します シラバスに規定 あなたはもちろんのの1を楽しみに来て 頭と我々はそれについてのチャットがあるでしょう。 いくつかのことはまだあります。 何に反し結果、 反対に報告されて。 いくつかの結果はまだです コー​​スによってアクションで、 一般的に、Pセットをゼロに またはいくつかの他のアクションをとること、 しかし、我々は確かに、意志、 それを自分自身を処理しません それは、より高い結果であった参照してください。 はるかに厳しいかもしれません。 そして、確かに、何が起こったかを共有します 昨年、8年間で、今 このコースを教えるの9年間、 そして、様々なノブいじりの後、 過去の上にさまざまなダイヤルを回します 学術正直に数年間、 そして、は明らかなデータごとに見ていません でも、このような演説の影響、 これは最高のものダウンの手でした 私たちは教育学を導入しました 沿って8年 CS50に次の行。 19の学生が進み出ました この句は昨年の下で。 私達はのために何の行動も起こしていません これらの学生の7、 彼らがいたと判断し 不必要に心配。 これらは、実際には、いませんでした ラインを越え、それ それにもかかわらず持っていることは良いチャットでした。 私たちは、スコアの11をゼロに それは、提出されました。 そして、もう一つの場合には、我々が尋ねました 問題のセットを行う学生。 しかし、より説得力のあります、 正直、これらの19チャットで、 私よりずっともっとでした 、それらのそれぞれを有することが期待さ 多分10分 時間長い、またもたらしました 多くの問題を点灯します 家族の問題、友人の問題、 精神衛生上の問題 我々はその後、従事していること、 学生の祝福、居住者との 学部長、または友人、または他の番号 サポートリソースの。 これは、はるかいずれかによってであるように 我々の時代の最高の用途 最高の介入の一つ。 ことで、それは持っていました 検出率の入力 学術不正のより一般的。 そして私は、言ってこのサブセットをあえて 学生最後の年の 我々の人口統計でした 以前の前に識別することはありません そして、前に接続されたことがありませんでした。 だから、これらがありました 素晴らしいサクセスストーリー 彼らは光にしたにもかかわらず、 最適な状況未満インチ だから、これを覚えておきます あなたが作るように、おそらく、 いくつかの貧しい決定 自分で夜遅く、 リコース限りがあること そのような状況で学生として アップ所有し、前方に来る私たちができるように、 チャットのようなものを持っているし、それに対処 教育の道で、その後、 我々は次の日に私たちの後ろにそれを置くことができます。 だから、さらに苦もなく、取ります この会話のオフエッジ、 子犬がアップしている理由 ちょっと氷を破壊します。 残念ながら、それらはすべて、スリープしています、 しかし、ここで起こることになっていたもの 誰がなっていたました 畏怖と種類のリラックスします その非常に重い会話後。 しかし、どうやら私は置きます スリープ状態に子犬。 しかし、あなたはCS50のに行けば ウェブサイトのスラッシュ子犬、 あなたは一日中、それらを見ることができます。 特に多分午前2時00分、または 3時、または夜間の午前4:00 そこに少しストレスリリーフを表示します。 だから、スラッシュの子犬です。 大丈夫。 その楽しさはなかったですか。 OK。 だから、戻っていくつかのコンピュータに 科学、私は可能性がある場合。 そこで、我々が開始された最後の時間を思い出します ただ、メインではない見て、どの デフォルトの機能は、ときでした 緑の旗は、同等のクリック 我々はまた、簡単に開始しました 私たち自身の機能の一部を書き込み。 そして、これらの機能のこれまでなし 特に大きなまたは肉となっています。 あなたはより大きなものになるでしょう 機能は、おそらく、Pは、P 3を設定し、2セット、 間違いなくPは4以降を設定します。 今、あなたのプログラムのほとんど、 確かにそれらのすべて、Pのためではない場合 セット1は、主に完全に行うことができます。 あなたのプログラムの場合にのみ、 5行、10行、 でも、20行の長さ、完璧 それを書くのが妥当 すべての主ではないに超える複雑 あなたのコードが、私たちは今日何をやっています 以降もしようとしています いくつかの良い設計技術を紹介します あなたのコードはよりを取得するように、そのよう 複雑で問題など あなたが難しくなる解決したいと もっと面白いあなたが持っている、一種の、 ツールボックス内のツール それらに優れたソリューションを設計します。 それでは、背中を簡単に見てみましょう 私の最後の週からこのプログラム、どの ゼロドットC.機能でした 、非常に単純に、それに気付きます それが2で次のようになります 機能、メインと印刷名。 そしてバックまたは多分考え 今日のリバースエンジニアリング、 導入するための動機だったもの ライン28内の関数が呼び出され、 名前を印刷する? またはこの中の例だったもの 原則やテイクアウトの観点から、 あなたが希望する場合。 いくつかの雑音。 何? うんそう関数分解 のがファンシーな方法の一種です、 あなたのプログラムを分解 その構成部品へ 次にそれらの部品を使用 全体を組み立てるため。 だから、それもただ一種であります 既に一口の、 しかし、これはおそらくです 何かの良い例 単に抽象化と呼ばれます。 右? 抽象化は、一つになるだろう CS50での定期的なテーマの また、コンピュータサイエンス より一般的に、それはだから あなたが解決できるような技術 あなたのため、より効果的な問題 より多くのソリューションを書くことができます 直感的かつスケールの方法で 他の人が理解できます。 私はそれによって何を意味するのですか? だから、間違いなくそれははるかに読みやすいです このようなプログラムを見て、 それでありながら超短いです。 あなたは22行目で見る時があること 呼び出された関数、印刷名。 それだけで名前はそれが何を言っています。 この関数は明らかに取ります その括弧の間の入力、 そして、明らかに何かを、 おそらく名前を出力します。 そしてそう、でも私たちかかわらず 絶対に持っている可能性が 我々があった、一週間前にやったことを行って ただ、このコードの実際の行を取ります このを取り除く、および取得 すべて一緒にこのを取り除きます、 我々は一種の抽象化 名前を印刷する概念。 あなたが印刷デフを使用している場合、私は気にしないでください。 あなたが持っている場合、私は気にしません パーセントSとこれらのバックスラッシュN. 信じられないほど難解な詳細です。 私は気に何をすべきか プログラマは名前を印刷しています。 そしてそう、ということをより良いどのような方法を行うには 関数を呼び出すことによってより、印刷の名前は? だから、それが動機の一つでした このような何かを行うため。 より、コードをより読みやすく 再利用可能な、また、自己記述。 さて、見てみましょう 別の例では、 機能するものでした、 これは私たちがこっちに持っていました。 だから、これはおそらくもっとあります 魅力的なので、この場合には、 私はint型を取得する必要はありません。 私は正の整数を取得したいです。 そして、それはポジティブを得ることが判明 あなたが取材の束を行う必要がありますint型。 右? これは、単純な1行ではありません 印刷名があったような呼び出し、 これは確かにあまり説得力があります。 正の整数を取得するには、logically-- 私はこれを非表示にするには、下へスクロールしてみましょう。 何をしなければならないのですか? すべてのツールと​​同様に、我々 現時点ではされている必要があり 標準から印刷デフのようなもの CS50ライブラリからも図書館 我々はint型を取得し、フロートを取得しています、 ロングロングを取得し、文字列を取得 一つだけ、ゲルマン、 今のIntを取得しています。 だから、あなたが持っている唯一のツールであれば あなたのツールボックスのintを取得しています、 どのように実装する行くのです それは正の整数を取得しますか? 聴衆:ログを作成し、チェック 彼らは与えたかどうかを入力で 陽性であったかどうか。 SPEAKER 1:パーフェクト。 その通りです。 私たちは私たちの中に持っているもう一つのツール 一週間か二週間前からツールボックス ちょうどループ構造です。 だから、ええ、私たちはしばらくの間を使用した場合 ループ、またはdo-whil​​e文、またはフォア 我々は、おそらく離れて得ることができるループ 何らかの形でそれらのいずれかと。 私たちは、getの概念を実装することができます ちょうど取得int型を使用することにより正の整数、 して、それを呼び出しておきます もう一度、ユーザーを困らせる保ちます 彼または実際に彼女まで 私たちが望むものを与えてくれる。 そして今、この プロセスの抽象化 正の整数を取得します 呼び出された関数に 正Intがもう少しで取得します 魅力的なこれを見てからです。 これらは、10プラスのようなものです コー​​ドの行こと 正の整数を得ることに関与しています、 私は本当にあなたがそれを行う方法を気にしません。 私は気にすべてはあなたのことです それを行う、と私はきたことができます 背後に隠されたすべてのこれらの詳細 呼び出される関数は、int型陽性取得します、 確かに、ループしながら、これを行う持っています。 そして、構文については、先週参照 そこに、それはちょうどNを宣言し、 それはプリントアウト ユーザーへの指示。 これは、int型を取得呼び出し、それがチェック この条件を再度、再度、 ユーザーが協力し、再びまで。 だから今、いくつかの健全性チェック。 おそらくお馴染みの方のために いくつかのプログラミングに、 Nが宣言されている理由は、なぜ私が作成を行います do-whil​​e文のN個の外? なぜそれがライン29上とではありません 例えば、33のように。 聴衆:あなたので、 種類、外にそれを宣言 より多くの、より大きなscope--の SPEAKER 1:良いです。 聴衆: - そしてあなたが宣言した場合 それループ内の、[聞こえません] それはそれについて知らないので。 SPEAKER 1:その通り。 私はsimplify--ことができる場合 それはスコープの問題です。 そして、スコープはコンテキストを参照 どの変数が存在するか、または使用可能です。 そして、ここで親指の素晴らしいルールはということです 一般的には、宣言または作成するとき あなたが内部でのみ使用することができ、可変 最も近いの中括弧を採用。 だから、何を意味するのでしょうか? 私場合は、代わりに、これを元に戻すと一緒に行きます 少しシンプルな感じ何か。 右? 32行目は、ちょうど今私にはクリーンに見えます。 私は両方で物事をやっています 一度、その後の割り当て 左手に右手。 今に基づいて問題 スコープのその定義 Nが行で使用され得ることです 31と、このループの内側32、 しかし、ここでその定義により それを使用することはできませんか? 行で何を? うん。 聴衆:35。 SPEAKER 1:35。 絶対にありません35。 また、他にどこ? 聴衆:34。 SPEAKER 1:偶数34されます それはだから問題 中括弧の外。 だから実際には、のは、何が起こるか見てみましょう。 右? これが少し見えるかもしれません 直感的またはしない場合があります、 しかし、それでは、何を見てみましょう コンパイラは時言っています 我々は、今日のソースディレクトリに移動します。 機能1を加えます。 何てことだ。 まあ、私は最終的に終了します ところで、その。 大丈夫。 そして、ここでの問題は何ですか? 見て非常に難解。 しかし、ここで私がtyped--ものです 機能1を作ります。 ここでは、誘導させるものです、 これは実際にあります コンパイラ打ち鳴らすを使用して それらのフラグの一部と 私たちはずっと前に再び表示されますことを。 そして再び、いつも見て 最初のエラーで、 それだけでカスケードを持っている可能性があるため、 他の行に意味のない効果。 それでは、これが意味することです 問題は、関数1.C.であります これは、ライン32上にあります。 そしてそれは、列、または文字、13時です。 だから、ときにあなたのテキストエディタは、そのことができます 問題がどこにある識別するのに役立ちます。 私は上にスクロールのであれば、ライン32は何ですか? それは確かにこの一つです それは、すでにハイライトされています 右here--未使用の変数n。 しかし、それは未使用ではありません。 私はそれを使用しています。 しかし、コンパイラのはので、混乱します それは、この範囲内に存在します。 そして、私はここでそれを使用することはできません。 私はここでそれを使用することはできません。 そして、コンパイラ、したがって、 でも、私がしようとしていることを気にしません。 これは、未使用であると思われます その実際の範囲内です。 だから我々は実行して、範囲を広げることができます 我々は、int型のn with--開始まさに。 そして、それがないにもかかわらず、 おそらく、エレガントに見えます、 私たちは余分なラインを取っています ここで、今ではどこでもスコープにあります。 それでは、もう一度試してみましょう。 だから、機能1を作ります。 ニース。 そして今、私なら、私は、関数を実行した場合 一つは、のはそれを負の10を与えてみましょう、 負の1、0、1、それは確かに動作します。 そこでここでは別の解決策があります。 あのね? 私は本当にこれで何をして格闘していますか? 私がどこかわかりません nは行くことになっています。 あのね? 私はちょうどそれを置くつもりだすべて ここに私のファイルの先頭に方法。 これは何をするだろう、あなたは思いますか? うん? 聴衆:[聞こえません]。 SPEAKER 1:うん。 だから私はいわば、それはグローバル作りました。 あなたが外だ変数を使用している場合 許可されているあなたのすべての機能、 そしてコードは、コンパイルする必要があり、nは 今取得していないだけでアクセスできます 正の整数だけでなく、main--でいます そこだから少し気になります すでにメインでnは、ので、より多くの ちょうどmoment--でその上 これは悪い設計と考えられます。 大丈夫。 あなたがに頼る必要がある場合 何かああ、私はよ、のような 理由だけで、ここでそれを置きます コー​​ドはコンパイルのようです 一般的にはベストプラクティスではありません。 むしろあなたが選択したいです できるだけ狭い範囲 意味するだろうあなたの変数のための 当初のデザインと一緒に行く、これは 右ここにあります。 さて余談として、あなたが持っていた場合 ここで同じ名前の変数、 cはthis--扱うような方法 これはあまりにもoften--起こらないでしょうが これはまだあるということです ここで完全に罰金。 しかし、行のnのこの定義 22はグローバルなものをシャドウします。 したがって、この1は、内に動作します メイン、グローバル1 あなたはにいるとき、実際に適用されます 正の整数しかし、それについての詳細を取得 別の時間が、ちょうど 好奇心の強い人のため。 だから要するに、私たちはここでこれを修正。 今度は、2つの他の部分を離れていじめるみましょう 我々は1つのコードの最後の行を見る前 このプログラムインチ 正の整数を取得します。 の左側に その単語は単語intです。 それはあなたが思う何を意味するのでしょうか? これまで我々は、ほとんどの空隙を見てきました。 うん? 観客:それはのタイプです あなたは求めている変数。 SPEAKER 1:うんそれはのタイプですが、私を聞かせて 変数言うが、値のタイプではありません 私は戻って求めていること。 そして実際、それはです ここで直感的な、うまくいけば。 右? あなたが取得したい場合 正の整数、それはあなたが何でありますか 私たちのようなfunction--たい 先週からのボランティア 作品をあなたに戻って手に その上にint型と紙の? そして、私たちが指定していること この関数のいわゆる戻り値の型 正の整数を取得することです。 我々はそれはしたくなかった場合 何も返し、あなたは無効と言います。 あなたはそれが戻したい場合 文字列は、文字列を言います。 あなたはそれが戻したい場合 フロートは、フロートを言います。 しかし、ここで適用される唯一の 論理的に、私が手にint型を使用していますので、 私はそれを制限していていても 正の値は、int型を返すことです。 だから逆に、それが何を意味するのでしょう ことを括弧内の空隙がありますか? 括弧は何を 一般的に定義しますか? うん? 観客は:これは、関数の意味します 実際にそれを得ていません。 SPEAKER 1:それは、関数の意味します 実際に何を得ていませんか? 聴衆:入力。 SPEAKER 1:入力、全く。 だから確かに、もし括弧 ここでは、空洞指定します それはちょうど私がどのような入力をしたくないことを意味します。 私はこの問題を自分自身を扱うでしょう。 そして実際、あなたがする必要はありません 正の整数何かを得る言います。 あなただけの、言う正の整数を取得し、その 機能はオフに行くとそのことを行います。 しかし、私はしましたちょっとしたトリックがあったです ここで、この全体の時間を果たして このコードをコンパイルすることを確認します。 正取得int--お知らせ int型のvoid--は、ライン27上にあります。 しかし、いくつかの一見奇妙な理由で それはライン16上にもここです。 そして、ちょうど良い測定のために、私は繰り返します これは、それは完全に同一です。 そして、私は言ったプロトタイプを持ちます 小さな一行コメント。 私はそれを削除した場合はどうなり、そして、 今機能1を作る再実行し、入力します。 おっと。 ちょっと待って。 私のタブはどこにありますか? えっ? 待機する。 機能1を加えます。 そうしよう。 OK。 それを適切に保存されていませんでした。 だから、私は少しはあると思います ここでバグ私はないんだけど 現時点では、タブ名を見て。 それでは、ここで起こっているのですか? 関数の暗黙的な宣言 正の整数を取得し、C99には無効です。 だから、再び混乱。 だから、この指標は何ですか? まあ、それはことが判明 Cはかなり愚かです。 まあ、それはプログラミングです 言語、またはむしろコンパイラがあります。 それはあなただけが持っているものを知っています それを教え、それだけです 何かを知っているだろう あなたが前にそれを教えてください。 換言すれば、内 現時点での主、私はよ 関数を呼び出すしようとしています 正の整数を得ると呼ばれます。 しかし、コンパイラは行っていません それが正の整数を取得通知に 26行目まで存在しています。 だからコンパイラが何をするかだけです エラーは、すぐにそれは17行目になるように、 暗黙的な宣言を言って 正の整数を取得します 私はしない、というのがちょうど空想の方法です 正の整数がまだあり得るものを知っています。 Javaのような他の言語と PythonとRubyは前方に見えるかもしれません。 Cにはありません。 そして、私たちが解決方法は これは、2つの方法の一つです。 いずれか一方は、問題がある場合には、取得します 正の整数は、前に見られていません よく、私はちょうど先頭に移動しましょう​​。 つまり、この問題を解決するだろう。 しかし、一般的に、それはです 優れた技術と考えられ 非常にあなたの主な機能を配置します 人間があなたのコードを読むように、トップ 、プログラムが何をするか知っています 主はすべての埋葬されていないため、 下部のか途中で道。 これは、最上部にあります。 だから、理想的に感じることはありません。 そして、あなたが実際に取得することができます 状況どこに 1関数呼び出しの場合 別のものを呼び出す別の、 あなたはどこにもない問題に取得することができます 論理的に、他の上に行くことができます。 それだけでは不可能です。 だから方法が動作するように これを回避するだけで取ることです そうspeak--する関数のシグネチャ、 それはdeclared--だ最初の行 だけに貼り付け、コピー カーリーbraces--でトップではなく、 ただセミコロンで。 それは少しのヒントのようなものです 来ることであるものの。 そして、実際には、この時間のすべてのときに我々 標準io.hのようなものを見てきました そして、cs50.h、同様に、これらの点で Hファイルがあり、他のプロトタイプです。 そして、我々はその前に長い表示されます。 要するにだから、あなたがプログラムを持っているとき 複数の機能を持つファイルで メイン以外にも、あなたのほとんど 常にそれらを宣言したいです ちょうど彼らの最初の方法により セミコロンが続くライン、 ファイルの最上部にあります。 それはすべてを一度にたくさんあり​​ました。 質問は? 質問は? 大丈夫。 それでは、上に移動しましょう 咳のようなものに。 ああ。 どのようにフィッティング。 大丈夫。 咳。 そこでここではcがあります プログラムの実施 我々は、他の一日でした スクラッチ、非常に単純に 咳、咳、咳は述べています。 大丈夫。 そして、誰かがいくつか述べて 日前があること すでにこのコードをクリーンアップする方法。 大丈夫? すぐにコピーしているように おそらく悪いデザインを貼り付けます。 少なくとも一度、私たちは4または5を取得 または20咳、それは悪い習慣を感じます。 私達はちょうど貼り付け、コピーを保持します。 明白な解決策は何ですか このプログラムをクリーンアップしますか? 聴衆:ループ。 SPEAKER 1:うん。 だから、ループを使用します。 そして、私たちは、しばらくのforループを使用することができます ループ、アプローチの任意の数。 そして実際、それは何です ここでは、バージョン1で行います。 私の代わりにそれを書き換えてきました cough.cのバージョン1で forループ内だけで咳ことができます。 すべての権利が、そこです 開始の種類になりました機会 このもう少しなどを設計します 私たちは一瞬前に教えたレッスン、 私が望んでいたと仮定this--あります 咳と呼ばれる関数を作成するには、 それでは、ちょっと考えてみましょう 何が見えるようになるだろう。 だから私が何かをしたい場合 咳を、私はちょうど必要 関数内で印刷Fを使用しています。 そして実際、私は思います。 そして、実際には、このすべて 時間、いつでもあなたがいます に何かを印刷 画面、プログラマ 副作用ことを呼び出します。 それは私が手渡していません バック誰か値。 それは私はいくつかのアクションを取っています それは、視覚的に明らかであるかもしれません。 しかし、この機能の咳は、それが返されません その最初の行に基づいて何? いいえ、その戻り値の型のため ただ意味し、無効です それが戻って私に何かを手渡していません。 それは何かをやっている可能性があります 視覚的に、それは私に手渡していません 先週のように一枚の紙をバックします。 それは、任意の入力を必要としていますか? いいえ。 そしてそれはあまりにもここで空洞です。 だから、これは優しすぎるのです この問題をオーバーエンジニアリング。 右? 私はより多くのプログラムを作りました コー​​ドの複雑な、複数の行、 私はそれを行っていません それ以上の機能が、この 飛び石であろうが、 おそらく、より広範なため より複雑なコードを使用してコンテキスト。 しかし、これについては何? 私はちょうどで何をかすめるdone--います このコメントを見ないで 持っているものfile--の最上部にあります 私は基本的に私の咳と一緒にここで行わ 違うの実装? うん、後ろに? 観客は:することができますので、それを作ります 文字がオフに持っています。 SPEAKER 1:うん。 だから、これは一種の素敵な感じ。 右? それはあなたに機能を追加するようなものです この場合、プログラムまたはあなたの関数、。 それはまだ何も返しません。 これは、視覚的な副作用があるかもしれません それは、印刷Fを呼び出すだから。 しかし、今、私はパラメータ化しています 機能、これ 私が撮影してきたことを意味指定 int型の入力と、nはそれを呼び出します しかし、私は私が欲しいものを呼び出すことができます。 実際には、それだけかもしれません 倍であってもより明確になるように。 そして、私はここにこれを変更することができます。 しかし、ポイントは、これはどのように私であるということです 入力をとる関数を作成します。 そして、あなたはフリップリコール場合 1でおそらくオンラインを通じて ウォークスルーの、 第四及び最終的な咳例、 あなたはここに気づくでしょう私が一般化しました 抽象化の私のコードfurther--種類 さらにそれ。 咳やくしゃみのように、両方があります 何かを言ったりすることのような 音のいくつかの種類。 保存は次のようになります スクラッチブロックに対応します。 そして私は、このバージョンでは何をしましたか、 これは我々だけで一目ことができ、 咳がちょうど[咳]、言っようなものですが、 咳、その間、くしゃみがあります 【ハクション!]、言うような。 そして、私は一般化しました それらの実装 今実装することで、 この一般的な機能、 面白いである、と言います 今日の目的のために 唯一まだそれのため 戻り値の型を持っていません。 しかし、それはどのように多くの入力がありますか? 聴衆:二つ。 SPEAKER 1:二つ。 だから、あなたがしたい場合は 二つの引数に取ります、 ただ、カンマで区切ります。 そして、あなたはその後、したい場合は その関数を呼び出して、 予告ちょうどあなた 、引用終わり、引用、たとえば呼び出します 最初の引数のために、一般的な nは、2番目の引数の場合。 だからもう一度、私たちは今持っています ビルディングブロック我々は、実際にすることができますように 私たち自身の機能の一部を実装しています。 大丈夫。 これらの上の任意の質問? だから今その場合の層をバックはがしてみましょう。 ゴール、最終的に、 来週の問題のセットです cryptogrophy--上になるだろう 情報をスクランブルする技術。 具体的には、情報 あなたが暗号化または復号化しています テキストになるだろう。 そして招待のように種類 質問今日のようなだけでなく、 何がボンネットの下に起こっています 0週目からASCIIを超えたテキストで、 どのように実際に私たちすることができます それを操作し始めますか? だからここZamylaの名前です。 そしてテキストに、それは、入力された可能性があります GET文字列関数のように。 あなたが見る時、今始まります this-- Z-A-M-Y-L-A--のような文字列 各かのようにそれを考え始めます これらの文字のボックスの中にあり、その 自身。 そして実際、週またはそうです これらのボックスの時間、各 非常に具体的に表現するために起こっています メモリの一口をmemory--のブロック。 したがって、これらの各文字、 最終的に、8ビットを表します。 そして、我々は実際に何が起こっているのかがわかります 私のコンピュータでボンネットの下に。 しかし、ではないことがあればよいです ただZamylaを見て このレンズを通して、それによってそれぞれの これらの文字は、独自のボックスです。 そして素敵な十分なC言語で私たちすることができます 直接これらのボックスのそれぞれにアクセスします。 だから、最初に取得したい場合 彼女の名前の手紙、Cで超簡単 あなたが最後に取得したい場合 手紙、超簡単にも 新しい構文の一部です。 だから私はCS50に先に行くつもりです 文字列のゼロ点CをIDEと開きます そして、ここで、この例では、あります 新しい物事のカップルが起こって。 したがって、最初の19行目では、我々はしました このbefore-- GET文字列を見ました。 だから迅速な健全性チェックとして、 誰かが口頭でアップを提供することができれば の素人の説明 何がライン19で起こっています。 ただにこれを翻訳するよう 英語CS50でルームメイトないこと 理解可能性があります。 うん。 対象者:ユーザーの入力aを持っています 文字列は、変数sに格納します。 SPEAKER 1:良いです。 ユーザーの入力に文字列を持っています そして、変数sに格納します。 それは素晴らしいことです。 右手にそう 側は、我々は、get文字列を呼び出します。 つまり、値を返します それは割り当てられませんでした 右側から左側へ だのと呼ばれる変数に側 文字列を格納するように設計されています。 その通りです。 だから今ごとに、22行目 21行にコメント、 明らかにその文字列を出力します 1行に1つの文字。 しかし、どのように? だから、最初にすべての、私たちは私を0に初期化します。 そして、どのようにするのですか Zamyla名の終わり? まあ、の終わりに Zamylaの名前、私ができました 手動での最後の文字を入力 彼女何とか名前、またはそれの数。 右? 私たちが戻るとhere-- Z-A-M-L-- Y-L-A--ので、私は中に入力できます。 の指標は何ですか Zamylaの最後の手紙? これがあれば0--ように話します programmer-- 0、1、2、3、4、5、 私は、そう確かに最後の文字をheard-- Zamylaの名前に第六で、 しかし、我々は0から数えた場合、 それは数5になるだろう。 だからここに心に留めておきます。 これは、関数があると判明します CはSTRLENと呼ばれ、バック日に まだこの日に、 プログラマの多く 自分の名前を同期することを選択 言葉のように聞こえる機能 彼らが言うことをしようとしています。 だからSTRLEN文字列の長さです。 だから何が文字列の長さのだろう Zamylaが入力されると、Sは返しますか? 聴衆:5。 SPEAKER 1:Z-A-M-Y-L。六。 右? Zamylaの名前の長さは何ですか? 右? そして、ちょうど実際には、6文字。 右? そしてそうそれは私たちのループのために何を意味するのでしょうか? 私たちは、から行くつもりです 6までの0、どの 私たちに5回の反復を与えるために起こっています。 我々は、各反復で何をしますか? まあ、パーセントのC、誰か 先日推測、 何のためのプレースホルダを意味? 聴衆:シャア。 SPEAKER 1:ちょうど文字。 だからシングルcharacter--ありません 文字列のような複数の文字。 そして、ここに新しいラインです 私たちは、プリントアウト持っていること。 そして、ここに新しい構文です。 あなたは、i番目を印刷したい場合 文字列S内の文字、いわば、 あなたは簡単に言うことができます 文字列Sの名前、 して、角括弧を開き、 その後私に、角括弧を閉じました 真ん中。 そして、それはそれでちょっとうれしいです それは一種の二乗のように見えます ただこれでZamylaの広場のような 文字があり、その画像上に存在します。 だから私は実際にこれを実行する場合 それでは、何が起こるか見てみましょう。 文字列0ドットスラッシュを作ります 文字列0、その後、私は Zamylaの名前を入力する予定。 私はしなかったので、何のプロンプトは、ありません 印刷Fを使用しますが、それは大丈夫です。 私は何をすべきか知っています。 そして実際、それはプリントアウト Zamylaの名前を1行に1つずつ。 今度は少し無謀であるとします。 私は知らなかったと仮定 strlen関数について、私は考え出しました、 すべての権利、誰もが持っているつもりないです 50文字のようなより大きな名前を付けます。 それでは、先に行くと、これを再コンパイルしてみましょう それを再実行してから、Zamylaを入力 またですか。 論理的には、何であります プログラムは、印刷しようとするだろうか? Z-A-M-Y-L-Aを45のよう メモリの未知のバイト。 そして実際、我々は戻ってくるだろう メモリのこのアイデアに。 しかし、単に論理的に、もし Zamylaの名前は長いこれです、 画像のとおり ここで、我々は何を言っています 維持し、印刷を続けると、印刷を続けるあります 印刷は、印刷を続けると、印刷を続けます 50文字までのすべての方法、 これが起こるために何が起こっているか知っています。 それでは、実際に見てみましょう。 それでは、Zamylaを入力してみましょう。 面白い。 我々は幸運。 ホワイトスペースのちょうど全体の束。 ああ。 1ファンキーな文字があります。 それは一種の奇妙な質問のように見えます そこにマークしたが、Zamylaの名前があ​​ります。 のは本当に無謀取得してみましょう。 どのようにして、我々は500を印刷 未知へのブロック? それでは、先に行くと、これを作ってみよう 同様にして、再実行してください。 そしてので、のフルスクリーンにしましょう 我々はより多くのスペースを確認する必要があります。 Zamyla。 再び幸運。 我々はより多くの無謀取得あえて? それでは、より無謀取得してみましょう。 50,000文字。 これは、最も確実に良いアイデアではありません。 大丈夫。 文字列0にします。 これは、私たちの最後のデモになります。 Zamyla。 うわ。 うわ。 OK。 だから、私の記憶は、今本当に空であります これは実際に一種のに便利です。 私はすべての権利をto--取得しようとしています。 そして今、私は無謀な取得するつもりです。 50万。 Make-- LETのフルスクリーンそれ。 入力します。 Zamyla。 そうしよう。 私はどのようなことは考えています ですが、それは悪い聞こえます。 大丈夫。 そしてすぐに、実際には、あなたがしている場合のうち、 営業時間内の幸運数 問題には、次のいずれかを設定します 非常によく、これを発生することがあります。 セグメンテーションフォールトは、実際にはありません 明確に定義された意味を有します。 それは間違いのいくつかの種類を意味し メモリのセグメントに関連します。 そして、普通の言葉で、 それは我々が触れたことを意味します memory--私たちは自分のコンピュータにRAMを使用しました 私はへのアクセスを持っていてはならないこと。 そして、それは両方の何です パワフルでも危険 約Cは実際にあなたのことです 自由なアクセスを持っています あなたのプログラムのメモリの全体に またはバイトのRAM、より具体的に。 だから、たとえZamylaの名前 唯一の6文字の長さで、 私はまだどこにでも行くことができます メモリ内に私が欲しいです。 あなたがしている場合はさておきとして、 これまでにいくつかの記事を読みます いくつかの約年間で サーバまたはいくつかのプログラム ことクラックやハッキング取得 何かの撮影利点 バッファオーバーフローと呼ばれます 私たちが実際にだろうと活用 それはですが、数週間のうちに話 一般的に何とかだましを参照 うまく行くにコンピュータ メモリの境界を越えて それが持っているべきであること、および ジューシーな何かを見つけます それはmemory--に パスワード、おそらく、道 いくつかのシリアル番号を回避します 確認、または一般的にできるだけ コンピュータが実行されているトリックします 意図していないされたコード。 しかし、それでは、に戻って来るように ちょっと現実 このプログラムがあった場所 strlen関数を使用して実装、 そして、ここまで一つのことをご紹介します。 これらのトップ3のラインの間で新しい何ですか? だから、文字列のドット時間。 これはと呼ばれるこのライブラリはありますが判明 文字列のドット、H、またはString図書館、 そのヘッダファイル、いわば、 私を与える文字列のドットhがあります このSTRLEN機能へのアクセス。 私はそれを省略した場合、コンパイラがあります 何らかの形で私に叫ぶつもり。 しかし、あなたは何を知っていますか? それでは、本当に微妙な取得してみましょう。 22行目では、何かのようなものがあります のinefficient--ひどく設計、 このコード行についてarguably--。 どのように戻って考えます forループが実装されています そして、どのような手順が再び起こると 再度初期化again--、 条件コード 増分は、その後、実行されます または変更、条件、 その後、コードは、変更、 状態、コード、 その後の変化、など。 それでは、少しかもしれません 気になるか、不十分ここで行わ? うん、青インチ 観客:STRLENがあります 多くの、何回も呼ばれます。 SPEAKER 1:うん。 だから、strlen関数が呼び出されます 何度もが、何であります Zamyla名の長さ 初めてループが実行されますか? 聴衆:6。 SPEAKER 1:6。 まあ、彼女の名前の長さは何ですか コー​​ドが実行される二回目? 聴衆:6。 SPEAKER 1:すべての権利。 それはまだ6です。 右? Zarlaの名前はない持っています 私が探していた場合でも、変更 彼女の名前の文字の一部だけで。 だから、私は効果的だという事実 この質問を、何 Zamylaの長さは、長さが何 Zamylaの、Zamylaの長さは何です、 6つの別々の時間、または 7であっても、ちょうど愚かです、 それはその答え不変だから。 だから私は実際にできました 文字列1にthis--行うあり 私はここでわずかに改良版を持っています。 私が持っているThere-- whoops--文字列2 わずかに改良版前記 私はちょうどthis--の代わりありません 私は、カンマでも、私は0を初期化します 呼ばれる第二の変数を宣言 N - 私は再びint型を言う必要はありません。 私は、実際には、いけません。 しかし、私はnは言います。 そして私は、nの初期化 そのように、nのstrlen関数、今 何回strlenをん 合計で実行されますか? 一度だけ。 そして、これは私たちが何を意味するかであります 以前より良いデザインについて。 実際に一度あなたのコードが正しいですか、 戻って、スルー思考、 私は少しのように使用しています メモリまたは数秒など またはコンピュータの時刻のミリ秒 いくつかの問題を実装することが可能? そして、私はスクロールするつもりです アップとだけ言及 この言及があること このバージョンでは、ヌルの、 私たちはずっと前に戻ってそれに来ます。 今のところなので、のは見てみましょう ここで、これは私たちを導くために起こっています。 そう一のことが判明します 今私たちが能力を持っていること 個々の文字を見て、 私たちは何かを活用することができます 0週目からは、非常に難解でした 当時のつまらないの一種。 しかし、今、特にときに我々 週に暗号技術の取得、 それはかなり強力になるだろう。 これは、いくつかのとことが判明 int型とフロートtypes--データ そして、文字と文字列と それらのいくつかthings--その他 非常に簡単に別のものに変換することができます。 例えば、我々は話をするとき ASCIIについていくつかの時間がago--ここです 大文字A Mまで、ドット、ドット、 我々はマッピングがあることを言いましたdot-- これらの文字と数字の間。 実際に、それが成り立ちます 小文字のためにも。 小文字aは97で、大文字のAは65です。 ASCIIの数字があります、 これだけで、このマッピングです それらの他のすべての文字のためのシステム。 だから、何を意味するのでしょうか? まあ、私は先に、オープン行くつもりです 呼ばれる本当のすぐに何かアップ コメントでそのほとんどがASCII 0、。 そして、再びオンラインにあなたが常にすることができます コメントを経て一目。 そして、何を見てみましょう これは何をするつもりです。 だから、主な機能を持っています。 私はちょうどのための番号をハードコーディングされました 今、ので、私は私がやっているか知っています。 私はここに見たいものを知っています。 そして、私は65に私を初期化しました。 そして、私は期待してい 26文字の合計を通して。 そして、私はするつもりです 一度に1行を印刷 あなたが解釈することができる場合 これはラインを強調しましたか? 何を印刷しますか? うん。 観客:あなたが行っています その文字を印刷します のマップに対応 文字値と整数値はありますか? SPEAKER 1:その通り。 私は手紙を印刷するつもりです 整数値に対応します、 またその逆、は以下の通り。 さて、この、誰かが先に言いました、 charの単なるプレースホルダです。 それはまだです。 これは、もちろん、プレースホルダ 改行int--ないため。 そして今、私の最初の値に気づくこと 私はそのプレースホルダでのプラグインです ちょうどI.私は言っていないされ、 カッコ内、char型の私が、 これは括弧内のcharがあります 私は、治療、コンパイラに伝えます ないそれは数である、であるものとして。 実際の文字として扱います。 第二の値に対し私が目詰まりしてい in-- I--はちょうど数でなければなりません。 だから私はこのprogram--をコンパイルする場合 これは、ASCII 0を作るです ドットスラッシュASCII 0--私はちょうど取得します この便利な小さなチャートこと 私は、可能なすべての示し それを考えるすることなくマッピング または自分自身でそれを把握します。 そして私はまた、プリントアウトしています 小文字に気付きます、 後で数行ので、私 また、このマッピングを印刷 同様に、ちょうどにあります 一度あなたが理解していることを言います 下に何が起こっています フード、することができます 自動的に前後に変換します。 そして、実際には、あなたのいずれかの場合 これまで小学校でこれをやりました または誰かの話を聞きました mythicallyノートを取ります 彼に渡します またはクラスで彼女の友人、 しかし、あなたがスクランブル AがBになるようにすることによって、文字、 Bは、C、または何かになります それよりも複雑な、よく、 あなたはどのように取り掛かるだろう 子供のようにそれを実装しますか? さて、あなただけの種類の知っています Aは、B、BがCになるとなり しかし、数学的に、 その子供は何をしていましたか? あなたはそれぞれの文字に何を追加したのですか? 実際には、1。 あなたがBに変更するときに、それはです 種類の66に65を変更するような、 これは数学的にちょうど1を追加することを意味します。 だから、あなたが実装した場合 その少し欺瞞技術 コー​​ド内であなたの先生のために、あなた それだけで正確に行う可能性があります 一緒に単一の文字を追加します。 だからずっと前に、私たちはしています どのように見に行きます 実際にそれを利用することができます 純粋にスクランブルおよびスクランブル解除 情報。 一方で、私たちが始めたことを知っています カップル他のライブラリを導入します 今日文字列1をhere--。 そして、非常に役立つサイト うまくいけば、あなたは見つけることができます これは、reference.cs50.netと呼ばれています 教員が一緒に入れています、 そのようにあなたがしたい場合は どのようにstrlen作品を見て、 あなたが入力し始めることができます 関数の名前、 そこstrlenをクリックして、 あまり快適説明 表示されるようになるだろう。 それとも、公式が必要な場合 Linuxベースの説明、 あなたは、より快適なクリックすることができます 右上、およびそれに 同じ情報を提示します、 しかし、より複雑な用語です。 それはに便利なリソースです 実際にすべてが何をするか知っています。 我々がしようとしている次の時間 オヴァルティンを見てみましょう 以上、そして自分自身を紹介 暗号の世界へ。 それ以前に、我々が表示されます あなたは今週後半。 そして今、コルトンオグデン。 水曜日にお会いしましょう​​。 [音楽再生] [音楽再生] SPEAKER 1:どのような 【一体全体]あなたがやっていますか? SPEAKER 1:私はデザートを食べるのですか? どのようにそれを食べていますか? あなたの手では? [音楽再生]