Pascal の初心者用の質問・相談所at TECH
Pascal の初心者用の質問・相談所 - 暇つぶし2ch360:デフォルトの名無しさん
02/09/20 22:08
Pascalは知らんが、Cでいう共用体(union)ってやつだな。
番号はどの構造をとるかっていう構造識別番号みたいな奴で、byte型なわけだ。
無名だから使ってないみたいだけど、定義の時は必ず適当に決めなきゃならんのかも?

361:デルファイの名無しさん
02/09/20 22:11
Var r : record
case TAG: byte of
0 : ( i : Longint );
1,9: ( a : extended);
(1) : ( b :array[0..9] of byte );
end;

のように、タグフィールドを入れられるのですが、これは省略可能なのです。
この場合、TAGが0ならaとbにアクセスするとエラーになるPascal実装もあった…かな?
(DelphiだとTAGは単なるメンバ以上の意味を持ちませんが)

362:デフォルトの名無しさん
02/09/22 11:48
なるほど共用体か。(Cも少しやっていたので分かる)
それで先頭のアドレスをそろえているのか。
持っているPASCAL入門の本は可変部の説明がなおざりだったんで何の事か良く分からなかったよ。


363:デフォルトの名無しさん
02/09/22 21:56
function(関数)とprocedure(手続き)の違いは返り値の有無と考えても問題ない?

364:デフォルトの名無しさん
02/09/22 22:19
問題ないです。

365:デフォルトの名無しさん
02/09/23 07:29
そいえばたまにわざわざダミーの返り値を使ってなんでもかんでもfunctionにしてるソースを見ることがあるな。
C出身者が書くとそうなりがちなのかも。


366:デフォルトの名無しさん
02/09/23 07:57
>>365
Cにはvoidがある。
そんなソースを書くのはDQNだけ。

367:デフォルトの名無しさん
02/09/23 11:32
単にprocedure(手続き)を宣言するのが面倒臭かったのでは?

368:デフォルトの名無しさん
02/09/23 11:38
>>367
> 単にprocedure(手続き)を宣言するのが面倒臭かったのでは?

意味わからん。function の方が面倒と思うが...。

369:デフォルトの名無しさん
02/09/23 13:53
まさか・・・これを・・・?
if A then B else C
A && B || C

370:デフォルトの名無しさん
02/09/23 22:53
コンポーネントパスカルをダウンロードしたけど、なにげによさげ
でも英語できないから難しい。だれか邦訳してくれ言語リファレンス。

371:デフォルトの名無しさん
02/09/23 22:55
URLリンク(www.fit.qut.edu.au)

372:デフォルトの名無しさん
02/10/05 15:00
大分下がって来たので揚げ


373:デフォルトの名無しさん
02/10/24 23:37
そろそろ保守

374:デフォルトの名無しさん
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:デフォルトの名無しさん
02/10/26 16:27
コンパイラに対する命令

377:デフォルトの名無しさん
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:デフォルトの名無しさん
02/10/27 02:14
古本屋いけ。

381:デフォルトの名無しさん
02/11/03 17:27
四個の変数 a,b,c,dの最小値を求める
IF文だけを用いたプログラムと
中間状態を用いたプログラムを書いてくれませんか?



382:デフォルトの名無しさん
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:デフォルトの名無しさん
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:デフォルトの名無しさん
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:デフォルトの名無しさん
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:デフォルトの名無しさん
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:デフォルトの名無しさん
02/11/24 23:32
その教科書のどこかにある list 型構造体の定義を見直してみてくれ。

395:デフォルトの名無しさん
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:デフォルトの名無しさん
02/11/25 19:56
単に、キーボードと印刷の都合と思ふ

400:398
02/11/25 19:59
Turbo Pascalの^と標準Pascalの↑はどちらが一般的なんですか?


401:399
02/11/25 20:03
同じ文字なんだけど、キーボード上に↑は無いので^を使ってるし、
印刷して^は見にくいので↑になっていると思ふ
Pascalが生まれた頃は2バイト文字なんて一般的じゃ無かった筈だし

402:398
02/11/25 20:24
普通のPascalの↑は、かな変換でのを使用していいってことですよね?

403:デフォルトの名無しさん
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:デフォルトの名無しさん
02/11/26 00:09
S1, S2は引数にvarが指定されていないので、変更不能だと思いますが、それはさておき、

線形リストはリスト全体を保持しておくために先頭のレコードを指すポインタが必ず必要です。
この値を変更して途中のレコードを指すようにしてしまうと
それ以前のレコードを参照する手段が完全に失われてしまいます。

S1   これなら全て参照可能

【データ|next】→【データ|next】→【データ|next】→【データ|nil=終端】


S1を変更した場合   S1
            ↓
【データ|next】→【データ|next】→【データ|next】→【データ|nil=終端】
 ↑
このレコードが参照不能になる

disposeしない限りレコードはメモリ上に残っていますから
参照不能なメモリブロックがメモリ上に残るという
まずい事態になります。(メモリリーク?)

線形リストの処理は
先頭を示すポインタはそのままに、
別なポインタ変数を用意して
その値を変更して順次リストをたどっていきます。

で、405のような処理を書いた場合は
一度きりなら動くかも知れないが
以降、このリストを参照することができなくなる、というのが結論かな。

408:補足
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
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:ああ
02/11/26 07:33
スンマソ、スレ違いでした。。。

413:デフォルトの名無しさん
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:デフォルトの名無しさん
02/11/27 22:59
引数の2個目はLONGINTが来るはずなのにSHORTSTRINGだよボケが

416:デフォルトの名無しさん
02/12/03 23:46
落ち阻止。

417:デフォルトの名無しさん
02/12/07 17:08
リスト構造をもつ、ポインタ(pointer)型の変数を使用してデータ入力後絶対値に関して昇順に並べ替えたいのですがどうしてもうまくいきません。どうプログラムを書いたらいいでしょうか?

418:デフォルトの名無しさん
02/12/07 17:13
>>417
よくわかりません。

419:デフォルトの名無しさん
02/12/07 17:18
簡単に言うとポインタを使って昇順の連結リストをつくりたいのですが。

420:デフォルトの名無しさん
02/12/07 17:51
>419
中身を比較したのちポインタを書き換える。それだけ……
基本情報処理の本のリストに関する部分を読めば直に分かる。



421:デフォルトの名無しさん
02/12/08 01:09
>>419
対象をポインタで持っているのなら、ヒープソートなんかで木構造を一時作って、
それを再度リスト構造に戻すのが良いかも。

汎用的に作るのなら、ソート関数は作り込まず、外部のソート関数を呼び出すよ
うにすればよいし。

422:
02/12/08 20:48
コンソールアプリケーションである値を入力したら窓を閉じるにはどうしたらいいですか?

