Pascalの宿題は俺にや ..
258:デフォルトの名無しさん
06/05/13 00:35:23
キーボードからいくつもの「文字」を入力した時、各文字が何回入力されたかを結果として返すプログラムを、入力データの記憶にリスト構造を利用して作れ。なお、入力は1文字ずつ return で区切って入力し、その終了は '.' (ピリオド) で示すものとする。
と、
課題4 - 1を参考にして、2個の1次方程式が入力されたとき、その和を出力するプログラムを作成しなさい。ただし、変数名はアルファベット1文字とし、その係数値は整数1文字とせよ。
たとえば、2 x - 5 y を1文字ずつ入力(改行で区切る)し、ピリオド '.'が入力されたならば、次の式、 - 9 y + 2 z を同じように入力する。プログラムはそれらの和、2 x - 14 y + 2 z を出力する。
2つの問題お願いします。
259:デフォルトの名無しさん
06/05/13 09:29:22
>>251
なんか良く判らんけど 適当に
{構造体の定義}
type TData=record c:char;a:Integer;next:Pointer;end;
type PData=^TData;
var root:PData;
{リストの印刷}
procedure writes;
var p:PData;
begin
p:=root;
while p<>nil do begin
if p^.a>0 then write('+');
write(p^.a,p^.c);
p:=p^.next;
end;
writeln;
end;
260:デフォルトの名無しさん
06/05/13 09:31:29
procedure func(s:string);
var w:TData;
var p:PData;
var sgn:-1..1;
var num:string;
begin
sgn:=1; w.next:=nil; num:='';
while s<>'' do begin
w.c:=s[1]; delete(s,1,1);
case w.c of
'+': begin sgn:= 1;num:=''; end;
'-': begin sgn:=-1;num:=''; end;
'0'..'9': begin
num:=num+w.c;
end;
'a'..'z','A'..'Z': begin
if num<>'' then w.a:=sgn*StrToInt(num) else w.a:=sgn;
p:=root;
while p<>nil do begin
if p^.c=w.c then begin p^.a:=p^.a+w.a; break; end;
p:=p^.next;
end;
if p=nil then begin w.next:=root; root:=@w; func(s); exit; end;
end;
'.': writes;
end;
end;
writes; readln(s); if s<>'' then func(s); {続けて処理するなら}
end;
261:デフォルトの名無しさん
06/05/13 09:33:13
なんか、改行が多すぎますが厄介だなあ
で、呼び出し部
var s:string;
begin
root:=nil;
readln(s);
func(s);
end;
素直に、ヒープか配列使った方がいいかもね
262:デフォルトの名無しさん
06/05/13 19:27:11
このコード提出した奴からは、動作説明させるからな
263:デフォルトの名無しさん
06/05/13 22:59:34
偽者はだまれ!自分独り占めにするな!
本物ならここに書き込まず裏で減点しているわ!
264:デフォルトの名無しさん
06/05/13 23:22:26
でも、単にメモリ確保の為にわざわざ再帰してるようなコードは、ちょっと目立つぞ
265:デフォルトの名無しさん
06/05/14 01:01:30
だれかエラトステネス篩について、具体例を交えながら分かりやすく解説してくれませんか?
もう訳が分かりません…
266:ミ,,゚Д゚ミノ ◆A6VzDeLphI
06/05/14 01:24:54
エラトステネスの篩の概念は、次のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 ...
このような数値列を用意して
まず最初の2は素数としてチェックして
2の倍数は素数じゃないから、フラグを立てます。
1 2 3 4 5 6 7 8 9 10 11 12 13 ...
O X X X X X
次に素数の可能性のある3は素数としてチェックして、
3の倍数はやはり素数じゃないから、フラグを立てます
1 2 3 4 5 6 7 8 9 10 11 12 13 ...
O X X X X X
O X X X
4にはすでに×がついているので、素数ではなく
次に素数だと思われる5は素数としてチェック。
5の倍数は素数ではないフラグを立てて…
1 2 3 4 5 6 7 8 9 10 11 12 13 ...
O X X X X X
O X X X
O X
と続けていくとチェックされていない所に
〇がつき、素数列が求まるという手法です。
267:ミ,,゚Д゚ミノ ◆A6VzDeLphI
06/05/14 01:29:05
具体例を交えながらわかりやすく解説するほど
労力をかけたくないから、適当に勉強汁
URLリンク(www.google.com)
上記例では、1〜13の箱を用意するために
Booleanの配列を定義して
1〜13全部をTrueにしてから
4,6,8,10,12の箱をFalseにして、
6,9,12の箱をFalseにして、
という処理をする方法よ。
268:265
06/05/14 13:48:56
どうもありがとうございました。
プログラムで読んだ時、なにがtrueやfalseなのかがよく分からなかったんですが、
やっとなんとかわかりました。ありがとうございました。
269:269
06/05/20 16:27:59
キーボードからいくつもの「文字」を入力した時、 各文字が何回入力されたかを結果として返すプログラムを、 入力データの記憶に2分木を利用して作れ。 なお、入力の終了は '.' (ピリオド) で示すものとし、 結果はアルファベット順に出力するものとする。
を
program bi( input , output );
type tree = ^node;
node = record
moji : char; kaisu : integer; left , right : tree; end;
var p , head : tree; a : char;
procedure append(var t : tree; x : char );
begin
if t = nil then begin
new( t );
t^.moji := x;
t^.kaisu := 1;
t^.left := nil;
t^.right := nil
end
else if t^.moji = x then
t^.kaisu := t^.kaisu + 1
else if ord( t^.moji ) > ord( x ) then
append( t^.left , x )
else
append( t^.right , x )
end; { append }
270:269
06/05/20 16:28:56
procedure printl(t : tree );
begin
if t <> nil then begin
writeln( t^.moji , t^.kaisu );
printl( t^.left );
end
end; { printl }
procedure printr(t : tree );
begin
if t <> nil then begin
writeln( t^.moji , t^.kaisu );
printr( t^.right );
end
end; { printr }
begin
new( head );
new( p );
head := nil;
p := head;
repeat
write( '文字: ');
readln( a );
append( p , a )
until a = '.';
printl( head );
write( p^.moji , p^.kaisu );
printr( head );
dispose( head );
dispose( p )
end.
271:269
06/05/20 16:35:39
キーボードから「整数」を読込み、 入力データを2分探索木に書込め。 書き込んだ結果を出力せよ。 なお、整数は正または負のデータとし、入力の終了は '0' (ゼロ) で 示すものとする。同じ値が入力されることはないものとせよ。
を
program kadai5no2( input , output );
type tree = ^node; node = record kazu : integer; left , right : tree; end;
var p , root : tree; a : integer;
procedure data(var t : tree; x : integer );
begin
if t = nil then begin
new( t );
t^.kazu := x;
t^.left := nil;
t^.right := nil
end
else if t^.kazu > x then
data( t^.left , x )
else
data( t^.right , x )
end; { data }
procedure printl(t : tree );
begin
if t <> nil then begin
if t^.right <> nil then begin
write( t^.right );
printl( t^.right )
end
else begin
write( t^.kazu );
printl( t^.left )
end
end
end; { print }
272:269
06/05/20 16:36:48
begin
new( root );
new( p );
root := nil;
p := root;
repeat
write( ' 数: ');
readln( a );
data( p , a);
until a = 0;
printl( p );
dispose( p );
dispose( root )
end.
としたのですがどちらも出力をどうすればいいか分かりません。出力の他にも変なところがあれば指摘してくれると嬉しいです。
273:デフォルトの名無しさん
06/05/21 18:28:02
とりあえず上はそれだと白丸のところが出力されないはず
●
/\
● ●
/| |\
●
○ ○ ●
火曜提出でしょ?
もう少し悩んでみてもいいと思われ。
あと線形リストや二分木の先頭だけdisposeすると、
2番目以降は解放じゃなくて参照不可になるんじゃなかったっけ?
274:273
06/05/21 18:28:57
ウホッ、ずれまくったorz
275:デフォルトの名無しさん
06/05/23 18:55:46
キーボードから「英文」を読込み、空白(スペース)を英単語の 区切りと見做して、英単語辞書を整順リストの形式で作成するプログラム を作りなさい。
なお、入力の終了は '.' (ピリオド) で示すものとし、 同じ英単語が入力される場合は辞書に登録してはいけない。
a. 英文はアルファベット小文字のみの単語、スペース、ピリオドだけで 作られている場合を、まず考えよ。各単語の文字数は20文字以内とせよ。
b. 次に、大文字が含まれる場合には、その文字を小文字に変換するよう に拡張せよ。
c. 最後に、数字、疑問符?、感嘆符!、クオート’、ダブルクオート"、 ハイフン-、コロン:、セミコロン;などの特殊文字が含まれている文 などを処理できれば完全である。
276:デフォルトの名無しさん
06/05/23 18:56:56
英単語辞書の問題において、 整順リストを2分木表現とするプログラムを作成せよ。
ポーランド記法で入力した四則演算式を2分木で表現し、 演算式の係数値を入力したときに、その計算結果を出力する プログラムを作れ。但し、演算式はアルファベット一文字の 変数と四則演算子のみで表現されている。
a.演算式が定数は含まない場合を考えよ。
b.整数の定数を含む場合に拡張せよ。
277:デフォルトの名無しさん
06/05/24 02:38:31
課題丸投げ早すぎw
278:デフォルトの名無しさん
06/05/24 22:20:26
>>277
そんな突っ込みより
答えキボンヌ。
279:デフォルトの名無しさん
06/05/25 20:51:54
電通大C科乙w
280:デフォルトの名無しさん
06/05/25 22:08:22
>>279
去年につづきまたあそこか
馬鹿しかいないのか?
281:デフォルトの名無しさん
06/05/25 22:36:28
馬鹿が教えてるからしょうがない。
282:デフォルトの名無しさん
06/05/25 22:46:23
>>281
言えてる…。
283:デフォルトの名無しさん
06/05/26 02:25:45
>>278
ヒント
program database( input , output );
type a = ^b ; b = record c : packed array [1..20] of char ; d : a ;
var e, f : packed array [1..20] of char ;
bagin
readln(e);
readln(f);
if e < f then
begin writeln( e , f ); end else begin writeln( f , e ); end;
end.
2単語入力のみ対応
284:デフォルトの名無しさん
06/05/26 03:29:15
電通大生なんだが・・評判落とすような事はやめてくれ!
少しは考えろよ!!
言っておくが、これくらい普通に出来ないと後々の課題なんて出来ないぞ!
その時はまた写すのか?
お前それでいいのか?
285:デフォルトの名無しさん
06/05/26 03:39:15
>>284
、--‐冖'⌒ ̄ ̄`ー-、
/⌒` 三ミヽー-ヘ,_
__,{ ;;,, ミミ i ´Z,
ゝ ''〃//,,, ,,..`ミミ、_ノリ}j; f彡
_) 〃///, ,;彡'rffッ、ィ彡'ノ从iノ彡
>';;,, ノ丿川j !川|; :.`7ラ公 '>了
_く彡川f゙ノ'ノノ ノ_ノノノイシノ| }.: '〈八ミ、、;.)
ヽ.:.:.:.:.:.;=、彡/‐-ニ''_ー<、{_,ノ -一ヾ`~;.;.;)
く .:.:.:.:.:!ハ.Yイ ぇ'无テ,`ヽ}}}ィt于 `|ィ"~
):.:.:.:.:|.Y }: :! `二´/' ; |丶ニ ノノ
) :.: ト、リ: :!ヾ:、 丶 ; | ゙ イ:} 逆に考えるんだ
{ .:.: l {: : } ` ,.__(__,} /ノ
ヽ ! `'゙! ,.,,.`三'゙、,_ /´ 「電通大の課題が 2ch ねらーのヒマ潰しになっている」と
,/´{ ミ l /゙,:-…-〜、 ) |
,r{ \ ミ \ `' '≡≡' " ノ 考えるんだ
__ノ ヽ \ ヽ\ 彡 ,イ_
\ \ ヽ 丶. ノ!|ヽ`ヽ、
\ \ヽ `¨¨¨¨´/ |l ト、 `'ー-、__
\ `'ー-、 // /:.:.} `'ー、_
`、\ /⌒ヽ /!:.:.|
`、 \ /ヽLf___ハ/ {
′ / ! ヽ
286:デフォルトの名無しさん
06/05/26 08:48:45
>>283
b a g i n
287:デフォルトの名無しさん
06/05/26 08:50:54
>>283
ほとんどヒントになってないし。
リスト構造も木構造も実装されてないし。
読み込み部分にしたって、
空白区切りをまったく無視してくれちゃってるし。
まったく、なにやってるんだか。
288:デフォルトの名無しさん
06/05/26 20:00:58
>>287
丸写しするお馬鹿さんには関係ないこと。成績表を見て泣くだけ。
289:デフォルトの名無しさん
06/05/27 10:12:38
URLリンク(up.nm78.com)
290:デフォルトの名無しさん
06/05/28 21:18:58
答えまーだ?
291:デフォルトの名無しさん
06/06/02 02:07:04
やっと落ち着いたか
292:デフォルトの名無しさん
06/06/04 09:06:23
Javaなどの新しい言語がある中で、電通大が未だにPascalを使ってプログラミングの講義をしているのは一種の男気の現れですか?
293:デフォルトの名無しさん
06/06/04 09:31:21
教えるヒトがそれ以外の言語を知らないので仕方がないのです。
294:デフォルトの名無しさん
06/06/04 17:23:42
今まさにPascal習ってる電通大生ですよっと
Pascal習う理由として、
@複数の言語を学んだほうが体系的に(で言葉あってるのか?)文法を理解できる。
APascalは教育用言語としてはふさわしい
とか言ってた気がする。
ただ、俺は大学入って初めてプログラミングに触れるようになったため、
教授の考えがきちんと伝わっていないかも知れない。
要は公式見解ではないということ
295:デフォルトの名無しさん
06/06/04 17:24:00
>>293
男気の正反対ですね。
296:デフォルトの名無しさん
06/06/04 17:25:52
今プログラミング教育用として主流になってる言語って何ですかね?
297:デフォルトの名無しさん
06/06/04 19:11:57
授業で使われている数はc/c++とJavaが圧倒的でしょう。
298:デフォルトの名無しさん
06/06/06 08:27:39
Javaはまだいいとして、C/C++って教育用途には向いてるんでしょうかね?
299:デフォルトの名無しさん
06/06/06 10:22:47
Javaが向いてる?ご冗談を
JavaよりC/C++の方が向いてるに決まってるじゃないか
300:デフォルトの名無しさん
06/06/06 18:17:03
C++がプログラミング入門用として最適の言語。
とかのたまうメルマガ鵜呑みにして強引にC++から入った俺が来ましたよ。
301:デフォルトの名無しさん
06/06/08 08:24:55
Cは良いけどC++は教育用としてはどうかとおもう
302:デフォルトの名無しさん
06/06/10 23:49:37
C++の方が明らかにCより使いやすいし。
教育用としても
オブジェクト指向のC++の方がいいに決まってるし。
303:デフォルトの名無しさん
06/06/11 05:55:38
PerlほどじゃないけどC++のオブジェクト指向もひどいぞ
「オブジェクト指向の教育」という観点からは薦められない
304:774RR
06/06/12 19:47:05
本物のプログラマはPascalを使わない。真の漢は黙ってFORTRAN77。
305:デフォルトの名無しさん
06/06/12 20:57:38
来年から電通はCになるらしいけどな
まじで頭おかしいだろあそこ
306:デフォルトの名無しさん
06/06/13 07:31:40
Rubyにすればいいのに
307:デフォルトの名無しさん
06/06/13 17:53:09
HSPにすればいいのに
308:デフォルトの名無しさん
06/06/15 12:12:15
pascalの文法には、変数名とか関数名の非終端記号があるらしんだけど
これはすべて名前(識別子)であって文法を簡単にするものであると。
原始プログラム中のその名前をみただけではどの名前であるか
判別できない。これの解決策はなにですか?
309:デフォルトの名無しさん
06/06/15 13:35:24
俺のESPを試す時がきたようだ。
例えば次のようなソースがあるとします。
if (0 < hoge) then ...
このhogeが変数なのか関数なのかはここから判別する事はできないと思います。
コンパイラはどうやっているんでしょうか?
こんな感じか?
310:デフォルトの名無しさん
06/06/15 18:01:22
ネストしたスコープの話なのかな?
311:デフォルトの名無しさん
06/06/16 00:50:41
pascalは事前に変数も関数も宣言する必要があるので問題無い。
312:デフォルトの名無しさん
06/06/26 15:11:34
モンテカルロ法を用いて1/3を求めよ。
そのときモンテカルロ法を試行する回数を、プログラム実行時に選択できるようにせよ。
313:デフォルトの名無しさん
06/06/26 18:50:02
いやです。
314:デフォルトの名無しさん
06/06/26 19:28:36
やってやらんこともないが
なぜ 1/3 なんだ?
315:デフォルトの名無しさん
06/06/27 14:23:43
パスカルの問題でわからないので教えて下さい。
問1
任意の人数に対してBMI(肥満度を判定する指標)を計算し、その平均値を出力させる。ここで,BMIとは
体重/身長/身長
で定義されるため,体重および身長を人数分だけ標準入力せよ。ここで,人数の最大は10名としてよい。なお,関数あるいは手続きを用いること。
問2
10名分のクラスの学生名前(アルファベット)を配列に保存せよ。また、最後にそれを標準出力せよ。
また、ファイル出力の場合も考えよ。
*stringを使いなさい。
316:デフォルトの名無しさん
06/06/27 14:25:35
パスカルの問題でわからないので教えて下さい。
問1
任意の人数に対してBMI(肥満度を判定する指標)を計算し、その平均値を出力させる。ここで,BMIとは
体重/身長/身長
で定義されるため,体重および身長を人数分だけ標準入力せよ。ここで,人数の最大は10名としてよい。なお,関数あるいは手続きを用いること。
問2
10名分のクラスの学生名前(アルファベット)を配列に保存せよ。また、最後にそれを標準出力せよ。
また、ファイル出力の場合も考えよ。
*stringを使いなさい。
317:デフォルトの名無しさん
06/06/27 23:08:41
このスレまだあったのか
318:デフォルトの名無しさん
06/07/01 08:42:13
リスト構造ってむずい部類?
319:デフォルトの名無しさん
06/07/01 17:20:31
>>318
リストによっては。
単純な線形ならそんなに難しくないけど、双方向になると少し難しくなって、
ツリー構造とかになると結構難しくなって。バランス木くらいになると相当
難しくなる。
320:デフォルトの名無しさん
06/07/02 01:05:23
どうむずかしいの
321:319
06/07/02 10:29:29
>>320
自分で実装してみれば分かる。
322:デフォルトの名無しさん
06/07/03 02:05:51
なんで?
323:デフォルトの名無しさん
06/07/04 01:23:08
Delphiの課題なのですが
乱数を生成して 正方形 と 円(四分円)の面積を比較することにより,
円周率 π の近似値を求める方法がある。
以下は,この方法に関する問いである。
(1) 乱数によって定まる点の分布の状況を PaintBox 上に図示せよ。
(2) 円周率 π の近似値を計算せよ。
という問題が出されました
取っ掛かりからわからないという初心者ぶりです
ご教授願えませんでしょうか
324:デフォルトの名無しさん
06/07/04 01:38:04
> 乱数を生成して 正方形 と 円(四分円)の面積を比較することにより,
> 円周率 π の近似値を求める方法がある。
この方法については理解してる?
325:デフォルトの名無しさん
06/07/04 01:42:41
ランダムに点を打ってくんじゃなかったか?
まずアルゴリズムをはっきりさせること。
326:デフォルトの名無しさん
06/07/04 01:49:15
rを半径とすると、
円の面積は Pi*r*r
正方形の面積 r*r
円の公式 x*x + y*y <= r*4
を使うんじゃないの?
327:デフォルトの名無しさん
06/07/04 01:52:04
1辺の長さがRの正方形とそれに内接する四分円とを描画する。
正方形内にランダムに点を打ち、打った点の総数と、
そのうち四分円の中に入った点の数をそれぞれカウントする。
あとはその比率から円周率を近似するくらいはわかるだろう。
328:デフォルトの名無しさん
06/07/04 17:21:07
もんてかるろ法だわな
329:デフォルトの名無しさん
06/07/04 23:09:09
円の公式は x*x + y*y <= r*r
でした。
330:323
06/07/05 00:34:12
ご教授レスありがとうございました。
自宅にDelphiがないのですが(学校にある)、
取り敢えずモンテカルロ法について調べてみました。
結果イメージとしては理解できたのですが
点を打つ方法、点を数える方法がともにわかりませんでした。
(乱数関係から検索したのですが)
何もしてないと言われても仕方ない有様ですが、
どうかその二つの作業の方法だけでも教えていただけませんでしょうか。
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を数値型に変換するのかなと
考えたんだけど、いまいちやり方わかりません
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5185日前に更新/280 KB
担当:undef