前回のおさらい プログラムが動く順番 プログラムの一時停止 文字列の長さ,文字→数値の変換

Slides:



Advertisements
Similar presentations
プログラミング論 第八回数字の計算,整数の入出力. 本日の内容 前回の課題(続き) 前回の課題(続き) 数字の計算をする 数字の計算をする – 加減乗除を行う – インクリメント演算子とデクリメン ト演算子.
Advertisements

情報基礎実習 I (第3回) 木曜4・5限 担当:北川 晃. プログラミング演習 2 つの数を入力し,「計算」ボタンをクリック すると,それぞれの計算結果を次のように 表示するプログラムを作れ.
復習 配列変数の要素 5は配列の要素数 これらの変数をそれぞれ配列の要素と呼ぶ この数字を配列の添え字,またはインデックスと呼ぶ
復習 配列変数の要素 5は配列の要素数 これらの変数をそれぞれ配列の要素と呼ぶ この数字を配列の添え字,またはインデックスと呼ぶ
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
関数(静的メソッド:static method)
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
前回のおさらい copy = original; 「=」の意味は「コピー」か?
初年次セミナー 第4回 整数と実数の取り扱い.
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
~手続き指向からオブジェクト指向へ(Ⅰ)~
基礎プログラミングおよび演習 第4回 担当:花岡 5階522/520.
情報基礎実習I (第7回) 木曜4・5限 担当:北川 晃.
プログラミング演習Ⅱ 第12回 文字列とポインタ(1)
情報基礎A 第10週 プログラミング入門 VBAの基本文法2 データ型・If ~Then~Else
基礎プログラミング 第13回(2007年5月28日) 「関数」の補足説明 Report-Fの解説.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
第8回 プログラミングⅡ 第8回
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
アルゴリズムとデータ構造 2011年6月13日
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
構造体.
プログラミング演習II 2004年12月 21日(第8回) 理学部数学科・木村巌.
情報基礎実習I (第1回) 木曜4・5限 担当:北川 晃.
1.12 式における型変換 1.13 代入における型変換 1.14 コメント 10月31日(金) 発表者:藤井丈明
第10回 プログラミングⅡ 第10回
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
整数データと浮動小数データ 整数データと浮動小数データの違い.
第二回 VB講座 電卓を作ろう.
プログラミング演習I 2003年5月7日(第4回) 木村巌.
第10章 これはかなり大変な事項!! ~ポインタ~
プログラミング入門2 第2回 型と演算 条件分岐 篠埜 功.
前回の練習問題.
第7回 プログラミングⅡ 第7回
もっと詳しくArrayクラスについて調べるには → キーワード検索
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
整数データと浮動小数データ.
情報処理Ⅱ 第2回:2003年10月14日(火).
情報実習I (第1回) 木曜4・5限 担当:北川 晃.
プログラミングⅠ 平成30年10月22日 森田 彦.
情報基礎演習I(プログラミング) 第11回 7月12日 水曜5限 江草由佳
C言語 はじめに 2016年 吉田研究室.
構造体と共用体.
プログラミング基礎a 第6回 C言語によるプログラミング入門 配列と文字列(その2)
統計ソフトウエアRの基礎.
地域情報学 C言語プログラミング 第2回 変数・配列、型変換、入力 2017年10月20日
第6回レポート解説 条件1 条件2 条件3 月の入力 月、日、曜日の表示 日の入力 曜日の入力
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
復習 breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・
プログラミング入門 電卓を作ろう・パートI!!.
計算機プログラミングI 第3回 プリミティブ値 クラスメソッド クラス変数 式と演算 変数の利用
アルゴリズムとデータ構造 2012年6月11日
情報工学Ⅱ (第2回) 月曜4限 担当:北川 晃.
復習 breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・
情報処理Ⅱ 2005年10月28日(金).
Nakano School of Business 経営情報ビジネス科 【 Java概論(Test4)】
標準入出力、変数、演算子、エスケープシーケンス
情報実習I (第1回) 木曜4・5限 担当:北川 晃.
第7章 そろそろ int 以外も使ってみよう! ~データ型 double , bool~
2005年度 データ構造とアルゴリズム 第2回 「C言語の復習:配列」
情報処理Ⅱ 第2回 2004年10月12日(火).
情報処理Ⅱ 2005年11月25日(金).
プログラミング演習II 2004年11月 2日(第3回) 理学部数学科・木村巌.
プログラミング基礎a 第5回 C言語によるプログラミング入門 配列と文字列
プログラミング入門2 第5回 配列 変数宣言、初期化について
情報処理Ⅱ 小テスト 2005年2月1日(火).
printf・scanf・変数・四則演算
第2章 数値の入力と変数 scanfと変数をやります.
C言語講座 四則演算  if ,  switch 制御文.
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
Presentation transcript:

