>> [音楽再生]
DAVIDマラン：すべての権利。
これはCS50であり、そしてこの 週2の終わりです。
私は私がすることができませんでしたごめんなさい そこにすべての今日はあなたと、
しかし、あなたは非常に良い手にしています。
私が紹介させて CS50自身のロブ・ボーデン。
ROB BOWDEN：そしてもちろん、その後、 我々は、事実の楽しさを確認する必要があり
彼は私たちに垂直に送信したこと ビデオとは、このことを示しています。
>> [ビデオ再生]
>> [音楽再生]
>> [足跡]
>> - このビデオはしませんでした このように見ています。
これを防止されている可能性があります。
縦動画にノーと言います。
>> とき-vertical動画が起こります お使いのカメラ間違った方法を保持します。
あなたのビデオが終了します がらくたのように見えるまで。
>> - [イサキ]
>> はまってより多くの人々が-Thereです 毎日垂直ビデオを作るに。
それは割れないか、または何もないです、 それはまだ本当に悪いです。
2つの異なる種類があります。 VVSに罹患している人々。
最初のグループは扱い 彼らは写真のように撮影する動画。
彼らは、任意の害を意味するものではありません。
彼らはちょうどそれを理解していません あなたが絵を回すことができる一方で、
あなたは本当にビデオをオンにすることはできません。
>> [クラッシュ]
>> - [モンキーSOUNDS]
>> -The他のグループは、人々です 誰が[ピー]を与えることはありません。
>> -verticalビデオ症候群は危険です。
モーション画像は持っています 常に水平方向となって。
テレビでは、水平です。
コンピュータの画面は水平です。
人々の目は水平です。
我々はに内蔵されていません 垂直ビデオを見ます。
>> -Iは、縦動画が大好きです。
>> -Nobodyはあなたを気に。
>> この問題の-if あなたも、放置
4ビデオを示すが開始されます 一度だけの帯域幅を保存します。
>> -Letterboxed縦動画だろう 切手の大きさです。
>> - そしてそれはどこにでも広がっていきます。
ムービー画面が持っています 常に水平方向となって。
縦動画になっている場合 受け入れ、映画館
背が高く、痩せなければならないだろう。
>> - そして映画館のすべてが希望 解体と再構築を取得する必要があります。
そして時間によって、彼らは再構築されました、 ミラクニスは、古いものと醜いだろう。
>> -Birdsはそれらにクラッシュして死んでしまいます。
>> -We'llすべてが堅い取得します 見上げから首。
>> - そして誰もで座っていないだろう 二度と前列。
>> -Georgeルーカスが再リリースされますスター 戦争はスキニー版をagain--。
>> -Iは本当に言うことができませんでした 私が伝えたかった物語。
これは私のために絶好のチャンスでした 新しい技術を試します。
>> ジャークを-You're。
>> モバイルデバイスがために使用され-every時間 記録映像は、誘惑があります。
ただノーと言います。
ジョージ・ルーカスにノーと言います。
古いミラクニスにノーと言います。
縦動画にノーと言います。
>> 誰かがそれをやって見れば - と、言って、 「あなたはその権利ダミーを撮影していません！」
>> [音楽再生]
>> [END再生]
>> [拍手]
>> [AUDIO OUT]
ROB BOWDEN：--simple 暗号化の形態、
基本的に暗号化され そして、秘密のメッセージの復号化。
そこでここでは、非常にシンプルなおもちゃを持っています。
そして、アイデアは外輪です 内輪の周りを回転します。
そして、あなたは私がズーム多分あれば、見ることができます で、それは見ることが難しいですthat--。
しかし、のような、数 1--よく、それは移動しました。
>> 番号1は、文字にマップ 文字にX、数2のマップ
J.信じられないほど難しいです 前方にスキップしないように。
手紙2は、Jにマップ 数3はDにマッピングします
このリングをあなたが与えることができます 誰か、メッセージ1、2、3。
何らかの理由であなたのために 彼らにXJDをお伝えしたいと思います。
しかし、あなたがそれらを与えることができます 数字のいくつかのメッセージ、
彼らはこの指輪を持っている限り、彼ら あなたが言おうとしているものを復号化することができます。
>> だから、これを見たかもしれません 暗号化の具体例
クリスマスシーズンの周りの場合は前 あなたはクリスマスの物語を見てきました。
あなたは見たことがない場合 その前に、そしてちょうど
文字通りでTBSをオン クリスマスイブに、いつでも、
彼らはただ背中合わせにしますので 全体日背中合わせにするために戻っています。
そして、関連するビデオはこれです。
[ビデオ再生]
それがすべてと雑貨に知られて-be ラルフパーカーはここであること
リトルのメンバーを任命 孤児アニーの秘密サークル
そして、すべての栄誉を受ける権利があります 利点は、そこに発生します。
台所戦争アニーに署名しました。
インク中のピエール・アンドレを副署！
栄誉とメリット すでに9歳で！
>> 【ラジオから叫ん]
-いい加減にして。
のは、それを上に取得してみましょう。
私はすべてのことジャズを必要としません 密輸業者や海賊について。
と-listen明日の夜 結びの冒険
黒海賊船の。
さて、それはのための時間です アニーの秘密のメッセージ
秘密サークルのあなたのメンバーのため。
子供たちを忘れないでください、唯一のメンバー アニーの秘密サークルの
アニーの秘密のメッセージをデコードすることができます。
アニーはあなたに依存していることに注意してください。
B2にあなたのピンを設定します。
ここにメッセージです。
12。
11。
2。
-Iは私の最初の秘密会議で午前。
>> -25。
14。
11。
18。
16。
>> -OH、ピエールは素晴らしい声で今夜です。
私は今夜​​のことを言うことができます メッセージが本当に重要でした。
-3。
25。
それはアニー自身からのメッセージです。
誰にも言わないでください、覚えておいてください。
>> -Five秒後、私だけでよ 9の少年の家の部屋
プライバシーとデコードに座ることができます。
なるほど！
B！
私は、次のに行ってきました。
E.は、最初の単語は ""です。
S.今では簡単に来ていました。
U. 25。
それはR.です
-Comeに、Ralphie！
私は行く奨めてきました！
右ダウンして-I'll、馬！
ジー達人。
T. O.」は、必ず " - 何を確認してください？
台所戦争は何でした アニー言いたいですか？
何を確認してください？
>> -Randyが行くようになっています！
あなたが出て来てくださいますか？
>> -All右、ママ！
私は右のアウトになるだろう！
私は今、近づいてきました。
緊張はひどいものでした。
それは何でしたか？
惑星の運命 バランスでハングすることがあります！
>> -Ralphie、ランディのが行くようになりました！
>> 大声で泣くのため、右アウトすること-I'll！
ほとんどそこに！
私の指が飛びました。
私の心は鋼トラップでした。
すべての細孔が振動します。
それはほとんど明らかになりました！
はい。
あなたのオヴァルティンを飲むようにしてください。
オヴァルティン？
安っぽい商業？
クソ野郎。
>> [END再生]
>> ROB BOWDEN：だから、どのようです オヴァルティンは、暗号化に関するものです。
基本的にCS50はちょうどアドバタイズ オヴァルティン、私たちは可能性があり
オヴァルティンのために安っぽい商業なります。
大丈夫。
だから今、実際のコンピュータサイエンス。
月曜日に覚えておいてください、私たちはオフに左 文字列への深いダイビング。
だから我々は扱いました 文字列 "Zamyla。」
そして、我々は認識しました。 我々が扱うことができるという事実
文字のシーケンスとして「Zamyla」。
そして、私たちが学んだことを覚えておいてください ブラケット表記。
だから、これを保存した場合 その後、文字列内の「S」
我々が言った場合のブラケット0、それは希望 手紙資本Zを示します
そして、我々はSブラケット1、と言った場合 最初の小文字のaを示すことになります、
などのブラケット5まで、 これは最後のAを示すことになります。
>> 今すぐことを覚えておいてください この文字列の長さが6です、
しかし、文字列にインデックスがあります 0〜5、それを介してZが続きます。
だから、これは今、大きな画像に収まります コンピュータのメモリの、あなたのRAM。
だから、どこかプログラムがその お使いのコンピュータを実行しています
Zamylaを覚えておく必要があります メモリ内のどこか。
だから私はボランティアを持つことができますか？
はい、お願いします。
そして、あなたの名前は何ですか？
>> DEAN：ディーン。
>> ROB BOWDEN：ディーン？
、ディーンはじめまして。
だからここに来て、 我々はあなたが描く必要があるとしています
メモリの私たちの素敵な粋なレイアウトに。
今、私はメモリと考えたいです バイトの1つの長いストリップとして、
ちょうど表示の目的のために我々はよ ちょうど、上から下へ、左へん。
OK？
>> だから私は、表示するつもりです Getstrings.cをprogram--。
だからこのすべてのプログラムです やって4つの文字列を要求しています
を持つユーザーからの GetString、次に印刷
何でも、最初の文字列が入力されました。
我々は4を介して2つを無視しています。
OK。
だからこっちnow--時 私の最初の要求のS1。
だから、コンピュータです。
そして、あなたはのGetStringを実施しています。
ですから、文字列からの要求します 私、私は、[OK]を、ディーンを言います。
「ディーンを。 "という文字列を与えます
>> だから、どこかのメモリでは、 覚えておく必要があり、「ディーン」を
だから、どこかのメモリに書き込みます。
パーフェクト。
OK。
だから今、私たちはとs2います。
S2があることを行っています GetStringに要求。
だから私は、文字列を入力するつもりです。
私は入るつもりだ」ハンナを。」
だから、どこかでメモリに「ハンナ」と入力します。
うん。
-H。
>> [OK]を、今S3。
そして、それは別のことになるだろう GetStringに要求。
そして今、「マリア」と入力します。
大丈夫。
そして最後があります GetString、S4に要求。
だから、私は知りません。
どのように私たちは一緒に行くについて 国教廃止条例反対論。
だから、メモリにそれを入力してください。
うん。
だから「ロブ」を行います
>> OK。
やった、なぜだから今explain-- あなたはこれらのスペースを残して？
あなたはこの空白を持っていないのはなぜ ここ、ここ、とここまでのスペース？
はい。
私が行くときに気付きます もしそうであればs1--印刷する私たち
「ハンナ」の実行を持っていました 右に横に「ディーン」
私たちはときに知っていますか 文字列「ディーン」が終了？
だから、文字列s1が持っているかもしれ印刷 ちょうど印刷された「DeanHannahMariaRob」
それは任意の手掛かりを持っていない場合 「ディーン」が実際に終了したときの。
>> 大丈夫。
だから我々は、実際にメモリ内の方法 文字列のこの端を表します
バックスラッシュゼロです。
したがって、この空間は、私たちが望んでいたまさにです。
これは、バックスラッシュゼロにする必要があります。
これは、バックスラッシュゼロになります これはバックスラッシュゼロになります。
そして、あなたは素晴らしい賞を持つことができます 完璧なボランティアであることのため。
ストレスボールを持っていこう！
>> OK。
したがって、この文字のバックスラッシュゼロです どのように我々は、文字列の終わりを示します。
それはどのようにするとき、任意のプログラムです 文字列を印刷したいです、
それはhow--我々が学んだ覚えています STRLEN機能先週？
文字列の長さは？
これは、文字列の長さが可能である方法です 文字列がどのくらいかを決定。
それはちょうど反復し続けます 文字を超えます
それが見つかるまで ゼロの文字をバックスラッシュ。
だから、重要なことは実現します バックスラッシュゼロの文字について
それが表現されています ビットがすべてゼロによります。
だから、これは別個のものであることがわかり ゼロの文字から。
あなたは覚えているのであれば、ゼロ文字、 彼は最後に与えた例では、
講義のどこに文字マップ 65大文字のAマップのようto--。
97にマップを小文字。
小文字のbが98になります。
だから数0マップは私にはありませんto-- 私の頭の上をオフに知っています。
44または45。
その領域内のどこか。
>> だから、文字0は実際の数です。
しかし、バックスラッシュゼロ すべてのゼロ・ビットにマップされます。
それで区別があります バックスラッシュゼロの間、
これは私たちがヌルターミネータを呼ぶことにします。
区別があります バックスラッシュゼロと文字はゼロ。
>> 大丈夫。
だから、文字列の詳細少し話。
それでは、私たちはここを参照してください、これはどのようにあります それはメモリに配置されます。
配列のような文字列のため、このアイデア characters--の公式コンピュータがそう
シーケンスのsciency用語は、配列です。
だから我々は文字列を呼び出します 文字の配列。
その他のデータは、実際に存在します 私たちは外の配列を作ることができるタイプ。
>> だからこれをやる気にさせる、例を見て。
私たちは、私はよages0.cそれを呼ぶことにします 私たちのテンプレートをコピーして貼り付けます。
OK。
そのため、このプログラムで私たち やってみたい時代をつかむです
コー​​スで3人の学生の。
だから、私たちが知っているint型age-- そして今私は0を言うつもりです。
だから、AGE1を言いたいかもしれないが、 目的のために我々は非常にすぐに表示されます、
私はint型のage0がGetIntでに等しいと言うでしょう。
GetIntでの同じ呼び出しそう 私たちは、私を使用してきたこと
プロンプトすることが起こるはありません 「私の年齢を与える。」と言っ
しかし、単にそれを要求します。
>> そしてAGE1はGetIntでに等しいです。
INT age2はGetIntでに等しいです。
だから、再び、3人の学生が、 最終的には変数のインデックス
age2を通じてage0です。
OK。
したがって、このプログラムは何でもします 我々はage0、AGE1、およびage2にしたいです、
しかし、このプログラムは、最終的に 3人の学生のために働きます。
>> OK。
だから今私は4人をしたい場合は？
まあ、私は戻ってする必要がありますするつもりです 私のコードにコメントを変更し、
そして今、我々はint型を持っています age3はGetIntでに等しいです。
OK。
だから、誰がここでの問題を見ていますか？
何が問題ですか セットアップのこの種で？
うん。
だから我々は作成しています 各学生のための変数です。
今では動作しますが、 最終的にどのような今私の場合
私は歳をつかむしたい」と言います 8学生や16学生
またはしかし多くの学生の CS50の学生数百人
またはキャンパスで何千人もの生徒 または世界の人々の十億？
だから、最終的にこれは、持続可能ではありません。
あなた自身がコピーを参照してくださいいつでも このようにして貼り付けコード、
あなたは、一般的に感じるはず よりよい方法があること。
>> 私たちが紹介するところこれがあります 配列宣言。
ですから、配列を宣言するとき、 これは何を一般的なフォーマットであります
見えるように起こっています。
私たちは、タイプを​​言おうとしています。
し、我々はするつもりです その配列の名前を付け、
我々は、任意の変数を定義すると同じように。
そして、最終的に我々が使用しています このブラケット表記再び
しかし、異なるコンテキストで どのように我々は、以前のそれを使用していました。
>> そこでここでは、これは通常のようになります 私たちが見てきた変数宣言。
だから我々は前にint型のxセミコロンを見てきました。
さて、私たちは何かを見るかもしれません int型のxブラケット5のように。
そして、にこのアイデアを置きます 我々はhave-- GetIntでプログラム
私たちは実装することができます 同じように、この。
>> のがCSで言ってみましょう、我々が使用する傾向があります 何かの数であるn。
そこでここでは、するつもりです 4学生を格納します。
そして今、我々はint型の年齢を言うことができます ブラケットはかなりそれを取得しませんN-- yet--
4人の配列を宣言します。
だから、これはどのように見えますか メモリはこのようになります。
これをクリアします。
そして、私たちはどこかに必要があるとしています memory--に私はこれをあげますよ。
>> だから、どこかのメモリインチ
1 2 3 4。
我々は、行の4つの整数を持っています 4つの整数のこの配列のために。
そこで、現在、何です これらのボックスのいずれかのサイズは？
うん。
これは、4バイトです。
これは32ビットです。
だから今、これは異なっています 我々配列から
、以前の文字の配列を見ました。
文字列の各ボックスは、1バイトのみでした 文字は1バイトだけだからです。
しかし、整数の配列で、それぞれ ボックスには、順番に4バイトである必要があります
全体の整数を合わせて。
だから、これは何であるかの配列 4 int型は次のようになります。
>> そして戻ってコードに。
今、私たちは実際に格納したいです その配列に整数。
だから今、これは非常に、非常に、非常にあります いくつかの点であろう一般的なパターン
筋肉の記憶になります。
だから私は0に等しいint型。
I N未満。
私プラスプラス。
年齢層は、私がGetIntでに等しいです。
>> したがって、このループのため、この形式は、 あなたは非常に慣れる必要があります。
だから、これは、一般的に、どのようになります ほぼすべての配列を反復処理。
今、この種のに気付きます なぜ最初から説明します
我々は、ループがintのために行くために持っていませんでした 私は10以下、1に等しいです。
から始まることである理由 ゼロは、配列でも、この作業を行います。
だから、配列はゼロが索引付けされます。
この配列の長さが4である場合、 インデックスは0〜3です。
>> したがって、最初を通して このforループの反復
私たちは年齢を設定することになるだろう GetIntでの呼び出しに等しいブラケット0。
だから私は起こったものは何でも キーボードで入力します。
2回目のパスでは、我々はしています GetIntでのAGE1等しく設定します。
第3のパス、age2。
最終パスのage3。
だから、ループの最初のパスであれば 私は、キーボードで数字の4を入力してください
その後、我々はここで4を挿入します。
私が入力した2回目のパスであれば 50、我々はここで50を出してあげます。
第3のパス上の私はかもしれません 、負の1を入力し、負の1
そして最後に、私は0--を入力した場合 今、これはインデックス3であったことを覚えています。
>> 我々ループバックした後、私はあります 4にインクリメントされる予定。
私はもはや4はn未満ではありません。
そして、我々はループから抜け出します。
だから、これの何が問題でしょうか？
[聞こえませんか]？
聴衆：[聞こえません]
>> はい。
だから、配列には4つだけの場所を持っています、 これは指数0〜3のようにことを意味します。
これが事実であれば、私はそうだろう いくつかの点で値4をとります。
年齢層4が設定されます こっちであることを起こるものは何でも
私が言っているものに、6を入力してください。
それが6にこれを設定することがあります。
>> しかし、我々はここで終わったのか分かりません。
これは、メモリではありません 私たちはへのアクセスを持っていました。
だから、から覚えていれば 前回の講義、
彼はZamylaの値をプリントアウトして、 ある時点で、彼はこの分割を打ちます
障害が発生しました。だから、おそらく見れます あなたのような多くのセグメンテーションフォルト
問題セットの一部を実装しています。
しかし、これは方法の1つです あなたは、セグメンテーションに出会うことができます
あなたがアクセスして起動すると、故障 あなたがすべきではない方法でメモリ。
だから我々は、へのアクセス権を持っていませんでした この場所は、これはバグです。
>> だから、これは良いです。
今まだ小さいがあります このコードの問題を修正しました。
そして、それは私たちがしていることを、基本的です まだ4人で立ち往生。
今、私は8学生を使用したい場合は、[OK]をクリックします。
それは、その大したことではないのです。
私は、中に入っ変更することができます コメント、およびnに変更します。
さて、これは8の学生で動作します。
私はこれをコンパイルして実行した場合 これは、それが表示されme--
それは8のための整数を要求します 学生とそれだけで動作します。
しかし、それはする必要があるため、理想的な未満です プログラムごとに単一の時間を再コンパイル
私は、学生の数を変更したいです 私はのために年齢を入力すること。
>> だから、最終的な改善に 我々はhere--参照してくださいよ、この、我々はしています
人々の数を要求するだろう。
ここでは、番号を持っています 部屋の人々の
または部屋の人々のいずれかの年齢層。
しかし、私たちは番号を要求するつもりです ユーザーから部屋の人々の。
だから、これはまったく同じDO-ながらです 我々の前に見てきたループ。
それはまったく同じです 行う-whil​​eループいるあなた
問題セットに実装されてもよいです。
だから限り、彼らがしているよう Nを1未満に入ります、
そうであることをそこに持っています 客室内に少なくとも一人。
限り、彼らはしているよう Nを1未満に入ります、
その後、我々は再び尋ねておくつもりです。
番号を入力してください 部屋の人々の。
さて、かつて私たちは番号を持っています room--の人々の
私はそこにそれを入力します この部屋には200人です。
そして、ここに至るまで、私たちは来るつもりです 大きさ200の配列を宣言します。
我々はだ配列を宣言しています 200年齢を保持するのに十分な大きさ。
ダウン来て、それはループのためです あなたは非常に慣れるということ。
したがって、この配列の繰り返し処理、 それぞれの場所への割り当て
その配列内の整数であり、 その後、最終的にはここではしています
ただ繰り返し処理の例を取得 そのアレイの上、値を代入するのではなく、
しかし、値にアクセスします。
>> だからここの上に我々は、我々を参照してください 今から一年、言っています、
人の％iは、私歳％になります 最初の％iはプラス1です。
だから私は、このインデックス変数です。
2番目の％iがあることを行っています 年齢配列プラス1に格納された値。
したがって、このプラス1は、私たちがしているという理由だけで このプラス1をsaying--、年齢私プラス1。
このプラス1は、私たちがしているという理由だけで 今の人から今年、言っ
この古いとなります。
>> では、なぜこの私プラス1はありますか？
我々はそこにプラス1を持っているのはなぜ？
うん。
はい。
だから、配列はゼロにインデックス化され覚えています。
だから、我々はこれを印刷する場合 ただ出力を読むために誰か、
その後、おそらく彼らは何かを見たいです 人1、人の数1のように、
20歳になります。
人の数2は15歳になります。
彼らはむしろ人を見ていないだろう 数字のゼロは15歳です。
>> だから、これをコンパイルしてだけで何を見て それはいくつかのスペースを作成しますlike--見えます。
年齢のコンパイルを行います。
年齢を実行します。
私たちは部屋にいる人の数を参照してください。
だから私はそこにあると言うだろう 部屋に3人。
人のナンバーワンの時代、 それでは、15、20、25を言ってみましょう。
そして今、私は今年から言いますよ 今、彼らは16、21、26となります。
それでは、これはで動作することを見てみましょう 3に等しくないN。
私が言うのであれば、人々の数は、5、1です 2個、3個、2個、一今から年
彼らは、2、3になるでしょう 二歳4個、3、。
だから私は、同じようにできました 簡単にn個万もしています。
今、私はかなりのためにここに座っされます しばらく年代に入るが、これは動作します。
>> だから今、メモリ内のどこかに、私たち サイズ万の配列を持っています、
そう最終的には40,000 バイト、そこにされているので、
これらの整数のそれぞれについて、4バイト。
だからの配列があります サイズ万どこ我々はできます
それらの1万人の年齢を格納します。
大丈夫。
このいずれかのについての質問？
うん。
あなたが負の数を与えた場合はどうなりますか？
それでは、何が起こるか見てみましょう。
この特定のcase--番号でそう 部屋、負の1の人々の。
それはそれを拒否し、 ここに私達は起こるので、
もしnがあるという事実を処理します 我々は再び尋ねるつもりだ未満。
あなたが宣言しようとした場合 負のサイズの配列、
それは一般的に動作しません。
>> それでは、試してみましょう。
それでは、どのような無視しましょう nの値は、それらの入力
ちょうどint型年齢マイナスのものを言います。
それもコンパイルする場合を見てみましょう。
私はわかりません。
いいえ。
だから年齢はとして宣言されています 負のサイズを持った配列。
だから、前払いでは、アレイはできません認識します 負のサイズであり、それを拒否します。
今、我々は処理しませんでした場合 このDO-whil​​eループが正しく、
我々はチェックしていなかった場合 N未満である場合1--
ちょうど私達を言わせて で、このすべてを持っていませんでした
その代わりに私達はちょうど整数をつかみます。
その整数が何であるかに関係なく、 私たちは、そのサイズの配列を宣言します。
>> だから、コンパイラができません おそらく今文句を言います。
私はthis--コンパイルする場合 ので、文句を言うことはできません、
それは私がいることを知ることができないので、 負の数を入力して行きます、
これは無効である可能性があります。
すべてのためにそれは私がかもしれないが、知っています 正の数を入力し、
これは完全に有効です。
私は負の1を入力すると、だから私は想像します 部屋の中の人、セグメンテーションフォールト。
>> じゃあ良いよ。
それでは、ちょうどこのバックを追加してみましょう それはもともと何だったか、それを維持します。
だから年齢を作ります。
今、私は試してみたい場合 負のようにしてみましょうage--
部屋に5人がいると言います。
人のナンバーワンの時代 負の4人である3
OK three--人は、ゼロです。
そこでここでは、年今から、人の数 一つは負の3歳になります。
だから、おそらく意味がありません。
しかし、それは見てという理由だけです 私たちがやっているコードをすべて
GetIntでを要求しています。
>> 今、私たちが持っていた場合 GetPositiveInt機能
または私達はただ単にこれを行っていました そこに同じwhileループの並べ替え、
これは完全に正常に動作します。
しかし、この特定で 場合、私たちはしません
負の値を扱うことが起こります。
アレイに関する他の質問？
OK。
>> だから我々は今の配列を見てきました。
そして、我々は使用する必要があるとしています コマンドライン引数については、この。
そこで問題にtwo--設定 私はあなたの多くを知っています
それでも問題セットで作業する可能性があります 1が、問題は、2つの来ている設定しました。
問題は、2つを設定するには、しようとしています 文字列、配列を扱うする必要があり、
そして、コマンドライン引数。
>> だから、コマンドライン引数は何ですか？
さて、あなたはここでダウンして見ることができます 正確に何のために少しお誘い
開催される予定。
我々は、int型メイン、INC ARGCを参照してください 文字列ARGVブラケット。
したがって、最初のが解釈してみましょう 何それが言うことをしようとしています。
[OK]を、今。
>> だから、コマンドラインであなたがすべきです これらのコマンドのいくつかに慣れます
今、あなたはおそらく実行しました 前の端末でCD。
だから我々は、CD PSET1を言うならば、 あなたはそれがすべきことを知っています
PSET1ディレクトリに変更します。
>> 今、あなたは決してないことがわかりました 前に、このようなプログラムを書いて。
あなたが書いた各プログラム、 あなたは、マリオをスラッシュドット、たとえば、実行します
ドットは貪欲スラッシュし、それを 入力を求めるプロンプトを表示することがあります。
さて、それは何ではありません ディレクトリ変更はありません。
CDを実行すると、それはその後、言っていません あなたは、CDにどのディレクトリをにしたいですか？
代わりに、あなただけの、CDのPSET1を言うと、 それだけでPSET1ディレクトリに入ります。
>> だから同じように、私たちは他の例を持っています。
こんにちは作ります。
あなたが作る実行すると、それはその後、言っていません どのプログラムあなたがしたいと思いますか？
あなただけでは、と言います コマンドラインは、ハローを作ります。
>> 移動は別の例です。
私たちが移動している。この1 1つ上のディレクトリにファイルmario.c。
だから今、私たちはこの例を知っています 私たちは実際には2つの引数を渡しています。
最初の引数としてmario.cがあります、 ドットドットは二番目の引数です。
そして、あなたが作る実行したとき、あなたは 本当に長いコマンドを参照してくださいline--
本当に長いコマンド コマンドラインで印刷。
だから、長いこれをcommand-- それだけの短い部分です、
しかし今、私た​​ちは3を持っています コマンドライン引数。
ドットダッシュゼロ、こんにちは、とのhello.c。
>> したがって、これらは、コマンドラインです 引数、引数
あなたがで渡していること それようにコマンドライン
プロンプトが表示されている必要はありません あなたがプログラムを実行すると。
それはイライラするだろうというときであれば あなたは、OK」、それは言っ打ち鳴らすを実行しました
これprogram--します ファイルがコンパイルされていますか？
hello.c。
どのようなフラグはあなたでしょう 入力しますか？ダッシュO。
あなたは何をしたい 呼び出されるファイル？
こんにちは。
いいえ、あなただけの打ち鳴らすを実行します こんにちはOのhello.cをダッシュ​​。
>> だから、戻ってこれで探して。
今argc-- argcが引数の数です。
これは、コマンドラインの数です 引数は、コマンドラインで入力。
まあ、技術的にargv-- vが、ベクトルを表します
基本的に配列を意味します。
しかし、あなたはそれを無視することができます。
Argv--我々は、文字列ARGVを持っています そう、文字列ARGVブラケット。
だから、これは別の形で あなたが前に見ていないブラケット。
だから我々が見てきたブラケット 我々が言った表記法、
以下のように、文字列sはZamylaに等しいです。
Sブラケット0は、文字にアクセスするZ.
>> また、ときに括弧を見てきました 我々は、int型の年齢ブラケット5と述べました。
それはサイズ5の配列を宣言しました。
だからここのバージョンです ブラケットは、我々は前に見たことがありません。
文字列のargvだから、この種のこと 完全に精通しているであろう
それは単なる文字列であることを。
今ブラケットが示します これは配列です。
だから、文字列ARGVブラケット手段 そのargvが文字列の配列です。
今技術的に文字列 文字の配列です。
だから、これは今配列です 文字の配列の。
しかし、それは考えることをはるかに簡単です この文字列の配列だけのよう。
>> なぜブラケットを空にすることでしょうか？
同様に、なぜ我々は言うことができません、 ブラケット5、ブラケットのn？
うん。
私たちはどのように多くの知りません 入力があるがあることを行っています。
だから私たちは打ち鳴らす例を見れば、 我々はhello.cのハローO打ち鳴らすダッシュを言います。
この特定のケースでは、そこに発生します 3つのコマンドライン引数であることを。
だからbrackets--は、我々が表示されます 第二に、それは3ではないでしょう。
それは技術的には4になります。
しかし、大かっこ、私たちは希望 3がある、と言います。
しかし、今、私たちは動きを見ている場合 mario.cドットドット、括弧
我々は彼らに2を入れたいと思います。
>> そして、そのコマンドがたくさんあり​​ます コマンドラインの可変数を持っています
引数を指定します。
それでは、このバージョンの ブラケット表記法を示し
ARGVは、文字列の配列であるということです。
しかし、我々はどのように多くを知りません 文字列は、その配列です。
そして、どのように我々は、その後どのように知っています 多くの文字列が配列されていますか？
それが全体のポイントのARGCです。
argcがargvのはどのくらいを教えてくれる。
>> だから、最後は中保つために 心は技術的に、ということです、
コマンド自体は1としてカウント コマンドライン引数の。
だからCDのPSET1、2があります コマンドライン引数。
自身でプログラム、CD、その後、 それの実引数の一部、PSET1。
あなたがこれまで書いてきた任意のプログラム ドットargument-- 1コマンドラインを持っていました
マリオを大幅に削減。
それが唯一のコマンドライン引数です。
>> だから今打ち鳴らすを見て こんにちはOのhello.cをダッシュ​​。
だから、argcが何ですか？
4。
だから、argcが4です。
クランので、ARGVブラケット0が打ち鳴らすです。
ARGVブラケット1は、ダッシュ0です。
ARGVブラケット2はハローであり、 ARGVブラケット3はhello.cのです。
[OK]を、ので、この上の質問、その後、我々はよ いくつかのプログラムの例を見てみましょう。
>> OK。
だから我々はhello3.cを見てみましょう。
だから、これはから理解しておく必要があり 最初のCの例のいずれか
我々はこんにちは、私たちは言うだろうどこに持っていました 世界が、今、これは、より一般的です。
そこでここでは、挨拶されています ％sのバックスラッシュn個のARGVブラケット1。
Notice--ので、この時点までまで、これは どのような私のテンプレートファイルは次のように見てきました。
私はint型メイン（ボイド）を有し、その後、私は希望 主な機能に何かをします。
今の代わりに、一度私たちは扱っ開始します コマンドライン引数を指定して、
我々は、状態する必要があります メインの異なる形。
>> だからhello3を見て 再び、主が起こっています
int型のargc now--二つの引数を取るために、 コマンドライン引数の数、
文字列ARGVブラケット、実際の 文字列は、コマンドラインで入力。
だから私はそれを変更するつもりです その事実を反映するためのテンプレート。
今、あなたが書く時はいつでも プログラム、あなたがいない場合
すべてのコマンドラインを取る必要があります 引数は、そしてちょうどint型メイン（ボイド）を使用します。
しかし、今あなたが書いているとき コマンドライン引数のプログラム、これ
あなたは問題のためにやっているつもりです 今あなたが実行していることをtwo--設定
取る必要があるプログラム コマンドライン引数、
あなたは、このフォームのメイン持っている必要があります。
>> だからhere--これは大きな使い方です コマンドライン引数の。
だからARGV 1を印刷します。
[OK]それでは、コンパイルしましょう このプログラムを実行します。
hello3を行います。
コンパイルします。
ドットはhello3スラッシュ。
そしてのは、言わせて "ロブを。」
ロブこんにちは。
私が言う場合は、「ハローマリア、「ハローマリア。
マリアこんにちは。
ハンナはまだこんにちは "と言います マリア、「私はしませんので、
私たちのargv 2を使って何をしています。
ARGV 2は現在、「ハンナ。 "となります
argcが3になります。
私はこれをしなかった場合はどうなりますか？
だからヌルこんにちは。
>> 彼は簡単に事実に触れ その、技術的には、のGetString
nullを返すことがありますが、私たちは得るでしょう より多くのものをヌルへの多くは実際にあります。
しかし、の問題としてそれを取ります いいえは、一般的に不良であるという事実。
私たちは、もし何か間違ったことをしました それは「こんにちはヌル」を印刷しています
そして、その理由は、我々がやりました is--よく間違って何か、
私はドットスラッシュhello3を実行したとき、argcが1でした。
だから、ARGVの長さは1であったことを意味します。
配列の長さが1である場合、 唯一の有効なインデックスはゼロです。
ので、ここでargvの1が外にあります この配列の範囲。
それは私がしようとしたときに前と同様でした 配列の最後の外に6を格納します。
だから私は、何かにアクセスしようとしています ARGVカウントの外側に、
我々はヌル取得しています。
>> のだから、より良いバージョン この、改善、
明示的ARGCをチェックしています。
ARGCが2に等しいのであれば、それは我々が実行されたことを意味します ドットスラッシュhello3ロブのようなもの。
そして、それは「こんにちはロブ」を印刷します
argcが等しくない場合 2、それはちょうど起こっています
あなたが入れたものは何でも無視します コマンドライン引数で
コマンドライン引数として。
あなたはまったくを入れていない場合、または、それはです ちょうどそれを無視して、言うつもり、
"こんにちは。"
>> だから、これをコンパイルします。
hello4を行います。
そしてhello4を実行しています。
それをこのように実行すると、 何を印刷すべきか？
"こんにちは。"
こんにちは。
何hello4ロブは？
「こんにちはロブ。」
そして最後に、こんにちはロブマリア 「あなたhello "をもう一度だけです
あなたが本当に入力されていませんので、 それが期待何か。
あなたはより多くの名前を入力し それは扱うことができるよりも、
それだけにデフォルト設定 こんにちはあなたの行動。
これに関する質問は、だから？
または、コマンドライン引数？
>> [OK]を、そうで見てみます 使用してのカップルより多くの例
コマンドラインは、最初のarguments-- 我々はダッシュ1ドットcをargvをしています。
だからコメントは何を与えます このプログラムは、やるべきこと。
しかし、ループのためにこのnow--気付きます これは、正確なパターンに一致
私は前に言っていました。
私達はちょうどことが起こります ARGCを使用しての代わりに、N。
今argcが本当にnです。
これは、argv配列の長さです。
だから、ARGVを反復処理されています 配列のprintf-る各ARGV値を。
>> 私はこれを行うのであれば。
ARGV 1を加えます。
これは、コンパイルされます。
ドットはARGV 1を大幅に削減します。
ただ、この、それを実行しています プリントはスラッシュARGV 1ドット
それは、コマンドラインのみだったので、 プログラム名をargument--。
常にleast--であるでしょう argcが、1より小さくすることはできません
少なくとも常に存在するので、 実行するためのプログラム名です。
だから、ARGV 1ロブは1 ARGV印刷されます して、新しい行に「ロブ。」
>> 最初の反復でそう このループの、iが0です。
ARGV 0は、プログラム名です。
ドットはARGV 1を大幅に削減します。
そしてARGV 1は私の最初のものです ロブでコマンドライン引数、。
この時点で、我々はARGCに等しいです。
我々は、ループから抜け出すと私たちは完了です。
だから、これは任意のために動作します コマンドライン引数の数。
それはARGV 0を出力します注意してください、ARGV 1、ARGV 2、ARGV 3、ARGV 4。
そして何ARGV 5はありません。
argcが5に等しいです。
だから私は5に等しいでargc--で、 我々は、ループから抜け出します。
OK。
我々の前にその上の質問そう より複雑な例を見て？
>> だから2はargvを。
大丈夫。
だから我々はまだ印刷しています コマンドライン引数。
しかし、今私たちが持っているに気づきます forループをネストされました。
これは何をしているのですか？
だから、最初のループしています まさにそれは前にしました。
我々はまだ以上のループ処理しています 各コマンドライン引数、
しかし、今この第二loop--我々はしました また、前にこのような何かを見たこと。
彼は繰り返し処理されたとき Zamylaは、Z-A-M-Y-L-Aをプリントアウトします。
だからint型jのこの第二のループに等しいです 0は、n個のargvブラケット私のstrlen関数に等しいです。
>> それでは、最初のために考えてみましょう the--のは、見てみましょう。
それでは、どのようなコンピュータがだと思うしてみましょう 私は点としてこのプログラムを実行した場合の対処
ARGVダッシュ2を大幅に削減。
だから私は、その後、このコードを実行した場合 argcが1に等しいことになるだろう。
そして、文字列のみがありますargv-- ARGVに一つの指標になるだろう、
それはドットに等しいことになるだろう 2--プログラム名をARGVを大幅に削減します。
>> [OK]を、今私は、私未満、0に等しいです 1、私プラスプラスのint jが0に等しいため、
Nでので、ARGVブラケット0のstrlen関数に等しいです このループの最初の繰り返し。 ARGV
ブラケット0は、ドットスラッシュARGV 2です。
だから、その文字列の長さは何ですか？
まあ、-R-G-Vダッシュ2スラッシュドット。
だからのはstrlenは8になります。
だから、jは0に等しく、nは8に等しいです。
限りjが8未満、Jの++であるとして。
ことで、私たちはすることになるだろう 単一の文字を印刷します
私はJを一括ARGVブラケットです。
>> だから、私だけはゼロです。
我々はまだ1つしかありません コマンドライン引数。
その最初の反復で ループのための、私たちはしています
印刷になるだろう ARGVブラケット0ブラケット0。
そして、jがインクリメントしようとしています。
そして、我々は、印刷しようとしています ARGVブラケット0ブラケット1。
そして、ブラケット0ブラケット2 ARGV。
>> だから、これは私たちの最初の出会いです 多次元配列の。
私が言ったことを覚えておいてください以前 そのARGVは技術的です
文字の配列の配列。
だからここに私は何かのように言っている場合 文字列sは、ARGVブラケット私に等しいです
そして私は、S、と述べブラケットJ、この 同じことを達成することになります。
さて、あなたは前のブラケットJを見てきました。
それはちょうど、j番​​目のアクセスです この文字列の文字。
だからこれで、我々が得ています i番目のargvのj番目の文字。
>> それでは、この最終的に出力をすべきか？
ARGV 2を行います。
これは、コンパイルされます。
ドットは、argvの2を大幅に削減します。
「ロブ・マリア・ハンナ、 " そして、私たちにいくつかの余地を与えます。
だから我々は、これが出力されていることがわかり 独自の行とスラッシュにドット
独自の行に独自の行とに。
これは、各プリントアウトです 個々の文字
各コマンドライン引数の。
そして、それらの間で、 このため、新しい行の
我々は、ここでダウンして印刷しています それらの間には、新しい行を印刷します。
>> だから、これは次のようになり 前のargvダッシュ1、
それぞれを印刷します コマンドライン引数、
しかし今、私た​​ちは、印刷しています コマンドライン引数
し、各繰り返し処理 各コマンドライン引数の文字
この出力を取得します。
OK？
これに関する質問は、だから？
>> もう一つ注意すべきは、ということです コマンドラインarguments--
ので、彼らは、スペースで区切られています あなたは自然にそれらがあることを期待します。
だから、文字列はスペースを含めることができます。
それは超重要ではありませんが、私の場合 3番目のコマンドライン引数を望んでいました
私は、その後、その中にスペースを持っています このような何かを言うことができます。
OK？
だから、これは今も3つだけを持っています コマンドラインarguments--ウェル4。
ドットがARGVダッシュ2スラッシュ、ロブ、 マリア、そしてハンナブルームバーグ。
OK。
このに関する質問？
>> 特別なことは何もありません スペース文字程度。
それはちょうどことであることを起こります コマンドラインは、空白文字を扱います
あなたはそれぞれの引数を区切る方法について説明します。
大丈夫。
それでは、問題のセット あなたがするつもりtwo--
秘密鍵暗号方式を見て。
だから、その例と同様に 私たちは、クリスマスの物語から見ました
あなたには、いくつかの実装することになるだろう メッセージを所定のアルゴリズム
あなたができるようにするつもりです そのメッセージを暗号化します
その秘密とその唯一の誰か キー、そのデコーダリングと、
復号化することができるはずです。
>> だから、標準版です。
あなたが実装することになるだろう 2つの異なるバージョン。
あなたが見てみてしまった場合 ハッカーで、今Edition--の
我々が提供するつもりです あなたのこのような文字列、
これは暗号化されたパスワードを表します。
だからあなたの目標は、把握することです 復号化されたパスワードは何ですか。
さて、これは実際にどのようなパスワードです コンピュータの多くに格納され、
そして、それはちょうど、これを保存します 文字のランダムな文字列。
あなたが取得する方法を把握する必要があり 文字のこのランダムな文字列から
元のパスワードが何であったかを。
>> そして最後に、この後の 問題あなたは、必要があります設定
これが何を意味するか理解することができます。
だから、復号化する方法を学習します ランダムな文字列のこの種。
同様に、あなたは週から覚えていれば 0は、次のURLを見ている可能性があります。
そして、あなたのことができるようになり これは最終的に復号化します。
あなた幸せではないかもしれません それを解読して、リンクをクリックしてください。
大丈夫。
それは今日のためにそれです。
だから、来週お会いしましょう​​！
>> [電子音楽の演奏]