Pascalの宿題は俺にや ..
[2ch|▼Menu]
331:デフォルトの名無しさん
06/07/05 00:37:35
>>330
URLリンク(www.wikihouse.com)

332:デフォルトの名無しさん
06/07/05 01:37:50
>>330
>>331にほとんど答えが載っているが
せっかく文章練ったので。

URLリンク(sylphys.ddo.jp)

乱数 x, y を別々に発生させ、>>329の式で
4半円(図の白い部分)の中にあるか判定する。

4半円の中に入った点の数・外になった点の数をそれぞれ
変数にもって、判定結果に従ってカウントアップ。
ある程度の数の点を計算したら、点の数の比を計算すれば、面積比が出てくる。

後は、既知の円の面積の公式 4πr^2 からπを求める。

PaintBoxは自分でやってください。

333:デフォルトの名無しさん
06/07/05 07:30:25
自分で考えないと馬鹿になるぉ

334:デフォルトの名無しさん
06/07/05 21:57:17
>既知の円の面積の公式

これがクセモノ

トートロジー


335:デフォルトの名無しさん
06/07/05 22:44:29
円の面積の公式も分からないとはいくらゆとり世代でも酷すぎる

336:デフォルトの名無しさん
06/07/05 23:01:56
>>335
というか、「Piを求めるのにPiを使った円の面積の公式を使う」
というのは問題じゃないのかと>>334は言いたいんだろう。

337:デフォルトの名無しさん
06/07/05 23:05:04
>>329

338:332
06/07/05 23:20:13
いや、式がおかしいです。
モロゆとり世代ですんません

339:デフォルトの名無しさん
06/07/05 23:36:31
4πr^2って球の話なの^^

340:デフォルトの名無しさん
06/07/06 18:01:24
>>339

>>332 のは 1/4 だから
点の数の比を計算するのに
4πr^2 になるってだけの話だと思う


341:323
06/07/06 21:05:51
おかげさまで課題できました。
皆さんお世話になりました。

342:デフォルトの名無しさん
06/07/06 22:07:28
パスカルの問題でわからないのですが、教えてください。

・学籍番号と点をデータとして入力し、これを得点の高い順に並べ替え、
 順位をつけて表示する。

高い順に並べ替えるまではできるのですが、それを点じゃなくて学籍番号
で表示することができません。

343:デフォルトの名無しさん
06/07/06 22:14:41
配列2個用意して、両方並べ替える。
Delphi的に正しいのは record 使う。

344:デフォルトの名無しさん
06/07/06 22:15:12
学籍番号と得点を組にして持って、並べ替えるときに一緒に動かすんだ。

345:デフォルトの名無しさん
06/07/06 22:15:53
ワーォ

346:デフォルトの名無しさん
06/07/06 22:36:50
すいません。よくわかりません。

347:デフォルトの名無しさん
06/07/06 22:37:41
とりあえずコード書いて晒してみれ。

348:デフォルトの名無しさん
06/07/07 17:20:06
これであと学籍番号を一緒に表示したいにですが、どうすればいいですか?
SysUtils;
type rec=record
name:String;
ten:integer;
end;var stud:array[1..5]of rec;
i,j,w:integer;

begin
{ TODO -oUser -cConsole Main : この下にコードを記述してください }
for i:=1 to 5 do begin
write('no.',i,' 学籍番号:');
readln(stud[i].name);
write('no.',i,' 点数:');
readln(stud[i].ten) end;

for i:=1 to 5-1 do
for j:= i+1 to 5 do
if stud[j].ten>stud[i].ten then
begin
w:=stud[i].ten;
stud[i].ten:=stud[j].ten;
stud[j].ten:=w
end;

writeln;
for i:=1 to 5 do writeln(stud[i].ten);
writeln;
readln;
end.

349:デフォルトの名無しさん
06/07/07 19:50:11
ここまで出来ててなんでそれが出来ないんだw

350:デフォルトの名無しさん
06/07/07 20:24:19
分からんままコピペしただけかな?

