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


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

Pascalの宿題は俺にやらせろ!!Part2



1 名前:デフォルトの名無しさん mailto:sage [2006/01/12(木) 00:45:25 ]
教育用(?)プログラムPascalの宿題をやって頂くスレ

■丸投げOK
■全く分かってない阿呆も放置しないで優しく対応
■他言語はよそ逝け( ゚Д゚)ゴルァ
■DelphiもTurbo Pascalも完全対応

【本家】

www.borland.co.jp/delphi/

【前スレ】

pc8.2ch.net/test/read.cgi/tech/1089719714

【関連スレ】

くだすれDelphi(超初心者用)その15
pc5.2ch.net/test/read.cgi/tech/1087823906/l50

Pascal の初心者用の質問・相談所
pc5.2ch.net/test/read.cgi/tech/1009903617/l50

【Delphi初心者】今から始めるDelphi Part01
pc5.2ch.net/test/read.cgi/tech/1062422335/l50


445 名前:某TA mailto:sage [2006/12/04(月) 22:36:21 ]
>>443
Wikipedia逝け
アルゴリズム載ってるから

446 名前:デフォルトの名無しさん mailto:sage [2006/12/05(火) 00:08:56 ]
>>445
そんなのもう見ました。

447 名前:デフォルトの名無しさん mailto:sage [2006/12/05(火) 03:55:22 ]
私もよく解らないけど、
配列を二分木のように解釈するみたい。
配列の先頭=二分木の根っこで、ここに一番大きい値を持ってくるみたい。

ここまではOK?

ttp://www.ics.kagoshima-u.ac.jp/~fuchida/edu/algorithm/sort-algorithm/heap-sort.html
ttp://su10.sgu.ac.jp/~morita/Seminar/6thStudent/entani/sort/heap/heap.html

448 名前:デフォルトの名無しさん [2006/12/11(月) 01:00:08 ]
実行時に0〜9以外のキーを入力した場合、
自動的に消えるようにしたいんだけどどうしたらいいかな?
わかる人いますか?

449 名前:デフォルトの名無しさん mailto:Tage [2006/12/11(月) 16:18:07 ]
何が消えるようにしたいの?

450 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 23:30:37 ]
Editへの入力からじゃないかな。
ようは数値入力専用Editを作りたいのかと。
OnKeyDownイベントで、いらないキー入力は Key := 0; で無効に出来る。


451 名前:デフォルトの名無しさん [2006/12/13(水) 00:32:15 ]
448 ですけど、質問下手ですいません。
具体的に言うと、

program Keisan(input,output);
var a,b,wa:integer;
begin
a:=30;
writeln('数字を入力してください');
readln(b);
wa:=a+b;
writeln('a=',a,' b=',b);
writeln('a+b=',wa)
end.

で実行して、間違ってアルファベットとか打つとエラーになるでしょ?
そうじゃなくって「再度入力してくれ」と表示してもう一回って感じに
自動的に持ってきたいんです。
charでどのキーも入力OKにしてから0〜9を数値型に変換するのかなと
考えたんだけど、いまいちやり方わかりません

452 名前:デフォルトの名無しさん mailto:sage [2006/12/13(水) 00:51:47 ]
function ReadInt: Integer;
var
 S: strting;
begin
 repeat
  WriteLn('数字を入力してください');
  ReadLn(S);
 until TryStrToInt(S, Result);
end;

453 名前:初心者 [2006/12/16(土) 11:06:08 ]
すみません。学校でパスカルにちょこっとふれただけなのですが、課題がでて、もうどうしてよいか分かりません。
助けてください。
入力されたn個の数を大きい順に並び替えるプログラムを作れ。

お願いします。



454 名前:デフォルトの名無しさん mailto:sage [2006/12/16(土) 13:48:36 ]
n個の配列を用意して二重ループで大きい順に入れればいい。

455 名前:デフォルトの名無しさん mailto:sage [2006/12/17(日) 04:10:08 ]
こんなんどうだ?

function FindMax(A: array of Integer; Start: Integer): Integer;
var
 Max, I: Integer;
begin
 Max := Start;
 for I := Start + 1 to High(A) do
  if A[I] > A[Max] then
   Max := I;
 FindMax := Max;
end;

procedure Swap(var A, B: Integer);
var
 Temp: Integer;
