[Powered by Google Translate] [♪ブンブン♪] だから私は、画面上に持っているものを紹介したい。 それは我々が夏の間に開発されたツールの一つだ。 それは、CS50スペース​​と呼ばれています そしてそれは私たちの共同コーディングアプリケーションだ 私たちはセクションで使用しようとしている。 それはかなりクールだ。 あなたのうちのどれかはまだCS50ランを見たことがありますか? 私は別のタブでそれをプルアップしましょう​​。 Run.cs50.net そう あなたはrun.cs50.netに行けば、 あなたは、これが使用しているブラウザの方法であることがわかります 実際にコード - 、Cコードを書く その後、それを実行 ので、それは両方の、あなたへの出力を返した後、それを実行し、それをコンパイル ので、これは実験するクールな方法の一種である ダビデは講義で上行くことコードの一部も そして我々は、問題のセットであなたにに与える 実際にアプライアンスを起動する必要がなくなります。 だからスペースが何をすることは別物だ 私は、このタブに切り替える場合は、 あなたがここに見られるようなスペースは、CS50実行です しかし、我々は上にスクロールして、窓の向こう側を見れば、 あなたは、私はこのスペースでの唯一の人だ右を参照してください。 しかし、私は何をするつもりだと、君たちは私と一緒にこの空間を参加するようお願いしている そして我々はすべて、同じ小さなウィンドウを開いてコードを取得します 、お互いにコードを共有 そして我々のコードとの違いについて話しています。 だから、クールなもののようなものだ - 最上部で右ここにこのリンクを訪問するので、もし参加する 私が強調したこと、 あなただけapps.cs50.net/spaces/vqcspSnOを入力することができます。 オフを開始するので、すべての権利、 私はあなたにこのツアーの少しを与えるつもりだ。 我々は、最初はそれをいくつかの愚かな小さなコーディングを行うつもりだ ちょうどので、みんながちょっとそれはどのようなものかの感触を得ることを、 しかし、私がやった - または私は右ここで何しようとしてだが - 私は、私がここで書いたコードを取るつもりだ あなたが今見るようになると、空です。 それは何もしません。 それはちょうどボイラープレートコードだが、我々はそれを呼ぶことにします。 コメントを行うことがほとんどである。 私はこの[保存]ボタンを押すことで、それを保存するつもりです。 そして、どのような行いは、それである ここでは簡単にそれを強調 - リビジョンがある緑色のボックスを保存しておくこと、 そして今、あなたは、宇宙で私のために検索した場合 あなたは、私の名前をクリック あなたは、私は右ここにこの改正を持っていることがわかります、 そしてあなたは、そのリビジョンをクリックすると、 それはあまりにも、あなたのスペースにそのコードをロードします。 だから誰もが自分のスペースにそのコードをロードした? すべての権利は​​、あなたがまだ持っていない場合は、先に行くとそれを行う、 そして私はあなたたちがセクションを実行するには、この少しに何をしたいのか 、自分自身についてのprintfを使用してちょっと書いている ので、例えば私のように記述します のprintf( "私の名前はネイトである"); そして私は書くだろう "私は2009年に卒業 スタンフォードから " と私は聞いてみたい あなたは、学校で何年です あなたは大学やビジネススクールにいるかどうか または別のハーバード学校、 それがまだ知られていた場合、あなたは何を勉強している; それが知られていない場合、それは完全にクールだ。 私は2年生の後半になるまで、私は決心した。 その後私も知っているのが大好きだ あなたが私に教えたりしたいクレイジー何 クラスまたはちょうど何かについての何か。 あなたがそのあなたの少しのprintfで書き込みが終わったら、 あなたは、リビジョンを保存するか、むしろあげるなら 最初に、それを実行できることを確認 そしてそれはあなたがそれをプリントアウトしたいかを正確に出力している、 その後あなたが先に行くと、そのリビジョンを保存した場合 リビジョンSaveボタン、こっちに、この最初の小さな男を使用して、 そして我々はちょっと通過すると少し導入をそのようにするつもりだ。 だから、あなただけは、再生ボタンを押さなければならないはず 左上にここにいる次第ですが、 左上に、この再生ボタンができるようになるので それがコンパイルされ、実行されるところ、弊社のサーバーにコードを送る。 だから、このことについてちょっとクレイジーは何ですよ このコードは、実際にコンピュータ上で実行されていません。 それは実際にインターネットを介して送信されている。 それはどのようにシャーロット、起こっているのでしょうか? 私>> - 大丈夫。 - 私は - 私はだと思う それを保存する問題を抱えて それができるようなサーバーで - 私はプログラムを実行することができます。 そして、私はそれを実行しようとすると、エラーがあることを述べています。 もうそこにはないウイルスのように宣言。 ああ、見てみましょう、あなたは再び保存を打つことができる? 私は、画面上でそれを参照してください。 >>は右、大丈夫、だからそれは私が持っているものだ。 それは私がそれを実行することはできませんなぜ、私は知らない。 大丈夫、あ、ごめん。 それに働いていなかったもの - 何が間違っていた - なぜあなたは説明できますか? >>ええ、私は変数がまだある最後の行があったことを見なかったので、 私はそれがそこにあることのために意図しなかったと宣言していなかったこと。 うん、完璧! 私はそれを保存した場合>>さて、私はそれが動作するはずだと思う。 今、あなたはそれを保存したこと、それが動作し、素晴らしい。 そんなわけで、私たちは通過するように - ので、何が起こっていた、 私はちょうどカメラのためにこれを繰り返すつもりです。 何が起こっていたことだったこの変数s 後に残っていた - 私はあなたには、いくつかの他のものを削除したと仮定 あなたは、のように宣言された場所 ので、これは物事をオフに投げていたし、それを実行せませんでした。 だから、これは私たちがセクションでやりたいものを正確になります 、人々が異なる複数のコードを書いて試してみるさ それをコンパイルして、働くか、しないかを見る これらはつまずくポイントであるため、その後ちょっと、これらの事について話している 私はまだ遭遇し、 それでも私は - 私は愚かなもののすべての時間の多くを行う、 それが動作しない理由を、私は知りませんが、 それでは、シャーロットのリビジョン3をプルアップしてみましょう、 そして我々はそれを実行することになるでしょう。 だから私は今、私はここで彼女のコードを持っていること、実行したときに、 私は、[実行]ボタンを押して、ズームすることができます アップロードし、それを構築し、それを実行する 私はスクロールダウンする場合、それは、正常に実行された、と言う シャーロットは、アダムスハウスでの後輩で見 心理学、経済学の二次、素晴らしい。 あなたに会えてよかった! 恐ろしい。 さて、上を移動する、のはダニエルに行こう 、リビジョン3に行く コンパイル、実行。 なぜあなたは、自分自身について私たちにダニエルを少し教えてみませんか? >>私ダンコール。 私はあなたたちの向かいにビジネススクールに行こう、 と私は、ここの前に海兵隊にいた これがええので、私にすべての新機能です。 気を悪くしないでください、私は30だと私はこのようなもののいずれかを知らない。 素晴らしい、感謝、ダン! すべての権利、私たちは別のダニエルを得た。 あなたはダニエルで行く - あなたは、ダニエルが自分自身を紹介します? >>確かに、私はダニエルです。 私は今、マザー二年生だ。 私は政府に集中している、 私はクラスの素晴らしいレビューを聞いたので、私はCS50を取ると思った と私は前にCSを試したことがない。 ここで下にスクロールして、このことを示す - クール。 ジャレド、上を移動する。 調子はどうですか >>良い、お元気ですか? あなたが見ることができるように、私は、エリオットの後輩哲学コンセントレータよ もともと南カリフォルニアから、 私はそれの論理が好きなので、私は、CS50を取るに興味がある そのように、コンピュータ上で物事を行うには本当にクールなようだ。 恐ろしい;南カリフォルニアにあなたはどこから来るのか? から約1時間>> [聞こえない]、小都市[聞こえない]。 ああ、うん、私の父はレッドランズからだ。 クールなもの。 すべての権利は​​、ジミー、それがどのように起こっている、ジミー? >>良い、お元気ですか? かなりよくやって! あなた自身について教えてください。 >>私は一年生だし、私は私が専攻してるか全くわからない しかし、私はちょっと経済に傾いている。 ダニエルのように私の前に、私は、CSをやったことがないが、それはちょっとクールに聞こえる。 私はシカゴ出身だ。 恐ろしい。だからここに彼のプリントアウトをチェックアウト。 あなたが予想通り私がお聞きしたかった、これはプリントアウトしたのですか? >>いいえ、私は新しい行を印刷し忘れていました。 私は実際に私が私のことを書いていたことを忘れてしまったとき 初めて、あまりにも。 これは、手動でそれらを置くことを覚えておくことが痛みのようなものだ。 それだけで、それはあなたが何を望むかを知っているなら、それはいいだろうと思う。 さて、ケリー。 うわー、私たちは2ケリーズを持って、2ダニエルズ、ケリーズ2。 だからケリー - あなたはケリー漣で行くのですか? さて、素晴らしい。 またはケリーは、私は意味。 の>>そうそう、私はケリーだ。 私はPfoho 2年生だ。 私は、私はまだ私の集中力を宣言するための7週間を持っていることを今日メールをもらった ので、私はそれを考えないようにしようとしている、 と私は実行している、とCraisins、ベーキングが好きです。 私は、CSのほとんどの経験を持っていない; 私は本当に若かったとき、私は、Webサイトを構築するために自分自身を教えた しかし、私はおそらく多くの時間自分が間違って教えたと思います。 うまくいけば、私はもう少し学びます と - ええ。 素晴らしい、よく、ありがとうございました。 のは、他のケリーに行こう; 私は何も持っていない - あなたはここで何かを言いましたか? >> [聞こえない] 言った通りだろ。 甘い! >>すべての権利、私はケリーだ。 私は最初の年の大学院生です。 私は心、脳、そして教育を専攻しています。 私は2008年にフランクリン&マーシャル大学で卒業 心理学と社会学を専攻と とフランス語でマイナー。 私はCS50を取っている 私は、神経科学の博士号を得ることに興味があるため と私はこのように私は、使用されている技術を理解するのに役立ちます感じる。 恐ろしい。 ミカエラ、上を移動する。 その正しい発音は何ですか? さて、素晴らしい。 >>私はMikhailaよ。 私は、カークランドハウス2年生だ と私は機械工学の集中している。 私はこの夏、自転車を構築し、サイクリングを本当に好きだ。 私は、実際には、CSを取っている 濃度の要件として、 しかし、あなたが知っている、私はそれはまだエンジニアリングクラスのクールなものだと思います。 素晴らしい - あなたがこの夏に自転車を構築しました? >>うん。 うわー、フレームとすべてのことが好きですか? >>ええと、ウーン(肯定)。 うわー、それは本当にクールだ。 >> [聞き取れないオフカメラチャット] [笑い] うん、それはとても久しぶりだ。 あなたが権利を知っていることはない? まあ、クール、よく感謝、Mikhaila。 すべての権利は​​、ミッシー。 >>私の名前はミッシー、私は一年生だけど、 ので、私は何も知らないことですよ! 私は、天体物理学に専念したい。 CS50で、 間違いなく助けになるだろうような気がします。 私についての奇妙な事実は、私は全国的に認定された消防士じゃないですよね。 ワウ! それはどのように起こるのですか? >>私はアカデミーに出席 と週の多くのために地獄を経験した と私の認証を得た。 うわー、おめでとう! それは確かなことは、大したことはありません。 さて、今、私たちは私をやる。 私は行の次の一人です。 - 私 -​​ それを実行します。 だから私の名前はネイトです。 私はスタンフォード大学の2009年のクラスだった。 私は、主要なシンボリックシステムだった これは、ここに心、脳、行動濃度に類似している それはのミックスのようなものだ 計算機科学、言語学、心理学、哲学。 一種の - ええ、奇妙なものの多くが、それは偉大だった、 そして私も、そこにコンピュータサイエンスの修士をしました。 だから私は今年ハーバード大学に新たなんだ。 私は本当に教師になると思った。 私はスタンフォードTA-るコンピュータサイエンスのクラスでの最後の4年間を過ごした そしてダビデは、私が上に来るように と私は、CS50を手伝ってやること ので、私はこのフルタイムを行う、私は大学院ではない。 それは楽しかっただ。 うまくいけば、それは楽しみであり続けるだろう、私はそれを確信しています。 すべての権利、サム。 >>私の名前はサムであり、私は大学二年生だけど、法律で具体的に。 私の専攻は、おそらく、科学の歴史である、と二VESます そして私の好きな​​色は黄色です。 いいえ判決または何かを渡す必要はありませんが、それは良い色です! とステラ。 >>こんにちは、私はステラだ、私はグレーの新入生だ。 私は、私はまだに集中してきたものか見当もつかない そうCS50は、ランダムだけの種類だった これは面白いです。 楽しい事実、ジミーは、私の最初のハーバード大学の友人だった 我々は、シカゴから両方だから。 クール、グレース - 本当に素晴らしいものになるはずだよね? >>私は[聞こえない]と思った。 ああ、うん。 [聞き取れない/オフカメラチャット] さて、私は今でもまだ勉強中、勉強しています。 だから我々はここで興味深いのようなものだ何か他のものを持っている。 ええ、私は思ったんだけど、あなたはここで何が起こっているのアイデアを持っているのですか? あなたはこれをどう解釈するか知っていますか? >>私はすべての単一の行の後にセミコロンを置くことになっていた。 それは痛みのようなものだ。 時には、それらのセミコロンは、追跡する本当の痛みをすることができます。 だから、結局その 我々は今年に使っている特別なプログラム 私達のCコードをコンパイルすると、Clangの呼ばれ 我々は今年Clangのを使用し始めている理由 - 我々は過去に、そのプログラムを使用していないので; 私たちは本当に人気があり、GCCと呼ばれる別のものを使用しました - Clangのは、実際にあなたに意味をなさないエラーメッセージを与える。 この1つは、 "予想 ';'式の後"と書かれており、 と言っても、あなたがセミコロンを必要とした後、式を指示します。 だから、それを修正している? たった今>>うん、。 素晴らしい、私が知っていると我々はそれをプルアップします、そして我々はそれを実行することになるでしょうしましょう​​。 しかし、ええ、これらのセミコロンを置くことは痛みの種類です。 私はそれを修正しました>>ので、私はそれが動作するはずだと思う。 素晴らしい - リビジョン3。 それはそれのように見えます。 だから今我々はそれを実行する場合、すべての権利、、 そこに行く。 クールなもの。 かしこまりました。 そうすることをやってくれてありがとう。 それはあなたたちを満たすために素晴らしいことだ。 我々がやるつもりだ何が今、次の少しを費やしている セクションの問題にちょっとダイビング 今週から設定問題から来ている そして我々はセクションのほとんどのためのことをやる 任期の残りのために、 それから私達は、20分ほど最後の15を保存します 問題について話をするために自分自身を設定する その後、クラスに関する一般的にちょうど他の質問がある。 それは私たちが本当にしたいが何を言った みんなが参加しているされている Spacesのものを使用して、 、提案で投げ、コードで投げる 物事はこの休憩を好きなときにとの話 それとも、これらはそのものですので、動作しません 私が出会った知っている 私は、コーディングを始めたとき、 そして時には本当にちょっとイライラだった それは午前2のようなものだ場合、あなたの問題のセットが原因である前にあるので、 そう - ちょうど開示について、 私は大学2年生になるまで、私はプログラミングを開始できませんでした。 それは、この奇妙な、未知のもののようなものだった 私はちょっとクールだったと聞いている そして私もそれはお尻の本当の痛みかもしれないと聞い セミコロンを欠場、それが働いてからプログラムを保つ唯一のエラーだ場合 と寝るからあなたを保つ、 ので、間違いなく、 あなたはそのような質問がある場合は、 あなたがそのような懸念がある場合、私に知らせて、 私はこの皆さんのために良い経験をするようにしたいので。 だから、あなたたちはすべての問題がまだ設定ダウンロードした? それがどこにあるかちょっと知っていますか?オーケー。 だから我々は、私がこのアカウントにそれを持っていないため、cs50.netに行くよ 、問題セットをプルアップ 問題セット2をプルアップし、我々は今日、標準版を見てみましょう。 我々はここで仕様をプルアップします。 下にスクロールします。 だから我々は質問のこのセクションを見て開始するつもりだ。 君たちはまだこれらのパンツを見たことがありますか? オーケー。 だから、ループ上のショートパンツがありますが、 これらはトミー、ヘッドティーチングフェローのいずれかによって行われます。 スコープ上の1つは、そこ 私はデイビッドという名前の別のティーチング·フェローによって行わ信じる その後シーザー暗号上の1つにはダビデによって行われます。 彼らはかなりクールだ。 君たちは今のところ彼らのパンツを見ている? 彼らはされてHow've? 参考になりましたか?さて、知っておくとよい。 そうでないなら、あなたはそのように言うことができます。 しかし、あなたが実行する前に、 あなたたちは、これらの質問を見てきました すべてでは? これについて少しお話しましょう​​。 だから我々は数週間かけて導入しました 講義で 異なるループの数。 forループは、あり whileループした後、do-whil​​eループ、 と講義の中で、我々はについて多くのことを話をしてきた これらのループはすべてアール方法 いろんな意味でかなり類似し、 そしてあなたは、whileループと同じものの多くを行うことができます あなたがのためにループを持つことができます。 あなただけの変数とそのようなものの正しい組み合わせを使用の種類があります。 など本当に ループのすべての間に本当の違いはということです 時には彼らはもっと便利だ 別の時に比べて、一度にそれらを使用する。 ですから、例えば、 whileループ、do-whil​​eループとは異なる。 彼らはときに良いのハンドルを持っているように、誰もが感じていない do-whil​​eループは、より 有用またはどのような違いは何ですか? >>私は差がdo-whil​​eループだと思う 実行 - 私は専門用語が全くわからない、 しかし、ループ内の一連の機能。 自動的に - それは、少なくともその実行を行います それは条件をチェック、またはwhileループは場合にのみ、それを実行する前に、 それは継続的に実行 - の条件が満たされているかどうか。 ええ、それは意味をなさないのでしょうか? のは、コードを少し見てみましょう。 だから、質問を繰り返す または答えではなく、; 答えはということでした whileループはどうかを調べますif条件 あなたが満たされている、指定した それが初めてループ本体を実行する前に、 一方、do-whil​​eループは自動的にループの本体が実行され、 我々はそれと呼んでいます - それは奇妙な専門用語だが、 しかし、私が今まで意味をなさない何かを言うならば、私に知らせて - ループ本体は、中括弧の間に置かれているものです。 とdo-whil​​eループで、 その体は、少なくとも1回実行取得 それはそれぞれの連続した​​時間を実行する前に、次に条件が確認されます。 だから、実際、サム、 あなたは、単純にwhileループを書く気にしない Spacesで? >>どのようにあなたのようにソートする 新しいを作る...? 私はちょうどあなたがそこに持っているものは何でも削除できます。 うん、ちょうどそれをクリアしてください。 >>まあ、私は私がこれを持っていると信じて - その1あなたはしばらくの間、したいですか、またはしたいです...? 真ながらうん、ただ、何かをプリントアウトできます。 と見てみましょう。 アレクサンダーは、私たちはあなたを紹介しまし決して実現。 大丈夫です>>ああ、。 あなたはいけない - あなたは私たちのために、do-whil​​eループをコーディングすることができますか? >>ええ、私は試してみます。 すべての権利は​​、我々だけで、画面上にこれらをプルアップします に、どのような種類の違いが何であるかにハンドルを持つように。 だからここでは、サムが済んだものだ。 彼は私と呼ばれる整数を持っている 彼は17に初期化されていること。 それから彼は言っているが、(int型私= 17) のprintf( "私の名前はサムです。"); 我々は、このコードを実行するとどうなるでしょうか。 エラーがあり、エラーは何を言っているか? のは、それをプルアップし、それについてお話しましょう​​。 エラーが発生しました、それは言う。 のが下にスクロールしてみましょう。 だから、それは私たちにこのエラーが発生しました、そして、それは言った "ねえ、私は表現を期待していた。" それはちょっと不可解だ。 ええ、これを正確に - そして再び、 私達はちょうど第二に流行るだろうと別の小さなバグがあるでしょう。 しかし、これは奇妙な用語物事のそれらの種類の別の1つです ので、このint型私= 17 式ではありません。 それはやっているように見えるそれは何だです 私と呼ばれる整数を宣言する と17に等しくなるように設定 というか、私と呼ばれるintに17を置く。 そして、それは意味をなさない このwhileループのコンテキストインチ これから見るように、それは、意味をなさない forループの文脈では、ループ宣言を始めないので、 int型のために私が何かに等しいことと 延々と続く。 それで、あなたはやった - 何か、すべての権利を修正。 ここに行く、素晴らしい。 だから今、物事が少し違って見える。 物事のカップルが変更されました。 あなたは物事を変更したのか教えていただけますか? >>私はintを取り出したので、代わりの割り当ての[聞こえない]宣言はありません。 1等号の後に、私は2つの等​​号、等しい意味を置く。 恐ろしい。 ええ、そう、サムは何をしたか、彼はintを取り出した それは、以前ここにあった ので、私はちょうどこの見れば - これは以前あったものですが、それがintと述べ、 これは、それを宣言していた - 私たちは、型を取り出した。 int型、char型、文字列、短いが、あります それらは、タイプと呼ばれています。 だから、型を取り出した その後以前に、 彼はただのシングルは、等号をしていた と、彼の言ったことはこのことについては問題であった あなたが持っているときに1が、等号 それは代入演算子です。 それは2つのことが等しいかどうかをテストしていない。 それは実際に何かに等しい何かを設定することだ。 我々は、変数iに17番をつけて。 だから、比較のようなものを行うには、 あなたは二重に等しいを使用する必要があり、 これは奇妙なことの一種である が、かなり一般的なエラーです。 あなたが気にしないならそれでもうひとつは、私は、指摘しておきます それはである int型のmainでここに我々の関数、 あなたは私たちの関数の本体がわかり 左側からオフセットされている 4つのスペースまたはタブで。 我々はこれを行う理由 ちょうど、読みやすくするためです。 ここでサムのwhileループで見てわかるように、 彼は、まったくインデントしませんでした それはコードの機能には影響しません。 それはまさに同じように動作します。 ですから、例えば、我々はトップに出てくる場合は、ここ そして、それを構築していきます、私たちの再生ボタンを押す それは、それを実行することになるでしょう そして何が起こるだろう? なぜそれがまだ実行中で言っていますか? それはハイテク繰り返し続けるのだから。>> 正確に、そしてなぜそれがハイテク繰り返し続けるのですか? >>は整数では変化しないので、それは常に17です。 うん、まさに、そう した後、見てみましょう - もう一度お名前を思い出させる? ジミー。だからジミーは言わ これは何度も繰り返し続けハイテク理由 この条件が常に真であるためです。 我々は、iの値を変更することはありません。 私たちは、その変数に格納されているものの内容を変更することはありません。 だから、この時点で我々は、このエラーが発生したこと あなたのプログラムは、あまりにも多くの出力を生成 そして我々はここで何が起こっているのかを見下ろして見一種のスクロールすると、 あなたはそれを介してすべての道やあ、やあ、やあ、やあ、やあ、やあ、やあであることがわかります。 恐ろしい。 原点に戻ってのとても親切 ことは、ここでインデントを持つ whileループの本体には何も影響を及ぼさなかった。 プログラムはまだうまく走った。 一般的に良いスタイルのための - そしてこれは私達があなたの問題セットで探しているものです - 私たちは、あなたが行うことができます4つのスペースで、このインデントを設定するように依頼する ただTABキーを押すことにより、 または手動で4つのスペースに身を入れていました。 涼しい、大丈夫そうの前に戻って見てみましょう アレキサンダーのは、do-whil​​e。 >>ただちょっと少し問題が。 さて、井戸のはそれを介して動作することができます。 そのクールなのですか? >>うん。 わかりましたので、ここに私達は行く。 これはアレキサンダーが書いたコードです。 あなたはアレックスで行くのですか - 大丈夫。 だからここにアレックスが書いたコードは次のとおりです。 そこで、我々は、右ここにメインの私たちの宣言を持っている それから私達はこの整数変数iと呼ばれるんだ 右ここで宣言されている。 我々は、do文を持っている し、これらの括弧と再び身体、 ので、これはこれは、do-whil​​eの本体である - それが読みやすいので、私はこれにズームインましょう - そしてボディに、私たちは、 "これは本体である"印刷しようとしている i + +は、 ので、私の内容をインクリメントし、これを行う iが3であることを取得するまで、 その後、我々のプログラムは終了します。 我々はこのプログラムを実行するとどうなるでしょうか。 >>私は識別子を期待した。 わかりましたので、構築、実行、エラーが発生します。 何が起こりますか? 我々はここで下にスクロールし、 我々は、このやや不可解なものを探してもらう トップレベルの宣言の後にセミコロンを期待した。 これはちょっと奇妙だ。 誰もが何が起こっているかもしれないという考えを持っていますか? ちょっと奇妙な、うん。 >> [聞こえない]括弧の外で宣言することが? 括弧を使用する場合、適用しないようにしていますか? そこで彼は、その括弧の外でこの男を宣言? ああ、これらの人 - 中カッコ? >>うん。 ええ、その通りです。 だから、結局その あなたは、実際にこのように右ここに変数を宣言することはできません。 あなたは何をやろうとされている可能性がありました - そこからそれを切り取る - 次のいずれかを右ここで、中括弧内にそれを置くことができます または別の代替 それが完全に外に置くことです。 ので、これらの - あなたが実際に宣言を置く場所に応じて、 その整数変数の、 あなたは2つの非常に異なる種類の変数を取得することができます。 それがメインの外だとき、 それは我々がグローバル変数と呼んでいるものです。 これは、任意の関数の範囲外だ - それは、関数内ではない - 私たちは主の中にそれを入れた場合、一方、 右ここに好き、それは、ローカル変数と呼ばれています それがメインのスコープ内にローカルだから。 そして、我々は違いが何であるかについて、もう少しお話しましょう 2つのタイプの間で、なぜあなたは、異なる種類の変数を使用し、 しかし今のところ、 あなただけの、すべての変数をローカルに保持することができます 我々は、グローバル変数を特に必要としないためです。 わかりましたので、それはすぐそこに一つのことだ。 再びこれを実行してみましょう、何が起こるか見てください。 別のエラーを取得し、実行します。 少しズームで、私たちは何を得るのですか? 私たちはしばらく/した後で、この予想括弧を取得します。 何が起こっているの任意のアイデア?ダン? >>その後しばらく括弧その後です - あなたはint型を再宣言する必要がある場合、私は知らないが、 しかし、(I <3)やってます。 まさに、うん。 だから、ダンはまったく正しいということが判明した。 我々は再びここでは、この型を配置する必要はありません。 我々はその代わりにタイプを殺すことができる というだけのことを行う。 かしこまりました。 私は、戻ってズームアウトもう一回それを試してみます。 それを見て、それは成功したが実行されます。 我々はスクロールダウンすると、3回プリントアウト "これは本体である"。 これはかなり甘いです。 まあみんな、よくやった、やった。 よくやった。 これは、これまでどのようにして起こっているの? まともなペース? さて、涼しい。 だから、元の質問に戻っての我々は一種のように、 我々 - そして今、私たちは違いを見れば、 あなたは、このdo-whil​​eループでそれを参照してください。 条件が最後にくる。 コンピュータがプログラムを読み込んよう Cプログラムでは、この順番に種類の実行されるので、 彼らは文字通りメインの最初の行で始まる場合には、 その後、6行目、7行目、8行目、9行目を実行 10行目、11行目、 右ここで一番上にあるすべてのこのようなもの 一度だけ実行しようとしている 我々はこれまで見てこの条件をテストする前に、 かどうか私は - またはiの内容は、むしろ - 数3未満である。 そして、かつて私たちは、12行目を取得する場合にのみ iの内容が3未満である 私たちは実際に、7行目に戻ってジャンプアップか その後、プロセスを繰り返す それから私達は何度も何度も条件をテストします。 だから我々はこれを対比することができます 付き - バックアウトズーム、 、サムズバージョンまでスクロールダウンします 我々は、それはもはや無限ループのないように、少し変更され、これを見ているつもりだ - 我々はどこにズームインした場合、 我々は、このプログラムの実行時にあることがわかり それは、最初のint iを宣言するために起こっている 0になるiの内容を設定する そして、次に、それは、最初のwhileループの条件を打つ ので、この場合、この体、こののprintf( "こんにちは")とi + + ても実行されません 私は実際よりも2以下である場合を除きます。 iが3であれば、例えば、 我々はここでこの権利を設定した場合 4に等しい - または私は3を言ったので、私は、3をやる - その後、それを実行 それは、それは全く問題なく動作します、構築します それは実際に、何も表示しません それが最初のケースのためにそのテストを失敗したため。 だからクラスでは、我々の種類のは、これらがなぜdo-whil​​eループの話 時には便利です そしてなぜ我々はそれがwhileループとは対照的に使用することになります。 があります - あなたたちが何か提案はありますか のためのなぜdo-whil​​eループはより便利になるのでしょうか? まあ>>、私はこれは、do-whil​​eと思うあなたは、ユーザー入力が必要な場合はループがあり、 その方法は、あなたはそれらを聞かせすることができますので、 一度に何かを置く、それは正しいのであれば、 我々は、プログラムの残りの部分に移動することができます それが正しくない場合しかし、その後、ユーザーにプロンプ​​トを表示し続け あなたは正しい入力を置くまで。 うん、正確に - 正確に、 そうdo-whil​​eループは便利です ユーザ入力のプロンプト時に理由 あなたが実際にそれを確認することができます前に、ユーザーの入力を取得する必要があるためです。 だからPSET 1では、PSET 2では、 あなたは、ユーザー入力のために多くを求めているところ、 それは使用するために便利なことだ として単純なwhileループに反対した。 あなたは、whileループを使用している場合は、同じことを行うことができます - あなたは、whileループと同じことを行うことができます あなたは、do-whil​​eループで行うように。 あなただけの種類のこの重複プロセスを持っている必要があります あなたは、最初の入力を取得し、あなたのwhileループを始めるところ。 一方、do-whil​​eループは、一度だけ、それを記述する必要があります そしてそれは多くのクリーナーです。 かしこまりました。 何か質問? 理にかなって? 復帰>> 0 - ただストールのようなものだか、それである - ? ええ、そう私たちすることができます - まあ、我々はもう少し後で、これを取り上げる それがあることが判明 我々は置いたこのリターン0 主なすべての時間の終わりに - あなたはちょっとだけ私たちが行うものとしてそれを取ることができる 当分の間。 我々は機能と話をし始めました 種の最後の週の終わりにしてから、再度今週 つまり機能 括弧の中にこれらの事された入力を取ります。 これらは2つの入力、当社引数またはパラメータであり、 何彼らはまた、私たちのメイン関数に呼ばれている、 してから、関数は、次の出力を生成する その我々が戻り値を呼び出します。 そしてメインの場合の戻り値は、このデータ型はintです この整数は、 とすると、関数を教えて方法は、 "ねえ、これが何であるか、出力 であることを行っている、リターン ""この言葉を使用することです " そのキーワードは、むしろ、 そして、メイン0を返す またはメイン出力0 Cプログラムでは標準です その主な手段から0を返すので、 "ねえ、私のプログラムだけで罰金で実行すべてを。" 我々は、0以外の値を入れた場合、 1と同様に、例えば、 このプログラムを実行した人は誰でも伝えるために使われていること その何かが間違っていた。 だから我々はもっと学期以上のものに巻き込まれるように、 あなたは今まで言ってする必要があるしている場合、 "おっと、あなたが知っている、何かが、このプログラムで間違っていた" むしろ私のプログラムのクラッシュを持つのではなく、私は通知したい 何かが間違っていたことを私のプログラムのランナー、 あなたは、戻り値を使用することができます 我々はそれを呼び出すように、それは0ではありません。 だから我々はそのもう少し説明しましょう かつて我々は、関数に入る。 その種のは理にかなって? オーケー。 関数は奇妙なの一種である - 私は、数学の背景の多くを持っている人々のためだと思う それは、もう少し簡単に来る あなたは、もう少し抽象的な数学のバックグラウンドを持っている場合は特に そしてあなたは、関数の話に慣れている ともののすべてのその種。 しかし、我々は試してみて、それらをカバーしたいと思います 彼らが出てくるような、素敵な、ゆっくりと進みます。 同様に、この全体のint argcは、 char *型のargv []、 今のために、あなたもそのようにボイラープレートを取ることができます。 私たちは、講義の中でそれらを少しカバーするようになり始めました 我々は、コマンドライン上でプログラムに渡される引数について話すとき、 しかし、あなたの問題セットは、あなたのプログラムで、 それだけではvoidを書いて、それをシンプルに保つことは全く問題ありません。 そして、何この空白が意味することは、その "ねえ、メインはどんな入力を受け入れるつもりはない。 これはちょうど私達が実行するだけつもりだプログラムです。 我々はそれを余計な情報を与えるつもりはない たびに、我々は実行して起動します。 " だから今のところは、これを行うことができます。 あなたもさえリターン0を省略することができます あなたのプログラムの終わりに、彼らはうまく実行することになるでしょう、 しかし、私はちょうどそれをインチに保管することをお勧め 数週間で、私たちは、どのような種類のに始めましょう カバーを少し引いて、についての詳細を理解する すべてのこれらの異なる小さな可動部分。 よし、今度はここに私たちの第二の問題についてお話ししましょう​​。 だから、 "定義されていない識別子です"とは、通常何を示していますか Clangのによって出力された場合はどうなりますか? 私たちは今日、すでに見ているかもしれないと思う。 誰かが、それが何を意味するかの要約を与えることができますか? ケリーズの1 - ケリー、見てみましょう。 だから>> - うん、何をしない - >>ときに私が思うに、のように、変数を宣言し、それを使用しようとしないでください。 うん、まさに、その通りです。 あなたは今までにこの出力を見るのであれば あなたがしようとするプログラムをコンパイルするときに、 ケリーは言ったと同じように、 それは、あなたが宣言していない変数を使用することを意味 ので、私は私達のスペースに戻ると、 そして、私のような何かを printfの( "こんにちは%s")を その%sにしようと塗​​りつぶし 変数s、私はどこにも宣言されていないことと と私は、それを実行しよう あなたは、私は右ここでは、この一番下に降りるかが表示されます: "宣言されていない識別子 's'の使用"; それはちょうどあなたがあなたの変数を宣言していないことを意味します。 同じことが起こる場合 あなたは、xを持っていて、それの7を試してみて、保存 と私はXを宣言していない 私は同じエラーを取得する: "宣言されていない識別子 'x'の使用"。 すべての権利は​​、 シーザー暗号ので、非常に安全であることではない、 私は、あなたたちは理由を理解するのは、この短い、種を見てもらおう うまくいけば、今週の問題をやった後に設定 あなたが実際にシーザー暗号を書き込む場所は、もう少し理解してもらえるだろ - それは安全かつセキュアであることを意味するものについて または安全ではありません、私は推測する - 安全では若干異なります。 他のことは、我々は、これらの他の質問をここに持っていた 関数について とどのような関数であり、 我々は戻り値について話したとき、我々は、その種の話を簡潔に。 講義をしてきている誰かのために、 あなたは今日の講義をされている誰がおさらいすることができますか? かしこまりました。 見てみましょう。のは持ってみましょう - 誰かは、関数が何であるかを教えていただけますか? ケリー? >>あなたがのライブラリで書かれている時に何かを描く基本的に何か あそこより複雑な、そして、あなたはちょうどそれの短い形式を書き込む あなたが使用して、そのライブラリに戻って参照しているのように すべてのその長いコードと[聞こえない]。 うん、正確に、そして次にあなたたくはそれに何かを追加しますか? >>ええ、私はそれについての数学の式の概念に似たものだと思う あなただけの式を記述してから、中の変数を差し込むことができる場所 そのの機能は[聞こえない]とは何か。 ええ、そう、我々はここで答えのカップルを持っている それは両方の本当に良いと右です。 どこかのライブラリで書かれているコードに存在述べられている それは、より複雑です 次にそのコードに基づいて描くことができます そして実際にそれだけの短い形式を書き込むことによって、それを使用する - というか、その名前 - その後数学の数式に、この比較もある または物理学、もののすべてのそのような あなたは、次の式を持っている場所 そしてその後にプラグインすることができ その式に変数 その後、式の結果を得るために、 二次方程式などのように、あなたはそれについて考える。 について学ぶことを想像してみた場合ではなく、 どんな二次方程式の解の公式は数学のクラスであり、 ちょうどあなたのためにそれをやった少し電卓プログラムを持っていた。 誰もが高校の数学の授業で電卓プログラムを使用しましたか? うん、物理のクラス? どこであなただけの、 "ねえ、二次方程式の根の公式を言うことができます。 これらは、私が入力する変数です。 今、私に答えを与える。 " つまり、関数が何であるかのようなものだ。 それは私達にのための方法です 小さな小さなサブプログラムのような書き込みの一種 私たちの大きなプログラムの中で 何度も何度もそれを上に使用し、 ので、我々はコードをコピー&ペーストする必要がないこと、 我々はそれを異なる入力を与え、様々な出力を得ることができ、 それは超便利です 状況に応じて異なるプログラムを記述しようとしているとき。 我々は何度も何度も繰り返し使用してきたように、例えば、関数 コー​​ス全体のprintfです。 printf関数自体は関数である そしてそれは、それは実際にはかなり長くて複雑だということが判明 探して意地の悪い、書き込むように機能する。 それが私たちには思えるようにのような単純な 画面にコンテンツをプリントアウトし、 我々はすべてちょうど今日セクションの冒頭にあることをしたので、 それは、あなたが知っている、実際にだということが判明 コー​​ドの数百行の良いカップル。 それは、確かに、私が今まで書きたいというものではない しかし、我々は毎日それを使用して取得;それはクールのようなものだ、 私たちは、お互いにそれを共有することを得る 別のプログラムで、 ので、我々はより多くのダイビングの関数になります。 当分の間、私たちではない - 私たちが書いてことになるだろう唯一の機能は、メインです。 主自体が、また機能です そしてあなたは、それがその出力を持って見ることができます 我々のように、その入力は、約話 メインであり、その名前、。 メインは、の一種である - そこに特殊な関数です。 あなたのCプログラムでは、main関数が存在しなければならない ので、今のところ、我々は省略書面のようなものをしました プロトタイプ、またはの宣言は、メイン。 私達はあなたにあることを与えてくれた そして我々は、ちょうどあなたが空白のようなものに記入しなければならなかった。 だから>>第二の問題セットのために、我々はする必要はありません それは第二の機能で書くのか? 私はそう信じていません。 私はそれがここですべてだと信じています。 ええ、そうシーザー暗号、 あなたがする必要はありません、それは似ていない、 とVigenere、どちらかでない、 そう - そしてそれは結局あなたは今までに実際に記述する必要はありません 機能、右か? あなたは、常にメイン内にすべてのコードを入れて呼び出すと、 多くのプログラマはそれを行うこと。 我々は上に移動すると、 私たちは道としての機能を導入開始 あなたのコードをクリーンアップするには、 それはよりエレガントにするため、 我々はループについて話したときのような種類の、 - の場合には、タスクを持っている どのように、時にはあなたが何度も何度も何度もやってみたい事がある、 、あなたは素朴な方法のようなものを持っている - あるいは、我々はしばしば、 "わら人形"ソリューションを、呼んでいるもの ただコピーして何度も何度も上に貼り付けすることである - あなたはただコピーと貼り付け機能を使って同じことを行うことができます 何度も何度も同じコードを、 それはあなたのコードを肥大 - それは、最大本当に長いコードを作る終了 - そしてそれはまた、少し混乱取得 そしてそれはあなたが好きなことができないことを意味します - あなたは今まで、別のプログラムで再度そのコードを使用したい場合は、 あなたもそれを再度コピーして貼り付ける立ち往生、 ので、我々が話をわかることの一つである あなたのプログラムの設計とスタイルの一種で、 ので、それはこの種のことは理にかなっていたとき パッケージには、何か起動して別々の機能としてそれを置く、 我々はあなたがそれを行うことを奨励、 それはつまり、再び、何か 厳格なルールはありません。 私たちは、あなたが、この呼び出された関数を記述する必要がありますと言うことはめったにありません しかし、それはあなただけで時間をかけて開発するものの一つなのです あなたがより多くのプログラムを書いている。 これ以上の質問は? わかりましたので、今してみましょう 、右ここにこの男に戻って上がる ので、私は質問のこのセクションではまだだ。 私たちは、これらすべての異なるものについて説明しました 関数を作成する理由は、関数何だ、 あなただけコピーして貼り付けることができたときに? うまくいけば、我々は関数を書くことは良いことであることを確信している。 だから今、のはこのMySpaceのプログラムに移りましょう そして我々はこれをやって少し時間を費やすことになる。 だから、見てみましょう 私は誰かが私のためにこれを読んでいることを確認することができますか? レッツMikhailaを持っている - あなたは私たちのためにこれを読んだろうか? ときにMySpaceのあなたが戻って意味>> - 戻るときにMySpaceはクールだった。 MySpaceはクールだっ戻る>> " それはこのようなタイプにすべての怒りだった。 多分それはまだですか?私は本当にわからない。 いずれにせよ、CS50アプライアンスを使用して、 CS50実行するか、またはCS50スペース​​、 メッセージの入力をユーザーに要求するプログラムを書く その後、その最初の文字は大文字にメッセージを出力します 交互ケース内の他のすべての文字で、 次の出力例にあるように、 前記太字テキストは、一部のユーザーの入力を表しています。 簡単にするため、ユーザーと仮定するかもしれません 入力のみ小文字とスペースでしょう。 この問題を練習する機会を考えてみてください。 あなたは、このプログラムを提出するよう求められることはありません。 " 素晴らしい、ありがとうございます。 だからMikhailaが言ったように、 我々は、あなたのコードをMySpacesプログラムを書こうとしている。 だから君たちのいずれかはMySpace使用しましたか? あなたのうちのどれかは、MySpaceのアカウントを持っている? ああ、ええ、ええ! それはかなりクールだった。 [笑い] 私は知っている。 自分をデート。 だから我々がやろうとしているどのようなプログラムを書くことです 通過する と最初の文字を大文字に その後、その後、すべての文字 - または他のすべての文字は、その後、私は申し訳ありません。 だから - あなたは、この例で分かる これは、我々はプログラムを実行する方法です。 ので、これはちょうど私達がa.outというプログラムを実行している "、と言っている。 我々はそれを与えることになるだろうことを入力 プロンプトが表示されようとしている。 我々は、コマンドラインに入力を供給するつもりはない。 " あなたは、すべての講義に続いてきた場合 とコマンドライン引数についての公聴会、 ことは、これらのようなものだ - そのファンキーな構文 主にint型のargc、すべてのもの、と入ってくる ので、ここで我々はそれを使用していない、我々は、のいずれかで対処していない。 我々だけで、ユーザーによってこの型付きで得るつもりだ ファンキー総額が、その後この二行目 私達が私達のプログラムが出力したいものです。 だからではなくアプライアンスまたはRunを使用するよりも、我々はスペースを使用しますが、 我々はスペースを持っているので、 など皆さんが希望の場合 、このような何かを探すために、コードを取得 ので、私はこのリビジョンを保存するつもりです ちょうどので、あなたは正しいここでボイラープレートを持っている このように見えますが、int型のmain(void)を、その中に何もない。 実際に、我々は何をしようとしていは我々だけですべて一緒にすべてを削除することもある。 我々は、白紙の状態にしたい 私たちがしているので、コードを書き始めるつもりはない。 むしろ、我々はいくつかの擬似コードを書いてみるつもりだ これは本当にただ我々はコードではない何かを書こうとしていることを意味 その種類の私たちが何をしたいのかを説明し、 ダビデは、講義の最初の日に行ったちょっとのように、 または私は彼が全体の靴下のデモを行った講義の二日目だったと推測します。 君たちがいることを覚えている - 靴下を見て? ヨセフはそこに英語で入力するのは一種のアップだったのですか? だから我々は同じことを行うつもりだ。 だから私は、擬似コードを書き始めるときに、 私は入力があると何が起こっているかを調べることから始めたい。 そして私は自分自身に、サンプルケースを与える、 ので、 "アドオンをありがとう!"のような そして私はまた、私は出力になりたいものを書く このケースでは、このようなものどちらです。 そして、そのような種類のは、私に考えること、のような、よい出発点を与える "さて、私は1行目を取りたい そして私は "、2行目にそれを変換したい そしてその種類は私の思考を誘導するのに役立ちます。 これは、起動するには良い場所です。 我々は先に進むちょっととしても、それについて考える別の方法 あなたは自分のプログラムでこれを行うとと、にある この種のエッジケースが何であるかのようなのを考える? 変なシナリオの種類は何ですか? 我々が得るかもしれない奇妙な入力は何ですか? そして、それらの出力は何のように見えるでしょうか? 例えば、一つの奇妙な入力 、このいずれかになり 絶対に何も、作成していません どのように我々は、そのような場合に出力する必要があります? 我々はあまりにも、考えるようにしたいもの。 だから質問のように、 我々は、出力に何をしたいのでしょうか? 我々はまったく入力を取得しない場合、我々のプログラムは何を出力すべきか? >>何が。 何もない?素晴らしいですね。 だから我々は我々が何かを書いていないことを確認したい 我々は何もインチが得られない場合 クール。オーケー。 そう 私は、私たちが通って行くように人々のカップルを呼ぶつもりです そしてちょうど一般的なアルゴリズムとは何か希望の種類を把握する そして我々はこの種一緒に通って作業を開始します。 だから、見てみましょう。ミッシー。 あなたは私たちが開始したいと思いますか? ここで開始するには良い場所であるもの 我々は変換したい場合、たとえば、1行目 2行目に? ちょうどあなたが何を考えているか、英語で、私に説明のようなものができますか? でもコードを心配しないでください。 私はどうしたら>>まず最初になる あなたが欲しいものを伝えるために、ユーザーの直接の一種。 わかりましたので、言う、 "ねえ、ユーザ。私が欲しい 文字列 " - 素晴らしい。 それでは、これを書き留めましょう。 文字列の入力をユーザーに求める。 それは良いスタートのように聞こえる。 かしこまりました。 のは、ケリーれんこの時間を聞いてみよう。 我々は、それから次のやりたいだろうか? 私たちの次のようなものは何ですか - ? >>その入力を収集し、それを変数として格納します。 グレート。 だから、文字列を収集 変数に格納します。 だから我々はここで何をしたい何か特別なことはありますか? 我々は彼らの入力をチェックしたいですか 前に - ? >>うん。 私たちは何のために確認するとよいでしょう? >>さて、あなたは我々はそれが多数の場合は右側、チェックする必要はないと言った? それは小文字だと仮定しますので、? うん。 だから、ことが判明した - ええ。 だからgetStringでは、私たちに、文字列を返すことが保証されます。 それは私達、またはそのような何かに数値を返すことはないだろう。 しかし、その文字列内の数字文字があるかもしれません。 我々は総額をやったとして、それらは、我々は無視してかまいません。 しかし、空の文字列は、全く問題ありません 4行目と5日に右ここにケースので、 右ここで、何も入力がない、 と我々の出力としては何も入れないよ。 我々は、文字列中の何かがあることを確認することを心配する必要はありません または文字列には、少なくとも4文字の長さであること; 何でも結構です。 ですから、これはあなたが書いたペニープログラム等で、例えば、対比される どこにあなたが非負数を得ていたことを確認する必要がありましたが、 あなたは月の日数の正しい数を得ていたことを確認しなければならなかった。 そして、どのようにあなたたちはそれをやっている? どのようにして、そのテストをするでしょうか? それはあなたが使用するために、何を必要としたのですか? >> do-whil​​eループ。 do-whil​​eループ、ループの他の種類も、ええ。 だから、それは我々が、この場合はループを使用する必要はありません判明 我々は素晴らしいの一種である文字列の入力を求めるプロンプトを表示しているとき。 すべての権利は​​、上に移動。 だから、ステラ。 あなたは私たちが次に何をすべきかについて少し教えていただけますか? だから今我々は、文字列を持っている、我々はそれが変数に格納されているんだ; 我々は、文字列をどのように処理するかが必要なのでしょうか? >>我々はする必要があります - 2を識別す​​る - うん、ちょうどそれを英語で言う、それは素晴らしいです。 または、大文字 - >> [聞こえない]首都を識別します。 ええ、そうあなたはどれが大文字と小文字であるかを特定したい。 我々は、どれを特定するまで、我々はそれらを大文字または小文字にすることはできません。 だから我々はここでそれを置くことにしましょう​​。 だから、ただ、このプロセスを考える どのように我々は、この識別を行うのですか? あなたは、ダンを知っていますか? 私たちのようなもの - どのようなツールが我々のツールボックスから出て使用する必要があるだろう? >>私は、配列または各ラインのように何らかの形でそれを置くところ 、独自の小さなボックスです。 し、そこからそれを大文字かどうか。 わかりましたので、我々が使用することができます一つのツールは配列です。 私たちは、文字列内を見なければなりません。 しかし、把握するために - 私たちは、文字を見なければならなかった。 >>だからあなたは、文字列の長さを見てんだ? ええ、そうした文字列の長さを取得していることの一部。 単に好奇心から、私たちは文字列の長さを取得するには何を使うのですか? strlenは>>? strlenは、ええ、私たちは、これを "strlenを"と呼ぶ ので、これらの文字列関数はすべて、strlenは、関数です。 私達はちょうど言うためにそれを使用できるので、それは、便利なスーパーです strlenは、ねえ:以下、文字列だが、それがどれくらい長いか教えてください。 講義では、今日、ダビデは、strlenはどのように実装されるかについて、たくさん話をしました 何が実際に舞台裏で起こっている。 しかし、これは非常に超便利なものの一つです。 文字列ライブラリにある他のものがありますが、 このような "strcmpの"綴られているstrcmpの、など そのお互いに文字列を比較するために使用されます。 他のものあなたは、strstrのように使用します これは、サブストリングを見つけるなどに適しています。 ほとんどの部分については、それらはすべてstrで開始してから、何か他のことに進みます。 彼らは実際には文字列のようにそれらを綴るというようにしない理由 、Cの初期の頃が好きだから奥にある 人々は、最初の書き込みであった、すべてのことをするとき 彼らはあなたが使用できる文字数に制限がありました 関数名や変数名のために、 ので、すべてが超凝縮されたようなものです。 しかし、いつでもあなたは、strで始まる何かを参照してください、 それは一般的に、これは文字列とは何かを持っていることを意味します。 さて、あなたは、文字列の長さを取得するんだ その後、我々は文字を使って何を行うのですか? あなたは、サムを知っていますか? 私は全く分からない>>;私はそれを把握しようとしていた。 私は本当にわからない - 私にはいくつかの方法があったならばなあ - 私が言いたいのは、私は、我々はオッズで何かを行うことができるかもしれないと思うし、追いついたであろう しかし私はそのような任意の関数を知っていません。 うん。 >>しかし、それ - それは必ずしも働いていないでしょう、 その後ためには、スペースがあることになるだろう - あなたはどのようにするためのヒントを得るためにスペースがなければならないでしょう - オーケー。 >>私は知らない - この時点で失われた - 私のようなものを。 ああ - いや、いや、いや、これらは良いポイントです。 だから我々は何をすべきかは、サムが言ったように、ある 私たちは、文字が奇数文字ですかを追跡する必要があります 、どれも文字です。 しかし、我々は、我々は見ているだけではないことを確かめたいと思う 奇数と偶数で 文字列内の添字、 むしろ、文字列内の奇数と偶数の文字を見て 従って私達はちょっとの間、この区別を持っている必要があります 手紙 - 実際に何のようにA、B、C、D、またはそうで、 とどのようなものと、それでも私たちの文字列内の文字はありません。 ここでたとえば、この感嘆符のように、文字ではありません それはまだ私達の列の一部だ、それはまだシャア。 同様に、これらのスペースのすべて - それは、空間を活用する権利を意味をなさないのですか? だから我々は、我々は何らかの形でそれらをスキップしていることを確認したい まだオッズを追跡して追いついた。 我々のプログラミングツールボックスのとても親切の これまでのところ、可能ならば、 我々は我々が話をしたことをいくつかの異なるツールを持っています。 だから1は、例えば、変数であり、 のように我々はここで話をしました。 我々はについて話したもう一つのツールは関数です。 だから我々はここで我々の擬似コードで変数についてまでお話ししてきました どのように我々は文字列を格納するために使用するつもりです。 我々は、strlenのように、文字列の長さを取得する関数について説明しました。 我々は、他の何かについて話してきた、と我々はそれについて話をしました ループ:前のセクションでたくさんの今日の。 君たちはこのプログラムでループを使用することについてどう思いますか? ジャレド、あなたはどう思いますか? 我々は、このプログラム内のループを使うのでしょうか? >>おそらく、いや、あなたは複数回、それを通過する必要はありませんからではありません。 さて、あなたは複数回何を通過する必要はありませんか? >>文字列全体。 右ので、一度、文字列全体を通過する必要はありません。 申し訳ありませんが、それは全く意味をなさなかった! 複数回文字列全体を通過する必要はありません。 オーケー。 どう思う? 私はそれがそれらを使用する方が良いことだと思う>> ので、我々は中に生かすように行うことができます それの場所は、[聞こえない]番号です。 偉大な、など何を生かす? わかりましたので、我々はそれを言っている 我々がしたいので、ループを使用する必要があります それは数字ではありませんしながら文字を大文字。 だから - 申し訳ありませんが、あなたが追加したいたのですか? >>私はあなたが文字列を扱う方法ことを言おうとしていた それ文字の[聞こえない]別[聞こえない]? うん。 >>そして、我々に番号を割り当てることができます - または文字列内の文字の位置に基づいて? うん。 >>そして、それが偶数か奇数であるかどうかを識別し、文字自体を大文字にする 手紙の場所にありながら、[聞こえない] - 申し訳ありません。 グレート。 だから総集編。 あなたは再び自分の名前を思い出させることができます - 申し訳ありません - 私。 >>シャーロット。 シャーロット、大丈夫。 だからシャーロットは、何を言っている 完全に右である - おやっ、autoにこの同類が私にインデント - つまり私たちは、文字列を見れば 上部のこの1など - "追加してくれてありがとう" - 文字のシーケンスとして 、位置0である hの位置は1です。 2であるし、我々は、5、4、3を得た; スペースは6位になります。 一方、 - fの位置は何ですか? 7! O? 8。 R? 9。 そして、我々は10を持っているし、私は本当にそれなしでそれを書くことはできません ちょっと画面に乱雑を得る。 しかし、これは我々がメモリ内の文字列について話をすることができますどのように実際にある。 それが文字列である 、文字のシーケンスです そして我々は、文字列内の個々の文字を参照するときに、 私たちはしばしば、その文字の位置を参照することによって、そうする 文字列内の、 私たちは9月の話というおそらく同じ方法 今年の9番目の月である または月曜日が週の最初の日である。 だから、これは私たちへの道を提供しています 偶数奇数の対であるものを見つけ出す あなたはここで見ることができるので、 我々は、このTでそれを一致した場合、 あなたが見ることができる資産計上されたもののすべて 、偶数位置にある 少なくとも最初の単語のために、 私たちはそのスペースを打った後、その後の事は、オフにスローされ 私たちは、手紙としてこのスペースをカウントしないので、 そうそれは我々が始めたかのようだ と、0、1、2、3、4、5に行きました スペース、6、7、8、スペース、 9日後、10、11、12、などなど。 涼しいので、我々は間違いなくループのいくつかの並べ替えを使用したいと思うでしょう 今度は文字のそれぞれを上移動します。 だからこの時点で、 私たちはここで私たちの古い擬似コードに戻るでしょう。 もののこの識別の一環として、 、大文字で、どれは小文字です 我々は、ループのいくつかの種類でこれを行うにしたいと思う。 ループ、コロン。 何ループの一種、我々が持っているループの種類のうち、 この場合に使用すると良い一つのようです? >>私はforループを考えていた。 そして、なぜあなたは、forループを考えているの? それはゼロから始まり、>>ので 我々は、文字列の長さに達したとき、 その後することができ、各反復[聞こえない]は、あまりにも? ええ、その通りです。 だから、ループの異なる選択肢のうち、 我々は、ループ、do-whil​​eループの中に、forループを持っています。 ループのために特に有用である あなたが知りたい場合です あなたがループ内にいる場所の種類、 ループは、これまでに何回実行されています。 まさに私たちがこのような状況で知りたいことをどっちが、 ケリーが言ったように、 我々は位置を知りたいとシャーロットの以前のコメントのオフに基づい 文字列内の文字の、 そしてループがちょうどそれを与えてくれるため、 なぜなら我々は文字列を振り返る種類で起動した場合、 我々は0時に私たちのためのループを開始した場合、 そして我々は、文字列全体の長さを通って上がる 次に我々は文字Tを関連付けることができます ループのための私達に、0を、 ループのための私達の中では1などと文字H、 文字列の最後までのすべての道を行く。 だから、このほんの少しのコーディングを開始してみましょう ちょうどので、あなたたちは、これがどのように見えるかの感触を得る。 私は、これを保存するつもりです ので、我々は、ここで私たちの擬似コードを持っている と私はすべてを削除するつもりです。 だから私は、白紙の状態を持っています。 私はint型のmain(void)を書くことから始めてやる { 私は、リターン0を置くつもりだ その後}。 だから、通常、私はプログラムに起動したときに、これは私がから始まるものです。 私はあなたたちがそれを持っているので、それを保存します。 だから我々は話を最初のものの一つだった ユーザーからの入力を取得する と文字列に格納します。 どのように我々は、ユーザからの入力を取得するのですか? >>のGetStringメソッド。 GetStringメソッドは、すべての権利を留保します。 私は、getString()を入力しますので、もし とセミコロン。 これを実行してみましょう、これは、まず第一に、実行するのだろうか? そして、なぜこれが実行されません? >>あなたは、変数を宣言する必要があります。 私は、変数を宣言する必要があります。オーケー。 だから私はそれをどのように行うのですか? あなたはそれを共有し、何かを書いてもいいですか? そして、我々はそれを引き出すことができます。 見てみましょう、ダン、右、大丈夫。 またはダニエル。コピーした文字列の入力で= getString()を。 恐ろしい。 これは実行するのだろうか? それを試してみましょう。 ラン、アップロードのソースコード、建物を直撃し、エラーが発生しました。 オーケー。 だから、ここで起こっていただきました! 宣言されていない識別子 'string'の使用。 >>我々はライブラリをインクルードする必要がありますか? ええ、そうダンのは、我々はライブラリをインクルードする必要があると述べた。 ステラは、あなたが言おうとしていたかということです?恐ろしい。 すごいですね、ステラだから、あなたはできます ダニエルのスペースが不足し、このコードをコピーしますか? あなたはダニエル·ローランド氣をクリックした場合、それをコピーし、 そしてその後は、includeの行を入れて、それを外に保存されます? 準備ができたら、私に教えてください。 だから、これは構文もファンキーの一種である含んでいる; 、そのハッシュタグのようにあり そしてそこに含まれているし、これらの角括弧があります。 あなたは、これがどのように機能するかを覚えていますか、または私は右ここにこのコード上でそれを置くべきか? >>私は良いです。 オーケー。 >>私はそれを印刷した - でも、私はどのライブラリがわかりませんでした。 ああ、大丈夫 - そう、そう、それはCS50ライブラリです。 >>ああ、私はstdioライブラリを置く。 ああ、それを得た - ええ、いや、that's - ので、それは文字列が実際にCS50に特別である何かであることが判明した。 実際に本当の文字列型ではありません 右ここにいるので、文字列は、タイプの位置になっている - 我々は、文字列型の変数と呼ばれる入力を宣言している - そして我々は、入力の内側に入れている 私たちに返される値:このGetStringメソッド関数呼び出しの出力。 あなたは、これを言うことができ、それが括弧を持っているので、printf関数とまったく同じように、関数呼び出しです ただstrlenのように行います。 しかし、文字列は実際に本当のタイプではありません C言語インチ 我々は、型にそれを作ってきたが、我々はそれが実際に何であるかについての詳細をお願いします 文字列を操作する方法があるので、C言語で; 我々はちょうどそれが少し立派に見えるようにする何かをやった。 だからここに私達は行く。 ここにステラのコードは次のとおりです。 これは、#含む持っている。 他の人は、ハッシュのようにこれを呼び出します、時にはやインクルード鋭い。 今、我々はそれを起動することができ、それを実行し、 そして我々はまだエラーを取得します。 何が起こっているかを見てみましょう。 "未使用の変数 '入力'。" わかりましたので、それはクールだ、クールだ。 私は、それは本当にクールではない、という意味 我々は、エラーを取得して、それが実行されていないので、 しかしこれが何を言っていることはつまり 私たちは、理にかなっている、我々の変数を使用していない。 我々はそれを使って何かしようとしていない。 これはその方法です Clangのは、私たちがただの変数を使用していないことを確認して助けようとしている その後不注意で、それらの私たちの、以降のコードでは何か他のものを呼び出す 私たちはそのようなエラーを回避するために役立ちます。 すべての権利、私たちは、ユーザからの入力を持っている、 私たちは、それを変数に格納されている。 次のステップは、その後にあった String内のすべての文字を見て起動 、どれが大文字でなければならないかを識別する 、どれが小文字であることになっている。 とケリーとシャーロットのように育て、 我々は、このforループを使ってください。 だから誰もがforループの構文を覚えていない とだけ書くことで刺しを取るしたいと思います forループの最初の行は、少しだけのために? ケリーは、あなたたくそれを試してみる? >>ええ、そう、まず初期化する必要があり、 ので、私は、i = 0を入れて、 そして私はi >ええ、私は少しを台無しにしますが、うん。 さて、のはそれをプルアップすることができます。 恐ろしい。 >>しかし、その後、あなたがそれを持っていた場合、私は知りませんでした - うん、大丈夫。 だからここにはケリーのが得たものです:すぐにそれを見てみましょう。 だから彼女は、上部のCS50ライブラリが含まれている。 彼女は、上部に標準IOライブラリが含まれている および標準IOは、printfのような関数を持っている あなたがこれまでにprintfを使用したいので、もし、その行を必要としています。 そして彼女は、文字列ライブラリを含んでいた 我々が必要となる、 文字列ライブラリは、strlen関数を持っているので、 その我々は少しだけにして取得します。 だから我々はケリーがここで行われているかを見れば、 あなたは何をしたかによって私達を歩くことができますか? >>ええ、そう - 私が言いたいのは、私は、エラーが発生しました - うん、いや、it's - >>は、だから、私は単に "文字列"を持った文字列を呼びたかった。 私は、文字列を出力したい そして私 - 私は、各文字の配列のように文字列を設定するようにしたかった 異なっている[聞こえない]、右か? そして私は位置0で開始したい その後、すべての2つのスペース、 私は活用するつもりだったが、 ので、私はちょうど私がASCIIテーブルを見ていたので、23として、それを説明。 だから、それは私が考えていたものだ - 私はそれが右ではないと知っている。 それを得たので、これは素晴らしいスタートです。 私はフレームワークの多くはここの場所であると思います。 の1行ずつの種類を通過し、何が起こっているのか見てみましょう。 だから私はこれをやりたい方法は、単にコードをコンパイルすることによって開始され コンパイラが私のコードで何が間違っているように私に教えさせる、 コンパイラは、コードと間違っているものを伝える時は本当に良いですので。 我々はそれを再生するのであれば、構築し、それが構築できません。 これは、エラーがあったと言う ので、我々は下にスクロールして最初のエラーを見れば、 それは言いました - 私たちは、一番上までスクロールして戻る 我々は、下部には、ここダウン生成5エラーがあることがわかります。 おっと、それは本当にカットオフだ。 私はちょうども良くなることはないだろうと推測します。 ここに私達は行く。 だから、生成された合計5つのエラーがあります。 ここで私は、最初の2つのみが表示されます ので、私は少しアップこれを移動し、一種のスクロールアップすることができます。 これは、コードをコンパイルするために実行されたコマンドです。 その後、最初のエラーはここにfile.cをしていた: "'('を識別または予想"、そして、それはこのライン上にあった ここで我々は、文字列= getString()を語った。 あなたは、それがfile.cでの8行目であったことをここに見ることができます エラーだ - そして、私はこれは文字12であると信じています。 ケリー - それでは、8行目で間違ったんだ? あなただけの手紙か何かのように、それを呼び出す必要があり>>、 文字列sか何かのような? ええ、そう、それは、これらの特殊タイプ名が判明、 ように、文字列型、int型、char型、短い、 彼らは、すべての特別なキーワードだ そして実際に、あなたの変数の名前としてそれらを使用することはできません。 コンパイラは、それを見て、と言うので、 "ああ、私は、タイプだと知っている" ので、実際には、文字列と呼ばれる文字列変数を持つことができません ように私はここで何をしようとしているが、これは動作しません。 しかし、その代わりに、我々はそれをsまたはstまたはstrのような何かを呼び出すことができます。 我々はまた、それがint呼び出すことができませんでした。 我々は、int型と呼ばれる文字列を持つことができません。 我々は、charと呼ばれる文字列を持つことができません。それらのどれも動作しません。 だから我々はちょうどとりあえずsを呼ぶことにします。 恐ろしい。 だから、次は何がこのラインで起こっているのでしょうか? String - このラインはかなり良さそうに見える? のはそれを実行してみましょう。別のtryそれを与えてみましょう。 わかりましたので、我々はまだエラーが出る。 今回は、4エラーにダウンしている。 だから我々はそのうちの一つを得た。 のは、上に移動しましょう​​。 "予期しないタイプ名 'string'は:予想表現、"はい? 私は、文字列に名前を付けるためにしようとしたためだ>>うん。 我々は今も修正を行かなければならないようにええ、そうに見える 文字列にこれらの参照のすべて。 あなたはここで文字列への参照は、ここ1、ここで一つは、そこを参照してくださいすることができます ので、我々はsにこれらすべてを移動することができます。 グレート。さて、もう一度実行します。 建物は - 別のエラーが発生しました。 さて、今、私たちは、一つのエラーにダウンしている そうます。int i = s、さらには角括弧。 それで、あなたは、あなたがここで何をしていたかについて、私たちにケリーを少しお話しすることができますか? >>はい。 これは、10行目にあった。 私たちはすべてを必要に応じて>>私は知らない、 しかし、私は私がしようとしていたと思う - あなたが一緒に従うことができますので、私はそれを保存します。 私はあったと思う>> 位置0で開始するように指示しようとしている ループのための私の冒頭に、 ので、私は言っては不要だったかもしれないと思います。 だから要点をまとめると、 あなたは0の位置でこれを開始しようとしていた - あなたは、このことを言っていた そしてこれを取得 - ええ、 あなたがコードを介して歩いていたとき、私は、あまりにも、早いと思います、 あなたは配列として文字列を扱うためにはどうしたらよいかということを話していた ので、我々は個々の文字にアクセスすることができます。 私は、配列に文字列を変換しようとすると、あまりにも、ダン言及配列を考える。 それは、ボンネットの下のようなものを判明 文字列は、実際には、すでに配列として格納され とは、配列のようにアクセスすることができ; あなたがしなければならないことは、変換はありません。 文字列isn't - ので - 文字列は、実際には配列ではありません すべての文字が格納されているため、しかし、あなたは、そういうものとしてそれにアクセスすることができます 右隣同士にメモリ内の1つ、 ので、文字列の最初の文字を取得したい場合、 それは、整数の配列の最初の整数を取得することと同じです。 だから、しばしば - we'll 2のように参照してください ああ、文字列であるとして、配列であるとして、 それは実際にもかかわらず - 、非常に異なった事をすばらしいスタイル しかし、あなたは非常に同じように扱うことができます。 だから、実際にはこのラインが判明 - 我々は、任意の変換を行う必要はありません そして実際には、 これは実際には、有効な式ではありません これは、コンパイラが私たちに言っているものです。 それは、ちょっと、それは表現を期待 "と言っている と私がここに持っていると、表現ではない何かである。 " 配列を宣言するには、 あなたがする必要があるすべては、セミコロンを使ってこのようなものです そして、あなたは、あなたがそれになりたいどのくらいの配列を教えて 5などのため、この10行目 その中の5つの整数iと呼ばれる配列を宣言します。 これは余談ですが、これはコードは必要ありません、 しかし、これは - これは、宣言がどのように見えるかのようなものです。 あなたはどのようにchar型>> iは[strlenは(S)]を使用していないだろう? シャアI [strlenは(S)]? >> char型iとし、ブラケットは、strlen(S)の内部。 ええ、そう、我々は可能性 - 我々は、これを行うことができます これは宣言するだろう - これは何をしますか? 私はそれが配列を宣言するだろうと思う>> のような - の - ああ、あなたは私を必要としない - ああ、 ええ、あなたは間違いなく、私を必要としません。 あなたは文字の配列を宣言する 長さsの。 それで何サムズが言っていることです この10行目 - 私たちはそれを切り分けることができますので、私はそれと他の部分との間にいくつかのスペースを入れてみましょう - この10行目は、配列を宣言する それらの価値がある文字は、strlen(s)の しかし、我々は実際に、私が必要なのでしょうか 我々は配列に名前を付ける必要があるので、我々が必要とする理由は、私がある; そうでなければ、我々はそれ以降のコードで配列を参照する方法を持っていないでしょう。 だからここにこの権利には、配列名です と内側の長さです。 これは、私たちに配列を渡します しかし、これは - 再び、これは宣言です。 それは代入ではありません、それは初期化ではありません。 我々はこのように、この配列を宣言した場合、 配列の内容には何も実際にはありません。 それはちょうどジャンクだ - そこにあるもの。 と同じように我々は言った、 我々は実際にも、この変換を実行する必要はありません 我々はすでに配列として文字列sを扱うことができるからです。 私たちは、時間に長いビットを実行している知っている だけど、本当にすぐにこのforループに取得したい と、配列内の個々の文字にアクセスする方法を示し 私たちの課題のための鍵だからです。 そして、我々は、あなたがそこから行こうよ。 だからここで、我々は、forループを持っている それはほぼ良さそうに見える。 何が非常にほとんど存在しないのですか? What's - このforループについてはかなり正しいことではないですか? >>いいえ中カッコ? 1には中括弧ない。 ワナは、我々は、中括弧によるループの本体を持っていることを確認してください。 おっと、四角括弧ではない! そして、我々はこのループを使って行う必要がある次のことは何ですか? 私はそれを試してみて、実行している場合は、 私が得ることがこのエラーをいただきました!? 私はすべてのこれらのエラーを取得する - 私はiを初期化する必要があります。 グレート。 だから、これはループになります - これはなかなかありません、 しかし、それは本当に近くなってきている。 このコードは、我々は今、実行することができ、 ビルドすると、エラーが引き続き発生します。 なぜそれがまだ文句を言っている、 表現を言って、未使用です この行は何もしませんので、それはです。 我々はどこに保管していませんでした。我々は結果を保存しませんでした。 ここで、我々はこの結果を保存すべきか? >> sまたはiの? まさに、このファンキーな構文、 角かっこでこのs sのi番目の文字にアクセスすることを意味します。 それは課題のために本当に重要なものになるだろう。 残念ながら、我々はここで停止する必要があるとしている、 セバスチャンセクションには、入って来ことができるように しかし、私は外に滞在した後に満足していると、任意の質問をお受けします。 だから来て皆さんに感謝します。 これは、現在、構築、実行、アップロードしてください。 私たちは、 "hello"のような文字列を入力することができます そしてそれは "QOX"を出力します。 [笑い] だから、完全ではないですが、しかし移動、これらのループに向かって取得! 来てくれてありがとう、私は外になります。