前回のおさらい プログラムが動く順番 プログラムの一時停止 文字列の長さ,文字→数値の変換 Main() { … }の中 上から下 ()の中を先に実行 プログラムの一時停止 Thread.Sleep() メソッド 文字列の長さ,文字→数値の変換 文字数を得る: ”hoge”.Length 数値に変換する: int.Parse(”100”) Console.ReadLine() の部分は,まずユーザの入力待ちになる.入力が終わったら,入力した文字列 データに置き換わる

今日のテーマ: プログラムにおける イコール(=)の意味 (とても重要!!) 基礎プログラミング 第4回(2007年4月18日) 演算子,変数,データ型 今日のテーマ: プログラムにおける イコール(=)の意味 (とても重要!!)

演算子 データの変更・加工 演算子について詳しくは 文字列を連結する + 数値の四則演算(+,-,*,/)と剰余(%) 文字列を連結する + 数値の四則演算(+,-,*,/)と剰余(%) %は剰余(あまり) 例:int mod = 8%3; mod は「8割る3」の余り,2が入る 演算子について詳しくは http://msdn2.microsoft.com/ja-jp/library/6a71f45d(VS.80).aspx

演算子の計算順位 演算子の強さ(優先順位) [文字列]と[数値]を+でつなぐと,数値を文字列に変換して連結する * / % のほうが + - よりも強い 3+2*10 ⇒ 23 (3+2)*10 ⇒ 50 のように,()をつけると 弱い演算でも優先実行できる [文字列]と[数値]を+でつなぐと,数値を文字列に変換して連結する Console.WriteLine(”3+5は”+3+5+”ではない”); ⇒3+5は35ではない

なぜ「変数」が必要か? 前回,ユーザの入力文字列を使って, プログラムを変更せずに,いろんな名前を表示したり,待つ秒数を変えることができた しかし,同じ名前を2回も聞くのは不親切 ユーザに入力してもらった文字列を,プログラムのいろんな所で何回も利用できるようにしたい ただ黙って待つのではなく「○秒待ちます」「○秒経過しました」と表示したい →変数を使う

変数を使うとなにができる? データに名前をつけて保持し・再利用できる (データとは,入力文字列や,それを数値に変換したもの,など) 保持しておいたデータは,再度画面に表示したり,計算に使ったりすることができる

変数の使い方 (1)「変数」を使うことを宣言する(変数宣言) (2)=を使って,データを変数に結びつける 変数名=実際のデータ  と書く(変数の初期化) (3)変数を使ってデータを参照・表示・演算 String myname; //文字列用の変数mynameを宣言   // (変数宣言:変数を使用できるようにすること) myname = ”みうら”; //文字列を変数に○結びつける    // ×入れる,代入する Console.WriteLine(”私は”+myname+”です”); // ↑変数名を文字列の代わりに使って表示する

入力文字列を結びつける場合 Console.ReadLine() を使う 例: String myname; //文字列変数mynameを宣言する myname = Console.ReadLine(); //キーボードからの入力文字列を変数に結びつける Console.WriteLine(”私は”+myname+”です”); // ↑変数に結びつけた「名前」を表示

