Pascalの宿題は俺にや ..
[2ch|▼Menu]
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以降の最小値になるわけだ。
これをバブルソートって呼ぶことは知っているよな。

530:光速エスパー世代774RR
07/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
07/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
07/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:デフォルトの名無しさん
07/07/11 22:10:21
>>527
二分探索って何か分かってる?

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

535:光速エスパー世代774RR
07/07/11 22:56:04
データ数が1でも2分かかったりしてw

536:光速エスパー世代774RR
07/07/12 03:35:40
それはないq

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

538:デフォルトの名無しさん
07/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
07/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
07/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
07/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
07/08/03 21:13:10
つうわけで、n個の論理型変数が張る空間を全部舐めて、結果を表示する。
ここでは手抜きでやってるけど、空間なめにはハフマン距離を使うとかっこいい。

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

543:デフォルトの名無しさん
07/08/04 14:14:45
学校の宿題が

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

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

544:543
07/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
07/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
のようにすべて二桁になるようにつくっています。

546:543(2)
07/08/04 14:43:37
procedure ArriveSin(var Ax:integer);
var
x,y,z,mi: integer;
k: count;
begin
if (d = 1) then begin
reset(f, 'HolyUmeda'); writeln('Holyを読み込み増した。')
end
else begin
reset(f, 'WeekUmeda'); { ファイルを開く }
writeln('Weekを読み込み増した。')
end;

Extfile(a, i);

if (h < 14) then begin
k := 1;
while a[k] <= mi do
k := k+1;
Ax := a[k-1];
end
else begin
k := n;
while a[k] > mi do
k := k-1;
writeln('a[',k,'] = ',a[k]);
Ax := a[k];
end;
close(f)
end;

547:543(2)
07/08/04 14:59:52
さっきのa[i]の配列の中でmi(到着希望時刻を分単位になおしたもの)より小さいものの中で、一番大きなものを探してAxに代入しています。

hは時刻(時)で14時より早いなら前から、遅いなら後ろから調べるようにしているつもりです。

548:538
07/08/04 15:54:03
>>538です。
答えありがとうございます!
実際の入力は例えば「ab&cdl&」と入力すればいいってことですね(゚∀゚)
出力が(a∧b)∧(c∨d) となる感じですね。

あと、プログラムの解説も書いて提出しなければならないのですが・・・
もしよろしければ、解説をしていただけるとありがたいです。



549:光速エスパー世代774RR
07/08/04 17:24:23
node = record
value : boolean; term : string; next : pnode
end;

てなかんじに項を文字列としてスタックに積めるようにする。
逆ポはそれ自体構文解析してるようなもんだから、次のようにすれば中置紀宝に
できるよ。

procedure term(operation : char);
var operand, tempterm : string;
begin
if operation in ['&', '|', '#'] then operand := popt;
with stack^ do begin
case operation of
'&' : tempterm := term + ' and ' + operand;
'|' : tempterm := term + ' or ' + operand;
'#' : tempterm := term + ' xor ' + operand;
'¥' : tempterm := 'not ' + term
end;
term := '(' + tempterm +')'
end
end;


550:光速エスパー世代774RR
07/08/04 17:37:26
function disp(source : string) : string;
var i : integer; c : char;
begin
for i := 1 to length(source) do begin
c := source[i];
if c in ['a'..maxvar] then pusht(c)
else if c in ['&', '|', '#', '¥'] then term(c)
end;
disp := popt
end;

push, pop類はスタックを実装している。RPNだから単純なスタックマシンで
好きなだけ複雑な式を計算させられる。calcが手抜きパーザで、変数名を見ると
スタックに値を積み、演算子を見ると、opeで演算を行いスタックトップに値を残す。
最後にpopすれば式全体の値になる。
変数空間を舐めるのはSetVarSetで、0から始まる2^変数個の整数を生成して、
得られた整数の各ビットを変数の値に代入している。


551:光速エスパー世代774RR
07/08/04 17:54:07
for i := 1 to powerof(ord(maxvar) - ord('a') + 1) do
はこれでもいいけど、
for i := 0 to pred(powerof(ord(maxvar) - ord('a') + 1)) do
の方が見栄えがいいな。