423:デフォルトの名無しさん
02/12/08 20:56
コンソールアプリケーションに窓なぞない。

424:
02/12/08 21:04
>>423
窓って言うか…何て言ったらいいんだろう?
Delphiでコンソールアプリケーションを作って実行したらコマンドプロンプトが起動するじゃないですか。
それを閉じたいのですが無理なんでしょうか?

425:デフォルトの名無しさん
02/12/08 21:12
exit(return)

426:422
02/12/08 21:21
>>425
exit(return)だったら実行できませんでしたがちょっと削ってexitにしたら閉じることができました。
ありがとうございました。

427:デフォルトの名無しさん
02/12/08 22:29
>>462
ごめん、(return) はなんとなくノリで。
DOS 窓の終了と同じ雰囲気で。

428:デフォルトの名無しさん
02/12/09 00:28
>424
DelphiはDelphi板で聞くのが良いよ。

429:デフォルトの名無しさん
02/12/09 03:00
>>425-426
Exitは関数や手続きを抜けるだけじゃない?
もちろんprogram .. begin .. end のレベルで実行すればプログラム自体を
抜けるけど。
どこでも即座に終了させたかったらHaltを使うべし。

430:425
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記録実験
03/01/08 22:23
IP記録実験
スレリンク(accuse板)

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:デフォルトの名無しさん
03/01/09 00:41
>>1
全板IP記録に追い込まれた今の気持ちをどうぞ。

438:デフォルトの名無しさん
03/01/09 01:01
記念カキコ

439:デフォルトの名無しさん
03/01/09 01:21
ひろゆきは架空の人物ですよ。

440:デフォルトの名無しさん
03/01/09 01:33
(´皿`;)邪穂でごめん


441:IP記録実験
03/01/09 02:08
IP記録実験
スレリンク(accuse板)

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:デフォルトの名無しさん
03/01/09 02:08
>>540
逝き遅れの妹発見

443:デフォルトの名無しさん
03/01/09 02:45
>>50
タイプミス
スマソ

444:デフォルトの名無しさん
03/01/09 18:27
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 138720人 発行日:2003/1/9

年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。

そんなわけで、年末に予告したIP記録ですが実験を開始しています。

「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。

んじゃ!

────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
──────────────
Keep your thread alive !
スレリンク(software板)l50
──────────────

445:デフォルトの名無しさん
03/01/10 00:16
qbだけじゃなかったのか

446:デフォルトの名無しさん
03/01/10 09:04
モルモットにされたのか

447:デフォルトの名無しさん
03/01/10 11:02
もうちょっと電波度下げよう。意味不明になりすぎてる

448:デフォルトの名無しさん
03/01/10 11:32
厨房板の荒らしは削除されたようだ
いつか全板で強制表示になるのだろうか?
スクリプトくめばどこの板だって荒らせるだろうし

449:デフォルトの名無しさん
03/01/10 12:18
実験のためにトオルに依頼されてコピペやってるって可能性もあるのか・・。

450:デフォルトの名無しさん
03/01/10 12:47
>>936
それは当然考えてはいますが、小ネタやちょっとした意見を書き込むときにもそれを
意識しなくてはならないというのはしんどい

451:デフォルトの名無しさん
03/01/10 13:01
FreePascalはマルチプラットフォームであることを忘れているに、1Penis

452:デフォルトの名無しさん
03/01/10 13:45
つーかちょっと北朝鮮や朝鮮総連を批判しただけでログから身元割れたりしないか心配。
奴ら何しでかすかわからない凶悪な連中だからな。

ログってひろゆきしかみれないのか?
削除人が見れたら問題・・・以前削除に絡んで強請をした奴もいるらしいし

453:デフォルトの名無しさん
03/01/10 14:57
ふむ。

454:デフォルトの名無しさん
03/01/10 16:24
言いたいことも言えないこんな世の中じゃ


        ウェー ハッハッハ

455:デフォルトの名無しさん
03/01/10 22:48
2chのIDてIPを変換してるんだっけ?
だったら、全板強制IDにして暗号キーだけ保存しておけばいいんじゃないの?

456:デフォルトの名無しさん
03/01/10 22:55
>>735
書き方がネタっぽすぎw

457:デフォルトの名無しさん
03/01/11 00:12
スレリンク(korea板)

在日のアサピーが自ら2CHにブラクラ貼ったと自白www

調子に乗ってアタック開始、しっかりログ取られて通報すました。

祭り中です。

458:デフォルトの名無しさん
03/01/11 00:20
夜勤 ★さんはなんでふだんはBG ★とかキャップを使い分けてるんですか?

459:デフォルトの名無しさん
03/01/11 09:42
削除板に書き込む時いちいち設定し直すのが面倒臭いから

460:デフォルトの名無しさん
03/01/11 09:45
元々パク(ry

461:デフォルトの名無しさん
03/01/11 10:16
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 139038人 発行日:2003/1/10

なにやら、連日メルマガだしてるひろゆきです。

そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。

重くなって落ちたりしてもご愛嬌ってことで。。。

んじゃ!

────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
──────────────
Keep your thread alive !
スレリンク(software板)l50
──────────────

462:デフォルトの名無しさん
03/01/11 11:13
フェミホモ荒らしが来なくなるなら
まあいいか。。。

悪いことをする気はなかったど、なんだか
夢がなくなるな。
なんつーか、手口のきれいな銀行破りが
捕まっちゃったみたいな気分。

463:デフォルトの名無しさん
03/01/11 13:15
まあ、匿名じゃなきゃできんような自由な言論なんてたかが知れてるしな。
今までの2ちゃんみてりゃ一目瞭然。
匿名のかさをきて暴言はいてる奴らが減っていいかも。

464:デフォルトの名無しさん
03/01/11 16:02
じゃ、おまえが2ch来なければ良い。それだけのこと。

465:デフォルトの名無しさん
03/01/11 16:07
ウェー ハッハッハ  PART 2
スレリンク(news板)

466:デフォルトの名無しさん
03/01/12 00:09
ネオむぎを超えるわけない
犯人が17歳以下なら話は別だが

467:デフォルトの名無しさん
03/01/12 00:18
中国の漬け物ですか?(^_^;)

468:デフォルトの名無しさん
03/01/12 10:32
231 >判決文にISP責任法への配慮とかいうちゃんちゃらおかしい文面が書いてなけりゃ

253 >>どうも昔から、下級審の裁判官は余計なことを書きたがる。

お前ら判決文を読んだのか? 被告がISP責任法を根拠に削除義務違反はないと主張したから書いてるんだよ。

URLリンク(courtdomino2.courts.go.jp)


469:デフォルトの名無しさん
03/01/12 21:08
IP取るようになったら些細なことでも訴えられるかもな。
ここまで話題性の在るサイトだし。
IP取ってるんだから今までは『訴えても意味無い』って諦めてた
人たちも訴えるようになるかもね。
基本的に訴えられるのは書き込みした人だろうけど、
その様な場所を提供したって事実に変わりは無いから
今まで以上に2chも訴えられるかも…。

推論スマソ

470:デフォルトの名無しさん
03/01/12 21:11
削除前の手続きの話なんで、発信者の責任の話とはまぜないで欲しいが。

471:デフォルトの名無しさん
03/01/12 21:23
辞書登録してみた⇒夜勤さん!! ヘ(^^ヘ)(ノ^^)ノ

472:デフォルトの名無しさん
03/01/13 01:22
3 6 1 4 2 5 をクイックソートで整列させるにはどうしたらいいですか?

473:山崎渉
03/01/13 18:26
(^^)

474:デフォルトの名無しさん
03/01/13 19:20
今GNUパスカルを使って勉強しているんですが
freeパスカルとの違いは何かあるんですか?
使える文法が違う、みたいな

475:デフォルトの名無しさん
03/01/13 22:14
405 名前:心得をよく読みましょう 投稿日:02/12/31 11:04 ID:ADTGAx9x
はぁぁぁ。あと、1週間以内で生理・・・。

何事にもむかついてたまらないっ!
生理前って、ブルーになったり、いらいらしたり。。。
ほんと勘弁してって感じ。

476:山崎渉
03/01/15 17:52
(^^)

477:デフォルトの名無しさん
03/01/19 02:08
constって何なんですか?


478:デフォルトの名無しさん
03/01/19 19:22
たしかサリエヌの友人だったと思います

479:デフォルトの名無しさん
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:山崎渉
03/01/23 21:53
(^^)

481:477
03/01/26 02:18
>>479
すいません
なかなか書き込むひまがありませんでした
レスありがとうございました

482:デフォルトの名無しさん
03/01/28 10:04
URLリンク(www.makie.com)
Mac用だがここで紹介されているThinkPascalってどうよ?
少しやってみたが、英版なのでエディタで日本語が表示できん・・・

483:デフォルトの名無しさん
03/01/29 00:31
CarbonLibは使えるんだろうか

484:デフォルトの名無しさん
03/01/30 12:01
上のリンク見る限りでは無理そうだね。
別途コード戦士が必要みたい。
でもそれだったら最初からコード戦士でやった方が良い罠。

485:デフォルトの名無しさん
03/02/02 04:46
>>484
これでいけるのではないでしょうか。

Carbonized Port of THINK Pascal TCL
URLリンク(pascal-central.com)


486:デフォルトの名無しさん
03/02/02 05:03
test

487:デフォルトの名無しさん
03/02/04 11:45
>>298が全然わかんねぇ…(´д`;)

