情報基礎II/情報工学II 第二回目

情報基礎Ⅱ
(第2回)
月曜4限
担当:北川 晃
Visual Studio 2015を使ってみよう
ファイルメニューから,新規作成→プロジェクトを選ぶ.
Visual Basicからコンソールアプリケーションを選び,
’Hello’と名前をつける.(保存箇所にも注意)
プログラミングの第一歩
ここにプログラムを書く.
Sub:サブルーチン,
ひとかたまりのプログラム
(値を返さない)
プログラミングの第一歩(続き)
Sub Main()
Dim s As String
s = "Hello world"
Console.WriteLine(s)
End Sub
左のプログラムを入力して保存
プログラミングの第一歩(続き)
「デバッグ」タブから,
「デバッグなしで開始」を選ぶ. コンソールに結果が表示される.
プロジェクトとソリューション
プロジェクト:
• フォームやプログラムなどを含む1つの
アプリケーション全体を指す.
• プロジェクトごとにプログラムを作成して保存.
• プログラムを作成する=プロジェクトを作成する
ソリューション:
• 1つまたは複数のプロジェクトと,それ全体を含む.
• C#など,Visual Studioの他の言語の
プロジェクトを含むことができる.
• 当面,1つのソリューションに1つのプロジェクトを作成
コード記述の基本
• ステートメント(文)は1行に1つが基本.
• 長い文の場合は,文末にスペースと
アンダースコアを書くことで,次の行に継続できる.
• 各行でアポストロフィ(’)をつけた箇所以降は,
コメント扱いとなる(何も処理されない).
 コメントは,プログラムを見る人間向けの説明書き.
 プログラムのうち,半分程度がコメントであるプログラム
がよいとされる.
 折に触れ,コメントをつけるよう心がけるとよい.
定数と変数
• 定数:プログラムで扱うデータを定数という.
(プログラム実行中に,その値は変わらない)
• 変数:データを記憶する場所を変数という.
(その値は計算中に変化する場合がある)
変数名の付け方
 頭文字は英字.
 英字,数字,アンダースコア(_)を使用する.
 大文字,小文字の区別はない.
 字数は16383字以内.
定数と変数の型
いろいろな型のデータがあるが,
基本的には以下のものを用いる.
• 整数型:Integer
• 単精度実数型:Single
• 倍精度実数型:Double
• 文字列:String
• ブール型(論理型):Boolean
• 日付型:Date
変数の宣言
プログラムの最初に,必ず変数の型宣言を行う.
Dim文
Dim 変数名, … As 型名, 変数名, … As 型名
例:
Dim Gokei As Integer
Dim a As Single, b As Double
Dim moji5 As String
Dim L As Boolean
Dim sum As Integer=100
宣言時に任意の
初期データを設定可能
四則演算,様々な演算
• 変数にデータや式の計算結果を
記憶させるには,代入文を用いる.
• 等号“=”は,右辺の式の計算結果を
左辺の変数に代入するという意味である.
• 式に用いることのできる演算子は,次の通り.
 ():かっこ
 \:整数除算の商
 ^:べき乗
 Mod:整数除算の余り
 -:負符号
 +, -:加算,減算
 *, /:乗算,除算
 &:文字の結合
