******Programming Language Pascal******
>>51 ここじゃなくて Delphi スレで聞いたほうが
答えてくれる人多いかもね。
整合配列は Delphi では扱いがちがうからどうかな?
というか
>>51 が整合配列についてきいているのかどうなんだかわからん。
Pascalって3次元配列できる?
var
unko : array of array of array of integer;
>>54 出来るよ。
次元数は言語上特に規定していなかったような気がする。
メモリとかコンパイラとかでの制限はあると思うけど。
array ofなんてネーヨ
配列の大きさを実行時に入力させた大きさにしたいんですが可能でしょうか?
>>57 すなおに動的配列を使うか、
ポインタを使って自前でメモリ確保して配列もどきを作るか
とかすると可能。
まあ、そういう質問するぐらい何だから、簡単な動的配列使いなよ。
59 :
デフォルトの名無しさん:04/12/07 23:06:54
c言語の{ }が生理的に嫌いで、pascalスレにに来ました。
>>59 #define begin {
#define end }
61 :
助けて☆:04/12/09 15:52:33
只今授業中で頭悪いので苦戦してます。
(課題)
入力されたn個の数を大きい順に並び替えるプログラムを作れ。
誰か解いてください(>_<)
「ソート アルゴリズム」で検索しような!w
>>61 脳内でどれだけ動作をシミュレートできるかが大切だよ
>>61は韓国の受験生。教えた香具師もタイーホニダ。
66 :
デフォルトの名無しさん:04/12/13 12:23:48
BEGIN
BEGIN
BEGIN
END
BEGIN
BEGIN
END
BEGIN
BEGIN
BEGIN /\___/ヽ ヽ
END / ::::::::::::::::\ つ
BEGIN . | ,,-‐‐ ‐‐-、 .:::| わ
BEGIN | 、_(o)_,: _(o)_, :::|ぁぁ
END . | ::< .::|あぁ
END \ /( [三] )ヽ ::/ああ
END /`ー‐--‐‐―´\ぁあ
BEGIN
END
END
BEGIN
BEGIN
END
END
END
BEGIN
END
END
END
67 :
デフォルトの名無しさん:04/12/13 16:33:39
WilthがPascalに参照型を採用した功罪について教えてください。
宿題だとしたら何を答に要求してるのかいまいちよくわからないけど
参照型は機能としては別に罪はないだろ。
ただfoo(a)が値渡しなのか参照渡しなのかがわからないという問題はあるね。
Cならポインタ渡しでfoo(&a)とはっきりわかる。
C#では参照渡しにfoo(ref a)とrefを明示するようになってる。
69 :
デフォルトの名無しさん:04/12/13 23:04:00
PascalはALGOL60->ALGOL68の影響を受けた言語だと理解しています。
メインフレームにALGOLマシンを目指したスタックコンピュータが
作られた時代に、あえて教育用言語にポインターを導入したことの
総括を聞きたい、ということです。宿題ではありませんが。
Pascal の構造データ型は実質上 Wirth が Pascal の前につくった
Algol W とほとんどおなじです(構文はちがいますが)。ビットシー
ケンスを集合型にとりかえたくらい。
ガーベジコレクションのない言語で複雑なデータ構造をあつかおう
とすればポインタをつかうことになるのは自然だとおもいます。
Pascalの型システムの欠陥としてよくあげられるのは、ポインタでは
なくてCASE タグつきのレコード型ですね。
>>61 program sort(input,output);
var
n : array[1..10] of integer;
i,r,sort1 : integer;
begin
{ Input data }
write('Please enter (MAX10) : ');
readln(i);
for r:=1 to i do
begin
write('Please enter the number : ');
readln(n[r])
end;
{ Processing }
for r:=1 to i do
begin
if n[r]<n[r+1] then
>>71 続き
begin
sort1:=n[r];
n[r]:=n[r+1];
n[r+1]:=sort1;
end;
end;
for r:=1 to i do
begin
writeln(n[r]);
end;
{ Ending }
writeln;
writeln('End of Job.');
end.
Free Pascal 2.0リリースおめ
>>74 ヽ( ´ー`)ノ おめ〜
Delphi死すともPascal死なず。
pascalに動的配列ってありますか?
>>76 ISO 10206 拡張Pascalではパラメタつきの型が使えるので
type T(Max:Integr) = array [0..Max] of Integer;
var P : ^T;
として「New(P, 100)」で 100個の要素をもつ配列を作ることができる。
またこの型を引数として渡して、下のように書くことができる。
function Sum(A:T):Integer;
var R, I: Integer;
begin R := 0;
for I := 0 to A.Max do R := R + A[I];
Sum := R
end;
いっぽう Delphi では上限を決めずに下のように書ける。
var X : array of Integer;
この場合、下限は 0 に決めうちになるが、上限は「SetLength(X,100)」
のようにして設定できる。上の Sum は Delphi では下のようになる。
function Sum(A:array of Integer):Integer;
var R, I: Integer;
begin R := 0;
for I := Low(A) to High(A) do R := R + A[I];
Sum := R
end;
>>74 の Free Pascal 2.0 も Delphi とおなじ方式が使える。
Delphiはオブジェクト指向言語だけど
オブジェクト指向で組むと、上司からソース追えないと言われる不思議な言語だ。
Delphiは、楽して適当にやってりゃいい。
FreePascalで例外処理のやり方が分かりません。
read(i); // iは整数型
とかして、実数をキーボードから入力するとRuntimeErrorで止まっちゃうのが嫌なんです。
入力が数字なら実数型でreadしてroundでいいけど、文字とか入れられた時は、文字列でreadして…。
そうすると、入力できる桁数の制限が…とか、考えることが増えまくるじゃないですか。
それで、例外処理したいなぁと。
ネットで調べたら
try
except
って書いてあるの見たけど、これはDelphiじゃないとだめぽってコンパイルエラーになるので、FreePascalではやり方が分からなくて…。
だれか教えてください。おねがいします。m(_ _)m
>>79 Free Pascal 2.0 では Delphi 互換(-Sd)オプションをつけることで try が
使えるようになります。
uses SysUtils;
...
try Readln(f,s); ...
except
on ex: Exception do begin
Writeln(ex.Message); ...
end;
end;
伝統的な方法は、{$I-} を使うことでファイル関係のエラーで止まらなくなります。
このときエラーがおきたかどうかを調べるには IOResult を使います。
81 :
79:2005/06/15(水) 15:19:09
-Sdでやっても通らなかったので調べてみたらFreePascal1.9.8のコンパイラでした。
2.0のでやったらできました。
どうもありがとうございました。
伝統的な方法も、いまから調べてみます。
82 :
79:2005/06/15(水) 15:23:55
>>80 できました。
ありがとうどざいます。
伝統的な方法の方も今から調べてやってみます。
83 :
79:2005/06/15(水) 20:24:40
2回も書いてしまった…
リロードしても表示されなかったんです…
キャッシュしてないのに…
しかも2回目書き間違えてるよぉ…orz
84 :
alfalfa:2005/07/24(日) 02:28:37
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| ̄ ̄ ̄ ̄ ̄ ̄ ̄
(~)
ノ,,
∋oノハヽo∈
( ´D`)(夏 ) <Pascalファンのみなしゃん暑中お見舞いれす
─ (^*フ鹵y'*_O
\\ (*ノ =メ=ヽ \
 ̄|| ̄ソ *ソ *ノ ̄ ̄||
85 :
デフォルトの名無しさん:2005/07/25(月) 10:17:32
加減乗除だけで平方根の近似値を求めるってのをpascalで表示したいのですが、どうすればよいでしょうか?
小数第一位まで求めるようにしたいです。
hint
newton method
87 :
デフォルトの名無しさん:2005/10/27(木) 01:02:41
Pascalの構文に基づいて記述された以下のアルゴリズムを考える。
while not ((x = 0) and empty) do
if x = 0 then
begin x := pop; y := y+1 end
else
if y = 0 then
begin x := x-1; y := 1 end
else
begin push(x-1); y := y-1 end;
z := y+1
このアルゴリズムは整数型の変数x,y,zと共にスタックを1つ使用していて、
pushを「実引数として与えられたデータをスタックにプッシュする手続き」、
popを「スタックからデータをポップして返す関数」、emptyを「スタックが
空のときにTRUEそうでない時にFALSEを返す関数」と仮定して使用している。
また、非負整数m,nに対して、スタックを空の状態にしてx,yにそれぞれm,n
を与えて上のアルゴリズムを実行した時の最終的なzの値をA(m,n)として部分
関数Aを定義する。(特に、計算が停止しなければzの値は未定義なのでA(m,n)
の値も未定義となる。)これについて以下の問に答えよ。
88 :
デフォルトの名無しさん:2005/10/27(木) 01:11:04
(1)スタックを空の状態にしてx,yにそれぞれ2,1を与えて上のアルゴ
リズムを実行した時に、各変数の値とスタック状態がどのように
推移するか説明して最終的なzの値を答よ。
(2)スタックに非負整数l(小文字のエル)が1つ保存されている状態
で、x,yにそれぞれ非負整数m,nを与えて上のアルゴリズムを実行し
たときの最終的なzの値をAを用いて表せ。
(3)Aの再帰的な定義を与えよ。またAは全ての非負整数に対して値が定
義されていることを証明せよ。
(4)A(3,n)=2^(n+3)-3であることを証明せよ。
Pascalは学部時代に少しやっていたのですが、もう忘れてしまいました。orz
今度、とある試験を受けることになったのですが、そこで出題されていた
過去問なんですけど、さっぱり判りません。
どなたか教えてください。よろしくお願いいたします。
89 :
デフォルトの名無しさん:2005/10/27(木) 01:32:05
ついでにもう一問。
以下のプログラムはいわゆる「エラトステネスのふるい」というアルゴ
リズムによって整数2からN(今は10000に設定)までの素数の判
定を行うプログラムの核心部をPascalで書き出したものである。このア
ルゴリズムについてはプログラムを読むことによってどういうものか理
解してほしい。Boolean型配列aの添字に対応する数字が素数であればTR
UEを、そうでなければFALSEを設定することで判定結果を保存する。
1. var a:array[1..1000000] ;
2. var i,j,N : integer ;
3. N := 10000 ;
4.
5. a[1] :=false ;
6. for i:=2 to N do a[i] :=true ;
7. for i :=2 to N div 2 do
8. for j :=2 to N div i do
9. a[i*j] := false ;
90 :
デフォルトの名無しさん:2005/10/27(木) 01:40:15
(1)今このプログラムをある計算機で実行させるとNが10000で750
×10^3単位、Nが1000000で1000×10^3単位の時間が
費やされた。ではNが500000だとどのくらいの単位の時間が消費
されるだろうか。上記程度の精度の数字で示し、その根拠を示せ。
(2)上記のプログラムは冗長な部分がある。これを正し最適化せよ。最適化
した部分はオリジナルの行番号を参照してどのような改変を加えたか具
体的に示せ。
(3)この変更によって250×10^3単位程度の時間でNがどの程度までの
範囲で素数判定ができるか答え、根拠を示せ。
以上です。よろしくお願いいたします。
>>88 (1)
x y スタック
2 1 [ ]
2 0 [1]
1 1 [1]
1 0 [0 1]
0 1 [0 1]
0 2 [1]
1 3 [ ]
1 2 [0]
1 1 [0 0]
1 0 [0 0 0]
0 1 [0 0 0]
0 2 [0 0]
0 3 [0]
0 4 [ ]
z=5
93 :
PASCAL:2005/11/06(日) 14:00:30
次の問題を疑似言語PASCALで記述せよ。
2.車種、数量、新車ー中古車の区分、の組からなる売り上げデータを多数
入力し、新車、中古車をそれぞれの数量合計を求めて出力する。入力のストッパ
は、車種が"END"であるとする。
(入力例) (出力例)
civic 1 2 古 新車 7
sunny 8 古 中古車 20
splinter 7 新
END 0 0
94 :
PASCAL:2005/11/06(日) 14:15:59
次の問題を疑似言語PASCALで記述せよ。
1.学生番号と身長(cm)の組を多数入力し、入力したデータをそのまま出力する。
ただし、身長が180以上の場合だけ。”tail"という文字を横につけ加える。
入力データのストッパは、学生番号=身長=0とする。
(入力例) (出力例)
1001 168 1001 168
1002 176 1002 176
1004 182 1004 182 tail
0 0
ここはいつから宿題やってスレになったのだ?
97 :
デフォルトの名無しさん:2006/03/19(日) 20:19:07
TurboPascal Ver.3 のコンパイラのソースコードとかって流れてないの?
本体自体はボーランドで落とせるけどさ。
>>97 gpcかFree Pascal辺りで我慢しれ。
99 :
デフォルトの名無しさん:2006/04/14(金) 03:52:14
誰か教えてくれませんか?
時、分、秒で表した時間の和を計算するプログラムを作成したい。 但し、以下の条件を
満たすように作成しなさい。
データは日、時間、分、秒を表す整数型のフィールド名 day, hour, minute, second のレコード型で定義し、
レコード名を time とせよ。秒と分の計算課程は同一であるため、 その個所は手続きを使って表現せよ。
入力として、時、分、秒の 3個のデータを 2セット入力し、その和を出力せよ。
もし、 hour の値が 24 以上であれば day に1の値を、 24未満であれば零にせよ。
宿題はスレ違いだろ多分