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

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


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

このスレへの固定リンク: 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枚 新着画像

 ↓「エクセル指向プログラミング 」を見た人も見ています:
プログラマに聞きたいんだけどオブジェクト指向ってクソじゃね?
ドローンでハゲを見つけ、指向性マイクで本人だけに伝えるプロジェクト「カミノオツゲ」
【教育】子がプログラミング 悩む親
Google NaCl プログラミング 2mol
WPF(.NET, WinUI) GUIプログラミング Part30
WPF(.NET, WinUI) GUIプログラミング Part27
WPF(.NET4.x, .NET Core) GUIプログラミング Part24
【コング】1位プログラミング 2位FF7 3位モンハン 4位ギルティギア 5位ラチェクラ
【プログラミング】業務で求められるプログラミング言語ランキング 1位はPythonを抑えてなんとあの
指向性スピーカーに詳しいやつきて
オブジェクト指向は無駄なもの。俺が理解出来ないからね
オブジェクト指向ってクソじゃねぇかよPart3
「オブジェクト指向」についてわかりやすく語れ!
オブジェクト指向、DIとService Locatorの違いを教えて4
指向性エネルギー兵器でテロ計画?💀3
指向性エネルギー兵器テロ計画?黒幕は誰だ?5
Perlのオブジェクト指向って無理やり実装だなw
性的指向の暴露 禁止する条例可決、都道府県で初 三重 [峠★]
性指向暴露禁止条例を可決、三重 都道府県で初、4月施行 [蚤の市★]
三重県、性的指向暴露禁止で条例案 都道府県では初 4月施行目指す [蚤の市★]
【アウティング】性的指向を勝手に暴露された男性 企業側が謝罪、解決金で異例の和解 [ばーど★]
【IT】Twitterルール改定 人種や性的指向へのヘイト行為や脅迫行為など、禁止事項が詳細に
【悲報】市民連合「社会を変えたい(自分たちの思い通りになる社会に)」→テロ指向でドン引きされる
長野 辰野町  「自分のことをさらけ出すな」など性的指向発言制限は不適切  報告書公表 [少考さん★]
【戦況】ウクライナ海兵隊が東部ドネツク州で集落解放 メリトポリを指向する攻撃軸 映像を公開 (動画あり) [ごまカンパチ★]
【LGBT】フェミニスト「“性的指向”ばかり特別扱いして“性的嗜好”を差別するな。ロリコンも等しく悩み生きる人間じゃないか」
【日韓】 「未来指向的韓日関係築くには、日本人が韓国の反日感情をよく知ることから始めねばならない」~添谷芳秀、慶応大教授[04/26]
エクセルってマスの中の均等割付出来ないんだな。昔のワープロなら出来たのに。
【グラビア】桐山瑠衣 新作の「ベッドのシーンはノーブラで」  デビュー10周年でセルフプロデュースにも意欲![04/07] ©bbspink.com
【セルフインテリア講義】キムチ作り・ペット矯正行動療法…ソウル市「1人世帯プログラム」始動=韓国 [10/6] [右大臣・大ちゃん之弼★]
プログラミングの勉強法
OpenMPプログラミング
プログラミングで何か書く
IRIX上でのプログラミング
プログラミングを教えてくれ
プログラミング言語 Scala 11冊目
情報工学科でプログラミング苦手な人
■日商プログラミング検定■
狼プログラミング習得部
プログラミングの課題ができない.....
Macがプログラミングに向いてる理由
プログラミングのお題スレ Part18
中2でプログラミングやってるけど質問ある?
linuxのプログラミング環境
プログラミング初心者あるある
小学校でプログラミング教えたりしたい
安価でプログラミングの教科書を作るスレ
競技プログラミングをしないか?
なんJプログラミング&電子工作部
プログラミングを始めようと思ってる
関西私大でプログラミング学べる学部ある所
42Tokyo【プログラミング学校】
ゲームのプログラミングできる人募集
プログラミング言語 Scala 12冊目
プログラミングって若い頃しかやらないよな
中1の5割以上 「プログラミングできる」
UNIXプログラミング質問すれ Part8
プログラミングの独占資格化を!!!
就職以外でプログラミングで稼ぐ方法
プログラミング言語、次は何を学ぶ?
プログラミングのお題スレ Part7
競技プログラミングは役に立たない
プログラミングの勉強をしようと思うんだが
副業でプログラミングやりたいんだが・・・
12:37:20 up 52 days, 13:36, 0 users, load average: 7.91, 7.58, 7.32

in 1.2369470596313 sec @1.2369470596313@0b7 on 060901