並べ替え並べ替えもう少し長期の黒点数の推移を見てみましょう。以下のデータは1979年から2008年の30年間の年平均黒点数データです。データはdata.txtに格納されているとします。最初の数値155が30年前の年間平均の黒点数、157が20年前の年間平均の黒点数、93が10年前の年間平均の黒点数の順でデータが並んでいます。この30個のデータをグラフにしてみましょう。*3*+------------|------------|------------>黒点数はきれいな周期性を持っているようです。30年で3回のピークと3回のボトムがあることが分かります。黒点数を少ない順に並べるちなみに、ボトムはどれくらいの黒点数なのでしょうか。黒点数を並べ替えてみましょう。data.txtを縦一列に変換します。<data.txt155154140::(中略):1572長すぎるので途中を省略しましたが、縦一列に変換できていることが分かります。次に並べ替えるためにユーティリティーパッケージのsortプログラムを繋げます。sort278::(中略):154155157途中を省略しましたが、rpnのsortプログラムを使うことでm行1列のデータを並べ替えることができます。少ない順のトップ10次にトップ10を出してみましょう。トップ10を出すには、まず並べ替えてから行番号を付与して、最後にlookupを使って1から10までを抽出します。29ちょっと説明すると、最初のrpn式のfold'で30個のデータを縦一列に変換して、sortで並べ替えします。tmpには並べ替え終わったデータが縦一列に並んでいます。次のrpn式で行番号を付与して、lookupで1から10までのデータを抽出する流れになっています。黒点数が少なかった1位から10位までが出ていますね。結果を見ると30年間で年平均黒点数が10個以下だった年は3年しかなかったことになります。見方を変えると平均すれば10年に1年は10個以下ということになります。横一列のデータも簡単に並べ替えさて、rpnプログラムのfoldにfold'があったのと同じように、sortプログラムにもsort'という親戚があります。sortはm行1列のデータを並べ替え、sort'は1行n列のデータを並べ替えるプログラムです。試しにsort'プログラムを使ってみましょう。data.txtを横一行に変換します。2画面に入りきらないので途中を省略しましたが、横一行に変換できています。ここでfold'に指定した36は36個のデータで折り返すようにというものです(36は3年×12ヶ月)。data.txtには12列×3行の形でデータが格納されているのですが、fold'への指定から36個集めてから折り返えそうとするために、結局は全部のデータが一行になって出力されています。157これも画面に入りきらないので中略しましたが、横一行に並べ変わっていることが分かりますね。tmatを使って行列の縦横変換をすれば、'(ダッシュ)付きのプログラムは必要ないのですが、ユーザが素早く計算しやすいようにfold、fold'、sort、sort'のような縦一列、横一行のデータに対応したプログラムを完備しました。大きいもの順に並べる前述の並べ替えは昇順(小さいもの順)でしたが、降順(大きいもの順)にするにはどうすればいいでしょう。rpnではユーティリティーパッケージのreverseプログラムを使って逆順にします。以下は先ほどの並べ替えの例です。data.txtを縦一列のデータにしてからsortに引き渡しています。sort278::(中略):154155157並べ替え済みのデータが確認できたので、このデータをreverseプログラムに引渡します。reverse157155154::(中略):872きちんと逆順に並んでいることが分かります。直近30年間で年平均の黒点数が200を超えることはなかったようです。実は300年以上の観測歴史の中で黒点数が150を超えたのは1778年、1947年、1957年~1959年、1959年、1979年~1980年、1989年の8年しかありません。直近30年間の前の270年間で150個以上発生した年は5年だけですから、1.85%の確率です。大体50年に1回しか発生しないわけです。それが直近30年間で3回発生していましたから、太陽の活動はとても活発な時期だったことになります。横一列のデータを大きいもの順に並べるでは横に並んでいるデータを逆順にするにはどうすればいいでしょうか。残念ながらreverse'は存在しません。代わりに、rpnには「u」というスタック操作記号があります。uを使うと横方向の逆順と同じ効果が得られます。reverse'」と思ってください。2fold'でdata.txtを横一行に変換します。157sort'を繋いで、横一行のデータを昇順に並べ替えます。2最後に並べ替えられた横一行のデータをuで逆順にします。sort'は150個の数値、sortは1000個の数値程度を目安に使用してください。uは150個の数値、reverseは1000個の数値程度を目安に使用してください。本講座で使用したプログラムは、ユーティリティーパッケージとして購入することができます。xypとnpdはrpnの姉妹ソフトウェアです。詳しくはプロダクトを参照ください。表計算に貼付ツール索引(アルファベット順)cal/date/dates/days/echo/entabmoon/now/null/sleep/stamp/timewareki/watch/weekday文字で作られた図表や式が崩れることがあります。ブラウザによっては固定幅フォントをMSゴシックにするときれいに表示されます。それでも崩れる場合は図表や式をメモ帳にコピー後、閲覧下さい。rpn標準版(2kリビジョン)はダブルクォートで囲ってください。"foo"ダブルクォートは省略できることが多いのですが、慣れない間は囲んだほうが無難です。本ウェブサイトの記事ではrpn標準版(98リビジョン)を使用しているため囲っていません。TIPS」を参照ください。rpnの障害情報と対策はこちら。※ウェブサイトの内容を無断で複製、変更することは法律で禁じられています。