表計算

説明

表計算を行います。マス目に入力された値をリアルタイムに縦横の合計を集計し表示します。セルの入力はクリックすると入力ダイアログが表示されるようになっています。

なお、このプログラムではセルの縦横の数は固定されています。プログラムの中に縦横の数は直接指定してあります。この方法だとセルの縦横の数を変えたい場合に変更作業が大変です。このような手間を解消するにはどうしたらよいか考えてみてください。

Studioで試す

以下のリンクから Jasmine Tea でこのサンプルプログラムを Studio 画面で開いて実際に試すことができます。プログラムを実行したいときは、エディターの右下にある青色の「実行」ボタンを押してください。

Studio で開く

プログラム

// 表計算
cell@=createCells@()
cls
call drawGrid
call viewCell cell@

// メインループ
do
  tap x,y
  if x<>-1 then
    x=round(x/80-0.5,0)
    y=round(y/16-0.5,0)
    if x<7 and y<9 then 
      box (x*80,y*16)-(x*80+79,y*16+15),15,6
      input "数値を入れてください",n
      box (x*80,y*16)-(x*80+79,y*16+15),15,9
      cell@[x][y]=n
      call viewCell cell@
    end if
  end if
loop

// セルの生成
function createCells@()
  cell@=[]
  for i=0 to 8
    cell@[i]=[]
    for j=0 to 10
      cell@[i][j]=0
    next
  next
  return cell@
end function

// セル内容を表示
procedure viewCell cell@
  cls 1
  for j=0 to 8
    total=0
    for i=0 to 6
      total=total+cell@[i][j]
    next
    cell@[7][j]=total
  next
  for i=0 to 8
    total=0
    for j=0 to 9
      total=total+cell@[i][j]
    next
    cell@[i][9]=total
  next
  for j=0 to 9
    for i=0 to 7
      locate i*5,j
      n=cell@[i][j]
      n$=str$(n)
      n$=left$(n$,min(len(n$),5))
      print n$;
    next
  next
end procedure

// マス目を表示
procedure drawGrid
  for j=0 to 9
    for i=0 to 7
      if i=7 or j=9 then
        box (i*80,j*16)-(i*80+79,j*16+15),15,1
      else
        box (i*80,j*16)-(i*80+79,j*16+15),15,9
      end if
    next
  next
end procedure

解説

2行目で表計算に使うための配列を用意します。表計算は縦横計算なので二次元配列を宣言します。

3行目で画面を消去しています。

4行目で表計算のマス目をグラフィック画面に表示するプロシージャを呼び出しています。

5行目で表計算の内容をテキスト画面に表示します。縦横の計算を行なってから表示しています。

8〜21行目が繰り返し(メインループ)になります。

9行目でクリック(タップ)された座標を変数に入れます。クリック(タップ)されていない場合は変数に-1が入ります。

10行目ではクリック(タップ)されたかどうかを調べています。クリック(タップ)された場合は以後の行が実行されます。

11,12行目でどのセルがクリック(タップ)されたかを計算しています。80はセルの横幅のピクセル数、16はセルの縦幅です。

13行目でクリック(タップ)されたセルが変更可能な場所かを調べています。合計を表示するセルは変更できないためです。

14行目ではクリック(タップ)されたセルをわかりやすくハイライトしています。

15行目で数値の入力を待ちます。

16行目でクリック(タップ)されたセルの色を元に戻しています。

17行目で入力された値をセルの配列に入れています。

18行目でセルの内容を再計算・再表示しています。

35行目以降がセルの内容を表示するプロシージャです。ここでは配列の値の合計値を求めセルに入れます。その後、セル全体の内容をテキスト画面に表示しています。

63行目からがセルのマス目を表示するプロシージャです。セルの数だけ塗りつぶされた四角形を描きます。なお、合計値を表示するセルは分かりやすくするため若干背景色を変えるようにしています。