[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/09 09:01 / Filesize : 272 KB / Number-of Response : 983
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Pascal の初心者用の質問・相談所



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/

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]
まだソースをざっと見ている段階ですけど、
結構高度なことをやっている様子。
追加、削除、検索など、一通りのルーチンは
揃っているみたい。使い方を解析せねば。







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<272KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef