SlideShare una empresa de Scribd logo
1 de 37
ji-5. 繰り返し計算
1
(Java プログラミング入門)
URL: https://www.kkaneko.jp/pro/ji/index.html
金子邦彦
内容
• 例題1.自然数の和
• 例題2.最大公約数の計算
• 例題3.ベクトルの長さ
while 文
• 例題4.九九の表
for 文と繰り返しの入れ子
• 例題5.ド・モアブルの公式
計算誤差の累積
2
目標
• 繰り返し(while 文, for 文)を使って,繰り返し
計算を行えるようになること
• ループカウンタとして,整数の変数を使うこと
• 見やすいプログラムを書くために,字下げを行う
3
繰り返しとは
• 繰り返しとは,ある条件が満たされるまで,同じ
ことを繰り返すこと.
• 繰り返しを行うための文としてwhile文, for 文な
どがある.
4
繰り返しの例
• ユークリッドの互助法
• m と n の最大公約数を求めるために,「割った余りを
求めること」を,余りが0になるまで繰り返す.
• 九九の表
• 九九の表を求めるために,掛け算を81回繰り返す
5
オンライン開発環境 Online GDB
• プログラミングを行えるオンラインのサービス
https://www.onlinegdb.com
• ウェブブラウザを使う
• たくさんの言語を扱うことができる
Python3, Java, C/C++, C#, JavaScript,
R, アセンブリ言語,SQL など
• オンラインなので、「秘密にしたいプログラム」
を扱うには十分な注意が必要 6
Online GDB で Java を動かす手順
① ウェブブラウザを起動する
② 次の URL を開く
https://www.onlinegdb.com
7
③ 「Language」のところで,「Java」を選ぶ
8
エディタ画面
実行ボタン
プログラムを
書き換えること
ができる
9
例題1.自然数の和
• 整数データ(Nとする)を読み込んで,1からN
までの和を求めるプログラムを作る
• ここでは,練習のため,自然数の和の公式は使わ
ずに,while文を用いる
例) 100 → 5050
10
import java.util.Scanner;
public class Main
{
public static void main(String[] args) {
int N, sum, i;
Scanner s = new Scanner(System.in);
System.out.println("Please Enter N =");
N = s.nextInt();
sum = 0;
i = 1;
while(i <= N) {
sum = sum + i;
i = i + 1;
}
System.out.printf("goukei = %dn", sum);
}
11
繰り返し実行される
部分
条件式
自然数の和
12
実行結果の例
繰り返し処理の中身
• 繰り返しの前
i = 1 と sum = 0 を実行
• 繰り返しの各ステップでなされること
1. 「sum」 に 「i」 を足しこむ
→「sum」には,その時点での「1から i 」までの和
が入る
2. 「i」 の値を1増やす
• 繰り返しの終了条件
i <= N が成り立たなくなったら終了
→ つまり i > N になったら終了
13
自然数の和
14
N = 7 とすると
i <= 7 が成立する sum = 0 + 1
i <= 7 が成立する sum = 1 + 2
i <= 7 が成立する sum = 3 + 3
i <= 7 が成立する sum = 6 + 4
i <= 7 が成立する sum = 10 + 5
i <= 7 が成立する sum = 15 + 6
i <= 7 が成立する sum = 21 + 7
i <= 7 が成立しない
i = 2
i = 3
i = 4
i = 5
i = 6
i = 7
i = 8
繰り返し
1回目
繰り返し
2回目
繰り返し
3回目
繰り返し
4回目
繰り返し
5回目
繰り返し
6回目
繰り返し
7回目
繰り返し
8回目
sum の値 i の値
はじめは sum = 0 i = 1
while 文
• 何かの処理の繰り返し
• 繰り返しのたびに while 文で書かれた条件式の真
偽が判定され, 真である限り,while のあとに続
く文が実行され続ける.
15
例題2.最大公約数の計算
• 2つの整数データを読み込んで,最大公約数を求
めるプログラムを作る.
• ユークリッドの互助法を用いること
• ユークリッドの互助法を行うために while 文を使い,
余りを求めることを繰り返す.
例) 20, 12 のとき: 4
16
ユークリッドの互助法
• 最大公約数を求めるための手続き
• m, n の最大公約数は,
• m ≧ n とすると,
• 「m をn で割った余り」 = 0 なら,最大公約数は n
• 「m をn で割った余り」 > 0 なら,m と n の最大公約
数は, 「m をn で割った余り」 と n の最大公約数に等
しい
( なお,n > 「m をn で割った余り」 が成り立つ)
17
import java.util.Scanner;
public class Main
{
public static void main(String[] args) {
int m, n, r;
Scanner s = new Scanner(System.in);
System.out.println("Please Enter m =");
m = s.nextInt();
System.out.println("Please Enter n =");
n = s.nextInt();
r = m % n;
while(r > 0) {
m = n;
n = r;
r = m % n;
}
System.out.printf("GCD = %dn", n);
}
} 18
条件が成り立つ限り,
実行されつづける部分
条件式
最大公約数の計算
19
実行結果の例
繰り返し処理の中身
• 繰り返しの前
r = m % n を実行(m を n で割った余りが r に入る)
• 繰り返しの各ステップでなされること
m = n;
n = r;
r = m % n;
を実行(m, n, r の値は小さくなっていく)
• 繰り返しの終了条件
r が 0 になったら終了
20
最大公約数の計算
21
m = 80, n = 35 とすると,
最初の「 r = m % n; 」で, r = 10 になる
r > 0 が成立する m = 35 n = 10 r = 5
r > 0 が成立する m = 10 n = 5 r = 0
r > 0 が成立しない
繰り返し
1回目
繰り返し
2回目
繰り返し
3回目
m の値 n の値 r の値
80, 35 の最大公約数は
35, 10 の最大公約数に等しい
35, 10 の最大公約数は
10, 5 の最大公約数に等しい
例題3.総和と平均
• データ x1, x2, ... xk を1つづつ読み込んで,合計
と平均を求めるプログラムを作成す
• 負の数が入力されたら終了する
整数のデータ 1, 2, 3 に対して
1
2
3
-1
22
入力
import java.util.Scanner;
public class Main
{
public static void main(String[] args) {
int sum, i, x;
sum = 0;
i = 0;
Scanner s = new Scanner(System.in);
System.out.printf("Please Enter x[%d] =", i);
x = s.nextInt();
while(0 <= x) {
sum = sum + x;
i = i + 1;
System.out.printf("Please Enter x[%d] =", i);
x = s.nextInt();
}
System.out.printf("sum = %dn", sum);
System.out.printf("%d / %d = %d", sum, i, sum / i);
}
}
23
条件が成り立つ限り,
実行されつづける部分
条件式
総和と平均
24
実行結果の例
繰り返し処理の中身
• 繰り返しの前
sum = 0 と i = 0 を実行
X0 を読み込む
• 繰り返しの各ステップでなされること
1. 「sum」 に 「Xi」 を足しこむ
→「sum」には,その時点での「X0から Xi 」までの和
が入る
2. 「i」 の値を1増やす
3. Xi を読み込む
• 繰り返しの終了条件
Xi < 0 ならば終了
25
例題4.九九の表
• 九九の表を表示するプログラムを作成する
• 九九の表を表示するために,繰り返しの入れ子を使う
26
public class Main
{
public static void main(String[] args) {
int i, j;
for(i = 1; i <= 9; i++) {
System.out.printf("%3d:", i);
for(j = 1; j <= 9; j++) {
System.out.printf("%3d", i * j);
}
System.out.println("");
}
}
}
27
繰り返し
実行される部分
実行結果画面(例)
28
for 文
29
例題5.ド・モアブルの定理
• θを読み込んで,次の値を計算するプログラムを作
る
• なお,i は虚数単位
• ここでは (sinθ+ i cosθ)n を求めるために,while文を用
いた繰り返し計算を行ってみる
30
 n
