1 名前:デフォルトの名無しさん [02/01/02 01:46] Pascal の初心者用の質問・相談所 コンソールのみ。GUI は扱いません。 「Cをやったけど難しいので、やっぱりPascalからぼちぼちやるぅ」という人向け。 コンパイラダウンロード www.vector.co.jp/vpack/filearea/win95/prog/pascal/index.html ちなみにDelphiは 「モナーの *やさしい* Delphi質問スレ」 pc.2ch.net/test/read.cgi/tech/1003113413/
152 名前:148 mailto:sage [02/02/05 12:44] 棘の道だなと思うけど、それが好きなんだと言われたらしょうがない話しだからもう言わない ワンダーウイッチ開発をTPで出来るように環境を整えるとかの方向なら面白いとは思うんだけど・・・
153 名前:デフォルトの名無しさん mailto:sage [02/02/05 13:08] >>150 486の33Mを生かしたいなら kylixやればいいのに 486では開発出来ないだろうけど、作った実行ファイルは実行出来るだろうに
154 名前:ネタsage mailto:sage [02/02/05 13:25] >>142 ♪神サマありがと〜お、ボクにともだちをくれ〜て〜〜〜。 ♪パスカルに〜あわせてくれて、パスカルに〜あわせてくれて ♪パスカルに〜あわせてくれて、パスカ〜ルにあわせてく〜れ〜〜て〜〜
155 名前:デフォルトの名無しさん mailto:sage [02/02/05 13:39] 2ch だしぃ... どれが誰だかわからないけど >119 :デフォルトの名無しさん :02/02/02 00:00 >だってDelphiなんて、GUIだとか余計なことがイパーイついてて本質が見えないじゃないか。 ってのがあるから、「Graph/CRT でごそごそやるくらいなら Delphi つかったら?」 といっているの。いまどき SVGA どまりのグラフィクスでもないでしょ?
156 名前:ふむふむ(納得) [02/02/05 13:49] >154 ♪ごめんね素直じゃなくって。夢の中なら言える。 ♪思考回路はショート寸前。あなたに会いたいよ。 「美少女戦士セーラー・パスカル」 ヘジに替わってデバッグよ! >153 kylixはFreeBSDでは動かないのではないかと思います。 私はlinuxよりFreeBSD派です。(ごめんなさい) それより486でlinuxやFreeBSDを使うということはXはあきらめろ ということになりそうです。
157 名前:デフォルトの名無しさん mailto:sage [02/02/05 14:06] で、結局、何をしたいのか?
158 名前:デフォルトの名無しさん mailto:sage [02/02/05 18:46] >>157 Delphi以外でPascalの勉強だろ?
159 名前:ふむふむ(納得) [02/02/05 21:19] ちがうってば DelphiでもTPでもFPでも、とにかく手持ちの処理系を使った Pascalの学習さ。
160 名前:デフォルトの名無しさん mailto:sage [02/02/06 00:22] Graph ユニットや CRT ユニットの使い方を学ぶのが Pascal の学習か?と聞いているんだよ。
161 名前:デフォルトの名無しさん mailto:sage [02/02/06 01:18] それは一つの手段でしょ. なんでそんなに突っかかるのか小一時間(略
162 名前:デフォルトの名無しさん mailto:sage [02/02/06 07:58] Pascalは、処理系を作るのが学習です。
163 名前:デフォルトの名無しさん [02/02/06 08:06] >140 win2000のコンソール画面(JPモード)では文字化けします。 対策はやっぱり、旧Winと文字コードの取り扱いがちがうから無理でしょうか?
164 名前:ヒロシ [02/02/06 18:57] ⊂(□ー□⊂⌒`つ≡≡≡≡≡≡<ヒロシ(164)ゲト!!!
165 名前:アライグマPascal [02/02/15 12:00] 今、PascalプログラミングのHPを作っています。 昔のTurboPascalを思い出す懐かしいやつです。 今年の8月頃Openの予定です。
166 名前:424 [02/02/15 12:17] なんかフリーのSRPG作成ツール無い? (SRC以外で) ガチャポン戦士3作りたくなった
167 名前:424 [02/02/15 12:18] pascal板かここ・・・ すいません、逝ってきます。
168 名前:デフォルトの名無しさん [02/02/15 15:07] 「PASCAL でガチャポン戦士をつくるうっっ!!」 この壮大な計画を遂行するため、424は立ち上がった、、、 歴史は動き始めた、、、
169 名前:424 [02/02/15 15:21] ツールが見つかりません。 逝ってきます。
170 名前:アライグマPascal [02/02/18 10:01] 今ちょこちょこっとHPをつくっています。実はOpenしたのですが、まだ コンテンツが激貧なのでURLは秘密です。古いPascalの簡単なサンプルを 公開・保存する場にしたいと思っています。
171 名前:デフォルトの名無しさん mailto:sage [02/02/18 13:58] 確か、フランスのボーランドサイトから、仏語版のTP7がダウンできるはず(FREE) NECRT.TPU という、CRT互換unitをダウンすれば、日本語だって出力可能 おいらは統合環境は使わないから、これで問題なし
172 名前:デフォルトの名無しさん mailto:sage [02/02/18 23:37] >>170 楽しみにしているぞゴルァ。 >>171 フランスのBorlandからわけのわからないメールが届くようになるという 諸刃の剣。
173 名前:アライグマPascal [02/02/19 08:18] たいへん。Dev-PascalのURLが使えなくなりました。移動したのか? それともなくなったのか?
174 名前:アライグマPascal mailto:sage [02/02/23 01:09] 復活したもようですね。
175 名前:デフォルトの名無しさん mailto:sage [02/02/23 01:47] >>145 「ヘルプを見て下さい」ばかりだと、このスレ意味なしだと思いません? コンソールアプリにこだわりながら、なおかつ、TCanvas を論じている こと自体に無理があるのでは?
176 名前:アライグマPascal [02/02/23 23:38] 本家からFreePascalをダウンロードして、エディタはCPadあたりを 利用して以下のソースをコンパイル。 program test; uses Graph; var GraphDriver:smallint; begin GraphDriver := Detect; InitGraph(GraphDriver,30012,''); SetColor(4); circle(300,200,100); readln(); CloseGraph; end. 画面に赤い円が表示されたら成功。(懐かしいでしょ)
177 名前:デフォルトの名無しさん mailto:sage [02/02/23 23:57] 赤い玉が出てくるの?
178 名前:デフォルトの名無しさん [02/02/23 23:58] >>5 いまさらなつっこみで悪いんだが・・・ absolute変数があったり、 「Mem[****] := ****」とか「Port[**] := **」なんてことができたり inline手続きがあったりするので PascalはCよりもっと危険なのでは? Cじゃメモリの番地を直接指定して書き込みするなんてことはできない ポインタを介して間接的なやりかたでやらねばならないぶん、 Pascalよりも安全性はほんの少し高いとも言えないか? Delphiはともかく、DOS時代のTurbo Pascalなんて、 ハードウェアを直接いじるような目的で使われることが多かったし、 実際、procedureの中身はアセンブラソースをasmとendで括っただけなんていう ほとんど高級アセンブラ的なPascalの使い方をしてるソフトが 数多くまかり通ってたものだが
179 名前:デフォルトの名無しさん mailto:sage [02/02/24 00:20] >178 >PascalはCよりもっと危険なのでは? なんでやねん。 危険なのは(言語を問わず)ハードを直接操作することでしょ。 高級なことやりたいんなら危険専用の命令である inline/absolute/asm使わなければそれで十分安全性を確保できる。 それに対してCは高級・低級ともにポインタ使わざるを得ないから 高級な目的で書かれたコードですら安全とはいいかねる。
180 名前:デフォルトの名無しさん mailto:sage [02/02/24 03:12] 178 の理屈だと XXX 言語はインラインアセンブラがあるから、特権命令も記述できるので 一行でハングアップするコードがかける。危険! ということもできそうだが、さすがにこれには同意しまい?
181 名前:アライグマPascal [02/02/24 06:25] したらばBBSでもおねがいしましたが、みなさん、昔のBASICゲームプログラムの ソースをもっていませんか?ベーマガに載っていた、1画面プログラムみたいなものです。 音やスプライト機能はできないと思いますが、なんとかPascalで書き直してみたいと 思っています。ここにソースをアップしてみんなで考えたら、勉強のネタとして おもしろいと思います。
182 名前:デフォルトの名無しさん mailto:sage [02/02/25 10:24] 1 COLOR15,1,1:SCREEN5,1,0:R=RND(-14):FOR I=0TO212:P=PEEK(I+800):PSET(P,I),IMOD3+2 :NEXT:FORI=0TO7:VPOKE30721+I,255:VPOKE30 736+I,24:NEXT:OPEN"GRP:"AS1:SOUND6,18 2 DEFFNS=RND(1)*175+25:DEFFNR=(INT(RND(1 )*10)-5)/10:C=FNR:D=FNR:G=FNS:H=FNS:Y=99 3 LINE(E,200)-(E+20,212),1,BF:FORI=2TO4: COLOR=(I,0,I*2-2,I*2-1):CIRCLE(G-I,H-I), (6-I)*2,I:PAINT(G-I,H-I),I:NEXT:LINE(G,2 00)-(G+20,212),5,BF:SOUND7,183:X=120:E=G 4 S=STICK(0):A=(S>5ANDV>-8)-(S>1ANDS<5AN DV<8):B=((S=8ORS=1ORS=2)ANDW>-8)-(S>3AND S<7ANDW<8):V=V+A+C:W=W+B+D:X=X-V:Y=Y-W 5 VDP(24)=(Y+149)MOD255:PUTSPRITE0,(X,Y) ,10,0:PUTSPRITE2,(X,Y+B*9),ABS(B)*9,2 6 PUTSPRITE1,(X+A*14,Y+8),ABS(A)*9,1:IFP OINT(X+8,Y+18)=5THENN=N+1:BEEP:GOTO2 7 SOUND8,-(S>0)*13-(S/2=S\2)*2:IFX>4ANDX <238ANDY>-10ANDY<194THEN4ELSEFORI=0TO50 8 D=RND(1)*31:SOUND6,D:SOUND8,15:VDP(24) =ABS((Y+D\3+144)MOD256):NEXT:Y=Y+(Y<0)*Y 9 PSET(80,99):PRINT#1,"GAME OVER";N+1 10 SOUND8,0:FORI=0TO255STEP.5:Y=Y+I:Y=Y+ (Y>255)*Y:VDP(24)=Y:NEXT:POKE-869,1:RUN
183 名前:アライグマPascal [02/02/26 21:55] どうもありがとうございます、しかし・・・。 peek、poke、sound、vdpなど、移植が難しいコマンドが目白押しですね。 参考にさせていただきます。
184 名前:デフォルトの名無しさん [02/02/26 23:08] peek pokeは全然難しくない むしろBASICより簡単だ。メモリ配列に代入するだけで済む Mem[$****] := hoge hoge := Mem[$****] スプライトは無理だけど重ね合わせ処理で代用できるでしょ
185 名前:デフォルトの名無しさん mailto:sage [02/02/26 23:14] >むしろBASICより簡単だ。メモリ配列に代入するだけで済む その副作用は一切無視?
186 名前:デフォルトの名無しさん [02/02/26 23:50] >>185 BASICのプログラムをPascalで書き直すって言ってるんだから 元と同等のことをやればよいだけだろ BASICと同様の単純なシステム上の話じゃないのか? WindowsだのUNIXだのの上ではもちろんそんな乱暴なことは許されないけど、 単純なシステム上ならそういう乱暴な方法でしかゲームは書けないよ
187 名前:デフォルトの名無しさん mailto:sage [02/02/27 00:03] >182のBASICが動くパソコン用のPascalコンパイラなんてまずないだろ。 ハードが変わったらpeek,poke(Mem)の移植性なんて皆無。 大体MemってTP専用じゃなかったか?
188 名前:デフォルトの名無しさん [02/02/27 00:22] そうかbasicで組むときpeek使うと移植性が低くなるのか でもBASICなんてもともと移植性なんか関係無いし。
189 名前:デフォルトの名無しさん mailto:sage [02/02/27 00:34] >>182 MSX-BASICか・・・どこから引っ張り出してきたのやら。 って優花、ベーマガのサイトに行けばダウソ出来るじゃん。
190 名前:デフォルトの名無しさん [02/02/27 00:36] BASICが主流だった当時はそういう乱暴な方法でしかゲームは作れなかったんだから仕方ない TPだってMS-DOSがグラフィックやサウンドの機能をサポートしてなかったから やっぱりMem配列とかの乱暴な手段は必須だった
191 名前:がうがう ◆gu5gIE4w [02/02/28 20:46] 初めまして。このたび、HP200LXを手に入れたんですが、これと 同時にBorland C++ Suite を何故か、購入しちゃって、これにBP7が 入ってまして、pascalをやりたくなったんですが 1.HP200LXぐらいのスペックだとPASCALって厳しいですか? 2.CGAですが、付属のCGA.BGIでは、遅いと思われます? 3.Cと比べてどれくらいの実行速度なんでしょうか? 今から始めるので、何も分からなくて恥ずかしいのですがよかったら 上記のことを教えてくださいまし 勉強をかねて、上から線が降りてきてそれをよけるような簡単なものと 三角関数を使ったRPN電卓を作りたいなと思います。 このスレッドが消えませんように……
192 名前:デフォルトの名無しさん mailto:sage [02/02/28 20:51] >>191 1. 2. は知らんけど >3.Cと比べてどれくらいの実行速度なんでしょうか? 一般論としては引数を全部スタックに積むCより 3つまで(だったかな)ならCPUのレジスタを直接使うPASCALの方が より高速になりうる・・・と聞いたけど
193 名前:デフォルトの名無しさん mailto:sage [02/02/28 21:16] 2 CGA ってのは、アクセラレータも何もない時代だから、CPU パワーが そのまま描画性能につながる。はず BGI とかも、速度向上のがんばりようが無いので、速いか遅いかという議論には ならないな。描画空間の抽象化、という利点はあるけど。 実際には、ハードウェアのウェイトがいっぱいかかっているので、ある程度から 先は頭打ち。(HP200LX だと改造/改良されているかもしれないが)
194 名前:アライグマPascal [02/02/28 21:25] >191 HP200LX!!!!!!!!!!!!!!!!! のどから足が、鼻からちんちんが(失礼)飛び出すぐらい 欲しかった・・・。あいにくお金がなくて血が出るくらい 下唇をかみしめて泣きながら家に走って帰ったのを昨日の ように思い出します。<とても40歳が書く文章ではありませんな。 LSI-C試食版が動いているのをみたことがあります。それと TP6(PC98版、もちろん専用ライブラリは使わない)が動いているの もみたことがありますが、実行速度は変わらなかった気がします。
195 名前:がうがう ◆AGuK1Awo [02/02/28 22:20] >>192 質問にお答えしていただきありがとうございます!!感謝です 3つまでCPUのレジスタを直接扱うというようなPASCALプログラミングって どういう感じなのでしょうか? (#^_^#)話分からなくて…… 逆に言えば、この手法でくむように工夫すれば いいってことですよね?
196 名前:がうがう ◆AGuK1Awo [02/02/28 22:21] >>193 質問に答えていただきましてどうもです(^-^) 感謝いたします ふむ…… すべてはCPU次第なので、遅いから遅いのだということですね? これは、Cに限らないと言うことでしょうか? pascalそのものが早いのか、遅いのか知らないのでこういった質問になったんです あるファイルを名前を変えてコピーするという程度なら早いとは思うんですが。 186マシンではきついのかなあ? HP200LXだとライトスリープというのがありまして、コンパイルするのが遅い MSCだと途中でシャットオフになってしまうこともあるそうです。 もちろんライトスリープですから電源を入れれば何事もなく続きを始めるんですが。 そのライトスリープをさせないアプリもちゃんと存在します。 描画空間の抽象化とは何でしょうか? お教えくださると幸いです。 無学ですいません
197 名前:がうがう ◆AGuK1Awo [02/02/28 22:22] >>194 あははは(^-^) 今じゃヤフオクで3万程度で手に入りますよ。倍速8M程度を。 自分も少しずつ、ボーナスの度に買ってます。 最終的には15個欲しい…… 自分の場合はRPN電卓の部分も大きいというのがあるんですけどね(^-^) 質問答えてくださいましてどうもです。LSI-Cとそんなに実行速度は変わらない ですか! うれしいお話ですね。がんばろうと思えます!
198 名前:デフォルトの名無しさん mailto:sage [02/03/01 00:30] >>195 PASCALコンパイラが勝手にやってくれるから気にする必要はないよ 引数が3つ(?)までの関数や手続きではそのようにコンパイルされるということ
199 名前:がうがう ◆AGuK1Awo [02/03/02 12:21] >>198 そうですか(笑) だとしたらPASCALコンパイラ(Borlandのやつですね) は、優れているということですね。 PASCALで作られた有名な作品ってご存じですか? 自分は、「WTERM」ぐらいでしょうか? 皆さんも教えてくださると幸いです
200 名前:アライグマPascal [02/03/02 12:36] ゲームだったら,三大古典RPGの一つ「ウィザードリィ」ですね。
201 名前:デフォルトの名無しさん mailto:sage [02/03/02 13:23] >>200 そういうこと言うと、厨房どもがわらわら集まってくるので禁止
202 名前:がうがう ◆AGuK1Awo [02/03/02 17:42] >>200 あ、そうか…… APPLEでPASCALでしたね しかも独自IP(最初に起動するときに読む奴 IPじゃなかったでしょうか それともSIP?)で動くんですよね IBM/PC版は、そのエミュで動くと聞きます。 エミュの上にIPがあってその上でAPPLEのPASCALで書かれたWIZ が動くとか。
203 名前:がうがう ◆AGuK1Awo [02/03/02 17:42] >>201 ?? そうなんですか?
204 名前:デフォルトの名無しさん [02/03/02 18:02] パソコン版D&D(RPG)はTurboPascalだったらしい。 ファミコンに移植した人から聞いた。
205 名前:アライグマPascal [02/03/02 23:28] MS-DOSの最初のバージョンあたりはPascalだったはず。 すぐに全面的にCで書き直されたけど・・。
206 名前:デフォルトの名無しさん mailto:sage [02/03/02 23:31] Pascal最初にやるとCの構文が汚く見えるね。
207 名前:がうがう ◆AGuK1Awo [02/03/03 01:05] 昔BASICマガジンというのがあって、たくさんのソースが載っていて 大変勉強にもなったそうですね。 あるいは、MSXFANとかの投稿雑誌があって、MSXBASICでも 勉強になったとか…… ネットでPASCALのソースを探しているんですがなかなか(-.-;) ゲームに参考になる画像描写(CGA)で参考になるのがないですかね? とりあえず 植木屋 さんのウェブサイトにて CGAの参考を ttp://plaza10.mbn.or.jp/~uekiya/hp200lx/japanese/cga.html 人のソースが一番勉強になるんだけれどもなあ 初心者には(^O^;;
208 名前:がうがう ◆AGuK1Awo [02/03/03 01:06] >>204 お!あの D&Dもですか やったことはないんですが 名前だけは伺っています そのソース見てみたいなあ
209 名前:がうがう ◆AGuK1Awo [02/03/03 01:08] >>205 え! うっそぉでしょ? 本当にぃ! それしか言葉が出てこないぐらいびっくりしました う すげぇなあ。 1.0位の頃でしょうかね?
210 名前:がうがう ◆AGuK1Awo [02/03/03 01:12] 先ほどの植木屋さんところのCソースをプリントアウトして 眺めているんですが、何をどうしてどうするのかが(^O^;; あるテクニックが何のために必要か、それをどう有効に使うか 以前のCで何が書かれているのかさえも読めない(^O^;; Cの入門書を買ってきて一行ずつ解析していけば読めるかなあ? どこかにCGAでPASCALゲームソース公開されてませんか? 探しているんですが見つからない(^O^;;
211 名前:デフォルトの名無しさん [02/03/03 06:41] >210 CGAは対応しているかわかりませんがGrafx2というのがあります。 www-msi.ensil.unilim.fr/~maritaud/sunset/grafx2.html それと www.pascal-central.com/ はPascal使いであれば知らないと 似非パスカラーとして認定されてしまいます。:-)
212 名前:デフォルトの名無しさん [02/03/03 06:49] >211 すまぬ。自爆。画面モードと間違えた。(^^;
213 名前:デフォルトの名無しさん [02/03/03 21:04] >>199 まぐローダ
214 名前:デフォルトの名無しさん mailto:sage [02/03/03 23:29] >>199 Ngraph
215 名前:デフォルトの名無しさん mailto:sage [02/03/04 21:50] >211 あと、SWAGもな >Pascalerの心得
216 名前:デフォルトの名無しさん mailto:sage [02/03/05 11:17] >215 アドレスはここだ>SWAG ttp://www.gdsoft.com/swag/swag.html
217 名前:がうがう ◆AGuK1Awo [02/03/05 15:14] >>211 知りませんでした(^O^;; 似非パスカラー決定?(-.-;) 教えてくださって有り難うございます 翻訳にかけると妙な日本語で(笑)
218 名前:がうがう ◆AGuK1Awo [02/03/05 15:16] おっと 変なところで書きこんじまった(-.-;) 少しずつ読んでいこうと思います
219 名前:がうがう ◆AGuK1Awo [02/03/05 17:58] SWAGのサイトに行ってみようとしたんですが めちゃくちゃ重くないですか? ここ
220 名前:デフォルトの名無しさん [02/03/05 18:14] >>199 似非キース まぐぺ、まるぺ
221 名前:超初心者 [02/03/08 01:30] 正に今日pascal始めたばかりなのですが、いきなり詰まってます。 procedure A() … A();B();C(); … procedure B() … A();B();C(); … procedure C() … A();B();C(); … てな再帰を作りたかったんですけど、free pascalでコンパイルしたら Error: Identifier not found B〜 などと怒られてしまいました。 pascalではCの様なプロトタイプ宣言は出来ないんですか? それと、var a,b integerと宣言して a:=b/2としたら Hint: use DIV instead to get an integer result Error: Incompatible types: got "S80REAL" expected "LONGINT" と怒られてしまいました。 型変換はどうするのでしょう?
222 名前:デフォルトの名無しさん mailto:sage [02/03/08 01:32] forward
223 名前:デフォルトの名無しさん [02/03/08 05:01] >221 FreePascalにも型変換の概念はあるけど、それ以前の問題として Pascalでは整数型除算では「/」ではなく「div」を使わないと 文句を言われます。
224 名前:デフォルトの名無しさん mailto:sage [02/03/08 12:44] >>221 Hint: use DIV instead to get an integer result ↑これをちゃんと読みましょう
225 名前:デフォルトの名無しさん mailto:sage [02/03/09 02:40] >>221 実数は整数型変数に代入できない。 Round関数またはTrunc関数を使って整数に変換する。 だけど今のケースは>>223 の言う通りdivを使うべきだ。
226 名前:デフォルトの名無しさん mailto:sage [02/03/09 18:54] 221は222が >pascalではCの様なプロトタイプ宣言は出来ないんですか? にちゃんと答えてくれていることに気が付いているのだろうか?
227 名前:アライグマPascal [02/03/09 21:24] >226 さりげない一言「forward」に私は愛を感じました。 たぶん受け止めていただけたと思います。
228 名前:デフォルトの名無しさん mailto:age [02/03/09 21:55] 気づいてなさそうだからヤボな説明をしておこう Pascalには「プロトタイプ宣言」は無い しかし、「プロトタイプ宣言」とは言わないがそれと同じものはある それがforward宣言だ
229 名前:アライグマPascal [02/03/10 17:50] パスカルの文献が少ないので「サウンド・プレス」さんのところで 翻訳中のFreePascalの関連部分を読むことをおすすめします。URLはずっと 上のほうに書き込んでおります。(以下はその文章の抜粋です) 8.5 フォーワード宣言関数 forward手続きを使うことで実装のない関数を定義できます。関数の実際の 実装はモジュール内であとに続けなければなりません。関数はforward宣言後、 すでに実装されているかのように使われます。次はフォーワード宣言の例です。 program testforward; procedure First (n:longint); forward; profedure Second; begin WriteLn('In second.Calling first...'); First(1); end; procedure First(n:longint); begin WriteLn('Frist received:',n); end; begin Second; end.
230 名前:アライグマPascal [02/03/10 17:53] ぐは、 profedure× procedure○
231 名前:アライグマPascal [02/03/16 18:03] どなたか教えてください。 あるPascalの書籍に (1) round(2.5*(5.5-8.9)) (2) (16.4 -10.8)/2.0 >= 1.3+6E-1 という演算の問題があったのですが、書籍の解答は (1) -8 (2) true でした。 FreePascalでは書籍の解答道理の値を返しますが、スレの上の方にあった HelloPascalという処理系では -9とFalse を返します。 どちらの処理系の演算が正しいのでしょうか?またどんなルールで演算を しているのでしょうか?
232 名前:デフォルトの名無しさん mailto:sage [02/03/16 18:28] >>231 そんな、処理系依存の重箱の隅をつつく問題を出す書籍など、捨てろ。
233 名前:アライグマPascal [02/03/16 21:13] ISO-PASCALを解説した本ですが、今まで演習問題は気にもとめなかったのです。 (1)はround(-8.5)と書き直すことができますよね。roundは小数点下を四捨五入 するから答えは-9になるのが当たり前と思っているのですが、違うのでしょうか。 こんな簡単な演算でも処理系依存で値が変わるのは大問題だと思うのですが、 処理系依存とはどういうことでしょうか?
234 名前:デフォルトの名無しさん mailto:sage [02/03/16 21:16] -9.5 は -10 + 0.5 -9 + (-0.5) のどちらを正解にしたい? 銀行家丸め以前の問題。
235 名前:アライグマPascal [02/03/16 21:26] >234 上はそれぞれを丸めると-10+1=-9 下はそれぞれを丸めると-9+(-1)=-10になるということでしょうか? でもround(2.5*(5.5-8.9))の場合、括弧内から計算していくと round(2.5*(-3.4))になり、別々に丸めても round(3*(-3))=-9にはなりませんか? どんなルールが働いているのでしょうか????????
236 名前:デフォルトの名無しさん mailto:sage [02/03/16 21:26] 大体、C や PASCAL が定義されたころって、ライブラリの重要性が 今ほど高くなかったのだよ。というかライブラリは処理系の外に 存在するものだった。 ISO 7185 / JIS X3008 のどこにも Round 関数の仕様の話はない。 よって、処理系依存問題。
237 名前:デフォルトの名無しさん mailto:sage [02/03/16 21:28] >>235 そんな難しい話ではなく、 -9.5 を -10 にする根拠は? -9 にする根拠は?って話。 どちらも誤差は 0.5
238 名前:デフォルトの名無しさん mailto:sage [02/03/16 21:31] あ゛ お題は -8.5 か。 ウツダシノウ
239 名前:アライグマPascal [02/03/16 21:39] う〜ん round(X) 実数式Xの小数点以下を四捨五入した整数値を返す。 とあるなら、その値は唯一一つしかあり得ないはずですよね。 別の解釈が入り込む余地は無いと思うのですが、 こんな単純明快な話なのにどうして処理系依存なんてことが あるのだろう。
240 名前:アライグマPascal [02/03/16 21:44] (2)の問題は 1.3+6E-1 の部分の(-1)の解釈が、単に整数値の-1と解釈するのか 前のEとの絡みで、10のマイナス1乗と解釈するのかの違いだと思うの ですが、どうでしょうか?
241 名前:デフォルトの名無しさん mailto:sage [02/03/16 21:46] 1. そもそも Round 関数は Pascal 言語の仕様の範囲外。個々の処理系のライブラリが 規定するもの。 2. 正の数の丸めは Banker's Round / 銀行家の丸め問題以外には大きな問題はない。 homepage1.nifty.com/s_miyake/hp/jisround.htm
242 名前:デフォルトの名無しさん mailto:sage [02/03/16 21:55] 3. 負の数の丸めを明確に規定する物はない。 -8.5 に話を戻すと、-1 * 8.5 に置き換えてから 8.5 を「四捨五入」。最近偶数値である8に丸められた後 -1 * 8 と評価されるとすると、答えは「-8」 -8.5 を字面で「四捨五入」すると、「五入」扱いになる。 これを0方向に丸めると、答えは「-8」 これを無限大方向に丸めると、答えは「-9」 さて。.5 は境目の数なので、少し前後も出してみよう。 -8.0 -> -8.0 // これは異論あるまい。 -8.4 -> -8 の方が近いんだから -8 だろう。 -8.5 -> さぁ。どうする? -8.6 -> -9 だよな。 -9.0 -> -9.0 // これも簡単。
243 名前:アライグマPascal [02/03/16 21:59] >241 お恥ずかしい話ですが初めてこの話を知りました。 ということはHelloPascalは「JIS丸め」を採用していない、 演算によっては誤差が大きくなりやすいということですね。 関連のURLを含めて作者に連絡してみようと思います。
244 名前:デフォルトの名無しさん mailto:sage [02/03/16 22:11] 実数型か少し多めの桁を使用して表示の際に四捨五入すれば 実用上は問題ないんだけどね 厳密にしようとすると気になるかも
245 名前:デフォルトの名無しさん mailto:sage [02/03/16 23:13] なお、div / mod 「演算子」の負数に対する振る舞いは規格書に明記されています。 まぁ普通はそこまで気にしない/気にしてもしょうがないので「処理系依存」の振る舞い とひとくくりにしてしまいますが。
246 名前:デフォルトの名無しさん mailto:sage [02/03/17 00:04] その前の問題として 数値の持ち方の問題があるんじゃない? 2進で表現すると 5.5 101.1と 誤差無くもてるけど、8.9=1000.1110011001100110011 と誤差無く持てない
247 名前:デフォルトの名無しさん mailto:sage [02/03/17 02:33] >>246 銀行家丸めはコンピューターが無い頃からの技法だよ。
248 名前:デフォルトの名無しさん [02/03/22 21:52] 最近までBASICで遊んでましたが、今日アマゾンからUsing turbo pascal 6.0-7.0 third edition が届いたのでまたPascalで遊んでみたいと思います。
249 名前:デフォルトの名無しさん mailto:sage [02/03/22 22:03] 何でわざわざ古い物を選ぶんだろう。 昔の物だからといって、機能が少ないからといって、優しいとは限らないんだよ?
250 名前:デフォルトの名無しさん [02/03/22 22:24] >>249 じゃーキミも三平方の定理使うのやめなよ。
251 名前:デフォルトの名無しさん mailto:sage [02/03/22 22:26] まあまあ。他人が何しようといいじゃないの。 遊ぶんだったら、趣向は人それぞれ。 おれも宿題スレみて生DOSアプリを作ってみたくなったよ。
252 名前:アライグマPascal mailto:sage [02/03/22 22:59] 例の「答えが書籍と違う」という話ですが、作者にメールで 報告したところバグらしいとのことでバグフィックスをする とのことでした。