A スプレッドシート
スプレッドシートとリスト
Cinderellaには,GeoGebraのようなスプレッドシート(表計算のシート)はありません。しかし,リスト処理によって表計算と同様の処理を行うことができます。
まず,リストの概念を,スプレッドシートとの比較で説明しておきます。
下図左はGeoGebraの表計算ビューに数値を入力したもの,右はCinderellaの描画面にリストのデータを表示したものです。
データの入力
GeoGebraではExcelやCalcのような表計算ソフトと同様なスプレッドシートの扱いができます。
上図では,A列はA1,A2に1,2を入力しておいてオートフィルで連番が入れられます。
また,B1には 「=A1*3」,C1には「=2^A1」という数式を書いて,あとはコピーすればよいのです。
一方,Cinderellaではそのような機能はありませんので,データを作って表の形に表示します。
これはCindyscriptで行います。次の2行を実行すれば右図ができます。
data=apply(1..8,[#,#*3,2^#]);
drawtable([0,0],data,width->50);
1行目で,apply() はリストを作る関数です。この結果,dataは次のようなリストになります。
[[1,3,2],[2,6,4],[3,9,8],[4,12,16],[5,15,32],[6,18,64],[7,21,128],[8,24,256]]
Cindyscriptでのリストは,[]の中に要素をコンマで区切って入れます。
リストは入れ子(ネスト:リストのリスト)にすることができ,上がそのようになっています。
1つ目のリスト [1,3,2]が表の1行目,2つ目のリスト[2,6,4]が2行目・・・・ となっています。
さらにネストした3次元以上のリストも可能ですが,いまはこの2次元のリストがスプレッドシートに対応するわけです。
このことが理解されていれば,表計算ソフトでできること(集計,グラフ,各種分析)はすべてCindyscriptでできます。条件検索や絞り込みは表計算ソフトよりずっと便利に行うことができます。
ただし,Cinderellaでは,表示されている数表上で値を書き換えたり,範囲を選択することはできません。
インタラクティブな操作では,当然GeoGebraの表計算ビューの方が有利です。
表計算ソフトからのコピー
GeoGebraもCinderellaも,表計算ソフトのワークシートからのコピーができます。範囲を指定しておいて,Ctrl+C,Ctrl+V でコピーアンドペーストすればよいのです。
表計算ソフトのワークシート
GeoGebra:表計算ビューにコピー
Cinderella:Cindyscriptに文字列としてコピー:この後リスト化して処理する。
CSVデータの読み込み
CSVファイルをテキストエディタで開き,表計算ソフトからのコピーと同様にして Ctrl+C,Ctrl+V でコピーすることができます。
数値以外の要素を表に入れる
表計算ソフトでは,文字列を表の中に入れることができます。
GeoGebraではそれに加え,点の座標を表の中に入れることもできます。
次の例では,A列に対し,B列は,B1に 「=2*A1」 を入れてコピーし,C列はC1に「(A1,B1)」を入れてコピーしたものです。
C列の (1,2) , (2,4) ・・ はそれぞれ点の座標と解釈され,グラフィクスビューに点が表示されます。
Cinderellaでは次のようにします。
data=apply(1..4,[#,2*#,[#,2*#]]);
drawtable([6,0],data,width->50);
forall(data,draw(#_3));
絶対参照
セル間で計算をするとき,「絶対参照」というものがあります。
A列に 1,2,3,4 が入っているとき,B1に 「=4*A1」 とするかわりに,かける数の4をC1セルに書いて
「=$C1$*A1」とする方法です。このとき $ をつけないと,コピーしたときに「=C2*A2」「=C3*A3」・・ となってしまいますが,$をつければ常にC1の値をかけることになります。
Cindyscriptでは次のようにすればよいでしょう。
data=[[1,4,4]];
repeat(3,start->2,
data=append(data,[#,data_1_3*#,""]);
);
drawtable([0,0],data,width->50);