488:デフォルトの名無しさん
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:デフォルトの名無しさん
03/02/06 10:33
おお、神!(´д`;)アリガ㌧

490:デフォルトの名無しさん
03/02/10 20:53
Pascalって実用性無いのに勉強しても平気でしょうか?

491:デフォルトの名無しさん
03/02/11 03:47
えーと…、まあ、これからやるならやめときなさい。
Eiffelをお薦めしよう。

492:レイホウ@6歳
03/02/13 04:49
>>490
C++を勉強しなさい
C#はだめだぞ

Gnu CppならLinuxでも使用可能だ

えいめ~ん


493:デフォルトの名無しさん
03/03/08 12:55
はげしくホッシュ

494:デフォルトの名無しさん
03/03/08 13:23
>>490
Pascalを勉強する価値がないとしたらそれは
実用的では無いからではなく時代遅れだから。
昔は教育用言語として教えられてはいたけど
今ではJavaとSchemeに取って代わられたよ。

495:デフォルトの名無しさん
03/03/08 13:23
と、一ヶ月前のレスに混じれ酢してみました。

496:デフォルトの名無しさん
03/03/29 11:11
10年程前にPC-DOS+Turbo Pascal 7で作ったプログラムを動かしたいのですが、困ったことに最近のパソコンはEMSメモリが使えないものが多いのです。
新型パソコンでEMSメモリ使用可能なものがあったら教えてください。


497:デフォルトの名無しさん
03/03/29 11:14
DOS 上で動かすか、エミュレータ上で動かせば。

498:デフォルトの名無しさん
03/03/29 11:21
>>496
DOS5.0の時とかXMSをEMM386でEMSに化けさせてたと記憶してるけど。

499:デフォルトの名無しさん
03/04/01 21:59
496です。
497さん498さんレスありがとうございます。

>DOS 上で動かすか、エミュレータ上で動かせば。

ハードの問題なのでどちらの方法でも動かないのでは?
システムコマンダーでWinとDosのデュアルブートにするつもりなのですが





500:デフォルトの名無しさん
03/04/01 22:08
>>499
間を取ってWindows3.1とかどうだ?

って言うかVMWareでも使った方が楽ちんな予感。

501:デフォルトの名無しさん
03/04/01 22:21
EMS だけの話なら EMS をエミュればOK!
昔やった記憶があるが具体的には忘れた。
ただ楽するなら、500(おめ!)さんの
言うようにVMWareでも使った方がいい。

502:デフォルトの名無しさん
03/04/02 09:02
現在Pascal勉強中の初心者です。

Pascalって実用性が無いんですか?
CGIをやるのに適してるって聞いたんだけど・・・

503:デフォルトの名無しさん
03/04/02 12:48
趣味でやるぶんにはかまわないでしょ。

504:デフォルトの名無しさん
03/04/02 14:04
実用性はあるが、CGIってのは多分Perlと混同してる(w

Pure Pascalじゃなくて有償版Delphi/Kylixなら高機能なCGIも作れないでもない

505:デフォルトの名無しさん
03/04/02 23:07
>Pure Pascalじゃなくて有償版Delphi/Kylixなら高機能なCGIも作れないでもない

アホがいます。


506:デフォルトの名無しさん
03/04/02 23:14
WebSnapとかIntraWebとか、まあ知らないなら知らないでいいけどさ

507:デフォルトの名無しさん
03/04/03 06:10
>>506
何でもかんでもライブラリがないと何もできないかわいそうな人がいます。


508:ななしへたぐらま ◆XcB18Bks.Y
03/04/12 16:13
こういう書き込みの後でなんですが,
Cのscanfに相当する機能を実現する関するのライブラリって
どこかにありませんでしょうか.
以前自作したのですが作りが下手なのか処理が重すぎて….
テキスト解析はちゃんと本を読んで勉強しないとダメかな.


509:デフォルトの名無しさん
03/04/12 20:05
>>508
> Cのscanfに相当する機能を実現する関するのライブラリって
> どこかにありませんでしょうか.

scanf のソース見てポーティングすればいいとおもうけど。
可変引数の扱いをどうするかが問題かと思うが。

510:デフォルトの名無しさん
03/04/12 20:58
>>509
オープン配列とかで何とかならない?

511:山崎渉
03/04/17 15:47
(^^)

512:ななしへたぐらま ◆XcB18Bks.Y
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
URLリンク(homepage.mac.com)

515:デフォルトの名無しさん
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
URLリンク(www.gnu.org) より:

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:デフォルトの名無しさん
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とその応用
URLリンク(www.saiensu.co.jp)

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
URLリンク(homepage.mac.com)

525:デフォルトの名無しさん
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 マニュアルでつ。
URLリンク(www.gnu-pascal.de)


530:513.
03/04/25 06:58
>>527
多分それは各要素に不定値を表すビットが含まれているんじゃないかと。

531:デフォルトの名無しさん
03/04/25 07:04
GNU Pascal で c : set of -10..65535; とおりました。


532:デフォルトの名無しさん
03/04/25 07:05
>>530
単に2byte単位でしか割り当て出来ないだけのような

533:513.
03/04/25 07:14
>>530
そういわれればそうだな。はやとちりでした。
実行環境に適切な境界迄余分なバイトが詰められるのは構わないです。

534:デフォルトの名無しさん
03/04/25 07:26
URLリンク(www.k-514.com)


535:デフォルトの名無しさん
03/04/25 08:09
GNU Pascal で set -65535..65535 は gpc --standard-pascal --setlimit=131071 でとおりました。


536:521
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:別人
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:デフォルトの名無しさん
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:デフォルトの名無しさん
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:デフォルトの名無しさん
03/04/29 18:56
We Love Pascal.

548:山崎渉
03/05/22 05:01
━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―

549:山崎渉
03/05/28 12:52
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎―◎                      山崎渉

550:デフォルトの名無しさん
03/05/28 21:24
URLリンク(community.borland.com) のTP5.5のとこからTurboPascalのOOP入門が落とせる。
AppleのObject Pascalレポートの名前が書いてあるので、
やっぱObjectPascal="object"型のあるPascal、でいいらしい。

だからどうした、と言われると困るが

551:デフォルトの名無しさん
03/06/13 17:06
良スレの予感

552:デフォルトの名無しさん
03/06/26 22:36
その教科書のどこかにある list 型構造体の定義を見直してみてくれ。

553:デフォルトの名無しさん
03/07/03 18:50
Lazarusの落とし方がわからん...

554:デフォルトの名無しさん
03/07/03 20:20
初心者から質問です

10人分の学生の成績データを打ち込み、
次に10点区切りでヒストグラムを出力するプログラムを書こうとしています。
現在ヒストグラムの作り方がちとわかりません。どんな形のヒストグラムでもいいのでプログラムソースを教えてもらえないでしょうか?

555:デフォルトの名無しさん
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:デフォルトの名無しさん
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:デフォルトの名無しさん
03/07/03 20:48
スマソ>556

560:デフォルトの名無しさん
03/07/03 22:42
集合型はフラグくらいにしか使ったことなかったけど
なかなかエレガントな使い方があるものだね
感心しますた

561:デフォルトの名無しさん
03/07/11 15:43
学校の課題で『ブラックジャック』作ることになったんですが
どなたか、教えていただけませんか。

562:デフォルトの名無しさん
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

取りあえずじゃねーんだよ!!
おまいはタンスとかあってなっとらんぞ!!!

URLリンク(jbbs.shitaraba.com)

566:デフォルトの名無しさん
03/07/13 00:11
A  U  T  H  O  R   D  A  T  A

本田 守さん

--------------------------------------------------------------------------------

名前
本田 守/ほんだ まもる

ハンドル
Mr.あねさん

ホームページ
URLリンク(www2.neweb.ne.jp)
URLリンク(hp.vector.co.jp)

MESSAGE
プログラムの勉強をはじめて1年とちょっとになります。まだまだ高度なものを作るには程遠いですが、先だっては某社のプログラミングコンテストに入賞させていただきました。

--------------------------------------------------------------------------------

S  O  F  T  W  A  R  E

--------------------------------------------------------------------------------

Windows95/98/Me/アミューズメント
●KIKU おど~る
 音楽CDをかけるとキャラクターが踊ります

567:デフォルトの名無しさん
03/07/13 03:20
集合型にシフト演算子があったらなぁ

568:デフォルトの名無しさん
03/07/13 05:41
それは集合なのか?

569:デフォルトの名無しさん
03/07/13 12:46
ビットの集合です

570:ななしへたぐらま ◆XcB18Bks.Y
03/07/13 14:37
>>562
あの漫画の題名はトランプのそれとは無関係だそうです.

…じゃなくて,どうしてプログラミングを教えている学校の先生は
生徒の理解度を無視してこういう課題を出すのか理解に苦しみます.
とりあえず>561はじゃんけんゲームは作れますか?


571:561
03/07/14 00:38
>570
もちろん作れません
何かヒントでもいいんでおねがいします。

572:デフォルトの名無しさん
03/07/14 08:12
>>571
ゲームのルールをよく吟味して場にある有形、無形のものを列挙してみんさい

573:デフォルトの名無しさん
03/07/14 09:00
カードをとってくる関数と
勝敗を判定する関数と
手に持ったカードを表示する関数と
入力を受け付けてカードをとるか終了するか決める関数を書けばいい。

574:デフォルトの名無しさん
03/07/14 11:30
データ構造決めなきゃ片手落ち

575:デフォルトの名無しさん
03/07/14 13:50
綺麗なお姉さんのパイパンおま○こ生写真を発見!
URLリンク(plaza16.mbn.or.jp)

これはタマラン…(´Д`;)ハァハァ


