◎正当な理由による書き込みの削除について:      生島英之とみられる方へ:

エクセル指向プログラミング


動画、画像抽出 || この掲示板へ 類似スレ 掲示板一覧 人気スレ 動画人気順

このスレへの固定リンク: http://5chb.net/r/tech/1711440779/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

1デフォルトの名無しさん
2024/03/26(火) 17:12:59.08ID:e/0sucGI
エクセル指向プログラミング(Excel Oriented Programming、EOP)は、ノンプログラマにとって最も直感的で習得が容易なプログラミングスタイルです。

ブログラマは難解な言語機能を覚えることなく、拡張が容易なソフトウェアを、簡単に開発することができます。

プログラムのすべてのデータは長さ可変の二次元配列の上で管理されます。この二次元配列を「シート」といい、配列の各要素を「セル」と言います。

シートはシングルトンオブジェクトです。すなわち、EOPでは単一のグローバル変数を上書きすることでプログラムの状態を更新します。

構造化データはすべて配列で表します。データ型などのスキーマはありません。どの行・どの列がなんのデータを表すのかは、その場その場で変更することができます。

行方向または列方向に連続するセルが一つのデータ構造を表します。したがって、構造化データの読み取りは

while(cell) {
// do something
cell = sheet[r][c++];
}

のように書けます。使い終わった領域は0またはnullで初期化しておきます。

ネストされた構造化データは、セルへの参照をセルに書き込みます。たとえば、多重配列を表現する場合は、ネストされた配列の先頭要素の座標をセルに書き込みます。

EOPでは、プログラマは好きなときに好きなデータ構造を使用することができます。既存のプログラミングスタイルのように、データ型やメソッドのシグネチャに、データ構造が制限されることがありません。
2デフォルトの名無しさん
2024/03/26(火) 17:38:31.01ID:e/0sucGI
例として、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:17.08ID:e/0sucGI
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:43.98ID:e/0sucGI
べつの処理をした後、元の場所に戻ってきたい場合はどうすればいいでしょうか?スタックを使えば簡単にできます。

以下は、データの合計値を求めるプログラムです。ただし、現在のセルが配列の場合は、その配列の合計値を求めます。データは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:58.02ID:e/0sucGI
訂正:

r++やc++と書いてあるところ
すべて++r, ++cです
6デフォルトの名無しさん
2024/03/26(火) 19:59:23.04ID:e/0sucGI
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];
}
7デフォルトの名無しさん
2024/03/27(水) 05:40:00.84ID:Ln/fAIz6
言語何使ってんのコレ
8デフォルトの名無しさん
2024/03/27(水) 14:53:16.09ID:8k2YrkW2
なんかオライリーみたいな導入
9デフォルトの名無しさん
2024/03/29(金) 14:55:32.56ID:hQjfrr6D
ID:e/0sucGI
こいつろくにプログラミングしたことないんだろうなぁ
10デフォルトの名無しさん
2024/03/29(金) 16:33:00.75ID:4yVHOK9w
ネタスレにマジレス
11デフォルトの名無しさん
2024/03/30(土) 19:46:50.28ID:lpdJhGw+
あれだけ連投してるのにネタスレでごまかすのは無理でしょ
まぁ足りない頭を絞って書いたものを正論で潰されるのは可哀相っちゃ可哀相だけど…
12デフォルトの名無しさん
2024/03/30(土) 22:25:41.35ID:2vvOizF3
うわぁ……
13デフォルトの名無しさん
2024/03/31(日) 05:30:13.50ID:mCr6Yy4A
>>1があれ以降書き込んでないのがお察し
どんな反応求めてたんだろう
14デフォルトの名無しさん
2024/03/31(日) 10:58:19.19ID:bHunl/8X
>>11が心配

「連投してるからネタスレでない」というロジックが意味不明だし
「正論」とやらがどこに書かれているのかもわからない
15デフォルトの名無しさん
2024/03/31(日) 11:12:10.16ID:AFDVA+e4
一次元の配列指向プログラミングならセルの参照は1個のパラメータだけで済むからより効率的
16デフォルトの名無しさん
2024/04/02(火) 15:32:40.58ID:CQMIJaVM
1次元配列ならジャンプ先のアドレスの指定は変数1個で済む
17デフォルトの名無しさん
2024/04/02(火) 15:41:03.62ID:x3qRw97u
多次元配列だって計算すれば同じだよ
変数一つで実現できる
逆に一次元配列を多次元配列とみなして使う方法だってあるんだし
18デフォルトの名無しさん
2024/04/02(火) 19:06:12.99ID:5dwwFNXN
C言語なら、ポインタ型変数1個だけ使えばいいな
19デフォルトの名無しさん
2024/04/02(火) 19:09:22.44ID:7yjlHQas
>>18
ポインタ理解できてないだろ
20デフォルトの名無しさん
2024/04/02(火) 19:10:55.75ID:5dwwFNXN
>>19
21デフォルトの名無しさん
2024/04/02(火) 19:18:03.35ID:JgXYUviJ
>>20
ポインタ型変数一つじゃ実現不可って話
22デフォルトの名無しさん
2024/04/02(火) 19:22:08.05ID:kERS+9TD
・配列の先頭アドレスを指すポインタ
・行数,列数を表す符号なし整数
・↑をまとめた構造体
23デフォルトの名無しさん
2024/04/02(火) 19:38:20.00ID:JgXYUviJ
それをポインタ型変数1個って言うか?
24デフォルトの名無しさん
2024/04/02(火) 19:51:06.70ID:oY83wibz
>>21
なぜ?
25デフォルトの名無しさん
2024/04/02(火) 19:55:08.71ID:vNvRaytj
ネタスレで、そのネタを下回る知能のやつがああだこうだ言っているという地獄
26デフォルトの名無しさん
2024/04/02(火) 19:57:07.31ID:GZPLkX8A
ポインタ1個と即値だけでいけるがな
27デフォルトの名無しさん
2024/04/02(火) 20:11:35.84ID:abcHw/BD
スタックポインタはいるだろ
28デフォルトの名無しさん
2024/04/02(火) 20:20:15.30ID:rNuJc/A1
スタックは要るな
29デフォルトの名無しさん
2024/04/02(火) 20:22:17.68ID:rNuJc/A1
いや、いらんわ
戻り先のアドレスは紙にでも書いときゃいい
30デフォルトの名無しさん
2024/04/02(火) 20:33:07.24ID:edguWIiV
以外に伸びたなとおもったら違う方向か
31デフォルトの名無しさん
2024/04/03(水) 11:24:36.72ID:07nBP01A
エクセルでプログラムとかメンテナンス性が最悪だからおすすめしない
32デフォルトの名無しさん
2024/04/04(木) 03:34:46.18ID:GlxXdEjq
ぬるぽ
33デフォルトの名無しさん
2024/04/04(木) 03:48:45.01ID:2O67KOQT
データの読み書きは

