>> JASONハーシュホーン：ようこそ、 第6週に皆、。
私は健在あなたのすべてを見て満足していると 私がいることを知っているので、クイズ0、後
少し荒れていた。
しかし、ありがたいことに、あなたのすべて 非常によくやった。
だから、それは素晴らしいです。
あなたが私のセクションにいる場合は、私がほとんどを与えてくれた あなたのことをすでにクイズをバックアップします。
>> あなたのカップルは、私が会うよ 授業の後。
そして、あなたは拡張子の学生となら あなたが戻ってあなたのクイズを受けていない
まだ、あなたのTFは、おそらくそれに取り組んでいる そして、それをグレーディングし、それを取り戻すでしょう
あなたにまもなく。
あるので、私の延長の学生 今見ている - うまくいけば生きて -
私はあなたのクイズが表示されます まもなくも同様。
>> 次のように今日の私たちの課題です。
まず、我々はいくつかの上に行くつもりだ CS50はあなたに提供していたリソース。
我々は、次のクイズ0上に行くつもりだと 私は疑問を誰にお答えします
特定の問題について持っている。
そして、我々は上に行くことになる ファイルI / Oとの問題が5に設定してください。
これらの最後の2トピックがかかります セクションの大部分、今日まで。
>> 私は毎週このリストを設置 あなたのすべてのことではなく、コアのリマインダー
セクション、我々は90分を持っている - 私たち 私すべてをカバーすることができません
あなたたちのためにカバーするのが大好きだ。
しかし、我々はのための資源のトンを持っている あなたが知ってもらうようにして時に描画する
を通じて材料と仕事 あなたの問題が設定されます。
>> 私はオンラインのテキストを持っているリマインダー もしあれば記入していただくために、セットアップボックス、
私のためのフィードバックを持っている、 正と
セクションの、建設的。
そのURLは、右下のここに位置しています。
何かがあるのであれば、時間を割いてください フィードバック、かどうかのセクションの間に、
または後、またはあなたがビデオを見た後に オンライン、私にあなたのフィードバックを得た。
私は実際にそれの任意およびすべてに感謝。
>> だから私は小さな会話をしてきた 私の多くの
週を通して学生が - 私の手のように 背中クイズ、の話
もちろん、あなたがやっているか見て。
そして一つのテーマは、かけてきたと 以上の話中 - 中
特定 -
問題が設定されます。
そして、私はそのテーマをカプセル化しています 今、ボード上の。
>> 本質的には、違いがあります ある何かに回す間
正しく行わ何か それはよく行われます。
ほとんどの人が幻想的にやっている 正確さの点で -
すべてのpsetに5のまたは4の。
ほとんどの人が取得している これらの時間のすべて。
>> しかし、あなただけをやったので、 何かが右あなたがしたという意味ではありません
としてエレガントに何かをしたり、 効率的に、またはきれいにあなたと
それを行っている可能性があります。
そして、それはどのようなデザインだ -
そして程度は低い、スタイル -
軸がためのものです。
だから私はあなたのすべてを押して、その他のTFいます だけでなく、有効にするには、あなたたちをプッシュしている
正しいものでなくターン よく符号化されているものに。
>> ループには不要なをしていない、 場合は、変数を再計算しない
あなたがする必要はありません。
例えば、セットバックの問題に目を向けて 4、上にレンガを確定
画面、すべての行 - のすべてのレンガ 指定された行は同じy座標を持っています -
同じ高さに調整します。
>> y座標はする必要はありませんでしたように、 インテリアの中に計算され
あなたはおそらく使用の入れ子のforループ 画面上でこれらのレンガを置く。
それだけですべての計算する必要がある 時間は、行を切り替えたり、
行下に移動しました。
10レンガに存在する場合はそう言う 行、それぞれのレンガは、同じを持つことができます
y座標、及びそのy座標 単に計算することができる
それらのすべてのために一度。
>> これは、10を算出する必要はない 回もないという計算が必要
実際に起こること 関数呼び出し -
新しいgracked関数呼び出し。
だからために少し混乱した場合には より一般的に、あなた、物事
毎回起こるする必要はありません。 FORループを通過することはあってはならない
FORループ内に入れ、すべきでない あなたが行くたびに起こる
FORループを通して。
>> 我々が見た別の良い設計例 15週3では、保つことができる
ゼロトラック。
ですから、ボードを初期化するときに、 保存 - グローバル変数で、おそらく -
XとゼロのY座標。
して、いつでもあなたを -
あなたの移動機能で、いつでも確認 成功した動きは、更新
ゼロの場所。
>> それは何を持っていることからあなたを救う 目を通すためにネストされたFORループ
あなたの移動機能のボード毎回 ゼロを見つけ、またはタイルを見つけ、
して、その横に何をチェックします。
代わりに、の場所を持っている ゼロ、あなただけの、下の、上記の見ることができる
と確認するには、その左右に あなたが探していたタイル。
>> だから我々はしているプログラムの面で 書き込み、それらは十分な大きさにしていること
これらの設計上の決定のいくつかの 本当にあなたを妨げるしようとしている
プログラム、またはそれをより緩やかに実行されるよう、 あるいはおそらくメモリが不足する。
しかし、我々はまだあなたたちをプッシュしている エレガント書き込むと
可能な限り効率的なコード。
>> だから、これを行うとの事を書いてしまう かなり大きなを持っている
スコープは、彼らは良いと書かれます 正しいことに加えてデザイン。
だから、あなたは持っている数 それをもたらした。
それは我々が探しているものだ - 我々は継続するつもりだ何か
あなたたちを上に押します。
>> あなたは今までについてご質問がある場合 あなたのプログラムの設計、お気軽に
私に手を差し伸べ、私はうれしいですします あなたとあなたのプログラムの中を歩く、
とデザインのいくつかを指摘する あなたが下された決定、そしてあなたにいくつかを与える
でも作るためのヒント よりよい設計上の決定。
>> だから我々は上に移動するつもりだ クイズ0の話をする。
我々はそれを行う前に、誰でもない 何についての質問がある
私はこれまで紹介してきた？
>> [カサカサ音]
>> JASONハーシュホーン：7秒。
[OK]をクリックします。
のビットのためにクイズ0についてお話しましょう​​。
あなたのほとんどは、あなたのクイズ0の背中を持っています。
あなたがいない場合は、うまくいけば あなたはそれを少し覚えています。
しかし、あなたは、あなたクイズ0を、撮影した場合には また、オンラインのPDFへのアクセス権を持って
サンプル溶液。
>> 誰もが前にご質問があるん 私たちは、約一週間の材料に飛び込む
クイズ0上の特定の問題 -
なぜその答えは、それが何であるかです？
誰が何について混乱か？
あなたは正しい問題を得たが、あっても、 ちょうど私がそれを少し説明したいと思います
より多くの、私はここで実行してうれしいです。
>> だから私はにあなたたちを求めている いくつかと準備してくる
クイズ0約思考。
だから、誰が私たちを取得したいと思います 質問を開始または
クイズ0についてコメント？
>> [用紙カサカサ]
>> JASONハーシュホーン：ない誰も 完璧でした。
だから私は知っている（笑）
いくつかの質問がなければならない クイズ0について。
[OK]をクリックします。
はい。
Ompica。
>> OMPICA：番号10。
>> JASONハーシュホーン：数10。
どちらが数10でしたか？
>> OMPICA： -
>> JASONハーシュホーン：私はhaven't -
>> OMPICA：インクルード -
>> JASONハーシュホーン：番号10は8だった 私に - 私に8を書いて？
>> OMPICA：うん。
>> JASONハーシュホーン：わかりました。
だから、別の質問あなたは可能性があります 私は先見の明聞かれたのですか？
答えはイエスです。
クイズの前のセクションでは、私は尋ねた 皆さんスターリングの両方をコーディングすると、
私の8。
二人ともに起こった クイズに表示されます。
ので、うまくいけば、あなたが支払った それに注意を。
>> あなたが持っていたならば、あなたは持っているだろう おそらく、これらの2によくやった。
しかし、私の8は、我々は実際にコードしませんでした それはクラスで、それは、再び、だった
クイズに尋ねた。
だから、物事のカップルを取る 私の8をコーディングする際に注意してください。
まず最初に、質問ごとに、だった あなたは、文字列かどうかを確認するために必要なこと
ヌルに等しかった。
>> カップルの人は、後にチェックしてみました Sブラケットかのプログラムの中で私がいた -
という点で、そのように特定の文字 文字列 - ヌルに等しかった。
しかし、nullが本質的であることを、覚えている - それは考えて良いことだ
ゼロのポインタとしてNULL - ゼロへのポインタ -
メモリ内のどこか場所 あなたがアクセスすることはできません。
>> だから、何かがnullに等しい場合は、 それが初期化されていないことを知って、
またはそこに何もありません。
だからSは、チャースターSで ブラケット私はCHARです。
だから、nullにSを比較するために理にかなっている、 私はnullにではなく、Sブラケット。
しかし、再び - だから、最初のものだった あなたが行うことになったことを -
確認して下さいあなたが実際 実際の文字列を得た。
>> 次に、あなたが通って行きたいと思った 文字列の各文字。
そしてその結果は、Sブラケットのようになる 私は、例えば、私はあなたのイテレータである場合。
そして、その文字を取り、 その実際の値を取得します。
あなたはそれがcharとして保存されていますが、 ゼロのASCII値 -
文字としてゼロ -
実際には整数ゼロではない。
それはあなたがすることができますいくつかの他の数だ ASCIIテーブルで調べてください。
>> その補正するので、一つの方法 - を補正するため、おそらく最良の方法
それは - それから減算される 文字値 -
文字としてゼロ。
だから、マイナス一重引用符、ゼロ、 別の単一引用符。
それはあなたが持っているどのような番号がかかります charとして、して、それが等しく取得
実際の整数として数字。
>> そして、それはアプローチと非常によく似ています 多くの人が取り入れた
問題はカエサルに、2セット とViginere -
これらの暗号、ときに それらを回転させた。
あなたがから数としてそれを持っているので、後に それから9ゼロ、 - に応じて
それは究極の数がどこに行くか - あなたはそれを乗算する必要があります
10の力で。
>> 何人かの人々はに戻ってから移動 フロント、そして個人を掛けた
10の力で数。
一部の人々はから移動 前面から背面へ -
ので、最高のかかった 最初の注文番号 -
とのそれらを救う グローバルカウンタ変数。
そして、その後のための貫通たび ループは、その巨大なグローバルを掛け
10カウンタ変数、作る 次の文字のためのスペース。
>> だからなしで少し混乱した 私はボードに書いて。
しかし、試料溶液 あなたに提供されています。
しかし、これらは大きなものでした 私たちは、探していた。
また、必ず各ことを確認してください 個々の文字はA確かだった
ゼロと9間の文字ではなく、 Aのような他の文字、、
次に例を示します。
>> それらは我々が探していたものだった その問題となっているため。
それがあなたの質問に答えるのでしょうか？
>> OMPICA：うん。
>> JASONハーシュホーン：わかりました。
他の質問はありますか クイズ0はどうでしょうか？
どのようなコンパイルはどうでしょうか？
誰もが右コンパイル？
いいえ。
ありました -
（笑）
についての質問 コンパイルプロセス？
うわー。
>> [用紙カサカサ]
>> JASONハーシュホーン：はい。
マイケル。
>> マイケル： - 乱数7ですか？
>> JASONハーシュホーン：数7。
番号7は、ランダムな整数を取得しました。
優秀。
だから、整数aを与えられたとしている 整数b、あなたはランダムにしたい
aとbの間の整数。
私たちは、実際にこれを上書くことができます ボードからで1
1行のコードだった -
それを行うための一つの方法。
>> だから我々は次のようにdrand与えている この関数は、我々は使用することができます。
そして、何がdrandん -
それが播種されているのと仮定して -
何を返すdrandのでしょうか？
>> マイケル：0.0〜1.0のフロート。
>> JASONハーシュホーン：数 - うん。
0と1の間の数値。
そして私たちはBおよびました。
そして、我々は我々の乱数を持っている 0と1の間にはdrandによって我々に与えられた。
一部の人々は、Bを入れてみました、またはBマイナス 、またはそれらの内部に何か
丸括弧。
それは彼らがしていることを意味します この関数の引数。
>> drandは引数をとりません - getStringをしていますかのように
引数を取らない。
だから、近いだけオープン括弧だ 括弧 - それは、それ自体、ある
関数呼び出し。
そして、それはあなたの番号を与える 0と1の間。
もちろん、我々は、全範囲を有する 数字105.83できること
>> Bが10で、5であれば、私たちは本当に、言う 5の範囲で数値を求めています。
だから我々がする必要がある次のことはある 範囲BマイナスAによって、これを乗算します。
だから乗算だと仮定して。
そして、それは私たちに番号をあげる 与えられた範囲内で。
そして、その具体的な範囲はあること BマイナスAとの違い。
>> そして最後に、それだけからそれをあげるよ - BマイナスAの間の範囲を言う
それが私たちに与えるだろう、5です 0〜5の数。
実際に5であるなら、私たちは後押しする必要がある それはだところに、この範囲まで
実際に加算して、ことになって。
だからロジック権を取得します。
そして、あなたが持っているだろう 別の質問？
>> マイケル：いいえ。
私はちょうど今、本当にばかに感じる。
（笑）
>> JASONハーシュホーン：いいえ。
本当にばか感じることはありません。
人々の数は苦戦 この質問に。
そして、他の質問は、drand、 あなたはあなたのフロートを与え、言った -
floatを返します。
しかし、この関数は実際に尋ね 返される整数のため。
>> あなたが明示的にキャストする必要はありません。 整数には、これらの理由
操作は、全てのAとしてそれを扱います フロート - 浮動小数点数として。
この意志のように - これさえあれば 整数、この意志です
正しく掛けられる。
すべての乗算が動作します。
あなたがここでそれをキャストする必要はありません。
実際には、あなたがそれを唱えるべきではありません。
>> つまりだろう -
あなたが番号を唱えたい場合 つまり、0と1の間です -
乱数、浮動小数点 -
それはそう、唯一の0または1のどちらかになります あなたはその精度をすべて失うことになる。
しかし、最後に、あなたが戻ったときに、 それは自動的に取得する
整数として送り返さ。
だから、する必要はありません それはあなた自身をキャスティング。
>> だから、これはへの答えだった その質問、番号7。
クイズ0上の任意の他の質問？
うん、アニー。
>> ANNIE：我々は、再帰的に使用するのです -
ときに我々は反復ループを使うのですか？
>> JASONハーシュホーン：あなたが使用するのですか 再帰 - ので、より一般的には、
再帰対の長所と短所 反復アプローチ。
誰もがプロまたはCONを提供することができます？
してください？
誰でもできるわけではありません。
誰がプロまたはCONを提供することができますか？
>> [用紙カサカサ]
>> 学生1：再帰が少ない コー​​ディング - 少なくタイピング？
>> JASONハーシュホーン：だから、一般的に、 再帰特に、機能 -
やマージなどのアルゴリズム ソート - 向いている
再帰的なアプローチに -
より簡単かもしれません 再帰的に符号化する。
そして、ちょうどより多くの意味をなす 再帰的にそれを行うには。
だから、再帰にプロになる。
その他？
うん？
>> 学生2：再帰にのConA -
それは、より多くのメモリを使用しています。
>> JASONハーシュホーン：だからまったく正しい。
再帰関数は、追加し続けます スタックは、スタックにフレーム。
だから、たくさんの上で動作している場合 数字、これを呼び出す必要が
多くの機能、あなたは確かでしょう ながら、より多くのメモリを占有
反復アプローチは、1を配置します スタック上のフレームをスタックので
それはすべて1関数内で発生します。
>> 他の長所と短所？
うん。
>> 学生3：再帰を長所。
あなたは、中かを判断する必要はありません 何回進める
コー​​ドが繰り返されなければならなかった。
あなたが所定の数を持つことができ あなたがし、繰り返し処理をする必要が回
再帰は、優れている理由 それはその結果を取ります。
>> JASONハーシュホーン：私はそれが本当だと思います。
しかし、私は両方のケースで考える あなたは決して -
おそらく、いくつかになるだろう ユーザからの入力。
またはこの関数は、いくつかの入力を持っているでしょう それは決定するであろう何度も
実行する必要があります。
だから一般的には、ハードコードされないだろう - でも、反復アプローチでの - どのように
何度もそのループを実行する必要があります。
>> あなたがいた別のを持っていなかった アニー、お考えですか？
[OK]をクリックします。
ので、これらはおそらく2である -
最大のプロと最大 に対して再帰的にCON
反復アプローチ。
[OK]をクリックします。
クイズ0上の他には？
>> 先に進みましょう。
ファイルI / O素敵なショートがあります 今週ファイルでI / Oのことうまくいけば
あなたは、複数のを見た 時間、賞賛。
多くの仕事は、その中に行き、私がしました それはめちゃくちゃ便利です聞いた。
私はまた、このスライド上のリンクを含んでいた ケースではありませんでした
それを10回見るチャンス。
>> そこで、我々は簡単に上に行くつもりです 開いて作業する主なステップ
ファイルした後、我々はしようとしていると 前の符号化の問題に飛び込む
問題のあるセットを調べる。
だからもう一度、私が上でこれを我慢するつもりです 画面が、私はのために話をするつもりだ
私たちがしているかについてだけで分 ファイルをここでやっI/O--
それは何を意味するのでしょうか？
>> それは我々が作成できることを意味します私たちの プログラムした後、我々のプログラムを持っている
exitと上の任意の影響を与えてきていない 私たちのプログラムの外の世界。
しかし、我々はファイルの操作を開始するとき - 両方でそれらを読んで作成する
彼ら - 私たちは、に何らかの影響を持つことができます 私たちのプログラムの外の世界。
>> 同じようにMicrosoft Wordができなかった場合 その後、任意のWord文書を作る
Microsoft Wordは、あなたのすべてを終了したら、 仕事はなくなっているだろう、それはだろう
本当に役に立たない。
我々は最終的にできるようにしたいです 影響を与えることができるプログラムを書く
彼らの周りの世界、両方を取り入れることで 複素数入力 - ファイルの面でと
ファイルを経由して、また、興味深いの作成 魅力的な出力 -
ファイルの種類の観点。
>> 私たちが始めているなぜそれがある ファイルを操作する方法について学習します。
具体的には、どのような 行っており、次のようである。
それは非常に簡単です。
そこにステップの唯一のカップルがあり、 それらは、このコードにはここにリストされています。
だから我々は通過するつもりだ 行することで、このコード行。
>> まず、ハイライト表示を参照してください -
あなたは、ファイルで作業しているとき、 に関係なく、ファイルの種類のことであり、
あなたはそれを開く必要があります。
そして、それはfopenの呼び出しである -
ここ。
あなたは、ファイルの名前が含まれています。
ファイルがディレクトリにない場合、 またはフォルダこのプログラム
生活は、その後も含める必要が そのファイルがある場所へのパス。
>> 我々は、このことを前提とするつもりだ 「TEXT.TXT "と呼ばれるファイル -
簡単なテキスト文書は、 - である このプログラムと同じフォルダです。
だから留めておくべきもう一つのことだ 心 - あなたは、ファイルを開きたい場合に
どこか別の場所には、実際に必要な その場所を含めます。
>> 第二に、あなたがに引数を渡すことができます fopenを、それはあなたが何をしたいです
ファイルと。
その3つの主要な引数があります。 あなたはfopenの合格するつもりだ。
誰が私にそれらの3を与えることができますか？
誰が私にそれらのいずれかを与えることができますか？
はい。
>> 学生4：ファイル名？
>> JASONハーシュホーン：申し訳ありません。
あなたが渡すことができ、3つの主要な引数 fopenの第二引数に。
そうだね - ファイル名 最初の引数である。
しかし、fopenの第二引数は 一般的には3つの文字列、および - はい。
Aleja。
>> ALEJA：追加するためのA。
>> JASONハーシュホーン：A、あなたがしたい場合は、 既に存在するファイルに追加。
>> 学生5​​：読み取りR。
>> JASONハーシュホーン：R、あなたの場合 ファイルから読みたい。
>> 学生6：書き込み用のW。
>> JASONハーシュホーン：そして、Wであれば、あなた ファイルに書き込む。
この場合、私たちは書いている ファイルに、私たちは、Wがあります。
あなたがそれを開いて、あなたも保存する必要があります どこかにファイル、およびそれがでます
の左側にコード 代入演算子 -
私は、ファイルへのポインタを作成しています この場合、ファイルには、呼び出される。
>> 私たちは何を心配するつもりはありません これは、すべてのファイルのことをされているキャップ。
それは長いです、と言えば十分 0と1のストリーム。
そして、それは我々がしようとしている方法です それを操作して、それを理解しています。
>> 我々がする必要がある次のことは - と これは非常に重要です -
あなたがファイルを開くたびに -
実際には、あなたはmalloc関数を呼び出すたびに、用 たとえば、一部のメモリを取得してみてください
あなたは常に、ポインタに保存します ことを確認する確認したいこと
この関数はnullを返しませんでした。
>> この場合、我々は作るためにチェックしている 私たちが実際に開かれていることを確認してください
正しくファイル、およびがあった 私たちのプログラムに誤りはありません。
次に、我々は確認するためにチェックしたら 我々は作業ファイルがあることを、我々はできる
、への書き込み、またはから読み取る またはファイルに追加します。
この場合、私は単純に印刷しています このファイルに1行。
>> 私はそれをどのように知っていますか？
まあ、私はこの機能を使用しています fprintf関数と呼ばれる。
使用する予定の機能のすべて への書き込み、またはからの読み取り時、または
ファイルを操作すると、のようになります。 あなたが前に見てきた機能が、
文字Fで始まる、 ファイル放置。
そして、我々の通常の印刷とは異なり関数fprintf、 アプリは、一つの追加の引数をとり、
それはあなたのファイルです に次の行を印刷したい。
>> 私はには何も持っていない オハイの権利。
私は、三分の一を持っていない printf関数の引数 -
または第二引数はprintfに、 fprintfの第3引数は、私のため
ここで任意のプレースホルダを持っていません。
私はすべての変数を含めていないよ。
しかし、再び、fprintfのこれらのファイルのすべて ファイルを操作する関数
一般的に、ファイルを必要としています その上で、それらが動作しています。
>> 最後に、最後の重要なことに 何と同じように、ファイルを閉じることです
で - 私たちは何かをmallocするたびに、 私たちはないように、何かを解放したい
メモリリークを持っている - 私たちは欲しい 私たちのファイルを閉じます。
このプログラムは終了せずに終了した場合 ファイル、オッズは何もないが行くだろう
間違っている場合は特にそれ 小さなファイルだった。
>> しかし、それは確かに良いコーディングスタイルです そして常にあなたのファイルを閉じる練習
あなたはそれを使用して完了したら。
だから、ファイルI / Oの基本です おそらく、その前に見てきたか、
その幻想的なショートでそれを見ていた。
誰も前に、ご質問があるん 我々はいくつかの練習コーディングに入る
ファイルに関する問題が、I / Oまたは 私はちょうど工程にわたって行ってきました？
>> [タイピングはSOUNDS]
>> JASONハーシュホーン：あなたの操作を行います 質問、AVIがありますか？
>> AVIファイル：いいえ。
>> JASONハーシュホーン：わかりました。
私は別のを待つつもりだ 7秒。
（笑）
それは本当に良いヒントです。
あなたたちはただ好きではありません 質問をする。
それはいい。
[OK]をクリックします。
だから私たちの最初の練習問題は、私たちは、ある の機能を複製する予定
おそらく、コマンドラインツール コピー - 前に使用 -
コピーツール。
あなたは、CPを入力し、それを渡すと2 ご使用の端末への引数は、次の操作を実行でき
ファイルをコピーします。
そして、それは我々が行っているものです 今書き込む。
>> だからもう一度、このスライドのOFF読み出し、私は思います あなたが取るプログラムを作成する
2と2のコマンドラインのみ 引数 -
ソースファイルとコピー先のファイル -
コピー元の内容 コピー先のファイルへのファイル
一度に1バイト。
だから、求めることがたくさんあり​​ます。
>> 繰り返しますが、これまでの良いアプローチがある Cコードに直行ではなく、
ステップのいくつかに分解。
まず、ロジックを考える - 正確に 私は何をすることを求めている -
とのすべてを理解する この問題へのステップ。
なしCでの、ほんの一部の擬似コードでは、 の、あるいはメンタルモデル
何が起こっている。
>> 次に、あなたがダウンして擬似コードを取得したら、 どのように擬似コードを把握
我々はしたツールや物事にマップ C言語で使用することを学んだ
>> そして最後に、あなたはすべてのことをしたら、 一緒に、あなたが問題をコーディングすることができます。
5〜10分かかる この問題に取り組む。
私が指示を出してあげる 背中秒で最大。
そして、我々は終わっ行くつもり 擬似コード、およびコード
それはグループとして住んでいます。
>> あなたがしているときには不明な点がございましたら これに取り組んで、調達して自由に感じる
あなたの手は、私が来る 周りとそれらに答える。
>> 学生7：私は強打することはできます 一枚の紙？
>> JASONハーシュホーン：最近どうですか。
>> [タイピングはSOUNDS]
>> JASONハーシュホーン：わかりました。
まずは、擬似コードの上に行ってみよう、と その後、私はあなたにいくつか詳細をあげる
コー​​ディングが終了する分。
>> 誰が私を始めたい の最初の行に
この関数の擬似コード？
>> 学生8：ことを確認してください あなたは、2つのファイルを与えられた。
>> JASONハーシュホーン：わかりました。
そして、我々はいないのであれば？
>> 学生8：私は0を返します。
>> JASONハーシュホーン：我々は0を返す必要がありますか？
>> 学生8：リターン -
ブランキング。
申し訳ありません。
>> JASONハーシュホーン：うん。
おそらくない0。
0は、すべてが良かったことを意味するので。
[OK]をクリックします。
だから、最初の行だ 擬似コードの。
誰が擬似コードの2行目を持っている？
>> 学生9：両方のファイルを開きます。？
>> JASONハーシュホーン：両方のファイルを開きます。
OK？
>> 学生10：どうかを確認し ファイルがnullの場合は？
>> JASONハーシュホーン：確認してください NULLのでもないことを確認してください。
余談として -
0を大幅に削減 -
それがNULLである？
>> 学生11：いいえ。
>> JASONハーシュホーン：それがNULLではありません。
つまりNULL終端と呼ばれています。
それは、実際には1リットルでつづら。
だからに対して何かをチェックする - それは実際には、キャラクタの -
その結果に対して何かをされているチェック それかどうかを確認と同じではありません
NULLに等しい。
>> そして何人かの人々 -
そのクイズとその問題について セットは - 持っている
混乱したものの2。
しかし、これらの2つが 実際には異なる。
一つは、文字列を終了します -
1は0へのポインタである。
>> 学生12：なぜにチェックしないだろう ファイルがNULLでないことを確認してください
あなたがそれらを開く前に？
>> JASONハーシュホーン：だからオープンセーブ そのファイル内の何か。
そして、あなたはここに戻って行く場合 -
ので、このライン - はfopen -
あなたのアドレスとストアを行います それが動作するかどうか、ファイル内のそのアドレス。
それは動作しない場合は、 NULLが格納されます -
>> 学生12：ああ。
[OK]をクリックします。
あなたが手に入れた。
>> JASONハーシュホーン：ファイルで。
だから、nullをチェックすることはできません 前に、それらを開いた。
NULLは何かがなかったことを意味 正常に動作します。
[OK]をクリックします。
だから、必ずどちらであることを確認してください？
それともですか？
私たちはどう思いますか？
我々はそれで行くよ。
>> 学生13：です。
>> JASONハーシュホーン：ですか？
でもない？
>> 学生13：です。
>> JASONハーシュホーン：わかりました。
我々はいくつかを持っているようだ その上で合意。
NULLのでもない。
[OK]を、擬似コードの次の行。
誰が、まだ私にラインを与えていない？
私たちはあなたをお待ちしております。
うん。
>> 学生14：あなたが読む必要が 最初のファイルから？
>> JASONハーシュホーン：わかりました。
>> 学生14：または私達は関数fscanfを使用するか、 最初のファイルそのような何か？
>> JASONハーシュホーン：だから我々がしたい 最初のファイルから読み込まれ、 -
のはここそれを置いてみましょう。
ソースファイルから読み込みます。
そして、我々は我々の後に何をしますか ソースファイルから読むか？
他の誰か？
>> 学生15：にお書きください。 コピー先のファイル？
>> JASONハーシュホーン：私たちは、に書き込み コピー先のファイル、および -
[OK]をクリックします。
私たちは、他に何が不足している？
私に与えられていない他の誰か まだコード行 - 擬似コードの。
うん。
>> 学生16：たぶん、あなたは、常にチェックすることができます のために読むために何かがあるのか​​どうか、
次の行のような？
次の行のようにしていることを、 それが存在するかどうか。
>> [電子音]
>> JASONハーシュホーン：おっと。
それは私のジャーナリングソフトウェアです。
うん？
>> 学生16：うん。
>> JASONハーシュホーン：だから与える それ私にはもう一回。
>> 学生16：があるかどうか確認してください から静止次の行
読み込むソースファイル。
>> JASONハーシュホーン：わかりました。
だから我々は、ラインを読んでいない - ここでバイトを読んでいた -
しかし、あなたは正しいよ。
私たちは、までを読み書きしたい これ以上のバイトはありません。
[OK]をクリックします。
だから、これらは実際にインデントする 少し、彼らはそこの下だから。
右？
我々はバイトの外出まで、我々はするつもりだ ソースファイルからの読み取りおよび書き込み
先のファイルに。
>> そして、最後は何ですか 擬似コードの行？
与えられていないのは誰か 私はまだ何か。
>> 学生17：ファイルを閉じる？
>> JASONハーシュホーン：その通りです。
ファイルを閉じる。
だから私たちの擬似コードがあります。
私はに擬似コードを入れるつもりです geditの、そして数分のWE
一緒にこれをコーディングします。
>> [OK]をクリックします。
私たちはグループとして始めましょう。
Nishantは、私は私の新しいファイルがあります。
私はこれを開いた。
無題ドキュメント1。
私が最初にすべきことは何ですか？
>> NISHANT：ライブラリが含ま？
>> JASONハーシュホーン：わかりました。
どのようなライブラリ？
>> NISHANT：stdio.hに、stdlib.hを、私は信じますか？
>> JASONハーシュホーン：わかりました。
用STDLIBとは何ですか？
>> NISHANT：私は忘れてしまった。
>> JASONハーシュホーン：わかりました。
だから、標準入出力が含まれています。
私も前に何をすべき 私はコーディングを開始？
>> NISHANT：ヘッダを投稿してください。
>> JASONハーシュホーン：どのように それは色の私が得るのですか？
>> [声を挟ん]
>> NISHANT：どのようにそれが着色できますか？
>> JASONハーシュホーン：どのように 私は、カラーコーディングしますか？
>> NISHANT：私は知らない。
ああ。
保存します。
>> JASONハーシュホーン：保存します。
はい。
私は、Cとして保存する必要があります。
そうcp.c.としてデスクトップに保存します
甘い。
そして、私は完全なスタイルを取得したい場合 ポイントは、私は何をすべき
上部に含まれる？
>> NISHANT：あなたの名前、名前を書くことができます プログラム、および目的
だけでなく、プログラムの？
>> JASONハーシュホーンは：よさそうだ。
優秀。
だから、完璧に私たちをスタートしました。
＃は、 -
我々はまた書きます -
[OK]をクリックします。
だから私は、私はすべて行くように設定さていると思う。
誰が私のためのコードの最初の行を持っています - またはコードの最初の行、その
それが私たちの最初のを満たすために取る 擬似コード中のコメント？
あなた。
>> 学生18：それはintであるべきではない ARGCしてから、CHAR * ARGV？
>> JASONハーシュホーン：私は思う あなたは正しい。
のは、それがメインの、オープンな括弧をintに変更してみましょう、 int型argcは、コンマ、char *文字ARGV？
そのような？
>> 学生18：ブラケット。
>> JASONハーシュホーン：ブラケット。
開き括弧、閉じ括弧、 近くに親。
完璧。
今私は、コマンドライン引数を取ることができます。
[OK]をクリックします。
我々は2つ​​のファイルを与えていることを確認してください。
あなたにも私にそれを与えることができます。
>> 学生18：ARGC場合 -
この1は3に等しくない。
>> JASONハーシュホーン：オープン括弧の場合 ARGCは3に等しくない？
>> 学生18：ええ、あなたが返す 1か何か。
>> JASONハーシュホーン：申し訳ありません。
>> 学生18：リターン1か何か。
>> JASONハーシュホーン：1を返します。
OK？
素晴らしい。
両方のファイルを開きます。
誰が私には両方のファイルを開くことができます？
誰が、まだ私にコードを与えていない？
クルト？
>> KURT：だからすべて大文字のF-I-L-Eのスターソース。
>> JASONハーシュホーン：私は行くよ 母音を取り出す。
それらはクールだ。
これは、Tumblrのようなものだ。
>> 学生18：関数fopenを等しい -
>> JASONハーシュホーン：fopenのEqualsの？
>> 学生18：オープン括弧、 ARGV、開き括弧。
>> JASONハーシュホーン：待ってください。
申し訳ありません。
開いた括弧。
[OK]をクリックします。
>> 学生18：うん。
ARGVサブ1。
>> JASONハーシュホーン：サブ1？
>> 学生18：うん。
ARGVオープンブラケット1 -
はい。
して、コンマ、[開く]をダブル 引用符、R、二重引用符、
閉じる括弧、セミコロン。
>> JASONハーシュホーン：甘い。
そして、何他の1はどうでしょうか？
>> 学生18：非常に似ていますが、その代わりに S-R-Cを、あなたは、D-S-Tと呼ぶだろう。
>> JASONハーシュホーン：OO！
私はそれが好きです。
>> 学生18：ただのD-S-T。うん。
して、ARGV、開き括弧、2。
うん。
した後、Wの代わりにR。
うん。
>> JASONハーシュホーン：今すぐ。
ラインの次のカップル。
また、誰でもに追加するものを持っている場合 私たちがやったラインは、お気軽に
同様にそれらを追加します。
必ずどちらもNULLでないことを確認します。
誰が私に私がする必要があるコードを与えることができます 擬似コードの行を満たす？
アーチャー。
>> アーチャー：SRCはイコールに等しい場合 NULLまたはdstがイコールに等しい
NULLの場合は、あなたが戻って -
>> JASONハーシュホーン：何？
>> アーチャー：リターン2？
>> JASONハーシュホーン：リターン2。
だから、オープン括弧のsrcが等しい場合 NULLに等しいか、または -
どんなことthing's - パイプ？
パイプ？
我々は、パイプと呼びます。
パイプ、パイプ、DSTがequalsに等しい NULL、2を返す。
OK？
我々は、バイトの外出まで -
我々は一種のからこの段差をスキップ ここに行くに擬似コード部分。
>> しかしまで、私たちは、バイトからだ - その音はどんな感じていますか？
C構造はどのようなタイプ -
私は言葉の構造を使用していない、 我々は、使用を開始するつもりだので、
そのほかのケースでは -
が、Cツールは次のようにその音していますか？
>> 学生19：ループ。
>> JASONハーシュホーン：ループ。
ループのように聞こえる。
だから、誰が私に最初の行を与えることができます ループコードの右側ここに？
また、どのような種類を選ぶことができます ループあなたは私を与える場合は、必要
このコード行。
3種類があります。
あなたが手に取れ。
私はそれらのいずれかをお勧めします。
AVI。
あなたはどれが欲しいのですか？
>> AVIファイル：ください。
>> JASONハーシュホーン：ください。
>> AVIファイル：私はゼロに等しいintです
>> JASONハーシュホーン：わかりました。
>> AVIファイル：私はについてはよく分からないこの部分。
しかし、私はサイズよりも小さい スターソースの？
私はそれをよく分からない。
>> JASONハーシュホーン：わかりました。
>> AVIファイル：あなたがしたいので ファイルのサイズは、右？
>> JASONハーシュホーン：だから、これはおそらくないでしょう 私たちに実際の大きさを与える
バイト単位のファイル。
だから我々は他に何ができますか？
ループの別のタイプは何ですか？
あるいは我々は、FORループに固執すべき？
>> 学生20：あなたはwhileループをできますか？
そして、何がしたいことはyou'dです -
我々は、ファイルの文字*を持っているので。
だから我々はちょうどその増分続ければ 私達はでNULL文字を見つけるだろうまで
それの終わり？
またはNO、ファイルがどのように動作しないということです？
>> JASONハーシュホーン：だから我々は維持することができます * CHARをインクリメント
我々は、NULLを見つけるまで -
>> 学生20：基本的に続ける 文字単位で我々はヒットするまで
ファイルの終わり。
>> JASONハーシュホーン：はい。
だから、私たちが何をしたいのです。
私たちは、読書、文字を維持したい 文字によって、我々は表示されるまで
ファイルの終わり。
>> 学生20：うん。
見つける -
終了または一時停止の標識は何でしょう テキストフ​​ァイルの終わりに。
>> JASONハーシュホーン：わかりました。
だから我々は、ファイルの最後に到達したとき - 我々は我々が達したかを知っていますか
ファイルの終わり？
私が呼んでいる場合 -
それでは、一歩下がってみましょう。
機能とは何ですか？
のはここ、この行に行きましょう。
ソースファイルから読み込みます。
誰が私のコード行を与えることができますか？
>> 学生21：fscanfは？
>> JASONハーシュホーン：fscanfを。
[OK]をクリックします。
私が読みたい場合には、非常に 具体的には、1バイト？
>> 学生21：私は知らない。
>> JASONハーシュホーン：わかりました。
fscanfはよりさらに簡単 - 何か -
私は、ソースファイルから読みたい？
ソースファイルから読み込みます。
機能は何ですか - うん。
>> 学生22：これは、関数freadは？
>> JASONハーシュホーン：FREAD。
私はのは固執せ考える 今のところ、その1。
引数はどのような 関数freadはかかりますか？
>> 学生22：おそらく、ファイルの種類、 し、ファイル内の場所？
>> JASONハーシュホーン：私はここで何を入力することができます 引数の種類を把握する
関数freadがかかる？
>> MULTIPLE学生：男性のfread。
>> JASONハーシュホーン：男性 関数freadとfwrite。
彼らが一緒にたむろように見えます。
だから、関数freadは、どのように多くの引数をとります？
>> 学生23：四。
>> JASONハーシュホーン：それが取る 4引数。
これは、サイズ、ポインタを受け取り、その 奇妙である事と、いくつかのファイル。
OK？
のはここそれについて読んでみましょう。
「関数のfreadは、n個のMEMBを読み込む データの要素、各sizeバイト
長い、ストリームからの指す ストリームの位置にそれらを記憶する
ポインタが指定する。 "
>> そう4引数。
なぜ私はこれをコピーしないでください、 そして右ここに貼り付けます。
[OK]をクリックします。
だから、誰が記入し始めることができます 私のためにこれらの引数？
AVI。
>> AVIファイル：無効を取り出します。
ただSRCを置く。
ポインタとスターを取る。
SRCを置く。
その後 -
>> JASONハーシュホーン：だから私は停止するつもりだ そこに、それは正しくないだから。
あなたは、srcで正しいですが、 SRCどこに行くべき？
>> [声を挟ん]
>> JASONハーシュホーン：それが必要 こっちに行く。
これはSRCだ - 私たちのsrcがタイプです。
それでは、ここで見てみましょう。
これは、我々は、FILE *型を要求している 実際に、通常、そのようにそれらを参照してください。
だから、これは引数を求めている SRCであるストリームと呼ばれるタイプのファイル*。
OK？
>> 物事は何のどのようなサイズ 私たちは、読みたい？
私は、あなたにこのを与えた 問題の説明。
>> 学生24：1バイトずつ。
>> JASONハーシュホーン：1バイト。
バイトの大きさは？
そのサイズはバイト単位ですので、どのような 私はすぐそこに置くことができますか？
>> 学生25：ワン。
>> JASONハーシュホーン：ワン。
右。
その大きさは、単位バイトであり、 その1は1バイトです。
どのように多くの私は一度に読んでもらいたいです。
>> 学生26：ワン？
>> JASONハーシュホーン：一つのこと。
私は大きさの一つのことを読みたい 1度に1一口。
私はそれを読んでたら、どこで、私は、それを置くのですか？
>> 学生27：デス？
>> JASONハーシュホーン：だから私は置くことができない それまっすぐ目的地へ。
>> 学生28：あなたがつもりプットだ それ三ポインタに？
>> 学生27：目的地へ。
>> JASONハーシュホーン：わかりました。
うん。
>> 学生29：あなたは何かを宣言することができます 一時保管先にとして機能します。
>> JASONハーシュホーン：わかりました。
私にそれを与える。
>> 学生29：別のファイル ポインタ、多分？
>> JASONハーシュホーン：わかりました。
だから、これは無効スターです -
それはvoid型のスターなので、それはしていません ファイルポインタである必要があります。
そして、私は1バイトを読んでいる場合には、 良い場所にする場所
1バイトを保存する？
>> 学生29：配列？
>> JASONハーシュホーン：配列。
[OK]をクリックします。
との何か他のものです ただ1バイトのサイズは？
>> 学生30：文字*？
>> 学生29：うん。
>> JASONハーシュホーンます。char * 1バイトではありません。
>> 学生29：CHAR。
>> JASONハーシュホーン：charが1バイトである。
右？
それでは、このバッファと呼ぶことにしましょう​​と、一般的なもので 保存するために、これらのことに使用される名前
何か一時的。
だから私はバッファを作成。
右？
しかし、それは、void *を取るん。
だから、多分あなたは、正しいと、それ サイズ0のバッファーである必要があります。
だから、1を格納 -
右。
>> ので、ここでこの権利 - チャー バッファは文字ですが、
これは、void *を取る -
ポインター。
だから私は今これを行うと可能性 バッファはポインタである。
私は他に何ができますか？
>> 学生31：CHARの横に星を入れてください。
>> JASONハーシュホーン：私ができる それは* char型が作成されました。
[OK]をクリックします。
私は何ができる別のものは何ですか？
またはのは、この1で行きましょう。
CHAR *バッファなので、どのような 私はここに入れますか？
>> 学生31：バッファ。
>> JASONハーシュホーン：バッファ。
バッファは、charへのポインタである。
その場所で、我々は入れている 私たちが読んだものの1バイト。
うん。
AVI。
>> AVIファイル：ちょうど簡単な質問。
あなたはmalloc関数バッファしますか？
>> JASONハーシュホーン：CAN その質問に答える？
>> 学生32：まあ、それは本当にない 今、何をポイントし、そのように -
>> JASONハーシュホーン：でもない 我々はそれををmallocしたいですか？
>> 学生32：あなたはそれを行うとしたら、その あなたが必要があると思いますので、やり方、私は、ええ、推測
それはを指すようにするためにいくつかの場所。
>> JASONハーシュホーン：私たちを行います それををmallocする必要がありますか？
>> 学生33：あなたがするつもりなら ループの外でそれを使用します。
>> JASONハーシュホーン：私たちがしようとしている ループの外でそれを使うのか？
>> 学生34：はい。
>> 学生35：待ってください。
我々はそれを宣言しますか を超えて、ループ内の？
>> JASONハーシュホーン：だから私は、我々が持っていると思います 我々はしているここにいくつかの擬似WHILEループ
ことを、把握しよう 我々はまだにもらっていない。
我々はそれををmallocする必要はありません。
私たちは、主に動作している、それだけで起こっている このループ内で使用される。
それが存在する必要はありません この外に。
>> だから、ローカル変数を指定できます。
あなたはへのポインタを持っている ローカル変数。
>> 学生36：しかし、そうではありません 何を指している。
>> JASONハーシュホーン：いいえ、そうではありません 何にも初期化されます。
しかし、我々はまた、それを使用するつもりはない。
私たちは、に何かを置くつもりだ それが初めて我々はそれを使用しています。
だから大丈夫そうです。
だから我々は、ここではmallocを必要としません。
そして、私はそのままでOKだと思います。
[OK]をクリックします。
私たちは、関数freadラインを持っている。
の次の行をやってみましょう。
>> 我々は、ファイルに書き込みたい場合は、何ですか これを行うために使用するのは良い機能？
>> 学生37：fwriteの？
>> 学生38：fprintfの？
>> JASONハーシュホーン：fprintfのは1です。
別の1は何ですか？
>> 学生39：fwriteの。
>> JASONハーシュホーン：fwriteの。
そして、我々の目的のために、fwriteの、 我々はここで見ている、ある
おそらくより良い選択。
それは同様に4つの引数を取ります。
Nishantは、あなたが与えることができます 私の引数？
>> NISHANT：最初の1の航 ただバッファされるように。
>> JASONハーシュホーン：わかりました。
>> NISHANT：第1の ちょうど1になるだろう。
3つ目は、1になるだろう。
そして第四の1はDSTになるだろう。
>> JASONハーシュホーン：誰もが持っていますか その行についてのご質問？
それはよさそうだ。
[OK]をクリックします。
だから今、私たちがしている一つのことのように見える 不足している - 実際には、のは書いてみましょう
この最後の行。
ファイルを閉じる。
誰が書き込みを私たちに仕上げることができます これらの最後の2行？
はい。
申し訳ありませんが、あなたの名前は？
>> LUCY：ルーシー。
>> JASONハーシュホーン：ルーシー。
>> LUCY：FCLOSE srcとし、 fcloseを目的地。
>> JASONハーシュホーン：fcloseは、オープン括弧、 SRC、近くに括弧、セミコロン。
とfcloseを -
うん？
>> LUCY：オープン括弧、DST して、セミコロン。
>> JASONハーシュホーン：今すぐ。
そして、私は最後に何を含めるべきか？
>> LUCY：0を返します。
>> JASONハーシュホーン：0を返します。
私がする必要がありますか？
ちょうど質問。
我々はリターン0を含める必要がありますか？
>> MULTIPLE学生：いいえ。
>> JASONハーシュホーン：いいえ。
メインは、自動的にそれをしない あなたが最後に到達した場合。
しかし、私はそれがすてきだと思う 明示的に含まれています。
我々は他を返している場合は特に プログラム全体の事。
[OK]をクリックします。
これは我々が欠けているものである -
何WHILE？
誰がいくつか考えることができます -
どのようなもののいくつかの意味を持っている そこに行くことができる？
それだけで、いくつかの擬似コードでの場合であっても 言語のような？
>> 私たちは本当に何ですか - どのような 私たちがされるまでに行きたいですか？
うん、ルーシー。
>> LUCY：ファイルの終わり。
>> JASONハーシュホーン：ファイルの終わり。
だから、ファイルの終わりとはどういう意味ですか？
>> LUCY：あなたが到達すると ファイルの最後に、停止します。
>> JASONハーシュホーン：わかりました。
だから、かつて我々は、ファイルの最後に到達。
私たちが達した時にどのように我々は知っていますか ファイルの終わり？
>> 学生40：私はバッファを考える NULLに設定されます。
>> 学生41：バッファが宣言されている ループ内。
>> JASONハーシュホーン：だからあなたが考える バッファがNULLに設定されます。
なぜバッファがNULLに設定されるでしょう？
>> 学生40：あなたので、 freadは、あなたが入れしようとしている
バッファに何もない。
>> JASONハーシュホーン：わかりました。
だから、関数freadを考えている -
私達はの最後に到達したら ファイル、どのような関数freadは何をするつもりですか？
私はそれが問題だと思う 我々は把握する必要があります。
関数freadは何をしますか？
それは、バッファにNULLを入れてないか、 それは何か他のものをするのでしょうか？
我々はそれが何をどのように把握することができますか？
>> 学生42：男。
>> JASONハーシュホーン：男。
それでは、こっちを見てみましょう。
値を返す。
成功した場合に、関数freadとfwriteの返し 読み書き項目の数。
この数は、バイトの数に等しい サイズが1の場合にのみ転送されます。
エラーが発生した場合、または端 ファイルに達すると、戻り値は
短いアイテム数または0。
>> だから私たちの目的のために、関数fread達した場合 からファイルの終わり、および読み込み
ファイルの最後には、左のものはありません 読むために、何が返すように起こっているの？
>> 学生43：ゼロ？
>> JASONハーシュホーン：何？
>> 学生43：ゼロ？
>> JASONハーシュホーン：ゼロ。
それはゼロを返すために起こっている。
だから我々は我々がしたことのfreadを知る 、ファイルの終わりに達し起こっている
ゼロに戻ります。
どのように我々は我々の利点にそれを使用できますか？
>> AVIファイル：あなたが外で変数を宣言することができます チェックと呼ば​​れるループの。
チェックが等しい場合 -
今のところ - 1。
>> JASONハーシュホーン：わかりました。
>> AVIファイル：それから、あなたは、IFを置くことができます 右のfreadが言った後にif文
freadは、ゼロに等しい -
NO。
>> JASONハーシュホーン：誰 アビを助けることができる？
>> AVIファイル：値は何ですか 関数freadから返された？
>> JASONハーシュホーン：私たちだけ それの上を越えて行った。
>> AVIファイル：どのようにそれを表現するのですか？
>> JASONハーシュホーン：だからそれが返す - レッツ ここまで見て - それは返す
基本的にはsize_t、 整数。
だから、整数を返します。
そして、我々の場合は、意志 1または0を返す -
1それは一つのこと読めば - 1バイト、 0私たちが最後に到達してしまった場合。
関数freadもしそうであれば -
うん？
>> 学生45：あなただけのフルを置くことができない へのfread（バッファ、1、1、SRC）
whileループ？
>> JASONハーシュホーン：だから、提案する そこにこれをやって？
>> [声を挟ん]
>> JASONハーシュホーン：待って。
だから我々はそのことをなくしています。
だから、入れて提案しています そこにFREAD？
我々はまた、何を移動する必要があります あなたがそれをしたい場合はどうなりますか？
>> 学生45：外部のバッファ。
>> JASONハーシュホーン：私たちはすべき また、ここではこれを移動させる。
>> 学生45：でもないことを絶えず 前方に移動しますか？
>> [声を挟ん]
>> JASONハーシュホーン：わかりました。
だから、これはOksharが提案するものです。
我々は我々のバッファを作成。
我々のWHILEのfread、その後、我々はfwriteの。
これについての考え？
>> 学生46：私の唯一の問題は、だろう それは実際にコマンドのfreadを実行？
>> JASONハーシュホーン：良い質問。
あなたは、関数呼び出しを入れているときは 条件の中に、あることをしない
関数呼び出しが実行？
我々は前にこの例を見てきました。
右？
>> 学生46：わかりました。
うん。
だから、実行しない。
>> JASONハーシュホーン：私たちは、物事を見てきました その前に、我々が持っている場所のような
条件の内部関数呼び出し。
その関数呼び出しが実行されていますか？
はい。
だから、答えはイエスです。
この関数呼び出しが実行されます。
しかし、再び、それは我々が望むものである？
>> 我々は理解できた1の方法は何ですか それは我々が望むものだかどうか？
>> MULTIPLE学生は：それを実行する？
>> JASONハーシュホーン：我々はそれを実行することができます。
我々はそれをする前に、しかし、我々は可能性 また、この貫通理由
もし -
私たちは私たちの中で1バイトを持っていると言う ファイル、我々はここに買ってあげる、
我々は、このコードを取得します。
これが実行されます。
関数freadは、1バイトを返し、 バッファに格納します。
そして、これは1に評価され、 彼は1が返された後、右に。
>> 1 WHILEそう。
つまり、内のコードを意味するのか WHILEループが実行されます？
>> 学生47：うん。
それは本当だ。
>> JASONハーシュホーン：はい。
1は真です。
それが0ではありません。
だからここの中のコードが実行されます。
だから我々はそれを書きます。
我々はこれに戻って移動します 行をもう一度。
今、私たちは持っている -
我々は我々のファイルの終わりにいる。
私たちは、ファイルの末尾から読んで、 我々はそれだけで1バイトを持っていたので。
>> FREADは店舗、0を返します。 バッファ内の何か。
私は正直に知らないこと これは、バッファに格納します。
我々は、おそらく調べることができ それが何をするかを確認します。
私は正直わからない。
私たちは、何を気に誰が、知らない それは、バッファに格納します？
しかし、それは0を返しません。
と0を実行しながらのだろうか？
>> 0は実行されませんが。
それでは私たちはここで下に移動します。
それでは、挙手を得ること、この場合 我々は実行する必要があるコードがあるか、我々の場合
最初の変更を行う必要があります。
あなたが考えるのであれば - あなたが投票しなければならない。
あなたは私たちがこのコードを実行すべきだと思う場合は そのまま、手を挙げてください。
>> [OK]をクリックします。
1があります -
ご質問、懸念を持っているのですか？
うん。
>> 学生48：我々は、バッファを移動した後 ループの外で、私たちは何
それををmallocする必要がありますか？
>> JASONハーシュホーン：良い質問。
私たちは、外のバッファに移動した後 ループは、我々はそれををmallocしなければならないの？
これはスコープの問題である。
私たちは外部のバッファを初期化する場合 このループにより、それが存在する
ループの内側？
>> MULTIPLE学生：はい。
>> JASONハーシュホーン：はい。
その範囲は、ループの内側にカバーし、 そして、実際に、その下のものは内側
を含め、このコードの ここで内部の事。
だから我々はそれををmallocする必要はありません。
それはローカル変数だし、その範囲 それでもループが含まれています。
>> 学生49：我々はそれを解放する必要がありますか？
>> JASONハーシュホーン：私たちを行います 空きバッファする必要がありますか？
>> 学生49：ええ、私たちはmalloc関数をしない場合。
>> JASONハーシュホーン：私たちを行います 空きバッファする必要がありますか？
我々はしないでください。
この場合も、ローカル変数であり、 私たちはそれを解放する必要はありません。
[OK]をクリックします。
何が起こるか見てみましょう。
だから、初期化されていないです。
それはどのようなものであったこと マーカスは、先に提案した。
だから我々は、そのエラー、変数のバッファを持っている ここで使用したときに初期化されません。
>> 我々はこれをどのように解決することができますか？
>> 学生5​​0：それをmalloc関数？
>> 学生5​​1：NULL等しい？
>> 学生5​​2：bufferがNULLに等しいと言う。
>> JASONハーシュホーン：わかりました。
よさそうだ。
我々は今それを持っている。
のは、コピーをしようとするものを作成してみましょう。
だから我々は我々のテキストフ​​ァイルを持っている。
どのように我々は、このプログラムを実行することができますか？
うん。
>> 学生5​​3：あなたは、ドットを行うことができます CPを大幅に削減する、test.txtという。
そして、あなたは別のファイルに名前を付けることができます それが中に格納します。
>> JASONハーシュホーン：わかりました。
我々はそれをout.txtを呼ぶことにします。
クール？
ワンセグ障害。
ワンセグ断層の考え？
これは素晴らしいです。
どのように我々はどこで知ることができます ワンセグ障害がある？
何が？
>> 学生5​​4：GDB。
>> JASONハーシュホーン：GDB。
我々は、GDBのドットスラッシュを記述することで、GDBを実行 私たちのプログラムの名前。
そこには、コマンドライン引数はありません。
我々は、設定しようとしている 主にブレークポイント。
私はGDBを起動する場合、私は何をしますか？
>> 学生5​​5：R.
>> JASONハーシュホーン：その後、R.と何？
>> 学生5​​5：引数？
>> JASONハーシュホーン：その後 コマンドライン引数。
それでは見ていきましょう。
Nはちょうど私に行ずつを取っている。
私はまで行くつもりです 私はワンセグ障害を取得します。
私のワンセグ障害があります。
関数freadが生じたようだ 私のワンセグ障害。
私は、関数freadは私のSEG違反の原因を知っている それがあったため、
我々だけで、実行の行。
>> とした唯一のこと その行で何が起こって -
二つのことが起こった。
FREADが起こっていたし、私たちはいた いくつかのWHILEチェックをやって。
私はしばらくことを賭けることをいとわよ チェックは私のワンセグ障害が発生していませんでした。
ほとんどの場合、関数freadだった 私のワンセグ障害の原因となる。
私もここで何か、memcopyを参照してください。
>> メモリコピー。
からメモリを移動するように聞こえる 他の場所に。
起こるか何かのように聞こえる freadは、おそらくいくつかのメモリ内
ここには、ここから移動する。
それではもう一度見ていきましょう。
どのように私はそれを最初からやり直すか し、再度実行して？
うん。
>> 学生5​​6：あなたは配置する必要がありますか バッファの前にアンパサンド？
>> JASONハーシュホーン：だから前にアンパサンド バッファは私のアドレスを与えるだろう
* CHARであるバッファ。
のは、この1のより多くの時間を実行してみましょう。
どのように私はそれをもう一回実行するのですか？
>> 学生5​​7：ちょうどすることができ タイプは、再度実行？
>> JASONハーシュホーン：ちょうどもう一度実行]を入力します。
だから我々はするつもりはない この行を実行します。
だから、バッファがNULLポインタである。
正しいですか？
それがポイントしている - を見てみましょう。
我々は我々が持っている場合 -
この迅速な絵を描く。
誰もかどうかを確認することができます 私はここで上書き？
>> そう積み重ねで、地域を持っている 変数とは、バッファと呼ばれる、と
それは、charへのポインタです。
で、この文字は何のアドレスですか？
>> 学生5​​8：0x0の。
>> JASONハーシュホーン：右。
つまり、これが何であるかだ。
ここでは、バッファの内部には0x0に格納されている。
それは我々が持っているものだ - 我々は今持っている設定。
したがって、この行、関数freadは、何かを置く どこのソースから？
このボックスまたはこのボックスに？
その箱？
左のボックスまたは右のボックス？
この右のボックス。
>> これは、ポインタを次の、 そして、ここに入れます。
我々は試してみて、メモリをタッチすると 位置0、我々は何を得るのですか？
セグメンテーションフォールト。
それは我々が今持っているエラーです。
うん。
>> 学生5​​9：あなたが持っていない スターのバッファを置くか？
またはNO？
関数freadのために？
>> JASONハーシュホーン：だからのfread ポインタを取ります。
だから、バッファに渡します。
そしてそれは、デリファレンスをします どこかのfreadの内側に。
しかし、再び、我々が見た、それはポインタを取ります。
我々はそれを星のバッファを渡す必要はありません。
つまり、渡すことになる それここにあるものは何でも。
そして、それはおそらく、間違いを与えるだろう 我々はそれを逆参照しているので。
>> 右？
我々はこのポインタを参照を解除すると、とき 我々はこの場所にアクセスしようとすると、
我々は、エラーを取得している - 私たちのセグメンテーションフォールト。
そう -
おっと。
私たちは、GDBの外に終了するつもりだ。
ラインナップ -
我々の問題は - 右です ここでこの行の。
ので、それが問題だ このラインの。
>> どのように我々は、そのボックスを作成することができます fread関数にアクセスできます。
右？
私たちは、自分のボックスを作成する必要があります 大バイト、char型のサイズ。
しかし、我々はその箱がアクセスできるようにする必要があります この関数は、実行されたとき。
だからここで -
うん。
任意のアイデア？
>> 学生60：同じように設定します 任意のランダムな文字。
CHARバッファ等号をただやる 文字。
そして、あなたがそこにバッファリングしているとき -
>> JASONハーシュホーン：待ってください。
CHARバッファ？
だから星なし？
>> 学生60：うん。
スターを取り出します。
ランダムな文字に等しくなります。
>> JASONハーシュホーン：わかりました。
だから、私に1を与える。
>> 学生60：Aか何かのように。
してから、バッファを持っているとき そこに、あなたが使用して -
>> 学生61：スター？
ああ、いや、アンパサンド。
>> 学生60：アンパサンドを使用してください。
>> JASONハーシュホーン：わかりました。
そして、何fwriteの中ではどうでしょうか？
>> 学生60：もう一度アンパサンドを使用してください。
>> JASONハーシュホーン：すべての権利。
だからあなたの考えは、ある我々は、charを作成し、 それに何かを入れて、
その文字に書き込む。
>> 学生60：うん。
>> JASONハーシュホーン：何 人々は、と思いますか？
>> 学生62：これは、畳み込んだ。
>> JASONハーシュホーン：わかりました。
のはそれを描いてみ。
このとき、私はこれを描くつもりだ ここでスタック上の赤、そして、私たち
があります -
OOH！
申し訳ありません。
だから、今回はと呼ばれるものを持っている バッファ、および、スタック上にある。
正しいですか？
そして、我々は最初に、その中に保存している。
>> その後、我々はfread関数への私達のコールを持っている。
どのような関数freadはそれからバイトを取りますん 私たちのファイルをどこかにそれを置く。
それはどのようなに入れます 事はを指しています。
まあ、我々はこのアドレスを持っていた前に -
0x0の。
今、私たちはどのようなアドレスを持っていますか？
>> 学生63：ものは何でも アドレスバッファです。
>> JASONハーシュホーン：ものは何でも アドレスバッファです。
それはおそらくになるだろう そのような何か。
おそらくBを開始する予定と その後、F、および他の6を持っている
進数字。
関係ありません。
いくつかのアドレス。
そして、我々はインチそのアドレスを渡している
>> そして、我々は我々の1を置くつもりだ そのアドレスのバイトの事。
だから我々は我々の1を置くつもりだ ここで内部のバイトの事。
そして、我々からの書き込みしようとしている ここで、これまでの内部なのです。
誰もが疑問を持っていますか それはどうでしょうか？
誰がこのコードは動作します考えている？
>> あなたが考える場合は、手を挙げ このコードは動作します。
あなたが姿勢を取らなければならない。
そして、誰が、このコードは動作しませんと考えている？
手を上げます。
他のみんなは、あるべき 手を上げ。
[OK]をクリックします。
マイケル、あなたはどこに立っている？
>> マイケル：私が決定することはできません。
中央での一種。
>> JASONハーシュホーン：あなたがしている 真ん中に。
1を選択してください。
>> マイケル：私は信仰を持っています そしてそれが動作すると言う。
>> JASONハーシュホーン：わかりました。
あなたが信仰を持っているし、それが動作すると言うでしょう？
何が起こったのか？
>> [声を挟ん]
>> JASONハーシュホーン：いいえワンセグ障害。
どのようにしているかどうかを確認することができます 二つのことが等しい？
2つのファイルは同じである。
>> 学生64：デフ。
>> JASONハーシュホーン：デフ。
間の違いのための差分をチェック 2つのファイルで、それを返した場合
何も、それらが同一じゃないんだ。
我々が開いている場合と、我々は我々のファイルを取得します。
だから、正解でした。
それをもう一度振り返ってみましょう。
私たちは、実際にさえしませんでした それを初期化する必要があります。
>> それはおそらく、少しなり あなたは入れていなかった場合クリーナー
そこにランダムなもの。
ポイントがあること、あなたが作成するために必要な から何かを保存するためのいくつかの領域
関数freadと何かを取る fwriteの外。
そしてそのことは、地元のどちらかでなければなりませんでした スタック上の変数 - もし
いくつかの領域をmallocしていたかもしれない。
>> だから我々は、実際に持っている可能性が ここではmallocを書かれており、
それがうまくいったのかもしれない。
そして、我々が保存されていたであろう どこかヒープ上の私たちの事。
しかし、これはおそらく、実際には、 最もエレガントなソリューションを提供します。
ただスタックにいくつかの領域を作成する これらの事は行くの。
>> 私は、他の2つの意見があるだろう。
あなたはこのターンを取るとしたら、と その後、私のコメントは、これに得点を取得
次のようになります。
これらの1はここに、私に​​は、見て マジックナンバーのような。
この1、関数freadの観点から、 理にかなっています。
つまり、ものの数だ 読み取りまたは書き込みを。
>> しかし、右こここれはすべき おそらく何か他のものであること。
だから、一つの解決策は何ですか？
>> 学生65：バイトのサイズ。
>> JASONハーシュホーン：そのような？
>> 学生65：文字のサイズ。
>> JASONハーシュホーン：文字のサイズ。
ええ、バイトはタイプではありません。
char型の作品のサイズなので。
私たちは、の一番上に、可能性がある 我々のコード、＃はそれを定義した。
何かバイトと呼ばれる それは本当にシャア。
実際に、より良いアプローチ このだったかもしれない -
UINT。
誰もがそれが何であるか知っていますか？
>> 申し訳ありません。
私は後方にそれを持っている。
いや、待ってください。
それはどの道を行くのですか？
誰もがそれが何であるか知っていますか？
うん。
>> 学生67：標準化を支援することになって そのシステムの事間で
持っている - の符号なし整数のよう 8バイトを持っている？
>> JASONハーシュホーン：それです。 まったく正しい。
異なるマシン上で、 文字のサイズ -
ではない通常の文字。
文字は通常1バイトである。
しかし、他のデータ型のサイズである 32ビットマシン上で異なるサイズ
64ビットマシンと比較。
uint8_tは常に8ビットです -
常に1バイト。
>> そして、私はそれを含める必要が 標準INTヘッダファイル。
だから今、これはおそらくあったであろう このコードを書くための最良の方法。
だから私は、マジックナンバーを取り除く。
そして私はまた、より論理的を持っている バッファのタイプ。
それは、それがバイトで、単に文字ではありません これは、我々はそれがために期待するものである。
>> そしてここに、私たちは実際にしました もう少し堅調​​に推移して。
我々は、これCHAR、それを呼び出していないしている -
多分、誰が知っている - 異なる可能性があります 異なるマシン上のサイズ。
私たちは、実際に、これは正確に言っている 1バイト、常に、何があっ。
我々はここで見れば、我々は、CPを作る。
おっと。
何が起こったのか？
>> 学生68：これは、スイッチングされる可能性があります。
>> JASONハーシュホーン：何？
>> 学生69：これは？
>> 学生70：あなたはしませんでした タイプとして定義します。
>> 学生71：しかし、それが必要 標準で定義される。
>> 学生72：何が起こっているの？
>> 学生73：すべて大文字であることを定義する必要がありますか？
>> JASONハーシュホーン：だからそれは＃定義されていません。
実際に、この場合には、私は今 typedefを使用する予定。
私たちは、それを使用しているので、 1場所を入力します。
したがって、この場合には、実際に必要に 我々は新しいタイプの印刷をしているようtypedefを
バイト、それは、本質的に、これである。
これは、＃defineをより少し違います。
>> そして今、私たちのコードが完璧に動作します。
だから、もう一度、第何かを取る定義、 どこでもそれを置き換え
他の事で。
それはちょうどマクロの -
マジックナンバーを取り除くために速記。
しかしこの場合、ので、我々はしている タイプとしてそれを使用して -
ちょうどここ -
それが動作するためには、我々は必要とする どんなバイトをtypedefをすることである。
>> そして、我々はここにそれを定義している。
それは、それが実際だ構造体ではありません ただ符号なし整数。
これは、1バイト長です。
このコードは、オンラインで利用可能であること、およびます みなさんは今、それを持っている必要があります。
>> だから我々は持っている -
完璧な -
13分には行か左 以上の問題は、5を設定します。
私は一緒それなのに中を歩くしたい、 そして、我々は簡単に説明します
その他の部分について 問題のセット。
だから私はcopy.c.をプルアップしましょう
とクールなことは、私たちが実際にした、ある 既に多くのコードを書かれて。
>> 我々だけで、文字通り書いたコード 私がいたとき、ここから出てきた
自分でこれを書いて。
しかし、これは、それなのにある基盤を形成している の最初の2つの部分のために
whodunit.cに設定された問題で、どの あなたが書く必要があり、かつすか。
3番目と最後でRecover.c、 問題セットの一部ではなく、
このファイルのオフに基づいて。
>> そのファイルを書き込むことが必要になるだろう、 私たちはあなたに、そのためのテンプレートを提供
ファイルが、それは何の関係もありません copy.c.を行うには
しかし、それなのにがための基盤であるため、 我々は行っている最初の2つの部分、
今それを歩いて、それで、あなたは持っている それが何の良識。
>> とコメントは、それのいくつかを与える。
我々はすでに、こののいくつかを書きました。
まず、確認しています 我々は3つの引数を取得します。
次に、ファイル名を覚えています。
だから我々は、このステップをスキップしたとき 我々は我々のものをコード化された -
とき私たちのCP。
しかし、ここで、彼らは作っている そのビットクリーナー。
>> 彼らは確認するチェックしている 両方のファイルは、良いです
それらを開くことに加え。
我々は今、すべてのコードを書いたので、私はよ このコードにこだわるつもりはない。
次へ特定のいくつかのものがある 我々は使用しているファイルの種類、どの
ビットマップファイルです。
ビットマップファイルは、いくつかのメタデータを持っている それらに関連付けられている。
>> だから、バイトの最初のカップル ファイルをご紹介。
彼らは色ではありません その画像のピクセル。
彼らは、ファイルをご紹介。
そして、あなたは、問題セットを読み込む場合には、 あなたは多くの情報があるでしょう
メタデータ構造のどのような種類について ビットマップに含まれています。
>> 我々が最初にこれを持っている理由、それはだ 右ここにこのコード - のセット。
我々は、メタデータを読んでいる -
メタデータの2枚 - ファイル ヘッダとInfoヘッダー。
そして、我々は、それの一部をチェックしている それが真のビットマップファイルであることを確認してください
続行する前に。
>> そして再び、これらの詳細は、我々は 今に行く必要はありません。
問題セットを読み込む場合は、 あなたはこれらを理解します。
長い話を短く、これらはただ言っている、 これは、ビットマップファイルであり、かつ
ことを確認した。
>> 次に、我々はそれらを書いている outファイルに。
ここではそれを参照してください。
私たちは、外ポインタに書いている。
次に、パディングを決定している。
だからもう一度、ASが特定のものである ビットマップファイルは、いくつかの行は、
最後にパディング。
そして、あなたは、問題セットを読み込む場合には、 あなたはパディングについての詳細を学びます。
これは、パディングを見つけるための式である。
>> 覚えておくことが重要 -
あなたはビットマップのサイズを変更するとき ファイル、埋め込みが変更。
あなたのサイズを変更すると ファイル、埋め込みが変更。
それがあることを行ったことがないだ 3より大きい -
それは、3を通じて包括的0になるでしょう。
しかし、あなたはのサイズを変更するとき 何か、埋め込みが変更。
>> 私は、その行に1画素を持っている場合は、私 、パディングの3バイトを必要とするので、
各行には、4の倍数でなければなら ビットマップファイルにバイト長。
しかし、私はそれを倍にした場合、1画素から行く つの画素に、それぞれが、
それでは言わせて、バイトが、私は必要とされている 作るためのパディングの2バイト
4への等しい。
>> だから私は、何かのサイズを変更すると、 私は量を変更する必要があります
パディングの私が持っている。
それはすべての人に意味があるか？
次に、それぞれの行を反復、 またはすべての行を通して。
そして、我々は、繰り返し処理 各行の各列。
我々は次のように、このビットマップを処理しています 我々は治療したように、グリッド、
15ボード。
>> のような、我々はレンガを処理したとき 我々は、画面上に印刷された。
行と列のグリッド。
その後 - 私たちはこれを見た。
私たちは、実際には、これをコード化された。
我々はいくつかの一時的な記憶を作成しました。
我々はそこに読み込まれ、 我々はそれを書き出す。
これは我々だけでまったく同じものです。
>> 私はそれぞれの行を言ったので、次の 我々は、いくつかのパディングで終わる
そのパディングをスキップ -
古い詰め物。
そして、我々はそれを再度追加。
このケースでは、作成している 同じ正確なファイル。
我々はそれをコピーする。
したがって、この行は、愚かなの一種である。
私たちは、文字通り可能性 インチパディングを入れる
>> しかし、あなたは、ファイルのサイズを変更すると、 あなたはまだ、この行をしたいですか？
我々は、ファイルのサイズを変更するようにした場合、 我々はまだスキップしたいです
古い詰め物の上？
>> 学生74：はい。
>> JASONハーシュホーン：だから我々は何。
これは、再度、情報理由 ソースファイルと。
私たちは、詰め物を気にしない ソースファイルから。
私たちは、次の行に移動したいと思います。
しかし、我々は単純に入れない パディングの古い額。
我々は戻って配置する必要があります パディングの新しい量。
>> だから我々はサイズを変更しているとき ファイル、我々はまだ飛ばしたい
古いファイルのパディング - どのような 我々はから読んでいる。
しかし、我々が書いているものを、私たちはなるだろう 別のいくつかを元に戻す必要があるために
パディングその数 我々が決定しました。
うん。
>> 学生75：それらの2の順 ラインが​​右、問題ではない？
あなたが処理しているので、 異なるファイル。
>> JASONハーシュホーン：その通りです。
これら2行の順序 関係ありません。
我々は、この行を書き込む。
これは、ファイルのためにここにある 私たちは、に書いている。
これは重要ですので、取得 パディングの適切な量。
これは、ファイルに対処しなければならない。
我々は権利をスキップする パディングオーバー。
>> 私たちは読みたくない -
我々は時間のバイトを読んでいるならば、我々 これらのパディングバイトを気にしないでください。
私たちは、次の行に移動したい。
ついにルーシーは私たちのためにささげられたように、 我々は、ファイルを閉じて、0を返します。
だから、これはcopy.c.です
そして、我々は実際に書いている - 私たちは、ほとんど見られなかった 基本的に、これを書いてください。
>> あなたはこれを作りました。
だから、うまくいけば、良識を持っている ここで何が起こっているの。
大きな違いは、正直なところ、ちょうどあり 扱うこの最初の部分
ビットマップファイルの特殊性。
だから、私は、次のスライドのように持って、 我々は何をすべきかが必要なのですか？
さて、推理小説を考えてみましょう。
>> そして通読誰かのために 我々は何をすべきか、問題のセット、
推理小説に行う必要がある？
単純に。
Aleja。
>> ALEJA：あなたが一部を取り出すことができ 赤を表し、各ピクセルの。
してから -
のようなもの？
>> JASONハーシュホーン：わかりました。
したがって、各部分を取り出す 赤表すピクセル。
それは近いですが、すべてではない、それは。
>> 学生76：まあ、あります それを行うにはさまざまな方法。
>> JASONハーシュホーン：わかりました。
私に1道を譲る。
>> 学生76：すべての赤を取り出し、 その後、青と緑を強調。
>> JASONハーシュホーン：わかりました。
だから、これらの両方の方法で指定された -
我々はそれを、ピクセルを与えるようにそれはそれ、聞こえる 赤、青、緑のレベルを有する。
我々の相対的なレベルを変更したい 応じて、赤、青、緑
そのピクセルに。
このコードでは、変更する必要がどこに 相対的な赤、青、緑
与えられたピクセルのレベル。
我々はそれを読んだ後に -
我々はそれを書く前に？
私に行番号を付けます。
>> MULTIPLE学生：83。
>> JASONハーシュホーン：83。
そうちょうどここ。
推理小説の場合は、コードは次のことを行う必要があり 書き込みはすべて、すぐそこに行く必要があります。
そして、それはコードのみです あなたが記述する必要があります。
私たちは、あなたがする必要がある内容のすべてを聞いたように、理由 行うには、相対的な青に変更され、
各画素から、赤、緑のレベル。
>> あなたはそれを中で読んだ、と今あなたがしている それを書くつもり。
どうすれば入手できますか - 私はこの事を持っている場合 右ここで、トリプルと呼ばれ、のだ
タイプRGBTRIPLE -
まあ、我々はbmp.hに見えた場合には、 RGBTRIPLEは何ですか？
>> 学生77：それは構造体です。
>> JASONハーシュホーン：RGBTRIPLE 構造体です。
私たちは、右下のここにいることがわかります。
そして私は、たとえば、アクセスしたい場合 私はどのように構造体の赤のレベル、
この構造体の赤のレベルにアクセス？
>> 【分類雑音]
>> 学生78：RGBTRIPLE.rgbtred？
>> JASONハーシュホーン：それは正しいですか？
>> 学生79：それは、トリプルでなければなりません 代わりRGBTRIPLEドットのドット、？
>> JASONハーシュホーン：トリプル。
トリプルローカル変数なので、 ここに、ここにはポインタがありません。
だから我々は、単にドット表記を使用しています。
これは私の赤のレベルを提供します。
私はそれを変更したい場合は、私はちょうど設定 それは別のものに等しい。
だからもう一度、このコード行は、アクセス このこの構造体の内部変数、および
私たちは、何か新しいものに設定することができます。
>> そう推理小説のために、再度、これは、 本質的に、私たちは何をする必要があります。
非常にシンプル。
単にいくつかの相対的なレベルを変更し、そして そのコードがどこに行くかこれは。
一方、サイズ変更、 少しトリッキーです。
実際には、サイズを変更すると考えられる この問題のトリッキーな部分は、設定してください。
我々はその上に行くために3分している。
>> しかし、再び、我々はすでに書いてきた このコードのほとんどので、
かなり精通している必要があります。
我々が何をしたいいくつかのことは何ですか あなたは上の読んでいれば、サイズ変更
問題は、設定されていますか？
あなたは私にそれらを与えた場合、我々は それについて話すことができます。
私たちがやりたいいくつかのことは何ですか？
>> 学生80：垂直 -
だから、水平方向のサイズを変更する必要が しかし、垂直方向だけでなく、サイズを変更？
>> JASONハーシュホーン：だから我々が与えられている場合はA ピクセル、私たちはすることでサイズを変更したい
2倍、それは今である必要がある 水平方向にサイズ変更やサイズ変更
縦に。
それは理にかなっていますか？
うん。
だからおそらく 最大の課題。
そして、我々は秒でそのことについて話します。
うん。
>> 学生81：私はそれを考えているよう あなたはそれをプリントアウトに必要だった -
>> JASONハーシュホーン：待ってください。
あなたが何をしたか教えてくれません。
私たちは、ロジックで話をするつもりだ。
>> 学生81：わかりました。
質問は何でしたか？
>> JASONハーシュホーン：だけ あなたの手を上げた。
に疑いはありませんでした。
私はそれを提示してみましょう。
私はちょうどこの簡単に説明しましょう​​。
だから我々は我々がしたい、1ピクセルを持っている それを複製し、水平方向にも
縦に。
理想的には私たちがここで何をすべきか、我々は、ある 私たちの画素内に読み、私達はそれを書く
時代のしかし、多くの。
>> しかし、我々は、ここで我々のトリックを持っているので、 その後、我々はに進んでください
次の行とでそれを書く 次の行の先頭。
だから我々は両方を複製する場合 水平方向および垂直方向に、何
そのための一つの良い方法 -
良いものは、しかしそれを行うには？
だから我々は、常に追求する必要はありません 私たちのファイルに状況を配置します。
>> その質問にはいない可能性があります 意味を成していたが、私は思う
それに答えるのに役立ちます。
>> 学生82：配列を作成しますか？
>> JASONハーシュホーン：それでは、考えてみましょう 行として、各ファイルの。
の行の観点から考えてみましょう。
私達は私達の小さいものから私たちの最初の行がある場合 絵、我々はその行を行うことができます
大きい画像からの大きな行に、 して、しかし、その行を複製する
それが複製される必要がある何回も、 むしろ画素毎に行くよりも、
その際に、混乱を取得 ファイルを扱う。
>> 我々が持っていた場合、以下の原因 -
私は、スペースが不足しています。
これは我々のファイルであり、我々はそれを持っている場合 そこに1ピクセル、そして我々はそれを配置する
すぐそこに、我々はまだいくつかのものを持っている 私たちがしているときにあそこに行くには、その必要性
書き込みと私たちの新しいファイルを作成する -
倍大きいです私たちのファイル。
>> しかし、それは、ファイル機能とは本当に難しい 新しいラインにまわりスキップする
そのようにしてから、ここに戻って そこにものを入れる。
それが何かをすることはほとんど不可能だ そのような、それは理にかなっている場合。
我々は、行の観点から考えるのであれば、我々はできる 我々の行を取り、次いでそれを置く -
垂直方向の行を複製します。
>> そして、それは我々がサイズ変更に対処する方法を説明します 水平方向ではなく垂直方向。
それはちょっと速かったし、 少し混乱。
残念ながら、私たちの時間がアップしています。
私はあなたのそれらのために外に立つ ここについて質問がある人
回復を含め、問題のセット。
>> それでは、今のところ延期しましょう​​。
そして再び、ご質問がある場合には、 私達は外でチャットすることができます。