i 
 sin
cos 

 n
i
n sin
cos 
複素数の積
z1 = x1 + i y1
z2 = x2 + i y2 のとき
z1 z2 = (x1 + i y1) (x2 + i y2 )
= x1x2 + x1i y2 + i y1x2 + i y1i y2
= x1x2 - y1y2 + i (x1y2 + y1x2 )
31
実数部 虚数部
import java.lang.Math;
import java.util.Scanner;
public class Main
{
public static void main(String[] args) {
int n, j;
double x1, y1, x2, y2, theta;
Scanner s = new Scanner(System.in);
System.out.println("Please Enter n =");
n = s.nextInt();
System.out.println("Please Enter theta =");
theta = s.nextFloat();
x1 = Math.cos(theta);
y1 = Math.sin(theta);
x2 = x1;
y2 = y1;
j = 1;
while(j <= n) {
System.out.printf("(cos theta + i sin theta)%d = %8.3f + i%8.3fn", j, x1, y1);
System.out.printf("cos %d theta + i sin %d theta = %8.3f + i %8.3fn", j, j,
Math.cos(j * theta), Math.sin(j * theta));
x1 = x1 * x2 - y1 * y2;
y1 = x1 * y2 + x2 * y1;
j = j + 1;
}
}
} 32
繰り返し実行される
部分
条件式
実行結果
33
繰り返し処理の中身
• 繰り返しの前
を実行
• 繰り返しの各ステップでなされること
を実行 (x1 が実数部,y1 が虚数部)
34
(cosθ+ i sinθ)n = cos nθ+ i sin nθ
(cosθ+ i sinθ)2 = cos2θ- sin2θ+ 2i cosθsin θ
= cos2θ+ i sin2θ
(cosθ+ i sinθ)3 = (cosθ+ i sinθ)2 (cosθ+ i sinθ)
= (cos2θ+i sin2θ) (cosθ+ i sinθ)
= cos2θcosθ- sin2θsinθ
+ i (cos2θsinθ- sin2θcosθ)
= cos (2θ+θ) + i sin (2θ+θ)
= cos3θ+ i sin3θ
(以下同様に考える.数学的帰納法で証明できる)
35
計算結果から分かること
• 本来なら「 (cosθ+ i sinθ)n = cos nθ+ i sin nθ 」が成
り立つはず
• しかし,コンピュータでの計算は,近似計算
• 計算を繰り返す(つまり、計算結果を使った計算)
たびに,誤差が積み重なる
36
演習.m から n までの和
• 2つの整数データ(M, Nとする)を読み込んで,
MからNまでの和を求めるプログラムを作りなさい
37