最後の
for i:=1 to 5 do writeln(stud[i].ten);
に、点数を出力する文を加えればいい。

351:デフォルトの名無しさん
06/07/07 22:12:36
みなさんのおかげで何とかできました。
ありがとうございました。

352:デフォルトの名無しさん
06/07/08 01:52:57
手続きや関数での変数宣言で、varをつけるのとつけないのの違いがよくわからないです。
誰か教えてください。

353:デフォルトの名無しさん
06/07/08 01:56:06
参照渡しと値渡し

354:デフォルトの名無しさん
06/07/10 01:44:09
アホですみませんがこの2つの問題がわかりません
ぜひ教えてください



5教科のテストを行いました。それぞれのテストの点数を入力してもらい、
それぞれの点数と5教科の合計と平均をわかりやすく表示するプログラムを作成しなさい。





プログラムを作成していて、次のような関数"printAns()"が必要となりました。
printAns()は第一引数としてint型を受け、受け取った整数に50をかけて
”答えは○○です”と表示してから、その答えをint型で返します。
このような関数printAns()を製作してください。
メインとなるプログラムは次のものを流用するように。

var
a,b:Integer;

begin
Write(Output,'n ? |');
Read(Input,a);
Writeln(Output,'ここから関数');
b :=Culculate(a);
Writeln(Output,'ここまで関数');
Writeln(Output,'戻り値は ',b);

end.

355:デフォルトの名無しさん
06/07/10 02:30:58
いくらなんでも丸投げ過ぎ

356:デフォルトの名無しさん
06/07/10 02:57:04
解答者がやりたくなるような質問の仕方を研究して来い

話はそれからだ

357:デフォルトの名無しさん
06/07/10 06:41:46
>>354
>>348 を改良すれば作れるよ。

358:デフォルトの名無しさん
06/07/14 01:40:21
課題内容:

新幹線に乗るために阪急電鉄・石橋駅から梅田経由で地下鉄御堂筋線・新大
阪駅まで行きたいとする.新大阪駅に到着したい時刻を入力すると,石橋駅
で何時何分発の列車に乗ればよいかを教えてくれるプログラムを以下の3段
階に分けて作成せよ.ただし,以下の2つの条件を満たすこと.

条件:

(1) 手続きもしくは関数を用いること.
(プログラムを分かりやすくするため)

(2) 少なくとも以下の情報を出力すること.
(ユーザが使いやすいように,出力を工夫すること)

・阪急電鉄・石橋駅の発車時刻
・阪急電鉄・梅田駅への到着時刻
・地下鉄御堂筋線・梅田駅の発車時刻
・地下鉄御堂筋線・新大阪駅への到着時刻



359:デフォルトの名無しさん
06/07/14 01:41:18
段階:

(1) 平日ダイヤのみに対応する.阪急は急行しか利用しない(普通列車な
ど,急行以外の列車は無視する).

(2) 段階 (1) に加えて,阪急の全列車(特急,特急日生エクスプレス,
通勤特急,急行,準急,庄内・曽根通過待ちなしの普通,庄内・曽根
通過待ちありの普通)を利用可能にする.ただし,普通列車が後発の
特急などに追い越される可能性は無視する(追い越される普通列車を
出力してよい).さらに,土曜・休日ダイヤに対応する.

(3) 段階 (2) に加えて,後発の特急などに追い越される普通列車でなく,
後発の特急を出力するようにする

360:デフォルトの名無しさん
06/07/14 01:52:31
358、359の者なんですが、PASCALの課題で下のような時刻表を与えられていてこれ以外にもたくさんあって、
配列に一つ一つ打ち込むにはあまりに多すぎるんで、どうにかファイルを呼び出したいんですが、
教科書のようなものを読んでみていじってみても上手くいきません。
どなたか少しわかりやすく説明していただけたら嬉しいんですが…

361:デフォルトの名無しさん
06/07/14 01:53:44
急行
6 4 22 33 44 51
7 1
829 49 56
9 7 16 27 39 49 59
10 9 19
1558
16 8 18 28 38 48 58
17 7 16 26 36 46 56
18 6 17 26 36 48 57
19 8 17 28 37 48 57
20 8 17 28 38 48 58
21 8 18 28 38 48 58
22 8 18 28 38 48
23 2 14



362:デフォルトの名無しさん
06/07/14 03:55:01
>>318
リストだけに超絶に難しい。

>>360
>>228-232 あたりに載ってる。
実用的な問題ですね。

363:デフォルトの名無しさん
06/07/14 12:47:24
1行ずつスキャンして、ansiナントカで解析していけばよい

364:デフォルトの名無しさん
06/07/14 23:49:29
二分探索法を手続き宣言して使用する場合、
procedureとfunctionのどちらを使えば良いでしょうか?

また、それらに処理に必要なデータを引数として渡すようにする場合、
どういった形式が望ましいのでしょうか?

いろいろ試してみましたが、うまくいかないので…
応えて頂けると幸いです。



365:デフォルトの名無しさん
06/07/15 00:53:39
とりあえずCとかのサンプルコードを移植したら?
それからDelphiスタイルに変えればいいかと。

366:デフォルトの名無しさん
06/07/15 08:25:12
Pascal過疎ってるなぁ。

367:デフォルトの名無しさん
06/07/15 15:01:00
>>364
procedure(手続き)とfunction(関数)は値を返すか返さないか
の違いだけしかないから、値を返したいんだったらfunctionにして
値が要らないんだったらprocedureにすればいいのでは。

処理に必要なデータは渡さなきゃならないけど、どうやって渡す
かは実装する人の自由だから、好きにすればいいと思う。

368:デフォルトの名無しさん
06/07/15 22:06:51
長文で失礼します。

(1) 配列にしまわれたいくつかの整数をデータとして,
棒グラフを作成するプログラムをかけ。
(入力データ x は 0<= x <=100 をみたすとする。)
Hint:
以下の作業を,i=1 から i=n まで,
n 回繰り返す ( for 文や repeat 文を用いる)
作業:
x 方向に位置をずらしながら,
a[i] に応じた高さの細長い長方形を n 個描く

50 未満のデータに対する「棒」は赤色で表示し,
50 以上のデータに対する「棒」は青色で表示するようにせよ。

という課題なのですが



369:デフォルトの名無しさん
06/07/15 22:07:29
var n : integer;
a : array[1..20] of integer;

procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Add(Edit1.Text);
n := n + 1;
a[n] := StrToInt(Edit1.Text);

Edit1.Clear; Edit1.SetFocus;
end;

procedure TForm1.Button2Click(Sender: TObject);
var i : integer;
begin
with PaintBox1.Canvas do
begin
for i= 1 to n do

//棒グラフ作成?



370:368 369
06/07/15 22:08:25
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Memo1.Clear;
Edit1.Clear; Edit1.SetFocus;
end;

end.
という状態です。
ここまでに誤りがあるのか、また、肝心の空欄部分はどうすればいいか
教えていただけたら幸いです。



371:デフォルトの名無しさん
06/07/15 22:17:31
垢と阿保はどうすれば出ますか?

372:デフォルトの名無しさん
06/07/15 22:50:27
>>368-370
nは初期化されている? PaintBox1.Canvasはクリアされている?
棒グラフを書く前に座標軸を書かなきゃ。

棒グラフはまず「グラフ用紙に自分出てで書いて」みれば、どう
書けばいいか分かると思う。その書く手順そのままCanvasに
書けばいいだけ。

手で書く時に位置情報(ピクセル単位)を意識しながら書けば
簡単に出来ると思う。

373:364
06/07/16 10:18:47
いくつかのご指摘ありがとうございます。
なんとかがんばってみます。

374:デフォルトの名無しさん
06/07/17 01:53:46
C言語で書かれたプログラムをpascalに変換する何かってないですか?