576:561
03/07/14 14:05
>>573
関数が使っている教科書にあまり載ってないんで
何かいいサイトあったら教えてください

577:ななしへたぐらま ◆XcB18Bks.Y
03/07/14 14:46
>>571
簡単なゲームプログラムを解説したサイトか入門書を見つけてみて.

やりたい処理をプログラムというカタチにするというのは一番基本的な能力であり,
一つや二つのヒントで解決する問題ではありません.
でもこれさえクリアすればプログラミングは半分マスターしたようなものです.


578:デフォルトの名無しさん
03/07/14 16:06
ルール見たけど結構複雑。ま、そこまで要求してないのかもしれんが。
「無限デック使ってます」って言えばカードの残り考えなくてもすむかも。
(ハートのAが10枚出てきても知らんふり。)

579:山崎 渉
03/07/15 09:45

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄

580:デフォルトの名無しさん
03/07/23 20:52
良スレ保守

581:デフォルトの名無しさん
03/07/24 18:19
Pascalの集合型と混同してるのかな。このプログラムは集合型は関係ないよ。

582:デフォルトの名無しさん
03/07/25 01:14
どのプログラム?

583:デフォルトの名無しさん
03/07/27 17:35
URLリンク(grape.astron.s.u-tokyo.ac.jp)
ここの練習1なんですが、どのように回答するのがスマートなんでしょうか。
学生番号用のソート手続きをもうひとつ加えて場合分けするのはあまりよくないような気がするんですが、
他に思い浮かばないんです。

