データ構造とアルゴリズム論
|
|
|
- けんじ あると
- 7 years ago
- Views:
Transcription
1 第 5 章. 整列 ( ソート ) のアルゴリズム 学習のねらい 1 整列 ( ソート ) を行う基本的なアルゴリズム ( バブルソート 選択ソート 挿入ソート ) を学習し その処理の流れを理解する 2 3つのソートアルゴリズムの効率について考察する 3 ソートアルゴリズムを応用したプログラムを学習する 幾つかのデータを 値の大きい順や小さい順などのように 一定の基準に従って並べ替える操作を整列 ( ソート ) と言います ソートは応用範囲の広い処理であることから様々なアルゴリズムが考案されており アルゴリズムの宝庫とも呼ばれていいます 本章では その内 最も基本的あるいは代表的な3つのソートアルゴリズムを学習し それらを幾つかの例に応用してみます 本章は アルゴリズム学習のクライマックスとなる内容であり 特に将来 情報技術関係の職に進みたい学生にとっては 必須の内容です 5-1 バブルソートまず 最も基本的であり ( アルゴリズム関係の ) どのような教科書にも出てくるバブルソートから学習を始めることにしましょう バブルソートとは 隣り合う2つのデータ ( の大小関係 ) を比較し 並べたい順序になっていなければ入れ替える という操作を繰り返すことで整列を行う手法です 具体的なケースで考えてみましょう 今 配列 A[0]~A[4] に数値 ( 整数 ) が入力されているものとします これを昇順に並べ替える場合を考えましょう < ソート前 > < ソート後 > 要素番号 配列 A ここに データを小さい方から順に並べる場合を昇順と呼び 逆に大きい順に並べる場合を降順と言います 例えば 1,2,3,4,5 は昇順であり 5,4,3,2,1 は降順になります 次ページに 上例 ( のデータをバブルソートで昇順に並べ替えた場合 ) の処理の流れをまとめておきます 1ステップずつじっくりと確認して行って下さい 79
2 < バブルソートの処理の流れ > 要素番号 配列 A の値 ソート開始時 A[0]>A[1] なので ( 昇順ではないので ) 交換する A[1]<A[2] なので ( 昇順なので ) 交換しない A[2]>A[3] なので交換する A[3]>A[4] なので交換する A[4] の値確定! A[0]<A[1] なので交換しない A[1]>A[2] なので交換する A[2]>A[3] なので交換する A[3] の値確定! A[0]>A[1] なので交換する A[1]>A[2] なので交換する A[2] の値確定! A[0]<A[1] なので交換しない A[1],A[0] の値確定! ソート完了! 80
3 上の処理を 流れ図で表すと次のようになります ただし 以下では配列の大きさを n として 配列 A[0]~A[n-1] に適当な値が入力されているものとしています < バブルソート ( 昇順 )> 開始ループ-i i:n-1,-1,1 ループ-j j:0,1,i-1 ループ端記号の表記カウンタ変数 : 初期値, 増分, 終値この場合 iの値は (n-1,n-2,,1) と減少して行っている事に注意 終端が外側のカウンタ変数 iによって変わっている点 ( を理解できるか ) がポイント! A[j]>A[j+1] Yes Temp A[j] A[j] A[j+1] A[j+1] Temp No A[j] と A[j+1] が昇順になっているかどうかを 判定し なっていなければ 値を交換します ループ -j ループ -i 終了 81
4 基礎課題 5-1 HP の該当部分から ある科目の得点が記録されたファイル tokuten.txt をダウンロードし これまで同様 フォルダ IOFile にコピーして下さい バブルソートを適用する練習として このファイルから得点を読み込み 昇順にソートするプログラムを作成しましょう 作成するプログラムの動作内容は次の通りです プログラムを起動すると 次のような画面が現れます jbuttonread jlabelread jbuttondisplay <tokuten.txt> jbuttonbubblesort jlabelsort jtextarea1 入力ファイル指定のダイアログを用いるので jfilechooser コンポーネントを追加しておいて下さい ( やり方を忘れたら p.41 参照 ) ここで [ 読み込み ] ボタンをクリックします そして現れたダイアログボックスで tokuten.txt を指定すると 入力データの読み込みが完了します 82
5 ここで [ 表示 ] ボタンをクリックすると 今読み込んだ得点が ( そのまま ) 表示され ます 次に [ バブルソート ] ボタンをクリックすると バブルソートによる昇順ソートが完了します ( データのソートを行うだけなので jtextarea1 に表示された内容はまだ変わりません ) 続いて [ 表示 ] ボタンをクリックする と 昇順にソートされた得点リストが 表示されます それでは 作成にとりかかりましょう 以下の要領でプログラムを作成して下さい 83
6 < プログラムの作成 > 1. まずファイルを読み込むので いつもの通り波線部のインポート文を加えます import java.awt.event.actionevent; import javax.swing.swingutilities; import java.io.*; 2.[ 読み込み ] ボタンクリック時のイベントハンドラは次のようになります これは こ れまでと同じ要領です <[ 読み込み ] ボタン > int[] Tokuten= new int[100]; // 得点を保管する配列 int Num; // データの個数 private void jbuttonreadactionperformed(actionevent evt) { String Data; try { jfilechooser1.showopendialog(this); File FName=jFileChooser1.getSelectedFile(); BufferedReader fin=new BufferedReader(new FileReader(FName)); int i=0; while ((Data=fin.readLine())!=null) { Tokuten[i]=Integer.parseInt(Data); i++; Num=i; jlabelread.settext(" 読み込み終了しました "); fin.close(); catch (Exception em) { jlabelread.settext(" エラー発生 :"+em); 3.[ 表示 ] ボタンクリック時のイベントハンドラは次のようになります これは 基礎課 題 3-7 (p.58) と同じ要領です <[ 表示 ] ボタン > private void jbuttondisplayactionperformed(actionevent evt) { String Data=""; for (int i=0;i<num;i++) { 半角の です 使用フォントによ Data=Data+Tokuten[i]+" n"; っては \ と表示されます jtextarea1.settext(data); 84
7 4.[ バブルソート ] ボタンクリック時のイベントハンドラは次のようになります 空欄を 埋めてプログラムを完成させて下さい p.81 の流れ図を参照しながら考えれば分かるは ずです <[ バブルソート ] ボタン > private void jbuttonbubblesortactionperformed(actionevent evt) { int Temp; for (int i=num-1; i>=1 ;i--) { for (int j=0; j<=i-1 ;j++) { if(tokuten[j]>tokuten[j+1]) { Temp=Tokuten[j]; Tokuten[j]=Tokuten[j+1]; Tokuten[j+1]=Temp; jlabelsort.settext(" ソート完了しました "); 作成したら実行し 動作を確認してください 85
8 < バブルソート シミュレーションプログラム > バブルソートの処理を ( 視覚的に ) 確認できるデモプログラムを受講生用に作成しました HP の該当部に BubbleSort.exe の名前で掲載しています このプログラムをダウンロードして 処理の流れを今一度確認してください 使い方は 次の通りです プログラムを起動すると以下のような画面が現れるので ソート内容が昇順か 降順かを選択し 5つのデータ欄に適当な数値を代入します 数値入力後 [ 入力完了 ] ボタンをクリックすると準備完了です あとは [ 処理 ] ボタンをクリックする毎に 処理内容が表示され 変数の交換等の処理が行われます また 2 つの変数の大小比較や交換 ( 入れ替え ) を行う毎に その回数がカウントされます なお ソート完了後 [ リセット ] ボタンをクリックすると また最初からやり直すことができます 各自 何セットか実行し 処理の流れをじっくりと確認してください 基礎課題 5-2 バブルソートの場合 ( 隣り合う ) データの比較を行う回数は データ数によって決まっています データ数が 5 個の場合は 比較回数は幾つになるでしょうか? また 最大交換回数は幾つでしょうか? 各自 アルゴリズムに従って1ステップずつ処理の流れをトレースして確認して下さい 上の BubbleSort.exe を用いて確かめても結構です ( データ数 5 個の場合の ) 比較回数 ( データ数 5 個の場合の ) 最大交換回数 例えば降順に並んだ {5,4,3,2,1 を昇順にソートするとき データの交換回数は最大になります 86
9 5-2 選択ソート 前節と同じく 配列 A[0]~A[4] に入力された数値 ( 整数 ) を昇順に並べ替える場合を考 えましょう 選択ソートとは 1 5つの中から最小値を探し出し 先頭 (1 番目の ) データと交換する 1 番目のデータ確定 2 次に 残った 4 つの中から最小値を探し出し それを 2 番目のデータと交換する 2 番目のデータ確定 という操作を繰り返すものです つまり データの中から最小値あるいは最大値を選択し それを順次データ ( の未整列部分 ) の先頭に移動させる という処理を繰り返すことで 整列を実現しているわけです これが 選択ソートのアルゴリズムです 前節同様 次ページに具体的な処理の流れをまとめておきます 一つ一つの処理の流れを確認して行ってください 87
10 < 選択ソートの処理の流れ > 要素番号 配列 A の値 ソート開始時 A[0]~A[4] 中の最小値を見つける A[3] A[0] と A[3] を交換する A[0] の値確定! A[1]~A[4] 中の最小値を見つける A[4] A[1] と A[4] を交換する A[1] の値確定! A[2]~A[4] 中の最小値を見つける A[4] A[2] と A[4] を交換する A[2] の値確定! A[3]~A[4] 中の最小値を見つける A[4] A[3] と A[4] を交換する A[3] の値確定! 同時に A[4] の値も確定! ソート完了! 88
11 上の処理を流れ図の形に整理してみましょう 今 大きさ n の配列 A[0]~A[n-1] に 整 数が入力されているものとします この配列要素を昇順に並べ替える場合の流れ図は次の ようになります < 選択ソート ( 昇順 )> 開始 ループ -i i:0,1,n-2 ループ -i によって i 番目の要素の値が確定します カウンタ変数 : 初期値, 増分, 終値 Pos i 最小値探索ループ -j j:i+1,1,n-1 最初に i( 先頭の要素 ) を最小値データの要素番号候補として変数 Pos(Position( 最小値の位置 ) という意味で Pos としています ) に代入する 最小値ではなく 要素番号を保管している点に注意 A[j]<A[Pos] Yes Pos j No 最小値探索ループによって 最小値の入った要素番号が 変数 Pos に格納されます 最小値探索ループ -j Temp A[i] A[i] A[Pos] A[Pos] Temp 配列要素 A[i] と A[Pos] の値を入れ替えます ループ -i 終了 89
12 基礎課題 5-3 アルゴリズムは 書く ことによって頭に刻みこまれます そこで流れ図を書く練習をしましょう 前頁の流れ図を参考にして 配列要素 A[0]~A[n-1] を選択ソート法で降順に並べ替える流れ図を 以下に記述してください 開始 終了 90
13 基礎課題 5-4 基礎課題 5-1 と同様に tokuten.txt から得点を読み込み 昇順にソートするプログラムを作成しましょう ただし 今度は 選択ソートを用います 基礎課題 5-1 のプログラムに次のように [ 選択ソート ] ボタンを追加して下さい 下の空欄を埋めて [ 選択ソート ] ボタンのイ ベントハンドラを完成させてください jbuttonsentakusort private void jbuttonsentakusortactionperformed(actionevent evt) { int Temp,Pos; for (int i=0;i<=num-2;i++) { Pos=i; for (int j=i+1; j<=num-1;j++) { if(tokuten[j]< ) { Pos=j; Temp=Tokuten[i]; Tokuten[i]=Tokuten[Pos]; = Temp; jlabelsort.settext(" ソート完了しました "); 作成したら実行し 動作を確認して下さい 基礎課題 5-5 前節と同じく 選択ソートの処理の流れを観察できるプログラムを HP の該当部に SentakuSort.exe の名前で掲載しています このプログラムをダウンロードして 適当なデータを入力することにより 処理の流れを視覚的に確認してください 選択ソートにおいても ソートに必要な比較回数は 入力データ ( の内容 ) に関わらず一定です 入力データ数が5つの場合 比較回数は幾つかを SentakuSort.exe を用いて確認してください 比較回数 91
14 5-3 挿入ソート本章で学習する最後のソート法として挿入ソートを採り上げましょう これは 部分的に整列されたデータの場合に威力を発揮するソート法です ここまで来ると皆もソートアルゴリズムに慣れてきた頃だと思いますので 前置きなしで 以下に処理の流れをまとめておきます 流れを確認して下さい < 挿入ソートの処理の流れ> 要素番号 配列 A の値 開始時 :A[0] までがソート済みと考える A[1] を整列済み部分に追加する A[1] を A[0]~A[1] 中の正しい位置に送る A[0]>A[1] なので入れ換える A[0]~A[1] が整列済み A[2] を整列済み部分に追加する A[2] を A[0]~A[2] 中の正しい位置に送る A[2] の値を A[1] A[0] の値と順に比較し 昇順でなければ入れ換える という操作を繰り返す A[0]~A[2] が整列済み A[3] を整列済み部分に追加する A[3] を A[0]~A[3] 中の正しい位置に送る A[3] の値を A[2] A[1] の値と順に比較して行き A[1]<9 なのでそこで挿入位置確定 A[0]~A[3] が整列済み A[4] を整列済み部分に追加する A[4] を A[0]~A[4] 中の正しい位置に送る A[0]~A[4] が整列済み ソート完了! 92
15 これまで同様 上の処理を流れ図で表すと次のようになります ただし以下では配列の大 きさを n として 配列 A[0]~A[n-1] に適当な値が入力されているものとしています < 挿入ソート ( 昇順 )> 開始 ループ -i i:0,1,n-2 A[0]~A[i] までが整列済みであるとしてスタート します j i+1 挿入ループ ( j 0 あるいは A[j-1] A[j] ) が成り立つまで ( 繰り返す ) Temp A[j-1] A[j-1] A[j] A[j] Temp j は挿入位置を意味します 挿入ループによって A[i+1] を A[0]~A[i+1] 中の正しい位置に送ります 終了条件に注意して下さい A[j-1] A[j] が成立する場合は その時点で A[j] の値が確定します なぜなら A[j-1] より前方はすでに昇順に整列済みなので 全て A[j] より小さいか等しいからです そのため これ以降は大小関係を比較する必要がないので ループを終了します j j-1 挿入ループループ-i 終了 ループ端記号の約束では ある条件が成り立つまで繰り返す という表記になっています 一方 プログラミング言語で while 文を用いる場合は ある条件が成り立っている間繰り返す という書き方になります したがって 上の条件は while( j 1 かつ A[j-1]>A[j] ) という条件の書き方になります 次ページの 基礎課題 5-6 を考える際注意してください 93
16 基礎課題 5-6 基礎課題 5-1 および 基礎課題 5-4 と同様に tokuten.txt から得点を読み込み 昇順にソートするプログラムを作成しましょう もちろん 今度は挿入ソートを用います 基礎課題 5-4 のプログラムに 次のように[ 挿入ソート ] ボタンを追加して下さい jbuttonsounyusort 下の空欄を埋めて [ 挿入ソート ] ボタンのイベントハンドラを完成させてください private void jbuttonsounyusortactionperformed(actionevent evt) { int Temp; for (int i=0;i<=num-2;i++) { int j=i+1; while ( j>=1 && Tokuten[j-1]>Tokuten[j] ) { Temp=Tokuten[j-1]; Tokuten[j-1]=Tokuten[j]; Tokuten[j]=Temp; j--; jlabelsort.settext(" ソート完了しました "); 作成後 プログラムを実行し 動作を確認してください 94
17 基礎課題 5-7 前節までと同じく 挿入ソートの処理の流れを観察できるプログラムを HP の該当部に SounyuSort.exe の名前で掲載しています このプログラムをダウンロードしてください そしてこれを用いて処理の流れを確認して下さい 挿入ソートとバブルソートに要する比較回数および交換回数には 次のような大小関係があります 実際にシミュレーションプログラムで確認して 空欄に入る記号を解答群から選んでください ( よく分からない人は 先に 5-4 節を読んで下さい ) < 解答群 > 比較回数 ( 挿入ソート ) 比較回数 ( バブルソート ) < > 交換回数 ( 挿入ソート ) 交換回数 ( バブルソート ) = 5-4 アルゴリズムの効率本章で学んだ3つのソートアルゴリズムは いずれを使っても問題なくソートを行うことができます しかし その効率には違いがあります アルゴリズムの効率については 本講義ではその詳細を扱いませんが ソート処理に関して言えば それに要する比較回数および交換回数が少ないほど効率が良い と理解しておいてください 本章で用意した ソートシミュレーションプログラムを用いて 色々な入力データについて動作を確かめてみると分かるのですが 以下の点が知られています 1. バブルソートと 選択ソートの比較回数は 同じです データ数が5つの場合は 10 となっていたと思います 種明かしをすると これは 5つの中から任意の2つの組み合わせを選ぶときの数です データ数がn 個であれば n(n-1)/2 となります つまり この2つのソートでは 全てのペアについて大小関係を比較している訳です 一方 挿入ソートの場合は すでに整列済みの部分については比較する必要がないので n(n-1)/2 以下になります 2. 一方 バブルソートと挿入ソートの交換回数は等しくなります なぜなら 順番通りに並んでいないペア数だけ交換するという事情は同じだからです これに対して選択ソートの交換回数は (n-1) 回と決まります ですから 最初に全て整列しているなどの特殊な場合を除いては 選択ソートの交換回数が最も少なくなる事が多いです 以上を整理すると次のようになります 比較回数 : ( バブルソート )=( 選択ソート )( =n(n-1)/2 ) ( 挿入ソート ) 交換回数 : ( バブルソート )=( 挿入ソート ), ( 選択ソート )= (n-1) これを見ると バブルソートは最も効率が悪い ということになります では 一般に挿入ソートと選択ソートではどちらの効率が良いのでしょうか? それは ソート対象とな 95
18 るデータに依存することになりますが 一般には 部分的に整列したデータが含まれることが多いので 挿入ソートが最も効率が良くなることが多いようです ここで どれを用いても正しくソートできるのなら どうして効率などにこだわるの? と疑問に思う人がいるかもしれません もっともな疑問ですが ソートプログラムが使われている現場では 数万個程度のデータを扱うことが少なくありません 例えば センター入試の全受験生の成績をソートする場合などを考えてみたらどうでしょう ( 昨年度の場合志願者は約 58 万人です!) このような場合 ソートアルゴリズムの効率が決定的にモノを言うのです 以上はやや専門的な内容なので 参考までに知っておいてくれれば結構です しかし 将来情報処理関係の技術者を目指す人にとっては 常識 として要求される知識です 5-5 応用問題 応用課題 5-A 応用課題 4-B を発展させて 今度は score3.txt のデータを読み込んで 下の様に 3 科目の合計点順に ( 降順に ) ソートして表示させるプログラムを作成してください ソート法としては挿入ソートを用いてください 入力ファイルを指定しデータの読み込 み完了後 [ 表示 ] ボタンをクリックす ると 受験生の成績が表示される [ 挿入ソート ] ボタンのクリック後 再度 [ 表示 ] ボタンをクリックすると 合計点 の高い順にソートされて表示される 96
データ構造とアルゴリズム論
15 11 18 A[0]A[4] 0 1 2 3 5 2 12 9 10 4 12 10 9 5 2 4 3 2 1 0 A 1,2,3,4,5 5,4,3,2,1 87 15 11 18 0 1 2 3 4 A 10 9 12 2 5 10 9 12 2 5 A[0]A[1] 9 10 12 2 5 A[1]A[2] 9 10 12 2 5 A[2]A[3] 9 10 2 12 5 A[3]A[4]
次に示す数値の並びを昇順にソートするものとする このソートでは配列の末尾側から操作を行っていく まず 末尾の数値 9 と 8 に着目する 昇順にソートするので この値を交換すると以下の数値の並びになる 次に末尾側から 2 番目と 3 番目の 1
4. ソート ( 教科書 p.205-p.273) 整列すなわちソートは アプリケーションを作成する際には良く使われる基本的な操作であり 今までに数多くのソートのアルゴリズムが考えられてきた 今回はこれらソートのアルゴリズムについて学習していく ソートとはソートとは与えられたデータの集合をキーとなる項目の値の大小関係に基づき 一定の順序で並べ替える操作である ソートには図 1 に示すように キーの値の小さいデータを先頭に並べる
データ構造とアルゴリズム論
15 11 11 Java 21 231-0811 32 152-0033 1 Java 3-5,55,63,39,87,48,70,35,77,59,44 3-5 3-7 score2.txt 75 15 11 11 5-1 3-7 jbuttonread jbuttondisplay jlabelmessage jtextfieldname jtextfieldtokuten
データ構造とアルゴリズム論
第 3 章. ファイルを用いたデータ入出力 学習のねらい 1 データをファイルへ出力する ( 書き込む ) 方法を学習する 2 データをファイルから入力する ( 読み込む ) 方法を学習する 大量のデータを処理する場合は ファイルからデータを読み込んでから処理を行います また プログラムが終了すると変数に記憶されたデータは消えてしまうので 処理結果を残すためにはファイルに保管しておくことが必要になります
データ構造とアルゴリズム論
Java jtextfielddata jbuttonwrite jlabelmessage void jbuttonwrite_actionperformed(actionevent e) { String Data=jTextFieldData.getText(); try { // Test1.txt fw FileWriter fw= new FileWriter("Test1.txt");
今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順 ) になるよう 並び替えること
C プログラミング演習 1( 再 ) 4 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順
データ構造とアルゴリズム論
第 3 章. ファイルを用いたデータ入出力 学習のねらい 1 データをファイルへ出力する ( 書き込む ) 方法を学習する 2 データをファイルから入力する ( 読み込む ) 方法を学習する 大量のデータを処理する場合は ファイルからデータを読み込んでから処理を行います また プログラムが終了すると変数に記憶されたデータは消えてしまうので 処理結果を残すためにはファイルに保管しておくことが必要になります
C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ
C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 今回のプログラミングの課題 次のステップによって 徐々に難易度の高いプログラムを作成する ( 参照用の番号は よくわかる C 言語 のページ番号 ) 1. キーボード入力された整数 10 個の中から最大のものを答える 2. 整数を要素とする配列 (p.57-59) に初期値を与えておき
第1章 ビジュアルプログラミング入門
付録 A 既存のクラスの利用の仕方 第 7 章では フレームクラス (NewJFrame.java) とそこから呼び出されるクラス (Meibo.java など ) を同じプロジェクト内 つまり同じパッケージ内に定義しました しかし 一般には 別のパッケージ ( フォルダ ) に保管されているクラスを利用する場合があります ここでは その方法を説明します なお フォルダは Java の用語ではパッケージに対応するので
2
問題 1 次の設問 1~5 に答えよ 設問 1. Java のソースプログラムをコンパイルするコマンドはどれか a) java b) javac c) javadoc d) jdb 設問 2. Java のバイトコード ( コンパイル結果 ) を実行するコマンドはどれか a) java b) javac c) javadoc d) jdb 設問 3. Java のソースプログラムの拡張子はどれか a).c
PowerPoint プレゼンテーション
プログラミング初級 第 7 回 2017 年 5 月 29 日 配列 ( 復習 )~ 文字列 1 配列とは 2 配列 : 複数の変数をグループとしてまとめて扱うもの 配列 変数 int data[10]; 整数型の配列 同種のデータ型を連続して確保したものを配列とよぶ = 整数がそれぞれにひとつずつ入る箱を 10 個用意したようなもの int data; 整数型の変数 = 整数がひとつ入る dataという名前の箱を用意したようなもの
2
問題 次の設問に答えよ 設問. Java のソースコードをコンパイルするコマンドはどれか a) java b) javac c) javadoc d) javaw 設問. Java のバイトコード ( コンパイル結果 ) を実行するコマンドはどれか a) java b) javac c) javadoc d).jar 設問. Java のソースコードの拡張子はどれか a).c b).java c).class
Taro-再帰関数Ⅲ(公開版).jtd
0. 目次 1 1. ソート 1 1. 1 挿入ソート 1 1. 2 クイックソート 1 1. 3 マージソート - 1 - 1 1. ソート 1 1. 1 挿入ソート 挿入ソートを再帰関数 isort を用いて書く 整列しているデータ (a[1] から a[n-1] まで ) に a[n] を挿入する操作を繰り返す 再帰的定義 isort(a[1],,a[n]) = insert(isort(a[1],,a[n-1]),a[n])
問題1 以下に示すプログラムは、次の処理をするプログラムである
問題 1 次に示すプログラムは 配列 a の値を乱数で設定し 配列 a の値が 333 より大きく 667 以下の値 の合計値を求めるプログラムである 1 と 2 に適切なコードを記述してプログラムを完 成させよ class TotalNumber { public static void main(string[] args) { int[] a = new int[1000]; // 1 解答条件
簡単な検索と整列(ソート)
フローチャート (2) アルゴリズム論第 2 回講義 2011 年 10 月 7 日 ( 金 ) 反復構造 ( 一定回数のループ処理 ) START 100 回同じ処理を繰り返す お風呂で子供が指をおって数を数える感じ 繰り返し数を記憶する変数をカウンター ( 変数名 I をよく使う ) と呼ぶ カウンターを初期化して, 100 回繰り返したかどうか判定してそうならば終了そうでなければ処理を実行して
Microsoft Word - VB.doc
第 1 章 初めてのプログラミング 本章では カウントアップというボタンを押すと表示されている値が1ずつ増加し カウントダウンというボタンを押すと表示されている値が1ずつ減少する簡単な機能のプログラムを作り これを通して Visual Basic.NET によるプログラム開発の概要を学んでいきます 1.1 起動とプロジェクトの新規作成 Visual Studio.NET の起動とプロジェクトの新規作成の方法を
4-4 while 文 for 文と同様 ある処理を繰り返し実行するためのものだが for 文と違うのは while 文で指定するのは 継続条件のみであるということ for 文で書かれた左のプログラムを while 文で書き換えると右のようになる /* 読込んだ正の整数値までカウントアップ (for
4-4 while 文 for 文と同様 ある処理を繰り返し実行するためのものだが for 文と違うのは while 文で指定するのは 継続条件のみであるということ for 文で書かれた左のプログラムを while 文で書き換えると右のようになる /* 読込んだ正の整数値までカウントアップ (for 文 ) */ int i, no; for (i = 0; i
プログラミング入門1
プログラミング入門 1 第 5 回 繰り返し (while ループ ) 授業開始前に ログオン後 不要なファイルを削除し て待機してください Java 1 第 5 回 2 参考書について 参考書は自分にあったものをぜひ手元において自習してください 授業の WEB 教材は勉強の入り口へみなさんを案内するのが目的でつくられている これで十分という訳ではない 第 1 回に紹介した本以外にも良書がたくさんある
模擬試験問題(第1章~第3章)
基本情報技術者試験の練習問題 - 第 10 回 この問題は平成 19 年度春期の問題から抜粋しています 問 1 次のプログラムの説明及びプログラムを読んで, 設問 1~3 に答えよ プログラムの説明 整数型の 1 次元配列の要素 A[0],,A[N](N>0) を, 挿入ソートで昇順に整列する副プログラム InsertSort である (1) 挿入ソートの手順は, 次のとおりである (i) まず,A[0]
データ構造とアルゴリズム論
第 1 章.Java による CG 作成方法 2 学習のねらい 1 先週に続いて Java 言語 (Eclipse 環境における ) を用いて CG( コンピュータグラフィックス ) を作成する方法の基礎を学習する 今回は ( 作成した )CG が自動的に再描画される様にするための処理 ( のプログラミング ) を学習する 今回の学習で Java による CG 作成方法を終了し 次週以降は CG 作成のアルゴリズムの学
Microsoft PowerPoint - å®�æ−•試é¨fi3ㆮ対ç�Œ.pptx
C言語の繰り返し処理 for文と while文と do文 臼杵 潤 0) 準備 変数の加減算 int a, b=10; // a= a = 0; a = a+1; // a= a += 1; // a= // a= a ++; a = a + b; // a= a += b; // a= // a= a --; 下を1行ずつ実行すると それぞれ aの値はどう変わるか 0 1 2 3 13 23 22
オブジェクト指向プログラミング・同演習 5月21日演習課題
オブジェクト指向プログラミング 同演習 5 月 21 日演習課題 問題 1 配列の例外処理例外が発生する可能性のある処理を try で囲み その後に catch で例外を捕捉します 例外処理の終了処理として finally が行われます これは書かなくて自動的に行われます 提出課題 1 (Kadai052301.java) 以下のプログラムは例外処理をしていない ArrayIndexOutOfBoundsException
第1章 ビジュアルプログラミング入門
第 9 章アプレット 学習内容とねらい 本章では Java 言語で作ったプログラムを Web ブラウザ上で動作させる方法を学習します Java 言語には これまで作成してきた Windows アプリケーションの他に Web ブラウザ上で動作させる事のできるアプレットという形態があります このアプレットを利用すれば Web 上で Java プログラムを公開することもできます アプレットは Java 言語の普及当初は
Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]
if 文 (a と b の大きい方を表示 ) C 言語 Ⅰ の復習 条件判定 (if, 条件式 ) ループ (for[ 二重まで ], while, do) 配列 ( 次元 次元 ) トレース int a, b; printf( 整数 a: ); scanf( %d, &a); printf( 整数 b: ); scanf( %d, &b); //つのif 文で表現する場合間違えやすい どっちに =
2.Picasa3 の実行 デスクトップの をダブルククリック 一番最初の起動の時だけ下記画 面が立ち上がります マイドキュメント マイピクチャ デスクトップのみスキャン にチェックを入れ続行 これはパソコン内部の全画像を検索して Picasa で使用する基本データを作成するものですが 完全スキャン
Picasa3 を使った写真の整理 写真の整理はエクスプローラーを開いてフォルダの作成から写真の移動やコピーを行うことが望ましいのですが エクスプローラーの操作を覚えられずに写真の整理が進んでいない人のために画像管理ソフト Picasa3 を使った整理方法を説明します なお このソフトは画像に関する多くの機能を持ったものですが 画像整理だけの利用では容量も大きいですからエクスプローラーの使い方をマスターしている人はこのソフトを使う必要はありません
Microsoft Word - Word1.doc
Word 2007 について ( その 1) 新しくなった Word 2007 の操作法について 従来の Word との相違点を教科書に沿って説明する ただし 私自身 まだ Word 2007 を使い込んではおらず 間違いなどもあるかも知れない そうした点についてはご指摘いただければ幸いである なお 以下において [ ] で囲った部分は教科書のページを意味する Word の起動 [p.47] Word
スライド 1
6B-1. 表計算ソフトの操作 ( ) に当てはまる適切な用語とボタン ( 図 H 参照 ) を選択してください ( 選択肢の複数回の選択可能 ) (1) オートフィルオートフィルとは 連続性のあるデータを隣接 ( りんせつ ) するセルに自動的に入力してくれる機能です 1. 図 1のように連続した日付を入力します *( ア ) は 下欄 ( からん ) より用語を選択してください セル A1 クリックし
PowerPoint Presentation
工学部 6 7 8 9 10 組 ( 奇数学籍番号 ) 担当 : 長谷川英之 情報処理演習 第 7 回 2010 年 11 月 18 日 1 今回のテーマ 1: ポインタ 変数に値を代入 = 記憶プログラムの記憶領域として使用されるものがメモリ ( パソコンの仕様書における 512 MB RAM などの記述はこのメモリの量 ) RAM は多数のコンデンサの集合体 : 電荷がたまっている (1)/ いない
20180308森の日県南支部 林
NPO 法人いきいきネットとくしま第 116 回定例勉強会 森の日県南 平成 30 年 3 月 8 日担当 : 林暁子 PowerPoint を 学習やコミニケーション 生活の困難を助け楽しめるツールとして活用していきたいと思います 今回の学習は PowerPoint のハイパーリンクを利用して 問題の答えが合ってれば 〇 が表視されて次の問題に進む 間違っていれば が表示されて同じ問題に もう一度挑戦!
書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf
情報処理基礎 C 言語についてプログラミング言語は 1950 年以前の機械語 アセンブリ言語 ( アセンブラ ) の開発を始めとして 現在までに非常に多くの言語が開発 発表された 情報処理基礎で習う C 言語は 1972 年にアメリカの AT&T ベル研究所でオペレーションシステムである UNIX を作成するために開発された C 言語は現在使われている多数のプログラミング言語に大きな影響を与えている
Microsoft Word - VBA基礎(6).docx
あるクラスの算数の平均点と理科の平均点を読み込み 総点を計算するプログラムを考えてみましょう 一クラスだけ読み込む場合は test50 のようなプログラムになります プログラムの流れとしては非常に簡単です Sub test50() a = InputBox(" バナナ組の算数の平均点を入力してください ") b = InputBox(" バナナ組の理科の平均点を入力してください ") MsgBox
<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>
C 言語講座第 2 回 作成 : ハルト 前回の復習基本的に main () の中カッコの中にプログラムを書く また 変数 ( int, float ) はC 言語では main() の中カッコの先頭で宣言する 1 画面へ出力 printf() 2 キーボードから入力 scanf() printf / scanf で整数を表示 / 入力 %d 小数を表示 / 入力 %f 3 整数を扱う int 型を使う
JavaプログラミングⅠ
Java プログラミング Ⅰ 4 回目演算子 今日の講義で学ぶ内容 演算子とオペランド 式 様々な演算子 代表的な演算子の使用例 演算子とオペランド 演算子 演算の種類です例えば + - * / 掛け算の記号は ではなく *( アスタリスク ) を使います割り算の記号は ではなく /( スラッシュ ) を使います オペランド 演算の対象です例えば 5( 値 ) num( 変数 ) 式 演算子とオペランドの組み合わせにより構成される数式です式は演算結果をもちます
メソッドのまとめ
メソッド (4) 擬似コードテスト技法 http://java.cis.k.hosei.ac.jp/ 授業の前に自己点検以下のことがらを友達に説明できますか? メソッドの宣言とは 起動とは何ですか メソッドの宣言はどのように書きますか メソッドの宣言はどこに置きますか メソッドの起動はどのようにしますか メソッドの仮引数 実引数 戻り値とは何ですか メソッドの起動にあたって実引数はどのようにして仮引数に渡されますか
コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n
コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n を入力してもらい その後 1 から n までの全ての整数の合計 sum を計算し 最後にその sum
C#の基本
C# の基本 ~ 開発環境の使い方 ~ C# とは プログラミング言語のひとつであり C C++ Java 等に並ぶ代表的な言語の一つである 容易に GUI( グラフィックやボタンとの連携ができる ) プログラミングが可能である メモリ管理等の煩雑な操作が必要なく 比較的初心者向きの言語である C# の利点 C C++ に比べて メモリ管理が必要ない GUIが作りやすい Javaに比べて コードの制限が少ない
初めてのプログラミング
Excel の使い方 2 ~ 数式の入力 グラフの作成 ~ 0. データ処理とグラフの作成 前回は エクセルを用いた表の作成方法について学びました 今回は エクセルを用いたデータ処理方法と グラフの作成方法について学ぶことにしましょう 1. 数式の入力 1 ここでは x, y の値を入力していきます まず 前回の講義を参考に 自動補間機能を用いて x の値を入力してみましょう 補間方法としては A2,
プログラミング基礎
C プログラミング Ⅱ 演習 2-1(a) BMI による判定 文字列, 身長 height(double 型 ), 体重 weight (double 型 ) をメンバとする構造体 Data を定義し, それぞれのメンバの値をキーボードから入力した後, BMI を計算するプログラムを作成しなさい BMI の計算は関数化すること ( ) [ ] [ ] [ ] BMI = 体重 kg 身長 m 身長
Prog2_9th
2013 年 11 月 21 日 ( 木 ) 実施例外処理 Java 言語では, 作成したプログラムを実行する際に, 記述した処理が想定しない事態によって実行できなくなる場合を例外と呼び, その例外への対処, 即ち例外処理が求められる これまでの教材に登場した例外の中で,IOException はコンパイラがチェックするため, 例外処理を必ず記述しなければコンパイルが出来ないものであるのに対して,ArithmeticException
Java講座
~ 第 1 回 ~ 情報科学部コンピュータ科学科 2 年竹中優 プログラムを書く上で Hello world 基礎事項 演算子 構文 2 コメントアウト (//, /* */, /** */) をしよう! インデントをしよう! 変数などにはわかりやすい名前をつけよう! 要するに 他人が見て理解しやすいコードを書こうということです 3 1. Eclipse を起動 2. ファイル 新規 javaプロジェクト
やってみようINFINITY-写真管理 編-
目次 やってみよう for Wingneo INFINITY やってみよう for Wingneo INFINITY... 1 目次... 1 システムの起動... 1 写真管理に登録する写真を準備する... 1 写真管理 ( 電子納品 ) の操作方法... 2 写真整理... 2 成果区分の設定... 4 成果管理から電納編集ツールへの操作方法... 5 電納編集ツール ( 写真管理 ) の操作方法
データ構造
アルゴリズム及び実習 7 馬青 1 表探索 定義表探索とは 表の形で格納されているデータの中から条件に合ったデータを取り出してくる操作である 但し 表は配列 ( 連結 ) リストなどで実現できるので 以降 表 の代わりに直接 配列 や リスト などの表現を用いる場合が多い 表探索をただ 探索 と呼ぶ場合が多い 用語レコード : 表の中にある個々のデータをレコード (record) と呼ぶ フィールド
Microsoft Word - VBA基礎(3).docx
上に中和滴定のフローチャートを示しました この中で溶液の色を判断する部分があります このような判断はプログラムではどのように行うのでしょうか 判断に使う命令は IF 文を使います IF は英語で もし何々なら という意味になります 条件判断条件判断には次の命令を使います If 条件式 1 Then ElseIf 条件式 2 Then ElseIf 条件式 3 Then 実行文群 1 実行文群 2 実行文群
テキストファイルの入出力1
テキストファイルの入出力 1 0. 今回の目的前回までは 2 回にわたって繰り返しについて学んできました 今回からテキストファイルの入出力について学ぶことにします 1. テキストファイルへの出力 1.1 テキストファイルについてテキストファイルとは コンピュータで扱うことが出来るファイルの中で最も基本的なファイルであり どの様な OS でもサポートされているファイル形式です Windows においては
PowerPoint Presentation
プログラミング基礎 第 2 週 (4,5,6 回 ) 2011-10-07 出村公成 この資料の再配布を禁止します 予定 プログラミング入門 (45 分 ) 変数 入出力 分岐 演習 (90 分 ) タッチタイプ練習 統合開発環境 Codeblocksの使い方 教科書例題の打ち込みと実行 プログラミング入門 C 言語の簡単な例を体験 変数 入出力 分岐 プログラムの例リスト 2.1 改 #include
Ⅰ. 問題を 1 問ずつ入力していく方法 1. 挿入 メニューから e- ラーニング を選び テスト をクリックして下さい 2. 新規テストの作成ウィザード ( テストの設定 ) が開くので各項目を設定して下さい ここでは 名称を 確認問題 満点を 5 点 合格点を 3 点 制限時間なしで設定します
ホームページ ビルダー Ver.8 を利用した Web 教材作成マニュアル 目次 Ⅰ. 問題を 1 問ずつ入力していく方法 解説ページを設定する方法 採点結果をメールで送信する 機能について Ⅱ.CSV ファイルから一括して問題を作成する方法 このマニュアルは ホームページ ビルダー Ver.8がすでにお使いのパソコンにインストールされていることを前提に編集されています ホームページ ビルダー Ver.8は
データの作成方法のイメージ ( キーワードで結合の場合 ) 地図太郎 キーワードの値は文字列です キーワードの値は重複しないようにします 同じ値にする Excel データ (CSV) 注意キーワードの値は文字列です キーワードの値は重複しないようにします 1 ツールバーの 編集レイヤの選択 から 編
手順 4 Excel データを活用する ( リスト / グラフ 色分け ) 外部の表データ (CSV 形式 ) を読み込み リスト表示やカード表示 その値によって簡単なグラフ ( 円 正方形 棒の 3 種類 ) や色分け表示することができます この機能を使って地図太郎の属性情報に無い項目も Excel で作成し CSV 形式で保存することにより 自由に作成することができます (Excel でデータを保存するとき
ガイダンス
情報科学 B 第 2 回変数 1 今日やること Java プログラムの書き方 変数とは何か? 2 Java プログラムの書き方 3 作業手順 Java 言語を用いてソースコードを記述する (Cpad エディタを使用 ) コンパイル (Cpad エディタを使用 ) 実行 (Cpad エディタを使用 ) エラーが出たらどうしたらよいか??? 4 書き方 これから作成する Hello.java 命令文 メソッドブロック
. 起動 目次 P.. ログイン 画面 P.. メニュー 画面 P.. POS 開示 _ 指定店舗 アイテム別 期間合計 画面 ( レポート A) P. 5. POS 開示 _ 店舗別 指定アイテム 期間合計 画面 ( レポート B) ----
操作手順書 0 年 0 月 情報システム部 . 起動 目次 ------ P.. ログイン 画面 ------ P.. メニュー 画面 ------ P.. POS 開示 _ 指定店舗 アイテム別 期間合計 画面 ( レポート A) ------ P. 5. POS 開示 _ 店舗別 指定アイテム 期間合計 画面 ( レポート B) ------ P.0 6. POS 開示 _ 指定店舗 指定アイテム
IPPO - 校内研修支援プログラム - 使用説明書 目次 項 目 ページ 1 プログラム利用の準備 この説明書の記述について プログラムの動作環境等 プログラムファイルのコピー プログラムファイルの起動 4 2 プログラムファイルの利用
IPPO - 校内研修支援プログラム - 使用説明書 目次 項 目 ページ 1 プログラム利用の準備 1 1-1 この説明書の記述について 1 1-2 プログラムの動作環境等 1 1-3 プログラムファイルのコピー 1 1-4 プログラムファイルの起動 4 2 プログラムファイルの利用 5 2-1 スタート画面 5 2-2 各ボタンの説明 ( 機能概要 ) 6 3 児童 ( 生徒 ) 出席番号 氏名管理の入力
SimLabプラグインは各機能を15回分評価版として試用できます
SimLab Plugins for SketchUp 評価版インストールおよびアクティベート方法 注意事項 各 SimLab プラグインはその機能 ( インポートまたはエクスポート ) を 30 回分評価用として試用できます 評価版をお使い頂くには 評価用ライセンスでのアクティベートが必要です 評価用ライセンスファイルの取得を行い 手動でアクティベートする必要があります インターネット接続環境 有効なメールアドレスの保持が必須です
プログラミング基礎
C プログラミング Ⅰ 授業ガイダンス C 言語の概要プログラム作成 実行方法 授業内容について 授業目的 C 言語によるプログラミングの基礎を学ぶこと 学習内容 C 言語の基礎的な文法 入出力, 変数, 演算, 条件分岐, 繰り返し, 配列,( 関数 ) C 言語による簡単な計算処理プログラムの開発 到達目標 C 言語の基礎的な文法を理解する 簡単な計算処理プログラムを作成できるようにする 授業ガイダンス
第1章 ビジュアルプログラミング入門
第 3 章イベントとイベントハンドラ 学習内容とねらい Windows 上のプログラムは マウスクリックや特定キーの入力によって 所定の処理が始まることが普通です この時のマウスクリックなどの動作 ( アクション ) を イベント と呼びます そしてそのイベント発生時の処理内容を記述したプログラムを イベントハンドラ と呼びます handle( ハンドル ) にはさばく あるいは処理するという意味がありますが
PowerPoint プレゼンテーション
eラーニングライブラリ教育ご担当者専用 Myページのご案内 ( 変更依頼編 ) ライブラリの運用管理をアシストする ( Ver 201807 V2.3) 受講者 組織の変更依頼の流れ 1My ページにログイン P2~3 https://elibrary.jmam.co.jp/order/ 2 受講者 組織データの変更依頼 P4~17 約 2 週間後 締切日まで変更可能です 3 登録完了のご連絡 P18
Microsoft Word - データベース.doc
1 データベース 世の中には膨大なデータが満ちあふれていますが それらは活用されない限り 情報 としての価値を持ちません データが 情報 として活用されるためには 検索されやすい形で整理 保管され 必要に応じて抽出できることが必要となります 本章ではデータの整理 保管 抽出機能を持ったデータベースについての概要を学習します STEP1 STEP1 データベースを使ってみよう データを 情報 として利用するためには
スライド 1
グロービスの e ラーニング Digital GLOBIS emba2.0 シリーズ受講生ご利用ガイド 2016 年 2 月 目次 1. ログインメール P.3 2. 学習の手順 P.4 3. 画面操作方法 P.7 受講開始 受講中 演習問題 スキルチェックテスト アンケート 4. 修了証の発行 P.21 5. ダウンロード資料 P.22 6. パスワードの再発行 P.23 7. お問い合わせ P.24-2-
