エクセル指向プログラミング (34レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
1(1): 2024/03/26(火)17:12 ID:e/0sucGI(1/6) AAS
 エクセル指向プログラミング(Excel Oriented Programming、EOP)は、ノンプログラマにとって最も直感的で習得が容易なプログラミングスタイルです。 
  
 ブログラマは難解な言語機能を覚えることなく、拡張が容易なソフトウェアを、簡単に開発することができます。 
  
 プログラムのすべてのデータは長さ可変の二次元配列の上で管理されます。この二次元配列を「シート」といい、配列の各要素を「セル」と言います。 
  
 シートはシングルトンオブジェクトです。すなわち、EOPでは単一のグローバル変数を上書きすることでプログラムの状態を更新します。 
  
 構造化データはすべて配列で表します。データ型などのスキーマはありません。どの行・どの列がなんのデータを表すのかは、その場その場で変更することができます。 
  
 行方向または列方向に連続するセルが一つのデータ構造を表します。したがって、構造化データの読み取りは 
  
 while(cell) { 
   // do something 
   cell = sheet[r][c++]; 
 } 
  
 のように書けます。使い終わった領域は0またはnullで初期化しておきます。 
  
 ネストされた構造化データは、セルへの参照をセルに書き込みます。たとえば、多重配列を表現する場合は、ネストされた配列の先頭要素の座標をセルに書き込みます。 
  
 EOPでは、プログラマは好きなときに好きなデータ構造を使用することができます。既存のプログラミングスタイルのように、データ型やメソッドのシグネチャに、データ構造が制限されることがありません。 
2: 2024/03/26(火)17:38 ID:e/0sucGI(2/6) AAS
 例として、nameとage属性をもったデータ構造を読み取るプログラムを書いてみましょう。 
  
 r = 0; 
 name = 0; 
 age = 1; 
 while(cell) { 
   print("name: " + sheet[r][name] + ", age: " + sheet[r][age]); 
   cell = sheet[r++][name]; 
 } 
  
 このように、EOPでは構造体やクラスのような難解な機能を使わずとも、配列とループだけでデータ構造を操作することができます。 
  
 特筆すべきことは、EOPではデータ構造は使用時に自由に変更できます。もし、上のデータ構造に新たな属性sexが必要であれば、単に追加すればよいのです。 
  
 MALE = 1; 
 FEMALE = 2; 
 sex = 2; 
 sheet[0][sex] = MALE; 
 sheet[1][sex] = FEMALE; 
3: 2024/03/26(火)19:22 ID:e/0sucGI(3/6) AAS
 EOPでは関数は使いません。別の処理に移動したい場合は、単にジャンプ先のセルの座標を指定すればよいのです。 
  
 以下は、すごろくを1マスずつ巡回し、BONUSマスならば2つ進め、PENALTYマスならば2つ戻り、巡回したマスをカウントするプログラムです。一度発動したボーナス/ペナルティは二回目からは無効になります。 
  
 r = 0; 
 c = 0; 
 cnt = 0 
 while(cell) { 
   cnt++; 
   if(cell == "BONUS") { 
     cell = "VISITED"; 
     c += 2; 
   } else if(cell == "PENALTY") { 
     cell = "VISITED"; 
     c -= 2; 
   } else { 
     c += 1; 
   } 
   cell = sheet[r][c]; 
 } 
4: 2024/03/26(火)19:23 ID:e/0sucGI(4/6) AAS
 べつの処理をした後、元の場所に戻ってきたい場合はどうすればいいでしょうか?スタックを使えば簡単にできます。 
  
 以下は、データの合計値を求めるプログラムです。ただし、現在のセルが配列の場合は、その配列の合計値を求めます。データは0列目が数値または配列宣言、配列宣言がされた時は1列目がジャンプ先の行番号、2列目が列番号です。 
  
 r = 0; data = 0; data_r = 1; data_c = 2; 
 stack = 0; stack_r = 3; stack_c = 4; 
 sum = 0; 
 while(cell) { 
   if (cell == "ARRAY") { 
     stack++; 
     sheet[stack][stack_r] = r; 
     sheet[stack][stack_c] = data; 
     tmp_r = r; 
     r = sheet[tmp_r][data_r]; 
     data = sheet[tmp_r][data_c]; 
     data_r = data + 1; 
     data_c = data + 2; 
     cell = sheet[r][data]; 
   } else { 
     sum += cell; 
     cell = sheet[r++][data]; 
   } 
   if (!cell) { 
     if (stack) { 
       r = sheet[stack][stack_r]; 
       data = sheet[stack][stack_c]; 
       data_r = data + 1; 
       data_c = data + 2; 
       stack--; 
     } 
   } 
 } 
5: 2024/03/26(火)19:26 ID:e/0sucGI(5/6) AAS
 訂正:  
  
 r++やc++と書いてあるところ 
 すべて++r, ++cです 
6: 2024/03/26(火)19:59 ID:e/0sucGI(6/6) AAS
 EOPでは、シートを用いてデータ構造をシンプルかつ柔軟に扱えるだけではなく、シートは手続きを表現することもできます 
  
 以下のプログラムは、4つのコマンド 
  
 ADD 
 PRINT 
  
 を持ちます 
 ADDを呼ぶと、引数の数が合計値に加算されます 
 PRINTを呼ぶと、現在の合計値が表示されます 
  
 r = 0; 
 sum = 0; 
 while(cell) { 
   if (cell == "ADD") { 
     sum += sheet[r][cmd + 1]; 
   } 
   if (cell =="PRINT") { 
    print(sheet[r][cmd + 1]);  
   } 
   cell = sheet[++r][cmd]; 
 } 
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.278s*