begin
 Temp := A;
 A := B;
 B := Temp;
end;

procedure Sort(var A: array of Integer);
var
 I: Integer;
begin
 for I := 0 to High(A) do
  Swap(A[I], A[FindMax(A, I)]);
end;

456 名前:デフォルトの名無しさん mailto:sage [2006/12/19(火) 01:21:31 ]
GNU PascalをOS X上のXcodeで使ってます。
時間の計算をしたいと思いますが、如何すればいいですか?

457 名前:デフォルトの名無しさん mailto:sage [2006/12/19(火) 01:36:32 ]
求むエスパー

458 名前:デフォルトの名無しさん mailto:sage [2006/12/19(火) 03:02:53 ]
ミリ秒に変換して計算すれば良いと思う。

459 名前:デフォルトの名無しさん mailto:sage [2006/12/20(水) 02:21:31 ]
>>458
回答ありがとうございます。それでは、ミリ秒に変換するには如何すればよいのでしょうか。

460 名前:デフォルトの名無しさん mailto:sage [2006/12/20(水) 02:41:03 ]
何がしたいのか具体的に書かないと誰も答えられないよ。

461 名前:デフォルトの名無しさん mailto:sage [2006/12/20(水) 17:41:23 ]
1 sec = 1000msec
1 min = 60 sec
1 hour = 60 min

462 名前:光速エスパー世代774RR mailto:sage [2006/12/26(火) 17:59:23 ]
バッババババビューンと空を逝くw

463 名前: 【ぴょん吉】 【1736円】 mailto:sage [2007/01/01(月) 01:08:04 ]
さて、明けたことだし宿題やろ



464 名前:q [2007/01/21(日) 20:19:40 ]
[質問]
「上から○(円)が落ちてきて、
ウィンドウの1番下に達したら
その円は止まり、新しい円が
また落ちてくるプログラムを作れ
(ただしfor文を使うこと)。」
という宿題が出たのですが、
よく分かりません。

どなたか分かる方、教えて下さいm(__)m

465 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 20:33:00 ]
やだ

466 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 00:04:54 ]
ヒント
Form1.Canvas, Ellipse, Timer, Form1.ClientHeight


467 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 00:20:44 ]
ここはいつからDelphiスレになったんだ?

468 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 00:21:29 ]
あぁ、Delphiも対応であったか。失礼。

469 名前:デフォルトの名無しさん [2007/01/25(木) 19:06:01 ]
パスカルの入門書でおすすめありませんか?
www.saiensu.co.jp/books-htm/ISBN4-7819-0757-1.htm
これを買おうかな、と今は思っているのですが。

470 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 03:47:12 ]
やめとけ

471 名前:光速エスパー世代774RR mailto:sage [2007/01/26(金) 12:38:49 ]
つーか、今からPascalを勉強しようというのが… 授業かなんかかい?

Pascalの教科書は何冊か使ったけれど、てもとにあるのは森口さん他の
「Pascalプログラミング講義」(共立出版)
だ。これ、ちょっと内容が薄いかな。

思い出してみればボーランドのTurbo Tutorが結構優れた教科書だった。
TP5.5はフリーになってるけど、Turbo Tutorってネットに流れてない?

定番アルゴリズムは奥村さんのアルゴリズム事典で勉強したね。
ttp://oku.edu.mie-u.ac.jp/~okumura/algo/algo_pas.html

あれだ、今日びは言語自体より、(一昔前なら)API、(出るちゃん以降は)
コンポーネントの使い方の方が大事だってゆー、つまらないといえばつまらない
世の中になったもんだよ。

472 名前:469 mailto:sage [2007/01/26(金) 15:20:07 ]
いえ、授業ではなくてただの興味です。
レスありがとうございますm(__)m

473 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 00:53:01 ]
授業でないなら、その手の教科書本は初心者にはしんどいと思うよ。
興味を持ち続けられないと思う。




474 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 00:56:26 ]
Delphi言語や、教育目的、古いプログラムの保守は別として、
Pascalもまだまだ現役で使われてるんですか?

475 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 01:01:17 ]
全く。

476 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 09:25:11 ]
DelphiってもしかしてObjectPASCALのことですか?

477 名前:光速エスパー世代774RR mailto:sage [2007/01/28(日) 15:15:58 ]
>476
その辺は複雑で、ボーランドはBorland Pascal がサポートする言語を
Object Pascal と呼んでいた。Borland Pascalは消滅して、ご存知Delphiが現行なんだが、
これが実装している言語は今では「Delphi言語」と呼ばれているはず。

Delphi言語はプログラミング言語Pascalをオブジェクト指向を用いて
拡張したものだから、Object Pascalの一種であり、最も普及したものだね。
既にPascal言語の de facto standard といっていいと思う。

478 名前:デフォルトの名無しさん [2007/01/31(水) 11:03:06 ]
すいません、お初です。
学校課題でπの近似値を求めろ、言われました。マチンの公式使ってやってみようと思ったんですけど、数字を何乗かしたいとおもったっとき、使えるコマンドはあったでしょうか?
たとえば、2のN乗がしたいとき、read(n)で読み込んで、計算させたいということなんですけど。
教えてください。

479 名前:光速エスパー世代774RR mailto:sage [2007/01/31(水) 12:33:49 ]
標準的にはないけど、処理系のおまけでついている可能性がある。
なくても自分で書けばおっけー。

480 名前:デフォルトの名無しさん [2007/01/31(水) 12:54:08 ]
えーと、どうやれば書けますか?
ちょっと想像がつかないので教えてください。

481 名前:光速エスパー世代774RR mailto:sage [2007/01/31(水) 17:29:14 ]
再帰的な定義をそのまま実装(普通は末尾再帰→繰り返しにする)するか、
a ^ bのbが実数の場合は標準函数(だったよね)としてlnとexpがあることを利用すると、ln(a^b) = ln(a) * bだから a^b = exp(ln(a) * b)

冪乗の演算子/函数がないのに対数、指数関数があるというのがWirth先生。
以下FPCでテスト墨

Program PowerTest;
var a, b : real;

function power(a : real; b : integer) : real;
begin
if b > 0 then power := a * power(a, pred(b))
else if b = 0 then power := 1
else power := 1 / power(a, -b)
end;

function RealPower(a, b : real) : real;
begin
RealPower := exp(ln(a) * b)
end;

begin
write('a ^ b, a= , b= '); readln(a, b);
writeln(power(a, round(b)), ' ', RealPower(a, b))
end.


482 名前:デフォルトの名無しさん [2007/01/31(水) 18:38:46 ]
ありがとうございました。後はもう少し自分であがいて見ます。


483 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 09:10:23 ]
落ちてる?



484 名前:デフォルトの名無しさん [2007/04/14(土) 18:35:39 ]
GPCのバグを発見してしまったage

整数演算の結果がオペランドのビット巾で丸められちまう。

485 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 06:38:45 ]
丸められるって?

486 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 23:59:09 ]
質問です。
大学入ってPascalプログラミングやってるんですが、
『選択ソートのプログラムを作成せよ。
ただし、データ数を最初に入力するように変更すること。
また、データ数は1個から最大10000個まで対応できるようにすること』
とあるのですが、サッパリです。
かなり初心者な質問で申し訳ないのですが、どなたか教えてください

487 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 00:09:14 ]
>ただし、データ数を最初に入力するように変更すること。

元のソースが無いと変更しようが無い。

488 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 00:44:47 ]
すみません。元のソースは

program sort(input,putput);
const numofdata=893;
var d: array [1..numofdata] of integer;
i,j,k: integer;
tmp: integer;
begin
for i:=1 to numofdata do
begin
read(d[i]);
end;

for i:=1 to numofdata-1 do
begin
j:=i;
for k:=i+1 to numofdata do
begin
if d[j]>d[k] then j:=k;
end;
tmp:=d[j];
d[j]:=d[i];
d[i]:=tmp;
end;

for i:=1 to numofdata do
begin
writeln(d[i])
end
end.

です

489 名前:光速エスパー世代774RR mailto:sage [2007/06/19(火) 13:02:24 ]
ほれ。FreePascalでテスト済み。