「変数空間を舐めるのはSetVarSetで、0から始まる2^変数個の整数を生成して、
得られた整数の各ビットを変数の値に代入している。」は
「変数空間を舐めるために、0から始まる2^変数個の整数を生成して、得られた
整数の各ビットをSetVarSetで各変数の値に代入している。」

552:光速エスパー世代774RR
07/08/04 18:15:10
>>543
時刻表ってのは基本的に列車の配列なのな。
列車をどうデータ化するかが問題じゃな。
別線を通ったり、優等列車だったりして特定の駅に停まらないことを表現するのも
忘れてはいけないのな。

駅乙にある時刻までに到着する、
駅乙に到着する前に駅甲に停車する列車のうちで、
駅甲の発車時刻が一番遅いものを見つける。この操作を二回繰り返せばいい。

553:デフォルトの名無しさん
07/08/06 17:29:56
>>548です。ありがとうございます。
実際に実行してみました。
Enter term: の後に a b & c \ | と入力すると
TRUE FALSE FALSE TRUE
FALSE TRUE FALSE TRUE
TRUE TRUE FALSE TRUE
FALSE FALSE TRUE FALSE
TRUE FALSE TRUE FALSE
FALSE TRUE TRUE FALSE
TRUE TRUE TRUE TRUE
FALSE FALSE FALSE TRUE
と表示されました。これは左から a, b, c, [(a and b) or (not c)]
となっているとわかりました。
実はプログラムへの要求事項があって
入力された論理式を,通常の式のように表示する機能
(例えば 入力が「a b |」 ならば 出力で「(a∨b」と表示される)
論理式が true となる(すべての)変数値割当てを表示する機能
の二つの機能、まとめると
「F = a∨b が true になるのは
a=true, b=true のとき
a=true, b=false のとき
a=false, b=true のとき
よって F は充足可能である」
こういうような形で表示しなければならないらしいんです。
こうするにはどうしたらいいのでしょうか?
何度もすみません^^;





554:光速エスパー世代774RR
07/08/07 00:35:55
「普通の式」で書くのは549-550のを久美こんでくれたまへ
もひとつのは、式の評価がtrueな時だけ出力すればいいから簡単。

ただねえ、10変数まで許すんでしょ、変数の値の集合には1024個の
元があって、式(変数1)を真にするのは500個、変数1-10の論理和をとれば
1023個で真になる。そんなのを表示しろというのも、若干野蛮な問題だと
思うなww


555:デフォルトの名無しさん
07/08/07 15:51:13
>>553です。ありがとうございます。
教えていただいたプログラムに549ー550を加えてみました。
Program Viva2chan;
const maxvar = 'c';
type
pnode= ^node;
node = record
value : boolean; term : string; 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;



556:デフォルトの名無しさん
07/08/07 15:52:20
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 := not value
end
end;








557:デフォルトの名無しさん
07/08/07 15:53:13
function disp(source : string) : string;
var i : integer; c : char;
begin
for i := 1 to length(source) do begin
c := source[i];
if c in ['a'..maxvar] then pusht(c)
else if c in ['&', '|', '#', '\'] then term(c)
end;
disp := popt
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.

558:デフォルトの名無しさん
07/08/07 15:54:01
5ー7行目を549のように書き換えました。
60ー83行目に549ー550を追加しました。
コンパイルすると
push, pop, ope, calc, SetVarSet, term
"datakozo.p", line 62: Warning: Symbol 'POPT' is not defined [221]
"datakozo.p", line 62: Warning: Mixing non-strings with strings [170]
, disp
"datakozo.p", line 80: Warning: Symbol 'PUSHT' is not defined [221]
"datakozo.p", line 83: Warning: Symbol 'POPT' is not defined [221]
"datakozo.p", line 83: Warning: Mixing non-strings with strings [170]
, powerof, Viva2chan

Translation completed.
datakozo.c: 関数 `term' 内:
datakozo.c:116: `popt' が宣言されていません (この関数内で最初に利用)
datakozo.c:116: (未宣言の各変数については、それが最初に現われたそれぞれの関数
datakozo.c:116: に対して一度だけ報告されます。)
datakozo.c: 関数 `disp' 内:
datakozo.c:162: `popt' が宣言されていません (この関数内で最初に利用)

となりました。この場合はどうなのでしょうか?
あと、trueのときだけを表示するには下から4行目を換えればいいのかなと思ったのですがどうでしょうか?

559:デフォルトの名無しさん
07/08/23 16:57:39
約分をするプログラムの作り方を教えてください


560:光速エスパー世代774RR
07/08/24 01:34:38
最近はBASIC屋に化けてるww

約分ってのは分母子を最大公約数で割ればいいわけだから、
よーするに最大公約数を求める問題にいきつく。
これは二千年以上前から判っている方法で溶ける。FPCでテスト墨。

Program Euclid;

function GCD(m, n : integer) : integer;
begin
if n = 0 then GCD := m
else if m mod n = 0 then GCD := n
else GCD := GCD(n, m mod n)
end;

begin
writeln(GCD(123, 12))
end.

エウクレイデス先生はとても偉かったし、算法も高効率だが、
このコード自体の効率はわるいよ。


561:デフォルトの名無しさん
07/08/24 16:43:39
有賀と

562:nao
07/08/24 17:03:06
data.txt(100個の英単語がアルファベット順)というファイルに、
新しく単語を入力、またはそのファイルから単語を削除するプログラムを
どなたか作ってください。お願いします。


563:デフォルトの名無しさん
07/08/24 17:24:41
おい!誰ぞ!

パスカルの後継言語ヘクトパスカル作れよ!

564:デフォルトの名無しさん
07/08/24 17:59:51
そこはあえてバールと言おうぜ。

565:光速エスパー世代774RR
07/08/24 21:40:07
どんなに気圧が低くても、愛の風は風力3w

566:デフォルトの名無しさん
07/09/20 18:01:08
program EX01(input,output);
var D1,D2,S,D,P,Q:integer;
begin
read(D1,D2);
S:=D1+D2;D:=D1-D2;P:=D1*D2;Q:=D1 dir D2;
writeln(D1,D2);
writeln(S,D,P,Q);
end.
整数の四則演算なのですが、Windowsで保存するときの拡張子を教えてください。

567:566
07/09/20 22:50:15
急いでいたので、言葉が足りなかったかもしれません…。
今日から大学での講義がスタートして、教科書もなんにもなく、いきなり出された宿題なので、さっぱり分かんないのです。
C言語でやっていたように、Windowsのメモ帳でプログラムを作って、
【.cpp】ではない何かで保存→コマンドプロンプトで実行
というようにやりたいのですが、いろいろと教えていただきたいです。

568:デフォルトの名無しさん
07/09/20 22:51:10
EX01.pasじゃだめなの?

569:デフォルトの名無しさん
07/09/20 23:06:12
>>567
開発環境、つか、コンパイラは何を使っているんですか?

570:デフォルトの名無しさん
07/09/20 23:07:14
コマンドプロンプトでは、
C:\Documents and Settings\user>cd My Documents
C:\Documents and Settings\user\My Documents>bcc32 EX01.pas
C:\Documents and Settings\user\My Documents>EX01.exe
って感じでおkですか?

571:567
07/09/20 23:10:24
>>569
見てみたら、C++ Builderってやつでした。
これじゃPascalは無理か…

572:デフォルトの名無しさん
07/09/20 23:30:40
>>566
そのソースプログラムをFree Pascal Compiler 2.0で
コンパイルしてみたらエラーが出たよ。dirはdivだね。

誤 Q:=D1 dir D2;
正 Q:=D1 div D2;

573:デフォルトの名無しさん
07/09/20 23:38:05
>>571
ぼくはLinuxユーザーですが、
Free PascalにはWindows用のものもあるようですから
Free Pascalをインストールして試してみられてはいかがでしょう?

URLリンク(www.freepascal.org)
このサイトのDownloadというリンクをクリックしてみてください。
Win32, Win64 and WinCEというのがあるはずです。

574:デフォルトの名無しさん
07/09/20 23:42:41
ちなみに、Free Pascalについてはこのページが参考になります。
URLリンク(www.ss.u-tokai.ac.jp)

575:567
07/09/21 00:00:08
>>572
板書の写し間違いですね。ありがとうございます。

>>573
dです!今すぐダウンロード&インストールします!

576:567
07/09/21 01:00:56
うおおおおおおおおお!!!!!!!!
できました!!!!!!!!マジdクス!

来週からもよろしくお願いしますwww

577:567
07/09/21 01:14:12
てへ、もういっちょ教えてくださいw
さっきのを、整数じゃなくて実数にするのですが、
program PR01(input,output);
real D1,D2,S,D,P,Q:integer;
begin
read(D1,D2);
S:=D1+D2;D:=D1-D2;P:=D1*D2;Q:=D1/D2;
writeln(D1,D2);
writeln(S,D,P,Q);
end.
だとエラーが出るんですけど、どこが違うのでしょう?

578:567
07/09/21 01:20:25
2行目は
var D1,D2,S,D,P,Q:real;
ですね。でもまだ上手くいかない気が…。

579:567
07/09/21 02:11:32
うお、S:6:2とかにしないと、桁数がおかしなことになるんですね。
解決しました!

580:デフォルトの名無しさん
07/09/30 19:15:06
 

581:デフォルトの名無しさん
07/10/03 00:21:35
一番短いパスカルのプログラムってどんなのですか?
文字数が一番少ないものを作れという課題が出たのですが…


582:デフォルトの名無しさん
07/10/03 00:22:35
ageてしまえ

583:デフォルトの名無しさん
07/10/03 00:28:23
program a;
begin
end.

584:デフォルトの名無しさん
07/10/03 13:45:25
>>583
改行コードをスペースにすれば(環境によっては)1文字分減るかも。

585:デフォルトの名無しさん
07/10/03 17:01:06
短すぎてびっくりしましたw それでもいいんですね。ありがとうございます。
ついでにこれも…。
☆頭書きをBNF記法で表せ。
☆整数「43221」を読み込み、逆順にして、元のデータと共に出力せよ
☆次の余剰を調べよ
14 mod 4
-14 mod 4
14 mod -4
-14 mod -4

586:光速エスパー世代774RR
07/10/03 18:35:48
program a;begin end.

Pascalのセミコロンは区切り子なので、改行もスペースもいらない。

587:デフォルトの名無しさん
07/10/03 19:09:53
>>585
>☆頭書きをBNF記法で表せ。
何の頭書き?

>☆整数「43221」を読み込み、逆順にして、元のデータと共に出力せよ
正数を文字列にしてひっくり返せばいいの?

>☆次の余剰を調べよ
何が分からないの?その式をそのまま実行して出力したんじゃダメなの?

588:デフォルトの名無しさん
07/10/04 00:44:16
program PR0203(input,output);
var W,L,H,V,S:integer;
begin
readln(W,L);raldln(H);writeln(W,L,H);
V:=W*L*H;S:=2*(W*(L+H)+L*H);
writeln(V,S);
end.

これでエラーが出るのは何故なんでしょう?

PR0203.pas(4,21) Error: Identifier not found "raldln"
PR0203.pas(4,24) Error: Illegal expression
PR0203.pas(4,25) Warning: Variable "H" does not seem to be initialized
PR0203.pas(8) Fatal: There were 2 errors compiling module, stopping
Fatal: Compilation aborted
Error: C:\FPC\2.2.0\bin\i386-Win32\ppc386.exe returned an error exitcode (normal
if you did not specify a source file to be compiled)

と出たのですが、よくわかりません。

589:デフォルトの名無しさん
07/10/04 00:46:47
コンパイラ「raldln なんて関数ねーよ」

590:光速エスパー世代774RR
07/10/04 00:47:49
>>588
>raldln(H)

そらー単純にミスタイプづら。
「raldlnなんつー識別子はないどごるぁ」ってコンパイラが逝ってるじゃん。

591:光速エスパー世代774RR
07/10/04 00:51:47
>>589
うふっ、けこーんね♥
こんど一緒にゐると先生の所にいきませんこと?
ねぇってば、ねぇ、ねぇ

それにしても、どう指を動かすとイク^H^Hこんなtypoするんだろうなw

592:デフォルトの名無しさん
07/10/04 00:54:51
ひゃー、タイプミスはずかし…。
>>585の頭書きなんですけど、

program ●●●(input,output)

の事らしいです。BNFをぐぐってもいまいち理解出来なくて。

593:デフォルトの名無しさん
07/10/04 01:08:58
<頭書き> ::= <名前> "(input,output)"

こんなんでいいのけ??

594:デフォルトの名無しさん
07/10/04 02:03:34
URLリンク(imepita.jp)

とっさに書きました。
これをBNFに書き換えるのを教えてください!!
お願いします!!!!!

595:デフォルトの名無しさん
07/10/04 02:14:44
URLリンク(videointroplayer.web.fc2.com)

596:デフォルトの名無しさん
07/10/04 02:44:32
>>585の2個目

program PR0231(input,output);
var D,X,S:integer;
begin
read(D);
X:=D;S:=0;

S:=10*S+X mod 10;
X:=X div 10;
S:=10*S+X mod 10;
X:=X div 10;
S:=10*S+X mod 10;
X:=X div 10;
S:=10*S+X mod 10;
X:=X div 10;
S:=10*S+X mod 10;

writeln(D,S);
end.

これで出ないのはなぜ、、、。

597:デフォルトの名無しさん
07/10/04 07:05:52
できました!
ありがとうです!!

598:デフォルトの名無しさん
07/10/04 09:03:54
いいよいいよ。どんどん宿題をオープンにしちゃって! 他の人も勉強になるから。

599:デフォルトの名無しさん
07/10/04 09:16:42
バッカス・ナウア記法って、そういや昔『やさしいコンピュータ科学』を読んだときに
Turbo Pascalの概要が解説されているところで使われていたのを思い出した。
<> -> <> こんな感じの<>を使った記述。ちがったっけ?




600:光速エスパー世代774RR
07/10/04 19:18:53
>>596

>S:=10*S+X mod 10;
>X:=X div 10;
>S:=10*S+X mod 10;
>X:=X div 10;
>S:=10*S+X mod 10;
>X:=X div 10;
>S:=10*S+X mod 10;
>X:=X div 10;
>S:=10*S+X mod 10;

次は、「自動化ちうのをしたくて電算機プログラムやってるのに、
なんでオラさはこんな5回も6回もコピペしなきゃなんねえだべ」と思ってみよう。

手抜きとぐうたら根性こそプログラミングの推薬ww

601:デフォルトの名無しさん
07/10/08 02:02:31
exp(x)とかodd(x)みたいな感じで、even(x)って存在するの?

602:デフォルトの名無しさん
07/10/08 07:27:53
not odd(x) でいいーぶん

603:デフォルトの名無しさん
07/10/08 10:02:52
>>602
初めて知った!d!
ついでに。
なにが違うんじゃー
全部0って出てくるー

program PR0331(input,output);
var D1,D2:real;
var T1,T2,T3,T4,R1,R2,R3,R4:integer;
begin
read(D1,D2);
T1:=trunc(D1);T2:=trunc(D2);T3:=trunc(-D1);T4:=trunc(-D2);
R1:=round(D1);R2:=round(D2);R3:=round(-D1);R4:=round(-D2);
writeln('trunc(',D1:2:1,')=',T1:2,'trunc(',D2:2:1,')=',T2:2,'trunc(',-D1:2:1,')=',T3:2,'trunc(',-D2:2:1,')=',T4:2);
writeln('round(',D1:2:1,')=',R1:2,'round(',D2:2:1,')=',R2:2,'round(',-D1:2:1,')=',R3:2,'round(',-D2:2:1,')=',R4:2);
end.

あと、もうちょいシンプルにできないのかな、これw


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

5185日前に更新/280 KB
担当:undef