トップページ⇒tech
982コメント347KB

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

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさんNGNG
Pascal の初心者用の質問・相談所
コンソールのみ。GUI は扱いません。
「Cをやったけど難しいので、やっぱりPascalからぼちぼちやるぅ」という人向け。

コンパイラダウンロード
http://www.vector.co.jp/vpack/filearea/win95/prog/pascal/index.html

ちなみにDelphiは
「モナーの *やさしい* Delphi質問スレ」
http://pc.2ch.net/test/read.cgi/tech/1003113413/
0002デフォルトの名無しさんNGNG
参考
http://www.illy2.f2s.com/jpg/miruna.jpg
0003デフォルトの名無しさんNGNG
「Cをやったけど難しいので、やっぱりPascalからぼちぼちやるぅ」というのが
いまいちわかりません。
Pascalは厨房用の言語なんですか?
0004デフォルトの名無しさんNGNG
sage
http://www.illy2.f2s.com/jpg/miruna.jpg
0005デフォルトの名無しさんNGNG
>>3
C は高級言語と言いながら、実際はかなりハードウエアに近い中級言語です。
メモリー管理とか、ポインターとか、ややこしいことがいろいろあります。

Pascal はもともと教育用として設計されているので、変なことはコンパイラーがエラーとして検出します。
Cは、プログラマーが全知全能であるという仮定で設計されているので、よく知らない人が変なコードを書くとすぐに暴走します。
0006デフォルトの名無しさんNGNG
Pascalが教育用でかんたんって認識は現在だと当てはまらないでしょ。
ANSI Cは型チェック厳しいし。
0007デフォルトの名無しさんNGNG
>Cは、プログラマーが全知全能であるという仮定で設計されているので、
>よく知らない人が変なコードを書くとすぐに暴走します。
とか言っている人はPascalでもヤヴァイと思いますが?
0008デフォルトの名無しさんNGNG
例えばCでは、配列の境界を越えて、値を代入したりすることが平気でできます。
コンパイラーも、なんも文句も言いません。

