メッセージボックスの利用(1)chuoprogram.web.fc2.com/pdf/n05_pl2020.pdf2020年度都市環境学科プログラミング言語...
TRANSCRIPT
2020年度都市環境学科プログラミング言語 176
メッセージボックスの利用(1)using System;using System.Windows.Forms; //これが必要
class MessageBoxSample {public static void Main(string[] args) {int x, y=3;x = ++y;MessageBox.Show("xは" + x + "です.",
"メッセージボックスのサンプル");}
}
MessageBoxクラスのShowメソッドを用いる.
押されたボタンが何かをDialogResult列挙型のメンバー名で受け取ることができる.一般形:MessageBox.Show(メッセージ文,タイトル, ボタン, アイコン, 標準ボタン)
タイトル
メッセージ文
2020年度都市環境学科プログラミング言語
• ボタンの種類
177
メッセージボックスの利用(2)
2020年度都市環境学科プログラミング言語
• アイコンの種類
178
メッセージボックスの利用(3)
2020年度都市環境学科プログラミング言語 179
メッセージボックスの利用(4)using System;using System.Windows.Forms;
class MessageboxButtons {public static void Main(string[] args) {DialogResult result = MessageBox.Show("ファイルを上書きしますか?", "質問",MessageBoxButtons.YesNoCancel,MessageBoxIcon.Exclamation,MessageBoxDefaultButton.Button3);
switch (result) {case DialogResult.Yes:
Console.WriteLine("「はい」が選択されました");break;
case DialogResult.No:Console.WriteLine("「いいえ」が選択されました");break;
case DialogResult.Cancel:Console.WriteLine("「キャンセル」が選択されました");break;
default:Console.WriteLine("何も選択されませんでした");break;
}}
}
Enterキーが押されたときの標準ボタンを3つ目のキャンセルボタンに設定している
2020年度都市環境学科プログラミング言語
メッセージ文を途中で改行したいときは,2つのメッセージの間に
Environment.NewLine
という定数を挟めば,その部分で改行される.
→ 文字列に"¥n"をはさんでも改行される.
180
メッセージボックスの利用(5)
using System;using System.Windows.Forms;
class MessageBoxSample2 {public static void Main(string[] args) {int x, y=3;x = ++y;MessageBox.Show("xは" + x + "です."
+ Environment.NewLine+ "yは" + y + "です.","メッセージボックスのサンプル");
}}
2020年度都市環境学科プログラミング言語
メッセージ文の中の数値の書式を指定したい場合は,stringクラスのFormat()メソッドを用いる.※スライド163ページを参照
181
メッセージボックスの利用(6)
using System;using System.Windows.Forms;
class MessageBoxSample3 {public static void Main(string[] args) {double x = 3.14159265358979;string msg = string.Format
("xの値は{0,5:f2}です.", x);MessageBox.Show(msg, "書式の指定");
}}
2020年度都市環境学科プログラミング言語
• プログラムの制御構造は下記の6つ– (1) 連接(連なり)
– (2) 判断(分かれ)– (3) 多方向分岐
– (4) 所定回数反復(一定回数の繰り返し)– (5) 前判定反復
– (6) 後判定反復
• 上記以外は使ってはいけない.
182
流れの制御構造 ー 所定回数反復
2020年度都市環境学科プログラミング言語
for (変数=初期値; 変数<終端値; ++変数)文;
183
(4) 所定回数反復 ー for文
一般的形式
意味
変数の値を初期値から始めて1ずつ増やしながら終端値に達するまで文を繰り返し実行する.
• ここでいう変数とは,カウンターとも呼ばれ.for文を用いるときに一時的変数として宣言されることが多くfor文の中だけで有効でfor文が終わると消滅する.
2020年度都市環境学科プログラミング言語
for (int i=0; i<5; ++i)Console.WriteLine(i + " " + i*i);
(1)
(2)
for (double x=0; x<2.5; x+=0.5)Console.WriteLine(x + " " + x*x);
(3)
本制御は「所定回数反復」でカウンタはint型が基本.(3)は勧ない
184
所定回数反復(for文)の記述例
for (int i=5; i>0; --i)Console.WriteLine(i + " " + i*i);
i++も可
カウンターiの値が0, 1, 2, 3, 4の順に5とおりに変化する
カウンターiの値が5, 4, 3, 2, 1の順に5とおりに変化する
変数xの値が0, 0.5, 1, 1.5, 2の順に5とおりに変化する
2020年度都市環境学科プログラミング言語
0 01 12 43 94 16
(1) 5 254 163 92 41 1
(2) 0 00.5 0.251 11.5 2.252 4
(3)
出力の幅は自動的に決まる.double型でも,小数点以下が0だと,int型のように出力される.
185
前ページの制御の出力結果
2020年度都市環境学科プログラミング言語
using System;
class WriteLineFormatSample {public static void Main(string[] args) {
for (int i=0; i<10; ++i) {int j = i+1;Console.WriteLine
("{0,5:d}{1,5:d}", j, j*j);}
}}
対応
i=0, 1, 2, ..., 9
186
所定回数反復(for文)の例
自然数を扱うときは,int j = i+1;のように,0から始まるカウンタに
1を加えた変数を宣言すると良い.後に学ぶ配列の制御のことも踏まえて,for (int i=1; i<=10; ++i)とはしない方がよい.
2020年度都市環境学科プログラミング言語
----+----1----+----2----+-1: 1 1 i=0 (j=1)2: 2 43: 3 94: 4 165: 5 256: 6 367: 7 498: 8 649: 9 81
10: 10 100 i=9 (j=10)----+----1----+----2----+-
187
実行結果
2020年度都市環境学科プログラミング言語
using System;
class Const {public static void Main(string[] args) {const int N=10;for (int i=0; i<N; ++i) {int j = i+1;Console.WriteLine
("{0,5:d}{1,5:d}", j, j*j);}
}}
188
const定数
const int N; N=10; このように,分けて書くことはできない.
Fortranでは,parameter文を用いる.(例) integer, parameter :: N = 10
2020年度都市環境学科プログラミング言語 189
Fortranにおける所定回数反復
do 変数=初期値,最終値[,刻み幅]繰り返したい処理
end do
一般的形式
program constinteger, parameter :: N = 10integer i
do i=1, Nwrite(*,'(2i5)') i, i*i
end doend program const
Fortranで記述した前ページと同様なプログラム
2020年度都市環境学科プログラミング言語
using System;
class Const2 {public static void Main(string[] args) {
const int N=10;for (int i=0; i<N; ++i) {double x = i+1;Console.WriteLine("{0,3:f0}{1,9:f5}",
x, Math.Log(x));}
}}
190
数値計算関連メソッドの使用例
log 𝑥を表す数学メソッド
数学関数は,Mathクラスにメソッドとして多数が定義されている.
メソッドはPascal形式で記述する書法があるので,大文字で始まる.
2020年度都市環境学科プログラミング言語
----+----1----+1: 1 0.000002: 2 0.693153: 3 1.098614: 4 1.386295: 5 1.609446: 6 1.791767: 7 1.945918: 8 2.079449: 9 2.19722
10: 10 2.30259----+----1----+
191
実行結果
2020年度都市環境学科プログラミング言語 192
数値計算関連メソッド(1)頭に「Math.」が必要.x, yはfloat型,またはdouble型
2020年度都市環境学科プログラミング言語 193
数値計算関連メソッド(2)頭に「Math.」が必要.x, yはfloat(double)型.m, nはint(long)型.
2020年度都市環境学科プログラミング言語 194
制御構造の多重化(入れ子,nesting)
const int N=9;for (int i=0; i<N; ++i)for (int j=0; j<N; ++j)Console.WriteLine((i+1) + "×" +
(j+1) + "=" + (i+1)*(j+1));
i+1=1, 2, ..., 9
j+1=1, 2, ..., 9
(1) i=0のときに,j=0, 1, ..., 8と変化する.(2) i=1のときに,j=0, 1, ..., 8と変化する.
:(9) i=8のときに,j=0, 1, ..., 8と変化する.
動作:
• カウンタがiのfor文がカウンタがjのfor文を管理し,カウンタがjのfor文がWrileLine()メソッドを管理している.
2020年度都市環境学科プログラミング言語
const int N=3;for (int i=0; i<N; ++i)for (int j=0; j<N; ++j)Console.Write("{0:d}", (i+1)*(j+1));
(1)
123246369
出力結果
i+1=1 i+1=2 i+1=3
195
nesting(入れ子)と出力
2020年度都市環境学科プログラミング言語
const int N=3;for (int i=0; i<N; ++i)for (int j=0; j<N; ++j)Console.Write("{0,2:d}", (i+1)*(j+1));
(2)
出力結果
1 2 3 2 4 6 3 6 9
i+1=1 i+1=2 i+1=3
196
nesting(入れ子)と出力
2020年度都市環境学科プログラミング言語
1 2 32 4 63 6 9
const int N=3;for (int i=0; i<N; ++i) {for (int j=0; j<N; ++j)Console.Write("{0,2:d}", (i+1)*(j+1));
Console.WriteLine();}
(3)
出力結果 i+1=1i+1=2i+1=3
197
nesting(入れ子)と出力
このパターンで矩形の表を作成することが多い
2020年度都市環境学科プログラミング言語
using System; //ピンクの部分は見出しで青色部分が結果
class MultiTable {public static void Main(string[] args) {
const int N = 9;Console.Write(" ");for (int j=0; j<N; ++j)
Console.Write("{0,3:d}", (j+1));Console.WriteLine();for (int i=0; i<N; ++i) {
Console.Write("{0,3:d}", (i+1));for (int j=0; j<N; ++j)
Console.Write("{0,3:d}", (i+1)*(j+1));Console.WriteLine();
}}
}198
九九の表を作る
かけられる数
かける数
計算結果
2020年度都市環境学科プログラミング言語
----+----1----+----2----+----3--1: 1 2 3 4 5 6 7 8 92: 1 1 2 3 4 5 6 7 8 93: 2 2 4 6 8 10 12 14 16 184: 3 3 6 9 12 15 18 21 24 275: 4 4 8 12 16 20 24 28 32 366: 5 5 10 15 20 25 30 35 40 457: 6 6 12 18 24 30 36 42 48 548: 7 7 14 21 28 35 42 49 56 639: 8 8 16 24 32 40 48 56 64 7210: 9 9 18 27 36 45 54 63 72 81
----+----1----+----2----+----3--
199
九九の表の出力結果
実際に出力されるのは赤枠内のみ
2020年度都市環境学科プログラミング言語
を計算する
using System;
class SumSeries {public static void Main(string[] args) {
int s=0;Console.Write("nの値を入力してください>");int n = int.Parse(Console.ReadLine());for (int k=0; k<n; ++k) {
s += k+1;Console.WriteLine
("{0,7:d}{1,15:d}", k+1 , s);}
}}
初期値としてゼロを設定
200
for文による和の計算例
s = s+(k+1);と同じ
2020年度都市環境学科プログラミング言語
nの値を入力してください>20 .
1 12 33 64 105 15
:: (中途省略):
18 17119 19020 210
201
実行結果
7桁 15桁
2020年度都市環境学科プログラミング言語
using System;
class Factorial {public static void Main(string[] args) {
int f=1;Console.Write("nの値を入力してください>");int n = int.Parse(Console.ReadLine());for (int k=0; k<n; ++k) {f *= k+1;Console.WriteLine
("{0,7:d}{1,15:d}", k+1 , f);}
}}
初期値として1を設定
202
for文による階乗の計算例
f = f*(k+1);と同じ
2020年度都市環境学科プログラミング言語
nの値を入力してください>13 .
1 12 23 64 245 1206 7207 50408 403209 362880
10 362880011 3991680012 47900160013 1932053504
正しいか?
203
実行結果
後に見るように, 𝑛!の計算は,int型→12までlong型→20まで
しか計算できない!
2020年度都市環境学科プログラミング言語
• プログラムの制御構造は下記の6つ– (1) 連接(連なり)
– (2) 判断(分かれ)– (3) 多方向分岐
– (4) 所定回数反復(一定回数の繰り返し)– (5) 前判定反復
– (6) 後判定反復
• 上記以外は使ってはいけない.
204
流れの制御構造 ー 前判定反復
2020年度都市環境学科プログラミング言語
while (条件式) 文;
205
(5) 前判定反復 ー while文
一般的形式
意味
条件式が満たされている限り文を繰り返し実行する.一度も実行されないこともありうる.
do while (条件式)文
enddo
Fortranでは,do while~enddo文を用いる.
2020年度都市環境学科プログラミング言語
int i=0;while (i<5) {
Console.Write("{0,3:d}", i);++i;
}Console.WriteLine();
for (int i=0; i<5; ++i)Console.Write("{0,3:d}", i);
Console.WriteLine();
同様の内容をfor文を用いて記述した例
※このように,回数でのみで制御できる場合はfor文を用いるこ
とが可能である.実際には,他の条件と併用することが多い.
206
前判定反復(while文)の記述例(1)
※++i;のように,カウンタの値は自分で増やす必要がある.
2020年度都市環境学科プログラミング言語
0 1 2 3 4
どちらのプログラムも,0~4を横幅3桁に出力すし,最後に改行をする.
207
出力結果
2020年度都市環境学科プログラミング言語
using System;
class While1 {public static void Main(string[] args) {const int MaxInt=int.MaxValue;int n=0, f=1;Console.WriteLine
(" n n!");while (f < (double)MaxInt/(n+1)) {
f *= ++n;Console.WriteLine
("{0,7:d}{1,15:d}", n, f);}
}}
4バイトの最大の整数2,147,483,647
208
前判定反復(while文)の記述例(2)
𝑛!のうち,int型の変数で記憶できる最大のものを調べる
2020年度都市環境学科プログラミング言語
n n!1 12 23 64 245 1206 7207 50408 403209 36288010 362880011 3991680012 479001600
これより大きいと桁あふれ
209
出力結果
2020年度都市環境学科プログラミング言語 210
Fortranで記述したp.217と同様なプログラム
program while1implicit noneinteger, parameter :: MaxInt = 2147483647integer :: n=0, f=1write(*,*) ' n n!'
do while (f < dble(MaxInt)/(n+1))n = n+1f = f*nwrite(*,'(i7,i15)') n, f
enddoend program while1
8バイト浮動小数点型への変換
2020年度都市環境学科プログラミング言語
using System;
class While2 {public static void Main(string[] args) {const long MaxInt = long.MaxValue;int n=0; long f=1;Console.WriteLine
(" n n!");while (f < (double)MaxInt/(n+1)) {
f *= ++n;Console.WriteLine
("{0,7:d}{1,20:d}", n, f);}
}}
8バイトの最大の整数9,223,372,036,854,775,807
211
前判定反復(while文)の記述例(3)
𝑛!のうち,long型の変数で記憶できる最大のものを調べる
2020年度都市環境学科プログラミング言語
n n!1 12 23 64 245 1206 7207 50408 403209 362880: :19 12164510040883200020 2432902008176640000
これより大きいと桁あふれ
212
中途略
出力結果
2020年度都市環境学科プログラミング言語
using System;
class While3 {public static void Main(string[] args) {int sum=0, a;
a = int.Parse(Console.ReadLine());while (0 < a) {
sum += a;a = int.Parse(Console.ReadLine());
}Console.WriteLine("{0,5:d}", sum);
}}
同じ行が必要
213
前判定反復(while文)の記述例(4)キーボードから整数aを入力し続け,その整数aが正の間加算
を繰り返す.
前判定反復では,while文の前に条件式を確定しておかなければならない!
2020年度都市環境学科プログラミング言語
using System;
class While4 {public static void Main(string[] args) {int sum=0, a;
while (0 < (a = int.Parse(Console.ReadLine())))
sum += a;Console.WriteLine("{0,5:d}", sum);
}}
1つの文で記述できる
214
前判定反復(while文)の記述例(5)キーボードから整数aを入力し続け,その整数aが正の間加算
を繰り返すプログラムの修正版.
0 < (a = int.Parse(Console.ReadLine()))は,赤字の代入文自身がaと同じ値をもつ.したがって同じ文を2度記述する必要はなくなる.a=b=10;とすると,(b=10)の代入文がbと同じ値をもち,aも10となる.
2020年度都市環境学科プログラミング言語 215
while文を用いた逐次代入法(1)
𝑥= log 𝑥+ 1 + 2という非線形方程式を逐次代入法で解く.
𝑥= 𝑓(𝑥)という非線形の方程式があるとき,𝑥 = 𝑓 𝑥 という形の反復計算を𝑥 − 𝑥 < 𝜀となるまで行って解を求める方法を逐次代入法という.初期値として𝑥 = 1としてみる.
解
𝑦= log 𝑥+ 1 + 2
𝑦= 𝑥
2020年度都市環境学科プログラミング言語 216
while文を用いた逐次代入法(2)
n x0 1.0000001 2.6931472 3.3064793 3.4601214 3.4951765 3.5030056 3.5047457 3.5051318 3.5052179 3.50523610 3.50524011 3.505241
実行結果
※前判定反復は,12行目のように保険のため回数制限も行うと良い.
2020年度都市環境学科プログラミング言語 217
Fortranで記述したp.216と同様なプログラム
program successiveSubstitutionimplicit nonedouble precision, parameter :: EPS=1d-6integer, parameter :: Nmax=20double precision :: xb=1d0, diff=1d0, xainteger :: n=0
write(*,*) 'n x'write(*,'(i2, f10.6)') n, xbdo while((diff > EPS) .and. (n < Nmax))xa=log(xb+1)+2diff=abs(xa-xb)xb=xan=n+1write(*,'(i2,f10.6)') n, xb
enddoend program successiveSubstitution