次回予告:アレンジ演習:p.121 sin01.cs その2「コサイン」から
講義メモ:講義メモ20230610.zip
for trainees of Hirano's class only
次回予告:アレンジ演習:p.121 sin01.cs その2「コサイン」から
講義メモ:講義メモ20230610.zip
p.119 for文のネスト
・for文の中にif文が記述できるように、for文の中にfor文を記述できる。
・形式の中に同型の形式を置くことを入れ子・ネストという。
・回数指定のforの場合、二重繰り返しにすることで、2次元構造を表現しやすい
・for文のネストでカウンタ変数を用いる場合、名前は変えること(主に、外側から順にi、j、kとすることが多い)
・ネスト数の制限はない
for文の中でカウンタ変数の初期化するネストの例:
for (int i = 0; i < 6; i++) {
for (int j = 0; j < 5; j++) {
for (int k = 0; k < 20; k++) {
Console.WriteLine("{0}年{1}組{2}番", i + 1, j + 1, k + 1); //6×5×20=600回実行
}
}
}
p.119 kuku01.cs
//p.119 kuku01.cs
using System;
class kuku01 {
public static void Main() {
int i, j; //繰り返しカウンタ(iは外側、jは内側)
for (i = 1; i <= 9; i++) { //1の段から9の段について繰返す
for (j = 1; j <= 9; j++) { //×1から×9について繰返す
Console.WriteLine("{0} * {1} = {2}", i, j, i * j); //毎回実行(81回)
}
Console.WriteLine("------------"); //×9の後に実行(9回)
}
}
}
アレンジ演習:p.119 kuku01.cs
・下記のような九九表にしよう 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81 ヒント ・81回繰返す文はWriteLineではなくWriteにする ・表示はi * jのみで、3桁にしよう(p.29) ・9回繰返す文は改行のみのWriteLineにする
作成例
//p.119 kuku01.cs
using System;
class kuku01 {
public static void Main() {
int i, j; //繰り返しカウンタ(iは外側、jは内側)
for (i = 1; i <= 9; i++) { //1の段から9の段について繰返す
for (j = 1; j <= 9; j++) { //×1から×9について繰返す
Console.Write("{0, 3}", i * j); //毎回実行(81回)積を3桁表示
}
Console.WriteLine(); //×9の後に実行(9回)改行のみ
}
}
}
アレンジ演習:p.119 kuku01.cs つづき
・下記のような段数までの九九表にしよう 1 2 4 3 6 9 4 8 12 16 5 10 15 20 25 6 12 18 24 30 36 7 14 21 28 35 42 49 8 16 24 32 40 48 56 64 9 18 27 36 45 54 63 72 81
作成例① ムダが大きいバージョン
//アレンジ演習:p.119 kuku01.cs
using System;
class kuku01 {
public static void Main() {
int i, j; //繰り返しカウンタ(iは外側、jは内側)
for (i = 1; i <= 9; i++) { //1の段から9の段について繰返す
for (j = 1; j <= 9; j++) { //×1から×9について繰返す
if (j <= i) { //段数までなら
Console.Write("{0, 3}", i * j); //毎回実行(81回)積を3桁表示
}
}
Console.WriteLine(); //×9の後に実行(9回)改行のみ
}
}
}
作成例② 無駄を省いたバージョン
//アレンジ演習:p.119 kuku01.cs
using System;
class kuku01 {
public static void Main() {
int i, j; //繰り返しカウンタ(iは外側、jは内側)
for (i = 1; i <= 9; i++) { //1の段から9の段について繰返す
for (j = 1; j <= 9; j++) { //×1から×9について繰返す
if (j > i) { //段数を超えたら
break; //内側の繰り返しは終了
}
Console.Write("{0, 3}", i * j); //毎回実行(81回)積を3桁表示
}
Console.WriteLine(); //×9の後に実行(9回)改行のみ
}
}
}
作成例③ 最も無駄のないバージョン
//アレンジ演習:p.119 kuku01.cs
using System;
class kuku01 {
public static void Main() {
int i, j; //繰り返しカウンタ(iは外側、jは内側)
for (i = 1; i <= 9; i++) { //1の段から9の段について繰返す
for (j = 1; j <= i; j++) { //×1から×iについて繰返す
Console.Write("{0, 3}", i * j); //毎回実行(81回)積を3桁表示
}
Console.WriteLine(); //×9の後に実行(9回)改行のみ
}
}
}
p.121(Math.PIフィールド)
・C#が提供する定数(p.39)の1つがMath.PIで、Mathクラスに含まれる(クラスは7章で後述) ・Math.PIには適当な精度の円周率が格納されている
p.121 Math.Sinメソッド
・C#が提供するメソッド(p.19)の1つがMath.Sinで、三角関数サインの機能 ・ただし、受け取る値(引数)の単位は度ではなくラジアン値 ・ラジアン値は180度を円周率とする値。つまり180度はMath.PI、360度はMath.PI×2 ・受け取る値(引数)はdouble型で得られる結果もdouble型 ・例:Console.WriteLine(Math.Sin(Math.PI)) ⇒ 0.0
p.122 Math.Roundメソッド
・C#が提供するメソッド(p.19)の1つがMath.Roundで、四捨五入の機能 ・受け取る値(引数)はdouble型で得られる結果もdouble型 ・例:Console.WriteLine(Math.Round(2.56)) ⇒ 3.0
p.121 sin01.cs
//p.121 sin01.cs
using System;
class sin01 {
public static void Main() {
double s; //計算用(角度ごとのsin値を格納する)
//0度から180度(Math.PI)まで180÷45=4度ごとのラジアン値を求めて繰返す
for (double a = 0.0; a <= Math.PI; a += Math.PI / 45.0) { //1の段から9の段について繰返す
s = Math.Sin(a); //サイン値を得る
Console.Write("{0,7:#.#####}:", s); //小数点以下5桁まで全7桁でサイン値を表示
//サイン値が1の時に50回になるように繰返す
for (int i = 1; i <= Math.Round(s * 50); i++) {
Console.Write("*"); //サイン値に比例する数だけ"*"を表示
}
Console.WriteLine(); //最期の"*"後に改行
}
}
}
アレンジ演習:p.121 sin01.cs
・1行目の「0.0」が表示されず、小数点の位置がずれていることを改善しよう ・小数点以下を5桁固定で末尾の0を省略しないようにしよう
作成例
//アレンジ演習:p.121 sin01.cs
using System;
class sin01 {
public static void Main() {
double s; //計算用(角度ごとのsin値を格納する)
//0度から180度(Math.PI)まで180÷45=4度ごとのラジアン値を求めて繰返す
for (double a = 0.0; a <= Math.PI; a += Math.PI / 45.0) { //1の段から9の段について繰返す
s = Math.Sin(a); //サイン値を得る
Console.Write("{0,7:#.00000}:", s); //小数点以下5桁まで全7桁でサイン値を表示
//サイン値が1の時に50回になるように繰返す
for (int i = 1; i <= Math.Round(s * 50); i++) {
Console.Write("*"); //サイン値に比例する数だけ"*"を表示
}
Console.WriteLine(); //最期の"*"後に改行
}
}
}
提出:アレンジ演習:p.121 sin01.cs
講義メモ
・p.115「for文」から
提出フォロー:アレンジ演習:p.113 switch02.cs
・分岐先として「4:印刷」を追加しよう
作成例
//アレンジ演習: p.113 switch02.cs
using System;
class switch02 {
public static void Main() {
Console.WriteLine("******* Menu *******");
Console.WriteLine("1:ファイル");
Console.WriteLine("2:編集");
Console.WriteLine("3:表示");
Console.WriteLine("4:印刷"); //【追加】
Console.WriteLine("0:終了");
Console.WriteLine("********************");
Console.Write("\n選択---");
string strAns = Console.ReadLine(); //文字列として読み込む
switch (strAns) { //文字列に応じて分岐
case "1": //"1"ならば
Console.WriteLine("ファイルが選択されました");
break;
case "2": //"2"ならば
Console.WriteLine("編集が選択されました");
break;
case "3": //"3"ならば
Console.WriteLine("表示が選択されました");
break;
case "4": //【以下追加】"4"ならば
Console.WriteLine("印刷が選択されました");
break;
case "0": //"0"ならば
Console.WriteLine("終了が選択されました");
break;
default: //上記のどれでもなければ
Console.WriteLine("入力ミスです");
break;
}
}
}
p.115 for文
・3種類の繰り返し構文「for」「while」「do-while」があり、用途に合わせて使い分けることができる
・for文は主に回数指定繰り返しに用いられるもので「開始、終了、毎」をそのまま表現できる
・書式: for(前処理, 継続条件, 毎回最後にする処理) { 繰り返し内容 }
・前処理:主に回数カウンタのクリアや開始値の代入に用いる。省略可
・継続条件:主に回数カウンタが所定回数に達したかや終了値なったかの関係演算子を記述。省略可
・毎回最後にする処理:主に回数カウンタのカウントアップやカウントダウンに用いる。省略可
・5回繰返す場合の例:
int i; for (i = 1; i <= 5; i++) {Console.Write(i);} //12345と表示
int i; for (i = 0; i < 5; i++) {Console.Write(i);} //01234と表示
・これを流れで示すと
① 変数iを0で初期化(前処理)
② 変数iが5未満なら下記を繰り返す(継続条件)
・変数iを表示
・変数iに+1する(毎回最後にする処理)
・なお、継続条件は繰り返しに入る前にチェックするので、初回からfalseになると一度も繰返さない
・if文と同様に、繰り返し内容が1文の場合{}は省略できるが、業務やチームのルールによっては必須としている場合もある
p.115 for01.cs
//p.115 for01.cs
using System;
class for01 {
public static void Main() {
int i; //繰り返しカウンタ
for (i = 0; i < 5; i++) { //カウンタを0にして5未満である間、+1しつつ繰り返す
Console.WriteLine("i = {0}", i);
}
}
}
p.1116(for文とデクリメント)
・繰り返しはカウントアップでもカウントダウンでも構わないので、処理上、メリットがあればデクリメントにすることもある
・5回繰返す場合の例:
int i; for (i = 5; i >= 1; i--) {Console.Write(i);} //54321と表示
p.116 for02.cs
//p.116 for02.cs
using System;
class for02 {
public static void Main() {
int i; //繰り返しカウンタ
for (i = 4; i >= 0; i--) { //カウンタを4にして0以上である間、-1しつつ繰り返す
Console.WriteLine("i = {0}", i);
}
}
}
p.117 forループからの脱出
・forの前処理, 継続条件, 毎回最後にする処理はどれも省略可で、継続条件を省略すると無限ループになる
・書式例: for (;;) {繰り返し内容} //無限ループ
・switch文と同様にブロック脱出文である「break;」が繰り返し内容において利用可能で、繰り返しからの脱出にできる
・継続条件で表現するのが難しい場合や、以上パターンの発生などで直ぐにforループからの脱出をしたい場合に「break;」を用いる
p.117 for03.cs
//p.117 for03.cs
using System;
class for03 {
public static void Main() {
int i = 0; //繰り返しカウンタを0で初期化
for (;;) { //無限ループ
Console.WriteLine("i = {0}", i);
i++;
if (i >= 5) { //iが5以上になったら
break; //ループ脱出
} //breakが実行されるとこの次の行へジャンプする
}
}
}
p.118 for04.cs
//p.118 for04.cs
using System;
class for04 {
public static void Main() {
int i; //繰り返しカウンタ
for (i = 0; ; i++) { //無限ループ
if (i >= 5) { //iが5以上になったら
break; //ループ脱出
}
Console.WriteLine("i = {0}", i);
} //breakが実行されるとこの次の行へジャンプする
}
}
p.118(for文の中でカウンタ変数の初期化)
・forの前処理において、カウンタ変数の初期化をすることもできる
例: for(int i = 0; i < 5; i++){…}
・こうすると、カウンタ変数の事前の宣言や初期化が不要になるが、カウンタ変数の有効範囲は繰返しのブロック{}の中のみに
なるので注意
・カウンタ変数は同じ名前(例:i)になりやすいので、forの前処理において初期化することで、誤ってループ外で扱われて
しまうことを防止できる
・逆に、カウンタ変数の値をループ外で扱いたい場合は、forの前に宣言や初期化しておくと良い
販売本数ランキング 今回トップも「ゼルダの伝説 ティアーズ オブ ザ キングダム(Switch)」GO!
“Summer Game Fest 2023”発表まとめ。『FF7 リバース』新映像、『龍が如く7 外伝』発売日、2D『ソニック』新作、『プリンス・オブ・ペルシャ』新作などが発表 GO!
『アーマード・コア』とナルトの新作でバンナムは1兆円企業へ【ゲーム企業の決算を読む】 GO!
REALITY XR cloud、Z世代に向けた就活イベント会場をメタバース「REALITY」上に期間限定オープン―USEN-NEXTと共同で革新的リクルーティングスタイルを提供 GO!
AppleがARヘッドセット「Vision Pro」発表―価格は3,499ドルから。2024年初めに発売開始 GO!
「CEDEC+KYUSHU 2023」11月25日ハイブリット開催―6月5日より「全国公募セッション枠」の受付けも開始 GO!
G2 Studios、インターンシップに向けたf4samurai/セガ/DONUTSとの合同オンラインイベントを7月7日開催 GO!
集英社、“AIグラビア”の販売終了 「生成AIの課題について検討足りなかった」 Twitterも削除 GO!
「ストリートファイター」新作、通信が不安定な状態続く プレイヤー数は100万突破 GO!
・5章に入ってから、ゲーム作成でよく使いそうな制御文が出てきたのでわくわくしてきました。
unityの方でも出てきている文なので過去に勉強したものも復習しつつ、しっかり頑張りたいと思います。
是非。応援します。
・そういえばプログラマーを目指すうえで、何か必要なこととかってあるでしょうか?言語取得とか技術とかはなんとなく
分かるのですが、例えばコミュニケーション能力とかってどうでしょうか。
まだまだ知識不足ですが色々細かいところも知りたいです!(*’▽’)
プログラマに限りませんが、適度な「心技体=やる気、スキル、体力」ですね。
コミュニケーション能力については、実は企業側(特に現場)が求めていることが誤解されていることが多いようです。
総合的には、単純に「愛想よく話す・聞く能力」を指しているわけではなく、報告・連絡・相談できる能力です。
よって、ゲームやITの業界では、基礎技術の知識・スキルも含まれる(実は大きい)と考えて良いでしょう。
次回予告:p.115「for文」から
講義メモ:講義メモ20230603.zip
p.101 制御文とは
・ここまで作成してきたプログラムは順次構造といい、開始から終了まで一方通行 ・その為、同じことを何度も記述したり(例:p.52 type07.cs)条件演算子で複雑な条件を記述してきた ・これを避けるためには、繰り返し構造と、分岐の構造を実装すると良い ・繰り返し構造や分岐の構造を実装するための文を制御文という
p.102 if文
・条件演算子で記述してきた条件を見やすく記述し、複雑な判断を明示できる
・書式: if (bool型を返す式) { 式の評価がtrueの時に実行する処理 }
・例: if (a > 0) { Console.Write("aは正の数"); }
・この書式では「式の評価がtrueの時に実行する処理」に複数の文を書ける
・この場合は適切に改行し字下げ(インデント)すると良い
・例:
if (a > 0 && b > 0) {
Console.Write("aは正の数");
Console.Write("bも正の数");
}
・「式の評価がtrueの時に実行する処理」が1文の場合{}は省略できる
・例: if (a > 0) Console.Write("aは正の数");
※業務やチームのルールによっては推奨されないこともある
p.102(if-else構文)
・if文には1つだけ「でなければ」を意味する「else {処理}」を記述できる
・elseの処理も1文の場合{}は省略できる
・書式: if (bool型を返す式) { trueの時の処理 } else { falseの時の処理 }
・falseの時の処理も適切に改行し字下げ(インデント)すると良い
・例:
if (a > 0 && b > 0) {
Console.Write("aは正の数");
Console.Write("bも正の数");
} else {
Console.Write("a、bのどちらかは正の数じゃない");
}
・なお「新しい行に型の始めかっこを配置する」のがC#の規定値になっているが、変更も可能
⇒ツール⇒オプションでテキストエディタ⇒C#⇒コードスタイル⇒書式設定⇒改行
p.104 if01.cs
//p.104 if01.cs
using System;
class if01 {
public static void Main() {
int n;
n = 10;
if (n > 5) { //式「n > 5」がtrueならば
Console.WriteLine("nは5より大きい");
} else { //falseならば
Console.WriteLine("nは5より大きくはない");
}
}
}
アレンジ演習:p.104 if01.cs
・p.105の上4行のとおり、nの値をコンソールから入力するようにしよう ・なお、分岐構造を持つプログラムでは全ての分岐を試す必要がある
作成例
//アレンジ演習:p.104 if01.cs
using System;
class if01 {
public static void Main() {
int n;
Console.Write("n : "); n = int.Parse(Console.ReadLine()); //【変更】
if (n > 5) { //式「n > 5」がtrueならば
Console.WriteLine("nは5より大きい");
} else { //falseならば
Console.WriteLine("nは5より大きくはない");
}
}
}
p.105 if02.cs・改
//p.105 if02.cs・改
using System;
class if02 {
public static void Main() {
Console.Write("所持金はいくらですか---");
int nShojikin = Int32.Parse(Console.ReadLine());
Console.Write("単価はいくらですか---");
int nTanka = Int32.Parse(Console.ReadLine());
Console.Write("何個買いますか---");
int nKosu = Int32.Parse(Console.ReadLine());
int nSogaku = nTanka * nKosu;
if (nShojikin < nSogaku) {
Console.WriteLine("所持金が足りません");
} else {
Console.WriteLine("所持金は" + (nShojikin - nSogaku) + "円残っています");
}
}
}
p.106(コンソールの文字色を変更する)
・コンソールの文字色を変更することができる ・書式:Console.ForegroundColor = ConsoleColor.色名; ・変更が永続してしまうので、必ず元に戻すと良い ※ bmi01.csではConsoleColor.Blackに戻しているが、正しくはGray
p.106 bmi01.cs・改
//p.106 bmi01.cs
using System;
class bmi01 {
public static void Main() {
Console.Write("身長(cm)---");
double bl = Convert.ToDouble(Console.ReadLine());
Console.Write("体重(kg)---");
double bw = Convert.ToDouble(Console.ReadLine());
double bmi = bw / Math.Pow((bl / 100.0), 2.0);
Console.WriteLine("BMI = {0:##.#}", bmi);
if (bmi >= 25.0) {
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("BMIが25以上です!!");
Console.ForegroundColor = ConsoleColor.Gray;
} else {
Console.WriteLine("BMIは25未満です");
}
}
}
p.107 bmi02.cs・改
//p.107 bmi02.cs・改
using System;
class bmi02 {
public static void Main() {
string strShow = "BMIは{0:##.#}で{1}です";
Console.Write("身長(cm)---");
double bl = Double.Parse(Console.ReadLine());
Console.Write("体重(kg)---");
double bw = Double.Parse(Console.ReadLine());
double bmi = bw / Math.Pow((bl / 100.0), 2.0);
if (bmi < 18.5) {
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine(strShow, bmi, "やせすぎ");
} else if (bmi >= 18.5 && bmi < 25.0) {
Console.WriteLine(strShow, bmi, "適正体重");
} else if (bmi >= 25.0 && bmi < 30.0) {
Console.ForegroundColor = ConsoleColor.DarkCyan;
Console.WriteLine(strShow, bmi, "第1度肥満");
} else if (bmi >= 30.0 && bmi < 35.0) {
Console.ForegroundColor = ConsoleColor.DarkYellow;
Console.WriteLine(strShow, bmi, "第2度肥満");
} else if (bmi >= 35.0 && bmi < 40.0) {
Console.ForegroundColor = ConsoleColor.Magenta;
Console.WriteLine(strShow, bmi, "第3度肥満");
} else {
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(strShow, bmi, "第4度肥満");
}
Console.ForegroundColor = ConsoleColor.Black;
}
}
p.106 bmi02.cs・補足
・elseは「でなければ」なので、else ifにした時にifの条件によってチェック不要なことを行うのはムダでミスを招きやすい
例:
if (bmi < 18.5) {
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine(strShow, bmi, "やせすぎ");
} else if (bmi > 18.5 && bmi < 25.0) { //「bmi >= 18.5 && 」は不要
Console.WriteLine(strShow, bmi, "適正体重");
}
・なお、Visual Studioのversionによってはムダであることを明示してくれる
アレンジ演習:p.106 bmi01.cs・改
・ムダな条件を取り除こう
作成例
//アレンジ演習:p.107 bmi02.cs・改
using System;
class bmi02 {
public static void Main() {
string strShow = "BMIは{0:##.#}で{1}です";
Console.Write("身長(cm)---");
double bl = Double.Parse(Console.ReadLine());
Console.Write("体重(kg)---");
double bw = Double.Parse(Console.ReadLine());
double bmi = bw / Math.Pow((bl / 100.0), 2.0);
if (bmi < 18.5) {
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine(strShow, bmi, "やせすぎ");
} else if (bmi < 25.0) {
Console.WriteLine(strShow, bmi, "適正体重");
} else if (bmi < 30.0) {
Console.ForegroundColor = ConsoleColor.DarkCyan;
Console.WriteLine(strShow, bmi, "第1度肥満");
} else if (bmi < 35.0) {
Console.ForegroundColor = ConsoleColor.DarkYellow;
Console.WriteLine(strShow, bmi, "第2度肥満");
} else if (bmi < 40.0) {
Console.ForegroundColor = ConsoleColor.Magenta;
Console.WriteLine(strShow, bmi, "第3度肥満");
} else {
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(strShow, bmi, "第4度肥満");
}
Console.ForegroundColor = ConsoleColor.Gray;
}
}
p.109 switch文
・bmi02.csのような複数の分岐を持つ構造を多分岐構造という
・C#には多分岐構造用の構文としてswitch文があり、整数型または文字列型の式の値によって分岐する場合に利用可能
・書式:
switch(式) {
case 値①: 式==値①の時の文; …; break;
case 値②: 式==値②の時の文; …; break;
…
default: 上記のどれでもない時の文; …; break;
}
・「default: 上記のどれでもない時の文; …; break;」は省略可
・C#では全ての「break;」が必須
・値①、値②、…には定数式(評価が固定である式、例えばconst付の定数)が記述できる
p.111 switch01.cs
//p.111 switch01.cs
using System;
class switch01 {
public static void Main() {
Console.WriteLine("******* Menu *******");
Console.WriteLine("1:ファイル");
Console.WriteLine("2:編集");
Console.WriteLine("3:表示");
Console.WriteLine("0:終了");
Console.WriteLine("********************");
Console.Write("\n選択---");
int ans = Int16.Parse(Console.ReadLine());
switch (ans) { //整数値に応じて分岐
case 1:
Console.WriteLine("ファイルが選択されました"); break;
case 2:
Console.WriteLine("編集が選択されました"); break;
case 3:
Console.WriteLine("表示が選択されました"); break;
case 0:
Console.WriteLine("終了が選択されました"); break;
default: //上記以外の場合
Console.WriteLine("入力ミスです"); break;
}
}
}
p.113 switch02.cs
// p.113 switch02.cs
using System;
class switch02 {
public static void Main() {
Console.WriteLine("******* Menu *******");
Console.WriteLine("1:ファイル");
Console.WriteLine("2:編集");
Console.WriteLine("3:表示");
Console.WriteLine("0:終了");
Console.WriteLine("********************");
Console.Write("\n選択---");
string strAns = Console.ReadLine(); //文字列として読み込む
switch (strAns) { //文字列に応じて分岐
case "1": //"1"ならば
Console.WriteLine("ファイルが選択されました");
break;
case "2": //"2"ならば
Console.WriteLine("編集が選択されました");
break;
case "3": //"3"ならば
Console.WriteLine("表示が選択されました");
break;
case "0": //"0"ならば
Console.WriteLine("終了が選択されました");
break;
default: //上記のどれでもなければ
Console.WriteLine("入力ミスです");
break;
}
}
}
提出:アレンジ演習:p.113 switch02.cs
・分岐先として「4:印刷」を追加しよう
・p.94「代入演算子」から
p.94 代入演算子
・2項=演算子:左辺の変数などに、右辺の値や式の評価を代入する ・複合代入演算子:よく用いられる「● = ● 演算子 ■」という式を「● 演算子= ■」とできる。この「演算子=」を複合代入演算子という。 ・例: a = a + 5; ⇒ a += 5; //aに5を足しこむ ・例: a = a - 5; ⇒ a -= 5; //aから5を差し引く ・例: a = a * 5; ⇒ a *= 5; //aを5倍した値にする ・例: a = a / 5; ⇒ a /= 5; //aを1/5倍した値にする ・例: a = a % 5; ⇒ a %= 5; //aを5で割った余りに置き換える ・上記以外に、ビット演算子を用いる「&=」「|=」「^=」「<<=」「>>=」もある。
p.95(暗黙の型変換)
・代入において左辺と右辺のデータ型が異なる場合、左辺が右辺よりも表現範囲が大きい型であれば、自動的に右辺の型が合わされて代入する。 ・例: int a = 5; long l = a; //aの値がlong型に拡大されて代入される ・この事を暗黙の型変換いい、拡大されることを拡大変換という。 ・ただし、一部の組み合わせにおいてはエラーになることがあるので注意。 ・例: Decimal型から他の型へ、符号付き型から符号無し型への拡大変換は不可。
p.97 演算子の優先順位
・暗記する必要はないが、代入と複合代入が優先度最下位であることは憶えておくと良い ・実際の優先順位に関わらず、カッコを用いて優先であることを明示するのが望ましい 例: a + b * c + d ⇒ a + (b * c) + d ・なお、シフト演算子は左辺を2進数に変換し、右辺をシフト数として、2進数を左右シフトした結果を返す 例: 7 << 2 ⇒ 2進数00000111 << 2 ⇒ 2進数00011100 = 10進数28 左へnシフトすると2のn乗倍になり、右にnシフトすると2の-n乗倍(1/2のn乗倍)になるので、CPU内部では掛け算や割り算の実装に 用いられている。また、掛け算や割り算をシフト演算子で書き直すと実行効率が上がる場合がある。
p.97 演算子の結合規則
・同じ演算子を複数並べた場合に、左右どちらから評価するかを結合規則という ・ほとんどの演算子は左から評価する 例:1 + 2 + 3 ⇒ 3 + 3 ⇒ 6 ・代入演算子などでは右から評価する 例:a = b = c = 7 ⇒ a = b = (c = 7) ⇒ a = b = 7 ⇒ a = (b = 7) ⇒ a = 7
p.100 練習問題 考え方
・catを1(2進数0001)、ratを2(2進数0010)、dogを4(2進数0100)で表すと、2進数において1である桁(ビット)で何を飼っているか 表現できる ・しかも、足し算によって、複数を飼っていることを表現できる 例:cat + rat ⇒ 0001 + 0010 = 0011 例:cat + rat + dog ⇒ 0001 + 0010 + 0100 = 0111 ・この加算はビットにおける論理和で表せる 例:cat | rat = 0001 | 0010 = 0011 例:cat | rat | dog = 0001 | 0010 | 0100 = 0111 ・これに対して、飼っているペットを表現する値に、cat(2進数0001)、rat(2進数0010)、dog(2進数0100)の論理積を取ると、 いるならtrueになる。 例:0011 & cat(0001)= 0001 なのでTrue 例:0011 & rat(0010)= 0010 なのでTrue 例:0011 & dog(0100)= 0000 なのでFalse
作成例
//p.100 練習問題 ex04.cs
using System;
class ex04
{
public static void Main()
{
Console.Write("猫(1:いる,0:いない):"); int a = int.Parse(Console.ReadLine());
Console.Write("鼠(2:いる,0:いない):"); int b = int.Parse(Console.ReadLine());
Console.Write("犬(4:いる,0:いない):"); int c = int.Parse(Console.ReadLine());
int sum = a | b | c; //ビット論理和にして10進数で情報を表現
Console.WriteLine("10進数で表現すると{0}", sum);
Console.WriteLine("猫は{0}", (sum & 1) == 1 ? "いる" : "いない"); //ビット論理積で判定
Console.WriteLine("鼠は{0}", (sum & 2) == 2 ? "いる" : "いない");
Console.WriteLine("犬は{0}", (sum & 4) == 4 ? "いる" : "いない");
}
}
販売本数ランキング 今回トップも「ゼルダの伝説 ティアーズ オブ ザ キングダム(Switch)」GO!
Meta Quest 3が今秋リリース決定。128GBモデルで74800円[税込]。より薄くより快適な新しいデザインを採用 GO!
桃鉄効果でコナミは今期業績予想の上振れもありえるか?【ゲーム企業の決算を読む】GO!
複数ゲーム会社にアプローチできるWeb就活企画「ゲーム開発ドラフト会議」が開催 GO!
バルス、“XR Tech”を活用したマーベラス保有IPの育成に向けて協業 GO!
拡散しないで…『S.T.A.L.K.E.R. 2: Heart of Chornobyl』開発ビルドのリークを受け開発元が声明発表 GO!
個人情報保護委、ChatGPT提供の米OpenAIに行政指導 人種や信条、病歴などを取得しないよう要請 GO!
・今回の論理演算子のところは最後のところが理解が追いつかないところがありましたので自宅でも色々調べて復習してみようと思います。
是非。
・私は理解するのにちょっと時間がかかる場合があるので、その時はゆっくりやっていただければありがたいです(;’∀’)
了解です。
超少人数クラスですので、遠慮なく「ちょっと待ったぁ」「もういっちょ」をどうぞ。