584:デフォルトの名無しさん
03/07/27 21:04
比較用関数を複数作って関数ポインタで切り替えて使う。

585:デフォルトの名無しさん
03/07/27 21:06
ソート用の手続きをつくる。
引数は点数でソートするか学生番号でソートするかを示す。

「student_record」と「ソートの引数」を引数にとる関数をつくる。
返り値は点数か、学生番号。
この関数をつかってソートをつくる。

あんまり効率よくなさそうだけど。

586:デフォルトの名無しさん
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:デフォルトの名無しさん
03/07/27 22:51
iアプリはi-mode Javaでしょ。
HSPじゃ無理。

DoCoMo Net - 製品・サービス - i-mode - iアプリコンテンツの作成について
URLリンク(www.nttdocomo.co.jp)


589:583
03/07/27 23:14
なるほど。ありがとうございます。
>>585>>586の手法は同じではないですよね。
かなり参考になりました。

ですが、585さんの
>ソート用の手続きをつくる。
>引数は点数でソートするか学生番号でソートするかを示す。
これを具体的にどうしたらよいのかぜんぜんわからないんです・・・
例題だと、
if student[i].score < student[j].score then begin
で点数で比較してますよね。
これを点数だけではなく番号でも比較できるにするためにはどうしたらいいのでしょうか。





590:デフォルトの名無しさん
03/07/27 23:29
procedure sort(x: ...);
...
if hoge(student[i], x) < hoge(student[j], x) then begin
って書いて、hogeも書く。

591:デフォルトの名無しさん
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:デフォルトの名無しさん
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:デフォルトの名無しさん
03/07/28 00:35
なるほどなるほど。
かなりよくわかりました!

ここは本当にすごい人が来るんですね。
驚きました。

594:デフォルトの名無しさん
03/07/28 00:47
すごくはないよ。基本的なことだし。

動的な関数を作りたいなと思って
Pascalの上で実現してしまったとかならすごいと思うけど。

595:デフォルトの名無しさん
03/07/30 12:17
Lazarusの落とし方知ってるひといますか?

596:デフォルトの名無しさん
03/07/30 14:39
「ハノイの塔」とやらの問題解決プログラムを教えて下さい。
本気で何がなにやら・・・。

597:デフォルトの名無しさん
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
03/07/31 21:32
どうもありがとうございます。
なんだかエラーが沢山出るんですけど、貼り付けるだけじゃ駄目なのでしょうか。。。
厨ですみません。

599:デフォルトの名無しさん
03/07/31 22:51
hogeと
.... from から to へ一枚写す
のところをきちんとかかないとダメ。

hogeを文字列にして
移動を表示するようにするとか。
writeln(from + 'から' + to + 'へ移動');

Pascalの細かいところ忘れたんで正しいかどうか解らないけど。
再帰するにはforwardとか要るような気もするな。

600:山崎 渉
03/08/02 02:15
(^^)

601:山崎 渉
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:デフォルトの名無しさん
03/08/19 00:00
無理ですか。
あ、そっか。画面の大きさが分からないから、
1ページ分書き直してスクロールアップ
するのも無理だ。うーむ。


605:デフォルトの名無しさん
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:デフォルトの名無しさん
03/08/19 12:55
そういう手もあるか。
でも、画面の大きさを取得するのに、処理系毎の
工夫が必要。つーか、無理な場合もありそうな予感。

それよりも、独自に拡張して、cls, locateなどを
処理系毎に作るのが良いような気がしてきた。
・・・でも、それやってると、キリがないし、
実力の範囲を超えそうです。


607:デフォルトの名無しさん
03/08/19 21:10
画面制御ライブラリを1つだけ用意する。
実体は各処理系に移植されたC言語のcursesライブラリを呼び出すだけ。
外部ライブラリの実装方法に規格上、規定はないのでやりたい放題。
cursesが移植されていない処理系はライブラリの仕様を公開してユーザーに任す。
というのは駄目?


608:デフォルトの名無しさん
03/08/22 00:10
標準的なPascalの文字変数ってstring[255]ですよね?
で、var s:string[255]; という状態で、
1行ずつreadln(f,s); で読んでいくとして。
もしも1行の長さが255バイト以上だったら、
どうなるんでしょう。

アホな質問ですみません。


609:デフォルトの名無しさん
03/08/23 00:26
後ろの方がカットされます。

610:デフォルトの名無しさん
03/08/23 05:32
1行が255バイト以上の行を含むテキストファイルの読み込みは、
どうしたら良いのでしょう?


611:デフォルトの名無しさん
03/08/23 05:53
DelphiでもFreePascalでも、大抵は長い文字列を持ってるんじゃないかな…。
無いならChar単位で読むとか。

612:デフォルトの名無しさん
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
03/08/23 22:26
>>611
Delphiの無限とも言える長さの文字列は、
便利で良いですねぇ。しかも、CommaTextで
自動的にCSVを切り分けてくれるし。(日本語対応で)

でも、今はちょっと長い文字列は無理みたい。

というか、やりたいのはCSVの読み込みなんですけど、
ひょっとしたら1行を一度に読み込むんじゃなくて、
1文字ずつ分析して、項目を切り分けながら
読み込む方が良いのかな?

ひょっとして、アルゴリズムって、公開されてる?


615: ◆R/rLuLKeEI
03/08/27 02:02
>>614
>ひょっとして、アルゴリズムって、公開されてる?

理論的には有限オートマトン、正規表現、字句解析、構文解析などを検索すれば、いいんじゃないかな。
CSV形式をうまく構文(文法)に書き下す事が出来れば、ある程度形式的にプログラムに落す方法があるよ。

616:デフォルトの名無しさん
03/08/27 02:10
>>614
C#のでよければ。なんとなくは分かると思うよ。
URLリンク(onigiri.s3.xrea.com:8080)

617: ◆R/rLuLKeEI
03/08/27 02:44
>>616
そだね、CSVごときに有限オートマトンとか大袈裟だったな。
で、これは日本語対応?

618:デフォルトの名無しさん
03/08/27 03:15
C#に日本語非対応なコードなど無い。

619:デフォルトの名無しさん
03/08/27 04:41
無知の知ったか。

620:デフォルトの名無しさん
03/08/27 09:04
>>602
ANSIエスケープシーケンスを使う