Program sort(input, output); (* putputってぉぃw *)
const numofdata = 893; (* 嗤いどころかこれ。これを10000に汁 *)
type dataindex = 1..numofdata;
var d: array [dataindex] of integer;
datanum : dataindex; (* データ数を貯めとく変数を用意するのが肝な *)
i, j, k: integer;
tmp: integer;
begin
write('n (max ', numofdata, ')= '); readln(datanum);
for i := 1 to datanum do read(d[i]); (* begin endブロックいらね *)
for i := 1 to pred(datanum) do begin
j := i;
for k := succ(i) to datanum do
if d[j] > d[k] then j := k;
tmp := d[j]; d[j] := d[i]; d[i] := tmp (* セミコロンいらね *)
end;
for i := 1 to datanum do writeln(d[i]);
writeln('...so modified and tested by 2channelers ;-)')
(* このまま提出するなよ *)
end.

490 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 14:51:42 ]
ありがとうございます!

491 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 21:05:37 ]
ローカルのファイルにアクセスするにはどうすればいいですか?


492 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 22:06:37 ]
>>491
Pascalには標準的な方法がありません。処理系とファイルシステム依存です。

UCSD-Pascal, Pascal/MT, MT+, Turbo/Borland Pascal, FreePascal では
assign手続きを実行しといて、resetなりrewriteなりします。

assign(ファイル変数, ファイル名);
reset(ファイル変数);
...
close(ファイル変数)

GPCだと上のBorland方言に加えて、ISO拡張Pascal標準のbind手続きが使えます。

493 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 23:26:50 ]
PASCALでCGIは作れますか?



494 名前:486&488 mailto:sage [2007/06/19(火) 23:34:10 ]
>>datanum : dataindex; (* データ数を貯めとく変数を用意するのが肝な *)
申し訳ないのですが、なぜデータ数を溜めておく変数が必要なのか教えていただけませんか

495 名前:デフォルトの名無しさん mailto:sage [2007/06/20(水) 00:17:35 ]
変数に保存しとかなきゃ何回入力を受け入れるべきか解からなくなるじゃn

496 名前:光速エスパー世代774RR mailto:sage [2007/06/20(水) 12:43:41 ]
>>493
俺はCP/M世代の棺桶片足なおさんだから、そういう今様なものは
良く知らんのだが、perlやRubyの本をチラリズムしたカンジダと、
httpdとの間でデータをやり取りする規格さえ合ってれば、
文字列操作ができさえすれば良くて、
言語自体はLISPでもCOBOLでもALGOLでもPL/Iでもいいんじゃまいか。
実際、FreePascalでCGI作ってる例があったなあ。

ttp://courses.cs.vt.edu/~cs3304/FreePascal/doc/user/node12.html

ttp://www.erg.slf.th.schule.de/informatik/c/cgi-vortrag/index.html
に説明があるけど、uncgiユニットてのを使うと便利らしい。

ttp://www.is-hanko.co.jp/info/welcome.html
も面白い。茨の道へGO!

497 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 19:52:22 ]
PASCALの問題です

問題1

西暦を入力して、「1989年は平成2年です」というように年号や年を出力するプログラムを作りなさい。
ただし各年号の境目は両方の年号を出力するようにすること。(1988年は昭和64年でも、平成元年でもある)


問題2
下記を表示するプログラムを作れ

(1)
**********
*********
********
*******
******
*****
****
***
**
*

498 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 19:57:27 ]
(2)
*
**
***
****
*****
******
*******
********
*********

問題3
Nを入力して1からNまでの和を計算するプログラムを作れ。
また1からNまでの奇数の和を計算するプログラムも作れ。


問題1はif文,2・3はfor文を使用します。
一週間ほど足りない頭で粘ってみてもわかりません。
先生は非常勤だから質問する相手もいないので
皆さんの知恵をお貸ししていただけたら幸いですm(__)m