プログラムの例
二つの整数の和,差,積,商,余りを計算するプログラム
Dim m, n, wa, sa, seki, sho, amari As Integer
’値を代入する
m=7
整数型の変数宣言
n=3
値を代入
wa=m+n
sa=m-n
seki=m*n
演算の実行
sho=m\n
amari=m-(m\n)*n
コメント文
文の継続
Console.WriteLine( _
“和={0},差={1},積={2},商={3},余り={4}”, _
wa, sa, seki, sho, amari)
プログラミング演習
• 二つの整数m,nの和,差,積,商,余りを計算する
プログラムにおいて,mおよびnの値をキーボードから
入力する形式に変更してみよ.
• 円の半径rを読み込んで,円周の長さLと
面積Sを計算して表示させるプログラムを作れ.
解答例:m, nの和,差,積,商,余り
Console.Title=“m, nの和,差,積,商,余り”
Dim m, n, wa, sa, seki, sho, amari As Integer
Console.Write(“m=”)
m=Console.ReadLine()
Console.Write(“n=”)
n=Console.ReadLine()
入力に先立って“m=”と
表示させることで,次に
何をすればよいかわかり
やすくなる.
wa=m+n
sa=m-n
seki=m*n
sho=m\n
amari=m-(m\n)*n
Console.WriteLine( _
“和={0},差={1},積={2},商={3},余り={4}”, _
wa, sa, seki, sho, amari)
出力例:m, nの和,差,積,商,余り
解答例:円の円周,面積の計算
Console.Title = "円の円周,面積の計算"
単精度実数型
Dim r, pi, L, S As Single
Console.WriteLine("半径を入力して下さい")
Console.Write("r=")
“WriteLine”と
r = Console.ReadLine()
“ Write”の使い
pi = 3.1415926
L = 2 * pi * r
S = pi * r ^ 2
πの近似値を代入
分けに注意
べきの計算
文字列の途中で改行する方法
Console.WriteLine("円周の値は{0}," _
& "円の面積は{1}", L, S)
出力例:円の円周,面積の計算
判断と飛び越し1
WHILE型
IF文
条件成立?
NO
繰り返して
実行する部分
GoTo文
次の処理へ
YES
If文の基本的な表式1
条件式:
•条件式が満たされれば文1を実行
•満たされないときは文2を実行
[ ]で囲まれたElse句は省略可.
If 条件式 Then 文1 [Else 文2]
条件式(比較演算子)の書き方
•
•
•
•
•
•
<
<=
>
>=
=
<>
(より小さい)
(以下)
(より大きい)
(以上)
(等しい)
(等しくない)
If
If
If
If
If
If
a<100 Then ……
a<=100 Then ……
a>100 Then ……
a>=100 Then ……
a=100 Then ……
a<>100 Then ……
1行のIf文の例文
Dim a, b, c, d, As Integer
Dim flag As Boolean
If a > b Then c = 100 Else c = -100
If a <= b Then c = 125
If flag Then c = d
• 条件式は論理型の変数として扱われる.
• 満たされた場合は「真」(True),
満たされない場合は「偽」(False)という.
• 条件式に,論理型の変数を用いることも可能.
例題:ユークリッドの互除法
ユークリッドの互除法を用いて,2つの正整数a,b
(a>b)の最大公約数を求めるプログラムを作れ.
あまり
と
の最大公約数は
例:1058と943の最大公約数
•1058÷943=1 あまり 115
(943と115の最大公約数)
•943÷115=8 あまり 23
(115と23の最大公約数)
•115÷23=5 あまり 0
と
のとき,
の最大公約数に等しい.
•あまりが0になるまで
この作業を繰り返す.
•あまりが0になったときの
割る数が最大公約数
ユークリッドの互除法:出力例
ユークリッドの互除法のアルゴリズム
1. 2つの整数aとbを読み込む.
2. a→m,b→nを代入.
3. ℓ=(m÷nのあまり)を計算.
4. (n,ℓ)を新たな(m,n)として代入.
5. 手順3と4を,あまりℓが0になるまで繰り返す.
6. このときのnを最大公約数として書き出す.
プログラム例:ユークリッドの互除法
Dim a, b, ℓ, m, n As Integer
ℓ=lと読み替えてください
Console.Write("一つ目の整数を入力して下さい")
a = Console.ReadLine()
Console.Write("二つ目の整数を入力して下さい")
b = Console.ReadLine()
GoTo で m = a
飛ぶ先 n = b
余りを計算して,0なら
‘point2’へ飛べ,という命令
point1: ℓ = m - (m \ n) * n
If ℓ = 0 Then GoTo point2
m = n
この二つの行を
n = ℓ
GoTo point1
逆にしてはならない
条件成立?
NO
繰り返して
実行する部分
point2: Console.WriteLine("最大公約数は{0}", n)
次の処理へ
YES
Whileループを用いた条件分岐
• While……End While文
ある条件によって繰り返しを続けるかどうかを判断するループ
While 条件式
文ブロック
End While
• 条件式が真(True)の間はループを繰り返す.
• 条件が最初から偽(False)の場合は,
ループを1回も実行しない.
While文の例文
Dim sum As Integer = 0, i As Integer
i = 1
While i <= 10
sum = sum + i
i = i + 1
End While
iが11を越えるまで,
以下の命令を繰り返せ.
変数’sum’に’i’を加えた
ものを新たな’sum’とする.
Console.WriteLine(“合計は{0}”, sum)
While文の条件式を誤れば,ループが
無限に繰り返されることにもなる.
演習:ユークリッドの互除法
ユークリッドの互除法を用いて,2つの正整数a,b
(a>b)の最大公約数を求めるプログラムを作れ.
ただし,While文によるループを用いること.
あまり
と
の最大公約数は
例:1058と943の最大公約数
•1058÷943=1 あまり 115
(943と115の最大公約数)
•943÷115=8 あまり 23
(115と23の最大公約数)
•115÷23=5 あまり 0
と
のとき,
の最大公約数に等しい.
•あまりが0になるまで
この作業を繰り返す.
•あまりが0になったときの
割る数が最大公約数
プログラム例:ユークリッドの互除法
Dim a, b, ℓ, m, n As Integer
Console.Write("一つ目の整数を入力して下さい")
a = Console.ReadLine()
Console.Write("二つ目の整数を入力して下さい")
b = Console.ReadLine()
m = a
n = b
余りが0かどうかを判定
ℓ = m - (m \ n) * n
While ℓ <> 0
m = n
n = ℓ
ℓ = m - (m \ n) * n
End While
この二つの行を
逆にしてはならない
余りを計算し直して
もう一度評価
Console.WriteLine("最大公約数は{0}", n)
プログラミング演習
整数𝑛を一つキーボードから読み込み,1から𝑛までの
和を計算するプログラムを作れ.
𝑛 = 8の場合:
1から1までの和は,1
1から2までの和は,3
1から3までの和は,6
1から4までの和は,10
1から5までの和は,15
1から6までの和は,21
1から7までの和は,28
1から8までの和は,36
計算終了!
プログラミング演習:プログラム例
Dim i, n, s As Integer
s = 0
Console.Write("n=")
n = Console.ReadLine()
i = 0
point1: i = i + 1
If i > n Then GoTo point2
s = s + i
Console.WriteLine("1から{0}までの和は,s={1}", i, s)
GoTo point1
point2: Console.WriteLine("計算終了!")