Más contenido relacionado

Similar a ji-5. 繰り返し計算

Introduction to NumPy & SciPy
Introduction to NumPy & SciPyIntroduction to NumPy & SciPy
Introduction to NumPy & SciPyShiqiao Du
 
新しい並列for構文のご提案
新しい並列for構文のご提案新しい並列for構文のご提案
新しい並列for構文のご提案yohhoy
 
Analyze by StatsModels or Numpy
Analyze by StatsModels or NumpyAnalyze by StatsModels or Numpy
Analyze by StatsModels or NumpyToshiki NOGUCHI
 
6_C言語入門 - 式と演算子について
6_C言語入門 - 式と演算子について6_C言語入門 - 式と演算子について
6_C言語入門 - 式と演算子についてbc_rikko
 
8 並列計算に向けた pcセッティング
8 並列計算に向けた pcセッティング8 並列計算に向けた pcセッティング
8 並列計算に向けた pcセッティングTakeshi Takaishi
 
Async design with Unity3D
Async design with Unity3DAsync design with Unity3D
Async design with Unity3DKouji Hosoda
 
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)啓 小笠原
 
Python standard 2022 Spring
Python standard 2022 SpringPython standard 2022 Spring
Python standard 2022 Springanyakichi
 
15分でざっくり分かるScala入門
15分でざっくり分かるScala入門15分でざっくり分かるScala入門
15分でざっくり分かるScala入門SatoYu1ro
 
第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016kyoto university
 
プログラミング
プログラミングプログラミング
プログラミングsaireya _
 
ji-3. 条件分岐と場合分け
ji-3. 条件分岐と場合分けji-3. 条件分岐と場合分け
ji-3. 条件分岐と場合分けkunihikokaneko1
 
lispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learninglispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep LearningSatoshi imai
 
Cython intro prelerease
Cython intro prelereaseCython intro prelerease
Cython intro prelereaseShiqiao Du
 
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexprGenya Murakami
 
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミングOuka Yuka
 
DS Exercise Course 2
DS Exercise Course 2DS Exercise Course 2
DS Exercise Course 2大貴 末廣
 