375:デフォルトの名無しさん
06/07/17 02:53:35
Cを読む事が出来、pascalを書く事が出来る人間の脳と手

376:デフォルトの名無しさん
06/07/17 10:13:21
簡単だから自分で覚えた方がいいよ

Pascalがいかに面倒かってよく分かる

377:デフォルトの名無しさん
06/07/17 11:21:48
すごく間抜けた質問かもしれませんが
pascalのプログラムを家で作成したいのですがどこか置いてるサイトとかありますか?

378:デフォルトの名無しさん
06/07/17 11:32:06
Pascalコンパイラがどこにあるかってこと?


379:デフォルトの名無しさん
06/07/17 11:36:13
URLリンク(www.jp.freepascal.org)

16bit だったような気がするけど


380:デフォルトの名無しさん
06/07/17 11:39:35
純正 pascal にこだわらないなら
Delphi / kylix あたりでいいんじゃない?

381:377
06/07/17 11:53:57
>>379>>380
どうもありがとう。
>>379のはなんか落とせないから>>380のやつみてみます。

382:デフォルトの名無しさん
06/07/17 11:55:10
pascalのコンパイラで有名なのは

1、Delphi 6 URLリンク(www.vector.co.jp)
  登録が必要 URLリンク(www.borland.com)

2、FreePascal
 URLリンク(www.jp.freepascal.org)
 IDEで有名なのはlazarus URLリンク(www.lazarus.freepascal.org)

3、HelloPascal
 URLリンク(members.jcom.home.ne.jp)

4、カベソン
URLリンク(www.tokumaru.org)

5、gpc  GNU Pascal Compiler

383:377
06/07/17 12:22:37
>>382
すごく参考になりました。どうもありがとう。

384:デフォルトの名無しさん
06/07/18 08:53:43
うわーカベソンで今もあったんだ。
なつかしー


385:デフォルトの名無しさん
06/07/18 20:58:22
Pascalとか、わけわかないっすお

386:デフォルトの名無しさん
06/07/18 22:08:05
for文くらいまでしか理解してません、もうダメポorz
誰か助けてください。。。○投げですいませんOTL

(i) 自然数(整数)で表記される「キー」、および、8文字までの文字列で表現される「データ」を、2分木の構造で管理するプログラムであること。
*常に左右のバランスを保つAVL木であること。
(ii) プログラムの実行開始直後に、可能な操作のメニューが表示され、自在に選択でき、1つの操作が実行された後、そのメニューが再表示され、入力待ち状態になること。
(iii) 「キー」「データ」の値を入力することによりデータの登録ができること。
(iv) 二重登録を防止し、その際警告メッセージを出すこと。
(v) 「キー」の値の入力することにより、データの削除ができること。
(vi) 登録されていないデータを削除しようとすると、メニューに戻る前に警告メッセージを出すこと。
(vii) 「キー」の値を入力することにより、そのキーの値をもつデータを参照できること。
(viii) 2分木の構造(頂点間の接続関係)を表示できること。
(ix) 登録されている全データを、キーの小さい順に列挙できること。
(x) 2分木内の各頂点の(木の根からの)深さを表示できること。
---------------------------------------
*はできるとボーナス点

要解説書。手続きの処理内容、変数の説明など
解説書〆7/24
プログラムソース〆7/21
orz

387:デフォルトの名無しさん
06/07/18 22:11:39

Pascalです。。。

388:デフォルトの名無しさん
06/07/18 22:15:41
recordを使う

389:デフォルトの名無しさん
06/07/18 22:21:03
俺もレポートやんないと

390:デフォルトの名無しさん
06/07/22 13:26:54
これpascalにしてください。
URLリンク(ime.st)

391:デフォルトの名無しさん
06/07/23 07:33:13
ime.st のまま貼るなよ

392:デフォルトの名無しさん
06/07/26 12:25:21
Pascalでプログラムの実行実時間を調べるコマンドがわからないのですが、
誰かご存知でしょうか?

393:デフォルトの名無しさん
06/07/26 20:23:22
開始時と終了時に時間を取得して差を求める