Pascal では、決してこのようなことはさせません。
0009デフォルトの名無しさん NGNG
ねがったり
最近Delphi触り始めたんすけど、ObjectPascal? なるものが
さっぱりでカナーリ気持ちわるひ
何か初心者本とか読むと
「文法を覚えなくてもアプリを作れるのがdelのいい所」
とか書いてるし。。。。。
もうね、
0010デフォルトの名無しさんNGNG
ちゅかbrcc32じゃダメなん?
パスカールたん、、、(´д`;)
0011デフォルトの名無しさんNGNG
>>8
>例えばCでは、配列の境界を越えて、値を代入したりすることが平気でできます。
>コンパイラーも、なんも文句も言いません。
purifyくらい買えよ
0012デフォルトの名無しさんNGNG
Delphi は、Object Pascal を使っています。
カンタンに GUI を作れます。
Delphi の質問は、>>1 にも書いてありますが、

 「モナーの *やさしい* Delphi質問スレ」
 http://pc.2ch.net/test/read.cgi/tech/1003113413/

こちらでしたほうが、迅速に回答が得られます。

ここは GUI を扱わない、コンソールのみの Pascal スレッドとします。
0013デフォルトの名無しさんNGNG
それでは、最初の授業です。

program hello(output); (←セミコロン)
begin
 writeln('Hello world !!'); (←セミコロン)
end. (←ピリオド)

これで、画面に、「Hello world !!」と出力することができます。
0014デフォルトの名無しさんNGNG
>>8
そういう機能ってTurboPascalでもあったけど、あれってPascal標準の
機能だったのかなぁ?

Cは「中級言語」ってよく言われるけど、C++とPascalだったら、
各種データ構造を扱えるC++の方が「高級」だよな。
0015デフォルトの名無しさんNGNG
Cは低水準言語です。
0016デフォルトの名無しさんNGNG
↑ こう言うツールの話しだす馬鹿が絶対現れるんだよね (^^;;
0017デフォルトの名無しさんNGNG
>>16
なんのこと言ってるの?
0018デフォルトの名無しさんNGNG
>>14
標準。
0019デフォルトの名無しさんNGNG
>>16
たぶん>11
0020デフォルトの名無しさんNGNG
>>10
brcc32.exe はリソースコンパイラだけど・・・。
0021デフォルトの名無しさんNGNG
pascalがcに比べて教育用(入門用)に良い理由は
 1、配列とポインタと文字列がしっかり区別されている

 2、begin / end により比較やループネストをしすぎると行が長くなり
   結果、自然に構造化するクセが身につく・・・場合がある

 3、制御文が不親切=少なく、機能が貧弱 である為 表記方法に
   自由度が少なくなり、結果、同じアルゴリズムなら似たコードと
   なり他人(教師が)読みやすい・・・・場合がある

 4、宣言について厳格(関数の引数も同じでなければならない等)であり、
  他の特性とあわせて、自由度が少ない = コーデングは自然に統一さ
  れる = 他人のコードでも読みやすく、Cのように コーデング規則の
  ようなのを別に作る必要がない

反面、Modura2/TurboPascal/Delphiでない素のpascalには分割コンパイル
出来ないという玩具レベルと言われる欠点がある。
0022デフォルトの名無しさんNGNG
とりあえず、円周率を求めるプログラムを書いてくれ
0023デフォルトの名無しさんNGNG
pascalは処理系を作る教育に良い、とされている、らしい。
0024デフォルトの名無しさんNGNG
>22
begin
writeln(PI);
end.
0025アライグマPasacalNGNG
ここでDev-Pascalをダウンロードすべし。

http://www.bloodshed.net/devpascal.html

FreePascal(知っているよね)を内蔵した高度なIDEがFreeで手に入る。
ただしWin32環境専用。エディタはそのままでは日本語が文字化けするが
オプションでフォントを設定すれば問題ない(Terminalの14Pointがおすすめ)

Win2000あたりを使っているなら本家FreePascalをダウンロードするより。こちら
のほうがインストールが簡単で使えるエディタがあるのでいいかも。

ただしマニュアルが貧弱、FreePasalはTurboPasca完全互換&DelphiPascal一部互換
なので本家よりマニュアルをダウンロードして研究すべし。

英語が苦手な人はこちらのサイトで日本語訳が進行中。サイトを丸ごとコピーする
ツールなどを利用してダウンロードすべし。

http://home.interlink.or.jp/~ipfr_cat/index.html
0026アライグマPascalNGNG
現在、標準Pascalを使用して実用的なツールを開発している人は
すくなく、また標準PascalひいてはTurboPascalを解説する書籍は
ほとんど入手困難になりつつあるので、上記サイトの日本語訳は
ありがたい。

非常にコンパクトなコンソールアプリが作れます。ぜひ試してみて
ください。
0027デフォルトの名無しさんNGNG
>>21
賛成できるのは1だけのような…
0028デフォルトの名無しさんNGNG
Pascalといえば、Unitの循環参照エラーが未だによくわからない。

UnitAとUnitBがともに両者を参照する場合、

Uses節は、両者ともにimplemenntationのUses節を利用するとエラーを回避できると
あるけど何故そうなるのか詳しい参照のルールを知りたいものです。
0029デフォルトの名無しさんNGNG
・相手にusesされていたらusesし返すことはできない。
・interface部でusesしたらusesしたことになる。
・implementation部でusesしてもusesしたことにならない。
と考えると分からない?
0030デフォルトの名無しさんNGNG
>>25
これもコンポーネントぽとりぺたりはサポートしてないのね(T_T)。残念。
それこそがdelphiの(唯一の(ぉ))アドバンテージなのにぃ。

難しいとは思うけど、del自体のコンポの仕掛は
体系だてて作られているわけだから、その体系をなぞれば
互換または類似のフリーソフトも作成可能と思われ。
最適化とかのマジックが必要な個所じゃないし。

…それとも 2way 特許のせいで、作れないの?
0031デフォルトの名無しさんNGNG
>>30 コンポーネントぽとりぺたりは”コードジェネレーター”でもいいはず
つまりもっといいものはできるはず
大体コンポーネントぽとりぺたりと言ってもそのあとはコードは
せこせこ書くわけだし

delphiの肝はDCC32のみ
delphiはコンパイル速度が速いしWWWのライブラリーは最強では?
あとWINAPIで組めば20kbyteで相当できる。

ところでdev-pascalダウンロードしてみたんだけど
サンプルがビルドできん....
なんかリソースエラーとかが出る。ぎょえっ。
ちなみにdelphiとかCとか入れてないマシンなんだけど
cygwinがいるのかなぁ?
0032アライグマPascalNGNG
>30

確かにマウスでGUIをつくれないけど、単純なWindow形式ソフトの
ひな形は作ってくれる。すごくシンプルだからコードガリガリ主義者
にはもってこいのはず。Pascal学習(構造化からOOPまで)に
もってこいと思うけどね。

>http://www.vpascal.com/

かつて有償だったOS/2で有望視されていたDelphiPacal一部互換の
Pascalコンパイラ(フリーでゲット!!)
OS/2、Win32用があります。エディタが使えなかったので、
「1」のリンク先のCpadシリーズで、FreePascal用の利用してみるとよい。
0033アライグマPascalNGNG
>31

cygwinはいりません。必要なものはすべて圧縮ファイルに入っています。
0034デフォルトの名無しさんNGNG
delphi?っていうかPASCALってさ
変数の宣言文が分離してるよね、
コンパイラ側から見たらやっぱりどこでも宣言よりはいいんじゃないかなぁ。
あとこのことはインラインアセンブラとリンクさせやすいよね、
つまりアセンブリ言語にはCよりもPASCALのほうが近い

begin endは{}でもいいと思うけれどもね、
レコード型とかクラス型がCだと->なのが.というのがよいと思う
0035デフォルトの名無しさんNGNG
Delphi/Kylixのフリーが出た以上
FreePascalやTP互換言語の役目は終わってる。
コンソールアプリ限定であってもDelphiやるのが良いと思う。
# なるべく人的リソースをBorlandに集めたいってのが本音なんだけどね。
0036アライグマPascalNGNG
>35
DelphiはVCLのもつ力を利用する処理系です。
VCLを利用しないならばDelphiを使う意味がほとんどありません。

言語学習が目的であったりとか、使用するマシンが非力であるとか。
コンソールアプリで十分な業務が遂行できるのなら、これらFreeコンパイラ
は大変価値があると思います。

手になじむツールは人それぞれで、どれがベストなのかいろいろ試して
みるのも良い勉強になるとおもっています。
0037デフォルトの名無しさんNGNG
{}よりもPythonちっくなほうが好きだなあ。
よく擬似コードでPascalちっくで、ブロックはインデントのみって
あるじゃん。ああいう感じ。
0038アライグマPascalNGNG
ポトペタの処理系はあることはあります。

http://www.lazarus.freepascal.org/screenshots.php3?&language=english

FreePacal内蔵のDelphiライクなIDEを搭載しています。GUIはGTK+を
利用しています。

しかし、画面の書き換えが見えるほど動作が遅く、まだまだです。
0039デフォルトの名無しさんNGNG
{}はコメントだって。
0040デフォルトの名無しさんNGNG
>>34
>あとこのことはインラインアセンブラとリンクさせやすいよね、
>つまりアセンブリ言語にはCよりもPASCALのほうが近い

これはないだろ(^^
0041デフォルトの名無しさんNGNG
TPのinline を思い出して言ってるんじゃないか?
0042デフォルトの名無しさんNGNG
インラインアセンブラは「リンク」とは言わないだろ。
Cだってインラインアセンブラはあるだろ。
インラインアセンブラがあってもアセンブリ言語に近いとは言わないだろ。
と、3つほど突っ込みドコロを挙げてみる也
0043デフォルトの名無しさんNGNG
Win32APIのPASCAL呼び出し規約の話だったり
0044デフォルトの名無しさんNGNG
言語の学習にもってこいなのは、人にもよるが、ゲームのショートプログラム
だとおもう。昔のベーマガやI/Oに載っていたBASICプログラムの移植を試みたいと
思っている。
0045デフォルトの名無しさんNGNG
今年からDelphiをはじめようと思い、やはり言語からと考えて
FreePascalを頂戴したんですけど、Pascalの解説サイトや本って少ないですね (T-T
丁度SDKをはじめた頃に一緒にC++を勉強したので、同じようになると思ったんだけどなぁ・・・
今はここを読んで統合環境からこちょちょしてます
http://homepage2.nifty.com/okamotoy/objpas/

大学の生協とかに行けばいい本有るかな ^^
0046デフォルトの名無しさんNGNG
PASCALなんて今更やりたいと思わない。
Cが難しいって言うけど、一体何と比べて難しいの?
ANSI Cの基礎の基礎で挫折するような奴は
どんな言語やっても結局中途半端で終わると思うが・・・
0047デフォルトの名無しさんNGNG
c->pascalで引っかかりやすいのは、型を一度typedefしてからじゃないと
使えない場合があること、例えば
int** i;
は
type pint = ^Integer;
var i: ^pint;
としなくてはいけない。
004845NGNG
>>46
でもDelphiしたいなら必要じゃ無いですか?
僕の場合Cも++も理解したとは言い難いですけど  ^^;;;
0049>45NGNG
なんか36がmisleadしてるようだけど
Delphiはコンソールアプリの開発をフルサポートしてるよ。
デバッガや文法の日本語のオンラインヘルプもあるし。
# 但しPascalとObject Pascalとの切り分けは一切ないけど。

>大学の生協とかに行けばいい本有るかな ^^
大学の図書館に腐るほどあるでしょ。
いまどきあまり借りる人もいないだろうから入手は楽かも。
お勧めの良書は知らないけど、経験的にはずれも少なかったような。
0050デフォルトの名無しさんNGNG
>>48
まあ、Dephiが使いたいからって人はわかるんだけどね。
1は、
>「Cをやったけど難しいので、やっぱりPascalからぼちぼちやるぅ」という人向け。
って言ってるだろ。
それがちょっと理解できない。
Cが難しいからPASCALをやってみても、PASCALにもCとは違った意味で難しい点があるんだから
まずは我慢してCを続けるのが本筋。
005145 NGNG
なるほど、皆さん有難う。
>>50は>>1に対する突っ込みだったんですね
それは同感です、どんな言語でも何処かで引っ掛かるのは同じですよね
良く分からないけど、今の学生さんって初めがJavaだったりするんだろうか ^^;
>>49
有難う。
近所の大学に潜入してみます  ^^;;
0052デフォルトの名無しさんNGNG
#include <stdio.h>
int main(void)
{
FILE *fp;

fp = fopen("mona.txt","w");

if(fp == NULL){
printf("ファイルを開けねーぞ、ゴルア!\n");
return 1;
}else{
printf("思いの丈をブチマいちゃる!\n");
}

fputs(">>1\n",fp);
fputs("Pascalなんて糞言語。",fp);
fputs("逝ってよし!\n",fp);
fclose(fp);

return 0;
}
0053デフォルトの名無しさんNGNG
>45 いや、あの、Delphi6パーソナル素直にやればいいと思うよ
 インストールしてDemosのサンプルアプリ順に触ればいいじゃない
0054デフォルトの名無しさんNGNG
>>47
Turboなら i : ^type;で直接指定できたような記憶があるんですが。
0055デフォルトの名無しさんNGNG
>54 いや i:^^type; の事を言ってるんだと思うよ
0056デフォルトの名無しさんNGNG
delphi ならproがいいよ
ソースがついてるから 追いかけたいユニットプロジェクトに追加しておけば
トレースでどこまででも追いかけていける。
  STL標準になったC++よりずっと理解し易いよ
0057デフォルトの名無しさんNGNG
岩波講座 ソフトウェア科学
アルゴリズムとデータ構造 石畑 清

に、

type list = ↑cell;
   cell = record
        element : datatype;
        next : list;
       end;


の↑ってどーいう意味?
0058デフォルトの名無しさんNGNG
delphi pro personalなんてのがあればだけどね
pascalコンパイラごときに何万も払えないよ。
0059デフォルトの名無しさんNGNG
>>57
ポインタ。
TurboPascalではこう書いてた。

type list = ^cell;
0060デフォルトの名無しさんNGNG
PC−8001用のパスカルコンパイラは、よいものだた。
160x100のモノクロの画像2枚を切りかえるだけなのに、当時厨房だたおれは、家に帰ってから(以下略)
0061アライグマPascalNGNG
>49

>>なんか36がmisleadしてるようだけど
>>Delphiはコンソールアプリの開発をフルサポートしてるよ。
>>デバッガや文法の日本語のオンラインヘルプもあるし。

misleadの意味がわからないけど、スレッドの流れをおかしな方向へ
持っていっているという意味でしょうか?
自覚していないけど、もしそうならごめんなさい。

Delphiではコンソールアプリが開発できないと言ったということでしょうか?
もしそれなら、私はそんなことは言っていません。

36で言いたかったことは、高度なGUIが必要としないなら、なにもDelphiを
使わなくても別のコンパイラで目的が達成することもできるということです。
486マシンであるとかRAMが8メガしかないといった化石パソコンでも、
言語学習マシンとして再利用することができるということです。
0062アライグマPascalNGNG
気分を害したらごめんなさい。

>50

>>>「Cをやったけど難しいので、やっぱりPascalからぼちぼちやるぅ」という人向け。
>って言ってるだろ。
>それがちょっと理解できない。
>Cが難しいからPASCALをやってみても、PASCALにもCとは違った意味で難しい点があるんだから
>まずは我慢してCを続けるのが本筋。

「1」は、書いてある通りの思惑でスレッドを立てたのだから、それを
そのまま受け止めてスレッドを展開すべきだと思う。

スレッド設定の理由そのものから批評すると、後のスレッドはどう展開
していくのか分からなくなると思います。
<この後、Cの学習についてスレッドを伸ばすわけにはいかないでしょうし>
<学習する姿勢や心構えを論じるスレッドではなさそうですし・・・>

Delphi云々を書かれている人が多数おられますが、「1」は

>ちなみにDelphiは
>「モナーの *やさしい* Delphi質問スレ」

というように別スレッドを参照して誘導しているので、それに
従うべきだと思います。
0063デフォルトの名無しさんNGNG
>>61
>>35はコンソールアプリしか書かないとしても、Delphi/Kylixがいいよ
って言ってるのに
>>36でコンソールアプリで十分ならFreeコンパイラは価値がある
(つまりコンソールアプリにはDelphiは向かないと読める)って言ってるのがmisleadなんでないの?
0064もう1つNGNG
俺に言わせると、昔の文法を覚えて、簡単な例題をやってみるくらいじゃ、「言語学習」としてはサミシイ。
0065アライグマPascalNGNG
>>>36でコンソールアプリで十分ならFreeコンパイラは価値がある
>> (つまりコンソールアプリにはDelphiは向かないと読める)って言ってるのがmisleadなんでないの?

う〜ん。コンソールアプリにはDelphiは向かないというのなら、そのように書きますけど。
BBSではどうしても舌足らずな表現になりやすいので「裏読み」されやすい
表現は避けるようにしていたつもりですが・・・。
(仮に裏読みしてもそんな解釈になるのかしら???)

>俺に言わせると、昔の文法を覚えて、簡単な例題をやってみるくらいじゃ、「言語学習」としてはサミシイ。

最初は簡単な例題かもしれないけど、いずれCで蓄積されたアルゴリズム集の
Pascal移植に手を出すかもしれないじゃないですか(爆
0066デフォルトの名無しさんNGNG
63じゃないが、>>36はそう読んでも不思議はないと思う。
つーか、実際そういう印象を受けた。
0067デフォルトの名無しさんNGNG
Win95環境でもDCC32単独で使えば楽勝でしょう>>61
006867NGNG
さらに言えば、Dcc32のコンパイル速度は爆速
 コンパイルはFreePascalの半分以下で終わり
出来上がるサイズもずっと小さかったと思うよ
0069デフォルトの名無しさんNGNG
コンソールアプリとDOSアプリを混同しているに1Byte.
0070デフォルトの名無しさんNGNG
FreePascalはマルチプラットフォームであることを忘れているに、1Penis
0071デフォルトの名無しさんNGNG
Pascal入門程度ならどのコンパイラ使ったって
portableなコードしか書けないような...
0072アライグマPascalNGNG
Dev-Pascalの独自仕様かもしれないけど、ディレクトリ(フォルダ)名が
全角文字だとコンパイルエラーがでるみたい。みなさん気をつけて。
0073デフォルトの名無しさんNGNG
これなんとなくよさそう。

Bloodshed Dev-Pascal 1.9
http://download.cnet.com/downloads/0-4003375-100-3121652.html?tag=st.dl.10001-103-1.lst-5-1.3121652
0074デフォルトの名無しさんNGNG
アマゾンでPASCALの良本一生懸命探したけど、あんまりないね。
Turbo PASCALとDelphiはいっぱいあるのだけど。
基本文法を解説してある入門書がほしいんだよな。
0075デフォルトの名無しさん NGNG
漏れも探してます。
標準関数(手続き)が載ったリファレンスが欲しい
Delphi買ったので一通り変数型とかプリミティブなアルゴリズムなんかを
コンソールでやろうと思うんだけど、関数が分からんからどうにも勝手が悪いです
近所の本屋さんには超初歩本しか無かったし
全部ShowMessageとInputBoxでやるのは悲しすぎる

Del使いさんはどんな風にステップアプしましたか
いきなりイベントごりごり書いたんだろうか
0076デフォルトの名無しさんNGNG
>>75
>Del使いさんはどんな風にステップアプしましたか
0077デフォルトの名無しさんNGNG
>>76
途中で送信してしまった。

で、漏れはTurbo Pascal 3.0当時に標準Pascal的なconsole baseの書き方を覚えた。
file型変数をAssignしてReset/Rewriteして云々、
表示はwriteln、入力はreadln...てな感じだよな。
今のDelphiでもconsole applicationにすれば使えるよね。
0078デフォルトの名無しさんNGNG
おお〜 考えてるのはそんな感じです >>77
何かDCC32でIntToStrとかすると「ハァ??」って言われて鬱なんです

Turbo時代の本を探して買えば良いんですね
しかしネットはPascal本の情報少なすぎるです
リファレンスみたいなの買えば当たり外れ無いのかなー
0079デフォルトの名無しさんNGNG
>78 Delphi6ならヘルプ->ObjectPascal言語ガイド->標準ルーチンと入出力 を読めばよろしい

IntToStrはSysUtilsユニットの関数であり、これらはVCLリファレンスにあります
uses SysUtils; してる?
0080デフォルトの名無しさん NGNG
ObjectPascalってKeyword多いなー OOダカラカ・・
Cの方がシンプルじゃん (ー_ー
0081デフォルトの名無しさんNGNG
>80 そりゃそうでしょう。

pascalとcならpascalがシンプル
DelphiとCならCがシンプル
DelphiとC++ならDelphiがシンプル
0082デフォルトの名無しさんNGNG
>>81
>pascalとcならpascalがシンプル

どっちもどっちなんじゃ?
この二つじゃ。
0083デフォルトの名無しさんNGNG
>82 制御文や演算子の数ではpascalがシンプルだし
  文字列や配列の扱いは マシンから見たらcがシンプルだけど人から見たらpascalがシンプル
0084デフォルトの名無しさんNGNG
>>83
制御構造だと
Pascal場合
if
case
for
while
repeat..until

Cの場合
if
for
switch
while
do..while

同じようなもんでしょ。

演算子はCの場合、配列とかポインタ関連もすべて演算子の
カテゴリに入ってるから仕様書をみると数が多いように見えるけど
実際に使用すると、Pascalに比べてとくに複雑と感じないし。
008583NGNG
シンプルが簡素な意味だとしたら
 Cのfor文は簡素じゃないでしょ?
 while文にしてもpascalは論理型しか書けないけど cは数じゃない?
 コンパイラ側から見たら 全部が数ってのはシンプルかもしれないけど
 型が区別されてる方が人間から見たらシンプルだと思うんだけどなあ

それと cのreturn は文だけど pascalのexitは手続きで予約語じゃないとか

まあ似たようなもんだけどさ
0086デフォルトの名無しさんNGNG
>>85
たとえばPascalのforだったら、私は使いはじめのころはどうして
順序型しかつかえないのか、どうしてグローバル変数は使えないのか、
疑問に思いましたし、
ずいぶん慣れてからも to と downto の使い分けで、ケアレスミスを
してました。

PascalとCがどちらがシンプルかってのは、まあ主観の問題ですね。
実際に問題、大差ないと思います。
0087デフォルトの名無しさんNGNG
だれか簡潔に説明してください。

FreePascalのマニュアルみていたら「Graphユニット」があって線を引いたり
円を描いたりできるみたいです。これってTurboPascalから引き継がれたユニット
だと思う。

問題は「Graphユニットの初期化」ってやつ。
基礎的なことが分かりません。なぜ、このユニットだけは初期化という作業が
必要なのですか?またサンプルコードをみても「何でこんな常套句が必要なのか
わからない」といったコードがあります。そもそも初期化って何????
それから「グラフポートをOpenしたらCloseせよ」って何?

文字色を変えたりするのは「Crtユニット」を使うわけで、そちらはサンプルを
見てもだいたい意味が分かるのですが・・・。
0088デフォルトの名無しさんNGNG
1. そういうものだ。気にするな。
2. 昔はハードウェア毎に異なる(デバイス)ドライバを,アプリケーション毎に読み込んでいたから。
DOS はグラフィックボードの管理はしないのだ。
3. 古いアーキテクチャで作られた物が,現代の人にとって易しいとは限らない。
古けりゃ簡単,ってことなら古文/漢文で苦しむ人はいないよな。
0089デフォルトの名無しさんNGNG
ハード屋さんとかマシン語の得意な人にはCの方がやさしいし
BASICから入った人には文字列でつまずかないだけでもPascalの方がやさしい
・・・と思う
009087NGNG
Graphユニットのサンプルをコピペしてdev-Pascalにてコンパイルしました。
エラーがでます。integerで宣言されるinitGraphで使用する変数を、shortintで
宣言するとエラーが消えてサンプルアプリができました。あとは少しずつ
手続きや関数を書き足して調べてみます。
0091デフォルトの名無しさんNGNG
FreePascalってのは起動時コンソールプログラムしか作れないのですか?

>>83 TurboPascal系はレジスタ渡しで関数呼べるのでPascalのほうがマシンよりでは?
0092デフォルトの名無しさんNGNG
>>87
なんでファイルをいちいちOpenしたりCloseしたりしなくてはならないのですか?
なんでFindFirstしたらFindCloseしないといけないのとか。
なんでAllocしたらFreeしないといけないのとか。

と似たようなものですな(w
0093アライグマPascalNGNG
>91
Windowプログラムもつくれますよ。
0094デフォルトの名無しさんNGNG
おい!>>2と>>4!!
貴様ら!!!!逝ってよしです。

ていうか、ム板にそんなもの貼ってうれしいんですか。
0095デフォルトの名無しさんNGNG
http://community.borland.com/article/images/20803/tp55.zip
ここから Turbo Pascal 5.5 がダウンロードできます。
割れではないです。
0096デフォルトの名無しさんNGNG
ところで今のDelphiのObjectPascalと、
Turbo Pascal 5.5 との互換性がどれぐらいあるのか、
誰か説明できる人いないかな?
0097デフォルトの名無しさんNGNG
ダウンロードしたけど、インストールの途中で先に進めません(死
0098デフォルトの名無しさんNGNG
>>96
Object PascalはTPのほぼスーパーセット。
ライブラリは除く。
0099デフォルトの名無しさんNGNG
>94
何これ?
0100デフォルトの名無しさんNGNG
インストールの途中で先に進めなくなるけど、シカトして、TPフォルダの中のEXEを実行したら、ちゃんとインストールされてました!
コンパイル&実行までできました!
あとはTurbo Pascalの本買ってこよ。
Pascal そのものの本はあんまりないけど、Turbo Pascal の本はいっぱいあるし。
010191NGNG
>>93 そうなんですか。実行ファイルにcigwinがいるとかいわなそうだし
テンプレートそろえてエディターがRADのものがあれば
FreePascalのほうがdelphiよりよさそうですね、
要は一般的なサンプルが少なくて古典的なものばかりだということなんでしょうか
GUIアプリでGLUTあたりをかますものであれば大体なんでもできそう
0102デフォルトの名無しさんNGNG
エディターがRAD ってのがなんか無理めな話しのような・・・

Delphiは 実行時型情報と
 DLL にコンパイルして設計時にも動作するコンポーネントという概念
 それをサポートするツールが組み合わさってRADになってるんだから
0103デフォルトの名無しさんNGNG
いったい何をどう評価すればFreePascal>>>Delphiになるんだ??
0104アライグマPascalNGNG
>101
くどいけど、Win32環境でのプログラミングならDev-Pascalを使った方が、
素のFreePascalを使うよりFreePascal&統合開発環境である関係上多少使いやすい
とおもいます。

GUIのためにGTKをつかうひな形が用意されているのですが、GTKをまったく
知らないので私は使いこなせない状況です。
0105デフォルトの名無しさんNGNG
FreePascalってなんて読んでる?俺はフリッパー
0106デフォルトの名無しさんNGNG
Turbo Pascal の本はなんでめちゃめちゃ高いのが多いんだ。
0107デフォルトの名無しさんNGNG
>>105
俺はフリパ。
同じく、FreeBSDはフリビ、
でもFreeDOSはそのままフリードス。

0108デフォルトの名無しさんNGNG
アマゾンでTurbo Pascal の本を探した。
みんな7か6対応の本ばっかりで、5対応の本があんまりない。
漏れがダウンロードしたのは5だから、できれば5の本がいい。
それとも、7と5であんまり変わってないなら、7の本を買おうと思うが、そのへんどうなんでしょう。
0109デフォルトの名無しさんNGNG
オーム社「TURBO Pascal プログラミング」間野浩太郎監修、内田智史著 \3,600
は4までが対象だけど、これでは古すぎるかな
0110デフォルトの名無しさんNGNG
5.5からオブジェクト指向を搭載、って書いてあるので、たぶん、4と5.5はだいぶ違うと予想されるのですよ。
5.5と7の違いがよくわからん。
0111デフォルトの名無しさんNGNG
今調べたら、
「TURBO PASCAL 5.5 OOP GUIDE」BORLAND刊」
というのを見つけた。そうだ。ボーランドの本を使えばいいのだ。
まだ売ってるのかわからんが。
0112デフォルトの名無しさんNGNG
>>108
オブジェクト指向を使わないのなら、TP4-7は大して変わらないと思われ。
0113デフォルトの名無しさんNGNG
>>112
ありがとう。そんなら、7の本を買う。
0114デフォルトの名無しさんNGNG
古本屋いけ。
0115デフォルトの名無しさんNGNG
パスカルの本買いたいけど、なんであんないバカ高いんだろ。
言語がフリーでも意味ないじゃん。

『Oh! Pascal!/Book and Pc/DOS Disk』
Doug Cooper (著); ペーパーバック
通常4〜14日以内に発送
価格: ¥9,093

『Turbo Pascal』
Elliot B. Koffman (著); ペーパーバック
通常4〜14日以内に発送
価格: ¥9,600
手数料: +¥960

『Using Turbo Pascal 6.0 - 7.0』
Julien Hennefeld (著); ペーパーバック
通常4〜14日以内に発送
価格: ¥10,260
手数料: +¥1,026

『Turbo Pascal』
Samuel L. Marateck (著); ペーパーバック
通常4〜14日以内に発送
価格: ¥14,467

『Turbo Pascal, an Introduction to the Art and Science of Programming (The Benjamin/Cummings Series in Structured Programming)』
Walter J. Savitch (著); ペーパーバック
通常4〜14日以内に発送
価格: ¥8,933
手数料: +¥894
0116デフォルトの名無しさんNGNG
>パスカルの本買いたいけど、なんであんないバカ高いんだろ。
これだけ読んで、
高いといっても5000から6000円程度だろ
とレスを付けようとして続きをみてびっくり。
それぞれ1000ページくらいの大作なのだろう。
0117デフォルトの名無しさんNGNG
>>115
無理にメリケンの本を買おうとするから高いのであって
ニポーンの本で我慢(?)すればそこまで高くはないよ
0118デフォルトの名無しさんNGNG
じゃなくて、洋古書は売れないと高くなるの。
どの本も大昔の書籍だってこと、わかっているのかな?
なぜ Delphi ではなく TurboPascal を求める?
0119デフォルトの名無しさんNGNG
だってDelphiなんて、GUIだとか余計なことがイパーイついてて本質が見えないじゃないか。
0120デフォルトの名無しさんNGNG
>>119
自分で制限可能だよ。
まあやろうとしてることはコイツらと変わらんが

Delphiで小さな実行ファイルを作ろう
http://pc.2ch.net/test/read.cgi/tech/1009080085/
0121デフォルトの名無しさんNGNG
だからといって古いソフトを持ち出さなくても...
弘法筆を選ばず。本質が見える人は GUI がついていても道を見失うことはない。
初心者であれば手軽に手に入る,最新の道具で入門をしなされ。

0122デフォルトの名無しさんNGNG
TurboPascalの入門というかPascalをテーマにしたHPを作りたいのですがいいですか?
0123デフォルトの名無しさんNGNG
ようするに Delphiでも新規作成で その他->コンソールアプリケーションを選べば
 VCLによらない素のpascalで遊べます

コンソールが不要な SDK方式でのGUI を作りたければ、
 コンソールアプリを選んだ後 {$APPTYPE CONSOLE} を自分で削除すればいいのです
0124デフォルトの名無しさんNGNG
TP5.5は、統合環境がWin9xのDOSプロンプトでは動かないよね。
つまりデバッガを使いたければDOSモードへ行かねばならない。
これからPascalを始めようとする人には、あまり向いていないと思うよ。
0125デフォルトの名無しさんNGNG
>>122
作るのは貴方の勝手です。ご自由に・・・
0126デフォルトの名無しさんNGNG
>87
ふむふむ、確かにFreePascalでもGraphユニットやCtrユニットが用意されているね。
Turboとの互換を考慮してとおもうけど。
GraphDeviceあたりの型を、エラーを参考にShortInt型に書き換えるだけで、きちんと
グラフィックが描ける。英語版のTP5.5をゲットしてDosプロンプトで動かすより、
こちらの方が簡単みたい。
>122
私もTPやFPをネタにコツコツとHPを作ってみようと思っています。
0127デフォルトの名無しさんNGNG
>>124
ガセ。正しく環境を作れば動く。
DPMI 関連の資料をよく読んで。
0128デフォルトの名無しさんNGNG
C:>US
C:>TP
:
:
C:>JP
C:>EXIT
0129デフォルトの名無しさんNGNG
>128
USモードじゃ日本語つかえんぞゴラァ!
0130デフォルトの名無しさんNGNG
え?TP5.5 って、US のミュージアムから落とした物のこと?
じゃしょうがない。US モードにするしかないだろ。
0131ふむふむ(納得)NGNG
英語版のTP5.5でも日本語はつかえるけど、GraphやCrtユニットは日本語対応じゃ
ないので、日本語文字列はWriteLnなどの手続きでコンソール上に出力することしかできない。
0132124NGNG
>>127
今まで知らなかった。ご指摘ありがとう。
DOSプロンプトのプロパティで「必要に応じてMS-DOSモードを実行」を外したら動いた。

>>131
DirectVideo := False;
とすれば、Crtユニットによるテキスト出力がBIOS経由になるから、
DOS/V BIOSのおかげで、Writelnで日本語文字が出力できるようになるよ。
GraphユニットのOutTextでの日本語出力は、無理そうだね。
0133デフォルトの名無しさんNGNG
昔のPascalなんてコンパイル速度が速いだけしか取り柄が無いよ
0134デフォルトの名無しさんNGNG
Delphi6パーソナルを使った pascalのスタート教室

1) FILE-> 新規作成->その他->コンソールアプリケーションを選びます
 すると
program Project1;

{$APPTYPE CONSOLE}

uses
SysUtils;

begin
{ TODO -oUser -cConsole Main : この下にコードを記述してください }
end.
とソースが表示されます
 program Project1;  uses SysUtils; はボーランドによる拡張ですから取り去ってかまいません
{$APPTYPE CONSOLE} も取り去ってかまいませんが、代わりにコンパイルオプションでコンソール
アプリである事を指示する必要があります

結局、最初に書くアプリは これでいいでしょう 
{$APPTYPE CONSOLE}
begin
writeln('こんにちは');
readln;
end.

この2行を入力した後、F9 を押せば実行出来ます
0135ふむふむ(納得)NGNG
>132
ふむふむ、自分はまだGraphユニットとCrtユニットを完全に理解していなかった
ようです。サンプルコードを希望します。

自分はPC-9800シリーズ用のTP6プロフェッショナル版をもっていますが、
引っ越しのどさくさでソフトはあれど、マニュアルをすべて無くしてしまったのです。
TP6のマニュアルに書かれていたクラスの概念はとても分かりやすかっただけに、
すご〜〜〜〜く、残念です。

だれかGraphユニットとCrtユニットの詳しい解説をサンプルを使って説明して
くれませんか!!
0136デフォルトの名無しさんNGNG
さて、>>134の方法で作成した場合、ソースは dprの拡張子となっています。

Delphi IDEを使わない方法を説明します。

まず メモ帳でも好きなエディタでも、 ファイル名.pas としてファイルを作成し
begin
writeln('こんにちは');
end.
と3行入力し、保存して下さい。
コマンドラインから
 DCC32 -CC ファイル名.pas として改行すれば
ファイル名.exeが作成されます
0137デフォルトの名無しさんNGNG
uses を使わない場合に使えるのは system unit の関数だけです

uses SysUtils ;が 追加された状態では、abort; Ansi/Unicode文字列処理や時間などの関数が追加されます



0138デフォルトの名無しさんNGNG
コンソールアプリであっても、グラフィック画面を扱いたくなります
Windowsの場合、コンソールにグラフィックを表示する事は出来ません。
そこで、別窓を出してグラフィックを出すか
あるいは、BMPファイルを作成して後でビュアーで見るという方法が簡単です

Delphiのフォーム機能をグラフィック画面としてコンソールアプリから使う方法を説明します

0139デフォルトの名無しさんNGNG
まずは、IDEからコンソールアプリを作成した直後
新規作成でフォームを作成して下さい

そして以下のように入力して実行してみて下さい

program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils,
Forms,//<----この行を追加
Unit1 in 'Unit1.pas' {Form1};

begin
Form1:= TForm1.Create(nil); //<<--この行以下を追加
Form1.Show;
Form1.Canvas.Ellipse(20,20,100,100);//円の描画
Form1.Caption:= 'こんにちは';
readln;
end.

実行すると、コンソールと同時にタイトルがこんにちは となった フォームが表示された筈です
このフォームはクリックに応答しませんし、他の窓に隠れると再表示もされません
が、とりあえずこれで遊ぶには十分に便利な筈です

0140124NGNG
>>135
>TP6のマニュアルに書かれていたクラスの概念はとても分かりやすかっただけに、
おお、同意。なんか執筆者のすごい熱意が感じられる文章だった。

Crtユニットを使って日本語を出力する例。
TP5.5、Win95のDOSプロンプトにて確認しました。JPモードで実行して下さい。

program test;
uses Crt;
begin
  DirectVideo := False;
  GotoXY(30,10);
  TextColor(Red);
  Write('こんにちは');
end.

2バイト目が'のコード番号と一致するような日本語文字を文字列中に入れる場合には注意。
コンパイラがその'を文字列の終わりと認識するのを防ぐため、'を一つ追加してやる必要がある。
0141デフォルトの名無しさんNGNG
ターボパスカルって、いまC#作ってる人と同じ人が作ったの?
0142動物アイゴー協会NGNG
あらいぐまパスカルとかパトラッシュ思い出すんだけど。
0143デフォルトの名無しさんNGNG
さて、>>139の方法はあまりにも無理やりで作法としてよくありません。
そこで、コンソールアプリからBMPファイルを作成して表示させる方法を説明します

まず、新規作成でコンソールアプリを新しく作った後

uses
windows, //WindowsのAPIを使います
ShellApi, //ShellExecuteを使う為に
Graphics, //TBitMapを使う為に
SysUtils;
var bmp:TBitmap;
begin
 bmp:=TBitmap.Create;
 with bmp do try
  Width :=100;
  Height:=100;
  PixelFormat:= pf1bit;
  Canvas.Ellipse(1,1,100,100);//円を描く
  Canvas.TextOut(5,5,'こんにちは');
  SaveToFile('temp.bmp');
 finally free;end;
 ShellExecute(0,'Open','temp.bmp',nil,nil,SW_SHOW);
end.
として実行してみて下さい
このコードはコンソールを使用していませんから、コンソールアプリである必要もありませんから
{$APPTYPE CONSOLE} も取り去って大丈夫です
0144デフォルトの名無しさんNGNG
>>139 の方法がなぜ良くないかをまず説明します

 Windowsでは複数の窓があるように見せていますが、実際の表示デバイスはせいぜい1つです
 他の窓に隠された部分が また表示されるのは、アプリケーションが努力しなければなりません
 その為の仕掛けをメッセージループと呼びます
 窓はメッセージを受信する仕掛けをもち、再描画しろというメッセージにしたがって画面を自分で
 描くわけです。
また、キーボードが押された、マウスが押されたもメッセージにより処理されます。
Delphiでは application.ProcessMessages; で明示的にそのメッセージループを呼び出す事も
出来ます。コンソールアプリでapplication.ProcessMessages;を定期的に呼び出せば、作成した
フォームはマウスを受け付ける事が出来るようになります。が、それをしても >>139のように描画
処理をベタに書いたのでは 他の窓に隠れると2度と表示出来ない事にかわりはありません。
この部分をイベント駆動にしなければならないのです。
 それがフォームにある OnPaintイベントです。




0145デフォルトの名無しさんNGNG
>>143 のコードを説明しょうと思いましたが、
 Delphi6のIDE上で F1を押せば知りたい情報は殆ど出て来る筈です

bmp.PixelFormat:= pf1bit; はモノクロビットマップを作るという意味になります
その他の多色形式はヘルプを見て下さい


ShellExecuteは 作成した temp.bmpをそのパソコンに設定された方法で
  開くためのAPIです

円以外のグラフィック描画命令は TCanvas でヘルプを見て下さい
線の色の設定や線の太さは Canvas.Pen で設定します
面の 〜 は Canvas.Brush で行います
文字の〜は Canvas.Fontで行います
0146デフォルトの名無しさんNGNG
なんかものすごく丁寧に説明されてる方がおられるようですが、
ひょっとして穂積○平さん?
0147ふむふむ(納得)NGNG
>140
サンキュー

今、FreePascalでGraphユニットを使って日本語をなんとかグラフィックと
混在表示できないか検証中です。やっぱ、outTextでは文字化けしますね。
(Win2000のコンソール画面で検証)
0148デフォルトの名無しさんNGNG
人のやる事にああだこうだは言いたくないけど、今更DOSアプリの研究してどうすんの?
それはもうコンソールアプリじゃないよ
そこらへんやりこむにはインラインアセンブラ使うしかなくなるしさあ

pascalの勉強ならDelphi6パーソナルで始めたらいいじゃない
0149デフォルトの名無しさんNGNG
>>148
禿同。
コンソールアプリでもない機種依存アプリでしかない。Windows が動かないほど
古いマシンでの話ならともかく Win の DOS-BOX で動かそうとしているようだから
意図がわからない。

本質的なプログラムをしたいなら、Graph がどうこうとか言ってる場合じゃないとおもうが。
0150ふむふむ(納得)NGNG
>148
>149

私も含めてTPやFPを使っている人は、これで飯を食っているわけじゃないとおもいますけどね。
ただ、知的好奇心を満たすため、また昔を懐かしみたいがために、前記のツールでコツコツとコードを書いて
遊んでいるとおもいます。

>148
私はアセンブリ言語はサパーリわかりませんので、インラインアセンブラは未体験ですけど、
使いこなせたらおもしろそうですね。
>148
我が家には486・33MHzマシンもペン150MHzマシンもあります。再利用を考え中です。
FPですが、LinuxやDOS、OS/2、旧バージョンはアミーガでも稼働できるそうなので、
ツールになれたらそれらのOSでも楽しめそうです。(私はOS/2も持っています)
個人的にはBeOS(瀕死状態ですが)、今後発表される予定のFreeBeOSにFPが移植されたら
有り難いのですが・・・・。
0151デフォルトの名無しさんNGNG
昔の書籍のリストを実行させたいのなら、意味がある。
0152148NGNG
棘の道だなと思うけど、それが好きなんだと言われたらしょうがない話しだからもう言わない

ワンダーウイッチ開発をTPで出来るように環境を整えるとかの方向なら面白いとは思うんだけど・・・
0153デフォルトの名無しさんNGNG
>>150
486の33Mを生かしたいなら kylixやればいいのに
486では開発出来ないだろうけど、作った実行ファイルは実行出来るだろうに
0154ネタsageNGNG
>>142
♪神サマありがと〜お、ボクにともだちをくれ〜て〜〜〜。
♪パスカルに〜あわせてくれて、パスカルに〜あわせてくれて
♪パスカルに〜あわせてくれて、パスカ〜ルにあわせてく〜れ〜〜て〜〜
0155デフォルトの名無しさんNGNG
2ch だしぃ... どれが誰だかわからないけど

>119 :デフォルトの名無しさん :02/02/02 00:00
>だってDelphiなんて、GUIだとか余計なことがイパーイついてて本質が見えないじゃないか。

ってのがあるから、「Graph/CRT でごそごそやるくらいなら Delphi つかったら?」
といっているの。いまどき SVGA どまりのグラフィクスでもないでしょ?
0156ふむふむ(納得)NGNG
>154
♪ごめんね素直じゃなくって。夢の中なら言える。
♪思考回路はショート寸前。あなたに会いたいよ。

 「美少女戦士セーラー・パスカル」
                  ヘジに替わってデバッグよ!

>153
   kylixはFreeBSDでは動かないのではないかと思います。
   私はlinuxよりFreeBSD派です。(ごめんなさい)  
   それより486でlinuxやFreeBSDを使うということはXはあきらめろ
   ということになりそうです。
0157デフォルトの名無しさんNGNG
で、結局、何をしたいのか?
0158デフォルトの名無しさんNGNG
>>157
Delphi以外でPascalの勉強だろ?
0159ふむふむ(納得)NGNG
ちがうってば

DelphiでもTPでもFPでも、とにかく手持ちの処理系を使った
Pascalの学習さ。
0160デフォルトの名無しさんNGNG
Graph ユニットや CRT ユニットの使い方を学ぶのが Pascal の学習か?と聞いているんだよ。
0161デフォルトの名無しさんNGNG
それは一つの手段でしょ.
なんでそんなに突っかかるのか小一時間(略
0162デフォルトの名無しさんNGNG
Pascalは、処理系を作るのが学習です。
0163デフォルトの名無しさんNGNG
>140
win2000のコンソール画面(JPモード)では文字化けします。
対策はやっぱり、旧Winと文字コードの取り扱いがちがうから無理でしょうか?
0164ヒロシNGNG
⊂(□ー□⊂⌒`つ≡≡≡≡≡≡<ヒロシ(164)ゲト!!!
0165アライグマPascalNGNG
今、PascalプログラミングのHPを作っています。
昔のTurboPascalを思い出す懐かしいやつです。
今年の8月頃Openの予定です。
0166424NGNG
なんかフリーのSRPG作成ツール無い?
(SRC以外で)
ガチャポン戦士3作りたくなった
0167424NGNG
pascal板かここ・・・
すいません、逝ってきます。
0168デフォルトの名無しさんNGNG
「PASCAL でガチャポン戦士をつくるうっっ!!」
この壮大な計画を遂行するため、424は立ち上がった、、、
歴史は動き始めた、、、
0169424NGNG
ツールが見つかりません。
逝ってきます。
0170アライグマPascalNGNG
今ちょこちょこっとHPをつくっています。実はOpenしたのですが、まだ
コンテンツが激貧なのでURLは秘密です。古いPascalの簡単なサンプルを
公開・保存する場にしたいと思っています。
0171デフォルトの名無しさんNGNG
確か、フランスのボーランドサイトから、仏語版のTP7がダウンできるはず(FREE)
 NECRT.TPU という、CRT互換unitをダウンすれば、日本語だって出力可能

おいらは統合環境は使わないから、これで問題なし
0172デフォルトの名無しさんNGNG
>>170
楽しみにしているぞゴルァ。

>>171
フランスのBorlandからわけのわからないメールが届くようになるという
諸刃の剣。
0173アライグマPascalNGNG
たいへん。Dev-PascalのURLが使えなくなりました。移動したのか?
それともなくなったのか?
0174アライグマPascalNGNG
復活したもようですね。
0175デフォルトの名無しさんNGNG
>>145
「ヘルプを見て下さい」ばかりだと、このスレ意味なしだと思いません?

コンソールアプリにこだわりながら、なおかつ、TCanvas を論じている
こと自体に無理があるのでは?
0176アライグマPascalNGNG
本家からFreePascalをダウンロードして、エディタはCPadあたりを
利用して以下のソースをコンパイル。

program test;
uses Graph;
var
GraphDriver:smallint;
begin
GraphDriver := Detect;
InitGraph(GraphDriver,30012,'');
SetColor(4);
circle(300,200,100);
readln();
CloseGraph;

end.

画面に赤い円が表示されたら成功。(懐かしいでしょ)
0177デフォルトの名無しさんNGNG
赤い玉が出てくるの?
0178デフォルトの名無しさんNGNG
>>5
いまさらなつっこみで悪いんだが・・・

absolute変数があったり、
「Mem[****] := ****」とか「Port[**] := **」なんてことができたり
inline手続きがあったりするので
PascalはCよりもっと危険なのでは?

Cじゃメモリの番地を直接指定して書き込みするなんてことはできない
ポインタを介して間接的なやりかたでやらねばならないぶん、
Pascalよりも安全性はほんの少し高いとも言えないか?

Delphiはともかく、DOS時代のTurbo Pascalなんて、
ハードウェアを直接いじるような目的で使われることが多かったし、
実際、procedureの中身はアセンブラソースをasmとendで括っただけなんていう
ほとんど高級アセンブラ的なPascalの使い方をしてるソフトが
数多くまかり通ってたものだが
0179デフォルトの名無しさんNGNG
>178
>PascalはCよりもっと危険なのでは?
なんでやねん。
危険なのは(言語を問わず)ハードを直接操作することでしょ。
高級なことやりたいんなら危険専用の命令である
inline/absolute/asm使わなければそれで十分安全性を確保できる。

それに対してCは高級・低級ともにポインタ使わざるを得ないから
高級な目的で書かれたコードですら安全とはいいかねる。
0180デフォルトの名無しさんNGNG
178 の理屈だと

XXX 言語はインラインアセンブラがあるから、特権命令も記述できるので
一行でハングアップするコードがかける。危険!

ということもできそうだが、さすがにこれには同意しまい?
0181アライグマPascalNGNG
したらばBBSでもおねがいしましたが、みなさん、昔のBASICゲームプログラムの
ソースをもっていませんか?ベーマガに載っていた、1画面プログラムみたいなものです。
音やスプライト機能はできないと思いますが、なんとかPascalで書き直してみたいと
思っています。ここにソースをアップしてみんなで考えたら、勉強のネタとして
おもしろいと思います。
0182デフォルトの名無しさんNGNG
1 COLOR15,1,1:SCREEN5,1,0:R=RND(-14):FOR
I=0TO212:P=PEEK(I+800):PSET(P,I),IMOD3+2
:NEXT:FORI=0TO7:VPOKE30721+I,255:VPOKE30
736+I,24:NEXT:OPEN"GRP:"AS1:SOUND6,18
2 DEFFNS=RND(1)*175+25:DEFFNR=(INT(RND(1
)*10)-5)/10:C=FNR:D=FNR:G=FNS:H=FNS:Y=99
3 LINE(E,200)-(E+20,212),1,BF:FORI=2TO4:
COLOR=(I,0,I*2-2,I*2-1):CIRCLE(G-I,H-I),
(6-I)*2,I:PAINT(G-I,H-I),I:NEXT:LINE(G,2
00)-(G+20,212),5,BF:SOUND7,183:X=120:E=G
4 S=STICK(0):A=(S>5ANDV>-8)-(S>1ANDS<5AN
DV<8):B=((S=8ORS=1ORS=2)ANDW>-8)-(S>3AND
S<7ANDW<8):V=V+A+C:W=W+B+D:X=X-V:Y=Y-W
5 VDP(24)=(Y+149)MOD255:PUTSPRITE0,(X,Y)
,10,0:PUTSPRITE2,(X,Y+B*9),ABS(B)*9,2
6 PUTSPRITE1,(X+A*14,Y+8),ABS(A)*9,1:IFP
OINT(X+8,Y+18)=5THENN=N+1:BEEP:GOTO2
7 SOUND8,-(S>0)*13-(S/2=S\2)*2:IFX>4ANDX
<238ANDY>-10ANDY<194THEN4ELSEFORI=0TO50
8 D=RND(1)*31:SOUND6,D:SOUND8,15:VDP(24)
=ABS((Y+D\3+144)MOD256):NEXT:Y=Y+(Y<0)*Y
9 PSET(80,99):PRINT#1,"GAME OVER";N+1
10 SOUND8,0:FORI=0TO255STEP.5:Y=Y+I:Y=Y+
(Y>255)*Y:VDP(24)=Y:NEXT:POKE-869,1:RUN
0183アライグマPascalNGNG
どうもありがとうございます、しかし・・・。

peek、poke、sound、vdpなど、移植が難しいコマンドが目白押しですね。
参考にさせていただきます。
0184デフォルトの名無しさんNGNG
peek pokeは全然難しくない
むしろBASICより簡単だ。メモリ配列に代入するだけで済む
Mem[$****] := hoge    hoge := Mem[$****]

スプライトは無理だけど重ね合わせ処理で代用できるでしょ
0185デフォルトの名無しさんNGNG
>むしろBASICより簡単だ。メモリ配列に代入するだけで済む
その副作用は一切無視?
0186デフォルトの名無しさんNGNG
>>185
BASICのプログラムをPascalで書き直すって言ってるんだから
元と同等のことをやればよいだけだろ
BASICと同様の単純なシステム上の話じゃないのか?
WindowsだのUNIXだのの上ではもちろんそんな乱暴なことは許されないけど、
単純なシステム上ならそういう乱暴な方法でしかゲームは書けないよ
0187デフォルトの名無しさんNGNG
>182のBASICが動くパソコン用のPascalコンパイラなんてまずないだろ。
ハードが変わったらpeek,poke(Mem)の移植性なんて皆無。
大体MemってTP専用じゃなかったか?
0188デフォルトの名無しさんNGNG
そうかbasicで組むときpeek使うと移植性が低くなるのか
でもBASICなんてもともと移植性なんか関係無いし。
0189デフォルトの名無しさんNGNG
>>182
MSX-BASICか・・・どこから引っ張り出してきたのやら。
って優花、ベーマガのサイトに行けばダウソ出来るじゃん。
0190デフォルトの名無しさんNGNG
BASICが主流だった当時はそういう乱暴な方法でしかゲームは作れなかったんだから仕方ない

TPだってMS-DOSがグラフィックやサウンドの機能をサポートしてなかったから
やっぱりMem配列とかの乱暴な手段は必須だった
0191がうがう ◆gu5gIE4w NGNG
初めまして。このたび、HP200LXを手に入れたんですが、これと
同時にBorland C++ Suite を何故か、購入しちゃって、これにBP7が
入ってまして、pascalをやりたくなったんですが

1.HP200LXぐらいのスペックだとPASCALって厳しいですか?

2.CGAですが、付属のCGA.BGIでは、遅いと思われます?

3.Cと比べてどれくらいの実行速度なんでしょうか?

今から始めるので、何も分からなくて恥ずかしいのですがよかったら
上記のことを教えてくださいまし

勉強をかねて、上から線が降りてきてそれをよけるような簡単なものと
三角関数を使ったRPN電卓を作りたいなと思います。

このスレッドが消えませんように……


0192デフォルトの名無しさんNGNG
>>191
1. 2. は知らんけど

>3.Cと比べてどれくらいの実行速度なんでしょうか?
一般論としては引数を全部スタックに積むCより
3つまで(だったかな)ならCPUのレジスタを直接使うPASCALの方が
より高速になりうる・・・と聞いたけど
0193デフォルトの名無しさんNGNG
2 CGA ってのは、アクセラレータも何もない時代だから、CPU パワーが
そのまま描画性能につながる。はず

BGI とかも、速度向上のがんばりようが無いので、速いか遅いかという議論には
ならないな。描画空間の抽象化、という利点はあるけど。

実際には、ハードウェアのウェイトがいっぱいかかっているので、ある程度から
先は頭打ち。(HP200LX だと改造/改良されているかもしれないが)

0194アライグマPascalNGNG
>191
HP200LX!!!!!!!!!!!!!!!!!
のどから足が、鼻からちんちんが(失礼)飛び出すぐらい
欲しかった・・・。あいにくお金がなくて血が出るくらい
下唇をかみしめて泣きながら家に走って帰ったのを昨日の
ように思い出します。<とても40歳が書く文章ではありませんな。

LSI-C試食版が動いているのをみたことがあります。それと
TP6(PC98版、もちろん専用ライブラリは使わない)が動いているの
もみたことがありますが、実行速度は変わらなかった気がします。
0195がうがう ◆AGuK1Awo NGNG
>>192

 質問にお答えしていただきありがとうございます!!感謝です

3つまでCPUのレジスタを直接扱うというようなPASCALプログラミングって
どういう感じなのでしょうか?

(#^_^#)話分からなくて…… 逆に言えば、この手法でくむように工夫すれば
いいってことですよね?

0196がうがう ◆AGuK1Awo NGNG

>>193
 質問に答えていただきましてどうもです(^-^) 感謝いたします

 ふむ…… すべてはCPU次第なので、遅いから遅いのだということですね?
 これは、Cに限らないと言うことでしょうか?

 pascalそのものが早いのか、遅いのか知らないのでこういった質問になったんです
 あるファイルを名前を変えてコピーするという程度なら早いとは思うんですが。
 186マシンではきついのかなあ?

 HP200LXだとライトスリープというのがありまして、コンパイルするのが遅い
 MSCだと途中でシャットオフになってしまうこともあるそうです。
 もちろんライトスリープですから電源を入れれば何事もなく続きを始めるんですが。

 そのライトスリープをさせないアプリもちゃんと存在します。

 描画空間の抽象化とは何でしょうか? お教えくださると幸いです。
無学ですいません
0197がうがう ◆AGuK1Awo NGNG

>>194
 あははは(^-^) 今じゃヤフオクで3万程度で手に入りますよ。倍速8M程度を。
 自分も少しずつ、ボーナスの度に買ってます。
 最終的には15個欲しい……
 自分の場合はRPN電卓の部分も大きいというのがあるんですけどね(^-^)

 質問答えてくださいましてどうもです。LSI-Cとそんなに実行速度は変わらない
 ですか! うれしいお話ですね。がんばろうと思えます!


0198デフォルトの名無しさんNGNG
>>195
PASCALコンパイラが勝手にやってくれるから気にする必要はないよ
引数が3つ(?)までの関数や手続きではそのようにコンパイルされるということ
0199がうがう ◆AGuK1Awo NGNG
>>198
 そうですか(笑) だとしたらPASCALコンパイラ(Borlandのやつですね)
は、優れているということですね。
 PASCALで作られた有名な作品ってご存じですか?

 自分は、「WTERM」ぐらいでしょうか?

皆さんも教えてくださると幸いです

0200アライグマPascalNGNG
ゲームだったら,三大古典RPGの一つ「ウィザードリィ」ですね。
0201デフォルトの名無しさんNGNG
>>200
そういうこと言うと、厨房どもがわらわら集まってくるので禁止
0202がうがう ◆AGuK1Awo NGNG
>>200
あ、そうか…… APPLEでPASCALでしたね
 しかも独自IP(最初に起動するときに読む奴 IPじゃなかったでしょうか
 それともSIP?)で動くんですよね

 IBM/PC版は、そのエミュで動くと聞きます。
 エミュの上にIPがあってその上でAPPLEのPASCALで書かれたWIZ
 が動くとか。
0203がうがう ◆AGuK1Awo NGNG
>>201
 ?? そうなんですか?
 
0204デフォルトの名無しさんNGNG
パソコン版D&D(RPG)はTurboPascalだったらしい。
ファミコンに移植した人から聞いた。
0205アライグマPascalNGNG
MS-DOSの最初のバージョンあたりはPascalだったはず。
すぐに全面的にCで書き直されたけど・・。
0206デフォルトの名無しさんNGNG
Pascal最初にやるとCの構文が汚く見えるね。
0207がうがう ◆AGuK1Awo NGNG
昔BASICマガジンというのがあって、たくさんのソースが載っていて
大変勉強にもなったそうですね。
あるいは、MSXFANとかの投稿雑誌があって、MSXBASICでも
勉強になったとか……

ネットでPASCALのソースを探しているんですがなかなか(-.-;)
ゲームに参考になる画像描写(CGA)で参考になるのがないですかね?

とりあえず 植木屋 さんのウェブサイトにて CGAの参考を
ttp://plaza10.mbn.or.jp/~uekiya/hp200lx/japanese/cga.html

人のソースが一番勉強になるんだけれどもなあ 初心者には(^O^;;
0208がうがう ◆AGuK1Awo NGNG
>>204
 お!あの D&Dもですか やったことはないんですが
 名前だけは伺っています

 そのソース見てみたいなあ
0209がうがう ◆AGuK1Awo NGNG
>>205
 え! うっそぉでしょ?
 本当にぃ! それしか言葉が出てこないぐらいびっくりしました
 う
 すげぇなあ。 1.0位の頃でしょうかね?
0210がうがう ◆AGuK1Awo NGNG
先ほどの植木屋さんところのCソースをプリントアウトして
眺めているんですが、何をどうしてどうするのかが(^O^;;

あるテクニックが何のために必要か、それをどう有効に使うか
以前のCで何が書かれているのかさえも読めない(^O^;;

Cの入門書を買ってきて一行ずつ解析していけば読めるかなあ?
どこかにCGAでPASCALゲームソース公開されてませんか?
探しているんですが見つからない(^O^;;
0211デフォルトの名無しさんNGNG
>210
CGAは対応しているかわかりませんがGrafx2というのがあります。
http://www-msi.ensil.unilim.fr/~maritaud/sunset/grafx2.html

それと http://www.pascal-central.com/ はPascal使いであれば知らないと
似非パスカラーとして認定されてしまいます。:-)
0212デフォルトの名無しさんNGNG
>211
すまぬ。自爆。画面モードと間違えた。(^^;
0213デフォルトの名無しさんNGNG
>>199
まぐローダ
0214デフォルトの名無しさんNGNG
>>199
Ngraph
0215デフォルトの名無しさんNGNG
>211

あと、SWAGもな >Pascalerの心得
0216デフォルトの名無しさんNGNG
>215
アドレスはここだ>SWAG
 ttp://www.gdsoft.com/swag/swag.html

 
0217がうがう ◆AGuK1Awo NGNG
>>211
 知りませんでした(^O^;; 似非パスカラー決定?(-.-;)
 教えてくださって有り難うございます
 翻訳にかけると妙な日本語で(笑)

0218がうがう ◆AGuK1Awo NGNG
おっと 変なところで書きこんじまった(-.-;)

少しずつ読んでいこうと思います
0219がうがう ◆AGuK1Awo NGNG
SWAGのサイトに行ってみようとしたんですが
めちゃくちゃ重くないですか? ここ
0220デフォルトの名無しさんNGNG
>>199
似非キース まぐぺ、まるぺ
0221超初心者NGNG
正に今日pascal始めたばかりなのですが、いきなり詰まってます。
procedure A()
 …
A();B();C();
 …
procedure B()
 …
A();B();C();
 …
procedure C()
 …
A();B();C();
 …

てな再帰を作りたかったんですけど、free pascalでコンパイルしたら
Error: Identifier not found B〜
などと怒られてしまいました。
pascalではCの様なプロトタイプ宣言は出来ないんですか?

それと、var a,b integerと宣言して
a:=b/2としたら
Hint: use DIV instead to get an integer result
Error: Incompatible types: got "S80REAL" expected "LONGINT"
と怒られてしまいました。
型変換はどうするのでしょう?


0222デフォルトの名無しさんNGNG
forward
0223デフォルトの名無しさんNGNG
>221

FreePascalにも型変換の概念はあるけど、それ以前の問題として
Pascalでは整数型除算では「/」ではなく「div」を使わないと
文句を言われます。
0224デフォルトの名無しさんNGNG
>>221
Hint: use DIV instead to get an integer result
↑これをちゃんと読みましょう
0225デフォルトの名無しさんNGNG
>>221
実数は整数型変数に代入できない。
Round関数またはTrunc関数を使って整数に変換する。
だけど今のケースは>>223の言う通りdivを使うべきだ。
0226デフォルトの名無しさんNGNG
221は222が
>pascalではCの様なプロトタイプ宣言は出来ないんですか?
にちゃんと答えてくれていることに気が付いているのだろうか?
0227アライグマPascalNGNG
>226
さりげない一言「forward」に私は愛を感じました。
たぶん受け止めていただけたと思います。
0228デフォルトの名無しさんNGNG
気づいてなさそうだからヤボな説明をしておこう

Pascalには「プロトタイプ宣言」は無い
しかし、「プロトタイプ宣言」とは言わないがそれと同じものはある
それがforward宣言だ
0229アライグマPascalNGNG
パスカルの文献が少ないので「サウンド・プレス」さんのところで
翻訳中のFreePascalの関連部分を読むことをおすすめします。URLはずっと
上のほうに書き込んでおります。(以下はその文章の抜粋です)

8.5 フォーワード宣言関数
forward手続きを使うことで実装のない関数を定義できます。関数の実際の
実装はモジュール内であとに続けなければなりません。関数はforward宣言後、
すでに実装されているかのように使われます。次はフォーワード宣言の例です。

program testforward;

procedure First (n:longint); forward;

profedure Second;
begin
WriteLn('In second.Calling first...');
First(1);
end;

procedure First(n:longint);
begin
WriteLn('Frist received:',n);
end;

begin
Second;
end.

0230アライグマPascalNGNG
ぐは、
profedure×
procedure○
0231アライグマPascalNGNG
どなたか教えてください。
あるPascalの書籍に

(1) round(2.5*(5.5-8.9))
(2) (16.4 -10.8)/2.0 >= 1.3+6E-1

という演算の問題があったのですが、書籍の解答は
(1) -8
(2) true でした。

FreePascalでは書籍の解答道理の値を返しますが、スレの上の方にあった
HelloPascalという処理系では -9とFalse を返します。

どちらの処理系の演算が正しいのでしょうか?またどんなルールで演算を
しているのでしょうか?
0232デフォルトの名無しさんNGNG
>>231
そんな、処理系依存の重箱の隅をつつく問題を出す書籍など、捨てろ。
0233アライグマPascalNGNG
ISO-PASCALを解説した本ですが、今まで演習問題は気にもとめなかったのです。

(1)はround(-8.5)と書き直すことができますよね。roundは小数点下を四捨五入
するから答えは-9になるのが当たり前と思っているのですが、違うのでしょうか。
こんな簡単な演算でも処理系依存で値が変わるのは大問題だと思うのですが、
処理系依存とはどういうことでしょうか?
0234デフォルトの名無しさんNGNG
-9.5 は
-10 + 0.5
-9 + (-0.5)
のどちらを正解にしたい? 銀行家丸め以前の問題。
0235アライグマPascalNGNG
>234

上はそれぞれを丸めると-10+1=-9
下はそれぞれを丸めると-9+(-1)=-10になるということでしょうか?

でもround(2.5*(5.5-8.9))の場合、括弧内から計算していくと
round(2.5*(-3.4))になり、別々に丸めても
round(3*(-3))=-9にはなりませんか?
どんなルールが働いているのでしょうか????????
0236デフォルトの名無しさんNGNG
大体、C や PASCAL が定義されたころって、ライブラリの重要性が
今ほど高くなかったのだよ。というかライブラリは処理系の外に
存在するものだった。

ISO 7185 / JIS X3008 のどこにも Round 関数の仕様の話はない。

よって、処理系依存問題。
0237デフォルトの名無しさんNGNG
>>235
そんな難しい話ではなく、
-9.5 を -10 にする根拠は? -9 にする根拠は?って話。
どちらも誤差は 0.5
0238デフォルトの名無しさんNGNG
あ゛ お題は -8.5 か。
ウツダシノウ
0239アライグマPascalNGNG
う〜ん

round(X)
実数式Xの小数点以下を四捨五入した整数値を返す。

とあるなら、その値は唯一一つしかあり得ないはずですよね。
別の解釈が入り込む余地は無いと思うのですが、
こんな単純明快な話なのにどうして処理系依存なんてことが
あるのだろう。
0240アライグマPascalNGNG
(2)の問題は
1.3+6E-1 の部分の(-1)の解釈が、単に整数値の-1と解釈するのか
前のEとの絡みで、10のマイナス1乗と解釈するのかの違いだと思うの
ですが、どうでしょうか?
0241デフォルトの名無しさんNGNG
1. そもそも Round 関数は Pascal 言語の仕様の範囲外。個々の処理系のライブラリが
規定するもの。

2. 正の数の丸めは Banker's Round / 銀行家の丸め問題以外には大きな問題はない。
http://homepage1.nifty.com/s_miyake/hp/jisround.htm

0242デフォルトの名無しさんNGNG
3. 負の数の丸めを明確に規定する物はない。

-8.5 に話を戻すと、-1 * 8.5 に置き換えてから 8.5 を「四捨五入」。最近偶数値である8に丸められた後
-1 * 8 と評価されるとすると、答えは「-8」

-8.5 を字面で「四捨五入」すると、「五入」扱いになる。
これを0方向に丸めると、答えは「-8」
これを無限大方向に丸めると、答えは「-9」

さて。.5 は境目の数なので、少し前後も出してみよう。

-8.0 -> -8.0 // これは異論あるまい。
-8.4 -> -8 の方が近いんだから -8 だろう。
-8.5 -> さぁ。どうする?
-8.6 -> -9 だよな。
-9.0 -> -9.0 // これも簡単。
0243アライグマPascalNGNG
>241
お恥ずかしい話ですが初めてこの話を知りました。
ということはHelloPascalは「JIS丸め」を採用していない、
演算によっては誤差が大きくなりやすいということですね。
関連のURLを含めて作者に連絡してみようと思います。
0244デフォルトの名無しさんNGNG
実数型か少し多めの桁を使用して表示の際に四捨五入すれば
実用上は問題ないんだけどね

厳密にしようとすると気になるかも
0245デフォルトの名無しさんNGNG
なお、div / mod 「演算子」の負数に対する振る舞いは規格書に明記されています。

まぁ普通はそこまで気にしない/気にしてもしょうがないので「処理系依存」の振る舞い
とひとくくりにしてしまいますが。
0246デフォルトの名無しさんNGNG
その前の問題として 数値の持ち方の問題があるんじゃない?

2進で表現すると
5.5 101.1と 誤差無くもてるけど、8.9=1000.1110011001100110011 と誤差無く持てない
0247デフォルトの名無しさんNGNG
>>246
銀行家丸めはコンピューターが無い頃からの技法だよ。
0248デフォルトの名無しさんNGNG
最近までBASICで遊んでましたが、今日アマゾンからUsing turbo pascal 6.0-7.0 third edition
が届いたのでまたPascalで遊んでみたいと思います。
0249デフォルトの名無しさんNGNG
何でわざわざ古い物を選ぶんだろう。
昔の物だからといって、機能が少ないからといって、優しいとは限らないんだよ?
0250デフォルトの名無しさんNGNG
>>249
じゃーキミも三平方の定理使うのやめなよ。
0251デフォルトの名無しさんNGNG
まあまあ。他人が何しようといいじゃないの。
遊ぶんだったら、趣向は人それぞれ。
おれも宿題スレみて生DOSアプリを作ってみたくなったよ。
0252アライグマPascalNGNG
例の「答えが書籍と違う」という話ですが、作者にメールで
報告したところバグらしいとのことでバグフィックスをする
とのことでした。
0253デフォルトの名無しさんNGNG
なぜend.の直前の行には;が不要なのか。
0254デフォルトの名無しさんNGNG
>>253
;は文と文を分離するためのものだからです。
0255デフォルトの名無しさんNGNG
>>254
よく理解できました。ありがとうございました。
0256丁稚PascalNGNG
現在情報学科の一年(四月から二年)で、まだ言語はPascalしか知りません。
今はまずPascalをある程度できるようになりたいので、
このスレでいろいろ課題を出してもらえるとうれしいのですが・・・。
0257デフォルトの名無しさんNGNG
アメリカの大学だと Java から入るんだけどね...
0258丁稚PascalNGNG
そうなんですか。
何の言語から入るかは意見のあるところとは思いますが
色々と手を出すよりもまずは一つのものを――
と考えているので、よろしくお願いします。
0259アライグマPascalNGNG
手持ちの書籍からの抜粋でよろしければ・・・・・

「正の整数aとb(a>=b)の最大公約数(GCM)を求めるプログラムを書け。
aまたはbがゼロ以下の場合は適当にエラーメッセージを出力せよ。」

解法のヒント(ユークリッドの互除法をつかう)

まず大(a)を小(b)で割った余りrを求める。
次にaをbに、bを余りrに置き換える。
これをr=0となるまで繰り返す。最後の被除数がGCMとなる。
0260アライグマPascalNGNG
「明解PASCAL・国際規格(ISO)準拠」 伊東正安/金谷範一=共著
サイエンス社 定価(本体2111円+税)

上の本からの出題です。この本は個人的におすすめです。
0261丁稚PascalNGNG
さっそくチャレンジしてみます。
0262丁稚PascalNGNG
program GCM(input,output);
var a,b,c,r:integer;
begin
writeln('自然数を二つ入力しる!');
readln(a,b);
while (a<0) or (b<0) do begin
 writeln('自然数っつただろうが(゚Д゚)ゴルァ!!'); 
 readln(a,b);
 end;
if a<b then begin
 c:=b;
 b:=a;
 a:=c;
 end;
repeat
 r:=a mod b;
 a:=b;
 b:=r;
until r=0;
writeln('最小公約数=',a);
end.
0263丁稚PascalNGNG
こんな感じになりました。
これくらいで一時間か・・・ちと情けない。
直したほうが良い箇所とかありますか?
0264デフォルトの名無しさんNGNG
>>263 折角だから GCMを求める関数を作って
 メインではそれを呼ぶように変更してはどう?

それから最小公約数は1だよ

最大公約数・最小公倍数でWeb検索してみたら
0265丁稚PascalNGNG
>>264
>それから最小公約数は1だよ
そうでした、恥ずかしい・・・。
関数つかってやってみますね。
0266丁稚PascalNGNG
program GCM(input,output);
var a,b,c:integer;

function a_gcm(x,y:integer):integer;
var r:integer;
begin
repeat
  r:=x mod y;
 x:=y;
  y:=r;
until r=0;
a_gcm:=x;
end;

begin
writeln('自然数を二つ入力しる!');
readln(a,b);
while (a<0) or (b<0) do begin
  writeln('自然数っつただろうが(゚Д゚)ゴルァ!!');
  readln(a,b);
 end;
if a<b then begin
  c:=b;
  b:=a;
  a:=c;
end;
writeln('最大公約数=',a_gcm(a,b));
end.
0267丁稚PascalNGNG
訂正してみました。いちいちソース貼ってると長くなるなぁ。
0268デフォルトの名無しさんNGNG
>>266 大小の比較交換も a_gcmに入れないと使う時に不便だよ
0269丁稚PascalNGNG
program GCM(input,output);
var a,b:integer;

function a_gcm(x,y:integer):integer; //一組の自然数の最大公約数を求める
var r,z:integer;
begin
if a<b then begin
  z:=y;
  y:=x;
  x:=z;
  end;
repeat
  r:=x mod y;
  x:=y;
  y:=r;
until r=0;
a_gcm:=x;
end;

begin
writeln('自然数を二つ入力しる!');
readln(a,b);
while (a<0) or (b<0) do begin
  writeln('自然数っつただろうが(゚Д゚)ゴルァ!!やりなおし!!');
  readln(a,b);
  end;
writeln('最大公約数=',a_gcm(a,b));
end.
0270丁稚PascalNGNG
>>268
なるほど。再度訂正してみました。
大学だと課題として提出して終わりなんで、その場限りのコードになりがち。
気をつけねば。
0271デフォルトの名無しさんNGNG
× if a<b then begin
  z:=y;
  y:=x;
  x:=z;
  end;
0272デフォルトの名無しさんNGNG
テストコードを書く習慣をつけないといけないよ
 最初に予め計算した結果と何個か比較させるようにするといい

if a_gcm(555,9875)!=5 then writeln('NG');
0273デフォルトの名無しさんNGNG
除算を使わない GCD

function gcd_1(m,n:Integer):Integer;
begin
gcd_1:=0;
if m=0 then exit;
if n=0 then exit;
while m<>n do begin
while m>n do m:=m-n ;
while n>m do n:=n-m ;
end;
gcd_1:=m;
end;
0274アライグマPascalNGNG
書籍に載っていた模範解答です。

program gcm(input,output);
var
  a,b,r : integer;
begin
  writeln('Enter a:'); readln(a);
  writeln('Enter b:'); readln(b);
  
  if (a>0) and (b>0)
  then begin
      repeat
        r:=a mod b ; a:=b ; b:=r ;
      until r=0;
      writeln('gcm = ',a)
    end
  else writeln('ERROR: a and b must be positive.')
end. 
0275丁稚PascalNGNG
>>271
やってしまった・・・。

>>272
なるほど、次からはテストコード入れるようにします。

>>273
参考になります。

>>274
自分の
  r:=x mod y;
  x:=y;
  y:=r;

よりも、
 r:=a mod b ; a:=b ; b:=r ;

のように一行に書いてしまった方がいいんですかね?
これは好み?
0276アライグマPascalNGNG
まったくの好みです。
私は全て一行一文主義です。
0277デフォルトの名無しさんNGNG
Pascal の歴史はここが詳しい。
http://web.mit.edu/taoyue/www/tutorials/pascal/history.html
0278デフォルトの名無しさんNGNG
>>277 サンクス
平易な英文だから
「英語はちょっと・・・」という人もトライしてみるといいね

この辺の経緯を知らなかったDelphiユーザーなら
ますます好きになること請け合いだよ
0279丁稚PascalNGNG
>>276
ありがとうございます。
今まで一行一文だったし、読み易い(自分としては)ので
これからも一行一文でいきます
0280デフォルトの名無しさんNGNG
Pascal って String 型あるんだ。
Cよりラクチンでいいな。
0281デフォルトの名無しさんNGNG
ord ってなんの略なんだろう?
ord('R') で82 になるやつ。
0282デフォルトの名無しさんNGNG
order, ordinalなどの「序数」の事でしょう。
0283デフォルトの名無しさんNGNG
確かにCやBASICしか知らなかった人がPASCAL(Delphi)
のテキスト読んだときに集合とか順序型、部分範囲型
とか書かれていると「ハァ?」なんだろうなあって思う。(w
0284デフォルトの名無しさんNGNG
>>280
文字列に関してはCが馬鹿すぎるよね
よくあんな言語で業務用アプリを作るもんだと思ってたもの
C++は文字列用のクラスがあるからまだましだけど・・・
0285デフォルトの名無しさんNGNG
>>283
(゚Д゚)ハァ?
って思ったよ、最初は。でも便利だね。
0286デフォルトの名無しさんNGNG
集合型、列挙型、部分範囲型、この3つの関係を
理解できたら本当に便利だよね。
0287丁稚PascalNGNG
Cでは文字列を扱いた場合どうしてるんですか?
配列で定義してるの?レベルが低くてすいません(^-^;
やっぱ他の言語も少しは勉強していかないとだめかな・・・
0288デフォルトの名無しさんNGNG
Cの場合、ポインタと配列の区別がpascalに比べるとはるかに曖昧です
char *p が文字列ポインタ(var p:PChar;)相当 (type PChar=Char^;)なんだけど
p="ABCD"; と文字列を代入してるかのように表現出来ます。
 というかします

そして文字列"ABCD"は5文字の文字配列と等価です。
 文字の最後は必ず #0 です。 これは Cでは'\x00' と書きますが

こういう表現方法をAsciiZとか呼びます

DelphiではこのAsciiZ方式と親和性が高くなるよういろいろな工夫がされています
0289デフォルトの名無しさんNGNG
for letter := 'A' to 'Z' do
0290デフォルトの名無しさんNGNG
>>289 は無視してくだされい。

for letter := 'A' to 'Z' do
 write (letter)

こういう書き方がOKと聞いてはじめはびっくりした。
しかし、よく考えてみると、文字コードが入っているだけなので、納得した。
0291デフォルトの名無しさんNGNG
>>288
何か変。
>p="ABCD"; と文字列を代入してるかのように表現出来ます。
> というかします
これは初期化のときだけ。
初期化のときに「char* p = "abcd"」とすると、文字列の長さの分(此処では5)だけの領域を「確保」し、この場合なら"abcd\0"で初期化をします。
代入のときには出来ません。
代入をしたいときは、標準ライブラリその他の関数を使うとか、一文字ずつ操作するとか(配列と同じです)。
(C++ならstd::strungという文字列クラスが標準で存在します)
> 文字の最後は必ず #0 です。 これは Cでは'\x00' と書きます
'\0'とかくのが普通。
'\x00'はコードが0になる文字で、'\0'は文字列の終わりにくる特殊な文字。
「結果的には」同じだけど(ASCIIの場合?)。
0292デフォルトの名無しさんNGNG
>>291補足。
「初期化」というのは、宣言のときの代入です(違うけど)。
Cでは変数を「型名 変数;」として宣言しますが、
「型名 変数 = 初期値;」とすることで、変数の定義と同時にその値を設定することも出来ます。

'\x__'は、xのあとに16進数の値を入れて、コードを直接指定します。
0293まあ一応NGNG
>>291-292
char* p = "abcd"
はポインタだから配列とは違うぞ。と。
確保されるのはcharへのポインタとabcd\0だぞ。と。
char p[] = "abcd"
とは違うぞ。と。
(下はp="efgh"とかはできないが上はできる)
0294デフォルトの名無しさんNGNG
>>287
ところで課題出してほしいの?
0295デフォルトの名無しさんNGNG
じゃあ、データ構造の問題。
文字列を格納する片方向リスト構造を構築し、
任意の個数のデータを入力させ、最後に、その一覧を
通常ソート(頭文字がA→Zとなるように)及び
逆ソート(終端文字がA→Zとなるように)で出力せよ。

0296291NGNG
>>293
謝謝!
0297丁稚PascalNGNG
>>294
はい、おねがいします。

>>295
今からやってみます。かなり苦労しそうですが・・・
0298デフォルトの名無しさんNGNG
もうすこし単純な問題なら… そうさねえ
どの程度の問題を要求しているのか分からないけど、
「指定したファイルを、バイナリ形式で(
16バイト分を1行として、16進数で)表示せよ」 とか。

バイナリエディタみたいに。

00000 00 32 FF 55 23 56 F3 4F 93 F2 00 34 1A B3 34 CD
00001 ...
00002 ...
...

と言う風に表示。
でもって、それをテキストファイルに出力。
0299デフォルトの名無しさんNGNG
なんか、本読めば読むほど、Cとそっくりということがわかってきて、だんだん新鮮味がなくなってきた。
そろそろJavaに移るか。
0300デフォルトの名無しさんNGNG
>>299
CとPascalはいとこ同士みたいなもんだからね〜
思想的には正反対の部分もあるけど

おっと、300ゲトー、ズサ
0301デフォルトの名無しさんNGNG
ただ、ソースがキレイなのは気にいった。
Cだとぐじゃぐじゃして何がなんだか、書いた本人しかわからんことも多い。
Perlよりはましだが。
Pascalはどうかいてもキレイになるようなしくみがあるんだろうな。
なんでCに負けたんだ?
0302デフォルトの名無しさんNGNG
>>301
http://web.mit.edu/taoyue/www/tutorials/pascal/history.html
↑これを参照のこと

少なくともWindowsアプリを作る道具として見れば、C(≠C++)には勝ってるね
0303デフォルトの名無しさんNGNG
>>299
みためなら、Javaも大して変わらんと思うがナー


本当に違った世界を味わいたいなら、LISPなどお勧めしておきたい。
つーか、一度はやっておくといいよ。
0304デフォルトの名無しさんNGNG
Schemeは一応やったんですけど、exeが作れないので飽きました。
0305Delフサギコ ◆zE1iiRdQ NGNG
   ∧,,∧    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ミ,,゚Д゚彡 < 何がやれるのか自体がわからなかったので
   U  つ   \飽きました。
 @ミ  ミ       ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ∪''∪ 
      言語とは難しいですね。
0306デフォルトの名無しさんNGNG
でもPascalの本、またちまちま読んでる。
アマゾンでJavaの本、注文したけど、届くまで1ヶ月かかるから。
それまでの間、Pascal の勉強するつもり。
もし時間がそれでも余ったら、VBとDelphiの勉強する。
本は買ってあるから。
0307デフォルトの名無しさんNGNG
おい、お前ら。
pascalの中で、UNIXコマンド使う方法教えてください。
0308307NGNG
UNIX版で聞いてきます。
0309デフォルトの名無しさんNGNG
    http://pc.2ch.net/test/read.cgi/tech/1019185100/
0310デフォルトの名無しさんNGNG
test
0311デフォルトの名無しさんNGNG
保守sage
0312デフォルトの名無しさんNGNG
age
0313デフォルトの名無しさんNGNG
age
0314デフォルトの名無しさんNGNG
age
0315デフォルトの名無しさんNGNG
寒いスレだな
0316デフォルトの名無しさんNGNG
例題が豊富な解説書のお勧めはないでしょうか?

delphiは扱ったことがないので純粋なpascalの本を探しています。
0317デフォルトの名無しさんNGNG
Pascalに限らないけど純粋なPascalの本となると昔の物が多いので
とりあえず図書館で探してみてはいかがでしょう。

答えになってないですけど。
0318困ったさんNGNG
Pascalで多項式を2次式で割るプログラムを書けといわれたんですけど、
どうもうまくかけません。誰か教えてください。
0319困ったさんNGNG
age
0320デフォルトの名無しさんNGNG
>>318
数学の問題
0321デフォルトの名無しさんNGNG
const
 Jisu = 5; // 次数(これは5次の場合)
var
 tako: array[0..Jisu]of Real; // 多項式
 niji: array[0..2]of Real; // 二次式
 ans: array[0..Jisu-2]of Real; // 答え


 for i := Jisu-2 downto 0 do begin
  ans[i] := tako[i+2] / niji[2];
  for j := 2 downto 0 do
   tako[i+j] := tako[i+j] - ans[i]*niji[j];
 end;


これで、ans に商となる多項式、 tako に剰余となる1次式が入るかな。
ゼロ除算とかのエラーは考えてないので、その辺よろしく。
0322困ったさんNGNG
とても参考になりました。ありがとうございます。
0323デフォルトの名無しさんNGNG
Double を Integer に入れたいんですけど、どうすればいいですか?
0324デフォルトの名無しさんNGNG
>>323
kyasuto
0325デフォルトの名無しさんNGNG
どのようにキャストすればいいんですか?
0326デフォルトの名無しさんNGNG
windowsで使えるpascal→C言語コンバータはないですか?
0327デフォルトの名無しさんNGNG
>>323
Round関数
0328デフォルトの名無しさんNGNG
何だここの"PASCAL"って?
http://biz.ascii24.com/biz/news/article/2002/06/20/636664-000.html
0329323NGNG
>>327
ありがとうございました!
0330デフォルトの名無しさんNGNG
Code worrierでpascalコンパイルする必要がでてきました。
使ってるひと居ませんか?

Code worrierは既にpascalの対応が終了していて、
本家(あめりか?)で最終pluginがでてるみたいなんですけど、
これって日本語版の最新Code worrierで動くのでしょうか?

OSはMac9です。
よろしくおねがいします。
0331デフォルトの名無しさんNGNG
>330
使えたよ。
ただしVer.7までだけどね。
それとCarbonは駄目っぽ。
0332デフォルトの名無しさんNGNG
図書館でPASCALの本を探したら開架は全滅だった。
仕方ないから書庫から持ってきてもらった。
もう需要が無いんだね。
まだ出てから10年も経っていない本だって……
0333デフォルトの名無しさんNGNG
Code worrierといえば、PocketStudioとか言う、DelphiライクなPalmの
開発環境があるみたいだね。
開発環境じゃなくて、Palmで動くPascalの処理系があるとうれしいかも。
Pascalの勉強用に。
でも、グラフィティでソースコード入力するのもちょっと面倒か。(w
0334330NGNG
>331
日本語版は最新が7みたいだからこれで逝けるわけですね。
Carbonはとりあえず必要ないです。
ありがとー
0335デフォルトの名無しさんNGNG
>334
ビルドする時にBuild Allを選択すればCARBONも使えるようになります。(人に指摘されるまで気付かなかった)
0336330NGNG
フォローさんくすです。
で、CW7日本語版アカデミックをゲトして
Pascal Pluginつっこんだら、とりあえず処理はできてる模様。
だけど、目的のコードはbuild出来ない罠。

実はNIH-ImageをソースからMakeしてるんだけど、

type mismach
SFPutFile(〜)

とか、いろいろとおこられるよヽ(`Д´)ノウワァァン!!
0337デフォルトの名無しさんNGNG
>>330
1.62ならCWP2でMakeしたのを持ってる。たしかあれからファイルマネージャあたりは
激変したから、大変じゃない?

でも褌EDITがウプデートされるくらいだからな...
0338330NGNG
でも真の目的はNIHimage(改)のbuildなのですよ。
とりあえず手始めにそのままのをやってみようかと。
そのまま使うだけなら配布されてますしね。

(´-`).。oO(古いCWをとりよせたほうが早いのかなぁ)
0339337NGNG
>>338
古いヘッダならADCのサイトにあるような。あ、けど合うのをさがすのがたいへんだね。
0340330NGNG
入ってる(新しい)ヘッダをみながら、エラーが出る個所を無理矢理それっぽく直したら、
なんとかNIH-image(1.62)がmakeできたよ。一見ちゃんと動いてるみたいだけど、どうだろう。

PascalもCWもはじめてなんだけど、それ以前にMacの初心者なのが辛いトコロ。
AppleEventを効かすと刺さるんだけど、これって切っちゃっていいものなんだろうか…

ところで、>>1にGUI不可って書いてあることに今気づいたよ。
スレ違いスマソ。
親切な方、誘導きぼんぬ。
0341デフォルトの名無しさんNGNG
age。
DAT落ちは阻止じゃ。
0342デフォルトの名無しさんNGNG
>>341
んだ
0343デフォルトの名無しさんNGNG
このスレでFreePascalの話題出てますか?
え? ここ何処の板? 過去ログ読め?
ショボーン
0344デフォルトの名無しさんNGNG
生きろ!
0345デフォルトの名無しさんNGNG
PASCAL CENTRALにはFREEのPASCALコンパイラも置いてあるぞ!
0346デフォルトの名無しさんNGNG
AGE
0347デフォルトの名無しさんNGNG
何気なくパスカルのソースコードを検索してたらこんなのあったぞ。
http://home.planet.nl/~mike.wiering/mario/
TurboPascal5.5・6.0・7.0でスーパーマリオを作ってる。
まだソース見てないけど、ちょっと面白そうだ。
0348デフォルトの名無しさんNGNG
Pascalが
Philips’ Automatical Sequence Calcurator
の略だったなんて初めて知ったよ
0349デフォルトの名無しさんNGNG
>>347
ジャンプしながらファイアボールを撃つと、
フルスクリーンに関らずシステムメニューが出てしまう…
このキー配列どうにかならないものか…
0350デフォルトの名無しさんNGNG
>>349
ソースファイルあるんだから、変更できそうだけどな。
生憎TPがないや。本家に行ってDLしてこようかな。
0351デフォルトの名無しさんNGNG
ObjectPascalの日本語で読める本って何か良いのある?
このスレでリンクしてある「Object Pascal/Delphi(Kylix) プログラミング入門」
はDelphiでの使用に限定しているようなので汎用的なものを……
0352デフォルトの名無しさんNGNG
>>351
Object Pasca lは Turbo Pascal/Delphi でしか使っていないのだから、汎用的と言っても意味ないと思う。

標準 Pascal ならあるけど、文字列型も分割コンパイルもない「教育言語」だから、今更覚える必要も無いとも思われ。
0353デフォルトの名無しさんNGNG
CodeWarriorでもObjectPascalは使えます。
ボーランドがLinux用に出してるもう一つの製品でも使えるよ。
0354デフォルトの名無しさんNGNG
それだけじゃない
http://www.freepascal.org/
compatible with TP 7 as well as most versions of Delphi
0355352NGNG
>>353-354
あ、Kylix はそうでしたね。失念しておりました。

CodeWarrior と Freepascal は知りませんでした。私は最近の動向をよく分かっていない
ようです(というか、Delphi で事足りているから、追いかける気がしないだけ)。

あと、標準化の中には「ISO Pascal」ってのもあったと言うことを思い出しました。Borland
はこの規格の裁定に入っていないから、気にもしていないけど。

それはそうと、「Object Pascal というのは紛らわしいから?Delphi Language に変える」
という話もあるようだけど、Kylix もあるとしたら、なおさら紛らわしいような気もするんだけ
ど...
0356デフォルトの名無しさんNGNG
誰かMetrowerksの
Pascal Language Reference
Pascal Library Reference
Error Reference
を持っている人居ない?
ObjectPascalを使ってみようと思ってCodeWarriorCDを探してみたのですが見つからないのです。
Pascal Compilers Ref.pdfによるとCodeWarriorPro5のDocumentationフォルダの中にあるはずなんだけど、
いくら探してみ見つからないんです。
Sherlock2で検索かけてもPascal Compilers Ref.pdf以外は見つからなくて……。
Pro7にはPascalのDocumentなんて元から入っていないし……
0357デフォルトの名無しさんNGNG
Metrowerksに問い合わせたらメール添付で送ってくれました。
原文の方しかないらしく、送って来たのは英語……。
しかも200頁超や300頁超でした。
はぁ、頑張って訳すか。
0358アライグマPascalNGNG
仕事が忙しくてネタがないのですが、(HPまだ作れていません)
すみませんageます。

0359デフォルトの名無しさんNGNG
レコード型の可変部がイマイチ良く分からん。
Var r : record
case byte of
0 : ( i : Longint );
1,9: ( a : extended);
(1) : ( b :array[0..9] of byte );
end;
とかくとき、
iやa,bなどは変数ということは分かるのだけれどその前に書く0や1,9がなんなのか良く分からない。
0360デフォルトの名無しさんNGNG
Pascalは知らんが、Cでいう共用体(union)ってやつだな。
番号はどの構造をとるかっていう構造識別番号みたいな奴で、byte型なわけだ。
無名だから使ってないみたいだけど、定義の時は必ず適当に決めなきゃならんのかも?
0361デルファイの名無しさんNGNG
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は単なるメンバ以上の意味を持ちませんが)
0362デフォルトの名無しさんNGNG
なるほど共用体か。(Cも少しやっていたので分かる)
それで先頭のアドレスをそろえているのか。
持っているPASCAL入門の本は可変部の説明がなおざりだったんで何の事か良く分からなかったよ。
0363デフォルトの名無しさんNGNG
function(関数)とprocedure(手続き)の違いは返り値の有無と考えても問題ない?
0364デフォルトの名無しさんNGNG
問題ないです。
0365デフォルトの名無しさんNGNG
そいえばたまにわざわざダミーの返り値を使ってなんでもかんでもfunctionにしてるソースを見ることがあるな。
C出身者が書くとそうなりがちなのかも。
0366デフォルトの名無しさんNGNG
>>365
Cにはvoidがある。
そんなソースを書くのはDQNだけ。
0367デフォルトの名無しさんNGNG
単にprocedure(手続き)を宣言するのが面倒臭かったのでは?
0368デフォルトの名無しさんNGNG
>>367
> 単にprocedure(手続き)を宣言するのが面倒臭かったのでは?

意味わからん。function の方が面倒と思うが...。
0369デフォルトの名無しさんNGNG
まさか・・・これを・・・?
if A then B else C
A && B || C
0370デフォルトの名無しさんNGNG
コンポーネントパスカルをダウンロードしたけど、なにげによさげ
でも英語できないから難しい。だれか邦訳してくれ言語リファレンス。
0371デフォルトの名無しさんNGNG
http://www.fit.qut.edu.au/PLAS/ComponentPascal/
0372デフォルトの名無しさんNGNG
大分下がって来たので揚げ
0373デフォルトの名無しさんNGNG
そろそろ保守
0374デフォルトの名無しさんNGNG
Pascalの参考書探してる人は図書館いってみ。
TPとか、Pascalのがタマーにあったりしてうれしい。

あとは、大学に忍び込んで生協にあったりなかったり。
0375デフォルトの名無しさんNGNG
{$ }で囲まれている部分は何をする為に付けられるもの?
確か{ }で囲まれた部分はコメント部分で、コンパイル時には無視される部分だと記憶しているのだけれど。

{$I PascalOverrides.p}や{$unused ( inCallRef, inUserData ) }などのようにコメントにしては不自然な気がしてならない。
他にも
{$IFC UNDEFINED __TRANSLATION__}
{$I Translation.p}
{$ENDC}
なんて記述がある。
0376デフォルトの名無しさんNGNG
コンパイラに対する命令
0377デフォルトの名無しさんNGNG
>>375
ヘルプ嫁。
0378デフォルトの名無しさんNGNG
コマンドラインで指定するコンパイルオプションと同じ。

しかし、コマンドラインでオプションを指定するとそのソース全部に一括してそのオプションが適用されてしまう。
コンパイラ指令としてソース中に記述すれば部分的な適用もできるし、IFなどの制御構造を使った複雑な指定もできる。

例えば、コマンドラインで「 -$O+ 」と指定すると、それはそのプログラム全体が最適化オプションが適用されてしまうが、
ソース中に「 {$O+} 」と書いて指定すれば手続き一つだけについて最適化オプションを適用することもできる。
0379375NGNG
>376-378
コンパイラ疑似命令かぁ。
どうりでPASCAL入門の何所にも書かれていないわけだ。
0380デフォルトの名無しさんNGNG
古本屋いけ。
0381デフォルトの名無しさんNGNG
四個の変数 a,b,c,dの最小値を求める
IF文だけを用いたプログラムと
中間状態を用いたプログラムを書いてくれませんか?

0382デフォルトの名無しさんNGNG
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;
0383デフォルトの名無しさんNGNG
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;
0384381NGNG
>>382>>383
Pascalを習い始めたばかりなのです。
助かりました。有難うございました。
0385デフォルトの名無しさんNGNG
保守
0386デフォルトの名無しさんNGNG
age
0387デフォルトの名無しさんNGNG

 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

と言うプログラムが本に載ってたんだけど、これってどういう手順で共通集合を出してるかわかんないです。
分かる人いたら、解説キボンヌ
0388デフォルトの名無しさんNGNG
>>387
こりは Pascal 言語の形を借りたアルゴリズムの説明コードだから、説明してくれと
言われても、このコードを読んで。としかいえないような。

集合 (a,c,d,f) と (b,c,f,g) の共通部分を取得するときに、人間ならどうやるか。
ってことをそのまま実装しているだけだぞ。
0389387NGNG
>>388
begin以下がどのような手順によってS1,S2の共通部分を取得してるかわからないんス。
p:=S1↑.nextってとこはpにS1のどの値を代入?
0390デフォルトの名無しさんNGNG
まずS1の先頭の要素をpに入れる。
pが指す値(item)と同じ値のがリストS2に在るかどうか調べる(search)
もしなければ最後まで行ってしまうのでnilになる。
あったら、その値をSにくっつける。
以下、S1の末尾に行くまで繰り返す。

こんなところかな。
0391387NGNG
>>390
解説サンクスベリーマッチョです

S1の先頭の要素をpに入れてから、ループになりますよね?
ループの条件はpが空集合でないときで、ってやっていって、S1はいつ先頭の要素から、先頭の次の要素に変わってるのかが分からないです。
0392デフォルトの名無しさんNGNG
データは線型リスト構造だよ。
0393392NGNG
線型リストの1個の要素はこんな形式
【[データ本体][次の要素へのポインタ]】


これが一次元に繋がってるのが線型リスト。

[先頭をさすポインタ]
↓
→【[データ1][要素2へのポインタ]】
            ↓
←←←←←←←←←←←←←
↓
→【[データ2][要素3へのポインタ]】
            ↓
←←←←....←←←←←
↓
→【[データn][nil〔終端〕]】

知ってたらスマソ。
0394デフォルトの名無しさんNGNG
その教科書のどこかにある list 型構造体の定義を見直してみてくれ。
0395デフォルトの名無しさんNGNG
>>391
>ループの条件はpが空集合でないときで

じゃなくて、pが指す先が存在するかどうかってこと。
392さんの図で指すものがなくなったらend
0396392NGNG
Pascalの集合型と混同してるのかな。このプログラムは集合型は関係ないよ。
0397392NGNG
ポインタ型の変数は>>393の

【[データ本体][次の要素へのポインタ]】

みたいな構造体を指し示すタイプの変数だ。
もっと詳しくいえば、その構造体の存在するメモリ上のアドレスを保持している。
このタイプの変数は、その変数の後ろに「↑」をつけることによって
そのレコードの内容にアクセスできる。
※コーディング時には「↑」は「^」を使う。

ポインタ p が例えば2番目のレコードのアドレスを保持しているなら
p^.item と書くことによって
2番目のレコードの item フィールドを参照しているのと同じ結果になる。
(整数が入っているなら writeln(p^.item); などと書ける。)

p にはポインタ型の価を代入できる。
p := (3番目の要素のアドレス)
みたいに代入すれば、今度は
p^.item で3番目の要素の item フィールドを参照できる。

【[データ本体][次の要素へのポインタ]】
この構造体の[次の要素へのポインタ]というフィールドも、またポインタ型だ。
この値で p の値を更新すれば
 p := p^.next;
p を使って次のレコードを参照できる。
こんなふうに使っていくのが線型リスト。(本読んだ方がいいと思うけど)
0398デフォルトの名無しさんNGNG
どうしてPascalのポインタは↑なのにTurbo Pascalのポインタは^なんですか?
0399デフォルトの名無しさんNGNG
単に、キーボードと印刷の都合と思ふ
0400398NGNG
Turbo Pascalの^と標準Pascalの↑はどちらが一般的なんですか?
0401399NGNG
同じ文字なんだけど、キーボード上に↑は無いので^を使ってるし、
印刷して^は見にくいので↑になっていると思ふ
Pascalが生まれた頃は2バイト文字なんて一般的じゃ無かった筈だし
0402398NGNG
普通のPascalの↑は、かな変換でのを使用していいってことですよね?
0403デフォルトの名無しさんNGNG
アフ?
0404デフォルトの名無しさんNGNG
 
0405387NGNG
皆さん解説蟻が鯛です。
とても分かりやすくて感謝してます。

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としても駄目なんでしょうか?

0406デフォルトの名無しさんNGNG
>>405
言ってることよく分からんよ。
0407デフォルトの名無しさんNGNG
S1, S2は引数にvarが指定されていないので、変更不能だと思いますが、それはさておき、

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

S1   これなら全て参照可能
↓
【データ|next】→【データ|next】→【データ|next】→【データ|nil=終端】


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

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

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

で、405のような処理を書いた場合は
一度きりなら動くかも知れないが
以降、このリストを参照することができなくなる、というのが結論かな。
0408補足NGNG
線形リストはレコードの追加、削除ができますが
その場合でも常に全体を参照できる様、
例えば先頭にレコードを追加する場合は
変更後の先頭のレコードをさすようにポインタを変更します。
先頭のレコードを削除する場合は
次のレコードをさすようにポインタの値を変更します。

ところでプログラム中の4行目のp:=S1↑.next; は
もしかしたら p := S1 ではないのかと。
S1の一番はじめのレコードが無視されているような気がします。
0409デフォルトの名無しさんNGNG
>>408
つまり、pはS1の値を保持するためにあると言うことかな?

>もしかしたら p := S1 ではないのかと。
確かにそんな気がします。
S1の先頭にダミーセルがあることにしてるのかなあ?
0410407 & 408NGNG
Pの役割はイメージ的には配列の要素を参照する時のインデックスみたいなものかと。

for i:=1 to 10 do
 if a[i] <= then xxxx;

のiがP、aがS1とか。(かなり違うが)

価を自在に変えながらリスト中のレコードを次々と指し示していく役割をするポインタ(P)と
全体を保持しておくために常に先頭を指すポインタ(S1)は
役割が違うと考えた方がいいかも。(追加、削除を伴わない処理の場合)
0411ああNGNG
恐らくばりばり既出ネタで恐縮なんですが、
今私は数学系の学部に在籍しておりまして、研究上アルゴリズムや素因数分解
等をコンピュータ上で行わなければならない必要性が出てきました。
時間の関係上、手っ取り早くそのような計算が自在にできるようになりたいのですが、
当方、残念ながらコンピュータはネットする程度でプログラムやC言語、UNIX等の知識は
限りなく0に近いです。。何からはじめればよろしいでしょうか。御指導願います。
0412ああNGNG
スンマソ、スレ違いでした。。。
0413デフォルトの名無しさんNGNG
>>410さんが言っているように、
pはいわゆるイテレータというやつで、
S1はリストの先頭を保持するという役割があるので
たとえS1でpを代用できてもするべきじゃないです。
0414デフォルトの名無しさんNGNG
Error: Incompatible type for arg no.
2: Got SHORTSTRING, expected LONGINT
どなたかこのエラーメッセージのわかる方いらっしゃいますか?
0415デフォルトの名無しさんNGNG
引数の2個目はLONGINTが来るはずなのにSHORTSTRINGだよボケが
0416デフォルトの名無しさんNGNG
落ち阻止。
0417デフォルトの名無しさんNGNG
リスト構造をもつ、ポインタ(pointer)型の変数を使用してデータ入力後絶対値に関して昇順に並べ替えたいのですがどうしてもうまくいきません。どうプログラムを書いたらいいでしょうか?
0418デフォルトの名無しさんNGNG
>>417
よくわかりません。
0419デフォルトの名無しさんNGNG
簡単に言うとポインタを使って昇順の連結リストをつくりたいのですが。
0420デフォルトの名無しさんNGNG
>419
中身を比較したのちポインタを書き換える。それだけ……
基本情報処理の本のリストに関する部分を読めば直に分かる。

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

汎用的に作るのなら、ソート関数は作り込まず、外部のソート関数を呼び出すよ
うにすればよいし。
0422 NGNG
コンソールアプリケーションである値を入力したら窓を閉じるにはどうしたらいいですか?
0423デフォルトの名無しさんNGNG
コンソールアプリケーションに窓なぞない。
0424 NGNG
>>423
窓って言うか…何て言ったらいいんだろう?
Delphiでコンソールアプリケーションを作って実行したらコマンドプロンプトが起動するじゃないですか。
それを閉じたいのですが無理なんでしょうか?
0425デフォルトの名無しさんNGNG
exit(return)
0426422NGNG
>>425
exit(return)だったら実行できませんでしたがちょっと削ってexitにしたら閉じることができました。
ありがとうございました。
0427デフォルトの名無しさんNGNG
>>462
ごめん、(return) はなんとなくノリで。
DOS 窓の終了と同じ雰囲気で。
0428デフォルトの名無しさんNGNG
>424
DelphiはDelphi板で聞くのが良いよ。
0429デフォルトの名無しさんNGNG
>>425-426
Exitは関数や手続きを抜けるだけじゃない?
もちろんprogram .. begin .. end のレベルで実行すればプログラム自体を
抜けるけど。
どこでも即座に終了させたかったらHaltを使うべし。
0430425NGNG
>>429
ご指摘ありがとう。しばらくDelphi使ってないのでかなり忘れてました。
0431デフォルトの名無しさんNGNG
逆ポーランド記法をスタックをよういて実現したいのですが、プログラムがうまくかけません。
どなたか教えていただけないでしょうか?
0432デフォルトの名無しさんNGNG
よういて?
0433431NGNG
もちいてだっての バカ
0434デフォルトの名無しさんNGNG
用いる。
餅炒る。
モチ要る。
0435デフォルトの名無しさんNGNG
>>431
if (数字) {
 スタックにpush;
} eles if(演算子) {
 スタックから二つpopして演算;
 結果をスタックにpush;
} else {
 error;
}
0436IP記録実験NGNG
IP記録実験
http://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を提出することがある。
0437デフォルトの名無しさんNGNG
>>1
全板IP記録に追い込まれた今の気持ちをどうぞ。
0438デフォルトの名無しさんNGNG
記念カキコ
0439デフォルトの名無しさんNGNG
ひろゆきは架空の人物ですよ。
0440デフォルトの名無しさんNGNG
(´皿`;)邪穂でごめん
0441IP記録実験NGNG
IP記録実験
http://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を提出することがある。
0442デフォルトの名無しさんNGNG
>>540
逝き遅れの妹発見
0443デフォルトの名無しさんNGNG
>>50
タイプミス
スマソ
0444デフォルトの名無しさんNGNG
======2==C==H======================================================

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

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

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

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

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

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
0445デフォルトの名無しさんNGNG
qbだけじゃなかったのか
0446デフォルトの名無しさんNGNG
モルモットにされたのか
0447デフォルトの名無しさんNGNG
もうちょっと電波度下げよう。意味不明になりすぎてる
0448デフォルトの名無しさんNGNG
厨房板の荒らしは削除されたようだ
いつか全板で強制表示になるのだろうか?
スクリプトくめばどこの板だって荒らせるだろうし
0449デフォルトの名無しさんNGNG
実験のためにトオルに依頼されてコピペやってるって可能性もあるのか・・。
0450デフォルトの名無しさんNGNG
>>936
それは当然考えてはいますが、小ネタやちょっとした意見を書き込むときにもそれを
意識しなくてはならないというのはしんどい
0451デフォルトの名無しさんNGNG
FreePascalはマルチプラットフォームであることを忘れているに、1Penis
0452デフォルトの名無しさんNGNG
つーかちょっと北朝鮮や朝鮮総連を批判しただけでログから身元割れたりしないか心配。
奴ら何しでかすかわからない凶悪な連中だからな。

ログってひろゆきしかみれないのか?
削除人が見れたら問題・・・以前削除に絡んで強請をした奴もいるらしいし
0453デフォルトの名無しさんNGNG
ふむ。
0454デフォルトの名無しさんNGNG
言いたいことも言えないこんな世の中じゃ


        ウェー ハッハッハ
0455デフォルトの名無しさんNGNG
2chのIDてIPを変換してるんだっけ?
だったら、全板強制IDにして暗号キーだけ保存しておけばいいんじゃないの?
0456デフォルトの名無しさんNGNG
>>735
書き方がネタっぽすぎw
0457デフォルトの名無しさんNGNG
http://ex.2ch.net/test/read.cgi/korea/1042022029/

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

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

祭り中です。
0458デフォルトの名無しさんNGNG
夜勤 ★さんはなんでふだんはBG ★とかキャップを使い分けてるんですか?
0459デフォルトの名無しさんNGNG
削除板に書き込む時いちいち設定し直すのが面倒臭いから
0460デフォルトの名無しさんNGNG
元々パク(ry
0461デフォルトの名無しさんNGNG
======2==C==H======================================================

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

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

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

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

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

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
0462デフォルトの名無しさんNGNG
フェミホモ荒らしが来なくなるなら
まあいいか。。。

悪いことをする気はなかったど、なんだか
夢がなくなるな。
なんつーか、手口のきれいな銀行破りが
捕まっちゃったみたいな気分。
0463デフォルトの名無しさんNGNG
まあ、匿名じゃなきゃできんような自由な言論なんてたかが知れてるしな。
今までの2ちゃんみてりゃ一目瞭然。
匿名のかさをきて暴言はいてる奴らが減っていいかも。
0464デフォルトの名無しさんNGNG
じゃ、おまえが2ch来なければ良い。それだけのこと。
0465デフォルトの名無しさんNGNG
ウェー ハッハッハ  PART 2
http://live2.2ch.net/test/read.cgi/news/1041867442/
0466デフォルトの名無しさんNGNG
ネオむぎを超えるわけない
犯人が17歳以下なら話は別だが
0467デフォルトの名無しさんNGNG
中国の漬け物ですか?(^_^;)
0468デフォルトの名無しさんNGNG
231 >判決文にISP責任法への配慮とかいうちゃんちゃらおかしい文面が書いてなけりゃ

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

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

http://courtdomino2.courts.go.jp/kshanrei.nsf/$DefaultView/2075F93E3210745849256BED0030F3EF?OpenDocument
0469デフォルトの名無しさんNGNG
IP取るようになったら些細なことでも訴えられるかもな。
ここまで話題性の在るサイトだし。
IP取ってるんだから今までは『訴えても意味無い』って諦めてた
人たちも訴えるようになるかもね。
基本的に訴えられるのは書き込みした人だろうけど、
その様な場所を提供したって事実に変わりは無いから
今まで以上に2chも訴えられるかも…。

推論スマソ
0470デフォルトの名無しさんNGNG
削除前の手続きの話なんで、発信者の責任の話とはまぜないで欲しいが。
0471デフォルトの名無しさんNGNG
辞書登録してみた⇒夜勤さん!! ヘ(^^ヘ)(ノ^^)ノ
0472デフォルトの名無しさんNGNG
3 6 1 4 2 5 をクイックソートで整列させるにはどうしたらいいですか?
0473山崎渉NGNG
(^^)
0474デフォルトの名無しさんNGNG
今GNUパスカルを使って勉強しているんですが
freeパスカルとの違いは何かあるんですか?
使える文法が違う、みたいな
0475デフォルトの名無しさんNGNG
405 名前:心得をよく読みましょう 投稿日:02/12/31 11:04 ID:ADTGAx9x
はぁぁぁ。あと、1週間以内で生理・・・。

何事にもむかついてたまらないっ!
生理前って、ブルーになったり、いらいらしたり。。。
ほんと勘弁してって感じ。
0476山崎渉NGNG
(^^)
0477デフォルトの名無しさんNGNG
constって何なんですか?
0478デフォルトの名無しさんNGNG
たしかサリエヌの友人だったと思います
0479デフォルトの名無しさんNGNG
>>477

const {定数}
BUF_SIZE = 32768;{ Buffer Size = 32768 (8000h) }

Ver: string[3] = '1.0';

定数の事かと…

var {変数}
argc: integer;
argv: string;
i,k,l: integer;
0480山崎渉NGNG
(^^)
0481477NGNG
>>479
すいません
なかなか書き込むひまがありませんでした
レスありがとうございました
0482デフォルトの名無しさんNGNG
http://www.makie.com/ja/makitips/pascalfun.html
Mac用だがここで紹介されているThinkPascalってどうよ?
少しやってみたが、英版なのでエディタで日本語が表示できん・・・
0483デフォルトの名無しさんNGNG
CarbonLibは使えるんだろうか
0484デフォルトの名無しさんNGNG
上のリンク見る限りでは無理そうだね。
別途コード戦士が必要みたい。
でもそれだったら最初からコード戦士でやった方が良い罠。
0485デフォルトの名無しさんNGNG
>>484
これでいけるのではないでしょうか。

Carbonized Port of THINK Pascal TCL
http://pascal-central.com/carbon-tcl.html
0486デフォルトの名無しさんNGNG
test
0487デフォルトの名無しさんNGNG
>>298が全然わかんねぇ…(´д`;)
0488デフォルトの名無しさんNGNG
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);
0489デフォルトの名無しさんNGNG
おお、神!(´д`;)アリガ�d
0490デフォルトの名無しさんNGNG
Pascalって実用性無いのに勉強しても平気でしょうか?
0491デフォルトの名無しさんNGNG
えーと…、まあ、これからやるならやめときなさい。
Eiffelをお薦めしよう。
0492レイホウ@6歳NGNG
>>490
C++を勉強しなさい
C#はだめだぞ

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

えいめ〜ん
0493デフォルトの名無しさんNGNG
はげしくホッシュ
0494デフォルトの名無しさんNGNG
>>490
Pascalを勉強する価値がないとしたらそれは
実用的では無いからではなく時代遅れだから。
昔は教育用言語として教えられてはいたけど
今ではJavaとSchemeに取って代わられたよ。
0495デフォルトの名無しさんNGNG
と、一ヶ月前のレスに混じれ酢してみました。
0496デフォルトの名無しさんNGNG
10年程前にPC-DOS+Turbo Pascal 7で作ったプログラムを動かしたいのですが、困ったことに最近のパソコンはEMSメモリが使えないものが多いのです。
新型パソコンでEMSメモリ使用可能なものがあったら教えてください。
0497デフォルトの名無しさんNGNG
DOS 上で動かすか、エミュレータ上で動かせば。
0498デフォルトの名無しさんNGNG
>>496
DOS5.0の時とかXMSをEMM386でEMSに化けさせてたと記憶してるけど。
0499デフォルトの名無しさんNGNG
496です。
497さん498さんレスありがとうございます。

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

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



0500デフォルトの名無しさんNGNG
>>499
間を取ってWindows3.1とかどうだ?

って言うかVMWareでも使った方が楽ちんな予感。
0501デフォルトの名無しさんNGNG
EMS だけの話なら EMS をエミュればOK!
昔やった記憶があるが具体的には忘れた。
ただ楽するなら、500(おめ!)さんの
言うようにVMWareでも使った方がいい。
0502デフォルトの名無しさんNGNG
現在Pascal勉強中の初心者です。

Pascalって実用性が無いんですか?
CGIをやるのに適してるって聞いたんだけど・・・
0503デフォルトの名無しさんNGNG
趣味でやるぶんにはかまわないでしょ。
0504デフォルトの名無しさんNGNG
実用性はあるが、CGIってのは多分Perlと混同してる(w

Pure Pascalじゃなくて有償版Delphi/Kylixなら高機能なCGIも作れないでもない
0505デフォルトの名無しさんNGNG
>Pure Pascalじゃなくて有償版Delphi/Kylixなら高機能なCGIも作れないでもない

アホがいます。
0506デフォルトの名無しさんNGNG
WebSnapとかIntraWebとか、まあ知らないなら知らないでいいけどさ
0507デフォルトの名無しさんNGNG
>>506
何でもかんでもライブラリがないと何もできないかわいそうな人がいます。
0508ななしへたぐらま ◆XcB18Bks.Y NGNG
こういう書き込みの後でなんですが,
Cのscanfに相当する機能を実現する関するのライブラリって
どこかにありませんでしょうか.
以前自作したのですが作りが下手なのか処理が重すぎて….
テキスト解析はちゃんと本を読んで勉強しないとダメかな.
0509デフォルトの名無しさんNGNG
>>508
> Cのscanfに相当する機能を実現する関するのライブラリって
> どこかにありませんでしょうか.

scanf のソース見てポーティングすればいいとおもうけど。
可変引数の扱いをどうするかが問題かと思うが。
0510デフォルトの名無しさんNGNG
>>509
オープン配列とかで何とかならない?
0511山崎渉NGNG
(^^)
0512ななしへたぐらま ◆XcB18Bks.Y NGNG
>>509-510
レスが遅くなってごめんなさい….

scanfのソースは探してみます.ありがとうございます.
ちなみに可変引数は前に作ったときは配列型で対応していました.
var指定が出来なかったのでポインタを渡す仕様にしていました.
0513デフォルトの名無しさんNGNG
JIS PASCAL水準1準拠の処理系ってありませんか。
またpacked array[0..7] of booleanを1バイトに詰め込んでくれたり、set of 0..256が書けたりするのも…。
どれも実装が面倒なんだろうか…
0514bloomNGNG
http://homepage.mac.com/ayaya16/
0515デフォルトの名無しさんNGNG
そういえば規格では set of Charが集合の最大サイズでしたっけ。
ってことはCharがWideCharになるDelphi.NETではset of 0..65535が可能に!?
0516513NGNG
そうかset of charが集合の最大サイズなのか…
JIS規格書が会社なんで確認できないな。
基底型は任意の順序型だと思っていた。
0517デフォルトの名無しさんNGNG
>>502
実用性がないとかまことしやかに言われていますが、そんなことはないです。
CGI は、言語が標準入力と標準出力をサポートしていれば、どんな言語でも可能です。
0518デフォルトの名無しさんNGNG
http://www.gnu.org/brave-gnu-world/issue-12.ja.html より:

GNU Pascal は Borland Pascal 7.0 という「標準のようなもの
(quasi-standard)」だけでなく、ISO 7185 Pascal Standard を完全に
サポートしている唯一のコンパイラです。
0519デフォルトの名無しさんNGNG
>>517
適用範囲を限定すればJIS PASCALでも実用性が見いだせるということですね
逆に何らかの拡張を施さないと適用範囲は広がらないと。
0520513.NGNG
>>518
ありがとう。
危うく自前でコンパイラ作りそうだったよ。
GNU PASCAL検討してみます。
0521デフォルトの名無しさんNGNG
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。
0522デフォルトの名無しさんNGNG
>>519
JIS Pascal と厳密にやると、分割コンパイルができないなど不便はありますが、
JIS/ISO 互換でやりたいなら、Turbo Pascal や Delphi のようなものを使って、
分割コンパイルは拡張機能を利用し、コード自体は、できる限り JIS/ISO 標準で
書くということなら、ISO C 言語程度の実用性は出てきます。
Turbo Pascal や Delphi が完全に ISO/JIS に準拠しているわけではありませんが、
かなり標準 Pascal の文法をサポートしています。
この本は、Turbo Pascal や JIS/ISO 標準 Pascal その他の文法に差異があるところに
注釈が入っていてよい本です。

演習PASCALとその応用
http://www.saiensu.co.jp/books-htm/ISBN4-7819-0507-2.htm
0523デフォルトの名無しさんNGNG
>>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 でも動きます。
0524動画直リンNGNG
http://homepage.mac.com/hitomi18/
0525デフォルトの名無しさんNGNG
こうしてみるとDelphiって基礎部分が貧弱ですねぇ。
確か標準ってオープン配列で

procedure A(const B: array[L..H] of Integer);

なんて構文も使えませんでしたっけ?
0526513.NGNG
>>521
ありがとう
最近の処理系は制限が少しずつ取れてきてるのですね
packed set of -maxint..maxintはどうだろう。
コンパイル出来ても実行は出来なくて当然だとは思うが…
CのビットフィールドとPASCALの詰めあり構造型の性質がそっくりなのは偶然?
0527デフォルトの名無しさんNGNG
あ、でも packed array[0..7] of boolean は 2 バイトになりました。0..15 まで
2 バイトで、0..31 は 4 バイト。これじゃだめですかね。
オプション指定もあるのかもしれませんが。
0528デフォルトの名無しさんNGNG
>>527
GNU Pascal でのことです。
0529デフォルトの名無しさんNGNG
GNU Pascal マニュアルでつ。
http://www.gnu-pascal.de/gpc/index.html
0530513.NGNG
>>527
多分それは各要素に不定値を表すビットが含まれているんじゃないかと。
0531デフォルトの名無しさんNGNG
GNU Pascal で c : set of -10..65535; とおりました。
0532デフォルトの名無しさんNGNG
>>530
単に2byte単位でしか割り当て出来ないだけのような
0533513.NGNG
>>530
そういわれればそうだな。はやとちりでした。
実行環境に適切な境界迄余分なバイトが詰められるのは構わないです。
0534デフォルトの名無しさんNGNG
http://www.k-514.com/
0535デフォルトの名無しさんNGNG
GNU Pascal で set -65535..65535 は gpc --standard-pascal --setlimit=131071 でとおりました。
0536521NGNG
訂正;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
0537デフォルトの名無しさんNGNG
>>536
エラトステネスのふるいって、集合型でどうやるんですか?
0 から n までの配列を用意して、素数なら true、合成数なら false にしていく、
というものだと思うんですが。
0538別人NGNG
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配列に集合演算の能力持たせてるし。
0539デフォルトの名無しさんNGNG
やってることは配列を使うのと大差ない。
はじめに[2,3,4,5,6..maxint]という集合を用意しておいて
nの倍数を集合から除去していくだけ。
0540デフォルトの名無しさんNGNG
エラトステネスのふるい、集合型バージョン。こんなんでできました。

コンパイル・コマンド: 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.
0541デフォルトの名無しさんNGNG
空白が崩れた。スマソ。
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.
0542デフォルトの名無しさんNGNG
>>541
&ensp;の嵐で何が書かれているのかさっぱりわからん。
0543デフォルトの名無しさんNGNG
>>542
あれ、そうですか。私 Opera なんですけど、大丈夫です。
ブラウザ依存なんでしょうか。すみません。
0544デフォルトの名無しさんNGNG
>>543
IE 6 では大丈夫です。
0545デフォルトの名無しさんNGNG
そうそう、>>541 の結果ですけれど、最後の 3 つは、65497、65519、65521 でした。
0546513NGNG
型T=set of 0..maxintの各元表記全体からmaxint+1ビットの符号無し整数への1対1写像は定義できるよな?
もし定義できるのならinteger型の範囲は遙かに越えてしまうな
で、更に(有限)整数上の加法と一致するように型T上の加法をうまく定義して…(略)
普通はintegerの配列で実現する多倍長整数とは一風変わった整数(環)が出来そう
これをリストに持たせてもっと大きな数に対する〜のふるいが…
工夫しないとメモリ不足になりそうだな
或いはset of -maxint..maxintを基数2の固定小数点表現とみなすのも面白そうだ
体調が回復したらやってみよう
0547デフォルトの名無しさんNGNG
We Love Pascal.
0548山崎渉NGNG
━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―
0549山崎渉NGNG
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
0550デフォルトの名無しさんNGNG
http://community.borland.com/museum/ のTP5.5のとこからTurboPascalのOOP入門が落とせる。
AppleのObject Pascalレポートの名前が書いてあるので、
やっぱObjectPascal="object"型のあるPascal、でいいらしい。

だからどうした、と言われると困るが
0551デフォルトの名無しさんNGNG
良スレの予感
0552デフォルトの名無しさんNGNG
その教科書のどこかにある list 型構造体の定義を見直してみてくれ。
0553デフォルトの名無しさんNGNG
Lazarusの落とし方がわからん...
0554デフォルトの名無しさんNGNG
初心者から質問です

10人分の学生の成績データを打ち込み、
次に10点区切りでヒストグラムを出力するプログラムを書こうとしています。
現在ヒストグラムの作り方がちとわかりません。どんな形のヒストグラムでもいいのでプログラムソースを教えてもらえないでしょうか?
0555デフォルトの名無しさんNGNG
if (点数 => 0) and (点数 < 10) then ヒストグラム[1] := ヒストグラム[1] + 1;
if (点数 => 10) and (点数 < 20) then ヒストグラム[2] := ヒストグラム[2] + 1;
...

と並べて書くとか。
0556デフォルトの名無しさんNGNG
>>554
学校の課題だろうと思うんで、ここでいきなり答えを書くのはちょっとね。
自分でどこまでやったん?
0557デフォルトの名無しさんNGNG
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.
0558デフォルトの名無しさんNGNG
まず、「ヒストグラム」とは何か、わかっているか。
プログラムの流れとしては
(1)データの入力
(2)集計
(3)ヒストグラムの出力
に分かれるわけだが。
0559デフォルトの名無しさんNGNG
スマソ>556
0560デフォルトの名無しさんNGNG
集合型はフラグくらいにしか使ったことなかったけど
なかなかエレガントな使い方があるものだね
感心しますた
0561デフォルトの名無しさんNGNG
学校の課題で『ブラックジャック』作ることになったんですが
どなたか、教えていただけませんか。
0562デフォルトの名無しさんNGNG
>561
取り敢えず「手塚治虫」で検索しとけ。
0563デフォルトの名無しさんNGNG
>>561
カードゲームなら実際のカードを使って一人遊びすれば必要な構造が見えてくるぞ。
0564デフォルトの名無しさんNGNG
一人遊び? ハァハァ
0565名無し@沢村NGNG
>>562

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

http://jbbs.shitaraba.com/computer/7294/
0566デフォルトの名無しさんNGNG
A  U  T  H  O  R   D  A  T  A

本田 守さん

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

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

ハンドル
Mr.あねさん

ホームページ
http://www2.neweb.ne.jp/wd/wonder/
http://hp.vector.co.jp/authors/VA015412/

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

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

S  O  F  T  W  A  R  E

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

Windows95/98/Me/アミューズメント
●KIKU おど〜る
 音楽CDをかけるとキャラクターが踊ります
0567デフォルトの名無しさんNGNG
集合型にシフト演算子があったらなぁ
0568デフォルトの名無しさんNGNG
それは集合なのか?
0569デフォルトの名無しさんNGNG
ビットの集合です
0570ななしへたぐらま ◆XcB18Bks.Y NGNG
>>562
あの漫画の題名はトランプのそれとは無関係だそうです.

…じゃなくて,どうしてプログラミングを教えている学校の先生は
生徒の理解度を無視してこういう課題を出すのか理解に苦しみます.
とりあえず>561はじゃんけんゲームは作れますか?
0571561NGNG
>570
もちろん作れません
何かヒントでもいいんでおねがいします。
0572デフォルトの名無しさんNGNG
>>571
ゲームのルールをよく吟味して場にある有形、無形のものを列挙してみんさい
0573デフォルトの名無しさんNGNG
カードをとってくる関数と
勝敗を判定する関数と
手に持ったカードを表示する関数と
入力を受け付けてカードをとるか終了するか決める関数を書けばいい。
0574デフォルトの名無しさんNGNG
データ構造決めなきゃ片手落ち
0575デフォルトの名無しさんNGNG
綺麗なお姉さんのパイパンおま○こ生写真を発見!
http://plaza16.mbn.or.jp/~satchel/omanko_marumie/

これはタマラン…(´Д`;)ハァハァ
0576561NGNG
>>573
関数が使っている教科書にあまり載ってないんで
何かいいサイトあったら教えてください
0577ななしへたぐらま ◆XcB18Bks.Y NGNG
>>571
簡単なゲームプログラムを解説したサイトか入門書を見つけてみて.

やりたい処理をプログラムというカタチにするというのは一番基本的な能力であり,
一つや二つのヒントで解決する問題ではありません.
でもこれさえクリアすればプログラミングは半分マスターしたようなものです.
0578デフォルトの名無しさんNGNG
ルール見たけど結構複雑。ま、そこまで要求してないのかもしれんが。
「無限デック使ってます」って言えばカードの残り考えなくてもすむかも。
(ハートのAが10枚出てきても知らんふり。)
0579山崎 渉NGNG

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
0580デフォルトの名無しさんNGNG
良スレ保守
0581デフォルトの名無しさんNGNG
Pascalの集合型と混同してるのかな。このプログラムは集合型は関係ないよ。
0582デフォルトの名無しさんNGNG
どのプログラム?
0583デフォルトの名無しさんNGNG
http://grape.astron.s.u-tokyo.ac.jp/~makino/kougi/jousho/kougi-98Ww/note12.html
ここの練習1なんですが、どのように回答するのがスマートなんでしょうか。
学生番号用のソート手続きをもうひとつ加えて場合分けするのはあまりよくないような気がするんですが、
他に思い浮かばないんです。
0584デフォルトの名無しさんNGNG
比較用関数を複数作って関数ポインタで切り替えて使う。
0585デフォルトの名無しさんNGNG
ソート用の手続きをつくる。
引数は点数でソートするか学生番号でソートするかを示す。

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

あんまり効率よくなさそうだけど。
0586デフォルトの名無しさんNGNG
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;
0587デフォルトの名無しさんNGNG
iアプリ作りたいんですけどどーしてよいか・・
作成講座ページ紹介してください。
あと質問なんですが、これだけでも作れますか?ブロック崩し(505対応版)
win98(HSPダウンロード済み)
0588デフォルトの名無しさんNGNG
iアプリはi-mode Javaでしょ。
HSPじゃ無理。

DoCoMo Net - 製品・サービス - i-mode - iアプリコンテンツの作成について
http://www.nttdocomo.co.jp/p_s/imode/java/index.html
0589583NGNG
なるほど。ありがとうございます。
>>585と>>586の手法は同じではないですよね。
かなり参考になりました。

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



0590デフォルトの名無しさんNGNG
procedure sort(x: ...);
...
if hoge(student[i], x) < hoge(student[j], x) then begin
って書いて、hogeも書く。
0591デフォルトの名無しさんNGNG
>>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で動作確認済み
0592デフォルトの名無しさんNGNG
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文忘れてしまったよ)
0593デフォルトの名無しさんNGNG
なるほどなるほど。
かなりよくわかりました!

ここは本当にすごい人が来るんですね。
驚きました。
0594デフォルトの名無しさんNGNG
すごくはないよ。基本的なことだし。

動的な関数を作りたいなと思って
Pascalの上で実現してしまったとかならすごいと思うけど。
0595デフォルトの名無しさんNGNG
Lazarusの落とし方知ってるひといますか?
0596デフォルトの名無しさんNGNG
「ハノイの塔」とやらの問題解決プログラムを教えて下さい。
本気で何がなにやら・・・。
0597デフォルトの名無しさんNGNG
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;
0598596NGNG
どうもありがとうございます。
なんだかエラーが沢山出るんですけど、貼り付けるだけじゃ駄目なのでしょうか。。。
厨ですみません。
0599デフォルトの名無しさんNGNG
hogeと
.... from から to へ一枚写す
のところをきちんとかかないとダメ。

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

Pascalの細かいところ忘れたんで正しいかどうか解らないけど。
再帰するにはforwardとか要るような気もするな。
0600山崎 渉NGNG
(^^)
0601山崎 渉NGNG
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
0602デフォルトの名無しさんNGNG
たまにはageて質問を。

標準的なpascalで、basicでいう
cls;
locate(10,10);
print "OK?";
みたいなのは出来ますか?
0603デフォルトの名無しさんNGNG
 page(output);10個のwriteln(output);10個のwrite(output,' ');
っていうのは後戻りできない上に上書きしてしまうから無理だな。
cursesみたいに1画面分の2次元配列を取ろうかともおもたけど、画面の大きさを取る方法はJIS-PASCALにはない。
処理系依存の機能を仮定しないと無理っぽい。
0604デフォルトの名無しさんNGNG
無理ですか。
あ、そっか。画面の大きさが分からないから、
1ページ分書き直してスクロールアップ
するのも無理だ。うーむ。
0605デフォルトの名無しさんNGNG
プログラムパラメタに画面の大きさを渡してもらえばいいんだった。
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;
ってどう?
0606デフォルトの名無しさんNGNG
そういう手もあるか。
でも、画面の大きさを取得するのに、処理系毎の
工夫が必要。つーか、無理な場合もありそうな予感。

それよりも、独自に拡張して、cls, locateなどを
処理系毎に作るのが良いような気がしてきた。
・・・でも、それやってると、キリがないし、
実力の範囲を超えそうです。
0607デフォルトの名無しさんNGNG
画面制御ライブラリを1つだけ用意する。
実体は各処理系に移植されたC言語のcursesライブラリを呼び出すだけ。
外部ライブラリの実装方法に規格上、規定はないのでやりたい放題。
cursesが移植されていない処理系はライブラリの仕様を公開してユーザーに任す。
というのは駄目?
0608デフォルトの名無しさんNGNG
標準的なPascalの文字変数ってstring[255]ですよね?
で、var s:string[255]; という状態で、
1行ずつreadln(f,s); で読んでいくとして。
もしも1行の長さが255バイト以上だったら、
どうなるんでしょう。

アホな質問ですみません。
0609デフォルトの名無しさんNGNG
後ろの方がカットされます。
0610デフォルトの名無しさんNGNG
1行が255バイト以上の行を含むテキストファイルの読み込みは、
どうしたら良いのでしょう?
0611デフォルトの名無しさんNGNG
DelphiでもFreePascalでも、大抵は長い文字列を持ってるんじゃないかな…。
無いならChar単位で読むとか。
0612デフォルトの名無しさんNGNG
初心者質問ですいません。
Dev-pascalはどうやってアンインストールするのでしょうか?
リードミーに載ってないんですが・・・。
0613デフォルトの名無しさんNGNG
>>610

var
 f: text;
 s: string[255];
begin
 while not eoln(f) do
  read(f, s);
 readln(f);
end
0614610NGNG
>>611
Delphiの無限とも言える長さの文字列は、
便利で良いですねぇ。しかも、CommaTextで
自動的にCSVを切り分けてくれるし。(日本語対応で)

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

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

ひょっとして、アルゴリズムって、公開されてる?
0615 ◆R/rLuLKeEI NGNG
>>614
>ひょっとして、アルゴリズムって、公開されてる?

理論的には有限オートマトン、正規表現、字句解析、構文解析などを検索すれば、いいんじゃないかな。
CSV形式をうまく構文(文法)に書き下す事が出来れば、ある程度形式的にプログラムに落す方法があるよ。
0616デフォルトの名無しさんNGNG
>>614
C#のでよければ。なんとなくは分かると思うよ。
http://onigiri.s3.xrea.com:8080/csharp/index.php?%5B%5BTips%2FCVS%A4%F2%CA%AC%B3%E4%A4%B9%A4%EB%5D%5D
0617 ◆R/rLuLKeEI NGNG
>>616
そだね、CSVごときに有限オートマトンとか大袈裟だったな。
で、これは日本語対応?
0618デフォルトの名無しさんNGNG
C#に日本語非対応なコードなど無い。
0619デフォルトの名無しさんNGNG
無知の知ったか。
0620デフォルトの名無しさんNGNG
>>602
ANSIエスケープシーケンスを使う
0621610NGNG
>>620
おおっ!忘れていたが、何か画期的なアイデアに思える。(w

と、思ったが、調べてみたらこう書いてあった。
>どの文字列をエスケープシークエンスとして解釈するかは
>ソフトウェアによって千差万別であり、統一された規格の
>ようなものが存在するわけではない。
(T^T)

>>615,616
ありがとうございます。それをきっかけに調べてみます。
0622 ◆R/rLuLKeEI NGNG
>どの文字列をエスケープシークエンスとして解釈するかは
>ソフトウェアによって千差万別であり、統一された規格の
>ようなものが存在するわけではない。
なのに、「ANSI【アメリカ規格協会】」を冠しているのが不思議。
0623620NGNG
「ANSIエスケープシーケンス」は>>602へのコメントだよ。
0x1b(ESC)で始まる文字列をコンソールに送ることで
画面、コンソールの位置、文字の色等を制御するもの。
0624デフォルトの名無しさんNGNG
>>623
s/コンソールの位置/カーソルの位置/
0625610NGNG
一応、CSVを切り分けられるコードは書けた。
C#の>616のコードは読めなかったので、
適当に考えてやってみた。だけど、""→"に
するのとか、漢字コードのチェックとか
やってないし、変なCSVを回避するのも
できないし、拡張性が無いコードになって
しまっている。
0626デフォルトの名無しさんNGNG
Delphiのコンパイラ使おうぜ。
0627デフォルトの名無しさんNGNG
>>622
ANSIエスケープシーケンスも知らないコテハンか。
時代だな。
0628 ◆R/rLuLKeEI NGNG
>>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より)。

と、慌てて調べても後の祭。
0629610NGNG
Cのソースを見ながら、CSV切り分け書いてるんだけど。
Cだとbreak,continueとかで、loopを跳んだり、
文をキャンセルするので、全然参考にならん。
0630デフォルトの名無しさんNGNG
同じように書けば良いじゃん。
0631610NGNG
無理じゃん。
break, continueが使えるか使えないかで、全然変わるよ。

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

ひょっとして、DelphiやFreePascalにあるSystem.Breakは、独自拡張!?
0633610NGNG
>>632
知らなかったのか低能(ワラ
0634 ◆R/rLuLKeEI NGNG
>>631
>無理じゃん。
>break, continueが使えるか使えないかで、全然変わるよ。
break文、continue文はラベル無しgoto文といわれるように、これらは等価なラベル有りgoto文に変換可能です。


>>632
DelphiやFreePascalのBreak、Continueが手続きであることの方が吃驚!
知らなかった私も低脳かえ?
0635610NGNG
>633は別人だが。

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

ちなみに、うちのはTHINK Pascal。
0636 ◆R/rLuLKeEI NGNG
>>635
PASCALで大域ジャンプ以外にgotoを使うのは邪道っぽい。

ちなみに、うちのはGNU Pascal。
ただし、JIS-PASCAL(X3008-1990)の範囲内で考えている。
0637610NGNG
macの場合、NewHandleやNewPointerでメモリーを
確保した場合、メモリー確保に失敗したら
OSErrで分かるんだけど。
標準pascalのnewでメモリー確保に失敗したら
どうなるの?というか、その判別方法は?
0638 ◆R/rLuLKeEI NGNG
>>637
>標準pascalのnewでメモリー確保に失敗したら
>どうなるの?というか、その判別方法は?

JIS-PASCAL(X3008-1990)には何の記述もない。
必ず成功するかのようにも読める。
というわけで、その判別方法はない。
1.2 規定外事項
 (1) 特定のデータ処理システム又は処理系が処理できるプログラム及び
   データの大きさ又は複雑さの限界並びにそれらの限界を超えた場合の措置。
0639デフォルトの名無しさんNGNG
>635
・continue はループの先頭に戻る
・breakはループを脱出
でいいの?
だったらTHINK Pascalでは
・ループ(for,while,repeat)の先頭に戻る → cycle
・ループ脱出 → leave
だけど。
他に関数・手続きからの脱出 → exit(関数/手続き名)
というのもある。入れ子になった関数/手続きから一気に抜ける事も出来る。
0640 ◆R/rLuLKeEI NGNG
・continue はループの最後に飛びます(C++第2版リファレンスマニュアルr.6.6.2)
0641610NGNG
>>639
ほんとだ・・・あった・・・。サンクス
標準Pascalの本を見ながらやってたので、気づかなかった。
THINK Pacal入門の後ろの方に、ちらっと載ってた。

あとこれでCとの違いといえば、case文の挙動が
ちょっと違う事くらいか。
0642デフォルトの名無しさんNGNG
例えば、'tarou'と入力させて、
tarouという名前の変数か、
tarouという添え字の配列を作って、
tarou[rika]:=100;
とか代入するには、どうすればいい?
0643デフォルトの名無しさんNGNG
できません。
0644デフォルトの名無しさんNGNG
じゃあ、tensuuは固定の名前で、
name:='tarou';
kamoku:='rika'
tensuu[name,kamoku]:=100;
kamoku:='eigo'
tensuu[name,kamoku]:=90;
とかは?
0645デフォルトの名無しさんNGNG
連想配列かあ。純粋なPascalじゃ無理かもね。
拡張構文使っていいならやりようはあるけど。
0646デフォルトの名無しさんNGNG
そうそう。連想配列。無理か・・・。
似たようなことは出来ない?

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

いっそ、独自のスクリプト言語を
Pascalで作る方法を考えた方がいいか・・・。
0647デフォルトの名無しさんNGNG
連想配列そのものじゃなくても
type Tensuu = record Name, Kamoku: string; Tensuu: Integer end; の配列かリンクリストでいいのでは?
SetTensuu(list, name, kamoku, 90); みたいに使えるアクセサ関数を用意しとけば不便ってこともないでしょ。

Delphiなら、配列プロパティとかカスタムバリアントで構文上連想配列作れるけど
0648デフォルトの名無しさんNGNG
ここは「Pascal の初心者」なので、Delphi 等の拡張 Pascal は外すべきでは?

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

連想配列を実現するコードを自分で書くことになります。
それを使って
647 さんの
>Delphiなら、配列プロパティとかカスタムバリアントで構文上連想配列作れるけど
ってことを実現することができるでしょう。
0649デフォルトの名無しさんNGNG
Delphiで言うところの動的配列も、標準では無いですよね?
var hairetu: array [0..maxNum] of integer;
の maxNumが変数であるのは許されないもんね。
まあ、この程度ならリストで代用できるから良いけど。

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

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

それと、連想配列って英語ではなんて言うの?
0650デフォルトの名無しさんNGNG
あそしえーしょんあれい。
0651デフォルトの名無しさんNGNG
久しぶりにTHINK Pascalのマニュアルを引っぱり出したが。
associtation arrayは載ってない。当然か・・・。

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

・・・って、自分にできるか?(^^;
もっと偉い人が作った奴、どっかに落ちてないかなぁ。
0652デフォルトの名無しさんNGNG
PNL Librariesに、連想配列のコードがあった。
だけど、これはMacの、しかもコードウォーリアー用みたい。
少し書き換えればTHINK Pascalでもいけるみたいだけど。
スレ違いになりそうです。失礼しました。
0653デフォルトの名無しさんNGNG
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

のように一致したキーを探すことになる。
毎回、全数検査すると遅くなるからハッシュを使うとか、速度向上の手法はいくらでもあるけど、本質は検索だ
0654652NGNG
まだソースをざっと見ている段階ですけど、
結構高度なことをやっている様子。
追加、削除、検索など、一通りのルーチンは
揃っているみたい。使い方を解析せねば。
0655レイホウ@6歳NGNG
処理速度を犠牲にしてもいいなら
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としては↑間違ってる

えいめ〜ん
0656デフォルトの名無しさんNGNG
3つの整数を読み込み、最小値と最大値を出力するプログラムを作りなさい。
0657デフォルトの名無しさんNGNG
>656
宿題?
0658デフォルトの名無しさんNGNG
最初に
 整数を三つ読み込む。
次に
 最小値を見つける。そして出力。
最後に
 最大値を見つけ、それを出力。

簡単でしょ
0659デフォルトの名無しさんNGNG
こういうのをわざと、ObjectPascal使ってやったりしてな。
0660デフォルトの名無しさんNGNG
あ、そろそろ後期の授業が始まったわけか。
0661でたらめNGNG
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.
0662デフォルトの名無しさんNGNG
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.
0663662NGNG
あ、sgn に if文を使っているんだっけ。
0664でたらめNGNG
function sgn (si: integer): integer;
begin
case si of
0:
si := 0;
otherwise
begin
sgn := si div abs(si);
end;
end;
end;
0665でたらめNGNG
あ。begin, end 一個余分だ。

function sgn (si: integer): integer;
begin
case si of
0:
si := 0;
otherwise
sgn := si div abs(si);
end;
end;
0666でたらめNGNG
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.
0667662NGNG
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.
0668でたらめNGNG
>>667
発想がすごい!
けど、うちの環境(THINK Pascal)だと、
2行目が通らないっす・・・
0669622NGNG
>>668
あ、関数型(手続き型の方が分かりが良いかな)って
標準Pascal仕様じゃなかったんですね。ちなみにDelphi
では通りました。
0670でたらめNGNG
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.
0671デフォルトの名無しさんNGNG
>>656
読み込んでソートして一番上と一番下を見る
0672662NGNG
>>670
あ、なるほど。2変数のやつをもう一度繰り返せば3変数
に対応出来ますね。私は「一度に3変数に対応出来ない
か」と考えていました。
0673でたらめNGNG
>>672
でもこれって、>667の
>writeln('min=', fmin(fmin(a, b), c));
>writeln('max=', fmax(fmax(a, b), c));
の派生みたいな物ですよ。
ただ、公式にあてはめただけです。
0674でたらめNGNG
他にも、
const
maxint = 32767;
minint = -32768;
var
index: array[minint..maxint] of boolean;
を使う方法も考えたけど、
メモリーが足りない(?)とかで
配列が確保できずに断念したっス。
0675662NGNG
>>673
2変数での公式と>>667のやつを組み合わせることを
思いつかなかったんです。思いついてさえいたら、先
に書いていたのに...
0676デフォルトの名無しさんNGNG
質問いいですか?
一クラス分の身長を実数型で入力し、最高と最低を求めるプログラムを作成せよ。
さらに示された入力データでトレース表を書きなさい。
(A)最初に人数を入力し、人数分の処理をする場合(for)
(B)身長に0が入力されたら、終了する場合(while)

実行結果例
人数 制御変数 身長 最高 最低
6     1    178
    2    165       165.0
   3    197    197.0
   4    168
    5    175
   6    183

こんな問題です。
特に、入力された人数分を変数に入れる方法と、トレース表に出力する方法が分かりません。
0677デフォルトの名無しさんNGNG
>>676
小学校の宿題か?
0678662NGNG
>>676
配列とか知っているか?

それとなんでその問題で「実数型」にする必要があるんだ?
実数型だと比較が難しいぞ。
0679デフォルトの名無しさんNGNG
>>678
問題が実数型で入力せよとなっているので・・・。
配列はあやふやです・・・。
0680でたらめNGNG
3つの最大・最小の次は、この課題ですか。ふふーん
じゃあ、どうしよっかなー
0681でたらめNGNG
(A)みたいなのは、BasicだとDIM文とかで
配列を宣言すれば無駄がないけど、Pascal
はできないもんね。
(B)も(A)もそうだけど、人数の最大が決まっ
てるか決まってないかで、全然変わるけど。
その辺は、どうなんだろうね?
0682デフォルトの名無しさんNGNG
がんばって考えてみたけどエラーが出ます。どこを改良すればいいですか?

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.
0683でたらめNGNG
>>682
ほとんどできてるじゃん。

>IF sin[i]:=max then
>write(' ',sin[i]);
>IF sin[i]:=min then
>write(' ',sin[i]);
ここ、「:=」じゃなくて「=」だ。
それと、この次に、
writeln;
の1行を入れる必要がある。
0684662NGNG
>>682
実数型を使っていないけど、いいのか?

それとトレース表の人数のあとに改行が入っているけど
それも問題無し?
0685でたらめNGNG
>>684
そやな、ごもっとも。(w
でも、例とは違ってもええんちゃう?
それ言い始めると、「最低」の数字の
表示位置がずれてる気がするけど。
0686でたらめNGNG
ところで。私も詳しく知らないんだが。
実数型って比較が難しいの?
0687662NGNG
>>685
おお、表示位置のずれは気づかなかった。という
ことで、そこも直す必要があるぞ。>>682

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

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

と言うことで私は整数型で実装出来るものは整数
型で実装するようにしています。
0688でたらめNGNG
>>687
そうか。誤差か。普段そこまでシビアな計算って
したことないんで、気にしなかった。
うちも整数型がほとんどです。

今回の場合、まさか身長で小数点以下2桁以上が
必要になることはないので。入力した数値を
×10して整数型で保存・計算。表示の時に
÷10して実数型(例だと下一桁)っぽく
表示するのではあかんのやろか。
この処理、逆に面倒?誤差が大きくなる?
0689662NGNG
>>688
私もその方が良いと思ったので「実数型にする必要があ
るんだ?」と聞いたんだけど... でも「問題が実数型で入力
せよ」という事らしいから、実数型にする必要があるみた
いですね。

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

計算することを考えるのなら、小数点以下2桁くらい取っ
ておいた方が安全かも。
0690でたらめNGNG
実数型で入力し・・・そうか!!やっぱり
入力さえ実数型なら、ええんちゃう?
処理まで実数型とは書いてないもんな。

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

そんなわけで。>682は、課題完了だな。
0691682NGNG
レス有難うございます!!
あとですね、>>676のwhile文のほうがあって身長に0を入力した場合に入力が終わるプログラムなんだけど、
そうすると出力のときに身長に0が出てしまうんですよ。どうすればいいですか?
0692でたらめNGNG
>>691
forとwhileの基本的な違いではないか。
それを考えるのが課題のポイントじゃ。
0693でたらめNGNG
for 1〜2回
 入力 1〜2回繰り返し
戻る

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

で、ええんちゃうか。
そうすると問題は、のっけから0を入力された
場合のエラーセーフだけど。ま、やってみそ。
0694デフォルトの名無しさんNGNG
if文は使ったらいけないのヵ
begin
一つ目を入力;
while i>0 do begin
出力;
入力;
end;
end.
たぶん不合格。
ん?0を「入力した」場合に「入力が」終わる?
0695でたらめNGNG
あ。すまぬ。>693は何か勘違いして書いてるかもしれん。
そか。repeatはuntilで、whileは違うか。
ま、気にするな。(w
0696でたらめNGNG
罪滅ぼしに、ちょっとヒントを。
var next:boolean;
...
next:=true;
while next do
begin
入力
if a=0 then next:=false;
その他のチェック
end;
0697デフォルトの名無しさんNGNG
なんだその変なコード。
0698でたらめNGNG
>>697
まあ、でたらめっちゅー事で。気にするな。
よかったら、すばらしいサンプルを提示して
やってくだされ。
0699デフォルトの名無しさんNGNG
>>696
while true do で if 〜then break すればいいんじゃ?
0700でたらめNGNG
>>699
前にも似たような話があったけど、
標準Pascalではbreakが使えないのよん。
0701でたらめNGNG
と、思って>700を書いたが。私の勘違い?
0702デフォルトの名無しさんNGNG
1周目を必ず通すならrepeat使いなよ。
0703でたらめNGNG
>>702
>676
0704デフォルトの名無しさんNGNG
ちょっくら問題作った奴に山嵐決めてくる。
0705662NGNG
ほんとだ、これは問題を作ったやつがバカ。
repeat - until を使った方が素直に組めるのに。
どうしてもwhileでやらなきゃならないのなら、入力
関数でも作って以下のようにするか...

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

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


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

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

breakが無いのはまだいいけど、
caseのotherwiseも標準にはないの?
これないと辛い。つーか、無理。
THINK Pascalはある。
0707662NGNG
>>706
いや、課題だからこそ変な制約を付けることなく作ら
せるのがよい。まあ、一定の方向に仕向けるためだ
ろうけど、それでプログラミング嫌いになったら教育
の価値無し。

otherwise(Delphiではelse)は無い。と言うかcase
を使う時点で出てくる要素は判っているはずだから、
全て列挙しろと言うことでしょう。otherwiseに入れら
れた処理を「あとで分類し直す」なんて事になったら
結構大変だというのは想像が付きそうだけど。
0708676NGNG
こんな強引な感じになりましたが一応例どおり動きました。
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);
0709676NGNG
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.
0710676 BのほうNGNG
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);
0711676 Bのほう2NGNG
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.
0712でたらめNGNG
あのー、sinの宣言を見ていると、
整数型なんですけど・・・
小数入力しても、小数点以下が
切られてない?
(試してないので分からんけど)
0713デフォルトの名無しさんNGNG
sinってのは正弦みたいでやだな。
0714デフォルトの名無しさんNGNG
右シフトさせるプログラムがどーしても
出来ない・・・・
0715デフォルトの名無しさんNGNG
表示位置のずれはまだ直っていないようだが... あと
ちゃんとコンパイルして実行して動くかどうか確認し
て(もしくは不明点が見つかって)からアップしてくれ。

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


>>714
環境(対象コンパイラ、機種、OS等)の必要情報が
判らないとコメント付けようがないぞ。
0716デフォルトの名無しさんNGNG
>>715
例どうりに動いたと書いてあるよ。
0717デフォルトの名無しさんNGNG
>>715
フリーパスカル CPAD win2K
0718デフォルトの名無しさんNGNG
>>716
とても例どうりに動くとは思えんが、本人がそう言っている
のならそれでいいや。

>>717
確かFreePascalはTurboPascalの構文が使えるんじゃな
かったでしたっけ?それならshrで行けます。下記参考。ち
なみに左シフトはshl。

var
  a, b : byte;

begin
  a := 8;
  b := a shr 1;  (* シフトしたいビット数 *)
  writeln(a, ' ', b);
end.
0719デフォルトの名無しさんNGNG
>>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.
0720デフォルトの名無しさんNGNG
今日配列使って作ったもう一個のヤツ
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.

配列メンドイ
なんか中途半端に理解した。
0721デフォルトの名無しさんNGNG
>>720
0〜15の10進数しか変換できない。
0722718NGNG
>>719
俺、配列使えなんて一言も言ってないんだけど。

何か良く分かんない(理解出来ないやり取りの)
所に来てしまったようなので、落ち着くまでしばら
く黙っていることにする。
0723でたらめNGNG
学校の課題なんでないかい?
配列使え、っていう。
0724718NGNG
>>723
課題は課題で良いんだけど、「他の人に分かって
もらう書き方」ってのがあると思うんだ。特にこうい
う場では。それと「自分で出来るだけ努力する」っ
てのも大事だし。

それをしないでソース垂れ流し(それもちょっと?の)
されるんで、もう私には理解不能。だからこの件
(と思われるもの)には黙ることにしました。
0725でたらめNGNG
ところで。右シフトって何?
2で割ればいいんじゃないの?
0726デフォルトの名無しさんNGNG
>>725
マイナスの値を右シフトと2で割ることをしてみれば、
違いが分かると思う。それと、算術計算とビット操作
はやっぱり別の話だから。
0727でたらめNGNG
マイナスか。それは考えなかった。
でも、ビット操作なんてアセンブラでも使わない
限り必要ないんじゃないかと思うけど。
Cならいざしらず、Pacalでは意味ないよねぇ。
課題じゃしょうがないけど。
0728デフォルトの名無しさんNGNG
>>727
だってグラフィックフォーマットとか通信プロトコルなんかで
「ビットで状態を表す」物って結構多いから、ビット操作がで
きないと辛い場合って結構あるよん。

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

ビット操作はマックならtoolboxにあるので、
THINK Pascalでもコマンド一発。
0730デフォルトの名無しさんNGNG
a<>b<>c みたいなことをやらせるには どうしたらいいのでしょう… 配列を使った課題がT-T
0731デフォルトの名無しさんNGNG
a <> b and a <> c
0732デフォルトの名無しさんNGNG
>>730
a=cでもええのか?

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

そういう意味じゃない?
0733デフォルトの名無しさんNGNG
a <> b and a <> c and b <> c
等しくはならんが気休めにどうぞ。
0734デフォルトの名無しさんNGNG
andの方が優先度高い罠
0735デフォルトの名無しさんNGNG
そもそも、>730の課題は何がさせたいのだ?
aとbとcがいずれも異なる値であることを
確認すればいいの?
にしては、配列を使うって・・・意味不明。
0736デフォルトの名無しさんNGNG
>>735
意味を取ろうとするから意味不明。気にしなければOK。

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

意味が通る訊き方をすれば、それなりに答える気になる
のに。
0737デフォルトの名無しさんNGNG
配列を使ったプログラムの途中にa<>b<>cという判定が必要な部分があるとか
0738デフォルトの名無しさんNGNG
すいませんご教授おねがいします。
画面を再構成させる方法は存在するのでしょうか?
存在するのでしたら教えてください。
学校の宿題を作ってるとき、再構成しないと見栄えが悪いもので…
0739デフォルトの名無しさんNGNG
>>738
再構成ってどんなこと? 宿題と言われてもこっちは何も
分かっていないんだと言うことを理解して、詳しく説明し
てくれないと何の手助けも出来ないんだが。課題の内
容をこと細かく説明する必要は無いんだけど、「どんな
ことをやろうとして、どうなってしまったから、こうしたい」
くらいの説明がないと何とも。

あと、コンパイラ依存? それとも汎用? OSに関わりのあ
る(と思われる)場所は無いのかな?

見栄えを求めるとしたらどのレベル? 事によると宿題の
域を大幅に超えるかもしれないので、どれくらいの事を
したいのか分からないと答え辛いかも。
0740デフォルトの名無しさんNGNG
>>738
まるで
「僕のお小遣いで買いに行ける一番美味しいケーキはどれ?」
っていう質問に答えるようなものだな。
0741738NGNG
すいません、プログラミング初心者なので、
質問の仕方すらよくわかってません(/_<。)
delphi6のコンソールで、文字列がずらずらと繰り返えされ
見難くなるので、画面の文字をいったん全部消去する
方法を教えてもらいたいのですが…

正直どう説明すればいいのかすら分かりません(-_-;)

0742デフォルトの名無しさんNGNG
>>741
Delphi6と言うことはWin32コンソールもしくはDOS窓に
なるのか。OSによって対応は違いますね。

16ビット系(Win95からMEまで)なら「ANSIエスケープ
シーケンス」が使えると思うのですが、32ビット系(NT
から2000,XPまで)はこれが使えないので「いちいちコ
ンソールと文字モードのサポートにあるAPIで制御」す
るか、改行で区切って綺麗に見せて出力するかしか
無いですね。
0743738NGNG
>>742
そうですか…きっぱりあきらめることにします。
初心者の馬鹿な質問に答えて下さいまして本当にありがとうございました
0744デフォルトの名無しさんNGNG
>>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の教科書に出ているコマンドだよ。
0745デフォルトの名無しさんNGNG
>>744
delphiのコンソールじゃ出来ないんじゃない?
0746デフォルトの名無しさんNGNG
>>744
残念ながらBorlandのPascal言語系(Delphiだけで
なくTurboPascalから)はPageはサポートしていな
かったりする。
0747744NGNG
そうなんだ。
0748デフォルトの名無しさんNGNG
全く紛らわしいことしやがって。
0749デフォルトの名無しさんNGNG
TurboPascal風のコンソールユニット

http://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がゼロオリジンなので、互換性を考えれば
ソースをいじったほうがいいかもしれない。
0750749NGNG
とりあえず、簡単なサンプル(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.
0751デフォルトの名無しさんNGNG
n個の値 a[0] , a[1] , ・・・ , a[n-1] が与えられているとき、
a[i]の順位 r を求めるプログラムを書いてください。
ただし、順位=(自分より大きいものの個数+1)です。

また、プログラム中に使用する名前の型、属性、意味内容を明示し、
実際の実行例もお願いします。
0752デフォルトの名無しさんNGNG
順番に調べればいいんじゃない。
x := 1;
for i := 0 to n-1 do
if a[i] > a[r] then x := x + 1;
0753デフォルトの名無しさんNGNG
>また、プログラム中に使用する名前の型、属性、意味内容を明示し、
>実際の実行例もお願いします。

それくらいは自分で考えた方が良いぞ。属性ってそもそも何?
0754デフォルトの名無しさんNGNG
とても素朴な疑問なんだが。

>n個の値 a[0] , a[1] , ・・・ , a[n-1] が与えられているとき

この「与えられているとき」ってのを見る度に悩むんだな。
サンプルをどうしよう?って。
programなら、入力ルーチンを作るか、ファイルから読み込むか、
constで適当な値を作るか。

procedureやfunctionだけ作るとしても、pascalでは配列を
関数には渡せないよね?
それとも、a[0]...っていうグローバル変数があるものと
してもいいけど、それも美しくないし。
0755デフォルトの名無しさんNGNG
>>754
ポインタで渡せば?
0756デフォルトの名無しさんNGNG
>pascalでは配列を関数には渡せないよね?

いや…渡せるけど
procedure A(B: array[C..D] of Integer); みたいな。
Delphiならprocedure A(B: array of Integer); で範囲はLow/Highで取る。
0757デフォルトの名無しさんNGNG
いや、勘違いだったら失礼。

>>756
そのC..Dが変数でもできたっけ?
>>755
ポインタで渡すのが確実か。確かに。
0758デフォルトの名無しさんNGNG
>>754
渡せるぞ。ちゃんと宣言すれば。以下参照。

Type
  TIntArray = array[LO..HI] of integer;
var
  A : TSomeArray;
procedure DoSomething(B : TIntArray);

として(LOとHIは定数で適当に宣言されているとする)、
  DoSomething(A);
とすればちゃんと呼び出せるぞ。


>>756
手続き宣言の場所で直接配列を宣言すると、処理系に
よっては「違う型と見なされて配列を渡せない」事態にな
る可能性があるぞ。これは実装依存らしいから、絶対大
丈夫だとか絶対ダメだとか言えないのが面倒。


>>757
変数はダメです(処理系によっては大丈夫かも)。標準で
は定数しか受け付けません(というか実行時に大きさが
決まる配列自体が使えないはず)。
0759756NGNG
>>758
いや、私が言いたかったのはオープン配列。
規格はよく知らないけど、ものの教科書では
procedure A(B: array[C..D] of Integer);
で、任意の長さの配列を渡せるらしい。C..Dには実引数の添え字範囲が入る、らしい。
(もっとも、対応しているコンパイラは知らないけどね)
追記しているようにTP系(FreePascal/Delphi)では同じ機能はあっても構文が違う。
0760デフォルトの名無しさんNGNG
たぶん、環境に依存しないやり方としては、>758が
正しいと思う。見て、おぼろに思い出した。
だけど、わざわざ型を指定するのって、面倒なんだよね。
0761デフォルトの名無しさんNGNG
>>759
あー、オープン配列は使ったことがなかったので、完全に
忘れていました。書かれて初めて「そういうのがあったっけ
なぁ」という感じ。

私はオープン配列を使うような場面ではTListを使うので使っ
たことがありません。オープン配列を使わなきゃならないよ
うな手続きなんかも書かないし。
0762デフォルトの名無しさんNGNG
Why Pascal is Not My Favorite Programming Language
http://www.lysator.liu.se/c/bwk-on-pascal.html
誰か Why Pascal is My Favorite Programming Language を書いてください。
0763デフォルトの名無しさんNGNG
>>762
いいじゃん、放っておけば。大体用途の違う言語を
比較して「こっちが好きだ」って書いているような人
にろくなのはいないから。

分かっている人は「その言語はそういう用途には向
かない」とか「そういうことを目的として設計された言
語ではない」と書くと思う。
0764デフォルトの名無しさんNGNG
俺はタイプ量が多くなっても
if (hoge)と括弧を書くよりは
if hoge thenと書くほうが好きだ。

好きなところってそこしか思い浮かばなかった。
嫌いなところばっかり浮かんで来る・・・。
0765デフォルトの名無しさんNGNG
部分範囲型、集合型、配列の関係が好きだ…
C系の言語でこれらの概念を持ってるのがサッパリ無いのはどういうことか
0766デフォルトの名無しさんNGNG
ビットで済ましているんだろ。
0767デフォルトの名無しさんNGNG
お願いします

英単語を入力して、そのつづりを逆順にした文字列を作りなさい。
実行例
    英単語は?  beautiful
    逆順にしたつづりは  lufituaeb

できそうだと思ったんだけど挫折・・・
0768デフォルトの名無しさんNGNG
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;

実行してないんで動くかどうかはシラネ
0769デフォルトの名無しさんNGNG
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.

こんな感じ?
0770デフォルトの名無しさんNGNG
回すのは、半分くらいでいいのでは?
0771デフォルトの名無しさんNGNG
あっ、半分になってるよね。スレ汚しすまん。
0772デフォルトの名無しさんNGNG
■フォーマット

xx xx xx xx
-- -- -----
A B C

A... アイテムコード
B... 強化パラメータ ( 9C < 0 < 64 )
C... 使用回数 ( 00 01 < E8 03 < 00 00 )
※00 00 : 無制限
これどういういみでつか??
0773デフォルトの名無しさんNGNG
>>768
funciton ReverseString(S : String) : string;
var i : integer;
begin
  for i := length(S) downto 1 do
    result := concat(result, S[i]);
end;

これで良い気がする。
0774768NGNG
ほぉ。concat関数ですか。知りませんでした。
でも
>function Concat(s1 [, s2,..., sn]: string): string;
>説明
>Concat 関数を使うと,任意の数の文字列を結合できます。各パラメータは文字列型の式です。結果はすべての文字列型パラメータ>の結合です。
>次に示すように,正符号演算子(+)を使っても Concat 関数と同じ結果が得られます。
>S := 'ABC' + 'DEF';
>参考正符号演算子の方が Concat よりも処理が速くなります。
正符号演算子では文字列の加算の「度に」文字列分のメモリの確保と開放が行われてる(と思う)ので
前もってメモリを確保してある>>768のほうが速いと思われます。
(文字列が長くなるに従って差は大きくなると思います。
つまり、
速度を求めるなら>>773氏の方法より>>768のほうがよろしいかと。

実際に試してないんで知らないけど。
添字の計算部分の差で負けたりして(w
0775デフォルトの名無しさんNGNG
>>774
うーん、確かに速度的には遅くなるかもしれないけど、
この関数をそんなに頻繁に使うとは思わないので、な
るべく単純な形の方が分かりやすいような気がする。

あと、以下の形にすると、日本語に対応するのも楽。

function ReverseString(S : string) : string;
var
0776775NGNG
途中で書き込んでしまった。

function ReverseString(S : string) : string;
var i : integer;
begin
  for i := 1 to length(S) do
    result := concat(S[i], result);
end;
0777デフォルトの名無しさんNGNG
再帰バージョン

 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 の組み込み関数。
0778デフォルトの名無しさんNGNG
>>775
単純さを求めるとなると手っ取り早い日本語対応は
function ReverseString(S : widestring) : widestring;
では?(w
>>776
>result := concat(S[i], result);
result := S[i] + result;
むしろこちらのほうが単純(直感的)かと。
ただconcat関数に慣れてないだけかも知れんが…
0779デフォルトの名無しさんNGNG
>ただconcat関数に慣れてないだけかも知れんが…

文字列連結に「+」が使える事にかえって驚く。
resultというのもDelphi独自の規格だよね。
0780デフォルトの名無しさんNGNG
>>778
widestringを使うのは環境にだいぶ依存しそう
ですけど(確かに単純と言えば単純だけど)。

concatを使うのはあくまで私のやり方ですので、
+の方が分かりやすければそちらで問題ありま
せん。
0781デフォルトの名無しさんNGNG
>>779
Turbo Pascalからの仕様ですね。
0782デフォルトの名無しさんNGNG
おながいします

問
正の整数を読み込み、30桁の数になるまでそれを2倍、2倍にしていき、
30桁の数になったら出力する。

桁数ってどうだっけ・・・
0783デフォルトの名無しさんNGNG
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.
0784デフォルトの名無しさんNGNG
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 }
0785デフォルトの名無しさんNGNG
>>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.



0786デフォルトの名無しさんNGNG
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 }
0787デフォルトの名無しさんNGNG
激遅
function ketaketa(e : extended):integer;
begin
while true do begin
e:=e*2;
if log10(e)>=30 then break;
end;
ShowMessage(FloatToStr(e));
end;
0788デフォルトの名無しさんNGNG
procedure ketaketa(e : extended);
begin
while log10(e) < 30-1 do
e:=e*2;
ShowMessage(FloatToStr(e));
end;
0789デフォルトの名無しさんNGNG
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;
0790デフォルトの名無しさんNGNG
procedure ketaketa(e : extended);
begin
ShowMessage(FloatToStr(e * power(2, Ceil((30 - 1 - log10(e)) / log10(2)))));
end;
0791デフォルトの名無しさんNGNG
procedure ketaketa(e : extended);
begin
ShowMessage(FloatToStr(e * power(2, Ceil((30-1)*log2(10) - log2(e)))));
end;
0792デフォルトの名無しさんNGNG
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;
0793デフォルトの名無しさんNGNG
>>787-792
extendedって30桁まであるのか?
0794782NGNG
いろいろカキコ有難うございます。今日の授業で>>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;
・・。
0795782NGNG
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.

スマソ全然わかんないです・
0796デフォルトの名無しさんNGNG
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;
0797デフォルトの名無しさんNGNG
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.
0798デフォルトの名無しさんNGNG
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=8
前にあったブラックジャックを作ってみた。
つくりかけだけど。
0799デフォルトの名無しさんNGNG
お願いします。
「・・・」の部分を埋めて作るように言われましたが、全然・・・。

氏名(全角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;
0800799NGNG
続きです
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.
0801デフォルトの名無しさんNGNG
あのー、少しは自分でやった方がいいと思うよ?
せめて、自分が考えたものを書くとかしたほうが。
0802デフォルトの名無しさんNGNG
コンパイル通しただけだから、バグ取りは自分で
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;
0803デフォルトの名無しさんNGNG
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.
0804782NGNG
>>796-797
ありがとうございます
0805デフォルトの名無しさんNGNG
>>801
うん、私もそう思う。課題をそのまま丸写ししたのは、無視するか
どこが分からないか聞き直すのが良いと思う。
0806801NGNG
>>805
無視は冷酷なんで。ヒントくらいかな、最初は。
0807デフォルトの名無しさんNGNG
THINK Pascalに詳しい方がおられるようなので、
ちょっとスレ違いだけど、質問。

THINK Pascalで、「アプリケーションはそのままで、
ライブラリで機能拡張するもの」は作れますか?
具体的には、「HyperCardとXCMD/XFCN」や
「フォトショップとプラグイン」
「MacOSと機能拡張やコントロールパネル」
みたいな関係のもの。

できるとしたら、大雑把に言って、どうやるんですか?
0808デフォルトの名無しさんNGNG
>>805
いや、別に何も考えずに教えてくださいといってるわけではないんですよ。
クラスみんなですごく悩みながらやってて、どうしても分からん問題だけ聞いてるんです。
ただ、これからは途中のわかるとこまで書き込むように心がけます。
これは言い訳なんですけど、授業では何もパスカルのこと教えないのにやたら難しい問題ばかり出す先生なので・・・
0809デフォルトの名無しさんNGNG
>>807
出来ないかも。

やり方は多分『(1)コードリソースを作って(2)それをメモリ上に読み込み、(3)それを呼び出す』
という手順でやっているのだと思う。(68Kの場合)

で、3番目の“呼び出し”はC言語なら出来るんだけど
THINK Pascalだとハンドルを関数/手続き扱いしなければならないのでかなり難しいと思う。
(コードリソースの作成はTHINK Pascalでも出来る。)


色々やってみた結果CodeWarrior Pascalで

 fPtr = function (a,b:integer):integer;

こんな感じで関数を型定義してやったらできた。
しかし、これをTHINK Pascalに持ってくると文法違反でコンパイルが通らなかった。
0810809NGNG
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数の和を返す関数}
0811デフォルトの名無しさんNGNG
>>808
どうしても分からん問題だけ聞くのは良いんだけど、こっちは
どうしても分からなん問題かどうかなんて判断付かないし、問
題だけ書かれたら「ただ丸投げしている」と思われても仕方が
ないだろう。

あと、「分かるところまで書き込む」んじゃなくて、「分からない
ところだけ抜き出す」事をしてくれ。元の問題も分からず、ここ
まで分かりましたと書かれても答えようがないし、問題と分かっ
たところを書かれると「こっちが分からないところを探し出す作
業」をしなければならん。

分からないところを抜き出す作業が面倒と言うことはないと思
うが、「分からないところを抜き出す作業をミス」したり、間違っ
て解釈したりするかもしれん。それでお互い時間と数レスを費
やすかもしれないと思うと面倒くさい。
0812デフォルトの名無しさんNGNG
10進法で表現された数を
2進法、8進法、16進法の表現に変換するプログラムを書いてください。
ただし、入力する10進法の数は(16^4)-1=65535までです。
また、実際の実行例もお願いします。
0813デフォルトの名無しさんNGNG
IntToHex
といって見るだけ
0814デフォルトの名無しさんNGNG
>>812
**進法というのは分かっているのか? 分かっているとしたら
どこが分からないんだ? 分からないところだけを聞き直して
くれ。

あと、実行例くらい自分で実行して作ってもいいだろ。おん
ぶにだっこじゃ身につかんぞ。
0815807NGNG
>>809,810
いろいろ試していただいたようで、ありがとうございます。
ハンドルを関数型で確保するのが無理、って事ですね。
仕方ないですね。型にうるさいのは仕様ですから。

型を指定しないで、普通のハンドルなりポインターで確保
して、いきなりそのアドレスをinlineでコールしたら・・・
って思ったけど、それだと変数の受け渡しが出来ませんね。
0816デフォルトの名無しさんNGNG
>>812
今までの課題よりも簡単に思えるけど。
0817デフォルトの名無しさんNGNG
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;
0818デフォルトの名無しさんNGNG
>実際の実行例もお願いします。
萎え
0819デフォルトの名無しさんNGNG
>>812
またおまえか
0820809NGNG
>>815 (807)
できました!

最初、引数・返り値を同じにしたダミーの関数を作って
その関数を実行時に機械語の絶対ジャンプで上書きするというのをやってみたんですが
デバッガ(Lights Bug)で追うと、きちんと上書きされているにも関わらず
平然と元の関数を実行してるんですね。(失敗)


で、動作をMacs Bugで追ってみたところ、
どうやら関数のアドレスを取得すると
ジャンプテーブルのアドレスが帰ってくるみたいです。
で、普通に関数コールするとジャンプテーブルをショートカットして
元の関数がダイレクトに呼び出されているようです。

そこで関数を引数にした手続きを別に作成し、
そこから関数を呼び出してみたところ、
うまいこと、プラグインの関数が呼び出されました。

[通常の関数コール]→[目的の関数]
[関数、手続きを引数とした関数コール]→[ジャンプテーブル]→[目的の関数]

なお、inline関数の場合、関数のアドレス取得自体が出来ませんでした。(コンパイル時にエラー)
どこかにひとつ、その関数が作られるわけではなく
コードの随所にそのバイト列が単純に埋め込まれるようになっているからだろうと思います。
0821809NGNG
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); {プラグイン呼び出し成功!!}
0822デフォルトの名無しさんNGNG
>>820,821
なんと!!できましたか!!すばらしい。小生の
知識不足からまだ理解も、再現も出来ていませんが、
希望が持てました。がんばってみます。
0823812NGNG
>>817
ありがとうございました。
実行例もお願いします。
0824デフォルトの名無しさんNGNG
>>823
自分の所で実行してみなよ。
それが実行例。
0825807,815,822NGNG
>>809,810
>>820,821
動きました。
Plugin_Callerを書き換えて変数を渡せるように
しても、ちゃんと動きました。
ありがとうございました。
0826812NGNG
>>817
のプログラムの意味解説をお願いします。
0827デフォルトの名無しさんNGNG
>>826
お前やる気あんの?
全部分からない訳じゃないだろ?
分からないとこを聞けよ。
漠然とした要求をするな
0828デフォルトの名無しさんNGNG
>>817
これでも良さそう

const
  STR16='0123456789ABCDEF';
・・・略
  repeat
    x := n mod base;
    s := concat(STR16[x + 1], s);
    n := n div base;
  until n <= 0;
・・・略
0829デフォルトの名無しさんNGNG
>>826
解説するまでもない明解なプログラムだぞ。>817は。
0830デフォルトの名無しさんNGNG
>>826
意味って>>812のことじゃないの?
0831デフォルトの名無しさんNGNG
10÷2=5...0
5÷2=2...1
2÷2=1...0
1÷2=0...1

10=1010

この意味が分からなければ、
調べ直した方がいい。
0832812NGNG
わからないのは以下の部分です。

>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
ここもまるでわかりません

お願いします
0833デフォルトの名無しさんNGNG
>>832
ちっとは、Pascalの教科書を読んでおいでよ。
さすがにそれは、不勉強すぎです。
0834デフォルトの名無しさんNGNG
>>832
ちょいと812さん、mod divが分からないなんて…
ぶっちゃけpascalなんにも知らないと違います?(;´▽`A``
0835812NGNG
>>834
そうなんです。
私は数学科で、pascalは何も知らないんです。
コンピュータの教科書に詳細な説明はないんです。
わかるのは
function,var,integer,if,then,elseといったものぐらいです。
そこであらためて
817の意味解説をお願いします。
0836デフォルトの名無しさんNGNG
>>835
Pascalの教科書を図書館で借りて読め。「分からないから
教えてくれ」というのは先生にしか言っちゃいけない言葉だぞ。
0837デフォルトの名無しさんNGNG
>>835
http://directory.google.com/Top/Computers/Programming/Languages/Pascal/Tutorials/
0838817NGNG
hogeは関数名、nは変換する数値、baseは変換の基底、stringは文字列
baseが2,8,16以外だったらbaseを16にしてる。
n mod baseで一の位が分かる。
数値から文字への変換。'0'の次が'1'、'A'の次が'B'
n div baseは整数の割り算。base進数で一の位を削る
0になったら終了。関数の返り値をsにする。
0839デフォルトの名無しさんNGNG
>817さんが親切に>838のような解説を書いても、
>812にはさっぱり意味不明だろう。
pascalの教科書を探して読んで来ない限り、
どこまでいっても全く無駄。

教科書じゃなくても、pascalの初歩のページでも
せめて探して読んできなよ。
0840デフォルトの名無しさんNGNG
たとえば
ttp://grape.c.u-tokyo.ac.jp/~makino/kougi/jousho/pascal_memo.html
0841805NGNG
やっぱり「何も考えずに教えてください」って言っているのと
変わらんな。やっぱり無視した方が良いかも。>>801
0842809NGNG
>825
あ、できましたか。よかったですね。
0843デフォルトの名無しさんNGNG
6ケタの数を入力し、N個右にずらす(たとえばN=2だとすると123456を
を561234)にするにはどのようなプログラムにすればいいですか?
0844デフォルトの名無しさんNGNG
x := x div 10 + (x mod 10) * 100000 をN回繰り返せばいーんでないの
0845デフォルトの名無しさんNGNG
こいつ、課題を全部ここで訊いて済まそうとしているのか?
そんなやつに答える事はないと思うけど。>>ALL
0846デフォルトの名無しさんNGNG
10のN乗を使ってもいいね。
0847デフォルトの名無しさんNGNG
10のn乗だと、桁、大丈夫?
0848デフォルトの名無しさんNGNG
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;
0849デフォルトの名無しさんNGNG
>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を抜いて意味が分からないとは・・・レベル高杉(藁
ほんと基本から学んできてね?
というより、分からない単語があったら
まず
せめて
最低限
ヘルプで調べてね?



あかん、、突っ込みどころ大杉
根負けするわ
0850デフォルトの名無しさんNGNG
ひょっとして、質問してる>812は
自分の実行環境を持ってないのか?
0851デフォルトの名無しさんNGNG
winならDelphi
DOSならturbo pascal
macならTHINK Pascal
debianならgpc
linuxならKylix
ぜ〜んぶ無料
0852デフォルトの名無しさんNGNG
空いてる時間は大学のコンピュータにかじりついてでも
コードを書いてコンパイルしてとにかく試せ。

処理系が見つからなくてCへのコンバータ使ってたころもあったなあ。
0853デフォルトの名無しさんNGNG
Pascal入門
ttp://www.ics.kagoshima-u.ac.jp/edu/proen1/index.html
0854デフォルトの名無しさんNGNG
ほしゅすしゅしゅ(´・ω・`)ショボーン
0855デフォルトの名無しさんNGNG
では、保守ついでに、またもTHINK Pascalの質問。

コードリソースからToolBoxのルーチンを使うには、
コードリソースのプロジェクトに何を入れれば良い?
0856デフォルトの名無しさんNGNG
>>855
・Runtime.libを外してかわりにRSRCRuntime.Libを入れる。
・Interface.libはそのまま。
0857856NGNG
↑はコードリソースを作る時の一般的な手順なんだけど
これでダメって事?
0858デフォルトの名無しさんNGNG
>>856,857
アプリしか作った事が無いので、
その一般的な手順を知らなかった・・・(^^;
あとで試してみます。ありがとう。
0859デフォルトの名無しさんNGNG
ある手続きで、newでメモリーを確保しながら不定の個数の
データを生成するとする。
type
myPtr = ^myList;
myList = record
next: myPtr;
Word: string[255];
end;
のようなリスト形式だから、順番にデータを読みだせる。
disposeも順番にできる。

この手続きをライブラリ化したとして、
disposeをライブラリ外のメインルーチン側に任せるのは
お行儀としてはいかがでしょう? あぶない?
ライブラリに、読み出しやdisposeのルーチンを含める
べきでしょうか?
0860デフォルトの名無しさんNGNG
>>859
使う使わないは別として、一揃いの機能はライブラリにもって
いて欲しいというのが普通じゃないかな。ライブラリ側としては
堅牢に作っておけば、それで問題ないわけだし。あと、リスト追
加(メモリ確保も含む)、削除、ソート、検索なども入れておけば、
わざわざライブラリ外で操作しようと思わないだろうし。

もしリスト形式(というかデータ形式)を「ライブラリ外から隠す」
ようなコンパイラの場合は「ライブラリで処理すべき」だと思い
ます。そうすれば「メモリ保護機能を付け加える」というような
場合でも、インターフェイスさえ変えなければ、同じ感覚で使う
ことが出来ますから。
0861デフォルトの名無しさんNGNG
質問です
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%分ステップごとに移動していくようには
どのようなプログラムを書けばよろしいのでしょうか?
御教授の程よろしくお願いします。
0862デフォルトの名無しさんNGNG
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;
0863861NGNG
迅速な回答本当にありがとうございました。

重ね重ね失礼を承知の上で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%という感じです)

というプログラムはどう書けばよろしいのでしょうか?
よろしければ教えていただけると嬉しいです。
0864デフォルトの名無しさんNGNG
配列かな。
右へ移動する分を蓄えるのと左の分を蓄えるのと用意して計算する。
Pascalで動的確保はどうやるか知らない。
0865デフォルトの名無しさんNGNG
宿題は自分でやりましょう
0866デフォルトの名無しさんNGNG
よくやるのが、値とポインタをセットにした構造体を定義して、
newでメモリーを確保しながら、つないで行く事かな。
これなら、メモリーの許す限り、いくつ増えても大丈夫。
あ、でも、標準のpascalだと、メモリー確保できたかどうかは
検出できないんだっけ。
ただ、最大何個か決まってるなら、配列でそれだけの数を
確保しちゃってある方が、プログラムは簡単だわな。
0867863NGNG
>>864,865,866
アドバイスをどうもありがとうございました。

配列を用いてといているのですが、
『右へ移動する分を蓄えるのと左の分を蓄えるのと用意して計算』
という部分がどう記述していいのかよくわからないのです。
右から戻ってくる値はdowntoを用いて計算すればいいのでしょうか?
また、蓄えた値を足したり引いたりして解を求めるということは
ABC…といった場所の値が常に変化してしまうので
変化した値を常に用いて左右に移動する値を求める
という部分の記述がどうにもわかりません。
どうか御教授の程よろしくお願いします。
0868デフォルトの名無しさんNGNG
自分なりに、出来ているコードを提示してはどうですか?
コードが出てくればどの程度の知識があるのかも予測できるし。

0869デフォルトの名無しさんNGNG
hoge: array [0..1] of array [0..10] of integer;
hoge[0]にa,b,c...が入り
hoge[1]に右からと左からを入れる
最後にhoge[0]に足す。
0870デフォルトの名無しさんNGNG
>>869
わざわざ二次元配列にするより、一次元配列を2つ作った方が
分かりやすいと思うんだけど。
0871デフォルトの名無しさんNGNG
配列を2つ作る必要ってあるのか?
0872デフォルトの名無しさんNGNG
>>871
私に言わせると「わざわざ二次元配列にする必要ってあるのか」
になるんだけど。

値を保存する配列と計算用の配列は分けた方が分かりやすいと
思うんだけど。
0873デフォルトの名無しさんNGNG
ああ。出題の意味を取り違えていた。
配列は2ついるね。失礼。
2次元配列は意味ないね。確かに。
0874デフォルトの名無しさんNGNG
>>867
問題をもう少し整理してくれ。

1. 移動率は場所によって変わるのか? >>861だとA->Bは30%、B->Cは10%になっている。
2. >>863で左右に移動する場合、上記1と左右の移動率の関わりは?
3. 左右端の処理はどうするのか?

あと、移動率は定数か変数のどちらかもはっきりしないし。
ここいらへんがちゃんと定義されていないと、プログラムを書こうにも書けないぞ。
0875861,863,867NGNG
皆様色々とアドバイスをありがとうございます。

>>874
そうでしたすみませんでした。

1は
移動率は場所によって変動です。
2は
移動率なんですが右方向へは(n/50)、左方向へは(n/100)といったようにN番目の場所により移動率が変化。
3は
左端は右隣に移動と右隣からの移動、右端は左隣からの移動と左隣への移動です。

移動率は変数です。
0876デフォルトの名無しさんNGNG
宿題の設問、そのまま書いてくれたほうがわかりやすいんだけどなぁ
0877875NGNG
下のような状態遷移図が書いてあって

 → → →   →
�@ �A �B ・・・ �I
 ← ← ←   ←

�@に適当な値を与えると
まず�@から�Aに移動、次に�@から�Aに、�Aから�Bに、�Aから�@に、その次は・・・
といった様に数値が移動していく。
また、移動率は右方向には(n/50)、左方向には(n/100)というように、位置Nの値を
用いて設定する。
これにより、各場所での定常値を求めるプログラムを作成しなさい。
というようなことが書いてあります。
0878デフォルトの名無しさんNGNG
ほんとに宿題だったか....

右が n/50, 左が n/100 だと足して1になりませんが、ここはホントはなんてかいてあった?
0879デフォルトの名無しさんNGNG
別に足して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;
0880デフォルトの名無しさんNGNG
>>877
「移動率は位置Nの値を用いて設定する」ってのがよく分からない
なぁ。Nは何を表していて、その場所との関係はどうなっているの
かをはっきりさせないとプログラムは組めないと思うんだけど。あと
「右方向には(n/50)」のnって何を表しているの?

あと、数値は実数にするのか? それとも整数で良いのか? もし整
数なら除算の余り部分の処理はどうするのかが問題ですね。
0881877NGNG
>>878,879,880
アドバイスをどうもありがとうございました

>>880
説明が足らず申し訳ありませんでした。
NというのはN番目ということです。
図の�@〜�Iのことです。
「右方向には(n/50)」、「右方向には(n/100)」のnはNと同じです。
�@から�Aに移動する時は(1/50)、�Aから�Bに移動する時は(2/50)、・・・
�Hから�Iに移動する時は(9/50)ということです。
数値は実数です。
0882デフォルトの名無しさんNGNG
>>881
なんだ算出可能なら簡単じゃん。私は場所によって特定値
(左右別)になるのかと思って「場所別、左右別の配列」を
用意しなければならないかと思っていました。

で、ここまではっきりすれば簡単に組めるのでは。日本語ア
ルゴリズムだとこんな感じ。

{ 事前に元量配列に量をセットしておく}
for 遷移回数ループ do begin
  計算配列を0クリア
  for 最初の要素から最後の要素まで do begin
    左右の漏れ率計算
    左右の漏れ量、残り量計算
    計算配列に漏れ量と残り量を加える
  end;
  元量配列に計算配列を代入
  {途中結果の出力(遷移回数,元量配列)}
end;
{最終結果出力(元量配列)}

移動する個数を可変にする場合は、配列宣言を大きくセット
しておいてその一部だけを使うとか、動的配列を使う(処理
系が許せば)などの方法があります。

注意点は最初の要素と最後の要素は片方にしか漏れ出さ
ないことです。あとは自分で組めるでしょ。
0883881NGNG
皆様のアドバイスを単に組み合わせただけですが以下のように記述してみました。
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.
0884883NGNG
上のプログラムを1000回繰り返したときと2000回繰り返したときに
得られた値に変化が見られないのですがなぜなのでしょうか?

また、左右に移動する確率をrandomを用いて得ようと思い
簡単なプログラムでどのような乱数が返ってくるのかを
試したところ毎回同じ値しか帰ってこないのはなぜなのでしょうか?

0885デフォルトの名無しさんNGNG
それが定常値
0886883NGNG
やっぱり定常値なんですね。
もっと果てしない回数を繰り返して得られるものだと思っていたので…

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.
こんなプログラムでいつも同じ乱数しか返ってこないのですが
違う乱数を得るにはどうしたらいいんでしょうか?
0887デフォルトの名無しさんNGNG
Randomと一緒にRandomizeを説明してない教科書は窓からポイ
0888883NGNG
窓から ・⌒ヾ(*´_`)ポイしてきました
ありがとうございました
0889883NGNG
883で書いたプログラムは
待ち行列と考えると
右に移動していく値は人の到着の確率
左に移動していく値はサービスをうけ列を離れていく確率
になるのではないかと思うのですがどうでしょうか?
0890883NGNG
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
0891883NGNG
{待ち行列}
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.
待ち行列に用いて行列の定常値を求めるには
こんな感じにすればいいんでしょうか?
0892883NGNG
下の式を記述したいのですが

(AのN乗÷N!)÷(Σ  AのX乗/X!)
                X=0〜N

この式の左側は記述できたのですが
右側はどうやって記述したらいいのでしょうか?

0893デフォルトの名無しさんNGNG
まず数式読みづらい
あと0からってのがおかしいと思うが
0の階乗なんてないし
0で割ったらダメでしょ
括弧の結びどころがみにくい
Σ(A^X / X!)
こう解釈していいか?
Σの上下につく数字も明示してくれ
下手っぴでずれてもいいからさ
X=1からNまでってところか?
0894883NGNG
>>893
その解釈で大丈夫です。
Xは1からNまででした。
見にくい上にわかりにくくてすみませんでした
0895883NGNG
(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;
0896デフォルトの名無しさんNGNG
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.
こんな感じであってますか?
0897883NGNG
問題は
(A^N/N!)/(Σ((A^X)/X!)) Xは1からNまでで
やっぱりX=0の時も値を求める必要があるみたいなので
1を加えてみたのですが、どうでしょうか?
0898デフォルトの名無しさんNGNG
X=0のときってのが意味わからん
0899883NGNG
Σ (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にはこちらから値を与えて解を求める問題なのですが
どう記述したらよろしいでしょうか?
お願いします
0900デフォルトの名無しさんNGNG
900
0901デフォルトの名無しさんNGNG
配列1に5個の数値が順番に1,2,3,4,5と入っているものを
配列2に5,4,3,2,1と入れ替えるにはどうしたらいいですか?
0902デフォルトの名無しさんNGNG
for i:=Low(array1) to High(array1) do
array2[i] := array1[High(array1) - i];
0903デフォルトの名無しさんNGNG
>>902
ありがとうございました
0904デフォルトの名無しさんNGNG
どういたまして
0905デフォルトの名無しさんNGNG
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しか戻ってこない場合はどうしたらいいですか?
0906レイホウ@6歳NGNG
until r=10;
これを
until r=100;
とやってみなさい
0907デフォルトの名無しさんNGNG
>>906
ありがとうございました。
0908レイホウ@6歳NGNG
うそだった

やってみたら
for n:=90 to 100 do writeln(hako2[n]);
こうだな

それか
box1=array [1..10] of longint;
box2=array [1..10] of longint;
↑これ
0909デフォルトの名無しさんNGNG
N!のような値の大きなものを求めるプログラムで
realで宣言すると100!の階乗でも求められるのに
配列(realで宣言)に入れてしまうとエラーが出てしまうのはなぜですか?
0910デフォルトの名無しさんNGNG
>>909
1) 配列は本当に実数型ですか?
2) 初期化していますか?
3) 小さな値(2!、3! など)でもそうなりますか?
0911デフォルトの名無しさんNGNG
エラーの内容を書けょ
コード書けょ
配列なのにhoge:=kaijou(100);
みたいなことやってるんじゃないの?
hoge[0]:=kaijou(100);
0912909NGNG
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]のところにでてしまいます
0913デフォルトの名無しさんNGNG
Type がミスマッチしてるんねん。
LONGINT を期待してはるのに S64REAL 型の変数がやってきたんや。
0914デフォルトの名無しさんNGNG
そんなときはキャスト、キャスト。
コンパイルエラーが出なくなるまでキャストし続ける。
何でもいいからよさそうな型でキャスト。

912 のコードなら
hako[ byte(c) ]:=b;

でどうだろう。
0915デフォルトの名無しさんNGNG
Cはカウンタだから整数型でいいんじゃないの?
var
 a, b: real;
 c, d: integer;
で。
0916デフォルトの名無しさんNGNG
質問です。
指数分布に従う乱数を発生させるにはどうしたらいいですか?
0917デフォルトの名無しさんNGNG
2,4,8,16...
ってことか?
いや、分布だから大きい数がめっちゃ出やすいってことか?
0918デフォルトの名無しさんNGNG
function Expondist : extended;
begin
 Result := -Ln( Random );
end;
0919デフォルトの名無しさんNGNG
英単語をいくつか入力して、辞書みたいなアルファベット順に表示するにはどうすればいい?
アルファベット順にするのはソート関数でいいとして、文字列の配列(?)っていうのが分からない。
たとえば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'
として、さらに一文字ずつ比較していくにはどうすればいいですか?(分かりづらいとは思いますが)
0920デフォルトの名無しさんNGNG
使っている処理系の名前は?

array[1..100] of string;

って定義は可能?
0921デフォルトの名無しさんNGNG
SSH使って大学のにログインしてて、処理系は分かりません。
試しにやってみたら
warning: missing string capacity - assuming 255
と出ましたが、これ出てきても出来ます?
0922デフォルトの名無しさんNGNG
メモリーばか食いしてもいいのなら、
type Str255:string[255]
とか定義して、
array[1..100] of Str255
しちゃえば良いのでは?
(って、昔のマック風みたい)
0923デフォルトの名無しさんNGNG
いざとなれば別のコンパイラを使うことにして、定義はこれでやってみます。
でも今度は、stringで定義した文字列で、アルファベット順に順序を比較していく方法が分かりません。
0924デフォルトの名無しさんNGNG
文字列ではない、たとえば整数の配列のソートは出来ますか?

type
 TargetType = array[1..100] of integer;

と定義しているとき、
procedure Sort( var TargetData : TargetType );
という関数を実装出来ますか?

これが出来るなら、文字列ソートも容易でしょう。
0925デフォルトの名無しさんNGNG
なんか文字と文字列がごちゃ混ぜになっているっぽいね。

「アルファベット順に順序を比較」ってことは、与えられた二つの文字列に順序をつける。
という操作と同義。

type
 CompareResult = (sGREATER, sEQUAL, sLESS);

function CompareString( s1, s2 : string ) : CompareResult;

という関数を作り、任意の文字列間に順序を定める。

もし使っている処理系が文字列間比較をサポートしているのなら、
 if s1 > s2
みたいに書いてしまえばよい。大きいか小さいか、等しいかの3通りあるので間違えないように。

文字列間比較をサポートしていない処理系の場合は「アルファベット順」の定義に基づき
一文字ずつ比較。
0926デフォルトの名無しさんNGNG
整数でのソートは出来ます。それの配列の型をintegerからstringに変えるだけで、英単語も整数と同様に並び変わるってことですね。
0927デフォルトの名無しさんNGNG
やってみたら出来ました。ありがとうございます。
0928デフォルトの名無しさんNGNG
Ord
0929げんげんげんげんNGNG
分布関数 F(x)=x^n(0<x<1)
をもつ乱数を発生させるプログラム誰か教えてください!!
お願いいたします。
0930デフォルトの名無しさんNGNG
nは定数?
Exp(x * Ln(n));
//n>0のときのみ
0931デフォルトの名無しさんNGNG
それじゃあx^nにならない?
0932デフォルトの名無しさんNGNG
↑は「それじゃあn^xにならない?」の間違い
0933デフォルトの名無しさんNGNG
そうなると思うならxとnを逆にしたらいいんじゃないかとか考えないのか
0934930.931NGNG
>>933
いや、俺は>>929じゃないから。
俺が>>933のように考えたとしても、何の意味もないじゃんか。
名前からしても別人である可能性が高いのに。釣りか?
0935デフォルトの名無しさんNGNG
>>934
なんか番号間違えまくってないか?
0936デフォルトの名無しさんNGNG
>>935
1つも間違ってない
0937930NGNG
930≠931ですが何か?
0938デフォルトの名無しさんNGNG
>>918 の回答じゃだめなのかなぁ?
0939デフォルトの名無しさんNGNG
http://pc2.2ch.net/test/read.cgi/tech/1078885169/
なんか、次スレたってるぞ
0940デフォルトの名無しさんNGNG
Pascal の言語仕様書(のようなもの)はどこかのサイトで閲覧できますか?

Pascal の言語が一通りわかれば良いのですが。
0941デフォルトの名無しさんNGNG
>>940
Pascalって言っても方言から拡張まで何でもありだから、対象の開発環境によってまるっきり違いそうな気がする。
それに言語仕様といっても厳密に書き出すと膨大な量になるから、あまりやっているところはないんじゃないかな。

一通りということなら、入門サイトでも見たらどうかな?
私は本(WirthのPascal本)から入ったのでサイトを紹介することはできないけど。
0942デフォルトの名無しさんNGNG
http://www.jisc.go.jp/app/pager
ここで検索すればJIS標準Pascalの仕様書がPDFで閲覧できるはず。
適当に弄ればPDFのDLもできる。
0943942NGNG
上のURLだと見れんみたい
トップページから「JIS検索」たどってくれ
0944デフォルトの名無しさんNGNG
とりあえずはANS/JISの標準化された古い仕様だけだよね。
その後のオブジェクト指向方面の拡張はAppleのとBorlandので違うもんねぇ。
gpcはBorlandに近いんだっけ?
0945デフォルトの名無しさんNGNG
>>941-944
どうもです。
いま直接関係しているのが Pascal の方言なので、サイトとかを見て回ってみます。

0946デフォルトの名無しさんNGNG
perlのハッシュのようにキーと要素を扱わせることは出来ないでしょうか?
iniファイルのようにキーがたびたび変更される場合を扱いたいのです
0947946NGNG
すいません・・・思いっきり上の方で連想配列の話題がありましたね
忘れてください
0948デフォルトの名無しさんNGNG
>>946
「キーがたびたび変更されるのでそれに対応する」んじゃなくて「キーがたびたび変更されないように(もしくは変更されても簡単に対応できるように)プログラミングする」のが良いと思う。

キーを作るプログラムが他のだと手の出しようもないけど、自分で作るのならデータ構成、プログラミングで対応できそうな気がする。
0949デフォルトの名無しさんNGNG
レベルの低い質問で申し訳ないんですけど
大学の授業で先週からpascalやってるんですけどわけがわからなくなってるんで
家でpascalの勉強をしたいんですけどどうすれば自宅のパソコンで使えるようになるんですか?
OSはウインドウズXPなんですけど。
CDとかで売ってたりするんですか?
>>1のサイトでダウンロードしてもインストールすることができないし
何をどうすれば自宅のパソコンでpascalが使えるようになるんですか?




0950デフォルトの名無しさんNGNG
>>949
大学の授業ってんならgnu-pascal(gpc)当たりが正当かと思うが、
borlandのサイトからdelphiの無償版が落とせる。
またFreePascal(fpc)というのも割りとメジャーだ。
ttp://www.freepascal.org/
ttp://www.jp.freepascal.org/mirror/fpc/download.html
0951デフォルトの名無しさんNGNG
>>949
>>950が言う通りだと思うけど、その教授に自習したいから処理系教えれ!って聞くのがいいんじゃなかろうか?
学校のマシンが何かのUnix系の端末でgpcってオチが一番ありそうな気はするけども。
Cygwinあたりを突っ込んで(SFUとかU-WinとかMinGWとかでも構わんかもしれんけど)自力でgpcを入れるとかなのかな?

 後、大学生なら
ttp://www.pascal-central.com/
あたりとりあえず眺めてみるのもお勉強になるかもね。
って、情報系でもなんでもなくてマジわけわかんね〜〜〜〜〜!!!とかだとこういう情報過多なサイトは遠慮しとくベキ?


0952デフォルトの名無しさんNGNG
>>949
Bloodshed Software - Dev-Pascal
http://www.bloodshed.net/devpascal.html
0953949NGNG
>>950-952
レスありがとうございます。
とりあえずFreePascal(fpc)というのを試してみます。
0954大学生NGNG
√cの近似値をニュートン法で求めるプログラムと、
二分法でfor文を使って求めるプログラム、
さらに二分法で求めたものを再帰的手続きにより求めるプログラムを
テストで出されるそうなのですが、まったくわかりません・・。
なんとか助けていただけないでしょうか??
よろしくお願いします!!!
0955デフォルトの名無しさんNGNG
車の運転ができない人に免許をとらせても世の中のためになりません。
以上
0956デフォルトの名無しさんNGNG
筆記試験か。すごいね。穴埋めになるのかな。
0957デフォルトの名無しさんNGNG
再帰的二分法。のアイデア。

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;
0958デフォルトの名無しさんNGNG
レポートが出たのですが、全く分かりません↓
 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)/~~~
0959デフォルトの名無しさんNGNG
オレニマカセロ!

とはいうものの、処理系手に入れるまで待ってね。
0960デフォルトの名無しさんNGNG
ずれてたらごめん

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)

0961デフォルトの名無しさんNGNG
どうもありがとうございました(*^_^*)頑張ってやってみます♪
0962デフォルトの名無しさんNGNG

現在、Pascalによるプログラムが実用されている所ってあるんですかね。

どっかの工場のPCで動いてるとか。
0963デフォルトの名無しさんNGNG
>>962
君の知らない「あそこ」で動いている。
秘主義務があるので具体的な内容は話せない。
0964デフォルトの名無しさんNGNG
http://matrixengine.jp/product/d_loca/dloca_html/dloca_taiken.html

これもPascalみたい。
体験版あるみたいなのでPascal詳しい人試してみて意見聞かせてほしいです。
0965デフォルトの名無しさんNGNG

> 当時は Borland(現 Inprise)の Turbo Pascal が人気のコンパイラでした。私も一時はそればかり使っていま
> した。しかし,世の中は ANSI C に移ろうとしていた頃です。私はまむしさんより一歩先に Turbo Pascal を捨
> てて Turbo C に移行しました。

ttp://oku.edu.mie-u.ac.jp/~okumura/compression/1988.html
0966デフォルトの名無しさんNGNG
>>962
私はngraphを現役で使っています。
0967デフォルトの名無しさんNGNG
>>966

研究室のMS-DOS機ですか?
0968966NGNG
一応Win95が動いているマシンです。
あとアドインプログラム書くのでコンパイラも時々動かしてます。
0969デフォルトの名無しさんNGNG
大学院入試のアルゴリズムとデータ構造で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の方の文法も間違ってるかも…)。
0970デフォルトの名無しさんNGNG
>>969
あ、Pascalの方の2行目recordと4行目treeの後ろにセミコロン;はありませんでした。
すみません。
0971デフォルトの名無しさんNGNG
あってるよ
0972デフォルトの名無しさんNGNG
ありがとうございます。ここでtree型の変数pのelementの部分にアクセスするためには
Pascalではどう書けばいいのでしょうか?
0973デフォルトの名無しさんNGNG
あ、あと問題の一部に(pはtree、xはintegerです)
if p=nil then begin
   new(p);
   with p do begin
   (穴埋問題) :=x;
   left :=nil;right :=nil;
   end
end
ってのがあったんですが、with p って何ですか?
0974デフォルトの名無しさんNGNG
>>972-973
pがtree型ならそいつの指すnode型のブツをゲットする必要があるから例えば
p^.element
だな。Cの
(*p).element
に相当する書き方。

withの意味は自分で調べれよ。それで分からないところだけ質問しる。

ところで、そこの「with p」は「with p^」 が正しいと思うがどうか。
0975969=970=972=973NGNG
>>974
ありがとうございます。問題文を見直した所、with p と書かれています。問題の間違いですかね?
with文についてググったのですが
「Pascalでレコードのメンバーを扱うには「レコード名.メンバー名」という書式を使うが、
レコード名をある程度省略する方法がある。それにwithを使う。
withの内部では「メンバー名」を書くだけで、そのレコードのメンバーが参照できる。」とありました。
例えば穴埋問題の部分には(p^)のelementメンバにxを代入したいわけですが、
ここは「(p^).」を付けずに element := x; と書ける、ということですか?
書けるとしたら、p^.elementと書くのは間違いとなるのでしょうか?
0976上とは別人NGNG
>>969 のtype tree = @node;は、type tree = ^node; じゃないのかなあ…まあ、Pascalも方言多いから何とも言えんけど
with p or with p^も、Delphiなんかじゃrecordへのポインタに直接"."を続けられるから間違いとも言い切れ無さげ…
あと、withは、名前を探す順番を変えるだけなので、p^.elementももちろん書ける…私の知ってるPascalであれば…
0977デフォルトの名無しさんNGNG
>>976
ありがとうございました。
@については、ここ数年分見ましたが、同様の問題では全て@node;のような書き方をしていました。
別な方言なんでしょうね。
0978デフォルトの名無しさんNGNG
>>976

PASCALのJIS規格では「@」は「^」の代替表現なので、とりあえず
どっちで書いても同じです。Delphiでは意味が違いますが。

「with p」は規格としては「with p^」でないとまずいでしょう。
もちろん「with p」と書ける処理系は存在するかもしれませんが,
すくなくとも GNU Pascal ではだめでした。



0979デフォルトの名無しさんNGNG
スレさようなら
0980デフォルトの名無しさんNGNG
980!
0981デフォルトの名無しさんNGNG
落ち
0982デフォルトの名無しさんNGNG
夏とともに、さよなら・・・。
レス数が950を超えています。1000を超えると書き込みができなくなります。