プログラミング基礎I(再) 山元進.

Slides:



Advertisements
Similar presentations
アルゴリズムとプログラミン グ (Algorithms and Programming) 第6回:クラスとインスタンス クラスの宣言 アクセス修飾子 インスタンスの生成 (new キーワード) this キーワード フィールドとメソッドの実際の定義と使い 方 クラスの宣言 アクセス修飾子 インスタンスの生成.
Advertisements

山元進.  今日 総合的な演習  来週  中間試験  期末と中間両方受けて初めて成績が付く  どちらかを欠席したら 成績表は X  期末試験:適切な理由があれば追試が受けられる  適切な理由であるかの判定のため、診断書などを持参せ よ  対外試合に参加、などの理由は基本的に認めない.
山元進.  for 文  while 文  do ~ while 文  文のネスト  break 文  continue 文.
プログラミング第5回 1 while ループ 文字列の操作
プログラミング実習 1 ・ 2 ク ラス 第 2 週目 担当教員 : 渡邊 直樹. 課題 2 ● 2 × 2型行列の固有値, 固有ベクトルを求め る EigMatrix.java というプログラムを作成せ よ。 ● 行列の各要素はコマンド・プロンプトから入力 ● 計算した結果もコマンド・プロンプトに表示.
配列の宣言 配列要素の初期値 配列の上限 メモリ領域 多次元配列 配列の応用
初年次セミナー 第8回 データの入力.
プログラミング基礎I(再) 山元進.
関数(1) 第11回 [6月29日、H.16(‘04)] 今日のメニュー 1 前回の課題 2 前回の宿題 3 いろいろな関数の演習 4 課題
プログラミング入門2 第4回 配列 for文 変数宣言 初期化
プログラミング基礎I(再) 山元進.
プログラミング基礎I(再) 山元進.
IO - 入出力 小西 亨.
プログラミング基礎I(再) 山元進.
~手続き指向からオブジェクト指向へ(Ⅰ)~
プログラミング基礎I(再) 山元進.
ファーストイヤー・セミナーⅡ 第8回 データの入力.
配列(2) 第10回[平成15年6月26日(木)]:PN03-10.ppt 今日の内容 1 素数を求める(教科書の例):復習
プログラミング演習Ⅱ 第12回 文字列とポインタ(1)
プログラミング基礎I(再) 山元進.
問題提起その 1 一文字ずつ文字(数字)を読み込み、それぞれの文字が何回入力されたかを数えて出力するプログラム。
プログラミング演習(2組) 第12回
第4章 配 列 オブジェクト指向Javaプログラミング入門 近代科学社©2008 Toru Kato Masahiro Higuchi
基礎プログラミング 第13回(2007年5月28日) 「関数」の補足説明 Report-Fの解説.
C言語 配列 2016年 吉田研究室.
String - 文字列 2009年10月9日 7ADD2116 佐藤洋輔.
第8回 プログラミングⅡ 第8回
プログラミング実習 1・2 クラス 第 1 週目 担当教員:  渡邊 直樹.
繰り返し プログラミング 第4回 繰り返し プログラミング第4回.
情報基礎A 第11週 プログラミング入門 VBAの基本文法3 配列・For~Next
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
第20章 Flyweight ~同じものを共有して無駄をなくす~
インタフェース プログラミング 第14回 インタフェース プログラミング第14回.
第10回 プログラミングⅡ 第10回
情報処理技法 (Javaプログラミング)2 第2回 前期の復習(2)
JAVA入門② 変数と型 式と演算子 制御文.
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
JAVA入門.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗号技術 ~JAVAプログラム③~ (7週目)
アルゴリズムとプログラミング (Algorithms and Programming)
暗号技術 ~JAVAプログラム①~ (5週目)
プログラミング入門2 第11回 情報工学科 篠埜 功.
前回の練習問題.
第7回 プログラミングⅡ 第7回
P n ポインタの基礎 5 q m 5 7 int* p; int 型の変数を指すポインタ int* q; int 型の変数を指すポインタ int n=5, m=7; int 型の変数 int array[3]; int* pArray[3]; p = &n; ポインタにアドレスを代入しているのでOK.
アルゴリズムとデータ構造1 2005年6月24日
アルゴリズムとデータ構造 2010年6月21日
ソフトウェア制作論 平成30年11月21日.
計算機プログラミングI 第5回 配列 文字列(Stringクラス) mainの引数 配列の利用例
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
アルゴリズムとプログラミング (Algorithms and Programming)
文字列へのポインタの配列 static char *lines[MAXLINES]; lines[0] NULL
JAVA入門③ 配列とコレクション.
アルゴリズムとプログラミング (Algorithms and Programming)
暗号技術 ~JAVAプログラム②~ (6週目)
精密工学科プログラミング基礎 第7回資料 (11/27実施)
プログラミング入門2 第5回 配列 for文 変数宣言 初期化
JAVA入門⑥ クラスとインスタンス.
精密工学科プログラミング基礎Ⅱ 第2回資料 今回の授業で習得してほしいこと: 配列の使い方 (今回は1次元,次回は2次元をやります.)
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
プログラミング演習II 2004年11月 2日(第3回) 理学部数学科・木村巌.
プログラミング入門2 第5回 配列 変数宣言、初期化について
プログラミング演習I 補講用課題
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
情報処理技法(Javaプログラミング)1 第8回 同じ処理を何回も繰り返すには?
Presentation transcript:

プログラミング基礎I(再) 山元進

Lesson 7 配列 配列とは 配列の宣言 配列要素の確保 添字 配列の初期化 配列変数 配列の長さ 他次元配列

配列とは 大量のデータに番号をつけ、 まとめて取り扱うしくみ 同じ型の値を複数まとめて記憶する 例:50人の受験者の成績を集計(和をとる) 配列がない場合 int sum=test1+test2+ …(+test50 まで繰り返す) 配列を使う場合 (test[ ] が配列と呼ばれるもの) int sum=0; for(int i=0; i<50 ; i++ ) sum += test[i]; 同じ型の値を複数まとめて記憶する

配列の準備 配列として使う識別子を決める 配列として扱うデータの数を決める 上で決めた数だけのデータを記憶するための記憶領域を確保する 例えば, int[] test; // 配列変数 test を宣言 配列として扱うデータの数を決める 例えば 5 個とする 上で決めた数だけのデータを記憶するための記憶領域を確保する test = new int[5]; // 5: 配列のサイズ (長さ) これで test[0], test[1], test[2], test[3], test[4] の5個のデータをまとめて扱える [ ]内は整数型で、添字と呼ぶ

注意点 配列の長さ = 配列に含まれる要素の数 配列の長さ -1 = 最大の添字 配列変数名[添字] が通常の変数に相当 添字は 0 から始まる 配列変数名[添字]  が通常の変数に相当 配列に含まれるデータを記憶する記憶領域を確保した後でないと、データを書き込んだり読み出したりすることができない。 test = new int[5]; // 記憶領域確保

配列に値を代入する 添字で要素を指定し 、値を代入する test[0] = 80; // test[1] = 60; // test[0] とは違う場所に対応

Sample1.java class Sample1 { public static void main(String[] args) int[] test; // この例では int test[]; も可 test = new int[5]; // 要素分の記憶領域確保 test[0] = 80; test[1] = 60; test[2] = 22; test[3] = 50; test[4] = 75; for(int i=0; i<5; i++){ System.out.println((i+1) + "番目の人の点数は"+ test[i] + "です。"); } // 繰り返し文を使ってまとめて処理 }

注意点 添字 < 配列の長さ この限度を超えるとエラーとなる 例えば Sample1.java で などとやるとエラーになる 添字 < 配列の長さ この限度を超えるとエラーとなる 例えば Sample1.java で test[5] = 100; などとやるとエラーになる

Sample2.java (改) import java.io.*; class Sample2 { public static void main(String[] args) throws IOException System.out.println("テストの受験者数を入力してください。"); BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); String str = br.readLine(); // キーボードからの入力 int num = Integer.parseInt(str); // 整数に変換 int test[]; test = new int[num]; // 要素分のメモリ確保 System.out.println("人数分の点数を入力してください。"); for(int i=0; i<num; i++){ str = br.readLine(); test[i] = Integer.parseInt(str); // tmp は不要 } System.out.println((i+1) +"番目の人の点数は"+ test[i] + "です。");

配列の記述の仕方 配列の宣言と記憶領域確保を同時に 配列宣言・初期化、記憶領域確保を同時に int [] test = new int [5]; 配列宣言・初期化、記憶領域確保を同時に int[] test = {80,60,22,50,75};

Sample3.java class Sample3 { public static void main(String[] args) int[] test = new int[5]; // 宣言とメモリ確保同時 test[0] = 80; test[1] = 60; test[2] = 22; test[3] = 50; test[4] = 75; for(int i=0; i<5; i++){ System.out.println((i+1) +"番目の人の点数は"+ test[i] + "です。"); }

Sample4.java class Sample4 { public static void main(String[] args) int[] test = {80,60,22,50,75}; for(int i=0; i<5; i++){ System.out.println((i+1) +"番目の人の点数は"+ test[i] + "です。"); // {80,60,22,50,75} で new (記憶領域確保) と // 初期化を同時に行った }

配列変数 new で記憶領域を確保 test2 に対して独自の記憶領域は確保されない test2[2]=5; int[] test1 = new int[5]; int[] test2 = test1; test2 に対して独自の記憶領域は確保されない test2[2]=5; System.out.println(test1[2]); 5 と出力される 上の例では、test2 は test1 の別名で、実態はtest1 と同じ

Sample6.java (改) class Sample6 { public static void main(String[] args) int[] test1 = {80,60,22}; System.out.println("test1を宣言しました。"); System.out.println("配列要素を確保しました。"); int[] test2 = test1; System.out.println("test2を宣言しました。"); System.out.println("test2にtest1を代入しました。"); for(int i=0; i<3; i++){ System.out.println("test1が指す"+(i+1) +"番目の人の点数は"+test1[i]+"です。"); } System.out.println("test2が指す"+(i+1) +"番目の人の点数は"+test2[i]+"です。");

test1[2]=100; System.out.println( "test1が指す3番目の人の点数を変更します。"); for(int i=0; i<3; i++){ System.out.println("test1が指す"+(i+1) +"番目の人の点数は"+test1[i]+"です。"); } System.out.println("test2が指す"+(i+1) +"番目の人の点数は"+test2[i]+"です。"); } // test1 も test2 も同じ記憶領域を指すので、 // test2[2] も 100 になっている

配列の応用 配列の長さを知る 配列に対する操作を繰り返し文でおこなうとき 配列名.length = 配列の長さ 例 test.length

Sample8.java class Sample8 { public static void main(String[] args) int[] test = {80,60,22,50,75}; for(int i=0; i<test.length; i++){ System.out.println((i+1)+ "番目の人の点数は"+test[i]+"です。"); } System.out.println( "テストの受験者は"+test.length+"です。");

Sample9.java(改) import java.io.*; class Sample9 { public static void main(String[] args) throws IOException BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); int[] test = new int[5]; System.out.println(test.length+"人の点数を入力してください"); for(int i=0; i<test.length; i++){ String str = br.readLine(); test[i] = Integer.parseInt(str); } for(int i=0; i<test.length; i++) // 並べ替え開始 for(int j=i+1; j<test.length; j++) // i 以降で最大値探索 if(test[j] > test[i]){ // test[i] より大きな値あれば int tmp = test[j]; // test[i] と test[j] の中身を交換 test[j] = test[i]; test[i] = tmp; for(int i=0; i<test.length; i++) System.out.println((i+1)+"番目の人の点数は"+test[i]+"です。");

並べ替えの仕組み int[] test={4,2,1,3}; を初期値とする i=0 i=1 i=2 i=3 j=0 なし (j=i+1 から) j=1 test[1]<test[0] {4,2,1,3} j=2 test[2]<test[0] test[2]<test[1] j=3 test[3]<test[0] test[3]>test[1] {4,3,1,2} test[3]>test[2]

多次元配列 2次元配列の例 int[][] test; test = new int[2][5]; // 2科目 5人

Sample10.java(改) class Sample10 { public static void main(String[] args) int[][] test; test = new int[2][5]; test[0][0]=80; test[1][0]=90; test[0][1]=60; test[1][1]=55; test[0][2]=22; test[1][2]=68; test[0][3]=50; test[1][3]=72; test[0][4]=75; test[1][4]=58; for(int i=0; i<5; i++){ System.out.println((i+1)+ "番目の人の国語の点数は"+test[0][i]+"です。"); "番目の人の算数の点数は"+test[1][i]+"です。"); }

配列の初期化も一緒に行う 一次元のときと同様。ただし、{ } がネスト 1番目の添字ごとに違う長さでもよい (いびつな配列も作れる) 一次元のときと同様。ただし、{ } がネスト int[][] test = { {80,60,22,50,75}, {90,55,68,72,58} }; 1番目の添字ごとに違う長さでもよい  (いびつな配列も作れる) int[][] test = { {80,60,22,50}, // 長さ 4 {90,55,68,72}, // 長さ 4 {33,75,63} }; // 長さ 3 で前と違う

Sample11.java(改) class Sample11 { public static void main(String[] args) int[][] test = { {80,60,22,50}, {90,55,68,72}, {33,75,63} }; for(int i=0; i<test.length; i++){ //length=3 System.out.println((i+1)+ "番目の配列の長さは"+test[i].length+"です。"); }

Lesson7 のまとめ 配列を宣言し、new演算子で配列要素確保 配列変数を使って、配列要素に値を代入 { }内に値を並べて初期化した配列を作成 配列変数名に.lengthをつけて、要素数 配列変数を別の配列変数に代入できる 他次元配列を作成して使うことができる

演習問題1 次のプログラムを見て後の問いに答えよ import java.io.*; class Report1 { public static void main(String args[]) throws IOException System.out.println("正の整数を入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); // キーボードからの入力 int num = Integer.parseInt(str); // 整数に変換 if(num > 0){ int num1 = num; int keta = 1; while( (num1 /= 10) > 0) keta++; System.out.println("入力された"+num+"は"+keta+"桁の数です。"); }else{ }

このプログラムを書き換え、入力した整数値の下からkケタ目を n[k-1] に格納するようにせよ 自分の学籍番号の下3ケタを入力したとして、while 文の ( ) 内を評価した後の、各変数の値を答え、このプログラムの働きを TA に説明せよ このプログラムを書き換え、入力した整数値の下からkケタ目を n[k-1] に格納するようにせよ さらに、入力した数値の各ケタの数の総和、総乗を出力するようにせよ 1回目 2回目 3回目 4回目 num1 keta

演習問題2 Sample9.java (改) で入力する数値を4つにするには、どうすればよいか答えよ Sample9.java (改) で数が大きい順に並べ替えられる理由を、TA に説明せよ(TAがサンプル入力として4つの数を決め、その入力に対する動作を説明できれば十分とする) 並べ替えの順序を、小さい順に変更するには、Sample9.java (改) のどこをどうすれば良いか答えよ 変更したプログラムは Report2.java として提出

演習問題3 Sample10.javaのプログラムを配列の宣言と初期化を同時に行う形に書き直せ 今日は、演習問題1~3 全てを提出すること!!