数値(整数)を結びつける例 String inputStr; //文字列変数(入力文字列用)宣言 int waitsec; // 整数(秒数)を格納する変数を宣言 Console.WriteLine(”待つ秒数を入力してください”); inputStr = Console.ReadLine(); waitsec = int.Parse(inputStr); //入力文字列を数値に System.Threading.Thread.Sleep(waitsec * 1000); // 待つ Console.WriteLine(waitsec+” 秒待ちました”);

1つの変数に何度もデータを結びつける String input; //文字列変数inputを宣言する input = Console.ReadLine(); //1回目 Console.WriteLine(input +”が入力されました”); input = Console.ReadLine(); //2回目 Console.WriteLine(”今度は”+ input +”が入力されました”); 2回目を結びつけると,1回目の入力データは どこかに漂(ただよ)い,やがて消える .NET Framework の実行環境が自動で不要なメモリを見つけ,開放してくれる(ガベージコレクション機能)

変数と型 変数を使う前には,かならず「変数宣言」が必要 String myname; myname = “miura”; myname を文字列データ(String)を結びつけておくための変数として定義する String myname = “miura”; 変数宣言と,データを結びつける命令を1行で書くことができる “String” のように変数宣言の際,変数名のまえにつける,データの種類のことを「型(かた/Type)」と呼ぶ

型 C#における型(Type)は3種類 値型 (Value types) 参照型 (Reference types) (ポインタ型) 数値 真偽値 (bool) など 参照型 (Reference types) 文字列,オブジェクト (ポインタ型)

値型 (数値) int 整数値 (=Int32) float 32ビット浮動小数点数値(=Single) 値型 (数値) int 整数値 (=Int32) int year = 2007; float 32ビット浮動小数点数値(=Single) float pi = 3.14F; float taxrate = 0.05f; (小文字のfでもよい) double 64ビット浮動小数点数値(=Double) double pi = 3.14159265; (何もつけないとdouble) double log2 = 0.301029995D; (Dをつけてもよい) decimal 128ビット数値(=Decimal) (高い精度が必要なときに使う)

値型 (その他) bool 真偽値,ブール値 (=Boolean) 詳細は「条件分岐」のときに説明する 値型 (その他) bool 真偽値,ブール値 (=Boolean) true(真) または false(偽)のどちらか1つ 例: bool flag = true; bool matigai = false; 詳細は「条件分岐」のときに説明する

参照型 (文字列,オブジェクト) String (作成したら変更できない文字列) StringBuilder (追加・変更できる文字列) 参照型 (文字列,オブジェクト) String (作成したら変更できない文字列) String name = ”名前”; // 下↓の省略表記 String name = new String(”名前”); StringBuilder (追加・変更できる文字列) StringBuilder buffer = new StringBuilder(”kisoPro”); buffer.Append(”gramming”); //append:うしろに追記 Console.WriteLine(buffer.ToString()); //文字列に変換 Random (乱数を生成するオブジェクト) Random rand = new Random(); int value = rand.Next(1,7); // サイコロ(1~6)

数値の演算例 (左辺:変数名)で示した変数に,(右辺:データ,式)の計算結果を代入する,という意味 (変数名)=(データ,式) プログラミングにおけるイコール(=)は,「左辺と右辺が同じ数値」という意味ではない (変数名)=(データ,式) int price = 1000; //ある商品の値段 float tax = 0.05f; // 消費税率 int total; // 税込金額 total = price + (price * tax);

文字列の演算例 (左辺:変数名)で示した変数に,(右辺:データ,式)の計算結果を結びつける,という意味 (変数名)=(データ,式) プログラミングにおけるイコール(=)は,「左辺と右辺が同じ文字列」という意味ではない (変数名)=(データ,式) String lastName = ”miura”; String firstName = ”motoki”; String name; name = lastName + ”_” + firstName;

