プチコン3号 SmileBASIC コミュニティトピックだにえる haru2016nen2017/07/02 16:44:49質問第三章/立ちはだかる参照と 賛賞される山椒魚!参照について教えてケロ。 「扱いが難しくてバグのように 扱われている'仕様'」だと 思ってるケロ。 文字列操作する時に一度遭遇して、 その時はCOPYでその場を やり過ごしたんだけど、、、 配列の場合はどうしたらいいケロ? とりあえず打開策を 知れればいいんだけど、参照を 有効活用するようなプログラムが あれば、それも教えてほしいケロ。11そうだね 11返信プレイ済み2017/11/03 17:22:12に取得
プチコン3号 SmileBASIC コミュニティ返信[1]親投稿こういち driton2017/7/2 16:54配列も基本COPYで大丈夫だと思います。 参照を有効活用するプログラムと言えばソートとかですね。画面写真は遅いことで知られているスローソートです。そもそもプチコンには標準でソートが用意されていますが。2そうだね プレイ済み2017/11/03 17:22:12に取得
プチコン3号 SmileBASIC コミュニティ返信[2]親投稿だにえる haru2016nen2017/7/2 17:07う~ん…。 テスト用のプログラムだと COPYでいけたんですけど、、 実際に利用するプログラムだと COPYでも変わらない…。 うむむ。 0そうだね プレイ済み2017/11/03 17:22:12に取得
プチコン3号 SmileBASIC コミュニティ返信[3]親投稿MIKI ifconfig2017/7/2 20:22連番がふられたロッカーがたくさん並んでいる。 プチコンの配列はこのロッカーの一部を使えるものです。 var a[8], b[8] という文を実行すると、 a という変数には例えばロッカー番号1000が設定される。 ロッカー1000番から1007番までが配列aとして使えるってことね。 b には続く1008番が設定され、配列bは1008番から1015番まで使える。 ここで a=b という命令を実行すると、aは1008番になる。 配列aもbも同じロッカーを共用するってことね。 def へ引数として渡す場合も、仮引数に対してこの代入と同じことが起きます。 もし a=b ではなく copy a,b を使えば、aは1000番のまま、配列bの内容が1000番~1007番にコピーされます。2そうだね プレイ済み2017/11/03 17:22:12に取得
プチコン3号 SmileBASIC コミュニティ返信[4]親投稿MIKI ifconfig2017/7/2 20:30山椒の有効活用方法としては、焼き魚・唐揚げ・麺類などに適量ふりかけると、大変良い香りが楽しめます。 ・・・ではなくて、 例えばテキストファイル全体を文字列として読んで、一行ずつ処理したい場合、 def gets(s$) が、 - 戻り値としては s$ の最初の1行を返し、 - かつ引数の s$ からは最初の1行がなくなると ↓こんな感じで便利に使えるのよね。 test$=load("txt:foo",0) repeat line$=gets(s$) ' 一行の処理 until line$=="" '全部処理した 3そうだね プレイ済み2017/11/03 17:22:12に取得
プチコン3号 SmileBASIC コミュニティ返信[5]親投稿だにえる haru2016nen2017/7/2 22:09なるほど。 参照の動きは分かりました。 けど、、、んー、 なんかSORT,RSORTの時に 参照されてるみたいです。1そうだね プレイ済み2017/11/03 17:22:12に取得
プチコン3号 SmileBASIC コミュニティ返信[6]親投稿MIKI ifconfig2017/7/3 0:00配列の場合、組み込み関数・命令であっても、引数として渡すのは参照ですよ。 sort a で sort に渡されるのは「ロッカー番号1000番」という値。 配列全体をコピーして sort に渡すわけではありません。 > SORT,RSORTの時に参照されてるみたい だにえるさんの期待と異なる動きをするってことですね? 理想の動作: 現実の動作: このあたりを詳しく説明してもらえるといいかもしれない 4そうだね プレイ済み2017/11/03 17:22:12に取得
プチコン3号 SmileBASIC コミュニティ返信[7]親投稿たんじぇ zmxtan2017/7/3 12:51すき屋の うな牛(うなぎ+牛丼) の小分けの山椒パックに2つ付けられて1つ余ってどうしような今日この頃。 配列変数を [] なしで使うと参照になって、動作はMIKIさんの説明のとおり。 写真のコードだと 10行目の A%=B% で 3行目の READ A%,@D で読み込まれたデータはプログラム中からは誰もさわれない状態になっていて 11行目の RSORT でB%の参照先の配列がソートされて、同じアドレス(MIKIさんの説明のロッカー番号)の A%もソートされたように見えちゃっているという。 テストプログラムで動いて実際のプログラムで動かないのは、たぶんどこかで参照指定がまちがってる感じがします。3そうだね プレイ済み2017/11/03 17:22:12に取得
プチコン3号 SmileBASIC コミュニティ返信[8]親投稿たんじぇ zmxtan2017/7/3 12:55参照が使われる理由としては、配列1000個を関数引数などにわたされたら、1000個も関数の仮引数にコピーしなくちゃいけなくて大変なので、 配列1000個の先頭のアドレス(と配列個数の2個)だけ渡せばそこから1000個処理しても同じ事出来るので、ならば配列の方がデータ渡すの少なくて動作早くなる、という感じです。 文字列も文字の配列なのでだいたい同じ仕組みなのです。4そうだね プレイ済み2017/11/03 17:22:12に取得
プチコン3号 SmileBASIC コミュニティ返信[9]親投稿だにえる haru2016nen2017/7/3 16:05解決しました! ありがとうございます。 何をやりたかったかと言うと、 最近僕が作ってるアレ(投稿参照)で 描画する文字を反転させたかった んですよねー。1そうだね プレイ済み2017/11/03 17:22:12に取得
プチコン3号 SmileBASIC コミュニティ返信[10]親投稿だにえる haru2016nen2017/7/3 16:09これがテスト用のプログラムです。 23・25行目のSORTやCOPYの箇所で 参照されてると勘違いしていたんですが、 13行目で=を使っていたことが 原因でしたケロ。1そうだね プレイ済み2017/11/03 17:22:12に取得