394:デフォルトの名無しさん
06/07/31 05:26:56
WindowsならtimeGetTimeがms単位で測定できる。

395:774RR
06/08/31 20:25:00
やっとXcodeでFPC走るようにしたよん。記念にたまにはあげよう。

>394
それが信頼できるかはまた別物。リアルタイム処理を今のビジネス/ホビー用パソコンでやるのは
かなり無理があるよ。

DOSでTurbo Pascal使った方がいいくらい。

396:デフォルトの名無しさん
06/08/31 20:27:43
で?

397:デフォルトの名無しさん
06/09/13 15:24:53
Turbo Delphi で Pascal のコンパイルは出来ますか?

398:デフォルトの名無しさん
06/09/16 00:17:39
できます

399:デフォルトの名無しさん
06/10/06 04:12:13
integerで扱える範囲を越えた数値を代入すると、
誤った値を返したりすることってありますか?
また、そういうことを防ぐ、というかせめて
間違った値が出るということを予測できるといいなあと思うのですが

どういう文献を調べればよいのかも教えていただけると助かります!

400:デフォルトの名無しさん
06/10/06 15:33:01
integerの範囲を超えないように注意することで防げます。

401:デフォルトの名無しさん
06/10/06 15:49:03
ふつうは例外が出ると思う

402:デフォルトの名無しさん
06/10/06 17:51:51
>>400

integerの範囲?

403:デフォルトの名無しさん
06/10/06 23:07:14
low(integer)..high(integer)

404:デフォルトの名無しさん
06/10/08 03:38:29
引数のパラメータにconstを付けるのは、どういう意味(違い)があるのですか。
varなら分かりますが。

405:デフォルトの名無しさん
06/10/08 12:49:14
const も var も参照渡しだが、constは値の変更ができない。

406:デフォルトの名無しさん
06/10/15 21:14:10
すんません
手元にパスカルないんですけど
パスカルにおける論理式が真の時の返り値って
1でしょうか、それともー1でしょうか?


407:デフォルトの名無しさん
06/10/15 21:47:39
実装によりますが-1が多いです。

408:デフォルトの名無しさん
06/10/15 21:51:18
True です。

409:デフォルトの名無しさん
06/10/15 22:26:48
>>407
いやdelphiでもfpcでもord(true)は1だろ。

410:デフォルトの名無しさん
06/10/15 23:30:28
PInteger(@b)^ だと $FFFFFFFF

411:デフォルトの名無しさん
06/10/15 23:42:31
BooleanとIntegerではバイト長が異なるのでそのキャストは無意味

412:デフォルトの名無しさん
06/10/15 23:57:14
PByte(@b)^ だと $FF

413:デフォルトの名無しさん
06/10/16 00:18:18
>>408が正しいと思う。論理式は論理値しか返さないから、true
もしくはfalseしかない。1か-1かで比較すると「型が違います」と
怒られる。

414:デフォルトの名無しさん
06/10/16 00:47:39
Booleanは順序型だよ

415:デフォルトの名無しさん
06/10/16 00:56:54
だから何?

416:デフォルトの名無しさん
06/10/16 01:21:44
全ての順序型は数値とと互換性がある

417:デフォルトの名無しさん
06/10/16 01:24:20
そう。良かったね。

418:デフォルトの名無しさん
06/10/16 01:28:51
>>413
ord使えよ

419:デフォルトの名無しさん
06/10/16 01:33:50
それで?

420:デフォルトの名無しさん
06/10/16 09:04:17
>>406
0以外としか定義されてないよ。だからどっちかは風任せ

421:774RR
06/10/16 18:02:05
言語としては>408が正解だろう。
実装としては>420の言う通り取説嫁としかいいようがない。

fpcだと
boolean - false : 0 / true : 1
bytebool, wordbook, longbool - false : 0 / true : 0以外のなんでも
となっている。

422:デフォルトの名無しさん
06/10/17 00:16:06
ふーん、それが何か?