621:610
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
03/08/29 10:52
一応、CSVを切り分けられるコードは書けた。
C#の>616のコードは読めなかったので、
適当に考えてやってみた。だけど、""→"に
するのとか、漢字コードのチェックとか
やってないし、変なCSVを回避するのも
できないし、拡張性が無いコードになって
しまっている。


626:デフォルトの名無しさん
03/08/29 12:26
Delphiのコンパイラ使おうぜ。

627:デフォルトの名無しさん
03/08/29 19:24
>>622
ANSIエスケープシーケンスも知らないコテハンか。
時代だな。

628: ◆R/rLuLKeEI
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
03/08/30 07:35
Cのソースを見ながら、CSV切り分け書いてるんだけど。
Cだとbreak,continueとかで、loopを跳んだり、
文をキャンセルするので、全然参考にならん。


630:デフォルトの名無しさん
03/08/30 14:09
同じように書けば良いじゃん。

631:610
03/08/30 16:21
無理じゃん。
break, continueが使えるか使えないかで、全然変わるよ。

とりあえず、フラグを追加して、似たような動作を確保。
""→"にするのも出来たし、"なし文字列のスペースを
取り除くのも出来た。変なCSVでなければ、概ね基準通り
切り分けられるようになった。


632:デフォルトの名無しさん
03/08/30 16:40
>>631
えっ…

ひょっとして、DelphiやFreePascalにあるSystem.Breakは、独自拡張!?

633:610
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
03/08/30 20:04
>633は別人だが。

>>634
もちろん、goto文を使うことも考えたけど、
なんか邪道っぽくない?

ちなみに、うちのはTHINK Pascal。


636: ◆R/rLuLKeEI
03/08/30 22:06
>>635
PASCALで大域ジャンプ以外にgotoを使うのは邪道っぽい。

ちなみに、うちのはGNU Pascal。
ただし、JIS-PASCAL(X3008-1990)の範囲内で考えている。

637:610
03/08/30 22:25
macの場合、NewHandleやNewPointerでメモリーを
確保した場合、メモリー確保に失敗したら
OSErrで分かるんだけど。
標準pascalのnewでメモリー確保に失敗したら
どうなるの?というか、その判別方法は?


638: ◆R/rLuLKeEI
03/08/30 23:06
>>637
>標準pascalのnewでメモリー確保に失敗したら
>どうなるの?というか、その判別方法は?

JIS-PASCAL(X3008-1990)には何の記述もない。
必ず成功するかのようにも読める。
というわけで、その判別方法はない。
1.2 規定外事項
 (1) 特定のデータ処理システム又は処理系が処理できるプログラム及び
   データの大きさ又は複雑さの限界並びにそれらの限界を超えた場合の措置。

639:デフォルトの名無しさん
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
03/09/01 13:34
>>639
ほんとだ・・・あった・・・。サンクス
標準Pascalの本を見ながらやってたので、気づかなかった。
THINK Pacal入門の後ろの方に、ちらっと載ってた。

あとこれでCとの違いといえば、case文の挙動が
ちょっと違う事くらいか。


642:デフォルトの名無しさん
03/09/12 12:33
例えば、'tarou'と入力させて、
tarouという名前の変数か、
tarouという添え字の配列を作って、
tarou[rika]:=100;
とか代入するには、どうすればいい?


643:デフォルトの名無しさん
03/09/12 13:11
できません。

644:デフォルトの名無しさん
03/09/12 16:25
じゃあ、tensuuは固定の名前で、
name:='tarou';
kamoku:='rika'
tensuu[name,kamoku]:=100;
kamoku:='eigo'
tensuu[name,kamoku]:=90;
とかは?


645:デフォルトの名無しさん
03/09/12 16:47
連想配列かあ。純粋なPascalじゃ無理かもね。
拡張構文使っていいならやりようはあるけど。

646:デフォルトの名無しさん
03/09/12 19:06
そうそう。連想配列。無理か・・・。
似たようなことは出来ない?

つまり、プログラム自体は一定で、
データの構造次第で変数を増やしたり
減らしたり、参照したり、したい。

いっそ、独自のスクリプト言語を
Pascalで作る方法を考えた方がいいか・・・。


647:デフォルトの名無しさん
03/09/12 21:07
連想配列そのものじゃなくても
type Tensuu = record Name, Kamoku: string; Tensuu: Integer end; の配列かリンクリストでいいのでは?
SetTensuu(list, name, kamoku, 90); みたいに使えるアクセサ関数を用意しとけば不便ってこともないでしょ。

Delphiなら、配列プロパティとかカスタムバリアントで構文上連想配列作れるけど

648:デフォルトの名無しさん
03/09/13 01:42
ここは「Pascal の初心者」なので、Delphi 等の拡張 Pascal は外すべきでは?

で、純正 PASCAL には「連想配列」はありません。
配列の引数として許されるのは列挙可能な型のみです。列挙不可能な数学的実数を表現している実数型も使用できません。
だいたい、純正 Pascal には文字列型すらないんだし....

連想配列を実現するコードを自分で書くことになります。
それを使って
647 さんの
>Delphiなら、配列プロパティとかカスタムバリアントで構文上連想配列作れるけど
ってことを実現することができるでしょう。

649:デフォルトの名無しさん
03/09/13 08:59
Delphiで言うところの動的配列も、標準では無いですよね?
var hairetu: array [0..maxNum] of integer;
の maxNumが変数であるのは許されないもんね。
まあ、この程度ならリストで代用できるから良いけど。

BasicでいうDIM文が懐かしい・・・。

>>648
>連想配列を実現するコードを自分で書くことになります。
どこかに、転がってないでしょうか。
"pascal 連想配列"でググッても、rubyやPHPが出てくる。

それと、連想配列って英語ではなんて言うの?


650:デフォルトの名無しさん
03/09/13 09:45
あそしえーしょんあれい。

651:デフォルトの名無しさん
03/09/13 14:52
久しぶりにTHINK Pascalのマニュアルを引っぱり出したが。
associtation arrayは載ってない。当然か・・・。

探していたら、こんなのを見つけた。
PASCAL ファンのための CGI プラットフォーム 「Reims」
URLリンク(member.nifty.ne.jp)
こいつの言語仕様を参考に、associationやlongstringが
標準のPascalでも使えるようなルーチンを作るか。

