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/
266 名前:丁稚Pascal mailto:sage [02/03/29 09:57] program GCM(input,output); var a,b,c:integer; function a_gcm(x,y:integer):integer; var r:integer; begin repeat r:=x mod y; x:=y; y:=r; until r=0; a_gcm:=x; end; begin writeln('自然数を二つ入力しる!'); readln(a,b); while (a<0) or (b<0) do begin writeln('自然数っつただろうが(゚Д゚)ゴルァ!!'); readln(a,b); end; if a<b then begin c:=b; b:=a; a:=c; end; writeln('最大公約数=',a_gcm(a,b)); end.
267 名前:丁稚Pascal mailto:sage [02/03/29 10:02] 訂正してみました。いちいちソース貼ってると長くなるなぁ。
268 名前:デフォルトの名無しさん mailto:sage [02/03/29 10:25] >>266 大小の比較交換も a_gcmに入れないと使う時に不便だよ
269 名前:丁稚Pascal mailto:sage [02/03/29 10:35] program GCM(input,output); var a,b:integer; function a_gcm(x,y:integer):integer; //一組の自然数の最大公約数を求める var r,z:integer; begin if a<b then begin z:=y; y:=x; x:=z; end; repeat r:=x mod y; x:=y; y:=r; until r=0; a_gcm:=x; end; begin writeln('自然数を二つ入力しる!'); readln(a,b); while (a<0) or (b<0) do begin writeln('自然数っつただろうが(゚Д゚)ゴルァ!!やりなおし!!'); readln(a,b); end; writeln('最大公約数=',a_gcm(a,b)); end.
270 名前:丁稚Pascal mailto:sage [02/03/29 10:38] >>268 なるほど。再度訂正してみました。 大学だと課題として提出して終わりなんで、その場限りのコードになりがち。 気をつけねば。
271 名前:デフォルトの名無しさん mailto:sage [02/03/29 10:58] × if a<b then begin z:=y; y:=x; x:=z; end;
272 名前:デフォルトの名無しさん mailto:sage [02/03/29 11:02] テストコードを書く習慣をつけないといけないよ 最初に予め計算した結果と何個か比較させるようにするといい if a_gcm(555,9875)!=5 then writeln('NG');
273 名前:デフォルトの名無しさん mailto:sage [02/03/29 11:16] 除算を使わない GCD function gcd_1(m,n:Integer):Integer; begin gcd_1:=0; if m=0 then exit; if n=0 then exit; while m<>n do begin while m>n do m:=m-n ; while n>m do n:=n-m ; end; gcd_1:=m; end;
274 名前:アライグマPascal mailto:sage [02/03/29 11:38] 書籍に載っていた模範解答です。 program gcm(input,output); var a,b,r : integer; begin writeln('Enter a:'); readln(a); writeln('Enter b:'); readln(b); if (a>0) and (b>0) then begin repeat r:=a mod b ; a:=b ; b:=r ; until r=0; writeln('gcm = ',a) end else writeln('ERROR: a and b must be positive.') end.
275 名前:丁稚Pascal mailto:sage [02/03/29 13:20] >>271 やってしまった・・・。 >>272 なるほど、次からはテストコード入れるようにします。 >>273 参考になります。 >>274 自分の r:=x mod y; x:=y; y:=r; よりも、 r:=a mod b ; a:=b ; b:=r ; のように一行に書いてしまった方がいいんですかね? これは好み?
276 名前:アライグマPascal mailto:sage [02/03/29 16:46] まったくの好みです。 私は全て一行一文主義です。
277 名前:デフォルトの名無しさん [02/03/29 20:49] Pascal の歴史はここが詳しい。 web.mit.edu/taoyue/www/tutorials/pascal/history.html
278 名前:デフォルトの名無しさん mailto:sage [02/03/29 21:11] >>277 サンクス 平易な英文だから 「英語はちょっと・・・」という人もトライしてみるといいね この辺の経緯を知らなかったDelphiユーザーなら ますます好きになること請け合いだよ
279 名前:丁稚Pascal [02/03/31 03:31] >>276 ありがとうございます。 今まで一行一文だったし、読み易い(自分としては)ので これからも一行一文でいきます
280 名前:デフォルトの名無しさん [02/03/31 22:22] Pascal って String 型あるんだ。 Cよりラクチンでいいな。
281 名前:デフォルトの名無しさん [02/03/31 23:11] ord ってなんの略なんだろう? ord('R') で82 になるやつ。
282 名前:デフォルトの名無しさん [02/04/01 00:30] order, ordinalなどの「序数」の事でしょう。
283 名前:デフォルトの名無しさん mailto:sage [02/04/01 00:38] 確かにCやBASICしか知らなかった人がPASCAL(Delphi) のテキスト読んだときに集合とか順序型、部分範囲型 とか書かれていると「ハァ?」なんだろうなあって思う。(w
284 名前:デフォルトの名無しさん mailto:sage [02/04/01 00:46] >>280 文字列に関してはCが馬鹿すぎるよね よくあんな言語で業務用アプリを作るもんだと思ってたもの C++は文字列用のクラスがあるからまだましだけど・・・
285 名前:デフォルトの名無しさん mailto:sage [02/04/01 09:44] >>283 (゚Д゚)ハァ? って思ったよ、最初は。でも便利だね。
286 名前:デフォルトの名無しさん [02/04/01 11:08] 集合型、列挙型、部分範囲型、この3つの関係を 理解できたら本当に便利だよね。
287 名前:丁稚Pascal mailto:sage [02/04/01 20:53] Cでは文字列を扱いた場合どうしてるんですか? 配列で定義してるの?レベルが低くてすいません(^-^; やっぱ他の言語も少しは勉強していかないとだめかな・・・
288 名前:デフォルトの名無しさん mailto:sage [02/04/01 21:47] Cの場合、ポインタと配列の区別がpascalに比べるとはるかに曖昧です char *p が文字列ポインタ(var p:PChar;)相当 (type PChar=Char^;)なんだけど p="ABCD"; と文字列を代入してるかのように表現出来ます。 というかします そして文字列"ABCD"は5文字の文字配列と等価です。 文字の最後は必ず #0 です。 これは Cでは'\x00' と書きますが こういう表現方法をAsciiZとか呼びます DelphiではこのAsciiZ方式と親和性が高くなるよういろいろな工夫がされています
289 名前:デフォルトの名無しさん [02/04/02 22:51] for letter := 'A' to 'Z' do
290 名前:デフォルトの名無しさん [02/04/02 22:52] >>289 は無視してくだされい。 for letter := 'A' to 'Z' do write (letter) こういう書き方がOKと聞いてはじめはびっくりした。 しかし、よく考えてみると、文字コードが入っているだけなので、納得した。
291 名前:デフォルトの名無しさん [02/04/02 23:20] >>288 何か変。 >p="ABCD"; と文字列を代入してるかのように表現出来ます。 > というかします これは初期化のときだけ。 初期化のときに「char* p = "abcd"」とすると、文字列の長さの分(此処では5)だけの領域を「確保」し、この場合なら"abcd\0"で初期化をします。 代入のときには出来ません。 代入をしたいときは、標準ライブラリその他の関数を使うとか、一文字ずつ操作するとか(配列と同じです)。 (C++ならstd::strungという文字列クラスが標準で存在します) > 文字の最後は必ず #0 です。 これは Cでは'\x00' と書きます '\0'とかくのが普通。 '\x00'はコードが0になる文字で、'\0'は文字列の終わりにくる特殊な文字。 「結果的には」同じだけど(ASCIIの場合?)。
292 名前:デフォルトの名無しさん mailto:sage [02/04/03 00:23] >>291 補足。 「初期化」というのは、宣言のときの代入です(違うけど)。 Cでは変数を「型名 変数;」として宣言しますが、 「型名 変数 = 初期値;」とすることで、変数の定義と同時にその値を設定することも出来ます。 '\x__'は、xのあとに16進数の値を入れて、コードを直接指定します。
293 名前:まあ一応 mailto:sage [02/04/03 06:23] >>291-292 char* p = "abcd" はポインタだから配列とは違うぞ。と。 確保されるのはcharへのポインタとabcd\0だぞ。と。 char p[] = "abcd" とは違うぞ。と。 (下はp="efgh"とかはできないが上はできる)
294 名前:デフォルトの名無しさん mailto:sage [02/04/03 06:50] >>287 ところで課題出してほしいの?
295 名前:デフォルトの名無しさん [02/04/03 12:24] じゃあ、データ構造の問題。 文字列を格納する片方向リスト構造を構築し、 任意の個数のデータを入力させ、最後に、その一覧を 通常ソート(頭文字がA→Zとなるように)及び 逆ソート(終端文字がA→Zとなるように)で出力せよ。
296 名前:291 mailto:sage [02/04/03 12:36] >>293 謝謝!
297 名前:丁稚Pascal mailto:sage [02/04/03 18:59] >>294 はい、おねがいします。 >>295 今からやってみます。かなり苦労しそうですが・・・
298 名前:デフォルトの名無しさん [02/04/04 20:58] もうすこし単純な問題なら… そうさねえ どの程度の問題を要求しているのか分からないけど、 「指定したファイルを、バイナリ形式で( 16バイト分を1行として、16進数で)表示せよ」 とか。 バイナリエディタみたいに。 00000 00 32 FF 55 23 56 F3 4F 93 F2 00 34 1A B3 34 CD 00001 ... 00002 ... ... と言う風に表示。 でもって、それをテキストファイルに出力。
299 名前:デフォルトの名無しさん [02/04/06 00:37] なんか、本読めば読むほど、Cとそっくりということがわかってきて、だんだん新鮮味がなくなってきた。 そろそろJavaに移るか。
300 名前:デフォルトの名無しさん mailto:sage [02/04/06 00:56] >>299 CとPascalはいとこ同士みたいなもんだからね〜 思想的には正反対の部分もあるけど おっと、300ゲトー、ズサ
301 名前:デフォルトの名無しさん [02/04/06 01:00] ただ、ソースがキレイなのは気にいった。 Cだとぐじゃぐじゃして何がなんだか、書いた本人しかわからんことも多い。 Perlよりはましだが。 Pascalはどうかいてもキレイになるようなしくみがあるんだろうな。 なんでCに負けたんだ?
302 名前:デフォルトの名無しさん mailto:sage [02/04/06 01:11] >>301 web.mit.edu/taoyue/www/tutorials/pascal/history.html ↑これを参照のこと 少なくともWindowsアプリを作る道具として見れば、C(≠C++)には勝ってるね
303 名前:デフォルトの名無しさん mailto:sage [02/04/07 17:06] >>299 みためなら、Javaも大して変わらんと思うがナー 本当に違った世界を味わいたいなら、LISPなどお勧めしておきたい。 つーか、一度はやっておくといいよ。
304 名前:デフォルトの名無しさん [02/04/08 22:22] Schemeは一応やったんですけど、exeが作れないので飽きました。
305 名前:Delフサギコ ◆zE1iiRdQ mailto:sage [02/04/08 22:38] ∧,,∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ミ,,゚Д゚彡 < 何がやれるのか自体がわからなかったので U つ \飽きました。 @ミ ミ  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∪''∪ 言語とは難しいですね。
306 名前:デフォルトの名無しさん [02/04/08 22:50] でもPascalの本、またちまちま読んでる。 アマゾンでJavaの本、注文したけど、届くまで1ヶ月かかるから。 それまでの間、Pascal の勉強するつもり。 もし時間がそれでも余ったら、VBとDelphiの勉強する。 本は買ってあるから。
307 名前:デフォルトの名無しさん [02/04/18 22:57] おい、お前ら。 pascalの中で、UNIXコマンド使う方法教えてください。
308 名前:307 mailto:sage [02/04/18 23:45] UNIX版で聞いてきます。
309 名前:デフォルトの名無しさん [02/04/19 12:11] pc.2ch.net/test/read.cgi/tech/1019185100/
310 名前:デフォルトの名無しさん mailto:sage [02/04/21 21:33] test
311 名前:デフォルトの名無しさん mailto:sage [02/05/10 04:00] 保守sage
312 名前:デフォルトの名無しさん [02/05/22 12:13] age
313 名前:デフォルトの名無しさん [02/05/30 14:02] age
314 名前:デフォルトの名無しさん [02/06/01 05:47] age
315 名前:デフォルトの名無しさん mailto:sage [02/06/01 05:59] 寒いスレだな
316 名前:デフォルトの名無しさん [02/06/01 06:49] 例題が豊富な解説書のお勧めはないでしょうか? delphiは扱ったことがないので純粋なpascalの本を探しています。
317 名前:デフォルトの名無しさん mailto:sage [02/06/02 06:19] Pascalに限らないけど純粋なPascalの本となると昔の物が多いので とりあえず図書館で探してみてはいかがでしょう。 答えになってないですけど。
318 名前:困ったさん [02/06/18 21:39] Pascalで多項式を2次式で割るプログラムを書けといわれたんですけど、 どうもうまくかけません。誰か教えてください。
319 名前:困ったさん [02/06/18 23:38] age
320 名前:デフォルトの名無しさん mailto:sage [02/06/18 23:47] >>318 数学の問題
321 名前:デフォルトの名無しさん mailto:sage [02/06/19 01:03] const Jisu = 5; // 次数(これは5次の場合) var tako: array[0..Jisu]of Real; // 多項式 niji: array[0..2]of Real; // 二次式 ans: array[0..Jisu-2]of Real; // 答え for i := Jisu-2 downto 0 do begin ans[i] := tako[i+2] / niji[2]; for j := 2 downto 0 do tako[i+j] := tako[i+j] - ans[i]*niji[j]; end; これで、ans に商となる多項式、 tako に剰余となる1次式が入るかな。 ゼロ除算とかのエラーは考えてないので、その辺よろしく。
322 名前:困ったさん [02/06/19 04:09] とても参考になりました。ありがとうございます。
323 名前:デフォルトの名無しさん [02/06/23 11:29] Double を Integer に入れたいんですけど、どうすればいいですか?
324 名前:デフォルトの名無しさん mailto:sage [02/06/23 11:32] >>323 kyasuto
325 名前:デフォルトの名無しさん mailto:sage [02/06/23 11:34] どのようにキャストすればいいんですか?
326 名前:デフォルトの名無しさん [02/06/23 11:37] windowsで使えるpascal→C言語コンバータはないですか?
327 名前:デフォルトの名無しさん mailto:sage [02/06/23 11:48] >>323 Round関数
328 名前:デフォルトの名無しさん [02/06/24 18:33] 何だここの"PASCAL"って? biz.ascii24.com/biz/news/article/2002/06/20/636664-000.html
329 名前:323 mailto:sage [02/06/24 22:27] >>327 ありがとうございました!
330 名前:デフォルトの名無しさん [02/06/28 18:02] Code worrierでpascalコンパイルする必要がでてきました。 使ってるひと居ませんか? Code worrierは既にpascalの対応が終了していて、 本家(あめりか?)で最終pluginがでてるみたいなんですけど、 これって日本語版の最新Code worrierで動くのでしょうか? OSはMac9です。 よろしくおねがいします。
331 名前:デフォルトの名無しさん [02/06/28 20:25] >330 使えたよ。 ただしVer.7までだけどね。 それとCarbonは駄目っぽ。
332 名前:デフォルトの名無しさん [02/06/28 20:28] 図書館でPASCALの本を探したら開架は全滅だった。 仕方ないから書庫から持ってきてもらった。 もう需要が無いんだね。 まだ出てから10年も経っていない本だって……
333 名前:デフォルトの名無しさん [02/06/28 20:52] Code worrierといえば、PocketStudioとか言う、DelphiライクなPalmの 開発環境があるみたいだね。 開発環境じゃなくて、Palmで動くPascalの処理系があるとうれしいかも。 Pascalの勉強用に。 でも、グラフィティでソースコード入力するのもちょっと面倒か。(w
334 名前:330 mailto:sage [02/06/30 04:12] >331 日本語版は最新が7みたいだからこれで逝けるわけですね。 Carbonはとりあえず必要ないです。 ありがとー
335 名前:デフォルトの名無しさん [02/07/01 11:46] >334 ビルドする時にBuild Allを選択すればCARBONも使えるようになります。(人に指摘されるまで気付かなかった)
336 名前:330 [02/07/02 02:47] フォローさんくすです。 で、CW7日本語版アカデミックをゲトして Pascal Pluginつっこんだら、とりあえず処理はできてる模様。 だけど、目的のコードはbuild出来ない罠。 実はNIH-ImageをソースからMakeしてるんだけど、 type mismach SFPutFile(〜) とか、いろいろとおこられるよヽ(`Д´)ノウワァァン!!
337 名前:デフォルトの名無しさん [02/07/02 03:10] >>330 1.62ならCWP2でMakeしたのを持ってる。たしかあれからファイルマネージャあたりは 激変したから、大変じゃない? でも褌EDITがウプデートされるくらいだからな...
338 名前:330 mailto:sage [02/07/02 03:31] でも真の目的はNIHimage(改)のbuildなのですよ。 とりあえず手始めにそのままのをやってみようかと。 そのまま使うだけなら配布されてますしね。 (´-`).。oO(古いCWをとりよせたほうが早いのかなぁ)
339 名前:337 [02/07/02 03:41] >>338 古いヘッダならADCのサイトにあるような。あ、けど合うのをさがすのがたいへんだね。
340 名前:330 mailto:sage [02/07/05 03:28] 入ってる(新しい)ヘッダをみながら、エラーが出る個所を無理矢理それっぽく直したら、 なんとかNIH-image(1.62)がmakeできたよ。一見ちゃんと動いてるみたいだけど、どうだろう。 PascalもCWもはじめてなんだけど、それ以前にMacの初心者なのが辛いトコロ。 AppleEventを効かすと刺さるんだけど、これって切っちゃっていいものなんだろうか… ところで、>>1 にGUI不可って書いてあることに今気づいたよ。 スレ違いスマソ。 親切な方、誘導きぼんぬ。
341 名前:デフォルトの名無しさん [02/07/13 08:17] age。 DAT落ちは阻止じゃ。
342 名前:デフォルトの名無しさん [02/07/16 22:46] >>341 んだ
343 名前:デフォルトの名無しさん mailto:sage [02/07/17 06:14] このスレでFreePascalの話題出てますか? え? ここ何処の板? 過去ログ読め? ショボーン
344 名前:デフォルトの名無しさん [02/07/20 00:29] 生きろ!
345 名前:デフォルトの名無しさん [02/07/30 20:46] PASCAL CENTRALにはFREEのPASCALコンパイラも置いてあるぞ!
346 名前:デフォルトの名無しさん mailto:age [02/08/17 20:54] AGE
347 名前:デフォルトの名無しさん [02/08/18 03:00] 何気なくパスカルのソースコードを検索してたらこんなのあったぞ。 home.planet.nl/~mike.wiering/mario/ TurboPascal5.5・6.0・7.0でスーパーマリオを作ってる。 まだソース見てないけど、ちょっと面白そうだ。
348 名前:デフォルトの名無しさん mailto:sage [02/08/18 05:01] Pascalが Philips’ Automatical Sequence Calcurator の略だったなんて初めて知ったよ
349 名前:デフォルトの名無しさん mailto:sage [02/08/18 05:11] >>347 ジャンプしながらファイアボールを撃つと、 フルスクリーンに関らずシステムメニューが出てしまう… このキー配列どうにかならないものか…
350 名前:デフォルトの名無しさん mailto:sage [02/08/18 05:16] >>349 ソースファイルあるんだから、変更できそうだけどな。 生憎TPがないや。本家に行ってDLしてこようかな。
351 名前:デフォルトの名無しさん [02/08/24 16:14] ObjectPascalの日本語で読める本って何か良いのある? このスレでリンクしてある「Object Pascal/Delphi(Kylix) プログラミング入門」 はDelphiでの使用に限定しているようなので汎用的なものを……
352 名前:デフォルトの名無しさん mailto:sage [02/08/25 19:22] >>351 Object Pasca lは Turbo Pascal/Delphi でしか使っていないのだから、汎用的と言っても意味ないと思う。 標準 Pascal ならあるけど、文字列型も分割コンパイルもない「教育言語」だから、今更覚える必要も無いとも思われ。
353 名前:デフォルトの名無しさん [02/09/04 18:40] CodeWarriorでもObjectPascalは使えます。 ボーランドがLinux用に出してるもう一つの製品でも使えるよ。
354 名前:デフォルトの名無しさん [02/09/04 19:21] それだけじゃない www.freepascal.org/ compatible with TP 7 as well as most versions of Delphi
355 名前:352 mailto:sage [02/09/06 20:51] >>353-354 あ、Kylix はそうでしたね。失念しておりました。 CodeWarrior と Freepascal は知りませんでした。私は最近の動向をよく分かっていない ようです(というか、Delphi で事足りているから、追いかける気がしないだけ)。 あと、標準化の中には「ISO Pascal」ってのもあったと言うことを思い出しました。Borland はこの規格の裁定に入っていないから、気にもしていないけど。 それはそうと、「Object Pascal というのは紛らわしいから?Delphi Language に変える」 という話もあるようだけど、Kylix もあるとしたら、なおさら紛らわしいような気もするんだけ ど...
356 名前:デフォルトの名無しさん [02/09/07 19:05] 誰かMetrowerksの Pascal Language Reference Pascal Library Reference Error Reference を持っている人居ない? ObjectPascalを使ってみようと思ってCodeWarriorCDを探してみたのですが見つからないのです。 Pascal Compilers Ref.pdfによるとCodeWarriorPro5のDocumentationフォルダの中にあるはずなんだけど、 いくら探してみ見つからないんです。 Sherlock2で検索かけてもPascal Compilers Ref.pdf以外は見つからなくて……。 Pro7にはPascalのDocumentなんて元から入っていないし……
357 名前:デフォルトの名無しさん [02/09/10 21:26] Metrowerksに問い合わせたらメール添付で送ってくれました。 原文の方しかないらしく、送って来たのは英語……。 しかも200頁超や300頁超でした。 はぁ、頑張って訳すか。
358 名前:アライグマPascal [02/09/19 08:16] 仕事が忙しくてネタがないのですが、(HPまだ作れていません) すみませんageます。
359 名前:デフォルトの名無しさん [02/09/20 21:49] レコード型の可変部がイマイチ良く分からん。 Var r : record case byte of 0 : ( i : Longint ); 1,9: ( a : extended); (1) : ( b :array[0..9] of byte ); end; とかくとき、 iやa,bなどは変数ということは分かるのだけれどその前に書く0や1,9がなんなのか良く分からない。
360 名前:デフォルトの名無しさん mailto:sage [02/09/20 22:08] Pascalは知らんが、Cでいう共用体(union)ってやつだな。 番号はどの構造をとるかっていう構造識別番号みたいな奴で、byte型なわけだ。 無名だから使ってないみたいだけど、定義の時は必ず適当に決めなきゃならんのかも?
361 名前:デルファイの名無しさん mailto:sage [02/09/20 22:11] Var r : record case TAG: byte of 0 : ( i : Longint ); 1,9: ( a : extended); (1) : ( b :array[0..9] of byte ); end; のように、タグフィールドを入れられるのですが、これは省略可能なのです。 この場合、TAGが0ならaとbにアクセスするとエラーになるPascal実装もあった…かな? (DelphiだとTAGは単なるメンバ以上の意味を持ちませんが)
362 名前:デフォルトの名無しさん [02/09/22 11:48] なるほど共用体か。(Cも少しやっていたので分かる) それで先頭のアドレスをそろえているのか。 持っているPASCAL入門の本は可変部の説明がなおざりだったんで何の事か良く分からなかったよ。
363 名前:デフォルトの名無しさん [02/09/22 21:56] function(関数)とprocedure(手続き)の違いは返り値の有無と考えても問題ない?
364 名前:デフォルトの名無しさん mailto:sage [02/09/22 22:19] 問題ないです。
365 名前:デフォルトの名無しさん [02/09/23 07:29] そいえばたまにわざわざダミーの返り値を使ってなんでもかんでもfunctionにしてるソースを見ることがあるな。 C出身者が書くとそうなりがちなのかも。
366 名前:デフォルトの名無しさん [02/09/23 07:57] >>365 Cにはvoidがある。 そんなソースを書くのはDQNだけ。