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/
892 名前:883 [04/01/12 22:41] 下の式を記述したいのですが (AのN乗÷N!)÷(Σ AのX乗/X!) X=0〜N この式の左側は記述できたのですが 右側はどうやって記述したらいいのでしょうか?
893 名前:デフォルトの名無しさん mailto:sage [04/01/12 22:48] まず数式読みづらい あと0からってのがおかしいと思うが 0の階乗なんてないし 0で割ったらダメでしょ 括弧の結びどころがみにくい Σ(A^X / X!) こう解釈していいか? Σの上下につく数字も明示してくれ 下手っぴでずれてもいいからさ X=1からNまでってところか?
894 名前:883 mailto:sage [04/01/12 22:55] >>893 その解釈で大丈夫です。 Xは1からNまででした。 見にくい上にわかりにくくてすみませんでした
895 名前:883 mailto:sage [04/01/13 09:50] (A^N/N!)/(Σ(A^X)/) Xは1からNまで type hako=array [1..100] of real; hako2=array [1..100] of real; hako3=array [1..100] of real; var box:hako; box2:hako2; box3:hako3; n,b,x,y,z,temp:integer; ue,a,seki,total,kotae,goukei:real; begin write('Nは?'); readln(n); write('Aは?'); readln(a); seki:=1; for b:=1 to n do begin seki:=seki*a; box[b]:=seki end; x:=0; y:=1; z:=0; repeat x:=x+1; y:=y*x; temp:=y; z:=z+1; box2[z]:=temp until z=n; ue:=seki/y;
896 名前:デフォルトの名無しさん mailto:sage [04/01/13 09:50] for b:=1 to n do box3[b]:=box[b]/box2[b]; total:=0; for b:=1 to n do total:=total+box3[b]; goukei:=total+1; kotae:=ue/goukei; writeln('求める値は',kotae:5:3,'です。') end. こんな感じであってますか?
897 名前:883 mailto:sage [04/01/13 09:54] 問題は (A^N/N!)/(Σ((A^X)/X!)) Xは1からNまでで やっぱりX=0の時も値を求める必要があるみたいなので 1を加えてみたのですが、どうでしょうか?
898 名前:デフォルトの名無しさん mailto:sage [04/01/13 18:17] X=0のときってのが意味わからん
899 名前:883 [04/01/15 10:56] Σ (nCm)*{a/(n-a)}^m m=1〜s-1まで Σ {a/(n-a)}^m/(n-m)!*s^(m-s) m=s〜nまで nCmはコンビネーションです。 a,n,sにはこちらから値を与えて解を求める問題なのですが どう記述したらよろしいでしょうか? お願いします
900 名前:デフォルトの名無しさん [04/01/15 13:25] 900
901 名前:デフォルトの名無しさん [04/01/18 11:34] 配列1に5個の数値が順番に1,2,3,4,5と入っているものを 配列2に5,4,3,2,1と入れ替えるにはどうしたらいいですか?
902 名前:デフォルトの名無しさん mailto:sage [04/01/18 11:40] for i:=Low(array1) to High(array1) do array2[i] := array1[High(array1) - i];
903 名前:デフォルトの名無しさん mailto:sage [04/01/18 11:47] >>902 ありがとうございました
904 名前:デフォルトの名無しさん mailto:sage [04/01/18 11:58] どういたまして
905 名前:デフォルトの名無しさん [04/01/18 13:03] type box1=array [1..100] of longint; box2=array [1..100] of longint; var hako:box1; hako2:box2; i,n:integer; p,q,r:real; begin p:=0; q:=1; r:=0; repeat p:=p+1; q:=q*p; r:=r+1; hako[r]:=q until r=10; for i:=Low(hako) to High(hako) do hako2[i]:=hako[High(hako)-i]; for n:=1 to 10 do writeln(hako2[n]) end. 上のプログラムのようにリピートを用いた記述で 配列の入れ替えを行うと0しか戻ってこない場合はどうしたらいいですか?
906 名前:レイホウ@6歳 mailto:sage [04/01/18 13:10] until r=10; これを until r=100; とやってみなさい
907 名前:デフォルトの名無しさん [04/01/18 13:14] >>906 ありがとうございました。
908 名前:レイホウ@6歳 mailto:sage [04/01/18 13:23] うそだった やってみたら for n:=90 to 100 do writeln(hako2[n]); こうだな それか box1=array [1..10] of longint; box2=array [1..10] of longint; ↑これ
909 名前:デフォルトの名無しさん [04/01/20 20:18] N!のような値の大きなものを求めるプログラムで realで宣言すると100!の階乗でも求められるのに 配列(realで宣言)に入れてしまうとエラーが出てしまうのはなぜですか?
910 名前:デフォルトの名無しさん mailto:sage [04/01/20 22:20] >>909 1) 配列は本当に実数型ですか? 2) 初期化していますか? 3) 小さな値(2!、3! など)でもそうなりますか?
911 名前:デフォルトの名無しさん mailto:sage [04/01/21 00:19] エラーの内容を書けょ コード書けょ 配列なのにhoge:=kaijou(100); みたいなことやってるんじゃないの? hoge[0]:=kaijou(100);
912 名前:909 [04/01/21 09:03] type box=array [1..100] of real; var hako:box; a,b,c,d:real; begin a:=0; b:=1; c:=0; write('数値入力'); readln(d); repeat a:=a+1; b:=b*a; c:=c+1; hako[c]:=b until c=d; writeln('答えは',hako[c],'です。') end. これで、 Error: Type mismatch Error: Incompatible types: got "S64REAL" expected "LONGINT"というのが hako[c]のところにでてしまいます
913 名前:デフォルトの名無しさん mailto:sage [04/01/21 09:14] Type がミスマッチしてるんねん。 LONGINT を期待してはるのに S64REAL 型の変数がやってきたんや。
914 名前:デフォルトの名無しさん mailto:sage [04/01/21 09:17] そんなときはキャスト、キャスト。 コンパイルエラーが出なくなるまでキャストし続ける。 何でもいいからよさそうな型でキャスト。 912 のコードなら hako[ byte(c) ]:=b; でどうだろう。
915 名前:デフォルトの名無しさん mailto:sage [04/01/21 16:57] Cはカウンタだから整数型でいいんじゃないの? var a, b: real; c, d: integer; で。
916 名前:デフォルトの名無しさん [04/01/25 11:59] 質問です。 指数分布に従う乱数を発生させるにはどうしたらいいですか?
917 名前:デフォルトの名無しさん mailto:sage [04/01/25 14:52] 2,4,8,16... ってことか? いや、分布だから大きい数がめっちゃ出やすいってことか?
918 名前:デフォルトの名無しさん mailto:sage [04/01/27 06:53] function Expondist : extended; begin Result := -Ln( Random ); end;
919 名前:デフォルトの名無しさん [04/02/05 11:40] 英単語をいくつか入力して、辞書みたいなアルファベット順に表示するにはどうすればいい? アルファベット順にするのはソート関数でいいとして、文字列の配列(?)っていうのが分からない。 たとえばA[i](char)って配列を用意したとして、英単語を my may と入力した場合は、 A[1]='m' A[2]='y' A[3]='m' A[4]='a' A[5]='y' となるような気がするんですが、これじゃあソート出来ないですよね? A[1]='my' A[2]='may' として、さらに一文字ずつ比較していくにはどうすればいいですか?(分かりづらいとは思いますが)
920 名前:デフォルトの名無しさん mailto:sage [04/02/05 11:42] 使っている処理系の名前は? array[1..100] of string; って定義は可能?
921 名前:デフォルトの名無しさん [04/02/05 11:54] SSH使って大学のにログインしてて、処理系は分かりません。 試しにやってみたら warning: missing string capacity - assuming 255 と出ましたが、これ出てきても出来ます?
922 名前:デフォルトの名無しさん mailto:sage [04/02/05 12:47] メモリーばか食いしてもいいのなら、 type Str255:string[255] とか定義して、 array[1..100] of Str255 しちゃえば良いのでは? (って、昔のマック風みたい)
923 名前:デフォルトの名無しさん [04/02/05 13:23] いざとなれば別のコンパイラを使うことにして、定義はこれでやってみます。 でも今度は、stringで定義した文字列で、アルファベット順に順序を比較していく方法が分かりません。
924 名前:デフォルトの名無しさん mailto:sage [04/02/05 14:00] 文字列ではない、たとえば整数の配列のソートは出来ますか? type TargetType = array[1..100] of integer; と定義しているとき、 procedure Sort( var TargetData : TargetType ); という関数を実装出来ますか? これが出来るなら、文字列ソートも容易でしょう。
925 名前:デフォルトの名無しさん mailto:sage [04/02/05 14:06] なんか文字と文字列がごちゃ混ぜになっているっぽいね。 「アルファベット順に順序を比較」ってことは、与えられた二つの文字列に順序をつける。 という操作と同義。 type CompareResult = (sGREATER, sEQUAL, sLESS); function CompareString( s1, s2 : string ) : CompareResult; という関数を作り、任意の文字列間に順序を定める。 もし使っている処理系が文字列間比較をサポートしているのなら、 if s1 > s2 みたいに書いてしまえばよい。大きいか小さいか、等しいかの3通りあるので間違えないように。 文字列間比較をサポートしていない処理系の場合は「アルファベット順」の定義に基づき 一文字ずつ比較。
926 名前:デフォルトの名無しさん [04/02/05 16:20] 整数でのソートは出来ます。それの配列の型をintegerからstringに変えるだけで、英単語も整数と同様に並び変わるってことですね。
927 名前:デフォルトの名無しさん [04/02/05 17:59] やってみたら出来ました。ありがとうございます。
928 名前:デフォルトの名無しさん mailto:sage [04/02/06 13:56] Ord
929 名前:げんげんげんげん [04/02/08 04:49] 分布関数 F(x)=x^n(0<x<1) をもつ乱数を発生させるプログラム誰か教えてください!! お願いいたします。
930 名前:デフォルトの名無しさん mailto:sage [04/02/08 13:46] nは定数? Exp(x * Ln(n)); //n>0のときのみ
931 名前:デフォルトの名無しさん mailto:sage [04/02/08 15:14] それじゃあx^nにならない?
932 名前:デフォルトの名無しさん mailto:sage [04/02/08 15:15] ↑は「それじゃあn^xにならない?」の間違い
933 名前:デフォルトの名無しさん mailto:sage [04/02/08 16:32] そうなると思うならxとnを逆にしたらいいんじゃないかとか考えないのか
934 名前:930.931 mailto:sage [04/02/08 17:59] >>933 いや、俺は>>929 じゃないから。 俺が>>933 のように考えたとしても、何の意味もないじゃんか。 名前からしても別人である可能性が高いのに。釣りか?
935 名前:デフォルトの名無しさん mailto:sage [04/02/08 23:29] >>934 なんか番号間違えまくってないか?
936 名前:デフォルトの名無しさん mailto:sage [04/02/09 17:27] >>935 1つも間違ってない
937 名前:930 mailto:sage [04/02/09 17:38] 930≠931ですが何か?
938 名前:デフォルトの名無しさん mailto:sage [04/02/10 04:25] >>918 の回答じゃだめなのかなぁ?
939 名前:デフォルトの名無しさん mailto:sage [04/03/10 14:34] pc2.2ch.net/test/read.cgi/tech/1078885169/ なんか、次スレたってるぞ
940 名前:デフォルトの名無しさん mailto:sage [04/04/27 21:24] Pascal の言語仕様書(のようなもの)はどこかのサイトで閲覧できますか? Pascal の言語が一通りわかれば良いのですが。
941 名前:デフォルトの名無しさん mailto:sage [04/04/28 00:04] >>940 Pascalって言っても方言から拡張まで何でもありだから、対象の開発環境によってまるっきり違いそうな気がする。 それに言語仕様といっても厳密に書き出すと膨大な量になるから、あまりやっているところはないんじゃないかな。 一通りということなら、入門サイトでも見たらどうかな? 私は本(WirthのPascal本)から入ったのでサイトを紹介することはできないけど。
942 名前:デフォルトの名無しさん mailto:sage [04/04/28 01:13] www.jisc.go.jp/app/pager ここで検索すればJIS標準Pascalの仕様書がPDFで閲覧できるはず。 適当に弄ればPDFのDLもできる。
943 名前:942 mailto:sage [04/04/28 01:30] 上のURLだと見れんみたい トップページから「JIS検索」たどってくれ
944 名前:デフォルトの名無しさん mailto:sage [04/04/28 13:51] とりあえずはANS/JISの標準化された古い仕様だけだよね。 その後のオブジェクト指向方面の拡張はAppleのとBorlandので違うもんねぇ。 gpcはBorlandに近いんだっけ?
945 名前:デフォルトの名無しさん mailto:sage [04/04/29 05:02] >>941-944 どうもです。 いま直接関係しているのが Pascal の方言なので、サイトとかを見て回ってみます。
946 名前:デフォルトの名無しさん [04/05/15 21:02] perlのハッシュのようにキーと要素を扱わせることは出来ないでしょうか? iniファイルのようにキーがたびたび変更される場合を扱いたいのです
947 名前:946 mailto:sage [04/05/15 21:07] すいません・・・思いっきり上の方で連想配列の話題がありましたね 忘れてください
948 名前:デフォルトの名無しさん mailto:sage [04/05/15 22:32] >>946 「キーがたびたび変更されるのでそれに対応する」んじゃなくて「キーがたびたび変更されないように(もしくは変更されても簡単に対応できるように)プログラミングする」のが良いと思う。 キーを作るプログラムが他のだと手の出しようもないけど、自分で作るのならデータ構成、プログラミングで対応できそうな気がする。
949 名前:デフォルトの名無しさん [04/06/25 01:20] レベルの低い質問で申し訳ないんですけど 大学の授業で先週からpascalやってるんですけどわけがわからなくなってるんで 家でpascalの勉強をしたいんですけどどうすれば自宅のパソコンで使えるようになるんですか? OSはウインドウズXPなんですけど。 CDとかで売ってたりするんですか? >>1 のサイトでダウンロードしてもインストールすることができないし 何をどうすれば自宅のパソコンでpascalが使えるようになるんですか?
950 名前:デフォルトの名無しさん mailto:sage [04/06/25 02:49] >>949 大学の授業ってんならgnu-pascal(gpc)当たりが正当かと思うが、 borlandのサイトからdelphiの無償版が落とせる。 またFreePascal(fpc)というのも割りとメジャーだ。 ttp://www.freepascal.org/ ttp://www.jp.freepascal.org/mirror/fpc/download.html
951 名前:デフォルトの名無しさん mailto:sage [04/06/25 04:59] >>949 >>950 が言う通りだと思うけど、その教授に自習したいから処理系教えれ!って聞くのがいいんじゃなかろうか? 学校のマシンが何かのUnix系の端末でgpcってオチが一番ありそうな気はするけども。 Cygwinあたりを突っ込んで(SFUとかU-WinとかMinGWとかでも構わんかもしれんけど)自力でgpcを入れるとかなのかな? 後、大学生なら ttp://www.pascal-central.com/ あたりとりあえず眺めてみるのもお勉強になるかもね。 って、情報系でもなんでもなくてマジわけわかんね〜〜〜〜〜!!!とかだとこういう情報過多なサイトは遠慮しとくベキ?
952 名前:デフォルトの名無しさん mailto:sage [04/06/25 08:03] >>949 Bloodshed Software - Dev-Pascal www.bloodshed.net/devpascal.html
953 名前:949 mailto:sage [04/06/27 00:50] >>950-952 レスありがとうございます。 とりあえずFreePascal(fpc)というのを試してみます。
954 名前:大学生 [04/07/20 22:04] √cの近似値をニュートン法で求めるプログラムと、 二分法でfor文を使って求めるプログラム、 さらに二分法で求めたものを再帰的手続きにより求めるプログラムを テストで出されるそうなのですが、まったくわかりません・・。 なんとか助けていただけないでしょうか?? よろしくお願いします!!!
955 名前:デフォルトの名無しさん mailto:sage [04/07/20 23:44] 車の運転ができない人に免許をとらせても世の中のためになりません。 以上
956 名前:デフォルトの名無しさん mailto:sage [04/07/21 02:16] 筆記試験か。すごいね。穴埋めになるのかな。
957 名前:デフォルトの名無しさん mailto:sage [04/07/21 06:06] 再帰的二分法。のアイデア。 function 再帰で開平を求める関数(c: real); function 実際の再帰で開平を求める関数(範囲の最低値, 範囲の最高値: real); var 二分点: real; begin 二分点 := (範囲の最低地 + 範囲の最高値)/2; if (二分点 * 二分点) < c then result := 実際の再帰で開平を求める関数(二分点, 範囲の最高値) else (二分点 * 二分点) > c result := 実際の再帰で開平を求める関数(範囲の最低値, 二分点) else result := 二分点; end; begin 実際の再帰開平を求める関数(0, c)// 初期値は 0 から c までとする。 end;
958 名前:デフォルトの名無しさん [04/07/26 01:12] レポートが出たのですが、全く分かりません↓ LD A−Aをレジスターに格納する ST A−レジスターの中身をAに格納 AD A−レジスターの中身とAを足して、レジスターに格納 SB A−レジスターの中身とAを足して、レジスターに格納 ML A−レジスターの中身とAを掛けて、レジスターに格納 DV A−レジスターの中身をAで割って、レジスターに格納 接尾辞表現で ABC*+DE-/(普通に書いたら(A+B*C)/(D-E))と入力して 上の指示表現を使って答えを解いていくための別のプログラムを書くとしたら LD B ML C ST TEMP1 LD A AD TEMP1 ST TEMP2 LD D SB E ST TEMP3 LD TEMP2 DV TEMP3 ST TEMP4 と表示できるようなプログラムをpascalで作りなさい。という内容です。 ヒント 式を順にスタックに入れていって、 最初のBC*はop2:=c;op1:=b;として、取り出していくそうです 人助けだと思ってお願いします(ToT)/~~~
959 名前:デフォルトの名無しさん mailto:sage [04/07/26 08:07] オレニマカセロ! とはいうものの、処理系手に入れるまで待ってね。
960 名前:デフォルトの名無しさん mailto:sage [04/07/26 18:51] ずれてたらごめん 1→2→3→4→5→6→7→8→9→α→β→γ→δ * + − / A B C C X X Y D E E Z Z W A B B A A Y D D Y Y A A Y Y 4: (B * C -> X) => (LD B / ML C / ST TEMP1) 6: (A + X -> Y) => (LD A / AD TEMP1 / ST TEMP2) α: (D - E -> Z) => (LD D / SB E / ST TEMP3) γ: (Y / Z -> W) => (LD TEMP2 / DV TEMP3 / ST TEMP4)
961 名前:デフォルトの名無しさん [04/07/27 14:16] どうもありがとうございました(*^_^*)頑張ってやってみます♪
962 名前:デフォルトの名無しさん [04/08/09 10:05] 現在、Pascalによるプログラムが実用されている所ってあるんですかね。 どっかの工場のPCで動いてるとか。
963 名前:デフォルトの名無しさん mailto:sage [04/08/09 10:08] >>962 君の知らない「あそこ」で動いている。 秘主義務があるので具体的な内容は話せない。
964 名前:デフォルトの名無しさん mailto:sage [04/08/09 19:37] matrixengine.jp/product/d_loca/dloca_html/dloca_taiken.html これもPascalみたい。 体験版あるみたいなのでPascal詳しい人試してみて意見聞かせてほしいです。
965 名前:デフォルトの名無しさん mailto:sage [04/08/09 23:36] > 当時は Borland(現 Inprise)の Turbo Pascal が人気のコンパイラでした。私も一時はそればかり使っていま > した。しかし,世の中は ANSI C に移ろうとしていた頃です。私はまむしさんより一歩先に Turbo Pascal を捨 > てて Turbo C に移行しました。 ttp://oku.edu.mie-u.ac.jp/~okumura/compression/1988.html
966 名前:デフォルトの名無しさん mailto:sage [04/08/19 22:39] >>962 私はngraphを現役で使っています。
967 名前:デフォルトの名無しさん mailto:sage [04/08/20 07:21] >>966 研究室のMS-DOS機ですか?
968 名前:966 mailto:sage [04/08/21 22:50] 一応Win95が動いているマシンです。 あとアドインプログラム書くのでコンパイラも時々動かしてます。
969 名前:デフォルトの名無しさん [04/08/22 03:48] 大学院入試のアルゴリズムとデータ構造でPascalで書かれた問題があるのですが、 Pascalは詳しくやってないのでよくわかりません。二分探索木の問題で type tree = @node; node = record; element:integer; left,right:tree; end; で2分木のデータ型treeを定義しているのですが、これはC言語で書くと struct node{ int element; struct node *right,*left; }; struct node *tree; といった感じのイメージでいいのでしょうか(Cの方の文法も間違ってるかも…)。
970 名前:デフォルトの名無しさん mailto:sage [04/08/22 03:50] >>969 あ、Pascalの方の2行目recordと4行目treeの後ろにセミコロン;はありませんでした。 すみません。
971 名前:デフォルトの名無しさん mailto:sage [04/08/22 03:51] あってるよ
972 名前:デフォルトの名無しさん mailto:sage [04/08/22 03:57] ありがとうございます。ここでtree型の変数pのelementの部分にアクセスするためには Pascalではどう書けばいいのでしょうか?
973 名前:デフォルトの名無しさん mailto:sage [04/08/22 04:09] あ、あと問題の一部に(pはtree、xはintegerです) if p=nil then begin new(p); with p do begin (穴埋問題) :=x; left :=nil;right :=nil; end end ってのがあったんですが、with p って何ですか?
974 名前:デフォルトの名無しさん mailto:sage [04/08/22 08:42] >>972-973 pがtree型ならそいつの指すnode型のブツをゲットする必要があるから例えば p^.element だな。Cの (*p).element に相当する書き方。 withの意味は自分で調べれよ。それで分からないところだけ質問しる。 ところで、そこの「with p」は「with p^」 が正しいと思うがどうか。
975 名前:969=970=972=973 [04/08/22 15:44] >>974 ありがとうございます。問題文を見直した所、with p と書かれています。問題の間違いですかね? with文についてググったのですが 「Pascalでレコードのメンバーを扱うには「レコード名.メンバー名」という書式を使うが、 レコード名をある程度省略する方法がある。それにwithを使う。 withの内部では「メンバー名」を書くだけで、そのレコードのメンバーが参照できる。」とありました。 例えば穴埋問題の部分には(p^)のelementメンバにxを代入したいわけですが、 ここは「(p^).」を付けずに element := x; と書ける、ということですか? 書けるとしたら、p^.elementと書くのは間違いとなるのでしょうか?
976 名前:上とは別人 mailto:sage [04/08/22 16:42] >>969 のtype tree = @node;は、type tree = ^node; じゃないのかなあ…まあ、Pascalも方言多いから何とも言えんけど with p or with p^も、Delphiなんかじゃrecordへのポインタに直接"."を続けられるから間違いとも言い切れ無さげ… あと、withは、名前を探す順番を変えるだけなので、p^.elementももちろん書ける…私の知ってるPascalであれば…
977 名前:デフォルトの名無しさん mailto:sage [04/08/22 17:08] >>976 ありがとうございました。 @については、ここ数年分見ましたが、同様の問題では全て@node;のような書き方をしていました。 別な方言なんでしょうね。
978 名前:デフォルトの名無しさん mailto:sage [04/08/25 10:56] >>976 PASCALのJIS規格では「@」は「^」の代替表現なので、とりあえず どっちで書いても同じです。Delphiでは意味が違いますが。 「with p」は規格としては「with p^」でないとまずいでしょう。 もちろん「with p」と書ける処理系は存在するかもしれませんが, すくなくとも GNU Pascal ではだめでした。
979 名前:デフォルトの名無しさん mailto:sage [04/08/31 03:47] スレさようなら
980 名前:デフォルトの名無しさん mailto:sage [04/08/31 03:51] 980!
981 名前:デフォルトの名無しさん mailto:sage [04/08/31 14:51] 落ち
982 名前:デフォルトの名無しさん [04/08/31 22:42] 夏とともに、さよなら・・・。