・・・って、自分にできるか?(^^;
もっと偉い人が作った奴、どっかに落ちてないかなぁ。


652:デフォルトの名無しさん
03/09/14 11:18
PNL Librariesに、連想配列のコードがあった。
だけど、これはMacの、しかもコードウォーリアー用みたい。
少し書き換えればTHINK Pascalでもいけるみたいだけど。
スレ違いになりそうです。失礼しました。

653:デフォルトの名無しさん
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
03/09/16 20:04
まだソースをざっと見ている段階ですけど、
結構高度なことをやっている様子。
追加、削除、検索など、一通りのルーチンは
揃っているみたい。使い方を解析せねば。


655:レイホウ@6歳
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:デフォルトの名無しさん
03/10/14 04:20
3つの整数を読み込み、最小値と最大値を出力するプログラムを作りなさい。

657:デフォルトの名無しさん
03/10/14 09:28
>656
宿題?

658:デフォルトの名無しさん
03/10/14 09:32
最初に
 整数を三つ読み込む。
次に
 最小値を見つける。そして出力。
最後に
 最大値を見つけ、それを出力。

簡単でしょ

659:デフォルトの名無しさん
03/10/14 12:29
こういうのをわざと、ObjectPascal使ってやったりしてな。

660:デフォルトの名無しさん
03/10/14 17:02
あ、そろそろ後期の授業が始まったわけか。

661:でたらめ
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:デフォルトの名無しさん
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
03/10/16 01:30
あ、sgn に if文を使っているんだっけ。

664:でたらめ
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:でたらめ
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:でたらめ
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
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:でたらめ
03/10/17 19:08
>>667
発想がすごい!
けど、うちの環境(THINK Pascal)だと、
2行目が通らないっす・・・

669:622
03/10/17 20:32
>>668
あ、関数型(手続き型の方が分かりが良いかな)って
標準Pascal仕様じゃなかったんですね。ちなみにDelphi
では通りました。

670:でたらめ
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:デフォルトの名無しさん
03/10/18 17:14
>>656
読み込んでソートして一番上と一番下を見る

672:662
03/10/21 18:45
>>670
あ、なるほど。2変数のやつをもう一度繰り返せば3変数
に対応出来ますね。私は「一度に3変数に対応出来ない
か」と考えていました。

673:でたらめ
03/10/22 00:22
>>672
でもこれって、>667の
>writeln('min=', fmin(fmin(a, b), c));
>writeln('max=', fmax(fmax(a, b), c));
の派生みたいな物ですよ。
ただ、公式にあてはめただけです。


674:でたらめ
03/10/22 00:25
他にも、
const
maxint = 32767;
minint = -32768;
var
index: array[minint..maxint] of boolean;
を使う方法も考えたけど、
メモリーが足りない(?)とかで
配列が確保できずに断念したっス。


675:662
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
03/10/31 05:22
>>676
配列とか知っているか?

それとなんでその問題で「実数型」にする必要があるんだ?
実数型だと比較が難しいぞ。

679:デフォルトの名無しさん
03/10/31 08:01
>>678
問題が実数型で入力せよとなっているので・・・。
配列はあやふやです・・・。

680:でたらめ
03/10/31 08:40
3つの最大・最小の次は、この課題ですか。ふふーん
じゃあ、どうしよっかなー

681:でたらめ
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:でたらめ
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
03/10/31 18:34
>>682
実数型を使っていないけど、いいのか?

それとトレース表の人数のあとに改行が入っているけど
それも問題無し?

685:でたらめ
03/10/31 19:10
>>684
そやな、ごもっとも。(w
でも、例とは違ってもええんちゃう?
それ言い始めると、「最低」の数字の
表示位置がずれてる気がするけど。


686:でたらめ
03/10/31 21:16
ところで。私も詳しく知らないんだが。
実数型って比較が難しいの?


687:662
03/11/01 09:12
>>685
おお、表示位置のずれは気づかなかった。という
ことで、そこも直す必要があるぞ。>>682

>>686
10進と2進の変換誤差(浮動小数点の場合)と計
算誤差があるから、等号比較だと偽になる場合
が考えられる。あと、有効桁数の問題も気にとめ
ておく必要が出る場合もあるし。

まあ、今回みたいに変数に入れた物を代入する
場合なんかは等号比較が出来る場合が多いけ
ど、代入を計算と見なした場合は一度倍精度に
してから単精度に戻すなどの処理が入って値が
変わる可能性があることを頭に入れておいた方
が破綻しづらくなります。

と言うことで私は整数型で実装出来るものは整数
型で実装するようにしています。

688:でたらめ
03/11/01 10:59
>>687
そうか。誤差か。普段そこまでシビアな計算って
したことないんで、気にしなかった。
うちも整数型がほとんどです。

今回の場合、まさか身長で小数点以下2桁以上が
必要になることはないので。入力した数値を
×10して整数型で保存・計算。表示の時に
÷10して実数型(例だと下一桁)っぽく
表示するのではあかんのやろか。
この処理、逆に面倒?誤差が大きくなる?


689:662
03/11/01 11:44
>>688
私もその方が良いと思ったので「実数型にする必要があ
るんだ?」と聞いたんだけど... でも「問題が実数型で入力
せよ」という事らしいから、実数型にする必要があるみた
いですね。

それとも「入力が実数型」を受け付けると言うことだけで
良いのなら内部は整数で扱う方がプログラム的には楽
ですね。

計算することを考えるのなら、小数点以下2桁くらい取っ
ておいた方が安全かも。

690:でたらめ
03/11/01 13:19
実数型で入力し・・・そうか!!やっぱり
入力さえ実数型なら、ええんちゃう?
処理まで実数型とは書いてないもんな。

>>682
考えることは同じやね。うちも最初は小数点以下
2桁と思ったけど、例が下1桁だったので、表示
するときの手間を考えて下1桁って書いてた。

そんなわけで。>682は、課題完了だな。

691:682
03/11/01 23:35
レス有難うございます!!
あとですね、>>676のwhile文のほうがあって身長に0を入力した場合に入力が終わるプログラムなんだけど、
そうすると出力のときに身長に0が出てしまうんですよ。どうすればいいですか?

692:でたらめ
03/11/02 00:30
>>691
forとwhileの基本的な違いではないか。
それを考えるのが課題のポイントじゃ。


693:でたらめ
03/11/02 11:26
for 1~2回
 入力 1~2回繰り返し
戻る

repeat
 入力 1~2回繰り返し、3回目に0を入力
0以外は戻る
最後の入力は無効

で、ええんちゃうか。
そうすると問題は、のっけから0を入力された
場合のエラーセーフだけど。ま、やってみそ。


694:デフォルトの名無しさん
03/11/02 23:35
if文は使ったらいけないのヵ
begin
一つ目を入力;
while i>0 do begin
出力;
入力;
end;
end.
たぶん不合格。
ん?0を「入力した」場合に「入力が」終わる?

695:でたらめ
03/11/03 00:44
あ。すまぬ。>693は何か勘違いして書いてるかもしれん。
そか。repeatはuntilで、whileは違うか。
ま、気にするな。(w

696:でたらめ
03/11/03 00:51
罪滅ぼしに、ちょっとヒントを。
var next:boolean;
...
next:=true;
while next do
begin
入力
if a=0 then next:=false;
その他のチェック
end;


697:デフォルトの名無しさん
03/11/03 01:44
なんだその変なコード。

698:でたらめ
03/11/03 02:31
>>697
まあ、でたらめっちゅー事で。気にするな。
よかったら、すばらしいサンプルを提示して
やってくだされ。


699:デフォルトの名無しさん
03/11/03 17:26
>>696
while true do で if ~then break すればいいんじゃ?

700:でたらめ
03/11/03 18:13
>>699
前にも似たような話があったけど、
標準Pascalではbreakが使えないのよん。

701:でたらめ
03/11/03 18:13
と、思って>700を書いたが。私の勘違い?

702:デフォルトの名無しさん
03/11/03 19:01
1周目を必ず通すならrepeat使いなよ。

703:でたらめ
03/11/03 19:11
>>702
>676

704:デフォルトの名無しさん
03/11/03 20:04
ちょっくら問題作った奴に山嵐決めてくる。

705:662
03/11/03 23:08
ほんとだ、これは問題を作ったやつがバカ。
repeat - until を使った方が素直に組めるのに。
どうしてもwhileでやらなきゃならないのなら、入力
関数でも作って以下のようにするか...

function 身長入力関数(var 身長) : boolean;
begin 入力処理 end;

while 身長入力関数(身長) do
  身長追加処理;


>>701
その通り、breakは無いです。元が教育用言語
だから、抜け道は作らないような構文になって
いるんですよね(caseのelse、otherwiseも無い)。

706:でたらめ
03/11/03 23:15
>>705
「課題」なんだから仕方ないよ。

Cだと、入力しつつ比較が出来るから、
関数を作る必要はないんだよね?確か。

breakが無いのはまだいいけど、
caseのotherwiseも標準にはないの?
これないと辛い。つーか、無理。
THINK Pascalはある。


707:662
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:でたらめ
03/11/04 13:11
あのー、sinの宣言を見ていると、
整数型なんですけど・・・
小数入力しても、小数点以下が
切られてない?
(試してないので分からんけど)

713:デフォルトの名無しさん
03/11/04 13:35
sinってのは正弦みたいでやだな。

714:デフォルトの名無しさん
03/11/04 17:40
右シフトさせるプログラムがどーしても
出来ない・・・・

715:デフォルトの名無しさん
03/11/04 18:13
表示位置のずれはまだ直っていないようだが... あと
ちゃんとコンパイルして実行して動くかどうか確認し
て(もしくは不明点が見つかって)からアップしてくれ。

おまえのソースを全てチェックするほど暇じゃないん
だ。そっちのソースを直すより自分で全て書いた方
が早そうだし。


>>714
環境(対象コンパイラ、機種、OS等)の必要情報が
判らないとコメント付けようがないぞ。

716:デフォルトの名無しさん
03/11/05 00:46
>>715
例どうりに動いたと書いてあるよ。

717:デフォルトの名無しさん
03/11/05 09:21
>>715
フリーパスカル CPAD win2K

718:デフォルトの名無しさん
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:デフォルトの名無しさん
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:デフォルトの名無しさん
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:デフォルトの名無しさん
03/11/05 20:20
>>720
0~15の10進数しか変換できない。

722:718
03/11/05 22:26
>>719
俺、配列使えなんて一言も言ってないんだけど。

何か良く分かんない(理解出来ないやり取りの)
所に来てしまったようなので、落ち着くまでしばら
く黙っていることにする。

723:でたらめ
03/11/05 22:53
学校の課題なんでないかい?
配列使え、っていう。

724:718
03/11/05 23:51
>>723
課題は課題で良いんだけど、「他の人に分かって
もらう書き方」ってのがあると思うんだ。特にこうい
う場では。それと「自分で出来るだけ努力する」っ
てのも大事だし。

それをしないでソース垂れ流し(それもちょっと?の)
されるんで、もう私には理解不能。だからこの件
(と思われるもの)には黙ることにしました。

725:でたらめ
03/11/06 01:21
ところで。右シフトって何?
2で割ればいいんじゃないの?


726:デフォルトの名無しさん
03/11/06 21:54
>>725
マイナスの値を右シフトと2で割ることをしてみれば、
違いが分かると思う。それと、算術計算とビット操作
はやっぱり別の話だから。

727:でたらめ
03/11/06 23:03
マイナスか。それは考えなかった。
でも、ビット操作なんてアセンブラでも使わない
限り必要ないんじゃないかと思うけど。
Cならいざしらず、Pacalでは意味ないよねぇ。
課題じゃしょうがないけど。


728:デフォルトの名無しさん
03/11/06 23:16
>>727
だってグラフィックフォーマットとか通信プロトコルなんかで
「ビットで状態を表す」物って結構多いから、ビット操作がで
きないと辛い場合って結構あるよん。

そういう時までアセンブラを持ち出すのはちょっと大仰だと
思う。高級言語でサクサク組めた方が何倍もカンタン。

729:でたらめ
03/11/07 00:00
>>728
そうか。なるほど。

ビット操作はマックならtoolboxにあるので、
THINK Pascalでもコマンド一発。


730:デフォルトの名無しさん
03/11/11 16:54
a<>b<>c みたいなことをやらせるには どうしたらいいのでしょう… 配列を使った課題がT-T

731:デフォルトの名無しさん
03/11/11 19:50
a <> b and a <> c

732:デフォルトの名無しさん
03/11/11 19:59
>>730
a=cでもええのか?

>>731
b=cの可能性はあるな

そういう意味じゃない?

733:デフォルトの名無しさん
03/11/11 20:04
a <> b and a <> c and b <> c
等しくはならんが気休めにどうぞ。

734:デフォルトの名無しさん
03/11/11 22:03
andの方が優先度高い罠

735:デフォルトの名無しさん
03/11/12 02:04
そもそも、>730の課題は何がさせたいのだ?
aとbとcがいずれも異なる値であることを
確認すればいいの?
にしては、配列を使うって・・・意味不明。


736:デフォルトの名無しさん
03/11/12 23:39
>>735
意味を取ろうとするから意味不明。気にしなければOK。

課題を出している方はまともな課題を出していて、ここで
聞いているのの頭が「意味不明」なだけのような気がする
(もしくは本気で訊いていないのか)。今までの経緯から
すると。

意味が通る訊き方をすれば、それなりに答える気になる
のに。

737:デフォルトの名無しさん
03/11/14 16:34
配列を使ったプログラムの途中にa<>b<>cという判定が必要な部分があるとか


738:デフォルトの名無しさん
03/11/15 22:16
すいませんご教授おねがいします。
画面を再構成させる方法は存在するのでしょうか?
存在するのでしたら教えてください。
学校の宿題を作ってるとき、再構成しないと見栄えが悪いもので…


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch