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ピクセル、そして我々はそれを配置する すぐそこに、我々はまだいくつかのものを持っている 私たちがしているときにあそこに行くには、その必要性 書き込みと私たちの新しいファイルを作成する - 倍大きいです私たちのファイル。 しかし、それは、ファイル機能とは本当に難しい 新しいラインにまわりスキップする そのようにしてから、ここに戻って そこにものを入れる。 それが何かをすることはほとんど不可能だ そのような、それは理にかなっている場合。 我々は、行の観点から考えるのであれば、我々はできる 我々の行を取り、次いでそれを置く - 垂直方向の行を複製します。 そして、それは我々がサイズ変更に対処する方法を説明します 水平方向ではなく垂直方向。 それはちょっと速かったし、 少し混乱。 残念ながら、私たちの時間がアップしています。 私はあなたのそれらのために外に立つ ここについて質問がある人 回復を含め、問題のセット。 それでは、今のところ延期しましょう​​。 そして再び、ご質問がある場合には、 私達は外でチャットすることができます。