前回のおさらい copy = original; 「=」の意味は「コピー」か?

Slides:



Advertisements
Similar presentations
C 言語講座第 5 回 構造体. 構造体とは ... 異なる型の値をまとめて新しい型とする 機能がある . つまり , 複数の変数を 1 つのまとまりにできる . 配列と違って同じ型でデータをまとめるのではな く違った型のデータをまとめられる .
Advertisements

ゴールデンウィークの課題 (提出日:2009/05/12) 2009/05/12に小テストがあります!
情報処理演習 (秋学期・樋口担当) 2回目 10/1 日本工業大学 コンピュータリテラシーII.
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
関数(静的メソッド:static method)
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
7/10 if 文課題 力作が多くて感心! 演習1:キーボードから2つの整数を入力し、小さい方の数字を 表示せよ。
前回のおさらい プログラムが動く順番 プログラムの一時停止 文字列の長さ,文字→数値の変換
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第4回 配列(2) 情報・知能工学系 山本一公
配列(2) 第10回[平成15年6月26日(木)]:PN03-10.ppt 今日の内容 1 素数を求める(教科書の例):復習
6/19 前回復習 for文による繰り返し計算 演習1:1から10まで足して画面に結果を表示する 提出者: 1人
6/26 前回復習 for文、while文による繰り返し計算
基礎プログラミングおよび演習 第9回
プログラミング演習Ⅱ 第12回 文字列とポインタ(1)
プログラミング基礎I(再) 山元進.
基礎プログラミング 第13回(2007年5月28日) 「関数」の補足説明 Report-Fの解説.
C言語 配列 2016年 吉田研究室.
情報基礎A 第7週 プログラミング入門 VBAの基本文法2 データ型・If ~Then~Else
第8回 プログラミングⅡ 第8回
条件式 (Conditional Expressions)
情報教育論 第9回 仮定文の仕組み 政策・メディア研究科 岡田 健.
ML 演習 第 7 回 新井淳也、中村宇佑、前田俊行 2011/05/31.
第10回 プログラミングⅡ 第10回
情報処理3 第5回目講義         担当 鶴貝 達政 11/8/2018.
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
プログラミング入門 電卓を作ろう・パートIV!!.
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング演習I 2003年5月7日(第4回) 木村巌.
前回の練習問題.
第7回 プログラミングⅡ 第7回
Excel 2002,2003基本12 情報関数.
高度プログラミング演習 (05).
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
情報処理Ⅱ 第2回:2003年10月14日(火).
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
情報基礎演習I(プログラミング) 第11回 7月12日 水曜5限 江草由佳
C言語 はじめに 2016年 吉田研究室.
2007/6/12(通信コース)2007/6/13(情報コース) 住井
C言語ファミリー C# 高級言語(抽象的) Java オブジェクト指向 C++ C 機械語(原始的)
基礎プログラミング演習 第6回.
第6回レポート解説 条件1 条件2 条件3 月の入力 月、日、曜日の表示 日の入力 曜日の入力
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
プログラミング基礎a 第4回 C言語によるプログラミング入門 条件判断と反復
ウェブデザイン演習 第6回.
~sumii/class/proenb2010/ml2/
復習 if ~ 選択制御文(条件分岐) カッコが必要 true 条件 false 真(true)なら この中が aを2倍する 実行される
C言語講座 制御(選択) 2006年 計算技術研究会.
2006/6/27(通信コース)2006/7/5(情報コース) 住井
プログラミング基礎演習 第4回.
知能情報工学演習I 第8回(後半第2回) 課題の回答
PROGRAMMING IN HASKELL
第7章 そろそろ int 以外も使ってみよう! ~データ型 double , bool~
情報処理Ⅱ 2005年11月25日(金).
プログラミング 平成28年10月25日 森田 彦.
プログラミング1 プログラミング演習I 第2回.
プログラミング入門2 第5回 配列 変数宣言、初期化について
情報処理Ⅱ 小テスト 2005年2月1日(火).
プログラミング入門2 第3回 条件分岐(2) 繰り返し文 篠埜 功.
知能情報工学演習I 第11回(後半第5回) 課題の回答
計算技術研究会 第5回 C言語勉強会 関数(function)を使う
復習 いろいろな変数型(2) char 1バイト → 英数字1文字を入れるのにぴったり アスキーコード → 付録 int
情報処理Ⅱ 第3回 2004年10月19日(火).
C言語講座 四則演算  if ,  switch 制御文.
分岐(If-Else, Else if, Switch) ループ(While, For, Do-while)
知能情報工学演習I 第10回( C言語第4回) 課題の回答
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
第1章 文字の表示と計算 printfと演算子をやります.
ファーストイヤー・セミナーⅡ 第10回 if文による選択処理(2).
Presentation transcript:

