[音楽再生] DAVID J.マラン:すべての権利。 これはCS50であり、この 2週目の終わりです。 だから、今日、私たちはつもりだ 私たちの表情を継続する 私たちは物事を表現する方法を見 遠ざかるhood--の下に 整数のよう番号から 浮動小数点値 と文字列に焦点を当て 最終的にはより興味深いプログラム。 しかし、私たちにも見てみましょう ドメイン固有problems--のカップル その意志の最初の 暗号化を伴うことが、 情報をスクランブルする技術、 これであなたはここに上記を参照 ラジオ孤児アニーのの写真です 往年から秘密デコーダリング。 これは実際には非常に原始的な形態であり、 cryptopgraphyのと子どもに優しい形 このリングは、2つのdisks--を持つことにより、 1の内側と外側の1。 およびそれらのいずれかを回転させることにより、次のことができ 基本的にAのような手紙をラインアップ 他の文字とZまで つまり、Aを介してBのような、 あなたは、文字通りアルファベットを回転させることができ、 それによってからのマッピングを考え出す 手紙への手紙その、もしそうであれば、あなた 秘密のメッセージを送りたいと思った アニーのような誰かに、あなたが書くことができます あなたのメッセージダウンした後、回転させる あなたが意味する場合には、文字、それによって、 あなたが代わりに言って「A」を言って「B」を あなたが言うことを意味「B」を あなたの代わりに "C"を言う - か何かもう少し賢い that--より、その後、最終的には、 限りアニーはこのデコーダを有するもの リングは、彼女はメッセージをデコードすることができます。 さて、あなたはこのことを、実際には、思い出すこと 非常に有名な映画で使用されたもの 中に広告nauseumを果たしている クリスマスシーズン。 それでは、ここで見てみましょう。 RALPHIE PARKER:「それは必ず 要約すると、すべてに知られている ラルフ·パーカーは、ここに任命されていること リトル孤児アニーシークレットのメンバー サークルとは、すべてを受ける権利がある 名誉と利益をそこに発生する。 " RALPHIE PARKER(ナレーション): リトル孤児アニーを締結しました。 副署、ピエール·アンドレ! インクにおいて。 栄誉と利益、 すでに9歳で。 [音楽再生] [RADIOのおしゃべり] RALPHIE PARKER:さあ。 のはそれを上に取得してみましょう。 私はすべてのことジャズを必要としない 密輸業者や海賊に関する。 ラジオアナウンサー:明日聞く 結びの冒険のための夜 黒海賊船の。 今では、アニーのための時間です あなたのメンバーのための秘密のメッセージ 秘密のサークルの。 子供を覚えておいて、メンバーのみ アニーの秘密サークルの アニーさんの秘密のメッセージをデコードすることができます。 アニーはあなたに依存していることを覚えておいてください。 B-2にあなたのピンを設定してください。 ここでmessage-- 12、11、2 - RALPHIE PARKER(ナレーション):私 私の最初の秘密の会合にいます。 ラジオアナウンサー:--25、14、11、18、16-- RALPHIE PARKER(ナレーション):ああ、 ピエールは素晴らしい声で今夜だった。 私は今夜​​のことを言うことができる メッセージが本当に重要だった。 ラジオアナウンサー:--3、25。 つまり、アニー自身からのメッセージです。 覚えておいて、誰にも言わないでください。 [喘ぐ] RALPHIE PARKER(ナレーション): 九十秒後、私は今 で唯一の部屋で 家どこ9の少年 プライバシーとデコードに座ることができます。 ああ。 「B」 [笑う] RALPHIE PARKER(ナレーション): 私は次に行ってきました。 "E." 最初の単語は ""である。 うん! 今では簡単に来ていた。 「U」 [笑う] RANDY PARKER:おやおや、是非、Ralphie。 私は行くことを得た! RALPHIE PARKER:私は、右下の馬になるでしょう。 ジーの達人。 「T」 "O." "必ず に。「何を」に必ず「? リトル孤児アニーは何だった 言いたい?何を」に必ず「? 母:Ralphie、ランディが行くようになっています。 あなたが出てくるしてくださいだろうか? RALPHIE PARKER:すべての権利、ママ! 私は右のアウトになるでしょう! RALPHIE PARKER(ナレーション): 私は今、近づいた。 テンションがひどかった。 それは何でしたか? 地球の運命 バランスハングすることがあります。 母:Ralphie、ランディのが行くようになった! RALPHIE PARKER:私は右のようになります アウト、大声で泣くのために! RALPHIEパーカー (ナレーション):ほとんどそこに! 私の指が飛んだ! 私の心は鋼トラップだった。 すべての細孔が振動。 それはほとんど明らかであった! うん! うん! うん! うん! RALPHIE PARKER: "必ず あなたのオヴァルを飲む。 " オヴァル? 安っぽく商業? [音楽再生] RALPHIE PARKER:雌犬の息子。 [笑い] DAVID J.マラン:その後になるように どの暗号を垣間見る this-- Aであることができる 往年から飲む。 だから、迅速な発表。 あなたはこの自由である場合 13:15金曜日となります CS50のための私達に参加したい ランチ、ここにこのURLへのヘッド。 まず最初にいつものように機能し、来る。 しかし、時間をかけて、私たちはそのことを確認します 参加したいのですが、ほとんど誰も スケジュール設定単位があります。 だから文字列。 私たちは誰Zamyla--を持っている あなたは今、おそらく出会った 問題セット1--その中で 名前は、このように綴られている。 そして、あなたは彼女の名前を入力したとします のコンピュータプログラムに のgetStringのようなものを使用して。 取得するためには、 どのようにそれらのキーストローク、 私たちは表現する行くのですか 文字列、単語、段落、 あるいは、ここでこのような複数の文字? 私たちは、約最後の時間を話し 整数および問題点 それは、整数オーバーフローを発生する 浮動小数点値 問題その 精度内に生じる。 文字列では、私たちは、少なくとも もう少し柔軟性を持っている strings--という理由だけで 本当world--中 かなり任意の長さであることができる。 かなり長い間、かなり短い。 しかし、それでも、私たちはするつもりだ コンピュータがときどきできることを見つける でも、メモリが不足していない 十分に大きい文字列を格納します。 しかし、今のところ、のは視覚化することから始めましょう これらのボックスの中で何かとして文字列 ここに。 そう6、箱、そのそれぞれ 文字または表す「チャー」 C-H--r--のです - だから、「charが "ことを思い出して C.の組み込みデータ型のいずれか そして、何すてきなのはあなたが使用できるということです その種の構成単位として、 形成するために、パズルピース、可能ならば、 私たちは続けます、データの大きなタイプ "文字列"をコールする さて、思考に関する有用なものだ このように、文字列のようなものでしょうか? まあ、それは私たちができることが判明 実際にこの構造を活用 実際に個別の文字にアクセスする 非常に簡単な方法で。 私が先に行くと、作成するつもりです というファイル「stringzero.c、 " しかし、あなたはあなたが好きな何でも呼び出すことができます。 そしてもちろんのウェブサイトにある すでに事前にこの例で、 そうあなたがする必要はありません すべてを入力します。 そして、私は先に行くつもりです 最初のint型のメイン空洞を行います。 そして、数日以内に、 私たちは離れていじめるから始めましょう それが理由です、ここではどのような無効である メインの隣に、などint型。 しかし、今のところ、のは続けましょう コピーすることを貼り付けます。 私は、sと呼ばれる文字列を宣言するつもりです。 そして、私はから復帰するつもりです にどのようなユーザータイプをのgetString。 これは単純になるだろう プログラム、ない命令、 私は盲目的に行くよ ユーザが知っていることを期待する 何それをシンプルに保つために行う。 そして今、私は、ループのために持っているつもりです。 そして、私のforループの内側に私は今 私はゼロを取得するintを持っているつもり。 そして私は、再び、ただの慣習です、 カウント用インデックス変数、 私は私が好きな、これを呼び出すことができます。 私は私がよくthan--小さいするつもりです Zamylaの名前は6文字の長さである。 だから私はハードに行くよ 今のところそこにコード。 そして私は+ +。 そして今、これらの巻き毛の内側 私はprintfのをするつもりブレース、 と私は1つを印刷したい 当時の文字。 だから私はのために%cを使用するつもりだ おそらく初めて。 そして私は、それぞれを印刷したい 独自の行上の文字。 だから私は置くつもりです そこに少しバックスラッシュのn。 閉じる引用。 そして今、私はここで何かをしたい。 私はプリントアウトしたい 文字列内の特定の文字、 秒、私は繰り返し処理だとして ゼロから最大6台の上。 言い換えれば、私はしたい sのi番目の文字を印刷します。 今、どのように私はこれを行うことができますか? まあずっと箱のよう ここではこの表現、 種類の、ボクシング​​の概念を想起させる あなたは、同様にそれを行うことができ、中の手紙 構文的に単純に指定することで、C言語で、 私は、文字i番目の年代をプリントアウトしたいと思います。 角括弧を使用した コンピュータのキーボードで USキーボード上にあることを 一般的に、あなたのリターンキーの上。 だから、これは非常に適切ではありません まだ、あなたは気づいている可能性がある。 しかし、私はの種類に行くよ やみくもにここに押し進める。 そして、私は、文字列0を作るするつもりです。 私はこれを行う前に、しかし、私たちどうかを見てみましょう いくつかの一般的な間違いを予想することはできません。 これは、コンパイルしようとしていますか? いいえ、私は物事の全体の束が欠けている。 私が聞いたライブラリ。 だから、ヘッダファイル 私はここに追加したいのでしょうか? うん。 聴衆:あなたが必要とする 標準I / O [聞き取れない] DAVID J.マラン:優秀。 だから私は、標準的なI / Oを必要としています。何のために 目的は、私は、標準的なI / Oをしたいですか? printfのために。 だから、stdio.hのが含まれています。 そして、あなたはまた私が含まれていることを提案する どのような理由のためCS50ライブラリ? 文字列が指定されています。 だから私たちは何が表示されます CS50のライブラリがやっている 文字列のこの概念を作成します。 しかし、今のところ、あなただけ考えることができます それの実際のデータ型として。 だから、少しクリーンアップしているようだ。 そして今、私が先に行くつもりです 実際の文字列は0を作るのですか。 コンパイルされた。 だから、良いことだ。 だから私は、私たちができるズームましょう./string0 より密接に何が起こっているかを参照してください。 入力してください。 Z-A-M-Y-L-Aを入力します。 そして、私たちはZamyla名にプリントアウトしました。 だから、かなり良いです。 だから今のは先に行くとしましょう 今後、このプログラムを実行し、 と祈るのフルネームを入力します。 サプライズ、驚き。 入力してください。 うーん。 私たちは祈るの印刷されていません 正しく完全なファーストネーム。 さて、これは中に明らかにする必要があります なぜなら何の追想、 愚かな設計上の決定、のようなもの? ええ、私は、ハードコーディングされた 私のforループの内側に6。 今、私はやったことだけのため 私はZamylaの名前を知っていた 6文字になる予定だった。 しかし、確かにこれはありません 一般的な解決策。 だから、私たちがダイナミックにすることができますが判明 文字列の長さを把握 strlen関数と呼ばれる関数を呼び出すことによって。 繰り返しますが、意図的に 簡潔にちょうど命名 型にそれをより便利にします。 しかし、それはと同義だ 文字列の長さを取得。 私は自分の端末に戻って行くつもりです ウィンドウと、コンパイラを再実行してください。 しかし、それは私に叫んでいます。 暗黙的にライブラリ関数を宣言 unsigned int型const--ではstrlen 私は迷ってしまいました。 完全に。 だから、特にあなたのように 目はオーバー釉を開始 このようなエラーメッセージが、中心とした 正直最初のいくつかの単語について。 私たちは、問題がであ​​る知っている 8行目、ここに示されているように。 そして、それは文字列0.cにあります。 暗黙的に宣言 ライブラリ関数strlen関数。 だから一般的に起こっている エラーメッセージのパターンであっても。 暗黙的に何かを宣言。 だから要するに、私が見えたものを持っている ここでは、ライン8に対して行っている。 かもしれないどのような解決策が偶数になるようにして あなた自身はstrlen使ったことがない場合はどうなりますか? 聴衆:異なるライブラリの一部? DAVID J.マラン:パート 別のライブラリの。 だから、それはいわば、宣言されています。 これは、いくつかのファイルに記載されている stdio.hのとCS50.h.以外の 今では、どこで定義されている? 正直に言うと、あなただけす​​る必要がどちらか あなたの頭の上からこれを知って、 またはあなたはこれをGoogleと見つける。 または私はCS50で開かれましたが、これを知っている ターミナルプログラムを、アプライアンス、どの ちょうど大、フルスクリーンバージョンです geditののウィンドウの下部には何だ。 そして、それはそこだと判明 と呼ばれる同様に簡潔なコマンド、 あなたが入力した場合、マニュアルは、man 関数の名前と入力してEnterキーを押し、 あなたはかなり戻って取得します 難解なドキュメント。 それは、その一般的にテキストのみだ このような小さなものになります。 それは少し圧倒だ 一見。 しかし、率直に言って、私はするつもりだ 私の目はオーバー釉ましょう 部分のみに焦点を当てる 私はちょっと気に。 どのこれです。 どの構造的のように見える 何か私が精通してんだ。 実際、manページなので、 話すこと、を教えてくれます どのようにヘッダは、関数ファイル strlenのように定義されています。 だから私はgeditのにすぐに戻って行くつもりです。 そして、私は先に行くつもりだと ここに追加します。#include ファイルを保存します。 私は画面をクリアするつもりだ あなたが思ってきた場合は、Lを制御します。 そして、私はメイクを再実行するつもりです string.0、今回コンパイルします。 ./string.0 Zamyla。 それは私が行こう動作するように見えた 先とダベンポートでそれを再実行してください。 入力してください。 そして、それは、あまりにも、動作するように見えた。 だから私たちは、これよりも少し良く行うことができます しかし、私たちはきちんと物事を開始することができます 少しだけアップする。 そして、私は実際にに行くよ 今もうひとつを紹介します。 私が先に行くつもりだと 別のファイルでこれを保存します。 そして、私はコールするつもりだ このファイルstring1.cちょうど コー​​ドと一致しているように あなたがオンラインで見つけることができるでしょう。 そして、それでは中に集中しましょう 全く同じコード。 それは私がしたことが判明 撮影の一種であっ 私のラップトップその事実を付与されたため、 ひいては、CS50アプライアンス 多くのメモリ、たくさん持っている RAM、領域のバイトがたくさん その中で私は、文字列を格納することができます。 しかし、現実には、私は長いと入力した場合 十分に、かつ十分なキーストローク、 私は、理論タイプでし もっと文字数 私のコンピュータより 物理的にメモリを持っています。 そして、これは問題である。 多くのintができる唯一の​​ような 理論的には、非常に高いカウント、 あなただけの非常に多くの文字を詰め込むことができる コンピュータのRAMまたはランダムに アクセスメモリ。 だから私はより良い予想していた この問題も、 それは珍しいかもしれませんが コー​​ナーケース、いわば。 発生する可能性が、多くの場合、それを発生しません。 それが起こるとした場合、私はしないでください 予想し、それのためのプログラム、 私のプログラムは何を知っている行うことができます。 フリーズ、ハングアップ、再起動、何でも。 何か起こるかもしれないと予想。 だから、私はするつもりです 今、今後は本当に、 今まで盲目的に私の前にある sのような変数を使用すること の戻り値が割り当てられている のgetStringのようないくつかの他の機能、 私は確認するつもりだ その値が有効である。 だから私は読んだから知っている のgetString用CS50のマニュアル、 最終的に私たちがあなたを指します、 それのgetStringは、特別なシンボルを返す 全部でNULL、N-U-L-Lと呼ばれる 何かがうまくいかない場合には、キャップ。 だから通常は、それは文字列を返します。 しかし、それは、N-U-L-L--を返すそうでない場合は、 私たちは最終的には実際にどのようなものが表示されます means--ちょうど手段 何かが悪い起こった。 さて、これは、非常にスクラッチのように、意味 私はここにC言語での状態を確認することができ、 sが等しくないNULLがない場合。 あなたは前にこれを見ていませんでしたのであれば、 これは単なる等しくないことを意味します。 だから、の反対だ 、リコール等しいイコール、、 シングルとは異なります 代入である、等しい。 だから、sが等しくない場合 NULL、だけにしてください 私は、これらのコード行を実行したい。 そのように、換言すれば、 私は盲目的でのダイビングの前に と繰り返しを開始し s以上、及びそれを治療する それは、一連のであるかのように 文字は、私が最初にチェックするつもりだ ちょっと待っ、絶対にないよさ この特別な値に等しく、NULL? そうであれば、悪いことが起こる可能性があるため。 そして今のところ、その悪いことを前提とし 起こっては、プログラムがクラッシュしたことを意味する、 あなたが必ずしも回復することはできません。 だから率直に言って、それは醜い見える。 それは一目さてちょっと紛らわしいです。 しかし、これはより多くなります やがてお馴染み。 しかし、私は提案するつもりです 今つの他の改善。 つまり、正確さの向上です。 私のプログラムはあるため、今より正確である メモリ足りないまれなケースでの 存在し、私はそれを処理します、 と私は何もしないでしょう。 私は、少なくともクラッシュすることはありません。 しかし、それでは、ここで最終版をやらせる。 そして、ファイルはstring2.cと呼ばれる。 私はそれを貼り付けるつもりだ ちょっとで同じコード、 そして私はこれを強調するつもりです ちょっとはこちらのライン、11、、​​。 今、現実には、そのスマートなコンパイラである クラングのように私たちのためにこの問題を解決できた 舞台裏で 私たちが今まで知らずに。 しかし、ここでこのことについて考えてみましょう 根本的に問題のある設計など。 このコード行は、もちろん、あり と言って、いくつかの変数iが0に初期化してください。 これはかなり簡単です。 そして再びこれは何ですか ステートメントは、ここでは、私はやって、+ +? 私たちは前にそれを見たが、私たちました 実際にそれについて話しませんでした。 聴衆は、iをインクリメントする。 DAVID J.マラン:インクリメント私。 したがって、すべての繰り返しでスルー このループは、サイクル毎に、 あなたは1 iをインクリメントしている。 だから、大きく、そして大きくなって、 ループが終了するまで、大きく。 それはどのように終了するのですか? さて、この真ん中があります 私たちは以前に使用した状態。 あなたには見てきた Pセット内のウォークスルー。 しかし、この言葉は何ですか? ので、次のループを実行し 長い私は何よりも小さいなどの? 聴衆:文字列の長さ。 DAVID J.マラン: 文字列の長さ。 だから、それはかなりきれいに変換します その意味で英語に。 さて問題は、私はあることを毎回ある 理論的にはこのループを反復、 私はこの質問をしています。 私は、sの文字列の長さよりも小さいですか? 私は、sの文字列の長さよりも小さいですか? 今私は、各繰り返しで変化している? それがある。 + +のため。 したがって、すべての反復iが大きくなっている。 しかし、あるsは大きくなったり、 小さい、またはまったく変更する? いいえ 軸の一つは、設計上そのように それに沿って私たちはコードを評価しよう クラスでは、これは一種の愚かな感じ。 あなたは、文字通りあるように、 すべての繰り返しで このループの求めて 再び同じいまいましい質問、 そして再び、そして再び、文字通り それは変更するつもりはありません。 私は、sに触れていないよ、少なくとも場合 sの内容を変更しようとしている。 だから私は、これよりも少し良く行うことができます。 そして、私がやろうとしてたんだけどありません 私はちょうど1変数を宣言し、 2番目の変数は私は、任意によ しかし従来は、nはそれを呼び出す。 割り当てnに等しい sの文字列の長さ。 そしてこっちは、私はするつもりだ そう、賢い少し最適化を行います 一日の終わりには、次のことを話す 正しい劣ら正しいこれ以上ありませんか 以前より。 しかし、それはより良いデザインです。 私が使用しているという事実 少ない時間、より少ないCPUサイクルなので、 同じことを答えるために、いわば 質問が、一度だけ。 その一般的な上の任意の質問 改善の原理は、 、プログラムの効率を言う? うん? 聴衆:なぜあなたは [聞き取れない]を使用するのか? DAVID J.マラン:良い質問。 では、なぜ私たちはの終わりに+ +を置けばいい 私の代わりに私の始まり? この場合には、有している 機能的な影響はありません。 そして一般的には、私がする傾向がある 後置演算子を使用する それはもう少し明確ようだように、 動作が起こっているときに。 なじみのない人のために、もう一つがあります 文により、あなたは+ +私を行うことができます。 これらは、機能的である この場合の等価 他には何もありませんので、 その増分の周り。 しかし、あなたが思い付くことができます ケースやコードの行 その中でそれが違いになります。 だから一般的に、私たちにはありません でも、これについて話しています。 率直に言って、それはあなたになりますので コー​​ドセクシー、ソートのスリッカー、 と少ない文字。 しかし、現実には、それは多くの困難だし、 私は私が私の心をラップすることさえのために、と思う 時にはその周りに、 操作の順序。 余談として、もしそうであれば、あなた 本当にこれが好きではない、 これはちょっとセクシーであっても、 見て、あなたはまた、I + = 1行うことができます そのうちの醜いバージョンです 後置インクリメントのために同じアイデア。 私はこれ、あなたを言う それをからかうべきであり、 しかし、あなたのように、コードを見に来る やがて美しいもの。 [笑い] DAVID J.マラン:右ですか? うん。 途中で質問。 聴衆:あなたはint型nを言う必要がありますか? DAVID J.マラン:あなたが行う int型nを言う必要はない。 だから私たちはintは既に述べているので、 あなたは再びそれを言う必要はありません。 漁獲量は、nはならないことである 私と同じデータ型である。 だから、ここでは単に利便性です。 うん。 聴衆:あなたが上に行くことはできます 印刷文字のブラケット再びどこ? DAVID J.マラン:もちろんです。 だから、%cは、最後からリコール 時間は、ちょうどプレースホルダです。 ここはchar型を置くことを意味します。 バックスラッシュnは、もちろん、ただ 手段は、ここに改行を入れて。 ちょうど今、残されるように、 新しい構文のこの作品。 そして、これは文字通りグラブ、と言っている 文字列は、sと呼ばれ、その取りに行く i番目の文字、いわば。 そして私はi番目の文字を言い続ける このループの各繰り返しであるため 私たちが印刷しているかのように、それはだ 、初のブラケット0、アウト プログラマとして言うかもしれない。 その後のその後、ブラケット1よ ブラケット2、次いで3、4。 しかし、もちろん、それは可変ですが、 私はちょうど私でそれを表現しています。 キー、しかし、実現することで、 あなたがいませんでした場合は特に この世界に順応して プログラミング、私たちはすべての ゼロからカウントするようで、お奨め 今、ゼロからカウントを開始。 そのため、文字列、最初の文字、 Zamylaにおけるzがために良くも悪くもある 位置番号をゼロに生きて行く。 すべての権利なので、私が持ってみましょう ここに戻ってZamylaへ問い合わせ 本当に何が起こっているかを参照してください。 ボンネットの下に上。 だから、型キャストのこの概念があります。 あなたが実際に持っているかもしれません すでにこのと共演、 多分ハッカーのための Pのエディションは1に設定してください。 しかし、型キャストだけを指し、 Cおよび他のいくつかの言語での能力 別のデータ型に変換する。 今、私たちはこれをどのように表示される場合があります かなり素直に? したがって、このリコールは、始まりです 英語のアルファベットの。 そして、文脈、リコールから のような一週間前にASCIIです。 米国標準コード 情報交換用。 本当に長い道のりどれ 文字のマッピングをというのが 数字であり、数字から文字へ。 だからここに、M、ドットドットを通して ドット、ラインとアップ、リコール、 アップ時に65進数。 そして、私たちは話をしなかった 明示的にこのことについて、 しかし確実に似てあります 小文字用数字。 そして実際、あります。 世界は何年かを決め 前その小さな、小文字、 97になるだろう。 そして少しbが起こっている など98であること、そしてする。 そしてほかのキーにするため あなたのキーボードが、あります ビットの同様のパターンになるだろう。 または同等に、小数。 手元そこで問題、 その後、私たちはどのようにできている 実際にフードの下にこれを参照してください? だから私は再びgeditの所へ行くつもりです。 むしろ型より 最初からこの1、 私が先に行くつもりだと ちょうど何かを開く 今日のコードからASCIIのゼロと呼ばれる。 とASCIIのゼロは次のようになります。 それでは、この問題を回避私たちの心をラップしましょう​​。 したがって、最初に、私はコメントしました いいですコード、。 それは文字通りだから 何を期待するように私に言って、 大文字のマッピングを表示します。 今、私は非常に私は何かわからない そのことによって意味、それでは推測しましょう​​。 英語では、多分 やや専門的な英語、 ライン18は何を表示されません 私たちのためにやっているのですか? わずか18行目。 それは何を誘導するのか? 何がここにキックオフになるだろう? 聴衆:ループ。 DAVID J.マラン:ループ。 そして、どのように何回ある 反復するために行くのか? 聴衆:[介在VOICES] 6回。 DAVID J.マラン:ない6回。 聴衆:26回。 DAVID J.マラン:26回。 ええ、申し訳ありません。 26回。 なぜ? まあ、それは少し奇妙だが、 私は65からカウントを開始しました。 どちらが奇妙な、しかし間違っていない。 それは言うあたり悪くない。 そして、私はそれだけをやっている なぜなら、この例の場合、 私は、ちょっと期待しています その資本Aは65だった。 さて、これは最もエレガントではありません ハードコードの種類にこれを行う方法、 難解な値は誰 今までに覚えておくことが期待されている。 しかし、今のところ、私はあることに気付く 65プラス26を介してこれを行う。 どうやら私もしたくないので、 私の頭の中で計算を行うには。 だから私は、コンパイラがそれをやらせるよ。 しかし、その後、各ループ上の、各反復 ループ、私は私をインクリメントよ。 だから今、これは少し不可解に見える。 しかし、私たちは基本的な構成を持っている必要があります これを理解するとブロックされます。 %cはchar型のためだけのプレースホルダです。 %iはint型のプレースホルダです。 そして、これを使用してその判明 新しい構文、この括弧付きなので、 話すので、データ型に 括弧の中の、 私が扱うようにコンパイラに強制することができます 私は整数ですが、charとしてではない。 これにより私に文字を示す その数に相当する。 さてここでダウン、このコード ほとんど同じです。 私はちょうど作りたかった スーパー明白な事実 私は97で始めていることを、 これを小文字されています。 最大26文字以上を経てオン。 そして、私は、再びdoing--よ 私をキャスティング、いわば。 または型キャストiの、いわば。 int型からchar型へ。 だから、最終的な結果があることを行っている、 率直に言って、情報は私たちがすでに知っている。 私はするつもりだ アスキー-0は、cに点在していないdot--。 通知は、おそらくと判断 私は誤って行ったように間違い。 アスキー-0にしてください。 今私は./ascii-0をするつもりです。 私はズームイン、残念ながらよ それは画面がスクロールになるだろう。 しかし、私たちはどこにチャート全体を参照してください 97のマップ、98 Bのマップ、 私たちは、さらに上にスクロールした場合 もちろん、65にマッピングされます。 だから、これはと言うことだけです。 私たちは何を説教してきた、 この等価性は、そこにある 現実には実際にはケース。 だから、これを迅速に修正。 私はアスキー1.Cを開いてみましょう。 そして、並べ替え、この巧妙に気付く の、このの明確化。 これは、ASCII-1.Cで、 このクレイジーな事に気づく。 そして、これは本当に心に届く コンピュータがやっているの。 でも、私たち人間はあろうけれども letters--の面ではカウントされませ 私は考え始めていない、 大丈夫、次にB、 と物理オブジェクトをカウントするものを使用しています。 あなたは確かに私がしたいと言うことができます と呼ばれるいくつかの変数を初期化C-- 私はこのanything--呼ばれるかもしれない そうcが資本Aに初期化される 一日の終わりに、コンピュータなぜなら あなたが保存しているかを気にしない、 それだけであなたが望むどのように気遣う その情報を提示する。 どのようにコンピュータがします​​か ビットのパターンを解釈? だから、これは何か私ではありません 一般的にやってお勧めします。 それは本当に例でしかありません あなたは絶対にできていることを伝える char型に整数を初期化します。 下にあるため チャーのフードはもちろん、 0から255までわずか数です。 だから、確かにすることができます int型の中に置く。 そして、何もこの 実証する私たちです 1から変換することができます ここでは、別のタイプ、 最終的には同じことを印刷する。 そして、実際には、これは私が解決しますonline-- ここで、もう一度、これを言うためのものだった。 私はオンラインでのクリーンアップしましょう​​、と私たちはよ 必要に応じてオンラインウォークスルーで見、 何があっ意図していた。 [OK]をクリックします。 だから、最後の例は、今が関与 Aのaとb年代と、私たちはよ ワンランク上のものを取る。 のaとb年代とSoと 時価総額のCさん と等価的には、してみましょう ここでは、この例を見てみましょう。 もう一つのコード例。 私たちは、のいずれかを開きます すでに行われ、私たちはそのように それを入力する必要はありません 最初からすべてのアウト。 予告見越して 私たちは、複数のヘッダーを使用している ある間でファイル、 私たちの新しい友人、string.hの。 さて、これは最初に、見える 一見、少し不可解。 しかし、私たちが理由ではないことができるかどうか見てみましょう ここで何が起こっているのかを介して。 まず私は、ユーザーから文字列を取得し、 と私は、変数にその文字列を入れて いわゆるS。 以前からペーストをコピーします。 22行目では、私は明らかによ 正確に何をしている 私は、一瞬前と私は繰り返し処理してい s内の文字を超える。 そして、ここで新しいトリックを使用している 文字列の長さ、マイナーな最適化 n個の文字列の長さを格納する、 むしろもう一度はstrlen呼び出すよりも、 そして再び、そして再び。 そして、ちょうどiがn未満であることを確認する。 今ここに、物事を取得 ちょっと面白い。 しかし、それは単にアプリケーションだ この同じ新発想の。 英語が何にどのような 私が表現するのブラケット? 聴衆:それぞれを数える 文字[聞き取れない]。 DAVID J.マラン:各文字を数える。 とにもより簡潔に、 sのブラケット私は何を表している? あなたは言うでしょう。 ここにその場であなたを置くまでもありません。 聴衆:Well-- DAVID J.マラン:単語の場合is--もしそうであれば 文字列はstarts-- Zamyla、ある 聴衆:--youに対処 文字separately-- DAVID J.マラン:良い。 その通り。 角括弧表記法を使用することができます 個別に各文字にアクセスするには、 そうsのブラケット0になるだろう 文字列の最初の文字。 Sブラケット1があることを行っている 第二、など。 そこで質問私が求めている、 ここでは、この状態で何ですか? のS以上のi番目の文字です 以上を小文字に等しい? そして、これは、ここでは、何を意味するの 二重アンパサンドしますか? AUDIENCE(TOGETHER):そして。 DAVID J.マラン:そして。 これはちょうど同等です。 そして、あなたがする必要が、Cではキーワードではありません 、うるさく、アンパサンドアンパサンドを使用します。 そして、これは、逆に、求めているのです。 以下の文字i番目の年代 小文字のaからz? そして再び、ここどこだ 基本となるの理解 の実装 コンピュータは、理にかなっている。 私が持っているにもかかわらず、それに注意してください あそこドットドットドット、 小文字でaからzまでのようなものに見える アップ時に97からのすべての連続した​​値がアップする。 大文字で同じ65から始まる。 だから持ち帰り、その後、 それが英語であり、 あなたはどのように説明しますか 何行24しているのですか? うん? 聴衆:24日にそれはどうかをチェックするだ 各文字が小文字であるかどうか。 DAVID J.マラン:それはどうかをチェックするだ 各文字は小文字です。 だから、より簡潔に、ある sの小文字のi番目の文字? つまり、私たちがしているすべてです 論理的に、ここで表現する、 少しひそかに、しかし 最終的にはかなり素直。 文字小文字のi番目のSのですか? もしそうであれば、ここでどこの事だ 少し心曲げを取得 ちょっと、そうであれば、行く 先に文字をプリントアウト。 だから、これは単なるプレースホルダで、 しかしどの文字? なぜ私はsのブラケット私をしています マイナスここにこの表現? さてここで、パターンに気づく。 実際の数字はそれほど重要ではありません。 しかし、97であることに気付く どれだけ離れて65から? 聴衆:32。 DAVID J.マラン:32。 どのように遠く離れた66〜98である? 聴衆:32。 DAVID J.マラン:ビッグCからのリトルC? 32。 だからから32のホップがあります 別の手紙。 だから率直に言って私は、可能性が それにこれを簡素化します。 しかし、私は一種のハードコーディングしてい この低レベルで理解 全く読者は今までないことを 理解しようとして。 だから私は、私は、としてそれを一般化するつもりだ 小文字が大きいですね。 私は大文字が知っている 皮肉にも小さな値、。 しかし、これは実効的に等価である sのブラケットi番目から32を引くと言う。 これらの文脈でそう 手紙、手紙の場合 小文字であることを起こる 、と私は、32を引き それがどのような影響があるのか​​、 数学的に、小文字のaの上に? 聴衆:Capitalizes-- DAVID J.マラン:それを大文字にします なぜ私たちの実際、これは プログラムは、ゼロを大文字に呼ばれています。 このプログラムはどちらか 文字を大文字に、 それがある場合にチェックした後、 確かに小文字。 それ以外の場合は、ライン30で、私は、次の場合に何をすればよい それは私がいることを小文字ではありません 特定の時に見て ループの繰り返し。 ちょうどそれをプリントアウト。 だから、何かを変更しないでください それがあっても、小文字ではありません。 に自分自身を制限 少しzまで少しA。 さて、これはかなり難解です。 しかし、一日の終わりに、この どのように私たちは、昔々、ある 物事を実装する必要がありました。 私の代わりに大文字に開く場合 1は、ああ、神様に感謝します。 機能があります アッパーに呼ばれることができます 私たちはただやっ全力を尽くす かなり低いレベルで。 今アッパーに興味深いです それがファイルで宣言されているので、 あなたがこれだけを知っているだろう ドキュメントをチェックすることにより、 またはクラスで、言う、言われる それはctype.h内というファイルに、存在しています。 だから、これは私たちの別の新しい友達です。 と上を正確に行うために 何その名前が示唆している。 あなたが間に、引数として、渡すことができます これらの括弧、いくつかの文字。 私は、i番目の文字を渡すつもりだ 私達の空想の新しい表記法を使用して、sの 角括弧を含む。 そしてリターンは何か、推測を取る 上限の値は、明らかに行く なるには? 大文字。 大文字。 だから私は、小文字のaに渡すと、 うまくいけば、上の定義により、 それは返すために起こっている 大文字のAでそれ以外の場合は、 それは中の小文字でなければ、 最初の場所は、私はちょうどそれをプリントアウト。 そして実際、気付く ここで第二の友人。 だけでなく、上部が存在する、 しかし、低くなっている 実際に私のためにその質問に答えます。 今、誰がこれらのことを書きました、 年の10秒前に、あなたは何を知っていますか? アッパーに実装してある このようなコードを使用して下げる。 としかし、再び、一貫性のある 抽象化のこの考え、 低いレベル、のようなもの 実装の詳細。 そして、人の肩の上に立って 誰関数を使用して、私たちの前に来た アッパーに様と、低くなっている 素晴らしく十分にきれいである 、彼らが何を言うことであるという 採用する素晴らしいパラダイム。 さて、それは私が読んでいる場合ことが判明 アッパーに、たとえば、マニュアルページ、 私は他の何かを学ぶ。 だから男TOUPPER。 それは少し圧倒です。 しかし、通知は、ここでの言及だ 私が使うべきヘッダファイル。 余談ですが、このためにとして、 誤解を招く恐れがあり、機能 int型の代わりに文字を使用しています エラーチェックの理由のため。 しかし、私たちは、おそらく来る バック·トゥ·ザ·フューチャーのものと。 しかし、上側の変換に、ここでは、注意してください 可能であれば大文字に文字c。 だから、非常に簡単です。 そして今のは、もう少し具体的にしましょう​​。 それではの一部を見てみましょう 戻り値の下のマニュアルページを参照してください。 返される値は、ということです 変換された手紙の。 またはC、もし変換 不可能であった、 ここで、cは、元の入力である。 どの私はここから知っているから、 アッパーに引数。 だから、これはお持ち帰りは何ですか? 返される値は、ということです 変換された手紙の、 またはc、オリジナルの手紙、もし 変換が不可能であった。 どのような改善そのためにすることができます 私のコードのデザインに作る? うん? 聴衆:あなたは、他を削除することができます。 DAVID J.マラン:私ができる else文を削除し、 だけではなく、else文。 聴衆:あなたは[聞こえない]を削除することができます。 DAVID J.マラン:私ができる 全体のフォークを削除 完全に道路の、他の場合。 だから確かに、私は開いてみましょう これの最終版、 -2を大文字にして、どれだけ注意してください、もし あなたは、セクシー、コードは今なってますが、 その中で、私はいくつかから減少しました わずか4への7行程度、 私が意図した機能 単純に、上部に呼び出すことによって、 私は、sブラケットを渡し、および印刷 アウトプレースホルダ%のCと、 その特定の文字。 今間違いなく、バグがありますが、 バグのまたは少なくともリスク、 このプログラムに。 だから戻って来て 以前のお持ち帰りに、 私はおそらくも何をする中で行う必要があります このプログラムは、それをより堅牢にするために、 それができる方法はありませんように でも、まれにクラッシュする? 聴衆:それがNULLではないことを確認してください。 DAVID J.マラン:それがNULLではないことを確認してください。 だから本当に、このスーパーを作るために 適切な、私のようなものを行う必要があり、 sがNULLでない場合は、 先に行くと、実行 これらのコード行、どの 私はでき、そのようなインデント、 そして、私の近くにブレースを入れ。 2つのアイデアの結束それで良い。 うん? 聴衆:あなたが使用することができます 代わりに、whileループか? DAVID J.マラン:でした 私がdo whileループを実行します? 聴衆:--youを確認するには あなたが実際に[聞こえない]という。 DAVID J.マラン:でした あなたがしDOを使うのか? 短い答え、ない。 あなたがしようとしているため、 別のコーナーケースをご紹介します。 文字列は、長さがゼロである場合。 例えば、私はちょうどヒットした場合 今までZamylaを入力せずに、入力します。 私は戻って、実際にあなたを手にするつもりです 文字列、私たちは最終的に表示されますように、 それは文字も入っていない。 それはまだ文字列ですが、 それだけで、超短いです。 しかし、あなたがしDOを使用する場合は、 あなたは盲目的になるだろう で何かをしよう その文字列については、 そして何もになるだろうんだ。 聴衆:まあ、あなたがした場合は、 S - ながら聞き取れない]を行う DAVID J.マラン:ああ、私は参照してください。続ける ユーザーから文字列を取得する。 だから、短い答えは、あなた 、そして嫌がらせ保つことができる 彼らはあなたにだ文字列を与えるために メモリに収まるほど短い。 もちろんです。 私はだけではないことを選んだ。 彼らは私に、文字列、私を与えていない場合は 欲しい、私はやめるんだけど、私はあきらめています。 しかし、絶対的に、その目的のために、 あなたは絶対にそれを行うことができます。 だから、ライブラリのヘッダファイル、その 私たちは今、これらはここでは、あるに精通している。 標準I / O、CS50.h、string.hの、 ctype.h内では、と、確かに、他のものがある。 皆さんの中に発見した はmath.hでの数学ライブラリ それだけに、今、私はあなたを紹介しましょう このリソースCS50スタッフ、デーヴィン、 とロブとゲイブ特定 一緒に入れている。 それはすぐに上にリンクします もちろんのウェブサイト。 それはCS50参照と呼ばれています。 ちょうどあなたに素早くを与えるためにどの それの味、次のように動作します。 私はreference.cs50.netに行きましょう。 あなたは左手に表示されます 圧倒的なリスト側 Cに付属して機能するの。 しかし、私はしばらくの間、心配している場合、 strlenのようなものについての、 私はそこにそれを入力することができます。 これは、リストを下にフィルター 私は気にだけで何に。 私はそれをクリックするつもりです。 そして今、左側に、 あなたは私たちが望んでいることがわかります より直接的、ヒトである どのように友好的な説明 この関数は動作します。 文字列の長さを返します。 ここでは、ここでどのように概要だだ ヘッダファイルの点でそれを使用、 何機能的に その引数の面で似ています。 そしてここに、返品 文字列の長さ。 しかし、あなたのそれらのためのより快適で、 実際には、より快適なクリックすることができます この内容 ページ、今、変化します 何のデフォルト値であると あなたはmanページを使用して取得します。 言い換えれば、CS50 参照は単純化で スタッフによるmanページの、学生のための。 特に、これらの少ない快適な との間での、あなたがそのよう ラップしようとする必要はありません あなたの心の周りに、率直に言って、 いくつかのかなり不可解な構文 いつかとドキュメント。 だから覚えておく 日で来ています。 だからここに、再び、Zamylaです。 それではだ質問をしましょう もう少し人間にアクセス可能。 されていますチャンのおかげで、 より多くの象を印刷 過去数日間ノンストップ。 私たちは、する機会を持っている 離れてこれらのうちの少なくとも1。 私達はちょうど1ボランティアを得ることができれば 画面に描画するために、最大点灯します。 どのようにここにはどうですか? アップさあ。 お名前は? ALEX:アレックス。 DAVID J.マラン:アレックス。 かしこまりました。 アレックスは、アップ時に来る。 私たちはあなたを見しようとしている ここで画面上に手書き。 すべての権利、はじめまして。 ALEX:ニース、あなたを満たしています。 DAVID J.マラン:すべての権利。 だから、超簡単な運動。 バーがに高くない 今日象を得る。 あなたはにgetStringの役割を果たしている。 そして私はちょうどあなたを伝えるつもりだ あなたが得ている文字列。 そして、あなたと仮定し、 getStringで、呼び出された。 そして、私のような人間は、、あります Zamyla、Z-A-M-Y-L-Aに入力しました。 ただ先に行くと上Zamylaを書く 画面あなたはそれを得ているかのように そしてどこかにメモリ内に格納されている。 いくつかがどうなるかの余地を残して 大丈夫他words--は、続ける。 [笑い] だからZamyla、優れています。 だから今、そのあなたとします getStringで、再び呼び出されます。 そのため、私はでご提供 キーボード、別の名前、ベリンダと。 かしこまりました。 そして今、次回のgetStringです と呼ばれる、私は、ゲイブのようなものを入力する G-A-B-E。あなたは本当に取っている 心臓ランダムアクセスメモリに関する。 すべてを描画している 完全にランダムに。 [OK]をクリックします。 [笑い] ALEX:申し訳ありませんが、私の手書きは悪いです。 DAVID J.マラン:いいえ、それはOKです。 そして、どのようにロブは、R-O-Bに関する。 [OK]をクリックします。 グッド。 だから私はあなたをだろう予想していなかった ちょっとこの方法で物事をレイアウト。 しかし、私たちは、この作業を行うことができます。 それでは、どのようにレイアウトするについて行くんでした メモリ内のこれらの文字アウト? 言い換えれば、私たちが考える場合には この長方形の黒い画面 代表として コンピュータのRAM、またはメモリ。 ラムがちょうどであることを思い出す バイトの全体の束、 バイトは、ビットの全体の束である。 そして、ビットは何とかです 一般に、実装 いくつかのフォームで ハードウェアの電力。 だから、のようなものだ 私たちが話をした階層化 そして今当たり前のことができます。 どのようにして約行きました ここで記述する方法を決める ロブ対ゲイブ対 Zamyla対ベリンダ? ALEX:私はちょうどそれをやった あなたが私に言ったようにするため。 DAVID J.マラン:そして、それは本当です。 しかし、何があな​​たがどこに置く支配 ベリンダの名前とゲイブの名前は? ALEX:何? DAVID J.マラン:[笑] だから、働く、それは大丈夫です。 だから、コンピュータが少しある それよりもより秩序。 そして、私たちはそこに滞在implement--とき 時実際に、私たちだけのためのmoment-- のようなものを実装する コンピュータ内のgetString、 Zamylaはかなりレイアウトされるかもしれない あなたのようにそこに、画面上でした。 そして、通知への鍵は何ですか ここで、アレックスが何をしたか、 ある境界のようなものがあります これらの単語のそれぞれの中で、右か? あなたが書いていない Z-A-M-Y-L-A-B-E-L-I-N-D-A-G-A--B- 換言すれば、いくつかの種類があります と思われる境界の、 ランダム間隔、のようなもの これらのさまざまな単語の間。 ので、しかし、それは、良いことだ 私たち人間は、できるようになりました これらであることを視覚化する 4の異なる文字列。 それだけで一つの配列ではありません 文字の多くの。 だから、コンピュータ、そして、一方、 Zamylaのような文字列がかかる場合があります、 これらの各文字を入れる メモリのバイトの内部。 しかし、その数ははるかに大きい、 もちろん、6文字以上。 RAMの全体の束があります。 だから今後、この 箱のグリッドが起こっている まさにアレックスを表現する 画面上でここにしました。 そして今、アレックス、私たちはあなたを提供することができます 青やチャンからオレンジ色の象。 ALEX:私は青い象を取るよ。 DAVID J.マラン:青ゾウ。 だから、大きな拍手、 ここでアレックスのために、私たちができれば。 [拍手] ALEX:ありがとうございます。 DAVID J.マラン:ありがとうございます。 だから、お持ち帰りにもかかわらず、ということです パターンはちょっとここでは、時間の経過とともに変化し 基板上に、これがあった さまざまな列のうちの境界 アレックスは私たちのためになったこと。 さて、コンピュータ、率直に言って、 同じことを行うことができます。 彼らは一種のウンチでした どこでも、RAM内の文字列。 ここまで、こっちに、 ここでは、ここでダウンダウン。 彼らは、まさにそれを行うことができます。 しかし、もちろん、それがだ おそらくない最高の計画。 右? 私はアレックスにを問い続けた場合 名前を取得、おそらく彼がしたい 多分アップ、ここでいくつかのより多くの下に置く ここでは、最終的には、こっち、こっち こっち。 しかし、もう少し計画と、確かに、 私たちはもっときれいなものをレイアウト可能性があります。 そして実際、それはコンピュータが何をするかだ。 しかし、漁獲量はである もし私が手に次の文字列 Zamylaが何かした後 ベリンダのような、 私たちが書く可能性がある場合を提案 このグリッドに関して、文字b? どこに行くか? Aの右側には、 zは、以下の、A以下の? あなたの最初の本能は何でしょうか? 聴衆:zの下に。 DAVID J.マラン:だからzは下記。 そして、それはきれいだ 簡単な、右か? それは、きちんとしたのようなものだ、それは私たちが何をすべきか 私たちはEnterキーを押したときに、キーボードの、 または電子メールで行う場合 物事の箇条書き。 しかし、現実には、そのコンピュータで より効率的にしようとすると、 と同じくらい確かに詰め込む できるだけRAMにデータを、 ように、すべてのバイトを無駄にしないでください。 あなたが無駄にしないようにするには 任意の画面の不動産。 そして問題は、しかし、ということです 私たちは文字通り手紙を置く場合 bの後、どのようにしようとしている Zamylaの名前が終了する場所を知っている とベリンダの名前が始まる? だから、あなただけの、よく、提案された人間が 基本的に、Enterキーを押します。 以下にそれを置く。 またはアレックスがしたとしてもとして、ちょうど書き始める 前の1つ下の名前、 その1未満、 その1以下に。 これは視覚的な手がかりだ。 コンピュータが別の視覚的な手がかりを持っている、 それは、もう少し簡潔だ。 それは、このファンキーな文字です。 多分あるバックスラッシュ0、 バックスラッシュnを彷彿とさせる、 など、今。 特別なエスケープシーケンス。 バックスラッシュ0の方法です 行内の8ゼロ·ビットを表す。 0000 0000。 あなたはそれを表現する方法がないことです キーボードの数字のゼロをヒット、 アスキーchar型であるため、実際には。 これは、数のように見えるが、 実際に進数です それは、円形を表し グリフ、円形の書体。 一方、バックスラッシュ 文字通りゼロ手段、 私のためにここに8ゼロバイトを置く。 だから、これはある程度任意である。 私たちは、任意のパターンを使用していたかもしれない ビットが、世界の 何年か決定 前、それが表現する メモリ内の文字列の末尾、 ちょうどゼロの全体の束を置く。 私たちはそれを検出することができますので。 今では意味のない文字ん アルファベットはゼロで表すことができる。 しかし、それは、私たちはすでに見てきたOKです 私たちは、最大で最大97に65を使用していること。 私たちは、どこにも取得していない すべてゼロに近い。 コンピュータのメモリ内のベリンダだから 実際にここに行くとしている。 私はちょうど黄色で、それを描いた それに注意を描画します。 そして、あまりにも、このに気付く 完全に任意である。 私は、グリッドとしてそれを描いた。 同様に、RAMは単にいくつかの物理的なオブジェクトである。 それは必ずしもありません 行と列は、それ自体。 それはちょうどバイトの全体の束を持っている 何とかハードウェアで実装。 しかし、ベリンダ私の後であれば ゲイブの名前で入力し、 彼は、メモリ内に、ここで終わるだろう と私は祈る者名に入力した場合には、 例えば、彼はここで終わるだろう。 そして、私は続けることができ でも、複数の名前を書きます。 残念ながら、私はしようとした場合 スーパーロングの名前を書いて、 私は最終的にはメモリが不足する可能性があります。 その場合、のgetStringは、 私達が言ったように、NULLを返しに行く。 しかし、ありがたいことに、少なくともこのビジュアル中 ここで、私たちはそれほど遠く取得できませんでした。 今何素敵なのはこのことです 物事を治療する一般的なアイデア ボックスにされているものとして Cの特徴の代表 や言語の多くは、 配列として知られている。 アレイは、データの別のタイプである。 もし可能ならば、それは、データ構造だ。 本当にそれの意味での構造、 種類の、少なくとも、箱のように見える あなたの心の目の中。 配列は連続している 同一のデータ型の配列、 背中合わせにバックアップするバックアップします。 他の中で、文字列、 言葉は、文字の配列です。 文字の配列。 しかし、それはあなたが持つことができるが判明 物事の束の配列。 実際に、私たちも置くことができます 配列内の数字。 だから形で 私たちは開始するつもりだ このデータを宣言 配列として知られている構造 また、角括弧を使用する予定です。 しかし、これらの角括弧をしようとしている この文脈において異なる意味を持つ。 そして、次のようにのはそれを見てみましょう。 私は開いているとし ここに新しいファイルをバックアップします。 そして、私はages.c.としてこれを保存 そして、私はここで私のフォルダでこれを節約できます。 そして今、私が先に行くつもりです 何かの入力を開始 のような、CS50.hが含ま含める stdio.hの、int型の主空洞。 そして、ここでの内側に、私が欲しい 最初の時代と呼ばれるint型を持っている。 そして、私は取得するためにそれを使用するつもりだ 彼または彼女の年齢のためのユーザからint型。 しかし、このプログラムによって使用されるように意図されている どのような状況のために複数の人、。 私は人々のラインを持っている。 それらのすべては、それらを入力する必要があります おそらくいくつか、私は知らないために、年齢、 競争、またはイベント 彼らが到着したこと。 だから次の人は、私 別の変数を必要としています。 私はちょうど行う場合ので、 年齢がgetIntはを取得、それはだ 壊したり、上書きしようとして 前の人の年齢。 だから、良いです。 だから私の最初の本能 、ああ、大丈夫かもしれないが、 私は複数の人年代を取得したい場合 ages--、のはこのAGE1を呼び出してみましょう int型のage2はint型、int型age3なくGetIntを取得します取得します。 そして今、私が使用するつもりだ ここにいくつかの擬似コードコード。 これらの数字で何かの操作を行います。 私たちは、どのような別の日のために残しておきます 私たちは、そこにやっている私たちのためだけ 一瞬の世話 AGE1、age2、age3約。 残念ながら、私に一度 このプログラムをコンパイルする そして、実際のユーザーの前にそれを置く 基本的に貧しいデザインは何 決定は私が作ったように見える? うん? 聴衆:[聞き取れない] DAVID J.マラン:ええ、 私も試していない どのように多くの年齢層を把握する 私は実際に気にしますか? 私はここで三人よりも少ないがある場合は、 したがって、より少ない3歳、 私はまだ盲目的3を期​​待しています。 神は四人が現れる禁じる。 私のプログラムはたださえ、それらをサポートしません。 だからこの、長い話 短い、良い習慣ではありません。 右? 私は基本的にコピーした コー​​ドを貼り、ちょうど微調整 変数名。 そして、私の神、あなたが持っていた場合、しない3 年齢が、10、または100、あるいは6,500 学部生、例えば。 これは、特にあることを行っていません エレガントなコード、または持続。 あなたがする必要があるとしている プログラムを毎回書き換える 人変更のあなたの番号。 だからありがたい、当社の実際の内 今日のages.cファイル、 私たちは、より巧妙な解決策を持っている。 まず、私が借りするつもりです 、私たちは何度か使用した構築 whileループこれを取得するために、行う 部屋の人数。 私は再び、ユーザーを困らするつもりです そして再び、彼または彼女は私を与えるまで、 正の整数のnの値。 私が使用している可能性があり、最後の 時間のは、正の整数を取得します。 しかし、私たちはそれを持っていない 実質のためなので、私は先に行きました 再は、このアイデアを実装しました。 さてここでダウン、これは新しいトリックです。 27行目では、コメントなど ライン26において、示唆している で配列を宣言する 皆の年齢を格納する。 だから、取得したい場合、しない1 int型ではなく、 2つのintがintの全体の束。 具体的にnは整数であったがnのかもしれない 100である可能性があり、3であること、千かもしれません。 構文は、非常に単純にある たとえば、あなたがどの​​ようなデータタイプをしたいですか? あなたが呼び出すために何をしたいですか メモリのチャンク? あなたは、グリッドを呼び出すために何をしたいですか それが絵画的に次のようになります? そして、ここでは括弧内に、あなたが言う どのように大きなあなたは配列になりたい。 それで以前、私が言ったとき 構文は、ここで少し異なっている 私たちはまだ、角括弧を使用している、 私は配列を宣言していたときに、 内部の数 角括弧手段 どのように大きなあなたは配列になりたいん。 これとは対照的に、とき、私たちは、sを使用していた ブラケット先ほどI、S、文字列、 確かに文字の配列であるが、 あなたは変数を宣言していないとき、 ここでは、このキーワードと同様に、 あなたは、単に取得している 特定のインデックス、特定の その配列から要素。 私たちはそれを知っているならば、残り のこれは簡単です。 新しい場合は私が最初にプリントアウトするつもりです 個人番号iの年齢は何ですか。 私はちょうど人のナンバーワンと言う場合には、 人数2、人数3。 そして私はちょうど算術をやって、 その結果、普通の人のように、 私たちはこのために1から数える プログラムではなく、ゼロから。 それから私は、GetIntでを呼ぶが、私は保存する 年齢の答えは私を囲む。 どの配列内のi番目の時代です。 前回のに対し、私たちが治療したので、 Zamylaの名前の文字としてこれらのボックス、 などがあります。 さて、これらのボックスが表す 32ビット、または4バイト その中で私たちは保存することができます int型、int型、int型。 それらのすべては、再度、 同じデータ型である。 今、私は愚かな何かを、 時間が経過するように、単に このプログラムを書いて正当化する。 そして、ここまで、私は再び反復処理 今から今年言ったアレイ全体、 人ナンバーワンの意志 何か歳である。 その把握する math--私が意味する、この 非常に複雑arithmetic--はありません 私はちょうど自分の年齢に1を追加します。 ただ、もう一度、これを実証する。 ちょうど私は、文字列、複数のインデックス、できる限り だからインデックスは、年齢層の配列にすることができ、 そこにそのような。 だからここで、これは私たちを取ることになるだろう? だから私たちが見る、最終的には、 来る日でいくつかのこと。 一、すべてのこの時間、時 独自のプログラムを書いて、 マリオ、貪欲、信用等を挙げることができる。 あなたは、の名前を入力してきた プログラムと打撃を入力してください。 そして、ユーザーの入力を取得する。 のgetString、getIntはで、 getLongLong等が挙げられる。 しかし、それはCがサポートしていることが判明 何かと呼ばれるコマンドライン 私たちにできるように起こっているの引数、 実際に入力した言葉に取得し、 点滅プロンプトで、 あなたのプログラムの名前の後に。 あなたは、今後日中のSO シーザーのようなもののように入力します、 または./caesar番号13、その後。 私たちは、それがどのように機能するかがわかります。 確かに、中にあるため 問題は、私たちがしている、2セット をご紹介しよう 少し何かへ Ralphieのを連想させる 地図作成の初期の挑戦。 情報をスクランブルする技術。 これは、実際には、非常にある Ralphieがやったことを思わせる​​。 これは、暗号の一例です ROT13は、R-O-T 13と呼ばれるアルゴリズム。 どの単に回転させることを意味 アルファベット13桁の文字。 あなたはそれを行うなら、あなたは今表示されます おなじみのフレーズは、おそらく、何か。 しかし、方法は、私たちが使用するつもりだ これは、最終的に、より一般的である。 Pは、標準版では、2セット あなたは、暗号のカップルを実装します シーザーと呼ばれるもの、Vigenereと呼ばれるもの。 どちらも回転です その何とかあなたの中に暗号、 別の手紙に一文字を回す。 そして、シーザーは超簡単です。 あなたは、あなたが13を追加し、1を追加 または26までのいくつかの数。 Vigenereはそれを上にし 手紙ごと。 Vigenereだから、あなたが表示されますように 仕様で、より安全です。 しかし一日の終わりに あなたが実装されます、Pは2セット、 あなたは両方を使用することが鍵である 暗号化と復号化のために。 回転のプロセスを参照する プレーンテキスト、いくつかのオリジナルのメッセージ、 サイファーテキスト、中にいる 何かが暗号化されています。 そして、再びそれを復号化する。 ハッカーの版で、 その間、あなたはなるだろう 似たようなことを任務と 精神で、どこで私たちはあなたを与えるだろう 典型的なLinux、またはからファイル、 マック、またはUnixコンピュータと呼ばEtsyの 全体が含まれているパスワード、 ユーザ名とパスワードの束。 そして、それらのパスワードはすべて持っている 暗号化された、またはハッシュされて、 これより適切に、話す あなたが仕様で表示されますように。 ハッカー版は挑戦する このような入力を取ると、あなた、 とパスワードをクラッキング。 つまり、考え出す、何であるか 人間のパスワードが実際にあった。 そのため、実際には、パスワードがある 一般的に明確に格納されていない、 一般的なパスワード 推測するのは難しいはずです。 それはよくあることではありません。 そして、私は私たちがしようと思いましたことはある 数分でまとめ 特に一目 パスワードのお粗末な選択 フィルムからあなたが愛情を込めて思い出すことがあります。 されていない場合、あなたは借りる必要があります。 [ビデオ再生] -Helmet、あなたは悪魔、何が起こっているの? あなたが私の娘に何をしているのか? 紹介してくれ-Permit 華麗な若い形成外科医、 ドクターフィリップSchlotkin。 における最大の鼻のジョブの男 全宇宙とビバリーヒルズ。 - あなたの殿下。 -Nose仕事? 私は理解していない。 彼女はすでに鼻のジョブを持ったという。 それは彼女の甘い16存在していた。 - いいえ、それはあなたが何を考えてではありません。 それは、はるかに悪いです。 あなたは私に与えていない場合は エアシールドに組み合わせ、 医師Schlotkinはあなたを与えるだろう 娘は彼女の古い鼻をバックアップする。 - [あえぎ] Nooooooooooooo。 あなたはそれをどこで手に入れたの? - すべての権利。 私が教えてあげましょう、教えてあげましょう。 - いいえ、パパ、ない。 あなたはいけません。 私の愛する右-You're。 私はあなたの新しい鼻を逃してしまう。 しかし、私は彼ら教えてくれません 何で組み合わせ。 - 非常によく。 ドクターSchlotkinは、あなたの最悪を行う。 - 私の喜び。 - いいえ! 待って、待ってください。 私が教えてあげましょう。 私が教えてあげましょう。 -Iはそれを動作を知っていた。 すべての権利、私にそれを与える。 -The組み合わせは1つです。 エーワン。 エーワン。 - 二。 - 二。 - 二。 -Three。 -Three。 -Three。 - 四。 - 四。 - 四。 -Five。 -Five。 -Five。 組み合わせが1つである - SO、 二つ、三つ、四つ、五つ。 それは愚かな組み合わせだ 私が今まで私の人生の中で聞いています。 つまり、もののANのようなものだ 馬鹿は彼の荷物にならない。 あなた、あなたの殿下を-Thank。 [REMOTE CLICKS] あなたは - 何をしましたか? -Iは、壁をオフになっています。 - いいえ、あなたはあなたがしませんでした 映画全体をオフになっています。 -Iすまんすまん、間違ったボタンを押した。 型ウェル、背中にそれを置く! 背面に映画を入れて! - はい、サー! はい、先生。 それでは、アーノルドに行く-LEt。 、グレッチェン是非。 もちろん、あなたが、私が知っているよ このためにあなたを請求する必要があります。 型ウェル? それは動作しましたか? 王はどこにありますか? - それは、私たちの先生を働いた 組み合わせを持っている。 - グレート。 今、私たちはすべての最後の息を取ることができます 惑星Druidiaから新鮮な空気を。 組み合わせは何ですか? - オン、二つ、三つ、四つ、五つ。 - オン、二つ、三つ、四つ、五つ? - はい。 - すなわちは驚くべ​​きことだ。 私は同じを持っている 荷物上の組み合わせ。 のためのスペースボール1を準備する 即時出発。 - はい、先生。 変更-and 荷物上の組み合わせ。 [閉扉SOUND] [ヘルメットに当たっドアCLINK] -Ahh。 [END VIDEO再生] DAVID J.マラン:それはのためにそれだ CS50は、来週お会いしましょう​​。 ナレーター:そして今、ディープ 祈るファーナムによる思考、。 祈るファーナム:C言語でコーディングされる スクラッチよりもそんなに悪い。 printfの、スクラッチは嘘だった。 [笑いサウンドバイト]