while(cell = *p++) {
// do something
}

データ構造を扱いたい時は
1つのオブジェクトがいくつのフィールドを持つか決めておき

while(cell = *(p + size)) {
// do something
}

のようにする

途中で構造を変えたくなった時のために、
sizeは3つか4つ余分に確保しておくのがベストプラクティス

データ構造を入れ子にする場合や、サブルーチンを使う場合は、スタックを使う

C言語とか忘れた
34デフォルトの名無しさん
2024/04/04(木) 11:19:31.47ID:AaDBa930
つまんねーC言語モドキじゃなくて
Excel4マクロみたいに独自性を出していこうよ

lud20250221173607
このスレへの固定リンク: http://5chb.net/r/tech/1711440779/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

TOPへ TOPへ  

このエントリをはてなブックマークに追加現在登録者数177 ブックマークへ


全掲示板一覧 この掲示板へ 人気スレ | Youtube 動画 >50 >100 >200 >300 >500 >1000枚 新着画像

 ↓「エクセル指向プログラミング 」を見た人も見ています:
数学はオブジェクト指向プログラミングのように学べるか?
はじめてゲームプログラミングとかいうダークホースwwwwwwwwwwwww
【プログラミング部】 厚生省のエクセルVBAのコードが凄すぎると話題に! どうやってこんなコード思いつくんだ
動画プログラミング
プログラミングをしたい件
プログラミング言語C#の欠点
プログラミングの好きになり方
プログラミング初心者あるある
linuxのプログラミング環境
プログラミングがわからなすぎる
Q# 【量子プログラミング】
プログラミングについて教えてくれ
プログラミング言語Pythonの弱点
なんJプログラミング&電子工作部
競技プログラミングをしないか?
プログラミングのお題スレ Part18
プログラミングの課題ができない.....
プログラミングの独占資格化を!!!
AIプログラミング課金指揮者の比較
中2でプログラミングやってるけど質問ある?
競技プログラミング総合スレ 63
【教育】子がプログラミング 悩む親
42Tokyo【プログラミング学校】
プログラミングを勉強したいんだけど
天才以外お断りプログラミング言語
プログラミングはRyzenでやってもエエ?
関西私大でプログラミング学べる学部ある所
小学校でプログラミング教えたりしたい
Macでプログラミングしてるやつwwww
プログラミング言語、次は何を学ぶ?
プログラミングのお題スレ Part7
競技プログラミングは役に立たない
中1の5割以上 「プログラミングできる」
プログラミングって若い頃しかやらないよな
プログラミングにおける偉大な発明は?
プログラミング初心者はC#から学ぼう
プログラミングをお勉強してる大学生なんだが
プログラミングでの武勇伝語ろうぜw
Google NaCl プログラミング 2mol
プログラミング言語Pythonの最大の欠点
お前らとプログラミングの勉強したい
プログラミングを覚えるのに重要な十ヶ条
副業でプログラミングやりたいんだが・・・
ヒッキーのまったりプログラミングするスレ
プログラミングを使った仕事してる人に質問
普通科高校高2プログラミング系志望
最近プログラミングするのが苦痛になってきた
プログラミングって難しすぎじゃねーか?
プログラミングスクールの発表会出たくない
SEってプログラミングやらない何でも屋なんでしょ?
プログラミング言語を自然言語で例えたい
プログラミングの勉強してるんだけどさ……
子供向けプログラミング言語ビスケット
プログラミング言語バトルロワイヤル
一番難易度が高いプログラミング言語は?
プログラミングできるようになるまで頑張るレス
小学生にプログラミングより前に教えること
プログラミングを習得したけど作りたいものがない
【衝撃】中1の5割以上「プログラミングできる」
【教育】「英語の習得」とプログラミングの意外な関係
大東亜帝国でプログラミング学べる学部ある大学
プログラミングの質問ってどこですればいいの?
競技プログラミングにハマるプログラマのスレ 71
競技プログラミングにハマるプログラマのスレ 75
プログラミング未経験だけど人工知能作りたい
プログラミングスクール講師だけ質問ある?
16:33:15 up 66 days, 17:32, 0 users, load average: 7.78, 7.51, 7.81

in 1.3572428226471 sec @1.3572428226471@0b7 on 062305