Similar a ji-5. 繰り返し計算 (20)

Introduction to NumPy & SciPy
Introduction to NumPy & SciPyIntroduction to NumPy & SciPy
Introduction to NumPy & SciPy
 
新しい並列for構文のご提案
新しい並列for構文のご提案新しい並列for構文のご提案
新しい並列for構文のご提案
 
Analyze by StatsModels or Numpy
Analyze by StatsModels or NumpyAnalyze by StatsModels or Numpy
Analyze by StatsModels or Numpy
 
[xDNCL] 配布資料
[xDNCL] 配布資料[xDNCL] 配布資料
[xDNCL] 配布資料
 
6_C言語入門 - 式と演算子について
6_C言語入門 - 式と演算子について6_C言語入門 - 式と演算子について
6_C言語入門 - 式と演算子について
 
cp-7. 配列
cp-7. 配列cp-7. 配列
cp-7. 配列
 
Coqチュートリアル
CoqチュートリアルCoqチュートリアル
Coqチュートリアル
 
8 並列計算に向けた pcセッティング
8 並列計算に向けた pcセッティング8 並列計算に向けた pcセッティング
8 並列計算に向けた pcセッティング
 
Async design with Unity3D
Async design with Unity3DAsync design with Unity3D
Async design with Unity3D
 
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
 
Python standard 2022 Spring
Python standard 2022 SpringPython standard 2022 Spring
Python standard 2022 Spring
 
15分でざっくり分かるScala入門
15分でざっくり分かるScala入門15分でざっくり分かるScala入門
15分でざっくり分かるScala入門
 
第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016
 
プログラミング
プログラミングプログラミング
プログラミング
 
ji-3. 条件分岐と場合分け
ji-3. 条件分岐と場合分けji-3. 条件分岐と場合分け
ji-3. 条件分岐と場合分け
 
lispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learninglispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learning
 
Cython intro prelerease
Cython intro prelereaseCython intro prelerease
Cython intro prelerease
 
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr
 
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
 
DS Exercise Course 2
DS Exercise Course 2DS Exercise Course 2
DS Exercise Course 2
 

Más de kunihikokaneko1

cs-8. 表計算ソフトウエアを用いたデータの扱い
cs-8. 表計算ソフトウエアを用いたデータの扱い cs-8. 表計算ソフトウエアを用いたデータの扱い
cs-8. 表計算ソフトウエアを用いたデータの扱い kunihikokaneko1
 
cs-7. 乱数,シミュレーション
cs-7. 乱数,シミュレーション  cs-7. 乱数,シミュレーション
cs-7. 乱数,シミュレーション kunihikokaneko1
 
cs-6. データベースとデータサイエンス
cs-6. データベースとデータサイエンスcs-6. データベースとデータサイエンス
cs-6. データベースとデータサイエンスkunihikokaneko1
 
cs-5. 人工知能の概要
cs-5. 人工知能の概要 cs-5. 人工知能の概要
cs-5. 人工知能の概要 kunihikokaneko1
 
cs-4. プログラミング入門
cs-4. プログラミング入門cs-4. プログラミング入門
cs-4. プログラミング入門kunihikokaneko1
 
cs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックス
cs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックスcs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックス
cs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックスkunihikokaneko1
 
cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素
cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素 cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素
cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素 kunihikokaneko1
 
cs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタ
cs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタcs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタ
cs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタkunihikokaneko1
 
mi-8. 人工知能とコンピュータビジョン
mi-8. 人工知能とコンピュータビジョンmi-8. 人工知能とコンピュータビジョン
mi-8. 人工知能とコンピュータビジョンkunihikokaneko1
 
mi-7. 学習と検証, 学習不足, 過学習, 学習曲線
mi-7. 学習と検証, 学習不足, 過学習, 学習曲線mi-7. 学習と検証, 学習不足, 過学習, 学習曲線
mi-7. 学習と検証, 学習不足, 過学習, 学習曲線kunihikokaneko1
 
mi-6. 画像分類システム
mi-6. 画像分類システムmi-6. 画像分類システム
mi-6. 画像分類システムkunihikokaneko1
 
mi-5. ディープラーニング
mi-5. ディープラーニングmi-5. ディープラーニング
mi-5. ディープラーニングkunihikokaneko1
 