423:デフォルトの名無しさん
06/10/26 17:14:30
ユーグリッド互除法のプログラムを変更することにより正整数x、yを読み取りux+vy=gcd(x,y)
を満たす整数の組(u,v)を一つ出力するプログラムを作れ。ただし配列は用いない。

わからないのでお願いします!

424:423
06/10/26 17:42:23
program gcd(input, output);
var x0, y0, x, y, w, a1, b1, a, b, q1, u, v : integer;
begin
readln(x0, y0);
if (x0 > 0) and (y0 > 0) then begin
x := x0; y := y0; a := 1; b := 0;
while x <> 0 do begin
w := y mod x; y := x; x :=w;
q1 := y0 div x0;
a1 := b - q1 * a;
b := a;
a := a1
end;
u := b;
v := ( y - u * x0 ) div y0;
writeln('gcd(', x0:1, ', ', y0:1, ') = ', y:1);
writeln('(u,v)=(', u:1, ',', v:1, ')')
end
end.

こう作ったんですけど、x、yの値が大きくなると正しく動きません。
添削してください。

425:デフォルトの名無しさん
06/11/14 02:20:00
ポインタを使った2つの線形リストにそれぞれアルファベットを入れて、
その2つの共通部分を別の線形リストに入れて出力するプログラム

を書きたいのですが、よくわかりません。
まず、線形リストに文字を入力して、それを出力するだけのプログラムを
書いたのですが、コンパイルはできるものの実行すると無限ループになります。
何がいけないのかご指摘いただけると助かります。

↓↓つづく↓↓

426:デフォルトの名無しさん
06/11/14 02:20:58
program intersection(input,output);

type
pointer = ^celltype;
celltype = record
element : char;
next : pointer;
end;

var
listA,listB,listC : pointer;
x : char;



427:デフォルトの名無しさん
06/11/14 02:22:42
procedure insert(var p : pointer; a : char);

var
q : pointer;

begin
new(q);
q^.element:=a;
q^.next:=p;
p:=q;
end; { insert }

procedure print(p : pointer);

begin
while p<>nil do begin
write(p^.element,' ');
print(p^.next)
end
end; { print }


428:デフォルトの名無しさん
06/11/14 02:24:02
begin
readln(x);
while x<>'.' do begin
insert(listA,x);
readln(x)
end;
if listA^.element<>'.' then begin
print(listA)
end;
writeln();
dispose(listA)
end.



429:デフォルトの名無しさん
06/11/14 02:45:11
>while p<>nil do begin
>write(p^.element,' ');
>print(p^.next)
>end

pが変化してないようだが。while→ifじゃ無いか?


430:デフォルトの名無しさん
06/11/14 02:57:57
>>429
ifにしたらうまくいきました!!
逆順に出力されるけど・・・

共通要素を探す手続きのほうもがんばって作ってみます。
ありがとうございました。

431:デフォルトの名無しさん
06/11/14 22:31:52
で、その共通要素を探す手続きなのですが・・・
これのどこがだめなのかご指摘願います。

procedure search(var p,q,r : pointer);

var
found : boolean;

begin
while p<>nil do
begin
found:=false;
while q<>nil do
begin
if p^.element=q^.element then found:=true
else q:=q^.next
end;
if found then
begin
new(r);
insert(r,p^.element)
end;
p:=p^.next
end
end; { search }




432:デフォルトの名無しさん
06/11/14 22:35:54
あと、メインプログラムで

if listA^.element<>'.' then begin
print(listA)
end;

とありますが、このif文て必要ないですよね?
それから、listA,Bについてnewしてないのですが、これって問題あります、よね?
なぜか値が格納されてるみたいなのですけど・・・




433:デフォルトの名無しさん
06/11/15 01:20:23
age

434:デフォルトの名無しさん
06/11/15 13:37:51
リストに要素の重複は無いんだな。

>procedure search(var p,q,r : pointer); 
p,qは呼び出し元の値を変えんな。var取れ。