値型は変数に「代入する」 参照型は変数に「結びつける」 代入(格納) 犬小屋メタファ (値型) 実データ 値型の変数 変数にデータを「代入」 結びつける 杭&リーシュメタファ (参照型) 実データ 参照型の変数 変数に実データを「結びつける」 変数に実データへの参照を格納

値型と参照型 値型の変数はデータを格納し、参照型の変数は実データへの参照を格納します。参照型は、オブジェクトとも呼ばれます。 マイクロソフトMSDNライブラリ http://msdn2.microsoft.com/ja-jp/library/3ewxz6et(VS.80).aspx より抜粋

値型と参照型の違いを理解 値型の場合

値型と参照型の違いを理解 参照型の場合

値型と参照型の違いを理解 参照型 値型 kisoPro 19800 19800 19800 kisoPro 19800 20000 original original kisoPro 19800 original copy copy original 19800 19800 kisoPro original copy copy original 19800 20000 kisoPro gramming

プログラム実行ルール プログラムが動く順番 Main(){ …} の中 上から下,1行ずつ ()の中を先に計算 [△△型] [変数名]; と書かれていた場合, [変数名]を△△型の変数として使えるようにする(変数宣言) [変数名]=○○○; と書かれていた場合, =の右側を先に計算する.そして,左側の変数に代入または結びつける

今日の重要なポイント 値型と参照型で,「(保持すべき)データ」を割り当てるための=(イコール記号)の意味と振る舞いが大きく異なる 値型のときは,データがコピーされる 参照型のときは,左辺の変数には,右辺が示す実データへの参照(リンク)を格納するのみ (参照型のときは,「変数=実データ」 という記法で 実データを変数に結びつけている) 1つの変数が保持できる(または参照でたどっていける)データは1つのみ 再割り当てすると,前のデータはどこかへ行ってしまう なぜわざわざ2種類の概念(値型,参照型)を混在させているのか,考えてみよう!

提出課題 Report-B(1) 前回の提出課題Report-A(2)のプログラムを修正し, (1)ユーザに入力してもらった秒数を使って 「これから○秒待ちます」 と表示してから (2)Sleep()で実際に○秒待ったあと, (3)最後に「○秒待ちました」 と表示するようにする 注意:ユーザに秒数を入力してもらうのは1回だけにする

提出課題 Report-B(2) フォルダ「03Val_or_Ref」 を配布します. ソリューションファイルは「Val_or_Ref.sln」 (#4-slide20) のプログラムを「Val_Program.cs」に, (#4-slide21) のプログラムを「Ref_Program.cs」に入力・実行し,両方正しく動くことを確認してください 余裕がある人は,(#4-slide24)の最後の質問に対する答えを[コメント]に記入 (注意) [F5]のときに起動するプログラムは スタートアッププロジェクトを切り替えて 選択してください

スタートアッププロジェクトの切替え方法 [デバッグ実行]を押したときに起動するプロジェクトを切り替える Reference (またはValue)の文字上で 右クリック 「スタートアップ プロジェクトに 設定(A)」

提出課題 Report-B(3) Report-B(2)で作った「Ref_Program.cs」で,copyText.Append(”gramming”); を実行したら,copyTextのデータだけ変化するようにしたい. つまり,下のような画面表示にしたい original kisoPro copy kisoProgramming 緑色[の部分(copyText = originalText;)の行だけを書き換えて,元データをコピーするようにしてください ただし, originalTextを使ってください.”kisoPro”という文字列を2つ以上プログラム内に書かないこと. ヒント:文字列から新しいStringBuilderデータを作るには new StringBuilder([String]); を使います StringBuilderをStringに変換するには,[StringBuilder].ToString()を使います.

提出締切 4月21日(土) 23:59 までにコミットして提出 点数: Report-B(1) 2点 Report-B(2) 1点