mi-3. データサイエンス・AIの演習
mi-3. データサイエンス・AIの演習mi-3. データサイエンス・AIの演習
mi-3. データサイエンス・AIの演習kunihikokaneko1
 
mi-2. データサイエンス・AIの事例
mi-2. データサイエンス・AIの事例mi-2. データサイエンス・AIの事例
mi-2. データサイエンス・AIの事例kunihikokaneko1
 
mi-1. 人工知能の概要
mi-1. 人工知能の概要mi-1. 人工知能の概要
mi-1. 人工知能の概要kunihikokaneko1
 
Coding Standards of C++ について
 Coding Standards of C++ について  Coding Standards of C++ について
Coding Standards of C++ について kunihikokaneko1
 
co-3. サブクラス、継承
co-3. サブクラス、継承co-3. サブクラス、継承
co-3. サブクラス、継承kunihikokaneko1
 
co-2. メソッド定義と呼び出し
co-2. メソッド定義と呼び出しco-2. メソッド定義と呼び出し
co-2. メソッド定義と呼び出しkunihikokaneko1
 

Más de kunihikokaneko1 (20)

cs-8. 表計算ソフトウエアを用いたデータの扱い
cs-8. 表計算ソフトウエアを用いたデータの扱い cs-8. 表計算ソフトウエアを用いたデータの扱い
cs-8. 表計算ソフトウエアを用いたデータの扱い
 
cs-7. 乱数,シミュレーション
cs-7. 乱数,シミュレーション  cs-7. 乱数,シミュレーション
cs-7. 乱数,シミュレーション
 
cs-6. データベースとデータサイエンス
cs-6. データベースとデータサイエンスcs-6. データベースとデータサイエンス
cs-6. データベースとデータサイエンス
 
cs-5. 人工知能の概要
cs-5. 人工知能の概要 cs-5. 人工知能の概要
cs-5. 人工知能の概要
 
cs-4. プログラミング入門
cs-4. プログラミング入門cs-4. プログラミング入門
cs-4. プログラミング入門
 
cs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックス
cs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックスcs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックス
cs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックス
 
cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素
cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素 cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素
cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素
 
cs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタ
cs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタcs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタ
cs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタ
 
mi-8. 人工知能とコンピュータビジョン
mi-8. 人工知能とコンピュータビジョンmi-8. 人工知能とコンピュータビジョン
mi-8. 人工知能とコンピュータビジョン
 
mi-7. 学習と検証, 学習不足, 過学習, 学習曲線
mi-7. 学習と検証, 学習不足, 過学習, 学習曲線mi-7. 学習と検証, 学習不足, 過学習, 学習曲線
mi-7. 学習と検証, 学習不足, 過学習, 学習曲線
 
mi-6. 画像分類システム
mi-6. 画像分類システムmi-6. 画像分類システム
mi-6. 画像分類システム
 
mi-5. ディープラーニング
mi-5. ディープラーニングmi-5. ディープラーニング
mi-5. ディープラーニング
 
mi-4. 機械学習
mi-4. 機械学習mi-4. 機械学習
mi-4. 機械学習
 
mi-3. データサイエンス・AIの演習
mi-3. データサイエンス・AIの演習mi-3. データサイエンス・AIの演習
mi-3. データサイエンス・AIの演習
 
mi-2. データサイエンス・AIの事例
mi-2. データサイエンス・AIの事例mi-2. データサイエンス・AIの事例
mi-2. データサイエンス・AIの事例
 
mi-1. 人工知能の概要
mi-1. 人工知能の概要mi-1. 人工知能の概要
mi-1. 人工知能の概要
 
kaneko202304.pptx
kaneko202304.pptxkaneko202304.pptx
kaneko202304.pptx
 
Coding Standards of C++ について
 Coding Standards of C++ について  Coding Standards of C++ について
Coding Standards of C++ について
 
co-3. サブクラス、継承
co-3. サブクラス、継承co-3. サブクラス、継承
co-3. サブクラス、継承
 
co-2. メソッド定義と呼び出し
co-2. メソッド定義と呼び出しco-2. メソッド定義と呼び出し
co-2. メソッド定義と呼び出し
 

ji-5. 繰り返し計算