>if p^.element=q^.element then found:=true 
>else q:=q^.next 
ifが真の時、q:=q^.nextは実行されない(無限ループ)。

>new(r);
不要。

>とありますが、このif文て必要ないですよね? 
無い。

>listA,Bについてnewしてないのですが、これって問題あります、よね?
無い。むしろdispose(listA)しかしてないのが気になる。

435:デフォルトの名無しさん
06/11/21 12:46:41
>>434
大変遅ればせながらありがとうございます。
無限ループはどうすれば回避できるのでしょうか?
それから、なぜlistA,Bをnewしなくてもよいのでしょうか?
質問ばかりですいません

436:デフォルトの名無しさん
06/11/22 01:04:41
>>431
ある文字がリストにあるかどうかを調べる関数を作れば
解りやすくなると思う。


437:デフォルトの名無しさん
06/11/24 22:39:39
実数が格納されている配列があって、その実数を配列の最初から順に
足し合わせていく関数を作りたいのですが、以下の関数だとうまくいきません。
ご教授願います。

function wa(f:hairetu):real;{hairetuは100項ある実数型の配列}

var i:integer;

begin
for i:=1 to 100 do begin
wa:=wa+f[i];
i:=i+1
end
end



438:デフォルトの名無しさん
06/11/24 22:45:05
wa は何?

439:デフォルトの名無しさん
06/11/24 23:25:39
関数の名前です

440:デフォルトの名無しさん
06/11/24 23:33:39
function wa(f: hairetu): Real;
var
i: Integer;
sum: Real;
begin
sum := 0.0;
for i := 1 to 100 do sum := sum + f[i];
result := sum;
end;

こんなのはどうですか。

441:デフォルトの名無しさん
06/11/24 23:37:47
waに直接足し合わせていくのはだめなんですかね?
sumみたいな変数を用意しないとだめなんでしょうか?

442:デフォルトの名無しさん
06/11/25 00:38:40
じゃこれ。

function wa(f: hairetu): Real;
var
i: Integer;
begin
for i := 2 to 100 do f[1] := f[1] + f[i];
wa := f[1];
end;

wa := wa + f[i] とやると、右辺の wa はDelphiでは関数呼び出しと解釈されるから、無理。

443:デフォルトの名無しさん
06/12/03 00:36:41
配列に入れた値をヒープソートで絶対値とった小さい順にするプログラム教えてください。

444:デフォルトの名無しさん
06/12/03 04:23:41
ヒープソート難しいよ。

445:某TA
06/12/04 22:36:21
>>443
Wikipedia逝け
アルゴリズム載ってるから

446:デフォルトの名無しさん
06/12/05 00:08:56
>>445
そんなのもう見ました。

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

ここまではOK?

URLリンク(www.ics.kagoshima-u.ac.jp)
URLリンク(su10.sgu.ac.jp)

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

449:デフォルトの名無しさん
06/12/11 16:18:07
何が消えるようにしたいの?

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


451:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/12/13 00:51:47
function ReadInt: Integer;
var
 S: strting;
begin
 repeat
  WriteLn('数字を入力してください');
  ReadLn(S);
 until TryStrToInt(S, Result);
end;

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

お願いします。

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

455:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/12/19 01:21:31
GNU PascalをOS X上のXcodeで使ってます。
時間の計算をしたいと思いますが、如何すればいいですか?

457:デフォルトの名無しさん
06/12/19 01:36:32
求むエスパー

458:デフォルトの名無しさん
06/12/19 03:02:53
ミリ秒に変換して計算すれば良いと思う。

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

460:デフォルトの名無しさん
06/12/20 02:41:03
何がしたいのか具体的に書かないと誰も答えられないよ。

461:デフォルトの名無しさん
06/12/20 17:41:23
1 sec = 1000msec
1 min = 60 sec
1 hour = 60 min

462:光速エスパー世代774RR
06/12/26 17:59:23
バッババババビューンと空を逝くw

463: 【ぴょん吉】 【1736円】
07/01/01 01:08:04
さて、明けたことだし宿題やろ

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

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

