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/
367 名前:デフォルトの名無しさん [02/09/23 11:32] 単にprocedure(手続き)を宣言するのが面倒臭かったのでは?
368 名前:デフォルトの名無しさん mailto:sage [02/09/23 11:38] >>367 > 単にprocedure(手続き)を宣言するのが面倒臭かったのでは? 意味わからん。function の方が面倒と思うが...。
369 名前:デフォルトの名無しさん mailto:sage [02/09/23 13:53] まさか・・・これを・・・? if A then B else C A && B || C
370 名前:デフォルトの名無しさん mailto:sage [02/09/23 22:53] コンポーネントパスカルをダウンロードしたけど、なにげによさげ でも英語できないから難しい。だれか邦訳してくれ言語リファレンス。
371 名前:デフォルトの名無しさん mailto:sage [02/09/23 22:55] www.fit.qut.edu.au/PLAS/ComponentPascal/
372 名前:デフォルトの名無しさん [02/10/05 15:00] 大分下がって来たので揚げ
373 名前:デフォルトの名無しさん [02/10/24 23:37] そろそろ保守
374 名前:デフォルトの名無しさん mailto:sage [02/10/25 00:34] Pascalの参考書探してる人は図書館いってみ。 TPとか、Pascalのがタマーにあったりしてうれしい。 あとは、大学に忍び込んで生協にあったりなかったり。
375 名前:デフォルトの名無しさん [02/10/26 16:03] {$ }で囲まれている部分は何をする為に付けられるもの? 確か{ }で囲まれた部分はコメント部分で、コンパイル時には無視される部分だと記憶しているのだけれど。 {$I PascalOverrides.p}や{$unused ( inCallRef, inUserData ) }などのようにコメントにしては不自然な気がしてならない。 他にも {$IFC UNDEFINED __TRANSLATION__} {$I Translation.p} {$ENDC} なんて記述がある。
376 名前:デフォルトの名無しさん mailto:sage [02/10/26 16:27] コンパイラに対する命令
377 名前:デフォルトの名無しさん mailto:sage [02/10/26 17:39] >>375 ヘルプ嫁。
378 名前:デフォルトの名無しさん [02/10/26 17:54] コマンドラインで指定するコンパイルオプションと同じ。 しかし、コマンドラインでオプションを指定するとそのソース全部に一括してそのオプションが適用されてしまう。 コンパイラ指令としてソース中に記述すれば部分的な適用もできるし、IFなどの制御構造を使った複雑な指定もできる。 例えば、コマンドラインで「 -$O+ 」と指定すると、それはそのプログラム全体が最適化オプションが適用されてしまうが、 ソース中に「 {$O+} 」と書いて指定すれば手続き一つだけについて最適化オプションを適用することもできる。
379 名前:375 [02/10/26 21:21] >376-378 コンパイラ疑似命令かぁ。 どうりでPASCAL入門の何所にも書かれていないわけだ。
380 名前:デフォルトの名無しさん mailto:age [02/10/27 02:14] 古本屋いけ。
381 名前:デフォルトの名無しさん [02/11/03 17:27] 四個の変数 a,b,c,dの最小値を求める IF文だけを用いたプログラムと 中間状態を用いたプログラムを書いてくれませんか?
382 名前:デフォルトの名無しさん mailto:sage [02/11/03 17:42] FUNCTION GetMinimum(a, b, c, d: Integer): Integer; BEGIN IF a < b THEN IF a < c THEN IF a < d THEN GetMinimum := a ELSE GetMinimum := d ELSE IF c < d THEN GetMinimum := c ELSE GetMinimum := d ELSE IF b < c THEN IF b < d THEN GetMinimum := b ELSE GetMinimum := d ELSE IF c < d THEN GetMinimum := c ELSE GetMinimum := d END;
383 名前:デフォルトの名無しさん mailto:sage [02/11/03 17:46] FUNCTION GetMinimum2(a, b, c, d: Integer): Integer; BEGIN IF a < b THEN b := a; IF c < d THEN d := c; IF a < d THEN GetMinimum := a ELSE GetMinimum := d END;
384 名前:381 [02/11/03 18:12] >>382 >>383 Pascalを習い始めたばかりなのです。 助かりました。有難うございました。
385 名前:デフォルトの名無しさん mailto:sage [02/11/12 17:45] 保守
386 名前:デフォルトの名無しさん [02/11/13 17:38] age
387 名前:デフォルトの名無しさん [02/11/24 21:46] function intersection(S1,S2:list):list; var s,p:list; begin interlist(S);p:=S1↑.next; while p≠nil do begin if search(p↑.item,S2)≠nil then insert(S,p↑.item); p:=p↑.next; end intersection:=S end と言うプログラムが本に載ってたんだけど、これってどういう手順で共通集合を出してるかわかんないです。 分かる人いたら、解説キボンヌ
388 名前:デフォルトの名無しさん mailto:sage [02/11/24 21:53] >>387 こりは Pascal 言語の形を借りたアルゴリズムの説明コードだから、説明してくれと 言われても、このコードを読んで。としかいえないような。 集合 (a,c,d,f) と (b,c,f,g) の共通部分を取得するときに、人間ならどうやるか。 ってことをそのまま実装しているだけだぞ。
389 名前:387 [02/11/24 22:31] >>388 begin以下がどのような手順によってS1,S2の共通部分を取得してるかわからないんス。 p:=S1↑.nextってとこはpにS1のどの値を代入?
390 名前:デフォルトの名無しさん mailto:sage [02/11/24 22:35] まずS1の先頭の要素をpに入れる。 pが指す値(item)と同じ値のがリストS2に在るかどうか調べる(search) もしなければ最後まで行ってしまうのでnilになる。 あったら、その値をSにくっつける。 以下、S1の末尾に行くまで繰り返す。 こんなところかな。
391 名前:387 [02/11/24 22:52] >>390 解説サンクスベリーマッチョです S1の先頭の要素をpに入れてから、ループになりますよね? ループの条件はpが空集合でないときで、ってやっていって、S1はいつ先頭の要素から、先頭の次の要素に変わってるのかが分からないです。
392 名前:デフォルトの名無しさん [02/11/24 23:07] データは線型リスト構造だよ。
393 名前:392 [02/11/24 23:30] 線型リストの1個の要素はこんな形式 【[データ本体][次の要素へのポインタ]】 これが一次元に繋がってるのが線型リスト。 [先頭をさすポインタ] ↓ →【[データ1][要素2へのポインタ]】 ↓ ←←←←←←←←←←←←← ↓ →【[データ2][要素3へのポインタ]】 ↓ ←←←←....←←←←← ↓ →【[データn][nil〔終端〕]】 知ってたらスマソ。
394 名前:デフォルトの名無しさん mailto:sage [02/11/24 23:32] その教科書のどこかにある list 型構造体の定義を見直してみてくれ。
395 名前:デフォルトの名無しさん mailto:sage [02/11/24 23:33] >>391 >ループの条件はpが空集合でないときで じゃなくて、pが指す先が存在するかどうかってこと。 392さんの図で指すものがなくなったらend
396 名前:392 [02/11/24 23:45] Pascalの集合型と混同してるのかな。このプログラムは集合型は関係ないよ。
397 名前:392 [02/11/25 00:17] ポインタ型の変数は>>393 の 【[データ本体][次の要素へのポインタ]】 みたいな構造体を指し示すタイプの変数だ。 もっと詳しくいえば、その構造体の存在するメモリ上のアドレスを保持している。 このタイプの変数は、その変数の後ろに「↑」をつけることによって そのレコードの内容にアクセスできる。 ※コーディング時には「↑」は「^」を使う。 ポインタ p が例えば2番目のレコードのアドレスを保持しているなら p^.item と書くことによって 2番目のレコードの item フィールドを参照しているのと同じ結果になる。 (整数が入っているなら writeln(p^.item); などと書ける。) p にはポインタ型の価を代入できる。 p := (3番目の要素のアドレス) みたいに代入すれば、今度は p^.item で3番目の要素の item フィールドを参照できる。 【[データ本体][次の要素へのポインタ]】 この構造体の[次の要素へのポインタ]というフィールドも、またポインタ型だ。 この値で p の値を更新すれば p := p^.next; p を使って次のレコードを参照できる。 こんなふうに使っていくのが線型リスト。(本読んだ方がいいと思うけど)
398 名前:デフォルトの名無しさん [02/11/25 18:53] どうしてPascalのポインタは↑なのにTurbo Pascalのポインタは^なんですか?
399 名前:デフォルトの名無しさん mailto:sage [02/11/25 19:56] 単に、キーボードと印刷の都合と思ふ
400 名前:398 [02/11/25 19:59] Turbo Pascalの^と標準Pascalの↑はどちらが一般的なんですか?
401 名前:399 mailto:sage [02/11/25 20:03] 同じ文字なんだけど、キーボード上に↑は無いので^を使ってるし、 印刷して^は見にくいので↑になっていると思ふ Pascalが生まれた頃は2バイト文字なんて一般的じゃ無かった筈だし
402 名前:398 [02/11/25 20:24] 普通のPascalの↑は、かな変換でのを使用していいってことですよね?
403 名前:デフォルトの名無しさん mailto:sage [02/11/25 21:22] アフ?
404 名前:デフォルトの名無しさん [02/11/25 21:23]
405 名前:387 [02/11/25 23:08] 皆さん解説蟻が鯛です。 とても分かりやすくて感謝してます。 function intersection(S1,S2:list):list; var s,p:list; begin interlist(S);p:=S1↑.next; while p≠nil do begin if search(p↑.item,S2)≠nil then insert(S,p↑.item); p:=p↑.next; end intersection:=S end において、pの必要性がわかりません。 p:=S1↑.next;の部分を消して、以下pをS1としても駄目なんでしょうか?
406 名前:デフォルトの名無しさん [02/11/26 00:01] >>405 言ってることよく分からんよ。
407 名前:デフォルトの名無しさん mailto:sage [02/11/26 00:09] S1, S2は引数にvarが指定されていないので、変更不能だと思いますが、それはさておき、 線形リストはリスト全体を保持しておくために先頭のレコードを指すポインタが必ず必要です。 この値を変更して途中のレコードを指すようにしてしまうと それ以前のレコードを参照する手段が完全に失われてしまいます。 S1 これなら全て参照可能 ↓ 【データ|next】→【データ|next】→【データ|next】→【データ|nil=終端】 S1を変更した場合 S1 ↓ 【データ|next】→【データ|next】→【データ|next】→【データ|nil=終端】 ↑ このレコードが参照不能になる disposeしない限りレコードはメモリ上に残っていますから 参照不能なメモリブロックがメモリ上に残るという まずい事態になります。(メモリリーク?) 線形リストの処理は 先頭を示すポインタはそのままに、 別なポインタ変数を用意して その値を変更して順次リストをたどっていきます。 で、405のような処理を書いた場合は 一度きりなら動くかも知れないが 以降、このリストを参照することができなくなる、というのが結論かな。
408 名前:補足 mailto:sage [02/11/26 00:11] 線形リストはレコードの追加、削除ができますが その場合でも常に全体を参照できる様、 例えば先頭にレコードを追加する場合は 変更後の先頭のレコードをさすようにポインタを変更します。 先頭のレコードを削除する場合は 次のレコードをさすようにポインタの値を変更します。 ところでプログラム中の4行目のp:=S1↑.next; は もしかしたら p := S1 ではないのかと。 S1の一番はじめのレコードが無視されているような気がします。
409 名前:デフォルトの名無しさん [02/11/26 00:38] >>408 つまり、pはS1の値を保持するためにあると言うことかな? >もしかしたら p := S1 ではないのかと。 確かにそんな気がします。 S1の先頭にダミーセルがあることにしてるのかなあ?
410 名前:407 & 408 mailto:sage [02/11/26 00:59] Pの役割はイメージ的には配列の要素を参照する時のインデックスみたいなものかと。 for i:=1 to 10 do if a[i] <= then xxxx; のiがP、aがS1とか。(かなり違うが) 価を自在に変えながらリスト中のレコードを次々と指し示していく役割をするポインタ(P)と 全体を保持しておくために常に先頭を指すポインタ(S1)は 役割が違うと考えた方がいいかも。(追加、削除を伴わない処理の場合)
411 名前:ああ [02/11/26 07:32] 恐らくばりばり既出ネタで恐縮なんですが、 今私は数学系の学部に在籍しておりまして、研究上アルゴリズムや素因数分解 等をコンピュータ上で行わなければならない必要性が出てきました。 時間の関係上、手っ取り早くそのような計算が自在にできるようになりたいのですが、 当方、残念ながらコンピュータはネットする程度でプログラムやC言語、UNIX等の知識は 限りなく0に近いです。。何からはじめればよろしいでしょうか。御指導願います。
412 名前:ああ mailto:sage [02/11/26 07:33] スンマソ、スレ違いでした。。。
413 名前:デフォルトの名無しさん mailto:sage [02/11/26 08:09] >>410 さんが言っているように、 pはいわゆるイテレータというやつで、 S1はリストの先頭を保持するという役割があるので たとえS1でpを代用できてもするべきじゃないです。
414 名前:デフォルトの名無しさん [02/11/27 21:52] Error: Incompatible type for arg no. 2: Got SHORTSTRING, expected LONGINT どなたかこのエラーメッセージのわかる方いらっしゃいますか?
415 名前:デフォルトの名無しさん mailto:sage [02/11/27 22:59] 引数の2個目はLONGINTが来るはずなのにSHORTSTRINGだよボケが
416 名前:デフォルトの名無しさん [02/12/03 23:46] 落ち阻止。
417 名前:デフォルトの名無しさん [02/12/07 17:08] リスト構造をもつ、ポインタ(pointer)型の変数を使用してデータ入力後絶対値に関して昇順に並べ替えたいのですがどうしてもうまくいきません。どうプログラムを書いたらいいでしょうか?
418 名前:デフォルトの名無しさん mailto:sage [02/12/07 17:13] >>417 よくわかりません。
419 名前:デフォルトの名無しさん [02/12/07 17:18] 簡単に言うとポインタを使って昇順の連結リストをつくりたいのですが。
420 名前:デフォルトの名無しさん [02/12/07 17:51] >419 中身を比較したのちポインタを書き換える。それだけ…… 基本情報処理の本のリストに関する部分を読めば直に分かる。
421 名前:デフォルトの名無しさん mailto:sage [02/12/08 01:09] >>419 対象をポインタで持っているのなら、ヒープソートなんかで木構造を一時作って、 それを再度リスト構造に戻すのが良いかも。 汎用的に作るのなら、ソート関数は作り込まず、外部のソート関数を呼び出すよ うにすればよいし。
422 名前: [02/12/08 20:48] コンソールアプリケーションである値を入力したら窓を閉じるにはどうしたらいいですか?
423 名前:デフォルトの名無しさん mailto:sage [02/12/08 20:56] コンソールアプリケーションに窓なぞない。
424 名前: [02/12/08 21:04] >>423 窓って言うか…何て言ったらいいんだろう? Delphiでコンソールアプリケーションを作って実行したらコマンドプロンプトが起動するじゃないですか。 それを閉じたいのですが無理なんでしょうか?
425 名前:デフォルトの名無しさん mailto:sage [02/12/08 21:12] exit(return)
426 名前:422 mailto:sage [02/12/08 21:21] >>425 exit(return)だったら実行できませんでしたがちょっと削ってexitにしたら閉じることができました。 ありがとうございました。
427 名前:デフォルトの名無しさん mailto:sage [02/12/08 22:29] >>462 ごめん、(return) はなんとなくノリで。 DOS 窓の終了と同じ雰囲気で。
428 名前:デフォルトの名無しさん [02/12/09 00:28] >424 DelphiはDelphi板で聞くのが良いよ。
429 名前:デフォルトの名無しさん mailto:sage [02/12/09 03:00] >>425-426 Exitは関数や手続きを抜けるだけじゃない? もちろんprogram .. begin .. end のレベルで実行すればプログラム自体を 抜けるけど。 どこでも即座に終了させたかったらHaltを使うべし。
430 名前:425 mailto:sage [02/12/09 18:03] >>429 ご指摘ありがとう。しばらくDelphi使ってないのでかなり忘れてました。
431 名前:デフォルトの名無しさん [02/12/31 17:01] 逆ポーランド記法をスタックをよういて実現したいのですが、プログラムがうまくかけません。 どなたか教えていただけないでしょうか?
432 名前:デフォルトの名無しさん [02/12/31 18:15] よういて?
433 名前:431 [02/12/31 18:23] もちいてだっての バカ
434 名前:デフォルトの名無しさん [02/12/31 18:45] 用いる。 餅炒る。 モチ要る。
435 名前:デフォルトの名無しさん [02/12/31 18:46] >>431 if (数字) { スタックにpush; } eles if(演算子) { スタックから二つpopして演算; 結果をスタックにpush; } else { error; }
436 名前:IP記録実験 mailto:IP記録実験 [03/01/08 22:23] IP記録実験 qb.2ch.net/test/read.cgi/accuse/1042013605/ 1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:??? そんなわけで、qbサーバでIPの記録実験をはじめましたー。 27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc SETTING.TXT管轄でないということは全鯖導入を視野に、か? 38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l >>27 鋭いです。 73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l >ところで、IPが抜かれて何か今までと変わることってあるのでしょうか? ・今までより、サーバが重くなる。 ・裁判所や警察からの照会があった場合にはIPを提出することがある。
437 名前:デフォルトの名無しさん mailto:sage [03/01/09 00:41] >>1 全板IP記録に追い込まれた今の気持ちをどうぞ。
438 名前:デフォルトの名無しさん mailto:sage [03/01/09 01:01] 記念カキコ
439 名前:デフォルトの名無しさん mailto:sage [03/01/09 01:21] ひろゆきは架空の人物ですよ。
440 名前:デフォルトの名無しさん mailto:sage [03/01/09 01:33] (´皿`;)邪穂でごめん
441 名前:IP記録実験 mailto:IP記録実験 [03/01/09 02:08] IP記録実験 qb.2ch.net/test/read.cgi/accuse/1042013605/ 1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:??? そんなわけで、qbサーバでIPの記録実験をはじめましたー。 27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc SETTING.TXT管轄でないということは全鯖導入を視野に、か? 38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l >>27 鋭いです。 73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l >ところで、IPが抜かれて何か今までと変わることってあるのでしょうか? ・今までより、サーバが重くなる。 ・裁判所や警察からの照会があった場合にはIPを提出することがある。
442 名前:デフォルトの名無しさん mailto:sage [03/01/09 02:08] >>540 逝き遅れの妹発見
443 名前:デフォルトの名無しさん mailto:sage [03/01/09 02:45] >>50 タイプミス スマソ
444 名前:デフォルトの名無しさん mailto:sage [03/01/09 18:27] ======2==C==H====================================================== 2ちゃんねるのお勧めな話題と ネットでの面白い出来事を配送したいと思ってます。。。 ===============================読者数: 138720人 発行日:2003/1/9 年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。 そんなわけで、年末に予告したIP記録ですが実験を開始しています。 「2ちゃんねる20030107」 こんな感じで各掲示板の最下部に日付が入ってるんですが、 20030107以降になってるところはログ記録実験中ですー。 んじゃ! ────────────────────────Age2ch─ ■この書き込みは、Age2chを使って配信されています。 ──────────────────────────── Keep your thread alive ! pc3.2ch.net/test/read.cgi/software/1041952901/l50 ────────────────────────────
445 名前:デフォルトの名無しさん mailto:sage [03/01/10 00:16] qbだけじゃなかったのか
446 名前:デフォルトの名無しさん mailto:sage [03/01/10 09:04] モルモットにされたのか
447 名前:デフォルトの名無しさん mailto:sage [03/01/10 11:02] もうちょっと電波度下げよう。意味不明になりすぎてる
448 名前:デフォルトの名無しさん mailto:sage [03/01/10 11:32] 厨房板の荒らしは削除されたようだ いつか全板で強制表示になるのだろうか? スクリプトくめばどこの板だって荒らせるだろうし
449 名前:デフォルトの名無しさん mailto:sage [03/01/10 12:18] 実験のためにトオルに依頼されてコピペやってるって可能性もあるのか・・。
450 名前:デフォルトの名無しさん mailto:sage [03/01/10 12:47] >>936 それは当然考えてはいますが、小ネタやちょっとした意見を書き込むときにもそれを 意識しなくてはならないというのはしんどい
451 名前:デフォルトの名無しさん mailto:age [03/01/10 13:01] FreePascalはマルチプラットフォームであることを忘れているに、1Penis
452 名前:デフォルトの名無しさん mailto:sage [03/01/10 13:45] つーかちょっと北朝鮮や朝鮮総連を批判しただけでログから身元割れたりしないか心配。 奴ら何しでかすかわからない凶悪な連中だからな。 ログってひろゆきしかみれないのか? 削除人が見れたら問題・・・以前削除に絡んで強請をした奴もいるらしいし
453 名前:デフォルトの名無しさん mailto:sage [03/01/10 14:57] ふむ。
454 名前:デフォルトの名無しさん mailto:sage [03/01/10 16:24] 言いたいことも言えないこんな世の中じゃ ウェー ハッハッハ
455 名前:デフォルトの名無しさん mailto:sage [03/01/10 22:48] 2chのIDてIPを変換してるんだっけ? だったら、全板強制IDにして暗号キーだけ保存しておけばいいんじゃないの?
456 名前:デフォルトの名無しさん mailto:sage [03/01/10 22:55] >>735 書き方がネタっぽすぎw
457 名前:デフォルトの名無しさん mailto:sage [03/01/11 00:12] ex.2ch.net/test/read.cgi/korea/1042022029/ 在日のアサピーが自ら2CHにブラクラ貼ったと自白www 調子に乗ってアタック開始、しっかりログ取られて通報すました。 祭り中です。
458 名前:デフォルトの名無しさん mailto:sage [03/01/11 00:20] 夜勤 ★さんはなんでふだんはBG ★とかキャップを使い分けてるんですか?
459 名前:デフォルトの名無しさん mailto:sage [03/01/11 09:42] 削除板に書き込む時いちいち設定し直すのが面倒臭いから
460 名前:デフォルトの名無しさん mailto:sage [03/01/11 09:45] 元々パク(ry
461 名前:デフォルトの名無しさん mailto:sage [03/01/11 10:16] ======2==C==H====================================================== 2ちゃんねるのお勧めな話題と ネットでの面白い出来事を配送したいと思ってます。。。 ===============================読者数: 139038人 発行日:2003/1/10 なにやら、連日メルマガだしてるひろゆきです。 そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、 全部のサーバに入れてみました。 重くなって落ちたりしてもご愛嬌ってことで。。。 んじゃ! ────────────────────────Age2ch─ ■この書き込みは、Age2chを使って配信されています。 ──────────────────────────── Keep your thread alive ! pc3.2ch.net/test/read.cgi/software/1041952901/l50 ────────────────────────────
462 名前:デフォルトの名無しさん mailto:sage [03/01/11 11:13] フェミホモ荒らしが来なくなるなら まあいいか。。。 悪いことをする気はなかったど、なんだか 夢がなくなるな。 なんつーか、手口のきれいな銀行破りが 捕まっちゃったみたいな気分。
463 名前:デフォルトの名無しさん mailto:sage [03/01/11 13:15] まあ、匿名じゃなきゃできんような自由な言論なんてたかが知れてるしな。 今までの2ちゃんみてりゃ一目瞭然。 匿名のかさをきて暴言はいてる奴らが減っていいかも。
464 名前:デフォルトの名無しさん mailto:sage [03/01/11 16:02] じゃ、おまえが2ch来なければ良い。それだけのこと。
465 名前:デフォルトの名無しさん mailto:sage [03/01/11 16:07] ウェー ハッハッハ PART 2 live2.2ch.net/test/read.cgi/news/1041867442/
466 名前:デフォルトの名無しさん mailto:sage [03/01/12 00:09] ネオむぎを超えるわけない 犯人が17歳以下なら話は別だが
467 名前:デフォルトの名無しさん mailto:sage [03/01/12 00:18] 中国の漬け物ですか?(^_^;)
468 名前:デフォルトの名無しさん mailto:sage [03/01/12 10:32] 231 >判決文にISP責任法への配慮とかいうちゃんちゃらおかしい文面が書いてなけりゃ 253 >>どうも昔から、下級審の裁判官は余計なことを書きたがる。 お前ら判決文を読んだのか? 被告がISP責任法を根拠に削除義務違反はないと主張したから書いてるんだよ。 courtdomino2.courts.go.jp/kshanrei.nsf/$DefaultView/2075F93E3210745849256BED0030F3EF?OpenDocument
469 名前:デフォルトの名無しさん mailto:sage [03/01/12 21:08] IP取るようになったら些細なことでも訴えられるかもな。 ここまで話題性の在るサイトだし。 IP取ってるんだから今までは『訴えても意味無い』って諦めてた 人たちも訴えるようになるかもね。 基本的に訴えられるのは書き込みした人だろうけど、 その様な場所を提供したって事実に変わりは無いから 今まで以上に2chも訴えられるかも…。 推論スマソ
470 名前:デフォルトの名無しさん mailto:sage [03/01/12 21:11] 削除前の手続きの話なんで、発信者の責任の話とはまぜないで欲しいが。
471 名前:デフォルトの名無しさん mailto:sage [03/01/12 21:23] 辞書登録してみた⇒夜勤さん!! ヘ(^^ヘ)(ノ^^)ノ
472 名前:デフォルトの名無しさん [03/01/13 01:22] 3 6 1 4 2 5 をクイックソートで整列させるにはどうしたらいいですか?
473 名前:山崎渉 mailto:(^^)sage [03/01/13 18:26] (^^)
474 名前:デフォルトの名無しさん mailto:sage [03/01/13 19:20] 今GNUパスカルを使って勉強しているんですが freeパスカルとの違いは何かあるんですか? 使える文法が違う、みたいな
475 名前:デフォルトの名無しさん mailto:sage [03/01/13 22:14] 405 名前:心得をよく読みましょう 投稿日:02/12/31 11:04 ID:ADTGAx9x はぁぁぁ。あと、1週間以内で生理・・・。 何事にもむかついてたまらないっ! 生理前って、ブルーになったり、いらいらしたり。。。 ほんと勘弁してって感じ。
476 名前:山崎渉 mailto:(^^)sage [03/01/15 17:52] (^^)
477 名前:デフォルトの名無しさん mailto:sage [03/01/19 02:08] constって何なんですか?
478 名前:デフォルトの名無しさん mailto:sage [03/01/19 19:22] たしかサリエヌの友人だったと思います
479 名前:デフォルトの名無しさん mailto:sage [03/01/20 12:53] >>477 const {定数} BUF_SIZE = 32768;{ Buffer Size = 32768 (8000h) } Ver: string[3] = '1.0'; 定数の事かと… var {変数} argc: integer; argv: string; i,k,l: integer;
480 名前:山崎渉 mailto:(^^)sage [03/01/23 21:53] (^^)
481 名前:477 mailto:sage [03/01/26 02:18] >>479 すいません なかなか書き込むひまがありませんでした レスありがとうございました
482 名前:デフォルトの名無しさん mailto:sage [03/01/28 10:04] www.makie.com/ja/makitips/pascalfun.html Mac用だがここで紹介されているThinkPascalってどうよ? 少しやってみたが、英版なのでエディタで日本語が表示できん・・・
483 名前:デフォルトの名無しさん [03/01/29 00:31] CarbonLibは使えるんだろうか
484 名前:デフォルトの名無しさん mailto:sage [03/01/30 12:01] 上のリンク見る限りでは無理そうだね。 別途コード戦士が必要みたい。 でもそれだったら最初からコード戦士でやった方が良い罠。
485 名前:デフォルトの名無しさん [03/02/02 04:46] >>484 これでいけるのではないでしょうか。 Carbonized Port of THINK Pascal TCL pascal-central.com/carbon-tcl.html
486 名前:デフォルトの名無しさん mailto:sage [03/02/02 05:03] test
487 名前:デフォルトの名無しさん mailto:sage [03/02/04 11:45] >>298 が全然わかんねぇ…(´д`;)
488 名前:デフォルトの名無しさん mailto:sage [03/02/05 18:31] const hexcode: array[0..15] of char = ('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'); function HexStrB(num:byte):string; begin hexstrB:=hexcode[lo(num) shr 4 ]+hexcode[lo(num) and $f] ; end; ten := ' '; num := 0; repeat writeln(HexStrB(buf[num]) + ten + HexStrB(buf[num+1]) + ten + HexStrB(buf[num+2]) + ten + HexStrB(buf[num+3]) + ten + HexStrB(buf[num+4]) + ten + HexStrB(buf[num+5]) + ten + HexStrB(buf[num+6]) + ten + HexStrB(buf[num+7]) + ten + HexStrB(buf[num+8]) + ten + HexStrB(buf[num+9]) + ten + HexStrB(buf[num+10]) + ten + HexStrB(buf[num+11]) + ten + HexStrB(buf[num+12]) + ten + HexStrB(buf[num+13]) + ten + HexStrB(buf[num+14]) + ten + HexStrB(buf[num+15]))); inc(num,$10) until (num = $200);
489 名前:デフォルトの名無しさん mailto:sage [03/02/06 10:33] おお、神!(´д`;)アリガd
490 名前:デフォルトの名無しさん [03/02/10 20:53] Pascalって実用性無いのに勉強しても平気でしょうか?
491 名前:デフォルトの名無しさん mailto:sage [03/02/11 03:47] えーと…、まあ、これからやるならやめときなさい。 Eiffelをお薦めしよう。
492 名前:レイホウ@6歳 mailto:sage [03/02/13 04:49] >>490 C++を勉強しなさい C#はだめだぞ Gnu CppならLinuxでも使用可能だ えいめ〜ん
493 名前:デフォルトの名無しさん [03/03/08 12:55] はげしくホッシュ
494 名前:デフォルトの名無しさん mailto:sage [03/03/08 13:23] >>490 Pascalを勉強する価値がないとしたらそれは 実用的では無いからではなく時代遅れだから。 昔は教育用言語として教えられてはいたけど 今ではJavaとSchemeに取って代わられたよ。
495 名前:デフォルトの名無しさん mailto:sage [03/03/08 13:23] と、一ヶ月前のレスに混じれ酢してみました。
496 名前:デフォルトの名無しさん [03/03/29 11:11] 10年程前にPC-DOS+Turbo Pascal 7で作ったプログラムを動かしたいのですが、困ったことに最近のパソコンはEMSメモリが使えないものが多いのです。 新型パソコンでEMSメモリ使用可能なものがあったら教えてください。
497 名前:デフォルトの名無しさん mailto:sage [03/03/29 11:14] DOS 上で動かすか、エミュレータ上で動かせば。
498 名前:デフォルトの名無しさん mailto:sage [03/03/29 11:21] >>496 DOS5.0の時とかXMSをEMM386でEMSに化けさせてたと記憶してるけど。
499 名前:デフォルトの名無しさん [03/04/01 21:59] 496です。 497さん498さんレスありがとうございます。 >DOS 上で動かすか、エミュレータ上で動かせば。 ハードの問題なのでどちらの方法でも動かないのでは? システムコマンダーでWinとDosのデュアルブートにするつもりなのですが
500 名前:デフォルトの名無しさん mailto:sage [03/04/01 22:08] >>499 間を取ってWindows3.1とかどうだ? って言うかVMWareでも使った方が楽ちんな予感。
501 名前:デフォルトの名無しさん mailto:sage [03/04/01 22:21] EMS だけの話なら EMS をエミュればOK! 昔やった記憶があるが具体的には忘れた。 ただ楽するなら、500(おめ!)さんの 言うようにVMWareでも使った方がいい。
502 名前:デフォルトの名無しさん mailto:sage [03/04/02 09:02] 現在Pascal勉強中の初心者です。 Pascalって実用性が無いんですか? CGIをやるのに適してるって聞いたんだけど・・・
503 名前:デフォルトの名無しさん mailto:sage [03/04/02 12:48] 趣味でやるぶんにはかまわないでしょ。
504 名前:デフォルトの名無しさん mailto:sage [03/04/02 14:04] 実用性はあるが、CGIってのは多分Perlと混同してる(w Pure Pascalじゃなくて有償版Delphi/Kylixなら高機能なCGIも作れないでもない
505 名前:デフォルトの名無しさん mailto:sage [03/04/02 23:07] >Pure Pascalじゃなくて有償版Delphi/Kylixなら高機能なCGIも作れないでもない アホがいます。
506 名前:デフォルトの名無しさん mailto:sage [03/04/02 23:14] WebSnapとかIntraWebとか、まあ知らないなら知らないでいいけどさ
507 名前:デフォルトの名無しさん mailto:sage [03/04/03 06:10] >>506 何でもかんでもライブラリがないと何もできないかわいそうな人がいます。
508 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [03/04/12 16:13] こういう書き込みの後でなんですが, Cのscanfに相当する機能を実現する関するのライブラリって どこかにありませんでしょうか. 以前自作したのですが作りが下手なのか処理が重すぎて…. テキスト解析はちゃんと本を読んで勉強しないとダメかな.
509 名前:デフォルトの名無しさん mailto:sage [03/04/12 20:05] >>508 > Cのscanfに相当する機能を実現する関するのライブラリって > どこかにありませんでしょうか. scanf のソース見てポーティングすればいいとおもうけど。 可変引数の扱いをどうするかが問題かと思うが。
510 名前:デフォルトの名無しさん mailto:sage [03/04/12 20:58] >>509 オープン配列とかで何とかならない?
511 名前:山崎渉 mailto:(^^) [03/04/17 15:47] (^^)
512 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [03/04/22 22:42] >>509-510 レスが遅くなってごめんなさい…. scanfのソースは探してみます.ありがとうございます. ちなみに可変引数は前に作ったときは配列型で対応していました. var指定が出来なかったのでポインタを渡す仕様にしていました.
513 名前:デフォルトの名無しさん [03/04/25 04:18] JIS PASCAL水準1準拠の処理系ってありませんか。 またpacked array[0..7] of booleanを1バイトに詰め込んでくれたり、set of 0..256が書けたりするのも…。 どれも実装が面倒なんだろうか…
514 名前:bloom [03/04/25 04:26] homepage.mac.com/ayaya16/
515 名前:デフォルトの名無しさん mailto:sage [03/04/25 04:40] そういえば規格では set of Charが集合の最大サイズでしたっけ。 ってことはCharがWideCharになるDelphi.NETではset of 0..65535が可能に!?
516 名前:513 [03/04/25 05:05] そうかset of charが集合の最大サイズなのか… JIS規格書が会社なんで確認できないな。 基底型は任意の順序型だと思っていた。
517 名前:デフォルトの名無しさん [03/04/25 05:17] >>502 実用性がないとかまことしやかに言われていますが、そんなことはないです。 CGI は、言語が標準入力と標準出力をサポートしていれば、どんな言語でも可能です。
518 名前:デフォルトの名無しさん [03/04/25 05:44] www.gnu.org/brave-gnu-world/issue-12.ja.html より: GNU Pascal は Borland Pascal 7.0 という「標準のようなもの (quasi-standard)」だけでなく、ISO 7185 Pascal Standard を完全に サポートしている唯一のコンパイラです。
519 名前:デフォルトの名無しさん [03/04/25 05:46] >>517 適用範囲を限定すればJIS PASCALでも実用性が見いだせるということですね 逆に何らかの拡張を施さないと適用範囲は広がらないと。
520 名前:513. [03/04/25 06:05] >>518 ありがとう。 危うく自前でコンパイラ作りそうだったよ。 GNU PASCAL検討してみます。
521 名前:デフォルトの名無しさん mailto:sage [03/04/25 06:11] CodeWarrior Pascal packed array[0..7] of booleanを1バイトに → 出来る。 set of 0..256が書けたり → set of 0..2047までOK。 (256byte) THINK Pascal packed array[0..7] of booleanを1バイトに → 不可 set of 0..256が書けたり → set of -32768..32767までOK。
522 名前:デフォルトの名無しさん [03/04/25 06:14] >>519 JIS Pascal と厳密にやると、分割コンパイルができないなど不便はありますが、 JIS/ISO 互換でやりたいなら、Turbo Pascal や Delphi のようなものを使って、 分割コンパイルは拡張機能を利用し、コード自体は、できる限り JIS/ISO 標準で 書くということなら、ISO C 言語程度の実用性は出てきます。 Turbo Pascal や Delphi が完全に ISO/JIS に準拠しているわけではありませんが、 かなり標準 Pascal の文法をサポートしています。 この本は、Turbo Pascal や JIS/ISO 標準 Pascal その他の文法に差異があるところに 注釈が入っていてよい本です。 演習PASCALとその応用 www.saiensu.co.jp/books-htm/ISBN4-7819-0507-2.htm
523 名前:デフォルトの名無しさん [03/04/25 06:25] >>513 手元の Linux に入っていた GNU Pascal 2.95.4 でやってみましたらできるようです。 サンプル・ソース: program iso(input, output); var a : packed array[0..7] of boolean; b : set of 0..65535; begin writeln('hello'); end. gpc -o iso iso.p とやったら、 iso.p:5: warning: integer set size limited to 65535 elements from low bound iso.p:5: warning: use `--setlimit=NUMBER' to change the limit at compile time と出たので、 gpc --setlimit=65536 -o iso iso.p としたら、エラーも警告もなくコンパイルできました。 動作は未確認ですが (^^ ちなみに、GNU Pascal は cygwin を使えば Windows でも動きます。
524 名前:動画直リン [03/04/25 06:26] homepage.mac.com/hitomi18/
525 名前:デフォルトの名無しさん mailto:sage [03/04/25 06:30] こうしてみるとDelphiって基礎部分が貧弱ですねぇ。 確か標準ってオープン配列で procedure A(const B: array[L..H] of Integer); なんて構文も使えませんでしたっけ?
526 名前:513. [03/04/25 06:44] >>521 ありがとう 最近の処理系は制限が少しずつ取れてきてるのですね packed set of -maxint..maxintはどうだろう。 コンパイル出来ても実行は出来なくて当然だとは思うが… CのビットフィールドとPASCALの詰めあり構造型の性質がそっくりなのは偶然?
527 名前:デフォルトの名無しさん [03/04/25 06:45] あ、でも packed array[0..7] of boolean は 2 バイトになりました。0..15 まで 2 バイトで、0..31 は 4 バイト。これじゃだめですかね。 オプション指定もあるのかもしれませんが。
528 名前:デフォルトの名無しさん [03/04/25 06:46] >>527 GNU Pascal でのことです。
529 名前:デフォルトの名無しさん [03/04/25 06:55] GNU Pascal マニュアルでつ。 www.gnu-pascal.de/gpc/index.html
530 名前:513. [03/04/25 06:58] >>527 多分それは各要素に不定値を表すビットが含まれているんじゃないかと。
531 名前:デフォルトの名無しさん [03/04/25 07:04] GNU Pascal で c : set of -10..65535; とおりました。
532 名前:デフォルトの名無しさん mailto:sage [03/04/25 07:05] >>530 単に2byte単位でしか割り当て出来ないだけのような
533 名前:513. [03/04/25 07:14] >>530 そういわれればそうだな。はやとちりでした。 実行環境に適切な境界迄余分なバイトが詰められるのは構わないです。
534 名前:デフォルトの名無しさん [03/04/25 07:26] www.k-514.com/
535 名前:デフォルトの名無しさん [03/04/25 08:09] GNU Pascal で set -65535..65535 は gpc --standard-pascal --setlimit=131071 でとおりました。
536 名前:521 mailto:sage [03/04/25 08:28] 訂正;THINK Pascalでもpacked array[0..7] of booleanは1byteでした。 >>526 >packed set of -maxint..maxintはどうだろう。 >コンパイル出来ても実行は出来なくて当然だとは思うが… maxintが32767なのでTHINK Pascalでコンパイル&実行できます。 集合はもともと1bit扱いなのでpackedがついてもつかなくても 変数のサイズは同じです。 エラトステネスのふるいで素数を求めるプログラム、 set of 0..maxint (32767)でコンパイル&実行できました。 最後の3つの素数 = 32717 32719 32749
537 名前:デフォルトの名無しさん [03/04/25 08:52] >>536 エラトステネスのふるいって、集合型でどうやるんですか? 0 から n までの配列を用意して、素数なら true、合成数なら false にしていく、 というものだと思うんですが。
538 名前:別人 mailto:sage [03/04/25 08:59] set of Xもarray[X] of Booleanも、言語仕様上はともかく役割としては変わらないよ。 配列で A[i] → 集合で i in A A[i] := True → Include(A, i) A[i] := False → Exclude(A, i) Adaなんか開き直ってBoolean配列に集合演算の能力持たせてるし。
539 名前:デフォルトの名無しさん mailto:sage [03/04/25 09:07] やってることは配列を使うのと大差ない。 はじめに[2,3,4,5,6..maxint]という集合を用意しておいて nの倍数を集合から除去していくだけ。
540 名前:デフォルトの名無しさん [03/04/25 11:12] エラトステネスのふるい、集合型バージョン。こんなんでできました。 コンパイル・コマンド: gpc --standard-pascal --setlimit=65536 -o primenumber primenumber.p program primenumber(input, output); const n = 65535; var prime : set of 0..n; i : integer; j : integer; begin prime := [0..n]; for i := 2 to n do if prime >= [i] then begin j := i + i; while j <= n do begin prime := prime - [j]; j := j + i; end end; for i := 2 to n do begin if prime >= [i] then writeln(i); end end.
541 名前:デフォルトの名無しさん [03/04/25 11:16] 空白が崩れた。スマソ。 program primenumber(input, output); const n = 65535; var prime : set of 0..n; i : integer; j : integer; begin prime := [0..n]; for i := 2 to n do if prime >= [i] then begin j := i + i; while j <= n do begin prime := prime - [j]; j := j + i; end end; for i := 2 to n do begin if prime >= [i] then writeln(i); end end.
542 名前:デフォルトの名無しさん mailto:sage [03/04/25 11:32] >>541 &ensp;の嵐で何が書かれているのかさっぱりわからん。
543 名前:デフォルトの名無しさん [03/04/25 12:02] >>542 あれ、そうですか。私 Opera なんですけど、大丈夫です。 ブラウザ依存なんでしょうか。すみません。
544 名前:デフォルトの名無しさん [03/04/25 12:03] >>543 IE 6 では大丈夫です。
545 名前:デフォルトの名無しさん [03/04/25 12:44] そうそう、>>541 の結果ですけれど、最後の 3 つは、65497、65519、65521 でした。
546 名前:513 [03/04/26 02:07] 型T=set of 0..maxintの各元表記全体からmaxint+1ビットの符号無し整数への1対1写像は定義できるよな? もし定義できるのならinteger型の範囲は遙かに越えてしまうな で、更に(有限)整数上の加法と一致するように型T上の加法をうまく定義して…(略) 普通はintegerの配列で実現する多倍長整数とは一風変わった整数(環)が出来そう これをリストに持たせてもっと大きな数に対する〜のふるいが… 工夫しないとメモリ不足になりそうだな 或いはset of -maxint..maxintを基数2の固定小数点表現とみなすのも面白そうだ 体調が回復したらやってみよう
547 名前:デフォルトの名無しさん mailto:sage [03/04/29 18:56] We Love Pascal.
548 名前:山崎渉 mailto:(^^) [03/05/22 05:01] ━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―
549 名前:山崎渉 mailto:(^^) [03/05/28 12:52] ∧_∧ ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。 =〔~∪ ̄ ̄〕 = ◎――◎ 山崎渉
550 名前:デフォルトの名無しさん mailto:sage [03/05/28 21:24] community.borland.com/museum/ のTP5.5のとこからTurboPascalのOOP入門が落とせる。 AppleのObject Pascalレポートの名前が書いてあるので、 やっぱObjectPascal="object"型のあるPascal、でいいらしい。 だからどうした、と言われると困るが
551 名前:デフォルトの名無しさん mailto:age [03/06/13 17:06] 良スレの予感
552 名前:デフォルトの名無しさん mailto:age [03/06/26 22:36] その教科書のどこかにある list 型構造体の定義を見直してみてくれ。
553 名前:デフォルトの名無しさん mailto:sage [03/07/03 18:50] Lazarusの落とし方がわからん...
554 名前:デフォルトの名無しさん [03/07/03 20:20] 初心者から質問です 10人分の学生の成績データを打ち込み、 次に10点区切りでヒストグラムを出力するプログラムを書こうとしています。 現在ヒストグラムの作り方がちとわかりません。どんな形のヒストグラムでもいいのでプログラムソースを教えてもらえないでしょうか?
555 名前:デフォルトの名無しさん mailto:sage [03/07/03 20:34] if (点数 => 0) and (点数 < 10) then ヒストグラム[1] := ヒストグラム[1] + 1; if (点数 => 10) and (点数 < 20) then ヒストグラム[2] := ヒストグラム[2] + 1; ... と並べて書くとか。
556 名前:デフォルトの名無しさん [03/07/03 20:39] >>554 学校の課題だろうと思うんで、ここでいきなり答えを書くのはちょっとね。 自分でどこまでやったん?
557 名前:デフォルトの名無しさん mailto:sage [03/07/03 20:43] PROGRAM Histogram; VAR data: ARRAY[1..5] OF INTEGER; i, j: INTEGER; BEGIN data[1] := 0; data[2] := 1; data[3] := 4; data[4] := 2; data[5] := 1; FOR i := 1 TO 5 DO BEGIN Write('Fraction ' + IntToStr(i) + ':'); FOR j := 1 TO data[i] DO Write('*'); WriteLn; END; END.
558 名前:デフォルトの名無しさん [03/07/03 20:43] まず、「ヒストグラム」とは何か、わかっているか。 プログラムの流れとしては (1)データの入力 (2)集計 (3)ヒストグラムの出力 に分かれるわけだが。
559 名前:デフォルトの名無しさん mailto:sage [03/07/03 20:48] スマソ>556
560 名前:デフォルトの名無しさん mailto:sage [03/07/03 22:42] 集合型はフラグくらいにしか使ったことなかったけど なかなかエレガントな使い方があるものだね 感心しますた
561 名前:デフォルトの名無しさん [03/07/11 15:43] 学校の課題で『ブラックジャック』作ることになったんですが どなたか、教えていただけませんか。
562 名前:デフォルトの名無しさん mailto:sage [03/07/11 21:34] >561 取り敢えず「手塚治虫」で検索しとけ。
563 名前:デフォルトの名無しさん [03/07/12 23:44] >>561 カードゲームなら実際のカードを使って一人遊びすれば必要な構造が見えてくるぞ。
564 名前:デフォルトの名無しさん [03/07/13 00:06] 一人遊び? ハァハァ
565 名前:名無し@沢村 [03/07/13 00:08] >>562 取りあえずじゃねーんだよ!! おまいはタンスとかあってなっとらんぞ!!! jbbs.shitaraba.com/computer/7294/
566 名前:デフォルトの名無しさん mailto:sage [03/07/13 00:11] A U T H O R D A T A 本田 守さん -------------------------------------------------------------------------------- 名前 本田 守/ほんだ まもる ハンドル Mr.あねさん ホームページ www2.neweb.ne.jp/wd/wonder/ hp.vector.co.jp/authors/VA015412/ MESSAGE プログラムの勉強をはじめて1年とちょっとになります。まだまだ高度なものを作るには程遠いですが、先だっては某社のプログラミングコンテストに入賞させていただきました。 -------------------------------------------------------------------------------- S O F T W A R E -------------------------------------------------------------------------------- Windows95/98/Me/アミューズメント ●KIKU おど〜る 音楽CDをかけるとキャラクターが踊ります
567 名前:デフォルトの名無しさん [03/07/13 03:20] 集合型にシフト演算子があったらなぁ
568 名前:デフォルトの名無しさん mailto:sage [03/07/13 05:41] それは集合なのか?
569 名前:デフォルトの名無しさん [03/07/13 12:46] ビットの集合です
570 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [03/07/13 14:37] >>562 あの漫画の題名はトランプのそれとは無関係だそうです. …じゃなくて,どうしてプログラミングを教えている学校の先生は 生徒の理解度を無視してこういう課題を出すのか理解に苦しみます. とりあえず>561はじゃんけんゲームは作れますか?
571 名前:561 mailto:sage [03/07/14 00:38] >570 もちろん作れません 何かヒントでもいいんでおねがいします。
572 名前:デフォルトの名無しさん [03/07/14 08:12] >>571 ゲームのルールをよく吟味して場にある有形、無形のものを列挙してみんさい
573 名前:デフォルトの名無しさん mailto:sage [03/07/14 09:00] カードをとってくる関数と 勝敗を判定する関数と 手に持ったカードを表示する関数と 入力を受け付けてカードをとるか終了するか決める関数を書けばいい。
574 名前:デフォルトの名無しさん [03/07/14 11:30] データ構造決めなきゃ片手落ち
575 名前:デフォルトの名無しさん [03/07/14 13:50] 綺麗なお姉さんのパイパンおま○こ生写真を発見! plaza16.mbn.or.jp/~satchel/omanko_marumie/ これはタマラン…(´Д`;)ハァハァ
576 名前:561 mailto:sage [03/07/14 14:05] >>573 関数が使っている教科書にあまり載ってないんで 何かいいサイトあったら教えてください
577 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [03/07/14 14:46] >>571 簡単なゲームプログラムを解説したサイトか入門書を見つけてみて. やりたい処理をプログラムというカタチにするというのは一番基本的な能力であり, 一つや二つのヒントで解決する問題ではありません. でもこれさえクリアすればプログラミングは半分マスターしたようなものです.
578 名前:デフォルトの名無しさん mailto:sage [03/07/14 16:06] ルール見たけど結構複雑。ま、そこまで要求してないのかもしれんが。 「無限デック使ってます」って言えばカードの残り考えなくてもすむかも。 (ハートのAが10枚出てきても知らんふり。)
579 名前:山崎 渉 mailto:(^^) [03/07/15 09:45] __∧_∧_ |( ^^ )| <寝るぽ(^^) |\⌒⌒⌒\ \ |⌒⌒⌒~| 山崎渉 ~ ̄ ̄ ̄ ̄
580 名前:デフォルトの名無しさん mailto:sage [03/07/23 20:52] 良スレ保守
581 名前:デフォルトの名無しさん mailto:age [03/07/24 18:19] Pascalの集合型と混同してるのかな。このプログラムは集合型は関係ないよ。
582 名前:デフォルトの名無しさん mailto:sage [03/07/25 01:14] どのプログラム?
583 名前:デフォルトの名無しさん [03/07/27 17:35] grape.astron.s.u-tokyo.ac.jp/~makino/kougi/jousho/kougi-98Ww/note12.html ここの練習1なんですが、どのように回答するのがスマートなんでしょうか。 学生番号用のソート手続きをもうひとつ加えて場合分けするのはあまりよくないような気がするんですが、 他に思い浮かばないんです。
584 名前:デフォルトの名無しさん mailto:sage [03/07/27 21:04] 比較用関数を複数作って関数ポインタで切り替えて使う。
585 名前:デフォルトの名無しさん mailto:sage [03/07/27 21:06] ソート用の手続きをつくる。 引数は点数でソートするか学生番号でソートするかを示す。 「student_record」と「ソートの引数」を引数にとる関数をつくる。 返り値は点数か、学生番号。 この関数をつかってソートをつくる。 あんまり効率よくなさそうだけど。
586 名前:デフォルトの名無しさん mailto:sage [03/07/27 21:45] function CompareTensu(var S1, S2: student_record): Boolean; function CompareBango(var S1, S2: student_record): Boolean; って比較する関数を適当に作って。 var Compare: function(var S1, S2: student_record): Boolean; begin if 点数でやるなら then Compare:=CompareTensu else Compare:=CompareBango; あとはCompareで比較してソートで良いと思うよ。 end;
587 名前:デフォルトの名無しさん [03/07/27 22:45] iアプリ作りたいんですけどどーしてよいか・・ 作成講座ページ紹介してください。 あと質問なんですが、これだけでも作れますか?ブロック崩し(505対応版) win98(HSPダウンロード済み)
588 名前:デフォルトの名無しさん mailto:sage [03/07/27 22:51] iアプリはi-mode Javaでしょ。 HSPじゃ無理。 DoCoMo Net - 製品・サービス - i-mode - iアプリコンテンツの作成について www.nttdocomo.co.jp/p_s/imode/java/index.html
589 名前:583 mailto:sage [03/07/27 23:14] なるほど。ありがとうございます。 >>585 と>>586 の手法は同じではないですよね。 かなり参考になりました。 ですが、585さんの >ソート用の手続きをつくる。 >引数は点数でソートするか学生番号でソートするかを示す。 これを具体的にどうしたらよいのかぜんぜんわからないんです・・・ 例題だと、 if student[i].score < student[j].score then begin で点数で比較してますよね。 これを点数だけではなく番号でも比較できるにするためにはどうしたらいいのでしょうか。
590 名前:デフォルトの名無しさん mailto:sage [03/07/27 23:29] procedure sort(x: ...); ... if hoge(student[i], x) < hoge(student[j], x) then begin って書いて、hogeも書く。
591 名前:デフォルトの名無しさん mailto:sage [03/07/27 23:40] >>589 比較部分を関数にするだけだって function CompareTensu(var S1, S2: student_record): Boolean; begin CompareTensu:=(S1.score < S2.score); end; function CompareBango(var S1, S2: student_record): Boolean; begin CompareBango:=(S1.id < S2.id); end; で>>586 のようにCompareTensuとCompareBangoのどっちか使いたい方をCompare変数に入れる。 どっちの比較方法を使うかはコマンドラインオプションで切り替えたりすると良い。 例えば Compare:=CompareTensu; for I:=1 to ParamCount do begin if ParamStr(I)='/b' then begin Compare:=CompareBango; Break; end; end; でコマンドラインに/bを付ければCompareが番号で比較、付けなければ点数で比較になる。 あとは if Compare(student[i], student[j]) thenに変えて終わり。 Delphiで動作確認済み
592 名前:デフォルトの名無しさん mailto:sage [03/07/27 23:55] if (x = Tensu and student[i].score < student[j].score) or (x = Bango and student[i].id < student[j].id) then begin ってベタに書いてもいいし。 条件式を関数にまとめて if x = Tensu then Result := student[i].score < student[j].score else if x = Bango then Result := student[i].id < student[j].id else Result := false; とか。(case文忘れてしまったよ)
593 名前:デフォルトの名無しさん mailto:sage [03/07/28 00:35] なるほどなるほど。 かなりよくわかりました! ここは本当にすごい人が来るんですね。 驚きました。
594 名前:デフォルトの名無しさん mailto:sage [03/07/28 00:47] すごくはないよ。基本的なことだし。 動的な関数を作りたいなと思って Pascalの上で実現してしまったとかならすごいと思うけど。
595 名前:デフォルトの名無しさん mailto:sage [03/07/30 12:17] Lazarusの落とし方知ってるひといますか?
596 名前:デフォルトの名無しさん mailto:sage [03/07/30 14:39] 「ハノイの塔」とやらの問題解決プログラムを教えて下さい。 本気で何がなにやら・・・。
597 名前:デフォルトの名無しさん mailto:sage [03/07/31 10:50] procedure Hanoi(n: interger; from, to, via: hoge); begin if n = 1 then .... from から to へ一枚写す else begin hanoi(n-1, from, via, to); hanoi(1, from, to, via); hanoi(n-1, via, to, from); end end;
598 名前:596 mailto:sage [03/07/31 21:32] どうもありがとうございます。 なんだかエラーが沢山出るんですけど、貼り付けるだけじゃ駄目なのでしょうか。。。 厨ですみません。
599 名前:デフォルトの名無しさん mailto:sage [03/07/31 22:51] hogeと .... from から to へ一枚写す のところをきちんとかかないとダメ。 hogeを文字列にして 移動を表示するようにするとか。 writeln(from + 'から' + to + 'へ移動'); Pascalの細かいところ忘れたんで正しいかどうか解らないけど。 再帰するにはforwardとか要るような気もするな。
600 名前:山崎 渉 mailto:(^^)sage [03/08/02 02:15] (^^)
601 名前:山崎 渉 mailto:(^^) [03/08/15 16:21] (⌒V⌒) │ ^ ^ │<これからも僕を応援して下さいね(^^)。 ⊂| |つ (_)(_) 山崎パン
602 名前:デフォルトの名無しさん [03/08/18 22:47] たまにはageて質問を。 標準的なpascalで、basicでいう cls; locate(10,10); print "OK?"; みたいなのは出来ますか?
603 名前:デフォルトの名無しさん [03/08/18 23:26] page(output);10個のwriteln(output);10個のwrite(output,' '); っていうのは後戻りできない上に上書きしてしまうから無理だな。 cursesみたいに1画面分の2次元配列を取ろうかともおもたけど、画面の大きさを取る方法はJIS-PASCALにはない。 処理系依存の機能を仮定しないと無理っぽい。
604 名前:デフォルトの名無しさん mailto:sage [03/08/19 00:00] 無理ですか。 あ、そっか。画面の大きさが分からないから、 1ページ分書き直してスクロールアップ するのも無理だ。うーむ。
605 名前:デフォルトの名無しさん mailto:sage [03/08/19 08:47] プログラムパラメタに画面の大きさを渡してもらえばいいんだった。 program curses(input, output, ScreenWidth, ScreenHeight); var ScreenWidth: integer; ScreenHeight: integer; Screen: packed array[1..256, 1..256] of char; {こんだけあったら大抵間に合うでしょ} procedure cls; procedure locate(x: integer; y: integer); procedure print(packed array[u..v] of char); procedure reprint; ってどう?
606 名前:デフォルトの名無しさん mailto:sage [03/08/19 12:55] そういう手もあるか。 でも、画面の大きさを取得するのに、処理系毎の 工夫が必要。つーか、無理な場合もありそうな予感。 それよりも、独自に拡張して、cls, locateなどを 処理系毎に作るのが良いような気がしてきた。 ・・・でも、それやってると、キリがないし、 実力の範囲を超えそうです。
607 名前:デフォルトの名無しさん mailto:sage [03/08/19 21:10] 画面制御ライブラリを1つだけ用意する。 実体は各処理系に移植されたC言語のcursesライブラリを呼び出すだけ。 外部ライブラリの実装方法に規格上、規定はないのでやりたい放題。 cursesが移植されていない処理系はライブラリの仕様を公開してユーザーに任す。 というのは駄目?
608 名前:デフォルトの名無しさん mailto:sage [03/08/22 00:10] 標準的なPascalの文字変数ってstring[255]ですよね? で、var s:string[255]; という状態で、 1行ずつreadln(f,s); で読んでいくとして。 もしも1行の長さが255バイト以上だったら、 どうなるんでしょう。 アホな質問ですみません。
609 名前:デフォルトの名無しさん mailto:sage [03/08/23 00:26] 後ろの方がカットされます。
610 名前:デフォルトの名無しさん mailto:sage [03/08/23 05:32] 1行が255バイト以上の行を含むテキストファイルの読み込みは、 どうしたら良いのでしょう?
611 名前:デフォルトの名無しさん mailto:sage [03/08/23 05:53] DelphiでもFreePascalでも、大抵は長い文字列を持ってるんじゃないかな…。 無いならChar単位で読むとか。
612 名前:デフォルトの名無しさん mailto:sage [03/08/23 09:49] 初心者質問ですいません。 Dev-pascalはどうやってアンインストールするのでしょうか? リードミーに載ってないんですが・・・。
613 名前:デフォルトの名無しさん [03/08/23 10:28] >>610 var f: text; s: string[255]; begin while not eoln(f) do read(f, s); readln(f); end
614 名前:610 mailto:sage [03/08/23 22:26] >>611 Delphiの無限とも言える長さの文字列は、 便利で良いですねぇ。しかも、CommaTextで 自動的にCSVを切り分けてくれるし。(日本語対応で) でも、今はちょっと長い文字列は無理みたい。 というか、やりたいのはCSVの読み込みなんですけど、 ひょっとしたら1行を一度に読み込むんじゃなくて、 1文字ずつ分析して、項目を切り分けながら 読み込む方が良いのかな? ひょっとして、アルゴリズムって、公開されてる?
615 名前: ◆R/rLuLKeEI [03/08/27 02:02] >>614 >ひょっとして、アルゴリズムって、公開されてる? 理論的には有限オートマトン、正規表現、字句解析、構文解析などを検索すれば、いいんじゃないかな。 CSV形式をうまく構文(文法)に書き下す事が出来れば、ある程度形式的にプログラムに落す方法があるよ。
616 名前:デフォルトの名無しさん mailto:sage [03/08/27 02:10] >>614 C#のでよければ。なんとなくは分かると思うよ。 onigiri.s3.xrea.com:8080/csharp/index.php?%5B%5BTips%2FCVS%A4%F2%CA%AC%B3%E4%A4%B9%A4%EB%5D%5D
617 名前: ◆R/rLuLKeEI mailto:sag [03/08/27 02:44] >>616 そだね、CSVごときに有限オートマトンとか大袈裟だったな。 で、これは日本語対応?
618 名前:デフォルトの名無しさん mailto:sage [03/08/27 03:15] C#に日本語非対応なコードなど無い。
619 名前:デフォルトの名無しさん mailto:sage [03/08/27 04:41] 無知の知ったか。
620 名前:デフォルトの名無しさん mailto:sage [03/08/27 09:04] >>602 ANSIエスケープシーケンスを使う
621 名前:610 mailto:sage [03/08/27 10:13] >>620 おおっ!忘れていたが、何か画期的なアイデアに思える。(w と、思ったが、調べてみたらこう書いてあった。 >どの文字列をエスケープシークエンスとして解釈するかは >ソフトウェアによって千差万別であり、統一された規格の >ようなものが存在するわけではない。 (T^T) >>615 ,616 ありがとうございます。それをきっかけに調べてみます。
622 名前: ◆R/rLuLKeEI [03/08/29 00:54] >どの文字列をエスケープシークエンスとして解釈するかは >ソフトウェアによって千差万別であり、統一された規格の >ようなものが存在するわけではない。 なのに、「ANSI【アメリカ規格協会】」を冠しているのが不思議。
623 名前:620 [03/08/29 07:37] 「ANSIエスケープシーケンス」は>>602 へのコメントだよ。 0x1b(ESC)で始まる文字列をコンソールに送ることで 画面、コンソールの位置、文字の色等を制御するもの。
624 名前:デフォルトの名無しさん [03/08/29 07:39] >>623 s/コンソールの位置/カーソルの位置/
625 名前:610 mailto:sage [03/08/29 10:52] 一応、CSVを切り分けられるコードは書けた。 C#の>616のコードは読めなかったので、 適当に考えてやってみた。だけど、""→"に するのとか、漢字コードのチェックとか やってないし、変なCSVを回避するのも できないし、拡張性が無いコードになって しまっている。
626 名前:デフォルトの名無しさん mailto:sage [03/08/29 12:26] Delphiのコンパイラ使おうぜ。
627 名前:デフォルトの名無しさん mailto:sage [03/08/29 19:24] >>622 ANSIエスケープシーケンスも知らないコテハンか。 時代だな。
628 名前: ◆R/rLuLKeEI mailto:sage [03/08/30 03:46] >>627 >ANSIエスケープシーケンスも知らないコテハンか。 >時代だな。 時代ですね。 ANSIエスケープシーケンスは全く知らないわけでもない。 しかし、ここ何年も直接記述したことがないので、すっかり忘れてた。 >>602 Cマガジン1992/5, p.36, Table7(古っ!)によると、全画面消去のESC[2Jとカーソル位置指定のESC[m;nHは当時のどのPCでも共通のようだ。 MINIX本第2版図3-36やhtermでもこの二つは共通でした。 しかし、psterm-fast端末のカーソル位置指定は0x4m;n;などと全然違っていたりする(linuxのtermcapより)。 と、慌てて調べても後の祭。
629 名前:610 mailto:sage [03/08/30 07:35] Cのソースを見ながら、CSV切り分け書いてるんだけど。 Cだとbreak,continueとかで、loopを跳んだり、 文をキャンセルするので、全然参考にならん。
630 名前:デフォルトの名無しさん mailto:sage [03/08/30 14:09] 同じように書けば良いじゃん。
631 名前:610 mailto:sage [03/08/30 16:21] 無理じゃん。 break, continueが使えるか使えないかで、全然変わるよ。 とりあえず、フラグを追加して、似たような動作を確保。 ""→"にするのも出来たし、"なし文字列のスペースを 取り除くのも出来た。変なCSVでなければ、概ね基準通り 切り分けられるようになった。
632 名前:デフォルトの名無しさん mailto:sage [03/08/30 16:40] >>631 えっ… ひょっとして、DelphiやFreePascalにあるSystem.Breakは、独自拡張!?
633 名前:610 mailto:sage [03/08/30 17:13] >>632 知らなかったのか低能(ワラ
634 名前: ◆R/rLuLKeEI [03/08/30 18:31] >>631 >無理じゃん。 >break, continueが使えるか使えないかで、全然変わるよ。 break文、continue文はラベル無しgoto文といわれるように、これらは等価なラベル有りgoto文に変換可能です。 >>632 DelphiやFreePascalのBreak、Continueが手続きであることの方が吃驚! 知らなかった私も低脳かえ?
635 名前:610 mailto:sage [03/08/30 20:04] >633は別人だが。 >>634 もちろん、goto文を使うことも考えたけど、 なんか邪道っぽくない? ちなみに、うちのはTHINK Pascal。
636 名前: ◆R/rLuLKeEI mailto:sage [03/08/30 22:06] >>635 PASCALで大域ジャンプ以外にgotoを使うのは邪道っぽい。 ちなみに、うちのはGNU Pascal。 ただし、JIS-PASCAL(X3008-1990)の範囲内で考えている。
637 名前:610 mailto:sage [03/08/30 22:25] macの場合、NewHandleやNewPointerでメモリーを 確保した場合、メモリー確保に失敗したら OSErrで分かるんだけど。 標準pascalのnewでメモリー確保に失敗したら どうなるの?というか、その判別方法は?
638 名前: ◆R/rLuLKeEI mailto:sage [03/08/30 23:06] >>637 >標準pascalのnewでメモリー確保に失敗したら >どうなるの?というか、その判別方法は? JIS-PASCAL(X3008-1990)には何の記述もない。 必ず成功するかのようにも読める。 というわけで、その判別方法はない。 1.2 規定外事項 (1) 特定のデータ処理システム又は処理系が処理できるプログラム及び データの大きさ又は複雑さの限界並びにそれらの限界を超えた場合の措置。
639 名前:デフォルトの名無しさん mailto:sage [03/09/01 02:23] >635 ・continue はループの先頭に戻る ・breakはループを脱出 でいいの? だったらTHINK Pascalでは ・ループ(for,while,repeat)の先頭に戻る → cycle ・ループ脱出 → leave だけど。 他に関数・手続きからの脱出 → exit(関数/手続き名) というのもある。入れ子になった関数/手続きから一気に抜ける事も出来る。
640 名前: ◆R/rLuLKeEI [03/09/01 04:25] ・continue はループの最後に飛びます(C++第2版リファレンスマニュアルr.6.6.2)
641 名前:610 mailto:sage [03/09/01 13:34] >>639 ほんとだ・・・あった・・・。サンクス 標準Pascalの本を見ながらやってたので、気づかなかった。 THINK Pacal入門の後ろの方に、ちらっと載ってた。 あとこれでCとの違いといえば、case文の挙動が ちょっと違う事くらいか。
642 名前:デフォルトの名無しさん mailto:sage [03/09/12 12:33] 例えば、'tarou'と入力させて、 tarouという名前の変数か、 tarouという添え字の配列を作って、 tarou[rika]:=100; とか代入するには、どうすればいい?
643 名前:デフォルトの名無しさん mailto:sage [03/09/12 13:11] できません。
644 名前:デフォルトの名無しさん mailto:sage [03/09/12 16:25] じゃあ、tensuuは固定の名前で、 name:='tarou'; kamoku:='rika' tensuu[name,kamoku]:=100; kamoku:='eigo' tensuu[name,kamoku]:=90; とかは?
645 名前:デフォルトの名無しさん mailto:sage [03/09/12 16:47] 連想配列かあ。純粋なPascalじゃ無理かもね。 拡張構文使っていいならやりようはあるけど。
646 名前:デフォルトの名無しさん mailto:sage [03/09/12 19:06] そうそう。連想配列。無理か・・・。 似たようなことは出来ない? つまり、プログラム自体は一定で、 データの構造次第で変数を増やしたり 減らしたり、参照したり、したい。 いっそ、独自のスクリプト言語を Pascalで作る方法を考えた方がいいか・・・。
647 名前:デフォルトの名無しさん mailto:sage [03/09/12 21:07] 連想配列そのものじゃなくても type Tensuu = record Name, Kamoku: string; Tensuu: Integer end; の配列かリンクリストでいいのでは? SetTensuu(list, name, kamoku, 90); みたいに使えるアクセサ関数を用意しとけば不便ってこともないでしょ。 Delphiなら、配列プロパティとかカスタムバリアントで構文上連想配列作れるけど
648 名前:デフォルトの名無しさん mailto:sage [03/09/13 01:42] ここは「Pascal の初心者」なので、Delphi 等の拡張 Pascal は外すべきでは? で、純正 PASCAL には「連想配列」はありません。 配列の引数として許されるのは列挙可能な型のみです。列挙不可能な数学的実数を表現している実数型も使用できません。 だいたい、純正 Pascal には文字列型すらないんだし.... 連想配列を実現するコードを自分で書くことになります。 それを使って 647 さんの >Delphiなら、配列プロパティとかカスタムバリアントで構文上連想配列作れるけど ってことを実現することができるでしょう。
649 名前:デフォルトの名無しさん mailto:sage [03/09/13 08:59] Delphiで言うところの動的配列も、標準では無いですよね? var hairetu: array [0..maxNum] of integer; の maxNumが変数であるのは許されないもんね。 まあ、この程度ならリストで代用できるから良いけど。 BasicでいうDIM文が懐かしい・・・。 >>648 >連想配列を実現するコードを自分で書くことになります。 どこかに、転がってないでしょうか。 "pascal 連想配列"でググッても、rubyやPHPが出てくる。 それと、連想配列って英語ではなんて言うの?
650 名前:デフォルトの名無しさん mailto:sage [03/09/13 09:45] あそしえーしょんあれい。
651 名前:デフォルトの名無しさん mailto:sage [03/09/13 14:52] 久しぶりにTHINK Pascalのマニュアルを引っぱり出したが。 associtation arrayは載ってない。当然か・・・。 探していたら、こんなのを見つけた。 PASCAL ファンのための CGI プラットフォーム 「Reims」 ttp://member.nifty.ne.jp/ymagami/Reims.html こいつの言語仕様を参考に、associationやlongstringが 標準のPascalでも使えるようなルーチンを作るか。 ・・・って、自分にできるか?(^^; もっと偉い人が作った奴、どっかに落ちてないかなぁ。
652 名前:デフォルトの名無しさん mailto:sage [03/09/14 11:18] PNL Librariesに、連想配列のコードがあった。 だけど、これはMacの、しかもコードウォーリアー用みたい。 少し書き換えればTHINK Pascalでもいけるみたいだけど。 スレ違いになりそうです。失礼しました。
653 名前:デフォルトの名無しさん mailto:sage [03/09/16 03:26] THINK Pascal / Mac でやっているの? 連想配列って、やってることはデータベース検索なんだから、 type Item = record key : string; val : integer end; Items = array[1.1000] of Item; みたいにして for Ind = 1 to 1000 do Items[Ind].Key = SearchKey then のように一致したキーを探すことになる。 毎回、全数検査すると遅くなるからハッシュを使うとか、速度向上の手法はいくらでもあるけど、本質は検索だ
654 名前:652 mailto:sage [03/09/16 20:04] まだソースをざっと見ている段階ですけど、 結構高度なことをやっている様子。 追加、削除、検索など、一通りのルーチンは 揃っているみたい。使い方を解析せねば。
655 名前:レイホウ@6歳 mailto:sage [03/09/24 22:35] 処理速度を犠牲にしてもいいなら for($i = 0; $i < @mob; $i++){ next if ($mob[$i] eq ""); ←何も無かったら次いく $mobname[$i] = $stuff[2] if ($stuff[1] eq $mob[$i]); last if ($stuff[1] eq $mob[$i]); ←見つかったら終了 } これと同じ事をすればいい(↑はperlだけどな) perlとしては↑間違ってる えいめ〜ん
656 名前:デフォルトの名無しさん mailto:sage [03/10/14 04:20] 3つの整数を読み込み、最小値と最大値を出力するプログラムを作りなさい。
657 名前:デフォルトの名無しさん mailto:sage [03/10/14 09:28] >656 宿題?
658 名前:デフォルトの名無しさん mailto:sage [03/10/14 09:32] 最初に 整数を三つ読み込む。 次に 最小値を見つける。そして出力。 最後に 最大値を見つけ、それを出力。 簡単でしょ
659 名前:デフォルトの名無しさん mailto:sage [03/10/14 12:29] こういうのをわざと、ObjectPascal使ってやったりしてな。
660 名前:デフォルトの名無しさん mailto:sage [03/10/14 17:02] あ、そろそろ後期の授業が始まったわけか。
661 名前:でたらめ mailto:sage [03/10/14 18:27] program test3; var a, b, c, max, min: integer; begin read(a); max := a; min := a; read(b); if b > max then max := b; if b < min then min := b; read(c); if c > max then max := c; if c < min then min := c; writeln('max', max); writeln('min', min); end.
662 名前:デフォルトの名無しさん mailto:sage [03/10/16 01:29] program maxandmin; (* IF無しバージョン *) var a, b, c, max, min : integer; function sgn(si : integer) : integer; begin if si < 0 then sgn := -1 else if si = 0 then sgn := 0 else if si > 0 then sgn := 1; end; begin read(a); read(b); read(c); case sgn(a - b) of -1, 0 : case sgn(b - c) of -1, 0 : begin min := a; max := c; end; 1 : case sgn(a - c) of - 1, 0 : begin min := a; max := b; end; 1 : begin min := c; max := b; end; end; end; 1 : case sgn(b - c) of -1, 0 : case sgn(a - c) of -1, 0 : begin min := b; max := c; end; 1 : begin min := b; max := a; end; end; 1 : begin min := c; max := a; end; end; end; writeln('max=', max); writeln('min=', min); end.
663 名前:662 mailto:sage [03/10/16 01:30] あ、sgn に if文を使っているんだっけ。
664 名前:でたらめ mailto:sage [03/10/16 21:41] function sgn (si: integer): integer; begin case si of 0: si := 0; otherwise begin sgn := si div abs(si); end; end; end;
665 名前:でたらめ mailto:sage [03/10/16 21:42] あ。begin, end 一個余分だ。 function sgn (si: integer): integer; begin case si of 0: si := 0; otherwise sgn := si div abs(si); end; end;
666 名前:でたらめ mailto:sage [03/10/17 10:56] program MaxMinX; (* ObjectPascal ver. *) type MMXtype = object vmax, vmin: integer; procedure init; procedure setValue (val: integer); function max: integer; function min: integer; end; procedure MMXtype.init; begin vmax := -32768;vmin := 32767; end; procedure MMXtype.setValue (val: integer); begin if val > vmax then vmax := val; if val < vmin then vmin := val; end; function MMXtype.max: integer; begin max := vmax; end; function MMXtype.min: integer; begin min := vmin; end; var MMX: MMXtype;a, i: integer; begin new(MMX); MMX.init; for i := 1 to 3 do begin read(a); MMX.setValue(a); end; writeln('max=', MMX.max); writeln('min=', MMX.min); end.
667 名前:662 mailto:sage [03/10/17 18:42] program test(input, output); (* 今度こそIF無しバージョン *) Type TChoice = function(a, b : integer) : integer; var Func : array[boolean] of TChoice; a, b, c : integer; function First(a, b : integer) : integer; begin First := a; end; function Second(a, b : integer) : integer; begin Second := b; end; function fmax(a, b : integer) : integer; begin fmax := Func[a >= b](a,b); end; function fmin(a, b : integer) : integer; begin fmin := Func[a <= b](a,b); end; begin Func[false] := Second; Func[true] := First; read(a); read(b); read(c); writeln('min=', fmin(fmin(a, b), c)); writeln('max=', fmax(fmax(a, b), c)); end.
668 名前:でたらめ mailto:sage [03/10/17 19:08] >>667 発想がすごい! けど、うちの環境(THINK Pascal)だと、 2行目が通らないっす・・・
669 名前:622 mailto:sage [03/10/17 20:32] >>668 あ、関数型(手続き型の方が分かりが良いかな)って 標準Pascal仕様じゃなかったんですね。ちなみにDelphi では通りました。
670 名前:でたらめ mailto:sage [03/10/18 03:13] program MMX; var a, b, c: integer; begin read(a); read(b); read(c); writeln('max=', ((((a + b) + abs(a - b)) div 2 + c) + abs(((a + b) + abs(a - b)) div 2 - c)) div 2); writeln('min=', ((((a + b) - abs(a - b)) div 2 + c) - abs(((a + b) - abs(a - b)) div 2 - c)) div 2); end.
671 名前:デフォルトの名無しさん mailto:sage [03/10/18 17:14] >>656 読み込んでソートして一番上と一番下を見る
672 名前:662 mailto:sage [03/10/21 18:45] >>670 あ、なるほど。2変数のやつをもう一度繰り返せば3変数 に対応出来ますね。私は「一度に3変数に対応出来ない か」と考えていました。
673 名前:でたらめ mailto:sage [03/10/22 00:22] >>672 でもこれって、>667の >writeln('min=', fmin(fmin(a, b), c)); >writeln('max=', fmax(fmax(a, b), c)); の派生みたいな物ですよ。 ただ、公式にあてはめただけです。
674 名前:でたらめ mailto:sage [03/10/22 00:25] 他にも、 const maxint = 32767; minint = -32768; var index: array[minint..maxint] of boolean; を使う方法も考えたけど、 メモリーが足りない(?)とかで 配列が確保できずに断念したっス。
675 名前:662 mailto:sage [03/10/25 15:23] >>673 2変数での公式と>>667 のやつを組み合わせることを 思いつかなかったんです。思いついてさえいたら、先 に書いていたのに...
676 名前:デフォルトの名無しさん [03/10/31 01:49] 質問いいですか? 一クラス分の身長を実数型で入力し、最高と最低を求めるプログラムを作成せよ。 さらに示された入力データでトレース表を書きなさい。 (A)最初に人数を入力し、人数分の処理をする場合(for) (B)身長に0が入力されたら、終了する場合(while) 実行結果例 人数 制御変数 身長 最高 最低 6 1 178 2 165 165.0 3 197 197.0 4 168 5 175 6 183 こんな問題です。 特に、入力された人数分を変数に入れる方法と、トレース表に出力する方法が分かりません。
677 名前:デフォルトの名無しさん [03/10/31 03:33] >>676 小学校の宿題か?
678 名前:662 mailto:sage [03/10/31 05:22] >>676 配列とか知っているか? それとなんでその問題で「実数型」にする必要があるんだ? 実数型だと比較が難しいぞ。
679 名前:デフォルトの名無しさん [03/10/31 08:01] >>678 問題が実数型で入力せよとなっているので・・・。 配列はあやふやです・・・。
680 名前:でたらめ mailto:sage [03/10/31 08:40] 3つの最大・最小の次は、この課題ですか。ふふーん じゃあ、どうしよっかなー
681 名前:でたらめ mailto:sage [03/10/31 08:44] (A)みたいなのは、BasicだとDIM文とかで 配列を宣言すれば無駄がないけど、Pascal はできないもんね。 (B)も(A)もそうだけど、人数の最大が決まっ てるか決まってないかで、全然変わるけど。 その辺は、どうなんだろうね?
682 名前:デフォルトの名無しさん [03/10/31 11:46] がんばって考えてみたけどエラーが出ます。どこを改良すればいいですか? var i,n,max,min :integer; sin:array[1..100] of integer; begin write('人数は?'); readln(n); for i:=1 to n do begin writeln(i,'人目の身長を入力してください'); readln(sin[i]); end; max:=sin[1]; min:=sin[1]; for i:=2 to n do begin IF sin[i]>max then max:=sin[i]; IF sin[i]<min then min:=sin[i]; end; writeln('人数 制御変数 身長 最高 最低 '); writeln(n); for i:=1 to n do begin write(' ',i,' ', sin[i] ); IF sin[i]:=max then write(' ',sin[i]); IF sin[i]:=min then write(' ',sin[i]); end; end.
683 名前:でたらめ mailto:sage [03/10/31 17:01] >>682 ほとんどできてるじゃん。 >IF sin[i]:=max then >write(' ',sin[i]); >IF sin[i]:=min then >write(' ',sin[i]); ここ、「:=」じゃなくて「=」だ。 それと、この次に、 writeln; の1行を入れる必要がある。
684 名前:662 mailto:sage [03/10/31 18:34] >>682 実数型を使っていないけど、いいのか? それとトレース表の人数のあとに改行が入っているけど それも問題無し?
685 名前:でたらめ mailto:sage [03/10/31 19:10] >>684 そやな、ごもっとも。(w でも、例とは違ってもええんちゃう? それ言い始めると、「最低」の数字の 表示位置がずれてる気がするけど。
686 名前:でたらめ mailto:sage [03/10/31 21:16] ところで。私も詳しく知らないんだが。 実数型って比較が難しいの?
687 名前:662 mailto:sage [03/11/01 09:12] >>685 おお、表示位置のずれは気づかなかった。という ことで、そこも直す必要があるぞ。>>682 >>686 10進と2進の変換誤差(浮動小数点の場合)と計 算誤差があるから、等号比較だと偽になる場合 が考えられる。あと、有効桁数の問題も気にとめ ておく必要が出る場合もあるし。 まあ、今回みたいに変数に入れた物を代入する 場合なんかは等号比較が出来る場合が多いけ ど、代入を計算と見なした場合は一度倍精度に してから単精度に戻すなどの処理が入って値が 変わる可能性があることを頭に入れておいた方 が破綻しづらくなります。 と言うことで私は整数型で実装出来るものは整数 型で実装するようにしています。
688 名前:でたらめ mailto:sage [03/11/01 10:59] >>687 そうか。誤差か。普段そこまでシビアな計算って したことないんで、気にしなかった。 うちも整数型がほとんどです。 今回の場合、まさか身長で小数点以下2桁以上が 必要になることはないので。入力した数値を ×10して整数型で保存・計算。表示の時に ÷10して実数型(例だと下一桁)っぽく 表示するのではあかんのやろか。 この処理、逆に面倒?誤差が大きくなる?
689 名前:662 mailto:sage [03/11/01 11:44] >>688 私もその方が良いと思ったので「実数型にする必要があ るんだ?」と聞いたんだけど... でも「問題が実数型で入力 せよ」という事らしいから、実数型にする必要があるみた いですね。 それとも「入力が実数型」を受け付けると言うことだけで 良いのなら内部は整数で扱う方がプログラム的には楽 ですね。 計算することを考えるのなら、小数点以下2桁くらい取っ ておいた方が安全かも。
690 名前:でたらめ mailto:sage [03/11/01 13:19] 実数型で入力し・・・そうか!!やっぱり 入力さえ実数型なら、ええんちゃう? 処理まで実数型とは書いてないもんな。 >>682 考えることは同じやね。うちも最初は小数点以下 2桁と思ったけど、例が下1桁だったので、表示 するときの手間を考えて下1桁って書いてた。 そんなわけで。>682は、課題完了だな。
691 名前:682 [03/11/01 23:35] レス有難うございます!! あとですね、>>676 のwhile文のほうがあって身長に0を入力した場合に入力が終わるプログラムなんだけど、 そうすると出力のときに身長に0が出てしまうんですよ。どうすればいいですか?
692 名前:でたらめ mailto:sage [03/11/02 00:30] >>691 forとwhileの基本的な違いではないか。 それを考えるのが課題のポイントじゃ。
693 名前:でたらめ mailto:sage [03/11/02 11:26] for 1〜2回 入力 1〜2回繰り返し 戻る repeat 入力 1〜2回繰り返し、3回目に0を入力 0以外は戻る 最後の入力は無効 で、ええんちゃうか。 そうすると問題は、のっけから0を入力された 場合のエラーセーフだけど。ま、やってみそ。
694 名前:デフォルトの名無しさん mailto:sage [03/11/02 23:35] if文は使ったらいけないのヵ begin 一つ目を入力; while i>0 do begin 出力; 入力; end; end. たぶん不合格。 ん?0を「入力した」場合に「入力が」終わる?
695 名前:でたらめ mailto:sage [03/11/03 00:44] あ。すまぬ。>693は何か勘違いして書いてるかもしれん。 そか。repeatはuntilで、whileは違うか。 ま、気にするな。(w
696 名前:でたらめ mailto:sage [03/11/03 00:51] 罪滅ぼしに、ちょっとヒントを。 var next:boolean; ... next:=true; while next do begin 入力 if a=0 then next:=false; その他のチェック end;
697 名前:デフォルトの名無しさん mailto:sage [03/11/03 01:44] なんだその変なコード。
698 名前:でたらめ mailto:sage [03/11/03 02:31] >>697 まあ、でたらめっちゅー事で。気にするな。 よかったら、すばらしいサンプルを提示して やってくだされ。
699 名前:デフォルトの名無しさん mailto:sage [03/11/03 17:26] >>696 while true do で if 〜then break すればいいんじゃ?
700 名前:でたらめ mailto:sage [03/11/03 18:13] >>699 前にも似たような話があったけど、 標準Pascalではbreakが使えないのよん。
701 名前:でたらめ mailto:sage [03/11/03 18:13] と、思って>700を書いたが。私の勘違い?
702 名前:デフォルトの名無しさん mailto:sage [03/11/03 19:01] 1周目を必ず通すならrepeat使いなよ。
703 名前:でたらめ mailto:sage [03/11/03 19:11] >>702 >676
704 名前:デフォルトの名無しさん mailto:sage [03/11/03 20:04] ちょっくら問題作った奴に山嵐決めてくる。
705 名前:662 mailto:sage [03/11/03 23:08] ほんとだ、これは問題を作ったやつがバカ。 repeat - until を使った方が素直に組めるのに。 どうしてもwhileでやらなきゃならないのなら、入力 関数でも作って以下のようにするか... function 身長入力関数(var 身長) : boolean; begin 入力処理 end; while 身長入力関数(身長) do 身長追加処理; >>701 その通り、breakは無いです。元が教育用言語 だから、抜け道は作らないような構文になって いるんですよね(caseのelse、otherwiseも無い)。
706 名前:でたらめ mailto:sage [03/11/03 23:15] >>705 「課題」なんだから仕方ないよ。 Cだと、入力しつつ比較が出来るから、 関数を作る必要はないんだよね?確か。 breakが無いのはまだいいけど、 caseのotherwiseも標準にはないの? これないと辛い。つーか、無理。 THINK Pascalはある。
707 名前:662 mailto:sage [03/11/04 00:21] >>706 いや、課題だからこそ変な制約を付けることなく作ら せるのがよい。まあ、一定の方向に仕向けるためだ ろうけど、それでプログラミング嫌いになったら教育 の価値無し。 otherwise(Delphiではelse)は無い。と言うかcase を使う時点で出てくる要素は判っているはずだから、 全て列挙しろと言うことでしょう。otherwiseに入れら れた処理を「あとで分類し直す」なんて事になったら 結構大変だというのは想像が付きそうだけど。
708 名前:676 [03/11/04 12:17] こんな強引な感じになりましたが一応例どおり動きました。 Program en9a(input,output); var i,n :integer; max,min :real; sin:array[1..100] of integer; begin write('人数は?'); readln(n); for i:=1 to n do begin writeln(i,'人目の身長を入力してください'); readln(sin[i]); end; max:=sin[1]; min:=sin[1]; writeln('人数 制御変数 身長 最高 最低 '); writeln(n);
709 名前:676 [03/11/04 12:18] i:=1; repeat IF sin[i]>max then max:=sin[i]; IF sin[i]<min then min:=sin[i]; write(' ',i,' ', sin[i]); IF sin[i]=max then write(' ',max:3:1); IF sin[i]=min then write(' ',min:3:1); writeln; i:=i+1; until i<>1; for i:=2 to n do begin IF sin[i]>max then max:=sin[i]; IF sin[i]<min then min:=sin[i]; write(' ',i,' ', sin[i]); IF sin[i]=max then write(' ',max:3:1); IF sin[i]=min then write(' ',min:3:1); writeln; end; end.
710 名前:676 Bのほう [03/11/04 12:19] Program en9b(input,output); var i,n :integer; max,min :real; sin:array[1..100] of integer; begin n:=1; i:=1; writeln(i,'人目の身長を入力してください'); readln(sin[i]); while sin[i]<>0 do begin i:=i+1; writeln(i,'人目の身長を入力してください'); readln(sin[i]); n:=n+1; end; max:=sin[1]; min:=sin[1]; writeln('人数 制御変数 身長 最高 最低 '); writeln(n-1);
711 名前:676 Bのほう2 [03/11/04 12:20] i:=1; repeat IF sin[i]>max then max:=sin[i]; IF sin[i]<min then min:=sin[i]; write(' ',i,' ', sin[i]); IF sin[i]=max then write(' ',max:3:1); IF sin[i]=min then write(' ',min:3:1); writeln; i:=i+1; until i<>1; for i:=2 to n-1 do begin IF sin[i]>max then max:=sin[i]; IF sin[i]<min then min:=sin[i]; write(' ',i,' ', sin[i]); IF sin[i]=max then write(' ',max:3:1); IF sin[i]=min then write(' ',min:3:1); writeln; end; end.
712 名前:でたらめ mailto:sage [03/11/04 13:11] あのー、sinの宣言を見ていると、 整数型なんですけど・・・ 小数入力しても、小数点以下が 切られてない? (試してないので分からんけど)
713 名前:デフォルトの名無しさん mailto:sage [03/11/04 13:35] sinってのは正弦みたいでやだな。
714 名前:デフォルトの名無しさん mailto:sage [03/11/04 17:40] 右シフトさせるプログラムがどーしても 出来ない・・・・
715 名前:デフォルトの名無しさん mailto:sage [03/11/04 18:13] 表示位置のずれはまだ直っていないようだが... あと ちゃんとコンパイルして実行して動くかどうか確認し て(もしくは不明点が見つかって)からアップしてくれ。 おまえのソースを全てチェックするほど暇じゃないん だ。そっちのソースを直すより自分で全て書いた方 が早そうだし。 >>714 環境(対象コンパイラ、機種、OS等)の必要情報が 判らないとコメント付けようがないぞ。
716 名前:デフォルトの名無しさん mailto:sage [03/11/05 00:46] >>715 例どうりに動いたと書いてあるよ。
717 名前:デフォルトの名無しさん mailto:sage [03/11/05 09:21] >>715 フリーパスカル CPAD win2K
718 名前:デフォルトの名無しさん mailto:sage [03/11/05 18:37] >>716 とても例どうりに動くとは思えんが、本人がそう言っている のならそれでいいや。 >>717 確かFreePascalはTurboPascalの構文が使えるんじゃな かったでしたっけ?それならshrで行けます。下記参考。ち なみに左シフトはshl。 var a, b : byte; begin a := 8; b := a shr 1; (* シフトしたいビット数 *) writeln(a, ' ', b); end.
719 名前:デフォルトの名無しさん mailto:sage [03/11/05 20:02] >>718 なんか配列使えって 言われちゃったので配列で無理やり作ってみた。 program sifuto(input,uotput); type suuji = array[1..10] of char; var a : suuji; x,y,n : integer; begin begin write('10文字入力'); readln(a); end; write('いくつずらす?'); readln(x); for y:= 11-x to 10 do write(a[y]); for n:=1 to 10-x do write(a[n]); writeln() end.
720 名前:デフォルトの名無しさん mailto:sage [03/11/05 20:11] 今日配列使って作ったもう一個のヤツ program sinnsuu(input,output); type suuji = array[1..4] of integer; var a : suuji; c, ans : integer; d : integer; begin Write('Decimal : '); Read(d); c := 0; while d <> 0 do begin c := c + 1; ans := d mod 2; d := d div 2; a[c]:=ans end; for c:= 4 downto 1 do write(a[c]); writeln() end. 配列メンドイ なんか中途半端に理解した。
721 名前:デフォルトの名無しさん mailto:sage [03/11/05 20:20] >>720 0〜15の10進数しか変換できない。
722 名前:718 mailto:sage [03/11/05 22:26] >>719 俺、配列使えなんて一言も言ってないんだけど。 何か良く分かんない(理解出来ないやり取りの) 所に来てしまったようなので、落ち着くまでしばら く黙っていることにする。
723 名前:でたらめ mailto:sage [03/11/05 22:53] 学校の課題なんでないかい? 配列使え、っていう。
724 名前:718 mailto:sage [03/11/05 23:51] >>723 課題は課題で良いんだけど、「他の人に分かって もらう書き方」ってのがあると思うんだ。特にこうい う場では。それと「自分で出来るだけ努力する」っ てのも大事だし。 それをしないでソース垂れ流し(それもちょっと?の) されるんで、もう私には理解不能。だからこの件 (と思われるもの)には黙ることにしました。
725 名前:でたらめ mailto:sage [03/11/06 01:21] ところで。右シフトって何? 2で割ればいいんじゃないの?
726 名前:デフォルトの名無しさん mailto:sage [03/11/06 21:54] >>725 マイナスの値を右シフトと2で割ることをしてみれば、 違いが分かると思う。それと、算術計算とビット操作 はやっぱり別の話だから。
727 名前:でたらめ mailto:sage [03/11/06 23:03] マイナスか。それは考えなかった。 でも、ビット操作なんてアセンブラでも使わない 限り必要ないんじゃないかと思うけど。 Cならいざしらず、Pacalでは意味ないよねぇ。 課題じゃしょうがないけど。
728 名前:デフォルトの名無しさん mailto:sage [03/11/06 23:16] >>727 だってグラフィックフォーマットとか通信プロトコルなんかで 「ビットで状態を表す」物って結構多いから、ビット操作がで きないと辛い場合って結構あるよん。 そういう時までアセンブラを持ち出すのはちょっと大仰だと 思う。高級言語でサクサク組めた方が何倍もカンタン。
729 名前:でたらめ mailto:sage [03/11/07 00:00] >>728 そうか。なるほど。 ビット操作はマックならtoolboxにあるので、 THINK Pascalでもコマンド一発。
730 名前:デフォルトの名無しさん [03/11/11 16:54] a<>b<>c みたいなことをやらせるには どうしたらいいのでしょう… 配列を使った課題がT-T
731 名前:デフォルトの名無しさん mailto:sage [03/11/11 19:50] a <> b and a <> c
732 名前:デフォルトの名無しさん mailto:sage [03/11/11 19:59] >>730 a=cでもええのか? >>731 b=cの可能性はあるな そういう意味じゃない?
733 名前:デフォルトの名無しさん mailto:sage [03/11/11 20:04] a <> b and a <> c and b <> c 等しくはならんが気休めにどうぞ。
734 名前:デフォルトの名無しさん mailto:sage [03/11/11 22:03] andの方が優先度高い罠
735 名前:デフォルトの名無しさん mailto:sage [03/11/12 02:04] そもそも、>730の課題は何がさせたいのだ? aとbとcがいずれも異なる値であることを 確認すればいいの? にしては、配列を使うって・・・意味不明。
736 名前:デフォルトの名無しさん mailto:sage [03/11/12 23:39] >>735 意味を取ろうとするから意味不明。気にしなければOK。 課題を出している方はまともな課題を出していて、ここで 聞いているのの頭が「意味不明」なだけのような気がする (もしくは本気で訊いていないのか)。今までの経緯から すると。 意味が通る訊き方をすれば、それなりに答える気になる のに。
737 名前:デフォルトの名無しさん mailto:sage [03/11/14 16:34] 配列を使ったプログラムの途中にa<>b<>cという判定が必要な部分があるとか
738 名前:デフォルトの名無しさん [03/11/15 22:16] すいませんご教授おねがいします。 画面を再構成させる方法は存在するのでしょうか? 存在するのでしたら教えてください。 学校の宿題を作ってるとき、再構成しないと見栄えが悪いもので…
739 名前:デフォルトの名無しさん mailto:sage [03/11/15 23:50] >>738 再構成ってどんなこと? 宿題と言われてもこっちは何も 分かっていないんだと言うことを理解して、詳しく説明し てくれないと何の手助けも出来ないんだが。課題の内 容をこと細かく説明する必要は無いんだけど、「どんな ことをやろうとして、どうなってしまったから、こうしたい」 くらいの説明がないと何とも。 あと、コンパイラ依存? それとも汎用? OSに関わりのあ る(と思われる)場所は無いのかな? 見栄えを求めるとしたらどのレベル? 事によると宿題の 域を大幅に超えるかもしれないので、どれくらいの事を したいのか分からないと答え辛いかも。
740 名前:デフォルトの名無しさん mailto:sage [03/11/16 00:16] >>738 まるで 「僕のお小遣いで買いに行ける一番美味しいケーキはどれ?」 っていう質問に答えるようなものだな。
741 名前:738 [03/11/16 03:27] すいません、プログラミング初心者なので、 質問の仕方すらよくわかってません(/_<。) delphi6のコンソールで、文字列がずらずらと繰り返えされ 見難くなるので、画面の文字をいったん全部消去する 方法を教えてもらいたいのですが… 正直どう説明すればいいのかすら分かりません(-_-;)
742 名前:デフォルトの名無しさん mailto:sage [03/11/16 13:22] >>741 Delphi6と言うことはWin32コンソールもしくはDOS窓に なるのか。OSによって対応は違いますね。 16ビット系(Win95からMEまで)なら「ANSIエスケープ シーケンス」が使えると思うのですが、32ビット系(NT から2000,XPまで)はこれが使えないので「いちいちコ ンソールと文字モードのサポートにあるAPIで制御」す るか、改行で区切って綺麗に見せて出力するかしか 無いですね。
743 名前:738 [03/11/16 15:35] >>742 そうですか…きっぱりあきらめることにします。 初心者の馬鹿な質問に答えて下さいまして本当にありがとうございました
744 名前:デフォルトの名無しさん mailto:sage [03/11/17 19:13] >>738-743 pageコマンドは? (A)コンソールに対して writeln('abc'); page; writeln('xyz'); こうすると(THINK Pascalの場合) (abcが表示された後、画面消去するので) コンソールにxyzだけが表示される。 (B)ファイルに対して var f:text; .. writeln(f, 'abc'); page(f); writeln(f, 'xyz'); こうするとabcとxyzの間に(改ページ)が挿入される。 一般的なPascalの教科書に出ているコマンドだよ。
745 名前:デフォルトの名無しさん [03/11/17 22:23] >>744 delphiのコンソールじゃ出来ないんじゃない?
746 名前:デフォルトの名無しさん mailto:sage [03/11/17 22:40] >>744 残念ながらBorlandのPascal言語系(Delphiだけで なくTurboPascalから)はPageはサポートしていな かったりする。
747 名前:744 mailto:sage [03/11/17 23:42] そうなんだ。
748 名前:デフォルトの名無しさん mailto:sage [03/11/18 01:51] 全く紛らわしいことしやがって。
749 名前:デフォルトの名無しさん mailto:sage [03/11/18 03:17] TurboPascal風のコンソールユニット www.slis.keio.ac.jp/~anakata/filearea/filearea.html から Win32Crt.pas (w32crt03.lzh) を落として、解凍後、Win32Crt.pasを Libフォルダにコピーする。 古いユニットなので、Delphi6では未定義の識別子 : 'KeyEvent' という エラーが出るから、KeyEventという文字列を全てEvent.KeyEventに 置き換える。 これで、TurboPascalのCRTユニット風の関数が使えるようになる。 GotoXY, WhereX, WhereYがゼロオリジンなので、互換性を考えれば ソースをいじったほうがいいかもしれない。
750 名前:749 mailto:sage [03/11/18 03:18] とりあえず、簡単なサンプル(Delphi6で確認)。 何かキーを押すと終了する。 program Project2; {$APPTYPE CONSOLE} uses Windows, SysUtils, Win32Crt; var f, b: Integer; begin for b := 0 to 15 do begin ClrScr; for f := 0 to 15 do begin TextColor(f); TextBackground(b); gotoXY(f * 2, f); Writeln('Test String [', WhereX, ',', WhereY, ']'); Sleep(1000); if KeyPressed then Exit end end end.
751 名前:デフォルトの名無しさん [03/11/18 23:36] n個の値 a[0] , a[1] , ・・・ , a[n-1] が与えられているとき、 a[i]の順位 r を求めるプログラムを書いてください。 ただし、順位=(自分より大きいものの個数+1)です。 また、プログラム中に使用する名前の型、属性、意味内容を明示し、 実際の実行例もお願いします。
752 名前:デフォルトの名無しさん mailto:sage [03/11/19 00:00] 順番に調べればいいんじゃない。 x := 1; for i := 0 to n-1 do if a[i] > a[r] then x := x + 1;
753 名前:デフォルトの名無しさん mailto:sage [03/11/19 00:39] >また、プログラム中に使用する名前の型、属性、意味内容を明示し、 >実際の実行例もお願いします。 それくらいは自分で考えた方が良いぞ。属性ってそもそも何?
754 名前:デフォルトの名無しさん mailto:sage [03/11/19 10:04] とても素朴な疑問なんだが。 >n個の値 a[0] , a[1] , ・・・ , a[n-1] が与えられているとき この「与えられているとき」ってのを見る度に悩むんだな。 サンプルをどうしよう?って。 programなら、入力ルーチンを作るか、ファイルから読み込むか、 constで適当な値を作るか。 procedureやfunctionだけ作るとしても、pascalでは配列を 関数には渡せないよね? それとも、a[0]...っていうグローバル変数があるものと してもいいけど、それも美しくないし。
755 名前:デフォルトの名無しさん [03/11/19 11:17] >>754 ポインタで渡せば?
756 名前:デフォルトの名無しさん mailto:sage [03/11/19 11:37] >pascalでは配列を関数には渡せないよね? いや…渡せるけど procedure A(B: array[C..D] of Integer); みたいな。 Delphiならprocedure A(B: array of Integer); で範囲はLow/Highで取る。
757 名前:デフォルトの名無しさん mailto:sage [03/11/19 12:46] いや、勘違いだったら失礼。 >>756 そのC..Dが変数でもできたっけ? >>755 ポインタで渡すのが確実か。確かに。
758 名前:デフォルトの名無しさん mailto:sage [03/11/19 18:31] >>754 渡せるぞ。ちゃんと宣言すれば。以下参照。 Type TIntArray = array[LO..HI] of integer; var A : TSomeArray; procedure DoSomething(B : TIntArray); として(LOとHIは定数で適当に宣言されているとする)、 DoSomething(A); とすればちゃんと呼び出せるぞ。 >>756 手続き宣言の場所で直接配列を宣言すると、処理系に よっては「違う型と見なされて配列を渡せない」事態にな る可能性があるぞ。これは実装依存らしいから、絶対大 丈夫だとか絶対ダメだとか言えないのが面倒。 >>757 変数はダメです(処理系によっては大丈夫かも)。標準で は定数しか受け付けません(というか実行時に大きさが 決まる配列自体が使えないはず)。
759 名前:756 mailto:sage [03/11/20 07:38] >>758 いや、私が言いたかったのはオープン配列。 規格はよく知らないけど、ものの教科書では procedure A(B: array[C..D] of Integer); で、任意の長さの配列を渡せるらしい。C..Dには実引数の添え字範囲が入る、らしい。 (もっとも、対応しているコンパイラは知らないけどね) 追記しているようにTP系(FreePascal/Delphi)では同じ機能はあっても構文が違う。
760 名前:デフォルトの名無しさん mailto:sage [03/11/20 08:44] たぶん、環境に依存しないやり方としては、>758が 正しいと思う。見て、おぼろに思い出した。 だけど、わざわざ型を指定するのって、面倒なんだよね。
761 名前:デフォルトの名無しさん mailto:sage [03/11/20 18:20] >>759 あー、オープン配列は使ったことがなかったので、完全に 忘れていました。書かれて初めて「そういうのがあったっけ なぁ」という感じ。 私はオープン配列を使うような場面ではTListを使うので使っ たことがありません。オープン配列を使わなきゃならないよ うな手続きなんかも書かないし。
762 名前:デフォルトの名無しさん [03/11/20 22:44] Why Pascal is Not My Favorite Programming Language www.lysator.liu.se/c/bwk-on-pascal.html 誰か Why Pascal is My Favorite Programming Language を書いてください。
763 名前:デフォルトの名無しさん mailto:sage [03/11/21 00:07] >>762 いいじゃん、放っておけば。大体用途の違う言語を 比較して「こっちが好きだ」って書いているような人 にろくなのはいないから。 分かっている人は「その言語はそういう用途には向 かない」とか「そういうことを目的として設計された言 語ではない」と書くと思う。
764 名前:デフォルトの名無しさん mailto:sage [03/11/21 11:38] 俺はタイプ量が多くなっても if (hoge)と括弧を書くよりは if hoge thenと書くほうが好きだ。 好きなところってそこしか思い浮かばなかった。 嫌いなところばっかり浮かんで来る・・・。
765 名前:デフォルトの名無しさん mailto:sage [03/11/21 12:19] 部分範囲型、集合型、配列の関係が好きだ… C系の言語でこれらの概念を持ってるのがサッパリ無いのはどういうことか
766 名前:デフォルトの名無しさん mailto:sage [03/11/21 14:40] ビットで済ましているんだろ。
767 名前:デフォルトの名無しさん [03/11/22 11:26] お願いします 英単語を入力して、そのつづりを逆順にした文字列を作りなさい。 実行例 英単語は? beautiful 逆順にしたつづりは lufituaeb できそうだと思ったんだけど挫折・・・
768 名前:デフォルトの名無しさん mailto:sage [03/11/22 13:48] function ReverseString( S : String ) : string; var I, J : Integer; begin J:=Length(S); SetLength( Result, J); for I:=1 to J do Result[i]:=S[J+1-I]; end; 実行してないんで動くかどうかはシラネ
769 名前:デフォルトの名無しさん mailto:sage [03/11/22 15:47] program rev; var st : string; i : integer; procedure swap(var a, b : char); var t : char; begin t := a; a := b; b := t; end; begin readln(st); for i := 1 to length(st) div 2 do swap(st[i], st[length(st) - i + 1]); writeln(st); end. こんな感じ?
770 名前:デフォルトの名無しさん [03/11/22 17:51] 回すのは、半分くらいでいいのでは?
771 名前:デフォルトの名無しさん mailto:sage [03/11/22 17:52] あっ、半分になってるよね。スレ汚しすまん。
772 名前:デフォルトの名無しさん mailto:sage [03/11/22 18:20] ■フォーマット xx xx xx xx -- -- ----- A B C A... アイテムコード B... 強化パラメータ ( 9C < 0 < 64 ) C... 使用回数 ( 00 01 < E8 03 < 00 00 ) ※00 00 : 無制限 これどういういみでつか??
773 名前:デフォルトの名無しさん mailto:sage [03/11/22 19:12] >>768 funciton ReverseString(S : String) : string; var i : integer; begin for i := length(S) downto 1 do result := concat(result, S[i]); end; これで良い気がする。
774 名前:768 mailto:sage [03/11/23 23:25] ほぉ。concat関数ですか。知りませんでした。 でも >function Concat(s1 [, s2,..., sn]: string): string; >説明 >Concat 関数を使うと,任意の数の文字列を結合できます。各パラメータは文字列型の式です。結果はすべての文字列型パラメータ>の結合です。 >次に示すように,正符号演算子(+)を使っても Concat 関数と同じ結果が得られます。 >S := 'ABC' + 'DEF'; >参考正符号演算子の方が Concat よりも処理が速くなります。 正符号演算子では文字列の加算の「度に」文字列分のメモリの確保と開放が行われてる(と思う)ので 前もってメモリを確保してある>>768 のほうが速いと思われます。 (文字列が長くなるに従って差は大きくなると思います。 つまり、 速度を求めるなら>>773 氏の方法より>>768 のほうがよろしいかと。 実際に試してないんで知らないけど。 添字の計算部分の差で負けたりして(w
775 名前:デフォルトの名無しさん mailto:sage [03/11/24 00:19] >>774 うーん、確かに速度的には遅くなるかもしれないけど、 この関数をそんなに頻繁に使うとは思わないので、な るべく単純な形の方が分かりやすいような気がする。 あと、以下の形にすると、日本語に対応するのも楽。 function ReverseString(S : string) : string; var
776 名前:775 mailto:sage [03/11/24 00:23] 途中で書き込んでしまった。 function ReverseString(S : string) : string; var i : integer; begin for i := 1 to length(S) do result := concat(S[i], result); end;
777 名前:デフォルトの名無しさん mailto:sage [03/11/24 17:04] 再帰バージョン function reverseString (a: string): string; begin if length(a) <= 1 then reverseString := a else reverseString := concat(reverseString(omit(a, 1, 1)), a[1]); end; omitは omit(文字列,位置,文字数) で指定した部分を削除した文字列を返す, THINK Pascal の組み込み関数。
778 名前:デフォルトの名無しさん mailto:sage [03/11/24 18:09] >>775 単純さを求めるとなると手っ取り早い日本語対応は function ReverseString(S : widestring) : widestring; では?(w >>776 >result := concat(S[i], result); result := S[i] + result; むしろこちらのほうが単純(直感的)かと。 ただconcat関数に慣れてないだけかも知れんが…
779 名前:デフォルトの名無しさん mailto:sage [03/11/24 18:34] >ただconcat関数に慣れてないだけかも知れんが… 文字列連結に「+」が使える事にかえって驚く。 resultというのもDelphi独自の規格だよね。
780 名前:デフォルトの名無しさん mailto:sage [03/11/24 23:12] >>778 widestringを使うのは環境にだいぶ依存しそう ですけど(確かに単純と言えば単純だけど)。 concatを使うのはあくまで私のやり方ですので、 +の方が分かりやすければそちらで問題ありま せん。
781 名前:デフォルトの名無しさん [03/11/25 00:22] >>779 Turbo Pascalからの仕様ですね。
782 名前:デフォルトの名無しさん [03/11/25 08:07] おながいします 問 正の整数を読み込み、30桁の数になるまでそれを2倍、2倍にしていき、 30桁の数になったら出力する。 桁数ってどうだっけ・・・
783 名前:デフォルトの名無しさん mailto:sage [03/11/25 09:34] program Hoge; {$APPTYPE CONSOLE} var bignum : array [1..30] of Integer; function keta: Integer; var i : Integer; begin i := 30; while (bignum[i] = 0) and (i > 1) do i := i - 1; keta := i; end; { keta } procedure nibai; var i : Integer; begin for i := 1 to 30 do bignum[i] := bignum[i] * 2; for i := 1 to 29 do begin bignum[i+1] := bignum[i+1] + bignum[i] div 10; bignum[i] := bignum[i] mod 10; end;end; { nibai } procedure print; var i : Integer; begin for i := 30 downto 1 do Write(bignum[i]);end; { print } procedure init; var i : Integer; begin for i := 2 to 30 do bignum[i] := 0; bignum[1] := 1;end; { init } begin init; while keta < 30 do nibai; print; end.
784 名前:デフォルトの名無しさん mailto:sage [03/11/25 09:49] procedure init; var i : Integer; begin Read(i); bignum[1] := i; for i := 1 to 29 do begin bignum[i+1] := bignum[i] div 10; bignum[i] := bignum[i] mod 10; end; end; { init }
785 名前:デフォルトの名無しさん [03/11/25 11:46] >>767 program ensyu(input,output); const msg ='英単語の綴りを逆順にします。'; var engword,downword:string[30]; Len,i :integer; begin writeln(msg); write('英単語は?'); readln(engword); Len:=length(engword); for i:=Len downto 1 do begin downword:=downword+engword[i]; end; writeln('逆順にした綴りは',downword,'です。'); readln; end.
786 名前:デフォルトの名無しさん mailto:sage [03/11/25 12:41] function ReverseString(S: String): String; var i, j : integer; c : char; begin i := 1; j := Length(S); while i < j do begin c := S[i]; S[i] := S[j]; S[j] := c; i := i + 1; j := j - 1; end; ReverseString := S; end; { ReverseString }
787 名前:デフォルトの名無しさん mailto:sage [03/11/25 13:54] 激遅 function ketaketa(e : extended):integer; begin while true do begin e:=e*2; if log10(e)>=30 then break; end; ShowMessage(FloatToStr(e)); end;
788 名前:デフォルトの名無しさん mailto:sage [03/11/25 14:16] procedure ketaketa(e : extended); begin while log10(e) < 30-1 do e:=e*2; ShowMessage(FloatToStr(e)); end;
789 名前:デフォルトの名無しさん mailto:sage [03/11/25 14:39] procedure ketaketa(e : extended); var i : Integer; begin for i := 1 to Ceil((30-1 - log10(e)) / log10(2)) do e := e * 2; ShowMessage(FloatToStr(e)); end;
790 名前:デフォルトの名無しさん mailto:sage [03/11/25 14:52] procedure ketaketa(e : extended); begin ShowMessage(FloatToStr(e * power(2, Ceil((30 - 1 - log10(e)) / log10(2))))); end;
791 名前:デフォルトの名無しさん mailto:sage [03/11/25 15:14] procedure ketaketa(e : extended); begin ShowMessage(FloatToStr(e * power(2, Ceil((30-1)*log2(10) - log2(e))))); end;
792 名前:デフォルトの名無しさん mailto:sage [03/11/25 16:28] function keta(e : Extended): Integer; var n : Integer; begin n := 1; while e >= 10 do begin n := n + 1; e := e / 10; end; keta := n; end; procedure ketaketa(e : extended); begin while keta(e) < 30 do e := e * 2; ShowMessage(FloatToStr(e)); end;
793 名前:デフォルトの名無しさん mailto:sage [03/11/25 23:30] >>787-792 extendedって30桁まであるのか?
794 名前:782 mailto:sage [03/11/26 03:27] いろいろカキコ有難うございます。今日の授業で>>782 を以下の.........の部分を埋めて作れと言われました。 program enshu(input,output); const K=30; var i,j,m,v, :integer n :array[1..K]of integer; begin write('出発の値は?'); readln(m); if m >0 then begin ............. while m<>0 do begin ............. end; J:=J+1; ・・。
795 名前:782 mailto:age [03/11/26 03:28] while j > 1 do begin for i:=K downto J do n[i]:= 2*n[i]; for i:=K downto J do begin ............... end; if n[i-1]<>0 then j:=j-1 end; for i:=1 1 to K do write(chr(n[i]+Ord('0'))); writeln end; readln end. スマソ全然わかんないです・
796 名前:デフォルトの名無しさん mailto:sage [03/11/26 09:14] program enshu(input,output); const K= 30; var i,j,m : integer; {var i,j,m,v, : integer} n : array[1..K]of integer; begin write('出発の値は?'); readln(m); if m >0 then begin j := K; while m<>0 do begin n[j] := m mod 10; m := m div 10; j := j - 1; end; J:=J+1;
797 名前:デフォルトの名無しさん mailto:sage [03/11/26 09:15] while j > 1 do begin for i:=K downto J do n[i]:= 2*n[i]; for i:=K downto J do begin n[i-1] := n[i-1] + n[i] div 10; n[i] := n[i] mod 10; end; if n[j-1]<>0 then j:=j-1 { if n[i-1]<>0 then j:=j-1 } end; for i:= 1 to K do { for i:=1 1 to K do } write(chr(n[i]+Ord('0'))); writeln end; readln end.
798 名前:デフォルトの名無しさん mailto:sage [03/11/26 18:12] do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=8 前にあったブラックジャックを作ってみた。 つくりかけだけど。
799 名前:デフォルトの名無しさん [03/11/27 20:00] お願いします。 「・・・」の部分を埋めて作るように言われましたが、全然・・・。 氏名(全角7文字)、数学、英語の得点(100点満点)からなる個人データが保存されているファイルからデータを入力してそれぞれの合計点を計算し、合計点の大きい順に整列して表示するプログラムを作りなさい。 実行例 得点データを合計点順に整列します データファイル名は? SEISEKI.DAT 氏 名 数学 英語 合計 あああああああ 100 59 159 いいいいいいい 80 80 160 ・・・ program seiretu(input,output); const nmax=100; type index=1..nmax; Person=record name:string[14] math,eng:0..100; total:0..200; end;
800 名前:799 [03/11/27 20:01] 続きです Personarray=array[index] of person; procedure sort(n:index;var x:personarray); procedure exchangeperson(var A,B:person); var temp:person; begin ・・・ end; var i,j:index; begin for i:=1 to N-1 do for j:=N-1 downto 1 do ・・・ end; var num:o..nmax; i:index; Student:personarray; Infile:text; Filename:string[80]; begin ・・・ end.
801 名前:デフォルトの名無しさん mailto:sage [03/11/27 20:25] あのー、少しは自分でやった方がいいと思うよ? せめて、自分が考えたものを書くとかしたほうが。
802 名前:デフォルトの名無しさん mailto:sage [03/11/27 22:18] コンパイル通しただけだから、バグ取りは自分で program seiretu(input,output); const nmax = 100; type index = 1..nmax; Person = record name : string[14]; math,eng : 0..100; total : 0..200; end; Personarray = array[index] of person; procedure sort(n : index; var x:personarray); procedure exchangeperson(var A,B : person); var temp : person; begin temp := A; A := B; B := temp; end; var i,j: index; begin for i:=1 to N-1 do for j:=N-1 downto i do if x[j+1].total < x[j].total then exchangeperson(x[j+1], x[j]); end;
803 名前:デフォルトの名無しさん mailto:sage [03/11/27 22:19] var num : 0..nmax; i : index; Student : personarray; Infile : text; Filename : string[80]; begin Write('データファイル名は?'); Readln(Filename); i := 1; Assign(Infile, Filename); while not eof(Infile) do begin Readln(Infile, Student[i].name, Student[i].math, Student[i].eng); i := i + 1; end; num := i - 1; sort(num, Student); for i := 1 to num do Writeln(Student[i].name, Student[i].math, Student[i].eng, Student[i].total); end.
804 名前:782 mailto:sage [03/11/28 11:52] >>796-797 ありがとうございます
805 名前:デフォルトの名無しさん mailto:sage [03/11/28 19:49] >>801 うん、私もそう思う。課題をそのまま丸写ししたのは、無視するか どこが分からないか聞き直すのが良いと思う。
806 名前:801 mailto:sage [03/11/28 23:22] >>805 無視は冷酷なんで。ヒントくらいかな、最初は。
807 名前:デフォルトの名無しさん mailto:sage [03/11/29 09:35] THINK Pascalに詳しい方がおられるようなので、 ちょっとスレ違いだけど、質問。 THINK Pascalで、「アプリケーションはそのままで、 ライブラリで機能拡張するもの」は作れますか? 具体的には、「HyperCardとXCMD/XFCN」や 「フォトショップとプラグイン」 「MacOSと機能拡張やコントロールパネル」 みたいな関係のもの。 できるとしたら、大雑把に言って、どうやるんですか?
808 名前:デフォルトの名無しさん mailto:sage [03/12/01 17:08] >>805 いや、別に何も考えずに教えてくださいといってるわけではないんですよ。 クラスみんなですごく悩みながらやってて、どうしても分からん問題だけ聞いてるんです。 ただ、これからは途中のわかるとこまで書き込むように心がけます。 これは言い訳なんですけど、授業では何もパスカルのこと教えないのにやたら難しい問題ばかり出す先生なので・・・
809 名前:デフォルトの名無しさん mailto:sage [03/12/02 21:44] >>807 出来ないかも。 やり方は多分『(1)コードリソースを作って(2)それをメモリ上に読み込み、(3)それを呼び出す』 という手順でやっているのだと思う。(68Kの場合) で、3番目の“呼び出し”はC言語なら出来るんだけど THINK Pascalだとハンドルを関数/手続き扱いしなければならないのでかなり難しいと思う。 (コードリソースの作成はTHINK Pascalでも出来る。) 色々やってみた結果CodeWarrior Pascalで fPtr = function (a,b:integer):integer; こんな感じで関数を型定義してやったらできた。 しかし、これをTHINK Pascalに持ってくると文法違反でコンパイルが通らなかった。
810 名前:809 mailto:sage [03/12/02 21:45] CodeWarrior Pascalで実行できたソースコードの例 プラグイン側の関数は2数の和を返す関数。 type fPtr = function (a,b:integer):integer; {←ここがTHINKでNG。型は必要に応じて変える} fHdl = ^fPtr; var plugHdl: fHdl; plugin: fPtr; c: integer; procedure loadPlugin; {とりあえずファイル名、リソースタイプ、IDは決め打ち} var iFileRef, iErr: integer; begin iFileRef := OpenResFile('pl1'); {プラグインファイルを開く} plugHdl := fHdl(Get1Resource('MyPL', 128)); {メモリ上に読み込み} iErr := FSClose(iFileRef); end; begin loadPlugin; {プラグインをファイルから読み込む} hlock(handle(plugHdl)); {ハンドルロック} plugin := plugHdl^; {一旦ポインタに移し替えないとダメっぽい} c := plugin(3,6); {関数呼び出し。プラグインは2数の和を返す関数}
811 名前:デフォルトの名無しさん mailto:sage [03/12/02 23:03] >>808 どうしても分からん問題だけ聞くのは良いんだけど、こっちは どうしても分からなん問題かどうかなんて判断付かないし、問 題だけ書かれたら「ただ丸投げしている」と思われても仕方が ないだろう。 あと、「分かるところまで書き込む」んじゃなくて、「分からない ところだけ抜き出す」事をしてくれ。元の問題も分からず、ここ まで分かりましたと書かれても答えようがないし、問題と分かっ たところを書かれると「こっちが分からないところを探し出す作 業」をしなければならん。 分からないところを抜き出す作業が面倒と言うことはないと思 うが、「分からないところを抜き出す作業をミス」したり、間違っ て解釈したりするかもしれん。それでお互い時間と数レスを費 やすかもしれないと思うと面倒くさい。
812 名前:デフォルトの名無しさん [03/12/02 23:26] 10進法で表現された数を 2進法、8進法、16進法の表現に変換するプログラムを書いてください。 ただし、入力する10進法の数は(16^4)-1=65535までです。 また、実際の実行例もお願いします。
813 名前:デフォルトの名無しさん mailto:sage [03/12/03 00:15] IntToHex といって見るだけ
814 名前:デフォルトの名無しさん mailto:sage [03/12/03 01:06] >>812 **進法というのは分かっているのか? 分かっているとしたら どこが分からないんだ? 分からないところだけを聞き直して くれ。 あと、実行例くらい自分で実行して作ってもいいだろ。おん ぶにだっこじゃ身につかんぞ。
815 名前:807 mailto:sage [03/12/03 08:39] >>809 ,810 いろいろ試していただいたようで、ありがとうございます。 ハンドルを関数型で確保するのが無理、って事ですね。 仕方ないですね。型にうるさいのは仕様ですから。 型を指定しないで、普通のハンドルなりポインターで確保 して、いきなりそのアドレスをinlineでコールしたら・・・ って思ったけど、それだと変数の受け渡しが出来ませんね。
816 名前:デフォルトの名無しさん mailto:sage [03/12/03 08:41] >>812 今までの課題よりも簡単に思えるけど。
817 名前:デフォルトの名無しさん [03/12/03 12:11] function hoge(n, base: integer): string; var x: integer; s: string; begin if (base <> 2) and (base <> 8) and (base <> 16) then base := 16; s := ''; repeat x := n mod base; if x < 10 then s := chr(ord('0') + x) + s else s := chr(ord('A') + x - 10) + s; n := n div base; until n <= 0; hoge := s; end;
818 名前:デフォルトの名無しさん mailto:sage [03/12/03 15:25] >実際の実行例もお願いします。 萎え
819 名前:デフォルトの名無しさん mailto:sage [03/12/03 18:13] >>812 またおまえか
820 名前:809 mailto:sage [03/12/03 18:39] >>815 (807) できました! 最初、引数・返り値を同じにしたダミーの関数を作って その関数を実行時に機械語の絶対ジャンプで上書きするというのをやってみたんですが デバッガ(Lights Bug)で追うと、きちんと上書きされているにも関わらず 平然と元の関数を実行してるんですね。(失敗) で、動作をMacs Bugで追ってみたところ、 どうやら関数のアドレスを取得すると ジャンプテーブルのアドレスが帰ってくるみたいです。 で、普通に関数コールするとジャンプテーブルをショートカットして 元の関数がダイレクトに呼び出されているようです。 そこで関数を引数にした手続きを別に作成し、 そこから関数を呼び出してみたところ、 うまいこと、プラグインの関数が呼び出されました。 [通常の関数コール]→[目的の関数] [関数、手続きを引数とした関数コール]→[ジャンプテーブル]→[目的の関数] なお、inline関数の場合、関数のアドレス取得自体が出来ませんでした。(コンパイル時にエラー) どこかにひとつ、その関数が作られるわけではなく コードの随所にそのバイト列が単純に埋め込まれるようになっているからだろうと思います。
821 名前:809 mailto:sage [03/12/03 18:39] THINK Pascalで出来るコードリソース呼び出し type funcOverWriteT = record {関数書換用の型} opCode: integer; {JMP命令オペコード用領域} operand: longint; {JMP先絶対アドレス用領域} end; funcOWPtr = ^funcOverWriteT; var fp: funcOWPtr; {ダミー関数アドレス保持} h: handle; {プラグインアドレス保持} c: integer; function dummy_Func (a, b: integer): integer; {ダミー関数。形式はプラグインと合わせる} begin dummy_Func := 1 + a + b - 3 + 4; end; procedure Plugin_Caller (function f (a, b: integer): integer); {Plug-in呼び出し用手続き} begin c := f(3, 6); end; begin h := loadPluginManual; {プラグインアドレス取得。>>810 の手続きを関数にしたもの} hlock(handle(h)); {プラグインのハンドルロック} fp := funcOWPtr(@dummy_Func); {ダミー関数のアドレス取得} fp^.opCode := $4ef9; {68KのJMP命令を上書き} fp^.operand := ord4(h^); {プラグインの絶対アドレスを上書き。ハンドル→ポインタを忘れずに} c := dummy_Func(3, 6); writeln(c); {失敗。ジャンプテーブルを経由しないので元の関数が呼ばれる。} Plugin_Caller(dummy_Func); writeln(c); {プラグイン呼び出し成功!!}
822 名前:デフォルトの名無しさん mailto:sage [03/12/03 21:17] >>820 ,821 なんと!!できましたか!!すばらしい。小生の 知識不足からまだ理解も、再現も出来ていませんが、 希望が持てました。がんばってみます。
823 名前:812 [03/12/03 23:29] >>817 ありがとうございました。 実行例もお願いします。
824 名前:デフォルトの名無しさん mailto:sage [03/12/03 23:39] >>823 自分の所で実行してみなよ。 それが実行例。
825 名前:807,815,822 mailto:sage [03/12/04 13:10] >>809 ,810 >>820 ,821 動きました。 Plugin_Callerを書き換えて変数を渡せるように しても、ちゃんと動きました。 ありがとうございました。
826 名前:812 [03/12/04 18:26] >>817 のプログラムの意味解説をお願いします。
827 名前:デフォルトの名無しさん mailto:sage [03/12/04 18:39] >>826 お前やる気あんの? 全部分からない訳じゃないだろ? 分からないとこを聞けよ。 漠然とした要求をするな
828 名前:デフォルトの名無しさん mailto:sage [03/12/04 19:11] >>817 これでも良さそう const STR16='0123456789ABCDEF'; ・・・略 repeat x := n mod base; s := concat(STR16[x + 1], s); n := n div base; until n <= 0; ・・・略
829 名前:デフォルトの名無しさん mailto:sage [03/12/04 19:11] >>826 解説するまでもない明解なプログラムだぞ。>817は。
830 名前:デフォルトの名無しさん mailto:sage [03/12/04 19:12] >>826 意味って>>812 のことじゃないの?
831 名前:デフォルトの名無しさん mailto:sage [03/12/04 20:24] 10÷2=5...0 5÷2=2...1 2÷2=1...0 1÷2=0...1 10=1010 この意味が分からなければ、 調べ直した方がいい。
832 名前:812 [03/12/04 21:38] わからないのは以下の部分です。 >hoge(n, base: ): string; >s: string; hoge,n,base,string はどういう意味ですか?? >(base <> 2) and (base <> 8) and (base <> 16) これはどういう意味ですか。 >base := 16; >s := ''; >n mod base; n mod baseとはどういう意味ですか。 >s := chr(ord('0') + x) + s >s := chr(ord('A') + x - 10) + s; chr,ordはどういう意味ですか。 >n div base; これはどういう意味ですか。 >until n <= 0; >hoge ここもまるでわかりません お願いします
833 名前:デフォルトの名無しさん mailto:sage [03/12/04 21:50] >>832 ちっとは、Pascalの教科書を読んでおいでよ。 さすがにそれは、不勉強すぎです。
834 名前:デフォルトの名無しさん [03/12/04 21:51] >>832 ちょいと812さん、mod divが分からないなんて… ぶっちゃけpascalなんにも知らないと違います?(;´▽`A``
835 名前:812 [03/12/04 21:56] >>834 そうなんです。 私は数学科で、pascalは何も知らないんです。 コンピュータの教科書に詳細な説明はないんです。 わかるのは function,var,integer,if,then,elseといったものぐらいです。 そこであらためて 817の意味解説をお願いします。
836 名前:デフォルトの名無しさん mailto:sage [03/12/04 22:08] >>835 Pascalの教科書を図書館で借りて読め。「分からないから 教えてくれ」というのは先生にしか言っちゃいけない言葉だぞ。
837 名前:デフォルトの名無しさん mailto:sage [03/12/04 22:22] >>835 directory.google.com/Top/Computers/Programming/Languages/Pascal/Tutorials/
838 名前:817 mailto:sage [03/12/04 22:35] hogeは関数名、nは変換する数値、baseは変換の基底、stringは文字列 baseが2,8,16以外だったらbaseを16にしてる。 n mod baseで一の位が分かる。 数値から文字への変換。'0'の次が'1'、'A'の次が'B' n div baseは整数の割り算。base進数で一の位を削る 0になったら終了。関数の返り値をsにする。
839 名前:デフォルトの名無しさん mailto:sage [03/12/04 22:44] >817さんが親切に>838のような解説を書いても、 >812にはさっぱり意味不明だろう。 pascalの教科書を探して読んで来ない限り、 どこまでいっても全く無駄。 教科書じゃなくても、pascalの初歩のページでも せめて探して読んできなよ。
840 名前:デフォルトの名無しさん mailto:sage [03/12/04 22:49] たとえば ttp://grape.c.u-tokyo.ac.jp/~makino/kougi/jousho/pascal_memo.html
841 名前:805 mailto:sage [03/12/04 23:30] やっぱり「何も考えずに教えてください」って言っているのと 変わらんな。やっぱり無視した方が良いかも。>>801
842 名前:809 mailto:sage [03/12/05 01:03] >825 あ、できましたか。よかったですね。
843 名前:デフォルトの名無しさん [03/12/05 01:20] 6ケタの数を入力し、N個右にずらす(たとえばN=2だとすると123456を を561234)にするにはどのようなプログラムにすればいいですか?
844 名前:デフォルトの名無しさん mailto:sage [03/12/05 01:40] x := x div 10 + (x mod 10) * 100000 をN回繰り返せばいーんでないの
845 名前:デフォルトの名無しさん mailto:sage [03/12/05 04:00] こいつ、課題を全部ここで訊いて済まそうとしているのか? そんなやつに答える事はないと思うけど。>>ALL
846 名前:デフォルトの名無しさん mailto:sage [03/12/05 10:43] 10のN乗を使ってもいいね。
847 名前:デフォルトの名無しさん mailto:sage [03/12/05 10:56] 10のn乗だと、桁、大丈夫?
848 名前:デフォルトの名無しさん mailto:sage [03/12/05 12:59] 6乗までだから大丈夫でしょう。 function hoge(x, n: integer): integer; const k = 1000000; var i, j: integer; begin x := x mod k; j := 1; for i := 1 to n mod 6 do j := j * 10; hoge := (x mod j) * (k div j) + x div j end;
849 名前:デフォルトの名無しさん mailto:sage [03/12/05 19:50] >function,var,integer,if,then,elseといったものぐらいです。 えっ、? >>hoge(n, base: ): string; >>s: string; >hoge,n,base,string はどういう意味ですか?? function分かってるんじゃなかったの? しかも抜き出し方がおかしすぎだろう >function hoge(n, base: integer): string; これで何で分かる「単語」だけを消すかなぁ >hoge(n, base: ): string; ここでintegerを抜いて意味が分からないとは・・・レベル高杉(藁 ほんと基本から学んできてね? というより、分からない単語があったら まず せめて 最低限 ヘルプで調べてね? あかん、、突っ込みどころ大杉 根負けするわ
850 名前:デフォルトの名無しさん mailto:sage [03/12/05 20:03] ひょっとして、質問してる>812は 自分の実行環境を持ってないのか?
851 名前:デフォルトの名無しさん mailto:sage [03/12/05 20:40] winならDelphi DOSならturbo pascal macならTHINK Pascal debianならgpc linuxならKylix ぜ〜んぶ無料
852 名前:デフォルトの名無しさん mailto:sage [03/12/05 20:48] 空いてる時間は大学のコンピュータにかじりついてでも コードを書いてコンパイルしてとにかく試せ。 処理系が見つからなくてCへのコンバータ使ってたころもあったなあ。
853 名前:デフォルトの名無しさん mailto:sage [03/12/05 23:19] Pascal入門 ttp://www.ics.kagoshima-u.ac.jp/edu/proen1/index.html
854 名前:デフォルトの名無しさん [03/12/12 00:28] ほしゅすしゅしゅ(´・ω・`)ショボーン
855 名前:デフォルトの名無しさん mailto:sage [03/12/12 01:48] では、保守ついでに、またもTHINK Pascalの質問。 コードリソースからToolBoxのルーチンを使うには、 コードリソースのプロジェクトに何を入れれば良い?
856 名前:デフォルトの名無しさん mailto:sage [03/12/13 01:05] >>855 ・Runtime.libを外してかわりにRSRCRuntime.Libを入れる。 ・Interface.libはそのまま。
857 名前:856 mailto:sage [03/12/13 01:26] ↑はコードリソースを作る時の一般的な手順なんだけど これでダメって事?
858 名前:デフォルトの名無しさん mailto:sage [03/12/13 07:56] >>856 ,857 アプリしか作った事が無いので、 その一般的な手順を知らなかった・・・(^^; あとで試してみます。ありがとう。
859 名前:デフォルトの名無しさん mailto:sage [03/12/23 02:12] ある手続きで、newでメモリーを確保しながら不定の個数の データを生成するとする。 type myPtr = ^myList; myList = record next: myPtr; Word: string[255]; end; のようなリスト形式だから、順番にデータを読みだせる。 disposeも順番にできる。 この手続きをライブラリ化したとして、 disposeをライブラリ外のメインルーチン側に任せるのは お行儀としてはいかがでしょう? あぶない? ライブラリに、読み出しやdisposeのルーチンを含める べきでしょうか?
860 名前:デフォルトの名無しさん mailto:sage [03/12/23 22:31] >>859 使う使わないは別として、一揃いの機能はライブラリにもって いて欲しいというのが普通じゃないかな。ライブラリ側としては 堅牢に作っておけば、それで問題ないわけだし。あと、リスト追 加(メモリ確保も含む)、削除、ソート、検索なども入れておけば、 わざわざライブラリ外で操作しようと思わないだろうし。 もしリスト形式(というかデータ形式)を「ライブラリ外から隠す」 ようなコンパイラの場合は「ライブラリで処理すべき」だと思い ます。そうすれば「メモリ保護機能を付け加える」というような 場合でも、インターフェイスさえ変えなければ、同じ感覚で使う ことが出来ますから。
861 名前:デフォルトの名無しさん [04/01/08 20:49] 質問です A、B、Cに数値が移動していく問題なのですが A B C 100 0 0 という状態から A B C 70 30 0 A B C 49 48 3 上記のように AからBには30%、BからCには10%分ステップごとに移動していくようには どのようなプログラムを書けばよろしいのでしょうか? 御教授の程よろしくお願いします。
862 名前:デフォルトの名無しさん mailto:sage [04/01/08 20:55] var x, y: integer; begin repeat x = a * 30 div 100; y = b * 10 div 100; a = a - x; b = b + x - y; c = c + y; until loop_end;
863 名前:861 [04/01/08 21:37] 迅速な回答本当にありがとうございました。 重ね重ね失礼を承知の上で2,3お聞きしたいことがあるのですが 上のプログラムではABC3個の値の移動ですが 自分で移動する個数を指定したり(10と入力すればA〜Jまでの数値の移動) Aから右に数値が移動していくと同時に、Cからある割合で左に数値を返していく A B C 100 0 0 A B C 70 30 0 A B C 52 39 9 (右へは30%、左へは10%という感じです) というプログラムはどう書けばよろしいのでしょうか? よろしければ教えていただけると嬉しいです。
864 名前:デフォルトの名無しさん mailto:sage [04/01/08 22:27] 配列かな。 右へ移動する分を蓄えるのと左の分を蓄えるのと用意して計算する。 Pascalで動的確保はどうやるか知らない。
865 名前:デフォルトの名無しさん mailto:sage [04/01/09 02:14] 宿題は自分でやりましょう
866 名前:デフォルトの名無しさん mailto:sage [04/01/09 03:00] よくやるのが、値とポインタをセットにした構造体を定義して、 newでメモリーを確保しながら、つないで行く事かな。 これなら、メモリーの許す限り、いくつ増えても大丈夫。 あ、でも、標準のpascalだと、メモリー確保できたかどうかは 検出できないんだっけ。 ただ、最大何個か決まってるなら、配列でそれだけの数を 確保しちゃってある方が、プログラムは簡単だわな。
867 名前:863 mailto:sage [04/01/09 09:24] >>864 ,865,866 アドバイスをどうもありがとうございました。 配列を用いてといているのですが、 『右へ移動する分を蓄えるのと左の分を蓄えるのと用意して計算』 という部分がどう記述していいのかよくわからないのです。 右から戻ってくる値はdowntoを用いて計算すればいいのでしょうか? また、蓄えた値を足したり引いたりして解を求めるということは ABC…といった場所の値が常に変化してしまうので 変化した値を常に用いて左右に移動する値を求める という部分の記述がどうにもわかりません。 どうか御教授の程よろしくお願いします。
868 名前:デフォルトの名無しさん mailto:sage [04/01/09 09:49] 自分なりに、出来ているコードを提示してはどうですか? コードが出てくればどの程度の知識があるのかも予測できるし。
869 名前:デフォルトの名無しさん mailto:sage [04/01/09 11:26] hoge: array [0..1] of array [0..10] of integer; hoge[0]にa,b,c...が入り hoge[1]に右からと左からを入れる 最後にhoge[0]に足す。
870 名前:デフォルトの名無しさん mailto:sage [04/01/09 21:14] >>869 わざわざ二次元配列にするより、一次元配列を2つ作った方が 分かりやすいと思うんだけど。
871 名前:デフォルトの名無しさん mailto:sage [04/01/09 21:38] 配列を2つ作る必要ってあるのか?
872 名前:デフォルトの名無しさん mailto:sage [04/01/09 21:50] >>871 私に言わせると「わざわざ二次元配列にする必要ってあるのか」 になるんだけど。 値を保存する配列と計算用の配列は分けた方が分かりやすいと 思うんだけど。
873 名前:デフォルトの名無しさん mailto:sage [04/01/09 22:36] ああ。出題の意味を取り違えていた。 配列は2ついるね。失礼。 2次元配列は意味ないね。確かに。
874 名前:デフォルトの名無しさん mailto:sage [04/01/10 02:56] >>867 問題をもう少し整理してくれ。 1. 移動率は場所によって変わるのか? >>861 だとA->Bは30%、B->Cは10%になっている。 2. >>863 で左右に移動する場合、上記1と左右の移動率の関わりは? 3. 左右端の処理はどうするのか? あと、移動率は定数か変数のどちらかもはっきりしないし。 ここいらへんがちゃんと定義されていないと、プログラムを書こうにも書けないぞ。
875 名前:861,863,867 mailto:sage [04/01/10 09:41] 皆様色々とアドバイスをありがとうございます。 >>874 そうでしたすみませんでした。 1は 移動率は場所によって変動です。 2は 移動率なんですが右方向へは(n/50)、左方向へは(n/100)といったようにN番目の場所により移動率が変化。 3は 左端は右隣に移動と右隣からの移動、右端は左隣からの移動と左隣への移動です。 移動率は変数です。
876 名前:デフォルトの名無しさん mailto:sage [04/01/10 09:48] 宿題の設問、そのまま書いてくれたほうがわかりやすいんだけどなぁ
877 名前:875 mailto:sage [04/01/10 10:12] 下のような状態遷移図が書いてあって → → → → @ A B ・・・ I ← ← ← ← @に適当な値を与えると まず@からAに移動、次に@からAに、AからBに、Aから@に、その次は・・・ といった様に数値が移動していく。 また、移動率は右方向には(n/50)、左方向には(n/100)というように、位置Nの値を 用いて設定する。 これにより、各場所での定常値を求めるプログラムを作成しなさい。 というようなことが書いてあります。
878 名前:デフォルトの名無しさん mailto:sage [04/01/10 11:32] ほんとに宿題だったか.... 右が n/50, 左が n/100 だと足して1になりませんが、ここはホントはなんてかいてあった?
879 名前:デフォルトの名無しさん mailto:sage [04/01/10 11:53] 別に足して1にならなくてもいいんでしょ。 const N = 10; var foo: array [1..N] of integer; procedure move; var i, right, left, temp: integer; begin right := foo[1] div 50; for i := 2 to N do begin left := foo[i] * i div 100; foo[i-1] := foo[i-1] - right + left; temp := right; right := foo[i] * i div 50; foo[i] := foo[i] + temp - left; end; end;
880 名前:デフォルトの名無しさん mailto:sage [04/01/10 18:57] >>877 「移動率は位置Nの値を用いて設定する」ってのがよく分からない なぁ。Nは何を表していて、その場所との関係はどうなっているの かをはっきりさせないとプログラムは組めないと思うんだけど。あと 「右方向には(n/50)」のnって何を表しているの? あと、数値は実数にするのか? それとも整数で良いのか? もし整 数なら除算の余り部分の処理はどうするのかが問題ですね。
881 名前:877 mailto:sage [04/01/10 22:18] >>878 ,879,880 アドバイスをどうもありがとうございました >>880 説明が足らず申し訳ありませんでした。 NというのはN番目ということです。 図の@〜Iのことです。 「右方向には(n/50)」、「右方向には(n/100)」のnはNと同じです。 @からAに移動する時は(1/50)、AからBに移動する時は(2/50)、・・・ HからIに移動する時は(9/50)ということです。 数値は実数です。
882 名前:デフォルトの名無しさん mailto:sage [04/01/10 23:51] >>881 なんだ算出可能なら簡単じゃん。私は場所によって特定値 (左右別)になるのかと思って「場所別、左右別の配列」を 用意しなければならないかと思っていました。 で、ここまではっきりすれば簡単に組めるのでは。日本語ア ルゴリズムだとこんな感じ。 { 事前に元量配列に量をセットしておく} for 遷移回数ループ do begin 計算配列を0クリア for 最初の要素から最後の要素まで do begin 左右の漏れ率計算 左右の漏れ量、残り量計算 計算配列に漏れ量と残り量を加える end; 元量配列に計算配列を代入 {途中結果の出力(遷移回数,元量配列)} end; {最終結果出力(元量配列)} 移動する個数を可変にする場合は、配列宣言を大きくセット しておいてその一部だけを使うとか、動的配列を使う(処理 系が許せば)などの方法があります。 注意点は最初の要素と最後の要素は片方にしか漏れ出さ ないことです。あとは自分で組めるでしょ。
883 名前:881 mailto:sage [04/01/11 10:06] 皆様のアドバイスを単に組み合わせただけですが以下のように記述してみました。 type foo=array [1..100] of real; var data:foo; i,j,n:integer; right,left,temp:real; begin write('移動する個数は?'); readln(n); data[1]:=100; j:=0; repeat right:=data[1]/50; for i:=2 to n do begin left:=data[i]*i/100; data[i-1]:=data[i-1]-right+left; temp:=right; right:=data[i]*i/50; data[i]:=data[i]+temp-left end; j:=j+1 until j=100; for i:=1 to n do begin writeln(i,'番目の定常値は',data[i]:5:3,'です。') end.
884 名前:883 mailto:sage [04/01/12 09:18] 上のプログラムを1000回繰り返したときと2000回繰り返したときに 得られた値に変化が見られないのですがなぜなのでしょうか? また、左右に移動する確率をrandomを用いて得ようと思い 簡単なプログラムでどのような乱数が返ってくるのかを 試したところ毎回同じ値しか帰ってこないのはなぜなのでしょうか?
885 名前:デフォルトの名無しさん mailto:sage [04/01/12 09:52] それが定常値
886 名前:883 mailto:sage [04/01/12 10:17] やっぱり定常値なんですね。 もっと果てしない回数を繰り返して得られるものだと思っていたので… type x=array [1..5] of real; var data:x; a,n:integer; begin for n:=1 to 5 do data[n]:=random; for n:=1 to 5 do writeln(data[n]) end. こんなプログラムでいつも同じ乱数しか返ってこないのですが 違う乱数を得るにはどうしたらいいんでしょうか?
887 名前:デフォルトの名無しさん mailto:sage [04/01/12 10:30] Randomと一緒にRandomizeを説明してない教科書は窓からポイ
888 名前:883 mailto:sage [04/01/12 10:45] 窓から ・⌒ヾ(*´_`)ポイしてきました ありがとうございました
889 名前:883 mailto:sage [04/01/12 12:33] 883で書いたプログラムは 待ち行列と考えると 右に移動していく値は人の到着の確率 左に移動していく値はサービスをうけ列を離れていく確率 になるのではないかと思うのですがどうでしょうか?
890 名前:883 mailto:sage [04/01/12 15:47] type foo=array [1..100] of real; var data:foo; i,j,n,k,m:integer; right,left,temp:real; begin write('行列の全人数は?'); readln(n); write('何ステップ?'); readln(k); write('窓口の数は?'); readln(m); {初期値の設定} data[1]:=1; j:=0; repeat {最初に人がが到着する確率} right:=data[1]*・・・; {移動} for i:=2 to n do begin {窓口でのサービス提供} if i<=m then begin {サービス終了率} left:=data[i]*・・・; data[i-1]:=data[i-1]-right+left; temp:=right; right:=data[i]*・・・; data[i]:=data[i]+temp-left end
891 名前:883 mailto:sage [04/01/12 15:48] {待ち行列} else begin {途中放棄率?} left:=data[i]*・・・; data[i-1]:=data[i-1]-right+left; temp:=right; right:=data[i]*・・・; data[i]:=data[i]+temp-left end; end j:=j+1 {決められたステップ数まで} until j=k; for i:=1 to n do writeln(i,'番目の定常値は',data[i]:5:10,'です。') end. 待ち行列に用いて行列の定常値を求めるには こんな感じにすればいいんでしょうか?
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] 夏とともに、さよなら・・・。