499 名前:デフォルトの名無しさん [2007/06/22(金) 20:21:54 ]
ふーん
こういう宿題出るもんなんだな(´・ω・`)

500 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 22:28:21 ]
Program LotsOfStars(output);
var i : integer;

procedure StarBar(n : integer);
var i : integer;
begin
for i := 1 to n do write('*');
writeln
end;

begin
for i := 10 downto 1 do StarBar(i);
for i := 1 to 10 do StarBar(i)
end.


おまけ
Program SingleStar(output);
var i : integer;
begin
for i := 10 downto 1 do writeln('*' : i);
for i := 1 to 10 do writeln('@' : i)
end.


501 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 14:01:19 ]
問題3の前半
Program NeverTested(input, output);
var n : integer;
begin
read(n); write((n * (n+1)) div 2)
{ don't trust me ;-p }
end.

502 名前:497,498 mailto:sage [2007/06/24(日) 16:49:06 ]
>>500-501
大きなヒントを下さってありがとうございます♪
教養科目で卒業が掛かっているのでとても嬉しいです

問1を自分なりにやってみたのですが、
program gengou(input,output);
var a:integer;
begin
readln(a);
writeln('西暦',a,'年の元号は?');
if a>1988
then writeln('平成',a-1988,'年です')
else if a>1926
then writeln('昭和',a-1926,'年です')
else if a>1910
then writeln('大正',a-1910,'年です')
else if a>1867
then writeln('明治',a-1867,'年です')
else writeln('江戸時代です')
end.

何がダメなのかすらわかりません><
助けてください・・・

503 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 18:28:48 ]
別に何もダメじゃなくね?



504 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 18:33:10 ]
強いて言えば問いかけの前にreadlnしてるとこ。

505 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 18:38:36 ]
あ、元号境界の処理と+1してない。

506 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 19:41:59 ]
>>505
INC(年号)は俺も気づかなかった

507 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 22:34:49 ]
>502
1989年は平成元年かつ昭和64年ってのを、最初のif文で判定する必要があると思う。

508 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 23:25:06 ]
なんとなく年号のテーブルがずれてる気がした。

program gengou;
{$APPTYPE CONSOLE}

var a, i: integer;
const
era: array[0..3] of Integer = (1989, 1926, 1912, 1868);
eraname: array[0..3] of array[0..10] of char = ('平成', '昭和', '明治', '大正');
begin
readln(a);
writeln('西暦', a, '年の元号は:');
for i := 0 to 3 do
if a >= era[i] then
begin
writeln(eraname[i], a - era[i] + 1, '年');
if a = era[i] then
writeln(eraname[i + 1], a - era[i + 1] + 1, '年');
break
end

end.


509 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 23:30:14 ]
一応コンパイラはdelphi使って確認したけどコンパイラ指示除いてBorland拡張は使っていない・・・と思う。


510 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 23:32:37 ]
例題から察するに、配列はまだ習ってないんじゃないか

511 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 23:34:46 ]
>>508
>const
>era: array[0..3] of Integer = (1989, 1926, 1912, 1868);
>eraname: array[0..3] of array[0..10] of char = ('平成', '昭和', '明治', '大正');

ここでもうBorland方言でつ。

512 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 23:37:46 ]
む、そうなるとかなり長いif文の羅列になるな・・・スマンそのコードは俺の性には合わない。

513 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 23:39:22 ]
な、な、定数配列はBorland方言とな!標準Pascalじゃやっぱり書けん!



514 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 23:41:54 ]
>>513
大域変数として名前を確保し、変数初期化手続きを書いて、
大域変数はそこでまとめて面倒を見ておく、てのが常道だった。
まーそこまでストリクトに標準Pascalの流儀を守る必要もないんだけどw

あと、文字列型を使っていいのかも不明なんだよな。

515 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 23:55:10 ]
久しぶりにヴィルトの原書開いてみたらやっぱり載ってなかった。
なるほどK&Rのどちらかだったか、「これじゃ書けねえ・・・」と思った気持ちもわかる。
いや、嫌いじゃないんだよPascal。むしろ好き。
ありがとう僕の友達Pascalに会わせてくれて。

516 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 00:03:33 ]
>>515
それはラスカルだ

517 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 00:03:38 ]
>>515
定数配列や変数宣言での初期化は便利だし、可読性も高くなるんだよね。

言語仕様を出来るだけ小さくしようと言うのがヴィルト先生の狙いだったのと、
原始Pascalでは宣言の順序が決まっているから、
定数宣言の中にユーザ定義型の識別子を書けないというのがあったのかな。



518 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 00:04:48 ]
>>516
歳がバレるぞww

519 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 00:10:27 ]
いや歌は違うだろうけど最近もやってるよ。
ttp://www.nippon-animation.co.jp/pocapoca/

520 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 04:24:17 ]
テラキモスw

521 名前:光速エスパー世代774RR mailto:sage [2007/06/26(火) 12:41:47 ]
break文もBorland方言だな。標準Pならgoto文で抜け出すことになるね(こういう時のためにgotoを残してあるんで)。
era回りだけど、record型を使う方が原則的で美しいよな。それと、効率は少し落ちるけど、
eraname = packed array [1..10] of char;
era = record
beginyear, endyear : integer;
name ; eraname
end;
eraarray = array[1..4] of era;

とやってあげて、eをeraarray型の変数として、
for i := 1 to 4 do with e[i] do begin
if (a >= beginyear) and (a <= endyear) then begin
j := a - beginyear;
if j = 0 then write(name, '元年 ') else write(name, succ(j), '年 ')
end
end;
writeln

も手だな。eがソートされていなくても動くし、元年の処理の特殊性が減る。課題とは動作が違うけどね。

522 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 08:58:27 ]
ファイル型の要素にtreeは使えないの?

program test (input,output,IntFile);
type tree=^node; node=record name:char; tel:integer; left,right:tree; end;
var IntFile:file of tree; r:tree;
begin
reset(IntFile,'tel-data');
read(IntFile,r);

rewrite(IntFile,'tel-data');
write(IntFile,r);
end.

こんな感じで

523 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 21:14:24 ]
使えるけど無意味だよ。



524 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 00:48:58 ]
大学ではpascalの講義の後lisp, prologと続くのか?最近はjavaとかもやるのか?

525 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 01:50:44 ]
っていうかpascal教えてる大学ってどういうところ?
情報系だとJavaを最初に教えると思うし。

526 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 13:46:13 ]
最終的にpascal処理系を作成させる為に最初にpascalやるんじゃなかろうか?

527 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 21:03:36 ]
↓の問題なのですが、どなたか教えていただけないでしょうか?

『下記のプログラムを参考にして、ファイルからデータを読み、それを整列し、その後、
”入力された値をデータの中から二分探索によって探索する”ことを繰り返すプログラムを作成せよ』


↓↓↓↓↓下記のプログラム↓↓↓↓↓

program sort(input,output);
var d:array [1..10000] of integer;
numofdata:integer;
i,j,k:integer;
tmp:integer;
begin
read(numofdata)
for i:=1 to numofdata do
begin
read(d[i]);
end;     ↓続きます

528 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 21:05:07 ]
for i:=1 to numofdata-1 do
begin
j:=i;
for k:=i+1 to numodata do
begin
if d[j]>d[k] then j:=k;
end;
tmp:=d[j];
d[j]:=d[i];
d[i]:=tmp;
end;

for i:=1 to numofdata do
begin
writeln(d[i])
end
end.

どなたかお願いしますm(_ _)m

529 名前:光速エスパー世代774RR mailto:sage [2007/07/11(水) 00:09:35 ]
ちょいと書き直すと、
Program sort(input,output);
var d:array [1..10000] of integer;
numofdata:integer;
i,j,k:integer;
tmp:integer;
begin
read(numofdata);
for i:=1 to numofdata do read(d[i]); (* begin end いらね *)
for i:=1 to numofdata-1 do begin
j:=i;
for k:=i+1 to numofdata do if d[j]>d[k] then j:=k; (* begin end いらね *)
tmp:=d[j]; d[j]:=d[i]; d[i]:=tmp
end;

for i:=1 to numofdata do writeln(d[i]) (* begin end いらね *)
end.

ここで
tmp:=d[j]; d[j]:=d[i]; d[i]:=tmp
が肝な。その上のfor文で、i<=jで最も小さいd[j]になるようなjを探し出している。
d[i]をそのd[j]と入れ替えれば、d[i]はi以降の最小値になるわけだ。
これをバブルソートって呼ぶことは知っているよな。

530 名前:光速エスパー世代774RR mailto:sage [2007/07/11(水) 00:11:20 ]
ついでだからばぶるな挿入な。さて、新しい値を p とする

d[numofdata + 1] := p;
i := 1;
while p < d[i] do i := i + 1;

これで i は p>=d[i]を満たす最小の値になった(もうソートしてあるから)
p がたまたま d の最大値だったら、これ以上処理は必要ない。そうでなければ、
d の i 番目に p をそうぬうする。

for j := numofdata downto succ(i) do d[succ(j)] := d[j];
d[i] := p;

でそうぬう官僚。実は、p がたまたま d の最大値だった場合もこれを走らせていい。
しかし、課題は二分探索であった。あんま奇麗じゃないがfpcで試してはある。

531 名前:光速エスパー世代774RR mailto:sage [2007/07/11(水) 00:13:50 ]
procedure binarysearch(p : データの型; mini, maxi : integer);
begin
i := (mini + maxi) div 2; (* mini と maxi の間の数ならなんでも *)
if p = d[i] then writeln('Found at ', i)
else
if maxi = mini then begin
write('Not found. Must be inserted ');
if p > d[i] then write('after ')
else write('before ');
writeln(i, ' th number.')
end else
if p > d[i] then binarysearch(p, succ(i), maxi)
else binarysearch(p, mini, pred(i))
end;

これをメインプログラムから binarysearch(調べたい数, 1, numofdata)

と呼ぶ。文字列型が使えると、少し奇麗になる。d[i]を何度も評価しているから、
d[i]の評価にコストがかかる場合はローカルにコピーしとく。

532 名前:光速エスパー世代774RR mailto:sage [2007/07/11(水) 12:44:57 ]
>>531は局所変数 i を宣言する行を落としていたな。

でだ、>>530と一緒に考えると、次のような改造をすぐ思いつく。

procedure insert(p ; データの型; i : integer);
var j : integer;
begin
numofdata ;= succ(numofdata);
for j := numofdata downto succ(i) do d[j] := d[pred(j)]; (* >>530は間違いだ orz *)
d[i] := p
end;

これは p を d の i 番目にそうぬうする手続な。>>531の真ん中へんでこれを呼ぶ。
if maxi = mini then begin
i := i + ord(p > d[i]);
writeln('Not found, then instert it as ', i, ' th number.');
insert(p, i)
end

新しい数が現れたらずんずん配列に追加していく改造な。

533 名前:デフォルトの名無しさん [2007/07/11(水) 22:10:21 ]
>>527
二分探索って何か分かってる?



534 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 22:46:19 ]
どんな巨大なデータも2分で探索できる高速アルゴリズムのことです

535 名前:光速エスパー世代774RR mailto:sage [2007/07/11(水) 22:56:04 ]
データ数が1でも2分かかったりしてw

536 名前:光速エスパー世代774RR mailto:sage [2007/07/12(木) 03:35:40 ]
それはないq

537 名前:光速エスパー世代774RR mailto:sage [2007/07/12(木) 22:43:26 ]
俺の偽者がずいぶんいるな。おまいらちゃんと名前修飾しろw

538 名前:デフォルトの名無しさん [2007/08/03(金) 15:50:40 ]
初めまして、いきなりで申し訳ないんですが教えてください(_ _)

入力された論理式の充足可能性を判定するプログラムを作成せよ。
論理式は, 充足可能性判定の計算量を考慮し, 最大10変数までにする。
という問題です。
以下は注釈です。
「論理式」とは論理変数 x0,x1,x2,・・・に, 論理演算「¬(否定)」,「∧(論理積)」,「∨(論理和)」を有限回適用したものである。
論理式 F(x1,...,xn) が「充足可能である」とは, F(a1,...,an) = true となる変数割当て (a1,...,an)∈{true, false}n が存在することをいいます。
作成するプログラムには, 以下の機能を付加すること。

1:入力された論理式を,通常の式のように表示する機能
「x1∨x2」, 「¬x0」, 「(x2∨¬x3)∧x1」など

2:論理式が true となる(すべての)変数値割当てを表示する機能

「F = x1∨x2 が true になるのは
x1=true, x2=true のとき
x1=true, x2=false のとき
x1=false, x2=true のとき
よって F は充足可能である」

ちなみに入力方法はキーボードで直接入力です。
例として、
例えば, (x1∧x2)∨x3, x1∧¬x1 などはいずれも論理式です。
例えば, F1 = (x1∧x2)∨x3 とすると, x1 = true, x2 = false, x3 = true のとき F1 = true となるので, 論理式 F1 は充足可能です。 一方, F2 = x1∧¬x1 とすると, どのような x1 に対しても F2 = false となるので, F2 は充足可能ではありません。

お願いします(_ _)

539 名前:光速エスパー世代774RR mailto:sage [2007/08/03(金) 21:05:34 ]
めんどいから逆ポで式を書くことにする。
例えば a b & c ¥ | ならば (a and b) or (not c) な。変数の個数は maxvar で与える。
Program Viva2chan;
const maxvar = 'c';
type
pnode= ^node;
node = record value : boolean; next : pnode end;
var
stack : pnode;
variables : array ['a'..maxvar] of boolean;
i : integer; s : string; c : char;

procedure push(v : boolean);
var nd : pnode;
begin
new(nd);
nd^.value := v; nd^.next := stack; stack := nd
end;

function pop : boolean;
var v : boolean; nd : pnode;
begin
nd := stack; v := nd^.value; stack := nd^.next; pop := v;
dispose(nd)
end;


540 名前:光速エスパー世代774RR mailto:sage [2007/08/03(金) 21:07:01 ]
procedure ope(operation : char);
var operand : boolean;
begin
if operation in ['&', '|', '#'] then operand := pop;
with stack^ do
case operation of
'&' : value := value and operand;
'|' : value := value or operand;
'#' : value := value xor operand;
'¥' : value := not value
end
end;

function calc(source : string) : boolean;
var i : integer; c : char;
begin
for i := 1 to length(source) do begin
c := source[i];
if c in ['a'..maxvar] then push(variables[c])
else if c in ['&', '|', '#', '¥'] then ope(c)
end;
calc := pop
end;



541 名前:光速エスパー世代774RR mailto:sage [2007/08/03(金) 21:08:28 ]
procedure SetVarSet(n : integer);
var c : char;
begin
for c := 'a' to maxvar do begin
variables[c] := odd(n);
n := n div 2
end
end;

function powerof(n : integer) : integer;
begin
if n > 0 then powerof := powerof(pred(n)) * 2
else powerof := 1
end;

begin
stack := nil;
write('Enter term :'); readln(s);
for i := 1 to powerof(ord(maxvar) - ord('a') + 1) do begin
SetVarSet(i);
for c := 'a' to maxvar do write(variables[c], ' ');
writeln(calc(s))
end
end.


542 名前:光速エスパー世代774RR mailto:sage [2007/08/03(金) 21:13:10 ]
つうわけで、n個の論理型変数が張る空間を全部舐めて、結果を表示する。
ここでは手抜きでやってるけど、空間なめにはハフマン距離を使うとかっこいい。

実際には全部舐める必要はなくて、最初にtrueが帰った時に終了すればいい。
中置気泡対応は任せた。

543 名前:デフォルトの名無しさん [2007/08/04(土) 14:14:45 ]
学校の宿題が

電車をA駅からB駅で乗り換えて、C駅に行きたい。
C駅での到着希望時刻を入力したらA駅での時刻が出力されるプログラムを作れ。

なのですが、行数300越え+時刻表からデータ取り込みなんで質問しようにもどこがおかしいのかいまいち分かりません。
怪しいところを抜粋して書き込むのでアドバイスよろしくお願いします。



544 名前:543 [2007/08/04(土) 14:28:19 ]

procedure Minteger( var int: integer);
begin
repeat read(f, c) until c in['1','2','3','4','5','6','7','8','9','0'];
if c in['1','2','3','4','5','6','7','8','9','0'] then
int := ord(c) - ord('0');
end

procedure Extfile(var a:data; i :count);
var
x,y,z: integer;
begin
i := 0;
while not eof(f) do begin { ファイル末尾でない限り }
Minteger(int);
x := int;
Minteger(int);
y := int;
x := (10*x)+y;
while not eoln(f) do begin
i := i + 1;
Minteger(int); y := int;
Minteger(int); z := int;
a[i] := (x*60) + (y*10) + z + 6;
end;
readln(f); { 改行文字を読み飛ばす }
end;
n := i;
writeln(output);
end;


545 名前:543 [2007/08/04(土) 14:36:38 ]
時刻表の数字の部分をinteger型に直す手続き(procedure Minteger)と、それぞれの時間を
分の単位に直してa[i]の配列に放り込む手続き(procedure Extfile)のつもりです。

時刻表のファイル自体はちゃんと開けています。
時刻表は
08 09 19 29 39 51
09 01 11 21 31 41 51
10 01 11 21 31 41 51
のようにすべて二桁になるようにつくっています。






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

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

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