計算機数学概論
脇 隼人 九州大学 マス・フォア・インダストリ研究所2015-10-08
URL : http://webct.kyushu-u.ac.jp
上記から,
「計算機数学概論」を選択 「コンテンツ」→
「10/8
の講義・演習」にこの資料を掲載今日の目標
Finder,
テキストエディット,
ターミナルの使い方を学ぶ11. Finder
ファイルやフォルダを管理するMAC OS X
のアプリケー ション フォルダを使って項目ごとにファイルを保存すること2.
テキストエディット テキスト(
文字を書く)
のためのMAC OS X
のアプリケー ション この講義・演習ではJava
言語でプログラムを書くために使 います(
重要)
3.
ターミナル 計算機を管理するためのMAC OS X
のアプリケーション この講義・演習ではJava
言語で書いたプログラムをコンパ イル・実行するために使います(
重要)
1 といっても大したことはない. 30分くらいで終わるはず 2 / 10Finder
の使い方1 次をクリック
Figure : 出典 : Apple.com
2 左側にある
,
自分のアカウントが書いているところをクリッFinder
の使い方(
続き)
1 右クリックして,
「CS
」という名前のフォルダを作る 2 この「CS
」の下にこの講義・演習で作るファイルをおきま しょう 注意:
もしFinder
の左側に自分のアカウントが出なければ,
Finder
の環境設定を変更する(4372277867
は私のアカウント)
4 / 10テキストエディットの使い方
Finder
の左側にある「アプリケーション」→「テキストエ ディット」で起動 「テキストエディット」の環境設定をみて,
「フォーマット」 を「標準テキスト」する 課題1 :
この講義・演習への自分なりの目標や希望を手短に 書いて,
フォルダCS
に保存するターミナルの使い方
Finder
の左側にある「アプリケーション」→
「ユーティリ ティー」→
「ターミナル」を起動 ターミナルでcd
とタイプする.
次にcd CS
とタイプする.
これで,
フォルダCS
にファイルを 作ることができるtouch test.txt
とすると,
フォルダCS
の下にtext.txt
というファイルができる
.
テキストエディットでtext.txt
を開く2.
その際にフォルダ に注意する.
2 もちろん何も書いてありません 6 / 10寄り道
:
代表的なコマンドと意味
コマンド 意味
cd CS
フォルダ「CS
」への移動ls
そのフォルダにあるファイルやフォルダを表示pwd
今いるフォルダを表示mv fileA fileB
ファイル「fileA
」を「fileB
」と名前を変えるmv fileA FolderB
ファイル「fileA
」をフォルダ「FolderB
」へ移動cp fileA fileB
ファイル「fileA
」を「fileB
」へコピーcp fileA FolderB
ファイル「fileA
」をフォルダ「FolderB
」へコピーmkdir FolderA
フォルダ「FolderA
」を作るJava
のコンパイルと実行
準備
講義・演習の
Web page
の「情報」からquiz1.java
とquiz2.java
をフォルダCS
にダウンロード ダウンロードの詳細はwebct
に記載 ターミナルを開いて,
フォルダCS
に移る コンパイル コンパイルとは, Java
言語で書いたプログラムを機械後に変 換する操作ターミナルで
javac quiz1.java
と打ち込んでreturn
キー を押す実行
変換されたプログラムを実行する
ターミナルで
java quiz1
と打ち込んでreturn
キーを押すInput positive integer
とでるので,
何か正の整数を(
半角文字で
)
入力する 課題2 :
何回も実行することでこのプログラムが何をしてい るか予想しなさい3 課題3 : quiz2.java
に対してもコンパイル・実行して,
このプ ログラムが何をしているか予想しなさい4 3直接プログラムを読んで答えても構わない課題の提出先
URL : http://webct.kyushu-u.ac.jp
上記から,
「計算機数学概論」を選択 「コンテンツ」→
「10/8
の課題」をクリック 期限は, 10/8 PM 11:59
です 10 / 10計算機数学概論
脇 隼人 九州大学 マス・フォア・インダストリ研究所2015-10-22
URL : http://webct.kyushu-u.ac.jp
上記から,
「計算機数学概論」を選択 「コンテンツ」→
「10/22
の講義・演習」にこの資料を掲載前回の課題
1
へのコメント
I
一年の頃に受けたプログラミングは途中から理解できなかったも のがあったので、この講義では最後までなんとか理解できるよう に努力することを目標としています。 理解することも大切ですが,
「使えるようになる」というの が大切です.
この講義では、あまりなじみのないプログラムについて、苦手意 識がなくなるようにする。 苦手意識をなくす事は大切です.
一年のときにターミナルを使ったときは、よく分からずに打って いたので、ひとつひとつの意味を理解した上で使えるようになっ て、応用などがきくようにしたいと思います。JAVA
だけでなく,
ターミナルの使い方やスナップショットの 取り方など, JAVA
以外の技術も身につけてください 2 / 16前回の課題
1
へのコメント
II
人に頼ることなく、自分の力だけで授業についていけるようにな る。演習課題を毎回必ず出す。 無理をせずに,
困った時は教員・TA
だけでなく友達にも頼り ましょう 日常的にパソコンを使っていても触れることのできないプログラ ミングについてこの機会にしっかり学習して、将来的に自分の研 究に使えたらと考えている。 この講義では最低限の情報しか与えられません.
プログラミ ング能力を高めるにはみなさんの興味・努力が必要です.
目標は Java 言語をうまく使いこなせるようになることです!JAVA
だけでなく,
様々な言語を必要に応じて使えるようにな ることが大切です.
パソコンを使うのは苦手ですが、がんばりたいと思います。前回の課題
1
へのコメント
III
「文房具」ですので好き嫌いにかかわらず使えるようになっ てください.
自分で Android のアプリケーションを作れるようになりたい。 この講義だけではそれは難しいです.
4 / 16JAVA
の初歩
目標JAVA
のおまじないから,
入出力,
変数と型,
代入, if
文, for
文,
while
文が使えるようになる 間違い探し(
デバッグ)
ができるようになる 注意資料のプログラムを
Copy & Paste
しても正常に動かない工夫をしています
.
より簡単にプログラムが書けるような技術も紹介するので見 逃さないように
おまじない
Hello World!
を出力するプログラムpublic class Hello
{public static void main
(String[] args
){System.out.println
("Hello World!"
);
} } 注意
Hello.java
というファイルを作成しコンパイル&
実行 javac Hello.java java Hello 入力文字は全て半角文字1
行目のHello
と3
行目以外はおまじない.
1
行目のHello
とファイル名のHello.java
は同じものでな いといけない 6 / 16Hello World!
を出力するプログラムpublic class Hello
{public static void main
(String[] args
){System.out.println
("Hello World!"
);
} } 注意
(
続き1)
”
{”
と”
}”
は対応する1
行目の”
{”
の冒頭の位置と対応する”
}”
の位置を合わせる2
行目の”
{”
の冒頭の位置と対応する”
}”
の位置を合わせる2
行目と4
行目は行頭でtab
キーを1
回押す3
行目はHello World!
を出力する命令出力
例 次の出力を表示するプログラム 3 + 4 = 7 5 * 6 = 30 7 / 8 = 0 7.0 / 8.0 = 0.875public class keisan{
public static void main(String[] args){ System.out.println("3 + 4 = "+ (3+4)); System.out.println("5 * 6 = "+ (5*6)); System.out.println("7 / 8 = "+ (7/8)); System.out.println("7.0 / 8.0 = "+ (7.0/8.0)); } } 課題
1
上記のプログラムを作成&
実行しなさい.
またそのプログラ ムを提出すること 8 / 16補足
System.out.println("
文字列");
は文字列と改行を出力System.out.print("
文字列");
は文字列だけを出力例
: println
と?
public class keisan{public static void main(String[] args){ System.out.print("3 + 4 = "+ (3+4)); System.out.print("5 * 6 = "+ (5*6)); System.out.print("7 / 8 = "+ (7/8)); System.out.print("7.0 / 8.0 = "+ (7.0/8.0)); } } 出力 3 + 4 = 75 + 6 = 307 / 8 = 07.0 / 8.0 = 0.875
おまじないと出力のまとめ
おまじないのまとめ???.java
public class ???
{public static void main
(String[] args
){(
以下プログラム)
} } 出力のまとめSystem.out.println
文字列(
と改行)
を出力するには, System.out.println("
文 字列");
System.out.print("
文字列");
は文字列だけ 文字列A
文字列B
を出力するには, +
でつなげる 整数/
整数 は商を出力することに注意!
10 / 16変数と型
変数:
整数,
有理数,
文字などを保存する「箱」みたいな物 整数の場合(
整数型の変数x
を作って4
を代入int x;
x = 4;
あるいはint x = 4;
注意:
次のプログラムでは,
変数x
に3
が代入されるint x = 4;
x = 3;
有理数の場合
(
有理数型の変数x
を作って4.0
を代入double x;
x = 4.0;
あるいはdouble x = 4.0;
注意:
次のプログラムでは,
変数x
に3.5
が代入されるdouble x = 4.0;
x = 3.5;
文字の場合(
文字型の変数x
を作ってc
を代入char x;
x = ’c’;
あるいはchar x = ’c’;
12 / 16課題
2 :
下の問いに答えるために, x, y
を出力するプログラムを 作成しなさい.
ファイル名をsample.java
として提出すること.
代入についてint x = 10
;x = x
+1
;// (1)
左辺のx
の値はなんでしょうx = x*x
;// (2)
左辺のx
の値はなんでしょうdouble y = 5.5
;y = x*y
;// (3)
左辺のy
の値はなんでしょう(
キーボードからの
)
入力
整数の場合(
入力の型が整数の場合import java.util.Scanner;// これは public class の前の行に書 くこと
(中略)
Scanner input = new Scanner(System.in); int N = input.nextInt();
キーボードでタイプした値を
,
整数型の変数N
に代入有理数の場合
(
入力の型が有理数の場合import java.util.Scanner; // これは public class の前の行に書 くこと
(中略)
Scanner input = new Scanner(System.in); double x = input.nextDouble();
課題
3 : keisan3.java
というファイルを作成し下記の値を出力 するプログラムを作成して提出しなさい.
キーボードから整数値x
と有理数y
を1
つずつ入力して次を 出力させること.
x =
y =
x + y =
x * y =
x / y =
課題の提出先
URL : http://webct.kyushu-u.ac.jp
上記から,
「計算機数学概論」を選択 「コンテンツ」→
「10/22
の課題」をクリック 期限は, 10/22 PM 11:59
です 16 / 16計算機数学概論
脇 隼人 九州大学 マス・フォア・インダストリ研究所2015-10-29
URL : http://webct.kyushu-u.ac.jp
上記から,
「計算機数学概論」を選択 「コンテンツ」→
「10/29
の講義・演習」にこの資料を掲載10/22
の課題の解説
注意 「10/29
の課題」に10/22
の課題を提出している人が2
名.
間違えないように 解答例を公開しているので,
必ずダウンロードして眺めるor
読むこと コンパイルの通らないプログラムは評価しない 間違った答えを出すプログラムは評価しない 補足 ターミナルには補完機能があります.
タブキーで,
補完してくれます 上下キーを押すと,
過去に入力したコマンドに遡れます 2 / 21コメント
1 :
二重引用符のエラーコメント
2 :
記述ミスこれは
, System.out.println
の二つ目のピリオドがないちゃんと入力する
JAVA
の初歩
2
目標JAVA
のおまじないから,
入出力,
変数と型,
代入, if
文, for
文,
while
文が使えるようになる 間違い探し(
デバッグ)
ができるようになる 注意資料のプログラムを
Copy & Paste
しても正常に動かない工夫をしています
.
より簡単にプログラムが書けるような技術も紹介するので見 逃さないように
変数の型について
整数(int)
計算機内部で整数を表現する際に2
進法を使う. 1bit
で0
と1
を表現nbit
なら(
−1)
s n−1∑
i =1ai
2
i ただし, s, a
1, . . . , a
n−1∈ {0, 1},
絶対値がとても大きい整数が表現できない32bit
なら,
−2
31から2
31− 1
まで可能64bit
なら,
−2
63から2
63− 1
まで可能 6 / 21有理数
(double)
正確には有理数でなく浮動小数点数と呼ばれている 計算機内部での表現は,
通常64bit
利用する.
s e e
· · · e e m m · · · m m m
符号s,
指数部e(11
桁),
仮数部m(52
桁)
x = (
−1)
s× 2
e−1023×
(
1 +
52∑
i =1d
i2
−i)
表現できない数が沢山ある.
例えばx = 0.1
異なる型を扱うには
例:
次はコンパイルするとエラーになるint x = 1;
x = x + 1.0;
x
はint
だが1.0
はdouble
であるため 型変換(
キャスト) I
int x = 1;
x = x + (int)1.0; // x = 2
と出力double
からint
へ変換= 1.0
から1
へ変換int x = 1;
x = x + (int)1.75; //
実は2.75
ではなく2
となる 8 / 21型変換
(
キャスト) II
x = 7/8; // x は 0 になる x = (double)7/(double)8; // x は 0.875 x = 7.0/8; // x は 0.875 x = 7.0/8.0; // x は 0.875 注意: double
型を扱うときは,
定数もdouble
型を扱うと間違 えが少なくなる.
例えば,
double y = 1.0; // y = 1; と書いても良い y = 2.0 * Math.sin(Math.PI/2.0); // y = 2*Math.sin(Math.PI/2); と同じif
文
if
文:
条件分岐 if (条件式) { 条件式が true の処理; } 条件式が正しければtrue,
間違っていればfalse
例1 : p
を降水確率だと思うと...
int p; ... if (p >= 50) {System.out.println("It will rain today."); }
if
文:
条件分岐 if (条件式) { 条件式が true の処理; }else{ 条件式が false の処理; } 例2 : p
を降水確率だと思うと...
int p; ... if (p >= 50) { System.out.println("Need an umbrella."); }else{System.out.println("Not need an umbrella."); }
if
文:
条件分岐 if (条件式 A) { 条件式 A が true の処理; }else if (条件式 B){ 条件式 B が true の処理; }else{ 条件式 A も条件式 B も false の処理; } 例3 : p
を降水確率だと思うと...
if (p >= 0 && p<=20) { System.out.println("Sunny!"); }else if(p > 20 && p <=50 ){System.out.println("Cloudy."); }else{
System.out.println("Rainy."); }
if
文
:
条件式の書き方
Tabelle:if 文の条件式Java
数学 意味p == 50
p = 50
p
が50
に等しければtrue,
それ以外ならfalse
p != 50
p
̸= 50 p
が50
に等しくなければtrue,
それ以外ならfalse
p >= 50
p
≥ 50 p
が50
以上ならばtrue,
それ以外ならfalse
p <= 50
p
≤ 50 p
が50
以下ならばtrue,
それ以外ならfalse
p > 50
p > 50
p
が50
より大きければtrue,
それ以外ならfalse
p < 50
p < 50
p
が50
より小さければtrue,
それ以外ならfalse
p >= 0 && p <= 20
は, 0
≤ p
かつp
≤ 20
p >= 40 || p <= 20
は, p
≥ 40
またはp
≤ 20
10/8
の課題からif(N % 3 == 0 && N % 5 == 0){
System.out.println("FizzBuzz");
}else if(N % 3 == 0){
System.out.println("Fizz");
}else if(N % 5 == 0){
System.out.println("Buzz");
}else{
System.out.println(N);
}
入力N
に対して, FizzBuzz
などを出力 注意: N % 3
はN
を3
で割った余りを返す 14 / 21数学クラス
https://docs.oracle.com/javase/8/
docs/api/java/lang/Math.html) I
擬似乱数
:
計算機で生成するデタラメな数double x = Math.random(); // 0 以上 1 未満の浮動小数点数を返す int y = (int) (9*Math.random()); // 0 以上 8 以下の整数を返す double z = 2*Math.random()-1.0; // -1 以上 1 未満の浮動小数点数 を返す 絶対値 double x = Math.abs(-3.0); 平方根
,
立方根 double x = Math.sqrt(2.0); double y = Math.cbrt(2.0);数学クラス
https://docs.oracle.com/javase/8/
docs/api/java/lang/Math.html) II
累乗
, log
edouble x = Math.pow(1.5, 6);// 1.5 の 6 乗 double y = Math.log(1.3);
sin(x ), cos(x ), tan(x )
double x = Math.sin(2.0);double y = Math.cos(Math.PI/2.0); double z = Math.tan(-Math.PI);
arcsin(x ), arccos(x ), arctan(x )
double x = Math.asin(0.5); double y = Math.acos(0.5); double z = Math.atan(-10);数学クラス
https://docs.oracle.com/javase/8/
docs/api/java/lang/Math.html) III
π, e
double x = Math.PI; double y = Math.E; 切り上げ,
切り捨て double x = Math.ceil(1.5); double y = Math.floor(1.5);課題
1 : double d = Math.random();
を使って,
以下のプログ ラムを作成せよ.
ファイル名はOmikuji.java
とすること.
d < 0.1
ならば, Great blessing
と出力0.1
≤ d < 0.3
ならば, Small blessing
と出力0.3
≤ d < 0.5
ならば, Blessing
と出力0.5
≤ d < 0.7
ならば, Curse
と出力0.7
≤ d < 0.9
ならば, Small curse
と出力0.9
≤ d < 1.0
ならば, Great curse
と出力 最後にd
の値も出力すること 18 / 21課題
2 :
以下の公式を用いて求めたπ
の近似値とJava
の数学ク ラスを使ってπ
を出力するプログラムを書いて提出しなさい.
ファイル名はpi.java
にしなさい.
(Machin の公式) π 4 = 4 arctan ( 1 5 ) − arctan ( 1 239 ) , (Euler の公式) π 4 = 5 arctan ( 1 7 ) + 2 arctan ( 3 79 ) , (Stormer の公式) π 4 = 6 arctan ( 1 8 ) + 2 arctan ( 1 57 ) + arctan ( 1 239 ) . 参考double p1 = 4*Math.atan(1.0/5.0)-Math.atan(1.0/239.0); // Machin ...
System.out.println("Machin = "+ (p1*4)); ...
課題
3 :
入力を西暦N(
正の整数で, 2500
以下とする)
として,
グ レゴリオ暦で閏年かどうか判定するプログラムを書きなさい.
leap.java
というファイル名にすること.
閏年の定義は以下の通りである(Wikipedia
より):
N
が4
で割り切れないならば,
閏年でない (N が 4 で割り切れて) さらに N が 100 で割り切れないならば, 閏年である (Nが4と100で割り切れて)さらにNが400で割り切れるな らば,閏年である (Nが4と100で割り切れて)さらにNが400で割り切れない ならば,閏年でない 出力例Input a positive integer :101 Not leap
Input a positive integer :204 Leap
Input a positive integer :100 Not leap
Input a positive integer :1200
課題の提出先
URL : http://webct.kyushu-u.ac.jp
上記から
,
「計算機数学概論」を選択「コンテンツ」
→
「10/29
の課題」をクリック計算機数学概論
脇 隼人 九州大学 マス・フォア・インダストリ研究所2015-11-05
URL : http://webct.kyushu-u.ac.jp
上記から,
「計算機数学概論」を選択 「コンテンツ」→
「11/5
の講義・演習」にこの資料を掲載 1 / 1310/29
の課題の解説
コメント よくできていました.
できなかった人は,
解答例を公開して いますので,
参考にしてください.
Omikuji.java
やleap.java
でのif
文の使い方についてもう 少し工夫できます.
Omikuji.java
if(d < 0.1){ System.out.println("Great blessing"); }else if(d < 0.3){ System.out.println("Small blessing"); ...(中略)... }else if(d < 1.0){ System.out.println("Great curse"); } System.out.println("d = "+d);JAVA
の初歩
3
目標JAVA
のおまじないから,
入出力,
変数と型,
代入, if
文, for
文,
while
文が使えるようになる 間違い探し(
デバッグ)
ができるようになる 注意資料のプログラムを
Copy & Paste
しても正常に動かない工夫をしています
.
より簡単にプログラムが書けるような技術も紹介するので見 逃さないように
for
文
例題(
円周率の近似)
π
4
=
∞∑
n=0(
−1)
n2n + 1
無限回の演算は不可能なので,
これを有限和で扱うと, π/4
の近似 として扱える:
pN
=
N∑
n=0(
−1)
n2n + 1
→
π
4
(N
→ ∞)
それでは, N = 0
からN = 6
までをもとめるプログラムを書いて みるdouble p = 1.0; // N=0 System.out.println("p = "+p); p = p - 1.0/3.0; // N = 1 System.out.println("p = "+p); p = p + 1.0/5.0; // N = 2 System.out.println("p = "+p); p = p - 1.0/7.0; // N = 3 System.out.println("p = "+p); p = p + 1.0/9.0; // N = 4 System.out.println("p = "+p); p = p - 1.0/11.0; // N = 5 System.out.println("p = "+p); p = p + 1.0/13.0; // N = 6 System.out.println("p = "+p); 注意
p
に(
−1)
n/(2n + 1)
を追加してるだけN = 10
を計算するためにはこの繰り返しをもっと書かなけ ればいけない 5 / 13for
文を使うと...
double p = 1.0; // N = 0 int N = 10; // N=10 まで出力 for(int n=1; n < N+1; n++){ if(n % 2 == 0){ p = p + 1.0/(2*n+1); }else{ p = p - 1.0/(2*n+1); } System.out.println("p = "+p); }for
文for(初期化; 条件式; 次の一歩){ (繰り返す処理);
}
例
1 : 0
から99
までの整数を出力するfor(int i=0; i<100; i++){
System.out.println("i = "+i); }
1
i=0
⇒ i<100
を判定⇒ i=0
を出力⇒ i=i+1
つまりi=1
2i=1
⇒ i<100
を判定⇒ i=1
を出力⇒ i=i+1
つまりi=2
3 以下繰り返し
4
i=100
⇒ i<100
を判定⇒
終わりfor
文:
繰り返しの処理に便利 for(初期化; 条件式; 次の一歩){ (繰り返す処理); } 例2 :
∑
10k=1k
を計算 int sum = 0; for(int k=1; k<=10; k++){ sum = sum + k; } 1k=1
⇒ k<=10
を判定⇒ sum = 1 ⇒ k=k+1
つまりk=2
2k=2
⇒ k<=10
を判定⇒ sum = 3 ⇒ k=k+1
つまりk=3
3 以下繰り返し 4k=11
⇒ k<=10
を判定⇒
終わり二重の
for
文
例
3 : DrawGraph1.java
public class DrawGraph1{public static void main(String[] args){ for(int i=0; i<10; i++){
System.out.print(i +":"); for(int j=0; j<i; j++){ System.out.print("*"); } System.out.println(""); } } } 外側の
for
文は前と同じ 内側のfor
文の条件式はj < i
内側のfor
文が何をするのか, i
を固定して考えてみようi
の有効範囲, j
の有効範囲に注意すること 9 / 13課題
1 : (
階乗の計算) 1
以上の整数N
を入力して, N!
を出力す るプログラムを提出しなさい.
ファイル名はfactorial.java
と しなさい.
N! := N
× (N − 1) × · · · × 3 × 2 × 1.
課題2 : 2
以上の整数N
を入力して, N
の約数を全て出力するプ ログラムを提出しなさい.
ファイル名はdivisor.java
としな さい.
参考Input a positive integer :10 1
2 5 10
Input a positive integer :5 1
課題
3 : (
二重for
文I)
次のような九九の表を出力するプログラ ムを提出しなさい.
ファイル名はKuku.java
としなさい.
課題3
の出力 1*1=1, 1*2=2, 1*3=3, 1*4=4, 1*5=5, 1*6=6, 1*7=7, 1*8=8, 1*9=9, 2*1=2, 2*2=4, 2*3=6, 2*4=8, 2*5=10, 2*6=12, 2*7=14, 2*8=16, 2*9=18, 3*1=3, 3*2=6, 3*3=9, 3*4=12, 3*5=15, 3*6=18, 3*7=21, 3*8=24, 3*9=27, 4*1=4, 4*2=8, 4*3=12, 4*4=16, 4*5=20, 4*6=24, 4*7=28, 4*8=32, 4*9=36, 5*1=5, 5*2=10, 5*3=15, 5*4=20, 5*5=25, 5*6=30, 5*7=35, 5*8=40, 5*9=45, 6*1=6, 6*2=12, 6*3=18, 6*4=24, 6*5=30, 6*6=36, 6*7=42, 6*8=48, 6*9=54, 7*1=7, 7*2=14, 7*3=21, 7*4=28, 7*5=35, 7*6=42, 7*7=49, 7*8=56, 7*9=63, 8*1=8, 8*2=16, 8*3=24, 8*4=32, 8*5=40, 8*6=48, 8*7=56, 8*8=64, 8*9=72, 9*1=9, 9*2=18, 9*3=27, 9*4=36, 9*5=45, 9*6=54, 9*7=63, 9*8=72, 9*9=81, 11 / 13課題
3
のヒント:
以下の???
を埋めれば良い for(int i=0; ???; i++){for(int j=0; ???; j++){ ???; } ???; } また
,
出力のためにはSystem.out.println
とSystem.out.print
を使うと良い課題の提出先
URL : http://webct.kyushu-u.ac.jp
上記から,
「計算機数学概論」を選択 「コンテンツ」→
「11/5
の課題」をクリック 期限は, 11/5 PM 11:59
です 13 / 13計算機数学概論
脇 隼人 九州大学 マス・フォア・インダストリ研究所2015-11-12
URL : http://webct.kyushu-u.ac.jp
上記から,
「計算機数学概論」を選択 「コンテンツ」→
「11/12
の講義・演習」にこの資料を掲載前回の課題について
総評よくできていました
.
次のプログラムはどこが間違っているでしょう
public class divisor {
public static void main (String[] args){ int n = 1; for(int a = 1; a<=n; n++){ if(n%a==0){ System.out.println(a); } } } } 2 / 11
コメント
実際に実行してみるとどうなるでしょう こういうのを「無限ループ」という
Control
キーを押しながらc
を押すと強制的に終了しますJAVA
の初歩
4
目標JAVA
のおまじないから,
入出力,
変数と型,
代入, if
文, for
文,
while
文が使えるようになる 間違い探し(
デバッグ)
ができるようになる 注意資料のプログラムを
Copy & Paste
しても正常に動かない工夫をしています
.
より簡単にプログラムが書けるような技術も紹介するので見 逃さないように
while
文
while
文:
繰り返しの処理 while(条件式){ (繰り返す処理); } 例1 : i=0, . . ., 99
を出力する int i = 0; while(i < 100){ System.out.println("i = "+i); i = i + 1; } 1i = 0
⇒while
文の条件式⇒ i = 0
を出力⇒ i=1
2i = 1
⇒while
文の条件式⇒ i = 1
を出力⇒ i=2
3 繰り返す例
2 : x = 100
に1.08
を何回かけ算すると200
を超えるか double x = 100.0; int c = 0; while(x <= 200){ x = x * 1.08; c = c + 1; } System.out.println("c = "+c); 1x = 100.0
⇒while
文の条件式⇒ x = 108.0, c = 1
2x = 108.0
⇒while
文の条件式⇒ x = 116.64, c = 2
3 繰り返す 4x = 215.89...
⇒ while
文の条件式⇒ while
終了 5c = 10
を出力 6 / 11while
文:
繰り返しの処理 while(条件式){ (繰り返す処理); }do while
文:
繰り返しの処理 do{ (繰り返す処理); }while(条件式); 違いは条件式が後ろにある,
ということ 無限ループ while(true){ ... }break
を入れると,
無限ループから抜け出すことができる.
for, while
使い分け
for
とwhile
は似ています. for
でもwhile
でも書ける場合はあります
.
どちらを使うべきかは,
明確な基準は無く状況によりますfor
で書いた方が良い場合 繰り返し処理の回数があらかじめ分かっている 繰り返し処理のための条件式や,
次の一歩が簡単 などwhile
で書いた方が良い場合 繰り返しの回数があらかじめ分かっていない 繰り返し処理のための条件式が複雑 など 8 / 11課題
1 :
ユーザが整数値0
を入力するまで,
繰り返し整数の入力 を求めて,
ユーザが0
を入力するとそれまでに入力された数値の 総和を出力するプログラムを提出しなさい.
ファイル名はinputintsum.java
としなさい.
参考 import java.util.Scanner; ... while(条件式){scanner input = new Scanner(System.in); System.out.print("Input an integer :"); N = input.nextInt(); (手続き); } 上記の
,
条件式と手続きを考えなさい.
N
がint
であることはwhile
の外で記述した方が良い. do-while
の方が書きやすい?
課題
1
の出力例Input a positive integer :10 Input a positive integer :20 Input a positive integer :1 Input a positive integer :0 sum = 31
Input a positive integer :13 Input a positive integer :-2 Input a positive integer :4 Input a positive integer :0 sum = 15
課題
2 : (
オイラーの定数の計算)
オイラー定数γ
の近似値とし てγ
N を計算したい(
ただし, N
は正の整数):
γN
:=
N∑
k=11
k
− log(N).
while
文を使って,
初めて|γN
− γN
−1| ≤ ϵ
となるN
を出力するプ ログラムを提出しなさい.
提出するプログラムは,
例えば,
ϵ = 10
−6として計算しなさい.
ϵ = 10
−6はdouble eps = 1.0e-6;
と書けばよい.
ファイル名は
eulersconst.java
としなさい.
ちなみに