465:デフォルトの名無しさん
07/01/21 20:33:00
やだ

466:デフォルトの名無しさん
07/01/22 00:04:54
ヒント
Form1.Canvas, Ellipse, Timer, Form1.ClientHeight


467:デフォルトの名無しさん
07/01/22 00:20:44
ここはいつからDelphiスレになったんだ?

468:デフォルトの名無しさん
07/01/22 00:21:29
あぁ、Delphiも対応であったか。失礼。

469:デフォルトの名無しさん
07/01/25 19:06:01
パスカルの入門書でおすすめありませんか?
URLリンク(www.saiensu.co.jp)
これを買おうかな、と今は思っているのですが。

470:デフォルトの名無しさん
07/01/26 03:47:12
やめとけ

471:光速エスパー世代774RR
07/01/26 12:38:49
つーか、今からPascalを勉強しようというのが… 授業かなんかかい?

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

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

定番アルゴリズムは奥村さんのアルゴリズム事典で勉強したね。
URLリンク(oku.edu.mie-u.ac.jp)

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

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

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


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

475:デフォルトの名無しさん
07/01/27 01:01:17
全く。

476:デフォルトの名無しさん
07/01/28 09:25:11
DelphiってもしかしてObjectPASCALのことですか?

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

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

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

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

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

481:光速エスパー世代774RR
07/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:デフォルトの名無しさん
07/01/31 18:38:46
ありがとうございました。後はもう少し自分であがいて見ます。


483:デフォルトの名無しさん
07/04/14 09:10:23
落ちてる?

484:デフォルトの名無しさん
07/04/14 18:35:39
GPCのバグを発見してしまったage

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

485:デフォルトの名無しさん
07/04/26 06:38:45
丸められるって?

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

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

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

488:デフォルトの名無しさん
07/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
07/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:デフォルトの名無しさん
07/06/19 14:51:42
ありがとうございます!

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


492:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/06/19 23:26:50
PASCALでCGIは作れますか?

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

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

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

URLリンク(courses.cs.vt.edu)

URLリンク(www.erg.slf.th.schule.de)
に説明があるけど、uncgiユニットてのを使うと便利らしい。

URLリンク(www.is-hanko.co.jp)
も面白い。茨の道へGO!

497:デフォルトの名無しさん
07/06/22 19:52:22
PASCALの問題です

問題1

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


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

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

498:デフォルトの名無しさん
07/06/22 19:57:27
(2)
*
**
***
****
*****
******
*******
********
*********

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


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

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

500:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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
07/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:デフォルトの名無しさん
07/06/24 18:28:48
別に何もダメじゃなくね?

504:デフォルトの名無しさん
07/06/24 18:33:10
強いて言えば問いかけの前にreadlnしてるとこ。

505:デフォルトの名無しさん
07/06/24 18:38:36
あ、元号境界の処理と+1してない。

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

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

508:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/06/25 23:30:14
一応コンパイラはdelphi使って確認したけどコンパイラ指示除いてBorland拡張は使っていない・・・と思う。


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

511:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/06/25 23:37:46
む、そうなるとかなり長いif文の羅列になるな・・・スマンそのコードは俺の性には合わない。

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

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

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

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

516:デフォルトの名無しさん
07/06/26 00:03:33
>>515
それはラスカルだ

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

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



518:デフォルトの名無しさん
07/06/26 00:04:48
>>516
歳がバレるぞww

519:デフォルトの名無しさん
07/06/26 00:10:27
いや歌は違うだろうけど最近もやってるよ。
URLリンク(www.nippon-animation.co.jp)

520:デフォルトの名無しさん
07/06/26 04:24:17
テラキモスw

521:光速エスパー世代774RR
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/07/01 21:14:24
使えるけど無意味だよ。

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

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

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

527:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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
07/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以降の最小値になるわけだ。
これをバブルソートって呼ぶことは知っているよな。


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

5402日前に更新/294 KB
担当:undef