前回のおさらい copy = original; 「=」の意味は「コピー」か? 数値や真偽値など,「値型」は確かにコピーされる 「参照型」であるオブジェクト(Stringや StringBuilder)の場合には,「=」と書いても実データはコピーされない 「変数」と「実データ」は独立したものなので, 区別して考える習慣をつけよう 変数の世界と,実データの世界は決して交わらない プログラムの字面だけを考えていては駄目.プログラム動作中の「変数世界」と「実データ世界」を意識しよう 理系でプログラミングを学んできた人の中でも,この点を理解していない人がたまにいる オブジェクト指向言語(C#,Java etc.)の最初の落とし穴

コピーするには, newで新しい「実データ」を作成する ★Report-B(3)の解答★

originalを共有(メモリ節約) originalを保存(メモリ圧迫) kisoPro kisoPro kisoPro kisoPro copy copy original kisoPro gramming kisoPro original kisoPro gramming copy copy 実データの世界 (メモリ) 変数の世界

==による「等しい」「同じ」の概念の違い 基礎プログラミング 第5回(2007年4月23日) 条件分岐 場合わけの方法(if文) ==による「等しい」「同じ」の概念の違い

条件分岐の例:ユーザの入力した秒数だけ待つ.(ただし10秒未満)

if (条件) { ① } else { ② } 条件(Condition)が真(true)なら①を実行する 偽(false)なら②を実行する else { ② } の部分は,不要なら省略できる ①や②に書く処理が1行だけなら,{} が省略できる if (waitsec < 10) Console.WriteLine(”true”); else Console.WriteLine(”false”); } のあとに ; は不要(命令のうしろには必要)

「条件」に書けるもの true / false (”true” ”false”ではない) 関係演算子や論理演算子を含む式 「関係演算子」 数値の大小関係を比較 == < > <= >=   != 文字列(String)の中身で比較 == != 文字列以外のオブジェクト(StringBuilderなど)では,== と != は,同一のオブジェクト(実データ)かどうかを判断するのみ(中身は考慮しない) 「論理演算子」 && (AND) || (OR)

条件の例(1) (0 <= val) (copy == ”kisoPro”) (int型の)変数valの値が非負ならtrue   (copy == ”kisoPro”) (String型の)変数copy に結びついている文字列データの中身が“kisoPro”ならtrue ((0 < val) && (val < 10)) (int型の)変数val の値が0より大きく,かつ10より小さいならtrue    (注) (0 < val < 10) とは書けない (originalText == copyText) (StringBuilder型の)2つの変数に結びついているデータが同じデータを指しているなら true (注)たとえoriginalText.ToString()とcopyText.ToString()の2つの文字列が同じであっても,別の実データならfalse

条件の例(2) 「0 < x < 5 ならばチョメチョメせよ」という条件式は, if ( (x > 0) && (x < 5) ) {     チョメチョメ  } と書ける.   ※(x > 0) と (0 < x) は同じ意味 あるいは if (0 < x) { if (x < 5) { チョメチョメ } } でも同じ.

bool 型の変数(定義と代入) bool hasCar; //車がある(true) or ない bool hasLicense; //免許がある(true) or ない hasCar = true;    //代入 hasLicense = false; if (hasCar && hasLicense){ Console.WriteLine(”You can drive.”); }

文字列の比較例 String answerCar, answerLicense; bool hasCar, hasLicense; Console.WriteLine(“Do you have a car? [Y/N]”); answerCar = Console.ReadLine(); if (answerCar == “Y” || answerCar == “y”) { hasCar = true; } else { hasCar = false; } …(次に続く)

文字列の比較例(つづき) (前からの続き) Console.WriteLine(“Do you have a license? [Y/N]”); answerLicense = Console.ReadLine(); hasLicense = (answerLicense == “Y” || answerLicense == “y”); if (hasCar && hasLicense) { Console.WriteLine(”You can drive.”); }

ありがちなミス① ==を=と書く (intval = 10) エラーになる (hasCar = false) 警告になる ありがちなミス① ==を=と書く (intval = 10) エラーになる (hasCar = false)  警告になる bool a = false; if (a = false) Console.WriteLine("a is false"); エラーにならないので,間違いを見つけにくい (0 < intval < 10)   エラーになる

ありがちなミス② 実データと== StringBuilder sb1 = new StringBuilder(“A”); ありがちなミス② 実データと== StringBuilder sb1 = new StringBuilder(“A”); StringBuilder sb2 = new StringBuilder(“A”); if (sb1 == sb2) Console.WriteLine(“両方A”); ↑の結果はfalse 同じAという中身でも,別のデータ なのでfalse String型以外のオブジェクトの場合,== としても 中身では比較しない(比較できない) ==は同じデータを参照しているか否か,のみ判別 StringBuilder sb2 = sb1; としていれば true if (sb1.ToString() == sb2.ToString()) ... としていれば true

elseのあとで,さらに条件分岐 Console.WriteLine(”じゃんけんの手を入力してください\n (0:グー,2:チョキ,5:パー)”); int hand = int.Parse(Console.ReadLine()); if (hand == 0) { Console.WriteLine(”グーですね”); // ① } else if (hand == 2) { Console.WriteLine(”チョキですね”); // ② } else if (hand == 5) { Console.WriteLine(”パーですね”); // ③ } else { Console.WriteLine(”0,2,5どれかをいれて”); // ④ }

じゃんけんプログラムの構造 { } を全部省略しないで書くと,最後は }}} じゃんけんプログラムの構造 { } を全部省略しないで書くと,最後は }}} ① (hand == 0) ② (hand != 0) (hand == 2) ③ (hand != 2) (hand == 5) (hand != 5) ④

(最初のプログラムに戻って,) ところで,{0} は何? WriteLine()で数値を文字列に埋め込んで表示したいときの方法(C#のみ) これまでは省略した書き方をしていた Console.WriteLine(”let’s wait ”+waitsec+” sec”); 本当は,ちゃんとToString()を使って変換し, ”let’s wait ”+waitsec.ToString()+”sec” と書かなければいけない(でも面倒) Console.WriteLine(”百は{0}, 千は{1}, 万は{2}”, 100, 1000, 10000); と書けば,+が少なくて,すっきり書ける

順番は0から数える {}の中に,引数の順番(0,1,2)を書く つまり,{N} は「N番目の引数を埋め込んで表示」の意味 順番は自由 最初は0 つまり,{N} は「N番目の引数を埋め込んで表示」の意味 ただし,最初の引数は 0番目とする 順番は自由 Console.WriteLine(”千は{1}, 万は{2}, 百は{0}, 再度,千は{1}”, 100, 1000, 10000); 0 1 2

桁数の設定などもできる Console.WriteLine(“4桁表示 {0,4}”,55); →_ _ 5 5 と表示される(スペース2つと55) {N,M} で「N番目の引数をM桁で表示」の意味 詳しくは, http://www.atmarkit.co.jp/fdotnet/csharptips/010string/010string.html http://uchukamen.com/Programming/Strings/FormatStrings.htm を参照

練習問題1 (04oddeven) ユーザに整数を入力してもらい, その整数が奇数か偶数かを判定して 表示するプログラムをつくりなさい 表示メッセージ例(英語でも日本語でもよい): 3 is odd. / 4 is even. 3 は奇数です. /   4 は偶数です. ヒント 奇数・偶数を判定するには,% (剰余)の演算子を使います int amari = (val % 2); if (amari == ...

練習問題2 (05waitsec2) (slide-5) のプログラムを改良し,ユーザが入力した秒数が「0以上10未満」のときだけSleep()するプログラムをつくりなさい 一旦,コミットしなさい さらに改良し,秒数が 0秒未満のときは「正の数を入れてください」,10秒以上のときは「0~9の整数を入れてください」 と,それぞれ異なる案内文(メッセージ)を表示するプログラムをつくりなさい もう一度,コミットしなさい

練習問題3 (06jyanken) (slide-15)のじゃんけんプログラムを入力し,動くことを確認しなさい 一旦,コミットしなさい int型の変数 hand を使わず,String型の変数 handStr を定義し,グーを“G”または“g”, チョキを“T”または“t”, パーを“P”または“p” の文字入力で受け付けるプログラムに変更しなさい もう一度,コミットしなさい

提出締切 練習問題なので締切なし 完成したらコミットしてください プログラムに関する質問をメールで送る前には,現状でいいのでコミットすること コミットメッセージは自由(自分が何を変更したのか,覚えておきやすいようにする) プログラムに関する質問をメールで送る前には,現状でいいのでコミットすること ただし,すべての質問にすぐ対応できないかもしれません.次回授業時間でフォローします

次回予告 (場所はK12講義室) もう1つの条件分岐:switch文 これまでの復習を兼ねて,問題演習(模擬試験)を実施 紙に書いて解いてもらうので筆記用具持参のこと GW前の提出課題Cを出します